<?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>171305</bug_id>
          
          <creation_ts>2017-04-25 18:18:43 -0700</creation_ts>
          <short_desc>Speedometer: Update the Backbone.js implementation to a more recent library version</short_desc>
          <delta_ts>2017-05-11 19:46:53 -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>
          
          
          <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>1301378</commentid>
    <comment_count>0</comment_count>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-04-25 18:18:43 -0700</bug_when>
    <thetext>As part of Speedometer 2.0 (https://bugs.webkit.org/show_bug.cgi?id=170513), the Backbone.js implementation of TodoMVC needs to be updated to a more recent version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301380</commentid>
    <comment_count>1</comment_count>
      <attachid>308181</attachid>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-04-25 18:21:24 -0700</bug_when>
    <thetext>Created attachment 308181
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306595</commentid>
    <comment_count>2</comment_count>
      <attachid>308181</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-05-09 14:50:49 -0700</bug_when>
    <thetext>Comment on attachment 308181
Patch

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

&gt; PerformanceTests/ChangeLog:7
&gt; +        Updates the Backbone.js TodoMVC implementation to latest

Add a blink line above this.

&gt; PerformanceTests/ChangeLog:52
&gt; +        (else):

Are these functions modified? If not, we should just get rid of these inline comments.

&gt; PerformanceTests/ChangeLog:128
&gt; +        (typeof.module.string_appeared_here.typeof.module.exports.string_appeared_here.true):

Please remove these inline comments if files are simply imported from somewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307655</commentid>
    <comment_count>3</comment_count>
      <attachid>309839</attachid>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-05-11 18:12:49 -0700</bug_when>
    <thetext>Created attachment 309839
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307656</commentid>
    <comment_count>4</comment_count>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-05-11 18:13:10 -0700</bug_when>
    <thetext>Added a blank line above the title and removed inline comments. PTAL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307688</commentid>
    <comment_count>5</comment_count>
      <attachid>309839</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-11 19:40:28 -0700</bug_when>
    <thetext>Comment on attachment 309839
Patch

Rejecting attachment 309839 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, &apos;--parent-command=commit-queue&apos;, 309839, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
a48a49823dfb07f4bf990e6356130677633
r216709 = 762031772c38451f69aa1fd7308f0e4ba8a2af21
r216710 = 2d96e9eb3105de5c55e9a3b37102a61b56e717e5
r216711 = e6f5012ae5d3cb699a776fedc2b51eb16f8aa4ec
r216712 = bcabe4ed74dbf7146ae1868f3165ab34cd5764fa
r216713 = 0f39ca8af1438b885163d4e799cd96825430c98e
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/origin/master.

Full output: http://webkit-queues.webkit.org/results/3722934</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307694</commentid>
    <comment_count>6</comment_count>
      <attachid>309839</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-05-11 19:46:52 -0700</bug_when>
    <thetext>Comment on attachment 309839
Patch

Clearing flags on attachment: 309839

Committed r216716: &lt;http://trac.webkit.org/changeset/216716&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307695</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-05-11 19:46:53 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308181</attachid>
            <date>2017-04-25 18:21:24 -0700</date>
            <delta_ts>2017-05-11 18:12:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171305-20170425182123.patch</filename>
            <type>text/plain</type>
            <size>975990</size>
            <attacher name="Addy Osmani">addyo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NjgzCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGVjNDZiZjNlOGFh
MmIyMTYyMjE3ZWMxNDJiMGMzOWQwYTk5ZGFlZmMuLjZlMmI4OGQ2NzExY2RlOGFhNDExZjE0ZmRk
YjdkNjZkZDg2NzMxODUgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzI4IEBACisyMDE3LTA0
LTI1ICBBZGR5IE9zbWFuaSAgPGFkZHlvc21hbmlAZ21haWwuY29tPgorCisgICAgICAgIFNwZWVk
b21ldGVyOiBVcGRhdGUgdGhlIEJhY2tib25lLmpzIGltcGxlbWVudGF0aW9uIHRvIGEgbW9yZSBy
ZWNlbnQgbGlicmFyeSB2ZXJzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzEzMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKyAgICAgICAgVXBkYXRlcyB0aGUgQmFja2JvbmUuanMgVG9kb01WQyBpbXBsZW1lbnRhdGlv
biB0byBsYXRlc3QKKworICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9ib3dlci5qc29uOiBSZW1vdmVkLgorICAgICAg
ICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9i
YWNrYm9uZS9ib3dlcl9jb21wb25lbnRzL2JhY2tib25lLmxvY2FsU3RvcmFnZS9iYWNrYm9uZS5s
b2NhbFN0b3JhZ2UuanM6IFJlbW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL2Jvd2VyX2NvbXBvbmVudHMv
anF1ZXJ5L2pxdWVyeS5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvYm93ZXJfY29tcG9uZW50
cy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzczogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvYm93ZXJf
Y29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzOiBSZW1vdmVkLgorICAgICAgICAqIFNw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9u
ZS9ib3dlcl9jb21wb25lbnRzL3RvZG9tdmMtY29tbW9uL2JnLnBuZzogUmVtb3ZlZC4KKyAgICAg
ICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
YmFja2JvbmUvYm93ZXJfY29tcG9uZW50cy91bmRlcnNjb3JlL3VuZGVyc2NvcmUuanM6IFJlbW92
ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2JhY2tib25lL2luZGV4Lmh0bWw6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL2pzL2FwcC5qczoK
KyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvYmFja2JvbmUvanMvYmFja2JvbmUuc3luYy5qczogQWRkZWQuCisgICAgICAgIChCYWNr
Ym9uZS5zeW5jKToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvanMvY29sbGVjdGlvbnMvdG9kb3MuanM6CisgICAg
ICAgIChUb2Rvcy5CYWNrYm9uZS5Db2xsZWN0aW9uLmV4dGVuZC5jb21wbGV0ZWQpOgorICAgICAg
ICAoVG9kb3MuQmFja2JvbmUuQ29sbGVjdGlvbi5leHRlbmQucmVtYWluaW5nKToKKyAgICAgICAg
KFRvZG9zLkJhY2tib25lLkNvbGxlY3Rpb24uZXh0ZW5kLm5leHRPcmRlcik6CisgICAgICAgIChU
b2Rvcy5CYWNrYm9uZS5Db2xsZWN0aW9uLmV4dGVuZC5jb21wYXJhdG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvYmFja2JvbmUvanMvbW9kZWxzL3RvZG8uanM6CisgICAgICAgIChhcHAuVG9kby5CYWNrYm9u
ZS5Nb2RlbC5leHRlbmQudG9nZ2xlKToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvanMvcm91dGVycy9yb3V0ZXIu
anM6CisgICAgICAgIChUb2RvUm91dGVyLkJhY2tib25lLlJvdXRlci5leHRlbmQuc2V0RmlsdGVy
KToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvYmFja2JvbmUvanMvdmlld3MvYXBwLXZpZXcuanM6CisgICAgICAgIChhcHAuQXBw
Vmlldy5CYWNrYm9uZS5WaWV3LmV4dGVuZC5pbml0aWFsaXplKToKKyAgICAgICAgKGFwcC5BcHBW
aWV3LkJhY2tib25lLlZpZXcuZXh0ZW5kLnJlbmRlcik6CisgICAgICAgIChhcHAuQXBwVmlldy5C
YWNrYm9uZS5WaWV3LmV4dGVuZC5hZGRPbmUpOgorICAgICAgICAoYXBwLkFwcFZpZXcuQmFja2Jv
bmUuVmlldy5leHRlbmQuYWRkQWxsKToKKyAgICAgICAgKGFwcC5BcHBWaWV3LkJhY2tib25lLlZp
ZXcuZXh0ZW5kLmZpbHRlck9uZSk6CisgICAgICAgIChhcHAuQXBwVmlldy5CYWNrYm9uZS5WaWV3
LmV4dGVuZC5maWx0ZXJBbGwpOgorICAgICAgICAoYXBwLkFwcFZpZXcuQmFja2JvbmUuVmlldy5l
eHRlbmQubmV3QXR0cmlidXRlcyk6CisgICAgICAgIChhcHAuQXBwVmlldy5CYWNrYm9uZS5WaWV3
LmV4dGVuZC5jcmVhdGVPbkVudGVyKToKKyAgICAgICAgKGFwcC5BcHBWaWV3LkJhY2tib25lLlZp
ZXcuZXh0ZW5kLmNsZWFyQ29tcGxldGVkKToKKyAgICAgICAgKGFwcC5BcHBWaWV3LkJhY2tib25l
LlZpZXcuZXh0ZW5kLnRvZ2dsZUFsbENvbXBsZXRlKToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvanMvdmlld3Mv
dG9kby12aWV3LmpzOgorICAgICAgICAoYXBwLlRvZG9WaWV3LkJhY2tib25lLlZpZXcuZXh0ZW5k
LmluaXRpYWxpemUpOgorICAgICAgICAoYXBwLlRvZG9WaWV3LkJhY2tib25lLlZpZXcuZXh0ZW5k
LnJlbmRlcik6CisgICAgICAgIChhcHAuVG9kb1ZpZXcuQmFja2JvbmUuVmlldy5leHRlbmQudG9n
Z2xlVmlzaWJsZSk6CisgICAgICAgIChhcHAuVG9kb1ZpZXcuQmFja2JvbmUuVmlldy5leHRlbmQu
aXNIaWRkZW4pOgorICAgICAgICAoYXBwLlRvZG9WaWV3LkJhY2tib25lLlZpZXcuZXh0ZW5kLnRv
Z2dsZUNvbXBsZXRlZCk6CisgICAgICAgIChhcHAuVG9kb1ZpZXcuQmFja2JvbmUuVmlldy5leHRl
bmQuZWRpdCk6CisgICAgICAgIChhcHAuVG9kb1ZpZXcuQmFja2JvbmUuVmlldy5leHRlbmQuY2xv
c2UpOgorICAgICAgICAoYXBwLlRvZG9WaWV3LkJhY2tib25lLlZpZXcuZXh0ZW5kLnVwZGF0ZU9u
RW50ZXIpOgorICAgICAgICAoYXBwLlRvZG9WaWV3LkJhY2tib25lLlZpZXcuZXh0ZW5kLnJldmVy
dE9uRXNjYXBlKToKKyAgICAgICAgKGFwcC5Ub2RvVmlldy5CYWNrYm9uZS5WaWV3LmV4dGVuZC5j
bGVhcik6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2JhY2tib25lL25vZGVfbW9kdWxlcy9iYWNrYm9uZS9iYWNrYm9uZS5qczog
UmVuYW1lZCBmcm9tIFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL2Jvd2VyX2NvbXBvbmVudHMvYmFja2Jv
bmUvYmFja2JvbmUuanMuCisgICAgICAgIChlbHNlKToKKyAgICAgICAgKGFkZE1ldGhvZCk6Cisg
ICAgICAgIChhZGRVbmRlcnNjb3JlTWV0aG9kcyk6CisgICAgICAgIChjYik6CisgICAgICAgICht
b2RlbE1hdGNoZXIpOgorICAgICAgICAoZXZlbnRzQXBpKToKKyAgICAgICAgKEV2ZW50cy5vbik6
CisgICAgICAgIChpbnRlcm5hbE9uKToKKyAgICAgICAgKEV2ZW50cy5saXN0ZW5Ubyk6CisgICAg
ICAgIChvbkFwaSk6CisgICAgICAgIChFdmVudHMub2ZmKToKKyAgICAgICAgKEV2ZW50cy5zdG9w
TGlzdGVuaW5nKToKKyAgICAgICAgKG9mZkFwaSk6CisgICAgICAgIChFdmVudHMub25jZSk6Cisg
ICAgICAgIChFdmVudHMubGlzdGVuVG9PbmNlKToKKyAgICAgICAgKG9uY2VNYXApOgorICAgICAg
ICAoRXZlbnRzLnRyaWdnZXIpOgorICAgICAgICAodHJpZ2dlckFwaSk6CisgICAgICAgICh0cmln
Z2VyRXZlbnRzKToKKyAgICAgICAgKE1vZGVsLkJhY2tib25lLk1vZGVsKToKKyAgICAgICAgKG1h
dGNoZXMpOgorICAgICAgICAoc2V0IGlmKToKKyAgICAgICAgKGNoYW5nZWRBdHRyaWJ1dGVzKToK
KyAgICAgICAgKG9wdGlvbnMuc3VjY2Vzcyk6CisgICAgICAgIChmZXRjaCk6CisgICAgICAgIChz
YXZlKToKKyAgICAgICAgKGRlc3Ryb3kpOgorICAgICAgICAodXJsKToKKyAgICAgICAgKGlzTmV3
KToKKyAgICAgICAgKGlzVmFsaWQpOgorICAgICAgICAoX3ZhbGlkYXRlKToKKyAgICAgICAgKENv
bGxlY3Rpb24uQmFja2JvbmUuQ29sbGVjdGlvbik6CisgICAgICAgIChzcGxpY2UpOgorICAgICAg
ICAodG9KU09OKToKKyAgICAgICAgKGFkZCk6CisgICAgICAgIChyZW1vdmUpOgorICAgICAgICAo
c2V0IHZhcik6CisgICAgICAgIChzZXQgb3JkZXJDaGFuZ2VkLnRoaXMubGVuZ3RoLnNldCBsZW5n
dGgpOgorICAgICAgICAoc2V0IHRoaXMpOgorICAgICAgICAocmVzZXQpOgorICAgICAgICAocHVz
aCk6CisgICAgICAgIChwb3ApOgorICAgICAgICAodW5zaGlmdCk6CisgICAgICAgIChzaGlmdCk6
CisgICAgICAgIChzbGljZSk6CisgICAgICAgIChoYXMpOgorICAgICAgICAoYXQpOgorICAgICAg
ICAod2hlcmUpOgorICAgICAgICAoc29ydCk6CisgICAgICAgIChwbHVjayk6CisgICAgICAgIChj
cmVhdGUpOgorICAgICAgICAoY2xvbmUpOgorICAgICAgICAobW9kZWxJZCk6CisgICAgICAgIChf
cHJlcGFyZU1vZGVsKToKKyAgICAgICAgKF9yZW1vdmVNb2RlbHMpOgorICAgICAgICAoX2lzTW9k
ZWwpOgorICAgICAgICAoX2FkZFJlZmVyZW5jZSk6CisgICAgICAgIChfcmVtb3ZlUmVmZXJlbmNl
KToKKyAgICAgICAgKF9vbk1vZGVsRXZlbnQpOgorICAgICAgICAoVmlldy5CYWNrYm9uZS5WaWV3
KToKKyAgICAgICAgKF9yZW1vdmVFbGVtZW50KToKKyAgICAgICAgKHNldEVsZW1lbnQpOgorICAg
ICAgICAoX3NldEVsZW1lbnQpOgorICAgICAgICAoZGVsZWdhdGVFdmVudHMpOgorICAgICAgICAo
ZGVsZWdhdGUpOgorICAgICAgICAodW5kZWxlZ2F0ZUV2ZW50cyk6CisgICAgICAgICh1bmRlbGVn
YXRlKToKKyAgICAgICAgKF9jcmVhdGVFbGVtZW50KToKKyAgICAgICAgKF9lbnN1cmVFbGVtZW50
KToKKyAgICAgICAgKF9zZXRBdHRyaWJ1dGVzKToKKyAgICAgICAgKG9wdGlvbnMuZXJyb3IpOgor
ICAgICAgICAoQmFja2JvbmUuc3luYyk6CisgICAgICAgIChIaXN0b3J5LkJhY2tib25lLkhpc3Rv
cnkpOgorICAgICAgICAoZXh0ZW5kKToKKyAgICAgICAgKHdyYXBFcnJvcik6CisgICAgICAgICog
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2ti
b25lL25vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanM6IEFkZGVkLgorICAgICAgICAo
dHlwZW9mLm1vZHVsZS5zdHJpbmdfYXBwZWFyZWRfaGVyZS50eXBlb2YubW9kdWxlLmV4cG9ydHMu
c3RyaW5nX2FwcGVhcmVkX2hlcmUudHJ1ZSk6CisgICAgICAgIChqUXVlcnkpOgorICAgICAgICAo
ZmNhbWVsQ2FzZSk6CisgICAgICAgIChqUXVlcnkuZm4ualF1ZXJ5LnByb3RvdHlwZS50b0FycmF5
KToKKyAgICAgICAgKGpRdWVyeS5mbi5qUXVlcnkucHJvdG90eXBlLmdldCBpZik6CisgICAgICAg
IChqUXVlcnkuZm4ualF1ZXJ5LnByb3RvdHlwZSk6CisgICAgICAgIChqUXVlcnkuZm4ualF1ZXJ5
LnByb3RvdHlwZS5wdXNoU3RhY2spOgorICAgICAgICAoalF1ZXJ5LmZuLmpRdWVyeS5wcm90b3R5
cGUuZWFjaCk6CisgICAgICAgIChqUXVlcnkuZm4ualF1ZXJ5LnByb3RvdHlwZS5tYXApOgorICAg
ICAgICAoalF1ZXJ5LmZuLmpRdWVyeS5wcm90b3R5cGUuc2xpY2UpOgorICAgICAgICAoalF1ZXJ5
LmZuLmpRdWVyeS5wcm90b3R5cGUuZmlyc3QpOgorICAgICAgICAoalF1ZXJ5LmZuLmpRdWVyeS5w
cm90b3R5cGUubGFzdCk6CisgICAgICAgIChqUXVlcnkuZm4ualF1ZXJ5LnByb3RvdHlwZS5lcSk6
CisgICAgICAgIChqUXVlcnkuZm4ualF1ZXJ5LnByb3RvdHlwZS5lbmQpOgorICAgICAgICAoalF1
ZXJ5LmV4dGVuZC5qUXVlcnkuZm4uZXh0ZW5kKToKKyAgICAgICAgKGpRdWVyeS5leHRlbmQuZXJy
b3IpOgorICAgICAgICAoalF1ZXJ5LmV4dGVuZC5ub29wKToKKyAgICAgICAgKGpRdWVyeS5leHRl
bmQuaXNGdW5jdGlvbik6CisgICAgICAgIChqUXVlcnkuZXh0ZW5kLmlzV2luZG93KToKKyAgICAg
ICAgKGpRdWVyeS5leHRlbmQuaXNOdW1lcmljKToKKyAgICAgICAgKGpRdWVyeS5leHRlbmQuaXNQ
bGFpbk9iamVjdCk6CisgICAgICAgIChqUXVlcnkuZXh0ZW5kLmlzRW1wdHlPYmplY3QpOgorICAg
ICAgICAoalF1ZXJ5LmV4dGVuZC50eXBlKToKKyAgICAgICAgKGpRdWVyeS5leHRlbmQuZ2xvYmFs
RXZhbCk6CisgICAgICAgIChqUXVlcnkuZXh0ZW5kLmNhbWVsQ2FzZSk6CisgICAgICAgIChqUXVl
cnkuZXh0ZW5kLm5vZGVOYW1lKToKKyAgICAgICAgKGpRdWVyeS5leHRlbmQuZWFjaCk6CisgICAg
ICAgIChqUXVlcnkuZXh0ZW5kLnRyaW0pOgorICAgICAgICAoalF1ZXJ5LmV4dGVuZC5tYWtlQXJy
YXkpOgorICAgICAgICAoalF1ZXJ5LmV4dGVuZC5pbkFycmF5KToKKyAgICAgICAgKGpRdWVyeS5l
eHRlbmQubWVyZ2UpOgorICAgICAgICAoalF1ZXJ5LmV4dGVuZC5ncmVwKToKKyAgICAgICAgKGpR
dWVyeS5leHRlbmQubWFwKToKKyAgICAgICAgKGpRdWVyeS5leHRlbmQucHJveHkpOgorICAgICAg
ICAoaXNBcnJheUxpa2UpOgorICAgICAgICAoc29ydE9yZGVyKToKKyAgICAgICAgKGluZGV4T2Yp
OgorICAgICAgICAocm5hdGl2ZS5mdW5lc2NhcGUpOgorICAgICAgICAocm5hdGl2ZS5mY3NzZXNj
YXBlKToKKyAgICAgICAgKHJuYXRpdmUudW5sb2FkSGFuZGxlcik6CisgICAgICAgIChybmF0aXZl
LmNhdGNoLnB1c2gpOgorICAgICAgICAocm5hdGl2ZS5TaXp6bGUpOgorICAgICAgICAocm5hdGl2
ZS5jcmVhdGVDYWNoZSk6CisgICAgICAgIChybmF0aXZlLm1hcmtGdW5jdGlvbik6CisgICAgICAg
IChybmF0aXZlLmFzc2VydCk6CisgICAgICAgIChybmF0aXZlLmFkZEhhbmRsZSk6CisgICAgICAg
IChybmF0aXZlLnNpYmxpbmdDaGVjayk6CisgICAgICAgIChybmF0aXZlLmNyZWF0ZUlucHV0UHNl
dWRvKToKKyAgICAgICAgKHJuYXRpdmUuY3JlYXRlQnV0dG9uUHNldWRvKToKKyAgICAgICAgKHJu
YXRpdmUuY3JlYXRlRGlzYWJsZWRQc2V1ZG8pOgorICAgICAgICAocm5hdGl2ZS5jcmVhdGVQb3Np
dGlvbmFsUHNldWRvLik6CisgICAgICAgIChybmF0aXZlLmNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8p
OgorICAgICAgICAocm5hdGl2ZS4pOgorICAgICAgICAocm5hdGl2ZS5pc1hNTC5TaXp6bGUuaXNY
TUwpOgorICAgICAgICAocm5hdGl2ZS5FeHByLmZpbHRlci5zdHJpbmdfYXBwZWFyZWRfaGVyZSk6
CisgICAgICAgIChybmF0aXZlLkV4cHIuZmluZC5zdHJpbmdfYXBwZWFyZWRfaGVyZSk6CisgICAg
ICAgIChybmF0aXZlLmVsc2UuRXhwci5maWx0ZXIuc3RyaW5nX2FwcGVhcmVkX2hlcmUpOgorICAg
ICAgICAocm5hdGl2ZS5lbHNlLkV4cHIuZmluZC5zdHJpbmdfYXBwZWFyZWRfaGVyZSk6CisgICAg
ICAgIChybmF0aXZlLnNldERvY3VtZW50LlNpenpsZS5zZXREb2N1bWVudCk6CisgICAgICAgIChy
bmF0aXZlLlNpenpsZS5tYXRjaGVzKToKKyAgICAgICAgKHJuYXRpdmUuU2l6emxlLm1hdGNoZXNT
ZWxlY3Rvcik6CisgICAgICAgIChybmF0aXZlLlNpenpsZS5jb250YWlucyk6CisgICAgICAgIChy
bmF0aXZlLlNpenpsZS5hdHRyKToKKyAgICAgICAgKHJuYXRpdmUuU2l6emxlLmVzY2FwZSk6Cisg
ICAgICAgIChybmF0aXZlLlNpenpsZS5lcnJvcik6CisgICAgICAgIChybmF0aXZlLlNpenpsZS51
bmlxdWVTb3J0KToKKyAgICAgICAgKHJuYXRpdmUuZ2V0VGV4dC5TaXp6bGUuZ2V0VGV4dCk6Cisg
ICAgICAgIChybmF0aXZlLkV4cHIuU2l6emxlLnNlbGVjdG9ycy5wcmVGaWx0ZXIuc3RyaW5nX2Fw
cGVhcmVkX2hlcmUpOgorICAgICAgICAocm5hdGl2ZS5FeHByLlNpenpsZS5zZWxlY3RvcnMuZmls
dGVyLik6CisgICAgICAgIChybmF0aXZlLkV4cHIuU2l6emxlLnNlbGVjdG9ycy5maWx0ZXIuc3Ry
aW5nX2FwcGVhcmVkX2hlcmUpOgorICAgICAgICAocm5hdGl2ZS5FeHByLlNpenpsZS5zZWxlY3Rv
cnMucHNldWRvcy4pOgorICAgICAgICAocm5hdGl2ZS5FeHByLlNpenpsZS5zZWxlY3RvcnMucHNl
dWRvcy5zdHJpbmdfYXBwZWFyZWRfaGVyZSk6CisgICAgICAgIChybmF0aXZlLnNldEZpbHRlcnMp
OgorICAgICAgICAocm5hdGl2ZS50b2tlbml6ZS5TaXp6bGUudG9rZW5pemUpOgorICAgICAgICAo
cm5hdGl2ZS50b1NlbGVjdG9yKToKKyAgICAgICAgKHJuYXRpdmUuYWRkQ29tYmluYXRvcik6Cisg
ICAgICAgIChybmF0aXZlLmVsZW1lbnRNYXRjaGVyKToKKyAgICAgICAgKHJuYXRpdmUubXVsdGlw
bGVDb250ZXh0cyk6CisgICAgICAgIChybmF0aXZlLmNvbmRlbnNlKToKKyAgICAgICAgKHJuYXRp
dmUuc2V0TWF0Y2hlcik6CisgICAgICAgIChybmF0aXZlLm1hdGNoZXJGcm9tVG9rZW5zLm1hdGNo
ZXJzKToKKyAgICAgICAgKHJuYXRpdmUuc3VwZXJNYXRjaGVyKToKKyAgICAgICAgKHJuYXRpdmUu
bWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKToKKyAgICAgICAgKHJuYXRpdmUuY29tcGlsZS5TaXp6
bGUuY29tcGlsZSk6CisgICAgICAgIChybmF0aXZlLnNlbGVjdC5TaXp6bGUuc2VsZWN0KToKKyAg
ICAgICAgKHJuYXRpdmUuZGlyKToKKyAgICAgICAgKHJuYXRpdmUuc2libGluZ3MpOgorICAgICAg
ICAocm5hdGl2ZSk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5maWx0ZXIpOgorICAgICAgICAo
cm5hdGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLmZpbmQpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnku
Zm4uZXh0ZW5kLmZpbHRlcik6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQubm90
KToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmZuLmV4dGVuZC5pcyk6CisgICAgICAgIChybmF0
aXZlLmluaXQualF1ZXJ5LmZuLmluaXQpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4uZXh0
ZW5kLmhhcyk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQuY2xvc2VzdCk6Cisg
ICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQuaW5kZXgpOgorICAgICAgICAocm5hdGl2
ZS5qUXVlcnkuZm4uZXh0ZW5kLmFkZCk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRl
bmQuYWRkQmFjayk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5lYWNoLnBhcmVudCk6CisgICAg
ICAgIChybmF0aXZlLmpRdWVyeS5lYWNoLnBhcmVudHMpOgorICAgICAgICAocm5hdGl2ZS5qUXVl
cnkuZWFjaC5wYXJlbnRzVW50aWwpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZWFjaC5uZXh0
KToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmVhY2gucHJldik6CisgICAgICAgIChybmF0aXZl
LmpRdWVyeS5lYWNoLm5leHRBbGwpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZWFjaC5wcmV2
QWxsKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmVhY2gubmV4dFVudGlsKToKKyAgICAgICAg
KHJuYXRpdmUualF1ZXJ5LmVhY2gucHJldlVudGlsKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5
LmVhY2guc2libGluZ3MpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZWFjaC5jaGlsZHJlbik6
CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5lYWNoLmNvbnRlbnRzKToKKyAgICAgICAgKHJuYXRp
dmUualF1ZXJ5LmZuLm5hbWUpOgorICAgICAgICAocm5hdGl2ZS5jcmVhdGVPcHRpb25zKToKKyAg
ICAgICAgKHJuYXRpdmUuZmlyZSk6CisgICAgICAgIChybmF0aXZlLnNlbGYubGlzdC5hZGQpOgor
ICAgICAgICAocm5hdGl2ZS5zZWxmLmFkZCk6CisgICAgICAgIChybmF0aXZlLnNlbGYucmVtb3Zl
KToKKyAgICAgICAgKHJuYXRpdmUuc2VsZi5oYXMpOgorICAgICAgICAocm5hdGl2ZS5zZWxmLmVt
cHR5KToKKyAgICAgICAgKHJuYXRpdmUuc2VsZi5kaXNhYmxlKToKKyAgICAgICAgKHJuYXRpdmUu
c2VsZi5kaXNhYmxlZCk6CisgICAgICAgIChybmF0aXZlLnNlbGYubG9jayk6CisgICAgICAgIChy
bmF0aXZlLnNlbGYubG9ja2VkKToKKyAgICAgICAgKHJuYXRpdmUuc2VsZi5maXJlV2l0aCk6Cisg
ICAgICAgIChybmF0aXZlLnNlbGYuZmlyZSk6CisgICAgICAgIChybmF0aXZlLnNlbGYuZmlyZWQp
OgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuQ2FsbGJhY2tzKToKKyAgICAgICAgKHJuYXRpdmUu
SWRlbnRpdHkpOgorICAgICAgICAocm5hdGl2ZS5UaHJvd2VyKToKKyAgICAgICAgKHJuYXRpdmUu
YWRvcHRWYWx1ZSk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5leHRlbmQucHJvbWlzZS5zdGF0
ZSk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5leHRlbmQucHJvbWlzZS5hbHdheXMpOgorICAg
ICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLnByb21pc2Uuc3RyaW5nX2FwcGVhcmVkX2hlcmUp
OgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLnByb21pc2UuKToKKyAgICAgICAgKHJu
YXRpdmUualF1ZXJ5LmV4dGVuZC5wcm9taXNlLnBpcGUpOgorICAgICAgICAocm5hdGl2ZS5qUXVl
cnkuZXh0ZW5kLnByb21pc2UubWlnaHRUaHJvdyk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5l
eHRlbmQucHJvbWlzZS5wcm9jZXNzLnNwZWNpYWwubWlnaHRUaHJvdyk6CisgICAgICAgIChybmF0
aXZlLmpRdWVyeS5leHRlbmQucHJvbWlzZS5yZXNvbHZlKToKKyAgICAgICAgKHJuYXRpdmUualF1
ZXJ5LmV4dGVuZC5wcm9taXNlLnRoZW4pOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5k
LnByb21pc2UucHJvbWlzZSk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5leHRlbmQuKToKKyAg
ICAgICAgKHJuYXRpdmUualF1ZXJ5LmV4dGVuZC5EZWZlcnJlZCk6CisgICAgICAgIChybmF0aXZl
LmpRdWVyeS5leHRlbmQudXBkYXRlRnVuYyk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5leHRl
bmQud2hlbik6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29r
KToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LnJlYWR5RXhjZXB0aW9uKToKKyAgICAgICAgKHJu
YXRpdmUualF1ZXJ5LmZuLnJlYWR5KToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmV4dGVuZC5o
b2xkUmVhZHkpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLnJlYWR5KToKKyAgICAg
ICAgKHJuYXRpdmUuY29tcGxldGVkKToKKyAgICAgICAgKHJuYXRpdmUuZWxzZS52YWx1ZS51bmRl
ZmluZWQuYnVsay5lbHNlLmZuKToKKyAgICAgICAgKHJuYXRpdmUuYWNjZXNzKToKKyAgICAgICAg
KHJuYXRpdmUuYWNjZXB0RGF0YSk6CisgICAgICAgIChybmF0aXZlLkRhdGEpOgorICAgICAgICAo
cm5hdGl2ZS5EYXRhLnByb3RvdHlwZS5jYWNoZSk6CisgICAgICAgIChybmF0aXZlLkRhdGEucHJv
dG90eXBlLnNldCBvd25lcik6CisgICAgICAgIChybmF0aXZlLkRhdGEucHJvdG90eXBlLmdldCBv
d25lcik6CisgICAgICAgIChybmF0aXZlLkRhdGEucHJvdG90eXBlLmFjY2Vzcyk6CisgICAgICAg
IChybmF0aXZlLkRhdGEucHJvdG90eXBlLnJlbW92ZSk6CisgICAgICAgIChybmF0aXZlLkRhdGEu
cHJvdG90eXBlLmhhc0RhdGEpOgorICAgICAgICAocm5hdGl2ZS5nZXREYXRhKToKKyAgICAgICAg
KHJuYXRpdmUuZGF0YUF0dHIpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLmhhc0Rh
dGEpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLmRhdGEpOgorICAgICAgICAocm5h
dGl2ZS5qUXVlcnkuZXh0ZW5kLnJlbW92ZURhdGEpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnku
ZXh0ZW5kLl9kYXRhKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmV4dGVuZC5fcmVtb3ZlRGF0
YSk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQuKToKKyAgICAgICAgKHJuYXRp
dmUualF1ZXJ5LmZuLmV4dGVuZC5kYXRhKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmZuLmV4
dGVuZC5yZW1vdmVEYXRhKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmV4dGVuZC5xdWV1ZSk6
CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5leHRlbmQubmV4dCk6CisgICAgICAgIChybmF0aXZl
LmpRdWVyeS5leHRlbmQuZGVxdWV1ZSk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5leHRlbmQu
X3F1ZXVlSG9va3MpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLnF1ZXVlKToK
KyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmZuLmV4dGVuZC5kZXF1ZXVlKToKKyAgICAgICAgKHJu
YXRpdmUualF1ZXJ5LmZuLmV4dGVuZC5jbGVhclF1ZXVlKToKKyAgICAgICAgKHJuYXRpdmUualF1
ZXJ5LmZuLmV4dGVuZC5yZXNvbHZlKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmZuLmV4dGVu
ZC5wcm9taXNlKToKKyAgICAgICAgKHJuYXRpdmUuaXNIaWRkZW5XaXRoaW5UcmVlKToKKyAgICAg
ICAgKHJuYXRpdmUuc3dhcCk6CisgICAgICAgIChybmF0aXZlLnR3ZWVuKToKKyAgICAgICAgKHJu
YXRpdmUuYWRqdXN0Q1NTKToKKyAgICAgICAgKHJuYXRpdmUuc2hvd0hpZGUpOgorICAgICAgICAo
cm5hdGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLnNob3cpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnku
Zm4uZXh0ZW5kLmhpZGUpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLnRvZ2ds
ZSk6CisgICAgICAgIChybmF0aXZlLmdldEFsbCk6CisgICAgICAgIChybmF0aXZlLnNldEdsb2Jh
bEV2YWwpOgorICAgICAgICAocm5hdGl2ZS5idWlsZEZyYWdtZW50KToKKyAgICAgICAgKHJuYXRp
dmUucmV0dXJuRmFsc2UpOgorICAgICAgICAocm5hdGl2ZS5zYWZlQWN0aXZlRWxlbWVudCk6Cisg
ICAgICAgIChybmF0aXZlLm9uZS5vbmUuMS5mbik6CisgICAgICAgIChybmF0aXZlLm9uKToKKyAg
ICAgICAgKHJuYXRpdmUuRGF0YS5wcm90b3R5cGUpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnku
ZXZlbnQuZXZlbnRIYW5kbGUuZWxlbURhdGEuaGFuZGxlKToKKyAgICAgICAgKHJuYXRpdmUualF1
ZXJ5LmV2ZW50LmFkZCk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5ldmVudC5yZW1vdmUpOgor
ICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXZlbnQuZGlzcGF0Y2gpOgorICAgICAgICAocm5hdGl2
ZS5qUXVlcnkuZXZlbnQuaGFuZGxlcnMpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXZlbnQu
Z2V0IGpRdWVyeSk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5ldmVudC4pOgorICAgICAgICAo
cm5hdGl2ZS5qUXVlcnkuZXZlbnQuc2V0IE9iamVjdCk6CisgICAgICAgIChybmF0aXZlLmpRdWVy
eS5ldmVudC5hZGRQcm9wKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmV2ZW50LmZpeCk6Cisg
ICAgICAgIChybmF0aXZlLmpRdWVyeS5ldmVudC5zcGVjaWFsLmZvY3VzLnRyaWdnZXIpOgorICAg
ICAgICAocm5hdGl2ZS5qUXVlcnkuZXZlbnQuc3BlY2lhbC5ibHVyLnRyaWdnZXIpOgorICAgICAg
ICAocm5hdGl2ZS5qUXVlcnkuZXZlbnQuc3BlY2lhbC5jbGljay50cmlnZ2VyKToKKyAgICAgICAg
KHJuYXRpdmUualF1ZXJ5LmV2ZW50LnNwZWNpYWwuY2xpY2suX2RlZmF1bHQpOgorICAgICAgICAo
cm5hdGl2ZS5qUXVlcnkuZXZlbnQuc3BlY2lhbC5iZWZvcmV1bmxvYWQucG9zdERpc3BhdGNoKToK
KyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LnJlbW92ZUV2ZW50KToKKyAgICAgICAgKHJuYXRpdmUu
alF1ZXJ5LkV2ZW50KToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LkV2ZW50LnByb3RvdHlwZS5w
cmV2ZW50RGVmYXVsdCk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5FdmVudC5wcm90b3R5cGUu
c3RvcFByb3BhZ2F0aW9uKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LkV2ZW50LnByb3RvdHlw
ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24pOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZWFj
aCk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5ldmVudC5zcGVjaWFsLm9yaWcuaGFuZGxlKToK
KyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmZuLmV4dGVuZC5vbik6CisgICAgICAgIChybmF0aXZl
LmpRdWVyeS5mbi5leHRlbmQub25lKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmZuLmV4dGVu
ZC5vZmYpOgorICAgICAgICAocm5hdGl2ZS5tYW5pcHVsYXRpb25UYXJnZXQpOgorICAgICAgICAo
cm5hdGl2ZS5kaXNhYmxlU2NyaXB0KToKKyAgICAgICAgKHJuYXRpdmUucmVzdG9yZVNjcmlwdCk6
CisgICAgICAgIChybmF0aXZlLmNsb25lQ29weUV2ZW50KToKKyAgICAgICAgKHJuYXRpdmUuZml4
SW5wdXQpOgorICAgICAgICAocm5hdGl2ZS5kb21NYW5pcCk6CisgICAgICAgIChybmF0aXZlLnJl
bW92ZSk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5leHRlbmQuaHRtbFByZWZpbHRlcik6Cisg
ICAgICAgIChybmF0aXZlLmpRdWVyeS5leHRlbmQuY2xvbmUpOgorICAgICAgICAocm5hdGl2ZS5q
UXVlcnkuZXh0ZW5kLmNsZWFuRGF0YSk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRl
bmQuZGV0YWNoKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmZuLmV4dGVuZC5yZW1vdmUpOgor
ICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLnRleHQpOgorICAgICAgICAocm5hdGl2
ZS5qUXVlcnkuZm4uZXh0ZW5kLmFwcGVuZCk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5l
eHRlbmQucHJlcGVuZCk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQuYmVmb3Jl
KToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmZuLmV4dGVuZC5hZnRlcik6CisgICAgICAgIChy
bmF0aXZlLmpRdWVyeS5mbi5leHRlbmQuZW1wdHkpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnku
Zm4uZXh0ZW5kLmNsb25lKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmZuLmV4dGVuZC5odG1s
KToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmZuLmV4dGVuZC5yZXBsYWNlV2l0aCk6CisgICAg
ICAgIChybmF0aXZlLmdldFN0eWxlcyk6CisgICAgICAgIChybmF0aXZlLmNvbXB1dGVTdHlsZVRl
c3RzKToKKyAgICAgICAgKHJuYXRpdmUuaG9va0ZuLnJldHVybi5nZXQgaWYpOgorICAgICAgICAo
cm5hdGl2ZS5ob29rRm4ucmV0dXJuKToKKyAgICAgICAgKHJuYXRpdmUuYWRkR2V0SG9va0lmKToK
KyAgICAgICAgKHJuYXRpdmUudmVuZG9yUHJvcE5hbWUpOgorICAgICAgICAocm5hdGl2ZS5zZXRQ
b3NpdGl2ZU51bWJlcik6CisgICAgICAgIChybmF0aXZlLmF1Z21lbnRXaWR0aE9ySGVpZ2h0KToK
KyAgICAgICAgKHJuYXRpdmUuZ2V0V2lkdGhPckhlaWdodCk6CisgICAgICAgIChybmF0aXZlLmpR
dWVyeS5leHRlbmQuY3NzSG9va3Mub3BhY2l0eS5nZXQgaWYpOgorICAgICAgICAocm5hdGl2ZS5q
UXVlcnkuZXh0ZW5kLmNzc0hvb2tzLm9wYWNpdHkpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnku
ZXh0ZW5kLnN0eWxlKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmV4dGVuZC5jc3MpOgorICAg
ICAgICAocm5hdGl2ZS5qUXVlcnkuY3NzSG9va3MubmFtZS5nZXQgaWYpOgorICAgICAgICAocm5h
dGl2ZS5qUXVlcnkuY3NzSG9va3MubmFtZSk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5jc3NI
b29rcy5uYW1lLnNldCB2YXIpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuY3NzSG9va3MucHJl
Zml4LnN1ZmZpeC5leHBhbmQpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLmNz
cyk6CisgICAgICAgIChybmF0aXZlLlR3ZWVuLnByb3RvdHlwZS5pbml0KToKKyAgICAgICAgKHJu
YXRpdmUuVHdlZW4ucHJvdG90eXBlLmN1cik6CisgICAgICAgIChybmF0aXZlLlR3ZWVuLnByb3Rv
dHlwZS5ydW4pOgorICAgICAgICAocm5hdGl2ZS5Ud2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0
IHR3ZWVuKToKKyAgICAgICAgKHJuYXRpdmUuVHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCB0
d2Vlbik6CisgICAgICAgIChybmF0aXZlLlR3ZWVuLnByb3BIb29rcy5zY3JvbGxUb3AuVHdlZW4u
cHJvcEhvb2tzLnNjcm9sbExlZnQuc2V0IHR3ZWVuKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5
LmVhc2luZy5saW5lYXIpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZWFzaW5nLnN3aW5nKToK
KyAgICAgICAgKHJuYXRpdmUucmFmKToKKyAgICAgICAgKHJuYXRpdmUuY3JlYXRlRnhOb3cpOgor
ICAgICAgICAocm5hdGl2ZS5nZW5GeCk6CisgICAgICAgIChybmF0aXZlLmNyZWF0ZVR3ZWVuKToK
KyAgICAgICAgKHJuYXRpdmUub3B0cy5vcHRzLnF1ZXVlLmhvb2tzLnVucXVldWVkLm51bGwuaG9v
a3MuZW1wdHkuZmlyZSk6CisgICAgICAgIChybmF0aXZlLmRlZmF1bHRQcmVmaWx0ZXIpOgorICAg
ICAgICAocm5hdGl2ZS5wcm9wRmlsdGVyKToKKyAgICAgICAgKHJuYXRpdmUub3B0aW9ucy50aWNr
KToKKyAgICAgICAgKHJuYXRpdmUub3B0aW9ucy5hbmltYXRpb24uZGVmZXJyZWQucHJvbWlzZS5j
cmVhdGVUd2Vlbik6CisgICAgICAgIChybmF0aXZlLm9wdGlvbnMuYW5pbWF0aW9uLmRlZmVycmVk
LnByb21pc2Uuc3RvcCk6CisgICAgICAgIChybmF0aXZlLkFuaW1hdGlvbik6CisgICAgICAgIChy
bmF0aXZlLnR3ZWVuZXJzLnN0cmluZ19hcHBlYXJlZF9oZXJlKToKKyAgICAgICAgKHJuYXRpdmUu
VHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcC5Ud2Vlbi5wcm9wSG9va3Muc2Nyb2xsTGVmdCk6Cisg
ICAgICAgIChybmF0aXZlLnR3ZWVuZXIpOgorICAgICAgICAocm5hdGl2ZS5wcmVmaWx0ZXIpOgor
ICAgICAgICAocm5hdGl2ZS5vcHQuY29tcGxldGUpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnku
c3BlZWQpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLmZhZGVUbyk6CisgICAg
ICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQuZG9BbmltYXRpb24pOgorICAgICAgICAocm5h
dGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLmFuaW1hdGUpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnku
Zm4uZXh0ZW5kLnN0b3BRdWV1ZSk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQu
c3RvcCk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQuZmluaXNoKToKKyAgICAg
ICAgKHJuYXRpdmUualF1ZXJ5LmZ4LnRpY2spOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZngu
dGltZXIpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZnguc3RhcnQpOgorICAgICAgICAocm5h
dGl2ZS5qUXVlcnkuZnguc3RvcCk6CisgICAgICAgIChybmF0aXZlLmhvb2tzLnN0b3ApOgorICAg
ICAgICAocm5hdGl2ZS5qUXVlcnkuZm4uZGVsYXkpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnku
Zm4uZXh0ZW5kLmF0dHIpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLnJlbW92
ZUF0dHIpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLmF0dHIpOgorICAgICAgICAo
cm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLmF0dHJIb29rcy50eXBlLnNldCBpZik6CisgICAgICAgIChy
bmF0aXZlLmpRdWVyeS5leHRlbmQuYXR0ckhvb2tzLnR5cGUpOgorICAgICAgICAocm5hdGl2ZS5U
d2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5k
LnJlbW92ZUF0dHIpOgorICAgICAgICAocm5hdGl2ZS5ib29sSG9vay5zZXQgZWxlbSk6CisgICAg
ICAgIChybmF0aXZlLmF0dHJIYW5kbGUubmFtZSk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5m
bi5leHRlbmQucHJvcCk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQucmVtb3Zl
UHJvcCk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5leHRlbmQucHJvcCk6CisgICAgICAgIChy
bmF0aXZlLmpRdWVyeS5leHRlbmQucHJvcEhvb2tzLnRhYkluZGV4LmdldCB2YXIpOgorICAgICAg
ICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLnByb3BIb29rcy50YWJJbmRleCk6CisgICAgICAgIChy
bmF0aXZlLmJvb2xIb29rKToKKyAgICAgICAgKHJuYXRpdmUuc3VwcG9ydC5vcHRTZWxlY3RlZC5q
UXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkLmdldCBlbGVtKToKKyAgICAgICAgKHJuYXRpdmUuc3Vw
cG9ydC5vcHRTZWxlY3RlZC5qUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkLnNldCBlbGVtKToKKyAg
ICAgICAgKHJuYXRpdmUuc3RyaXBBbmRDb2xsYXBzZSk6CisgICAgICAgIChybmF0aXZlLmdldENs
YXNzKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmZuLmV4dGVuZC5hZGRDbGFzcyk6CisgICAg
ICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQucmVtb3ZlQ2xhc3MpOgorICAgICAgICAocm5h
dGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLnRvZ2dsZUNsYXNzKToKKyAgICAgICAgKHJuYXRpdmUualF1
ZXJ5LmZuLmV4dGVuZC5oYXNDbGFzcyk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRl
bmQudmFsKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmV4dGVuZC52YWxIb29rcy5zZWxlY3Qu
Z2V0IHZhcik6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5leHRlbmQudmFsSG9va3Muc2VsZWN0
KToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmV4dGVuZC52YWxIb29rcy5zZWxlY3Quc2V0IHZh
cik6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS52YWxIb29rcy50aGlzLnNldCBpZik6CisgICAg
ICAgIChybmF0aXZlLmpRdWVyeS52YWxIb29rcy50aGlzKToKKyAgICAgICAgKHJuYXRpdmUudHJp
Z2dlcik6CisgICAgICAgIChybmF0aXZlLnNpbXVsYXRlKToKKyAgICAgICAgKHJuYXRpdmUualF1
ZXJ5LmZuLmV4dGVuZC50cmlnZ2VyKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmZuLmV4dGVu
ZC50cmlnZ2VySGFuZGxlcik6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQuaG92
ZXIpOgorICAgICAgICAocm5hdGl2ZS5zdXBwb3J0LmZvY3VzaW4uaGFuZGxlcik6CisgICAgICAg
IChybmF0aXZlLnN1cHBvcnQuZm9jdXNpbi5qUXVlcnkuZXZlbnQuc3BlY2lhbC5maXguc2V0dXAp
OgorICAgICAgICAocm5hdGl2ZS5zdXBwb3J0LmZvY3VzaW4ualF1ZXJ5LmV2ZW50LnNwZWNpYWwu
Zml4LnRlYXJkb3duKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LnBhcnNlWE1MKToKKyAgICAg
ICAgKHJuYXRpdmUuYnVpbGRQYXJhbXMpOgorICAgICAgICAocm5hdGl2ZS5hZGQpOgorICAgICAg
ICAocm5hdGl2ZS5qUXVlcnkucGFyYW0pOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4uZXh0
ZW5kLnNlcmlhbGl6ZSk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQuc2VyaWFs
aXplQXJyYXkpOgorICAgICAgICAocm5hdGl2ZS5hZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMp
OgorICAgICAgICAocm5hdGl2ZS5qcVhIUi5pbnNwZWN0KToKKyAgICAgICAgKHJuYXRpdmUuaW5z
cGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMpOgorICAgICAgICAocm5hdGl2ZS5hamF4RXh0ZW5k
KToKKyAgICAgICAgKHJuYXRpdmUuYWpheEhhbmRsZVJlc3BvbnNlcyk6CisgICAgICAgIChybmF0
aXZlLmFqYXhDb252ZXJ0KToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmV4dGVuZC5hamF4U2V0
dXApOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLmpxWEhSLmdldFJlc3BvbnNlSGVh
ZGVyKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmV4dGVuZC5qcVhIUi5nZXRBbGxSZXNwb25z
ZUhlYWRlcnMpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLmpxWEhSLnNldFJlcXVl
c3RIZWFkZXIpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLmpxWEhSLm92ZXJyaWRl
TWltZVR5cGUpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLmpxWEhSLnN0YXR1c0Nv
ZGUpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLmpxWEhSLmFib3J0KToKKyAgICAg
ICAgKHJuYXRpdmUualF1ZXJ5LmV4dGVuZC5kb25lKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5
LmV4dGVuZC5hamF4KToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmV4dGVuZC5nZXRKU09OKToK
KyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmV4dGVuZC5nZXRTY3JpcHQpOgorICAgICAgICAocm5h
dGl2ZS5qUXVlcnkubWV0aG9kKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5Ll9ldmFsVXJsKToK
KyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmZuLmV4dGVuZC53cmFwQWxsKToKKyAgICAgICAgKHJu
YXRpdmUualF1ZXJ5LmZuLmV4dGVuZC53cmFwSW5uZXIpOgorICAgICAgICAocm5hdGl2ZS5qUXVl
cnkuZm4uZXh0ZW5kLndyYXApOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLnVu
d3JhcCk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5leHByLnBzZXVkb3MuaGlkZGVuKToKKyAg
ICAgICAgKHJuYXRpdmUualF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlKToKKyAgICAgICAgKHJu
YXRpdmUualF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIpOgorICAgICAgICAocm5hdGl2ZS5yZXR1cm4u
Y2FsbGJhY2spOgorICAgICAgICAocm5hdGl2ZS5yZXR1cm4uZWxzZS54aHIub25yZWFkeXN0YXRl
Y2hhbmdlKToKKyAgICAgICAgKHJuYXRpdmUucmV0dXJuLnNlbmQpOgorICAgICAgICAocm5hdGl2
ZS5yZXR1cm4uYWJvcnQpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuYWpheFNldHVwLmNvbnZl
cnRlcnMuc3RyaW5nX2FwcGVhcmVkX2hlcmUpOgorICAgICAgICAocm5hdGl2ZS5yZXR1cm4uKToK
KyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmFqYXhTZXR1cC5qc29ucENhbGxiYWNrKToKKyAgICAg
ICAgKHJuYXRpdmUucy5jb252ZXJ0ZXJzLnN0cmluZ19hcHBlYXJlZF9oZXJlKToKKyAgICAgICAg
KHJuYXRpdmUud2luZG93LmNhbGxiYWNrTmFtZSk6CisgICAgICAgIChybmF0aXZlLnN1cHBvcnQu
Y3JlYXRlSFRNTERvY3VtZW50KToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LnBhcnNlSFRNTCk6
CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5sb2FkKToKKyAgICAgICAgKHJuYXRpdmUualF1
ZXJ5LmZuLnR5cGUpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXhwci5wc2V1ZG9zLmFuaW1h
dGVkKToKKyAgICAgICAgKHJuYXRpdmUuZ2V0V2luZG93KToKKyAgICAgICAgKHJuYXRpdmUualF1
ZXJ5Lm9mZnNldC5zZXRPZmZzZXQpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4uZXh0ZW5k
Lm9mZnNldCk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQucG9zaXRpb24pOgor
ICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLm9mZnNldFBhcmVudCk6CisgICAgICAg
IChybmF0aXZlLmpRdWVyeS5mbi5tZXRob2QpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4u
ZXh0ZW5kLmJpbmQpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLnVuYmluZCk6
CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQuZGVsZWdhdGUpOgorICAgICAgICAo
cm5hdGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLnVuZGVsZWdhdGUpOgorICAgICAgICAocm5hdGl2ZS5q
UXVlcnkubm9Db25mbGljdCk6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL25vZGVfbW9kdWxlcy90b2RvbXZjLWFw
cC1jc3MvaW5kZXguY3NzOiBBZGRlZC4KKyAgICAgICAgKGh0bWwsKToKKyAgICAgICAgKGJ1dHRv
bik6CisgICAgICAgIChib2R5KToKKyAgICAgICAgKDpmb2N1cyk6CisgICAgICAgICguaGlkZGVu
KToKKyAgICAgICAgKC50b2RvYXBwKToKKyAgICAgICAgKC50b2RvYXBwIGlucHV0Ojotd2Via2l0
LWlucHV0LXBsYWNlaG9sZGVyKToKKyAgICAgICAgKC50b2RvYXBwIGlucHV0OjotbW96LXBsYWNl
aG9sZGVyKToKKyAgICAgICAgKC50b2RvYXBwIGlucHV0OjppbnB1dC1wbGFjZWhvbGRlcik6Cisg
ICAgICAgICgudG9kb2FwcCBoMSk6CisgICAgICAgICgubmV3LXRvZG8sKToKKyAgICAgICAgKC5u
ZXctdG9kbyk6CisgICAgICAgICgubWFpbik6CisgICAgICAgIChsYWJlbFtmb3I9J3RvZ2dsZS1h
bGwnXSk6CisgICAgICAgICgudG9nZ2xlLWFsbCk6CisgICAgICAgICgudG9nZ2xlLWFsbDpiZWZv
cmUpOgorICAgICAgICAoLnRvZ2dsZS1hbGw6Y2hlY2tlZDpiZWZvcmUpOgorICAgICAgICAoLnRv
ZG8tbGlzdCk6CisgICAgICAgICgudG9kby1saXN0IGxpKToKKyAgICAgICAgKC50b2RvLWxpc3Qg
bGk6bGFzdC1jaGlsZCk6CisgICAgICAgICgudG9kby1saXN0IGxpLmVkaXRpbmcpOgorICAgICAg
ICAoLnRvZG8tbGlzdCBsaS5lZGl0aW5nIC5lZGl0KToKKyAgICAgICAgKC50b2RvLWxpc3QgbGku
ZWRpdGluZyAudmlldyk6CisgICAgICAgICgudG9kby1saXN0IGxpIC50b2dnbGUpOgorICAgICAg
ICAoLnRvZG8tbGlzdCBsaSAudG9nZ2xlOmFmdGVyKToKKyAgICAgICAgKC50b2RvLWxpc3QgbGkg
LnRvZ2dsZTpjaGVja2VkOmFmdGVyKToKKyAgICAgICAgKC50b2RvLWxpc3QgbGkgbGFiZWwpOgor
ICAgICAgICAoLnRvZG8tbGlzdCBsaS5jb21wbGV0ZWQgbGFiZWwpOgorICAgICAgICAoLnRvZG8t
bGlzdCBsaSAuZGVzdHJveSk6CisgICAgICAgICgudG9kby1saXN0IGxpIC5kZXN0cm95OmhvdmVy
KToKKyAgICAgICAgKC50b2RvLWxpc3QgbGkgLmRlc3Ryb3k6YWZ0ZXIpOgorICAgICAgICAoLnRv
ZG8tbGlzdCBsaTpob3ZlciAuZGVzdHJveSk6CisgICAgICAgICgudG9kby1saXN0IGxpIC5lZGl0
KToKKyAgICAgICAgKC50b2RvLWxpc3QgbGkuZWRpdGluZzpsYXN0LWNoaWxkKToKKyAgICAgICAg
KC5mb290ZXIpOgorICAgICAgICAoLmZvb3RlcjpiZWZvcmUpOgorICAgICAgICAoLnRvZG8tY291
bnQpOgorICAgICAgICAoLnRvZG8tY291bnQgc3Ryb25nKToKKyAgICAgICAgKC5maWx0ZXJzKToK
KyAgICAgICAgKC5maWx0ZXJzIGxpKToKKyAgICAgICAgKC5maWx0ZXJzIGxpIGEpOgorICAgICAg
ICAoLmZpbHRlcnMgbGkgYTpob3Zlcik6CisgICAgICAgICguZmlsdGVycyBsaSBhLnNlbGVjdGVk
KToKKyAgICAgICAgKC5jbGVhci1jb21wbGV0ZWQsKToKKyAgICAgICAgKC5jbGVhci1jb21wbGV0
ZWQ6aG92ZXIpOgorICAgICAgICAoLmluZm8pOgorICAgICAgICAoLmluZm8gcCk6CisgICAgICAg
ICguaW5mbyBhKToKKyAgICAgICAgKC5pbmZvIGE6aG92ZXIpOgorICAgICAgICAoQG1lZGlhIHNj
cmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzowKSk6CisgICAgICAgICgu
dG9nZ2xlLWFsbCwpOgorICAgICAgICAoQG1lZGlhIChtYXgtd2lkdGg6IDQzMHB4KSk6CisgICAg
ICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2JhY2tib25lL25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzczogQWRkZWQuCisg
ICAgICAgIChocik6CisgICAgICAgICgubGVhcm4gYSk6CisgICAgICAgICgubGVhcm4gYTpob3Zl
cik6CisgICAgICAgICgubGVhcm4gaDMsKToKKyAgICAgICAgKC5sZWFybiBoMyk6CisgICAgICAg
ICgubGVhcm4gaDQpOgorICAgICAgICAoLmxlYXJuIGg1KToKKyAgICAgICAgKC5sZWFybiB1bCk6
CisgICAgICAgICgubGVhcm4gbGkpOgorICAgICAgICAoLmxlYXJuIHApOgorICAgICAgICAoI2lz
c3VlLWNvdW50KToKKyAgICAgICAgKC5xdW90ZSk6CisgICAgICAgICgucXVvdGUgcCk6CisgICAg
ICAgICgucXVvdGUgcDpiZWZvcmUpOgorICAgICAgICAoLnF1b3RlIHA6YWZ0ZXIpOgorICAgICAg
ICAoLnF1b3RlIGZvb3Rlcik6CisgICAgICAgICgucXVvdGUgZm9vdGVyIGltZyk6CisgICAgICAg
ICgucXVvdGUgZm9vdGVyIGEpOgorICAgICAgICAoLnNwZWVjaC1idWJibGUpOgorICAgICAgICAo
LnNwZWVjaC1idWJibGU6YWZ0ZXIpOgorICAgICAgICAoLmxlYXJuLWJhciA+IC5sZWFybik6Cisg
ICAgICAgIChAbWVkaWEgKG1pbi13aWR0aDogODk5cHgpKToKKyAgICAgICAgKC5sZWFybi1iYXIp
OgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9iYWNrYm9uZS9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5qczogQWRk
ZWQuCisgICAgICAgIChfLmRlZmF1bHRzKToKKyAgICAgICAgKHRlbXBsYXRlKToKKyAgICAgICAg
KGVzY2FwZXIuXy50ZW1wbGF0ZSk6CisgICAgICAgIChfKToKKyAgICAgICAgKGxvY2F0aW9uLmhv
c3RuYW1lLnN0cmluZ19hcHBlYXJlZF9oZXJlLmkuci5pLnIpOgorICAgICAgICAocmVkaXJlY3Qp
OgorICAgICAgICAoZmluZFJvb3QpOgorICAgICAgICAoeGhyLm9ubG9hZCk6CisgICAgICAgIChn
ZXRGaWxlKToKKyAgICAgICAgKExlYXJuKToKKyAgICAgICAgKExlYXJuLnByb3RvdHlwZS5hcHBl
bmQpOgorICAgICAgICAoTGVhcm4ucHJvdG90eXBlLmZldGNoSXNzdWVDb3VudCk6CisgICAgICAg
ICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2Jh
Y2tib25lL25vZGVfbW9kdWxlcy91bmRlcnNjb3JlL3VuZGVyc2NvcmUuanM6IEFkZGVkLgorICAg
ICAgICAoQ3Rvcik6CisgICAgICAgIChfKToKKyAgICAgICAgKG9wdGltaXplQ2IpOgorICAgICAg
ICAoY2IpOgorICAgICAgICAoXy5pdGVyYXRlZSk6CisgICAgICAgIChjcmVhdGVBc3NpZ25lcik6
CisgICAgICAgIChiYXNlQ3JlYXRlKToKKyAgICAgICAgKHByb3BlcnR5KToKKyAgICAgICAgKGlz
QXJyYXlMaWtlKToKKyAgICAgICAgKF8uZWFjaC5fLmZvckVhY2gpOgorICAgICAgICAoXy5tYXAu
Xy5jb2xsZWN0KToKKyAgICAgICAgKGNyZWF0ZVJlZHVjZS5pdGVyYXRvcik6CisgICAgICAgIChj
cmVhdGVSZWR1Y2UpOgorICAgICAgICAoXy5maW5kLl8uZGV0ZWN0KToKKyAgICAgICAgKF8uZmls
dGVyLl8uc2VsZWN0KToKKyAgICAgICAgKF8ucmVqZWN0KToKKyAgICAgICAgKF8uZXZlcnkuXy5h
bGwpOgorICAgICAgICAoXy5zb21lLl8uYW55KToKKyAgICAgICAgKF8uY29udGFpbnMuXy5pbmNs
dWRlcy5fLmluY2x1ZGUpOgorICAgICAgICAoXy5pbnZva2UpOgorICAgICAgICAoXy5wbHVjayk6
CisgICAgICAgIChfLndoZXJlKToKKyAgICAgICAgKF8uZmluZFdoZXJlKToKKyAgICAgICAgKF8u
bWF4KToKKyAgICAgICAgKF8ubWluKToKKyAgICAgICAgKF8uc2FtcGxlKToKKyAgICAgICAgKF8u
c29ydEJ5KToKKyAgICAgICAgKGdyb3VwKToKKyAgICAgICAgKF8udG9BcnJheSk6CisgICAgICAg
IChfLnNpemUpOgorICAgICAgICAoXy5wYXJ0aXRpb24pOgorICAgICAgICAoXy5maXJzdC5fLmhl
YWQuXy50YWtlKToKKyAgICAgICAgKF8uaW5pdGlhbCk6CisgICAgICAgIChfLmxhc3QpOgorICAg
ICAgICAoXy5yZXN0Ll8udGFpbC5fLmRyb3ApOgorICAgICAgICAoXy5jb21wYWN0KToKKyAgICAg
ICAgKGZsYXR0ZW4pOgorICAgICAgICAoXy5mbGF0dGVuKToKKyAgICAgICAgKF8ud2l0aG91dCk6
CisgICAgICAgIChfLnVuaXEuXy51bmlxdWUpOgorICAgICAgICAoXy51bmlvbik6CisgICAgICAg
IChfLmludGVyc2VjdGlvbik6CisgICAgICAgIChfLmRpZmZlcmVuY2UpOgorICAgICAgICAoXy56
aXApOgorICAgICAgICAoXy51bnppcCk6CisgICAgICAgIChfLm9iamVjdCk6CisgICAgICAgIChj
cmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcik6CisgICAgICAgIChfLnNvcnRlZEluZGV4KToKKyAg
ICAgICAgKGNyZWF0ZUluZGV4RmluZGVyKToKKyAgICAgICAgKF8ucmFuZ2UpOgorICAgICAgICAo
ZXhlY3V0ZUJvdW5kKToKKyAgICAgICAgKGJvdW5kKToKKyAgICAgICAgKF8uYmluZCk6CisgICAg
ICAgIChfLnBhcnRpYWwpOgorICAgICAgICAoXy5iaW5kQWxsKToKKyAgICAgICAgKG1lbW9pemUp
OgorICAgICAgICAoXy5tZW1vaXplKToKKyAgICAgICAgKF8uZGVsYXkpOgorICAgICAgICAobGF0
ZXIpOgorICAgICAgICAoXy50aHJvdHRsZSk6CisgICAgICAgIChfLmRlYm91bmNlKToKKyAgICAg
ICAgKF8ud3JhcCk6CisgICAgICAgIChfLm5lZ2F0ZSk6CisgICAgICAgIChfLmNvbXBvc2UpOgor
ICAgICAgICAoXy5hZnRlcik6CisgICAgICAgIChfLmJlZm9yZSk6CisgICAgICAgIChjb2xsZWN0
Tm9uRW51bVByb3BzKToKKyAgICAgICAgKF8ua2V5cyk6CisgICAgICAgIChfLmFsbEtleXMpOgor
ICAgICAgICAoXy52YWx1ZXMpOgorICAgICAgICAoXy5tYXBPYmplY3QpOgorICAgICAgICAoXy5w
YWlycyk6CisgICAgICAgIChfLmludmVydCk6CisgICAgICAgIChfLmZ1bmN0aW9ucy5fLm1ldGhv
ZHMpOgorICAgICAgICAoXy5maW5kS2V5KToKKyAgICAgICAgKGVsc2UuaXRlcmF0ZWUpOgorICAg
ICAgICAoXy5waWNrKToKKyAgICAgICAgKF8ub21pdCk6CisgICAgICAgIChfLmNyZWF0ZSk6Cisg
ICAgICAgIChfLmNsb25lKToKKyAgICAgICAgKF8udGFwKToKKyAgICAgICAgKF8uaXNNYXRjaCk6
CisgICAgICAgIChlcSk6CisgICAgICAgIChfLmlzRXF1YWwpOgorICAgICAgICAoXy5pc0VtcHR5
KToKKyAgICAgICAgKF8uaXNFbGVtZW50KToKKyAgICAgICAgKF8uaXNPYmplY3QpOgorICAgICAg
ICAoXy5pc0FyZ3VtZW50cyk6CisgICAgICAgIChfLmlzRnVuY3Rpb24pOgorICAgICAgICAoXy5p
c0Zpbml0ZSk6CisgICAgICAgIChfLmlzTmFOKToKKyAgICAgICAgKF8uaXNCb29sZWFuKToKKyAg
ICAgICAgKF8uaXNOdWxsKToKKyAgICAgICAgKF8uaXNVbmRlZmluZWQpOgorICAgICAgICAoXy5o
YXMpOgorICAgICAgICAoXy5ub0NvbmZsaWN0KToKKyAgICAgICAgKF8uaWRlbnRpdHkpOgorICAg
ICAgICAoXy5jb25zdGFudCk6CisgICAgICAgIChfLm5vb3ApOgorICAgICAgICAoXy5wcm9wZXJ0
eU9mKToKKyAgICAgICAgKF8ubWF0Y2hlci5fLm1hdGNoZXMpOgorICAgICAgICAoXy50aW1lcyk6
CisgICAgICAgIChfLnJhbmRvbSk6CisgICAgICAgIChlc2NhcGVyKToKKyAgICAgICAgKGNyZWF0
ZUVzY2FwZXIpOgorICAgICAgICAoXy5yZXN1bHQpOgorICAgICAgICAoXy51bmlxdWVJZCk6Cisg
ICAgICAgIChlc2NhcGVyLmVzY2FwZUNoYXIpOgorICAgICAgICAodGVtcGxhdGUpOgorICAgICAg
ICAoXy50ZW1wbGF0ZSk6CisgICAgICAgIChfLmNoYWluKToKKyAgICAgICAgKHJlc3VsdCk6Cisg
ICAgICAgIChfLm1peGluKToKKyAgICAgICAgKF8ucHJvdG90eXBlLnZhbHVlKToKKyAgICAgICAg
KF8ucHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvcGFja2FnZS5qc29uOiBBZGRl
ZC4KKwogMjAxNy0wNC0yMSAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFNpbXBsZSBsaW5lIGxheW91dDogQWRkIHBlcmZvcm1hbmNlIHRlc3QgdG8gbWVhc3VyZSBt
aWQtd29yZCBsaW5lIGJyZWFraW5nIHdpdGggbG9uZyB0ZXh0LgpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvYmFja2JvbmUvYm93ZXIuanNvbiBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL2Jvd2VyLmpz
b24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NWE3YWQ3MDBiZmZkZTAwMWMyZTk4
NDg0MTA3MzZkNjM1NDY1YmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvYm93ZXIuanNvbgorKysgL2Rldi9udWxsCkBA
IC0xLDExICswLDAgQEAKLXsKLSAgIm5hbWUiOiAidG9kb212Yy1iYWNrYm9uZSIsCi0gICJ2ZXJz
aW9uIjogIjAuMC4wIiwKLSAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAiYmFja2JvbmUiOiAifjEu
MC4wIiwKLSAgICAidW5kZXJzY29yZSI6ICJ+MS40LjQiLAotICAgICJqcXVlcnkiOiAifjEuOS4x
IiwKLSAgICAidG9kb212Yy1jb21tb24iOiAifjAuMS40IiwKLSAgICAiYmFja2JvbmUubG9jYWxT
dG9yYWdlIjogIn4xLjEuMCIKLSAgfQotfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2Jv
bmUvYm93ZXJfY29tcG9uZW50cy9iYWNrYm9uZS5sb2NhbFN0b3JhZ2UvYmFja2JvbmUubG9jYWxT
dG9yYWdlLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvYm93ZXJfY29tcG9uZW50cy9iYWNrYm9u
ZS5sb2NhbFN0b3JhZ2UvYmFja2JvbmUubG9jYWxTdG9yYWdlLmpzCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA1M2JiYzk1OGE0MzAxYjJlMTU3MWUzOWQ0NmFiYWE1YTdhYzNjZjI3Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2JhY2tib25lL2Jvd2VyX2NvbXBvbmVudHMvYmFja2JvbmUubG9jYWxTdG9yYWdlL2JhY2tib25l
LmxvY2FsU3RvcmFnZS5qcworKysgL2Rldi9udWxsCkBAIC0xLDE5MiArMCwwIEBACi0vKioKLSAq
IEJhY2tib25lIGxvY2FsU3RvcmFnZSBBZGFwdGVyCi0gKiBWZXJzaW9uIDEuMS4wCi0gKgotICog
aHR0cHM6Ly9naXRodWIuY29tL2plcm9tZWduL0JhY2tib25lLmxvY2FsU3RvcmFnZQotICovCi0o
ZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHsKLSAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAiZnVu
Y3Rpb24iICYmIGRlZmluZS5hbWQpIHsKLSAgICAgIC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4gYW5v
bnltb3VzIG1vZHVsZS4KLSAgICAgIGRlZmluZShbInVuZGVyc2NvcmUiLCJiYWNrYm9uZSJdLCBm
dW5jdGlvbihfLCBCYWNrYm9uZSkgewotICAgICAgICAvLyBVc2UgZ2xvYmFsIHZhcmlhYmxlcyBp
ZiB0aGUgbG9jYWxzIGlzIHVuZGVmaW5lZC4KLSAgICAgICAgcmV0dXJuIGZhY3RvcnkoXyB8fCBy
b290Ll8sIEJhY2tib25lIHx8IHJvb3QuQmFja2JvbmUpOwotICAgICAgfSk7Ci0gICB9IGVsc2Ug
ewotICAgICAgLy8gUmVxdWlyZUpTIGlzbid0IGJlaW5nIHVzZWQuIEFzc3VtZSB1bmRlcnNjb3Jl
IGFuZCBiYWNrYm9uZSBpcyBsb2FkZWQgaW4gPHNjcmlwdD4gdGFncwotICAgICAgZmFjdG9yeShf
LCBCYWNrYm9uZSk7Ci0gICB9Ci19KHRoaXMsIGZ1bmN0aW9uKF8sIEJhY2tib25lKSB7Ci0vLyBB
IHNpbXBsZSBtb2R1bGUgdG8gcmVwbGFjZSBgQmFja2JvbmUuc3luY2Agd2l0aCAqbG9jYWxTdG9y
YWdlKi1iYXNlZAotLy8gcGVyc2lzdGVuY2UuIE1vZGVscyBhcmUgZ2l2ZW4gR1VJRFMsIGFuZCBz
YXZlZCBpbnRvIGEgSlNPTiBvYmplY3QuIFNpbXBsZQotLy8gYXMgdGhhdC4KLQotLy8gSG9sZCBy
ZWZlcmVuY2UgdG8gVW5kZXJzY29yZS5qcyBhbmQgQmFja2JvbmUuanMgaW4gdGhlIGNsb3N1cmUg
aW4gb3JkZXIKLS8vIHRvIG1ha2UgdGhpbmdzIHdvcmsgZXZlbiBpZiB0aGV5IGFyZSByZW1vdmVk
IGZyb20gdGhlIGdsb2JhbCBuYW1lc3BhY2UKLQotLy8gR2VuZXJhdGUgZm91ciByYW5kb20gaGV4
IGRpZ2l0cy4KLWZ1bmN0aW9uIFM0KCkgewotICAgcmV0dXJuICgoKDErTWF0aC5yYW5kb20oKSkq
MHgxMDAwMCl8MCkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKTsKLX07Ci0KLS8vIEdlbmVyYXRl
IGEgcHNldWRvLUdVSUQgYnkgY29uY2F0ZW5hdGluZyByYW5kb20gaGV4YWRlY2ltYWwuCi1mdW5j
dGlvbiBndWlkKCkgewotICAgcmV0dXJuIChTNCgpK1M0KCkrIi0iK1M0KCkrIi0iK1M0KCkrIi0i
K1M0KCkrIi0iK1M0KCkrUzQoKStTNCgpKTsKLX07Ci0KLS8vIE91ciBTdG9yZSBpcyByZXByZXNl
bnRlZCBieSBhIHNpbmdsZSBKUyBvYmplY3QgaW4gKmxvY2FsU3RvcmFnZSouIENyZWF0ZSBpdAot
Ly8gd2l0aCBhIG1lYW5pbmdmdWwgbmFtZSwgbGlrZSB0aGUgbmFtZSB5b3UnZCBnaXZlIGEgdGFi
bGUuCi0vLyB3aW5kb3cuU3RvcmUgaXMgZGVwcmVjdGF0ZWQsIHVzZSBCYWNrYm9uZS5Mb2NhbFN0
b3JhZ2UgaW5zdGVhZAotQmFja2JvbmUuTG9jYWxTdG9yYWdlID0gd2luZG93LlN0b3JlID0gZnVu
Y3Rpb24obmFtZSkgewotICB0aGlzLm5hbWUgPSBuYW1lOwotICB2YXIgc3RvcmUgPSB0aGlzLmxv
Y2FsU3RvcmFnZSgpLmdldEl0ZW0odGhpcy5uYW1lKTsKLSAgdGhpcy5yZWNvcmRzID0gKHN0b3Jl
ICYmIHN0b3JlLnNwbGl0KCIsIikpIHx8IFtdOwotfTsKLQotXy5leHRlbmQoQmFja2JvbmUuTG9j
YWxTdG9yYWdlLnByb3RvdHlwZSwgewotCi0gIC8vIFNhdmUgdGhlIGN1cnJlbnQgc3RhdGUgb2Yg
dGhlICoqU3RvcmUqKiB0byAqbG9jYWxTdG9yYWdlKi4KLSAgc2F2ZTogZnVuY3Rpb24oKSB7Ci0g
ICAgdGhpcy5sb2NhbFN0b3JhZ2UoKS5zZXRJdGVtKHRoaXMubmFtZSwgdGhpcy5yZWNvcmRzLmpv
aW4oIiwiKSk7Ci0gIH0sCi0KLSAgLy8gQWRkIGEgbW9kZWwsIGdpdmluZyBpdCBhIChob3BlZnVs
bHkpLXVuaXF1ZSBHVUlELCBpZiBpdCBkb2Vzbid0IGFscmVhZHkKLSAgLy8gaGF2ZSBhbiBpZCBv
ZiBpdCdzIG93bi4KLSAgY3JlYXRlOiBmdW5jdGlvbihtb2RlbCkgewotICAgIGlmICghbW9kZWwu
aWQpIHsKLSAgICAgIG1vZGVsLmlkID0gZ3VpZCgpOwotICAgICAgbW9kZWwuc2V0KG1vZGVsLmlk
QXR0cmlidXRlLCBtb2RlbC5pZCk7Ci0gICAgfQotICAgIHRoaXMubG9jYWxTdG9yYWdlKCkuc2V0
SXRlbSh0aGlzLm5hbWUrIi0iK21vZGVsLmlkLCBKU09OLnN0cmluZ2lmeShtb2RlbCkpOwotICAg
IHRoaXMucmVjb3Jkcy5wdXNoKG1vZGVsLmlkLnRvU3RyaW5nKCkpOwotICAgIHRoaXMuc2F2ZSgp
OwotICAgIHJldHVybiB0aGlzLmZpbmQobW9kZWwpOwotICB9LAotCi0gIC8vIFVwZGF0ZSBhIG1v
ZGVsIGJ5IHJlcGxhY2luZyBpdHMgY29weSBpbiBgdGhpcy5kYXRhYC4KLSAgdXBkYXRlOiBmdW5j
dGlvbihtb2RlbCkgewotICAgIHRoaXMubG9jYWxTdG9yYWdlKCkuc2V0SXRlbSh0aGlzLm5hbWUr
Ii0iK21vZGVsLmlkLCBKU09OLnN0cmluZ2lmeShtb2RlbCkpOwotICAgIGlmICghXy5pbmNsdWRl
KHRoaXMucmVjb3JkcywgbW9kZWwuaWQudG9TdHJpbmcoKSkpCi0gICAgICB0aGlzLnJlY29yZHMu
cHVzaChtb2RlbC5pZC50b1N0cmluZygpKTsgdGhpcy5zYXZlKCk7Ci0gICAgcmV0dXJuIHRoaXMu
ZmluZChtb2RlbCk7Ci0gIH0sCi0KLSAgLy8gUmV0cmlldmUgYSBtb2RlbCBmcm9tIGB0aGlzLmRh
dGFgIGJ5IGlkLgotICBmaW5kOiBmdW5jdGlvbihtb2RlbCkgewotICAgIHJldHVybiB0aGlzLmpz
b25EYXRhKHRoaXMubG9jYWxTdG9yYWdlKCkuZ2V0SXRlbSh0aGlzLm5hbWUrIi0iK21vZGVsLmlk
KSk7Ci0gIH0sCi0KLSAgLy8gUmV0dXJuIHRoZSBhcnJheSBvZiBhbGwgbW9kZWxzIGN1cnJlbnRs
eSBpbiBzdG9yYWdlLgotICBmaW5kQWxsOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gXyh0aGlz
LnJlY29yZHMpLmNoYWluKCkKLSAgICAgIC5tYXAoZnVuY3Rpb24oaWQpewotICAgICAgICByZXR1
cm4gdGhpcy5qc29uRGF0YSh0aGlzLmxvY2FsU3RvcmFnZSgpLmdldEl0ZW0odGhpcy5uYW1lKyIt
IitpZCkpOwotICAgICAgfSwgdGhpcykKLSAgICAgIC5jb21wYWN0KCkKLSAgICAgIC52YWx1ZSgp
OwotICB9LAotCi0gIC8vIERlbGV0ZSBhIG1vZGVsIGZyb20gYHRoaXMuZGF0YWAsIHJldHVybmlu
ZyBpdC4KLSAgZGVzdHJveTogZnVuY3Rpb24obW9kZWwpIHsKLSAgICBpZiAobW9kZWwuaXNOZXco
KSkKLSAgICAgIHJldHVybiBmYWxzZQotICAgIHRoaXMubG9jYWxTdG9yYWdlKCkucmVtb3ZlSXRl
bSh0aGlzLm5hbWUrIi0iK21vZGVsLmlkKTsKLSAgICB0aGlzLnJlY29yZHMgPSBfLnJlamVjdCh0
aGlzLnJlY29yZHMsIGZ1bmN0aW9uKGlkKXsKLSAgICAgIHJldHVybiBpZCA9PT0gbW9kZWwuaWQu
dG9TdHJpbmcoKTsKLSAgICB9KTsKLSAgICB0aGlzLnNhdmUoKTsKLSAgICByZXR1cm4gbW9kZWw7
Ci0gIH0sCi0KLSAgbG9jYWxTdG9yYWdlOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gbG9jYWxT
dG9yYWdlOwotICB9LAotICAKLSAgLy8gZml4IGZvciAiaWxsZWdhbCBhY2Nlc3MiIGVycm9yIG9u
IEFuZHJvaWQgd2hlbiBKU09OLnBhcnNlIGlzIHBhc3NlZCBudWxsCi0gIGpzb25EYXRhOiBmdW5j
dGlvbiAoZGF0YSkgewotICAgICAgcmV0dXJuIGRhdGEgJiYgSlNPTi5wYXJzZShkYXRhKTsKLSAg
fQotCi19KTsKLQotLy8gbG9jYWxTeW5jIGRlbGVnYXRlIHRvIHRoZSBtb2RlbCBvciBjb2xsZWN0
aW9uJ3MKLS8vICpsb2NhbFN0b3JhZ2UqIHByb3BlcnR5LCB3aGljaCBzaG91bGQgYmUgYW4gaW5z
dGFuY2Ugb2YgYFN0b3JlYC4KLS8vIHdpbmRvdy5TdG9yZS5zeW5jIGFuZCBCYWNrYm9uZS5sb2Nh
bFN5bmMgaXMgZGVwcmVjdGF0ZWQsIHVzZSBCYWNrYm9uZS5Mb2NhbFN0b3JhZ2Uuc3luYyBpbnN0
ZWFkCi1CYWNrYm9uZS5Mb2NhbFN0b3JhZ2Uuc3luYyA9IHdpbmRvdy5TdG9yZS5zeW5jID0gQmFj
a2JvbmUubG9jYWxTeW5jID0gZnVuY3Rpb24obWV0aG9kLCBtb2RlbCwgb3B0aW9ucykgewotICB2
YXIgc3RvcmUgPSBtb2RlbC5sb2NhbFN0b3JhZ2UgfHwgbW9kZWwuY29sbGVjdGlvbi5sb2NhbFN0
b3JhZ2U7Ci0KLSAgdmFyIHJlc3AsIGVycm9yTWVzc2FnZSwgc3luY0RmZCA9ICQuRGVmZXJyZWQg
JiYgJC5EZWZlcnJlZCgpOyAvL0lmICQgaXMgaGF2aW5nIERlZmVycmVkIC0gdXNlIGl0LiAKLQot
ICB0cnkgewotCi0gICAgc3dpdGNoIChtZXRob2QpIHsKLSAgICAgIGNhc2UgInJlYWQiOgotICAg
ICAgICByZXNwID0gbW9kZWwuaWQgIT0gdW5kZWZpbmVkID8gc3RvcmUuZmluZChtb2RlbCkgOiBz
dG9yZS5maW5kQWxsKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAiY3JlYXRlIjoKLSAg
ICAgICAgcmVzcCA9IHN0b3JlLmNyZWF0ZShtb2RlbCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSAidXBkYXRlIjoKLSAgICAgICAgcmVzcCA9IHN0b3JlLnVwZGF0ZShtb2RlbCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSAiZGVsZXRlIjoKLSAgICAgICAgcmVzcCA9IHN0b3JlLmRl
c3Ryb3kobW9kZWwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgfSBjYXRjaChlcnJvcikg
ewotICAgIGlmIChlcnJvci5jb2RlID09PSBET01FeGNlcHRpb24uUVVPVEFfRVhDRUVERURfRVJS
ICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2UubGVuZ3RoID09PSAwKQotICAgICAgZXJyb3JNZXNzYWdl
ID0gIlByaXZhdGUgYnJvd3NpbmcgaXMgdW5zdXBwb3J0ZWQiOwotICAgIGVsc2UKLSAgICAgIGVy
cm9yTWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7Ci0gIH0KLQotICBpZiAocmVzcCkgewotICAgIGlm
IChvcHRpb25zICYmIG9wdGlvbnMuc3VjY2VzcykKLSAgICAgIGlmIChCYWNrYm9uZS5WRVJTSU9O
ID09PSAiMC45LjEwIikgewotICAgICAgICBvcHRpb25zLnN1Y2Nlc3MobW9kZWwsIHJlc3AsIG9w
dGlvbnMpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgb3B0aW9ucy5zdWNjZXNzKHJlc3ApOwot
ICAgICAgfQotICAgIGlmIChzeW5jRGZkKQotICAgICAgc3luY0RmZC5yZXNvbHZlKHJlc3ApOwot
Ci0gIH0gZWxzZSB7Ci0gICAgZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlID8gZXJyb3JNZXNz
YWdlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIlJlY29yZCBOb3QgRm91bmQi
OwotICAgIAotICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZXJyb3IpCi0gICAgICBpZiAoQmFj
a2JvbmUuVkVSU0lPTiA9PT0gIjAuOS4xMCIpIHsKLSAgICAgICAgb3B0aW9ucy5lcnJvcihtb2Rl
bCwgZXJyb3JNZXNzYWdlLCBvcHRpb25zKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG9wdGlv
bnMuZXJyb3IoZXJyb3JNZXNzYWdlKTsKLSAgICAgIH0KLSAgICAgIAotICAgIGlmIChzeW5jRGZk
KQotICAgICAgc3luY0RmZC5yZWplY3QoZXJyb3JNZXNzYWdlKTsKLSAgfQotICAKLSAgLy8gYWRk
IGNvbXBhdGliaWxpdHkgd2l0aCAkLmFqYXgKLSAgLy8gYWx3YXlzIGV4ZWN1dGUgY2FsbGJhY2sg
Zm9yIHN1Y2Nlc3MgYW5kIGVycm9yCi0gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuY29tcGxldGUp
IG9wdGlvbnMuY29tcGxldGUocmVzcCk7Ci0KLSAgcmV0dXJuIHN5bmNEZmQgJiYgc3luY0RmZC5w
cm9taXNlKCk7Ci19OwotCi1CYWNrYm9uZS5hamF4U3luYyA9IEJhY2tib25lLnN5bmM7Ci0KLUJh
Y2tib25lLmdldFN5bmNNZXRob2QgPSBmdW5jdGlvbihtb2RlbCkgewotICBpZihtb2RlbC5sb2Nh
bFN0b3JhZ2UgfHwgKG1vZGVsLmNvbGxlY3Rpb24gJiYgbW9kZWwuY29sbGVjdGlvbi5sb2NhbFN0
b3JhZ2UpKSB7Ci0gICAgcmV0dXJuIEJhY2tib25lLmxvY2FsU3luYzsKLSAgfQotCi0gIHJldHVy
biBCYWNrYm9uZS5hamF4U3luYzsKLX07Ci0KLS8vIE92ZXJyaWRlICdCYWNrYm9uZS5zeW5jJyB0
byBkZWZhdWx0IHRvIGxvY2FsU3luYywKLS8vIHRoZSBvcmlnaW5hbCAnQmFja2JvbmUuc3luYycg
aXMgc3RpbGwgYXZhaWxhYmxlIGluICdCYWNrYm9uZS5hamF4U3luYycKLUJhY2tib25lLnN5bmMg
PSBmdW5jdGlvbihtZXRob2QsIG1vZGVsLCBvcHRpb25zKSB7Ci0gIHJldHVybiBCYWNrYm9uZS5n
ZXRTeW5jTWV0aG9kKG1vZGVsKS5hcHBseSh0aGlzLCBbbWV0aG9kLCBtb2RlbCwgb3B0aW9uc10p
OwotfTsKLQotcmV0dXJuIEJhY2tib25lLkxvY2FsU3RvcmFnZTsKLX0pKTsKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9ib3dlcl9j
b21wb25lbnRzL2JhY2tib25lL2JhY2tib25lLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvYm93
ZXJfY29tcG9uZW50cy9iYWNrYm9uZS9iYWNrYm9uZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMzUxMmQ0MmZiNDNjODNlMmNkZDg2ODA0YzhlZjI3NmJkYTAwNmZlZi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNr
Ym9uZS9ib3dlcl9jb21wb25lbnRzL2JhY2tib25lL2JhY2tib25lLmpzCisrKyAvZGV2L251bGwK
QEAgLTEsMTU3MSArMCwwIEBACi0vLyAgICAgQmFja2JvbmUuanMgMS4wLjAKLQotLy8gICAgIChj
KSAyMDEwLTIwMTMgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIEluYy4KLS8vICAgICBC
YWNrYm9uZSBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4K
LS8vICAgICBGb3IgYWxsIGRldGFpbHMgYW5kIGRvY3VtZW50YXRpb246Ci0vLyAgICAgaHR0cDov
L2JhY2tib25lanMub3JnCi0KLShmdW5jdGlvbigpewotCi0gIC8vIEluaXRpYWwgU2V0dXAKLSAg
Ly8gLS0tLS0tLS0tLS0tLQotCi0gIC8vIFNhdmUgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBv
YmplY3QgKGB3aW5kb3dgIGluIHRoZSBicm93c2VyLCBgZXhwb3J0c2AKLSAgLy8gb24gdGhlIHNl
cnZlcikuCi0gIHZhciByb290ID0gdGhpczsKLQotICAvLyBTYXZlIHRoZSBwcmV2aW91cyB2YWx1
ZSBvZiB0aGUgYEJhY2tib25lYCB2YXJpYWJsZSwgc28gdGhhdCBpdCBjYW4gYmUKLSAgLy8gcmVz
dG9yZWQgbGF0ZXIgb24sIGlmIGBub0NvbmZsaWN0YCBpcyB1c2VkLgotICB2YXIgcHJldmlvdXNC
YWNrYm9uZSA9IHJvb3QuQmFja2JvbmU7Ci0KLSAgLy8gQ3JlYXRlIGxvY2FsIHJlZmVyZW5jZXMg
dG8gYXJyYXkgbWV0aG9kcyB3ZSdsbCB3YW50IHRvIHVzZSBsYXRlci4KLSAgdmFyIGFycmF5ID0g
W107Ci0gIHZhciBwdXNoID0gYXJyYXkucHVzaDsKLSAgdmFyIHNsaWNlID0gYXJyYXkuc2xpY2U7
Ci0gIHZhciBzcGxpY2UgPSBhcnJheS5zcGxpY2U7Ci0KLSAgLy8gVGhlIHRvcC1sZXZlbCBuYW1l
c3BhY2UuIEFsbCBwdWJsaWMgQmFja2JvbmUgY2xhc3NlcyBhbmQgbW9kdWxlcyB3aWxsCi0gIC8v
IGJlIGF0dGFjaGVkIHRvIHRoaXMuIEV4cG9ydGVkIGZvciBib3RoIHRoZSBicm93c2VyIGFuZCB0
aGUgc2VydmVyLgotICB2YXIgQmFja2JvbmU7Ci0gIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3Vu
ZGVmaW5lZCcpIHsKLSAgICBCYWNrYm9uZSA9IGV4cG9ydHM7Ci0gIH0gZWxzZSB7Ci0gICAgQmFj
a2JvbmUgPSByb290LkJhY2tib25lID0ge307Ci0gIH0KLQotICAvLyBDdXJyZW50IHZlcnNpb24g
b2YgdGhlIGxpYnJhcnkuIEtlZXAgaW4gc3luYyB3aXRoIGBwYWNrYWdlLmpzb25gLgotICBCYWNr
Ym9uZS5WRVJTSU9OID0gJzEuMC4wJzsKLQotICAvLyBSZXF1aXJlIFVuZGVyc2NvcmUsIGlmIHdl
J3JlIG9uIHRoZSBzZXJ2ZXIsIGFuZCBpdCdzIG5vdCBhbHJlYWR5IHByZXNlbnQuCi0gIHZhciBf
ID0gcm9vdC5fOwotICBpZiAoIV8gJiYgKHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJykp
IF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyk7Ci0KLSAgLy8gRm9yIEJhY2tib25lJ3MgcHVycG9z
ZXMsIGpRdWVyeSwgWmVwdG8sIEVuZGVyLCBvciBNeSBMaWJyYXJ5IChraWRkaW5nKSBvd25zCi0g
IC8vIHRoZSBgJGAgdmFyaWFibGUuCi0gIEJhY2tib25lLiQgPSByb290LmpRdWVyeSB8fCByb290
LlplcHRvIHx8IHJvb3QuZW5kZXIgfHwgcm9vdC4kOwotCi0gIC8vIFJ1bnMgQmFja2JvbmUuanMg
aW4gKm5vQ29uZmxpY3QqIG1vZGUsIHJldHVybmluZyB0aGUgYEJhY2tib25lYCB2YXJpYWJsZQot
ICAvLyB0byBpdHMgcHJldmlvdXMgb3duZXIuIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhpcyBC
YWNrYm9uZSBvYmplY3QuCi0gIEJhY2tib25lLm5vQ29uZmxpY3QgPSBmdW5jdGlvbigpIHsKLSAg
ICByb290LkJhY2tib25lID0gcHJldmlvdXNCYWNrYm9uZTsKLSAgICByZXR1cm4gdGhpczsKLSAg
fTsKLQotICAvLyBUdXJuIG9uIGBlbXVsYXRlSFRUUGAgdG8gc3VwcG9ydCBsZWdhY3kgSFRUUCBz
ZXJ2ZXJzLiBTZXR0aW5nIHRoaXMgb3B0aW9uCi0gIC8vIHdpbGwgZmFrZSBgIlBVVCJgIGFuZCBg
IkRFTEVURSJgIHJlcXVlc3RzIHZpYSB0aGUgYF9tZXRob2RgIHBhcmFtZXRlciBhbmQKLSAgLy8g
c2V0IGEgYFgtSHR0cC1NZXRob2QtT3ZlcnJpZGVgIGhlYWRlci4KLSAgQmFja2JvbmUuZW11bGF0
ZUhUVFAgPSBmYWxzZTsKLQotICAvLyBUdXJuIG9uIGBlbXVsYXRlSlNPTmAgdG8gc3VwcG9ydCBs
ZWdhY3kgc2VydmVycyB0aGF0IGNhbid0IGRlYWwgd2l0aCBkaXJlY3QKLSAgLy8gYGFwcGxpY2F0
aW9uL2pzb25gIHJlcXVlc3RzIC4uLiB3aWxsIGVuY29kZSB0aGUgYm9keSBhcwotICAvLyBgYXBw
bGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkYCBpbnN0ZWFkIGFuZCB3aWxsIHNlbmQgdGhl
IG1vZGVsIGluIGEKLSAgLy8gZm9ybSBwYXJhbSBuYW1lZCBgbW9kZWxgLgotICBCYWNrYm9uZS5l
bXVsYXRlSlNPTiA9IGZhbHNlOwotCi0gIC8vIEJhY2tib25lLkV2ZW50cwotICAvLyAtLS0tLS0t
LS0tLS0tLS0KLQotICAvLyBBIG1vZHVsZSB0aGF0IGNhbiBiZSBtaXhlZCBpbiB0byAqYW55IG9i
amVjdCogaW4gb3JkZXIgdG8gcHJvdmlkZSBpdCB3aXRoCi0gIC8vIGN1c3RvbSBldmVudHMuIFlv
dSBtYXkgYmluZCB3aXRoIGBvbmAgb3IgcmVtb3ZlIHdpdGggYG9mZmAgY2FsbGJhY2sKLSAgLy8g
ZnVuY3Rpb25zIHRvIGFuIGV2ZW50OyBgdHJpZ2dlcmAtaW5nIGFuIGV2ZW50IGZpcmVzIGFsbCBj
YWxsYmFja3MgaW4KLSAgLy8gc3VjY2Vzc2lvbi4KLSAgLy8KLSAgLy8gICAgIHZhciBvYmplY3Qg
PSB7fTsKLSAgLy8gICAgIF8uZXh0ZW5kKG9iamVjdCwgQmFja2JvbmUuRXZlbnRzKTsKLSAgLy8g
ICAgIG9iamVjdC5vbignZXhwYW5kJywgZnVuY3Rpb24oKXsgYWxlcnQoJ2V4cGFuZGVkJyk7IH0p
OwotICAvLyAgICAgb2JqZWN0LnRyaWdnZXIoJ2V4cGFuZCcpOwotICAvLwotICB2YXIgRXZlbnRz
ID0gQmFja2JvbmUuRXZlbnRzID0gewotCi0gICAgLy8gQmluZCBhbiBldmVudCB0byBhIGBjYWxs
YmFja2AgZnVuY3Rpb24uIFBhc3NpbmcgYCJhbGwiYCB3aWxsIGJpbmQKLSAgICAvLyB0aGUgY2Fs
bGJhY2sgdG8gYWxsIGV2ZW50cyBmaXJlZC4KLSAgICBvbjogZnVuY3Rpb24obmFtZSwgY2FsbGJh
Y2ssIGNvbnRleHQpIHsKLSAgICAgIGlmICghZXZlbnRzQXBpKHRoaXMsICdvbicsIG5hbWUsIFtj
YWxsYmFjaywgY29udGV4dF0pIHx8ICFjYWxsYmFjaykgcmV0dXJuIHRoaXM7Ci0gICAgICB0aGlz
Ll9ldmVudHMgfHwgKHRoaXMuX2V2ZW50cyA9IHt9KTsKLSAgICAgIHZhciBldmVudHMgPSB0aGlz
Ll9ldmVudHNbbmFtZV0gfHwgKHRoaXMuX2V2ZW50c1tuYW1lXSA9IFtdKTsKLSAgICAgIGV2ZW50
cy5wdXNoKHtjYWxsYmFjazogY2FsbGJhY2ssIGNvbnRleHQ6IGNvbnRleHQsIGN0eDogY29udGV4
dCB8fCB0aGlzfSk7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0gICAgLy8gQmluZCBh
biBldmVudCB0byBvbmx5IGJlIHRyaWdnZXJlZCBhIHNpbmdsZSB0aW1lLiBBZnRlciB0aGUgZmly
c3QgdGltZQotICAgIC8vIHRoZSBjYWxsYmFjayBpcyBpbnZva2VkLCBpdCB3aWxsIGJlIHJlbW92
ZWQuCi0gICAgb25jZTogZnVuY3Rpb24obmFtZSwgY2FsbGJhY2ssIGNvbnRleHQpIHsKLSAgICAg
IGlmICghZXZlbnRzQXBpKHRoaXMsICdvbmNlJywgbmFtZSwgW2NhbGxiYWNrLCBjb250ZXh0XSkg
fHwgIWNhbGxiYWNrKSByZXR1cm4gdGhpczsKLSAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAg
IHZhciBvbmNlID0gXy5vbmNlKGZ1bmN0aW9uKCkgewotICAgICAgICBzZWxmLm9mZihuYW1lLCBv
bmNlKTsKLSAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgIH0p
OwotICAgICAgb25jZS5fY2FsbGJhY2sgPSBjYWxsYmFjazsKLSAgICAgIHJldHVybiB0aGlzLm9u
KG5hbWUsIG9uY2UsIGNvbnRleHQpOwotICAgIH0sCi0KLSAgICAvLyBSZW1vdmUgb25lIG9yIG1h
bnkgY2FsbGJhY2tzLiBJZiBgY29udGV4dGAgaXMgbnVsbCwgcmVtb3ZlcyBhbGwKLSAgICAvLyBj
YWxsYmFja3Mgd2l0aCB0aGF0IGZ1bmN0aW9uLiBJZiBgY2FsbGJhY2tgIGlzIG51bGwsIHJlbW92
ZXMgYWxsCi0gICAgLy8gY2FsbGJhY2tzIGZvciB0aGUgZXZlbnQuIElmIGBuYW1lYCBpcyBudWxs
LCByZW1vdmVzIGFsbCBib3VuZAotICAgIC8vIGNhbGxiYWNrcyBmb3IgYWxsIGV2ZW50cy4KLSAg
ICBvZmY6IGZ1bmN0aW9uKG5hbWUsIGNhbGxiYWNrLCBjb250ZXh0KSB7Ci0gICAgICB2YXIgcmV0
YWluLCBldiwgZXZlbnRzLCBuYW1lcywgaSwgbCwgaiwgazsKLSAgICAgIGlmICghdGhpcy5fZXZl
bnRzIHx8ICFldmVudHNBcGkodGhpcywgJ29mZicsIG5hbWUsIFtjYWxsYmFjaywgY29udGV4dF0p
KSByZXR1cm4gdGhpczsKLSAgICAgIGlmICghbmFtZSAmJiAhY2FsbGJhY2sgJiYgIWNvbnRleHQp
IHsKLSAgICAgICAgdGhpcy5fZXZlbnRzID0ge307Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAg
ICAgfQotCi0gICAgICBuYW1lcyA9IG5hbWUgPyBbbmFtZV0gOiBfLmtleXModGhpcy5fZXZlbnRz
KTsKLSAgICAgIGZvciAoaSA9IDAsIGwgPSBuYW1lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAg
ICAgICAgbmFtZSA9IG5hbWVzW2ldOwotICAgICAgICBpZiAoZXZlbnRzID0gdGhpcy5fZXZlbnRz
W25hbWVdKSB7Ci0gICAgICAgICAgdGhpcy5fZXZlbnRzW25hbWVdID0gcmV0YWluID0gW107Ci0g
ICAgICAgICAgaWYgKGNhbGxiYWNrIHx8IGNvbnRleHQpIHsKLSAgICAgICAgICAgIGZvciAoaiA9
IDAsIGsgPSBldmVudHMubGVuZ3RoOyBqIDwgazsgaisrKSB7Ci0gICAgICAgICAgICAgIGV2ID0g
ZXZlbnRzW2pdOwotICAgICAgICAgICAgICBpZiAoKGNhbGxiYWNrICYmIGNhbGxiYWNrICE9PSBl
di5jYWxsYmFjayAmJiBjYWxsYmFjayAhPT0gZXYuY2FsbGJhY2suX2NhbGxiYWNrKSB8fAotICAg
ICAgICAgICAgICAgICAgKGNvbnRleHQgJiYgY29udGV4dCAhPT0gZXYuY29udGV4dCkpIHsKLSAg
ICAgICAgICAgICAgICByZXRhaW4ucHVzaChldik7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKCFyZXRhaW4ubGVuZ3RoKSBkZWxldGUg
dGhpcy5fZXZlbnRzW25hbWVdOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiB0
aGlzOwotICAgIH0sCi0KLSAgICAvLyBUcmlnZ2VyIG9uZSBvciBtYW55IGV2ZW50cywgZmlyaW5n
IGFsbCBib3VuZCBjYWxsYmFja3MuIENhbGxiYWNrcyBhcmUKLSAgICAvLyBwYXNzZWQgdGhlIHNh
bWUgYXJndW1lbnRzIGFzIGB0cmlnZ2VyYCBpcywgYXBhcnQgZnJvbSB0aGUgZXZlbnQgbmFtZQot
ICAgIC8vICh1bmxlc3MgeW91J3JlIGxpc3RlbmluZyBvbiBgImFsbCJgLCB3aGljaCB3aWxsIGNh
dXNlIHlvdXIgY2FsbGJhY2sgdG8KLSAgICAvLyByZWNlaXZlIHRoZSB0cnVlIG5hbWUgb2YgdGhl
IGV2ZW50IGFzIHRoZSBmaXJzdCBhcmd1bWVudCkuCi0gICAgdHJpZ2dlcjogZnVuY3Rpb24obmFt
ZSkgewotICAgICAgaWYgKCF0aGlzLl9ldmVudHMpIHJldHVybiB0aGlzOwotICAgICAgdmFyIGFy
Z3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7Ci0gICAgICBpZiAoIWV2ZW50c0FwaSh0aGlz
LCAndHJpZ2dlcicsIG5hbWUsIGFyZ3MpKSByZXR1cm4gdGhpczsKLSAgICAgIHZhciBldmVudHMg
PSB0aGlzLl9ldmVudHNbbmFtZV07Ci0gICAgICB2YXIgYWxsRXZlbnRzID0gdGhpcy5fZXZlbnRz
LmFsbDsKLSAgICAgIGlmIChldmVudHMpIHRyaWdnZXJFdmVudHMoZXZlbnRzLCBhcmdzKTsKLSAg
ICAgIGlmIChhbGxFdmVudHMpIHRyaWdnZXJFdmVudHMoYWxsRXZlbnRzLCBhcmd1bWVudHMpOwot
ICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLQotICAgIC8vIFRlbGwgdGhpcyBvYmplY3QgdG8g
c3RvcCBsaXN0ZW5pbmcgdG8gZWl0aGVyIHNwZWNpZmljIGV2ZW50cyAuLi4gb3IKLSAgICAvLyB0
byBldmVyeSBvYmplY3QgaXQncyBjdXJyZW50bHkgbGlzdGVuaW5nIHRvLgotICAgIHN0b3BMaXN0
ZW5pbmc6IGZ1bmN0aW9uKG9iaiwgbmFtZSwgY2FsbGJhY2spIHsKLSAgICAgIHZhciBsaXN0ZW5l
cnMgPSB0aGlzLl9saXN0ZW5lcnM7Ci0gICAgICBpZiAoIWxpc3RlbmVycykgcmV0dXJuIHRoaXM7
Ci0gICAgICB2YXIgZGVsZXRlTGlzdGVuZXIgPSAhbmFtZSAmJiAhY2FsbGJhY2s7Ci0gICAgICBp
ZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSBjYWxsYmFjayA9IHRoaXM7Ci0gICAgICBpZiAo
b2JqKSAobGlzdGVuZXJzID0ge30pW29iai5fbGlzdGVuZXJJZF0gPSBvYmo7Ci0gICAgICBmb3Ig
KHZhciBpZCBpbiBsaXN0ZW5lcnMpIHsKLSAgICAgICAgbGlzdGVuZXJzW2lkXS5vZmYobmFtZSwg
Y2FsbGJhY2ssIHRoaXMpOwotICAgICAgICBpZiAoZGVsZXRlTGlzdGVuZXIpIGRlbGV0ZSB0aGlz
Ll9saXN0ZW5lcnNbaWRdOwotICAgICAgfQotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0g
IH07Ci0KLSAgLy8gUmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gc3BsaXQgZXZlbnQgc3RyaW5n
cy4KLSAgdmFyIGV2ZW50U3BsaXR0ZXIgPSAvXHMrLzsKLQotICAvLyBJbXBsZW1lbnQgZmFuY3kg
ZmVhdHVyZXMgb2YgdGhlIEV2ZW50cyBBUEkgc3VjaCBhcyBtdWx0aXBsZSBldmVudAotICAvLyBu
YW1lcyBgImNoYW5nZSBibHVyImAgYW5kIGpRdWVyeS1zdHlsZSBldmVudCBtYXBzIGB7Y2hhbmdl
OiBhY3Rpb259YAotICAvLyBpbiB0ZXJtcyBvZiB0aGUgZXhpc3RpbmcgQVBJLgotICB2YXIgZXZl
bnRzQXBpID0gZnVuY3Rpb24ob2JqLCBhY3Rpb24sIG5hbWUsIHJlc3QpIHsKLSAgICBpZiAoIW5h
bWUpIHJldHVybiB0cnVlOwotCi0gICAgLy8gSGFuZGxlIGV2ZW50IG1hcHMuCi0gICAgaWYgKHR5
cGVvZiBuYW1lID09PSAnb2JqZWN0JykgewotICAgICAgZm9yICh2YXIga2V5IGluIG5hbWUpIHsK
LSAgICAgICAgb2JqW2FjdGlvbl0uYXBwbHkob2JqLCBba2V5LCBuYW1lW2tleV1dLmNvbmNhdChy
ZXN0KSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gSGFu
ZGxlIHNwYWNlIHNlcGFyYXRlZCBldmVudCBuYW1lcy4KLSAgICBpZiAoZXZlbnRTcGxpdHRlci50
ZXN0KG5hbWUpKSB7Ci0gICAgICB2YXIgbmFtZXMgPSBuYW1lLnNwbGl0KGV2ZW50U3BsaXR0ZXIp
OwotICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBuYW1lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsK
LSAgICAgICAgb2JqW2FjdGlvbl0uYXBwbHkob2JqLCBbbmFtZXNbaV1dLmNvbmNhdChyZXN0KSk7
Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci0gIH07Ci0KLSAgLy8gQSBkaWZmaWN1bHQtdG8tYmVsaWV2ZSwgYnV0IG9wdGltaXplZCBpbnRl
cm5hbCBkaXNwYXRjaCBmdW5jdGlvbiBmb3IKLSAgLy8gdHJpZ2dlcmluZyBldmVudHMuIFRyaWVz
IHRvIGtlZXAgdGhlIHVzdWFsIGNhc2VzIHNwZWVkeSAobW9zdCBpbnRlcm5hbAotICAvLyBCYWNr
Ym9uZSBldmVudHMgaGF2ZSAzIGFyZ3VtZW50cykuCi0gIHZhciB0cmlnZ2VyRXZlbnRzID0gZnVu
Y3Rpb24oZXZlbnRzLCBhcmdzKSB7Ci0gICAgdmFyIGV2LCBpID0gLTEsIGwgPSBldmVudHMubGVu
Z3RoLCBhMSA9IGFyZ3NbMF0sIGEyID0gYXJnc1sxXSwgYTMgPSBhcmdzWzJdOwotICAgIHN3aXRj
aCAoYXJncy5sZW5ndGgpIHsKLSAgICAgIGNhc2UgMDogd2hpbGUgKCsraSA8IGwpIChldiA9IGV2
ZW50c1tpXSkuY2FsbGJhY2suY2FsbChldi5jdHgpOyByZXR1cm47Ci0gICAgICBjYXNlIDE6IHdo
aWxlICgrK2kgPCBsKSAoZXYgPSBldmVudHNbaV0pLmNhbGxiYWNrLmNhbGwoZXYuY3R4LCBhMSk7
IHJldHVybjsKLSAgICAgIGNhc2UgMjogd2hpbGUgKCsraSA8IGwpIChldiA9IGV2ZW50c1tpXSku
Y2FsbGJhY2suY2FsbChldi5jdHgsIGExLCBhMik7IHJldHVybjsKLSAgICAgIGNhc2UgMzogd2hp
bGUgKCsraSA8IGwpIChldiA9IGV2ZW50c1tpXSkuY2FsbGJhY2suY2FsbChldi5jdHgsIGExLCBh
MiwgYTMpOyByZXR1cm47Ci0gICAgICBkZWZhdWx0OiB3aGlsZSAoKytpIDwgbCkgKGV2ID0gZXZl
bnRzW2ldKS5jYWxsYmFjay5hcHBseShldi5jdHgsIGFyZ3MpOwotICAgIH0KLSAgfTsKLQotICB2
YXIgbGlzdGVuTWV0aG9kcyA9IHtsaXN0ZW5UbzogJ29uJywgbGlzdGVuVG9PbmNlOiAnb25jZSd9
OwotCi0gIC8vIEludmVyc2lvbi1vZi1jb250cm9sIHZlcnNpb25zIG9mIGBvbmAgYW5kIGBvbmNl
YC4gVGVsbCAqdGhpcyogb2JqZWN0IHRvCi0gIC8vIGxpc3RlbiB0byBhbiBldmVudCBpbiBhbm90
aGVyIG9iamVjdCAuLi4ga2VlcGluZyB0cmFjayBvZiB3aGF0IGl0J3MKLSAgLy8gbGlzdGVuaW5n
IHRvLgotICBfLmVhY2gobGlzdGVuTWV0aG9kcywgZnVuY3Rpb24oaW1wbGVtZW50YXRpb24sIG1l
dGhvZCkgewotICAgIEV2ZW50c1ttZXRob2RdID0gZnVuY3Rpb24ob2JqLCBuYW1lLCBjYWxsYmFj
aykgewotICAgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVycyB8fCAodGhpcy5fbGlz
dGVuZXJzID0ge30pOwotICAgICAgdmFyIGlkID0gb2JqLl9saXN0ZW5lcklkIHx8IChvYmouX2xp
c3RlbmVySWQgPSBfLnVuaXF1ZUlkKCdsJykpOwotICAgICAgbGlzdGVuZXJzW2lkXSA9IG9iajsK
LSAgICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gJ29iamVjdCcpIGNhbGxiYWNrID0gdGhpczsKLSAg
ICAgIG9ialtpbXBsZW1lbnRhdGlvbl0obmFtZSwgY2FsbGJhY2ssIHRoaXMpOwotICAgICAgcmV0
dXJuIHRoaXM7Ci0gICAgfTsKLSAgfSk7Ci0KLSAgLy8gQWxpYXNlcyBmb3IgYmFja3dhcmRzIGNv
bXBhdGliaWxpdHkuCi0gIEV2ZW50cy5iaW5kICAgPSBFdmVudHMub247Ci0gIEV2ZW50cy51bmJp
bmQgPSBFdmVudHMub2ZmOwotCi0gIC8vIEFsbG93IHRoZSBgQmFja2JvbmVgIG9iamVjdCB0byBz
ZXJ2ZSBhcyBhIGdsb2JhbCBldmVudCBidXMsIGZvciBmb2xrcyB3aG8KLSAgLy8gd2FudCBnbG9i
YWwgInB1YnN1YiIgaW4gYSBjb252ZW5pZW50IHBsYWNlLgotICBfLmV4dGVuZChCYWNrYm9uZSwg
RXZlbnRzKTsKLQotICAvLyBCYWNrYm9uZS5Nb2RlbAotICAvLyAtLS0tLS0tLS0tLS0tLQotCi0g
IC8vIEJhY2tib25lICoqTW9kZWxzKiogYXJlIHRoZSBiYXNpYyBkYXRhIG9iamVjdCBpbiB0aGUg
ZnJhbWV3b3JrIC0tCi0gIC8vIGZyZXF1ZW50bHkgcmVwcmVzZW50aW5nIGEgcm93IGluIGEgdGFi
bGUgaW4gYSBkYXRhYmFzZSBvbiB5b3VyIHNlcnZlci4KLSAgLy8gQSBkaXNjcmV0ZSBjaHVuayBv
ZiBkYXRhIGFuZCBhIGJ1bmNoIG9mIHVzZWZ1bCwgcmVsYXRlZCBtZXRob2RzIGZvcgotICAvLyBw
ZXJmb3JtaW5nIGNvbXB1dGF0aW9ucyBhbmQgdHJhbnNmb3JtYXRpb25zIG9uIHRoYXQgZGF0YS4K
LQotICAvLyBDcmVhdGUgYSBuZXcgbW9kZWwgd2l0aCB0aGUgc3BlY2lmaWVkIGF0dHJpYnV0ZXMu
IEEgY2xpZW50IGlkIChgY2lkYCkKLSAgLy8gaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYW5k
IGFzc2lnbmVkIGZvciB5b3UuCi0gIHZhciBNb2RlbCA9IEJhY2tib25lLk1vZGVsID0gZnVuY3Rp
b24oYXR0cmlidXRlcywgb3B0aW9ucykgewotICAgIHZhciBkZWZhdWx0czsKLSAgICB2YXIgYXR0
cnMgPSBhdHRyaWJ1dGVzIHx8IHt9OwotICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7Ci0g
ICAgdGhpcy5jaWQgPSBfLnVuaXF1ZUlkKCdjJyk7Ci0gICAgdGhpcy5hdHRyaWJ1dGVzID0ge307
Ci0gICAgXy5leHRlbmQodGhpcywgXy5waWNrKG9wdGlvbnMsIG1vZGVsT3B0aW9ucykpOwotICAg
IGlmIChvcHRpb25zLnBhcnNlKSBhdHRycyA9IHRoaXMucGFyc2UoYXR0cnMsIG9wdGlvbnMpIHx8
IHt9OwotICAgIGlmIChkZWZhdWx0cyA9IF8ucmVzdWx0KHRoaXMsICdkZWZhdWx0cycpKSB7Ci0g
ICAgICBhdHRycyA9IF8uZGVmYXVsdHMoe30sIGF0dHJzLCBkZWZhdWx0cyk7Ci0gICAgfQotICAg
IHRoaXMuc2V0KGF0dHJzLCBvcHRpb25zKTsKLSAgICB0aGlzLmNoYW5nZWQgPSB7fTsKLSAgICB0
aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgfTsKLQotICAvLyBBIGxp
c3Qgb2Ygb3B0aW9ucyB0byBiZSBhdHRhY2hlZCBkaXJlY3RseSB0byB0aGUgbW9kZWwsIGlmIHBy
b3ZpZGVkLgotICB2YXIgbW9kZWxPcHRpb25zID0gWyd1cmwnLCAndXJsUm9vdCcsICdjb2xsZWN0
aW9uJ107Ci0KLSAgLy8gQXR0YWNoIGFsbCBpbmhlcml0YWJsZSBtZXRob2RzIHRvIHRoZSBNb2Rl
bCBwcm90b3R5cGUuCi0gIF8uZXh0ZW5kKE1vZGVsLnByb3RvdHlwZSwgRXZlbnRzLCB7Ci0KLSAg
ICAvLyBBIGhhc2ggb2YgYXR0cmlidXRlcyB3aG9zZSBjdXJyZW50IGFuZCBwcmV2aW91cyB2YWx1
ZSBkaWZmZXIuCi0gICAgY2hhbmdlZDogbnVsbCwKLQotICAgIC8vIFRoZSB2YWx1ZSByZXR1cm5l
ZCBkdXJpbmcgdGhlIGxhc3QgZmFpbGVkIHZhbGlkYXRpb24uCi0gICAgdmFsaWRhdGlvbkVycm9y
OiBudWxsLAotCi0gICAgLy8gVGhlIGRlZmF1bHQgbmFtZSBmb3IgdGhlIEpTT04gYGlkYCBhdHRy
aWJ1dGUgaXMgYCJpZCJgLiBNb25nb0RCIGFuZAotICAgIC8vIENvdWNoREIgdXNlcnMgbWF5IHdh
bnQgdG8gc2V0IHRoaXMgdG8gYCJfaWQiYC4KLSAgICBpZEF0dHJpYnV0ZTogJ2lkJywKLQotICAg
IC8vIEluaXRpYWxpemUgaXMgYW4gZW1wdHkgZnVuY3Rpb24gYnkgZGVmYXVsdC4gT3ZlcnJpZGUg
aXQgd2l0aCB5b3VyIG93bgotICAgIC8vIGluaXRpYWxpemF0aW9uIGxvZ2ljLgotICAgIGluaXRp
YWxpemU6IGZ1bmN0aW9uKCl7fSwKLQotICAgIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG1vZGVs
J3MgYGF0dHJpYnV0ZXNgIG9iamVjdC4KLSAgICB0b0pTT046IGZ1bmN0aW9uKG9wdGlvbnMpIHsK
LSAgICAgIHJldHVybiBfLmNsb25lKHRoaXMuYXR0cmlidXRlcyk7Ci0gICAgfSwKLQotICAgIC8v
IFByb3h5IGBCYWNrYm9uZS5zeW5jYCBieSBkZWZhdWx0IC0tIGJ1dCBvdmVycmlkZSB0aGlzIGlm
IHlvdSBuZWVkCi0gICAgLy8gY3VzdG9tIHN5bmNpbmcgc2VtYW50aWNzIGZvciAqdGhpcyogcGFy
dGljdWxhciBtb2RlbC4KLSAgICBzeW5jOiBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiBCYWNr
Ym9uZS5zeW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgfSwKLQotICAgIC8vIEdldCB0
aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlLgotICAgIGdldDogZnVuY3Rpb24oYXR0cikgewotICAg
ICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlc1thdHRyXTsKLSAgICB9LAotCi0gICAgLy8gR2V0IHRo
ZSBIVE1MLWVzY2FwZWQgdmFsdWUgb2YgYW4gYXR0cmlidXRlLgotICAgIGVzY2FwZTogZnVuY3Rp
b24oYXR0cikgewotICAgICAgcmV0dXJuIF8uZXNjYXBlKHRoaXMuZ2V0KGF0dHIpKTsKLSAgICB9
LAotCi0gICAgLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGF0dHJpYnV0ZSBjb250YWlucyBhIHZh
bHVlIHRoYXQgaXMgbm90IG51bGwKLSAgICAvLyBvciB1bmRlZmluZWQuCi0gICAgaGFzOiBmdW5j
dGlvbihhdHRyKSB7Ci0gICAgICByZXR1cm4gdGhpcy5nZXQoYXR0cikgIT0gbnVsbDsKLSAgICB9
LAotCi0gICAgLy8gU2V0IGEgaGFzaCBvZiBtb2RlbCBhdHRyaWJ1dGVzIG9uIHRoZSBvYmplY3Qs
IGZpcmluZyBgImNoYW5nZSJgLiBUaGlzIGlzCi0gICAgLy8gdGhlIGNvcmUgcHJpbWl0aXZlIG9w
ZXJhdGlvbiBvZiBhIG1vZGVsLCB1cGRhdGluZyB0aGUgZGF0YSBhbmQgbm90aWZ5aW5nCi0gICAg
Ly8gYW55b25lIHdobyBuZWVkcyB0byBrbm93IGFib3V0IHRoZSBjaGFuZ2UgaW4gc3RhdGUuIFRo
ZSBoZWFydCBvZiB0aGUgYmVhc3QuCi0gICAgc2V0OiBmdW5jdGlvbihrZXksIHZhbCwgb3B0aW9u
cykgewotICAgICAgdmFyIGF0dHIsIGF0dHJzLCB1bnNldCwgY2hhbmdlcywgc2lsZW50LCBjaGFu
Z2luZywgcHJldiwgY3VycmVudDsKLSAgICAgIGlmIChrZXkgPT0gbnVsbCkgcmV0dXJuIHRoaXM7
Ci0KLSAgICAgIC8vIEhhbmRsZSBib3RoIGAia2V5IiwgdmFsdWVgIGFuZCBge2tleTogdmFsdWV9
YCAtc3R5bGUgYXJndW1lbnRzLgotICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnKSB7
Ci0gICAgICAgIGF0dHJzID0ga2V5OwotICAgICAgICBvcHRpb25zID0gdmFsOwotICAgICAgfSBl
bHNlIHsKLSAgICAgICAgKGF0dHJzID0ge30pW2tleV0gPSB2YWw7Ci0gICAgICB9Ci0KLSAgICAg
IG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7Ci0KLSAgICAgIC8vIFJ1biB2YWxpZGF0aW9uLgot
ICAgICAgaWYgKCF0aGlzLl92YWxpZGF0ZShhdHRycywgb3B0aW9ucykpIHJldHVybiBmYWxzZTsK
LQotICAgICAgLy8gRXh0cmFjdCBhdHRyaWJ1dGVzIGFuZCBvcHRpb25zLgotICAgICAgdW5zZXQg
ICAgICAgICAgID0gb3B0aW9ucy51bnNldDsKLSAgICAgIHNpbGVudCAgICAgICAgICA9IG9wdGlv
bnMuc2lsZW50OwotICAgICAgY2hhbmdlcyAgICAgICAgID0gW107Ci0gICAgICBjaGFuZ2luZyAg
ICAgICAgPSB0aGlzLl9jaGFuZ2luZzsKLSAgICAgIHRoaXMuX2NoYW5naW5nICA9IHRydWU7Ci0K
LSAgICAgIGlmICghY2hhbmdpbmcpIHsKLSAgICAgICAgdGhpcy5fcHJldmlvdXNBdHRyaWJ1dGVz
ID0gXy5jbG9uZSh0aGlzLmF0dHJpYnV0ZXMpOwotICAgICAgICB0aGlzLmNoYW5nZWQgPSB7fTsK
LSAgICAgIH0KLSAgICAgIGN1cnJlbnQgPSB0aGlzLmF0dHJpYnV0ZXMsIHByZXYgPSB0aGlzLl9w
cmV2aW91c0F0dHJpYnV0ZXM7Ci0KLSAgICAgIC8vIENoZWNrIGZvciBjaGFuZ2VzIG9mIGBpZGAu
Ci0gICAgICBpZiAodGhpcy5pZEF0dHJpYnV0ZSBpbiBhdHRycykgdGhpcy5pZCA9IGF0dHJzW3Ro
aXMuaWRBdHRyaWJ1dGVdOwotCi0gICAgICAvLyBGb3IgZWFjaCBgc2V0YCBhdHRyaWJ1dGUsIHVw
ZGF0ZSBvciBkZWxldGUgdGhlIGN1cnJlbnQgdmFsdWUuCi0gICAgICBmb3IgKGF0dHIgaW4gYXR0
cnMpIHsKLSAgICAgICAgdmFsID0gYXR0cnNbYXR0cl07Ci0gICAgICAgIGlmICghXy5pc0VxdWFs
KGN1cnJlbnRbYXR0cl0sIHZhbCkpIGNoYW5nZXMucHVzaChhdHRyKTsKLSAgICAgICAgaWYgKCFf
LmlzRXF1YWwocHJldlthdHRyXSwgdmFsKSkgewotICAgICAgICAgIHRoaXMuY2hhbmdlZFthdHRy
XSA9IHZhbDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBkZWxldGUgdGhpcy5jaGFuZ2Vk
W2F0dHJdOwotICAgICAgICB9Ci0gICAgICAgIHVuc2V0ID8gZGVsZXRlIGN1cnJlbnRbYXR0cl0g
OiBjdXJyZW50W2F0dHJdID0gdmFsOwotICAgICAgfQotCi0gICAgICAvLyBUcmlnZ2VyIGFsbCBy
ZWxldmFudCBhdHRyaWJ1dGUgY2hhbmdlcy4KLSAgICAgIGlmICghc2lsZW50KSB7Ci0gICAgICAg
IGlmIChjaGFuZ2VzLmxlbmd0aCkgdGhpcy5fcGVuZGluZyA9IHRydWU7Ci0gICAgICAgIGZvciAo
dmFyIGkgPSAwLCBsID0gY2hhbmdlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICB0
aGlzLnRyaWdnZXIoJ2NoYW5nZTonICsgY2hhbmdlc1tpXSwgdGhpcywgY3VycmVudFtjaGFuZ2Vz
W2ldXSwgb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gWW91IG1pZ2h0
IGJlIHdvbmRlcmluZyB3aHkgdGhlcmUncyBhIGB3aGlsZWAgbG9vcCBoZXJlLiBDaGFuZ2VzIGNh
bgotICAgICAgLy8gYmUgcmVjdXJzaXZlbHkgbmVzdGVkIHdpdGhpbiBgImNoYW5nZSJgIGV2ZW50
cy4KLSAgICAgIGlmIChjaGFuZ2luZykgcmV0dXJuIHRoaXM7Ci0gICAgICBpZiAoIXNpbGVudCkg
ewotICAgICAgICB3aGlsZSAodGhpcy5fcGVuZGluZykgewotICAgICAgICAgIHRoaXMuX3BlbmRp
bmcgPSBmYWxzZTsKLSAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2NoYW5nZScsIHRoaXMsIG9wdGlv
bnMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB0aGlzLl9wZW5kaW5nID0gZmFsc2U7Ci0g
ICAgICB0aGlzLl9jaGFuZ2luZyA9IGZhbHNlOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwK
LQotICAgIC8vIFJlbW92ZSBhbiBhdHRyaWJ1dGUgZnJvbSB0aGUgbW9kZWwsIGZpcmluZyBgImNo
YW5nZSJgLiBgdW5zZXRgIGlzIGEgbm9vcAotICAgIC8vIGlmIHRoZSBhdHRyaWJ1dGUgZG9lc24n
dCBleGlzdC4KLSAgICB1bnNldDogZnVuY3Rpb24oYXR0ciwgb3B0aW9ucykgewotICAgICAgcmV0
dXJuIHRoaXMuc2V0KGF0dHIsIHZvaWQgMCwgXy5leHRlbmQoe30sIG9wdGlvbnMsIHt1bnNldDog
dHJ1ZX0pKTsKLSAgICB9LAotCi0gICAgLy8gQ2xlYXIgYWxsIGF0dHJpYnV0ZXMgb24gdGhlIG1v
ZGVsLCBmaXJpbmcgYCJjaGFuZ2UiYC4KLSAgICBjbGVhcjogZnVuY3Rpb24ob3B0aW9ucykgewot
ICAgICAgdmFyIGF0dHJzID0ge307Ci0gICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5hdHRyaWJ1
dGVzKSBhdHRyc1trZXldID0gdm9pZCAwOwotICAgICAgcmV0dXJuIHRoaXMuc2V0KGF0dHJzLCBf
LmV4dGVuZCh7fSwgb3B0aW9ucywge3Vuc2V0OiB0cnVlfSkpOwotICAgIH0sCi0KLSAgICAvLyBE
ZXRlcm1pbmUgaWYgdGhlIG1vZGVsIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IGAiY2hhbmdl
ImAgZXZlbnQuCi0gICAgLy8gSWYgeW91IHNwZWNpZnkgYW4gYXR0cmlidXRlIG5hbWUsIGRldGVy
bWluZSBpZiB0aGF0IGF0dHJpYnV0ZSBoYXMgY2hhbmdlZC4KLSAgICBoYXNDaGFuZ2VkOiBmdW5j
dGlvbihhdHRyKSB7Ci0gICAgICBpZiAoYXR0ciA9PSBudWxsKSByZXR1cm4gIV8uaXNFbXB0eSh0
aGlzLmNoYW5nZWQpOwotICAgICAgcmV0dXJuIF8uaGFzKHRoaXMuY2hhbmdlZCwgYXR0cik7Ci0g
ICAgfSwKLQotICAgIC8vIFJldHVybiBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIGF0dHJp
YnV0ZXMgdGhhdCBoYXZlIGNoYW5nZWQsIG9yCi0gICAgLy8gZmFsc2UgaWYgdGhlcmUgYXJlIG5v
IGNoYW5nZWQgYXR0cmlidXRlcy4gVXNlZnVsIGZvciBkZXRlcm1pbmluZyB3aGF0Ci0gICAgLy8g
cGFydHMgb2YgYSB2aWV3IG5lZWQgdG8gYmUgdXBkYXRlZCBhbmQvb3Igd2hhdCBhdHRyaWJ1dGVz
IG5lZWQgdG8gYmUKLSAgICAvLyBwZXJzaXN0ZWQgdG8gdGhlIHNlcnZlci4gVW5zZXQgYXR0cmli
dXRlcyB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuCi0gICAgLy8gWW91IGNhbiBhbHNvIHBhc3Mg
YW4gYXR0cmlidXRlcyBvYmplY3QgdG8gZGlmZiBhZ2FpbnN0IHRoZSBtb2RlbCwKLSAgICAvLyBk
ZXRlcm1pbmluZyBpZiB0aGVyZSAqd291bGQgYmUqIGEgY2hhbmdlLgotICAgIGNoYW5nZWRBdHRy
aWJ1dGVzOiBmdW5jdGlvbihkaWZmKSB7Ci0gICAgICBpZiAoIWRpZmYpIHJldHVybiB0aGlzLmhh
c0NoYW5nZWQoKSA/IF8uY2xvbmUodGhpcy5jaGFuZ2VkKSA6IGZhbHNlOwotICAgICAgdmFyIHZh
bCwgY2hhbmdlZCA9IGZhbHNlOwotICAgICAgdmFyIG9sZCA9IHRoaXMuX2NoYW5naW5nID8gdGhp
cy5fcHJldmlvdXNBdHRyaWJ1dGVzIDogdGhpcy5hdHRyaWJ1dGVzOwotICAgICAgZm9yICh2YXIg
YXR0ciBpbiBkaWZmKSB7Ci0gICAgICAgIGlmIChfLmlzRXF1YWwob2xkW2F0dHJdLCAodmFsID0g
ZGlmZlthdHRyXSkpKSBjb250aW51ZTsKLSAgICAgICAgKGNoYW5nZWQgfHwgKGNoYW5nZWQgPSB7
fSkpW2F0dHJdID0gdmFsOwotICAgICAgfQotICAgICAgcmV0dXJuIGNoYW5nZWQ7Ci0gICAgfSwK
LQotICAgIC8vIEdldCB0aGUgcHJldmlvdXMgdmFsdWUgb2YgYW4gYXR0cmlidXRlLCByZWNvcmRl
ZCBhdCB0aGUgdGltZSB0aGUgbGFzdAotICAgIC8vIGAiY2hhbmdlImAgZXZlbnQgd2FzIGZpcmVk
LgotICAgIHByZXZpb3VzOiBmdW5jdGlvbihhdHRyKSB7Ci0gICAgICBpZiAoYXR0ciA9PSBudWxs
IHx8ICF0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMpIHJldHVybiBudWxsOwotICAgICAgcmV0dXJu
IHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlc1thdHRyXTsKLSAgICB9LAotCi0gICAgLy8gR2V0IGFs
bCBvZiB0aGUgYXR0cmlidXRlcyBvZiB0aGUgbW9kZWwgYXQgdGhlIHRpbWUgb2YgdGhlIHByZXZp
b3VzCi0gICAgLy8gYCJjaGFuZ2UiYCBldmVudC4KLSAgICBwcmV2aW91c0F0dHJpYnV0ZXM6IGZ1
bmN0aW9uKCkgewotICAgICAgcmV0dXJuIF8uY2xvbmUodGhpcy5fcHJldmlvdXNBdHRyaWJ1dGVz
KTsKLSAgICB9LAotCi0gICAgLy8gRmV0Y2ggdGhlIG1vZGVsIGZyb20gdGhlIHNlcnZlci4gSWYg
dGhlIHNlcnZlcidzIHJlcHJlc2VudGF0aW9uIG9mIHRoZQotICAgIC8vIG1vZGVsIGRpZmZlcnMg
ZnJvbSBpdHMgY3VycmVudCBhdHRyaWJ1dGVzLCB0aGV5IHdpbGwgYmUgb3ZlcnJpZGRlbiwKLSAg
ICAvLyB0cmlnZ2VyaW5nIGEgYCJjaGFuZ2UiYCBldmVudC4KLSAgICBmZXRjaDogZnVuY3Rpb24o
b3B0aW9ucykgewotICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgPyBfLmNsb25lKG9wdGlvbnMpIDog
e307Ci0gICAgICBpZiAob3B0aW9ucy5wYXJzZSA9PT0gdm9pZCAwKSBvcHRpb25zLnBhcnNlID0g
dHJ1ZTsKLSAgICAgIHZhciBtb2RlbCA9IHRoaXM7Ci0gICAgICB2YXIgc3VjY2VzcyA9IG9wdGlv
bnMuc3VjY2VzczsKLSAgICAgIG9wdGlvbnMuc3VjY2VzcyA9IGZ1bmN0aW9uKHJlc3ApIHsKLSAg
ICAgICAgaWYgKCFtb2RlbC5zZXQobW9kZWwucGFyc2UocmVzcCwgb3B0aW9ucyksIG9wdGlvbnMp
KSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChzdWNjZXNzKSBzdWNjZXNzKG1vZGVsLCByZXNw
LCBvcHRpb25zKTsKLSAgICAgICAgbW9kZWwudHJpZ2dlcignc3luYycsIG1vZGVsLCByZXNwLCBv
cHRpb25zKTsKLSAgICAgIH07Ci0gICAgICB3cmFwRXJyb3IodGhpcywgb3B0aW9ucyk7Ci0gICAg
ICByZXR1cm4gdGhpcy5zeW5jKCdyZWFkJywgdGhpcywgb3B0aW9ucyk7Ci0gICAgfSwKLQotICAg
IC8vIFNldCBhIGhhc2ggb2YgbW9kZWwgYXR0cmlidXRlcywgYW5kIHN5bmMgdGhlIG1vZGVsIHRv
IHRoZSBzZXJ2ZXIuCi0gICAgLy8gSWYgdGhlIHNlcnZlciByZXR1cm5zIGFuIGF0dHJpYnV0ZXMg
aGFzaCB0aGF0IGRpZmZlcnMsIHRoZSBtb2RlbCdzCi0gICAgLy8gc3RhdGUgd2lsbCBiZSBgc2V0
YCBhZ2Fpbi4KLSAgICBzYXZlOiBmdW5jdGlvbihrZXksIHZhbCwgb3B0aW9ucykgewotICAgICAg
dmFyIGF0dHJzLCBtZXRob2QsIHhociwgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlczsKLQot
ICAgICAgLy8gSGFuZGxlIGJvdGggYCJrZXkiLCB2YWx1ZWAgYW5kIGB7a2V5OiB2YWx1ZX1gIC1z
dHlsZSBhcmd1bWVudHMuCi0gICAgICBpZiAoa2V5ID09IG51bGwgfHwgdHlwZW9mIGtleSA9PT0g
J29iamVjdCcpIHsKLSAgICAgICAgYXR0cnMgPSBrZXk7Ci0gICAgICAgIG9wdGlvbnMgPSB2YWw7
Ci0gICAgICB9IGVsc2UgewotICAgICAgICAoYXR0cnMgPSB7fSlba2V5XSA9IHZhbDsKLSAgICAg
IH0KLQotICAgICAgLy8gSWYgd2UncmUgbm90IHdhaXRpbmcgYW5kIGF0dHJpYnV0ZXMgZXhpc3Qs
IHNhdmUgYWN0cyBhcyBgc2V0KGF0dHIpLnNhdmUobnVsbCwgb3B0cylgLgotICAgICAgaWYgKGF0
dHJzICYmICghb3B0aW9ucyB8fCAhb3B0aW9ucy53YWl0KSAmJiAhdGhpcy5zZXQoYXR0cnMsIG9w
dGlvbnMpKSByZXR1cm4gZmFsc2U7Ci0KLSAgICAgIG9wdGlvbnMgPSBfLmV4dGVuZCh7dmFsaWRh
dGU6IHRydWV9LCBvcHRpb25zKTsKLQotICAgICAgLy8gRG8gbm90IHBlcnNpc3QgaW52YWxpZCBt
b2RlbHMuCi0gICAgICBpZiAoIXRoaXMuX3ZhbGlkYXRlKGF0dHJzLCBvcHRpb25zKSkgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAvLyBTZXQgdGVtcG9yYXJ5IGF0dHJpYnV0ZXMgaWYgYHt3YWl0OiB0
cnVlfWAuCi0gICAgICBpZiAoYXR0cnMgJiYgb3B0aW9ucy53YWl0KSB7Ci0gICAgICAgIHRoaXMu
YXR0cmlidXRlcyA9IF8uZXh0ZW5kKHt9LCBhdHRyaWJ1dGVzLCBhdHRycyk7Ci0gICAgICB9Ci0K
LSAgICAgIC8vIEFmdGVyIGEgc3VjY2Vzc2Z1bCBzZXJ2ZXItc2lkZSBzYXZlLCB0aGUgY2xpZW50
IGlzIChvcHRpb25hbGx5KQotICAgICAgLy8gdXBkYXRlZCB3aXRoIHRoZSBzZXJ2ZXItc2lkZSBz
dGF0ZS4KLSAgICAgIGlmIChvcHRpb25zLnBhcnNlID09PSB2b2lkIDApIG9wdGlvbnMucGFyc2Ug
PSB0cnVlOwotICAgICAgdmFyIG1vZGVsID0gdGhpczsKLSAgICAgIHZhciBzdWNjZXNzID0gb3B0
aW9ucy5zdWNjZXNzOwotICAgICAgb3B0aW9ucy5zdWNjZXNzID0gZnVuY3Rpb24ocmVzcCkgewot
ICAgICAgICAvLyBFbnN1cmUgYXR0cmlidXRlcyBhcmUgcmVzdG9yZWQgZHVyaW5nIHN5bmNocm9u
b3VzIHNhdmVzLgotICAgICAgICBtb2RlbC5hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKLSAgICAg
ICAgdmFyIHNlcnZlckF0dHJzID0gbW9kZWwucGFyc2UocmVzcCwgb3B0aW9ucyk7Ci0gICAgICAg
IGlmIChvcHRpb25zLndhaXQpIHNlcnZlckF0dHJzID0gXy5leHRlbmQoYXR0cnMgfHwge30sIHNl
cnZlckF0dHJzKTsKLSAgICAgICAgaWYgKF8uaXNPYmplY3Qoc2VydmVyQXR0cnMpICYmICFtb2Rl
bC5zZXQoc2VydmVyQXR0cnMsIG9wdGlvbnMpKSB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChzdWNjZXNzKSBzdWNjZXNzKG1vZGVsLCByZXNwLCBvcHRp
b25zKTsKLSAgICAgICAgbW9kZWwudHJpZ2dlcignc3luYycsIG1vZGVsLCByZXNwLCBvcHRpb25z
KTsKLSAgICAgIH07Ci0gICAgICB3cmFwRXJyb3IodGhpcywgb3B0aW9ucyk7Ci0KLSAgICAgIG1l
dGhvZCA9IHRoaXMuaXNOZXcoKSA/ICdjcmVhdGUnIDogKG9wdGlvbnMucGF0Y2ggPyAncGF0Y2gn
IDogJ3VwZGF0ZScpOwotICAgICAgaWYgKG1ldGhvZCA9PT0gJ3BhdGNoJykgb3B0aW9ucy5hdHRy
cyA9IGF0dHJzOwotICAgICAgeGhyID0gdGhpcy5zeW5jKG1ldGhvZCwgdGhpcywgb3B0aW9ucyk7
Ci0KLSAgICAgIC8vIFJlc3RvcmUgYXR0cmlidXRlcy4KLSAgICAgIGlmIChhdHRycyAmJiBvcHRp
b25zLndhaXQpIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7Ci0KLSAgICAgIHJldHVybiB4
aHI7Ci0gICAgfSwKLQotICAgIC8vIERlc3Ryb3kgdGhpcyBtb2RlbCBvbiB0aGUgc2VydmVyIGlm
IGl0IHdhcyBhbHJlYWR5IHBlcnNpc3RlZC4KLSAgICAvLyBPcHRpbWlzdGljYWxseSByZW1vdmVz
IHRoZSBtb2RlbCBmcm9tIGl0cyBjb2xsZWN0aW9uLCBpZiBpdCBoYXMgb25lLgotICAgIC8vIElm
IGB3YWl0OiB0cnVlYCBpcyBwYXNzZWQsIHdhaXRzIGZvciB0aGUgc2VydmVyIHRvIHJlc3BvbmQg
YmVmb3JlIHJlbW92YWwuCi0gICAgZGVzdHJveTogZnVuY3Rpb24ob3B0aW9ucykgewotICAgICAg
b3B0aW9ucyA9IG9wdGlvbnMgPyBfLmNsb25lKG9wdGlvbnMpIDoge307Ci0gICAgICB2YXIgbW9k
ZWwgPSB0aGlzOwotICAgICAgdmFyIHN1Y2Nlc3MgPSBvcHRpb25zLnN1Y2Nlc3M7Ci0KLSAgICAg
IHZhciBkZXN0cm95ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIG1vZGVsLnRyaWdnZXIoJ2Rlc3Ry
b3knLCBtb2RlbCwgbW9kZWwuY29sbGVjdGlvbiwgb3B0aW9ucyk7Ci0gICAgICB9OwotCi0gICAg
ICBvcHRpb25zLnN1Y2Nlc3MgPSBmdW5jdGlvbihyZXNwKSB7Ci0gICAgICAgIGlmIChvcHRpb25z
LndhaXQgfHwgbW9kZWwuaXNOZXcoKSkgZGVzdHJveSgpOwotICAgICAgICBpZiAoc3VjY2Vzcykg
c3VjY2Vzcyhtb2RlbCwgcmVzcCwgb3B0aW9ucyk7Ci0gICAgICAgIGlmICghbW9kZWwuaXNOZXco
KSkgbW9kZWwudHJpZ2dlcignc3luYycsIG1vZGVsLCByZXNwLCBvcHRpb25zKTsKLSAgICAgIH07
Ci0KLSAgICAgIGlmICh0aGlzLmlzTmV3KCkpIHsKLSAgICAgICAgb3B0aW9ucy5zdWNjZXNzKCk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIHdyYXBFcnJvcih0aGlzLCBv
cHRpb25zKTsKLQotICAgICAgdmFyIHhociA9IHRoaXMuc3luYygnZGVsZXRlJywgdGhpcywgb3B0
aW9ucyk7Ci0gICAgICBpZiAoIW9wdGlvbnMud2FpdCkgZGVzdHJveSgpOwotICAgICAgcmV0dXJu
IHhocjsKLSAgICB9LAotCi0gICAgLy8gRGVmYXVsdCBVUkwgZm9yIHRoZSBtb2RlbCdzIHJlcHJl
c2VudGF0aW9uIG9uIHRoZSBzZXJ2ZXIgLS0gaWYgeW91J3JlCi0gICAgLy8gdXNpbmcgQmFja2Jv
bmUncyByZXN0ZnVsIG1ldGhvZHMsIG92ZXJyaWRlIHRoaXMgdG8gY2hhbmdlIHRoZSBlbmRwb2lu
dAotICAgIC8vIHRoYXQgd2lsbCBiZSBjYWxsZWQuCi0gICAgdXJsOiBmdW5jdGlvbigpIHsKLSAg
ICAgIHZhciBiYXNlID0gXy5yZXN1bHQodGhpcywgJ3VybFJvb3QnKSB8fCBfLnJlc3VsdCh0aGlz
LmNvbGxlY3Rpb24sICd1cmwnKSB8fCB1cmxFcnJvcigpOwotICAgICAgaWYgKHRoaXMuaXNOZXco
KSkgcmV0dXJuIGJhc2U7Ci0gICAgICByZXR1cm4gYmFzZSArIChiYXNlLmNoYXJBdChiYXNlLmxl
bmd0aCAtIDEpID09PSAnLycgPyAnJyA6ICcvJykgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5p
ZCk7Ci0gICAgfSwKLQotICAgIC8vICoqcGFyc2UqKiBjb252ZXJ0cyBhIHJlc3BvbnNlIGludG8g
dGhlIGhhc2ggb2YgYXR0cmlidXRlcyB0byBiZSBgc2V0YCBvbgotICAgIC8vIHRoZSBtb2RlbC4g
VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMganVzdCB0byBwYXNzIHRoZSByZXNwb25zZSBh
bG9uZy4KLSAgICBwYXJzZTogZnVuY3Rpb24ocmVzcCwgb3B0aW9ucykgewotICAgICAgcmV0dXJu
IHJlc3A7Ci0gICAgfSwKLQotICAgIC8vIENyZWF0ZSBhIG5ldyBtb2RlbCB3aXRoIGlkZW50aWNh
bCBhdHRyaWJ1dGVzIHRvIHRoaXMgb25lLgotICAgIGNsb25lOiBmdW5jdGlvbigpIHsKLSAgICAg
IHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmF0dHJpYnV0ZXMpOwotICAgIH0sCi0K
LSAgICAvLyBBIG1vZGVsIGlzIG5ldyBpZiBpdCBoYXMgbmV2ZXIgYmVlbiBzYXZlZCB0byB0aGUg
c2VydmVyLCBhbmQgbGFja3MgYW4gaWQuCi0gICAgaXNOZXc6IGZ1bmN0aW9uKCkgewotICAgICAg
cmV0dXJuIHRoaXMuaWQgPT0gbnVsbDsKLSAgICB9LAotCi0gICAgLy8gQ2hlY2sgaWYgdGhlIG1v
ZGVsIGlzIGN1cnJlbnRseSBpbiBhIHZhbGlkIHN0YXRlLgotICAgIGlzVmFsaWQ6IGZ1bmN0aW9u
KG9wdGlvbnMpIHsKLSAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZSh7fSwgXy5leHRlbmQob3B0
aW9ucyB8fCB7fSwgeyB2YWxpZGF0ZTogdHJ1ZSB9KSk7Ci0gICAgfSwKLQotICAgIC8vIFJ1biB2
YWxpZGF0aW9uIGFnYWluc3QgdGhlIG5leHQgY29tcGxldGUgc2V0IG9mIG1vZGVsIGF0dHJpYnV0
ZXMsCi0gICAgLy8gcmV0dXJuaW5nIGB0cnVlYCBpZiBhbGwgaXMgd2VsbC4gT3RoZXJ3aXNlLCBm
aXJlIGFuIGAiaW52YWxpZCJgIGV2ZW50LgotICAgIF92YWxpZGF0ZTogZnVuY3Rpb24oYXR0cnMs
IG9wdGlvbnMpIHsKLSAgICAgIGlmICghb3B0aW9ucy52YWxpZGF0ZSB8fCAhdGhpcy52YWxpZGF0
ZSkgcmV0dXJuIHRydWU7Ci0gICAgICBhdHRycyA9IF8uZXh0ZW5kKHt9LCB0aGlzLmF0dHJpYnV0
ZXMsIGF0dHJzKTsKLSAgICAgIHZhciBlcnJvciA9IHRoaXMudmFsaWRhdGlvbkVycm9yID0gdGhp
cy52YWxpZGF0ZShhdHRycywgb3B0aW9ucykgfHwgbnVsbDsKLSAgICAgIGlmICghZXJyb3IpIHJl
dHVybiB0cnVlOwotICAgICAgdGhpcy50cmlnZ2VyKCdpbnZhbGlkJywgdGhpcywgZXJyb3IsIF8u
ZXh0ZW5kKG9wdGlvbnMgfHwge30sIHt2YWxpZGF0aW9uRXJyb3I6IGVycm9yfSkpOwotICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICB9KTsKLQotICAvLyBVbmRlcnNjb3JlIG1ldGhvZHMg
dGhhdCB3ZSB3YW50IHRvIGltcGxlbWVudCBvbiB0aGUgTW9kZWwuCi0gIHZhciBtb2RlbE1ldGhv
ZHMgPSBbJ2tleXMnLCAndmFsdWVzJywgJ3BhaXJzJywgJ2ludmVydCcsICdwaWNrJywgJ29taXQn
XTsKLQotICAvLyBNaXggaW4gZWFjaCBVbmRlcnNjb3JlIG1ldGhvZCBhcyBhIHByb3h5IHRvIGBN
b2RlbCNhdHRyaWJ1dGVzYC4KLSAgXy5lYWNoKG1vZGVsTWV0aG9kcywgZnVuY3Rpb24obWV0aG9k
KSB7Ci0gICAgTW9kZWwucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbigpIHsKLSAgICAgIHZh
ciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMpOwotICAgICAgYXJncy51bnNoaWZ0KHRoaXMu
YXR0cmlidXRlcyk7Ci0gICAgICByZXR1cm4gX1ttZXRob2RdLmFwcGx5KF8sIGFyZ3MpOwotICAg
IH07Ci0gIH0pOwotCi0gIC8vIEJhY2tib25lLkNvbGxlY3Rpb24KLSAgLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0gIC8vIElmIG1vZGVscyB0ZW5kIHRvIHJlcHJlc2VudCBhIHNpbmdsZSByb3cg
b2YgZGF0YSwgYSBCYWNrYm9uZSBDb2xsZWN0aW9uIGlzCi0gIC8vIG1vcmUgYW5hbGFnb3VzIHRv
IGEgdGFibGUgZnVsbCBvZiBkYXRhIC4uLiBvciBhIHNtYWxsIHNsaWNlIG9yIHBhZ2Ugb2YgdGhh
dAotICAvLyB0YWJsZSwgb3IgYSBjb2xsZWN0aW9uIG9mIHJvd3MgdGhhdCBiZWxvbmcgdG9nZXRo
ZXIgZm9yIGEgcGFydGljdWxhciByZWFzb24KLSAgLy8gLS0gYWxsIG9mIHRoZSBtZXNzYWdlcyBp
biB0aGlzIHBhcnRpY3VsYXIgZm9sZGVyLCBhbGwgb2YgdGhlIGRvY3VtZW50cwotICAvLyBiZWxv
bmdpbmcgdG8gdGhpcyBwYXJ0aWN1bGFyIGF1dGhvciwgYW5kIHNvIG9uLiBDb2xsZWN0aW9ucyBt
YWludGFpbgotICAvLyBpbmRleGVzIG9mIHRoZWlyIG1vZGVscywgYm90aCBpbiBvcmRlciwgYW5k
IGZvciBsb29rdXAgYnkgYGlkYC4KLQotICAvLyBDcmVhdGUgYSBuZXcgKipDb2xsZWN0aW9uKios
IHBlcmhhcHMgdG8gY29udGFpbiBhIHNwZWNpZmljIHR5cGUgb2YgYG1vZGVsYC4KLSAgLy8gSWYg
YSBgY29tcGFyYXRvcmAgaXMgc3BlY2lmaWVkLCB0aGUgQ29sbGVjdGlvbiB3aWxsIG1haW50YWlu
Ci0gIC8vIGl0cyBtb2RlbHMgaW4gc29ydCBvcmRlciwgYXMgdGhleSdyZSBhZGRlZCBhbmQgcmVt
b3ZlZC4KLSAgdmFyIENvbGxlY3Rpb24gPSBCYWNrYm9uZS5Db2xsZWN0aW9uID0gZnVuY3Rpb24o
bW9kZWxzLCBvcHRpb25zKSB7Ci0gICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTsKLSAgICBp
ZiAob3B0aW9ucy51cmwpIHRoaXMudXJsID0gb3B0aW9ucy51cmw7Ci0gICAgaWYgKG9wdGlvbnMu
bW9kZWwpIHRoaXMubW9kZWwgPSBvcHRpb25zLm1vZGVsOwotICAgIGlmIChvcHRpb25zLmNvbXBh
cmF0b3IgIT09IHZvaWQgMCkgdGhpcy5jb21wYXJhdG9yID0gb3B0aW9ucy5jb21wYXJhdG9yOwot
ICAgIHRoaXMuX3Jlc2V0KCk7Ci0gICAgdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3Vt
ZW50cyk7Ci0gICAgaWYgKG1vZGVscykgdGhpcy5yZXNldChtb2RlbHMsIF8uZXh0ZW5kKHtzaWxl
bnQ6IHRydWV9LCBvcHRpb25zKSk7Ci0gIH07Ci0KLSAgLy8gRGVmYXVsdCBvcHRpb25zIGZvciBg
Q29sbGVjdGlvbiNzZXRgLgotICB2YXIgc2V0T3B0aW9ucyA9IHthZGQ6IHRydWUsIHJlbW92ZTog
dHJ1ZSwgbWVyZ2U6IHRydWV9OwotICB2YXIgYWRkT3B0aW9ucyA9IHthZGQ6IHRydWUsIG1lcmdl
OiBmYWxzZSwgcmVtb3ZlOiBmYWxzZX07Ci0KLSAgLy8gRGVmaW5lIHRoZSBDb2xsZWN0aW9uJ3Mg
aW5oZXJpdGFibGUgbWV0aG9kcy4KLSAgXy5leHRlbmQoQ29sbGVjdGlvbi5wcm90b3R5cGUsIEV2
ZW50cywgewotCi0gICAgLy8gVGhlIGRlZmF1bHQgbW9kZWwgZm9yIGEgY29sbGVjdGlvbiBpcyBq
dXN0IGEgKipCYWNrYm9uZS5Nb2RlbCoqLgotICAgIC8vIFRoaXMgc2hvdWxkIGJlIG92ZXJyaWRk
ZW4gaW4gbW9zdCBjYXNlcy4KLSAgICBtb2RlbDogTW9kZWwsCi0KLSAgICAvLyBJbml0aWFsaXpl
IGlzIGFuIGVtcHR5IGZ1bmN0aW9uIGJ5IGRlZmF1bHQuIE92ZXJyaWRlIGl0IHdpdGggeW91ciBv
d24KLSAgICAvLyBpbml0aWFsaXphdGlvbiBsb2dpYy4KLSAgICBpbml0aWFsaXplOiBmdW5jdGlv
bigpe30sCi0KLSAgICAvLyBUaGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIENvbGxlY3Rpb24g
aXMgYW4gYXJyYXkgb2YgdGhlCi0gICAgLy8gbW9kZWxzJyBhdHRyaWJ1dGVzLgotICAgIHRvSlNP
TjogZnVuY3Rpb24ob3B0aW9ucykgewotICAgICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKG1v
ZGVsKXsgcmV0dXJuIG1vZGVsLnRvSlNPTihvcHRpb25zKTsgfSk7Ci0gICAgfSwKLQotICAgIC8v
IFByb3h5IGBCYWNrYm9uZS5zeW5jYCBieSBkZWZhdWx0LgotICAgIHN5bmM6IGZ1bmN0aW9uKCkg
ewotICAgICAgcmV0dXJuIEJhY2tib25lLnN5bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAg
ICB9LAotCi0gICAgLy8gQWRkIGEgbW9kZWwsIG9yIGxpc3Qgb2YgbW9kZWxzIHRvIHRoZSBzZXQu
Ci0gICAgYWRkOiBmdW5jdGlvbihtb2RlbHMsIG9wdGlvbnMpIHsKLSAgICAgIHJldHVybiB0aGlz
LnNldChtb2RlbHMsIF8uZGVmYXVsdHMob3B0aW9ucyB8fCB7fSwgYWRkT3B0aW9ucykpOwotICAg
IH0sCi0KLSAgICAvLyBSZW1vdmUgYSBtb2RlbCwgb3IgYSBsaXN0IG9mIG1vZGVscyBmcm9tIHRo
ZSBzZXQuCi0gICAgcmVtb3ZlOiBmdW5jdGlvbihtb2RlbHMsIG9wdGlvbnMpIHsKLSAgICAgIG1v
ZGVscyA9IF8uaXNBcnJheShtb2RlbHMpID8gbW9kZWxzLnNsaWNlKCkgOiBbbW9kZWxzXTsKLSAg
ICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7Ci0gICAgICB2YXIgaSwgbCwgaW5kZXgsIG1v
ZGVsOwotICAgICAgZm9yIChpID0gMCwgbCA9IG1vZGVscy5sZW5ndGg7IGkgPCBsOyBpKyspIHsK
LSAgICAgICAgbW9kZWwgPSB0aGlzLmdldChtb2RlbHNbaV0pOwotICAgICAgICBpZiAoIW1vZGVs
KSBjb250aW51ZTsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2J5SWRbbW9kZWwuaWRdOwotICAgICAg
ICBkZWxldGUgdGhpcy5fYnlJZFttb2RlbC5jaWRdOwotICAgICAgICBpbmRleCA9IHRoaXMuaW5k
ZXhPZihtb2RlbCk7Ci0gICAgICAgIHRoaXMubW9kZWxzLnNwbGljZShpbmRleCwgMSk7Ci0gICAg
ICAgIHRoaXMubGVuZ3RoLS07Ci0gICAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHsKLSAgICAg
ICAgICBvcHRpb25zLmluZGV4ID0gaW5kZXg7Ci0gICAgICAgICAgbW9kZWwudHJpZ2dlcigncmVt
b3ZlJywgbW9kZWwsIHRoaXMsIG9wdGlvbnMpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX3Jl
bW92ZVJlZmVyZW5jZShtb2RlbCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9
LAotCi0gICAgLy8gVXBkYXRlIGEgY29sbGVjdGlvbiBieSBgc2V0YC1pbmcgYSBuZXcgbGlzdCBv
ZiBtb2RlbHMsIGFkZGluZyBuZXcgb25lcywKLSAgICAvLyByZW1vdmluZyBtb2RlbHMgdGhhdCBh
cmUgbm8gbG9uZ2VyIHByZXNlbnQsIGFuZCBtZXJnaW5nIG1vZGVscyB0aGF0Ci0gICAgLy8gYWxy
ZWFkeSBleGlzdCBpbiB0aGUgY29sbGVjdGlvbiwgYXMgbmVjZXNzYXJ5LiBTaW1pbGFyIHRvICoq
TW9kZWwjc2V0KiosCi0gICAgLy8gdGhlIGNvcmUgb3BlcmF0aW9uIGZvciB1cGRhdGluZyB0aGUg
ZGF0YSBjb250YWluZWQgYnkgdGhlIGNvbGxlY3Rpb24uCi0gICAgc2V0OiBmdW5jdGlvbihtb2Rl
bHMsIG9wdGlvbnMpIHsKLSAgICAgIG9wdGlvbnMgPSBfLmRlZmF1bHRzKG9wdGlvbnMgfHwge30s
IHNldE9wdGlvbnMpOwotICAgICAgaWYgKG9wdGlvbnMucGFyc2UpIG1vZGVscyA9IHRoaXMucGFy
c2UobW9kZWxzLCBvcHRpb25zKTsKLSAgICAgIGlmICghXy5pc0FycmF5KG1vZGVscykpIG1vZGVs
cyA9IG1vZGVscyA/IFttb2RlbHNdIDogW107Ci0gICAgICB2YXIgaSwgbCwgbW9kZWwsIGF0dHJz
LCBleGlzdGluZywgc29ydDsKLSAgICAgIHZhciBhdCA9IG9wdGlvbnMuYXQ7Ci0gICAgICB2YXIg
c29ydGFibGUgPSB0aGlzLmNvbXBhcmF0b3IgJiYgKGF0ID09IG51bGwpICYmIG9wdGlvbnMuc29y
dCAhPT0gZmFsc2U7Ci0gICAgICB2YXIgc29ydEF0dHIgPSBfLmlzU3RyaW5nKHRoaXMuY29tcGFy
YXRvcikgPyB0aGlzLmNvbXBhcmF0b3IgOiBudWxsOwotICAgICAgdmFyIHRvQWRkID0gW10sIHRv
UmVtb3ZlID0gW10sIG1vZGVsTWFwID0ge307Ci0KLSAgICAgIC8vIFR1cm4gYmFyZSBvYmplY3Rz
IGludG8gbW9kZWwgcmVmZXJlbmNlcywgYW5kIHByZXZlbnQgaW52YWxpZCBtb2RlbHMKLSAgICAg
IC8vIGZyb20gYmVpbmcgYWRkZWQuCi0gICAgICBmb3IgKGkgPSAwLCBsID0gbW9kZWxzLmxlbmd0
aDsgaSA8IGw7IGkrKykgewotICAgICAgICBpZiAoIShtb2RlbCA9IHRoaXMuX3ByZXBhcmVNb2Rl
bChtb2RlbHNbaV0sIG9wdGlvbnMpKSkgY29udGludWU7Ci0KLSAgICAgICAgLy8gSWYgYSBkdXBs
aWNhdGUgaXMgZm91bmQsIHByZXZlbnQgaXQgZnJvbSBiZWluZyBhZGRlZCBhbmQKLSAgICAgICAg
Ly8gb3B0aW9uYWxseSBtZXJnZSBpdCBpbnRvIHRoZSBleGlzdGluZyBtb2RlbC4KLSAgICAgICAg
aWYgKGV4aXN0aW5nID0gdGhpcy5nZXQobW9kZWwpKSB7Ci0gICAgICAgICAgaWYgKG9wdGlvbnMu
cmVtb3ZlKSBtb2RlbE1hcFtleGlzdGluZy5jaWRdID0gdHJ1ZTsKLSAgICAgICAgICBpZiAob3B0
aW9ucy5tZXJnZSkgewotICAgICAgICAgICAgZXhpc3Rpbmcuc2V0KG1vZGVsLmF0dHJpYnV0ZXMs
IG9wdGlvbnMpOwotICAgICAgICAgICAgaWYgKHNvcnRhYmxlICYmICFzb3J0ICYmIGV4aXN0aW5n
Lmhhc0NoYW5nZWQoc29ydEF0dHIpKSBzb3J0ID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gVGhpcyBpcyBhIG5ldyBtb2RlbCwgcHVzaCBpdCB0byB0aGUgYHRvQWRkYCBsaXN0Lgot
ICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuYWRkKSB7Ci0gICAgICAgICAgdG9BZGQucHVzaCht
b2RlbCk7Ci0KLSAgICAgICAgICAvLyBMaXN0ZW4gdG8gYWRkZWQgbW9kZWxzJyBldmVudHMsIGFu
ZCBpbmRleCBtb2RlbHMgZm9yIGxvb2t1cCBieQotICAgICAgICAgIC8vIGBpZGAgYW5kIGJ5IGBj
aWRgLgotICAgICAgICAgIG1vZGVsLm9uKCdhbGwnLCB0aGlzLl9vbk1vZGVsRXZlbnQsIHRoaXMp
OwotICAgICAgICAgIHRoaXMuX2J5SWRbbW9kZWwuY2lkXSA9IG1vZGVsOwotICAgICAgICAgIGlm
IChtb2RlbC5pZCAhPSBudWxsKSB0aGlzLl9ieUlkW21vZGVsLmlkXSA9IG1vZGVsOwotICAgICAg
ICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIFJlbW92ZSBub25leGlzdGVudCBtb2RlbHMgaWYgYXBw
cm9wcmlhdGUuCi0gICAgICBpZiAob3B0aW9ucy5yZW1vdmUpIHsKLSAgICAgICAgZm9yIChpID0g
MCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7Ci0gICAgICAgICAgaWYgKCFtb2RlbE1h
cFsobW9kZWwgPSB0aGlzLm1vZGVsc1tpXSkuY2lkXSkgdG9SZW1vdmUucHVzaChtb2RlbCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKHRvUmVtb3ZlLmxlbmd0aCkgdGhpcy5yZW1vdmUodG9SZW1v
dmUsIG9wdGlvbnMpOwotICAgICAgfQotCi0gICAgICAvLyBTZWUgaWYgc29ydGluZyBpcyBuZWVk
ZWQsIHVwZGF0ZSBgbGVuZ3RoYCBhbmQgc3BsaWNlIGluIG5ldyBtb2RlbHMuCi0gICAgICBpZiAo
dG9BZGQubGVuZ3RoKSB7Ci0gICAgICAgIGlmIChzb3J0YWJsZSkgc29ydCA9IHRydWU7Ci0gICAg
ICAgIHRoaXMubGVuZ3RoICs9IHRvQWRkLmxlbmd0aDsKLSAgICAgICAgaWYgKGF0ICE9IG51bGwp
IHsKLSAgICAgICAgICBzcGxpY2UuYXBwbHkodGhpcy5tb2RlbHMsIFthdCwgMF0uY29uY2F0KHRv
QWRkKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcHVzaC5hcHBseSh0aGlzLm1vZGVs
cywgdG9BZGQpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIFNpbGVudGx5IHNvcnQg
dGhlIGNvbGxlY3Rpb24gaWYgYXBwcm9wcmlhdGUuCi0gICAgICBpZiAoc29ydCkgdGhpcy5zb3J0
KHtzaWxlbnQ6IHRydWV9KTsKLQotICAgICAgaWYgKG9wdGlvbnMuc2lsZW50KSByZXR1cm4gdGhp
czsKLQotICAgICAgLy8gVHJpZ2dlciBgYWRkYCBldmVudHMuCi0gICAgICBmb3IgKGkgPSAwLCBs
ID0gdG9BZGQubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgIChtb2RlbCA9IHRvQWRkW2ld
KS50cmlnZ2VyKCdhZGQnLCBtb2RlbCwgdGhpcywgb3B0aW9ucyk7Ci0gICAgICB9Ci0KLSAgICAg
IC8vIFRyaWdnZXIgYHNvcnRgIGlmIHRoZSBjb2xsZWN0aW9uIHdhcyBzb3J0ZWQuCi0gICAgICBp
ZiAoc29ydCkgdGhpcy50cmlnZ2VyKCdzb3J0JywgdGhpcywgb3B0aW9ucyk7Ci0gICAgICByZXR1
cm4gdGhpczsKLSAgICB9LAotCi0gICAgLy8gV2hlbiB5b3UgaGF2ZSBtb3JlIGl0ZW1zIHRoYW4g
eW91IHdhbnQgdG8gYWRkIG9yIHJlbW92ZSBpbmRpdmlkdWFsbHksCi0gICAgLy8geW91IGNhbiBy
ZXNldCB0aGUgZW50aXJlIHNldCB3aXRoIGEgbmV3IGxpc3Qgb2YgbW9kZWxzLCB3aXRob3V0IGZp
cmluZwotICAgIC8vIGFueSBncmFudWxhciBgYWRkYCBvciBgcmVtb3ZlYCBldmVudHMuIEZpcmVz
IGByZXNldGAgd2hlbiBmaW5pc2hlZC4KLSAgICAvLyBVc2VmdWwgZm9yIGJ1bGsgb3BlcmF0aW9u
cyBhbmQgb3B0aW1pemF0aW9ucy4KLSAgICByZXNldDogZnVuY3Rpb24obW9kZWxzLCBvcHRpb25z
KSB7Ci0gICAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30pOwotICAgICAgZm9yICh2YXIgaSA9
IDAsIGwgPSB0aGlzLm1vZGVscy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgdGhpcy5f
cmVtb3ZlUmVmZXJlbmNlKHRoaXMubW9kZWxzW2ldKTsKLSAgICAgIH0KLSAgICAgIG9wdGlvbnMu
cHJldmlvdXNNb2RlbHMgPSB0aGlzLm1vZGVsczsKLSAgICAgIHRoaXMuX3Jlc2V0KCk7Ci0gICAg
ICB0aGlzLmFkZChtb2RlbHMsIF8uZXh0ZW5kKHtzaWxlbnQ6IHRydWV9LCBvcHRpb25zKSk7Ci0g
ICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB0aGlzLnRyaWdnZXIoJ3Jlc2V0JywgdGhpcywgb3B0
aW9ucyk7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0gICAgLy8gQWRkIGEgbW9kZWwg
dG8gdGhlIGVuZCBvZiB0aGUgY29sbGVjdGlvbi4KLSAgICBwdXNoOiBmdW5jdGlvbihtb2RlbCwg
b3B0aW9ucykgewotICAgICAgbW9kZWwgPSB0aGlzLl9wcmVwYXJlTW9kZWwobW9kZWwsIG9wdGlv
bnMpOwotICAgICAgdGhpcy5hZGQobW9kZWwsIF8uZXh0ZW5kKHthdDogdGhpcy5sZW5ndGh9LCBv
cHRpb25zKSk7Ci0gICAgICByZXR1cm4gbW9kZWw7Ci0gICAgfSwKLQotICAgIC8vIFJlbW92ZSBh
IG1vZGVsIGZyb20gdGhlIGVuZCBvZiB0aGUgY29sbGVjdGlvbi4KLSAgICBwb3A6IGZ1bmN0aW9u
KG9wdGlvbnMpIHsKLSAgICAgIHZhciBtb2RlbCA9IHRoaXMuYXQodGhpcy5sZW5ndGggLSAxKTsK
LSAgICAgIHRoaXMucmVtb3ZlKG1vZGVsLCBvcHRpb25zKTsKLSAgICAgIHJldHVybiBtb2RlbDsK
LSAgICB9LAotCi0gICAgLy8gQWRkIGEgbW9kZWwgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgY29s
bGVjdGlvbi4KLSAgICB1bnNoaWZ0OiBmdW5jdGlvbihtb2RlbCwgb3B0aW9ucykgewotICAgICAg
bW9kZWwgPSB0aGlzLl9wcmVwYXJlTW9kZWwobW9kZWwsIG9wdGlvbnMpOwotICAgICAgdGhpcy5h
ZGQobW9kZWwsIF8uZXh0ZW5kKHthdDogMH0sIG9wdGlvbnMpKTsKLSAgICAgIHJldHVybiBtb2Rl
bDsKLSAgICB9LAotCi0gICAgLy8gUmVtb3ZlIGEgbW9kZWwgZnJvbSB0aGUgYmVnaW5uaW5nIG9m
IHRoZSBjb2xsZWN0aW9uLgotICAgIHNoaWZ0OiBmdW5jdGlvbihvcHRpb25zKSB7Ci0gICAgICB2
YXIgbW9kZWwgPSB0aGlzLmF0KDApOwotICAgICAgdGhpcy5yZW1vdmUobW9kZWwsIG9wdGlvbnMp
OwotICAgICAgcmV0dXJuIG1vZGVsOwotICAgIH0sCi0KLSAgICAvLyBTbGljZSBvdXQgYSBzdWIt
YXJyYXkgb2YgbW9kZWxzIGZyb20gdGhlIGNvbGxlY3Rpb24uCi0gICAgc2xpY2U6IGZ1bmN0aW9u
KGJlZ2luLCBlbmQpIHsKLSAgICAgIHJldHVybiB0aGlzLm1vZGVscy5zbGljZShiZWdpbiwgZW5k
KTsKLSAgICB9LAotCi0gICAgLy8gR2V0IGEgbW9kZWwgZnJvbSB0aGUgc2V0IGJ5IGlkLgotICAg
IGdldDogZnVuY3Rpb24ob2JqKSB7Ci0gICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiB2b2lk
IDA7Ci0gICAgICByZXR1cm4gdGhpcy5fYnlJZFtvYmouaWQgIT0gbnVsbCA/IG9iai5pZCA6IG9i
ai5jaWQgfHwgb2JqXTsKLSAgICB9LAotCi0gICAgLy8gR2V0IHRoZSBtb2RlbCBhdCB0aGUgZ2l2
ZW4gaW5kZXguCi0gICAgYXQ6IGZ1bmN0aW9uKGluZGV4KSB7Ci0gICAgICByZXR1cm4gdGhpcy5t
b2RlbHNbaW5kZXhdOwotICAgIH0sCi0KLSAgICAvLyBSZXR1cm4gbW9kZWxzIHdpdGggbWF0Y2hp
bmcgYXR0cmlidXRlcy4gVXNlZnVsIGZvciBzaW1wbGUgY2FzZXMgb2YKLSAgICAvLyBgZmlsdGVy
YC4KLSAgICB3aGVyZTogZnVuY3Rpb24oYXR0cnMsIGZpcnN0KSB7Ci0gICAgICBpZiAoXy5pc0Vt
cHR5KGF0dHJzKSkgcmV0dXJuIGZpcnN0ID8gdm9pZCAwIDogW107Ci0gICAgICByZXR1cm4gdGhp
c1tmaXJzdCA/ICdmaW5kJyA6ICdmaWx0ZXInXShmdW5jdGlvbihtb2RlbCkgewotICAgICAgICBm
b3IgKHZhciBrZXkgaW4gYXR0cnMpIHsKLSAgICAgICAgICBpZiAoYXR0cnNba2V5XSAhPT0gbW9k
ZWwuZ2V0KGtleSkpIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgIH0pOwotICAgIH0sCi0KLSAgICAvLyBSZXR1cm4gdGhlIGZpcnN0IG1vZGVsIHdp
dGggbWF0Y2hpbmcgYXR0cmlidXRlcy4gVXNlZnVsIGZvciBzaW1wbGUgY2FzZXMKLSAgICAvLyBv
ZiBgZmluZGAuCi0gICAgZmluZFdoZXJlOiBmdW5jdGlvbihhdHRycykgewotICAgICAgcmV0dXJu
IHRoaXMud2hlcmUoYXR0cnMsIHRydWUpOwotICAgIH0sCi0KLSAgICAvLyBGb3JjZSB0aGUgY29s
bGVjdGlvbiB0byByZS1zb3J0IGl0c2VsZi4gWW91IGRvbid0IG5lZWQgdG8gY2FsbCB0aGlzIHVu
ZGVyCi0gICAgLy8gbm9ybWFsIGNpcmN1bXN0YW5jZXMsIGFzIHRoZSBzZXQgd2lsbCBtYWludGFp
biBzb3J0IG9yZGVyIGFzIGVhY2ggaXRlbQotICAgIC8vIGlzIGFkZGVkLgotICAgIHNvcnQ6IGZ1
bmN0aW9uKG9wdGlvbnMpIHsKLSAgICAgIGlmICghdGhpcy5jb21wYXJhdG9yKSB0aHJvdyBuZXcg
RXJyb3IoJ0Nhbm5vdCBzb3J0IGEgc2V0IHdpdGhvdXQgYSBjb21wYXJhdG9yJyk7Ci0gICAgICBv
cHRpb25zIHx8IChvcHRpb25zID0ge30pOwotCi0gICAgICAvLyBSdW4gc29ydCBiYXNlZCBvbiB0
eXBlIG9mIGBjb21wYXJhdG9yYC4KLSAgICAgIGlmIChfLmlzU3RyaW5nKHRoaXMuY29tcGFyYXRv
cikgfHwgdGhpcy5jb21wYXJhdG9yLmxlbmd0aCA9PT0gMSkgewotICAgICAgICB0aGlzLm1vZGVs
cyA9IHRoaXMuc29ydEJ5KHRoaXMuY29tcGFyYXRvciwgdGhpcyk7Ci0gICAgICB9IGVsc2Ugewot
ICAgICAgICB0aGlzLm1vZGVscy5zb3J0KF8uYmluZCh0aGlzLmNvbXBhcmF0b3IsIHRoaXMpKTsK
LSAgICAgIH0KLQotICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkgdGhpcy50cmlnZ2VyKCdzb3J0
JywgdGhpcywgb3B0aW9ucyk7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0gICAgLy8g
RmlndXJlIG91dCB0aGUgc21hbGxlc3QgaW5kZXggYXQgd2hpY2ggYSBtb2RlbCBzaG91bGQgYmUg
aW5zZXJ0ZWQgc28gYXMKLSAgICAvLyB0byBtYWludGFpbiBvcmRlci4KLSAgICBzb3J0ZWRJbmRl
eDogZnVuY3Rpb24obW9kZWwsIHZhbHVlLCBjb250ZXh0KSB7Ci0gICAgICB2YWx1ZSB8fCAodmFs
dWUgPSB0aGlzLmNvbXBhcmF0b3IpOwotICAgICAgdmFyIGl0ZXJhdG9yID0gXy5pc0Z1bmN0aW9u
KHZhbHVlKSA/IHZhbHVlIDogZnVuY3Rpb24obW9kZWwpIHsKLSAgICAgICAgcmV0dXJuIG1vZGVs
LmdldCh2YWx1ZSk7Ci0gICAgICB9OwotICAgICAgcmV0dXJuIF8uc29ydGVkSW5kZXgodGhpcy5t
b2RlbHMsIG1vZGVsLCBpdGVyYXRvciwgY29udGV4dCk7Ci0gICAgfSwKLQotICAgIC8vIFBsdWNr
IGFuIGF0dHJpYnV0ZSBmcm9tIGVhY2ggbW9kZWwgaW4gdGhlIGNvbGxlY3Rpb24uCi0gICAgcGx1
Y2s6IGZ1bmN0aW9uKGF0dHIpIHsKLSAgICAgIHJldHVybiBfLmludm9rZSh0aGlzLm1vZGVscywg
J2dldCcsIGF0dHIpOwotICAgIH0sCi0KLSAgICAvLyBGZXRjaCB0aGUgZGVmYXVsdCBzZXQgb2Yg
bW9kZWxzIGZvciB0aGlzIGNvbGxlY3Rpb24sIHJlc2V0dGluZyB0aGUKLSAgICAvLyBjb2xsZWN0
aW9uIHdoZW4gdGhleSBhcnJpdmUuIElmIGByZXNldDogdHJ1ZWAgaXMgcGFzc2VkLCB0aGUgcmVz
cG9uc2UKLSAgICAvLyBkYXRhIHdpbGwgYmUgcGFzc2VkIHRocm91Z2ggdGhlIGByZXNldGAgbWV0
aG9kIGluc3RlYWQgb2YgYHNldGAuCi0gICAgZmV0Y2g6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKLSAg
ICAgIG9wdGlvbnMgPSBvcHRpb25zID8gXy5jbG9uZShvcHRpb25zKSA6IHt9OwotICAgICAgaWYg
KG9wdGlvbnMucGFyc2UgPT09IHZvaWQgMCkgb3B0aW9ucy5wYXJzZSA9IHRydWU7Ci0gICAgICB2
YXIgc3VjY2VzcyA9IG9wdGlvbnMuc3VjY2VzczsKLSAgICAgIHZhciBjb2xsZWN0aW9uID0gdGhp
czsKLSAgICAgIG9wdGlvbnMuc3VjY2VzcyA9IGZ1bmN0aW9uKHJlc3ApIHsKLSAgICAgICAgdmFy
IG1ldGhvZCA9IG9wdGlvbnMucmVzZXQgPyAncmVzZXQnIDogJ3NldCc7Ci0gICAgICAgIGNvbGxl
Y3Rpb25bbWV0aG9kXShyZXNwLCBvcHRpb25zKTsKLSAgICAgICAgaWYgKHN1Y2Nlc3MpIHN1Y2Nl
c3MoY29sbGVjdGlvbiwgcmVzcCwgb3B0aW9ucyk7Ci0gICAgICAgIGNvbGxlY3Rpb24udHJpZ2dl
cignc3luYycsIGNvbGxlY3Rpb24sIHJlc3AsIG9wdGlvbnMpOwotICAgICAgfTsKLSAgICAgIHdy
YXBFcnJvcih0aGlzLCBvcHRpb25zKTsKLSAgICAgIHJldHVybiB0aGlzLnN5bmMoJ3JlYWQnLCB0
aGlzLCBvcHRpb25zKTsKLSAgICB9LAotCi0gICAgLy8gQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9m
IGEgbW9kZWwgaW4gdGhpcyBjb2xsZWN0aW9uLiBBZGQgdGhlIG1vZGVsIHRvIHRoZQotICAgIC8v
IGNvbGxlY3Rpb24gaW1tZWRpYXRlbHksIHVubGVzcyBgd2FpdDogdHJ1ZWAgaXMgcGFzc2VkLCBp
biB3aGljaCBjYXNlIHdlCi0gICAgLy8gd2FpdCBmb3IgdGhlIHNlcnZlciB0byBhZ3JlZS4KLSAg
ICBjcmVhdGU6IGZ1bmN0aW9uKG1vZGVsLCBvcHRpb25zKSB7Ci0gICAgICBvcHRpb25zID0gb3B0
aW9ucyA/IF8uY2xvbmUob3B0aW9ucykgOiB7fTsKLSAgICAgIGlmICghKG1vZGVsID0gdGhpcy5f
cHJlcGFyZU1vZGVsKG1vZGVsLCBvcHRpb25zKSkpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmICgh
b3B0aW9ucy53YWl0KSB0aGlzLmFkZChtb2RlbCwgb3B0aW9ucyk7Ci0gICAgICB2YXIgY29sbGVj
dGlvbiA9IHRoaXM7Ci0gICAgICB2YXIgc3VjY2VzcyA9IG9wdGlvbnMuc3VjY2VzczsKLSAgICAg
IG9wdGlvbnMuc3VjY2VzcyA9IGZ1bmN0aW9uKHJlc3ApIHsKLSAgICAgICAgaWYgKG9wdGlvbnMu
d2FpdCkgY29sbGVjdGlvbi5hZGQobW9kZWwsIG9wdGlvbnMpOwotICAgICAgICBpZiAoc3VjY2Vz
cykgc3VjY2Vzcyhtb2RlbCwgcmVzcCwgb3B0aW9ucyk7Ci0gICAgICB9OwotICAgICAgbW9kZWwu
c2F2ZShudWxsLCBvcHRpb25zKTsKLSAgICAgIHJldHVybiBtb2RlbDsKLSAgICB9LAotCi0gICAg
Ly8gKipwYXJzZSoqIGNvbnZlcnRzIGEgcmVzcG9uc2UgaW50byBhIGxpc3Qgb2YgbW9kZWxzIHRv
IGJlIGFkZGVkIHRvIHRoZQotICAgIC8vIGNvbGxlY3Rpb24uIFRoZSBkZWZhdWx0IGltcGxlbWVu
dGF0aW9uIGlzIGp1c3QgdG8gcGFzcyBpdCB0aHJvdWdoLgotICAgIHBhcnNlOiBmdW5jdGlvbihy
ZXNwLCBvcHRpb25zKSB7Ci0gICAgICByZXR1cm4gcmVzcDsKLSAgICB9LAotCi0gICAgLy8gQ3Jl
YXRlIGEgbmV3IGNvbGxlY3Rpb24gd2l0aCBhbiBpZGVudGljYWwgbGlzdCBvZiBtb2RlbHMgYXMg
dGhpcyBvbmUuCi0gICAgY2xvbmU6IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIG5ldyB0aGlz
LmNvbnN0cnVjdG9yKHRoaXMubW9kZWxzKTsKLSAgICB9LAotCi0gICAgLy8gUHJpdmF0ZSBtZXRo
b2QgdG8gcmVzZXQgYWxsIGludGVybmFsIHN0YXRlLiBDYWxsZWQgd2hlbiB0aGUgY29sbGVjdGlv
bgotICAgIC8vIGlzIGZpcnN0IGluaXRpYWxpemVkIG9yIHJlc2V0LgotICAgIF9yZXNldDogZnVu
Y3Rpb24oKSB7Ci0gICAgICB0aGlzLmxlbmd0aCA9IDA7Ci0gICAgICB0aGlzLm1vZGVscyA9IFtd
OwotICAgICAgdGhpcy5fYnlJZCAgPSB7fTsKLSAgICB9LAotCi0gICAgLy8gUHJlcGFyZSBhIGhh
c2ggb2YgYXR0cmlidXRlcyAob3Igb3RoZXIgbW9kZWwpIHRvIGJlIGFkZGVkIHRvIHRoaXMKLSAg
ICAvLyBjb2xsZWN0aW9uLgotICAgIF9wcmVwYXJlTW9kZWw6IGZ1bmN0aW9uKGF0dHJzLCBvcHRp
b25zKSB7Ci0gICAgICBpZiAoYXR0cnMgaW5zdGFuY2VvZiBNb2RlbCkgewotICAgICAgICBpZiAo
IWF0dHJzLmNvbGxlY3Rpb24pIGF0dHJzLmNvbGxlY3Rpb24gPSB0aGlzOwotICAgICAgICByZXR1
cm4gYXR0cnM7Ci0gICAgICB9Ci0gICAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30pOwotICAg
ICAgb3B0aW9ucy5jb2xsZWN0aW9uID0gdGhpczsKLSAgICAgIHZhciBtb2RlbCA9IG5ldyB0aGlz
Lm1vZGVsKGF0dHJzLCBvcHRpb25zKTsKLSAgICAgIGlmICghbW9kZWwuX3ZhbGlkYXRlKGF0dHJz
LCBvcHRpb25zKSkgewotICAgICAgICB0aGlzLnRyaWdnZXIoJ2ludmFsaWQnLCB0aGlzLCBhdHRy
cywgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIHJldHVy
biBtb2RlbDsKLSAgICB9LAotCi0gICAgLy8gSW50ZXJuYWwgbWV0aG9kIHRvIHNldmVyIGEgbW9k
ZWwncyB0aWVzIHRvIGEgY29sbGVjdGlvbi4KLSAgICBfcmVtb3ZlUmVmZXJlbmNlOiBmdW5jdGlv
bihtb2RlbCkgewotICAgICAgaWYgKHRoaXMgPT09IG1vZGVsLmNvbGxlY3Rpb24pIGRlbGV0ZSBt
b2RlbC5jb2xsZWN0aW9uOwotICAgICAgbW9kZWwub2ZmKCdhbGwnLCB0aGlzLl9vbk1vZGVsRXZl
bnQsIHRoaXMpOwotICAgIH0sCi0KLSAgICAvLyBJbnRlcm5hbCBtZXRob2QgY2FsbGVkIGV2ZXJ5
IHRpbWUgYSBtb2RlbCBpbiB0aGUgc2V0IGZpcmVzIGFuIGV2ZW50LgotICAgIC8vIFNldHMgbmVl
ZCB0byB1cGRhdGUgdGhlaXIgaW5kZXhlcyB3aGVuIG1vZGVscyBjaGFuZ2UgaWRzLiBBbGwgb3Ro
ZXIKLSAgICAvLyBldmVudHMgc2ltcGx5IHByb3h5IHRocm91Z2guICJhZGQiIGFuZCAicmVtb3Zl
IiBldmVudHMgdGhhdCBvcmlnaW5hdGUKLSAgICAvLyBpbiBvdGhlciBjb2xsZWN0aW9ucyBhcmUg
aWdub3JlZC4KLSAgICBfb25Nb2RlbEV2ZW50OiBmdW5jdGlvbihldmVudCwgbW9kZWwsIGNvbGxl
Y3Rpb24sIG9wdGlvbnMpIHsKLSAgICAgIGlmICgoZXZlbnQgPT09ICdhZGQnIHx8IGV2ZW50ID09
PSAncmVtb3ZlJykgJiYgY29sbGVjdGlvbiAhPT0gdGhpcykgcmV0dXJuOwotICAgICAgaWYgKGV2
ZW50ID09PSAnZGVzdHJveScpIHRoaXMucmVtb3ZlKG1vZGVsLCBvcHRpb25zKTsKLSAgICAgIGlm
IChtb2RlbCAmJiBldmVudCA9PT0gJ2NoYW5nZTonICsgbW9kZWwuaWRBdHRyaWJ1dGUpIHsKLSAg
ICAgICAgZGVsZXRlIHRoaXMuX2J5SWRbbW9kZWwucHJldmlvdXMobW9kZWwuaWRBdHRyaWJ1dGUp
XTsKLSAgICAgICAgaWYgKG1vZGVsLmlkICE9IG51bGwpIHRoaXMuX2J5SWRbbW9kZWwuaWRdID0g
bW9kZWw7Ci0gICAgICB9Ci0gICAgICB0aGlzLnRyaWdnZXIuYXBwbHkodGhpcywgYXJndW1lbnRz
KTsKLSAgICB9Ci0KLSAgfSk7Ci0KLSAgLy8gVW5kZXJzY29yZSBtZXRob2RzIHRoYXQgd2Ugd2Fu
dCB0byBpbXBsZW1lbnQgb24gdGhlIENvbGxlY3Rpb24uCi0gIC8vIDkwJSBvZiB0aGUgY29yZSB1
c2VmdWxuZXNzIG9mIEJhY2tib25lIENvbGxlY3Rpb25zIGlzIGFjdHVhbGx5IGltcGxlbWVudGVk
Ci0gIC8vIHJpZ2h0IGhlcmU6Ci0gIHZhciBtZXRob2RzID0gWydmb3JFYWNoJywgJ2VhY2gnLCAn
bWFwJywgJ2NvbGxlY3QnLCAncmVkdWNlJywgJ2ZvbGRsJywKLSAgICAnaW5qZWN0JywgJ3JlZHVj
ZVJpZ2h0JywgJ2ZvbGRyJywgJ2ZpbmQnLCAnZGV0ZWN0JywgJ2ZpbHRlcicsICdzZWxlY3QnLAot
ICAgICdyZWplY3QnLCAnZXZlcnknLCAnYWxsJywgJ3NvbWUnLCAnYW55JywgJ2luY2x1ZGUnLCAn
Y29udGFpbnMnLCAnaW52b2tlJywKLSAgICAnbWF4JywgJ21pbicsICd0b0FycmF5JywgJ3NpemUn
LCAnZmlyc3QnLCAnaGVhZCcsICd0YWtlJywgJ2luaXRpYWwnLCAncmVzdCcsCi0gICAgJ3RhaWwn
LCAnZHJvcCcsICdsYXN0JywgJ3dpdGhvdXQnLCAnaW5kZXhPZicsICdzaHVmZmxlJywgJ2xhc3RJ
bmRleE9mJywKLSAgICAnaXNFbXB0eScsICdjaGFpbiddOwotCi0gIC8vIE1peCBpbiBlYWNoIFVu
ZGVyc2NvcmUgbWV0aG9kIGFzIGEgcHJveHkgdG8gYENvbGxlY3Rpb24jbW9kZWxzYC4KLSAgXy5l
YWNoKG1ldGhvZHMsIGZ1bmN0aW9uKG1ldGhvZCkgewotICAgIENvbGxlY3Rpb24ucHJvdG90eXBl
W21ldGhvZF0gPSBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1
bWVudHMpOwotICAgICAgYXJncy51bnNoaWZ0KHRoaXMubW9kZWxzKTsKLSAgICAgIHJldHVybiBf
W21ldGhvZF0uYXBwbHkoXywgYXJncyk7Ci0gICAgfTsKLSAgfSk7Ci0KLSAgLy8gVW5kZXJzY29y
ZSBtZXRob2RzIHRoYXQgdGFrZSBhIHByb3BlcnR5IG5hbWUgYXMgYW4gYXJndW1lbnQuCi0gIHZh
ciBhdHRyaWJ1dGVNZXRob2RzID0gWydncm91cEJ5JywgJ2NvdW50QnknLCAnc29ydEJ5J107Ci0K
LSAgLy8gVXNlIGF0dHJpYnV0ZXMgaW5zdGVhZCBvZiBwcm9wZXJ0aWVzLgotICBfLmVhY2goYXR0
cmlidXRlTWV0aG9kcywgZnVuY3Rpb24obWV0aG9kKSB7Ci0gICAgQ29sbGVjdGlvbi5wcm90b3R5
cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0KSB7Ci0gICAgICB2YXIgaXRlcmF0
b3IgPSBfLmlzRnVuY3Rpb24odmFsdWUpID8gdmFsdWUgOiBmdW5jdGlvbihtb2RlbCkgewotICAg
ICAgICByZXR1cm4gbW9kZWwuZ2V0KHZhbHVlKTsKLSAgICAgIH07Ci0gICAgICByZXR1cm4gX1tt
ZXRob2RdKHRoaXMubW9kZWxzLCBpdGVyYXRvciwgY29udGV4dCk7Ci0gICAgfTsKLSAgfSk7Ci0K
LSAgLy8gQmFja2JvbmUuVmlldwotICAvLyAtLS0tLS0tLS0tLS0tCi0KLSAgLy8gQmFja2JvbmUg
Vmlld3MgYXJlIGFsbW9zdCBtb3JlIGNvbnZlbnRpb24gdGhhbiB0aGV5IGFyZSBhY3R1YWwgY29k
ZS4gQSBWaWV3Ci0gIC8vIGlzIHNpbXBseSBhIEphdmFTY3JpcHQgb2JqZWN0IHRoYXQgcmVwcmVz
ZW50cyBhIGxvZ2ljYWwgY2h1bmsgb2YgVUkgaW4gdGhlCi0gIC8vIERPTS4gVGhpcyBtaWdodCBi
ZSBhIHNpbmdsZSBpdGVtLCBhbiBlbnRpcmUgbGlzdCwgYSBzaWRlYmFyIG9yIHBhbmVsLCBvcgot
ICAvLyBldmVuIHRoZSBzdXJyb3VuZGluZyBmcmFtZSB3aGljaCB3cmFwcyB5b3VyIHdob2xlIGFw
cC4gRGVmaW5pbmcgYSBjaHVuayBvZgotICAvLyBVSSBhcyBhICoqVmlldyoqIGFsbG93cyB5b3Ug
dG8gZGVmaW5lIHlvdXIgRE9NIGV2ZW50cyBkZWNsYXJhdGl2ZWx5LCB3aXRob3V0Ci0gIC8vIGhh
dmluZyB0byB3b3JyeSBhYm91dCByZW5kZXIgb3JkZXIgLi4uIGFuZCBtYWtlcyBpdCBlYXN5IGZv
ciB0aGUgdmlldyB0bwotICAvLyByZWFjdCB0byBzcGVjaWZpYyBjaGFuZ2VzIGluIHRoZSBzdGF0
ZSBvZiB5b3VyIG1vZGVscy4KLQotICAvLyBDcmVhdGluZyBhIEJhY2tib25lLlZpZXcgY3JlYXRl
cyBpdHMgaW5pdGlhbCBlbGVtZW50IG91dHNpZGUgb2YgdGhlIERPTSwKLSAgLy8gaWYgYW4gZXhp
c3RpbmcgZWxlbWVudCBpcyBub3QgcHJvdmlkZWQuLi4KLSAgdmFyIFZpZXcgPSBCYWNrYm9uZS5W
aWV3ID0gZnVuY3Rpb24ob3B0aW9ucykgewotICAgIHRoaXMuY2lkID0gXy51bmlxdWVJZCgndmll
dycpOwotICAgIHRoaXMuX2NvbmZpZ3VyZShvcHRpb25zIHx8IHt9KTsKLSAgICB0aGlzLl9lbnN1
cmVFbGVtZW50KCk7Ci0gICAgdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7
Ci0gICAgdGhpcy5kZWxlZ2F0ZUV2ZW50cygpOwotICB9OwotCi0gIC8vIENhY2hlZCByZWdleCB0
byBzcGxpdCBrZXlzIGZvciBgZGVsZWdhdGVgLgotICB2YXIgZGVsZWdhdGVFdmVudFNwbGl0dGVy
ID0gL14oXFMrKVxzKiguKikkLzsKLQotICAvLyBMaXN0IG9mIHZpZXcgb3B0aW9ucyB0byBiZSBt
ZXJnZWQgYXMgcHJvcGVydGllcy4KLSAgdmFyIHZpZXdPcHRpb25zID0gWydtb2RlbCcsICdjb2xs
ZWN0aW9uJywgJ2VsJywgJ2lkJywgJ2F0dHJpYnV0ZXMnLCAnY2xhc3NOYW1lJywgJ3RhZ05hbWUn
LCAnZXZlbnRzJ107Ci0KLSAgLy8gU2V0IHVwIGFsbCBpbmhlcml0YWJsZSAqKkJhY2tib25lLlZp
ZXcqKiBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLgotICBfLmV4dGVuZChWaWV3LnByb3RvdHlwZSwg
RXZlbnRzLCB7Ci0KLSAgICAvLyBUaGUgZGVmYXVsdCBgdGFnTmFtZWAgb2YgYSBWaWV3J3MgZWxl
bWVudCBpcyBgImRpdiJgLgotICAgIHRhZ05hbWU6ICdkaXYnLAotCi0gICAgLy8galF1ZXJ5IGRl
bGVnYXRlIGZvciBlbGVtZW50IGxvb2t1cCwgc2NvcGVkIHRvIERPTSBlbGVtZW50cyB3aXRoaW4g
dGhlCi0gICAgLy8gY3VycmVudCB2aWV3LiBUaGlzIHNob3VsZCBiZSBwcmVmZXJlZCB0byBnbG9i
YWwgbG9va3VwcyB3aGVyZSBwb3NzaWJsZS4KLSAgICAkOiBmdW5jdGlvbihzZWxlY3Rvcikgewot
ICAgICAgcmV0dXJuIHRoaXMuJGVsLmZpbmQoc2VsZWN0b3IpOwotICAgIH0sCi0KLSAgICAvLyBJ
bml0aWFsaXplIGlzIGFuIGVtcHR5IGZ1bmN0aW9uIGJ5IGRlZmF1bHQuIE92ZXJyaWRlIGl0IHdp
dGggeW91ciBvd24KLSAgICAvLyBpbml0aWFsaXphdGlvbiBsb2dpYy4KLSAgICBpbml0aWFsaXpl
OiBmdW5jdGlvbigpe30sCi0KLSAgICAvLyAqKnJlbmRlcioqIGlzIHRoZSBjb3JlIGZ1bmN0aW9u
IHRoYXQgeW91ciB2aWV3IHNob3VsZCBvdmVycmlkZSwgaW4gb3JkZXIKLSAgICAvLyB0byBwb3B1
bGF0ZSBpdHMgZWxlbWVudCAoYHRoaXMuZWxgKSwgd2l0aCB0aGUgYXBwcm9wcmlhdGUgSFRNTC4g
VGhlCi0gICAgLy8gY29udmVudGlvbiBpcyBmb3IgKipyZW5kZXIqKiB0byBhbHdheXMgcmV0dXJu
IGB0aGlzYC4KLSAgICByZW5kZXI6IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIHRoaXM7Ci0g
ICAgfSwKLQotICAgIC8vIFJlbW92ZSB0aGlzIHZpZXcgYnkgdGFraW5nIHRoZSBlbGVtZW50IG91
dCBvZiB0aGUgRE9NLCBhbmQgcmVtb3ZpbmcgYW55Ci0gICAgLy8gYXBwbGljYWJsZSBCYWNrYm9u
ZS5FdmVudHMgbGlzdGVuZXJzLgotICAgIHJlbW92ZTogZnVuY3Rpb24oKSB7Ci0gICAgICB0aGlz
LiRlbC5yZW1vdmUoKTsKLSAgICAgIHRoaXMuc3RvcExpc3RlbmluZygpOwotICAgICAgcmV0dXJu
IHRoaXM7Ci0gICAgfSwKLQotICAgIC8vIENoYW5nZSB0aGUgdmlldydzIGVsZW1lbnQgKGB0aGlz
LmVsYCBwcm9wZXJ0eSksIGluY2x1ZGluZyBldmVudAotICAgIC8vIHJlLWRlbGVnYXRpb24uCi0g
ICAgc2V0RWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgZGVsZWdhdGUpIHsKLSAgICAgIGlmICh0
aGlzLiRlbCkgdGhpcy51bmRlbGVnYXRlRXZlbnRzKCk7Ci0gICAgICB0aGlzLiRlbCA9IGVsZW1l
bnQgaW5zdGFuY2VvZiBCYWNrYm9uZS4kID8gZWxlbWVudCA6IEJhY2tib25lLiQoZWxlbWVudCk7
Ci0gICAgICB0aGlzLmVsID0gdGhpcy4kZWxbMF07Ci0gICAgICBpZiAoZGVsZWdhdGUgIT09IGZh
bHNlKSB0aGlzLmRlbGVnYXRlRXZlbnRzKCk7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9LAot
Ci0gICAgLy8gU2V0IGNhbGxiYWNrcywgd2hlcmUgYHRoaXMuZXZlbnRzYCBpcyBhIGhhc2ggb2YK
LSAgICAvLwotICAgIC8vICp7ImV2ZW50IHNlbGVjdG9yIjogImNhbGxiYWNrIn0qCi0gICAgLy8K
LSAgICAvLyAgICAgewotICAgIC8vICAgICAgICdtb3VzZWRvd24gLnRpdGxlJzogICdlZGl0JywK
LSAgICAvLyAgICAgICAnY2xpY2sgLmJ1dHRvbic6ICAgICAnc2F2ZScKLSAgICAvLyAgICAgICAn
Y2xpY2sgLm9wZW4nOiAgICAgICBmdW5jdGlvbihlKSB7IC4uLiB9Ci0gICAgLy8gICAgIH0KLSAg
ICAvLwotICAgIC8vIHBhaXJzLiBDYWxsYmFja3Mgd2lsbCBiZSBib3VuZCB0byB0aGUgdmlldywg
d2l0aCBgdGhpc2Agc2V0IHByb3Blcmx5LgotICAgIC8vIFVzZXMgZXZlbnQgZGVsZWdhdGlvbiBm
b3IgZWZmaWNpZW5jeS4KLSAgICAvLyBPbWl0dGluZyB0aGUgc2VsZWN0b3IgYmluZHMgdGhlIGV2
ZW50IHRvIGB0aGlzLmVsYC4KLSAgICAvLyBUaGlzIG9ubHkgd29ya3MgZm9yIGRlbGVnYXRlLWFi
bGUgZXZlbnRzOiBub3QgYGZvY3VzYCwgYGJsdXJgLCBhbmQKLSAgICAvLyBub3QgYGNoYW5nZWAs
IGBzdWJtaXRgLCBhbmQgYHJlc2V0YCBpbiBJbnRlcm5ldCBFeHBsb3Jlci4KLSAgICBkZWxlZ2F0
ZUV2ZW50czogZnVuY3Rpb24oZXZlbnRzKSB7Ci0gICAgICBpZiAoIShldmVudHMgfHwgKGV2ZW50
cyA9IF8ucmVzdWx0KHRoaXMsICdldmVudHMnKSkpKSByZXR1cm4gdGhpczsKLSAgICAgIHRoaXMu
dW5kZWxlZ2F0ZUV2ZW50cygpOwotICAgICAgZm9yICh2YXIga2V5IGluIGV2ZW50cykgewotICAg
ICAgICB2YXIgbWV0aG9kID0gZXZlbnRzW2tleV07Ci0gICAgICAgIGlmICghXy5pc0Z1bmN0aW9u
KG1ldGhvZCkpIG1ldGhvZCA9IHRoaXNbZXZlbnRzW2tleV1dOwotICAgICAgICBpZiAoIW1ldGhv
ZCkgY29udGludWU7Ci0KLSAgICAgICAgdmFyIG1hdGNoID0ga2V5Lm1hdGNoKGRlbGVnYXRlRXZl
bnRTcGxpdHRlcik7Ci0gICAgICAgIHZhciBldmVudE5hbWUgPSBtYXRjaFsxXSwgc2VsZWN0b3Ig
PSBtYXRjaFsyXTsKLSAgICAgICAgbWV0aG9kID0gXy5iaW5kKG1ldGhvZCwgdGhpcyk7Ci0gICAg
ICAgIGV2ZW50TmFtZSArPSAnLmRlbGVnYXRlRXZlbnRzJyArIHRoaXMuY2lkOwotICAgICAgICBp
ZiAoc2VsZWN0b3IgPT09ICcnKSB7Ci0gICAgICAgICAgdGhpcy4kZWwub24oZXZlbnROYW1lLCBt
ZXRob2QpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHRoaXMuJGVsLm9uKGV2ZW50TmFt
ZSwgc2VsZWN0b3IsIG1ldGhvZCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiB0
aGlzOwotICAgIH0sCi0KLSAgICAvLyBDbGVhcnMgYWxsIGNhbGxiYWNrcyBwcmV2aW91c2x5IGJv
dW5kIHRvIHRoZSB2aWV3IHdpdGggYGRlbGVnYXRlRXZlbnRzYC4KLSAgICAvLyBZb3UgdXN1YWxs
eSBkb24ndCBuZWVkIHRvIHVzZSB0aGlzLCBidXQgbWF5IHdpc2ggdG8gaWYgeW91IGhhdmUgbXVs
dGlwbGUKLSAgICAvLyBCYWNrYm9uZSB2aWV3cyBhdHRhY2hlZCB0byB0aGUgc2FtZSBET00gZWxl
bWVudC4KLSAgICB1bmRlbGVnYXRlRXZlbnRzOiBmdW5jdGlvbigpIHsKLSAgICAgIHRoaXMuJGVs
Lm9mZignLmRlbGVnYXRlRXZlbnRzJyArIHRoaXMuY2lkKTsKLSAgICAgIHJldHVybiB0aGlzOwot
ICAgIH0sCi0KLSAgICAvLyBQZXJmb3JtcyB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIG9mIGEg
VmlldyB3aXRoIGEgc2V0IG9mIG9wdGlvbnMuCi0gICAgLy8gS2V5cyB3aXRoIHNwZWNpYWwgbWVh
bmluZyAqKGUuZy4gbW9kZWwsIGNvbGxlY3Rpb24sIGlkLCBjbGFzc05hbWUpKiBhcmUKLSAgICAv
LyBhdHRhY2hlZCBkaXJlY3RseSB0byB0aGUgdmlldy4gIFNlZSBgdmlld09wdGlvbnNgIGZvciBh
biBleGhhdXN0aXZlCi0gICAgLy8gbGlzdC4KLSAgICBfY29uZmlndXJlOiBmdW5jdGlvbihvcHRp
b25zKSB7Ci0gICAgICBpZiAodGhpcy5vcHRpb25zKSBvcHRpb25zID0gXy5leHRlbmQoe30sIF8u
cmVzdWx0KHRoaXMsICdvcHRpb25zJyksIG9wdGlvbnMpOwotICAgICAgXy5leHRlbmQodGhpcywg
Xy5waWNrKG9wdGlvbnMsIHZpZXdPcHRpb25zKSk7Ci0gICAgICB0aGlzLm9wdGlvbnMgPSBvcHRp
b25zOwotICAgIH0sCi0KLSAgICAvLyBFbnN1cmUgdGhhdCB0aGUgVmlldyBoYXMgYSBET00gZWxl
bWVudCB0byByZW5kZXIgaW50by4KLSAgICAvLyBJZiBgdGhpcy5lbGAgaXMgYSBzdHJpbmcsIHBh
c3MgaXQgdGhyb3VnaCBgJCgpYCwgdGFrZSB0aGUgZmlyc3QKLSAgICAvLyBtYXRjaGluZyBlbGVt
ZW50LCBhbmQgcmUtYXNzaWduIGl0IHRvIGBlbGAuIE90aGVyd2lzZSwgY3JlYXRlCi0gICAgLy8g
YW4gZWxlbWVudCBmcm9tIHRoZSBgaWRgLCBgY2xhc3NOYW1lYCBhbmQgYHRhZ05hbWVgIHByb3Bl
cnRpZXMuCi0gICAgX2Vuc3VyZUVsZW1lbnQ6IGZ1bmN0aW9uKCkgewotICAgICAgaWYgKCF0aGlz
LmVsKSB7Ci0gICAgICAgIHZhciBhdHRycyA9IF8uZXh0ZW5kKHt9LCBfLnJlc3VsdCh0aGlzLCAn
YXR0cmlidXRlcycpKTsKLSAgICAgICAgaWYgKHRoaXMuaWQpIGF0dHJzLmlkID0gXy5yZXN1bHQo
dGhpcywgJ2lkJyk7Ci0gICAgICAgIGlmICh0aGlzLmNsYXNzTmFtZSkgYXR0cnNbJ2NsYXNzJ10g
PSBfLnJlc3VsdCh0aGlzLCAnY2xhc3NOYW1lJyk7Ci0gICAgICAgIHZhciAkZWwgPSBCYWNrYm9u
ZS4kKCc8JyArIF8ucmVzdWx0KHRoaXMsICd0YWdOYW1lJykgKyAnPicpLmF0dHIoYXR0cnMpOwot
ICAgICAgICB0aGlzLnNldEVsZW1lbnQoJGVsLCBmYWxzZSk7Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICB0aGlzLnNldEVsZW1lbnQoXy5yZXN1bHQodGhpcywgJ2VsJyksIGZhbHNlKTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgfSk7Ci0KLSAgLy8gQmFja2JvbmUuc3luYwotICAvLyAtLS0tLS0tLS0t
LS0tCi0KLSAgLy8gT3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiB0byBjaGFuZ2UgdGhlIG1hbm5lciBp
biB3aGljaCBCYWNrYm9uZSBwZXJzaXN0cwotICAvLyBtb2RlbHMgdG8gdGhlIHNlcnZlci4gWW91
IHdpbGwgYmUgcGFzc2VkIHRoZSB0eXBlIG9mIHJlcXVlc3QsIGFuZCB0aGUKLSAgLy8gbW9kZWwg
aW4gcXVlc3Rpb24uIEJ5IGRlZmF1bHQsIG1ha2VzIGEgUkVTVGZ1bCBBamF4IHJlcXVlc3QKLSAg
Ly8gdG8gdGhlIG1vZGVsJ3MgYHVybCgpYC4gU29tZSBwb3NzaWJsZSBjdXN0b21pemF0aW9ucyBj
b3VsZCBiZToKLSAgLy8KLSAgLy8gKiBVc2UgYHNldFRpbWVvdXRgIHRvIGJhdGNoIHJhcGlkLWZp
cmUgdXBkYXRlcyBpbnRvIGEgc2luZ2xlIHJlcXVlc3QuCi0gIC8vICogU2VuZCB1cCB0aGUgbW9k
ZWxzIGFzIFhNTCBpbnN0ZWFkIG9mIEpTT04uCi0gIC8vICogUGVyc2lzdCBtb2RlbHMgdmlhIFdl
YlNvY2tldHMgaW5zdGVhZCBvZiBBamF4LgotICAvLwotICAvLyBUdXJuIG9uIGBCYWNrYm9uZS5l
bXVsYXRlSFRUUGAgaW4gb3JkZXIgdG8gc2VuZCBgUFVUYCBhbmQgYERFTEVURWAgcmVxdWVzdHMK
LSAgLy8gYXMgYFBPU1RgLCB3aXRoIGEgYF9tZXRob2RgIHBhcmFtZXRlciBjb250YWluaW5nIHRo
ZSB0cnVlIEhUVFAgbWV0aG9kLAotICAvLyBhcyB3ZWxsIGFzIGFsbCByZXF1ZXN0cyB3aXRoIHRo
ZSBib2R5IGFzIGBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRgCi0gIC8vIGluc3Rl
YWQgb2YgYGFwcGxpY2F0aW9uL2pzb25gIHdpdGggdGhlIG1vZGVsIGluIGEgcGFyYW0gbmFtZWQg
YG1vZGVsYC4KLSAgLy8gVXNlZnVsIHdoZW4gaW50ZXJmYWNpbmcgd2l0aCBzZXJ2ZXItc2lkZSBs
YW5ndWFnZXMgbGlrZSAqKlBIUCoqIHRoYXQgbWFrZQotICAvLyBpdCBkaWZmaWN1bHQgdG8gcmVh
ZCB0aGUgYm9keSBvZiBgUFVUYCByZXF1ZXN0cy4KLSAgQmFja2JvbmUuc3luYyA9IGZ1bmN0aW9u
KG1ldGhvZCwgbW9kZWwsIG9wdGlvbnMpIHsKLSAgICB2YXIgdHlwZSA9IG1ldGhvZE1hcFttZXRo
b2RdOwotCi0gICAgLy8gRGVmYXVsdCBvcHRpb25zLCB1bmxlc3Mgc3BlY2lmaWVkLgotICAgIF8u
ZGVmYXVsdHMob3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KSwgewotICAgICAgZW11bGF0ZUhUVFA6
IEJhY2tib25lLmVtdWxhdGVIVFRQLAotICAgICAgZW11bGF0ZUpTT046IEJhY2tib25lLmVtdWxh
dGVKU09OCi0gICAgfSk7Ci0KLSAgICAvLyBEZWZhdWx0IEpTT04tcmVxdWVzdCBvcHRpb25zLgot
ICAgIHZhciBwYXJhbXMgPSB7dHlwZTogdHlwZSwgZGF0YVR5cGU6ICdqc29uJ307Ci0KLSAgICAv
LyBFbnN1cmUgdGhhdCB3ZSBoYXZlIGEgVVJMLgotICAgIGlmICghb3B0aW9ucy51cmwpIHsKLSAg
ICAgIHBhcmFtcy51cmwgPSBfLnJlc3VsdChtb2RlbCwgJ3VybCcpIHx8IHVybEVycm9yKCk7Ci0g
ICAgfQotCi0gICAgLy8gRW5zdXJlIHRoYXQgd2UgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgcmVxdWVz
dCBkYXRhLgotICAgIGlmIChvcHRpb25zLmRhdGEgPT0gbnVsbCAmJiBtb2RlbCAmJiAobWV0aG9k
ID09PSAnY3JlYXRlJyB8fCBtZXRob2QgPT09ICd1cGRhdGUnIHx8IG1ldGhvZCA9PT0gJ3BhdGNo
JykpIHsKLSAgICAgIHBhcmFtcy5jb250ZW50VHlwZSA9ICdhcHBsaWNhdGlvbi9qc29uJzsKLSAg
ICAgIHBhcmFtcy5kYXRhID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5hdHRycyB8fCBtb2RlbC50
b0pTT04ob3B0aW9ucykpOwotICAgIH0KLQotICAgIC8vIEZvciBvbGRlciBzZXJ2ZXJzLCBlbXVs
YXRlIEpTT04gYnkgZW5jb2RpbmcgdGhlIHJlcXVlc3QgaW50byBhbiBIVE1MLWZvcm0uCi0gICAg
aWYgKG9wdGlvbnMuZW11bGF0ZUpTT04pIHsKLSAgICAgIHBhcmFtcy5jb250ZW50VHlwZSA9ICdh
cHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnOwotICAgICAgcGFyYW1zLmRhdGEgPSBw
YXJhbXMuZGF0YSA/IHttb2RlbDogcGFyYW1zLmRhdGF9IDoge307Ci0gICAgfQotCi0gICAgLy8g
Rm9yIG9sZGVyIHNlcnZlcnMsIGVtdWxhdGUgSFRUUCBieSBtaW1pY2tpbmcgdGhlIEhUVFAgbWV0
aG9kIHdpdGggYF9tZXRob2RgCi0gICAgLy8gQW5kIGFuIGBYLUhUVFAtTWV0aG9kLU92ZXJyaWRl
YCBoZWFkZXIuCi0gICAgaWYgKG9wdGlvbnMuZW11bGF0ZUhUVFAgJiYgKHR5cGUgPT09ICdQVVQn
IHx8IHR5cGUgPT09ICdERUxFVEUnIHx8IHR5cGUgPT09ICdQQVRDSCcpKSB7Ci0gICAgICBwYXJh
bXMudHlwZSA9ICdQT1NUJzsKLSAgICAgIGlmIChvcHRpb25zLmVtdWxhdGVKU09OKSBwYXJhbXMu
ZGF0YS5fbWV0aG9kID0gdHlwZTsKLSAgICAgIHZhciBiZWZvcmVTZW5kID0gb3B0aW9ucy5iZWZv
cmVTZW5kOwotICAgICAgb3B0aW9ucy5iZWZvcmVTZW5kID0gZnVuY3Rpb24oeGhyKSB7Ci0gICAg
ICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdYLUhUVFAtTWV0aG9kLU92ZXJyaWRlJywgdHlwZSk7
Ci0gICAgICAgIGlmIChiZWZvcmVTZW5kKSByZXR1cm4gYmVmb3JlU2VuZC5hcHBseSh0aGlzLCBh
cmd1bWVudHMpOwotICAgICAgfTsKLSAgICB9Ci0KLSAgICAvLyBEb24ndCBwcm9jZXNzIGRhdGEg
b24gYSBub24tR0VUIHJlcXVlc3QuCi0gICAgaWYgKHBhcmFtcy50eXBlICE9PSAnR0VUJyAmJiAh
b3B0aW9ucy5lbXVsYXRlSlNPTikgewotICAgICAgcGFyYW1zLnByb2Nlc3NEYXRhID0gZmFsc2U7
Ci0gICAgfQotCi0gICAgLy8gSWYgd2UncmUgc2VuZGluZyBhIGBQQVRDSGAgcmVxdWVzdCwgYW5k
IHdlJ3JlIGluIGFuIG9sZCBJbnRlcm5ldCBFeHBsb3JlcgotICAgIC8vIHRoYXQgc3RpbGwgaGFz
IEFjdGl2ZVggZW5hYmxlZCBieSBkZWZhdWx0LCBvdmVycmlkZSBqUXVlcnkgdG8gdXNlIHRoYXQK
LSAgICAvLyBmb3IgWEhSIGluc3RlYWQuIFJlbW92ZSB0aGlzIGxpbmUgd2hlbiBqUXVlcnkgc3Vw
cG9ydHMgYFBBVENIYCBvbiBJRTguCi0gICAgaWYgKHBhcmFtcy50eXBlID09PSAnUEFUQ0gnICYm
IHdpbmRvdy5BY3RpdmVYT2JqZWN0ICYmCi0gICAgICAgICAgISh3aW5kb3cuZXh0ZXJuYWwgJiYg
d2luZG93LmV4dGVybmFsLm1zQWN0aXZlWEZpbHRlcmluZ0VuYWJsZWQpKSB7Ci0gICAgICBwYXJh
bXMueGhyID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgi
TWljcm9zb2Z0LlhNTEhUVFAiKTsKLSAgICAgIH07Ci0gICAgfQotCi0gICAgLy8gTWFrZSB0aGUg
cmVxdWVzdCwgYWxsb3dpbmcgdGhlIHVzZXIgdG8gb3ZlcnJpZGUgYW55IEFqYXggb3B0aW9ucy4K
LSAgICB2YXIgeGhyID0gb3B0aW9ucy54aHIgPSBCYWNrYm9uZS5hamF4KF8uZXh0ZW5kKHBhcmFt
cywgb3B0aW9ucykpOwotICAgIG1vZGVsLnRyaWdnZXIoJ3JlcXVlc3QnLCBtb2RlbCwgeGhyLCBv
cHRpb25zKTsKLSAgICByZXR1cm4geGhyOwotICB9OwotCi0gIC8vIE1hcCBmcm9tIENSVUQgdG8g
SFRUUCBmb3Igb3VyIGRlZmF1bHQgYEJhY2tib25lLnN5bmNgIGltcGxlbWVudGF0aW9uLgotICB2
YXIgbWV0aG9kTWFwID0gewotICAgICdjcmVhdGUnOiAnUE9TVCcsCi0gICAgJ3VwZGF0ZSc6ICdQ
VVQnLAotICAgICdwYXRjaCc6ICAnUEFUQ0gnLAotICAgICdkZWxldGUnOiAnREVMRVRFJywKLSAg
ICAncmVhZCc6ICAgJ0dFVCcKLSAgfTsKLQotICAvLyBTZXQgdGhlIGRlZmF1bHQgaW1wbGVtZW50
YXRpb24gb2YgYEJhY2tib25lLmFqYXhgIHRvIHByb3h5IHRocm91Z2ggdG8gYCRgLgotICAvLyBP
dmVycmlkZSB0aGlzIGlmIHlvdSdkIGxpa2UgdG8gdXNlIGEgZGlmZmVyZW50IGxpYnJhcnkuCi0g
IEJhY2tib25lLmFqYXggPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gQmFja2JvbmUuJC5hamF4
LmFwcGx5KEJhY2tib25lLiQsIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgLy8gQmFja2JvbmUuUm91
dGVyCi0gIC8vIC0tLS0tLS0tLS0tLS0tLQotCi0gIC8vIFJvdXRlcnMgbWFwIGZhdXgtVVJMcyB0
byBhY3Rpb25zLCBhbmQgZmlyZSBldmVudHMgd2hlbiByb3V0ZXMgYXJlCi0gIC8vIG1hdGNoZWQu
IENyZWF0aW5nIGEgbmV3IG9uZSBzZXRzIGl0cyBgcm91dGVzYCBoYXNoLCBpZiBub3Qgc2V0IHN0
YXRpY2FsbHkuCi0gIHZhciBSb3V0ZXIgPSBCYWNrYm9uZS5Sb3V0ZXIgPSBmdW5jdGlvbihvcHRp
b25zKSB7Ci0gICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTsKLSAgICBpZiAob3B0aW9ucy5y
b3V0ZXMpIHRoaXMucm91dGVzID0gb3B0aW9ucy5yb3V0ZXM7Ci0gICAgdGhpcy5fYmluZFJvdXRl
cygpOwotICAgIHRoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICB9Owot
Ci0gIC8vIENhY2hlZCByZWd1bGFyIGV4cHJlc3Npb25zIGZvciBtYXRjaGluZyBuYW1lZCBwYXJh
bSBwYXJ0cyBhbmQgc3BsYXR0ZWQKLSAgLy8gcGFydHMgb2Ygcm91dGUgc3RyaW5ncy4KLSAgdmFy
IG9wdGlvbmFsUGFyYW0gPSAvXCgoLio/KVwpL2c7Ci0gIHZhciBuYW1lZFBhcmFtICAgID0gLyhc
KFw/KT86XHcrL2c7Ci0gIHZhciBzcGxhdFBhcmFtICAgID0gL1wqXHcrL2c7Ci0gIHZhciBlc2Nh
cGVSZWdFeHAgID0gL1tcLXt9XFtcXSs/LixcXFxeJHwjXHNdL2c7Ci0KLSAgLy8gU2V0IHVwIGFs
bCBpbmhlcml0YWJsZSAqKkJhY2tib25lLlJvdXRlcioqIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMu
Ci0gIF8uZXh0ZW5kKFJvdXRlci5wcm90b3R5cGUsIEV2ZW50cywgewotCi0gICAgLy8gSW5pdGlh
bGl6ZSBpcyBhbiBlbXB0eSBmdW5jdGlvbiBieSBkZWZhdWx0LiBPdmVycmlkZSBpdCB3aXRoIHlv
dXIgb3duCi0gICAgLy8gaW5pdGlhbGl6YXRpb24gbG9naWMuCi0gICAgaW5pdGlhbGl6ZTogZnVu
Y3Rpb24oKXt9LAotCi0gICAgLy8gTWFudWFsbHkgYmluZCBhIHNpbmdsZSBuYW1lZCByb3V0ZSB0
byBhIGNhbGxiYWNrLiBGb3IgZXhhbXBsZToKLSAgICAvLwotICAgIC8vICAgICB0aGlzLnJvdXRl
KCdzZWFyY2gvOnF1ZXJ5L3A6bnVtJywgJ3NlYXJjaCcsIGZ1bmN0aW9uKHF1ZXJ5LCBudW0pIHsK
LSAgICAvLyAgICAgICAuLi4KLSAgICAvLyAgICAgfSk7Ci0gICAgLy8KLSAgICByb3V0ZTogZnVu
Y3Rpb24ocm91dGUsIG5hbWUsIGNhbGxiYWNrKSB7Ci0gICAgICBpZiAoIV8uaXNSZWdFeHAocm91
dGUpKSByb3V0ZSA9IHRoaXMuX3JvdXRlVG9SZWdFeHAocm91dGUpOwotICAgICAgaWYgKF8uaXNG
dW5jdGlvbihuYW1lKSkgewotICAgICAgICBjYWxsYmFjayA9IG5hbWU7Ci0gICAgICAgIG5hbWUg
PSAnJzsKLSAgICAgIH0KLSAgICAgIGlmICghY2FsbGJhY2spIGNhbGxiYWNrID0gdGhpc1tuYW1l
XTsKLSAgICAgIHZhciByb3V0ZXIgPSB0aGlzOwotICAgICAgQmFja2JvbmUuaGlzdG9yeS5yb3V0
ZShyb3V0ZSwgZnVuY3Rpb24oZnJhZ21lbnQpIHsKLSAgICAgICAgdmFyIGFyZ3MgPSByb3V0ZXIu
X2V4dHJhY3RQYXJhbWV0ZXJzKHJvdXRlLCBmcmFnbWVudCk7Ci0gICAgICAgIGNhbGxiYWNrICYm
IGNhbGxiYWNrLmFwcGx5KHJvdXRlciwgYXJncyk7Ci0gICAgICAgIHJvdXRlci50cmlnZ2VyLmFw
cGx5KHJvdXRlciwgWydyb3V0ZTonICsgbmFtZV0uY29uY2F0KGFyZ3MpKTsKLSAgICAgICAgcm91
dGVyLnRyaWdnZXIoJ3JvdXRlJywgbmFtZSwgYXJncyk7Ci0gICAgICAgIEJhY2tib25lLmhpc3Rv
cnkudHJpZ2dlcigncm91dGUnLCByb3V0ZXIsIG5hbWUsIGFyZ3MpOwotICAgICAgfSk7Ci0gICAg
ICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0gICAgLy8gU2ltcGxlIHByb3h5IHRvIGBCYWNrYm9u
ZS5oaXN0b3J5YCB0byBzYXZlIGEgZnJhZ21lbnQgaW50byB0aGUgaGlzdG9yeS4KLSAgICBuYXZp
Z2F0ZTogZnVuY3Rpb24oZnJhZ21lbnQsIG9wdGlvbnMpIHsKLSAgICAgIEJhY2tib25lLmhpc3Rv
cnkubmF2aWdhdGUoZnJhZ21lbnQsIG9wdGlvbnMpOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAg
fSwKLQotICAgIC8vIEJpbmQgYWxsIGRlZmluZWQgcm91dGVzIHRvIGBCYWNrYm9uZS5oaXN0b3J5
YC4gV2UgaGF2ZSB0byByZXZlcnNlIHRoZQotICAgIC8vIG9yZGVyIG9mIHRoZSByb3V0ZXMgaGVy
ZSB0byBzdXBwb3J0IGJlaGF2aW9yIHdoZXJlIHRoZSBtb3N0IGdlbmVyYWwKLSAgICAvLyByb3V0
ZXMgY2FuIGJlIGRlZmluZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgcm91dGUgbWFwLgotICAgIF9i
aW5kUm91dGVzOiBmdW5jdGlvbigpIHsKLSAgICAgIGlmICghdGhpcy5yb3V0ZXMpIHJldHVybjsK
LSAgICAgIHRoaXMucm91dGVzID0gXy5yZXN1bHQodGhpcywgJ3JvdXRlcycpOwotICAgICAgdmFy
IHJvdXRlLCByb3V0ZXMgPSBfLmtleXModGhpcy5yb3V0ZXMpOwotICAgICAgd2hpbGUgKChyb3V0
ZSA9IHJvdXRlcy5wb3AoKSkgIT0gbnVsbCkgewotICAgICAgICB0aGlzLnJvdXRlKHJvdXRlLCB0
aGlzLnJvdXRlc1tyb3V0ZV0pOwotICAgICAgfQotICAgIH0sCi0KLSAgICAvLyBDb252ZXJ0IGEg
cm91dGUgc3RyaW5nIGludG8gYSByZWd1bGFyIGV4cHJlc3Npb24sIHN1aXRhYmxlIGZvciBtYXRj
aGluZwotICAgIC8vIGFnYWluc3QgdGhlIGN1cnJlbnQgbG9jYXRpb24gaGFzaC4KLSAgICBfcm91
dGVUb1JlZ0V4cDogZnVuY3Rpb24ocm91dGUpIHsKLSAgICAgIHJvdXRlID0gcm91dGUucmVwbGFj
ZShlc2NhcGVSZWdFeHAsICdcXCQmJykKLSAgICAgICAgICAgICAgICAgICAucmVwbGFjZShvcHRp
b25hbFBhcmFtLCAnKD86JDEpPycpCi0gICAgICAgICAgICAgICAgICAgLnJlcGxhY2UobmFtZWRQ
YXJhbSwgZnVuY3Rpb24obWF0Y2gsIG9wdGlvbmFsKXsKLSAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBvcHRpb25hbCA/IG1hdGNoIDogJyhbXlwvXSspJzsKLSAgICAgICAgICAgICAgICAgICB9
KQotICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKHNwbGF0UGFyYW0sICcoLio/KScpOwotICAg
ICAgcmV0dXJuIG5ldyBSZWdFeHAoJ14nICsgcm91dGUgKyAnJCcpOwotICAgIH0sCi0KLSAgICAv
LyBHaXZlbiBhIHJvdXRlLCBhbmQgYSBVUkwgZnJhZ21lbnQgdGhhdCBpdCBtYXRjaGVzLCByZXR1
cm4gdGhlIGFycmF5IG9mCi0gICAgLy8gZXh0cmFjdGVkIGRlY29kZWQgcGFyYW1ldGVycy4gRW1w
dHkgb3IgdW5tYXRjaGVkIHBhcmFtZXRlcnMgd2lsbCBiZQotICAgIC8vIHRyZWF0ZWQgYXMgYG51
bGxgIHRvIG5vcm1hbGl6ZSBjcm9zcy1icm93c2VyIGJlaGF2aW9yLgotICAgIF9leHRyYWN0UGFy
YW1ldGVyczogZnVuY3Rpb24ocm91dGUsIGZyYWdtZW50KSB7Ci0gICAgICB2YXIgcGFyYW1zID0g
cm91dGUuZXhlYyhmcmFnbWVudCkuc2xpY2UoMSk7Ci0gICAgICByZXR1cm4gXy5tYXAocGFyYW1z
LCBmdW5jdGlvbihwYXJhbSkgewotICAgICAgICByZXR1cm4gcGFyYW0gPyBkZWNvZGVVUklDb21w
b25lbnQocGFyYW0pIDogbnVsbDsKLSAgICAgIH0pOwotICAgIH0KLQotICB9KTsKLQotICAvLyBC
YWNrYm9uZS5IaXN0b3J5Ci0gIC8vIC0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBIYW5kbGVzIGNy
b3NzLWJyb3dzZXIgaGlzdG9yeSBtYW5hZ2VtZW50LCBiYXNlZCBvbiBlaXRoZXIKLSAgLy8gW3B1
c2hTdGF0ZV0oaHR0cDovL2RpdmVpbnRvaHRtbDUuaW5mby9oaXN0b3J5Lmh0bWwpIGFuZCByZWFs
IFVSTHMsIG9yCi0gIC8vIFtvbmhhc2hjaGFuZ2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEu
b3JnL2VuLVVTL2RvY3MvRE9NL3dpbmRvdy5vbmhhc2hjaGFuZ2UpCi0gIC8vIGFuZCBVUkwgZnJh
Z21lbnRzLiBJZiB0aGUgYnJvd3NlciBzdXBwb3J0cyBuZWl0aGVyIChvbGQgSUUsIG5hdGNoKSwK
LSAgLy8gZmFsbHMgYmFjayB0byBwb2xsaW5nLgotICB2YXIgSGlzdG9yeSA9IEJhY2tib25lLkhp
c3RvcnkgPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmhhbmRsZXJzID0gW107Ci0gICAgXy5iaW5k
QWxsKHRoaXMsICdjaGVja1VybCcpOwotCi0gICAgLy8gRW5zdXJlIHRoYXQgYEhpc3RvcnlgIGNh
biBiZSB1c2VkIG91dHNpZGUgb2YgdGhlIGJyb3dzZXIuCi0gICAgaWYgKHR5cGVvZiB3aW5kb3cg
IT09ICd1bmRlZmluZWQnKSB7Ci0gICAgICB0aGlzLmxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9u
OwotICAgICAgdGhpcy5oaXN0b3J5ID0gd2luZG93Lmhpc3Rvcnk7Ci0gICAgfQotICB9OwotCi0g
IC8vIENhY2hlZCByZWdleCBmb3Igc3RyaXBwaW5nIGEgbGVhZGluZyBoYXNoL3NsYXNoIGFuZCB0
cmFpbGluZyBzcGFjZS4KLSAgdmFyIHJvdXRlU3RyaXBwZXIgPSAvXlsjXC9dfFxzKyQvZzsKLQot
ICAvLyBDYWNoZWQgcmVnZXggZm9yIHN0cmlwcGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFz
aGVzLgotICB2YXIgcm9vdFN0cmlwcGVyID0gL15cLyt8XC8rJC9nOwotCi0gIC8vIENhY2hlZCBy
ZWdleCBmb3IgZGV0ZWN0aW5nIE1TSUUuCi0gIHZhciBpc0V4cGxvcmVyID0gL21zaWUgW1x3Ll0r
LzsKLQotICAvLyBDYWNoZWQgcmVnZXggZm9yIHJlbW92aW5nIGEgdHJhaWxpbmcgc2xhc2guCi0g
IHZhciB0cmFpbGluZ1NsYXNoID0gL1wvJC87Ci0KLSAgLy8gSGFzIHRoZSBoaXN0b3J5IGhhbmRs
aW5nIGFscmVhZHkgYmVlbiBzdGFydGVkPwotICBIaXN0b3J5LnN0YXJ0ZWQgPSBmYWxzZTsKLQot
ICAvLyBTZXQgdXAgYWxsIGluaGVyaXRhYmxlICoqQmFja2JvbmUuSGlzdG9yeSoqIHByb3BlcnRp
ZXMgYW5kIG1ldGhvZHMuCi0gIF8uZXh0ZW5kKEhpc3RvcnkucHJvdG90eXBlLCBFdmVudHMsIHsK
LQotICAgIC8vIFRoZSBkZWZhdWx0IGludGVydmFsIHRvIHBvbGwgZm9yIGhhc2ggY2hhbmdlcywg
aWYgbmVjZXNzYXJ5LCBpcwotICAgIC8vIHR3ZW50eSB0aW1lcyBhIHNlY29uZC4KLSAgICBpbnRl
cnZhbDogNTAsCi0KLSAgICAvLyBHZXRzIHRoZSB0cnVlIGhhc2ggdmFsdWUuIENhbm5vdCB1c2Ug
bG9jYXRpb24uaGFzaCBkaXJlY3RseSBkdWUgdG8gYnVnCi0gICAgLy8gaW4gRmlyZWZveCB3aGVy
ZSBsb2NhdGlvbi5oYXNoIHdpbGwgYWx3YXlzIGJlIGRlY29kZWQuCi0gICAgZ2V0SGFzaDogZnVu
Y3Rpb24od2luZG93KSB7Ci0gICAgICB2YXIgbWF0Y2ggPSAod2luZG93IHx8IHRoaXMpLmxvY2F0
aW9uLmhyZWYubWF0Y2goLyMoLiopJC8pOwotICAgICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0g
OiAnJzsKLSAgICB9LAotCi0gICAgLy8gR2V0IHRoZSBjcm9zcy1icm93c2VyIG5vcm1hbGl6ZWQg
VVJMIGZyYWdtZW50LCBlaXRoZXIgZnJvbSB0aGUgVVJMLAotICAgIC8vIHRoZSBoYXNoLCBvciB0
aGUgb3ZlcnJpZGUuCi0gICAgZ2V0RnJhZ21lbnQ6IGZ1bmN0aW9uKGZyYWdtZW50LCBmb3JjZVB1
c2hTdGF0ZSkgewotICAgICAgaWYgKGZyYWdtZW50ID09IG51bGwpIHsKLSAgICAgICAgaWYgKHRo
aXMuX2hhc1B1c2hTdGF0ZSB8fCAhdGhpcy5fd2FudHNIYXNoQ2hhbmdlIHx8IGZvcmNlUHVzaFN0
YXRlKSB7Ci0gICAgICAgICAgZnJhZ21lbnQgPSB0aGlzLmxvY2F0aW9uLnBhdGhuYW1lOwotICAg
ICAgICAgIHZhciByb290ID0gdGhpcy5yb290LnJlcGxhY2UodHJhaWxpbmdTbGFzaCwgJycpOwot
ICAgICAgICAgIGlmICghZnJhZ21lbnQuaW5kZXhPZihyb290KSkgZnJhZ21lbnQgPSBmcmFnbWVu
dC5zdWJzdHIocm9vdC5sZW5ndGgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGZyYWdt
ZW50ID0gdGhpcy5nZXRIYXNoKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBm
cmFnbWVudC5yZXBsYWNlKHJvdXRlU3RyaXBwZXIsICcnKTsKLSAgICB9LAotCi0gICAgLy8gU3Rh
cnQgdGhlIGhhc2ggY2hhbmdlIGhhbmRsaW5nLCByZXR1cm5pbmcgYHRydWVgIGlmIHRoZSBjdXJy
ZW50IFVSTCBtYXRjaGVzCi0gICAgLy8gYW4gZXhpc3Rpbmcgcm91dGUsIGFuZCBgZmFsc2VgIG90
aGVyd2lzZS4KLSAgICBzdGFydDogZnVuY3Rpb24ob3B0aW9ucykgewotICAgICAgaWYgKEhpc3Rv
cnkuc3RhcnRlZCkgdGhyb3cgbmV3IEVycm9yKCJCYWNrYm9uZS5oaXN0b3J5IGhhcyBhbHJlYWR5
IGJlZW4gc3RhcnRlZCIpOwotICAgICAgSGlzdG9yeS5zdGFydGVkID0gdHJ1ZTsKLQotICAgICAg
Ly8gRmlndXJlIG91dCB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uLiBEbyB3ZSBuZWVkIGFuIGlm
cmFtZT8KLSAgICAgIC8vIElzIHB1c2hTdGF0ZSBkZXNpcmVkIC4uLiBpcyBpdCBhdmFpbGFibGU/
Ci0gICAgICB0aGlzLm9wdGlvbnMgICAgICAgICAgPSBfLmV4dGVuZCh7fSwge3Jvb3Q6ICcvJ30s
IHRoaXMub3B0aW9ucywgb3B0aW9ucyk7Ci0gICAgICB0aGlzLnJvb3QgICAgICAgICAgICAgPSB0
aGlzLm9wdGlvbnMucm9vdDsKLSAgICAgIHRoaXMuX3dhbnRzSGFzaENoYW5nZSA9IHRoaXMub3B0
aW9ucy5oYXNoQ2hhbmdlICE9PSBmYWxzZTsKLSAgICAgIHRoaXMuX3dhbnRzUHVzaFN0YXRlICA9
ICEhdGhpcy5vcHRpb25zLnB1c2hTdGF0ZTsKLSAgICAgIHRoaXMuX2hhc1B1c2hTdGF0ZSAgICA9
ICEhKHRoaXMub3B0aW9ucy5wdXNoU3RhdGUgJiYgdGhpcy5oaXN0b3J5ICYmIHRoaXMuaGlzdG9y
eS5wdXNoU3RhdGUpOwotICAgICAgdmFyIGZyYWdtZW50ICAgICAgICAgID0gdGhpcy5nZXRGcmFn
bWVudCgpOwotICAgICAgdmFyIGRvY01vZGUgICAgICAgICAgID0gZG9jdW1lbnQuZG9jdW1lbnRN
b2RlOwotICAgICAgdmFyIG9sZElFICAgICAgICAgICAgID0gKGlzRXhwbG9yZXIuZXhlYyhuYXZp
Z2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkpICYmICghZG9jTW9kZSB8fCBkb2NNb2RlIDw9
IDcpKTsKLQotICAgICAgLy8gTm9ybWFsaXplIHJvb3QgdG8gYWx3YXlzIGluY2x1ZGUgYSBsZWFk
aW5nIGFuZCB0cmFpbGluZyBzbGFzaC4KLSAgICAgIHRoaXMucm9vdCA9ICgnLycgKyB0aGlzLnJv
b3QgKyAnLycpLnJlcGxhY2Uocm9vdFN0cmlwcGVyLCAnLycpOwotCi0gICAgICBpZiAob2xkSUUg
JiYgdGhpcy5fd2FudHNIYXNoQ2hhbmdlKSB7Ci0gICAgICAgIHRoaXMuaWZyYW1lID0gQmFja2Jv
bmUuJCgnPGlmcmFtZSBzcmM9ImphdmFzY3JpcHQ6MCIgdGFiaW5kZXg9Ii0xIiAvPicpLmhpZGUo
KS5hcHBlbmRUbygnYm9keScpWzBdLmNvbnRlbnRXaW5kb3c7Ci0gICAgICAgIHRoaXMubmF2aWdh
dGUoZnJhZ21lbnQpOwotICAgICAgfQotCi0gICAgICAvLyBEZXBlbmRpbmcgb24gd2hldGhlciB3
ZSdyZSB1c2luZyBwdXNoU3RhdGUgb3IgaGFzaGVzLCBhbmQgd2hldGhlcgotICAgICAgLy8gJ29u
aGFzaGNoYW5nZScgaXMgc3VwcG9ydGVkLCBkZXRlcm1pbmUgaG93IHdlIGNoZWNrIHRoZSBVUkwg
c3RhdGUuCi0gICAgICBpZiAodGhpcy5faGFzUHVzaFN0YXRlKSB7Ci0gICAgICAgIEJhY2tib25l
LiQod2luZG93KS5vbigncG9wc3RhdGUnLCB0aGlzLmNoZWNrVXJsKTsKLSAgICAgIH0gZWxzZSBp
ZiAodGhpcy5fd2FudHNIYXNoQ2hhbmdlICYmICgnb25oYXNoY2hhbmdlJyBpbiB3aW5kb3cpICYm
ICFvbGRJRSkgewotICAgICAgICBCYWNrYm9uZS4kKHdpbmRvdykub24oJ2hhc2hjaGFuZ2UnLCB0
aGlzLmNoZWNrVXJsKTsKLSAgICAgIH0gZWxzZSBpZiAodGhpcy5fd2FudHNIYXNoQ2hhbmdlKSB7
Ci0gICAgICAgIHRoaXMuX2NoZWNrVXJsSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCh0aGlzLmNoZWNr
VXJsLCB0aGlzLmludGVydmFsKTsKLSAgICAgIH0KLQotICAgICAgLy8gRGV0ZXJtaW5lIGlmIHdl
IG5lZWQgdG8gY2hhbmdlIHRoZSBiYXNlIHVybCwgZm9yIGEgcHVzaFN0YXRlIGxpbmsKLSAgICAg
IC8vIG9wZW5lZCBieSBhIG5vbi1wdXNoU3RhdGUgYnJvd3Nlci4KLSAgICAgIHRoaXMuZnJhZ21l
bnQgPSBmcmFnbWVudDsKLSAgICAgIHZhciBsb2MgPSB0aGlzLmxvY2F0aW9uOwotICAgICAgdmFy
IGF0Um9vdCA9IGxvYy5wYXRobmFtZS5yZXBsYWNlKC9bXlwvXSQvLCAnJCYvJykgPT09IHRoaXMu
cm9vdDsKLQotICAgICAgLy8gSWYgd2UndmUgc3RhcnRlZCBvZmYgd2l0aCBhIHJvdXRlIGZyb20g
YSBgcHVzaFN0YXRlYC1lbmFibGVkIGJyb3dzZXIsCi0gICAgICAvLyBidXQgd2UncmUgY3VycmVu
dGx5IGluIGEgYnJvd3NlciB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBpdC4uLgotICAgICAgaWYgKHRo
aXMuX3dhbnRzSGFzaENoYW5nZSAmJiB0aGlzLl93YW50c1B1c2hTdGF0ZSAmJiAhdGhpcy5faGFz
UHVzaFN0YXRlICYmICFhdFJvb3QpIHsKLSAgICAgICAgdGhpcy5mcmFnbWVudCA9IHRoaXMuZ2V0
RnJhZ21lbnQobnVsbCwgdHJ1ZSk7Ci0gICAgICAgIHRoaXMubG9jYXRpb24ucmVwbGFjZSh0aGlz
LnJvb3QgKyB0aGlzLmxvY2F0aW9uLnNlYXJjaCArICcjJyArIHRoaXMuZnJhZ21lbnQpOwotICAg
ICAgICAvLyBSZXR1cm4gaW1tZWRpYXRlbHkgYXMgYnJvd3NlciB3aWxsIGRvIHJlZGlyZWN0IHRv
IG5ldyB1cmwKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgIC8vIE9yIGlmIHdlJ3ZlIHN0
YXJ0ZWQgb3V0IHdpdGggYSBoYXNoLWJhc2VkIHJvdXRlLCBidXQgd2UncmUgY3VycmVudGx5Ci0g
ICAgICAvLyBpbiBhIGJyb3dzZXIgd2hlcmUgaXQgY291bGQgYmUgYHB1c2hTdGF0ZWAtYmFzZWQg
aW5zdGVhZC4uLgotICAgICAgfSBlbHNlIGlmICh0aGlzLl93YW50c1B1c2hTdGF0ZSAmJiB0aGlz
Ll9oYXNQdXNoU3RhdGUgJiYgYXRSb290ICYmIGxvYy5oYXNoKSB7Ci0gICAgICAgIHRoaXMuZnJh
Z21lbnQgPSB0aGlzLmdldEhhc2goKS5yZXBsYWNlKHJvdXRlU3RyaXBwZXIsICcnKTsKLSAgICAg
ICAgdGhpcy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh7fSwgZG9jdW1lbnQudGl0bGUsIHRoaXMucm9v
dCArIHRoaXMuZnJhZ21lbnQgKyBsb2Muc2VhcmNoKTsKLSAgICAgIH0KLQotICAgICAgaWYgKCF0
aGlzLm9wdGlvbnMuc2lsZW50KSByZXR1cm4gdGhpcy5sb2FkVXJsKCk7Ci0gICAgfSwKLQotICAg
IC8vIERpc2FibGUgQmFja2JvbmUuaGlzdG9yeSwgcGVyaGFwcyB0ZW1wb3JhcmlseS4gTm90IHVz
ZWZ1bCBpbiBhIHJlYWwgYXBwLAotICAgIC8vIGJ1dCBwb3NzaWJseSB1c2VmdWwgZm9yIHVuaXQg
dGVzdGluZyBSb3V0ZXJzLgotICAgIHN0b3A6IGZ1bmN0aW9uKCkgewotICAgICAgQmFja2JvbmUu
JCh3aW5kb3cpLm9mZigncG9wc3RhdGUnLCB0aGlzLmNoZWNrVXJsKS5vZmYoJ2hhc2hjaGFuZ2Un
LCB0aGlzLmNoZWNrVXJsKTsKLSAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fY2hlY2tVcmxJbnRl
cnZhbCk7Ci0gICAgICBIaXN0b3J5LnN0YXJ0ZWQgPSBmYWxzZTsKLSAgICB9LAotCi0gICAgLy8g
QWRkIGEgcm91dGUgdG8gYmUgdGVzdGVkIHdoZW4gdGhlIGZyYWdtZW50IGNoYW5nZXMuIFJvdXRl
cyBhZGRlZCBsYXRlcgotICAgIC8vIG1heSBvdmVycmlkZSBwcmV2aW91cyByb3V0ZXMuCi0gICAg
cm91dGU6IGZ1bmN0aW9uKHJvdXRlLCBjYWxsYmFjaykgewotICAgICAgdGhpcy5oYW5kbGVycy51
bnNoaWZ0KHtyb3V0ZTogcm91dGUsIGNhbGxiYWNrOiBjYWxsYmFja30pOwotICAgIH0sCi0KLSAg
ICAvLyBDaGVja3MgdGhlIGN1cnJlbnQgVVJMIHRvIHNlZSBpZiBpdCBoYXMgY2hhbmdlZCwgYW5k
IGlmIGl0IGhhcywKLSAgICAvLyBjYWxscyBgbG9hZFVybGAsIG5vcm1hbGl6aW5nIGFjcm9zcyB0
aGUgaGlkZGVuIGlmcmFtZS4KLSAgICBjaGVja1VybDogZnVuY3Rpb24oZSkgewotICAgICAgdmFy
IGN1cnJlbnQgPSB0aGlzLmdldEZyYWdtZW50KCk7Ci0gICAgICBpZiAoY3VycmVudCA9PT0gdGhp
cy5mcmFnbWVudCAmJiB0aGlzLmlmcmFtZSkgewotICAgICAgICBjdXJyZW50ID0gdGhpcy5nZXRG
cmFnbWVudCh0aGlzLmdldEhhc2godGhpcy5pZnJhbWUpKTsKLSAgICAgIH0KLSAgICAgIGlmIChj
dXJyZW50ID09PSB0aGlzLmZyYWdtZW50KSByZXR1cm4gZmFsc2U7Ci0gICAgICBpZiAodGhpcy5p
ZnJhbWUpIHRoaXMubmF2aWdhdGUoY3VycmVudCk7Ci0gICAgICB0aGlzLmxvYWRVcmwoKSB8fCB0
aGlzLmxvYWRVcmwodGhpcy5nZXRIYXNoKCkpOwotICAgIH0sCi0KLSAgICAvLyBBdHRlbXB0IHRv
IGxvYWQgdGhlIGN1cnJlbnQgVVJMIGZyYWdtZW50LiBJZiBhIHJvdXRlIHN1Y2NlZWRzIHdpdGgg
YQotICAgIC8vIG1hdGNoLCByZXR1cm5zIGB0cnVlYC4gSWYgbm8gZGVmaW5lZCByb3V0ZXMgbWF0
Y2hlcyB0aGUgZnJhZ21lbnQsCi0gICAgLy8gcmV0dXJucyBgZmFsc2VgLgotICAgIGxvYWRVcmw6
IGZ1bmN0aW9uKGZyYWdtZW50T3ZlcnJpZGUpIHsKLSAgICAgIHZhciBmcmFnbWVudCA9IHRoaXMu
ZnJhZ21lbnQgPSB0aGlzLmdldEZyYWdtZW50KGZyYWdtZW50T3ZlcnJpZGUpOwotICAgICAgdmFy
IG1hdGNoZWQgPSBfLmFueSh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbihoYW5kbGVyKSB7Ci0gICAg
ICAgIGlmIChoYW5kbGVyLnJvdXRlLnRlc3QoZnJhZ21lbnQpKSB7Ci0gICAgICAgICAgaGFuZGxl
ci5jYWxsYmFjayhmcmFnbWVudCk7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICAgIH0pOwotICAgICAgcmV0dXJuIG1hdGNoZWQ7Ci0gICAgfSwKLQotICAgIC8vIFNhdmUg
YSBmcmFnbWVudCBpbnRvIHRoZSBoYXNoIGhpc3RvcnksIG9yIHJlcGxhY2UgdGhlIFVSTCBzdGF0
ZSBpZiB0aGUKLSAgICAvLyAncmVwbGFjZScgb3B0aW9uIGlzIHBhc3NlZC4gWW91IGFyZSByZXNw
b25zaWJsZSBmb3IgcHJvcGVybHkgVVJMLWVuY29kaW5nCi0gICAgLy8gdGhlIGZyYWdtZW50IGlu
IGFkdmFuY2UuCi0gICAgLy8KLSAgICAvLyBUaGUgb3B0aW9ucyBvYmplY3QgY2FuIGNvbnRhaW4g
YHRyaWdnZXI6IHRydWVgIGlmIHlvdSB3aXNoIHRvIGhhdmUgdGhlCi0gICAgLy8gcm91dGUgY2Fs
bGJhY2sgYmUgZmlyZWQgKG5vdCB1c3VhbGx5IGRlc2lyYWJsZSksIG9yIGByZXBsYWNlOiB0cnVl
YCwgaWYKLSAgICAvLyB5b3Ugd2lzaCB0byBtb2RpZnkgdGhlIGN1cnJlbnQgVVJMIHdpdGhvdXQg
YWRkaW5nIGFuIGVudHJ5IHRvIHRoZSBoaXN0b3J5LgotICAgIG5hdmlnYXRlOiBmdW5jdGlvbihm
cmFnbWVudCwgb3B0aW9ucykgewotICAgICAgaWYgKCFIaXN0b3J5LnN0YXJ0ZWQpIHJldHVybiBm
YWxzZTsKLSAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zID09PSB0cnVlKSBvcHRpb25zID0g
e3RyaWdnZXI6IG9wdGlvbnN9OwotICAgICAgZnJhZ21lbnQgPSB0aGlzLmdldEZyYWdtZW50KGZy
YWdtZW50IHx8ICcnKTsKLSAgICAgIGlmICh0aGlzLmZyYWdtZW50ID09PSBmcmFnbWVudCkgcmV0
dXJuOwotICAgICAgdGhpcy5mcmFnbWVudCA9IGZyYWdtZW50OwotICAgICAgdmFyIHVybCA9IHRo
aXMucm9vdCArIGZyYWdtZW50OwotCi0gICAgICAvLyBJZiBwdXNoU3RhdGUgaXMgYXZhaWxhYmxl
LCB3ZSB1c2UgaXQgdG8gc2V0IHRoZSBmcmFnbWVudCBhcyBhIHJlYWwgVVJMLgotICAgICAgaWYg
KHRoaXMuX2hhc1B1c2hTdGF0ZSkgewotICAgICAgICB0aGlzLmhpc3Rvcnlbb3B0aW9ucy5yZXBs
YWNlID8gJ3JlcGxhY2VTdGF0ZScgOiAncHVzaFN0YXRlJ10oe30sIGRvY3VtZW50LnRpdGxlLCB1
cmwpOwotCi0gICAgICAvLyBJZiBoYXNoIGNoYW5nZXMgaGF2ZW4ndCBiZWVuIGV4cGxpY2l0bHkg
ZGlzYWJsZWQsIHVwZGF0ZSB0aGUgaGFzaAotICAgICAgLy8gZnJhZ21lbnQgdG8gc3RvcmUgaGlz
dG9yeS4KLSAgICAgIH0gZWxzZSBpZiAodGhpcy5fd2FudHNIYXNoQ2hhbmdlKSB7Ci0gICAgICAg
IHRoaXMuX3VwZGF0ZUhhc2godGhpcy5sb2NhdGlvbiwgZnJhZ21lbnQsIG9wdGlvbnMucmVwbGFj
ZSk7Ci0gICAgICAgIGlmICh0aGlzLmlmcmFtZSAmJiAoZnJhZ21lbnQgIT09IHRoaXMuZ2V0RnJh
Z21lbnQodGhpcy5nZXRIYXNoKHRoaXMuaWZyYW1lKSkpKSB7Ci0gICAgICAgICAgLy8gT3Blbmlu
ZyBhbmQgY2xvc2luZyB0aGUgaWZyYW1lIHRyaWNrcyBJRTcgYW5kIGVhcmxpZXIgdG8gcHVzaCBh
Ci0gICAgICAgICAgLy8gaGlzdG9yeSBlbnRyeSBvbiBoYXNoLXRhZyBjaGFuZ2UuICBXaGVuIHJl
cGxhY2UgaXMgdHJ1ZSwgd2UgZG9uJ3QKLSAgICAgICAgICAvLyB3YW50IHRoaXMuCi0gICAgICAg
ICAgaWYoIW9wdGlvbnMucmVwbGFjZSkgdGhpcy5pZnJhbWUuZG9jdW1lbnQub3BlbigpLmNsb3Nl
KCk7Ci0gICAgICAgICAgdGhpcy5fdXBkYXRlSGFzaCh0aGlzLmlmcmFtZS5sb2NhdGlvbiwgZnJh
Z21lbnQsIG9wdGlvbnMucmVwbGFjZSk7Ci0gICAgICAgIH0KLQotICAgICAgLy8gSWYgeW91J3Zl
IHRvbGQgdXMgdGhhdCB5b3UgZXhwbGljaXRseSBkb24ndCB3YW50IGZhbGxiYWNrIGhhc2hjaGFu
Z2UtCi0gICAgICAvLyBiYXNlZCBoaXN0b3J5LCB0aGVuIGBuYXZpZ2F0ZWAgYmVjb21lcyBhIHBh
Z2UgcmVmcmVzaC4KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmxvY2F0aW9u
LmFzc2lnbih1cmwpOwotICAgICAgfQotICAgICAgaWYgKG9wdGlvbnMudHJpZ2dlcikgdGhpcy5s
b2FkVXJsKGZyYWdtZW50KTsKLSAgICB9LAotCi0gICAgLy8gVXBkYXRlIHRoZSBoYXNoIGxvY2F0
aW9uLCBlaXRoZXIgcmVwbGFjaW5nIHRoZSBjdXJyZW50IGVudHJ5LCBvciBhZGRpbmcKLSAgICAv
LyBhIG5ldyBvbmUgdG8gdGhlIGJyb3dzZXIgaGlzdG9yeS4KLSAgICBfdXBkYXRlSGFzaDogZnVu
Y3Rpb24obG9jYXRpb24sIGZyYWdtZW50LCByZXBsYWNlKSB7Ci0gICAgICBpZiAocmVwbGFjZSkg
ewotICAgICAgICB2YXIgaHJlZiA9IGxvY2F0aW9uLmhyZWYucmVwbGFjZSgvKGphdmFzY3JpcHQ6
fCMpLiokLywgJycpOwotICAgICAgICBsb2NhdGlvbi5yZXBsYWNlKGhyZWYgKyAnIycgKyBmcmFn
bWVudCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBTb21lIGJyb3dzZXJzIHJlcXVpcmUg
dGhhdCBgaGFzaGAgY29udGFpbnMgYSBsZWFkaW5nICMuCi0gICAgICAgIGxvY2F0aW9uLmhhc2gg
PSAnIycgKyBmcmFnbWVudDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgfSk7Ci0KLSAgLy8gQ3JlYXRl
IHRoZSBkZWZhdWx0IEJhY2tib25lLmhpc3RvcnkuCi0gIEJhY2tib25lLmhpc3RvcnkgPSBuZXcg
SGlzdG9yeTsKLQotICAvLyBIZWxwZXJzCi0gIC8vIC0tLS0tLS0KLQotICAvLyBIZWxwZXIgZnVu
Y3Rpb24gdG8gY29ycmVjdGx5IHNldCB1cCB0aGUgcHJvdG90eXBlIGNoYWluLCBmb3Igc3ViY2xh
c3Nlcy4KLSAgLy8gU2ltaWxhciB0byBgZ29vZy5pbmhlcml0c2AsIGJ1dCB1c2VzIGEgaGFzaCBv
ZiBwcm90b3R5cGUgcHJvcGVydGllcyBhbmQKLSAgLy8gY2xhc3MgcHJvcGVydGllcyB0byBiZSBl
eHRlbmRlZC4KLSAgdmFyIGV4dGVuZCA9IGZ1bmN0aW9uKHByb3RvUHJvcHMsIHN0YXRpY1Byb3Bz
KSB7Ci0gICAgdmFyIHBhcmVudCA9IHRoaXM7Ci0gICAgdmFyIGNoaWxkOwotCi0gICAgLy8gVGhl
IGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGZvciB0aGUgbmV3IHN1YmNsYXNzIGlzIGVpdGhlciBkZWZp
bmVkIGJ5IHlvdQotICAgIC8vICh0aGUgImNvbnN0cnVjdG9yIiBwcm9wZXJ0eSBpbiB5b3VyIGBl
eHRlbmRgIGRlZmluaXRpb24pLCBvciBkZWZhdWx0ZWQKLSAgICAvLyBieSB1cyB0byBzaW1wbHkg
Y2FsbCB0aGUgcGFyZW50J3MgY29uc3RydWN0b3IuCi0gICAgaWYgKHByb3RvUHJvcHMgJiYgXy5o
YXMocHJvdG9Qcm9wcywgJ2NvbnN0cnVjdG9yJykpIHsKLSAgICAgIGNoaWxkID0gcHJvdG9Qcm9w
cy5jb25zdHJ1Y3RvcjsKLSAgICB9IGVsc2UgewotICAgICAgY2hpbGQgPSBmdW5jdGlvbigpeyBy
ZXR1cm4gcGFyZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07Ci0gICAgfQotCi0gICAgLy8g
QWRkIHN0YXRpYyBwcm9wZXJ0aWVzIHRvIHRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiwgaWYgc3Vw
cGxpZWQuCi0gICAgXy5leHRlbmQoY2hpbGQsIHBhcmVudCwgc3RhdGljUHJvcHMpOwotCi0gICAg
Ly8gU2V0IHRoZSBwcm90b3R5cGUgY2hhaW4gdG8gaW5oZXJpdCBmcm9tIGBwYXJlbnRgLCB3aXRo
b3V0IGNhbGxpbmcKLSAgICAvLyBgcGFyZW50YCdzIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLgotICAg
IHZhciBTdXJyb2dhdGUgPSBmdW5jdGlvbigpeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH07
Ci0gICAgU3Vycm9nYXRlLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7Ci0gICAgY2hpbGQu
cHJvdG90eXBlID0gbmV3IFN1cnJvZ2F0ZTsKLQotICAgIC8vIEFkZCBwcm90b3R5cGUgcHJvcGVy
dGllcyAoaW5zdGFuY2UgcHJvcGVydGllcykgdG8gdGhlIHN1YmNsYXNzLAotICAgIC8vIGlmIHN1
cHBsaWVkLgotICAgIGlmIChwcm90b1Byb3BzKSBfLmV4dGVuZChjaGlsZC5wcm90b3R5cGUsIHBy
b3RvUHJvcHMpOwotCi0gICAgLy8gU2V0IGEgY29udmVuaWVuY2UgcHJvcGVydHkgaW4gY2FzZSB0
aGUgcGFyZW50J3MgcHJvdG90eXBlIGlzIG5lZWRlZAotICAgIC8vIGxhdGVyLgotICAgIGNoaWxk
Ll9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7Ci0KLSAgICByZXR1cm4gY2hpbGQ7Ci0gIH07
Ci0KLSAgLy8gU2V0IHVwIGluaGVyaXRhbmNlIGZvciB0aGUgbW9kZWwsIGNvbGxlY3Rpb24sIHJv
dXRlciwgdmlldyBhbmQgaGlzdG9yeS4KLSAgTW9kZWwuZXh0ZW5kID0gQ29sbGVjdGlvbi5leHRl
bmQgPSBSb3V0ZXIuZXh0ZW5kID0gVmlldy5leHRlbmQgPSBIaXN0b3J5LmV4dGVuZCA9IGV4dGVu
ZDsKLQotICAvLyBUaHJvdyBhbiBlcnJvciB3aGVuIGEgVVJMIGlzIG5lZWRlZCwgYW5kIG5vbmUg
aXMgc3VwcGxpZWQuCi0gIHZhciB1cmxFcnJvciA9IGZ1bmN0aW9uKCkgewotICAgIHRocm93IG5l
dyBFcnJvcignQSAidXJsIiBwcm9wZXJ0eSBvciBmdW5jdGlvbiBtdXN0IGJlIHNwZWNpZmllZCcp
OwotICB9OwotCi0gIC8vIFdyYXAgYW4gb3B0aW9uYWwgZXJyb3IgY2FsbGJhY2sgd2l0aCBhIGZh
bGxiYWNrIGVycm9yIGV2ZW50LgotICB2YXIgd3JhcEVycm9yID0gZnVuY3Rpb24gKG1vZGVsLCBv
cHRpb25zKSB7Ci0gICAgdmFyIGVycm9yID0gb3B0aW9ucy5lcnJvcjsKLSAgICBvcHRpb25zLmVy
cm9yID0gZnVuY3Rpb24ocmVzcCkgewotICAgICAgaWYgKGVycm9yKSBlcnJvcihtb2RlbCwgcmVz
cCwgb3B0aW9ucyk7Ci0gICAgICBtb2RlbC50cmlnZ2VyKCdlcnJvcicsIG1vZGVsLCByZXNwLCBv
cHRpb25zKTsKLSAgICB9OwotICB9OwotCi19KS5jYWxsKHRoaXMpOwpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvYmFja2JvbmUvYm93ZXJfY29tcG9uZW50cy9qcXVlcnkvanF1ZXJ5LmpzIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvYmFja2JvbmUvYm93ZXJfY29tcG9uZW50cy9qcXVlcnkvanF1ZXJ5LmpzCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2ZlZWYyZDk5YWUyM2JkNjliMTAzZGZjZDZmNjQ2
ZDBmOGZmZTFjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2JhY2tib25lL2Jvd2VyX2NvbXBvbmVudHMvanF1ZXJ5L2pxdWVyeS5qcwor
KysgL2Rldi9udWxsCkBAIC0xLDk1OTcgKzAsMCBAQAotLyohCi0gKiBqUXVlcnkgSmF2YVNjcmlw
dCBMaWJyYXJ5IHYxLjkuMQotICogaHR0cDovL2pxdWVyeS5jb20vCi0gKgotICogSW5jbHVkZXMg
U2l6emxlLmpzCi0gKiBodHRwOi8vc2l6emxlanMuY29tLwotICoKLSAqIENvcHlyaWdodCAyMDA1
LCAyMDEyIGpRdWVyeSBGb3VuZGF0aW9uLCBJbmMuIGFuZCBvdGhlciBjb250cmlidXRvcnMKLSAq
IFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQotICogaHR0cDovL2pxdWVyeS5vcmcvbGlj
ZW5zZQotICoKLSAqIERhdGU6IDIwMTMtMi00Ci0gKi8KLShmdW5jdGlvbiggd2luZG93LCB1bmRl
ZmluZWQgKSB7Ci0KLS8vIENhbid0IGRvIHRoaXMgYmVjYXVzZSBzZXZlcmFsIGFwcHMgaW5jbHVk
aW5nIEFTUC5ORVQgdHJhY2UKLS8vIHRoZSBzdGFjayB2aWEgYXJndW1lbnRzLmNhbGxlci5jYWxs
ZWUgYW5kIEZpcmVmb3ggZGllcyBpZgotLy8geW91IHRyeSB0byB0cmFjZSB0aHJvdWdoICJ1c2Ug
c3RyaWN0IiBjYWxsIGNoYWlucy4gKCMxMzMzNSkKLS8vIFN1cHBvcnQ6IEZpcmVmb3ggMTgrCi0v
LyJ1c2Ugc3RyaWN0IjsKLXZhcgotICAgIC8vIFRoZSBkZWZlcnJlZCB1c2VkIG9uIERPTSByZWFk
eQotICAgIHJlYWR5TGlzdCwKLQotICAgIC8vIEEgY2VudHJhbCByZWZlcmVuY2UgdG8gdGhlIHJv
b3QgalF1ZXJ5KGRvY3VtZW50KQotICAgIHJvb3RqUXVlcnksCi0KLSAgICAvLyBTdXBwb3J0OiBJ
RTw5Ci0gICAgLy8gRm9yIGB0eXBlb2Ygbm9kZS5tZXRob2RgIGluc3RlYWQgb2YgYG5vZGUubWV0
aG9kICE9PSB1bmRlZmluZWRgCi0gICAgY29yZV9zdHJ1bmRlZmluZWQgPSB0eXBlb2YgdW5kZWZp
bmVkLAotCi0gICAgLy8gVXNlIHRoZSBjb3JyZWN0IGRvY3VtZW50IGFjY29yZGluZ2x5IHdpdGgg
d2luZG93IGFyZ3VtZW50IChzYW5kYm94KQotICAgIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50
LAotICAgIGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uLAotCi0gICAgLy8gTWFwIG92ZXIgalF1
ZXJ5IGluIGNhc2Ugb2Ygb3ZlcndyaXRlCi0gICAgX2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksCi0K
LSAgICAvLyBNYXAgb3ZlciB0aGUgJCBpbiBjYXNlIG9mIG92ZXJ3cml0ZQotICAgIF8kID0gd2lu
ZG93LiQsCi0KLSAgICAvLyBbW0NsYXNzXV0gLT4gdHlwZSBwYWlycwotICAgIGNsYXNzMnR5cGUg
PSB7fSwKLQotICAgIC8vIExpc3Qgb2YgZGVsZXRlZCBkYXRhIGNhY2hlIGlkcywgc28gd2UgY2Fu
IHJldXNlIHRoZW0KLSAgICBjb3JlX2RlbGV0ZWRJZHMgPSBbXSwKLQotICAgIGNvcmVfdmVyc2lv
biA9ICIxLjkuMSIsCi0KLSAgICAvLyBTYXZlIGEgcmVmZXJlbmNlIHRvIHNvbWUgY29yZSBtZXRo
b2RzCi0gICAgY29yZV9jb25jYXQgPSBjb3JlX2RlbGV0ZWRJZHMuY29uY2F0LAotICAgIGNvcmVf
cHVzaCA9IGNvcmVfZGVsZXRlZElkcy5wdXNoLAotICAgIGNvcmVfc2xpY2UgPSBjb3JlX2RlbGV0
ZWRJZHMuc2xpY2UsCi0gICAgY29yZV9pbmRleE9mID0gY29yZV9kZWxldGVkSWRzLmluZGV4T2Ys
Ci0gICAgY29yZV90b1N0cmluZyA9IGNsYXNzMnR5cGUudG9TdHJpbmcsCi0gICAgY29yZV9oYXNP
d24gPSBjbGFzczJ0eXBlLmhhc093blByb3BlcnR5LAotICAgIGNvcmVfdHJpbSA9IGNvcmVfdmVy
c2lvbi50cmltLAotCi0gICAgLy8gRGVmaW5lIGEgbG9jYWwgY29weSBvZiBqUXVlcnkKLSAgICBq
UXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7Ci0gICAgLy8gVGhlIGpRdWVy
eSBvYmplY3QgaXMgYWN0dWFsbHkganVzdCB0aGUgaW5pdCBjb25zdHJ1Y3RvciAnZW5oYW5jZWQn
Ci0gICAgcmV0dXJuIG5ldyBqUXVlcnkuZm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQsIHJvb3Rq
UXVlcnkgKTsKLSAgICB9LAotCi0gICAgLy8gVXNlZCBmb3IgbWF0Y2hpbmcgbnVtYmVycwotICAg
IGNvcmVfcG51bSA9IC9bKy1dPyg/OlxkKlwufClcZCsoPzpbZUVdWystXT9cZCt8KS8uc291cmNl
LAotCi0gICAgLy8gVXNlZCBmb3Igc3BsaXR0aW5nIG9uIHdoaXRlc3BhY2UKLSAgICBjb3JlX3Ju
b3R3aGl0ZSA9IC9cUysvZywKLQotICAgIC8vIE1ha2Ugc3VyZSB3ZSB0cmltIEJPTSBhbmQgTkJT
UCAoaGVyZSdzIGxvb2tpbmcgYXQgeW91LCBTYWZhcmkgNS4wIGFuZCBJRSkKLSAgICBydHJpbSA9
IC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywKLQotICAgIC8vIEEgc2ltcGxl
IHdheSB0byBjaGVjayBmb3IgSFRNTCBzdHJpbmdzCi0gICAgLy8gUHJpb3JpdGl6ZSAjaWQgb3Zl
ciA8dGFnPiB0byBhdm9pZCBYU1MgdmlhIGxvY2F0aW9uLmhhc2ggKCM5NTIxKQotICAgIC8vIFN0
cmljdCBIVE1MIHJlY29nbml0aW9uICgjMTEyOTA6IG11c3Qgc3RhcnQgd2l0aCA8KQotICAgIHJx
dWlja0V4cHIgPSAvXig/Oig8W1x3XFddKz4pW14+XSp8IyhbXHctXSopKSQvLAotCi0gICAgLy8g
TWF0Y2ggYSBzdGFuZGFsb25lIHRhZwotICAgIHJzaW5nbGVUYWcgPSAvXjwoXHcrKVxzKlwvPz4o
Pzo8XC9cMT58KSQvLAotCi0gICAgLy8gSlNPTiBSZWdFeHAKLSAgICBydmFsaWRjaGFycyA9IC9e
W1xdLDp7fVxzXSokLywKLSAgICBydmFsaWRicmFjZXMgPSAvKD86Xnw6fCwpKD86XHMqXFspKy9n
LAotICAgIHJ2YWxpZGVzY2FwZSA9IC9cXCg/OlsiXFxcL2JmbnJ0XXx1W1xkYS1mQS1GXXs0fSkv
ZywKLSAgICBydmFsaWR0b2tlbnMgPSAvIlteIlxcXHJcbl0qInx0cnVlfGZhbHNlfG51bGx8LT8o
PzpcZCtcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvZywKLQotICAgIC8vIE1hdGNoZXMgZGFzaGVk
IHN0cmluZyBmb3IgY2FtZWxpemluZwotICAgIHJtc1ByZWZpeCA9IC9eLW1zLS8sCi0gICAgcmRh
c2hBbHBoYSA9IC8tKFtcZGEtel0pL2dpLAotCi0gICAgLy8gVXNlZCBieSBqUXVlcnkuY2FtZWxD
YXNlIGFzIGNhbGxiYWNrIHRvIHJlcGxhY2UoKQotICAgIGZjYW1lbENhc2UgPSBmdW5jdGlvbigg
YWxsLCBsZXR0ZXIgKSB7Ci0gICAgcmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpOwotICAgIH0s
Ci0KLSAgICAvLyBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlcgotICAgIGNvbXBsZXRlZCA9IGZ1bmN0
aW9uKCBldmVudCApIHsKLQotICAgIC8vIHJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIgaXMgZ29v
ZCBlbm91Z2ggZm9yIHVzIHRvIGNhbGwgdGhlIGRvbSByZWFkeSBpbiBvbGRJRQotICAgIGlmICgg
ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciB8fCBldmVudC50eXBlID09PSAibG9hZCIgfHwgZG9j
dW1lbnQucmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIiApIHsKLSAgICBkZXRhY2goKTsKLSAgICBq
UXVlcnkucmVhZHkoKTsKLSAgICB9Ci0gICAgfSwKLSAgICAvLyBDbGVhbi11cCBtZXRob2QgZm9y
IGRvbSByZWFkeSBldmVudHMKLSAgICBkZXRhY2ggPSBmdW5jdGlvbigpIHsKLSAgICBpZiAoIGRv
Y3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgKSB7Ci0gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0
ZW5lciggIkRPTUNvbnRlbnRMb2FkZWQiLCBjb21wbGV0ZWQsIGZhbHNlICk7Ci0gICAgd2luZG93
LnJlbW92ZUV2ZW50TGlzdGVuZXIoICJsb2FkIiwgY29tcGxldGVkLCBmYWxzZSApOwotCi0gICAg
fSBlbHNlIHsKLSAgICBkb2N1bWVudC5kZXRhY2hFdmVudCggIm9ucmVhZHlzdGF0ZWNoYW5nZSIs
IGNvbXBsZXRlZCApOwotICAgIHdpbmRvdy5kZXRhY2hFdmVudCggIm9ubG9hZCIsIGNvbXBsZXRl
ZCApOwotICAgIH0KLSAgICB9OwotCi1qUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0gewot
ICAgIC8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJlaW5nIHVzZWQKLSAgICBqcXVl
cnk6IGNvcmVfdmVyc2lvbiwKLQotICAgIGNvbnN0cnVjdG9yOiBqUXVlcnksCi0gICAgaW5pdDog
ZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByb290alF1ZXJ5ICkgewotICAgIHZhciBtYXRj
aCwgZWxlbTsKLQotICAgIC8vIEhBTkRMRTogJCgiIiksICQobnVsbCksICQodW5kZWZpbmVkKSwg
JChmYWxzZSkKLSAgICBpZiAoICFzZWxlY3RvciApIHsKLSAgICByZXR1cm4gdGhpczsKLSAgICB9
Ci0KLSAgICAvLyBIYW5kbGUgSFRNTCBzdHJpbmdzCi0gICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3Ig
PT09ICJzdHJpbmciICkgewotICAgIGlmICggc2VsZWN0b3IuY2hhckF0KDApID09PSAiPCIgJiYg
c2VsZWN0b3IuY2hhckF0KCBzZWxlY3Rvci5sZW5ndGggLSAxICkgPT09ICI+IiAmJiBzZWxlY3Rv
ci5sZW5ndGggPj0gMyApIHsKLSAgICAvLyBBc3N1bWUgdGhhdCBzdHJpbmdzIHRoYXQgc3RhcnQg
YW5kIGVuZCB3aXRoIDw+IGFyZSBIVE1MIGFuZCBza2lwIHRoZSByZWdleCBjaGVjawotICAgIG1h
dGNoID0gWyBudWxsLCBzZWxlY3RvciwgbnVsbCBdOwotCi0gICAgfSBlbHNlIHsKLSAgICBtYXRj
aCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTsKLSAgICB9Ci0KLSAgICAvLyBNYXRjaCBo
dG1sIG9yIG1ha2Ugc3VyZSBubyBjb250ZXh0IGlzIHNwZWNpZmllZCBmb3IgI2lkCi0gICAgaWYg
KCBtYXRjaCAmJiAobWF0Y2hbMV0gfHwgIWNvbnRleHQpICkgewotCi0gICAgLy8gSEFORExFOiAk
KGh0bWwpIC0+ICQoYXJyYXkpCi0gICAgaWYgKCBtYXRjaFsxXSApIHsKLSAgICBjb250ZXh0ID0g
Y29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSA/IGNvbnRleHRbMF0gOiBjb250ZXh0OwotCi0gICAg
Ly8gc2NyaXB0cyBpcyB0cnVlIGZvciBiYWNrLWNvbXBhdAotICAgIGpRdWVyeS5tZXJnZSggdGhp
cywgalF1ZXJ5LnBhcnNlSFRNTCgKLSAgICBtYXRjaFsxXSwKLSAgICBjb250ZXh0ICYmIGNvbnRl
eHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRvY3VtZW50
LAotICAgIHRydWUKLSAgICApICk7Ci0KLSAgICAvLyBIQU5ETEU6ICQoaHRtbCwgcHJvcHMpCi0g
ICAgaWYgKCByc2luZ2xlVGFnLnRlc3QoIG1hdGNoWzFdICkgJiYgalF1ZXJ5LmlzUGxhaW5PYmpl
Y3QoIGNvbnRleHQgKSApIHsKLSAgICBmb3IgKCBtYXRjaCBpbiBjb250ZXh0ICkgewotICAgIC8v
IFByb3BlcnRpZXMgb2YgY29udGV4dCBhcmUgY2FsbGVkIGFzIG1ldGhvZHMgaWYgcG9zc2libGUK
LSAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB0aGlzWyBtYXRjaCBdICkgKSB7Ci0gICAgdGhp
c1sgbWF0Y2ggXSggY29udGV4dFsgbWF0Y2ggXSApOwotCi0gICAgLy8gLi4uYW5kIG90aGVyd2lz
ZSBzZXQgYXMgYXR0cmlidXRlcwotICAgIH0gZWxzZSB7Ci0gICAgdGhpcy5hdHRyKCBtYXRjaCwg
Y29udGV4dFsgbWF0Y2ggXSApOwotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRo
aXM7Ci0KLSAgICAvLyBIQU5ETEU6ICQoI2lkKQotICAgIH0gZWxzZSB7Ci0gICAgZWxlbSA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCBtYXRjaFsyXSApOwotCi0gICAgLy8gQ2hlY2sgcGFyZW50
Tm9kZSB0byBjYXRjaCB3aGVuIEJsYWNrYmVycnkgNC42IHJldHVybnMKLSAgICAvLyBub2RlcyB0
aGF0IGFyZSBubyBsb25nZXIgaW4gdGhlIGRvY3VtZW50ICM2OTYzCi0gICAgaWYgKCBlbGVtICYm
IGVsZW0ucGFyZW50Tm9kZSApIHsKLSAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgSUUgYW5k
IE9wZXJhIHJldHVybiBpdGVtcwotICAgIC8vIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRAotICAgIGlm
ICggZWxlbS5pZCAhPT0gbWF0Y2hbMl0gKSB7Ci0gICAgcmV0dXJuIHJvb3RqUXVlcnkuZmluZCgg
c2VsZWN0b3IgKTsKLSAgICB9Ci0KLSAgICAvLyBPdGhlcndpc2UsIHdlIGluamVjdCB0aGUgZWxl
bWVudCBkaXJlY3RseSBpbnRvIHRoZSBqUXVlcnkgb2JqZWN0Ci0gICAgdGhpcy5sZW5ndGggPSAx
OwotICAgIHRoaXNbMF0gPSBlbGVtOwotICAgIH0KLQotICAgIHRoaXMuY29udGV4dCA9IGRvY3Vt
ZW50OwotICAgIHRoaXMuc2VsZWN0b3IgPSBzZWxlY3RvcjsKLSAgICByZXR1cm4gdGhpczsKLSAg
ICB9Ci0KLSAgICAvLyBIQU5ETEU6ICQoZXhwciwgJCguLi4pKQotICAgIH0gZWxzZSBpZiAoICFj
b250ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkgewotICAgIHJldHVybiAoIGNvbnRleHQgfHwgcm9v
dGpRdWVyeSApLmZpbmQoIHNlbGVjdG9yICk7Ci0KLSAgICAvLyBIQU5ETEU6ICQoZXhwciwgY29u
dGV4dCkKLSAgICAvLyAod2hpY2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRleHQpLmZp
bmQoZXhwcikKLSAgICB9IGVsc2UgewotICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250
ZXh0ICkuZmluZCggc2VsZWN0b3IgKTsKLSAgICB9Ci0KLSAgICAvLyBIQU5ETEU6ICQoRE9NRWxl
bWVudCkKLSAgICB9IGVsc2UgaWYgKCBzZWxlY3Rvci5ub2RlVHlwZSApIHsKLSAgICB0aGlzLmNv
bnRleHQgPSB0aGlzWzBdID0gc2VsZWN0b3I7Ci0gICAgdGhpcy5sZW5ndGggPSAxOwotICAgIHJl
dHVybiB0aGlzOwotCi0gICAgLy8gSEFORExFOiAkKGZ1bmN0aW9uKQotICAgIC8vIFNob3J0Y3V0
IGZvciBkb2N1bWVudCByZWFkeQotICAgIH0gZWxzZSBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBz
ZWxlY3RvciApICkgewotICAgIHJldHVybiByb290alF1ZXJ5LnJlYWR5KCBzZWxlY3RvciApOwot
ICAgIH0KLQotICAgIGlmICggc2VsZWN0b3Iuc2VsZWN0b3IgIT09IHVuZGVmaW5lZCApIHsKLSAg
ICB0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3Iuc2VsZWN0b3I7Ci0gICAgdGhpcy5jb250ZXh0ID0g
c2VsZWN0b3IuY29udGV4dDsKLSAgICB9Ci0KLSAgICByZXR1cm4galF1ZXJ5Lm1ha2VBcnJheSgg
c2VsZWN0b3IsIHRoaXMgKTsKLSAgICB9LAotCi0gICAgLy8gU3RhcnQgd2l0aCBhbiBlbXB0eSBz
ZWxlY3RvcgotICAgIHNlbGVjdG9yOiAiIiwKLQotICAgIC8vIFRoZSBkZWZhdWx0IGxlbmd0aCBv
ZiBhIGpRdWVyeSBvYmplY3QgaXMgMAotICAgIGxlbmd0aDogMCwKLQotICAgIC8vIFRoZSBudW1i
ZXIgb2YgZWxlbWVudHMgY29udGFpbmVkIGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0Ci0gICAg
c2l6ZTogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMubGVuZ3RoOwotICAgIH0sCi0KLSAg
ICB0b0FycmF5OiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gY29yZV9zbGljZS5jYWxsKCB0aGlz
ICk7Ci0gICAgfSwKLQotICAgIC8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQg
ZWxlbWVudCBzZXQgT1IKLSAgICAvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQg
YXMgYSBjbGVhbiBhcnJheQotICAgIGdldDogZnVuY3Rpb24oIG51bSApIHsKLSAgICByZXR1cm4g
bnVtID09IG51bGwgPwotCi0gICAgLy8gUmV0dXJuIGEgJ2NsZWFuJyBhcnJheQotICAgIHRoaXMu
dG9BcnJheSgpIDoKLQotICAgIC8vIFJldHVybiBqdXN0IHRoZSBvYmplY3QKLSAgICAoIG51bSA8
IDAgPyB0aGlzWyB0aGlzLmxlbmd0aCArIG51bSBdIDogdGhpc1sgbnVtIF0gKTsKLSAgICB9LAot
Ci0gICAgLy8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBz
dGFjawotICAgIC8vIChyZXR1cm5pbmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KQotICAg
IHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zICkgewotCi0gICAgLy8gQnVpbGQgYSBuZXcgalF1
ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXQKLSAgICB2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlz
LmNvbnN0cnVjdG9yKCksIGVsZW1zICk7Ci0KLSAgICAvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250
byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNlKQotICAgIHJldC5wcmV2T2JqZWN0ID0gdGhpczsK
LSAgICByZXQuY29udGV4dCA9IHRoaXMuY29udGV4dDsKLQotICAgIC8vIFJldHVybiB0aGUgbmV3
bHktZm9ybWVkIGVsZW1lbnQgc2V0Ci0gICAgcmV0dXJuIHJldDsKLSAgICB9LAotCi0gICAgLy8g
RXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBldmVyeSBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNldC4K
LSAgICAvLyAoWW91IGNhbiBzZWVkIHRoZSBhcmd1bWVudHMgd2l0aCBhbiBhcnJheSBvZiBhcmdz
LCBidXQgdGhpcyBpcwotICAgIC8vIG9ubHkgdXNlZCBpbnRlcm5hbGx5LikKLSAgICBlYWNoOiBm
dW5jdGlvbiggY2FsbGJhY2ssIGFyZ3MgKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5lYWNoKCB0aGlz
LCBjYWxsYmFjaywgYXJncyApOwotICAgIH0sCi0KLSAgICByZWFkeTogZnVuY3Rpb24oIGZuICkg
ewotICAgIC8vIEFkZCB0aGUgY2FsbGJhY2sKLSAgICBqUXVlcnkucmVhZHkucHJvbWlzZSgpLmRv
bmUoIGZuICk7Ci0KLSAgICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0gICAgc2xpY2U6IGZ1bmN0
aW9uKCkgewotICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggY29yZV9zbGljZS5hcHBseSggdGhp
cywgYXJndW1lbnRzICkgKTsKLSAgICB9LAotCi0gICAgZmlyc3Q6IGZ1bmN0aW9uKCkgewotICAg
IHJldHVybiB0aGlzLmVxKCAwICk7Ci0gICAgfSwKLQotICAgIGxhc3Q6IGZ1bmN0aW9uKCkgewot
ICAgIHJldHVybiB0aGlzLmVxKCAtMSApOwotICAgIH0sCi0KLSAgICBlcTogZnVuY3Rpb24oIGkg
KSB7Ci0gICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoLAotICAgIGogPSAraSArICggaSA8IDAgPyBs
ZW4gOiAwICk7Ci0gICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqID49IDAgJiYgaiA8IGxlbiA/
IFsgdGhpc1tqXSBdIDogW10gKTsKLSAgICB9LAotCi0gICAgbWFwOiBmdW5jdGlvbiggY2FsbGJh
Y2sgKSB7Ci0gICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFwKHRoaXMsIGZ1bmN0
aW9uKCBlbGVtLCBpICkgewotICAgIHJldHVybiBjYWxsYmFjay5jYWxsKCBlbGVtLCBpLCBlbGVt
ICk7Ci0gICAgfSkpOwotICAgIH0sCi0KLSAgICBlbmQ6IGZ1bmN0aW9uKCkgewotICAgIHJldHVy
biB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcihudWxsKTsKLSAgICB9LAotCi0g
ICAgLy8gRm9yIGludGVybmFsIHVzZSBvbmx5LgotICAgIC8vIEJlaGF2ZXMgbGlrZSBhbiBBcnJh
eSdzIG1ldGhvZCwgbm90IGxpa2UgYSBqUXVlcnkgbWV0aG9kLgotICAgIHB1c2g6IGNvcmVfcHVz
aCwKLSAgICBzb3J0OiBbXS5zb3J0LAotICAgIHNwbGljZTogW10uc3BsaWNlCi19OwotCi0vLyBH
aXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkgcHJvdG90eXBlIGZvciBsYXRlciBpbnN0
YW50aWF0aW9uCi1qUXVlcnkuZm4uaW5pdC5wcm90b3R5cGUgPSBqUXVlcnkuZm47Ci0KLWpRdWVy
eS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHNyYywg
Y29weUlzQXJyYXksIGNvcHksIG5hbWUsIG9wdGlvbnMsIGNsb25lLAotICAgIHRhcmdldCA9IGFy
Z3VtZW50c1swXSB8fCB7fSwKLSAgICBpID0gMSwKLSAgICBsZW5ndGggPSBhcmd1bWVudHMubGVu
Z3RoLAotICAgIGRlZXAgPSBmYWxzZTsKLQotICAgIC8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1
YXRpb24KLSAgICBpZiAoIHR5cGVvZiB0YXJnZXQgPT09ICJib29sZWFuIiApIHsKLSAgICBkZWVw
ID0gdGFyZ2V0OwotICAgIHRhcmdldCA9IGFyZ3VtZW50c1sxXSB8fCB7fTsKLSAgICAvLyBza2lw
IHRoZSBib29sZWFuIGFuZCB0aGUgdGFyZ2V0Ci0gICAgaSA9IDI7Ci0gICAgfQotCi0gICAgLy8g
SGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRoaW5nIChwb3NzaWJs
ZSBpbiBkZWVwIGNvcHkpCi0gICAgaWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSAib2JqZWN0IiAmJiAh
alF1ZXJ5LmlzRnVuY3Rpb24odGFyZ2V0KSApIHsKLSAgICB0YXJnZXQgPSB7fTsKLSAgICB9Ci0K
LSAgICAvLyBleHRlbmQgalF1ZXJ5IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwYXNz
ZWQKLSAgICBpZiAoIGxlbmd0aCA9PT0gaSApIHsKLSAgICB0YXJnZXQgPSB0aGlzOwotICAgIC0t
aTsKLSAgICB9Ci0KLSAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKLSAgICAvLyBPbmx5
IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmluZWQgdmFsdWVzCi0gICAgaWYgKCAob3B0aW9ucyA9
IGFyZ3VtZW50c1sgaSBdKSAhPSBudWxsICkgewotICAgIC8vIEV4dGVuZCB0aGUgYmFzZSBvYmpl
Y3QKLSAgICBmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7Ci0gICAgc3JjID0gdGFyZ2V0WyBuYW1l
IF07Ci0gICAgY29weSA9IG9wdGlvbnNbIG5hbWUgXTsKLQotICAgIC8vIFByZXZlbnQgbmV2ZXIt
ZW5kaW5nIGxvb3AKLSAgICBpZiAoIHRhcmdldCA9PT0gY29weSApIHsKLSAgICBjb250aW51ZTsK
LSAgICB9Ci0KLSAgICAvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBv
ciBhcnJheXMKLSAgICBpZiAoIGRlZXAgJiYgY29weSAmJiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0
KGNvcHkpIHx8IChjb3B5SXNBcnJheSA9IGpRdWVyeS5pc0FycmF5KGNvcHkpKSApICkgewotICAg
IGlmICggY29weUlzQXJyYXkgKSB7Ci0gICAgY29weUlzQXJyYXkgPSBmYWxzZTsKLSAgICBjbG9u
ZSA9IHNyYyAmJiBqUXVlcnkuaXNBcnJheShzcmMpID8gc3JjIDogW107Ci0KLSAgICB9IGVsc2Ug
ewotICAgIGNsb25lID0gc3JjICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KHNyYykgPyBzcmMgOiB7
fTsKLSAgICB9Ci0KLSAgICAvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRo
ZW0KLSAgICB0YXJnZXRbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIGNsb25lLCBjb3B5
ICk7Ci0KLSAgICAvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzCi0gICAgfSBlbHNl
IGlmICggY29weSAhPT0gdW5kZWZpbmVkICkgewotICAgIHRhcmdldFsgbmFtZSBdID0gY29weTsK
LSAgICB9Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gdGhlIG1vZGlmaWVk
IG9iamVjdAotICAgIHJldHVybiB0YXJnZXQ7Ci19OwotCi1qUXVlcnkuZXh0ZW5kKHsKLSAgICBu
b0NvbmZsaWN0OiBmdW5jdGlvbiggZGVlcCApIHsKLSAgICBpZiAoIHdpbmRvdy4kID09PSBqUXVl
cnkgKSB7Ci0gICAgd2luZG93LiQgPSBfJDsKLSAgICB9Ci0KLSAgICBpZiAoIGRlZXAgJiYgd2lu
ZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkgewotICAgIHdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5Owot
ICAgIH0KLQotICAgIHJldHVybiBqUXVlcnk7Ci0gICAgfSwKLQotICAgIC8vIElzIHRoZSBET00g
cmVhZHkgdG8gYmUgdXNlZD8gU2V0IHRvIHRydWUgb25jZSBpdCBvY2N1cnMuCi0gICAgaXNSZWFk
eTogZmFsc2UsCi0KLSAgICAvLyBBIGNvdW50ZXIgdG8gdHJhY2sgaG93IG1hbnkgaXRlbXMgdG8g
d2FpdCBmb3IgYmVmb3JlCi0gICAgLy8gdGhlIHJlYWR5IGV2ZW50IGZpcmVzLiBTZWUgIzY3ODEK
LSAgICByZWFkeVdhaXQ6IDEsCi0KLSAgICAvLyBIb2xkIChvciByZWxlYXNlKSB0aGUgcmVhZHkg
ZXZlbnQKLSAgICBob2xkUmVhZHk6IGZ1bmN0aW9uKCBob2xkICkgewotICAgIGlmICggaG9sZCAp
IHsKLSAgICBqUXVlcnkucmVhZHlXYWl0Kys7Ci0gICAgfSBlbHNlIHsKLSAgICBqUXVlcnkucmVh
ZHkoIHRydWUgKTsKLSAgICB9Ci0gICAgfSwKLQotICAgIC8vIEhhbmRsZSB3aGVuIHRoZSBET00g
aXMgcmVhZHkKLSAgICByZWFkeTogZnVuY3Rpb24oIHdhaXQgKSB7Ci0KLSAgICAvLyBBYm9ydCBp
ZiB0aGVyZSBhcmUgcGVuZGluZyBob2xkcyBvciB3ZSdyZSBhbHJlYWR5IHJlYWR5Ci0gICAgaWYg
KCB3YWl0ID09PSB0cnVlID8gLS1qUXVlcnkucmVhZHlXYWl0IDogalF1ZXJ5LmlzUmVhZHkgKSB7
Ci0gICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIE1ha2Ugc3VyZSBib2R5IGV4aXN0cywgYXQg
bGVhc3QsIGluIGNhc2UgSUUgZ2V0cyBhIGxpdHRsZSBvdmVyemVhbG91cyAodGlja2V0ICM1NDQz
KS4KLSAgICBpZiAoICFkb2N1bWVudC5ib2R5ICkgewotICAgIHJldHVybiBzZXRUaW1lb3V0KCBq
UXVlcnkucmVhZHkgKTsKLSAgICB9Ci0KLSAgICAvLyBSZW1lbWJlciB0aGF0IHRoZSBET00gaXMg
cmVhZHkKLSAgICBqUXVlcnkuaXNSZWFkeSA9IHRydWU7Ci0KLSAgICAvLyBJZiBhIG5vcm1hbCBE
T00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwgYW5kIHdhaXQgaWYgbmVlZCBiZQotICAg
IGlmICggd2FpdCAhPT0gdHJ1ZSAmJiAtLWpRdWVyeS5yZWFkeVdhaXQgPiAwICkgewotICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBhcmUgZnVuY3Rpb25zIGJvdW5kLCB0byBl
eGVjdXRlCi0gICAgcmVhZHlMaXN0LnJlc29sdmVXaXRoKCBkb2N1bWVudCwgWyBqUXVlcnkgXSAp
OwotCi0gICAgLy8gVHJpZ2dlciBhbnkgYm91bmQgcmVhZHkgZXZlbnRzCi0gICAgaWYgKCBqUXVl
cnkuZm4udHJpZ2dlciApIHsKLSAgICBqUXVlcnkoIGRvY3VtZW50ICkudHJpZ2dlcigicmVhZHki
KS5vZmYoInJlYWR5Iik7Ci0gICAgfQotICAgIH0sCi0KLSAgICAvLyBTZWUgdGVzdC91bml0L2Nv
cmUuanMgZm9yIGRldGFpbHMgY29uY2VybmluZyBpc0Z1bmN0aW9uLgotICAgIC8vIFNpbmNlIHZl
cnNpb24gMS4zLCBET00gbWV0aG9kcyBhbmQgZnVuY3Rpb25zIGxpa2UgYWxlcnQKLSAgICAvLyBh
cmVuJ3Qgc3VwcG9ydGVkLiBUaGV5IHJldHVybiBmYWxzZSBvbiBJRSAoIzI5NjgpLgotICAgIGlz
RnVuY3Rpb246IGZ1bmN0aW9uKCBvYmogKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS50eXBlKG9iaikg
PT09ICJmdW5jdGlvbiI7Ci0gICAgfSwKLQotICAgIGlzQXJyYXk6IEFycmF5LmlzQXJyYXkgfHwg
ZnVuY3Rpb24oIG9iaiApIHsKLSAgICByZXR1cm4galF1ZXJ5LnR5cGUob2JqKSA9PT0gImFycmF5
IjsKLSAgICB9LAotCi0gICAgaXNXaW5kb3c6IGZ1bmN0aW9uKCBvYmogKSB7Ci0gICAgcmV0dXJu
IG9iaiAhPSBudWxsICYmIG9iaiA9PSBvYmoud2luZG93OwotICAgIH0sCi0KLSAgICBpc051bWVy
aWM6IGZ1bmN0aW9uKCBvYmogKSB7Ci0gICAgcmV0dXJuICFpc05hTiggcGFyc2VGbG9hdChvYmop
ICkgJiYgaXNGaW5pdGUoIG9iaiApOwotICAgIH0sCi0KLSAgICB0eXBlOiBmdW5jdGlvbiggb2Jq
ICkgewotICAgIGlmICggb2JqID09IG51bGwgKSB7Ci0gICAgcmV0dXJuIFN0cmluZyggb2JqICk7
Ci0gICAgfQotICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAib2JqZWN0IiB8fCB0eXBlb2Ygb2Jq
ID09PSAiZnVuY3Rpb24iID8KLSAgICBjbGFzczJ0eXBlWyBjb3JlX3RvU3RyaW5nLmNhbGwob2Jq
KSBdIHx8ICJvYmplY3QiIDoKLSAgICB0eXBlb2Ygb2JqOwotICAgIH0sCi0KLSAgICBpc1BsYWlu
T2JqZWN0OiBmdW5jdGlvbiggb2JqICkgewotICAgIC8vIE11c3QgYmUgYW4gT2JqZWN0LgotICAg
IC8vIEJlY2F1c2Ugb2YgSUUsIHdlIGFsc28gaGF2ZSB0byBjaGVjayB0aGUgcHJlc2VuY2Ugb2Yg
dGhlIGNvbnN0cnVjdG9yIHByb3BlcnR5LgotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IERPTSBub2Rl
cyBhbmQgd2luZG93IG9iamVjdHMgZG9uJ3QgcGFzcyB0aHJvdWdoLCBhcyB3ZWxsCi0gICAgaWYg
KCAhb2JqIHx8IGpRdWVyeS50eXBlKG9iaikgIT09ICJvYmplY3QiIHx8IG9iai5ub2RlVHlwZSB8
fCBqUXVlcnkuaXNXaW5kb3coIG9iaiApICkgewotICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICB0cnkgewotICAgIC8vIE5vdCBvd24gY29uc3RydWN0b3IgcHJvcGVydHkgbXVzdCBiZSBP
YmplY3QKLSAgICBpZiAoIG9iai5jb25zdHJ1Y3RvciAmJgotICAgICFjb3JlX2hhc093bi5jYWxs
KG9iaiwgImNvbnN0cnVjdG9yIikgJiYKLSAgICAhY29yZV9oYXNPd24uY2FsbChvYmouY29uc3Ry
dWN0b3IucHJvdG90eXBlLCAiaXNQcm90b3R5cGVPZiIpICkgewotICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgfSBjYXRjaCAoIGUgKSB7Ci0gICAgLy8gSUU4LDkgV2lsbCB0aHJvdyBleGNl
cHRpb25zIG9uIGNlcnRhaW4gaG9zdCBvYmplY3RzICM5ODk3Ci0gICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIC8vIE93biBwcm9wZXJ0aWVzIGFyZSBlbnVtZXJhdGVkIGZpcnN0bHksIHNv
IHRvIHNwZWVkIHVwLAotICAgIC8vIGlmIGxhc3Qgb25lIGlzIG93biwgdGhlbiBhbGwgcHJvcGVy
dGllcyBhcmUgb3duLgotCi0gICAgdmFyIGtleTsKLSAgICBmb3IgKCBrZXkgaW4gb2JqICkge30K
LQotICAgIHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCB8fCBjb3JlX2hhc093bi5jYWxsKCBvYmos
IGtleSApOwotICAgIH0sCi0KLSAgICBpc0VtcHR5T2JqZWN0OiBmdW5jdGlvbiggb2JqICkgewot
ICAgIHZhciBuYW1lOwotICAgIGZvciAoIG5hbWUgaW4gb2JqICkgewotICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIGVycm9yOiBmdW5jdGlv
biggbXNnICkgewotICAgIHRocm93IG5ldyBFcnJvciggbXNnICk7Ci0gICAgfSwKLQotICAgIC8v
IGRhdGE6IHN0cmluZyBvZiBodG1sCi0gICAgLy8gY29udGV4dCAob3B0aW9uYWwpOiBJZiBzcGVj
aWZpZWQsIHRoZSBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhpcyBjb250ZXh0LCBkZWZh
dWx0cyB0byBkb2N1bWVudAotICAgIC8vIGtlZXBTY3JpcHRzIChvcHRpb25hbCk6IElmIHRydWUs
IHdpbGwgaW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgaHRtbCBzdHJpbmcKLSAgICBwYXJz
ZUhUTUw6IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBrZWVwU2NyaXB0cyApIHsKLSAgICBpZiAo
ICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAic3RyaW5nIiApIHsKLSAgICByZXR1cm4gbnVsbDsK
LSAgICB9Ci0gICAgaWYgKCB0eXBlb2YgY29udGV4dCA9PT0gImJvb2xlYW4iICkgewotICAgIGtl
ZXBTY3JpcHRzID0gY29udGV4dDsKLSAgICBjb250ZXh0ID0gZmFsc2U7Ci0gICAgfQotICAgIGNv
bnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50OwotCi0gICAgdmFyIHBhcnNlZCA9IHJzaW5nbGVU
YWcuZXhlYyggZGF0YSApLAotICAgIHNjcmlwdHMgPSAha2VlcFNjcmlwdHMgJiYgW107Ci0KLSAg
ICAvLyBTaW5nbGUgdGFnCi0gICAgaWYgKCBwYXJzZWQgKSB7Ci0gICAgcmV0dXJuIFsgY29udGV4
dC5jcmVhdGVFbGVtZW50KCBwYXJzZWRbMV0gKSBdOwotICAgIH0KLQotICAgIHBhcnNlZCA9IGpR
dWVyeS5idWlsZEZyYWdtZW50KCBbIGRhdGEgXSwgY29udGV4dCwgc2NyaXB0cyApOwotICAgIGlm
ICggc2NyaXB0cyApIHsKLSAgICBqUXVlcnkoIHNjcmlwdHMgKS5yZW1vdmUoKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIHBhcnNlZC5jaGlsZE5vZGVzICk7Ci0gICAgfSwK
LQotICAgIHBhcnNlSlNPTjogZnVuY3Rpb24oIGRhdGEgKSB7Ci0gICAgLy8gQXR0ZW1wdCB0byBw
YXJzZSB1c2luZyB0aGUgbmF0aXZlIEpTT04gcGFyc2VyIGZpcnN0Ci0gICAgaWYgKCB3aW5kb3cu
SlNPTiAmJiB3aW5kb3cuSlNPTi5wYXJzZSApIHsKLSAgICByZXR1cm4gd2luZG93LkpTT04ucGFy
c2UoIGRhdGEgKTsKLSAgICB9Ci0KLSAgICBpZiAoIGRhdGEgPT09IG51bGwgKSB7Ci0gICAgcmV0
dXJuIGRhdGE7Ci0gICAgfQotCi0gICAgaWYgKCB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIgKSB7
Ci0KLSAgICAvLyBNYWtlIHN1cmUgbGVhZGluZy90cmFpbGluZyB3aGl0ZXNwYWNlIGlzIHJlbW92
ZWQgKElFIGNhbid0IGhhbmRsZSBpdCkKLSAgICBkYXRhID0galF1ZXJ5LnRyaW0oIGRhdGEgKTsK
LQotICAgIGlmICggZGF0YSApIHsKLSAgICAvLyBNYWtlIHN1cmUgdGhlIGluY29taW5nIGRhdGEg
aXMgYWN0dWFsIEpTT04KLSAgICAvLyBMb2dpYyBib3Jyb3dlZCBmcm9tIGh0dHA6Ly9qc29uLm9y
Zy9qc29uMi5qcwotICAgIGlmICggcnZhbGlkY2hhcnMudGVzdCggZGF0YS5yZXBsYWNlKCBydmFs
aWRlc2NhcGUsICJAIiApCi0gICAgLnJlcGxhY2UoIHJ2YWxpZHRva2VucywgIl0iICkKLSAgICAu
cmVwbGFjZSggcnZhbGlkYnJhY2VzLCAiIikpICkgewotCi0gICAgcmV0dXJuICggbmV3IEZ1bmN0
aW9uKCAicmV0dXJuICIgKyBkYXRhICkgKSgpOwotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAg
alF1ZXJ5LmVycm9yKCAiSW52YWxpZCBKU09OOiAiICsgZGF0YSApOwotICAgIH0sCi0KLSAgICAv
LyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nCi0gICAgcGFyc2VYTUw6IGZ1bmN0aW9uKCBkYXRh
ICkgewotICAgIHZhciB4bWwsIHRtcDsKLSAgICBpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9
PSAic3RyaW5nIiApIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgdHJ5IHsKLSAgICBp
ZiAoIHdpbmRvdy5ET01QYXJzZXIgKSB7IC8vIFN0YW5kYXJkCi0gICAgdG1wID0gbmV3IERPTVBh
cnNlcigpOwotICAgIHhtbCA9IHRtcC5wYXJzZUZyb21TdHJpbmcoIGRhdGEgLCAidGV4dC94bWwi
ICk7Ci0gICAgfSBlbHNlIHsgLy8gSUUKLSAgICB4bWwgPSBuZXcgQWN0aXZlWE9iamVjdCggIk1p
Y3Jvc29mdC5YTUxET00iICk7Ci0gICAgeG1sLmFzeW5jID0gImZhbHNlIjsKLSAgICB4bWwubG9h
ZFhNTCggZGF0YSApOwotICAgIH0KLSAgICB9IGNhdGNoKCBlICkgewotICAgIHhtbCA9IHVuZGVm
aW5lZDsKLSAgICB9Ci0gICAgaWYgKCAheG1sIHx8ICF4bWwuZG9jdW1lbnRFbGVtZW50IHx8IHht
bC5nZXRFbGVtZW50c0J5VGFnTmFtZSggInBhcnNlcmVycm9yIiApLmxlbmd0aCApIHsKLSAgICBq
UXVlcnkuZXJyb3IoICJJbnZhbGlkIFhNTDogIiArIGRhdGEgKTsKLSAgICB9Ci0gICAgcmV0dXJu
IHhtbDsKLSAgICB9LAotCi0gICAgbm9vcDogZnVuY3Rpb24oKSB7fSwKLQotICAgIC8vIEV2YWx1
YXRlcyBhIHNjcmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0Ci0gICAgLy8gV29ya2Fyb3VuZHMgYmFz
ZWQgb24gZmluZGluZ3MgYnkgSmltIERyaXNjb2xsCi0gICAgLy8gaHR0cDovL3dlYmxvZ3MuamF2
YS5uZXQvYmxvZy9kcmlzY29sbC9hcmNoaXZlLzIwMDkvMDkvMDgvZXZhbC1qYXZhc2NyaXB0LWds
b2JhbC1jb250ZXh0Ci0gICAgZ2xvYmFsRXZhbDogZnVuY3Rpb24oIGRhdGEgKSB7Ci0gICAgaWYg
KCBkYXRhICYmIGpRdWVyeS50cmltKCBkYXRhICkgKSB7Ci0gICAgLy8gV2UgdXNlIGV4ZWNTY3Jp
cHQgb24gSW50ZXJuZXQgRXhwbG9yZXIKLSAgICAvLyBXZSB1c2UgYW4gYW5vbnltb3VzIGZ1bmN0
aW9uIHNvIHRoYXQgY29udGV4dCBpcyB3aW5kb3cKLSAgICAvLyByYXRoZXIgdGhhbiBqUXVlcnkg
aW4gRmlyZWZveAotICAgICggd2luZG93LmV4ZWNTY3JpcHQgfHwgZnVuY3Rpb24oIGRhdGEgKSB7
Ci0gICAgd2luZG93WyAiZXZhbCIgXS5jYWxsKCB3aW5kb3csIGRhdGEgKTsKLSAgICB9ICkoIGRh
dGEgKTsKLSAgICB9Ci0gICAgfSwKLQotICAgIC8vIENvbnZlcnQgZGFzaGVkIHRvIGNhbWVsQ2Fz
ZTsgdXNlZCBieSB0aGUgY3NzIGFuZCBkYXRhIG1vZHVsZXMKLSAgICAvLyBNaWNyb3NvZnQgZm9y
Z290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAoIzk1NzIpCi0gICAgY2FtZWxDYXNlOiBm
dW5jdGlvbiggc3RyaW5nICkgewotICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSggcm1zUHJlZml4
LCAibXMtIiApLnJlcGxhY2UoIHJkYXNoQWxwaGEsIGZjYW1lbENhc2UgKTsKLSAgICB9LAotCi0g
ICAgbm9kZU5hbWU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewotICAgIHJldHVybiBlbGVtLm5v
ZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2Fz
ZSgpOwotICAgIH0sCi0KLSAgICAvLyBhcmdzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5Ci0g
ICAgZWFjaDogZnVuY3Rpb24oIG9iaiwgY2FsbGJhY2ssIGFyZ3MgKSB7Ci0gICAgdmFyIHZhbHVl
LAotICAgIGkgPSAwLAotICAgIGxlbmd0aCA9IG9iai5sZW5ndGgsCi0gICAgaXNBcnJheSA9IGlz
QXJyYXlsaWtlKCBvYmogKTsKLQotICAgIGlmICggYXJncyApIHsKLSAgICBpZiAoIGlzQXJyYXkg
KSB7Ci0gICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7Ci0gICAgdmFsdWUgPSBjYWxsYmFj
ay5hcHBseSggb2JqWyBpIF0sIGFyZ3MgKTsKLQotICAgIGlmICggdmFsdWUgPT09IGZhbHNlICkg
ewotICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICBmb3IgKCBpIGlu
IG9iaiApIHsKLSAgICB2YWx1ZSA9IGNhbGxiYWNrLmFwcGx5KCBvYmpbIGkgXSwgYXJncyApOwot
Ci0gICAgaWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7Ci0gICAgYnJlYWs7Ci0gICAgfQotICAgIH0K
LSAgICB9Ci0KLSAgICAvLyBBIHNwZWNpYWwsIGZhc3QsIGNhc2UgZm9yIHRoZSBtb3N0IGNvbW1v
biB1c2Ugb2YgZWFjaAotICAgIH0gZWxzZSB7Ci0gICAgaWYgKCBpc0FycmF5ICkgewotICAgIGZv
ciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgewotICAgIHZhbHVlID0gY2FsbGJhY2suY2FsbCggb2Jq
WyBpIF0sIGksIG9ialsgaSBdICk7Ci0KLSAgICBpZiAoIHZhbHVlID09PSBmYWxzZSApIHsKLSAg
ICBicmVhazsKLSAgICB9Ci0gICAgfQotICAgIH0gZWxzZSB7Ci0gICAgZm9yICggaSBpbiBvYmog
KSB7Ci0gICAgdmFsdWUgPSBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKTsK
LQotICAgIGlmICggdmFsdWUgPT09IGZhbHNlICkgewotICAgIGJyZWFrOwotICAgIH0KLSAgICB9
Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiBvYmo7Ci0gICAgfSwKLQotICAgIC8vIFVzZSBu
YXRpdmUgU3RyaW5nLnRyaW0gZnVuY3Rpb24gd2hlcmV2ZXIgcG9zc2libGUKLSAgICB0cmltOiBj
b3JlX3RyaW0gJiYgIWNvcmVfdHJpbS5jYWxsKCJcdUZFRkZceEEwIikgPwotICAgIGZ1bmN0aW9u
KCB0ZXh0ICkgewotICAgIHJldHVybiB0ZXh0ID09IG51bGwgPwotICAgICIiIDoKLSAgICBjb3Jl
X3RyaW0uY2FsbCggdGV4dCApOwotICAgIH0gOgotCi0gICAgLy8gT3RoZXJ3aXNlIHVzZSBvdXIg
b3duIHRyaW1taW5nIGZ1bmN0aW9uYWxpdHkKLSAgICBmdW5jdGlvbiggdGV4dCApIHsKLSAgICBy
ZXR1cm4gdGV4dCA9PSBudWxsID8KLSAgICAiIiA6Ci0gICAgKCB0ZXh0ICsgIiIgKS5yZXBsYWNl
KCBydHJpbSwgIiIgKTsKLSAgICB9LAotCi0gICAgLy8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwg
dXNhZ2Ugb25seQotICAgIG1ha2VBcnJheTogZnVuY3Rpb24oIGFyciwgcmVzdWx0cyApIHsKLSAg
ICB2YXIgcmV0ID0gcmVzdWx0cyB8fCBbXTsKLQotICAgIGlmICggYXJyICE9IG51bGwgKSB7Ci0g
ICAgaWYgKCBpc0FycmF5bGlrZSggT2JqZWN0KGFycikgKSApIHsKLSAgICBqUXVlcnkubWVyZ2Uo
IHJldCwKLSAgICB0eXBlb2YgYXJyID09PSAic3RyaW5nIiA/Ci0gICAgWyBhcnIgXSA6IGFycgot
ICAgICk7Ci0gICAgfSBlbHNlIHsKLSAgICBjb3JlX3B1c2guY2FsbCggcmV0LCBhcnIgKTsKLSAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsKLSAgICB9LAotCi0gICAgaW5BcnJheTogZnVu
Y3Rpb24oIGVsZW0sIGFyciwgaSApIHsKLSAgICB2YXIgbGVuOwotCi0gICAgaWYgKCBhcnIgKSB7
Ci0gICAgaWYgKCBjb3JlX2luZGV4T2YgKSB7Ci0gICAgcmV0dXJuIGNvcmVfaW5kZXhPZi5jYWxs
KCBhcnIsIGVsZW0sIGkgKTsKLSAgICB9Ci0KLSAgICBsZW4gPSBhcnIubGVuZ3RoOwotICAgIGkg
PSBpID8gaSA8IDAgPyBNYXRoLm1heCggMCwgbGVuICsgaSApIDogaSA6IDA7Ci0KLSAgICBmb3Ig
KCA7IGkgPCBsZW47IGkrKyApIHsKLSAgICAvLyBTa2lwIGFjY2Vzc2luZyBpbiBzcGFyc2UgYXJy
YXlzCi0gICAgaWYgKCBpIGluIGFyciAmJiBhcnJbIGkgXSA9PT0gZWxlbSApIHsKLSAgICByZXR1
cm4gaTsKLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiAtMTsKLSAgICB9LAotCi0g
ICAgbWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkgewotICAgIHZhciBsID0gc2Vjb25k
Lmxlbmd0aCwKLSAgICBpID0gZmlyc3QubGVuZ3RoLAotICAgIGogPSAwOwotCi0gICAgaWYgKCB0
eXBlb2YgbCA9PT0gIm51bWJlciIgKSB7Ci0gICAgZm9yICggOyBqIDwgbDsgaisrICkgewotICAg
IGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaiBdOwotICAgIH0KLSAgICB9IGVsc2UgewotICAgIHdo
aWxlICggc2Vjb25kW2pdICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgZmlyc3RbIGkrKyBdID0gc2Vj
b25kWyBqKysgXTsKLSAgICB9Ci0gICAgfQotCi0gICAgZmlyc3QubGVuZ3RoID0gaTsKLQotICAg
IHJldHVybiBmaXJzdDsKLSAgICB9LAotCi0gICAgZ3JlcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxs
YmFjaywgaW52ICkgewotICAgIHZhciByZXRWYWwsCi0gICAgcmV0ID0gW10sCi0gICAgaSA9IDAs
Ci0gICAgbGVuZ3RoID0gZWxlbXMubGVuZ3RoOwotICAgIGludiA9ICEhaW52OwotCi0gICAgLy8g
R28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtcwotICAgIC8vIHRoYXQg
cGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uCi0gICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysg
KSB7Ci0gICAgcmV0VmFsID0gISFjYWxsYmFjayggZWxlbXNbIGkgXSwgaSApOwotICAgIGlmICgg
aW52ICE9PSByZXRWYWwgKSB7Ci0gICAgcmV0LnB1c2goIGVsZW1zWyBpIF0gKTsKLSAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHJldDsKLSAgICB9LAotCi0gICAgLy8gYXJnIGlzIGZvciBpbnRl
cm5hbCB1c2FnZSBvbmx5Ci0gICAgbWFwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBhcmcg
KSB7Ci0gICAgdmFyIHZhbHVlLAotICAgIGkgPSAwLAotICAgIGxlbmd0aCA9IGVsZW1zLmxlbmd0
aCwKLSAgICBpc0FycmF5ID0gaXNBcnJheWxpa2UoIGVsZW1zICksCi0gICAgcmV0ID0gW107Ci0K
LSAgICAvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFjaCBvZiB0aGUgaXRl
bXMgdG8gdGhlaXIKLSAgICBpZiAoIGlzQXJyYXkgKSB7Ci0gICAgZm9yICggOyBpIDwgbGVuZ3Ro
OyBpKysgKSB7Ci0gICAgdmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7Ci0K
LSAgICBpZiAoIHZhbHVlICE9IG51bGwgKSB7Ci0gICAgcmV0WyByZXQubGVuZ3RoIF0gPSB2YWx1
ZTsKLSAgICB9Ci0gICAgfQotCi0gICAgLy8gR28gdGhyb3VnaCBldmVyeSBrZXkgb24gdGhlIG9i
amVjdCwKLSAgICB9IGVsc2UgewotICAgIGZvciAoIGkgaW4gZWxlbXMgKSB7Ci0gICAgdmFsdWUg
PSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7Ci0KLSAgICBpZiAoIHZhbHVlICE9IG51
bGwgKSB7Ci0gICAgcmV0WyByZXQubGVuZ3RoIF0gPSB2YWx1ZTsKLSAgICB9Ci0gICAgfQotICAg
IH0KLQotICAgIC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXMKLSAgICByZXR1cm4gY29yZV9j
b25jYXQuYXBwbHkoIFtdLCByZXQgKTsKLSAgICB9LAotCi0gICAgLy8gQSBnbG9iYWwgR1VJRCBj
b3VudGVyIGZvciBvYmplY3RzCi0gICAgZ3VpZDogMSwKLQotICAgIC8vIEJpbmQgYSBmdW5jdGlv
biB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFwcGx5aW5nIGFueQotICAgIC8v
IGFyZ3VtZW50cy4KLSAgICBwcm94eTogZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkgewotICAgIHZh
ciBhcmdzLCBwcm94eSwgdG1wOwotCi0gICAgaWYgKCB0eXBlb2YgY29udGV4dCA9PT0gInN0cmlu
ZyIgKSB7Ci0gICAgdG1wID0gZm5bIGNvbnRleHQgXTsKLSAgICBjb250ZXh0ID0gZm47Ci0gICAg
Zm4gPSB0bXA7Ci0gICAgfQotCi0gICAgLy8gUXVpY2sgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRh
cmdldCBpcyBjYWxsYWJsZSwgaW4gdGhlIHNwZWMKLSAgICAvLyB0aGlzIHRocm93cyBhIFR5cGVF
cnJvciwgYnV0IHdlIHdpbGwganVzdCByZXR1cm4gdW5kZWZpbmVkLgotICAgIGlmICggIWpRdWVy
eS5pc0Z1bmN0aW9uKCBmbiApICkgewotICAgIHJldHVybiB1bmRlZmluZWQ7Ci0gICAgfQotCi0g
ICAgLy8gU2ltdWxhdGVkIGJpbmQKLSAgICBhcmdzID0gY29yZV9zbGljZS5jYWxsKCBhcmd1bWVu
dHMsIDIgKTsKLSAgICBwcm94eSA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBmbi5hcHBseSgg
Y29udGV4dCB8fCB0aGlzLCBhcmdzLmNvbmNhdCggY29yZV9zbGljZS5jYWxsKCBhcmd1bWVudHMg
KSApICk7Ci0gICAgfTsKLQotICAgIC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0
byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZAotICAg
IHByb3h5Lmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrOwotCi0gICAg
cmV0dXJuIHByb3h5OwotICAgIH0sCi0KLSAgICAvLyBNdWx0aWZ1bmN0aW9uYWwgbWV0aG9kIHRv
IGdldCBhbmQgc2V0IHZhbHVlcyBvZiBhIGNvbGxlY3Rpb24KLSAgICAvLyBUaGUgdmFsdWUvcyBj
YW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBpdCdzIGEgZnVuY3Rpb24KLSAgICBhY2Nlc3M6
IGZ1bmN0aW9uKCBlbGVtcywgZm4sIGtleSwgdmFsdWUsIGNoYWluYWJsZSwgZW1wdHlHZXQsIHJh
dyApIHsKLSAgICB2YXIgaSA9IDAsCi0gICAgbGVuZ3RoID0gZWxlbXMubGVuZ3RoLAotICAgIGJ1
bGsgPSBrZXkgPT0gbnVsbDsKLQotICAgIC8vIFNldHMgbWFueSB2YWx1ZXMKLSAgICBpZiAoIGpR
dWVyeS50eXBlKCBrZXkgKSA9PT0gIm9iamVjdCIgKSB7Ci0gICAgY2hhaW5hYmxlID0gdHJ1ZTsK
LSAgICBmb3IgKCBpIGluIGtleSApIHsKLSAgICBqUXVlcnkuYWNjZXNzKCBlbGVtcywgZm4sIGks
IGtleVtpXSwgdHJ1ZSwgZW1wdHlHZXQsIHJhdyApOwotICAgIH0KLQotICAgIC8vIFNldHMgb25l
IHZhbHVlCi0gICAgfSBlbHNlIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKLSAgICBjaGFp
bmFibGUgPSB0cnVlOwotCi0gICAgaWYgKCAhalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7
Ci0gICAgcmF3ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIGJ1bGsgKSB7Ci0gICAgLy8gQnVs
ayBvcGVyYXRpb25zIHJ1biBhZ2FpbnN0IHRoZSBlbnRpcmUgc2V0Ci0gICAgaWYgKCByYXcgKSB7
Ci0gICAgZm4uY2FsbCggZWxlbXMsIHZhbHVlICk7Ci0gICAgZm4gPSBudWxsOwotCi0gICAgLy8g
Li4uZXhjZXB0IHdoZW4gZXhlY3V0aW5nIGZ1bmN0aW9uIHZhbHVlcwotICAgIH0gZWxzZSB7Ci0g
ICAgYnVsayA9IGZuOwotICAgIGZuID0gZnVuY3Rpb24oIGVsZW0sIGtleSwgdmFsdWUgKSB7Ci0g
ICAgcmV0dXJuIGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7Ci0gICAgfTsKLSAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKCBmbiApIHsKLSAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkr
KyApIHsKLSAgICBmbiggZWxlbXNbaV0sIGtleSwgcmF3ID8gdmFsdWUgOiB2YWx1ZS5jYWxsKCBl
bGVtc1tpXSwgaSwgZm4oIGVsZW1zW2ldLCBrZXkgKSApICk7Ci0gICAgfQotICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gY2hhaW5hYmxlID8KLSAgICBlbGVtcyA6Ci0KLSAgICAvLyBHZXRzCi0g
ICAgYnVsayA/Ci0gICAgZm4uY2FsbCggZWxlbXMgKSA6Ci0gICAgbGVuZ3RoID8gZm4oIGVsZW1z
WzBdLCBrZXkgKSA6IGVtcHR5R2V0OwotICAgIH0sCi0KLSAgICBub3c6IGZ1bmN0aW9uKCkgewot
ICAgIHJldHVybiAoIG5ldyBEYXRlKCkgKS5nZXRUaW1lKCk7Ci0gICAgfQotfSk7Ci0KLWpRdWVy
eS5yZWFkeS5wcm9taXNlID0gZnVuY3Rpb24oIG9iaiApIHsKLSAgICBpZiAoICFyZWFkeUxpc3Qg
KSB7Ci0KLSAgICByZWFkeUxpc3QgPSBqUXVlcnkuRGVmZXJyZWQoKTsKLQotICAgIC8vIENhdGNo
IGNhc2VzIHdoZXJlICQoZG9jdW1lbnQpLnJlYWR5KCkgaXMgY2FsbGVkIGFmdGVyIHRoZSBicm93
c2VyIGV2ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLgotICAgIC8vIHdlIG9uY2UgdHJpZWQgdG8g
dXNlIHJlYWR5U3RhdGUgImludGVyYWN0aXZlIiBoZXJlLCBidXQgaXQgY2F1c2VkIGlzc3VlcyBs
aWtlIHRoZSBvbmUKLSAgICAvLyBkaXNjb3ZlcmVkIGJ5IENocmlzUyBoZXJlOiBodHRwOi8vYnVn
cy5qcXVlcnkuY29tL3RpY2tldC8xMjI4MiNjb21tZW50OjE1Ci0gICAgaWYgKCBkb2N1bWVudC5y
ZWFkeVN0YXRlID09PSAiY29tcGxldGUiICkgewotICAgIC8vIEhhbmRsZSBpdCBhc3luY2hyb25v
dXNseSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1bml0eSB0byBkZWxheSByZWFkeQotICAg
IHNldFRpbWVvdXQoIGpRdWVyeS5yZWFkeSApOwotCi0gICAgLy8gU3RhbmRhcmRzLWJhc2VkIGJy
b3dzZXJzIHN1cHBvcnQgRE9NQ29udGVudExvYWRlZAotICAgIH0gZWxzZSBpZiAoIGRvY3VtZW50
LmFkZEV2ZW50TGlzdGVuZXIgKSB7Ci0gICAgLy8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFj
awotICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICJET01Db250ZW50TG9hZGVkIiwgY29t
cGxldGVkLCBmYWxzZSApOwotCi0gICAgLy8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0
aGF0IHdpbGwgYWx3YXlzIHdvcmsKLSAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggImxvYWQi
LCBjb21wbGV0ZWQsIGZhbHNlICk7Ci0KLSAgICAvLyBJZiBJRSBldmVudCBtb2RlbCBpcyB1c2Vk
Ci0gICAgfSBlbHNlIHsKLSAgICAvLyBFbnN1cmUgZmlyaW5nIGJlZm9yZSBvbmxvYWQsIG1heWJl
IGxhdGUgYnV0IHNhZmUgYWxzbyBmb3IgaWZyYW1lcwotICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50
KCAib25yZWFkeXN0YXRlY2hhbmdlIiwgY29tcGxldGVkICk7Ci0KLSAgICAvLyBBIGZhbGxiYWNr
IHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdheXMgd29yawotICAgIHdpbmRvdy5hdHRh
Y2hFdmVudCggIm9ubG9hZCIsIGNvbXBsZXRlZCApOwotCi0gICAgLy8gSWYgSUUgYW5kIG5vdCBh
IGZyYW1lCi0gICAgLy8gY29udGludWFsbHkgY2hlY2sgdG8gc2VlIGlmIHRoZSBkb2N1bWVudCBp
cyByZWFkeQotICAgIHZhciB0b3AgPSBmYWxzZTsKLQotICAgIHRyeSB7Ci0gICAgdG9wID0gd2lu
ZG93LmZyYW1lRWxlbWVudCA9PSBudWxsICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKLSAg
ICB9IGNhdGNoKGUpIHt9Ci0KLSAgICBpZiAoIHRvcCAmJiB0b3AuZG9TY3JvbGwgKSB7Ci0gICAg
KGZ1bmN0aW9uIGRvU2Nyb2xsQ2hlY2soKSB7Ci0gICAgaWYgKCAhalF1ZXJ5LmlzUmVhZHkgKSB7
Ci0KLSAgICB0cnkgewotICAgIC8vIFVzZSB0aGUgdHJpY2sgYnkgRGllZ28gUGVyaW5pCi0gICAg
Ly8gaHR0cDovL2phdmFzY3JpcHQubndib3guY29tL0lFQ29udGVudExvYWRlZC8KLSAgICB0b3Au
ZG9TY3JvbGwoImxlZnQiKTsKLSAgICB9IGNhdGNoKGUpIHsKLSAgICByZXR1cm4gc2V0VGltZW91
dCggZG9TY3JvbGxDaGVjaywgNTAgKTsKLSAgICB9Ci0KLSAgICAvLyBkZXRhY2ggYWxsIGRvbSBy
ZWFkeSBldmVudHMKLSAgICBkZXRhY2goKTsKLQotICAgIC8vIGFuZCBleGVjdXRlIGFueSB3YWl0
aW5nIGZ1bmN0aW9ucwotICAgIGpRdWVyeS5yZWFkeSgpOwotICAgIH0KLSAgICB9KSgpOwotICAg
IH0KLSAgICB9Ci0gICAgfQotICAgIHJldHVybiByZWFkeUxpc3QucHJvbWlzZSggb2JqICk7Ci19
OwotCi0vLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXAKLWpRdWVyeS5lYWNoKCJCb29sZWFu
IE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIi5z
cGxpdCgiICIpLCBmdW5jdGlvbihpLCBuYW1lKSB7Ci0gICAgY2xhc3MydHlwZVsgIltvYmplY3Qg
IiArIG5hbWUgKyAiXSIgXSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKLX0pOwotCi1mdW5jdGlvbiBp
c0FycmF5bGlrZSggb2JqICkgewotICAgIHZhciBsZW5ndGggPSBvYmoubGVuZ3RoLAotICAgIHR5
cGUgPSBqUXVlcnkudHlwZSggb2JqICk7Ci0KLSAgICBpZiAoIGpRdWVyeS5pc1dpbmRvdyggb2Jq
ICkgKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICggb2JqLm5vZGVUeXBl
ID09PSAxICYmIGxlbmd0aCApIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdHlwZSA9PT0gImFycmF5IiB8fCB0eXBlICE9PSAiZnVuY3Rpb24iICYmCi0gICAgKCBsZW5n
dGggPT09IDAgfHwKLSAgICB0eXBlb2YgbGVuZ3RoID09PSAibnVtYmVyIiAmJiBsZW5ndGggPiAw
ICYmICggbGVuZ3RoIC0gMSApIGluIG9iaiApOwotfQotCi0vLyBBbGwgalF1ZXJ5IG9iamVjdHMg
c2hvdWxkIHBvaW50IGJhY2sgdG8gdGhlc2UKLXJvb3RqUXVlcnkgPSBqUXVlcnkoZG9jdW1lbnQp
OwotLy8gU3RyaW5nIHRvIE9iamVjdCBvcHRpb25zIGZvcm1hdCBjYWNoZQotdmFyIG9wdGlvbnND
YWNoZSA9IHt9OwotCi0vLyBDb252ZXJ0IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9i
amVjdC1mb3JtYXR0ZWQgb25lcyBhbmQgc3RvcmUgaW4gY2FjaGUKLWZ1bmN0aW9uIGNyZWF0ZU9w
dGlvbnMoIG9wdGlvbnMgKSB7Ci0gICAgdmFyIG9iamVjdCA9IG9wdGlvbnNDYWNoZVsgb3B0aW9u
cyBdID0ge307Ci0gICAgalF1ZXJ5LmVhY2goIG9wdGlvbnMubWF0Y2goIGNvcmVfcm5vdHdoaXRl
ICkgfHwgW10sIGZ1bmN0aW9uKCBfLCBmbGFnICkgewotICAgIG9iamVjdFsgZmxhZyBdID0gdHJ1
ZTsKLSAgICB9KTsKLSAgICByZXR1cm4gb2JqZWN0OwotfQotCi0vKgotICogQ3JlYXRlIGEgY2Fs
bGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6Ci0gKgotICogICAgb3B0
aW9uczogYW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgb3B0aW9ucyB0aGF0IHdp
bGwgY2hhbmdlIGhvdwotICogICAgICAgICAgICB0aGUgY2FsbGJhY2sgbGlzdCBiZWhhdmVzIG9y
IGEgbW9yZSB0cmFkaXRpb25hbCBvcHRpb24gb2JqZWN0Ci0gKgotICogQnkgZGVmYXVsdCBhIGNh
bGxiYWNrIGxpc3Qgd2lsbCBhY3QgbGlrZSBhbiBldmVudCBjYWxsYmFjayBsaXN0IGFuZCBjYW4g
YmUKLSAqICJmaXJlZCIgbXVsdGlwbGUgdGltZXMuCi0gKgotICogUG9zc2libGUgb3B0aW9uczoK
LSAqCi0gKiAgICBvbmNlOiAgICAgICAgICAgIHdpbGwgZW5zdXJlIHRoZSBjYWxsYmFjayBsaXN0
IGNhbiBvbmx5IGJlIGZpcmVkIG9uY2UgKGxpa2UgYSBEZWZlcnJlZCkKLSAqCi0gKiAgICBtZW1v
cnk6ICAgICAgICAgICAgd2lsbCBrZWVwIHRyYWNrIG9mIHByZXZpb3VzIHZhbHVlcyBhbmQgd2ls
bCBjYWxsIGFueSBjYWxsYmFjayBhZGRlZAotICogICAgICAgICAgICAgICAgICAgIGFmdGVyIHRo
ZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJpZ2h0IGF3YXkgd2l0aCB0aGUgbGF0ZXN0ICJtZW1vcml6
ZWQiCi0gKiAgICAgICAgICAgICAgICAgICAgdmFsdWVzIChsaWtlIGEgRGVmZXJyZWQpCi0gKgot
ICogICAgdW5pcXVlOiAgICAgICAgICAgIHdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9ubHkg
YmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KQotICoKLSAqICAgIHN0b3BP
bkZhbHNlOiAgICBpbnRlcnJ1cHQgY2FsbGluZ3Mgd2hlbiBhIGNhbGxiYWNrIHJldHVybnMgZmFs
c2UKLSAqCi0gKi8KLWpRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbiggb3B0aW9ucyApIHsKLQot
ICAgIC8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0ZWQgdG8gT2JqZWN0LWZv
cm1hdHRlZCBpZiBuZWVkZWQKLSAgICAvLyAod2UgY2hlY2sgaW4gY2FjaGUgZmlyc3QpCi0gICAg
b3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zID09PSAic3RyaW5nIiA/Ci0gICAgKCBvcHRpb25zQ2Fj
aGVbIG9wdGlvbnMgXSB8fCBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkgKSA6Ci0gICAgalF1ZXJ5
LmV4dGVuZCgge30sIG9wdGlvbnMgKTsKLQotICAgIHZhciAvLyBGbGFnIHRvIGtub3cgaWYgbGlz
dCBpcyBjdXJyZW50bHkgZmlyaW5nCi0gICAgZmlyaW5nLAotICAgIC8vIExhc3QgZmlyZSB2YWx1
ZSAoZm9yIG5vbi1mb3JnZXR0YWJsZSBsaXN0cykKLSAgICBtZW1vcnksCi0gICAgLy8gRmxhZyB0
byBrbm93IGlmIGxpc3Qgd2FzIGFscmVhZHkgZmlyZWQKLSAgICBmaXJlZCwKLSAgICAvLyBFbmQg
b2YgdGhlIGxvb3Agd2hlbiBmaXJpbmcKLSAgICBmaXJpbmdMZW5ndGgsCi0gICAgLy8gSW5kZXgg
b2YgY3VycmVudGx5IGZpcmluZyBjYWxsYmFjayAobW9kaWZpZWQgYnkgcmVtb3ZlIGlmIG5lZWRl
ZCkKLSAgICBmaXJpbmdJbmRleCwKLSAgICAvLyBGaXJzdCBjYWxsYmFjayB0byBmaXJlICh1c2Vk
IGludGVybmFsbHkgYnkgYWRkIGFuZCBmaXJlV2l0aCkKLSAgICBmaXJpbmdTdGFydCwKLSAgICAv
LyBBY3R1YWwgY2FsbGJhY2sgbGlzdAotICAgIGxpc3QgPSBbXSwKLSAgICAvLyBTdGFjayBvZiBm
aXJlIGNhbGxzIGZvciByZXBlYXRhYmxlIGxpc3RzCi0gICAgc3RhY2sgPSAhb3B0aW9ucy5vbmNl
ICYmIFtdLAotICAgIC8vIEZpcmUgY2FsbGJhY2tzCi0gICAgZmlyZSA9IGZ1bmN0aW9uKCBkYXRh
ICkgewotICAgIG1lbW9yeSA9IG9wdGlvbnMubWVtb3J5ICYmIGRhdGE7Ci0gICAgZmlyZWQgPSB0
cnVlOwotICAgIGZpcmluZ0luZGV4ID0gZmlyaW5nU3RhcnQgfHwgMDsKLSAgICBmaXJpbmdTdGFy
dCA9IDA7Ci0gICAgZmlyaW5nTGVuZ3RoID0gbGlzdC5sZW5ndGg7Ci0gICAgZmlyaW5nID0gdHJ1
ZTsKLSAgICBmb3IgKCA7IGxpc3QgJiYgZmlyaW5nSW5kZXggPCBmaXJpbmdMZW5ndGg7IGZpcmlu
Z0luZGV4KysgKSB7Ci0gICAgaWYgKCBsaXN0WyBmaXJpbmdJbmRleCBdLmFwcGx5KCBkYXRhWyAw
IF0sIGRhdGFbIDEgXSApID09PSBmYWxzZSAmJiBvcHRpb25zLnN0b3BPbkZhbHNlICkgewotICAg
IG1lbW9yeSA9IGZhbHNlOyAvLyBUbyBwcmV2ZW50IGZ1cnRoZXIgY2FsbHMgdXNpbmcgYWRkCi0g
ICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLSAgICBmaXJpbmcgPSBmYWxzZTsKLSAgICBpZiAoIGxp
c3QgKSB7Ci0gICAgaWYgKCBzdGFjayApIHsKLSAgICBpZiAoIHN0YWNrLmxlbmd0aCApIHsKLSAg
ICBmaXJlKCBzdGFjay5zaGlmdCgpICk7Ci0gICAgfQotICAgIH0gZWxzZSBpZiAoIG1lbW9yeSAp
IHsKLSAgICBsaXN0ID0gW107Ci0gICAgfSBlbHNlIHsKLSAgICBzZWxmLmRpc2FibGUoKTsKLSAg
ICB9Ci0gICAgfQotICAgIH0sCi0gICAgLy8gQWN0dWFsIENhbGxiYWNrcyBvYmplY3QKLSAgICBz
ZWxmID0gewotICAgIC8vIEFkZCBhIGNhbGxiYWNrIG9yIGEgY29sbGVjdGlvbiBvZiBjYWxsYmFj
a3MgdG8gdGhlIGxpc3QKLSAgICBhZGQ6IGZ1bmN0aW9uKCkgewotICAgIGlmICggbGlzdCApIHsK
LSAgICAvLyBGaXJzdCwgd2Ugc2F2ZSB0aGUgY3VycmVudCBsZW5ndGgKLSAgICB2YXIgc3RhcnQg
PSBsaXN0Lmxlbmd0aDsKLSAgICAoZnVuY3Rpb24gYWRkKCBhcmdzICkgewotICAgIGpRdWVyeS5l
YWNoKCBhcmdzLCBmdW5jdGlvbiggXywgYXJnICkgewotICAgIHZhciB0eXBlID0galF1ZXJ5LnR5
cGUoIGFyZyApOwotICAgIGlmICggdHlwZSA9PT0gImZ1bmN0aW9uIiApIHsKLSAgICBpZiAoICFv
cHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkgewotICAgIGxpc3QucHVzaCggYXJn
ICk7Ci0gICAgfQotICAgIH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIHR5cGUgIT09
ICJzdHJpbmciICkgewotICAgIC8vIEluc3BlY3QgcmVjdXJzaXZlbHkKLSAgICBhZGQoIGFyZyAp
OwotICAgIH0KLSAgICB9KTsKLSAgICB9KSggYXJndW1lbnRzICk7Ci0gICAgLy8gRG8gd2UgbmVl
ZCB0byBhZGQgdGhlIGNhbGxiYWNrcyB0byB0aGUKLSAgICAvLyBjdXJyZW50IGZpcmluZyBiYXRj
aD8KLSAgICBpZiAoIGZpcmluZyApIHsKLSAgICBmaXJpbmdMZW5ndGggPSBsaXN0Lmxlbmd0aDsK
LSAgICAvLyBXaXRoIG1lbW9yeSwgaWYgd2UncmUgbm90IGZpcmluZyB0aGVuCi0gICAgLy8gd2Ug
c2hvdWxkIGNhbGwgcmlnaHQgYXdheQotICAgIH0gZWxzZSBpZiAoIG1lbW9yeSApIHsKLSAgICBm
aXJpbmdTdGFydCA9IHN0YXJ0OwotICAgIGZpcmUoIG1lbW9yeSApOwotICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLSAgICAvLyBSZW1vdmUgYSBjYWxsYmFjayBmcm9tIHRo
ZSBsaXN0Ci0gICAgcmVtb3ZlOiBmdW5jdGlvbigpIHsKLSAgICBpZiAoIGxpc3QgKSB7Ci0gICAg
alF1ZXJ5LmVhY2goIGFyZ3VtZW50cywgZnVuY3Rpb24oIF8sIGFyZyApIHsKLSAgICB2YXIgaW5k
ZXg7Ci0gICAgd2hpbGUoICggaW5kZXggPSBqUXVlcnkuaW5BcnJheSggYXJnLCBsaXN0LCBpbmRl
eCApICkgPiAtMSApIHsKLSAgICBsaXN0LnNwbGljZSggaW5kZXgsIDEgKTsKLSAgICAvLyBIYW5k
bGUgZmlyaW5nIGluZGV4ZXMKLSAgICBpZiAoIGZpcmluZyApIHsKLSAgICBpZiAoIGluZGV4IDw9
IGZpcmluZ0xlbmd0aCApIHsKLSAgICBmaXJpbmdMZW5ndGgtLTsKLSAgICB9Ci0gICAgaWYgKCBp
bmRleCA8PSBmaXJpbmdJbmRleCApIHsKLSAgICBmaXJpbmdJbmRleC0tOwotICAgIH0KLSAgICB9
Ci0gICAgfQotICAgIH0pOwotICAgIH0KLSAgICByZXR1cm4gdGhpczsKLSAgICB9LAotICAgIC8v
IENoZWNrIGlmIGEgZ2l2ZW4gY2FsbGJhY2sgaXMgaW4gdGhlIGxpc3QuCi0gICAgLy8gSWYgbm8g
YXJndW1lbnQgaXMgZ2l2ZW4sIHJldHVybiB3aGV0aGVyIG9yIG5vdCBsaXN0IGhhcyBjYWxsYmFj
a3MgYXR0YWNoZWQuCi0gICAgaGFzOiBmdW5jdGlvbiggZm4gKSB7Ci0gICAgcmV0dXJuIGZuID8g
alF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMSA6ICEhKCBsaXN0ICYmIGxpc3QubGVuZ3Ro
ICk7Ci0gICAgfSwKLSAgICAvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0Ci0g
ICAgZW1wdHk6IGZ1bmN0aW9uKCkgewotICAgIGxpc3QgPSBbXTsKLSAgICByZXR1cm4gdGhpczsK
LSAgICB9LAotICAgIC8vIEhhdmUgdGhlIGxpc3QgZG8gbm90aGluZyBhbnltb3JlCi0gICAgZGlz
YWJsZTogZnVuY3Rpb24oKSB7Ci0gICAgbGlzdCA9IHN0YWNrID0gbWVtb3J5ID0gdW5kZWZpbmVk
OwotICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0gICAgLy8gSXMgaXQgZGlzYWJsZWQ/Ci0gICAg
ZGlzYWJsZWQ6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiAhbGlzdDsKLSAgICB9LAotICAgIC8v
IExvY2sgdGhlIGxpc3QgaW4gaXRzIGN1cnJlbnQgc3RhdGUKLSAgICBsb2NrOiBmdW5jdGlvbigp
IHsKLSAgICBzdGFjayA9IHVuZGVmaW5lZDsKLSAgICBpZiAoICFtZW1vcnkgKSB7Ci0gICAgc2Vs
Zi5kaXNhYmxlKCk7Ci0gICAgfQotICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0gICAgLy8gSXMg
aXQgbG9ja2VkPwotICAgIGxvY2tlZDogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuICFzdGFjazsK
LSAgICB9LAotICAgIC8vIENhbGwgYWxsIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBjb250ZXh0
IGFuZCBhcmd1bWVudHMKLSAgICBmaXJlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7
Ci0gICAgYXJncyA9IGFyZ3MgfHwgW107Ci0gICAgYXJncyA9IFsgY29udGV4dCwgYXJncy5zbGlj
ZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTsKLSAgICBpZiAoIGxpc3QgJiYgKCAhZmlyZWQgfHwg
c3RhY2sgKSApIHsKLSAgICBpZiAoIGZpcmluZyApIHsKLSAgICBzdGFjay5wdXNoKCBhcmdzICk7
Ci0gICAgfSBlbHNlIHsKLSAgICBmaXJlKCBhcmdzICk7Ci0gICAgfQotICAgIH0KLSAgICByZXR1
cm4gdGhpczsKLSAgICB9LAotICAgIC8vIENhbGwgYWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUg
Z2l2ZW4gYXJndW1lbnRzCi0gICAgZmlyZTogZnVuY3Rpb24oKSB7Ci0gICAgc2VsZi5maXJlV2l0
aCggdGhpcywgYXJndW1lbnRzICk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLSAgICAvLyBU
byBrbm93IGlmIHRoZSBjYWxsYmFja3MgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkIGF0IGxlYXN0
IG9uY2UKLSAgICBmaXJlZDogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuICEhZmlyZWQ7Ci0gICAg
fQotICAgIH07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX07Ci1qUXVlcnkuZXh0ZW5kKHsKLQotICAg
IERlZmVycmVkOiBmdW5jdGlvbiggZnVuYyApIHsKLSAgICB2YXIgdHVwbGVzID0gWwotICAgIC8v
IGFjdGlvbiwgYWRkIGxpc3RlbmVyLCBsaXN0ZW5lciBsaXN0LCBmaW5hbCBzdGF0ZQotICAgIFsg
InJlc29sdmUiLCAiZG9uZSIsIGpRdWVyeS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksICJyZXNv
bHZlZCIgXSwKLSAgICBbICJyZWplY3QiLCAiZmFpbCIsIGpRdWVyeS5DYWxsYmFja3MoIm9uY2Ug
bWVtb3J5IiksICJyZWplY3RlZCIgXSwKLSAgICBbICJub3RpZnkiLCAicHJvZ3Jlc3MiLCBqUXVl
cnkuQ2FsbGJhY2tzKCJtZW1vcnkiKSBdCi0gICAgXSwKLSAgICBzdGF0ZSA9ICJwZW5kaW5nIiwK
LSAgICBwcm9taXNlID0gewotICAgIHN0YXRlOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gc3Rh
dGU7Ci0gICAgfSwKLSAgICBhbHdheXM6IGZ1bmN0aW9uKCkgewotICAgIGRlZmVycmVkLmRvbmUo
IGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApOwotICAgIHJldHVybiB0aGlzOwotICAgIH0s
Ci0gICAgdGhlbjogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkg
ewotICAgIHZhciBmbnMgPSBhcmd1bWVudHM7Ci0gICAgcmV0dXJuIGpRdWVyeS5EZWZlcnJlZChm
dW5jdGlvbiggbmV3RGVmZXIgKSB7Ci0gICAgalF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24o
IGksIHR1cGxlICkgewotICAgIHZhciBhY3Rpb24gPSB0dXBsZVsgMCBdLAotICAgIGZuID0galF1
ZXJ5LmlzRnVuY3Rpb24oIGZuc1sgaSBdICkgJiYgZm5zWyBpIF07Ci0gICAgLy8gZGVmZXJyZWRb
IGRvbmUgfCBmYWlsIHwgcHJvZ3Jlc3MgXSBmb3IgZm9yd2FyZGluZyBhY3Rpb25zIHRvIG5ld0Rl
ZmVyCi0gICAgZGVmZXJyZWRbIHR1cGxlWzFdIF0oZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHJldHVy
bmVkID0gZm4gJiYgZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwotICAgIGlmICggcmV0dXJu
ZWQgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHJldHVybmVkLnByb21pc2UgKSApIHsKLSAgICByZXR1
cm5lZC5wcm9taXNlKCkKLSAgICAuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApCi0gICAgLmZhaWwo
IG5ld0RlZmVyLnJlamVjdCApCi0gICAgLnByb2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKTsKLSAg
ICB9IGVsc2UgewotICAgIG5ld0RlZmVyWyBhY3Rpb24gKyAiV2l0aCIgXSggdGhpcyA9PT0gcHJv
bWlzZSA/IG5ld0RlZmVyLnByb21pc2UoKSA6IHRoaXMsIGZuID8gWyByZXR1cm5lZCBdIDogYXJn
dW1lbnRzICk7Ci0gICAgfQotICAgIH0pOwotICAgIH0pOwotICAgIGZucyA9IG51bGw7Ci0gICAg
fSkucHJvbWlzZSgpOwotICAgIH0sCi0gICAgLy8gR2V0IGEgcHJvbWlzZSBmb3IgdGhpcyBkZWZl
cnJlZAotICAgIC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFk
ZGVkIHRvIHRoZSBvYmplY3QKLSAgICBwcm9taXNlOiBmdW5jdGlvbiggb2JqICkgewotICAgIHJl
dHVybiBvYmogIT0gbnVsbCA/IGpRdWVyeS5leHRlbmQoIG9iaiwgcHJvbWlzZSApIDogcHJvbWlz
ZTsKLSAgICB9Ci0gICAgfSwKLSAgICBkZWZlcnJlZCA9IHt9OwotCi0gICAgLy8gS2VlcCBwaXBl
IGZvciBiYWNrLWNvbXBhdAotICAgIHByb21pc2UucGlwZSA9IHByb21pc2UudGhlbjsKLQotICAg
IC8vIEFkZCBsaXN0LXNwZWNpZmljIG1ldGhvZHMKLSAgICBqUXVlcnkuZWFjaCggdHVwbGVzLCBm
dW5jdGlvbiggaSwgdHVwbGUgKSB7Ci0gICAgdmFyIGxpc3QgPSB0dXBsZVsgMiBdLAotICAgIHN0
YXRlU3RyaW5nID0gdHVwbGVbIDMgXTsKLQotICAgIC8vIHByb21pc2VbIGRvbmUgfCBmYWlsIHwg
cHJvZ3Jlc3MgXSA9IGxpc3QuYWRkCi0gICAgcHJvbWlzZVsgdHVwbGVbMV0gXSA9IGxpc3QuYWRk
OwotCi0gICAgLy8gSGFuZGxlIHN0YXRlCi0gICAgaWYgKCBzdGF0ZVN0cmluZyApIHsKLSAgICBs
aXN0LmFkZChmdW5jdGlvbigpIHsKLSAgICAvLyBzdGF0ZSA9IFsgcmVzb2x2ZWQgfCByZWplY3Rl
ZCBdCi0gICAgc3RhdGUgPSBzdGF0ZVN0cmluZzsKLQotICAgIC8vIFsgcmVqZWN0X2xpc3QgfCBy
ZXNvbHZlX2xpc3QgXS5kaXNhYmxlOyBwcm9ncmVzc19saXN0LmxvY2sKLSAgICB9LCB0dXBsZXNb
IGkgXiAxIF1bIDIgXS5kaXNhYmxlLCB0dXBsZXNbIDIgXVsgMiBdLmxvY2sgKTsKLSAgICB9Ci0K
LSAgICAvLyBkZWZlcnJlZFsgcmVzb2x2ZSB8IHJlamVjdCB8IG5vdGlmeSBdCi0gICAgZGVmZXJy
ZWRbIHR1cGxlWzBdIF0gPSBmdW5jdGlvbigpIHsKLSAgICBkZWZlcnJlZFsgdHVwbGVbMF0gKyAi
V2l0aCIgXSggdGhpcyA9PT0gZGVmZXJyZWQgPyBwcm9taXNlIDogdGhpcywgYXJndW1lbnRzICk7
Ci0gICAgcmV0dXJuIHRoaXM7Ci0gICAgfTsKLSAgICBkZWZlcnJlZFsgdHVwbGVbMF0gKyAiV2l0
aCIgXSA9IGxpc3QuZmlyZVdpdGg7Ci0gICAgfSk7Ci0KLSAgICAvLyBNYWtlIHRoZSBkZWZlcnJl
ZCBhIHByb21pc2UKLSAgICBwcm9taXNlLnByb21pc2UoIGRlZmVycmVkICk7Ci0KLSAgICAvLyBD
YWxsIGdpdmVuIGZ1bmMgaWYgYW55Ci0gICAgaWYgKCBmdW5jICkgewotICAgIGZ1bmMuY2FsbCgg
ZGVmZXJyZWQsIGRlZmVycmVkICk7Ci0gICAgfQotCi0gICAgLy8gQWxsIGRvbmUhCi0gICAgcmV0
dXJuIGRlZmVycmVkOwotICAgIH0sCi0KLSAgICAvLyBEZWZlcnJlZCBoZWxwZXIKLSAgICB3aGVu
OiBmdW5jdGlvbiggc3Vib3JkaW5hdGUgLyogLCAuLi4sIHN1Ym9yZGluYXRlTiAqLyApIHsKLSAg
ICB2YXIgaSA9IDAsCi0gICAgcmVzb2x2ZVZhbHVlcyA9IGNvcmVfc2xpY2UuY2FsbCggYXJndW1l
bnRzICksCi0gICAgbGVuZ3RoID0gcmVzb2x2ZVZhbHVlcy5sZW5ndGgsCi0KLSAgICAvLyB0aGUg
Y291bnQgb2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVzCi0gICAgcmVtYWluaW5nID0gbGVuZ3Ro
ICE9PSAxIHx8ICggc3Vib3JkaW5hdGUgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHN1Ym9yZGluYXRl
LnByb21pc2UgKSApID8gbGVuZ3RoIDogMCwKLQotICAgIC8vIHRoZSBtYXN0ZXIgRGVmZXJyZWQu
IElmIHJlc29sdmVWYWx1ZXMgY29uc2lzdCBvZiBvbmx5IGEgc2luZ2xlIERlZmVycmVkLCBqdXN0
IHVzZSB0aGF0LgotICAgIGRlZmVycmVkID0gcmVtYWluaW5nID09PSAxID8gc3Vib3JkaW5hdGUg
OiBqUXVlcnkuRGVmZXJyZWQoKSwKLQotICAgIC8vIFVwZGF0ZSBmdW5jdGlvbiBmb3IgYm90aCBy
ZXNvbHZlIGFuZCBwcm9ncmVzcyB2YWx1ZXMKLSAgICB1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGks
IGNvbnRleHRzLCB2YWx1ZXMgKSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAg
ICBjb250ZXh0c1sgaSBdID0gdGhpczsKLSAgICB2YWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5n
dGggPiAxID8gY29yZV9zbGljZS5jYWxsKCBhcmd1bWVudHMgKSA6IHZhbHVlOwotICAgIGlmKCB2
YWx1ZXMgPT09IHByb2dyZXNzVmFsdWVzICkgewotICAgIGRlZmVycmVkLm5vdGlmeVdpdGgoIGNv
bnRleHRzLCB2YWx1ZXMgKTsKLSAgICB9IGVsc2UgaWYgKCAhKCAtLXJlbWFpbmluZyApICkgewot
ICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBjb250ZXh0cywgdmFsdWVzICk7Ci0gICAgfQotICAg
IH07Ci0gICAgfSwKLQotICAgIHByb2dyZXNzVmFsdWVzLCBwcm9ncmVzc0NvbnRleHRzLCByZXNv
bHZlQ29udGV4dHM7Ci0KLSAgICAvLyBhZGQgbGlzdGVuZXJzIHRvIERlZmVycmVkIHN1Ym9yZGlu
YXRlczsgdHJlYXQgb3RoZXJzIGFzIHJlc29sdmVkCi0gICAgaWYgKCBsZW5ndGggPiAxICkgewot
ICAgIHByb2dyZXNzVmFsdWVzID0gbmV3IEFycmF5KCBsZW5ndGggKTsKLSAgICBwcm9ncmVzc0Nv
bnRleHRzID0gbmV3IEFycmF5KCBsZW5ndGggKTsKLSAgICByZXNvbHZlQ29udGV4dHMgPSBuZXcg
QXJyYXkoIGxlbmd0aCApOwotICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgewotICAgIGlm
ICggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXNvbHZlVmFsdWVz
WyBpIF0ucHJvbWlzZSApICkgewotICAgIHJlc29sdmVWYWx1ZXNbIGkgXS5wcm9taXNlKCkKLSAg
ICAuZG9uZSggdXBkYXRlRnVuYyggaSwgcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICkg
KQotICAgIC5mYWlsKCBkZWZlcnJlZC5yZWplY3QgKQotICAgIC5wcm9ncmVzcyggdXBkYXRlRnVu
YyggaSwgcHJvZ3Jlc3NDb250ZXh0cywgcHJvZ3Jlc3NWYWx1ZXMgKSApOwotICAgIH0gZWxzZSB7
Ci0gICAgLS1yZW1haW5pbmc7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBpZiB3ZSdy
ZSBub3Qgd2FpdGluZyBvbiBhbnl0aGluZywgcmVzb2x2ZSB0aGUgbWFzdGVyCi0gICAgaWYgKCAh
cmVtYWluaW5nICkgewotICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCByZXNvbHZlQ29udGV4dHMs
IHJlc29sdmVWYWx1ZXMgKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGVmZXJyZWQucHJvbWlzZSgp
OwotICAgIH0KLX0pOwotalF1ZXJ5LnN1cHBvcnQgPSAoZnVuY3Rpb24oKSB7Ci0KLSAgICB2YXIg
c3VwcG9ydCwgYWxsLCBhLAotICAgIGlucHV0LCBzZWxlY3QsIGZyYWdtZW50LAotICAgIG9wdCwg
ZXZlbnROYW1lLCBpc1N1cHBvcnRlZCwgaSwKLSAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKLQotICAgIC8vIFNldHVwCi0gICAgZGl2LnNldEF0dHJpYnV0ZSggImNsYXNz
TmFtZSIsICJ0IiApOwotICAgIGRpdi5pbm5lckhUTUwgPSAiICA8bGluay8+PHRhYmxlPjwvdGFi
bGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IjsKLQotICAgIC8v
IFN1cHBvcnQgdGVzdHMgd29uJ3QgcnVuIGluIHNvbWUgbGltaXRlZCBvciBub24tYnJvd3NlciBl
bnZpcm9ubWVudHMKLSAgICBhbGwgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsKLSAg
ICBhID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbIDAgXTsKLSAgICBpZiAoICFhbGwg
fHwgIWEgfHwgIWFsbC5sZW5ndGggKSB7Ci0gICAgcmV0dXJuIHt9OwotICAgIH0KLQotICAgIC8v
IEZpcnN0IGJhdGNoIG9mIHRlc3RzCi0gICAgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgic2VsZWN0Iik7Ci0gICAgb3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJvcHRpb24iKSApOwotICAgIGlucHV0ID0gZGl2LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCJpbnB1dCIpWyAwIF07Ci0KLSAgICBhLnN0eWxlLmNzc1RleHQgPSAidG9wOjFweDtmbG9h
dDpsZWZ0O29wYWNpdHk6LjUiOwotICAgIHN1cHBvcnQgPSB7Ci0gICAgLy8gVGVzdCBzZXRBdHRy
aWJ1dGUgb24gY2FtZWxDYXNlIGNsYXNzLiBJZiBpdCB3b3Jrcywgd2UgbmVlZCBhdHRyRml4ZXMg
d2hlbiBkb2luZyBnZXQvc2V0QXR0cmlidXRlIChpZTYvNykKLSAgICBnZXRTZXRBdHRyaWJ1dGU6
IGRpdi5jbGFzc05hbWUgIT09ICJ0IiwKLQotICAgIC8vIElFIHN0cmlwcyBsZWFkaW5nIHdoaXRl
c3BhY2Ugd2hlbiAuaW5uZXJIVE1MIGlzIHVzZWQKLSAgICBsZWFkaW5nV2hpdGVzcGFjZTogZGl2
LmZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IDMsCi0KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0Ym9k
eSBlbGVtZW50cyBhcmVuJ3QgYXV0b21hdGljYWxseSBpbnNlcnRlZAotICAgIC8vIElFIHdpbGwg
aW5zZXJ0IHRoZW0gaW50byBlbXB0eSB0YWJsZXMKLSAgICB0Ym9keTogIWRpdi5nZXRFbGVtZW50
c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsCi0KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBsaW5r
IGVsZW1lbnRzIGdldCBzZXJpYWxpemVkIGNvcnJlY3RseSBieSBpbm5lckhUTUwKLSAgICAvLyBU
aGlzIHJlcXVpcmVzIGEgd3JhcHBlciBlbGVtZW50IGluIElFCi0gICAgaHRtbFNlcmlhbGl6ZTog
ISFkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgsCi0KLSAgICAvLyBHZXQg
dGhlIHN0eWxlIGluZm9ybWF0aW9uIGZyb20gZ2V0QXR0cmlidXRlCi0gICAgLy8gKElFIHVzZXMg
LmNzc1RleHQgaW5zdGVhZCkKLSAgICBzdHlsZTogL3RvcC8udGVzdCggYS5nZXRBdHRyaWJ1dGUo
InN0eWxlIikgKSwKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IFVSTHMgYXJlbid0IG1hbmlwdWxh
dGVkCi0gICAgLy8gKElFIG5vcm1hbGl6ZXMgaXQgYnkgZGVmYXVsdCkKLSAgICBocmVmTm9ybWFs
aXplZDogYS5nZXRBdHRyaWJ1dGUoImhyZWYiKSA9PT0gIi9hIiwKLQotICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IGVsZW1lbnQgb3BhY2l0eSBleGlzdHMKLSAgICAvLyAoSUUgdXNlcyBmaWx0ZXIgaW5z
dGVhZCkKLSAgICAvLyBVc2UgYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIFdlYktpdCBpc3N1ZS4g
U2VlICM1MTQ1Ci0gICAgb3BhY2l0eTogL14wLjUvLnRlc3QoIGEuc3R5bGUub3BhY2l0eSApLAot
Ci0gICAgLy8gVmVyaWZ5IHN0eWxlIGZsb2F0IGV4aXN0ZW5jZQotICAgIC8vIChJRSB1c2VzIHN0
eWxlRmxvYXQgaW5zdGVhZCBvZiBjc3NGbG9hdCkKLSAgICBjc3NGbG9hdDogISFhLnN0eWxlLmNz
c0Zsb2F0LAotCi0gICAgLy8gQ2hlY2sgdGhlIGRlZmF1bHQgY2hlY2tib3gvcmFkaW8gdmFsdWUg
KCIiIG9uIFdlYktpdDsgIm9uIiBlbHNld2hlcmUpCi0gICAgY2hlY2tPbjogISFpbnB1dC52YWx1
ZSwKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGEgc2VsZWN0ZWQtYnktZGVmYXVsdCBvcHRpb24g
aGFzIGEgd29ya2luZyBzZWxlY3RlZCBwcm9wZXJ0eS4KLSAgICAvLyAoV2ViS2l0IGRlZmF1bHRz
IHRvIGZhbHNlIGluc3RlYWQgb2YgdHJ1ZSwgSUUgdG9vLCBpZiBpdCdzIGluIGFuIG9wdGdyb3Vw
KQotICAgIG9wdFNlbGVjdGVkOiBvcHQuc2VsZWN0ZWQsCi0KLSAgICAvLyBUZXN0cyBmb3IgZW5j
dHlwZSBzdXBwb3J0IG9uIGEgZm9ybSAoIzY3NDMpCi0gICAgZW5jdHlwZTogISFkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJmb3JtIikuZW5jdHlwZSwKLQotICAgIC8vIE1ha2VzIHN1cmUgY2xvbmlu
ZyBhbiBodG1sNSBlbGVtZW50IGRvZXMgbm90IGNhdXNlIHByb2JsZW1zCi0gICAgLy8gV2hlcmUg
b3V0ZXJIVE1MIGlzIHVuZGVmaW5lZCwgdGhpcyBzdGlsbCB3b3JrcwotICAgIGh0bWw1Q2xvbmU6
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm5hdiIpLmNsb25lTm9kZSggdHJ1ZSApLm91dGVySFRN
TCAhPT0gIjw6bmF2PjwvOm5hdj4iLAotCi0gICAgLy8galF1ZXJ5LnN1cHBvcnQuYm94TW9kZWwg
REVQUkVDQVRFRCBpbiAxLjggc2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydCBRdWlya3MgTW9kZQotICAg
IGJveE1vZGVsOiBkb2N1bWVudC5jb21wYXRNb2RlID09PSAiQ1NTMUNvbXBhdCIsCi0KLSAgICAv
LyBXaWxsIGJlIGRlZmluZWQgbGF0ZXIKLSAgICBkZWxldGVFeHBhbmRvOiB0cnVlLAotICAgIG5v
Q2xvbmVFdmVudDogdHJ1ZSwKLSAgICBpbmxpbmVCbG9ja05lZWRzTGF5b3V0OiBmYWxzZSwKLSAg
ICBzaHJpbmtXcmFwQmxvY2tzOiBmYWxzZSwKLSAgICByZWxpYWJsZU1hcmdpblJpZ2h0OiB0cnVl
LAotICAgIGJveFNpemluZ1JlbGlhYmxlOiB0cnVlLAotICAgIHBpeGVsUG9zaXRpb246IGZhbHNl
Ci0gICAgfTsKLQotICAgIC8vIE1ha2Ugc3VyZSBjaGVja2VkIHN0YXR1cyBpcyBwcm9wZXJseSBj
bG9uZWQKLSAgICBpbnB1dC5jaGVja2VkID0gdHJ1ZTsKLSAgICBzdXBwb3J0Lm5vQ2xvbmVDaGVj
a2VkID0gaW5wdXQuY2xvbmVOb2RlKCB0cnVlICkuY2hlY2tlZDsKLQotICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IHRoZSBvcHRpb25zIGluc2lkZSBkaXNhYmxlZCBzZWxlY3RzIGFyZW4ndCBtYXJrZWQg
YXMgZGlzYWJsZWQKLSAgICAvLyAoV2ViS2l0IG1hcmtzIHRoZW0gYXMgZGlzYWJsZWQpCi0gICAg
c2VsZWN0LmRpc2FibGVkID0gdHJ1ZTsKLSAgICBzdXBwb3J0Lm9wdERpc2FibGVkID0gIW9wdC5k
aXNhYmxlZDsKLQotICAgIC8vIFN1cHBvcnQ6IElFPDkKLSAgICB0cnkgewotICAgIGRlbGV0ZSBk
aXYudGVzdDsKLSAgICB9IGNhdGNoKCBlICkgewotICAgIHN1cHBvcnQuZGVsZXRlRXhwYW5kbyA9
IGZhbHNlOwotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIHdlIGNhbiB0cnVzdCBnZXRBdHRyaWJ1
dGUoInZhbHVlIikKLSAgICBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7
Ci0gICAgaW5wdXQuc2V0QXR0cmlidXRlKCAidmFsdWUiLCAiIiApOwotICAgIHN1cHBvcnQuaW5w
dXQgPSBpbnB1dC5nZXRBdHRyaWJ1dGUoICJ2YWx1ZSIgKSA9PT0gIiI7Ci0KLSAgICAvLyBDaGVj
ayBpZiBhbiBpbnB1dCBtYWludGFpbnMgaXRzIHZhbHVlIGFmdGVyIGJlY29taW5nIGEgcmFkaW8K
LSAgICBpbnB1dC52YWx1ZSA9ICJ0IjsKLSAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoICJ0eXBlIiwg
InJhZGlvIiApOwotICAgIHN1cHBvcnQucmFkaW9WYWx1ZSA9IGlucHV0LnZhbHVlID09PSAidCI7
Ci0KLSAgICAvLyAjMTEyMTcgLSBXZWJLaXQgbG9zZXMgY2hlY2sgd2hlbiB0aGUgbmFtZSBpcyBh
ZnRlciB0aGUgY2hlY2tlZCBhdHRyaWJ1dGUKLSAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoICJjaGVj
a2VkIiwgInQiICk7Ci0gICAgaW5wdXQuc2V0QXR0cmlidXRlKCAibmFtZSIsICJ0IiApOwotCi0g
ICAgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0gICAgZnJh
Z21lbnQuYXBwZW5kQ2hpbGQoIGlucHV0ICk7Ci0KLSAgICAvLyBDaGVjayBpZiBhIGRpc2Nvbm5l
Y3RlZCBjaGVja2JveCB3aWxsIHJldGFpbiBpdHMgY2hlY2tlZAotICAgIC8vIHZhbHVlIG9mIHRy
dWUgYWZ0ZXIgYXBwZW5kZWQgdG8gdGhlIERPTSAoSUU2LzcpCi0gICAgc3VwcG9ydC5hcHBlbmRD
aGVja2VkID0gaW5wdXQuY2hlY2tlZDsKLQotICAgIC8vIFdlYktpdCBkb2Vzbid0IGNsb25lIGNo
ZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50cwotICAgIHN1cHBvcnQuY2hlY2tDbG9u
ZSA9IGZyYWdtZW50LmNsb25lTm9kZSggdHJ1ZSApLmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGls
ZC5jaGVja2VkOwotCi0gICAgLy8gU3VwcG9ydDogSUU8OQotICAgIC8vIE9wZXJhIGRvZXMgbm90
IGNsb25lIGV2ZW50cyAoYW5kIHR5cGVvZiBkaXYuYXR0YWNoRXZlbnQgPT09IHVuZGVmaW5lZCku
Ci0gICAgLy8gSUU5LTEwIGNsb25lcyBldmVudHMgYm91bmQgdmlhIGF0dGFjaEV2ZW50LCBidXQg
dGhleSBkb24ndCB0cmlnZ2VyIHdpdGggLmNsaWNrKCkKLSAgICBpZiAoIGRpdi5hdHRhY2hFdmVu
dCApIHsKLSAgICBkaXYuYXR0YWNoRXZlbnQoICJvbmNsaWNrIiwgZnVuY3Rpb24oKSB7Ci0gICAg
c3VwcG9ydC5ub0Nsb25lRXZlbnQgPSBmYWxzZTsKLSAgICB9KTsKLQotICAgIGRpdi5jbG9uZU5v
ZGUoIHRydWUgKS5jbGljaygpOwotICAgIH0KLQotICAgIC8vIFN1cHBvcnQ6IElFPDkgKGxhY2sg
c3VibWl0L2NoYW5nZSBidWJibGUpLCBGaXJlZm94IDE3KyAobGFjayBmb2N1c2luIGV2ZW50KQot
ICAgIC8vIEJld2FyZSBvZiBDU1AgcmVzdHJpY3Rpb25zIChodHRwczovL2RldmVsb3Blci5tb3pp
bGxhLm9yZy9lbi9TZWN1cml0eS9DU1ApLCB0ZXN0L2NzcC5waHAKLSAgICBmb3IgKCBpIGluIHsg
c3VibWl0OiB0cnVlLCBjaGFuZ2U6IHRydWUsIGZvY3VzaW46IHRydWUgfSkgewotICAgIGRpdi5z
ZXRBdHRyaWJ1dGUoIGV2ZW50TmFtZSA9ICJvbiIgKyBpLCAidCIgKTsKLQotICAgIHN1cHBvcnRb
IGkgKyAiQnViYmxlcyIgXSA9IGV2ZW50TmFtZSBpbiB3aW5kb3cgfHwgZGl2LmF0dHJpYnV0ZXNb
IGV2ZW50TmFtZSBdLmV4cGFuZG8gPT09IGZhbHNlOwotICAgIH0KLQotICAgIGRpdi5zdHlsZS5i
YWNrZ3JvdW5kQ2xpcCA9ICJjb250ZW50LWJveCI7Ci0gICAgZGl2LmNsb25lTm9kZSggdHJ1ZSAp
LnN0eWxlLmJhY2tncm91bmRDbGlwID0gIiI7Ci0gICAgc3VwcG9ydC5jbGVhckNsb25lU3R5bGUg
PSBkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPT09ICJjb250ZW50LWJveCI7Ci0KLSAgICAvLyBS
dW4gdGVzdHMgdGhhdCBuZWVkIGEgYm9keSBhdCBkb2MgcmVhZHkKLSAgICBqUXVlcnkoZnVuY3Rp
b24oKSB7Ci0gICAgdmFyIGNvbnRhaW5lciwgbWFyZ2luRGl2LCB0ZHMsCi0gICAgZGl2UmVzZXQg
PSAicGFkZGluZzowO21hcmdpbjowO2JvcmRlcjowO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpj
b250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7LXdlYmtpdC1ib3gtc2l6aW5n
OmNvbnRlbnQtYm94OyIsCi0gICAgYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCJib2R5IilbMF07Ci0KLSAgICBpZiAoICFib2R5ICkgewotICAgIC8vIFJldHVybiBmb3IgZnJh
bWVzZXQgZG9jcyB0aGF0IGRvbid0IGhhdmUgYSBib2R5Ci0gICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIGNvbnRh
aW5lci5zdHlsZS5jc3NUZXh0ID0gImJvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7cG9zaXRpb246
YWJzb2x1dGU7dG9wOjA7bGVmdDotOTk5OXB4O21hcmdpbi10b3A6MXB4IjsKLQotICAgIGJvZHku
YXBwZW5kQ2hpbGQoIGNvbnRhaW5lciApLmFwcGVuZENoaWxkKCBkaXYgKTsKLQotICAgIC8vIFN1
cHBvcnQ6IElFOAotICAgIC8vIENoZWNrIGlmIHRhYmxlIGNlbGxzIHN0aWxsIGhhdmUgb2Zmc2V0
V2lkdGgvSGVpZ2h0IHdoZW4gdGhleSBhcmUgc2V0Ci0gICAgLy8gdG8gZGlzcGxheTpub25lIGFu
ZCB0aGVyZSBhcmUgc3RpbGwgb3RoZXIgdmlzaWJsZSB0YWJsZSBjZWxscyBpbiBhCi0gICAgLy8g
dGFibGUgcm93OyBpZiBzbywgb2Zmc2V0V2lkdGgvSGVpZ2h0IGFyZSBub3QgcmVsaWFibGUgZm9y
IHVzZSB3aGVuCi0gICAgLy8gZGV0ZXJtaW5pbmcgaWYgYW4gZWxlbWVudCBoYXMgYmVlbiBoaWRk
ZW4gZGlyZWN0bHkgdXNpbmcKLSAgICAvLyBkaXNwbGF5Om5vbmUgKGl0IGlzIHN0aWxsIHNhZmUg
dG8gdXNlIG9mZnNldHMgaWYgYSBwYXJlbnQgZWxlbWVudCBpcwotICAgIC8vIGhpZGRlbjsgZG9u
IHNhZmV0eSBnb2dnbGVzIGFuZCBzZWUgYnVnICM0NTEyIGZvciBtb3JlIGluZm9ybWF0aW9uKS4K
LSAgICBkaXYuaW5uZXJIVE1MID0gIjx0YWJsZT48dHI+PHRkPjwvdGQ+PHRkPnQ8L3RkPjwvdHI+
PC90YWJsZT4iOwotICAgIHRkcyA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAg
ICB0ZHNbIDAgXS5zdHlsZS5jc3NUZXh0ID0gInBhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MDtk
aXNwbGF5Om5vbmUiOwotICAgIGlzU3VwcG9ydGVkID0gKCB0ZHNbIDAgXS5vZmZzZXRIZWlnaHQg
PT09IDAgKTsKLQotICAgIHRkc1sgMCBdLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICB0ZHNbIDEg
XS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotCi0gICAgLy8gU3VwcG9ydDogSUU4Ci0gICAgLy8g
Q2hlY2sgaWYgZW1wdHkgdGFibGUgY2VsbHMgc3RpbGwgaGF2ZSBvZmZzZXRXaWR0aC9IZWlnaHQK
LSAgICBzdXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyA9IGlzU3VwcG9ydGVkICYmICggdGRz
WyAwIF0ub2Zmc2V0SGVpZ2h0ID09PSAwICk7Ci0KLSAgICAvLyBDaGVjayBib3gtc2l6aW5nIGFu
ZCBtYXJnaW4gYmVoYXZpb3IKLSAgICBkaXYuaW5uZXJIVE1MID0gIiI7Ci0gICAgZGl2LnN0eWxl
LmNzc1RleHQgPSAiYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXIt
Ym94Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MXB4O2JvcmRlcjoxcHg7
ZGlzcGxheTpibG9jazt3aWR0aDo0cHg7bWFyZ2luLXRvcDoxJTtwb3NpdGlvbjphYnNvbHV0ZTt0
b3A6MSU7IjsKLSAgICBzdXBwb3J0LmJveFNpemluZyA9ICggZGl2Lm9mZnNldFdpZHRoID09PSA0
ICk7Ci0gICAgc3VwcG9ydC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCA9ICggYm9k
eS5vZmZzZXRUb3AgIT09IDEgKTsKLQotICAgIC8vIFVzZSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHls
ZSBiZWNhdXNlIGpzZG9tIG9uIG5vZGUuanMgd2lsbCBicmVhayB3aXRob3V0IGl0LgotICAgIGlm
ICggd2luZG93LmdldENvbXB1dGVkU3R5bGUgKSB7Ci0gICAgc3VwcG9ydC5waXhlbFBvc2l0aW9u
ID0gKCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZGl2LCBudWxsICkgfHwge30gKS50b3AgIT09
ICIxJSI7Ci0gICAgc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSA9ICggd2luZG93LmdldENvbXB1
dGVkU3R5bGUoIGRpdiwgbnVsbCApIHx8IHsgd2lkdGg6ICI0cHgiIH0gKS53aWR0aCA9PT0gIjRw
eCI7Ci0KLSAgICAvLyBDaGVjayBpZiBkaXYgd2l0aCBleHBsaWNpdCB3aWR0aCBhbmQgbm8gbWFy
Z2luLXJpZ2h0IGluY29ycmVjdGx5Ci0gICAgLy8gZ2V0cyBjb21wdXRlZCBtYXJnaW4tcmlnaHQg
YmFzZWQgb24gd2lkdGggb2YgY29udGFpbmVyLiAoIzMzMzMpCi0gICAgLy8gRmFpbHMgaW4gV2Vi
S2l0IGJlZm9yZSBGZWIgMjAxMSBuaWdodGxpZXMKLSAgICAvLyBXZWJLaXQgQnVnIDEzMzQzIC0g
Z2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHdyb25nIHZhbHVlIGZvciBtYXJnaW4tcmlnaHQKLSAg
ICBtYXJnaW5EaXYgPSBkaXYuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpICk7Ci0gICAgbWFyZ2luRGl2LnN0eWxlLmNzc1RleHQgPSBkaXYuc3R5bGUuY3NzVGV4dCA9
IGRpdlJlc2V0OwotICAgIG1hcmdpbkRpdi5zdHlsZS5tYXJnaW5SaWdodCA9IG1hcmdpbkRpdi5z
dHlsZS53aWR0aCA9ICIwIjsKLSAgICBkaXYuc3R5bGUud2lkdGggPSAiMXB4IjsKLQotICAgIHN1
cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodCA9Ci0gICAgIXBhcnNlRmxvYXQoICggd2luZG93Lmdl
dENvbXB1dGVkU3R5bGUoIG1hcmdpbkRpdiwgbnVsbCApIHx8IHt9ICkubWFyZ2luUmlnaHQgKTsK
LSAgICB9Ci0KLSAgICBpZiAoIHR5cGVvZiBkaXYuc3R5bGUuem9vbSAhPT0gY29yZV9zdHJ1bmRl
ZmluZWQgKSB7Ci0gICAgLy8gU3VwcG9ydDogSUU8OAotICAgIC8vIENoZWNrIGlmIG5hdGl2ZWx5
IGJsb2NrLWxldmVsIGVsZW1lbnRzIGFjdCBsaWtlIGlubGluZS1ibG9jawotICAgIC8vIGVsZW1l
bnRzIHdoZW4gc2V0dGluZyB0aGVpciBkaXNwbGF5IHRvICdpbmxpbmUnIGFuZCBnaXZpbmcKLSAg
ICAvLyB0aGVtIGxheW91dAotICAgIGRpdi5pbm5lckhUTUwgPSAiIjsKLSAgICBkaXYuc3R5bGUu
Y3NzVGV4dCA9IGRpdlJlc2V0ICsgIndpZHRoOjFweDtwYWRkaW5nOjFweDtkaXNwbGF5OmlubGlu
ZTt6b29tOjEiOwotICAgIHN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dCA9ICggZGl2Lm9m
ZnNldFdpZHRoID09PSAzICk7Ci0KLSAgICAvLyBTdXBwb3J0OiBJRTYKLSAgICAvLyBDaGVjayBp
ZiBlbGVtZW50cyB3aXRoIGxheW91dCBzaHJpbmstd3JhcCB0aGVpciBjaGlsZHJlbgotICAgIGRp
di5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKLSAgICBkaXYuaW5uZXJIVE1MID0gIjxkaXY+PC9k
aXY+IjsKLSAgICBkaXYuZmlyc3RDaGlsZC5zdHlsZS53aWR0aCA9ICI1cHgiOwotICAgIHN1cHBv
cnQuc2hyaW5rV3JhcEJsb2NrcyA9ICggZGl2Lm9mZnNldFdpZHRoICE9PSAzICk7Ci0KLSAgICBp
ZiAoIHN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dCApIHsKLSAgICAvLyBQcmV2ZW50IElF
IDYgZnJvbSBhZmZlY3RpbmcgbGF5b3V0IGZvciBwb3NpdGlvbmVkIGVsZW1lbnRzICMxMTA0OAot
ICAgIC8vIFByZXZlbnQgSUUgZnJvbSBzaHJpbmtpbmcgdGhlIGJvZHkgaW4gSUUgNyBtb2RlICMx
Mjg2OQotICAgIC8vIFN1cHBvcnQ6IElFPDgKLSAgICBib2R5LnN0eWxlLnpvb20gPSAxOwotICAg
IH0KLSAgICB9Ci0KLSAgICBib2R5LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTsKLQotICAgIC8v
IE51bGwgZWxlbWVudHMgdG8gYXZvaWQgbGVha3MgaW4gSUUKLSAgICBjb250YWluZXIgPSBkaXYg
PSB0ZHMgPSBtYXJnaW5EaXYgPSBudWxsOwotICAgIH0pOwotCi0gICAgLy8gTnVsbCBlbGVtZW50
cyB0byBhdm9pZCBsZWFrcyBpbiBJRQotICAgIGFsbCA9IHNlbGVjdCA9IGZyYWdtZW50ID0gb3B0
ID0gYSA9IGlucHV0ID0gbnVsbDsKLQotICAgIHJldHVybiBzdXBwb3J0OwotfSkoKTsKLQotdmFy
IHJicmFjZSA9IC8oPzpce1tcc1xTXSpcfXxcW1tcc1xTXSpcXSkkLywKLSAgICBybXVsdGlEYXNo
ID0gLyhbQS1aXSkvZzsKLQotZnVuY3Rpb24gaW50ZXJuYWxEYXRhKCBlbGVtLCBuYW1lLCBkYXRh
LCBwdnQgLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKXsKLSAgICBpZiAoICFqUXVlcnkuYWNjZXB0
RGF0YSggZWxlbSApICkgewotICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB2YXIgdGhpc0NhY2hl
LCByZXQsCi0gICAgaW50ZXJuYWxLZXkgPSBqUXVlcnkuZXhwYW5kbywKLSAgICBnZXRCeU5hbWUg
PSB0eXBlb2YgbmFtZSA9PT0gInN0cmluZyIsCi0KLSAgICAvLyBXZSBoYXZlIHRvIGhhbmRsZSBE
T00gbm9kZXMgYW5kIEpTIG9iamVjdHMgZGlmZmVyZW50bHkgYmVjYXVzZSBJRTYtNwotICAgIC8v
IGNhbid0IEdDIG9iamVjdCByZWZlcmVuY2VzIHByb3Blcmx5IGFjcm9zcyB0aGUgRE9NLUpTIGJv
dW5kYXJ5Ci0gICAgaXNOb2RlID0gZWxlbS5ub2RlVHlwZSwKLQotICAgIC8vIE9ubHkgRE9NIG5v
ZGVzIG5lZWQgdGhlIGdsb2JhbCBqUXVlcnkgY2FjaGU7IEpTIG9iamVjdCBkYXRhIGlzCi0gICAg
Ly8gYXR0YWNoZWQgZGlyZWN0bHkgdG8gdGhlIG9iamVjdCBzbyBHQyBjYW4gb2NjdXIgYXV0b21h
dGljYWxseQotICAgIGNhY2hlID0gaXNOb2RlID8galF1ZXJ5LmNhY2hlIDogZWxlbSwKLQotICAg
IC8vIE9ubHkgZGVmaW5pbmcgYW4gSUQgZm9yIEpTIG9iamVjdHMgaWYgaXRzIGNhY2hlIGFscmVh
ZHkgZXhpc3RzIGFsbG93cwotICAgIC8vIHRoZSBjb2RlIHRvIHNob3J0Y3V0IG9uIHRoZSBzYW1l
IHBhdGggYXMgYSBET00gbm9kZSB3aXRoIG5vIGNhY2hlCi0gICAgaWQgPSBpc05vZGUgPyBlbGVt
WyBpbnRlcm5hbEtleSBdIDogZWxlbVsgaW50ZXJuYWxLZXkgXSAmJiBpbnRlcm5hbEtleTsKLQot
ICAgIC8vIEF2b2lkIGRvaW5nIGFueSBtb3JlIHdvcmsgdGhhbiB3ZSBuZWVkIHRvIHdoZW4gdHJ5
aW5nIHRvIGdldCBkYXRhIG9uIGFuCi0gICAgLy8gb2JqZWN0IHRoYXQgaGFzIG5vIGRhdGEgYXQg
YWxsCi0gICAgaWYgKCAoIWlkIHx8ICFjYWNoZVtpZF0gfHwgKCFwdnQgJiYgIWNhY2hlW2lkXS5k
YXRhKSkgJiYgZ2V0QnlOYW1lICYmIGRhdGEgPT09IHVuZGVmaW5lZCApIHsKLSAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKCAhaWQgKSB7Ci0gICAgLy8gT25seSBET00gbm9kZXMgbmVlZCBh
IG5ldyB1bmlxdWUgSUQgZm9yIGVhY2ggZWxlbWVudCBzaW5jZSB0aGVpciBkYXRhCi0gICAgLy8g
ZW5kcyB1cCBpbiB0aGUgZ2xvYmFsIGNhY2hlCi0gICAgaWYgKCBpc05vZGUgKSB7Ci0gICAgZWxl
bVsgaW50ZXJuYWxLZXkgXSA9IGlkID0gY29yZV9kZWxldGVkSWRzLnBvcCgpIHx8IGpRdWVyeS5n
dWlkKys7Ci0gICAgfSBlbHNlIHsKLSAgICBpZCA9IGludGVybmFsS2V5OwotICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAoICFjYWNoZVsgaWQgXSApIHsKLSAgICBjYWNoZVsgaWQgXSA9IHt9OwotCi0g
ICAgLy8gQXZvaWRzIGV4cG9zaW5nIGpRdWVyeSBtZXRhZGF0YSBvbiBwbGFpbiBKUyBvYmplY3Rz
IHdoZW4gdGhlIG9iamVjdAotICAgIC8vIGlzIHNlcmlhbGl6ZWQgdXNpbmcgSlNPTi5zdHJpbmdp
ZnkKLSAgICBpZiAoICFpc05vZGUgKSB7Ci0gICAgY2FjaGVbIGlkIF0udG9KU09OID0galF1ZXJ5
Lm5vb3A7Ci0gICAgfQotICAgIH0KLQotICAgIC8vIEFuIG9iamVjdCBjYW4gYmUgcGFzc2VkIHRv
IGpRdWVyeS5kYXRhIGluc3RlYWQgb2YgYSBrZXkvdmFsdWUgcGFpcjsgdGhpcyBnZXRzCi0gICAg
Ly8gc2hhbGxvdyBjb3BpZWQgb3ZlciBvbnRvIHRoZSBleGlzdGluZyBjYWNoZQotICAgIGlmICgg
dHlwZW9mIG5hbWUgPT09ICJvYmplY3QiIHx8IHR5cGVvZiBuYW1lID09PSAiZnVuY3Rpb24iICkg
ewotICAgIGlmICggcHZ0ICkgewotICAgIGNhY2hlWyBpZCBdID0galF1ZXJ5LmV4dGVuZCggY2Fj
aGVbIGlkIF0sIG5hbWUgKTsKLSAgICB9IGVsc2UgewotICAgIGNhY2hlWyBpZCBdLmRhdGEgPSBq
UXVlcnkuZXh0ZW5kKCBjYWNoZVsgaWQgXS5kYXRhLCBuYW1lICk7Ci0gICAgfQotICAgIH0KLQot
ICAgIHRoaXNDYWNoZSA9IGNhY2hlWyBpZCBdOwotCi0gICAgLy8galF1ZXJ5IGRhdGEoKSBpcyBz
dG9yZWQgaW4gYSBzZXBhcmF0ZSBvYmplY3QgaW5zaWRlIHRoZSBvYmplY3QncyBpbnRlcm5hbCBk
YXRhCi0gICAgLy8gY2FjaGUgaW4gb3JkZXIgdG8gYXZvaWQga2V5IGNvbGxpc2lvbnMgYmV0d2Vl
biBpbnRlcm5hbCBkYXRhIGFuZCB1c2VyLWRlZmluZWQKLSAgICAvLyBkYXRhLgotICAgIGlmICgg
IXB2dCApIHsKLSAgICBpZiAoICF0aGlzQ2FjaGUuZGF0YSApIHsKLSAgICB0aGlzQ2FjaGUuZGF0
YSA9IHt9OwotICAgIH0KLQotICAgIHRoaXNDYWNoZSA9IHRoaXNDYWNoZS5kYXRhOwotICAgIH0K
LQotICAgIGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkgewotICAgIHRoaXNDYWNoZVsgalF1ZXJ5
LmNhbWVsQ2FzZSggbmFtZSApIF0gPSBkYXRhOwotICAgIH0KLQotICAgIC8vIENoZWNrIGZvciBi
b3RoIGNvbnZlcnRlZC10by1jYW1lbCBhbmQgbm9uLWNvbnZlcnRlZCBkYXRhIHByb3BlcnR5IG5h
bWVzCi0gICAgLy8gSWYgYSBkYXRhIHByb3BlcnR5IHdhcyBzcGVjaWZpZWQKLSAgICBpZiAoIGdl
dEJ5TmFtZSApIHsKLQotICAgIC8vIEZpcnN0IFRyeSB0byBmaW5kIGFzLWlzIHByb3BlcnR5IGRh
dGEKLSAgICByZXQgPSB0aGlzQ2FjaGVbIG5hbWUgXTsKLQotICAgIC8vIFRlc3QgZm9yIG51bGx8
dW5kZWZpbmVkIHByb3BlcnR5IGRhdGEKLSAgICBpZiAoIHJldCA9PSBudWxsICkgewotCi0gICAg
Ly8gVHJ5IHRvIGZpbmQgdGhlIGNhbWVsQ2FzZWQgcHJvcGVydHkKLSAgICByZXQgPSB0aGlzQ2Fj
aGVbIGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKSBdOwotICAgIH0KLSAgICB9IGVsc2UgewotICAg
IHJldCA9IHRoaXNDYWNoZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCi1mdW5jdGlv
biBpbnRlcm5hbFJlbW92ZURhdGEoIGVsZW0sIG5hbWUsIHB2dCApIHsKLSAgICBpZiAoICFqUXVl
cnkuYWNjZXB0RGF0YSggZWxlbSApICkgewotICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB2YXIg
aSwgbCwgdGhpc0NhY2hlLAotICAgIGlzTm9kZSA9IGVsZW0ubm9kZVR5cGUsCi0KLSAgICAvLyBT
ZWUgalF1ZXJ5LmRhdGEgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSAgICBjYWNoZSA9IGlzTm9kZSA/
IGpRdWVyeS5jYWNoZSA6IGVsZW0sCi0gICAgaWQgPSBpc05vZGUgPyBlbGVtWyBqUXVlcnkuZXhw
YW5kbyBdIDogalF1ZXJ5LmV4cGFuZG87Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IG5v
IGNhY2hlIGVudHJ5IGZvciB0aGlzIG9iamVjdCwgdGhlcmUgaXMgbm8KLSAgICAvLyBwdXJwb3Nl
IGluIGNvbnRpbnVpbmcKLSAgICBpZiAoICFjYWNoZVsgaWQgXSApIHsKLSAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKCBuYW1lICkgewotCi0gICAgdGhpc0NhY2hlID0gcHZ0ID8gY2FjaGVb
IGlkIF0gOiBjYWNoZVsgaWQgXS5kYXRhOwotCi0gICAgaWYgKCB0aGlzQ2FjaGUgKSB7Ci0KLSAg
ICAvLyBTdXBwb3J0IGFycmF5IG9yIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcgbmFtZXMgZm9yIGRh
dGEga2V5cwotICAgIGlmICggIWpRdWVyeS5pc0FycmF5KCBuYW1lICkgKSB7Ci0KLSAgICAvLyB0
cnkgdGhlIHN0cmluZyBhcyBhIGtleSBiZWZvcmUgYW55IG1hbmlwdWxhdGlvbgotICAgIGlmICgg
bmFtZSBpbiB0aGlzQ2FjaGUgKSB7Ci0gICAgbmFtZSA9IFsgbmFtZSBdOwotICAgIH0gZWxzZSB7
Ci0KLSAgICAvLyBzcGxpdCB0aGUgY2FtZWwgY2FzZWQgdmVyc2lvbiBieSBzcGFjZXMgdW5sZXNz
IGEga2V5IHdpdGggdGhlIHNwYWNlcyBleGlzdHMKLSAgICBuYW1lID0galF1ZXJ5LmNhbWVsQ2Fz
ZSggbmFtZSApOwotICAgIGlmICggbmFtZSBpbiB0aGlzQ2FjaGUgKSB7Ci0gICAgbmFtZSA9IFsg
bmFtZSBdOwotICAgIH0gZWxzZSB7Ci0gICAgbmFtZSA9IG5hbWUuc3BsaXQoIiAiKTsKLSAgICB9
Ci0gICAgfQotICAgIH0gZWxzZSB7Ci0gICAgLy8gSWYgIm5hbWUiIGlzIGFuIGFycmF5IG9mIGtl
eXMuLi4KLSAgICAvLyBXaGVuIGRhdGEgaXMgaW5pdGlhbGx5IGNyZWF0ZWQsIHZpYSAoImtleSIs
ICJ2YWwiKSBzaWduYXR1cmUsCi0gICAgLy8ga2V5cyB3aWxsIGJlIGNvbnZlcnRlZCB0byBjYW1l
bENhc2UuCi0gICAgLy8gU2luY2UgdGhlcmUgaXMgbm8gd2F5IHRvIHRlbGwgX2hvd18gYSBrZXkg
d2FzIGFkZGVkLCByZW1vdmUKLSAgICAvLyBib3RoIHBsYWluIGtleSBhbmQgY2FtZWxDYXNlIGtl
eS4gIzEyNzg2Ci0gICAgLy8gVGhpcyB3aWxsIG9ubHkgcGVuYWxpemUgdGhlIGFycmF5IGFyZ3Vt
ZW50IHBhdGguCi0gICAgbmFtZSA9IG5hbWUuY29uY2F0KCBqUXVlcnkubWFwKCBuYW1lLCBqUXVl
cnkuY2FtZWxDYXNlICkgKTsKLSAgICB9Ci0KLSAgICBmb3IgKCBpID0gMCwgbCA9IG5hbWUubGVu
Z3RoOyBpIDwgbDsgaSsrICkgewotICAgIGRlbGV0ZSB0aGlzQ2FjaGVbIG5hbWVbaV0gXTsKLSAg
ICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBubyBkYXRhIGxlZnQgaW4gdGhlIGNhY2hlLCB3ZSB3
YW50IHRvIGNvbnRpbnVlCi0gICAgLy8gYW5kIGxldCB0aGUgY2FjaGUgb2JqZWN0IGl0c2VsZiBn
ZXQgZGVzdHJveWVkCi0gICAgaWYgKCAhKCBwdnQgPyBpc0VtcHR5RGF0YU9iamVjdCA6IGpRdWVy
eS5pc0VtcHR5T2JqZWN0ICkoIHRoaXNDYWNoZSApICkgewotICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgfQotICAgIH0KLQotICAgIC8vIFNlZSBqUXVlcnkuZGF0YSBmb3IgbW9yZSBpbmZvcm1hdGlv
bgotICAgIGlmICggIXB2dCApIHsKLSAgICBkZWxldGUgY2FjaGVbIGlkIF0uZGF0YTsKLQotICAg
IC8vIERvbid0IGRlc3Ryb3kgdGhlIHBhcmVudCBjYWNoZSB1bmxlc3MgdGhlIGludGVybmFsIGRh
dGEgb2JqZWN0Ci0gICAgLy8gaGFkIGJlZW4gdGhlIG9ubHkgdGhpbmcgbGVmdCBpbiBpdAotICAg
IGlmICggIWlzRW1wdHlEYXRhT2JqZWN0KCBjYWNoZVsgaWQgXSApICkgewotICAgIHJldHVybjsK
LSAgICB9Ci0gICAgfQotCi0gICAgLy8gRGVzdHJveSB0aGUgY2FjaGUKLSAgICBpZiAoIGlzTm9k
ZSApIHsKLSAgICBqUXVlcnkuY2xlYW5EYXRhKCBbIGVsZW0gXSwgdHJ1ZSApOwotCi0gICAgLy8g
VXNlIGRlbGV0ZSB3aGVuIHN1cHBvcnRlZCBmb3IgZXhwYW5kb3Mgb3IgYGNhY2hlYCBpcyBub3Qg
YSB3aW5kb3cgcGVyIGlzV2luZG93ICgjMTAwODApCi0gICAgfSBlbHNlIGlmICggalF1ZXJ5LnN1
cHBvcnQuZGVsZXRlRXhwYW5kbyB8fCBjYWNoZSAhPSBjYWNoZS53aW5kb3cgKSB7Ci0gICAgZGVs
ZXRlIGNhY2hlWyBpZCBdOwotCi0gICAgLy8gV2hlbiBhbGwgZWxzZSBmYWlscywgbnVsbAotICAg
IH0gZWxzZSB7Ci0gICAgY2FjaGVbIGlkIF0gPSBudWxsOwotICAgIH0KLX0KLQotalF1ZXJ5LmV4
dGVuZCh7Ci0gICAgY2FjaGU6IHt9LAotCi0gICAgLy8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2Yg
alF1ZXJ5IG9uIHRoZSBwYWdlCi0gICAgLy8gTm9uLWRpZ2l0cyByZW1vdmVkIHRvIG1hdGNoIHJp
bmxpbmVqUXVlcnkKLSAgICBleHBhbmRvOiAialF1ZXJ5IiArICggY29yZV92ZXJzaW9uICsgTWF0
aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cRC9nLCAiIiApLAotCi0gICAgLy8gVGhlIGZvbGxvd2lu
ZyBlbGVtZW50cyB0aHJvdyB1bmNhdGNoYWJsZSBleGNlcHRpb25zIGlmIHlvdQotICAgIC8vIGF0
dGVtcHQgdG8gYWRkIGV4cGFuZG8gcHJvcGVydGllcyB0byB0aGVtLgotICAgIG5vRGF0YTogewot
ICAgICJlbWJlZCI6IHRydWUsCi0gICAgLy8gQmFuIGFsbCBvYmplY3RzIGV4Y2VwdCBmb3IgRmxh
c2ggKHdoaWNoIGhhbmRsZSBleHBhbmRvcykKLSAgICAib2JqZWN0IjogImNsc2lkOkQyN0NEQjZF
LUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCIsCi0gICAgImFwcGxldCI6IHRydWUKLSAgICB9
LAotCi0gICAgaGFzRGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgZWxlbSA9IGVsZW0ubm9k
ZVR5cGUgPyBqUXVlcnkuY2FjaGVbIGVsZW1balF1ZXJ5LmV4cGFuZG9dIF0gOiBlbGVtWyBqUXVl
cnkuZXhwYW5kbyBdOwotICAgIHJldHVybiAhIWVsZW0gJiYgIWlzRW1wdHlEYXRhT2JqZWN0KCBl
bGVtICk7Ci0gICAgfSwKLQotICAgIGRhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkg
ewotICAgIHJldHVybiBpbnRlcm5hbERhdGEoIGVsZW0sIG5hbWUsIGRhdGEgKTsKLSAgICB9LAot
Ci0gICAgcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7Ci0gICAgcmV0dXJuIGlu
dGVybmFsUmVtb3ZlRGF0YSggZWxlbSwgbmFtZSApOwotICAgIH0sCi0KLSAgICAvLyBGb3IgaW50
ZXJuYWwgdXNlIG9ubHkuCi0gICAgX2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkg
ewotICAgIHJldHVybiBpbnRlcm5hbERhdGEoIGVsZW0sIG5hbWUsIGRhdGEsIHRydWUgKTsKLSAg
ICB9LAotCi0gICAgX3JlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewotICAgIHJl
dHVybiBpbnRlcm5hbFJlbW92ZURhdGEoIGVsZW0sIG5hbWUsIHRydWUgKTsKLSAgICB9LAotCi0g
ICAgLy8gQSBtZXRob2QgZm9yIGRldGVybWluaW5nIGlmIGEgRE9NIG5vZGUgY2FuIGhhbmRsZSB0
aGUgZGF0YSBleHBhbmRvCi0gICAgYWNjZXB0RGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAg
Ly8gRG8gbm90IHNldCBkYXRhIG9uIG5vbi1lbGVtZW50IGJlY2F1c2UgaXQgd2lsbCBub3QgYmUg
Y2xlYXJlZCAoIzgzMzUpLgotICAgIGlmICggZWxlbS5ub2RlVHlwZSAmJiBlbGVtLm5vZGVUeXBl
ICE9PSAxICYmIGVsZW0ubm9kZVR5cGUgIT09IDkgKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHZhciBub0RhdGEgPSBlbGVtLm5vZGVOYW1lICYmIGpRdWVyeS5ub0RhdGFbIGVs
ZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdOwotCi0gICAgLy8gbm9kZXMgYWNjZXB0IGRhdGEg
dW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQ7IHJlamVjdGlvbiBjYW4gYmUgY29uZGl0aW9uYWwK
LSAgICByZXR1cm4gIW5vRGF0YSB8fCBub0RhdGEgIT09IHRydWUgJiYgZWxlbS5nZXRBdHRyaWJ1
dGUoImNsYXNzaWQiKSA9PT0gbm9EYXRhOwotICAgIH0KLX0pOwotCi1qUXVlcnkuZm4uZXh0ZW5k
KHsKLSAgICBkYXRhOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHsKLSAgICB2YXIgYXR0cnMsIG5h
bWUsCi0gICAgZWxlbSA9IHRoaXNbMF0sCi0gICAgaSA9IDAsCi0gICAgZGF0YSA9IG51bGw7Ci0K
LSAgICAvLyBHZXRzIGFsbCB2YWx1ZXMKLSAgICBpZiAoIGtleSA9PT0gdW5kZWZpbmVkICkgewot
ICAgIGlmICggdGhpcy5sZW5ndGggKSB7Ci0gICAgZGF0YSA9IGpRdWVyeS5kYXRhKCBlbGVtICk7
Ci0KLSAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgIWpRdWVyeS5fZGF0YSggZWxlbSwg
InBhcnNlZEF0dHJzIiApICkgewotICAgIGF0dHJzID0gZWxlbS5hdHRyaWJ1dGVzOwotICAgIGZv
ciAoIDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrICkgewotICAgIG5hbWUgPSBhdHRyc1tpXS5uYW1l
OwotCi0gICAgaWYgKCAhbmFtZS5pbmRleE9mKCAiZGF0YS0iICkgKSB7Ci0gICAgbmFtZSA9IGpR
dWVyeS5jYW1lbENhc2UoIG5hbWUuc2xpY2UoNSkgKTsKLQotICAgIGRhdGFBdHRyKCBlbGVtLCBu
YW1lLCBkYXRhWyBuYW1lIF0gKTsKLSAgICB9Ci0gICAgfQotICAgIGpRdWVyeS5fZGF0YSggZWxl
bSwgInBhcnNlZEF0dHJzIiwgdHJ1ZSApOwotICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZGF0
YTsKLSAgICB9Ci0KLSAgICAvLyBTZXRzIG11bHRpcGxlIHZhbHVlcwotICAgIGlmICggdHlwZW9m
IGtleSA9PT0gIm9iamVjdCIgKSB7Ci0gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsK
LSAgICBqUXVlcnkuZGF0YSggdGhpcywga2V5ICk7Ci0gICAgfSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHsKLQotICAgIGlmICgg
dmFsdWUgPT09IHVuZGVmaW5lZCApIHsKLSAgICAvLyBUcnkgdG8gZmV0Y2ggYW55IGludGVybmFs
bHkgc3RvcmVkIGRhdGEgZmlyc3QKLSAgICByZXR1cm4gZWxlbSA/IGRhdGFBdHRyKCBlbGVtLCBr
ZXksIGpRdWVyeS5kYXRhKCBlbGVtLCBrZXkgKSApIDogbnVsbDsKLSAgICB9Ci0KLSAgICB0aGlz
LmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgalF1ZXJ5LmRhdGEoIHRoaXMsIGtleSwgdmFsdWUgKTsK
LSAgICB9KTsKLSAgICB9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51bGws
IHRydWUgKTsKLSAgICB9LAotCi0gICAgcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGtleSApIHsKLSAg
ICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgIGpRdWVyeS5yZW1vdmVEYXRhKCB0
aGlzLCBrZXkgKTsKLSAgICB9KTsKLSAgICB9Ci19KTsKLQotZnVuY3Rpb24gZGF0YUF0dHIoIGVs
ZW0sIGtleSwgZGF0YSApIHsKLSAgICAvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5hbGx5
LCB0cnkgdG8gZmV0Y2ggYW55Ci0gICAgLy8gZGF0YSBmcm9tIHRoZSBIVE1MNSBkYXRhLSogYXR0
cmlidXRlCi0gICAgaWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0g
MSApIHsKLQotICAgIHZhciBuYW1lID0gImRhdGEtIiArIGtleS5yZXBsYWNlKCBybXVsdGlEYXNo
LCAiLSQxIiApLnRvTG93ZXJDYXNlKCk7Ci0KLSAgICBkYXRhID0gZWxlbS5nZXRBdHRyaWJ1dGUo
IG5hbWUgKTsKLQotICAgIGlmICggdHlwZW9mIGRhdGEgPT09ICJzdHJpbmciICkgewotICAgIHRy
eSB7Ci0gICAgZGF0YSA9IGRhdGEgPT09ICJ0cnVlIiA/IHRydWUgOgotICAgIGRhdGEgPT09ICJm
YWxzZSIgPyBmYWxzZSA6Ci0gICAgZGF0YSA9PT0gIm51bGwiID8gbnVsbCA6Ci0gICAgLy8gT25s
eSBjb252ZXJ0IHRvIGEgbnVtYmVyIGlmIGl0IGRvZXNuJ3QgY2hhbmdlIHRoZSBzdHJpbmcKLSAg
ICArZGF0YSArICIiID09PSBkYXRhID8gK2RhdGEgOgotICAgIHJicmFjZS50ZXN0KCBkYXRhICkg
PyBqUXVlcnkucGFyc2VKU09OKCBkYXRhICkgOgotICAgIGRhdGE7Ci0gICAgfSBjYXRjaCggZSAp
IHt9Ci0KLSAgICAvLyBNYWtlIHN1cmUgd2Ugc2V0IHRoZSBkYXRhIHNvIGl0IGlzbid0IGNoYW5n
ZWQgbGF0ZXIKLSAgICBqUXVlcnkuZGF0YSggZWxlbSwga2V5LCBkYXRhICk7Ci0KLSAgICB9IGVs
c2UgewotICAgIGRhdGEgPSB1bmRlZmluZWQ7Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiBk
YXRhOwotfQotCi0vLyBjaGVja3MgYSBjYWNoZSBvYmplY3QgZm9yIGVtcHRpbmVzcwotZnVuY3Rp
b24gaXNFbXB0eURhdGFPYmplY3QoIG9iaiApIHsKLSAgICB2YXIgbmFtZTsKLSAgICBmb3IgKCBu
YW1lIGluIG9iaiApIHsKLQotICAgIC8vIGlmIHRoZSBwdWJsaWMgZGF0YSBvYmplY3QgaXMgZW1w
dHksIHRoZSBwcml2YXRlIGlzIHN0aWxsIGVtcHR5Ci0gICAgaWYgKCBuYW1lID09PSAiZGF0YSIg
JiYgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIG9ialtuYW1lXSApICkgewotICAgIGNvbnRpbnVlOwot
ICAgIH0KLSAgICBpZiAoIG5hbWUgIT09ICJ0b0pTT04iICkgewotICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci1qUXVlcnkuZXh0ZW5kKHsKLSAg
ICBxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGRhdGEgKSB7Ci0gICAgdmFyIHF1ZXVlOwot
Ci0gICAgaWYgKCBlbGVtICkgewotICAgIHR5cGUgPSAoIHR5cGUgfHwgImZ4IiApICsgInF1ZXVl
IjsKLSAgICBxdWV1ZSA9IGpRdWVyeS5fZGF0YSggZWxlbSwgdHlwZSApOwotCi0gICAgLy8gU3Bl
ZWQgdXAgZGVxdWV1ZSBieSBnZXR0aW5nIG91dCBxdWlja2x5IGlmIHRoaXMgaXMganVzdCBhIGxv
b2t1cAotICAgIGlmICggZGF0YSApIHsKLSAgICBpZiAoICFxdWV1ZSB8fCBqUXVlcnkuaXNBcnJh
eShkYXRhKSApIHsKLSAgICBxdWV1ZSA9IGpRdWVyeS5fZGF0YSggZWxlbSwgdHlwZSwgalF1ZXJ5
Lm1ha2VBcnJheShkYXRhKSApOwotICAgIH0gZWxzZSB7Ci0gICAgcXVldWUucHVzaCggZGF0YSAp
OwotICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHF1ZXVlIHx8IFtdOwotICAgIH0KLSAgICB9LAot
Ci0gICAgZGVxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7Ci0gICAgdHlwZSA9IHR5cGUg
fHwgImZ4IjsKLQotICAgIHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLAot
ICAgIHN0YXJ0TGVuZ3RoID0gcXVldWUubGVuZ3RoLAotICAgIGZuID0gcXVldWUuc2hpZnQoKSwK
LSAgICBob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLAotICAgIG5leHQg
PSBmdW5jdGlvbigpIHsKLSAgICBqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApOwotICAgIH07
Ci0KLSAgICAvLyBJZiB0aGUgZnggcXVldWUgaXMgZGVxdWV1ZWQsIGFsd2F5cyByZW1vdmUgdGhl
IHByb2dyZXNzIHNlbnRpbmVsCi0gICAgaWYgKCBmbiA9PT0gImlucHJvZ3Jlc3MiICkgewotICAg
IGZuID0gcXVldWUuc2hpZnQoKTsKLSAgICBzdGFydExlbmd0aC0tOwotICAgIH0KLQotICAgIGhv
b2tzLmN1ciA9IGZuOwotICAgIGlmICggZm4gKSB7Ci0KLSAgICAvLyBBZGQgYSBwcm9ncmVzcyBz
ZW50aW5lbCB0byBwcmV2ZW50IHRoZSBmeCBxdWV1ZSBmcm9tIGJlaW5nCi0gICAgLy8gYXV0b21h
dGljYWxseSBkZXF1ZXVlZAotICAgIGlmICggdHlwZSA9PT0gImZ4IiApIHsKLSAgICBxdWV1ZS51
bnNoaWZ0KCAiaW5wcm9ncmVzcyIgKTsKLSAgICB9Ci0KLSAgICAvLyBjbGVhciB1cCB0aGUgbGFz
dCBxdWV1ZSBzdG9wIGZ1bmN0aW9uCi0gICAgZGVsZXRlIGhvb2tzLnN0b3A7Ci0gICAgZm4uY2Fs
bCggZWxlbSwgbmV4dCwgaG9va3MgKTsKLSAgICB9Ci0KLSAgICBpZiAoICFzdGFydExlbmd0aCAm
JiBob29rcyApIHsKLSAgICBob29rcy5lbXB0eS5maXJlKCk7Ci0gICAgfQotICAgIH0sCi0KLSAg
ICAvLyBub3QgaW50ZW5kZWQgZm9yIHB1YmxpYyBjb25zdW1wdGlvbiAtIGdlbmVyYXRlcyBhIHF1
ZXVlSG9va3Mgb2JqZWN0LCBvciByZXR1cm5zIHRoZSBjdXJyZW50IG9uZQotICAgIF9xdWV1ZUhv
b2tzOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHsKLSAgICB2YXIga2V5ID0gdHlwZSArICJxdWV1
ZUhvb2tzIjsKLSAgICByZXR1cm4galF1ZXJ5Ll9kYXRhKCBlbGVtLCBrZXkgKSB8fCBqUXVlcnku
X2RhdGEoIGVsZW0sIGtleSwgewotICAgIGVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCJvbmNlIG1l
bW9yeSIpLmFkZChmdW5jdGlvbigpIHsKLSAgICBqUXVlcnkuX3JlbW92ZURhdGEoIGVsZW0sIHR5
cGUgKyAicXVldWUiICk7Ci0gICAgalF1ZXJ5Ll9yZW1vdmVEYXRhKCBlbGVtLCBrZXkgKTsKLSAg
ICB9KQotICAgIH0pOwotICAgIH0KLX0pOwotCi1qUXVlcnkuZm4uZXh0ZW5kKHsKLSAgICBxdWV1
ZTogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7Ci0gICAgdmFyIHNldHRlciA9IDI7Ci0KLSAgICBp
ZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiApIHsKLSAgICBkYXRhID0gdHlwZTsKLSAgICB0
eXBlID0gImZ4IjsKLSAgICBzZXR0ZXItLTsKLSAgICB9Ci0KLSAgICBpZiAoIGFyZ3VtZW50cy5s
ZW5ndGggPCBzZXR0ZXIgKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5xdWV1ZSggdGhpc1swXSwgdHlw
ZSApOwotICAgIH0KLQotICAgIHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgPwotICAgIHRoaXMg
OgotICAgIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICB2YXIgcXVldWUgPSBqUXVlcnkucXVl
dWUoIHRoaXMsIHR5cGUsIGRhdGEgKTsKLQotICAgIC8vIGVuc3VyZSBhIGhvb2tzIGZvciB0aGlz
IHF1ZXVlCi0gICAgalF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7Ci0KLSAgICBpZiAo
IHR5cGUgPT09ICJmeCIgJiYgcXVldWVbMF0gIT09ICJpbnByb2dyZXNzIiApIHsKLSAgICBqUXVl
cnkuZGVxdWV1ZSggdGhpcywgdHlwZSApOwotICAgIH0KLSAgICB9KTsKLSAgICB9LAotICAgIGRl
cXVldWU6IGZ1bmN0aW9uKCB0eXBlICkgewotICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24o
KSB7Ci0gICAgalF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTsKLSAgICB9KTsKLSAgICB9LAot
ICAgIC8vIEJhc2VkIG9mZiBvZiB0aGUgcGx1Z2luIGJ5IENsaW50IEhlbGZlcnMsIHdpdGggcGVy
bWlzc2lvbi4KLSAgICAvLyBodHRwOi8vYmxpbmRzaWduYWxzLmNvbS9pbmRleC5waHAvMjAwOS8w
Ny9qcXVlcnktZGVsYXkvCi0gICAgZGVsYXk6IGZ1bmN0aW9uKCB0aW1lLCB0eXBlICkgewotICAg
IHRpbWUgPSBqUXVlcnkuZnggPyBqUXVlcnkuZnguc3BlZWRzWyB0aW1lIF0gfHwgdGltZSA6IHRp
bWU7Ci0gICAgdHlwZSA9IHR5cGUgfHwgImZ4IjsKLQotICAgIHJldHVybiB0aGlzLnF1ZXVlKCB0
eXBlLCBmdW5jdGlvbiggbmV4dCwgaG9va3MgKSB7Ci0gICAgdmFyIHRpbWVvdXQgPSBzZXRUaW1l
b3V0KCBuZXh0LCB0aW1lICk7Ci0gICAgaG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkgewotICAgIGNs
ZWFyVGltZW91dCggdGltZW91dCApOwotICAgIH07Ci0gICAgfSk7Ci0gICAgfSwKLSAgICBjbGVh
clF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHsKLSAgICByZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8
fCAiZngiLCBbXSApOwotICAgIH0sCi0gICAgLy8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVu
IHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZQotICAgIC8vIGFyZSBlbXB0aWVkIChmeCBpcyB0aGUg
dHlwZSBieSBkZWZhdWx0KQotICAgIHByb21pc2U6IGZ1bmN0aW9uKCB0eXBlLCBvYmogKSB7Ci0g
ICAgdmFyIHRtcCwKLSAgICBjb3VudCA9IDEsCi0gICAgZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQo
KSwKLSAgICBlbGVtZW50cyA9IHRoaXMsCi0gICAgaSA9IHRoaXMubGVuZ3RoLAotICAgIHJlc29s
dmUgPSBmdW5jdGlvbigpIHsKLSAgICBpZiAoICEoIC0tY291bnQgKSApIHsKLSAgICBkZWZlci5y
ZXNvbHZlV2l0aCggZWxlbWVudHMsIFsgZWxlbWVudHMgXSApOwotICAgIH0KLSAgICB9OwotCi0g
ICAgaWYgKCB0eXBlb2YgdHlwZSAhPT0gInN0cmluZyIgKSB7Ci0gICAgb2JqID0gdHlwZTsKLSAg
ICB0eXBlID0gdW5kZWZpbmVkOwotICAgIH0KLSAgICB0eXBlID0gdHlwZSB8fCAiZngiOwotCi0g
ICAgd2hpbGUoIGktLSApIHsKLSAgICB0bXAgPSBqUXVlcnkuX2RhdGEoIGVsZW1lbnRzWyBpIF0s
IHR5cGUgKyAicXVldWVIb29rcyIgKTsKLSAgICBpZiAoIHRtcCAmJiB0bXAuZW1wdHkgKSB7Ci0g
ICAgY291bnQrKzsKLSAgICB0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7Ci0gICAgfQotICAgIH0K
LSAgICByZXNvbHZlKCk7Ci0gICAgcmV0dXJuIGRlZmVyLnByb21pc2UoIG9iaiApOwotICAgIH0K
LX0pOwotdmFyIG5vZGVIb29rLCBib29sSG9vaywKLSAgICByY2xhc3MgPSAvW1x0XHJcbl0vZywK
LSAgICBycmV0dXJuID0gL1xyL2csCi0gICAgcmZvY3VzYWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0
fHRleHRhcmVhfGJ1dHRvbnxvYmplY3QpJC9pLAotICAgIHJjbGlja2FibGUgPSAvXig/OmF8YXJl
YSkkL2ksCi0gICAgcmJvb2xlYW4gPSAvXig/OmNoZWNrZWR8c2VsZWN0ZWR8YXV0b2ZvY3VzfGF1
dG9wbGF5fGFzeW5jfGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxsb29wfG11bHRpcGxl
fG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkKSQvaSwKLSAgICBydXNlRGVmYXVsdCA9IC9e
KD86Y2hlY2tlZHxzZWxlY3RlZCkkL2ksCi0gICAgZ2V0U2V0QXR0cmlidXRlID0galF1ZXJ5LnN1
cHBvcnQuZ2V0U2V0QXR0cmlidXRlLAotICAgIGdldFNldElucHV0ID0galF1ZXJ5LnN1cHBvcnQu
aW5wdXQ7Ci0KLWpRdWVyeS5mbi5leHRlbmQoewotICAgIGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2
YWx1ZSApIHsKLSAgICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgalF1ZXJ5LmF0dHIsIG5h
bWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApOwotICAgIH0sCi0KLSAgICByZW1vdmVB
dHRyOiBmdW5jdGlvbiggbmFtZSApIHsKLSAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkg
ewotICAgIGpRdWVyeS5yZW1vdmVBdHRyKCB0aGlzLCBuYW1lICk7Ci0gICAgfSk7Ci0gICAgfSwK
LQotICAgIHByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKLSAgICByZXR1cm4galF1ZXJ5
LmFjY2VzcyggdGhpcywgalF1ZXJ5LnByb3AsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3Ro
ID4gMSApOwotICAgIH0sCi0KLSAgICByZW1vdmVQcm9wOiBmdW5jdGlvbiggbmFtZSApIHsKLSAg
ICBuYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lOwotICAgIHJldHVybiB0aGlz
LmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgLy8gdHJ5L2NhdGNoIGhhbmRsZXMgY2FzZXMgd2hlcmUg
SUUgYmFsa3MgKHN1Y2ggYXMgcmVtb3ZpbmcgYSBwcm9wZXJ0eSBvbiB3aW5kb3cpCi0gICAgdHJ5
IHsKLSAgICB0aGlzWyBuYW1lIF0gPSB1bmRlZmluZWQ7Ci0gICAgZGVsZXRlIHRoaXNbIG5hbWUg
XTsKLSAgICB9IGNhdGNoKCBlICkge30KLSAgICB9KTsKLSAgICB9LAotCi0gICAgYWRkQ2xhc3M6
IGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAgICB2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjbGF6eiwg
aiwKLSAgICBpID0gMCwKLSAgICBsZW4gPSB0aGlzLmxlbmd0aCwKLSAgICBwcm9jZWVkID0gdHlw
ZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJiB2YWx1ZTsKLQotICAgIGlmICggalF1ZXJ5LmlzRnVu
Y3Rpb24oIHZhbHVlICkgKSB7Ci0gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaiApIHsK
LSAgICBqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgdGhpcy5j
bGFzc05hbWUgKSApOwotICAgIH0pOwotICAgIH0KLQotICAgIGlmICggcHJvY2VlZCApIHsKLSAg
ICAvLyBUaGUgZGlzanVuY3Rpb24gaGVyZSBpcyBmb3IgYmV0dGVyIGNvbXByZXNzaWJpbGl0eSAo
c2VlIHJlbW92ZUNsYXNzKQotICAgIGNsYXNzZXMgPSAoIHZhbHVlIHx8ICIiICkubWF0Y2goIGNv
cmVfcm5vdHdoaXRlICkgfHwgW107Ci0KLSAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKLSAg
ICBlbGVtID0gdGhpc1sgaSBdOwotICAgIGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCBl
bGVtLmNsYXNzTmFtZSA/Ci0gICAgKCAiICIgKyBlbGVtLmNsYXNzTmFtZSArICIgIiApLnJlcGxh
Y2UoIHJjbGFzcywgIiAiICkgOgotICAgICIgIgotICAgICk7Ci0KLSAgICBpZiAoIGN1ciApIHsK
LSAgICBqID0gMDsKLSAgICB3aGlsZSAoIChjbGF6eiA9IGNsYXNzZXNbaisrXSkgKSB7Ci0gICAg
aWYgKCBjdXIuaW5kZXhPZiggIiAiICsgY2xhenogKyAiICIgKSA8IDAgKSB7Ci0gICAgY3VyICs9
IGNsYXp6ICsgIiAiOwotICAgIH0KLSAgICB9Ci0gICAgZWxlbS5jbGFzc05hbWUgPSBqUXVlcnku
dHJpbSggY3VyICk7Ci0KLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiB0aGlzOwot
ICAgIH0sCi0KLSAgICByZW1vdmVDbGFzczogZnVuY3Rpb24oIHZhbHVlICkgewotICAgIHZhciBj
bGFzc2VzLCBlbGVtLCBjdXIsIGNsYXp6LCBqLAotICAgIGkgPSAwLAotICAgIGxlbiA9IHRoaXMu
bGVuZ3RoLAotICAgIHByb2NlZWQgPSBhcmd1bWVudHMubGVuZ3RoID09PSAwIHx8IHR5cGVvZiB2
YWx1ZSA9PT0gInN0cmluZyIgJiYgdmFsdWU7Ci0KLSAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9u
KCB2YWx1ZSApICkgewotICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGogKSB7Ci0gICAg
alF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIHRoaXMuY2xh
c3NOYW1lICkgKTsKLSAgICB9KTsKLSAgICB9Ci0gICAgaWYgKCBwcm9jZWVkICkgewotICAgIGNs
YXNzZXMgPSAoIHZhbHVlIHx8ICIiICkubWF0Y2goIGNvcmVfcm5vdHdoaXRlICkgfHwgW107Ci0K
LSAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKLSAgICBlbGVtID0gdGhpc1sgaSBdOwotICAg
IC8vIFRoaXMgZXhwcmVzc2lvbiBpcyBoZXJlIGZvciBiZXR0ZXIgY29tcHJlc3NpYmlsaXR5IChz
ZWUgYWRkQ2xhc3MpCi0gICAgY3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoIGVsZW0uY2xh
c3NOYW1lID8KLSAgICAoICIgIiArIGVsZW0uY2xhc3NOYW1lICsgIiAiICkucmVwbGFjZSggcmNs
YXNzLCAiICIgKSA6Ci0gICAgIiIKLSAgICApOwotCi0gICAgaWYgKCBjdXIgKSB7Ci0gICAgaiA9
IDA7Ci0gICAgd2hpbGUgKCAoY2xhenogPSBjbGFzc2VzW2orK10pICkgewotICAgIC8vIFJlbW92
ZSAqYWxsKiBpbnN0YW5jZXMKLSAgICB3aGlsZSAoIGN1ci5pbmRleE9mKCAiICIgKyBjbGF6eiAr
ICIgIiApID49IDAgKSB7Ci0gICAgY3VyID0gY3VyLnJlcGxhY2UoICIgIiArIGNsYXp6ICsgIiAi
LCAiICIgKTsKLSAgICB9Ci0gICAgfQotICAgIGVsZW0uY2xhc3NOYW1lID0gdmFsdWUgPyBqUXVl
cnkudHJpbSggY3VyICkgOiAiIjsKLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiB0
aGlzOwotICAgIH0sCi0KLSAgICB0b2dnbGVDbGFzczogZnVuY3Rpb24oIHZhbHVlLCBzdGF0ZVZh
bCApIHsKLSAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZSwKLSAgICBpc0Jvb2wgPSB0eXBlb2Yg
c3RhdGVWYWwgPT09ICJib29sZWFuIjsKLQotICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZh
bHVlICkgKSB7Ci0gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHsKLSAgICBqUXVl
cnkoIHRoaXMgKS50b2dnbGVDbGFzcyggdmFsdWUuY2FsbCh0aGlzLCBpLCB0aGlzLmNsYXNzTmFt
ZSwgc3RhdGVWYWwpLCBzdGF0ZVZhbCApOwotICAgIH0pOwotICAgIH0KLQotICAgIHJldHVybiB0
aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCB0eXBlID09PSAic3RyaW5nIiApIHsKLSAg
ICAvLyB0b2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lcwotICAgIHZhciBjbGFzc05hbWUsCi0g
ICAgaSA9IDAsCi0gICAgc2VsZiA9IGpRdWVyeSggdGhpcyApLAotICAgIHN0YXRlID0gc3RhdGVW
YWwsCi0gICAgY2xhc3NOYW1lcyA9IHZhbHVlLm1hdGNoKCBjb3JlX3Jub3R3aGl0ZSApIHx8IFtd
OwotCi0gICAgd2hpbGUgKCAoY2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSsrIF0pICkgewotICAg
IC8vIGNoZWNrIGVhY2ggY2xhc3NOYW1lIGdpdmVuLCBzcGFjZSBzZXBhcmF0ZWQgbGlzdAotICAg
IHN0YXRlID0gaXNCb29sID8gc3RhdGUgOiAhc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICk7Ci0g
ICAgc2VsZlsgc3RhdGUgPyAiYWRkQ2xhc3MiIDogInJlbW92ZUNsYXNzIiBdKCBjbGFzc05hbWUg
KTsKLSAgICB9Ci0KLSAgICAvLyBUb2dnbGUgd2hvbGUgY2xhc3MgbmFtZQotICAgIH0gZWxzZSBp
ZiAoIHR5cGUgPT09IGNvcmVfc3RydW5kZWZpbmVkIHx8IHR5cGUgPT09ICJib29sZWFuIiApIHsK
LSAgICBpZiAoIHRoaXMuY2xhc3NOYW1lICkgewotICAgIC8vIHN0b3JlIGNsYXNzTmFtZSBpZiBz
ZXQKLSAgICBqUXVlcnkuX2RhdGEoIHRoaXMsICJfX2NsYXNzTmFtZV9fIiwgdGhpcy5jbGFzc05h
bWUgKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgZWxlbWVudCBoYXMgYSBjbGFzcyBuYW1lIG9y
IGlmIHdlJ3JlIHBhc3NlZCAiZmFsc2UiLAotICAgIC8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBj
bGFzc25hbWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuCi0gICAgLy8g
T3RoZXJ3aXNlIGJyaW5nIGJhY2sgd2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgc2F2ZWQgKGlmIGFu
eXRoaW5nKSwKLSAgICAvLyBmYWxsaW5nIGJhY2sgdG8gdGhlIGVtcHR5IHN0cmluZyBpZiBub3Ro
aW5nIHdhcyBzdG9yZWQuCi0gICAgdGhpcy5jbGFzc05hbWUgPSB0aGlzLmNsYXNzTmFtZSB8fCB2
YWx1ZSA9PT0gZmFsc2UgPyAiIiA6IGpRdWVyeS5fZGF0YSggdGhpcywgIl9fY2xhc3NOYW1lX18i
ICkgfHwgIiI7Ci0gICAgfQotICAgIH0pOwotICAgIH0sCi0KLSAgICBoYXNDbGFzczogZnVuY3Rp
b24oIHNlbGVjdG9yICkgewotICAgIHZhciBjbGFzc05hbWUgPSAiICIgKyBzZWxlY3RvciArICIg
IiwKLSAgICBpID0gMCwKLSAgICBsID0gdGhpcy5sZW5ndGg7Ci0gICAgZm9yICggOyBpIDwgbDsg
aSsrICkgewotICAgIGlmICggdGhpc1tpXS5ub2RlVHlwZSA9PT0gMSAmJiAoIiAiICsgdGhpc1tp
XS5jbGFzc05hbWUgKyAiICIpLnJlcGxhY2UocmNsYXNzLCAiICIpLmluZGV4T2YoIGNsYXNzTmFt
ZSApID49IDAgKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVy
biBmYWxzZTsKLSAgICB9LAotCi0gICAgdmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7Ci0gICAgdmFy
IHJldCwgaG9va3MsIGlzRnVuY3Rpb24sCi0gICAgZWxlbSA9IHRoaXNbMF07Ci0KLSAgICBpZiAo
ICFhcmd1bWVudHMubGVuZ3RoICkgewotICAgIGlmICggZWxlbSApIHsKLSAgICBob29rcyA9IGpR
dWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVO
YW1lLnRvTG93ZXJDYXNlKCkgXTsKLQotICAgIGlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3Mg
JiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgInZhbHVlIiApKSAhPT0gdW5kZWZpbmVkICkgewot
ICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAgcmV0ID0gZWxlbS52YWx1ZTsKLQotICAgIHJl
dHVybiB0eXBlb2YgcmV0ID09PSAic3RyaW5nIiA/Ci0gICAgLy8gaGFuZGxlIG1vc3QgY29tbW9u
IHN0cmluZyBjYXNlcwotICAgIHJldC5yZXBsYWNlKHJyZXR1cm4sICIiKSA6Ci0gICAgLy8gaGFu
ZGxlIGNhc2VzIHdoZXJlIHZhbHVlIGlzIG51bGwvdW5kZWYgb3IgbnVtYmVyCi0gICAgcmV0ID09
IG51bGwgPyAiIiA6IHJldDsKLSAgICB9Ci0KLSAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaXNG
dW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApOwotCi0gICAgcmV0dXJuIHRoaXMu
ZWFjaChmdW5jdGlvbiggaSApIHsKLSAgICB2YXIgdmFsLAotICAgIHNlbGYgPSBqUXVlcnkodGhp
cyk7Ci0KLSAgICBpZiAoIHRoaXMubm9kZVR5cGUgIT09IDEgKSB7Ci0gICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmICggaXNGdW5jdGlvbiApIHsKLSAgICB2YWwgPSB2YWx1ZS5jYWxsKCB0aGlz
LCBpLCBzZWxmLnZhbCgpICk7Ci0gICAgfSBlbHNlIHsKLSAgICB2YWwgPSB2YWx1ZTsKLSAgICB9
Ci0KLSAgICAvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyAiIjsgY29udmVydCBudW1iZXJzIHRv
IHN0cmluZwotICAgIGlmICggdmFsID09IG51bGwgKSB7Ci0gICAgdmFsID0gIiI7Ci0gICAgfSBl
bHNlIGlmICggdHlwZW9mIHZhbCA9PT0gIm51bWJlciIgKSB7Ci0gICAgdmFsICs9ICIiOwotICAg
IH0gZWxzZSBpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWwgKSApIHsKLSAgICB2YWwgPSBqUXVlcnku
bWFwKHZhbCwgZnVuY3Rpb24gKCB2YWx1ZSApIHsKLSAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/
ICIiIDogdmFsdWUgKyAiIjsKLSAgICB9KTsKLSAgICB9Ci0KLSAgICBob29rcyA9IGpRdWVyeS52
YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRv
TG93ZXJDYXNlKCkgXTsKLQotICAgIC8vIElmIHNldCByZXR1cm5zIHVuZGVmaW5lZCwgZmFsbCBi
YWNrIHRvIG5vcm1hbCBzZXR0aW5nCi0gICAgaWYgKCAhaG9va3MgfHwgISgic2V0IiBpbiBob29r
cykgfHwgaG9va3Muc2V0KCB0aGlzLCB2YWwsICJ2YWx1ZSIgKSA9PT0gdW5kZWZpbmVkICkgewot
ICAgIHRoaXMudmFsdWUgPSB2YWw7Ci0gICAgfQotICAgIH0pOwotICAgIH0KLX0pOwotCi1qUXVl
cnkuZXh0ZW5kKHsKLSAgICB2YWxIb29rczogewotICAgIG9wdGlvbjogewotICAgIGdldDogZnVu
Y3Rpb24oIGVsZW0gKSB7Ci0gICAgLy8gYXR0cmlidXRlcy52YWx1ZSBpcyB1bmRlZmluZWQgaW4g
QmxhY2tiZXJyeSA0LjcgYnV0Ci0gICAgLy8gdXNlcyAudmFsdWUuIFNlZSAjNjkzMgotICAgIHZh
ciB2YWwgPSBlbGVtLmF0dHJpYnV0ZXMudmFsdWU7Ci0gICAgcmV0dXJuICF2YWwgfHwgdmFsLnNw
ZWNpZmllZCA/IGVsZW0udmFsdWUgOiBlbGVtLnRleHQ7Ci0gICAgfQotICAgIH0sCi0gICAgc2Vs
ZWN0OiB7Ci0gICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICB2YXIgdmFsdWUsIG9wdGlv
biwKLSAgICBvcHRpb25zID0gZWxlbS5vcHRpb25zLAotICAgIGluZGV4ID0gZWxlbS5zZWxlY3Rl
ZEluZGV4LAotICAgIG9uZSA9IGVsZW0udHlwZSA9PT0gInNlbGVjdC1vbmUiIHx8IGluZGV4IDwg
MCwKLSAgICB2YWx1ZXMgPSBvbmUgPyBudWxsIDogW10sCi0gICAgbWF4ID0gb25lID8gaW5kZXgg
KyAxIDogb3B0aW9ucy5sZW5ndGgsCi0gICAgaSA9IGluZGV4IDwgMCA/Ci0gICAgbWF4IDoKLSAg
ICBvbmUgPyBpbmRleCA6IDA7Ci0KLSAgICAvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3Rl
ZCBvcHRpb25zCi0gICAgZm9yICggOyBpIDwgbWF4OyBpKysgKSB7Ci0gICAgb3B0aW9uID0gb3B0
aW9uc1sgaSBdOwotCi0gICAgLy8gb2xkSUUgZG9lc24ndCB1cGRhdGUgc2VsZWN0ZWQgYWZ0ZXIg
Zm9ybSByZXNldCAoIzI1NTEpCi0gICAgaWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBp
bmRleCApICYmCi0gICAgLy8gRG9uJ3QgcmV0dXJuIG9wdGlvbnMgdGhhdCBhcmUgZGlzYWJsZWQg
b3IgaW4gYSBkaXNhYmxlZCBvcHRncm91cAotICAgICggalF1ZXJ5LnN1cHBvcnQub3B0RGlzYWJs
ZWQgPyAhb3B0aW9uLmRpc2FibGVkIDogb3B0aW9uLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKSA9
PT0gbnVsbCApICYmCi0gICAgKCAhb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHwgIWpRdWVy
eS5ub2RlTmFtZSggb3B0aW9uLnBhcmVudE5vZGUsICJvcHRncm91cCIgKSApICkgewotCi0gICAg
Ly8gR2V0IHRoZSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhlIG9wdGlvbgotICAgIHZhbHVlID0galF1
ZXJ5KCBvcHRpb24gKS52YWwoKTsKLQotICAgIC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9y
IG9uZSBzZWxlY3RzCi0gICAgaWYgKCBvbmUgKSB7Ci0gICAgcmV0dXJuIHZhbHVlOwotICAgIH0K
LQotICAgIC8vIE11bHRpLVNlbGVjdHMgcmV0dXJuIGFuIGFycmF5Ci0gICAgdmFsdWVzLnB1c2go
IHZhbHVlICk7Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiB2YWx1ZXM7Ci0gICAgfSwKLQot
ICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewotICAgIHZhciB2YWx1ZXMgPSBqUXVl
cnkubWFrZUFycmF5KCB2YWx1ZSApOwotCi0gICAgalF1ZXJ5KGVsZW0pLmZpbmQoIm9wdGlvbiIp
LmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5zZWxlY3RlZCA9IGpRdWVyeS5pbkFycmF5KCBq
UXVlcnkodGhpcykudmFsKCksIHZhbHVlcyApID49IDA7Ci0gICAgfSk7Ci0KLSAgICBpZiAoICF2
YWx1ZXMubGVuZ3RoICkgewotICAgIGVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xOwotICAgIH0KLSAg
ICByZXR1cm4gdmFsdWVzOwotICAgIH0KLSAgICB9Ci0gICAgfSwKLQotICAgIGF0dHI6IGZ1bmN0
aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHsKLSAgICB2YXIgaG9va3MsIG5vdHhtbCwgcmV0LAot
ICAgIG5UeXBlID0gZWxlbS5ub2RlVHlwZTsKLQotICAgIC8vIGRvbid0IGdldC9zZXQgYXR0cmli
dXRlcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXMKLSAgICBpZiAoICFlbGVt
IHx8IG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkgewotICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBGYWxsYmFjayB0byBwcm9wIHdoZW4gYXR0cmlidXRlcyBh
cmUgbm90IHN1cHBvcnRlZAotICAgIGlmICggdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlID09PSBj
b3JlX3N0cnVuZGVmaW5lZCApIHsKLSAgICByZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUs
IHZhbHVlICk7Ci0gICAgfQotCi0gICAgbm90eG1sID0gblR5cGUgIT09IDEgfHwgIWpRdWVyeS5p
c1hNTERvYyggZWxlbSApOwotCi0gICAgLy8gQWxsIGF0dHJpYnV0ZXMgYXJlIGxvd2VyY2FzZQot
ICAgIC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWQKLSAgICBpZiAoIG5v
dHhtbCApIHsKLSAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOwotICAgIGhvb2tzID0galF1
ZXJ5LmF0dHJIb29rc1sgbmFtZSBdIHx8ICggcmJvb2xlYW4udGVzdCggbmFtZSApID8gYm9vbEhv
b2sgOiBub2RlSG9vayApOwotICAgIH0KLQotICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCAp
IHsKLQotICAgIGlmICggdmFsdWUgPT09IG51bGwgKSB7Ci0gICAgalF1ZXJ5LnJlbW92ZUF0dHIo
IGVsZW0sIG5hbWUgKTsKLQotICAgIH0gZWxzZSBpZiAoIGhvb2tzICYmIG5vdHhtbCAmJiAic2V0
IiBpbiBob29rcyAmJiAocmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApKSAhPT0g
dW5kZWZpbmVkICkgewotICAgIHJldHVybiByZXQ7Ci0KLSAgICB9IGVsc2UgewotICAgIGVsZW0u
c2V0QXR0cmlidXRlKCBuYW1lLCB2YWx1ZSArICIiICk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICAg
IH0KLQotICAgIH0gZWxzZSBpZiAoIGhvb2tzICYmIG5vdHhtbCAmJiAiZ2V0IiBpbiBob29rcyAm
JiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkpICE9PSBudWxsICkgewotICAgIHJldHVy
biByZXQ7Ci0KLSAgICB9IGVsc2UgewotCi0gICAgLy8gSW4gSUU5KywgRmxhc2ggb2JqZWN0cyBk
b24ndCBoYXZlIC5nZXRBdHRyaWJ1dGUgKCMxMjk0NSkKLSAgICAvLyBTdXBwb3J0OiBJRTkrCi0g
ICAgaWYgKCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgIT09IGNvcmVfc3RydW5kZWZpbmVkICkg
ewotICAgIHJldCA9ICBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApOwotICAgIH0KLQotICAgIC8v
IE5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5k
ZWZpbmVkCi0gICAgcmV0dXJuIHJldCA9PSBudWxsID8KLSAgICB1bmRlZmluZWQgOgotICAgIHJl
dDsKLSAgICB9Ci0gICAgfSwKLQotICAgIHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1
ZSApIHsKLSAgICB2YXIgbmFtZSwgcHJvcE5hbWUsCi0gICAgaSA9IDAsCi0gICAgYXR0ck5hbWVz
ID0gdmFsdWUgJiYgdmFsdWUubWF0Y2goIGNvcmVfcm5vdHdoaXRlICk7Ci0KLSAgICBpZiAoIGF0
dHJOYW1lcyAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkgewotICAgIHdoaWxlICggKG5hbWUgPSBh
dHRyTmFtZXNbaSsrXSkgKSB7Ci0gICAgcHJvcE5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBd
IHx8IG5hbWU7Ci0KLSAgICAvLyBCb29sZWFuIGF0dHJpYnV0ZXMgZ2V0IHNwZWNpYWwgdHJlYXRt
ZW50ICgjMTA4NzApCi0gICAgaWYgKCByYm9vbGVhbi50ZXN0KCBuYW1lICkgKSB7Ci0gICAgLy8g
U2V0IGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgdG8gZmFsc2UgZm9yIGJvb2xlYW4gYXR0cmlidXRl
cwotICAgIC8vIEFsc28gY2xlYXIgZGVmYXVsdENoZWNrZWQvZGVmYXVsdFNlbGVjdGVkIChpZiBh
cHByb3ByaWF0ZSkgZm9yIElFPDgKLSAgICBpZiAoICFnZXRTZXRBdHRyaWJ1dGUgJiYgcnVzZURl
ZmF1bHQudGVzdCggbmFtZSApICkgewotICAgIGVsZW1bIGpRdWVyeS5jYW1lbENhc2UoICJkZWZh
dWx0LSIgKyBuYW1lICkgXSA9Ci0gICAgZWxlbVsgcHJvcE5hbWUgXSA9IGZhbHNlOwotICAgIH0g
ZWxzZSB7Ci0gICAgZWxlbVsgcHJvcE5hbWUgXSA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIFNl
ZSAjOTY5OSBmb3IgZXhwbGFuYXRpb24gb2YgdGhpcyBhcHByb2FjaCAoc2V0dGluZyBmaXJzdCwg
dGhlbiByZW1vdmFsKQotICAgIH0gZWxzZSB7Ci0gICAgalF1ZXJ5LmF0dHIoIGVsZW0sIG5hbWUs
ICIiICk7Ci0gICAgfQotCi0gICAgZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIGdldFNldEF0dHJpYnV0
ZSA/IG5hbWUgOiBwcm9wTmFtZSApOwotICAgIH0KLSAgICB9Ci0gICAgfSwKLQotICAgIGF0dHJI
b29rczogewotICAgIHR5cGU6IHsKLSAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsK
LSAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5yYWRpb1ZhbHVlICYmIHZhbHVlID09PSAicmFkaW8i
ICYmIGpRdWVyeS5ub2RlTmFtZShlbGVtLCAiaW5wdXQiKSApIHsKLSAgICAvLyBTZXR0aW5nIHRo
ZSB0eXBlIG9uIGEgcmFkaW8gYnV0dG9uIGFmdGVyIHRoZSB2YWx1ZSByZXNldHMgdGhlIHZhbHVl
IGluIElFNi05Ci0gICAgLy8gUmVzZXQgdmFsdWUgdG8gZGVmYXVsdCBpbiBjYXNlIHR5cGUgaXMg
c2V0IGFmdGVyIHZhbHVlIGR1cmluZyBjcmVhdGlvbgotICAgIHZhciB2YWwgPSBlbGVtLnZhbHVl
OwotICAgIGVsZW0uc2V0QXR0cmlidXRlKCAidHlwZSIsIHZhbHVlICk7Ci0gICAgaWYgKCB2YWwg
KSB7Ci0gICAgZWxlbS52YWx1ZSA9IHZhbDsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlOwotICAg
IH0KLSAgICB9Ci0gICAgfQotICAgIH0sCi0KLSAgICBwcm9wRml4OiB7Ci0gICAgdGFiaW5kZXg6
ICJ0YWJJbmRleCIsCi0gICAgcmVhZG9ubHk6ICJyZWFkT25seSIsCi0gICAgImZvciI6ICJodG1s
Rm9yIiwKLSAgICAiY2xhc3MiOiAiY2xhc3NOYW1lIiwKLSAgICBtYXhsZW5ndGg6ICJtYXhMZW5n
dGgiLAotICAgIGNlbGxzcGFjaW5nOiAiY2VsbFNwYWNpbmciLAotICAgIGNlbGxwYWRkaW5nOiAi
Y2VsbFBhZGRpbmciLAotICAgIHJvd3NwYW46ICJyb3dTcGFuIiwKLSAgICBjb2xzcGFuOiAiY29s
U3BhbiIsCi0gICAgdXNlbWFwOiAidXNlTWFwIiwKLSAgICBmcmFtZWJvcmRlcjogImZyYW1lQm9y
ZGVyIiwKLSAgICBjb250ZW50ZWRpdGFibGU6ICJjb250ZW50RWRpdGFibGUiCi0gICAgfSwKLQot
ICAgIHByb3A6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHsKLSAgICB2YXIgcmV0LCBo
b29rcywgbm90eG1sLAotICAgIG5UeXBlID0gZWxlbS5ub2RlVHlwZTsKLQotICAgIC8vIGRvbid0
IGdldC9zZXQgcHJvcGVydGllcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXMK
LSAgICBpZiAoICFlbGVtIHx8IG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09
PSAyICkgewotICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBub3R4bWwgPSBuVHlwZSAhPT0gMSB8
fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICk7Ci0KLSAgICBpZiAoIG5vdHhtbCApIHsKLSAgICAv
LyBGaXggbmFtZSBhbmQgYXR0YWNoIGhvb2tzCi0gICAgbmFtZSA9IGpRdWVyeS5wcm9wRml4WyBu
YW1lIF0gfHwgbmFtZTsKLSAgICBob29rcyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTsKLSAg
ICB9Ci0KLSAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgaWYgKCBob29rcyAm
JiAic2V0IiBpbiBob29rcyAmJiAocmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSAp
KSAhPT0gdW5kZWZpbmVkICkgewotICAgIHJldHVybiByZXQ7Ci0KLSAgICB9IGVsc2UgewotICAg
IHJldHVybiAoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7Ci0gICAgfQotCi0gICAgfSBlbHNlIHsK
LSAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5nZXQoIGVs
ZW0sIG5hbWUgKSkgIT09IG51bGwgKSB7Ci0gICAgcmV0dXJuIHJldDsKLQotICAgIH0gZWxzZSB7
Ci0gICAgcmV0dXJuIGVsZW1bIG5hbWUgXTsKLSAgICB9Ci0gICAgfQotICAgIH0sCi0KLSAgICBw
cm9wSG9va3M6IHsKLSAgICB0YWJJbmRleDogewotICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7
Ci0gICAgLy8gZWxlbS50YWJJbmRleCBkb2Vzbid0IGFsd2F5cyByZXR1cm4gdGhlIGNvcnJlY3Qg
dmFsdWUgd2hlbiBpdCBoYXNuJ3QgYmVlbiBleHBsaWNpdGx5IHNldAotICAgIC8vIGh0dHA6Ly9m
bHVpZHByb2plY3Qub3JnL2Jsb2cvMjAwOC8wMS8wOS9nZXR0aW5nLXNldHRpbmctYW5kLXJlbW92
aW5nLXRhYmluZGV4LXZhbHVlcy13aXRoLWphdmFzY3JpcHQvCi0gICAgdmFyIGF0dHJpYnV0ZU5v
ZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoInRhYmluZGV4Iik7Ci0KLSAgICByZXR1cm4gYXR0
cmlidXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCA/Ci0gICAgcGFyc2VJbnQoIGF0
dHJpYnV0ZU5vZGUudmFsdWUsIDEwICkgOgotICAgIHJmb2N1c2FibGUudGVzdCggZWxlbS5ub2Rl
TmFtZSApIHx8IHJjbGlja2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmIGVsZW0uaHJlZiA/
Ci0gICAgMCA6Ci0gICAgdW5kZWZpbmVkOwotICAgIH0KLSAgICB9Ci0gICAgfQotfSk7Ci0KLS8v
IEhvb2sgZm9yIGJvb2xlYW4gYXR0cmlidXRlcwotYm9vbEhvb2sgPSB7Ci0gICAgZ2V0OiBmdW5j
dGlvbiggZWxlbSwgbmFtZSApIHsKLSAgICB2YXIKLSAgICAvLyBVc2UgLnByb3AgdG8gZGV0ZXJt
aW5lIGlmIHRoaXMgYXR0cmlidXRlIGlzIHVuZGVyc3Rvb2QgYXMgYm9vbGVhbgotICAgIHByb3Ag
PSBqUXVlcnkucHJvcCggZWxlbSwgbmFtZSApLAotCi0gICAgLy8gRmV0Y2ggaXQgYWNjb3JkaW5n
bHkKLSAgICBhdHRyID0gdHlwZW9mIHByb3AgPT09ICJib29sZWFuIiAmJiBlbGVtLmdldEF0dHJp
YnV0ZSggbmFtZSApLAotICAgIGRldGFpbCA9IHR5cGVvZiBwcm9wID09PSAiYm9vbGVhbiIgPwot
Ci0gICAgZ2V0U2V0SW5wdXQgJiYgZ2V0U2V0QXR0cmlidXRlID8KLSAgICBhdHRyICE9IG51bGwg
OgotICAgIC8vIG9sZElFIGZhYnJpY2F0ZXMgYW4gZW1wdHkgc3RyaW5nIGZvciBtaXNzaW5nIGJv
b2xlYW4gYXR0cmlidXRlcwotICAgIC8vIGFuZCBjb25mbGF0ZXMgY2hlY2tlZC9zZWxlY3RlZCBp
bnRvIGF0dHJvcGVydGllcwotICAgIHJ1c2VEZWZhdWx0LnRlc3QoIG5hbWUgKSA/Ci0gICAgZWxl
bVsgalF1ZXJ5LmNhbWVsQ2FzZSggImRlZmF1bHQtIiArIG5hbWUgKSBdIDoKLSAgICAhIWF0dHIg
OgotCi0gICAgLy8gZmV0Y2ggYW4gYXR0cmlidXRlIG5vZGUgZm9yIHByb3BlcnRpZXMgbm90IHJl
Y29nbml6ZWQgYXMgYm9vbGVhbgotICAgIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApOwot
Ci0gICAgcmV0dXJuIGRldGFpbCAmJiBkZXRhaWwudmFsdWUgIT09IGZhbHNlID8KLSAgICBuYW1l
LnRvTG93ZXJDYXNlKCkgOgotICAgIHVuZGVmaW5lZDsKLSAgICB9LAotICAgIHNldDogZnVuY3Rp
b24oIGVsZW0sIHZhbHVlLCBuYW1lICkgewotICAgIGlmICggdmFsdWUgPT09IGZhbHNlICkgewot
ICAgIC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2UKLSAgICBq
UXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApOwotICAgIH0gZWxzZSBpZiAoIGdldFNldElu
cHV0ICYmIGdldFNldEF0dHJpYnV0ZSB8fCAhcnVzZURlZmF1bHQudGVzdCggbmFtZSApICkgewot
ICAgIC8vIElFPDggbmVlZHMgdGhlICpwcm9wZXJ0eSogbmFtZQotICAgIGVsZW0uc2V0QXR0cmli
dXRlKCAhZ2V0U2V0QXR0cmlidXRlICYmIGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZSwg
bmFtZSApOwotCi0gICAgLy8gVXNlIGRlZmF1bHRDaGVja2VkIGFuZCBkZWZhdWx0U2VsZWN0ZWQg
Zm9yIG9sZElFCi0gICAgfSBlbHNlIHsKLSAgICBlbGVtWyBqUXVlcnkuY2FtZWxDYXNlKCAiZGVm
YXVsdC0iICsgbmFtZSApIF0gPSBlbGVtWyBuYW1lIF0gPSB0cnVlOwotICAgIH0KLQotICAgIHJl
dHVybiBuYW1lOwotICAgIH0KLX07Ci0KLS8vIGZpeCBvbGRJRSB2YWx1ZSBhdHRyb3BlcnR5Ci1p
ZiAoICFnZXRTZXRJbnB1dCB8fCAhZ2V0U2V0QXR0cmlidXRlICkgewotICAgIGpRdWVyeS5hdHRy
SG9va3MudmFsdWUgPSB7Ci0gICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKLSAgICB2
YXIgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICk7Ci0gICAgcmV0dXJuIGpRdWVy
eS5ub2RlTmFtZSggZWxlbSwgImlucHV0IiApID8KLQotICAgIC8vIElnbm9yZSB0aGUgdmFsdWUg
KnByb3BlcnR5KiBieSB1c2luZyBkZWZhdWx0VmFsdWUKLSAgICBlbGVtLmRlZmF1bHRWYWx1ZSA6
Ci0KLSAgICByZXQgJiYgcmV0LnNwZWNpZmllZCA/IHJldC52YWx1ZSA6IHVuZGVmaW5lZDsKLSAg
ICB9LAotICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkgewotICAgIGlmICgg
alF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaW5wdXQiICkgKSB7Ci0gICAgLy8gRG9lcyBub3QgcmV0
dXJuIHNvIHRoYXQgc2V0QXR0cmlidXRlIGlzIGFsc28gdXNlZAotICAgIGVsZW0uZGVmYXVsdFZh
bHVlID0gdmFsdWU7Ci0gICAgfSBlbHNlIHsKLSAgICAvLyBVc2Ugbm9kZUhvb2sgaWYgZGVmaW5l
ZCAoIzE5NTQpOyBvdGhlcndpc2Ugc2V0QXR0cmlidXRlIGlzIGZpbmUKLSAgICByZXR1cm4gbm9k
ZUhvb2sgJiYgbm9kZUhvb2suc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApOwotICAgIH0KLSAgICB9
Ci0gICAgfTsKLX0KLQotLy8gSUU2LzcgZG8gbm90IHN1cHBvcnQgZ2V0dGluZy9zZXR0aW5nIHNv
bWUgYXR0cmlidXRlcyB3aXRoIGdldC9zZXRBdHRyaWJ1dGUKLWlmICggIWdldFNldEF0dHJpYnV0
ZSApIHsKLQotICAgIC8vIFVzZSB0aGlzIGZvciBhbnkgYXR0cmlidXRlIGluIElFNi83Ci0gICAg
Ly8gVGhpcyBmaXhlcyBhbG1vc3QgZXZlcnkgSUU2LzcgaXNzdWUKLSAgICBub2RlSG9vayA9IGpR
dWVyeS52YWxIb29rcy5idXR0b24gPSB7Ci0gICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgbmFtZSAp
IHsKLSAgICB2YXIgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICk7Ci0gICAgcmV0
dXJuIHJldCAmJiAoIG5hbWUgPT09ICJpZCIgfHwgbmFtZSA9PT0gIm5hbWUiIHx8IG5hbWUgPT09
ICJjb29yZHMiID8gcmV0LnZhbHVlICE9PSAiIiA6IHJldC5zcGVjaWZpZWQgKSA/Ci0gICAgcmV0
LnZhbHVlIDoKLSAgICB1bmRlZmluZWQ7Ci0gICAgfSwKLSAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVt
LCB2YWx1ZSwgbmFtZSApIHsKLSAgICAvLyBTZXQgdGhlIGV4aXN0aW5nIG9yIGNyZWF0ZSBhIG5l
dyBhdHRyaWJ1dGUgbm9kZQotICAgIHZhciByZXQgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5h
bWUgKTsKLSAgICBpZiAoICFyZXQgKSB7Ci0gICAgZWxlbS5zZXRBdHRyaWJ1dGVOb2RlKAotICAg
IChyZXQgPSBlbGVtLm93bmVyRG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKCBuYW1lICkpCi0gICAg
KTsKLSAgICB9Ci0KLSAgICByZXQudmFsdWUgPSB2YWx1ZSArPSAiIjsKLQotICAgIC8vIEJyZWFr
IGFzc29jaWF0aW9uIHdpdGggY2xvbmVkIGVsZW1lbnRzIGJ5IGFsc28gdXNpbmcgc2V0QXR0cmli
dXRlICgjOTY0NikKLSAgICByZXR1cm4gbmFtZSA9PT0gInZhbHVlIiB8fCB2YWx1ZSA9PT0gZWxl
bS5nZXRBdHRyaWJ1dGUoIG5hbWUgKSA/Ci0gICAgdmFsdWUgOgotICAgIHVuZGVmaW5lZDsKLSAg
ICB9Ci0gICAgfTsKLQotICAgIC8vIFNldCBjb250ZW50ZWRpdGFibGUgdG8gZmFsc2Ugb24gcmVt
b3ZhbHMoIzEwNDI5KQotICAgIC8vIFNldHRpbmcgdG8gZW1wdHkgc3RyaW5nIHRocm93cyBhbiBl
cnJvciBhcyBhbiBpbnZhbGlkIHZhbHVlCi0gICAgalF1ZXJ5LmF0dHJIb29rcy5jb250ZW50ZWRp
dGFibGUgPSB7Ci0gICAgZ2V0OiBub2RlSG9vay5nZXQsCi0gICAgc2V0OiBmdW5jdGlvbiggZWxl
bSwgdmFsdWUsIG5hbWUgKSB7Ci0gICAgbm9kZUhvb2suc2V0KCBlbGVtLCB2YWx1ZSA9PT0gIiIg
PyBmYWxzZSA6IHZhbHVlLCBuYW1lICk7Ci0gICAgfQotICAgIH07Ci0KLSAgICAvLyBTZXQgd2lk
dGggYW5kIGhlaWdodCB0byBhdXRvIGluc3RlYWQgb2YgMCBvbiBlbXB0eSBzdHJpbmcoIEJ1ZyAj
ODE1MCApCi0gICAgLy8gVGhpcyBpcyBmb3IgcmVtb3ZhbHMKLSAgICBqUXVlcnkuZWFjaChbICJ3
aWR0aCIsICJoZWlnaHQiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgewotICAgIGpRdWVyeS5hdHRy
SG9va3NbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGpRdWVyeS5hdHRySG9va3NbIG5hbWUgXSwg
ewotICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewotICAgIGlmICggdmFsdWUgPT09
ICIiICkgewotICAgIGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCAiYXV0byIgKTsKLSAgICByZXR1
cm4gdmFsdWU7Ci0gICAgfQotICAgIH0KLSAgICB9KTsKLSAgICB9KTsKLX0KLQotCi0vLyBTb21l
IGF0dHJpYnV0ZXMgcmVxdWlyZSBhIHNwZWNpYWwgY2FsbCBvbiBJRQotLy8gaHR0cDovL21zZG4u
bWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTM2NDI5JTI4VlMuODUlMjkuYXNweAotaWYg
KCAhalF1ZXJ5LnN1cHBvcnQuaHJlZk5vcm1hbGl6ZWQgKSB7Ci0gICAgalF1ZXJ5LmVhY2goWyAi
aHJlZiIsICJzcmMiLCAid2lkdGgiLCAiaGVpZ2h0IiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsK
LSAgICBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkuYXR0
ckhvb2tzWyBuYW1lIF0sIHsKLSAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHZhciBy
ZXQgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgMiApOwotICAgIHJldHVybiByZXQgPT0gbnVs
bCA/IHVuZGVmaW5lZCA6IHJldDsKLSAgICB9Ci0gICAgfSk7Ci0gICAgfSk7Ci0KLSAgICAvLyBo
cmVmL3NyYyBwcm9wZXJ0eSBzaG91bGQgZ2V0IHRoZSBmdWxsIG5vcm1hbGl6ZWQgVVJMICgjMTAy
OTkvIzEyOTE1KQotICAgIGpRdWVyeS5lYWNoKFsgImhyZWYiLCAic3JjIiBdLCBmdW5jdGlvbigg
aSwgbmFtZSApIHsKLSAgICBqUXVlcnkucHJvcEhvb2tzWyBuYW1lIF0gPSB7Ci0gICAgZ2V0OiBm
dW5jdGlvbiggZWxlbSApIHsKLSAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUsIDQg
KTsKLSAgICB9Ci0gICAgfTsKLSAgICB9KTsKLX0KLQotaWYgKCAhalF1ZXJ5LnN1cHBvcnQuc3R5
bGUgKSB7Ci0gICAgalF1ZXJ5LmF0dHJIb29rcy5zdHlsZSA9IHsKLSAgICBnZXQ6IGZ1bmN0aW9u
KCBlbGVtICkgewotICAgIC8vIFJldHVybiB1bmRlZmluZWQgaW4gdGhlIGNhc2Ugb2YgZW1wdHkg
c3RyaW5nCi0gICAgLy8gTm90ZTogSUUgdXBwZXJjYXNlcyBjc3MgcHJvcGVydHkgbmFtZXMsIGJ1
dCBpZiB3ZSB3ZXJlIHRvIC50b0xvd2VyQ2FzZSgpCi0gICAgLy8gLmNzc1RleHQsIHRoYXQgd291
bGQgZGVzdHJveSBjYXNlIHNlbnN0aXRpdml0eSBpbiBVUkwncywgbGlrZSBpbiAiYmFja2dyb3Vu
ZCIKLSAgICByZXR1cm4gZWxlbS5zdHlsZS5jc3NUZXh0IHx8IHVuZGVmaW5lZDsKLSAgICB9LAot
ICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewotICAgIHJldHVybiAoIGVsZW0uc3R5
bGUuY3NzVGV4dCA9IHZhbHVlICsgIiIgKTsKLSAgICB9Ci0gICAgfTsKLX0KLQotLy8gU2FmYXJp
IG1pcy1yZXBvcnRzIHRoZSBkZWZhdWx0IHNlbGVjdGVkIHByb3BlcnR5IG9mIGFuIG9wdGlvbgot
Ly8gQWNjZXNzaW5nIHRoZSBwYXJlbnQncyBzZWxlY3RlZEluZGV4IHByb3BlcnR5IGZpeGVzIGl0
Ci1pZiAoICFqUXVlcnkuc3VwcG9ydC5vcHRTZWxlY3RlZCApIHsKLSAgICBqUXVlcnkucHJvcEhv
b2tzLnNlbGVjdGVkID0galF1ZXJ5LmV4dGVuZCggalF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCwg
ewotICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgdmFyIHBhcmVudCA9IGVsZW0ucGFy
ZW50Tm9kZTsKLQotICAgIGlmICggcGFyZW50ICkgewotICAgIHBhcmVudC5zZWxlY3RlZEluZGV4
OwotCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgaXQgYWxzbyB3b3JrcyB3aXRoIG9wdGdyb3Vwcywg
c2VlICM1NzAxCi0gICAgaWYgKCBwYXJlbnQucGFyZW50Tm9kZSApIHsKLSAgICBwYXJlbnQucGFy
ZW50Tm9kZS5zZWxlY3RlZEluZGV4OwotICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0g
ICAgfQotICAgIH0pOwotfQotCi0vLyBJRTYvNyBjYWxsIGVuY3R5cGUgZW5jb2RpbmcKLWlmICgg
IWpRdWVyeS5zdXBwb3J0LmVuY3R5cGUgKSB7Ci0gICAgalF1ZXJ5LnByb3BGaXguZW5jdHlwZSA9
ICJlbmNvZGluZyI7Ci19Ci0KLS8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVy
Ci1pZiAoICFqUXVlcnkuc3VwcG9ydC5jaGVja09uICkgewotICAgIGpRdWVyeS5lYWNoKFsgInJh
ZGlvIiwgImNoZWNrYm94IiBdLCBmdW5jdGlvbigpIHsKLSAgICBqUXVlcnkudmFsSG9va3NbIHRo
aXMgXSA9IHsKLSAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIC8vIEhhbmRsZSB0aGUg
Y2FzZSB3aGVyZSBpbiBXZWJraXQgIiIgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiAib24iIGlmIGEg
dmFsdWUgaXNuJ3Qgc3BlY2lmaWVkCi0gICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJ2YWx1
ZSIpID09PSBudWxsID8gIm9uIiA6IGVsZW0udmFsdWU7Ci0gICAgfQotICAgIH07Ci0gICAgfSk7
Ci19Ci1qUXVlcnkuZWFjaChbICJyYWRpbyIsICJjaGVja2JveCIgXSwgZnVuY3Rpb24oKSB7Ci0g
ICAgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkudmFsSG9v
a3NbIHRoaXMgXSwgewotICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewotICAgIGlm
ICggalF1ZXJ5LmlzQXJyYXkoIHZhbHVlICkgKSB7Ci0gICAgcmV0dXJuICggZWxlbS5jaGVja2Vk
ID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeShlbGVtKS52YWwoKSwgdmFsdWUgKSA+PSAwICk7Ci0g
ICAgfQotICAgIH0KLSAgICB9KTsKLX0pOwotdmFyIHJmb3JtRWxlbXMgPSAvXig/OmlucHV0fHNl
bGVjdHx0ZXh0YXJlYSkkL2ksCi0gICAgcmtleUV2ZW50ID0gL15rZXkvLAotICAgIHJtb3VzZUV2
ZW50ID0gL14oPzptb3VzZXxjb250ZXh0bWVudSl8Y2xpY2svLAotICAgIHJmb2N1c01vcnBoID0g
L14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLAotICAgIHJ0eXBlbmFtZXNwYWNlID0g
L14oW14uXSopKD86XC4oLispfCkkLzsKLQotZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi0vKgotICogSGVscGVyIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgZXZlbnRzIC0t
IG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLgotICogUHJvcHMgdG8gRGVhbiBFZHdh
cmRzJyBhZGRFdmVudCBsaWJyYXJ5IGZvciBtYW55IG9mIHRoZSBpZGVhcy4KLSAqLwotalF1ZXJ5
LmV2ZW50ID0gewotCi0gICAgZ2xvYmFsOiB7fSwKLQotICAgIGFkZDogZnVuY3Rpb24oIGVsZW0s
IHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHsKLSAgICB2YXIgdG1wLCBldmVudHMs
IHQsIGhhbmRsZU9iakluLAotICAgIHNwZWNpYWwsIGV2ZW50SGFuZGxlLCBoYW5kbGVPYmosCi0g
ICAgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLAotICAgIGVsZW1EYXRhID0g
alF1ZXJ5Ll9kYXRhKCBlbGVtICk7Ci0KLSAgICAvLyBEb24ndCBhdHRhY2ggZXZlbnRzIHRvIG5v
RGF0YSBvciB0ZXh0L2NvbW1lbnQgbm9kZXMgKGJ1dCBhbGxvdyBwbGFpbiBvYmplY3RzKQotICAg
IGlmICggIWVsZW1EYXRhICkgewotICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDYWxsZXIg
Y2FuIHBhc3MgaW4gYW4gb2JqZWN0IG9mIGN1c3RvbSBkYXRhIGluIGxpZXUgb2YgdGhlIGhhbmRs
ZXIKLSAgICBpZiAoIGhhbmRsZXIuaGFuZGxlciApIHsKLSAgICBoYW5kbGVPYmpJbiA9IGhhbmRs
ZXI7Ci0gICAgaGFuZGxlciA9IGhhbmRsZU9iakluLmhhbmRsZXI7Ci0gICAgc2VsZWN0b3IgPSBo
YW5kbGVPYmpJbi5zZWxlY3RvcjsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUg
aGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXIKLSAg
ICBpZiAoICFoYW5kbGVyLmd1aWQgKSB7Ci0gICAgaGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1aWQr
KzsKLSAgICB9Ci0KLSAgICAvLyBJbml0IHRoZSBlbGVtZW50J3MgZXZlbnQgc3RydWN0dXJlIGFu
ZCBtYWluIGhhbmRsZXIsIGlmIHRoaXMgaXMgdGhlIGZpcnN0Ci0gICAgaWYgKCAhKGV2ZW50cyA9
IGVsZW1EYXRhLmV2ZW50cykgKSB7Ci0gICAgZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzID0ge307
Ci0gICAgfQotICAgIGlmICggIShldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSkgKSB7Ci0g
ICAgZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgPSBmdW5jdGlvbiggZSApIHsKLSAgICAv
LyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFu
ZAotICAgIC8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5sb2Fk
ZWQKLSAgICByZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0gY29yZV9zdHJ1bmRlZmluZWQgJiYgKCFl
IHx8IGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSkgPwotICAgIGpRdWVyeS5ldmVu
dC5kaXNwYXRjaC5hcHBseSggZXZlbnRIYW5kbGUuZWxlbSwgYXJndW1lbnRzICkgOgotICAgIHVu
ZGVmaW5lZDsKLSAgICB9OwotICAgIC8vIEFkZCBlbGVtIGFzIGEgcHJvcGVydHkgb2YgdGhlIGhh
bmRsZSBmbiB0byBwcmV2ZW50IGEgbWVtb3J5IGxlYWsgd2l0aCBJRSBub24tbmF0aXZlIGV2ZW50
cwotICAgIGV2ZW50SGFuZGxlLmVsZW0gPSBlbGVtOwotICAgIH0KLQotICAgIC8vIEhhbmRsZSBt
dWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UKLSAgICAvLyBqUXVlcnkoLi4uKS5i
aW5kKCJtb3VzZW92ZXIgbW91c2VvdXQiLCBmbik7Ci0gICAgdHlwZXMgPSAoIHR5cGVzIHx8ICIi
ICkubWF0Y2goIGNvcmVfcm5vdHdoaXRlICkgfHwgWyIiXTsKLSAgICB0ID0gdHlwZXMubGVuZ3Ro
OwotICAgIHdoaWxlICggdC0tICkgewotICAgIHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5
cGVzW3RdICkgfHwgW107Ci0gICAgdHlwZSA9IG9yaWdUeXBlID0gdG1wWzFdOwotICAgIG5hbWVz
cGFjZXMgPSAoIHRtcFsyXSB8fCAiIiApLnNwbGl0KCAiLiIgKS5zb3J0KCk7Ci0KLSAgICAvLyBJ
ZiBldmVudCBjaGFuZ2VzIGl0cyB0eXBlLCB1c2UgdGhlIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMg
Zm9yIHRoZSBjaGFuZ2VkIHR5cGUKLSAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxb
IHR5cGUgXSB8fCB7fTsKLQotICAgIC8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBz
cGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZQotICAgIHR5cGUgPSAo
IHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwg
dHlwZTsKLQotICAgIC8vIFVwZGF0ZSBzcGVjaWFsIGJhc2VkIG9uIG5ld2x5IHJlc2V0IHR5cGUK
LSAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKLQotICAg
IC8vIGhhbmRsZU9iaiBpcyBwYXNzZWQgdG8gYWxsIGV2ZW50IGhhbmRsZXJzCi0gICAgaGFuZGxl
T2JqID0galF1ZXJ5LmV4dGVuZCh7Ci0gICAgdHlwZTogdHlwZSwKLSAgICBvcmlnVHlwZTogb3Jp
Z1R5cGUsCi0gICAgZGF0YTogZGF0YSwKLSAgICBoYW5kbGVyOiBoYW5kbGVyLAotICAgIGd1aWQ6
IGhhbmRsZXIuZ3VpZCwKLSAgICBzZWxlY3Rvcjogc2VsZWN0b3IsCi0gICAgbmVlZHNDb250ZXh0
OiBzZWxlY3RvciAmJiBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdCggc2VsZWN0
b3IgKSwKLSAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZXMuam9pbigiLiIpCi0gICAgfSwgaGFuZGxl
T2JqSW4gKTsKLQotICAgIC8vIEluaXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2UncmUg
dGhlIGZpcnN0Ci0gICAgaWYgKCAhKGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0pICkgewotICAg
IGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gPSBbXTsKLSAgICBoYW5kbGVycy5kZWxlZ2F0ZUNv
dW50ID0gMDsKLQotICAgIC8vIE9ubHkgdXNlIGFkZEV2ZW50TGlzdGVuZXIvYXR0YWNoRXZlbnQg
aWYgdGhlIHNwZWNpYWwgZXZlbnRzIGhhbmRsZXIgcmV0dXJucyBmYWxzZQotICAgIGlmICggIXNw
ZWNpYWwuc2V0dXAgfHwgc3BlY2lhbC5zZXR1cC5jYWxsKCBlbGVtLCBkYXRhLCBuYW1lc3BhY2Vz
LCBldmVudEhhbmRsZSApID09PSBmYWxzZSApIHsKLSAgICAvLyBCaW5kIHRoZSBnbG9iYWwgZXZl
bnQgaGFuZGxlciB0byB0aGUgZWxlbWVudAotICAgIGlmICggZWxlbS5hZGRFdmVudExpc3RlbmVy
ICkgewotICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUsIGZhbHNl
ICk7Ci0KLSAgICB9IGVsc2UgaWYgKCBlbGVtLmF0dGFjaEV2ZW50ICkgewotICAgIGVsZW0uYXR0
YWNoRXZlbnQoICJvbiIgKyB0eXBlLCBldmVudEhhbmRsZSApOwotICAgIH0KLSAgICB9Ci0gICAg
fQotCi0gICAgaWYgKCBzcGVjaWFsLmFkZCApIHsKLSAgICBzcGVjaWFsLmFkZC5jYWxsKCBlbGVt
LCBoYW5kbGVPYmogKTsKLQotICAgIGlmICggIWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgKSB7Ci0g
ICAgaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDsKLSAgICB9Ci0gICAgfQot
Ci0gICAgLy8gQWRkIHRvIHRoZSBlbGVtZW50J3MgaGFuZGxlciBsaXN0LCBkZWxlZ2F0ZXMgaW4g
ZnJvbnQKLSAgICBpZiAoIHNlbGVjdG9yICkgewotICAgIGhhbmRsZXJzLnNwbGljZSggaGFuZGxl
cnMuZGVsZWdhdGVDb3VudCsrLCAwLCBoYW5kbGVPYmogKTsKLSAgICB9IGVsc2UgewotICAgIGhh
bmRsZXJzLnB1c2goIGhhbmRsZU9iaiApOwotICAgIH0KLQotICAgIC8vIEtlZXAgdHJhY2sgb2Yg
d2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb24K
LSAgICBqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gPSB0cnVlOwotICAgIH0KLQotICAgIC8v
IE51bGxpZnkgZWxlbSB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBpbiBJRQotICAgIGVsZW0gPSBu
dWxsOwotICAgIH0sCi0KLSAgICAvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBm
cm9tIGFuIGVsZW1lbnQKLSAgICByZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxl
ciwgc2VsZWN0b3IsIG1hcHBlZFR5cGVzICkgewotICAgIHZhciBqLCBoYW5kbGVPYmosIHRtcCwK
LSAgICBvcmlnQ291bnQsIHQsIGV2ZW50cywKLSAgICBzcGVjaWFsLCBoYW5kbGVycywgdHlwZSwK
LSAgICBuYW1lc3BhY2VzLCBvcmlnVHlwZSwKLSAgICBlbGVtRGF0YSA9IGpRdWVyeS5oYXNEYXRh
KCBlbGVtICkgJiYgalF1ZXJ5Ll9kYXRhKCBlbGVtICk7Ci0KLSAgICBpZiAoICFlbGVtRGF0YSB8
fCAhKGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cykgKSB7Ci0gICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIE9uY2UgZm9yIGVhY2ggdHlwZS5uYW1lc3BhY2UgaW4gdHlwZXM7IHR5cGUgbWF5IGJl
IG9taXR0ZWQKLSAgICB0eXBlcyA9ICggdHlwZXMgfHwgIiIgKS5tYXRjaCggY29yZV9ybm90d2hp
dGUgKSB8fCBbIiJdOwotICAgIHQgPSB0eXBlcy5sZW5ndGg7Ci0gICAgd2hpbGUgKCB0LS0gKSB7
Ci0gICAgdG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbdF0gKSB8fCBbXTsKLSAgICB0
eXBlID0gb3JpZ1R5cGUgPSB0bXBbMV07Ci0gICAgbmFtZXNwYWNlcyA9ICggdG1wWzJdIHx8ICIi
ICkuc3BsaXQoICIuIiApLnNvcnQoKTsKLQotICAgIC8vIFVuYmluZCBhbGwgZXZlbnRzIChvbiB0
aGlzIG5hbWVzcGFjZSwgaWYgcHJvdmlkZWQpIGZvciB0aGUgZWxlbWVudAotICAgIGlmICggIXR5
cGUgKSB7Ci0gICAgZm9yICggdHlwZSBpbiBldmVudHMgKSB7Ci0gICAgalF1ZXJ5LmV2ZW50LnJl
bW92ZSggZWxlbSwgdHlwZSArIHR5cGVzWyB0IF0sIGhhbmRsZXIsIHNlbGVjdG9yLCB0cnVlICk7
Ci0gICAgfQotICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZl
bnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OwotICAgIHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lh
bC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTsKLSAgICBoYW5kbGVy
cyA9IGV2ZW50c1sgdHlwZSBdIHx8IFtdOwotICAgIHRtcCA9IHRtcFsyXSAmJiBuZXcgUmVnRXhw
KCAiKF58XFwuKSIgKyBuYW1lc3BhY2VzLmpvaW4oIlxcLig/Oi4qXFwufCkiKSArICIoXFwufCQp
IiApOwotCi0gICAgLy8gUmVtb3ZlIG1hdGNoaW5nIGV2ZW50cwotICAgIG9yaWdDb3VudCA9IGog
PSBoYW5kbGVycy5sZW5ndGg7Ci0gICAgd2hpbGUgKCBqLS0gKSB7Ci0gICAgaGFuZGxlT2JqID0g
aGFuZGxlcnNbIGogXTsKLQotICAgIGlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0g
aGFuZGxlT2JqLm9yaWdUeXBlICkgJiYKLSAgICAoICFoYW5kbGVyIHx8IGhhbmRsZXIuZ3VpZCA9
PT0gaGFuZGxlT2JqLmd1aWQgKSAmJgotICAgICggIXRtcCB8fCB0bXAudGVzdCggaGFuZGxlT2Jq
Lm5hbWVzcGFjZSApICkgJiYKLSAgICAoICFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gaGFuZGxl
T2JqLnNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSAiKioiICYmIGhhbmRsZU9iai5zZWxlY3RvciAp
ICkgewotICAgIGhhbmRsZXJzLnNwbGljZSggaiwgMSApOwotCi0gICAgaWYgKCBoYW5kbGVPYmou
c2VsZWN0b3IgKSB7Ci0gICAgaGFuZGxlcnMuZGVsZWdhdGVDb3VudC0tOwotICAgIH0KLSAgICBp
ZiAoIHNwZWNpYWwucmVtb3ZlICkgewotICAgIHNwZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0sIGhh
bmRsZU9iaiApOwotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAgLy8gUmVtb3ZlIGdlbmVyaWMg
ZXZlbnQgaGFuZGxlciBpZiB3ZSByZW1vdmVkIHNvbWV0aGluZyBhbmQgbm8gbW9yZSBoYW5kbGVy
cyBleGlzdAotICAgIC8vIChhdm9pZHMgcG90ZW50aWFsIGZvciBlbmRsZXNzIHJlY3Vyc2lvbiBk
dXJpbmcgcmVtb3ZhbCBvZiBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzKQotICAgIGlmICggb3JpZ0Nv
dW50ICYmICFoYW5kbGVycy5sZW5ndGggKSB7Ci0gICAgaWYgKCAhc3BlY2lhbC50ZWFyZG93biB8
fCBzcGVjaWFsLnRlYXJkb3duLmNhbGwoIGVsZW0sIG5hbWVzcGFjZXMsIGVsZW1EYXRhLmhhbmRs
ZSApID09PSBmYWxzZSApIHsKLSAgICBqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVs
ZW1EYXRhLmhhbmRsZSApOwotICAgIH0KLQotICAgIGRlbGV0ZSBldmVudHNbIHR5cGUgXTsKLSAg
ICB9Ci0gICAgfQotCi0gICAgLy8gUmVtb3ZlIHRoZSBleHBhbmRvIGlmIGl0J3Mgbm8gbG9uZ2Vy
IHVzZWQKLSAgICBpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBldmVudHMgKSApIHsKLSAgICBk
ZWxldGUgZWxlbURhdGEuaGFuZGxlOwotCi0gICAgLy8gcmVtb3ZlRGF0YSBhbHNvIGNoZWNrcyBm
b3IgZW1wdGluZXNzIGFuZCBjbGVhcnMgdGhlIGV4cGFuZG8gaWYgZW1wdHkKLSAgICAvLyBzbyB1
c2UgaXQgaW5zdGVhZCBvZiBkZWxldGUKLSAgICBqUXVlcnkuX3JlbW92ZURhdGEoIGVsZW0sICJl
dmVudHMiICk7Ci0gICAgfQotICAgIH0sCi0KLSAgICB0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQs
IGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyApIHsKLSAgICB2YXIgaGFuZGxlLCBvbnR5cGUsIGN1
ciwKLSAgICBidWJibGVUeXBlLCBzcGVjaWFsLCB0bXAsIGksCi0gICAgZXZlbnRQYXRoID0gWyBl
bGVtIHx8IGRvY3VtZW50IF0sCi0gICAgdHlwZSA9IGNvcmVfaGFzT3duLmNhbGwoIGV2ZW50LCAi
dHlwZSIgKSA/IGV2ZW50LnR5cGUgOiBldmVudCwKLSAgICBuYW1lc3BhY2VzID0gY29yZV9oYXNP
d24uY2FsbCggZXZlbnQsICJuYW1lc3BhY2UiICkgPyBldmVudC5uYW1lc3BhY2Uuc3BsaXQoIi4i
KSA6IFtdOwotCi0gICAgY3VyID0gdG1wID0gZWxlbSA9IGVsZW0gfHwgZG9jdW1lbnQ7Ci0KLSAg
ICAvLyBEb24ndCBkbyBldmVudHMgb24gdGV4dCBhbmQgY29tbWVudCBub2RlcwotICAgIGlmICgg
ZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4ICkgewotICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5z
dXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3cKLSAgICBpZiAoIHJmb2N1c01vcnBo
LnRlc3QoIHR5cGUgKyBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7Ci0gICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmICggdHlwZS5pbmRleE9mKCIuIikgPj0gMCApIHsKLSAgICAvLyBOYW1l
c3BhY2VkIHRyaWdnZXI7IGNyZWF0ZSBhIHJlZ2V4cCB0byBtYXRjaCBldmVudCB0eXBlIGluIGhh
bmRsZSgpCi0gICAgbmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoIi4iKTsKLSAgICB0eXBlID0gbmFt
ZXNwYWNlcy5zaGlmdCgpOwotICAgIG5hbWVzcGFjZXMuc29ydCgpOwotICAgIH0KLSAgICBvbnR5
cGUgPSB0eXBlLmluZGV4T2YoIjoiKSA8IDAgJiYgIm9uIiArIHR5cGU7Ci0KLSAgICAvLyBDYWxs
ZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnkuRXZlbnQgb2JqZWN0LCBPYmplY3QsIG9yIGp1c3QgYW4g
ZXZlbnQgdHlwZSBzdHJpbmcKLSAgICBldmVudCA9IGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID8K
LSAgICBldmVudCA6Ci0gICAgbmV3IGpRdWVyeS5FdmVudCggdHlwZSwgdHlwZW9mIGV2ZW50ID09
PSAib2JqZWN0IiAmJiBldmVudCApOwotCi0gICAgZXZlbnQuaXNUcmlnZ2VyID0gdHJ1ZTsKLSAg
ICBldmVudC5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmpvaW4oIi4iKTsKLSAgICBldmVudC5uYW1l
c3BhY2VfcmUgPSBldmVudC5uYW1lc3BhY2UgPwotICAgIG5ldyBSZWdFeHAoICIoXnxcXC4pIiAr
IG5hbWVzcGFjZXMuam9pbigiXFwuKD86LipcXC58KSIpICsgIihcXC58JCkiICkgOgotICAgIG51
bGw7Ci0KLSAgICAvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBpdCBpcyBiZWluZyByZXVz
ZWQKLSAgICBldmVudC5yZXN1bHQgPSB1bmRlZmluZWQ7Ci0gICAgaWYgKCAhZXZlbnQudGFyZ2V0
ICkgewotICAgIGV2ZW50LnRhcmdldCA9IGVsZW07Ci0gICAgfQotCi0gICAgLy8gQ2xvbmUgYW55
IGluY29taW5nIGRhdGEgYW5kIHByZXBlbmQgdGhlIGV2ZW50LCBjcmVhdGluZyB0aGUgaGFuZGxl
ciBhcmcgbGlzdAotICAgIGRhdGEgPSBkYXRhID09IG51bGwgPwotICAgIFsgZXZlbnQgXSA6Ci0g
ICAgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSwgWyBldmVudCBdICk7Ci0KLSAgICAvLyBBbGxvdyBz
cGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzCi0gICAgc3BlY2lhbCA9IGpR
dWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307Ci0gICAgaWYgKCAhb25seUhhbmRsZXJz
ICYmIHNwZWNpYWwudHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEg
KSA9PT0gZmFsc2UgKSB7Ci0gICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIERldGVybWluZSBl
dmVudCBwcm9wYWdhdGlvbiBwYXRoIGluIGFkdmFuY2UsIHBlciBXM0MgZXZlbnRzIHNwZWMgKCM5
OTUxKQotICAgIC8vIEJ1YmJsZSB1cCB0byBkb2N1bWVudCwgdGhlbiB0byB3aW5kb3c7IHdhdGNo
IGZvciBhIGdsb2JhbCBvd25lckRvY3VtZW50IHZhciAoIzk3MjQpCi0gICAgaWYgKCAhb25seUhh
bmRsZXJzICYmICFzcGVjaWFsLm5vQnViYmxlICYmICFqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSAp
IHsKLQotICAgIGJ1YmJsZVR5cGUgPSBzcGVjaWFsLmRlbGVnYXRlVHlwZSB8fCB0eXBlOwotICAg
IGlmICggIXJmb2N1c01vcnBoLnRlc3QoIGJ1YmJsZVR5cGUgKyB0eXBlICkgKSB7Ci0gICAgY3Vy
ID0gY3VyLnBhcmVudE5vZGU7Ci0gICAgfQotICAgIGZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFy
ZW50Tm9kZSApIHsKLSAgICBldmVudFBhdGgucHVzaCggY3VyICk7Ci0gICAgdG1wID0gY3VyOwot
ICAgIH0KLQotICAgIC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUu
Zy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKQotICAgIGlmICggdG1wID09PSAoZWxl
bS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50KSApIHsKLSAgICBldmVudFBhdGgucHVzaCggdG1w
LmRlZmF1bHRWaWV3IHx8IHRtcC5wYXJlbnRXaW5kb3cgfHwgd2luZG93ICk7Ci0gICAgfQotICAg
IH0KLQotICAgIC8vIEZpcmUgaGFuZGxlcnMgb24gdGhlIGV2ZW50IHBhdGgKLSAgICBpID0gMDsK
LSAgICB3aGlsZSAoIChjdXIgPSBldmVudFBhdGhbaSsrXSkgJiYgIWV2ZW50LmlzUHJvcGFnYXRp
b25TdG9wcGVkKCkgKSB7Ci0KLSAgICBldmVudC50eXBlID0gaSA+IDEgPwotICAgIGJ1YmJsZVR5
cGUgOgotICAgIHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTsKLQotICAgIC8vIGpRdWVyeSBoYW5k
bGVyCi0gICAgaGFuZGxlID0gKCBqUXVlcnkuX2RhdGEoIGN1ciwgImV2ZW50cyIgKSB8fCB7fSAp
WyBldmVudC50eXBlIF0gJiYgalF1ZXJ5Ll9kYXRhKCBjdXIsICJoYW5kbGUiICk7Ci0gICAgaWYg
KCBoYW5kbGUgKSB7Ci0gICAgaGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTsKLSAgICB9Ci0KLSAg
ICAvLyBOYXRpdmUgaGFuZGxlcgotICAgIGhhbmRsZSA9IG9udHlwZSAmJiBjdXJbIG9udHlwZSBd
OwotICAgIGlmICggaGFuZGxlICYmIGpRdWVyeS5hY2NlcHREYXRhKCBjdXIgKSAmJiBoYW5kbGUu
YXBwbHkgJiYgaGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKSA9PT0gZmFsc2UgKSB7Ci0gICAgZXZl
bnQucHJldmVudERlZmF1bHQoKTsKLSAgICB9Ci0gICAgfQotICAgIGV2ZW50LnR5cGUgPSB0eXBl
OwotCi0gICAgLy8gSWYgbm9ib2R5IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0
IG5vdwotICAgIGlmICggIW9ubHlIYW5kbGVycyAmJiAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVk
KCkgKSB7Ci0KLSAgICBpZiAoICghc3BlY2lhbC5fZGVmYXVsdCB8fCBzcGVjaWFsLl9kZWZhdWx0
LmFwcGx5KCBlbGVtLm93bmVyRG9jdW1lbnQsIGRhdGEgKSA9PT0gZmFsc2UpICYmCi0gICAgISh0
eXBlID09PSAiY2xpY2siICYmIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImEiICkpICYmIGpRdWVy
eS5hY2NlcHREYXRhKCBlbGVtICkgKSB7Ci0KLSAgICAvLyBDYWxsIGEgbmF0aXZlIERPTSBtZXRo
b2Qgb24gdGhlIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgbmFtZSBhcyB0aGUgZXZlbnQuCi0g
ICAgLy8gQ2FuJ3QgdXNlIGFuIC5pc0Z1bmN0aW9uKCkgY2hlY2sgaGVyZSBiZWNhdXNlIElFNi83
IGZhaWxzIHRoYXQgdGVzdC4KLSAgICAvLyBEb24ndCBkbyBkZWZhdWx0IGFjdGlvbnMgb24gd2lu
ZG93LCB0aGF0J3Mgd2hlcmUgZ2xvYmFsIHZhcmlhYmxlcyBiZSAoIzYxNzApCi0gICAgaWYgKCBv
bnR5cGUgJiYgZWxlbVsgdHlwZSBdICYmICFqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHsKLQot
ICAgIC8vIERvbid0IHJlLXRyaWdnZXIgYW4gb25GT08gZXZlbnQgd2hlbiB3ZSBjYWxsIGl0cyBG
T08oKSBtZXRob2QKLSAgICB0bXAgPSBlbGVtWyBvbnR5cGUgXTsKLQotICAgIGlmICggdG1wICkg
ewotICAgIGVsZW1bIG9udHlwZSBdID0gbnVsbDsKLSAgICB9Ci0KLSAgICAvLyBQcmV2ZW50IHJl
LXRyaWdnZXJpbmcgb2YgdGhlIHNhbWUgZXZlbnQsIHNpbmNlIHdlIGFscmVhZHkgYnViYmxlZCBp
dCBhYm92ZQotICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlOwotICAgIHRyeSB7Ci0g
ICAgZWxlbVsgdHlwZSBdKCk7Ci0gICAgfSBjYXRjaCAoIGUgKSB7Ci0gICAgLy8gSUU8OSBkaWVz
IG9uIGZvY3VzL2JsdXIgdG8gaGlkZGVuIGVsZW1lbnQgKCMxNDg2LCMxMjUxOCkKLSAgICAvLyBv
bmx5IHJlcHJvZHVjaWJsZSBvbiB3aW5YUCBJRTggbmF0aXZlLCBub3QgSUU5IGluIElFOCBtb2Rl
Ci0gICAgfQotICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB1bmRlZmluZWQ7Ci0KLSAgICBp
ZiAoIHRtcCApIHsKLSAgICBlbGVtWyBvbnR5cGUgXSA9IHRtcDsKLSAgICB9Ci0gICAgfQotICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZXZlbnQucmVzdWx0OwotICAgIH0sCi0KLSAgICBkaXNw
YXRjaDogZnVuY3Rpb24oIGV2ZW50ICkgewotCi0gICAgLy8gTWFrZSBhIHdyaXRhYmxlIGpRdWVy
eS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0Ci0gICAgZXZlbnQgPSBqUXVlcnku
ZXZlbnQuZml4KCBldmVudCApOwotCi0gICAgdmFyIGksIHJldCwgaGFuZGxlT2JqLCBtYXRjaGVk
LCBqLAotICAgIGhhbmRsZXJRdWV1ZSA9IFtdLAotICAgIGFyZ3MgPSBjb3JlX3NsaWNlLmNhbGwo
IGFyZ3VtZW50cyApLAotICAgIGhhbmRsZXJzID0gKCBqUXVlcnkuX2RhdGEoIHRoaXMsICJldmVu
dHMiICkgfHwge30gKVsgZXZlbnQudHlwZSBdIHx8IFtdLAotICAgIHNwZWNpYWwgPSBqUXVlcnku
ZXZlbnQuc3BlY2lhbFsgZXZlbnQudHlwZSBdIHx8IHt9OwotCi0gICAgLy8gVXNlIHRoZSBmaXgt
ZWQgalF1ZXJ5LkV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnQK
LSAgICBhcmdzWzBdID0gZXZlbnQ7Ci0gICAgZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzOwot
Ci0gICAgLy8gQ2FsbCB0aGUgcHJlRGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlLCBh
bmQgbGV0IGl0IGJhaWwgaWYgZGVzaXJlZAotICAgIGlmICggc3BlY2lhbC5wcmVEaXNwYXRjaCAm
JiBzcGVjaWFsLnByZURpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICkgPT09IGZhbHNlICkgewot
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBEZXRlcm1pbmUgaGFuZGxlcnMKLSAgICBoYW5k
bGVyUXVldWUgPSBqUXVlcnkuZXZlbnQuaGFuZGxlcnMuY2FsbCggdGhpcywgZXZlbnQsIGhhbmRs
ZXJzICk7Ci0KLSAgICAvLyBSdW4gZGVsZWdhdGVzIGZpcnN0OyB0aGV5IG1heSB3YW50IHRvIHN0
b3AgcHJvcGFnYXRpb24gYmVuZWF0aCB1cwotICAgIGkgPSAwOwotICAgIHdoaWxlICggKG1hdGNo
ZWQgPSBoYW5kbGVyUXVldWVbIGkrKyBdKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQo
KSApIHsKLSAgICBldmVudC5jdXJyZW50VGFyZ2V0ID0gbWF0Y2hlZC5lbGVtOwotCi0gICAgaiA9
IDA7Ci0gICAgd2hpbGUgKCAoaGFuZGxlT2JqID0gbWF0Y2hlZC5oYW5kbGVyc1sgaisrIF0pICYm
ICFldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICkgewotCi0gICAgLy8gVHJp
Z2dlcmVkIGV2ZW50IG11c3QgZWl0aGVyIDEpIGhhdmUgbm8gbmFtZXNwYWNlLCBvcgotICAgIC8v
IDIpIGhhdmUgbmFtZXNwYWNlKHMpIGEgc3Vic2V0IG9yIGVxdWFsIHRvIHRob3NlIGluIHRoZSBi
b3VuZCBldmVudCAoYm90aCBjYW4gaGF2ZSBubyBuYW1lc3BhY2UpLgotICAgIGlmICggIWV2ZW50
Lm5hbWVzcGFjZV9yZSB8fCBldmVudC5uYW1lc3BhY2VfcmUudGVzdCggaGFuZGxlT2JqLm5hbWVz
cGFjZSApICkgewotCi0gICAgZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqOwotICAgIGV2ZW50
LmRhdGEgPSBoYW5kbGVPYmouZGF0YTsKLQotICAgIHJldCA9ICggKGpRdWVyeS5ldmVudC5zcGVj
aWFsWyBoYW5kbGVPYmoub3JpZ1R5cGUgXSB8fCB7fSkuaGFuZGxlIHx8IGhhbmRsZU9iai5oYW5k
bGVyICkKLSAgICAuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApOwotCi0gICAgaWYgKCByZXQg
IT09IHVuZGVmaW5lZCApIHsKLSAgICBpZiAoIChldmVudC5yZXN1bHQgPSByZXQpID09PSBmYWxz
ZSApIHsKLSAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgIGV2ZW50LnN0b3BQcm9wYWdh
dGlvbigpOwotICAgIH0KLSAgICB9Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDYWxs
IHRoZSBwb3N0RGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlCi0gICAgaWYgKCBzcGVj
aWFsLnBvc3REaXNwYXRjaCApIHsKLSAgICBzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxsKCB0aGlz
LCBldmVudCApOwotICAgIH0KLQotICAgIHJldHVybiBldmVudC5yZXN1bHQ7Ci0gICAgfSwKLQot
ICAgIGhhbmRsZXJzOiBmdW5jdGlvbiggZXZlbnQsIGhhbmRsZXJzICkgewotICAgIHZhciBzZWws
IGhhbmRsZU9iaiwgbWF0Y2hlcywgaSwKLSAgICBoYW5kbGVyUXVldWUgPSBbXSwKLSAgICBkZWxl
Z2F0ZUNvdW50ID0gaGFuZGxlcnMuZGVsZWdhdGVDb3VudCwKLSAgICBjdXIgPSBldmVudC50YXJn
ZXQ7Ci0KLSAgICAvLyBGaW5kIGRlbGVnYXRlIGhhbmRsZXJzCi0gICAgLy8gQmxhY2staG9sZSBT
VkcgPHVzZT4gaW5zdGFuY2UgdHJlZXMgKCMxMzE4MCkKLSAgICAvLyBBdm9pZCBub24tbGVmdC1j
bGljayBidWJibGluZyBpbiBGaXJlZm94ICgjMzg2MSkKLSAgICBpZiAoIGRlbGVnYXRlQ291bnQg
JiYgY3VyLm5vZGVUeXBlICYmICghZXZlbnQuYnV0dG9uIHx8IGV2ZW50LnR5cGUgIT09ICJjbGlj
ayIpICkgewotCi0gICAgZm9yICggOyBjdXIgIT0gdGhpczsgY3VyID0gY3VyLnBhcmVudE5vZGUg
fHwgdGhpcyApIHsKLQotICAgIC8vIERvbid0IGNoZWNrIG5vbi1lbGVtZW50cyAoIzEzMjA4KQot
ICAgIC8vIERvbid0IHByb2Nlc3MgY2xpY2tzIG9uIGRpc2FibGVkIGVsZW1lbnRzICgjNjkxMSwg
IzgxNjUsICMxMTM4MiwgIzExNzY0KQotICAgIGlmICggY3VyLm5vZGVUeXBlID09PSAxICYmIChj
dXIuZGlzYWJsZWQgIT09IHRydWUgfHwgZXZlbnQudHlwZSAhPT0gImNsaWNrIikgKSB7Ci0gICAg
bWF0Y2hlcyA9IFtdOwotICAgIGZvciAoIGkgPSAwOyBpIDwgZGVsZWdhdGVDb3VudDsgaSsrICkg
ewotICAgIGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBpIF07Ci0KLSAgICAvLyBEb24ndCBjb25mbGlj
dCB3aXRoIE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoIzEzMjAzKQotICAgIHNlbCA9IGhh
bmRsZU9iai5zZWxlY3RvciArICIgIjsKLQotICAgIGlmICggbWF0Y2hlc1sgc2VsIF0gPT09IHVu
ZGVmaW5lZCApIHsKLSAgICBtYXRjaGVzWyBzZWwgXSA9IGhhbmRsZU9iai5uZWVkc0NvbnRleHQg
PwotICAgIGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciApID49IDAgOgotICAgIGpRdWVy
eS5maW5kKCBzZWwsIHRoaXMsIG51bGwsIFsgY3VyIF0gKS5sZW5ndGg7Ci0gICAgfQotICAgIGlm
ICggbWF0Y2hlc1sgc2VsIF0gKSB7Ci0gICAgbWF0Y2hlcy5wdXNoKCBoYW5kbGVPYmogKTsKLSAg
ICB9Ci0gICAgfQotICAgIGlmICggbWF0Y2hlcy5sZW5ndGggKSB7Ci0gICAgaGFuZGxlclF1ZXVl
LnB1c2goeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBtYXRjaGVzIH0pOwotICAgIH0KLSAgICB9Ci0g
ICAgfQotICAgIH0KLQotICAgIC8vIEFkZCB0aGUgcmVtYWluaW5nIChkaXJlY3RseS1ib3VuZCkg
aGFuZGxlcnMKLSAgICBpZiAoIGRlbGVnYXRlQ291bnQgPCBoYW5kbGVycy5sZW5ndGggKSB7Ci0g
ICAgaGFuZGxlclF1ZXVlLnB1c2goeyBlbGVtOiB0aGlzLCBoYW5kbGVyczogaGFuZGxlcnMuc2xp
Y2UoIGRlbGVnYXRlQ291bnQgKSB9KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaGFuZGxlclF1ZXVl
OwotICAgIH0sCi0KLSAgICBmaXg6IGZ1bmN0aW9uKCBldmVudCApIHsKLSAgICBpZiAoIGV2ZW50
WyBqUXVlcnkuZXhwYW5kbyBdICkgewotICAgIHJldHVybiBldmVudDsKLSAgICB9Ci0KLSAgICAv
LyBDcmVhdGUgYSB3cml0YWJsZSBjb3B5IG9mIHRoZSBldmVudCBvYmplY3QgYW5kIG5vcm1hbGl6
ZSBzb21lIHByb3BlcnRpZXMKLSAgICB2YXIgaSwgcHJvcCwgY29weSwKLSAgICB0eXBlID0gZXZl
bnQudHlwZSwKLSAgICBvcmlnaW5hbEV2ZW50ID0gZXZlbnQsCi0gICAgZml4SG9vayA9IHRoaXMu
Zml4SG9va3NbIHR5cGUgXTsKLQotICAgIGlmICggIWZpeEhvb2sgKSB7Ci0gICAgdGhpcy5maXhI
b29rc1sgdHlwZSBdID0gZml4SG9vayA9Ci0gICAgcm1vdXNlRXZlbnQudGVzdCggdHlwZSApID8g
dGhpcy5tb3VzZUhvb2tzIDoKLSAgICBya2V5RXZlbnQudGVzdCggdHlwZSApID8gdGhpcy5rZXlI
b29rcyA6Ci0gICAge307Ci0gICAgfQotICAgIGNvcHkgPSBmaXhIb29rLnByb3BzID8gdGhpcy5w
cm9wcy5jb25jYXQoIGZpeEhvb2sucHJvcHMgKSA6IHRoaXMucHJvcHM7Ci0KLSAgICBldmVudCA9
IG5ldyBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTsKLQotICAgIGkgPSBjb3B5Lmxlbmd0
aDsKLSAgICB3aGlsZSAoIGktLSApIHsKLSAgICBwcm9wID0gY29weVsgaSBdOwotICAgIGV2ZW50
WyBwcm9wIF0gPSBvcmlnaW5hbEV2ZW50WyBwcm9wIF07Ci0gICAgfQotCi0gICAgLy8gU3VwcG9y
dDogSUU8OQotICAgIC8vIEZpeCB0YXJnZXQgcHJvcGVydHkgKCMxOTI1KQotICAgIGlmICggIWV2
ZW50LnRhcmdldCApIHsKLSAgICBldmVudC50YXJnZXQgPSBvcmlnaW5hbEV2ZW50LnNyY0VsZW1l
bnQgfHwgZG9jdW1lbnQ7Ci0gICAgfQotCi0gICAgLy8gU3VwcG9ydDogQ2hyb21lIDIzKywgU2Fm
YXJpPwotICAgIC8vIFRhcmdldCBzaG91bGQgbm90IGJlIGEgdGV4dCBub2RlICgjNTA0LCAjMTMx
NDMpCi0gICAgaWYgKCBldmVudC50YXJnZXQubm9kZVR5cGUgPT09IDMgKSB7Ci0gICAgZXZlbnQu
dGFyZ2V0ID0gZXZlbnQudGFyZ2V0LnBhcmVudE5vZGU7Ci0gICAgfQotCi0gICAgLy8gU3VwcG9y
dDogSUU8OQotICAgIC8vIEZvciBtb3VzZS9rZXkgZXZlbnRzLCBtZXRhS2V5PT1mYWxzZSBpZiBp
dCdzIHVuZGVmaW5lZCAoIzMzNjgsICMxMTMyOCkKLSAgICBldmVudC5tZXRhS2V5ID0gISFldmVu
dC5tZXRhS2V5OwotCi0gICAgcmV0dXJuIGZpeEhvb2suZmlsdGVyID8gZml4SG9vay5maWx0ZXIo
IGV2ZW50LCBvcmlnaW5hbEV2ZW50ICkgOiBldmVudDsKLSAgICB9LAotCi0gICAgLy8gSW5jbHVk
ZXMgc29tZSBldmVudCBwcm9wcyBzaGFyZWQgYnkgS2V5RXZlbnQgYW5kIE1vdXNlRXZlbnQKLSAg
ICBwcm9wczogImFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0
IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3Rh
bXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSwKLQotICAgIGZpeEhvb2tzOiB7fSwKLQotICAgIGtl
eUhvb2tzOiB7Ci0gICAgcHJvcHM6ICJjaGFyIGNoYXJDb2RlIGtleSBrZXlDb2RlIi5zcGxpdCgi
ICIpLAotICAgIGZpbHRlcjogZnVuY3Rpb24oIGV2ZW50LCBvcmlnaW5hbCApIHsKLQotICAgIC8v
IEFkZCB3aGljaCBmb3Iga2V5IGV2ZW50cwotICAgIGlmICggZXZlbnQud2hpY2ggPT0gbnVsbCAp
IHsKLSAgICBldmVudC53aGljaCA9IG9yaWdpbmFsLmNoYXJDb2RlICE9IG51bGwgPyBvcmlnaW5h
bC5jaGFyQ29kZSA6IG9yaWdpbmFsLmtleUNvZGU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGV2ZW50
OwotICAgIH0KLSAgICB9LAotCi0gICAgbW91c2VIb29rczogewotICAgIHByb3BzOiAiYnV0dG9u
IGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21FbGVtZW50IG9mZnNldFggb2Zmc2V0WSBwYWdl
WCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLAotICAgIGZpbHRl
cjogZnVuY3Rpb24oIGV2ZW50LCBvcmlnaW5hbCApIHsKLSAgICB2YXIgYm9keSwgZXZlbnREb2Ms
IGRvYywKLSAgICBidXR0b24gPSBvcmlnaW5hbC5idXR0b24sCi0gICAgZnJvbUVsZW1lbnQgPSBv
cmlnaW5hbC5mcm9tRWxlbWVudDsKLQotICAgIC8vIENhbGN1bGF0ZSBwYWdlWC9ZIGlmIG1pc3Np
bmcgYW5kIGNsaWVudFgvWSBhdmFpbGFibGUKLSAgICBpZiAoIGV2ZW50LnBhZ2VYID09IG51bGwg
JiYgb3JpZ2luYWwuY2xpZW50WCAhPSBudWxsICkgewotICAgIGV2ZW50RG9jID0gZXZlbnQudGFy
Z2V0Lm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQ7Ci0gICAgZG9jID0gZXZlbnREb2MuZG9jdW1l
bnRFbGVtZW50OwotICAgIGJvZHkgPSBldmVudERvYy5ib2R5OwotCi0gICAgZXZlbnQucGFnZVgg
PSBvcmlnaW5hbC5jbGllbnRYICsgKCBkb2MgJiYgZG9jLnNjcm9sbExlZnQgfHwgYm9keSAmJiBi
b2R5LnNjcm9sbExlZnQgfHwgMCApIC0gKCBkb2MgJiYgZG9jLmNsaWVudExlZnQgfHwgYm9keSAm
JiBib2R5LmNsaWVudExlZnQgfHwgMCApOwotICAgIGV2ZW50LnBhZ2VZID0gb3JpZ2luYWwuY2xp
ZW50WSArICggZG9jICYmIGRvYy5zY3JvbGxUb3AgIHx8IGJvZHkgJiYgYm9keS5zY3JvbGxUb3Ag
IHx8IDAgKSAtICggZG9jICYmIGRvYy5jbGllbnRUb3AgIHx8IGJvZHkgJiYgYm9keS5jbGllbnRU
b3AgIHx8IDAgKTsKLSAgICB9Ci0KLSAgICAvLyBBZGQgcmVsYXRlZFRhcmdldCwgaWYgbmVjZXNz
YXJ5Ci0gICAgaWYgKCAhZXZlbnQucmVsYXRlZFRhcmdldCAmJiBmcm9tRWxlbWVudCApIHsKLSAg
ICBldmVudC5yZWxhdGVkVGFyZ2V0ID0gZnJvbUVsZW1lbnQgPT09IGV2ZW50LnRhcmdldCA/IG9y
aWdpbmFsLnRvRWxlbWVudCA6IGZyb21FbGVtZW50OwotICAgIH0KLQotICAgIC8vIEFkZCB3aGlj
aCBmb3IgY2xpY2s6IDEgPT09IGxlZnQ7IDIgPT09IG1pZGRsZTsgMyA9PT0gcmlnaHQKLSAgICAv
LyBOb3RlOiBidXR0b24gaXMgbm90IG5vcm1hbGl6ZWQsIHNvIGRvbid0IHVzZSBpdAotICAgIGlm
ICggIWV2ZW50LndoaWNoICYmIGJ1dHRvbiAhPT0gdW5kZWZpbmVkICkgewotICAgIGV2ZW50Lndo
aWNoID0gKCBidXR0b24gJiAxID8gMSA6ICggYnV0dG9uICYgMiA/IDMgOiAoIGJ1dHRvbiAmIDQg
PyAyIDogMCApICkgKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZXZlbnQ7Ci0gICAgfQotICAgIH0s
Ci0KLSAgICBzcGVjaWFsOiB7Ci0gICAgbG9hZDogewotICAgIC8vIFByZXZlbnQgdHJpZ2dlcmVk
IGltYWdlLmxvYWQgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gd2luZG93LmxvYWQKLSAgICBub0J1
YmJsZTogdHJ1ZQotICAgIH0sCi0gICAgY2xpY2s6IHsKLSAgICAvLyBGb3IgY2hlY2tib3gsIGZp
cmUgbmF0aXZlIGV2ZW50IHNvIGNoZWNrZWQgc3RhdGUgd2lsbCBiZSByaWdodAotICAgIHRyaWdn
ZXI6IGZ1bmN0aW9uKCkgewotICAgIGlmICggalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCAiaW5wdXQi
ICkgJiYgdGhpcy50eXBlID09PSAiY2hlY2tib3giICYmIHRoaXMuY2xpY2sgKSB7Ci0gICAgdGhp
cy5jbGljaygpOwotICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgfQotICAgIH0sCi0gICAg
Zm9jdXM6IHsKLSAgICAvLyBGaXJlIG5hdGl2ZSBldmVudCBpZiBwb3NzaWJsZSBzbyBibHVyL2Zv
Y3VzIHNlcXVlbmNlIGlzIGNvcnJlY3QKLSAgICB0cmlnZ2VyOiBmdW5jdGlvbigpIHsKLSAgICBp
ZiAoIHRoaXMgIT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgdGhpcy5mb2N1cyApIHsKLSAg
ICB0cnkgewotICAgIHRoaXMuZm9jdXMoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBjYXRj
aCAoIGUgKSB7Ci0gICAgLy8gU3VwcG9ydDogSUU8OQotICAgIC8vIElmIHdlIGVycm9yIG9uIGZv
Y3VzIHRvIGhpZGRlbiBlbGVtZW50ICgjMTQ4NiwgIzEyNTE4KSwKLSAgICAvLyBsZXQgLnRyaWdn
ZXIoKSBydW4gdGhlIGhhbmRsZXJzCi0gICAgfQotICAgIH0KLSAgICB9LAotICAgIGRlbGVnYXRl
VHlwZTogImZvY3VzaW4iCi0gICAgfSwKLSAgICBibHVyOiB7Ci0gICAgdHJpZ2dlcjogZnVuY3Rp
b24oKSB7Ci0gICAgaWYgKCB0aGlzID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIHRoaXMu
Ymx1ciApIHsKLSAgICB0aGlzLmJsdXIoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IH0sCi0gICAgZGVsZWdhdGVUeXBlOiAiZm9jdXNvdXQiCi0gICAgfSwKLQotICAgIGJlZm9yZXVu
bG9hZDogewotICAgIHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkgewotCi0gICAgLy8g
RXZlbiB3aGVuIHJldHVyblZhbHVlIGVxdWFscyB0byB1bmRlZmluZWQgRmlyZWZveCB3aWxsIHN0
aWxsIHNob3cgYWxlcnQKLSAgICBpZiAoIGV2ZW50LnJlc3VsdCAhPT0gdW5kZWZpbmVkICkgewot
ICAgIGV2ZW50Lm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWUgPSBldmVudC5yZXN1bHQ7Ci0gICAg
fQotICAgIH0KLSAgICB9Ci0gICAgfSwKLQotICAgIHNpbXVsYXRlOiBmdW5jdGlvbiggdHlwZSwg
ZWxlbSwgZXZlbnQsIGJ1YmJsZSApIHsKLSAgICAvLyBQaWdneWJhY2sgb24gYSBkb25vciBldmVu
dCB0byBzaW11bGF0ZSBhIGRpZmZlcmVudCBvbmUuCi0gICAgLy8gRmFrZSBvcmlnaW5hbEV2ZW50
IHRvIGF2b2lkIGRvbm9yJ3Mgc3RvcFByb3BhZ2F0aW9uLCBidXQgaWYgdGhlCi0gICAgLy8gc2lt
dWxhdGVkIGV2ZW50IHByZXZlbnRzIGRlZmF1bHQgdGhlbiB3ZSBkbyB0aGUgc2FtZSBvbiB0aGUg
ZG9ub3IuCi0gICAgdmFyIGUgPSBqUXVlcnkuZXh0ZW5kKAotICAgIG5ldyBqUXVlcnkuRXZlbnQo
KSwKLSAgICBldmVudCwKLSAgICB7IHR5cGU6IHR5cGUsCi0gICAgaXNTaW11bGF0ZWQ6IHRydWUs
Ci0gICAgb3JpZ2luYWxFdmVudDoge30KLSAgICB9Ci0gICAgKTsKLSAgICBpZiAoIGJ1YmJsZSAp
IHsKLSAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSApOwotICAgIH0gZWxz
ZSB7Ci0gICAgalF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmNhbGwoIGVsZW0sIGUgKTsKLSAgICB9Ci0g
ICAgaWYgKCBlLmlzRGVmYXVsdFByZXZlbnRlZCgpICkgewotICAgIGV2ZW50LnByZXZlbnREZWZh
dWx0KCk7Ci0gICAgfQotICAgIH0KLX07Ci0KLWpRdWVyeS5yZW1vdmVFdmVudCA9IGRvY3VtZW50
LnJlbW92ZUV2ZW50TGlzdGVuZXIgPwotICAgIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUg
KSB7Ci0gICAgaWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7Ci0gICAgZWxlbS5yZW1v
dmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGUsIGZhbHNlICk7Ci0gICAgfQotICAgIH0gOgot
ICAgIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7Ci0gICAgdmFyIG5hbWUgPSAib24i
ICsgdHlwZTsKLQotICAgIGlmICggZWxlbS5kZXRhY2hFdmVudCApIHsKLQotICAgIC8vICM4NTQ1
LCAjNzA1NCwgcHJldmVudGluZyBtZW1vcnkgbGVha3MgZm9yIGN1c3RvbSBldmVudHMgaW4gSUU2
LTgKLSAgICAvLyBkZXRhY2hFdmVudCBuZWVkZWQgcHJvcGVydHkgb24gZWxlbWVudCwgYnkgbmFt
ZSBvZiB0aGF0IGV2ZW50LCB0byBwcm9wZXJseSBleHBvc2UgaXQgdG8gR0MKLSAgICBpZiAoIHR5
cGVvZiBlbGVtWyBuYW1lIF0gPT09IGNvcmVfc3RydW5kZWZpbmVkICkgewotICAgIGVsZW1bIG5h
bWUgXSA9IG51bGw7Ci0gICAgfQotCi0gICAgZWxlbS5kZXRhY2hFdmVudCggbmFtZSwgaGFuZGxl
ICk7Ci0gICAgfQotICAgIH07Ci0KLWpRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3Bz
ICkgewotICAgIC8vIEFsbG93IGluc3RhbnRpYXRpb24gd2l0aG91dCB0aGUgJ25ldycga2V5d29y
ZAotICAgIGlmICggISh0aGlzIGluc3RhbmNlb2YgalF1ZXJ5LkV2ZW50KSApIHsKLSAgICByZXR1
cm4gbmV3IGpRdWVyeS5FdmVudCggc3JjLCBwcm9wcyApOwotICAgIH0KLQotICAgIC8vIEV2ZW50
IG9iamVjdAotICAgIGlmICggc3JjICYmIHNyYy50eXBlICkgewotICAgIHRoaXMub3JpZ2luYWxF
dmVudCA9IHNyYzsKLSAgICB0aGlzLnR5cGUgPSBzcmMudHlwZTsKLQotICAgIC8vIEV2ZW50cyBi
dWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgYXMgcHJldmVudGVk
Ci0gICAgLy8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNv
cnJlY3QgdmFsdWUuCi0gICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSAoIHNyYy5kZWZhdWx0
UHJldmVudGVkIHx8IHNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgfHwKLSAgICBzcmMuZ2V0UHJl
dmVudERlZmF1bHQgJiYgc3JjLmdldFByZXZlbnREZWZhdWx0KCkgKSA/IHJldHVyblRydWUgOiBy
ZXR1cm5GYWxzZTsKLQotICAgIC8vIEV2ZW50IHR5cGUKLSAgICB9IGVsc2UgewotICAgIHRoaXMu
dHlwZSA9IHNyYzsKLSAgICB9Ci0KLSAgICAvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9w
ZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdAotICAgIGlmICggcHJvcHMgKSB7Ci0gICAgalF1
ZXJ5LmV4dGVuZCggdGhpcywgcHJvcHMgKTsKLSAgICB9Ci0KLSAgICAvLyBDcmVhdGUgYSB0aW1l
c3RhbXAgaWYgaW5jb21pbmcgZXZlbnQgZG9lc24ndCBoYXZlIG9uZQotICAgIHRoaXMudGltZVN0
YW1wID0gc3JjICYmIHNyYy50aW1lU3RhbXAgfHwgalF1ZXJ5Lm5vdygpOwotCi0gICAgLy8gTWFy
ayBpdCBhcyBmaXhlZAotICAgIHRoaXNbIGpRdWVyeS5leHBhbmRvIF0gPSB0cnVlOwotfTsKLQot
Ly8galF1ZXJ5LkV2ZW50IGlzIGJhc2VkIG9uIERPTTMgRXZlbnRzIGFzIHNwZWNpZmllZCBieSB0
aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBCaW5kaW5nCi0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi8y
MDAzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDAzMDMzMS9lY21hLXNjcmlwdC1iaW5kaW5nLmh0
bWwKLWpRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7Ci0gICAgaXNEZWZhdWx0UHJldmVudGVkOiBy
ZXR1cm5GYWxzZSwKLSAgICBpc1Byb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsCi0gICAg
aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLAotCi0gICAgcHJldmVu
dERlZmF1bHQ6IGZ1bmN0aW9uKCkgewotICAgIHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50Owot
Ci0gICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlOwotICAgIGlmICggIWUg
KSB7Ci0gICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIElmIHByZXZlbnREZWZhdWx0IGV4aXN0
cywgcnVuIGl0IG9uIHRoZSBvcmlnaW5hbCBldmVudAotICAgIGlmICggZS5wcmV2ZW50RGVmYXVs
dCApIHsKLSAgICBlLnByZXZlbnREZWZhdWx0KCk7Ci0KLSAgICAvLyBTdXBwb3J0OiBJRQotICAg
IC8vIE90aGVyd2lzZSBzZXQgdGhlIHJldHVyblZhbHVlIHByb3BlcnR5IG9mIHRoZSBvcmlnaW5h
bCBldmVudCB0byBmYWxzZQotICAgIH0gZWxzZSB7Ci0gICAgZS5yZXR1cm5WYWx1ZSA9IGZhbHNl
OwotICAgIH0KLSAgICB9LAotICAgIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7Ci0gICAg
dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7Ci0KLSAgICB0aGlzLmlzUHJvcGFnYXRpb25TdG9w
cGVkID0gcmV0dXJuVHJ1ZTsKLSAgICBpZiAoICFlICkgewotICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgLy8gSWYgc3RvcFByb3BhZ2F0aW9uIGV4aXN0cywgcnVuIGl0IG9uIHRoZSBvcmlnaW5hbCBl
dmVudAotICAgIGlmICggZS5zdG9wUHJvcGFnYXRpb24gKSB7Ci0gICAgZS5zdG9wUHJvcGFnYXRp
b24oKTsKLSAgICB9Ci0KLSAgICAvLyBTdXBwb3J0OiBJRQotICAgIC8vIFNldCB0aGUgY2FuY2Vs
QnViYmxlIHByb3BlcnR5IG9mIHRoZSBvcmlnaW5hbCBldmVudCB0byB0cnVlCi0gICAgZS5jYW5j
ZWxCdWJibGUgPSB0cnVlOwotICAgIH0sCi0gICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBm
dW5jdGlvbigpIHsKLSAgICB0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0
dXJuVHJ1ZTsKLSAgICB0aGlzLnN0b3BQcm9wYWdhdGlvbigpOwotICAgIH0KLX07Ci0KLS8vIENy
ZWF0ZSBtb3VzZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVu
dC10aW1lIGNoZWNrcwotalF1ZXJ5LmVhY2goewotICAgIG1vdXNlZW50ZXI6ICJtb3VzZW92ZXIi
LAotICAgIG1vdXNlbGVhdmU6ICJtb3VzZW91dCIKLX0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7
Ci0gICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIG9yaWcgXSA9IHsKLSAgICBkZWxlZ2F0ZVR5cGU6
IGZpeCwKLSAgICBiaW5kVHlwZTogZml4LAotCi0gICAgaGFuZGxlOiBmdW5jdGlvbiggZXZlbnQg
KSB7Ci0gICAgdmFyIHJldCwKLSAgICB0YXJnZXQgPSB0aGlzLAotICAgIHJlbGF0ZWQgPSBldmVu
dC5yZWxhdGVkVGFyZ2V0LAotICAgIGhhbmRsZU9iaiA9IGV2ZW50LmhhbmRsZU9iajsKLQotICAg
IC8vIEZvciBtb3VzZW50ZXIvbGVhdmUgY2FsbCB0aGUgaGFuZGxlciBpZiByZWxhdGVkIGlzIG91
dHNpZGUgdGhlIHRhcmdldC4KLSAgICAvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91
c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvdwotICAgIGlmICggIXJlbGF0ZWQgfHwg
KHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhalF1ZXJ5LmNvbnRhaW5zKCB0YXJnZXQsIHJlbGF0ZWQg
KSkgKSB7Ci0gICAgZXZlbnQudHlwZSA9IGhhbmRsZU9iai5vcmlnVHlwZTsKLSAgICByZXQgPSBo
YW5kbGVPYmouaGFuZGxlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7Ci0gICAgZXZlbnQudHlw
ZSA9IGZpeDsKLSAgICB9Ci0gICAgcmV0dXJuIHJldDsKLSAgICB9Ci0gICAgfTsKLX0pOwotCi0v
LyBJRSBzdWJtaXQgZGVsZWdhdGlvbgotaWYgKCAhalF1ZXJ5LnN1cHBvcnQuc3VibWl0QnViYmxl
cyApIHsKLQotICAgIGpRdWVyeS5ldmVudC5zcGVjaWFsLnN1Ym1pdCA9IHsKLSAgICBzZXR1cDog
ZnVuY3Rpb24oKSB7Ci0gICAgLy8gT25seSBuZWVkIHRoaXMgZm9yIGRlbGVnYXRlZCBmb3JtIHN1
Ym1pdCBldmVudHMKLSAgICBpZiAoIGpRdWVyeS5ub2RlTmFtZSggdGhpcywgImZvcm0iICkgKSB7
Ci0gICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIExhenktYWRkIGEgc3VibWl0IGhh
bmRsZXIgd2hlbiBhIGRlc2NlbmRhbnQgZm9ybSBtYXkgcG90ZW50aWFsbHkgYmUgc3VibWl0dGVk
Ci0gICAgalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1
Ym1pdCIsIGZ1bmN0aW9uKCBlICkgewotICAgIC8vIE5vZGUgbmFtZSBjaGVjayBhdm9pZHMgYSBW
TUwtcmVsYXRlZCBjcmFzaCBpbiBJRSAoIzk4MDcpCi0gICAgdmFyIGVsZW0gPSBlLnRhcmdldCwK
LSAgICBmb3JtID0galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaW5wdXQiICkgfHwgalF1ZXJ5Lm5v
ZGVOYW1lKCBlbGVtLCAiYnV0dG9uIiApID8gZWxlbS5mb3JtIDogdW5kZWZpbmVkOwotICAgIGlm
ICggZm9ybSAmJiAhalF1ZXJ5Ll9kYXRhKCBmb3JtLCAic3VibWl0QnViYmxlcyIgKSApIHsKLSAg
ICBqUXVlcnkuZXZlbnQuYWRkKCBmb3JtLCAic3VibWl0Ll9zdWJtaXQiLCBmdW5jdGlvbiggZXZl
bnQgKSB7Ci0gICAgZXZlbnQuX3N1Ym1pdF9idWJibGUgPSB0cnVlOwotICAgIH0pOwotICAgIGpR
dWVyeS5fZGF0YSggZm9ybSwgInN1Ym1pdEJ1YmJsZXMiLCB0cnVlICk7Ci0gICAgfQotICAgIH0p
OwotICAgIC8vIHJldHVybiB1bmRlZmluZWQgc2luY2Ugd2UgZG9uJ3QgbmVlZCBhbiBldmVudCBs
aXN0ZW5lcgotICAgIH0sCi0KLSAgICBwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHsK
LSAgICAvLyBJZiBmb3JtIHdhcyBzdWJtaXR0ZWQgYnkgdGhlIHVzZXIsIGJ1YmJsZSB0aGUgZXZl
bnQgdXAgdGhlIHRyZWUKLSAgICBpZiAoIGV2ZW50Ll9zdWJtaXRfYnViYmxlICkgewotICAgIGRl
bGV0ZSBldmVudC5fc3VibWl0X2J1YmJsZTsKLSAgICBpZiAoIHRoaXMucGFyZW50Tm9kZSAmJiAh
ZXZlbnQuaXNUcmlnZ2VyICkgewotICAgIGpRdWVyeS5ldmVudC5zaW11bGF0ZSggInN1Ym1pdCIs
IHRoaXMucGFyZW50Tm9kZSwgZXZlbnQsIHRydWUgKTsKLSAgICB9Ci0gICAgfQotICAgIH0sCi0K
LSAgICB0ZWFyZG93bjogZnVuY3Rpb24oKSB7Ci0gICAgLy8gT25seSBuZWVkIHRoaXMgZm9yIGRl
bGVnYXRlZCBmb3JtIHN1Ym1pdCBldmVudHMKLSAgICBpZiAoIGpRdWVyeS5ub2RlTmFtZSggdGhp
cywgImZvcm0iICkgKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFJlbW92
ZSBkZWxlZ2F0ZWQgaGFuZGxlcnM7IGNsZWFuRGF0YSBldmVudHVhbGx5IHJlYXBzIHN1Ym1pdCBo
YW5kbGVycyBhdHRhY2hlZCBhYm92ZQotICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsICIu
X3N1Ym1pdCIgKTsKLSAgICB9Ci0gICAgfTsKLX0KLQotLy8gSUUgY2hhbmdlIGRlbGVnYXRpb24g
YW5kIGNoZWNrYm94L3JhZGlvIGZpeAotaWYgKCAhalF1ZXJ5LnN1cHBvcnQuY2hhbmdlQnViYmxl
cyApIHsKLQotICAgIGpRdWVyeS5ldmVudC5zcGVjaWFsLmNoYW5nZSA9IHsKLQotICAgIHNldHVw
OiBmdW5jdGlvbigpIHsKLQotICAgIGlmICggcmZvcm1FbGVtcy50ZXN0KCB0aGlzLm5vZGVOYW1l
ICkgKSB7Ci0gICAgLy8gSUUgZG9lc24ndCBmaXJlIGNoYW5nZSBvbiBhIGNoZWNrL3JhZGlvIHVu
dGlsIGJsdXI7IHRyaWdnZXIgaXQgb24gY2xpY2sKLSAgICAvLyBhZnRlciBhIHByb3BlcnR5Y2hh
bmdlLiBFYXQgdGhlIGJsdXItY2hhbmdlIGluIHNwZWNpYWwuY2hhbmdlLmhhbmRsZS4KLSAgICAv
LyBUaGlzIHN0aWxsIGZpcmVzIG9uY2hhbmdlIGEgc2Vjb25kIHRpbWUgZm9yIGNoZWNrL3JhZGlv
IGFmdGVyIGJsdXIuCi0gICAgaWYgKCB0aGlzLnR5cGUgPT09ICJjaGVja2JveCIgfHwgdGhpcy50
eXBlID09PSAicmFkaW8iICkgewotICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsICJwcm9wZXJ0
eWNoYW5nZS5fY2hhbmdlIiwgZnVuY3Rpb24oIGV2ZW50ICkgewotICAgIGlmICggZXZlbnQub3Jp
Z2luYWxFdmVudC5wcm9wZXJ0eU5hbWUgPT09ICJjaGVja2VkIiApIHsKLSAgICB0aGlzLl9qdXN0
X2NoYW5nZWQgPSB0cnVlOwotICAgIH0KLSAgICB9KTsKLSAgICBqUXVlcnkuZXZlbnQuYWRkKCB0
aGlzLCAiY2xpY2suX2NoYW5nZSIsIGZ1bmN0aW9uKCBldmVudCApIHsKLSAgICBpZiAoIHRoaXMu
X2p1c3RfY2hhbmdlZCAmJiAhZXZlbnQuaXNUcmlnZ2VyICkgewotICAgIHRoaXMuX2p1c3RfY2hh
bmdlZCA9IGZhbHNlOwotICAgIH0KLSAgICAvLyBBbGxvdyB0cmlnZ2VyZWQsIHNpbXVsYXRlZCBj
aGFuZ2UgZXZlbnRzICgjMTE1MDApCi0gICAgalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCAiY2hhbmdl
IiwgdGhpcywgZXZlbnQsIHRydWUgKTsKLSAgICB9KTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICAvLyBEZWxlZ2F0ZWQgZXZlbnQ7IGxhenktYWRkIGEgY2hhbmdlIGhhbmRs
ZXIgb24gZGVzY2VuZGFudCBpbnB1dHMKLSAgICBqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCAiYmVm
b3JlYWN0aXZhdGUuX2NoYW5nZSIsIGZ1bmN0aW9uKCBlICkgewotICAgIHZhciBlbGVtID0gZS50
YXJnZXQ7Ci0KLSAgICBpZiAoIHJmb3JtRWxlbXMudGVzdCggZWxlbS5ub2RlTmFtZSApICYmICFq
UXVlcnkuX2RhdGEoIGVsZW0sICJjaGFuZ2VCdWJibGVzIiApICkgewotICAgIGpRdWVyeS5ldmVu
dC5hZGQoIGVsZW0sICJjaGFuZ2UuX2NoYW5nZSIsIGZ1bmN0aW9uKCBldmVudCApIHsKLSAgICBp
ZiAoIHRoaXMucGFyZW50Tm9kZSAmJiAhZXZlbnQuaXNTaW11bGF0ZWQgJiYgIWV2ZW50LmlzVHJp
Z2dlciApIHsKLSAgICBqUXVlcnkuZXZlbnQuc2ltdWxhdGUoICJjaGFuZ2UiLCB0aGlzLnBhcmVu
dE5vZGUsIGV2ZW50LCB0cnVlICk7Ci0gICAgfQotICAgIH0pOwotICAgIGpRdWVyeS5fZGF0YSgg
ZWxlbSwgImNoYW5nZUJ1YmJsZXMiLCB0cnVlICk7Ci0gICAgfQotICAgIH0pOwotICAgIH0sCi0K
LSAgICBoYW5kbGU6IGZ1bmN0aW9uKCBldmVudCApIHsKLSAgICB2YXIgZWxlbSA9IGV2ZW50LnRh
cmdldDsKLQotICAgIC8vIFN3YWxsb3cgbmF0aXZlIGNoYW5nZSBldmVudHMgZnJvbSBjaGVja2Jv
eC9yYWRpbywgd2UgYWxyZWFkeSB0cmlnZ2VyZWQgdGhlbSBhYm92ZQotICAgIGlmICggdGhpcyAh
PT0gZWxlbSB8fCBldmVudC5pc1NpbXVsYXRlZCB8fCBldmVudC5pc1RyaWdnZXIgfHwgKGVsZW0u
dHlwZSAhPT0gInJhZGlvIiAmJiBlbGVtLnR5cGUgIT09ICJjaGVja2JveCIpICkgewotICAgIHJl
dHVybiBldmVudC5oYW5kbGVPYmouaGFuZGxlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7Ci0g
ICAgfQotICAgIH0sCi0KLSAgICB0ZWFyZG93bjogZnVuY3Rpb24oKSB7Ci0gICAgalF1ZXJ5LmV2
ZW50LnJlbW92ZSggdGhpcywgIi5fY2hhbmdlIiApOwotCi0gICAgcmV0dXJuICFyZm9ybUVsZW1z
LnRlc3QoIHRoaXMubm9kZU5hbWUgKTsKLSAgICB9Ci0gICAgfTsKLX0KLQotLy8gQ3JlYXRlICJi
dWJibGluZyIgZm9jdXMgYW5kIGJsdXIgZXZlbnRzCi1pZiAoICFqUXVlcnkuc3VwcG9ydC5mb2N1
c2luQnViYmxlcyApIHsKLSAgICBqUXVlcnkuZWFjaCh7IGZvY3VzOiAiZm9jdXNpbiIsIGJsdXI6
ICJmb2N1c291dCIgfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHsKLQotICAgIC8vIEF0dGFjaCBh
IHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciB3aGlsZSBzb21lb25lIHdhbnRzIGZvY3VzaW4vZm9j
dXNvdXQKLSAgICB2YXIgYXR0YWNoZXMgPSAwLAotICAgIGhhbmRsZXIgPSBmdW5jdGlvbiggZXZl
bnQgKSB7Ci0gICAgalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50LnRhcmdldCwgalF1
ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKSwgdHJ1ZSApOwotICAgIH07Ci0KLSAgICBqUXVlcnkuZXZl
bnQuc3BlY2lhbFsgZml4IF0gPSB7Ci0gICAgc2V0dXA6IGZ1bmN0aW9uKCkgewotICAgIGlmICgg
YXR0YWNoZXMrKyA9PT0gMCApIHsKLSAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBvcmln
LCBoYW5kbGVyLCB0cnVlICk7Ci0gICAgfQotICAgIH0sCi0gICAgdGVhcmRvd246IGZ1bmN0aW9u
KCkgewotICAgIGlmICggLS1hdHRhY2hlcyA9PT0gMCApIHsKLSAgICBkb2N1bWVudC5yZW1vdmVF
dmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7Ci0gICAgfQotICAgIH0KLSAgICB9
OwotICAgIH0pOwotfQotCi1qUXVlcnkuZm4uZXh0ZW5kKHsKLQotICAgIG9uOiBmdW5jdGlvbigg
dHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgLypJTlRFUk5BTCovIG9uZSApIHsKLSAgICB2YXIg
dHlwZSwgb3JpZ0ZuOwotCi0gICAgLy8gVHlwZXMgY2FuIGJlIGEgbWFwIG9mIHR5cGVzL2hhbmRs
ZXJzCi0gICAgaWYgKCB0eXBlb2YgdHlwZXMgPT09ICJvYmplY3QiICkgewotICAgIC8vICggdHlw
ZXMtT2JqZWN0LCBzZWxlY3RvciwgZGF0YSApCi0gICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09
ICJzdHJpbmciICkgewotICAgIC8vICggdHlwZXMtT2JqZWN0LCBkYXRhICkKLSAgICBkYXRhID0g
ZGF0YSB8fCBzZWxlY3RvcjsKLSAgICBzZWxlY3RvciA9IHVuZGVmaW5lZDsKLSAgICB9Ci0gICAg
Zm9yICggdHlwZSBpbiB0eXBlcyApIHsKLSAgICB0aGlzLm9uKCB0eXBlLCBzZWxlY3RvciwgZGF0
YSwgdHlwZXNbIHR5cGUgXSwgb25lICk7Ci0gICAgfQotICAgIHJldHVybiB0aGlzOwotICAgIH0K
LQotICAgIGlmICggZGF0YSA9PSBudWxsICYmIGZuID09IG51bGwgKSB7Ci0gICAgLy8gKCB0eXBl
cywgZm4gKQotICAgIGZuID0gc2VsZWN0b3I7Ci0gICAgZGF0YSA9IHNlbGVjdG9yID0gdW5kZWZp
bmVkOwotICAgIH0gZWxzZSBpZiAoIGZuID09IG51bGwgKSB7Ci0gICAgaWYgKCB0eXBlb2Ygc2Vs
ZWN0b3IgPT09ICJzdHJpbmciICkgewotICAgIC8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApCi0g
ICAgZm4gPSBkYXRhOwotICAgIGRhdGEgPSB1bmRlZmluZWQ7Ci0gICAgfSBlbHNlIHsKLSAgICAv
LyAoIHR5cGVzLCBkYXRhLCBmbiApCi0gICAgZm4gPSBkYXRhOwotICAgIGRhdGEgPSBzZWxlY3Rv
cjsKLSAgICBzZWxlY3RvciA9IHVuZGVmaW5lZDsKLSAgICB9Ci0gICAgfQotICAgIGlmICggZm4g
PT09IGZhbHNlICkgewotICAgIGZuID0gcmV0dXJuRmFsc2U7Ci0gICAgfSBlbHNlIGlmICggIWZu
ICkgewotICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIGlmICggb25lID09PSAxICkgewot
ICAgIG9yaWdGbiA9IGZuOwotICAgIGZuID0gZnVuY3Rpb24oIGV2ZW50ICkgewotICAgIC8vIENh
biB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mbwotICAgIGpR
dWVyeSgpLm9mZiggZXZlbnQgKTsKLSAgICByZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1
bWVudHMgKTsKLSAgICB9OwotICAgIC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1v
dmUgdXNpbmcgb3JpZ0ZuCi0gICAgZm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1
aWQgPSBqUXVlcnkuZ3VpZCsrICk7Ci0gICAgfQotICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0
aW9uKCkgewotICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIHR5cGVzLCBmbiwgZGF0YSwgc2Vs
ZWN0b3IgKTsKLSAgICB9KTsKLSAgICB9LAotICAgIG9uZTogZnVuY3Rpb24oIHR5cGVzLCBzZWxl
Y3RvciwgZGF0YSwgZm4gKSB7Ci0gICAgcmV0dXJuIHRoaXMub24oIHR5cGVzLCBzZWxlY3Rvciwg
ZGF0YSwgZm4sIDEgKTsKLSAgICB9LAotICAgIG9mZjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3Rv
ciwgZm4gKSB7Ci0gICAgdmFyIGhhbmRsZU9iaiwgdHlwZTsKLSAgICBpZiAoIHR5cGVzICYmIHR5
cGVzLnByZXZlbnREZWZhdWx0ICYmIHR5cGVzLmhhbmRsZU9iaiApIHsKLSAgICAvLyAoIGV2ZW50
ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50Ci0gICAgaGFuZGxlT2JqID0gdHlwZXMuaGFuZGxl
T2JqOwotICAgIGpRdWVyeSggdHlwZXMuZGVsZWdhdGVUYXJnZXQgKS5vZmYoCi0gICAgaGFuZGxl
T2JqLm5hbWVzcGFjZSA/IGhhbmRsZU9iai5vcmlnVHlwZSArICIuIiArIGhhbmRsZU9iai5uYW1l
c3BhY2UgOiBoYW5kbGVPYmoub3JpZ1R5cGUsCi0gICAgaGFuZGxlT2JqLnNlbGVjdG9yLAotICAg
IGhhbmRsZU9iai5oYW5kbGVyCi0gICAgKTsKLSAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0gICAg
aWYgKCB0eXBlb2YgdHlwZXMgPT09ICJvYmplY3QiICkgewotICAgIC8vICggdHlwZXMtb2JqZWN0
IFssIHNlbGVjdG9yXSApCi0gICAgZm9yICggdHlwZSBpbiB0eXBlcyApIHsKLSAgICB0aGlzLm9m
ZiggdHlwZSwgc2VsZWN0b3IsIHR5cGVzWyB0eXBlIF0gKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRo
aXM7Ci0gICAgfQotICAgIGlmICggc2VsZWN0b3IgPT09IGZhbHNlIHx8IHR5cGVvZiBzZWxlY3Rv
ciA9PT0gImZ1bmN0aW9uIiApIHsKLSAgICAvLyAoIHR5cGVzIFssIGZuXSApCi0gICAgZm4gPSBz
ZWxlY3RvcjsKLSAgICBzZWxlY3RvciA9IHVuZGVmaW5lZDsKLSAgICB9Ci0gICAgaWYgKCBmbiA9
PT0gZmFsc2UgKSB7Ci0gICAgZm4gPSByZXR1cm5GYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRo
aXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCB0eXBl
cywgZm4sIHNlbGVjdG9yICk7Ci0gICAgfSk7Ci0gICAgfSwKLQotICAgIGJpbmQ6IGZ1bmN0aW9u
KCB0eXBlcywgZGF0YSwgZm4gKSB7Ci0gICAgcmV0dXJuIHRoaXMub24oIHR5cGVzLCBudWxsLCBk
YXRhLCBmbiApOwotICAgIH0sCi0gICAgdW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZuICkgewot
ICAgIHJldHVybiB0aGlzLm9mZiggdHlwZXMsIG51bGwsIGZuICk7Ci0gICAgfSwKLQotICAgIGRl
bGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBkYXRhLCBmbiApIHsKLSAgICByZXR1
cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApOwotICAgIH0sCi0gICAgdW5k
ZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZm4gKSB7Ci0gICAgLy8gKCBuYW1l
c3BhY2UgKSBvciAoIHNlbGVjdG9yLCB0eXBlcyBbLCBmbl0gKQotICAgIHJldHVybiBhcmd1bWVu
dHMubGVuZ3RoID09PSAxID8gdGhpcy5vZmYoIHNlbGVjdG9yLCAiKioiICkgOiB0aGlzLm9mZigg
dHlwZXMsIHNlbGVjdG9yIHx8ICIqKiIsIGZuICk7Ci0gICAgfSwKLQotICAgIHRyaWdnZXI6IGZ1
bmN0aW9uKCB0eXBlLCBkYXRhICkgewotICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7
Ci0gICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTsKLSAgICB9KTsK
LSAgICB9LAotICAgIHRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHsKLSAg
ICB2YXIgZWxlbSA9IHRoaXNbMF07Ci0gICAgaWYgKCBlbGVtICkgewotICAgIHJldHVybiBqUXVl
cnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgZWxlbSwgdHJ1ZSApOwotICAgIH0KLSAgICB9
Ci19KTsKLS8qIQotICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUKLSAqIENvcHlyaWdodCAy
MDEyIGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMKLSAqIFJlbGVhc2Vk
IHVuZGVyIHRoZSBNSVQgbGljZW5zZQotICogaHR0cDovL3NpenpsZWpzLmNvbS8KLSAqLwotKGZ1
bmN0aW9uKCB3aW5kb3csIHVuZGVmaW5lZCApIHsKLQotdmFyIGksCi0gICAgY2FjaGVkcnVucywK
LSAgICBFeHByLAotICAgIGdldFRleHQsCi0gICAgaXNYTUwsCi0gICAgY29tcGlsZSwKLSAgICBo
YXNEdXBsaWNhdGUsCi0gICAgb3V0ZXJtb3N0Q29udGV4dCwKLQotICAgIC8vIExvY2FsIGRvY3Vt
ZW50IHZhcnMKLSAgICBzZXREb2N1bWVudCwKLSAgICBkb2N1bWVudCwKLSAgICBkb2NFbGVtLAot
ICAgIGRvY3VtZW50SXNYTUwsCi0gICAgcmJ1Z2d5UVNBLAotICAgIHJidWdneU1hdGNoZXMsCi0g
ICAgbWF0Y2hlcywKLSAgICBjb250YWlucywKLSAgICBzb3J0T3JkZXIsCi0KLSAgICAvLyBJbnN0
YW5jZS1zcGVjaWZpYyBkYXRhCi0gICAgZXhwYW5kbyA9ICJzaXp6bGUiICsgLShuZXcgRGF0ZSgp
KSwKLSAgICBwcmVmZXJyZWREb2MgPSB3aW5kb3cuZG9jdW1lbnQsCi0gICAgc3VwcG9ydCA9IHt9
LAotICAgIGRpcnJ1bnMgPSAwLAotICAgIGRvbmUgPSAwLAotICAgIGNsYXNzQ2FjaGUgPSBjcmVh
dGVDYWNoZSgpLAotICAgIHRva2VuQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLAotICAgIGNvbXBpbGVy
Q2FjaGUgPSBjcmVhdGVDYWNoZSgpLAotCi0gICAgLy8gR2VuZXJhbC1wdXJwb3NlIGNvbnN0YW50
cwotICAgIHN0cnVuZGVmaW5lZCA9IHR5cGVvZiB1bmRlZmluZWQsCi0gICAgTUFYX05FR0FUSVZF
ID0gMSA8PCAzMSwKLQotICAgIC8vIEFycmF5IG1ldGhvZHMKLSAgICBhcnIgPSBbXSwKLSAgICBw
b3AgPSBhcnIucG9wLAotICAgIHB1c2ggPSBhcnIucHVzaCwKLSAgICBzbGljZSA9IGFyci5zbGlj
ZSwKLSAgICAvLyBVc2UgYSBzdHJpcHBlZC1kb3duIGluZGV4T2YgaWYgd2UgY2FuJ3QgdXNlIGEg
bmF0aXZlIG9uZQotICAgIGluZGV4T2YgPSBhcnIuaW5kZXhPZiB8fCBmdW5jdGlvbiggZWxlbSAp
IHsKLSAgICB2YXIgaSA9IDAsCi0gICAgbGVuID0gdGhpcy5sZW5ndGg7Ci0gICAgZm9yICggOyBp
IDwgbGVuOyBpKysgKSB7Ci0gICAgaWYgKCB0aGlzW2ldID09PSBlbGVtICkgewotICAgIHJldHVy
biBpOwotICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIC0xOwotICAgIH0sCi0KLQotICAgIC8vIFJl
Z3VsYXIgZXhwcmVzc2lvbnMKLQotICAgIC8vIFdoaXRlc3BhY2UgY2hhcmFjdGVycyBodHRwOi8v
d3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jd2hpdGVzcGFjZQotICAgIHdoaXRlc3BhY2Ug
PSAiW1xceDIwXFx0XFxyXFxuXFxmXSIsCi0gICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvY3Nz
My1zeW50YXgvI2NoYXJhY3RlcnMKLSAgICBjaGFyYWN0ZXJFbmNvZGluZyA9ICIoPzpcXFxcLnxb
XFx3LV18W15cXHgwMC1cXHhhMF0pKyIsCi0KLSAgICAvLyBMb29zZWx5IG1vZGVsZWQgb24gQ1NT
IGlkZW50aWZpZXIgY2hhcmFjdGVycwotICAgIC8vIEFuIHVucXVvdGVkIHZhbHVlIHNob3VsZCBi
ZSBhIENTUyBpZGVudGlmaWVyIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc2VsZWN0b3JzLyNh
dHRyaWJ1dGUtc2VsZWN0b3JzCi0gICAgLy8gUHJvcGVyIHN5bnRheDogaHR0cDovL3d3dy53My5v
cmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI3ZhbHVlLWRlZi1pZGVudGlmaWVyCi0gICAgaWRlbnRp
ZmllciA9IGNoYXJhY3RlckVuY29kaW5nLnJlcGxhY2UoICJ3IiwgIncjIiApLAotCi0gICAgLy8g
QWNjZXB0YWJsZSBvcGVyYXRvcnMgaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRy
aWJ1dGUtc2VsZWN0b3JzCi0gICAgb3BlcmF0b3JzID0gIihbKl4kfCF+XT89KSIsCi0gICAgYXR0
cmlidXRlcyA9ICJcXFsiICsgd2hpdGVzcGFjZSArICIqKCIgKyBjaGFyYWN0ZXJFbmNvZGluZyAr
ICIpIiArIHdoaXRlc3BhY2UgKwotICAgICIqKD86IiArIG9wZXJhdG9ycyArIHdoaXRlc3BhY2Ug
KyAiKig/OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCIgKyBpZGVudGlmaWVyICsg
Iil8KXwpIiArIHdoaXRlc3BhY2UgKyAiKlxcXSIsCi0KLSAgICAvLyBQcmVmZXIgYXJndW1lbnRz
IHF1b3RlZCwKLSAgICAvLyAgIHRoZW4gbm90IGNvbnRhaW5pbmcgcHNldWRvcy9icmFja2V0cywK
LSAgICAvLyAgIHRoZW4gYXR0cmlidXRlIHNlbGVjdG9ycy9ub24tcGFyZW50aGV0aWNhbCBleHBy
ZXNzaW9ucywKLSAgICAvLyAgIHRoZW4gYW55dGhpbmcgZWxzZQotICAgIC8vIFRoZXNlIHByZWZl
cmVuY2VzIGFyZSBoZXJlIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNlbGVjdG9ycwotICAgIC8v
ICAgbmVlZGluZyB0b2tlbml6ZSBpbiB0aGUgUFNFVURPIHByZUZpbHRlcgotICAgIHBzZXVkb3Mg
PSAiOigiICsgY2hhcmFjdGVyRW5jb2RpbmcgKyAiKSg/OlxcKCgoWydcIl0pKCg/OlxcXFwufFte
XFxcXF0pKj8pXFwzfCgoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfCIgKyBhdHRyaWJ1dGVzLnJlcGxh
Y2UoIDMsIDggKSArICIpKil8LiopXFwpfCkiLAotCi0gICAgLy8gTGVhZGluZyBhbmQgbm9uLWVz
Y2FwZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSwgY2FwdHVyaW5nIHNvbWUgbm9uLXdoaXRlc3BhY2Ug
Y2hhcmFjdGVycyBwcmVjZWRpbmcgdGhlIGxhdHRlcgotICAgIHJ0cmltID0gbmV3IFJlZ0V4cCgg
Il4iICsgd2hpdGVzcGFjZSArICIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiICsgd2hpdGVz
cGFjZSArICIrJCIsICJnIiApLAotCi0gICAgcmNvbW1hID0gbmV3IFJlZ0V4cCggIl4iICsgd2hp
dGVzcGFjZSArICIqLCIgKyB3aGl0ZXNwYWNlICsgIioiICksCi0gICAgcmNvbWJpbmF0b3JzID0g
bmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFjZSArICIqKFtcXHgyMFxcdFxcclxcblxcZj4rfl0p
IiArIHdoaXRlc3BhY2UgKyAiKiIgKSwKLSAgICBycHNldWRvID0gbmV3IFJlZ0V4cCggcHNldWRv
cyApLAotICAgIHJpZGVudGlmaWVyID0gbmV3IFJlZ0V4cCggIl4iICsgaWRlbnRpZmllciArICIk
IiApLAotCi0gICAgbWF0Y2hFeHByID0gewotICAgICJJRCI6IG5ldyBSZWdFeHAoICJeIygiICsg
Y2hhcmFjdGVyRW5jb2RpbmcgKyAiKSIgKSwKLSAgICAiQ0xBU1MiOiBuZXcgUmVnRXhwKCAiXlxc
LigiICsgY2hhcmFjdGVyRW5jb2RpbmcgKyAiKSIgKSwKLSAgICAiTkFNRSI6IG5ldyBSZWdFeHAo
ICJeXFxbbmFtZT1bJ1wiXT8oIiArIGNoYXJhY3RlckVuY29kaW5nICsgIilbJ1wiXT9cXF0iICks
Ci0gICAgIlRBRyI6IG5ldyBSZWdFeHAoICJeKCIgKyBjaGFyYWN0ZXJFbmNvZGluZy5yZXBsYWNl
KCAidyIsICJ3KiIgKSArICIpIiApLAotICAgICJBVFRSIjogbmV3IFJlZ0V4cCggIl4iICsgYXR0
cmlidXRlcyApLAotICAgICJQU0VVRE8iOiBuZXcgUmVnRXhwKCAiXiIgKyBwc2V1ZG9zICksCi0g
ICAgIkNISUxEIjogbmV3IFJlZ0V4cCggIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3Qp
LShjaGlsZHxvZi10eXBlKSg/OlxcKCIgKyB3aGl0ZXNwYWNlICsKLSAgICAiKihldmVufG9kZHwo
KFsrLV18KShcXGQqKW58KSIgKyB3aGl0ZXNwYWNlICsgIiooPzooWystXXwpIiArIHdoaXRlc3Bh
Y2UgKwotICAgICIqKFxcZCspfCkpIiArIHdoaXRlc3BhY2UgKyAiKlxcKXwpIiwgImkiICksCi0g
ICAgLy8gRm9yIHVzZSBpbiBsaWJyYXJpZXMgaW1wbGVtZW50aW5nIC5pcygpCi0gICAgLy8gV2Ug
dXNlIHRoaXMgZm9yIFBPUyBtYXRjaGluZyBpbiBgc2VsZWN0YAotICAgICJuZWVkc0NvbnRleHQi
OiBuZXcgUmVnRXhwKCAiXiIgKyB3aGl0ZXNwYWNlICsgIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0
fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcKCIgKwotICAgIHdoaXRlc3BhY2UgKyAiKigoPzotXFxk
KT9cXGQqKSIgKyB3aGl0ZXNwYWNlICsgIipcXCl8KSg/PVteLV18JCkiLCAiaSIgKQotICAgIH0s
Ci0KLSAgICByc2libGluZyA9IC9bXHgyMFx0XHJcblxmXSpbK35dLywKLQotICAgIHJuYXRpdmUg
PSAvXltee10rXHtccypcW25hdGl2ZSBjb2RlLywKLQotICAgIC8vIEVhc2lseS1wYXJzZWFibGUv
cmV0cmlldmFibGUgSUQgb3IgVEFHIG9yIENMQVNTIHNlbGVjdG9ycwotICAgIHJxdWlja0V4cHIg
PSAvXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLAotCi0gICAgcmlucHV0cyA9IC9e
KD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksCi0gICAgcmhlYWRlciA9IC9eaFxk
JC9pLAotCi0gICAgcmVzY2FwZSA9IC8nfFxcL2csCi0gICAgcmF0dHJpYnV0ZVF1b3RlcyA9IC9c
PVtceDIwXHRcclxuXGZdKihbXiciXF1dKilbXHgyMFx0XHJcblxmXSpcXS9nLAotCi0gICAgLy8g
Q1NTIGVzY2FwZXMgaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI2VzY2Fw
ZWQtY2hhcmFjdGVycwotICAgIHJ1bmVzY2FwZSA9IC9cXChbXGRhLWZBLUZdezEsNn1bXHgyMFx0
XHJcblxmXT98LikvZywKLSAgICBmdW5lc2NhcGUgPSBmdW5jdGlvbiggXywgZXNjYXBlZCApIHsK
LSAgICB2YXIgaGlnaCA9ICIweCIgKyBlc2NhcGVkIC0gMHgxMDAwMDsKLSAgICAvLyBOYU4gbWVh
bnMgbm9uLWNvZGVwb2ludAotICAgIHJldHVybiBoaWdoICE9PSBoaWdoID8KLSAgICBlc2NhcGVk
IDoKLSAgICAvLyBCTVAgY29kZXBvaW50Ci0gICAgaGlnaCA8IDAgPwotICAgIFN0cmluZy5mcm9t
Q2hhckNvZGUoIGhpZ2ggKyAweDEwMDAwICkgOgotICAgIC8vIFN1cHBsZW1lbnRhbCBQbGFuZSBj
b2RlcG9pbnQgKHN1cnJvZ2F0ZSBwYWlyKQotICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2gg
Pj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNGRiB8IDB4REMwMCApOwotICAgIH07Ci0KLS8vIFVz
ZSBhIHN0cmlwcGVkLWRvd24gc2xpY2UgaWYgd2UgY2FuJ3QgdXNlIGEgbmF0aXZlIG9uZQotdHJ5
IHsKLSAgICBzbGljZS5jYWxsKCBwcmVmZXJyZWREb2MuZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9k
ZXMsIDAgKVswXS5ub2RlVHlwZTsKLX0gY2F0Y2ggKCBlICkgewotICAgIHNsaWNlID0gZnVuY3Rp
b24oIGkgKSB7Ci0gICAgdmFyIGVsZW0sCi0gICAgcmVzdWx0cyA9IFtdOwotICAgIHdoaWxlICgg
KGVsZW0gPSB0aGlzW2krK10pICkgewotICAgIHJlc3VsdHMucHVzaCggZWxlbSApOwotICAgIH0K
LSAgICByZXR1cm4gcmVzdWx0czsKLSAgICB9OwotfQotCi0vKioKLSAqIEZvciBmZWF0dXJlIGRl
dGVjdGlvbgotICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIHRlc3QgZm9y
IG5hdGl2ZSBzdXBwb3J0Ci0gKi8KLWZ1bmN0aW9uIGlzTmF0aXZlKCBmbiApIHsKLSAgICByZXR1
cm4gcm5hdGl2ZS50ZXN0KCBmbiArICIiICk7Ci19Ci0KLS8qKgotICogQ3JlYXRlIGtleS12YWx1
ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXplCi0gKiBAcmV0dXJucyB7RnVuY3Rpb24oc3RyaW5nLCBP
YmplY3QpfSBSZXR1cm5zIHRoZSBPYmplY3QgZGF0YSBhZnRlciBzdG9yaW5nIGl0IG9uIGl0c2Vs
ZiB3aXRoCi0gKiAgICBwcm9wZXJ0eSBuYW1lIHRoZSAoc3BhY2Utc3VmZml4ZWQpIHN0cmluZyBh
bmQgKGlmIHRoZSBjYWNoZSBpcyBsYXJnZXIgdGhhbiBFeHByLmNhY2hlTGVuZ3RoKQotICogICAg
ZGVsZXRpbmcgdGhlIG9sZGVzdCBlbnRyeQotICovCi1mdW5jdGlvbiBjcmVhdGVDYWNoZSgpIHsK
LSAgICB2YXIgY2FjaGUsCi0gICAga2V5cyA9IFtdOwotCi0gICAgcmV0dXJuIChjYWNoZSA9IGZ1
bmN0aW9uKCBrZXksIHZhbHVlICkgewotICAgIC8vIFVzZSAoa2V5ICsgIiAiKSB0byBhdm9pZCBj
b2xsaXNpb24gd2l0aCBuYXRpdmUgcHJvdG90eXBlIHByb3BlcnRpZXMgKHNlZSBJc3N1ZSAjMTU3
KQotICAgIGlmICgga2V5cy5wdXNoKCBrZXkgKz0gIiAiICkgPiBFeHByLmNhY2hlTGVuZ3RoICkg
ewotICAgIC8vIE9ubHkga2VlcCB0aGUgbW9zdCByZWNlbnQgZW50cmllcwotICAgIGRlbGV0ZSBj
YWNoZVsga2V5cy5zaGlmdCgpIF07Ci0gICAgfQotICAgIHJldHVybiAoY2FjaGVbIGtleSBdID0g
dmFsdWUpOwotICAgIH0pOwotfQotCi0vKioKLSAqIE1hcmsgYSBmdW5jdGlvbiBmb3Igc3BlY2lh
bCB1c2UgYnkgU2l6emxlCi0gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8g
bWFyawotICovCi1mdW5jdGlvbiBtYXJrRnVuY3Rpb24oIGZuICkgewotICAgIGZuWyBleHBhbmRv
IF0gPSB0cnVlOwotICAgIHJldHVybiBmbjsKLX0KLQotLyoqCi0gKiBTdXBwb3J0IHRlc3Rpbmcg
dXNpbmcgYW4gZWxlbWVudAotICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gUGFzc2VkIHRoZSBjcmVh
dGVkIGRpdiBhbmQgZXhwZWN0cyBhIGJvb2xlYW4gcmVzdWx0Ci0gKi8KLWZ1bmN0aW9uIGFzc2Vy
dCggZm4gKSB7Ci0gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwot
Ci0gICAgdHJ5IHsKLSAgICByZXR1cm4gZm4oIGRpdiApOwotICAgIH0gY2F0Y2ggKGUpIHsKLSAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfSBmaW5hbGx5IHsKLSAgICAvLyByZWxlYXNlIG1lbW9yeSBp
biBJRQotICAgIGRpdiA9IG51bGw7Ci0gICAgfQotfQotCi1mdW5jdGlvbiBTaXp6bGUoIHNlbGVj
dG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkgewotICAgIHZhciBtYXRjaCwgZWxlbSwgbSwg
bm9kZVR5cGUsCi0gICAgLy8gUVNBIHZhcnMKLSAgICBpLCBncm91cHMsIG9sZCwgbmlkLCBuZXdD
b250ZXh0LCBuZXdTZWxlY3RvcjsKLQotICAgIGlmICggKCBjb250ZXh0ID8gY29udGV4dC5vd25l
ckRvY3VtZW50IHx8IGNvbnRleHQgOiBwcmVmZXJyZWREb2MgKSAhPT0gZG9jdW1lbnQgKSB7Ci0g
ICAgc2V0RG9jdW1lbnQoIGNvbnRleHQgKTsKLSAgICB9Ci0KLSAgICBjb250ZXh0ID0gY29udGV4
dCB8fCBkb2N1bWVudDsKLSAgICByZXN1bHRzID0gcmVzdWx0cyB8fCBbXTsKLQotICAgIGlmICgg
IXNlbGVjdG9yIHx8IHR5cGVvZiBzZWxlY3RvciAhPT0gInN0cmluZyIgKSB7Ci0gICAgcmV0dXJu
IHJlc3VsdHM7Ci0gICAgfQotCi0gICAgaWYgKCAobm9kZVR5cGUgPSBjb250ZXh0Lm5vZGVUeXBl
KSAhPT0gMSAmJiBub2RlVHlwZSAhPT0gOSApIHsKLSAgICByZXR1cm4gW107Ci0gICAgfQotCi0g
ICAgaWYgKCAhZG9jdW1lbnRJc1hNTCAmJiAhc2VlZCApIHsKLQotICAgIC8vIFNob3J0Y3V0cwot
ICAgIGlmICggKG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApKSApIHsKLSAgICAv
LyBTcGVlZC11cDogU2l6emxlKCIjSUQiKQotICAgIGlmICggKG0gPSBtYXRjaFsxXSkgKSB7Ci0g
ICAgaWYgKCBub2RlVHlwZSA9PT0gOSApIHsKLSAgICBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50
QnlJZCggbSApOwotICAgIC8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2ggd2hlbiBCbGFja2Jl
cnJ5IDQuNiByZXR1cm5zCi0gICAgLy8gbm9kZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRoZSBk
b2N1bWVudCAjNjk2MwotICAgIGlmICggZWxlbSAmJiBlbGVtLnBhcmVudE5vZGUgKSB7Ci0gICAg
Ly8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIElFLCBPcGVyYSwgYW5kIFdlYmtpdCByZXR1cm4gaXRl
bXMKLSAgICAvLyBieSBuYW1lIGluc3RlYWQgb2YgSUQKLSAgICBpZiAoIGVsZW0uaWQgPT09IG0g
KSB7Ci0gICAgcmVzdWx0cy5wdXNoKCBlbGVtICk7Ci0gICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAg
fQotICAgIH0gZWxzZSB7Ci0gICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgfQotICAgIH0gZWxzZSB7
Ci0gICAgLy8gQ29udGV4dCBpcyBub3QgYSBkb2N1bWVudAotICAgIGlmICggY29udGV4dC5vd25l
ckRvY3VtZW50ICYmIChlbGVtID0gY29udGV4dC5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCBtICkpICYmCi0gICAgY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKSAmJiBlbGVtLmlkID09PSBt
ICkgewotICAgIHJlc3VsdHMucHVzaCggZWxlbSApOwotICAgIHJldHVybiByZXN1bHRzOwotICAg
IH0KLSAgICB9Ci0KLSAgICAvLyBTcGVlZC11cDogU2l6emxlKCJUQUciKQotICAgIH0gZWxzZSBp
ZiAoIG1hdGNoWzJdICkgewotICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIHNsaWNlLmNhbGwoY29u
dGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggc2VsZWN0b3IgKSwgMCkgKTsKLSAgICByZXR1cm4g
cmVzdWx0czsKLQotICAgIC8vIFNwZWVkLXVwOiBTaXp6bGUoIi5DTEFTUyIpCi0gICAgfSBlbHNl
IGlmICggKG0gPSBtYXRjaFszXSkgJiYgc3VwcG9ydC5nZXRCeUNsYXNzTmFtZSAmJiBjb250ZXh0
LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSB7Ci0gICAgcHVzaC5hcHBseSggcmVzdWx0cywgc2xp
Y2UuY2FsbChjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIG0gKSwgMCkgKTsKLSAgICBy
ZXR1cm4gcmVzdWx0czsKLSAgICB9Ci0gICAgfQotCi0gICAgLy8gUVNBIHBhdGgKLSAgICBpZiAo
IHN1cHBvcnQucXNhICYmICFyYnVnZ3lRU0EudGVzdChzZWxlY3RvcikgKSB7Ci0gICAgb2xkID0g
dHJ1ZTsKLSAgICBuaWQgPSBleHBhbmRvOwotICAgIG5ld0NvbnRleHQgPSBjb250ZXh0OwotICAg
IG5ld1NlbGVjdG9yID0gbm9kZVR5cGUgPT09IDkgJiYgc2VsZWN0b3I7Ci0KLSAgICAvLyBxU0Eg
d29ya3Mgc3RyYW5nZWx5IG9uIEVsZW1lbnQtcm9vdGVkIHF1ZXJpZXMKLSAgICAvLyBXZSBjYW4g
d29yayBhcm91bmQgdGhpcyBieSBzcGVjaWZ5aW5nIGFuIGV4dHJhIElEIG9uIHRoZSByb290Ci0g
ICAgLy8gYW5kIHdvcmtpbmcgdXAgZnJvbSB0aGVyZSAoVGhhbmtzIHRvIEFuZHJldyBEdXBvbnQg
Zm9yIHRoZSB0ZWNobmlxdWUpCi0gICAgLy8gSUUgOCBkb2Vzbid0IHdvcmsgb24gb2JqZWN0IGVs
ZW1lbnRzCi0gICAgaWYgKCBub2RlVHlwZSA9PT0gMSAmJiBjb250ZXh0Lm5vZGVOYW1lLnRvTG93
ZXJDYXNlKCkgIT09ICJvYmplY3QiICkgewotICAgIGdyb3VwcyA9IHRva2VuaXplKCBzZWxlY3Rv
ciApOwotCi0gICAgaWYgKCAob2xkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUoImlkIikpICkgewot
ICAgIG5pZCA9IG9sZC5yZXBsYWNlKCByZXNjYXBlLCAiXFwkJiIgKTsKLSAgICB9IGVsc2Ugewot
ICAgIGNvbnRleHQuc2V0QXR0cmlidXRlKCAiaWQiLCBuaWQgKTsKLSAgICB9Ci0gICAgbmlkID0g
IltpZD0nIiArIG5pZCArICInXSAiOwotCi0gICAgaSA9IGdyb3Vwcy5sZW5ndGg7Ci0gICAgd2hp
bGUgKCBpLS0gKSB7Ci0gICAgZ3JvdXBzW2ldID0gbmlkICsgdG9TZWxlY3RvciggZ3JvdXBzW2ld
ICk7Ci0gICAgfQotICAgIG5ld0NvbnRleHQgPSByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYm
IGNvbnRleHQucGFyZW50Tm9kZSB8fCBjb250ZXh0OwotICAgIG5ld1NlbGVjdG9yID0gZ3JvdXBz
LmpvaW4oIiwiKTsKLSAgICB9Ci0KLSAgICBpZiAoIG5ld1NlbGVjdG9yICkgewotICAgIHRyeSB7
Ci0gICAgcHVzaC5hcHBseSggcmVzdWx0cywgc2xpY2UuY2FsbCggbmV3Q29udGV4dC5xdWVyeVNl
bGVjdG9yQWxsKAotICAgIG5ld1NlbGVjdG9yCi0gICAgKSwgMCApICk7Ci0gICAgcmV0dXJuIHJl
c3VsdHM7Ci0gICAgfSBjYXRjaChxc2FFcnJvcikgewotICAgIH0gZmluYWxseSB7Ci0gICAgaWYg
KCAhb2xkICkgewotICAgIGNvbnRleHQucmVtb3ZlQXR0cmlidXRlKCJpZCIpOwotICAgIH0KLSAg
ICB9Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBBbGwgb3RoZXJzCi0gICAgcmV0dXJu
IHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sICIkMSIgKSwgY29udGV4dCwgcmVzdWx0
cywgc2VlZCApOwotfQotCi0vKioKLSAqIERldGVjdCB4bWwKLSAqIEBwYXJhbSB7RWxlbWVudHxP
YmplY3R9IGVsZW0gQW4gZWxlbWVudCBvciBhIGRvY3VtZW50Ci0gKi8KLWlzWE1MID0gU2l6emxl
LmlzWE1MID0gZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgLy8gZG9jdW1lbnRFbGVtZW50IGlzIHZl
cmlmaWVkIGZvciBjYXNlcyB3aGVyZSBpdCBkb2Vzbid0IHlldCBleGlzdAotICAgIC8vIChzdWNo
IGFzIGxvYWRpbmcgaWZyYW1lcyBpbiBJRSAtICM0ODMzKQotICAgIHZhciBkb2N1bWVudEVsZW1l
bnQgPSBlbGVtICYmIChlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSkuZG9jdW1lbnRFbGVtZW50
OwotICAgIHJldHVybiBkb2N1bWVudEVsZW1lbnQgPyBkb2N1bWVudEVsZW1lbnQubm9kZU5hbWUg
IT09ICJIVE1MIiA6IGZhbHNlOwotfTsKLQotLyoqCi0gKiBTZXRzIGRvY3VtZW50LXJlbGF0ZWQg
dmFyaWFibGVzIG9uY2UgYmFzZWQgb24gdGhlIGN1cnJlbnQgZG9jdW1lbnQKLSAqIEBwYXJhbSB7
RWxlbWVudHxPYmplY3R9IFtkb2NdIEFuIGVsZW1lbnQgb3IgZG9jdW1lbnQgb2JqZWN0IHRvIHVz
ZSB0byBzZXQgdGhlIGRvY3VtZW50Ci0gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBj
dXJyZW50IGRvY3VtZW50Ci0gKi8KLXNldERvY3VtZW50ID0gU2l6emxlLnNldERvY3VtZW50ID0g
ZnVuY3Rpb24oIG5vZGUgKSB7Ci0gICAgdmFyIGRvYyA9IG5vZGUgPyBub2RlLm93bmVyRG9jdW1l
bnQgfHwgbm9kZSA6IHByZWZlcnJlZERvYzsKLQotICAgIC8vIElmIG5vIGRvY3VtZW50IGFuZCBk
b2N1bWVudEVsZW1lbnQgaXMgYXZhaWxhYmxlLCByZXR1cm4KLSAgICBpZiAoIGRvYyA9PT0gZG9j
dW1lbnQgfHwgZG9jLm5vZGVUeXBlICE9PSA5IHx8ICFkb2MuZG9jdW1lbnRFbGVtZW50ICkgewot
ICAgIHJldHVybiBkb2N1bWVudDsKLSAgICB9Ci0KLSAgICAvLyBTZXQgb3VyIGRvY3VtZW50Ci0g
ICAgZG9jdW1lbnQgPSBkb2M7Ci0gICAgZG9jRWxlbSA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7Ci0K
LSAgICAvLyBTdXBwb3J0IHRlc3RzCi0gICAgZG9jdW1lbnRJc1hNTCA9IGlzWE1MKCBkb2MgKTsK
LQotICAgIC8vIENoZWNrIGlmIGdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikgcmV0dXJucyBvbmx5
IGVsZW1lbnRzCi0gICAgc3VwcG9ydC50YWdOYW1lTm9Db21tZW50cyA9IGFzc2VydChmdW5jdGlv
biggZGl2ICkgewotICAgIGRpdi5hcHBlbmRDaGlsZCggZG9jLmNyZWF0ZUNvbW1lbnQoIiIpICk7
Ci0gICAgcmV0dXJuICFkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGg7Ci0gICAg
fSk7Ci0KLSAgICAvLyBDaGVjayBpZiBhdHRyaWJ1dGVzIHNob3VsZCBiZSByZXRyaWV2ZWQgYnkg
YXR0cmlidXRlIG5vZGVzCi0gICAgc3VwcG9ydC5hdHRyaWJ1dGVzID0gYXNzZXJ0KGZ1bmN0aW9u
KCBkaXYgKSB7Ci0gICAgZGl2LmlubmVySFRNTCA9ICI8c2VsZWN0Pjwvc2VsZWN0PiI7Ci0gICAg
dmFyIHR5cGUgPSB0eXBlb2YgZGl2Lmxhc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIm11bHRpcGxlIik7
Ci0gICAgLy8gSUU4IHJldHVybnMgYSBzdHJpbmcgZm9yIHNvbWUgYXR0cmlidXRlcyBldmVuIHdo
ZW4gbm90IHByZXNlbnQKLSAgICByZXR1cm4gdHlwZSAhPT0gImJvb2xlYW4iICYmIHR5cGUgIT09
ICJzdHJpbmciOwotICAgIH0pOwotCi0gICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSBjYW4gYmUgdHJ1c3RlZAotICAgIHN1cHBvcnQuZ2V0QnlDbGFzc05hbWUgPSBhc3NlcnQo
ZnVuY3Rpb24oIGRpdiApIHsKLSAgICAvLyBPcGVyYSBjYW4ndCBmaW5kIGEgc2Vjb25kIGNsYXNz
bmFtZSAoaW4gOS42KQotICAgIGRpdi5pbm5lckhUTUwgPSAiPGRpdiBjbGFzcz0naGlkZGVuIGUn
PjwvZGl2PjxkaXYgY2xhc3M9J2hpZGRlbic+PC9kaXY+IjsKLSAgICBpZiAoICFkaXYuZ2V0RWxl
bWVudHNCeUNsYXNzTmFtZSB8fCAhZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5n
dGggKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFNhZmFyaSAzLjIgY2Fj
aGVzIGNsYXNzIGF0dHJpYnV0ZXMgYW5kIGRvZXNuJ3QgY2F0Y2ggY2hhbmdlcwotICAgIGRpdi5s
YXN0Q2hpbGQuY2xhc3NOYW1lID0gImUiOwotICAgIHJldHVybiBkaXYuZ2V0RWxlbWVudHNCeUNs
YXNzTmFtZSgiZSIpLmxlbmd0aCA9PT0gMjsKLSAgICB9KTsKLQotICAgIC8vIENoZWNrIGlmIGdl
dEVsZW1lbnRCeUlkIHJldHVybnMgZWxlbWVudHMgYnkgbmFtZQotICAgIC8vIENoZWNrIGlmIGdl
dEVsZW1lbnRzQnlOYW1lIHByaXZpbGVnZXMgZm9ybSBjb250cm9scyBvciByZXR1cm5zIGVsZW1l
bnRzIGJ5IElECi0gICAgc3VwcG9ydC5nZXRCeU5hbWUgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdiAp
IHsKLSAgICAvLyBJbmplY3QgY29udGVudAotICAgIGRpdi5pZCA9IGV4cGFuZG8gKyAwOwotICAg
IGRpdi5pbm5lckhUTUwgPSAiPGEgbmFtZT0nIiArIGV4cGFuZG8gKyAiJz48L2E+PGRpdiBuYW1l
PSciICsgZXhwYW5kbyArICInPjwvZGl2PiI7Ci0gICAgZG9jRWxlbS5pbnNlcnRCZWZvcmUoIGRp
diwgZG9jRWxlbS5maXJzdENoaWxkICk7Ci0KLSAgICAvLyBUZXN0Ci0gICAgdmFyIHBhc3MgPSBk
b2MuZ2V0RWxlbWVudHNCeU5hbWUgJiYKLSAgICAvLyBidWdneSBicm93c2VycyB3aWxsIHJldHVy
biBmZXdlciB0aGFuIHRoZSBjb3JyZWN0IDIKLSAgICBkb2MuZ2V0RWxlbWVudHNCeU5hbWUoIGV4
cGFuZG8gKS5sZW5ndGggPT09IDIgKwotICAgIC8vIGJ1Z2d5IGJyb3dzZXJzIHdpbGwgcmV0dXJu
IG1vcmUgdGhhbiB0aGUgY29ycmVjdCAwCi0gICAgZG9jLmdldEVsZW1lbnRzQnlOYW1lKCBleHBh
bmRvICsgMCApLmxlbmd0aDsKLSAgICBzdXBwb3J0LmdldElkTm90TmFtZSA9ICFkb2MuZ2V0RWxl
bWVudEJ5SWQoIGV4cGFuZG8gKTsKLQotICAgIC8vIENsZWFudXAKLSAgICBkb2NFbGVtLnJlbW92
ZUNoaWxkKCBkaXYgKTsKLQotICAgIHJldHVybiBwYXNzOwotICAgIH0pOwotCi0gICAgLy8gSUU2
LzcgcmV0dXJuIG1vZGlmaWVkIGF0dHJpYnV0ZXMKLSAgICBFeHByLmF0dHJIYW5kbGUgPSBhc3Nl
cnQoZnVuY3Rpb24oIGRpdiApIHsKLSAgICBkaXYuaW5uZXJIVE1MID0gIjxhIGhyZWY9JyMnPjwv
YT4iOwotICAgIHJldHVybiBkaXYuZmlyc3RDaGlsZCAmJiB0eXBlb2YgZGl2LmZpcnN0Q2hpbGQu
Z2V0QXR0cmlidXRlICE9PSBzdHJ1bmRlZmluZWQgJiYKLSAgICBkaXYuZmlyc3RDaGlsZC5nZXRB
dHRyaWJ1dGUoImhyZWYiKSA9PT0gIiMiOwotICAgIH0pID8KLSAgICB7fSA6Ci0gICAgewotICAg
ICJocmVmIjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRl
KCAiaHJlZiIsIDIgKTsKLSAgICB9LAotICAgICJ0eXBlIjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0g
ICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJ0eXBlIik7Ci0gICAgfQotICAgIH07Ci0KLSAg
ICAvLyBJRCBmaW5kIGFuZCBmaWx0ZXIKLSAgICBpZiAoIHN1cHBvcnQuZ2V0SWROb3ROYW1lICkg
ewotICAgIEV4cHIuZmluZFsiSUQiXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHsKLSAgICBp
ZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBzdHJ1bmRlZmluZWQgJiYgIWRv
Y3VtZW50SXNYTUwgKSB7Ci0gICAgdmFyIG0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCAp
OwotICAgIC8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2ggd2hlbiBCbGFja2JlcnJ5IDQuNiBy
ZXR1cm5zCi0gICAgLy8gbm9kZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRoZSBkb2N1bWVudCAj
Njk2MwotICAgIHJldHVybiBtICYmIG0ucGFyZW50Tm9kZSA/IFttXSA6IFtdOwotICAgIH0KLSAg
ICB9OwotICAgIEV4cHIuZmlsdGVyWyJJRCJdID0gZnVuY3Rpb24oIGlkICkgewotICAgIHZhciBh
dHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApOwotICAgIHJldHVybiBm
dW5jdGlvbiggZWxlbSApIHsKLSAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoImlkIikgPT09
IGF0dHJJZDsKLSAgICB9OwotICAgIH07Ci0gICAgfSBlbHNlIHsKLSAgICBFeHByLmZpbmRbIklE
Il0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7Ci0gICAgaWYgKCB0eXBlb2YgY29udGV4dC5n
ZXRFbGVtZW50QnlJZCAhPT0gc3RydW5kZWZpbmVkICYmICFkb2N1bWVudElzWE1MICkgewotICAg
IHZhciBtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTsKLQotICAgIHJldHVybiBtID8K
LSAgICBtLmlkID09PSBpZCB8fCB0eXBlb2YgbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBzdHJ1bmRl
ZmluZWQgJiYgbS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpLnZhbHVlID09PSBpZCA/Ci0gICAgW21d
IDoKLSAgICB1bmRlZmluZWQgOgotICAgIFtdOwotICAgIH0KLSAgICB9OwotICAgIEV4cHIuZmls
dGVyWyJJRCJdID0gIGZ1bmN0aW9uKCBpZCApIHsKLSAgICB2YXIgYXR0cklkID0gaWQucmVwbGFj
ZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTsKLSAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7
Ci0gICAgdmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBzdHJ1bmRl
ZmluZWQgJiYgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpOwotICAgIHJldHVybiBub2RlICYm
IG5vZGUudmFsdWUgPT09IGF0dHJJZDsKLSAgICB9OwotICAgIH07Ci0gICAgfQotCi0gICAgLy8g
VGFnCi0gICAgRXhwci5maW5kWyJUQUciXSA9IHN1cHBvcnQudGFnTmFtZU5vQ29tbWVudHMgPwot
ICAgIGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7Ci0gICAgaWYgKCB0eXBlb2YgY29udGV4dC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gc3RydW5kZWZpbmVkICkgewotICAgIHJldHVybiBjb250
ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTsKLSAgICB9Ci0gICAgfSA6Ci0gICAgZnVu
Y3Rpb24oIHRhZywgY29udGV4dCApIHsKLSAgICB2YXIgZWxlbSwKLSAgICB0bXAgPSBbXSwKLSAg
ICBpID0gMCwKLSAgICByZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFn
ICk7Ci0KLSAgICAvLyBGaWx0ZXIgb3V0IHBvc3NpYmxlIGNvbW1lbnRzCi0gICAgaWYgKCB0YWcg
PT09ICIqIiApIHsKLSAgICB3aGlsZSAoIChlbGVtID0gcmVzdWx0c1tpKytdKSApIHsKLSAgICBp
ZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0gICAgdG1wLnB1c2goIGVsZW0gKTsKLSAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRtcDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdHM7Ci0g
ICAgfTsKLQotICAgIC8vIE5hbWUKLSAgICBFeHByLmZpbmRbIk5BTUUiXSA9IHN1cHBvcnQuZ2V0
QnlOYW1lICYmIGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7Ci0gICAgaWYgKCB0eXBlb2YgY29u
dGV4dC5nZXRFbGVtZW50c0J5TmFtZSAhPT0gc3RydW5kZWZpbmVkICkgewotICAgIHJldHVybiBj
b250ZXh0LmdldEVsZW1lbnRzQnlOYW1lKCBuYW1lICk7Ci0gICAgfQotICAgIH07Ci0KLSAgICAv
LyBDbGFzcwotICAgIEV4cHIuZmluZFsiQ0xBU1MiXSA9IHN1cHBvcnQuZ2V0QnlDbGFzc05hbWUg
JiYgZnVuY3Rpb24oIGNsYXNzTmFtZSwgY29udGV4dCApIHsKLSAgICBpZiAoIHR5cGVvZiBjb250
ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09IHN0cnVuZGVmaW5lZCAmJiAhZG9jdW1lbnRJ
c1hNTCApIHsKLSAgICByZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBjbGFz
c05hbWUgKTsKLSAgICB9Ci0gICAgfTsKLQotICAgIC8vIFFTQSBhbmQgbWF0Y2hlc1NlbGVjdG9y
IHN1cHBvcnQKLQotICAgIC8vIG1hdGNoZXNTZWxlY3Rvcig6YWN0aXZlKSByZXBvcnRzIGZhbHNl
IHdoZW4gdHJ1ZSAoSUU5L09wZXJhIDExLjUpCi0gICAgcmJ1Z2d5TWF0Y2hlcyA9IFtdOwotCi0g
ICAgLy8gcVNhKDpmb2N1cykgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKENocm9tZSAyMSksCi0g
ICAgLy8gbm8gbmVlZCB0byBhbHNvIGFkZCB0byBidWdneU1hdGNoZXMgc2luY2UgbWF0Y2hlcyBj
aGVja3MgYnVnZ3lRU0EKLSAgICAvLyBBIHN1cHBvcnQgdGVzdCB3b3VsZCByZXF1aXJlIHRvbyBt
dWNoIGNvZGUgKHdvdWxkIGluY2x1ZGUgZG9jdW1lbnQgcmVhZHkpCi0gICAgcmJ1Z2d5UVNBID0g
WyAiOmZvY3VzIiBdOwotCi0gICAgaWYgKCAoc3VwcG9ydC5xc2EgPSBpc05hdGl2ZShkb2MucXVl
cnlTZWxlY3RvckFsbCkpICkgewotICAgIC8vIEJ1aWxkIFFTQSByZWdleAotICAgIC8vIFJlZ2V4
IHN0cmF0ZWd5IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmkKLSAgICBhc3NlcnQoZnVuY3Rpb24o
IGRpdiApIHsKLSAgICAvLyBTZWxlY3QgaXMgc2V0IHRvIGVtcHR5IHN0cmluZyBvbiBwdXJwb3Nl
Ci0gICAgLy8gVGhpcyBpcyB0byB0ZXN0IElFJ3MgdHJlYXRtZW50IG9mIG5vdCBleHBsaWN0bHkK
LSAgICAvLyBzZXR0aW5nIGEgYm9vbGVhbiBjb250ZW50IGF0dHJpYnV0ZSwKLSAgICAvLyBzaW5j
ZSBpdHMgcHJlc2VuY2Ugc2hvdWxkIGJlIGVub3VnaAotICAgIC8vIGh0dHA6Ly9idWdzLmpxdWVy
eS5jb20vdGlja2V0LzEyMzU5Ci0gICAgZGl2LmlubmVySFRNTCA9ICI8c2VsZWN0PjxvcHRpb24g
c2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+IjsKLQotICAgIC8vIElFOCAtIFNvbWUgYm9v
bGVhbiBhdHRyaWJ1dGVzIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHkKLSAgICBpZiAoICFkaXYu
cXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aCApIHsKLSAgICByYnVnZ3lRU0Eu
cHVzaCggIlxcWyIgKyB3aGl0ZXNwYWNlICsgIiooPzpjaGVja2VkfGRpc2FibGVkfGlzbWFwfG11
bHRpcGxlfHJlYWRvbmx5fHNlbGVjdGVkfHZhbHVlKSIgKTsKLSAgICB9Ci0KLSAgICAvLyBXZWJr
aXQvT3BlcmEgLSA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbiBlbGVtZW50
cwotICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIw
MTEwOTI5LyNjaGVja2VkCi0gICAgLy8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5v
dCBzZWUgbGF0ZXIgdGVzdHMKLSAgICBpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNr
ZWQiKS5sZW5ndGggKSB7Ci0gICAgcmJ1Z2d5UVNBLnB1c2goIjpjaGVja2VkIik7Ci0gICAgfQot
ICAgIH0pOwotCi0gICAgYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7Ci0KLSAgICAvLyBPcGVyYSAx
MC0xMi9JRTggLSBePSAkPSAqPSBhbmQgZW1wdHkgdmFsdWVzCi0gICAgLy8gU2hvdWxkIG5vdCBz
ZWxlY3QgYW55dGhpbmcKLSAgICBkaXYuaW5uZXJIVE1MID0gIjxpbnB1dCB0eXBlPSdoaWRkZW4n
IGk9JycvPiI7Ci0gICAgaWYgKCBkaXYucXVlcnlTZWxlY3RvckFsbCgiW2lePScnXSIpLmxlbmd0
aCApIHsKLSAgICByYnVnZ3lRU0EucHVzaCggIlsqXiRdPSIgKyB3aGl0ZXNwYWNlICsgIiooPzpc
IlwifCcnKSIgKTsKLSAgICB9Ci0KLSAgICAvLyBGRiAzLjUgLSA6ZW5hYmxlZC86ZGlzYWJsZWQg
YW5kIGhpZGRlbiBlbGVtZW50cyAoaGlkZGVuIGVsZW1lbnRzIGFyZSBzdGlsbCBlbmFibGVkKQot
ICAgIC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3Rz
Ci0gICAgaWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RoICkgewot
ICAgIHJidWdneVFTQS5wdXNoKCAiOmVuYWJsZWQiLCAiOmRpc2FibGVkIiApOwotICAgIH0KLQot
ICAgIC8vIE9wZXJhIDEwLTExIGRvZXMgbm90IHRocm93IG9uIHBvc3QtY29tbWEgaW52YWxpZCBw
c2V1ZG9zCi0gICAgZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKTsKLSAgICByYnVnZ3lRU0Eu
cHVzaCgiLC4qOiIpOwotICAgIH0pOwotICAgIH0KLQotICAgIGlmICggKHN1cHBvcnQubWF0Y2hl
c1NlbGVjdG9yID0gaXNOYXRpdmUoIChtYXRjaGVzID0gZG9jRWxlbS5tYXRjaGVzU2VsZWN0b3Ig
fHwKLSAgICBkb2NFbGVtLm1vek1hdGNoZXNTZWxlY3RvciB8fAotICAgIGRvY0VsZW0ud2Via2l0
TWF0Y2hlc1NlbGVjdG9yIHx8Ci0gICAgZG9jRWxlbS5vTWF0Y2hlc1NlbGVjdG9yIHx8Ci0gICAg
ZG9jRWxlbS5tc01hdGNoZXNTZWxlY3RvcikgKSkgKSB7Ci0KLSAgICBhc3NlcnQoZnVuY3Rpb24o
IGRpdiApIHsKLSAgICAvLyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRj
aGVzU2VsZWN0b3IKLSAgICAvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5KQotICAgIHN1
cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggPSBtYXRjaGVzLmNhbGwoIGRpdiwgImRpdiIgKTsKLQot
ICAgIC8vIFRoaXMgc2hvdWxkIGZhaWwgd2l0aCBhbiBleGNlcHRpb24KLSAgICAvLyBHZWNrbyBk
b2VzIG5vdCBlcnJvciwgcmV0dXJucyBmYWxzZSBpbnN0ZWFkCi0gICAgbWF0Y2hlcy5jYWxsKCBk
aXYsICJbcyE9JyddOngiICk7Ci0gICAgcmJ1Z2d5TWF0Y2hlcy5wdXNoKCAiIT0iLCBwc2V1ZG9z
ICk7Ci0gICAgfSk7Ci0gICAgfQotCi0gICAgcmJ1Z2d5UVNBID0gbmV3IFJlZ0V4cCggcmJ1Z2d5
UVNBLmpvaW4oInwiKSApOwotICAgIHJidWdneU1hdGNoZXMgPSBuZXcgUmVnRXhwKCByYnVnZ3lN
YXRjaGVzLmpvaW4oInwiKSApOwotCi0gICAgLy8gRWxlbWVudCBjb250YWlucyBhbm90aGVyCi0g
ICAgLy8gUHVycG9zZWZ1bGx5IGRvZXMgbm90IGltcGxlbWVudCBpbmNsdXNpdmUgZGVzY2VuZGVu
dAotICAgIC8vIEFzIGluLCBhbiBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxmCi0gICAg
Y29udGFpbnMgPSBpc05hdGl2ZShkb2NFbGVtLmNvbnRhaW5zKSB8fCBkb2NFbGVtLmNvbXBhcmVE
b2N1bWVudFBvc2l0aW9uID8KLSAgICBmdW5jdGlvbiggYSwgYiApIHsKLSAgICB2YXIgYWRvd24g
PSBhLm5vZGVUeXBlID09PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQgOiBhLAotICAgIGJ1cCA9IGIg
JiYgYi5wYXJlbnROb2RlOwotICAgIHJldHVybiBhID09PSBidXAgfHwgISEoIGJ1cCAmJiBidXAu
bm9kZVR5cGUgPT09IDEgJiYgKAotICAgIGFkb3duLmNvbnRhaW5zID8KLSAgICBhZG93bi5jb250
YWlucyggYnVwICkgOgotICAgIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gJiYgYS5jb21wYXJl
RG9jdW1lbnRQb3NpdGlvbiggYnVwICkgJiAxNgotICAgICkpOwotICAgIH0gOgotICAgIGZ1bmN0
aW9uKCBhLCBiICkgewotICAgIGlmICggYiApIHsKLSAgICB3aGlsZSAoIChiID0gYi5wYXJlbnRO
b2RlKSApIHsKLSAgICBpZiAoIGIgPT09IGEgKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICAgIH07Ci0KLSAgICAvLyBEb2N1bWVu
dCBvcmRlciBzb3J0aW5nCi0gICAgc29ydE9yZGVyID0gZG9jRWxlbS5jb21wYXJlRG9jdW1lbnRQ
b3NpdGlvbiA/Ci0gICAgZnVuY3Rpb24oIGEsIGIgKSB7Ci0gICAgdmFyIGNvbXBhcmU7Ci0KLSAg
ICBpZiAoIGEgPT09IGIgKSB7Ci0gICAgaGFzRHVwbGljYXRlID0gdHJ1ZTsKLSAgICByZXR1cm4g
MDsKLSAgICB9Ci0KLSAgICBpZiAoIChjb21wYXJlID0gYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlv
biAmJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIGEuY29tcGFyZURvY3VtZW50UG9zaXRp
b24oIGIgKSkgKSB7Ci0gICAgaWYgKCBjb21wYXJlICYgMSB8fCBhLnBhcmVudE5vZGUgJiYgYS5w
YXJlbnROb2RlLm5vZGVUeXBlID09PSAxMSApIHsKLSAgICBpZiAoIGEgPT09IGRvYyB8fCBjb250
YWlucyggcHJlZmVycmVkRG9jLCBhICkgKSB7Ci0gICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBp
ZiAoIGIgPT09IGRvYyB8fCBjb250YWlucyggcHJlZmVycmVkRG9jLCBiICkgKSB7Ci0gICAgcmV0
dXJuIDE7Ci0gICAgfQotICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gY29tcGFyZSAm
IDQgPyAtMSA6IDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRp
b24gPyAtMSA6IDE7Ci0gICAgfSA6Ci0gICAgZnVuY3Rpb24oIGEsIGIgKSB7Ci0gICAgdmFyIGN1
ciwKLSAgICBpID0gMCwKLSAgICBhdXAgPSBhLnBhcmVudE5vZGUsCi0gICAgYnVwID0gYi5wYXJl
bnROb2RlLAotICAgIGFwID0gWyBhIF0sCi0gICAgYnAgPSBbIGIgXTsKLQotICAgIC8vIEV4aXQg
ZWFybHkgaWYgdGhlIG5vZGVzIGFyZSBpZGVudGljYWwKLSAgICBpZiAoIGEgPT09IGIgKSB7Ci0g
ICAgaGFzRHVwbGljYXRlID0gdHJ1ZTsKLSAgICByZXR1cm4gMDsKLQotICAgIC8vIFBhcmVudGxl
c3Mgbm9kZXMgYXJlIGVpdGhlciBkb2N1bWVudHMgb3IgZGlzY29ubmVjdGVkCi0gICAgfSBlbHNl
IGlmICggIWF1cCB8fCAhYnVwICkgewotICAgIHJldHVybiBhID09PSBkb2MgPyAtMSA6Ci0gICAg
YiA9PT0gZG9jID8gMSA6Ci0gICAgYXVwID8gLTEgOgotICAgIGJ1cCA/IDEgOgotICAgIDA7Ci0K
LSAgICAvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzLCB3ZSBjYW4gZG8gYSBxdWljayBjaGVj
awotICAgIH0gZWxzZSBpZiAoIGF1cCA9PT0gYnVwICkgewotICAgIHJldHVybiBzaWJsaW5nQ2hl
Y2soIGEsIGIgKTsKLSAgICB9Ci0KLSAgICAvLyBPdGhlcndpc2Ugd2UgbmVlZCBmdWxsIGxpc3Rz
IG9mIHRoZWlyIGFuY2VzdG9ycyBmb3IgY29tcGFyaXNvbgotICAgIGN1ciA9IGE7Ci0gICAgd2hp
bGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUpICkgewotICAgIGFwLnVuc2hpZnQoIGN1ciApOwot
ICAgIH0KLSAgICBjdXIgPSBiOwotICAgIHdoaWxlICggKGN1ciA9IGN1ci5wYXJlbnROb2RlKSAp
IHsKLSAgICBicC51bnNoaWZ0KCBjdXIgKTsKLSAgICB9Ci0KLSAgICAvLyBXYWxrIGRvd24gdGhl
IHRyZWUgbG9va2luZyBmb3IgYSBkaXNjcmVwYW5jeQotICAgIHdoaWxlICggYXBbaV0gPT09IGJw
W2ldICkgewotICAgIGkrKzsKLSAgICB9Ci0KLSAgICByZXR1cm4gaSA/Ci0gICAgLy8gRG8gYSBz
aWJsaW5nIGNoZWNrIGlmIHRoZSBub2RlcyBoYXZlIGEgY29tbW9uIGFuY2VzdG9yCi0gICAgc2li
bGluZ0NoZWNrKCBhcFtpXSwgYnBbaV0gKSA6Ci0KLSAgICAvLyBPdGhlcndpc2Ugbm9kZXMgaW4g
b3VyIGRvY3VtZW50IHNvcnQgZmlyc3QKLSAgICBhcFtpXSA9PT0gcHJlZmVycmVkRG9jID8gLTEg
OgotICAgIGJwW2ldID09PSBwcmVmZXJyZWREb2MgPyAxIDoKLSAgICAwOwotICAgIH07Ci0KLSAg
ICAvLyBBbHdheXMgYXNzdW1lIHRoZSBwcmVzZW5jZSBvZiBkdXBsaWNhdGVzIGlmIHNvcnQgZG9l
c24ndAotICAgIC8vIHBhc3MgdGhlbSB0byBvdXIgY29tcGFyaXNvbiBmdW5jdGlvbiAoYXMgaW4g
R29vZ2xlIENocm9tZSkuCi0gICAgaGFzRHVwbGljYXRlID0gZmFsc2U7Ci0gICAgWzAsIDBdLnNv
cnQoIHNvcnRPcmRlciApOwotICAgIHN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcyA9IGhhc0R1cGxp
Y2F0ZTsKLQotICAgIHJldHVybiBkb2N1bWVudDsKLX07Ci0KLVNpenpsZS5tYXRjaGVzID0gZnVu
Y3Rpb24oIGV4cHIsIGVsZW1lbnRzICkgewotICAgIHJldHVybiBTaXp6bGUoIGV4cHIsIG51bGws
IG51bGwsIGVsZW1lbnRzICk7Ci19OwotCi1TaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rp
b24oIGVsZW0sIGV4cHIgKSB7Ci0gICAgLy8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkCi0g
ICAgaWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT09IGRvY3VtZW50ICkgewot
ICAgIHNldERvY3VtZW50KCBlbGVtICk7Ci0gICAgfQotCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQg
YXR0cmlidXRlIHNlbGVjdG9ycyBhcmUgcXVvdGVkCi0gICAgZXhwciA9IGV4cHIucmVwbGFjZSgg
cmF0dHJpYnV0ZVF1b3RlcywgIj0nJDEnXSIgKTsKLQotICAgIC8vIHJidWdneVFTQSBhbHdheXMg
Y29udGFpbnMgOmZvY3VzLCBzbyBubyBuZWVkIGZvciBhbiBleGlzdGVuY2UgY2hlY2sKLSAgICBp
ZiAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yICYmICFkb2N1bWVudElzWE1MICYmICghcmJ1Z2d5
TWF0Y2hlcyB8fCAhcmJ1Z2d5TWF0Y2hlcy50ZXN0KGV4cHIpKSAmJiAhcmJ1Z2d5UVNBLnRlc3Qo
ZXhwcikgKSB7Ci0gICAgdHJ5IHsKLSAgICB2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBl
eHByICk7Ci0KLSAgICAvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9yIHJldHVybnMgZmFsc2Ugb24g
ZGlzY29ubmVjdGVkIG5vZGVzCi0gICAgaWYgKCByZXQgfHwgc3VwcG9ydC5kaXNjb25uZWN0ZWRN
YXRjaCB8fAotICAgIC8vIEFzIHdlbGwsIGRpc2Nvbm5lY3RlZCBub2RlcyBhcmUgc2FpZCB0byBi
ZSBpbiBhIGRvY3VtZW50Ci0gICAgLy8gZnJhZ21lbnQgaW4gSUUgOQotICAgIGVsZW0uZG9jdW1l
bnQgJiYgZWxlbS5kb2N1bWVudC5ub2RlVHlwZSAhPT0gMTEgKSB7Ci0gICAgcmV0dXJuIHJldDsK
LSAgICB9Ci0gICAgfSBjYXRjaChlKSB7fQotICAgIH0KLQotICAgIHJldHVybiBTaXp6bGUoIGV4
cHIsIGRvY3VtZW50LCBudWxsLCBbZWxlbV0gKS5sZW5ndGggPiAwOwotfTsKLQotU2l6emxlLmNv
bnRhaW5zID0gZnVuY3Rpb24oIGNvbnRleHQsIGVsZW0gKSB7Ci0gICAgLy8gU2V0IGRvY3VtZW50
IHZhcnMgaWYgbmVlZGVkCi0gICAgaWYgKCAoIGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250
ZXh0ICkgIT09IGRvY3VtZW50ICkgewotICAgIHNldERvY3VtZW50KCBjb250ZXh0ICk7Ci0gICAg
fQotICAgIHJldHVybiBjb250YWlucyggY29udGV4dCwgZWxlbSApOwotfTsKLQotU2l6emxlLmF0
dHIgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKLSAgICB2YXIgdmFsOwotCi0gICAgLy8gU2V0
IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkCi0gICAgaWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8
fCBlbGVtICkgIT09IGRvY3VtZW50ICkgewotICAgIHNldERvY3VtZW50KCBlbGVtICk7Ci0gICAg
fQotCi0gICAgaWYgKCAhZG9jdW1lbnRJc1hNTCApIHsKLSAgICBuYW1lID0gbmFtZS50b0xvd2Vy
Q2FzZSgpOwotICAgIH0KLSAgICBpZiAoICh2YWwgPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUgXSkg
KSB7Ci0gICAgcmV0dXJuIHZhbCggZWxlbSApOwotICAgIH0KLSAgICBpZiAoIGRvY3VtZW50SXNY
TUwgfHwgc3VwcG9ydC5hdHRyaWJ1dGVzICkgewotICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0
ZSggbmFtZSApOwotICAgIH0KLSAgICByZXR1cm4gKCAodmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVO
b2RlKCBuYW1lICkpIHx8IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICkgKSAmJiBlbGVtWyBuYW1l
IF0gPT09IHRydWUgPwotICAgIG5hbWUgOgotICAgIHZhbCAmJiB2YWwuc3BlY2lmaWVkID8gdmFs
LnZhbHVlIDogbnVsbDsKLX07Ci0KLVNpenpsZS5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7Ci0g
ICAgdGhyb3cgbmV3IEVycm9yKCAiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lv
bjogIiArIG1zZyApOwotfTsKLQotLy8gRG9jdW1lbnQgc29ydGluZyBhbmQgcmVtb3ZpbmcgZHVw
bGljYXRlcwotU2l6emxlLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiggcmVzdWx0cyApIHsKLSAgICB2
YXIgZWxlbSwKLSAgICBkdXBsaWNhdGVzID0gW10sCi0gICAgaSA9IDEsCi0gICAgaiA9IDA7Ci0K
LSAgICAvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1l
IHRoZWlyIHByZXNlbmNlCi0gICAgaGFzRHVwbGljYXRlID0gIXN1cHBvcnQuZGV0ZWN0RHVwbGlj
YXRlczsKLSAgICByZXN1bHRzLnNvcnQoIHNvcnRPcmRlciApOwotCi0gICAgaWYgKCBoYXNEdXBs
aWNhdGUgKSB7Ci0gICAgZm9yICggOyAoZWxlbSA9IHJlc3VsdHNbaV0pOyBpKysgKSB7Ci0gICAg
aWYgKCBlbGVtID09PSByZXN1bHRzWyBpIC0gMSBdICkgewotICAgIGogPSBkdXBsaWNhdGVzLnB1
c2goIGkgKTsKLSAgICB9Ci0gICAgfQotICAgIHdoaWxlICggai0tICkgewotICAgIHJlc3VsdHMu
c3BsaWNlKCBkdXBsaWNhdGVzWyBqIF0sIDEgKTsKLSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IHJlc3VsdHM7Ci19OwotCi1mdW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIgKSB7Ci0gICAgdmFy
IGN1ciA9IGIgJiYgYSwKLSAgICBkaWZmID0gY3VyICYmICggfmIuc291cmNlSW5kZXggfHwgTUFY
X05FR0FUSVZFICkgLSAoIH5hLnNvdXJjZUluZGV4IHx8IE1BWF9ORUdBVElWRSApOwotCi0gICAg
Ly8gVXNlIElFIHNvdXJjZUluZGV4IGlmIGF2YWlsYWJsZSBvbiBib3RoIG5vZGVzCi0gICAgaWYg
KCBkaWZmICkgewotICAgIHJldHVybiBkaWZmOwotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIGIg
Zm9sbG93cyBhCi0gICAgaWYgKCBjdXIgKSB7Ci0gICAgd2hpbGUgKCAoY3VyID0gY3VyLm5leHRT
aWJsaW5nKSApIHsKLSAgICBpZiAoIGN1ciA9PT0gYiApIHsKLSAgICByZXR1cm4gLTE7Ci0gICAg
fQotICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gYSA/IDEgOiAtMTsKLX0KLQotLy8gUmV0dXJu
cyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBpbnB1dCB0eXBlcwotZnVuY3Rpb24g
Y3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkg
ewotICAgIHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwotICAgIHJldHVy
biBuYW1lID09PSAiaW5wdXQiICYmIGVsZW0udHlwZSA9PT0gdHlwZTsKLSAgICB9OwotfQotCi0v
LyBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGJ1dHRvbnMKLWZ1bmN0
aW9uIGNyZWF0ZUJ1dHRvblBzZXVkbyggdHlwZSApIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oIGVs
ZW0gKSB7Ci0gICAgdmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Ci0gICAg
cmV0dXJuIChuYW1lID09PSAiaW5wdXQiIHx8IG5hbWUgPT09ICJidXR0b24iKSAmJiBlbGVtLnR5
cGUgPT09IHR5cGU7Ci0gICAgfTsKLX0KLQotLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBp
biBwc2V1ZG9zIGZvciBwb3NpdGlvbmFscwotZnVuY3Rpb24gY3JlYXRlUG9zaXRpb25hbFBzZXVk
byggZm4gKSB7Ci0gICAgcmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggYXJndW1lbnQgKSB7
Ci0gICAgYXJndW1lbnQgPSArYXJndW1lbnQ7Ci0gICAgcmV0dXJuIG1hcmtGdW5jdGlvbihmdW5j
dGlvbiggc2VlZCwgbWF0Y2hlcyApIHsKLSAgICB2YXIgaiwKLSAgICBtYXRjaEluZGV4ZXMgPSBm
biggW10sIHNlZWQubGVuZ3RoLCBhcmd1bWVudCApLAotICAgIGkgPSBtYXRjaEluZGV4ZXMubGVu
Z3RoOwotCi0gICAgLy8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBpbmRl
eGVzCi0gICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgaWYgKCBzZWVkWyAoaiA9IG1hdGNoSW5kZXhl
c1tpXSkgXSApIHsKLSAgICBzZWVkW2pdID0gIShtYXRjaGVzW2pdID0gc2VlZFtqXSk7Ci0gICAg
fQotICAgIH0KLSAgICB9KTsKLSAgICB9KTsKLX0KLQotLyoqCi0gKiBVdGlsaXR5IGZ1bmN0aW9u
IGZvciByZXRyaWV2aW5nIHRoZSB0ZXh0IHZhbHVlIG9mIGFuIGFycmF5IG9mIERPTSBub2Rlcwot
ICogQHBhcmFtIHtBcnJheXxFbGVtZW50fSBlbGVtCi0gKi8KLWdldFRleHQgPSBTaXp6bGUuZ2V0
VGV4dCA9IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHZhciBub2RlLAotICAgIHJldCA9ICIiLAot
ICAgIGkgPSAwLAotICAgIG5vZGVUeXBlID0gZWxlbS5ub2RlVHlwZTsKLQotICAgIGlmICggIW5v
ZGVUeXBlICkgewotICAgIC8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJl
IGFuIGFycmF5Ci0gICAgZm9yICggOyAobm9kZSA9IGVsZW1baV0pOyBpKysgKSB7Ci0gICAgLy8g
RG8gbm90IHRyYXZlcnNlIGNvbW1lbnQgbm9kZXMKLSAgICByZXQgKz0gZ2V0VGV4dCggbm9kZSAp
OwotICAgIH0KLSAgICB9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMSB8fCBub2RlVHlwZSA9PT0g
OSB8fCBub2RlVHlwZSA9PT0gMTEgKSB7Ci0gICAgLy8gVXNlIHRleHRDb250ZW50IGZvciBlbGVt
ZW50cwotICAgIC8vIGlubmVyVGV4dCB1c2FnZSByZW1vdmVkIGZvciBjb25zaXN0ZW5jeSBvZiBu
ZXcgbGluZXMgKHNlZSAjMTExNTMpCi0gICAgaWYgKCB0eXBlb2YgZWxlbS50ZXh0Q29udGVudCA9
PT0gInN0cmluZyIgKSB7Ci0gICAgcmV0dXJuIGVsZW0udGV4dENvbnRlbnQ7Ci0gICAgfSBlbHNl
IHsKLSAgICAvLyBUcmF2ZXJzZSBpdHMgY2hpbGRyZW4KLSAgICBmb3IgKCBlbGVtID0gZWxlbS5m
aXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHsKLSAgICByZXQgKz0g
Z2V0VGV4dCggZWxlbSApOwotICAgIH0KLSAgICB9Ci0gICAgfSBlbHNlIGlmICggbm9kZVR5cGUg
PT09IDMgfHwgbm9kZVR5cGUgPT09IDQgKSB7Ci0gICAgcmV0dXJuIGVsZW0ubm9kZVZhbHVlOwot
ICAgIH0KLSAgICAvLyBEbyBub3QgaW5jbHVkZSBjb21tZW50IG9yIHByb2Nlc3NpbmcgaW5zdHJ1
Y3Rpb24gbm9kZXMKLQotICAgIHJldHVybiByZXQ7Ci19OwotCi1FeHByID0gU2l6emxlLnNlbGVj
dG9ycyA9IHsKLQotICAgIC8vIENhbiBiZSBhZGp1c3RlZCBieSB0aGUgdXNlcgotICAgIGNhY2hl
TGVuZ3RoOiA1MCwKLQotICAgIGNyZWF0ZVBzZXVkbzogbWFya0Z1bmN0aW9uLAotCi0gICAgbWF0
Y2g6IG1hdGNoRXhwciwKLQotICAgIGZpbmQ6IHt9LAotCi0gICAgcmVsYXRpdmU6IHsKLSAgICAi
PiI6IHsgZGlyOiAicGFyZW50Tm9kZSIsIGZpcnN0OiB0cnVlIH0sCi0gICAgIiAiOiB7IGRpcjog
InBhcmVudE5vZGUiIH0sCi0gICAgIisiOiB7IGRpcjogInByZXZpb3VzU2libGluZyIsIGZpcnN0
OiB0cnVlIH0sCi0gICAgIn4iOiB7IGRpcjogInByZXZpb3VzU2libGluZyIgfQotICAgIH0sCi0K
LSAgICBwcmVGaWx0ZXI6IHsKLSAgICAiQVRUUiI6IGZ1bmN0aW9uKCBtYXRjaCApIHsKLSAgICBt
YXRjaFsxXSA9IG1hdGNoWzFdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7Ci0KLSAg
ICAvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3RlZCBvciB1
bnF1b3RlZAotICAgIG1hdGNoWzNdID0gKCBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCAiIiApLnJl
cGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7Ci0KLSAgICBpZiAoIG1hdGNoWzJdID09PSAi
fj0iICkgewotICAgIG1hdGNoWzNdID0gIiAiICsgbWF0Y2hbM10gKyAiICI7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG1hdGNoLnNsaWNlKCAwLCA0ICk7Ci0gICAgfSwKLQotICAgICJDSElMRCI6IGZ1
bmN0aW9uKCBtYXRjaCApIHsKLSAgICAvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByWyJDSElMRCJd
Ci0gICAgMSB0eXBlIChvbmx5fG50aHwuLi4pCi0gICAgMiB3aGF0IChjaGlsZHxvZi10eXBlKQot
ICAgIDMgYXJndW1lbnQgKGV2ZW58b2RkfFxkKnxcZCpuKFsrLV1cZCspP3wuLi4pCi0gICAgNCB4
bi1jb21wb25lbnQgb2YgeG4reSBhcmd1bWVudCAoWystXT9cZCpufCkKLSAgICA1IHNpZ24gb2Yg
eG4tY29tcG9uZW50Ci0gICAgNiB4IG9mIHhuLWNvbXBvbmVudAotICAgIDcgc2lnbiBvZiB5LWNv
bXBvbmVudAotICAgIDggeSBvZiB5LWNvbXBvbmVudAotICAgICovCi0gICAgbWF0Y2hbMV0gPSBt
YXRjaFsxXS50b0xvd2VyQ2FzZSgpOwotCi0gICAgaWYgKCBtYXRjaFsxXS5zbGljZSggMCwgMyAp
ID09PSAibnRoIiApIHsKLSAgICAvLyBudGgtKiByZXF1aXJlcyBhcmd1bWVudAotICAgIGlmICgg
IW1hdGNoWzNdICkgewotICAgIFNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTsKLSAgICB9Ci0KLSAg
ICAvLyBudW1lcmljIHggYW5kIHkgcGFyYW1ldGVycyBmb3IgRXhwci5maWx0ZXIuQ0hJTEQKLSAg
ICAvLyByZW1lbWJlciB0aGF0IGZhbHNlL3RydWUgY2FzdCByZXNwZWN0aXZlbHkgdG8gMC8xCi0g
ICAgbWF0Y2hbNF0gPSArKCBtYXRjaFs0XSA/IG1hdGNoWzVdICsgKG1hdGNoWzZdIHx8IDEpIDog
MiAqICggbWF0Y2hbM10gPT09ICJldmVuIiB8fCBtYXRjaFszXSA9PT0gIm9kZCIgKSApOwotICAg
IG1hdGNoWzVdID0gKyggKCBtYXRjaFs3XSArIG1hdGNoWzhdICkgfHwgbWF0Y2hbM10gPT09ICJv
ZGQiICk7Ci0KLSAgICAvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHMKLSAgICB9IGVs
c2UgaWYgKCBtYXRjaFszXSApIHsKLSAgICBTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIG1hdGNoOwotICAgIH0sCi0KLSAgICAiUFNFVURPIjogZnVuY3Rpb24o
IG1hdGNoICkgewotICAgIHZhciBleGNlc3MsCi0gICAgdW5xdW90ZWQgPSAhbWF0Y2hbNV0gJiYg
bWF0Y2hbMl07Ci0KLSAgICBpZiAoIG1hdGNoRXhwclsiQ0hJTEQiXS50ZXN0KCBtYXRjaFswXSAp
ICkgewotICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8vIEFjY2VwdCBxdW90ZWQgYXJn
dW1lbnRzIGFzLWlzCi0gICAgaWYgKCBtYXRjaFs0XSApIHsKLSAgICBtYXRjaFsyXSA9IG1hdGNo
WzRdOwotCi0gICAgLy8gU3RyaXAgZXhjZXNzIGNoYXJhY3RlcnMgZnJvbSB1bnF1b3RlZCBhcmd1
bWVudHMKLSAgICB9IGVsc2UgaWYgKCB1bnF1b3RlZCAmJiBycHNldWRvLnRlc3QoIHVucXVvdGVk
ICkgJiYKLSAgICAvLyBHZXQgZXhjZXNzIGZyb20gdG9rZW5pemUgKHJlY3Vyc2l2ZWx5KQotICAg
IChleGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSkgJiYKLSAgICAvLyBhZHZhbmNl
IHRvIHRoZSBuZXh0IGNsb3NpbmcgcGFyZW50aGVzaXMKLSAgICAoZXhjZXNzID0gdW5xdW90ZWQu
aW5kZXhPZiggIikiLCB1bnF1b3RlZC5sZW5ndGggLSBleGNlc3MgKSAtIHVucXVvdGVkLmxlbmd0
aCkgKSB7Ci0KLSAgICAvLyBleGNlc3MgaXMgYSBuZWdhdGl2ZSBpbmRleAotICAgIG1hdGNoWzBd
ID0gbWF0Y2hbMF0uc2xpY2UoIDAsIGV4Y2VzcyApOwotICAgIG1hdGNoWzJdID0gdW5xdW90ZWQu
c2xpY2UoIDAsIGV4Y2VzcyApOwotICAgIH0KLQotICAgIC8vIFJldHVybiBvbmx5IGNhcHR1cmVz
IG5lZWRlZCBieSB0aGUgcHNldWRvIGZpbHRlciBtZXRob2QgKHR5cGUgYW5kIGFyZ3VtZW50KQot
ICAgIHJldHVybiBtYXRjaC5zbGljZSggMCwgMyApOwotICAgIH0KLSAgICB9LAotCi0gICAgZmls
dGVyOiB7Ci0KLSAgICAiVEFHIjogZnVuY3Rpb24oIG5vZGVOYW1lICkgewotICAgIGlmICggbm9k
ZU5hbWUgPT09ICIqIiApIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9
OwotICAgIH0KLQotICAgIG5vZGVOYW1lID0gbm9kZU5hbWUucmVwbGFjZSggcnVuZXNjYXBlLCBm
dW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpOwotICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsK
LSAgICByZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkg
PT09IG5vZGVOYW1lOwotICAgIH07Ci0gICAgfSwKLQotICAgICJDTEFTUyI6IGZ1bmN0aW9uKCBj
bGFzc05hbWUgKSB7Ci0gICAgdmFyIHBhdHRlcm4gPSBjbGFzc0NhY2hlWyBjbGFzc05hbWUgKyAi
ICIgXTsKLQotICAgIHJldHVybiBwYXR0ZXJuIHx8Ci0gICAgKHBhdHRlcm4gPSBuZXcgUmVnRXhw
KCAiKF58IiArIHdoaXRlc3BhY2UgKyAiKSIgKyBjbGFzc05hbWUgKyAiKCIgKyB3aGl0ZXNwYWNl
ICsgInwkKSIgKSkgJiYKLSAgICBjbGFzc0NhY2hlKCBjbGFzc05hbWUsIGZ1bmN0aW9uKCBlbGVt
ICkgewotICAgIHJldHVybiBwYXR0ZXJuLnRlc3QoIGVsZW0uY2xhc3NOYW1lIHx8ICh0eXBlb2Yg
ZWxlbS5nZXRBdHRyaWJ1dGUgIT09IHN0cnVuZGVmaW5lZCAmJiBlbGVtLmdldEF0dHJpYnV0ZSgi
Y2xhc3MiKSkgfHwgIiIgKTsKLSAgICB9KTsKLSAgICB9LAotCi0gICAgIkFUVFIiOiBmdW5jdGlv
biggbmFtZSwgb3BlcmF0b3IsIGNoZWNrICkgewotICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSAp
IHsKLSAgICB2YXIgcmVzdWx0ID0gU2l6emxlLmF0dHIoIGVsZW0sIG5hbWUgKTsKLQotICAgIGlm
ICggcmVzdWx0ID09IG51bGwgKSB7Ci0gICAgcmV0dXJuIG9wZXJhdG9yID09PSAiIT0iOwotICAg
IH0KLSAgICBpZiAoICFvcGVyYXRvciApIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICByZXN1bHQgKz0gIiI7Ci0KLSAgICByZXR1cm4gb3BlcmF0b3IgPT09ICI9IiA/IHJlc3VsdCA9
PT0gY2hlY2sgOgotICAgIG9wZXJhdG9yID09PSAiIT0iID8gcmVzdWx0ICE9PSBjaGVjayA6Ci0g
ICAgb3BlcmF0b3IgPT09ICJePSIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA9
PT0gMCA6Ci0gICAgb3BlcmF0b3IgPT09ICIqPSIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZigg
Y2hlY2sgKSA+IC0xIDoKLSAgICBvcGVyYXRvciA9PT0gIiQ9IiA/IGNoZWNrICYmIHJlc3VsdC5z
bGljZSggLWNoZWNrLmxlbmd0aCApID09PSBjaGVjayA6Ci0gICAgb3BlcmF0b3IgPT09ICJ+PSIg
PyAoICIgIiArIHJlc3VsdCArICIgIiApLmluZGV4T2YoIGNoZWNrICkgPiAtMSA6Ci0gICAgb3Bl
cmF0b3IgPT09ICJ8PSIgPyByZXN1bHQgPT09IGNoZWNrIHx8IHJlc3VsdC5zbGljZSggMCwgY2hl
Y2subGVuZ3RoICsgMSApID09PSBjaGVjayArICItIiA6Ci0gICAgZmFsc2U7Ci0gICAgfTsKLSAg
ICB9LAotCi0gICAgIkNISUxEIjogZnVuY3Rpb24oIHR5cGUsIHdoYXQsIGFyZ3VtZW50LCBmaXJz
dCwgbGFzdCApIHsKLSAgICB2YXIgc2ltcGxlID0gdHlwZS5zbGljZSggMCwgMyApICE9PSAibnRo
IiwKLSAgICBmb3J3YXJkID0gdHlwZS5zbGljZSggLTQgKSAhPT0gImxhc3QiLAotICAgIG9mVHlw
ZSA9IHdoYXQgPT09ICJvZi10eXBlIjsKLQotICAgIHJldHVybiBmaXJzdCA9PT0gMSAmJiBsYXN0
ID09PSAwID8KLQotICAgIC8vIFNob3J0Y3V0IGZvciA6bnRoLSoobikKLSAgICBmdW5jdGlvbigg
ZWxlbSApIHsKLSAgICByZXR1cm4gISFlbGVtLnBhcmVudE5vZGU7Ci0gICAgfSA6Ci0KLSAgICBm
dW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgewotICAgIHZhciBjYWNoZSwgb3V0ZXJDYWNo
ZSwgbm9kZSwgZGlmZiwgbm9kZUluZGV4LCBzdGFydCwKLSAgICBkaXIgPSBzaW1wbGUgIT09IGZv
cndhcmQgPyAibmV4dFNpYmxpbmciIDogInByZXZpb3VzU2libGluZyIsCi0gICAgcGFyZW50ID0g
ZWxlbS5wYXJlbnROb2RlLAotICAgIG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xv
d2VyQ2FzZSgpLAotICAgIHVzZUNhY2hlID0gIXhtbCAmJiAhb2ZUeXBlOwotCi0gICAgaWYgKCBw
YXJlbnQgKSB7Ci0KLSAgICAvLyA6KGZpcnN0fGxhc3R8b25seSktKGNoaWxkfG9mLXR5cGUpCi0g
ICAgaWYgKCBzaW1wbGUgKSB7Ci0gICAgd2hpbGUgKCBkaXIgKSB7Ci0gICAgbm9kZSA9IGVsZW07
Ci0gICAgd2hpbGUgKCAobm9kZSA9IG5vZGVbIGRpciBdKSApIHsKLSAgICBpZiAoIG9mVHlwZSA/
IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6IG5vZGUubm9kZVR5cGUgPT09
IDEgKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICB9Ci0gICAgLy8gUmV2ZXJzZSBk
aXJlY3Rpb24gZm9yIDpvbmx5LSogKGlmIHdlIGhhdmVuJ3QgeWV0IGRvbmUgc28pCi0gICAgc3Rh
cnQgPSBkaXIgPSB0eXBlID09PSAib25seSIgJiYgIXN0YXJ0ICYmICJuZXh0U2libGluZyI7Ci0g
ICAgfQotICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHN0YXJ0ID0gWyBmb3J3YXJkID8g
cGFyZW50LmZpcnN0Q2hpbGQgOiBwYXJlbnQubGFzdENoaWxkIF07Ci0KLSAgICAvLyBub24teG1s
IDpudGgtY2hpbGQoLi4uKSBzdG9yZXMgY2FjaGUgZGF0YSBvbiBgcGFyZW50YAotICAgIGlmICgg
Zm9yd2FyZCAmJiB1c2VDYWNoZSApIHsKLSAgICAvLyBTZWVrIGBlbGVtYCBmcm9tIGEgcHJldmlv
dXNseS1jYWNoZWQgaW5kZXgKLSAgICBvdXRlckNhY2hlID0gcGFyZW50WyBleHBhbmRvIF0gfHwg
KHBhcmVudFsgZXhwYW5kbyBdID0ge30pOwotICAgIGNhY2hlID0gb3V0ZXJDYWNoZVsgdHlwZSBd
IHx8IFtdOwotICAgIG5vZGVJbmRleCA9IGNhY2hlWzBdID09PSBkaXJydW5zICYmIGNhY2hlWzFd
OwotICAgIGRpZmYgPSBjYWNoZVswXSA9PT0gZGlycnVucyAmJiBjYWNoZVsyXTsKLSAgICBub2Rl
ID0gbm9kZUluZGV4ICYmIHBhcmVudC5jaGlsZE5vZGVzWyBub2RlSW5kZXggXTsKLQotICAgIHdo
aWxlICggKG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8Ci0KLSAg
ICAvLyBGYWxsYmFjayB0byBzZWVraW5nIGBlbGVtYCBmcm9tIHRoZSBzdGFydAotICAgIChkaWZm
ID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkgewotCi0gICAgLy8gV2hlbiBmb3Vu
ZCwgY2FjaGUgaW5kZXhlcyBvbiBgcGFyZW50YCBhbmQgYnJlYWsKLSAgICBpZiAoIG5vZGUubm9k
ZVR5cGUgPT09IDEgJiYgKytkaWZmICYmIG5vZGUgPT09IGVsZW0gKSB7Ci0gICAgb3V0ZXJDYWNo
ZVsgdHlwZSBdID0gWyBkaXJydW5zLCBub2RlSW5kZXgsIGRpZmYgXTsKLSAgICBicmVhazsKLSAg
ICB9Ci0gICAgfQotCi0gICAgLy8gVXNlIHByZXZpb3VzbHktY2FjaGVkIGVsZW1lbnQgaW5kZXgg
aWYgYXZhaWxhYmxlCi0gICAgfSBlbHNlIGlmICggdXNlQ2FjaGUgJiYgKGNhY2hlID0gKGVsZW1b
IGV4cGFuZG8gXSB8fCAoZWxlbVsgZXhwYW5kbyBdID0ge30pKVsgdHlwZSBdKSAmJiBjYWNoZVsw
XSA9PT0gZGlycnVucyApIHsKLSAgICBkaWZmID0gY2FjaGVbMV07Ci0KLSAgICAvLyB4bWwgOm50
aC1jaGlsZCguLi4pIG9yIDpudGgtbGFzdC1jaGlsZCguLi4pIG9yIDpudGgoLWxhc3QpPy1vZi10
eXBlKC4uLikKLSAgICB9IGVsc2UgewotICAgIC8vIFVzZSB0aGUgc2FtZSBsb29wIGFzIGFib3Zl
IHRvIHNlZWsgYGVsZW1gIGZyb20gdGhlIHN0YXJ0Ci0gICAgd2hpbGUgKCAobm9kZSA9ICsrbm9k
ZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHwKLSAgICAoZGlmZiA9IG5vZGVJbmRleCA9
IDApIHx8IHN0YXJ0LnBvcCgpKSApIHsKLQotICAgIGlmICggKCBvZlR5cGUgPyBub2RlLm5vZGVO
YW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOiBub2RlLm5vZGVUeXBlID09PSAxICkgJiYgKytk
aWZmICkgewotICAgIC8vIENhY2hlIHRoZSBpbmRleCBvZiBlYWNoIGVuY291bnRlcmVkIGVsZW1l
bnQKLSAgICBpZiAoIHVzZUNhY2hlICkgewotICAgIChub2RlWyBleHBhbmRvIF0gfHwgKG5vZGVb
IGV4cGFuZG8gXSA9IHt9KSlbIHR5cGUgXSA9IFsgZGlycnVucywgZGlmZiBdOwotICAgIH0KLQot
ICAgIGlmICggbm9kZSA9PT0gZWxlbSApIHsKLSAgICBicmVhazsKLSAgICB9Ci0gICAgfQotICAg
IH0KLSAgICB9Ci0KLSAgICAvLyBJbmNvcnBvcmF0ZSB0aGUgb2Zmc2V0LCB0aGVuIGNoZWNrIGFn
YWluc3QgY3ljbGUgc2l6ZQotICAgIGRpZmYgLT0gbGFzdDsKLSAgICByZXR1cm4gZGlmZiA9PT0g
Zmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTsKLSAg
ICB9Ci0gICAgfTsKLSAgICB9LAotCi0gICAgIlBTRVVETyI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFy
Z3VtZW50ICkgewotICAgIC8vIHBzZXVkby1jbGFzcyBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2
ZQotICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXMK
LSAgICAvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0b20gcHNl
dWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVycwotICAgIC8vIFJlbWVtYmVyIHRo
YXQgc2V0RmlsdGVycyBpbmhlcml0cyBmcm9tIHBzZXVkb3MKLSAgICB2YXIgYXJncywKLSAgICBm
biA9IEV4cHIucHNldWRvc1sgcHNldWRvIF0gfHwgRXhwci5zZXRGaWx0ZXJzWyBwc2V1ZG8udG9M
b3dlckNhc2UoKSBdIHx8Ci0gICAgU2l6emxlLmVycm9yKCAidW5zdXBwb3J0ZWQgcHNldWRvOiAi
ICsgcHNldWRvICk7Ci0KLSAgICAvLyBUaGUgdXNlciBtYXkgdXNlIGNyZWF0ZVBzZXVkbyB0byBp
bmRpY2F0ZSB0aGF0Ci0gICAgLy8gYXJndW1lbnRzIGFyZSBuZWVkZWQgdG8gY3JlYXRlIHRoZSBm
aWx0ZXIgZnVuY3Rpb24KLSAgICAvLyBqdXN0IGFzIFNpenpsZSBkb2VzCi0gICAgaWYgKCBmblsg
ZXhwYW5kbyBdICkgewotICAgIHJldHVybiBmbiggYXJndW1lbnQgKTsKLSAgICB9Ci0KLSAgICAv
LyBCdXQgbWFpbnRhaW4gc3VwcG9ydCBmb3Igb2xkIHNpZ25hdHVyZXMKLSAgICBpZiAoIGZuLmxl
bmd0aCA+IDEgKSB7Ci0gICAgYXJncyA9IFsgcHNldWRvLCBwc2V1ZG8sICIiLCBhcmd1bWVudCBd
OwotICAgIHJldHVybiBFeHByLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoIHBzZXVkby50b0xv
d2VyQ2FzZSgpICkgPwotICAgIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyAp
IHsKLSAgICB2YXIgaWR4LAotICAgIG1hdGNoZWQgPSBmbiggc2VlZCwgYXJndW1lbnQgKSwKLSAg
ICBpID0gbWF0Y2hlZC5sZW5ndGg7Ci0gICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgaWR4ID0gaW5k
ZXhPZi5jYWxsKCBzZWVkLCBtYXRjaGVkW2ldICk7Ci0gICAgc2VlZFsgaWR4IF0gPSAhKCBtYXRj
aGVzWyBpZHggXSA9IG1hdGNoZWRbaV0gKTsKLSAgICB9Ci0gICAgfSkgOgotICAgIGZ1bmN0aW9u
KCBlbGVtICkgewotICAgIHJldHVybiBmbiggZWxlbSwgMCwgYXJncyApOwotICAgIH07Ci0gICAg
fQotCi0gICAgcmV0dXJuIGZuOwotICAgIH0KLSAgICB9LAotCi0gICAgcHNldWRvczogewotICAg
IC8vIFBvdGVudGlhbGx5IGNvbXBsZXggcHNldWRvcwotICAgICJub3QiOiBtYXJrRnVuY3Rpb24o
ZnVuY3Rpb24oIHNlbGVjdG9yICkgewotICAgIC8vIFRyaW0gdGhlIHNlbGVjdG9yIHBhc3NlZCB0
byBjb21waWxlCi0gICAgLy8gdG8gYXZvaWQgdHJlYXRpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmcK
LSAgICAvLyBzcGFjZXMgYXMgY29tYmluYXRvcnMKLSAgICB2YXIgaW5wdXQgPSBbXSwKLSAgICBy
ZXN1bHRzID0gW10sCi0gICAgbWF0Y2hlciA9IGNvbXBpbGUoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0
cmltLCAiJDEiICkgKTsKLQotICAgIHJldHVybiBtYXRjaGVyWyBleHBhbmRvIF0gPwotICAgIG1h
cmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcywgY29udGV4dCwgeG1sICkgewotICAg
IHZhciBlbGVtLAotICAgIHVubWF0Y2hlZCA9IG1hdGNoZXIoIHNlZWQsIG51bGwsIHhtbCwgW10g
KSwKLSAgICBpID0gc2VlZC5sZW5ndGg7Ci0KLSAgICAvLyBNYXRjaCBlbGVtZW50cyB1bm1hdGNo
ZWQgYnkgYG1hdGNoZXJgCi0gICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgaWYgKCAoZWxlbSA9IHVu
bWF0Y2hlZFtpXSkgKSB7Ci0gICAgc2VlZFtpXSA9ICEobWF0Y2hlc1tpXSA9IGVsZW0pOwotICAg
IH0KLSAgICB9Ci0gICAgfSkgOgotICAgIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7
Ci0gICAgaW5wdXRbMF0gPSBlbGVtOwotICAgIG1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJl
c3VsdHMgKTsKLSAgICByZXR1cm4gIXJlc3VsdHMucG9wKCk7Ci0gICAgfTsKLSAgICB9KSwKLQot
ICAgICJoYXMiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9yICkgewotICAgIHJldHVy
biBmdW5jdGlvbiggZWxlbSApIHsKLSAgICByZXR1cm4gU2l6emxlKCBzZWxlY3RvciwgZWxlbSAp
Lmxlbmd0aCA+IDA7Ci0gICAgfTsKLSAgICB9KSwKLQotICAgICJjb250YWlucyI6IG1hcmtGdW5j
dGlvbihmdW5jdGlvbiggdGV4dCApIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7Ci0g
ICAgcmV0dXJuICggZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlubmVyVGV4dCB8fCBnZXRUZXh0
KCBlbGVtICkgKS5pbmRleE9mKCB0ZXh0ICkgPiAtMTsKLSAgICB9OwotICAgIH0pLAotCi0gICAg
Ly8gIldoZXRoZXIgYW4gZWxlbWVudCBpcyByZXByZXNlbnRlZCBieSBhIDpsYW5nKCkgc2VsZWN0
b3IKLSAgICAvLyBpcyBiYXNlZCBzb2xlbHkgb24gdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1
ZQotICAgIC8vIGJlaW5nIGVxdWFsIHRvIHRoZSBpZGVudGlmaWVyIEMsCi0gICAgLy8gb3IgYmVn
aW5uaW5nIHdpdGggdGhlIGlkZW50aWZpZXIgQyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSAiLSIu
Ci0gICAgLy8gVGhlIG1hdGNoaW5nIG9mIEMgYWdhaW5zdCB0aGUgZWxlbWVudCdzIGxhbmd1YWdl
IHZhbHVlIGlzIHBlcmZvcm1lZCBjYXNlLWluc2Vuc2l0aXZlbHkuCi0gICAgLy8gVGhlIGlkZW50
aWZpZXIgQyBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgdmFsaWQgbGFuZ3VhZ2UgbmFtZS4iCi0gICAg
Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNsYW5nLXBzZXVkbwotICAgICJsYW5n
IjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggbGFuZyApIHsKLSAgICAvLyBsYW5nIHZhbHVlIG11
c3QgYmUgYSB2YWxpZCBpZGVudGlmaWRlcgotICAgIGlmICggIXJpZGVudGlmaWVyLnRlc3QobGFu
ZyB8fCAiIikgKSB7Ci0gICAgU2l6emxlLmVycm9yKCAidW5zdXBwb3J0ZWQgbGFuZzogIiArIGxh
bmcgKTsKLSAgICB9Ci0gICAgbGFuZyA9IGxhbmcucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2Nh
cGUgKS50b0xvd2VyQ2FzZSgpOwotICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICB2
YXIgZWxlbUxhbmc7Ci0gICAgZG8gewotICAgIGlmICggKGVsZW1MYW5nID0gZG9jdW1lbnRJc1hN
TCA/Ci0gICAgZWxlbS5nZXRBdHRyaWJ1dGUoInhtbDpsYW5nIikgfHwgZWxlbS5nZXRBdHRyaWJ1
dGUoImxhbmciKSA6Ci0gICAgZWxlbS5sYW5nKSApIHsKLQotICAgIGVsZW1MYW5nID0gZWxlbUxh
bmcudG9Mb3dlckNhc2UoKTsKLSAgICByZXR1cm4gZWxlbUxhbmcgPT09IGxhbmcgfHwgZWxlbUxh
bmcuaW5kZXhPZiggbGFuZyArICItIiApID09PSAwOwotICAgIH0KLSAgICB9IHdoaWxlICggKGVs
ZW0gPSBlbGVtLnBhcmVudE5vZGUpICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfTsKLSAgICB9KSwKLQotICAgIC8vIE1pc2NlbGxhbmVvdXMKLSAgICAi
dGFyZ2V0IjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgdmFyIGhhc2ggPSB3aW5kb3cubG9jYXRp
b24gJiYgd2luZG93LmxvY2F0aW9uLmhhc2g7Ci0gICAgcmV0dXJuIGhhc2ggJiYgaGFzaC5zbGlj
ZSggMSApID09PSBlbGVtLmlkOwotICAgIH0sCi0KLSAgICAicm9vdCI6IGZ1bmN0aW9uKCBlbGVt
ICkgewotICAgIHJldHVybiBlbGVtID09PSBkb2NFbGVtOwotICAgIH0sCi0KLSAgICAiZm9jdXMi
OiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICByZXR1cm4gZWxlbSA9PT0gZG9jdW1lbnQuYWN0aXZl
RWxlbWVudCAmJiAoIWRvY3VtZW50Lmhhc0ZvY3VzIHx8IGRvY3VtZW50Lmhhc0ZvY3VzKCkpICYm
ICEhKGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5kZXgpOwotICAgIH0sCi0K
LSAgICAvLyBCb29sZWFuIHByb3BlcnRpZXMKLSAgICAiZW5hYmxlZCI6IGZ1bmN0aW9uKCBlbGVt
ICkgewotICAgIHJldHVybiBlbGVtLmRpc2FibGVkID09PSBmYWxzZTsKLSAgICB9LAotCi0gICAg
ImRpc2FibGVkIjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgcmV0dXJuIGVsZW0uZGlzYWJsZWQg
PT09IHRydWU7Ci0gICAgfSwKLQotICAgICJjaGVja2VkIjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0g
ICAgLy8gSW4gQ1NTMywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNl
bGVjdGVkIGVsZW1lbnRzCi0gICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3Nz
My1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWQKLSAgICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5v
ZGVOYW1lLnRvTG93ZXJDYXNlKCk7Ci0gICAgcmV0dXJuIChub2RlTmFtZSA9PT0gImlucHV0IiAm
JiAhIWVsZW0uY2hlY2tlZCkgfHwgKG5vZGVOYW1lID09PSAib3B0aW9uIiAmJiAhIWVsZW0uc2Vs
ZWN0ZWQpOwotICAgIH0sCi0KLSAgICAic2VsZWN0ZWQiOiBmdW5jdGlvbiggZWxlbSApIHsKLSAg
ICAvLyBBY2Nlc3NpbmcgdGhpcyBwcm9wZXJ0eSBtYWtlcyBzZWxlY3RlZC1ieS1kZWZhdWx0Ci0g
ICAgLy8gb3B0aW9ucyBpbiBTYWZhcmkgd29yayBwcm9wZXJseQotICAgIGlmICggZWxlbS5wYXJl
bnROb2RlICkgewotICAgIGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4OwotICAgIH0KLQot
ICAgIHJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlOwotICAgIH0sCi0KLSAgICAvLyBDb250
ZW50cwotICAgICJlbXB0eSI6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIC8vIGh0dHA6Ly93d3cu
dzMub3JnL1RSL3NlbGVjdG9ycy8jZW1wdHktcHNldWRvCi0gICAgLy8gOmVtcHR5IGlzIG9ubHkg
YWZmZWN0ZWQgYnkgZWxlbWVudCBub2RlcyBhbmQgY29udGVudCBub2RlcyhpbmNsdWRpbmcgdGV4
dCgzKSwgY2RhdGEoNCkpLAotICAgIC8vICAgbm90IGNvbW1lbnQsIHByb2Nlc3NpbmcgaW5zdHJ1
Y3Rpb25zLCBvciBvdGhlcnMKLSAgICAvLyBUaGFua3MgdG8gRGllZ28gUGVyaW5pIGZvciB0aGUg
bm9kZU5hbWUgc2hvcnRjdXQKLSAgICAvLyAgIEdyZWF0ZXIgdGhhbiAiQCIgbWVhbnMgYWxwaGEg
Y2hhcmFjdGVycyAoc3BlY2lmaWNhbGx5IG5vdCBzdGFydGluZyB3aXRoICIjIiBvciAiPyIpCi0g
ICAgZm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNp
YmxpbmcgKSB7Ci0gICAgaWYgKCBlbGVtLm5vZGVOYW1lID4gIkAiIHx8IGVsZW0ubm9kZVR5cGUg
PT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gNCApIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgInBhcmVudCI6IGZ1bmN0
aW9uKCBlbGVtICkgewotICAgIHJldHVybiAhRXhwci5wc2V1ZG9zWyJlbXB0eSJdKCBlbGVtICk7
Ci0gICAgfSwKLQotICAgIC8vIEVsZW1lbnQvaW5wdXQgdHlwZXMKLSAgICAiaGVhZGVyIjogZnVu
Y3Rpb24oIGVsZW0gKSB7Ci0gICAgcmV0dXJuIHJoZWFkZXIudGVzdCggZWxlbS5ub2RlTmFtZSAp
OwotICAgIH0sCi0KLSAgICAiaW5wdXQiOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICByZXR1cm4g
cmlucHV0cy50ZXN0KCBlbGVtLm5vZGVOYW1lICk7Ci0gICAgfSwKLQotICAgICJidXR0b24iOiBm
dW5jdGlvbiggZWxlbSApIHsKLSAgICB2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNh
c2UoKTsKLSAgICByZXR1cm4gbmFtZSA9PT0gImlucHV0IiAmJiBlbGVtLnR5cGUgPT09ICJidXR0
b24iIHx8IG5hbWUgPT09ICJidXR0b24iOwotICAgIH0sCi0KLSAgICAidGV4dCI6IGZ1bmN0aW9u
KCBlbGVtICkgewotICAgIHZhciBhdHRyOwotICAgIC8vIElFNiBhbmQgNyB3aWxsIG1hcCBlbGVt
LnR5cGUgdG8gJ3RleHQnIGZvciBuZXcgSFRNTDUgdHlwZXMgKHNlYXJjaCwgZXRjKQotICAgIC8v
IHVzZSBnZXRBdHRyaWJ1dGUgaW5zdGVhZCB0byB0ZXN0IHRoaXMgY2FzZQotICAgIHJldHVybiBl
bGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYKLSAgICBlbGVtLnR5cGUg
PT09ICJ0ZXh0IiAmJgotICAgICggKGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZSgidHlwZSIpKSA9
PSBudWxsIHx8IGF0dHIudG9Mb3dlckNhc2UoKSA9PT0gZWxlbS50eXBlICk7Ci0gICAgfSwKLQot
ICAgIC8vIFBvc2l0aW9uLWluLWNvbGxlY3Rpb24KLSAgICAiZmlyc3QiOiBjcmVhdGVQb3NpdGlv
bmFsUHNldWRvKGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBbIDAgXTsKLSAgICB9KSwKLQotICAg
ICJsYXN0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBs
ZW5ndGggKSB7Ci0gICAgcmV0dXJuIFsgbGVuZ3RoIC0gMSBdOwotICAgIH0pLAotCi0gICAgImVx
IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgs
IGFyZ3VtZW50ICkgewotICAgIHJldHVybiBbIGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVu
Z3RoIDogYXJndW1lbnQgXTsKLSAgICB9KSwKLQotICAgICJldmVuIjogY3JlYXRlUG9zaXRpb25h
bFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7Ci0gICAgdmFyIGkgPSAw
OwotICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkgewotICAgIG1hdGNoSW5kZXhlcy5w
dXNoKCBpICk7Ci0gICAgfQotICAgIHJldHVybiBtYXRjaEluZGV4ZXM7Ci0gICAgfSksCi0KLSAg
ICAib2RkIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBs
ZW5ndGggKSB7Ci0gICAgdmFyIGkgPSAxOwotICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAy
ICkgewotICAgIG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7Ci0gICAgfQotICAgIHJldHVybiBtYXRj
aEluZGV4ZXM7Ci0gICAgfSksCi0KLSAgICAibHQiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1
bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7Ci0gICAgdmFyIGkgPSBh
cmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50OwotICAgIGZvciAoIDsg
LS1pID49IDA7ICkgewotICAgIG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7Ci0gICAgfQotICAgIHJl
dHVybiBtYXRjaEluZGV4ZXM7Ci0gICAgfSksCi0KLSAgICAiZ3QiOiBjcmVhdGVQb3NpdGlvbmFs
UHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7Ci0gICAg
dmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50OwotICAg
IGZvciAoIDsgKytpIDwgbGVuZ3RoOyApIHsKLSAgICBtYXRjaEluZGV4ZXMucHVzaCggaSApOwot
ICAgIH0KLSAgICByZXR1cm4gbWF0Y2hJbmRleGVzOwotICAgIH0pCi0gICAgfQotfTsKLQotLy8g
QWRkIGJ1dHRvbi9pbnB1dCB0eXBlIHBzZXVkb3MKLWZvciAoIGkgaW4geyByYWRpbzogdHJ1ZSwg
Y2hlY2tib3g6IHRydWUsIGZpbGU6IHRydWUsIHBhc3N3b3JkOiB0cnVlLCBpbWFnZTogdHJ1ZSB9
ICkgewotICAgIEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlSW5wdXRQc2V1ZG8oIGkgKTsKLX0K
LWZvciAoIGkgaW4geyBzdWJtaXQ6IHRydWUsIHJlc2V0OiB0cnVlIH0gKSB7Ci0gICAgRXhwci5w
c2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTsKLX0KLQotZnVuY3Rpb24gdG9r
ZW5pemUoIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7Ci0gICAgdmFyIG1hdGNoZWQsIG1hdGNoLCB0
b2tlbnMsIHR5cGUsCi0gICAgc29GYXIsIGdyb3VwcywgcHJlRmlsdGVycywKLSAgICBjYWNoZWQg
PSB0b2tlbkNhY2hlWyBzZWxlY3RvciArICIgIiBdOwotCi0gICAgaWYgKCBjYWNoZWQgKSB7Ci0g
ICAgcmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTsKLSAgICB9Ci0KLSAg
ICBzb0ZhciA9IHNlbGVjdG9yOwotICAgIGdyb3VwcyA9IFtdOwotICAgIHByZUZpbHRlcnMgPSBF
eHByLnByZUZpbHRlcjsKLQotICAgIHdoaWxlICggc29GYXIgKSB7Ci0KLSAgICAvLyBDb21tYSBh
bmQgZmlyc3QgcnVuCi0gICAgaWYgKCAhbWF0Y2hlZCB8fCAobWF0Y2ggPSByY29tbWEuZXhlYygg
c29GYXIgKSkgKSB7Ci0gICAgaWYgKCBtYXRjaCApIHsKLSAgICAvLyBEb24ndCBjb25zdW1lIHRy
YWlsaW5nIGNvbW1hcyBhcyB2YWxpZAotICAgIHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoWzBd
Lmxlbmd0aCApIHx8IHNvRmFyOwotICAgIH0KLSAgICBncm91cHMucHVzaCggdG9rZW5zID0gW10g
KTsKLSAgICB9Ci0KLSAgICBtYXRjaGVkID0gZmFsc2U7Ci0KLSAgICAvLyBDb21iaW5hdG9ycwot
ICAgIGlmICggKG1hdGNoID0gcmNvbWJpbmF0b3JzLmV4ZWMoIHNvRmFyICkpICkgewotICAgIG1h
dGNoZWQgPSBtYXRjaC5zaGlmdCgpOwotICAgIHRva2Vucy5wdXNoKCB7Ci0gICAgdmFsdWU6IG1h
dGNoZWQsCi0gICAgLy8gQ2FzdCBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIHRvIHNwYWNlCi0gICAg
dHlwZTogbWF0Y2hbMF0ucmVwbGFjZSggcnRyaW0sICIgIiApCi0gICAgfSApOwotICAgIHNvRmFy
ID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7Ci0gICAgfQotCi0gICAgLy8gRmlsdGVy
cwotICAgIGZvciAoIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7Ci0gICAgaWYgKCAobWF0Y2ggPSBt
YXRjaEV4cHJbIHR5cGUgXS5leGVjKCBzb0ZhciApKSAmJiAoIXByZUZpbHRlcnNbIHR5cGUgXSB8
fAotICAgIChtYXRjaCA9IHByZUZpbHRlcnNbIHR5cGUgXSggbWF0Y2ggKSkpICkgewotICAgIG1h
dGNoZWQgPSBtYXRjaC5zaGlmdCgpOwotICAgIHRva2Vucy5wdXNoKCB7Ci0gICAgdmFsdWU6IG1h
dGNoZWQsCi0gICAgdHlwZTogdHlwZSwKLSAgICBtYXRjaGVzOiBtYXRjaAotICAgIH0gKTsKLSAg
ICBzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApOwotICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoICFtYXRjaGVkICkgewotICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0KLSAgICAv
LyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgaW52YWxpZCBleGNlc3MKLSAgICAvLyBpZiB3ZSdy
ZSBqdXN0IHBhcnNpbmcKLSAgICAvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVy
biB0b2tlbnMKLSAgICByZXR1cm4gcGFyc2VPbmx5ID8KLSAgICBzb0Zhci5sZW5ndGggOgotICAg
IHNvRmFyID8KLSAgICBTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOgotICAgIC8vIENhY2hlIHRo
ZSB0b2tlbnMKLSAgICB0b2tlbkNhY2hlKCBzZWxlY3RvciwgZ3JvdXBzICkuc2xpY2UoIDAgKTsK
LX0KLQotZnVuY3Rpb24gdG9TZWxlY3RvciggdG9rZW5zICkgewotICAgIHZhciBpID0gMCwKLSAg
ICBsZW4gPSB0b2tlbnMubGVuZ3RoLAotICAgIHNlbGVjdG9yID0gIiI7Ci0gICAgZm9yICggOyBp
IDwgbGVuOyBpKysgKSB7Ci0gICAgc2VsZWN0b3IgKz0gdG9rZW5zW2ldLnZhbHVlOwotICAgIH0K
LSAgICByZXR1cm4gc2VsZWN0b3I7Ci19Ci0KLWZ1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNo
ZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7Ci0gICAgdmFyIGRpciA9IGNvbWJpbmF0b3IuZGlyLAot
ICAgIGNoZWNrTm9uRWxlbWVudHMgPSBiYXNlICYmIGRpciA9PT0gInBhcmVudE5vZGUiLAotICAg
IGRvbmVOYW1lID0gZG9uZSsrOwotCi0gICAgcmV0dXJuIGNvbWJpbmF0b3IuZmlyc3QgPwotICAg
IC8vIENoZWNrIGFnYWluc3QgY2xvc2VzdCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudAotICAg
IGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7Ci0gICAgd2hpbGUgKCAoZWxlbSA9IGVs
ZW1bIGRpciBdKSApIHsKLSAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25F
bGVtZW50cyApIHsKLSAgICByZXR1cm4gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICk7Ci0g
ICAgfQotICAgIH0KLSAgICB9IDoKLQotICAgIC8vIENoZWNrIGFnYWluc3QgYWxsIGFuY2VzdG9y
L3ByZWNlZGluZyBlbGVtZW50cwotICAgIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7
Ci0gICAgdmFyIGRhdGEsIGNhY2hlLCBvdXRlckNhY2hlLAotICAgIGRpcmtleSA9IGRpcnJ1bnMg
KyAiICIgKyBkb25lTmFtZTsKLQotICAgIC8vIFdlIGNhbid0IHNldCBhcmJpdHJhcnkgZGF0YSBv
biBYTUwgbm9kZXMsIHNvIHRoZXkgZG9uJ3QgYmVuZWZpdCBmcm9tIGRpciBjYWNoaW5nCi0gICAg
aWYgKCB4bWwgKSB7Ci0gICAgd2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHsKLSAgICBp
ZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHsKLSAgICBpZiAo
IG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkgewotICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICB9Ci0gICAgfQotICAgIH0gZWxzZSB7Ci0gICAgd2hpbGUgKCAoZWxlbSA9IGVsZW1b
IGRpciBdKSApIHsKLSAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVt
ZW50cyApIHsKLSAgICBvdXRlckNhY2hlID0gZWxlbVsgZXhwYW5kbyBdIHx8IChlbGVtWyBleHBh
bmRvIF0gPSB7fSk7Ci0gICAgaWYgKCAoY2FjaGUgPSBvdXRlckNhY2hlWyBkaXIgXSkgJiYgY2Fj
aGVbMF0gPT09IGRpcmtleSApIHsKLSAgICBpZiAoIChkYXRhID0gY2FjaGVbMV0pID09PSB0cnVl
IHx8IGRhdGEgPT09IGNhY2hlZHJ1bnMgKSB7Ci0gICAgcmV0dXJuIGRhdGEgPT09IHRydWU7Ci0g
ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgY2FjaGUgPSBvdXRlckNhY2hlWyBkaXIgXSA9IFsgZGly
a2V5IF07Ci0gICAgY2FjaGVbMV0gPSBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB8fCBj
YWNoZWRydW5zOwotICAgIGlmICggY2FjaGVbMV0gPT09IHRydWUgKSB7Ci0gICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0gICAgfQotICAgIH0KLSAgICB9OwotfQotCi1mdW5j
dGlvbiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSB7Ci0gICAgcmV0dXJuIG1hdGNoZXJzLmxl
bmd0aCA+IDEgPwotICAgIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7Ci0gICAgdmFy
IGkgPSBtYXRjaGVycy5sZW5ndGg7Ci0gICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgaWYgKCAhbWF0
Y2hlcnNbaV0oIGVsZW0sIGNvbnRleHQsIHhtbCApICkgewotICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICAgIH0gOgotICAgIG1hdGNoZXJzWzBdOwot
fQotCi1mdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwg
eG1sICkgewotICAgIHZhciBlbGVtLAotICAgIG5ld1VubWF0Y2hlZCA9IFtdLAotICAgIGkgPSAw
LAotICAgIGxlbiA9IHVubWF0Y2hlZC5sZW5ndGgsCi0gICAgbWFwcGVkID0gbWFwICE9IG51bGw7
Ci0KLSAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKLSAgICBpZiAoIChlbGVtID0gdW5tYXRj
aGVkW2ldKSApIHsKLSAgICBpZiAoICFmaWx0ZXIgfHwgZmlsdGVyKCBlbGVtLCBjb250ZXh0LCB4
bWwgKSApIHsKLSAgICBuZXdVbm1hdGNoZWQucHVzaCggZWxlbSApOwotICAgIGlmICggbWFwcGVk
ICkgewotICAgIG1hcC5wdXNoKCBpICk7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG5ld1VubWF0Y2hlZDsKLX0KLQotZnVuY3Rpb24gc2V0TWF0Y2hlciggcHJlRmls
dGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwgcG9zdEZpbmRlciwgcG9zdFNlbGVj
dG9yICkgewotICAgIGlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBdICkg
ewotICAgIHBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmlsdGVyICk7Ci0gICAgfQotICAg
IGlmICggcG9zdEZpbmRlciAmJiAhcG9zdEZpbmRlclsgZXhwYW5kbyBdICkgewotICAgIHBvc3RG
aW5kZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgcmVzdWx0cywgY29udGV4dCwg
eG1sICkgewotICAgIHZhciB0ZW1wLCBpLCBlbGVtLAotICAgIHByZU1hcCA9IFtdLAotICAgIHBv
c3RNYXAgPSBbXSwKLSAgICBwcmVleGlzdGluZyA9IHJlc3VsdHMubGVuZ3RoLAotCi0gICAgLy8g
R2V0IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVkIG9yIGNvbnRleHQKLSAgICBlbGVtcyA9IHNl
ZWQgfHwgbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IgfHwgIioiLCBjb250ZXh0Lm5vZGVUeXBl
ID8gWyBjb250ZXh0IF0gOiBjb250ZXh0LCBbXSApLAotCi0gICAgLy8gUHJlZmlsdGVyIHRvIGdl
dCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hy
b25pemF0aW9uCi0gICAgbWF0Y2hlckluID0gcHJlRmlsdGVyICYmICggc2VlZCB8fCAhc2VsZWN0
b3IgKSA/Ci0gICAgY29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwg
eG1sICkgOgotICAgIGVsZW1zLAotCi0gICAgbWF0Y2hlck91dCA9IG1hdGNoZXIgPwotICAgIC8v
IElmIHdlIGhhdmUgYSBwb3N0RmluZGVyLCBvciBmaWx0ZXJlZCBzZWVkLCBvciBub24tc2VlZCBw
b3N0RmlsdGVyIG9yIHByZWV4aXN0aW5nIHJlc3VsdHMsCi0gICAgcG9zdEZpbmRlciB8fCAoIHNl
ZWQgPyBwcmVGaWx0ZXIgOiBwcmVleGlzdGluZyB8fCBwb3N0RmlsdGVyICkgPwotCi0gICAgLy8g
Li4uaW50ZXJtZWRpYXRlIHByb2Nlc3NpbmcgaXMgbmVjZXNzYXJ5Ci0gICAgW10gOgotCi0gICAg
Ly8gLi4ub3RoZXJ3aXNlIHVzZSByZXN1bHRzIGRpcmVjdGx5Ci0gICAgcmVzdWx0cyA6Ci0gICAg
bWF0Y2hlckluOwotCi0gICAgLy8gRmluZCBwcmltYXJ5IG1hdGNoZXMKLSAgICBpZiAoIG1hdGNo
ZXIgKSB7Ci0gICAgbWF0Y2hlciggbWF0Y2hlckluLCBtYXRjaGVyT3V0LCBjb250ZXh0LCB4bWwg
KTsKLSAgICB9Ci0KLSAgICAvLyBBcHBseSBwb3N0RmlsdGVyCi0gICAgaWYgKCBwb3N0RmlsdGVy
ICkgewotICAgIHRlbXAgPSBjb25kZW5zZSggbWF0Y2hlck91dCwgcG9zdE1hcCApOwotICAgIHBv
c3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTsKLQotICAgIC8vIFVuLW1hdGNoIGZh
aWxpbmcgZWxlbWVudHMgYnkgbW92aW5nIHRoZW0gYmFjayB0byBtYXRjaGVySW4KLSAgICBpID0g
dGVtcC5sZW5ndGg7Ci0gICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgaWYgKCAoZWxlbSA9IHRlbXBb
aV0pICkgewotICAgIG1hdGNoZXJPdXRbIHBvc3RNYXBbaV0gXSA9ICEobWF0Y2hlckluWyBwb3N0
TWFwW2ldIF0gPSBlbGVtKTsKLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIGlmICggc2VlZCAp
IHsKLSAgICBpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkgewotICAgIGlmICggcG9zdEZp
bmRlciApIHsKLSAgICAvLyBHZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVuc2luZyB0
aGlzIGludGVybWVkaWF0ZSBpbnRvIHBvc3RGaW5kZXIgY29udGV4dHMKLSAgICB0ZW1wID0gW107
Ci0gICAgaSA9IG1hdGNoZXJPdXQubGVuZ3RoOwotICAgIHdoaWxlICggaS0tICkgewotICAgIGlm
ICggKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSApIHsKLSAgICAvLyBSZXN0b3JlIG1hdGNoZXJJbiBz
aW5jZSBlbGVtIGlzIG5vdCB5ZXQgYSBmaW5hbCBtYXRjaAotICAgIHRlbXAucHVzaCggKG1hdGNo
ZXJJbltpXSA9IGVsZW0pICk7Ci0gICAgfQotICAgIH0KLSAgICBwb3N0RmluZGVyKCBudWxsLCAo
bWF0Y2hlck91dCA9IFtdKSwgdGVtcCwgeG1sICk7Ci0gICAgfQotCi0gICAgLy8gTW92ZSBtYXRj
aGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6
ZWQKLSAgICBpID0gbWF0Y2hlck91dC5sZW5ndGg7Ci0gICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAg
aWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICYmCi0gICAgKHRlbXAgPSBwb3N0RmluZGVyID8g
aW5kZXhPZi5jYWxsKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbaV0pID4gLTEgKSB7Ci0KLSAgICBz
ZWVkW3RlbXBdID0gIShyZXN1bHRzW3RlbXBdID0gZWxlbSk7Ci0gICAgfQotICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBBZGQgZWxlbWVudHMgdG8gcmVzdWx0cywgdGhyb3VnaCBwb3N0RmluZGVyIGlm
IGRlZmluZWQKLSAgICB9IGVsc2UgewotICAgIG1hdGNoZXJPdXQgPSBjb25kZW5zZSgKLSAgICBt
YXRjaGVyT3V0ID09PSByZXN1bHRzID8KLSAgICBtYXRjaGVyT3V0LnNwbGljZSggcHJlZXhpc3Rp
bmcsIG1hdGNoZXJPdXQubGVuZ3RoICkgOgotICAgIG1hdGNoZXJPdXQKLSAgICApOwotICAgIGlm
ICggcG9zdEZpbmRlciApIHsKLSAgICBwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVy
T3V0LCB4bWwgKTsKLSAgICB9IGVsc2UgewotICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNo
ZXJPdXQgKTsKLSAgICB9Ci0gICAgfQotICAgIH0pOwotfQotCi1mdW5jdGlvbiBtYXRjaGVyRnJv
bVRva2VucyggdG9rZW5zICkgewotICAgIHZhciBjaGVja0NvbnRleHQsIG1hdGNoZXIsIGosCi0g
ICAgbGVuID0gdG9rZW5zLmxlbmd0aCwKLSAgICBsZWFkaW5nUmVsYXRpdmUgPSBFeHByLnJlbGF0
aXZlWyB0b2tlbnNbMF0udHlwZSBdLAotICAgIGltcGxpY2l0UmVsYXRpdmUgPSBsZWFkaW5nUmVs
YXRpdmUgfHwgRXhwci5yZWxhdGl2ZVsiICJdLAotICAgIGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAx
IDogMCwKLQotICAgIC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxl
bWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpCi0gICAgbWF0Y2hD
b250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgcmV0dXJuIGVs
ZW0gPT09IGNoZWNrQ29udGV4dDsKLSAgICB9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksCi0g
ICAgbWF0Y2hBbnlDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7Ci0g
ICAgcmV0dXJuIGluZGV4T2YuY2FsbCggY2hlY2tDb250ZXh0LCBlbGVtICkgPiAtMTsKLSAgICB9
LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksCi0gICAgbWF0Y2hlcnMgPSBbIGZ1bmN0aW9uKCBl
bGVtLCBjb250ZXh0LCB4bWwgKSB7Ci0gICAgcmV0dXJuICggIWxlYWRpbmdSZWxhdGl2ZSAmJiAo
IHhtbCB8fCBjb250ZXh0ICE9PSBvdXRlcm1vc3RDb250ZXh0ICkgKSB8fCAoCi0gICAgKGNoZWNr
Q29udGV4dCA9IGNvbnRleHQpLm5vZGVUeXBlID8KLSAgICBtYXRjaENvbnRleHQoIGVsZW0sIGNv
bnRleHQsIHhtbCApIDoKLSAgICBtYXRjaEFueUNvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCAp
ICk7Ci0gICAgfSBdOwotCi0gICAgZm9yICggOyBpIDwgbGVuOyBpKysgKSB7Ci0gICAgaWYgKCAo
bWF0Y2hlciA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1tpXS50eXBlIF0pICkgewotICAgIG1hdGNo
ZXJzID0gWyBhZGRDb21iaW5hdG9yKGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVy
KSBdOwotICAgIH0gZWxzZSB7Ci0gICAgbWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tlbnNbaV0u
dHlwZSBdLmFwcGx5KCBudWxsLCB0b2tlbnNbaV0ubWF0Y2hlcyApOwotCi0gICAgLy8gUmV0dXJu
IHNwZWNpYWwgdXBvbiBzZWVpbmcgYSBwb3NpdGlvbmFsIG1hdGNoZXIKLSAgICBpZiAoIG1hdGNo
ZXJbIGV4cGFuZG8gXSApIHsKLSAgICAvLyBGaW5kIHRoZSBuZXh0IHJlbGF0aXZlIG9wZXJhdG9y
IChpZiBhbnkpIGZvciBwcm9wZXIgaGFuZGxpbmcKLSAgICBqID0gKytpOwotICAgIGZvciAoIDsg
aiA8IGxlbjsgaisrICkgewotICAgIGlmICggRXhwci5yZWxhdGl2ZVsgdG9rZW5zW2pdLnR5cGUg
XSApIHsKLSAgICBicmVhazsKLSAgICB9Ci0gICAgfQotICAgIHJldHVybiBzZXRNYXRjaGVyKAot
ICAgIGkgPiAxICYmIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLAotICAgIGkgPiAxICYmIHRv
U2VsZWN0b3IoIHRva2Vucy5zbGljZSggMCwgaSAtIDEgKSApLnJlcGxhY2UoIHJ0cmltLCAiJDEi
ICksCi0gICAgbWF0Y2hlciwKLSAgICBpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5z
LnNsaWNlKCBpLCBqICkgKSwKLSAgICBqIDwgbGVuICYmIG1hdGNoZXJGcm9tVG9rZW5zKCAodG9r
ZW5zID0gdG9rZW5zLnNsaWNlKCBqICkpICksCi0gICAgaiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0
b2tlbnMgKQotICAgICk7Ci0gICAgfQotICAgIG1hdGNoZXJzLnB1c2goIG1hdGNoZXIgKTsKLSAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApOwotfQot
Ci1mdW5jdGlvbiBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0
TWF0Y2hlcnMgKSB7Ci0gICAgLy8gQSBjb3VudGVyIHRvIHNwZWNpZnkgd2hpY2ggZWxlbWVudCBp
cyBjdXJyZW50bHkgYmVpbmcgbWF0Y2hlZAotICAgIHZhciBtYXRjaGVyQ2FjaGVkUnVucyA9IDAs
Ci0gICAgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLAotICAgIGJ5RWxlbWVudCA9IGVs
ZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLAotICAgIHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBz
ZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIGV4cGFuZENvbnRleHQgKSB7Ci0gICAgdmFyIGVs
ZW0sIGosIG1hdGNoZXIsCi0gICAgc2V0TWF0Y2hlZCA9IFtdLAotICAgIG1hdGNoZWRDb3VudCA9
IDAsCi0gICAgaSA9ICIwIiwKLSAgICB1bm1hdGNoZWQgPSBzZWVkICYmIFtdLAotICAgIG91dGVy
bW9zdCA9IGV4cGFuZENvbnRleHQgIT0gbnVsbCwKLSAgICBjb250ZXh0QmFja3VwID0gb3V0ZXJt
b3N0Q29udGV4dCwKLSAgICAvLyBXZSBtdXN0IGFsd2F5cyBoYXZlIGVpdGhlciBzZWVkIGVsZW1l
bnRzIG9yIGNvbnRleHQKLSAgICBlbGVtcyA9IHNlZWQgfHwgYnlFbGVtZW50ICYmIEV4cHIuZmlu
ZFsiVEFHIl0oICIqIiwgZXhwYW5kQ29udGV4dCAmJiBjb250ZXh0LnBhcmVudE5vZGUgfHwgY29u
dGV4dCApLAotICAgIC8vIFVzZSBpbnRlZ2VyIGRpcnJ1bnMgaWZmIHRoaXMgaXMgdGhlIG91dGVy
bW9zdCBtYXRjaGVyCi0gICAgZGlycnVuc1VuaXF1ZSA9IChkaXJydW5zICs9IGNvbnRleHRCYWNr
dXAgPT0gbnVsbCA/IDEgOiBNYXRoLnJhbmRvbSgpIHx8IDAuMSk7Ci0KLSAgICBpZiAoIG91dGVy
bW9zdCApIHsKLSAgICBvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dCAhPT0gZG9jdW1lbnQgJiYg
Y29udGV4dDsKLSAgICBjYWNoZWRydW5zID0gbWF0Y2hlckNhY2hlZFJ1bnM7Ci0gICAgfQotCi0g
ICAgLy8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJl
c3VsdHMKLSAgICAvLyBLZWVwIGBpYCBhIHN0cmluZyBpZiB0aGVyZSBhcmUgbm8gZWxlbWVudHMg
c28gYG1hdGNoZWRDb3VudGAgd2lsbCBiZSAiMDAiIGJlbG93Ci0gICAgZm9yICggOyAoZWxlbSA9
IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7Ci0gICAgaWYgKCBieUVsZW1lbnQgJiYgZWxlbSAp
IHsKLSAgICBqID0gMDsKLSAgICB3aGlsZSAoIChtYXRjaGVyID0gZWxlbWVudE1hdGNoZXJzW2or
K10pICkgewotICAgIGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7Ci0gICAg
cmVzdWx0cy5wdXNoKCBlbGVtICk7Ci0gICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLSAgICBpZiAo
IG91dGVybW9zdCApIHsKLSAgICBkaXJydW5zID0gZGlycnVuc1VuaXF1ZTsKLSAgICBjYWNoZWRy
dW5zID0gKyttYXRjaGVyQ2FjaGVkUnVuczsKLSAgICB9Ci0gICAgfQotCi0gICAgLy8gVHJhY2sg
dW5tYXRjaGVkIGVsZW1lbnRzIGZvciBzZXQgZmlsdGVycwotICAgIGlmICggYnlTZXQgKSB7Ci0g
ICAgLy8gVGhleSB3aWxsIGhhdmUgZ29uZSB0aHJvdWdoIGFsbCBwb3NzaWJsZSBtYXRjaGVycwot
ICAgIGlmICggKGVsZW0gPSAhbWF0Y2hlciAmJiBlbGVtKSApIHsKLSAgICBtYXRjaGVkQ291bnQt
LTsKLSAgICB9Ci0KLSAgICAvLyBMZW5ndGhlbiB0aGUgYXJyYXkgZm9yIGV2ZXJ5IGVsZW1lbnQs
IG1hdGNoZWQgb3Igbm90Ci0gICAgaWYgKCBzZWVkICkgewotICAgIHVubWF0Y2hlZC5wdXNoKCBl
bGVtICk7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBBcHBseSBzZXQgZmlsdGVycyB0
byB1bm1hdGNoZWQgZWxlbWVudHMKLSAgICBtYXRjaGVkQ291bnQgKz0gaTsKLSAgICBpZiAoIGJ5
U2V0ICYmIGkgIT09IG1hdGNoZWRDb3VudCApIHsKLSAgICBqID0gMDsKLSAgICB3aGlsZSAoICht
YXRjaGVyID0gc2V0TWF0Y2hlcnNbaisrXSkgKSB7Ci0gICAgbWF0Y2hlciggdW5tYXRjaGVkLCBz
ZXRNYXRjaGVkLCBjb250ZXh0LCB4bWwgKTsKLSAgICB9Ci0KLSAgICBpZiAoIHNlZWQgKSB7Ci0g
ICAgLy8gUmVpbnRlZ3JhdGUgZWxlbWVudCBtYXRjaGVzIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBm
b3Igc29ydGluZwotICAgIGlmICggbWF0Y2hlZENvdW50ID4gMCApIHsKLSAgICB3aGlsZSAoIGkt
LSApIHsKLSAgICBpZiAoICEodW5tYXRjaGVkW2ldIHx8IHNldE1hdGNoZWRbaV0pICkgewotICAg
IHNldE1hdGNoZWRbaV0gPSBwb3AuY2FsbCggcmVzdWx0cyApOwotICAgIH0KLSAgICB9Ci0gICAg
fQotCi0gICAgLy8gRGlzY2FyZCBpbmRleCBwbGFjZWhvbGRlciB2YWx1ZXMgdG8gZ2V0IG9ubHkg
YWN0dWFsIG1hdGNoZXMKLSAgICBzZXRNYXRjaGVkID0gY29uZGVuc2UoIHNldE1hdGNoZWQgKTsK
LSAgICB9Ci0KLSAgICAvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzCi0gICAgcHVzaC5hcHBseSgg
cmVzdWx0cywgc2V0TWF0Y2hlZCApOwotCi0gICAgLy8gU2VlZGxlc3Mgc2V0IG1hdGNoZXMgc3Vj
Y2VlZGluZyBtdWx0aXBsZSBzdWNjZXNzZnVsIG1hdGNoZXJzIHN0aXB1bGF0ZSBzb3J0aW5nCi0g
ICAgaWYgKCBvdXRlcm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5ndGggPiAwICYmCi0g
ICAgKCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7Ci0KLSAgICBT
aXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApOwotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBPdmVy
cmlkZSBtYW5pcHVsYXRpb24gb2YgZ2xvYmFscyBieSBuZXN0ZWQgbWF0Y2hlcnMKLSAgICBpZiAo
IG91dGVybW9zdCApIHsKLSAgICBkaXJydW5zID0gZGlycnVuc1VuaXF1ZTsKLSAgICBvdXRlcm1v
c3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdW5tYXRjaGVk
OwotICAgIH07Ci0KLSAgICByZXR1cm4gYnlTZXQgPwotICAgIG1hcmtGdW5jdGlvbiggc3VwZXJN
YXRjaGVyICkgOgotICAgIHN1cGVyTWF0Y2hlcjsKLX0KLQotY29tcGlsZSA9IFNpenpsZS5jb21w
aWxlID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBncm91cCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyAp
IHsKLSAgICB2YXIgaSwKLSAgICBzZXRNYXRjaGVycyA9IFtdLAotICAgIGVsZW1lbnRNYXRjaGVy
cyA9IFtdLAotICAgIGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgIiAiIF07Ci0K
LSAgICBpZiAoICFjYWNoZWQgKSB7Ci0gICAgLy8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiByZWN1
cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50Ci0g
ICAgaWYgKCAhZ3JvdXAgKSB7Ci0gICAgZ3JvdXAgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTsKLSAg
ICB9Ci0gICAgaSA9IGdyb3VwLmxlbmd0aDsKLSAgICB3aGlsZSAoIGktLSApIHsKLSAgICBjYWNo
ZWQgPSBtYXRjaGVyRnJvbVRva2VucyggZ3JvdXBbaV0gKTsKLSAgICBpZiAoIGNhY2hlZFsgZXhw
YW5kbyBdICkgewotICAgIHNldE1hdGNoZXJzLnB1c2goIGNhY2hlZCApOwotICAgIH0gZWxzZSB7
Ci0gICAgZWxlbWVudE1hdGNoZXJzLnB1c2goIGNhY2hlZCApOwotICAgIH0KLSAgICB9Ci0KLSAg
ICAvLyBDYWNoZSB0aGUgY29tcGlsZWQgZnVuY3Rpb24KLSAgICBjYWNoZWQgPSBjb21waWxlckNh
Y2hlKCBzZWxlY3RvciwgbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMs
IHNldE1hdGNoZXJzICkgKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNhY2hlZDsKLX07Ci0KLWZ1bmN0
aW9uIG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yLCBjb250ZXh0cywgcmVzdWx0cyApIHsKLSAg
ICB2YXIgaSA9IDAsCi0gICAgbGVuID0gY29udGV4dHMubGVuZ3RoOwotICAgIGZvciAoIDsgaSA8
IGxlbjsgaSsrICkgewotICAgIFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHRzW2ldLCByZXN1bHRz
ICk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHRzOwotfQotCi1mdW5jdGlvbiBzZWxlY3QoIHNl
bGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkgewotICAgIHZhciBpLCB0b2tlbnMsIHRv
a2VuLCB0eXBlLCBmaW5kLAotICAgIG1hdGNoID0gdG9rZW5pemUoIHNlbGVjdG9yICk7Ci0KLSAg
ICBpZiAoICFzZWVkICkgewotICAgIC8vIFRyeSB0byBtaW5pbWl6ZSBvcGVyYXRpb25zIGlmIHRo
ZXJlIGlzIG9ubHkgb25lIGdyb3VwCi0gICAgaWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7Ci0K
LSAgICAvLyBUYWtlIGEgc2hvcnRjdXQgYW5kIHNldCB0aGUgY29udGV4dCBpZiB0aGUgcm9vdCBz
ZWxlY3RvciBpcyBhbiBJRAotICAgIHRva2VucyA9IG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2Uo
IDAgKTsKLSAgICBpZiAoIHRva2Vucy5sZW5ndGggPiAyICYmICh0b2tlbiA9IHRva2Vuc1swXSku
dHlwZSA9PT0gIklEIiAmJgotICAgIGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgIWRvY3VtZW50
SXNYTUwgJiYKLSAgICBFeHByLnJlbGF0aXZlWyB0b2tlbnNbMV0udHlwZSBdICkgewotCi0gICAg
Y29udGV4dCA9IEV4cHIuZmluZFsiSUQiXSggdG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKCBydW5l
c2NhcGUsIGZ1bmVzY2FwZSApLCBjb250ZXh0IClbMF07Ci0gICAgaWYgKCAhY29udGV4dCApIHsK
LSAgICByZXR1cm4gcmVzdWx0czsKLSAgICB9Ci0KLSAgICBzZWxlY3RvciA9IHNlbGVjdG9yLnNs
aWNlKCB0b2tlbnMuc2hpZnQoKS52YWx1ZS5sZW5ndGggKTsKLSAgICB9Ci0KLSAgICAvLyBGZXRj
aCBhIHNlZWQgc2V0IGZvciByaWdodC10by1sZWZ0IG1hdGNoaW5nCi0gICAgaSA9IG1hdGNoRXhw
clsibmVlZHNDb250ZXh0Il0udGVzdCggc2VsZWN0b3IgKSA/IDAgOiB0b2tlbnMubGVuZ3RoOwot
ICAgIHdoaWxlICggaS0tICkgewotICAgIHRva2VuID0gdG9rZW5zW2ldOwotCi0gICAgLy8gQWJv
cnQgaWYgd2UgaGl0IGEgY29tYmluYXRvcgotICAgIGlmICggRXhwci5yZWxhdGl2ZVsgKHR5cGUg
PSB0b2tlbi50eXBlKSBdICkgewotICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoIChmaW5kID0g
RXhwci5maW5kWyB0eXBlIF0pICkgewotICAgIC8vIFNlYXJjaCwgZXhwYW5kaW5nIGNvbnRleHQg
Zm9yIGxlYWRpbmcgc2libGluZyBjb21iaW5hdG9ycwotICAgIGlmICggKHNlZWQgPSBmaW5kKAot
ICAgIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSwKLSAg
ICByc2libGluZy50ZXN0KCB0b2tlbnNbMF0udHlwZSApICYmIGNvbnRleHQucGFyZW50Tm9kZSB8
fCBjb250ZXh0Ci0gICAgKSkgKSB7Ci0KLSAgICAvLyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5vIHRv
a2VucyByZW1haW4sIHdlIGNhbiByZXR1cm4gZWFybHkKLSAgICB0b2tlbnMuc3BsaWNlKCBpLCAx
ICk7Ci0gICAgc2VsZWN0b3IgPSBzZWVkLmxlbmd0aCAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKTsK
LSAgICBpZiAoICFzZWxlY3RvciApIHsKLSAgICBwdXNoLmFwcGx5KCByZXN1bHRzLCBzbGljZS5j
YWxsKCBzZWVkLCAwICkgKTsKLSAgICByZXR1cm4gcmVzdWx0czsKLSAgICB9Ci0KLSAgICBicmVh
azsKLSAgICB9Ci0gICAgfQotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAgLy8gQ29tcGlsZSBh
bmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBmdW5jdGlvbgotICAgIC8vIFByb3ZpZGUgYG1hdGNoYCB0
byBhdm9pZCByZXRva2VuaXphdGlvbiBpZiB3ZSBtb2RpZmllZCB0aGUgc2VsZWN0b3IgYWJvdmUK
LSAgICBjb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggKSgKLSAgICBzZWVkLAotICAgIGNvbnRleHQs
Ci0gICAgZG9jdW1lbnRJc1hNTCwKLSAgICByZXN1bHRzLAotICAgIHJzaWJsaW5nLnRlc3QoIHNl
bGVjdG9yICkKLSAgICApOwotICAgIHJldHVybiByZXN1bHRzOwotfQotCi0vLyBEZXByZWNhdGVk
Ci1FeHByLnBzZXVkb3NbIm50aCJdID0gRXhwci5wc2V1ZG9zWyJlcSJdOwotCi0vLyBFYXN5IEFQ
SSBmb3IgY3JlYXRpbmcgbmV3IHNldEZpbHRlcnMKLWZ1bmN0aW9uIHNldEZpbHRlcnMoKSB7fQot
RXhwci5maWx0ZXJzID0gc2V0RmlsdGVycy5wcm90b3R5cGUgPSBFeHByLnBzZXVkb3M7Ci1FeHBy
LnNldEZpbHRlcnMgPSBuZXcgc2V0RmlsdGVycygpOwotCi0vLyBJbml0aWFsaXplIHdpdGggdGhl
IGRlZmF1bHQgZG9jdW1lbnQKLXNldERvY3VtZW50KCk7Ci0KLS8vIE92ZXJyaWRlIHNpenpsZSBh
dHRyaWJ1dGUgcmV0cmlldmFsCi1TaXp6bGUuYXR0ciA9IGpRdWVyeS5hdHRyOwotalF1ZXJ5LmZp
bmQgPSBTaXp6bGU7Ci1qUXVlcnkuZXhwciA9IFNpenpsZS5zZWxlY3RvcnM7Ci1qUXVlcnkuZXhw
clsiOiJdID0galF1ZXJ5LmV4cHIucHNldWRvczsKLWpRdWVyeS51bmlxdWUgPSBTaXp6bGUudW5p
cXVlU29ydDsKLWpRdWVyeS50ZXh0ID0gU2l6emxlLmdldFRleHQ7Ci1qUXVlcnkuaXNYTUxEb2Mg
PSBTaXp6bGUuaXNYTUw7Ci1qUXVlcnkuY29udGFpbnMgPSBTaXp6bGUuY29udGFpbnM7Ci0KLQot
fSkoIHdpbmRvdyApOwotdmFyIHJ1bnRpbCA9IC9VbnRpbCQvLAotICAgIHJwYXJlbnRzcHJldiA9
IC9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLAotICAgIGlzU2ltcGxlID0gL14uW146
I1xbXC4sXSokLywKLSAgICBybmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHND
b250ZXh0LAotICAgIC8vIG1ldGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNl
dCB3aGVuIHN0YXJ0aW5nIGZyb20gYSB1bmlxdWUgc2V0Ci0gICAgZ3VhcmFudGVlZFVuaXF1ZSA9
IHsKLSAgICBjaGlsZHJlbjogdHJ1ZSwKLSAgICBjb250ZW50czogdHJ1ZSwKLSAgICBuZXh0OiB0
cnVlLAotICAgIHByZXY6IHRydWUKLSAgICB9OwotCi1qUXVlcnkuZm4uZXh0ZW5kKHsKLSAgICBm
aW5kOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0gICAgdmFyIGksIHJldCwgc2VsZiwKLSAgICBs
ZW4gPSB0aGlzLmxlbmd0aDsKLQotICAgIGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSAic3RyaW5n
IiApIHsKLSAgICBzZWxmID0gdGhpczsKLSAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVy
eSggc2VsZWN0b3IgKS5maWx0ZXIoZnVuY3Rpb24oKSB7Ci0gICAgZm9yICggaSA9IDA7IGkgPCBs
ZW47IGkrKyApIHsKLSAgICBpZiAoIGpRdWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkg
KSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIH0KLSAgICB9KSApOwotICAgIH0KLQot
ICAgIHJldCA9IFtdOwotICAgIGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7Ci0gICAgalF1
ZXJ5LmZpbmQoIHNlbGVjdG9yLCB0aGlzWyBpIF0sIHJldCApOwotICAgIH0KLQotICAgIC8vIE5l
ZWRlZCBiZWNhdXNlICQoIHNlbGVjdG9yLCBjb250ZXh0ICkgYmVjb21lcyAkKCBjb250ZXh0ICku
ZmluZCggc2VsZWN0b3IgKQotICAgIHJldCA9IHRoaXMucHVzaFN0YWNrKCBsZW4gPiAxID8galF1
ZXJ5LnVuaXF1ZSggcmV0ICkgOiByZXQgKTsKLSAgICByZXQuc2VsZWN0b3IgPSAoIHRoaXMuc2Vs
ZWN0b3IgPyB0aGlzLnNlbGVjdG9yICsgIiAiIDogIiIgKSArIHNlbGVjdG9yOwotICAgIHJldHVy
biByZXQ7Ci0gICAgfSwKLQotICAgIGhhczogZnVuY3Rpb24oIHRhcmdldCApIHsKLSAgICB2YXIg
aSwKLSAgICB0YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQsIHRoaXMgKSwKLSAgICBsZW4gPSB0YXJn
ZXRzLmxlbmd0aDsKLQotICAgIHJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpIHsKLSAgICBm
b3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkgewotICAgIGlmICggalF1ZXJ5LmNvbnRhaW5zKCB0
aGlzLCB0YXJnZXRzW2ldICkgKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIH0KLSAg
ICB9KTsKLSAgICB9LAotCi0gICAgbm90OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0gICAgcmV0
dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3codGhpcywgc2VsZWN0b3IsIGZhbHNlKSApOwotICAg
IH0sCi0KLSAgICBmaWx0ZXI6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLSAgICByZXR1cm4gdGhp
cy5wdXNoU3RhY2soIHdpbm5vdyh0aGlzLCBzZWxlY3RvciwgdHJ1ZSkgKTsKLSAgICB9LAotCi0g
ICAgaXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLSAgICByZXR1cm4gISFzZWxlY3RvciAmJiAo
Ci0gICAgdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiA/Ci0gICAgLy8gSWYgdGhpcyBpcyBh
IHBvc2l0aW9uYWwvcmVsYXRpdmUgc2VsZWN0b3IsIGNoZWNrIG1lbWJlcnNoaXAgaW4gdGhlIHJl
dHVybmVkIHNldAotICAgIC8vIHNvICQoInA6Zmlyc3QiKS5pcygicDpsYXN0Iikgd29uJ3QgcmV0
dXJuIHRydWUgZm9yIGEgZG9jIHdpdGggdHdvICJwIi4KLSAgICBybmVlZHNDb250ZXh0LnRlc3Qo
IHNlbGVjdG9yICkgPwotICAgIGpRdWVyeSggc2VsZWN0b3IsIHRoaXMuY29udGV4dCApLmluZGV4
KCB0aGlzWzBdICkgPj0gMCA6Ci0gICAgalF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIHRoaXMgKS5s
ZW5ndGggPiAwIDoKLSAgICB0aGlzLmZpbHRlciggc2VsZWN0b3IgKS5sZW5ndGggPiAwICk7Ci0g
ICAgfSwKLQotICAgIGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7Ci0g
ICAgdmFyIGN1ciwKLSAgICBpID0gMCwKLSAgICBsID0gdGhpcy5sZW5ndGgsCi0gICAgcmV0ID0g
W10sCi0gICAgcG9zID0gcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSB8fCB0eXBlb2Yg
c2VsZWN0b3JzICE9PSAic3RyaW5nIiA/Ci0gICAgalF1ZXJ5KCBzZWxlY3RvcnMsIGNvbnRleHQg
fHwgdGhpcy5jb250ZXh0ICkgOgotICAgIDA7Ci0KLSAgICBmb3IgKCA7IGkgPCBsOyBpKysgKSB7
Ci0gICAgY3VyID0gdGhpc1tpXTsKLQotICAgIHdoaWxlICggY3VyICYmIGN1ci5vd25lckRvY3Vt
ZW50ICYmIGN1ciAhPT0gY29udGV4dCAmJiBjdXIubm9kZVR5cGUgIT09IDExICkgewotICAgIGlm
ICggcG9zID8gcG9zLmluZGV4KGN1cikgPiAtMSA6IGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3Rv
cihjdXIsIHNlbGVjdG9ycykgKSB7Ci0gICAgcmV0LnB1c2goIGN1ciApOwotICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjdXIgPSBjdXIucGFyZW50Tm9kZTsKLSAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRoaXMucHVzaFN0YWNrKCByZXQubGVuZ3RoID4gMSA/IGpRdWVyeS51bmlxdWUoIHJldCAp
IDogcmV0ICk7Ci0gICAgfSwKLQotICAgIC8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4g
ZWxlbWVudCB3aXRoaW4KLSAgICAvLyB0aGUgbWF0Y2hlZCBzZXQgb2YgZWxlbWVudHMKLSAgICBp
bmRleDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0KLSAgICAvLyBObyBhcmd1bWVudCwgcmV0dXJuIGlu
ZGV4IGluIHBhcmVudAotICAgIGlmICggIWVsZW0gKSB7Ci0gICAgcmV0dXJuICggdGhpc1swXSAm
JiB0aGlzWzBdLnBhcmVudE5vZGUgKSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDog
LTE7Ci0gICAgfQotCi0gICAgLy8gaW5kZXggaW4gc2VsZWN0b3IKLSAgICBpZiAoIHR5cGVvZiBl
bGVtID09PSAic3RyaW5nIiApIHsKLSAgICByZXR1cm4galF1ZXJ5LmluQXJyYXkoIHRoaXNbMF0s
IGpRdWVyeSggZWxlbSApICk7Ci0gICAgfQotCi0gICAgLy8gTG9jYXRlIHRoZSBwb3NpdGlvbiBv
ZiB0aGUgZGVzaXJlZCBlbGVtZW50Ci0gICAgcmV0dXJuIGpRdWVyeS5pbkFycmF5KAotICAgIC8v
IElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdXNl
ZAotICAgIGVsZW0uanF1ZXJ5ID8gZWxlbVswXSA6IGVsZW0sIHRoaXMgKTsKLSAgICB9LAotCi0g
ICAgYWRkOiBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7Ci0gICAgdmFyIHNldCA9IHR5
cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgPwotICAgIGpRdWVyeSggc2VsZWN0b3IsIGNvbnRl
eHQgKSA6Ci0gICAgalF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IgJiYgc2VsZWN0b3Iubm9kZVR5
cGUgPyBbIHNlbGVjdG9yIF0gOiBzZWxlY3RvciApLAotICAgIGFsbCA9IGpRdWVyeS5tZXJnZSgg
dGhpcy5nZXQoKSwgc2V0ICk7Ci0KLSAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS51
bmlxdWUoYWxsKSApOwotICAgIH0sCi0KLSAgICBhZGRCYWNrOiBmdW5jdGlvbiggc2VsZWN0b3Ig
KSB7Ci0gICAgcmV0dXJuIHRoaXMuYWRkKCBzZWxlY3RvciA9PSBudWxsID8KLSAgICB0aGlzLnBy
ZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKHNlbGVjdG9yKQotICAgICk7Ci0gICAg
fQotfSk7Ci0KLWpRdWVyeS5mbi5hbmRTZWxmID0galF1ZXJ5LmZuLmFkZEJhY2s7Ci0KLWZ1bmN0
aW9uIHNpYmxpbmcoIGN1ciwgZGlyICkgewotICAgIGRvIHsKLSAgICBjdXIgPSBjdXJbIGRpciBd
OwotICAgIH0gd2hpbGUgKCBjdXIgJiYgY3VyLm5vZGVUeXBlICE9PSAxICk7Ci0KLSAgICByZXR1
cm4gY3VyOwotfQotCi1qUXVlcnkuZWFjaCh7Ci0gICAgcGFyZW50OiBmdW5jdGlvbiggZWxlbSAp
IHsKLSAgICB2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlOwotICAgIHJldHVybiBwYXJlbnQg
JiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51bGw7Ci0gICAgfSwKLSAgICBw
YXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwg
InBhcmVudE5vZGUiICk7Ci0gICAgfSwKLSAgICBwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVt
LCBpLCB1bnRpbCApIHsKLSAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgInBhcmVudE5vZGUi
LCB1bnRpbCApOwotICAgIH0sCi0gICAgbmV4dDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgcmV0
dXJuIHNpYmxpbmcoIGVsZW0sICJuZXh0U2libGluZyIgKTsKLSAgICB9LAotICAgIHByZXY6IGZ1
bmN0aW9uKCBlbGVtICkgewotICAgIHJldHVybiBzaWJsaW5nKCBlbGVtLCAicHJldmlvdXNTaWJs
aW5nIiApOwotICAgIH0sCi0gICAgbmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgcmV0
dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJuZXh0U2libGluZyIgKTsKLSAgICB9LAotICAgIHByZXZB
bGw6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAicHJl
dmlvdXNTaWJsaW5nIiApOwotICAgIH0sCi0gICAgbmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwg
aSwgdW50aWwgKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJuZXh0U2libGluZyIs
IHVudGlsICk7Ci0gICAgfSwKLSAgICBwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRp
bCApIHsKLSAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgInByZXZpb3VzU2libGluZyIsIHVu
dGlsICk7Ci0gICAgfSwKLSAgICBzaWJsaW5nczogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgcmV0
dXJuIGpRdWVyeS5zaWJsaW5nKCAoIGVsZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZpcnN0Q2hpbGQs
IGVsZW0gKTsKLSAgICB9LAotICAgIGNoaWxkcmVuOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICBy
ZXR1cm4galF1ZXJ5LnNpYmxpbmcoIGVsZW0uZmlyc3RDaGlsZCApOwotICAgIH0sCi0gICAgY29u
dGVudHM6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHJldHVybiBqUXVlcnkubm9kZU5hbWUoIGVs
ZW0sICJpZnJhbWUiICkgPwotICAgIGVsZW0uY29udGVudERvY3VtZW50IHx8IGVsZW0uY29udGVu
dFdpbmRvdy5kb2N1bWVudCA6Ci0gICAgalF1ZXJ5Lm1lcmdlKCBbXSwgZWxlbS5jaGlsZE5vZGVz
ICk7Ci0gICAgfQotfSwgZnVuY3Rpb24oIG5hbWUsIGZuICkgewotICAgIGpRdWVyeS5mblsgbmFt
ZSBdID0gZnVuY3Rpb24oIHVudGlsLCBzZWxlY3RvciApIHsKLSAgICB2YXIgcmV0ID0galF1ZXJ5
Lm1hcCggdGhpcywgZm4sIHVudGlsICk7Ci0KLSAgICBpZiAoICFydW50aWwudGVzdCggbmFtZSAp
ICkgewotICAgIHNlbGVjdG9yID0gdW50aWw7Ci0gICAgfQotCi0gICAgaWYgKCBzZWxlY3RvciAm
JiB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciICkgewotICAgIHJldCA9IGpRdWVyeS5maWx0
ZXIoIHNlbGVjdG9yLCByZXQgKTsKLSAgICB9Ci0KLSAgICByZXQgPSB0aGlzLmxlbmd0aCA+IDEg
JiYgIWd1YXJhbnRlZWRVbmlxdWVbIG5hbWUgXSA/IGpRdWVyeS51bmlxdWUoIHJldCApIDogcmV0
OwotCi0gICAgaWYgKCB0aGlzLmxlbmd0aCA+IDEgJiYgcnBhcmVudHNwcmV2LnRlc3QoIG5hbWUg
KSApIHsKLSAgICByZXQgPSByZXQucmV2ZXJzZSgpOwotICAgIH0KLQotICAgIHJldHVybiB0aGlz
LnB1c2hTdGFjayggcmV0ICk7Ci0gICAgfTsKLX0pOwotCi1qUXVlcnkuZXh0ZW5kKHsKLSAgICBm
aWx0ZXI6IGZ1bmN0aW9uKCBleHByLCBlbGVtcywgbm90ICkgewotICAgIGlmICggbm90ICkgewot
ICAgIGV4cHIgPSAiOm5vdCgiICsgZXhwciArICIpIjsKLSAgICB9Ci0KLSAgICByZXR1cm4gZWxl
bXMubGVuZ3RoID09PSAxID8KLSAgICBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoZWxlbXNb
MF0sIGV4cHIpID8gWyBlbGVtc1swXSBdIDogW10gOgotICAgIGpRdWVyeS5maW5kLm1hdGNoZXMo
ZXhwciwgZWxlbXMpOwotICAgIH0sCi0KLSAgICBkaXI6IGZ1bmN0aW9uKCBlbGVtLCBkaXIsIHVu
dGlsICkgewotICAgIHZhciBtYXRjaGVkID0gW10sCi0gICAgY3VyID0gZWxlbVsgZGlyIF07Ci0K
LSAgICB3aGlsZSAoIGN1ciAmJiBjdXIubm9kZVR5cGUgIT09IDkgJiYgKHVudGlsID09PSB1bmRl
ZmluZWQgfHwgY3VyLm5vZGVUeXBlICE9PSAxIHx8ICFqUXVlcnkoIGN1ciApLmlzKCB1bnRpbCAp
KSApIHsKLSAgICBpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSApIHsKLSAgICBtYXRjaGVkLnB1c2go
IGN1ciApOwotICAgIH0KLSAgICBjdXIgPSBjdXJbZGlyXTsKLSAgICB9Ci0gICAgcmV0dXJuIG1h
dGNoZWQ7Ci0gICAgfSwKLQotICAgIHNpYmxpbmc6IGZ1bmN0aW9uKCBuLCBlbGVtICkgewotICAg
IHZhciByID0gW107Ci0KLSAgICBmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkgewotICAg
IGlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkgewotICAgIHIucHVzaCggbiAp
OwotICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcjsKLSAgICB9Ci19KTsKLQotLy8gSW1wbGVt
ZW50IHRoZSBpZGVudGljYWwgZnVuY3Rpb25hbGl0eSBmb3IgZmlsdGVyIGFuZCBub3QKLWZ1bmN0
aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxpZmllciwga2VlcCApIHsKLQotICAgIC8vIENhbid0
IHBhc3MgbnVsbCBvciB1bmRlZmluZWQgdG8gaW5kZXhPZiBpbiBGaXJlZm94IDQKLSAgICAvLyBT
ZXQgdG8gMCB0byBza2lwIHN0cmluZyBjaGVjawotICAgIHF1YWxpZmllciA9IHF1YWxpZmllciB8
fCAwOwotCi0gICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcXVhbGlmaWVyICkgKSB7Ci0gICAg
cmV0dXJuIGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKLSAgICB2
YXIgcmV0VmFsID0gISFxdWFsaWZpZXIuY2FsbCggZWxlbSwgaSwgZWxlbSApOwotICAgIHJldHVy
biByZXRWYWwgPT09IGtlZXA7Ci0gICAgfSk7Ci0KLSAgICB9IGVsc2UgaWYgKCBxdWFsaWZpZXIu
bm9kZVR5cGUgKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbigg
ZWxlbSApIHsKLSAgICByZXR1cm4gKCBlbGVtID09PSBxdWFsaWZpZXIgKSA9PT0ga2VlcDsKLSAg
ICB9KTsKLQotICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBxdWFsaWZpZXIgPT09ICJzdHJpbmciICkg
ewotICAgIHZhciBmaWx0ZXJlZCA9IGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiggZWxl
bSApIHsKLSAgICByZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTsKLSAgICB9KTsKLQotICAgIGlm
ICggaXNTaW1wbGUudGVzdCggcXVhbGlmaWVyICkgKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5maWx0
ZXIocXVhbGlmaWVyLCBmaWx0ZXJlZCwgIWtlZXApOwotICAgIH0gZWxzZSB7Ci0gICAgcXVhbGlm
aWVyID0galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBmaWx0ZXJlZCApOwotICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4galF1ZXJ5LmdyZXAoZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgewot
ICAgIHJldHVybiAoIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBxdWFsaWZpZXIgKSA+PSAwICkgPT09
IGtlZXA7Ci0gICAgfSk7Ci19Ci1mdW5jdGlvbiBjcmVhdGVTYWZlRnJhZ21lbnQoIGRvY3VtZW50
ICkgewotICAgIHZhciBsaXN0ID0gbm9kZU5hbWVzLnNwbGl0KCAifCIgKSwKLSAgICBzYWZlRnJh
ZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLQotICAgIGlmICggc2FmZUZy
YWcuY3JlYXRlRWxlbWVudCApIHsKLSAgICB3aGlsZSAoIGxpc3QubGVuZ3RoICkgewotICAgIHNh
ZmVGcmFnLmNyZWF0ZUVsZW1lbnQoCi0gICAgbGlzdC5wb3AoKQotICAgICk7Ci0gICAgfQotICAg
IH0KLSAgICByZXR1cm4gc2FmZUZyYWc7Ci19Ci0KLXZhciBub2RlTmFtZXMgPSAiYWJicnxhcnRp
Y2xlfGFzaWRlfGF1ZGlvfGJkaXxjYW52YXN8ZGF0YXxkYXRhbGlzdHxkZXRhaWxzfGZpZ2NhcHRp
b258ZmlndXJlfGZvb3RlcnwiICsKLSAgICAiaGVhZGVyfGhncm91cHxtYXJrfG1ldGVyfG5hdnxv
dXRwdXR8cHJvZ3Jlc3N8c2VjdGlvbnxzdW1tYXJ5fHRpbWV8dmlkZW8iLAotICAgIHJpbmxpbmVq
UXVlcnkgPSAvIGpRdWVyeVxkKz0iKD86bnVsbHxcZCspIi9nLAotICAgIHJub3NoaW1jYWNoZSA9
IG5ldyBSZWdFeHAoIjwoPzoiICsgbm9kZU5hbWVzICsgIilbXFxzLz5dIiwgImkiKSwKLSAgICBy
bGVhZGluZ1doaXRlc3BhY2UgPSAvXlxzKy8sCi0gICAgcnhodG1sVGFnID0gLzwoPyFhcmVhfGJy
fGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Ol0rKVtePl0qKVwv
Pi9naSwKLSAgICBydGFnTmFtZSA9IC88KFtcdzpdKykvLAotICAgIHJ0Ym9keSA9IC88dGJvZHkv
aSwKLSAgICByaHRtbCA9IC88fCYjP1x3KzsvLAotICAgIHJub0lubmVyaHRtbCA9IC88KD86c2Ny
aXB0fHN0eWxlfGxpbmspL2ksCi0gICAgbWFuaXB1bGF0aW9uX3JjaGVja2FibGVUeXBlID0gL14o
PzpjaGVja2JveHxyYWRpbykkL2ksCi0gICAgLy8gY2hlY2tlZD0iY2hlY2tlZCIgb3IgY2hlY2tl
ZAotICAgIHJjaGVja2VkID0gL2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksCi0g
ICAgcnNjcmlwdFR5cGUgPSAvXiR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ksCi0gICAgcnNjcmlw
dFR5cGVNYXNrZWQgPSAvXnRydWVcLyguKikvLAotICAgIHJjbGVhblNjcmlwdCA9IC9eXHMqPCEo
PzpcW0NEQVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZywKLQotICAgIC8vIFdlIGhhdmUgdG8g
Y2xvc2UgdGhlc2UgdGFncyB0byBzdXBwb3J0IFhIVE1MICgjMTMyMDApCi0gICAgd3JhcE1hcCA9
IHsKLSAgICBvcHRpb246IFsgMSwgIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCAiPC9z
ZWxlY3Q+IiBdLAotICAgIGxlZ2VuZDogWyAxLCAiPGZpZWxkc2V0PiIsICI8L2ZpZWxkc2V0PiIg
XSwKLSAgICBhcmVhOiBbIDEsICI8bWFwPiIsICI8L21hcD4iIF0sCi0gICAgcGFyYW06IFsgMSwg
IjxvYmplY3Q+IiwgIjwvb2JqZWN0PiIgXSwKLSAgICB0aGVhZDogWyAxLCAiPHRhYmxlPiIsICI8
L3RhYmxlPiIgXSwKLSAgICB0cjogWyAyLCAiPHRhYmxlPjx0Ym9keT4iLCAiPC90Ym9keT48L3Rh
YmxlPiIgXSwKLSAgICBjb2w6IFsgMiwgIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+
IiwgIjwvY29sZ3JvdXA+PC90YWJsZT4iIF0sCi0gICAgdGQ6IFsgMywgIjx0YWJsZT48dGJvZHk+
PHRyPiIsICI8L3RyPjwvdGJvZHk+PC90YWJsZT4iIF0sCi0KLSAgICAvLyBJRTYtOCBjYW4ndCBz
ZXJpYWxpemUgbGluaywgc2NyaXB0LCBzdHlsZSwgb3IgYW55IGh0bWw1IChOb1Njb3BlKSB0YWdz
LAotICAgIC8vIHVubGVzcyB3cmFwcGVkIGluIGEgZGl2IHdpdGggbm9uLWJyZWFraW5nIGNoYXJh
Y3RlcnMgaW4gZnJvbnQgb2YgaXQuCi0gICAgX2RlZmF1bHQ6IGpRdWVyeS5zdXBwb3J0Lmh0bWxT
ZXJpYWxpemUgPyBbIDAsICIiLCAiIiBdIDogWyAxLCAiWDxkaXY+IiwgIjwvZGl2PiIgIF0KLSAg
ICB9LAotICAgIHNhZmVGcmFnbWVudCA9IGNyZWF0ZVNhZmVGcmFnbWVudCggZG9jdW1lbnQgKSwK
LSAgICBmcmFnbWVudERpdiA9IHNhZmVGcmFnbWVudC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2IikgKTsKLQotd3JhcE1hcC5vcHRncm91cCA9IHdyYXBNYXAub3B0aW9u
Owotd3JhcE1hcC50Ym9keSA9IHdyYXBNYXAudGZvb3QgPSB3cmFwTWFwLmNvbGdyb3VwID0gd3Jh
cE1hcC5jYXB0aW9uID0gd3JhcE1hcC50aGVhZDsKLXdyYXBNYXAudGggPSB3cmFwTWFwLnRkOwot
Ci1qUXVlcnkuZm4uZXh0ZW5kKHsKLSAgICB0ZXh0OiBmdW5jdGlvbiggdmFsdWUgKSB7Ci0gICAg
cmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAgICByZXR1
cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/Ci0gICAgalF1ZXJ5LnRleHQoIHRoaXMgKSA6Ci0gICAg
dGhpcy5lbXB0eSgpLmFwcGVuZCggKCB0aGlzWzBdICYmIHRoaXNbMF0ub3duZXJEb2N1bWVudCB8
fCBkb2N1bWVudCApLmNyZWF0ZVRleHROb2RlKCB2YWx1ZSApICk7Ci0gICAgfSwgbnVsbCwgdmFs
dWUsIGFyZ3VtZW50cy5sZW5ndGggKTsKLSAgICB9LAotCi0gICAgd3JhcEFsbDogZnVuY3Rpb24o
IGh0bWwgKSB7Ci0gICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApICkgewotICAgIHJl
dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSkgewotICAgIGpRdWVyeSh0aGlzKS53cmFwQWxsKCBo
dG1sLmNhbGwodGhpcywgaSkgKTsKLSAgICB9KTsKLSAgICB9Ci0KLSAgICBpZiAoIHRoaXNbMF0g
KSB7Ci0gICAgLy8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmQKLSAgICB2
YXIgd3JhcCA9IGpRdWVyeSggaHRtbCwgdGhpc1swXS5vd25lckRvY3VtZW50ICkuZXEoMCkuY2xv
bmUodHJ1ZSk7Ci0KLSAgICBpZiAoIHRoaXNbMF0ucGFyZW50Tm9kZSApIHsKLSAgICB3cmFwLmlu
c2VydEJlZm9yZSggdGhpc1swXSApOwotICAgIH0KLQotICAgIHdyYXAubWFwKGZ1bmN0aW9uKCkg
ewotICAgIHZhciBlbGVtID0gdGhpczsKLQotICAgIHdoaWxlICggZWxlbS5maXJzdENoaWxkICYm
IGVsZW0uZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gMSApIHsKLSAgICBlbGVtID0gZWxlbS5maXJz
dENoaWxkOwotICAgIH0KLQotICAgIHJldHVybiBlbGVtOwotICAgIH0pLmFwcGVuZCggdGhpcyAp
OwotICAgIH0KLQotICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0KLSAgICB3cmFwSW5uZXI6IGZ1
bmN0aW9uKCBodG1sICkgewotICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKSApIHsK
LSAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKLSAgICBqUXVlcnkodGhpcykud3Jh
cElubmVyKCBodG1sLmNhbGwodGhpcywgaSkgKTsKLSAgICB9KTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgIHZhciBzZWxmID0galF1ZXJ5KCB0aGlzICks
Ci0gICAgY29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7Ci0KLSAgICBpZiAoIGNvbnRlbnRzLmxl
bmd0aCApIHsKLSAgICBjb250ZW50cy53cmFwQWxsKCBodG1sICk7Ci0KLSAgICB9IGVsc2Ugewot
ICAgIHNlbGYuYXBwZW5kKCBodG1sICk7Ci0gICAgfQotICAgIH0pOwotICAgIH0sCi0KLSAgICB3
cmFwOiBmdW5jdGlvbiggaHRtbCApIHsKLSAgICB2YXIgaXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1
bmN0aW9uKCBodG1sICk7Ci0KLSAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKLSAg
ICBqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBpc0Z1bmN0aW9uID8gaHRtbC5jYWxsKHRoaXMsIGkp
IDogaHRtbCApOwotICAgIH0pOwotICAgIH0sCi0KLSAgICB1bndyYXA6IGZ1bmN0aW9uKCkgewot
ICAgIHJldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCAhalF1
ZXJ5Lm5vZGVOYW1lKCB0aGlzLCAiYm9keSIgKSApIHsKLSAgICBqUXVlcnkoIHRoaXMgKS5yZXBs
YWNlV2l0aCggdGhpcy5jaGlsZE5vZGVzICk7Ci0gICAgfQotICAgIH0pLmVuZCgpOwotICAgIH0s
Ci0KLSAgICBhcHBlbmQ6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmRvbU1hbmlwKGFy
Z3VtZW50cywgdHJ1ZSwgZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgaWYgKCB0aGlzLm5vZGVUeXBl
ID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7
Ci0gICAgdGhpcy5hcHBlbmRDaGlsZCggZWxlbSApOwotICAgIH0KLSAgICB9KTsKLSAgICB9LAot
Ci0gICAgcHJlcGVuZDogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJn
dW1lbnRzLCB0cnVlLCBmdW5jdGlvbiggZWxlbSApIHsKLSAgICBpZiAoIHRoaXMubm9kZVR5cGUg
PT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHsK
LSAgICB0aGlzLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5maXJzdENoaWxkICk7Ci0gICAgfQot
ICAgIH0pOwotICAgIH0sCi0KLSAgICBiZWZvcmU6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0
aGlzLmRvbU1hbmlwKCBhcmd1bWVudHMsIGZhbHNlLCBmdW5jdGlvbiggZWxlbSApIHsKLSAgICBp
ZiAoIHRoaXMucGFyZW50Tm9kZSApIHsKLSAgICB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3Jl
KCBlbGVtLCB0aGlzICk7Ci0gICAgfQotICAgIH0pOwotICAgIH0sCi0KLSAgICBhZnRlcjogZnVu
Y3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuZG9tTWFuaXAoIGFyZ3VtZW50cywgZmFsc2UsIGZ1
bmN0aW9uKCBlbGVtICkgewotICAgIGlmICggdGhpcy5wYXJlbnROb2RlICkgewotICAgIHRoaXMu
cGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTsKLSAgICB9
Ci0gICAgfSk7Ci0gICAgfSwKLQotICAgIC8vIGtlZXBEYXRhIGlzIGZvciBpbnRlcm5hbCB1c2Ug
b25seS0tZG8gbm90IGRvY3VtZW50Ci0gICAgcmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IsIGtl
ZXBEYXRhICkgewotICAgIHZhciBlbGVtLAotICAgIGkgPSAwOwotCi0gICAgZm9yICggOyAoZWxl
bSA9IHRoaXNbaV0pICE9IG51bGw7IGkrKyApIHsKLSAgICBpZiAoICFzZWxlY3RvciB8fCBqUXVl
cnkuZmlsdGVyKCBzZWxlY3RvciwgWyBlbGVtIF0gKS5sZW5ndGggPiAwICkgewotICAgIGlmICgg
IWtlZXBEYXRhICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0gICAgalF1ZXJ5LmNsZWFuRGF0
YSggZ2V0QWxsKCBlbGVtICkgKTsKLSAgICB9Ci0KLSAgICBpZiAoIGVsZW0ucGFyZW50Tm9kZSAp
IHsKLSAgICBpZiAoIGtlZXBEYXRhICYmIGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3Vt
ZW50LCBlbGVtICkgKSB7Ci0gICAgc2V0R2xvYmFsRXZhbCggZ2V0QWxsKCBlbGVtLCAic2NyaXB0
IiApICk7Ci0gICAgfQotICAgIGVsZW0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZWxlbSApOwot
ICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLQotICAgIGVt
cHR5OiBmdW5jdGlvbigpIHsKLSAgICB2YXIgZWxlbSwKLSAgICBpID0gMDsKLQotICAgIGZvciAo
IDsgKGVsZW0gPSB0aGlzW2ldKSAhPSBudWxsOyBpKysgKSB7Ci0gICAgLy8gUmVtb3ZlIGVsZW1l
bnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzCi0gICAgaWYgKCBlbGVtLm5vZGVUeXBl
ID09PSAxICkgewotICAgIGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSAp
OwotICAgIH0KLQotICAgIC8vIFJlbW92ZSBhbnkgcmVtYWluaW5nIG5vZGVzCi0gICAgd2hpbGUg
KCBlbGVtLmZpcnN0Q2hpbGQgKSB7Ci0gICAgZWxlbS5yZW1vdmVDaGlsZCggZWxlbS5maXJzdENo
aWxkICk7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhpcyBpcyBhIHNlbGVjdCwgZW5zdXJlIHRoYXQg
aXQgZGlzcGxheXMgZW1wdHkgKCMxMjMzNikKLSAgICAvLyBTdXBwb3J0OiBJRTw5Ci0gICAgaWYg
KCBlbGVtLm9wdGlvbnMgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAic2VsZWN0IiApICkgewot
ICAgIGVsZW0ub3B0aW9ucy5sZW5ndGggPSAwOwotICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
dGhpczsKLSAgICB9LAotCi0gICAgY2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVw
RGF0YUFuZEV2ZW50cyApIHsKLSAgICBkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBu
dWxsID8gZmFsc2UgOiBkYXRhQW5kRXZlbnRzOwotICAgIGRlZXBEYXRhQW5kRXZlbnRzID0gZGVl
cERhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGRhdGFBbmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2ZW50
czsKLQotICAgIHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24gKCkgewotICAgIHJldHVybiBqUXVl
cnkuY2xvbmUoIHRoaXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7Ci0gICAg
fSk7Ci0gICAgfSwKLQotICAgIGh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAgICByZXR1cm4g
alF1ZXJ5LmFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkgewotICAgIHZhciBlbGVtID0g
dGhpc1swXSB8fCB7fSwKLSAgICBpID0gMCwKLSAgICBsID0gdGhpcy5sZW5ndGg7Ci0KLSAgICBp
ZiAoIHZhbHVlID09PSB1bmRlZmluZWQgKSB7Ci0gICAgcmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09
IDEgPwotICAgIGVsZW0uaW5uZXJIVE1MLnJlcGxhY2UoIHJpbmxpbmVqUXVlcnksICIiICkgOgot
ICAgIHVuZGVmaW5lZDsKLSAgICB9Ci0KLSAgICAvLyBTZWUgaWYgd2UgY2FuIHRha2UgYSBzaG9y
dGN1dCBhbmQganVzdCB1c2UgaW5uZXJIVE1MCi0gICAgaWYgKCB0eXBlb2YgdmFsdWUgPT09ICJz
dHJpbmciICYmICFybm9Jbm5lcmh0bWwudGVzdCggdmFsdWUgKSAmJgotICAgICggalF1ZXJ5LnN1
cHBvcnQuaHRtbFNlcmlhbGl6ZSB8fCAhcm5vc2hpbWNhY2hlLnRlc3QoIHZhbHVlICkgICkgJiYK
LSAgICAoIGpRdWVyeS5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlIHx8ICFybGVhZGluZ1doaXRl
c3BhY2UudGVzdCggdmFsdWUgKSApICYmCi0gICAgIXdyYXBNYXBbICggcnRhZ05hbWUuZXhlYygg
dmFsdWUgKSB8fCBbIiIsICIiXSApWzFdLnRvTG93ZXJDYXNlKCkgXSApIHsKLQotICAgIHZhbHVl
ID0gdmFsdWUucmVwbGFjZSggcnhodG1sVGFnLCAiPCQxPjwvJDI+IiApOwotCi0gICAgdHJ5IHsK
LSAgICBmb3IgKDsgaSA8IGw7IGkrKyApIHsKLSAgICAvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBh
bmQgcHJldmVudCBtZW1vcnkgbGVha3MKLSAgICBlbGVtID0gdGhpc1tpXSB8fCB7fTsKLSAgICBp
ZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0gICAgalF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxs
KCBlbGVtLCBmYWxzZSApICk7Ci0gICAgZWxlbS5pbm5lckhUTUwgPSB2YWx1ZTsKLSAgICB9Ci0g
ICAgfQotCi0gICAgZWxlbSA9IDA7Ci0KLSAgICAvLyBJZiB1c2luZyBpbm5lckhUTUwgdGhyb3dz
IGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2QKLSAgICB9IGNhdGNoKGUpIHt9
Ci0gICAgfQotCi0gICAgaWYgKCBlbGVtICkgewotICAgIHRoaXMuZW1wdHkoKS5hcHBlbmQoIHZh
bHVlICk7Ci0gICAgfQotICAgIH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7Ci0g
ICAgfSwKLQotICAgIHJlcGxhY2VXaXRoOiBmdW5jdGlvbiggdmFsdWUgKSB7Ci0gICAgdmFyIGlz
RnVuYyA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApOwotCi0gICAgLy8gTWFrZSBzdXJlIHRo
YXQgdGhlIGVsZW1lbnRzIGFyZSByZW1vdmVkIGZyb20gdGhlIERPTSBiZWZvcmUgdGhleSBhcmUg
aW5zZXJ0ZWQKLSAgICAvLyB0aGlzIGNhbiBoZWxwIGZpeCByZXBsYWNpbmcgYSBwYXJlbnQgd2l0
aCBjaGlsZCBlbGVtZW50cwotICAgIGlmICggIWlzRnVuYyAmJiB0eXBlb2YgdmFsdWUgIT09ICJz
dHJpbmciICkgewotICAgIHZhbHVlID0galF1ZXJ5KCB2YWx1ZSApLm5vdCggdGhpcyApLmRldGFj
aCgpOwotICAgIH0KLQotICAgIHJldHVybiB0aGlzLmRvbU1hbmlwKCBbIHZhbHVlIF0sIHRydWUs
IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHZhciBuZXh0ID0gdGhpcy5uZXh0U2libGluZywKLSAg
ICBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7Ci0KLSAgICBpZiAoIHBhcmVudCApIHsKLSAgICBq
UXVlcnkoIHRoaXMgKS5yZW1vdmUoKTsKLSAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKCBlbGVtLCBu
ZXh0ICk7Ci0gICAgfQotICAgIH0pOwotICAgIH0sCi0KLSAgICBkZXRhY2g6IGZ1bmN0aW9uKCBz
ZWxlY3RvciApIHsKLSAgICByZXR1cm4gdGhpcy5yZW1vdmUoIHNlbGVjdG9yLCB0cnVlICk7Ci0g
ICAgfSwKLQotICAgIGRvbU1hbmlwOiBmdW5jdGlvbiggYXJncywgdGFibGUsIGNhbGxiYWNrICkg
ewotCi0gICAgLy8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5cwotICAgIGFyZ3MgPSBjb3JlX2Nv
bmNhdC5hcHBseSggW10sIGFyZ3MgKTsKLQotICAgIHZhciBmaXJzdCwgbm9kZSwgaGFzU2NyaXB0
cywKLSAgICBzY3JpcHRzLCBkb2MsIGZyYWdtZW50LAotICAgIGkgPSAwLAotICAgIGwgPSB0aGlz
Lmxlbmd0aCwKLSAgICBzZXQgPSB0aGlzLAotICAgIGlOb0Nsb25lID0gbCAtIDEsCi0gICAgdmFs
dWUgPSBhcmdzWzBdLAotICAgIGlzRnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUg
KTsKLQotICAgIC8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250YWluIGNo
ZWNrZWQsIGluIFdlYktpdAotICAgIGlmICggaXNGdW5jdGlvbiB8fCAhKCBsIDw9IDEgfHwgdHlw
ZW9mIHZhbHVlICE9PSAic3RyaW5nIiB8fCBqUXVlcnkuc3VwcG9ydC5jaGVja0Nsb25lIHx8ICFy
Y2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgKSB7Ci0gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlv
biggaW5kZXggKSB7Ci0gICAgdmFyIHNlbGYgPSBzZXQuZXEoIGluZGV4ICk7Ci0gICAgaWYgKCBp
c0Z1bmN0aW9uICkgewotICAgIGFyZ3NbMF0gPSB2YWx1ZS5jYWxsKCB0aGlzLCBpbmRleCwgdGFi
bGUgPyBzZWxmLmh0bWwoKSA6IHVuZGVmaW5lZCApOwotICAgIH0KLSAgICBzZWxmLmRvbU1hbmlw
KCBhcmdzLCB0YWJsZSwgY2FsbGJhY2sgKTsKLSAgICB9KTsKLSAgICB9Ci0KLSAgICBpZiAoIGwg
KSB7Ci0gICAgZnJhZ21lbnQgPSBqUXVlcnkuYnVpbGRGcmFnbWVudCggYXJncywgdGhpc1sgMCBd
Lm93bmVyRG9jdW1lbnQsIGZhbHNlLCB0aGlzICk7Ci0gICAgZmlyc3QgPSBmcmFnbWVudC5maXJz
dENoaWxkOwotCi0gICAgaWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSApIHsK
LSAgICBmcmFnbWVudCA9IGZpcnN0OwotICAgIH0KLQotICAgIGlmICggZmlyc3QgKSB7Ci0gICAg
dGFibGUgPSB0YWJsZSAmJiBqUXVlcnkubm9kZU5hbWUoIGZpcnN0LCAidHIiICk7Ci0gICAgc2Ny
aXB0cyA9IGpRdWVyeS5tYXAoIGdldEFsbCggZnJhZ21lbnQsICJzY3JpcHQiICksIGRpc2FibGVT
Y3JpcHQgKTsKLSAgICBoYXNTY3JpcHRzID0gc2NyaXB0cy5sZW5ndGg7Ci0KLSAgICAvLyBVc2Ug
dGhlIG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtIGluc3RlYWQgb2YgdGhlIGZp
cnN0IGJlY2F1c2UgaXQgY2FuIGVuZCB1cAotICAgIC8vIGJlaW5nIGVtcHRpZWQgaW5jb3JyZWN0
bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICgjODA3MCkuCi0gICAgZm9yICggOyBpIDwgbDsgaSsr
ICkgewotICAgIG5vZGUgPSBmcmFnbWVudDsKLQotICAgIGlmICggaSAhPT0gaU5vQ2xvbmUgKSB7
Ci0gICAgbm9kZSA9IGpRdWVyeS5jbG9uZSggbm9kZSwgdHJ1ZSwgdHJ1ZSApOwotCi0gICAgLy8g
S2VlcCByZWZlcmVuY2VzIHRvIGNsb25lZCBzY3JpcHRzIGZvciBsYXRlciByZXN0b3JhdGlvbgot
ICAgIGlmICggaGFzU2NyaXB0cyApIHsKLSAgICBqUXVlcnkubWVyZ2UoIHNjcmlwdHMsIGdldEFs
bCggbm9kZSwgInNjcmlwdCIgKSApOwotICAgIH0KLSAgICB9Ci0KLSAgICBjYWxsYmFjay5jYWxs
KAotICAgIHRhYmxlICYmIGpRdWVyeS5ub2RlTmFtZSggdGhpc1tpXSwgInRhYmxlIiApID8KLSAg
ICBmaW5kT3JBcHBlbmQoIHRoaXNbaV0sICJ0Ym9keSIgKSA6Ci0gICAgdGhpc1tpXSwKLSAgICBu
b2RlLAotICAgIGkKLSAgICApOwotICAgIH0KLQotICAgIGlmICggaGFzU2NyaXB0cyApIHsKLSAg
ICBkb2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0aCAtIDEgXS5vd25lckRvY3VtZW50OwotCi0g
ICAgLy8gUmVlbmFibGUgc2NyaXB0cwotICAgIGpRdWVyeS5tYXAoIHNjcmlwdHMsIHJlc3RvcmVT
Y3JpcHQgKTsKLQotICAgIC8vIEV2YWx1YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBmaXJzdCBk
b2N1bWVudCBpbnNlcnRpb24KLSAgICBmb3IgKCBpID0gMDsgaSA8IGhhc1NjcmlwdHM7IGkrKyAp
IHsKLSAgICBub2RlID0gc2NyaXB0c1sgaSBdOwotICAgIGlmICggcnNjcmlwdFR5cGUudGVzdCgg
bm9kZS50eXBlIHx8ICIiICkgJiYKLSAgICAhalF1ZXJ5Ll9kYXRhKCBub2RlLCAiZ2xvYmFsRXZh
bCIgKSAmJiBqUXVlcnkuY29udGFpbnMoIGRvYywgbm9kZSApICkgewotCi0gICAgaWYgKCBub2Rl
LnNyYyApIHsKLSAgICAvLyBIb3BlIGFqYXggaXMgYXZhaWxhYmxlLi4uCi0gICAgalF1ZXJ5LmFq
YXgoewotICAgIHVybDogbm9kZS5zcmMsCi0gICAgdHlwZTogIkdFVCIsCi0gICAgZGF0YVR5cGU6
ICJzY3JpcHQiLAotICAgIGFzeW5jOiBmYWxzZSwKLSAgICBnbG9iYWw6IGZhbHNlLAotICAgICJ0
aHJvd3MiOiB0cnVlCi0gICAgfSk7Ci0gICAgfSBlbHNlIHsKLSAgICBqUXVlcnkuZ2xvYmFsRXZh
bCggKCBub2RlLnRleHQgfHwgbm9kZS50ZXh0Q29udGVudCB8fCBub2RlLmlubmVySFRNTCB8fCAi
IiApLnJlcGxhY2UoIHJjbGVhblNjcmlwdCwgIiIgKSApOwotICAgIH0KLSAgICB9Ci0gICAgfQot
ICAgIH0KLQotICAgIC8vIEZpeCAjMTE4MDk6IEF2b2lkIGxlYWtpbmcgbWVtb3J5Ci0gICAgZnJh
Z21lbnQgPSBmaXJzdCA9IG51bGw7Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiB0aGlzOwot
ICAgIH0KLX0pOwotCi1mdW5jdGlvbiBmaW5kT3JBcHBlbmQoIGVsZW0sIHRhZyApIHsKLSAgICBy
ZXR1cm4gZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnIClbMF0gfHwgZWxlbS5hcHBlbmRD
aGlsZCggZWxlbS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIHRhZyApICk7Ci19Ci0KLS8v
IFJlcGxhY2UvcmVzdG9yZSB0aGUgdHlwZSBhdHRyaWJ1dGUgb2Ygc2NyaXB0IGVsZW1lbnRzIGZv
ciBzYWZlIERPTSBtYW5pcHVsYXRpb24KLWZ1bmN0aW9uIGRpc2FibGVTY3JpcHQoIGVsZW0gKSB7
Ci0gICAgdmFyIGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoInR5cGUiKTsKLSAgICBlbGVt
LnR5cGUgPSAoIGF0dHIgJiYgYXR0ci5zcGVjaWZpZWQgKSArICIvIiArIGVsZW0udHlwZTsKLSAg
ICByZXR1cm4gZWxlbTsKLX0KLWZ1bmN0aW9uIHJlc3RvcmVTY3JpcHQoIGVsZW0gKSB7Ci0gICAg
dmFyIG1hdGNoID0gcnNjcmlwdFR5cGVNYXNrZWQuZXhlYyggZWxlbS50eXBlICk7Ci0gICAgaWYg
KCBtYXRjaCApIHsKLSAgICBlbGVtLnR5cGUgPSBtYXRjaFsxXTsKLSAgICB9IGVsc2UgewotICAg
IGVsZW0ucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIik7Ci0gICAgfQotICAgIHJldHVybiBlbGVtOwot
fQotCi0vLyBNYXJrIHNjcmlwdHMgYXMgaGF2aW5nIGFscmVhZHkgYmVlbiBldmFsdWF0ZWQKLWZ1
bmN0aW9uIHNldEdsb2JhbEV2YWwoIGVsZW1zLCByZWZFbGVtZW50cyApIHsKLSAgICB2YXIgZWxl
bSwKLSAgICBpID0gMDsKLSAgICBmb3IgKCA7IChlbGVtID0gZWxlbXNbaV0pICE9IG51bGw7IGkr
KyApIHsKLSAgICBqUXVlcnkuX2RhdGEoIGVsZW0sICJnbG9iYWxFdmFsIiwgIXJlZkVsZW1lbnRz
IHx8IGpRdWVyeS5fZGF0YSggcmVmRWxlbWVudHNbaV0sICJnbG9iYWxFdmFsIiApICk7Ci0gICAg
fQotfQotCi1mdW5jdGlvbiBjbG9uZUNvcHlFdmVudCggc3JjLCBkZXN0ICkgewotCi0gICAgaWYg
KCBkZXN0Lm5vZGVUeXBlICE9PSAxIHx8ICFqUXVlcnkuaGFzRGF0YSggc3JjICkgKSB7Ci0gICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHZhciB0eXBlLCBpLCBsLAotICAgIG9sZERhdGEgPSBqUXVl
cnkuX2RhdGEoIHNyYyApLAotICAgIGN1ckRhdGEgPSBqUXVlcnkuX2RhdGEoIGRlc3QsIG9sZERh
dGEgKSwKLSAgICBldmVudHMgPSBvbGREYXRhLmV2ZW50czsKLQotICAgIGlmICggZXZlbnRzICkg
ewotICAgIGRlbGV0ZSBjdXJEYXRhLmhhbmRsZTsKLSAgICBjdXJEYXRhLmV2ZW50cyA9IHt9Owot
Ci0gICAgZm9yICggdHlwZSBpbiBldmVudHMgKSB7Ci0gICAgZm9yICggaSA9IDAsIGwgPSBldmVu
dHNbIHR5cGUgXS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7Ci0gICAgalF1ZXJ5LmV2ZW50LmFkZCgg
ZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApOwotICAgIH0KLSAgICB9Ci0gICAgfQot
Ci0gICAgLy8gbWFrZSB0aGUgY2xvbmVkIHB1YmxpYyBkYXRhIG9iamVjdCBhIGNvcHkgZnJvbSB0
aGUgb3JpZ2luYWwKLSAgICBpZiAoIGN1ckRhdGEuZGF0YSApIHsKLSAgICBjdXJEYXRhLmRhdGEg
PSBqUXVlcnkuZXh0ZW5kKCB7fSwgY3VyRGF0YS5kYXRhICk7Ci0gICAgfQotfQotCi1mdW5jdGlv
biBmaXhDbG9uZU5vZGVJc3N1ZXMoIHNyYywgZGVzdCApIHsKLSAgICB2YXIgbm9kZU5hbWUsIGUs
IGRhdGE7Ci0KLSAgICAvLyBXZSBkbyBub3QgbmVlZCB0byBkbyBhbnl0aGluZyBmb3Igbm9uLUVs
ZW1lbnRzCi0gICAgaWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkgewotICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKLQotICAg
IC8vIElFNi04IGNvcGllcyBldmVudHMgYm91bmQgdmlhIGF0dGFjaEV2ZW50IHdoZW4gdXNpbmcg
Y2xvbmVOb2RlLgotICAgIGlmICggIWpRdWVyeS5zdXBwb3J0Lm5vQ2xvbmVFdmVudCAmJiBkZXN0
WyBqUXVlcnkuZXhwYW5kbyBdICkgewotICAgIGRhdGEgPSBqUXVlcnkuX2RhdGEoIGRlc3QgKTsK
LQotICAgIGZvciAoIGUgaW4gZGF0YS5ldmVudHMgKSB7Ci0gICAgalF1ZXJ5LnJlbW92ZUV2ZW50
KCBkZXN0LCBlLCBkYXRhLmhhbmRsZSApOwotICAgIH0KLQotICAgIC8vIEV2ZW50IGRhdGEgZ2V0
cyByZWZlcmVuY2VkIGluc3RlYWQgb2YgY29waWVkIGlmIHRoZSBleHBhbmRvIGdldHMgY29waWVk
IHRvbwotICAgIGRlc3QucmVtb3ZlQXR0cmlidXRlKCBqUXVlcnkuZXhwYW5kbyApOwotICAgIH0K
LQotICAgIC8vIElFIGJsYW5rcyBjb250ZW50cyB3aGVuIGNsb25pbmcgc2NyaXB0cywgYW5kIHRy
aWVzIHRvIGV2YWx1YXRlIG5ld2x5LXNldCB0ZXh0Ci0gICAgaWYgKCBub2RlTmFtZSA9PT0gInNj
cmlwdCIgJiYgZGVzdC50ZXh0ICE9PSBzcmMudGV4dCApIHsKLSAgICBkaXNhYmxlU2NyaXB0KCBk
ZXN0ICkudGV4dCA9IHNyYy50ZXh0OwotICAgIHJlc3RvcmVTY3JpcHQoIGRlc3QgKTsKLQotICAg
IC8vIElFNi0xMCBpbXByb3Blcmx5IGNsb25lcyBjaGlsZHJlbiBvZiBvYmplY3QgZWxlbWVudHMg
dXNpbmcgY2xhc3NpZC4KLSAgICAvLyBJRTEwIHRocm93cyBOb01vZGlmaWNhdGlvbkFsbG93ZWRF
cnJvciBpZiBwYXJlbnQgaXMgbnVsbCwgIzEyMTMyLgotICAgIH0gZWxzZSBpZiAoIG5vZGVOYW1l
ID09PSAib2JqZWN0IiApIHsKLSAgICBpZiAoIGRlc3QucGFyZW50Tm9kZSApIHsKLSAgICBkZXN0
Lm91dGVySFRNTCA9IHNyYy5vdXRlckhUTUw7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBwYXRoIGFw
cGVhcnMgdW5hdm9pZGFibGUgZm9yIElFOS4gV2hlbiBjbG9uaW5nIGFuIG9iamVjdAotICAgIC8v
IGVsZW1lbnQgaW4gSUU5LCB0aGUgb3V0ZXJIVE1MIHN0cmF0ZWd5IGFib3ZlIGlzIG5vdCBzdWZm
aWNpZW50LgotICAgIC8vIElmIHRoZSBzcmMgaGFzIGlubmVySFRNTCBhbmQgdGhlIGRlc3RpbmF0
aW9uIGRvZXMgbm90LAotICAgIC8vIGNvcHkgdGhlIHNyYy5pbm5lckhUTUwgaW50byB0aGUgZGVz
dC5pbm5lckhUTUwuICMxMDMyNAotICAgIGlmICggalF1ZXJ5LnN1cHBvcnQuaHRtbDVDbG9uZSAm
JiAoIHNyYy5pbm5lckhUTUwgJiYgIWpRdWVyeS50cmltKGRlc3QuaW5uZXJIVE1MKSApICkgewot
ICAgIGRlc3QuaW5uZXJIVE1MID0gc3JjLmlubmVySFRNTDsKLSAgICB9Ci0KLSAgICB9IGVsc2Ug
aWYgKCBub2RlTmFtZSA9PT0gImlucHV0IiAmJiBtYW5pcHVsYXRpb25fcmNoZWNrYWJsZVR5cGUu
dGVzdCggc3JjLnR5cGUgKSApIHsKLSAgICAvLyBJRTYtOCBmYWlscyB0byBwZXJzaXN0IHRoZSBj
aGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94Ci0gICAgLy8gb3IgcmFkaW8gYnV0dG9u
LiBXb3JzZSwgSUU2LTcgZmFpbCB0byBnaXZlIHRoZSBjbG9uZWQgZWxlbWVudAotICAgIC8vIGEg
Y2hlY2tlZCBhcHBlYXJhbmNlIGlmIHRoZSBkZWZhdWx0Q2hlY2tlZCB2YWx1ZSBpc24ndCBhbHNv
IHNldAotCi0gICAgZGVzdC5kZWZhdWx0Q2hlY2tlZCA9IGRlc3QuY2hlY2tlZCA9IHNyYy5jaGVj
a2VkOwotCi0gICAgLy8gSUU2LTcgZ2V0IGNvbmZ1c2VkIGFuZCBlbmQgdXAgc2V0dGluZyB0aGUg
dmFsdWUgb2YgYSBjbG9uZWQKLSAgICAvLyBjaGVja2JveC9yYWRpbyBidXR0b24gdG8gYW4gZW1w
dHkgc3RyaW5nIGluc3RlYWQgb2YgIm9uIgotICAgIGlmICggZGVzdC52YWx1ZSAhPT0gc3JjLnZh
bHVlICkgewotICAgIGRlc3QudmFsdWUgPSBzcmMudmFsdWU7Ci0gICAgfQotCi0gICAgLy8gSUU2
LTggZmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2Vs
ZWN0ZWQKLSAgICAvLyBzdGF0ZSB3aGVuIGNsb25pbmcgb3B0aW9ucwotICAgIH0gZWxzZSBpZiAo
IG5vZGVOYW1lID09PSAib3B0aW9uIiApIHsKLSAgICBkZXN0LmRlZmF1bHRTZWxlY3RlZCA9IGRl
c3Quc2VsZWN0ZWQgPSBzcmMuZGVmYXVsdFNlbGVjdGVkOwotCi0gICAgLy8gSUU2LTggZmFpbHMg
dG8gc2V0IHRoZSBkZWZhdWx0VmFsdWUgdG8gdGhlIGNvcnJlY3QgdmFsdWUgd2hlbgotICAgIC8v
IGNsb25pbmcgb3RoZXIgdHlwZXMgb2YgaW5wdXQgZmllbGRzCi0gICAgfSBlbHNlIGlmICggbm9k
ZU5hbWUgPT09ICJpbnB1dCIgfHwgbm9kZU5hbWUgPT09ICJ0ZXh0YXJlYSIgKSB7Ci0gICAgZGVz
dC5kZWZhdWx0VmFsdWUgPSBzcmMuZGVmYXVsdFZhbHVlOwotICAgIH0KLX0KLQotalF1ZXJ5LmVh
Y2goewotICAgIGFwcGVuZFRvOiAiYXBwZW5kIiwKLSAgICBwcmVwZW5kVG86ICJwcmVwZW5kIiwK
LSAgICBpbnNlcnRCZWZvcmU6ICJiZWZvcmUiLAotICAgIGluc2VydEFmdGVyOiAiYWZ0ZXIiLAot
ICAgIHJlcGxhY2VBbGw6ICJyZXBsYWNlV2l0aCIKLX0sIGZ1bmN0aW9uKCBuYW1lLCBvcmlnaW5h
bCApIHsKLSAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLSAg
ICB2YXIgZWxlbXMsCi0gICAgaSA9IDAsCi0gICAgcmV0ID0gW10sCi0gICAgaW5zZXJ0ID0galF1
ZXJ5KCBzZWxlY3RvciApLAotICAgIGxhc3QgPSBpbnNlcnQubGVuZ3RoIC0gMTsKLQotICAgIGZv
ciAoIDsgaSA8PSBsYXN0OyBpKysgKSB7Ci0gICAgZWxlbXMgPSBpID09PSBsYXN0ID8gdGhpcyA6
IHRoaXMuY2xvbmUodHJ1ZSk7Ci0gICAgalF1ZXJ5KCBpbnNlcnRbaV0gKVsgb3JpZ2luYWwgXSgg
ZWxlbXMgKTsKLQotICAgIC8vIE1vZGVybiBicm93c2VycyBjYW4gYXBwbHkgalF1ZXJ5IGNvbGxl
Y3Rpb25zIGFzIGFycmF5cywgYnV0IG9sZElFIG5lZWRzIGEgLmdldCgpCi0gICAgY29yZV9wdXNo
LmFwcGx5KCByZXQsIGVsZW1zLmdldCgpICk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRoaXMucHVz
aFN0YWNrKCByZXQgKTsKLSAgICB9OwotfSk7Ci0KLWZ1bmN0aW9uIGdldEFsbCggY29udGV4dCwg
dGFnICkgewotICAgIHZhciBlbGVtcywgZWxlbSwKLSAgICBpID0gMCwKLSAgICBmb3VuZCA9IHR5
cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBjb3JlX3N0cnVuZGVmaW5lZCA/
IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyB8fCAiKiIgKSA6Ci0gICAgdHlwZW9m
IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCAhPT0gY29yZV9zdHJ1bmRlZmluZWQgPyBjb250ZXh0
LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyB8fCAiKiIgKSA6Ci0gICAgdW5kZWZpbmVkOwotCi0gICAg
aWYgKCAhZm91bmQgKSB7Ci0gICAgZm9yICggZm91bmQgPSBbXSwgZWxlbXMgPSBjb250ZXh0LmNo
aWxkTm9kZXMgfHwgY29udGV4dDsgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkgewot
ICAgIGlmICggIXRhZyB8fCBqUXVlcnkubm9kZU5hbWUoIGVsZW0sIHRhZyApICkgewotICAgIGZv
dW5kLnB1c2goIGVsZW0gKTsKLSAgICB9IGVsc2UgewotICAgIGpRdWVyeS5tZXJnZSggZm91bmQs
IGdldEFsbCggZWxlbSwgdGFnICkgKTsKLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVy
biB0YWcgPT09IHVuZGVmaW5lZCB8fCB0YWcgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBjb250ZXh0LCB0
YWcgKSA/Ci0gICAgalF1ZXJ5Lm1lcmdlKCBbIGNvbnRleHQgXSwgZm91bmQgKSA6Ci0gICAgZm91
bmQ7Ci19Ci0KLS8vIFVzZWQgaW4gYnVpbGRGcmFnbWVudCwgZml4ZXMgdGhlIGRlZmF1bHRDaGVj
a2VkIHByb3BlcnR5Ci1mdW5jdGlvbiBmaXhEZWZhdWx0Q2hlY2tlZCggZWxlbSApIHsKLSAgICBp
ZiAoIG1hbmlwdWxhdGlvbl9yY2hlY2thYmxlVHlwZS50ZXN0KCBlbGVtLnR5cGUgKSApIHsKLSAg
ICBlbGVtLmRlZmF1bHRDaGVja2VkID0gZWxlbS5jaGVja2VkOwotICAgIH0KLX0KLQotalF1ZXJ5
LmV4dGVuZCh7Ci0gICAgY2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVw
RGF0YUFuZEV2ZW50cyApIHsKLSAgICB2YXIgZGVzdEVsZW1lbnRzLCBub2RlLCBjbG9uZSwgaSwg
c3JjRWxlbWVudHMsCi0gICAgaW5QYWdlID0galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9j
dW1lbnQsIGVsZW0gKTsKLQotICAgIGlmICggalF1ZXJ5LnN1cHBvcnQuaHRtbDVDbG9uZSB8fCBq
UXVlcnkuaXNYTUxEb2MoZWxlbSkgfHwgIXJub3NoaW1jYWNoZS50ZXN0KCAiPCIgKyBlbGVtLm5v
ZGVOYW1lICsgIj4iICkgKSB7Ci0gICAgY2xvbmUgPSBlbGVtLmNsb25lTm9kZSggdHJ1ZSApOwot
Ci0gICAgLy8gSUU8PTggZG9lcyBub3QgcHJvcGVybHkgY2xvbmUgZGV0YWNoZWQsIHVua25vd24g
ZWxlbWVudCBub2RlcwotICAgIH0gZWxzZSB7Ci0gICAgZnJhZ21lbnREaXYuaW5uZXJIVE1MID0g
ZWxlbS5vdXRlckhUTUw7Ci0gICAgZnJhZ21lbnREaXYucmVtb3ZlQ2hpbGQoIGNsb25lID0gZnJh
Z21lbnREaXYuZmlyc3RDaGlsZCApOwotICAgIH0KLQotICAgIGlmICggKCFqUXVlcnkuc3VwcG9y
dC5ub0Nsb25lRXZlbnQgfHwgIWpRdWVyeS5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkKSAmJgotICAg
IChlbGVtLm5vZGVUeXBlID09PSAxIHx8IGVsZW0ubm9kZVR5cGUgPT09IDExKSAmJiAhalF1ZXJ5
LmlzWE1MRG9jKGVsZW0pICkgewotCi0gICAgLy8gV2UgZXNjaGV3IFNpenpsZSBoZXJlIGZvciBw
ZXJmb3JtYW5jZSByZWFzb25zOiBodHRwOi8vanNwZXJmLmNvbS9nZXRhbGwtdnMtc2l6emxlLzIK
LSAgICBkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7Ci0gICAgc3JjRWxlbWVudHMgPSBn
ZXRBbGwoIGVsZW0gKTsKLQotICAgIC8vIEZpeCBhbGwgSUUgY2xvbmluZyBpc3N1ZXMKLSAgICBm
b3IgKCBpID0gMDsgKG5vZGUgPSBzcmNFbGVtZW50c1tpXSkgIT0gbnVsbDsgKytpICkgewotICAg
IC8vIEVuc3VyZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBub2RlIGlzIG5vdCBudWxsOyBGaXhlcyAj
OTU4NwotICAgIGlmICggZGVzdEVsZW1lbnRzW2ldICkgewotICAgIGZpeENsb25lTm9kZUlzc3Vl
cyggbm9kZSwgZGVzdEVsZW1lbnRzW2ldICk7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICAv
LyBDb3B5IHRoZSBldmVudHMgZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlIGNsb25lCi0gICAgaWYg
KCBkYXRhQW5kRXZlbnRzICkgewotICAgIGlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7Ci0gICAg
c3JjRWxlbWVudHMgPSBzcmNFbGVtZW50cyB8fCBnZXRBbGwoIGVsZW0gKTsKLSAgICBkZXN0RWxl
bWVudHMgPSBkZXN0RWxlbWVudHMgfHwgZ2V0QWxsKCBjbG9uZSApOwotCi0gICAgZm9yICggaSA9
IDA7IChub2RlID0gc3JjRWxlbWVudHNbaV0pICE9IG51bGw7IGkrKyApIHsKLSAgICBjbG9uZUNv
cHlFdmVudCggbm9kZSwgZGVzdEVsZW1lbnRzW2ldICk7Ci0gICAgfQotICAgIH0gZWxzZSB7Ci0g
ICAgY2xvbmVDb3B5RXZlbnQoIGVsZW0sIGNsb25lICk7Ci0gICAgfQotICAgIH0KLQotICAgIC8v
IFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3RvcnkKLSAgICBkZXN0RWxlbWVudHMgPSBn
ZXRBbGwoIGNsb25lLCAic2NyaXB0IiApOwotICAgIGlmICggZGVzdEVsZW1lbnRzLmxlbmd0aCA+
IDAgKSB7Ci0gICAgc2V0R2xvYmFsRXZhbCggZGVzdEVsZW1lbnRzLCAhaW5QYWdlICYmIGdldEFs
bCggZWxlbSwgInNjcmlwdCIgKSApOwotICAgIH0KLQotICAgIGRlc3RFbGVtZW50cyA9IHNyY0Vs
ZW1lbnRzID0gbm9kZSA9IG51bGw7Ci0KLSAgICAvLyBSZXR1cm4gdGhlIGNsb25lZCBzZXQKLSAg
ICByZXR1cm4gY2xvbmU7Ci0gICAgfSwKLQotICAgIGJ1aWxkRnJhZ21lbnQ6IGZ1bmN0aW9uKCBl
bGVtcywgY29udGV4dCwgc2NyaXB0cywgc2VsZWN0aW9uICkgewotICAgIHZhciBqLCBlbGVtLCBj
b250YWlucywKLSAgICB0bXAsIHRhZywgdGJvZHksIHdyYXAsCi0gICAgbCA9IGVsZW1zLmxlbmd0
aCwKLQotICAgIC8vIEVuc3VyZSBhIHNhZmUgZnJhZ21lbnQKLSAgICBzYWZlID0gY3JlYXRlU2Fm
ZUZyYWdtZW50KCBjb250ZXh0ICksCi0KLSAgICBub2RlcyA9IFtdLAotICAgIGkgPSAwOwotCi0g
ICAgZm9yICggOyBpIDwgbDsgaSsrICkgewotICAgIGVsZW0gPSBlbGVtc1sgaSBdOwotCi0gICAg
aWYgKCBlbGVtIHx8IGVsZW0gPT09IDAgKSB7Ci0KLSAgICAvLyBBZGQgbm9kZXMgZGlyZWN0bHkK
LSAgICBpZiAoIGpRdWVyeS50eXBlKCBlbGVtICkgPT09ICJvYmplY3QiICkgewotICAgIGpRdWVy
eS5tZXJnZSggbm9kZXMsIGVsZW0ubm9kZVR5cGUgPyBbIGVsZW0gXSA6IGVsZW0gKTsKLQotICAg
IC8vIENvbnZlcnQgbm9uLWh0bWwgaW50byBhIHRleHQgbm9kZQotICAgIH0gZWxzZSBpZiAoICFy
aHRtbC50ZXN0KCBlbGVtICkgKSB7Ci0gICAgbm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVUZXh0
Tm9kZSggZWxlbSApICk7Ci0KLSAgICAvLyBDb252ZXJ0IGh0bWwgaW50byBET00gbm9kZXMKLSAg
ICB9IGVsc2UgewotICAgIHRtcCA9IHRtcCB8fCBzYWZlLmFwcGVuZENoaWxkKCBjb250ZXh0LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpICk7Ci0KLSAgICAvLyBEZXNlcmlhbGl6ZSBhIHN0YW5kYXJkIHJl
cHJlc2VudGF0aW9uCi0gICAgdGFnID0gKCBydGFnTmFtZS5leGVjKCBlbGVtICkgfHwgWyIiLCAi
Il0gKVsxXS50b0xvd2VyQ2FzZSgpOwotICAgIHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFw
TWFwLl9kZWZhdWx0OwotCi0gICAgdG1wLmlubmVySFRNTCA9IHdyYXBbMV0gKyBlbGVtLnJlcGxh
Y2UoIHJ4aHRtbFRhZywgIjwkMT48LyQyPiIgKSArIHdyYXBbMl07Ci0KLSAgICAvLyBEZXNjZW5k
IHRocm91Z2ggd3JhcHBlcnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnQKLSAgICBqID0gd3JhcFswXTsK
LSAgICB3aGlsZSAoIGotLSApIHsKLSAgICB0bXAgPSB0bXAubGFzdENoaWxkOwotICAgIH0KLQot
ICAgIC8vIE1hbnVhbGx5IGFkZCBsZWFkaW5nIHdoaXRlc3BhY2UgcmVtb3ZlZCBieSBJRQotICAg
IGlmICggIWpRdWVyeS5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlICYmIHJsZWFkaW5nV2hpdGVz
cGFjZS50ZXN0KCBlbGVtICkgKSB7Ci0gICAgbm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVUZXh0
Tm9kZSggcmxlYWRpbmdXaGl0ZXNwYWNlLmV4ZWMoIGVsZW0gKVswXSApICk7Ci0gICAgfQotCi0g
ICAgLy8gUmVtb3ZlIElFJ3MgYXV0b2luc2VydGVkIDx0Ym9keT4gZnJvbSB0YWJsZSBmcmFnbWVu
dHMKLSAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC50Ym9keSApIHsKLQotICAgIC8vIFN0cmluZyB3
YXMgYSA8dGFibGU+LCAqbWF5KiBoYXZlIHNwdXJpb3VzIDx0Ym9keT4KLSAgICBlbGVtID0gdGFn
ID09PSAidGFibGUiICYmICFydGJvZHkudGVzdCggZWxlbSApID8KLSAgICB0bXAuZmlyc3RDaGls
ZCA6Ci0KLSAgICAvLyBTdHJpbmcgd2FzIGEgYmFyZSA8dGhlYWQ+IG9yIDx0Zm9vdD4KLSAgICB3
cmFwWzFdID09PSAiPHRhYmxlPiIgJiYgIXJ0Ym9keS50ZXN0KCBlbGVtICkgPwotICAgIHRtcCA6
Ci0gICAgMDsKLQotICAgIGogPSBlbGVtICYmIGVsZW0uY2hpbGROb2Rlcy5sZW5ndGg7Ci0gICAg
d2hpbGUgKCBqLS0gKSB7Ci0gICAgaWYgKCBqUXVlcnkubm9kZU5hbWUoICh0Ym9keSA9IGVsZW0u
Y2hpbGROb2Rlc1tqXSksICJ0Ym9keSIgKSAmJiAhdGJvZHkuY2hpbGROb2Rlcy5sZW5ndGggKSB7
Ci0gICAgZWxlbS5yZW1vdmVDaGlsZCggdGJvZHkgKTsKLSAgICB9Ci0gICAgfQotICAgIH0KLQot
ICAgIGpRdWVyeS5tZXJnZSggbm9kZXMsIHRtcC5jaGlsZE5vZGVzICk7Ci0KLSAgICAvLyBGaXgg
IzEyMzkyIGZvciBXZWJLaXQgYW5kIElFID4gOQotICAgIHRtcC50ZXh0Q29udGVudCA9ICIiOwot
Ci0gICAgLy8gRml4ICMxMjM5MiBmb3Igb2xkSUUKLSAgICB3aGlsZSAoIHRtcC5maXJzdENoaWxk
ICkgewotICAgIHRtcC5yZW1vdmVDaGlsZCggdG1wLmZpcnN0Q2hpbGQgKTsKLSAgICB9Ci0KLSAg
ICAvLyBSZW1lbWJlciB0aGUgdG9wLWxldmVsIGNvbnRhaW5lciBmb3IgcHJvcGVyIGNsZWFudXAK
LSAgICB0bXAgPSBzYWZlLmxhc3RDaGlsZDsKLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIC8v
IEZpeCAjMTEzNTY6IENsZWFyIGVsZW1lbnRzIGZyb20gZnJhZ21lbnQKLSAgICBpZiAoIHRtcCAp
IHsKLSAgICBzYWZlLnJlbW92ZUNoaWxkKCB0bXAgKTsKLSAgICB9Ci0KLSAgICAvLyBSZXNldCBk
ZWZhdWx0Q2hlY2tlZCBmb3IgYW55IHJhZGlvcyBhbmQgY2hlY2tib3hlcwotICAgIC8vIGFib3V0
IHRvIGJlIGFwcGVuZGVkIHRvIHRoZSBET00gaW4gSUUgNi83ICgjODA2MCkKLSAgICBpZiAoICFq
UXVlcnkuc3VwcG9ydC5hcHBlbmRDaGVja2VkICkgewotICAgIGpRdWVyeS5ncmVwKCBnZXRBbGwo
IG5vZGVzLCAiaW5wdXQiICksIGZpeERlZmF1bHRDaGVja2VkICk7Ci0gICAgfQotCi0gICAgaSA9
IDA7Ci0gICAgd2hpbGUgKCAoZWxlbSA9IG5vZGVzWyBpKysgXSkgKSB7Ci0KLSAgICAvLyAjNDA4
NyAtIElmIG9yaWdpbiBhbmQgZGVzdGluYXRpb24gZWxlbWVudHMgYXJlIHRoZSBzYW1lLCBhbmQg
dGhpcyBpcwotICAgIC8vIHRoYXQgZWxlbWVudCwgZG8gbm90IGRvIGFueXRoaW5nCi0gICAgaWYg
KCBzZWxlY3Rpb24gJiYgalF1ZXJ5LmluQXJyYXkoIGVsZW0sIHNlbGVjdGlvbiApICE9PSAtMSAp
IHsKLSAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICBjb250YWlucyA9IGpRdWVyeS5jb250YWlu
cyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7Ci0KLSAgICAvLyBBcHBlbmQgdG8gZnJhZ21l
bnQKLSAgICB0bXAgPSBnZXRBbGwoIHNhZmUuYXBwZW5kQ2hpbGQoIGVsZW0gKSwgInNjcmlwdCIg
KTsKLQotICAgIC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3RvcnkKLSAgICBpZiAo
IGNvbnRhaW5zICkgewotICAgIHNldEdsb2JhbEV2YWwoIHRtcCApOwotICAgIH0KLQotICAgIC8v
IENhcHR1cmUgZXhlY3V0YWJsZXMKLSAgICBpZiAoIHNjcmlwdHMgKSB7Ci0gICAgaiA9IDA7Ci0g
ICAgd2hpbGUgKCAoZWxlbSA9IHRtcFsgaisrIF0pICkgewotICAgIGlmICggcnNjcmlwdFR5cGUu
dGVzdCggZWxlbS50eXBlIHx8ICIiICkgKSB7Ci0gICAgc2NyaXB0cy5wdXNoKCBlbGVtICk7Ci0g
ICAgfQotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAgdG1wID0gbnVsbDsKLQotICAgIHJldHVy
biBzYWZlOwotICAgIH0sCi0KLSAgICBjbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcywgLyogaW50
ZXJuYWwgKi8gYWNjZXB0RGF0YSApIHsKLSAgICB2YXIgZWxlbSwgdHlwZSwgaWQsIGRhdGEsCi0g
ICAgaSA9IDAsCi0gICAgaW50ZXJuYWxLZXkgPSBqUXVlcnkuZXhwYW5kbywKLSAgICBjYWNoZSA9
IGpRdWVyeS5jYWNoZSwKLSAgICBkZWxldGVFeHBhbmRvID0galF1ZXJ5LnN1cHBvcnQuZGVsZXRl
RXhwYW5kbywKLSAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWw7Ci0KLSAgICBmb3Ig
KCA7IChlbGVtID0gZWxlbXNbaV0pICE9IG51bGw7IGkrKyApIHsKLQotICAgIGlmICggYWNjZXB0
RGF0YSB8fCBqUXVlcnkuYWNjZXB0RGF0YSggZWxlbSApICkgewotCi0gICAgaWQgPSBlbGVtWyBp
bnRlcm5hbEtleSBdOwotICAgIGRhdGEgPSBpZCAmJiBjYWNoZVsgaWQgXTsKLQotICAgIGlmICgg
ZGF0YSApIHsKLSAgICBpZiAoIGRhdGEuZXZlbnRzICkgewotICAgIGZvciAoIHR5cGUgaW4gZGF0
YS5ldmVudHMgKSB7Ci0gICAgaWYgKCBzcGVjaWFsWyB0eXBlIF0gKSB7Ci0gICAgalF1ZXJ5LmV2
ZW50LnJlbW92ZSggZWxlbSwgdHlwZSApOwotCi0gICAgLy8gVGhpcyBpcyBhIHNob3J0Y3V0IHRv
IGF2b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZAotICAgIH0gZWxzZSB7Ci0gICAg
alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApOwotICAgIH0KLSAg
ICB9Ci0gICAgfQotCi0gICAgLy8gUmVtb3ZlIGNhY2hlIG9ubHkgaWYgaXQgd2FzIG5vdCBhbHJl
YWR5IHJlbW92ZWQgYnkgalF1ZXJ5LmV2ZW50LnJlbW92ZQotICAgIGlmICggY2FjaGVbIGlkIF0g
KSB7Ci0KLSAgICBkZWxldGUgY2FjaGVbIGlkIF07Ci0KLSAgICAvLyBJRSBkb2VzIG5vdCBhbGxv
dyB1cyB0byBkZWxldGUgZXhwYW5kbyBwcm9wZXJ0aWVzIGZyb20gbm9kZXMsCi0gICAgLy8gbm9y
IGRvZXMgaXQgaGF2ZSBhIHJlbW92ZUF0dHJpYnV0ZSBmdW5jdGlvbiBvbiBEb2N1bWVudCBub2Rl
czsKLSAgICAvLyB3ZSBtdXN0IGhhbmRsZSBhbGwgb2YgdGhlc2UgY2FzZXMKLSAgICBpZiAoIGRl
bGV0ZUV4cGFuZG8gKSB7Ci0gICAgZGVsZXRlIGVsZW1bIGludGVybmFsS2V5IF07Ci0KLSAgICB9
IGVsc2UgaWYgKCB0eXBlb2YgZWxlbS5yZW1vdmVBdHRyaWJ1dGUgIT09IGNvcmVfc3RydW5kZWZp
bmVkICkgewotICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBpbnRlcm5hbEtleSApOwotCi0gICAg
fSBlbHNlIHsKLSAgICBlbGVtWyBpbnRlcm5hbEtleSBdID0gbnVsbDsKLSAgICB9Ci0KLSAgICBj
b3JlX2RlbGV0ZWRJZHMucHVzaCggaWQgKTsKLSAgICB9Ci0gICAgfQotICAgIH0KLSAgICB9Ci0g
ICAgfQotfSk7Ci12YXIgaWZyYW1lLCBnZXRTdHlsZXMsIGN1ckNTUywKLSAgICByYWxwaGEgPSAv
YWxwaGFcKFteKV0qXCkvaSwKLSAgICByb3BhY2l0eSA9IC9vcGFjaXR5XHMqPVxzKihbXildKikv
LAotICAgIHJwb3NpdGlvbiA9IC9eKHRvcHxyaWdodHxib3R0b218bGVmdCkkLywKLSAgICAvLyBz
d2FwcGFibGUgaWYgZGlzcGxheSBpcyBub25lIG9yIHN0YXJ0cyB3aXRoIHRhYmxlIGV4Y2VwdCAi
dGFibGUiLCAidGFibGUtY2VsbCIsIG9yICJ0YWJsZS1jYXB0aW9uIgotICAgIC8vIHNlZSBoZXJl
IGZvciBkaXNwbGF5IHZhbHVlczogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMv
ZG9jcy9DU1MvZGlzcGxheQotICAgIHJkaXNwbGF5c3dhcCA9IC9eKG5vbmV8dGFibGUoPyEtY1tl
YV0pLispLywKLSAgICBybWFyZ2luID0gL15tYXJnaW4vLAotICAgIHJudW1zcGxpdCA9IG5ldyBS
ZWdFeHAoICJeKCIgKyBjb3JlX3BudW0gKyAiKSguKikkIiwgImkiICksCi0gICAgcm51bW5vbnB4
ID0gbmV3IFJlZ0V4cCggIl4oIiArIGNvcmVfcG51bSArICIpKD8hcHgpW2EteiVdKyQiLCAiaSIg
KSwKLSAgICBycmVsTnVtID0gbmV3IFJlZ0V4cCggIl4oWystXSk9KCIgKyBjb3JlX3BudW0gKyAi
KSIsICJpIiApLAotICAgIGVsZW1kaXNwbGF5ID0geyBCT0RZOiAiYmxvY2siIH0sCi0KLSAgICBj
c3NTaG93ID0geyBwb3NpdGlvbjogImFic29sdXRlIiwgdmlzaWJpbGl0eTogImhpZGRlbiIsIGRp
c3BsYXk6ICJibG9jayIgfSwKLSAgICBjc3NOb3JtYWxUcmFuc2Zvcm0gPSB7Ci0gICAgbGV0dGVy
U3BhY2luZzogMCwKLSAgICBmb250V2VpZ2h0OiA0MDAKLSAgICB9LAotCi0gICAgY3NzRXhwYW5k
ID0gWyAiVG9wIiwgIlJpZ2h0IiwgIkJvdHRvbSIsICJMZWZ0IiBdLAotICAgIGNzc1ByZWZpeGVz
ID0gWyAiV2Via2l0IiwgIk8iLCAiTW96IiwgIm1zIiBdOwotCi0vLyByZXR1cm4gYSBjc3MgcHJv
cGVydHkgbWFwcGVkIHRvIGEgcG90ZW50aWFsbHkgdmVuZG9yIHByZWZpeGVkIHByb3BlcnR5Ci1m
dW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggc3R5bGUsIG5hbWUgKSB7Ci0KLSAgICAvLyBzaG9ydGN1
dCBmb3IgbmFtZXMgdGhhdCBhcmUgbm90IHZlbmRvciBwcmVmaXhlZAotICAgIGlmICggbmFtZSBp
biBzdHlsZSApIHsKLSAgICByZXR1cm4gbmFtZTsKLSAgICB9Ci0KLSAgICAvLyBjaGVjayBmb3Ig
dmVuZG9yIHByZWZpeGVkIG5hbWVzCi0gICAgdmFyIGNhcE5hbWUgPSBuYW1lLmNoYXJBdCgwKS50
b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSgxKSwKLSAgICBvcmlnTmFtZSA9IG5hbWUsCi0gICAg
aSA9IGNzc1ByZWZpeGVzLmxlbmd0aDsKLQotICAgIHdoaWxlICggaS0tICkgewotICAgIG5hbWUg
PSBjc3NQcmVmaXhlc1sgaSBdICsgY2FwTmFtZTsKLSAgICBpZiAoIG5hbWUgaW4gc3R5bGUgKSB7
Ci0gICAgcmV0dXJuIG5hbWU7Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiBvcmlnTmFtZTsK
LX0KLQotZnVuY3Rpb24gaXNIaWRkZW4oIGVsZW0sIGVsICkgewotICAgIC8vIGlzSGlkZGVuIG1p
Z2h0IGJlIGNhbGxlZCBmcm9tIGpRdWVyeSNmaWx0ZXIgZnVuY3Rpb247Ci0gICAgLy8gaW4gdGhh
dCBjYXNlLCBlbGVtZW50IHdpbGwgYmUgc2Vjb25kIGFyZ3VtZW50Ci0gICAgZWxlbSA9IGVsIHx8
IGVsZW07Ci0gICAgcmV0dXJuIGpRdWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApID09PSAibm9u
ZSIgfHwgIWpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7Ci19Ci0K
LWZ1bmN0aW9uIHNob3dIaWRlKCBlbGVtZW50cywgc2hvdyApIHsKLSAgICB2YXIgZGlzcGxheSwg
ZWxlbSwgaGlkZGVuLAotICAgIHZhbHVlcyA9IFtdLAotICAgIGluZGV4ID0gMCwKLSAgICBsZW5n
dGggPSBlbGVtZW50cy5sZW5ndGg7Ci0KLSAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRl
eCsrICkgewotICAgIGVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTsKLSAgICBpZiAoICFlbGVtLnN0
eWxlICkgewotICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIHZhbHVlc1sgaW5kZXggXSA9IGpR
dWVyeS5fZGF0YSggZWxlbSwgIm9sZGRpc3BsYXkiICk7Ci0gICAgZGlzcGxheSA9IGVsZW0uc3R5
bGUuZGlzcGxheTsKLSAgICBpZiAoIHNob3cgKSB7Ci0gICAgLy8gUmVzZXQgdGhlIGlubGluZSBk
aXNwbGF5IG9mIHRoaXMgZWxlbWVudCB0byBsZWFybiBpZiBpdCBpcwotICAgIC8vIGJlaW5nIGhp
ZGRlbiBieSBjYXNjYWRlZCBydWxlcyBvciBub3QKLSAgICBpZiAoICF2YWx1ZXNbIGluZGV4IF0g
JiYgZGlzcGxheSA9PT0gIm5vbmUiICkgewotICAgIGVsZW0uc3R5bGUuZGlzcGxheSA9ICIiOwot
ICAgIH0KLQotICAgIC8vIFNldCBlbGVtZW50cyB3aGljaCBoYXZlIGJlZW4gb3ZlcnJpZGRlbiB3
aXRoIGRpc3BsYXk6IG5vbmUKLSAgICAvLyBpbiBhIHN0eWxlc2hlZXQgdG8gd2hhdGV2ZXIgdGhl
IGRlZmF1bHQgYnJvd3NlciBzdHlsZSBpcwotICAgIC8vIGZvciBzdWNoIGFuIGVsZW1lbnQKLSAg
ICBpZiAoIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIiIgJiYgaXNIaWRkZW4oIGVsZW0gKSApIHsK
LSAgICB2YWx1ZXNbIGluZGV4IF0gPSBqUXVlcnkuX2RhdGEoIGVsZW0sICJvbGRkaXNwbGF5Iiwg
Y3NzX2RlZmF1bHREaXNwbGF5KGVsZW0ubm9kZU5hbWUpICk7Ci0gICAgfQotICAgIH0gZWxzZSB7
Ci0KLSAgICBpZiAoICF2YWx1ZXNbIGluZGV4IF0gKSB7Ci0gICAgaGlkZGVuID0gaXNIaWRkZW4o
IGVsZW0gKTsKLQotICAgIGlmICggZGlzcGxheSAmJiBkaXNwbGF5ICE9PSAibm9uZSIgfHwgIWhp
ZGRlbiApIHsKLSAgICBqUXVlcnkuX2RhdGEoIGVsZW0sICJvbGRkaXNwbGF5IiwgaGlkZGVuID8g
ZGlzcGxheSA6IGpRdWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApICk7Ci0gICAgfQotICAgIH0K
LSAgICB9Ci0gICAgfQotCi0gICAgLy8gU2V0IHRoZSBkaXNwbGF5IG9mIG1vc3Qgb2YgdGhlIGVs
ZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AKLSAgICAvLyB0byBhdm9pZCB0aGUgY29uc3RhbnQgcmVm
bG93Ci0gICAgZm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHsKLSAg
ICBlbGVtID0gZWxlbWVudHNbIGluZGV4IF07Ci0gICAgaWYgKCAhZWxlbS5zdHlsZSApIHsKLSAg
ICBjb250aW51ZTsKLSAgICB9Ci0gICAgaWYgKCAhc2hvdyB8fCBlbGVtLnN0eWxlLmRpc3BsYXkg
PT09ICJub25lIiB8fCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09ICIiICkgewotICAgIGVsZW0uc3R5
bGUuZGlzcGxheSA9IHNob3cgPyB2YWx1ZXNbIGluZGV4IF0gfHwgIiIgOiAibm9uZSI7Ci0gICAg
fQotICAgIH0KLQotICAgIHJldHVybiBlbGVtZW50czsKLX0KLQotalF1ZXJ5LmZuLmV4dGVuZCh7
Ci0gICAgY3NzOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5h
Y2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHsKLSAgICB2YXIgbGVu
LCBzdHlsZXMsCi0gICAgbWFwID0ge30sCi0gICAgaSA9IDA7Ci0KLSAgICBpZiAoIGpRdWVyeS5p
c0FycmF5KCBuYW1lICkgKSB7Ci0gICAgc3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICk7Ci0gICAg
bGVuID0gbmFtZS5sZW5ndGg7Ci0KLSAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKLSAgICBt
YXBbIG5hbWVbIGkgXSBdID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZVsgaSBdLCBmYWxzZSwgc3R5
bGVzICk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hcDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFs
dWUgIT09IHVuZGVmaW5lZCA/Ci0gICAgalF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lLCB2YWx1ZSAp
IDoKLSAgICBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICk7Ci0gICAgfSwgbmFtZSwgdmFsdWUsIGFy
Z3VtZW50cy5sZW5ndGggPiAxICk7Ci0gICAgfSwKLSAgICBzaG93OiBmdW5jdGlvbigpIHsKLSAg
ICByZXR1cm4gc2hvd0hpZGUoIHRoaXMsIHRydWUgKTsKLSAgICB9LAotICAgIGhpZGU6IGZ1bmN0
aW9uKCkgewotICAgIHJldHVybiBzaG93SGlkZSggdGhpcyApOwotICAgIH0sCi0gICAgdG9nZ2xl
OiBmdW5jdGlvbiggc3RhdGUgKSB7Ci0gICAgdmFyIGJvb2wgPSB0eXBlb2Ygc3RhdGUgPT09ICJi
b29sZWFuIjsKLQotICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCBi
b29sID8gc3RhdGUgOiBpc0hpZGRlbiggdGhpcyApICkgewotICAgIGpRdWVyeSggdGhpcyApLnNo
b3coKTsKLSAgICB9IGVsc2UgewotICAgIGpRdWVyeSggdGhpcyApLmhpZGUoKTsKLSAgICB9Ci0g
ICAgfSk7Ci0gICAgfQotfSk7Ci0KLWpRdWVyeS5leHRlbmQoewotICAgIC8vIEFkZCBpbiBzdHls
ZSBwcm9wZXJ0eSBob29rcyBmb3Igb3ZlcnJpZGluZyB0aGUgZGVmYXVsdAotICAgIC8vIGJlaGF2
aW9yIG9mIGdldHRpbmcgYW5kIHNldHRpbmcgYSBzdHlsZSBwcm9wZXJ0eQotICAgIGNzc0hvb2tz
OiB7Ci0gICAgb3BhY2l0eTogewotICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkg
ewotICAgIGlmICggY29tcHV0ZWQgKSB7Ci0gICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBnZXQgYSBu
dW1iZXIgYmFjayBmcm9tIG9wYWNpdHkKLSAgICB2YXIgcmV0ID0gY3VyQ1NTKCBlbGVtLCAib3Bh
Y2l0eSIgKTsKLSAgICByZXR1cm4gcmV0ID09PSAiIiA/ICIxIiA6IHJldDsKLSAgICB9Ci0gICAg
fQotICAgIH0KLSAgICB9LAotCi0gICAgLy8gRXhjbHVkZSB0aGUgZm9sbG93aW5nIGNzcyBwcm9w
ZXJ0aWVzIHRvIGFkZCBweAotICAgIGNzc051bWJlcjogewotICAgICJjb2x1bW5Db3VudCI6IHRy
dWUsCi0gICAgImZpbGxPcGFjaXR5IjogdHJ1ZSwKLSAgICAiZm9udFdlaWdodCI6IHRydWUsCi0g
ICAgImxpbmVIZWlnaHQiOiB0cnVlLAotICAgICJvcGFjaXR5IjogdHJ1ZSwKLSAgICAib3JwaGFu
cyI6IHRydWUsCi0gICAgIndpZG93cyI6IHRydWUsCi0gICAgInpJbmRleCI6IHRydWUsCi0gICAg
Inpvb20iOiB0cnVlCi0gICAgfSwKLQotICAgIC8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5h
bWVzIHlvdSB3aXNoIHRvIGZpeCBiZWZvcmUKLSAgICAvLyBzZXR0aW5nIG9yIGdldHRpbmcgdGhl
IHZhbHVlCi0gICAgY3NzUHJvcHM6IHsKLSAgICAvLyBub3JtYWxpemUgZmxvYXQgY3NzIHByb3Bl
cnR5Ci0gICAgImZsb2F0IjogalF1ZXJ5LnN1cHBvcnQuY3NzRmxvYXQgPyAiY3NzRmxvYXQiIDog
InN0eWxlRmxvYXQiCi0gICAgfSwKLQotICAgIC8vIEdldCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9w
ZXJ0eSBvbiBhIERPTSBOb2RlCi0gICAgc3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1
ZSwgZXh0cmEgKSB7Ci0gICAgLy8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21tZW50
IG5vZGVzCi0gICAgaWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9k
ZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7Ci0gICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZQotICAg
IHZhciByZXQsIHR5cGUsIGhvb2tzLAotICAgIG9yaWdOYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSgg
bmFtZSApLAotICAgIHN0eWxlID0gZWxlbS5zdHlsZTsKLQotICAgIG5hbWUgPSBqUXVlcnkuY3Nz
UHJvcHNbIG9yaWdOYW1lIF0gfHwgKCBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gPSB2ZW5k
b3JQcm9wTmFtZSggc3R5bGUsIG9yaWdOYW1lICkgKTsKLQotICAgIC8vIGdldHMgaG9vayBmb3Ig
dGhlIHByZWZpeGVkIHZlcnNpb24KLSAgICAvLyBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhlZCB2
ZXJzaW9uCi0gICAgaG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3Nz
SG9va3NbIG9yaWdOYW1lIF07Ci0KLSAgICAvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5nIGEgdmFs
dWUKLSAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgdHlwZSA9IHR5cGVvZiB2
YWx1ZTsKLQotICAgIC8vIGNvbnZlcnQgcmVsYXRpdmUgbnVtYmVyIHN0cmluZ3MgKCs9IG9yIC09
KSB0byByZWxhdGl2ZSBudW1iZXJzLiAjNzM0NQotICAgIGlmICggdHlwZSA9PT0gInN0cmluZyIg
JiYgKHJldCA9IHJyZWxOdW0uZXhlYyggdmFsdWUgKSkgKSB7Ci0gICAgdmFsdWUgPSAoIHJldFsx
XSArIDEgKSAqIHJldFsyXSArIHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKSAp
OwotICAgIC8vIEZpeGVzIGJ1ZyAjOTIzNwotICAgIHR5cGUgPSAibnVtYmVyIjsKLSAgICB9Ci0K
LSAgICAvLyBNYWtlIHN1cmUgdGhhdCBOYU4gYW5kIG51bGwgdmFsdWVzIGFyZW4ndCBzZXQuIFNl
ZTogIzcxMTYKLSAgICBpZiAoIHZhbHVlID09IG51bGwgfHwgdHlwZSA9PT0gIm51bWJlciIgJiYg
aXNOYU4oIHZhbHVlICkgKSB7Ci0gICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIElmIGEgbnVt
YmVyIHdhcyBwYXNzZWQgaW4sIGFkZCAncHgnIHRvIHRoZSAoZXhjZXB0IGZvciBjZXJ0YWluIENT
UyBwcm9wZXJ0aWVzKQotICAgIGlmICggdHlwZSA9PT0gIm51bWJlciIgJiYgIWpRdWVyeS5jc3NO
dW1iZXJbIG9yaWdOYW1lIF0gKSB7Ci0gICAgdmFsdWUgKz0gInB4IjsKLSAgICB9Ci0KLSAgICAv
LyBGaXhlcyAjODkwOCwgaXQgY2FuIGJlIGRvbmUgbW9yZSBjb3JyZWN0bHkgYnkgc3BlY2lmaW5n
IHNldHRlcnMgaW4gY3NzSG9va3MsCi0gICAgLy8gYnV0IGl0IHdvdWxkIG1lYW4gdG8gZGVmaW5l
IGVpZ2h0IChmb3IgZXZlcnkgcHJvYmxlbWF0aWMgcHJvcGVydHkpIGlkZW50aWNhbCBmdW5jdGlv
bnMKLSAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5jbGVhckNsb25lU3R5bGUgJiYgdmFsdWUgPT09
ICIiICYmIG5hbWUuaW5kZXhPZigiYmFja2dyb3VuZCIpID09PSAwICkgewotICAgIHN0eWxlWyBu
YW1lIF0gPSAiaW5oZXJpdCI7Ci0gICAgfQotCi0gICAgLy8gSWYgYSBob29rIHdhcyBwcm92aWRl
ZCwgdXNlIHRoYXQgdmFsdWUsIG90aGVyd2lzZSBqdXN0IHNldCB0aGUgc3BlY2lmaWVkIHZhbHVl
Ci0gICAgaWYgKCAhaG9va3MgfHwgISgic2V0IiBpbiBob29rcykgfHwgKHZhbHVlID0gaG9va3Mu
c2V0KCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSkgIT09IHVuZGVmaW5lZCApIHsKLQotICAgIC8vIFdy
YXBwZWQgdG8gcHJldmVudCBJRSBmcm9tIHRocm93aW5nIGVycm9ycyB3aGVuICdpbnZhbGlkJyB2
YWx1ZXMgYXJlIHByb3ZpZGVkCi0gICAgLy8gRml4ZXMgYnVnICM1NTA5Ci0gICAgdHJ5IHsKLSAg
ICBzdHlsZVsgbmFtZSBdID0gdmFsdWU7Ci0gICAgfSBjYXRjaChlKSB7fQotICAgIH0KLQotICAg
IH0gZWxzZSB7Ci0gICAgLy8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIG5vbi1jb21w
dXRlZCB2YWx1ZSBmcm9tIHRoZXJlCi0gICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAm
JiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSkgIT09IHVuZGVmaW5lZCAp
IHsKLSAgICByZXR1cm4gcmV0OwotICAgIH0KLQotICAgIC8vIE90aGVyd2lzZSBqdXN0IGdldCB0
aGUgdmFsdWUgZnJvbSB0aGUgc3R5bGUgb2JqZWN0Ci0gICAgcmV0dXJuIHN0eWxlWyBuYW1lIF07
Ci0gICAgfQotICAgIH0sCi0KLSAgICBjc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSwg
c3R5bGVzICkgewotICAgIHZhciBudW0sIHZhbCwgaG9va3MsCi0gICAgb3JpZ05hbWUgPSBqUXVl
cnkuY2FtZWxDYXNlKCBuYW1lICk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3Jr
aW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUKLSAgICBuYW1lID0galF1ZXJ5LmNzc1Byb3BzWyBvcmln
TmFtZSBdIHx8ICggalF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdID0gdmVuZG9yUHJvcE5hbWUo
IGVsZW0uc3R5bGUsIG9yaWdOYW1lICkgKTsKLQotICAgIC8vIGdldHMgaG9vayBmb3IgdGhlIHBy
ZWZpeGVkIHZlcnNpb24KLSAgICAvLyBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhlZCB2ZXJzaW9u
Ci0gICAgaG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3Nb
IG9yaWdOYW1lIF07Ci0KLSAgICAvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgY29t
cHV0ZWQgdmFsdWUgZnJvbSB0aGVyZQotICAgIGlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3Mg
KSB7Ci0gICAgdmFsID0gaG9va3MuZ2V0KCBlbGVtLCB0cnVlLCBleHRyYSApOwotICAgIH0KLQot
ICAgIC8vIE90aGVyd2lzZSwgaWYgYSB3YXkgdG8gZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBleGlz
dHMsIHVzZSB0aGF0Ci0gICAgaWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHsKLSAgICB2YWwgPSBj
dXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApOwotICAgIH0KLQotICAgIC8vY29udmVydCAibm9y
bWFsIiB0byBjb21wdXRlZCB2YWx1ZQotICAgIGlmICggdmFsID09PSAibm9ybWFsIiAmJiBuYW1l
IGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHsKLSAgICB2YWwgPSBjc3NOb3JtYWxUcmFuc2Zvcm1b
IG5hbWUgXTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4sIGNvbnZlcnRpbmcgdG8gbnVtYmVyIGlm
IGZvcmNlZCBvciBhIHF1YWxpZmllciB3YXMgcHJvdmlkZWQgYW5kIHZhbCBsb29rcyBudW1lcmlj
Ci0gICAgaWYgKCBleHRyYSA9PT0gIiIgfHwgZXh0cmEgKSB7Ci0gICAgbnVtID0gcGFyc2VGbG9h
dCggdmFsICk7Ci0gICAgcmV0dXJuIGV4dHJhID09PSB0cnVlIHx8IGpRdWVyeS5pc051bWVyaWMo
IG51bSApID8gbnVtIHx8IDAgOiB2YWw7Ci0gICAgfQotICAgIHJldHVybiB2YWw7Ci0gICAgfSwK
LQotICAgIC8vIEEgbWV0aG9kIGZvciBxdWlja2x5IHN3YXBwaW5nIGluL291dCBDU1MgcHJvcGVy
dGllcyB0byBnZXQgY29ycmVjdCBjYWxjdWxhdGlvbnMKLSAgICBzd2FwOiBmdW5jdGlvbiggZWxl
bSwgb3B0aW9ucywgY2FsbGJhY2ssIGFyZ3MgKSB7Ci0gICAgdmFyIHJldCwgbmFtZSwKLSAgICBv
bGQgPSB7fTsKLQotICAgIC8vIFJlbWVtYmVyIHRoZSBvbGQgdmFsdWVzLCBhbmQgaW5zZXJ0IHRo
ZSBuZXcgb25lcwotICAgIGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHsKLSAgICBvbGRbIG5hbWUg
XSA9IGVsZW0uc3R5bGVbIG5hbWUgXTsKLSAgICBlbGVtLnN0eWxlWyBuYW1lIF0gPSBvcHRpb25z
WyBuYW1lIF07Ci0gICAgfQotCi0gICAgcmV0ID0gY2FsbGJhY2suYXBwbHkoIGVsZW0sIGFyZ3Mg
fHwgW10gKTsKLQotICAgIC8vIFJldmVydCB0aGUgb2xkIHZhbHVlcwotICAgIGZvciAoIG5hbWUg
aW4gb3B0aW9ucyApIHsKLSAgICBlbGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gcmV0OwotICAgIH0KLX0pOwotCi0vLyBOT1RFOiB3ZSd2ZSBpbmNs
dWRlZCB0aGUgIndpbmRvdyIgaW4gd2luZG93LmdldENvbXB1dGVkU3R5bGUKLS8vIGJlY2F1c2Ug
anNkb20gb24gbm9kZS5qcyB3aWxsIGJyZWFrIHdpdGhvdXQgaXQuCi1pZiAoIHdpbmRvdy5nZXRD
b21wdXRlZFN0eWxlICkgewotICAgIGdldFN0eWxlcyA9IGZ1bmN0aW9uKCBlbGVtICkgewotICAg
IHJldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSwgbnVsbCApOwotICAgIH07Ci0K
LSAgICBjdXJDU1MgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSwgX2NvbXB1dGVkICkgewotICAgIHZh
ciB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLAotICAgIGNvbXB1dGVkID0gX2NvbXB1dGVkIHx8
IGdldFN0eWxlcyggZWxlbSApLAotCi0gICAgLy8gZ2V0UHJvcGVydHlWYWx1ZSBpcyBvbmx5IG5l
ZWRlZCBmb3IgLmNzcygnZmlsdGVyJykgaW4gSUU5LCBzZWUgIzEyNTM3Ci0gICAgcmV0ID0gY29t
cHV0ZWQgPyBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICkgfHwgY29tcHV0ZWRbIG5h
bWUgXSA6IHVuZGVmaW5lZCwKLSAgICBzdHlsZSA9IGVsZW0uc3R5bGU7Ci0KLSAgICBpZiAoIGNv
bXB1dGVkICkgewotCi0gICAgaWYgKCByZXQgPT09ICIiICYmICFqUXVlcnkuY29udGFpbnMoIGVs
ZW0ub3duZXJEb2N1bWVudCwgZWxlbSApICkgewotICAgIHJldCA9IGpRdWVyeS5zdHlsZSggZWxl
bSwgbmFtZSApOwotICAgIH0KLQotICAgIC8vIEEgdHJpYnV0ZSB0byB0aGUgImF3ZXNvbWUgaGFj
ayBieSBEZWFuIEVkd2FyZHMiCi0gICAgLy8gQ2hyb21lIDwgMTcgYW5kIFNhZmFyaSA1LjAgdXNl
cyAiY29tcHV0ZWQgdmFsdWUiIGluc3RlYWQgb2YgInVzZWQgdmFsdWUiIGZvciBtYXJnaW4tcmln
aHQKLSAgICAvLyBTYWZhcmkgNS4xLjcgKGF0IGxlYXN0KSByZXR1cm5zIHBlcmNlbnRhZ2UgZm9y
IGEgbGFyZ2VyIHNldCBvZiB2YWx1ZXMsIGJ1dCB3aWR0aCBzZWVtcyB0byBiZSByZWxpYWJseSBw
aXhlbHMKLSAgICAvLyB0aGlzIGlzIGFnYWluc3QgdGhlIENTU09NIGRyYWZ0IHNwZWM6IGh0dHA6
Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLyNyZXNvbHZlZC12YWx1ZXMKLSAgICBpZiAoIHJudW1u
b25weC50ZXN0KCByZXQgKSAmJiBybWFyZ2luLnRlc3QoIG5hbWUgKSApIHsKLQotICAgIC8vIFJl
bWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXMKLSAgICB3aWR0aCA9IHN0eWxlLndpZHRoOwotICAg
IG1pbldpZHRoID0gc3R5bGUubWluV2lkdGg7Ci0gICAgbWF4V2lkdGggPSBzdHlsZS5tYXhXaWR0
aDsKLQotICAgIC8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2YWx1
ZSBvdXQKLSAgICBzdHlsZS5taW5XaWR0aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5bGUud2lkdGgg
PSByZXQ7Ci0gICAgcmV0ID0gY29tcHV0ZWQud2lkdGg7Ci0KLSAgICAvLyBSZXZlcnQgdGhlIGNo
YW5nZWQgdmFsdWVzCi0gICAgc3R5bGUud2lkdGggPSB3aWR0aDsKLSAgICBzdHlsZS5taW5XaWR0
aCA9IG1pbldpZHRoOwotICAgIHN0eWxlLm1heFdpZHRoID0gbWF4V2lkdGg7Ci0gICAgfQotICAg
IH0KLQotICAgIHJldHVybiByZXQ7Ci0gICAgfTsKLX0gZWxzZSBpZiAoIGRvY3VtZW50LmRvY3Vt
ZW50RWxlbWVudC5jdXJyZW50U3R5bGUgKSB7Ci0gICAgZ2V0U3R5bGVzID0gZnVuY3Rpb24oIGVs
ZW0gKSB7Ci0gICAgcmV0dXJuIGVsZW0uY3VycmVudFN0eWxlOwotICAgIH07Ci0KLSAgICBjdXJD
U1MgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSwgX2NvbXB1dGVkICkgewotICAgIHZhciBsZWZ0LCBy
cywgcnNMZWZ0LAotICAgIGNvbXB1dGVkID0gX2NvbXB1dGVkIHx8IGdldFN0eWxlcyggZWxlbSAp
LAotICAgIHJldCA9IGNvbXB1dGVkID8gY29tcHV0ZWRbIG5hbWUgXSA6IHVuZGVmaW5lZCwKLSAg
ICBzdHlsZSA9IGVsZW0uc3R5bGU7Ci0KLSAgICAvLyBBdm9pZCBzZXR0aW5nIHJldCB0byBlbXB0
eSBzdHJpbmcgaGVyZQotICAgIC8vIHNvIHdlIGRvbid0IGRlZmF1bHQgdG8gYXV0bwotICAgIGlm
ICggcmV0ID09IG51bGwgJiYgc3R5bGUgJiYgc3R5bGVbIG5hbWUgXSApIHsKLSAgICByZXQgPSBz
dHlsZVsgbmFtZSBdOwotICAgIH0KLQotICAgIC8vIEZyb20gdGhlIGF3ZXNvbWUgaGFjayBieSBE
ZWFuIEVkd2FyZHMKLSAgICAvLyBodHRwOi8vZXJpay5lYWUubmV0L2FyY2hpdmVzLzIwMDcvMDcv
MjcvMTguNTQuMTUvI2NvbW1lbnQtMTAyMjkxCi0KLSAgICAvLyBJZiB3ZSdyZSBub3QgZGVhbGlu
ZyB3aXRoIGEgcmVndWxhciBwaXhlbCBudW1iZXIKLSAgICAvLyBidXQgYSBudW1iZXIgdGhhdCBo
YXMgYSB3ZWlyZCBlbmRpbmcsIHdlIG5lZWQgdG8gY29udmVydCBpdCB0byBwaXhlbHMKLSAgICAv
LyBidXQgbm90IHBvc2l0aW9uIGNzcyBhdHRyaWJ1dGVzLCBhcyB0aG9zZSBhcmUgcHJvcG9ydGlv
bmFsIHRvIHRoZSBwYXJlbnQgZWxlbWVudCBpbnN0ZWFkCi0gICAgLy8gYW5kIHdlIGNhbid0IG1l
YXN1cmUgdGhlIHBhcmVudCBpbnN0ZWFkIGJlY2F1c2UgaXQgbWlnaHQgdHJpZ2dlciBhICJzdGFj
a2luZyBkb2xscyIgcHJvYmxlbQotICAgIGlmICggcm51bW5vbnB4LnRlc3QoIHJldCApICYmICFy
cG9zaXRpb24udGVzdCggbmFtZSApICkgewotCi0gICAgLy8gUmVtZW1iZXIgdGhlIG9yaWdpbmFs
IHZhbHVlcwotICAgIGxlZnQgPSBzdHlsZS5sZWZ0OwotICAgIHJzID0gZWxlbS5ydW50aW1lU3R5
bGU7Ci0gICAgcnNMZWZ0ID0gcnMgJiYgcnMubGVmdDsKLQotICAgIC8vIFB1dCBpbiB0aGUgbmV3
IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2YWx1ZSBvdXQKLSAgICBpZiAoIHJzTGVmdCApIHsK
LSAgICBycy5sZWZ0ID0gZWxlbS5jdXJyZW50U3R5bGUubGVmdDsKLSAgICB9Ci0gICAgc3R5bGUu
bGVmdCA9IG5hbWUgPT09ICJmb250U2l6ZSIgPyAiMWVtIiA6IHJldDsKLSAgICByZXQgPSBzdHls
ZS5waXhlbExlZnQgKyAicHgiOwotCi0gICAgLy8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVlcwot
ICAgIHN0eWxlLmxlZnQgPSBsZWZ0OwotICAgIGlmICggcnNMZWZ0ICkgewotICAgIHJzLmxlZnQg
PSByc0xlZnQ7Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXQgPT09ICIiID8gImF1dG8i
IDogcmV0OwotICAgIH07Ci19Ci0KLWZ1bmN0aW9uIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2
YWx1ZSwgc3VidHJhY3QgKSB7Ci0gICAgdmFyIG1hdGNoZXMgPSBybnVtc3BsaXQuZXhlYyggdmFs
dWUgKTsKLSAgICByZXR1cm4gbWF0Y2hlcyA/Ci0gICAgLy8gR3VhcmQgYWdhaW5zdCB1bmRlZmlu
ZWQgInN1YnRyYWN0IiwgZS5nLiwgd2hlbiB1c2VkIGFzIGluIGNzc0hvb2tzCi0gICAgTWF0aC5t
YXgoIDAsIG1hdGNoZXNbIDEgXSAtICggc3VidHJhY3QgfHwgMCApICkgKyAoIG1hdGNoZXNbIDIg
XSB8fCAicHgiICkgOgotICAgIHZhbHVlOwotfQotCi1mdW5jdGlvbiBhdWdtZW50V2lkdGhPckhl
aWdodCggZWxlbSwgbmFtZSwgZXh0cmEsIGlzQm9yZGVyQm94LCBzdHlsZXMgKSB7Ci0gICAgdmFy
IGkgPSBleHRyYSA9PT0gKCBpc0JvcmRlckJveCA/ICJib3JkZXIiIDogImNvbnRlbnQiICkgPwot
ICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmlnaHQgbWVhc3VyZW1lbnQsIGF2b2lkIGF1
Z21lbnRhdGlvbgotICAgIDQgOgotICAgIC8vIE90aGVyd2lzZSBpbml0aWFsaXplIGZvciBob3Jp
em9udGFsIG9yIHZlcnRpY2FsIHByb3BlcnRpZXMKLSAgICBuYW1lID09PSAid2lkdGgiID8gMSA6
IDAsCi0KLSAgICB2YWwgPSAwOwotCi0gICAgZm9yICggOyBpIDwgNDsgaSArPSAyICkgewotICAg
IC8vIGJvdGggYm94IG1vZGVscyBleGNsdWRlIG1hcmdpbiwgc28gYWRkIGl0IGlmIHdlIHdhbnQg
aXQKLSAgICBpZiAoIGV4dHJhID09PSAibWFyZ2luIiApIHsKLSAgICB2YWwgKz0galF1ZXJ5LmNz
cyggZWxlbSwgZXh0cmEgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7Ci0gICAgfQot
Ci0gICAgaWYgKCBpc0JvcmRlckJveCApIHsKLSAgICAvLyBib3JkZXItYm94IGluY2x1ZGVzIHBh
ZGRpbmcsIHNvIHJlbW92ZSBpdCBpZiB3ZSB3YW50IGNvbnRlbnQKLSAgICBpZiAoIGV4dHJhID09
PSAiY29udGVudCIgKSB7Ci0gICAgdmFsIC09IGpRdWVyeS5jc3MoIGVsZW0sICJwYWRkaW5nIiAr
IGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTsKLSAgICB9Ci0KLSAgICAvLyBhdCB0aGlz
IHBvaW50LCBleHRyYSBpc24ndCBib3JkZXIgbm9yIG1hcmdpbiwgc28gcmVtb3ZlIGJvcmRlcgot
ICAgIGlmICggZXh0cmEgIT09ICJtYXJnaW4iICkgewotICAgIHZhbCAtPSBqUXVlcnkuY3NzKCBl
bGVtLCAiYm9yZGVyIiArIGNzc0V4cGFuZFsgaSBdICsgIldpZHRoIiwgdHJ1ZSwgc3R5bGVzICk7
Ci0gICAgfQotICAgIH0gZWxzZSB7Ci0gICAgLy8gYXQgdGhpcyBwb2ludCwgZXh0cmEgaXNuJ3Qg
Y29udGVudCwgc28gYWRkIHBhZGRpbmcKLSAgICB2YWwgKz0galF1ZXJ5LmNzcyggZWxlbSwgInBh
ZGRpbmciICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApOwotCi0gICAgLy8gYXQgdGhp
cyBwb2ludCwgZXh0cmEgaXNuJ3QgY29udGVudCBub3IgcGFkZGluZywgc28gYWRkIGJvcmRlcgot
ICAgIGlmICggZXh0cmEgIT09ICJwYWRkaW5nIiApIHsKLSAgICB2YWwgKz0galF1ZXJ5LmNzcygg
ZWxlbSwgImJvcmRlciIgKyBjc3NFeHBhbmRbIGkgXSArICJXaWR0aCIsIHRydWUsIHN0eWxlcyAp
OwotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbDsKLX0KLQotZnVuY3Rpb24g
Z2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKSB7Ci0KLSAgICAvLyBTdGFydCB3
aXRoIG9mZnNldCBwcm9wZXJ0eSwgd2hpY2ggaXMgZXF1aXZhbGVudCB0byB0aGUgYm9yZGVyLWJv
eCB2YWx1ZQotICAgIHZhciB2YWx1ZUlzQm9yZGVyQm94ID0gdHJ1ZSwKLSAgICB2YWwgPSBuYW1l
ID09PSAid2lkdGgiID8gZWxlbS5vZmZzZXRXaWR0aCA6IGVsZW0ub2Zmc2V0SGVpZ2h0LAotICAg
IHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApLAotICAgIGlzQm9yZGVyQm94ID0galF1ZXJ5LnN1
cHBvcnQuYm94U2l6aW5nICYmIGpRdWVyeS5jc3MoIGVsZW0sICJib3hTaXppbmciLCBmYWxzZSwg
c3R5bGVzICkgPT09ICJib3JkZXItYm94IjsKLQotICAgIC8vIHNvbWUgbm9uLWh0bWwgZWxlbWVu
dHMgcmV0dXJuIHVuZGVmaW5lZCBmb3Igb2Zmc2V0V2lkdGgsIHNvIGNoZWNrIGZvciBudWxsL3Vu
ZGVmaW5lZAotICAgIC8vIHN2ZyAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19i
dWcuY2dpP2lkPTY0OTI4NQotICAgIC8vIE1hdGhNTCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxs
YS5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MTY2OAotICAgIGlmICggdmFsIDw9IDAgfHwgdmFsID09
IG51bGwgKSB7Ci0gICAgLy8gRmFsbCBiYWNrIHRvIGNvbXB1dGVkIHRoZW4gdW5jb21wdXRlZCBj
c3MgaWYgbmVjZXNzYXJ5Ci0gICAgdmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTsK
LSAgICBpZiAoIHZhbCA8IDAgfHwgdmFsID09IG51bGwgKSB7Ci0gICAgdmFsID0gZWxlbS5zdHls
ZVsgbmFtZSBdOwotICAgIH0KLQotICAgIC8vIENvbXB1dGVkIHVuaXQgaXMgbm90IHBpeGVscy4g
U3RvcCBoZXJlIGFuZCByZXR1cm4uCi0gICAgaWYgKCBybnVtbm9ucHgudGVzdCh2YWwpICkgewot
ICAgIHJldHVybiB2YWw7Ci0gICAgfQotCi0gICAgLy8gd2UgbmVlZCB0aGUgY2hlY2sgZm9yIHN0
eWxlIGluIGNhc2UgYSBicm93c2VyIHdoaWNoIHJldHVybnMgdW5yZWxpYWJsZSB2YWx1ZXMKLSAg
ICAvLyBmb3IgZ2V0Q29tcHV0ZWRTdHlsZSBzaWxlbnRseSBmYWxscyBiYWNrIHRvIHRoZSByZWxp
YWJsZSBlbGVtLnN0eWxlCi0gICAgdmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94ICYmICgg
alF1ZXJ5LnN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUgfHwgdmFsID09PSBlbGVtLnN0eWxlWyBu
YW1lIF0gKTsKLQotICAgIC8vIE5vcm1hbGl6ZSAiIiwgYXV0bywgYW5kIHByZXBhcmUgZm9yIGV4
dHJhCi0gICAgdmFsID0gcGFyc2VGbG9hdCggdmFsICkgfHwgMDsKLSAgICB9Ci0KLSAgICAvLyB1
c2UgdGhlIGFjdGl2ZSBib3gtc2l6aW5nIG1vZGVsIHRvIGFkZC9zdWJ0cmFjdCBpcnJlbGV2YW50
IHN0eWxlcwotICAgIHJldHVybiAoIHZhbCArCi0gICAgYXVnbWVudFdpZHRoT3JIZWlnaHQoCi0g
ICAgZWxlbSwKLSAgICBuYW1lLAotICAgIGV4dHJhIHx8ICggaXNCb3JkZXJCb3ggPyAiYm9yZGVy
IiA6ICJjb250ZW50IiApLAotICAgIHZhbHVlSXNCb3JkZXJCb3gsCi0gICAgc3R5bGVzCi0gICAg
KQotICAgICkgKyAicHgiOwotfQotCi0vLyBUcnkgdG8gZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGRp
c3BsYXkgdmFsdWUgb2YgYW4gZWxlbWVudAotZnVuY3Rpb24gY3NzX2RlZmF1bHREaXNwbGF5KCBu
b2RlTmFtZSApIHsKLSAgICB2YXIgZG9jID0gZG9jdW1lbnQsCi0gICAgZGlzcGxheSA9IGVsZW1k
aXNwbGF5WyBub2RlTmFtZSBdOwotCi0gICAgaWYgKCAhZGlzcGxheSApIHsKLSAgICBkaXNwbGF5
ID0gYWN0dWFsRGlzcGxheSggbm9kZU5hbWUsIGRvYyApOwotCi0gICAgLy8gSWYgdGhlIHNpbXBs
ZSB3YXkgZmFpbHMsIHJlYWQgZnJvbSBpbnNpZGUgYW4gaWZyYW1lCi0gICAgaWYgKCBkaXNwbGF5
ID09PSAibm9uZSIgfHwgIWRpc3BsYXkgKSB7Ci0gICAgLy8gVXNlIHRoZSBhbHJlYWR5LWNyZWF0
ZWQgaWZyYW1lIGlmIHBvc3NpYmxlCi0gICAgaWZyYW1lID0gKCBpZnJhbWUgfHwKLSAgICBqUXVl
cnkoIjxpZnJhbWUgZnJhbWVib3JkZXI9JzAnIHdpZHRoPScwJyBoZWlnaHQ9JzAnLz4iKQotICAg
IC5jc3MoICJjc3NUZXh0IiwgImRpc3BsYXk6YmxvY2sgIWltcG9ydGFudCIgKQotICAgICkuYXBw
ZW5kVG8oIGRvYy5kb2N1bWVudEVsZW1lbnQgKTsKLQotICAgIC8vIEFsd2F5cyB3cml0ZSBhIG5l
dyBIVE1MIHNrZWxldG9uIHNvIFdlYmtpdCBhbmQgRmlyZWZveCBkb24ndCBjaG9rZSBvbiByZXVz
ZQotICAgIGRvYyA9ICggaWZyYW1lWzBdLmNvbnRlbnRXaW5kb3cgfHwgaWZyYW1lWzBdLmNvbnRl
bnREb2N1bWVudCApLmRvY3VtZW50OwotICAgIGRvYy53cml0ZSgiPCFkb2N0eXBlIGh0bWw+PGh0
bWw+PGJvZHk+Iik7Ci0gICAgZG9jLmNsb3NlKCk7Ci0KLSAgICBkaXNwbGF5ID0gYWN0dWFsRGlz
cGxheSggbm9kZU5hbWUsIGRvYyApOwotICAgIGlmcmFtZS5kZXRhY2goKTsKLSAgICB9Ci0KLSAg
ICAvLyBTdG9yZSB0aGUgY29ycmVjdCBkZWZhdWx0IGRpc3BsYXkKLSAgICBlbGVtZGlzcGxheVsg
bm9kZU5hbWUgXSA9IGRpc3BsYXk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRpc3BsYXk7Ci19Ci0K
LS8vIENhbGxlZCBPTkxZIGZyb20gd2l0aGluIGNzc19kZWZhdWx0RGlzcGxheQotZnVuY3Rpb24g
YWN0dWFsRGlzcGxheSggbmFtZSwgZG9jICkgewotICAgIHZhciBlbGVtID0galF1ZXJ5KCBkb2Mu
Y3JlYXRlRWxlbWVudCggbmFtZSApICkuYXBwZW5kVG8oIGRvYy5ib2R5ICksCi0gICAgZGlzcGxh
eSA9IGpRdWVyeS5jc3MoIGVsZW1bMF0sICJkaXNwbGF5IiApOwotICAgIGVsZW0ucmVtb3ZlKCk7
Ci0gICAgcmV0dXJuIGRpc3BsYXk7Ci19Ci0KLWpRdWVyeS5lYWNoKFsgImhlaWdodCIsICJ3aWR0
aCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7Ci0gICAgalF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0g
PSB7Ci0gICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQsIGV4dHJhICkgewotICAgIGlm
ICggY29tcHV0ZWQgKSB7Ci0gICAgLy8gY2VydGFpbiBlbGVtZW50cyBjYW4gaGF2ZSBkaW1lbnNp
b24gaW5mbyBpZiB3ZSBpbnZpc2libHkgc2hvdyB0aGVtCi0gICAgLy8gaG93ZXZlciwgaXQgbXVz
dCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIHRo
aXMKLSAgICByZXR1cm4gZWxlbS5vZmZzZXRXaWR0aCA9PT0gMCAmJiByZGlzcGxheXN3YXAudGVz
dCggalF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXkiICkgKSA/Ci0gICAgalF1ZXJ5LnN3YXAoIGVs
ZW0sIGNzc1Nob3csIGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBl
bGVtLCBuYW1lLCBleHRyYSApOwotICAgIH0pIDoKLSAgICBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVt
LCBuYW1lLCBleHRyYSApOwotICAgIH0KLSAgICB9LAotCi0gICAgc2V0OiBmdW5jdGlvbiggZWxl
bSwgdmFsdWUsIGV4dHJhICkgewotICAgIHZhciBzdHlsZXMgPSBleHRyYSAmJiBnZXRTdHlsZXMo
IGVsZW0gKTsKLSAgICByZXR1cm4gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBleHRy
YSA/Ci0gICAgYXVnbWVudFdpZHRoT3JIZWlnaHQoCi0gICAgZWxlbSwKLSAgICBuYW1lLAotICAg
IGV4dHJhLAotICAgIGpRdWVyeS5zdXBwb3J0LmJveFNpemluZyAmJiBqUXVlcnkuY3NzKCBlbGVt
LCAiYm94U2l6aW5nIiwgZmFsc2UsIHN0eWxlcyApID09PSAiYm9yZGVyLWJveCIsCi0gICAgc3R5
bGVzCi0gICAgKSA6IDAKLSAgICApOwotICAgIH0KLSAgICB9OwotfSk7Ci0KLWlmICggIWpRdWVy
eS5zdXBwb3J0Lm9wYWNpdHkgKSB7Ci0gICAgalF1ZXJ5LmNzc0hvb2tzLm9wYWNpdHkgPSB7Ci0g
ICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7Ci0gICAgLy8gSUUgdXNlcyBmaWx0
ZXJzIGZvciBvcGFjaXR5Ci0gICAgcmV0dXJuIHJvcGFjaXR5LnRlc3QoIChjb21wdXRlZCAmJiBl
bGVtLmN1cnJlbnRTdHlsZSA/IGVsZW0uY3VycmVudFN0eWxlLmZpbHRlciA6IGVsZW0uc3R5bGUu
ZmlsdGVyKSB8fCAiIiApID8KLSAgICAoIDAuMDEgKiBwYXJzZUZsb2F0KCBSZWdFeHAuJDEgKSAp
ICsgIiIgOgotICAgIGNvbXB1dGVkID8gIjEiIDogIiI7Ci0gICAgfSwKLQotICAgIHNldDogZnVu
Y3Rpb24oIGVsZW0sIHZhbHVlICkgewotICAgIHZhciBzdHlsZSA9IGVsZW0uc3R5bGUsCi0gICAg
Y3VycmVudFN0eWxlID0gZWxlbS5jdXJyZW50U3R5bGUsCi0gICAgb3BhY2l0eSA9IGpRdWVyeS5p
c051bWVyaWMoIHZhbHVlICkgPyAiYWxwaGEob3BhY2l0eT0iICsgdmFsdWUgKiAxMDAgKyAiKSIg
OiAiIiwKLSAgICBmaWx0ZXIgPSBjdXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLmZpbHRlciB8
fCBzdHlsZS5maWx0ZXIgfHwgIiI7Ci0KLSAgICAvLyBJRSBoYXMgdHJvdWJsZSB3aXRoIG9wYWNp
dHkgaWYgaXQgZG9lcyBub3QgaGF2ZSBsYXlvdXQKLSAgICAvLyBGb3JjZSBpdCBieSBzZXR0aW5n
IHRoZSB6b29tIGxldmVsCi0gICAgc3R5bGUuem9vbSA9IDE7Ci0KLSAgICAvLyBpZiBzZXR0aW5n
IG9wYWNpdHkgdG8gMSwgYW5kIG5vIG90aGVyIGZpbHRlcnMgZXhpc3QgLSBhdHRlbXB0IHRvIHJl
bW92ZSBmaWx0ZXIgYXR0cmlidXRlICM2NjUyCi0gICAgLy8gaWYgdmFsdWUgPT09ICIiLCB0aGVu
IHJlbW92ZSBpbmxpbmUgb3BhY2l0eSAjMTI2ODUKLSAgICBpZiAoICggdmFsdWUgPj0gMSB8fCB2
YWx1ZSA9PT0gIiIgKSAmJgotICAgIGpRdWVyeS50cmltKCBmaWx0ZXIucmVwbGFjZSggcmFscGhh
LCAiIiApICkgPT09ICIiICYmCi0gICAgc3R5bGUucmVtb3ZlQXR0cmlidXRlICkgewotCi0gICAg
Ly8gU2V0dGluZyBzdHlsZS5maWx0ZXIgdG8gbnVsbCwgIiIgJiAiICIgc3RpbGwgbGVhdmUgImZp
bHRlcjoiIGluIHRoZSBjc3NUZXh0Ci0gICAgLy8gaWYgImZpbHRlcjoiIGlzIHByZXNlbnQgYXQg
YWxsLCBjbGVhclR5cGUgaXMgZGlzYWJsZWQsIHdlIHdhbnQgdG8gYXZvaWQgdGhpcwotICAgIC8v
IHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSBpcyBJRSBPbmx5LCBidXQgc28gYXBwYXJlbnRseSBpcyB0
aGlzIGNvZGUgcGF0aC4uLgotICAgIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSggImZpbHRlciIgKTsK
LQotICAgIC8vIGlmIHRoZXJlIGlzIG5vIGZpbHRlciBzdHlsZSBhcHBsaWVkIGluIGEgY3NzIHJ1
bGUgb3IgdW5zZXQgaW5saW5lIG9wYWNpdHksIHdlIGFyZSBkb25lCi0gICAgaWYgKCB2YWx1ZSA9
PT0gIiIgfHwgY3VycmVudFN0eWxlICYmICFjdXJyZW50U3R5bGUuZmlsdGVyICkgewotICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgfQotCi0gICAgLy8gb3RoZXJ3aXNlLCBzZXQgbmV3IGZpbHRlciB2
YWx1ZXMKLSAgICBzdHlsZS5maWx0ZXIgPSByYWxwaGEudGVzdCggZmlsdGVyICkgPwotICAgIGZp
bHRlci5yZXBsYWNlKCByYWxwaGEsIG9wYWNpdHkgKSA6Ci0gICAgZmlsdGVyICsgIiAiICsgb3Bh
Y2l0eTsKLSAgICB9Ci0gICAgfTsKLX0KLQotLy8gVGhlc2UgaG9va3MgY2Fubm90IGJlIGFkZGVk
IHVudGlsIERPTSByZWFkeSBiZWNhdXNlIHRoZSBzdXBwb3J0IHRlc3QKLS8vIGZvciBpdCBpcyBu
b3QgcnVuIHVudGlsIGFmdGVyIERPTSByZWFkeQotalF1ZXJ5KGZ1bmN0aW9uKCkgewotICAgIGlm
ICggIWpRdWVyeS5zdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHQgKSB7Ci0gICAgalF1ZXJ5LmNz
c0hvb2tzLm1hcmdpblJpZ2h0ID0gewotICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVk
ICkgewotICAgIGlmICggY29tcHV0ZWQgKSB7Ci0gICAgLy8gV2ViS2l0IEJ1ZyAxMzM0MyAtIGdl
dENvbXB1dGVkU3R5bGUgcmV0dXJucyB3cm9uZyB2YWx1ZSBmb3IgbWFyZ2luLXJpZ2h0Ci0gICAg
Ly8gV29yayBhcm91bmQgYnkgdGVtcG9yYXJpbHkgc2V0dGluZyBlbGVtZW50IGRpc3BsYXkgdG8g
aW5saW5lLWJsb2NrCi0gICAgcmV0dXJuIGpRdWVyeS5zd2FwKCBlbGVtLCB7ICJkaXNwbGF5Ijog
ImlubGluZS1ibG9jayIgfSwKLSAgICBjdXJDU1MsIFsgZWxlbSwgIm1hcmdpblJpZ2h0IiBdICk7
Ci0gICAgfQotICAgIH0KLSAgICB9OwotICAgIH0KLQotICAgIC8vIFdlYmtpdCBidWc6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA4NAotICAgIC8vIGdldENvbXB1
dGVkU3R5bGUgcmV0dXJucyBwZXJjZW50IHdoZW4gc3BlY2lmaWVkIGZvciB0b3AvbGVmdC9ib3R0
b20vcmlnaHQKLSAgICAvLyByYXRoZXIgdGhhbiBtYWtlIHRoZSBjc3MgbW9kdWxlIGRlcGVuZCBv
biB0aGUgb2Zmc2V0IG1vZHVsZSwgd2UganVzdCBjaGVjayBmb3IgaXQgaGVyZQotICAgIGlmICgg
IWpRdWVyeS5zdXBwb3J0LnBpeGVsUG9zaXRpb24gJiYgalF1ZXJ5LmZuLnBvc2l0aW9uICkgewot
ICAgIGpRdWVyeS5lYWNoKCBbICJ0b3AiLCAibGVmdCIgXSwgZnVuY3Rpb24oIGksIHByb3AgKSB7
Ci0gICAgalF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSB7Ci0gICAgZ2V0OiBmdW5jdGlvbiggZWxl
bSwgY29tcHV0ZWQgKSB7Ci0gICAgaWYgKCBjb21wdXRlZCApIHsKLSAgICBjb21wdXRlZCA9IGN1
ckNTUyggZWxlbSwgcHJvcCApOwotICAgIC8vIGlmIGN1ckNTUyByZXR1cm5zIHBlcmNlbnRhZ2Us
IGZhbGxiYWNrIHRvIG9mZnNldAotICAgIHJldHVybiBybnVtbm9ucHgudGVzdCggY29tcHV0ZWQg
KSA/Ci0gICAgalF1ZXJ5KCBlbGVtICkucG9zaXRpb24oKVsgcHJvcCBdICsgInB4IiA6Ci0gICAg
Y29tcHV0ZWQ7Ci0gICAgfQotICAgIH0KLSAgICB9OwotICAgIH0pOwotICAgIH0KLQotfSk7Ci0K
LWlmICggalF1ZXJ5LmV4cHIgJiYgalF1ZXJ5LmV4cHIuZmlsdGVycyApIHsKLSAgICBqUXVlcnku
ZXhwci5maWx0ZXJzLmhpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIC8vIFN1cHBvcnQ6
IE9wZXJhIDw9IDEyLjEyCi0gICAgLy8gT3BlcmEgcmVwb3J0cyBvZmZzZXRXaWR0aHMgYW5kIG9m
ZnNldEhlaWdodHMgbGVzcyB0aGFuIHplcm8gb24gc29tZSBlbGVtZW50cwotICAgIHJldHVybiBl
bGVtLm9mZnNldFdpZHRoIDw9IDAgJiYgZWxlbS5vZmZzZXRIZWlnaHQgPD0gMCB8fAotICAgICgh
alF1ZXJ5LnN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzICYmICgoZWxlbS5zdHlsZSAmJiBl
bGVtLnN0eWxlLmRpc3BsYXkpIHx8IGpRdWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApKSA9PT0g
Im5vbmUiKTsKLSAgICB9OwotCi0gICAgalF1ZXJ5LmV4cHIuZmlsdGVycy52aXNpYmxlID0gZnVu
Y3Rpb24oIGVsZW0gKSB7Ci0gICAgcmV0dXJuICFqUXVlcnkuZXhwci5maWx0ZXJzLmhpZGRlbigg
ZWxlbSApOwotICAgIH07Ci19Ci0KLS8vIFRoZXNlIGhvb2tzIGFyZSB1c2VkIGJ5IGFuaW1hdGUg
dG8gZXhwYW5kIHByb3BlcnRpZXMKLWpRdWVyeS5lYWNoKHsKLSAgICBtYXJnaW46ICIiLAotICAg
IHBhZGRpbmc6ICIiLAotICAgIGJvcmRlcjogIldpZHRoIgotfSwgZnVuY3Rpb24oIHByZWZpeCwg
c3VmZml4ICkgewotICAgIGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0gPSB7Ci0g
ICAgZXhwYW5kOiBmdW5jdGlvbiggdmFsdWUgKSB7Ci0gICAgdmFyIGkgPSAwLAotICAgIGV4cGFu
ZGVkID0ge30sCi0KLSAgICAvLyBhc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJp
bmcKLSAgICBwYXJ0cyA9IHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgPyB2YWx1ZS5zcGxpdCgi
ICIpIDogWyB2YWx1ZSBdOwotCi0gICAgZm9yICggOyBpIDwgNDsgaSsrICkgewotICAgIGV4cGFu
ZGVkWyBwcmVmaXggKyBjc3NFeHBhbmRbIGkgXSArIHN1ZmZpeCBdID0KLSAgICBwYXJ0c1sgaSBd
IHx8IHBhcnRzWyBpIC0gMiBdIHx8IHBhcnRzWyAwIF07Ci0gICAgfQotCi0gICAgcmV0dXJuIGV4
cGFuZGVkOwotICAgIH0KLSAgICB9OwotCi0gICAgaWYgKCAhcm1hcmdpbi50ZXN0KCBwcmVmaXgg
KSApIHsKLSAgICBqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdLnNldCA9IHNldFBv
c2l0aXZlTnVtYmVyOwotICAgIH0KLX0pOwotdmFyIHIyMCA9IC8lMjAvZywKLSAgICByYnJhY2tl
dCA9IC9cW1xdJC8sCi0gICAgckNSTEYgPSAvXHI/XG4vZywKLSAgICByc3VibWl0dGVyVHlwZXMg
PSAvXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksCi0gICAgcnN1Ym1pdHRh
YmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pOwotCi1qUXVlcnkuZm4u
ZXh0ZW5kKHsKLSAgICBzZXJpYWxpemU6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBqUXVlcnku
cGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApOwotICAgIH0sCi0gICAgc2VyaWFsaXplQXJy
YXk6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbigpewotICAgIC8v
IENhbiBhZGQgcHJvcEhvb2sgZm9yICJlbGVtZW50cyIgdG8gZmlsdGVyIG9yIGFkZCBmb3JtIGVs
ZW1lbnRzCi0gICAgdmFyIGVsZW1lbnRzID0galF1ZXJ5LnByb3AoIHRoaXMsICJlbGVtZW50cyIg
KTsKLSAgICByZXR1cm4gZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCBlbGVtZW50cyApIDog
dGhpczsKLSAgICB9KQotICAgIC5maWx0ZXIoZnVuY3Rpb24oKXsKLSAgICB2YXIgdHlwZSA9IHRo
aXMudHlwZTsKLSAgICAvLyBVc2UgLmlzKCI6ZGlzYWJsZWQiKSBzbyB0aGF0IGZpZWxkc2V0W2Rp
c2FibGVkXSB3b3JrcwotICAgIHJldHVybiB0aGlzLm5hbWUgJiYgIWpRdWVyeSggdGhpcyApLmlz
KCAiOmRpc2FibGVkIiApICYmCi0gICAgcnN1Ym1pdHRhYmxlLnRlc3QoIHRoaXMubm9kZU5hbWUg
KSAmJiAhcnN1Ym1pdHRlclR5cGVzLnRlc3QoIHR5cGUgKSAmJgotICAgICggdGhpcy5jaGVja2Vk
IHx8ICFtYW5pcHVsYXRpb25fcmNoZWNrYWJsZVR5cGUudGVzdCggdHlwZSApICk7Ci0gICAgfSkK
LSAgICAubWFwKGZ1bmN0aW9uKCBpLCBlbGVtICl7Ci0gICAgdmFyIHZhbCA9IGpRdWVyeSggdGhp
cyApLnZhbCgpOwotCi0gICAgcmV0dXJuIHZhbCA9PSBudWxsID8KLSAgICBudWxsIDoKLSAgICBq
UXVlcnkuaXNBcnJheSggdmFsICkgPwotICAgIGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZh
bCApewotICAgIHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCBy
Q1JMRiwgIlxyXG4iICkgfTsKLSAgICB9KSA6Ci0gICAgeyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVl
OiB2YWwucmVwbGFjZSggckNSTEYsICJcclxuIiApIH07Ci0gICAgfSkuZ2V0KCk7Ci0gICAgfQot
fSk7Ci0KLS8vU2VyaWFsaXplIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2YK
LS8va2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3RyaW5nCi1qUXVlcnkucGFyYW0gPSBmdW5jdGlv
biggYSwgdHJhZGl0aW9uYWwgKSB7Ci0gICAgdmFyIHByZWZpeCwKLSAgICBzID0gW10sCi0gICAg
YWRkID0gZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7Ci0gICAgLy8gSWYgdmFsdWUgaXMgYSBmdW5j
dGlvbiwgaW52b2tlIGl0IGFuZCByZXR1cm4gaXRzIHZhbHVlCi0gICAgdmFsdWUgPSBqUXVlcnku
aXNGdW5jdGlvbiggdmFsdWUgKSA/IHZhbHVlKCkgOiAoIHZhbHVlID09IG51bGwgPyAiIiA6IHZh
bHVlICk7Ci0gICAgc1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyAi
PSIgKyBlbmNvZGVVUklDb21wb25lbnQoIHZhbHVlICk7Ci0gICAgfTsKLQotICAgIC8vIFNldCB0
cmFkaXRpb25hbCB0byB0cnVlIGZvciBqUXVlcnkgPD0gMS4zLjIgYmVoYXZpb3IuCi0gICAgaWYg
KCB0cmFkaXRpb25hbCA9PT0gdW5kZWZpbmVkICkgewotICAgIHRyYWRpdGlvbmFsID0galF1ZXJ5
LmFqYXhTZXR0aW5ncyAmJiBqUXVlcnkuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsOwotICAgIH0K
LQotICAgIC8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFu
IGFycmF5IG9mIGZvcm0gZWxlbWVudHMuCi0gICAgaWYgKCBqUXVlcnkuaXNBcnJheSggYSApIHx8
ICggYS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHsKLSAgICAvLyBT
ZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHMKLSAgICBqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24o
KSB7Ci0gICAgYWRkKCB0aGlzLm5hbWUsIHRoaXMudmFsdWUgKTsKLSAgICB9KTsKLQotICAgIH0g
ZWxzZSB7Ci0gICAgLy8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgIm9sZCIgd2F5ICh0aGUg
d2F5IDEuMy4yIG9yIG9sZGVyCi0gICAgLy8gZGlkIGl0KSwgb3RoZXJ3aXNlIGVuY29kZSBwYXJh
bXMgcmVjdXJzaXZlbHkuCi0gICAgZm9yICggcHJlZml4IGluIGEgKSB7Ci0gICAgYnVpbGRQYXJh
bXMoIHByZWZpeCwgYVsgcHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTsKLSAgICB9Ci0gICAg
fQotCi0gICAgLy8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvbgotICAgIHJldHVy
biBzLmpvaW4oICImIiApLnJlcGxhY2UoIHIyMCwgIisiICk7Ci19OwotCi1mdW5jdGlvbiBidWls
ZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlvbmFsLCBhZGQgKSB7Ci0gICAgdmFyIG5hbWU7
Ci0KLSAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCBvYmogKSApIHsKLSAgICAvLyBTZXJpYWxpemUg
YXJyYXkgaXRlbS4KLSAgICBqUXVlcnkuZWFjaCggb2JqLCBmdW5jdGlvbiggaSwgdiApIHsKLSAg
ICBpZiAoIHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkgewotICAgIC8v
IFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci4KLSAgICBhZGQoIHByZWZpeCwgdiAp
OwotCi0gICAgfSBlbHNlIHsKLSAgICAvLyBJdGVtIGlzIG5vbi1zY2FsYXIgKGFycmF5IG9yIG9i
amVjdCksIGVuY29kZSBpdHMgbnVtZXJpYyBpbmRleC4KLSAgICBidWlsZFBhcmFtcyggcHJlZml4
ICsgIlsiICsgKCB0eXBlb2YgdiA9PT0gIm9iamVjdCIgPyBpIDogIiIgKSArICJdIiwgdiwgdHJh
ZGl0aW9uYWwsIGFkZCApOwotICAgIH0KLSAgICB9KTsKLQotICAgIH0gZWxzZSBpZiAoICF0cmFk
aXRpb25hbCAmJiBqUXVlcnkudHlwZSggb2JqICkgPT09ICJvYmplY3QiICkgewotICAgIC8vIFNl
cmlhbGl6ZSBvYmplY3QgaXRlbS4KLSAgICBmb3IgKCBuYW1lIGluIG9iaiApIHsKLSAgICBidWls
ZFBhcmFtcyggcHJlZml4ICsgIlsiICsgbmFtZSArICJdIiwgb2JqWyBuYW1lIF0sIHRyYWRpdGlv
bmFsLCBhZGQgKTsKLSAgICB9Ci0KLSAgICB9IGVsc2UgewotICAgIC8vIFNlcmlhbGl6ZSBzY2Fs
YXIgaXRlbS4KLSAgICBhZGQoIHByZWZpeCwgb2JqICk7Ci0gICAgfQotfQotalF1ZXJ5LmVhY2go
ICgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQg
Y2xpY2sgZGJsY2xpY2sgIiArCi0gICAgIm1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3Vz
ZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlICIgKwotICAgICJjaGFuZ2Ugc2Vs
ZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIGNvbnRleHRtZW51Iikuc3Bs
aXQoIiAiKSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7Ci0KLSAgICAvLyBIYW5kbGUgZXZlbnQgYmlu
ZGluZwotICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkgewotICAg
IHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/Ci0gICAgdGhpcy5vbiggbmFtZSwgbnVsbCwg
ZGF0YSwgZm4gKSA6Ci0gICAgdGhpcy50cmlnZ2VyKCBuYW1lICk7Ci0gICAgfTsKLX0pOwotCi1q
UXVlcnkuZm4uaG92ZXIgPSBmdW5jdGlvbiggZm5PdmVyLCBmbk91dCApIHsKLSAgICByZXR1cm4g
dGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIgKTsK
LX07Ci12YXIKLSAgICAvLyBEb2N1bWVudCBsb2NhdGlvbgotICAgIGFqYXhMb2NQYXJ0cywKLSAg
ICBhamF4TG9jYXRpb24sCi0gICAgYWpheF9ub25jZSA9IGpRdWVyeS5ub3coKSwKLQotICAgIGFq
YXhfcnF1ZXJ5ID0gL1w/LywKLSAgICByaGFzaCA9IC8jLiokLywKLSAgICBydHMgPSAvKFs/Jl0p
Xz1bXiZdKi8sCi0gICAgcmhlYWRlcnMgPSAvXiguKj8pOlsgXHRdKihbXlxyXG5dKilccj8kL21n
LCAvLyBJRSBsZWF2ZXMgYW4gXHIgY2hhcmFjdGVyIGF0IEVPTAotICAgIC8vICM3NjUzLCAjODEy
NSwgIzgxNTI6IGxvY2FsIHByb3RvY29sIGRldGVjdGlvbgotICAgIHJsb2NhbFByb3RvY29sID0g
L14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6
JC8sCi0gICAgcm5vQ29udGVudCA9IC9eKD86R0VUfEhFQUQpJC8sCi0gICAgcnByb3RvY29sID0g
L15cL1wvLywKLSAgICBydXJsID0gL14oW1x3ListXSs6KSg/OlwvXC8oW15cLz8jOl0qKSg/Ojoo
XGQrKXwpfCkvLAotCi0gICAgLy8gS2VlcCBhIGNvcHkgb2YgdGhlIG9sZCBsb2FkIG1ldGhvZAot
ICAgIF9sb2FkID0galF1ZXJ5LmZuLmxvYWQsCi0KLSAgICAvKiBQcmVmaWx0ZXJzCi0gICAgICog
MSkgVGhleSBhcmUgdXNlZnVsIHRvIGludHJvZHVjZSBjdXN0b20gZGF0YVR5cGVzIChzZWUgYWph
eC9qc29ucC5qcyBmb3IgYW4gZXhhbXBsZSkKLSAgICAgKiAyKSBUaGVzZSBhcmUgY2FsbGVkOgot
ICAgICAqICAgIC0gQkVGT1JFIGFza2luZyBmb3IgYSB0cmFuc3BvcnQKLSAgICAgKiAgICAtIEFG
VEVSIHBhcmFtIHNlcmlhbGl6YXRpb24gKHMuZGF0YSBpcyBhIHN0cmluZyBpZiBzLnByb2Nlc3NE
YXRhIGlzIHRydWUpCi0gICAgICogMykga2V5IGlzIHRoZSBkYXRhVHlwZQotICAgICAqIDQpIHRo
ZSBjYXRjaGFsbCBzeW1ib2wgIioiIGNhbiBiZSB1c2VkCi0gICAgICogNSkgZXhlY3V0aW9uIHdp
bGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gY29udGludWUgZG93biB0
byAiKiIgaWYgbmVlZGVkCi0gICAgICovCi0gICAgcHJlZmlsdGVycyA9IHt9LAotCi0gICAgLyog
VHJhbnNwb3J0cyBiaW5kaW5ncwotICAgICAqIDEpIGtleSBpcyB0aGUgZGF0YVR5cGUKLSAgICAg
KiAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sICIqIiBjYW4gYmUgdXNlZAotICAgICAqIDMpIHNlbGVj
dGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGdvIHRvICIq
IiBpZiBuZWVkZWQKLSAgICAgKi8KLSAgICB0cmFuc3BvcnRzID0ge30sCi0KLSAgICAvLyBBdm9p
ZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICgjMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGlu
dCBhbmQgZXZhZGUgY29tcHJlc3Npb24KLSAgICBhbGxUeXBlcyA9ICIqLyIuY29uY2F0KCIqIik7
Ci0KLS8vICM4MTM4LCBJRSBtYXkgdGhyb3cgYW4gZXhjZXB0aW9uIHdoZW4gYWNjZXNzaW5nCi0v
LyBhIGZpZWxkIGZyb20gd2luZG93LmxvY2F0aW9uIGlmIGRvY3VtZW50LmRvbWFpbiBoYXMgYmVl
biBzZXQKLXRyeSB7Ci0gICAgYWpheExvY2F0aW9uID0gbG9jYXRpb24uaHJlZjsKLX0gY2F0Y2go
IGUgKSB7Ci0gICAgLy8gVXNlIHRoZSBocmVmIGF0dHJpYnV0ZSBvZiBhbiBBIGVsZW1lbnQKLSAg
ICAvLyBzaW5jZSBJRSB3aWxsIG1vZGlmeSBpdCBnaXZlbiBkb2N1bWVudC5sb2NhdGlvbgotICAg
IGFqYXhMb2NhdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJhIiApOwotICAgIGFqYXhM
b2NhdGlvbi5ocmVmID0gIiI7Ci0gICAgYWpheExvY2F0aW9uID0gYWpheExvY2F0aW9uLmhyZWY7
Ci19Ci0KLS8vIFNlZ21lbnQgbG9jYXRpb24gaW50byBwYXJ0cwotYWpheExvY1BhcnRzID0gcnVy
bC5leGVjKCBhamF4TG9jYXRpb24udG9Mb3dlckNhc2UoKSApIHx8IFtdOwotCi0vLyBCYXNlICJj
b25zdHJ1Y3RvciIgZm9yIGpRdWVyeS5hamF4UHJlZmlsdGVyIGFuZCBqUXVlcnkuYWpheFRyYW5z
cG9ydAotZnVuY3Rpb24gYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUgKSB7
Ci0KLSAgICAvLyBkYXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRv
ICIqIgotICAgIHJldHVybiBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNzaW9uLCBmdW5jICkgewot
Ci0gICAgaWYgKCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSAic3RyaW5nIiApIHsKLSAg
ICBmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uOwotICAgIGRhdGFUeXBlRXhwcmVzc2lvbiA9ICIq
IjsKLSAgICB9Ci0KLSAgICB2YXIgZGF0YVR5cGUsCi0gICAgaSA9IDAsCi0gICAgZGF0YVR5cGVz
ID0gZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJDYXNlKCkubWF0Y2goIGNvcmVfcm5vdHdoaXRl
ICkgfHwgW107Ci0KLSAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBmdW5jICkgKSB7Ci0gICAg
Ly8gRm9yIGVhY2ggZGF0YVR5cGUgaW4gdGhlIGRhdGFUeXBlRXhwcmVzc2lvbgotICAgIHdoaWxl
ICggKGRhdGFUeXBlID0gZGF0YVR5cGVzW2krK10pICkgewotICAgIC8vIFByZXBlbmQgaWYgcmVx
dWVzdGVkCi0gICAgaWYgKCBkYXRhVHlwZVswXSA9PT0gIisiICkgewotICAgIGRhdGFUeXBlID0g
ZGF0YVR5cGUuc2xpY2UoIDEgKSB8fCAiKiI7Ci0gICAgKHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9
IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSkudW5zaGlmdCggZnVuYyApOwotCi0gICAgLy8g
T3RoZXJ3aXNlIGFwcGVuZAotICAgIH0gZWxzZSB7Ci0gICAgKHN0cnVjdHVyZVsgZGF0YVR5cGUg
XSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSkucHVzaCggZnVuYyApOwotICAgIH0KLSAg
ICB9Ci0gICAgfQotICAgIH07Ci19Ci0KLS8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3Ig
cHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0cwotZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRy
YW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApIHsK
LQotICAgIHZhciBpbnNwZWN0ZWQgPSB7fSwKLSAgICBzZWVraW5nVHJhbnNwb3J0ID0gKCBzdHJ1
Y3R1cmUgPT09IHRyYW5zcG9ydHMgKTsKLQotICAgIGZ1bmN0aW9uIGluc3BlY3QoIGRhdGFUeXBl
ICkgewotICAgIHZhciBzZWxlY3RlZDsKLSAgICBpbnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVl
OwotICAgIGpRdWVyeS5lYWNoKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10sIGZ1bmN0aW9u
KCBfLCBwcmVmaWx0ZXJPckZhY3RvcnkgKSB7Ci0gICAgdmFyIGRhdGFUeXBlT3JUcmFuc3BvcnQg
PSBwcmVmaWx0ZXJPckZhY3RvcnkoIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKTsK
LSAgICBpZiggdHlwZW9mIGRhdGFUeXBlT3JUcmFuc3BvcnQgPT09ICJzdHJpbmciICYmICFzZWVr
aW5nVHJhbnNwb3J0ICYmICFpbnNwZWN0ZWRbIGRhdGFUeXBlT3JUcmFuc3BvcnQgXSApIHsKLSAg
ICBvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7Ci0gICAg
aW5zcGVjdCggZGF0YVR5cGVPclRyYW5zcG9ydCApOwotICAgIHJldHVybiBmYWxzZTsKLSAgICB9
IGVsc2UgaWYgKCBzZWVraW5nVHJhbnNwb3J0ICkgewotICAgIHJldHVybiAhKCBzZWxlY3RlZCA9
IGRhdGFUeXBlT3JUcmFuc3BvcnQgKTsKLSAgICB9Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHNlbGVj
dGVkOwotICAgIH0KLQotICAgIHJldHVybiBpbnNwZWN0KCBvcHRpb25zLmRhdGFUeXBlc1sgMCBd
ICkgfHwgIWluc3BlY3RlZFsgIioiIF0gJiYgaW5zcGVjdCggIioiICk7Ci19Ci0KLS8vIEEgc3Bl
Y2lhbCBleHRlbmQgZm9yIGFqYXggb3B0aW9ucwotLy8gdGhhdCB0YWtlcyAiZmxhdCIgb3B0aW9u
cyAobm90IHRvIGJlIGRlZXAgZXh0ZW5kZWQpCi0vLyBGaXhlcyAjOTg4NwotZnVuY3Rpb24gYWph
eEV4dGVuZCggdGFyZ2V0LCBzcmMgKSB7Ci0gICAgdmFyIGRlZXAsIGtleSwKLSAgICBmbGF0T3B0
aW9ucyA9IGpRdWVyeS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307Ci0KLSAgICBmb3Ig
KCBrZXkgaW4gc3JjICkgewotICAgIGlmICggc3JjWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkgewot
ICAgICggZmxhdE9wdGlvbnNbIGtleSBdID8gdGFyZ2V0IDogKCBkZWVwIHx8IChkZWVwID0ge30p
ICkgKVsga2V5IF0gPSBzcmNbIGtleSBdOwotICAgIH0KLSAgICB9Ci0gICAgaWYgKCBkZWVwICkg
ewotICAgIGpRdWVyeS5leHRlbmQoIHRydWUsIHRhcmdldCwgZGVlcCApOwotICAgIH0KLQotICAg
IHJldHVybiB0YXJnZXQ7Ci19Ci0KLWpRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVybCwgcGFy
YW1zLCBjYWxsYmFjayApIHsKLSAgICBpZiAoIHR5cGVvZiB1cmwgIT09ICJzdHJpbmciICYmIF9s
b2FkICkgewotICAgIHJldHVybiBfbG9hZC5hcHBseSggdGhpcywgYXJndW1lbnRzICk7Ci0gICAg
fQotCi0gICAgdmFyIHNlbGVjdG9yLCByZXNwb25zZSwgdHlwZSwKLSAgICBzZWxmID0gdGhpcywK
LSAgICBvZmYgPSB1cmwuaW5kZXhPZigiICIpOwotCi0gICAgaWYgKCBvZmYgPj0gMCApIHsKLSAg
ICBzZWxlY3RvciA9IHVybC5zbGljZSggb2ZmLCB1cmwubGVuZ3RoICk7Ci0gICAgdXJsID0gdXJs
LnNsaWNlKCAwLCBvZmYgKTsKLSAgICB9Ci0KLSAgICAvLyBJZiBpdCdzIGEgZnVuY3Rpb24KLSAg
ICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHsKLQotICAgIC8vIFdlIGFzc3Vt
ZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNrCi0gICAgY2FsbGJhY2sgPSBwYXJhbXM7Ci0gICAgcGFy
YW1zID0gdW5kZWZpbmVkOwotCi0gICAgLy8gT3RoZXJ3aXNlLCBidWlsZCBhIHBhcmFtIHN0cmlu
ZwotICAgIH0gZWxzZSBpZiAoIHBhcmFtcyAmJiB0eXBlb2YgcGFyYW1zID09PSAib2JqZWN0IiAp
IHsKLSAgICB0eXBlID0gIlBPU1QiOwotICAgIH0KLQotICAgIC8vIElmIHdlIGhhdmUgZWxlbWVu
dHMgdG8gbW9kaWZ5LCBtYWtlIHRoZSByZXF1ZXN0Ci0gICAgaWYgKCBzZWxmLmxlbmd0aCA+IDAg
KSB7Ci0gICAgalF1ZXJ5LmFqYXgoewotICAgIHVybDogdXJsLAotCi0gICAgLy8gaWYgInR5cGUi
IHZhcmlhYmxlIGlzIHVuZGVmaW5lZCwgdGhlbiAiR0VUIiBtZXRob2Qgd2lsbCBiZSB1c2VkCi0g
ICAgdHlwZTogdHlwZSwKLSAgICBkYXRhVHlwZTogImh0bWwiLAotICAgIGRhdGE6IHBhcmFtcwot
ICAgIH0pLmRvbmUoZnVuY3Rpb24oIHJlc3BvbnNlVGV4dCApIHsKLQotICAgIC8vIFNhdmUgcmVz
cG9uc2UgZm9yIHVzZSBpbiBjb21wbGV0ZSBjYWxsYmFjawotICAgIHJlc3BvbnNlID0gYXJndW1l
bnRzOwotCi0gICAgc2VsZi5odG1sKCBzZWxlY3RvciA/Ci0KLSAgICAvLyBJZiBhIHNlbGVjdG9y
IHdhcyBzcGVjaWZpZWQsIGxvY2F0ZSB0aGUgcmlnaHQgZWxlbWVudHMgaW4gYSBkdW1teSBkaXYK
LSAgICAvLyBFeGNsdWRlIHNjcmlwdHMgdG8gYXZvaWQgSUUgJ1Blcm1pc3Npb24gRGVuaWVkJyBl
cnJvcnMKLSAgICBqUXVlcnkoIjxkaXY+IikuYXBwZW5kKCBqUXVlcnkucGFyc2VIVE1MKCByZXNw
b25zZVRleHQgKSApLmZpbmQoIHNlbGVjdG9yICkgOgotCi0gICAgLy8gT3RoZXJ3aXNlIHVzZSB0
aGUgZnVsbCByZXN1bHQKLSAgICByZXNwb25zZVRleHQgKTsKLQotICAgIH0pLmNvbXBsZXRlKCBj
YWxsYmFjayAmJiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHsKLSAgICBzZWxmLmVhY2goIGNh
bGxiYWNrLCByZXNwb25zZSB8fCBbIGpxWEhSLnJlc3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhIUiBd
ICk7Ci0gICAgfSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRoaXM7Ci19OwotCi0vLyBBdHRhY2gg
YSBidW5jaCBvZiBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIGNvbW1vbiBBSkFYIGV2ZW50cwotalF1
ZXJ5LmVhY2goIFsgImFqYXhTdGFydCIsICJhamF4U3RvcCIsICJhamF4Q29tcGxldGUiLCAiYWph
eEVycm9yIiwgImFqYXhTdWNjZXNzIiwgImFqYXhTZW5kIiBdLCBmdW5jdGlvbiggaSwgdHlwZSAp
ewotICAgIGpRdWVyeS5mblsgdHlwZSBdID0gZnVuY3Rpb24oIGZuICl7Ci0gICAgcmV0dXJuIHRo
aXMub24oIHR5cGUsIGZuICk7Ci0gICAgfTsKLX0pOwotCi1qUXVlcnkuZWFjaCggWyAiZ2V0Iiwg
InBvc3QiIF0sIGZ1bmN0aW9uKCBpLCBtZXRob2QgKSB7Ci0gICAgalF1ZXJ5WyBtZXRob2QgXSA9
IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkgewotICAgIC8vIHNoaWZ0IGFy
Z3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVkCi0gICAgaWYgKCBqUXVlcnkuaXNG
dW5jdGlvbiggZGF0YSApICkgewotICAgIHR5cGUgPSB0eXBlIHx8IGNhbGxiYWNrOwotICAgIGNh
bGxiYWNrID0gZGF0YTsKLSAgICBkYXRhID0gdW5kZWZpbmVkOwotICAgIH0KLQotICAgIHJldHVy
biBqUXVlcnkuYWpheCh7Ci0gICAgdXJsOiB1cmwsCi0gICAgdHlwZTogbWV0aG9kLAotICAgIGRh
dGFUeXBlOiB0eXBlLAotICAgIGRhdGE6IGRhdGEsCi0gICAgc3VjY2VzczogY2FsbGJhY2sKLSAg
ICB9KTsKLSAgICB9OwotfSk7Ci0KLWpRdWVyeS5leHRlbmQoewotCi0gICAgLy8gQ291bnRlciBm
b3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzCi0gICAgYWN0aXZlOiAwLAot
Ci0gICAgLy8gTGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdAotICAg
IGxhc3RNb2RpZmllZDoge30sCi0gICAgZXRhZzoge30sCi0KLSAgICBhamF4U2V0dGluZ3M6IHsK
LSAgICB1cmw6IGFqYXhMb2NhdGlvbiwKLSAgICB0eXBlOiAiR0VUIiwKLSAgICBpc0xvY2FsOiBy
bG9jYWxQcm90b2NvbC50ZXN0KCBhamF4TG9jUGFydHNbIDEgXSApLAotICAgIGdsb2JhbDogdHJ1
ZSwKLSAgICBwcm9jZXNzRGF0YTogdHJ1ZSwKLSAgICBhc3luYzogdHJ1ZSwKLSAgICBjb250ZW50
VHlwZTogImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIs
Ci0gICAgLyoKLSAgICB0aW1lb3V0OiAwLAotICAgIGRhdGE6IG51bGwsCi0gICAgZGF0YVR5cGU6
IG51bGwsCi0gICAgdXNlcm5hbWU6IG51bGwsCi0gICAgcGFzc3dvcmQ6IG51bGwsCi0gICAgY2Fj
aGU6IG51bGwsCi0gICAgdGhyb3dzOiBmYWxzZSwKLSAgICB0cmFkaXRpb25hbDogZmFsc2UsCi0g
ICAgaGVhZGVyczoge30sCi0gICAgKi8KLQotICAgIGFjY2VwdHM6IHsKLSAgICAiKiI6IGFsbFR5
cGVzLAotICAgIHRleHQ6ICJ0ZXh0L3BsYWluIiwKLSAgICBodG1sOiAidGV4dC9odG1sIiwKLSAg
ICB4bWw6ICJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIiwKLSAgICBqc29uOiAiYXBwbGljYXRp
b24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IgotICAgIH0sCi0KLSAgICBjb250ZW50czogewotICAg
IHhtbDogL3htbC8sCi0gICAgaHRtbDogL2h0bWwvLAotICAgIGpzb246IC9qc29uLwotICAgIH0s
Ci0KLSAgICByZXNwb25zZUZpZWxkczogewotICAgIHhtbDogInJlc3BvbnNlWE1MIiwKLSAgICB0
ZXh0OiAicmVzcG9uc2VUZXh0IgotICAgIH0sCi0KLSAgICAvLyBEYXRhIGNvbnZlcnRlcnMKLSAg
ICAvLyBLZXlzIHNlcGFyYXRlIHNvdXJjZSAob3IgY2F0Y2hhbGwgIioiKSBhbmQgZGVzdGluYXRp
b24gdHlwZXMgd2l0aCBhIHNpbmdsZSBzcGFjZQotICAgIGNvbnZlcnRlcnM6IHsKLQotICAgIC8v
IENvbnZlcnQgYW55dGhpbmcgdG8gdGV4dAotICAgICIqIHRleHQiOiB3aW5kb3cuU3RyaW5nLAot
Ci0gICAgLy8gVGV4dCB0byBodG1sICh0cnVlID0gbm8gdHJhbnNmb3JtYXRpb24pCi0gICAgInRl
eHQgaHRtbCI6IHRydWUsCi0KLSAgICAvLyBFdmFsdWF0ZSB0ZXh0IGFzIGEganNvbiBleHByZXNz
aW9uCi0gICAgInRleHQganNvbiI6IGpRdWVyeS5wYXJzZUpTT04sCi0KLSAgICAvLyBQYXJzZSB0
ZXh0IGFzIHhtbAotICAgICJ0ZXh0IHhtbCI6IGpRdWVyeS5wYXJzZVhNTAotICAgIH0sCi0KLSAg
ICAvLyBGb3Igb3B0aW9ucyB0aGF0IHNob3VsZG4ndCBiZSBkZWVwIGV4dGVuZGVkOgotICAgIC8v
IHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWYKLSAgICAvLyBhbmQg
d2hlbiB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3VsZG4ndCBiZQotICAgIC8vIGRlZXAgZXh0ZW5k
ZWQgKHNlZSBhamF4RXh0ZW5kKQotICAgIGZsYXRPcHRpb25zOiB7Ci0gICAgdXJsOiB0cnVlLAot
ICAgIGNvbnRleHQ6IHRydWUKLSAgICB9Ci0gICAgfSwKLQotICAgIC8vIENyZWF0ZXMgYSBmdWxs
IGZsZWRnZWQgc2V0dGluZ3Mgb2JqZWN0IGludG8gdGFyZ2V0Ci0gICAgLy8gd2l0aCBib3RoIGFq
YXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLgotICAgIC8vIElmIHRhcmdldCBpcyBvbWl0
dGVkLCB3cml0ZXMgaW50byBhamF4U2V0dGluZ3MuCi0gICAgYWpheFNldHVwOiBmdW5jdGlvbigg
dGFyZ2V0LCBzZXR0aW5ncyApIHsKLSAgICByZXR1cm4gc2V0dGluZ3MgPwotCi0gICAgLy8gQnVp
bGRpbmcgYSBzZXR0aW5ncyBvYmplY3QKLSAgICBhamF4RXh0ZW5kKCBhamF4RXh0ZW5kKCB0YXJn
ZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKSwgc2V0dGluZ3MgKSA6Ci0KLSAgICAvLyBFeHRlbmRp
bmcgYWpheFNldHRpbmdzCi0gICAgYWpheEV4dGVuZCggalF1ZXJ5LmFqYXhTZXR0aW5ncywgdGFy
Z2V0ICk7Ci0gICAgfSwKLQotICAgIGFqYXhQcmVmaWx0ZXI6IGFkZFRvUHJlZmlsdGVyc09yVHJh
bnNwb3J0cyggcHJlZmlsdGVycyApLAotICAgIGFqYXhUcmFuc3BvcnQ6IGFkZFRvUHJlZmlsdGVy
c09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cyApLAotCi0gICAgLy8gTWFpbiBtZXRob2QKLSAgICBh
amF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkgewotCi0gICAgLy8gSWYgdXJsIGlzIGFuIG9i
amVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmUKLSAgICBpZiAoIHR5cGVvZiB1cmwgPT09
ICJvYmplY3QiICkgewotICAgIG9wdGlvbnMgPSB1cmw7Ci0gICAgdXJsID0gdW5kZWZpbmVkOwot
ICAgIH0KLQotICAgIC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0Ci0gICAgb3B0aW9u
cyA9IG9wdGlvbnMgfHwge307Ci0KLSAgICB2YXIgLy8gQ3Jvc3MtZG9tYWluIGRldGVjdGlvbiB2
YXJzCi0gICAgcGFydHMsCi0gICAgLy8gTG9vcCB2YXJpYWJsZQotICAgIGksCi0gICAgLy8gVVJM
IHdpdGhvdXQgYW50aS1jYWNoZSBwYXJhbQotICAgIGNhY2hlVVJMLAotICAgIC8vIFJlc3BvbnNl
IGhlYWRlcnMgYXMgc3RyaW5nCi0gICAgcmVzcG9uc2VIZWFkZXJzU3RyaW5nLAotICAgIC8vIHRp
bWVvdXQgaGFuZGxlCi0gICAgdGltZW91dFRpbWVyLAotCi0gICAgLy8gVG8ga25vdyBpZiBnbG9i
YWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkCi0gICAgZmlyZUdsb2JhbHMsCi0KLSAgICB0
cmFuc3BvcnQsCi0gICAgLy8gUmVzcG9uc2UgaGVhZGVycwotICAgIHJlc3BvbnNlSGVhZGVycywK
LSAgICAvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0Ci0gICAgcyA9IGpRdWVyeS5h
amF4U2V0dXAoIHt9LCBvcHRpb25zICksCi0gICAgLy8gQ2FsbGJhY2tzIGNvbnRleHQKLSAgICBj
YWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcywKLSAgICAvLyBDb250ZXh0IGZvciBnbG9i
YWwgZXZlbnRzIGlzIGNhbGxiYWNrQ29udGV4dCBpZiBpdCBpcyBhIERPTSBub2RlIG9yIGpRdWVy
eSBjb2xsZWN0aW9uCi0gICAgZ2xvYmFsRXZlbnRDb250ZXh0ID0gcy5jb250ZXh0ICYmICggY2Fs
bGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dC5qcXVlcnkgKSA/Ci0gICAg
alF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6Ci0gICAgalF1ZXJ5LmV2ZW50LAotICAgIC8vIERl
ZmVycmVkcwotICAgIGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCksCi0gICAgY29tcGxldGVE
ZWZlcnJlZCA9IGpRdWVyeS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksCi0gICAgLy8gU3RhdHVz
LWRlcGVuZGVudCBjYWxsYmFja3MKLSAgICBzdGF0dXNDb2RlID0gcy5zdGF0dXNDb2RlIHx8IHt9
LAotICAgIC8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpCi0gICAgcmVxdWVz
dEhlYWRlcnMgPSB7fSwKLSAgICByZXF1ZXN0SGVhZGVyc05hbWVzID0ge30sCi0gICAgLy8gVGhl
IGpxWEhSIHN0YXRlCi0gICAgc3RhdGUgPSAwLAotICAgIC8vIERlZmF1bHQgYWJvcnQgbWVzc2Fn
ZQotICAgIHN0ckFib3J0ID0gImNhbmNlbGVkIiwKLSAgICAvLyBGYWtlIHhocgotICAgIGpxWEhS
ID0gewotICAgIHJlYWR5U3RhdGU6IDAsCi0KLSAgICAvLyBCdWlsZHMgaGVhZGVycyBoYXNodGFi
bGUgaWYgbmVlZGVkCi0gICAgZ2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7Ci0g
ICAgdmFyIG1hdGNoOwotICAgIGlmICggc3RhdGUgPT09IDIgKSB7Ci0gICAgaWYgKCAhcmVzcG9u
c2VIZWFkZXJzICkgewotICAgIHJlc3BvbnNlSGVhZGVycyA9IHt9OwotICAgIHdoaWxlICggKG1h
dGNoID0gcmhlYWRlcnMuZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkpICkgewotICAgIHJl
c3BvbnNlSGVhZGVyc1sgbWF0Y2hbMV0udG9Mb3dlckNhc2UoKSBdID0gbWF0Y2hbIDIgXTsKLSAg
ICB9Ci0gICAgfQotICAgIG1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dlckNhc2Uo
KSBdOwotICAgIH0KLSAgICByZXR1cm4gbWF0Y2ggPT0gbnVsbCA/IG51bGwgOiBtYXRjaDsKLSAg
ICB9LAotCi0gICAgLy8gUmF3IHN0cmluZwotICAgIGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVu
Y3Rpb24oKSB7Ci0gICAgcmV0dXJuIHN0YXRlID09PSAyID8gcmVzcG9uc2VIZWFkZXJzU3RyaW5n
IDogbnVsbDsKLSAgICB9LAotCi0gICAgLy8gQ2FjaGVzIHRoZSBoZWFkZXIKLSAgICBzZXRSZXF1
ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7Ci0gICAgdmFyIGxuYW1lID0gbmFt
ZS50b0xvd2VyQ2FzZSgpOwotICAgIGlmICggIXN0YXRlICkgewotICAgIG5hbWUgPSByZXF1ZXN0
SGVhZGVyc05hbWVzWyBsbmFtZSBdID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbG5hbWUgXSB8fCBu
YW1lOwotICAgIHJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRoaXM7Ci0gICAgfSwKLQotICAgIC8vIE92ZXJyaWRlcyByZXNwb25zZSBjb250ZW50LXR5
cGUgaGVhZGVyCi0gICAgb3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7Ci0gICAg
aWYgKCAhc3RhdGUgKSB7Ci0gICAgcy5taW1lVHlwZSA9IHR5cGU7Ci0gICAgfQotICAgIHJldHVy
biB0aGlzOwotICAgIH0sCi0KLSAgICAvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrcwotICAg
IHN0YXR1c0NvZGU6IGZ1bmN0aW9uKCBtYXAgKSB7Ci0gICAgdmFyIGNvZGU7Ci0gICAgaWYgKCBt
YXAgKSB7Ci0gICAgaWYgKCBzdGF0ZSA8IDIgKSB7Ci0gICAgZm9yICggY29kZSBpbiBtYXAgKSB7
Ci0gICAgLy8gTGF6eS1hZGQgdGhlIG5ldyBjYWxsYmFjayBpbiBhIHdheSB0aGF0IHByZXNlcnZl
cyBvbGQgb25lcwotICAgIHN0YXR1c0NvZGVbIGNvZGUgXSA9IFsgc3RhdHVzQ29kZVsgY29kZSBd
LCBtYXBbIGNvZGUgXSBdOwotICAgIH0KLSAgICB9IGVsc2UgewotICAgIC8vIEV4ZWN1dGUgdGhl
IGFwcHJvcHJpYXRlIGNhbGxiYWNrcwotICAgIGpxWEhSLmFsd2F5cyggbWFwWyBqcVhIUi5zdGF0
dXMgXSApOwotICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLQotICAgIC8v
IENhbmNlbCB0aGUgcmVxdWVzdAotICAgIGFib3J0OiBmdW5jdGlvbiggc3RhdHVzVGV4dCApIHsK
LSAgICB2YXIgZmluYWxUZXh0ID0gc3RhdHVzVGV4dCB8fCBzdHJBYm9ydDsKLSAgICBpZiAoIHRy
YW5zcG9ydCApIHsKLSAgICB0cmFuc3BvcnQuYWJvcnQoIGZpbmFsVGV4dCApOwotICAgIH0KLSAg
ICBkb25lKCAwLCBmaW5hbFRleHQgKTsKLSAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0gICAgfTsK
LQotICAgIC8vIEF0dGFjaCBkZWZlcnJlZHMKLSAgICBkZWZlcnJlZC5wcm9taXNlKCBqcVhIUiAp
LmNvbXBsZXRlID0gY29tcGxldGVEZWZlcnJlZC5hZGQ7Ci0gICAganFYSFIuc3VjY2VzcyA9IGpx
WEhSLmRvbmU7Ci0gICAganFYSFIuZXJyb3IgPSBqcVhIUi5mYWlsOwotCi0gICAgLy8gUmVtb3Zl
IGhhc2ggY2hhcmFjdGVyICgjNzUzMTogYW5kIHN0cmluZyBwcm9tb3Rpb24pCi0gICAgLy8gQWRk
IHByb3RvY29sIGlmIG5vdCBwcm92aWRlZCAoIzU4NjY6IElFNyBpc3N1ZSB3aXRoIHByb3RvY29s
LWxlc3MgdXJscykKLSAgICAvLyBIYW5kbGUgZmFsc3kgdXJsIGluIHRoZSBzZXR0aW5ncyBvYmpl
Y3QgKCMxMDA5MzogY29uc2lzdGVuY3kgd2l0aCBvbGQgc2lnbmF0dXJlKQotICAgIC8vIFdlIGFs
c28gdXNlIHRoZSB1cmwgcGFyYW1ldGVyIGlmIGF2YWlsYWJsZQotICAgIHMudXJsID0gKCAoIHVy
bCB8fCBzLnVybCB8fCBhamF4TG9jYXRpb24gKSArICIiICkucmVwbGFjZSggcmhhc2gsICIiICku
cmVwbGFjZSggcnByb3RvY29sLCBhamF4TG9jUGFydHNbIDEgXSArICIvLyIgKTsKLQotICAgIC8v
IEFsaWFzIG1ldGhvZCBvcHRpb24gdG8gdHlwZSBhcyBwZXIgdGlja2V0ICMxMjAwNAotICAgIHMu
dHlwZSA9IG9wdGlvbnMubWV0aG9kIHx8IG9wdGlvbnMudHlwZSB8fCBzLm1ldGhvZCB8fCBzLnR5
cGU7Ci0KLSAgICAvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0Ci0gICAgcy5kYXRhVHlwZXMgPSBq
UXVlcnkudHJpbSggcy5kYXRhVHlwZSB8fCAiKiIgKS50b0xvd2VyQ2FzZSgpLm1hdGNoKCBjb3Jl
X3Jub3R3aGl0ZSApIHx8IFsiIl07Ci0KLSAgICAvLyBBIGNyb3NzLWRvbWFpbiByZXF1ZXN0IGlz
IGluIG9yZGVyIHdoZW4gd2UgaGF2ZSBhIHByb3RvY29sOmhvc3Q6cG9ydCBtaXNtYXRjaAotICAg
IGlmICggcy5jcm9zc0RvbWFpbiA9PSBudWxsICkgewotICAgIHBhcnRzID0gcnVybC5leGVjKCBz
LnVybC50b0xvd2VyQ2FzZSgpICk7Ci0gICAgcy5jcm9zc0RvbWFpbiA9ICEhKCBwYXJ0cyAmJgot
ICAgICggcGFydHNbIDEgXSAhPT0gYWpheExvY1BhcnRzWyAxIF0gfHwgcGFydHNbIDIgXSAhPT0g
YWpheExvY1BhcnRzWyAyIF0gfHwKLSAgICAoIHBhcnRzWyAzIF0gfHwgKCBwYXJ0c1sgMSBdID09
PSAiaHR0cDoiID8gODAgOiA0NDMgKSApICE9Ci0gICAgKCBhamF4TG9jUGFydHNbIDMgXSB8fCAo
IGFqYXhMb2NQYXJ0c1sgMSBdID09PSAiaHR0cDoiID8gODAgOiA0NDMgKSApICkKLSAgICApOwot
ICAgIH0KLQotICAgIC8vIENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZwotICAg
IGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiYgdHlwZW9mIHMuZGF0YSAhPT0gInN0cmlu
ZyIgKSB7Ci0gICAgcy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwg
KTsKLSAgICB9Ci0KLSAgICAvLyBBcHBseSBwcmVmaWx0ZXJzCi0gICAgaW5zcGVjdFByZWZpbHRl
cnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7Ci0KLSAgICAv
LyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhIHByZWZpbHRlciwgc3RvcCB0aGVyZQot
ICAgIGlmICggc3RhdGUgPT09IDIgKSB7Ci0gICAgcmV0dXJuIGpxWEhSOwotICAgIH0KLQotICAg
IC8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvCi0gICAg
ZmlyZUdsb2JhbHMgPSBzLmdsb2JhbDsKLQotICAgIC8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2Yg
cmVxdWVzdHMKLSAgICBpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVyeS5hY3RpdmUrKyA9PT0gMCAp
IHsKLSAgICBqUXVlcnkuZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iik7Ci0gICAgfQotCi0gICAg
Ly8gVXBwZXJjYXNlIHRoZSB0eXBlCi0gICAgcy50eXBlID0gcy50eXBlLnRvVXBwZXJDYXNlKCk7
Ci0KLSAgICAvLyBEZXRlcm1pbmUgaWYgcmVxdWVzdCBoYXMgY29udGVudAotICAgIHMuaGFzQ29u
dGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMudHlwZSApOwotCi0gICAgLy8gU2F2ZSB0aGUgVVJM
IGluIGNhc2Ugd2UncmUgdG95aW5nIHdpdGggdGhlIElmLU1vZGlmaWVkLVNpbmNlCi0gICAgLy8g
YW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyIGxhdGVyIG9uCi0gICAgY2FjaGVVUkwgPSBzLnVy
bDsKLQotICAgIC8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBj
b250ZW50Ci0gICAgaWYgKCAhcy5oYXNDb250ZW50ICkgewotCi0gICAgLy8gSWYgZGF0YSBpcyBh
dmFpbGFibGUsIGFwcGVuZCBkYXRhIHRvIHVybAotICAgIGlmICggcy5kYXRhICkgewotICAgIGNh
Y2hlVVJMID0gKCBzLnVybCArPSAoIGFqYXhfcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyAiJiIg
OiAiPyIgKSArIHMuZGF0YSApOwotICAgIC8vICM5NjgyOiByZW1vdmUgZGF0YSBzbyB0aGF0IGl0
J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnkKLSAgICBkZWxldGUgcy5kYXRhOwotICAg
IH0KLQotICAgIC8vIEFkZCBhbnRpLWNhY2hlIGluIHVybCBpZiBuZWVkZWQKLSAgICBpZiAoIHMu
Y2FjaGUgPT09IGZhbHNlICkgewotICAgIHMudXJsID0gcnRzLnRlc3QoIGNhY2hlVVJMICkgPwot
Ci0gICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhICdfJyBwYXJhbWV0ZXIsIHNldCBpdHMgdmFs
dWUKLSAgICBjYWNoZVVSTC5yZXBsYWNlKCBydHMsICIkMV89IiArIGFqYXhfbm9uY2UrKyApIDoK
LQotICAgIC8vIE90aGVyd2lzZSBhZGQgb25lIHRvIHRoZSBlbmQKLSAgICBjYWNoZVVSTCArICgg
YWpheF9ycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/ICImIiA6ICI/IiApICsgIl89IiArIGFqYXhf
bm9uY2UrKzsKLSAgICB9Ci0gICAgfQotCi0gICAgLy8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5j
ZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS4KLSAg
ICBpZiAoIHMuaWZNb2RpZmllZCApIHsKLSAgICBpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNh
Y2hlVVJMIF0gKSB7Ci0gICAganFYSFIuc2V0UmVxdWVzdEhlYWRlciggIklmLU1vZGlmaWVkLVNp
bmNlIiwgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApOwotICAgIH0KLSAgICBpZiAo
IGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICkgewotICAgIGpxWEhSLnNldFJlcXVlc3RIZWFkZXIo
ICJJZi1Ob25lLU1hdGNoIiwgalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKTsKLSAgICB9Ci0gICAg
fQotCi0gICAgLy8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50
Ci0gICAgaWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5cGUgIT09IGZh
bHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7Ci0gICAganFYSFIuc2V0UmVxdWVzdEhlYWRl
ciggIkNvbnRlbnQtVHlwZSIsIHMuY29udGVudFR5cGUgKTsKLSAgICB9Ci0KLSAgICAvLyBTZXQg
dGhlIEFjY2VwdHMgaGVhZGVyIGZvciB0aGUgc2VydmVyLCBkZXBlbmRpbmcgb24gdGhlIGRhdGFU
eXBlCi0gICAganFYSFIuc2V0UmVxdWVzdEhlYWRlcigKLSAgICAiQWNjZXB0IiwKLSAgICBzLmRh
dGFUeXBlc1sgMCBdICYmIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbMF0gXSA/Ci0gICAgcy5hY2Nl
cHRzWyBzLmRhdGFUeXBlc1swXSBdICsgKCBzLmRhdGFUeXBlc1sgMCBdICE9PSAiKiIgPyAiLCAi
ICsgYWxsVHlwZXMgKyAiOyBxPTAuMDEiIDogIiIgKSA6Ci0gICAgcy5hY2NlcHRzWyAiKiIgXQot
ICAgICk7Ci0KLSAgICAvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb24KLSAgICBmb3IgKCBpIGlu
IHMuaGVhZGVycyApIHsKLSAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRlcnNb
IGkgXSApOwotICAgIH0KLQotICAgIC8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBh
bmQgZWFybHkgYWJvcnQKLSAgICBpZiAoIHMuYmVmb3JlU2VuZCAmJiAoIHMuYmVmb3JlU2VuZC5j
YWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09IGZhbHNlIHx8IHN0YXRlID09PSAy
ICkgKSB7Ci0gICAgLy8gQWJvcnQgaWYgbm90IGRvbmUgYWxyZWFkeSBhbmQgcmV0dXJuCi0gICAg
cmV0dXJuIGpxWEhSLmFib3J0KCk7Ci0gICAgfQotCi0gICAgLy8gYWJvcnRpbmcgaXMgbm8gbG9u
Z2VyIGEgY2FuY2VsbGF0aW9uCi0gICAgc3RyQWJvcnQgPSAiYWJvcnQiOwotCi0gICAgLy8gSW5z
dGFsbCBjYWxsYmFja3Mgb24gZGVmZXJyZWRzCi0gICAgZm9yICggaSBpbiB7IHN1Y2Nlc3M6IDEs
IGVycm9yOiAxLCBjb21wbGV0ZTogMSB9ICkgewotICAgIGpxWEhSWyBpIF0oIHNbIGkgXSApOwot
ICAgIH0KLQotICAgIC8vIEdldCB0cmFuc3BvcnQKLSAgICB0cmFuc3BvcnQgPSBpbnNwZWN0UHJl
ZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTsKLQot
ICAgIC8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydAotICAgIGlmICggIXRyYW5zcG9y
dCApIHsKLSAgICBkb25lKCAtMSwgIk5vIFRyYW5zcG9ydCIgKTsKLSAgICB9IGVsc2UgewotICAg
IGpxWEhSLnJlYWR5U3RhdGUgPSAxOwotCi0gICAgLy8gU2VuZCBnbG9iYWwgZXZlbnQKLSAgICBp
ZiAoIGZpcmVHbG9iYWxzICkgewotICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWph
eFNlbmQiLCBbIGpxWEhSLCBzIF0gKTsKLSAgICB9Ci0gICAgLy8gVGltZW91dAotICAgIGlmICgg
cy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkgewotICAgIHRpbWVvdXRUaW1lciA9IHNldFRpbWVv
dXQoZnVuY3Rpb24oKSB7Ci0gICAganFYSFIuYWJvcnQoInRpbWVvdXQiKTsKLSAgICB9LCBzLnRp
bWVvdXQgKTsKLSAgICB9Ci0KLSAgICB0cnkgewotICAgIHN0YXRlID0gMTsKLSAgICB0cmFuc3Bv
cnQuc2VuZCggcmVxdWVzdEhlYWRlcnMsIGRvbmUgKTsKLSAgICB9IGNhdGNoICggZSApIHsKLSAg
ICAvLyBQcm9wYWdhdGUgZXhjZXB0aW9uIGFzIGVycm9yIGlmIG5vdCBkb25lCi0gICAgaWYgKCBz
dGF0ZSA8IDIgKSB7Ci0gICAgZG9uZSggLTEsIGUgKTsKLSAgICAvLyBTaW1wbHkgcmV0aHJvdyBv
dGhlcndpc2UKLSAgICB9IGVsc2UgewotICAgIHRocm93IGU7Ci0gICAgfQotICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBDYWxsYmFjayBmb3Igd2hlbiBldmVyeXRoaW5nIGlzIGRvbmUKLSAgICBmdW5j
dGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyAp
IHsKLSAgICB2YXIgaXNTdWNjZXNzLCBzdWNjZXNzLCBlcnJvciwgcmVzcG9uc2UsIG1vZGlmaWVk
LAotICAgIHN0YXR1c1RleHQgPSBuYXRpdmVTdGF0dXNUZXh0OwotCi0gICAgLy8gQ2FsbGVkIG9u
Y2UKLSAgICBpZiAoIHN0YXRlID09PSAyICkgewotICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBTdGF0ZSBpcyAiZG9uZSIgbm93Ci0gICAgc3RhdGUgPSAyOwotCi0gICAgLy8gQ2xlYXIgdGlt
ZW91dCBpZiBpdCBleGlzdHMKLSAgICBpZiAoIHRpbWVvdXRUaW1lciApIHsKLSAgICBjbGVhclRp
bWVvdXQoIHRpbWVvdXRUaW1lciApOwotICAgIH0KLQotICAgIC8vIERlcmVmZXJlbmNlIHRyYW5z
cG9ydCBmb3IgZWFybHkgZ2FyYmFnZSBjb2xsZWN0aW9uCi0gICAgLy8gKG5vIG1hdHRlciBob3cg
bG9uZyB0aGUganFYSFIgb2JqZWN0IHdpbGwgYmUgdXNlZCkKLSAgICB0cmFuc3BvcnQgPSB1bmRl
ZmluZWQ7Ci0KLSAgICAvLyBDYWNoZSByZXNwb25zZSBoZWFkZXJzCi0gICAgcmVzcG9uc2VIZWFk
ZXJzU3RyaW5nID0gaGVhZGVycyB8fCAiIjsKLQotICAgIC8vIFNldCByZWFkeVN0YXRlCi0gICAg
anFYSFIucmVhZHlTdGF0ZSA9IHN0YXR1cyA+IDAgPyA0IDogMDsKLQotICAgIC8vIEdldCByZXNw
b25zZSBkYXRhCi0gICAgaWYgKCByZXNwb25zZXMgKSB7Ci0gICAgcmVzcG9uc2UgPSBhamF4SGFu
ZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICk7Ci0gICAgfQotCi0gICAgLy8gSWYg
c3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmcKLSAgICBpZiAoIHN0YXR1cyA+PSAyMDAg
JiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0gMzA0ICkgewotCi0gICAgLy8gU2V0IHRoZSBJ
Zi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9k
aWZpZWQgbW9kZS4KLSAgICBpZiAoIHMuaWZNb2RpZmllZCApIHsKLSAgICBtb2RpZmllZCA9IGpx
WEhSLmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIik7Ci0gICAgaWYgKCBtb2RpZmll
ZCApIHsKLSAgICBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7Ci0g
ICAgfQotICAgIG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoImV0YWciKTsKLSAg
ICBpZiAoIG1vZGlmaWVkICkgewotICAgIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdID0gbW9kaWZp
ZWQ7Ci0gICAgfQotICAgIH0KLQotICAgIC8vIGlmIG5vIGNvbnRlbnQKLSAgICBpZiAoIHN0YXR1
cyA9PT0gMjA0ICkgewotICAgIGlzU3VjY2VzcyA9IHRydWU7Ci0gICAgc3RhdHVzVGV4dCA9ICJu
b2NvbnRlbnQiOwotCi0gICAgLy8gaWYgbm90IG1vZGlmaWVkCi0gICAgfSBlbHNlIGlmICggc3Rh
dHVzID09PSAzMDQgKSB7Ci0gICAgaXNTdWNjZXNzID0gdHJ1ZTsKLSAgICBzdGF0dXNUZXh0ID0g
Im5vdG1vZGlmaWVkIjsKLQotICAgIC8vIElmIHdlIGhhdmUgZGF0YSwgbGV0J3MgY29udmVydCBp
dAotICAgIH0gZWxzZSB7Ci0gICAgaXNTdWNjZXNzID0gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNl
ICk7Ci0gICAgc3RhdHVzVGV4dCA9IGlzU3VjY2Vzcy5zdGF0ZTsKLSAgICBzdWNjZXNzID0gaXNT
dWNjZXNzLmRhdGE7Ci0gICAgZXJyb3IgPSBpc1N1Y2Nlc3MuZXJyb3I7Ci0gICAgaXNTdWNjZXNz
ID0gIWVycm9yOwotICAgIH0KLSAgICB9IGVsc2UgewotICAgIC8vIFdlIGV4dHJhY3QgZXJyb3Ig
ZnJvbSBzdGF0dXNUZXh0Ci0gICAgLy8gdGhlbiBub3JtYWxpemUgc3RhdHVzVGV4dCBhbmQgc3Rh
dHVzIGZvciBub24tYWJvcnRzCi0gICAgZXJyb3IgPSBzdGF0dXNUZXh0OwotICAgIGlmICggc3Rh
dHVzIHx8ICFzdGF0dXNUZXh0ICkgewotICAgIHN0YXR1c1RleHQgPSAiZXJyb3IiOwotICAgIGlm
ICggc3RhdHVzIDwgMCApIHsKLSAgICBzdGF0dXMgPSAwOwotICAgIH0KLSAgICB9Ci0gICAgfQot
Ci0gICAgLy8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmplY3QKLSAgICBqcVhIUi5zdGF0
dXMgPSBzdGF0dXM7Ci0gICAganFYSFIuc3RhdHVzVGV4dCA9ICggbmF0aXZlU3RhdHVzVGV4dCB8
fCBzdGF0dXNUZXh0ICkgKyAiIjsKLQotICAgIC8vIFN1Y2Nlc3MvRXJyb3IKLSAgICBpZiAoIGlz
U3VjY2VzcyApIHsKLSAgICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBb
IHN1Y2Nlc3MsIHN0YXR1c1RleHQsIGpxWEhSIF0gKTsKLSAgICB9IGVsc2UgewotICAgIGRlZmVy
cmVkLnJlamVjdFdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCwgZXJy
b3IgXSApOwotICAgIH0KLQotICAgIC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzCi0gICAg
anFYSFIuc3RhdHVzQ29kZSggc3RhdHVzQ29kZSApOwotICAgIHN0YXR1c0NvZGUgPSB1bmRlZmlu
ZWQ7Ci0KLSAgICBpZiAoIGZpcmVHbG9iYWxzICkgewotICAgIGdsb2JhbEV2ZW50Q29udGV4dC50
cmlnZ2VyKCBpc1N1Y2Nlc3MgPyAiYWpheFN1Y2Nlc3MiIDogImFqYXhFcnJvciIsCi0gICAgWyBq
cVhIUiwgcywgaXNTdWNjZXNzID8gc3VjY2VzcyA6IGVycm9yIF0gKTsKLSAgICB9Ci0KLSAgICAv
LyBDb21wbGV0ZQotICAgIGNvbXBsZXRlRGVmZXJyZWQuZmlyZVdpdGgoIGNhbGxiYWNrQ29udGV4
dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCBdICk7Ci0KLSAgICBpZiAoIGZpcmVHbG9iYWxzICkgewot
ICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheENvbXBsZXRlIiwgWyBqcVhIUiwg
cyBdICk7Ci0gICAgLy8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVyCi0gICAgaWYgKCAh
KCAtLWpRdWVyeS5hY3RpdmUgKSApIHsKLSAgICBqUXVlcnkuZXZlbnQudHJpZ2dlcigiYWpheFN0
b3AiKTsKLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiBqcVhIUjsKLSAgICB9LAot
Ci0gICAgZ2V0U2NyaXB0OiBmdW5jdGlvbiggdXJsLCBjYWxsYmFjayApIHsKLSAgICByZXR1cm4g
alF1ZXJ5LmdldCggdXJsLCB1bmRlZmluZWQsIGNhbGxiYWNrLCAic2NyaXB0IiApOwotICAgIH0s
Ci0KLSAgICBnZXRKU09OOiBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjayApIHsKLSAgICBy
ZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgImpzb24iICk7Ci0gICAgfQot
fSk7Ci0KLS8qIEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFqYXggcmVxdWVzdDoKLSAqIC0gc2V0
cyBhbGwgcmVzcG9uc2VYWFggZmllbGRzIGFjY29yZGluZ2x5Ci0gKiAtIGZpbmRzIHRoZSByaWdo
dCBkYXRhVHlwZSAobWVkaWF0ZXMgYmV0d2VlbiBjb250ZW50LXR5cGUgYW5kIGV4cGVjdGVkIGRh
dGFUeXBlKQotICogLSByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlCi0gKi8KLWZ1
bmN0aW9uIGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKSB7Ci0gICAg
dmFyIGZpcnN0RGF0YVR5cGUsIGN0LCBmaW5hbERhdGFUeXBlLCB0eXBlLAotICAgIGNvbnRlbnRz
ID0gcy5jb250ZW50cywKLSAgICBkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcywKLSAgICByZXNwb25z
ZUZpZWxkcyA9IHMucmVzcG9uc2VGaWVsZHM7Ci0KLSAgICAvLyBGaWxsIHJlc3BvbnNlWFhYIGZp
ZWxkcwotICAgIGZvciAoIHR5cGUgaW4gcmVzcG9uc2VGaWVsZHMgKSB7Ci0gICAgaWYgKCB0eXBl
IGluIHJlc3BvbnNlcyApIHsKLSAgICBqcVhIUlsgcmVzcG9uc2VGaWVsZHNbdHlwZV0gXSA9IHJl
c3BvbnNlc1sgdHlwZSBdOwotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZW1vdmUgYXV0byBkYXRh
VHlwZSBhbmQgZ2V0IGNvbnRlbnQtdHlwZSBpbiB0aGUgcHJvY2VzcwotICAgIHdoaWxlKCBkYXRh
VHlwZXNbIDAgXSA9PT0gIioiICkgewotICAgIGRhdGFUeXBlcy5zaGlmdCgpOwotICAgIGlmICgg
Y3QgPT09IHVuZGVmaW5lZCApIHsKLSAgICBjdCA9IHMubWltZVR5cGUgfHwganFYSFIuZ2V0UmVz
cG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpOwotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDaGVj
ayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBrbm93biBjb250ZW50LXR5cGUKLSAgICBpZiAoIGN0
ICkgewotICAgIGZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7Ci0gICAgaWYgKCBjb250ZW50c1sg
dHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0udGVzdCggY3QgKSApIHsKLSAgICBkYXRhVHlwZXMu
dW5zaGlmdCggdHlwZSApOwotICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAg
Ly8gQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSByZXNwb25zZSBmb3IgdGhlIGV4cGVjdGVkIGRh
dGFUeXBlCi0gICAgaWYgKCBkYXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7Ci0gICAgZmlu
YWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sgMCBdOwotICAgIH0gZWxzZSB7Ci0gICAgLy8gVHJ5IGNv
bnZlcnRpYmxlIGRhdGFUeXBlcwotICAgIGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkgewotICAg
IGlmICggIWRhdGFUeXBlc1sgMCBdIHx8IHMuY29udmVydGVyc1sgdHlwZSArICIgIiArIGRhdGFU
eXBlc1swXSBdICkgewotICAgIGZpbmFsRGF0YVR5cGUgPSB0eXBlOwotICAgIGJyZWFrOwotICAg
IH0KLSAgICBpZiAoICFmaXJzdERhdGFUeXBlICkgewotICAgIGZpcnN0RGF0YVR5cGUgPSB0eXBl
OwotICAgIH0KLSAgICB9Ci0gICAgLy8gT3IganVzdCB1c2UgZmlyc3Qgb25lCi0gICAgZmluYWxE
YXRhVHlwZSA9IGZpbmFsRGF0YVR5cGUgfHwgZmlyc3REYXRhVHlwZTsKLSAgICB9Ci0KLSAgICAv
LyBJZiB3ZSBmb3VuZCBhIGRhdGFUeXBlCi0gICAgLy8gV2UgYWRkIHRoZSBkYXRhVHlwZSB0byB0
aGUgbGlzdCBpZiBuZWVkZWQKLSAgICAvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJl
c3BvbnNlCi0gICAgaWYgKCBmaW5hbERhdGFUeXBlICkgewotICAgIGlmICggZmluYWxEYXRhVHlw
ZSAhPT0gZGF0YVR5cGVzWyAwIF0gKSB7Ci0gICAgZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0
YVR5cGUgKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdOwot
ICAgIH0KLX0KLQotLy8gQ2hhaW4gY29udmVyc2lvbnMgZ2l2ZW4gdGhlIHJlcXVlc3QgYW5kIHRo
ZSBvcmlnaW5hbCByZXNwb25zZQotZnVuY3Rpb24gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlICkg
ewotICAgIHZhciBjb252MiwgY3VycmVudCwgY29udiwgdG1wLAotICAgIGNvbnZlcnRlcnMgPSB7
fSwKLSAgICBpID0gMCwKLSAgICAvLyBXb3JrIHdpdGggYSBjb3B5IG9mIGRhdGFUeXBlcyBpbiBj
YXNlIHdlIG5lZWQgdG8gbW9kaWZ5IGl0IGZvciBjb252ZXJzaW9uCi0gICAgZGF0YVR5cGVzID0g
cy5kYXRhVHlwZXMuc2xpY2UoKSwKLSAgICBwcmV2ID0gZGF0YVR5cGVzWyAwIF07Ci0KLSAgICAv
LyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRlZAotICAgIGlmICggcy5kYXRhRmlsdGVy
ICkgewotICAgIHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSAp
OwotICAgIH0KLQotICAgIC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3aXRoIGxvd2VyY2FzZWQg
a2V5cwotICAgIGlmICggZGF0YVR5cGVzWyAxIF0gKSB7Ci0gICAgZm9yICggY29udiBpbiBzLmNv
bnZlcnRlcnMgKSB7Ci0gICAgY29udmVydGVyc1sgY29udi50b0xvd2VyQ2FzZSgpIF0gPSBzLmNv
bnZlcnRlcnNbIGNvbnYgXTsKLSAgICB9Ci0gICAgfQotCi0gICAgLy8gQ29udmVydCB0byBlYWNo
IHNlcXVlbnRpYWwgZGF0YVR5cGUsIHRvbGVyYXRpbmcgbGlzdCBtb2RpZmljYXRpb24KLSAgICBm
b3IgKCA7IChjdXJyZW50ID0gZGF0YVR5cGVzWysraV0pOyApIHsKLQotICAgIC8vIFRoZXJlJ3Mg
b25seSB3b3JrIHRvIGRvIGlmIGN1cnJlbnQgZGF0YVR5cGUgaXMgbm9uLWF1dG8KLSAgICBpZiAo
IGN1cnJlbnQgIT09ICIqIiApIHsKLQotICAgIC8vIENvbnZlcnQgcmVzcG9uc2UgaWYgcHJldiBk
YXRhVHlwZSBpcyBub24tYXV0byBhbmQgZGlmZmVycyBmcm9tIGN1cnJlbnQKLSAgICBpZiAoIHBy
ZXYgIT09ICIqIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkgewotCi0gICAgLy8gU2VlayBhIGRpcmVj
dCBjb252ZXJ0ZXIKLSAgICBjb252ID0gY29udmVydGVyc1sgcHJldiArICIgIiArIGN1cnJlbnQg
XSB8fCBjb252ZXJ0ZXJzWyAiKiAiICsgY3VycmVudCBdOwotCi0gICAgLy8gSWYgbm9uZSBmb3Vu
ZCwgc2VlayBhIHBhaXIKLSAgICBpZiAoICFjb252ICkgewotICAgIGZvciAoIGNvbnYyIGluIGNv
bnZlcnRlcnMgKSB7Ci0KLSAgICAvLyBJZiBjb252MiBvdXRwdXRzIGN1cnJlbnQKLSAgICB0bXAg
PSBjb252Mi5zcGxpdCgiICIpOwotICAgIGlmICggdG1wWyAxIF0gPT09IGN1cnJlbnQgKSB7Ci0K
LSAgICAvLyBJZiBwcmV2IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXQKLSAgICBj
b252ID0gY29udmVydGVyc1sgcHJldiArICIgIiArIHRtcFsgMCBdIF0gfHwKLSAgICBjb252ZXJ0
ZXJzWyAiKiAiICsgdG1wWyAwIF0gXTsKLSAgICBpZiAoIGNvbnYgKSB7Ci0gICAgLy8gQ29uZGVu
c2UgZXF1aXZhbGVuY2UgY29udmVydGVycwotICAgIGlmICggY29udiA9PT0gdHJ1ZSApIHsKLSAg
ICBjb252ID0gY29udmVydGVyc1sgY29udjIgXTsKLQotICAgIC8vIE90aGVyd2lzZSwgaW5zZXJ0
IHRoZSBpbnRlcm1lZGlhdGUgZGF0YVR5cGUKLSAgICB9IGVsc2UgaWYgKCBjb252ZXJ0ZXJzWyBj
b252MiBdICE9PSB0cnVlICkgewotICAgIGN1cnJlbnQgPSB0bXBbIDAgXTsKLSAgICBkYXRhVHlw
ZXMuc3BsaWNlKCBpLS0sIDAsIGN1cnJlbnQgKTsKLSAgICB9Ci0KLSAgICBicmVhazsKLSAgICB9
Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBBcHBseSBjb252ZXJ0ZXIgKGlmIG5vdCBh
biBlcXVpdmFsZW5jZSkKLSAgICBpZiAoIGNvbnYgIT09IHRydWUgKSB7Ci0KLSAgICAvLyBVbmxl
c3MgZXJyb3JzIGFyZSBhbGxvd2VkIHRvIGJ1YmJsZSwgY2F0Y2ggYW5kIHJldHVybiB0aGVtCi0g
ICAgaWYgKCBjb252ICYmIHNbInRocm93cyJdICkgewotICAgIHJlc3BvbnNlID0gY29udiggcmVz
cG9uc2UgKTsKLSAgICB9IGVsc2UgewotICAgIHRyeSB7Ci0gICAgcmVzcG9uc2UgPSBjb252KCBy
ZXNwb25zZSApOwotICAgIH0gY2F0Y2ggKCBlICkgewotICAgIHJldHVybiB7IHN0YXRlOiAicGFy
c2VyZXJyb3IiLCBlcnJvcjogY29udiA/IGUgOiAiTm8gY29udmVyc2lvbiBmcm9tICIgKyBwcmV2
ICsgIiB0byAiICsgY3VycmVudCB9OwotICAgIH0KLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAg
IC8vIFVwZGF0ZSBwcmV2IGZvciBuZXh0IGl0ZXJhdGlvbgotICAgIHByZXYgPSBjdXJyZW50Owot
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4geyBzdGF0ZTogInN1Y2Nlc3MiLCBkYXRhOiByZXNw
b25zZSB9OwotfQotLy8gSW5zdGFsbCBzY3JpcHQgZGF0YVR5cGUKLWpRdWVyeS5hamF4U2V0dXAo
ewotICAgIGFjY2VwdHM6IHsKLSAgICBzY3JpcHQ6ICJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0
aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNt
YXNjcmlwdCIKLSAgICB9LAotICAgIGNvbnRlbnRzOiB7Ci0gICAgc2NyaXB0OiAvKD86amF2YXxl
Y21hKXNjcmlwdC8KLSAgICB9LAotICAgIGNvbnZlcnRlcnM6IHsKLSAgICAidGV4dCBzY3JpcHQi
OiBmdW5jdGlvbiggdGV4dCApIHsKLSAgICBqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCApOwotICAg
IHJldHVybiB0ZXh0OwotICAgIH0KLSAgICB9Ci19KTsKLQotLy8gSGFuZGxlIGNhY2hlJ3Mgc3Bl
Y2lhbCBjYXNlIGFuZCBnbG9iYWwKLWpRdWVyeS5hamF4UHJlZmlsdGVyKCAic2NyaXB0IiwgZnVu
Y3Rpb24oIHMgKSB7Ci0gICAgaWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7Ci0gICAgcy5j
YWNoZSA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAoIHMuY3Jvc3NEb21haW4gKSB7Ci0gICAgcy50
eXBlID0gIkdFVCI7Ci0gICAgcy5nbG9iYWwgPSBmYWxzZTsKLSAgICB9Ci19KTsKLQotLy8gQmlu
ZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0Ci1qUXVlcnkuYWpheFRyYW5zcG9ydCggInNjcmlw
dCIsIGZ1bmN0aW9uKHMpIHsKLQotICAgIC8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMgd2l0
aCBjcm9zcyBkb21haW4gcmVxdWVzdHMKLSAgICBpZiAoIHMuY3Jvc3NEb21haW4gKSB7Ci0KLSAg
ICB2YXIgc2NyaXB0LAotICAgIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGpRdWVyeSgiaGVhZCIp
WzBdIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKLQotICAgIHJldHVybiB7Ci0KLSAgICBz
ZW5kOiBmdW5jdGlvbiggXywgY2FsbGJhY2sgKSB7Ci0KLSAgICBzY3JpcHQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKLQotICAgIHNjcmlwdC5hc3luYyA9IHRydWU7Ci0KLSAg
ICBpZiAoIHMuc2NyaXB0Q2hhcnNldCApIHsKLSAgICBzY3JpcHQuY2hhcnNldCA9IHMuc2NyaXB0
Q2hhcnNldDsKLSAgICB9Ci0KLSAgICBzY3JpcHQuc3JjID0gcy51cmw7Ci0KLSAgICAvLyBBdHRh
Y2ggaGFuZGxlcnMgZm9yIGFsbCBicm93c2VycwotICAgIHNjcmlwdC5vbmxvYWQgPSBzY3JpcHQu
b25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oIF8sIGlzQWJvcnQgKSB7Ci0KLSAgICBpZiAo
IGlzQWJvcnQgfHwgIXNjcmlwdC5yZWFkeVN0YXRlIHx8IC9sb2FkZWR8Y29tcGxldGUvLnRlc3Qo
IHNjcmlwdC5yZWFkeVN0YXRlICkgKSB7Ci0KLSAgICAvLyBIYW5kbGUgbWVtb3J5IGxlYWsgaW4g
SUUKLSAgICBzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7
Ci0KLSAgICAvLyBSZW1vdmUgdGhlIHNjcmlwdAotICAgIGlmICggc2NyaXB0LnBhcmVudE5vZGUg
KSB7Ci0gICAgc2NyaXB0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHNjcmlwdCApOwotICAgIH0K
LQotICAgIC8vIERlcmVmZXJlbmNlIHRoZSBzY3JpcHQKLSAgICBzY3JpcHQgPSBudWxsOwotCi0g
ICAgLy8gQ2FsbGJhY2sgaWYgbm90IGFib3J0Ci0gICAgaWYgKCAhaXNBYm9ydCApIHsKLSAgICBj
YWxsYmFjayggMjAwLCAic3VjY2VzcyIgKTsKLSAgICB9Ci0gICAgfQotICAgIH07Ci0KLSAgICAv
LyBDaXJjdW12ZW50IElFNiBidWdzIHdpdGggYmFzZSBlbGVtZW50cyAoIzI3MDkgYW5kICM0Mzc4
KSBieSBwcmVwZW5kaW5nCi0gICAgLy8gVXNlIG5hdGl2ZSBET00gbWFuaXB1bGF0aW9uIHRvIGF2
b2lkIG91ciBkb21NYW5pcCBBSkFYIHRyaWNrZXJ5Ci0gICAgaGVhZC5pbnNlcnRCZWZvcmUoIHNj
cmlwdCwgaGVhZC5maXJzdENoaWxkICk7Ci0gICAgfSwKLQotICAgIGFib3J0OiBmdW5jdGlvbigp
IHsKLSAgICBpZiAoIHNjcmlwdCApIHsKLSAgICBzY3JpcHQub25sb2FkKCB1bmRlZmluZWQsIHRy
dWUgKTsKLSAgICB9Ci0gICAgfQotICAgIH07Ci0gICAgfQotfSk7Ci12YXIgb2xkQ2FsbGJhY2tz
ID0gW10sCi0gICAgcmpzb25wID0gLyg9KVw/KD89JnwkKXxcP1w/LzsKLQotLy8gRGVmYXVsdCBq
c29ucCBzZXR0aW5ncwotalF1ZXJ5LmFqYXhTZXR1cCh7Ci0gICAganNvbnA6ICJjYWxsYmFjayIs
Ci0gICAganNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGNhbGxiYWNrID0gb2xk
Q2FsbGJhY2tzLnBvcCgpIHx8ICggalF1ZXJ5LmV4cGFuZG8gKyAiXyIgKyAoIGFqYXhfbm9uY2Ur
KyApICk7Ci0gICAgdGhpc1sgY2FsbGJhY2sgXSA9IHRydWU7Ci0gICAgcmV0dXJuIGNhbGxiYWNr
OwotICAgIH0KLX0pOwotCi0vLyBEZXRlY3QsIG5vcm1hbGl6ZSBvcHRpb25zIGFuZCBpbnN0YWxs
IGNhbGxiYWNrcyBmb3IganNvbnAgcmVxdWVzdHMKLWpRdWVyeS5hamF4UHJlZmlsdGVyKCAianNv
biBqc29ucCIsIGZ1bmN0aW9uKCBzLCBvcmlnaW5hbFNldHRpbmdzLCBqcVhIUiApIHsKLQotICAg
IHZhciBjYWxsYmFja05hbWUsIG92ZXJ3cml0dGVuLCByZXNwb25zZUNvbnRhaW5lciwKLSAgICBq
c29uUHJvcCA9IHMuanNvbnAgIT09IGZhbHNlICYmICggcmpzb25wLnRlc3QoIHMudXJsICkgPwot
ICAgICJ1cmwiIDoKLSAgICB0eXBlb2Ygcy5kYXRhID09PSAic3RyaW5nIiAmJiAhKCBzLmNvbnRl
bnRUeXBlIHx8ICIiICkuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVk
IikgJiYgcmpzb25wLnRlc3QoIHMuZGF0YSApICYmICJkYXRhIgotICAgICk7Ci0KLSAgICAvLyBI
YW5kbGUgaWZmIHRoZSBleHBlY3RlZCBkYXRhIHR5cGUgaXMgImpzb25wIiBvciB3ZSBoYXZlIGEg
cGFyYW1ldGVyIHRvIHNldAotICAgIGlmICgganNvblByb3AgfHwgcy5kYXRhVHlwZXNbIDAgXSA9
PT0gImpzb25wIiApIHsKLQotICAgIC8vIEdldCBjYWxsYmFjayBuYW1lLCByZW1lbWJlcmluZyBw
cmVleGlzdGluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggaXQKLSAgICBjYWxsYmFja05hbWUgPSBz
Lmpzb25wQ2FsbGJhY2sgPSBqUXVlcnkuaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgPwot
ICAgIHMuanNvbnBDYWxsYmFjaygpIDoKLSAgICBzLmpzb25wQ2FsbGJhY2s7Ci0KLSAgICAvLyBJ
bnNlcnQgY2FsbGJhY2sgaW50byB1cmwgb3IgZm9ybSBkYXRhCi0gICAgaWYgKCBqc29uUHJvcCAp
IHsKLSAgICBzWyBqc29uUHJvcCBdID0gc1sganNvblByb3AgXS5yZXBsYWNlKCByanNvbnAsICIk
MSIgKyBjYWxsYmFja05hbWUgKTsKLSAgICB9IGVsc2UgaWYgKCBzLmpzb25wICE9PSBmYWxzZSAp
IHsKLSAgICBzLnVybCArPSAoIGFqYXhfcnF1ZXJ5LnRlc3QoIHMudXJsICkgPyAiJiIgOiAiPyIg
KSArIHMuanNvbnAgKyAiPSIgKyBjYWxsYmFja05hbWU7Ci0gICAgfQotCi0gICAgLy8gVXNlIGRh
dGEgY29udmVydGVyIHRvIHJldHJpZXZlIGpzb24gYWZ0ZXIgc2NyaXB0IGV4ZWN1dGlvbgotICAg
IHMuY29udmVydGVyc1sic2NyaXB0IGpzb24iXSA9IGZ1bmN0aW9uKCkgewotICAgIGlmICggIXJl
c3BvbnNlQ29udGFpbmVyICkgewotICAgIGpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1lICsgIiB3
YXMgbm90IGNhbGxlZCIgKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3BvbnNlQ29udGFpbmVyWyAw
IF07Ci0gICAgfTsKLQotICAgIC8vIGZvcmNlIGpzb24gZGF0YVR5cGUKLSAgICBzLmRhdGFUeXBl
c1sgMCBdID0gImpzb24iOwotCi0gICAgLy8gSW5zdGFsbCBjYWxsYmFjawotICAgIG92ZXJ3cml0
dGVuID0gd2luZG93WyBjYWxsYmFja05hbWUgXTsKLSAgICB3aW5kb3dbIGNhbGxiYWNrTmFtZSBd
ID0gZnVuY3Rpb24oKSB7Ci0gICAgcmVzcG9uc2VDb250YWluZXIgPSBhcmd1bWVudHM7Ci0gICAg
fTsKLQotICAgIC8vIENsZWFuLXVwIGZ1bmN0aW9uIChmaXJlcyBhZnRlciBjb252ZXJ0ZXJzKQot
ICAgIGpxWEhSLmFsd2F5cyhmdW5jdGlvbigpIHsKLSAgICAvLyBSZXN0b3JlIHByZWV4aXN0aW5n
IHZhbHVlCi0gICAgd2luZG93WyBjYWxsYmFja05hbWUgXSA9IG92ZXJ3cml0dGVuOwotCi0gICAg
Ly8gU2F2ZSBiYWNrIGFzIGZyZWUKLSAgICBpZiAoIHNbIGNhbGxiYWNrTmFtZSBdICkgewotICAg
IC8vIG1ha2Ugc3VyZSB0aGF0IHJlLXVzaW5nIHRoZSBvcHRpb25zIGRvZXNuJ3Qgc2NyZXcgdGhp
bmdzIGFyb3VuZAotICAgIHMuanNvbnBDYWxsYmFjayA9IG9yaWdpbmFsU2V0dGluZ3MuanNvbnBD
YWxsYmFjazsKLQotICAgIC8vIHNhdmUgdGhlIGNhbGxiYWNrIG5hbWUgZm9yIGZ1dHVyZSB1c2UK
LSAgICBvbGRDYWxsYmFja3MucHVzaCggY2FsbGJhY2tOYW1lICk7Ci0gICAgfQotCi0gICAgLy8g
Q2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlCi0gICAgaWYg
KCByZXNwb25zZUNvbnRhaW5lciAmJiBqUXVlcnkuaXNGdW5jdGlvbiggb3ZlcndyaXR0ZW4gKSAp
IHsKLSAgICBvdmVyd3JpdHRlbiggcmVzcG9uc2VDb250YWluZXJbIDAgXSApOwotICAgIH0KLQot
ICAgIHJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7Ci0gICAgfSk7
Ci0KLSAgICAvLyBEZWxlZ2F0ZSB0byBzY3JpcHQKLSAgICByZXR1cm4gInNjcmlwdCI7Ci0gICAg
fQotfSk7Ci12YXIgeGhyQ2FsbGJhY2tzLCB4aHJTdXBwb3J0ZWQsCi0gICAgeGhySWQgPSAwLAot
ICAgIC8vICM1MjgwOiBJbnRlcm5ldCBFeHBsb3JlciB3aWxsIGtlZXAgY29ubmVjdGlvbnMgYWxp
dmUgaWYgd2UgZG9uJ3QgYWJvcnQgb24gdW5sb2FkCi0gICAgeGhyT25VbmxvYWRBYm9ydCA9IHdp
bmRvdy5BY3RpdmVYT2JqZWN0ICYmIGZ1bmN0aW9uKCkgewotICAgIC8vIEFib3J0IGFsbCBwZW5k
aW5nIHJlcXVlc3RzCi0gICAgdmFyIGtleTsKLSAgICBmb3IgKCBrZXkgaW4geGhyQ2FsbGJhY2tz
ICkgewotICAgIHhockNhbGxiYWNrc1sga2V5IF0oIHVuZGVmaW5lZCwgdHJ1ZSApOwotICAgIH0K
LSAgICB9OwotCi0vLyBGdW5jdGlvbnMgdG8gY3JlYXRlIHhocnMKLWZ1bmN0aW9uIGNyZWF0ZVN0
YW5kYXJkWEhSKCkgewotICAgIHRyeSB7Ci0gICAgcmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJl
cXVlc3QoKTsKLSAgICB9IGNhdGNoKCBlICkge30KLX0KLQotZnVuY3Rpb24gY3JlYXRlQWN0aXZl
WEhSKCkgewotICAgIHRyeSB7Ci0gICAgcmV0dXJuIG5ldyB3aW5kb3cuQWN0aXZlWE9iamVjdCgi
TWljcm9zb2Z0LlhNTEhUVFAiKTsKLSAgICB9IGNhdGNoKCBlICkge30KLX0KLQotLy8gQ3JlYXRl
IHRoZSByZXF1ZXN0IG9iamVjdAotLy8gKFRoaXMgaXMgc3RpbGwgYXR0YWNoZWQgdG8gYWpheFNl
dHRpbmdzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KQotalF1ZXJ5LmFqYXhTZXR0aW5ncy54
aHIgPSB3aW5kb3cuQWN0aXZlWE9iamVjdCA/Ci0gICAgLyogTWljcm9zb2Z0IGZhaWxlZCB0byBw
cm9wZXJseQotICAgICAqIGltcGxlbWVudCB0aGUgWE1MSHR0cFJlcXVlc3QgaW4gSUU3IChjYW4n
dCByZXF1ZXN0IGxvY2FsIGZpbGVzKSwKLSAgICAgKiBzbyB3ZSB1c2UgdGhlIEFjdGl2ZVhPYmpl
Y3Qgd2hlbiBpdCBpcyBhdmFpbGFibGUKLSAgICAgKiBBZGRpdGlvbmFsbHkgWE1MSHR0cFJlcXVl
c3QgY2FuIGJlIGRpc2FibGVkIGluIElFNy9JRTggc28KLSAgICAgKiB3ZSBuZWVkIGEgZmFsbGJh
Y2suCi0gICAgICovCi0gICAgZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuICF0aGlzLmlzTG9jYWwg
JiYgY3JlYXRlU3RhbmRhcmRYSFIoKSB8fCBjcmVhdGVBY3RpdmVYSFIoKTsKLSAgICB9IDoKLSAg
ICAvLyBGb3IgYWxsIG90aGVyIGJyb3dzZXJzLCB1c2UgdGhlIHN0YW5kYXJkIFhNTEh0dHBSZXF1
ZXN0IG9iamVjdAotICAgIGNyZWF0ZVN0YW5kYXJkWEhSOwotCi0vLyBEZXRlcm1pbmUgc3VwcG9y
dCBwcm9wZXJ0aWVzCi14aHJTdXBwb3J0ZWQgPSBqUXVlcnkuYWpheFNldHRpbmdzLnhocigpOwot
alF1ZXJ5LnN1cHBvcnQuY29ycyA9ICEheGhyU3VwcG9ydGVkICYmICggIndpdGhDcmVkZW50aWFs
cyIgaW4geGhyU3VwcG9ydGVkICk7Ci14aHJTdXBwb3J0ZWQgPSBqUXVlcnkuc3VwcG9ydC5hamF4
ID0gISF4aHJTdXBwb3J0ZWQ7Ci0KLS8vIENyZWF0ZSB0cmFuc3BvcnQgaWYgdGhlIGJyb3dzZXIg
Y2FuIHByb3ZpZGUgYW4geGhyCi1pZiAoIHhoclN1cHBvcnRlZCApIHsKLQotICAgIGpRdWVyeS5h
amF4VHJhbnNwb3J0KGZ1bmN0aW9uKCBzICkgewotICAgIC8vIENyb3NzIGRvbWFpbiBvbmx5IGFs
bG93ZWQgaWYgc3VwcG9ydGVkIHRocm91Z2ggWE1MSHR0cFJlcXVlc3QKLSAgICBpZiAoICFzLmNy
b3NzRG9tYWluIHx8IGpRdWVyeS5zdXBwb3J0LmNvcnMgKSB7Ci0KLSAgICB2YXIgY2FsbGJhY2s7
Ci0KLSAgICByZXR1cm4gewotICAgIHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0ZSAp
IHsKLQotICAgIC8vIEdldCBhIG5ldyB4aHIKLSAgICB2YXIgaGFuZGxlLCBpLAotICAgIHhociA9
IHMueGhyKCk7Ci0KLSAgICAvLyBPcGVuIHRoZSBzb2NrZXQKLSAgICAvLyBQYXNzaW5nIG51bGwg
dXNlcm5hbWUsIGdlbmVyYXRlcyBhIGxvZ2luIHBvcHVwIG9uIE9wZXJhICgjMjg2NSkKLSAgICBp
ZiAoIHMudXNlcm5hbWUgKSB7Ci0gICAgeGhyLm9wZW4oIHMudHlwZSwgcy51cmwsIHMuYXN5bmMs
IHMudXNlcm5hbWUsIHMucGFzc3dvcmQgKTsKLSAgICB9IGVsc2UgewotICAgIHhoci5vcGVuKCBz
LnR5cGUsIHMudXJsLCBzLmFzeW5jICk7Ci0gICAgfQotCi0gICAgLy8gQXBwbHkgY3VzdG9tIGZp
ZWxkcyBpZiBwcm92aWRlZAotICAgIGlmICggcy54aHJGaWVsZHMgKSB7Ci0gICAgZm9yICggaSBp
biBzLnhockZpZWxkcyApIHsKLSAgICB4aHJbIGkgXSA9IHMueGhyRmllbGRzWyBpIF07Ci0gICAg
fQotICAgIH0KLQotICAgIC8vIE92ZXJyaWRlIG1pbWUgdHlwZSBpZiBuZWVkZWQKLSAgICBpZiAo
IHMubWltZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7Ci0gICAgeGhyLm92ZXJyaWRl
TWltZVR5cGUoIHMubWltZVR5cGUgKTsKLSAgICB9Ci0KLSAgICAvLyBYLVJlcXVlc3RlZC1XaXRo
IGhlYWRlcgotICAgIC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25k
aXRpb25zIGZvciBhIHByZWZsaWdodCBhcmUKLSAgICAvLyBha2luIHRvIGEgamlnc2F3IHB1enps
ZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLgotICAgIC8vIChpdCBjYW4gYWx3
YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIG9yIGV2ZW4gdXNpbmcgYWpheFNldHVw
KQotICAgIC8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBp
ZiBhbHJlYWR5IHByb3ZpZGVkLgotICAgIGlmICggIXMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNb
IlgtUmVxdWVzdGVkLVdpdGgiXSApIHsKLSAgICBoZWFkZXJzWyJYLVJlcXVlc3RlZC1XaXRoIl0g
PSAiWE1MSHR0cFJlcXVlc3QiOwotICAgIH0KLQotICAgIC8vIE5lZWQgYW4gZXh0cmEgdHJ5L2Nh
dGNoIGZvciBjcm9zcyBkb21haW4gcmVxdWVzdHMgaW4gRmlyZWZveCAzCi0gICAgdHJ5IHsKLSAg
ICBmb3IgKCBpIGluIGhlYWRlcnMgKSB7Ci0gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIGksIGhl
YWRlcnNbIGkgXSApOwotICAgIH0KLSAgICB9IGNhdGNoKCBlcnIgKSB7fQotCi0gICAgLy8gRG8g
c2VuZCB0aGUgcmVxdWVzdAotICAgIC8vIFRoaXMgbWF5IHJhaXNlIGFuIGV4Y2VwdGlvbiB3aGlj
aCBpcyBhY3R1YWxseQotICAgIC8vIGhhbmRsZWQgaW4galF1ZXJ5LmFqYXggKHNvIG5vIHRyeS9j
YXRjaCBoZXJlKQotICAgIHhoci5zZW5kKCAoIHMuaGFzQ29udGVudCAmJiBzLmRhdGEgKSB8fCBu
dWxsICk7Ci0KLSAgICAvLyBMaXN0ZW5lcgotICAgIGNhbGxiYWNrID0gZnVuY3Rpb24oIF8sIGlz
QWJvcnQgKSB7Ci0gICAgdmFyIHN0YXR1cywgcmVzcG9uc2VIZWFkZXJzLCBzdGF0dXNUZXh0LCBy
ZXNwb25zZXM7Ci0KLSAgICAvLyBGaXJlZm94IHRocm93cyBleGNlcHRpb25zIHdoZW4gYWNjZXNz
aW5nIHByb3BlcnRpZXMKLSAgICAvLyBvZiBhbiB4aHIgd2hlbiBhIG5ldHdvcmsgZXJyb3Igb2Nj
dXJyZWQKLSAgICAvLyBodHRwOi8vaGVscGZ1bC5rbm9icy1kaWFscy5jb20vaW5kZXgucGhwL0Nv
bXBvbmVudF9yZXR1cm5lZF9mYWlsdXJlX2NvZGU6XzB4ODAwNDAxMTFfKE5TX0VSUk9SX05PVF9B
VkFJTEFCTEUpCi0gICAgdHJ5IHsKLQotICAgIC8vIFdhcyBuZXZlciBjYWxsZWQgYW5kIGlzIGFi
b3J0ZWQgb3IgY29tcGxldGUKLSAgICBpZiAoIGNhbGxiYWNrICYmICggaXNBYm9ydCB8fCB4aHIu
cmVhZHlTdGF0ZSA9PT0gNCApICkgewotCi0gICAgLy8gT25seSBjYWxsZWQgb25jZQotICAgIGNh
bGxiYWNrID0gdW5kZWZpbmVkOwotCi0gICAgLy8gRG8gbm90IGtlZXAgYXMgYWN0aXZlIGFueW1v
cmUKLSAgICBpZiAoIGhhbmRsZSApIHsKLSAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0galF1
ZXJ5Lm5vb3A7Ci0gICAgaWYgKCB4aHJPblVubG9hZEFib3J0ICkgewotICAgIGRlbGV0ZSB4aHJD
YWxsYmFja3NbIGhhbmRsZSBdOwotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiBpdCdzIGFuIGFi
b3J0Ci0gICAgaWYgKCBpc0Fib3J0ICkgewotICAgIC8vIEFib3J0IGl0IG1hbnVhbGx5IGlmIG5l
ZWRlZAotICAgIGlmICggeGhyLnJlYWR5U3RhdGUgIT09IDQgKSB7Ci0gICAgeGhyLmFib3J0KCk7
Ci0gICAgfQotICAgIH0gZWxzZSB7Ci0gICAgcmVzcG9uc2VzID0ge307Ci0gICAgc3RhdHVzID0g
eGhyLnN0YXR1czsKLSAgICByZXNwb25zZUhlYWRlcnMgPSB4aHIuZ2V0QWxsUmVzcG9uc2VIZWFk
ZXJzKCk7Ci0KLSAgICAvLyBXaGVuIHJlcXVlc3RpbmcgYmluYXJ5IGRhdGEsIElFNi05IHdpbGwg
dGhyb3cgYW4gZXhjZXB0aW9uCi0gICAgLy8gb24gYW55IGF0dGVtcHQgdG8gYWNjZXNzIHJlc3Bv
bnNlVGV4dCAoIzExNDI2KQotICAgIGlmICggdHlwZW9mIHhoci5yZXNwb25zZVRleHQgPT09ICJz
dHJpbmciICkgewotICAgIHJlc3BvbnNlcy50ZXh0ID0geGhyLnJlc3BvbnNlVGV4dDsKLSAgICB9
Ci0KLSAgICAvLyBGaXJlZm94IHRocm93cyBhbiBleGNlcHRpb24gd2hlbiBhY2Nlc3NpbmcKLSAg
ICAvLyBzdGF0dXNUZXh0IGZvciBmYXVsdHkgY3Jvc3MtZG9tYWluIHJlcXVlc3RzCi0gICAgdHJ5
IHsKLSAgICBzdGF0dXNUZXh0ID0geGhyLnN0YXR1c1RleHQ7Ci0gICAgfSBjYXRjaCggZSApIHsK
LSAgICAvLyBXZSBub3JtYWxpemUgd2l0aCBXZWJraXQgZ2l2aW5nIGFuIGVtcHR5IHN0YXR1c1Rl
eHQKLSAgICBzdGF0dXNUZXh0ID0gIiI7Ci0gICAgfQotCi0gICAgLy8gRmlsdGVyIHN0YXR1cyBm
b3Igbm9uIHN0YW5kYXJkIGJlaGF2aW9ycwotCi0gICAgLy8gSWYgdGhlIHJlcXVlc3QgaXMgbG9j
YWwgYW5kIHdlIGhhdmUgZGF0YTogYXNzdW1lIGEgc3VjY2VzcwotICAgIC8vIChzdWNjZXNzIHdp
dGggbm8gZGF0YSB3b24ndCBnZXQgbm90aWZpZWQsIHRoYXQncyB0aGUgYmVzdCB3ZQotICAgIC8v
IGNhbiBkbyBnaXZlbiBjdXJyZW50IGltcGxlbWVudGF0aW9ucykKLSAgICBpZiAoICFzdGF0dXMg
JiYgcy5pc0xvY2FsICYmICFzLmNyb3NzRG9tYWluICkgewotICAgIHN0YXR1cyA9IHJlc3BvbnNl
cy50ZXh0ID8gMjAwIDogNDA0OwotICAgIC8vIElFIC0gIzE0NTA6IHNvbWV0aW1lcyByZXR1cm5z
IDEyMjMgd2hlbiBpdCBzaG91bGQgYmUgMjA0Ci0gICAgfSBlbHNlIGlmICggc3RhdHVzID09PSAx
MjIzICkgewotICAgIHN0YXR1cyA9IDIwNDsKLSAgICB9Ci0gICAgfQotICAgIH0KLSAgICB9IGNh
dGNoKCBmaXJlZm94QWNjZXNzRXhjZXB0aW9uICkgewotICAgIGlmICggIWlzQWJvcnQgKSB7Ci0g
ICAgY29tcGxldGUoIC0xLCBmaXJlZm94QWNjZXNzRXhjZXB0aW9uICk7Ci0gICAgfQotICAgIH0K
LQotICAgIC8vIENhbGwgY29tcGxldGUgaWYgbmVlZGVkCi0gICAgaWYgKCByZXNwb25zZXMgKSB7
Ci0gICAgY29tcGxldGUoIHN0YXR1cywgc3RhdHVzVGV4dCwgcmVzcG9uc2VzLCByZXNwb25zZUhl
YWRlcnMgKTsKLSAgICB9Ci0gICAgfTsKLQotICAgIGlmICggIXMuYXN5bmMgKSB7Ci0gICAgLy8g
aWYgd2UncmUgaW4gc3luYyBtb2RlIHdlIGZpcmUgdGhlIGNhbGxiYWNrCi0gICAgY2FsbGJhY2so
KTsKLSAgICB9IGVsc2UgaWYgKCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHsKLSAgICAvLyAoSUU2
ICYgSUU3KSBpZiBpdCdzIGluIGNhY2hlIGFuZCBoYXMgYmVlbgotICAgIC8vIHJldHJpZXZlZCBk
aXJlY3RseSB3ZSBuZWVkIHRvIGZpcmUgdGhlIGNhbGxiYWNrCi0gICAgc2V0VGltZW91dCggY2Fs
bGJhY2sgKTsKLSAgICB9IGVsc2UgewotICAgIGhhbmRsZSA9ICsreGhySWQ7Ci0gICAgaWYgKCB4
aHJPblVubG9hZEFib3J0ICkgewotICAgIC8vIENyZWF0ZSB0aGUgYWN0aXZlIHhocnMgY2FsbGJh
Y2tzIGxpc3QgaWYgbmVlZGVkCi0gICAgLy8gYW5kIGF0dGFjaCB0aGUgdW5sb2FkIGhhbmRsZXIK
LSAgICBpZiAoICF4aHJDYWxsYmFja3MgKSB7Ci0gICAgeGhyQ2FsbGJhY2tzID0ge307Ci0gICAg
alF1ZXJ5KCB3aW5kb3cgKS51bmxvYWQoIHhock9uVW5sb2FkQWJvcnQgKTsKLSAgICB9Ci0gICAg
Ly8gQWRkIHRvIGxpc3Qgb2YgYWN0aXZlIHhocnMgY2FsbGJhY2tzCi0gICAgeGhyQ2FsbGJhY2tz
WyBoYW5kbGUgXSA9IGNhbGxiYWNrOwotICAgIH0KLSAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdl
ID0gY2FsbGJhY2s7Ci0gICAgfQotICAgIH0sCi0KLSAgICBhYm9ydDogZnVuY3Rpb24oKSB7Ci0g
ICAgaWYgKCBjYWxsYmFjayApIHsKLSAgICBjYWxsYmFjayggdW5kZWZpbmVkLCB0cnVlICk7Ci0g
ICAgfQotICAgIH0KLSAgICB9OwotICAgIH0KLSAgICB9KTsKLX0KLXZhciBmeE5vdywgdGltZXJJ
ZCwKLSAgICByZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLywKLSAgICByZnhudW0g
PSBuZXcgUmVnRXhwKCAiXig/OihbKy1dKT18KSgiICsgY29yZV9wbnVtICsgIikoW2EteiVdKikk
IiwgImkiICksCi0gICAgcnJ1biA9IC9xdWV1ZUhvb2tzJC8sCi0gICAgYW5pbWF0aW9uUHJlZmls
dGVycyA9IFsgZGVmYXVsdFByZWZpbHRlciBdLAotICAgIHR3ZWVuZXJzID0gewotICAgICIqIjog
W2Z1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHsKLSAgICB2YXIgZW5kLCB1bml0LAotICAgIHR3ZWVu
ID0gdGhpcy5jcmVhdGVUd2VlbiggcHJvcCwgdmFsdWUgKSwKLSAgICBwYXJ0cyA9IHJmeG51bS5l
eGVjKCB2YWx1ZSApLAotICAgIHRhcmdldCA9IHR3ZWVuLmN1cigpLAotICAgIHN0YXJ0ID0gK3Rh
cmdldCB8fCAwLAotICAgIHNjYWxlID0gMSwKLSAgICBtYXhJdGVyYXRpb25zID0gMjA7Ci0KLSAg
ICBpZiAoIHBhcnRzICkgewotICAgIGVuZCA9ICtwYXJ0c1syXTsKLSAgICB1bml0ID0gcGFydHNb
M10gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyAiIiA6ICJweCIgKTsKLQotICAgIC8v
IFdlIG5lZWQgdG8gY29tcHV0ZSBzdGFydGluZyB2YWx1ZQotICAgIGlmICggdW5pdCAhPT0gInB4
IiAmJiBzdGFydCApIHsKLSAgICAvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBmcm9tIGEgbm9u
emVybyBzdGFydGluZyBwb2ludAotICAgIC8vIFByZWZlciB0aGUgY3VycmVudCBwcm9wZXJ0eSwg
YmVjYXVzZSB0aGlzIHByb2Nlc3Mgd2lsbCBiZSB0cml2aWFsIGlmIGl0IHVzZXMgdGhlIHNhbWUg
dW5pdHMKLSAgICAvLyBGYWxsYmFjayB0byBlbmQgb3IgYSBzaW1wbGUgY29uc3RhbnQKLSAgICBz
dGFydCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHByb3AsIHRydWUgKSB8fCBlbmQgfHwgMTsK
LQotICAgIGRvIHsKLSAgICAvLyBJZiBwcmV2aW91cyBpdGVyYXRpb24gemVyb2VkIG91dCwgZG91
YmxlIHVudGlsIHdlIGdldCAqc29tZXRoaW5nKgotICAgIC8vIFVzZSBhIHN0cmluZyBmb3IgZG91
YmxpbmcgZmFjdG9yIHNvIHdlIGRvbid0IGFjY2lkZW50YWxseSBzZWUgc2NhbGUgYXMgdW5jaGFu
Z2VkIGJlbG93Ci0gICAgc2NhbGUgPSBzY2FsZSB8fCAiLjUiOwotCi0gICAgLy8gQWRqdXN0IGFu
ZCBhcHBseQotICAgIHN0YXJ0ID0gc3RhcnQgLyBzY2FsZTsKLSAgICBqUXVlcnkuc3R5bGUoIHR3
ZWVuLmVsZW0sIHByb3AsIHN0YXJ0ICsgdW5pdCApOwotCi0gICAgLy8gVXBkYXRlIHNjYWxlLCB0
b2xlcmF0aW5nIHplcm8gb3IgTmFOIGZyb20gdHdlZW4uY3VyKCkKLSAgICAvLyBBbmQgYnJlYWtp
bmcgdGhlIGxvb3AgaWYgc2NhbGUgaXMgdW5jaGFuZ2VkIG9yIHBlcmZlY3QsIG9yIGlmIHdlJ3Zl
IGp1c3QgaGFkIGVub3VnaAotICAgIH0gd2hpbGUgKCBzY2FsZSAhPT0gKHNjYWxlID0gdHdlZW4u
Y3VyKCkgLyB0YXJnZXQpICYmIHNjYWxlICE9PSAxICYmIC0tbWF4SXRlcmF0aW9ucyApOwotICAg
IH0KLQotICAgIHR3ZWVuLnVuaXQgPSB1bml0OwotICAgIHR3ZWVuLnN0YXJ0ID0gc3RhcnQ7Ci0g
ICAgLy8gSWYgYSArPS8tPSB0b2tlbiB3YXMgcHJvdmlkZWQsIHdlJ3JlIGRvaW5nIGEgcmVsYXRp
dmUgYW5pbWF0aW9uCi0gICAgdHdlZW4uZW5kID0gcGFydHNbMV0gPyBzdGFydCArICggcGFydHNb
MV0gKyAxICkgKiBlbmQgOiBlbmQ7Ci0gICAgfQotICAgIHJldHVybiB0d2VlbjsKLSAgICB9XQot
ICAgIH07Ci0KLS8vIEFuaW1hdGlvbnMgY3JlYXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5
bmNocm9ub3VzbHkKLWZ1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkgewotICAgIHNldFRpbWVvdXQoZnVu
Y3Rpb24oKSB7Ci0gICAgZnhOb3cgPSB1bmRlZmluZWQ7Ci0gICAgfSk7Ci0gICAgcmV0dXJuICgg
ZnhOb3cgPSBqUXVlcnkubm93KCkgKTsKLX0KLQotZnVuY3Rpb24gY3JlYXRlVHdlZW5zKCBhbmlt
YXRpb24sIHByb3BzICkgewotICAgIGpRdWVyeS5lYWNoKCBwcm9wcywgZnVuY3Rpb24oIHByb3As
IHZhbHVlICkgewotICAgIHZhciBjb2xsZWN0aW9uID0gKCB0d2VlbmVyc1sgcHJvcCBdIHx8IFtd
ICkuY29uY2F0KCB0d2VlbmVyc1sgIioiIF0gKSwKLSAgICBpbmRleCA9IDAsCi0gICAgbGVuZ3Ro
ID0gY29sbGVjdGlvbi5sZW5ndGg7Ci0gICAgZm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgr
KyApIHsKLSAgICBpZiAoIGNvbGxlY3Rpb25bIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBwcm9w
LCB2YWx1ZSApICkgewotCi0gICAgLy8gd2UncmUgZG9uZSB3aXRoIHRoaXMgcHJvcGVydHkKLSAg
ICByZXR1cm47Ci0gICAgfQotICAgIH0KLSAgICB9KTsKLX0KLQotZnVuY3Rpb24gQW5pbWF0aW9u
KCBlbGVtLCBwcm9wZXJ0aWVzLCBvcHRpb25zICkgewotICAgIHZhciByZXN1bHQsCi0gICAgc3Rv
cHBlZCwKLSAgICBpbmRleCA9IDAsCi0gICAgbGVuZ3RoID0gYW5pbWF0aW9uUHJlZmlsdGVycy5s
ZW5ndGgsCi0gICAgZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9u
KCkgewotICAgIC8vIGRvbid0IG1hdGNoIGVsZW0gaW4gdGhlIDphbmltYXRlZCBzZWxlY3Rvcgot
ICAgIGRlbGV0ZSB0aWNrLmVsZW07Ci0gICAgfSksCi0gICAgdGljayA9IGZ1bmN0aW9uKCkgewot
ICAgIGlmICggc3RvcHBlZCApIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHZhciBj
dXJyZW50VGltZSA9IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksCi0gICAgcmVtYWluaW5nID0gTWF0
aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJy
ZW50VGltZSApLAotICAgIC8vIGFyY2hhaWMgY3Jhc2ggYnVnIHdvbid0IGFsbG93IHVzIHRvIHVz
ZSAxIC0gKCAwLjUgfHwgMCApICgjMTI0OTcpCi0gICAgdGVtcCA9IHJlbWFpbmluZyAvIGFuaW1h
dGlvbi5kdXJhdGlvbiB8fCAwLAotICAgIHBlcmNlbnQgPSAxIC0gdGVtcCwKLSAgICBpbmRleCA9
IDAsCi0gICAgbGVuZ3RoID0gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGg7Ci0KLSAgICBmb3IgKCA7
IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHsKLSAgICBhbmltYXRpb24udHdlZW5zWyBpbmRl
eCBdLnJ1biggcGVyY2VudCApOwotICAgIH0KLQotICAgIGRlZmVycmVkLm5vdGlmeVdpdGgoIGVs
ZW0sIFsgYW5pbWF0aW9uLCBwZXJjZW50LCByZW1haW5pbmcgXSk7Ci0KLSAgICBpZiAoIHBlcmNl
bnQgPCAxICYmIGxlbmd0aCApIHsKLSAgICByZXR1cm4gcmVtYWluaW5nOwotICAgIH0gZWxzZSB7
Ci0gICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uIF0gKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIH0sCi0gICAgYW5pbWF0aW9uID0gZGVmZXJyZWQucHJv
bWlzZSh7Ci0gICAgZWxlbTogZWxlbSwKLSAgICBwcm9wczogalF1ZXJ5LmV4dGVuZCgge30sIHBy
b3BlcnRpZXMgKSwKLSAgICBvcHRzOiBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB7IHNwZWNpYWxFYXNp
bmc6IHt9IH0sIG9wdGlvbnMgKSwKLSAgICBvcmlnaW5hbFByb3BlcnRpZXM6IHByb3BlcnRpZXMs
Ci0gICAgb3JpZ2luYWxPcHRpb25zOiBvcHRpb25zLAotICAgIHN0YXJ0VGltZTogZnhOb3cgfHwg
Y3JlYXRlRnhOb3coKSwKLSAgICBkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbiwKLSAgICB0d2Vl
bnM6IFtdLAotICAgIGNyZWF0ZVR3ZWVuOiBmdW5jdGlvbiggcHJvcCwgZW5kICkgewotICAgIHZh
ciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHByb3AsIGVuZCwK
LSAgICBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nWyBwcm9wIF0gfHwgYW5pbWF0aW9uLm9w
dHMuZWFzaW5nICk7Ci0gICAgYW5pbWF0aW9uLnR3ZWVucy5wdXNoKCB0d2VlbiApOwotICAgIHJl
dHVybiB0d2VlbjsKLSAgICB9LAotICAgIHN0b3A6IGZ1bmN0aW9uKCBnb3RvRW5kICkgewotICAg
IHZhciBpbmRleCA9IDAsCi0gICAgLy8gaWYgd2UgYXJlIGdvaW5nIHRvIHRoZSBlbmQsIHdlIHdh
bnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zCi0gICAgLy8gb3RoZXJ3aXNlIHdlIHNraXAgdGhpcyBw
YXJ0Ci0gICAgbGVuZ3RoID0gZ290b0VuZCA/IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoIDogMDsK
LSAgICBpZiAoIHN0b3BwZWQgKSB7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotICAgIHN0b3Bw
ZWQgPSB0cnVlOwotICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkgewotICAg
IGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCAxICk7Ci0gICAgfQotCi0gICAgLy8gcmVz
b2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFzdCBmcmFtZQotICAgIC8vIG90aGVyd2lzZSwgcmVq
ZWN0Ci0gICAgaWYgKCBnb3RvRW5kICkgewotICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVt
LCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7Ci0gICAgfSBlbHNlIHsKLSAgICBkZWZlcnJlZC5y
ZWplY3RXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7Ci0gICAgfQotICAgIHJl
dHVybiB0aGlzOwotICAgIH0KLSAgICB9KSwKLSAgICBwcm9wcyA9IGFuaW1hdGlvbi5wcm9wczsK
LQotICAgIHByb3BGaWx0ZXIoIHByb3BzLCBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nICk7
Ci0KLSAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHsKLSAgICByZXN1bHQg
PSBhbmltYXRpb25QcmVmaWx0ZXJzWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgZWxlbSwgcHJv
cHMsIGFuaW1hdGlvbi5vcHRzICk7Ci0gICAgaWYgKCByZXN1bHQgKSB7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9Ci0gICAgfQotCi0gICAgY3JlYXRlVHdlZW5zKCBhbmltYXRpb24sIHByb3Bz
ICk7Ci0KLSAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFydCAp
ICkgewotICAgIGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApOwot
ICAgIH0KLQotICAgIGpRdWVyeS5meC50aW1lcigKLSAgICBqUXVlcnkuZXh0ZW5kKCB0aWNrLCB7
Ci0gICAgZWxlbTogZWxlbSwKLSAgICBhbmltOiBhbmltYXRpb24sCi0gICAgcXVldWU6IGFuaW1h
dGlvbi5vcHRzLnF1ZXVlCi0gICAgfSkKLSAgICApOwotCi0gICAgLy8gYXR0YWNoIGNhbGxiYWNr
cyBmcm9tIG9wdGlvbnMKLSAgICByZXR1cm4gYW5pbWF0aW9uLnByb2dyZXNzKCBhbmltYXRpb24u
b3B0cy5wcm9ncmVzcyApCi0gICAgLmRvbmUoIGFuaW1hdGlvbi5vcHRzLmRvbmUsIGFuaW1hdGlv
bi5vcHRzLmNvbXBsZXRlICkKLSAgICAuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApCi0gICAg
LmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7Ci19Ci0KLWZ1bmN0aW9uIHByb3BGaWx0
ZXIoIHByb3BzLCBzcGVjaWFsRWFzaW5nICkgewotICAgIHZhciB2YWx1ZSwgbmFtZSwgaW5kZXgs
IGVhc2luZywgaG9va3M7Ci0KLSAgICAvLyBjYW1lbENhc2UsIHNwZWNpYWxFYXNpbmcgYW5kIGV4
cGFuZCBjc3NIb29rIHBhc3MKLSAgICBmb3IgKCBpbmRleCBpbiBwcm9wcyApIHsKLSAgICBuYW1l
ID0galF1ZXJ5LmNhbWVsQ2FzZSggaW5kZXggKTsKLSAgICBlYXNpbmcgPSBzcGVjaWFsRWFzaW5n
WyBuYW1lIF07Ci0gICAgdmFsdWUgPSBwcm9wc1sgaW5kZXggXTsKLSAgICBpZiAoIGpRdWVyeS5p
c0FycmF5KCB2YWx1ZSApICkgewotICAgIGVhc2luZyA9IHZhbHVlWyAxIF07Ci0gICAgdmFsdWUg
PSBwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyAwIF07Ci0gICAgfQotCi0gICAgaWYgKCBpbmRleCAh
PT0gbmFtZSApIHsKLSAgICBwcm9wc1sgbmFtZSBdID0gdmFsdWU7Ci0gICAgZGVsZXRlIHByb3Bz
WyBpbmRleCBdOwotICAgIH0KLQotICAgIGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF07
Ci0gICAgaWYgKCBob29rcyAmJiAiZXhwYW5kIiBpbiBob29rcyApIHsKLSAgICB2YWx1ZSA9IGhv
b2tzLmV4cGFuZCggdmFsdWUgKTsKLSAgICBkZWxldGUgcHJvcHNbIG5hbWUgXTsKLQotICAgIC8v
IG5vdCBxdWl0ZSAkLmV4dGVuZCwgdGhpcyB3b250IG92ZXJ3cml0ZSBrZXlzIGFscmVhZHkgcHJl
c2VudC4KLSAgICAvLyBhbHNvIC0gcmV1c2luZyAnaW5kZXgnIGZyb20gYWJvdmUgYmVjYXVzZSB3
ZSBoYXZlIHRoZSBjb3JyZWN0ICJuYW1lIgotICAgIGZvciAoIGluZGV4IGluIHZhbHVlICkgewot
ICAgIGlmICggISggaW5kZXggaW4gcHJvcHMgKSApIHsKLSAgICBwcm9wc1sgaW5kZXggXSA9IHZh
bHVlWyBpbmRleCBdOwotICAgIHNwZWNpYWxFYXNpbmdbIGluZGV4IF0gPSBlYXNpbmc7Ci0gICAg
fQotICAgIH0KLSAgICB9IGVsc2UgewotICAgIHNwZWNpYWxFYXNpbmdbIG5hbWUgXSA9IGVhc2lu
ZzsKLSAgICB9Ci0gICAgfQotfQotCi1qUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVuZCgg
QW5pbWF0aW9uLCB7Ci0KLSAgICB0d2VlbmVyOiBmdW5jdGlvbiggcHJvcHMsIGNhbGxiYWNrICkg
ewotICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHByb3BzICkgKSB7Ci0gICAgY2FsbGJhY2sg
PSBwcm9wczsKLSAgICBwcm9wcyA9IFsgIioiIF07Ci0gICAgfSBlbHNlIHsKLSAgICBwcm9wcyA9
IHByb3BzLnNwbGl0KCIgIik7Ci0gICAgfQotCi0gICAgdmFyIHByb3AsCi0gICAgaW5kZXggPSAw
LAotICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDsKLQotICAgIGZvciAoIDsgaW5kZXggPCBsZW5n
dGggOyBpbmRleCsrICkgewotICAgIHByb3AgPSBwcm9wc1sgaW5kZXggXTsKLSAgICB0d2VlbmVy
c1sgcHJvcCBdID0gdHdlZW5lcnNbIHByb3AgXSB8fCBbXTsKLSAgICB0d2VlbmVyc1sgcHJvcCBd
LnVuc2hpZnQoIGNhbGxiYWNrICk7Ci0gICAgfQotICAgIH0sCi0KLSAgICBwcmVmaWx0ZXI6IGZ1
bmN0aW9uKCBjYWxsYmFjaywgcHJlcGVuZCApIHsKLSAgICBpZiAoIHByZXBlbmQgKSB7Ci0gICAg
YW5pbWF0aW9uUHJlZmlsdGVycy51bnNoaWZ0KCBjYWxsYmFjayApOwotICAgIH0gZWxzZSB7Ci0g
ICAgYW5pbWF0aW9uUHJlZmlsdGVycy5wdXNoKCBjYWxsYmFjayApOwotICAgIH0KLSAgICB9Ci19
KTsKLQotZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7Ci0g
ICAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi8KLSAgICB2YXIgcHJvcCwgaW5kZXgsIGxlbmd0
aCwKLSAgICB2YWx1ZSwgZGF0YVNob3csIHRvZ2dsZSwKLSAgICB0d2VlbiwgaG9va3MsIG9sZGZp
cmUsCi0gICAgYW5pbSA9IHRoaXMsCi0gICAgc3R5bGUgPSBlbGVtLnN0eWxlLAotICAgIG9yaWcg
PSB7fSwKLSAgICBoYW5kbGVkID0gW10sCi0gICAgaGlkZGVuID0gZWxlbS5ub2RlVHlwZSAmJiBp
c0hpZGRlbiggZWxlbSApOwotCi0gICAgLy8gaGFuZGxlIHF1ZXVlOiBmYWxzZSBwcm9taXNlcwot
ICAgIGlmICggIW9wdHMucXVldWUgKSB7Ci0gICAgaG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3Mo
IGVsZW0sICJmeCIgKTsKLSAgICBpZiAoIGhvb2tzLnVucXVldWVkID09IG51bGwgKSB7Ci0gICAg
aG9va3MudW5xdWV1ZWQgPSAwOwotICAgIG9sZGZpcmUgPSBob29rcy5lbXB0eS5maXJlOwotICAg
IGhvb2tzLmVtcHR5LmZpcmUgPSBmdW5jdGlvbigpIHsKLSAgICBpZiAoICFob29rcy51bnF1ZXVl
ZCApIHsKLSAgICBvbGRmaXJlKCk7Ci0gICAgfQotICAgIH07Ci0gICAgfQotICAgIGhvb2tzLnVu
cXVldWVkKys7Ci0KLSAgICBhbmltLmFsd2F5cyhmdW5jdGlvbigpIHsKLSAgICAvLyBkb2luZyB0
aGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgY29tcGxldGUgaGFuZGxlciB3aWxsIGJlIGNhbGxlZAot
ICAgIC8vIGJlZm9yZSB0aGlzIGNvbXBsZXRlcwotICAgIGFuaW0uYWx3YXlzKGZ1bmN0aW9uKCkg
ewotICAgIGhvb2tzLnVucXVldWVkLS07Ci0gICAgaWYgKCAhalF1ZXJ5LnF1ZXVlKCBlbGVtLCAi
ZngiICkubGVuZ3RoICkgewotICAgIGhvb2tzLmVtcHR5LmZpcmUoKTsKLSAgICB9Ci0gICAgfSk7
Ci0gICAgfSk7Ci0gICAgfQotCi0gICAgLy8gaGVpZ2h0L3dpZHRoIG92ZXJmbG93IHBhc3MKLSAg
ICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCAiaGVpZ2h0IiBpbiBwcm9wcyB8fCAid2lk
dGgiIGluIHByb3BzICkgKSB7Ci0gICAgLy8gTWFrZSBzdXJlIHRoYXQgbm90aGluZyBzbmVha3Mg
b3V0Ci0gICAgLy8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVjYXVzZSBJRSBk
b2VzIG5vdAotICAgIC8vIGNoYW5nZSB0aGUgb3ZlcmZsb3cgYXR0cmlidXRlIHdoZW4gb3ZlcmZs
b3dYIGFuZAotICAgIC8vIG92ZXJmbG93WSBhcmUgc2V0IHRvIHRoZSBzYW1lIHZhbHVlCi0gICAg
b3B0cy5vdmVyZmxvdyA9IFsgc3R5bGUub3ZlcmZsb3csIHN0eWxlLm92ZXJmbG93WCwgc3R5bGUu
b3ZlcmZsb3dZIF07Ci0KLSAgICAvLyBTZXQgZGlzcGxheSBwcm9wZXJ0eSB0byBpbmxpbmUtYmxv
Y2sgZm9yIGhlaWdodC93aWR0aAotICAgIC8vIGFuaW1hdGlvbnMgb24gaW5saW5lIGVsZW1lbnRz
IHRoYXQgYXJlIGhhdmluZyB3aWR0aC9oZWlnaHQgYW5pbWF0ZWQKLSAgICBpZiAoIGpRdWVyeS5j
c3MoIGVsZW0sICJkaXNwbGF5IiApID09PSAiaW5saW5lIiAmJgotICAgIGpRdWVyeS5jc3MoIGVs
ZW0sICJmbG9hdCIgKSA9PT0gIm5vbmUiICkgewotCi0gICAgLy8gaW5saW5lLWxldmVsIGVsZW1l
bnRzIGFjY2VwdCBpbmxpbmUtYmxvY2s7Ci0gICAgLy8gYmxvY2stbGV2ZWwgZWxlbWVudHMgbmVl
ZCB0byBiZSBpbmxpbmUgd2l0aCBsYXlvdXQKLSAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5pbmxp
bmVCbG9ja05lZWRzTGF5b3V0IHx8IGNzc19kZWZhdWx0RGlzcGxheSggZWxlbS5ub2RlTmFtZSAp
ID09PSAiaW5saW5lIiApIHsKLSAgICBzdHlsZS5kaXNwbGF5ID0gImlubGluZS1ibG9jayI7Ci0K
LSAgICB9IGVsc2UgewotICAgIHN0eWxlLnpvb20gPSAxOwotICAgIH0KLSAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKCBvcHRzLm92ZXJmbG93ICkgewotICAgIHN0eWxlLm92ZXJmbG93ID0gImhpZGRl
biI7Ci0gICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQuc2hyaW5rV3JhcEJsb2NrcyApIHsKLSAgICBh
bmltLmFsd2F5cyhmdW5jdGlvbigpIHsKLSAgICBzdHlsZS5vdmVyZmxvdyA9IG9wdHMub3ZlcmZs
b3dbIDAgXTsKLSAgICBzdHlsZS5vdmVyZmxvd1ggPSBvcHRzLm92ZXJmbG93WyAxIF07Ci0gICAg
c3R5bGUub3ZlcmZsb3dZID0gb3B0cy5vdmVyZmxvd1sgMiBdOwotICAgIH0pOwotICAgIH0KLSAg
ICB9Ci0KLQotICAgIC8vIHNob3cvaGlkZSBwYXNzCi0gICAgZm9yICggaW5kZXggaW4gcHJvcHMg
KSB7Ci0gICAgdmFsdWUgPSBwcm9wc1sgaW5kZXggXTsKLSAgICBpZiAoIHJmeHR5cGVzLmV4ZWMo
IHZhbHVlICkgKSB7Ci0gICAgZGVsZXRlIHByb3BzWyBpbmRleCBdOwotICAgIHRvZ2dsZSA9IHRv
Z2dsZSB8fCB2YWx1ZSA9PT0gInRvZ2dsZSI7Ci0gICAgaWYgKCB2YWx1ZSA9PT0gKCBoaWRkZW4g
PyAiaGlkZSIgOiAic2hvdyIgKSApIHsKLSAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgaGFuZGxl
ZC5wdXNoKCBpbmRleCApOwotICAgIH0KLSAgICB9Ci0KLSAgICBsZW5ndGggPSBoYW5kbGVkLmxl
bmd0aDsKLSAgICBpZiAoIGxlbmd0aCApIHsKLSAgICBkYXRhU2hvdyA9IGpRdWVyeS5fZGF0YSgg
ZWxlbSwgImZ4c2hvdyIgKSB8fCBqUXVlcnkuX2RhdGEoIGVsZW0sICJmeHNob3ciLCB7fSApOwot
ICAgIGlmICggImhpZGRlbiIgaW4gZGF0YVNob3cgKSB7Ci0gICAgaGlkZGVuID0gZGF0YVNob3cu
aGlkZGVuOwotICAgIH0KLQotICAgIC8vIHN0b3JlIHN0YXRlIGlmIGl0cyB0b2dnbGUgLSBlbmFi
bGVzIC5zdG9wKCkudG9nZ2xlKCkgdG8gInJldmVyc2UiCi0gICAgaWYgKCB0b2dnbGUgKSB7Ci0g
ICAgZGF0YVNob3cuaGlkZGVuID0gIWhpZGRlbjsKLSAgICB9Ci0gICAgaWYgKCBoaWRkZW4gKSB7
Ci0gICAgalF1ZXJ5KCBlbGVtICkuc2hvdygpOwotICAgIH0gZWxzZSB7Ci0gICAgYW5pbS5kb25l
KGZ1bmN0aW9uKCkgewotICAgIGpRdWVyeSggZWxlbSApLmhpZGUoKTsKLSAgICB9KTsKLSAgICB9
Ci0gICAgYW5pbS5kb25lKGZ1bmN0aW9uKCkgewotICAgIHZhciBwcm9wOwotICAgIGpRdWVyeS5f
cmVtb3ZlRGF0YSggZWxlbSwgImZ4c2hvdyIgKTsKLSAgICBmb3IgKCBwcm9wIGluIG9yaWcgKSB7
Ci0gICAgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBvcmlnWyBwcm9wIF0gKTsKLSAgICB9Ci0g
ICAgfSk7Ci0gICAgZm9yICggaW5kZXggPSAwIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkg
ewotICAgIHByb3AgPSBoYW5kbGVkWyBpbmRleCBdOwotICAgIHR3ZWVuID0gYW5pbS5jcmVhdGVU
d2VlbiggcHJvcCwgaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAgKTsKLSAgICBvcmlnWyBw
cm9wIF0gPSBkYXRhU2hvd1sgcHJvcCBdIHx8IGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCApOwot
Ci0gICAgaWYgKCAhKCBwcm9wIGluIGRhdGFTaG93ICkgKSB7Ci0gICAgZGF0YVNob3dbIHByb3Ag
XSA9IHR3ZWVuLnN0YXJ0OwotICAgIGlmICggaGlkZGVuICkgewotICAgIHR3ZWVuLmVuZCA9IHR3
ZWVuLnN0YXJ0OwotICAgIHR3ZWVuLnN0YXJ0ID0gcHJvcCA9PT0gIndpZHRoIiB8fCBwcm9wID09
PSAiaGVpZ2h0IiA/IDEgOiAwOwotICAgIH0KLSAgICB9Ci0gICAgfQotICAgIH0KLX0KLQotZnVu
Y3Rpb24gVHdlZW4oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICkgewotICAgIHJl
dHVybiBuZXcgVHdlZW4ucHJvdG90eXBlLmluaXQoIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwg
ZWFzaW5nICk7Ci19Ci1qUXVlcnkuVHdlZW4gPSBUd2VlbjsKLQotVHdlZW4ucHJvdG90eXBlID0g
ewotICAgIGNvbnN0cnVjdG9yOiBUd2VlbiwKLSAgICBpbml0OiBmdW5jdGlvbiggZWxlbSwgb3B0
aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcsIHVuaXQgKSB7Ci0gICAgdGhpcy5lbGVtID0gZWxlbTsK
LSAgICB0aGlzLnByb3AgPSBwcm9wOwotICAgIHRoaXMuZWFzaW5nID0gZWFzaW5nIHx8ICJzd2lu
ZyI7Ci0gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKLSAgICB0aGlzLnN0YXJ0ID0gdGhpcy5u
b3cgPSB0aGlzLmN1cigpOwotICAgIHRoaXMuZW5kID0gZW5kOwotICAgIHRoaXMudW5pdCA9IHVu
aXQgfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyAiIiA6ICJweCIgKTsKLSAgICB9LAot
ICAgIGN1cjogZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0
aGlzLnByb3AgXTsKLQotICAgIHJldHVybiBob29rcyAmJiBob29rcy5nZXQgPwotICAgIGhvb2tz
LmdldCggdGhpcyApIDoKLSAgICBUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KCB0aGlzICk7
Ci0gICAgfSwKLSAgICBydW46IGZ1bmN0aW9uKCBwZXJjZW50ICkgewotICAgIHZhciBlYXNlZCwK
LSAgICBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07Ci0KLSAgICBpZiAoIHRo
aXMub3B0aW9ucy5kdXJhdGlvbiApIHsKLSAgICB0aGlzLnBvcyA9IGVhc2VkID0galF1ZXJ5LmVh
c2luZ1sgdGhpcy5lYXNpbmcgXSgKLSAgICBwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24g
KiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb24KLSAgICApOwotICAgIH0gZWxz
ZSB7Ci0gICAgdGhpcy5wb3MgPSBlYXNlZCA9IHBlcmNlbnQ7Ci0gICAgfQotICAgIHRoaXMubm93
ID0gKCB0aGlzLmVuZCAtIHRoaXMuc3RhcnQgKSAqIGVhc2VkICsgdGhpcy5zdGFydDsKLQotICAg
IGlmICggdGhpcy5vcHRpb25zLnN0ZXAgKSB7Ci0gICAgdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCgg
dGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApOwotICAgIH0KLQotICAgIGlmICggaG9va3MgJiYg
aG9va3Muc2V0ICkgewotICAgIGhvb2tzLnNldCggdGhpcyApOwotICAgIH0gZWxzZSB7Ci0gICAg
VHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCggdGhpcyApOwotICAgIH0KLSAgICByZXR1cm4g
dGhpczsKLSAgICB9Ci19OwotCi1Ud2Vlbi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGUgPSBUd2Vl
bi5wcm90b3R5cGU7Ci0KLVR3ZWVuLnByb3BIb29rcyA9IHsKLSAgICBfZGVmYXVsdDogewotICAg
IGdldDogZnVuY3Rpb24oIHR3ZWVuICkgewotICAgIHZhciByZXN1bHQ7Ci0KLSAgICBpZiAoIHR3
ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSAhPSBudWxsICYmCi0gICAgKCF0d2Vlbi5lbGVtLnN0eWxl
IHx8IHR3ZWVuLmVsZW0uc3R5bGVbIHR3ZWVuLnByb3AgXSA9PSBudWxsKSApIHsKLSAgICByZXR1
cm4gdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdOwotICAgIH0KLQotICAgIC8vIHBhc3NpbmcgYW4g
ZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxs
eQotICAgIC8vIGF0dGVtcHQgYSBwYXJzZUZsb2F0IGFuZCBmYWxsYmFjayB0byBhIHN0cmluZyBp
ZiB0aGUgcGFyc2UgZmFpbHMKLSAgICAvLyBzbywgc2ltcGxlIHZhbHVlcyBzdWNoIGFzICIxMHB4
IiBhcmUgcGFyc2VkIHRvIEZsb2F0LgotICAgIC8vIGNvbXBsZXggdmFsdWVzIHN1Y2ggYXMgInJv
dGF0ZSgxcmFkKSIgYXJlIHJldHVybmVkIGFzIGlzLgotICAgIHJlc3VsdCA9IGpRdWVyeS5jc3Mo
IHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsICIiICk7Ci0gICAgLy8gRW1wdHkgc3RyaW5ncywgbnVs
bCwgdW5kZWZpbmVkIGFuZCAiYXV0byIgYXJlIGNvbnZlcnRlZCB0byAwLgotICAgIHJldHVybiAh
cmVzdWx0IHx8IHJlc3VsdCA9PT0gImF1dG8iID8gMCA6IHJlc3VsdDsKLSAgICB9LAotICAgIHNl
dDogZnVuY3Rpb24oIHR3ZWVuICkgewotICAgIC8vIHVzZSBzdGVwIGhvb2sgZm9yIGJhY2sgY29t
cGF0IC0gdXNlIGNzc0hvb2sgaWYgaXRzIHRoZXJlIC0gdXNlIC5zdHlsZSBpZiBpdHMKLSAgICAv
LyBhdmFpbGFibGUgYW5kIHVzZSBwbGFpbiBwcm9wZXJ0aWVzIHdoZXJlIGF2YWlsYWJsZQotICAg
IGlmICggalF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSApIHsKLSAgICBqUXVlcnkuZnguc3Rl
cFsgdHdlZW4ucHJvcCBdKCB0d2VlbiApOwotICAgIH0gZWxzZSBpZiAoIHR3ZWVuLmVsZW0uc3R5
bGUgJiYgKCB0d2Vlbi5lbGVtLnN0eWxlWyBqUXVlcnkuY3NzUHJvcHNbIHR3ZWVuLnByb3AgXSBd
ICE9IG51bGwgfHwgalF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5wcm9wIF0gKSApIHsKLSAgICBqUXVl
cnkuc3R5bGUoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIHR3ZWVuLm5vdyArIHR3ZWVuLnVuaXQg
KTsKLSAgICB9IGVsc2UgewotICAgIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5v
dzsKLSAgICB9Ci0gICAgfQotICAgIH0KLX07Ci0KLS8vIFJlbW92ZSBpbiAyLjAgLSB0aGlzIHN1
cHBvcnRzIElFOCdzIHBhbmljIGJhc2VkIGFwcHJvYWNoCi0vLyB0byBzZXR0aW5nIHRoaW5ncyBv
biBkaXNjb25uZWN0ZWQgbm9kZXMKLQotVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9IFR3ZWVu
LnByb3BIb29rcy5zY3JvbGxMZWZ0ID0gewotICAgIHNldDogZnVuY3Rpb24oIHR3ZWVuICkgewot
ICAgIGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAmJiB0d2Vlbi5lbGVtLnBhcmVudE5vZGUgKSB7
Ci0gICAgdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93OwotICAgIH0KLSAgICB9
Ci19OwotCi1qUXVlcnkuZWFjaChbICJ0b2dnbGUiLCAic2hvdyIsICJoaWRlIiBdLCBmdW5jdGlv
biggaSwgbmFtZSApIHsKLSAgICB2YXIgY3NzRm4gPSBqUXVlcnkuZm5bIG5hbWUgXTsKLSAgICBq
UXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsK
LSAgICByZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09ICJib29sZWFuIiA/
Ci0gICAgY3NzRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApIDoKLSAgICB0aGlzLmFuaW1hdGUo
IGdlbkZ4KCBuYW1lLCB0cnVlICksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7Ci0gICAgfTsK
LX0pOwotCi1qUXVlcnkuZm4uZXh0ZW5kKHsKLSAgICBmYWRlVG86IGZ1bmN0aW9uKCBzcGVlZCwg
dG8sIGVhc2luZywgY2FsbGJhY2sgKSB7Ci0KLSAgICAvLyBzaG93IGFueSBoaWRkZW4gZWxlbWVu
dHMgYWZ0ZXIgc2V0dGluZyBvcGFjaXR5IHRvIDAKLSAgICByZXR1cm4gdGhpcy5maWx0ZXIoIGlz
SGlkZGVuICkuY3NzKCAib3BhY2l0eSIsIDAgKS5zaG93KCkKLQotICAgIC8vIGFuaW1hdGUgdG8g
dGhlIHZhbHVlIHNwZWNpZmllZAotICAgIC5lbmQoKS5hbmltYXRlKHsgb3BhY2l0eTogdG8gfSwg
c3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKLSAgICB9LAotICAgIGFuaW1hdGU6IGZ1bmN0aW9u
KCBwcm9wLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKLSAgICB2YXIgZW1wdHkgPSBqUXVl
cnkuaXNFbXB0eU9iamVjdCggcHJvcCApLAotICAgIG9wdGFsbCA9IGpRdWVyeS5zcGVlZCggc3Bl
ZWQsIGVhc2luZywgY2FsbGJhY2sgKSwKLSAgICBkb0FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkgewot
ICAgIC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3BlcnR5IGVhc2luZyB3
b24ndCBiZSBsb3N0Ci0gICAgdmFyIGFuaW0gPSBBbmltYXRpb24oIHRoaXMsIGpRdWVyeS5leHRl
bmQoIHt9LCBwcm9wICksIG9wdGFsbCApOwotICAgIGRvQW5pbWF0aW9uLmZpbmlzaCA9IGZ1bmN0
aW9uKCkgewotICAgIGFuaW0uc3RvcCggdHJ1ZSApOwotICAgIH07Ci0gICAgLy8gRW1wdHkgYW5p
bWF0aW9ucywgb3IgZmluaXNoaW5nIHJlc29sdmVzIGltbWVkaWF0ZWx5Ci0gICAgaWYgKCBlbXB0
eSB8fCBqUXVlcnkuX2RhdGEoIHRoaXMsICJmaW5pc2giICkgKSB7Ci0gICAgYW5pbS5zdG9wKCB0
cnVlICk7Ci0gICAgfQotICAgIH07Ci0gICAgZG9BbmltYXRpb24uZmluaXNoID0gZG9BbmltYXRp
b247Ci0KLSAgICByZXR1cm4gZW1wdHkgfHwgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/Ci0gICAg
dGhpcy5lYWNoKCBkb0FuaW1hdGlvbiApIDoKLSAgICB0aGlzLnF1ZXVlKCBvcHRhbGwucXVldWUs
IGRvQW5pbWF0aW9uICk7Ci0gICAgfSwKLSAgICBzdG9wOiBmdW5jdGlvbiggdHlwZSwgY2xlYXJR
dWV1ZSwgZ290b0VuZCApIHsKLSAgICB2YXIgc3RvcFF1ZXVlID0gZnVuY3Rpb24oIGhvb2tzICkg
ewotICAgIHZhciBzdG9wID0gaG9va3Muc3RvcDsKLSAgICBkZWxldGUgaG9va3Muc3RvcDsKLSAg
ICBzdG9wKCBnb3RvRW5kICk7Ci0gICAgfTsKLQotICAgIGlmICggdHlwZW9mIHR5cGUgIT09ICJz
dHJpbmciICkgewotICAgIGdvdG9FbmQgPSBjbGVhclF1ZXVlOwotICAgIGNsZWFyUXVldWUgPSB0
eXBlOwotICAgIHR5cGUgPSB1bmRlZmluZWQ7Ci0gICAgfQotICAgIGlmICggY2xlYXJRdWV1ZSAm
JiB0eXBlICE9PSBmYWxzZSApIHsKLSAgICB0aGlzLnF1ZXVlKCB0eXBlIHx8ICJmeCIsIFtdICk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICB2YXIgZGVx
dWV1ZSA9IHRydWUsCi0gICAgaW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArICJxdWV1ZUhv
b2tzIiwKLSAgICB0aW1lcnMgPSBqUXVlcnkudGltZXJzLAotICAgIGRhdGEgPSBqUXVlcnkuX2Rh
dGEoIHRoaXMgKTsKLQotICAgIGlmICggaW5kZXggKSB7Ci0gICAgaWYgKCBkYXRhWyBpbmRleCBd
ICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHsKLSAgICBzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0g
KTsKLSAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICBmb3IgKCBpbmRleCBpbiBkYXRhICkgewotICAg
IGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgJiYgcnJ1bi50ZXN0KCBp
bmRleCApICkgewotICAgIHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApOwotICAgIH0KLSAgICB9
Ci0gICAgfQotCi0gICAgZm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHsK
LSAgICBpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmICh0eXBlID09IG51bGwg
fHwgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlKSApIHsKLSAgICB0aW1lcnNbIGluZGV4
IF0uYW5pbS5zdG9wKCBnb3RvRW5kICk7Ci0gICAgZGVxdWV1ZSA9IGZhbHNlOwotICAgIHRpbWVy
cy5zcGxpY2UoIGluZGV4LCAxICk7Ci0gICAgfQotICAgIH0KLQotICAgIC8vIHN0YXJ0IHRoZSBu
ZXh0IGluIHRoZSBxdWV1ZSBpZiB0aGUgbGFzdCBzdGVwIHdhc24ndCBmb3JjZWQKLSAgICAvLyB0
aW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVpciBjb21wbGV0ZSBjYWxsYmFja3MsIHdoaWNo
IHdpbGwgZGVxdWV1ZQotICAgIC8vIGJ1dCBvbmx5IGlmIHRoZXkgd2VyZSBnb3RvRW5kCi0gICAg
aWYgKCBkZXF1ZXVlIHx8ICFnb3RvRW5kICkgewotICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0
eXBlICk7Ci0gICAgfQotICAgIH0pOwotICAgIH0sCi0gICAgZmluaXNoOiBmdW5jdGlvbiggdHlw
ZSApIHsKLSAgICBpZiAoIHR5cGUgIT09IGZhbHNlICkgewotICAgIHR5cGUgPSB0eXBlIHx8ICJm
eCI7Ci0gICAgfQotICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGlu
ZGV4LAotICAgIGRhdGEgPSBqUXVlcnkuX2RhdGEoIHRoaXMgKSwKLSAgICBxdWV1ZSA9IGRhdGFb
IHR5cGUgKyAicXVldWUiIF0sCi0gICAgaG9va3MgPSBkYXRhWyB0eXBlICsgInF1ZXVlSG9va3Mi
IF0sCi0gICAgdGltZXJzID0galF1ZXJ5LnRpbWVycywKLSAgICBsZW5ndGggPSBxdWV1ZSA/IHF1
ZXVlLmxlbmd0aCA6IDA7Ci0KLSAgICAvLyBlbmFibGUgZmluaXNoaW5nIGZsYWcgb24gcHJpdmF0
ZSBkYXRhCi0gICAgZGF0YS5maW5pc2ggPSB0cnVlOwotCi0gICAgLy8gZW1wdHkgdGhlIHF1ZXVl
IGZpcnN0Ci0gICAgalF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBbXSApOwotCi0gICAgaWYgKCBo
b29rcyAmJiBob29rcy5jdXIgJiYgaG9va3MuY3VyLmZpbmlzaCApIHsKLSAgICBob29rcy5jdXIu
ZmluaXNoLmNhbGwoIHRoaXMgKTsKLSAgICB9Ci0KLSAgICAvLyBsb29rIGZvciBhbnkgYWN0aXZl
IGFuaW1hdGlvbnMsIGFuZCBmaW5pc2ggdGhlbQotICAgIGZvciAoIGluZGV4ID0gdGltZXJzLmxl
bmd0aDsgaW5kZXgtLTsgKSB7Ci0gICAgaWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhp
cyAmJiB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSB7Ci0gICAgdGltZXJzWyBpbmRl
eCBdLmFuaW0uc3RvcCggdHJ1ZSApOwotICAgIHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7Ci0g
ICAgfQotICAgIH0KLQotICAgIC8vIGxvb2sgZm9yIGFueSBhbmltYXRpb25zIGluIHRoZSBvbGQg
cXVldWUgYW5kIGZpbmlzaCB0aGVtCi0gICAgZm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0
aDsgaW5kZXgrKyApIHsKLSAgICBpZiAoIHF1ZXVlWyBpbmRleCBdICYmIHF1ZXVlWyBpbmRleCBd
LmZpbmlzaCApIHsKLSAgICBxdWV1ZVsgaW5kZXggXS5maW5pc2guY2FsbCggdGhpcyApOwotICAg
IH0KLSAgICB9Ci0KLSAgICAvLyB0dXJuIG9mZiBmaW5pc2hpbmcgZmxhZwotICAgIGRlbGV0ZSBk
YXRhLmZpbmlzaDsKLSAgICB9KTsKLSAgICB9Ci19KTsKLQotLy8gR2VuZXJhdGUgcGFyYW1ldGVy
cyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb24KLWZ1bmN0aW9uIGdlbkZ4KCB0eXBlLCBp
bmNsdWRlV2lkdGggKSB7Ci0gICAgdmFyIHdoaWNoLAotICAgIGF0dHJzID0geyBoZWlnaHQ6IHR5
cGUgfSwKLSAgICBpID0gMDsKLQotICAgIC8vIGlmIHdlIGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFs
dWUgaXMgMSB0byBkbyBhbGwgY3NzRXhwYW5kIHZhbHVlcywKLSAgICAvLyBpZiB3ZSBkb24ndCBp
bmNsdWRlIHdpZHRoLCBzdGVwIHZhbHVlIGlzIDIgdG8gc2tpcCBvdmVyIExlZnQgYW5kIFJpZ2h0
Ci0gICAgaW5jbHVkZVdpZHRoID0gaW5jbHVkZVdpZHRoPyAxIDogMDsKLSAgICBmb3IoIDsgaSA8
IDQgOyBpICs9IDIgLSBpbmNsdWRlV2lkdGggKSB7Ci0gICAgd2hpY2ggPSBjc3NFeHBhbmRbIGkg
XTsKLSAgICBhdHRyc1sgIm1hcmdpbiIgKyB3aGljaCBdID0gYXR0cnNbICJwYWRkaW5nIiArIHdo
aWNoIF0gPSB0eXBlOwotICAgIH0KLQotICAgIGlmICggaW5jbHVkZVdpZHRoICkgewotICAgIGF0
dHJzLm9wYWNpdHkgPSBhdHRycy53aWR0aCA9IHR5cGU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGF0
dHJzOwotfQotCi0vLyBHZW5lcmF0ZSBzaG9ydGN1dHMgZm9yIGN1c3RvbSBhbmltYXRpb25zCi1q
UXVlcnkuZWFjaCh7Ci0gICAgc2xpZGVEb3duOiBnZW5GeCgic2hvdyIpLAotICAgIHNsaWRlVXA6
IGdlbkZ4KCJoaWRlIiksCi0gICAgc2xpZGVUb2dnbGU6IGdlbkZ4KCJ0b2dnbGUiKSwKLSAgICBm
YWRlSW46IHsgb3BhY2l0eTogInNob3ciIH0sCi0gICAgZmFkZU91dDogeyBvcGFjaXR5OiAiaGlk
ZSIgfSwKLSAgICBmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6ICJ0b2dnbGUiIH0KLX0sIGZ1bmN0aW9u
KCBuYW1lLCBwcm9wcyApIHsKLSAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVl
ZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKLSAgICByZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywg
c3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKLSAgICB9OwotfSk7Ci0KLWpRdWVyeS5zcGVlZCA9
IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBmbiApIHsKLSAgICB2YXIgb3B0ID0gc3BlZWQgJiYg
dHlwZW9mIHNwZWVkID09PSAib2JqZWN0IiA/IGpRdWVyeS5leHRlbmQoIHt9LCBzcGVlZCApIDog
ewotICAgIGNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8Ci0gICAgalF1ZXJ5LmlzRnVu
Y3Rpb24oIHNwZWVkICkgJiYgc3BlZWQsCi0gICAgZHVyYXRpb246IHNwZWVkLAotICAgIGVhc2lu
ZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24oIGVhc2luZyAp
ICYmIGVhc2luZwotICAgIH07Ci0KLSAgICBvcHQuZHVyYXRpb24gPSBqUXVlcnkuZngub2ZmID8g
MCA6IHR5cGVvZiBvcHQuZHVyYXRpb24gPT09ICJudW1iZXIiID8gb3B0LmR1cmF0aW9uIDoKLSAg
ICBvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcyA/IGpRdWVyeS5meC5zcGVlZHNbIG9w
dC5kdXJhdGlvbiBdIDogalF1ZXJ5LmZ4LnNwZWVkcy5fZGVmYXVsdDsKLQotICAgIC8vIG5vcm1h
bGl6ZSBvcHQucXVldWUgLSB0cnVlL3VuZGVmaW5lZC9udWxsIC0+ICJmeCIKLSAgICBpZiAoIG9w
dC5xdWV1ZSA9PSBudWxsIHx8IG9wdC5xdWV1ZSA9PT0gdHJ1ZSApIHsKLSAgICBvcHQucXVldWUg
PSAiZngiOwotICAgIH0KLQotICAgIC8vIFF1ZXVlaW5nCi0gICAgb3B0Lm9sZCA9IG9wdC5jb21w
bGV0ZTsKLQotICAgIG9wdC5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkgewotICAgIGlmICggalF1ZXJ5
LmlzRnVuY3Rpb24oIG9wdC5vbGQgKSApIHsKLSAgICBvcHQub2xkLmNhbGwoIHRoaXMgKTsKLSAg
ICB9Ci0KLSAgICBpZiAoIG9wdC5xdWV1ZSApIHsKLSAgICBqUXVlcnkuZGVxdWV1ZSggdGhpcywg
b3B0LnF1ZXVlICk7Ci0gICAgfQotICAgIH07Ci0KLSAgICByZXR1cm4gb3B0OwotfTsKLQotalF1
ZXJ5LmVhc2luZyA9IHsKLSAgICBsaW5lYXI6IGZ1bmN0aW9uKCBwICkgewotICAgIHJldHVybiBw
OwotICAgIH0sCi0gICAgc3dpbmc6IGZ1bmN0aW9uKCBwICkgewotICAgIHJldHVybiAwLjUgLSBN
YXRoLmNvcyggcCpNYXRoLlBJICkgLyAyOwotICAgIH0KLX07Ci0KLWpRdWVyeS50aW1lcnMgPSBb
XTsKLWpRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0OwotalF1ZXJ5LmZ4LnRpY2sgPSBm
dW5jdGlvbigpIHsKLSAgICB2YXIgdGltZXIsCi0gICAgdGltZXJzID0galF1ZXJ5LnRpbWVycywK
LSAgICBpID0gMDsKLQotICAgIGZ4Tm93ID0galF1ZXJ5Lm5vdygpOwotCi0gICAgZm9yICggOyBp
IDwgdGltZXJzLmxlbmd0aDsgaSsrICkgewotICAgIHRpbWVyID0gdGltZXJzWyBpIF07Ci0gICAg
Ly8gQ2hlY2tzIHRoZSB0aW1lciBoYXMgbm90IGFscmVhZHkgYmVlbiByZW1vdmVkCi0gICAgaWYg
KCAhdGltZXIoKSAmJiB0aW1lcnNbIGkgXSA9PT0gdGltZXIgKSB7Ci0gICAgdGltZXJzLnNwbGlj
ZSggaS0tLCAxICk7Ci0gICAgfQotICAgIH0KLQotICAgIGlmICggIXRpbWVycy5sZW5ndGggKSB7
Ci0gICAgalF1ZXJ5LmZ4LnN0b3AoKTsKLSAgICB9Ci0gICAgZnhOb3cgPSB1bmRlZmluZWQ7Ci19
OwotCi1qUXVlcnkuZngudGltZXIgPSBmdW5jdGlvbiggdGltZXIgKSB7Ci0gICAgaWYgKCB0aW1l
cigpICYmIGpRdWVyeS50aW1lcnMucHVzaCggdGltZXIgKSApIHsKLSAgICBqUXVlcnkuZnguc3Rh
cnQoKTsKLSAgICB9Ci19OwotCi1qUXVlcnkuZnguaW50ZXJ2YWwgPSAxMzsKLQotalF1ZXJ5LmZ4
LnN0YXJ0ID0gZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCAhdGltZXJJZCApIHsKLSAgICB0aW1lcklk
ID0gc2V0SW50ZXJ2YWwoIGpRdWVyeS5meC50aWNrLCBqUXVlcnkuZnguaW50ZXJ2YWwgKTsKLSAg
ICB9Ci19OwotCi1qUXVlcnkuZnguc3RvcCA9IGZ1bmN0aW9uKCkgewotICAgIGNsZWFySW50ZXJ2
YWwoIHRpbWVySWQgKTsKLSAgICB0aW1lcklkID0gbnVsbDsKLX07Ci0KLWpRdWVyeS5meC5zcGVl
ZHMgPSB7Ci0gICAgc2xvdzogNjAwLAotICAgIGZhc3Q6IDIwMCwKLSAgICAvLyBEZWZhdWx0IHNw
ZWVkCi0gICAgX2RlZmF1bHQ6IDQwMAotfTsKLQotLy8gQmFjayBDb21wYXQgPDEuOCBleHRlbnNp
b24gcG9pbnQKLWpRdWVyeS5meC5zdGVwID0ge307Ci0KLWlmICggalF1ZXJ5LmV4cHIgJiYgalF1
ZXJ5LmV4cHIuZmlsdGVycyApIHsKLSAgICBqUXVlcnkuZXhwci5maWx0ZXJzLmFuaW1hdGVkID0g
ZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5ncmVwKGpRdWVyeS50aW1lcnMs
IGZ1bmN0aW9uKCBmbiApIHsKLSAgICByZXR1cm4gZWxlbSA9PT0gZm4uZWxlbTsKLSAgICB9KS5s
ZW5ndGg7Ci0gICAgfTsKLX0KLWpRdWVyeS5mbi5vZmZzZXQgPSBmdW5jdGlvbiggb3B0aW9ucyAp
IHsKLSAgICBpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7Ci0gICAgcmV0dXJuIG9wdGlvbnMgPT09
IHVuZGVmaW5lZCA/Ci0gICAgdGhpcyA6Ci0gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkgewot
ICAgIGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7Ci0gICAgfSk7
Ci0gICAgfQotCi0gICAgdmFyIGRvY0VsZW0sIHdpbiwKLSAgICBib3ggPSB7IHRvcDogMCwgbGVm
dDogMCB9LAotICAgIGVsZW0gPSB0aGlzWyAwIF0sCi0gICAgZG9jID0gZWxlbSAmJiBlbGVtLm93
bmVyRG9jdW1lbnQ7Ci0KLSAgICBpZiAoICFkb2MgKSB7Ci0gICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGRvY0VsZW0gPSBkb2MuZG9jdW1lbnRFbGVtZW50OwotCi0gICAgLy8gTWFrZSBzdXJlIGl0
J3Mgbm90IGEgZGlzY29ubmVjdGVkIERPTSBub2RlCi0gICAgaWYgKCAhalF1ZXJ5LmNvbnRhaW5z
KCBkb2NFbGVtLCBlbGVtICkgKSB7Ci0gICAgcmV0dXJuIGJveDsKLSAgICB9Ci0KLSAgICAvLyBJ
ZiB3ZSBkb24ndCBoYXZlIGdCQ1IsIGp1c3QgdXNlIDAsMCByYXRoZXIgdGhhbiBlcnJvcgotICAg
IC8vIEJsYWNrQmVycnkgNSwgaU9TIDMgKG9yaWdpbmFsIGlQaG9uZSkKLSAgICBpZiAoIHR5cGVv
ZiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCAhPT0gY29yZV9zdHJ1bmRlZmluZWQgKSB7Ci0g
ICAgYm94ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICB9Ci0gICAgd2luID0g
Z2V0V2luZG93KCBkb2MgKTsKLSAgICByZXR1cm4gewotICAgIHRvcDogYm94LnRvcCAgKyAoIHdp
bi5wYWdlWU9mZnNldCB8fCBkb2NFbGVtLnNjcm9sbFRvcCApICAtICggZG9jRWxlbS5jbGllbnRU
b3AgIHx8IDAgKSwKLSAgICBsZWZ0OiBib3gubGVmdCArICggd2luLnBhZ2VYT2Zmc2V0IHx8IGRv
Y0VsZW0uc2Nyb2xsTGVmdCApIC0gKCBkb2NFbGVtLmNsaWVudExlZnQgfHwgMCApCi0gICAgfTsK
LX07Ci0KLWpRdWVyeS5vZmZzZXQgPSB7Ci0KLSAgICBzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVt
LCBvcHRpb25zLCBpICkgewotICAgIHZhciBwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0sICJw
b3NpdGlvbiIgKTsKLQotICAgIC8vIHNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVm
dCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW0KLSAgICBpZiAoIHBvc2l0aW9uID09PSAic3Rh
dGljIiApIHsKLSAgICBlbGVtLnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKLSAgICB9Ci0K
LSAgICB2YXIgY3VyRWxlbSA9IGpRdWVyeSggZWxlbSApLAotICAgIGN1ck9mZnNldCA9IGN1ckVs
ZW0ub2Zmc2V0KCksCi0gICAgY3VyQ1NTVG9wID0galF1ZXJ5LmNzcyggZWxlbSwgInRvcCIgKSwK
LSAgICBjdXJDU1NMZWZ0ID0galF1ZXJ5LmNzcyggZWxlbSwgImxlZnQiICksCi0gICAgY2FsY3Vs
YXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSAiYWJzb2x1dGUiIHx8IHBvc2l0aW9uID09PSAi
Zml4ZWQiICkgJiYgalF1ZXJ5LmluQXJyYXkoImF1dG8iLCBbY3VyQ1NTVG9wLCBjdXJDU1NMZWZ0
XSkgPiAtMSwKLSAgICBwcm9wcyA9IHt9LCBjdXJQb3NpdGlvbiA9IHt9LCBjdXJUb3AsIGN1ckxl
ZnQ7Ci0KLSAgICAvLyBuZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVp
dGhlciB0b3Agb3IgbGVmdCBpcyBhdXRvIGFuZCBwb3NpdGlvbiBpcyBlaXRoZXIgYWJzb2x1dGUg
b3IgZml4ZWQKLSAgICBpZiAoIGNhbGN1bGF0ZVBvc2l0aW9uICkgewotICAgIGN1clBvc2l0aW9u
ID0gY3VyRWxlbS5wb3NpdGlvbigpOwotICAgIGN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDsKLSAg
ICBjdXJMZWZ0ID0gY3VyUG9zaXRpb24ubGVmdDsKLSAgICB9IGVsc2UgewotICAgIGN1clRvcCA9
IHBhcnNlRmxvYXQoIGN1ckNTU1RvcCApIHx8IDA7Ci0gICAgY3VyTGVmdCA9IHBhcnNlRmxvYXQo
IGN1ckNTU0xlZnQgKSB8fCAwOwotICAgIH0KLQotICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24o
IG9wdGlvbnMgKSApIHsKLSAgICBvcHRpb25zID0gb3B0aW9ucy5jYWxsKCBlbGVtLCBpLCBjdXJP
ZmZzZXQgKTsKLSAgICB9Ci0KLSAgICBpZiAoIG9wdGlvbnMudG9wICE9IG51bGwgKSB7Ci0gICAg
cHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRvcDsKLSAg
ICB9Ci0gICAgaWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHsKLSAgICBwcm9wcy5sZWZ0ID0g
KCBvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCApICsgY3VyTGVmdDsKLSAgICB9Ci0KLSAg
ICBpZiAoICJ1c2luZyIgaW4gb3B0aW9ucyApIHsKLSAgICBvcHRpb25zLnVzaW5nLmNhbGwoIGVs
ZW0sIHByb3BzICk7Ci0gICAgfSBlbHNlIHsKLSAgICBjdXJFbGVtLmNzcyggcHJvcHMgKTsKLSAg
ICB9Ci0gICAgfQotfTsKLQotCi1qUXVlcnkuZm4uZXh0ZW5kKHsKLQotICAgIHBvc2l0aW9uOiBm
dW5jdGlvbigpIHsKLSAgICBpZiAoICF0aGlzWyAwIF0gKSB7Ci0gICAgcmV0dXJuOwotICAgIH0K
LQotICAgIHZhciBvZmZzZXRQYXJlbnQsIG9mZnNldCwKLSAgICBwYXJlbnRPZmZzZXQgPSB7IHRv
cDogMCwgbGVmdDogMCB9LAotICAgIGVsZW0gPSB0aGlzWyAwIF07Ci0KLSAgICAvLyBmaXhlZCBl
bGVtZW50cyBhcmUgb2Zmc2V0IGZyb20gd2luZG93IChwYXJlbnRPZmZzZXQgPSB7dG9wOjAsIGxl
ZnQ6IDB9LCBiZWNhdXNlIGl0IGlzIGl0J3Mgb25seSBvZmZzZXQgcGFyZW50Ci0gICAgaWYgKCBq
UXVlcnkuY3NzKCBlbGVtLCAicG9zaXRpb24iICkgPT09ICJmaXhlZCIgKSB7Ci0gICAgLy8gd2Ug
YXNzdW1lIHRoYXQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGlzIGF2YWlsYWJsZSB3aGVuIGNvbXB1
dGVkIHBvc2l0aW9uIGlzIGZpeGVkCi0gICAgb2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKTsKLSAgICB9IGVsc2UgewotICAgIC8vIEdldCAqcmVhbCogb2Zmc2V0UGFyZW50Ci0g
ICAgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQoKTsKLQotICAgIC8vIEdldCBjb3Jy
ZWN0IG9mZnNldHMKLSAgICBvZmZzZXQgPSB0aGlzLm9mZnNldCgpOwotICAgIGlmICggIWpRdWVy
eS5ub2RlTmFtZSggb2Zmc2V0UGFyZW50WyAwIF0sICJodG1sIiApICkgewotICAgIHBhcmVudE9m
ZnNldCA9IG9mZnNldFBhcmVudC5vZmZzZXQoKTsKLSAgICB9Ci0KLSAgICAvLyBBZGQgb2Zmc2V0
UGFyZW50IGJvcmRlcnMKLSAgICBwYXJlbnRPZmZzZXQudG9wICArPSBqUXVlcnkuY3NzKCBvZmZz
ZXRQYXJlbnRbIDAgXSwgImJvcmRlclRvcFdpZHRoIiwgdHJ1ZSApOwotICAgIHBhcmVudE9mZnNl
dC5sZWZ0ICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudFsgMCBdLCAiYm9yZGVyTGVmdFdpZHRo
IiwgdHJ1ZSApOwotICAgIH0KLQotICAgIC8vIFN1YnRyYWN0IHBhcmVudCBvZmZzZXRzIGFuZCBl
bGVtZW50IG1hcmdpbnMKLSAgICAvLyBub3RlOiB3aGVuIGFuIGVsZW1lbnQgaGFzIG1hcmdpbjog
YXV0byB0aGUgb2Zmc2V0TGVmdCBhbmQgbWFyZ2luTGVmdAotICAgIC8vIGFyZSB0aGUgc2FtZSBp
biBTYWZhcmkgY2F1c2luZyBvZmZzZXQubGVmdCB0byBpbmNvcnJlY3RseSBiZSAwCi0gICAgcmV0
dXJuIHsKLSAgICB0b3A6ICBvZmZzZXQudG9wICAtIHBhcmVudE9mZnNldC50b3AgLSBqUXVlcnku
Y3NzKCBlbGVtLCAibWFyZ2luVG9wIiwgdHJ1ZSApLAotICAgIGxlZnQ6IG9mZnNldC5sZWZ0IC0g
cGFyZW50T2Zmc2V0LmxlZnQgLSBqUXVlcnkuY3NzKCBlbGVtLCAibWFyZ2luTGVmdCIsIHRydWUp
Ci0gICAgfTsKLSAgICB9LAotCi0gICAgb2Zmc2V0UGFyZW50OiBmdW5jdGlvbigpIHsKLSAgICBy
ZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG9mZnNldFBhcmVudCA9IHRoaXMu
b2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKLSAgICB3aGlsZSAoIG9m
ZnNldFBhcmVudCAmJiAoICFqUXVlcnkubm9kZU5hbWUoIG9mZnNldFBhcmVudCwgImh0bWwiICkg
JiYgalF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCAicG9zaXRpb24iKSA9PT0gInN0YXRpYyIgKSAp
IHsKLSAgICBvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50OwotICAgIH0K
LSAgICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKLSAg
ICB9KTsKLSAgICB9Ci19KTsKLQotCi0vLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9w
IG1ldGhvZHMKLWpRdWVyeS5lYWNoKCB7c2Nyb2xsTGVmdDogInBhZ2VYT2Zmc2V0Iiwgc2Nyb2xs
VG9wOiAicGFnZVlPZmZzZXQifSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHsKLSAgICB2YXIg
dG9wID0gL1kvLnRlc3QoIHByb3AgKTsKLQotICAgIGpRdWVyeS5mblsgbWV0aG9kIF0gPSBmdW5j
dGlvbiggdmFsICkgewotICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBmdW5jdGlvbigg
ZWxlbSwgbWV0aG9kLCB2YWwgKSB7Ci0gICAgdmFyIHdpbiA9IGdldFdpbmRvdyggZWxlbSApOwot
Ci0gICAgaWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHsKLSAgICByZXR1cm4gd2luID8gKHByb3Ag
aW4gd2luKSA/IHdpblsgcHJvcCBdIDoKLSAgICB3aW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50
WyBtZXRob2QgXSA6Ci0gICAgZWxlbVsgbWV0aG9kIF07Ci0gICAgfQotCi0gICAgaWYgKCB3aW4g
KSB7Ci0gICAgd2luLnNjcm9sbFRvKAotICAgICF0b3AgPyB2YWwgOiBqUXVlcnkoIHdpbiApLnNj
cm9sbExlZnQoKSwKLSAgICB0b3AgPyB2YWwgOiBqUXVlcnkoIHdpbiApLnNjcm9sbFRvcCgpCi0g
ICAgKTsKLQotICAgIH0gZWxzZSB7Ci0gICAgZWxlbVsgbWV0aG9kIF0gPSB2YWw7Ci0gICAgfQot
ICAgIH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMubGVuZ3RoLCBudWxsICk7Ci0gICAgfTsKLX0p
OwotCi1mdW5jdGlvbiBnZXRXaW5kb3coIGVsZW0gKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5pc1dp
bmRvdyggZWxlbSApID8KLSAgICBlbGVtIDoKLSAgICBlbGVtLm5vZGVUeXBlID09PSA5ID8KLSAg
ICBlbGVtLmRlZmF1bHRWaWV3IHx8IGVsZW0ucGFyZW50V2luZG93IDoKLSAgICBmYWxzZTsKLX0K
LS8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJI
ZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kcwotalF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiAiaGVp
Z2h0IiwgV2lkdGg6ICJ3aWR0aCIgfSwgZnVuY3Rpb24oIG5hbWUsIHR5cGUgKSB7Ci0gICAgalF1
ZXJ5LmVhY2goIHsgcGFkZGluZzogImlubmVyIiArIG5hbWUsIGNvbnRlbnQ6IHR5cGUsICIiOiAi
b3V0ZXIiICsgbmFtZSB9LCBmdW5jdGlvbiggZGVmYXVsdEV4dHJhLCBmdW5jTmFtZSApIHsKLSAg
ICAvLyBtYXJnaW4gaXMgb25seSBmb3Igb3V0ZXJIZWlnaHQsIG91dGVyV2lkdGgKLSAgICBqUXVl
cnkuZm5bIGZ1bmNOYW1lIF0gPSBmdW5jdGlvbiggbWFyZ2luLCB2YWx1ZSApIHsKLSAgICB2YXIg
Y2hhaW5hYmxlID0gYXJndW1lbnRzLmxlbmd0aCAmJiAoIGRlZmF1bHRFeHRyYSB8fCB0eXBlb2Yg
bWFyZ2luICE9PSAiYm9vbGVhbiIgKSwKLSAgICBleHRyYSA9IGRlZmF1bHRFeHRyYSB8fCAoIG1h
cmdpbiA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSA/ICJtYXJnaW4iIDogImJvcmRlciIgKTsK
LQotICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgdHlwZSwg
dmFsdWUgKSB7Ci0gICAgdmFyIGRvYzsKLQotICAgIGlmICggalF1ZXJ5LmlzV2luZG93KCBlbGVt
ICkgKSB7Ci0gICAgLy8gQXMgb2YgNS84LzIwMTIgdGhpcyB3aWxsIHlpZWxkIGluY29ycmVjdCBy
ZXN1bHRzIGZvciBNb2JpbGUgU2FmYXJpLCBidXQgdGhlcmUKLSAgICAvLyBpc24ndCBhIHdob2xl
IGxvdCB3ZSBjYW4gZG8uIFNlZSBwdWxsIHJlcXVlc3QgYXQgdGhpcyBVUkwgZm9yIGRpc2N1c3Np
b246Ci0gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvcHVsbC83NjQKLSAg
ICByZXR1cm4gZWxlbS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbICJjbGllbnQiICsgbmFtZSBd
OwotICAgIH0KLQotICAgIC8vIEdldCBkb2N1bWVudCB3aWR0aCBvciBoZWlnaHQKLSAgICBpZiAo
IGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7Ci0gICAgZG9jID0gZWxlbS5kb2N1bWVudEVsZW1lbnQ7
Ci0KLSAgICAvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hl
aWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sIHdoaWNoZXZlciBpcyBncmVhdGVzdAotICAg
IC8vIHVuZm9ydHVuYXRlbHksIHRoaXMgY2F1c2VzIGJ1ZyAjMzgzOCBpbiBJRTYvOCBvbmx5LCBi
dXQgdGhlcmUgaXMgY3VycmVudGx5IG5vIGdvb2QsIHNtYWxsIHdheSB0byBmaXggaXQuCi0gICAg
cmV0dXJuIE1hdGgubWF4KAotICAgIGVsZW0uYm9keVsgInNjcm9sbCIgKyBuYW1lIF0sIGRvY1sg
InNjcm9sbCIgKyBuYW1lIF0sCi0gICAgZWxlbS5ib2R5WyAib2Zmc2V0IiArIG5hbWUgXSwgZG9j
WyAib2Zmc2V0IiArIG5hbWUgXSwKLSAgICBkb2NbICJjbGllbnQiICsgbmFtZSBdCi0gICAgKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/Ci0gICAgLy8gR2V0IHdp
ZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCwgcmVxdWVzdGluZyBidXQgbm90IGZvcmNpbmcg
cGFyc2VGbG9hdAotICAgIGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUsIGV4dHJhICkgOgotCi0gICAg
Ly8gU2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudAotICAgIGpRdWVyeS5zdHlsZSgg
ZWxlbSwgdHlwZSwgdmFsdWUsIGV4dHJhICk7Ci0gICAgfSwgdHlwZSwgY2hhaW5hYmxlID8gbWFy
Z2luIDogdW5kZWZpbmVkLCBjaGFpbmFibGUsIG51bGwgKTsKLSAgICB9OwotICAgIH0pOwotfSk7
Ci0vLyBMaW1pdCBzY29wZSBwb2xsdXRpb24gZnJvbSBhbnkgZGVwcmVjYXRlZCBBUEkKLS8vIChm
dW5jdGlvbigpIHsKLQotLy8gfSkoKTsKLS8vIEV4cG9zZSBqUXVlcnkgdG8gdGhlIGdsb2JhbCBv
YmplY3QKLXdpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9IGpRdWVyeTsKLQotLy8gRXhwb3NlIGpR
dWVyeSBhcyBhbiBBTUQgbW9kdWxlLCBidXQgb25seSBmb3IgQU1EIGxvYWRlcnMgdGhhdAotLy8g
dW5kZXJzdGFuZCB0aGUgaXNzdWVzIHdpdGggbG9hZGluZyBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBq
UXVlcnkKLS8vIGluIGEgcGFnZSB0aGF0IGFsbCBtaWdodCBjYWxsIGRlZmluZSgpLiBUaGUgbG9h
ZGVyIHdpbGwgaW5kaWNhdGUKLS8vIHRoZXkgaGF2ZSBzcGVjaWFsIGFsbG93YW5jZXMgZm9yIG11
bHRpcGxlIGpRdWVyeSB2ZXJzaW9ucyBieQotLy8gc3BlY2lmeWluZyBkZWZpbmUuYW1kLmpRdWVy
eSA9IHRydWUuIFJlZ2lzdGVyIGFzIGEgbmFtZWQgbW9kdWxlLAotLy8gc2luY2UgalF1ZXJ5IGNh
biBiZSBjb25jYXRlbmF0ZWQgd2l0aCBvdGhlciBmaWxlcyB0aGF0IG1heSB1c2UgZGVmaW5lLAot
Ly8gYnV0IG5vdCB1c2UgYSBwcm9wZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdCB1bmRlcnN0
YW5kcyBhbm9ueW1vdXMKLS8vIEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5k
IG1vc3Qgcm9idXN0IHdheSB0byByZWdpc3Rlci4KLS8vIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNl
ZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFtZXMgYXJlIGRlcml2ZWQgZnJvbQotLy8gZmlsZSBuYW1l
cywgYW5kIGpRdWVyeSBpcyBub3JtYWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2UgZmlsZSBu
YW1lLgotLy8gRG8gdGhpcyBhZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4g
QU1EIG1vZHVsZSB3YW50cyB0byBjYWxsCi0vLyBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJz
aW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3b3JrLgotaWYgKCB0eXBlb2YgZGVmaW5lID09PSAiZnVu
Y3Rpb24iICYmIGRlZmluZS5hbWQgJiYgZGVmaW5lLmFtZC5qUXVlcnkgKSB7Ci0gICAgZGVmaW5l
KCAianF1ZXJ5IiwgW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGpRdWVyeTsgfSApOwotfQotCi19
KSggd2luZG93ICk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvYmFja2JvbmUvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iYXNlLmNz
cyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24v
YmFzZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczN2NkOWNjOGM3ZTA3ZTQ2
OTFkNGVlMWJhYTcwMmU0OTkzY2EyMWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvYm93ZXJfY29tcG9uZW50cy90b2Rv
bXZjLWNvbW1vbi9iYXNlLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDU1NCArMCwwIEBACi1odG1s
LAotYm9keSB7Ci0gICAgbWFyZ2luOiAwOwotICAgIHBhZGRpbmc6IDA7Ci19Ci0KLWJ1dHRvbiB7
Ci0gICAgbWFyZ2luOiAwOwotICAgIHBhZGRpbmc6IDA7Ci0gICAgYm9yZGVyOiAwOwotICAgIGJh
Y2tncm91bmQ6IG5vbmU7Ci0gICAgZm9udC1zaXplOiAxMDAlOwotICAgIHZlcnRpY2FsLWFsaWdu
OiBiYXNlbGluZTsKLSAgICBmb250LWZhbWlseTogaW5oZXJpdDsKLSAgICBjb2xvcjogaW5oZXJp
dDsKLSAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7Ci0gICAgLyotbW96LWFwcGVhcmFuY2U6
IG5vbmU7Ki8KLSAgICAtbXMtYXBwZWFyYW5jZTogbm9uZTsKLSAgICAtby1hcHBlYXJhbmNlOiBu
b25lOwotICAgIGFwcGVhcmFuY2U6IG5vbmU7Ci19Ci0KLWJvZHkgewotICAgIGZvbnQ6IDE0cHgg
J0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKLSAgICBsaW5l
LWhlaWdodDogMS40ZW07Ci0gICAgYmFja2dyb3VuZDogI2VhZWFlYSB1cmwoJ2JnLnBuZycpOwot
ICAgIGNvbG9yOiAjNGQ0ZDRkOwotICAgIHdpZHRoOiA1NTBweDsKLSAgICBtYXJnaW46IDAgYXV0
bzsKLSAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAgICAtbW96LWZv
bnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAgICAtbXMtZm9udC1zbW9vdGhpbmc6IGFudGlh
bGlhc2VkOwotICAgIC1vLWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAgICBmb250LXNt
b290aGluZzogYW50aWFsaWFzZWQ7Ci19Ci0KLSN0b2RvYXBwIHsKLSAgICBiYWNrZ3JvdW5kOiAj
ZmZmOwotICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKLSAgICBtYXJn
aW46IDEzMHB4IDAgNDBweCAwOwotICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7Ci0gICAgcG9z
aXRpb246IHJlbGF0aXZlOwotICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDJweDsKLSAgICBi
b3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMnB4OwotICAgIGJveC1zaGFkb3c6IDAgMnB4IDZweCAw
IHJnYmEoMCwgMCwgMCwgMC4yKSwKLSAgICAwIDI1cHggNTBweCAwIHJnYmEoMCwgMCwgMCwgMC4x
NSk7Ci19Ci0KLSN0b2RvYXBwOmJlZm9yZSB7Ci0gICAgY29udGVudDogJyc7Ci0gICAgYm9yZGVy
LWxlZnQ6IDFweCBzb2xpZCAjZjVkNmQ2OwotICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNm
NWQ2ZDY7Ci0gICAgd2lkdGg6IDJweDsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9w
OiAwOwotICAgIGxlZnQ6IDQwcHg7Ci0gICAgaGVpZ2h0OiAxMDAlOwotfQotCi0jdG9kb2FwcCBp
bnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7Ci0gICAgZm9udC1zdHlsZTogaXRhbGlj
OwotfQotCi0jdG9kb2FwcCBpbnB1dDo6LW1vei1wbGFjZWhvbGRlciB7Ci0gICAgZm9udC1zdHls
ZTogaXRhbGljOwotICAgIGNvbG9yOiAjYTlhOWE5OwotfQotCi0jdG9kb2FwcCBoMSB7Ci0gICAg
cG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogLTEyMHB4OwotICAgIHdpZHRoOiAxMDAlOwot
ICAgIGZvbnQtc2l6ZTogNzBweDsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLSAgICB0ZXh0LWFs
aWduOiBjZW50ZXI7Ci0gICAgY29sb3I6ICNiM2IzYjM7Ci0gICAgY29sb3I6IHJnYmEoMjU1LCAy
NTUsIDI1NSwgMC4zKTsKLSAgICB0ZXh0LXNoYWRvdzogLTFweCAtMXB4IHJnYmEoMCwgMCwgMCwg
MC4yKTsKLSAgICAtd2Via2l0LXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7Ci0g
ICAgLW1vei10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OwotICAgIC1tcy10ZXh0
LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OwotICAgIC1vLXRleHQtcmVuZGVyaW5nOiBv
cHRpbWl6ZUxlZ2liaWxpdHk7Ci0gICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0
eTsKLX0KLQotI2hlYWRlciB7Ci0gICAgcGFkZGluZy10b3A6IDE1cHg7Ci0gICAgYm9yZGVyLXJh
ZGl1czogaW5oZXJpdDsKLX0KLQotI2hlYWRlcjpiZWZvcmUgewotICAgIGNvbnRlbnQ6ICcnOwot
ICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0gICAg
bGVmdDogMDsKLSAgICBoZWlnaHQ6IDE1cHg7Ci0gICAgei1pbmRleDogMjsKLSAgICBib3JkZXIt
Ym90dG9tOiAxcHggc29saWQgIzZjNjE1YzsKLSAgICBiYWNrZ3JvdW5kOiAjOGQ3ZDc3OwotICAg
IGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0
b20sIGZyb20ocmdiYSgxMzIsIDExMCwgMTAwLCAwLjgpKSx0byhyZ2JhKDEwMSwgODQsIDc2LCAw
LjgpKSk7Ci0gICAgYmFja2dyb3VuZDogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCByZ2Jh
KDEzMiwgMTEwLCAxMDAsIDAuOCksIHJnYmEoMTAxLCA4NCwgNzYsIDAuOCkpOwotICAgIGJhY2tn
cm91bmQ6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgcmdiYSgxMzIsIDExMCwgMTAwLCAwLjgp
LCByZ2JhKDEwMSwgODQsIDc2LCAwLjgpKTsKLSAgICBiYWNrZ3JvdW5kOiAtby1saW5lYXItZ3Jh
ZGllbnQodG9wLCByZ2JhKDEzMiwgMTEwLCAxMDAsIDAuOCksIHJnYmEoMTAxLCA4NCwgNzYsIDAu
OCkpOwotICAgIGJhY2tncm91bmQ6IC1tcy1saW5lYXItZ3JhZGllbnQodG9wLCByZ2JhKDEzMiwg
MTEwLCAxMDAsIDAuOCksIHJnYmEoMTAxLCA4NCwgNzYsIDAuOCkpOwotICAgIGJhY2tncm91bmQ6
IGxpbmVhci1ncmFkaWVudCh0b3AsIHJnYmEoMTMyLCAxMTAsIDEwMCwgMC44KSwgcmdiYSgxMDEs
IDg0LCA3NiwgMC44KSk7Ci0gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMXB4OwotICAgIGJv
cmRlci10b3AtcmlnaHQtcmFkaXVzOiAxcHg7Ci19Ci0KLSNuZXctdG9kbywKLS5lZGl0IHsKLSAg
ICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgbWFyZ2luOiAwOwotICAgIHdpZHRoOiAxMDAlOwot
ICAgIGZvbnQtc2l6ZTogMjRweDsKLSAgICBmb250LWZhbWlseTogaW5oZXJpdDsKLSAgICBsaW5l
LWhlaWdodDogMS40ZW07Ci0gICAgYm9yZGVyOiAwOwotICAgIG91dGxpbmU6IG5vbmU7Ci0gICAg
Y29sb3I6IGluaGVyaXQ7Ci0gICAgcGFkZGluZzogNnB4OwotICAgIGJvcmRlcjogMXB4IHNvbGlk
ICM5OTk7Ci0gICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDVweCAwIHJnYmEoMCwgMCwgMCwg
MC4yKTsKLSAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7Ci0gICAgLW1vei1ib3gt
c2l6aW5nOiBib3JkZXItYm94OwotICAgIC1tcy1ib3gtc2l6aW5nOiBib3JkZXItYm94OwotICAg
IC1vLWJveC1zaXppbmc6IGJvcmRlci1ib3g7Ci0gICAgYm94LXNpemluZzogYm9yZGVyLWJveDsK
LSAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAgICAtbW96LWZvbnQt
c21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAgICAtbXMtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlh
c2VkOwotICAgIC1vLWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAgICBmb250LXNtb290
aGluZzogYW50aWFsaWFzZWQ7Ci19Ci0KLSNuZXctdG9kbyB7Ci0gICAgcGFkZGluZzogMTZweCAx
NnB4IDE2cHggNjBweDsKLSAgICBib3JkZXI6IG5vbmU7Ci0gICAgYmFja2dyb3VuZDogcmdiYSgw
LCAwLCAwLCAwLjAyKTsKLSAgICB6LWluZGV4OiAyOwotICAgIGJveC1zaGFkb3c6IG5vbmU7Ci19
Ci0KLSNtYWluIHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgei1pbmRleDogMjsKLSAg
ICBib3JkZXItdG9wOiAxcHggZG90dGVkICNhZGFkYWQ7Ci19Ci0KLWxhYmVsW2Zvcj0ndG9nZ2xl
LWFsbCddIHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotCi0jdG9nZ2xlLWFsbCB7Ci0gICAgcG9z
aXRpb246IGFic29sdXRlOwotICAgIHRvcDogLTQycHg7Ci0gICAgbGVmdDogLTRweDsKLSAgICB3
aWR0aDogNDBweDsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0gICAgYm9yZGVyOiBub25lOyAv
KiBNb2JpbGUgU2FmYXJpICovCi19Ci0KLSN0b2dnbGUtYWxsOmJlZm9yZSB7Ci0gICAgY29udGVu
dDogJ8K7JzsKLSAgICBmb250LXNpemU6IDI4cHg7Ci0gICAgY29sb3I6ICNkOWQ5ZDk7Ci0gICAg
cGFkZGluZzogMCAyNXB4IDdweDsKLX0KLQotI3RvZ2dsZS1hbGw6Y2hlY2tlZDpiZWZvcmUgewot
ICAgIGNvbG9yOiAjNzM3MzczOwotfQotCi0jdG9kby1saXN0IHsKLSAgICBtYXJnaW46IDA7Ci0g
ICAgcGFkZGluZzogMDsKLSAgICBsaXN0LXN0eWxlOiBub25lOwotfQotCi0jdG9kby1saXN0IGxp
IHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgZm9udC1zaXplOiAyNHB4OwotICAgIGJv
cmRlci1ib3R0b206IDFweCBkb3R0ZWQgI2NjYzsKLX0KLQotI3RvZG8tbGlzdCBsaTpsYXN0LWNo
aWxkIHsKLSAgICBib3JkZXItYm90dG9tOiBub25lOwotfQotCi0jdG9kby1saXN0IGxpLmVkaXRp
bmcgewotICAgIGJvcmRlci1ib3R0b206IG5vbmU7Ci0gICAgcGFkZGluZzogMDsKLX0KLQotI3Rv
ZG8tbGlzdCBsaS5lZGl0aW5nIC5lZGl0IHsKLSAgICBkaXNwbGF5OiBibG9jazsKLSAgICB3aWR0
aDogNTA2cHg7Ci0gICAgcGFkZGluZzogMTNweCAxN3B4IDEycHggMTdweDsKLSAgICBtYXJnaW46
IDAgMCAwIDQzcHg7Ci19Ci0KLSN0b2RvLWxpc3QgbGkuZWRpdGluZyAudmlldyB7Ci0gICAgZGlz
cGxheTogbm9uZTsKLX0KLQotI3RvZG8tbGlzdCBsaSAudG9nZ2xlIHsKLSAgICB0ZXh0LWFsaWdu
OiBjZW50ZXI7Ci0gICAgd2lkdGg6IDQwcHg7Ci0gICAgLyogYXV0bywgc2luY2Ugbm9uLVdlYktp
dCBicm93c2VycyBkb2Vzbid0IHN1cHBvcnQgaW5wdXQgc3R5bGluZyAqLwotICAgIGhlaWdodDog
YXV0bzsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIGJvdHRvbTog
MDsKLSAgICBtYXJnaW46IGF1dG8gMDsKLSAgICBib3JkZXI6IG5vbmU7IC8qIE1vYmlsZSBTYWZh
cmkgKi8KLSAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7Ci0gICAgLyotbW96LWFwcGVhcmFu
Y2U6IG5vbmU7Ki8KLSAgICAtbXMtYXBwZWFyYW5jZTogbm9uZTsKLSAgICAtby1hcHBlYXJhbmNl
OiBub25lOwotICAgIGFwcGVhcmFuY2U6IG5vbmU7Ci19Ci0KLSN0b2RvLWxpc3QgbGkgLnRvZ2ds
ZTphZnRlciB7Ci0gICAgY29udGVudDogJ+KclCc7Ci0gICAgbGluZS1oZWlnaHQ6IDQzcHg7IC8q
IDQwICsgYSBjb3VwbGUgb2YgcGl4ZWxzIHZpc3VhbCBhZGp1c3RtZW50ICovCi0gICAgZm9udC1z
aXplOiAyMHB4OwotICAgIGNvbG9yOiAjZDlkOWQ5OwotICAgIHRleHQtc2hhZG93OiAwIC0xcHgg
MCAjYmZiZmJmOwotfQotCi0jdG9kby1saXN0IGxpIC50b2dnbGU6Y2hlY2tlZDphZnRlciB7Ci0g
ICAgY29sb3I6ICM4NWFkYTc7Ci0gICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgIzY2OTk5MTsKLSAg
ICBib3R0b206IDFweDsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci19Ci0KLSN0b2RvLWxpc3Qg
bGkgbGFiZWwgewotICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7Ci0gICAgcGFkZGluZzogMTVw
eDsKLSAgICBtYXJnaW4tbGVmdDogNDVweDsKLSAgICBkaXNwbGF5OiBibG9jazsKLSAgICBsaW5l
LWhlaWdodDogMS4yOwotICAgIC13ZWJraXQtdHJhbnNpdGlvbjogY29sb3IgMC40czsKLSAgICAt
bW96LXRyYW5zaXRpb246IGNvbG9yIDAuNHM7Ci0gICAgLW1zLXRyYW5zaXRpb246IGNvbG9yIDAu
NHM7Ci0gICAgLW8tdHJhbnNpdGlvbjogY29sb3IgMC40czsKLSAgICB0cmFuc2l0aW9uOiBjb2xv
ciAwLjRzOwotfQotCi0jdG9kby1saXN0IGxpLmNvbXBsZXRlZCBsYWJlbCB7Ci0gICAgY29sb3I6
ICNhOWE5YTk7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ci19Ci0KLSN0b2Rv
LWxpc3QgbGkgLmRlc3Ryb3kgewotICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgcG9zaXRpb246IGFi
c29sdXRlOwotICAgIHRvcDogMDsKLSAgICByaWdodDogMTBweDsKLSAgICBib3R0b206IDA7Ci0g
ICAgd2lkdGg6IDQwcHg7Ci0gICAgaGVpZ2h0OiA0MHB4OwotICAgIG1hcmdpbjogYXV0byAwOwot
ICAgIGZvbnQtc2l6ZTogMjJweDsKLSAgICBjb2xvcjogI2E4OGE4YTsKLSAgICAtd2Via2l0LXRy
YW5zaXRpb246IGFsbCAwLjJzOwotICAgIC1tb3otdHJhbnNpdGlvbjogYWxsIDAuMnM7Ci0gICAg
LW1zLXRyYW5zaXRpb246IGFsbCAwLjJzOwotICAgIC1vLXRyYW5zaXRpb246IGFsbCAwLjJzOwot
ICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwotfQotCi0jdG9kby1saXN0IGxpIC5kZXN0cm95Omhv
dmVyIHsKLSAgICB0ZXh0LXNoYWRvdzogMCAwIDFweCAjMDAwLAotICAgICAwIDAgMTBweCByZ2Jh
KDE5OSwgMTA3LCAxMDcsIDAuOCk7Ci0gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEuMyk7
Ci0gICAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDEuMyk7Ci0gICAgLW1zLXRyYW5zZm9ybTogc2Nh
bGUoMS4zKTsKLSAgICAtby10cmFuc2Zvcm06IHNjYWxlKDEuMyk7Ci0gICAgdHJhbnNmb3JtOiBz
Y2FsZSgxLjMpOwotfQotCi0jdG9kby1saXN0IGxpIC5kZXN0cm95OmFmdGVyIHsKLSAgICBjb250
ZW50OiAn4pyWJzsKLX0KLQotI3RvZG8tbGlzdCBsaTpob3ZlciAuZGVzdHJveSB7Ci0gICAgZGlz
cGxheTogYmxvY2s7Ci19Ci0KLSN0b2RvLWxpc3QgbGkgLmVkaXQgewotICAgIGRpc3BsYXk6IG5v
bmU7Ci19Ci0KLSN0b2RvLWxpc3QgbGkuZWRpdGluZzpsYXN0LWNoaWxkIHsKLSAgICBtYXJnaW4t
Ym90dG9tOiAtMXB4OwotfQotCi0jZm9vdGVyIHsKLSAgICBjb2xvcjogIzc3NzsKLSAgICBwYWRk
aW5nOiAwIDE1cHg7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHJpZ2h0OiAwOwotICAg
IGJvdHRvbTogLTMxcHg7Ci0gICAgbGVmdDogMDsKLSAgICBoZWlnaHQ6IDIwcHg7Ci0gICAgei1p
bmRleDogMTsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci19Ci0KLSNmb290ZXI6YmVmb3JlIHsK
LSAgICBjb250ZW50OiAnJzsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgcmlnaHQ6IDA7
Ci0gICAgYm90dG9tOiAzMXB4OwotICAgIGxlZnQ6IDA7Ci0gICAgaGVpZ2h0OiA1MHB4OwotICAg
IHotaW5kZXg6IC0xOwotICAgIGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAu
MyksCi0gICAgMCA2cHggMCAtM3B4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KSwKLSAgICAwIDdw
eCAxcHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMyksCi0gICAgMCA0M3B4IDAgLTZweCByZ2JhKDI1
NSwgMjU1LCAyNTUsIDAuOCksCi0gICAgMCA0NHB4IDJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4y
KTsKLX0KLQotI3RvZG8tY291bnQgewotICAgIGZsb2F0OiBsZWZ0OwotICAgIHRleHQtYWxpZ246
IGxlZnQ7Ci19Ci0KLSNmaWx0ZXJzIHsKLSAgICBtYXJnaW46IDA7Ci0gICAgcGFkZGluZzogMDsK
LSAgICBsaXN0LXN0eWxlOiBub25lOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICByaWdo
dDogMDsKLSAgICBsZWZ0OiAwOwotfQotCi0jZmlsdGVycyBsaSB7Ci0gICAgZGlzcGxheTogaW5s
aW5lOwotfQotCi0jZmlsdGVycyBsaSBhIHsKLSAgICBjb2xvcjogIzgzNzU2ZjsKLSAgICBtYXJn
aW46IDJweDsKLSAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Ci19Ci0KLSNmaWx0ZXJzIGxpIGEu
c2VsZWN0ZWQgewotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotfQotCi0jY2xlYXItY29tcGxldGVk
IHsKLSAgICBmbG9hdDogcmlnaHQ7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIGxpbmUt
aGVpZ2h0OiAyMHB4OwotICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKLSAgICBiYWNrZ3JvdW5k
OiByZ2JhKDAsIDAsIDAsIDAuMSk7Ci0gICAgZm9udC1zaXplOiAxMXB4OwotICAgIHBhZGRpbmc6
IDAgMTBweDsKLSAgICBib3JkZXItcmFkaXVzOiAzcHg7Ci0gICAgYm94LXNoYWRvdzogMCAtMXB4
IDAgMCByZ2JhKDAsIDAsIDAsIDAuMik7Ci19Ci0KLSNjbGVhci1jb21wbGV0ZWQ6aG92ZXIgewot
ICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4xNSk7Ci0gICAgYm94LXNoYWRvdzogMCAt
MXB4IDAgMCByZ2JhKDAsIDAsIDAsIDAuMyk7Ci19Ci0KLSNpbmZvIHsKLSAgICBtYXJnaW46IDY1
cHggYXV0byAwOwotICAgIGNvbG9yOiAjYTZhNmE2OwotICAgIGZvbnQtc2l6ZTogMTJweDsKLSAg
ICB0ZXh0LXNoYWRvdzogMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Ci0gICAgdGV4
dC1hbGlnbjogY2VudGVyOwotfQotCi0jaW5mbyBhIHsKLSAgICBjb2xvcjogaW5oZXJpdDsKLX0K
LQotLyoKLSAgICBIYWNrIHRvIHJlbW92ZSBiYWNrZ3JvdW5kIGZyb20gTW9iaWxlIFNhZmFyaS4K
LSAgICBDYW4ndCB1c2UgaXQgZ2xvYmFsbHkgc2luY2UgaXQgZGVzdHJveXMgY2hlY2tib3hlcyBp
biBGaXJlZm94IGFuZCBPcGVyYQotKi8KLUBtZWRpYSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1k
ZXZpY2UtcGl4ZWwtcmF0aW86MCkgewotICAgICN0b2dnbGUtYWxsLAotICAgICN0b2RvLWxpc3Qg
bGkgLnRvZ2dsZSB7Ci0gICAgYmFja2dyb3VuZDogbm9uZTsKLSAgICB9Ci0KLSAgICAjdG9kby1s
aXN0IGxpIC50b2dnbGUgewotICAgIGhlaWdodDogNDBweDsKLSAgICB9Ci0KLSAgICAjdG9nZ2xl
LWFsbCB7Ci0gICAgdG9wOiAtNTZweDsKLSAgICBsZWZ0OiAtMTVweDsKLSAgICB3aWR0aDogNjVw
eDsKLSAgICBoZWlnaHQ6IDQxcHg7Ci0gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg5MGRl
Zyk7Ci0gICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwotICAgIC13ZWJraXQtYXBwZWFyYW5j
ZTogbm9uZTsKLSAgICBhcHBlYXJhbmNlOiBub25lOwotICAgIH0KLX0KLQotLmhpZGRlbnsKLSAg
ICBkaXNwbGF5Om5vbmU7Ci19Ci0KLWhyIHsKLSAgICBtYXJnaW46IDIwcHggMDsKLSAgICBib3Jk
ZXI6IDA7Ci0gICAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjQzVDNUM1OwotICAgIGJvcmRlci1i
b3R0b206IDFweCBkYXNoZWQgI0Y3RjdGNzsKLX0KLQotLmxlYXJuIGEgewotICAgIGZvbnQtd2Vp
Z2h0OiBub3JtYWw7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwotICAgIGNvbG9yOiAjYjgz
ZjQ1OwotfQotCi0ubGVhcm4gYTpob3ZlciB7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxp
bmU7Ci0gICAgY29sb3I6ICM3ODdlN2U7Ci19Ci0KLS5sZWFybiBoMywKLS5sZWFybiBoNCwKLS5s
ZWFybiBoNSB7Ci0gICAgbWFyZ2luOiAxMHB4IDA7Ci0gICAgZm9udC13ZWlnaHQ6IDUwMDsKLSAg
ICBsaW5lLWhlaWdodDogMS4yOwotICAgIGNvbG9yOiAjMDAwOwotfQotCi0ubGVhcm4gaDMgewot
ICAgIGZvbnQtc2l6ZTogMjRweDsKLX0KLQotLmxlYXJuIGg0IHsKLSAgICBmb250LXNpemU6IDE4
cHg7Ci19Ci0KLS5sZWFybiBoNSB7Ci0gICAgbWFyZ2luLWJvdHRvbTogMDsKLSAgICBmb250LXNp
emU6IDE0cHg7Ci19Ci0KLS5sZWFybiB1bCB7Ci0gICAgcGFkZGluZzogMDsKLSAgICBtYXJnaW46
IDAgMCAzMHB4IDI1cHg7Ci19Ci0KLS5sZWFybiBsaSB7Ci0gICAgbGluZS1oZWlnaHQ6IDIwcHg7
Ci19Ci0KLS5sZWFybiBwIHsKLSAgICBmb250LXNpemU6IDE1cHg7Ci0gICAgZm9udC13ZWlnaHQ6
IDMwMDsKLSAgICBsaW5lLWhlaWdodDogMS4zOwotICAgIG1hcmdpbi10b3A6IDA7Ci0gICAgbWFy
Z2luLWJvdHRvbTogMDsKLX0KLQotLnF1b3RlIHsKLSAgICBib3JkZXI6IG5vbmU7Ci0gICAgbWFy
Z2luOiAyMHB4IDAgNjBweCAwOwotfQotCi0ucXVvdGUgcCB7Ci0gICAgZm9udC1zdHlsZTogaXRh
bGljOwotfQotCi0ucXVvdGUgcDpiZWZvcmUgewotICAgIGNvbnRlbnQ6ICfigJwnOwotICAgIGZv
bnQtc2l6ZTogNTBweDsKLSAgICBvcGFjaXR5OiAuMTU7Ci0gICAgcG9zaXRpb246IGFic29sdXRl
OwotICAgIHRvcDogLTIwcHg7Ci0gICAgbGVmdDogM3B4OwotfQotCi0ucXVvdGUgcDphZnRlciB7
Ci0gICAgY29udGVudDogJ+KAnSc7Ci0gICAgZm9udC1zaXplOiA1MHB4OwotICAgIG9wYWNpdHk6
IC4xNTsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgYm90dG9tOiAtNDJweDsKLSAgICBy
aWdodDogM3B4OwotfQotCi0ucXVvdGUgZm9vdGVyIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7
Ci0gICAgYm90dG9tOiAtNDBweDsKLSAgICByaWdodDogMDsKLX0KLQotLnF1b3RlIGZvb3RlciBp
bWcgewotICAgIGJvcmRlci1yYWRpdXM6IDNweDsKLX0KLQotLnF1b3RlIGZvb3RlciBhIHsKLSAg
ICBtYXJnaW4tbGVmdDogNXB4OwotICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ci19Ci0KLS5z
cGVlY2gtYnViYmxlIHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgcGFkZGluZzogMTBw
eDsKLSAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIC4wNCk7Ci0gICAgYm9yZGVyLXJhZGl1
czogNXB4OwotfQotCi0uc3BlZWNoLWJ1YmJsZTphZnRlciB7Ci0gICAgY29udGVudDogJyc7Ci0g
ICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMTAwJTsKLSAgICByaWdodDogMzBweDsK
LSAgICBib3JkZXI6IDEzcHggc29saWQgdHJhbnNwYXJlbnQ7Ci0gICAgYm9yZGVyLXRvcC1jb2xv
cjogcmdiYSgwLCAwLCAwLCAuMDQpOwotfQotCi0vKipib2R5Ki8ubGVhcm4tYmFyID4gLmxlYXJu
IHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgd2lkdGg6IDI3MnB4OwotICAgIHRvcDog
OHB4OwotICAgIGxlZnQ6IC0zMDBweDsKLSAgICBwYWRkaW5nOiAxMHB4OwotICAgIGJvcmRlci1y
YWRpdXM6IDVweDsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIC42
KTsKLSAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiBsZWZ0OwotICAgIHRyYW5zaXRpb24tZHVyYXRp
b246IDUwMG1zOwotfQotCi1AbWVkaWEgKG1pbi13aWR0aDogODk5cHgpIHsKLSAgICAvKipib2R5
Ki8ubGVhcm4tYmFyIHsKLSAgICB3aWR0aDogYXV0bzsKLSAgICBtYXJnaW46IDAgMCAwIDMwMHB4
OwotICAgIH0KLSAgICAvKipib2R5Ki8ubGVhcm4tYmFyID4gLmxlYXJuIHsKLSAgICBsZWZ0OiA4
cHg7Ci0gICAgfQotICAgIC8qKmJvZHkqLy5sZWFybi1iYXIgI3RvZG9hcHAgewotICAgIHdpZHRo
OiA1NTBweDsKLSAgICBtYXJnaW46IDEzMHB4IGF1dG8gNDBweCBhdXRvOwotICAgIH0KLX0KZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1j
b21tb24vYmFzZS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL2Jvd2VyX2NvbXBvbmVudHMvdG9k
b212Yy1jb21tb24vYmFzZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjliZjQy
NDBmYWQ5YTljMTE5NGM4MTU4NmRjMjkxNmJlYzFjY2E3OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9ib3dlcl9jb21w
b25lbnRzL3RvZG9tdmMtY29tbW9uL2Jhc2UuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAs
MCBAQAotKGZ1bmN0aW9uICgpIHsKLSAgICAndXNlIHN0cmljdCc7Ci0KLSAgICAvLyBVbmRlcnNj
b3JlJ3MgVGVtcGxhdGUgTW9kdWxlCi0gICAgLy8gQ291cnRlc3kgb2YgdW5kZXJzY29yZWpzLm9y
ZwotICAgIHZhciBfID0gKGZ1bmN0aW9uIChfKSB7Ci0gICAgXy5kZWZhdWx0cyA9IGZ1bmN0aW9u
IChvYmplY3QpIHsKLSAgICBpZiAoIW9iamVjdCkgewotICAgIHJldHVybiBvYmplY3Q7Ci0gICAg
fQotICAgIGZvciAodmFyIGFyZ3NJbmRleCA9IDEsIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVu
Z3RoOyBhcmdzSW5kZXggPCBhcmdzTGVuZ3RoOyBhcmdzSW5kZXgrKykgewotICAgIHZhciBpdGVy
YWJsZSA9IGFyZ3VtZW50c1thcmdzSW5kZXhdOwotICAgIGlmIChpdGVyYWJsZSkgewotICAgIGZv
ciAodmFyIGtleSBpbiBpdGVyYWJsZSkgewotICAgIGlmIChvYmplY3Rba2V5XSA9PSBudWxsKSB7
Ci0gICAgb2JqZWN0W2tleV0gPSBpdGVyYWJsZVtrZXldOwotICAgIH0KLSAgICB9Ci0gICAgfQot
ICAgIH0KLSAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLQotICAgIC8vIEJ5IGRlZmF1bHQsIFVu
ZGVyc2NvcmUgdXNlcyBFUkItc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycywgY2hhbmdlIHRoZQot
ICAgIC8vIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVs
aW1pdGVycy4KLSAgICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7Ci0gICAgZXZhbHVhdGUgICAgOiAv
PCUoW1xzXFNdKz8pJT4vZywKLSAgICBpbnRlcnBvbGF0ZSA6IC88JT0oW1xzXFNdKz8pJT4vZywK
LSAgICBlc2NhcGUgICAgICA6IC88JS0oW1xzXFNdKz8pJT4vZwotICAgIH07Ci0KLSAgICAvLyBX
aGVuIGN1c3RvbWl6aW5nIGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8g
ZGVmaW5lIGFuCi0gICAgLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVhdGlvbiBvciBlc2NhcGluZyBy
ZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpcwotICAgIC8vIGd1YXJhbnRlZWQgbm90IHRvIG1hdGNo
LgotICAgIHZhciBub01hdGNoID0gLyguKV4vOwotCi0gICAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJz
IG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGEKLSAgICAv
LyBzdHJpbmcgbGl0ZXJhbC4KLSAgICB2YXIgZXNjYXBlcyA9IHsKLSAgICAiJyI6ICAgICAgIici
LAotICAgICdcXCc6ICAgICAnXFwnLAotICAgICdccic6ICAgICAncicsCi0gICAgJ1xuJzogICAg
ICduJywKLSAgICAnXHQnOiAgICAgJ3QnLAotICAgICdcdTIwMjgnOiAndTIwMjgnLAotICAgICdc
dTIwMjknOiAndTIwMjknCi0gICAgfTsKLQotICAgIHZhciBlc2NhcGVyID0gL1xcfCd8XHJ8XG58
XHR8XHUyMDI4fFx1MjAyOS9nOwotCi0gICAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5n
LCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi4KLSAgICAvLyBVbmRlcnNj
b3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVycywgcHJlc2VydmVzIHdo
aXRlc3BhY2UsCi0gICAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50
ZXJwb2xhdGVkIGNvZGUuCi0gICAgXy50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHRleHQsIGRhdGEsIHNl
dHRpbmdzKSB7Ci0gICAgdmFyIHJlbmRlcjsKLSAgICBzZXR0aW5ncyA9IF8uZGVmYXVsdHMoe30s
IHNldHRpbmdzLCBfLnRlbXBsYXRlU2V0dGluZ3MpOwotCi0gICAgLy8gQ29tYmluZSBkZWxpbWl0
ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uCi0gICAgdmFy
IG1hdGNoZXIgPSBuZXcgUmVnRXhwKFsKLSAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gp
LnNvdXJjZSwKLSAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLAot
ICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2UKLSAgICBdLmpvaW4oJ3wn
KSArICd8JCcsICdnJyk7Ci0KLSAgICAvLyBDb21waWxlIHRoZSB0ZW1wbGF0ZSBzb3VyY2UsIGVz
Y2FwaW5nIHN0cmluZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5LgotICAgIHZhciBpbmRleCA9IDA7
Ci0gICAgdmFyIHNvdXJjZSA9ICJfX3ArPSciOwotICAgIHRleHQucmVwbGFjZShtYXRjaGVyLCBm
dW5jdGlvbihtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVhdGUsIG9mZnNldCkgewot
ICAgIHNvdXJjZSArPSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpCi0gICAgLnJlcGxhY2UoZXNj
YXBlciwgZnVuY3Rpb24obWF0Y2gpIHsgcmV0dXJuICdcXCcgKyBlc2NhcGVzW21hdGNoXTsgfSk7
Ci0KLSAgICBpZiAoZXNjYXBlKSB7Ci0gICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIgKyBlc2Nh
cGUgKyAiKSk9PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXG4nIjsKLSAgICB9Ci0gICAgaWYgKGlu
dGVycG9sYXRlKSB7Ci0gICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIgKyBpbnRlcnBvbGF0ZSAr
ICIpKT09bnVsbD8nJzpfX3QpK1xuJyI7Ci0gICAgfQotICAgIGlmIChldmFsdWF0ZSkgewotICAg
IHNvdXJjZSArPSAiJztcbiIgKyBldmFsdWF0ZSArICJcbl9fcCs9JyI7Ci0gICAgfQotICAgIGlu
ZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoOwotICAgIHJldHVybiBtYXRjaDsKLSAgICB9KTsK
LSAgICBzb3VyY2UgKz0gIic7XG4iOwotCi0gICAgLy8gSWYgYSB2YXJpYWJsZSBpcyBub3Qgc3Bl
Y2lmaWVkLCBwbGFjZSBkYXRhIHZhbHVlcyBpbiBsb2NhbCBzY29wZS4KLSAgICBpZiAoIXNldHRp
bmdzLnZhcmlhYmxlKSBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcbicgKyBzb3VyY2UgKyAnfVxu
JzsKLQotICAgIHNvdXJjZSA9ICJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpv
aW4sIiArCi0gICAgInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycp
O307XG4iICsKLSAgICBzb3VyY2UgKyAicmV0dXJuIF9fcDtcbiI7Ci0KLSAgICB0cnkgewotICAg
IHJlbmRlciA9IG5ldyBGdW5jdGlvbihzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJywgJ18nLCBz
b3VyY2UpOwotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICBlLnNvdXJjZSA9IHNvdXJjZTsKLSAgICB0
aHJvdyBlOwotICAgIH0KLQotICAgIGlmIChkYXRhKSByZXR1cm4gcmVuZGVyKGRhdGEsIF8pOwot
ICAgIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHsKLSAgICByZXR1cm4gcmVuZGVyLmNh
bGwodGhpcywgZGF0YSwgXyk7Ci0gICAgfTsKLQotICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVk
IGZ1bmN0aW9uIHNvdXJjZSBhcyBhIGNvbnZlbmllbmNlIGZvciBwcmVjb21waWxhdGlvbi4KLSAg
ICB0ZW1wbGF0ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyArIChzZXR0aW5ncy52YXJpYWJsZSB8fCAn
b2JqJykgKyAnKXtcbicgKyBzb3VyY2UgKyAnfSc7Ci0KLSAgICByZXR1cm4gdGVtcGxhdGU7Ci0g
ICAgfTsKLQotICAgIHJldHVybiBfOwotICAgIH0pKHt9KTsKLQotICAgIGlmIChsb2NhdGlvbi5o
b3N0bmFtZSA9PT0gJ3RvZG9tdmMuY29tJykgewotICAgIHdpbmRvdy5fZ2FxID0gW1snX3NldEFj
Y291bnQnLCdVQS0zMTA4MTA2Mi0xJ10sWydfdHJhY2tQYWdldmlldyddXTsoZnVuY3Rpb24oZCx0
KXt2YXIgZz1kLmNyZWF0ZUVsZW1lbnQodCkscz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKHQpWzBd
O2cuc3JjPScvL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9nYS5qcyc7cy5wYXJlbnROb2RlLmlu
c2VydEJlZm9yZShnLHMpfShkb2N1bWVudCwnc2NyaXB0JykpOwotICAgIH0KLQotICAgIGZ1bmN0
aW9uIHJlZGlyZWN0KCkgewotICAgIGlmIChsb2NhdGlvbi5ob3N0bmFtZSA9PT0gJ3Rhc3RlanMu
Z2l0aHViLmlvJykgewotICAgIGxvY2F0aW9uLmhyZWYgPSBsb2NhdGlvbi5ocmVmLnJlcGxhY2Uo
J3Rhc3RlanMuZ2l0aHViLmlvL3RvZG9tdmMnLCAndG9kb212Yy5jb20nKTsKLSAgICB9Ci0gICAg
fQotCi0gICAgZnVuY3Rpb24gZmluZFJvb3QoKSB7Ci0gICAgdmFyIGJhc2U7Ci0KLSAgICBbL2xh
YnMvLCAvXHcqLWV4YW1wbGVzL10uZm9yRWFjaChmdW5jdGlvbiAoaHJlZikgewotICAgIHZhciBt
YXRjaCA9IGxvY2F0aW9uLmhyZWYubWF0Y2goaHJlZik7Ci0KLSAgICBpZiAoIWJhc2UgJiYgbWF0
Y2gpIHsKLSAgICBiYXNlID0gbG9jYXRpb24uaHJlZi5pbmRleE9mKG1hdGNoKTsKLSAgICB9Ci0g
ICAgfSk7Ci0KLSAgICByZXR1cm4gbG9jYXRpb24uaHJlZi5zdWJzdHIoMCwgYmFzZSk7Ci0gICAg
fQotCi0gICAgZnVuY3Rpb24gZ2V0RmlsZShmaWxlLCBjYWxsYmFjaykgewotICAgIGlmICghbG9j
YXRpb24uaG9zdCkgewotICAgIHJldHVybiBjb25zb2xlLmluZm8oJ01pc3MgdGhlIGluZm8gYmFy
PyBSdW4gVG9kb01WQyBmcm9tIGEgc2VydmVyIHRvIGF2b2lkIGEgY3Jvc3Mtb3JpZ2luIGVycm9y
LicpOwotICAgIH0KLQotICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKLQotICAg
IHhoci5vcGVuKCdHRVQnLCBmaW5kUm9vdCgpICsgZmlsZSwgdHJ1ZSk7Ci0gICAgeGhyLnNlbmQo
KTsKLQotICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgaWYgKHhoci5zdGF0dXMg
PT09IDIwMCAmJiBjYWxsYmFjaykgewotICAgIGNhbGxiYWNrKHhoci5yZXNwb25zZVRleHQpOwot
ICAgIH0KLSAgICB9OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIExlYXJuKGxlYXJuSlNPTiwgY29u
ZmlnKSB7Ci0gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIExlYXJuKSkgewotICAgIHJldHVybiBu
ZXcgTGVhcm4obGVhcm5KU09OLCBjb25maWcpOwotICAgIH0KLQotICAgIHZhciB0ZW1wbGF0ZSwg
ZnJhbWV3b3JrOwotCi0gICAgaWYgKHR5cGVvZiBsZWFybkpTT04gIT09ICdvYmplY3QnKSB7Ci0g
ICAgdHJ5IHsKLSAgICBsZWFybkpTT04gPSBKU09OLnBhcnNlKGxlYXJuSlNPTik7Ci0gICAgfSBj
YXRjaCAoZSkgewotICAgIHJldHVybjsKLSAgICB9Ci0gICAgfQotCi0gICAgaWYgKGNvbmZpZykg
ewotICAgIHRlbXBsYXRlID0gY29uZmlnLnRlbXBsYXRlOwotICAgIGZyYW1ld29yayA9IGNvbmZp
Zy5mcmFtZXdvcms7Ci0gICAgfQotCi0gICAgaWYgKCF0ZW1wbGF0ZSAmJiBsZWFybkpTT04udGVt
cGxhdGVzKSB7Ci0gICAgdGVtcGxhdGUgPSBsZWFybkpTT04udGVtcGxhdGVzLnRvZG9tdmM7Ci0g
ICAgfQotCi0gICAgaWYgKCFmcmFtZXdvcmsgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2Rh
dGEtZnJhbWV3b3JrXScpKSB7Ci0gICAgZnJhbWV3b3JrID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rv
cignW2RhdGEtZnJhbWV3b3JrXScpLmdldEF0dHJpYnV0ZSgnZGF0YS1mcmFtZXdvcmsnKTsKLSAg
ICB9Ci0KLQotICAgIGlmICh0ZW1wbGF0ZSAmJiBsZWFybkpTT05bZnJhbWV3b3JrXSkgewotICAg
IHRoaXMuZnJhbWV3b3JrSlNPTiA9IGxlYXJuSlNPTltmcmFtZXdvcmtdOwotICAgIHRoaXMudGVt
cGxhdGUgPSB0ZW1wbGF0ZTsKLQotICAgIHRoaXMuYXBwZW5kKCk7Ci0gICAgfQotICAgIH0KLQot
ICAgIExlYXJuLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIGFzaWRl
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXNpZGUnKTsKLSAgICBhc2lkZS5pbm5lckhUTUwg
PSBfLnRlbXBsYXRlKHRoaXMudGVtcGxhdGUsIHRoaXMuZnJhbWV3b3JrSlNPTik7Ci0gICAgYXNp
ZGUuY2xhc3NOYW1lID0gJ2xlYXJuJzsKLQotICAgIC8vIExvY2FsaXplIGRlbW8gbGlua3MKLSAg
ICB2YXIgZGVtb0xpbmtzID0gYXNpZGUucXVlcnlTZWxlY3RvckFsbCgnLmRlbW8tbGluaycpOwot
ICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZGVtb0xpbmtzLCBmdW5jdGlvbiAoZGVt
b0xpbmspIHsKLSAgICBkZW1vTGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBmaW5kUm9vdCgpICsg
ZGVtb0xpbmsuZ2V0QXR0cmlidXRlKCdocmVmJykpOwotICAgIH0pOwotCi0gICAgZG9jdW1lbnQu
Ym9keS5jbGFzc05hbWUgPSAoZG9jdW1lbnQuYm9keS5jbGFzc05hbWUgKyAnIGxlYXJuLWJhcicp
LnRyaW0oKTsKLSAgICBkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50SFRNTCgnYWZ0ZXJCZWdp
bicsIGFzaWRlLm91dGVySFRNTCk7Ci0gICAgfTsKLQotICAgIHJlZGlyZWN0KCk7Ci0gICAgZ2V0
RmlsZSgnbGVhcm4uanNvbicsIExlYXJuKTsKLX0pKCk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9iYWNrYm9uZS9ib3dlcl9jb21wb25lbnRzL3RvZG9tdmMtY29tbW9uL2JnLnBuZyBiL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL2JhY2tib25lL2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmcucG5nCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmE3NjAwODI1ZWUxMWYyMTg0OWVkNDc1NDk5
YzdkMWVjYmNjODcwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJ
VCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDIxMjYKemNtVi1V
MihrQnhQKTxoOzNLfExrMDAwZTFOSkxUcTAwM2tGMDAza0gwe3tSMzRVQiFxMDAwMENQKXQtcz8o
WGpFCno+Kzl5YD1ISzdudD1+M3QwMDBPNU5rbDxaY3dUanUoUTR2fjdLV0VXI1ltP2xLX3Y7VG18
IUZjKUBOd0VubXRzaAp6eCFPfno4MUpUM3BGc20+bT0wNGhWYV9sWGxfYm09K007PWVJPCUkck8y
dGFgc3VoKlNyI1BPdyo/YWRxIU8hQ1YKeiowJmIpcmtDQ0VWKTFuSXVpTEJudFVILU1KSTsmcVln
enxkQE5obm5fYWJpMmdgcHU0TkFNVmlkM2hTJT9xdXp+CnpqbEpmKHg4Y2o8UEdjam4qSitheyZI
NXAqbjUkNWUzPzxLQ2M/bzA2bUFzTlNiZ1BXTz9QeiNDem48IT17PntWUwp6VVZFUDFtc2c5YF5P
RlVoU081cnRYSGhSbHlVMmk+NiRCVD1nbEdge0psY3RHSHJ3UkltKTZCdXU2NWpMUW5eSDgKenZs
OWxacVVCQSslcXZNNVhDK3lZQG1mQShZQn5YUD1lfDY8eyUkXmVVOG5ySz92MmNjYkBKb201Q0c+
cktBTDdKCnpwbEhFSWF2VnB8MHAxJm0hR2BUaT88N2laO31ARzcjWil9S20lMiFGSG5RMComP1BM
UilHIUhBYUhnVSNjfCRkegp6cGojMEhtZWFkSWU+YCMpPUpqa2J7Qj1GS25VM3BjLSZZQGpfajYo
aDRZfitVcTxQVTM2Qzs1Yj1NXkZgPXAxZEkKems8Q1FPUE5hNz4hXko9TEh1bngxeGk0UVhLLVl7
Jk1vVDhreTZWYjljfFdobk93Rn5jPTN6T3k4YWdrdGxpUzYjCnpgIzhGYDlIKUQ9Ym1rOUI1TW5X
Jl9yIylmJGMrOyRMU3ItQF5BbjhkaGN+SXF1dXY+ak9LN3B3N0xKOyZYMGkxQwp6R01zSGRQMU9z
QG55JCRqIT5YQWlpJTdicDVrPmBweU5BIX5lcGIpKClwOXpSNFlsNno9VX17Q0lkaDF6KEZwQW8K
elFJVyE7MHpwQ3lDNCo3WUxrWkNPQGN1bDBSXyZ6Z2hzQThFayl6JTwhcC1idnNzcGxZWTJ9UDsh
djRDWWo5a21GCnpiMGJOX200VipmXllaTW9iMihqM3BLan43diNadGtzPUlvK3tzdSVXaXVrZEpI
JGI/ZlpraUE9UFlfM09oREJrbwp6KExUUUhZJkZeXjJoRy1ZYCpaOTN2Yn5jPyooSmNoRGpUZkNz
P3pSbSpgKk4qVi0kPT9RcXRoblNyKj9PUzNzaksKem88X1VeZnt+YWc2MHVsPmpOcEthOTJ7QE5I
K1NzdFglQH14QipKayFsfVBaMWNDbEluc359NV4hUm5jVWsqcm1BCnolU0lWZ3Q1OEVReExKK09p
RnE8eXU0ZU9EfDlMdDNkTnNlZnhPdXEpRCYkXyVqMERncUN5MWd6Y3x0VEQzKm1lZQp6ez0lfDxg
YH1fSHlwaE91ezspeGtSZytRbkhDQzNUZitrc3BxVjYqfFFLLVJjcUR9ND5La0J1d3F1eVpMVXB8
Z3IKelBVYlViRmJCclBkMXhPYF5DKnItaTNwOSpGIyhPQmghNFd5QGFDJiohfE98R1hjakRBJllo
Rns7Y0Q3Km8oR1NeCnpAcFFTRTcpeF84MT1ReWplNipMUSNUWHUtNyhvO1M4dTN0cERBPFNnY0tj
S09wbUE7PUhCWlNAT0ZUQF9YT3Z4cQp6Kk58M0tMeXRnekg2R1UmJlVvYzRaems0bHVtM1B7OT9m
cEk0K1FHUEordjZgMWxmUnEzTGNTKihNKldLK3xiJU8KemUkej4wX2RkaiVobUNzcGVYZGhZUn0t
aTlBPUNgRW9DaFVZdUh+XnghOSt8JihQZ2IqPkNrPD05anwpKkB4eWZUCnpwUCMrS3Q8fTM5Ynwz
V2w0ZnhUKCtHP2FIPmdHXmRATUVhVU9KUmZ5NTVUdEZJN15ZKVZ1TVU9N1BwMHk1NWpTfgp6K1RK
KWlnTXlycWtYO3dVOGo2OGlJRHRxSlloU19EM19PZW0tQGc2bWVfUmZpUX11VF9LLUEtOXFHJX1n
azNFOWMKeiE4YEtnc01OWG0pYmVsb1BmTXFsKnwmJE0+MXFgaSFjWSlSRlluak5ZdSpnU3ZAOFhl
YlY3JX14WUw+NilHSlBKCnpKcEE3SzMxbGNKdUlGS1N3LXt4NEZYMEsyQXopflhnPGBzT3UkNHxe
PE1DN0AreGJ3eHNHZ1R2SklBTGpQezY4TAp6OEFZdVNHUzBHVWdrNldgdjRXO1J5KnVvRVRudWxQ
aXw1NzMlbHYqWnh3I3Y2eVVRXk1PZmNwVCNWOFJJRFYjI04KekQxYCtBZW1zT2gpd2JXREV4VmNm
cEt6KWp5Vj08fiZaWFBnNmN8WkRFN1U0Yms8RF4+LSheWEpYNFl6b2lOUnZMCnp5dVk3fjI2dy1Q
Xlp3JTZGfXNoQndWMiQwMmM4UnNTVXk2ZE05MmRpQ0F4aVgzSVVxc3E1aWc2PlVfIVZ5KnE1JAp6
am19MTZ0SnIrUVomVD9Ia2twZUl3VlgtcjFFST1AJVpsdDs2PHR3SDg2SUQ+ZyptaiZFIUEpKSVn
WEo9eDZ1I2wKemNLRVA+Yng0cnFWKmtgQkJyWiRNcWp0e1RzSGN4VUg+OylpQUt9QihLaWxhJlZE
JWI/Nm0mXjBXSzReJkVaTkFJCno4QU1Zc18lJEQlfE0rQCtjUXFMLWhpNHlHPmgqandkaWkhVzF7
fXA+Wmh3Rll0XzRTdTFralk5PGJBWmp6fjllawp6X0RpYXIrQWZKRlBfOUB5bVVvJEtXPjwtNWAh
JFZOT0kxeShFRFNINFdwQ2lqRV8+YWwhTnQ9XmVWRVIjdUoxPWIKejtCV0YySWd5RjVMZXhWK3ll
YyRLaW47QWlAbXlvO0c+ekomanJkVyNlY1hoSVpwaDVPWXF3X1BFZmNGNTY8TzE5CnpMKThyIUtN
KClpZjBgQD9XNChKZGMpN1dvUEdeJj0kPHpVc00rSENXYWtDXjN0WnhrK1BqUUd9Qj5aNTxaNlZ4
dwp6QkBIclYkJmx+QFRhajcwcGNle2lTdVJMc1VjekRZXzVUbkRxOFB5X1Ezd2hgRDghNGpLO3ZG
ZFJQK1EwPXpKeSoKenp1V2QlIWFpQER7fCpKPEk7T0QmaSVse0pwLTgqUHUzVkdMV2l5azZ2I1ht
UXF3YC0rJWUkfENKdypAYDV6YjM8CnpFfXojO2tSaEwmcTVQREc2QG1tKiQ+WnVfWlpFI3EzTWMr
TiYxT143aG9oOVFSN2ArTCRjQlA1cHFHPWZxQTB1aAp6VUJ1a2F4VEZtSCk8fFhidnAyYz1IU2JO
a3BYdzczYTVsdjdWJGpiOTIjeVoxNDFAJFg/Rn1KdDhnSVU3V202bTkKej9lXzs7enNubTZgTFpl
UD5UPSQpS3I+Wj9rcipVbUZxUjd6eDBDNl5ibWNzY0AxQUd0d19yTkg+LVhtJGQqfFE8CnpuJjFM
bjB1Nz1sJklMcz4lQ2tKcGBEaUc5RjE4eDROZStsZzwjaT9lN2pMJXg7NFpuUmtOXk14MDcqcW9N
Nk48JApFZig+ME4hMmtkTgoKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL2Jvd2Vy
X2NvbXBvbmVudHMvdW5kZXJzY29yZS91bmRlcnNjb3JlLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2Jv
bmUvYm93ZXJfY29tcG9uZW50cy91bmRlcnNjb3JlL3VuZGVyc2NvcmUuanMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGExMmYwZDk2Y2ZiNDhhMDJkNTE4NDI3YjI2YzMzM2JhYzYyMjgx
MGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvYmFja2JvbmUvYm93ZXJfY29tcG9uZW50cy91bmRlcnNjb3JlL3VuZGVyc2NvcmUuanMK
KysrIC9kZXYvbnVsbApAQCAtMSwxMjI2ICswLDAgQEAKLS8vICAgICBVbmRlcnNjb3JlLmpzIDEu
NC40Ci0vLyAgICAgaHR0cDovL3VuZGVyc2NvcmVqcy5vcmcKLS8vICAgICAoYykgMjAwOS0yMDEz
IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBJbmMuCi0vLyAgICAgVW5kZXJzY29yZSBt
YXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KLQotKGZ1bmN0
aW9uKCkgewotCi0gIC8vIEJhc2VsaW5lIHNldHVwCi0gIC8vIC0tLS0tLS0tLS0tLS0tCi0KLSAg
Ly8gRXN0YWJsaXNoIHRoZSByb290IG9iamVjdCwgYHdpbmRvd2AgaW4gdGhlIGJyb3dzZXIsIG9y
IGBnbG9iYWxgIG9uIHRoZSBzZXJ2ZXIuCi0gIHZhciByb290ID0gdGhpczsKLQotICAvLyBTYXZl
IHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgYF9gIHZhcmlhYmxlLgotICB2YXIgcHJldmlvdXNV
bmRlcnNjb3JlID0gcm9vdC5fOwotCi0gIC8vIEVzdGFibGlzaCB0aGUgb2JqZWN0IHRoYXQgZ2V0
cyByZXR1cm5lZCB0byBicmVhayBvdXQgb2YgYSBsb29wIGl0ZXJhdGlvbi4KLSAgdmFyIGJyZWFr
ZXIgPSB7fTsKLQotICAvLyBTYXZlIGJ5dGVzIGluIHRoZSBtaW5pZmllZCAoYnV0IG5vdCBnemlw
cGVkKSB2ZXJzaW9uOgotICB2YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSwgT2JqUHJv
dG8gPSBPYmplY3QucHJvdG90eXBlLCBGdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7Ci0K
LSAgLy8gQ3JlYXRlIHF1aWNrIHJlZmVyZW5jZSB2YXJpYWJsZXMgZm9yIHNwZWVkIGFjY2VzcyB0
byBjb3JlIHByb3RvdHlwZXMuCi0gIHZhciBwdXNoICAgICAgICAgICAgID0gQXJyYXlQcm90by5w
dXNoLAotICAgICAgc2xpY2UgICAgICAgICAgICA9IEFycmF5UHJvdG8uc2xpY2UsCi0gICAgICBj
b25jYXQgICAgICAgICAgID0gQXJyYXlQcm90by5jb25jYXQsCi0gICAgICB0b1N0cmluZyAgICAg
ICAgID0gT2JqUHJvdG8udG9TdHJpbmcsCi0gICAgICBoYXNPd25Qcm9wZXJ0eSAgID0gT2JqUHJv
dG8uaGFzT3duUHJvcGVydHk7Ci0KLSAgLy8gQWxsICoqRUNNQVNjcmlwdCA1KiogbmF0aXZlIGZ1
bmN0aW9uIGltcGxlbWVudGF0aW9ucyB0aGF0IHdlIGhvcGUgdG8gdXNlCi0gIC8vIGFyZSBkZWNs
YXJlZCBoZXJlLgotICB2YXIKLSAgICBuYXRpdmVGb3JFYWNoICAgICAgPSBBcnJheVByb3RvLmZv
ckVhY2gsCi0gICAgbmF0aXZlTWFwICAgICAgICAgID0gQXJyYXlQcm90by5tYXAsCi0gICAgbmF0
aXZlUmVkdWNlICAgICAgID0gQXJyYXlQcm90by5yZWR1Y2UsCi0gICAgbmF0aXZlUmVkdWNlUmln
aHQgID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodCwKLSAgICBuYXRpdmVGaWx0ZXIgICAgICAgPSBB
cnJheVByb3RvLmZpbHRlciwKLSAgICBuYXRpdmVFdmVyeSAgICAgICAgPSBBcnJheVByb3RvLmV2
ZXJ5LAotICAgIG5hdGl2ZVNvbWUgICAgICAgICA9IEFycmF5UHJvdG8uc29tZSwKLSAgICBuYXRp
dmVJbmRleE9mICAgICAgPSBBcnJheVByb3RvLmluZGV4T2YsCi0gICAgbmF0aXZlTGFzdEluZGV4
T2YgID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZiwKLSAgICBuYXRpdmVJc0FycmF5ICAgICAgPSBB
cnJheS5pc0FycmF5LAotICAgIG5hdGl2ZUtleXMgICAgICAgICA9IE9iamVjdC5rZXlzLAotICAg
IG5hdGl2ZUJpbmQgICAgICAgICA9IEZ1bmNQcm90by5iaW5kOwotCi0gIC8vIENyZWF0ZSBhIHNh
ZmUgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3IgdXNlIGJlbG93LgotICB2
YXIgXyA9IGZ1bmN0aW9uKG9iaikgewotICAgIGlmIChvYmogaW5zdGFuY2VvZiBfKSByZXR1cm4g
b2JqOwotICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBfKSkgcmV0dXJuIG5ldyBfKG9iaik7Ci0g
ICAgdGhpcy5fd3JhcHBlZCA9IG9iajsKLSAgfTsKLQotICAvLyBFeHBvcnQgdGhlIFVuZGVyc2Nv
cmUgb2JqZWN0IGZvciAqKk5vZGUuanMqKiwgd2l0aAotICAvLyBiYWNrd2FyZHMtY29tcGF0aWJp
bGl0eSBmb3IgdGhlIG9sZCBgcmVxdWlyZSgpYCBBUEkuIElmIHdlJ3JlIGluCi0gIC8vIHRoZSBi
cm93c2VyLCBhZGQgYF9gIGFzIGEgZ2xvYmFsIG9iamVjdCB2aWEgYSBzdHJpbmcgaWRlbnRpZmll
ciwKLSAgLy8gZm9yIENsb3N1cmUgQ29tcGlsZXIgImFkdmFuY2VkIiBtb2RlLgotICBpZiAodHlw
ZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7Ci0gICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09
ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7Ci0gICAgICBleHBvcnRzID0gbW9kdWxl
LmV4cG9ydHMgPSBfOwotICAgIH0KLSAgICBleHBvcnRzLl8gPSBfOwotICB9IGVsc2UgewotICAg
IHJvb3QuXyA9IF87Ci0gIH0KLQotICAvLyBDdXJyZW50IHZlcnNpb24uCi0gIF8uVkVSU0lPTiA9
ICcxLjQuNCc7Ci0KLSAgLy8gQ29sbGVjdGlvbiBGdW5jdGlvbnMKLSAgLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotICAvLyBUaGUgY29ybmVyc3RvbmUsIGFuIGBlYWNoYCBpbXBsZW1lbnRhdGlv
biwgYWthIGBmb3JFYWNoYC4KLSAgLy8gSGFuZGxlcyBvYmplY3RzIHdpdGggdGhlIGJ1aWx0LWlu
IGBmb3JFYWNoYCwgYXJyYXlzLCBhbmQgcmF3IG9iamVjdHMuCi0gIC8vIERlbGVnYXRlcyB0byAq
KkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBmb3JFYWNoYCBpZiBhdmFpbGFibGUuCi0gIHZhciBl
YWNoID0gXy5lYWNoID0gXy5mb3JFYWNoID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRvciwgY29udGV4
dCkgewotICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuOwotICAgIGlmIChuYXRpdmVGb3JFYWNo
ICYmIG9iai5mb3JFYWNoID09PSBuYXRpdmVGb3JFYWNoKSB7Ci0gICAgICBvYmouZm9yRWFjaChp
dGVyYXRvciwgY29udGV4dCk7Ci0gICAgfSBlbHNlIGlmIChvYmoubGVuZ3RoID09PSArb2JqLmxl
bmd0aCkgewotICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsr
KSB7Ci0gICAgICAgIGlmIChpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtpXSwgaSwgb2JqKSA9
PT0gYnJlYWtlcikgcmV0dXJuOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBmb3IgKHZh
ciBrZXkgaW4gb2JqKSB7Ci0gICAgICAgIGlmIChfLmhhcyhvYmosIGtleSkpIHsKLSAgICAgICAg
ICBpZiAoaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpba2V5XSwga2V5LCBvYmopID09PSBicmVh
a2VyKSByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH07Ci0KLSAgLy8gUmV0
dXJuIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRvciB0byBlYWNoIGVsZW1lbnQu
Ci0gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBtYXBgIGlmIGF2
YWlsYWJsZS4KLSAgXy5tYXAgPSBfLmNvbGxlY3QgPSBmdW5jdGlvbihvYmosIGl0ZXJhdG9yLCBj
b250ZXh0KSB7Ci0gICAgdmFyIHJlc3VsdHMgPSBbXTsKLSAgICBpZiAob2JqID09IG51bGwpIHJl
dHVybiByZXN1bHRzOwotICAgIGlmIChuYXRpdmVNYXAgJiYgb2JqLm1hcCA9PT0gbmF0aXZlTWFw
KSByZXR1cm4gb2JqLm1hcChpdGVyYXRvciwgY29udGV4dCk7Ci0gICAgZWFjaChvYmosIGZ1bmN0
aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkgewotICAgICAgcmVzdWx0c1tyZXN1bHRzLmxlbmd0aF0g
PSBpdGVyYXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdCk7Ci0gICAgfSk7Ci0g
ICAgcmV0dXJuIHJlc3VsdHM7Ci0gIH07Ci0KLSAgdmFyIHJlZHVjZUVycm9yID0gJ1JlZHVjZSBv
ZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnOwotCi0gIC8vICoqUmVkdWNlKiog
YnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFrYSBgaW5q
ZWN0YCwKLSAgLy8gb3IgYGZvbGRsYC4gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBu
YXRpdmUgYHJlZHVjZWAgaWYgYXZhaWxhYmxlLgotICBfLnJlZHVjZSA9IF8uZm9sZGwgPSBfLmlu
amVjdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0b3IsIG1lbW8sIGNvbnRleHQpIHsKLSAgICB2YXIg
aW5pdGlhbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwotICAgIGlmIChvYmogPT0gbnVsbCkgb2Jq
ID0gW107Ci0gICAgaWYgKG5hdGl2ZVJlZHVjZSAmJiBvYmoucmVkdWNlID09PSBuYXRpdmVSZWR1
Y2UpIHsKLSAgICAgIGlmIChjb250ZXh0KSBpdGVyYXRvciA9IF8uYmluZChpdGVyYXRvciwgY29u
dGV4dCk7Ci0gICAgICByZXR1cm4gaW5pdGlhbCA/IG9iai5yZWR1Y2UoaXRlcmF0b3IsIG1lbW8p
IDogb2JqLnJlZHVjZShpdGVyYXRvcik7Ci0gICAgfQotICAgIGVhY2gob2JqLCBmdW5jdGlvbih2
YWx1ZSwgaW5kZXgsIGxpc3QpIHsKLSAgICAgIGlmICghaW5pdGlhbCkgewotICAgICAgICBtZW1v
ID0gdmFsdWU7Ci0gICAgICAgIGluaXRpYWwgPSB0cnVlOwotICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgbWVtbyA9IGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgbWVtbywgdmFsdWUsIGluZGV4LCBsaXN0
KTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICBpZiAoIWluaXRpYWwpIHRocm93IG5ldyBUeXBlRXJy
b3IocmVkdWNlRXJyb3IpOwotICAgIHJldHVybiBtZW1vOwotICB9OwotCi0gIC8vIFRoZSByaWdo
dC1hc3NvY2lhdGl2ZSB2ZXJzaW9uIG9mIHJlZHVjZSwgYWxzbyBrbm93biBhcyBgZm9sZHJgLgot
ICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgcmVkdWNlUmlnaHRg
IGlmIGF2YWlsYWJsZS4KLSAgXy5yZWR1Y2VSaWdodCA9IF8uZm9sZHIgPSBmdW5jdGlvbihvYmos
IGl0ZXJhdG9yLCBtZW1vLCBjb250ZXh0KSB7Ci0gICAgdmFyIGluaXRpYWwgPSBhcmd1bWVudHMu
bGVuZ3RoID4gMjsKLSAgICBpZiAob2JqID09IG51bGwpIG9iaiA9IFtdOwotICAgIGlmIChuYXRp
dmVSZWR1Y2VSaWdodCAmJiBvYmoucmVkdWNlUmlnaHQgPT09IG5hdGl2ZVJlZHVjZVJpZ2h0KSB7
Ci0gICAgICBpZiAoY29udGV4dCkgaXRlcmF0b3IgPSBfLmJpbmQoaXRlcmF0b3IsIGNvbnRleHQp
OwotICAgICAgcmV0dXJuIGluaXRpYWwgPyBvYmoucmVkdWNlUmlnaHQoaXRlcmF0b3IsIG1lbW8p
IDogb2JqLnJlZHVjZVJpZ2h0KGl0ZXJhdG9yKTsKLSAgICB9Ci0gICAgdmFyIGxlbmd0aCA9IG9i
ai5sZW5ndGg7Ci0gICAgaWYgKGxlbmd0aCAhPT0gK2xlbmd0aCkgewotICAgICAgdmFyIGtleXMg
PSBfLmtleXMob2JqKTsKLSAgICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoOwotICAgIH0KLSAgICBl
YWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7Ci0gICAgICBpbmRleCA9IGtl
eXMgPyBrZXlzWy0tbGVuZ3RoXSA6IC0tbGVuZ3RoOwotICAgICAgaWYgKCFpbml0aWFsKSB7Ci0g
ICAgICAgIG1lbW8gPSBvYmpbaW5kZXhdOwotICAgICAgICBpbml0aWFsID0gdHJ1ZTsKLSAgICAg
IH0gZWxzZSB7Ci0gICAgICAgIG1lbW8gPSBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG1lbW8sIG9i
altpbmRleF0sIGluZGV4LCBsaXN0KTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICBpZiAoIWluaXRp
YWwpIHRocm93IG5ldyBUeXBlRXJyb3IocmVkdWNlRXJyb3IpOwotICAgIHJldHVybiBtZW1vOwot
ICB9OwotCi0gIC8vIFJldHVybiB0aGUgZmlyc3QgdmFsdWUgd2hpY2ggcGFzc2VzIGEgdHJ1dGgg
dGVzdC4gQWxpYXNlZCBhcyBgZGV0ZWN0YC4KLSAgXy5maW5kID0gXy5kZXRlY3QgPSBmdW5jdGlv
bihvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7Ci0gICAgdmFyIHJlc3VsdDsKLSAgICBhbnkob2Jq
LCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHsKLSAgICAgIGlmIChpdGVyYXRvci5jYWxs
KGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdCkpIHsKLSAgICAgICAgcmVzdWx0ID0gdmFsdWU7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0pOwotICAgIHJldHVybiByZXN1
bHQ7Ci0gIH07Ci0KLSAgLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBwYXNzIGEgdHJ1
dGggdGVzdC4KLSAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYGZp
bHRlcmAgaWYgYXZhaWxhYmxlLgotICAvLyBBbGlhc2VkIGFzIGBzZWxlY3RgLgotICBfLmZpbHRl
ciA9IF8uc2VsZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRvciwgY29udGV4dCkgewotICAgIHZh
ciByZXN1bHRzID0gW107Ci0gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gcmVzdWx0czsKLSAg
ICBpZiAobmF0aXZlRmlsdGVyICYmIG9iai5maWx0ZXIgPT09IG5hdGl2ZUZpbHRlcikgcmV0dXJu
IG9iai5maWx0ZXIoaXRlcmF0b3IsIGNvbnRleHQpOwotICAgIGVhY2gob2JqLCBmdW5jdGlvbih2
YWx1ZSwgaW5kZXgsIGxpc3QpIHsKLSAgICAgIGlmIChpdGVyYXRvci5jYWxsKGNvbnRleHQsIHZh
bHVlLCBpbmRleCwgbGlzdCkpIHJlc3VsdHNbcmVzdWx0cy5sZW5ndGhdID0gdmFsdWU7Ci0gICAg
fSk7Ci0gICAgcmV0dXJuIHJlc3VsdHM7Ci0gIH07Ci0KLSAgLy8gUmV0dXJuIGFsbCB0aGUgZWxl
bWVudHMgZm9yIHdoaWNoIGEgdHJ1dGggdGVzdCBmYWlscy4KLSAgXy5yZWplY3QgPSBmdW5jdGlv
bihvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7Ci0gICAgcmV0dXJuIF8uZmlsdGVyKG9iaiwgZnVu
Y3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7Ci0gICAgICByZXR1cm4gIWl0ZXJhdG9yLmNhbGwo
Y29udGV4dCwgdmFsdWUsIGluZGV4LCBsaXN0KTsKLSAgICB9LCBjb250ZXh0KTsKLSAgfTsKLQot
ICAvLyBEZXRlcm1pbmUgd2hldGhlciBhbGwgb2YgdGhlIGVsZW1lbnRzIG1hdGNoIGEgdHJ1dGgg
dGVzdC4KLSAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYGV2ZXJ5
YCBpZiBhdmFpbGFibGUuCi0gIC8vIEFsaWFzZWQgYXMgYGFsbGAuCi0gIF8uZXZlcnkgPSBfLmFs
bCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHsKLSAgICBpdGVyYXRvciB8fCAo
aXRlcmF0b3IgPSBfLmlkZW50aXR5KTsKLSAgICB2YXIgcmVzdWx0ID0gdHJ1ZTsKLSAgICBpZiAo
b2JqID09IG51bGwpIHJldHVybiByZXN1bHQ7Ci0gICAgaWYgKG5hdGl2ZUV2ZXJ5ICYmIG9iai5l
dmVyeSA9PT0gbmF0aXZlRXZlcnkpIHJldHVybiBvYmouZXZlcnkoaXRlcmF0b3IsIGNvbnRleHQp
OwotICAgIGVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHsKLSAgICAgIGlm
ICghKHJlc3VsdCA9IHJlc3VsdCAmJiBpdGVyYXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRl
eCwgbGlzdCkpKSByZXR1cm4gYnJlYWtlcjsKLSAgICB9KTsKLSAgICByZXR1cm4gISFyZXN1bHQ7
Ci0gIH07Ci0KLSAgLy8gRGV0ZXJtaW5lIGlmIGF0IGxlYXN0IG9uZSBlbGVtZW50IGluIHRoZSBv
YmplY3QgbWF0Y2hlcyBhIHRydXRoIHRlc3QuCi0gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3Jp
cHQgNSoqJ3MgbmF0aXZlIGBzb21lYCBpZiBhdmFpbGFibGUuCi0gIC8vIEFsaWFzZWQgYXMgYGFu
eWAuCi0gIHZhciBhbnkgPSBfLnNvbWUgPSBfLmFueSA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0b3Is
IGNvbnRleHQpIHsKLSAgICBpdGVyYXRvciB8fCAoaXRlcmF0b3IgPSBfLmlkZW50aXR5KTsKLSAg
ICB2YXIgcmVzdWx0ID0gZmFsc2U7Ci0gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gcmVzdWx0
OwotICAgIGlmIChuYXRpdmVTb21lICYmIG9iai5zb21lID09PSBuYXRpdmVTb21lKSByZXR1cm4g
b2JqLnNvbWUoaXRlcmF0b3IsIGNvbnRleHQpOwotICAgIGVhY2gob2JqLCBmdW5jdGlvbih2YWx1
ZSwgaW5kZXgsIGxpc3QpIHsKLSAgICAgIGlmIChyZXN1bHQgfHwgKHJlc3VsdCA9IGl0ZXJhdG9y
LmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBsaXN0KSkpIHJldHVybiBicmVha2VyOwotICAg
IH0pOwotICAgIHJldHVybiAhIXJlc3VsdDsKLSAgfTsKLQotICAvLyBEZXRlcm1pbmUgaWYgdGhl
IGFycmF5IG9yIG9iamVjdCBjb250YWlucyBhIGdpdmVuIHZhbHVlICh1c2luZyBgPT09YCkuCi0g
IC8vIEFsaWFzZWQgYXMgYGluY2x1ZGVgLgotICBfLmNvbnRhaW5zID0gXy5pbmNsdWRlID0gZnVu
Y3Rpb24ob2JqLCB0YXJnZXQpIHsKLSAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZTsK
LSAgICBpZiAobmF0aXZlSW5kZXhPZiAmJiBvYmouaW5kZXhPZiA9PT0gbmF0aXZlSW5kZXhPZikg
cmV0dXJuIG9iai5pbmRleE9mKHRhcmdldCkgIT0gLTE7Ci0gICAgcmV0dXJuIGFueShvYmosIGZ1
bmN0aW9uKHZhbHVlKSB7Ci0gICAgICByZXR1cm4gdmFsdWUgPT09IHRhcmdldDsKLSAgICB9KTsK
LSAgfTsKLQotICAvLyBJbnZva2UgYSBtZXRob2QgKHdpdGggYXJndW1lbnRzKSBvbiBldmVyeSBp
dGVtIGluIGEgY29sbGVjdGlvbi4KLSAgXy5pbnZva2UgPSBmdW5jdGlvbihvYmosIG1ldGhvZCkg
ewotICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpOwotICAgIHZhciBpc0Z1
bmMgPSBfLmlzRnVuY3Rpb24obWV0aG9kKTsKLSAgICByZXR1cm4gXy5tYXAob2JqLCBmdW5jdGlv
bih2YWx1ZSkgewotICAgICAgcmV0dXJuIChpc0Z1bmMgPyBtZXRob2QgOiB2YWx1ZVttZXRob2Rd
KS5hcHBseSh2YWx1ZSwgYXJncyk7Ci0gICAgfSk7Ci0gIH07Ci0KLSAgLy8gQ29udmVuaWVuY2Ug
dmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgbWFwYDogZmV0Y2hpbmcgYSBwcm9wZXJ0
eS4KLSAgXy5wbHVjayA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7Ci0gICAgcmV0dXJuIF8ubWFwKG9i
aiwgZnVuY3Rpb24odmFsdWUpeyByZXR1cm4gdmFsdWVba2V5XTsgfSk7Ci0gIH07Ci0KLSAgLy8g
Q29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmlsdGVyYDogc2Vs
ZWN0aW5nIG9ubHkgb2JqZWN0cwotICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVg
IHBhaXJzLgotICBfLndoZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycywgZmlyc3QpIHsKLSAgICBp
ZiAoXy5pc0VtcHR5KGF0dHJzKSkgcmV0dXJuIGZpcnN0ID8gbnVsbCA6IFtdOwotICAgIHJldHVy
biBfW2ZpcnN0ID8gJ2ZpbmQnIDogJ2ZpbHRlciddKG9iaiwgZnVuY3Rpb24odmFsdWUpIHsKLSAg
ICAgIGZvciAodmFyIGtleSBpbiBhdHRycykgewotICAgICAgICBpZiAoYXR0cnNba2V5XSAhPT0g
dmFsdWVba2V5XSkgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfSk7Ci0gIH07Ci0KLSAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2Ug
Y2FzZSBvZiBgZmluZGA6IGdldHRpbmcgdGhlIGZpcnN0IG9iamVjdAotICAvLyBjb250YWluaW5n
IHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLgotICBfLmZpbmRXaGVyZSA9IGZ1bmN0aW9uKG9i
aiwgYXR0cnMpIHsKLSAgICByZXR1cm4gXy53aGVyZShvYmosIGF0dHJzLCB0cnVlKTsKLSAgfTsK
LQotICAvLyBSZXR1cm4gdGhlIG1heGltdW0gZWxlbWVudCBvciAoZWxlbWVudC1iYXNlZCBjb21w
dXRhdGlvbikuCi0gIC8vIENhbid0IG9wdGltaXplIGFycmF5cyBvZiBpbnRlZ2VycyBsb25nZXIg
dGhhbiA2NSw1MzUgZWxlbWVudHMuCi0gIC8vIFNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgwNzk3Ci0gIF8ubWF4ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRvciwg
Y29udGV4dCkgewotICAgIGlmICghaXRlcmF0b3IgJiYgXy5pc0FycmF5KG9iaikgJiYgb2JqWzBd
ID09PSArb2JqWzBdICYmIG9iai5sZW5ndGggPCA2NTUzNSkgewotICAgICAgcmV0dXJuIE1hdGgu
bWF4LmFwcGx5KE1hdGgsIG9iaik7Ci0gICAgfQotICAgIGlmICghaXRlcmF0b3IgJiYgXy5pc0Vt
cHR5KG9iaikpIHJldHVybiAtSW5maW5pdHk7Ci0gICAgdmFyIHJlc3VsdCA9IHtjb21wdXRlZCA6
IC1JbmZpbml0eSwgdmFsdWU6IC1JbmZpbml0eX07Ci0gICAgZWFjaChvYmosIGZ1bmN0aW9uKHZh
bHVlLCBpbmRleCwgbGlzdCkgewotICAgICAgdmFyIGNvbXB1dGVkID0gaXRlcmF0b3IgPyBpdGVy
YXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdCkgOiB2YWx1ZTsKLSAgICAgIGNv
bXB1dGVkID49IHJlc3VsdC5jb21wdXRlZCAmJiAocmVzdWx0ID0ge3ZhbHVlIDogdmFsdWUsIGNv
bXB1dGVkIDogY29tcHV0ZWR9KTsKLSAgICB9KTsKLSAgICByZXR1cm4gcmVzdWx0LnZhbHVlOwot
ICB9OwotCi0gIC8vIFJldHVybiB0aGUgbWluaW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2Vk
IGNvbXB1dGF0aW9uKS4KLSAgXy5taW4gPSBmdW5jdGlvbihvYmosIGl0ZXJhdG9yLCBjb250ZXh0
KSB7Ci0gICAgaWYgKCFpdGVyYXRvciAmJiBfLmlzQXJyYXkob2JqKSAmJiBvYmpbMF0gPT09ICtv
YmpbMF0gJiYgb2JqLmxlbmd0aCA8IDY1NTM1KSB7Ci0gICAgICByZXR1cm4gTWF0aC5taW4uYXBw
bHkoTWF0aCwgb2JqKTsKLSAgICB9Ci0gICAgaWYgKCFpdGVyYXRvciAmJiBfLmlzRW1wdHkob2Jq
KSkgcmV0dXJuIEluZmluaXR5OwotICAgIHZhciByZXN1bHQgPSB7Y29tcHV0ZWQgOiBJbmZpbml0
eSwgdmFsdWU6IEluZmluaXR5fTsKLSAgICBlYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4
LCBsaXN0KSB7Ci0gICAgICB2YXIgY29tcHV0ZWQgPSBpdGVyYXRvciA/IGl0ZXJhdG9yLmNhbGwo
Y29udGV4dCwgdmFsdWUsIGluZGV4LCBsaXN0KSA6IHZhbHVlOwotICAgICAgY29tcHV0ZWQgPCBy
ZXN1bHQuY29tcHV0ZWQgJiYgKHJlc3VsdCA9IHt2YWx1ZSA6IHZhbHVlLCBjb21wdXRlZCA6IGNv
bXB1dGVkfSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHJlc3VsdC52YWx1ZTsKLSAgfTsKLQotICAv
LyBTaHVmZmxlIGFuIGFycmF5LgotICBfLnNodWZmbGUgPSBmdW5jdGlvbihvYmopIHsKLSAgICB2
YXIgcmFuZDsKLSAgICB2YXIgaW5kZXggPSAwOwotICAgIHZhciBzaHVmZmxlZCA9IFtdOwotICAg
IGVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSkgewotICAgICAgcmFuZCA9IF8ucmFuZG9tKGluZGV4
KyspOwotICAgICAgc2h1ZmZsZWRbaW5kZXggLSAxXSA9IHNodWZmbGVkW3JhbmRdOwotICAgICAg
c2h1ZmZsZWRbcmFuZF0gPSB2YWx1ZTsKLSAgICB9KTsKLSAgICByZXR1cm4gc2h1ZmZsZWQ7Ci0g
IH07Ci0KLSAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgbG9va3VwIGl0ZXJh
dG9ycy4KLSAgdmFyIGxvb2t1cEl0ZXJhdG9yID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgICByZXR1
cm4gXy5pc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVlIDogZnVuY3Rpb24ob2JqKXsgcmV0dXJuIG9i
alt2YWx1ZV07IH07Ci0gIH07Ci0KLSAgLy8gU29ydCB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEg
Y3JpdGVyaW9uIHByb2R1Y2VkIGJ5IGFuIGl0ZXJhdG9yLgotICBfLnNvcnRCeSA9IGZ1bmN0aW9u
KG9iaiwgdmFsdWUsIGNvbnRleHQpIHsKLSAgICB2YXIgaXRlcmF0b3IgPSBsb29rdXBJdGVyYXRv
cih2YWx1ZSk7Ci0gICAgcmV0dXJuIF8ucGx1Y2soXy5tYXAob2JqLCBmdW5jdGlvbih2YWx1ZSwg
aW5kZXgsIGxpc3QpIHsKLSAgICAgIHJldHVybiB7Ci0gICAgICAgIHZhbHVlIDogdmFsdWUsCi0g
ICAgICAgIGluZGV4IDogaW5kZXgsCi0gICAgICAgIGNyaXRlcmlhIDogaXRlcmF0b3IuY2FsbChj
b250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpCi0gICAgICB9OwotICAgIH0pLnNvcnQoZnVuY3Rp
b24obGVmdCwgcmlnaHQpIHsKLSAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYTsKLSAgICAgIHZh
ciBiID0gcmlnaHQuY3JpdGVyaWE7Ci0gICAgICBpZiAoYSAhPT0gYikgewotICAgICAgICBpZiAo
YSA+IGIgfHwgYSA9PT0gdm9pZCAwKSByZXR1cm4gMTsKLSAgICAgICAgaWYgKGEgPCBiIHx8IGIg
PT09IHZvaWQgMCkgcmV0dXJuIC0xOwotICAgICAgfQotICAgICAgcmV0dXJuIGxlZnQuaW5kZXgg
PCByaWdodC5pbmRleCA/IC0xIDogMTsKLSAgICB9KSwgJ3ZhbHVlJyk7Ci0gIH07Ci0KLSAgLy8g
QW4gaW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBmb3IgYWdncmVnYXRlICJncm91cCBieSIgb3BlcmF0
aW9ucy4KLSAgdmFyIGdyb3VwID0gZnVuY3Rpb24ob2JqLCB2YWx1ZSwgY29udGV4dCwgYmVoYXZp
b3IpIHsKLSAgICB2YXIgcmVzdWx0ID0ge307Ci0gICAgdmFyIGl0ZXJhdG9yID0gbG9va3VwSXRl
cmF0b3IodmFsdWUgfHwgXy5pZGVudGl0eSk7Ci0gICAgZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVl
LCBpbmRleCkgewotICAgICAgdmFyIGtleSA9IGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUs
IGluZGV4LCBvYmopOwotICAgICAgYmVoYXZpb3IocmVzdWx0LCBrZXksIHZhbHVlKTsKLSAgICB9
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9OwotCi0gIC8vIEdyb3VwcyB0aGUgb2JqZWN0J3Mg
dmFsdWVzIGJ5IGEgY3JpdGVyaW9uLiBQYXNzIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGUKLSAg
Ly8gdG8gZ3JvdXAgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjcml0ZXJpb24u
Ci0gIF8uZ3JvdXBCeSA9IGZ1bmN0aW9uKG9iaiwgdmFsdWUsIGNvbnRleHQpIHsKLSAgICByZXR1
cm4gZ3JvdXAob2JqLCB2YWx1ZSwgY29udGV4dCwgZnVuY3Rpb24ocmVzdWx0LCBrZXksIHZhbHVl
KSB7Ci0gICAgICAoXy5oYXMocmVzdWx0LCBrZXkpID8gcmVzdWx0W2tleV0gOiAocmVzdWx0W2tl
eV0gPSBbXSkpLnB1c2godmFsdWUpOwotICAgIH0pOwotICB9OwotCi0gIC8vIENvdW50cyBpbnN0
YW5jZXMgb2YgYW4gb2JqZWN0IHRoYXQgZ3JvdXAgYnkgYSBjZXJ0YWluIGNyaXRlcmlvbi4gUGFz
cwotICAvLyBlaXRoZXIgYSBzdHJpbmcgYXR0cmlidXRlIHRvIGNvdW50IGJ5LCBvciBhIGZ1bmN0
aW9uIHRoYXQgcmV0dXJucyB0aGUKLSAgLy8gY3JpdGVyaW9uLgotICBfLmNvdW50QnkgPSBmdW5j
dGlvbihvYmosIHZhbHVlLCBjb250ZXh0KSB7Ci0gICAgcmV0dXJuIGdyb3VwKG9iaiwgdmFsdWUs
IGNvbnRleHQsIGZ1bmN0aW9uKHJlc3VsdCwga2V5KSB7Ci0gICAgICBpZiAoIV8uaGFzKHJlc3Vs
dCwga2V5KSkgcmVzdWx0W2tleV0gPSAwOwotICAgICAgcmVzdWx0W2tleV0rKzsKLSAgICB9KTsK
LSAgfTsKLQotICAvLyBVc2UgYSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRvIGZpZ3VyZSBvdXQgdGhl
IHNtYWxsZXN0IGluZGV4IGF0IHdoaWNoCi0gIC8vIGFuIG9iamVjdCBzaG91bGQgYmUgaW5zZXJ0
ZWQgc28gYXMgdG8gbWFpbnRhaW4gb3JkZXIuIFVzZXMgYmluYXJ5IHNlYXJjaC4KLSAgXy5zb3J0
ZWRJbmRleCA9IGZ1bmN0aW9uKGFycmF5LCBvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7Ci0gICAg
aXRlcmF0b3IgPSBpdGVyYXRvciA9PSBudWxsID8gXy5pZGVudGl0eSA6IGxvb2t1cEl0ZXJhdG9y
KGl0ZXJhdG9yKTsKLSAgICB2YXIgdmFsdWUgPSBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9iaik7
Ci0gICAgdmFyIGxvdyA9IDAsIGhpZ2ggPSBhcnJheS5sZW5ndGg7Ci0gICAgd2hpbGUgKGxvdyA8
IGhpZ2gpIHsKLSAgICAgIHZhciBtaWQgPSAobG93ICsgaGlnaCkgPj4+IDE7Ci0gICAgICBpdGVy
YXRvci5jYWxsKGNvbnRleHQsIGFycmF5W21pZF0pIDwgdmFsdWUgPyBsb3cgPSBtaWQgKyAxIDog
aGlnaCA9IG1pZDsKLSAgICB9Ci0gICAgcmV0dXJuIGxvdzsKLSAgfTsKLQotICAvLyBTYWZlbHkg
Y29udmVydCBhbnl0aGluZyBpdGVyYWJsZSBpbnRvIGEgcmVhbCwgbGl2ZSBhcnJheS4KLSAgXy50
b0FycmF5ID0gZnVuY3Rpb24ob2JqKSB7Ci0gICAgaWYgKCFvYmopIHJldHVybiBbXTsKLSAgICBp
ZiAoXy5pc0FycmF5KG9iaikpIHJldHVybiBzbGljZS5jYWxsKG9iaik7Ci0gICAgaWYgKG9iai5s
ZW5ndGggPT09ICtvYmoubGVuZ3RoKSByZXR1cm4gXy5tYXAob2JqLCBfLmlkZW50aXR5KTsKLSAg
ICByZXR1cm4gXy52YWx1ZXMob2JqKTsKLSAgfTsKLQotICAvLyBSZXR1cm4gdGhlIG51bWJlciBv
ZiBlbGVtZW50cyBpbiBhbiBvYmplY3QuCi0gIF8uc2l6ZSA9IGZ1bmN0aW9uKG9iaikgewotICAg
IGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIChvYmoubGVuZ3RoID09PSAr
b2JqLmxlbmd0aCkgPyBvYmoubGVuZ3RoIDogXy5rZXlzKG9iaikubGVuZ3RoOwotICB9OwotCi0g
IC8vIEFycmF5IEZ1bmN0aW9ucwotICAvLyAtLS0tLS0tLS0tLS0tLS0KLQotICAvLyBHZXQgdGhl
IGZpcnN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhl
IGZpcnN0IE4KLSAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgaGVhZGAgYW5k
IGB0YWtlYC4gVGhlICoqZ3VhcmQqKiBjaGVjawotICAvLyBhbGxvd3MgaXQgdG8gd29yayB3aXRo
IGBfLm1hcGAuCi0gIF8uZmlyc3QgPSBfLmhlYWQgPSBfLnRha2UgPSBmdW5jdGlvbihhcnJheSwg
biwgZ3VhcmQpIHsKLSAgICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDsKLSAgICBy
ZXR1cm4gKG4gIT0gbnVsbCkgJiYgIWd1YXJkID8gc2xpY2UuY2FsbChhcnJheSwgMCwgbikgOiBh
cnJheVswXTsKLSAgfTsKLQotICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBsYXN0IGVu
dHJ5IG9mIHRoZSBhcnJheS4gRXNwZWNpYWxseSB1c2VmdWwgb24KLSAgLy8gdGhlIGFyZ3VtZW50
cyBvYmplY3QuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gYWxsIHRoZSB2YWx1ZXMgaW4KLSAg
Ly8gdGhlIGFycmF5LCBleGNsdWRpbmcgdGhlIGxhc3QgTi4gVGhlICoqZ3VhcmQqKiBjaGVjayBh
bGxvd3MgaXQgdG8gd29yayB3aXRoCi0gIC8vIGBfLm1hcGAuCi0gIF8uaW5pdGlhbCA9IGZ1bmN0
aW9uKGFycmF5LCBuLCBndWFyZCkgewotICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCAwLCBh
cnJheS5sZW5ndGggLSAoKG4gPT0gbnVsbCkgfHwgZ3VhcmQgPyAxIDogbikpOwotICB9OwotCi0g
IC8vIEdldCB0aGUgbGFzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwg
cmV0dXJuIHRoZSBsYXN0IE4KLSAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS4gVGhlICoqZ3VhcmQq
KiBjaGVjayBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBfLm1hcGAuCi0gIF8ubGFzdCA9IGZ1bmN0
aW9uKGFycmF5LCBuLCBndWFyZCkgewotICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gdm9p
ZCAwOwotICAgIGlmICgobiAhPSBudWxsKSAmJiAhZ3VhcmQpIHsKLSAgICAgIHJldHVybiBzbGlj
ZS5jYWxsKGFycmF5LCBNYXRoLm1heChhcnJheS5sZW5ndGggLSBuLCAwKSk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgIHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTsKLSAgICB9Ci0gIH07Ci0K
LSAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgZmlyc3QgZW50cnkgb2YgdGhlIGFycmF5
LiBBbGlhc2VkIGFzIGB0YWlsYCBhbmQgYGRyb3BgLgotICAvLyBFc3BlY2lhbGx5IHVzZWZ1bCBv
biB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyBhbiAqKm4qKiB3aWxsIHJldHVybgotICAv
LyB0aGUgcmVzdCBOIHZhbHVlcyBpbiB0aGUgYXJyYXkuIFRoZSAqKmd1YXJkKioKLSAgLy8gY2hl
Y2sgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLgotICBfLnJlc3QgPSBfLnRhaWwgPSBf
LmRyb3AgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHsKLSAgICByZXR1cm4gc2xpY2UuY2Fs
bChhcnJheSwgKG4gPT0gbnVsbCkgfHwgZ3VhcmQgPyAxIDogbik7Ci0gIH07Ci0KLSAgLy8gVHJp
bSBvdXQgYWxsIGZhbHN5IHZhbHVlcyBmcm9tIGFuIGFycmF5LgotICBfLmNvbXBhY3QgPSBmdW5j
dGlvbihhcnJheSkgewotICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgXy5pZGVudGl0eSk7Ci0g
IH07Ci0KLSAgLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgYSByZWN1cnNpdmUgYGZsYXR0
ZW5gIGZ1bmN0aW9uLgotICB2YXIgZmxhdHRlbiA9IGZ1bmN0aW9uKGlucHV0LCBzaGFsbG93LCBv
dXRwdXQpIHsKLSAgICBlYWNoKGlucHV0LCBmdW5jdGlvbih2YWx1ZSkgewotICAgICAgaWYgKF8u
aXNBcnJheSh2YWx1ZSkpIHsKLSAgICAgICAgc2hhbGxvdyA/IHB1c2guYXBwbHkob3V0cHV0LCB2
YWx1ZSkgOiBmbGF0dGVuKHZhbHVlLCBzaGFsbG93LCBvdXRwdXQpOwotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgb3V0cHV0LnB1c2godmFsdWUpOwotICAgICAgfQotICAgIH0pOwotICAgIHJldHVy
biBvdXRwdXQ7Ci0gIH07Ci0KLSAgLy8gUmV0dXJuIGEgY29tcGxldGVseSBmbGF0dGVuZWQgdmVy
c2lvbiBvZiBhbiBhcnJheS4KLSAgXy5mbGF0dGVuID0gZnVuY3Rpb24oYXJyYXksIHNoYWxsb3cp
IHsKLSAgICByZXR1cm4gZmxhdHRlbihhcnJheSwgc2hhbGxvdywgW10pOwotICB9OwotCi0gIC8v
IFJldHVybiBhIHZlcnNpb24gb2YgdGhlIGFycmF5IHRoYXQgZG9lcyBub3QgY29udGFpbiB0aGUg
c3BlY2lmaWVkIHZhbHVlKHMpLgotICBfLndpdGhvdXQgPSBmdW5jdGlvbihhcnJheSkgewotICAg
IHJldHVybiBfLmRpZmZlcmVuY2UoYXJyYXksIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7Ci0g
IH07Ci0KLSAgLy8gUHJvZHVjZSBhIGR1cGxpY2F0ZS1mcmVlIHZlcnNpb24gb2YgdGhlIGFycmF5
LiBJZiB0aGUgYXJyYXkgaGFzIGFscmVhZHkKLSAgLy8gYmVlbiBzb3J0ZWQsIHlvdSBoYXZlIHRo
ZSBvcHRpb24gb2YgdXNpbmcgYSBmYXN0ZXIgYWxnb3JpdGhtLgotICAvLyBBbGlhc2VkIGFzIGB1
bmlxdWVgLgotICBfLnVuaXEgPSBfLnVuaXF1ZSA9IGZ1bmN0aW9uKGFycmF5LCBpc1NvcnRlZCwg
aXRlcmF0b3IsIGNvbnRleHQpIHsKLSAgICBpZiAoXy5pc0Z1bmN0aW9uKGlzU29ydGVkKSkgewot
ICAgICAgY29udGV4dCA9IGl0ZXJhdG9yOwotICAgICAgaXRlcmF0b3IgPSBpc1NvcnRlZDsKLSAg
ICAgIGlzU29ydGVkID0gZmFsc2U7Ci0gICAgfQotICAgIHZhciBpbml0aWFsID0gaXRlcmF0b3Ig
PyBfLm1hcChhcnJheSwgaXRlcmF0b3IsIGNvbnRleHQpIDogYXJyYXk7Ci0gICAgdmFyIHJlc3Vs
dHMgPSBbXTsKLSAgICB2YXIgc2VlbiA9IFtdOwotICAgIGVhY2goaW5pdGlhbCwgZnVuY3Rpb24o
dmFsdWUsIGluZGV4KSB7Ci0gICAgICBpZiAoaXNTb3J0ZWQgPyAoIWluZGV4IHx8IHNlZW5bc2Vl
bi5sZW5ndGggLSAxXSAhPT0gdmFsdWUpIDogIV8uY29udGFpbnMoc2VlbiwgdmFsdWUpKSB7Ci0g
ICAgICAgIHNlZW4ucHVzaCh2YWx1ZSk7Ci0gICAgICAgIHJlc3VsdHMucHVzaChhcnJheVtpbmRl
eF0pOwotICAgICAgfQotICAgIH0pOwotICAgIHJldHVybiByZXN1bHRzOwotICB9OwotCi0gIC8v
IFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgdW5pb246IGVhY2ggZGlzdGluY3Qg
ZWxlbWVudCBmcm9tIGFsbCBvZgotICAvLyB0aGUgcGFzc2VkLWluIGFycmF5cy4KLSAgXy51bmlv
biA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBfLnVuaXEoY29uY2F0LmFwcGx5KEFycmF5UHJv
dG8sIGFyZ3VtZW50cykpOwotICB9OwotCi0gIC8vIFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250
YWlucyBldmVyeSBpdGVtIHNoYXJlZCBiZXR3ZWVuIGFsbCB0aGUKLSAgLy8gcGFzc2VkLWluIGFy
cmF5cy4KLSAgXy5pbnRlcnNlY3Rpb24gPSBmdW5jdGlvbihhcnJheSkgewotICAgIHZhciByZXN0
ID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOwotICAgIHJldHVybiBfLmZpbHRlcihfLnVuaXEo
YXJyYXkpLCBmdW5jdGlvbihpdGVtKSB7Ci0gICAgICByZXR1cm4gXy5ldmVyeShyZXN0LCBmdW5j
dGlvbihvdGhlcikgewotICAgICAgICByZXR1cm4gXy5pbmRleE9mKG90aGVyLCBpdGVtKSA+PSAw
OwotICAgICAgfSk7Ci0gICAgfSk7Ci0gIH07Ci0KLSAgLy8gVGFrZSB0aGUgZGlmZmVyZW5jZSBi
ZXR3ZWVuIG9uZSBhcnJheSBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgYXJyYXlzLgotICAvLyBPbmx5
IHRoZSBlbGVtZW50cyBwcmVzZW50IGluIGp1c3QgdGhlIGZpcnN0IGFycmF5IHdpbGwgcmVtYWlu
LgotICBfLmRpZmZlcmVuY2UgPSBmdW5jdGlvbihhcnJheSkgewotICAgIHZhciByZXN0ID0gY29u
Y2F0LmFwcGx5KEFycmF5UHJvdG8sIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7Ci0gICAgcmV0
dXJuIF8uZmlsdGVyKGFycmF5LCBmdW5jdGlvbih2YWx1ZSl7IHJldHVybiAhXy5jb250YWlucyhy
ZXN0LCB2YWx1ZSk7IH0pOwotICB9OwotCi0gIC8vIFppcCB0b2dldGhlciBtdWx0aXBsZSBsaXN0
cyBpbnRvIGEgc2luZ2xlIGFycmF5IC0tIGVsZW1lbnRzIHRoYXQgc2hhcmUKLSAgLy8gYW4gaW5k
ZXggZ28gdG9nZXRoZXIuCi0gIF8uemlwID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGFyZ3MgPSBz
bGljZS5jYWxsKGFyZ3VtZW50cyk7Ci0gICAgdmFyIGxlbmd0aCA9IF8ubWF4KF8ucGx1Y2soYXJn
cywgJ2xlbmd0aCcpKTsKLSAgICB2YXIgcmVzdWx0cyA9IG5ldyBBcnJheShsZW5ndGgpOwotICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgIHJlc3VsdHNbaV0gPSBf
LnBsdWNrKGFyZ3MsICIiICsgaSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHRzOwotICB9Owot
Ci0gIC8vIENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0cy4gUGFzcyBlaXRoZXIgYSBzaW5nbGUg
YXJyYXkgb2YgYFtrZXksIHZhbHVlXWAKLSAgLy8gcGFpcnMsIG9yIHR3byBwYXJhbGxlbCBhcnJh
eXMgb2YgdGhlIHNhbWUgbGVuZ3RoIC0tIG9uZSBvZiBrZXlzLCBhbmQgb25lIG9mCi0gIC8vIHRo
ZSBjb3JyZXNwb25kaW5nIHZhbHVlcy4KLSAgXy5vYmplY3QgPSBmdW5jdGlvbihsaXN0LCB2YWx1
ZXMpIHsKLSAgICBpZiAobGlzdCA9PSBudWxsKSByZXR1cm4ge307Ci0gICAgdmFyIHJlc3VsdCA9
IHt9OwotICAgIGZvciAodmFyIGkgPSAwLCBsID0gbGlzdC5sZW5ndGg7IGkgPCBsOyBpKyspIHsK
LSAgICAgIGlmICh2YWx1ZXMpIHsKLSAgICAgICAgcmVzdWx0W2xpc3RbaV1dID0gdmFsdWVzW2ld
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0W2xpc3RbaV1bMF1dID0gbGlzdFtpXVsx
XTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfTsKLQotICAvLyBJZiB0
aGUgYnJvd3NlciBkb2Vzbid0IHN1cHBseSB1cyB3aXRoIGluZGV4T2YgKEknbSBsb29raW5nIGF0
IHlvdSwgKipNU0lFKiopLAotICAvLyB3ZSBuZWVkIHRoaXMgZnVuY3Rpb24uIFJldHVybiB0aGUg
cG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW4KLSAgLy8gaXRlbSBpbiBhbiBh
cnJheSwgb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhcnJheS4KLSAg
Ly8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYGluZGV4T2ZgIGlmIGF2
YWlsYWJsZS4KLSAgLy8gSWYgdGhlIGFycmF5IGlzIGxhcmdlIGFuZCBhbHJlYWR5IGluIHNvcnQg
b3JkZXIsIHBhc3MgYHRydWVgCi0gIC8vIGZvciAqKmlzU29ydGVkKiogdG8gdXNlIGJpbmFyeSBz
ZWFyY2guCi0gIF8uaW5kZXhPZiA9IGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBpc1NvcnRlZCkgewot
ICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gLTE7Ci0gICAgdmFyIGkgPSAwLCBsID0gYXJy
YXkubGVuZ3RoOwotICAgIGlmIChpc1NvcnRlZCkgewotICAgICAgaWYgKHR5cGVvZiBpc1NvcnRl
ZCA9PSAnbnVtYmVyJykgewotICAgICAgICBpID0gKGlzU29ydGVkIDwgMCA/IE1hdGgubWF4KDAs
IGwgKyBpc1NvcnRlZCkgOiBpc1NvcnRlZCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpID0g
Xy5zb3J0ZWRJbmRleChhcnJheSwgaXRlbSk7Ci0gICAgICAgIHJldHVybiBhcnJheVtpXSA9PT0g
aXRlbSA/IGkgOiAtMTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG5hdGl2ZUluZGV4T2YgJiYg
YXJyYXkuaW5kZXhPZiA9PT0gbmF0aXZlSW5kZXhPZikgcmV0dXJuIGFycmF5LmluZGV4T2YoaXRl
bSwgaXNTb3J0ZWQpOwotICAgIGZvciAoOyBpIDwgbDsgaSsrKSBpZiAoYXJyYXlbaV0gPT09IGl0
ZW0pIHJldHVybiBpOwotICAgIHJldHVybiAtMTsKLSAgfTsKLQotICAvLyBEZWxlZ2F0ZXMgdG8g
KipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgbGFzdEluZGV4T2ZgIGlmIGF2YWlsYWJsZS4KLSAg
Xy5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBmcm9tKSB7Ci0gICAgaWYgKGFy
cmF5ID09IG51bGwpIHJldHVybiAtMTsKLSAgICB2YXIgaGFzSW5kZXggPSBmcm9tICE9IG51bGw7
Ci0gICAgaWYgKG5hdGl2ZUxhc3RJbmRleE9mICYmIGFycmF5Lmxhc3RJbmRleE9mID09PSBuYXRp
dmVMYXN0SW5kZXhPZikgewotICAgICAgcmV0dXJuIGhhc0luZGV4ID8gYXJyYXkubGFzdEluZGV4
T2YoaXRlbSwgZnJvbSkgOiBhcnJheS5sYXN0SW5kZXhPZihpdGVtKTsKLSAgICB9Ci0gICAgdmFy
IGkgPSAoaGFzSW5kZXggPyBmcm9tIDogYXJyYXkubGVuZ3RoKTsKLSAgICB3aGlsZSAoaS0tKSBp
ZiAoYXJyYXlbaV0gPT09IGl0ZW0pIHJldHVybiBpOwotICAgIHJldHVybiAtMTsKLSAgfTsKLQot
ICAvLyBHZW5lcmF0ZSBhbiBpbnRlZ2VyIEFycmF5IGNvbnRhaW5pbmcgYW4gYXJpdGhtZXRpYyBw
cm9ncmVzc2lvbi4gQSBwb3J0IG9mCi0gIC8vIHRoZSBuYXRpdmUgUHl0aG9uIGByYW5nZSgpYCBm
dW5jdGlvbi4gU2VlCi0gIC8vIFt0aGUgUHl0aG9uIGRvY3VtZW50YXRpb25dKGh0dHA6Ly9kb2Nz
LnB5dGhvbi5vcmcvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyYW5nZSkuCi0gIF8ucmFuZ2UgPSBm
dW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkgewotICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDw9
IDEpIHsKLSAgICAgIHN0b3AgPSBzdGFydCB8fCAwOwotICAgICAgc3RhcnQgPSAwOwotICAgIH0K
LSAgICBzdGVwID0gYXJndW1lbnRzWzJdIHx8IDE7Ci0KLSAgICB2YXIgbGVuID0gTWF0aC5tYXgo
TWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCksIDApOwotICAgIHZhciBpZHggPSAwOwot
ICAgIHZhciByYW5nZSA9IG5ldyBBcnJheShsZW4pOwotCi0gICAgd2hpbGUoaWR4IDwgbGVuKSB7
Ci0gICAgICByYW5nZVtpZHgrK10gPSBzdGFydDsKLSAgICAgIHN0YXJ0ICs9IHN0ZXA7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHJhbmdlOwotICB9OwotCi0gIC8vIEZ1bmN0aW9uIChhaGVtKSBGdW5j
dGlvbnMKLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gQ3JlYXRlIGEgZnVuY3Rpb24g
Ym91bmQgdG8gYSBnaXZlbiBvYmplY3QgKGFzc2lnbmluZyBgdGhpc2AsIGFuZCBhcmd1bWVudHMs
Ci0gIC8vIG9wdGlvbmFsbHkpLiBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2
ZSBgRnVuY3Rpb24uYmluZGAgaWYKLSAgLy8gYXZhaWxhYmxlLgotICBfLmJpbmQgPSBmdW5jdGlv
bihmdW5jLCBjb250ZXh0KSB7Ci0gICAgaWYgKGZ1bmMuYmluZCA9PT0gbmF0aXZlQmluZCAmJiBu
YXRpdmVCaW5kKSByZXR1cm4gbmF0aXZlQmluZC5hcHBseShmdW5jLCBzbGljZS5jYWxsKGFyZ3Vt
ZW50cywgMSkpOwotICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpOwotICAg
IHJldHVybiBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiBmdW5jLmFwcGx5KGNvbnRleHQsIGFy
Z3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkpOwotICAgIH07Ci0gIH07Ci0KLSAgLy8g
UGFydGlhbGx5IGFwcGx5IGEgZnVuY3Rpb24gYnkgY3JlYXRpbmcgYSB2ZXJzaW9uIHRoYXQgaGFz
IGhhZCBzb21lIG9mIGl0cwotICAvLyBhcmd1bWVudHMgcHJlLWZpbGxlZCwgd2l0aG91dCBjaGFu
Z2luZyBpdHMgZHluYW1pYyBgdGhpc2AgY29udGV4dC4KLSAgXy5wYXJ0aWFsID0gZnVuY3Rpb24o
ZnVuYykgewotICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOwotICAgIHJl
dHVybiBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MuY29u
Y2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkpOwotICAgIH07Ci0gIH07Ci0KLSAgLy8gQmluZCBh
bGwgb2YgYW4gb2JqZWN0J3MgbWV0aG9kcyB0byB0aGF0IG9iamVjdC4gVXNlZnVsIGZvciBlbnN1
cmluZyB0aGF0Ci0gIC8vIGFsbCBjYWxsYmFja3MgZGVmaW5lZCBvbiBhbiBvYmplY3QgYmVsb25n
IHRvIGl0LgotICBfLmJpbmRBbGwgPSBmdW5jdGlvbihvYmopIHsKLSAgICB2YXIgZnVuY3MgPSBz
bGljZS5jYWxsKGFyZ3VtZW50cywgMSk7Ci0gICAgaWYgKGZ1bmNzLmxlbmd0aCA9PT0gMCkgZnVu
Y3MgPSBfLmZ1bmN0aW9ucyhvYmopOwotICAgIGVhY2goZnVuY3MsIGZ1bmN0aW9uKGYpIHsgb2Jq
W2ZdID0gXy5iaW5kKG9ialtmXSwgb2JqKTsgfSk7Ci0gICAgcmV0dXJuIG9iajsKLSAgfTsKLQot
ICAvLyBNZW1vaXplIGFuIGV4cGVuc2l2ZSBmdW5jdGlvbiBieSBzdG9yaW5nIGl0cyByZXN1bHRz
LgotICBfLm1lbW9pemUgPSBmdW5jdGlvbihmdW5jLCBoYXNoZXIpIHsKLSAgICB2YXIgbWVtbyA9
IHt9OwotICAgIGhhc2hlciB8fCAoaGFzaGVyID0gXy5pZGVudGl0eSk7Ci0gICAgcmV0dXJuIGZ1
bmN0aW9uKCkgewotICAgICAgdmFyIGtleSA9IGhhc2hlci5hcHBseSh0aGlzLCBhcmd1bWVudHMp
OwotICAgICAgcmV0dXJuIF8uaGFzKG1lbW8sIGtleSkgPyBtZW1vW2tleV0gOiAobWVtb1trZXld
ID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTsKLSAgICB9OwotICB9OwotCi0gIC8vIERl
bGF5cyBhIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgYW5k
IHRoZW4gY2FsbHMKLSAgLy8gaXQgd2l0aCB0aGUgYXJndW1lbnRzIHN1cHBsaWVkLgotICBfLmRl
bGF5ID0gZnVuY3Rpb24oZnVuYywgd2FpdCkgewotICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChh
cmd1bWVudHMsIDIpOwotICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IHJldHVybiBm
dW5jLmFwcGx5KG51bGwsIGFyZ3MpOyB9LCB3YWl0KTsKLSAgfTsKLQotICAvLyBEZWZlcnMgYSBm
dW5jdGlvbiwgc2NoZWR1bGluZyBpdCB0byBydW4gYWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbCBzdGFj
ayBoYXMKLSAgLy8gY2xlYXJlZC4KLSAgXy5kZWZlciA9IGZ1bmN0aW9uKGZ1bmMpIHsKLSAgICBy
ZXR1cm4gXy5kZWxheS5hcHBseShfLCBbZnVuYywgMV0uY29uY2F0KHNsaWNlLmNhbGwoYXJndW1l
bnRzLCAxKSkpOwotICB9OwotCi0gIC8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgd2hlbiBp
bnZva2VkLCB3aWxsIG9ubHkgYmUgdHJpZ2dlcmVkIGF0IG1vc3Qgb25jZQotICAvLyBkdXJpbmcg
YSBnaXZlbiB3aW5kb3cgb2YgdGltZS4KLSAgXy50aHJvdHRsZSA9IGZ1bmN0aW9uKGZ1bmMsIHdh
aXQpIHsKLSAgICB2YXIgY29udGV4dCwgYXJncywgdGltZW91dCwgcmVzdWx0OwotICAgIHZhciBw
cmV2aW91cyA9IDA7Ci0gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7Ci0gICAgICBwcmV2aW91
cyA9IG5ldyBEYXRlOwotICAgICAgdGltZW91dCA9IG51bGw7Ci0gICAgICByZXN1bHQgPSBmdW5j
LmFwcGx5KGNvbnRleHQsIGFyZ3MpOwotICAgIH07Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCkgewot
ICAgICAgdmFyIG5vdyA9IG5ldyBEYXRlOwotICAgICAgdmFyIHJlbWFpbmluZyA9IHdhaXQgLSAo
bm93IC0gcHJldmlvdXMpOwotICAgICAgY29udGV4dCA9IHRoaXM7Ci0gICAgICBhcmdzID0gYXJn
dW1lbnRzOwotICAgICAgaWYgKHJlbWFpbmluZyA8PSAwKSB7Ci0gICAgICAgIGNsZWFyVGltZW91
dCh0aW1lb3V0KTsKLSAgICAgICAgdGltZW91dCA9IG51bGw7Ci0gICAgICAgIHByZXZpb3VzID0g
bm93OwotICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpOwotICAgICAg
fSBlbHNlIGlmICghdGltZW91dCkgewotICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRl
ciwgcmVtYWluaW5nKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfTsKLSAg
fTsKLQotICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIGFzIGxvbmcgYXMgaXQgY29udGlu
dWVzIHRvIGJlIGludm9rZWQsIHdpbGwgbm90Ci0gIC8vIGJlIHRyaWdnZXJlZC4gVGhlIGZ1bmN0
aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGl0IHN0b3BzIGJlaW5nIGNhbGxlZCBmb3IKLSAgLy8g
TiBtaWxsaXNlY29uZHMuIElmIGBpbW1lZGlhdGVgIGlzIHBhc3NlZCwgdHJpZ2dlciB0aGUgZnVu
Y3Rpb24gb24gdGhlCi0gIC8vIGxlYWRpbmcgZWRnZSwgaW5zdGVhZCBvZiB0aGUgdHJhaWxpbmcu
Ci0gIF8uZGVib3VuY2UgPSBmdW5jdGlvbihmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHsKLSAgICB2
YXIgdGltZW91dCwgcmVzdWx0OwotICAgIHJldHVybiBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBj
b250ZXh0ID0gdGhpcywgYXJncyA9IGFyZ3VtZW50czsKLSAgICAgIHZhciBsYXRlciA9IGZ1bmN0
aW9uKCkgewotICAgICAgICB0aW1lb3V0ID0gbnVsbDsKLSAgICAgICAgaWYgKCFpbW1lZGlhdGUp
IHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7Ci0gICAgICB9OwotICAgICAgdmFy
IGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7Ci0gICAgICBjbGVhclRpbWVvdXQodGlt
ZW91dCk7Ci0gICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7Ci0gICAgICBp
ZiAoY2FsbE5vdykgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTsKLSAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgfTsKLSAgfTsKLQotICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhh
dCB3aWxsIGJlIGV4ZWN1dGVkIGF0IG1vc3Qgb25lIHRpbWUsIG5vIG1hdHRlciBob3cKLSAgLy8g
b2Z0ZW4geW91IGNhbGwgaXQuIFVzZWZ1bCBmb3IgbGF6eSBpbml0aWFsaXphdGlvbi4KLSAgXy5v
bmNlID0gZnVuY3Rpb24oZnVuYykgewotICAgIHZhciByYW4gPSBmYWxzZSwgbWVtbzsKLSAgICBy
ZXR1cm4gZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAocmFuKSByZXR1cm4gbWVtbzsKLSAgICAgIHJh
biA9IHRydWU7Ci0gICAgICBtZW1vID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAg
ICAgZnVuYyA9IG51bGw7Ci0gICAgICByZXR1cm4gbWVtbzsKLSAgICB9OwotICB9OwotCi0gIC8v
IFJldHVybnMgdGhlIGZpcnN0IGZ1bmN0aW9uIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUg
c2Vjb25kLAotICAvLyBhbGxvd2luZyB5b3UgdG8gYWRqdXN0IGFyZ3VtZW50cywgcnVuIGNvZGUg
YmVmb3JlIGFuZCBhZnRlciwgYW5kCi0gIC8vIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZSB0aGUgb3Jp
Z2luYWwgZnVuY3Rpb24uCi0gIF8ud3JhcCA9IGZ1bmN0aW9uKGZ1bmMsIHdyYXBwZXIpIHsKLSAg
ICByZXR1cm4gZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgYXJncyA9IFtmdW5jXTsKLSAgICAgIHB1
c2guYXBwbHkoYXJncywgYXJndW1lbnRzKTsKLSAgICAgIHJldHVybiB3cmFwcGVyLmFwcGx5KHRo
aXMsIGFyZ3MpOwotICAgIH07Ci0gIH07Ci0KLSAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQg
aXMgdGhlIGNvbXBvc2l0aW9uIG9mIGEgbGlzdCBvZiBmdW5jdGlvbnMsIGVhY2gKLSAgLy8gY29u
c3VtaW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgZm9sbG93cy4KLSAg
Xy5jb21wb3NlID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGZ1bmNzID0gYXJndW1lbnRzOwotICAg
IHJldHVybiBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzOwotICAgICAg
Zm9yICh2YXIgaSA9IGZ1bmNzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgIGFy
Z3MgPSBbZnVuY3NbaV0uYXBwbHkodGhpcywgYXJncyldOwotICAgICAgfQotICAgICAgcmV0dXJu
IGFyZ3NbMF07Ci0gICAgfTsKLSAgfTsKLQotICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3
aWxsIG9ubHkgYmUgZXhlY3V0ZWQgYWZ0ZXIgYmVpbmcgY2FsbGVkIE4gdGltZXMuCi0gIF8uYWZ0
ZXIgPSBmdW5jdGlvbih0aW1lcywgZnVuYykgewotICAgIGlmICh0aW1lcyA8PSAwKSByZXR1cm4g
ZnVuYygpOwotICAgIHJldHVybiBmdW5jdGlvbigpIHsKLSAgICAgIGlmICgtLXRpbWVzIDwgMSkg
ewotICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgfQot
ICAgIH07Ci0gIH07Ci0KLSAgLy8gT2JqZWN0IEZ1bmN0aW9ucwotICAvLyAtLS0tLS0tLS0tLS0t
LS0tCi0KLSAgLy8gUmV0cmlldmUgdGhlIG5hbWVzIG9mIGFuIG9iamVjdCdzIHByb3BlcnRpZXMu
Ci0gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBPYmplY3Qua2V5
c2AKLSAgXy5rZXlzID0gbmF0aXZlS2V5cyB8fCBmdW5jdGlvbihvYmopIHsKLSAgICBpZiAob2Jq
ICE9PSBPYmplY3Qob2JqKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBvYmplY3QnKTsK
LSAgICB2YXIga2V5cyA9IFtdOwotICAgIGZvciAodmFyIGtleSBpbiBvYmopIGlmIChfLmhhcyhv
YmosIGtleSkpIGtleXNba2V5cy5sZW5ndGhdID0ga2V5OwotICAgIHJldHVybiBrZXlzOwotICB9
OwotCi0gIC8vIFJldHJpZXZlIHRoZSB2YWx1ZXMgb2YgYW4gb2JqZWN0J3MgcHJvcGVydGllcy4K
LSAgXy52YWx1ZXMgPSBmdW5jdGlvbihvYmopIHsKLSAgICB2YXIgdmFsdWVzID0gW107Ci0gICAg
Zm9yICh2YXIga2V5IGluIG9iaikgaWYgKF8uaGFzKG9iaiwga2V5KSkgdmFsdWVzLnB1c2gob2Jq
W2tleV0pOwotICAgIHJldHVybiB2YWx1ZXM7Ci0gIH07Ci0KLSAgLy8gQ29udmVydCBhbiBvYmpl
Y3QgaW50byBhIGxpc3Qgb2YgYFtrZXksIHZhbHVlXWAgcGFpcnMuCi0gIF8ucGFpcnMgPSBmdW5j
dGlvbihvYmopIHsKLSAgICB2YXIgcGFpcnMgPSBbXTsKLSAgICBmb3IgKHZhciBrZXkgaW4gb2Jq
KSBpZiAoXy5oYXMob2JqLCBrZXkpKSBwYWlycy5wdXNoKFtrZXksIG9ialtrZXldXSk7Ci0gICAg
cmV0dXJuIHBhaXJzOwotICB9OwotCi0gIC8vIEludmVydCB0aGUga2V5cyBhbmQgdmFsdWVzIG9m
IGFuIG9iamVjdC4gVGhlIHZhbHVlcyBtdXN0IGJlIHNlcmlhbGl6YWJsZS4KLSAgXy5pbnZlcnQg
PSBmdW5jdGlvbihvYmopIHsKLSAgICB2YXIgcmVzdWx0ID0ge307Ci0gICAgZm9yICh2YXIga2V5
IGluIG9iaikgaWYgKF8uaGFzKG9iaiwga2V5KSkgcmVzdWx0W29ialtrZXldXSA9IGtleTsKLSAg
ICByZXR1cm4gcmVzdWx0OwotICB9OwotCi0gIC8vIFJldHVybiBhIHNvcnRlZCBsaXN0IG9mIHRo
ZSBmdW5jdGlvbiBuYW1lcyBhdmFpbGFibGUgb24gdGhlIG9iamVjdC4KLSAgLy8gQWxpYXNlZCBh
cyBgbWV0aG9kc2AKLSAgXy5mdW5jdGlvbnMgPSBfLm1ldGhvZHMgPSBmdW5jdGlvbihvYmopIHsK
LSAgICB2YXIgbmFtZXMgPSBbXTsKLSAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7Ci0gICAgICBp
ZiAoXy5pc0Z1bmN0aW9uKG9ialtrZXldKSkgbmFtZXMucHVzaChrZXkpOwotICAgIH0KLSAgICBy
ZXR1cm4gbmFtZXMuc29ydCgpOwotICB9OwotCi0gIC8vIEV4dGVuZCBhIGdpdmVuIG9iamVjdCB3
aXRoIGFsbCB0aGUgcHJvcGVydGllcyBpbiBwYXNzZWQtaW4gb2JqZWN0KHMpLgotICBfLmV4dGVu
ZCA9IGZ1bmN0aW9uKG9iaikgewotICAgIGVhY2goc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLCBm
dW5jdGlvbihzb3VyY2UpIHsKLSAgICAgIGlmIChzb3VyY2UpIHsKLSAgICAgICAgZm9yICh2YXIg
cHJvcCBpbiBzb3VyY2UpIHsKLSAgICAgICAgICBvYmpbcHJvcF0gPSBzb3VyY2VbcHJvcF07Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgICByZXR1cm4gb2JqOwotICB9OwotCi0gIC8v
IFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCBvbmx5IGNvbnRhaW5pbmcgdGhlIHdoaXRlbGlz
dGVkIHByb3BlcnRpZXMuCi0gIF8ucGljayA9IGZ1bmN0aW9uKG9iaikgewotICAgIHZhciBjb3B5
ID0ge307Ci0gICAgdmFyIGtleXMgPSBjb25jYXQuYXBwbHkoQXJyYXlQcm90bywgc2xpY2UuY2Fs
bChhcmd1bWVudHMsIDEpKTsKLSAgICBlYWNoKGtleXMsIGZ1bmN0aW9uKGtleSkgewotICAgICAg
aWYgKGtleSBpbiBvYmopIGNvcHlba2V5XSA9IG9ialtrZXldOwotICAgIH0pOwotICAgIHJldHVy
biBjb3B5OwotICB9OwotCi0gICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3Qgd2l0aG91
dCB0aGUgYmxhY2tsaXN0ZWQgcHJvcGVydGllcy4KLSAgXy5vbWl0ID0gZnVuY3Rpb24ob2JqKSB7
Ci0gICAgdmFyIGNvcHkgPSB7fTsKLSAgICB2YXIga2V5cyA9IGNvbmNhdC5hcHBseShBcnJheVBy
b3RvLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpOwotICAgIGZvciAodmFyIGtleSBpbiBvYmop
IHsKLSAgICAgIGlmICghXy5jb250YWlucyhrZXlzLCBrZXkpKSBjb3B5W2tleV0gPSBvYmpba2V5
XTsKLSAgICB9Ci0gICAgcmV0dXJuIGNvcHk7Ci0gIH07Ci0KLSAgLy8gRmlsbCBpbiBhIGdpdmVu
IG9iamVjdCB3aXRoIGRlZmF1bHQgcHJvcGVydGllcy4KLSAgXy5kZWZhdWx0cyA9IGZ1bmN0aW9u
KG9iaikgewotICAgIGVhY2goc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLCBmdW5jdGlvbihzb3Vy
Y2UpIHsKLSAgICAgIGlmIChzb3VyY2UpIHsKLSAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBzb3Vy
Y2UpIHsKLSAgICAgICAgICBpZiAob2JqW3Byb3BdID09IG51bGwpIG9ialtwcm9wXSA9IHNvdXJj
ZVtwcm9wXTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICAgIHJldHVybiBvYmo7Ci0g
IH07Ci0KLSAgLy8gQ3JlYXRlIGEgKHNoYWxsb3ctY2xvbmVkKSBkdXBsaWNhdGUgb2YgYW4gb2Jq
ZWN0LgotICBfLmNsb25lID0gZnVuY3Rpb24ob2JqKSB7Ci0gICAgaWYgKCFfLmlzT2JqZWN0KG9i
aikpIHJldHVybiBvYmo7Ci0gICAgcmV0dXJuIF8uaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkg
OiBfLmV4dGVuZCh7fSwgb2JqKTsKLSAgfTsKLQotICAvLyBJbnZva2VzIGludGVyY2VwdG9yIHdp
dGggdGhlIG9iaiwgYW5kIHRoZW4gcmV0dXJucyBvYmouCi0gIC8vIFRoZSBwcmltYXJ5IHB1cnBv
c2Ugb2YgdGhpcyBtZXRob2QgaXMgdG8gInRhcCBpbnRvIiBhIG1ldGhvZCBjaGFpbiwgaW4KLSAg
Ly8gb3JkZXIgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIGludGVybWVkaWF0ZSByZXN1bHRzIHdp
dGhpbiB0aGUgY2hhaW4uCi0gIF8udGFwID0gZnVuY3Rpb24ob2JqLCBpbnRlcmNlcHRvcikgewot
ICAgIGludGVyY2VwdG9yKG9iaik7Ci0gICAgcmV0dXJuIG9iajsKLSAgfTsKLQotICAvLyBJbnRl
cm5hbCByZWN1cnNpdmUgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgYGlzRXF1YWxgLgotICB2YXIg
ZXEgPSBmdW5jdGlvbihhLCBiLCBhU3RhY2ssIGJTdGFjaykgewotICAgIC8vIElkZW50aWNhbCBv
YmplY3RzIGFyZSBlcXVhbC4gYDAgPT09IC0wYCwgYnV0IHRoZXkgYXJlbid0IGlkZW50aWNhbC4K
LSAgICAvLyBTZWUgdGhlIEhhcm1vbnkgYGVnYWxgIHByb3Bvc2FsOiBodHRwOi8vd2lraS5lY21h
c2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJtb255OmVnYWwuCi0gICAgaWYgKGEgPT09IGIpIHJl
dHVybiBhICE9PSAwIHx8IDEgLyBhID09IDEgLyBiOwotICAgIC8vIEEgc3RyaWN0IGNvbXBhcmlz
b24gaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYG51bGwgPT0gdW5kZWZpbmVkYC4KLSAgICBpZiAoYSA9
PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGEgPT09IGI7Ci0gICAgLy8gVW53cmFwIGFueSB3
cmFwcGVkIG9iamVjdHMuCi0gICAgaWYgKGEgaW5zdGFuY2VvZiBfKSBhID0gYS5fd3JhcHBlZDsK
LSAgICBpZiAoYiBpbnN0YW5jZW9mIF8pIGIgPSBiLl93cmFwcGVkOwotICAgIC8vIENvbXBhcmUg
YFtbQ2xhc3NdXWAgbmFtZXMuCi0gICAgdmFyIGNsYXNzTmFtZSA9IHRvU3RyaW5nLmNhbGwoYSk7
Ci0gICAgaWYgKGNsYXNzTmFtZSAhPSB0b1N0cmluZy5jYWxsKGIpKSByZXR1cm4gZmFsc2U7Ci0g
ICAgc3dpdGNoIChjbGFzc05hbWUpIHsKLSAgICAgIC8vIFN0cmluZ3MsIG51bWJlcnMsIGRhdGVz
LCBhbmQgYm9vbGVhbnMgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlLgotICAgICAgY2FzZSAnW29iamVj
dCBTdHJpbmddJzoKLSAgICAgICAgLy8gUHJpbWl0aXZlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGlu
ZyBvYmplY3Qgd3JhcHBlcnMgYXJlIGVxdWl2YWxlbnQ7IHRodXMsIGAiNSJgIGlzCi0gICAgICAg
IC8vIGVxdWl2YWxlbnQgdG8gYG5ldyBTdHJpbmcoIjUiKWAuCi0gICAgICAgIHJldHVybiBhID09
IFN0cmluZyhiKTsKLSAgICAgIGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6Ci0gICAgICAgIC8vIGBO
YU5gcyBhcmUgZXF1aXZhbGVudCwgYnV0IG5vbi1yZWZsZXhpdmUuIEFuIGBlZ2FsYCBjb21wYXJp
c29uIGlzIHBlcmZvcm1lZCBmb3IKLSAgICAgICAgLy8gb3RoZXIgbnVtZXJpYyB2YWx1ZXMuCi0g
ICAgICAgIHJldHVybiBhICE9ICthID8gYiAhPSArYiA6IChhID09IDAgPyAxIC8gYSA9PSAxIC8g
YiA6IGEgPT0gK2IpOwotICAgICAgY2FzZSAnW29iamVjdCBEYXRlXSc6Ci0gICAgICBjYXNlICdb
b2JqZWN0IEJvb2xlYW5dJzoKLSAgICAgICAgLy8gQ29lcmNlIGRhdGVzIGFuZCBib29sZWFucyB0
byBudW1lcmljIHByaW1pdGl2ZSB2YWx1ZXMuIERhdGVzIGFyZSBjb21wYXJlZCBieSB0aGVpcgot
ICAgICAgICAvLyBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnMuIE5vdGUgdGhhdCBpbnZhbGlk
IGRhdGVzIHdpdGggbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zCi0gICAgICAgIC8vIG9mIGBO
YU5gIGFyZSBub3QgZXF1aXZhbGVudC4KLSAgICAgICAgcmV0dXJuICthID09ICtiOwotICAgICAg
Ly8gUmVnRXhwcyBhcmUgY29tcGFyZWQgYnkgdGhlaXIgc291cmNlIHBhdHRlcm5zIGFuZCBmbGFn
cy4KLSAgICAgIGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6Ci0gICAgICAgIHJldHVybiBhLnNvdXJj
ZSA9PSBiLnNvdXJjZSAmJgotICAgICAgICAgICAgICAgYS5nbG9iYWwgPT0gYi5nbG9iYWwgJiYK
LSAgICAgICAgICAgICAgIGEubXVsdGlsaW5lID09IGIubXVsdGlsaW5lICYmCi0gICAgICAgICAg
ICAgICBhLmlnbm9yZUNhc2UgPT0gYi5pZ25vcmVDYXNlOwotICAgIH0KLSAgICBpZiAodHlwZW9m
IGEgIT0gJ29iamVjdCcgfHwgdHlwZW9mIGIgIT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTsKLSAg
ICAvLyBBc3N1bWUgZXF1YWxpdHkgZm9yIGN5Y2xpYyBzdHJ1Y3R1cmVzLiBUaGUgYWxnb3JpdGht
IGZvciBkZXRlY3RpbmcgY3ljbGljCi0gICAgLy8gc3RydWN0dXJlcyBpcyBhZGFwdGVkIGZyb20g
RVMgNS4xIHNlY3Rpb24gMTUuMTIuMywgYWJzdHJhY3Qgb3BlcmF0aW9uIGBKT2AuCi0gICAgdmFy
IGxlbmd0aCA9IGFTdGFjay5sZW5ndGg7Ci0gICAgd2hpbGUgKGxlbmd0aC0tKSB7Ci0gICAgICAv
LyBMaW5lYXIgc2VhcmNoLiBQZXJmb3JtYW5jZSBpcyBpbnZlcnNlbHkgcHJvcG9ydGlvbmFsIHRv
IHRoZSBudW1iZXIgb2YKLSAgICAgIC8vIHVuaXF1ZSBuZXN0ZWQgc3RydWN0dXJlcy4KLSAgICAg
IGlmIChhU3RhY2tbbGVuZ3RoXSA9PSBhKSByZXR1cm4gYlN0YWNrW2xlbmd0aF0gPT0gYjsKLSAg
ICB9Ci0gICAgLy8gQWRkIHRoZSBmaXJzdCBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNl
ZCBvYmplY3RzLgotICAgIGFTdGFjay5wdXNoKGEpOwotICAgIGJTdGFjay5wdXNoKGIpOwotICAg
IHZhciBzaXplID0gMCwgcmVzdWx0ID0gdHJ1ZTsKLSAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJl
IG9iamVjdHMgYW5kIGFycmF5cy4KLSAgICBpZiAoY2xhc3NOYW1lID09ICdbb2JqZWN0IEFycmF5
XScpIHsKLSAgICAgIC8vIENvbXBhcmUgYXJyYXkgbGVuZ3RocyB0byBkZXRlcm1pbmUgaWYgYSBk
ZWVwIGNvbXBhcmlzb24gaXMgbmVjZXNzYXJ5LgotICAgICAgc2l6ZSA9IGEubGVuZ3RoOwotICAg
ICAgcmVzdWx0ID0gc2l6ZSA9PSBiLmxlbmd0aDsKLSAgICAgIGlmIChyZXN1bHQpIHsKLSAgICAg
ICAgLy8gRGVlcCBjb21wYXJlIHRoZSBjb250ZW50cywgaWdub3Jpbmcgbm9uLW51bWVyaWMgcHJv
cGVydGllcy4KLSAgICAgICAgd2hpbGUgKHNpemUtLSkgewotICAgICAgICAgIGlmICghKHJlc3Vs
dCA9IGVxKGFbc2l6ZV0sIGJbc2l6ZV0sIGFTdGFjaywgYlN0YWNrKSkpIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIE9iamVjdHMgd2l0aCBkaWZmZXJl
bnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1aXZhbGVudCwgYnV0IGBPYmplY3RgcwotICAgICAg
Ly8gZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFyZS4KLSAgICAgIHZhciBhQ3RvciA9IGEuY29uc3Ry
dWN0b3IsIGJDdG9yID0gYi5jb25zdHJ1Y3RvcjsKLSAgICAgIGlmIChhQ3RvciAhPT0gYkN0b3Ig
JiYgIShfLmlzRnVuY3Rpb24oYUN0b3IpICYmIChhQ3RvciBpbnN0YW5jZW9mIGFDdG9yKSAmJgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uaXNGdW5jdGlvbihiQ3RvcikgJiYgKGJD
dG9yIGluc3RhbmNlb2YgYkN0b3IpKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9
Ci0gICAgICAvLyBEZWVwIGNvbXBhcmUgb2JqZWN0cy4KLSAgICAgIGZvciAodmFyIGtleSBpbiBh
KSB7Ci0gICAgICAgIGlmIChfLmhhcyhhLCBrZXkpKSB7Ci0gICAgICAgICAgLy8gQ291bnQgdGhl
IGV4cGVjdGVkIG51bWJlciBvZiBwcm9wZXJ0aWVzLgotICAgICAgICAgIHNpemUrKzsKLSAgICAg
ICAgICAvLyBEZWVwIGNvbXBhcmUgZWFjaCBtZW1iZXIuCi0gICAgICAgICAgaWYgKCEocmVzdWx0
ID0gXy5oYXMoYiwga2V5KSAmJiBlcShhW2tleV0sIGJba2V5XSwgYVN0YWNrLCBiU3RhY2spKSkg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIEVuc3VyZSB0aGF0IGJvdGggb2Jq
ZWN0cyBjb250YWluIHRoZSBzYW1lIG51bWJlciBvZiBwcm9wZXJ0aWVzLgotICAgICAgaWYgKHJl
c3VsdCkgewotICAgICAgICBmb3IgKGtleSBpbiBiKSB7Ci0gICAgICAgICAgaWYgKF8uaGFzKGIs
IGtleSkgJiYgIShzaXplLS0pKSBicmVhazsKLSAgICAgICAgfQotICAgICAgICByZXN1bHQgPSAh
c2l6ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gUmVtb3ZlIHRoZSBmaXJzdCBvYmplY3QgZnJv
bSB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuCi0gICAgYVN0YWNrLnBvcCgpOwotICAg
IGJTdGFjay5wb3AoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9OwotCi0gIC8vIFBlcmZvcm0g
YSBkZWVwIGNvbXBhcmlzb24gdG8gY2hlY2sgaWYgdHdvIG9iamVjdHMgYXJlIGVxdWFsLgotICBf
LmlzRXF1YWwgPSBmdW5jdGlvbihhLCBiKSB7Ci0gICAgcmV0dXJuIGVxKGEsIGIsIFtdLCBbXSk7
Ci0gIH07Ci0KLSAgLy8gSXMgYSBnaXZlbiBhcnJheSwgc3RyaW5nLCBvciBvYmplY3QgZW1wdHk/
Ci0gIC8vIEFuICJlbXB0eSIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9wZXJ0aWVz
LgotICBfLmlzRW1wdHkgPSBmdW5jdGlvbihvYmopIHsKLSAgICBpZiAob2JqID09IG51bGwpIHJl
dHVybiB0cnVlOwotICAgIGlmIChfLmlzQXJyYXkob2JqKSB8fCBfLmlzU3RyaW5nKG9iaikpIHJl
dHVybiBvYmoubGVuZ3RoID09PSAwOwotICAgIGZvciAodmFyIGtleSBpbiBvYmopIGlmIChfLmhh
cyhvYmosIGtleSkpIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfTsKLQotICAv
LyBJcyBhIGdpdmVuIHZhbHVlIGEgRE9NIGVsZW1lbnQ/Ci0gIF8uaXNFbGVtZW50ID0gZnVuY3Rp
b24ob2JqKSB7Ci0gICAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09IDEpOwotICB9
OwotCi0gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYW4gYXJyYXk/Ci0gIC8vIERlbGVnYXRlcyB0byBF
Q01BNSdzIG5hdGl2ZSBBcnJheS5pc0FycmF5Ci0gIF8uaXNBcnJheSA9IG5hdGl2ZUlzQXJyYXkg
fHwgZnVuY3Rpb24ob2JqKSB7Ci0gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PSAnW29i
amVjdCBBcnJheV0nOwotICB9OwotCi0gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgYW4gb2JqZWN0
PwotICBfLmlzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7Ci0gICAgcmV0dXJuIG9iaiA9PT0gT2Jq
ZWN0KG9iaik7Ci0gIH07Ci0KLSAgLy8gQWRkIHNvbWUgaXNUeXBlIG1ldGhvZHM6IGlzQXJndW1l
bnRzLCBpc0Z1bmN0aW9uLCBpc1N0cmluZywgaXNOdW1iZXIsIGlzRGF0ZSwgaXNSZWdFeHAuCi0g
IGVhY2goWydBcmd1bWVudHMnLCAnRnVuY3Rpb24nLCAnU3RyaW5nJywgJ051bWJlcicsICdEYXRl
JywgJ1JlZ0V4cCddLCBmdW5jdGlvbihuYW1lKSB7Ci0gICAgX1snaXMnICsgbmFtZV0gPSBmdW5j
dGlvbihvYmopIHsKLSAgICAgIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT0gJ1tvYmplY3Qg
JyArIG5hbWUgKyAnXSc7Ci0gICAgfTsKLSAgfSk7Ci0KLSAgLy8gRGVmaW5lIGEgZmFsbGJhY2sg
dmVyc2lvbiBvZiB0aGUgbWV0aG9kIGluIGJyb3dzZXJzIChhaGVtLCBJRSksIHdoZXJlCi0gIC8v
IHRoZXJlIGlzbid0IGFueSBpbnNwZWN0YWJsZSAiQXJndW1lbnRzIiB0eXBlLgotICBpZiAoIV8u
aXNBcmd1bWVudHMoYXJndW1lbnRzKSkgewotICAgIF8uaXNBcmd1bWVudHMgPSBmdW5jdGlvbihv
YmopIHsKLSAgICAgIHJldHVybiAhIShvYmogJiYgXy5oYXMob2JqLCAnY2FsbGVlJykpOwotICAg
IH07Ci0gIH0KLQotICAvLyBPcHRpbWl6ZSBgaXNGdW5jdGlvbmAgaWYgYXBwcm9wcmlhdGUuCi0g
IGlmICh0eXBlb2YgKC8uLykgIT09ICdmdW5jdGlvbicpIHsKLSAgICBfLmlzRnVuY3Rpb24gPSBm
dW5jdGlvbihvYmopIHsKLSAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nOwot
ICAgIH07Ci0gIH0KLQotICAvLyBJcyBhIGdpdmVuIG9iamVjdCBhIGZpbml0ZSBudW1iZXI/Ci0g
IF8uaXNGaW5pdGUgPSBmdW5jdGlvbihvYmopIHsKLSAgICByZXR1cm4gaXNGaW5pdGUob2JqKSAm
JiAhaXNOYU4ocGFyc2VGbG9hdChvYmopKTsKLSAgfTsKLQotICAvLyBJcyB0aGUgZ2l2ZW4gdmFs
dWUgYE5hTmA/IChOYU4gaXMgdGhlIG9ubHkgbnVtYmVyIHdoaWNoIGRvZXMgbm90IGVxdWFsIGl0
c2VsZikuCi0gIF8uaXNOYU4gPSBmdW5jdGlvbihvYmopIHsKLSAgICByZXR1cm4gXy5pc051bWJl
cihvYmopICYmIG9iaiAhPSArb2JqOwotICB9OwotCi0gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBi
b29sZWFuPwotICBfLmlzQm9vbGVhbiA9IGZ1bmN0aW9uKG9iaikgewotICAgIHJldHVybiBvYmog
PT09IHRydWUgfHwgb2JqID09PSBmYWxzZSB8fCB0b1N0cmluZy5jYWxsKG9iaikgPT0gJ1tvYmpl
Y3QgQm9vbGVhbl0nOwotICB9OwotCi0gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgZXF1YWwgdG8gbnVs
bD8KLSAgXy5pc051bGwgPSBmdW5jdGlvbihvYmopIHsKLSAgICByZXR1cm4gb2JqID09PSBudWxs
OwotICB9OwotCi0gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgdW5kZWZpbmVkPwotICBfLmlzVW5k
ZWZpbmVkID0gZnVuY3Rpb24ob2JqKSB7Ci0gICAgcmV0dXJuIG9iaiA9PT0gdm9pZCAwOwotICB9
OwotCi0gIC8vIFNob3J0Y3V0IGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhbiBvYmplY3QgaGFz
IGEgZ2l2ZW4gcHJvcGVydHkgZGlyZWN0bHkKLSAgLy8gb24gaXRzZWxmIChpbiBvdGhlciB3b3Jk
cywgbm90IG9uIGEgcHJvdG90eXBlKS4KLSAgXy5oYXMgPSBmdW5jdGlvbihvYmosIGtleSkgewot
ICAgIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTsKLSAgfTsKLQotICAvLyBV
dGlsaXR5IEZ1bmN0aW9ucwotICAvLyAtLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8vIFJ1biBVbmRl
cnNjb3JlLmpzIGluICpub0NvbmZsaWN0KiBtb2RlLCByZXR1cm5pbmcgdGhlIGBfYCB2YXJpYWJs
ZSB0byBpdHMKLSAgLy8gcHJldmlvdXMgb3duZXIuIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhl
IFVuZGVyc2NvcmUgb2JqZWN0LgotICBfLm5vQ29uZmxpY3QgPSBmdW5jdGlvbigpIHsKLSAgICBy
b290Ll8gPSBwcmV2aW91c1VuZGVyc2NvcmU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH07Ci0KLSAg
Ly8gS2VlcCB0aGUgaWRlbnRpdHkgZnVuY3Rpb24gYXJvdW5kIGZvciBkZWZhdWx0IGl0ZXJhdG9y
cy4KLSAgXy5pZGVudGl0eSA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgcmV0dXJuIHZhbHVlOwot
ICB9OwotCi0gIC8vIFJ1biBhIGZ1bmN0aW9uICoqbioqIHRpbWVzLgotICBfLnRpbWVzID0gZnVu
Y3Rpb24obiwgaXRlcmF0b3IsIGNvbnRleHQpIHsKLSAgICB2YXIgYWNjdW0gPSBBcnJheShuKTsK
LSAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgYWNjdW1baV0gPSBpdGVyYXRvci5jYWxs
KGNvbnRleHQsIGkpOwotICAgIHJldHVybiBhY2N1bTsKLSAgfTsKLQotICAvLyBSZXR1cm4gYSBy
YW5kb20gaW50ZWdlciBiZXR3ZWVuIG1pbiBhbmQgbWF4IChpbmNsdXNpdmUpLgotICBfLnJhbmRv
bSA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7Ci0gICAgaWYgKG1heCA9PSBudWxsKSB7Ci0gICAgICBt
YXggPSBtaW47Ci0gICAgICBtaW4gPSAwOwotICAgIH0KLSAgICByZXR1cm4gbWluICsgTWF0aC5m
bG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKTsKLSAgfTsKLQotICAvLyBMaXN0
IG9mIEhUTUwgZW50aXRpZXMgZm9yIGVzY2FwaW5nLgotICB2YXIgZW50aXR5TWFwID0gewotICAg
IGVzY2FwZTogewotICAgICAgJyYnOiAnJmFtcDsnLAotICAgICAgJzwnOiAnJmx0OycsCi0gICAg
ICAnPic6ICcmZ3Q7JywKLSAgICAgICciJzogJyZxdW90OycsCi0gICAgICAiJyI6ICcmI3gyNzsn
LAotICAgICAgJy8nOiAnJiN4MkY7JwotICAgIH0KLSAgfTsKLSAgZW50aXR5TWFwLnVuZXNjYXBl
ID0gXy5pbnZlcnQoZW50aXR5TWFwLmVzY2FwZSk7Ci0KLSAgLy8gUmVnZXhlcyBjb250YWluaW5n
IHRoZSBrZXlzIGFuZCB2YWx1ZXMgbGlzdGVkIGltbWVkaWF0ZWx5IGFib3ZlLgotICB2YXIgZW50
aXR5UmVnZXhlcyA9IHsKLSAgICBlc2NhcGU6ICAgbmV3IFJlZ0V4cCgnWycgKyBfLmtleXMoZW50
aXR5TWFwLmVzY2FwZSkuam9pbignJykgKyAnXScsICdnJyksCi0gICAgdW5lc2NhcGU6IG5ldyBS
ZWdFeHAoJygnICsgXy5rZXlzKGVudGl0eU1hcC51bmVzY2FwZSkuam9pbignfCcpICsgJyknLCAn
ZycpCi0gIH07Ci0KLSAgLy8gRnVuY3Rpb25zIGZvciBlc2NhcGluZyBhbmQgdW5lc2NhcGluZyBz
dHJpbmdzIHRvL2Zyb20gSFRNTCBpbnRlcnBvbGF0aW9uLgotICBfLmVhY2goWydlc2NhcGUnLCAn
dW5lc2NhcGUnXSwgZnVuY3Rpb24obWV0aG9kKSB7Ci0gICAgX1ttZXRob2RdID0gZnVuY3Rpb24o
c3RyaW5nKSB7Ci0gICAgICBpZiAoc3RyaW5nID09IG51bGwpIHJldHVybiAnJzsKLSAgICAgIHJl
dHVybiAoJycgKyBzdHJpbmcpLnJlcGxhY2UoZW50aXR5UmVnZXhlc1ttZXRob2RdLCBmdW5jdGlv
bihtYXRjaCkgewotICAgICAgICByZXR1cm4gZW50aXR5TWFwW21ldGhvZF1bbWF0Y2hdOwotICAg
ICAgfSk7Ci0gICAgfTsKLSAgfSk7Ci0KLSAgLy8gSWYgdGhlIHZhbHVlIG9mIHRoZSBuYW1lZCBw
cm9wZXJ0eSBpcyBhIGZ1bmN0aW9uIHRoZW4gaW52b2tlIGl0OwotICAvLyBvdGhlcndpc2UsIHJl
dHVybiBpdC4KLSAgXy5yZXN1bHQgPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7Ci0gICAg
aWYgKG9iamVjdCA9PSBudWxsKSByZXR1cm4gbnVsbDsKLSAgICB2YXIgdmFsdWUgPSBvYmplY3Rb
cHJvcGVydHldOwotICAgIHJldHVybiBfLmlzRnVuY3Rpb24odmFsdWUpID8gdmFsdWUuY2FsbChv
YmplY3QpIDogdmFsdWU7Ci0gIH07Ci0KLSAgLy8gQWRkIHlvdXIgb3duIGN1c3RvbSBmdW5jdGlv
bnMgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LgotICBfLm1peGluID0gZnVuY3Rpb24ob2JqKSB7
Ci0gICAgZWFjaChfLmZ1bmN0aW9ucyhvYmopLCBmdW5jdGlvbihuYW1lKXsKLSAgICAgIHZhciBm
dW5jID0gX1tuYW1lXSA9IG9ialtuYW1lXTsKLSAgICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVu
Y3Rpb24oKSB7Ci0gICAgICAgIHZhciBhcmdzID0gW3RoaXMuX3dyYXBwZWRdOwotICAgICAgICBw
dXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7Ci0gICAgICAgIHJldHVybiByZXN1bHQuY2FsbCh0
aGlzLCBmdW5jLmFwcGx5KF8sIGFyZ3MpKTsKLSAgICAgIH07Ci0gICAgfSk7Ci0gIH07Ci0KLSAg
Ly8gR2VuZXJhdGUgYSB1bmlxdWUgaW50ZWdlciBpZCAodW5pcXVlIHdpdGhpbiB0aGUgZW50aXJl
IGNsaWVudCBzZXNzaW9uKS4KLSAgLy8gVXNlZnVsIGZvciB0ZW1wb3JhcnkgRE9NIGlkcy4KLSAg
dmFyIGlkQ291bnRlciA9IDA7Ci0gIF8udW5pcXVlSWQgPSBmdW5jdGlvbihwcmVmaXgpIHsKLSAg
ICB2YXIgaWQgPSArK2lkQ291bnRlciArICcnOwotICAgIHJldHVybiBwcmVmaXggPyBwcmVmaXgg
KyBpZCA6IGlkOwotICB9OwotCi0gIC8vIEJ5IGRlZmF1bHQsIFVuZGVyc2NvcmUgdXNlcyBFUkIt
c3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycywgY2hhbmdlIHRoZQotICAvLyBmb2xsb3dpbmcgdGVt
cGxhdGUgc2V0dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMuCi0gIF8udGVtcGxh
dGVTZXR0aW5ncyA9IHsKLSAgICBldmFsdWF0ZSAgICA6IC88JShbXHNcU10rPyklPi9nLAotICAg
IGludGVycG9sYXRlIDogLzwlPShbXHNcU10rPyklPi9nLAotICAgIGVzY2FwZSAgICAgIDogLzwl
LShbXHNcU10rPyklPi9nCi0gIH07Ci0KLSAgLy8gV2hlbiBjdXN0b21pemluZyBgdGVtcGxhdGVT
ZXR0aW5nc2AsIGlmIHlvdSBkb24ndCB3YW50IHRvIGRlZmluZSBhbgotICAvLyBpbnRlcnBvbGF0
aW9uLCBldmFsdWF0aW9uIG9yIGVzY2FwaW5nIHJlZ2V4LCB3ZSBuZWVkIG9uZSB0aGF0IGlzCi0g
IC8vIGd1YXJhbnRlZWQgbm90IHRvIG1hdGNoLgotICB2YXIgbm9NYXRjaCA9IC8oLileLzsKLQot
ICAvLyBDZXJ0YWluIGNoYXJhY3RlcnMgbmVlZCB0byBiZSBlc2NhcGVkIHNvIHRoYXQgdGhleSBj
YW4gYmUgcHV0IGludG8gYQotICAvLyBzdHJpbmcgbGl0ZXJhbC4KLSAgdmFyIGVzY2FwZXMgPSB7
Ci0gICAgIiciOiAgICAgICInIiwKLSAgICAnXFwnOiAgICAgJ1xcJywKLSAgICAnXHInOiAgICAg
J3InLAotICAgICdcbic6ICAgICAnbicsCi0gICAgJ1x0JzogICAgICd0JywKLSAgICAnXHUyMDI4
JzogJ3UyMDI4JywKLSAgICAnXHUyMDI5JzogJ3UyMDI5JwotICB9OwotCi0gIHZhciBlc2NhcGVy
ID0gL1xcfCd8XHJ8XG58XHR8XHUyMDI4fFx1MjAyOS9nOwotCi0gIC8vIEphdmFTY3JpcHQgbWlj
cm8tdGVtcGxhdGluZywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uCi0g
IC8vIFVuZGVyc2NvcmUgdGVtcGxhdGluZyBoYW5kbGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBw
cmVzZXJ2ZXMgd2hpdGVzcGFjZSwKLSAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3
aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUuCi0gIF8udGVtcGxhdGUgPSBmdW5jdGlvbih0ZXh0LCBk
YXRhLCBzZXR0aW5ncykgewotICAgIHZhciByZW5kZXI7Ci0gICAgc2V0dGluZ3MgPSBfLmRlZmF1
bHRzKHt9LCBzZXR0aW5ncywgXy50ZW1wbGF0ZVNldHRpbmdzKTsKLQotICAgIC8vIENvbWJpbmUg
ZGVsaW1pdGVycyBpbnRvIG9uZSByZWd1bGFyIGV4cHJlc3Npb24gdmlhIGFsdGVybmF0aW9uLgot
ICAgIHZhciBtYXRjaGVyID0gbmV3IFJlZ0V4cChbCi0gICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8
IG5vTWF0Y2gpLnNvdXJjZSwKLSAgICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNo
KS5zb3VyY2UsCi0gICAgICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlCi0g
ICAgXS5qb2luKCd8JykgKyAnfCQnLCAnZycpOwotCi0gICAgLy8gQ29tcGlsZSB0aGUgdGVtcGxh
dGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS4KLSAgICB2
YXIgaW5kZXggPSAwOwotICAgIHZhciBzb3VyY2UgPSAiX19wKz0nIjsKLSAgICB0ZXh0LnJlcGxh
Y2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRl
LCBvZmZzZXQpIHsKLSAgICAgIHNvdXJjZSArPSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpCi0g
ICAgICAgIC5yZXBsYWNlKGVzY2FwZXIsIGZ1bmN0aW9uKG1hdGNoKSB7IHJldHVybiAnXFwnICsg
ZXNjYXBlc1ttYXRjaF07IH0pOwotCi0gICAgICBpZiAoZXNjYXBlKSB7Ci0gICAgICAgIHNvdXJj
ZSArPSAiJytcbigoX190PSgiICsgZXNjYXBlICsgIikpPT1udWxsPycnOl8uZXNjYXBlKF9fdCkp
K1xuJyI7Ci0gICAgICB9Ci0gICAgICBpZiAoaW50ZXJwb2xhdGUpIHsKLSAgICAgICAgc291cmNl
ICs9ICInK1xuKChfX3Q9KCIgKyBpbnRlcnBvbGF0ZSArICIpKT09bnVsbD8nJzpfX3QpK1xuJyI7
Ci0gICAgICB9Ci0gICAgICBpZiAoZXZhbHVhdGUpIHsKLSAgICAgICAgc291cmNlICs9ICInO1xu
IiArIGV2YWx1YXRlICsgIlxuX19wKz0nIjsKLSAgICAgIH0KLSAgICAgIGluZGV4ID0gb2Zmc2V0
ICsgbWF0Y2gubGVuZ3RoOwotICAgICAgcmV0dXJuIG1hdGNoOwotICAgIH0pOwotICAgIHNvdXJj
ZSArPSAiJztcbiI7Ci0KLSAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBs
YWNlIGRhdGEgdmFsdWVzIGluIGxvY2FsIHNjb3BlLgotICAgIGlmICghc2V0dGluZ3MudmFyaWFi
bGUpIHNvdXJjZSA9ICd3aXRoKG9ianx8e30pe1xuJyArIHNvdXJjZSArICd9XG4nOwotCi0gICAg
c291cmNlID0gInZhciBfX3QsX19wPScnLF9faj1BcnJheS5wcm90b3R5cGUuam9pbiwiICsKLSAg
ICAgICJwcmludD1mdW5jdGlvbigpe19fcCs9X19qLmNhbGwoYXJndW1lbnRzLCcnKTt9O1xuIiAr
Ci0gICAgICBzb3VyY2UgKyAicmV0dXJuIF9fcDtcbiI7Ci0KLSAgICB0cnkgewotICAgICAgcmVu
ZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJj
ZSk7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7Ci0gICAgICB0
aHJvdyBlOwotICAgIH0KLQotICAgIGlmIChkYXRhKSByZXR1cm4gcmVuZGVyKGRhdGEsIF8pOwot
ICAgIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHsKLSAgICAgIHJldHVybiByZW5kZXIu
Y2FsbCh0aGlzLCBkYXRhLCBfKTsKLSAgICB9OwotCi0gICAgLy8gUHJvdmlkZSB0aGUgY29tcGls
ZWQgZnVuY3Rpb24gc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLgot
ICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgKHNldHRpbmdzLnZhcmlhYmxlIHx8
ICdvYmonKSArICcpe1xuJyArIHNvdXJjZSArICd9JzsKLQotICAgIHJldHVybiB0ZW1wbGF0ZTsK
LSAgfTsKLQotICAvLyBBZGQgYSAiY2hhaW4iIGZ1bmN0aW9uLCB3aGljaCB3aWxsIGRlbGVnYXRl
IHRvIHRoZSB3cmFwcGVyLgotICBfLmNoYWluID0gZnVuY3Rpb24ob2JqKSB7Ci0gICAgcmV0dXJu
IF8ob2JqKS5jaGFpbigpOwotICB9OwotCi0gIC8vIE9PUAotICAvLyAtLS0tLS0tLS0tLS0tLS0K
LSAgLy8gSWYgVW5kZXJzY29yZSBpcyBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgaXQgcmV0dXJucyBh
IHdyYXBwZWQgb2JqZWN0IHRoYXQKLSAgLy8gY2FuIGJlIHVzZWQgT08tc3R5bGUuIFRoaXMgd3Jh
cHBlciBob2xkcyBhbHRlcmVkIHZlcnNpb25zIG9mIGFsbCB0aGUKLSAgLy8gdW5kZXJzY29yZSBm
dW5jdGlvbnMuIFdyYXBwZWQgb2JqZWN0cyBtYXkgYmUgY2hhaW5lZC4KLQotICAvLyBIZWxwZXIg
ZnVuY3Rpb24gdG8gY29udGludWUgY2hhaW5pbmcgaW50ZXJtZWRpYXRlIHJlc3VsdHMuCi0gIHZh
ciByZXN1bHQgPSBmdW5jdGlvbihvYmopIHsKLSAgICByZXR1cm4gdGhpcy5fY2hhaW4gPyBfKG9i
aikuY2hhaW4oKSA6IG9iajsKLSAgfTsKLQotICAvLyBBZGQgYWxsIG9mIHRoZSBVbmRlcnNjb3Jl
IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlciBvYmplY3QuCi0gIF8ubWl4aW4oXyk7Ci0KLSAgLy8g
QWRkIGFsbCBtdXRhdG9yIEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci4KLSAgZWFjaChb
J3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5z
aGlmdCddLCBmdW5jdGlvbihuYW1lKSB7Ci0gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFt
ZV07Ci0gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBvYmog
PSB0aGlzLl93cmFwcGVkOwotICAgICAgbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTsKLSAg
ICAgIGlmICgobmFtZSA9PSAnc2hpZnQnIHx8IG5hbWUgPT0gJ3NwbGljZScpICYmIG9iai5sZW5n
dGggPT09IDApIGRlbGV0ZSBvYmpbMF07Ci0gICAgICByZXR1cm4gcmVzdWx0LmNhbGwodGhpcywg
b2JqKTsKLSAgICB9OwotICB9KTsKLQotICAvLyBBZGQgYWxsIGFjY2Vzc29yIEFycmF5IGZ1bmN0
aW9ucyB0byB0aGUgd3JhcHBlci4KLSAgZWFjaChbJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJ10s
IGZ1bmN0aW9uKG5hbWUpIHsKLSAgICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTsKLSAg
ICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIHJlc3VsdC5j
YWxsKHRoaXMsIG1ldGhvZC5hcHBseSh0aGlzLl93cmFwcGVkLCBhcmd1bWVudHMpKTsKLSAgICB9
OwotICB9KTsKLQotICBfLmV4dGVuZChfLnByb3RvdHlwZSwgewotCi0gICAgLy8gU3RhcnQgY2hh
aW5pbmcgYSB3cmFwcGVkIFVuZGVyc2NvcmUgb2JqZWN0LgotICAgIGNoYWluOiBmdW5jdGlvbigp
IHsKLSAgICAgIHRoaXMuX2NoYWluID0gdHJ1ZTsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0s
Ci0KLSAgICAvLyBFeHRyYWN0cyB0aGUgcmVzdWx0IGZyb20gYSB3cmFwcGVkIGFuZCBjaGFpbmVk
IG9iamVjdC4KLSAgICB2YWx1ZTogZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gdGhpcy5fd3Jh
cHBlZDsKLSAgICB9Ci0KLSAgfSk7Ci0KLX0pLmNhbGwodGhpcyk7CmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9iYWNrYm9uZS9pbmRleC5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvaW5kZXgu
aHRtbAppbmRleCBkNjNhMzBlYjQwMTgyMjA3MjM4Y2RiMmZjZmQzMmRhYmM0Yzc0MzM0Li5hYTIx
NDczM2VkN2Y3NWYxMGM1M2JjYWYwMmYyMDZiM2Q1NWUyMWJhIDEwMDY0NAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9iYWNrYm9uZS9pbmRleC5odG1sCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL2luZGV4
Lmh0bWwKQEAgLTEsNjQgKzEsNjQgQEAKIDwhZG9jdHlwZSBodG1sPgogPGh0bWwgbGFuZz0iZW4i
IGRhdGEtZnJhbWV3b3JrPSJiYWNrYm9uZWpzIj4KICAgICA8aGVhZD4KLSAgICA8bWV0YSBjaGFy
c2V0PSJ1dGYtOCI+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250
ZW50PSJJRT1lZGdlIj4KLSAgICA8dGl0bGU+QmFja2JvbmUuanMg4oCiIFRvZG9NVkM8L3RpdGxl
PgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iYm93ZXJfY29tcG9uZW50cy90b2Rv
bXZjLWNvbW1vbi9iYXNlLmNzcyI+CisgICAgICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAg
ICAgICAgPHRpdGxlPkJhY2tib25lLmpzIOKAoiBUb2RvTVZDPC90aXRsZT4KKyAgICAgICAgPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFz
ZS5jc3MiPgorICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Im5vZGVfbW9kdWxl
cy90b2RvbXZjLWFwcC1jc3MvaW5kZXguY3NzIj4KICAgICA8L2hlYWQ+CiAgICAgPGJvZHk+Ci0g
ICAgPHNlY3Rpb24gaWQ9InRvZG9hcHAiPgotICAgIDxoZWFkZXIgaWQ9ImhlYWRlciI+Ci0gICAg
PGgxPnRvZG9zPC9oMT4KLSAgICA8aW5wdXQgaWQ9Im5ldy10b2RvIiBwbGFjZWhvbGRlcj0iV2hh
dCBuZWVkcyB0byBiZSBkb25lPyIgYXV0b2ZvY3VzPgotICAgIDwvaGVhZGVyPgotICAgIDxzZWN0
aW9uIGlkPSJtYWluIj4KLSAgICA8aW5wdXQgaWQ9InRvZ2dsZS1hbGwiIHR5cGU9ImNoZWNrYm94
Ij4KLSAgICA8bGFiZWwgZm9yPSJ0b2dnbGUtYWxsIj5NYXJrIGFsbCBhcyBjb21wbGV0ZTwvbGFi
ZWw+Ci0gICAgPHVsIGlkPSJ0b2RvLWxpc3QiPjwvdWw+Ci0gICAgPC9zZWN0aW9uPgotICAgIDxm
b290ZXIgaWQ9ImZvb3RlciI+PC9mb290ZXI+Ci0gICAgPC9zZWN0aW9uPgotICAgIDxmb290ZXIg
aWQ9ImluZm8iPgotICAgIDxwPkRvdWJsZS1jbGljayB0byBlZGl0IGEgdG9kbzwvcD4KLSAgICA8
cD5Xcml0dGVuIGJ5IDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9hZGR5b3NtYW5pIj5BZGR5
IE9zbWFuaTwvYT48L3A+Ci0gICAgPHA+UGFydCBvZiA8YSBocmVmPSJodHRwOi8vdG9kb212Yy5j
b20iPlRvZG9NVkM8L2E+PC9wPgotICAgIDwvZm9vdGVyPgotICAgIDxzY3JpcHQgdHlwZT0idGV4
dC90ZW1wbGF0ZSIgaWQ9Iml0ZW0tdGVtcGxhdGUiPgotICAgIDxkaXYgY2xhc3M9InZpZXciPgot
ICAgIDxpbnB1dCBjbGFzcz0idG9nZ2xlIiB0eXBlPSJjaGVja2JveCIgPCU9IGNvbXBsZXRlZCA/
ICdjaGVja2VkJyA6ICcnICU+PgotICAgIDxsYWJlbD48JS0gdGl0bGUgJT48L2xhYmVsPgotICAg
IDxidXR0b24gY2xhc3M9ImRlc3Ryb3kiPjwvYnV0dG9uPgotICAgIDwvZGl2PgotICAgIDxpbnB1
dCBjbGFzcz0iZWRpdCIgdmFsdWU9IjwlLSB0aXRsZSAlPiI+Ci0gICAgPC9zY3JpcHQ+Ci0gICAg
PHNjcmlwdCB0eXBlPSJ0ZXh0L3RlbXBsYXRlIiBpZD0ic3RhdHMtdGVtcGxhdGUiPgotICAgIDxz
cGFuIGlkPSJ0b2RvLWNvdW50Ij48c3Ryb25nPjwlPSByZW1haW5pbmcgJT48L3N0cm9uZz4gPCU9
IHJlbWFpbmluZyA9PT0gMSA/ICdpdGVtJyA6ICdpdGVtcycgJT4gbGVmdDwvc3Bhbj4KLSAgICA8
dWwgaWQ9ImZpbHRlcnMiPgotICAgIDxsaT4KLSAgICA8YSBjbGFzcz0ic2VsZWN0ZWQiIGhyZWY9
IiMvIj5BbGw8L2E+Ci0gICAgPC9saT4KLSAgICA8bGk+Ci0gICAgPGEgaHJlZj0iIy9hY3RpdmUi
PkFjdGl2ZTwvYT4KLSAgICA8L2xpPgotICAgIDxsaT4KLSAgICA8YSBocmVmPSIjL2NvbXBsZXRl
ZCI+Q29tcGxldGVkPC9hPgotICAgIDwvbGk+Ci0gICAgPC91bD4KLSAgICA8JSBpZiAoY29tcGxl
dGVkKSB7ICU+Ci0gICAgPGJ1dHRvbiBpZD0iY2xlYXItY29tcGxldGVkIj5DbGVhciBjb21wbGV0
ZWQgKDwlPSBjb21wbGV0ZWQgJT4pPC9idXR0b24+Ci0gICAgPCUgfSAlPgotICAgIDwvc2NyaXB0
PgotICAgIDxzY3JpcHQgc3JjPSJib3dlcl9jb21wb25lbnRzL3RvZG9tdmMtY29tbW9uL2Jhc2Uu
anMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJib3dlcl9jb21wb25lbnRzL2pxdWVyeS9q
cXVlcnkuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJib3dlcl9jb21wb25lbnRzL3Vu
ZGVyc2NvcmUvdW5kZXJzY29yZS5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9ImJvd2Vy
X2NvbXBvbmVudHMvYmFja2JvbmUvYmFja2JvbmUuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQg
c3JjPSJib3dlcl9jb21wb25lbnRzL2JhY2tib25lLmxvY2FsU3RvcmFnZS9iYWNrYm9uZS5sb2Nh
bFN0b3JhZ2UuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJqcy9tb2RlbHMvdG9kby5q
cyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9ImpzL2NvbGxlY3Rpb25zL3RvZG9zLmpzIj48
L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0ianMvdmlld3MvdG9kby12aWV3LmpzIj48L3Njcmlw
dD4KLSAgICA8c2NyaXB0IHNyYz0ianMvdmlld3MvYXBwLXZpZXcuanMiPjwvc2NyaXB0PgotICAg
IDxzY3JpcHQgc3JjPSJqcy9yb3V0ZXJzL3JvdXRlci5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlw
dCBzcmM9ImpzL2FwcC5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0b2Rv
YXBwIj4KKyAgICAgICAgICAgIDxoZWFkZXIgY2xhc3M9ImhlYWRlciI+CisgICAgICAgICAgICAg
ICAgPGgxPnRvZG9zPC9oMT4KKyAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9Im5ldy10b2Rv
IiBwbGFjZWhvbGRlcj0iV2hhdCBuZWVkcyB0byBiZSBkb25lPyIgYXV0b2ZvY3VzPgorICAgICAg
ICAgICAgPC9oZWFkZXI+CisgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0ibWFpbiI+CisgICAg
ICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJ0b2dnbGUtYWxsIiBpZD0idG9nZ2xlLWFsbCIgdHlw
ZT0iY2hlY2tib3giPgorICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InRvZ2dsZS1hbGwiPk1h
cmsgYWxsIGFzIGNvbXBsZXRlPC9sYWJlbD4KKyAgICAgICAgICAgICAgICA8dWwgY2xhc3M9InRv
ZG8tbGlzdCI+PC91bD4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgICAgIDxmb290
ZXIgY2xhc3M9ImZvb3RlciI+PC9mb290ZXI+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAg
PGZvb3RlciBjbGFzcz0iaW5mbyI+CisgICAgICAgICAgICA8cD5Eb3VibGUtY2xpY2sgdG8gZWRp
dCBhIHRvZG88L3A+CisgICAgICAgICAgICA8cD5Xcml0dGVuIGJ5IDxhIGhyZWY9Imh0dHBzOi8v
Z2l0aHViLmNvbS9hZGR5b3NtYW5pIj5BZGR5IE9zbWFuaTwvYT48L3A+CisgICAgICAgICAgICA8
cD5QYXJ0IG9mIDxhIGhyZWY9Imh0dHA6Ly90b2RvbXZjLmNvbSI+VG9kb01WQzwvYT48L3A+Cisg
ICAgICAgIDwvZm9vdGVyPgorICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvdGVtcGxhdGUiIGlk
PSJpdGVtLXRlbXBsYXRlIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InZpZXciPgorICAgICAg
ICAgICAgICAgIDxpbnB1dCBjbGFzcz0idG9nZ2xlIiB0eXBlPSJjaGVja2JveCIgPCU9IGNvbXBs
ZXRlZCA/ICdjaGVja2VkJyA6ICcnICU+PgorICAgICAgICAgICAgICAgIDxsYWJlbD48JS0gdGl0
bGUgJT48L2xhYmVsPgorICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRlc3Ryb3kiPjwv
YnV0dG9uPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImVk
aXQiIHZhbHVlPSI8JS0gdGl0bGUgJT4iPgorICAgICAgICA8L3NjcmlwdD4KKyAgICAgICAgPHNj
cmlwdCB0eXBlPSJ0ZXh0L3RlbXBsYXRlIiBpZD0ic3RhdHMtdGVtcGxhdGUiPgorICAgICAgICAg
ICAgPHNwYW4gY2xhc3M9InRvZG8tY291bnQiPjxzdHJvbmc+PCU9IHJlbWFpbmluZyAlPjwvc3Ry
b25nPiA8JT0gcmVtYWluaW5nID09PSAxID8gJ2l0ZW0nIDogJ2l0ZW1zJyAlPiBsZWZ0PC9zcGFu
PgorICAgICAgICAgICAgPHVsIGNsYXNzPSJmaWx0ZXJzIj4KKyAgICAgICAgICAgICAgICA8bGk+
CisgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzZWxlY3RlZCIgaHJlZj0iIy8iPkFsbDwv
YT4KKyAgICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaT4KKyAgICAgICAg
ICAgICAgICAgICAgPGEgaHJlZj0iIy9hY3RpdmUiPkFjdGl2ZTwvYT4KKyAgICAgICAgICAgICAg
ICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJl
Zj0iIy9jb21wbGV0ZWQiPkNvbXBsZXRlZDwvYT4KKyAgICAgICAgICAgICAgICA8L2xpPgorICAg
ICAgICAgICAgPC91bD4KKyAgICAgICAgICAgIDwlIGlmIChjb21wbGV0ZWQpIHsgJT4KKyAgICAg
ICAgICAgIDxidXR0b24gY2xhc3M9ImNsZWFyLWNvbXBsZXRlZCI+Q2xlYXIgY29tcGxldGVkPC9i
dXR0b24+CisgICAgICAgICAgICA8JSB9ICU+CisgICAgICAgIDwvc2NyaXB0PgorICAgICAgICA8
IS0tIDxzY3JpcHQgc3JjPSJub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5qcyI+PC9z
Y3JpcHQ+IC0tPgorICAgICAgICA8c2NyaXB0IHNyYz0ibm9kZV9tb2R1bGVzL2pxdWVyeS9kaXN0
L2pxdWVyeS5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJub2RlX21vZHVsZXMv
dW5kZXJzY29yZS91bmRlcnNjb3JlLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9
Im5vZGVfbW9kdWxlcy9iYWNrYm9uZS9iYWNrYm9uZS5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxz
Y3JpcHQgc3JjPSJqcy9iYWNrYm9uZS5zeW5jLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlw
dCBzcmM9ImpzL21vZGVscy90b2RvLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9
ImpzL2NvbGxlY3Rpb25zL3RvZG9zLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9
ImpzL3ZpZXdzL3RvZG8tdmlldy5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJq
cy92aWV3cy9hcHAtdmlldy5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJqcy9y
b3V0ZXJzL3JvdXRlci5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJqcy9hcHAu
anMiPjwvc2NyaXB0PgogICAgIDwvYm9keT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL2JhY2tib25lL2pzL2FwcC5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL2pzL2FwcC5qcwpp
bmRleCBhY2E3OTA3OTU3M2U4MWEwMTA4ZDEyNDY3OTI3OTMzMDQwMTc4NTg0Li4xZTEzOWQzYmQ0
NjYwYTVjNDQwZTk0YWJjZmQwZjc4ZTA5M2I1NmUwIDEwMDY0NAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9i
YWNrYm9uZS9qcy9hcHAuanMKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvanMvYXBwLmpzCkBA
IC0yLDYgKzIsNyBAQAogLypqc2hpbnQgdW51c2VkOmZhbHNlICovCiB2YXIgYXBwID0gYXBwIHx8
IHt9OwogdmFyIEVOVEVSX0tFWSA9IDEzOwordmFyIEVTQ19LRVkgPSAyNzsKIAogJChmdW5jdGlv
biAoKSB7CiAgICAgJ3VzZSBzdHJpY3QnOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2Jv
bmUvanMvYmFja2JvbmUuc3luYy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL2pzL2JhY2tib25l
LnN5bmMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZjhlM2M2N2VkZGI3OWE1MTczYzVhY2VkMTUzZjRlYmMzNmI2
YTJhYgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL2pzL2JhY2tib25l
LnN5bmMuanMKQEAgLTAsMCArMSwxMTggQEAKK0JhY2tib25lLnN5bmMgPSBmdW5jdGlvbihtZXRo
b2QsIG1vZGVsLCBvcHRpb25zKSB7CisKKyAgLy8gd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgaW5p
dGlhbGl6ZSBhIHN0b3JlLCBpbiB0aGlzIGNhc2UKKyAgLy8gd2Ugd2lsbCBqdXN0IHVzZSBhIEpT
IG9iamVjdC4KKyAgdmFyIGNhY2hlID0ge307CisgIAorICAvLyBUaGUgc2l6ZSB3aWxsIGJlIHBy
aW1hcmlseSB1c2VkIHRvIGFzc2lnbiBpZHMgdG8gbmV3bHkgCisgIC8vIGNyZWF0ZWQgbW9kZWxz
LiBFYWNoIHRpbWUgYSBuZXcgbW9kZWwgaXMgY3JlYXRlZCwgdGhlIHNpemUgCisgIC8vIHdpbGwg
YmUgaW5jcmVtZW50ZWQuCisgIHZhciBzaXplICA9IDA7CisKKyAgLy8gc2luY2Ugd2UgbmVlZCB0
byBjcmVhdGUgYSBzdG9yZSBmb3IgdGhlIG1vZGVscy9jb2xsZWN0aW9ucworICAvLyB3ZSBhcmUg
YWN0dWFsbHkgZ29pbmcgdG8gaW52b2tlIHRoZSBvdXRlciBmdW5jdGlvbiB3aGljaCB3aWxsCisg
IC8vIHJldHVybiB0aGlzIGZ1bmN0aW9uIGJlbG93IGFzIHRoZSBCYWNrYm9uZS5zeW5jIHRoYXQg
d2lsbAorICAvLyBhY3R1YWxseSBiZSB1c2VkLgorICByZXR1cm4gZnVuY3Rpb24obWV0aG9kLCBt
b2RlbCwgb3B0aW9ucykgeworCisgICAgLy8gY3JlYXRlIGEgbmV3IGRlZmVycmVkIG9iamVjdC4g
c3RhbmRhcmQgc3luYyByZXR1cm5zIHRoZSAkLmFqYXgKKyAgICAvLyByZXF1ZXN0LCB3aGljaCBp
bnRlcm5hbGx5IHJldHVybnMgYSBkZWZlcnJlZC4gSXQncyBpbXBvcnRhbnQgdG8KKyAgICAvLyBk
byB0aGlzIHNvIHRoYXQgcGVvcGxlIGNhbiBjaGFpbiBvbiBmZXRjaCB1c2luZyB0aGUgc3RhbmRh
cmQgLnRoZW4vLmZhaWwKKyAgICAvLyBzeW50YXgsIHJhdGhlciB0aGFuIGp1c3QgdGhlIHN1Y2Nl
c3MvZXJyb3IgY2FsbGJhY2tzLgorICAgIHZhciBkZWZlcnJlZCA9ICQuRGVmZXJyZWQoKTsKKyAg
ICAKKyAgICAvLyB3aGVuIGNyZWF0aW5nIGEgbmV3IG1vZGVsLi4uCisgICAgaWYgKG1ldGhvZCA9
PT0gImNyZWF0ZSIpIHsKKworICAgICAgLy8gZmlyc3QgYXNzaWduIGl0IGFuIGlkLiBUaGUgc2Vy
dmVyIHdvdWxkIHRyYWRpdGlvbmFsbHkgZG8gdGhpcy4KKyAgICAgIG1vZGVsLmlkID0gc2l6ZTsK
KyAgICAgIC8vIHN0b3JlIGl0IGluIG91ciBjYWNoZQorICAgICAgY2FjaGVbbW9kZWwuaWRdID0g
bW9kZWw7CisgICAgICAvLyBtYWtlIHN1cmUgd2UgaW5jcmVtZW50IHRoZSBudW1iZXIgb2YgbW9k
ZWxzIHdlIG5vdyBoYXZlLgorICAgICAgc2l6ZSArPSAxOworCisgICAgICAvLyBpZiBhIHN1Y2Nl
c3MgY2FsbGJhY2sgd2FzIHByb3ZpZGVkLCBleGVjdXRlIGl0LgorICAgICAgaWYgKG9wdGlvbnMu
c3VjY2VzcykgeworICAgICAgICBvcHRpb25zLnN1Y2Nlc3MobW9kZWwsIG1vZGVsLnRvSlNPTigp
LCBvcHRpb25zKTsKKyAgICAgIH0KKworICAgICAgLy8gcmVzb2x2ZSB0aGUgZGVmZXJyZWQuCisg
ICAgICBkZWZlcnJlZC5yZXNvbHZlKG1vZGVsKTsKKworICAgIC8vIHdlIGFyZSB1cGRhdGluZyBh
IG1vZGVsCisgICAgfSBlbHNlIGlmIChtZXRob2QgPT09ICJ1cGRhdGUiKSB7CisgICAgICAKKyAg
ICAgIC8vIGFzIGxvbmcgYXMgdGhlIG1vZGVsIGFjdHVhbGx5IGV4aXN0cyBpbiBvdXIgc3RvcmUK
KyAgICAgIGlmIChjYWNoZVttb2RlbC5pZF0pIHsKKyAgICAgICAgCisgICAgICAgIC8vIG92ZXJ3
cml0ZSB3aGF0IGlzIGN1cnJlbnRseSBpbiB0aGUgc3RvcmUgd2l0aCB0aGlzIG1vZGVsLgorICAg
ICAgICBjYWNoZVttb2RlbC5pZF0gPSBtb2RlbDsKKworICAgICAgICAvLyBpZiBhIHN1Y2Nlc3Mg
Y2FsbGJhY2sgd2FzIHByb3ZpZGVkLCBleGVjdXRlIGl0LgorICAgICAgICBpZiAob3B0aW9ucy5z
dWNjZXNzKSB7CisgICAgICAgICAgb3B0aW9ucy5zdWNjZXNzKG1vZGVsLCBtb2RlbC50b0pTT04o
KSwgb3B0aW9ucyk7CisgICAgICAgIH0KKworICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKG1vZGVs
KTsKKyAgICAgIAorICAgICAgLy8gaWYgdGhpcyBtb2RlbCBkb2Vzbid0IGV4aXN0IHlldCwgd2Ug
Y2FuJ3QgdXBkYXRlIGl0CisgICAgICB9IGVsc2UgeworICAgICAgICAKKyAgICAgICAgaWYgKG9w
dGlvbnMuZXJyb3IpIHsKKyAgICAgICAgICBvcHRpb25zLmVycm9yKG1vZGVsLCAiTW9kZWwgbm90
IGZvdW5kIik7CisgICAgICAgIH0KKyAgICAgICAgZGVmZXJyZWQucmVqZWN0KG1vZGVsKTsKKyAg
ICAgIH0KKworICAgIC8vIGlmIHdlJ3JlIHRyeWluZyB0byByZWFkIGEgbW9kZWwuLi4KKyAgICB9
IGVsc2UgaWYgKG1ldGhvZCA9PT0gInJlYWQiKSB7CisgICAgICAKKyAgICAgIC8vIGFzIGxvbmcg
YXMgaXQgZXhpc3RzCisgICAgICBpZiAoY2FjaGVbbW9kZWwuaWRdKSB7CisgICAgICAgIAorICAg
ICAgICAvLyBpZiBhIHN1Y2Nlc3MgY2FsbGJhY2sgd2FzIHByb3ZpZGVkLCBleGVjdXRlIGl0Lgor
ICAgICAgICBpZiAob3B0aW9ucy5zdWNjZXNzKSB7CisgICAgICAgICAgb3B0aW9ucy5zdWNjZXNz
KG1vZGVsLCBjYWNoZVttb2RlbC5pZF0udG9KU09OKCksIG9wdGlvbnMpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyByZXNvbHZlIAorICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKG1v
ZGVsKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChvcHRpb25zLmVycm9yKSB7CisgICAg
ICAgICAgb3B0aW9ucy5lcnJvcihtb2RlbCwgIk1vZGVsIG5vdCBmb3VuZCIpOworICAgICAgICB9
CisgICAgICAgIGRlZmVycmVkLnJlamVjdChtb2RlbCk7CisgICAgICB9CisgICAgICAKKyAgICAv
LyBpZiB3ZSdyZSBkZWxldGluZyBhIG1vZGVsLi4uCisgICAgfSBlbHNlIGlmIChtZXRob2QgPT09
ICJkZWxldGUiKSB7CisgICAgICAKKyAgICAgIC8vIGZpcnN0IG1ha2Ugc3VyZSBpdCBleGlzdHMg
aW4gdGhlIGNhY2hlCisgICAgICBpZiAoY2FjaGVbbW9kZWwuaWRdKSB7CisgICAgICAgIAorICAg
ICAgICAvLyB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBjYWNoZQorICAgICAgICBkZWxldGUgY2Fj
aGVbbW9kZWwuaWRdOworICAgICAgICAKKyAgICAgICAgLy8gYW5kIHRyaWdnZXIgdGhlIHN1Y2Nl
c3MgY2FsbGJhY2suIE5vdGUgd2UncmUgcGFzc2luZyBhbiAKKyAgICAgICAgLy8gZW1wdHkgb2Jq
ZWN0IGFzIHRoZSBzZWNvbmQgYXJndW1lbnQsIGJlY2F1c2UgYSBkZWxldGlvbiAKKyAgICAgICAg
Ly8gd291bGQgcmVzdWx0IGluIGFuIGVtcHR5IHJldHVybiBmcm9tIHRoZSBzZXJ2ZXIuCisgICAg
ICAgIGlmIChvcHRpb25zLnN1Y2Nlc3MpIHsKKyAgICAgICAgICBvcHRpb25zLnN1Y2Nlc3MobW9k
ZWwsIHt9LCBvcHRpb25zKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gcmVzb2x2
ZSB0aGUgZGVmZXJyZWQKKyAgICAgICAgZGVmZXJyZWQucmVzb2x2ZShtb2RlbCk7CisgICAgICAg
IAorICAgICAgLy8gb3RoZXJ3aXNlLCBlcnJvciB0aGF0IHRoZSBtb2RlbCBkb2Vzbid0IGV4aXN0
LgorICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG9wdGlvbnMuZXJyb3IpIHsKKyAgICAgICAg
ICBvcHRpb25zLmVycm9yKG1vZGVsLCAiTW9kZWwgbm90IGZvdW5kIik7CisgICAgICAgIH0KKyAg
ICAgICAgZGVmZXJyZWQucmVqZWN0KG1vZGVsKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gZGVmZXJyZWQucHJvbWlzZSgpOyAgCisgIH0KKyAgCit9KCk7ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvanMvY29sbGVjdGlv
bnMvdG9kb3MuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9qcy9jb2xsZWN0aW9ucy90b2Rvcy5q
cwppbmRleCAzYjE1MDA0ZjNmYjNiZDlkMmE2ZDhkOTA1ZDljYjZmNTMzOTRkNTA2Li5mOGY1ZDMx
MTEzMzU4OGQ4NzY4Y2FmMmYwZGVmNGUyYTQ4MzhlYjMzIDEwMDY0NAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9iYWNrYm9uZS9qcy9jb2xsZWN0aW9ucy90b2Rvcy5qcworKysgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNr
Ym9uZS9qcy9jb2xsZWN0aW9ucy90b2Rvcy5qcwpAQCAtNyw0MCArNywzMSBAQCB2YXIgYXBwID0g
YXBwIHx8IHt9OwogICAgIC8vIFRvZG8gQ29sbGVjdGlvbgogICAgIC8vIC0tLS0tLS0tLS0tLS0t
LQogCi0gICAgLy8gVGhlIGNvbGxlY3Rpb24gb2YgdG9kb3MgaXMgYmFja2VkIGJ5ICpsb2NhbFN0
b3JhZ2UqIGluc3RlYWQgb2YgYSByZW1vdGUKLSAgICAvLyBzZXJ2ZXIuCisKICAgICB2YXIgVG9k
b3MgPSBCYWNrYm9uZS5Db2xsZWN0aW9uLmV4dGVuZCh7Ci0gICAgLy8gUmVmZXJlbmNlIHRvIHRo
aXMgY29sbGVjdGlvbidzIG1vZGVsLgotICAgIG1vZGVsOiBhcHAuVG9kbywKKyAgICAgICAgLy8g
UmVmZXJlbmNlIHRvIHRoaXMgY29sbGVjdGlvbidzIG1vZGVsLgorICAgICAgICBtb2RlbDogYXBw
LlRvZG8sCiAKLSAgICAvLyBTYXZlIGFsbCBvZiB0aGUgdG9kbyBpdGVtcyB1bmRlciB0aGUgYCJ0
b2RvcyJgIG5hbWVzcGFjZS4KLSAgICBsb2NhbFN0b3JhZ2U6IG5ldyBCYWNrYm9uZS5Mb2NhbFN0
b3JhZ2UoJ3RvZG9zLWJhY2tib25lJyksCisgICAgICAgIC8vIFNhdmUgYWxsIG9mIHRoZSB0b2Rv
IGl0ZW1zIHVuZGVyIHRoaXMgZXhhbXBsZSdzIG5hbWVzcGFjZS4KIAotICAgIC8vIEZpbHRlciBk
b3duIHRoZSBsaXN0IG9mIGFsbCB0b2RvIGl0ZW1zIHRoYXQgYXJlIGZpbmlzaGVkLgotICAgIGNv
bXBsZXRlZDogZnVuY3Rpb24gKCkgewotICAgIHJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbiAo
dG9kbykgewotICAgIHJldHVybiB0b2RvLmdldCgnY29tcGxldGVkJyk7Ci0gICAgfSk7Ci0gICAg
fSwKLQotICAgIC8vIEZpbHRlciBkb3duIHRoZSBsaXN0IHRvIG9ubHkgdG9kbyBpdGVtcyB0aGF0
IGFyZSBzdGlsbCBub3QgZmluaXNoZWQuCi0gICAgcmVtYWluaW5nOiBmdW5jdGlvbiAoKSB7Ci0g
ICAgcmV0dXJuIHRoaXMud2l0aG91dC5hcHBseSh0aGlzLCB0aGlzLmNvbXBsZXRlZCgpKTsKLSAg
ICB9LAotCi0gICAgLy8gV2Uga2VlcCB0aGUgVG9kb3MgaW4gc2VxdWVudGlhbCBvcmRlciwgZGVz
cGl0ZSBiZWluZyBzYXZlZCBieSB1bm9yZGVyZWQKLSAgICAvLyBHVUlEIGluIHRoZSBkYXRhYmFz
ZS4gVGhpcyBnZW5lcmF0ZXMgdGhlIG5leHQgb3JkZXIgbnVtYmVyIGZvciBuZXcgaXRlbXMuCi0g
ICAgbmV4dE9yZGVyOiBmdW5jdGlvbiAoKSB7Ci0gICAgaWYgKCF0aGlzLmxlbmd0aCkgewotICAg
IHJldHVybiAxOwotICAgIH0KLSAgICByZXR1cm4gdGhpcy5sYXN0KCkuZ2V0KCdvcmRlcicpICsg
MTsKLSAgICB9LAotCi0gICAgLy8gVG9kb3MgYXJlIHNvcnRlZCBieSB0aGVpciBvcmlnaW5hbCBp
bnNlcnRpb24gb3JkZXIuCi0gICAgY29tcGFyYXRvcjogZnVuY3Rpb24gKHRvZG8pIHsKLSAgICBy
ZXR1cm4gdG9kby5nZXQoJ29yZGVyJyk7Ci0gICAgfQorICAgICAgICAvLyBGaWx0ZXIgZG93biB0
aGUgbGlzdCBvZiBhbGwgdG9kbyBpdGVtcyB0aGF0IGFyZSBmaW5pc2hlZC4KKyAgICAgICAgY29t
cGxldGVkOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy53aGVyZSh7Y29t
cGxldGVkOiB0cnVlfSk7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8gRmlsdGVyIGRvd24gdGhl
IGxpc3QgdG8gb25seSB0b2RvIGl0ZW1zIHRoYXQgYXJlIHN0aWxsIG5vdCBmaW5pc2hlZC4KKyAg
ICAgICAgcmVtYWluaW5nOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy53
aGVyZSh7Y29tcGxldGVkOiBmYWxzZX0pOworICAgICAgICB9LAorCisgICAgICAgIC8vIFdlIGtl
ZXAgdGhlIFRvZG9zIGluIHNlcXVlbnRpYWwgb3JkZXIsIGRlc3BpdGUgYmVpbmcgc2F2ZWQgYnkg
dW5vcmRlcmVkCisgICAgICAgIC8vIEdVSUQgaW4gdGhlIGRhdGFiYXNlLiBUaGlzIGdlbmVyYXRl
cyB0aGUgbmV4dCBvcmRlciBudW1iZXIgZm9yIG5ldyBpdGVtcy4KKyAgICAgICAgbmV4dE9yZGVy
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGggPyB0aGlzLmxh
c3QoKS5nZXQoJ29yZGVyJykgKyAxIDogMTsKKyAgICAgICAgfSwKKworICAgICAgICAvLyBUb2Rv
cyBhcmUgc29ydGVkIGJ5IHRoZWlyIG9yaWdpbmFsIGluc2VydGlvbiBvcmRlci4KKyAgICAgICAg
Y29tcGFyYXRvcjogJ29yZGVyJwogICAgIH0pOwogCiAgICAgLy8gQ3JlYXRlIG91ciBnbG9iYWwg
Y29sbGVjdGlvbiBvZiAqKlRvZG9zKiouCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9u
ZS9qcy9tb2RlbHMvdG9kby5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL2pzL21vZGVscy90b2Rv
LmpzCmluZGV4IDQ5MTdkZmUwNmQwNzM0Y2EwYzQ5YjdlZTdiMTVhMDI5MzQxNGJmZDMuLjRmM2Zk
ZTNlMjZmYjFiNzE2ODI0YTA4ODIwNDZiMGFmZmYzMWZjMWIgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL2JhY2tib25lL2pzL21vZGVscy90b2RvLmpzCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25l
L2pzL21vZGVscy90b2RvLmpzCkBAIC05LDE4ICs5LDE4IEBAIHZhciBhcHAgPSBhcHAgfHwge307
CiAKICAgICAvLyBPdXIgYmFzaWMgKipUb2RvKiogbW9kZWwgaGFzIGB0aXRsZWAsIGBvcmRlcmAs
IGFuZCBgY29tcGxldGVkYCBhdHRyaWJ1dGVzLgogICAgIGFwcC5Ub2RvID0gQmFja2JvbmUuTW9k
ZWwuZXh0ZW5kKHsKLSAgICAvLyBEZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSB0b2RvCi0gICAg
Ly8gYW5kIGVuc3VyZSB0aGF0IGVhY2ggdG9kbyBjcmVhdGVkIGhhcyBgdGl0bGVgIGFuZCBgY29t
cGxldGVkYCBrZXlzLgotICAgIGRlZmF1bHRzOiB7Ci0gICAgdGl0bGU6ICcnLAotICAgIGNvbXBs
ZXRlZDogZmFsc2UKLSAgICB9LAorICAgICAgICAvLyBEZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRo
ZSB0b2RvCisgICAgICAgIC8vIGFuZCBlbnN1cmUgdGhhdCBlYWNoIHRvZG8gY3JlYXRlZCBoYXMg
YHRpdGxlYCBhbmQgYGNvbXBsZXRlZGAga2V5cy4KKyAgICAgICAgZGVmYXVsdHM6IHsKKyAgICAg
ICAgICAgIHRpdGxlOiAnJywKKyAgICAgICAgICAgIGNvbXBsZXRlZDogZmFsc2UKKyAgICAgICAg
fSwKIAotICAgIC8vIFRvZ2dsZSB0aGUgYGNvbXBsZXRlZGAgc3RhdGUgb2YgdGhpcyB0b2RvIGl0
ZW0uCi0gICAgdG9nZ2xlOiBmdW5jdGlvbiAoKSB7Ci0gICAgdGhpcy5zYXZlKHsKLSAgICBjb21w
bGV0ZWQ6ICF0aGlzLmdldCgnY29tcGxldGVkJykKLSAgICB9KTsKLSAgICB9CisgICAgICAgIC8v
IFRvZ2dsZSB0aGUgYGNvbXBsZXRlZGAgc3RhdGUgb2YgdGhpcyB0b2RvIGl0ZW0uCisgICAgICAg
IHRvZ2dsZTogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy5zYXZlKHsKKyAgICAgICAg
ICAgICAgICBjb21wbGV0ZWQ6ICF0aGlzLmdldCgnY29tcGxldGVkJykKKyAgICAgICAgICAgIH0p
OworICAgICAgICB9CiAgICAgfSk7CiB9KSgpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFj
a2JvbmUvanMvcm91dGVycy9yb3V0ZXIuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9qcy9yb3V0
ZXJzL3JvdXRlci5qcwppbmRleCAwMDk3MDM5ZjI5NTczOGEwNjYxODFjZTU0MTAwZTA3YTFkZWFl
YWY0Li41OTM3ZTlmZjAzNzg0M2EwNzUyMzZlZjAzMjUxY2IxMWQ5MjFkOWJjIDEwMDY0NAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9iYWNrYm9uZS9qcy9yb3V0ZXJzL3JvdXRlci5qcworKysgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9iYWNrYm9uZS9qcy9yb3V0ZXJzL3JvdXRlci5qcwpAQCAtNywxOCArNywxOCBAQCB2YXIg
YXBwID0gYXBwIHx8IHt9OwogICAgIC8vIFRvZG8gUm91dGVyCiAgICAgLy8gLS0tLS0tLS0tLQog
ICAgIHZhciBUb2RvUm91dGVyID0gQmFja2JvbmUuUm91dGVyLmV4dGVuZCh7Ci0gICAgcm91dGVz
OiB7Ci0gICAgJypmaWx0ZXInOiAnc2V0RmlsdGVyJwotICAgIH0sCisgICAgICAgIHJvdXRlczog
eworICAgICAgICAgICAgJypmaWx0ZXInOiAnc2V0RmlsdGVyJworICAgICAgICB9LAogCi0gICAg
c2V0RmlsdGVyOiBmdW5jdGlvbiAocGFyYW0pIHsKLSAgICAvLyBTZXQgdGhlIGN1cnJlbnQgZmls
dGVyIHRvIGJlIHVzZWQKLSAgICBhcHAuVG9kb0ZpbHRlciA9IHBhcmFtIHx8ICcnOworICAgICAg
ICBzZXRGaWx0ZXI6IGZ1bmN0aW9uIChwYXJhbSkgeworICAgICAgICAgICAgLy8gU2V0IHRoZSBj
dXJyZW50IGZpbHRlciB0byBiZSB1c2VkCisgICAgICAgICAgICBhcHAuVG9kb0ZpbHRlciA9IHBh
cmFtIHx8ICcnOwogCi0gICAgLy8gVHJpZ2dlciBhIGNvbGxlY3Rpb24gZmlsdGVyIGV2ZW50LCBj
YXVzaW5nIGhpZGluZy91bmhpZGluZwotICAgIC8vIG9mIFRvZG8gdmlldyBpdGVtcwotICAgIGFw
cC50b2Rvcy50cmlnZ2VyKCdmaWx0ZXInKTsKLSAgICB9CisgICAgICAgICAgICAvLyBUcmlnZ2Vy
IGEgY29sbGVjdGlvbiBmaWx0ZXIgZXZlbnQsIGNhdXNpbmcgaGlkaW5nL3VuaGlkaW5nCisgICAg
ICAgICAgICAvLyBvZiBUb2RvIHZpZXcgaXRlbXMKKyAgICAgICAgICAgIGFwcC50b2Rvcy50cmln
Z2VyKCdmaWx0ZXInKTsKKyAgICAgICAgfQogICAgIH0pOwogCiAgICAgYXBwLlRvZG9Sb3V0ZXIg
PSBuZXcgVG9kb1JvdXRlcigpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvanMv
dmlld3MvYXBwLXZpZXcuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9qcy92aWV3cy9hcHAtdmll
dy5qcwppbmRleCA0OTVlYmM0MTllN2QzMDAzYjNmNDExYzA0MjgwNjQ0NzkxNjQ4ZWUwLi4zNDI1
MmZjOWNiMjI2NGY2ZDM2NDQ5ZGUzYjJhMjg1M2ZkOGU5NWZiIDEwMDY0NAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9iYWNrYm9uZS9qcy92aWV3cy9hcHAtdmlldy5qcworKysgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNr
Ym9uZS9qcy92aWV3cy9hcHAtdmlldy5qcwpAQCAtMTAsMTIzICsxMCwxMjIgQEAgdmFyIGFwcCA9
IGFwcCB8fCB7fTsKICAgICAvLyBPdXIgb3ZlcmFsbCAqKkFwcFZpZXcqKiBpcyB0aGUgdG9wLWxl
dmVsIHBpZWNlIG9mIFVJLgogICAgIGFwcC5BcHBWaWV3ID0gQmFja2JvbmUuVmlldy5leHRlbmQo
ewogCi0gICAgLy8gSW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgbmV3IGVsZW1lbnQsIGJpbmQgdG8g
dGhlIGV4aXN0aW5nIHNrZWxldG9uIG9mCi0gICAgLy8gdGhlIEFwcCBhbHJlYWR5IHByZXNlbnQg
aW4gdGhlIEhUTUwuCi0gICAgZWw6ICcjdG9kb2FwcCcsCi0KLSAgICAvLyBPdXIgdGVtcGxhdGUg
Zm9yIHRoZSBsaW5lIG9mIHN0YXRpc3RpY3MgYXQgdGhlIGJvdHRvbSBvZiB0aGUgYXBwLgotICAg
IHN0YXRzVGVtcGxhdGU6IF8udGVtcGxhdGUoJCgnI3N0YXRzLXRlbXBsYXRlJykuaHRtbCgpKSwK
LQotICAgIC8vIERlbGVnYXRlZCBldmVudHMgZm9yIGNyZWF0aW5nIG5ldyBpdGVtcywgYW5kIGNs
ZWFyaW5nIGNvbXBsZXRlZCBvbmVzLgotICAgIGV2ZW50czogewotICAgICdrZXlwcmVzcyAjbmV3
LXRvZG8nOiAnY3JlYXRlT25FbnRlcicsCi0gICAgJ2NsaWNrICNjbGVhci1jb21wbGV0ZWQnOiAn
Y2xlYXJDb21wbGV0ZWQnLAotICAgICdjbGljayAjdG9nZ2xlLWFsbCc6ICd0b2dnbGVBbGxDb21w
bGV0ZScKLSAgICB9LAotCi0gICAgLy8gQXQgaW5pdGlhbGl6YXRpb24gd2UgYmluZCB0byB0aGUg
cmVsZXZhbnQgZXZlbnRzIG9uIHRoZSBgVG9kb3NgCi0gICAgLy8gY29sbGVjdGlvbiwgd2hlbiBp
dGVtcyBhcmUgYWRkZWQgb3IgY2hhbmdlZC4gS2ljayB0aGluZ3Mgb2ZmIGJ5Ci0gICAgLy8gbG9h
ZGluZyBhbnkgcHJlZXhpc3RpbmcgdG9kb3MgdGhhdCBtaWdodCBiZSBzYXZlZCBpbiAqbG9jYWxT
dG9yYWdlKi4KLSAgICBpbml0aWFsaXplOiBmdW5jdGlvbiAoKSB7Ci0gICAgdGhpcy5hbGxDaGVj
a2JveCA9IHRoaXMuJCgnI3RvZ2dsZS1hbGwnKVswXTsKLSAgICB0aGlzLiRpbnB1dCA9IHRoaXMu
JCgnI25ldy10b2RvJyk7Ci0gICAgdGhpcy4kZm9vdGVyID0gdGhpcy4kKCcjZm9vdGVyJyk7Ci0g
ICAgdGhpcy4kbWFpbiA9IHRoaXMuJCgnI21haW4nKTsKLQotICAgIHRoaXMubGlzdGVuVG8oYXBw
LnRvZG9zLCAnYWRkJywgdGhpcy5hZGRPbmUpOwotICAgIHRoaXMubGlzdGVuVG8oYXBwLnRvZG9z
LCAncmVzZXQnLCB0aGlzLmFkZEFsbCk7Ci0gICAgdGhpcy5saXN0ZW5UbyhhcHAudG9kb3MsICdj
aGFuZ2U6Y29tcGxldGVkJywgdGhpcy5maWx0ZXJPbmUpOwotICAgIHRoaXMubGlzdGVuVG8oYXBw
LnRvZG9zLCAnZmlsdGVyJywgdGhpcy5maWx0ZXJBbGwpOwotICAgIHRoaXMubGlzdGVuVG8oYXBw
LnRvZG9zLCAnYWxsJywgdGhpcy5yZW5kZXIpOwotCi0gICAgLy8gU3VwcHJlc3NlcyAnYWRkJyBl
dmVudHMgd2l0aCB7cmVzZXQ6IHRydWV9IGFuZCBwcmV2ZW50cyB0aGUgYXBwIHZpZXcgCi0gICAg
Ly8gZnJvbSBiZWluZyByZS1yZW5kZXJlZCBmb3IgZXZlcnkgbW9kZWwuIE9ubHkgcmVuZGVycyB3
aGVuIHRoZSAncmVzZXQnCi0gICAgLy8gZXZlbnQgaXMgdHJpZ2dlcmVkIGF0IHRoZSBlbmQgb2Yg
dGhlIGZldGNoLgotICAgIGFwcC50b2Rvcy5mZXRjaCh7cmVzZXQ6IHRydWV9KTsKLSAgICB9LAot
Ci0gICAgLy8gUmUtcmVuZGVyaW5nIHRoZSBBcHAganVzdCBtZWFucyByZWZyZXNoaW5nIHRoZSBz
dGF0aXN0aWNzIC0tIHRoZSByZXN0Ci0gICAgLy8gb2YgdGhlIGFwcCBkb2Vzbid0IGNoYW5nZS4K
LSAgICByZW5kZXI6IGZ1bmN0aW9uICgpIHsKLSAgICB2YXIgY29tcGxldGVkID0gYXBwLnRvZG9z
LmNvbXBsZXRlZCgpLmxlbmd0aDsKLSAgICB2YXIgcmVtYWluaW5nID0gYXBwLnRvZG9zLnJlbWFp
bmluZygpLmxlbmd0aDsKLQotICAgIGlmIChhcHAudG9kb3MubGVuZ3RoKSB7Ci0gICAgdGhpcy4k
bWFpbi5zaG93KCk7Ci0gICAgdGhpcy4kZm9vdGVyLnNob3coKTsKLQotICAgIHRoaXMuJGZvb3Rl
ci5odG1sKHRoaXMuc3RhdHNUZW1wbGF0ZSh7Ci0gICAgY29tcGxldGVkOiBjb21wbGV0ZWQsCi0g
ICAgcmVtYWluaW5nOiByZW1haW5pbmcKLSAgICB9KSk7Ci0KLSAgICB0aGlzLiQoJyNmaWx0ZXJz
IGxpIGEnKQotICAgIC5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKQotICAgIC5maWx0ZXIoJ1tocmVm
PSIjLycgKyAoYXBwLlRvZG9GaWx0ZXIgfHwgJycpICsgJyJdJykKLSAgICAuYWRkQ2xhc3MoJ3Nl
bGVjdGVkJyk7Ci0gICAgfSBlbHNlIHsKLSAgICB0aGlzLiRtYWluLmhpZGUoKTsKLSAgICB0aGlz
LiRmb290ZXIuaGlkZSgpOwotICAgIH0KLQotICAgIHRoaXMuYWxsQ2hlY2tib3guY2hlY2tlZCA9
ICFyZW1haW5pbmc7Ci0gICAgfSwKLQotICAgIC8vIEFkZCBhIHNpbmdsZSB0b2RvIGl0ZW0gdG8g
dGhlIGxpc3QgYnkgY3JlYXRpbmcgYSB2aWV3IGZvciBpdCwgYW5kCi0gICAgLy8gYXBwZW5kaW5n
IGl0cyBlbGVtZW50IHRvIHRoZSBgPHVsPmAuCi0gICAgYWRkT25lOiBmdW5jdGlvbiAodG9kbykg
ewotICAgIHZhciB2aWV3ID0gbmV3IGFwcC5Ub2RvVmlldyh7IG1vZGVsOiB0b2RvIH0pOwotICAg
ICQoJyN0b2RvLWxpc3QnKS5hcHBlbmQodmlldy5yZW5kZXIoKS5lbCk7Ci0gICAgfSwKLQotICAg
IC8vIEFkZCBhbGwgaXRlbXMgaW4gdGhlICoqVG9kb3MqKiBjb2xsZWN0aW9uIGF0IG9uY2UuCi0g
ICAgYWRkQWxsOiBmdW5jdGlvbiAoKSB7Ci0gICAgdGhpcy4kKCcjdG9kby1saXN0JykuaHRtbCgn
Jyk7Ci0gICAgYXBwLnRvZG9zLmVhY2godGhpcy5hZGRPbmUsIHRoaXMpOwotICAgIH0sCi0KLSAg
ICBmaWx0ZXJPbmU6IGZ1bmN0aW9uICh0b2RvKSB7Ci0gICAgdG9kby50cmlnZ2VyKCd2aXNpYmxl
Jyk7Ci0gICAgfSwKLQotICAgIGZpbHRlckFsbDogZnVuY3Rpb24gKCkgewotICAgIGFwcC50b2Rv
cy5lYWNoKHRoaXMuZmlsdGVyT25lLCB0aGlzKTsKLSAgICB9LAotCi0gICAgLy8gR2VuZXJhdGUg
dGhlIGF0dHJpYnV0ZXMgZm9yIGEgbmV3IFRvZG8gaXRlbS4KLSAgICBuZXdBdHRyaWJ1dGVzOiBm
dW5jdGlvbiAoKSB7Ci0gICAgcmV0dXJuIHsKLSAgICB0aXRsZTogdGhpcy4kaW5wdXQudmFsKCku
dHJpbSgpLAotICAgIG9yZGVyOiBhcHAudG9kb3MubmV4dE9yZGVyKCksCi0gICAgY29tcGxldGVk
OiBmYWxzZQotICAgIH07Ci0gICAgfSwKLQotICAgIC8vIElmIHlvdSBoaXQgcmV0dXJuIGluIHRo
ZSBtYWluIGlucHV0IGZpZWxkLCBjcmVhdGUgbmV3ICoqVG9kbyoqIG1vZGVsLAotICAgIC8vIHBl
cnNpc3RpbmcgaXQgdG8gKmxvY2FsU3RvcmFnZSouCi0gICAgY3JlYXRlT25FbnRlcjogZnVuY3Rp
b24gKGUpIHsKLSAgICBpZiAoZS53aGljaCAhPT0gRU5URVJfS0VZIHx8ICF0aGlzLiRpbnB1dC52
YWwoKS50cmltKCkpIHsKLSAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXBwLnRvZG9zLmNyZWF0
ZSh0aGlzLm5ld0F0dHJpYnV0ZXMoKSk7Ci0gICAgdGhpcy4kaW5wdXQudmFsKCcnKTsKLSAgICB9
LAotCi0gICAgLy8gQ2xlYXIgYWxsIGNvbXBsZXRlZCB0b2RvIGl0ZW1zLCBkZXN0cm95aW5nIHRo
ZWlyIG1vZGVscy4KLSAgICBjbGVhckNvbXBsZXRlZDogZnVuY3Rpb24gKCkgewotICAgIF8uaW52
b2tlKGFwcC50b2Rvcy5jb21wbGV0ZWQoKSwgJ2Rlc3Ryb3knKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfSwKLQotICAgIHRvZ2dsZUFsbENvbXBsZXRlOiBmdW5jdGlvbiAoKSB7Ci0gICAgdmFy
IGNvbXBsZXRlZCA9IHRoaXMuYWxsQ2hlY2tib3guY2hlY2tlZDsKLQotICAgIGFwcC50b2Rvcy5l
YWNoKGZ1bmN0aW9uICh0b2RvKSB7Ci0gICAgdG9kby5zYXZlKHsKLSAgICAnY29tcGxldGVkJzog
Y29tcGxldGVkCi0gICAgfSk7Ci0gICAgfSk7Ci0gICAgfQorICAgICAgICAvLyBJbnN0ZWFkIG9m
IGdlbmVyYXRpbmcgYSBuZXcgZWxlbWVudCwgYmluZCB0byB0aGUgZXhpc3Rpbmcgc2tlbGV0b24g
b2YKKyAgICAgICAgLy8gdGhlIEFwcCBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIEhUTUwuCisgICAg
ICAgIGVsOiAnLnRvZG9hcHAnLAorCisgICAgICAgIC8vIE91ciB0ZW1wbGF0ZSBmb3IgdGhlIGxp
bmUgb2Ygc3RhdGlzdGljcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBhcHAuCisgICAgICAgIHN0YXRz
VGVtcGxhdGU6IF8udGVtcGxhdGUoJCgnI3N0YXRzLXRlbXBsYXRlJykuaHRtbCgpKSwKKworICAg
ICAgICAvLyBEZWxlZ2F0ZWQgZXZlbnRzIGZvciBjcmVhdGluZyBuZXcgaXRlbXMsIGFuZCBjbGVh
cmluZyBjb21wbGV0ZWQgb25lcy4KKyAgICAgICAgZXZlbnRzOiB7CisgICAgICAgICAgICAna2V5
cHJlc3MgLm5ldy10b2RvJzogJ2NyZWF0ZU9uRW50ZXInLAorICAgICAgICAgICAgJ2NsaWNrIC5j
bGVhci1jb21wbGV0ZWQnOiAnY2xlYXJDb21wbGV0ZWQnLAorICAgICAgICAgICAgJ2NsaWNrIC50
b2dnbGUtYWxsJzogJ3RvZ2dsZUFsbENvbXBsZXRlJworICAgICAgICB9LAorCisgICAgICAgIC8v
IEF0IGluaXRpYWxpemF0aW9uIHdlIGJpbmQgdG8gdGhlIHJlbGV2YW50IGV2ZW50cyBvbiB0aGUg
YFRvZG9zYAorICAgICAgICAvLyBjb2xsZWN0aW9uLCB3aGVuIGl0ZW1zIGFyZSBhZGRlZCBvciBj
aGFuZ2VkLiBLaWNrIHRoaW5ncyBvZmYgYnkKKyAgICAgICAgLy8gbG9hZGluZyBhbnkgcHJlZXhp
c3RpbmcgdG9kb3MgdGhhdCBtaWdodCBiZSBzYXZlZCBpbiAqbG9jYWxTdG9yYWdlKi4KKyAgICAg
ICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy5hbGxDaGVja2Jv
eCA9IHRoaXMuJCgnLnRvZ2dsZS1hbGwnKVswXTsKKyAgICAgICAgICAgIHRoaXMuJGlucHV0ID0g
dGhpcy4kKCcubmV3LXRvZG8nKTsKKyAgICAgICAgICAgIHRoaXMuJGZvb3RlciA9IHRoaXMuJCgn
LmZvb3RlcicpOworICAgICAgICAgICAgdGhpcy4kbWFpbiA9IHRoaXMuJCgnLm1haW4nKTsKKyAg
ICAgICAgICAgIHRoaXMuJGxpc3QgPSAkKCcudG9kby1saXN0Jyk7CisKKyAgICAgICAgICAgIHRo
aXMubGlzdGVuVG8oYXBwLnRvZG9zLCAnYWRkJywgdGhpcy5hZGRPbmUpOworICAgICAgICAgICAg
dGhpcy5saXN0ZW5UbyhhcHAudG9kb3MsICdyZXNldCcsIHRoaXMuYWRkQWxsKTsKKyAgICAgICAg
ICAgIHRoaXMubGlzdGVuVG8oYXBwLnRvZG9zLCAnY2hhbmdlOmNvbXBsZXRlZCcsIHRoaXMuZmls
dGVyT25lKTsKKyAgICAgICAgICAgIHRoaXMubGlzdGVuVG8oYXBwLnRvZG9zLCAnZmlsdGVyJywg
dGhpcy5maWx0ZXJBbGwpOworICAgICAgICAgICAgdGhpcy5saXN0ZW5UbyhhcHAudG9kb3MsICdh
bGwnLCBfLmRlYm91bmNlKHRoaXMucmVuZGVyLCAwKSk7CisKKyAgICAgICAgICAgIC8vIFN1cHBy
ZXNzZXMgJ2FkZCcgZXZlbnRzIHdpdGgge3Jlc2V0OiB0cnVlfSBhbmQgcHJldmVudHMgdGhlIGFw
cCB2aWV3CisgICAgICAgICAgICAvLyBmcm9tIGJlaW5nIHJlLXJlbmRlcmVkIGZvciBldmVyeSBt
b2RlbC4gT25seSByZW5kZXJzIHdoZW4gdGhlICdyZXNldCcKKyAgICAgICAgICAgIC8vIGV2ZW50
IGlzIHRyaWdnZXJlZCBhdCB0aGUgZW5kIG9mIHRoZSBmZXRjaC4KKyAgICAgICAgICAgIGFwcC50
b2Rvcy5mZXRjaCh7cmVzZXQ6IHRydWV9KTsKKyAgICAgICAgfSwKKworICAgICAgICAvLyBSZS1y
ZW5kZXJpbmcgdGhlIEFwcCBqdXN0IG1lYW5zIHJlZnJlc2hpbmcgdGhlIHN0YXRpc3RpY3MgLS0g
dGhlIHJlc3QKKyAgICAgICAgLy8gb2YgdGhlIGFwcCBkb2Vzbid0IGNoYW5nZS4KKyAgICAgICAg
cmVuZGVyOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgY29tcGxldGVkID0gYXBwLnRv
ZG9zLmNvbXBsZXRlZCgpLmxlbmd0aDsKKyAgICAgICAgICAgIHZhciByZW1haW5pbmcgPSBhcHAu
dG9kb3MucmVtYWluaW5nKCkubGVuZ3RoOworCisgICAgICAgICAgICBpZiAoYXBwLnRvZG9zLmxl
bmd0aCkgeworICAgICAgICAgICAgICAgIHRoaXMuJG1haW4uc2hvdygpOworICAgICAgICAgICAg
ICAgIHRoaXMuJGZvb3Rlci5zaG93KCk7CisKKyAgICAgICAgICAgICAgICB0aGlzLiRmb290ZXIu
aHRtbCh0aGlzLnN0YXRzVGVtcGxhdGUoeworICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQ6
IGNvbXBsZXRlZCwKKyAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nOiByZW1haW5pbmcKKyAg
ICAgICAgICAgICAgICB9KSk7CisKKyAgICAgICAgICAgICAgICB0aGlzLiQoJy5maWx0ZXJzIGxp
IGEnKQorICAgICAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJykKKyAgICAg
ICAgICAgICAgICAgICAgLmZpbHRlcignW2hyZWY9IiMvJyArIChhcHAuVG9kb0ZpbHRlciB8fCAn
JykgKyAnIl0nKQorICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuJG1haW4uaGlkZSgpOwor
ICAgICAgICAgICAgICAgIHRoaXMuJGZvb3Rlci5oaWRlKCk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHRoaXMuYWxsQ2hlY2tib3guY2hlY2tlZCA9ICFyZW1haW5pbmc7CisgICAgICAg
IH0sCisKKyAgICAgICAgLy8gQWRkIGEgc2luZ2xlIHRvZG8gaXRlbSB0byB0aGUgbGlzdCBieSBj
cmVhdGluZyBhIHZpZXcgZm9yIGl0LCBhbmQKKyAgICAgICAgLy8gYXBwZW5kaW5nIGl0cyBlbGVt
ZW50IHRvIHRoZSBgPHVsPmAuCisgICAgICAgIGFkZE9uZTogZnVuY3Rpb24gKHRvZG8pIHsKKyAg
ICAgICAgICAgIHZhciB2aWV3ID0gbmV3IGFwcC5Ub2RvVmlldyh7IG1vZGVsOiB0b2RvIH0pOwor
ICAgICAgICAgICAgdGhpcy4kbGlzdC5hcHBlbmQodmlldy5yZW5kZXIoKS5lbCk7CisgICAgICAg
IH0sCisKKyAgICAgICAgLy8gQWRkIGFsbCBpdGVtcyBpbiB0aGUgKipUb2RvcyoqIGNvbGxlY3Rp
b24gYXQgb25jZS4KKyAgICAgICAgYWRkQWxsOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0
aGlzLiRsaXN0Lmh0bWwoJycpOworICAgICAgICAgICAgYXBwLnRvZG9zLmVhY2godGhpcy5hZGRP
bmUsIHRoaXMpOworICAgICAgICB9LAorCisgICAgICAgIGZpbHRlck9uZTogZnVuY3Rpb24gKHRv
ZG8pIHsKKyAgICAgICAgICAgIHRvZG8udHJpZ2dlcigndmlzaWJsZScpOworICAgICAgICB9LAor
CisgICAgICAgIGZpbHRlckFsbDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgYXBwLnRvZG9z
LmVhY2godGhpcy5maWx0ZXJPbmUsIHRoaXMpOworICAgICAgICB9LAorCisgICAgICAgIC8vIEdl
bmVyYXRlIHRoZSBhdHRyaWJ1dGVzIGZvciBhIG5ldyBUb2RvIGl0ZW0uCisgICAgICAgIG5ld0F0
dHJpYnV0ZXM6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgdGl0bGU6IHRoaXMuJGlucHV0LnZhbCgpLnRyaW0oKSwKKyAgICAgICAgICAgICAgICBv
cmRlcjogYXBwLnRvZG9zLm5leHRPcmRlcigpLAorICAgICAgICAgICAgICAgIGNvbXBsZXRlZDog
ZmFsc2UKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgLy8gSWYgeW91IGhp
dCByZXR1cm4gaW4gdGhlIG1haW4gaW5wdXQgZmllbGQsIGNyZWF0ZSBuZXcgKipUb2RvKiogbW9k
ZWwsCisgICAgICAgIC8vIHBlcnNpc3RpbmcgaXQgdG8gKm1lbW9yeSouCisgICAgICAgIGNyZWF0
ZU9uRW50ZXI6IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICBpZiAoZS53aGljaCA9PT0gRU5U
RVJfS0VZICYmIHRoaXMuJGlucHV0LnZhbCgpLnRyaW0oKSkgeworICAgICAgICAgICAgICAgIGFw
cC50b2Rvcy5jcmVhdGUodGhpcy5uZXdBdHRyaWJ1dGVzKCkpOworICAgICAgICAgICAgICAgIHRo
aXMuJGlucHV0LnZhbCgnJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAg
Ly8gQ2xlYXIgYWxsIGNvbXBsZXRlZCB0b2RvIGl0ZW1zLCBkZXN0cm95aW5nIHRoZWlyIG1vZGVs
cy4KKyAgICAgICAgY2xlYXJDb21wbGV0ZWQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIF8u
aW52b2tlKGFwcC50b2Rvcy5jb21wbGV0ZWQoKSwgJ2Rlc3Ryb3knKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfSwKKworICAgICAgICB0b2dnbGVBbGxDb21wbGV0ZTogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGNvbXBsZXRlZCA9IHRoaXMuYWxsQ2hlY2tib3gu
Y2hlY2tlZDsKKworICAgICAgICAgICAgYXBwLnRvZG9zLmVhY2goZnVuY3Rpb24gKHRvZG8pIHsK
KyAgICAgICAgICAgICAgICB0b2RvLnNhdmUoeworICAgICAgICAgICAgICAgICAgICBjb21wbGV0
ZWQ6IGNvbXBsZXRlZAorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0KICAgICB9KTsKIH0pKGpRdWVyeSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNr
Ym9uZS9qcy92aWV3cy90b2RvLXZpZXcuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9qcy92aWV3
cy90b2RvLXZpZXcuanMKaW5kZXggMWY4MmU3ZjNiZTA2ZDU2ZmQzMjQ1ZDViNTNmNjg4ZWNmOWMx
ZTlhYS4uYmIzYjQwNDNmZjZlMDc3MWFkYjAzZTIwMjA2ODQxNWI3MzAzYmZlZCAxMDA2NDQKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvanMvdmlld3MvdG9kby12aWV3LmpzCisrKyBiL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL2JhY2tib25lL2pzL3ZpZXdzL3RvZG8tdmlldy5qcwpAQCAtMSw0ICsxLDQgQEAKLS8q
Z2xvYmFsIEJhY2tib25lLCBqUXVlcnksIF8sIEVOVEVSX0tFWSAqLworLypnbG9iYWwgQmFja2Jv
bmUsIGpRdWVyeSwgXywgRU5URVJfS0VZLCBFU0NfS0VZICovCiB2YXIgYXBwID0gYXBwIHx8IHt9
OwogCiAoZnVuY3Rpb24gKCQpIHsKQEAgLTksODYgKzksMTE1IEBAIHZhciBhcHAgPSBhcHAgfHwg
e307CiAKICAgICAvLyBUaGUgRE9NIGVsZW1lbnQgZm9yIGEgdG9kbyBpdGVtLi4uCiAgICAgYXBw
LlRvZG9WaWV3ID0gQmFja2JvbmUuVmlldy5leHRlbmQoewotICAgIC8vLi4uIGlzIGEgbGlzdCB0
YWcuCi0gICAgdGFnTmFtZTogICdsaScsCi0KLSAgICAvLyBDYWNoZSB0aGUgdGVtcGxhdGUgZnVu
Y3Rpb24gZm9yIGEgc2luZ2xlIGl0ZW0uCi0gICAgdGVtcGxhdGU6IF8udGVtcGxhdGUoJCgnI2l0
ZW0tdGVtcGxhdGUnKS5odG1sKCkpLAotCi0gICAgLy8gVGhlIERPTSBldmVudHMgc3BlY2lmaWMg
dG8gYW4gaXRlbS4KLSAgICBldmVudHM6IHsKLSAgICAnY2xpY2sgLnRvZ2dsZSc6ICd0b2dnbGVD
b21wbGV0ZWQnLAotICAgICdkYmxjbGljayBsYWJlbCc6ICdlZGl0JywKLSAgICAnY2xpY2sgLmRl
c3Ryb3knOiAnY2xlYXInLAotICAgICdrZXlwcmVzcyAuZWRpdCc6ICd1cGRhdGVPbkVudGVyJywK
LSAgICAnYmx1ciAuZWRpdCc6ICdjbG9zZScKLSAgICB9LAotCi0gICAgLy8gVGhlIFRvZG9WaWV3
IGxpc3RlbnMgZm9yIGNoYW5nZXMgdG8gaXRzIG1vZGVsLCByZS1yZW5kZXJpbmcuIFNpbmNlIHRo
ZXJlJ3MKLSAgICAvLyBhIG9uZS10by1vbmUgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBhICoqVG9k
byoqIGFuZCBhICoqVG9kb1ZpZXcqKiBpbiB0aGlzCi0gICAgLy8gYXBwLCB3ZSBzZXQgYSBkaXJl
Y3QgcmVmZXJlbmNlIG9uIHRoZSBtb2RlbCBmb3IgY29udmVuaWVuY2UuCi0gICAgaW5pdGlhbGl6
ZTogZnVuY3Rpb24gKCkgewotICAgIHRoaXMubGlzdGVuVG8odGhpcy5tb2RlbCwgJ2NoYW5nZScs
IHRoaXMucmVuZGVyKTsKLSAgICB0aGlzLmxpc3RlblRvKHRoaXMubW9kZWwsICdkZXN0cm95Jywg
dGhpcy5yZW1vdmUpOwotICAgIHRoaXMubGlzdGVuVG8odGhpcy5tb2RlbCwgJ3Zpc2libGUnLCB0
aGlzLnRvZ2dsZVZpc2libGUpOwotICAgIH0sCi0KLSAgICAvLyBSZS1yZW5kZXIgdGhlIHRpdGxl
cyBvZiB0aGUgdG9kbyBpdGVtLgotICAgIHJlbmRlcjogZnVuY3Rpb24gKCkgewotICAgIHRoaXMu
JGVsLmh0bWwodGhpcy50ZW1wbGF0ZSh0aGlzLm1vZGVsLnRvSlNPTigpKSk7Ci0gICAgdGhpcy4k
ZWwudG9nZ2xlQ2xhc3MoJ2NvbXBsZXRlZCcsIHRoaXMubW9kZWwuZ2V0KCdjb21wbGV0ZWQnKSk7
Ci0gICAgdGhpcy50b2dnbGVWaXNpYmxlKCk7Ci0gICAgdGhpcy4kaW5wdXQgPSB0aGlzLiQoJy5l
ZGl0Jyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLQotICAgIHRvZ2dsZVZpc2libGU6IGZ1
bmN0aW9uICgpIHsKLSAgICB0aGlzLiRlbC50b2dnbGVDbGFzcygnaGlkZGVuJywgdGhpcy5pc0hp
ZGRlbigpKTsKLSAgICB9LAotCi0gICAgaXNIaWRkZW46IGZ1bmN0aW9uICgpIHsKLSAgICB2YXIg
aXNDb21wbGV0ZWQgPSB0aGlzLm1vZGVsLmdldCgnY29tcGxldGVkJyk7Ci0gICAgcmV0dXJuICgv
LyBoaWRkZW4gY2FzZXMgb25seQotICAgICghaXNDb21wbGV0ZWQgJiYgYXBwLlRvZG9GaWx0ZXIg
PT09ICdjb21wbGV0ZWQnKSB8fAotICAgIChpc0NvbXBsZXRlZCAmJiBhcHAuVG9kb0ZpbHRlciA9
PT0gJ2FjdGl2ZScpCi0gICAgKTsKLSAgICB9LAotCi0gICAgLy8gVG9nZ2xlIHRoZSBgImNvbXBs
ZXRlZCJgIHN0YXRlIG9mIHRoZSBtb2RlbC4KLSAgICB0b2dnbGVDb21wbGV0ZWQ6IGZ1bmN0aW9u
ICgpIHsKLSAgICB0aGlzLm1vZGVsLnRvZ2dsZSgpOwotICAgIH0sCi0KLSAgICAvLyBTd2l0Y2gg
dGhpcyB2aWV3IGludG8gYCJlZGl0aW5nImAgbW9kZSwgZGlzcGxheWluZyB0aGUgaW5wdXQgZmll
bGQuCi0gICAgZWRpdDogZnVuY3Rpb24gKCkgewotICAgIHRoaXMuJGVsLmFkZENsYXNzKCdlZGl0
aW5nJyk7Ci0gICAgdGhpcy4kaW5wdXQuZm9jdXMoKTsKLSAgICB9LAotCi0gICAgLy8gQ2xvc2Ug
dGhlIGAiZWRpdGluZyJgIG1vZGUsIHNhdmluZyBjaGFuZ2VzIHRvIHRoZSB0b2RvLgotICAgIGNs
b3NlOiBmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIHRyaW1tZWRWYWx1ZSA9IHRoaXMuJGlucHV0LnZh
bCgpLnRyaW0oKTsKLSAgICB0aGlzLiRpbnB1dC52YWwodHJpbW1lZFZhbHVlKTsKLQotICAgIGlm
ICh0cmltbWVkVmFsdWUpIHsKLSAgICB0aGlzLm1vZGVsLnNhdmUoeyB0aXRsZTogdHJpbW1lZFZh
bHVlIH0pOwotICAgIH0gZWxzZSB7Ci0gICAgdGhpcy5jbGVhcigpOwotICAgIH0KLQotICAgIHRo
aXMuJGVsLnJlbW92ZUNsYXNzKCdlZGl0aW5nJyk7Ci0gICAgfSwKLQotICAgIC8vIElmIHlvdSBo
aXQgYGVudGVyYCwgd2UncmUgdGhyb3VnaCBlZGl0aW5nIHRoZSBpdGVtLgotICAgIHVwZGF0ZU9u
RW50ZXI6IGZ1bmN0aW9uIChlKSB7Ci0gICAgaWYgKGUud2hpY2ggPT09IEVOVEVSX0tFWSkgewot
ICAgIHRoaXMuY2xvc2UoKTsKLSAgICB9Ci0gICAgfSwKLQotICAgIC8vIFJlbW92ZSB0aGUgaXRl
bSwgZGVzdHJveSB0aGUgbW9kZWwgZnJvbSAqbG9jYWxTdG9yYWdlKiBhbmQgZGVsZXRlIGl0cyB2
aWV3LgotICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7Ci0gICAgdGhpcy5tb2RlbC5kZXN0cm95KCk7
Ci0gICAgfQorICAgICAgICAvLy4uLiBpcyBhIGxpc3QgdGFnLgorICAgICAgICB0YWdOYW1lOiAg
J2xpJywKKworICAgICAgICAvLyBDYWNoZSB0aGUgdGVtcGxhdGUgZnVuY3Rpb24gZm9yIGEgc2lu
Z2xlIGl0ZW0uCisgICAgICAgIHRlbXBsYXRlOiBfLnRlbXBsYXRlKCQoJyNpdGVtLXRlbXBsYXRl
JykuaHRtbCgpKSwKKworICAgICAgICAvLyBUaGUgRE9NIGV2ZW50cyBzcGVjaWZpYyB0byBhbiBp
dGVtLgorICAgICAgICBldmVudHM6IHsKKyAgICAgICAgICAgICdjbGljayAudG9nZ2xlJzogJ3Rv
Z2dsZUNvbXBsZXRlZCcsCisgICAgICAgICAgICAnZGJsY2xpY2sgbGFiZWwnOiAnZWRpdCcsCisg
ICAgICAgICAgICAnY2xpY2sgLmRlc3Ryb3knOiAnY2xlYXInLAorICAgICAgICAgICAgJ2tleXBy
ZXNzIC5lZGl0JzogJ3VwZGF0ZU9uRW50ZXInLAorICAgICAgICAgICAgJ2tleWRvd24gLmVkaXQn
OiAncmV2ZXJ0T25Fc2NhcGUnLAorICAgICAgICAgICAgJ2JsdXIgLmVkaXQnOiAnY2xvc2UnCisg
ICAgICAgIH0sCisKKyAgICAgICAgLy8gVGhlIFRvZG9WaWV3IGxpc3RlbnMgZm9yIGNoYW5nZXMg
dG8gaXRzIG1vZGVsLCByZS1yZW5kZXJpbmcuIFNpbmNlCisgICAgICAgIC8vIHRoZXJlJ3MgYSBv
bmUtdG8tb25lIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gYSAqKlRvZG8qKiBhbmQgYQorICAgICAg
ICAvLyAqKlRvZG9WaWV3KiogaW4gdGhpcyBhcHAsIHdlIHNldCBhIGRpcmVjdCByZWZlcmVuY2Ug
b24gdGhlIG1vZGVsIGZvcgorICAgICAgICAvLyBjb252ZW5pZW5jZS4KKyAgICAgICAgaW5pdGlh
bGl6ZTogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy5saXN0ZW5Ubyh0aGlzLm1vZGVs
LCAnY2hhbmdlJywgdGhpcy5yZW5kZXIpOworICAgICAgICAgICAgdGhpcy5saXN0ZW5Ubyh0aGlz
Lm1vZGVsLCAnZGVzdHJveScsIHRoaXMucmVtb3ZlKTsKKyAgICAgICAgICAgIHRoaXMubGlzdGVu
VG8odGhpcy5tb2RlbCwgJ3Zpc2libGUnLCB0aGlzLnRvZ2dsZVZpc2libGUpOworICAgICAgICB9
LAorCisgICAgICAgIC8vIFJlLXJlbmRlciB0aGUgdGl0bGVzIG9mIHRoZSB0b2RvIGl0ZW0uCisg
ICAgICAgIHJlbmRlcjogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgLy8gQmFja2JvbmUgTG9j
YWxTdG9yYWdlIGlzIGFkZGluZyBgaWRgIGF0dHJpYnV0ZSBpbnN0YW50bHkgYWZ0ZXIKKyAgICAg
ICAgICAgIC8vIGNyZWF0aW5nIGEgbW9kZWwuICBUaGlzIGNhdXNlcyBvdXIgVG9kb1ZpZXcgdG8g
cmVuZGVyIHR3aWNlLiBPbmNlCisgICAgICAgICAgICAvLyBhZnRlciBjcmVhdGluZyBhIG1vZGVs
IGFuZCBvbmNlIG9uIGBpZGAgY2hhbmdlLiAgV2Ugd2FudCB0bworICAgICAgICAgICAgLy8gZmls
dGVyIG91dCB0aGUgc2Vjb25kIHJlZHVuZGFudCByZW5kZXIsIHdoaWNoIGlzIGNhdXNlZCBieSB0
aGlzCisgICAgICAgICAgICAvLyBgaWRgIGNoYW5nZS4gIEl0J3Mga25vd24gQmFja2JvbmUgTG9j
YWxTdG9yYWdlIGJ1ZywgdGhlcmVmb3JlCisgICAgICAgICAgICAvLyB3ZSd2ZSB0byBjcmVhdGUg
YSB3b3JrYXJvdW5kLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Rhc3RlanMv
dG9kb212Yy9pc3N1ZXMvNDY5CisgICAgICAgICAgICBpZiAodGhpcy5tb2RlbC5jaGFuZ2VkLmlk
ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHRoaXMuJGVsLmh0bWwodGhpcy50ZW1wbGF0ZSh0aGlzLm1vZGVsLnRv
SlNPTigpKSk7CisgICAgICAgICAgICB0aGlzLiRlbC50b2dnbGVDbGFzcygnY29tcGxldGVkJywg
dGhpcy5tb2RlbC5nZXQoJ2NvbXBsZXRlZCcpKTsKKyAgICAgICAgICAgIHRoaXMudG9nZ2xlVmlz
aWJsZSgpOworICAgICAgICAgICAgdGhpcy4kaW5wdXQgPSB0aGlzLiQoJy5lZGl0Jyk7CisgICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSwKKworICAgICAgICB0b2dnbGVWaXNpYmxl
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0aGlzLiRlbC50b2dnbGVDbGFzcygnaGlkZGVu
JywgdGhpcy5pc0hpZGRlbigpKTsKKyAgICAgICAgfSwKKworICAgICAgICBpc0hpZGRlbjogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuZ2V0KCdjb21wbGV0ZWQn
KSA/CisgICAgICAgICAgICAgICAgYXBwLlRvZG9GaWx0ZXIgPT09ICdhY3RpdmUnIDoKKyAgICAg
ICAgICAgICAgICBhcHAuVG9kb0ZpbHRlciA9PT0gJ2NvbXBsZXRlZCc7CisgICAgICAgIH0sCisK
KyAgICAgICAgLy8gVG9nZ2xlIHRoZSBgImNvbXBsZXRlZCJgIHN0YXRlIG9mIHRoZSBtb2RlbC4K
KyAgICAgICAgdG9nZ2xlQ29tcGxldGVkOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0aGlz
Lm1vZGVsLnRvZ2dsZSgpOworICAgICAgICB9LAorCisgICAgICAgIC8vIFN3aXRjaCB0aGlzIHZp
ZXcgaW50byBgImVkaXRpbmciYCBtb2RlLCBkaXNwbGF5aW5nIHRoZSBpbnB1dCBmaWVsZC4KKyAg
ICAgICAgZWRpdDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy4kZWwuYWRkQ2xhc3Mo
J2VkaXRpbmcnKTsKKyAgICAgICAgICAgIHRoaXMuJGlucHV0LmZvY3VzKCk7CisgICAgICAgIH0s
CisKKyAgICAgICAgLy8gQ2xvc2UgdGhlIGAiZWRpdGluZyJgIG1vZGUsIHNhdmluZyBjaGFuZ2Vz
IHRvIHRoZSB0b2RvLgorICAgICAgICBjbG9zZTogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
dmFyIHZhbHVlID0gdGhpcy4kaW5wdXQudmFsKCk7CisgICAgICAgICAgICB2YXIgdHJpbW1lZFZh
bHVlID0gdmFsdWUudHJpbSgpOworCisgICAgICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGhh
bmRsZSBibHVyIGV2ZW50cyBmcm9tIGFuIGl0ZW0gdGhhdCBpcyBubworICAgICAgICAgICAgLy8g
bG9uZ2VyIGJlaW5nIGVkaXRlZC4gUmVseWluZyBvbiB0aGUgQ1NTIGNsYXNzIGhlcmUgaGFzIHRo
ZQorICAgICAgICAgICAgLy8gYmVuZWZpdCBvZiB1cyBub3QgaGF2aW5nIHRvIG1haW50YWluIHN0
YXRlIGluIHRoZSBET00gYW5kIHRoZQorICAgICAgICAgICAgLy8gSmF2YVNjcmlwdCBsb2dpYy4K
KyAgICAgICAgICAgIGlmICghdGhpcy4kZWwuaGFzQ2xhc3MoJ2VkaXRpbmcnKSkgeworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRyaW1t
ZWRWYWx1ZSkgeworICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2F2ZSh7IHRpdGxlOiB0cmlt
bWVkVmFsdWUgfSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMu
Y2xlYXIoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhpcy4kZWwucmVtb3ZlQ2xh
c3MoJ2VkaXRpbmcnKTsKKyAgICAgICAgfSwKKworICAgICAgICAvLyBJZiB5b3UgaGl0IGBlbnRl
cmAsIHdlJ3JlIHRocm91Z2ggZWRpdGluZyB0aGUgaXRlbS4KKyAgICAgICAgdXBkYXRlT25FbnRl
cjogZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIGlmIChlLndoaWNoID09PSBFTlRFUl9LRVkp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0sCisKKyAgICAgICAgLy8gSWYgeW91J3JlIHByZXNzaW5nIGBlc2NhcGVgIHdlIHJldmVydCB5
b3VyIGNoYW5nZSBieSBzaW1wbHkgbGVhdmluZworICAgICAgICAvLyB0aGUgYGVkaXRpbmdgIHN0
YXRlLgorICAgICAgICByZXZlcnRPbkVzY2FwZTogZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAg
IGlmIChlLndoaWNoID09PSBFU0NfS0VZKSB7CisgICAgICAgICAgICAgICAgdGhpcy4kZWwucmVt
b3ZlQ2xhc3MoJ2VkaXRpbmcnKTsKKyAgICAgICAgICAgICAgICAvLyBBbHNvIHJlc2V0IHRoZSBo
aWRkZW4gaW5wdXQgYmFjayB0byB0aGUgb3JpZ2luYWwgdmFsdWUuCisgICAgICAgICAgICAgICAg
dGhpcy4kaW5wdXQudmFsKHRoaXMubW9kZWwuZ2V0KCd0aXRsZScpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSwKKworICAgICAgICAvLyBSZW1vdmUgdGhlIGl0ZW0sIGRlc3Ryb3kgdGhlIG1v
ZGVsIGZyb20gKmxvY2FsU3RvcmFnZSogYW5kIGRlbGV0ZSBpdHMgdmlldy4KKyAgICAgICAgY2xl
YXI6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMubW9kZWwuZGVzdHJveSgpOworICAg
ICAgICB9CiAgICAgfSk7CiB9KShqUXVlcnkpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFj
a2JvbmUvbm9kZV9tb2R1bGVzL2JhY2tib25lL2JhY2tib25lLmpzIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFj
a2JvbmUvbm9kZV9tb2R1bGVzL2JhY2tib25lL2JhY2tib25lLmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1Y2Ni
MjJiZDAwYWYwM2RkZWVlNDZlOWE4MmU4ZjE5MzI0ZDlmODMKLS0tIC9kZXYvbnVsbAorKysgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9iYWNrYm9uZS9ub2RlX21vZHVsZXMvYmFja2JvbmUvYmFja2JvbmUuanMKQEAg
LTAsMCArMSwxOTIwIEBACisvLyAgICAgQmFja2JvbmUuanMgMS4zLjMKKworLy8gICAgIChjKSAy
MDEwLTIwMTYgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZl
IFJlcG9ydGVycyAmIEVkaXRvcnMKKy8vICAgICBCYWNrYm9uZSBtYXkgYmUgZnJlZWx5IGRpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KKy8vICAgICBGb3IgYWxsIGRldGFpbHMgYW5k
IGRvY3VtZW50YXRpb246CisvLyAgICAgaHR0cDovL2JhY2tib25lanMub3JnCisKKyhmdW5jdGlv
bihmYWN0b3J5KSB7CisKKyAgLy8gRXN0YWJsaXNoIHRoZSByb290IG9iamVjdCwgYHdpbmRvd2Ag
KGBzZWxmYCkgaW4gdGhlIGJyb3dzZXIsIG9yIGBnbG9iYWxgIG9uIHRoZSBzZXJ2ZXIuCisgIC8v
IFdlIHVzZSBgc2VsZmAgaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9y
dC4KKyAgdmFyIHJvb3QgPSAodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZi5zZWxmID09
PSBzZWxmICYmIHNlbGYpIHx8CisgICAgICAgICAgICAodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0
JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsKTsKKworICAvLyBTZXQgdXAg
QmFja2JvbmUgYXBwcm9wcmlhdGVseSBmb3IgdGhlIGVudmlyb25tZW50LiBTdGFydCB3aXRoIEFN
RC4KKyAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgewor
ICAgIGRlZmluZShbJ3VuZGVyc2NvcmUnLCAnanF1ZXJ5JywgJ2V4cG9ydHMnXSwgZnVuY3Rpb24o
XywgJCwgZXhwb3J0cykgeworICAgICAgLy8gRXhwb3J0IGdsb2JhbCBldmVuIGluIEFNRCBjYXNl
IGluIGNhc2UgdGhpcyBzY3JpcHQgaXMgbG9hZGVkIHdpdGgKKyAgICAgIC8vIG90aGVycyB0aGF0
IG1heSBzdGlsbCBleHBlY3QgYSBnbG9iYWwgQmFja2JvbmUuCisgICAgICByb290LkJhY2tib25l
ID0gZmFjdG9yeShyb290LCBleHBvcnRzLCBfLCAkKTsKKyAgICB9KTsKKworICAvLyBOZXh0IGZv
ciBOb2RlLmpzIG9yIENvbW1vbkpTLiBqUXVlcnkgbWF5IG5vdCBiZSBuZWVkZWQgYXMgYSBtb2R1
bGUuCisgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7CisgICAg
dmFyIF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyksICQ7CisgICAgdHJ5IHsgJCA9IHJlcXVpcmUo
J2pxdWVyeScpOyB9IGNhdGNoIChlKSB7fQorICAgIGZhY3Rvcnkocm9vdCwgZXhwb3J0cywgXywg
JCk7CisKKyAgLy8gRmluYWxseSwgYXMgYSBicm93c2VyIGdsb2JhbC4KKyAgfSBlbHNlIHsKKyAg
ICByb290LkJhY2tib25lID0gZmFjdG9yeShyb290LCB7fSwgcm9vdC5fLCAocm9vdC5qUXVlcnkg
fHwgcm9vdC5aZXB0byB8fCByb290LmVuZGVyIHx8IHJvb3QuJCkpOworICB9CisKK30pKGZ1bmN0
aW9uKHJvb3QsIEJhY2tib25lLCBfLCAkKSB7CisKKyAgLy8gSW5pdGlhbCBTZXR1cAorICAvLyAt
LS0tLS0tLS0tLS0tCisKKyAgLy8gU2F2ZSB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhlIGBCYWNr
Ym9uZWAgdmFyaWFibGUsIHNvIHRoYXQgaXQgY2FuIGJlCisgIC8vIHJlc3RvcmVkIGxhdGVyIG9u
LCBpZiBgbm9Db25mbGljdGAgaXMgdXNlZC4KKyAgdmFyIHByZXZpb3VzQmFja2JvbmUgPSByb290
LkJhY2tib25lOworCisgIC8vIENyZWF0ZSBhIGxvY2FsIHJlZmVyZW5jZSB0byBhIGNvbW1vbiBh
cnJheSBtZXRob2Qgd2UnbGwgd2FudCB0byB1c2UgbGF0ZXIuCisgIHZhciBzbGljZSA9IEFycmF5
LnByb3RvdHlwZS5zbGljZTsKKworICAvLyBDdXJyZW50IHZlcnNpb24gb2YgdGhlIGxpYnJhcnku
IEtlZXAgaW4gc3luYyB3aXRoIGBwYWNrYWdlLmpzb25gLgorICBCYWNrYm9uZS5WRVJTSU9OID0g
JzEuMy4zJzsKKworICAvLyBGb3IgQmFja2JvbmUncyBwdXJwb3NlcywgalF1ZXJ5LCBaZXB0bywg
RW5kZXIsIG9yIE15IExpYnJhcnkgKGtpZGRpbmcpIG93bnMKKyAgLy8gdGhlIGAkYCB2YXJpYWJs
ZS4KKyAgQmFja2JvbmUuJCA9ICQ7CisKKyAgLy8gUnVucyBCYWNrYm9uZS5qcyBpbiAqbm9Db25m
bGljdCogbW9kZSwgcmV0dXJuaW5nIHRoZSBgQmFja2JvbmVgIHZhcmlhYmxlCisgIC8vIHRvIGl0
cyBwcmV2aW91cyBvd25lci4gUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGlzIEJhY2tib25lIG9i
amVjdC4KKyAgQmFja2JvbmUubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkgeworICAgIHJvb3QuQmFj
a2JvbmUgPSBwcmV2aW91c0JhY2tib25lOworICAgIHJldHVybiB0aGlzOworICB9OworCisgIC8v
IFR1cm4gb24gYGVtdWxhdGVIVFRQYCB0byBzdXBwb3J0IGxlZ2FjeSBIVFRQIHNlcnZlcnMuIFNl
dHRpbmcgdGhpcyBvcHRpb24KKyAgLy8gd2lsbCBmYWtlIGAiUEFUQ0giYCwgYCJQVVQiYCBhbmQg
YCJERUxFVEUiYCByZXF1ZXN0cyB2aWEgdGhlIGBfbWV0aG9kYCBwYXJhbWV0ZXIgYW5kCisgIC8v
IHNldCBhIGBYLUh0dHAtTWV0aG9kLU92ZXJyaWRlYCBoZWFkZXIuCisgIEJhY2tib25lLmVtdWxh
dGVIVFRQID0gZmFsc2U7CisKKyAgLy8gVHVybiBvbiBgZW11bGF0ZUpTT05gIHRvIHN1cHBvcnQg
bGVnYWN5IHNlcnZlcnMgdGhhdCBjYW4ndCBkZWFsIHdpdGggZGlyZWN0CisgIC8vIGBhcHBsaWNh
dGlvbi9qc29uYCByZXF1ZXN0cyAuLi4gdGhpcyB3aWxsIGVuY29kZSB0aGUgYm9keSBhcworICAv
LyBgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkYCBpbnN0ZWFkIGFuZCB3aWxsIHNl
bmQgdGhlIG1vZGVsIGluIGEKKyAgLy8gZm9ybSBwYXJhbSBuYW1lZCBgbW9kZWxgLgorICBCYWNr
Ym9uZS5lbXVsYXRlSlNPTiA9IGZhbHNlOworCisgIC8vIFByb3h5IEJhY2tib25lIGNsYXNzIG1l
dGhvZHMgdG8gVW5kZXJzY29yZSBmdW5jdGlvbnMsIHdyYXBwaW5nIHRoZSBtb2RlbCdzCisgIC8v
IGBhdHRyaWJ1dGVzYCBvYmplY3Qgb3IgY29sbGVjdGlvbidzIGBtb2RlbHNgIGFycmF5IGJlaGlu
ZCB0aGUgc2NlbmVzLgorICAvLworICAvLyBjb2xsZWN0aW9uLmZpbHRlcihmdW5jdGlvbihtb2Rl
bCkgeyByZXR1cm4gbW9kZWwuZ2V0KCdhZ2UnKSA+IDEwIH0pOworICAvLyBjb2xsZWN0aW9uLmVh
Y2godGhpcy5hZGRWaWV3KTsKKyAgLy8KKyAgLy8gYEZ1bmN0aW9uI2FwcGx5YCBjYW4gYmUgc2xv
dyBzbyB3ZSB1c2UgdGhlIG1ldGhvZCdzIGFyZyBjb3VudCwgaWYgd2Uga25vdyBpdC4KKyAgdmFy
IGFkZE1ldGhvZCA9IGZ1bmN0aW9uKGxlbmd0aCwgbWV0aG9kLCBhdHRyaWJ1dGUpIHsKKyAgICBz
d2l0Y2ggKGxlbmd0aCkgeworICAgICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiBfW21ldGhvZF0odGhpc1thdHRyaWJ1dGVdKTsKKyAgICAgIH07CisgICAgICBj
YXNlIDI6IHJldHVybiBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICByZXR1cm4gX1ttZXRob2Rd
KHRoaXNbYXR0cmlidXRlXSwgdmFsdWUpOworICAgICAgfTsKKyAgICAgIGNhc2UgMzogcmV0dXJu
IGZ1bmN0aW9uKGl0ZXJhdGVlLCBjb250ZXh0KSB7CisgICAgICAgIHJldHVybiBfW21ldGhvZF0o
dGhpc1thdHRyaWJ1dGVdLCBjYihpdGVyYXRlZSwgdGhpcyksIGNvbnRleHQpOworICAgICAgfTsK
KyAgICAgIGNhc2UgNDogcmV0dXJuIGZ1bmN0aW9uKGl0ZXJhdGVlLCBkZWZhdWx0VmFsLCBjb250
ZXh0KSB7CisgICAgICAgIHJldHVybiBfW21ldGhvZF0odGhpc1thdHRyaWJ1dGVdLCBjYihpdGVy
YXRlZSwgdGhpcyksIGRlZmF1bHRWYWwsIGNvbnRleHQpOworICAgICAgfTsKKyAgICAgIGRlZmF1
bHQ6IHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFy
Z3VtZW50cyk7CisgICAgICAgIGFyZ3MudW5zaGlmdCh0aGlzW2F0dHJpYnV0ZV0pOworICAgICAg
ICByZXR1cm4gX1ttZXRob2RdLmFwcGx5KF8sIGFyZ3MpOworICAgICAgfTsKKyAgICB9CisgIH07
CisgIHZhciBhZGRVbmRlcnNjb3JlTWV0aG9kcyA9IGZ1bmN0aW9uKENsYXNzLCBtZXRob2RzLCBh
dHRyaWJ1dGUpIHsKKyAgICBfLmVhY2gobWV0aG9kcywgZnVuY3Rpb24obGVuZ3RoLCBtZXRob2Qp
IHsKKyAgICAgIGlmIChfW21ldGhvZF0pIENsYXNzLnByb3RvdHlwZVttZXRob2RdID0gYWRkTWV0
aG9kKGxlbmd0aCwgbWV0aG9kLCBhdHRyaWJ1dGUpOworICAgIH0pOworICB9OworCisgIC8vIFN1
cHBvcnQgYGNvbGxlY3Rpb24uc29ydEJ5KCdhdHRyJylgIGFuZCBgY29sbGVjdGlvbi5maW5kV2hl
cmUoe2lkOiAxfSlgLgorICB2YXIgY2IgPSBmdW5jdGlvbihpdGVyYXRlZSwgaW5zdGFuY2UpIHsK
KyAgICBpZiAoXy5pc0Z1bmN0aW9uKGl0ZXJhdGVlKSkgcmV0dXJuIGl0ZXJhdGVlOworICAgIGlm
IChfLmlzT2JqZWN0KGl0ZXJhdGVlKSAmJiAhaW5zdGFuY2UuX2lzTW9kZWwoaXRlcmF0ZWUpKSBy
ZXR1cm4gbW9kZWxNYXRjaGVyKGl0ZXJhdGVlKTsKKyAgICBpZiAoXy5pc1N0cmluZyhpdGVyYXRl
ZSkpIHJldHVybiBmdW5jdGlvbihtb2RlbCkgeyByZXR1cm4gbW9kZWwuZ2V0KGl0ZXJhdGVlKTsg
fTsKKyAgICByZXR1cm4gaXRlcmF0ZWU7CisgIH07CisgIHZhciBtb2RlbE1hdGNoZXIgPSBmdW5j
dGlvbihhdHRycykgeworICAgIHZhciBtYXRjaGVyID0gXy5tYXRjaGVzKGF0dHJzKTsKKyAgICBy
ZXR1cm4gZnVuY3Rpb24obW9kZWwpIHsKKyAgICAgIHJldHVybiBtYXRjaGVyKG1vZGVsLmF0dHJp
YnV0ZXMpOworICAgIH07CisgIH07CisKKyAgLy8gQmFja2JvbmUuRXZlbnRzCisgIC8vIC0tLS0t
LS0tLS0tLS0tLQorCisgIC8vIEEgbW9kdWxlIHRoYXQgY2FuIGJlIG1peGVkIGluIHRvICphbnkg
b2JqZWN0KiBpbiBvcmRlciB0byBwcm92aWRlIGl0IHdpdGgKKyAgLy8gYSBjdXN0b20gZXZlbnQg
Y2hhbm5lbC4gWW91IG1heSBiaW5kIGEgY2FsbGJhY2sgdG8gYW4gZXZlbnQgd2l0aCBgb25gIG9y
CisgIC8vIHJlbW92ZSB3aXRoIGBvZmZgOyBgdHJpZ2dlcmAtaW5nIGFuIGV2ZW50IGZpcmVzIGFs
bCBjYWxsYmFja3MgaW4KKyAgLy8gc3VjY2Vzc2lvbi4KKyAgLy8KKyAgLy8gICAgIHZhciBvYmpl
Y3QgPSB7fTsKKyAgLy8gICAgIF8uZXh0ZW5kKG9iamVjdCwgQmFja2JvbmUuRXZlbnRzKTsKKyAg
Ly8gICAgIG9iamVjdC5vbignZXhwYW5kJywgZnVuY3Rpb24oKXsgYWxlcnQoJ2V4cGFuZGVkJyk7
IH0pOworICAvLyAgICAgb2JqZWN0LnRyaWdnZXIoJ2V4cGFuZCcpOworICAvLworICB2YXIgRXZl
bnRzID0gQmFja2JvbmUuRXZlbnRzID0ge307CisKKyAgLy8gUmVndWxhciBleHByZXNzaW9uIHVz
ZWQgdG8gc3BsaXQgZXZlbnQgc3RyaW5ncy4KKyAgdmFyIGV2ZW50U3BsaXR0ZXIgPSAvXHMrLzsK
KworICAvLyBJdGVyYXRlcyBvdmVyIHRoZSBzdGFuZGFyZCBgZXZlbnQsIGNhbGxiYWNrYCAoYXMg
d2VsbCBhcyB0aGUgZmFuY3kgbXVsdGlwbGUKKyAgLy8gc3BhY2Utc2VwYXJhdGVkIGV2ZW50cyBg
ImNoYW5nZSBibHVyIiwgY2FsbGJhY2tgIGFuZCBqUXVlcnktc3R5bGUgZXZlbnQKKyAgLy8gbWFw
cyBge2V2ZW50OiBjYWxsYmFja31gKS4KKyAgdmFyIGV2ZW50c0FwaSA9IGZ1bmN0aW9uKGl0ZXJh
dGVlLCBldmVudHMsIG5hbWUsIGNhbGxiYWNrLCBvcHRzKSB7CisgICAgdmFyIGkgPSAwLCBuYW1l
czsKKyAgICBpZiAobmFtZSAmJiB0eXBlb2YgbmFtZSA9PT0gJ29iamVjdCcpIHsKKyAgICAgIC8v
IEhhbmRsZSBldmVudCBtYXBzLgorICAgICAgaWYgKGNhbGxiYWNrICE9PSB2b2lkIDAgJiYgJ2Nv
bnRleHQnIGluIG9wdHMgJiYgb3B0cy5jb250ZXh0ID09PSB2b2lkIDApIG9wdHMuY29udGV4dCA9
IGNhbGxiYWNrOworICAgICAgZm9yIChuYW1lcyA9IF8ua2V5cyhuYW1lKTsgaSA8IG5hbWVzLmxl
bmd0aCA7IGkrKykgeworICAgICAgICBldmVudHMgPSBldmVudHNBcGkoaXRlcmF0ZWUsIGV2ZW50
cywgbmFtZXNbaV0sIG5hbWVbbmFtZXNbaV1dLCBvcHRzKTsKKyAgICAgIH0KKyAgICB9IGVsc2Ug
aWYgKG5hbWUgJiYgZXZlbnRTcGxpdHRlci50ZXN0KG5hbWUpKSB7CisgICAgICAvLyBIYW5kbGUg
c3BhY2Utc2VwYXJhdGVkIGV2ZW50IG5hbWVzIGJ5IGRlbGVnYXRpbmcgdGhlbSBpbmRpdmlkdWFs
bHkuCisgICAgICBmb3IgKG5hbWVzID0gbmFtZS5zcGxpdChldmVudFNwbGl0dGVyKTsgaSA8IG5h
bWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGV2ZW50cyA9IGl0ZXJhdGVlKGV2ZW50cywgbmFt
ZXNbaV0sIGNhbGxiYWNrLCBvcHRzKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgLy8g
RmluYWxseSwgc3RhbmRhcmQgZXZlbnRzLgorICAgICAgZXZlbnRzID0gaXRlcmF0ZWUoZXZlbnRz
LCBuYW1lLCBjYWxsYmFjaywgb3B0cyk7CisgICAgfQorICAgIHJldHVybiBldmVudHM7CisgIH07
CisKKyAgLy8gQmluZCBhbiBldmVudCB0byBhIGBjYWxsYmFja2AgZnVuY3Rpb24uIFBhc3Npbmcg
YCJhbGwiYCB3aWxsIGJpbmQKKyAgLy8gdGhlIGNhbGxiYWNrIHRvIGFsbCBldmVudHMgZmlyZWQu
CisgIEV2ZW50cy5vbiA9IGZ1bmN0aW9uKG5hbWUsIGNhbGxiYWNrLCBjb250ZXh0KSB7CisgICAg
cmV0dXJuIGludGVybmFsT24odGhpcywgbmFtZSwgY2FsbGJhY2ssIGNvbnRleHQpOworICB9Owor
CisgIC8vIEd1YXJkIHRoZSBgbGlzdGVuaW5nYCBhcmd1bWVudCBmcm9tIHRoZSBwdWJsaWMgQVBJ
LgorICB2YXIgaW50ZXJuYWxPbiA9IGZ1bmN0aW9uKG9iaiwgbmFtZSwgY2FsbGJhY2ssIGNvbnRl
eHQsIGxpc3RlbmluZykgeworICAgIG9iai5fZXZlbnRzID0gZXZlbnRzQXBpKG9uQXBpLCBvYmou
X2V2ZW50cyB8fCB7fSwgbmFtZSwgY2FsbGJhY2ssIHsKKyAgICAgIGNvbnRleHQ6IGNvbnRleHQs
CisgICAgICBjdHg6IG9iaiwKKyAgICAgIGxpc3RlbmluZzogbGlzdGVuaW5nCisgICAgfSk7CisK
KyAgICBpZiAobGlzdGVuaW5nKSB7CisgICAgICB2YXIgbGlzdGVuZXJzID0gb2JqLl9saXN0ZW5l
cnMgfHwgKG9iai5fbGlzdGVuZXJzID0ge30pOworICAgICAgbGlzdGVuZXJzW2xpc3RlbmluZy5p
ZF0gPSBsaXN0ZW5pbmc7CisgICAgfQorCisgICAgcmV0dXJuIG9iajsKKyAgfTsKKworICAvLyBJ
bnZlcnNpb24tb2YtY29udHJvbCB2ZXJzaW9ucyBvZiBgb25gLiBUZWxsICp0aGlzKiBvYmplY3Qg
dG8gbGlzdGVuIHRvCisgIC8vIGFuIGV2ZW50IGluIGFub3RoZXIgb2JqZWN0Li4uIGtlZXBpbmcg
dHJhY2sgb2Ygd2hhdCBpdCdzIGxpc3RlbmluZyB0bworICAvLyBmb3IgZWFzaWVyIHVuYmluZGlu
ZyBsYXRlci4KKyAgRXZlbnRzLmxpc3RlblRvID0gZnVuY3Rpb24ob2JqLCBuYW1lLCBjYWxsYmFj
aykgeworICAgIGlmICghb2JqKSByZXR1cm4gdGhpczsKKyAgICB2YXIgaWQgPSBvYmouX2xpc3Rl
bklkIHx8IChvYmouX2xpc3RlbklkID0gXy51bmlxdWVJZCgnbCcpKTsKKyAgICB2YXIgbGlzdGVu
aW5nVG8gPSB0aGlzLl9saXN0ZW5pbmdUbyB8fCAodGhpcy5fbGlzdGVuaW5nVG8gPSB7fSk7Cisg
ICAgdmFyIGxpc3RlbmluZyA9IGxpc3RlbmluZ1RvW2lkXTsKKworICAgIC8vIFRoaXMgb2JqZWN0
IGlzIG5vdCBsaXN0ZW5pbmcgdG8gYW55IG90aGVyIGV2ZW50cyBvbiBgb2JqYCB5ZXQuCisgICAg
Ly8gU2V0dXAgdGhlIG5lY2Vzc2FyeSByZWZlcmVuY2VzIHRvIHRyYWNrIHRoZSBsaXN0ZW5pbmcg
Y2FsbGJhY2tzLgorICAgIGlmICghbGlzdGVuaW5nKSB7CisgICAgICB2YXIgdGhpc0lkID0gdGhp
cy5fbGlzdGVuSWQgfHwgKHRoaXMuX2xpc3RlbklkID0gXy51bmlxdWVJZCgnbCcpKTsKKyAgICAg
IGxpc3RlbmluZyA9IGxpc3RlbmluZ1RvW2lkXSA9IHtvYmo6IG9iaiwgb2JqSWQ6IGlkLCBpZDog
dGhpc0lkLCBsaXN0ZW5pbmdUbzogbGlzdGVuaW5nVG8sIGNvdW50OiAwfTsKKyAgICB9CisKKyAg
ICAvLyBCaW5kIGNhbGxiYWNrcyBvbiBvYmosIGFuZCBrZWVwIHRyYWNrIG9mIHRoZW0gb24gbGlz
dGVuaW5nLgorICAgIGludGVybmFsT24ob2JqLCBuYW1lLCBjYWxsYmFjaywgdGhpcywgbGlzdGVu
aW5nKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfTsKKworICAvLyBUaGUgcmVkdWNpbmcgQVBJIHRo
YXQgYWRkcyBhIGNhbGxiYWNrIHRvIHRoZSBgZXZlbnRzYCBvYmplY3QuCisgIHZhciBvbkFwaSA9
IGZ1bmN0aW9uKGV2ZW50cywgbmFtZSwgY2FsbGJhY2ssIG9wdGlvbnMpIHsKKyAgICBpZiAoY2Fs
bGJhY2spIHsKKyAgICAgIHZhciBoYW5kbGVycyA9IGV2ZW50c1tuYW1lXSB8fCAoZXZlbnRzW25h
bWVdID0gW10pOworICAgICAgdmFyIGNvbnRleHQgPSBvcHRpb25zLmNvbnRleHQsIGN0eCA9IG9w
dGlvbnMuY3R4LCBsaXN0ZW5pbmcgPSBvcHRpb25zLmxpc3RlbmluZzsKKyAgICAgIGlmIChsaXN0
ZW5pbmcpIGxpc3RlbmluZy5jb3VudCsrOworCisgICAgICBoYW5kbGVycy5wdXNoKHtjYWxsYmFj
azogY2FsbGJhY2ssIGNvbnRleHQ6IGNvbnRleHQsIGN0eDogY29udGV4dCB8fCBjdHgsIGxpc3Rl
bmluZzogbGlzdGVuaW5nfSk7CisgICAgfQorICAgIHJldHVybiBldmVudHM7CisgIH07CisKKyAg
Ly8gUmVtb3ZlIG9uZSBvciBtYW55IGNhbGxiYWNrcy4gSWYgYGNvbnRleHRgIGlzIG51bGwsIHJl
bW92ZXMgYWxsCisgIC8vIGNhbGxiYWNrcyB3aXRoIHRoYXQgZnVuY3Rpb24uIElmIGBjYWxsYmFj
a2AgaXMgbnVsbCwgcmVtb3ZlcyBhbGwKKyAgLy8gY2FsbGJhY2tzIGZvciB0aGUgZXZlbnQuIElm
IGBuYW1lYCBpcyBudWxsLCByZW1vdmVzIGFsbCBib3VuZAorICAvLyBjYWxsYmFja3MgZm9yIGFs
bCBldmVudHMuCisgIEV2ZW50cy5vZmYgPSBmdW5jdGlvbihuYW1lLCBjYWxsYmFjaywgY29udGV4
dCkgeworICAgIGlmICghdGhpcy5fZXZlbnRzKSByZXR1cm4gdGhpczsKKyAgICB0aGlzLl9ldmVu
dHMgPSBldmVudHNBcGkob2ZmQXBpLCB0aGlzLl9ldmVudHMsIG5hbWUsIGNhbGxiYWNrLCB7Cisg
ICAgICBjb250ZXh0OiBjb250ZXh0LAorICAgICAgbGlzdGVuZXJzOiB0aGlzLl9saXN0ZW5lcnMK
KyAgICB9KTsKKyAgICByZXR1cm4gdGhpczsKKyAgfTsKKworICAvLyBUZWxsIHRoaXMgb2JqZWN0
IHRvIHN0b3AgbGlzdGVuaW5nIHRvIGVpdGhlciBzcGVjaWZpYyBldmVudHMgLi4uIG9yCisgIC8v
IHRvIGV2ZXJ5IG9iamVjdCBpdCdzIGN1cnJlbnRseSBsaXN0ZW5pbmcgdG8uCisgIEV2ZW50cy5z
dG9wTGlzdGVuaW5nID0gZnVuY3Rpb24ob2JqLCBuYW1lLCBjYWxsYmFjaykgeworICAgIHZhciBs
aXN0ZW5pbmdUbyA9IHRoaXMuX2xpc3RlbmluZ1RvOworICAgIGlmICghbGlzdGVuaW5nVG8pIHJl
dHVybiB0aGlzOworCisgICAgdmFyIGlkcyA9IG9iaiA/IFtvYmouX2xpc3RlbklkXSA6IF8ua2V5
cyhsaXN0ZW5pbmdUbyk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkr
KykgeworICAgICAgdmFyIGxpc3RlbmluZyA9IGxpc3RlbmluZ1RvW2lkc1tpXV07CisKKyAgICAg
IC8vIElmIGxpc3RlbmluZyBkb2Vzbid0IGV4aXN0LCB0aGlzIG9iamVjdCBpcyBub3QgY3VycmVu
dGx5CisgICAgICAvLyBsaXN0ZW5pbmcgdG8gb2JqLiBCcmVhayBvdXQgZWFybHkuCisgICAgICBp
ZiAoIWxpc3RlbmluZykgYnJlYWs7CisKKyAgICAgIGxpc3RlbmluZy5vYmoub2ZmKG5hbWUsIGNh
bGxiYWNrLCB0aGlzKTsKKyAgICB9CisKKyAgICByZXR1cm4gdGhpczsKKyAgfTsKKworICAvLyBU
aGUgcmVkdWNpbmcgQVBJIHRoYXQgcmVtb3ZlcyBhIGNhbGxiYWNrIGZyb20gdGhlIGBldmVudHNg
IG9iamVjdC4KKyAgdmFyIG9mZkFwaSA9IGZ1bmN0aW9uKGV2ZW50cywgbmFtZSwgY2FsbGJhY2ss
IG9wdGlvbnMpIHsKKyAgICBpZiAoIWV2ZW50cykgcmV0dXJuOworCisgICAgdmFyIGkgPSAwLCBs
aXN0ZW5pbmc7CisgICAgdmFyIGNvbnRleHQgPSBvcHRpb25zLmNvbnRleHQsIGxpc3RlbmVycyA9
IG9wdGlvbnMubGlzdGVuZXJzOworCisgICAgLy8gRGVsZXRlIGFsbCBldmVudHMgbGlzdGVuZXJz
IGFuZCAiZHJvcCIgZXZlbnRzLgorICAgIGlmICghbmFtZSAmJiAhY2FsbGJhY2sgJiYgIWNvbnRl
eHQpIHsKKyAgICAgIHZhciBpZHMgPSBfLmtleXMobGlzdGVuZXJzKTsKKyAgICAgIGZvciAoOyBp
IDwgaWRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGxpc3RlbmluZyA9IGxpc3RlbmVyc1tpZHNb
aV1dOworICAgICAgICBkZWxldGUgbGlzdGVuZXJzW2xpc3RlbmluZy5pZF07CisgICAgICAgIGRl
bGV0ZSBsaXN0ZW5pbmcubGlzdGVuaW5nVG9bbGlzdGVuaW5nLm9iaklkXTsKKyAgICAgIH0KKyAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgbmFtZXMgPSBuYW1lID8gW25hbWVdIDogXy5r
ZXlzKGV2ZW50cyk7CisgICAgZm9yICg7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykgeworICAgICAg
bmFtZSA9IG5hbWVzW2ldOworICAgICAgdmFyIGhhbmRsZXJzID0gZXZlbnRzW25hbWVdOworCisg
ICAgICAvLyBCYWlsIG91dCBpZiB0aGVyZSBhcmUgbm8gZXZlbnRzIHN0b3JlZC4KKyAgICAgIGlm
ICghaGFuZGxlcnMpIGJyZWFrOworCisgICAgICAvLyBSZXBsYWNlIGV2ZW50cyBpZiB0aGVyZSBh
cmUgYW55IHJlbWFpbmluZy4gIE90aGVyd2lzZSwgY2xlYW4gdXAuCisgICAgICB2YXIgcmVtYWlu
aW5nID0gW107CisgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGhhbmRsZXJzLmxlbmd0aDsgaisr
KSB7CisgICAgICAgIHZhciBoYW5kbGVyID0gaGFuZGxlcnNbal07CisgICAgICAgIGlmICgKKyAg
ICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjayAhPT0gaGFuZGxlci5jYWxsYmFjayAmJgorICAg
ICAgICAgICAgY2FsbGJhY2sgIT09IGhhbmRsZXIuY2FsbGJhY2suX2NhbGxiYWNrIHx8CisgICAg
ICAgICAgICAgIGNvbnRleHQgJiYgY29udGV4dCAhPT0gaGFuZGxlci5jb250ZXh0CisgICAgICAg
ICkgeworICAgICAgICAgIHJlbWFpbmluZy5wdXNoKGhhbmRsZXIpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgIGxpc3RlbmluZyA9IGhhbmRsZXIubGlzdGVuaW5nOworICAgICAgICAgIGlm
IChsaXN0ZW5pbmcgJiYgLS1saXN0ZW5pbmcuY291bnQgPT09IDApIHsKKyAgICAgICAgICAgIGRl
bGV0ZSBsaXN0ZW5lcnNbbGlzdGVuaW5nLmlkXTsKKyAgICAgICAgICAgIGRlbGV0ZSBsaXN0ZW5p
bmcubGlzdGVuaW5nVG9bbGlzdGVuaW5nLm9iaklkXTsKKyAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgIH0KKworICAgICAgLy8gVXBkYXRlIHRhaWwgZXZlbnQgaWYgdGhlIGxpc3QgaGFzIGFu
eSBldmVudHMuICBPdGhlcndpc2UsIGNsZWFuIHVwLgorICAgICAgaWYgKHJlbWFpbmluZy5sZW5n
dGgpIHsKKyAgICAgICAgZXZlbnRzW25hbWVdID0gcmVtYWluaW5nOworICAgICAgfSBlbHNlIHsK
KyAgICAgICAgZGVsZXRlIGV2ZW50c1tuYW1lXTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IGV2ZW50czsKKyAgfTsKKworICAvLyBCaW5kIGFuIGV2ZW50IHRvIG9ubHkgYmUgdHJpZ2dlcmVk
IGEgc2luZ2xlIHRpbWUuIEFmdGVyIHRoZSBmaXJzdCB0aW1lCisgIC8vIHRoZSBjYWxsYmFjayBp
cyBpbnZva2VkLCBpdHMgbGlzdGVuZXIgd2lsbCBiZSByZW1vdmVkLiBJZiBtdWx0aXBsZSBldmVu
dHMKKyAgLy8gYXJlIHBhc3NlZCBpbiB1c2luZyB0aGUgc3BhY2Utc2VwYXJhdGVkIHN5bnRheCwg
dGhlIGhhbmRsZXIgd2lsbCBmaXJlCisgIC8vIG9uY2UgZm9yIGVhY2ggZXZlbnQsIG5vdCBvbmNl
IGZvciBhIGNvbWJpbmF0aW9uIG9mIGFsbCBldmVudHMuCisgIEV2ZW50cy5vbmNlID0gZnVuY3Rp
b24obmFtZSwgY2FsbGJhY2ssIGNvbnRleHQpIHsKKyAgICAvLyBNYXAgdGhlIGV2ZW50IGludG8g
YSBge2V2ZW50OiBvbmNlfWAgb2JqZWN0LgorICAgIHZhciBldmVudHMgPSBldmVudHNBcGkob25j
ZU1hcCwge30sIG5hbWUsIGNhbGxiYWNrLCBfLmJpbmQodGhpcy5vZmYsIHRoaXMpKTsKKyAgICBp
ZiAodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnICYmIGNvbnRleHQgPT0gbnVsbCkgY2FsbGJhY2sg
PSB2b2lkIDA7CisgICAgcmV0dXJuIHRoaXMub24oZXZlbnRzLCBjYWxsYmFjaywgY29udGV4dCk7
CisgIH07CisKKyAgLy8gSW52ZXJzaW9uLW9mLWNvbnRyb2wgdmVyc2lvbnMgb2YgYG9uY2VgLgor
ICBFdmVudHMubGlzdGVuVG9PbmNlID0gZnVuY3Rpb24ob2JqLCBuYW1lLCBjYWxsYmFjaykgewor
ICAgIC8vIE1hcCB0aGUgZXZlbnQgaW50byBhIGB7ZXZlbnQ6IG9uY2V9YCBvYmplY3QuCisgICAg
dmFyIGV2ZW50cyA9IGV2ZW50c0FwaShvbmNlTWFwLCB7fSwgbmFtZSwgY2FsbGJhY2ssIF8uYmlu
ZCh0aGlzLnN0b3BMaXN0ZW5pbmcsIHRoaXMsIG9iaikpOworICAgIHJldHVybiB0aGlzLmxpc3Rl
blRvKG9iaiwgZXZlbnRzKTsKKyAgfTsKKworICAvLyBSZWR1Y2VzIHRoZSBldmVudCBjYWxsYmFj
a3MgaW50byBhIG1hcCBvZiBge2V2ZW50OiBvbmNlV3JhcHBlcn1gLgorICAvLyBgb2ZmZXJgIHVu
YmluZHMgdGhlIGBvbmNlV3JhcHBlcmAgYWZ0ZXIgaXQgaGFzIGJlZW4gY2FsbGVkLgorICB2YXIg
b25jZU1hcCA9IGZ1bmN0aW9uKG1hcCwgbmFtZSwgY2FsbGJhY2ssIG9mZmVyKSB7CisgICAgaWYg
KGNhbGxiYWNrKSB7CisgICAgICB2YXIgb25jZSA9IG1hcFtuYW1lXSA9IF8ub25jZShmdW5jdGlv
bigpIHsKKyAgICAgICAgb2ZmZXIobmFtZSwgb25jZSk7CisgICAgICAgIGNhbGxiYWNrLmFwcGx5
KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICB9KTsKKyAgICAgIG9uY2UuX2NhbGxiYWNrID0gY2Fs
bGJhY2s7CisgICAgfQorICAgIHJldHVybiBtYXA7CisgIH07CisKKyAgLy8gVHJpZ2dlciBvbmUg
b3IgbWFueSBldmVudHMsIGZpcmluZyBhbGwgYm91bmQgY2FsbGJhY2tzLiBDYWxsYmFja3MgYXJl
CisgIC8vIHBhc3NlZCB0aGUgc2FtZSBhcmd1bWVudHMgYXMgYHRyaWdnZXJgIGlzLCBhcGFydCBm
cm9tIHRoZSBldmVudCBuYW1lCisgIC8vICh1bmxlc3MgeW91J3JlIGxpc3RlbmluZyBvbiBgImFs
bCJgLCB3aGljaCB3aWxsIGNhdXNlIHlvdXIgY2FsbGJhY2sgdG8KKyAgLy8gcmVjZWl2ZSB0aGUg
dHJ1ZSBuYW1lIG9mIHRoZSBldmVudCBhcyB0aGUgZmlyc3QgYXJndW1lbnQpLgorICBFdmVudHMu
dHJpZ2dlciA9IGZ1bmN0aW9uKG5hbWUpIHsKKyAgICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJu
IHRoaXM7CisKKyAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoMCwgYXJndW1lbnRzLmxlbmd0aCAt
IDEpOworICAgIHZhciBhcmdzID0gQXJyYXkobGVuZ3RoKTsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2kgKyAxXTsKKworICAgIGV2ZW50
c0FwaSh0cmlnZ2VyQXBpLCB0aGlzLl9ldmVudHMsIG5hbWUsIHZvaWQgMCwgYXJncyk7CisgICAg
cmV0dXJuIHRoaXM7CisgIH07CisKKyAgLy8gSGFuZGxlcyB0cmlnZ2VyaW5nIHRoZSBhcHByb3By
aWF0ZSBldmVudCBjYWxsYmFja3MuCisgIHZhciB0cmlnZ2VyQXBpID0gZnVuY3Rpb24ob2JqRXZl
bnRzLCBuYW1lLCBjYWxsYmFjaywgYXJncykgeworICAgIGlmIChvYmpFdmVudHMpIHsKKyAgICAg
IHZhciBldmVudHMgPSBvYmpFdmVudHNbbmFtZV07CisgICAgICB2YXIgYWxsRXZlbnRzID0gb2Jq
RXZlbnRzLmFsbDsKKyAgICAgIGlmIChldmVudHMgJiYgYWxsRXZlbnRzKSBhbGxFdmVudHMgPSBh
bGxFdmVudHMuc2xpY2UoKTsKKyAgICAgIGlmIChldmVudHMpIHRyaWdnZXJFdmVudHMoZXZlbnRz
LCBhcmdzKTsKKyAgICAgIGlmIChhbGxFdmVudHMpIHRyaWdnZXJFdmVudHMoYWxsRXZlbnRzLCBb
bmFtZV0uY29uY2F0KGFyZ3MpKTsKKyAgICB9CisgICAgcmV0dXJuIG9iakV2ZW50czsKKyAgfTsK
KworICAvLyBBIGRpZmZpY3VsdC10by1iZWxpZXZlLCBidXQgb3B0aW1pemVkIGludGVybmFsIGRp
c3BhdGNoIGZ1bmN0aW9uIGZvcgorICAvLyB0cmlnZ2VyaW5nIGV2ZW50cy4gVHJpZXMgdG8ga2Vl
cCB0aGUgdXN1YWwgY2FzZXMgc3BlZWR5IChtb3N0IGludGVybmFsCisgIC8vIEJhY2tib25lIGV2
ZW50cyBoYXZlIDMgYXJndW1lbnRzKS4KKyAgdmFyIHRyaWdnZXJFdmVudHMgPSBmdW5jdGlvbihl
dmVudHMsIGFyZ3MpIHsKKyAgICB2YXIgZXYsIGkgPSAtMSwgbCA9IGV2ZW50cy5sZW5ndGgsIGEx
ID0gYXJnc1swXSwgYTIgPSBhcmdzWzFdLCBhMyA9IGFyZ3NbMl07CisgICAgc3dpdGNoIChhcmdz
Lmxlbmd0aCkgeworICAgICAgY2FzZSAwOiB3aGlsZSAoKytpIDwgbCkgKGV2ID0gZXZlbnRzW2ld
KS5jYWxsYmFjay5jYWxsKGV2LmN0eCk7IHJldHVybjsKKyAgICAgIGNhc2UgMTogd2hpbGUgKCsr
aSA8IGwpIChldiA9IGV2ZW50c1tpXSkuY2FsbGJhY2suY2FsbChldi5jdHgsIGExKTsgcmV0dXJu
OworICAgICAgY2FzZSAyOiB3aGlsZSAoKytpIDwgbCkgKGV2ID0gZXZlbnRzW2ldKS5jYWxsYmFj
ay5jYWxsKGV2LmN0eCwgYTEsIGEyKTsgcmV0dXJuOworICAgICAgY2FzZSAzOiB3aGlsZSAoKytp
IDwgbCkgKGV2ID0gZXZlbnRzW2ldKS5jYWxsYmFjay5jYWxsKGV2LmN0eCwgYTEsIGEyLCBhMyk7
IHJldHVybjsKKyAgICAgIGRlZmF1bHQ6IHdoaWxlICgrK2kgPCBsKSAoZXYgPSBldmVudHNbaV0p
LmNhbGxiYWNrLmFwcGx5KGV2LmN0eCwgYXJncyk7IHJldHVybjsKKyAgICB9CisgIH07CisKKyAg
Ly8gQWxpYXNlcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisgIEV2ZW50cy5iaW5kICAg
PSBFdmVudHMub247CisgIEV2ZW50cy51bmJpbmQgPSBFdmVudHMub2ZmOworCisgIC8vIEFsbG93
IHRoZSBgQmFja2JvbmVgIG9iamVjdCB0byBzZXJ2ZSBhcyBhIGdsb2JhbCBldmVudCBidXMsIGZv
ciBmb2xrcyB3aG8KKyAgLy8gd2FudCBnbG9iYWwgInB1YnN1YiIgaW4gYSBjb252ZW5pZW50IHBs
YWNlLgorICBfLmV4dGVuZChCYWNrYm9uZSwgRXZlbnRzKTsKKworICAvLyBCYWNrYm9uZS5Nb2Rl
bAorICAvLyAtLS0tLS0tLS0tLS0tLQorCisgIC8vIEJhY2tib25lICoqTW9kZWxzKiogYXJlIHRo
ZSBiYXNpYyBkYXRhIG9iamVjdCBpbiB0aGUgZnJhbWV3b3JrIC0tCisgIC8vIGZyZXF1ZW50bHkg
cmVwcmVzZW50aW5nIGEgcm93IGluIGEgdGFibGUgaW4gYSBkYXRhYmFzZSBvbiB5b3VyIHNlcnZl
ci4KKyAgLy8gQSBkaXNjcmV0ZSBjaHVuayBvZiBkYXRhIGFuZCBhIGJ1bmNoIG9mIHVzZWZ1bCwg
cmVsYXRlZCBtZXRob2RzIGZvcgorICAvLyBwZXJmb3JtaW5nIGNvbXB1dGF0aW9ucyBhbmQgdHJh
bnNmb3JtYXRpb25zIG9uIHRoYXQgZGF0YS4KKworICAvLyBDcmVhdGUgYSBuZXcgbW9kZWwgd2l0
aCB0aGUgc3BlY2lmaWVkIGF0dHJpYnV0ZXMuIEEgY2xpZW50IGlkIChgY2lkYCkKKyAgLy8gaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYW5kIGFzc2lnbmVkIGZvciB5b3UuCisgIHZhciBNb2Rl
bCA9IEJhY2tib25lLk1vZGVsID0gZnVuY3Rpb24oYXR0cmlidXRlcywgb3B0aW9ucykgeworICAg
IHZhciBhdHRycyA9IGF0dHJpYnV0ZXMgfHwge307CisgICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9
IHt9KTsKKyAgICB0aGlzLmNpZCA9IF8udW5pcXVlSWQodGhpcy5jaWRQcmVmaXgpOworICAgIHRo
aXMuYXR0cmlidXRlcyA9IHt9OworICAgIGlmIChvcHRpb25zLmNvbGxlY3Rpb24pIHRoaXMuY29s
bGVjdGlvbiA9IG9wdGlvbnMuY29sbGVjdGlvbjsKKyAgICBpZiAob3B0aW9ucy5wYXJzZSkgYXR0
cnMgPSB0aGlzLnBhcnNlKGF0dHJzLCBvcHRpb25zKSB8fCB7fTsKKyAgICB2YXIgZGVmYXVsdHMg
PSBfLnJlc3VsdCh0aGlzLCAnZGVmYXVsdHMnKTsKKyAgICBhdHRycyA9IF8uZGVmYXVsdHMoXy5l
eHRlbmQoe30sIGRlZmF1bHRzLCBhdHRycyksIGRlZmF1bHRzKTsKKyAgICB0aGlzLnNldChhdHRy
cywgb3B0aW9ucyk7CisgICAgdGhpcy5jaGFuZ2VkID0ge307CisgICAgdGhpcy5pbml0aWFsaXpl
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgIH07CisKKyAgLy8gQXR0YWNoIGFsbCBpbmhlcml0
YWJsZSBtZXRob2RzIHRvIHRoZSBNb2RlbCBwcm90b3R5cGUuCisgIF8uZXh0ZW5kKE1vZGVsLnBy
b3RvdHlwZSwgRXZlbnRzLCB7CisKKyAgICAvLyBBIGhhc2ggb2YgYXR0cmlidXRlcyB3aG9zZSBj
dXJyZW50IGFuZCBwcmV2aW91cyB2YWx1ZSBkaWZmZXIuCisgICAgY2hhbmdlZDogbnVsbCwKKwor
ICAgIC8vIFRoZSB2YWx1ZSByZXR1cm5lZCBkdXJpbmcgdGhlIGxhc3QgZmFpbGVkIHZhbGlkYXRp
b24uCisgICAgdmFsaWRhdGlvbkVycm9yOiBudWxsLAorCisgICAgLy8gVGhlIGRlZmF1bHQgbmFt
ZSBmb3IgdGhlIEpTT04gYGlkYCBhdHRyaWJ1dGUgaXMgYCJpZCJgLiBNb25nb0RCIGFuZAorICAg
IC8vIENvdWNoREIgdXNlcnMgbWF5IHdhbnQgdG8gc2V0IHRoaXMgdG8gYCJfaWQiYC4KKyAgICBp
ZEF0dHJpYnV0ZTogJ2lkJywKKworICAgIC8vIFRoZSBwcmVmaXggaXMgdXNlZCB0byBjcmVhdGUg
dGhlIGNsaWVudCBpZCB3aGljaCBpcyB1c2VkIHRvIGlkZW50aWZ5IG1vZGVscyBsb2NhbGx5Lgor
ICAgIC8vIFlvdSBtYXkgd2FudCB0byBvdmVycmlkZSB0aGlzIGlmIHlvdSdyZSBleHBlcmllbmNp
bmcgbmFtZSBjbGFzaGVzIHdpdGggbW9kZWwgaWRzLgorICAgIGNpZFByZWZpeDogJ2MnLAorCisg
ICAgLy8gSW5pdGlhbGl6ZSBpcyBhbiBlbXB0eSBmdW5jdGlvbiBieSBkZWZhdWx0LiBPdmVycmlk
ZSBpdCB3aXRoIHlvdXIgb3duCisgICAgLy8gaW5pdGlhbGl6YXRpb24gbG9naWMuCisgICAgaW5p
dGlhbGl6ZTogZnVuY3Rpb24oKXt9LAorCisgICAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgbW9k
ZWwncyBgYXR0cmlidXRlc2Agb2JqZWN0LgorICAgIHRvSlNPTjogZnVuY3Rpb24ob3B0aW9ucykg
eworICAgICAgcmV0dXJuIF8uY2xvbmUodGhpcy5hdHRyaWJ1dGVzKTsKKyAgICB9LAorCisgICAg
Ly8gUHJveHkgYEJhY2tib25lLnN5bmNgIGJ5IGRlZmF1bHQgLS0gYnV0IG92ZXJyaWRlIHRoaXMg
aWYgeW91IG5lZWQKKyAgICAvLyBjdXN0b20gc3luY2luZyBzZW1hbnRpY3MgZm9yICp0aGlzKiBw
YXJ0aWN1bGFyIG1vZGVsLgorICAgIHN5bmM6IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIEJh
Y2tib25lLnN5bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICB9LAorCisgICAgLy8gR2V0
IHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUuCisgICAgZ2V0OiBmdW5jdGlvbihhdHRyKSB7Cisg
ICAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW2F0dHJdOworICAgIH0sCisKKyAgICAvLyBHZXQg
dGhlIEhUTUwtZXNjYXBlZCB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUuCisgICAgZXNjYXBlOiBmdW5j
dGlvbihhdHRyKSB7CisgICAgICByZXR1cm4gXy5lc2NhcGUodGhpcy5nZXQoYXR0cikpOworICAg
IH0sCisKKyAgICAvLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXR0cmlidXRlIGNvbnRhaW5zIGEg
dmFsdWUgdGhhdCBpcyBub3QgbnVsbAorICAgIC8vIG9yIHVuZGVmaW5lZC4KKyAgICBoYXM6IGZ1
bmN0aW9uKGF0dHIpIHsKKyAgICAgIHJldHVybiB0aGlzLmdldChhdHRyKSAhPSBudWxsOworICAg
IH0sCisKKyAgICAvLyBTcGVjaWFsLWNhc2VkIHByb3h5IHRvIHVuZGVyc2NvcmUncyBgXy5tYXRj
aGVzYCBtZXRob2QuCisgICAgbWF0Y2hlczogZnVuY3Rpb24oYXR0cnMpIHsKKyAgICAgIHJldHVy
biAhIV8uaXRlcmF0ZWUoYXR0cnMsIHRoaXMpKHRoaXMuYXR0cmlidXRlcyk7CisgICAgfSwKKwor
ICAgIC8vIFNldCBhIGhhc2ggb2YgbW9kZWwgYXR0cmlidXRlcyBvbiB0aGUgb2JqZWN0LCBmaXJp
bmcgYCJjaGFuZ2UiYC4gVGhpcyBpcworICAgIC8vIHRoZSBjb3JlIHByaW1pdGl2ZSBvcGVyYXRp
b24gb2YgYSBtb2RlbCwgdXBkYXRpbmcgdGhlIGRhdGEgYW5kIG5vdGlmeWluZworICAgIC8vIGFu
eW9uZSB3aG8gbmVlZHMgdG8ga25vdyBhYm91dCB0aGUgY2hhbmdlIGluIHN0YXRlLiBUaGUgaGVh
cnQgb2YgdGhlIGJlYXN0LgorICAgIHNldDogZnVuY3Rpb24oa2V5LCB2YWwsIG9wdGlvbnMpIHsK
KyAgICAgIGlmIChrZXkgPT0gbnVsbCkgcmV0dXJuIHRoaXM7CisKKyAgICAgIC8vIEhhbmRsZSBi
b3RoIGAia2V5IiwgdmFsdWVgIGFuZCBge2tleTogdmFsdWV9YCAtc3R5bGUgYXJndW1lbnRzLgor
ICAgICAgdmFyIGF0dHJzOworICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnKSB7Cisg
ICAgICAgIGF0dHJzID0ga2V5OworICAgICAgICBvcHRpb25zID0gdmFsOworICAgICAgfSBlbHNl
IHsKKyAgICAgICAgKGF0dHJzID0ge30pW2tleV0gPSB2YWw7CisgICAgICB9CisKKyAgICAgIG9w
dGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7CisKKyAgICAgIC8vIFJ1biB2YWxpZGF0aW9uLgorICAg
ICAgaWYgKCF0aGlzLl92YWxpZGF0ZShhdHRycywgb3B0aW9ucykpIHJldHVybiBmYWxzZTsKKwor
ICAgICAgLy8gRXh0cmFjdCBhdHRyaWJ1dGVzIGFuZCBvcHRpb25zLgorICAgICAgdmFyIHVuc2V0
ICAgICAgPSBvcHRpb25zLnVuc2V0OworICAgICAgdmFyIHNpbGVudCAgICAgPSBvcHRpb25zLnNp
bGVudDsKKyAgICAgIHZhciBjaGFuZ2VzICAgID0gW107CisgICAgICB2YXIgY2hhbmdpbmcgICA9
IHRoaXMuX2NoYW5naW5nOworICAgICAgdGhpcy5fY2hhbmdpbmcgPSB0cnVlOworCisgICAgICBp
ZiAoIWNoYW5naW5nKSB7CisgICAgICAgIHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcyA9IF8uY2xv
bmUodGhpcy5hdHRyaWJ1dGVzKTsKKyAgICAgICAgdGhpcy5jaGFuZ2VkID0ge307CisgICAgICB9
CisKKyAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5hdHRyaWJ1dGVzOworICAgICAgdmFyIGNoYW5n
ZWQgPSB0aGlzLmNoYW5nZWQ7CisgICAgICB2YXIgcHJldiAgICA9IHRoaXMuX3ByZXZpb3VzQXR0
cmlidXRlczsKKworICAgICAgLy8gRm9yIGVhY2ggYHNldGAgYXR0cmlidXRlLCB1cGRhdGUgb3Ig
ZGVsZXRlIHRoZSBjdXJyZW50IHZhbHVlLgorICAgICAgZm9yICh2YXIgYXR0ciBpbiBhdHRycykg
eworICAgICAgICB2YWwgPSBhdHRyc1thdHRyXTsKKyAgICAgICAgaWYgKCFfLmlzRXF1YWwoY3Vy
cmVudFthdHRyXSwgdmFsKSkgY2hhbmdlcy5wdXNoKGF0dHIpOworICAgICAgICBpZiAoIV8uaXNF
cXVhbChwcmV2W2F0dHJdLCB2YWwpKSB7CisgICAgICAgICAgY2hhbmdlZFthdHRyXSA9IHZhbDsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBkZWxldGUgY2hhbmdlZFthdHRyXTsKKyAgICAg
ICAgfQorICAgICAgICB1bnNldCA/IGRlbGV0ZSBjdXJyZW50W2F0dHJdIDogY3VycmVudFthdHRy
XSA9IHZhbDsKKyAgICAgIH0KKworICAgICAgLy8gVXBkYXRlIHRoZSBgaWRgLgorICAgICAgaWYg
KHRoaXMuaWRBdHRyaWJ1dGUgaW4gYXR0cnMpIHRoaXMuaWQgPSB0aGlzLmdldCh0aGlzLmlkQXR0
cmlidXRlKTsKKworICAgICAgLy8gVHJpZ2dlciBhbGwgcmVsZXZhbnQgYXR0cmlidXRlIGNoYW5n
ZXMuCisgICAgICBpZiAoIXNpbGVudCkgeworICAgICAgICBpZiAoY2hhbmdlcy5sZW5ndGgpIHRo
aXMuX3BlbmRpbmcgPSBvcHRpb25zOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5n
ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2NoYW5nZTonICsgY2hh
bmdlc1tpXSwgdGhpcywgY3VycmVudFtjaGFuZ2VzW2ldXSwgb3B0aW9ucyk7CisgICAgICAgIH0K
KyAgICAgIH0KKworICAgICAgLy8gWW91IG1pZ2h0IGJlIHdvbmRlcmluZyB3aHkgdGhlcmUncyBh
IGB3aGlsZWAgbG9vcCBoZXJlLiBDaGFuZ2VzIGNhbgorICAgICAgLy8gYmUgcmVjdXJzaXZlbHkg
bmVzdGVkIHdpdGhpbiBgImNoYW5nZSJgIGV2ZW50cy4KKyAgICAgIGlmIChjaGFuZ2luZykgcmV0
dXJuIHRoaXM7CisgICAgICBpZiAoIXNpbGVudCkgeworICAgICAgICB3aGlsZSAodGhpcy5fcGVu
ZGluZykgeworICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLl9wZW5kaW5nOworICAgICAgICAgIHRo
aXMuX3BlbmRpbmcgPSBmYWxzZTsKKyAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2NoYW5nZScsIHRo
aXMsIG9wdGlvbnMpOworICAgICAgICB9CisgICAgICB9CisgICAgICB0aGlzLl9wZW5kaW5nID0g
ZmFsc2U7CisgICAgICB0aGlzLl9jaGFuZ2luZyA9IGZhbHNlOworICAgICAgcmV0dXJuIHRoaXM7
CisgICAgfSwKKworICAgIC8vIFJlbW92ZSBhbiBhdHRyaWJ1dGUgZnJvbSB0aGUgbW9kZWwsIGZp
cmluZyBgImNoYW5nZSJgLiBgdW5zZXRgIGlzIGEgbm9vcAorICAgIC8vIGlmIHRoZSBhdHRyaWJ1
dGUgZG9lc24ndCBleGlzdC4KKyAgICB1bnNldDogZnVuY3Rpb24oYXR0ciwgb3B0aW9ucykgewor
ICAgICAgcmV0dXJuIHRoaXMuc2V0KGF0dHIsIHZvaWQgMCwgXy5leHRlbmQoe30sIG9wdGlvbnMs
IHt1bnNldDogdHJ1ZX0pKTsKKyAgICB9LAorCisgICAgLy8gQ2xlYXIgYWxsIGF0dHJpYnV0ZXMg
b24gdGhlIG1vZGVsLCBmaXJpbmcgYCJjaGFuZ2UiYC4KKyAgICBjbGVhcjogZnVuY3Rpb24ob3B0
aW9ucykgeworICAgICAgdmFyIGF0dHJzID0ge307CisgICAgICBmb3IgKHZhciBrZXkgaW4gdGhp
cy5hdHRyaWJ1dGVzKSBhdHRyc1trZXldID0gdm9pZCAwOworICAgICAgcmV0dXJuIHRoaXMuc2V0
KGF0dHJzLCBfLmV4dGVuZCh7fSwgb3B0aW9ucywge3Vuc2V0OiB0cnVlfSkpOworICAgIH0sCisK
KyAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIG1vZGVsIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0
IGAiY2hhbmdlImAgZXZlbnQuCisgICAgLy8gSWYgeW91IHNwZWNpZnkgYW4gYXR0cmlidXRlIG5h
bWUsIGRldGVybWluZSBpZiB0aGF0IGF0dHJpYnV0ZSBoYXMgY2hhbmdlZC4KKyAgICBoYXNDaGFu
Z2VkOiBmdW5jdGlvbihhdHRyKSB7CisgICAgICBpZiAoYXR0ciA9PSBudWxsKSByZXR1cm4gIV8u
aXNFbXB0eSh0aGlzLmNoYW5nZWQpOworICAgICAgcmV0dXJuIF8uaGFzKHRoaXMuY2hhbmdlZCwg
YXR0cik7CisgICAgfSwKKworICAgIC8vIFJldHVybiBhbiBvYmplY3QgY29udGFpbmluZyBhbGwg
dGhlIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIGNoYW5nZWQsIG9yCisgICAgLy8gZmFsc2UgaWYgdGhl
cmUgYXJlIG5vIGNoYW5nZWQgYXR0cmlidXRlcy4gVXNlZnVsIGZvciBkZXRlcm1pbmluZyB3aGF0
CisgICAgLy8gcGFydHMgb2YgYSB2aWV3IG5lZWQgdG8gYmUgdXBkYXRlZCBhbmQvb3Igd2hhdCBh
dHRyaWJ1dGVzIG5lZWQgdG8gYmUKKyAgICAvLyBwZXJzaXN0ZWQgdG8gdGhlIHNlcnZlci4gVW5z
ZXQgYXR0cmlidXRlcyB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQuCisgICAgLy8gWW91IGNhbiBh
bHNvIHBhc3MgYW4gYXR0cmlidXRlcyBvYmplY3QgdG8gZGlmZiBhZ2FpbnN0IHRoZSBtb2RlbCwK
KyAgICAvLyBkZXRlcm1pbmluZyBpZiB0aGVyZSAqd291bGQgYmUqIGEgY2hhbmdlLgorICAgIGNo
YW5nZWRBdHRyaWJ1dGVzOiBmdW5jdGlvbihkaWZmKSB7CisgICAgICBpZiAoIWRpZmYpIHJldHVy
biB0aGlzLmhhc0NoYW5nZWQoKSA/IF8uY2xvbmUodGhpcy5jaGFuZ2VkKSA6IGZhbHNlOworICAg
ICAgdmFyIG9sZCA9IHRoaXMuX2NoYW5naW5nID8gdGhpcy5fcHJldmlvdXNBdHRyaWJ1dGVzIDog
dGhpcy5hdHRyaWJ1dGVzOworICAgICAgdmFyIGNoYW5nZWQgPSB7fTsKKyAgICAgIGZvciAodmFy
IGF0dHIgaW4gZGlmZikgeworICAgICAgICB2YXIgdmFsID0gZGlmZlthdHRyXTsKKyAgICAgICAg
aWYgKF8uaXNFcXVhbChvbGRbYXR0cl0sIHZhbCkpIGNvbnRpbnVlOworICAgICAgICBjaGFuZ2Vk
W2F0dHJdID0gdmFsOworICAgICAgfQorICAgICAgcmV0dXJuIF8uc2l6ZShjaGFuZ2VkKSA/IGNo
YW5nZWQgOiBmYWxzZTsKKyAgICB9LAorCisgICAgLy8gR2V0IHRoZSBwcmV2aW91cyB2YWx1ZSBv
ZiBhbiBhdHRyaWJ1dGUsIHJlY29yZGVkIGF0IHRoZSB0aW1lIHRoZSBsYXN0CisgICAgLy8gYCJj
aGFuZ2UiYCBldmVudCB3YXMgZmlyZWQuCisgICAgcHJldmlvdXM6IGZ1bmN0aW9uKGF0dHIpIHsK
KyAgICAgIGlmIChhdHRyID09IG51bGwgfHwgIXRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcykgcmV0
dXJuIG51bGw7CisgICAgICByZXR1cm4gdGhpcy5fcHJldmlvdXNBdHRyaWJ1dGVzW2F0dHJdOwor
ICAgIH0sCisKKyAgICAvLyBHZXQgYWxsIG9mIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBtb2RlbCBh
dCB0aGUgdGltZSBvZiB0aGUgcHJldmlvdXMKKyAgICAvLyBgImNoYW5nZSJgIGV2ZW50LgorICAg
IHByZXZpb3VzQXR0cmlidXRlczogZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gXy5jbG9uZSh0
aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMpOworICAgIH0sCisKKyAgICAvLyBGZXRjaCB0aGUgbW9k
ZWwgZnJvbSB0aGUgc2VydmVyLCBtZXJnaW5nIHRoZSByZXNwb25zZSB3aXRoIHRoZSBtb2RlbCdz
CisgICAgLy8gbG9jYWwgYXR0cmlidXRlcy4gQW55IGNoYW5nZWQgYXR0cmlidXRlcyB3aWxsIHRy
aWdnZXIgYSAiY2hhbmdlIiBldmVudC4KKyAgICBmZXRjaDogZnVuY3Rpb24ob3B0aW9ucykgewor
ICAgICAgb3B0aW9ucyA9IF8uZXh0ZW5kKHtwYXJzZTogdHJ1ZX0sIG9wdGlvbnMpOworICAgICAg
dmFyIG1vZGVsID0gdGhpczsKKyAgICAgIHZhciBzdWNjZXNzID0gb3B0aW9ucy5zdWNjZXNzOwor
ICAgICAgb3B0aW9ucy5zdWNjZXNzID0gZnVuY3Rpb24ocmVzcCkgeworICAgICAgICB2YXIgc2Vy
dmVyQXR0cnMgPSBvcHRpb25zLnBhcnNlID8gbW9kZWwucGFyc2UocmVzcCwgb3B0aW9ucykgOiBy
ZXNwOworICAgICAgICBpZiAoIW1vZGVsLnNldChzZXJ2ZXJBdHRycywgb3B0aW9ucykpIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHN1Y2Nlc3MuY2FsbChvcHRpb25zLmNvbnRl
eHQsIG1vZGVsLCByZXNwLCBvcHRpb25zKTsKKyAgICAgICAgbW9kZWwudHJpZ2dlcignc3luYycs
IG1vZGVsLCByZXNwLCBvcHRpb25zKTsKKyAgICAgIH07CisgICAgICB3cmFwRXJyb3IodGhpcywg
b3B0aW9ucyk7CisgICAgICByZXR1cm4gdGhpcy5zeW5jKCdyZWFkJywgdGhpcywgb3B0aW9ucyk7
CisgICAgfSwKKworICAgIC8vIFNldCBhIGhhc2ggb2YgbW9kZWwgYXR0cmlidXRlcywgYW5kIHN5
bmMgdGhlIG1vZGVsIHRvIHRoZSBzZXJ2ZXIuCisgICAgLy8gSWYgdGhlIHNlcnZlciByZXR1cm5z
IGFuIGF0dHJpYnV0ZXMgaGFzaCB0aGF0IGRpZmZlcnMsIHRoZSBtb2RlbCdzCisgICAgLy8gc3Rh
dGUgd2lsbCBiZSBgc2V0YCBhZ2Fpbi4KKyAgICBzYXZlOiBmdW5jdGlvbihrZXksIHZhbCwgb3B0
aW9ucykgeworICAgICAgLy8gSGFuZGxlIGJvdGggYCJrZXkiLCB2YWx1ZWAgYW5kIGB7a2V5OiB2
YWx1ZX1gIC1zdHlsZSBhcmd1bWVudHMuCisgICAgICB2YXIgYXR0cnM7CisgICAgICBpZiAoa2V5
ID09IG51bGwgfHwgdHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHsKKyAgICAgICAgYXR0cnMgPSBr
ZXk7CisgICAgICAgIG9wdGlvbnMgPSB2YWw7CisgICAgICB9IGVsc2UgeworICAgICAgICAoYXR0
cnMgPSB7fSlba2V5XSA9IHZhbDsKKyAgICAgIH0KKworICAgICAgb3B0aW9ucyA9IF8uZXh0ZW5k
KHt2YWxpZGF0ZTogdHJ1ZSwgcGFyc2U6IHRydWV9LCBvcHRpb25zKTsKKyAgICAgIHZhciB3YWl0
ID0gb3B0aW9ucy53YWl0OworCisgICAgICAvLyBJZiB3ZSdyZSBub3Qgd2FpdGluZyBhbmQgYXR0
cmlidXRlcyBleGlzdCwgc2F2ZSBhY3RzIGFzCisgICAgICAvLyBgc2V0KGF0dHIpLnNhdmUobnVs
bCwgb3B0cylgIHdpdGggdmFsaWRhdGlvbi4gT3RoZXJ3aXNlLCBjaGVjayBpZgorICAgICAgLy8g
dGhlIG1vZGVsIHdpbGwgYmUgdmFsaWQgd2hlbiB0aGUgYXR0cmlidXRlcywgaWYgYW55LCBhcmUg
c2V0LgorICAgICAgaWYgKGF0dHJzICYmICF3YWl0KSB7CisgICAgICAgIGlmICghdGhpcy5zZXQo
YXR0cnMsIG9wdGlvbnMpKSByZXR1cm4gZmFsc2U7CisgICAgICB9IGVsc2UgaWYgKCF0aGlzLl92
YWxpZGF0ZShhdHRycywgb3B0aW9ucykpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
fQorCisgICAgICAvLyBBZnRlciBhIHN1Y2Nlc3NmdWwgc2VydmVyLXNpZGUgc2F2ZSwgdGhlIGNs
aWVudCBpcyAob3B0aW9uYWxseSkKKyAgICAgIC8vIHVwZGF0ZWQgd2l0aCB0aGUgc2VydmVyLXNp
ZGUgc3RhdGUuCisgICAgICB2YXIgbW9kZWwgPSB0aGlzOworICAgICAgdmFyIHN1Y2Nlc3MgPSBv
cHRpb25zLnN1Y2Nlc3M7CisgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlczsK
KyAgICAgIG9wdGlvbnMuc3VjY2VzcyA9IGZ1bmN0aW9uKHJlc3ApIHsKKyAgICAgICAgLy8gRW5z
dXJlIGF0dHJpYnV0ZXMgYXJlIHJlc3RvcmVkIGR1cmluZyBzeW5jaHJvbm91cyBzYXZlcy4KKyAg
ICAgICAgbW9kZWwuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CisgICAgICAgIHZhciBzZXJ2ZXJB
dHRycyA9IG9wdGlvbnMucGFyc2UgPyBtb2RlbC5wYXJzZShyZXNwLCBvcHRpb25zKSA6IHJlc3A7
CisgICAgICAgIGlmICh3YWl0KSBzZXJ2ZXJBdHRycyA9IF8uZXh0ZW5kKHt9LCBhdHRycywgc2Vy
dmVyQXR0cnMpOworICAgICAgICBpZiAoc2VydmVyQXR0cnMgJiYgIW1vZGVsLnNldChzZXJ2ZXJB
dHRycywgb3B0aW9ucykpIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHN1Y2Nl
c3MuY2FsbChvcHRpb25zLmNvbnRleHQsIG1vZGVsLCByZXNwLCBvcHRpb25zKTsKKyAgICAgICAg
bW9kZWwudHJpZ2dlcignc3luYycsIG1vZGVsLCByZXNwLCBvcHRpb25zKTsKKyAgICAgIH07Cisg
ICAgICB3cmFwRXJyb3IodGhpcywgb3B0aW9ucyk7CisKKyAgICAgIC8vIFNldCB0ZW1wb3Jhcnkg
YXR0cmlidXRlcyBpZiBge3dhaXQ6IHRydWV9YCB0byBwcm9wZXJseSBmaW5kIG5ldyBpZHMuCisg
ICAgICBpZiAoYXR0cnMgJiYgd2FpdCkgdGhpcy5hdHRyaWJ1dGVzID0gXy5leHRlbmQoe30sIGF0
dHJpYnV0ZXMsIGF0dHJzKTsKKworICAgICAgdmFyIG1ldGhvZCA9IHRoaXMuaXNOZXcoKSA/ICdj
cmVhdGUnIDogKG9wdGlvbnMucGF0Y2ggPyAncGF0Y2gnIDogJ3VwZGF0ZScpOworICAgICAgaWYg
KG1ldGhvZCA9PT0gJ3BhdGNoJyAmJiAhb3B0aW9ucy5hdHRycykgb3B0aW9ucy5hdHRycyA9IGF0
dHJzOworICAgICAgdmFyIHhociA9IHRoaXMuc3luYyhtZXRob2QsIHRoaXMsIG9wdGlvbnMpOwor
CisgICAgICAvLyBSZXN0b3JlIGF0dHJpYnV0ZXMuCisgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBh
dHRyaWJ1dGVzOworCisgICAgICByZXR1cm4geGhyOworICAgIH0sCisKKyAgICAvLyBEZXN0cm95
IHRoaXMgbW9kZWwgb24gdGhlIHNlcnZlciBpZiBpdCB3YXMgYWxyZWFkeSBwZXJzaXN0ZWQuCisg
ICAgLy8gT3B0aW1pc3RpY2FsbHkgcmVtb3ZlcyB0aGUgbW9kZWwgZnJvbSBpdHMgY29sbGVjdGlv
biwgaWYgaXQgaGFzIG9uZS4KKyAgICAvLyBJZiBgd2FpdDogdHJ1ZWAgaXMgcGFzc2VkLCB3YWl0
cyBmb3IgdGhlIHNlcnZlciB0byByZXNwb25kIGJlZm9yZSByZW1vdmFsLgorICAgIGRlc3Ryb3k6
IGZ1bmN0aW9uKG9wdGlvbnMpIHsKKyAgICAgIG9wdGlvbnMgPSBvcHRpb25zID8gXy5jbG9uZShv
cHRpb25zKSA6IHt9OworICAgICAgdmFyIG1vZGVsID0gdGhpczsKKyAgICAgIHZhciBzdWNjZXNz
ID0gb3B0aW9ucy5zdWNjZXNzOworICAgICAgdmFyIHdhaXQgPSBvcHRpb25zLndhaXQ7CisKKyAg
ICAgIHZhciBkZXN0cm95ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIG1vZGVsLnN0b3BMaXN0ZW5p
bmcoKTsKKyAgICAgICAgbW9kZWwudHJpZ2dlcignZGVzdHJveScsIG1vZGVsLCBtb2RlbC5jb2xs
ZWN0aW9uLCBvcHRpb25zKTsKKyAgICAgIH07CisKKyAgICAgIG9wdGlvbnMuc3VjY2VzcyA9IGZ1
bmN0aW9uKHJlc3ApIHsKKyAgICAgICAgaWYgKHdhaXQpIGRlc3Ryb3koKTsKKyAgICAgICAgaWYg
KHN1Y2Nlc3MpIHN1Y2Nlc3MuY2FsbChvcHRpb25zLmNvbnRleHQsIG1vZGVsLCByZXNwLCBvcHRp
b25zKTsKKyAgICAgICAgaWYgKCFtb2RlbC5pc05ldygpKSBtb2RlbC50cmlnZ2VyKCdzeW5jJywg
bW9kZWwsIHJlc3AsIG9wdGlvbnMpOworICAgICAgfTsKKworICAgICAgdmFyIHhociA9IGZhbHNl
OworICAgICAgaWYgKHRoaXMuaXNOZXcoKSkgeworICAgICAgICBfLmRlZmVyKG9wdGlvbnMuc3Vj
Y2Vzcyk7CisgICAgICB9IGVsc2UgeworICAgICAgICB3cmFwRXJyb3IodGhpcywgb3B0aW9ucyk7
CisgICAgICAgIHhociA9IHRoaXMuc3luYygnZGVsZXRlJywgdGhpcywgb3B0aW9ucyk7CisgICAg
ICB9CisgICAgICBpZiAoIXdhaXQpIGRlc3Ryb3koKTsKKyAgICAgIHJldHVybiB4aHI7CisgICAg
fSwKKworICAgIC8vIERlZmF1bHQgVVJMIGZvciB0aGUgbW9kZWwncyByZXByZXNlbnRhdGlvbiBv
biB0aGUgc2VydmVyIC0tIGlmIHlvdSdyZQorICAgIC8vIHVzaW5nIEJhY2tib25lJ3MgcmVzdGZ1
bCBtZXRob2RzLCBvdmVycmlkZSB0aGlzIHRvIGNoYW5nZSB0aGUgZW5kcG9pbnQKKyAgICAvLyB0
aGF0IHdpbGwgYmUgY2FsbGVkLgorICAgIHVybDogZnVuY3Rpb24oKSB7CisgICAgICB2YXIgYmFz
ZSA9CisgICAgICAgIF8ucmVzdWx0KHRoaXMsICd1cmxSb290JykgfHwKKyAgICAgICAgXy5yZXN1
bHQodGhpcy5jb2xsZWN0aW9uLCAndXJsJykgfHwKKyAgICAgICAgdXJsRXJyb3IoKTsKKyAgICAg
IGlmICh0aGlzLmlzTmV3KCkpIHJldHVybiBiYXNlOworICAgICAgdmFyIGlkID0gdGhpcy5nZXQo
dGhpcy5pZEF0dHJpYnV0ZSk7CisgICAgICByZXR1cm4gYmFzZS5yZXBsYWNlKC9bXlwvXSQvLCAn
JCYvJykgKyBlbmNvZGVVUklDb21wb25lbnQoaWQpOworICAgIH0sCisKKyAgICAvLyAqKnBhcnNl
KiogY29udmVydHMgYSByZXNwb25zZSBpbnRvIHRoZSBoYXNoIG9mIGF0dHJpYnV0ZXMgdG8gYmUg
YHNldGAgb24KKyAgICAvLyB0aGUgbW9kZWwuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlz
IGp1c3QgdG8gcGFzcyB0aGUgcmVzcG9uc2UgYWxvbmcuCisgICAgcGFyc2U6IGZ1bmN0aW9uKHJl
c3AsIG9wdGlvbnMpIHsKKyAgICAgIHJldHVybiByZXNwOworICAgIH0sCisKKyAgICAvLyBDcmVh
dGUgYSBuZXcgbW9kZWwgd2l0aCBpZGVudGljYWwgYXR0cmlidXRlcyB0byB0aGlzIG9uZS4KKyAg
ICBjbG9uZTogZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3Io
dGhpcy5hdHRyaWJ1dGVzKTsKKyAgICB9LAorCisgICAgLy8gQSBtb2RlbCBpcyBuZXcgaWYgaXQg
aGFzIG5ldmVyIGJlZW4gc2F2ZWQgdG8gdGhlIHNlcnZlciwgYW5kIGxhY2tzIGFuIGlkLgorICAg
IGlzTmV3OiBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiAhdGhpcy5oYXModGhpcy5pZEF0dHJp
YnV0ZSk7CisgICAgfSwKKworICAgIC8vIENoZWNrIGlmIHRoZSBtb2RlbCBpcyBjdXJyZW50bHkg
aW4gYSB2YWxpZCBzdGF0ZS4KKyAgICBpc1ZhbGlkOiBmdW5jdGlvbihvcHRpb25zKSB7CisgICAg
ICByZXR1cm4gdGhpcy5fdmFsaWRhdGUoe30sIF8uZXh0ZW5kKHt9LCBvcHRpb25zLCB7dmFsaWRh
dGU6IHRydWV9KSk7CisgICAgfSwKKworICAgIC8vIFJ1biB2YWxpZGF0aW9uIGFnYWluc3QgdGhl
IG5leHQgY29tcGxldGUgc2V0IG9mIG1vZGVsIGF0dHJpYnV0ZXMsCisgICAgLy8gcmV0dXJuaW5n
IGB0cnVlYCBpZiBhbGwgaXMgd2VsbC4gT3RoZXJ3aXNlLCBmaXJlIGFuIGAiaW52YWxpZCJgIGV2
ZW50LgorICAgIF92YWxpZGF0ZTogZnVuY3Rpb24oYXR0cnMsIG9wdGlvbnMpIHsKKyAgICAgIGlm
ICghb3B0aW9ucy52YWxpZGF0ZSB8fCAhdGhpcy52YWxpZGF0ZSkgcmV0dXJuIHRydWU7CisgICAg
ICBhdHRycyA9IF8uZXh0ZW5kKHt9LCB0aGlzLmF0dHJpYnV0ZXMsIGF0dHJzKTsKKyAgICAgIHZh
ciBlcnJvciA9IHRoaXMudmFsaWRhdGlvbkVycm9yID0gdGhpcy52YWxpZGF0ZShhdHRycywgb3B0
aW9ucykgfHwgbnVsbDsKKyAgICAgIGlmICghZXJyb3IpIHJldHVybiB0cnVlOworICAgICAgdGhp
cy50cmlnZ2VyKCdpbnZhbGlkJywgdGhpcywgZXJyb3IsIF8uZXh0ZW5kKG9wdGlvbnMsIHt2YWxp
ZGF0aW9uRXJyb3I6IGVycm9yfSkpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICB9
KTsKKworICAvLyBVbmRlcnNjb3JlIG1ldGhvZHMgdGhhdCB3ZSB3YW50IHRvIGltcGxlbWVudCBv
biB0aGUgTW9kZWwsIG1hcHBlZCB0byB0aGUKKyAgLy8gbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGV5
IHRha2UuCisgIHZhciBtb2RlbE1ldGhvZHMgPSB7a2V5czogMSwgdmFsdWVzOiAxLCBwYWlyczog
MSwgaW52ZXJ0OiAxLCBwaWNrOiAwLAorICAgICAgb21pdDogMCwgY2hhaW46IDEsIGlzRW1wdHk6
IDF9OworCisgIC8vIE1peCBpbiBlYWNoIFVuZGVyc2NvcmUgbWV0aG9kIGFzIGEgcHJveHkgdG8g
YE1vZGVsI2F0dHJpYnV0ZXNgLgorICBhZGRVbmRlcnNjb3JlTWV0aG9kcyhNb2RlbCwgbW9kZWxN
ZXRob2RzLCAnYXR0cmlidXRlcycpOworCisgIC8vIEJhY2tib25lLkNvbGxlY3Rpb24KKyAgLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIC8vIElmIG1vZGVscyB0ZW5kIHRvIHJlcHJlc2VudCBh
IHNpbmdsZSByb3cgb2YgZGF0YSwgYSBCYWNrYm9uZSBDb2xsZWN0aW9uIGlzCisgIC8vIG1vcmUg
YW5hbG9nb3VzIHRvIGEgdGFibGUgZnVsbCBvZiBkYXRhIC4uLiBvciBhIHNtYWxsIHNsaWNlIG9y
IHBhZ2Ugb2YgdGhhdAorICAvLyB0YWJsZSwgb3IgYSBjb2xsZWN0aW9uIG9mIHJvd3MgdGhhdCBi
ZWxvbmcgdG9nZXRoZXIgZm9yIGEgcGFydGljdWxhciByZWFzb24KKyAgLy8gLS0gYWxsIG9mIHRo
ZSBtZXNzYWdlcyBpbiB0aGlzIHBhcnRpY3VsYXIgZm9sZGVyLCBhbGwgb2YgdGhlIGRvY3VtZW50
cworICAvLyBiZWxvbmdpbmcgdG8gdGhpcyBwYXJ0aWN1bGFyIGF1dGhvciwgYW5kIHNvIG9uLiBD
b2xsZWN0aW9ucyBtYWludGFpbgorICAvLyBpbmRleGVzIG9mIHRoZWlyIG1vZGVscywgYm90aCBp
biBvcmRlciwgYW5kIGZvciBsb29rdXAgYnkgYGlkYC4KKworICAvLyBDcmVhdGUgYSBuZXcgKipD
b2xsZWN0aW9uKiosIHBlcmhhcHMgdG8gY29udGFpbiBhIHNwZWNpZmljIHR5cGUgb2YgYG1vZGVs
YC4KKyAgLy8gSWYgYSBgY29tcGFyYXRvcmAgaXMgc3BlY2lmaWVkLCB0aGUgQ29sbGVjdGlvbiB3
aWxsIG1haW50YWluCisgIC8vIGl0cyBtb2RlbHMgaW4gc29ydCBvcmRlciwgYXMgdGhleSdyZSBh
ZGRlZCBhbmQgcmVtb3ZlZC4KKyAgdmFyIENvbGxlY3Rpb24gPSBCYWNrYm9uZS5Db2xsZWN0aW9u
ID0gZnVuY3Rpb24obW9kZWxzLCBvcHRpb25zKSB7CisgICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9
IHt9KTsKKyAgICBpZiAob3B0aW9ucy5tb2RlbCkgdGhpcy5tb2RlbCA9IG9wdGlvbnMubW9kZWw7
CisgICAgaWYgKG9wdGlvbnMuY29tcGFyYXRvciAhPT0gdm9pZCAwKSB0aGlzLmNvbXBhcmF0b3Ig
PSBvcHRpb25zLmNvbXBhcmF0b3I7CisgICAgdGhpcy5fcmVzZXQoKTsKKyAgICB0aGlzLmluaXRp
YWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICBpZiAobW9kZWxzKSB0aGlzLnJlc2V0
KG1vZGVscywgXy5leHRlbmQoe3NpbGVudDogdHJ1ZX0sIG9wdGlvbnMpKTsKKyAgfTsKKworICAv
LyBEZWZhdWx0IG9wdGlvbnMgZm9yIGBDb2xsZWN0aW9uI3NldGAuCisgIHZhciBzZXRPcHRpb25z
ID0ge2FkZDogdHJ1ZSwgcmVtb3ZlOiB0cnVlLCBtZXJnZTogdHJ1ZX07CisgIHZhciBhZGRPcHRp
b25zID0ge2FkZDogdHJ1ZSwgcmVtb3ZlOiBmYWxzZX07CisKKyAgLy8gU3BsaWNlcyBgaW5zZXJ0
YCBpbnRvIGBhcnJheWAgYXQgaW5kZXggYGF0YC4KKyAgdmFyIHNwbGljZSA9IGZ1bmN0aW9uKGFy
cmF5LCBpbnNlcnQsIGF0KSB7CisgICAgYXQgPSBNYXRoLm1pbihNYXRoLm1heChhdCwgMCksIGFy
cmF5Lmxlbmd0aCk7CisgICAgdmFyIHRhaWwgPSBBcnJheShhcnJheS5sZW5ndGggLSBhdCk7Cisg
ICAgdmFyIGxlbmd0aCA9IGluc2VydC5sZW5ndGg7CisgICAgdmFyIGk7CisgICAgZm9yIChpID0g
MDsgaSA8IHRhaWwubGVuZ3RoOyBpKyspIHRhaWxbaV0gPSBhcnJheVtpICsgYXRdOworICAgIGZv
ciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgYXJyYXlbaSArIGF0XSA9IGluc2VydFtpXTsKKyAg
ICBmb3IgKGkgPSAwOyBpIDwgdGFpbC5sZW5ndGg7IGkrKykgYXJyYXlbaSArIGxlbmd0aCArIGF0
XSA9IHRhaWxbaV07CisgIH07CisKKyAgLy8gRGVmaW5lIHRoZSBDb2xsZWN0aW9uJ3MgaW5oZXJp
dGFibGUgbWV0aG9kcy4KKyAgXy5leHRlbmQoQ29sbGVjdGlvbi5wcm90b3R5cGUsIEV2ZW50cywg
eworCisgICAgLy8gVGhlIGRlZmF1bHQgbW9kZWwgZm9yIGEgY29sbGVjdGlvbiBpcyBqdXN0IGEg
KipCYWNrYm9uZS5Nb2RlbCoqLgorICAgIC8vIFRoaXMgc2hvdWxkIGJlIG92ZXJyaWRkZW4gaW4g
bW9zdCBjYXNlcy4KKyAgICBtb2RlbDogTW9kZWwsCisKKyAgICAvLyBJbml0aWFsaXplIGlzIGFu
IGVtcHR5IGZ1bmN0aW9uIGJ5IGRlZmF1bHQuIE92ZXJyaWRlIGl0IHdpdGggeW91ciBvd24KKyAg
ICAvLyBpbml0aWFsaXphdGlvbiBsb2dpYy4KKyAgICBpbml0aWFsaXplOiBmdW5jdGlvbigpe30s
CisKKyAgICAvLyBUaGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIENvbGxlY3Rpb24gaXMgYW4g
YXJyYXkgb2YgdGhlCisgICAgLy8gbW9kZWxzJyBhdHRyaWJ1dGVzLgorICAgIHRvSlNPTjogZnVu
Y3Rpb24ob3B0aW9ucykgeworICAgICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKG1vZGVsKSB7
IHJldHVybiBtb2RlbC50b0pTT04ob3B0aW9ucyk7IH0pOworICAgIH0sCisKKyAgICAvLyBQcm94
eSBgQmFja2JvbmUuc3luY2AgYnkgZGVmYXVsdC4KKyAgICBzeW5jOiBmdW5jdGlvbigpIHsKKyAg
ICAgIHJldHVybiBCYWNrYm9uZS5zeW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgfSwK
KworICAgIC8vIEFkZCBhIG1vZGVsLCBvciBsaXN0IG9mIG1vZGVscyB0byB0aGUgc2V0LiBgbW9k
ZWxzYCBtYXkgYmUgQmFja2JvbmUKKyAgICAvLyBNb2RlbHMgb3IgcmF3IEphdmFTY3JpcHQgb2Jq
ZWN0cyB0byBiZSBjb252ZXJ0ZWQgdG8gTW9kZWxzLCBvciBhbnkKKyAgICAvLyBjb21iaW5hdGlv
biBvZiB0aGUgdHdvLgorICAgIGFkZDogZnVuY3Rpb24obW9kZWxzLCBvcHRpb25zKSB7CisgICAg
ICByZXR1cm4gdGhpcy5zZXQobW9kZWxzLCBfLmV4dGVuZCh7bWVyZ2U6IGZhbHNlfSwgb3B0aW9u
cywgYWRkT3B0aW9ucykpOworICAgIH0sCisKKyAgICAvLyBSZW1vdmUgYSBtb2RlbCwgb3IgYSBs
aXN0IG9mIG1vZGVscyBmcm9tIHRoZSBzZXQuCisgICAgcmVtb3ZlOiBmdW5jdGlvbihtb2RlbHMs
IG9wdGlvbnMpIHsKKyAgICAgIG9wdGlvbnMgPSBfLmV4dGVuZCh7fSwgb3B0aW9ucyk7CisgICAg
ICB2YXIgc2luZ3VsYXIgPSAhXy5pc0FycmF5KG1vZGVscyk7CisgICAgICBtb2RlbHMgPSBzaW5n
dWxhciA/IFttb2RlbHNdIDogbW9kZWxzLnNsaWNlKCk7CisgICAgICB2YXIgcmVtb3ZlZCA9IHRo
aXMuX3JlbW92ZU1vZGVscyhtb2RlbHMsIG9wdGlvbnMpOworICAgICAgaWYgKCFvcHRpb25zLnNp
bGVudCAmJiByZW1vdmVkLmxlbmd0aCkgeworICAgICAgICBvcHRpb25zLmNoYW5nZXMgPSB7YWRk
ZWQ6IFtdLCBtZXJnZWQ6IFtdLCByZW1vdmVkOiByZW1vdmVkfTsKKyAgICAgICAgdGhpcy50cmln
Z2VyKCd1cGRhdGUnLCB0aGlzLCBvcHRpb25zKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBzaW5n
dWxhciA/IHJlbW92ZWRbMF0gOiByZW1vdmVkOworICAgIH0sCisKKyAgICAvLyBVcGRhdGUgYSBj
b2xsZWN0aW9uIGJ5IGBzZXRgLWluZyBhIG5ldyBsaXN0IG9mIG1vZGVscywgYWRkaW5nIG5ldyBv
bmVzLAorICAgIC8vIHJlbW92aW5nIG1vZGVscyB0aGF0IGFyZSBubyBsb25nZXIgcHJlc2VudCwg
YW5kIG1lcmdpbmcgbW9kZWxzIHRoYXQKKyAgICAvLyBhbHJlYWR5IGV4aXN0IGluIHRoZSBjb2xs
ZWN0aW9uLCBhcyBuZWNlc3NhcnkuIFNpbWlsYXIgdG8gKipNb2RlbCNzZXQqKiwKKyAgICAvLyB0
aGUgY29yZSBvcGVyYXRpb24gZm9yIHVwZGF0aW5nIHRoZSBkYXRhIGNvbnRhaW5lZCBieSB0aGUg
Y29sbGVjdGlvbi4KKyAgICBzZXQ6IGZ1bmN0aW9uKG1vZGVscywgb3B0aW9ucykgeworICAgICAg
aWYgKG1vZGVscyA9PSBudWxsKSByZXR1cm47CisKKyAgICAgIG9wdGlvbnMgPSBfLmV4dGVuZCh7
fSwgc2V0T3B0aW9ucywgb3B0aW9ucyk7CisgICAgICBpZiAob3B0aW9ucy5wYXJzZSAmJiAhdGhp
cy5faXNNb2RlbChtb2RlbHMpKSB7CisgICAgICAgIG1vZGVscyA9IHRoaXMucGFyc2UobW9kZWxz
LCBvcHRpb25zKSB8fCBbXTsKKyAgICAgIH0KKworICAgICAgdmFyIHNpbmd1bGFyID0gIV8uaXNB
cnJheShtb2RlbHMpOworICAgICAgbW9kZWxzID0gc2luZ3VsYXIgPyBbbW9kZWxzXSA6IG1vZGVs
cy5zbGljZSgpOworCisgICAgICB2YXIgYXQgPSBvcHRpb25zLmF0OworICAgICAgaWYgKGF0ICE9
IG51bGwpIGF0ID0gK2F0OworICAgICAgaWYgKGF0ID4gdGhpcy5sZW5ndGgpIGF0ID0gdGhpcy5s
ZW5ndGg7CisgICAgICBpZiAoYXQgPCAwKSBhdCArPSB0aGlzLmxlbmd0aCArIDE7CisKKyAgICAg
IHZhciBzZXQgPSBbXTsKKyAgICAgIHZhciB0b0FkZCA9IFtdOworICAgICAgdmFyIHRvTWVyZ2Ug
PSBbXTsKKyAgICAgIHZhciB0b1JlbW92ZSA9IFtdOworICAgICAgdmFyIG1vZGVsTWFwID0ge307
CisKKyAgICAgIHZhciBhZGQgPSBvcHRpb25zLmFkZDsKKyAgICAgIHZhciBtZXJnZSA9IG9wdGlv
bnMubWVyZ2U7CisgICAgICB2YXIgcmVtb3ZlID0gb3B0aW9ucy5yZW1vdmU7CisKKyAgICAgIHZh
ciBzb3J0ID0gZmFsc2U7CisgICAgICB2YXIgc29ydGFibGUgPSB0aGlzLmNvbXBhcmF0b3IgJiYg
YXQgPT0gbnVsbCAmJiBvcHRpb25zLnNvcnQgIT09IGZhbHNlOworICAgICAgdmFyIHNvcnRBdHRy
ID0gXy5pc1N0cmluZyh0aGlzLmNvbXBhcmF0b3IpID8gdGhpcy5jb21wYXJhdG9yIDogbnVsbDsK
KworICAgICAgLy8gVHVybiBiYXJlIG9iamVjdHMgaW50byBtb2RlbCByZWZlcmVuY2VzLCBhbmQg
cHJldmVudCBpbnZhbGlkIG1vZGVscworICAgICAgLy8gZnJvbSBiZWluZyBhZGRlZC4KKyAgICAg
IHZhciBtb2RlbCwgaTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBtb2RlbHMubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgbW9kZWwgPSBtb2RlbHNbaV07CisKKyAgICAgICAgLy8gSWYgYSBkdXBsaWNh
dGUgaXMgZm91bmQsIHByZXZlbnQgaXQgZnJvbSBiZWluZyBhZGRlZCBhbmQKKyAgICAgICAgLy8g
b3B0aW9uYWxseSBtZXJnZSBpdCBpbnRvIHRoZSBleGlzdGluZyBtb2RlbC4KKyAgICAgICAgdmFy
IGV4aXN0aW5nID0gdGhpcy5nZXQobW9kZWwpOworICAgICAgICBpZiAoZXhpc3RpbmcpIHsKKyAg
ICAgICAgICBpZiAobWVyZ2UgJiYgbW9kZWwgIT09IGV4aXN0aW5nKSB7CisgICAgICAgICAgICB2
YXIgYXR0cnMgPSB0aGlzLl9pc01vZGVsKG1vZGVsKSA/IG1vZGVsLmF0dHJpYnV0ZXMgOiBtb2Rl
bDsKKyAgICAgICAgICAgIGlmIChvcHRpb25zLnBhcnNlKSBhdHRycyA9IGV4aXN0aW5nLnBhcnNl
KGF0dHJzLCBvcHRpb25zKTsKKyAgICAgICAgICAgIGV4aXN0aW5nLnNldChhdHRycywgb3B0aW9u
cyk7CisgICAgICAgICAgICB0b01lcmdlLnB1c2goZXhpc3RpbmcpOworICAgICAgICAgICAgaWYg
KHNvcnRhYmxlICYmICFzb3J0KSBzb3J0ID0gZXhpc3RpbmcuaGFzQ2hhbmdlZChzb3J0QXR0cik7
CisgICAgICAgICAgfQorICAgICAgICAgIGlmICghbW9kZWxNYXBbZXhpc3RpbmcuY2lkXSkgewor
ICAgICAgICAgICAgbW9kZWxNYXBbZXhpc3RpbmcuY2lkXSA9IHRydWU7CisgICAgICAgICAgICBz
ZXQucHVzaChleGlzdGluZyk7CisgICAgICAgICAgfQorICAgICAgICAgIG1vZGVsc1tpXSA9IGV4
aXN0aW5nOworCisgICAgICAgIC8vIElmIHRoaXMgaXMgYSBuZXcsIHZhbGlkIG1vZGVsLCBwdXNo
IGl0IHRvIHRoZSBgdG9BZGRgIGxpc3QuCisgICAgICAgIH0gZWxzZSBpZiAoYWRkKSB7CisgICAg
ICAgICAgbW9kZWwgPSBtb2RlbHNbaV0gPSB0aGlzLl9wcmVwYXJlTW9kZWwobW9kZWwsIG9wdGlv
bnMpOworICAgICAgICAgIGlmIChtb2RlbCkgeworICAgICAgICAgICAgdG9BZGQucHVzaChtb2Rl
bCk7CisgICAgICAgICAgICB0aGlzLl9hZGRSZWZlcmVuY2UobW9kZWwsIG9wdGlvbnMpOworICAg
ICAgICAgICAgbW9kZWxNYXBbbW9kZWwuY2lkXSA9IHRydWU7CisgICAgICAgICAgICBzZXQucHVz
aChtb2RlbCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8vIFJl
bW92ZSBzdGFsZSBtb2RlbHMuCisgICAgICBpZiAocmVtb3ZlKSB7CisgICAgICAgIGZvciAoaSA9
IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgbW9kZWwgPSB0aGlzLm1vZGVs
c1tpXTsKKyAgICAgICAgICBpZiAoIW1vZGVsTWFwW21vZGVsLmNpZF0pIHRvUmVtb3ZlLnB1c2go
bW9kZWwpOworICAgICAgICB9CisgICAgICAgIGlmICh0b1JlbW92ZS5sZW5ndGgpIHRoaXMuX3Jl
bW92ZU1vZGVscyh0b1JlbW92ZSwgb3B0aW9ucyk7CisgICAgICB9CisKKyAgICAgIC8vIFNlZSBp
ZiBzb3J0aW5nIGlzIG5lZWRlZCwgdXBkYXRlIGBsZW5ndGhgIGFuZCBzcGxpY2UgaW4gbmV3IG1v
ZGVscy4KKyAgICAgIHZhciBvcmRlckNoYW5nZWQgPSBmYWxzZTsKKyAgICAgIHZhciByZXBsYWNl
ID0gIXNvcnRhYmxlICYmIGFkZCAmJiByZW1vdmU7CisgICAgICBpZiAoc2V0Lmxlbmd0aCAmJiBy
ZXBsYWNlKSB7CisgICAgICAgIG9yZGVyQ2hhbmdlZCA9IHRoaXMubGVuZ3RoICE9PSBzZXQubGVu
Z3RoIHx8IF8uc29tZSh0aGlzLm1vZGVscywgZnVuY3Rpb24obSwgaW5kZXgpIHsKKyAgICAgICAg
ICByZXR1cm4gbSAhPT0gc2V0W2luZGV4XTsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMubW9k
ZWxzLmxlbmd0aCA9IDA7CisgICAgICAgIHNwbGljZSh0aGlzLm1vZGVscywgc2V0LCAwKTsKKyAg
ICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLm1vZGVscy5sZW5ndGg7CisgICAgICB9IGVsc2UgaWYg
KHRvQWRkLmxlbmd0aCkgeworICAgICAgICBpZiAoc29ydGFibGUpIHNvcnQgPSB0cnVlOworICAg
ICAgICBzcGxpY2UodGhpcy5tb2RlbHMsIHRvQWRkLCBhdCA9PSBudWxsID8gdGhpcy5sZW5ndGgg
OiBhdCk7CisgICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5tb2RlbHMubGVuZ3RoOworICAgICAg
fQorCisgICAgICAvLyBTaWxlbnRseSBzb3J0IHRoZSBjb2xsZWN0aW9uIGlmIGFwcHJvcHJpYXRl
LgorICAgICAgaWYgKHNvcnQpIHRoaXMuc29ydCh7c2lsZW50OiB0cnVlfSk7CisKKyAgICAgIC8v
IFVubGVzcyBzaWxlbmNlZCwgaXQncyB0aW1lIHRvIGZpcmUgYWxsIGFwcHJvcHJpYXRlIGFkZC9z
b3J0L3VwZGF0ZSBldmVudHMuCisgICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7CisgICAgICAg
IGZvciAoaSA9IDA7IGkgPCB0b0FkZC5sZW5ndGg7IGkrKykgeworICAgICAgICAgIGlmIChhdCAh
PSBudWxsKSBvcHRpb25zLmluZGV4ID0gYXQgKyBpOworICAgICAgICAgIG1vZGVsID0gdG9BZGRb
aV07CisgICAgICAgICAgbW9kZWwudHJpZ2dlcignYWRkJywgbW9kZWwsIHRoaXMsIG9wdGlvbnMp
OworICAgICAgICB9CisgICAgICAgIGlmIChzb3J0IHx8IG9yZGVyQ2hhbmdlZCkgdGhpcy50cmln
Z2VyKCdzb3J0JywgdGhpcywgb3B0aW9ucyk7CisgICAgICAgIGlmICh0b0FkZC5sZW5ndGggfHwg
dG9SZW1vdmUubGVuZ3RoIHx8IHRvTWVyZ2UubGVuZ3RoKSB7CisgICAgICAgICAgb3B0aW9ucy5j
aGFuZ2VzID0geworICAgICAgICAgICAgYWRkZWQ6IHRvQWRkLAorICAgICAgICAgICAgcmVtb3Zl
ZDogdG9SZW1vdmUsCisgICAgICAgICAgICBtZXJnZWQ6IHRvTWVyZ2UKKyAgICAgICAgICB9Owor
ICAgICAgICAgIHRoaXMudHJpZ2dlcigndXBkYXRlJywgdGhpcywgb3B0aW9ucyk7CisgICAgICAg
IH0KKyAgICAgIH0KKworICAgICAgLy8gUmV0dXJuIHRoZSBhZGRlZCAob3IgbWVyZ2VkKSBtb2Rl
bCAob3IgbW9kZWxzKS4KKyAgICAgIHJldHVybiBzaW5ndWxhciA/IG1vZGVsc1swXSA6IG1vZGVs
czsKKyAgICB9LAorCisgICAgLy8gV2hlbiB5b3UgaGF2ZSBtb3JlIGl0ZW1zIHRoYW4geW91IHdh
bnQgdG8gYWRkIG9yIHJlbW92ZSBpbmRpdmlkdWFsbHksCisgICAgLy8geW91IGNhbiByZXNldCB0
aGUgZW50aXJlIHNldCB3aXRoIGEgbmV3IGxpc3Qgb2YgbW9kZWxzLCB3aXRob3V0IGZpcmluZwor
ICAgIC8vIGFueSBncmFudWxhciBgYWRkYCBvciBgcmVtb3ZlYCBldmVudHMuIEZpcmVzIGByZXNl
dGAgd2hlbiBmaW5pc2hlZC4KKyAgICAvLyBVc2VmdWwgZm9yIGJ1bGsgb3BlcmF0aW9ucyBhbmQg
b3B0aW1pemF0aW9ucy4KKyAgICByZXNldDogZnVuY3Rpb24obW9kZWxzLCBvcHRpb25zKSB7Cisg
ICAgICBvcHRpb25zID0gb3B0aW9ucyA/IF8uY2xvbmUob3B0aW9ucykgOiB7fTsKKyAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tb2RlbHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdGhp
cy5fcmVtb3ZlUmVmZXJlbmNlKHRoaXMubW9kZWxzW2ldLCBvcHRpb25zKTsKKyAgICAgIH0KKyAg
ICAgIG9wdGlvbnMucHJldmlvdXNNb2RlbHMgPSB0aGlzLm1vZGVsczsKKyAgICAgIHRoaXMuX3Jl
c2V0KCk7CisgICAgICBtb2RlbHMgPSB0aGlzLmFkZChtb2RlbHMsIF8uZXh0ZW5kKHtzaWxlbnQ6
IHRydWV9LCBvcHRpb25zKSk7CisgICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB0aGlzLnRyaWdn
ZXIoJ3Jlc2V0JywgdGhpcywgb3B0aW9ucyk7CisgICAgICByZXR1cm4gbW9kZWxzOworICAgIH0s
CisKKyAgICAvLyBBZGQgYSBtb2RlbCB0byB0aGUgZW5kIG9mIHRoZSBjb2xsZWN0aW9uLgorICAg
IHB1c2g6IGZ1bmN0aW9uKG1vZGVsLCBvcHRpb25zKSB7CisgICAgICByZXR1cm4gdGhpcy5hZGQo
bW9kZWwsIF8uZXh0ZW5kKHthdDogdGhpcy5sZW5ndGh9LCBvcHRpb25zKSk7CisgICAgfSwKKwor
ICAgIC8vIFJlbW92ZSBhIG1vZGVsIGZyb20gdGhlIGVuZCBvZiB0aGUgY29sbGVjdGlvbi4KKyAg
ICBwb3A6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKKyAgICAgIHZhciBtb2RlbCA9IHRoaXMuYXQodGhp
cy5sZW5ndGggLSAxKTsKKyAgICAgIHJldHVybiB0aGlzLnJlbW92ZShtb2RlbCwgb3B0aW9ucyk7
CisgICAgfSwKKworICAgIC8vIEFkZCBhIG1vZGVsIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNv
bGxlY3Rpb24uCisgICAgdW5zaGlmdDogZnVuY3Rpb24obW9kZWwsIG9wdGlvbnMpIHsKKyAgICAg
IHJldHVybiB0aGlzLmFkZChtb2RlbCwgXy5leHRlbmQoe2F0OiAwfSwgb3B0aW9ucykpOworICAg
IH0sCisKKyAgICAvLyBSZW1vdmUgYSBtb2RlbCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNv
bGxlY3Rpb24uCisgICAgc2hpZnQ6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKKyAgICAgIHZhciBtb2Rl
bCA9IHRoaXMuYXQoMCk7CisgICAgICByZXR1cm4gdGhpcy5yZW1vdmUobW9kZWwsIG9wdGlvbnMp
OworICAgIH0sCisKKyAgICAvLyBTbGljZSBvdXQgYSBzdWItYXJyYXkgb2YgbW9kZWxzIGZyb20g
dGhlIGNvbGxlY3Rpb24uCisgICAgc2xpY2U6IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIHNs
aWNlLmFwcGx5KHRoaXMubW9kZWxzLCBhcmd1bWVudHMpOworICAgIH0sCisKKyAgICAvLyBHZXQg
YSBtb2RlbCBmcm9tIHRoZSBzZXQgYnkgaWQsIGNpZCwgbW9kZWwgb2JqZWN0IHdpdGggaWQgb3Ig
Y2lkCisgICAgLy8gcHJvcGVydGllcywgb3IgYW4gYXR0cmlidXRlcyBvYmplY3QgdGhhdCBpcyB0
cmFuc2Zvcm1lZCB0aHJvdWdoIG1vZGVsSWQuCisgICAgZ2V0OiBmdW5jdGlvbihvYmopIHsKKyAg
ICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDsKKyAgICAgIHJldHVybiB0aGlzLl9i
eUlkW29ial0gfHwKKyAgICAgICAgdGhpcy5fYnlJZFt0aGlzLm1vZGVsSWQob2JqLmF0dHJpYnV0
ZXMgfHwgb2JqKV0gfHwKKyAgICAgICAgb2JqLmNpZCAmJiB0aGlzLl9ieUlkW29iai5jaWRdOwor
ICAgIH0sCisKKyAgICAvLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgbW9kZWwgaXMgaW4gdGhlIGNv
bGxlY3Rpb24uCisgICAgaGFzOiBmdW5jdGlvbihvYmopIHsKKyAgICAgIHJldHVybiB0aGlzLmdl
dChvYmopICE9IG51bGw7CisgICAgfSwKKworICAgIC8vIEdldCB0aGUgbW9kZWwgYXQgdGhlIGdp
dmVuIGluZGV4LgorICAgIGF0OiBmdW5jdGlvbihpbmRleCkgeworICAgICAgaWYgKGluZGV4IDwg
MCkgaW5kZXggKz0gdGhpcy5sZW5ndGg7CisgICAgICByZXR1cm4gdGhpcy5tb2RlbHNbaW5kZXhd
OworICAgIH0sCisKKyAgICAvLyBSZXR1cm4gbW9kZWxzIHdpdGggbWF0Y2hpbmcgYXR0cmlidXRl
cy4gVXNlZnVsIGZvciBzaW1wbGUgY2FzZXMgb2YKKyAgICAvLyBgZmlsdGVyYC4KKyAgICB3aGVy
ZTogZnVuY3Rpb24oYXR0cnMsIGZpcnN0KSB7CisgICAgICByZXR1cm4gdGhpc1tmaXJzdCA/ICdm
aW5kJyA6ICdmaWx0ZXInXShhdHRycyk7CisgICAgfSwKKworICAgIC8vIFJldHVybiB0aGUgZmly
c3QgbW9kZWwgd2l0aCBtYXRjaGluZyBhdHRyaWJ1dGVzLiBVc2VmdWwgZm9yIHNpbXBsZSBjYXNl
cworICAgIC8vIG9mIGBmaW5kYC4KKyAgICBmaW5kV2hlcmU6IGZ1bmN0aW9uKGF0dHJzKSB7Cisg
ICAgICByZXR1cm4gdGhpcy53aGVyZShhdHRycywgdHJ1ZSk7CisgICAgfSwKKworICAgIC8vIEZv
cmNlIHRoZSBjb2xsZWN0aW9uIHRvIHJlLXNvcnQgaXRzZWxmLiBZb3UgZG9uJ3QgbmVlZCB0byBj
YWxsIHRoaXMgdW5kZXIKKyAgICAvLyBub3JtYWwgY2lyY3Vtc3RhbmNlcywgYXMgdGhlIHNldCB3
aWxsIG1haW50YWluIHNvcnQgb3JkZXIgYXMgZWFjaCBpdGVtCisgICAgLy8gaXMgYWRkZWQuCisg
ICAgc29ydDogZnVuY3Rpb24ob3B0aW9ucykgeworICAgICAgdmFyIGNvbXBhcmF0b3IgPSB0aGlz
LmNvbXBhcmF0b3I7CisgICAgICBpZiAoIWNvbXBhcmF0b3IpIHRocm93IG5ldyBFcnJvcignQ2Fu
bm90IHNvcnQgYSBzZXQgd2l0aG91dCBhIGNvbXBhcmF0b3InKTsKKyAgICAgIG9wdGlvbnMgfHwg
KG9wdGlvbnMgPSB7fSk7CisKKyAgICAgIHZhciBsZW5ndGggPSBjb21wYXJhdG9yLmxlbmd0aDsK
KyAgICAgIGlmIChfLmlzRnVuY3Rpb24oY29tcGFyYXRvcikpIGNvbXBhcmF0b3IgPSBfLmJpbmQo
Y29tcGFyYXRvciwgdGhpcyk7CisKKyAgICAgIC8vIFJ1biBzb3J0IGJhc2VkIG9uIHR5cGUgb2Yg
YGNvbXBhcmF0b3JgLgorICAgICAgaWYgKGxlbmd0aCA9PT0gMSB8fCBfLmlzU3RyaW5nKGNvbXBh
cmF0b3IpKSB7CisgICAgICAgIHRoaXMubW9kZWxzID0gdGhpcy5zb3J0QnkoY29tcGFyYXRvcik7
CisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLm1vZGVscy5zb3J0KGNvbXBhcmF0b3IpOwor
ICAgICAgfQorICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkgdGhpcy50cmlnZ2VyKCdzb3J0Jywg
dGhpcywgb3B0aW9ucyk7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgLy8gUGx1
Y2sgYW4gYXR0cmlidXRlIGZyb20gZWFjaCBtb2RlbCBpbiB0aGUgY29sbGVjdGlvbi4KKyAgICBw
bHVjazogZnVuY3Rpb24oYXR0cikgeworICAgICAgcmV0dXJuIHRoaXMubWFwKGF0dHIgKyAnJyk7
CisgICAgfSwKKworICAgIC8vIEZldGNoIHRoZSBkZWZhdWx0IHNldCBvZiBtb2RlbHMgZm9yIHRo
aXMgY29sbGVjdGlvbiwgcmVzZXR0aW5nIHRoZQorICAgIC8vIGNvbGxlY3Rpb24gd2hlbiB0aGV5
IGFycml2ZS4gSWYgYHJlc2V0OiB0cnVlYCBpcyBwYXNzZWQsIHRoZSByZXNwb25zZQorICAgIC8v
IGRhdGEgd2lsbCBiZSBwYXNzZWQgdGhyb3VnaCB0aGUgYHJlc2V0YCBtZXRob2QgaW5zdGVhZCBv
ZiBgc2V0YC4KKyAgICBmZXRjaDogZnVuY3Rpb24ob3B0aW9ucykgeworICAgICAgb3B0aW9ucyA9
IF8uZXh0ZW5kKHtwYXJzZTogdHJ1ZX0sIG9wdGlvbnMpOworICAgICAgdmFyIHN1Y2Nlc3MgPSBv
cHRpb25zLnN1Y2Nlc3M7CisgICAgICB2YXIgY29sbGVjdGlvbiA9IHRoaXM7CisgICAgICBvcHRp
b25zLnN1Y2Nlc3MgPSBmdW5jdGlvbihyZXNwKSB7CisgICAgICAgIHZhciBtZXRob2QgPSBvcHRp
b25zLnJlc2V0ID8gJ3Jlc2V0JyA6ICdzZXQnOworICAgICAgICBjb2xsZWN0aW9uW21ldGhvZF0o
cmVzcCwgb3B0aW9ucyk7CisgICAgICAgIGlmIChzdWNjZXNzKSBzdWNjZXNzLmNhbGwob3B0aW9u
cy5jb250ZXh0LCBjb2xsZWN0aW9uLCByZXNwLCBvcHRpb25zKTsKKyAgICAgICAgY29sbGVjdGlv
bi50cmlnZ2VyKCdzeW5jJywgY29sbGVjdGlvbiwgcmVzcCwgb3B0aW9ucyk7CisgICAgICB9Owor
ICAgICAgd3JhcEVycm9yKHRoaXMsIG9wdGlvbnMpOworICAgICAgcmV0dXJuIHRoaXMuc3luYygn
cmVhZCcsIHRoaXMsIG9wdGlvbnMpOworICAgIH0sCisKKyAgICAvLyBDcmVhdGUgYSBuZXcgaW5z
dGFuY2Ugb2YgYSBtb2RlbCBpbiB0aGlzIGNvbGxlY3Rpb24uIEFkZCB0aGUgbW9kZWwgdG8gdGhl
CisgICAgLy8gY29sbGVjdGlvbiBpbW1lZGlhdGVseSwgdW5sZXNzIGB3YWl0OiB0cnVlYCBpcyBw
YXNzZWQsIGluIHdoaWNoIGNhc2Ugd2UKKyAgICAvLyB3YWl0IGZvciB0aGUgc2VydmVyIHRvIGFn
cmVlLgorICAgIGNyZWF0ZTogZnVuY3Rpb24obW9kZWwsIG9wdGlvbnMpIHsKKyAgICAgIG9wdGlv
bnMgPSBvcHRpb25zID8gXy5jbG9uZShvcHRpb25zKSA6IHt9OworICAgICAgdmFyIHdhaXQgPSBv
cHRpb25zLndhaXQ7CisgICAgICBtb2RlbCA9IHRoaXMuX3ByZXBhcmVNb2RlbChtb2RlbCwgb3B0
aW9ucyk7CisgICAgICBpZiAoIW1vZGVsKSByZXR1cm4gZmFsc2U7CisgICAgICBpZiAoIXdhaXQp
IHRoaXMuYWRkKG1vZGVsLCBvcHRpb25zKTsKKyAgICAgIHZhciBjb2xsZWN0aW9uID0gdGhpczsK
KyAgICAgIHZhciBzdWNjZXNzID0gb3B0aW9ucy5zdWNjZXNzOworICAgICAgb3B0aW9ucy5zdWNj
ZXNzID0gZnVuY3Rpb24obSwgcmVzcCwgY2FsbGJhY2tPcHRzKSB7CisgICAgICAgIGlmICh3YWl0
KSBjb2xsZWN0aW9uLmFkZChtLCBjYWxsYmFja09wdHMpOworICAgICAgICBpZiAoc3VjY2Vzcykg
c3VjY2Vzcy5jYWxsKGNhbGxiYWNrT3B0cy5jb250ZXh0LCBtLCByZXNwLCBjYWxsYmFja09wdHMp
OworICAgICAgfTsKKyAgICAgIG1vZGVsLnNhdmUobnVsbCwgb3B0aW9ucyk7CisgICAgICByZXR1
cm4gbW9kZWw7CisgICAgfSwKKworICAgIC8vICoqcGFyc2UqKiBjb252ZXJ0cyBhIHJlc3BvbnNl
IGludG8gYSBsaXN0IG9mIG1vZGVscyB0byBiZSBhZGRlZCB0byB0aGUKKyAgICAvLyBjb2xsZWN0
aW9uLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBqdXN0IHRvIHBhc3MgaXQgdGhyb3Vn
aC4KKyAgICBwYXJzZTogZnVuY3Rpb24ocmVzcCwgb3B0aW9ucykgeworICAgICAgcmV0dXJuIHJl
c3A7CisgICAgfSwKKworICAgIC8vIENyZWF0ZSBhIG5ldyBjb2xsZWN0aW9uIHdpdGggYW4gaWRl
bnRpY2FsIGxpc3Qgb2YgbW9kZWxzIGFzIHRoaXMgb25lLgorICAgIGNsb25lOiBmdW5jdGlvbigp
IHsKKyAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLm1vZGVscywgeworICAg
ICAgICBtb2RlbDogdGhpcy5tb2RlbCwKKyAgICAgICAgY29tcGFyYXRvcjogdGhpcy5jb21wYXJh
dG9yCisgICAgICB9KTsKKyAgICB9LAorCisgICAgLy8gRGVmaW5lIGhvdyB0byB1bmlxdWVseSBp
ZGVudGlmeSBtb2RlbHMgaW4gdGhlIGNvbGxlY3Rpb24uCisgICAgbW9kZWxJZDogZnVuY3Rpb24o
YXR0cnMpIHsKKyAgICAgIHJldHVybiBhdHRyc1t0aGlzLm1vZGVsLnByb3RvdHlwZS5pZEF0dHJp
YnV0ZSB8fCAnaWQnXTsKKyAgICB9LAorCisgICAgLy8gUHJpdmF0ZSBtZXRob2QgdG8gcmVzZXQg
YWxsIGludGVybmFsIHN0YXRlLiBDYWxsZWQgd2hlbiB0aGUgY29sbGVjdGlvbgorICAgIC8vIGlz
IGZpcnN0IGluaXRpYWxpemVkIG9yIHJlc2V0LgorICAgIF9yZXNldDogZnVuY3Rpb24oKSB7Cisg
ICAgICB0aGlzLmxlbmd0aCA9IDA7CisgICAgICB0aGlzLm1vZGVscyA9IFtdOworICAgICAgdGhp
cy5fYnlJZCAgPSB7fTsKKyAgICB9LAorCisgICAgLy8gUHJlcGFyZSBhIGhhc2ggb2YgYXR0cmli
dXRlcyAob3Igb3RoZXIgbW9kZWwpIHRvIGJlIGFkZGVkIHRvIHRoaXMKKyAgICAvLyBjb2xsZWN0
aW9uLgorICAgIF9wcmVwYXJlTW9kZWw6IGZ1bmN0aW9uKGF0dHJzLCBvcHRpb25zKSB7CisgICAg
ICBpZiAodGhpcy5faXNNb2RlbChhdHRycykpIHsKKyAgICAgICAgaWYgKCFhdHRycy5jb2xsZWN0
aW9uKSBhdHRycy5jb2xsZWN0aW9uID0gdGhpczsKKyAgICAgICAgcmV0dXJuIGF0dHJzOworICAg
ICAgfQorICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgPyBfLmNsb25lKG9wdGlvbnMpIDoge307Cisg
ICAgICBvcHRpb25zLmNvbGxlY3Rpb24gPSB0aGlzOworICAgICAgdmFyIG1vZGVsID0gbmV3IHRo
aXMubW9kZWwoYXR0cnMsIG9wdGlvbnMpOworICAgICAgaWYgKCFtb2RlbC52YWxpZGF0aW9uRXJy
b3IpIHJldHVybiBtb2RlbDsKKyAgICAgIHRoaXMudHJpZ2dlcignaW52YWxpZCcsIHRoaXMsIG1v
ZGVsLnZhbGlkYXRpb25FcnJvciwgb3B0aW9ucyk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fSwKKworICAgIC8vIEludGVybmFsIG1ldGhvZCBjYWxsZWQgYnkgYm90aCByZW1vdmUgYW5kIHNl
dC4KKyAgICBfcmVtb3ZlTW9kZWxzOiBmdW5jdGlvbihtb2RlbHMsIG9wdGlvbnMpIHsKKyAgICAg
IHZhciByZW1vdmVkID0gW107CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1vZGVscy5sZW5n
dGg7IGkrKykgeworICAgICAgICB2YXIgbW9kZWwgPSB0aGlzLmdldChtb2RlbHNbaV0pOworICAg
ICAgICBpZiAoIW1vZGVsKSBjb250aW51ZTsKKworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmlu
ZGV4T2YobW9kZWwpOworICAgICAgICB0aGlzLm1vZGVscy5zcGxpY2UoaW5kZXgsIDEpOworICAg
ICAgICB0aGlzLmxlbmd0aC0tOworCisgICAgICAgIC8vIFJlbW92ZSByZWZlcmVuY2VzIGJlZm9y
ZSB0cmlnZ2VyaW5nICdyZW1vdmUnIGV2ZW50IHRvIHByZXZlbnQgYW4KKyAgICAgICAgLy8gaW5m
aW5pdGUgbG9vcC4gIzM2OTMKKyAgICAgICAgZGVsZXRlIHRoaXMuX2J5SWRbbW9kZWwuY2lkXTsK
KyAgICAgICAgdmFyIGlkID0gdGhpcy5tb2RlbElkKG1vZGVsLmF0dHJpYnV0ZXMpOworICAgICAg
ICBpZiAoaWQgIT0gbnVsbCkgZGVsZXRlIHRoaXMuX2J5SWRbaWRdOworCisgICAgICAgIGlmICgh
b3B0aW9ucy5zaWxlbnQpIHsKKyAgICAgICAgICBvcHRpb25zLmluZGV4ID0gaW5kZXg7CisgICAg
ICAgICAgbW9kZWwudHJpZ2dlcigncmVtb3ZlJywgbW9kZWwsIHRoaXMsIG9wdGlvbnMpOworICAg
ICAgICB9CisKKyAgICAgICAgcmVtb3ZlZC5wdXNoKG1vZGVsKTsKKyAgICAgICAgdGhpcy5fcmVt
b3ZlUmVmZXJlbmNlKG1vZGVsLCBvcHRpb25zKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiByZW1v
dmVkOworICAgIH0sCisKKyAgICAvLyBNZXRob2QgZm9yIGNoZWNraW5nIHdoZXRoZXIgYW4gb2Jq
ZWN0IHNob3VsZCBiZSBjb25zaWRlcmVkIGEgbW9kZWwgZm9yCisgICAgLy8gdGhlIHB1cnBvc2Vz
IG9mIGFkZGluZyB0byB0aGUgY29sbGVjdGlvbi4KKyAgICBfaXNNb2RlbDogZnVuY3Rpb24obW9k
ZWwpIHsKKyAgICAgIHJldHVybiBtb2RlbCBpbnN0YW5jZW9mIE1vZGVsOworICAgIH0sCisKKyAg
ICAvLyBJbnRlcm5hbCBtZXRob2QgdG8gY3JlYXRlIGEgbW9kZWwncyB0aWVzIHRvIGEgY29sbGVj
dGlvbi4KKyAgICBfYWRkUmVmZXJlbmNlOiBmdW5jdGlvbihtb2RlbCwgb3B0aW9ucykgeworICAg
ICAgdGhpcy5fYnlJZFttb2RlbC5jaWRdID0gbW9kZWw7CisgICAgICB2YXIgaWQgPSB0aGlzLm1v
ZGVsSWQobW9kZWwuYXR0cmlidXRlcyk7CisgICAgICBpZiAoaWQgIT0gbnVsbCkgdGhpcy5fYnlJ
ZFtpZF0gPSBtb2RlbDsKKyAgICAgIG1vZGVsLm9uKCdhbGwnLCB0aGlzLl9vbk1vZGVsRXZlbnQs
IHRoaXMpOworICAgIH0sCisKKyAgICAvLyBJbnRlcm5hbCBtZXRob2QgdG8gc2V2ZXIgYSBtb2Rl
bCdzIHRpZXMgdG8gYSBjb2xsZWN0aW9uLgorICAgIF9yZW1vdmVSZWZlcmVuY2U6IGZ1bmN0aW9u
KG1vZGVsLCBvcHRpb25zKSB7CisgICAgICBkZWxldGUgdGhpcy5fYnlJZFttb2RlbC5jaWRdOwor
ICAgICAgdmFyIGlkID0gdGhpcy5tb2RlbElkKG1vZGVsLmF0dHJpYnV0ZXMpOworICAgICAgaWYg
KGlkICE9IG51bGwpIGRlbGV0ZSB0aGlzLl9ieUlkW2lkXTsKKyAgICAgIGlmICh0aGlzID09PSBt
b2RlbC5jb2xsZWN0aW9uKSBkZWxldGUgbW9kZWwuY29sbGVjdGlvbjsKKyAgICAgIG1vZGVsLm9m
ZignYWxsJywgdGhpcy5fb25Nb2RlbEV2ZW50LCB0aGlzKTsKKyAgICB9LAorCisgICAgLy8gSW50
ZXJuYWwgbWV0aG9kIGNhbGxlZCBldmVyeSB0aW1lIGEgbW9kZWwgaW4gdGhlIHNldCBmaXJlcyBh
biBldmVudC4KKyAgICAvLyBTZXRzIG5lZWQgdG8gdXBkYXRlIHRoZWlyIGluZGV4ZXMgd2hlbiBt
b2RlbHMgY2hhbmdlIGlkcy4gQWxsIG90aGVyCisgICAgLy8gZXZlbnRzIHNpbXBseSBwcm94eSB0
aHJvdWdoLiAiYWRkIiBhbmQgInJlbW92ZSIgZXZlbnRzIHRoYXQgb3JpZ2luYXRlCisgICAgLy8g
aW4gb3RoZXIgY29sbGVjdGlvbnMgYXJlIGlnbm9yZWQuCisgICAgX29uTW9kZWxFdmVudDogZnVu
Y3Rpb24oZXZlbnQsIG1vZGVsLCBjb2xsZWN0aW9uLCBvcHRpb25zKSB7CisgICAgICBpZiAobW9k
ZWwpIHsKKyAgICAgICAgaWYgKChldmVudCA9PT0gJ2FkZCcgfHwgZXZlbnQgPT09ICdyZW1vdmUn
KSAmJiBjb2xsZWN0aW9uICE9PSB0aGlzKSByZXR1cm47CisgICAgICAgIGlmIChldmVudCA9PT0g
J2Rlc3Ryb3knKSB0aGlzLnJlbW92ZShtb2RlbCwgb3B0aW9ucyk7CisgICAgICAgIGlmIChldmVu
dCA9PT0gJ2NoYW5nZScpIHsKKyAgICAgICAgICB2YXIgcHJldklkID0gdGhpcy5tb2RlbElkKG1v
ZGVsLnByZXZpb3VzQXR0cmlidXRlcygpKTsKKyAgICAgICAgICB2YXIgaWQgPSB0aGlzLm1vZGVs
SWQobW9kZWwuYXR0cmlidXRlcyk7CisgICAgICAgICAgaWYgKHByZXZJZCAhPT0gaWQpIHsKKyAg
ICAgICAgICAgIGlmIChwcmV2SWQgIT0gbnVsbCkgZGVsZXRlIHRoaXMuX2J5SWRbcHJldklkXTsK
KyAgICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB0aGlzLl9ieUlkW2lkXSA9IG1vZGVsOworICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgdGhpcy50cmlnZ2VyLmFwcGx5KHRo
aXMsIGFyZ3VtZW50cyk7CisgICAgfQorCisgIH0pOworCisgIC8vIFVuZGVyc2NvcmUgbWV0aG9k
cyB0aGF0IHdlIHdhbnQgdG8gaW1wbGVtZW50IG9uIHRoZSBDb2xsZWN0aW9uLgorICAvLyA5MCUg
b2YgdGhlIGNvcmUgdXNlZnVsbmVzcyBvZiBCYWNrYm9uZSBDb2xsZWN0aW9ucyBpcyBhY3R1YWxs
eSBpbXBsZW1lbnRlZAorICAvLyByaWdodCBoZXJlOgorICB2YXIgY29sbGVjdGlvbk1ldGhvZHMg
PSB7Zm9yRWFjaDogMywgZWFjaDogMywgbWFwOiAzLCBjb2xsZWN0OiAzLCByZWR1Y2U6IDAsCisg
ICAgICBmb2xkbDogMCwgaW5qZWN0OiAwLCByZWR1Y2VSaWdodDogMCwgZm9sZHI6IDAsIGZpbmQ6
IDMsIGRldGVjdDogMywgZmlsdGVyOiAzLAorICAgICAgc2VsZWN0OiAzLCByZWplY3Q6IDMsIGV2
ZXJ5OiAzLCBhbGw6IDMsIHNvbWU6IDMsIGFueTogMywgaW5jbHVkZTogMywgaW5jbHVkZXM6IDMs
CisgICAgICBjb250YWluczogMywgaW52b2tlOiAwLCBtYXg6IDMsIG1pbjogMywgdG9BcnJheTog
MSwgc2l6ZTogMSwgZmlyc3Q6IDMsCisgICAgICBoZWFkOiAzLCB0YWtlOiAzLCBpbml0aWFsOiAz
LCByZXN0OiAzLCB0YWlsOiAzLCBkcm9wOiAzLCBsYXN0OiAzLAorICAgICAgd2l0aG91dDogMCwg
ZGlmZmVyZW5jZTogMCwgaW5kZXhPZjogMywgc2h1ZmZsZTogMSwgbGFzdEluZGV4T2Y6IDMsCisg
ICAgICBpc0VtcHR5OiAxLCBjaGFpbjogMSwgc2FtcGxlOiAzLCBwYXJ0aXRpb246IDMsIGdyb3Vw
Qnk6IDMsIGNvdW50Qnk6IDMsCisgICAgICBzb3J0Qnk6IDMsIGluZGV4Qnk6IDMsIGZpbmRJbmRl
eDogMywgZmluZExhc3RJbmRleDogM307CisKKyAgLy8gTWl4IGluIGVhY2ggVW5kZXJzY29yZSBt
ZXRob2QgYXMgYSBwcm94eSB0byBgQ29sbGVjdGlvbiNtb2RlbHNgLgorICBhZGRVbmRlcnNjb3Jl
TWV0aG9kcyhDb2xsZWN0aW9uLCBjb2xsZWN0aW9uTWV0aG9kcywgJ21vZGVscycpOworCisgIC8v
IEJhY2tib25lLlZpZXcKKyAgLy8gLS0tLS0tLS0tLS0tLQorCisgIC8vIEJhY2tib25lIFZpZXdz
IGFyZSBhbG1vc3QgbW9yZSBjb252ZW50aW9uIHRoYW4gdGhleSBhcmUgYWN0dWFsIGNvZGUuIEEg
VmlldworICAvLyBpcyBzaW1wbHkgYSBKYXZhU2NyaXB0IG9iamVjdCB0aGF0IHJlcHJlc2VudHMg
YSBsb2dpY2FsIGNodW5rIG9mIFVJIGluIHRoZQorICAvLyBET00uIFRoaXMgbWlnaHQgYmUgYSBz
aW5nbGUgaXRlbSwgYW4gZW50aXJlIGxpc3QsIGEgc2lkZWJhciBvciBwYW5lbCwgb3IKKyAgLy8g
ZXZlbiB0aGUgc3Vycm91bmRpbmcgZnJhbWUgd2hpY2ggd3JhcHMgeW91ciB3aG9sZSBhcHAuIERl
ZmluaW5nIGEgY2h1bmsgb2YKKyAgLy8gVUkgYXMgYSAqKlZpZXcqKiBhbGxvd3MgeW91IHRvIGRl
ZmluZSB5b3VyIERPTSBldmVudHMgZGVjbGFyYXRpdmVseSwgd2l0aG91dAorICAvLyBoYXZpbmcg
dG8gd29ycnkgYWJvdXQgcmVuZGVyIG9yZGVyIC4uLiBhbmQgbWFrZXMgaXQgZWFzeSBmb3IgdGhl
IHZpZXcgdG8KKyAgLy8gcmVhY3QgdG8gc3BlY2lmaWMgY2hhbmdlcyBpbiB0aGUgc3RhdGUgb2Yg
eW91ciBtb2RlbHMuCisKKyAgLy8gQ3JlYXRpbmcgYSBCYWNrYm9uZS5WaWV3IGNyZWF0ZXMgaXRz
IGluaXRpYWwgZWxlbWVudCBvdXRzaWRlIG9mIHRoZSBET00sCisgIC8vIGlmIGFuIGV4aXN0aW5n
IGVsZW1lbnQgaXMgbm90IHByb3ZpZGVkLi4uCisgIHZhciBWaWV3ID0gQmFja2JvbmUuVmlldyA9
IGZ1bmN0aW9uKG9wdGlvbnMpIHsKKyAgICB0aGlzLmNpZCA9IF8udW5pcXVlSWQoJ3ZpZXcnKTsK
KyAgICBfLmV4dGVuZCh0aGlzLCBfLnBpY2sob3B0aW9ucywgdmlld09wdGlvbnMpKTsKKyAgICB0
aGlzLl9lbnN1cmVFbGVtZW50KCk7CisgICAgdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFy
Z3VtZW50cyk7CisgIH07CisKKyAgLy8gQ2FjaGVkIHJlZ2V4IHRvIHNwbGl0IGtleXMgZm9yIGBk
ZWxlZ2F0ZWAuCisgIHZhciBkZWxlZ2F0ZUV2ZW50U3BsaXR0ZXIgPSAvXihcUyspXHMqKC4qKSQv
OworCisgIC8vIExpc3Qgb2YgdmlldyBvcHRpb25zIHRvIGJlIHNldCBhcyBwcm9wZXJ0aWVzLgor
ICB2YXIgdmlld09wdGlvbnMgPSBbJ21vZGVsJywgJ2NvbGxlY3Rpb24nLCAnZWwnLCAnaWQnLCAn
YXR0cmlidXRlcycsICdjbGFzc05hbWUnLCAndGFnTmFtZScsICdldmVudHMnXTsKKworICAvLyBT
ZXQgdXAgYWxsIGluaGVyaXRhYmxlICoqQmFja2JvbmUuVmlldyoqIHByb3BlcnRpZXMgYW5kIG1l
dGhvZHMuCisgIF8uZXh0ZW5kKFZpZXcucHJvdG90eXBlLCBFdmVudHMsIHsKKworICAgIC8vIFRo
ZSBkZWZhdWx0IGB0YWdOYW1lYCBvZiBhIFZpZXcncyBlbGVtZW50IGlzIGAiZGl2ImAuCisgICAg
dGFnTmFtZTogJ2RpdicsCisKKyAgICAvLyBqUXVlcnkgZGVsZWdhdGUgZm9yIGVsZW1lbnQgbG9v
a3VwLCBzY29wZWQgdG8gRE9NIGVsZW1lbnRzIHdpdGhpbiB0aGUKKyAgICAvLyBjdXJyZW50IHZp
ZXcuIFRoaXMgc2hvdWxkIGJlIHByZWZlcnJlZCB0byBnbG9iYWwgbG9va3VwcyB3aGVyZSBwb3Nz
aWJsZS4KKyAgICAkOiBmdW5jdGlvbihzZWxlY3RvcikgeworICAgICAgcmV0dXJuIHRoaXMuJGVs
LmZpbmQoc2VsZWN0b3IpOworICAgIH0sCisKKyAgICAvLyBJbml0aWFsaXplIGlzIGFuIGVtcHR5
IGZ1bmN0aW9uIGJ5IGRlZmF1bHQuIE92ZXJyaWRlIGl0IHdpdGggeW91ciBvd24KKyAgICAvLyBp
bml0aWFsaXphdGlvbiBsb2dpYy4KKyAgICBpbml0aWFsaXplOiBmdW5jdGlvbigpe30sCisKKyAg
ICAvLyAqKnJlbmRlcioqIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIHRoYXQgeW91ciB2aWV3IHNob3Vs
ZCBvdmVycmlkZSwgaW4gb3JkZXIKKyAgICAvLyB0byBwb3B1bGF0ZSBpdHMgZWxlbWVudCAoYHRo
aXMuZWxgKSwgd2l0aCB0aGUgYXBwcm9wcmlhdGUgSFRNTC4gVGhlCisgICAgLy8gY29udmVudGlv
biBpcyBmb3IgKipyZW5kZXIqKiB0byBhbHdheXMgcmV0dXJuIGB0aGlzYC4KKyAgICByZW5kZXI6
IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIC8vIFJlbW92
ZSB0aGlzIHZpZXcgYnkgdGFraW5nIHRoZSBlbGVtZW50IG91dCBvZiB0aGUgRE9NLCBhbmQgcmVt
b3ZpbmcgYW55CisgICAgLy8gYXBwbGljYWJsZSBCYWNrYm9uZS5FdmVudHMgbGlzdGVuZXJzLgor
ICAgIHJlbW92ZTogZnVuY3Rpb24oKSB7CisgICAgICB0aGlzLl9yZW1vdmVFbGVtZW50KCk7Cisg
ICAgICB0aGlzLnN0b3BMaXN0ZW5pbmcoKTsKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisK
KyAgICAvLyBSZW1vdmUgdGhpcyB2aWV3J3MgZWxlbWVudCBmcm9tIHRoZSBkb2N1bWVudCBhbmQg
YWxsIGV2ZW50IGxpc3RlbmVycworICAgIC8vIGF0dGFjaGVkIHRvIGl0LiBFeHBvc2VkIGZvciBz
dWJjbGFzc2VzIHVzaW5nIGFuIGFsdGVybmF0aXZlIERPTQorICAgIC8vIG1hbmlwdWxhdGlvbiBB
UEkuCisgICAgX3JlbW92ZUVsZW1lbnQ6IGZ1bmN0aW9uKCkgeworICAgICAgdGhpcy4kZWwucmVt
b3ZlKCk7CisgICAgfSwKKworICAgIC8vIENoYW5nZSB0aGUgdmlldydzIGVsZW1lbnQgKGB0aGlz
LmVsYCBwcm9wZXJ0eSkgYW5kIHJlLWRlbGVnYXRlIHRoZQorICAgIC8vIHZpZXcncyBldmVudHMg
b24gdGhlIG5ldyBlbGVtZW50LgorICAgIHNldEVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsK
KyAgICAgIHRoaXMudW5kZWxlZ2F0ZUV2ZW50cygpOworICAgICAgdGhpcy5fc2V0RWxlbWVudChl
bGVtZW50KTsKKyAgICAgIHRoaXMuZGVsZWdhdGVFdmVudHMoKTsKKyAgICAgIHJldHVybiB0aGlz
OworICAgIH0sCisKKyAgICAvLyBDcmVhdGVzIHRoZSBgdGhpcy5lbGAgYW5kIGB0aGlzLiRlbGAg
cmVmZXJlbmNlcyBmb3IgdGhpcyB2aWV3IHVzaW5nIHRoZQorICAgIC8vIGdpdmVuIGBlbGAuIGBl
bGAgY2FuIGJlIGEgQ1NTIHNlbGVjdG9yIG9yIGFuIEhUTUwgc3RyaW5nLCBhIGpRdWVyeQorICAg
IC8vIGNvbnRleHQgb3IgYW4gZWxlbWVudC4gU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdGhpcyB0
byB1dGlsaXplIGFuCisgICAgLy8gYWx0ZXJuYXRpdmUgRE9NIG1hbmlwdWxhdGlvbiBBUEkgYW5k
IGFyZSBvbmx5IHJlcXVpcmVkIHRvIHNldCB0aGUKKyAgICAvLyBgdGhpcy5lbGAgcHJvcGVydHku
CisgICAgX3NldEVsZW1lbnQ6IGZ1bmN0aW9uKGVsKSB7CisgICAgICB0aGlzLiRlbCA9IGVsIGlu
c3RhbmNlb2YgQmFja2JvbmUuJCA/IGVsIDogQmFja2JvbmUuJChlbCk7CisgICAgICB0aGlzLmVs
ID0gdGhpcy4kZWxbMF07CisgICAgfSwKKworICAgIC8vIFNldCBjYWxsYmFja3MsIHdoZXJlIGB0
aGlzLmV2ZW50c2AgaXMgYSBoYXNoIG9mCisgICAgLy8KKyAgICAvLyAqeyJldmVudCBzZWxlY3Rv
ciI6ICJjYWxsYmFjayJ9KgorICAgIC8vCisgICAgLy8gICAgIHsKKyAgICAvLyAgICAgICAnbW91
c2Vkb3duIC50aXRsZSc6ICAnZWRpdCcsCisgICAgLy8gICAgICAgJ2NsaWNrIC5idXR0b24nOiAg
ICAgJ3NhdmUnLAorICAgIC8vICAgICAgICdjbGljayAub3Blbic6ICAgICAgIGZ1bmN0aW9uKGUp
IHsgLi4uIH0KKyAgICAvLyAgICAgfQorICAgIC8vCisgICAgLy8gcGFpcnMuIENhbGxiYWNrcyB3
aWxsIGJlIGJvdW5kIHRvIHRoZSB2aWV3LCB3aXRoIGB0aGlzYCBzZXQgcHJvcGVybHkuCisgICAg
Ly8gVXNlcyBldmVudCBkZWxlZ2F0aW9uIGZvciBlZmZpY2llbmN5LgorICAgIC8vIE9taXR0aW5n
IHRoZSBzZWxlY3RvciBiaW5kcyB0aGUgZXZlbnQgdG8gYHRoaXMuZWxgLgorICAgIGRlbGVnYXRl
RXZlbnRzOiBmdW5jdGlvbihldmVudHMpIHsKKyAgICAgIGV2ZW50cyB8fCAoZXZlbnRzID0gXy5y
ZXN1bHQodGhpcywgJ2V2ZW50cycpKTsKKyAgICAgIGlmICghZXZlbnRzKSByZXR1cm4gdGhpczsK
KyAgICAgIHRoaXMudW5kZWxlZ2F0ZUV2ZW50cygpOworICAgICAgZm9yICh2YXIga2V5IGluIGV2
ZW50cykgeworICAgICAgICB2YXIgbWV0aG9kID0gZXZlbnRzW2tleV07CisgICAgICAgIGlmICgh
Xy5pc0Z1bmN0aW9uKG1ldGhvZCkpIG1ldGhvZCA9IHRoaXNbbWV0aG9kXTsKKyAgICAgICAgaWYg
KCFtZXRob2QpIGNvbnRpbnVlOworICAgICAgICB2YXIgbWF0Y2ggPSBrZXkubWF0Y2goZGVsZWdh
dGVFdmVudFNwbGl0dGVyKTsKKyAgICAgICAgdGhpcy5kZWxlZ2F0ZShtYXRjaFsxXSwgbWF0Y2hb
Ml0sIF8uYmluZChtZXRob2QsIHRoaXMpKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0aGlzOwor
ICAgIH0sCisKKyAgICAvLyBBZGQgYSBzaW5nbGUgZXZlbnQgbGlzdGVuZXIgdG8gdGhlIHZpZXcn
cyBlbGVtZW50IChvciBhIGNoaWxkIGVsZW1lbnQKKyAgICAvLyB1c2luZyBgc2VsZWN0b3JgKS4g
VGhpcyBvbmx5IHdvcmtzIGZvciBkZWxlZ2F0ZS1hYmxlIGV2ZW50czogbm90IGBmb2N1c2AsCisg
ICAgLy8gYGJsdXJgLCBhbmQgbm90IGBjaGFuZ2VgLCBgc3VibWl0YCwgYW5kIGByZXNldGAgaW4g
SW50ZXJuZXQgRXhwbG9yZXIuCisgICAgZGVsZWdhdGU6IGZ1bmN0aW9uKGV2ZW50TmFtZSwgc2Vs
ZWN0b3IsIGxpc3RlbmVyKSB7CisgICAgICB0aGlzLiRlbC5vbihldmVudE5hbWUgKyAnLmRlbGVn
YXRlRXZlbnRzJyArIHRoaXMuY2lkLCBzZWxlY3RvciwgbGlzdGVuZXIpOworICAgICAgcmV0dXJu
IHRoaXM7CisgICAgfSwKKworICAgIC8vIENsZWFycyBhbGwgY2FsbGJhY2tzIHByZXZpb3VzbHkg
Ym91bmQgdG8gdGhlIHZpZXcgYnkgYGRlbGVnYXRlRXZlbnRzYC4KKyAgICAvLyBZb3UgdXN1YWxs
eSBkb24ndCBuZWVkIHRvIHVzZSB0aGlzLCBidXQgbWF5IHdpc2ggdG8gaWYgeW91IGhhdmUgbXVs
dGlwbGUKKyAgICAvLyBCYWNrYm9uZSB2aWV3cyBhdHRhY2hlZCB0byB0aGUgc2FtZSBET00gZWxl
bWVudC4KKyAgICB1bmRlbGVnYXRlRXZlbnRzOiBmdW5jdGlvbigpIHsKKyAgICAgIGlmICh0aGlz
LiRlbCkgdGhpcy4kZWwub2ZmKCcuZGVsZWdhdGVFdmVudHMnICsgdGhpcy5jaWQpOworICAgICAg
cmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIC8vIEEgZmluZXItZ3JhaW5lZCBgdW5kZWxlZ2F0
ZUV2ZW50c2AgZm9yIHJlbW92aW5nIGEgc2luZ2xlIGRlbGVnYXRlZCBldmVudC4KKyAgICAvLyBg
c2VsZWN0b3JgIGFuZCBgbGlzdGVuZXJgIGFyZSBib3RoIG9wdGlvbmFsLgorICAgIHVuZGVsZWdh
dGU6IGZ1bmN0aW9uKGV2ZW50TmFtZSwgc2VsZWN0b3IsIGxpc3RlbmVyKSB7CisgICAgICB0aGlz
LiRlbC5vZmYoZXZlbnROYW1lICsgJy5kZWxlZ2F0ZUV2ZW50cycgKyB0aGlzLmNpZCwgc2VsZWN0
b3IsIGxpc3RlbmVyKTsKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICAvLyBQcm9k
dWNlcyBhIERPTSBlbGVtZW50IHRvIGJlIGFzc2lnbmVkIHRvIHlvdXIgdmlldy4gRXhwb3NlZCBm
b3IKKyAgICAvLyBzdWJjbGFzc2VzIHVzaW5nIGFuIGFsdGVybmF0aXZlIERPTSBtYW5pcHVsYXRp
b24gQVBJLgorICAgIF9jcmVhdGVFbGVtZW50OiBmdW5jdGlvbih0YWdOYW1lKSB7CisgICAgICBy
ZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsKKyAgICB9LAorCisgICAgLy8g
RW5zdXJlIHRoYXQgdGhlIFZpZXcgaGFzIGEgRE9NIGVsZW1lbnQgdG8gcmVuZGVyIGludG8uCisg
ICAgLy8gSWYgYHRoaXMuZWxgIGlzIGEgc3RyaW5nLCBwYXNzIGl0IHRocm91Z2ggYCQoKWAsIHRh
a2UgdGhlIGZpcnN0CisgICAgLy8gbWF0Y2hpbmcgZWxlbWVudCwgYW5kIHJlLWFzc2lnbiBpdCB0
byBgZWxgLiBPdGhlcndpc2UsIGNyZWF0ZQorICAgIC8vIGFuIGVsZW1lbnQgZnJvbSB0aGUgYGlk
YCwgYGNsYXNzTmFtZWAgYW5kIGB0YWdOYW1lYCBwcm9wZXJ0aWVzLgorICAgIF9lbnN1cmVFbGVt
ZW50OiBmdW5jdGlvbigpIHsKKyAgICAgIGlmICghdGhpcy5lbCkgeworICAgICAgICB2YXIgYXR0
cnMgPSBfLmV4dGVuZCh7fSwgXy5yZXN1bHQodGhpcywgJ2F0dHJpYnV0ZXMnKSk7CisgICAgICAg
IGlmICh0aGlzLmlkKSBhdHRycy5pZCA9IF8ucmVzdWx0KHRoaXMsICdpZCcpOworICAgICAgICBp
ZiAodGhpcy5jbGFzc05hbWUpIGF0dHJzWydjbGFzcyddID0gXy5yZXN1bHQodGhpcywgJ2NsYXNz
TmFtZScpOworICAgICAgICB0aGlzLnNldEVsZW1lbnQodGhpcy5fY3JlYXRlRWxlbWVudChfLnJl
c3VsdCh0aGlzLCAndGFnTmFtZScpKSk7CisgICAgICAgIHRoaXMuX3NldEF0dHJpYnV0ZXMoYXR0
cnMpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy5zZXRFbGVtZW50KF8ucmVzdWx0KHRo
aXMsICdlbCcpKTsKKyAgICAgIH0KKyAgICB9LAorCisgICAgLy8gU2V0IGF0dHJpYnV0ZXMgZnJv
bSBhIGhhc2ggb24gdGhpcyB2aWV3J3MgZWxlbWVudC4gIEV4cG9zZWQgZm9yCisgICAgLy8gc3Vi
Y2xhc3NlcyB1c2luZyBhbiBhbHRlcm5hdGl2ZSBET00gbWFuaXB1bGF0aW9uIEFQSS4KKyAgICBf
c2V0QXR0cmlidXRlczogZnVuY3Rpb24oYXR0cmlidXRlcykgeworICAgICAgdGhpcy4kZWwuYXR0
cihhdHRyaWJ1dGVzKTsKKyAgICB9CisKKyAgfSk7CisKKyAgLy8gQmFja2JvbmUuc3luYworICAv
LyAtLS0tLS0tLS0tLS0tCisKKyAgLy8gT3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiB0byBjaGFuZ2Ug
dGhlIG1hbm5lciBpbiB3aGljaCBCYWNrYm9uZSBwZXJzaXN0cworICAvLyBtb2RlbHMgdG8gdGhl
IHNlcnZlci4gWW91IHdpbGwgYmUgcGFzc2VkIHRoZSB0eXBlIG9mIHJlcXVlc3QsIGFuZCB0aGUK
KyAgLy8gbW9kZWwgaW4gcXVlc3Rpb24uIEJ5IGRlZmF1bHQsIG1ha2VzIGEgUkVTVGZ1bCBBamF4
IHJlcXVlc3QKKyAgLy8gdG8gdGhlIG1vZGVsJ3MgYHVybCgpYC4gU29tZSBwb3NzaWJsZSBjdXN0
b21pemF0aW9ucyBjb3VsZCBiZToKKyAgLy8KKyAgLy8gKiBVc2UgYHNldFRpbWVvdXRgIHRvIGJh
dGNoIHJhcGlkLWZpcmUgdXBkYXRlcyBpbnRvIGEgc2luZ2xlIHJlcXVlc3QuCisgIC8vICogU2Vu
ZCB1cCB0aGUgbW9kZWxzIGFzIFhNTCBpbnN0ZWFkIG9mIEpTT04uCisgIC8vICogUGVyc2lzdCBt
b2RlbHMgdmlhIFdlYlNvY2tldHMgaW5zdGVhZCBvZiBBamF4LgorICAvLworICAvLyBUdXJuIG9u
IGBCYWNrYm9uZS5lbXVsYXRlSFRUUGAgaW4gb3JkZXIgdG8gc2VuZCBgUFVUYCBhbmQgYERFTEVU
RWAgcmVxdWVzdHMKKyAgLy8gYXMgYFBPU1RgLCB3aXRoIGEgYF9tZXRob2RgIHBhcmFtZXRlciBj
b250YWluaW5nIHRoZSB0cnVlIEhUVFAgbWV0aG9kLAorICAvLyBhcyB3ZWxsIGFzIGFsbCByZXF1
ZXN0cyB3aXRoIHRoZSBib2R5IGFzIGBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRg
CisgIC8vIGluc3RlYWQgb2YgYGFwcGxpY2F0aW9uL2pzb25gIHdpdGggdGhlIG1vZGVsIGluIGEg
cGFyYW0gbmFtZWQgYG1vZGVsYC4KKyAgLy8gVXNlZnVsIHdoZW4gaW50ZXJmYWNpbmcgd2l0aCBz
ZXJ2ZXItc2lkZSBsYW5ndWFnZXMgbGlrZSAqKlBIUCoqIHRoYXQgbWFrZQorICAvLyBpdCBkaWZm
aWN1bHQgdG8gcmVhZCB0aGUgYm9keSBvZiBgUFVUYCByZXF1ZXN0cy4KKyAgQmFja2JvbmUuc3lu
YyA9IGZ1bmN0aW9uKG1ldGhvZCwgbW9kZWwsIG9wdGlvbnMpIHsKKyAgICB2YXIgdHlwZSA9IG1l
dGhvZE1hcFttZXRob2RdOworCisgICAgLy8gRGVmYXVsdCBvcHRpb25zLCB1bmxlc3Mgc3BlY2lm
aWVkLgorICAgIF8uZGVmYXVsdHMob3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KSwgeworICAgICAg
ZW11bGF0ZUhUVFA6IEJhY2tib25lLmVtdWxhdGVIVFRQLAorICAgICAgZW11bGF0ZUpTT046IEJh
Y2tib25lLmVtdWxhdGVKU09OCisgICAgfSk7CisKKyAgICAvLyBEZWZhdWx0IEpTT04tcmVxdWVz
dCBvcHRpb25zLgorICAgIHZhciBwYXJhbXMgPSB7dHlwZTogdHlwZSwgZGF0YVR5cGU6ICdqc29u
J307CisKKyAgICAvLyBFbnN1cmUgdGhhdCB3ZSBoYXZlIGEgVVJMLgorICAgIGlmICghb3B0aW9u
cy51cmwpIHsKKyAgICAgIHBhcmFtcy51cmwgPSBfLnJlc3VsdChtb2RlbCwgJ3VybCcpIHx8IHVy
bEVycm9yKCk7CisgICAgfQorCisgICAgLy8gRW5zdXJlIHRoYXQgd2UgaGF2ZSB0aGUgYXBwcm9w
cmlhdGUgcmVxdWVzdCBkYXRhLgorICAgIGlmIChvcHRpb25zLmRhdGEgPT0gbnVsbCAmJiBtb2Rl
bCAmJiAobWV0aG9kID09PSAnY3JlYXRlJyB8fCBtZXRob2QgPT09ICd1cGRhdGUnIHx8IG1ldGhv
ZCA9PT0gJ3BhdGNoJykpIHsKKyAgICAgIHBhcmFtcy5jb250ZW50VHlwZSA9ICdhcHBsaWNhdGlv
bi9qc29uJzsKKyAgICAgIHBhcmFtcy5kYXRhID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5hdHRy
cyB8fCBtb2RlbC50b0pTT04ob3B0aW9ucykpOworICAgIH0KKworICAgIC8vIEZvciBvbGRlciBz
ZXJ2ZXJzLCBlbXVsYXRlIEpTT04gYnkgZW5jb2RpbmcgdGhlIHJlcXVlc3QgaW50byBhbiBIVE1M
LWZvcm0uCisgICAgaWYgKG9wdGlvbnMuZW11bGF0ZUpTT04pIHsKKyAgICAgIHBhcmFtcy5jb250
ZW50VHlwZSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnOworICAgICAgcGFy
YW1zLmRhdGEgPSBwYXJhbXMuZGF0YSA/IHttb2RlbDogcGFyYW1zLmRhdGF9IDoge307CisgICAg
fQorCisgICAgLy8gRm9yIG9sZGVyIHNlcnZlcnMsIGVtdWxhdGUgSFRUUCBieSBtaW1pY2tpbmcg
dGhlIEhUVFAgbWV0aG9kIHdpdGggYF9tZXRob2RgCisgICAgLy8gQW5kIGFuIGBYLUhUVFAtTWV0
aG9kLU92ZXJyaWRlYCBoZWFkZXIuCisgICAgaWYgKG9wdGlvbnMuZW11bGF0ZUhUVFAgJiYgKHR5
cGUgPT09ICdQVVQnIHx8IHR5cGUgPT09ICdERUxFVEUnIHx8IHR5cGUgPT09ICdQQVRDSCcpKSB7
CisgICAgICBwYXJhbXMudHlwZSA9ICdQT1NUJzsKKyAgICAgIGlmIChvcHRpb25zLmVtdWxhdGVK
U09OKSBwYXJhbXMuZGF0YS5fbWV0aG9kID0gdHlwZTsKKyAgICAgIHZhciBiZWZvcmVTZW5kID0g
b3B0aW9ucy5iZWZvcmVTZW5kOworICAgICAgb3B0aW9ucy5iZWZvcmVTZW5kID0gZnVuY3Rpb24o
eGhyKSB7CisgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdYLUhUVFAtTWV0aG9kLU92ZXJy
aWRlJywgdHlwZSk7CisgICAgICAgIGlmIChiZWZvcmVTZW5kKSByZXR1cm4gYmVmb3JlU2VuZC5h
cHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgfTsKKyAgICB9CisKKyAgICAvLyBEb24ndCBw
cm9jZXNzIGRhdGEgb24gYSBub24tR0VUIHJlcXVlc3QuCisgICAgaWYgKHBhcmFtcy50eXBlICE9
PSAnR0VUJyAmJiAhb3B0aW9ucy5lbXVsYXRlSlNPTikgeworICAgICAgcGFyYW1zLnByb2Nlc3NE
YXRhID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gUGFzcyBhbG9uZyBgdGV4dFN0YXR1c2AgYW5k
IGBlcnJvclRocm93bmAgZnJvbSBqUXVlcnkuCisgICAgdmFyIGVycm9yID0gb3B0aW9ucy5lcnJv
cjsKKyAgICBvcHRpb25zLmVycm9yID0gZnVuY3Rpb24oeGhyLCB0ZXh0U3RhdHVzLCBlcnJvclRo
cm93bikgeworICAgICAgb3B0aW9ucy50ZXh0U3RhdHVzID0gdGV4dFN0YXR1czsKKyAgICAgIG9w
dGlvbnMuZXJyb3JUaHJvd24gPSBlcnJvclRocm93bjsKKyAgICAgIGlmIChlcnJvcikgZXJyb3Iu
Y2FsbChvcHRpb25zLmNvbnRleHQsIHhociwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pOworICAg
IH07CisKKyAgICAvLyBNYWtlIHRoZSByZXF1ZXN0LCBhbGxvd2luZyB0aGUgdXNlciB0byBvdmVy
cmlkZSBhbnkgQWpheCBvcHRpb25zLgorICAgIHZhciB4aHIgPSBvcHRpb25zLnhociA9IEJhY2ti
b25lLmFqYXgoXy5leHRlbmQocGFyYW1zLCBvcHRpb25zKSk7CisgICAgbW9kZWwudHJpZ2dlcign
cmVxdWVzdCcsIG1vZGVsLCB4aHIsIG9wdGlvbnMpOworICAgIHJldHVybiB4aHI7CisgIH07CisK
KyAgLy8gTWFwIGZyb20gQ1JVRCB0byBIVFRQIGZvciBvdXIgZGVmYXVsdCBgQmFja2JvbmUuc3lu
Y2AgaW1wbGVtZW50YXRpb24uCisgIHZhciBtZXRob2RNYXAgPSB7CisgICAgJ2NyZWF0ZSc6ICdQ
T1NUJywKKyAgICAndXBkYXRlJzogJ1BVVCcsCisgICAgJ3BhdGNoJzogJ1BBVENIJywKKyAgICAn
ZGVsZXRlJzogJ0RFTEVURScsCisgICAgJ3JlYWQnOiAnR0VUJworICB9OworCisgIC8vIFNldCB0
aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBgQmFja2JvbmUuYWpheGAgdG8gcHJveHkgdGhy
b3VnaCB0byBgJGAuCisgIC8vIE92ZXJyaWRlIHRoaXMgaWYgeW91J2QgbGlrZSB0byB1c2UgYSBk
aWZmZXJlbnQgbGlicmFyeS4KKyAgQmFja2JvbmUuYWpheCA9IGZ1bmN0aW9uKCkgeworICAgIHJl
dHVybiBCYWNrYm9uZS4kLmFqYXguYXBwbHkoQmFja2JvbmUuJCwgYXJndW1lbnRzKTsKKyAgfTsK
KworICAvLyBCYWNrYm9uZS5Sb3V0ZXIKKyAgLy8gLS0tLS0tLS0tLS0tLS0tCisKKyAgLy8gUm91
dGVycyBtYXAgZmF1eC1VUkxzIHRvIGFjdGlvbnMsIGFuZCBmaXJlIGV2ZW50cyB3aGVuIHJvdXRl
cyBhcmUKKyAgLy8gbWF0Y2hlZC4gQ3JlYXRpbmcgYSBuZXcgb25lIHNldHMgaXRzIGByb3V0ZXNg
IGhhc2gsIGlmIG5vdCBzZXQgc3RhdGljYWxseS4KKyAgdmFyIFJvdXRlciA9IEJhY2tib25lLlJv
dXRlciA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKKyAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30p
OworICAgIGlmIChvcHRpb25zLnJvdXRlcykgdGhpcy5yb3V0ZXMgPSBvcHRpb25zLnJvdXRlczsK
KyAgICB0aGlzLl9iaW5kUm91dGVzKCk7CisgICAgdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMs
IGFyZ3VtZW50cyk7CisgIH07CisKKyAgLy8gQ2FjaGVkIHJlZ3VsYXIgZXhwcmVzc2lvbnMgZm9y
IG1hdGNoaW5nIG5hbWVkIHBhcmFtIHBhcnRzIGFuZCBzcGxhdHRlZAorICAvLyBwYXJ0cyBvZiBy
b3V0ZSBzdHJpbmdzLgorICB2YXIgb3B0aW9uYWxQYXJhbSA9IC9cKCguKj8pXCkvZzsKKyAgdmFy
IG5hbWVkUGFyYW0gICAgPSAvKFwoXD8pPzpcdysvZzsKKyAgdmFyIHNwbGF0UGFyYW0gICAgPSAv
XCpcdysvZzsKKyAgdmFyIGVzY2FwZVJlZ0V4cCAgPSAvW1wte31cW1xdKz8uLFxcXF4kfCNcc10v
ZzsKKworICAvLyBTZXQgdXAgYWxsIGluaGVyaXRhYmxlICoqQmFja2JvbmUuUm91dGVyKiogcHJv
cGVydGllcyBhbmQgbWV0aG9kcy4KKyAgXy5leHRlbmQoUm91dGVyLnByb3RvdHlwZSwgRXZlbnRz
LCB7CisKKyAgICAvLyBJbml0aWFsaXplIGlzIGFuIGVtcHR5IGZ1bmN0aW9uIGJ5IGRlZmF1bHQu
IE92ZXJyaWRlIGl0IHdpdGggeW91ciBvd24KKyAgICAvLyBpbml0aWFsaXphdGlvbiBsb2dpYy4K
KyAgICBpbml0aWFsaXplOiBmdW5jdGlvbigpe30sCisKKyAgICAvLyBNYW51YWxseSBiaW5kIGEg
c2luZ2xlIG5hbWVkIHJvdXRlIHRvIGEgY2FsbGJhY2suIEZvciBleGFtcGxlOgorICAgIC8vCisg
ICAgLy8gICAgIHRoaXMucm91dGUoJ3NlYXJjaC86cXVlcnkvcDpudW0nLCAnc2VhcmNoJywgZnVu
Y3Rpb24ocXVlcnksIG51bSkgeworICAgIC8vICAgICAgIC4uLgorICAgIC8vICAgICB9KTsKKyAg
ICAvLworICAgIHJvdXRlOiBmdW5jdGlvbihyb3V0ZSwgbmFtZSwgY2FsbGJhY2spIHsKKyAgICAg
IGlmICghXy5pc1JlZ0V4cChyb3V0ZSkpIHJvdXRlID0gdGhpcy5fcm91dGVUb1JlZ0V4cChyb3V0
ZSk7CisgICAgICBpZiAoXy5pc0Z1bmN0aW9uKG5hbWUpKSB7CisgICAgICAgIGNhbGxiYWNrID0g
bmFtZTsKKyAgICAgICAgbmFtZSA9ICcnOworICAgICAgfQorICAgICAgaWYgKCFjYWxsYmFjaykg
Y2FsbGJhY2sgPSB0aGlzW25hbWVdOworICAgICAgdmFyIHJvdXRlciA9IHRoaXM7CisgICAgICBC
YWNrYm9uZS5oaXN0b3J5LnJvdXRlKHJvdXRlLCBmdW5jdGlvbihmcmFnbWVudCkgeworICAgICAg
ICB2YXIgYXJncyA9IHJvdXRlci5fZXh0cmFjdFBhcmFtZXRlcnMocm91dGUsIGZyYWdtZW50KTsK
KyAgICAgICAgaWYgKHJvdXRlci5leGVjdXRlKGNhbGxiYWNrLCBhcmdzLCBuYW1lKSAhPT0gZmFs
c2UpIHsKKyAgICAgICAgICByb3V0ZXIudHJpZ2dlci5hcHBseShyb3V0ZXIsIFsncm91dGU6JyAr
IG5hbWVdLmNvbmNhdChhcmdzKSk7CisgICAgICAgICAgcm91dGVyLnRyaWdnZXIoJ3JvdXRlJywg
bmFtZSwgYXJncyk7CisgICAgICAgICAgQmFja2JvbmUuaGlzdG9yeS50cmlnZ2VyKCdyb3V0ZScs
IHJvdXRlciwgbmFtZSwgYXJncyk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgICAgcmV0dXJu
IHRoaXM7CisgICAgfSwKKworICAgIC8vIEV4ZWN1dGUgYSByb3V0ZSBoYW5kbGVyIHdpdGggdGhl
IHByb3ZpZGVkIHBhcmFtZXRlcnMuICBUaGlzIGlzIGFuCisgICAgLy8gZXhjZWxsZW50IHBsYWNl
IHRvIGRvIHByZS1yb3V0ZSBzZXR1cCBvciBwb3N0LXJvdXRlIGNsZWFudXAuCisgICAgZXhlY3V0
ZTogZnVuY3Rpb24oY2FsbGJhY2ssIGFyZ3MsIG5hbWUpIHsKKyAgICAgIGlmIChjYWxsYmFjaykg
Y2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7CisgICAgfSwKKworICAgIC8vIFNpbXBsZSBwcm94
eSB0byBgQmFja2JvbmUuaGlzdG9yeWAgdG8gc2F2ZSBhIGZyYWdtZW50IGludG8gdGhlIGhpc3Rv
cnkuCisgICAgbmF2aWdhdGU6IGZ1bmN0aW9uKGZyYWdtZW50LCBvcHRpb25zKSB7CisgICAgICBC
YWNrYm9uZS5oaXN0b3J5Lm5hdmlnYXRlKGZyYWdtZW50LCBvcHRpb25zKTsKKyAgICAgIHJldHVy
biB0aGlzOworICAgIH0sCisKKyAgICAvLyBCaW5kIGFsbCBkZWZpbmVkIHJvdXRlcyB0byBgQmFj
a2JvbmUuaGlzdG9yeWAuIFdlIGhhdmUgdG8gcmV2ZXJzZSB0aGUKKyAgICAvLyBvcmRlciBvZiB0
aGUgcm91dGVzIGhlcmUgdG8gc3VwcG9ydCBiZWhhdmlvciB3aGVyZSB0aGUgbW9zdCBnZW5lcmFs
CisgICAgLy8gcm91dGVzIGNhbiBiZSBkZWZpbmVkIGF0IHRoZSBib3R0b20gb2YgdGhlIHJvdXRl
IG1hcC4KKyAgICBfYmluZFJvdXRlczogZnVuY3Rpb24oKSB7CisgICAgICBpZiAoIXRoaXMucm91
dGVzKSByZXR1cm47CisgICAgICB0aGlzLnJvdXRlcyA9IF8ucmVzdWx0KHRoaXMsICdyb3V0ZXMn
KTsKKyAgICAgIHZhciByb3V0ZSwgcm91dGVzID0gXy5rZXlzKHRoaXMucm91dGVzKTsKKyAgICAg
IHdoaWxlICgocm91dGUgPSByb3V0ZXMucG9wKCkpICE9IG51bGwpIHsKKyAgICAgICAgdGhpcy5y
b3V0ZShyb3V0ZSwgdGhpcy5yb3V0ZXNbcm91dGVdKTsKKyAgICAgIH0KKyAgICB9LAorCisgICAg
Ly8gQ29udmVydCBhIHJvdXRlIHN0cmluZyBpbnRvIGEgcmVndWxhciBleHByZXNzaW9uLCBzdWl0
YWJsZSBmb3IgbWF0Y2hpbmcKKyAgICAvLyBhZ2FpbnN0IHRoZSBjdXJyZW50IGxvY2F0aW9uIGhh
c2guCisgICAgX3JvdXRlVG9SZWdFeHA6IGZ1bmN0aW9uKHJvdXRlKSB7CisgICAgICByb3V0ZSA9
IHJvdXRlLnJlcGxhY2UoZXNjYXBlUmVnRXhwLCAnXFwkJicpCisgICAgICAgICAgICAgICAgICAg
LnJlcGxhY2Uob3B0aW9uYWxQYXJhbSwgJyg/OiQxKT8nKQorICAgICAgICAgICAgICAgICAgIC5y
ZXBsYWNlKG5hbWVkUGFyYW0sIGZ1bmN0aW9uKG1hdGNoLCBvcHRpb25hbCkgeworICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG9wdGlvbmFsID8gbWF0Y2ggOiAnKFteLz9dKyknOworICAgICAg
ICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgICAgLnJlcGxhY2Uoc3BsYXRQYXJhbSwg
JyhbXj9dKj8pJyk7CisgICAgICByZXR1cm4gbmV3IFJlZ0V4cCgnXicgKyByb3V0ZSArICcoPzpc
XD8oW1xcc1xcU10qKSk/JCcpOworICAgIH0sCisKKyAgICAvLyBHaXZlbiBhIHJvdXRlLCBhbmQg
YSBVUkwgZnJhZ21lbnQgdGhhdCBpdCBtYXRjaGVzLCByZXR1cm4gdGhlIGFycmF5IG9mCisgICAg
Ly8gZXh0cmFjdGVkIGRlY29kZWQgcGFyYW1ldGVycy4gRW1wdHkgb3IgdW5tYXRjaGVkIHBhcmFt
ZXRlcnMgd2lsbCBiZQorICAgIC8vIHRyZWF0ZWQgYXMgYG51bGxgIHRvIG5vcm1hbGl6ZSBjcm9z
cy1icm93c2VyIGJlaGF2aW9yLgorICAgIF9leHRyYWN0UGFyYW1ldGVyczogZnVuY3Rpb24ocm91
dGUsIGZyYWdtZW50KSB7CisgICAgICB2YXIgcGFyYW1zID0gcm91dGUuZXhlYyhmcmFnbWVudCku
c2xpY2UoMSk7CisgICAgICByZXR1cm4gXy5tYXAocGFyYW1zLCBmdW5jdGlvbihwYXJhbSwgaSkg
eworICAgICAgICAvLyBEb24ndCBkZWNvZGUgdGhlIHNlYXJjaCBwYXJhbXMuCisgICAgICAgIGlm
IChpID09PSBwYXJhbXMubGVuZ3RoIC0gMSkgcmV0dXJuIHBhcmFtIHx8IG51bGw7CisgICAgICAg
IHJldHVybiBwYXJhbSA/IGRlY29kZVVSSUNvbXBvbmVudChwYXJhbSkgOiBudWxsOworICAgICAg
fSk7CisgICAgfQorCisgIH0pOworCisgIC8vIEJhY2tib25lLkhpc3RvcnkKKyAgLy8gLS0tLS0t
LS0tLS0tLS0tLQorCisgIC8vIEhhbmRsZXMgY3Jvc3MtYnJvd3NlciBoaXN0b3J5IG1hbmFnZW1l
bnQsIGJhc2VkIG9uIGVpdGhlcgorICAvLyBbcHVzaFN0YXRlXShodHRwOi8vZGl2ZWludG9odG1s
NS5pbmZvL2hpc3RvcnkuaHRtbCkgYW5kIHJlYWwgVVJMcywgb3IKKyAgLy8gW29uaGFzaGNoYW5n
ZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9ET00vd2luZG93Lm9u
aGFzaGNoYW5nZSkKKyAgLy8gYW5kIFVSTCBmcmFnbWVudHMuIElmIHRoZSBicm93c2VyIHN1cHBv
cnRzIG5laXRoZXIgKG9sZCBJRSwgbmF0Y2gpLAorICAvLyBmYWxscyBiYWNrIHRvIHBvbGxpbmcu
CisgIHZhciBIaXN0b3J5ID0gQmFja2JvbmUuSGlzdG9yeSA9IGZ1bmN0aW9uKCkgeworICAgIHRo
aXMuaGFuZGxlcnMgPSBbXTsKKyAgICB0aGlzLmNoZWNrVXJsID0gXy5iaW5kKHRoaXMuY2hlY2tV
cmwsIHRoaXMpOworCisgICAgLy8gRW5zdXJlIHRoYXQgYEhpc3RvcnlgIGNhbiBiZSB1c2VkIG91
dHNpZGUgb2YgdGhlIGJyb3dzZXIuCisgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmlu
ZWQnKSB7CisgICAgICB0aGlzLmxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uOworICAgICAgdGhp
cy5oaXN0b3J5ID0gd2luZG93Lmhpc3Rvcnk7CisgICAgfQorICB9OworCisgIC8vIENhY2hlZCBy
ZWdleCBmb3Igc3RyaXBwaW5nIGEgbGVhZGluZyBoYXNoL3NsYXNoIGFuZCB0cmFpbGluZyBzcGFj
ZS4KKyAgdmFyIHJvdXRlU3RyaXBwZXIgPSAvXlsjXC9dfFxzKyQvZzsKKworICAvLyBDYWNoZWQg
cmVnZXggZm9yIHN0cmlwcGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzLgorICB2YXIg
cm9vdFN0cmlwcGVyID0gL15cLyt8XC8rJC9nOworCisgIC8vIENhY2hlZCByZWdleCBmb3Igc3Ry
aXBwaW5nIHVybHMgb2YgaGFzaC4KKyAgdmFyIHBhdGhTdHJpcHBlciA9IC8jLiokLzsKKworICAv
LyBIYXMgdGhlIGhpc3RvcnkgaGFuZGxpbmcgYWxyZWFkeSBiZWVuIHN0YXJ0ZWQ/CisgIEhpc3Rv
cnkuc3RhcnRlZCA9IGZhbHNlOworCisgIC8vIFNldCB1cCBhbGwgaW5oZXJpdGFibGUgKipCYWNr
Ym9uZS5IaXN0b3J5KiogcHJvcGVydGllcyBhbmQgbWV0aG9kcy4KKyAgXy5leHRlbmQoSGlzdG9y
eS5wcm90b3R5cGUsIEV2ZW50cywgeworCisgICAgLy8gVGhlIGRlZmF1bHQgaW50ZXJ2YWwgdG8g
cG9sbCBmb3IgaGFzaCBjaGFuZ2VzLCBpZiBuZWNlc3NhcnksIGlzCisgICAgLy8gdHdlbnR5IHRp
bWVzIGEgc2Vjb25kLgorICAgIGludGVydmFsOiA1MCwKKworICAgIC8vIEFyZSB3ZSBhdCB0aGUg
YXBwIHJvb3Q/CisgICAgYXRSb290OiBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBwYXRoID0gdGhp
cy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9bXlwvXSQvLCAnJCYvJyk7CisgICAgICByZXR1
cm4gcGF0aCA9PT0gdGhpcy5yb290ICYmICF0aGlzLmdldFNlYXJjaCgpOworICAgIH0sCisKKyAg
ICAvLyBEb2VzIHRoZSBwYXRobmFtZSBtYXRjaCB0aGUgcm9vdD8KKyAgICBtYXRjaFJvb3Q6IGZ1
bmN0aW9uKCkgeworICAgICAgdmFyIHBhdGggPSB0aGlzLmRlY29kZUZyYWdtZW50KHRoaXMubG9j
YXRpb24ucGF0aG5hbWUpOworICAgICAgdmFyIHJvb3RQYXRoID0gcGF0aC5zbGljZSgwLCB0aGlz
LnJvb3QubGVuZ3RoIC0gMSkgKyAnLyc7CisgICAgICByZXR1cm4gcm9vdFBhdGggPT09IHRoaXMu
cm9vdDsKKyAgICB9LAorCisgICAgLy8gVW5pY29kZSBjaGFyYWN0ZXJzIGluIGBsb2NhdGlvbi5w
YXRobmFtZWAgYXJlIHBlcmNlbnQgZW5jb2RlZCBzbyB0aGV5J3JlCisgICAgLy8gZGVjb2RlZCBm
b3IgY29tcGFyaXNvbi4gYCUyNWAgc2hvdWxkIG5vdCBiZSBkZWNvZGVkIHNpbmNlIGl0IG1heSBi
ZSBwYXJ0CisgICAgLy8gb2YgYW4gZW5jb2RlZCBwYXJhbWV0ZXIuCisgICAgZGVjb2RlRnJhZ21l
bnQ6IGZ1bmN0aW9uKGZyYWdtZW50KSB7CisgICAgICByZXR1cm4gZGVjb2RlVVJJKGZyYWdtZW50
LnJlcGxhY2UoLyUyNS9nLCAnJTI1MjUnKSk7CisgICAgfSwKKworICAgIC8vIEluIElFNiwgdGhl
IGhhc2ggZnJhZ21lbnQgYW5kIHNlYXJjaCBwYXJhbXMgYXJlIGluY29ycmVjdCBpZiB0aGUKKyAg
ICAvLyBmcmFnbWVudCBjb250YWlucyBgP2AuCisgICAgZ2V0U2VhcmNoOiBmdW5jdGlvbigpIHsK
KyAgICAgIHZhciBtYXRjaCA9IHRoaXMubG9jYXRpb24uaHJlZi5yZXBsYWNlKC8jLiovLCAnJyku
bWF0Y2goL1w/LisvKTsKKyAgICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzBdIDogJyc7CisgICAg
fSwKKworICAgIC8vIEdldHMgdGhlIHRydWUgaGFzaCB2YWx1ZS4gQ2Fubm90IHVzZSBsb2NhdGlv
bi5oYXNoIGRpcmVjdGx5IGR1ZSB0byBidWcKKyAgICAvLyBpbiBGaXJlZm94IHdoZXJlIGxvY2F0
aW9uLmhhc2ggd2lsbCBhbHdheXMgYmUgZGVjb2RlZC4KKyAgICBnZXRIYXNoOiBmdW5jdGlvbih3
aW5kb3cpIHsKKyAgICAgIHZhciBtYXRjaCA9ICh3aW5kb3cgfHwgdGhpcykubG9jYXRpb24uaHJl
Zi5tYXRjaCgvIyguKikkLyk7CisgICAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6ICcnOwor
ICAgIH0sCisKKyAgICAvLyBHZXQgdGhlIHBhdGhuYW1lIGFuZCBzZWFyY2ggcGFyYW1zLCB3aXRo
b3V0IHRoZSByb290LgorICAgIGdldFBhdGg6IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIHBhdGgg
PSB0aGlzLmRlY29kZUZyYWdtZW50KAorICAgICAgICB0aGlzLmxvY2F0aW9uLnBhdGhuYW1lICsg
dGhpcy5nZXRTZWFyY2goKQorICAgICAgKS5zbGljZSh0aGlzLnJvb3QubGVuZ3RoIC0gMSk7Cisg
ICAgICByZXR1cm4gcGF0aC5jaGFyQXQoMCkgPT09ICcvJyA/IHBhdGguc2xpY2UoMSkgOiBwYXRo
OworICAgIH0sCisKKyAgICAvLyBHZXQgdGhlIGNyb3NzLWJyb3dzZXIgbm9ybWFsaXplZCBVUkwg
ZnJhZ21lbnQgZnJvbSB0aGUgcGF0aCBvciBoYXNoLgorICAgIGdldEZyYWdtZW50OiBmdW5jdGlv
bihmcmFnbWVudCkgeworICAgICAgaWYgKGZyYWdtZW50ID09IG51bGwpIHsKKyAgICAgICAgaWYg
KHRoaXMuX3VzZVB1c2hTdGF0ZSB8fCAhdGhpcy5fd2FudHNIYXNoQ2hhbmdlKSB7CisgICAgICAg
ICAgZnJhZ21lbnQgPSB0aGlzLmdldFBhdGgoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICBmcmFnbWVudCA9IHRoaXMuZ2V0SGFzaCgpOworICAgICAgICB9CisgICAgICB9CisgICAgICBy
ZXR1cm4gZnJhZ21lbnQucmVwbGFjZShyb3V0ZVN0cmlwcGVyLCAnJyk7CisgICAgfSwKKworICAg
IC8vIFN0YXJ0IHRoZSBoYXNoIGNoYW5nZSBoYW5kbGluZywgcmV0dXJuaW5nIGB0cnVlYCBpZiB0
aGUgY3VycmVudCBVUkwgbWF0Y2hlcworICAgIC8vIGFuIGV4aXN0aW5nIHJvdXRlLCBhbmQgYGZh
bHNlYCBvdGhlcndpc2UuCisgICAgc3RhcnQ6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKKyAgICAgIGlm
IChIaXN0b3J5LnN0YXJ0ZWQpIHRocm93IG5ldyBFcnJvcignQmFja2JvbmUuaGlzdG9yeSBoYXMg
YWxyZWFkeSBiZWVuIHN0YXJ0ZWQnKTsKKyAgICAgIEhpc3Rvcnkuc3RhcnRlZCA9IHRydWU7CisK
KyAgICAgIC8vIEZpZ3VyZSBvdXQgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbi4gRG8gd2UgbmVl
ZCBhbiBpZnJhbWU/CisgICAgICAvLyBJcyBwdXNoU3RhdGUgZGVzaXJlZCAuLi4gaXMgaXQgYXZh
aWxhYmxlPworICAgICAgdGhpcy5vcHRpb25zICAgICAgICAgID0gXy5leHRlbmQoe3Jvb3Q6ICcv
J30sIHRoaXMub3B0aW9ucywgb3B0aW9ucyk7CisgICAgICB0aGlzLnJvb3QgICAgICAgICAgICAg
PSB0aGlzLm9wdGlvbnMucm9vdDsKKyAgICAgIHRoaXMuX3dhbnRzSGFzaENoYW5nZSA9IHRoaXMu
b3B0aW9ucy5oYXNoQ2hhbmdlICE9PSBmYWxzZTsKKyAgICAgIHRoaXMuX2hhc0hhc2hDaGFuZ2Ug
ICA9ICdvbmhhc2hjaGFuZ2UnIGluIHdpbmRvdyAmJiAoZG9jdW1lbnQuZG9jdW1lbnRNb2RlID09
PSB2b2lkIDAgfHwgZG9jdW1lbnQuZG9jdW1lbnRNb2RlID4gNyk7CisgICAgICB0aGlzLl91c2VI
YXNoQ2hhbmdlICAgPSB0aGlzLl93YW50c0hhc2hDaGFuZ2UgJiYgdGhpcy5faGFzSGFzaENoYW5n
ZTsKKyAgICAgIHRoaXMuX3dhbnRzUHVzaFN0YXRlICA9ICEhdGhpcy5vcHRpb25zLnB1c2hTdGF0
ZTsKKyAgICAgIHRoaXMuX2hhc1B1c2hTdGF0ZSAgICA9ICEhKHRoaXMuaGlzdG9yeSAmJiB0aGlz
Lmhpc3RvcnkucHVzaFN0YXRlKTsKKyAgICAgIHRoaXMuX3VzZVB1c2hTdGF0ZSAgICA9IHRoaXMu
X3dhbnRzUHVzaFN0YXRlICYmIHRoaXMuX2hhc1B1c2hTdGF0ZTsKKyAgICAgIHRoaXMuZnJhZ21l
bnQgICAgICAgICA9IHRoaXMuZ2V0RnJhZ21lbnQoKTsKKworICAgICAgLy8gTm9ybWFsaXplIHJv
b3QgdG8gYWx3YXlzIGluY2x1ZGUgYSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaC4KKyAgICAg
IHRoaXMucm9vdCA9ICgnLycgKyB0aGlzLnJvb3QgKyAnLycpLnJlcGxhY2Uocm9vdFN0cmlwcGVy
LCAnLycpOworCisgICAgICAvLyBUcmFuc2l0aW9uIGZyb20gaGFzaENoYW5nZSB0byBwdXNoU3Rh
dGUgb3IgdmljZSB2ZXJzYSBpZiBib3RoIGFyZQorICAgICAgLy8gcmVxdWVzdGVkLgorICAgICAg
aWYgKHRoaXMuX3dhbnRzSGFzaENoYW5nZSAmJiB0aGlzLl93YW50c1B1c2hTdGF0ZSkgeworCisg
ICAgICAgIC8vIElmIHdlJ3ZlIHN0YXJ0ZWQgb2ZmIHdpdGggYSByb3V0ZSBmcm9tIGEgYHB1c2hT
dGF0ZWAtZW5hYmxlZAorICAgICAgICAvLyBicm93c2VyLCBidXQgd2UncmUgY3VycmVudGx5IGlu
IGEgYnJvd3NlciB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBpdC4uLgorICAgICAgICBpZiAoIXRoaXMu
X2hhc1B1c2hTdGF0ZSAmJiAhdGhpcy5hdFJvb3QoKSkgeworICAgICAgICAgIHZhciByb290UGF0
aCA9IHRoaXMucm9vdC5zbGljZSgwLCAtMSkgfHwgJy8nOworICAgICAgICAgIHRoaXMubG9jYXRp
b24ucmVwbGFjZShyb290UGF0aCArICcjJyArIHRoaXMuZ2V0UGF0aCgpKTsKKyAgICAgICAgICAv
LyBSZXR1cm4gaW1tZWRpYXRlbHkgYXMgYnJvd3NlciB3aWxsIGRvIHJlZGlyZWN0IHRvIG5ldyB1
cmwKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAvLyBPciBpZiB3ZSd2ZSBzdGFy
dGVkIG91dCB3aXRoIGEgaGFzaC1iYXNlZCByb3V0ZSwgYnV0IHdlJ3JlIGN1cnJlbnRseQorICAg
ICAgICAvLyBpbiBhIGJyb3dzZXIgd2hlcmUgaXQgY291bGQgYmUgYHB1c2hTdGF0ZWAtYmFzZWQg
aW5zdGVhZC4uLgorICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2hhc1B1c2hTdGF0ZSAmJiB0aGlz
LmF0Um9vdCgpKSB7CisgICAgICAgICAgdGhpcy5uYXZpZ2F0ZSh0aGlzLmdldEhhc2goKSwge3Jl
cGxhY2U6IHRydWV9KTsKKyAgICAgICAgfQorCisgICAgICB9CisKKyAgICAgIC8vIFByb3h5IGFu
IGlmcmFtZSB0byBoYW5kbGUgbG9jYXRpb24gZXZlbnRzIGlmIHRoZSBicm93c2VyIGRvZXNuJ3QK
KyAgICAgIC8vIHN1cHBvcnQgdGhlIGBoYXNoY2hhbmdlYCBldmVudCwgSFRNTDUgaGlzdG9yeSwg
b3IgdGhlIHVzZXIgd2FudHMKKyAgICAgIC8vIGBoYXNoQ2hhbmdlYCBidXQgbm90IGBwdXNoU3Rh
dGVgLgorICAgICAgaWYgKCF0aGlzLl9oYXNIYXNoQ2hhbmdlICYmIHRoaXMuX3dhbnRzSGFzaENo
YW5nZSAmJiAhdGhpcy5fdXNlUHVzaFN0YXRlKSB7CisgICAgICAgIHRoaXMuaWZyYW1lID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisgICAgICAgIHRoaXMuaWZyYW1lLnNyYyA9
ICdqYXZhc2NyaXB0OjAnOworICAgICAgICB0aGlzLmlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25v
bmUnOworICAgICAgICB0aGlzLmlmcmFtZS50YWJJbmRleCA9IC0xOworICAgICAgICB2YXIgYm9k
eSA9IGRvY3VtZW50LmJvZHk7CisgICAgICAgIC8vIFVzaW5nIGBhcHBlbmRDaGlsZGAgd2lsbCB0
aHJvdyBvbiBJRSA8IDkgaWYgdGhlIGRvY3VtZW50IGlzIG5vdCByZWFkeS4KKyAgICAgICAgdmFy
IGlXaW5kb3cgPSBib2R5Lmluc2VydEJlZm9yZSh0aGlzLmlmcmFtZSwgYm9keS5maXJzdENoaWxk
KS5jb250ZW50V2luZG93OworICAgICAgICBpV2luZG93LmRvY3VtZW50Lm9wZW4oKTsKKyAgICAg
ICAgaVdpbmRvdy5kb2N1bWVudC5jbG9zZSgpOworICAgICAgICBpV2luZG93LmxvY2F0aW9uLmhh
c2ggPSAnIycgKyB0aGlzLmZyYWdtZW50OworICAgICAgfQorCisgICAgICAvLyBBZGQgYSBjcm9z
cy1wbGF0Zm9ybSBgYWRkRXZlbnRMaXN0ZW5lcmAgc2hpbSBmb3Igb2xkZXIgYnJvd3NlcnMuCisg
ICAgICB2YXIgYWRkRXZlbnRMaXN0ZW5lciA9IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyIHx8IGZ1
bmN0aW9uKGV2ZW50TmFtZSwgbGlzdGVuZXIpIHsKKyAgICAgICAgcmV0dXJuIGF0dGFjaEV2ZW50
KCdvbicgKyBldmVudE5hbWUsIGxpc3RlbmVyKTsKKyAgICAgIH07CisKKyAgICAgIC8vIERlcGVu
ZGluZyBvbiB3aGV0aGVyIHdlJ3JlIHVzaW5nIHB1c2hTdGF0ZSBvciBoYXNoZXMsIGFuZCB3aGV0
aGVyCisgICAgICAvLyAnb25oYXNoY2hhbmdlJyBpcyBzdXBwb3J0ZWQsIGRldGVybWluZSBob3cg
d2UgY2hlY2sgdGhlIFVSTCBzdGF0ZS4KKyAgICAgIGlmICh0aGlzLl91c2VQdXNoU3RhdGUpIHsK
KyAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCB0aGlzLmNoZWNrVXJsLCBmYWxz
ZSk7CisgICAgICB9IGVsc2UgaWYgKHRoaXMuX3VzZUhhc2hDaGFuZ2UgJiYgIXRoaXMuaWZyYW1l
KSB7CisgICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoJ2hhc2hjaGFuZ2UnLCB0aGlzLmNoZWNrVXJs
LCBmYWxzZSk7CisgICAgICB9IGVsc2UgaWYgKHRoaXMuX3dhbnRzSGFzaENoYW5nZSkgeworICAg
ICAgICB0aGlzLl9jaGVja1VybEludGVydmFsID0gc2V0SW50ZXJ2YWwodGhpcy5jaGVja1VybCwg
dGhpcy5pbnRlcnZhbCk7CisgICAgICB9CisKKyAgICAgIGlmICghdGhpcy5vcHRpb25zLnNpbGVu
dCkgcmV0dXJuIHRoaXMubG9hZFVybCgpOworICAgIH0sCisKKyAgICAvLyBEaXNhYmxlIEJhY2ti
b25lLmhpc3RvcnksIHBlcmhhcHMgdGVtcG9yYXJpbHkuIE5vdCB1c2VmdWwgaW4gYSByZWFsIGFw
cCwKKyAgICAvLyBidXQgcG9zc2libHkgdXNlZnVsIGZvciB1bml0IHRlc3RpbmcgUm91dGVycy4K
KyAgICBzdG9wOiBmdW5jdGlvbigpIHsKKyAgICAgIC8vIEFkZCBhIGNyb3NzLXBsYXRmb3JtIGBy
ZW1vdmVFdmVudExpc3RlbmVyYCBzaGltIGZvciBvbGRlciBicm93c2Vycy4KKyAgICAgIHZhciBy
ZW1vdmVFdmVudExpc3RlbmVyID0gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIgfHwgZnVuY3Rp
b24oZXZlbnROYW1lLCBsaXN0ZW5lcikgeworICAgICAgICByZXR1cm4gZGV0YWNoRXZlbnQoJ29u
JyArIGV2ZW50TmFtZSwgbGlzdGVuZXIpOworICAgICAgfTsKKworICAgICAgLy8gUmVtb3ZlIHdp
bmRvdyBsaXN0ZW5lcnMuCisgICAgICBpZiAodGhpcy5fdXNlUHVzaFN0YXRlKSB7CisgICAgICAg
IHJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgdGhpcy5jaGVja1VybCwgZmFsc2UpOwor
ICAgICAgfSBlbHNlIGlmICh0aGlzLl91c2VIYXNoQ2hhbmdlICYmICF0aGlzLmlmcmFtZSkgewor
ICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyKCdoYXNoY2hhbmdlJywgdGhpcy5jaGVja1VybCwg
ZmFsc2UpOworICAgICAgfQorCisgICAgICAvLyBDbGVhbiB1cCB0aGUgaWZyYW1lIGlmIG5lY2Vz
c2FyeS4KKyAgICAgIGlmICh0aGlzLmlmcmFtZSkgeworICAgICAgICBkb2N1bWVudC5ib2R5LnJl
bW92ZUNoaWxkKHRoaXMuaWZyYW1lKTsKKyAgICAgICAgdGhpcy5pZnJhbWUgPSBudWxsOworICAg
ICAgfQorCisgICAgICAvLyBTb21lIGVudmlyb25tZW50cyB3aWxsIHRocm93IHdoZW4gY2xlYXJp
bmcgYW4gdW5kZWZpbmVkIGludGVydmFsLgorICAgICAgaWYgKHRoaXMuX2NoZWNrVXJsSW50ZXJ2
YWwpIGNsZWFySW50ZXJ2YWwodGhpcy5fY2hlY2tVcmxJbnRlcnZhbCk7CisgICAgICBIaXN0b3J5
LnN0YXJ0ZWQgPSBmYWxzZTsKKyAgICB9LAorCisgICAgLy8gQWRkIGEgcm91dGUgdG8gYmUgdGVz
dGVkIHdoZW4gdGhlIGZyYWdtZW50IGNoYW5nZXMuIFJvdXRlcyBhZGRlZCBsYXRlcgorICAgIC8v
IG1heSBvdmVycmlkZSBwcmV2aW91cyByb3V0ZXMuCisgICAgcm91dGU6IGZ1bmN0aW9uKHJvdXRl
LCBjYWxsYmFjaykgeworICAgICAgdGhpcy5oYW5kbGVycy51bnNoaWZ0KHtyb3V0ZTogcm91dGUs
IGNhbGxiYWNrOiBjYWxsYmFja30pOworICAgIH0sCisKKyAgICAvLyBDaGVja3MgdGhlIGN1cnJl
bnQgVVJMIHRvIHNlZSBpZiBpdCBoYXMgY2hhbmdlZCwgYW5kIGlmIGl0IGhhcywKKyAgICAvLyBj
YWxscyBgbG9hZFVybGAsIG5vcm1hbGl6aW5nIGFjcm9zcyB0aGUgaGlkZGVuIGlmcmFtZS4KKyAg
ICBjaGVja1VybDogZnVuY3Rpb24oZSkgeworICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmdldEZy
YWdtZW50KCk7CisKKyAgICAgIC8vIElmIHRoZSB1c2VyIHByZXNzZWQgdGhlIGJhY2sgYnV0dG9u
LCB0aGUgaWZyYW1lJ3MgaGFzaCB3aWxsIGhhdmUKKyAgICAgIC8vIGNoYW5nZWQgYW5kIHdlIHNo
b3VsZCB1c2UgdGhhdCBmb3IgY29tcGFyaXNvbi4KKyAgICAgIGlmIChjdXJyZW50ID09PSB0aGlz
LmZyYWdtZW50ICYmIHRoaXMuaWZyYW1lKSB7CisgICAgICAgIGN1cnJlbnQgPSB0aGlzLmdldEhh
c2godGhpcy5pZnJhbWUuY29udGVudFdpbmRvdyk7CisgICAgICB9CisKKyAgICAgIGlmIChjdXJy
ZW50ID09PSB0aGlzLmZyYWdtZW50KSByZXR1cm4gZmFsc2U7CisgICAgICBpZiAodGhpcy5pZnJh
bWUpIHRoaXMubmF2aWdhdGUoY3VycmVudCk7CisgICAgICB0aGlzLmxvYWRVcmwoKTsKKyAgICB9
LAorCisgICAgLy8gQXR0ZW1wdCB0byBsb2FkIHRoZSBjdXJyZW50IFVSTCBmcmFnbWVudC4gSWYg
YSByb3V0ZSBzdWNjZWVkcyB3aXRoIGEKKyAgICAvLyBtYXRjaCwgcmV0dXJucyBgdHJ1ZWAuIElm
IG5vIGRlZmluZWQgcm91dGVzIG1hdGNoZXMgdGhlIGZyYWdtZW50LAorICAgIC8vIHJldHVybnMg
YGZhbHNlYC4KKyAgICBsb2FkVXJsOiBmdW5jdGlvbihmcmFnbWVudCkgeworICAgICAgLy8gSWYg
dGhlIHJvb3QgZG9lc24ndCBtYXRjaCwgbm8gcm91dGVzIGNhbiBtYXRjaCBlaXRoZXIuCisgICAg
ICBpZiAoIXRoaXMubWF0Y2hSb290KCkpIHJldHVybiBmYWxzZTsKKyAgICAgIGZyYWdtZW50ID0g
dGhpcy5mcmFnbWVudCA9IHRoaXMuZ2V0RnJhZ21lbnQoZnJhZ21lbnQpOworICAgICAgcmV0dXJu
IF8uc29tZSh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbihoYW5kbGVyKSB7CisgICAgICAgIGlmICho
YW5kbGVyLnJvdXRlLnRlc3QoZnJhZ21lbnQpKSB7CisgICAgICAgICAgaGFuZGxlci5jYWxsYmFj
ayhmcmFnbWVudCk7CisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIH0p
OworICAgIH0sCisKKyAgICAvLyBTYXZlIGEgZnJhZ21lbnQgaW50byB0aGUgaGFzaCBoaXN0b3J5
LCBvciByZXBsYWNlIHRoZSBVUkwgc3RhdGUgaWYgdGhlCisgICAgLy8gJ3JlcGxhY2UnIG9wdGlv
biBpcyBwYXNzZWQuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIHByb3Blcmx5IFVSTC1lbmNvZGlu
ZworICAgIC8vIHRoZSBmcmFnbWVudCBpbiBhZHZhbmNlLgorICAgIC8vCisgICAgLy8gVGhlIG9w
dGlvbnMgb2JqZWN0IGNhbiBjb250YWluIGB0cmlnZ2VyOiB0cnVlYCBpZiB5b3Ugd2lzaCB0byBo
YXZlIHRoZQorICAgIC8vIHJvdXRlIGNhbGxiYWNrIGJlIGZpcmVkIChub3QgdXN1YWxseSBkZXNp
cmFibGUpLCBvciBgcmVwbGFjZTogdHJ1ZWAsIGlmCisgICAgLy8geW91IHdpc2ggdG8gbW9kaWZ5
IHRoZSBjdXJyZW50IFVSTCB3aXRob3V0IGFkZGluZyBhbiBlbnRyeSB0byB0aGUgaGlzdG9yeS4K
KyAgICBuYXZpZ2F0ZTogZnVuY3Rpb24oZnJhZ21lbnQsIG9wdGlvbnMpIHsKKyAgICAgIGlmICgh
SGlzdG9yeS5zdGFydGVkKSByZXR1cm4gZmFsc2U7CisgICAgICBpZiAoIW9wdGlvbnMgfHwgb3B0
aW9ucyA9PT0gdHJ1ZSkgb3B0aW9ucyA9IHt0cmlnZ2VyOiAhIW9wdGlvbnN9OworCisgICAgICAv
LyBOb3JtYWxpemUgdGhlIGZyYWdtZW50LgorICAgICAgZnJhZ21lbnQgPSB0aGlzLmdldEZyYWdt
ZW50KGZyYWdtZW50IHx8ICcnKTsKKworICAgICAgLy8gRG9uJ3QgaW5jbHVkZSBhIHRyYWlsaW5n
IHNsYXNoIG9uIHRoZSByb290LgorICAgICAgdmFyIHJvb3RQYXRoID0gdGhpcy5yb290OworICAg
ICAgaWYgKGZyYWdtZW50ID09PSAnJyB8fCBmcmFnbWVudC5jaGFyQXQoMCkgPT09ICc/Jykgewor
ICAgICAgICByb290UGF0aCA9IHJvb3RQYXRoLnNsaWNlKDAsIC0xKSB8fCAnLyc7CisgICAgICB9
CisgICAgICB2YXIgdXJsID0gcm9vdFBhdGggKyBmcmFnbWVudDsKKworICAgICAgLy8gU3RyaXAg
dGhlIGhhc2ggYW5kIGRlY29kZSBmb3IgbWF0Y2hpbmcuCisgICAgICBmcmFnbWVudCA9IHRoaXMu
ZGVjb2RlRnJhZ21lbnQoZnJhZ21lbnQucmVwbGFjZShwYXRoU3RyaXBwZXIsICcnKSk7CisKKyAg
ICAgIGlmICh0aGlzLmZyYWdtZW50ID09PSBmcmFnbWVudCkgcmV0dXJuOworICAgICAgdGhpcy5m
cmFnbWVudCA9IGZyYWdtZW50OworCisgICAgICAvLyBJZiBwdXNoU3RhdGUgaXMgYXZhaWxhYmxl
LCB3ZSB1c2UgaXQgdG8gc2V0IHRoZSBmcmFnbWVudCBhcyBhIHJlYWwgVVJMLgorICAgICAgaWYg
KHRoaXMuX3VzZVB1c2hTdGF0ZSkgeworICAgICAgICB0aGlzLmhpc3Rvcnlbb3B0aW9ucy5yZXBs
YWNlID8gJ3JlcGxhY2VTdGF0ZScgOiAncHVzaFN0YXRlJ10oe30sIGRvY3VtZW50LnRpdGxlLCB1
cmwpOworCisgICAgICAvLyBJZiBoYXNoIGNoYW5nZXMgaGF2ZW4ndCBiZWVuIGV4cGxpY2l0bHkg
ZGlzYWJsZWQsIHVwZGF0ZSB0aGUgaGFzaAorICAgICAgLy8gZnJhZ21lbnQgdG8gc3RvcmUgaGlz
dG9yeS4KKyAgICAgIH0gZWxzZSBpZiAodGhpcy5fd2FudHNIYXNoQ2hhbmdlKSB7CisgICAgICAg
IHRoaXMuX3VwZGF0ZUhhc2godGhpcy5sb2NhdGlvbiwgZnJhZ21lbnQsIG9wdGlvbnMucmVwbGFj
ZSk7CisgICAgICAgIGlmICh0aGlzLmlmcmFtZSAmJiBmcmFnbWVudCAhPT0gdGhpcy5nZXRIYXNo
KHRoaXMuaWZyYW1lLmNvbnRlbnRXaW5kb3cpKSB7CisgICAgICAgICAgdmFyIGlXaW5kb3cgPSB0
aGlzLmlmcmFtZS5jb250ZW50V2luZG93OworCisgICAgICAgICAgLy8gT3BlbmluZyBhbmQgY2xv
c2luZyB0aGUgaWZyYW1lIHRyaWNrcyBJRTcgYW5kIGVhcmxpZXIgdG8gcHVzaCBhCisgICAgICAg
ICAgLy8gaGlzdG9yeSBlbnRyeSBvbiBoYXNoLXRhZyBjaGFuZ2UuICBXaGVuIHJlcGxhY2UgaXMg
dHJ1ZSwgd2UgZG9uJ3QKKyAgICAgICAgICAvLyB3YW50IHRoaXMuCisgICAgICAgICAgaWYgKCFv
cHRpb25zLnJlcGxhY2UpIHsKKyAgICAgICAgICAgIGlXaW5kb3cuZG9jdW1lbnQub3BlbigpOwor
ICAgICAgICAgICAgaVdpbmRvdy5kb2N1bWVudC5jbG9zZSgpOworICAgICAgICAgIH0KKworICAg
ICAgICAgIHRoaXMuX3VwZGF0ZUhhc2goaVdpbmRvdy5sb2NhdGlvbiwgZnJhZ21lbnQsIG9wdGlv
bnMucmVwbGFjZSk7CisgICAgICAgIH0KKworICAgICAgLy8gSWYgeW91J3ZlIHRvbGQgdXMgdGhh
dCB5b3UgZXhwbGljaXRseSBkb24ndCB3YW50IGZhbGxiYWNrIGhhc2hjaGFuZ2UtCisgICAgICAv
LyBiYXNlZCBoaXN0b3J5LCB0aGVuIGBuYXZpZ2F0ZWAgYmVjb21lcyBhIHBhZ2UgcmVmcmVzaC4K
KyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiB0aGlzLmxvY2F0aW9uLmFzc2lnbih1cmwp
OworICAgICAgfQorICAgICAgaWYgKG9wdGlvbnMudHJpZ2dlcikgcmV0dXJuIHRoaXMubG9hZFVy
bChmcmFnbWVudCk7CisgICAgfSwKKworICAgIC8vIFVwZGF0ZSB0aGUgaGFzaCBsb2NhdGlvbiwg
ZWl0aGVyIHJlcGxhY2luZyB0aGUgY3VycmVudCBlbnRyeSwgb3IgYWRkaW5nCisgICAgLy8gYSBu
ZXcgb25lIHRvIHRoZSBicm93c2VyIGhpc3RvcnkuCisgICAgX3VwZGF0ZUhhc2g6IGZ1bmN0aW9u
KGxvY2F0aW9uLCBmcmFnbWVudCwgcmVwbGFjZSkgeworICAgICAgaWYgKHJlcGxhY2UpIHsKKyAg
ICAgICAgdmFyIGhyZWYgPSBsb2NhdGlvbi5ocmVmLnJlcGxhY2UoLyhqYXZhc2NyaXB0OnwjKS4q
JC8sICcnKTsKKyAgICAgICAgbG9jYXRpb24ucmVwbGFjZShocmVmICsgJyMnICsgZnJhZ21lbnQp
OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gU29tZSBicm93c2VycyByZXF1aXJlIHRoYXQg
YGhhc2hgIGNvbnRhaW5zIGEgbGVhZGluZyAjLgorICAgICAgICBsb2NhdGlvbi5oYXNoID0gJyMn
ICsgZnJhZ21lbnQ7CisgICAgICB9CisgICAgfQorCisgIH0pOworCisgIC8vIENyZWF0ZSB0aGUg
ZGVmYXVsdCBCYWNrYm9uZS5oaXN0b3J5LgorICBCYWNrYm9uZS5oaXN0b3J5ID0gbmV3IEhpc3Rv
cnk7CisKKyAgLy8gSGVscGVycworICAvLyAtLS0tLS0tCisKKyAgLy8gSGVscGVyIGZ1bmN0aW9u
IHRvIGNvcnJlY3RseSBzZXQgdXAgdGhlIHByb3RvdHlwZSBjaGFpbiBmb3Igc3ViY2xhc3Nlcy4K
KyAgLy8gU2ltaWxhciB0byBgZ29vZy5pbmhlcml0c2AsIGJ1dCB1c2VzIGEgaGFzaCBvZiBwcm90
b3R5cGUgcHJvcGVydGllcyBhbmQKKyAgLy8gY2xhc3MgcHJvcGVydGllcyB0byBiZSBleHRlbmRl
ZC4KKyAgdmFyIGV4dGVuZCA9IGZ1bmN0aW9uKHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7Cisg
ICAgdmFyIHBhcmVudCA9IHRoaXM7CisgICAgdmFyIGNoaWxkOworCisgICAgLy8gVGhlIGNvbnN0
cnVjdG9yIGZ1bmN0aW9uIGZvciB0aGUgbmV3IHN1YmNsYXNzIGlzIGVpdGhlciBkZWZpbmVkIGJ5
IHlvdQorICAgIC8vICh0aGUgImNvbnN0cnVjdG9yIiBwcm9wZXJ0eSBpbiB5b3VyIGBleHRlbmRg
IGRlZmluaXRpb24pLCBvciBkZWZhdWx0ZWQKKyAgICAvLyBieSB1cyB0byBzaW1wbHkgY2FsbCB0
aGUgcGFyZW50IGNvbnN0cnVjdG9yLgorICAgIGlmIChwcm90b1Byb3BzICYmIF8uaGFzKHByb3Rv
UHJvcHMsICdjb25zdHJ1Y3RvcicpKSB7CisgICAgICBjaGlsZCA9IHByb3RvUHJvcHMuY29uc3Ry
dWN0b3I7CisgICAgfSBlbHNlIHsKKyAgICAgIGNoaWxkID0gZnVuY3Rpb24oKXsgcmV0dXJuIHBh
cmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9OworICAgIH0KKworICAgIC8vIEFkZCBzdGF0
aWMgcHJvcGVydGllcyB0byB0aGUgY29uc3RydWN0b3IgZnVuY3Rpb24sIGlmIHN1cHBsaWVkLgor
ICAgIF8uZXh0ZW5kKGNoaWxkLCBwYXJlbnQsIHN0YXRpY1Byb3BzKTsKKworICAgIC8vIFNldCB0
aGUgcHJvdG90eXBlIGNoYWluIHRvIGluaGVyaXQgZnJvbSBgcGFyZW50YCwgd2l0aG91dCBjYWxs
aW5nCisgICAgLy8gYHBhcmVudGAncyBjb25zdHJ1Y3RvciBmdW5jdGlvbiBhbmQgYWRkIHRoZSBw
cm90b3R5cGUgcHJvcGVydGllcy4KKyAgICBjaGlsZC5wcm90b3R5cGUgPSBfLmNyZWF0ZShwYXJl
bnQucHJvdG90eXBlLCBwcm90b1Byb3BzKTsKKyAgICBjaGlsZC5wcm90b3R5cGUuY29uc3RydWN0
b3IgPSBjaGlsZDsKKworICAgIC8vIFNldCBhIGNvbnZlbmllbmNlIHByb3BlcnR5IGluIGNhc2Ug
dGhlIHBhcmVudCdzIHByb3RvdHlwZSBpcyBuZWVkZWQKKyAgICAvLyBsYXRlci4KKyAgICBjaGls
ZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOworCisgICAgcmV0dXJuIGNoaWxkOworICB9
OworCisgIC8vIFNldCB1cCBpbmhlcml0YW5jZSBmb3IgdGhlIG1vZGVsLCBjb2xsZWN0aW9uLCBy
b3V0ZXIsIHZpZXcgYW5kIGhpc3RvcnkuCisgIE1vZGVsLmV4dGVuZCA9IENvbGxlY3Rpb24uZXh0
ZW5kID0gUm91dGVyLmV4dGVuZCA9IFZpZXcuZXh0ZW5kID0gSGlzdG9yeS5leHRlbmQgPSBleHRl
bmQ7CisKKyAgLy8gVGhyb3cgYW4gZXJyb3Igd2hlbiBhIFVSTCBpcyBuZWVkZWQsIGFuZCBub25l
IGlzIHN1cHBsaWVkLgorICB2YXIgdXJsRXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICB0aHJvdyBu
ZXcgRXJyb3IoJ0EgInVybCIgcHJvcGVydHkgb3IgZnVuY3Rpb24gbXVzdCBiZSBzcGVjaWZpZWQn
KTsKKyAgfTsKKworICAvLyBXcmFwIGFuIG9wdGlvbmFsIGVycm9yIGNhbGxiYWNrIHdpdGggYSBm
YWxsYmFjayBlcnJvciBldmVudC4KKyAgdmFyIHdyYXBFcnJvciA9IGZ1bmN0aW9uKG1vZGVsLCBv
cHRpb25zKSB7CisgICAgdmFyIGVycm9yID0gb3B0aW9ucy5lcnJvcjsKKyAgICBvcHRpb25zLmVy
cm9yID0gZnVuY3Rpb24ocmVzcCkgeworICAgICAgaWYgKGVycm9yKSBlcnJvci5jYWxsKG9wdGlv
bnMuY29udGV4dCwgbW9kZWwsIHJlc3AsIG9wdGlvbnMpOworICAgICAgbW9kZWwudHJpZ2dlcign
ZXJyb3InLCBtb2RlbCwgcmVzcCwgb3B0aW9ucyk7CisgICAgfTsKKyAgfTsKKworICByZXR1cm4g
QmFja2JvbmU7Cit9KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL25vZGVfbW9k
dWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9ub2RlX21v
ZHVsZXMvanF1ZXJ5L2Rpc3QvanF1ZXJ5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUxYWVhMjkzYTMzZmE0YjJi
ODdmYWJiNDA2MGU3NjI2ZGMyYTQ4OTEKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9i
YWNrYm9uZS9ub2RlX21vZHVsZXMvanF1ZXJ5L2Rpc3QvanF1ZXJ5LmpzCkBAIC0wLDAgKzEsMTAy
MjAgQEAKKy8qIQorICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2My4xLjEKKyAqIGh0dHBz
Oi8vanF1ZXJ5LmNvbS8KKyAqCisgKiBJbmNsdWRlcyBTaXp6bGUuanMKKyAqIGh0dHBzOi8vc2l6
emxlanMuY29tLworICoKKyAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIg
Y29udHJpYnV0b3JzCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UKKyAqIGh0dHBz
Oi8vanF1ZXJ5Lm9yZy9saWNlbnNlCisgKgorICogRGF0ZTogMjAxNi0wOS0yMlQyMjozMFoKKyAq
LworKCBmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkgeworCisgICAgInVzZSBzdHJpY3QiOwor
CisgICAgaWYgKCB0eXBlb2YgbW9kdWxlID09PSAib2JqZWN0IiAmJiB0eXBlb2YgbW9kdWxlLmV4
cG9ydHMgPT09ICJvYmplY3QiICkgeworCisgICAgICAgIC8vIEZvciBDb21tb25KUyBhbmQgQ29t
bW9uSlMtbGlrZSBlbnZpcm9ubWVudHMgd2hlcmUgYSBwcm9wZXIgYHdpbmRvd2AKKyAgICAgICAg
Ly8gaXMgcHJlc2VudCwgZXhlY3V0ZSB0aGUgZmFjdG9yeSBhbmQgZ2V0IGpRdWVyeS4KKyAgICAg
ICAgLy8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBoYXZlIGEgYHdpbmRvd2Agd2l0aCBh
IGBkb2N1bWVudGAKKyAgICAgICAgLy8gKHN1Y2ggYXMgTm9kZS5qcyksIGV4cG9zZSBhIGZhY3Rv
cnkgYXMgbW9kdWxlLmV4cG9ydHMuCisgICAgICAgIC8vIFRoaXMgYWNjZW50dWF0ZXMgdGhlIG5l
ZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJlYWwgYHdpbmRvd2AuCisgICAgICAgIC8vIGUuZy4g
dmFyIGpRdWVyeSA9IHJlcXVpcmUoImpxdWVyeSIpKHdpbmRvdyk7CisgICAgICAgIC8vIFNlZSB0
aWNrZXQgIzE0NTQ5IGZvciBtb3JlIGluZm8uCisgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZ2xv
YmFsLmRvY3VtZW50ID8KKyAgICAgICAgICAgIGZhY3RvcnkoIGdsb2JhbCwgdHJ1ZSApIDoKKyAg
ICAgICAgICAgIGZ1bmN0aW9uKCB3ICkgeworICAgICAgICAgICAgICAgIGlmICggIXcuZG9jdW1l
bnQgKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvciggImpRdWVyeSByZXF1
aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnQiICk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWN0b3J5KCB3ICk7CisgICAgICAgICAgICB9OworICAgIH0g
ZWxzZSB7CisgICAgICAgIGZhY3RvcnkoIGdsb2JhbCApOworICAgIH0KKworLy8gUGFzcyB0aGlz
IGlmIHdpbmRvdyBpcyBub3QgZGVmaW5lZCB5ZXQKK30gKSggdHlwZW9mIHdpbmRvdyAhPT0gInVu
ZGVmaW5lZCIgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHsK
KworLy8gRWRnZSA8PSAxMiAtIDEzKywgRmlyZWZveCA8PTE4IC0gNDUrLCBJRSAxMCAtIDExLCBT
YWZhcmkgNS4xIC0gOSssIGlPUyA2IC0gOS4xCisvLyB0aHJvdyBleGNlcHRpb25zIHdoZW4gbm9u
LXN0cmljdCBjb2RlIChlLmcuLCBBU1AuTkVUIDQuNSkgYWNjZXNzZXMgc3RyaWN0IG1vZGUKKy8v
IGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyICh0cmFjLTEzMzM1KS4gQnV0IGFzIG9mIGpRdWVyeSAz
LjAgKDIwMTYpLCBzdHJpY3QgbW9kZSBzaG91bGQgYmUgY29tbW9uCisvLyBlbm91Z2ggdGhhdCBh
bGwgc3VjaCBhdHRlbXB0cyBhcmUgZ3VhcmRlZCBpbiBhIHRyeSBibG9jay4KKyJ1c2Ugc3RyaWN0
IjsKKwordmFyIGFyciA9IFtdOworCit2YXIgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7CisK
K3ZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjsKKwordmFyIHNsaWNlID0gYXJy
LnNsaWNlOworCit2YXIgY29uY2F0ID0gYXJyLmNvbmNhdDsKKwordmFyIHB1c2ggPSBhcnIucHVz
aDsKKwordmFyIGluZGV4T2YgPSBhcnIuaW5kZXhPZjsKKwordmFyIGNsYXNzMnR5cGUgPSB7fTsK
KwordmFyIHRvU3RyaW5nID0gY2xhc3MydHlwZS50b1N0cmluZzsKKwordmFyIGhhc093biA9IGNs
YXNzMnR5cGUuaGFzT3duUHJvcGVydHk7CisKK3ZhciBmblRvU3RyaW5nID0gaGFzT3duLnRvU3Ry
aW5nOworCit2YXIgT2JqZWN0RnVuY3Rpb25TdHJpbmcgPSBmblRvU3RyaW5nLmNhbGwoIE9iamVj
dCApOworCit2YXIgc3VwcG9ydCA9IHt9OworCisKKworICAgIGZ1bmN0aW9uIERPTUV2YWwoIGNv
ZGUsIGRvYyApIHsKKyAgICAgICAgZG9jID0gZG9jIHx8IGRvY3VtZW50OworCisgICAgICAgIHZh
ciBzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudCggInNjcmlwdCIgKTsKKworICAgICAgICBzY3Jp
cHQudGV4dCA9IGNvZGU7CisgICAgICAgIGRvYy5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHQgKS5w
YXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTsKKyAgICB9CisvKiBnbG9iYWwgU3ltYm9s
ICovCisvLyBEZWZpbmluZyB0aGlzIGdsb2JhbCBpbiAuZXNsaW50cmMuanNvbiB3b3VsZCBjcmVh
dGUgYSBkYW5nZXIgb2YgdXNpbmcgdGhlIGdsb2JhbAorLy8gdW5ndWFyZGVkIGluIGFub3RoZXIg
cGxhY2UsIGl0IHNlZW1zIHNhZmVyIHRvIGRlZmluZSBnbG9iYWwgb25seSBmb3IgdGhpcyBtb2R1
bGUKKworCisKK3ZhcgorICAgIHZlcnNpb24gPSAiMy4xLjEiLAorCisgICAgLy8gRGVmaW5lIGEg
bG9jYWwgY29weSBvZiBqUXVlcnkKKyAgICBqUXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNv
bnRleHQgKSB7CisKKyAgICAgICAgLy8gVGhlIGpRdWVyeSBvYmplY3QgaXMgYWN0dWFsbHkganVz
dCB0aGUgaW5pdCBjb25zdHJ1Y3RvciAnZW5oYW5jZWQnCisgICAgICAgIC8vIE5lZWQgaW5pdCBp
ZiBqUXVlcnkgaXMgY2FsbGVkIChqdXN0IGFsbG93IGVycm9yIHRvIGJlIHRocm93biBpZiBub3Qg
aW5jbHVkZWQpCisgICAgICAgIHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBj
b250ZXh0ICk7CisgICAgfSwKKworICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seQor
ICAgIC8vIE1ha2Ugc3VyZSB3ZSB0cmltIEJPTSBhbmQgTkJTUAorICAgIHJ0cmltID0gL15bXHNc
dUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLAorCisgICAgLy8gTWF0Y2hlcyBkYXNoZWQg
c3RyaW5nIGZvciBjYW1lbGl6aW5nCisgICAgcm1zUHJlZml4ID0gL14tbXMtLywKKyAgICByZGFz
aEFscGhhID0gLy0oW2Etel0pL2csCisKKyAgICAvLyBVc2VkIGJ5IGpRdWVyeS5jYW1lbENhc2Ug
YXMgY2FsbGJhY2sgdG8gcmVwbGFjZSgpCisgICAgZmNhbWVsQ2FzZSA9IGZ1bmN0aW9uKCBhbGws
IGxldHRlciApIHsKKyAgICAgICAgcmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpOworICAgIH07
CisKK2pRdWVyeS5mbiA9IGpRdWVyeS5wcm90b3R5cGUgPSB7CisKKyAgICAvLyBUaGUgY3VycmVu
dCB2ZXJzaW9uIG9mIGpRdWVyeSBiZWluZyB1c2VkCisgICAganF1ZXJ5OiB2ZXJzaW9uLAorCisg
ICAgY29uc3RydWN0b3I6IGpRdWVyeSwKKworICAgIC8vIFRoZSBkZWZhdWx0IGxlbmd0aCBvZiBh
IGpRdWVyeSBvYmplY3QgaXMgMAorICAgIGxlbmd0aDogMCwKKworICAgIHRvQXJyYXk6IGZ1bmN0
aW9uKCkgeworICAgICAgICByZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApOworICAgIH0sCisKKyAg
ICAvLyBHZXQgdGhlIE50aCBlbGVtZW50IGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0IE9SCisg
ICAgLy8gR2V0IHRoZSB3aG9sZSBtYXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4gYXJyYXkK
KyAgICBnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7CisKKyAgICAgICAgLy8gUmV0dXJuIGFsbCB0aGUg
ZWxlbWVudHMgaW4gYSBjbGVhbiBhcnJheQorICAgICAgICBpZiAoIG51bSA9PSBudWxsICkgewor
ICAgICAgICAgICAgcmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIFJldHVybiBqdXN0IHRoZSBvbmUgZWxlbWVudCBmcm9tIHRoZSBzZXQKKyAgICAgICAg
cmV0dXJuIG51bSA8IDAgPyB0aGlzWyBudW0gKyB0aGlzLmxlbmd0aCBdIDogdGhpc1sgbnVtIF07
CisgICAgfSwKKworICAgIC8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVudHMgYW5kIHB1c2ggaXQg
b250byB0aGUgc3RhY2sKKyAgICAvLyAocmV0dXJuaW5nIHRoZSBuZXcgbWF0Y2hlZCBlbGVtZW50
IHNldCkKKyAgICBwdXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVtcyApIHsKKworICAgICAgICAvLyBC
dWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldAorICAgICAgICB2YXIgcmV0ID0g
alF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7CisKKyAgICAgICAgLy8g
QWRkIHRoZSBvbGQgb2JqZWN0IG9udG8gdGhlIHN0YWNrIChhcyBhIHJlZmVyZW5jZSkKKyAgICAg
ICAgcmV0LnByZXZPYmplY3QgPSB0aGlzOworCisgICAgICAgIC8vIFJldHVybiB0aGUgbmV3bHkt
Zm9ybWVkIGVsZW1lbnQgc2V0CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfSwKKworICAgIC8v
IEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZXZlcnkgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQu
CisgICAgZWFjaDogZnVuY3Rpb24oIGNhbGxiYWNrICkgeworICAgICAgICByZXR1cm4galF1ZXJ5
LmVhY2goIHRoaXMsIGNhbGxiYWNrICk7CisgICAgfSwKKworICAgIG1hcDogZnVuY3Rpb24oIGNh
bGxiYWNrICkgeworICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tYXAoIHRo
aXMsIGZ1bmN0aW9uKCBlbGVtLCBpICkgeworICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmNh
bGwoIGVsZW0sIGksIGVsZW0gKTsKKyAgICAgICAgfSApICk7CisgICAgfSwKKworICAgIHNsaWNl
OiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBzbGljZS5hcHBs
eSggdGhpcywgYXJndW1lbnRzICkgKTsKKyAgICB9LAorCisgICAgZmlyc3Q6IGZ1bmN0aW9uKCkg
eworICAgICAgICByZXR1cm4gdGhpcy5lcSggMCApOworICAgIH0sCisKKyAgICBsYXN0OiBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZXEoIC0xICk7CisgICAgfSwKKworICAgIGVx
OiBmdW5jdGlvbiggaSApIHsKKyAgICAgICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoLAorICAgICAg
ICAgICAgaiA9ICtpICsgKCBpIDwgMCA/IGxlbiA6IDAgKTsKKyAgICAgICAgcmV0dXJuIHRoaXMu
cHVzaFN0YWNrKCBqID49IDAgJiYgaiA8IGxlbiA/IFsgdGhpc1sgaiBdIF0gOiBbXSApOworICAg
IH0sCisKKyAgICBlbmQ6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5wcmV2T2Jq
ZWN0IHx8IHRoaXMuY29uc3RydWN0b3IoKTsKKyAgICB9LAorCisgICAgLy8gRm9yIGludGVybmFs
IHVzZSBvbmx5LgorICAgIC8vIEJlaGF2ZXMgbGlrZSBhbiBBcnJheSdzIG1ldGhvZCwgbm90IGxp
a2UgYSBqUXVlcnkgbWV0aG9kLgorICAgIHB1c2g6IHB1c2gsCisgICAgc29ydDogYXJyLnNvcnQs
CisgICAgc3BsaWNlOiBhcnIuc3BsaWNlCit9OworCitqUXVlcnkuZXh0ZW5kID0galF1ZXJ5LmZu
LmV4dGVuZCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHks
IGNvcHlJc0FycmF5LCBjbG9uZSwKKyAgICAgICAgdGFyZ2V0ID0gYXJndW1lbnRzWyAwIF0gfHwg
e30sCisgICAgICAgIGkgPSAxLAorICAgICAgICBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLAor
ICAgICAgICBkZWVwID0gZmFsc2U7CisKKyAgICAvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0
aW9uCisgICAgaWYgKCB0eXBlb2YgdGFyZ2V0ID09PSAiYm9vbGVhbiIgKSB7CisgICAgICAgIGRl
ZXAgPSB0YXJnZXQ7CisKKyAgICAgICAgLy8gU2tpcCB0aGUgYm9vbGVhbiBhbmQgdGhlIHRhcmdl
dAorICAgICAgICB0YXJnZXQgPSBhcmd1bWVudHNbIGkgXSB8fCB7fTsKKyAgICAgICAgaSsrOwor
ICAgIH0KKworICAgIC8vIEhhbmRsZSBjYXNlIHdoZW4gdGFyZ2V0IGlzIGEgc3RyaW5nIG9yIHNv
bWV0aGluZyAocG9zc2libGUgaW4gZGVlcCBjb3B5KQorICAgIGlmICggdHlwZW9mIHRhcmdldCAh
PT0gIm9iamVjdCIgJiYgIWpRdWVyeS5pc0Z1bmN0aW9uKCB0YXJnZXQgKSApIHsKKyAgICAgICAg
dGFyZ2V0ID0ge307CisgICAgfQorCisgICAgLy8gRXh0ZW5kIGpRdWVyeSBpdHNlbGYgaWYgb25s
eSBvbmUgYXJndW1lbnQgaXMgcGFzc2VkCisgICAgaWYgKCBpID09PSBsZW5ndGggKSB7CisgICAg
ICAgIHRhcmdldCA9IHRoaXM7CisgICAgICAgIGktLTsKKyAgICB9CisKKyAgICBmb3IgKCA7IGkg
PCBsZW5ndGg7IGkrKyApIHsKKworICAgICAgICAvLyBPbmx5IGRlYWwgd2l0aCBub24tbnVsbC91
bmRlZmluZWQgdmFsdWVzCisgICAgICAgIGlmICggKCBvcHRpb25zID0gYXJndW1lbnRzWyBpIF0g
KSAhPSBudWxsICkgeworCisgICAgICAgICAgICAvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0Cisg
ICAgICAgICAgICBmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7CisgICAgICAgICAgICAgICAgc3Jj
ID0gdGFyZ2V0WyBuYW1lIF07CisgICAgICAgICAgICAgICAgY29weSA9IG9wdGlvbnNbIG5hbWUg
XTsKKworICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3AKKyAgICAg
ICAgICAgICAgICBpZiAoIHRhcmdldCA9PT0gY29weSApIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gUmVjdXJz
ZSBpZiB3ZSdyZSBtZXJnaW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzCisgICAgICAgICAgICAg
ICAgaWYgKCBkZWVwICYmIGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29weSApIHx8
CisgICAgICAgICAgICAgICAgICAgICggY29weUlzQXJyYXkgPSBqUXVlcnkuaXNBcnJheSggY29w
eSApICkgKSApIHsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIGNvcHlJc0FycmF5ICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgY29weUlzQXJyYXkgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNsb25lID0gc3JjICYmIGpRdWVyeS5pc0FycmF5KCBzcmMgKSA/IHNyYyA6
IFtdOworCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjbG9uZSA9IHNyYyAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCggc3JjICkgPyBzcmMgOiB7
fTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIE5ldmVy
IG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbQorICAgICAgICAgICAgICAgICAgICB0
YXJnZXRbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIGNsb25lLCBjb3B5ICk7CisKKyAg
ICAgICAgICAgICAgICAvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzCisgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICggY29weSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAg
ICAgICAgICB0YXJnZXRbIG5hbWUgXSA9IGNvcHk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmV0dXJuIHRoZSBtb2RpZmllZCBv
YmplY3QKKyAgICByZXR1cm4gdGFyZ2V0OworfTsKKworalF1ZXJ5LmV4dGVuZCggeworCisgICAg
Ly8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRoZSBwYWdlCisgICAgZXhwYW5k
bzogImpRdWVyeSIgKyAoIHZlcnNpb24gKyBNYXRoLnJhbmRvbSgpICkucmVwbGFjZSggL1xEL2cs
ICIiICksCisKKyAgICAvLyBBc3N1bWUgalF1ZXJ5IGlzIHJlYWR5IHdpdGhvdXQgdGhlIHJlYWR5
IG1vZHVsZQorICAgIGlzUmVhZHk6IHRydWUsCisKKyAgICBlcnJvcjogZnVuY3Rpb24oIG1zZyAp
IHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCBtc2cgKTsKKyAgICB9LAorCisgICAgbm9vcDog
ZnVuY3Rpb24oKSB7fSwKKworICAgIGlzRnVuY3Rpb246IGZ1bmN0aW9uKCBvYmogKSB7CisgICAg
ICAgIHJldHVybiBqUXVlcnkudHlwZSggb2JqICkgPT09ICJmdW5jdGlvbiI7CisgICAgfSwKKwor
ICAgIGlzQXJyYXk6IEFycmF5LmlzQXJyYXksCisKKyAgICBpc1dpbmRvdzogZnVuY3Rpb24oIG9i
aiApIHsKKyAgICAgICAgcmV0dXJuIG9iaiAhPSBudWxsICYmIG9iaiA9PT0gb2JqLndpbmRvdzsK
KyAgICB9LAorCisgICAgaXNOdW1lcmljOiBmdW5jdGlvbiggb2JqICkgeworCisgICAgICAgIC8v
IEFzIG9mIGpRdWVyeSAzLjAsIGlzTnVtZXJpYyBpcyBsaW1pdGVkIHRvCisgICAgICAgIC8vIHN0
cmluZ3MgYW5kIG51bWJlcnMgKHByaW1pdGl2ZXMgb3Igb2JqZWN0cykKKyAgICAgICAgLy8gdGhh
dCBjYW4gYmUgY29lcmNlZCB0byBmaW5pdGUgbnVtYmVycyAoZ2gtMjY2MikKKyAgICAgICAgdmFy
IHR5cGUgPSBqUXVlcnkudHlwZSggb2JqICk7CisgICAgICAgIHJldHVybiAoIHR5cGUgPT09ICJu
dW1iZXIiIHx8IHR5cGUgPT09ICJzdHJpbmciICkgJiYKKworICAgICAgICAgICAgLy8gcGFyc2VG
bG9hdCBOYU5zIG51bWVyaWMtY2FzdCBmYWxzZSBwb3NpdGl2ZXMgKCIiKQorICAgICAgICAgICAg
Ly8gLi4uYnV0IG1pc2ludGVycHJldHMgbGVhZGluZy1udW1iZXIgc3RyaW5ncywgcGFydGljdWxh
cmx5IGhleCBsaXRlcmFscyAoIjB4Li4uIikKKyAgICAgICAgICAgIC8vIHN1YnRyYWN0aW9uIGZv
cmNlcyBpbmZpbml0aWVzIHRvIE5hTgorICAgICAgICAgICAgIWlzTmFOKCBvYmogLSBwYXJzZUZs
b2F0KCBvYmogKSApOworICAgIH0sCisKKyAgICBpc1BsYWluT2JqZWN0OiBmdW5jdGlvbiggb2Jq
ICkgeworICAgICAgICB2YXIgcHJvdG8sIEN0b3I7CisKKyAgICAgICAgLy8gRGV0ZWN0IG9idmlv
dXMgbmVnYXRpdmVzCisgICAgICAgIC8vIFVzZSB0b1N0cmluZyBpbnN0ZWFkIG9mIGpRdWVyeS50
eXBlIHRvIGNhdGNoIGhvc3Qgb2JqZWN0cworICAgICAgICBpZiAoICFvYmogfHwgdG9TdHJpbmcu
Y2FsbCggb2JqICkgIT09ICJbb2JqZWN0IE9iamVjdF0iICkgeworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcHJvdG8gPSBnZXRQcm90byggb2JqICk7CisK
KyAgICAgICAgLy8gT2JqZWN0cyB3aXRoIG5vIHByb3RvdHlwZSAoZS5nLiwgYE9iamVjdC5jcmVh
dGUoIG51bGwgKWApIGFyZSBwbGFpbgorICAgICAgICBpZiAoICFwcm90byApIHsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gT2JqZWN0cyB3aXRoIHBy
b3RvdHlwZSBhcmUgcGxhaW4gaWZmIHRoZXkgd2VyZSBjb25zdHJ1Y3RlZCBieSBhIGdsb2JhbCBP
YmplY3QgZnVuY3Rpb24KKyAgICAgICAgQ3RvciA9IGhhc093bi5jYWxsKCBwcm90bywgImNvbnN0
cnVjdG9yIiApICYmIHByb3RvLmNvbnN0cnVjdG9yOworICAgICAgICByZXR1cm4gdHlwZW9mIEN0
b3IgPT09ICJmdW5jdGlvbiIgJiYgZm5Ub1N0cmluZy5jYWxsKCBDdG9yICkgPT09IE9iamVjdEZ1
bmN0aW9uU3RyaW5nOworICAgIH0sCisKKyAgICBpc0VtcHR5T2JqZWN0OiBmdW5jdGlvbiggb2Jq
ICkgeworCisgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovCisgICAg
ICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZXNsaW50L2VzbGludC9pc3N1ZXMvNjEyNQor
ICAgICAgICB2YXIgbmFtZTsKKworICAgICAgICBmb3IgKCBuYW1lIGluIG9iaiApIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9LAorCisgICAgdHlwZTogZnVuY3Rpb24oIG9iaiApIHsKKyAgICAgICAgaWYgKCBvYmogPT0g
bnVsbCApIHsKKyAgICAgICAgICAgIHJldHVybiBvYmogKyAiIjsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25seSAoZnVuY3Rpb25pc2ggUmVnRXhwKQor
ICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIG9iaiA9PT0g
ImZ1bmN0aW9uIiA/CisgICAgICAgICAgICBjbGFzczJ0eXBlWyB0b1N0cmluZy5jYWxsKCBvYmog
KSBdIHx8ICJvYmplY3QiIDoKKyAgICAgICAgICAgIHR5cGVvZiBvYmo7CisgICAgfSwKKworICAg
IC8vIEV2YWx1YXRlcyBhIHNjcmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0CisgICAgZ2xvYmFsRXZh
bDogZnVuY3Rpb24oIGNvZGUgKSB7CisgICAgICAgIERPTUV2YWwoIGNvZGUgKTsKKyAgICB9LAor
CisgICAgLy8gQ29udmVydCBkYXNoZWQgdG8gY2FtZWxDYXNlOyB1c2VkIGJ5IHRoZSBjc3MgYW5k
IGRhdGEgbW9kdWxlcworICAgIC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExLCBFZGdlIDEyIC0gMTMK
KyAgICAvLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAoIzk1
NzIpCisgICAgY2FtZWxDYXNlOiBmdW5jdGlvbiggc3RyaW5nICkgeworICAgICAgICByZXR1cm4g
c3RyaW5nLnJlcGxhY2UoIHJtc1ByZWZpeCwgIm1zLSIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBm
Y2FtZWxDYXNlICk7CisgICAgfSwKKworICAgIG5vZGVOYW1lOiBmdW5jdGlvbiggZWxlbSwgbmFt
ZSApIHsKKyAgICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xv
d2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgfSwKKworICAgIGVhY2g6IGZ1
bmN0aW9uKCBvYmosIGNhbGxiYWNrICkgeworICAgICAgICB2YXIgbGVuZ3RoLCBpID0gMDsKKwor
ICAgICAgICBpZiAoIGlzQXJyYXlMaWtlKCBvYmogKSApIHsKKyAgICAgICAgICAgIGxlbmd0aCA9
IG9iai5sZW5ndGg7CisgICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSAp
ID09PSBmYWxzZSApIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yICgg
aSBpbiBvYmogKSB7CisgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkg
XSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBvYmo7CisgICAgfSwKKworICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25s
eQorICAgIHRyaW06IGZ1bmN0aW9uKCB0ZXh0ICkgeworICAgICAgICByZXR1cm4gdGV4dCA9PSBu
dWxsID8KKyAgICAgICAgICAgICIiIDoKKyAgICAgICAgICAgICggdGV4dCArICIiICkucmVwbGFj
ZSggcnRyaW0sICIiICk7CisgICAgfSwKKworICAgIC8vIHJlc3VsdHMgaXMgZm9yIGludGVybmFs
IHVzYWdlIG9ubHkKKyAgICBtYWtlQXJyYXk6IGZ1bmN0aW9uKCBhcnIsIHJlc3VsdHMgKSB7Cisg
ICAgICAgIHZhciByZXQgPSByZXN1bHRzIHx8IFtdOworCisgICAgICAgIGlmICggYXJyICE9IG51
bGwgKSB7CisgICAgICAgICAgICBpZiAoIGlzQXJyYXlMaWtlKCBPYmplY3QoIGFyciApICkgKSB7
CisgICAgICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCByZXQsCisgICAgICAgICAgICAgICAgICAg
IHR5cGVvZiBhcnIgPT09ICJzdHJpbmciID8KKyAgICAgICAgICAgICAgICAgICAgWyBhcnIgXSA6
IGFycgorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHB1c2guY2FsbCggcmV0LCBhcnIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfSwKKworICAgIGluQXJyYXk6IGZ1bmN0aW9uKCBl
bGVtLCBhcnIsIGkgKSB7CisgICAgICAgIHJldHVybiBhcnIgPT0gbnVsbCA/IC0xIDogaW5kZXhP
Zi5jYWxsKCBhcnIsIGVsZW0sIGkgKTsKKyAgICB9LAorCisgICAgLy8gU3VwcG9ydDogQW5kcm9p
ZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5CisgICAgLy8gcHVzaC5hcHBseShfLCBhcnJh
eWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdAorICAgIG1lcmdlOiBmdW5jdGlvbiggZmly
c3QsIHNlY29uZCApIHsKKyAgICAgICAgdmFyIGxlbiA9ICtzZWNvbmQubGVuZ3RoLAorICAgICAg
ICAgICAgaiA9IDAsCisgICAgICAgICAgICBpID0gZmlyc3QubGVuZ3RoOworCisgICAgICAgIGZv
ciAoIDsgaiA8IGxlbjsgaisrICkgeworICAgICAgICAgICAgZmlyc3RbIGkrKyBdID0gc2Vjb25k
WyBqIF07CisgICAgICAgIH0KKworICAgICAgICBmaXJzdC5sZW5ndGggPSBpOworCisgICAgICAg
IHJldHVybiBmaXJzdDsKKyAgICB9LAorCisgICAgZ3JlcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxs
YmFjaywgaW52ZXJ0ICkgeworICAgICAgICB2YXIgY2FsbGJhY2tJbnZlcnNlLAorICAgICAgICAg
ICAgbWF0Y2hlcyA9IFtdLAorICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICBsZW5ndGgg
PSBlbGVtcy5sZW5ndGgsCisgICAgICAgICAgICBjYWxsYmFja0V4cGVjdCA9ICFpbnZlcnQ7CisK
KyAgICAgICAgLy8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtcwor
ICAgICAgICAvLyB0aGF0IHBhc3MgdGhlIHZhbGlkYXRvciBmdW5jdGlvbgorICAgICAgICBmb3Ig
KCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKKyAgICAgICAgICAgIGNhbGxiYWNrSW52ZXJzZSA9ICFj
YWxsYmFjayggZWxlbXNbIGkgXSwgaSApOworICAgICAgICAgICAgaWYgKCBjYWxsYmFja0ludmVy
c2UgIT09IGNhbGxiYWNrRXhwZWN0ICkgeworICAgICAgICAgICAgICAgIG1hdGNoZXMucHVzaCgg
ZWxlbXNbIGkgXSApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IG1hdGNoZXM7CisgICAgfSwKKworICAgIC8vIGFyZyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25s
eQorICAgIG1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkgeworICAgICAgICB2
YXIgbGVuZ3RoLCB2YWx1ZSwKKyAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgcmV0ID0g
W107CisKKyAgICAgICAgLy8gR28gdGhyb3VnaCB0aGUgYXJyYXksIHRyYW5zbGF0aW5nIGVhY2gg
b2YgdGhlIGl0ZW1zIHRvIHRoZWlyIG5ldyB2YWx1ZXMKKyAgICAgICAgaWYgKCBpc0FycmF5TGlr
ZSggZWxlbXMgKSApIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IGVsZW1zLmxlbmd0aDsKKyAgICAg
ICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgeworICAgICAgICAgICAgICAgIHZhbHVl
ID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApOworCisgICAgICAgICAgICAgICAgaWYg
KCB2YWx1ZSAhPSBudWxsICkgeworICAgICAgICAgICAgICAgICAgICByZXQucHVzaCggdmFsdWUg
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgLy8gR28gdGhy
b3VnaCBldmVyeSBrZXkgb24gdGhlIG9iamVjdCwKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGZvciAoIGkgaW4gZWxlbXMgKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBjYWxsYmFj
ayggZWxlbXNbIGkgXSwgaSwgYXJnICk7CisKKyAgICAgICAgICAgICAgICBpZiAoIHZhbHVlICE9
IG51bGwgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKCB2YWx1ZSApOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEZsYXR0
ZW4gYW55IG5lc3RlZCBhcnJheXMKKyAgICAgICAgcmV0dXJuIGNvbmNhdC5hcHBseSggW10sIHJl
dCApOworICAgIH0sCisKKyAgICAvLyBBIGdsb2JhbCBHVUlEIGNvdW50ZXIgZm9yIG9iamVjdHMK
KyAgICBndWlkOiAxLAorCisgICAgLy8gQmluZCBhIGZ1bmN0aW9uIHRvIGEgY29udGV4dCwgb3B0
aW9uYWxseSBwYXJ0aWFsbHkgYXBwbHlpbmcgYW55CisgICAgLy8gYXJndW1lbnRzLgorICAgIHBy
b3h5OiBmdW5jdGlvbiggZm4sIGNvbnRleHQgKSB7CisgICAgICAgIHZhciB0bXAsIGFyZ3MsIHBy
b3h5OworCisgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQgPT09ICJzdHJpbmciICkgeworICAg
ICAgICAgICAgdG1wID0gZm5bIGNvbnRleHQgXTsKKyAgICAgICAgICAgIGNvbnRleHQgPSBmbjsK
KyAgICAgICAgICAgIGZuID0gdG1wOworICAgICAgICB9CisKKyAgICAgICAgLy8gUXVpY2sgY2hl
Y2sgdG8gZGV0ZXJtaW5lIGlmIHRhcmdldCBpcyBjYWxsYWJsZSwgaW4gdGhlIHNwZWMKKyAgICAg
ICAgLy8gdGhpcyB0aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHVu
ZGVmaW5lZC4KKyAgICAgICAgaWYgKCAhalF1ZXJ5LmlzRnVuY3Rpb24oIGZuICkgKSB7CisgICAg
ICAgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2ltdWxh
dGVkIGJpbmQKKyAgICAgICAgYXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApOworICAg
ICAgICBwcm94eSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KCBj
b250ZXh0IHx8IHRoaXMsIGFyZ3MuY29uY2F0KCBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSApICk7
CisgICAgICAgIH07CisKKyAgICAgICAgLy8gU2V0IHRoZSBndWlkIG9mIHVuaXF1ZSBoYW5kbGVy
IHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFsIGhhbmRsZXIsIHNvIGl0IGNhbiBiZSByZW1vdmVkCisg
ICAgICAgIHByb3h5Lmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrOwor
CisgICAgICAgIHJldHVybiBwcm94eTsKKyAgICB9LAorCisgICAgbm93OiBEYXRlLm5vdywKKwor
ICAgIC8vIGpRdWVyeS5zdXBwb3J0IGlzIG5vdCB1c2VkIGluIENvcmUgYnV0IG90aGVyIHByb2pl
Y3RzIGF0dGFjaCB0aGVpcgorICAgIC8vIHByb3BlcnRpZXMgdG8gaXQgc28gaXQgbmVlZHMgdG8g
ZXhpc3QuCisgICAgc3VwcG9ydDogc3VwcG9ydAorfSApOworCitpZiAoIHR5cGVvZiBTeW1ib2wg
PT09ICJmdW5jdGlvbiIgKSB7CisgICAgalF1ZXJ5LmZuWyBTeW1ib2wuaXRlcmF0b3IgXSA9IGFy
clsgU3ltYm9sLml0ZXJhdG9yIF07Cit9CisKKy8vIFBvcHVsYXRlIHRoZSBjbGFzczJ0eXBlIG1h
cAoralF1ZXJ5LmVhY2goICJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0
ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbCIuc3BsaXQoICIgIiApLAorZnVuY3Rpb24oIGks
IG5hbWUgKSB7CisgICAgY2xhc3MydHlwZVsgIltvYmplY3QgIiArIG5hbWUgKyAiXSIgXSA9IG5h
bWUudG9Mb3dlckNhc2UoKTsKK30gKTsKKworZnVuY3Rpb24gaXNBcnJheUxpa2UoIG9iaiApIHsK
KworICAgIC8vIFN1cHBvcnQ6IHJlYWwgaU9TIDguMiBvbmx5IChub3QgcmVwcm9kdWNpYmxlIGlu
IHNpbXVsYXRvcikKKyAgICAvLyBgaW5gIGNoZWNrIHVzZWQgdG8gcHJldmVudCBKSVQgZXJyb3Ig
KGdoLTIxNDUpCisgICAgLy8gaGFzT3duIGlzbid0IHVzZWQgaGVyZSBkdWUgdG8gZmFsc2UgbmVn
YXRpdmVzCisgICAgLy8gcmVnYXJkaW5nIE5vZGVsaXN0IGxlbmd0aCBpbiBJRQorICAgIHZhciBs
ZW5ndGggPSAhIW9iaiAmJiAibGVuZ3RoIiBpbiBvYmogJiYgb2JqLmxlbmd0aCwKKyAgICAgICAg
dHlwZSA9IGpRdWVyeS50eXBlKCBvYmogKTsKKworICAgIGlmICggdHlwZSA9PT0gImZ1bmN0aW9u
IiB8fCBqUXVlcnkuaXNXaW5kb3coIG9iaiApICkgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHR5cGUgPT09ICJhcnJheSIgfHwgbGVuZ3RoID09PSAwIHx8Cisg
ICAgICAgIHR5cGVvZiBsZW5ndGggPT09ICJudW1iZXIiICYmIGxlbmd0aCA+IDAgJiYgKCBsZW5n
dGggLSAxICkgaW4gb2JqOworfQordmFyIFNpenpsZSA9CisvKiEKKyAqIFNpenpsZSBDU1MgU2Vs
ZWN0b3IgRW5naW5lIHYyLjMuMworICogaHR0cHM6Ly9zaXp6bGVqcy5jb20vCisgKgorICogQ29w
eXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMKKyAqIFJlbGVh
c2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQorICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQor
ICoKKyAqIERhdGU6IDIwMTYtMDgtMDgKKyAqLworKGZ1bmN0aW9uKCB3aW5kb3cgKSB7CisKK3Zh
ciBpLAorICAgIHN1cHBvcnQsCisgICAgRXhwciwKKyAgICBnZXRUZXh0LAorICAgIGlzWE1MLAor
ICAgIHRva2VuaXplLAorICAgIGNvbXBpbGUsCisgICAgc2VsZWN0LAorICAgIG91dGVybW9zdENv
bnRleHQsCisgICAgc29ydElucHV0LAorICAgIGhhc0R1cGxpY2F0ZSwKKworICAgIC8vIExvY2Fs
IGRvY3VtZW50IHZhcnMKKyAgICBzZXREb2N1bWVudCwKKyAgICBkb2N1bWVudCwKKyAgICBkb2NF
bGVtLAorICAgIGRvY3VtZW50SXNIVE1MLAorICAgIHJidWdneVFTQSwKKyAgICByYnVnZ3lNYXRj
aGVzLAorICAgIG1hdGNoZXMsCisgICAgY29udGFpbnMsCisKKyAgICAvLyBJbnN0YW5jZS1zcGVj
aWZpYyBkYXRhCisgICAgZXhwYW5kbyA9ICJzaXp6bGUiICsgMSAqIG5ldyBEYXRlKCksCisgICAg
cHJlZmVycmVkRG9jID0gd2luZG93LmRvY3VtZW50LAorICAgIGRpcnJ1bnMgPSAwLAorICAgIGRv
bmUgPSAwLAorICAgIGNsYXNzQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLAorICAgIHRva2VuQ2FjaGUg
PSBjcmVhdGVDYWNoZSgpLAorICAgIGNvbXBpbGVyQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLAorICAg
IHNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBiICkgeworICAgICAgICBpZiAoIGEgPT09IGIgKSB7
CisgICAgICAgICAgICBoYXNEdXBsaWNhdGUgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiAwOworICAgIH0sCisKKyAgICAvLyBJbnN0YW5jZSBtZXRob2RzCisgICAgaGFzT3duID0g
KHt9KS5oYXNPd25Qcm9wZXJ0eSwKKyAgICBhcnIgPSBbXSwKKyAgICBwb3AgPSBhcnIucG9wLAor
ICAgIHB1c2hfbmF0aXZlID0gYXJyLnB1c2gsCisgICAgcHVzaCA9IGFyci5wdXNoLAorICAgIHNs
aWNlID0gYXJyLnNsaWNlLAorICAgIC8vIFVzZSBhIHN0cmlwcGVkLWRvd24gaW5kZXhPZiBhcyBp
dCdzIGZhc3RlciB0aGFuIG5hdGl2ZQorICAgIC8vIGh0dHBzOi8vanNwZXJmLmNvbS90aG9yLWlu
ZGV4b2YtdnMtZm9yLzUKKyAgICBpbmRleE9mID0gZnVuY3Rpb24oIGxpc3QsIGVsZW0gKSB7Cisg
ICAgICAgIHZhciBpID0gMCwKKyAgICAgICAgICAgIGxlbiA9IGxpc3QubGVuZ3RoOworICAgICAg
ICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKKyAgICAgICAgICAgIGlmICggbGlzdFtpXSA9PT0g
ZWxlbSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gLTE7CisgICAgfSwKKworICAgIGJvb2xlYW5zID0gImNoZWNr
ZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2Fi
bGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2Nv
cGVkIiwKKworICAgIC8vIFJlZ3VsYXIgZXhwcmVzc2lvbnMKKworICAgIC8vIGh0dHA6Ly93d3cu
dzMub3JnL1RSL2NzczMtc2VsZWN0b3JzLyN3aGl0ZXNwYWNlCisgICAgd2hpdGVzcGFjZSA9ICJb
XFx4MjBcXHRcXHJcXG5cXGZdIiwKKworICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIx
L3N5bmRhdGEuaHRtbCN2YWx1ZS1kZWYtaWRlbnRpZmllcgorICAgIGlkZW50aWZpZXIgPSAiKD86
XFxcXC58W1xcdy1dfFteXDAtXFx4YTBdKSsiLAorCisgICAgLy8gQXR0cmlidXRlIHNlbGVjdG9y
czogaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1dGUtc2VsZWN0b3JzCisg
ICAgYXR0cmlidXRlcyA9ICJcXFsiICsgd2hpdGVzcGFjZSArICIqKCIgKyBpZGVudGlmaWVyICsg
IikoPzoiICsgd2hpdGVzcGFjZSArCisgICAgICAgIC8vIE9wZXJhdG9yIChjYXB0dXJlIDIpCisg
ICAgICAgICIqKFsqXiR8IX5dPz0pIiArIHdoaXRlc3BhY2UgKworICAgICAgICAvLyAiQXR0cmli
dXRlIHZhbHVlcyBtdXN0IGJlIENTUyBpZGVudGlmaWVycyBbY2FwdHVyZSA1XSBvciBzdHJpbmdz
IFtjYXB0dXJlIDMgb3IgY2FwdHVyZSA0XSIKKyAgICAgICAgIiooPzonKCg/OlxcXFwufFteXFxc
XCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoIiArIGlkZW50aWZpZXIgKyAiKSl8
KSIgKyB3aGl0ZXNwYWNlICsKKyAgICAgICAgIipcXF0iLAorCisgICAgcHNldWRvcyA9ICI6KCIg
KyBpZGVudGlmaWVyICsgIikoPzpcXCgoIiArCisgICAgICAgIC8vIFRvIHJlZHVjZSB0aGUgbnVt
YmVyIG9mIHNlbGVjdG9ycyBuZWVkaW5nIHRva2VuaXplIGluIHRoZSBwcmVGaWx0ZXIsIHByZWZl
ciBhcmd1bWVudHM6CisgICAgICAgIC8vIDEuIHF1b3RlZCAoY2FwdHVyZSAzOyBjYXB0dXJlIDQg
b3IgY2FwdHVyZSA1KQorICAgICAgICAiKCcoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/Olxc
XFwufFteXFxcXFwiXSkqKVwiKXwiICsKKyAgICAgICAgLy8gMi4gc2ltcGxlIChjYXB0dXJlIDYp
CisgICAgICAgICIoKD86XFxcXC58W15cXFxcKClbXFxdXXwiICsgYXR0cmlidXRlcyArICIpKil8
IiArCisgICAgICAgIC8vIDMuIGFueXRoaW5nIGVsc2UgKGNhcHR1cmUgMikKKyAgICAgICAgIi4q
IiArCisgICAgICAgICIpXFwpfCkiLAorCisgICAgLy8gTGVhZGluZyBhbmQgbm9uLWVzY2FwZWQg
dHJhaWxpbmcgd2hpdGVzcGFjZSwgY2FwdHVyaW5nIHNvbWUgbm9uLXdoaXRlc3BhY2UgY2hhcmFj
dGVycyBwcmVjZWRpbmcgdGhlIGxhdHRlcgorICAgIHJ3aGl0ZXNwYWNlID0gbmV3IFJlZ0V4cCgg
d2hpdGVzcGFjZSArICIrIiwgImciICksCisgICAgcnRyaW0gPSBuZXcgUmVnRXhwKCAiXiIgKyB3
aGl0ZXNwYWNlICsgIit8KCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIgKyB3aGl0ZXNwYWNlICsg
IiskIiwgImciICksCisKKyAgICByY29tbWEgPSBuZXcgUmVnRXhwKCAiXiIgKyB3aGl0ZXNwYWNl
ICsgIiosIiArIHdoaXRlc3BhY2UgKyAiKiIgKSwKKyAgICByY29tYmluYXRvcnMgPSBuZXcgUmVn
RXhwKCAiXiIgKyB3aGl0ZXNwYWNlICsgIiooWz4rfl18IiArIHdoaXRlc3BhY2UgKyAiKSIgKyB3
aGl0ZXNwYWNlICsgIioiICksCisKKyAgICByYXR0cmlidXRlUXVvdGVzID0gbmV3IFJlZ0V4cCgg
Ij0iICsgd2hpdGVzcGFjZSArICIqKFteXFxdJ1wiXSo/KSIgKyB3aGl0ZXNwYWNlICsgIipcXF0i
LCAiZyIgKSwKKworICAgIHJwc2V1ZG8gPSBuZXcgUmVnRXhwKCBwc2V1ZG9zICksCisgICAgcmlk
ZW50aWZpZXIgPSBuZXcgUmVnRXhwKCAiXiIgKyBpZGVudGlmaWVyICsgIiQiICksCisKKyAgICBt
YXRjaEV4cHIgPSB7CisgICAgICAgICJJRCI6IG5ldyBSZWdFeHAoICJeIygiICsgaWRlbnRpZmll
ciArICIpIiApLAorICAgICAgICAiQ0xBU1MiOiBuZXcgUmVnRXhwKCAiXlxcLigiICsgaWRlbnRp
ZmllciArICIpIiApLAorICAgICAgICAiVEFHIjogbmV3IFJlZ0V4cCggIl4oIiArIGlkZW50aWZp
ZXIgKyAifFsqXSkiICksCisgICAgICAgICJBVFRSIjogbmV3IFJlZ0V4cCggIl4iICsgYXR0cmli
dXRlcyApLAorICAgICAgICAiUFNFVURPIjogbmV3IFJlZ0V4cCggIl4iICsgcHNldWRvcyApLAor
ICAgICAgICAiQ0hJTEQiOiBuZXcgUmVnRXhwKCAiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgt
bGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFwoIiArIHdoaXRlc3BhY2UgKworICAgICAgICAgICAg
IiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiICsgd2hpdGVzcGFjZSArICIqKD86KFsrLV18
KSIgKyB3aGl0ZXNwYWNlICsKKyAgICAgICAgICAgICIqKFxcZCspfCkpIiArIHdoaXRlc3BhY2Ug
KyAiKlxcKXwpIiwgImkiICksCisgICAgICAgICJib29sIjogbmV3IFJlZ0V4cCggIl4oPzoiICsg
Ym9vbGVhbnMgKyAiKSQiLCAiaSIgKSwKKyAgICAgICAgLy8gRm9yIHVzZSBpbiBsaWJyYXJpZXMg
aW1wbGVtZW50aW5nIC5pcygpCisgICAgICAgIC8vIFdlIHVzZSB0aGlzIGZvciBQT1MgbWF0Y2hp
bmcgaW4gYHNlbGVjdGAKKyAgICAgICAgIm5lZWRzQ29udGV4dCI6IG5ldyBSZWdFeHAoICJeIiAr
IHdoaXRlc3BhY2UgKyAiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3Qp
KD86XFwoIiArCisgICAgICAgICAgICB3aGl0ZXNwYWNlICsgIiooKD86LVxcZCk/XFxkKikiICsg
d2hpdGVzcGFjZSArICIqXFwpfCkoPz1bXi1dfCQpIiwgImkiICkKKyAgICB9LAorCisgICAgcmlu
cHV0cyA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksCisgICAgcmhlYWRl
ciA9IC9eaFxkJC9pLAorCisgICAgcm5hdGl2ZSA9IC9eW157XStce1xzKlxbbmF0aXZlIFx3LywK
KworICAgIC8vIEVhc2lseS1wYXJzZWFibGUvcmV0cmlldmFibGUgSUQgb3IgVEFHIG9yIENMQVNT
IHNlbGVjdG9ycworICAgIHJxdWlja0V4cHIgPSAvXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHct
XSspKSQvLAorCisgICAgcnNpYmxpbmcgPSAvWyt+XS8sCisKKyAgICAvLyBDU1MgZXNjYXBlcwor
ICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCNlc2NhcGVkLWNo
YXJhY3RlcnMKKyAgICBydW5lc2NhcGUgPSBuZXcgUmVnRXhwKCAiXFxcXChbXFxkYS1mXXsxLDZ9
IiArIHdoaXRlc3BhY2UgKyAiP3woIiArIHdoaXRlc3BhY2UgKyAiKXwuKSIsICJpZyIgKSwKKyAg
ICBmdW5lc2NhcGUgPSBmdW5jdGlvbiggXywgZXNjYXBlZCwgZXNjYXBlZFdoaXRlc3BhY2UgKSB7
CisgICAgICAgIHZhciBoaWdoID0gIjB4IiArIGVzY2FwZWQgLSAweDEwMDAwOworICAgICAgICAv
LyBOYU4gbWVhbnMgbm9uLWNvZGVwb2ludAorICAgICAgICAvLyBTdXBwb3J0OiBGaXJlZm94PDI0
CisgICAgICAgIC8vIFdvcmthcm91bmQgZXJyb25lb3VzIG51bWVyaWMgaW50ZXJwcmV0YXRpb24g
b2YgKyIweCIKKyAgICAgICAgcmV0dXJuIGhpZ2ggIT09IGhpZ2ggfHwgZXNjYXBlZFdoaXRlc3Bh
Y2UgPworICAgICAgICAgICAgZXNjYXBlZCA6CisgICAgICAgICAgICBoaWdoIDwgMCA/CisgICAg
ICAgICAgICAgICAgLy8gQk1QIGNvZGVwb2ludAorICAgICAgICAgICAgICAgIFN0cmluZy5mcm9t
Q2hhckNvZGUoIGhpZ2ggKyAweDEwMDAwICkgOgorICAgICAgICAgICAgICAgIC8vIFN1cHBsZW1l
bnRhbCBQbGFuZSBjb2RlcG9pbnQgKHN1cnJvZ2F0ZSBwYWlyKQorICAgICAgICAgICAgICAgIFN0
cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggPj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNGRiB8IDB4
REMwMCApOworICAgIH0sCisKKyAgICAvLyBDU1Mgc3RyaW5nL2lkZW50aWZpZXIgc2VyaWFsaXph
dGlvbgorICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jY29tbW9uLXNlcmlh
bGl6aW5nLWlkaW9tcworICAgIHJjc3Nlc2NhcGUgPSAvKFtcMC1ceDFmXHg3Zl18Xi0/XGQpfF4t
JHxbXlwwLVx4MWZceDdmLVx1RkZGRlx3LV0vZywKKyAgICBmY3NzZXNjYXBlID0gZnVuY3Rpb24o
IGNoLCBhc0NvZGVQb2ludCApIHsKKyAgICAgICAgaWYgKCBhc0NvZGVQb2ludCApIHsKKworICAg
ICAgICAgICAgLy8gVSswMDAwIE5VTEwgYmVjb21lcyBVK0ZGRkQgUkVQTEFDRU1FTlQgQ0hBUkFD
VEVSCisgICAgICAgICAgICBpZiAoIGNoID09PSAiXDAiICkgeworICAgICAgICAgICAgICAgIHJl
dHVybiAiXHVGRkZEIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ29udHJvbCBj
aGFyYWN0ZXJzIGFuZCAoZGVwZW5kZW50IHVwb24gcG9zaXRpb24pIG51bWJlcnMgZ2V0IGVzY2Fw
ZWQgYXMgY29kZSBwb2ludHMKKyAgICAgICAgICAgIHJldHVybiBjaC5zbGljZSggMCwgLTEgKSAr
ICJcXCIgKyBjaC5jaGFyQ29kZUF0KCBjaC5sZW5ndGggLSAxICkudG9TdHJpbmcoIDE2ICkgKyAi
ICI7CisgICAgICAgIH0KKworICAgICAgICAvLyBPdGhlciBwb3RlbnRpYWxseS1zcGVjaWFsIEFT
Q0lJIGNoYXJhY3RlcnMgZ2V0IGJhY2tzbGFzaC1lc2NhcGVkCisgICAgICAgIHJldHVybiAiXFwi
ICsgY2g7CisgICAgfSwKKworICAgIC8vIFVzZWQgZm9yIGlmcmFtZXMKKyAgICAvLyBTZWUgc2V0
RG9jdW1lbnQoKQorICAgIC8vIFJlbW92aW5nIHRoZSBmdW5jdGlvbiB3cmFwcGVyIGNhdXNlcyBh
ICJQZXJtaXNzaW9uIERlbmllZCIKKyAgICAvLyBlcnJvciBpbiBJRQorICAgIHVubG9hZEhhbmRs
ZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgc2V0RG9jdW1lbnQoKTsKKyAgICB9LAorCisgICAg
ZGlzYWJsZWRBbmNlc3RvciA9IGFkZENvbWJpbmF0b3IoCisgICAgICAgIGZ1bmN0aW9uKCBlbGVt
ICkgeworICAgICAgICAgICAgcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWUgJiYgKCJmb3Jt
IiBpbiBlbGVtIHx8ICJsYWJlbCIgaW4gZWxlbSk7CisgICAgICAgIH0sCisgICAgICAgIHsgZGly
OiAicGFyZW50Tm9kZSIsIG5leHQ6ICJsZWdlbmQiIH0KKyAgICApOworCisvLyBPcHRpbWl6ZSBm
b3IgcHVzaC5hcHBseSggXywgTm9kZUxpc3QgKQordHJ5IHsKKyAgICBwdXNoLmFwcGx5KAorICAg
ICAgICAoYXJyID0gc2xpY2UuY2FsbCggcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMgKSksCisgICAg
ICAgIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzCisgICAgKTsKKyAgICAvLyBTdXBwb3J0OiBBbmRy
b2lkPDQuMAorICAgIC8vIERldGVjdCBzaWxlbnRseSBmYWlsaW5nIHB1c2guYXBwbHkKKyAgICBh
cnJbIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzLmxlbmd0aCBdLm5vZGVUeXBlOworfSBjYXRjaCAo
IGUgKSB7CisgICAgcHVzaCA9IHsgYXBwbHk6IGFyci5sZW5ndGggPworCisgICAgICAgIC8vIExl
dmVyYWdlIHNsaWNlIGlmIHBvc3NpYmxlCisgICAgICAgIGZ1bmN0aW9uKCB0YXJnZXQsIGVscyAp
IHsKKyAgICAgICAgICAgIHB1c2hfbmF0aXZlLmFwcGx5KCB0YXJnZXQsIHNsaWNlLmNhbGwoZWxz
KSApOworICAgICAgICB9IDoKKworICAgICAgICAvLyBTdXBwb3J0OiBJRTw5CisgICAgICAgIC8v
IE90aGVyd2lzZSBhcHBlbmQgZGlyZWN0bHkKKyAgICAgICAgZnVuY3Rpb24oIHRhcmdldCwgZWxz
ICkgeworICAgICAgICAgICAgdmFyIGogPSB0YXJnZXQubGVuZ3RoLAorICAgICAgICAgICAgICAg
IGkgPSAwOworICAgICAgICAgICAgLy8gQ2FuJ3QgdHJ1c3QgTm9kZUxpc3QubGVuZ3RoCisgICAg
ICAgICAgICB3aGlsZSAoICh0YXJnZXRbaisrXSA9IGVsc1tpKytdKSApIHt9CisgICAgICAgICAg
ICB0YXJnZXQubGVuZ3RoID0gaiAtIDE7CisgICAgICAgIH0KKyAgICB9OworfQorCitmdW5jdGlv
biBTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkgeworICAgIHZhciBt
LCBpLCBlbGVtLCBuaWQsIG1hdGNoLCBncm91cHMsIG5ld1NlbGVjdG9yLAorICAgICAgICBuZXdD
b250ZXh0ID0gY29udGV4dCAmJiBjb250ZXh0Lm93bmVyRG9jdW1lbnQsCisKKyAgICAgICAgLy8g
bm9kZVR5cGUgZGVmYXVsdHMgdG8gOSwgc2luY2UgY29udGV4dCBkZWZhdWx0cyB0byBkb2N1bWVu
dAorICAgICAgICBub2RlVHlwZSA9IGNvbnRleHQgPyBjb250ZXh0Lm5vZGVUeXBlIDogOTsKKwor
ICAgIHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdOworCisgICAgLy8gUmV0dXJuIGVhcmx5IGZyb20g
Y2FsbHMgd2l0aCBpbnZhbGlkIHNlbGVjdG9yIG9yIGNvbnRleHQKKyAgICBpZiAoIHR5cGVvZiBz
ZWxlY3RvciAhPT0gInN0cmluZyIgfHwgIXNlbGVjdG9yIHx8CisgICAgICAgIG5vZGVUeXBlICE9
PSAxICYmIG5vZGVUeXBlICE9PSA5ICYmIG5vZGVUeXBlICE9PSAxMSApIHsKKworICAgICAgICBy
ZXR1cm4gcmVzdWx0czsKKyAgICB9CisKKyAgICAvLyBUcnkgdG8gc2hvcnRjdXQgZmluZCBvcGVy
YXRpb25zIChhcyBvcHBvc2VkIHRvIGZpbHRlcnMpIGluIEhUTUwgZG9jdW1lbnRzCisgICAgaWYg
KCAhc2VlZCApIHsKKworICAgICAgICBpZiAoICggY29udGV4dCA/IGNvbnRleHQub3duZXJEb2N1
bWVudCB8fCBjb250ZXh0IDogcHJlZmVycmVkRG9jICkgIT09IGRvY3VtZW50ICkgeworICAgICAg
ICAgICAgc2V0RG9jdW1lbnQoIGNvbnRleHQgKTsKKyAgICAgICAgfQorICAgICAgICBjb250ZXh0
ID0gY29udGV4dCB8fCBkb2N1bWVudDsKKworICAgICAgICBpZiAoIGRvY3VtZW50SXNIVE1MICkg
eworCisgICAgICAgICAgICAvLyBJZiB0aGUgc2VsZWN0b3IgaXMgc3VmZmljaWVudGx5IHNpbXBs
ZSwgdHJ5IHVzaW5nIGEgImdldCpCeSoiIERPTSBtZXRob2QKKyAgICAgICAgICAgIC8vIChleGNl
cHRpbmcgRG9jdW1lbnRGcmFnbWVudCBjb250ZXh0LCB3aGVyZSB0aGUgbWV0aG9kcyBkb24ndCBl
eGlzdCkKKyAgICAgICAgICAgIGlmICggbm9kZVR5cGUgIT09IDExICYmIChtYXRjaCA9IHJxdWlj
a0V4cHIuZXhlYyggc2VsZWN0b3IgKSkgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBJRCBzZWxl
Y3RvcgorICAgICAgICAgICAgICAgIGlmICggKG0gPSBtYXRjaFsxXSkgKSB7CisKKyAgICAgICAg
ICAgICAgICAgICAgLy8gRG9jdW1lbnQgY29udGV4dAorICAgICAgICAgICAgICAgICAgICBpZiAo
IG5vZGVUeXBlID09PSA5ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9
IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5z
dGVhZCBvZiBJRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5pZCA9PT0g
bSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKCBlbGVt
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRWxlbWVudCBjb250
ZXh0CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9ucworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Z2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRAor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBuZXdDb250ZXh0ICYmIChlbGVtID0gbmV3Q29u
dGV4dC5nZXRFbGVtZW50QnlJZCggbSApKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbGVtLmlkID09PSBtICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
cy5wdXNoKCBlbGVtICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dHM7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIC8vIFR5cGUgc2VsZWN0b3IKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCBtYXRjaFsyXSApIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaC5hcHBseSggcmVzdWx0
cywgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggc2VsZWN0b3IgKSApOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKKworICAgICAgICAgICAgICAgIC8vIENsYXNzIHNl
bGVjdG9yCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggKG0gPSBtYXRjaFszXSkgJiYgc3Vw
cG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmCisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHsKKworICAgICAgICAgICAgICAgICAgICBwdXNo
LmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIG0gKSApOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRha2UgYWR2YW50YWdlIG9mIHF1ZXJ5U2Vs
ZWN0b3JBbGwKKyAgICAgICAgICAgIGlmICggc3VwcG9ydC5xc2EgJiYKKyAgICAgICAgICAgICAg
ICAhY29tcGlsZXJDYWNoZVsgc2VsZWN0b3IgKyAiICIgXSAmJgorICAgICAgICAgICAgICAgICgh
cmJ1Z2d5UVNBIHx8ICFyYnVnZ3lRU0EudGVzdCggc2VsZWN0b3IgKSkgKSB7CisKKyAgICAgICAg
ICAgICAgICBpZiAoIG5vZGVUeXBlICE9PSAxICkgeworICAgICAgICAgICAgICAgICAgICBuZXdD
b250ZXh0ID0gY29udGV4dDsKKyAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0b3IgPSBzZWxl
Y3RvcjsKKworICAgICAgICAgICAgICAgIC8vIHFTQSBsb29rcyBvdXRzaWRlIEVsZW1lbnQgY29u
dGV4dCwgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudAorICAgICAgICAgICAgICAgIC8vIFRoYW5r
cyB0byBBbmRyZXcgRHVwb250IGZvciB0aGlzIHdvcmthcm91bmQgdGVjaG5pcXVlCisgICAgICAg
ICAgICAgICAgLy8gU3VwcG9ydDogSUUgPD04CisgICAgICAgICAgICAgICAgLy8gRXhjbHVkZSBv
YmplY3QgZWxlbWVudHMKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBjb250ZXh0Lm5vZGVO
YW1lLnRvTG93ZXJDYXNlKCkgIT09ICJvYmplY3QiICkgeworCisgICAgICAgICAgICAgICAgICAg
IC8vIENhcHR1cmUgdGhlIGNvbnRleHQgSUQsIHNldHRpbmcgaXQgZmlyc3QgaWYgbmVjZXNzYXJ5
CisgICAgICAgICAgICAgICAgICAgIGlmICggKG5pZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKCAi
aWQiICkpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmlkID0gbmlkLnJlcGxhY2UoIHJj
c3Nlc2NhcGUsIGZjc3Nlc2NhcGUgKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0QXR0cmlidXRlKCAiaWQiLCAobmlkID0g
ZXhwYW5kbykgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
IC8vIFByZWZpeCBldmVyeSBzZWxlY3RvciBpbiB0aGUgbGlzdAorICAgICAgICAgICAgICAgICAg
ICBncm91cHMgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTsKKyAgICAgICAgICAgICAgICAgICAgaSA9
IGdyb3Vwcy5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzW2ldID0gIiMiICsgbmlkICsgIiAiICsgdG9TZWxl
Y3RvciggZ3JvdXBzW2ldICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgbmV3U2VsZWN0b3IgPSBncm91cHMuam9pbiggIiwiICk7CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gRXhwYW5kIGNvbnRleHQgZm9yIHNpYmxpbmcgc2VsZWN0b3JzCisgICAgICAgICAg
ICAgICAgICAgIG5ld0NvbnRleHQgPSByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RD
b250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIG5ld1Nl
bGVjdG9yICkgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
ZXdDb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIG5ld1NlbGVjdG9yICkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAg
ICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoIHFzYUVycm9yICkgeworICAgICAgICAgICAgICAg
ICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBuaWQgPT09IGV4
cGFuZG8gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZW1vdmVBdHRy
aWJ1dGUoICJpZCIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIEFsbCBvdGhlcnMKKyAgICByZXR1cm4gc2VsZWN0KCBzZWxlY3Rvci5yZXBs
YWNlKCBydHJpbSwgIiQxIiApLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICk7Cit9CisKKy8qKgor
ICogQ3JlYXRlIGtleS12YWx1ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXplCisgKiBAcmV0dXJucyB7
ZnVuY3Rpb24oc3RyaW5nLCBvYmplY3QpfSBSZXR1cm5zIHRoZSBPYmplY3QgZGF0YSBhZnRlciBz
dG9yaW5nIGl0IG9uIGl0c2VsZiB3aXRoCisgKiAgcHJvcGVydHkgbmFtZSB0aGUgKHNwYWNlLXN1
ZmZpeGVkKSBzdHJpbmcgYW5kIChpZiB0aGUgY2FjaGUgaXMgbGFyZ2VyIHRoYW4gRXhwci5jYWNo
ZUxlbmd0aCkKKyAqICBkZWxldGluZyB0aGUgb2xkZXN0IGVudHJ5CisgKi8KK2Z1bmN0aW9uIGNy
ZWF0ZUNhY2hlKCkgeworICAgIHZhciBrZXlzID0gW107CisKKyAgICBmdW5jdGlvbiBjYWNoZSgg
a2V5LCB2YWx1ZSApIHsKKyAgICAgICAgLy8gVXNlIChrZXkgKyAiICIpIHRvIGF2b2lkIGNvbGxp
c2lvbiB3aXRoIG5hdGl2ZSBwcm90b3R5cGUgcHJvcGVydGllcyAoc2VlIElzc3VlICMxNTcpCisg
ICAgICAgIGlmICgga2V5cy5wdXNoKCBrZXkgKyAiICIgKSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7
CisgICAgICAgICAgICAvLyBPbmx5IGtlZXAgdGhlIG1vc3QgcmVjZW50IGVudHJpZXMKKyAgICAg
ICAgICAgIGRlbGV0ZSBjYWNoZVsga2V5cy5zaGlmdCgpIF07CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIChjYWNoZVsga2V5ICsgIiAiIF0gPSB2YWx1ZSk7CisgICAgfQorICAgIHJldHVybiBj
YWNoZTsKK30KKworLyoqCisgKiBNYXJrIGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IFNp
enpsZQorICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIG1hcmsKKyAqLwor
ZnVuY3Rpb24gbWFya0Z1bmN0aW9uKCBmbiApIHsKKyAgICBmblsgZXhwYW5kbyBdID0gdHJ1ZTsK
KyAgICByZXR1cm4gZm47Cit9CisKKy8qKgorICogU3VwcG9ydCB0ZXN0aW5nIHVzaW5nIGFuIGVs
ZW1lbnQKKyAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFBhc3NlZCB0aGUgY3JlYXRlZCBlbGVtZW50
IGFuZCByZXR1cm5zIGEgYm9vbGVhbiByZXN1bHQKKyAqLworZnVuY3Rpb24gYXNzZXJ0KCBmbiAp
IHsKKyAgICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJmaWVsZHNldCIpOworCisg
ICAgdHJ5IHsKKyAgICAgICAgcmV0dXJuICEhZm4oIGVsICk7CisgICAgfSBjYXRjaCAoZSkgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgLy8gUmVtb3Zl
IGZyb20gaXRzIHBhcmVudCBieSBkZWZhdWx0CisgICAgICAgIGlmICggZWwucGFyZW50Tm9kZSAp
IHsKKyAgICAgICAgICAgIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVsICk7CisgICAgICAg
IH0KKyAgICAgICAgLy8gcmVsZWFzZSBtZW1vcnkgaW4gSUUKKyAgICAgICAgZWwgPSBudWxsOwor
ICAgIH0KK30KKworLyoqCisgKiBBZGRzIHRoZSBzYW1lIGhhbmRsZXIgZm9yIGFsbCBvZiB0aGUg
c3BlY2lmaWVkIGF0dHJzCisgKiBAcGFyYW0ge1N0cmluZ30gYXR0cnMgUGlwZS1zZXBhcmF0ZWQg
bGlzdCBvZiBhdHRyaWJ1dGVzCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIFRoZSBtZXRo
b2QgdGhhdCB3aWxsIGJlIGFwcGxpZWQKKyAqLworZnVuY3Rpb24gYWRkSGFuZGxlKCBhdHRycywg
aGFuZGxlciApIHsKKyAgICB2YXIgYXJyID0gYXR0cnMuc3BsaXQoInwiKSwKKyAgICAgICAgaSA9
IGFyci5sZW5ndGg7CisKKyAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgRXhwci5hdHRySGFu
ZGxlWyBhcnJbaV0gXSA9IGhhbmRsZXI7CisgICAgfQorfQorCisvKioKKyAqIENoZWNrcyBkb2N1
bWVudCBvcmRlciBvZiB0d28gc2libGluZ3MKKyAqIEBwYXJhbSB7RWxlbWVudH0gYQorICogQHBh
cmFtIHtFbGVtZW50fSBiCisgKiBAcmV0dXJucyB7TnVtYmVyfSBSZXR1cm5zIGxlc3MgdGhhbiAw
IGlmIGEgcHJlY2VkZXMgYiwgZ3JlYXRlciB0aGFuIDAgaWYgYSBmb2xsb3dzIGIKKyAqLworZnVu
Y3Rpb24gc2libGluZ0NoZWNrKCBhLCBiICkgeworICAgIHZhciBjdXIgPSBiICYmIGEsCisgICAg
ICAgIGRpZmYgPSBjdXIgJiYgYS5ub2RlVHlwZSA9PT0gMSAmJiBiLm5vZGVUeXBlID09PSAxICYm
CisgICAgICAgICAgICBhLnNvdXJjZUluZGV4IC0gYi5zb3VyY2VJbmRleDsKKworICAgIC8vIFVz
ZSBJRSBzb3VyY2VJbmRleCBpZiBhdmFpbGFibGUgb24gYm90aCBub2RlcworICAgIGlmICggZGlm
ZiApIHsKKyAgICAgICAgcmV0dXJuIGRpZmY7CisgICAgfQorCisgICAgLy8gQ2hlY2sgaWYgYiBm
b2xsb3dzIGEKKyAgICBpZiAoIGN1ciApIHsKKyAgICAgICAgd2hpbGUgKCAoY3VyID0gY3VyLm5l
eHRTaWJsaW5nKSApIHsKKyAgICAgICAgICAgIGlmICggY3VyID09PSBiICkgeworICAgICAgICAg
ICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBhID8gMSA6IC0xOworfQorCisvKioKKyAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1
c2UgaW4gcHNldWRvcyBmb3IgaW5wdXQgdHlwZXMKKyAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlCisg
Ki8KK2Z1bmN0aW9uIGNyZWF0ZUlucHV0UHNldWRvKCB0eXBlICkgeworICAgIHJldHVybiBmdW5j
dGlvbiggZWxlbSApIHsKKyAgICAgICAgdmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJD
YXNlKCk7CisgICAgICAgIHJldHVybiBuYW1lID09PSAiaW5wdXQiICYmIGVsZW0udHlwZSA9PT0g
dHlwZTsKKyAgICB9OworfQorCisvKioKKyAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4g
cHNldWRvcyBmb3IgYnV0dG9ucworICogQHBhcmFtIHtTdHJpbmd9IHR5cGUKKyAqLworZnVuY3Rp
b24gY3JlYXRlQnV0dG9uUHNldWRvKCB0eXBlICkgeworICAgIHJldHVybiBmdW5jdGlvbiggZWxl
bSApIHsKKyAgICAgICAgdmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Cisg
ICAgICAgIHJldHVybiAobmFtZSA9PT0gImlucHV0IiB8fCBuYW1lID09PSAiYnV0dG9uIikgJiYg
ZWxlbS50eXBlID09PSB0eXBlOworICAgIH07Cit9CisKKy8qKgorICogUmV0dXJucyBhIGZ1bmN0
aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciA6ZW5hYmxlZC86ZGlzYWJsZWQKKyAqIEBwYXJhbSB7
Qm9vbGVhbn0gZGlzYWJsZWQgdHJ1ZSBmb3IgOmRpc2FibGVkOyBmYWxzZSBmb3IgOmVuYWJsZWQK
KyAqLworZnVuY3Rpb24gY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGRpc2FibGVkICkgeworCisgICAg
Ly8gS25vd24gOmRpc2FibGVkIGZhbHNlIHBvc2l0aXZlczogZmllbGRzZXRbZGlzYWJsZWRdID4g
bGVnZW5kOm50aC1vZi10eXBlKG4rMikgOmNhbi1kaXNhYmxlCisgICAgcmV0dXJuIGZ1bmN0aW9u
KCBlbGVtICkgeworCisgICAgICAgIC8vIE9ubHkgY2VydGFpbiBlbGVtZW50cyBjYW4gbWF0Y2gg
OmVuYWJsZWQgb3IgOmRpc2FibGVkCisgICAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3
Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWVuYWJsZWQKKyAgICAgICAg
Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwj
c2VsZWN0b3ItZGlzYWJsZWQKKyAgICAgICAgaWYgKCAiZm9ybSIgaW4gZWxlbSApIHsKKworICAg
ICAgICAgICAgLy8gQ2hlY2sgZm9yIGluaGVyaXRlZCBkaXNhYmxlZG5lc3Mgb24gcmVsZXZhbnQg
bm9uLWRpc2FibGVkIGVsZW1lbnRzOgorICAgICAgICAgICAgLy8gKiBsaXN0ZWQgZm9ybS1hc3Nv
Y2lhdGVkIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgZmllbGRzZXQKKyAgICAgICAgICAgIC8vICAg
aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjYXRlZ29y
eS1saXN0ZWQKKyAgICAgICAgICAgIC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9t
dWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25jZXB0LWZlLWRpc2FibGVkCisgICAgICAgICAgICAvLyAq
IG9wdGlvbiBlbGVtZW50cyBpbiBhIGRpc2FibGVkIG9wdGdyb3VwCisgICAgICAgICAgICAvLyAg
IGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2Vw
dC1vcHRpb24tZGlzYWJsZWQKKyAgICAgICAgICAgIC8vIEFsbCBzdWNoIGVsZW1lbnRzIGhhdmUg
YSAiZm9ybSIgcHJvcGVydHkuCisgICAgICAgICAgICBpZiAoIGVsZW0ucGFyZW50Tm9kZSAmJiBl
bGVtLmRpc2FibGVkID09PSBmYWxzZSApIHsKKworICAgICAgICAgICAgICAgIC8vIE9wdGlvbiBl
bGVtZW50cyBkZWZlciB0byBhIHBhcmVudCBvcHRncm91cCBpZiBwcmVzZW50CisgICAgICAgICAg
ICAgICAgaWYgKCAibGFiZWwiIGluIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgg
ImxhYmVsIiBpbiBlbGVtLnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZWxlbS5wYXJlbnROb2RlLmRpc2FibGVkID09PSBkaXNhYmxlZDsKKyAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmRp
c2FibGVkID09PSBkaXNhYmxlZDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFIDYgLSAxMQorICAgICAgICAg
ICAgICAgIC8vIFVzZSB0aGUgaXNEaXNhYmxlZCBzaG9ydGN1dCBwcm9wZXJ0eSB0byBjaGVjayBm
b3IgZGlzYWJsZWQgZmllbGRzZXQgYW5jZXN0b3JzCisgICAgICAgICAgICAgICAgcmV0dXJuIGVs
ZW0uaXNEaXNhYmxlZCA9PT0gZGlzYWJsZWQgfHwKKworICAgICAgICAgICAgICAgICAgICAvLyBX
aGVyZSB0aGVyZSBpcyBubyBpc0Rpc2FibGVkLCBjaGVjayBtYW51YWxseQorICAgICAgICAgICAg
ICAgICAgICAvKiBqc2hpbnQgLVcwMTggKi8KKyAgICAgICAgICAgICAgICAgICAgZWxlbS5pc0Rp
c2FibGVkICE9PSAhZGlzYWJsZWQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVk
QW5jZXN0b3IoIGVsZW0gKSA9PT0gZGlzYWJsZWQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDsKKworICAgICAgICAvLyBUcnkg
dG8gd2lubm93IG91dCBlbGVtZW50cyB0aGF0IGNhbid0IGJlIGRpc2FibGVkIGJlZm9yZSB0cnVz
dGluZyB0aGUgZGlzYWJsZWQgcHJvcGVydHkuCisgICAgICAgIC8vIFNvbWUgdmljdGltcyBnZXQg
Y2F1Z2h0IGluIG91ciBuZXQgKGxhYmVsLCBsZWdlbmQsIG1lbnUsIHRyYWNrKSwgYnV0IGl0IHNo
b3VsZG4ndAorICAgICAgICAvLyBldmVuIGV4aXN0IG9uIHRoZW0sIGxldCBhbG9uZSBoYXZlIGEg
Ym9vbGVhbiB2YWx1ZS4KKyAgICAgICAgfSBlbHNlIGlmICggImxhYmVsIiBpbiBlbGVtICkgewor
ICAgICAgICAgICAgcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkOworICAgICAgICB9
CisKKyAgICAgICAgLy8gUmVtYWluaW5nIGVsZW1lbnRzIGFyZSBuZWl0aGVyIDplbmFibGVkIG5v
ciA6ZGlzYWJsZWQKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07Cit9CisKKy8qKgorICog
UmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBwb3NpdGlvbmFscworICog
QHBhcmFtIHtGdW5jdGlvbn0gZm4KKyAqLworZnVuY3Rpb24gY3JlYXRlUG9zaXRpb25hbFBzZXVk
byggZm4gKSB7CisgICAgcmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggYXJndW1lbnQgKSB7
CisgICAgICAgIGFyZ3VtZW50ID0gK2FyZ3VtZW50OworICAgICAgICByZXR1cm4gbWFya0Z1bmN0
aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkgeworICAgICAgICAgICAgdmFyIGosCisgICAg
ICAgICAgICAgICAgbWF0Y2hJbmRleGVzID0gZm4oIFtdLCBzZWVkLmxlbmd0aCwgYXJndW1lbnQg
KSwKKyAgICAgICAgICAgICAgICBpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDsKKworICAgICAgICAg
ICAgLy8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBpbmRleGVzCisgICAg
ICAgICAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHNlZWRbIChqID0g
bWF0Y2hJbmRleGVzW2ldKSBdICkgeworICAgICAgICAgICAgICAgICAgICBzZWVkW2pdID0gISht
YXRjaGVzW2pdID0gc2VlZFtqXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9KTsKKyAgICB9KTsKK30KKworLyoqCisgKiBDaGVja3MgYSBub2RlIGZvciB2YWxp
ZGl0eSBhcyBhIFNpenpsZSBjb250ZXh0CisgKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0PX0gY29u
dGV4dAorICogQHJldHVybnMge0VsZW1lbnR8T2JqZWN0fEJvb2xlYW59IFRoZSBpbnB1dCBub2Rl
IGlmIGFjY2VwdGFibGUsIG90aGVyd2lzZSBhIGZhbHN5IHZhbHVlCisgKi8KK2Z1bmN0aW9uIHRl
c3RDb250ZXh0KCBjb250ZXh0ICkgeworICAgIHJldHVybiBjb250ZXh0ICYmIHR5cGVvZiBjb250
ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSAidW5kZWZpbmVkIiAmJiBjb250ZXh0OworfQor
CisvLyBFeHBvc2Ugc3VwcG9ydCB2YXJzIGZvciBjb252ZW5pZW5jZQorc3VwcG9ydCA9IFNpenps
ZS5zdXBwb3J0ID0ge307CisKKy8qKgorICogRGV0ZWN0cyBYTUwgbm9kZXMKKyAqIEBwYXJhbSB7
RWxlbWVudHxPYmplY3R9IGVsZW0gQW4gZWxlbWVudCBvciBhIGRvY3VtZW50CisgKiBAcmV0dXJu
cyB7Qm9vbGVhbn0gVHJ1ZSBpZmYgZWxlbSBpcyBhIG5vbi1IVE1MIFhNTCBub2RlCisgKi8KK2lz
WE1MID0gU2l6emxlLmlzWE1MID0gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgLy8gZG9jdW1lbnRF
bGVtZW50IGlzIHZlcmlmaWVkIGZvciBjYXNlcyB3aGVyZSBpdCBkb2Vzbid0IHlldCBleGlzdAor
ICAgIC8vIChzdWNoIGFzIGxvYWRpbmcgaWZyYW1lcyBpbiBJRSAtICM0ODMzKQorICAgIHZhciBk
b2N1bWVudEVsZW1lbnQgPSBlbGVtICYmIChlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSkuZG9j
dW1lbnRFbGVtZW50OworICAgIHJldHVybiBkb2N1bWVudEVsZW1lbnQgPyBkb2N1bWVudEVsZW1l
bnQubm9kZU5hbWUgIT09ICJIVE1MIiA6IGZhbHNlOworfTsKKworLyoqCisgKiBTZXRzIGRvY3Vt
ZW50LXJlbGF0ZWQgdmFyaWFibGVzIG9uY2UgYmFzZWQgb24gdGhlIGN1cnJlbnQgZG9jdW1lbnQK
KyAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IFtkb2NdIEFuIGVsZW1lbnQgb3IgZG9jdW1lbnQg
b2JqZWN0IHRvIHVzZSB0byBzZXQgdGhlIGRvY3VtZW50CisgKiBAcmV0dXJucyB7T2JqZWN0fSBS
ZXR1cm5zIHRoZSBjdXJyZW50IGRvY3VtZW50CisgKi8KK3NldERvY3VtZW50ID0gU2l6emxlLnNl
dERvY3VtZW50ID0gZnVuY3Rpb24oIG5vZGUgKSB7CisgICAgdmFyIGhhc0NvbXBhcmUsIHN1Yldp
bmRvdywKKyAgICAgICAgZG9jID0gbm9kZSA/IG5vZGUub3duZXJEb2N1bWVudCB8fCBub2RlIDog
cHJlZmVycmVkRG9jOworCisgICAgLy8gUmV0dXJuIGVhcmx5IGlmIGRvYyBpcyBpbnZhbGlkIG9y
IGFscmVhZHkgc2VsZWN0ZWQKKyAgICBpZiAoIGRvYyA9PT0gZG9jdW1lbnQgfHwgZG9jLm5vZGVU
eXBlICE9PSA5IHx8ICFkb2MuZG9jdW1lbnRFbGVtZW50ICkgeworICAgICAgICByZXR1cm4gZG9j
dW1lbnQ7CisgICAgfQorCisgICAgLy8gVXBkYXRlIGdsb2JhbCB2YXJpYWJsZXMKKyAgICBkb2N1
bWVudCA9IGRvYzsKKyAgICBkb2NFbGVtID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OworICAg
IGRvY3VtZW50SXNIVE1MID0gIWlzWE1MKCBkb2N1bWVudCApOworCisgICAgLy8gU3VwcG9ydDog
SUUgOS0xMSwgRWRnZQorICAgIC8vIEFjY2Vzc2luZyBpZnJhbWUgZG9jdW1lbnRzIGFmdGVyIHVu
bG9hZCB0aHJvd3MgInBlcm1pc3Npb24gZGVuaWVkIiBlcnJvcnMgKGpRdWVyeSAjMTM5MzYpCisg
ICAgaWYgKCBwcmVmZXJyZWREb2MgIT09IGRvY3VtZW50ICYmCisgICAgICAgIChzdWJXaW5kb3cg
PSBkb2N1bWVudC5kZWZhdWx0VmlldykgJiYgc3ViV2luZG93LnRvcCAhPT0gc3ViV2luZG93ICkg
eworCisgICAgICAgIC8vIFN1cHBvcnQ6IElFIDExLCBFZGdlCisgICAgICAgIGlmICggc3ViV2lu
ZG93LmFkZEV2ZW50TGlzdGVuZXIgKSB7CisgICAgICAgICAgICBzdWJXaW5kb3cuYWRkRXZlbnRM
aXN0ZW5lciggInVubG9hZCIsIHVubG9hZEhhbmRsZXIsIGZhbHNlICk7CisKKyAgICAgICAgLy8g
U3VwcG9ydDogSUUgOSAtIDEwIG9ubHkKKyAgICAgICAgfSBlbHNlIGlmICggc3ViV2luZG93LmF0
dGFjaEV2ZW50ICkgeworICAgICAgICAgICAgc3ViV2luZG93LmF0dGFjaEV2ZW50KCAib251bmxv
YWQiLCB1bmxvYWRIYW5kbGVyICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBBdHRyaWJ1
dGVzCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisgICAgLy8gU3VwcG9ydDogSUU8OAorICAgIC8v
IFZlcmlmeSB0aGF0IGdldEF0dHJpYnV0ZSByZWFsbHkgcmV0dXJucyBhdHRyaWJ1dGVzIGFuZCBu
b3QgcHJvcGVydGllcworICAgIC8vIChleGNlcHRpbmcgSUU4IGJvb2xlYW5zKQorICAgIHN1cHBv
cnQuYXR0cmlidXRlcyA9IGFzc2VydChmdW5jdGlvbiggZWwgKSB7CisgICAgICAgIGVsLmNsYXNz
TmFtZSA9ICJpIjsKKyAgICAgICAgcmV0dXJuICFlbC5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIp
OworICAgIH0pOworCisgICAgLyogZ2V0RWxlbWVudChzKUJ5KgorICAgIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
Ki8KKworICAgIC8vIENoZWNrIGlmIGdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikgcmV0dXJucyBv
bmx5IGVsZW1lbnRzCisgICAgc3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA9IGFzc2VydChm
dW5jdGlvbiggZWwgKSB7CisgICAgICAgIGVsLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVD
b21tZW50KCIiKSApOworICAgICAgICByZXR1cm4gIWVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIq
IikubGVuZ3RoOworICAgIH0pOworCisgICAgLy8gU3VwcG9ydDogSUU8OQorICAgIHN1cHBvcnQu
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IHJuYXRpdmUudGVzdCggZG9jdW1lbnQuZ2V0RWxlbWVu
dHNCeUNsYXNzTmFtZSApOworCisgICAgLy8gU3VwcG9ydDogSUU8MTAKKyAgICAvLyBDaGVjayBp
ZiBnZXRFbGVtZW50QnlJZCByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWUKKyAgICAvLyBUaGUgYnJv
a2VuIGdldEVsZW1lbnRCeUlkIG1ldGhvZHMgZG9uJ3QgcGljayB1cCBwcm9ncmFtbWF0aWNhbGx5
LXNldCBuYW1lcywKKyAgICAvLyBzbyB1c2UgYSByb3VuZGFib3V0IGdldEVsZW1lbnRzQnlOYW1l
IHRlc3QKKyAgICBzdXBwb3J0LmdldEJ5SWQgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkgeworICAg
ICAgICBkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmlkID0gZXhwYW5kbzsKKyAgICAgICAgcmV0
dXJuICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSB8fCAhZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eU5hbWUoIGV4cGFuZG8gKS5sZW5ndGg7CisgICAgfSk7CisKKyAgICAvLyBJRCBmaWx0ZXIgYW5k
IGZpbmQKKyAgICBpZiAoIHN1cHBvcnQuZ2V0QnlJZCApIHsKKyAgICAgICAgRXhwci5maWx0ZXJb
IklEIl0gPSBmdW5jdGlvbiggaWQgKSB7CisgICAgICAgICAgICB2YXIgYXR0cklkID0gaWQucmVw
bGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlv
biggZWxlbSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoImlk
IikgPT09IGF0dHJJZDsKKyAgICAgICAgICAgIH07CisgICAgICAgIH07CisgICAgICAgIEV4cHIu
ZmluZFsiSUQiXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHsKKyAgICAgICAgICAgIGlmICgg
dHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09ICJ1bmRlZmluZWQiICYmIGRvY3VtZW50
SXNIVE1MICkgeworICAgICAgICAgICAgICAgIHZhciBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50
QnlJZCggaWQgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbSA/IFsgZWxlbSBdIDogW107
CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfSBlbHNlIHsKKyAgICAgICAgRXhwci5m
aWx0ZXJbIklEIl0gPSAgZnVuY3Rpb24oIGlkICkgeworICAgICAgICAgICAgdmFyIGF0dHJJZCA9
IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7CisgICAgICAgICAgICByZXR1cm4g
ZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSB0eXBlb2YgZWxl
bS5nZXRBdHRyaWJ1dGVOb2RlICE9PSAidW5kZWZpbmVkIiAmJgorICAgICAgICAgICAgICAgICAg
ICBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5v
ZGUgJiYgbm9kZS52YWx1ZSA9PT0gYXR0cklkOworICAgICAgICAgICAgfTsKKyAgICAgICAgfTsK
KworICAgICAgICAvLyBTdXBwb3J0OiBJRSA2IC0gNyBvbmx5CisgICAgICAgIC8vIGdldEVsZW1l
bnRCeUlkIGlzIG5vdCByZWxpYWJsZSBhcyBhIGZpbmQgc2hvcnRjdXQKKyAgICAgICAgRXhwci5m
aW5kWyJJRCJdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkgeworICAgICAgICAgICAgaWYgKCB0
eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gInVuZGVmaW5lZCIgJiYgZG9jdW1lbnRJ
c0hUTUwgKSB7CisgICAgICAgICAgICAgICAgdmFyIG5vZGUsIGksIGVsZW1zLAorICAgICAgICAg
ICAgICAgICAgICBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTsKKworICAgICAg
ICAgICAgICAgIGlmICggZWxlbSApIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBWZXJpZnkg
dGhlIGlkIGF0dHJpYnV0ZQorICAgICAgICAgICAgICAgICAgICBub2RlID0gZWxlbS5nZXRBdHRy
aWJ1dGVOb2RlKCJpZCIpOworICAgICAgICAgICAgICAgICAgICBpZiAoIG5vZGUgJiYgbm9kZS52
YWx1ZSA9PT0gaWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyBlbGVtIF07
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBGYWxsIGJh
Y2sgb24gZ2V0RWxlbWVudHNCeU5hbWUKKyAgICAgICAgICAgICAgICAgICAgZWxlbXMgPSBjb250
ZXh0LmdldEVsZW1lbnRzQnlOYW1lKCBpZCApOworICAgICAgICAgICAgICAgICAgICBpID0gMDsK
KyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAoZWxlbSA9IGVsZW1zW2krK10pICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyBlbGVtIF07CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gW107CisgICAgICAgICAgICB9CisgICAgICAg
IH07CisgICAgfQorCisgICAgLy8gVGFnCisgICAgRXhwci5maW5kWyJUQUciXSA9IHN1cHBvcnQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUgPworICAgICAgICBmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkg
eworICAgICAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAh
PT0gInVuZGVmaW5lZCIgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoIHRhZyApOworCisgICAgICAgICAgICAvLyBEb2N1bWVudEZyYWdtZW50
IG5vZGVzIGRvbid0IGhhdmUgZ0VCVE4KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIHN1cHBvcnQu
cXNhICkgeworICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwo
IHRhZyApOworICAgICAgICAgICAgfQorICAgICAgICB9IDoKKworICAgICAgICBmdW5jdGlvbigg
dGFnLCBjb250ZXh0ICkgeworICAgICAgICAgICAgdmFyIGVsZW0sCisgICAgICAgICAgICAgICAg
dG1wID0gW10sCisgICAgICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICAgICAgLy8gQnkg
aGFwcHkgY29pbmNpZGVuY2UsIGEgKGJyb2tlbikgZ0VCVE4gYXBwZWFycyBvbiBEb2N1bWVudEZy
YWdtZW50IG5vZGVzIHRvbworICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBjb250ZXh0LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTsKKworICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBwb3Nz
aWJsZSBjb21tZW50cworICAgICAgICAgICAgaWYgKCB0YWcgPT09ICIqIiApIHsKKyAgICAgICAg
ICAgICAgICB3aGlsZSAoIChlbGVtID0gcmVzdWx0c1tpKytdKSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdG1wLnB1c2goIGVsZW0gKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiB0bXA7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICAgICAgfTsKKworICAgIC8vIENsYXNzCisgICAg
RXhwci5maW5kWyJDTEFTUyJdID0gc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmIGZ1
bmN0aW9uKCBjbGFzc05hbWUsIGNvbnRleHQgKSB7CisgICAgICAgIGlmICggdHlwZW9mIGNvbnRl
eHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gInVuZGVmaW5lZCIgJiYgZG9jdW1lbnRJc0hU
TUwgKSB7CisgICAgICAgICAgICByZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1l
KCBjbGFzc05hbWUgKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKiBRU0EvbWF0Y2hlc1Nl
bGVjdG9yCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisgICAgLy8gUVNBIGFuZCBtYXRjaGVzU2Vs
ZWN0b3Igc3VwcG9ydAorCisgICAgLy8gbWF0Y2hlc1NlbGVjdG9yKDphY3RpdmUpIHJlcG9ydHMg
ZmFsc2Ugd2hlbiB0cnVlIChJRTkvT3BlcmEgMTEuNSkKKyAgICByYnVnZ3lNYXRjaGVzID0gW107
CisKKyAgICAvLyBxU2EoOmZvY3VzKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoQ2hyb21lIDIx
KQorICAgIC8vIFdlIGFsbG93IHRoaXMgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBJRTgvOSB0aGF0IHRo
cm93cyBhbiBlcnJvcgorICAgIC8vIHdoZW5ldmVyIGBkb2N1bWVudC5hY3RpdmVFbGVtZW50YCBp
cyBhY2Nlc3NlZCBvbiBhbiBpZnJhbWUKKyAgICAvLyBTbywgd2UgYWxsb3cgOmZvY3VzIHRvIHBh
c3MgdGhyb3VnaCBRU0EgYWxsIHRoZSB0aW1lIHRvIGF2b2lkIHRoZSBJRSBlcnJvcgorICAgIC8v
IFNlZSBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzNzgKKyAgICByYnVnZ3lRU0Eg
PSBbXTsKKworICAgIGlmICggKHN1cHBvcnQucXNhID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5x
dWVyeVNlbGVjdG9yQWxsICkpICkgeworICAgICAgICAvLyBCdWlsZCBRU0EgcmVnZXgKKyAgICAg
ICAgLy8gUmVnZXggc3RyYXRlZ3kgYWRvcHRlZCBmcm9tIERpZWdvIFBlcmluaQorICAgICAgICBh
c3NlcnQoZnVuY3Rpb24oIGVsICkgeworICAgICAgICAgICAgLy8gU2VsZWN0IGlzIHNldCB0byBl
bXB0eSBzdHJpbmcgb24gcHVycG9zZQorICAgICAgICAgICAgLy8gVGhpcyBpcyB0byB0ZXN0IElF
J3MgdHJlYXRtZW50IG9mIG5vdCBleHBsaWNpdGx5CisgICAgICAgICAgICAvLyBzZXR0aW5nIGEg
Ym9vbGVhbiBjb250ZW50IGF0dHJpYnV0ZSwKKyAgICAgICAgICAgIC8vIHNpbmNlIGl0cyBwcmVz
ZW5jZSBzaG91bGQgYmUgZW5vdWdoCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3MuanF1ZXJ5
LmNvbS90aWNrZXQvMTIzNTkKKyAgICAgICAgICAgIGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICku
aW5uZXJIVE1MID0gIjxhIGlkPSciICsgZXhwYW5kbyArICInPjwvYT4iICsKKyAgICAgICAgICAg
ICAgICAiPHNlbGVjdCBpZD0nIiArIGV4cGFuZG8gKyAiLVxyXFwnIG1zYWxsb3djYXB0dXJlPScn
PiIgKworICAgICAgICAgICAgICAgICI8b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2Vs
ZWN0PiI7CisKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFOCwgT3BlcmEgMTEtMTIuMTYKKyAg
ICAgICAgICAgIC8vIE5vdGhpbmcgc2hvdWxkIGJlIHNlbGVjdGVkIHdoZW4gZW1wdHkgc3RyaW5n
cyBmb2xsb3cgXj0gb3IgJD0gb3IgKj0KKyAgICAgICAgICAgIC8vIFRoZSB0ZXN0IGF0dHJpYnV0
ZSBtdXN0IGJlIHVua25vd24gaW4gT3BlcmEgYnV0ICJzYWZlIiBmb3IgV2luUlQKKyAgICAgICAg
ICAgIC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaWUvaGg0NjUz
ODguYXNweCNhdHRyaWJ1dGVfc2VjdGlvbgorICAgICAgICAgICAgaWYgKCBlbC5xdWVyeVNlbGVj
dG9yQWxsKCJbbXNhbGxvd2NhcHR1cmVePScnXSIpLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAg
ICByYnVnZ3lRU0EucHVzaCggIlsqXiRdPSIgKyB3aGl0ZXNwYWNlICsgIiooPzonJ3xcIlwiKSIg
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU3VwcG9ydDogSUU4CisgICAgICAg
ICAgICAvLyBCb29sZWFuIGF0dHJpYnV0ZXMgYW5kICJ2YWx1ZSIgYXJlIG5vdCB0cmVhdGVkIGNv
cnJlY3RseQorICAgICAgICAgICAgaWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVk
XSIpLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCggIlxcWyIgKyB3
aGl0ZXNwYWNlICsgIiooPzp2YWx1ZXwiICsgYm9vbGVhbnMgKyAiKSIgKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gU3VwcG9ydDogQ2hyb21lPDI5LCBBbmRyb2lkPDQuNCwgU2Fm
YXJpPDcuMCssIGlPUzw3LjArLCBQaGFudG9tSlM8MS45LjgrCisgICAgICAgICAgICBpZiAoICFl
bC5xdWVyeVNlbGVjdG9yQWxsKCAiW2lkfj0iICsgZXhwYW5kbyArICItXSIgKS5sZW5ndGggKSB7
CisgICAgICAgICAgICAgICAgcmJ1Z2d5UVNBLnB1c2goIn49Iik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIFdlYmtpdC9PcGVyYSAtIDpjaGVja2VkIHNob3VsZCByZXR1cm4gc2Vs
ZWN0ZWQgb3B0aW9uIGVsZW1lbnRzCisgICAgICAgICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9U
Ui8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZAorICAgICAgICAgICAg
Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHMKKyAg
ICAgICAgICAgIGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RoICkg
eworICAgICAgICAgICAgICAgIHJidWdneVFTQS5wdXNoKCI6Y2hlY2tlZCIpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBTdXBwb3J0OiBTYWZhcmkgOCssIGlPUyA4KworICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjg1MQor
ICAgICAgICAgICAgLy8gSW4tcGFnZSBgc2VsZWN0b3IjaWQgc2libGluZy1jb21iaW5hdG9yIHNl
bGVjdG9yYCBmYWlscworICAgICAgICAgICAgaWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggImEj
IiArIGV4cGFuZG8gKyAiKyoiICkubGVuZ3RoICkgeworICAgICAgICAgICAgICAgIHJidWdneVFT
QS5wdXNoKCIuIy4rWyt+XSIpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAg
ICBhc3NlcnQoZnVuY3Rpb24oIGVsICkgeworICAgICAgICAgICAgZWwuaW5uZXJIVE1MID0gIjxh
IGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+IiArCisgICAgICAgICAgICAgICAgIjxz
ZWxlY3QgZGlzYWJsZWQ9J2Rpc2FibGVkJz48b3B0aW9uLz48L3NlbGVjdD4iOworCisgICAgICAg
ICAgICAvLyBTdXBwb3J0OiBXaW5kb3dzIDggTmF0aXZlIEFwcHMKKyAgICAgICAgICAgIC8vIFRo
ZSB0eXBlIGFuZCBuYW1lIGF0dHJpYnV0ZXMgYXJlIHJlc3RyaWN0ZWQgZHVyaW5nIC5pbm5lckhU
TUwgYXNzaWdubWVudAorICAgICAgICAgICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiaW5wdXQiKTsKKyAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSggInR5cGUiLCAi
aGlkZGVuIiApOworICAgICAgICAgICAgZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICkuc2V0QXR0cmli
dXRlKCAibmFtZSIsICJEIiApOworCisgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRTgKKyAgICAg
ICAgICAgIC8vIEVuZm9yY2UgY2FzZS1zZW5zaXRpdml0eSBvZiBuYW1lIGF0dHJpYnV0ZQorICAg
ICAgICAgICAgaWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT1kXSIpLmxlbmd0aCApIHsK
KyAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCggIm5hbWUiICsgd2hpdGVzcGFjZSArICIq
WypeJHwhfl0/PSIgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRkYgMy41IC0g
OmVuYWJsZWQvOmRpc2FibGVkIGFuZCBoaWRkZW4gZWxlbWVudHMgKGhpZGRlbiBlbGVtZW50cyBh
cmUgc3RpbGwgZW5hYmxlZCkKKyAgICAgICAgICAgIC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBh
bmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzCisgICAgICAgICAgICBpZiAoIGVsLnF1ZXJ5U2Vs
ZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RoICE9PSAyICkgeworICAgICAgICAgICAgICAgIHJi
dWdneVFTQS5wdXNoKCAiOmVuYWJsZWQiLCAiOmRpc2FibGVkIiApOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRTktMTErCisgICAgICAgICAgICAvLyBJRSdzIDpk
aXNhYmxlZCBzZWxlY3RvciBkb2VzIG5vdCBwaWNrIHVwIHRoZSBjaGlsZHJlbiBvZiBkaXNhYmxl
ZCBmaWVsZHNldHMKKyAgICAgICAgICAgIGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuZGlzYWJs
ZWQgPSB0cnVlOworICAgICAgICAgICAgaWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCI6ZGlzYWJs
ZWQiKS5sZW5ndGggIT09IDIgKSB7CisgICAgICAgICAgICAgICAgcmJ1Z2d5UVNBLnB1c2goICI6
ZW5hYmxlZCIsICI6ZGlzYWJsZWQiICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IE9wZXJhIDEwLTExIGRvZXMgbm90IHRocm93IG9uIHBvc3QtY29tbWEgaW52YWxpZCBwc2V1ZG9z
CisgICAgICAgICAgICBlbC5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4Iik7CisgICAgICAgICAgICBy
YnVnZ3lRU0EucHVzaCgiLC4qOiIpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBpZiAoIChz
dXBwb3J0Lm1hdGNoZXNTZWxlY3RvciA9IHJuYXRpdmUudGVzdCggKG1hdGNoZXMgPSBkb2NFbGVt
Lm1hdGNoZXMgfHwKKyAgICAgICAgZG9jRWxlbS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHwKKyAg
ICAgICAgZG9jRWxlbS5tb3pNYXRjaGVzU2VsZWN0b3IgfHwKKyAgICAgICAgZG9jRWxlbS5vTWF0
Y2hlc1NlbGVjdG9yIHx8CisgICAgICAgIGRvY0VsZW0ubXNNYXRjaGVzU2VsZWN0b3IpICkpICkg
eworCisgICAgICAgIGFzc2VydChmdW5jdGlvbiggZWwgKSB7CisgICAgICAgICAgICAvLyBDaGVj
ayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0b3IKKyAgICAgICAg
ICAgIC8vIG9uIGEgZGlzY29ubmVjdGVkIG5vZGUgKElFIDkpCisgICAgICAgICAgICBzdXBwb3J0
LmRpc2Nvbm5lY3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBlbCwgIioiICk7CisKKyAgICAgICAg
ICAgIC8vIFRoaXMgc2hvdWxkIGZhaWwgd2l0aCBhbiBleGNlcHRpb24KKyAgICAgICAgICAgIC8v
IEdlY2tvIGRvZXMgbm90IGVycm9yLCByZXR1cm5zIGZhbHNlIGluc3RlYWQKKyAgICAgICAgICAg
IG1hdGNoZXMuY2FsbCggZWwsICJbcyE9JyddOngiICk7CisgICAgICAgICAgICByYnVnZ3lNYXRj
aGVzLnB1c2goICIhPSIsIHBzZXVkb3MgKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcmJ1
Z2d5UVNBID0gcmJ1Z2d5UVNBLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lRU0Euam9pbigi
fCIpICk7CisgICAgcmJ1Z2d5TWF0Y2hlcyA9IHJidWdneU1hdGNoZXMubGVuZ3RoICYmIG5ldyBS
ZWdFeHAoIHJidWdneU1hdGNoZXMuam9pbigifCIpICk7CisKKyAgICAvKiBDb250YWlucworICAg
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gKi8KKyAgICBoYXNDb21wYXJlID0gcm5hdGl2ZS50ZXN0KCBkb2NFbGVt
LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICk7CisKKyAgICAvLyBFbGVtZW50IGNvbnRhaW5zIGFu
b3RoZXIKKyAgICAvLyBQdXJwb3NlZnVsbHkgc2VsZi1leGNsdXNpdmUKKyAgICAvLyBBcyBpbiwg
YW4gZWxlbWVudCBkb2VzIG5vdCBjb250YWluIGl0c2VsZgorICAgIGNvbnRhaW5zID0gaGFzQ29t
cGFyZSB8fCBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29udGFpbnMgKSA/CisgICAgICAgIGZ1bmN0
aW9uKCBhLCBiICkgeworICAgICAgICAgICAgdmFyIGFkb3duID0gYS5ub2RlVHlwZSA9PT0gOSA/
IGEuZG9jdW1lbnRFbGVtZW50IDogYSwKKyAgICAgICAgICAgICAgICBidXAgPSBiICYmIGIucGFy
ZW50Tm9kZTsKKyAgICAgICAgICAgIHJldHVybiBhID09PSBidXAgfHwgISEoIGJ1cCAmJiBidXAu
bm9kZVR5cGUgPT09IDEgJiYgKAorICAgICAgICAgICAgICAgIGFkb3duLmNvbnRhaW5zID8KKyAg
ICAgICAgICAgICAgICAgICAgYWRvd24uY29udGFpbnMoIGJ1cCApIDoKKyAgICAgICAgICAgICAg
ICAgICAgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0
aW9uKCBidXAgKSAmIDE2CisgICAgICAgICAgICApKTsKKyAgICAgICAgfSA6CisgICAgICAgIGZ1
bmN0aW9uKCBhLCBiICkgeworICAgICAgICAgICAgaWYgKCBiICkgeworICAgICAgICAgICAgICAg
IHdoaWxlICggKGIgPSBiLnBhcmVudE5vZGUpICkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
IGIgPT09IGEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfTsKKworICAgIC8qIFNvcnRpbmcKKyAgICAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tICovCisKKyAgICAvLyBEb2N1bWVudCBvcmRlciBzb3J0aW5nCisgICAgc29y
dE9yZGVyID0gaGFzQ29tcGFyZSA/CisgICAgZnVuY3Rpb24oIGEsIGIgKSB7CisKKyAgICAgICAg
Ly8gRmxhZyBmb3IgZHVwbGljYXRlIHJlbW92YWwKKyAgICAgICAgaWYgKCBhID09PSBiICkgewor
ICAgICAgICAgICAgaGFzRHVwbGljYXRlID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gU29ydCBvbiBtZXRob2QgZXhpc3RlbmNlIGlmIG9ubHkg
b25lIGlucHV0IGhhcyBjb21wYXJlRG9jdW1lbnRQb3NpdGlvbgorICAgICAgICB2YXIgY29tcGFy
ZSA9ICFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIC0gIWIuY29tcGFyZURvY3VtZW50UG9zaXRp
b247CisgICAgICAgIGlmICggY29tcGFyZSApIHsKKyAgICAgICAgICAgIHJldHVybiBjb21wYXJl
OworICAgICAgICB9CisKKyAgICAgICAgLy8gQ2FsY3VsYXRlIHBvc2l0aW9uIGlmIGJvdGggaW5w
dXRzIGJlbG9uZyB0byB0aGUgc2FtZSBkb2N1bWVudAorICAgICAgICBjb21wYXJlID0gKCBhLm93
bmVyRG9jdW1lbnQgfHwgYSApID09PSAoIGIub3duZXJEb2N1bWVudCB8fCBiICkgPworICAgICAg
ICAgICAgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYiApIDoKKworICAgICAgICAgICAgLy8g
T3RoZXJ3aXNlIHdlIGtub3cgdGhleSBhcmUgZGlzY29ubmVjdGVkCisgICAgICAgICAgICAxOwor
CisgICAgICAgIC8vIERpc2Nvbm5lY3RlZCBub2RlcworICAgICAgICBpZiAoIGNvbXBhcmUgJiAx
IHx8CisgICAgICAgICAgICAoIXN1cHBvcnQuc29ydERldGFjaGVkICYmIGIuY29tcGFyZURvY3Vt
ZW50UG9zaXRpb24oIGEgKSA9PT0gY29tcGFyZSkgKSB7CisKKyAgICAgICAgICAgIC8vIENob29z
ZSB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IGlzIHJlbGF0ZWQgdG8gb3VyIHByZWZlcnJlZCBkb2N1
bWVudAorICAgICAgICAgICAgaWYgKCBhID09PSBkb2N1bWVudCB8fCBhLm93bmVyRG9jdW1lbnQg
PT09IHByZWZlcnJlZERvYyAmJiBjb250YWlucyhwcmVmZXJyZWREb2MsIGEpICkgeworICAgICAg
ICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggYiA9
PT0gZG9jdW1lbnQgfHwgYi5vd25lckRvY3VtZW50ID09PSBwcmVmZXJyZWREb2MgJiYgY29udGFp
bnMocHJlZmVycmVkRG9jLCBiKSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gTWFpbnRhaW4gb3JpZ2luYWwgb3JkZXIKKyAgICAg
ICAgICAgIHJldHVybiBzb3J0SW5wdXQgPworICAgICAgICAgICAgICAgICggaW5kZXhPZiggc29y
dElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDoKKyAgICAgICAgICAgICAg
ICAwOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNvbXBhcmUgJiA0ID8gLTEgOiAxOwor
ICAgIH0gOgorICAgIGZ1bmN0aW9uKCBhLCBiICkgeworICAgICAgICAvLyBFeGl0IGVhcmx5IGlm
IHRoZSBub2RlcyBhcmUgaWRlbnRpY2FsCisgICAgICAgIGlmICggYSA9PT0gYiApIHsKKyAgICAg
ICAgICAgIGhhc0R1cGxpY2F0ZSA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgfQorCisgICAgICAgIHZhciBjdXIsCisgICAgICAgICAgICBpID0gMCwKKyAgICAgICAgICAg
IGF1cCA9IGEucGFyZW50Tm9kZSwKKyAgICAgICAgICAgIGJ1cCA9IGIucGFyZW50Tm9kZSwKKyAg
ICAgICAgICAgIGFwID0gWyBhIF0sCisgICAgICAgICAgICBicCA9IFsgYiBdOworCisgICAgICAg
IC8vIFBhcmVudGxlc3Mgbm9kZXMgYXJlIGVpdGhlciBkb2N1bWVudHMgb3IgZGlzY29ubmVjdGVk
CisgICAgICAgIGlmICggIWF1cCB8fCAhYnVwICkgeworICAgICAgICAgICAgcmV0dXJuIGEgPT09
IGRvY3VtZW50ID8gLTEgOgorICAgICAgICAgICAgICAgIGIgPT09IGRvY3VtZW50ID8gMSA6Cisg
ICAgICAgICAgICAgICAgYXVwID8gLTEgOgorICAgICAgICAgICAgICAgIGJ1cCA/IDEgOgorICAg
ICAgICAgICAgICAgIHNvcnRJbnB1dCA/CisgICAgICAgICAgICAgICAgKCBpbmRleE9mKCBzb3J0
SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOgorICAgICAgICAgICAgICAg
IDA7CisKKyAgICAgICAgLy8gSWYgdGhlIG5vZGVzIGFyZSBzaWJsaW5ncywgd2UgY2FuIGRvIGEg
cXVpY2sgY2hlY2sKKyAgICAgICAgfSBlbHNlIGlmICggYXVwID09PSBidXAgKSB7CisgICAgICAg
ICAgICByZXR1cm4gc2libGluZ0NoZWNrKCBhLCBiICk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBPdGhlcndpc2Ugd2UgbmVlZCBmdWxsIGxpc3RzIG9mIHRoZWlyIGFuY2VzdG9ycyBmb3IgY29t
cGFyaXNvbgorICAgICAgICBjdXIgPSBhOworICAgICAgICB3aGlsZSAoIChjdXIgPSBjdXIucGFy
ZW50Tm9kZSkgKSB7CisgICAgICAgICAgICBhcC51bnNoaWZ0KCBjdXIgKTsKKyAgICAgICAgfQor
ICAgICAgICBjdXIgPSBiOworICAgICAgICB3aGlsZSAoIChjdXIgPSBjdXIucGFyZW50Tm9kZSkg
KSB7CisgICAgICAgICAgICBicC51bnNoaWZ0KCBjdXIgKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIFdhbGsgZG93biB0aGUgdHJlZSBsb29raW5nIGZvciBhIGRpc2NyZXBhbmN5CisgICAgICAg
IHdoaWxlICggYXBbaV0gPT09IGJwW2ldICkgeworICAgICAgICAgICAgaSsrOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIGkgPworICAgICAgICAgICAgLy8gRG8gYSBzaWJsaW5nIGNoZWNr
IGlmIHRoZSBub2RlcyBoYXZlIGEgY29tbW9uIGFuY2VzdG9yCisgICAgICAgICAgICBzaWJsaW5n
Q2hlY2soIGFwW2ldLCBicFtpXSApIDoKKworICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIG5vZGVz
IGluIG91ciBkb2N1bWVudCBzb3J0IGZpcnN0CisgICAgICAgICAgICBhcFtpXSA9PT0gcHJlZmVy
cmVkRG9jID8gLTEgOgorICAgICAgICAgICAgYnBbaV0gPT09IHByZWZlcnJlZERvYyA/IDEgOgor
ICAgICAgICAgICAgMDsKKyAgICB9OworCisgICAgcmV0dXJuIGRvY3VtZW50OworfTsKKworU2l6
emxlLm1hdGNoZXMgPSBmdW5jdGlvbiggZXhwciwgZWxlbWVudHMgKSB7CisgICAgcmV0dXJuIFNp
enpsZSggZXhwciwgbnVsbCwgbnVsbCwgZWxlbWVudHMgKTsKK307CisKK1NpenpsZS5tYXRjaGVz
U2VsZWN0b3IgPSBmdW5jdGlvbiggZWxlbSwgZXhwciApIHsKKyAgICAvLyBTZXQgZG9jdW1lbnQg
dmFycyBpZiBuZWVkZWQKKyAgICBpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAh
PT0gZG9jdW1lbnQgKSB7CisgICAgICAgIHNldERvY3VtZW50KCBlbGVtICk7CisgICAgfQorCisg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgYXR0cmlidXRlIHNlbGVjdG9ycyBhcmUgcXVvdGVkCisgICAg
ZXhwciA9IGV4cHIucmVwbGFjZSggcmF0dHJpYnV0ZVF1b3RlcywgIj0nJDEnXSIgKTsKKworICAg
IGlmICggc3VwcG9ydC5tYXRjaGVzU2VsZWN0b3IgJiYgZG9jdW1lbnRJc0hUTUwgJiYKKyAgICAg
ICAgIWNvbXBpbGVyQ2FjaGVbIGV4cHIgKyAiICIgXSAmJgorICAgICAgICAoICFyYnVnZ3lNYXRj
aGVzIHx8ICFyYnVnZ3lNYXRjaGVzLnRlc3QoIGV4cHIgKSApICYmCisgICAgICAgICggIXJidWdn
eVFTQSAgICAgfHwgIXJidWdneVFTQS50ZXN0KCBleHByICkgKSApIHsKKworICAgICAgICB0cnkg
eworICAgICAgICAgICAgdmFyIHJldCA9IG1hdGNoZXMuY2FsbCggZWxlbSwgZXhwciApOworCisg
ICAgICAgICAgICAvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9yIHJldHVybnMgZmFsc2Ugb24gZGlz
Y29ubmVjdGVkIG5vZGVzCisgICAgICAgICAgICBpZiAoIHJldCB8fCBzdXBwb3J0LmRpc2Nvbm5l
Y3RlZE1hdGNoIHx8CisgICAgICAgICAgICAgICAgICAgIC8vIEFzIHdlbGwsIGRpc2Nvbm5lY3Rl
ZCBub2RlcyBhcmUgc2FpZCB0byBiZSBpbiBhIGRvY3VtZW50CisgICAgICAgICAgICAgICAgICAg
IC8vIGZyYWdtZW50IGluIElFIDkKKyAgICAgICAgICAgICAgICAgICAgZWxlbS5kb2N1bWVudCAm
JiBlbGVtLmRvY3VtZW50Lm5vZGVUeXBlICE9PSAxMSApIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gcmV0OworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChlKSB7fQorICAgIH0KKwor
ICAgIHJldHVybiBTaXp6bGUoIGV4cHIsIGRvY3VtZW50LCBudWxsLCBbIGVsZW0gXSApLmxlbmd0
aCA+IDA7Cit9OworCitTaXp6bGUuY29udGFpbnMgPSBmdW5jdGlvbiggY29udGV4dCwgZWxlbSAp
IHsKKyAgICAvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWQKKyAgICBpZiAoICggY29udGV4
dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgKSAhPT0gZG9jdW1lbnQgKSB7CisgICAgICAgIHNl
dERvY3VtZW50KCBjb250ZXh0ICk7CisgICAgfQorICAgIHJldHVybiBjb250YWlucyggY29udGV4
dCwgZWxlbSApOworfTsKKworU2l6emxlLmF0dHIgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsK
KyAgICAvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWQKKyAgICBpZiAoICggZWxlbS5vd25l
ckRvY3VtZW50IHx8IGVsZW0gKSAhPT0gZG9jdW1lbnQgKSB7CisgICAgICAgIHNldERvY3VtZW50
KCBlbGVtICk7CisgICAgfQorCisgICAgdmFyIGZuID0gRXhwci5hdHRySGFuZGxlWyBuYW1lLnRv
TG93ZXJDYXNlKCkgXSwKKyAgICAgICAgLy8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBPYmplY3QucHJv
dG90eXBlIHByb3BlcnRpZXMgKGpRdWVyeSAjMTM4MDcpCisgICAgICAgIHZhbCA9IGZuICYmIGhh
c093bi5jYWxsKCBFeHByLmF0dHJIYW5kbGUsIG5hbWUudG9Mb3dlckNhc2UoKSApID8KKyAgICAg
ICAgICAgIGZuKCBlbGVtLCBuYW1lLCAhZG9jdW1lbnRJc0hUTUwgKSA6CisgICAgICAgICAgICB1
bmRlZmluZWQ7CisKKyAgICByZXR1cm4gdmFsICE9PSB1bmRlZmluZWQgPworICAgICAgICB2YWwg
OgorICAgICAgICBzdXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWRvY3VtZW50SXNIVE1MID8KKyAgICAg
ICAgICAgIGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICkgOgorICAgICAgICAgICAgKHZhbCA9IGVs
ZW0uZ2V0QXR0cmlidXRlTm9kZShuYW1lKSkgJiYgdmFsLnNwZWNpZmllZCA/CisgICAgICAgICAg
ICAgICAgdmFsLnZhbHVlIDoKKyAgICAgICAgICAgICAgICBudWxsOworfTsKKworU2l6emxlLmVz
Y2FwZSA9IGZ1bmN0aW9uKCBzZWwgKSB7CisgICAgcmV0dXJuIChzZWwgKyAiIikucmVwbGFjZSgg
cmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApOworfTsKKworU2l6emxlLmVycm9yID0gZnVuY3Rpb24o
IG1zZyApIHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoICJTeW50YXggZXJyb3IsIHVucmVjb2duaXpl
ZCBleHByZXNzaW9uOiAiICsgbXNnICk7Cit9OworCisvKioKKyAqIERvY3VtZW50IHNvcnRpbmcg
YW5kIHJlbW92aW5nIGR1cGxpY2F0ZXMKKyAqIEBwYXJhbSB7QXJyYXlMaWtlfSByZXN1bHRzCisg
Ki8KK1NpenpsZS51bmlxdWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7CisgICAgdmFyIGVs
ZW0sCisgICAgICAgIGR1cGxpY2F0ZXMgPSBbXSwKKyAgICAgICAgaiA9IDAsCisgICAgICAgIGkg
PSAwOworCisgICAgLy8gVW5sZXNzIHdlICprbm93KiB3ZSBjYW4gZGV0ZWN0IGR1cGxpY2F0ZXMs
IGFzc3VtZSB0aGVpciBwcmVzZW5jZQorICAgIGhhc0R1cGxpY2F0ZSA9ICFzdXBwb3J0LmRldGVj
dER1cGxpY2F0ZXM7CisgICAgc29ydElucHV0ID0gIXN1cHBvcnQuc29ydFN0YWJsZSAmJiByZXN1
bHRzLnNsaWNlKCAwICk7CisgICAgcmVzdWx0cy5zb3J0KCBzb3J0T3JkZXIgKTsKKworICAgIGlm
ICggaGFzRHVwbGljYXRlICkgeworICAgICAgICB3aGlsZSAoIChlbGVtID0gcmVzdWx0c1tpKytd
KSApIHsKKyAgICAgICAgICAgIGlmICggZWxlbSA9PT0gcmVzdWx0c1sgaSBdICkgeworICAgICAg
ICAgICAgICAgIGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICB3aGlsZSAoIGotLSApIHsKKyAgICAgICAgICAgIHJlc3VsdHMuc3BsaWNl
KCBkdXBsaWNhdGVzWyBqIF0sIDEgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENsZWFy
IGlucHV0IGFmdGVyIHNvcnRpbmcgdG8gcmVsZWFzZSBvYmplY3RzCisgICAgLy8gU2VlIGh0dHBz
Oi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL3B1bGwvMjI1CisgICAgc29ydElucHV0ID0gbnVs
bDsKKworICAgIHJldHVybiByZXN1bHRzOworfTsKKworLyoqCisgKiBVdGlsaXR5IGZ1bmN0aW9u
IGZvciByZXRyaWV2aW5nIHRoZSB0ZXh0IHZhbHVlIG9mIGFuIGFycmF5IG9mIERPTSBub2Rlcwor
ICogQHBhcmFtIHtBcnJheXxFbGVtZW50fSBlbGVtCisgKi8KK2dldFRleHQgPSBTaXp6bGUuZ2V0
VGV4dCA9IGZ1bmN0aW9uKCBlbGVtICkgeworICAgIHZhciBub2RlLAorICAgICAgICByZXQgPSAi
IiwKKyAgICAgICAgaSA9IDAsCisgICAgICAgIG5vZGVUeXBlID0gZWxlbS5ub2RlVHlwZTsKKwor
ICAgIGlmICggIW5vZGVUeXBlICkgeworICAgICAgICAvLyBJZiBubyBub2RlVHlwZSwgdGhpcyBp
cyBleHBlY3RlZCB0byBiZSBhbiBhcnJheQorICAgICAgICB3aGlsZSAoIChub2RlID0gZWxlbVtp
KytdKSApIHsKKyAgICAgICAgICAgIC8vIERvIG5vdCB0cmF2ZXJzZSBjb21tZW50IG5vZGVzCisg
ICAgICAgICAgICByZXQgKz0gZ2V0VGV4dCggbm9kZSApOworICAgICAgICB9CisgICAgfSBlbHNl
IGlmICggbm9kZVR5cGUgPT09IDEgfHwgbm9kZVR5cGUgPT09IDkgfHwgbm9kZVR5cGUgPT09IDEx
ICkgeworICAgICAgICAvLyBVc2UgdGV4dENvbnRlbnQgZm9yIGVsZW1lbnRzCisgICAgICAgIC8v
IGlubmVyVGV4dCB1c2FnZSByZW1vdmVkIGZvciBjb25zaXN0ZW5jeSBvZiBuZXcgbGluZXMgKGpR
dWVyeSAjMTExNTMpCisgICAgICAgIGlmICggdHlwZW9mIGVsZW0udGV4dENvbnRlbnQgPT09ICJz
dHJpbmciICkgeworICAgICAgICAgICAgcmV0dXJuIGVsZW0udGV4dENvbnRlbnQ7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUcmF2ZXJzZSBpdHMgY2hpbGRyZW4KKyAgICAgICAg
ICAgIGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRT
aWJsaW5nICkgeworICAgICAgICAgICAgICAgIHJldCArPSBnZXRUZXh0KCBlbGVtICk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMyB8fCBu
b2RlVHlwZSA9PT0gNCApIHsKKyAgICAgICAgcmV0dXJuIGVsZW0ubm9kZVZhbHVlOworICAgIH0K
KyAgICAvLyBEbyBub3QgaW5jbHVkZSBjb21tZW50IG9yIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24g
bm9kZXMKKworICAgIHJldHVybiByZXQ7Cit9OworCitFeHByID0gU2l6emxlLnNlbGVjdG9ycyA9
IHsKKworICAgIC8vIENhbiBiZSBhZGp1c3RlZCBieSB0aGUgdXNlcgorICAgIGNhY2hlTGVuZ3Ro
OiA1MCwKKworICAgIGNyZWF0ZVBzZXVkbzogbWFya0Z1bmN0aW9uLAorCisgICAgbWF0Y2g6IG1h
dGNoRXhwciwKKworICAgIGF0dHJIYW5kbGU6IHt9LAorCisgICAgZmluZDoge30sCisKKyAgICBy
ZWxhdGl2ZTogeworICAgICAgICAiPiI6IHsgZGlyOiAicGFyZW50Tm9kZSIsIGZpcnN0OiB0cnVl
IH0sCisgICAgICAgICIgIjogeyBkaXI6ICJwYXJlbnROb2RlIiB9LAorICAgICAgICAiKyI6IHsg
ZGlyOiAicHJldmlvdXNTaWJsaW5nIiwgZmlyc3Q6IHRydWUgfSwKKyAgICAgICAgIn4iOiB7IGRp
cjogInByZXZpb3VzU2libGluZyIgfQorICAgIH0sCisKKyAgICBwcmVGaWx0ZXI6IHsKKyAgICAg
ICAgIkFUVFIiOiBmdW5jdGlvbiggbWF0Y2ggKSB7CisgICAgICAgICAgICBtYXRjaFsxXSA9IG1h
dGNoWzFdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7CisKKyAgICAgICAgICAgIC8v
IE1vdmUgdGhlIGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVvdGVkIG9yIHVucXVv
dGVkCisgICAgICAgICAgICBtYXRjaFszXSA9ICggbWF0Y2hbM10gfHwgbWF0Y2hbNF0gfHwgbWF0
Y2hbNV0gfHwgIiIgKS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApOworCisgICAgICAg
ICAgICBpZiAoIG1hdGNoWzJdID09PSAifj0iICkgeworICAgICAgICAgICAgICAgIG1hdGNoWzNd
ID0gIiAiICsgbWF0Y2hbM10gKyAiICI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJl
dHVybiBtYXRjaC5zbGljZSggMCwgNCApOworICAgICAgICB9LAorCisgICAgICAgICJDSElMRCI6
IGZ1bmN0aW9uKCBtYXRjaCApIHsKKyAgICAgICAgICAgIC8qIG1hdGNoZXMgZnJvbSBtYXRjaEV4
cHJbIkNISUxEIl0KKyAgICAgICAgICAgICAgICAxIHR5cGUgKG9ubHl8bnRofC4uLikKKyAgICAg
ICAgICAgICAgICAyIHdoYXQgKGNoaWxkfG9mLXR5cGUpCisgICAgICAgICAgICAgICAgMyBhcmd1
bWVudCAoZXZlbnxvZGR8XGQqfFxkKm4oWystXVxkKyk/fC4uLikKKyAgICAgICAgICAgICAgICA0
IHhuLWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xkKm58KQorICAgICAgICAgICAg
ICAgIDUgc2lnbiBvZiB4bi1jb21wb25lbnQKKyAgICAgICAgICAgICAgICA2IHggb2YgeG4tY29t
cG9uZW50CisgICAgICAgICAgICAgICAgNyBzaWduIG9mIHktY29tcG9uZW50CisgICAgICAgICAg
ICAgICAgOCB5IG9mIHktY29tcG9uZW50CisgICAgICAgICAgICAqLworICAgICAgICAgICAgbWF0
Y2hbMV0gPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpOworCisgICAgICAgICAgICBpZiAoIG1hdGNo
WzFdLnNsaWNlKCAwLCAzICkgPT09ICJudGgiICkgeworICAgICAgICAgICAgICAgIC8vIG50aC0q
IHJlcXVpcmVzIGFyZ3VtZW50CisgICAgICAgICAgICAgICAgaWYgKCAhbWF0Y2hbM10gKSB7Cisg
ICAgICAgICAgICAgICAgICAgIFNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBudW1lcmljIHggYW5kIHkgcGFyYW1ldGVycyBm
b3IgRXhwci5maWx0ZXIuQ0hJTEQKKyAgICAgICAgICAgICAgICAvLyByZW1lbWJlciB0aGF0IGZh
bHNlL3RydWUgY2FzdCByZXNwZWN0aXZlbHkgdG8gMC8xCisgICAgICAgICAgICAgICAgbWF0Y2hb
NF0gPSArKCBtYXRjaFs0XSA/IG1hdGNoWzVdICsgKG1hdGNoWzZdIHx8IDEpIDogMiAqICggbWF0
Y2hbM10gPT09ICJldmVuIiB8fCBtYXRjaFszXSA9PT0gIm9kZCIgKSApOworICAgICAgICAgICAg
ICAgIG1hdGNoWzVdID0gKyggKCBtYXRjaFs3XSArIG1hdGNoWzhdICkgfHwgbWF0Y2hbM10gPT09
ICJvZGQiICk7CisKKyAgICAgICAgICAgIC8vIG90aGVyIHR5cGVzIHByb2hpYml0IGFyZ3VtZW50
cworICAgICAgICAgICAgfSBlbHNlIGlmICggbWF0Y2hbM10gKSB7CisgICAgICAgICAgICAgICAg
U2l6emxlLmVycm9yKCBtYXRjaFswXSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBy
ZXR1cm4gbWF0Y2g7CisgICAgICAgIH0sCisKKyAgICAgICAgIlBTRVVETyI6IGZ1bmN0aW9uKCBt
YXRjaCApIHsKKyAgICAgICAgICAgIHZhciBleGNlc3MsCisgICAgICAgICAgICAgICAgdW5xdW90
ZWQgPSAhbWF0Y2hbNl0gJiYgbWF0Y2hbMl07CisKKyAgICAgICAgICAgIGlmICggbWF0Y2hFeHBy
WyJDSElMRCJdLnRlc3QoIG1hdGNoWzBdICkgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51
bGw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEFjY2VwdCBxdW90ZWQgYXJndW1l
bnRzIGFzLWlzCisgICAgICAgICAgICBpZiAoIG1hdGNoWzNdICkgeworICAgICAgICAgICAgICAg
IG1hdGNoWzJdID0gbWF0Y2hbNF0gfHwgbWF0Y2hbNV0gfHwgIiI7CisKKyAgICAgICAgICAgIC8v
IFN0cmlwIGV4Y2VzcyBjaGFyYWN0ZXJzIGZyb20gdW5xdW90ZWQgYXJndW1lbnRzCisgICAgICAg
ICAgICB9IGVsc2UgaWYgKCB1bnF1b3RlZCAmJiBycHNldWRvLnRlc3QoIHVucXVvdGVkICkgJiYK
KyAgICAgICAgICAgICAgICAvLyBHZXQgZXhjZXNzIGZyb20gdG9rZW5pemUgKHJlY3Vyc2l2ZWx5
KQorICAgICAgICAgICAgICAgIChleGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSkg
JiYKKyAgICAgICAgICAgICAgICAvLyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNsb3NpbmcgcGFyZW50
aGVzaXMKKyAgICAgICAgICAgICAgICAoZXhjZXNzID0gdW5xdW90ZWQuaW5kZXhPZiggIikiLCB1
bnF1b3RlZC5sZW5ndGggLSBleGNlc3MgKSAtIHVucXVvdGVkLmxlbmd0aCkgKSB7CisKKyAgICAg
ICAgICAgICAgICAvLyBleGNlc3MgaXMgYSBuZWdhdGl2ZSBpbmRleAorICAgICAgICAgICAgICAg
IG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UoIDAsIGV4Y2VzcyApOworICAgICAgICAgICAgICAg
IG1hdGNoWzJdID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyApOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBSZXR1cm4gb25seSBjYXB0dXJlcyBuZWVkZWQgYnkgdGhlIHBzZXVk
byBmaWx0ZXIgbWV0aG9kICh0eXBlIGFuZCBhcmd1bWVudCkKKyAgICAgICAgICAgIHJldHVybiBt
YXRjaC5zbGljZSggMCwgMyApOworICAgICAgICB9CisgICAgfSwKKworICAgIGZpbHRlcjogewor
CisgICAgICAgICJUQUciOiBmdW5jdGlvbiggbm9kZU5hbWVTZWxlY3RvciApIHsKKyAgICAgICAg
ICAgIHZhciBub2RlTmFtZSA9IG5vZGVOYW1lU2VsZWN0b3IucmVwbGFjZSggcnVuZXNjYXBlLCBm
dW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgcmV0dXJuIG5vZGVOYW1lU2Vs
ZWN0b3IgPT09ICIqIiA/CisgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7IHJldHVybiB0cnVl
OyB9IDoKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgp
ID09PSBub2RlTmFtZTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAg
ICJDTEFTUyI6IGZ1bmN0aW9uKCBjbGFzc05hbWUgKSB7CisgICAgICAgICAgICB2YXIgcGF0dGVy
biA9IGNsYXNzQ2FjaGVbIGNsYXNzTmFtZSArICIgIiBdOworCisgICAgICAgICAgICByZXR1cm4g
cGF0dGVybiB8fAorICAgICAgICAgICAgICAgIChwYXR0ZXJuID0gbmV3IFJlZ0V4cCggIihefCIg
KyB3aGl0ZXNwYWNlICsgIikiICsgY2xhc3NOYW1lICsgIigiICsgd2hpdGVzcGFjZSArICJ8JCki
ICkpICYmCisgICAgICAgICAgICAgICAgY2xhc3NDYWNoZSggY2xhc3NOYW1lLCBmdW5jdGlvbigg
ZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdCggdHlwZW9m
IGVsZW0uY2xhc3NOYW1lID09PSAic3RyaW5nIiAmJiBlbGVtLmNsYXNzTmFtZSB8fCB0eXBlb2Yg
ZWxlbS5nZXRBdHRyaWJ1dGUgIT09ICJ1bmRlZmluZWQiICYmIGVsZW0uZ2V0QXR0cmlidXRlKCJj
bGFzcyIpIHx8ICIiICk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0sCisKKyAgICAg
ICAgIkFUVFIiOiBmdW5jdGlvbiggbmFtZSwgb3BlcmF0b3IsIGNoZWNrICkgeworICAgICAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgIHZhciByZXN1bHQg
PSBTaXp6bGUuYXR0ciggZWxlbSwgbmFtZSApOworCisgICAgICAgICAgICAgICAgaWYgKCByZXN1
bHQgPT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdG9yID09PSAi
IT0iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoICFvcGVyYXRvciAp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICIiOworCisgICAgICAgICAgICAgICAgcmV0dXJu
IG9wZXJhdG9yID09PSAiPSIgPyByZXN1bHQgPT09IGNoZWNrIDoKKyAgICAgICAgICAgICAgICAg
ICAgb3BlcmF0b3IgPT09ICIhPSIgPyByZXN1bHQgIT09IGNoZWNrIDoKKyAgICAgICAgICAgICAg
ICAgICAgb3BlcmF0b3IgPT09ICJePSIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sg
KSA9PT0gMCA6CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSAiKj0iID8gY2hlY2sg
JiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPiAtMSA6CisgICAgICAgICAgICAgICAgICAgIG9w
ZXJhdG9yID09PSAiJD0iID8gY2hlY2sgJiYgcmVzdWx0LnNsaWNlKCAtY2hlY2subGVuZ3RoICkg
PT09IGNoZWNrIDoKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPT09ICJ+PSIgPyAoICIg
IiArIHJlc3VsdC5yZXBsYWNlKCByd2hpdGVzcGFjZSwgIiAiICkgKyAiICIgKS5pbmRleE9mKCBj
aGVjayApID4gLTEgOgorICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9PT0gInw9IiA/IHJl
c3VsdCA9PT0gY2hlY2sgfHwgcmVzdWx0LnNsaWNlKCAwLCBjaGVjay5sZW5ndGggKyAxICkgPT09
IGNoZWNrICsgIi0iIDoKKyAgICAgICAgICAgICAgICAgICAgZmFsc2U7CisgICAgICAgICAgICB9
OworICAgICAgICB9LAorCisgICAgICAgICJDSElMRCI6IGZ1bmN0aW9uKCB0eXBlLCB3aGF0LCBh
cmd1bWVudCwgZmlyc3QsIGxhc3QgKSB7CisgICAgICAgICAgICB2YXIgc2ltcGxlID0gdHlwZS5z
bGljZSggMCwgMyApICE9PSAibnRoIiwKKyAgICAgICAgICAgICAgICBmb3J3YXJkID0gdHlwZS5z
bGljZSggLTQgKSAhPT0gImxhc3QiLAorICAgICAgICAgICAgICAgIG9mVHlwZSA9IHdoYXQgPT09
ICJvZi10eXBlIjsKKworICAgICAgICAgICAgcmV0dXJuIGZpcnN0ID09PSAxICYmIGxhc3QgPT09
IDAgPworCisgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXQgZm9yIDpudGgtKihuKQorICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ISFlbGVtLnBhcmVudE5vZGU7CisgICAgICAgICAgICAgICAgfSA6CisKKyAgICAgICAgICAgICAg
ICBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgeworICAgICAgICAgICAgICAgICAgICB2
YXIgY2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLCBub2RlLCBub2RlSW5kZXgsIHN0YXJ0
LAorICAgICAgICAgICAgICAgICAgICAgICAgZGlyID0gc2ltcGxlICE9PSBmb3J3YXJkID8gIm5l
eHRTaWJsaW5nIiA6ICJwcmV2aW91c1NpYmxpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAg
cGFyZW50ID0gZWxlbS5wYXJlbnROb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9
IG9mVHlwZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICB1c2VDYWNoZSA9ICF4bWwgJiYgIW9mVHlwZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRpZmYgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIHBhcmVudCApIHsK
KworICAgICAgICAgICAgICAgICAgICAgICAgLy8gOihmaXJzdHxsYXN0fG9ubHkpLShjaGlsZHxv
Zi10eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzaW1wbGUgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBkaXIgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUgPSBlbGVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAoIChub2RlID0gbm9kZVsgZGlyIF0pICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBvZlR5cGUgPworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5ub2RlVHlwZSA9PT0gMSAp
IHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBS
ZXZlcnNlIGRpcmVjdGlvbiBmb3IgOm9ubHktKiAoaWYgd2UgaGF2ZW4ndCB5ZXQgZG9uZSBzbykK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBkaXIgPSB0eXBlID09PSAi
b25seSIgJiYgIXN0YXJ0ICYmICJuZXh0U2libGluZyI7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IFsg
Zm9yd2FyZCA/IHBhcmVudC5maXJzdENoaWxkIDogcGFyZW50Lmxhc3RDaGlsZCBdOworCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBub24teG1sIDpudGgtY2hpbGQoLi4uKSBzdG9yZXMgY2Fj
aGUgZGF0YSBvbiBgcGFyZW50YAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmb3J3YXJk
ICYmIHVzZUNhY2hlICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2VlayBg
ZWxlbWAgZnJvbSBhIHByZXZpb3VzbHktY2FjaGVkIGluZGV4CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAuLi5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZSA9IHBhcmVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRSA8OSBvbmx5CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVy
dGllcyAoalF1ZXJ5IGdoLTE3MDkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVl
Q2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9KTsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBb
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBjYWNoZVsgMCBdID09
PSBkaXJydW5zICYmIGNhY2hlWyAxIF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlm
ZiA9IG5vZGVJbmRleCAmJiBjYWNoZVsgMiBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGUgPSBub2RlSW5kZXggJiYgcGFyZW50LmNoaWxkTm9kZXNbIG5vZGVJbmRleCBdOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAobm9kZSA9ICsrbm9kZUluZGV4ICYm
IG5vZGUgJiYgbm9kZVsgZGlyIF0gfHwKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBGYWxsYmFjayB0byBzZWVraW5nIGBlbGVtYCBmcm9tIHRoZSBzdGFydAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoZGlmZiA9IG5vZGVJbmRleCA9IDApIHx8IHN0YXJ0LnBv
cCgpKSApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIGZvdW5k
LCBjYWNoZSBpbmRleGVzIG9uIGBwYXJlbnRgIGFuZCBicmVhaworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgJiYgKytkaWZmICYmIG5vZGUg
PT09IGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVD
YWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBub2RlSW5kZXgsIGRpZmYgXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBw
cmV2aW91c2x5LWNhY2hlZCBlbGVtZW50IGluZGV4IGlmIGF2YWlsYWJsZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggdXNlQ2FjaGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIC4uLmluIGEgZ3ppcC1mcmllbmRseSB3YXkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZSA9IGVsZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKG5vZGVbIGV4cGFuZG8gXSA9IHt9
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRSA8OSBv
bmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmVuZCBhZ2FpbnN0IGNs
b25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dGVyQ2FjaGVbIG5vZGUudW5p
cXVlSUQgXSA9IHt9KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZSA9
IHVuaXF1ZUNhY2hlWyB0eXBlIF0gfHwgW107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZiA9IG5vZGVJbmRleDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB4
bWwgOm50aC1jaGlsZCguLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3IgOm50
aC1sYXN0LWNoaWxkKC4uLikgb3IgOm50aCgtbGFzdCk/LW9mLXR5cGUoLi4uKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggZGlmZiA9PT0gZmFsc2UgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgc2FtZSBsb29wIGFzIGFib3ZlIHRvIHNlZWsg
YGVsZW1gIGZyb20gdGhlIHN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdo
aWxlICggKG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGlmZiA9IG5vZGVJbmRleCA9IDApIHx8
IHN0YXJ0LnBvcCgpKSApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCAoIG9mVHlwZSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlLm5vZGVUeXBlID09PSAxICkgJiYKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2RpZmYgKSB7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWNoZSB0aGUgaW5kZXggb2YgZWFjaCBl
bmNvdW50ZXJlZCBlbGVtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCB1c2VDYWNoZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBd
ID0ge30pOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFN1cHBvcnQ6IElFIDw5IG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdo
LTE3MDkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1
ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJ
RCBdID0ge30pOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuaXF1ZUNhY2hlWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIGRpZmYgXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIG5vZGUgPT09IGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSW5jb3Jwb3JhdGUgdGhlIG9mZnNldCwgdGhlbiBjaGVjayBhZ2FpbnN0IGN5Y2xl
IHNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpZmYgLT0gbGFzdDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBkaWZmID09PSBmaXJzdCB8fCAoIGRpZmYgJSBmaXJzdCA9PT0g
MCAmJiBkaWZmIC8gZmlyc3QgPj0gMCApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICAiUFNFVURPIjogZnVuY3Rpb24oIHBz
ZXVkbywgYXJndW1lbnQgKSB7CisgICAgICAgICAgICAvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJl
IGNhc2UtaW5zZW5zaXRpdmUKKyAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3Nl
bGVjdG9ycy8jcHNldWRvLWNsYXNzZXMKKyAgICAgICAgICAgIC8vIFByaW9yaXRpemUgYnkgY2Fz
ZSBzZW5zaXRpdml0eSBpbiBjYXNlIGN1c3RvbSBwc2V1ZG9zIGFyZSBhZGRlZCB3aXRoIHVwcGVy
Y2FzZSBsZXR0ZXJzCisgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5o
ZXJpdHMgZnJvbSBwc2V1ZG9zCisgICAgICAgICAgICB2YXIgYXJncywKKyAgICAgICAgICAgICAg
ICBmbiA9IEV4cHIucHNldWRvc1sgcHNldWRvIF0gfHwgRXhwci5zZXRGaWx0ZXJzWyBwc2V1ZG8u
dG9Mb3dlckNhc2UoKSBdIHx8CisgICAgICAgICAgICAgICAgICAgIFNpenpsZS5lcnJvciggInVu
c3VwcG9ydGVkIHBzZXVkbzogIiArIHBzZXVkbyApOworCisgICAgICAgICAgICAvLyBUaGUgdXNl
ciBtYXkgdXNlIGNyZWF0ZVBzZXVkbyB0byBpbmRpY2F0ZSB0aGF0CisgICAgICAgICAgICAvLyBh
cmd1bWVudHMgYXJlIG5lZWRlZCB0byBjcmVhdGUgdGhlIGZpbHRlciBmdW5jdGlvbgorICAgICAg
ICAgICAgLy8ganVzdCBhcyBTaXp6bGUgZG9lcworICAgICAgICAgICAgaWYgKCBmblsgZXhwYW5k
byBdICkgeworICAgICAgICAgICAgICAgIHJldHVybiBmbiggYXJndW1lbnQgKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gQnV0IG1haW50YWluIHN1cHBvcnQgZm9yIG9sZCBzaWdu
YXR1cmVzCisgICAgICAgICAgICBpZiAoIGZuLmxlbmd0aCA+IDEgKSB7CisgICAgICAgICAgICAg
ICAgYXJncyA9IFsgcHNldWRvLCBwc2V1ZG8sICIiLCBhcmd1bWVudCBdOworICAgICAgICAgICAg
ICAgIHJldHVybiBFeHByLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoIHBzZXVkby50b0xvd2Vy
Q2FzZSgpICkgPworICAgICAgICAgICAgICAgICAgICBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNl
ZWQsIG1hdGNoZXMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaWR4LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBmbiggc2VlZCwgYXJndW1lbnQgKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gbWF0Y2hlZC5sZW5ndGg7CisgICAgICAgICAg
ICAgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZHggPSBpbmRleE9mKCBzZWVkLCBtYXRjaGVkW2ldICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VlZFsgaWR4IF0gPSAhKCBtYXRjaGVzWyBpZHggXSA9IG1hdGNoZWRbaV0gKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSkgOgorICAg
ICAgICAgICAgICAgICAgICBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmbiggZWxlbSwgMCwgYXJncyApOworICAgICAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZm47CisgICAgICAgIH0KKyAgICB9
LAorCisgICAgcHNldWRvczogeworICAgICAgICAvLyBQb3RlbnRpYWxseSBjb21wbGV4IHBzZXVk
b3MKKyAgICAgICAgIm5vdCI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VsZWN0b3IgKSB7Cisg
ICAgICAgICAgICAvLyBUcmltIHRoZSBzZWxlY3RvciBwYXNzZWQgdG8gY29tcGlsZQorICAgICAg
ICAgICAgLy8gdG8gYXZvaWQgdHJlYXRpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmcKKyAgICAgICAg
ICAgIC8vIHNwYWNlcyBhcyBjb21iaW5hdG9ycworICAgICAgICAgICAgdmFyIGlucHV0ID0gW10s
CisgICAgICAgICAgICAgICAgcmVzdWx0cyA9IFtdLAorICAgICAgICAgICAgICAgIG1hdGNoZXIg
PSBjb21waWxlKCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgIiQxIiApICk7CisKKyAgICAgICAg
ICAgIHJldHVybiBtYXRjaGVyWyBleHBhbmRvIF0gPworICAgICAgICAgICAgICAgIG1hcmtGdW5j
dGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcywgY29udGV4dCwgeG1sICkgeworICAgICAgICAg
ICAgICAgICAgICB2YXIgZWxlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVubWF0Y2hlZCA9
IG1hdGNoZXIoIHNlZWQsIG51bGwsIHhtbCwgW10gKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGkgPSBzZWVkLmxlbmd0aDsKKworICAgICAgICAgICAgICAgICAgICAvLyBNYXRjaCBlbGVtZW50
cyB1bm1hdGNoZWQgYnkgYG1hdGNoZXJgCisgICAgICAgICAgICAgICAgICAgIHdoaWxlICggaS0t
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9IHVubWF0Y2hlZFtpXSkg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlZFtpXSA9ICEobWF0Y2hlc1tpXSA9
IGVsZW0pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfSkgOgorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCBlbGVtLCBj
b250ZXh0LCB4bWwgKSB7CisgICAgICAgICAgICAgICAgICAgIGlucHV0WzBdID0gZWxlbTsKKyAg
ICAgICAgICAgICAgICAgICAgbWF0Y2hlciggaW5wdXQsIG51bGwsIHhtbCwgcmVzdWx0cyApOwor
ICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBrZWVwIHRoZSBlbGVtZW50IChpc3N1ZSAjMjk5
KQorICAgICAgICAgICAgICAgICAgICBpbnB1dFswXSA9IG51bGw7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAhcmVzdWx0cy5wb3AoKTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICB9
KSwKKworICAgICAgICAiaGFzIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHsK
KyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gU2l6emxlKCBzZWxlY3RvciwgZWxlbSApLmxlbmd0aCA+IDA7CisgICAgICAgICAgICB9
OworICAgICAgICB9KSwKKworICAgICAgICAiY29udGFpbnMiOiBtYXJrRnVuY3Rpb24oZnVuY3Rp
b24oIHRleHQgKSB7CisgICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCBydW5lc2NhcGUs
IGZ1bmVzY2FwZSApOworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgeworICAg
ICAgICAgICAgICAgIHJldHVybiAoIGVsZW0udGV4dENvbnRlbnQgfHwgZWxlbS5pbm5lclRleHQg
fHwgZ2V0VGV4dCggZWxlbSApICkuaW5kZXhPZiggdGV4dCApID4gLTE7CisgICAgICAgICAgICB9
OworICAgICAgICB9KSwKKworICAgICAgICAvLyAiV2hldGhlciBhbiBlbGVtZW50IGlzIHJlcHJl
c2VudGVkIGJ5IGEgOmxhbmcoKSBzZWxlY3RvcgorICAgICAgICAvLyBpcyBiYXNlZCBzb2xlbHkg
b24gdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZQorICAgICAgICAvLyBiZWluZyBlcXVhbCB0
byB0aGUgaWRlbnRpZmllciBDLAorICAgICAgICAvLyBvciBiZWdpbm5pbmcgd2l0aCB0aGUgaWRl
bnRpZmllciBDIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5ICItIi4KKyAgICAgICAgLy8gVGhlIG1h
dGNoaW5nIG9mIEMgYWdhaW5zdCB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlIGlzIHBlcmZv
cm1lZCBjYXNlLWluc2Vuc2l0aXZlbHkuCisgICAgICAgIC8vIFRoZSBpZGVudGlmaWVyIEMgZG9l
cyBub3QgaGF2ZSB0byBiZSBhIHZhbGlkIGxhbmd1YWdlIG5hbWUuIgorICAgICAgICAvLyBodHRw
Oi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2xhbmctcHNldWRvCisgICAgICAgICJsYW5nIjog
bWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggbGFuZyApIHsKKyAgICAgICAgICAgIC8vIGxhbmcgdmFs
dWUgbXVzdCBiZSBhIHZhbGlkIGlkZW50aWZpZXIKKyAgICAgICAgICAgIGlmICggIXJpZGVudGlm
aWVyLnRlc3QobGFuZyB8fCAiIikgKSB7CisgICAgICAgICAgICAgICAgU2l6emxlLmVycm9yKCAi
dW5zdXBwb3J0ZWQgbGFuZzogIiArIGxhbmcgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGxhbmcgPSBsYW5nLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2Uo
KTsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAg
ICB2YXIgZWxlbUxhbmc7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAg
ICBpZiAoIChlbGVtTGFuZyA9IGRvY3VtZW50SXNIVE1MID8KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW0ubGFuZyA6CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmdldEF0dHJpYnV0
ZSgieG1sOmxhbmciKSB8fCBlbGVtLmdldEF0dHJpYnV0ZSgibGFuZyIpKSApIHsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbUxhbmcgPSBlbGVtTGFuZy50b0xvd2VyQ2FzZSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1MYW5nID09PSBsYW5nIHx8IGVsZW1MYW5n
LmluZGV4T2YoIGxhbmcgKyAiLSIgKSA9PT0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0gd2hpbGUgKCAoZWxlbSA9IGVsZW0ucGFyZW50Tm9kZSkgJiYgZWxlbS5u
b2RlVHlwZSA9PT0gMSApOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH07CisgICAgICAgIH0pLAorCisgICAgICAgIC8vIE1pc2NlbGxhbmVvdXMKKyAgICAgICAg
InRhcmdldCI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgdmFyIGhhc2ggPSB3aW5k
b3cubG9jYXRpb24gJiYgd2luZG93LmxvY2F0aW9uLmhhc2g7CisgICAgICAgICAgICByZXR1cm4g
aGFzaCAmJiBoYXNoLnNsaWNlKCAxICkgPT09IGVsZW0uaWQ7CisgICAgICAgIH0sCisKKyAgICAg
ICAgInJvb3QiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtID09
PSBkb2NFbGVtOworICAgICAgICB9LAorCisgICAgICAgICJmb2N1cyI6IGZ1bmN0aW9uKCBlbGVt
ICkgeworICAgICAgICAgICAgcmV0dXJuIGVsZW0gPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQg
JiYgKCFkb2N1bWVudC5oYXNGb2N1cyB8fCBkb2N1bWVudC5oYXNGb2N1cygpKSAmJiAhIShlbGVt
LnR5cGUgfHwgZWxlbS5ocmVmIHx8IH5lbGVtLnRhYkluZGV4KTsKKyAgICAgICAgfSwKKworICAg
ICAgICAvLyBCb29sZWFuIHByb3BlcnRpZXMKKyAgICAgICAgImVuYWJsZWQiOiBjcmVhdGVEaXNh
YmxlZFBzZXVkbyggZmFsc2UgKSwKKyAgICAgICAgImRpc2FibGVkIjogY3JlYXRlRGlzYWJsZWRQ
c2V1ZG8oIHRydWUgKSwKKworICAgICAgICAiY2hlY2tlZCI6IGZ1bmN0aW9uKCBlbGVtICkgewor
ICAgICAgICAgICAgLy8gSW4gQ1NTMywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNr
ZWQgYW5kIHNlbGVjdGVkIGVsZW1lbnRzCisgICAgICAgICAgICAvLyBodHRwOi8vd3d3LnczLm9y
Zy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZAorICAgICAgICAg
ICAgdmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICAg
ICAgcmV0dXJuIChub2RlTmFtZSA9PT0gImlucHV0IiAmJiAhIWVsZW0uY2hlY2tlZCkgfHwgKG5v
ZGVOYW1lID09PSAib3B0aW9uIiAmJiAhIWVsZW0uc2VsZWN0ZWQpOworICAgICAgICB9LAorCisg
ICAgICAgICJzZWxlY3RlZCI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgLy8gQWNj
ZXNzaW5nIHRoaXMgcHJvcGVydHkgbWFrZXMgc2VsZWN0ZWQtYnktZGVmYXVsdAorICAgICAgICAg
ICAgLy8gb3B0aW9ucyBpbiBTYWZhcmkgd29yayBwcm9wZXJseQorICAgICAgICAgICAgaWYgKCBl
bGVtLnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICAgICAgZWxlbS5wYXJlbnROb2RlLnNlbGVj
dGVkSW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBlbGVtLnNlbGVj
dGVkID09PSB0cnVlOworICAgICAgICB9LAorCisgICAgICAgIC8vIENvbnRlbnRzCisgICAgICAg
ICJlbXB0eSI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgLy8gaHR0cDovL3d3dy53
My5vcmcvVFIvc2VsZWN0b3JzLyNlbXB0eS1wc2V1ZG8KKyAgICAgICAgICAgIC8vIDplbXB0eSBp
cyBuZWdhdGVkIGJ5IGVsZW1lbnQgKDEpIG9yIGNvbnRlbnQgbm9kZXMgKHRleHQ6IDM7IGNkYXRh
OiA0OyBlbnRpdHkgcmVmOiA1KSwKKyAgICAgICAgICAgIC8vICAgYnV0IG5vdCBieSBvdGhlcnMg
KGNvbW1lbnQ6IDg7IHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb246IDc7IGV0Yy4pCisgICAgICAgICAg
ICAvLyBub2RlVHlwZSA8IDYgd29ya3MgYmVjYXVzZSBhdHRyaWJ1dGVzICgyKSBkbyBub3QgYXBw
ZWFyIGFzIGNoaWxkcmVuCisgICAgICAgICAgICBmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxk
OyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHsKKyAgICAgICAgICAgICAgICBpZiAo
IGVsZW0ubm9kZVR5cGUgPCA2ICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0sCisKKyAgICAgICAgInBhcmVudCI6IGZ1bmN0aW9uKCBlbGVtICkgewor
ICAgICAgICAgICAgcmV0dXJuICFFeHByLnBzZXVkb3NbImVtcHR5Il0oIGVsZW0gKTsKKyAgICAg
ICAgfSwKKworICAgICAgICAvLyBFbGVtZW50L2lucHV0IHR5cGVzCisgICAgICAgICJoZWFkZXIi
OiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiByaGVhZGVyLnRlc3QoIGVs
ZW0ubm9kZU5hbWUgKTsKKyAgICAgICAgfSwKKworICAgICAgICAiaW5wdXQiOiBmdW5jdGlvbigg
ZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiByaW5wdXRzLnRlc3QoIGVsZW0ubm9kZU5hbWUg
KTsKKyAgICAgICAgfSwKKworICAgICAgICAiYnV0dG9uIjogZnVuY3Rpb24oIGVsZW0gKSB7Cisg
ICAgICAgICAgICB2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKKyAgICAg
ICAgICAgIHJldHVybiBuYW1lID09PSAiaW5wdXQiICYmIGVsZW0udHlwZSA9PT0gImJ1dHRvbiIg
fHwgbmFtZSA9PT0gImJ1dHRvbiI7CisgICAgICAgIH0sCisKKyAgICAgICAgInRleHQiOiBmdW5j
dGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHZhciBhdHRyOworICAgICAgICAgICAgcmV0dXJu
IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImlucHV0IiAmJgorICAgICAgICAgICAg
ICAgIGVsZW0udHlwZSA9PT0gInRleHQiICYmCisKKyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0
OiBJRTw4CisgICAgICAgICAgICAgICAgLy8gTmV3IEhUTUw1IGF0dHJpYnV0ZSB2YWx1ZXMgKGUu
Zy4sICJzZWFyY2giKSBhcHBlYXIgd2l0aCBlbGVtLnR5cGUgPT09ICJ0ZXh0IgorICAgICAgICAg
ICAgICAgICggKGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZSgidHlwZSIpKSA9PSBudWxsIHx8IGF0
dHIudG9Mb3dlckNhc2UoKSA9PT0gInRleHQiICk7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8g
UG9zaXRpb24taW4tY29sbGVjdGlvbgorICAgICAgICAiZmlyc3QiOiBjcmVhdGVQb3NpdGlvbmFs
UHNldWRvKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcmV0dXJuIFsgMCBdOworICAgICAgICB9
KSwKKworICAgICAgICAibGFzdCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1h
dGNoSW5kZXhlcywgbGVuZ3RoICkgeworICAgICAgICAgICAgcmV0dXJuIFsgbGVuZ3RoIC0gMSBd
OworICAgICAgICB9KSwKKworICAgICAgICAiZXEiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1
bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7CisgICAgICAgICAgICBy
ZXR1cm4gWyBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50IF07Cisg
ICAgICAgIH0pLAorCisgICAgICAgICJldmVuIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5j
dGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7CisgICAgICAgICAgICB2YXIgaSA9IDA7Cisg
ICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHsKKyAgICAgICAgICAgICAg
ICBtYXRjaEluZGV4ZXMucHVzaCggaSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIG1hdGNoSW5kZXhlczsKKyAgICAgICAgfSksCisKKyAgICAgICAgIm9kZCI6IGNyZWF0ZVBv
c2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkgeworICAgICAg
ICAgICAgdmFyIGkgPSAxOworICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIg
KSB7CisgICAgICAgICAgICAgICAgbWF0Y2hJbmRleGVzLnB1c2goIGkgKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBtYXRjaEluZGV4ZXM7CisgICAgICAgIH0pLAorCisgICAg
ICAgICJsdCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywg
bGVuZ3RoLCBhcmd1bWVudCApIHsKKyAgICAgICAgICAgIHZhciBpID0gYXJndW1lbnQgPCAwID8g
YXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDsKKyAgICAgICAgICAgIGZvciAoIDsgLS1pID49
IDA7ICkgeworICAgICAgICAgICAgICAgIG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hJbmRleGVzOworICAgICAgICB9KSwKKwor
ICAgICAgICAiZ3QiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4
ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7CisgICAgICAgICAgICB2YXIgaSA9IGFyZ3VtZW50IDwg
MCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7CisgICAgICAgICAgICBmb3IgKCA7ICsr
aSA8IGxlbmd0aDsgKSB7CisgICAgICAgICAgICAgICAgbWF0Y2hJbmRleGVzLnB1c2goIGkgKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtYXRjaEluZGV4ZXM7CisgICAgICAg
IH0pCisgICAgfQorfTsKKworRXhwci5wc2V1ZG9zWyJudGgiXSA9IEV4cHIucHNldWRvc1siZXEi
XTsKKworLy8gQWRkIGJ1dHRvbi9pbnB1dCB0eXBlIHBzZXVkb3MKK2ZvciAoIGkgaW4geyByYWRp
bzogdHJ1ZSwgY2hlY2tib3g6IHRydWUsIGZpbGU6IHRydWUsIHBhc3N3b3JkOiB0cnVlLCBpbWFn
ZTogdHJ1ZSB9ICkgeworICAgIEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlSW5wdXRQc2V1ZG8o
IGkgKTsKK30KK2ZvciAoIGkgaW4geyBzdWJtaXQ6IHRydWUsIHJlc2V0OiB0cnVlIH0gKSB7Cisg
ICAgRXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTsKK30KKworLy8g
RWFzeSBBUEkgZm9yIGNyZWF0aW5nIG5ldyBzZXRGaWx0ZXJzCitmdW5jdGlvbiBzZXRGaWx0ZXJz
KCkge30KK3NldEZpbHRlcnMucHJvdG90eXBlID0gRXhwci5maWx0ZXJzID0gRXhwci5wc2V1ZG9z
OworRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMoKTsKKwordG9rZW5pemUgPSBTaXp6
bGUudG9rZW5pemUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIHBhcnNlT25seSApIHsKKyAgICB2YXIg
bWF0Y2hlZCwgbWF0Y2gsIHRva2VucywgdHlwZSwKKyAgICAgICAgc29GYXIsIGdyb3VwcywgcHJl
RmlsdGVycywKKyAgICAgICAgY2FjaGVkID0gdG9rZW5DYWNoZVsgc2VsZWN0b3IgKyAiICIgXTsK
KworICAgIGlmICggY2FjaGVkICkgeworICAgICAgICByZXR1cm4gcGFyc2VPbmx5ID8gMCA6IGNh
Y2hlZC5zbGljZSggMCApOworICAgIH0KKworICAgIHNvRmFyID0gc2VsZWN0b3I7CisgICAgZ3Jv
dXBzID0gW107CisgICAgcHJlRmlsdGVycyA9IEV4cHIucHJlRmlsdGVyOworCisgICAgd2hpbGUg
KCBzb0ZhciApIHsKKworICAgICAgICAvLyBDb21tYSBhbmQgZmlyc3QgcnVuCisgICAgICAgIGlm
ICggIW1hdGNoZWQgfHwgKG1hdGNoID0gcmNvbW1hLmV4ZWMoIHNvRmFyICkpICkgeworICAgICAg
ICAgICAgaWYgKCBtYXRjaCApIHsKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBjb25zdW1lIHRy
YWlsaW5nIGNvbW1hcyBhcyB2YWxpZAorICAgICAgICAgICAgICAgIHNvRmFyID0gc29GYXIuc2xp
Y2UoIG1hdGNoWzBdLmxlbmd0aCApIHx8IHNvRmFyOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZ3JvdXBzLnB1c2goICh0b2tlbnMgPSBbXSkgKTsKKyAgICAgICAgfQorCisgICAgICAgIG1h
dGNoZWQgPSBmYWxzZTsKKworICAgICAgICAvLyBDb21iaW5hdG9ycworICAgICAgICBpZiAoICht
YXRjaCA9IHJjb21iaW5hdG9ycy5leGVjKCBzb0ZhciApKSApIHsKKyAgICAgICAgICAgIG1hdGNo
ZWQgPSBtYXRjaC5zaGlmdCgpOworICAgICAgICAgICAgdG9rZW5zLnB1c2goeworICAgICAgICAg
ICAgICAgIHZhbHVlOiBtYXRjaGVkLAorICAgICAgICAgICAgICAgIC8vIENhc3QgZGVzY2VuZGFu
dCBjb21iaW5hdG9ycyB0byBzcGFjZQorICAgICAgICAgICAgICAgIHR5cGU6IG1hdGNoWzBdLnJl
cGxhY2UoIHJ0cmltLCAiICIgKQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBzb0ZhciA9
IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApOworICAgICAgICB9CisKKyAgICAgICAgLy8g
RmlsdGVycworICAgICAgICBmb3IgKCB0eXBlIGluIEV4cHIuZmlsdGVyICkgeworICAgICAgICAg
ICAgaWYgKCAobWF0Y2ggPSBtYXRjaEV4cHJbIHR5cGUgXS5leGVjKCBzb0ZhciApKSAmJiAoIXBy
ZUZpbHRlcnNbIHR5cGUgXSB8fAorICAgICAgICAgICAgICAgIChtYXRjaCA9IHByZUZpbHRlcnNb
IHR5cGUgXSggbWF0Y2ggKSkpICkgeworICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBtYXRjaC5z
aGlmdCgpOworICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHsKKyAgICAgICAgICAgICAgICAg
ICAgdmFsdWU6IG1hdGNoZWQsCisgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsCisgICAg
ICAgICAgICAgICAgICAgIG1hdGNoZXM6IG1hdGNoCisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgc29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICggIW1hdGNoZWQgKSB7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJldHVybiB0aGUgbGVuZ3Ro
IG9mIHRoZSBpbnZhbGlkIGV4Y2VzcworICAgIC8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZworICAg
IC8vIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3Igb3IgcmV0dXJuIHRva2VucworICAgIHJldHVy
biBwYXJzZU9ubHkgPworICAgICAgICBzb0Zhci5sZW5ndGggOgorICAgICAgICBzb0ZhciA/Cisg
ICAgICAgICAgICBTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOgorICAgICAgICAgICAgLy8gQ2Fj
aGUgdGhlIHRva2VucworICAgICAgICAgICAgdG9rZW5DYWNoZSggc2VsZWN0b3IsIGdyb3VwcyAp
LnNsaWNlKCAwICk7Cit9OworCitmdW5jdGlvbiB0b1NlbGVjdG9yKCB0b2tlbnMgKSB7CisgICAg
dmFyIGkgPSAwLAorICAgICAgICBsZW4gPSB0b2tlbnMubGVuZ3RoLAorICAgICAgICBzZWxlY3Rv
ciA9ICIiOworICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworICAgICAgICBzZWxlY3RvciAr
PSB0b2tlbnNbaV0udmFsdWU7CisgICAgfQorICAgIHJldHVybiBzZWxlY3RvcjsKK30KKworZnVu
Y3Rpb24gYWRkQ29tYmluYXRvciggbWF0Y2hlciwgY29tYmluYXRvciwgYmFzZSApIHsKKyAgICB2
YXIgZGlyID0gY29tYmluYXRvci5kaXIsCisgICAgICAgIHNraXAgPSBjb21iaW5hdG9yLm5leHQs
CisgICAgICAgIGtleSA9IHNraXAgfHwgZGlyLAorICAgICAgICBjaGVja05vbkVsZW1lbnRzID0g
YmFzZSAmJiBrZXkgPT09ICJwYXJlbnROb2RlIiwKKyAgICAgICAgZG9uZU5hbWUgPSBkb25lKys7
CisKKyAgICByZXR1cm4gY29tYmluYXRvci5maXJzdCA/CisgICAgICAgIC8vIENoZWNrIGFnYWlu
c3QgY2xvc2VzdCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudAorICAgICAgICBmdW5jdGlvbigg
ZWxlbSwgY29udGV4dCwgeG1sICkgeworICAgICAgICAgICAgd2hpbGUgKCAoZWxlbSA9IGVsZW1b
IGRpciBdKSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwg
Y2hlY2tOb25FbGVtZW50cyApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIo
IGVsZW0sIGNvbnRleHQsIHhtbCApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSA6CisKKyAgICAgICAgLy8gQ2hl
Y2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzCisgICAgICAgIGZ1bmN0
aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7CisgICAgICAgICAgICB2YXIgb2xkQ2FjaGUsIHVu
aXF1ZUNhY2hlLCBvdXRlckNhY2hlLAorICAgICAgICAgICAgICAgIG5ld0NhY2hlID0gWyBkaXJy
dW5zLCBkb25lTmFtZSBdOworCisgICAgICAgICAgICAvLyBXZSBjYW4ndCBzZXQgYXJiaXRyYXJ5
IGRhdGEgb24gWE1MIG5vZGVzLCBzbyB0aGV5IGRvbid0IGJlbmVmaXQgZnJvbSBjb21iaW5hdG9y
IGNhY2hpbmcKKyAgICAgICAgICAgIGlmICggeG1sICkgeworICAgICAgICAgICAgICAgIHdoaWxl
ICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggZWxl
bS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNr
Tm9uRWxlbWVudHMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRlckNhY2hlID0gZWxl
bVsgZXhwYW5kbyBdIHx8IChlbGVtWyBleHBhbmRvIF0gPSB7fSk7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFN1cHBvcnQ6IElFIDw5IG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KQor
ICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBlbGVtLnVu
aXF1ZUlEIF0gfHwgKG91dGVyQ2FjaGVbIGVsZW0udW5pcXVlSUQgXSA9IHt9KTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBza2lwICYmIHNraXAgPT09IGVsZW0ubm9kZU5hbWUudG9M
b3dlckNhc2UoKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gZWxlbVsg
ZGlyIF0gfHwgZWxlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIChvbGRD
YWNoZSA9IHVuaXF1ZUNhY2hlWyBrZXkgXSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvbGRDYWNoZVsgMCBdID09PSBkaXJydW5zICYmIG9sZENhY2hlWyAxIF0gPT09IGRvbmVOYW1l
ICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXNzaWduIHRvIG5ld0NhY2hl
IHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHMKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG5ld0NhY2hlWyAyIF0gPSBvbGRDYWNoZVsgMiBd
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gUmV1c2UgbmV3Y2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBw
cmV2aW91cyBlbGVtZW50cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZUNhY2hl
WyBrZXkgXSA9IG5ld0NhY2hlOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBt
YXRjaCBtZWFucyB3ZSdyZSBkb25lOyBhIGZhaWwgbWVhbnMgd2UgaGF2ZSB0byBrZWVwIGNoZWNr
aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAobmV3Q2FjaGVbIDIgXSA9IG1h
dGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9OworfQorCitmdW5jdGlvbiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSB7CisgICAgcmV0
dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgPworICAgICAgICBmdW5jdGlvbiggZWxlbSwgY29udGV4
dCwgeG1sICkgeworICAgICAgICAgICAgdmFyIGkgPSBtYXRjaGVycy5sZW5ndGg7CisgICAgICAg
ICAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgICAgICAgICBpZiAoICFtYXRjaGVyc1tpXSgg
ZWxlbSwgY29udGV4dCwgeG1sICkgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfSA6CisgICAgICAgIG1hdGNoZXJzWzBdOworfQorCitmdW5jdGlvbiBt
dWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciwgY29udGV4dHMsIHJlc3VsdHMgKSB7CisgICAgdmFy
IGkgPSAwLAorICAgICAgICBsZW4gPSBjb250ZXh0cy5sZW5ndGg7CisgICAgZm9yICggOyBpIDwg
bGVuOyBpKysgKSB7CisgICAgICAgIFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHRzW2ldLCByZXN1
bHRzICk7CisgICAgfQorICAgIHJldHVybiByZXN1bHRzOworfQorCitmdW5jdGlvbiBjb25kZW5z
ZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwgeG1sICkgeworICAgIHZhciBlbGVt
LAorICAgICAgICBuZXdVbm1hdGNoZWQgPSBbXSwKKyAgICAgICAgaSA9IDAsCisgICAgICAgIGxl
biA9IHVubWF0Y2hlZC5sZW5ndGgsCisgICAgICAgIG1hcHBlZCA9IG1hcCAhPSBudWxsOworCisg
ICAgZm9yICggOyBpIDwgbGVuOyBpKysgKSB7CisgICAgICAgIGlmICggKGVsZW0gPSB1bm1hdGNo
ZWRbaV0pICkgeworICAgICAgICAgICAgaWYgKCAhZmlsdGVyIHx8IGZpbHRlciggZWxlbSwgY29u
dGV4dCwgeG1sICkgKSB7CisgICAgICAgICAgICAgICAgbmV3VW5tYXRjaGVkLnB1c2goIGVsZW0g
KTsKKyAgICAgICAgICAgICAgICBpZiAoIG1hcHBlZCApIHsKKyAgICAgICAgICAgICAgICAgICAg
bWFwLnB1c2goIGkgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gbmV3VW5tYXRjaGVkOworfQorCitmdW5jdGlvbiBzZXRN
YXRjaGVyKCBwcmVGaWx0ZXIsIHNlbGVjdG9yLCBtYXRjaGVyLCBwb3N0RmlsdGVyLCBwb3N0Rmlu
ZGVyLCBwb3N0U2VsZWN0b3IgKSB7CisgICAgaWYgKCBwb3N0RmlsdGVyICYmICFwb3N0RmlsdGVy
WyBleHBhbmRvIF0gKSB7CisgICAgICAgIHBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVyKCBwb3N0Rmls
dGVyICk7CisgICAgfQorICAgIGlmICggcG9zdEZpbmRlciAmJiAhcG9zdEZpbmRlclsgZXhwYW5k
byBdICkgeworICAgICAgICBwb3N0RmluZGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbmRlciwgcG9z
dFNlbGVjdG9yICk7CisgICAgfQorICAgIHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNl
ZWQsIHJlc3VsdHMsIGNvbnRleHQsIHhtbCApIHsKKyAgICAgICAgdmFyIHRlbXAsIGksIGVsZW0s
CisgICAgICAgICAgICBwcmVNYXAgPSBbXSwKKyAgICAgICAgICAgIHBvc3RNYXAgPSBbXSwKKyAg
ICAgICAgICAgIHByZWV4aXN0aW5nID0gcmVzdWx0cy5sZW5ndGgsCisKKyAgICAgICAgICAgIC8v
IEdldCBpbml0aWFsIGVsZW1lbnRzIGZyb20gc2VlZCBvciBjb250ZXh0CisgICAgICAgICAgICBl
bGVtcyA9IHNlZWQgfHwgbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IgfHwgIioiLCBjb250ZXh0
Lm5vZGVUeXBlID8gWyBjb250ZXh0IF0gOiBjb250ZXh0LCBbXSApLAorCisgICAgICAgICAgICAv
LyBQcmVmaWx0ZXIgdG8gZ2V0IG1hdGNoZXIgaW5wdXQsIHByZXNlcnZpbmcgYSBtYXAgZm9yIHNl
ZWQtcmVzdWx0cyBzeW5jaHJvbml6YXRpb24KKyAgICAgICAgICAgIG1hdGNoZXJJbiA9IHByZUZp
bHRlciAmJiAoIHNlZWQgfHwgIXNlbGVjdG9yICkgPworICAgICAgICAgICAgICAgIGNvbmRlbnNl
KCBlbGVtcywgcHJlTWFwLCBwcmVGaWx0ZXIsIGNvbnRleHQsIHhtbCApIDoKKyAgICAgICAgICAg
ICAgICBlbGVtcywKKworICAgICAgICAgICAgbWF0Y2hlck91dCA9IG1hdGNoZXIgPworICAgICAg
ICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBwb3N0RmluZGVyLCBvciBmaWx0ZXJlZCBzZWVkLCBv
ciBub24tc2VlZCBwb3N0RmlsdGVyIG9yIHByZWV4aXN0aW5nIHJlc3VsdHMsCisgICAgICAgICAg
ICAgICAgcG9zdEZpbmRlciB8fCAoIHNlZWQgPyBwcmVGaWx0ZXIgOiBwcmVleGlzdGluZyB8fCBw
b3N0RmlsdGVyICkgPworCisgICAgICAgICAgICAgICAgICAgIC8vIC4uLmludGVybWVkaWF0ZSBw
cm9jZXNzaW5nIGlzIG5lY2Vzc2FyeQorICAgICAgICAgICAgICAgICAgICBbXSA6CisKKyAgICAg
ICAgICAgICAgICAgICAgLy8gLi4ub3RoZXJ3aXNlIHVzZSByZXN1bHRzIGRpcmVjdGx5CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdHMgOgorICAgICAgICAgICAgICAgIG1hdGNoZXJJbjsKKwor
ICAgICAgICAvLyBGaW5kIHByaW1hcnkgbWF0Y2hlcworICAgICAgICBpZiAoIG1hdGNoZXIgKSB7
CisgICAgICAgICAgICBtYXRjaGVyKCBtYXRjaGVySW4sIG1hdGNoZXJPdXQsIGNvbnRleHQsIHht
bCApOworICAgICAgICB9CisKKyAgICAgICAgLy8gQXBwbHkgcG9zdEZpbHRlcgorICAgICAgICBp
ZiAoIHBvc3RGaWx0ZXIgKSB7CisgICAgICAgICAgICB0ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJP
dXQsIHBvc3RNYXAgKTsKKyAgICAgICAgICAgIHBvc3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0
LCB4bWwgKTsKKworICAgICAgICAgICAgLy8gVW4tbWF0Y2ggZmFpbGluZyBlbGVtZW50cyBieSBt
b3ZpbmcgdGhlbSBiYWNrIHRvIG1hdGNoZXJJbgorICAgICAgICAgICAgaSA9IHRlbXAubGVuZ3Ro
OworICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgaWYgKCAoZWxl
bSA9IHRlbXBbaV0pICkgeworICAgICAgICAgICAgICAgICAgICBtYXRjaGVyT3V0WyBwb3N0TWFw
W2ldIF0gPSAhKG1hdGNoZXJJblsgcG9zdE1hcFtpXSBdID0gZWxlbSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCBzZWVkICkgewor
ICAgICAgICAgICAgaWYgKCBwb3N0RmluZGVyIHx8IHByZUZpbHRlciApIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIHBvc3RGaW5kZXIgKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUg
ZmluYWwgbWF0Y2hlck91dCBieSBjb25kZW5zaW5nIHRoaXMgaW50ZXJtZWRpYXRlIGludG8gcG9z
dEZpbmRlciBjb250ZXh0cworICAgICAgICAgICAgICAgICAgICB0ZW1wID0gW107CisgICAgICAg
ICAgICAgICAgICAgIGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChlbGVtID0gbWF0
Y2hlck91dFtpXSkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzdG9yZSBt
YXRjaGVySW4gc2luY2UgZWxlbSBpcyBub3QgeWV0IGEgZmluYWwgbWF0Y2gKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ZW1wLnB1c2goIChtYXRjaGVySW5baV0gPSBlbGVtKSApOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHBvc3RGaW5kZXIoIG51bGwsIChtYXRjaGVyT3V0ID0gW10pLCB0ZW1wLCB4bWwg
KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBNb3ZlIG1hdGNoZWQg
ZWxlbWVudHMgZnJvbSBzZWVkIHRvIHJlc3VsdHMgdG8ga2VlcCB0aGVtIHN5bmNocm9uaXplZAor
ICAgICAgICAgICAgICAgIGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDsKKyAgICAgICAgICAgICAgICB3
aGlsZSAoIGktLSApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9IG1hdGNoZXJP
dXRbaV0pICYmCisgICAgICAgICAgICAgICAgICAgICAgICAodGVtcCA9IHBvc3RGaW5kZXIgPyBp
bmRleE9mKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbaV0pID4gLTEgKSB7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNlZWRbdGVtcF0gPSAhKHJlc3VsdHNbdGVtcF0gPSBlbGVtKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAvLyBBZGQgZWxlbWVudHMgdG8gcmVzdWx0cywgdGhyb3VnaCBwb3N0RmluZGVyIGlmIGRl
ZmluZWQKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1hdGNoZXJPdXQgPSBjb25kZW5z
ZSgKKyAgICAgICAgICAgICAgICBtYXRjaGVyT3V0ID09PSByZXN1bHRzID8KKyAgICAgICAgICAg
ICAgICAgICAgbWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0
aCApIDoKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlck91dAorICAgICAgICAgICAgKTsKKyAg
ICAgICAgICAgIGlmICggcG9zdEZpbmRlciApIHsKKyAgICAgICAgICAgICAgICBwb3N0RmluZGVy
KCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywgbWF0Y2hlck91dCApOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIG1hdGNoZXJGcm9t
VG9rZW5zKCB0b2tlbnMgKSB7CisgICAgdmFyIGNoZWNrQ29udGV4dCwgbWF0Y2hlciwgaiwKKyAg
ICAgICAgbGVuID0gdG9rZW5zLmxlbmd0aCwKKyAgICAgICAgbGVhZGluZ1JlbGF0aXZlID0gRXhw
ci5yZWxhdGl2ZVsgdG9rZW5zWzBdLnR5cGUgXSwKKyAgICAgICAgaW1wbGljaXRSZWxhdGl2ZSA9
IGxlYWRpbmdSZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZlWyIgIl0sCisgICAgICAgIGkgPSBsZWFk
aW5nUmVsYXRpdmUgPyAxIDogMCwKKworICAgICAgICAvLyBUaGUgZm91bmRhdGlvbmFsIG1hdGNo
ZXIgZW5zdXJlcyB0aGF0IGVsZW1lbnRzIGFyZSByZWFjaGFibGUgZnJvbSB0b3AtbGV2ZWwgY29u
dGV4dChzKQorICAgICAgICBtYXRjaENvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbigg
ZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtID09PSBjaGVja0NvbnRleHQ7CisgICAg
ICAgIH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSwKKyAgICAgICAgbWF0Y2hBbnlDb250ZXh0
ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4g
aW5kZXhPZiggY2hlY2tDb250ZXh0LCBlbGVtICkgPiAtMTsKKyAgICAgICAgfSwgaW1wbGljaXRS
ZWxhdGl2ZSwgdHJ1ZSApLAorICAgICAgICBtYXRjaGVycyA9IFsgZnVuY3Rpb24oIGVsZW0sIGNv
bnRleHQsIHhtbCApIHsKKyAgICAgICAgICAgIHZhciByZXQgPSAoICFsZWFkaW5nUmVsYXRpdmUg
JiYgKCB4bWwgfHwgY29udGV4dCAhPT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKAorICAgICAg
ICAgICAgICAgIChjaGVja0NvbnRleHQgPSBjb250ZXh0KS5ub2RlVHlwZSA/CisgICAgICAgICAg
ICAgICAgICAgIG1hdGNoQ29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgOgorICAgICAgICAg
ICAgICAgICAgICBtYXRjaEFueUNvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApICk7CisgICAg
ICAgICAgICAvLyBBdm9pZCBoYW5naW5nIG9udG8gZWxlbWVudCAoaXNzdWUgIzI5OSkKKyAgICAg
ICAgICAgIGNoZWNrQ29udGV4dCA9IG51bGw7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAg
ICAgICB9IF07CisKKyAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKKyAgICAgICAgaWYgKCAo
bWF0Y2hlciA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1tpXS50eXBlIF0pICkgeworICAgICAgICAg
ICAgbWF0Y2hlcnMgPSBbIGFkZENvbWJpbmF0b3IoZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICks
IG1hdGNoZXIpIF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtYXRjaGVyID0gRXhw
ci5maWx0ZXJbIHRva2Vuc1tpXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1tpXS5tYXRjaGVz
ICk7CisKKyAgICAgICAgICAgIC8vIFJldHVybiBzcGVjaWFsIHVwb24gc2VlaW5nIGEgcG9zaXRp
b25hbCBtYXRjaGVyCisgICAgICAgICAgICBpZiAoIG1hdGNoZXJbIGV4cGFuZG8gXSApIHsKKyAg
ICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBuZXh0IHJlbGF0aXZlIG9wZXJhdG9yIChpZiBhbnkp
IGZvciBwcm9wZXIgaGFuZGxpbmcKKyAgICAgICAgICAgICAgICBqID0gKytpOworICAgICAgICAg
ICAgICAgIGZvciAoIDsgaiA8IGxlbjsgaisrICkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
IEV4cHIucmVsYXRpdmVbIHRva2Vuc1tqXS50eXBlIF0gKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gc2V0TWF0Y2hlcigKKyAgICAgICAgICAgICAgICAgICAgaSA+
IDEgJiYgZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksCisgICAgICAgICAgICAgICAgICAgIGkg
PiAxICYmIHRvU2VsZWN0b3IoCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJl
Y2VkaW5nIHRva2VuIHdhcyBhIGRlc2NlbmRhbnQgY29tYmluYXRvciwgaW5zZXJ0IGFuIGltcGxp
Y2l0IGFueS1lbGVtZW50IGAqYAorICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnNsaWNl
KCAwLCBpIC0gMSApLmNvbmNhdCh7IHZhbHVlOiB0b2tlbnNbIGkgLSAyIF0udHlwZSA9PT0gIiAi
ID8gIioiIDogIiIgfSkKKyAgICAgICAgICAgICAgICAgICAgKS5yZXBsYWNlKCBydHJpbSwgIiQx
IiApLAorICAgICAgICAgICAgICAgICAgICBtYXRjaGVyLAorICAgICAgICAgICAgICAgICAgICBp
IDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zLnNsaWNlKCBpLCBqICkgKSwKKyAgICAg
ICAgICAgICAgICAgICAgaiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRva2VucyggKHRva2VucyA9IHRv
a2Vucy5zbGljZSggaiApKSApLAorICAgICAgICAgICAgICAgICAgICBqIDwgbGVuICYmIHRvU2Vs
ZWN0b3IoIHRva2VucyApCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG1hdGNoZXJzLnB1c2goIG1hdGNoZXIgKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTsKK30KKworZnVuY3Rpb24gbWF0Y2hl
ckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgeworICAg
IHZhciBieVNldCA9IHNldE1hdGNoZXJzLmxlbmd0aCA+IDAsCisgICAgICAgIGJ5RWxlbWVudCA9
IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLAorICAgICAgICBzdXBlck1hdGNoZXIgPSBmdW5j
dGlvbiggc2VlZCwgY29udGV4dCwgeG1sLCByZXN1bHRzLCBvdXRlcm1vc3QgKSB7CisgICAgICAg
ICAgICB2YXIgZWxlbSwgaiwgbWF0Y2hlciwKKyAgICAgICAgICAgICAgICBtYXRjaGVkQ291bnQg
PSAwLAorICAgICAgICAgICAgICAgIGkgPSAiMCIsCisgICAgICAgICAgICAgICAgdW5tYXRjaGVk
ID0gc2VlZCAmJiBbXSwKKyAgICAgICAgICAgICAgICBzZXRNYXRjaGVkID0gW10sCisgICAgICAg
ICAgICAgICAgY29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsCisgICAgICAgICAgICAg
ICAgLy8gV2UgbXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIgc2VlZCBlbGVtZW50cyBvciBvdXRlcm1v
c3QgY29udGV4dAorICAgICAgICAgICAgICAgIGVsZW1zID0gc2VlZCB8fCBieUVsZW1lbnQgJiYg
RXhwci5maW5kWyJUQUciXSggIioiLCBvdXRlcm1vc3QgKSwKKyAgICAgICAgICAgICAgICAvLyBV
c2UgaW50ZWdlciBkaXJydW5zIGlmZiB0aGlzIGlzIHRoZSBvdXRlcm1vc3QgbWF0Y2hlcgorICAg
ICAgICAgICAgICAgIGRpcnJ1bnNVbmlxdWUgPSAoZGlycnVucyArPSBjb250ZXh0QmFja3VwID09
IG51bGwgPyAxIDogTWF0aC5yYW5kb20oKSB8fCAwLjEpLAorICAgICAgICAgICAgICAgIGxlbiA9
IGVsZW1zLmxlbmd0aDsKKworICAgICAgICAgICAgaWYgKCBvdXRlcm1vc3QgKSB7CisgICAgICAg
ICAgICAgICAgb3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHQgPT09IGRvY3VtZW50IHx8IGNvbnRl
eHQgfHwgb3V0ZXJtb3N0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBBZGQgZWxl
bWVudHMgcGFzc2luZyBlbGVtZW50TWF0Y2hlcnMgZGlyZWN0bHkgdG8gcmVzdWx0cworICAgICAg
ICAgICAgLy8gU3VwcG9ydDogSUU8OSwgU2FmYXJpCisgICAgICAgICAgICAvLyBUb2xlcmF0ZSBO
b2RlTGlzdCBwcm9wZXJ0aWVzIChJRTogImxlbmd0aCI7IFNhZmFyaTogPG51bWJlcj4pIG1hdGNo
aW5nIGVsZW1lbnRzIGJ5IGlkCisgICAgICAgICAgICBmb3IgKCA7IGkgIT09IGxlbiAmJiAoZWxl
bSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBieUVs
ZW1lbnQgJiYgZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgaiA9IDA7CisgICAgICAgICAg
ICAgICAgICAgIGlmICggIWNvbnRleHQgJiYgZWxlbS5vd25lckRvY3VtZW50ICE9PSBkb2N1bWVu
dCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldERvY3VtZW50KCBlbGVtICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB4bWwgPSAhZG9jdW1lbnRJc0hUTUw7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAobWF0Y2hlciA9IGVsZW1lbnRN
YXRjaGVyc1tqKytdKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2hlcigg
ZWxlbSwgY29udGV4dCB8fCBkb2N1bWVudCwgeG1sKSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHRzLnB1c2goIGVsZW0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBpZiAoIG91dGVybW9zdCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gVHJhY2sgdW5tYXRjaGVk
IGVsZW1lbnRzIGZvciBzZXQgZmlsdGVycworICAgICAgICAgICAgICAgIGlmICggYnlTZXQgKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZXkgd2lsbCBoYXZlIGdvbmUgdGhyb3VnaCBhbGwg
cG9zc2libGUgbWF0Y2hlcnMKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9ICFtYXRj
aGVyICYmIGVsZW0pICkgeworICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZENvdW50LS07
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBMZW5ndGhl
biB0aGUgYXJyYXkgZm9yIGV2ZXJ5IGVsZW1lbnQsIG1hdGNoZWQgb3Igbm90CisgICAgICAgICAg
ICAgICAgICAgIGlmICggc2VlZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVubWF0Y2hl
ZC5wdXNoKCBlbGVtICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGBpYCBpcyBub3cgdGhlIGNvdW50IG9m
IGVsZW1lbnRzIHZpc2l0ZWQgYWJvdmUsIGFuZCBhZGRpbmcgaXQgdG8gYG1hdGNoZWRDb3VudGAK
KyAgICAgICAgICAgIC8vIG1ha2VzIHRoZSBsYXR0ZXIgbm9ubmVnYXRpdmUuCisgICAgICAgICAg
ICBtYXRjaGVkQ291bnQgKz0gaTsKKworICAgICAgICAgICAgLy8gQXBwbHkgc2V0IGZpbHRlcnMg
dG8gdW5tYXRjaGVkIGVsZW1lbnRzCisgICAgICAgICAgICAvLyBOT1RFOiBUaGlzIGNhbiBiZSBz
a2lwcGVkIGlmIHRoZXJlIGFyZSBubyB1bm1hdGNoZWQgZWxlbWVudHMgKGkuZS4sIGBtYXRjaGVk
Q291bnRgCisgICAgICAgICAgICAvLyBlcXVhbHMgYGlgKSwgdW5sZXNzIHdlIGRpZG4ndCB2aXNp
dCBfYW55XyBlbGVtZW50cyBpbiB0aGUgYWJvdmUgbG9vcCBiZWNhdXNlIHdlIGhhdmUKKyAgICAg
ICAgICAgIC8vIG5vIGVsZW1lbnQgbWF0Y2hlcnMgYW5kIG5vIHNlZWQuCisgICAgICAgICAgICAv
LyBJbmNyZW1lbnRpbmcgYW4gaW5pdGlhbGx5LXN0cmluZyAiMCIgYGlgIGFsbG93cyBgaWAgdG8g
cmVtYWluIGEgc3RyaW5nIG9ubHkgaW4gdGhhdAorICAgICAgICAgICAgLy8gY2FzZSwgd2hpY2gg
d2lsbCByZXN1bHQgaW4gYSAiMDAiIGBtYXRjaGVkQ291bnRgIHRoYXQgZGlmZmVycyBmcm9tIGBp
YCBidXQgaXMgYWxzbworICAgICAgICAgICAgLy8gbnVtZXJpY2FsbHkgemVyby4KKyAgICAgICAg
ICAgIGlmICggYnlTZXQgJiYgaSAhPT0gbWF0Y2hlZENvdW50ICkgeworICAgICAgICAgICAgICAg
IGogPSAwOworICAgICAgICAgICAgICAgIHdoaWxlICggKG1hdGNoZXIgPSBzZXRNYXRjaGVyc1tq
KytdKSApIHsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlciggdW5tYXRjaGVkLCBzZXRNYXRj
aGVkLCBjb250ZXh0LCB4bWwgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBpZiAoIHNlZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFJlaW50ZWdyYXRlIGVsZW1l
bnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIHNvcnRpbmcKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCBtYXRjaGVkQ291bnQgPiAwICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhKHVu
bWF0Y2hlZFtpXSB8fCBzZXRNYXRjaGVkW2ldKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2V0TWF0Y2hlZFtpXSA9IHBvcC5jYWxsKCByZXN1bHRzICk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRGlzY2FyZCBpbmRleCBwbGFj
ZWhvbGRlciB2YWx1ZXMgdG8gZ2V0IG9ubHkgYWN0dWFsIG1hdGNoZXMKKyAgICAgICAgICAgICAg
ICAgICAgc2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgLy8gQWRkIG1hdGNoZXMgdG8gcmVzdWx0cworICAgICAg
ICAgICAgICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIHNldE1hdGNoZWQgKTsKKworICAgICAgICAg
ICAgICAgIC8vIFNlZWRsZXNzIHNldCBtYXRjaGVzIHN1Y2NlZWRpbmcgbXVsdGlwbGUgc3VjY2Vz
c2Z1bCBtYXRjaGVycyBzdGlwdWxhdGUgc29ydGluZworICAgICAgICAgICAgICAgIGlmICggb3V0
ZXJtb3N0ICYmICFzZWVkICYmIHNldE1hdGNoZWQubGVuZ3RoID4gMCAmJgorICAgICAgICAgICAg
ICAgICAgICAoIG1hdGNoZWRDb3VudCArIHNldE1hdGNoZXJzLmxlbmd0aCApID4gMSApIHsKKwor
ICAgICAgICAgICAgICAgICAgICBTaXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gT3ZlcnJpZGUgbWFu
aXB1bGF0aW9uIG9mIGdsb2JhbHMgYnkgbmVzdGVkIG1hdGNoZXJzCisgICAgICAgICAgICBpZiAo
IG91dGVybW9zdCApIHsKKyAgICAgICAgICAgICAgICBkaXJydW5zID0gZGlycnVuc1VuaXF1ZTsK
KyAgICAgICAgICAgICAgICBvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHVubWF0Y2hlZDsKKyAgICAgICAgfTsKKwor
ICAgIHJldHVybiBieVNldCA/CisgICAgICAgIG1hcmtGdW5jdGlvbiggc3VwZXJNYXRjaGVyICkg
OgorICAgICAgICBzdXBlck1hdGNoZXI7Cit9CisKK2NvbXBpbGUgPSBTaXp6bGUuY29tcGlsZSA9
IGZ1bmN0aW9uKCBzZWxlY3RvciwgbWF0Y2ggLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7Cisg
ICAgdmFyIGksCisgICAgICAgIHNldE1hdGNoZXJzID0gW10sCisgICAgICAgIGVsZW1lbnRNYXRj
aGVycyA9IFtdLAorICAgICAgICBjYWNoZWQgPSBjb21waWxlckNhY2hlWyBzZWxlY3RvciArICIg
IiBdOworCisgICAgaWYgKCAhY2FjaGVkICkgeworICAgICAgICAvLyBHZW5lcmF0ZSBhIGZ1bmN0
aW9uIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGVjayBlYWNo
IGVsZW1lbnQKKyAgICAgICAgaWYgKCAhbWF0Y2ggKSB7CisgICAgICAgICAgICBtYXRjaCA9IHRv
a2VuaXplKCBzZWxlY3RvciApOworICAgICAgICB9CisgICAgICAgIGkgPSBtYXRjaC5sZW5ndGg7
CisgICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgY2FjaGVkID0gbWF0Y2hlckZy
b21Ub2tlbnMoIG1hdGNoW2ldICk7CisgICAgICAgICAgICBpZiAoIGNhY2hlZFsgZXhwYW5kbyBd
ICkgeworICAgICAgICAgICAgICAgIHNldE1hdGNoZXJzLnB1c2goIGNhY2hlZCApOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50TWF0Y2hlcnMucHVzaCggY2Fj
aGVkICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBDYWNoZSB0aGUg
Y29tcGlsZWQgZnVuY3Rpb24KKyAgICAgICAgY2FjaGVkID0gY29tcGlsZXJDYWNoZSggc2VsZWN0
b3IsIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVy
cyApICk7CisKKyAgICAgICAgLy8gU2F2ZSBzZWxlY3RvciBhbmQgdG9rZW5pemF0aW9uCisgICAg
ICAgIGNhY2hlZC5zZWxlY3RvciA9IHNlbGVjdG9yOworICAgIH0KKyAgICByZXR1cm4gY2FjaGVk
OworfTsKKworLyoqCisgKiBBIGxvdy1sZXZlbCBzZWxlY3Rpb24gZnVuY3Rpb24gdGhhdCB3b3Jr
cyB3aXRoIFNpenpsZSdzIGNvbXBpbGVkCisgKiAgc2VsZWN0b3IgZnVuY3Rpb25zCisgKiBAcGFy
YW0ge1N0cmluZ3xGdW5jdGlvbn0gc2VsZWN0b3IgQSBzZWxlY3RvciBvciBhIHByZS1jb21waWxl
ZAorICogIHNlbGVjdG9yIGZ1bmN0aW9uIGJ1aWx0IHdpdGggU2l6emxlLmNvbXBpbGUKKyAqIEBw
YXJhbSB7RWxlbWVudH0gY29udGV4dAorICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdHNdCisgKiBA
cGFyYW0ge0FycmF5fSBbc2VlZF0gQSBzZXQgb2YgZWxlbWVudHMgdG8gbWF0Y2ggYWdhaW5zdAor
ICovCitzZWxlY3QgPSBTaXp6bGUuc2VsZWN0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0
LCByZXN1bHRzLCBzZWVkICkgeworICAgIHZhciBpLCB0b2tlbnMsIHRva2VuLCB0eXBlLCBmaW5k
LAorICAgICAgICBjb21waWxlZCA9IHR5cGVvZiBzZWxlY3RvciA9PT0gImZ1bmN0aW9uIiAmJiBz
ZWxlY3RvciwKKyAgICAgICAgbWF0Y2ggPSAhc2VlZCAmJiB0b2tlbml6ZSggKHNlbGVjdG9yID0g
Y29tcGlsZWQuc2VsZWN0b3IgfHwgc2VsZWN0b3IpICk7CisKKyAgICByZXN1bHRzID0gcmVzdWx0
cyB8fCBbXTsKKworICAgIC8vIFRyeSB0byBtaW5pbWl6ZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlz
IG9ubHkgb25lIHNlbGVjdG9yIGluIHRoZSBsaXN0IGFuZCBubyBzZWVkCisgICAgLy8gKHRoZSBs
YXR0ZXIgb2Ygd2hpY2ggZ3VhcmFudGVlcyB1cyBjb250ZXh0KQorICAgIGlmICggbWF0Y2gubGVu
Z3RoID09PSAxICkgeworCisgICAgICAgIC8vIFJlZHVjZSBjb250ZXh0IGlmIHRoZSBsZWFkaW5n
IGNvbXBvdW5kIHNlbGVjdG9yIGlzIGFuIElECisgICAgICAgIHRva2VucyA9IG1hdGNoWzBdID0g
bWF0Y2hbMF0uc2xpY2UoIDAgKTsKKyAgICAgICAgaWYgKCB0b2tlbnMubGVuZ3RoID4gMiAmJiAo
dG9rZW4gPSB0b2tlbnNbMF0pLnR5cGUgPT09ICJJRCIgJiYKKyAgICAgICAgICAgICAgICBjb250
ZXh0Lm5vZGVUeXBlID09PSA5ICYmIGRvY3VtZW50SXNIVE1MICYmIEV4cHIucmVsYXRpdmVbIHRv
a2Vuc1sxXS50eXBlIF0gKSB7CisKKyAgICAgICAgICAgIGNvbnRleHQgPSAoIEV4cHIuZmluZFsi
SUQiXSggdG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKHJ1bmVzY2FwZSwgZnVuZXNjYXBlKSwgY29u
dGV4dCApIHx8IFtdIClbMF07CisgICAgICAgICAgICBpZiAoICFjb250ZXh0ICkgeworICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHRzOworCisgICAgICAgICAgICAvLyBQcmVjb21waWxlZCBt
YXRjaGVycyB3aWxsIHN0aWxsIHZlcmlmeSBhbmNlc3RyeSwgc28gc3RlcCB1cCBhIGxldmVsCisg
ICAgICAgICAgICB9IGVsc2UgaWYgKCBjb21waWxlZCApIHsKKyAgICAgICAgICAgICAgICBjb250
ZXh0ID0gY29udGV4dC5wYXJlbnROb2RlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBz
ZWxlY3RvciA9IHNlbGVjdG9yLnNsaWNlKCB0b2tlbnMuc2hpZnQoKS52YWx1ZS5sZW5ndGggKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxl
ZnQgbWF0Y2hpbmcKKyAgICAgICAgaSA9IG1hdGNoRXhwclsibmVlZHNDb250ZXh0Il0udGVzdCgg
c2VsZWN0b3IgKSA/IDAgOiB0b2tlbnMubGVuZ3RoOworICAgICAgICB3aGlsZSAoIGktLSApIHsK
KyAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldOworCisgICAgICAgICAgICAvLyBBYm9ydCBp
ZiB3ZSBoaXQgYSBjb21iaW5hdG9yCisgICAgICAgICAgICBpZiAoIEV4cHIucmVsYXRpdmVbICh0
eXBlID0gdG9rZW4udHlwZSkgXSApIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICggKGZpbmQgPSBFeHByLmZpbmRbIHR5cGUgXSkgKSB7Cisg
ICAgICAgICAgICAgICAgLy8gU2VhcmNoLCBleHBhbmRpbmcgY29udGV4dCBmb3IgbGVhZGluZyBz
aWJsaW5nIGNvbWJpbmF0b3JzCisgICAgICAgICAgICAgICAgaWYgKCAoc2VlZCA9IGZpbmQoCisg
ICAgICAgICAgICAgICAgICAgIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZSggcnVuZXNjYXBlLCBm
dW5lc2NhcGUgKSwKKyAgICAgICAgICAgICAgICAgICAgcnNpYmxpbmcudGVzdCggdG9rZW5zWzBd
LnR5cGUgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwgY29udGV4dAor
ICAgICAgICAgICAgICAgICkpICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIElmIHNlZWQg
aXMgZW1wdHkgb3Igbm8gdG9rZW5zIHJlbWFpbiwgd2UgY2FuIHJldHVybiBlYXJseQorICAgICAg
ICAgICAgICAgICAgICB0b2tlbnMuc3BsaWNlKCBpLCAxICk7CisgICAgICAgICAgICAgICAgICAg
IHNlbGVjdG9yID0gc2VlZC5sZW5ndGggJiYgdG9TZWxlY3RvciggdG9rZW5zICk7CisgICAgICAg
ICAgICAgICAgICAgIGlmICggIXNlbGVjdG9yICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaC5hcHBseSggcmVzdWx0cywgc2VlZCApOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdHM7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBDb21waWxlIGFuZCBleGVjdXRlIGEgZmlsdGVyaW5nIGZ1bmN0aW9uIGlm
IG9uZSBpcyBub3QgcHJvdmlkZWQKKyAgICAvLyBQcm92aWRlIGBtYXRjaGAgdG8gYXZvaWQgcmV0
b2tlbml6YXRpb24gaWYgd2UgbW9kaWZpZWQgdGhlIHNlbGVjdG9yIGFib3ZlCisgICAgKCBjb21w
aWxlZCB8fCBjb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggKSApKAorICAgICAgICBzZWVkLAorICAg
ICAgICBjb250ZXh0LAorICAgICAgICAhZG9jdW1lbnRJc0hUTUwsCisgICAgICAgIHJlc3VsdHMs
CisgICAgICAgICFjb250ZXh0IHx8IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENv
bnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHQKKyAgICApOworICAgIHJldHVy
biByZXN1bHRzOworfTsKKworLy8gT25lLXRpbWUgYXNzaWdubWVudHMKKworLy8gU29ydCBzdGFi
aWxpdHkKK3N1cHBvcnQuc29ydFN0YWJsZSA9IGV4cGFuZG8uc3BsaXQoIiIpLnNvcnQoIHNvcnRP
cmRlciApLmpvaW4oIiIpID09PSBleHBhbmRvOworCisvLyBTdXBwb3J0OiBDaHJvbWUgMTQtMzUr
CisvLyBBbHdheXMgYXNzdW1lIGR1cGxpY2F0ZXMgaWYgdGhleSBhcmVuJ3QgcGFzc2VkIHRvIHRo
ZSBjb21wYXJpc29uIGZ1bmN0aW9uCitzdXBwb3J0LmRldGVjdER1cGxpY2F0ZXMgPSAhIWhhc0R1
cGxpY2F0ZTsKKworLy8gSW5pdGlhbGl6ZSBhZ2FpbnN0IHRoZSBkZWZhdWx0IGRvY3VtZW50Citz
ZXREb2N1bWVudCgpOworCisvLyBTdXBwb3J0OiBXZWJraXQ8NTM3LjMyIC0gU2FmYXJpIDYuMC4z
L0Nocm9tZSAyNSAoZml4ZWQgaW4gQ2hyb21lIDI3KQorLy8gRGV0YWNoZWQgbm9kZXMgY29uZm91
bmRpbmdseSBmb2xsb3cgKmVhY2ggb3RoZXIqCitzdXBwb3J0LnNvcnREZXRhY2hlZCA9IGFzc2Vy
dChmdW5jdGlvbiggZWwgKSB7CisgICAgLy8gU2hvdWxkIHJldHVybiAxLCBidXQgcmV0dXJucyA0
IChmb2xsb3dpbmcpCisgICAgcmV0dXJuIGVsLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJmaWVsZHNldCIpICkgJiAxOworfSk7CisKKy8vIFN1cHBvcnQ6
IElFPDgKKy8vIFByZXZlbnQgYXR0cmlidXRlL3Byb3BlcnR5ICJpbnRlcnBvbGF0aW9uIgorLy8g
aHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczUzNjQyOSUyOFZTLjg1
JTI5LmFzcHgKK2lmICggIWFzc2VydChmdW5jdGlvbiggZWwgKSB7CisgICAgZWwuaW5uZXJIVE1M
ID0gIjxhIGhyZWY9JyMnPjwvYT4iOworICAgIHJldHVybiBlbC5maXJzdENoaWxkLmdldEF0dHJp
YnV0ZSgiaHJlZiIpID09PSAiIyIgOworfSkgKSB7CisgICAgYWRkSGFuZGxlKCAidHlwZXxocmVm
fGhlaWdodHx3aWR0aCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHsKKyAgICAgICAg
aWYgKCAhaXNYTUwgKSB7CisgICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIG5h
bWUsIG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gInR5cGUiID8gMSA6IDIgKTsKKyAgICAgICAgfQor
ICAgIH0pOworfQorCisvLyBTdXBwb3J0OiBJRTw5CisvLyBVc2UgZGVmYXVsdFZhbHVlIGluIHBs
YWNlIG9mIGdldEF0dHJpYnV0ZSgidmFsdWUiKQoraWYgKCAhc3VwcG9ydC5hdHRyaWJ1dGVzIHx8
ICFhc3NlcnQoZnVuY3Rpb24oIGVsICkgeworICAgIGVsLmlubmVySFRNTCA9ICI8aW5wdXQvPiI7
CisgICAgZWwuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoICJ2YWx1ZSIsICIiICk7CisgICAgcmV0
dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCAidmFsdWUiICkgPT09ICIiOworfSkgKSB7
CisgICAgYWRkSGFuZGxlKCAidmFsdWUiLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7
CisgICAgICAgIGlmICggIWlzWE1MICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0g
ImlucHV0IiApIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtLmRlZmF1bHRWYWx1ZTsKKyAgICAg
ICAgfQorICAgIH0pOworfQorCisvLyBTdXBwb3J0OiBJRTw5CisvLyBVc2UgZ2V0QXR0cmlidXRl
Tm9kZSB0byBmZXRjaCBib29sZWFucyB3aGVuIGdldEF0dHJpYnV0ZSBsaWVzCitpZiAoICFhc3Nl
cnQoZnVuY3Rpb24oIGVsICkgeworICAgIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUoImRpc2FibGVk
IikgPT0gbnVsbDsKK30pICkgeworICAgIGFkZEhhbmRsZSggYm9vbGVhbnMsIGZ1bmN0aW9uKCBl
bGVtLCBuYW1lLCBpc1hNTCApIHsKKyAgICAgICAgdmFyIHZhbDsKKyAgICAgICAgaWYgKCAhaXNY
TUwgKSB7CisgICAgICAgICAgICByZXR1cm4gZWxlbVsgbmFtZSBdID09PSB0cnVlID8gbmFtZS50
b0xvd2VyQ2FzZSgpIDoKKyAgICAgICAgICAgICAgICAgICAgKHZhbCA9IGVsZW0uZ2V0QXR0cmli
dXRlTm9kZSggbmFtZSApKSAmJiB2YWwuc3BlY2lmaWVkID8KKyAgICAgICAgICAgICAgICAgICAg
dmFsLnZhbHVlIDoKKyAgICAgICAgICAgICAgICBudWxsOworICAgICAgICB9CisgICAgfSk7Cit9
CisKK3JldHVybiBTaXp6bGU7CisKK30pKCB3aW5kb3cgKTsKKworCisKK2pRdWVyeS5maW5kID0g
U2l6emxlOworalF1ZXJ5LmV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzOworCisvLyBEZXByZWNhdGVk
CitqUXVlcnkuZXhwclsgIjoiIF0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zOworalF1ZXJ5LnVuaXF1
ZVNvcnQgPSBqUXVlcnkudW5pcXVlID0gU2l6emxlLnVuaXF1ZVNvcnQ7CitqUXVlcnkudGV4dCA9
IFNpenpsZS5nZXRUZXh0OworalF1ZXJ5LmlzWE1MRG9jID0gU2l6emxlLmlzWE1MOworalF1ZXJ5
LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zOworalF1ZXJ5LmVzY2FwZVNlbGVjdG9yID0gU2l6
emxlLmVzY2FwZTsKKworCisKKwordmFyIGRpciA9IGZ1bmN0aW9uKCBlbGVtLCBkaXIsIHVudGls
ICkgeworICAgIHZhciBtYXRjaGVkID0gW10sCisgICAgICAgIHRydW5jYXRlID0gdW50aWwgIT09
IHVuZGVmaW5lZDsKKworICAgIHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSAmJiBlbGVt
Lm5vZGVUeXBlICE9PSA5ICkgeworICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7
CisgICAgICAgICAgICBpZiAoIHRydW5jYXRlICYmIGpRdWVyeSggZWxlbSApLmlzKCB1bnRpbCAp
ICkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
bWF0Y2hlZC5wdXNoKCBlbGVtICk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG1hdGNo
ZWQ7Cit9OworCisKK3ZhciBzaWJsaW5ncyA9IGZ1bmN0aW9uKCBuLCBlbGVtICkgeworICAgIHZh
ciBtYXRjaGVkID0gW107CisKKyAgICBmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkgewor
ICAgICAgICBpZiAoIG4ubm9kZVR5cGUgPT09IDEgJiYgbiAhPT0gZWxlbSApIHsKKyAgICAgICAg
ICAgIG1hdGNoZWQucHVzaCggbiApOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1h
dGNoZWQ7Cit9OworCisKK3ZhciBybmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVl
ZHNDb250ZXh0OworCit2YXIgcnNpbmdsZVRhZyA9ICggL148KFthLXpdW15cL1wwPjpceDIwXHRc
clxuXGZdKilbXHgyMFx0XHJcblxmXSpcLz8+KD86PFwvXDE+fCkkL2kgKTsKKworCisKK3ZhciBy
aXNTaW1wbGUgPSAvXi5bXjojXFtcLixdKiQvOworCisvLyBJbXBsZW1lbnQgdGhlIGlkZW50aWNh
bCBmdW5jdGlvbmFsaXR5IGZvciBmaWx0ZXIgYW5kIG5vdAorZnVuY3Rpb24gd2lubm93KCBlbGVt
ZW50cywgcXVhbGlmaWVyLCBub3QgKSB7CisgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcXVh
bGlmaWVyICkgKSB7CisgICAgICAgIHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0
aW9uKCBlbGVtLCBpICkgeworICAgICAgICAgICAgcmV0dXJuICEhcXVhbGlmaWVyLmNhbGwoIGVs
ZW0sIGksIGVsZW0gKSAhPT0gbm90OworICAgICAgICB9ICk7CisgICAgfQorCisgICAgLy8gU2lu
Z2xlIGVsZW1lbnQKKyAgICBpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHsKKyAgICAgICAgcmV0
dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAg
ICByZXR1cm4gKCBlbGVtID09PSBxdWFsaWZpZXIgKSAhPT0gbm90OworICAgICAgICB9ICk7Cisg
ICAgfQorCisgICAgLy8gQXJyYXlsaWtlIG9mIGVsZW1lbnRzIChqUXVlcnksIGFyZ3VtZW50cywg
QXJyYXkpCisgICAgaWYgKCB0eXBlb2YgcXVhbGlmaWVyICE9PSAic3RyaW5nIiApIHsKKyAgICAg
ICAgcmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7CisgICAg
ICAgICAgICByZXR1cm4gKCBpbmRleE9mLmNhbGwoIHF1YWxpZmllciwgZWxlbSApID4gLTEgKSAh
PT0gbm90OworICAgICAgICB9ICk7CisgICAgfQorCisgICAgLy8gU2ltcGxlIHNlbGVjdG9yIHRo
YXQgY2FuIGJlIGZpbHRlcmVkIGRpcmVjdGx5LCByZW1vdmluZyBub24tRWxlbWVudHMKKyAgICBp
ZiAoIHJpc1NpbXBsZS50ZXN0KCBxdWFsaWZpZXIgKSApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVy
eS5maWx0ZXIoIHF1YWxpZmllciwgZWxlbWVudHMsIG5vdCApOworICAgIH0KKworICAgIC8vIENv
bXBsZXggc2VsZWN0b3IsIGNvbXBhcmUgdGhlIHR3byBzZXRzLCByZW1vdmluZyBub24tRWxlbWVu
dHMKKyAgICBxdWFsaWZpZXIgPSBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzICk7
CisgICAgcmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7Cisg
ICAgICAgIHJldHVybiAoIGluZGV4T2YuY2FsbCggcXVhbGlmaWVyLCBlbGVtICkgPiAtMSApICE9
PSBub3QgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMTsKKyAgICB9ICk7Cit9CisKK2pRdWVyeS5maWx0
ZXIgPSBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHsKKyAgICB2YXIgZWxlbSA9IGVsZW1z
WyAwIF07CisKKyAgICBpZiAoIG5vdCApIHsKKyAgICAgICAgZXhwciA9ICI6bm90KCIgKyBleHBy
ICsgIikiOworICAgIH0KKworICAgIGlmICggZWxlbXMubGVuZ3RoID09PSAxICYmIGVsZW0ubm9k
ZVR5cGUgPT09IDEgKSB7CisgICAgICAgIHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0
b3IoIGVsZW0sIGV4cHIgKSA/IFsgZWxlbSBdIDogW107CisgICAgfQorCisgICAgcmV0dXJuIGpR
dWVyeS5maW5kLm1hdGNoZXMoIGV4cHIsIGpRdWVyeS5ncmVwKCBlbGVtcywgZnVuY3Rpb24oIGVs
ZW0gKSB7CisgICAgICAgIHJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxOworICAgIH0gKSApOwor
fTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworICAgIGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciAp
IHsKKyAgICAgICAgdmFyIGksIHJldCwKKyAgICAgICAgICAgIGxlbiA9IHRoaXMubGVuZ3RoLAor
ICAgICAgICAgICAgc2VsZiA9IHRoaXM7CisKKyAgICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3Ig
IT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVl
cnkoIHNlbGVjdG9yICkuZmlsdGVyKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KCBpID0gMDsgaSA8IGxlbjsgaSsrICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVy
eS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gKSApOworICAgICAgICB9CisKKyAgICAgICAgcmV0ID0gdGhpcy5wdXNo
U3RhY2soIFtdICk7CisKKyAgICAgICAgZm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHsKKyAg
ICAgICAgICAgIGpRdWVyeS5maW5kKCBzZWxlY3Rvciwgc2VsZlsgaSBdLCByZXQgKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBsZW4gPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIHJldCAp
IDogcmV0OworICAgIH0sCisgICAgZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwg
ZmFsc2UgKSApOworICAgIH0sCisgICAgbm90OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwg
dHJ1ZSApICk7CisgICAgfSwKKyAgICBpczogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAg
ICByZXR1cm4gISF3aW5ub3coCisgICAgICAgICAgICB0aGlzLAorCisgICAgICAgICAgICAvLyBJ
ZiB0aGlzIGlzIGEgcG9zaXRpb25hbC9yZWxhdGl2ZSBzZWxlY3RvciwgY2hlY2sgbWVtYmVyc2hp
cCBpbiB0aGUgcmV0dXJuZWQgc2V0CisgICAgICAgICAgICAvLyBzbyAkKCJwOmZpcnN0IikuaXMo
InA6bGFzdCIpIHdvbid0IHJldHVybiB0cnVlIGZvciBhIGRvYyB3aXRoIHR3byAicCIuCisgICAg
ICAgICAgICB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciICYmIHJuZWVkc0NvbnRleHQudGVz
dCggc2VsZWN0b3IgKSA/CisgICAgICAgICAgICAgICAgalF1ZXJ5KCBzZWxlY3RvciApIDoKKyAg
ICAgICAgICAgICAgICBzZWxlY3RvciB8fCBbXSwKKyAgICAgICAgICAgIGZhbHNlCisgICAgICAg
ICkubGVuZ3RoOworICAgIH0KK30gKTsKKworCisvLyBJbml0aWFsaXplIGEgalF1ZXJ5IG9iamVj
dAorCisKKy8vIEEgY2VudHJhbCByZWZlcmVuY2UgdG8gdGhlIHJvb3QgalF1ZXJ5KGRvY3VtZW50
KQordmFyIHJvb3RqUXVlcnksCisKKyAgICAvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhU
TUwgc3RyaW5ncworICAgIC8vIFByaW9yaXRpemUgI2lkIG92ZXIgPHRhZz4gdG8gYXZvaWQgWFNT
IHZpYSBsb2NhdGlvbi5oYXNoICgjOTUyMSkKKyAgICAvLyBTdHJpY3QgSFRNTCByZWNvZ25pdGlv
biAoIzExMjkwOiBtdXN0IHN0YXJ0IHdpdGggPCkKKyAgICAvLyBTaG9ydGN1dCBzaW1wbGUgI2lk
IGNhc2UgZm9yIHNwZWVkCisgICAgcnF1aWNrRXhwciA9IC9eKD86XHMqKDxbXHdcV10rPilbXj5d
KnwjKFtcdy1dKykpJC8sCisKKyAgICBpbml0ID0galF1ZXJ5LmZuLmluaXQgPSBmdW5jdGlvbigg
c2VsZWN0b3IsIGNvbnRleHQsIHJvb3QgKSB7CisgICAgICAgIHZhciBtYXRjaCwgZWxlbTsKKwor
ICAgICAgICAvLyBIQU5ETEU6ICQoIiIpLCAkKG51bGwpLCAkKHVuZGVmaW5lZCksICQoZmFsc2Up
CisgICAgICAgIGlmICggIXNlbGVjdG9yICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBNZXRob2QgaW5pdCgpIGFjY2VwdHMgYW4gYWx0ZXJuYXRl
IHJvb3RqUXVlcnkKKyAgICAgICAgLy8gc28gbWlncmF0ZSBjYW4gc3VwcG9ydCBqUXVlcnkuc3Vi
IChnaC0yMTAxKQorICAgICAgICByb290ID0gcm9vdCB8fCByb290alF1ZXJ5OworCisgICAgICAg
IC8vIEhhbmRsZSBIVE1MIHN0cmluZ3MKKyAgICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09
ICJzdHJpbmciICkgeworICAgICAgICAgICAgaWYgKCBzZWxlY3RvclsgMCBdID09PSAiPCIgJiYK
KyAgICAgICAgICAgICAgICBzZWxlY3Rvclsgc2VsZWN0b3IubGVuZ3RoIC0gMSBdID09PSAiPiIg
JiYKKyAgICAgICAgICAgICAgICBzZWxlY3Rvci5sZW5ndGggPj0gMyApIHsKKworICAgICAgICAg
ICAgICAgIC8vIEFzc3VtZSB0aGF0IHN0cmluZ3MgdGhhdCBzdGFydCBhbmQgZW5kIHdpdGggPD4g
YXJlIEhUTUwgYW5kIHNraXAgdGhlIHJlZ2V4IGNoZWNrCisgICAgICAgICAgICAgICAgbWF0Y2gg
PSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgbWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIE1hdGNoIGh0bWwgb3IgbWFrZSBzdXJlIG5vIGNvbnRl
eHQgaXMgc3BlY2lmaWVkIGZvciAjaWQKKyAgICAgICAgICAgIGlmICggbWF0Y2ggJiYgKCBtYXRj
aFsgMSBdIHx8ICFjb250ZXh0ICkgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBIQU5ETEU6ICQo
aHRtbCkgLT4gJChhcnJheSkKKyAgICAgICAgICAgICAgICBpZiAoIG1hdGNoWyAxIF0gKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ID8g
Y29udGV4dFsgMCBdIDogY29udGV4dDsKKworICAgICAgICAgICAgICAgICAgICAvLyBPcHRpb24g
dG8gcnVuIHNjcmlwdHMgaXMgdHJ1ZSBmb3IgYmFjay1jb21wYXQKKyAgICAgICAgICAgICAgICAg
ICAgLy8gSW50ZW50aW9uYWxseSBsZXQgdGhlIGVycm9yIGJlIHRocm93biBpZiBwYXJzZUhUTUwg
aXMgbm90IHByZXNlbnQKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCB0aGlzLCBq
UXVlcnkucGFyc2VIVE1MKAorICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbIDEgXSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgJiYgY29udGV4dC5ub2RlVHlwZSA/IGNvbnRl
eHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogZG9jdW1lbnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICB0cnVlCisgICAgICAgICAgICAgICAgICAgICkgKTsKKworICAgICAgICAgICAgICAg
ICAgICAvLyBIQU5ETEU6ICQoaHRtbCwgcHJvcHMpCisgICAgICAgICAgICAgICAgICAgIGlmICgg
cnNpbmdsZVRhZy50ZXN0KCBtYXRjaFsgMSBdICkgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNv
bnRleHQgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIG1hdGNoIGluIGNvbnRl
eHQgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9wZXJ0aWVzIG9mIGNv
bnRleHQgYXJlIGNhbGxlZCBhcyBtZXRob2RzIGlmIHBvc3NpYmxlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdGhpc1sgbWF0Y2ggXSApICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzWyBtYXRjaCBdKCBjb250ZXh0WyBt
YXRjaCBdICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAuLi5hbmQgb3RoZXJ3
aXNlIHNldCBhcyBhdHRyaWJ1dGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRyKCBtYXRjaCwgY29u
dGV4dFsgbWF0Y2ggXSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzOworCisgICAgICAgICAgICAgICAgLy8gSEFORExFOiAkKCNpZCkK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBlbGVtID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWyAyIF0gKTsKKworICAgICAgICAgICAgICAgICAg
ICBpZiAoIGVsZW0gKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluamVjdCB0aGUg
ZWxlbWVudCBkaXJlY3RseSBpbnRvIHRoZSBqUXVlcnkgb2JqZWN0CisgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzWyAwIF0gPSBlbGVtOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5s
ZW5ndGggPSAxOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSEFORExFOiAk
KGV4cHIsICQoLi4uKSkKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoICFjb250ZXh0IHx8IGNvbnRl
eHQuanF1ZXJ5ICkgeworICAgICAgICAgICAgICAgIHJldHVybiAoIGNvbnRleHQgfHwgcm9vdCAp
LmZpbmQoIHNlbGVjdG9yICk7CisKKyAgICAgICAgICAgIC8vIEhBTkRMRTogJChleHByLCBjb250
ZXh0KQorICAgICAgICAgICAgLy8gKHdoaWNoIGlzIGp1c3QgZXF1aXZhbGVudCB0bzogJChjb250
ZXh0KS5maW5kKGV4cHIpCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAvLyBIQU5ETEU6ICQoRE9NRWxlbWVudCkKKyAgICAgICAgfSBl
bHNlIGlmICggc2VsZWN0b3Iubm9kZVR5cGUgKSB7CisgICAgICAgICAgICB0aGlzWyAwIF0gPSBz
ZWxlY3RvcjsKKyAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gMTsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzOworCisgICAgICAgIC8vIEhBTkRMRTogJChmdW5jdGlvbikKKyAgICAgICAgLy8gU2hv
cnRjdXQgZm9yIGRvY3VtZW50IHJlYWR5CisgICAgICAgIH0gZWxzZSBpZiAoIGpRdWVyeS5pc0Z1
bmN0aW9uKCBzZWxlY3RvciApICkgeworICAgICAgICAgICAgcmV0dXJuIHJvb3QucmVhZHkgIT09
IHVuZGVmaW5lZCA/CisgICAgICAgICAgICAgICAgcm9vdC5yZWFkeSggc2VsZWN0b3IgKSA6CisK
KyAgICAgICAgICAgICAgICAvLyBFeGVjdXRlIGltbWVkaWF0ZWx5IGlmIHJlYWR5IGlzIG5vdCBw
cmVzZW50CisgICAgICAgICAgICAgICAgc2VsZWN0b3IoIGpRdWVyeSApOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yLCB0aGlzICk7CisgICAg
fTsKKworLy8gR2l2ZSB0aGUgaW5pdCBmdW5jdGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3Ig
bGF0ZXIgaW5zdGFudGlhdGlvbgoraW5pdC5wcm90b3R5cGUgPSBqUXVlcnkuZm47CisKKy8vIElu
aXRpYWxpemUgY2VudHJhbCByZWZlcmVuY2UKK3Jvb3RqUXVlcnkgPSBqUXVlcnkoIGRvY3VtZW50
ICk7CisKKwordmFyIHJwYXJlbnRzcHJldiA9IC9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxs
KSkvLAorCisgICAgLy8gTWV0aG9kcyBndWFyYW50ZWVkIHRvIHByb2R1Y2UgYSB1bmlxdWUgc2V0
IHdoZW4gc3RhcnRpbmcgZnJvbSBhIHVuaXF1ZSBzZXQKKyAgICBndWFyYW50ZWVkVW5pcXVlID0g
eworICAgICAgICBjaGlsZHJlbjogdHJ1ZSwKKyAgICAgICAgY29udGVudHM6IHRydWUsCisgICAg
ICAgIG5leHQ6IHRydWUsCisgICAgICAgIHByZXY6IHRydWUKKyAgICB9OworCitqUXVlcnkuZm4u
ZXh0ZW5kKCB7CisgICAgaGFzOiBmdW5jdGlvbiggdGFyZ2V0ICkgeworICAgICAgICB2YXIgdGFy
Z2V0cyA9IGpRdWVyeSggdGFyZ2V0LCB0aGlzICksCisgICAgICAgICAgICBsID0gdGFyZ2V0cy5s
ZW5ndGg7CisKKyAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgIHZhciBpID0gMDsKKyAgICAgICAgICAgIGZvciAoIDsgaSA8IGw7IGkrKyApIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5jb250YWlucyggdGhpcywgdGFyZ2V0c1sgaSBdICkg
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOworICAgIH0sCisKKyAgICBjbG9zZXN0OiBmdW5j
dGlvbiggc2VsZWN0b3JzLCBjb250ZXh0ICkgeworICAgICAgICB2YXIgY3VyLAorICAgICAgICAg
ICAgaSA9IDAsCisgICAgICAgICAgICBsID0gdGhpcy5sZW5ndGgsCisgICAgICAgICAgICBtYXRj
aGVkID0gW10sCisgICAgICAgICAgICB0YXJnZXRzID0gdHlwZW9mIHNlbGVjdG9ycyAhPT0gInN0
cmluZyIgJiYgalF1ZXJ5KCBzZWxlY3RvcnMgKTsKKworICAgICAgICAvLyBQb3NpdGlvbmFsIHNl
bGVjdG9ycyBuZXZlciBtYXRjaCwgc2luY2UgdGhlcmUncyBubyBfc2VsZWN0aW9uXyBjb250ZXh0
CisgICAgICAgIGlmICggIXJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3JzICkgKSB7CisgICAg
ICAgICAgICBmb3IgKCA7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgZm9yICggY3Vy
ID0gdGhpc1sgaSBdOyBjdXIgJiYgY3VyICE9PSBjb250ZXh0OyBjdXIgPSBjdXIucGFyZW50Tm9k
ZSApIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBBbHdheXMgc2tpcCBkb2N1bWVudCBmcmFn
bWVudHMKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjdXIubm9kZVR5cGUgPCAxMSAmJiAoIHRh
cmdldHMgPworICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cy5pbmRleCggY3VyICkgPiAt
MSA6CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IHBhc3Mgbm9uLWVsZW1lbnRz
IHRvIFNpenpsZQorICAgICAgICAgICAgICAgICAgICAgICAgY3VyLm5vZGVUeXBlID09PSAxICYm
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9y
KCBjdXIsIHNlbGVjdG9ycyApICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNo
ZWQucHVzaCggY3VyICk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZC5sZW5ndGggPiAxID8g
alF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKSA6IG1hdGNoZWQgKTsKKyAgICB9LAorCisgICAg
Ly8gRGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IHdpdGhpbiB0aGUgc2V0Cisg
ICAgaW5kZXg6IGZ1bmN0aW9uKCBlbGVtICkgeworCisgICAgICAgIC8vIE5vIGFyZ3VtZW50LCBy
ZXR1cm4gaW5kZXggaW4gcGFyZW50CisgICAgICAgIGlmICggIWVsZW0gKSB7CisgICAgICAgICAg
ICByZXR1cm4gKCB0aGlzWyAwIF0gJiYgdGhpc1sgMCBdLnBhcmVudE5vZGUgKSA/IHRoaXMuZmly
c3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTE7CisgICAgICAgIH0KKworICAgICAgICAvLyBJbmRl
eCBpbiBzZWxlY3RvcgorICAgICAgICBpZiAoIHR5cGVvZiBlbGVtID09PSAic3RyaW5nIiApIHsK
KyAgICAgICAgICAgIHJldHVybiBpbmRleE9mLmNhbGwoIGpRdWVyeSggZWxlbSApLCB0aGlzWyAw
IF0gKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhl
IGRlc2lyZWQgZWxlbWVudAorICAgICAgICByZXR1cm4gaW5kZXhPZi5jYWxsKCB0aGlzLAorCisg
ICAgICAgICAgICAvLyBJZiBpdCByZWNlaXZlcyBhIGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBl
bGVtZW50IGlzIHVzZWQKKyAgICAgICAgICAgIGVsZW0uanF1ZXJ5ID8gZWxlbVsgMCBdIDogZWxl
bQorICAgICAgICApOworICAgIH0sCisKKyAgICBhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29u
dGV4dCApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKAorICAgICAgICAgICAgalF1
ZXJ5LnVuaXF1ZVNvcnQoCisgICAgICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgp
LCBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgKQorICAgICAgICAgICAgKQorICAgICAgICAp
OworICAgIH0sCisKKyAgICBhZGRCYWNrOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAgICAg
IHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/CisgICAgICAgICAgICB0aGlzLnBy
ZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKCBzZWxlY3RvciApCisgICAgICAgICk7
CisgICAgfQorfSApOworCitmdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRpciApIHsKKyAgICB3aGls
ZSAoICggY3VyID0gY3VyWyBkaXIgXSApICYmIGN1ci5ub2RlVHlwZSAhPT0gMSApIHt9CisgICAg
cmV0dXJuIGN1cjsKK30KKworalF1ZXJ5LmVhY2goIHsKKyAgICBwYXJlbnQ6IGZ1bmN0aW9uKCBl
bGVtICkgeworICAgICAgICB2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlOworICAgICAgICBy
ZXR1cm4gcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSAhPT0gMTEgPyBwYXJlbnQgOiBudWxsOwor
ICAgIH0sCisgICAgcGFyZW50czogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHJldHVybiBk
aXIoIGVsZW0sICJwYXJlbnROb2RlIiApOworICAgIH0sCisgICAgcGFyZW50c1VudGlsOiBmdW5j
dGlvbiggZWxlbSwgaSwgdW50aWwgKSB7CisgICAgICAgIHJldHVybiBkaXIoIGVsZW0sICJwYXJl
bnROb2RlIiwgdW50aWwgKTsKKyAgICB9LAorICAgIG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkgewor
ICAgICAgICByZXR1cm4gc2libGluZyggZWxlbSwgIm5leHRTaWJsaW5nIiApOworICAgIH0sCisg
ICAgcHJldjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHJldHVybiBzaWJsaW5nKCBlbGVt
LCAicHJldmlvdXNTaWJsaW5nIiApOworICAgIH0sCisgICAgbmV4dEFsbDogZnVuY3Rpb24oIGVs
ZW0gKSB7CisgICAgICAgIHJldHVybiBkaXIoIGVsZW0sICJuZXh0U2libGluZyIgKTsKKyAgICB9
LAorICAgIHByZXZBbGw6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICByZXR1cm4gZGlyKCBl
bGVtLCAicHJldmlvdXNTaWJsaW5nIiApOworICAgIH0sCisgICAgbmV4dFVudGlsOiBmdW5jdGlv
biggZWxlbSwgaSwgdW50aWwgKSB7CisgICAgICAgIHJldHVybiBkaXIoIGVsZW0sICJuZXh0U2li
bGluZyIsIHVudGlsICk7CisgICAgfSwKKyAgICBwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBp
LCB1bnRpbCApIHsKKyAgICAgICAgcmV0dXJuIGRpciggZWxlbSwgInByZXZpb3VzU2libGluZyIs
IHVudGlsICk7CisgICAgfSwKKyAgICBzaWJsaW5nczogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAg
ICAgIHJldHVybiBzaWJsaW5ncyggKCBlbGVtLnBhcmVudE5vZGUgfHwge30gKS5maXJzdENoaWxk
LCBlbGVtICk7CisgICAgfSwKKyAgICBjaGlsZHJlbjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAg
ICAgIHJldHVybiBzaWJsaW5ncyggZWxlbS5maXJzdENoaWxkICk7CisgICAgfSwKKyAgICBjb250
ZW50czogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHJldHVybiBlbGVtLmNvbnRlbnREb2N1
bWVudCB8fCBqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTsKKyAgICB9Cit9LCBm
dW5jdGlvbiggbmFtZSwgZm4gKSB7CisgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbigg
dW50aWwsIHNlbGVjdG9yICkgeworICAgICAgICB2YXIgbWF0Y2hlZCA9IGpRdWVyeS5tYXAoIHRo
aXMsIGZuLCB1bnRpbCApOworCisgICAgICAgIGlmICggbmFtZS5zbGljZSggLTUgKSAhPT0gIlVu
dGlsIiApIHsKKyAgICAgICAgICAgIHNlbGVjdG9yID0gdW50aWw7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7Cisg
ICAgICAgICAgICBtYXRjaGVkID0galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIG1hdGNoZWQgKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICggdGhpcy5sZW5ndGggPiAxICkgeworCisgICAgICAg
ICAgICAvLyBSZW1vdmUgZHVwbGljYXRlcworICAgICAgICAgICAgaWYgKCAhZ3VhcmFudGVlZFVu
aXF1ZVsgbmFtZSBdICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS51bmlxdWVTb3J0KCBtYXRj
aGVkICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFJldmVyc2Ugb3JkZXIgZm9y
IHBhcmVudHMqIGFuZCBwcmV2LWRlcml2YXRpdmVzCisgICAgICAgICAgICBpZiAoIHJwYXJlbnRz
cHJldi50ZXN0KCBuYW1lICkgKSB7CisgICAgICAgICAgICAgICAgbWF0Y2hlZC5yZXZlcnNlKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3Rh
Y2soIG1hdGNoZWQgKTsKKyAgICB9OworfSApOwordmFyIHJub3RodG1sd2hpdGUgPSAoIC9bXlx4
MjBcdFxyXG5cZl0rL2cgKTsKKworCisKKy8vIENvbnZlcnQgU3RyaW5nLWZvcm1hdHRlZCBvcHRp
b25zIGludG8gT2JqZWN0LWZvcm1hdHRlZCBvbmVzCitmdW5jdGlvbiBjcmVhdGVPcHRpb25zKCBv
cHRpb25zICkgeworICAgIHZhciBvYmplY3QgPSB7fTsKKyAgICBqUXVlcnkuZWFjaCggb3B0aW9u
cy5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdLCBmdW5jdGlvbiggXywgZmxhZyApIHsKKyAg
ICAgICAgb2JqZWN0WyBmbGFnIF0gPSB0cnVlOworICAgIH0gKTsKKyAgICByZXR1cm4gb2JqZWN0
OworfQorCisvKgorICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5n
IHBhcmFtZXRlcnM6CisgKgorICogIG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Ut
c2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3cKKyAqICAgICAgICAgIHRoZSBj
YWxsYmFjayBsaXN0IGJlaGF2ZXMgb3IgYSBtb3JlIHRyYWRpdGlvbmFsIG9wdGlvbiBvYmplY3QK
KyAqCisgKiBCeSBkZWZhdWx0IGEgY2FsbGJhY2sgbGlzdCB3aWxsIGFjdCBsaWtlIGFuIGV2ZW50
IGNhbGxiYWNrIGxpc3QgYW5kIGNhbiBiZQorICogImZpcmVkIiBtdWx0aXBsZSB0aW1lcy4KKyAq
CisgKiBQb3NzaWJsZSBvcHRpb25zOgorICoKKyAqICBvbmNlOiAgICAgICAgICAgd2lsbCBlbnN1
cmUgdGhlIGNhbGxiYWNrIGxpc3QgY2FuIG9ubHkgYmUgZmlyZWQgb25jZSAobGlrZSBhIERlZmVy
cmVkKQorICoKKyAqICBtZW1vcnk6ICAgICAgICAgd2lsbCBrZWVwIHRyYWNrIG9mIHByZXZpb3Vz
IHZhbHVlcyBhbmQgd2lsbCBjYWxsIGFueSBjYWxsYmFjayBhZGRlZAorICogICAgICAgICAgICAg
ICAgICBhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBhd2F5IHdpdGggdGhlIGxh
dGVzdCAibWVtb3JpemVkIgorICogICAgICAgICAgICAgICAgICB2YWx1ZXMgKGxpa2UgYSBEZWZl
cnJlZCkKKyAqCisgKiAgdW5pcXVlOiAgICAgICAgIHdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2Fu
IG9ubHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KQorICoKKyAqICBz
dG9wT25GYWxzZTogICAgaW50ZXJydXB0IGNhbGxpbmdzIHdoZW4gYSBjYWxsYmFjayByZXR1cm5z
IGZhbHNlCisgKgorICovCitqUXVlcnkuQ2FsbGJhY2tzID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7
CisKKyAgICAvLyBDb252ZXJ0IG9wdGlvbnMgZnJvbSBTdHJpbmctZm9ybWF0dGVkIHRvIE9iamVj
dC1mb3JtYXR0ZWQgaWYgbmVlZGVkCisgICAgLy8gKHdlIGNoZWNrIGluIGNhY2hlIGZpcnN0KQor
ICAgIG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gInN0cmluZyIgPworICAgICAgICBjcmVh
dGVPcHRpb25zKCBvcHRpb25zICkgOgorICAgICAgICBqUXVlcnkuZXh0ZW5kKCB7fSwgb3B0aW9u
cyApOworCisgICAgdmFyIC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IGlzIGN1cnJlbnRseSBmaXJp
bmcKKyAgICAgICAgZmlyaW5nLAorCisgICAgICAgIC8vIExhc3QgZmlyZSB2YWx1ZSBmb3Igbm9u
LWZvcmdldHRhYmxlIGxpc3RzCisgICAgICAgIG1lbW9yeSwKKworICAgICAgICAvLyBGbGFnIHRv
IGtub3cgaWYgbGlzdCB3YXMgYWxyZWFkeSBmaXJlZAorICAgICAgICBmaXJlZCwKKworICAgICAg
ICAvLyBGbGFnIHRvIHByZXZlbnQgZmlyaW5nCisgICAgICAgIGxvY2tlZCwKKworICAgICAgICAv
LyBBY3R1YWwgY2FsbGJhY2sgbGlzdAorICAgICAgICBsaXN0ID0gW10sCisKKyAgICAgICAgLy8g
UXVldWUgb2YgZXhlY3V0aW9uIGRhdGEgZm9yIHJlcGVhdGFibGUgbGlzdHMKKyAgICAgICAgcXVl
dWUgPSBbXSwKKworICAgICAgICAvLyBJbmRleCBvZiBjdXJyZW50bHkgZmlyaW5nIGNhbGxiYWNr
IChtb2RpZmllZCBieSBhZGQvcmVtb3ZlIGFzIG5lZWRlZCkKKyAgICAgICAgZmlyaW5nSW5kZXgg
PSAtMSwKKworICAgICAgICAvLyBGaXJlIGNhbGxiYWNrcworICAgICAgICBmaXJlID0gZnVuY3Rp
b24oKSB7CisKKyAgICAgICAgICAgIC8vIEVuZm9yY2Ugc2luZ2xlLWZpcmluZworICAgICAgICAg
ICAgbG9ja2VkID0gb3B0aW9ucy5vbmNlOworCisgICAgICAgICAgICAvLyBFeGVjdXRlIGNhbGxi
YWNrcyBmb3IgYWxsIHBlbmRpbmcgZXhlY3V0aW9ucywKKyAgICAgICAgICAgIC8vIHJlc3BlY3Rp
bmcgZmlyaW5nSW5kZXggb3ZlcnJpZGVzIGFuZCBydW50aW1lIGNoYW5nZXMKKyAgICAgICAgICAg
IGZpcmVkID0gZmlyaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIGZvciAoIDsgcXVldWUubGVuZ3Ro
OyBmaXJpbmdJbmRleCA9IC0xICkgeworICAgICAgICAgICAgICAgIG1lbW9yeSA9IHF1ZXVlLnNo
aWZ0KCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKCArK2ZpcmluZ0luZGV4IDwgbGlzdC5sZW5n
dGggKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gUnVuIGNhbGxiYWNrIGFuZCBjaGVjayBm
b3IgZWFybHkgdGVybWluYXRpb24KKyAgICAgICAgICAgICAgICAgICAgaWYgKCBsaXN0WyBmaXJp
bmdJbmRleCBdLmFwcGx5KCBtZW1vcnlbIDAgXSwgbWVtb3J5WyAxIF0gKSA9PT0gZmFsc2UgJiYK
KyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc3RvcE9uRmFsc2UgKSB7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEp1bXAgdG8gZW5kIGFuZCBmb3JnZXQgdGhlIGRhdGEgc28g
LmFkZCBkb2Vzbid0IHJlLWZpcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpcmluZ0luZGV4
ID0gbGlzdC5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gRm9yZ2V0IHRoZSBkYXRhIGlmIHdlJ3JlIGRvbmUgd2l0aCBpdAor
ICAgICAgICAgICAgaWYgKCAhb3B0aW9ucy5tZW1vcnkgKSB7CisgICAgICAgICAgICAgICAgbWVt
b3J5ID0gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZpcmluZyA9IGZhbHNl
OworCisgICAgICAgICAgICAvLyBDbGVhbiB1cCBpZiB3ZSdyZSBkb25lIGZpcmluZyBmb3IgZ29v
ZAorICAgICAgICAgICAgaWYgKCBsb2NrZWQgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBLZWVw
IGFuIGVtcHR5IGxpc3QgaWYgd2UgaGF2ZSBkYXRhIGZvciBmdXR1cmUgYWRkIGNhbGxzCisgICAg
ICAgICAgICAgICAgaWYgKCBtZW1vcnkgKSB7CisgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBb
XTsKKworICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgdGhpcyBvYmplY3QgaXMgc3BlbnQK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBsaXN0ID0gIiI7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAg
IC8vIEFjdHVhbCBDYWxsYmFja3Mgb2JqZWN0CisgICAgICAgIHNlbGYgPSB7CisKKyAgICAgICAg
ICAgIC8vIEFkZCBhIGNhbGxiYWNrIG9yIGEgY29sbGVjdGlvbiBvZiBjYWxsYmFja3MgdG8gdGhl
IGxpc3QKKyAgICAgICAgICAgIGFkZDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYg
KCBsaXN0ICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgbWVtb3J5IGZy
b20gYSBwYXN0IHJ1biwgd2Ugc2hvdWxkIGZpcmUgYWZ0ZXIgYWRkaW5nCisgICAgICAgICAgICAg
ICAgICAgIGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHF1ZXVlLnB1c2goIG1lbW9yeSApOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgKCBmdW5jdGlvbiBhZGQoIGFyZ3MgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkuZWFjaCggYXJncywgZnVuY3Rpb24oIF8sIGFyZyApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBhcmcgKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhb3B0aW9ucy51bmlxdWUgfHwgIXNlbGYu
aGFzKCBhcmcgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Qu
cHVzaCggYXJnICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBhcmcgJiYgYXJnLmxlbmd0aCAmJiBqUXVl
cnkudHlwZSggYXJnICkgIT09ICJzdHJpbmciICkgeworCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEluc3BlY3QgcmVjdXJzaXZlbHkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkKCBhcmcgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB9ICk7CisgICAgICAgICAgICAgICAgICAgIH0gKSggYXJndW1l
bnRzICk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZpcmUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAg
ICAgIH0sCisKKyAgICAgICAgICAgIC8vIFJlbW92ZSBhIGNhbGxiYWNrIGZyb20gdGhlIGxpc3QK
KyAgICAgICAgICAgIHJlbW92ZTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5
LmVhY2goIGFyZ3VtZW50cywgZnVuY3Rpb24oIF8sIGFyZyApIHsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIGluZGV4OworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoICggaW5kZXggPSBqUXVl
cnkuaW5BcnJheSggYXJnLCBsaXN0LCBpbmRleCApICkgPiAtMSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxpc3Quc3BsaWNlKCBpbmRleCwgMSApOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBIYW5kbGUgZmlyaW5nIGluZGV4ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggaW5kZXggPD0gZmlyaW5nSW5kZXggKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmlyaW5nSW5kZXgtLTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0gKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp
czsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIGEgZ2l2ZW4gY2Fs
bGJhY2sgaXMgaW4gdGhlIGxpc3QuCisgICAgICAgICAgICAvLyBJZiBubyBhcmd1bWVudCBpcyBn
aXZlbiwgcmV0dXJuIHdoZXRoZXIgb3Igbm90IGxpc3QgaGFzIGNhbGxiYWNrcyBhdHRhY2hlZC4K
KyAgICAgICAgICAgIGhhczogZnVuY3Rpb24oIGZuICkgeworICAgICAgICAgICAgICAgIHJldHVy
biBmbiA/CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5pbkFycmF5KCBmbiwgbGlzdCApID4g
LTEgOgorICAgICAgICAgICAgICAgICAgICBsaXN0Lmxlbmd0aCA+IDA7CisgICAgICAgICAgICB9
LAorCisgICAgICAgICAgICAvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0Cisg
ICAgICAgICAgICBlbXB0eTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYgKCBsaXN0
ICkgeworICAgICAgICAgICAgICAgICAgICBsaXN0ID0gW107CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfSwKKworICAgICAgICAg
ICAgLy8gRGlzYWJsZSAuZmlyZSBhbmQgLmFkZAorICAgICAgICAgICAgLy8gQWJvcnQgYW55IGN1
cnJlbnQvcGVuZGluZyBleGVjdXRpb25zCisgICAgICAgICAgICAvLyBDbGVhciBhbGwgY2FsbGJh
Y2tzIGFuZCB2YWx1ZXMKKyAgICAgICAgICAgIGRpc2FibGU6IGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgIGxvY2tlZCA9IHF1ZXVlID0gW107CisgICAgICAgICAgICAgICAgbGlzdCA9IG1l
bW9yeSA9ICIiOworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgIGRpc2FibGVkOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gIWxpc3Q7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAvLyBEaXNhYmxlIC5maXJl
CisgICAgICAgICAgICAvLyBBbHNvIGRpc2FibGUgLmFkZCB1bmxlc3Mgd2UgaGF2ZSBtZW1vcnkg
KHNpbmNlIGl0IHdvdWxkIGhhdmUgbm8gZWZmZWN0KQorICAgICAgICAgICAgLy8gQWJvcnQgYW55
IHBlbmRpbmcgZXhlY3V0aW9ucworICAgICAgICAgICAgbG9jazogZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgbG9ja2VkID0gcXVldWUgPSBbXTsKKyAgICAgICAgICAgICAgICBpZiAoICFt
ZW1vcnkgJiYgIWZpcmluZyApIHsKKyAgICAgICAgICAgICAgICAgICAgbGlzdCA9IG1lbW9yeSA9
ICIiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICBsb2NrZWQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgIHJldHVybiAhIWxvY2tlZDsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8v
IENhbGwgYWxsIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBjb250ZXh0IGFuZCBhcmd1bWVudHMK
KyAgICAgICAgICAgIGZpcmVXaXRoOiBmdW5jdGlvbiggY29udGV4dCwgYXJncyApIHsKKyAgICAg
ICAgICAgICAgICBpZiAoICFsb2NrZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBh
cmdzIHx8IFtdOworICAgICAgICAgICAgICAgICAgICBhcmdzID0gWyBjb250ZXh0LCBhcmdzLnNs
aWNlID8gYXJncy5zbGljZSgpIDogYXJncyBdOworICAgICAgICAgICAgICAgICAgICBxdWV1ZS5w
dXNoKCBhcmdzICk7CisgICAgICAgICAgICAgICAgICAgIGlmICggIWZpcmluZyApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZpcmUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0s
CisKKyAgICAgICAgICAgIC8vIENhbGwgYWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4g
YXJndW1lbnRzCisgICAgICAgICAgICBmaXJlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICBzZWxmLmZpcmVXaXRoKCB0aGlzLCBhcmd1bWVudHMgKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8vIFRvIGtub3cgaWYgdGhl
IGNhbGxiYWNrcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZQorICAgICAg
ICAgICAgZmlyZWQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiAhIWZpcmVk
OworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgcmV0dXJuIHNlbGY7Cit9OworCisK
K2Z1bmN0aW9uIElkZW50aXR5KCB2ICkgeworICAgIHJldHVybiB2OworfQorZnVuY3Rpb24gVGhy
b3dlciggZXggKSB7CisgICAgdGhyb3cgZXg7Cit9CisKK2Z1bmN0aW9uIGFkb3B0VmFsdWUoIHZh
bHVlLCByZXNvbHZlLCByZWplY3QgKSB7CisgICAgdmFyIG1ldGhvZDsKKworICAgIHRyeSB7CisK
KyAgICAgICAgLy8gQ2hlY2sgZm9yIHByb21pc2UgYXNwZWN0IGZpcnN0IHRvIHByaXZpbGVnZSBz
eW5jaHJvbm91cyBiZWhhdmlvcgorICAgICAgICBpZiAoIHZhbHVlICYmIGpRdWVyeS5pc0Z1bmN0
aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnByb21pc2UgKSApICkgeworICAgICAgICAgICAgbWV0aG9k
LmNhbGwoIHZhbHVlICkuZG9uZSggcmVzb2x2ZSApLmZhaWwoIHJlamVjdCApOworCisgICAgICAg
IC8vIE90aGVyIHRoZW5hYmxlcworICAgICAgICB9IGVsc2UgaWYgKCB2YWx1ZSAmJiBqUXVlcnku
aXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS50aGVuICkgKSApIHsKKyAgICAgICAgICAgIG1l
dGhvZC5jYWxsKCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0ICk7CisKKyAgICAgICAgLy8gT3RoZXIg
bm9uLXRoZW5hYmxlcworICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAvLyBTdXBwb3J0
OiBBbmRyb2lkIDQuMCBvbmx5CisgICAgICAgICAgICAvLyBTdHJpY3QgbW9kZSBmdW5jdGlvbnMg
aW52b2tlZCB3aXRob3V0IC5jYWxsLy5hcHBseSBnZXQgZ2xvYmFsLW9iamVjdCBjb250ZXh0Cisg
ICAgICAgICAgICByZXNvbHZlLmNhbGwoIHVuZGVmaW5lZCwgdmFsdWUgKTsKKyAgICAgICAgfQor
CisgICAgLy8gRm9yIFByb21pc2VzL0ErLCBjb252ZXJ0IGV4Y2VwdGlvbnMgaW50byByZWplY3Rp
b25zCisgICAgLy8gU2luY2UgalF1ZXJ5LndoZW4gZG9lc24ndCB1bndyYXAgdGhlbmFibGVzLCB3
ZSBjYW4gc2tpcCB0aGUgZXh0cmEgY2hlY2tzIGFwcGVhcmluZyBpbgorICAgIC8vIERlZmVycmVk
I3RoZW4gdG8gY29uZGl0aW9uYWxseSBzdXBwcmVzcyByZWplY3Rpb24uCisgICAgfSBjYXRjaCAo
IHZhbHVlICkgeworCisgICAgICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIG9ubHkKKyAgICAg
ICAgLy8gU3RyaWN0IG1vZGUgZnVuY3Rpb25zIGludm9rZWQgd2l0aG91dCAuY2FsbC8uYXBwbHkg
Z2V0IGdsb2JhbC1vYmplY3QgY29udGV4dAorICAgICAgICByZWplY3QuY2FsbCggdW5kZWZpbmVk
LCB2YWx1ZSApOworICAgIH0KK30KKworalF1ZXJ5LmV4dGVuZCggeworCisgICAgRGVmZXJyZWQ6
IGZ1bmN0aW9uKCBmdW5jICkgeworICAgICAgICB2YXIgdHVwbGVzID0gWworCisgICAgICAgICAg
ICAgICAgLy8gYWN0aW9uLCBhZGQgbGlzdGVuZXIsIGNhbGxiYWNrcywKKyAgICAgICAgICAgICAg
ICAvLyAuLi4gLnRoZW4gaGFuZGxlcnMsIGFyZ3VtZW50IGluZGV4LCBbZmluYWwgc3RhdGVdCisg
ICAgICAgICAgICAgICAgWyAibm90aWZ5IiwgInByb2dyZXNzIiwgalF1ZXJ5LkNhbGxiYWNrcygg
Im1lbW9yeSIgKSwKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LkNhbGxiYWNrcyggIm1lbW9y
eSIgKSwgMiBdLAorICAgICAgICAgICAgICAgIFsgInJlc29sdmUiLCAiZG9uZSIsIGpRdWVyeS5D
YWxsYmFja3MoICJvbmNlIG1lbW9yeSIgKSwKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LkNh
bGxiYWNrcyggIm9uY2UgbWVtb3J5IiApLCAwLCAicmVzb2x2ZWQiIF0sCisgICAgICAgICAgICAg
ICAgWyAicmVqZWN0IiwgImZhaWwiLCBqUXVlcnkuQ2FsbGJhY2tzKCAib25jZSBtZW1vcnkiICks
CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5DYWxsYmFja3MoICJvbmNlIG1lbW9yeSIgKSwg
MSwgInJlamVjdGVkIiBdCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgc3RhdGUgPSAicGVu
ZGluZyIsCisgICAgICAgICAgICBwcm9taXNlID0geworICAgICAgICAgICAgICAgIHN0YXRlOiBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlOworICAgICAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICAgICAgYWx3YXlzOiBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZGVmZXJyZWQuZG9uZSggYXJndW1lbnRzICkuZmFpbCggYXJndW1lbnRzICk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICAgICAgImNhdGNoIjogZnVuY3Rpb24oIGZuICkgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcHJvbWlzZS50aGVuKCBudWxsLCBmbiApOworICAgICAgICAgICAgICAgIH0s
CisKKyAgICAgICAgICAgICAgICAvLyBLZWVwIHBpcGUgZm9yIGJhY2stY29tcGF0CisgICAgICAg
ICAgICAgICAgcGlwZTogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICov
ICkgeworICAgICAgICAgICAgICAgICAgICB2YXIgZm5zID0gYXJndW1lbnRzOworCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9u
KCBpLCB0dXBsZSApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1hcCB0dXBs
ZXMgKHByb2dyZXNzLCBkb25lLCBmYWlsKSB0byBhcmd1bWVudHMgKGRvbmUsIGZhaWwsIHByb2dy
ZXNzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbiA9IGpRdWVyeS5pc0Z1bmN0
aW9uKCBmbnNbIHR1cGxlWyA0IF0gXSApICYmIGZuc1sgdHVwbGVbIDQgXSBdOworCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gZGVmZXJyZWQucHJvZ3Jlc3MoZnVuY3Rpb24oKSB7IGJp
bmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIubm90aWZ5IH0pCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gZGVmZXJyZWQuZG9uZShmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBv
ciBuZXdEZWZlci5yZXNvbHZlIH0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVm
ZXJyZWQuZmFpbChmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5yZWpl
Y3QgfSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZFsgdHVwbGVbIDEgXSBd
KCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldHVy
bmVkID0gZm4gJiYgZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHJldHVybmVkICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXR1
cm5lZC5wcm9taXNlICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm5lZC5wcm9taXNlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAucHJvZ3Jlc3MoIG5ld0RlZmVyLm5vdGlmeSApCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLmRvbmUoIG5ld0RlZmVyLnJlc29sdmUgKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5ld0RlZmVyWyB0dXBsZVsgMCBdICsgIldpdGgiIF0oCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmbiA/IFsgcmV0dXJuZWQgXSA6IGFyZ3VtZW50cworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZucyA9IG51bGw7
CisgICAgICAgICAgICAgICAgICAgIH0gKS5wcm9taXNlKCk7CisgICAgICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgICAgICB0aGVuOiBmdW5jdGlvbiggb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQs
IG9uUHJvZ3Jlc3MgKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBtYXhEZXB0aCA9IDA7Cisg
ICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmUoIGRlcHRoLCBkZWZlcnJlZCwgaGFu
ZGxlciwgc3BlY2lhbCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmd1bWVudHMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1pZ2h0VGhyb3cgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXR1cm5lZCwgdGhlbjsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2Vj
dGlvbiAyLjMuMy4zLjMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0
dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU5CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJZ25vcmUgZG91YmxlLXJlc29sdXRpb24gYXR0ZW1wdHMKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGVwdGggPCBtYXhEZXB0aCApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybmVkID0gaGFuZGxlci5hcHBseSggdGhhdCwgYXJncyApOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBQcm9taXNlcy9B
KyBzZWN0aW9uIDIuMy4xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBo
dHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC00OAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCByZXR1cm5lZCA9PT0gZGVmZXJyZWQucHJvbWlzZSgpICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJy
b3IoICJUaGVuYWJsZSBzZWxmLXJlc29sdXRpb24iICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb25zIDIuMy4zLjEsIDMuNQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9p
bnQtNTQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vcHJv
bWlzZXNhcGx1cy5jb20vI3BvaW50LTc1CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBSZXRyaWV2ZSBgdGhlbmAgb25seSBvbmNlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGVuID0gcmV0dXJuZWQgJiYKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL3Byb21p
c2VzYXBsdXMuY29tLyNwb2ludC02NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIE9ubHkgY2hlY2sgb2JqZWN0cyBhbmQgZnVuY3Rpb25zIGZvciB0aGVuYWJpbGl0
eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggdHlwZW9mIHJldHVy
bmVkID09PSAib2JqZWN0IiB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlb2YgcmV0dXJuZWQgPT09ICJmdW5jdGlvbiIgKSAmJgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkLnRoZW47CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBhIHJldHVybmVkIHRoZW5hYmxlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9u
KCB0aGVuICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBTcGVjaWFsIHByb2Nlc3NvcnMgKG5vdGlmeSkganVzdCB3YWl0IGZvciByZXNvbHV0aW9uCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzcGVjaWFsICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuLmNhbGwoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5lZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUo
IG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksIHNwZWNpYWwgKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoIG1heERlcHRoLCBkZWZl
cnJlZCwgVGhyb3dlciwgc3BlY2lhbCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBOb3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgYWxzbyBob29rIGludG8gcHJvZ3Jlc3MK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC4uLmFuZCBkaXNyZWdh
cmQgb2xkZXIgcmVzb2x1dGlvbiB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWF4RGVwdGgrKzsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGVuLmNhbGwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm5lZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRp
dHksIHNwZWNpYWwgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgVGhyb3dlciwgc3BlY2lhbCApLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgg
bWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5ub3RpZnlXaXRoICkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEhhbmRsZSBhbGwgb3RoZXIgcmV0dXJuZWQgdmFsdWVzCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29u
dGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBtdWx0
aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggaGFuZGxlciAhPT0gSWRlbnRpdHkgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgPSB1bmRlZmluZWQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBbIHJldHVybmVk
IF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJvY2VzcyB0aGUgdmFsdWUocykK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IHByb2Nl
c3MgaXMgcmVzb2x2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgg
c3BlY2lhbCB8fCBkZWZlcnJlZC5yZXNvbHZlV2l0aCApKCB0aGF0LCBhcmdzICk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25seSBub3Jt
YWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgY2F0Y2ggYW5kIHJlamVjdCBleGNlcHRpb25zCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MgPSBzcGVjaWFsID8KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pZ2h0VGhyb3cgOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWlnaHRUaHJvdygpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gY2F0Y2ggKCBlICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuRGVm
ZXJyZWQuZXhjZXB0aW9uSG9vayggZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLnN0YWNrVHJhY2UgKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4z
LjMuMy40LjEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
aHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjEKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIHBvc3QtcmVzb2x1dGlvbiBleGNlcHRp
b25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGVw
dGggKyAxID49IG1heERlcHRoICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBPbmx5IHN1YnN0aXR1dGUgaGFuZGxlcnMgcGFzcyBvbiBjb250
ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBh
bmQgbXVsdGlwbGUgdmFsdWVzIChub24tc3BlYyBiZWhhdmlvcikKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaGFuZGxlciAhPT0gVGhyb3dlciAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGF0ID0gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFyZ3MgPSBbIGUgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmZXJyZWQucmVqZWN0V2l0aCggdGhhdCwgYXJncyApOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IFByb21p
c2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
aHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTcKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBSZS1yZXNvbHZlIHByb21pc2VzIGltbWVkaWF0ZWx5IHRvIGRvZGdlIGZhbHNl
IHJlamVjdGlvbiBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3Vic2VxdWVu
dCBlcnJvcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRlcHRoICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBDYWxsIGFuIG9wdGlvbmFsIGhvb2sgdG8gcmVjb3JkIHRoZSBzdGFjaywgaW4gY2FzZSBvZiBl
eGNlcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2luY2UgaXQncyBv
dGhlcndpc2UgbG9zdCB3aGVuIGV4ZWN1dGlvbiBnb2VzIGFzeW5jCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vayApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Muc3RhY2tUcmFjZSA9IGpR
dWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2soKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91
dCggcHJvY2VzcyApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHByb2dyZXNzX2hhbmRsZXJzLmFkZCggLi4uICkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHR1cGxlc1sgMCBdWyAzIF0uYWRkKAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc29sdmUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0RlZmVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuaXNGdW5jdGlvbiggb25Qcm9ncmVzcyApID8K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3MgOgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRlbnRpdHksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5ld0RlZmVyLm5vdGlmeVdpdGgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBmdWxmaWxsZWRfaGFuZGxlcnMuYWRkKCAuLi4gKQorICAgICAgICAgICAgICAg
ICAgICAgICAgdHVwbGVzWyAxIF1bIDMgXS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzb2x2ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbmV3RGVmZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS5pc0Z1bmN0aW9uKCBvbkZ1bGZpbGxlZCApID8KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9uRnVsZmlsbGVkIDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIElkZW50aXR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KQorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuYWRkKCAuLi4gKQorICAgICAgICAgICAgICAgICAgICAgICAg
dHVwbGVzWyAyIF1bIDMgXS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2
ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3RGVmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5pc0Z1bmN0aW9uKCBvblJlamVjdGVkICkgPworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb25SZWplY3RlZCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUaHJvd2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAg
ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgfSApLnByb21pc2UoKTsKKyAg
ICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgLy8gR2V0IGEgcHJvbWlzZSBmb3Ig
dGhpcyBkZWZlcnJlZAorICAgICAgICAgICAgICAgIC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhl
IHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3QKKyAgICAgICAgICAgICAgICBw
cm9taXNlOiBmdW5jdGlvbiggb2JqICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2Jq
ICE9IG51bGwgPyBqUXVlcnkuZXh0ZW5kKCBvYmosIHByb21pc2UgKSA6IHByb21pc2U7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGRlZmVycmVkID0ge307
CisKKyAgICAgICAgLy8gQWRkIGxpc3Qtc3BlY2lmaWMgbWV0aG9kcworICAgICAgICBqUXVlcnku
ZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7CisgICAgICAgICAgICB2YXIgbGlz
dCA9IHR1cGxlWyAyIF0sCisgICAgICAgICAgICAgICAgc3RhdGVTdHJpbmcgPSB0dXBsZVsgNSBd
OworCisgICAgICAgICAgICAvLyBwcm9taXNlLnByb2dyZXNzID0gbGlzdC5hZGQKKyAgICAgICAg
ICAgIC8vIHByb21pc2UuZG9uZSA9IGxpc3QuYWRkCisgICAgICAgICAgICAvLyBwcm9taXNlLmZh
aWwgPSBsaXN0LmFkZAorICAgICAgICAgICAgcHJvbWlzZVsgdHVwbGVbIDEgXSBdID0gbGlzdC5h
ZGQ7CisKKyAgICAgICAgICAgIC8vIEhhbmRsZSBzdGF0ZQorICAgICAgICAgICAgaWYgKCBzdGF0
ZVN0cmluZyApIHsKKyAgICAgICAgICAgICAgICBsaXN0LmFkZCgKKyAgICAgICAgICAgICAgICAg
ICAgZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXRlID0gInJl
c29sdmVkIiAoaS5lLiwgZnVsZmlsbGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3Rh
dGUgPSAicmVqZWN0ZWQiCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlU3Ry
aW5nOworICAgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgIC8vIHJl
amVjdGVkX2NhbGxiYWNrcy5kaXNhYmxlCisgICAgICAgICAgICAgICAgICAgIC8vIGZ1bGZpbGxl
ZF9jYWxsYmFja3MuZGlzYWJsZQorICAgICAgICAgICAgICAgICAgICB0dXBsZXNbIDMgLSBpIF1b
IDIgXS5kaXNhYmxlLAorCisgICAgICAgICAgICAgICAgICAgIC8vIHByb2dyZXNzX2NhbGxiYWNr
cy5sb2NrCisgICAgICAgICAgICAgICAgICAgIHR1cGxlc1sgMCBdWyAyIF0ubG9jaworICAgICAg
ICAgICAgICAgICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHByb2dyZXNzX2hh
bmRsZXJzLmZpcmUKKyAgICAgICAgICAgIC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5maXJlCisgICAg
ICAgICAgICAvLyByZWplY3RlZF9oYW5kbGVycy5maXJlCisgICAgICAgICAgICBsaXN0LmFkZCgg
dHVwbGVbIDMgXS5maXJlICk7CisKKyAgICAgICAgICAgIC8vIGRlZmVycmVkLm5vdGlmeSA9IGZ1
bmN0aW9uKCkgeyBkZWZlcnJlZC5ub3RpZnlXaXRoKC4uLikgfQorICAgICAgICAgICAgLy8gZGVm
ZXJyZWQucmVzb2x2ZSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZXNvbHZlV2l0aCguLi4pIH0K
KyAgICAgICAgICAgIC8vIGRlZmVycmVkLnJlamVjdCA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5y
ZWplY3RXaXRoKC4uLikgfQorICAgICAgICAgICAgZGVmZXJyZWRbIHR1cGxlWyAwIF0gXSA9IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGRlZmVycmVkWyB0dXBsZVsgMCBdICsgIldpdGgi
IF0oIHRoaXMgPT09IGRlZmVycmVkID8gdW5kZWZpbmVkIDogdGhpcywgYXJndW1lbnRzICk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9OworCisgICAgICAgICAg
ICAvLyBkZWZlcnJlZC5ub3RpZnlXaXRoID0gbGlzdC5maXJlV2l0aAorICAgICAgICAgICAgLy8g
ZGVmZXJyZWQucmVzb2x2ZVdpdGggPSBsaXN0LmZpcmVXaXRoCisgICAgICAgICAgICAvLyBkZWZl
cnJlZC5yZWplY3RXaXRoID0gbGlzdC5maXJlV2l0aAorICAgICAgICAgICAgZGVmZXJyZWRbIHR1
cGxlWyAwIF0gKyAiV2l0aCIgXSA9IGxpc3QuZmlyZVdpdGg7CisgICAgICAgIH0gKTsKKworICAg
ICAgICAvLyBNYWtlIHRoZSBkZWZlcnJlZCBhIHByb21pc2UKKyAgICAgICAgcHJvbWlzZS5wcm9t
aXNlKCBkZWZlcnJlZCApOworCisgICAgICAgIC8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnkKKyAg
ICAgICAgaWYgKCBmdW5jICkgeworICAgICAgICAgICAgZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVm
ZXJyZWQgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFsbCBkb25lIQorICAgICAgICByZXR1
cm4gZGVmZXJyZWQ7CisgICAgfSwKKworICAgIC8vIERlZmVycmVkIGhlbHBlcgorICAgIHdoZW46
IGZ1bmN0aW9uKCBzaW5nbGVWYWx1ZSApIHsKKyAgICAgICAgdmFyCisKKyAgICAgICAgICAgIC8v
IGNvdW50IG9mIHVuY29tcGxldGVkIHN1Ym9yZGluYXRlcworICAgICAgICAgICAgcmVtYWluaW5n
ID0gYXJndW1lbnRzLmxlbmd0aCwKKworICAgICAgICAgICAgLy8gY291bnQgb2YgdW5wcm9jZXNz
ZWQgYXJndW1lbnRzCisgICAgICAgICAgICBpID0gcmVtYWluaW5nLAorCisgICAgICAgICAgICAv
LyBzdWJvcmRpbmF0ZSBmdWxmaWxsbWVudCBkYXRhCisgICAgICAgICAgICByZXNvbHZlQ29udGV4
dHMgPSBBcnJheSggaSApLAorICAgICAgICAgICAgcmVzb2x2ZVZhbHVlcyA9IHNsaWNlLmNhbGwo
IGFyZ3VtZW50cyApLAorCisgICAgICAgICAgICAvLyB0aGUgbWFzdGVyIERlZmVycmVkCisgICAg
ICAgICAgICBtYXN0ZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSwKKworICAgICAgICAgICAgLy8gc3Vi
b3JkaW5hdGUgY2FsbGJhY2sgZmFjdG9yeQorICAgICAgICAgICAgdXBkYXRlRnVuYyA9IGZ1bmN0
aW9uKCBpICkgeworICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJlc29sdmVDb250ZXh0c1sgaSBdID0gdGhpczsKKyAgICAgICAg
ICAgICAgICAgICAgcmVzb2x2ZVZhbHVlc1sgaSBdID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBz
bGljZS5jYWxsKCBhcmd1bWVudHMgKSA6IHZhbHVlOworICAgICAgICAgICAgICAgICAgICBpZiAo
ICEoIC0tcmVtYWluaW5nICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXIucmVz
b2x2ZVdpdGgoIHJlc29sdmVDb250ZXh0cywgcmVzb2x2ZVZhbHVlcyApOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAg
Ly8gU2luZ2xlLSBhbmQgZW1wdHkgYXJndW1lbnRzIGFyZSBhZG9wdGVkIGxpa2UgUHJvbWlzZS5y
ZXNvbHZlCisgICAgICAgIGlmICggcmVtYWluaW5nIDw9IDEgKSB7CisgICAgICAgICAgICBhZG9w
dFZhbHVlKCBzaW5nbGVWYWx1ZSwgbWFzdGVyLmRvbmUoIHVwZGF0ZUZ1bmMoIGkgKSApLnJlc29s
dmUsIG1hc3Rlci5yZWplY3QgKTsKKworICAgICAgICAgICAgLy8gVXNlIC50aGVuKCkgdG8gdW53
cmFwIHNlY29uZGFyeSB0aGVuYWJsZXMgKGNmLiBnaC0zMDAwKQorICAgICAgICAgICAgaWYgKCBt
YXN0ZXIuc3RhdGUoKSA9PT0gInBlbmRpbmciIHx8CisgICAgICAgICAgICAgICAgalF1ZXJ5Lmlz
RnVuY3Rpb24oIHJlc29sdmVWYWx1ZXNbIGkgXSAmJiByZXNvbHZlVmFsdWVzWyBpIF0udGhlbiAp
ICkgeworCisgICAgICAgICAgICAgICAgcmV0dXJuIG1hc3Rlci50aGVuKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBNdWx0aXBsZSBhcmd1bWVudHMgYXJlIGFnZ3Jl
Z2F0ZWQgbGlrZSBQcm9taXNlLmFsbCBhcnJheSBlbGVtZW50cworICAgICAgICB3aGlsZSAoIGkt
LSApIHsKKyAgICAgICAgICAgIGFkb3B0VmFsdWUoIHJlc29sdmVWYWx1ZXNbIGkgXSwgdXBkYXRl
RnVuYyggaSApLCBtYXN0ZXIucmVqZWN0ICk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
bWFzdGVyLnByb21pc2UoKTsKKyAgICB9Cit9ICk7CisKKworLy8gVGhlc2UgdXN1YWxseSBpbmRp
Y2F0ZSBhIHByb2dyYW1tZXIgbWlzdGFrZSBkdXJpbmcgZGV2ZWxvcG1lbnQsCisvLyB3YXJuIGFi
b3V0IHRoZW0gQVNBUCByYXRoZXIgdGhhbiBzd2FsbG93aW5nIHRoZW0gYnkgZGVmYXVsdC4KK3Zh
ciByZXJyb3JOYW1lcyA9IC9eKEV2YWx8SW50ZXJuYWx8UmFuZ2V8UmVmZXJlbmNlfFN5bnRheHxU
eXBlfFVSSSlFcnJvciQvOworCitqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayA9IGZ1bmN0
aW9uKCBlcnJvciwgc3RhY2sgKSB7CisKKyAgICAvLyBTdXBwb3J0OiBJRSA4IC0gOSBvbmx5Cisg
ICAgLy8gQ29uc29sZSBleGlzdHMgd2hlbiBkZXYgdG9vbHMgYXJlIG9wZW4sIHdoaWNoIGNhbiBo
YXBwZW4gYXQgYW55IHRpbWUKKyAgICBpZiAoIHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25z
b2xlLndhcm4gJiYgZXJyb3IgJiYgcmVycm9yTmFtZXMudGVzdCggZXJyb3IubmFtZSApICkgewor
ICAgICAgICB3aW5kb3cuY29uc29sZS53YXJuKCAialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjog
IiArIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBzdGFjayApOworICAgIH0KK307CisKKwor
CisKK2pRdWVyeS5yZWFkeUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKCBlcnJvciApIHsKKyAgICB3aW5k
b3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7CisgICAgICAgIHRocm93IGVycm9yOworICAgIH0g
KTsKK307CisKKworCisKKy8vIFRoZSBkZWZlcnJlZCB1c2VkIG9uIERPTSByZWFkeQordmFyIHJl
YWR5TGlzdCA9IGpRdWVyeS5EZWZlcnJlZCgpOworCitqUXVlcnkuZm4ucmVhZHkgPSBmdW5jdGlv
biggZm4gKSB7CisKKyAgICByZWFkeUxpc3QKKyAgICAgICAgLnRoZW4oIGZuICkKKworICAgICAg
ICAvLyBXcmFwIGpRdWVyeS5yZWFkeUV4Y2VwdGlvbiBpbiBhIGZ1bmN0aW9uIHNvIHRoYXQgdGhl
IGxvb2t1cAorICAgICAgICAvLyBoYXBwZW5zIGF0IHRoZSB0aW1lIG9mIGVycm9yIGhhbmRsaW5n
IGluc3RlYWQgb2YgY2FsbGJhY2sKKyAgICAgICAgLy8gcmVnaXN0cmF0aW9uLgorICAgICAgICAu
Y2F0Y2goIGZ1bmN0aW9uKCBlcnJvciApIHsKKyAgICAgICAgICAgIGpRdWVyeS5yZWFkeUV4Y2Vw
dGlvbiggZXJyb3IgKTsKKyAgICAgICAgfSApOworCisgICAgcmV0dXJuIHRoaXM7Cit9OworCitq
UXVlcnkuZXh0ZW5kKCB7CisKKyAgICAvLyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJlIHVzZWQ/IFNl
dCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLgorICAgIGlzUmVhZHk6IGZhbHNlLAorCisgICAgLy8g
QSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9yIGJlZm9yZQorICAg
IC8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlICM2NzgxCisgICAgcmVhZHlXYWl0OiAxLAor
CisgICAgLy8gSG9sZCAob3IgcmVsZWFzZSkgdGhlIHJlYWR5IGV2ZW50CisgICAgaG9sZFJlYWR5
OiBmdW5jdGlvbiggaG9sZCApIHsKKyAgICAgICAgaWYgKCBob2xkICkgeworICAgICAgICAgICAg
alF1ZXJ5LnJlYWR5V2FpdCsrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgalF1ZXJ5
LnJlYWR5KCB0cnVlICk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLy8gSGFuZGxlIHdoZW4g
dGhlIERPTSBpcyByZWFkeQorICAgIHJlYWR5OiBmdW5jdGlvbiggd2FpdCApIHsKKworICAgICAg
ICAvLyBBYm9ydCBpZiB0aGVyZSBhcmUgcGVuZGluZyBob2xkcyBvciB3ZSdyZSBhbHJlYWR5IHJl
YWR5CisgICAgICAgIGlmICggd2FpdCA9PT0gdHJ1ZSA/IC0talF1ZXJ5LnJlYWR5V2FpdCA6IGpR
dWVyeS5pc1JlYWR5ICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gUmVtZW1iZXIgdGhhdCB0aGUgRE9NIGlzIHJlYWR5CisgICAgICAgIGpRdWVyeS5pc1Jl
YWR5ID0gdHJ1ZTsKKworICAgICAgICAvLyBJZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmly
ZWQsIGRlY3JlbWVudCwgYW5kIHdhaXQgaWYgbmVlZCBiZQorICAgICAgICBpZiAoIHdhaXQgIT09
IHRydWUgJiYgLS1qUXVlcnkucmVhZHlXYWl0ID4gMCApIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRv
IGV4ZWN1dGUKKyAgICAgICAgcmVhZHlMaXN0LnJlc29sdmVXaXRoKCBkb2N1bWVudCwgWyBqUXVl
cnkgXSApOworICAgIH0KK30gKTsKKworalF1ZXJ5LnJlYWR5LnRoZW4gPSByZWFkeUxpc3QudGhl
bjsKKworLy8gVGhlIHJlYWR5IGV2ZW50IGhhbmRsZXIgYW5kIHNlbGYgY2xlYW51cCBtZXRob2QK
K2Z1bmN0aW9uIGNvbXBsZXRlZCgpIHsKKyAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVy
KCAiRE9NQ29udGVudExvYWRlZCIsIGNvbXBsZXRlZCApOworICAgIHdpbmRvdy5yZW1vdmVFdmVu
dExpc3RlbmVyKCAibG9hZCIsIGNvbXBsZXRlZCApOworICAgIGpRdWVyeS5yZWFkeSgpOworfQor
CisvLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZAorLy8g
YWZ0ZXIgdGhlIGJyb3dzZXIgZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJyZWQuCisvLyBTdXBwb3J0
OiBJRSA8PTkgLSAxMCBvbmx5CisvLyBPbGRlciBJRSBzb21ldGltZXMgc2lnbmFscyAiaW50ZXJh
Y3RpdmUiIHRvbyBzb29uCitpZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIg
fHwKKyAgICAoIGRvY3VtZW50LnJlYWR5U3RhdGUgIT09ICJsb2FkaW5nIiAmJiAhZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsICkgKSB7CisKKyAgICAvLyBIYW5kbGUgaXQgYXN5bmNo
cm9ub3VzbHkgdG8gYWxsb3cgc2NyaXB0cyB0aGUgb3Bwb3J0dW5pdHkgdG8gZGVsYXkgcmVhZHkK
KyAgICB3aW5kb3cuc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5ICk7CisKK30gZWxzZSB7CisKKyAg
ICAvLyBVc2UgdGhlIGhhbmR5IGV2ZW50IGNhbGxiYWNrCisgICAgZG9jdW1lbnQuYWRkRXZlbnRM
aXN0ZW5lciggIkRPTUNvbnRlbnRMb2FkZWQiLCBjb21wbGV0ZWQgKTsKKworICAgIC8vIEEgZmFs
bGJhY2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3JrCisgICAgd2luZG93
LmFkZEV2ZW50TGlzdGVuZXIoICJsb2FkIiwgY29tcGxldGVkICk7Cit9CisKKworCisKKy8vIE11
bHRpZnVuY3Rpb25hbCBtZXRob2QgdG8gZ2V0IGFuZCBzZXQgdmFsdWVzIG9mIGEgY29sbGVjdGlv
bgorLy8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkgYmUgZXhlY3V0ZWQgaWYgaXQncyBhIGZ1
bmN0aW9uCit2YXIgYWNjZXNzID0gZnVuY3Rpb24oIGVsZW1zLCBmbiwga2V5LCB2YWx1ZSwgY2hh
aW5hYmxlLCBlbXB0eUdldCwgcmF3ICkgeworICAgIHZhciBpID0gMCwKKyAgICAgICAgbGVuID0g
ZWxlbXMubGVuZ3RoLAorICAgICAgICBidWxrID0ga2V5ID09IG51bGw7CisKKyAgICAvLyBTZXRz
IG1hbnkgdmFsdWVzCisgICAgaWYgKCBqUXVlcnkudHlwZSgga2V5ICkgPT09ICJvYmplY3QiICkg
eworICAgICAgICBjaGFpbmFibGUgPSB0cnVlOworICAgICAgICBmb3IgKCBpIGluIGtleSApIHsK
KyAgICAgICAgICAgIGFjY2VzcyggZWxlbXMsIGZuLCBpLCBrZXlbIGkgXSwgdHJ1ZSwgZW1wdHlH
ZXQsIHJhdyApOworICAgICAgICB9CisKKyAgICAvLyBTZXRzIG9uZSB2YWx1ZQorICAgIH0gZWxz
ZSBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgIGNoYWluYWJsZSA9IHRydWU7
CisKKyAgICAgICAgaWYgKCAhalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7CisgICAgICAg
ICAgICByYXcgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBidWxrICkgeworCisg
ICAgICAgICAgICAvLyBCdWxrIG9wZXJhdGlvbnMgcnVuIGFnYWluc3QgdGhlIGVudGlyZSBzZXQK
KyAgICAgICAgICAgIGlmICggcmF3ICkgeworICAgICAgICAgICAgICAgIGZuLmNhbGwoIGVsZW1z
LCB2YWx1ZSApOworICAgICAgICAgICAgICAgIGZuID0gbnVsbDsKKworICAgICAgICAgICAgLy8g
Li4uZXhjZXB0IHdoZW4gZXhlY3V0aW5nIGZ1bmN0aW9uIHZhbHVlcworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBidWxrID0gZm47CisgICAgICAgICAgICAgICAgZm4gPSBm
dW5jdGlvbiggZWxlbSwga2V5LCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7CisgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICggZm4gKSB7CisgICAgICAg
ICAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKKyAgICAgICAgICAgICAgICBmbigKKyAgICAg
ICAgICAgICAgICAgICAgZWxlbXNbIGkgXSwga2V5LCByYXcgPworICAgICAgICAgICAgICAgICAg
ICB2YWx1ZSA6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlLmNhbGwoIGVsZW1zWyBpIF0sIGks
IGZuKCBlbGVtc1sgaSBdLCBrZXkgKSApCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggY2hhaW5hYmxlICkgeworICAgICAgICBy
ZXR1cm4gZWxlbXM7CisgICAgfQorCisgICAgLy8gR2V0cworICAgIGlmICggYnVsayApIHsKKyAg
ICAgICAgcmV0dXJuIGZuLmNhbGwoIGVsZW1zICk7CisgICAgfQorCisgICAgcmV0dXJuIGxlbiA/
IGZuKCBlbGVtc1sgMCBdLCBrZXkgKSA6IGVtcHR5R2V0OworfTsKK3ZhciBhY2NlcHREYXRhID0g
ZnVuY3Rpb24oIG93bmVyICkgeworCisgICAgLy8gQWNjZXB0cyBvbmx5OgorICAgIC8vICAtIE5v
ZGUKKyAgICAvLyAgICAtIE5vZGUuRUxFTUVOVF9OT0RFCisgICAgLy8gICAgLSBOb2RlLkRPQ1VN
RU5UX05PREUKKyAgICAvLyAgLSBPYmplY3QKKyAgICAvLyAgICAtIEFueQorICAgIHJldHVybiBv
d25lci5ub2RlVHlwZSA9PT0gMSB8fCBvd25lci5ub2RlVHlwZSA9PT0gOSB8fCAhKCArb3duZXIu
bm9kZVR5cGUgKTsKK307CisKKworCisKK2Z1bmN0aW9uIERhdGEoKSB7CisgICAgdGhpcy5leHBh
bmRvID0galF1ZXJ5LmV4cGFuZG8gKyBEYXRhLnVpZCsrOworfQorCitEYXRhLnVpZCA9IDE7CisK
K0RhdGEucHJvdG90eXBlID0geworCisgICAgY2FjaGU6IGZ1bmN0aW9uKCBvd25lciApIHsKKwor
ICAgICAgICAvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGUK
KyAgICAgICAgdmFyIHZhbHVlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdOworCisgICAgICAgIC8v
IElmIG5vdCwgY3JlYXRlIG9uZQorICAgICAgICBpZiAoICF2YWx1ZSApIHsKKyAgICAgICAgICAg
IHZhbHVlID0ge307CisKKyAgICAgICAgICAgIC8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9u
LWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLAorICAgICAgICAgICAgLy8gYnV0IHdl
IHNob3VsZCBub3QsIHNlZSAjODMzNS4KKyAgICAgICAgICAgIC8vIEFsd2F5cyByZXR1cm4gYW4g
ZW1wdHkgb2JqZWN0LgorICAgICAgICAgICAgaWYgKCBhY2NlcHREYXRhKCBvd25lciApICkgewor
CisgICAgICAgICAgICAgICAgLy8gSWYgaXQgaXMgYSBub2RlIHVubGlrZWx5IHRvIGJlIHN0cmlu
Z2lmeS1lZCBvciBsb29wZWQgb3ZlcgorICAgICAgICAgICAgICAgIC8vIHVzZSBwbGFpbiBhc3Np
Z25tZW50CisgICAgICAgICAgICAgICAgaWYgKCBvd25lci5ub2RlVHlwZSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgb3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdmFsdWU7CisKKyAgICAgICAgICAg
ICAgICAvLyBPdGhlcndpc2Ugc2VjdXJlIGl0IGluIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHkK
KyAgICAgICAgICAgICAgICAvLyBjb25maWd1cmFibGUgbXVzdCBiZSB0cnVlIHRvIGFsbG93IHRo
ZSBwcm9wZXJ0eSB0byBiZQorICAgICAgICAgICAgICAgIC8vIGRlbGV0ZWQgd2hlbiBkYXRhIGlz
IHJlbW92ZWQKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoIG93bmVyLCB0aGlzLmV4cGFuZG8sIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICAgICAgICAgICAgICAgICAgICB9ICk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAg
IH0sCisgICAgc2V0OiBmdW5jdGlvbiggb3duZXIsIGRhdGEsIHZhbHVlICkgeworICAgICAgICB2
YXIgcHJvcCwKKyAgICAgICAgICAgIGNhY2hlID0gdGhpcy5jYWNoZSggb3duZXIgKTsKKworICAg
ICAgICAvLyBIYW5kbGU6IFsgb3duZXIsIGtleSwgdmFsdWUgXSBhcmdzCisgICAgICAgIC8vIEFs
d2F5cyB1c2UgY2FtZWxDYXNlIGtleSAoZ2gtMjI1NykKKyAgICAgICAgaWYgKCB0eXBlb2YgZGF0
YSA9PT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICBjYWNoZVsgalF1ZXJ5LmNhbWVsQ2FzZSgg
ZGF0YSApIF0gPSB2YWx1ZTsKKworICAgICAgICAvLyBIYW5kbGU6IFsgb3duZXIsIHsgcHJvcGVy
dGllcyB9IF0gYXJncworICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAvLyBDb3B5IHRo
ZSBwcm9wZXJ0aWVzIG9uZS1ieS1vbmUgdG8gdGhlIGNhY2hlIG9iamVjdAorICAgICAgICAgICAg
Zm9yICggcHJvcCBpbiBkYXRhICkgeworICAgICAgICAgICAgICAgIGNhY2hlWyBqUXVlcnkuY2Ft
ZWxDYXNlKCBwcm9wICkgXSA9IGRhdGFbIHByb3AgXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gY2FjaGU7CisgICAgfSwKKyAgICBnZXQ6IGZ1bmN0aW9uKCBvd25l
ciwga2V5ICkgeworICAgICAgICByZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgPworICAgICAgICAg
ICAgdGhpcy5jYWNoZSggb3duZXIgKSA6CisKKyAgICAgICAgICAgIC8vIEFsd2F5cyB1c2UgY2Ft
ZWxDYXNlIGtleSAoZ2gtMjI1NykKKyAgICAgICAgICAgIG93bmVyWyB0aGlzLmV4cGFuZG8gXSAm
JiBvd25lclsgdGhpcy5leHBhbmRvIF1bIGpRdWVyeS5jYW1lbENhc2UoIGtleSApIF07CisgICAg
fSwKKyAgICBhY2Nlc3M6IGZ1bmN0aW9uKCBvd25lciwga2V5LCB2YWx1ZSApIHsKKworICAgICAg
ICAvLyBJbiBjYXNlcyB3aGVyZSBlaXRoZXI6CisgICAgICAgIC8vCisgICAgICAgIC8vICAgMS4g
Tm8ga2V5IHdhcyBzcGVjaWZpZWQKKyAgICAgICAgLy8gICAyLiBBIHN0cmluZyBrZXkgd2FzIHNw
ZWNpZmllZCwgYnV0IG5vIHZhbHVlIHByb3ZpZGVkCisgICAgICAgIC8vCisgICAgICAgIC8vIFRh
a2UgdGhlICJyZWFkIiBwYXRoIGFuZCBhbGxvdyB0aGUgZ2V0IG1ldGhvZCB0byBkZXRlcm1pbmUK
KyAgICAgICAgLy8gd2hpY2ggdmFsdWUgdG8gcmV0dXJuLCByZXNwZWN0aXZlbHkgZWl0aGVyOgor
ICAgICAgICAvLworICAgICAgICAvLyAgIDEuIFRoZSBlbnRpcmUgY2FjaGUgb2JqZWN0CisgICAg
ICAgIC8vICAgMi4gVGhlIGRhdGEgc3RvcmVkIGF0IHRoZSBrZXkKKyAgICAgICAgLy8KKyAgICAg
ICAgaWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fAorICAgICAgICAgICAgICAgICggKCBrZXkgJiYg
dHlwZW9mIGtleSA9PT0gInN0cmluZyIgKSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgKSB7CisK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLmdldCggb3duZXIsIGtleSApOworICAgICAgICB9CisK
KyAgICAgICAgLy8gV2hlbiB0aGUga2V5IGlzIG5vdCBhIHN0cmluZywgb3IgYm90aCBhIGtleSBh
bmQgdmFsdWUKKyAgICAgICAgLy8gYXJlIHNwZWNpZmllZCwgc2V0IG9yIGV4dGVuZCAoZXhpc3Rp
bmcgb2JqZWN0cykgd2l0aCBlaXRoZXI6CisgICAgICAgIC8vCisgICAgICAgIC8vICAgMS4gQW4g
b2JqZWN0IG9mIHByb3BlcnRpZXMKKyAgICAgICAgLy8gICAyLiBBIGtleSBhbmQgdmFsdWUKKyAg
ICAgICAgLy8KKyAgICAgICAgdGhpcy5zZXQoIG93bmVyLCBrZXksIHZhbHVlICk7CisKKyAgICAg
ICAgLy8gU2luY2UgdGhlICJzZXQiIHBhdGggY2FuIGhhdmUgdHdvIHBvc3NpYmxlIGVudHJ5IHBv
aW50cworICAgICAgICAvLyByZXR1cm4gdGhlIGV4cGVjdGVkIGRhdGEgYmFzZWQgb24gd2hpY2gg
cGF0aCB3YXMgdGFrZW5bKl0KKyAgICAgICAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyB2
YWx1ZSA6IGtleTsKKyAgICB9LAorICAgIHJlbW92ZTogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7
CisgICAgICAgIHZhciBpLAorICAgICAgICAgICAgY2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRv
IF07CisKKyAgICAgICAgaWYgKCBjYWNoZSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBrZXkgIT09IHVuZGVmaW5lZCApIHsK
KworICAgICAgICAgICAgLy8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5n
IG9mIGtleXMKKyAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIGtleSApICkgeworCisg
ICAgICAgICAgICAgICAgLy8gSWYga2V5IGlzIGFuIGFycmF5IG9mIGtleXMuLi4KKyAgICAgICAg
ICAgICAgICAvLyBXZSBhbHdheXMgc2V0IGNhbWVsQ2FzZSBrZXlzLCBzbyByZW1vdmUgdGhhdC4K
KyAgICAgICAgICAgICAgICBrZXkgPSBrZXkubWFwKCBqUXVlcnkuY2FtZWxDYXNlICk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGtleSA9IGpRdWVyeS5jYW1lbENhc2Uo
IGtleSApOworCisgICAgICAgICAgICAgICAgLy8gSWYgYSBrZXkgd2l0aCB0aGUgc3BhY2VzIGV4
aXN0cywgdXNlIGl0LgorICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgY3JlYXRlIGFuIGFy
cmF5IGJ5IG1hdGNoaW5nIG5vbi13aGl0ZXNwYWNlCisgICAgICAgICAgICAgICAga2V5ID0ga2V5
IGluIGNhY2hlID8KKyAgICAgICAgICAgICAgICAgICAgWyBrZXkgXSA6CisgICAgICAgICAgICAg
ICAgICAgICgga2V5Lm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10gKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaSA9IGtleS5sZW5ndGg7CisKKyAgICAgICAgICAgIHdoaWxlICgg
aS0tICkgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBjYWNoZVsga2V5WyBpIF0gXTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlbW92ZSB0aGUgZXhwYW5kbyBpZiB0
aGVyZSdzIG5vIG1vcmUgZGF0YQorICAgICAgICBpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8IGpR
dWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApICkgeworCisgICAgICAgICAgICAvLyBTdXBwb3J0
OiBDaHJvbWUgPD0zNSAtIDQ1CisgICAgICAgICAgICAvLyBXZWJraXQgJiBCbGluayBwZXJmb3Jt
YW5jZSBzdWZmZXJzIHdoZW4gZGVsZXRpbmcgcHJvcGVydGllcworICAgICAgICAgICAgLy8gZnJv
bSBET00gbm9kZXMsIHNvIHNldCB0byB1bmRlZmluZWQgaW5zdGVhZAorICAgICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4
NjA3IChidWcgcmVzdHJpY3RlZCkKKyAgICAgICAgICAgIGlmICggb3duZXIubm9kZVR5cGUgKSB7
CisgICAgICAgICAgICAgICAgb3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdW5kZWZpbmVkOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgb3duZXJbIHRoaXMuZXhw
YW5kbyBdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSwKKyAgICBoYXNEYXRhOiBm
dW5jdGlvbiggb3duZXIgKSB7CisgICAgICAgIHZhciBjYWNoZSA9IG93bmVyWyB0aGlzLmV4cGFu
ZG8gXTsKKyAgICAgICAgcmV0dXJuIGNhY2hlICE9PSB1bmRlZmluZWQgJiYgIWpRdWVyeS5pc0Vt
cHR5T2JqZWN0KCBjYWNoZSApOworICAgIH0KK307Cit2YXIgZGF0YVByaXYgPSBuZXcgRGF0YSgp
OworCit2YXIgZGF0YVVzZXIgPSBuZXcgRGF0YSgpOworCisKKworLy8gIEltcGxlbWVudGF0aW9u
IFN1bW1hcnkKKy8vCisvLyAgMS4gRW5mb3JjZSBBUEkgc3VyZmFjZSBhbmQgc2VtYW50aWMgY29t
cGF0aWJpbGl0eSB3aXRoIDEuOS54IGJyYW5jaAorLy8gIDIuIEltcHJvdmUgdGhlIG1vZHVsZSdz
IG1haW50YWluYWJpbGl0eSBieSByZWR1Y2luZyB0aGUgc3RvcmFnZQorLy8gICAgICBwYXRocyB0
byBhIHNpbmdsZSBtZWNoYW5pc20uCisvLyAgMy4gVXNlIHRoZSBzYW1lIHNpbmdsZSBtZWNoYW5p
c20gdG8gc3VwcG9ydCAicHJpdmF0ZSIgYW5kICJ1c2VyIiBkYXRhLgorLy8gIDQuIF9OZXZlcl8g
ZXhwb3NlICJwcml2YXRlIiBkYXRhIHRvIHVzZXIgY29kZSAoVE9ETzogRHJvcCBfZGF0YSwgX3Jl
bW92ZURhdGEpCisvLyAgNS4gQXZvaWQgZXhwb3NpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBv
biB1c2VyIG9iamVjdHMgKGVnLiBleHBhbmRvIHByb3BlcnRpZXMpCisvLyAgNi4gUHJvdmlkZSBh
IGNsZWFyIHBhdGggZm9yIGltcGxlbWVudGF0aW9uIHVwZ3JhZGUgdG8gV2Vha01hcCBpbiAyMDE0
CisKK3ZhciByYnJhY2UgPSAvXig/Olx7W1x3XFddKlx9fFxbW1x3XFddKlxdKSQvLAorICAgIHJt
dWx0aURhc2ggPSAvW0EtWl0vZzsKKworZnVuY3Rpb24gZ2V0RGF0YSggZGF0YSApIHsKKyAgICBp
ZiAoIGRhdGEgPT09ICJ0cnVlIiApIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgaWYgKCBkYXRhID09PSAiZmFsc2UiICkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKCBkYXRhID09PSAibnVsbCIgKSB7CisgICAgICAgIHJldHVybiBudWxsOwor
ICAgIH0KKworICAgIC8vIE9ubHkgY29udmVydCB0byBhIG51bWJlciBpZiBpdCBkb2Vzbid0IGNo
YW5nZSB0aGUgc3RyaW5nCisgICAgaWYgKCBkYXRhID09PSArZGF0YSArICIiICkgeworICAgICAg
ICByZXR1cm4gK2RhdGE7CisgICAgfQorCisgICAgaWYgKCByYnJhY2UudGVzdCggZGF0YSApICkg
eworICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSggZGF0YSApOworICAgIH0KKworICAgIHJldHVy
biBkYXRhOworfQorCitmdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkgeworICAg
IHZhciBuYW1lOworCisgICAgLy8gSWYgbm90aGluZyB3YXMgZm91bmQgaW50ZXJuYWxseSwgdHJ5
IHRvIGZldGNoIGFueQorICAgIC8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0
ZQorICAgIGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7
CisgICAgICAgIG5hbWUgPSAiZGF0YS0iICsga2V5LnJlcGxhY2UoIHJtdWx0aURhc2gsICItJCYi
ICkudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1l
ICk7CisKKyAgICAgICAgaWYgKCB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIgKSB7CisgICAgICAg
ICAgICB0cnkgeworICAgICAgICAgICAgICAgIGRhdGEgPSBnZXREYXRhKCBkYXRhICk7CisgICAg
ICAgICAgICB9IGNhdGNoICggZSApIHt9CisKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBz
ZXQgdGhlIGRhdGEgc28gaXQgaXNuJ3QgY2hhbmdlZCBsYXRlcgorICAgICAgICAgICAgZGF0YVVz
ZXIuc2V0KCBlbGVtLCBrZXksIGRhdGEgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGRhdGEgPSB1bmRlZmluZWQ7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGRhdGE7Cit9
CisKK2pRdWVyeS5leHRlbmQoIHsKKyAgICBoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHsKKyAg
ICAgICAgcmV0dXJuIGRhdGFVc2VyLmhhc0RhdGEoIGVsZW0gKSB8fCBkYXRhUHJpdi5oYXNEYXRh
KCBlbGVtICk7CisgICAgfSwKKworICAgIGRhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRh
ICkgeworICAgICAgICByZXR1cm4gZGF0YVVzZXIuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7
CisgICAgfSwKKworICAgIHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgeworICAg
ICAgICBkYXRhVXNlci5yZW1vdmUoIGVsZW0sIG5hbWUgKTsKKyAgICB9LAorCisgICAgLy8gVE9E
TzogTm93IHRoYXQgYWxsIGNhbGxzIHRvIF9kYXRhIGFuZCBfcmVtb3ZlRGF0YSBoYXZlIGJlZW4g
cmVwbGFjZWQKKyAgICAvLyB3aXRoIGRpcmVjdCBjYWxscyB0byBkYXRhUHJpdiBtZXRob2RzLCB0
aGVzZSBjYW4gYmUgZGVwcmVjYXRlZC4KKyAgICBfZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUs
IGRhdGEgKSB7CisgICAgICAgIHJldHVybiBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRh
dGEgKTsKKyAgICB9LAorCisgICAgX3JlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkg
eworICAgICAgICBkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIG5hbWUgKTsKKyAgICB9Cit9ICk7CisK
K2pRdWVyeS5mbi5leHRlbmQoIHsKKyAgICBkYXRhOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHsK
KyAgICAgICAgdmFyIGksIG5hbWUsIGRhdGEsCisgICAgICAgICAgICBlbGVtID0gdGhpc1sgMCBd
LAorICAgICAgICAgICAgYXR0cnMgPSBlbGVtICYmIGVsZW0uYXR0cmlidXRlczsKKworICAgICAg
ICAvLyBHZXRzIGFsbCB2YWx1ZXMKKyAgICAgICAgaWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHsK
KyAgICAgICAgICAgIGlmICggdGhpcy5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgZGF0YSA9
IGRhdGFVc2VyLmdldCggZWxlbSApOworCisgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVU
eXBlID09PSAxICYmICFkYXRhUHJpdi5nZXQoIGVsZW0sICJoYXNEYXRhQXR0cnMiICkgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGkgPSBhdHRycy5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAg
IHdoaWxlICggaS0tICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBJ
RSAxMSBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgYXR0cnMgZWxlbWVudHMg
Y2FuIGJlIG51bGwgKCMxNDg5NCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYXR0cnNb
IGkgXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gYXR0cnNbIGkgXS5u
YW1lOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbmFtZS5pbmRleE9mKCAiZGF0
YS0iICkgPT09IDAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBq
UXVlcnkuY2FtZWxDYXNlKCBuYW1lLnNsaWNlKCA1ICkgKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YUF0dHIoIGVsZW0sIG5hbWUsIGRhdGFbIG5hbWUgXSApOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkYXRhUHJpdi5zZXQoIGVsZW0s
ICJoYXNEYXRhQXR0cnMiLCB0cnVlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNl
dHMgbXVsdGlwbGUgdmFsdWVzCisgICAgICAgIGlmICggdHlwZW9mIGtleSA9PT0gIm9iamVjdCIg
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICBkYXRhVXNlci5zZXQoIHRoaXMsIGtleSApOworICAgICAgICAgICAgfSApOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkg
eworICAgICAgICAgICAgdmFyIGRhdGE7CisKKyAgICAgICAgICAgIC8vIFRoZSBjYWxsaW5nIGpR
dWVyeSBvYmplY3QgKGVsZW1lbnQgbWF0Y2hlcykgaXMgbm90IGVtcHR5CisgICAgICAgICAgICAv
LyAoYW5kIHRoZXJlZm9yZSBoYXMgYW4gZWxlbWVudCBhcHBlYXJzIGF0IHRoaXNbIDAgXSkgYW5k
IHRoZQorICAgICAgICAgICAgLy8gYHZhbHVlYCBwYXJhbWV0ZXIgd2FzIG5vdCB1bmRlZmluZWQu
IEFuIGVtcHR5IGpRdWVyeSBvYmplY3QKKyAgICAgICAgICAgIC8vIHdpbGwgcmVzdWx0IGluIGB1
bmRlZmluZWRgIGZvciBlbGVtID0gdGhpc1sgMCBdIHdoaWNoIHdpbGwKKyAgICAgICAgICAgIC8v
IHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhbiBhdHRlbXB0IHRvIHJlYWQgYSBkYXRhIGNhY2hlIGlz
IG1hZGUuCisgICAgICAgICAgICBpZiAoIGVsZW0gJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApIHsK
KworICAgICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgY2FjaGUK
KyAgICAgICAgICAgICAgICAvLyBUaGUga2V5IHdpbGwgYWx3YXlzIGJlIGNhbWVsQ2FzZWQgaW4g
RGF0YQorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0sIGtleSApOwor
ICAgICAgICAgICAgICAgIGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAvLyBBdHRlbXB0IHRvICJkaXNjb3ZlciIgdGhlIGRhdGEgaW4KKyAgICAgICAgICAgICAgICAv
LyBIVE1MNSBjdXN0b20gZGF0YS0qIGF0dHJzCisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFB
dHRyKCBlbGVtLCBrZXkgKTsKKyAgICAgICAgICAgICAgICBpZiAoIGRhdGEgIT09IHVuZGVmaW5l
ZCApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgLy8gV2UgdHJpZWQgcmVhbGx5IGhhcmQsIGJ1dCB0aGUgZGF0
YSBkb2Vzbid0IGV4aXN0LgorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gU2V0IHRoZSBkYXRhLi4uCisgICAgICAgICAgICB0aGlzLmVhY2go
IGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAgICAgLy8gV2UgYWx3YXlzIHN0b3JlIHRoZSBj
YW1lbENhc2VkIGtleQorICAgICAgICAgICAgICAgIGRhdGFVc2VyLnNldCggdGhpcywga2V5LCB2
YWx1ZSApOworICAgICAgICAgICAgfSApOworICAgICAgICB9LCBudWxsLCB2YWx1ZSwgYXJndW1l
bnRzLmxlbmd0aCA+IDEsIG51bGwsIHRydWUgKTsKKyAgICB9LAorCisgICAgcmVtb3ZlRGF0YTog
ZnVuY3Rpb24oIGtleSApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICBkYXRhVXNlci5yZW1vdmUoIHRoaXMsIGtleSApOworICAgICAgICB9ICk7
CisgICAgfQorfSApOworCisKK2pRdWVyeS5leHRlbmQoIHsKKyAgICBxdWV1ZTogZnVuY3Rpb24o
IGVsZW0sIHR5cGUsIGRhdGEgKSB7CisgICAgICAgIHZhciBxdWV1ZTsKKworICAgICAgICBpZiAo
IGVsZW0gKSB7CisgICAgICAgICAgICB0eXBlID0gKCB0eXBlIHx8ICJmeCIgKSArICJxdWV1ZSI7
CisgICAgICAgICAgICBxdWV1ZSA9IGRhdGFQcml2LmdldCggZWxlbSwgdHlwZSApOworCisgICAg
ICAgICAgICAvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhp
cyBpcyBqdXN0IGEgbG9va3VwCisgICAgICAgICAgICBpZiAoIGRhdGEgKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCAhcXVldWUgfHwgalF1ZXJ5LmlzQXJyYXkoIGRhdGEgKSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgcXVldWUgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIHR5cGUsIGpRdWVyeS5t
YWtlQXJyYXkoIGRhdGEgKSApOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIHF1ZXVlLnB1c2goIGRhdGEgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gcXVldWUgfHwgW107CisgICAgICAgIH0KKyAgICB9
LAorCisgICAgZGVxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7CisgICAgICAgIHR5cGUg
PSB0eXBlIHx8ICJmeCI7CisKKyAgICAgICAgdmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCBlbGVt
LCB0eXBlICksCisgICAgICAgICAgICBzdGFydExlbmd0aCA9IHF1ZXVlLmxlbmd0aCwKKyAgICAg
ICAgICAgIGZuID0gcXVldWUuc2hpZnQoKSwKKyAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5Ll9x
dWV1ZUhvb2tzKCBlbGVtLCB0eXBlICksCisgICAgICAgICAgICBuZXh0ID0gZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgalF1ZXJ5LmRlcXVldWUoIGVsZW0sIHR5cGUgKTsKKyAgICAgICAg
ICAgIH07CisKKyAgICAgICAgLy8gSWYgdGhlIGZ4IHF1ZXVlIGlzIGRlcXVldWVkLCBhbHdheXMg
cmVtb3ZlIHRoZSBwcm9ncmVzcyBzZW50aW5lbAorICAgICAgICBpZiAoIGZuID09PSAiaW5wcm9n
cmVzcyIgKSB7CisgICAgICAgICAgICBmbiA9IHF1ZXVlLnNoaWZ0KCk7CisgICAgICAgICAgICBz
dGFydExlbmd0aC0tOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBmbiApIHsKKworICAgICAg
ICAgICAgLy8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUg
ZnJvbSBiZWluZworICAgICAgICAgICAgLy8gYXV0b21hdGljYWxseSBkZXF1ZXVlZAorICAgICAg
ICAgICAgaWYgKCB0eXBlID09PSAiZngiICkgeworICAgICAgICAgICAgICAgIHF1ZXVlLnVuc2hp
ZnQoICJpbnByb2dyZXNzIiApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDbGVh
ciB1cCB0aGUgbGFzdCBxdWV1ZSBzdG9wIGZ1bmN0aW9uCisgICAgICAgICAgICBkZWxldGUgaG9v
a3Muc3RvcDsKKyAgICAgICAgICAgIGZuLmNhbGwoIGVsZW0sIG5leHQsIGhvb2tzICk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoICFzdGFydExlbmd0aCAmJiBob29rcyApIHsKKyAgICAgICAg
ICAgIGhvb2tzLmVtcHR5LmZpcmUoKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICAvLyBOb3Qg
cHVibGljIC0gZ2VuZXJhdGUgYSBxdWV1ZUhvb2tzIG9iamVjdCwgb3IgcmV0dXJuIHRoZSBjdXJy
ZW50IG9uZQorICAgIF9xdWV1ZUhvb2tzOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHsKKyAgICAg
ICAgdmFyIGtleSA9IHR5cGUgKyAicXVldWVIb29rcyI7CisgICAgICAgIHJldHVybiBkYXRhUHJp
di5nZXQoIGVsZW0sIGtleSApIHx8IGRhdGFQcml2LmFjY2VzcyggZWxlbSwga2V5LCB7CisgICAg
ICAgICAgICBlbXB0eTogalF1ZXJ5LkNhbGxiYWNrcyggIm9uY2UgbWVtb3J5IiApLmFkZCggZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBbIHR5cGUg
KyAicXVldWUiLCBrZXkgXSApOworICAgICAgICAgICAgfSApCisgICAgICAgIH0gKTsKKyAgICB9
Cit9ICk7CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKyAgICBxdWV1ZTogZnVuY3Rpb24oIHR5cGUs
IGRhdGEgKSB7CisgICAgICAgIHZhciBzZXR0ZXIgPSAyOworCisgICAgICAgIGlmICggdHlwZW9m
IHR5cGUgIT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgZGF0YSA9IHR5cGU7CisgICAgICAg
ICAgICB0eXBlID0gImZ4IjsKKyAgICAgICAgICAgIHNldHRlci0tOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCBhcmd1bWVudHMubGVuZ3RoIDwgc2V0dGVyICkgeworICAgICAgICAgICAgcmV0
dXJuIGpRdWVyeS5xdWV1ZSggdGhpc1sgMCBdLCB0eXBlICk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID8KKyAgICAgICAgICAgIHRoaXMgOgorICAgICAg
ICAgICAgdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgcXVldWUg
PSBqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIGRhdGEgKTsKKworICAgICAgICAgICAgICAgIC8v
IEVuc3VyZSBhIGhvb2tzIGZvciB0aGlzIHF1ZXVlCisgICAgICAgICAgICAgICAgalF1ZXJ5Ll9x
dWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7CisKKyAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09
ICJmeCIgJiYgcXVldWVbIDAgXSAhPT0gImlucHJvZ3Jlc3MiICkgeworICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0gKTsKKyAgICB9LAorICAgIGRlcXVldWU6IGZ1bmN0aW9uKCB0eXBlICkgewor
ICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGpRdWVy
eS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7CisgICAgICAgIH0gKTsKKyAgICB9LAorICAgIGNsZWFy
UXVldWU6IGZ1bmN0aW9uKCB0eXBlICkgeworICAgICAgICByZXR1cm4gdGhpcy5xdWV1ZSggdHlw
ZSB8fCAiZngiLCBbXSApOworICAgIH0sCisKKyAgICAvLyBHZXQgYSBwcm9taXNlIHJlc29sdmVk
IHdoZW4gcXVldWVzIG9mIGEgY2VydGFpbiB0eXBlCisgICAgLy8gYXJlIGVtcHRpZWQgKGZ4IGlz
IHRoZSB0eXBlIGJ5IGRlZmF1bHQpCisgICAgcHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiAp
IHsKKyAgICAgICAgdmFyIHRtcCwKKyAgICAgICAgICAgIGNvdW50ID0gMSwKKyAgICAgICAgICAg
IGRlZmVyID0galF1ZXJ5LkRlZmVycmVkKCksCisgICAgICAgICAgICBlbGVtZW50cyA9IHRoaXMs
CisgICAgICAgICAgICBpID0gdGhpcy5sZW5ndGgsCisgICAgICAgICAgICByZXNvbHZlID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYgKCAhKCAtLWNvdW50ICkgKSB7CisgICAgICAg
ICAgICAgICAgICAgIGRlZmVyLnJlc29sdmVXaXRoKCBlbGVtZW50cywgWyBlbGVtZW50cyBdICk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKworICAgICAgICBpZiAoIHR5cGVv
ZiB0eXBlICE9PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIG9iaiA9IHR5cGU7CisgICAgICAg
ICAgICB0eXBlID0gdW5kZWZpbmVkOworICAgICAgICB9CisgICAgICAgIHR5cGUgPSB0eXBlIHx8
ICJmeCI7CisKKyAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICB0bXAgPSBkYXRh
UHJpdi5nZXQoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyAicXVldWVIb29rcyIgKTsKKyAgICAgICAg
ICAgIGlmICggdG1wICYmIHRtcC5lbXB0eSApIHsKKyAgICAgICAgICAgICAgICBjb3VudCsrOwor
ICAgICAgICAgICAgICAgIHRtcC5lbXB0eS5hZGQoIHJlc29sdmUgKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICByZXNvbHZlKCk7CisgICAgICAgIHJldHVybiBkZWZlci5wcm9t
aXNlKCBvYmogKTsKKyAgICB9Cit9ICk7Cit2YXIgcG51bSA9ICggL1srLV0/KD86XGQqXC58KVxk
Kyg/OltlRV1bKy1dP1xkK3wpLyApLnNvdXJjZTsKKwordmFyIHJjc3NOdW0gPSBuZXcgUmVnRXhw
KCAiXig/OihbKy1dKT18KSgiICsgcG51bSArICIpKFthLXolXSopJCIsICJpIiApOworCisKK3Zh
ciBjc3NFeHBhbmQgPSBbICJUb3AiLCAiUmlnaHQiLCAiQm90dG9tIiwgIkxlZnQiIF07CisKK3Zh
ciBpc0hpZGRlbldpdGhpblRyZWUgPSBmdW5jdGlvbiggZWxlbSwgZWwgKSB7CisKKyAgICAgICAg
Ly8gaXNIaWRkZW5XaXRoaW5UcmVlIG1pZ2h0IGJlIGNhbGxlZCBmcm9tIGpRdWVyeSNmaWx0ZXIg
ZnVuY3Rpb247CisgICAgICAgIC8vIGluIHRoYXQgY2FzZSwgZWxlbWVudCB3aWxsIGJlIHNlY29u
ZCBhcmd1bWVudAorICAgICAgICBlbGVtID0gZWwgfHwgZWxlbTsKKworICAgICAgICAvLyBJbmxp
bmUgc3R5bGUgdHJ1bXBzIGFsbAorICAgICAgICByZXR1cm4gZWxlbS5zdHlsZS5kaXNwbGF5ID09
PSAibm9uZSIgfHwKKyAgICAgICAgICAgIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIiIgJiYKKwor
ICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBjaGVjayBjb21wdXRlZCBzdHlsZQorICAgICAgICAg
ICAgLy8gU3VwcG9ydDogRmlyZWZveCA8PTQzIC0gNDUKKyAgICAgICAgICAgIC8vIERpc2Nvbm5l
Y3RlZCBlbGVtZW50cyBjYW4gaGF2ZSBjb21wdXRlZCBkaXNwbGF5OiBub25lLCBzbyBmaXJzdCBj
b25maXJtIHRoYXQgZWxlbSBpcworICAgICAgICAgICAgLy8gaW4gdGhlIGRvY3VtZW50LgorICAg
ICAgICAgICAgalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSAmJgor
CisgICAgICAgICAgICBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKSA9PT0gIm5vbmUiOwor
ICAgIH07CisKK3ZhciBzd2FwID0gZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrLCBh
cmdzICkgeworICAgIHZhciByZXQsIG5hbWUsCisgICAgICAgIG9sZCA9IHt9OworCisgICAgLy8g
UmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzCisgICAgZm9y
ICggbmFtZSBpbiBvcHRpb25zICkgeworICAgICAgICBvbGRbIG5hbWUgXSA9IGVsZW0uc3R5bGVb
IG5hbWUgXTsKKyAgICAgICAgZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdOwor
ICAgIH0KKworICAgIHJldCA9IGNhbGxiYWNrLmFwcGx5KCBlbGVtLCBhcmdzIHx8IFtdICk7CisK
KyAgICAvLyBSZXZlcnQgdGhlIG9sZCB2YWx1ZXMKKyAgICBmb3IgKCBuYW1lIGluIG9wdGlvbnMg
KSB7CisgICAgICAgIGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9sZFsgbmFtZSBdOworICAgIH0KKwor
ICAgIHJldHVybiByZXQ7Cit9OworCisKKworCitmdW5jdGlvbiBhZGp1c3RDU1MoIGVsZW0sIHBy
b3AsIHZhbHVlUGFydHMsIHR3ZWVuICkgeworICAgIHZhciBhZGp1c3RlZCwKKyAgICAgICAgc2Nh
bGUgPSAxLAorICAgICAgICBtYXhJdGVyYXRpb25zID0gMjAsCisgICAgICAgIGN1cnJlbnRWYWx1
ZSA9IHR3ZWVuID8KKyAgICAgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHJl
dHVybiB0d2Vlbi5jdXIoKTsKKyAgICAgICAgICAgIH0gOgorICAgICAgICAgICAgZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AsICIiICk7
CisgICAgICAgICAgICB9LAorICAgICAgICBpbml0aWFsID0gY3VycmVudFZhbHVlKCksCisgICAg
ICAgIHVuaXQgPSB2YWx1ZVBhcnRzICYmIHZhbHVlUGFydHNbIDMgXSB8fCAoIGpRdWVyeS5jc3NO
dW1iZXJbIHByb3AgXSA/ICIiIDogInB4IiApLAorCisgICAgICAgIC8vIFN0YXJ0aW5nIHZhbHVl
IGNvbXB1dGF0aW9uIGlzIHJlcXVpcmVkIGZvciBwb3RlbnRpYWwgdW5pdCBtaXNtYXRjaGVzCisg
ICAgICAgIGluaXRpYWxJblVuaXQgPSAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSB8fCB1bml0
ICE9PSAicHgiICYmICtpbml0aWFsICkgJiYKKyAgICAgICAgICAgIHJjc3NOdW0uZXhlYyggalF1
ZXJ5LmNzcyggZWxlbSwgcHJvcCApICk7CisKKyAgICBpZiAoIGluaXRpYWxJblVuaXQgJiYgaW5p
dGlhbEluVW5pdFsgMyBdICE9PSB1bml0ICkgeworCisgICAgICAgIC8vIFRydXN0IHVuaXRzIHJl
cG9ydGVkIGJ5IGpRdWVyeS5jc3MKKyAgICAgICAgdW5pdCA9IHVuaXQgfHwgaW5pdGlhbEluVW5p
dFsgMyBdOworCisgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSB1cGRhdGUgdGhlIHR3ZWVuIHByb3Bl
cnRpZXMgbGF0ZXIgb24KKyAgICAgICAgdmFsdWVQYXJ0cyA9IHZhbHVlUGFydHMgfHwgW107CisK
KyAgICAgICAgLy8gSXRlcmF0aXZlbHkgYXBwcm94aW1hdGUgZnJvbSBhIG5vbnplcm8gc3RhcnRp
bmcgcG9pbnQKKyAgICAgICAgaW5pdGlhbEluVW5pdCA9ICtpbml0aWFsIHx8IDE7CisKKyAgICAg
ICAgZG8geworCisgICAgICAgICAgICAvLyBJZiBwcmV2aW91cyBpdGVyYXRpb24gemVyb2VkIG91
dCwgZG91YmxlIHVudGlsIHdlIGdldCAqc29tZXRoaW5nKi4KKyAgICAgICAgICAgIC8vIFVzZSBz
dHJpbmcgZm9yIGRvdWJsaW5nIHNvIHdlIGRvbid0IGFjY2lkZW50YWxseSBzZWUgc2NhbGUgYXMg
dW5jaGFuZ2VkIGJlbG93CisgICAgICAgICAgICBzY2FsZSA9IHNjYWxlIHx8ICIuNSI7CisKKyAg
ICAgICAgICAgIC8vIEFkanVzdCBhbmQgYXBwbHkKKyAgICAgICAgICAgIGluaXRpYWxJblVuaXQg
PSBpbml0aWFsSW5Vbml0IC8gc2NhbGU7CisgICAgICAgICAgICBqUXVlcnkuc3R5bGUoIGVsZW0s
IHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7CisKKyAgICAgICAgLy8gVXBkYXRlIHNjYWxl
LCB0b2xlcmF0aW5nIHplcm8gb3IgTmFOIGZyb20gdHdlZW4uY3VyKCkKKyAgICAgICAgLy8gQnJl
YWsgdGhlIGxvb3AgaWYgc2NhbGUgaXMgdW5jaGFuZ2VkIG9yIHBlcmZlY3QsIG9yIGlmIHdlJ3Zl
IGp1c3QgaGFkIGVub3VnaC4KKyAgICAgICAgfSB3aGlsZSAoCisgICAgICAgICAgICBzY2FsZSAh
PT0gKCBzY2FsZSA9IGN1cnJlbnRWYWx1ZSgpIC8gaW5pdGlhbCApICYmIHNjYWxlICE9PSAxICYm
IC0tbWF4SXRlcmF0aW9ucworICAgICAgICApOworICAgIH0KKworICAgIGlmICggdmFsdWVQYXJ0
cyApIHsKKyAgICAgICAgaW5pdGlhbEluVW5pdCA9ICtpbml0aWFsSW5Vbml0IHx8ICtpbml0aWFs
IHx8IDA7CisKKyAgICAgICAgLy8gQXBwbHkgcmVsYXRpdmUgb2Zmc2V0ICgrPS8tPSkgaWYgc3Bl
Y2lmaWVkCisgICAgICAgIGFkanVzdGVkID0gdmFsdWVQYXJ0c1sgMSBdID8KKyAgICAgICAgICAg
IGluaXRpYWxJblVuaXQgKyAoIHZhbHVlUGFydHNbIDEgXSArIDEgKSAqIHZhbHVlUGFydHNbIDIg
XSA6CisgICAgICAgICAgICArdmFsdWVQYXJ0c1sgMiBdOworICAgICAgICBpZiAoIHR3ZWVuICkg
eworICAgICAgICAgICAgdHdlZW4udW5pdCA9IHVuaXQ7CisgICAgICAgICAgICB0d2Vlbi5zdGFy
dCA9IGluaXRpYWxJblVuaXQ7CisgICAgICAgICAgICB0d2Vlbi5lbmQgPSBhZGp1c3RlZDsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gYWRqdXN0ZWQ7Cit9CisKKwordmFyIGRlZmF1bHRE
aXNwbGF5TWFwID0ge307CisKK2Z1bmN0aW9uIGdldERlZmF1bHREaXNwbGF5KCBlbGVtICkgewor
ICAgIHZhciB0ZW1wLAorICAgICAgICBkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQsCisgICAgICAg
IG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSwKKyAgICAgICAgZGlzcGxheSA9IGRlZmF1bHREaXNw
bGF5TWFwWyBub2RlTmFtZSBdOworCisgICAgaWYgKCBkaXNwbGF5ICkgeworICAgICAgICByZXR1
cm4gZGlzcGxheTsKKyAgICB9CisKKyAgICB0ZW1wID0gZG9jLmJvZHkuYXBwZW5kQ2hpbGQoIGRv
Yy5jcmVhdGVFbGVtZW50KCBub2RlTmFtZSApICk7CisgICAgZGlzcGxheSA9IGpRdWVyeS5jc3Mo
IHRlbXAsICJkaXNwbGF5IiApOworCisgICAgdGVtcC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCB0
ZW1wICk7CisKKyAgICBpZiAoIGRpc3BsYXkgPT09ICJub25lIiApIHsKKyAgICAgICAgZGlzcGxh
eSA9ICJibG9jayI7CisgICAgfQorICAgIGRlZmF1bHREaXNwbGF5TWFwWyBub2RlTmFtZSBdID0g
ZGlzcGxheTsKKworICAgIHJldHVybiBkaXNwbGF5OworfQorCitmdW5jdGlvbiBzaG93SGlkZSgg
ZWxlbWVudHMsIHNob3cgKSB7CisgICAgdmFyIGRpc3BsYXksIGVsZW0sCisgICAgICAgIHZhbHVl
cyA9IFtdLAorICAgICAgICBpbmRleCA9IDAsCisgICAgICAgIGxlbmd0aCA9IGVsZW1lbnRzLmxl
bmd0aDsKKworICAgIC8vIERldGVybWluZSBuZXcgZGlzcGxheSB2YWx1ZSBmb3IgZWxlbWVudHMg
dGhhdCBuZWVkIHRvIGNoYW5nZQorICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4Kysg
KSB7CisgICAgICAgIGVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTsKKyAgICAgICAgaWYgKCAhZWxl
bS5zdHlsZSApIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAg
ZGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheTsKKyAgICAgICAgaWYgKCBzaG93ICkgeworCisg
ICAgICAgICAgICAvLyBTaW5jZSB3ZSBmb3JjZSB2aXNpYmlsaXR5IHVwb24gY2FzY2FkZS1oaWRk
ZW4gZWxlbWVudHMsIGFuIGltbWVkaWF0ZSAoYW5kIHNsb3cpCisgICAgICAgICAgICAvLyBjaGVj
ayBpcyByZXF1aXJlZCBpbiB0aGlzIGZpcnN0IGxvb3AgdW5sZXNzIHdlIGhhdmUgYSBub25lbXB0
eSBkaXNwbGF5IHZhbHVlIChlaXRoZXIKKyAgICAgICAgICAgIC8vIGlubGluZSBvciBhYm91dC10
by1iZS1yZXN0b3JlZCkKKyAgICAgICAgICAgIGlmICggZGlzcGxheSA9PT0gIm5vbmUiICkgewor
ICAgICAgICAgICAgICAgIHZhbHVlc1sgaW5kZXggXSA9IGRhdGFQcml2LmdldCggZWxlbSwgImRp
c3BsYXkiICkgfHwgbnVsbDsKKyAgICAgICAgICAgICAgICBpZiAoICF2YWx1ZXNbIGluZGV4IF0g
KSB7CisgICAgICAgICAgICAgICAgICAgIGVsZW0uc3R5bGUuZGlzcGxheSA9ICIiOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggZWxlbS5zdHlsZS5k
aXNwbGF5ID09PSAiIiAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSApIHsKKyAgICAgICAg
ICAgICAgICB2YWx1ZXNbIGluZGV4IF0gPSBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCBkaXNwbGF5ICE9
PSAibm9uZSIgKSB7CisgICAgICAgICAgICAgICAgdmFsdWVzWyBpbmRleCBdID0gIm5vbmUiOwor
CisgICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgd2hhdCB3ZSdyZSBvdmVyd3JpdGluZworICAg
ICAgICAgICAgICAgIGRhdGFQcml2LnNldCggZWxlbSwgImRpc3BsYXkiLCBkaXNwbGF5ICk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTZXQgdGhlIGRpc3BsYXkg
b2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AgdG8gYXZvaWQgY29uc3RhbnQgcmVmbG93
CisgICAgZm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHsKKyAgICAg
ICAgaWYgKCB2YWx1ZXNbIGluZGV4IF0gIT0gbnVsbCApIHsKKyAgICAgICAgICAgIGVsZW1lbnRz
WyBpbmRleCBdLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZXNbIGluZGV4IF07CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gZWxlbWVudHM7Cit9CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKyAg
ICBzaG93OiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHNob3dIaWRlKCB0aGlzLCB0cnVl
ICk7CisgICAgfSwKKyAgICBoaWRlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHNob3dI
aWRlKCB0aGlzICk7CisgICAgfSwKKyAgICB0b2dnbGU6IGZ1bmN0aW9uKCBzdGF0ZSApIHsKKyAg
ICAgICAgaWYgKCB0eXBlb2Ygc3RhdGUgPT09ICJib29sZWFuIiApIHsKKyAgICAgICAgICAgIHJl
dHVybiBzdGF0ZSA/IHRoaXMuc2hvdygpIDogdGhpcy5oaWRlKCk7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmICggaXNI
aWRkZW5XaXRoaW5UcmVlKCB0aGlzICkgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlz
ICkuc2hvdygpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBqUXVlcnko
IHRoaXMgKS5oaWRlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAgICB9Cit9ICk7
Cit2YXIgcmNoZWNrYWJsZVR5cGUgPSAoIC9eKD86Y2hlY2tib3h8cmFkaW8pJC9pICk7CisKK3Zh
ciBydGFnTmFtZSA9ICggLzwoW2Etel1bXlwvXDA+XHgyMFx0XHJcblxmXSspL2kgKTsKKwordmFy
IHJzY3JpcHRUeXBlID0gKCAvXiR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2kgKTsKKworCisKKy8v
IFdlIGhhdmUgdG8gY2xvc2UgdGhlc2UgdGFncyB0byBzdXBwb3J0IFhIVE1MICgjMTMyMDApCit2
YXIgd3JhcE1hcCA9IHsKKworICAgIC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5CisgICAgb3B0aW9u
OiBbIDEsICI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwgIjwvc2VsZWN0PiIgXSwKKwor
ICAgIC8vIFhIVE1MIHBhcnNlcnMgZG8gbm90IG1hZ2ljYWxseSBpbnNlcnQgZWxlbWVudHMgaW4g
dGhlCisgICAgLy8gc2FtZSB3YXkgdGhhdCB0YWcgc291cCBwYXJzZXJzIGRvLiBTbyB3ZSBjYW5u
b3Qgc2hvcnRlbgorICAgIC8vIHRoaXMgYnkgb21pdHRpbmcgPHRib2R5PiBvciBvdGhlciByZXF1
aXJlZCBlbGVtZW50cy4KKyAgICB0aGVhZDogWyAxLCAiPHRhYmxlPiIsICI8L3RhYmxlPiIgXSwK
KyAgICBjb2w6IFsgMiwgIjx0YWJsZT48Y29sZ3JvdXA+IiwgIjwvY29sZ3JvdXA+PC90YWJsZT4i
IF0sCisgICAgdHI6IFsgMiwgIjx0YWJsZT48dGJvZHk+IiwgIjwvdGJvZHk+PC90YWJsZT4iIF0s
CisgICAgdGQ6IFsgMywgIjx0YWJsZT48dGJvZHk+PHRyPiIsICI8L3RyPjwvdGJvZHk+PC90YWJs
ZT4iIF0sCisKKyAgICBfZGVmYXVsdDogWyAwLCAiIiwgIiIgXQorfTsKKworLy8gU3VwcG9ydDog
SUUgPD05IG9ubHkKK3dyYXBNYXAub3B0Z3JvdXAgPSB3cmFwTWFwLm9wdGlvbjsKKword3JhcE1h
cC50Ym9keSA9IHdyYXBNYXAudGZvb3QgPSB3cmFwTWFwLmNvbGdyb3VwID0gd3JhcE1hcC5jYXB0
aW9uID0gd3JhcE1hcC50aGVhZDsKK3dyYXBNYXAudGggPSB3cmFwTWFwLnRkOworCisKK2Z1bmN0
aW9uIGdldEFsbCggY29udGV4dCwgdGFnICkgeworCisgICAgLy8gU3VwcG9ydDogSUUgPD05IC0g
MTEgb25seQorICAgIC8vIFVzZSB0eXBlb2YgdG8gYXZvaWQgemVyby1hcmd1bWVudCBtZXRob2Qg
aW52b2NhdGlvbiBvbiBob3N0IG9iamVjdHMgKCMxNTE1MSkKKyAgICB2YXIgcmV0OworCisgICAg
aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIg
KSB7CisgICAgICAgIHJldCA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyB8fCAi
KiIgKTsKKworICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwg
IT09ICJ1bmRlZmluZWQiICkgeworICAgICAgICByZXQgPSBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JB
bGwoIHRhZyB8fCAiKiIgKTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIHJldCA9IFtdOworICAg
IH0KKworICAgIGlmICggdGFnID09PSB1bmRlZmluZWQgfHwgdGFnICYmIGpRdWVyeS5ub2RlTmFt
ZSggY29udGV4dCwgdGFnICkgKSB7CisgICAgICAgIHJldHVybiBqUXVlcnkubWVyZ2UoIFsgY29u
dGV4dCBdLCByZXQgKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCisKKy8vIE1hcmsg
c2NyaXB0cyBhcyBoYXZpbmcgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZAorZnVuY3Rpb24gc2V0R2xv
YmFsRXZhbCggZWxlbXMsIHJlZkVsZW1lbnRzICkgeworICAgIHZhciBpID0gMCwKKyAgICAgICAg
bCA9IGVsZW1zLmxlbmd0aDsKKworICAgIGZvciAoIDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAg
ZGF0YVByaXYuc2V0KAorICAgICAgICAgICAgZWxlbXNbIGkgXSwKKyAgICAgICAgICAgICJnbG9i
YWxFdmFsIiwKKyAgICAgICAgICAgICFyZWZFbGVtZW50cyB8fCBkYXRhUHJpdi5nZXQoIHJlZkVs
ZW1lbnRzWyBpIF0sICJnbG9iYWxFdmFsIiApCisgICAgICAgICk7CisgICAgfQorfQorCisKK3Zh
ciByaHRtbCA9IC88fCYjP1x3KzsvOworCitmdW5jdGlvbiBidWlsZEZyYWdtZW50KCBlbGVtcywg
Y29udGV4dCwgc2NyaXB0cywgc2VsZWN0aW9uLCBpZ25vcmVkICkgeworICAgIHZhciBlbGVtLCB0
bXAsIHRhZywgd3JhcCwgY29udGFpbnMsIGosCisgICAgICAgIGZyYWdtZW50ID0gY29udGV4dC5j
cmVhdGVEb2N1bWVudEZyYWdtZW50KCksCisgICAgICAgIG5vZGVzID0gW10sCisgICAgICAgIGkg
PSAwLAorICAgICAgICBsID0gZWxlbXMubGVuZ3RoOworCisgICAgZm9yICggOyBpIDwgbDsgaSsr
ICkgeworICAgICAgICBlbGVtID0gZWxlbXNbIGkgXTsKKworICAgICAgICBpZiAoIGVsZW0gfHwg
ZWxlbSA9PT0gMCApIHsKKworICAgICAgICAgICAgLy8gQWRkIG5vZGVzIGRpcmVjdGx5CisgICAg
ICAgICAgICBpZiAoIGpRdWVyeS50eXBlKCBlbGVtICkgPT09ICJvYmplY3QiICkgeworCisgICAg
ICAgICAgICAgICAgLy8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBv
bmx5CisgICAgICAgICAgICAgICAgLy8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBv
biBhbmNpZW50IFdlYktpdAorICAgICAgICAgICAgICAgIGpRdWVyeS5tZXJnZSggbm9kZXMsIGVs
ZW0ubm9kZVR5cGUgPyBbIGVsZW0gXSA6IGVsZW0gKTsKKworICAgICAgICAgICAgLy8gQ29udmVy
dCBub24taHRtbCBpbnRvIGEgdGV4dCBub2RlCisgICAgICAgICAgICB9IGVsc2UgaWYgKCAhcmh0
bWwudGVzdCggZWxlbSApICkgeworICAgICAgICAgICAgICAgIG5vZGVzLnB1c2goIGNvbnRleHQu
Y3JlYXRlVGV4dE5vZGUoIGVsZW0gKSApOworCisgICAgICAgICAgICAvLyBDb252ZXJ0IGh0bWwg
aW50byBET00gbm9kZXMKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdG1w
ID0gdG1wIHx8IGZyYWdtZW50LmFwcGVuZENoaWxkKCBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoICJk
aXYiICkgKTsKKworICAgICAgICAgICAgICAgIC8vIERlc2VyaWFsaXplIGEgc3RhbmRhcmQgcmVw
cmVzZW50YXRpb24KKyAgICAgICAgICAgICAgICB0YWcgPSAoIHJ0YWdOYW1lLmV4ZWMoIGVsZW0g
KSB8fCBbICIiLCAiIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgICAgIHdy
YXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0OworICAgICAgICAgICAgICAg
IHRtcC5pbm5lckhUTUwgPSB3cmFwWyAxIF0gKyBqUXVlcnkuaHRtbFByZWZpbHRlciggZWxlbSAp
ICsgd3JhcFsgMiBdOworCisgICAgICAgICAgICAgICAgLy8gRGVzY2VuZCB0aHJvdWdoIHdyYXBw
ZXJzIHRvIHRoZSByaWdodCBjb250ZW50CisgICAgICAgICAgICAgICAgaiA9IHdyYXBbIDAgXTsK
KyAgICAgICAgICAgICAgICB3aGlsZSAoIGotLSApIHsKKyAgICAgICAgICAgICAgICAgICAgdG1w
ID0gdG1wLmxhc3RDaGlsZDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAv
LyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHkKKyAgICAgICAg
ICAgICAgICAvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2Vi
S2l0CisgICAgICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCBub2RlcywgdG1wLmNoaWxkTm9kZXMg
KTsKKworICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoZSB0b3AtbGV2ZWwgY29udGFpbmVy
CisgICAgICAgICAgICAgICAgdG1wID0gZnJhZ21lbnQuZmlyc3RDaGlsZDsKKworICAgICAgICAg
ICAgICAgIC8vIEVuc3VyZSB0aGUgY3JlYXRlZCBub2RlcyBhcmUgb3JwaGFuZWQgKCMxMjM5MikK
KyAgICAgICAgICAgICAgICB0bXAudGV4dENvbnRlbnQgPSAiIjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIFJlbW92ZSB3cmFwcGVyIGZyb20gZnJhZ21lbnQKKyAg
ICBmcmFnbWVudC50ZXh0Q29udGVudCA9ICIiOworCisgICAgaSA9IDA7CisgICAgd2hpbGUgKCAo
IGVsZW0gPSBub2Rlc1sgaSsrIF0gKSApIHsKKworICAgICAgICAvLyBTa2lwIGVsZW1lbnRzIGFs
cmVhZHkgaW4gdGhlIGNvbnRleHQgY29sbGVjdGlvbiAodHJhYy00MDg3KQorICAgICAgICBpZiAo
IHNlbGVjdGlvbiAmJiBqUXVlcnkuaW5BcnJheSggZWxlbSwgc2VsZWN0aW9uICkgPiAtMSApIHsK
KyAgICAgICAgICAgIGlmICggaWdub3JlZCApIHsKKyAgICAgICAgICAgICAgICBpZ25vcmVkLnB1
c2goIGVsZW0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgY29udGFpbnMgPSBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1
bWVudCwgZWxlbSApOworCisgICAgICAgIC8vIEFwcGVuZCB0byBmcmFnbWVudAorICAgICAgICB0
bXAgPSBnZXRBbGwoIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICksICJzY3JpcHQiICk7CisK
KyAgICAgICAgLy8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeQorICAgICAgICBp
ZiAoIGNvbnRhaW5zICkgeworICAgICAgICAgICAgc2V0R2xvYmFsRXZhbCggdG1wICk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBDYXB0dXJlIGV4ZWN1dGFibGVzCisgICAgICAgIGlmICggc2Ny
aXB0cyApIHsKKyAgICAgICAgICAgIGogPSAwOworICAgICAgICAgICAgd2hpbGUgKCAoIGVsZW0g
PSB0bXBbIGorKyBdICkgKSB7CisgICAgICAgICAgICAgICAgaWYgKCByc2NyaXB0VHlwZS50ZXN0
KCBlbGVtLnR5cGUgfHwgIiIgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgc2NyaXB0cy5wdXNo
KCBlbGVtICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIGZyYWdtZW50OworfQorCisKKyggZnVuY3Rpb24oKSB7CisgICAg
dmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLAorICAgICAg
ICBkaXYgPSBmcmFnbWVudC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImRp
diIgKSApLAorICAgICAgICBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJpbnB1dCIg
KTsKKworICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHkKKyAgICAvLyBDaGVj
ayBzdGF0ZSBsb3N0IGlmIHRoZSBuYW1lIGlzIHNldCAoIzExMjE3KQorICAgIC8vIFN1cHBvcnQ6
IFdpbmRvd3MgV2ViIEFwcHMgKFdXQSkKKyAgICAvLyBgbmFtZWAgYW5kIGB0eXBlYCBtdXN0IHVz
ZSAuc2V0QXR0cmlidXRlIGZvciBXV0EgKCMxNDkwMSkKKyAgICBpbnB1dC5zZXRBdHRyaWJ1dGUo
ICJ0eXBlIiwgInJhZGlvIiApOworICAgIGlucHV0LnNldEF0dHJpYnV0ZSggImNoZWNrZWQiLCAi
Y2hlY2tlZCIgKTsKKyAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoICJuYW1lIiwgInQiICk7CisKKyAg
ICBkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7CisKKyAgICAvLyBTdXBwb3J0OiBBbmRyb2lkIDw9
NC4xIG9ubHkKKyAgICAvLyBPbGRlciBXZWJLaXQgZG9lc24ndCBjbG9uZSBjaGVja2VkIHN0YXRl
IGNvcnJlY3RseSBpbiBmcmFnbWVudHMKKyAgICBzdXBwb3J0LmNoZWNrQ2xvbmUgPSBkaXYuY2xv
bmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7CisKKyAg
ICAvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHkKKyAgICAvLyBNYWtlIHN1cmUgdGV4dGFyZWEgKGFu
ZCBjaGVja2JveCkgZGVmYXVsdFZhbHVlIGlzIHByb3Blcmx5IGNsb25lZAorICAgIGRpdi5pbm5l
ckhUTUwgPSAiPHRleHRhcmVhPng8L3RleHRhcmVhPiI7CisgICAgc3VwcG9ydC5ub0Nsb25lQ2hl
Y2tlZCA9ICEhZGl2LmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWU7Cit9
ICkoKTsKK3ZhciBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CisK
KworCit2YXIKKyAgICBya2V5RXZlbnQgPSAvXmtleS8sCisgICAgcm1vdXNlRXZlbnQgPSAvXig/
Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wKXxjbGljay8sCisgICAgcnR5cGVu
YW1lc3BhY2UgPSAvXihbXi5dKikoPzpcLiguKyl8KS87CisKK2Z1bmN0aW9uIHJldHVyblRydWUo
KSB7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9uIHJldHVybkZhbHNlKCkgeworICAg
IHJldHVybiBmYWxzZTsKK30KKworLy8gU3VwcG9ydDogSUUgPD05IG9ubHkKKy8vIFNlZSAjMTMz
OTMgZm9yIG1vcmUgaW5mbworZnVuY3Rpb24gc2FmZUFjdGl2ZUVsZW1lbnQoKSB7CisgICAgdHJ5
IHsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7CisgICAgfSBjYXRjaCAo
IGVyciApIHsgfQorfQorCitmdW5jdGlvbiBvbiggZWxlbSwgdHlwZXMsIHNlbGVjdG9yLCBkYXRh
LCBmbiwgb25lICkgeworICAgIHZhciBvcmlnRm4sIHR5cGU7CisKKyAgICAvLyBUeXBlcyBjYW4g
YmUgYSBtYXAgb2YgdHlwZXMvaGFuZGxlcnMKKyAgICBpZiAoIHR5cGVvZiB0eXBlcyA9PT0gIm9i
amVjdCIgKSB7CisKKyAgICAgICAgLy8gKCB0eXBlcy1PYmplY3QsIHNlbGVjdG9yLCBkYXRhICkK
KyAgICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkgeworCisgICAgICAg
ICAgICAvLyAoIHR5cGVzLU9iamVjdCwgZGF0YSApCisgICAgICAgICAgICBkYXRhID0gZGF0YSB8
fCBzZWxlY3RvcjsKKyAgICAgICAgICAgIHNlbGVjdG9yID0gdW5kZWZpbmVkOworICAgICAgICB9
CisgICAgICAgIGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7CisgICAgICAgICAgICBvbiggZWxlbSwg
dHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVzWyB0eXBlIF0sIG9uZSApOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBlbGVtOworICAgIH0KKworICAgIGlmICggZGF0YSA9PSBudWxsICYmIGZu
ID09IG51bGwgKSB7CisKKyAgICAgICAgLy8gKCB0eXBlcywgZm4gKQorICAgICAgICBmbiA9IHNl
bGVjdG9yOworICAgICAgICBkYXRhID0gc2VsZWN0b3IgPSB1bmRlZmluZWQ7CisgICAgfSBlbHNl
IGlmICggZm4gPT0gbnVsbCApIHsKKyAgICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJz
dHJpbmciICkgeworCisgICAgICAgICAgICAvLyAoIHR5cGVzLCBzZWxlY3RvciwgZm4gKQorICAg
ICAgICAgICAgZm4gPSBkYXRhOworICAgICAgICAgICAgZGF0YSA9IHVuZGVmaW5lZDsKKyAgICAg
ICAgfSBlbHNlIHsKKworICAgICAgICAgICAgLy8gKCB0eXBlcywgZGF0YSwgZm4gKQorICAgICAg
ICAgICAgZm4gPSBkYXRhOworICAgICAgICAgICAgZGF0YSA9IHNlbGVjdG9yOworICAgICAgICAg
ICAgc2VsZWN0b3IgPSB1bmRlZmluZWQ7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCBmbiA9
PT0gZmFsc2UgKSB7CisgICAgICAgIGZuID0gcmV0dXJuRmFsc2U7CisgICAgfSBlbHNlIGlmICgg
IWZuICkgeworICAgICAgICByZXR1cm4gZWxlbTsKKyAgICB9CisKKyAgICBpZiAoIG9uZSA9PT0g
MSApIHsKKyAgICAgICAgb3JpZ0ZuID0gZm47CisgICAgICAgIGZuID0gZnVuY3Rpb24oIGV2ZW50
ICkgeworCisgICAgICAgICAgICAvLyBDYW4gdXNlIGFuIGVtcHR5IHNldCwgc2luY2UgZXZlbnQg
Y29udGFpbnMgdGhlIGluZm8KKyAgICAgICAgICAgIGpRdWVyeSgpLm9mZiggZXZlbnQgKTsKKyAg
ICAgICAgICAgIHJldHVybiBvcmlnRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOworICAgICAg
ICB9OworCisgICAgICAgIC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1vdmUgdXNp
bmcgb3JpZ0ZuCisgICAgICAgIGZuLmd1aWQgPSBvcmlnRm4uZ3VpZCB8fCAoIG9yaWdGbi5ndWlk
ID0galF1ZXJ5Lmd1aWQrKyApOworICAgIH0KKyAgICByZXR1cm4gZWxlbS5lYWNoKCBmdW5jdGlv
bigpIHsKKyAgICAgICAgalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZXMsIGZuLCBkYXRhLCBz
ZWxlY3RvciApOworICAgIH0gKTsKK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1h
bmFnaW5nIGV2ZW50cyAtLSBub3QgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4KKyAqIFBy
b3BzIHRvIERlYW4gRWR3YXJkcycgYWRkRXZlbnQgbGlicmFyeSBmb3IgbWFueSBvZiB0aGUgaWRl
YXMuCisgKi8KK2pRdWVyeS5ldmVudCA9IHsKKworICAgIGdsb2JhbDoge30sCisKKyAgICBhZGQ6
IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSwgc2VsZWN0b3IgKSB7CisKKyAg
ICAgICAgdmFyIGhhbmRsZU9iakluLCBldmVudEhhbmRsZSwgdG1wLAorICAgICAgICAgICAgZXZl
bnRzLCB0LCBoYW5kbGVPYmosCisgICAgICAgICAgICBzcGVjaWFsLCBoYW5kbGVycywgdHlwZSwg
bmFtZXNwYWNlcywgb3JpZ1R5cGUsCisgICAgICAgICAgICBlbGVtRGF0YSA9IGRhdGFQcml2Lmdl
dCggZWxlbSApOworCisgICAgICAgIC8vIERvbid0IGF0dGFjaCBldmVudHMgdG8gbm9EYXRhIG9y
IHRleHQvY29tbWVudCBub2RlcyAoYnV0IGFsbG93IHBsYWluIG9iamVjdHMpCisgICAgICAgIGlm
ICggIWVsZW1EYXRhICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gQ2FsbGVyIGNhbiBwYXNzIGluIGFuIG9iamVjdCBvZiBjdXN0b20gZGF0YSBpbiBsaWV1
IG9mIHRoZSBoYW5kbGVyCisgICAgICAgIGlmICggaGFuZGxlci5oYW5kbGVyICkgeworICAgICAg
ICAgICAgaGFuZGxlT2JqSW4gPSBoYW5kbGVyOworICAgICAgICAgICAgaGFuZGxlciA9IGhhbmRs
ZU9iakluLmhhbmRsZXI7CisgICAgICAgICAgICBzZWxlY3RvciA9IGhhbmRsZU9iakluLnNlbGVj
dG9yOworICAgICAgICB9CisKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgaW52YWxpZCBzZWxlY3Rv
cnMgdGhyb3cgZXhjZXB0aW9ucyBhdCBhdHRhY2ggdGltZQorICAgICAgICAvLyBFdmFsdWF0ZSBh
Z2FpbnN0IGRvY3VtZW50RWxlbWVudCBpbiBjYXNlIGVsZW0gaXMgYSBub24tZWxlbWVudCBub2Rl
IChlLmcuLCBkb2N1bWVudCkKKyAgICAgICAgaWYgKCBzZWxlY3RvciApIHsKKyAgICAgICAgICAg
IGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggZG9jdW1lbnRFbGVtZW50LCBzZWxlY3RvciAp
OworICAgICAgICB9CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZXIgaGFz
IGEgdW5pcXVlIElELCB1c2VkIHRvIGZpbmQvcmVtb3ZlIGl0IGxhdGVyCisgICAgICAgIGlmICgg
IWhhbmRsZXIuZ3VpZCApIHsKKyAgICAgICAgICAgIGhhbmRsZXIuZ3VpZCA9IGpRdWVyeS5ndWlk
Kys7CisgICAgICAgIH0KKworICAgICAgICAvLyBJbml0IHRoZSBlbGVtZW50J3MgZXZlbnQgc3Ry
dWN0dXJlIGFuZCBtYWluIGhhbmRsZXIsIGlmIHRoaXMgaXMgdGhlIGZpcnN0CisgICAgICAgIGlm
ICggISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7CisgICAgICAgICAgICBldmVudHMg
PSBlbGVtRGF0YS5ldmVudHMgPSB7fTsKKyAgICAgICAgfQorICAgICAgICBpZiAoICEoIGV2ZW50
SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlICkgKSB7CisgICAgICAgICAgICBldmVudEhhbmRsZSA9
IGVsZW1EYXRhLmhhbmRsZSA9IGZ1bmN0aW9uKCBlICkgeworCisgICAgICAgICAgICAgICAgLy8g
RGlzY2FyZCB0aGUgc2Vjb25kIGV2ZW50IG9mIGEgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoKSBhbmQK
KyAgICAgICAgICAgICAgICAvLyB3aGVuIGFuIGV2ZW50IGlzIGNhbGxlZCBhZnRlciBhIHBhZ2Ug
aGFzIHVubG9hZGVkCisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBqUXVlcnkgIT09ICJ1
bmRlZmluZWQiICYmIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSA/CisgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5kaXNwYXRjaC5hcHBseSggZWxlbSwgYXJndW1lbnRz
ICkgOiB1bmRlZmluZWQ7CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgLy8g
SGFuZGxlIG11bHRpcGxlIGV2ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZQorICAgICAgICB0eXBl
cyA9ICggdHlwZXMgfHwgIiIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgIiIgXTsKKyAg
ICAgICAgdCA9IHR5cGVzLmxlbmd0aDsKKyAgICAgICAgd2hpbGUgKCB0LS0gKSB7CisgICAgICAg
ICAgICB0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107CisgICAg
ICAgICAgICB0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTsKKyAgICAgICAgICAgIG5hbWVzcGFj
ZXMgPSAoIHRtcFsgMiBdIHx8ICIiICkuc3BsaXQoICIuIiApLnNvcnQoKTsKKworICAgICAgICAg
ICAgLy8gVGhlcmUgKm11c3QqIGJlIGEgdHlwZSwgbm8gYXR0YWNoaW5nIG5hbWVzcGFjZS1vbmx5
IGhhbmRsZXJzCisgICAgICAgICAgICBpZiAoICF0eXBlICkgeworICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJZiBldmVudCBjaGFuZ2Vz
IGl0cyB0eXBlLCB1c2UgdGhlIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSBjaGFuZ2Vk
IHR5cGUKKyAgICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBd
IHx8IHt9OworCisgICAgICAgICAgICAvLyBJZiBzZWxlY3RvciBkZWZpbmVkLCBkZXRlcm1pbmUg
c3BlY2lhbCBldmVudCBhcGkgdHlwZSwgb3RoZXJ3aXNlIGdpdmVuIHR5cGUKKyAgICAgICAgICAg
IHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRU
eXBlICkgfHwgdHlwZTsKKworICAgICAgICAgICAgLy8gVXBkYXRlIHNwZWNpYWwgYmFzZWQgb24g
bmV3bHkgcmVzZXQgdHlwZQorICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVj
aWFsWyB0eXBlIF0gfHwge307CisKKyAgICAgICAgICAgIC8vIGhhbmRsZU9iaiBpcyBwYXNzZWQg
dG8gYWxsIGV2ZW50IGhhbmRsZXJzCisgICAgICAgICAgICBoYW5kbGVPYmogPSBqUXVlcnkuZXh0
ZW5kKCB7CisgICAgICAgICAgICAgICAgdHlwZTogdHlwZSwKKyAgICAgICAgICAgICAgICBvcmln
VHlwZTogb3JpZ1R5cGUsCisgICAgICAgICAgICAgICAgZGF0YTogZGF0YSwKKyAgICAgICAgICAg
ICAgICBoYW5kbGVyOiBoYW5kbGVyLAorICAgICAgICAgICAgICAgIGd1aWQ6IGhhbmRsZXIuZ3Vp
ZCwKKyAgICAgICAgICAgICAgICBzZWxlY3Rvcjogc2VsZWN0b3IsCisgICAgICAgICAgICAgICAg
bmVlZHNDb250ZXh0OiBzZWxlY3RvciAmJiBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQu
dGVzdCggc2VsZWN0b3IgKSwKKyAgICAgICAgICAgICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZXMu
am9pbiggIi4iICkKKyAgICAgICAgICAgIH0sIGhhbmRsZU9iakluICk7CisKKyAgICAgICAgICAg
IC8vIEluaXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2UncmUgdGhlIGZpcnN0CisgICAg
ICAgICAgICBpZiAoICEoIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gKSApIHsKKyAgICAgICAg
ICAgICAgICBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdID0gW107CisgICAgICAgICAgICAgICAg
aGFuZGxlcnMuZGVsZWdhdGVDb3VudCA9IDA7CisKKyAgICAgICAgICAgICAgICAvLyBPbmx5IHVz
ZSBhZGRFdmVudExpc3RlbmVyIGlmIHRoZSBzcGVjaWFsIGV2ZW50cyBoYW5kbGVyIHJldHVybnMg
ZmFsc2UKKyAgICAgICAgICAgICAgICBpZiAoICFzcGVjaWFsLnNldHVwIHx8CisgICAgICAgICAg
ICAgICAgICAgIHNwZWNpYWwuc2V0dXAuY2FsbCggZWxlbSwgZGF0YSwgbmFtZXNwYWNlcywgZXZl
bnRIYW5kbGUgKSA9PT0gZmFsc2UgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVt
LmFkZEV2ZW50TGlzdGVuZXIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmFkZEV2
ZW50TGlzdGVuZXIoIHR5cGUsIGV2ZW50SGFuZGxlICk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggc3Bl
Y2lhbC5hZGQgKSB7CisgICAgICAgICAgICAgICAgc3BlY2lhbC5hZGQuY2FsbCggZWxlbSwgaGFu
ZGxlT2JqICk7CisKKyAgICAgICAgICAgICAgICBpZiAoICFoYW5kbGVPYmouaGFuZGxlci5ndWlk
ICkgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmouaGFuZGxlci5ndWlkID0gaGFuZGxl
ci5ndWlkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gQWRkIHRvIHRoZSBlbGVtZW50J3MgaGFuZGxlciBsaXN0LCBkZWxlZ2F0ZXMgaW4gZnJvbnQK
KyAgICAgICAgICAgIGlmICggc2VsZWN0b3IgKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlcnMu
c3BsaWNlKCBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRsZU9iaiApOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVycy5wdXNoKCBoYW5kbGVPYmog
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gS2VlcCB0cmFjayBvZiB3aGljaCBl
dmVudHMgaGF2ZSBldmVyIGJlZW4gdXNlZCwgZm9yIGV2ZW50IG9wdGltaXphdGlvbgorICAgICAg
ICAgICAgalF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgfSwKKworICAgIC8vIERldGFjaCBhbiBldmVudCBvciBzZXQgb2YgZXZlbnRzIGZyb20gYW4g
ZWxlbWVudAorICAgIHJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBzZWxl
Y3RvciwgbWFwcGVkVHlwZXMgKSB7CisKKyAgICAgICAgdmFyIGosIG9yaWdDb3VudCwgdG1wLAor
ICAgICAgICAgICAgZXZlbnRzLCB0LCBoYW5kbGVPYmosCisgICAgICAgICAgICBzcGVjaWFsLCBo
YW5kbGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsCisgICAgICAgICAgICBlbGVtRGF0
YSA9IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKSAmJiBkYXRhUHJpdi5nZXQoIGVsZW0gKTsKKwor
ICAgICAgICBpZiAoICFlbGVtRGF0YSB8fCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSAp
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9uY2UgZm9y
IGVhY2ggdHlwZS5uYW1lc3BhY2UgaW4gdHlwZXM7IHR5cGUgbWF5IGJlIG9taXR0ZWQKKyAgICAg
ICAgdHlwZXMgPSAoIHR5cGVzIHx8ICIiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbICIi
IF07CisgICAgICAgIHQgPSB0eXBlcy5sZW5ndGg7CisgICAgICAgIHdoaWxlICggdC0tICkgewor
ICAgICAgICAgICAgdG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtd
OworICAgICAgICAgICAgdHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07CisgICAgICAgICAgICBu
YW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCAiIiApLnNwbGl0KCAiLiIgKS5zb3J0KCk7CisKKyAg
ICAgICAgICAgIC8vIFVuYmluZCBhbGwgZXZlbnRzIChvbiB0aGlzIG5hbWVzcGFjZSwgaWYgcHJv
dmlkZWQpIGZvciB0aGUgZWxlbWVudAorICAgICAgICAgICAgaWYgKCAhdHlwZSApIHsKKyAgICAg
ICAgICAgICAgICBmb3IgKCB0eXBlIGluIGV2ZW50cyApIHsKKyAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSArIHR5cGVzWyB0IF0sIGhhbmRsZXIsIHNl
bGVjdG9yLCB0cnVlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50
LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKKyAgICAgICAgICAgIHR5cGUgPSAoIHNlbGVjdG9yID8g
c3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTsKKyAgICAg
ICAgICAgIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gfHwgW107CisgICAgICAgICAgICB0bXAg
PSB0bXBbIDIgXSAmJgorICAgICAgICAgICAgICAgIG5ldyBSZWdFeHAoICIoXnxcXC4pIiArIG5h
bWVzcGFjZXMuam9pbiggIlxcLig/Oi4qXFwufCkiICkgKyAiKFxcLnwkKSIgKTsKKworICAgICAg
ICAgICAgLy8gUmVtb3ZlIG1hdGNoaW5nIGV2ZW50cworICAgICAgICAgICAgb3JpZ0NvdW50ID0g
aiA9IGhhbmRsZXJzLmxlbmd0aDsKKyAgICAgICAgICAgIHdoaWxlICggai0tICkgeworICAgICAg
ICAgICAgICAgIGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBqIF07CisKKyAgICAgICAgICAgICAgICBp
ZiAoICggbWFwcGVkVHlwZXMgfHwgb3JpZ1R5cGUgPT09IGhhbmRsZU9iai5vcmlnVHlwZSApICYm
CisgICAgICAgICAgICAgICAgICAgICggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlkID09PSBoYW5k
bGVPYmouZ3VpZCApICYmCisgICAgICAgICAgICAgICAgICAgICggIXRtcCB8fCB0bXAudGVzdCgg
aGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiYKKyAgICAgICAgICAgICAgICAgICAgKCAhc2VsZWN0
b3IgfHwgc2VsZWN0b3IgPT09IGhhbmRsZU9iai5zZWxlY3RvciB8fAorICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZWN0b3IgPT09ICIqKiIgJiYgaGFuZGxlT2JqLnNlbGVjdG9yICkgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzLnNwbGljZSggaiwgMSApOworCisgICAgICAgICAg
ICAgICAgICAgIGlmICggaGFuZGxlT2JqLnNlbGVjdG9yICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaGFuZGxlcnMuZGVsZWdhdGVDb3VudC0tOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGlmICggc3BlY2lhbC5yZW1vdmUgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gUmVtb3ZlIGdlbmVyaWMgZXZlbnQgaGFuZGxlciBpZiB3ZSByZW1vdmVkIHNv
bWV0aGluZyBhbmQgbm8gbW9yZSBoYW5kbGVycyBleGlzdAorICAgICAgICAgICAgLy8gKGF2b2lk
cyBwb3RlbnRpYWwgZm9yIGVuZGxlc3MgcmVjdXJzaW9uIGR1cmluZyByZW1vdmFsIG9mIHNwZWNp
YWwgZXZlbnQgaGFuZGxlcnMpCisgICAgICAgICAgICBpZiAoIG9yaWdDb3VudCAmJiAhaGFuZGxl
cnMubGVuZ3RoICkgeworICAgICAgICAgICAgICAgIGlmICggIXNwZWNpYWwudGVhcmRvd24gfHwK
KyAgICAgICAgICAgICAgICAgICAgc3BlY2lhbC50ZWFyZG93bi5jYWxsKCBlbGVtLCBuYW1lc3Bh
Y2VzLCBlbGVtRGF0YS5oYW5kbGUgKSA9PT0gZmFsc2UgKSB7CisKKyAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBlbGVtRGF0YS5oYW5kbGUgKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBkZWxldGUgZXZlbnRzWyB0eXBlIF07
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBSZW1vdmUgZGF0YSBhbmQg
dGhlIGV4cGFuZG8gaWYgaXQncyBubyBsb25nZXIgdXNlZAorICAgICAgICBpZiAoIGpRdWVyeS5p
c0VtcHR5T2JqZWN0KCBldmVudHMgKSApIHsKKyAgICAgICAgICAgIGRhdGFQcml2LnJlbW92ZSgg
ZWxlbSwgImhhbmRsZSBldmVudHMiICk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgZGlzcGF0
Y2g6IGZ1bmN0aW9uKCBuYXRpdmVFdmVudCApIHsKKworICAgICAgICAvLyBNYWtlIGEgd3JpdGFi
bGUgalF1ZXJ5LkV2ZW50IGZyb20gdGhlIG5hdGl2ZSBldmVudCBvYmplY3QKKyAgICAgICAgdmFy
IGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggbmF0aXZlRXZlbnQgKTsKKworICAgICAgICB2YXIg
aSwgaiwgcmV0LCBtYXRjaGVkLCBoYW5kbGVPYmosIGhhbmRsZXJRdWV1ZSwKKyAgICAgICAgICAg
IGFyZ3MgPSBuZXcgQXJyYXkoIGFyZ3VtZW50cy5sZW5ndGggKSwKKyAgICAgICAgICAgIGhhbmRs
ZXJzID0gKCBkYXRhUHJpdi5nZXQoIHRoaXMsICJldmVudHMiICkgfHwge30gKVsgZXZlbnQudHlw
ZSBdIHx8IFtdLAorICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyBl
dmVudC50eXBlIF0gfHwge307CisKKyAgICAgICAgLy8gVXNlIHRoZSBmaXgtZWQgalF1ZXJ5LkV2
ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnQKKyAgICAgICAgYXJn
c1sgMCBdID0gZXZlbnQ7CisKKyAgICAgICAgZm9yICggaSA9IDE7IGkgPCBhcmd1bWVudHMubGVu
Z3RoOyBpKysgKSB7CisgICAgICAgICAgICBhcmdzWyBpIF0gPSBhcmd1bWVudHNbIGkgXTsKKyAg
ICAgICAgfQorCisgICAgICAgIGV2ZW50LmRlbGVnYXRlVGFyZ2V0ID0gdGhpczsKKworICAgICAg
ICAvLyBDYWxsIHRoZSBwcmVEaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGUsIGFuZCBs
ZXQgaXQgYmFpbCBpZiBkZXNpcmVkCisgICAgICAgIGlmICggc3BlY2lhbC5wcmVEaXNwYXRjaCAm
JiBzcGVjaWFsLnByZURpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICkgPT09IGZhbHNlICkgewor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gRGV0ZXJtaW5lIGhh
bmRsZXJzCisgICAgICAgIGhhbmRsZXJRdWV1ZSA9IGpRdWVyeS5ldmVudC5oYW5kbGVycy5jYWxs
KCB0aGlzLCBldmVudCwgaGFuZGxlcnMgKTsKKworICAgICAgICAvLyBSdW4gZGVsZWdhdGVzIGZp
cnN0OyB0aGV5IG1heSB3YW50IHRvIHN0b3AgcHJvcGFnYXRpb24gYmVuZWF0aCB1cworICAgICAg
ICBpID0gMDsKKyAgICAgICAgd2hpbGUgKCAoIG1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkrKyBd
ICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7CisgICAgICAgICAgICBldmVu
dC5jdXJyZW50VGFyZ2V0ID0gbWF0Y2hlZC5lbGVtOworCisgICAgICAgICAgICBqID0gMDsKKyAg
ICAgICAgICAgIHdoaWxlICggKCBoYW5kbGVPYmogPSBtYXRjaGVkLmhhbmRsZXJzWyBqKysgXSAp
ICYmCisgICAgICAgICAgICAgICAgIWV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVk
KCkgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyZWQgZXZlbnQgbXVzdCBlaXRoZXIg
MSkgaGF2ZSBubyBuYW1lc3BhY2UsIG9yIDIpIGhhdmUgbmFtZXNwYWNlKHMpCisgICAgICAgICAg
ICAgICAgLy8gYSBzdWJzZXQgb3IgZXF1YWwgdG8gdGhvc2UgaW4gdGhlIGJvdW5kIGV2ZW50IChi
b3RoIGNhbiBoYXZlIG5vIG5hbWVzcGFjZSkuCisgICAgICAgICAgICAgICAgaWYgKCAhZXZlbnQu
cm5hbWVzcGFjZSB8fCBldmVudC5ybmFtZXNwYWNlLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2Ug
KSApIHsKKworICAgICAgICAgICAgICAgICAgICBldmVudC5oYW5kbGVPYmogPSBoYW5kbGVPYmo7
CisgICAgICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEgPSBoYW5kbGVPYmouZGF0YTsKKworICAg
ICAgICAgICAgICAgICAgICByZXQgPSAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGhhbmRsZU9i
ai5vcmlnVHlwZSBdIHx8IHt9ICkuaGFuZGxlIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBo
YW5kbGVPYmouaGFuZGxlciApLmFwcGx5KCBtYXRjaGVkLmVsZW0sIGFyZ3MgKTsKKworICAgICAg
ICAgICAgICAgICAgICBpZiAoIHJldCAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAoIGV2ZW50LnJlc3VsdCA9IHJldCApID09PSBmYWxzZSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ2FsbCB0aGUgcG9zdERpc3Bh
dGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZQorICAgICAgICBpZiAoIHNwZWNpYWwucG9zdERp
c3BhdGNoICkgeworICAgICAgICAgICAgc3BlY2lhbC5wb3N0RGlzcGF0Y2guY2FsbCggdGhpcywg
ZXZlbnQgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBldmVudC5yZXN1bHQ7CisgICAg
fSwKKworICAgIGhhbmRsZXJzOiBmdW5jdGlvbiggZXZlbnQsIGhhbmRsZXJzICkgeworICAgICAg
ICB2YXIgaSwgaGFuZGxlT2JqLCBzZWwsIG1hdGNoZWRIYW5kbGVycywgbWF0Y2hlZFNlbGVjdG9y
cywKKyAgICAgICAgICAgIGhhbmRsZXJRdWV1ZSA9IFtdLAorICAgICAgICAgICAgZGVsZWdhdGVD
b3VudCA9IGhhbmRsZXJzLmRlbGVnYXRlQ291bnQsCisgICAgICAgICAgICBjdXIgPSBldmVudC50
YXJnZXQ7CisKKyAgICAgICAgLy8gRmluZCBkZWxlZ2F0ZSBoYW5kbGVycworICAgICAgICBpZiAo
IGRlbGVnYXRlQ291bnQgJiYKKworICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUgPD05CisgICAg
ICAgICAgICAvLyBCbGFjay1ob2xlIFNWRyA8dXNlPiBpbnN0YW5jZSB0cmVlcyAodHJhYy0xMzE4
MCkKKyAgICAgICAgICAgIGN1ci5ub2RlVHlwZSAmJgorCisgICAgICAgICAgICAvLyBTdXBwb3J0
OiBGaXJlZm94IDw9NDIKKyAgICAgICAgICAgIC8vIFN1cHByZXNzIHNwZWMtdmlvbGF0aW5nIGNs
aWNrcyBpbmRpY2F0aW5nIGEgbm9uLXByaW1hcnkgcG9pbnRlciBidXR0b24gKHRyYWMtMzg2MSkK
KyAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMv
I2V2ZW50LXR5cGUtY2xpY2sKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFIDExIG9ubHkKKyAg
ICAgICAgICAgIC8vIC4uLmJ1dCBub3QgYXJyb3cga2V5ICJjbGlja3MiIG9mIHJhZGlvIGlucHV0
cywgd2hpY2ggY2FuIGhhdmUgYGJ1dHRvbmAgLTEgKGdoLTIzNDMpCisgICAgICAgICAgICAhKCBl
dmVudC50eXBlID09PSAiY2xpY2siICYmIGV2ZW50LmJ1dHRvbiA+PSAxICkgKSB7CisKKyAgICAg
ICAgICAgIGZvciAoIDsgY3VyICE9PSB0aGlzOyBjdXIgPSBjdXIucGFyZW50Tm9kZSB8fCB0aGlz
ICkgeworCisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgY2hlY2sgbm9uLWVsZW1lbnRzICgjMTMy
MDgpCisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcHJvY2VzcyBjbGlja3Mgb24gZGlzYWJsZWQg
ZWxlbWVudHMgKCM2OTExLCAjODE2NSwgIzExMzgyLCAjMTE3NjQpCisgICAgICAgICAgICAgICAg
aWYgKCBjdXIubm9kZVR5cGUgPT09IDEgJiYgISggZXZlbnQudHlwZSA9PT0gImNsaWNrIiAmJiBj
dXIuZGlzYWJsZWQgPT09IHRydWUgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZEhh
bmRsZXJzID0gW107CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZWRTZWxlY3RvcnMgPSB7fTsK
KyAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBkZWxlZ2F0ZUNvdW50OyBpKysg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmogPSBoYW5kbGVyc1sgaSBdOwor
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBjb25mbGljdCB3aXRoIE9iamVjdC5w
cm90b3R5cGUgcHJvcGVydGllcyAoIzEzMjAzKQorICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
ID0gaGFuZGxlT2JqLnNlbGVjdG9yICsgIiAiOworCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPSBoYW5kbGVPYmoubmVl
ZHNDb250ZXh0ID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCBzZWws
IHRoaXMgKS5pbmRleCggY3VyICkgPiAtMSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5maW5kKCBzZWwsIHRoaXMsIG51bGwsIFsgY3VyIF0gKS5sZW5ndGg7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNo
ZWRTZWxlY3RvcnNbIHNlbCBdICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNo
ZWRIYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoZWRI
YW5kbGVycy5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyUXVldWUu
cHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBtYXRjaGVkSGFuZGxlcnMgfSApOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgLy8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5LWJvdW5kKSBoYW5k
bGVycworICAgICAgICBjdXIgPSB0aGlzOworICAgICAgICBpZiAoIGRlbGVnYXRlQ291bnQgPCBo
YW5kbGVycy5sZW5ndGggKSB7CisgICAgICAgICAgICBoYW5kbGVyUXVldWUucHVzaCggeyBlbGVt
OiBjdXIsIGhhbmRsZXJzOiBoYW5kbGVycy5zbGljZSggZGVsZWdhdGVDb3VudCApIH0gKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBoYW5kbGVyUXVldWU7CisgICAgfSwKKworICAgIGFk
ZFByb3A6IGZ1bmN0aW9uKCBuYW1lLCBob29rICkgeworICAgICAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoIGpRdWVyeS5FdmVudC5wcm90b3R5cGUsIG5hbWUsIHsKKyAgICAgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCisKKyAgICAgICAg
ICAgIGdldDogalF1ZXJ5LmlzRnVuY3Rpb24oIGhvb2sgKSA/CisgICAgICAgICAgICAgICAgZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBob29rKCB0aGlzLm9yaWdpbmFs
RXZlbnQgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gOgorICAg
ICAgICAgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMu
b3JpZ2luYWxFdmVudCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5vcmlnaW5hbEV2ZW50WyBuYW1lIF07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9LAorCisgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAg
ICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoIHRoaXMsIG5hbWUsIHsKKyAgICAgICAg
ICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlLAorICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlCisgICAgICAgICAgICAgICAgfSApOworICAgICAg
ICAgICAgfQorICAgICAgICB9ICk7CisgICAgfSwKKworICAgIGZpeDogZnVuY3Rpb24oIG9yaWdp
bmFsRXZlbnQgKSB7CisgICAgICAgIHJldHVybiBvcmlnaW5hbEV2ZW50WyBqUXVlcnkuZXhwYW5k
byBdID8KKyAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQgOgorICAgICAgICAgICAgbmV3IGpRdWVy
eS5FdmVudCggb3JpZ2luYWxFdmVudCApOworICAgIH0sCisKKyAgICBzcGVjaWFsOiB7CisgICAg
ICAgIGxvYWQ6IHsKKworICAgICAgICAgICAgLy8gUHJldmVudCB0cmlnZ2VyZWQgaW1hZ2UubG9h
ZCBldmVudHMgZnJvbSBidWJibGluZyB0byB3aW5kb3cubG9hZAorICAgICAgICAgICAgbm9CdWJi
bGU6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgZm9jdXM6IHsKKworICAgICAgICAgICAgLy8g
RmlyZSBuYXRpdmUgZXZlbnQgaWYgcG9zc2libGUgc28gYmx1ci9mb2N1cyBzZXF1ZW5jZSBpcyBj
b3JyZWN0CisgICAgICAgICAgICB0cmlnZ2VyOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIHRoaXMgIT09IHNhZmVBY3RpdmVFbGVtZW50KCkgJiYgdGhpcy5mb2N1cyApIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1cygpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
IGRlbGVnYXRlVHlwZTogImZvY3VzaW4iCisgICAgICAgIH0sCisgICAgICAgIGJsdXI6IHsKKyAg
ICAgICAgICAgIHRyaWdnZXI6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlmICggdGhp
cyA9PT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSAmJiB0aGlzLmJsdXIgKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMuYmx1cigpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGRlbGVnYXRlVHlw
ZTogImZvY3Vzb3V0IgorICAgICAgICB9LAorICAgICAgICBjbGljazogeworCisgICAgICAgICAg
ICAvLyBGb3IgY2hlY2tib3gsIGZpcmUgbmF0aXZlIGV2ZW50IHNvIGNoZWNrZWQgc3RhdGUgd2ls
bCBiZSByaWdodAorICAgICAgICAgICAgdHJpZ2dlcjogZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCB0aGlzLnR5cGUgPT09ICJjaGVja2JveCIgJiYgdGhpcy5jbGljayAmJiBqUXVl
cnkubm9kZU5hbWUoIHRoaXMsICJpbnB1dCIgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5jbGljaygpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgLy8gRm9yIGNyb3NzLWJyb3dz
ZXIgY29uc2lzdGVuY3ksIGRvbid0IGZpcmUgbmF0aXZlIC5jbGljaygpIG9uIGxpbmtzCisgICAg
ICAgICAgICBfZGVmYXVsdDogZnVuY3Rpb24oIGV2ZW50ICkgeworICAgICAgICAgICAgICAgIHJl
dHVybiBqUXVlcnkubm9kZU5hbWUoIGV2ZW50LnRhcmdldCwgImEiICk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0sCisKKyAgICAgICAgYmVmb3JldW5sb2FkOiB7CisgICAgICAgICAgICBwb3N0
RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHsKKworICAgICAgICAgICAgICAgIC8vIFN1cHBv
cnQ6IEZpcmVmb3ggMjArCisgICAgICAgICAgICAgICAgLy8gRmlyZWZveCBkb2Vzbid0IGFsZXJ0
IGlmIHRoZSByZXR1cm5WYWx1ZSBmaWVsZCBpcyBub3Qgc2V0LgorICAgICAgICAgICAgICAgIGlm
ICggZXZlbnQucmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgZXZlbnQub3JpZ2luYWxFdmVudCApIHsK
KyAgICAgICAgICAgICAgICAgICAgZXZlbnQub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZSA9IGV2
ZW50LnJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9Cit9OworCitqUXVlcnkucmVtb3ZlRXZlbnQgPSBmdW5jdGlvbiggZWxlbSwgdHlwZSwg
aGFuZGxlICkgeworCisgICAgLy8gVGhpcyAiaWYiIGlzIG5lZWRlZCBmb3IgcGxhaW4gb2JqZWN0
cworICAgIGlmICggZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyICkgeworICAgICAgICBlbGVtLnJl
bW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIGhhbmRsZSApOworICAgIH0KK307CisKK2pRdWVyeS5F
dmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkgeworCisgICAgLy8gQWxsb3cgaW5zdGFudGlh
dGlvbiB3aXRob3V0IHRoZSAnbmV3JyBrZXl3b3JkCisgICAgaWYgKCAhKCB0aGlzIGluc3RhbmNl
b2YgalF1ZXJ5LkV2ZW50ICkgKSB7CisgICAgICAgIHJldHVybiBuZXcgalF1ZXJ5LkV2ZW50KCBz
cmMsIHByb3BzICk7CisgICAgfQorCisgICAgLy8gRXZlbnQgb2JqZWN0CisgICAgaWYgKCBzcmMg
JiYgc3JjLnR5cGUgKSB7CisgICAgICAgIHRoaXMub3JpZ2luYWxFdmVudCA9IHNyYzsKKyAgICAg
ICAgdGhpcy50eXBlID0gc3JjLnR5cGU7CisKKyAgICAgICAgLy8gRXZlbnRzIGJ1YmJsaW5nIHVw
IHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWQKKyAgICAgICAg
Ly8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3Qg
dmFsdWUuCisgICAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gc3JjLmRlZmF1bHRQcmV2
ZW50ZWQgfHwKKyAgICAgICAgICAgICAgICBzcmMuZGVmYXVsdFByZXZlbnRlZCA9PT0gdW5kZWZp
bmVkICYmCisKKyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBBbmRyb2lkIDw9Mi4zIG9ubHkK
KyAgICAgICAgICAgICAgICBzcmMucmV0dXJuVmFsdWUgPT09IGZhbHNlID8KKyAgICAgICAgICAg
IHJldHVyblRydWUgOgorICAgICAgICAgICAgcmV0dXJuRmFsc2U7CisKKyAgICAgICAgLy8gQ3Jl
YXRlIHRhcmdldCBwcm9wZXJ0aWVzCisgICAgICAgIC8vIFN1cHBvcnQ6IFNhZmFyaSA8PTYgLSA3
IG9ubHkKKyAgICAgICAgLy8gVGFyZ2V0IHNob3VsZCBub3QgYmUgYSB0ZXh0IG5vZGUgKCM1MDQs
ICMxMzE0MykKKyAgICAgICAgdGhpcy50YXJnZXQgPSAoIHNyYy50YXJnZXQgJiYgc3JjLnRhcmdl
dC5ub2RlVHlwZSA9PT0gMyApID8KKyAgICAgICAgICAgIHNyYy50YXJnZXQucGFyZW50Tm9kZSA6
CisgICAgICAgICAgICBzcmMudGFyZ2V0OworCisgICAgICAgIHRoaXMuY3VycmVudFRhcmdldCA9
IHNyYy5jdXJyZW50VGFyZ2V0OworICAgICAgICB0aGlzLnJlbGF0ZWRUYXJnZXQgPSBzcmMucmVs
YXRlZFRhcmdldDsKKworICAgIC8vIEV2ZW50IHR5cGUKKyAgICB9IGVsc2UgeworICAgICAgICB0
aGlzLnR5cGUgPSBzcmM7CisgICAgfQorCisgICAgLy8gUHV0IGV4cGxpY2l0bHkgcHJvdmlkZWQg
cHJvcGVydGllcyBvbnRvIHRoZSBldmVudCBvYmplY3QKKyAgICBpZiAoIHByb3BzICkgeworICAg
ICAgICBqUXVlcnkuZXh0ZW5kKCB0aGlzLCBwcm9wcyApOworICAgIH0KKworICAgIC8vIENyZWF0
ZSBhIHRpbWVzdGFtcCBpZiBpbmNvbWluZyBldmVudCBkb2Vzbid0IGhhdmUgb25lCisgICAgdGhp
cy50aW1lU3RhbXAgPSBzcmMgJiYgc3JjLnRpbWVTdGFtcCB8fCBqUXVlcnkubm93KCk7CisKKyAg
ICAvLyBNYXJrIGl0IGFzIGZpeGVkCisgICAgdGhpc1sgalF1ZXJ5LmV4cGFuZG8gXSA9IHRydWU7
Cit9OworCisvLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lm
aWVkIGJ5IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmcKKy8vIGh0dHBzOi8vd3d3Lncz
Lm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDAzMDMzMS9lY21hLXNjcmlwdC1i
aW5kaW5nLmh0bWwKK2pRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7CisgICAgY29uc3RydWN0b3I6
IGpRdWVyeS5FdmVudCwKKyAgICBpc0RlZmF1bHRQcmV2ZW50ZWQ6IHJldHVybkZhbHNlLAorICAg
IGlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSwKKyAgICBpc0ltbWVkaWF0ZVByb3Bh
Z2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsCisgICAgaXNTaW11bGF0ZWQ6IGZhbHNlLAorCisg
ICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZSA9IHRoaXMub3Jp
Z2luYWxFdmVudDsKKworICAgICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVyblRy
dWU7CisKKyAgICAgICAgaWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkgeworICAgICAgICAg
ICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICB9CisgICAgfSwKKyAgICBzdG9wUHJvcGFn
YXRpb246IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDsK
KworICAgICAgICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTsKKworICAg
ICAgICBpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7CisgICAgICAgICAgICBlLnN0b3BQ
cm9wYWdhdGlvbigpOworICAgICAgICB9CisgICAgfSwKKyAgICBzdG9wSW1tZWRpYXRlUHJvcGFn
YXRpb246IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDsK
KworICAgICAgICB0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1
ZTsKKworICAgICAgICBpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7CisgICAgICAgICAg
ICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOworICAgICAgICB9CisKKyAgICAgICAgdGhp
cy5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICB9Cit9OworCisvLyBJbmNsdWRlcyBhbGwgY29tbW9u
IGV2ZW50IHByb3BzIGluY2x1ZGluZyBLZXlFdmVudCBhbmQgTW91c2VFdmVudCBzcGVjaWZpYyBw
cm9wcworalF1ZXJ5LmVhY2goIHsKKyAgICBhbHRLZXk6IHRydWUsCisgICAgYnViYmxlczogdHJ1
ZSwKKyAgICBjYW5jZWxhYmxlOiB0cnVlLAorICAgIGNoYW5nZWRUb3VjaGVzOiB0cnVlLAorICAg
IGN0cmxLZXk6IHRydWUsCisgICAgZGV0YWlsOiB0cnVlLAorICAgIGV2ZW50UGhhc2U6IHRydWUs
CisgICAgbWV0YUtleTogdHJ1ZSwKKyAgICBwYWdlWDogdHJ1ZSwKKyAgICBwYWdlWTogdHJ1ZSwK
KyAgICBzaGlmdEtleTogdHJ1ZSwKKyAgICB2aWV3OiB0cnVlLAorICAgICJjaGFyIjogdHJ1ZSwK
KyAgICBjaGFyQ29kZTogdHJ1ZSwKKyAgICBrZXk6IHRydWUsCisgICAga2V5Q29kZTogdHJ1ZSwK
KyAgICBidXR0b246IHRydWUsCisgICAgYnV0dG9uczogdHJ1ZSwKKyAgICBjbGllbnRYOiB0cnVl
LAorICAgIGNsaWVudFk6IHRydWUsCisgICAgb2Zmc2V0WDogdHJ1ZSwKKyAgICBvZmZzZXRZOiB0
cnVlLAorICAgIHBvaW50ZXJJZDogdHJ1ZSwKKyAgICBwb2ludGVyVHlwZTogdHJ1ZSwKKyAgICBz
Y3JlZW5YOiB0cnVlLAorICAgIHNjcmVlblk6IHRydWUsCisgICAgdGFyZ2V0VG91Y2hlczogdHJ1
ZSwKKyAgICB0b0VsZW1lbnQ6IHRydWUsCisgICAgdG91Y2hlczogdHJ1ZSwKKworICAgIHdoaWNo
OiBmdW5jdGlvbiggZXZlbnQgKSB7CisgICAgICAgIHZhciBidXR0b24gPSBldmVudC5idXR0b247
CisKKyAgICAgICAgLy8gQWRkIHdoaWNoIGZvciBrZXkgZXZlbnRzCisgICAgICAgIGlmICggZXZl
bnQud2hpY2ggPT0gbnVsbCAmJiBya2V5RXZlbnQudGVzdCggZXZlbnQudHlwZSApICkgeworICAg
ICAgICAgICAgcmV0dXJuIGV2ZW50LmNoYXJDb2RlICE9IG51bGwgPyBldmVudC5jaGFyQ29kZSA6
IGV2ZW50LmtleUNvZGU7CisgICAgICAgIH0KKworICAgICAgICAvLyBBZGQgd2hpY2ggZm9yIGNs
aWNrOiAxID09PSBsZWZ0OyAyID09PSBtaWRkbGU7IDMgPT09IHJpZ2h0CisgICAgICAgIGlmICgg
IWV2ZW50LndoaWNoICYmIGJ1dHRvbiAhPT0gdW5kZWZpbmVkICYmIHJtb3VzZUV2ZW50LnRlc3Qo
IGV2ZW50LnR5cGUgKSApIHsKKyAgICAgICAgICAgIGlmICggYnV0dG9uICYgMSApIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCBi
dXR0b24gJiAyICkgeworICAgICAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoIGJ1dHRvbiAmIDQgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IDI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIGV2ZW50LndoaWNoOworICAgIH0KK30sIGpRdWVyeS5ldmVudC5hZGRQ
cm9wICk7CisKKy8vIENyZWF0ZSBtb3VzZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92
ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNrcworLy8gc28gdGhhdCBldmVudCBkZWxlZ2F0aW9u
IHdvcmtzIGluIGpRdWVyeS4KKy8vIERvIHRoZSBzYW1lIGZvciBwb2ludGVyZW50ZXIvcG9pbnRl
cmxlYXZlIGFuZCBwb2ludGVyb3Zlci9wb2ludGVyb3V0CisvLworLy8gU3VwcG9ydDogU2FmYXJp
IDcgb25seQorLy8gU2FmYXJpIHNlbmRzIG1vdXNlZW50ZXIgdG9vIG9mdGVuOyBzZWU6CisvLyBo
dHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NzAy
NTgKKy8vIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGJ1ZyAoaXQgZXhpc3RlZCBpbiBvbGRl
ciBDaHJvbWUgdmVyc2lvbnMgYXMgd2VsbCkuCitqUXVlcnkuZWFjaCggeworICAgIG1vdXNlZW50
ZXI6ICJtb3VzZW92ZXIiLAorICAgIG1vdXNlbGVhdmU6ICJtb3VzZW91dCIsCisgICAgcG9pbnRl
cmVudGVyOiAicG9pbnRlcm92ZXIiLAorICAgIHBvaW50ZXJsZWF2ZTogInBvaW50ZXJvdXQiCit9
LCBmdW5jdGlvbiggb3JpZywgZml4ICkgeworICAgIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBvcmln
IF0gPSB7CisgICAgICAgIGRlbGVnYXRlVHlwZTogZml4LAorICAgICAgICBiaW5kVHlwZTogZml4
LAorCisgICAgICAgIGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkgeworICAgICAgICAgICAgdmFy
IHJldCwKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSB0aGlzLAorICAgICAgICAgICAgICAgIHJl
bGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0LAorICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9
IGV2ZW50LmhhbmRsZU9iajsKKworICAgICAgICAgICAgLy8gRm9yIG1vdXNlZW50ZXIvbGVhdmUg
Y2FsbCB0aGUgaGFuZGxlciBpZiByZWxhdGVkIGlzIG91dHNpZGUgdGhlIHRhcmdldC4KKyAgICAg
ICAgICAgIC8vIE5COiBObyByZWxhdGVkVGFyZ2V0IGlmIHRoZSBtb3VzZSBsZWZ0L2VudGVyZWQg
dGhlIGJyb3dzZXIgd2luZG93CisgICAgICAgICAgICBpZiAoICFyZWxhdGVkIHx8ICggcmVsYXRl
ZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRlZCApICkgKSB7
CisgICAgICAgICAgICAgICAgZXZlbnQudHlwZSA9IGhhbmRsZU9iai5vcmlnVHlwZTsKKyAgICAg
ICAgICAgICAgICByZXQgPSBoYW5kbGVPYmouaGFuZGxlci5hcHBseSggdGhpcywgYXJndW1lbnRz
ICk7CisgICAgICAgICAgICAgICAgZXZlbnQudHlwZSA9IGZpeDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICB9OworfSApOworCitqUXVlcnku
Zm4uZXh0ZW5kKCB7CisKKyAgICBvbjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwg
Zm4gKSB7CisgICAgICAgIHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBm
biApOworICAgIH0sCisgICAgb25lOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBm
biApIHsKKyAgICAgICAgcmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZu
LCAxICk7CisgICAgfSwKKyAgICBvZmY6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGZuICkg
eworICAgICAgICB2YXIgaGFuZGxlT2JqLCB0eXBlOworICAgICAgICBpZiAoIHR5cGVzICYmIHR5
cGVzLnByZXZlbnREZWZhdWx0ICYmIHR5cGVzLmhhbmRsZU9iaiApIHsKKworICAgICAgICAgICAg
Ly8gKCBldmVudCApICBkaXNwYXRjaGVkIGpRdWVyeS5FdmVudAorICAgICAgICAgICAgaGFuZGxl
T2JqID0gdHlwZXMuaGFuZGxlT2JqOworICAgICAgICAgICAgalF1ZXJ5KCB0eXBlcy5kZWxlZ2F0
ZVRhcmdldCApLm9mZigKKyAgICAgICAgICAgICAgICBoYW5kbGVPYmoubmFtZXNwYWNlID8KKyAg
ICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqLm9yaWdUeXBlICsgIi4iICsgaGFuZGxlT2JqLm5h
bWVzcGFjZSA6CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iai5vcmlnVHlwZSwKKyAgICAg
ICAgICAgICAgICBoYW5kbGVPYmouc2VsZWN0b3IsCisgICAgICAgICAgICAgICAgaGFuZGxlT2Jq
LmhhbmRsZXIKKyAgICAgICAgICAgICk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIHR5cGVvZiB0eXBlcyA9PT0gIm9iamVjdCIgKSB7CisKKyAgICAg
ICAgICAgIC8vICggdHlwZXMtb2JqZWN0IFssIHNlbGVjdG9yXSApCisgICAgICAgICAgICBmb3Ig
KCB0eXBlIGluIHR5cGVzICkgeworICAgICAgICAgICAgICAgIHRoaXMub2ZmKCB0eXBlLCBzZWxl
Y3RvciwgdHlwZXNbIHR5cGUgXSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlw
ZW9mIHNlbGVjdG9yID09PSAiZnVuY3Rpb24iICkgeworCisgICAgICAgICAgICAvLyAoIHR5cGVz
IFssIGZuXSApCisgICAgICAgICAgICBmbiA9IHNlbGVjdG9yOworICAgICAgICAgICAgc2VsZWN0
b3IgPSB1bmRlZmluZWQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBmbiA9PT0gZmFsc2UgKSB7
CisgICAgICAgICAgICBmbiA9IHJldHVybkZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92
ZSggdGhpcywgdHlwZXMsIGZuLCBzZWxlY3RvciApOworICAgICAgICB9ICk7CisgICAgfQorfSAp
OworCisKK3ZhcgorCisgICAgLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqLworCisgICAgLy8g
U2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNsaW50L2lzc3Vlcy8zMjI5CisgICAgcnho
dG1sVGFnID0gLzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBh
cmFtKSgoW2Etel1bXlwvXDA+XHgyMFx0XHJcblxmXSopW14+XSopXC8+L2dpLAorCisgICAgLyog
ZXNsaW50LWVuYWJsZSAqLworCisgICAgLy8gU3VwcG9ydDogSUUgPD0xMCAtIDExLCBFZGdlIDEy
IC0gMTMKKyAgICAvLyBJbiBJRS9FZGdlIHVzaW5nIHJlZ2V4IGdyb3VwcyBoZXJlIGNhdXNlcyBz
ZXZlcmUgc2xvd2Rvd25zLgorICAgIC8vIFNlZSBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNv
bS9JRS9mZWVkYmFjay9kZXRhaWxzLzE3MzY1MTIvCisgICAgcm5vSW5uZXJodG1sID0gLzxzY3Jp
cHR8PHN0eWxlfDxsaW5rL2ksCisKKyAgICAvLyBjaGVja2VkPSJjaGVja2VkIiBvciBjaGVja2Vk
CisgICAgcmNoZWNrZWQgPSAvY2hlY2tlZFxzKig/OltePV18PVxzKi5jaGVja2VkLikvaSwKKyAg
ICByc2NyaXB0VHlwZU1hc2tlZCA9IC9edHJ1ZVwvKC4qKS8sCisgICAgcmNsZWFuU2NyaXB0ID0g
L15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nOworCitmdW5jdGlvbiBt
YW5pcHVsYXRpb25UYXJnZXQoIGVsZW0sIGNvbnRlbnQgKSB7CisgICAgaWYgKCBqUXVlcnkubm9k
ZU5hbWUoIGVsZW0sICJ0YWJsZSIgKSAmJgorICAgICAgICBqUXVlcnkubm9kZU5hbWUoIGNvbnRl
bnQubm9kZVR5cGUgIT09IDExID8gY29udGVudCA6IGNvbnRlbnQuZmlyc3RDaGlsZCwgInRyIiAp
ICkgeworCisgICAgICAgIHJldHVybiBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCAidGJvZHki
IClbIDAgXSB8fCBlbGVtOworICAgIH0KKworICAgIHJldHVybiBlbGVtOworfQorCisvLyBSZXBs
YWNlL3Jlc3RvcmUgdGhlIHR5cGUgYXR0cmlidXRlIG9mIHNjcmlwdCBlbGVtZW50cyBmb3Igc2Fm
ZSBET00gbWFuaXB1bGF0aW9uCitmdW5jdGlvbiBkaXNhYmxlU2NyaXB0KCBlbGVtICkgeworICAg
IGVsZW0udHlwZSA9ICggZWxlbS5nZXRBdHRyaWJ1dGUoICJ0eXBlIiApICE9PSBudWxsICkgKyAi
LyIgKyBlbGVtLnR5cGU7CisgICAgcmV0dXJuIGVsZW07Cit9CitmdW5jdGlvbiByZXN0b3JlU2Ny
aXB0KCBlbGVtICkgeworICAgIHZhciBtYXRjaCA9IHJzY3JpcHRUeXBlTWFza2VkLmV4ZWMoIGVs
ZW0udHlwZSApOworCisgICAgaWYgKCBtYXRjaCApIHsKKyAgICAgICAgZWxlbS50eXBlID0gbWF0
Y2hbIDEgXTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZSggInR5
cGUiICk7CisgICAgfQorCisgICAgcmV0dXJuIGVsZW07Cit9CisKK2Z1bmN0aW9uIGNsb25lQ29w
eUV2ZW50KCBzcmMsIGRlc3QgKSB7CisgICAgdmFyIGksIGwsIHR5cGUsIHBkYXRhT2xkLCBwZGF0
YUN1ciwgdWRhdGFPbGQsIHVkYXRhQ3VyLCBldmVudHM7CisKKyAgICBpZiAoIGRlc3Qubm9kZVR5
cGUgIT09IDEgKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyAxLiBDb3B5IHBy
aXZhdGUgZGF0YTogZXZlbnRzLCBoYW5kbGVycywgZXRjLgorICAgIGlmICggZGF0YVByaXYuaGFz
RGF0YSggc3JjICkgKSB7CisgICAgICAgIHBkYXRhT2xkID0gZGF0YVByaXYuYWNjZXNzKCBzcmMg
KTsKKyAgICAgICAgcGRhdGFDdXIgPSBkYXRhUHJpdi5zZXQoIGRlc3QsIHBkYXRhT2xkICk7Cisg
ICAgICAgIGV2ZW50cyA9IHBkYXRhT2xkLmV2ZW50czsKKworICAgICAgICBpZiAoIGV2ZW50cyAp
IHsKKyAgICAgICAgICAgIGRlbGV0ZSBwZGF0YUN1ci5oYW5kbGU7CisgICAgICAgICAgICBwZGF0
YUN1ci5ldmVudHMgPSB7fTsKKworICAgICAgICAgICAgZm9yICggdHlwZSBpbiBldmVudHMgKSB7
CisgICAgICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBldmVudHNbIHR5cGUgXS5sZW5ndGg7
IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIGRl
c3QsIHR5cGUsIGV2ZW50c1sgdHlwZSBdWyBpIF0gKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAyLiBDb3B5IHVzZXIgZGF0YQor
ICAgIGlmICggZGF0YVVzZXIuaGFzRGF0YSggc3JjICkgKSB7CisgICAgICAgIHVkYXRhT2xkID0g
ZGF0YVVzZXIuYWNjZXNzKCBzcmMgKTsKKyAgICAgICAgdWRhdGFDdXIgPSBqUXVlcnkuZXh0ZW5k
KCB7fSwgdWRhdGFPbGQgKTsKKworICAgICAgICBkYXRhVXNlci5zZXQoIGRlc3QsIHVkYXRhQ3Vy
ICk7CisgICAgfQorfQorCisvLyBGaXggSUUgYnVncywgc2VlIHN1cHBvcnQgdGVzdHMKK2Z1bmN0
aW9uIGZpeElucHV0KCBzcmMsIGRlc3QgKSB7CisgICAgdmFyIG5vZGVOYW1lID0gZGVzdC5ub2Rl
TmFtZS50b0xvd2VyQ2FzZSgpOworCisgICAgLy8gRmFpbHMgdG8gcGVyc2lzdCB0aGUgY2hlY2tl
ZCBzdGF0ZSBvZiBhIGNsb25lZCBjaGVja2JveCBvciByYWRpbyBidXR0b24uCisgICAgaWYgKCBu
b2RlTmFtZSA9PT0gImlucHV0IiAmJiByY2hlY2thYmxlVHlwZS50ZXN0KCBzcmMudHlwZSApICkg
eworICAgICAgICBkZXN0LmNoZWNrZWQgPSBzcmMuY2hlY2tlZDsKKworICAgIC8vIEZhaWxzIHRv
IHJldHVybiB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBkZWZhdWx0IHNlbGVjdGVkIHN0YXRl
IHdoZW4gY2xvbmluZyBvcHRpb25zCisgICAgfSBlbHNlIGlmICggbm9kZU5hbWUgPT09ICJpbnB1
dCIgfHwgbm9kZU5hbWUgPT09ICJ0ZXh0YXJlYSIgKSB7CisgICAgICAgIGRlc3QuZGVmYXVsdFZh
bHVlID0gc3JjLmRlZmF1bHRWYWx1ZTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGRvbU1hbmlwKCBj
b2xsZWN0aW9uLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApIHsKKworICAgIC8vIEZsYXR0ZW4g
YW55IG5lc3RlZCBhcnJheXMKKyAgICBhcmdzID0gY29uY2F0LmFwcGx5KCBbXSwgYXJncyApOwor
CisgICAgdmFyIGZyYWdtZW50LCBmaXJzdCwgc2NyaXB0cywgaGFzU2NyaXB0cywgbm9kZSwgZG9j
LAorICAgICAgICBpID0gMCwKKyAgICAgICAgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoLAorICAgICAg
ICBpTm9DbG9uZSA9IGwgLSAxLAorICAgICAgICB2YWx1ZSA9IGFyZ3NbIDAgXSwKKyAgICAgICAg
aXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApOworCisgICAgLy8gV2UgY2Fu
J3QgY2xvbmVOb2RlIGZyYWdtZW50cyB0aGF0IGNvbnRhaW4gY2hlY2tlZCwgaW4gV2ViS2l0Cisg
ICAgaWYgKCBpc0Z1bmN0aW9uIHx8CisgICAgICAgICAgICAoIGwgPiAxICYmIHR5cGVvZiB2YWx1
ZSA9PT0gInN0cmluZyIgJiYKKyAgICAgICAgICAgICAgICAhc3VwcG9ydC5jaGVja0Nsb25lICYm
IHJjaGVja2VkLnRlc3QoIHZhbHVlICkgKSApIHsKKyAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb24u
ZWFjaCggZnVuY3Rpb24oIGluZGV4ICkgeworICAgICAgICAgICAgdmFyIHNlbGYgPSBjb2xsZWN0
aW9uLmVxKCBpbmRleCApOworICAgICAgICAgICAgaWYgKCBpc0Z1bmN0aW9uICkgeworICAgICAg
ICAgICAgICAgIGFyZ3NbIDAgXSA9IHZhbHVlLmNhbGwoIHRoaXMsIGluZGV4LCBzZWxmLmh0bWwo
KSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZG9tTWFuaXAoIHNlbGYsIGFyZ3MsIGNh
bGxiYWNrLCBpZ25vcmVkICk7CisgICAgICAgIH0gKTsKKyAgICB9CisKKyAgICBpZiAoIGwgKSB7
CisgICAgICAgIGZyYWdtZW50ID0gYnVpbGRGcmFnbWVudCggYXJncywgY29sbGVjdGlvblsgMCBd
Lm93bmVyRG9jdW1lbnQsIGZhbHNlLCBjb2xsZWN0aW9uLCBpZ25vcmVkICk7CisgICAgICAgIGZp
cnN0ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDsKKworICAgICAgICBpZiAoIGZyYWdtZW50LmNoaWxk
Tm9kZXMubGVuZ3RoID09PSAxICkgeworICAgICAgICAgICAgZnJhZ21lbnQgPSBmaXJzdDsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIFJlcXVpcmUgZWl0aGVyIG5ldyBjb250ZW50IG9yIGFuIGlu
dGVyZXN0IGluIGlnbm9yZWQgZWxlbWVudHMgdG8gaW52b2tlIHRoZSBjYWxsYmFjaworICAgICAg
ICBpZiAoIGZpcnN0IHx8IGlnbm9yZWQgKSB7CisgICAgICAgICAgICBzY3JpcHRzID0galF1ZXJ5
Lm1hcCggZ2V0QWxsKCBmcmFnbWVudCwgInNjcmlwdCIgKSwgZGlzYWJsZVNjcmlwdCApOworICAg
ICAgICAgICAgaGFzU2NyaXB0cyA9IHNjcmlwdHMubGVuZ3RoOworCisgICAgICAgICAgICAvLyBV
c2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtCisgICAgICAgICAgICAv
LyBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXAKKyAgICAgICAgICAg
IC8vIGJlaW5nIGVtcHRpZWQgaW5jb3JyZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICgjODA3
MCkuCisgICAgICAgICAgICBmb3IgKCA7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAg
bm9kZSA9IGZyYWdtZW50OworCisgICAgICAgICAgICAgICAgaWYgKCBpICE9PSBpTm9DbG9uZSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGpRdWVyeS5jbG9uZSggbm9kZSwgdHJ1ZSwg
dHJ1ZSApOworCisgICAgICAgICAgICAgICAgICAgIC8vIEtlZXAgcmVmZXJlbmNlcyB0byBjbG9u
ZWQgc2NyaXB0cyBmb3IgbGF0ZXIgcmVzdG9yYXRpb24KKyAgICAgICAgICAgICAgICAgICAgaWYg
KCBoYXNTY3JpcHRzICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBB
bmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXQK
KyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5tZXJnZSggc2NyaXB0cywgZ2V0QWxsKCBu
b2RlLCAic2NyaXB0IiApICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKCBjb2xsZWN0aW9uWyBpIF0sIG5v
ZGUsIGkgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCBoYXNTY3JpcHRzICkg
eworICAgICAgICAgICAgICAgIGRvYyA9IHNjcmlwdHNbIHNjcmlwdHMubGVuZ3RoIC0gMSBdLm93
bmVyRG9jdW1lbnQ7CisKKyAgICAgICAgICAgICAgICAvLyBSZWVuYWJsZSBzY3JpcHRzCisgICAg
ICAgICAgICAgICAgalF1ZXJ5Lm1hcCggc2NyaXB0cywgcmVzdG9yZVNjcmlwdCApOworCisgICAg
ICAgICAgICAgICAgLy8gRXZhbHVhdGUgZXhlY3V0YWJsZSBzY3JpcHRzIG9uIGZpcnN0IGRvY3Vt
ZW50IGluc2VydGlvbgorICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgaGFzU2NyaXB0
czsgaSsrICkgeworICAgICAgICAgICAgICAgICAgICBub2RlID0gc2NyaXB0c1sgaSBdOworICAg
ICAgICAgICAgICAgICAgICBpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIG5vZGUudHlwZSB8fCAiIiAp
ICYmCisgICAgICAgICAgICAgICAgICAgICAgICAhZGF0YVByaXYuYWNjZXNzKCBub2RlLCAiZ2xv
YmFsRXZhbCIgKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmNvbnRhaW5zKCBk
b2MsIG5vZGUgKSApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBub2RlLnNyYyAp
IHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wdGlvbmFsIEFKQVggZGVwZW5k
ZW5jeSwgYnV0IHdvbid0IHJ1biBzY3JpcHRzIGlmIG5vdCBwcmVzZW50CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuX2V2YWxVcmwgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5fZXZhbFVybCggbm9kZS5zcmMgKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIERPTUV2YWwoIG5vZGUudGV4dENvbnRlbnQucmVwbGFj
ZSggcmNsZWFuU2NyaXB0LCAiIiApLCBkb2MgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBjb2xsZWN0aW9uOworfQorCitmdW5jdGlv
biByZW1vdmUoIGVsZW0sIHNlbGVjdG9yLCBrZWVwRGF0YSApIHsKKyAgICB2YXIgbm9kZSwKKyAg
ICAgICAgbm9kZXMgPSBzZWxlY3RvciA/IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBlbGVtICkg
OiBlbGVtLAorICAgICAgICBpID0gMDsKKworICAgIGZvciAoIDsgKCBub2RlID0gbm9kZXNbIGkg
XSApICE9IG51bGw7IGkrKyApIHsKKyAgICAgICAgaWYgKCAha2VlcERhdGEgJiYgbm9kZS5ub2Rl
VHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggbm9k
ZSApICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIG5vZGUucGFyZW50Tm9kZSApIHsKKyAg
ICAgICAgICAgIGlmICgga2VlcERhdGEgJiYgalF1ZXJ5LmNvbnRhaW5zKCBub2RlLm93bmVyRG9j
dW1lbnQsIG5vZGUgKSApIHsKKyAgICAgICAgICAgICAgICBzZXRHbG9iYWxFdmFsKCBnZXRBbGwo
IG5vZGUsICJzY3JpcHQiICkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5vZGUucGFy
ZW50Tm9kZS5yZW1vdmVDaGlsZCggbm9kZSApOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIGVsZW07Cit9CisKK2pRdWVyeS5leHRlbmQoIHsKKyAgICBodG1sUHJlZmlsdGVyOiBmdW5j
dGlvbiggaHRtbCApIHsKKyAgICAgICAgcmV0dXJuIGh0bWwucmVwbGFjZSggcnhodG1sVGFnLCAi
PCQxPjwvJDI+IiApOworICAgIH0sCisKKyAgICBjbG9uZTogZnVuY3Rpb24oIGVsZW0sIGRhdGFB
bmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkgeworICAgICAgICB2YXIgaSwgbCwgc3JjRWxl
bWVudHMsIGRlc3RFbGVtZW50cywKKyAgICAgICAgICAgIGNsb25lID0gZWxlbS5jbG9uZU5vZGUo
IHRydWUgKSwKKyAgICAgICAgICAgIGluUGFnZSA9IGpRdWVyeS5jb250YWlucyggZWxlbS5vd25l
ckRvY3VtZW50LCBlbGVtICk7CisKKyAgICAgICAgLy8gRml4IElFIGNsb25pbmcgaXNzdWVzCisg
ICAgICAgIGlmICggIXN1cHBvcnQubm9DbG9uZUNoZWNrZWQgJiYgKCBlbGVtLm5vZGVUeXBlID09
PSAxIHx8IGVsZW0ubm9kZVR5cGUgPT09IDExICkgJiYKKyAgICAgICAgICAgICAgICAhalF1ZXJ5
LmlzWE1MRG9jKCBlbGVtICkgKSB7CisKKyAgICAgICAgICAgIC8vIFdlIGVzY2hldyBTaXp6bGUg
aGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29uczogaHR0cHM6Ly9qc3BlcmYuY29tL2dldGFsbC12
cy1zaXp6bGUvMgorICAgICAgICAgICAgZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSApOwor
ICAgICAgICAgICAgc3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTsKKworICAgICAgICAgICAg
Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CisgICAg
ICAgICAgICAgICAgZml4SW5wdXQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBd
ICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBDb3B5IHRoZSBldmVu
dHMgZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlIGNsb25lCisgICAgICAgIGlmICggZGF0YUFuZEV2
ZW50cyApIHsKKyAgICAgICAgICAgIGlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7CisgICAgICAg
ICAgICAgICAgc3JjRWxlbWVudHMgPSBzcmNFbGVtZW50cyB8fCBnZXRBbGwoIGVsZW0gKTsKKyAg
ICAgICAgICAgICAgICBkZXN0RWxlbWVudHMgPSBkZXN0RWxlbWVudHMgfHwgZ2V0QWxsKCBjbG9u
ZSApOworCisgICAgICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5n
dGg7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgIGNsb25lQ29weUV2ZW50KCBz
cmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY2xvbmVDb3B5RXZlbnQoIGVs
ZW0sIGNsb25lICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBQcmVz
ZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5CisgICAgICAgIGRlc3RFbGVtZW50cyA9IGdl
dEFsbCggY2xvbmUsICJzY3JpcHQiICk7CisgICAgICAgIGlmICggZGVzdEVsZW1lbnRzLmxlbmd0
aCA+IDAgKSB7CisgICAgICAgICAgICBzZXRHbG9iYWxFdmFsKCBkZXN0RWxlbWVudHMsICFpblBh
Z2UgJiYgZ2V0QWxsKCBlbGVtLCAic2NyaXB0IiApICk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBSZXR1cm4gdGhlIGNsb25lZCBzZXQKKyAgICAgICAgcmV0dXJuIGNsb25lOworICAgIH0sCisK
KyAgICBjbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcyApIHsKKyAgICAgICAgdmFyIGRhdGEsIGVs
ZW0sIHR5cGUsCisgICAgICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWwsCisg
ICAgICAgICAgICBpID0gMDsKKworICAgICAgICBmb3IgKCA7ICggZWxlbSA9IGVsZW1zWyBpIF0g
KSAhPT0gdW5kZWZpbmVkOyBpKysgKSB7CisgICAgICAgICAgICBpZiAoIGFjY2VwdERhdGEoIGVs
ZW0gKSApIHsKKyAgICAgICAgICAgICAgICBpZiAoICggZGF0YSA9IGVsZW1bIGRhdGFQcml2LmV4
cGFuZG8gXSApICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEuZXZlbnRzICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdHlwZSBpbiBkYXRhLmV2ZW50cyApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNwZWNpYWxbIHR5cGUgXSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlw
ZSApOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHNob3J0Y3V0
IHRvIGF2b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZGF0YS5oYW5kbGUgKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBDaHJvbWUgPD0z
NSAtIDQ1KworICAgICAgICAgICAgICAgICAgICAvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQg
b2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmUKKyAgICAgICAgICAgICAgICAgICAgZWxl
bVsgZGF0YVByaXYuZXhwYW5kbyBdID0gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAoIGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSApIHsKKworICAgICAg
ICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1KworICAgICAgICAgICAg
ICAgICAgICAvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUg
RGF0YSNyZW1vdmUKKyAgICAgICAgICAgICAgICAgICAgZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBd
ID0gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KK30gKTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworICAgIGRldGFjaDogZnVuY3Rp
b24oIHNlbGVjdG9yICkgeworICAgICAgICByZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3Rvciwg
dHJ1ZSApOworICAgIH0sCisKKyAgICByZW1vdmU6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAg
ICAgICAgcmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IgKTsKKyAgICB9LAorCisgICAgdGV4
dDogZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICByZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5j
dGlvbiggdmFsdWUgKSB7CisgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/
CisgICAgICAgICAgICAgICAgalF1ZXJ5LnRleHQoIHRoaXMgKSA6CisgICAgICAgICAgICAgICAg
dGhpcy5lbXB0eSgpLmVhY2goIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
IHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2Rl
VHlwZSA9PT0gOSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dENvbnRlbnQg
PSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gKTsKKyAg
ICAgICAgfSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTsKKyAgICB9LAorCisgICAg
YXBwZW5kOiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1
bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgaWYgKCB0aGlzLm5vZGVUeXBl
ID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7
CisgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywg
ZWxlbSApOworICAgICAgICAgICAgICAgIHRhcmdldC5hcHBlbmRDaGlsZCggZWxlbSApOworICAg
ICAgICAgICAgfQorICAgICAgICB9ICk7CisgICAgfSwKKworICAgIHByZXBlbmQ6IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24o
IGVsZW0gKSB7CisgICAgICAgICAgICBpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5u
b2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHsKKyAgICAgICAgICAgICAg
ICB2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7CisgICAgICAg
ICAgICAgICAgdGFyZ2V0Lmluc2VydEJlZm9yZSggZWxlbSwgdGFyZ2V0LmZpcnN0Q2hpbGQgKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOworICAgIH0sCisKKyAgICBiZWZvcmU6IGZ1bmN0
aW9uKCkgeworICAgICAgICByZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rp
b24oIGVsZW0gKSB7CisgICAgICAgICAgICBpZiAoIHRoaXMucGFyZW50Tm9kZSApIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzICk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAgICB9LAorCisgICAgYWZ0ZXI6IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24o
IGVsZW0gKSB7CisgICAgICAgICAgICBpZiAoIHRoaXMucGFyZW50Tm9kZSApIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLm5leHRTaWJs
aW5nICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAgICB9LAorCisgICAgZW1wdHk6
IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZWxlbSwKKyAgICAgICAgICAgIGkgPSAwOworCisg
ICAgICAgIGZvciAoIDsgKCBlbGVtID0gdGhpc1sgaSBdICkgIT0gbnVsbDsgaSsrICkgeworICAg
ICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgeworCisgICAgICAgICAgICAgICAg
Ly8gUHJldmVudCBtZW1vcnkgbGVha3MKKyAgICAgICAgICAgICAgICBqUXVlcnkuY2xlYW5EYXRh
KCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTsKKworICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBh
bnkgcmVtYWluaW5nIG5vZGVzCisgICAgICAgICAgICAgICAgZWxlbS50ZXh0Q29udGVudCA9ICIi
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
fSwKKworICAgIGNsb25lOiBmdW5jdGlvbiggZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVu
dHMgKSB7CisgICAgICAgIGRhdGFBbmRFdmVudHMgPSBkYXRhQW5kRXZlbnRzID09IG51bGwgPyBm
YWxzZSA6IGRhdGFBbmRFdmVudHM7CisgICAgICAgIGRlZXBEYXRhQW5kRXZlbnRzID0gZGVlcERh
dGFBbmRFdmVudHMgPT0gbnVsbCA/IGRhdGFBbmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2ZW50czsK
KworICAgICAgICByZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcmV0
dXJuIGpRdWVyeS5jbG9uZSggdGhpcywgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMg
KTsKKyAgICAgICAgfSApOworICAgIH0sCisKKyAgICBodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7
CisgICAgICAgIHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAg
ICAgICAgIHZhciBlbGVtID0gdGhpc1sgMCBdIHx8IHt9LAorICAgICAgICAgICAgICAgIGkgPSAw
LAorICAgICAgICAgICAgICAgIGwgPSB0aGlzLmxlbmd0aDsKKworICAgICAgICAgICAgaWYgKCB2
YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVsZW0uaW5uZXJIVE1MOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBTZWUgaWYgd2UgY2FuIHRha2UgYSBzaG9ydGN1dCBhbmQganVzdCB1c2UgaW5uZXJIVE1M
CisgICAgICAgICAgICBpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgJiYgIXJub0lubmVy
aHRtbC50ZXN0KCB2YWx1ZSApICYmCisgICAgICAgICAgICAgICAgIXdyYXBNYXBbICggcnRhZ05h
bWUuZXhlYyggdmFsdWUgKSB8fCBbICIiLCAiIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpIF0gKSB7
CisKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGpRdWVyeS5odG1sUHJlZmlsdGVyKCB2YWx1ZSAp
OworCisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICggOyBp
IDwgbDsgaSsrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IHRoaXNbIGkgXSB8
fCB7fTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMg
YW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVs
ZW0ubm9kZVR5cGUgPT09IDEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbS5pbm5lckhUTUwgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGVsZW0gPSAw
OworCisgICAgICAgICAgICAgICAgLy8gSWYgdXNpbmcgaW5uZXJIVE1MIHRocm93cyBhbiBleGNl
cHRpb24sIHVzZSB0aGUgZmFsbGJhY2sgbWV0aG9kCisgICAgICAgICAgICAgICAgfSBjYXRjaCAo
IGUgKSB7fQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGVsZW0gKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTsKKyAgICB9LAorCisg
ICAgcmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaWdub3JlZCA9IFtdOwor
CisgICAgICAgIC8vIE1ha2UgdGhlIGNoYW5nZXMsIHJlcGxhY2luZyBlYWNoIG5vbi1pZ25vcmVk
IGNvbnRleHQgZWxlbWVudCB3aXRoIHRoZSBuZXcgY29udGVudAorICAgICAgICByZXR1cm4gZG9t
TWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICB2
YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlOworCisgICAgICAgICAgICBpZiAoIGpRdWVyeS5p
bkFycmF5KCB0aGlzLCBpZ25vcmVkICkgPCAwICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5j
bGVhbkRhdGEoIGdldEFsbCggdGhpcyApICk7CisgICAgICAgICAgICAgICAgaWYgKCBwYXJlbnQg
KSB7CisgICAgICAgICAgICAgICAgICAgIHBhcmVudC5yZXBsYWNlQ2hpbGQoIGVsZW0sIHRoaXMg
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgLy8gRm9yY2Ug
Y2FsbGJhY2sgaW52b2NhdGlvbgorICAgICAgICB9LCBpZ25vcmVkICk7CisgICAgfQorfSApOwor
CitqUXVlcnkuZWFjaCggeworICAgIGFwcGVuZFRvOiAiYXBwZW5kIiwKKyAgICBwcmVwZW5kVG86
ICJwcmVwZW5kIiwKKyAgICBpbnNlcnRCZWZvcmU6ICJiZWZvcmUiLAorICAgIGluc2VydEFmdGVy
OiAiYWZ0ZXIiLAorICAgIHJlcGxhY2VBbGw6ICJyZXBsYWNlV2l0aCIKK30sIGZ1bmN0aW9uKCBu
YW1lLCBvcmlnaW5hbCApIHsKKyAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxl
Y3RvciApIHsKKyAgICAgICAgdmFyIGVsZW1zLAorICAgICAgICAgICAgcmV0ID0gW10sCisgICAg
ICAgICAgICBpbnNlcnQgPSBqUXVlcnkoIHNlbGVjdG9yICksCisgICAgICAgICAgICBsYXN0ID0g
aW5zZXJ0Lmxlbmd0aCAtIDEsCisgICAgICAgICAgICBpID0gMDsKKworICAgICAgICBmb3IgKCA7
IGkgPD0gbGFzdDsgaSsrICkgeworICAgICAgICAgICAgZWxlbXMgPSBpID09PSBsYXN0ID8gdGhp
cyA6IHRoaXMuY2xvbmUoIHRydWUgKTsKKyAgICAgICAgICAgIGpRdWVyeSggaW5zZXJ0WyBpIF0g
KVsgb3JpZ2luYWwgXSggZWxlbXMgKTsKKworICAgICAgICAgICAgLy8gU3VwcG9ydDogQW5kcm9p
ZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5CisgICAgICAgICAgICAvLyAuZ2V0KCkgYmVj
YXVzZSBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0Cisg
ICAgICAgICAgICBwdXNoLmFwcGx5KCByZXQsIGVsZW1zLmdldCgpICk7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCApOworICAgIH07Cit9ICk7Cit2YXIg
cm1hcmdpbiA9ICggL15tYXJnaW4vICk7CisKK3ZhciBybnVtbm9ucHggPSBuZXcgUmVnRXhwKCAi
XigiICsgcG51bSArICIpKD8hcHgpW2EteiVdKyQiLCAiaSIgKTsKKwordmFyIGdldFN0eWxlcyA9
IGZ1bmN0aW9uKCBlbGVtICkgeworCisgICAgICAgIC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seSwg
RmlyZWZveCA8PTMwICgjMTUwOTgsICMxNDE1MCkKKyAgICAgICAgLy8gSUUgdGhyb3dzIG9uIGVs
ZW1lbnRzIGNyZWF0ZWQgaW4gcG9wdXBzCisgICAgICAgIC8vIEZGIG1lYW53aGlsZSB0aHJvd3Mg
b24gZnJhbWUgZWxlbWVudHMgdGhyb3VnaCAiZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSIK
KyAgICAgICAgdmFyIHZpZXcgPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7CisKKyAg
ICAgICAgaWYgKCAhdmlldyB8fCAhdmlldy5vcGVuZXIgKSB7CisgICAgICAgICAgICB2aWV3ID0g
d2luZG93OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHZpZXcuZ2V0Q29tcHV0ZWRTdHls
ZSggZWxlbSApOworICAgIH07CisKKworCisoIGZ1bmN0aW9uKCkgeworCisgICAgLy8gRXhlY3V0
aW5nIGJvdGggcGl4ZWxQb3NpdGlvbiAmIGJveFNpemluZ1JlbGlhYmxlIHRlc3RzIHJlcXVpcmUg
b25seSBvbmUgbGF5b3V0CisgICAgLy8gc28gdGhleSdyZSBleGVjdXRlZCBhdCB0aGUgc2FtZSB0
aW1lIHRvIHNhdmUgdGhlIHNlY29uZCBjb21wdXRhdGlvbi4KKyAgICBmdW5jdGlvbiBjb21wdXRl
U3R5bGVUZXN0cygpIHsKKworICAgICAgICAvLyBUaGlzIGlzIGEgc2luZ2xldG9uLCB3ZSBuZWVk
IHRvIGV4ZWN1dGUgaXQgb25seSBvbmNlCisgICAgICAgIGlmICggIWRpdiApIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGRpdi5zdHlsZS5jc3NUZXh0ID0KKyAg
ICAgICAgICAgICJib3gtc2l6aW5nOmJvcmRlci1ib3g7IiArCisgICAgICAgICAgICAicG9zaXRp
b246cmVsYXRpdmU7ZGlzcGxheTpibG9jazsiICsKKyAgICAgICAgICAgICJtYXJnaW46YXV0bzti
b3JkZXI6MXB4O3BhZGRpbmc6MXB4OyIgKworICAgICAgICAgICAgInRvcDoxJTt3aWR0aDo1MCUi
OworICAgICAgICBkaXYuaW5uZXJIVE1MID0gIiI7CisgICAgICAgIGRvY3VtZW50RWxlbWVudC5h
cHBlbmRDaGlsZCggY29udGFpbmVyICk7CisKKyAgICAgICAgdmFyIGRpdlN0eWxlID0gd2luZG93
LmdldENvbXB1dGVkU3R5bGUoIGRpdiApOworICAgICAgICBwaXhlbFBvc2l0aW9uVmFsID0gZGl2
U3R5bGUudG9wICE9PSAiMSUiOworCisgICAgICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0g
NC4zIG9ubHksIEZpcmVmb3ggPD0zIC0gNDQKKyAgICAgICAgcmVsaWFibGVNYXJnaW5MZWZ0VmFs
ID0gZGl2U3R5bGUubWFyZ2luTGVmdCA9PT0gIjJweCI7CisgICAgICAgIGJveFNpemluZ1JlbGlh
YmxlVmFsID0gZGl2U3R5bGUud2lkdGggPT09ICI0cHgiOworCisgICAgICAgIC8vIFN1cHBvcnQ6
IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHkKKyAgICAgICAgLy8gU29tZSBzdHlsZXMgY29tZSBiYWNr
IHdpdGggcGVyY2VudGFnZSB2YWx1ZXMsIGV2ZW4gdGhvdWdoIHRoZXkgc2hvdWxkbid0CisgICAg
ICAgIGRpdi5zdHlsZS5tYXJnaW5SaWdodCA9ICI1MCUiOworICAgICAgICBwaXhlbE1hcmdpblJp
Z2h0VmFsID0gZGl2U3R5bGUubWFyZ2luUmlnaHQgPT09ICI0cHgiOworCisgICAgICAgIGRvY3Vt
ZW50RWxlbWVudC5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7CisKKyAgICAgICAgLy8gTnVsbGlm
eSB0aGUgZGl2IHNvIGl0IHdvdWxkbid0IGJlIHN0b3JlZCBpbiB0aGUgbWVtb3J5IGFuZAorICAg
ICAgICAvLyBpdCB3aWxsIGFsc28gYmUgYSBzaWduIHRoYXQgY2hlY2tzIGFscmVhZHkgcGVyZm9y
bWVkCisgICAgICAgIGRpdiA9IG51bGw7CisgICAgfQorCisgICAgdmFyIHBpeGVsUG9zaXRpb25W
YWwsIGJveFNpemluZ1JlbGlhYmxlVmFsLCBwaXhlbE1hcmdpblJpZ2h0VmFsLCByZWxpYWJsZU1h
cmdpbkxlZnRWYWwsCisgICAgICAgIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ICJkaXYiICksCisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICk7
CisKKyAgICAvLyBGaW5pc2ggZWFybHkgaW4gbGltaXRlZCAobm9uLWJyb3dzZXIpIGVudmlyb25t
ZW50cworICAgIGlmICggIWRpdi5zdHlsZSApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHkKKyAgICAvLyBTdHlsZSBvZiBjbG9uZWQg
ZWxlbWVudCBhZmZlY3RzIHNvdXJjZSBlbGVtZW50IGNsb25lZCAoIzg5MDgpCisgICAgZGl2LnN0
eWxlLmJhY2tncm91bmRDbGlwID0gImNvbnRlbnQtYm94IjsKKyAgICBkaXYuY2xvbmVOb2RlKCB0
cnVlICkuc3R5bGUuYmFja2dyb3VuZENsaXAgPSAiIjsKKyAgICBzdXBwb3J0LmNsZWFyQ2xvbmVT
dHlsZSA9IGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9PT0gImNvbnRlbnQtYm94IjsKKworICAg
IGNvbnRhaW5lci5zdHlsZS5jc3NUZXh0ID0gImJvcmRlcjowO3dpZHRoOjhweDtoZWlnaHQ6MDt0
b3A6MDtsZWZ0Oi05OTk5cHg7IiArCisgICAgICAgICJwYWRkaW5nOjA7bWFyZ2luLXRvcDoxcHg7
cG9zaXRpb246YWJzb2x1dGUiOworICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCggZGl2ICk7CisK
KyAgICBqUXVlcnkuZXh0ZW5kKCBzdXBwb3J0LCB7CisgICAgICAgIHBpeGVsUG9zaXRpb246IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgY29tcHV0ZVN0eWxlVGVzdHMoKTsKKyAgICAgICAgICAg
IHJldHVybiBwaXhlbFBvc2l0aW9uVmFsOworICAgICAgICB9LAorICAgICAgICBib3hTaXppbmdS
ZWxpYWJsZTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBjb21wdXRlU3R5bGVUZXN0cygpOwor
ICAgICAgICAgICAgcmV0dXJuIGJveFNpemluZ1JlbGlhYmxlVmFsOworICAgICAgICB9LAorICAg
ICAgICBwaXhlbE1hcmdpblJpZ2h0OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGNvbXB1dGVT
dHlsZVRlc3RzKCk7CisgICAgICAgICAgICByZXR1cm4gcGl4ZWxNYXJnaW5SaWdodFZhbDsKKyAg
ICAgICAgfSwKKyAgICAgICAgcmVsaWFibGVNYXJnaW5MZWZ0OiBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgIGNvbXB1dGVTdHlsZVRlc3RzKCk7CisgICAgICAgICAgICByZXR1cm4gcmVsaWFibGVN
YXJnaW5MZWZ0VmFsOworICAgICAgICB9CisgICAgfSApOworfSApKCk7CisKKworZnVuY3Rpb24g
Y3VyQ1NTKCBlbGVtLCBuYW1lLCBjb21wdXRlZCApIHsKKyAgICB2YXIgd2lkdGgsIG1pbldpZHRo
LCBtYXhXaWR0aCwgcmV0LAorICAgICAgICBzdHlsZSA9IGVsZW0uc3R5bGU7CisKKyAgICBjb21w
dXRlZCA9IGNvbXB1dGVkIHx8IGdldFN0eWxlcyggZWxlbSApOworCisgICAgLy8gU3VwcG9ydDog
SUUgPD05IG9ubHkKKyAgICAvLyBnZXRQcm9wZXJ0eVZhbHVlIGlzIG9ubHkgbmVlZGVkIGZvciAu
Y3NzKCdmaWx0ZXInKSAoIzEyNTM3KQorICAgIGlmICggY29tcHV0ZWQgKSB7CisgICAgICAgIHJl
dCA9IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoIG5hbWUgKSB8fCBjb21wdXRlZFsgbmFtZSBd
OworCisgICAgICAgIGlmICggcmV0ID09PSAiIiAmJiAhalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93
bmVyRG9jdW1lbnQsIGVsZW0gKSApIHsKKyAgICAgICAgICAgIHJldCA9IGpRdWVyeS5zdHlsZSgg
ZWxlbSwgbmFtZSApOworICAgICAgICB9CisKKyAgICAgICAgLy8gQSB0cmlidXRlIHRvIHRoZSAi
YXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkcyIKKyAgICAgICAgLy8gQW5kcm9pZCBCcm93c2Vy
IHJldHVybnMgcGVyY2VudGFnZSBmb3Igc29tZSB2YWx1ZXMsCisgICAgICAgIC8vIGJ1dCB3aWR0
aCBzZWVtcyB0byBiZSByZWxpYWJseSBwaXhlbHMuCisgICAgICAgIC8vIFRoaXMgaXMgYWdhaW5z
dCB0aGUgQ1NTT00gZHJhZnQgc3BlYzoKKyAgICAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cu
b3JnL2Nzc29tLyNyZXNvbHZlZC12YWx1ZXMKKyAgICAgICAgaWYgKCAhc3VwcG9ydC5waXhlbE1h
cmdpblJpZ2h0KCkgJiYgcm51bW5vbnB4LnRlc3QoIHJldCApICYmIHJtYXJnaW4udGVzdCggbmFt
ZSApICkgeworCisgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGUgb3JpZ2luYWwgdmFsdWVzCisg
ICAgICAgICAgICB3aWR0aCA9IHN0eWxlLndpZHRoOworICAgICAgICAgICAgbWluV2lkdGggPSBz
dHlsZS5taW5XaWR0aDsKKyAgICAgICAgICAgIG1heFdpZHRoID0gc3R5bGUubWF4V2lkdGg7CisK
KyAgICAgICAgICAgIC8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2
YWx1ZSBvdXQKKyAgICAgICAgICAgIHN0eWxlLm1pbldpZHRoID0gc3R5bGUubWF4V2lkdGggPSBz
dHlsZS53aWR0aCA9IHJldDsKKyAgICAgICAgICAgIHJldCA9IGNvbXB1dGVkLndpZHRoOworCisg
ICAgICAgICAgICAvLyBSZXZlcnQgdGhlIGNoYW5nZWQgdmFsdWVzCisgICAgICAgICAgICBzdHls
ZS53aWR0aCA9IHdpZHRoOworICAgICAgICAgICAgc3R5bGUubWluV2lkdGggPSBtaW5XaWR0aDsK
KyAgICAgICAgICAgIHN0eWxlLm1heFdpZHRoID0gbWF4V2lkdGg7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gcmV0ICE9PSB1bmRlZmluZWQgPworCisgICAgICAgIC8vIFN1cHBvcnQ6
IElFIDw9OSAtIDExIG9ubHkKKyAgICAgICAgLy8gSUUgcmV0dXJucyB6SW5kZXggdmFsdWUgYXMg
YW4gaW50ZWdlci4KKyAgICAgICAgcmV0ICsgIiIgOgorICAgICAgICByZXQ7Cit9CisKKworZnVu
Y3Rpb24gYWRkR2V0SG9va0lmKCBjb25kaXRpb25GbiwgaG9va0ZuICkgeworCisgICAgLy8gRGVm
aW5lIHRoZSBob29rLCB3ZSdsbCBjaGVjayBvbiB0aGUgZmlyc3QgcnVuIGlmIGl0J3MgcmVhbGx5
IG5lZWRlZC4KKyAgICByZXR1cm4geworICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgaWYgKCBjb25kaXRpb25GbigpICkgeworCisgICAgICAgICAgICAgICAgLy8gSG9vayBu
b3QgbmVlZGVkIChvciBpdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgaXQgZHVlCisgICAgICAgICAg
ICAgICAgLy8gdG8gbWlzc2luZyBkZXBlbmRlbmN5KSwgcmVtb3ZlIGl0LgorICAgICAgICAgICAg
ICAgIGRlbGV0ZSB0aGlzLmdldDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIEhvb2sgbmVlZGVkOyByZWRlZmluZSBpdCBzbyB0aGF0IHRo
ZSBzdXBwb3J0IHRlc3QgaXMgbm90IGV4ZWN1dGVkIGFnYWluLgorICAgICAgICAgICAgcmV0dXJu
ICggdGhpcy5nZXQgPSBob29rRm4gKS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7CisgICAgICAg
IH0KKyAgICB9OworfQorCisKK3ZhcgorCisgICAgLy8gU3dhcHBhYmxlIGlmIGRpc3BsYXkgaXMg
bm9uZSBvciBzdGFydHMgd2l0aCB0YWJsZQorICAgIC8vIGV4Y2VwdCAidGFibGUiLCAidGFibGUt
Y2VsbCIsIG9yICJ0YWJsZS1jYXB0aW9uIgorICAgIC8vIFNlZSBoZXJlIGZvciBkaXNwbGF5IHZh
bHVlczogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MvZGlzcGxh
eQorICAgIHJkaXNwbGF5c3dhcCA9IC9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLywKKyAgICBj
c3NTaG93ID0geyBwb3NpdGlvbjogImFic29sdXRlIiwgdmlzaWJpbGl0eTogImhpZGRlbiIsIGRp
c3BsYXk6ICJibG9jayIgfSwKKyAgICBjc3NOb3JtYWxUcmFuc2Zvcm0gPSB7CisgICAgICAgIGxl
dHRlclNwYWNpbmc6ICIwIiwKKyAgICAgICAgZm9udFdlaWdodDogIjQwMCIKKyAgICB9LAorCisg
ICAgY3NzUHJlZml4ZXMgPSBbICJXZWJraXQiLCAiTW96IiwgIm1zIiBdLAorICAgIGVtcHR5U3R5
bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApLnN0eWxlOworCisvLyBSZXR1cm4g
YSBjc3MgcHJvcGVydHkgbWFwcGVkIHRvIGEgcG90ZW50aWFsbHkgdmVuZG9yIHByZWZpeGVkIHBy
b3BlcnR5CitmdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHsKKworICAgIC8vIFNob3J0
Y3V0IGZvciBuYW1lcyB0aGF0IGFyZSBub3QgdmVuZG9yIHByZWZpeGVkCisgICAgaWYgKCBuYW1l
IGluIGVtcHR5U3R5bGUgKSB7CisgICAgICAgIHJldHVybiBuYW1lOworICAgIH0KKworICAgIC8v
IENoZWNrIGZvciB2ZW5kb3IgcHJlZml4ZWQgbmFtZXMKKyAgICB2YXIgY2FwTmFtZSA9IG5hbWVb
IDAgXS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSggMSApLAorICAgICAgICBpID0gY3NzUHJl
Zml4ZXMubGVuZ3RoOworCisgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgIG5hbWUgPSBjc3NQ
cmVmaXhlc1sgaSBdICsgY2FwTmFtZTsKKyAgICAgICAgaWYgKCBuYW1lIGluIGVtcHR5U3R5bGUg
KSB7CisgICAgICAgICAgICByZXR1cm4gbmFtZTsKKyAgICAgICAgfQorICAgIH0KK30KKworZnVu
Y3Rpb24gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApIHsKKworICAg
IC8vIEFueSByZWxhdGl2ZSAoKy8tKSB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW4KKyAgICAvLyBu
b3JtYWxpemVkIGF0IHRoaXMgcG9pbnQKKyAgICB2YXIgbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYygg
dmFsdWUgKTsKKyAgICByZXR1cm4gbWF0Y2hlcyA/CisKKyAgICAgICAgLy8gR3VhcmQgYWdhaW5z
dCB1bmRlZmluZWQgInN1YnRyYWN0IiwgZS5nLiwgd2hlbiB1c2VkIGFzIGluIGNzc0hvb2tzCisg
ICAgICAgIE1hdGgubWF4KCAwLCBtYXRjaGVzWyAyIF0gLSAoIHN1YnRyYWN0IHx8IDAgKSApICsg
KCBtYXRjaGVzWyAzIF0gfHwgInB4IiApIDoKKyAgICAgICAgdmFsdWU7Cit9CisKK2Z1bmN0aW9u
IGF1Z21lbnRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSwgaXNCb3JkZXJCb3gsIHN0
eWxlcyApIHsKKyAgICB2YXIgaSwKKyAgICAgICAgdmFsID0gMDsKKworICAgIC8vIElmIHdlIGFs
cmVhZHkgaGF2ZSB0aGUgcmlnaHQgbWVhc3VyZW1lbnQsIGF2b2lkIGF1Z21lbnRhdGlvbgorICAg
IGlmICggZXh0cmEgPT09ICggaXNCb3JkZXJCb3ggPyAiYm9yZGVyIiA6ICJjb250ZW50IiApICkg
eworICAgICAgICBpID0gNDsKKworICAgIC8vIE90aGVyd2lzZSBpbml0aWFsaXplIGZvciBob3Jp
em9udGFsIG9yIHZlcnRpY2FsIHByb3BlcnRpZXMKKyAgICB9IGVsc2UgeworICAgICAgICBpID0g
bmFtZSA9PT0gIndpZHRoIiA/IDEgOiAwOworICAgIH0KKworICAgIGZvciAoIDsgaSA8IDQ7IGkg
Kz0gMiApIHsKKworICAgICAgICAvLyBCb3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJnaW4sIHNv
IGFkZCBpdCBpZiB3ZSB3YW50IGl0CisgICAgICAgIGlmICggZXh0cmEgPT09ICJtYXJnaW4iICkg
eworICAgICAgICAgICAgdmFsICs9IGpRdWVyeS5jc3MoIGVsZW0sIGV4dHJhICsgY3NzRXhwYW5k
WyBpIF0sIHRydWUsIHN0eWxlcyApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBpc0JvcmRl
ckJveCApIHsKKworICAgICAgICAgICAgLy8gYm9yZGVyLWJveCBpbmNsdWRlcyBwYWRkaW5nLCBz
byByZW1vdmUgaXQgaWYgd2Ugd2FudCBjb250ZW50CisgICAgICAgICAgICBpZiAoIGV4dHJhID09
PSAiY29udGVudCIgKSB7CisgICAgICAgICAgICAgICAgdmFsIC09IGpRdWVyeS5jc3MoIGVsZW0s
ICJwYWRkaW5nIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgZXh0cmEgaXNuJ3QgYm9yZGVyIG5v
ciBtYXJnaW4sIHNvIHJlbW92ZSBib3JkZXIKKyAgICAgICAgICAgIGlmICggZXh0cmEgIT09ICJt
YXJnaW4iICkgeworICAgICAgICAgICAgICAgIHZhbCAtPSBqUXVlcnkuY3NzKCBlbGVtLCAiYm9y
ZGVyIiArIGNzc0V4cGFuZFsgaSBdICsgIldpZHRoIiwgdHJ1ZSwgc3R5bGVzICk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQs
IGV4dHJhIGlzbid0IGNvbnRlbnQsIHNvIGFkZCBwYWRkaW5nCisgICAgICAgICAgICB2YWwgKz0g
alF1ZXJ5LmNzcyggZWxlbSwgInBhZGRpbmciICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxl
cyApOworCisgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBjb250ZW50
IG5vciBwYWRkaW5nLCBzbyBhZGQgYm9yZGVyCisgICAgICAgICAgICBpZiAoIGV4dHJhICE9PSAi
cGFkZGluZyIgKSB7CisgICAgICAgICAgICAgICAgdmFsICs9IGpRdWVyeS5jc3MoIGVsZW0sICJi
b3JkZXIiICsgY3NzRXhwYW5kWyBpIF0gKyAiV2lkdGgiLCB0cnVlLCBzdHlsZXMgKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB2YWw7Cit9CisKK2Z1bmN0
aW9uIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhICkgeworCisgICAgLy8gU3Rh
cnQgd2l0aCBvZmZzZXQgcHJvcGVydHksIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGJvcmRl
ci1ib3ggdmFsdWUKKyAgICB2YXIgdmFsLAorICAgICAgICB2YWx1ZUlzQm9yZGVyQm94ID0gdHJ1
ZSwKKyAgICAgICAgc3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksCisgICAgICAgIGlzQm9yZGVy
Qm94ID0galF1ZXJ5LmNzcyggZWxlbSwgImJveFNpemluZyIsIGZhbHNlLCBzdHlsZXMgKSA9PT0g
ImJvcmRlci1ib3giOworCisgICAgLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5CisgICAgLy8gUnVu
bmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYSBkaXNjb25uZWN0ZWQgbm9kZQorICAgIC8v
IGluIElFIHRocm93cyBhbiBlcnJvci4KKyAgICBpZiAoIGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5s
ZW5ndGggKSB7CisgICAgICAgIHZhbCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbIG5h
bWUgXTsKKyAgICB9CisKKyAgICAvLyBTb21lIG5vbi1odG1sIGVsZW1lbnRzIHJldHVybiB1bmRl
ZmluZWQgZm9yIG9mZnNldFdpZHRoLCBzbyBjaGVjayBmb3IgbnVsbC91bmRlZmluZWQKKyAgICAv
LyBzdmcgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02NDky
ODUKKyAgICAvLyBNYXRoTUwgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVn
LmNnaT9pZD00OTE2NjgKKyAgICBpZiAoIHZhbCA8PSAwIHx8IHZhbCA9PSBudWxsICkgeworCisg
ICAgICAgIC8vIEZhbGwgYmFjayB0byBjb21wdXRlZCB0aGVuIHVuY29tcHV0ZWQgY3NzIGlmIG5l
Y2Vzc2FyeQorICAgICAgICB2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApOworICAg
ICAgICBpZiAoIHZhbCA8IDAgfHwgdmFsID09IG51bGwgKSB7CisgICAgICAgICAgICB2YWwgPSBl
bGVtLnN0eWxlWyBuYW1lIF07CisgICAgICAgIH0KKworICAgICAgICAvLyBDb21wdXRlZCB1bml0
IGlzIG5vdCBwaXhlbHMuIFN0b3AgaGVyZSBhbmQgcmV0dXJuLgorICAgICAgICBpZiAoIHJudW1u
b25weC50ZXN0KCB2YWwgKSApIHsKKyAgICAgICAgICAgIHJldHVybiB2YWw7CisgICAgICAgIH0K
KworICAgICAgICAvLyBDaGVjayBmb3Igc3R5bGUgaW4gY2FzZSBhIGJyb3dzZXIgd2hpY2ggcmV0
dXJucyB1bnJlbGlhYmxlIHZhbHVlcworICAgICAgICAvLyBmb3IgZ2V0Q29tcHV0ZWRTdHlsZSBz
aWxlbnRseSBmYWxscyBiYWNrIHRvIHRoZSByZWxpYWJsZSBlbGVtLnN0eWxlCisgICAgICAgIHZh
bHVlSXNCb3JkZXJCb3ggPSBpc0JvcmRlckJveCAmJgorICAgICAgICAgICAgKCBzdXBwb3J0LmJv
eFNpemluZ1JlbGlhYmxlKCkgfHwgdmFsID09PSBlbGVtLnN0eWxlWyBuYW1lIF0gKTsKKworICAg
ICAgICAvLyBOb3JtYWxpemUgIiIsIGF1dG8sIGFuZCBwcmVwYXJlIGZvciBleHRyYQorICAgICAg
ICB2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwOworICAgIH0KKworICAgIC8vIFVzZSB0aGUg
YWN0aXZlIGJveC1zaXppbmcgbW9kZWwgdG8gYWRkL3N1YnRyYWN0IGlycmVsZXZhbnQgc3R5bGVz
CisgICAgcmV0dXJuICggdmFsICsKKyAgICAgICAgYXVnbWVudFdpZHRoT3JIZWlnaHQoCisgICAg
ICAgICAgICBlbGVtLAorICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgIGV4dHJhIHx8ICgg
aXNCb3JkZXJCb3ggPyAiYm9yZGVyIiA6ICJjb250ZW50IiApLAorICAgICAgICAgICAgdmFsdWVJ
c0JvcmRlckJveCwKKyAgICAgICAgICAgIHN0eWxlcworICAgICAgICApCisgICAgKSArICJweCI7
Cit9CisKK2pRdWVyeS5leHRlbmQoIHsKKworICAgIC8vIEFkZCBpbiBzdHlsZSBwcm9wZXJ0eSBo
b29rcyBmb3Igb3ZlcnJpZGluZyB0aGUgZGVmYXVsdAorICAgIC8vIGJlaGF2aW9yIG9mIGdldHRp
bmcgYW5kIHNldHRpbmcgYSBzdHlsZSBwcm9wZXJ0eQorICAgIGNzc0hvb2tzOiB7CisgICAgICAg
IG9wYWNpdHk6IHsKKyAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkg
eworICAgICAgICAgICAgICAgIGlmICggY29tcHV0ZWQgKSB7CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBnZXQgYSBudW1iZXIgYmFjayBmcm9tIG9wYWNpdHkKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIHJldCA9IGN1ckNTUyggZWxlbSwgIm9wYWNpdHkiICk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQgPT09ICIiID8gIjEiIDogcmV0OworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisKKyAgICAvLyBE
b24ndCBhdXRvbWF0aWNhbGx5IGFkZCAicHgiIHRvIHRoZXNlIHBvc3NpYmx5LXVuaXRsZXNzIHBy
b3BlcnRpZXMKKyAgICBjc3NOdW1iZXI6IHsKKyAgICAgICAgImFuaW1hdGlvbkl0ZXJhdGlvbkNv
dW50IjogdHJ1ZSwKKyAgICAgICAgImNvbHVtbkNvdW50IjogdHJ1ZSwKKyAgICAgICAgImZpbGxP
cGFjaXR5IjogdHJ1ZSwKKyAgICAgICAgImZsZXhHcm93IjogdHJ1ZSwKKyAgICAgICAgImZsZXhT
aHJpbmsiOiB0cnVlLAorICAgICAgICAiZm9udFdlaWdodCI6IHRydWUsCisgICAgICAgICJsaW5l
SGVpZ2h0IjogdHJ1ZSwKKyAgICAgICAgIm9wYWNpdHkiOiB0cnVlLAorICAgICAgICAib3JkZXIi
OiB0cnVlLAorICAgICAgICAib3JwaGFucyI6IHRydWUsCisgICAgICAgICJ3aWRvd3MiOiB0cnVl
LAorICAgICAgICAiekluZGV4IjogdHJ1ZSwKKyAgICAgICAgInpvb20iOiB0cnVlCisgICAgfSwK
KworICAgIC8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5hbWVzIHlvdSB3aXNoIHRvIGZpeCBi
ZWZvcmUKKyAgICAvLyBzZXR0aW5nIG9yIGdldHRpbmcgdGhlIHZhbHVlCisgICAgY3NzUHJvcHM6
IHsKKyAgICAgICAgImZsb2F0IjogImNzc0Zsb2F0IgorICAgIH0sCisKKyAgICAvLyBHZXQgYW5k
IHNldCB0aGUgc3R5bGUgcHJvcGVydHkgb24gYSBET00gTm9kZQorICAgIHN0eWxlOiBmdW5jdGlv
biggZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkgeworCisgICAgICAgIC8vIERvbid0IHNldCBz
dHlsZXMgb24gdGV4dCBhbmQgY29tbWVudCBub2RlcworICAgICAgICBpZiAoICFlbGVtIHx8IGVs
ZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHlsZSAp
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZQorICAgICAgICB2YXIgcmV0
LCB0eXBlLCBob29rcywKKyAgICAgICAgICAgIG9yaWdOYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSgg
bmFtZSApLAorICAgICAgICAgICAgc3R5bGUgPSBlbGVtLnN0eWxlOworCisgICAgICAgIG5hbWUg
PSBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gfHwKKyAgICAgICAgICAgICggalF1ZXJ5LmNz
c1Byb3BzWyBvcmlnTmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIG9yaWdOYW1lICkgfHwgb3JpZ05h
bWUgKTsKKworICAgICAgICAvLyBHZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uLCB0
aGVuIHVucHJlZml4ZWQgdmVyc2lvbgorICAgICAgICBob29rcyA9IGpRdWVyeS5jc3NIb29rc1sg
bmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTsKKworICAgICAgICAvLyBDaGVj
ayBpZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWUKKyAgICAgICAgaWYgKCB2YWx1ZSAhPT0gdW5kZWZp
bmVkICkgeworICAgICAgICAgICAgdHlwZSA9IHR5cGVvZiB2YWx1ZTsKKworICAgICAgICAgICAg
Ly8gQ29udmVydCAiKz0iIG9yICItPSIgdG8gcmVsYXRpdmUgbnVtYmVycyAoIzczNDUpCisgICAg
ICAgICAgICBpZiAoIHR5cGUgPT09ICJzdHJpbmciICYmICggcmV0ID0gcmNzc051bS5leGVjKCB2
YWx1ZSApICkgJiYgcmV0WyAxIF0gKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBhZGp1c3RD
U1MoIGVsZW0sIG5hbWUsIHJldCApOworCisgICAgICAgICAgICAgICAgLy8gRml4ZXMgYnVnICM5
MjM3CisgICAgICAgICAgICAgICAgdHlwZSA9ICJudW1iZXIiOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBudWxsIGFuZCBOYU4gdmFsdWVzIGFyZW4ndCBz
ZXQgKCM3MTE2KQorICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlICE9PSB2
YWx1ZSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCB0aGUgdW5pdCAoZXhjZXB0
IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKQorICAgICAgICAgICAgaWYgKCB0eXBlID09PSAi
bnVtYmVyIiApIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSArPSByZXQgJiYgcmV0WyAzIF0gfHwg
KCBqUXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFtZSBdID8gIiIgOiAicHgiICk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIGJhY2tncm91bmQtKiBwcm9wcyBhZmZlY3Qgb3JpZ2luYWwg
Y2xvbmUncyB2YWx1ZXMKKyAgICAgICAgICAgIGlmICggIXN1cHBvcnQuY2xlYXJDbG9uZVN0eWxl
ICYmIHZhbHVlID09PSAiIiAmJiBuYW1lLmluZGV4T2YoICJiYWNrZ3JvdW5kIiApID09PSAwICkg
eworICAgICAgICAgICAgICAgIHN0eWxlWyBuYW1lIF0gPSAiaW5oZXJpdCI7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZh
bHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZQorICAgICAgICAgICAg
aWYgKCAhaG9va3MgfHwgISggInNldCIgaW4gaG9va3MgKSB8fAorICAgICAgICAgICAgICAgICgg
dmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCAp
IHsKKworICAgICAgICAgICAgICAgIHN0eWxlWyBuYW1lIF0gPSB2YWx1ZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAvLyBJZiBhIGhvb2sgd2FzIHBy
b3ZpZGVkIGdldCB0aGUgbm9uLWNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmUKKyAgICAgICAgICAg
IGlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYKKyAgICAgICAgICAgICAgICAoIHJldCA9
IGhvb2tzLmdldCggZWxlbSwgZmFsc2UsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkgeworCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3QKKyAg
ICAgICAgICAgIHJldHVybiBzdHlsZVsgbmFtZSBdOworICAgICAgICB9CisgICAgfSwKKworICAg
IGNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGV4dHJhLCBzdHlsZXMgKSB7CisgICAgICAgIHZh
ciB2YWwsIG51bSwgaG9va3MsCisgICAgICAgICAgICBvcmlnTmFtZSA9IGpRdWVyeS5jYW1lbENh
c2UoIG5hbWUgKTsKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdp
dGggdGhlIHJpZ2h0IG5hbWUKKyAgICAgICAgbmFtZSA9IGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05h
bWUgXSB8fAorICAgICAgICAgICAgKCBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gPSB2ZW5k
b3JQcm9wTmFtZSggb3JpZ05hbWUgKSB8fCBvcmlnTmFtZSApOworCisgICAgICAgIC8vIFRyeSBw
cmVmaXhlZCBuYW1lIGZvbGxvd2VkIGJ5IHRoZSB1bnByZWZpeGVkIG5hbWUKKyAgICAgICAgaG9v
a3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1l
IF07CisKKyAgICAgICAgLy8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVk
IHZhbHVlIGZyb20gdGhlcmUKKyAgICAgICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAp
IHsKKyAgICAgICAgICAgIHZhbCA9IGhvb2tzLmdldCggZWxlbSwgdHJ1ZSwgZXh0cmEgKTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIE90aGVyd2lzZSwgaWYgYSB3YXkgdG8gZ2V0IHRoZSBjb21w
dXRlZCB2YWx1ZSBleGlzdHMsIHVzZSB0aGF0CisgICAgICAgIGlmICggdmFsID09PSB1bmRlZmlu
ZWQgKSB7CisgICAgICAgICAgICB2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gQ29udmVydCAibm9ybWFsIiB0byBjb21wdXRlZCB2YWx1
ZQorICAgICAgICBpZiAoIHZhbCA9PT0gIm5vcm1hbCIgJiYgbmFtZSBpbiBjc3NOb3JtYWxUcmFu
c2Zvcm0gKSB7CisgICAgICAgICAgICB2YWwgPSBjc3NOb3JtYWxUcmFuc2Zvcm1bIG5hbWUgXTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIE1ha2UgbnVtZXJpYyBpZiBmb3JjZWQgb3IgYSBxdWFs
aWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpYworICAgICAgICBpZiAoIGV4
dHJhID09PSAiIiB8fCBleHRyYSApIHsKKyAgICAgICAgICAgIG51bSA9IHBhcnNlRmxvYXQoIHZh
bCApOworICAgICAgICAgICAgcmV0dXJuIGV4dHJhID09PSB0cnVlIHx8IGlzRmluaXRlKCBudW0g
KSA/IG51bSB8fCAwIDogdmFsOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWw7CisgICAg
fQorfSApOworCitqUXVlcnkuZWFjaCggWyAiaGVpZ2h0IiwgIndpZHRoIiBdLCBmdW5jdGlvbigg
aSwgbmFtZSApIHsKKyAgICBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSA9IHsKKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQsIGV4dHJhICkgeworICAgICAgICAgICAgaWYgKCBj
b21wdXRlZCApIHsKKworICAgICAgICAgICAgICAgIC8vIENlcnRhaW4gZWxlbWVudHMgY2FuIGhh
dmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cgdGhlbQorICAgICAgICAgICAg
ICAgIC8vIGJ1dCBpdCBtdXN0IGhhdmUgYSBjdXJyZW50IGRpc3BsYXkgc3R5bGUgdGhhdCB3b3Vs
ZCBiZW5lZml0CisgICAgICAgICAgICAgICAgcmV0dXJuIHJkaXNwbGF5c3dhcC50ZXN0KCBqUXVl
cnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKSApICYmCisKKyAgICAgICAgICAgICAgICAgICAgLy8g
U3VwcG9ydDogU2FmYXJpIDgrCisgICAgICAgICAgICAgICAgICAgIC8vIFRhYmxlIGNvbHVtbnMg
aW4gU2FmYXJpIGhhdmUgbm9uLXplcm8gb2Zmc2V0V2lkdGggJiB6ZXJvCisgICAgICAgICAgICAg
ICAgICAgIC8vIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHVubGVzcyBkaXNwbGF5IGlz
IGNoYW5nZWQuCisgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seQor
ICAgICAgICAgICAgICAgICAgICAvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBh
IGRpc2Nvbm5lY3RlZCBub2RlCisgICAgICAgICAgICAgICAgICAgIC8vIGluIElFIHRocm93cyBh
biBlcnJvci4KKyAgICAgICAgICAgICAgICAgICAgKCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxl
bmd0aCB8fCAhZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCApID8KKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN3YXAoIGVsZW0sIGNzc1Nob3csIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1l
LCBleHRyYSApOworICAgICAgICAgICAgICAgICAgICAgICAgfSApIDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhICk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUs
IGV4dHJhICkgeworICAgICAgICAgICAgdmFyIG1hdGNoZXMsCisgICAgICAgICAgICAgICAgc3R5
bGVzID0gZXh0cmEgJiYgZ2V0U3R5bGVzKCBlbGVtICksCisgICAgICAgICAgICAgICAgc3VidHJh
Y3QgPSBleHRyYSAmJiBhdWdtZW50V2lkdGhPckhlaWdodCgKKyAgICAgICAgICAgICAgICAgICAg
ZWxlbSwKKyAgICAgICAgICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgZXh0
cmEsCisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jc3MoIGVsZW0sICJib3hTaXppbmciLCBm
YWxzZSwgc3R5bGVzICkgPT09ICJib3JkZXItYm94IiwKKyAgICAgICAgICAgICAgICAgICAgc3R5
bGVzCisgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgLy8gQ29udmVydCB0byBwaXhl
bHMgaWYgdmFsdWUgYWRqdXN0bWVudCBpcyBuZWVkZWQKKyAgICAgICAgICAgIGlmICggc3VidHJh
Y3QgJiYgKCBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiYKKyAgICAgICAgICAg
ICAgICAoIG1hdGNoZXNbIDMgXSB8fCAicHgiICkgIT09ICJweCIgKSB7CisKKyAgICAgICAgICAg
ICAgICBlbGVtLnN0eWxlWyBuYW1lIF0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9
IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cmV0dXJuIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKTsKKyAgICAg
ICAgfQorICAgIH07Cit9ICk7CisKK2pRdWVyeS5jc3NIb29rcy5tYXJnaW5MZWZ0ID0gYWRkR2V0
SG9va0lmKCBzdXBwb3J0LnJlbGlhYmxlTWFyZ2luTGVmdCwKKyAgICBmdW5jdGlvbiggZWxlbSwg
Y29tcHV0ZWQgKSB7CisgICAgICAgIGlmICggY29tcHV0ZWQgKSB7CisgICAgICAgICAgICByZXR1
cm4gKCBwYXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sICJtYXJnaW5MZWZ0IiApICkgfHwKKyAgICAg
ICAgICAgICAgICBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLQorICAgICAgICAg
ICAgICAgICAgICBzd2FwKCBlbGVtLCB7IG1hcmdpbkxlZnQ6IDAgfSwgZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3Qo
KS5sZWZ0OworICAgICAgICAgICAgICAgICAgICB9ICkKKyAgICAgICAgICAgICAgICApICsgInB4
IjsKKyAgICAgICAgfQorICAgIH0KKyk7CisKKy8vIFRoZXNlIGhvb2tzIGFyZSB1c2VkIGJ5IGFu
aW1hdGUgdG8gZXhwYW5kIHByb3BlcnRpZXMKK2pRdWVyeS5lYWNoKCB7CisgICAgbWFyZ2luOiAi
IiwKKyAgICBwYWRkaW5nOiAiIiwKKyAgICBib3JkZXI6ICJXaWR0aCIKK30sIGZ1bmN0aW9uKCBw
cmVmaXgsIHN1ZmZpeCApIHsKKyAgICBqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBd
ID0geworICAgICAgICBleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgICAgIHZh
ciBpID0gMCwKKyAgICAgICAgICAgICAgICBleHBhbmRlZCA9IHt9LAorCisgICAgICAgICAgICAg
ICAgLy8gQXNzdW1lcyBhIHNpbmdsZSBudW1iZXIgaWYgbm90IGEgc3RyaW5nCisgICAgICAgICAg
ICAgICAgcGFydHMgPSB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciID8gdmFsdWUuc3BsaXQoICIg
IiApIDogWyB2YWx1ZSBdOworCisgICAgICAgICAgICBmb3IgKCA7IGkgPCA0OyBpKysgKSB7Cisg
ICAgICAgICAgICAgICAgZXhwYW5kZWRbIHByZWZpeCArIGNzc0V4cGFuZFsgaSBdICsgc3VmZml4
IF0gPQorICAgICAgICAgICAgICAgICAgICBwYXJ0c1sgaSBdIHx8IHBhcnRzWyBpIC0gMiBdIHx8
IHBhcnRzWyAwIF07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBleHBhbmRl
ZDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBpZiAoICFybWFyZ2luLnRlc3QoIHByZWZpeCAp
ICkgeworICAgICAgICBqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdLnNldCA9IHNl
dFBvc2l0aXZlTnVtYmVyOworICAgIH0KK30gKTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworICAg
IGNzczogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgeworICAgICAgICByZXR1cm4gYWNjZXNzKCB0
aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7CisgICAgICAgICAgICB2YXIgc3R5
bGVzLCBsZW4sCisgICAgICAgICAgICAgICAgbWFwID0ge30sCisgICAgICAgICAgICAgICAgaSA9
IDA7CisKKyAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIG5hbWUgKSApIHsKKyAgICAg
ICAgICAgICAgICBzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKTsKKyAgICAgICAgICAgICAgICBs
ZW4gPSBuYW1lLmxlbmd0aDsKKworICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbjsgaSsr
ICkgeworICAgICAgICAgICAgICAgICAgICBtYXBbIG5hbWVbIGkgXSBdID0galF1ZXJ5LmNzcygg
ZWxlbSwgbmFtZVsgaSBdLCBmYWxzZSwgc3R5bGVzICk7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1hcDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPworICAgICAgICAgICAgICAgIGpRdWVyeS5zdHls
ZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6CisgICAgICAgICAgICAgICAgalF1ZXJ5LmNzcyggZWxl
bSwgbmFtZSApOworICAgICAgICB9LCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEg
KTsKKyAgICB9Cit9ICk7CisKKworZnVuY3Rpb24gVHdlZW4oIGVsZW0sIG9wdGlvbnMsIHByb3As
IGVuZCwgZWFzaW5nICkgeworICAgIHJldHVybiBuZXcgVHdlZW4ucHJvdG90eXBlLmluaXQoIGVs
ZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICk7Cit9CitqUXVlcnkuVHdlZW4gPSBUd2Vl
bjsKKworVHdlZW4ucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBUd2VlbiwKKyAgICBp
bml0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcsIHVuaXQgKSB7
CisgICAgICAgIHRoaXMuZWxlbSA9IGVsZW07CisgICAgICAgIHRoaXMucHJvcCA9IHByb3A7Cisg
ICAgICAgIHRoaXMuZWFzaW5nID0gZWFzaW5nIHx8IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHQ7Cisg
ICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CisgICAgICAgIHRoaXMuc3RhcnQgPSB0aGlz
Lm5vdyA9IHRoaXMuY3VyKCk7CisgICAgICAgIHRoaXMuZW5kID0gZW5kOworICAgICAgICB0aGlz
LnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gIiIgOiAicHgiICk7
CisgICAgfSwKKyAgICBjdXI6IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaG9va3MgPSBUd2Vl
bi5wcm9wSG9va3NbIHRoaXMucHJvcCBdOworCisgICAgICAgIHJldHVybiBob29rcyAmJiBob29r
cy5nZXQgPworICAgICAgICAgICAgaG9va3MuZ2V0KCB0aGlzICkgOgorICAgICAgICAgICAgVHdl
ZW4ucHJvcEhvb2tzLl9kZWZhdWx0LmdldCggdGhpcyApOworICAgIH0sCisgICAgcnVuOiBmdW5j
dGlvbiggcGVyY2VudCApIHsKKyAgICAgICAgdmFyIGVhc2VkLAorICAgICAgICAgICAgaG9va3Mg
PSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdOworCisgICAgICAgIGlmICggdGhpcy5vcHRp
b25zLmR1cmF0aW9uICkgeworICAgICAgICAgICAgdGhpcy5wb3MgPSBlYXNlZCA9IGpRdWVyeS5l
YXNpbmdbIHRoaXMuZWFzaW5nIF0oCisgICAgICAgICAgICAgICAgcGVyY2VudCwgdGhpcy5vcHRp
b25zLmR1cmF0aW9uICogcGVyY2VudCwgMCwgMSwgdGhpcy5vcHRpb25zLmR1cmF0aW9uCisgICAg
ICAgICAgICApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5wb3MgPSBlYXNl
ZCA9IHBlcmNlbnQ7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5ub3cgPSAoIHRoaXMuZW5kIC0g
dGhpcy5zdGFydCApICogZWFzZWQgKyB0aGlzLnN0YXJ0OworCisgICAgICAgIGlmICggdGhpcy5v
cHRpb25zLnN0ZXAgKSB7CisgICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKCB0aGlz
LmVsZW0sIHRoaXMubm93LCB0aGlzICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGhvb2tz
ICYmIGhvb2tzLnNldCApIHsKKyAgICAgICAgICAgIGhvb2tzLnNldCggdGhpcyApOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgVHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCggdGhp
cyApOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KK307CisKK1R3ZWVu
LnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTsKKworVHdlZW4ucHJv
cEhvb2tzID0geworICAgIF9kZWZhdWx0OiB7CisgICAgICAgIGdldDogZnVuY3Rpb24oIHR3ZWVu
ICkgeworICAgICAgICAgICAgdmFyIHJlc3VsdDsKKworICAgICAgICAgICAgLy8gVXNlIGEgcHJv
cGVydHkgb24gdGhlIGVsZW1lbnQgZGlyZWN0bHkgd2hlbiBpdCBpcyBub3QgYSBET00gZWxlbWVu
dCwKKyAgICAgICAgICAgIC8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJv
cGVydHkgdGhhdCBleGlzdHMuCisgICAgICAgICAgICBpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUg
IT09IDEgfHwKKyAgICAgICAgICAgICAgICB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gIT0gbnVs
bCAmJiB0d2Vlbi5lbGVtLnN0eWxlWyB0d2Vlbi5wcm9wIF0gPT0gbnVsbCApIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBQYXNzaW5nIGFuIGVtcHR5IHN0cmluZyBhcyBhIDNyZCBwYXJhbWV0
ZXIgdG8gLmNzcyB3aWxsIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgIC8vIGF0dGVtcHQgYSBw
YXJzZUZsb2F0IGFuZCBmYWxsYmFjayB0byBhIHN0cmluZyBpZiB0aGUgcGFyc2UgZmFpbHMuCisg
ICAgICAgICAgICAvLyBTaW1wbGUgdmFsdWVzIHN1Y2ggYXMgIjEwcHgiIGFyZSBwYXJzZWQgdG8g
RmxvYXQ7CisgICAgICAgICAgICAvLyBjb21wbGV4IHZhbHVlcyBzdWNoIGFzICJyb3RhdGUoMXJh
ZCkiIGFyZSByZXR1cm5lZCBhcy1pcy4KKyAgICAgICAgICAgIHJlc3VsdCA9IGpRdWVyeS5jc3Mo
IHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsICIiICk7CisKKyAgICAgICAgICAgIC8vIEVtcHR5IHN0
cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgImF1dG8iIGFyZSBjb252ZXJ0ZWQgdG8gMC4KKyAg
ICAgICAgICAgIHJldHVybiAhcmVzdWx0IHx8IHJlc3VsdCA9PT0gImF1dG8iID8gMCA6IHJlc3Vs
dDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7CisKKyAgICAg
ICAgICAgIC8vIFVzZSBzdGVwIGhvb2sgZm9yIGJhY2sgY29tcGF0LgorICAgICAgICAgICAgLy8g
VXNlIGNzc0hvb2sgaWYgaXRzIHRoZXJlLgorICAgICAgICAgICAgLy8gVXNlIC5zdHlsZSBpZiBh
dmFpbGFibGUgYW5kIHVzZSBwbGFpbiBwcm9wZXJ0aWVzIHdoZXJlIGF2YWlsYWJsZS4KKyAgICAg
ICAgICAgIGlmICggalF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSApIHsKKyAgICAgICAgICAg
ICAgICBqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdKCB0d2VlbiApOworICAgICAgICAgICAg
fSBlbHNlIGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSA9PT0gMSAmJgorICAgICAgICAgICAgICAg
ICggdHdlZW4uZWxlbS5zdHlsZVsgalF1ZXJ5LmNzc1Byb3BzWyB0d2Vlbi5wcm9wIF0gXSAhPSBu
dWxsIHx8CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBd
ICkgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCB0d2Vlbi5w
cm9wLCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdzsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK307CisKKy8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5
CisvLyBQYW5pYyBiYXNlZCBhcHByb2FjaCB0byBzZXR0aW5nIHRoaW5ncyBvbiBkaXNjb25uZWN0
ZWQgbm9kZXMKK1R3ZWVuLnByb3BIb29rcy5zY3JvbGxUb3AgPSBUd2Vlbi5wcm9wSG9va3Muc2Ny
b2xsTGVmdCA9IHsKKyAgICBzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHsKKyAgICAgICAgaWYgKCB0
d2Vlbi5lbGVtLm5vZGVUeXBlICYmIHR3ZWVuLmVsZW0ucGFyZW50Tm9kZSApIHsKKyAgICAgICAg
ICAgIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdzsKKyAgICAgICAgfQorICAg
IH0KK307CisKK2pRdWVyeS5lYXNpbmcgPSB7CisgICAgbGluZWFyOiBmdW5jdGlvbiggcCApIHsK
KyAgICAgICAgcmV0dXJuIHA7CisgICAgfSwKKyAgICBzd2luZzogZnVuY3Rpb24oIHAgKSB7Cisg
ICAgICAgIHJldHVybiAwLjUgLSBNYXRoLmNvcyggcCAqIE1hdGguUEkgKSAvIDI7CisgICAgfSwK
KyAgICBfZGVmYXVsdDogInN3aW5nIgorfTsKKworalF1ZXJ5LmZ4ID0gVHdlZW4ucHJvdG90eXBl
LmluaXQ7CisKKy8vIEJhY2sgY29tcGF0IDwxLjggZXh0ZW5zaW9uIHBvaW50CitqUXVlcnkuZngu
c3RlcCA9IHt9OworCisKKworCit2YXIKKyAgICBmeE5vdywgdGltZXJJZCwKKyAgICByZnh0eXBl
cyA9IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLywKKyAgICBycnVuID0gL3F1ZXVlSG9va3MkLzsK
KworZnVuY3Rpb24gcmFmKCkgeworICAgIGlmICggdGltZXJJZCApIHsKKyAgICAgICAgd2luZG93
LnJlcXVlc3RBbmltYXRpb25GcmFtZSggcmFmICk7CisgICAgICAgIGpRdWVyeS5meC50aWNrKCk7
CisgICAgfQorfQorCisvLyBBbmltYXRpb25zIGNyZWF0ZWQgc3luY2hyb25vdXNseSB3aWxsIHJ1
biBzeW5jaHJvbm91c2x5CitmdW5jdGlvbiBjcmVhdGVGeE5vdygpIHsKKyAgICB3aW5kb3cuc2V0
VGltZW91dCggZnVuY3Rpb24oKSB7CisgICAgICAgIGZ4Tm93ID0gdW5kZWZpbmVkOworICAgIH0g
KTsKKyAgICByZXR1cm4gKCBmeE5vdyA9IGpRdWVyeS5ub3coKSApOworfQorCisvLyBHZW5lcmF0
ZSBwYXJhbWV0ZXJzIHRvIGNyZWF0ZSBhIHN0YW5kYXJkIGFuaW1hdGlvbgorZnVuY3Rpb24gZ2Vu
RngoIHR5cGUsIGluY2x1ZGVXaWR0aCApIHsKKyAgICB2YXIgd2hpY2gsCisgICAgICAgIGkgPSAw
LAorICAgICAgICBhdHRycyA9IHsgaGVpZ2h0OiB0eXBlIH07CisKKyAgICAvLyBJZiB3ZSBpbmNs
dWRlIHdpZHRoLCBzdGVwIHZhbHVlIGlzIDEgdG8gZG8gYWxsIGNzc0V4cGFuZCB2YWx1ZXMsCisg
ICAgLy8gb3RoZXJ3aXNlIHN0ZXAgdmFsdWUgaXMgMiB0byBza2lwIG92ZXIgTGVmdCBhbmQgUmln
aHQKKyAgICBpbmNsdWRlV2lkdGggPSBpbmNsdWRlV2lkdGggPyAxIDogMDsKKyAgICBmb3IgKCA7
IGkgPCA0OyBpICs9IDIgLSBpbmNsdWRlV2lkdGggKSB7CisgICAgICAgIHdoaWNoID0gY3NzRXhw
YW5kWyBpIF07CisgICAgICAgIGF0dHJzWyAibWFyZ2luIiArIHdoaWNoIF0gPSBhdHRyc1sgInBh
ZGRpbmciICsgd2hpY2ggXSA9IHR5cGU7CisgICAgfQorCisgICAgaWYgKCBpbmNsdWRlV2lkdGgg
KSB7CisgICAgICAgIGF0dHJzLm9wYWNpdHkgPSBhdHRycy53aWR0aCA9IHR5cGU7CisgICAgfQor
CisgICAgcmV0dXJuIGF0dHJzOworfQorCitmdW5jdGlvbiBjcmVhdGVUd2VlbiggdmFsdWUsIHBy
b3AsIGFuaW1hdGlvbiApIHsKKyAgICB2YXIgdHdlZW4sCisgICAgICAgIGNvbGxlY3Rpb24gPSAo
IEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0KCBBbmltYXRpb24udHdl
ZW5lcnNbICIqIiBdICksCisgICAgICAgIGluZGV4ID0gMCwKKyAgICAgICAgbGVuZ3RoID0gY29s
bGVjdGlvbi5sZW5ndGg7CisgICAgZm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHsK
KyAgICAgICAgaWYgKCAoIHR3ZWVuID0gY29sbGVjdGlvblsgaW5kZXggXS5jYWxsKCBhbmltYXRp
b24sIHByb3AsIHZhbHVlICkgKSApIHsKKworICAgICAgICAgICAgLy8gV2UncmUgZG9uZSB3aXRo
IHRoaXMgcHJvcGVydHkKKyAgICAgICAgICAgIHJldHVybiB0d2VlbjsKKyAgICAgICAgfQorICAg
IH0KK30KKworZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7
CisgICAgdmFyIHByb3AsIHZhbHVlLCB0b2dnbGUsIGhvb2tzLCBvbGRmaXJlLCBwcm9wVHdlZW4s
IHJlc3RvcmVEaXNwbGF5LCBkaXNwbGF5LAorICAgICAgICBpc0JveCA9ICJ3aWR0aCIgaW4gcHJv
cHMgfHwgImhlaWdodCIgaW4gcHJvcHMsCisgICAgICAgIGFuaW0gPSB0aGlzLAorICAgICAgICBv
cmlnID0ge30sCisgICAgICAgIHN0eWxlID0gZWxlbS5zdHlsZSwKKyAgICAgICAgaGlkZGVuID0g
ZWxlbS5ub2RlVHlwZSAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSwKKyAgICAgICAgZGF0
YVNob3cgPSBkYXRhUHJpdi5nZXQoIGVsZW0sICJmeHNob3ciICk7CisKKyAgICAvLyBRdWV1ZS1z
a2lwcGluZyBhbmltYXRpb25zIGhpamFjayB0aGUgZnggaG9va3MKKyAgICBpZiAoICFvcHRzLnF1
ZXVlICkgeworICAgICAgICBob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgImZ4IiAp
OworICAgICAgICBpZiAoIGhvb2tzLnVucXVldWVkID09IG51bGwgKSB7CisgICAgICAgICAgICBo
b29rcy51bnF1ZXVlZCA9IDA7CisgICAgICAgICAgICBvbGRmaXJlID0gaG9va3MuZW1wdHkuZmly
ZTsKKyAgICAgICAgICAgIGhvb2tzLmVtcHR5LmZpcmUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoICFob29rcy51bnF1ZXVlZCApIHsKKyAgICAgICAgICAgICAgICAgICAgb2xk
ZmlyZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAg
ICAgICAgaG9va3MudW5xdWV1ZWQrKzsKKworICAgICAgICBhbmltLmFsd2F5cyggZnVuY3Rpb24o
KSB7CisKKyAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgY29tcGxldGUgaGFuZGxlciBpcyBjYWxs
ZWQgYmVmb3JlIHRoaXMgY29tcGxldGVzCisgICAgICAgICAgICBhbmltLmFsd2F5cyggZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgaG9va3MudW5xdWV1ZWQtLTsKKyAgICAgICAgICAgICAg
ICBpZiAoICFqUXVlcnkucXVldWUoIGVsZW0sICJmeCIgKS5sZW5ndGggKSB7CisgICAgICAgICAg
ICAgICAgICAgIGhvb2tzLmVtcHR5LmZpcmUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9ICk7CisgICAgICAgIH0gKTsKKyAgICB9CisKKyAgICAvLyBEZXRlY3Qgc2hvdy9oaWRl
IGFuaW1hdGlvbnMKKyAgICBmb3IgKCBwcm9wIGluIHByb3BzICkgeworICAgICAgICB2YWx1ZSA9
IHByb3BzWyBwcm9wIF07CisgICAgICAgIGlmICggcmZ4dHlwZXMudGVzdCggdmFsdWUgKSApIHsK
KyAgICAgICAgICAgIGRlbGV0ZSBwcm9wc1sgcHJvcCBdOworICAgICAgICAgICAgdG9nZ2xlID0g
dG9nZ2xlIHx8IHZhbHVlID09PSAidG9nZ2xlIjsKKyAgICAgICAgICAgIGlmICggdmFsdWUgPT09
ICggaGlkZGVuID8gImhpZGUiIDogInNob3ciICkgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBQ
cmV0ZW5kIHRvIGJlIGhpZGRlbiBpZiB0aGlzIGlzIGEgInNob3ciIGFuZAorICAgICAgICAgICAg
ICAgIC8vIHRoZXJlIGlzIHN0aWxsIGRhdGEgZnJvbSBhIHN0b3BwZWQgc2hvdy9oaWRlCisgICAg
ICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gInNob3ciICYmIGRhdGFTaG93ICYmIGRhdGFTaG93
WyBwcm9wIF0gIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgaGlkZGVuID0g
dHJ1ZTsKKworICAgICAgICAgICAgICAgIC8vIElnbm9yZSBhbGwgb3RoZXIgbm8tb3Agc2hvdy9o
aWRlIGRhdGEKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBv
cmlnWyBwcm9wIF0gPSBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdIHx8IGpRdWVyeS5zdHls
ZSggZWxlbSwgcHJvcCApOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQmFpbCBvdXQgaWYg
dGhpcyBpcyBhIG5vLW9wIGxpa2UgLmhpZGUoKS5oaWRlKCkKKyAgICBwcm9wVHdlZW4gPSAhalF1
ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3BzICk7CisgICAgaWYgKCAhcHJvcFR3ZWVuICYmIGpRdWVy
eS5pc0VtcHR5T2JqZWN0KCBvcmlnICkgKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBSZXN0cmljdCAib3ZlcmZsb3ciIGFuZCAiZGlzcGxheSIgc3R5bGVzIGR1cmluZyBib3gg
YW5pbWF0aW9ucworICAgIGlmICggaXNCb3ggJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKwor
ICAgICAgICAvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDEzCisgICAgICAgIC8v
IFJlY29yZCBhbGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUUgZG9lcyBub3QgaW5m
ZXIgdGhlIHNob3J0aGFuZAorICAgICAgICAvLyBmcm9tIGlkZW50aWNhbGx5LXZhbHVlZCBvdmVy
Zmxvd1ggYW5kIG92ZXJmbG93WQorICAgICAgICBvcHRzLm92ZXJmbG93ID0gWyBzdHlsZS5vdmVy
Zmxvdywgc3R5bGUub3ZlcmZsb3dYLCBzdHlsZS5vdmVyZmxvd1kgXTsKKworICAgICAgICAvLyBJ
ZGVudGlmeSBhIGRpc3BsYXkgdHlwZSwgcHJlZmVycmluZyBvbGQgc2hvdy9oaWRlIGRhdGEgb3Zl
ciB0aGUgQ1NTIGNhc2NhZGUKKyAgICAgICAgcmVzdG9yZURpc3BsYXkgPSBkYXRhU2hvdyAmJiBk
YXRhU2hvdy5kaXNwbGF5OworICAgICAgICBpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7
CisgICAgICAgICAgICByZXN0b3JlRGlzcGxheSA9IGRhdGFQcml2LmdldCggZWxlbSwgImRpc3Bs
YXkiICk7CisgICAgICAgIH0KKyAgICAgICAgZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sICJk
aXNwbGF5IiApOworICAgICAgICBpZiAoIGRpc3BsYXkgPT09ICJub25lIiApIHsKKyAgICAgICAg
ICAgIGlmICggcmVzdG9yZURpc3BsYXkgKSB7CisgICAgICAgICAgICAgICAgZGlzcGxheSA9IHJl
c3RvcmVEaXNwbGF5OworICAgICAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgICAgIC8v
IEdldCBub25lbXB0eSB2YWx1ZShzKSBieSB0ZW1wb3JhcmlseSBmb3JjaW5nIHZpc2liaWxpdHkK
KyAgICAgICAgICAgICAgICBzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTsKKyAgICAgICAgICAg
ICAgICByZXN0b3JlRGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheSB8fCByZXN0b3JlRGlzcGxh
eTsKKyAgICAgICAgICAgICAgICBkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXki
ICk7CisgICAgICAgICAgICAgICAgc2hvd0hpZGUoIFsgZWxlbSBdICk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICAvLyBBbmltYXRlIGlubGluZSBlbGVtZW50cyBhcyBpbmxp
bmUtYmxvY2sKKyAgICAgICAgaWYgKCBkaXNwbGF5ID09PSAiaW5saW5lIiB8fCBkaXNwbGF5ID09
PSAiaW5saW5lLWJsb2NrIiAmJiByZXN0b3JlRGlzcGxheSAhPSBudWxsICkgeworICAgICAgICAg
ICAgaWYgKCBqUXVlcnkuY3NzKCBlbGVtLCAiZmxvYXQiICkgPT09ICJub25lIiApIHsKKworICAg
ICAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGRpc3BsYXkgdmFsdWUgYXQgdGhl
IGVuZCBvZiBwdXJlIHNob3cvaGlkZSBhbmltYXRpb25zCisgICAgICAgICAgICAgICAgaWYgKCAh
cHJvcFR3ZWVuICkgeworICAgICAgICAgICAgICAgICAgICBhbmltLmRvbmUoIGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUuZGlzcGxheSA9IHJlc3RvcmVEaXNwbGF5
OworICAgICAgICAgICAgICAgICAgICB9ICk7CisgICAgICAgICAgICAgICAgICAgIGlmICggcmVz
dG9yZURpc3BsYXkgPT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkg
PSBzdHlsZS5kaXNwbGF5OworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdG9yZURpc3BsYXkg
PSBkaXNwbGF5ID09PSAibm9uZSIgPyAiIiA6IGRpc3BsYXk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3R5bGUuZGlzcGxheSA9ICJp
bmxpbmUtYmxvY2siOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KCBvcHRzLm92ZXJmbG93ICkgeworICAgICAgICBzdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOwor
ICAgICAgICBhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBzdHlsZS5vdmVy
ZmxvdyA9IG9wdHMub3ZlcmZsb3dbIDAgXTsKKyAgICAgICAgICAgIHN0eWxlLm92ZXJmbG93WCA9
IG9wdHMub3ZlcmZsb3dbIDEgXTsKKyAgICAgICAgICAgIHN0eWxlLm92ZXJmbG93WSA9IG9wdHMu
b3ZlcmZsb3dbIDIgXTsKKyAgICAgICAgfSApOworICAgIH0KKworICAgIC8vIEltcGxlbWVudCBz
aG93L2hpZGUgYW5pbWF0aW9ucworICAgIHByb3BUd2VlbiA9IGZhbHNlOworICAgIGZvciAoIHBy
b3AgaW4gb3JpZyApIHsKKworICAgICAgICAvLyBHZW5lcmFsIHNob3cvaGlkZSBzZXR1cCBmb3Ig
dGhpcyBlbGVtZW50IGFuaW1hdGlvbgorICAgICAgICBpZiAoICFwcm9wVHdlZW4gKSB7CisgICAg
ICAgICAgICBpZiAoIGRhdGFTaG93ICkgeworICAgICAgICAgICAgICAgIGlmICggImhpZGRlbiIg
aW4gZGF0YVNob3cgKSB7CisgICAgICAgICAgICAgICAgICAgIGhpZGRlbiA9IGRhdGFTaG93Lmhp
ZGRlbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIGRhdGFTaG93ID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCAiZnhzaG93IiwgeyBkaXNw
bGF5OiByZXN0b3JlRGlzcGxheSB9ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IFN0b3JlIGhpZGRlbi92aXNpYmxlIGZvciB0b2dnbGUgc28gYC5zdG9wKCkudG9nZ2xlKClgICJy
ZXZlcnNlcyIKKyAgICAgICAgICAgIGlmICggdG9nZ2xlICkgeworICAgICAgICAgICAgICAgIGRh
dGFTaG93LmhpZGRlbiA9ICFoaWRkZW47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IFNob3cgZWxlbWVudHMgYmVmb3JlIGFuaW1hdGluZyB0aGVtCisgICAgICAgICAgICBpZiAoIGhp
ZGRlbiApIHsKKyAgICAgICAgICAgICAgICBzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tbG9vcC1mdW5j
ICovCisKKyAgICAgICAgICAgIGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAg
IC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovCisKKyAgICAgICAgICAgICAgICAvLyBU
aGUgZmluYWwgc3RlcCBvZiBhICJoaWRlIiBhbmltYXRpb24gaXMgYWN0dWFsbHkgaGlkaW5nIHRo
ZSBlbGVtZW50CisgICAgICAgICAgICAgICAgaWYgKCAhaGlkZGVuICkgeworICAgICAgICAgICAg
ICAgICAgICBzaG93SGlkZSggWyBlbGVtIF0gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZGF0YVByaXYucmVtb3ZlKCBlbGVtLCAiZnhzaG93IiApOworICAgICAgICAgICAg
ICAgIGZvciAoIHByb3AgaW4gb3JpZyApIHsKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnN0
eWxlKCBlbGVtLCBwcm9wLCBvcmlnWyBwcm9wIF0gKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9ICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBQZXItcHJvcGVydHkgc2V0dXAK
KyAgICAgICAgcHJvcFR3ZWVuID0gY3JlYXRlVHdlZW4oIGhpZGRlbiA/IGRhdGFTaG93WyBwcm9w
IF0gOiAwLCBwcm9wLCBhbmltICk7CisgICAgICAgIGlmICggISggcHJvcCBpbiBkYXRhU2hvdyAp
ICkgeworICAgICAgICAgICAgZGF0YVNob3dbIHByb3AgXSA9IHByb3BUd2Vlbi5zdGFydDsKKyAg
ICAgICAgICAgIGlmICggaGlkZGVuICkgeworICAgICAgICAgICAgICAgIHByb3BUd2Vlbi5lbmQg
PSBwcm9wVHdlZW4uc3RhcnQ7CisgICAgICAgICAgICAgICAgcHJvcFR3ZWVuLnN0YXJ0ID0gMDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24gcHJvcEZpbHRl
ciggcHJvcHMsIHNwZWNpYWxFYXNpbmcgKSB7CisgICAgdmFyIGluZGV4LCBuYW1lLCBlYXNpbmcs
IHZhbHVlLCBob29rczsKKworICAgIC8vIGNhbWVsQ2FzZSwgc3BlY2lhbEVhc2luZyBhbmQgZXhw
YW5kIGNzc0hvb2sgcGFzcworICAgIGZvciAoIGluZGV4IGluIHByb3BzICkgeworICAgICAgICBu
YW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggaW5kZXggKTsKKyAgICAgICAgZWFzaW5nID0gc3BlY2lh
bEVhc2luZ1sgbmFtZSBdOworICAgICAgICB2YWx1ZSA9IHByb3BzWyBpbmRleCBdOworICAgICAg
ICBpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWx1ZSApICkgeworICAgICAgICAgICAgZWFzaW5nID0g
dmFsdWVbIDEgXTsKKyAgICAgICAgICAgIHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsg
MCBdOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBpbmRleCAhPT0gbmFtZSApIHsKKyAgICAg
ICAgICAgIHByb3BzWyBuYW1lIF0gPSB2YWx1ZTsKKyAgICAgICAgICAgIGRlbGV0ZSBwcm9wc1sg
aW5kZXggXTsKKyAgICAgICAgfQorCisgICAgICAgIGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBu
YW1lIF07CisgICAgICAgIGlmICggaG9va3MgJiYgImV4cGFuZCIgaW4gaG9va3MgKSB7CisgICAg
ICAgICAgICB2YWx1ZSA9IGhvb2tzLmV4cGFuZCggdmFsdWUgKTsKKyAgICAgICAgICAgIGRlbGV0
ZSBwcm9wc1sgbmFtZSBdOworCisgICAgICAgICAgICAvLyBOb3QgcXVpdGUgJC5leHRlbmQsIHRo
aXMgd29uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGtleXMuCisgICAgICAgICAgICAvLyBSZXVzaW5n
ICdpbmRleCcgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0ICJuYW1lIgorICAgICAgICAgICAg
Zm9yICggaW5kZXggaW4gdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgaWYgKCAhKCBpbmRleCBp
biBwcm9wcyApICkgeworICAgICAgICAgICAgICAgICAgICBwcm9wc1sgaW5kZXggXSA9IHZhbHVl
WyBpbmRleCBdOworICAgICAgICAgICAgICAgICAgICBzcGVjaWFsRWFzaW5nWyBpbmRleCBdID0g
ZWFzaW5nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHNwZWNpYWxFYXNpbmdbIG5hbWUgXSA9IGVhc2luZzsKKyAgICAgICAg
fQorICAgIH0KK30KKworZnVuY3Rpb24gQW5pbWF0aW9uKCBlbGVtLCBwcm9wZXJ0aWVzLCBvcHRp
b25zICkgeworICAgIHZhciByZXN1bHQsCisgICAgICAgIHN0b3BwZWQsCisgICAgICAgIGluZGV4
ID0gMCwKKyAgICAgICAgbGVuZ3RoID0gQW5pbWF0aW9uLnByZWZpbHRlcnMubGVuZ3RoLAorICAg
ICAgICBkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLmFsd2F5cyggZnVuY3Rpb24oKSB7CisK
KyAgICAgICAgICAgIC8vIERvbid0IG1hdGNoIGVsZW0gaW4gdGhlIDphbmltYXRlZCBzZWxlY3Rv
cgorICAgICAgICAgICAgZGVsZXRlIHRpY2suZWxlbTsKKyAgICAgICAgfSApLAorICAgICAgICB0
aWNrID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoIHN0b3BwZWQgKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGN1
cnJlbnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSwKKyAgICAgICAgICAgICAgICByZW1h
aW5pbmcgPSBNYXRoLm1heCggMCwgYW5pbWF0aW9uLnN0YXJ0VGltZSArIGFuaW1hdGlvbi5kdXJh
dGlvbiAtIGN1cnJlbnRUaW1lICksCisKKyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBBbmRy
b2lkIDIuMyBvbmx5CisgICAgICAgICAgICAgICAgLy8gQXJjaGFpYyBjcmFzaCBidWcgd29uJ3Qg
YWxsb3cgdXMgdG8gdXNlIGAxIC0gKCAwLjUgfHwgMCApYCAoIzEyNDk3KQorICAgICAgICAgICAg
ICAgIHRlbXAgPSByZW1haW5pbmcgLyBhbmltYXRpb24uZHVyYXRpb24gfHwgMCwKKyAgICAgICAg
ICAgICAgICBwZXJjZW50ID0gMSAtIHRlbXAsCisgICAgICAgICAgICAgICAgaW5kZXggPSAwLAor
ICAgICAgICAgICAgICAgIGxlbmd0aCA9IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoOworCisgICAg
ICAgICAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkgeworICAgICAgICAgICAg
ICAgIGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCBwZXJjZW50ICk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9u
LCBwZXJjZW50LCByZW1haW5pbmcgXSApOworCisgICAgICAgICAgICBpZiAoIHBlcmNlbnQgPCAx
ICYmIGxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVtYWluaW5nOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxl
bSwgWyBhbmltYXRpb24gXSApOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgYW5pbWF0aW9uID0gZGVmZXJyZWQucHJvbWlz
ZSggeworICAgICAgICAgICAgZWxlbTogZWxlbSwKKyAgICAgICAgICAgIHByb3BzOiBqUXVlcnku
ZXh0ZW5kKCB7fSwgcHJvcGVydGllcyApLAorICAgICAgICAgICAgb3B0czogalF1ZXJ5LmV4dGVu
ZCggdHJ1ZSwgeworICAgICAgICAgICAgICAgIHNwZWNpYWxFYXNpbmc6IHt9LAorICAgICAgICAg
ICAgICAgIGVhc2luZzogalF1ZXJ5LmVhc2luZy5fZGVmYXVsdAorICAgICAgICAgICAgfSwgb3B0
aW9ucyApLAorICAgICAgICAgICAgb3JpZ2luYWxQcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLAorICAg
ICAgICAgICAgb3JpZ2luYWxPcHRpb25zOiBvcHRpb25zLAorICAgICAgICAgICAgc3RhcnRUaW1l
OiBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLAorICAgICAgICAgICAgZHVyYXRpb246IG9wdGlvbnMu
ZHVyYXRpb24sCisgICAgICAgICAgICB0d2VlbnM6IFtdLAorICAgICAgICAgICAgY3JlYXRlVHdl
ZW46IGZ1bmN0aW9uKCBwcm9wLCBlbmQgKSB7CisgICAgICAgICAgICAgICAgdmFyIHR3ZWVuID0g
alF1ZXJ5LlR3ZWVuKCBlbGVtLCBhbmltYXRpb24ub3B0cywgcHJvcCwgZW5kLAorICAgICAgICAg
ICAgICAgICAgICAgICAgYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFu
aW1hdGlvbi5vcHRzLmVhc2luZyApOworICAgICAgICAgICAgICAgIGFuaW1hdGlvbi50d2VlbnMu
cHVzaCggdHdlZW4gKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHdlZW47CisgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24oIGdvdG9FbmQgKSB7CisgICAgICAgICAg
ICAgICAgdmFyIGluZGV4ID0gMCwKKworICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUg
Z29pbmcgdG8gdGhlIGVuZCwgd2Ugd2FudCB0byBydW4gYWxsIHRoZSB0d2VlbnMKKyAgICAgICAg
ICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHdlIHNraXAgdGhpcyBwYXJ0CisgICAgICAgICAgICAg
ICAgICAgIGxlbmd0aCA9IGdvdG9FbmQgPyBhbmltYXRpb24udHdlZW5zLmxlbmd0aCA6IDA7Cisg
ICAgICAgICAgICAgICAgaWYgKCBzdG9wcGVkICkgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3RvcHBlZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgZm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHsK
KyAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIDEgKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBSZXNvbHZlIHdoZW4gd2Ug
cGxheWVkIHRoZSBsYXN0IGZyYW1lOyBvdGhlcndpc2UsIHJlamVjdAorICAgICAgICAgICAgICAg
IGlmICggZ290b0VuZCApIHsKKyAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQubm90aWZ5V2l0
aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApOworICAgICAgICAgICAgICAgICAgICBkZWZl
cnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApOworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlamVjdFdp
dGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9CisgICAgICAgIH0gKSwK
KyAgICAgICAgcHJvcHMgPSBhbmltYXRpb24ucHJvcHM7CisKKyAgICBwcm9wRmlsdGVyKCBwcm9w
cywgYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZyApOworCisgICAgZm9yICggOyBpbmRleCA8
IGxlbmd0aDsgaW5kZXgrKyApIHsKKyAgICAgICAgcmVzdWx0ID0gQW5pbWF0aW9uLnByZWZpbHRl
cnNbIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBlbGVtLCBwcm9wcywgYW5pbWF0aW9uLm9wdHMg
KTsKKyAgICAgICAgaWYgKCByZXN1bHQgKSB7CisgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1
bmN0aW9uKCByZXN1bHQuc3RvcCApICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5fcXVldWVI
b29rcyggYW5pbWF0aW9uLmVsZW0sIGFuaW1hdGlvbi5vcHRzLnF1ZXVlICkuc3RvcCA9CisgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5wcm94eSggcmVzdWx0LnN0b3AsIHJlc3VsdCApOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGpRdWVyeS5tYXAoIHByb3BzLCBjcmVhdGVUd2VlbiwgYW5pbWF0aW9uICk7CisKKyAg
ICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFydCApICkgeworICAg
ICAgICBhbmltYXRpb24ub3B0cy5zdGFydC5jYWxsKCBlbGVtLCBhbmltYXRpb24gKTsKKyAgICB9
CisKKyAgICBqUXVlcnkuZngudGltZXIoCisgICAgICAgIGpRdWVyeS5leHRlbmQoIHRpY2ssIHsK
KyAgICAgICAgICAgIGVsZW06IGVsZW0sCisgICAgICAgICAgICBhbmltOiBhbmltYXRpb24sCisg
ICAgICAgICAgICBxdWV1ZTogYW5pbWF0aW9uLm9wdHMucXVldWUKKyAgICAgICAgfSApCisgICAg
KTsKKworICAgIC8vIGF0dGFjaCBjYWxsYmFja3MgZnJvbSBvcHRpb25zCisgICAgcmV0dXJuIGFu
aW1hdGlvbi5wcm9ncmVzcyggYW5pbWF0aW9uLm9wdHMucHJvZ3Jlc3MgKQorICAgICAgICAuZG9u
ZSggYW5pbWF0aW9uLm9wdHMuZG9uZSwgYW5pbWF0aW9uLm9wdHMuY29tcGxldGUgKQorICAgICAg
ICAuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApCisgICAgICAgIC5hbHdheXMoIGFuaW1hdGlv
bi5vcHRzLmFsd2F5cyApOworfQorCitqUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVuZCgg
QW5pbWF0aW9uLCB7CisKKyAgICB0d2VlbmVyczogeworICAgICAgICAiKiI6IFsgZnVuY3Rpb24o
IHByb3AsIHZhbHVlICkgeworICAgICAgICAgICAgdmFyIHR3ZWVuID0gdGhpcy5jcmVhdGVUd2Vl
biggcHJvcCwgdmFsdWUgKTsKKyAgICAgICAgICAgIGFkanVzdENTUyggdHdlZW4uZWxlbSwgcHJv
cCwgcmNzc051bS5leGVjKCB2YWx1ZSApLCB0d2VlbiApOworICAgICAgICAgICAgcmV0dXJuIHR3
ZWVuOworICAgICAgICB9IF0KKyAgICB9LAorCisgICAgdHdlZW5lcjogZnVuY3Rpb24oIHByb3Bz
LCBjYWxsYmFjayApIHsKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcHJvcHMgKSAp
IHsKKyAgICAgICAgICAgIGNhbGxiYWNrID0gcHJvcHM7CisgICAgICAgICAgICBwcm9wcyA9IFsg
IioiIF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcm9wcyA9IHByb3BzLm1hdGNo
KCBybm90aHRtbHdoaXRlICk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgcHJvcCwKKyAgICAg
ICAgICAgIGluZGV4ID0gMCwKKyAgICAgICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDsKKwor
ICAgICAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkgeworICAgICAgICAgICAg
cHJvcCA9IHByb3BzWyBpbmRleCBdOworICAgICAgICAgICAgQW5pbWF0aW9uLnR3ZWVuZXJzWyBw
cm9wIF0gPSBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXTsKKyAgICAgICAgICAgIEFu
aW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdLnVuc2hpZnQoIGNhbGxiYWNrICk7CisgICAgICAgIH0K
KyAgICB9LAorCisgICAgcHJlZmlsdGVyczogWyBkZWZhdWx0UHJlZmlsdGVyIF0sCisKKyAgICBw
cmVmaWx0ZXI6IGZ1bmN0aW9uKCBjYWxsYmFjaywgcHJlcGVuZCApIHsKKyAgICAgICAgaWYgKCBw
cmVwZW5kICkgeworICAgICAgICAgICAgQW5pbWF0aW9uLnByZWZpbHRlcnMudW5zaGlmdCggY2Fs
bGJhY2sgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFuaW1hdGlvbi5wcmVmaWx0
ZXJzLnB1c2goIGNhbGxiYWNrICk7CisgICAgICAgIH0KKyAgICB9Cit9ICk7CisKK2pRdWVyeS5z
cGVlZCA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBmbiApIHsKKyAgICB2YXIgb3B0ID0gc3Bl
ZWQgJiYgdHlwZW9mIHNwZWVkID09PSAib2JqZWN0IiA/IGpRdWVyeS5leHRlbmQoIHt9LCBzcGVl
ZCApIDogeworICAgICAgICBjb21wbGV0ZTogZm4gfHwgIWZuICYmIGVhc2luZyB8fAorICAgICAg
ICAgICAgalF1ZXJ5LmlzRnVuY3Rpb24oIHNwZWVkICkgJiYgc3BlZWQsCisgICAgICAgIGR1cmF0
aW9uOiBzcGVlZCwKKyAgICAgICAgZWFzaW5nOiBmbiAmJiBlYXNpbmcgfHwgZWFzaW5nICYmICFq
UXVlcnkuaXNGdW5jdGlvbiggZWFzaW5nICkgJiYgZWFzaW5nCisgICAgfTsKKworICAgIC8vIEdv
IHRvIHRoZSBlbmQgc3RhdGUgaWYgZnggYXJlIG9mZiBvciBpZiBkb2N1bWVudCBpcyBoaWRkZW4K
KyAgICBpZiAoIGpRdWVyeS5meC5vZmYgfHwgZG9jdW1lbnQuaGlkZGVuICkgeworICAgICAgICBv
cHQuZHVyYXRpb24gPSAwOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCB0eXBlb2Ygb3B0
LmR1cmF0aW9uICE9PSAibnVtYmVyIiApIHsKKyAgICAgICAgICAgIGlmICggb3B0LmR1cmF0aW9u
IGluIGpRdWVyeS5meC5zcGVlZHMgKSB7CisgICAgICAgICAgICAgICAgb3B0LmR1cmF0aW9uID0g
alF1ZXJ5LmZ4LnNwZWVkc1sgb3B0LmR1cmF0aW9uIF07CisKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgb3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkcy5fZGVmYXVs
dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5vcm1hbGl6ZSBv
cHQucXVldWUgLSB0cnVlL3VuZGVmaW5lZC9udWxsIC0+ICJmeCIKKyAgICBpZiAoIG9wdC5xdWV1
ZSA9PSBudWxsIHx8IG9wdC5xdWV1ZSA9PT0gdHJ1ZSApIHsKKyAgICAgICAgb3B0LnF1ZXVlID0g
ImZ4IjsKKyAgICB9CisKKyAgICAvLyBRdWV1ZWluZworICAgIG9wdC5vbGQgPSBvcHQuY29tcGxl
dGU7CisKKyAgICBvcHQuY29tcGxldGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCBqUXVl
cnkuaXNGdW5jdGlvbiggb3B0Lm9sZCApICkgeworICAgICAgICAgICAgb3B0Lm9sZC5jYWxsKCB0
aGlzICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIG9wdC5xdWV1ZSApIHsKKyAgICAgICAg
ICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCBvcHQucXVldWUgKTsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICByZXR1cm4gb3B0OworfTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworICAgIGZhZGVU
bzogZnVuY3Rpb24oIHNwZWVkLCB0bywgZWFzaW5nLCBjYWxsYmFjayApIHsKKworICAgICAgICAv
LyBTaG93IGFueSBoaWRkZW4gZWxlbWVudHMgYWZ0ZXIgc2V0dGluZyBvcGFjaXR5IHRvIDAKKyAg
ICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKCBpc0hpZGRlbldpdGhpblRyZWUgKS5jc3MoICJvcGFj
aXR5IiwgMCApLnNob3coKQorCisgICAgICAgICAgICAvLyBBbmltYXRlIHRvIHRoZSB2YWx1ZSBz
cGVjaWZpZWQKKyAgICAgICAgICAgIC5lbmQoKS5hbmltYXRlKCB7IG9wYWNpdHk6IHRvIH0sIHNw
ZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7CisgICAgfSwKKyAgICBhbmltYXRlOiBmdW5jdGlvbigg
cHJvcCwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7CisgICAgICAgIHZhciBlbXB0eSA9IGpR
dWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wICksCisgICAgICAgICAgICBvcHRhbGwgPSBqUXVlcnku
c3BlZWQoIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksCisgICAgICAgICAgICBkb0FuaW1hdGlv
biA9IGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAgICAgLy8gT3BlcmF0ZSBvbiBhIGNvcHkg
b2YgcHJvcCBzbyBwZXItcHJvcGVydHkgZWFzaW5nIHdvbid0IGJlIGxvc3QKKyAgICAgICAgICAg
ICAgICB2YXIgYW5pbSA9IEFuaW1hdGlvbiggdGhpcywgalF1ZXJ5LmV4dGVuZCgge30sIHByb3Ag
KSwgb3B0YWxsICk7CisKKyAgICAgICAgICAgICAgICAvLyBFbXB0eSBhbmltYXRpb25zLCBvciBm
aW5pc2hpbmcgcmVzb2x2ZXMgaW1tZWRpYXRlbHkKKyAgICAgICAgICAgICAgICBpZiAoIGVtcHR5
IHx8IGRhdGFQcml2LmdldCggdGhpcywgImZpbmlzaCIgKSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgYW5pbS5zdG9wKCB0cnVlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgIGRvQW5pbWF0aW9uLmZpbmlzaCA9IGRvQW5pbWF0aW9uOworCisgICAgICAg
IHJldHVybiBlbXB0eSB8fCBvcHRhbGwucXVldWUgPT09IGZhbHNlID8KKyAgICAgICAgICAgIHRo
aXMuZWFjaCggZG9BbmltYXRpb24gKSA6CisgICAgICAgICAgICB0aGlzLnF1ZXVlKCBvcHRhbGwu
cXVldWUsIGRvQW5pbWF0aW9uICk7CisgICAgfSwKKyAgICBzdG9wOiBmdW5jdGlvbiggdHlwZSwg
Y2xlYXJRdWV1ZSwgZ290b0VuZCApIHsKKyAgICAgICAgdmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9u
KCBob29rcyApIHsKKyAgICAgICAgICAgIHZhciBzdG9wID0gaG9va3Muc3RvcDsKKyAgICAgICAg
ICAgIGRlbGV0ZSBob29rcy5zdG9wOworICAgICAgICAgICAgc3RvcCggZ290b0VuZCApOworICAg
ICAgICB9OworCisgICAgICAgIGlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmciICkgeworICAg
ICAgICAgICAgZ290b0VuZCA9IGNsZWFyUXVldWU7CisgICAgICAgICAgICBjbGVhclF1ZXVlID0g
dHlwZTsKKyAgICAgICAgICAgIHR5cGUgPSB1bmRlZmluZWQ7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCBjbGVhclF1ZXVlICYmIHR5cGUgIT09IGZhbHNlICkgeworICAgICAgICAgICAgdGhpcy5x
dWV1ZSggdHlwZSB8fCAiZngiLCBbXSApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRo
aXMuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgZGVxdWV1ZSA9IHRydWUsCisg
ICAgICAgICAgICAgICAgaW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArICJxdWV1ZUhvb2tz
IiwKKyAgICAgICAgICAgICAgICB0aW1lcnMgPSBqUXVlcnkudGltZXJzLAorICAgICAgICAgICAg
ICAgIGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKTsKKworICAgICAgICAgICAgaWYgKCBpbmRl
eCApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXgg
XS5zdG9wICkgeworICAgICAgICAgICAgICAgICAgICBzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0g
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGZvciAoIGluZGV4IGluIGRhdGEgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggZGF0
YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgJiYgcnJ1bi50ZXN0KCBpbmRleCApICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJgorICAg
ICAgICAgICAgICAgICAgICAoIHR5cGUgPT0gbnVsbCB8fCB0aW1lcnNbIGluZGV4IF0ucXVldWUg
PT09IHR5cGUgKSApIHsKKworICAgICAgICAgICAgICAgICAgICB0aW1lcnNbIGluZGV4IF0uYW5p
bS5zdG9wKCBnb3RvRW5kICk7CisgICAgICAgICAgICAgICAgICAgIGRlcXVldWUgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgdGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBuZXh0
IGluIHRoZSBxdWV1ZSBpZiB0aGUgbGFzdCBzdGVwIHdhc24ndCBmb3JjZWQuCisgICAgICAgICAg
ICAvLyBUaW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVpciBjb21wbGV0ZSBjYWxsYmFja3Ms
IHdoaWNoCisgICAgICAgICAgICAvLyB3aWxsIGRlcXVldWUgYnV0IG9ubHkgaWYgdGhleSB3ZXJl
IGdvdG9FbmQuCisgICAgICAgICAgICBpZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7CisgICAg
ICAgICAgICAgICAgalF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSApOworICAgIH0sCisgICAgZmluaXNoOiBmdW5jdGlvbiggdHlwZSApIHsKKyAg
ICAgICAgaWYgKCB0eXBlICE9PSBmYWxzZSApIHsKKyAgICAgICAgICAgIHR5cGUgPSB0eXBlIHx8
ICJmeCI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICB2YXIgaW5kZXgsCisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFQcml2
LmdldCggdGhpcyApLAorICAgICAgICAgICAgICAgIHF1ZXVlID0gZGF0YVsgdHlwZSArICJxdWV1
ZSIgXSwKKyAgICAgICAgICAgICAgICBob29rcyA9IGRhdGFbIHR5cGUgKyAicXVldWVIb29rcyIg
XSwKKyAgICAgICAgICAgICAgICB0aW1lcnMgPSBqUXVlcnkudGltZXJzLAorICAgICAgICAgICAg
ICAgIGxlbmd0aCA9IHF1ZXVlID8gcXVldWUubGVuZ3RoIDogMDsKKworICAgICAgICAgICAgLy8g
RW5hYmxlIGZpbmlzaGluZyBmbGFnIG9uIHByaXZhdGUgZGF0YQorICAgICAgICAgICAgZGF0YS5m
aW5pc2ggPSB0cnVlOworCisgICAgICAgICAgICAvLyBFbXB0eSB0aGUgcXVldWUgZmlyc3QKKyAg
ICAgICAgICAgIGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgW10gKTsKKworICAgICAgICAgICAg
aWYgKCBob29rcyAmJiBob29rcy5zdG9wICkgeworICAgICAgICAgICAgICAgIGhvb2tzLnN0b3Au
Y2FsbCggdGhpcywgdHJ1ZSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBMb29r
IGZvciBhbnkgYWN0aXZlIGFuaW1hdGlvbnMsIGFuZCBmaW5pc2ggdGhlbQorICAgICAgICAgICAg
Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmIHRpbWVyc1sgaW5kZXggXS5x
dWV1ZSA9PT0gdHlwZSApIHsKKyAgICAgICAgICAgICAgICAgICAgdGltZXJzWyBpbmRleCBdLmFu
aW0uc3RvcCggdHJ1ZSApOworICAgICAgICAgICAgICAgICAgICB0aW1lcnMuc3BsaWNlKCBpbmRl
eCwgMSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gTG9vayBmb3IgYW55IGFuaW1hdGlvbnMgaW4gdGhlIG9sZCBxdWV1ZSBhbmQgZmluaXNoIHRo
ZW0KKyAgICAgICAgICAgIGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4Kysg
KSB7CisgICAgICAgICAgICAgICAgaWYgKCBxdWV1ZVsgaW5kZXggXSAmJiBxdWV1ZVsgaW5kZXgg
XS5maW5pc2ggKSB7CisgICAgICAgICAgICAgICAgICAgIHF1ZXVlWyBpbmRleCBdLmZpbmlzaC5j
YWxsKCB0aGlzICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBUdXJuIG9mZiBmaW5pc2hpbmcgZmxhZworICAgICAgICAgICAgZGVsZXRlIGRhdGEu
ZmluaXNoOworICAgICAgICB9ICk7CisgICAgfQorfSApOworCitqUXVlcnkuZWFjaCggWyAidG9n
Z2xlIiwgInNob3ciLCAiaGlkZSIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CisgICAgdmFyIGNz
c0ZuID0galF1ZXJ5LmZuWyBuYW1lIF07CisgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlv
biggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7CisgICAgICAgIHJldHVybiBzcGVlZCA9PSBu
dWxsIHx8IHR5cGVvZiBzcGVlZCA9PT0gImJvb2xlYW4iID8KKyAgICAgICAgICAgIGNzc0ZuLmFw
cGx5KCB0aGlzLCBhcmd1bWVudHMgKSA6CisgICAgICAgICAgICB0aGlzLmFuaW1hdGUoIGdlbkZ4
KCBuYW1lLCB0cnVlICksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7CisgICAgfTsKK30gKTsK
KworLy8gR2VuZXJhdGUgc2hvcnRjdXRzIGZvciBjdXN0b20gYW5pbWF0aW9ucworalF1ZXJ5LmVh
Y2goIHsKKyAgICBzbGlkZURvd246IGdlbkZ4KCAic2hvdyIgKSwKKyAgICBzbGlkZVVwOiBnZW5G
eCggImhpZGUiICksCisgICAgc2xpZGVUb2dnbGU6IGdlbkZ4KCAidG9nZ2xlIiApLAorICAgIGZh
ZGVJbjogeyBvcGFjaXR5OiAic2hvdyIgfSwKKyAgICBmYWRlT3V0OiB7IG9wYWNpdHk6ICJoaWRl
IiB9LAorICAgIGZhZGVUb2dnbGU6IHsgb3BhY2l0eTogInRvZ2dsZSIgfQorfSwgZnVuY3Rpb24o
IG5hbWUsIHByb3BzICkgeworICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVk
LCBlYXNpbmcsIGNhbGxiYWNrICkgeworICAgICAgICByZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9w
cywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKKyAgICB9OworfSApOworCitqUXVlcnkudGlt
ZXJzID0gW107CitqUXVlcnkuZngudGljayA9IGZ1bmN0aW9uKCkgeworICAgIHZhciB0aW1lciwK
KyAgICAgICAgaSA9IDAsCisgICAgICAgIHRpbWVycyA9IGpRdWVyeS50aW1lcnM7CisKKyAgICBm
eE5vdyA9IGpRdWVyeS5ub3coKTsKKworICAgIGZvciAoIDsgaSA8IHRpbWVycy5sZW5ndGg7IGkr
KyApIHsKKyAgICAgICAgdGltZXIgPSB0aW1lcnNbIGkgXTsKKworICAgICAgICAvLyBDaGVja3Mg
dGhlIHRpbWVyIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlbW92ZWQKKyAgICAgICAgaWYgKCAhdGlt
ZXIoKSAmJiB0aW1lcnNbIGkgXSA9PT0gdGltZXIgKSB7CisgICAgICAgICAgICB0aW1lcnMuc3Bs
aWNlKCBpLS0sIDEgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggIXRpbWVycy5sZW5n
dGggKSB7CisgICAgICAgIGpRdWVyeS5meC5zdG9wKCk7CisgICAgfQorICAgIGZ4Tm93ID0gdW5k
ZWZpbmVkOworfTsKKworalF1ZXJ5LmZ4LnRpbWVyID0gZnVuY3Rpb24oIHRpbWVyICkgeworICAg
IGpRdWVyeS50aW1lcnMucHVzaCggdGltZXIgKTsKKyAgICBpZiAoIHRpbWVyKCkgKSB7CisgICAg
ICAgIGpRdWVyeS5meC5zdGFydCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGpRdWVyeS50aW1l
cnMucG9wKCk7CisgICAgfQorfTsKKworalF1ZXJ5LmZ4LmludGVydmFsID0gMTM7CitqUXVlcnku
Znguc3RhcnQgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAoICF0aW1lcklkICkgeworICAgICAgICB0
aW1lcklkID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA/CisgICAgICAgICAgICB3aW5k
b3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCByYWYgKSA6CisgICAgICAgICAgICB3aW5kb3cuc2V0
SW50ZXJ2YWwoIGpRdWVyeS5meC50aWNrLCBqUXVlcnkuZnguaW50ZXJ2YWwgKTsKKyAgICB9Cit9
OworCitqUXVlcnkuZnguc3RvcCA9IGZ1bmN0aW9uKCkgeworICAgIGlmICggd2luZG93LmNhbmNl
bEFuaW1hdGlvbkZyYW1lICkgeworICAgICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUo
IHRpbWVySWQgKTsKKyAgICB9IGVsc2UgeworICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCgg
dGltZXJJZCApOworICAgIH0KKworICAgIHRpbWVySWQgPSBudWxsOworfTsKKworalF1ZXJ5LmZ4
LnNwZWVkcyA9IHsKKyAgICBzbG93OiA2MDAsCisgICAgZmFzdDogMjAwLAorCisgICAgLy8gRGVm
YXVsdCBzcGVlZAorICAgIF9kZWZhdWx0OiA0MDAKK307CisKKworLy8gQmFzZWQgb2ZmIG9mIHRo
ZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLgorLy8gaHR0cHM6Ly93
ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTAwMzI0MDE0NzQ3L2h0dHA6Ly9ibGluZHNpZ25hbHMuY29t
L2luZGV4LnBocC8yMDA5LzA3L2pxdWVyeS1kZWxheS8KK2pRdWVyeS5mbi5kZWxheSA9IGZ1bmN0
aW9uKCB0aW1lLCB0eXBlICkgeworICAgIHRpbWUgPSBqUXVlcnkuZnggPyBqUXVlcnkuZnguc3Bl
ZWRzWyB0aW1lIF0gfHwgdGltZSA6IHRpbWU7CisgICAgdHlwZSA9IHR5cGUgfHwgImZ4IjsKKwor
ICAgIHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlLCBmdW5jdGlvbiggbmV4dCwgaG9va3MgKSB7Cisg
ICAgICAgIHZhciB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoIG5leHQsIHRpbWUgKTsKKyAg
ICAgICAgaG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgd2luZG93LmNsZWFy
VGltZW91dCggdGltZW91dCApOworICAgICAgICB9OworICAgIH0gKTsKK307CisKKworKCBmdW5j
dGlvbigpIHsKKyAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiaW5wdXQi
ICksCisgICAgICAgIHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJzZWxlY3QiICks
CisgICAgICAgIG9wdCA9IHNlbGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCggIm9wdGlvbiIgKSApOworCisgICAgaW5wdXQudHlwZSA9ICJjaGVja2JveCI7CisKKyAgICAv
LyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4zIG9ubHkKKyAgICAvLyBEZWZhdWx0IHZhbHVlIGZvciBh
IGNoZWNrYm94IHNob3VsZCBiZSAib24iCisgICAgc3VwcG9ydC5jaGVja09uID0gaW5wdXQudmFs
dWUgIT09ICIiOworCisgICAgLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5CisgICAgLy8gTXVzdCBh
Y2Nlc3Mgc2VsZWN0ZWRJbmRleCB0byBtYWtlIGRlZmF1bHQgb3B0aW9ucyBzZWxlY3QKKyAgICBz
dXBwb3J0Lm9wdFNlbGVjdGVkID0gb3B0LnNlbGVjdGVkOworCisgICAgLy8gU3VwcG9ydDogSUUg
PD0xMSBvbmx5CisgICAgLy8gQW4gaW5wdXQgbG9zZXMgaXRzIHZhbHVlIGFmdGVyIGJlY29taW5n
IGEgcmFkaW8KKyAgICBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJpbnB1dCIgKTsK
KyAgICBpbnB1dC52YWx1ZSA9ICJ0IjsKKyAgICBpbnB1dC50eXBlID0gInJhZGlvIjsKKyAgICBz
dXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gInQiOworfSApKCk7CisKKwordmFy
IGJvb2xIb29rLAorICAgIGF0dHJIYW5kbGUgPSBqUXVlcnkuZXhwci5hdHRySGFuZGxlOworCitq
UXVlcnkuZm4uZXh0ZW5kKCB7CisgICAgYXR0cjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgewor
ICAgICAgICByZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwgbmFtZSwgdmFsdWUsIGFy
Z3VtZW50cy5sZW5ndGggPiAxICk7CisgICAgfSwKKworICAgIHJlbW92ZUF0dHI6IGZ1bmN0aW9u
KCBuYW1lICkgeworICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgIGpRdWVyeS5yZW1vdmVBdHRyKCB0aGlzLCBuYW1lICk7CisgICAgICAgIH0gKTsKKyAg
ICB9Cit9ICk7CisKK2pRdWVyeS5leHRlbmQoIHsKKyAgICBhdHRyOiBmdW5jdGlvbiggZWxlbSwg
bmFtZSwgdmFsdWUgKSB7CisgICAgICAgIHZhciByZXQsIGhvb2tzLAorICAgICAgICAgICAgblR5
cGUgPSBlbGVtLm5vZGVUeXBlOworCisgICAgICAgIC8vIERvbid0IGdldC9zZXQgYXR0cmlidXRl
cyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXMKKyAgICAgICAgaWYgKCBuVHlw
ZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRy
aWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkCisgICAgICAgIGlmICggdHlwZW9mIGVsZW0uZ2V0QXR0
cmlidXRlID09PSAidW5kZWZpbmVkIiApIHsKKyAgICAgICAgICAgIHJldHVybiBqUXVlcnkucHJv
cCggZWxlbSwgbmFtZSwgdmFsdWUgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEF0dHJpYnV0
ZSBob29rcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgbG93ZXJjYXNlIHZlcnNpb24KKyAgICAgICAg
Ly8gR3JhYiBuZWNlc3NhcnkgaG9vayBpZiBvbmUgaXMgZGVmaW5lZAorICAgICAgICBpZiAoIG5U
eXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHsKKyAgICAgICAgICAgIGhv
b2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHwKKyAgICAgICAg
ICAgICAgICAoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdCggbmFtZSApID8gYm9vbEhvb2sg
OiB1bmRlZmluZWQgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggdmFsdWUgIT09IHVuZGVm
aW5lZCApIHsKKyAgICAgICAgICAgIGlmICggdmFsdWUgPT09IG51bGwgKSB7CisgICAgICAgICAg
ICAgICAgalF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggaG9va3MgJiYgInNldCIg
aW4gaG9va3MgJiYKKyAgICAgICAgICAgICAgICAoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFs
dWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJl
dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUs
IHZhbHVlICsgIiIgKTsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQo
IGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkgeworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIG5hbWUgKTsK
KworICAgICAgICAvLyBOb24tZXhpc3RlbnQgYXR0cmlidXRlcyByZXR1cm4gbnVsbCwgd2Ugbm9y
bWFsaXplIHRvIHVuZGVmaW5lZAorICAgICAgICByZXR1cm4gcmV0ID09IG51bGwgPyB1bmRlZmlu
ZWQgOiByZXQ7CisgICAgfSwKKworICAgIGF0dHJIb29rczogeworICAgICAgICB0eXBlOiB7Cisg
ICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAg
ICBpZiAoICFzdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFsdWUgPT09ICJyYWRpbyIgJiYKKyAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaW5wdXQiICkgKSB7CisgICAg
ICAgICAgICAgICAgICAgIHZhciB2YWwgPSBlbGVtLnZhbHVlOworICAgICAgICAgICAgICAgICAg
ICBlbGVtLnNldEF0dHJpYnV0ZSggInR5cGUiLCB2YWx1ZSApOworICAgICAgICAgICAgICAgICAg
ICBpZiAoIHZhbCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0udmFsdWUgPSB2YWw7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisK
KyAgICByZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CisgICAgICAgIHZhciBu
YW1lLAorICAgICAgICAgICAgaSA9IDAsCisKKyAgICAgICAgICAgIC8vIEF0dHJpYnV0ZSBuYW1l
cyBjYW4gY29udGFpbiBub24tSFRNTCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMKKyAgICAgICAgICAg
IC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2F0
dHJpYnV0ZXMtMgorICAgICAgICAgICAgYXR0ck5hbWVzID0gdmFsdWUgJiYgdmFsdWUubWF0Y2go
IHJub3RodG1sd2hpdGUgKTsKKworICAgICAgICBpZiAoIGF0dHJOYW1lcyAmJiBlbGVtLm5vZGVU
eXBlID09PSAxICkgeworICAgICAgICAgICAgd2hpbGUgKCAoIG5hbWUgPSBhdHRyTmFtZXNbIGkr
KyBdICkgKSB7CisgICAgICAgICAgICAgICAgZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIG5hbWUgKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30gKTsKKworLy8gSG9va3MgZm9yIGJv
b2xlYW4gYXR0cmlidXRlcworYm9vbEhvb2sgPSB7CisgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwg
dmFsdWUsIG5hbWUgKSB7CisgICAgICAgIGlmICggdmFsdWUgPT09IGZhbHNlICkgeworCisgICAg
ICAgICAgICAvLyBSZW1vdmUgYm9vbGVhbiBhdHRyaWJ1dGVzIHdoZW4gc2V0IHRvIGZhbHNlCisg
ICAgICAgICAgICBqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUgKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9Cit9OworCitqUXVlcnkuZWFjaCggalF1
ZXJ5LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goIC9cdysvZyApLCBmdW5jdGlvbiggaSwg
bmFtZSApIHsKKyAgICB2YXIgZ2V0dGVyID0gYXR0ckhhbmRsZVsgbmFtZSBdIHx8IGpRdWVyeS5m
aW5kLmF0dHI7CisKKyAgICBhdHRySGFuZGxlWyBuYW1lIF0gPSBmdW5jdGlvbiggZWxlbSwgbmFt
ZSwgaXNYTUwgKSB7CisgICAgICAgIHZhciByZXQsIGhhbmRsZSwKKyAgICAgICAgICAgIGxvd2Vy
Y2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7CisKKyAgICAgICAgaWYgKCAhaXNYTUwgKSB7
CisKKyAgICAgICAgICAgIC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3AgYnkgdGVtcG9yYXJpbHkg
cmVtb3ZpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIHRoZSBnZXR0ZXIKKyAgICAgICAgICAgIGhhbmRs
ZSA9IGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXTsKKyAgICAgICAgICAgIGF0dHJIYW5kbGVb
IGxvd2VyY2FzZU5hbWUgXSA9IHJldDsKKyAgICAgICAgICAgIHJldCA9IGdldHRlciggZWxlbSwg
bmFtZSwgaXNYTUwgKSAhPSBudWxsID8KKyAgICAgICAgICAgICAgICBsb3dlcmNhc2VOYW1lIDoK
KyAgICAgICAgICAgICAgICBudWxsOworICAgICAgICAgICAgYXR0ckhhbmRsZVsgbG93ZXJjYXNl
TmFtZSBdID0gaGFuZGxlOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfTsK
K30gKTsKKworCisKKwordmFyIHJmb2N1c2FibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJl
YXxidXR0b24pJC9pLAorICAgIHJjbGlja2FibGUgPSAvXig/OmF8YXJlYSkkL2k7CisKK2pRdWVy
eS5mbi5leHRlbmQoIHsKKyAgICBwcm9wOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7CisgICAg
ICAgIHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5wcm9wLCBuYW1lLCB2YWx1ZSwgYXJndW1l
bnRzLmxlbmd0aCA+IDEgKTsKKyAgICB9LAorCisgICAgcmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5h
bWUgKSB7CisgICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgZGVsZXRlIHRoaXNbIGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZSBdOworICAgICAg
ICB9ICk7CisgICAgfQorfSApOworCitqUXVlcnkuZXh0ZW5kKCB7CisgICAgcHJvcDogZnVuY3Rp
b24oIGVsZW0sIG5hbWUsIHZhbHVlICkgeworICAgICAgICB2YXIgcmV0LCBob29rcywKKyAgICAg
ICAgICAgIG5UeXBlID0gZWxlbS5ub2RlVHlwZTsKKworICAgICAgICAvLyBEb24ndCBnZXQvc2V0
IHByb3BlcnRpZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzCisgICAgICAg
IGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIG5UeXBlICE9PSAxIHx8
ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHsKKworICAgICAgICAgICAgLy8gRml4IG5hbWUg
YW5kIGF0dGFjaCBob29rcworICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1l
IF0gfHwgbmFtZTsKKyAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBd
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgeworICAg
ICAgICAgICAgaWYgKCBob29rcyAmJiAic2V0IiBpbiBob29rcyAmJgorICAgICAgICAgICAgICAg
ICggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCAp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICByZXR1cm4gKCBlbGVtWyBuYW1lIF0gPSB2YWx1ZSApOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxl
bSwgbmFtZSApICkgIT09IG51bGwgKSB7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIGVsZW1bIG5hbWUgXTsKKyAgICB9LAorCisgICAgcHJvcEhv
b2tzOiB7CisgICAgICAgIHRhYkluZGV4OiB7CisgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBl
bGVtICkgeworCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seQor
ICAgICAgICAgICAgICAgIC8vIGVsZW0udGFiSW5kZXggZG9lc24ndCBhbHdheXMgcmV0dXJuIHRo
ZQorICAgICAgICAgICAgICAgIC8vIGNvcnJlY3QgdmFsdWUgd2hlbiBpdCBoYXNuJ3QgYmVlbiBl
eHBsaWNpdGx5IHNldAorICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vd2ViLmFyY2hpdmUub3Jn
L3dlYi8yMDE0MTExNjIzMzM0Ny9odHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9ibG9nLzIwMDgvMDEv
MDkvZ2V0dGluZy1zZXR0aW5nLWFuZC1yZW1vdmluZy10YWJpbmRleC12YWx1ZXMtd2l0aC1qYXZh
c2NyaXB0LworICAgICAgICAgICAgICAgIC8vIFVzZSBwcm9wZXIgYXR0cmlidXRlIHJldHJpZXZh
bCgjMTIwNzIpCisgICAgICAgICAgICAgICAgdmFyIHRhYmluZGV4ID0galF1ZXJ5LmZpbmQuYXR0
ciggZWxlbSwgInRhYmluZGV4IiApOworCisgICAgICAgICAgICAgICAgaWYgKCB0YWJpbmRleCAp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KCB0YWJpbmRleCwgMTAgKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoCisgICAgICAgICAgICAg
ICAgICAgIHJmb2N1c2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApIHx8CisgICAgICAgICAgICAg
ICAgICAgIHJjbGlja2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmCisgICAgICAgICAgICAg
ICAgICAgIGVsZW0uaHJlZgorICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4g
LTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LAorCisgICAgcHJvcEZpeDogewor
ICAgICAgICAiZm9yIjogImh0bWxGb3IiLAorICAgICAgICAiY2xhc3MiOiAiY2xhc3NOYW1lIgor
ICAgIH0KK30gKTsKKworLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5CisvLyBBY2Nlc3NpbmcgdGhl
IHNlbGVjdGVkSW5kZXggcHJvcGVydHkKKy8vIGZvcmNlcyB0aGUgYnJvd3NlciB0byByZXNwZWN0
IHNldHRpbmcgc2VsZWN0ZWQKKy8vIG9uIHRoZSBvcHRpb24KKy8vIFRoZSBnZXR0ZXIgZW5zdXJl
cyBhIGRlZmF1bHQgb3B0aW9uIGlzIHNlbGVjdGVkCisvLyB3aGVuIGluIGFuIG9wdGdyb3VwCisv
LyBlc2xpbnQgcnVsZSAibm8tdW51c2VkLWV4cHJlc3Npb25zIiBpcyBkaXNhYmxlZCBmb3IgdGhp
cyBjb2RlCisvLyBzaW5jZSBpdCBjb25zaWRlcnMgc3VjaCBhY2Nlc3Npb25zIG5vb3AKK2lmICgg
IXN1cHBvcnQub3B0U2VsZWN0ZWQgKSB7CisgICAgalF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCA9
IHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKKworICAgICAgICAgICAgLyogZXNs
aW50IG5vLXVudXNlZC1leHByZXNzaW9uczogIm9mZiIgKi8KKworICAgICAgICAgICAgdmFyIHBh
cmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKKyAgICAgICAgICAgIGlmICggcGFyZW50ICYmIHBhcmVu
dC5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgICAgIHBhcmVudC5wYXJlbnROb2RlLnNlbGVj
dGVkSW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAg
ICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSApIHsKKworICAgICAgICAgICAgLyog
ZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogIm9mZiIgKi8KKworICAgICAgICAgICAgdmFy
IHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKKyAgICAgICAgICAgIGlmICggcGFyZW50ICkgewor
ICAgICAgICAgICAgICAgIHBhcmVudC5zZWxlY3RlZEluZGV4OworCisgICAgICAgICAgICAgICAg
aWYgKCBwYXJlbnQucGFyZW50Tm9kZSApIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50LnBh
cmVudE5vZGUuc2VsZWN0ZWRJbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9OworfQorCitqUXVlcnkuZWFjaCggWworICAgICJ0YWJJbmRleCIs
CisgICAgInJlYWRPbmx5IiwKKyAgICAibWF4TGVuZ3RoIiwKKyAgICAiY2VsbFNwYWNpbmciLAor
ICAgICJjZWxsUGFkZGluZyIsCisgICAgInJvd1NwYW4iLAorICAgICJjb2xTcGFuIiwKKyAgICAi
dXNlTWFwIiwKKyAgICAiZnJhbWVCb3JkZXIiLAorICAgICJjb250ZW50RWRpdGFibGUiCitdLCBm
dW5jdGlvbigpIHsKKyAgICBqUXVlcnkucHJvcEZpeFsgdGhpcy50b0xvd2VyQ2FzZSgpIF0gPSB0
aGlzOworfSApOworCisKKworCisgICAgLy8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2Ug
YWNjb3JkaW5nIHRvIEhUTUwgc3BlYworICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5v
cmcvbXVsdGlwYWdlL2luZnJhc3RydWN0dXJlLmh0bWwjc3RyaXAtYW5kLWNvbGxhcHNlLXdoaXRl
c3BhY2UKKyAgICBmdW5jdGlvbiBzdHJpcEFuZENvbGxhcHNlKCB2YWx1ZSApIHsKKyAgICAgICAg
dmFyIHRva2VucyA9IHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107CisgICAgICAg
IHJldHVybiB0b2tlbnMuam9pbiggIiAiICk7CisgICAgfQorCisKK2Z1bmN0aW9uIGdldENsYXNz
KCBlbGVtICkgeworICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSAmJiBlbGVtLmdldEF0dHJp
YnV0ZSggImNsYXNzIiApIHx8ICIiOworfQorCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisgICAgYWRk
Q2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgdmFyIGNsYXNzZXMsIGVsZW0sIGN1
ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLAorICAgICAgICAgICAgaSA9IDA7CisK
KyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkgeworICAgICAgICAgICAgICAgIGpRdWVy
eSggdGhpcyApLmFkZENsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyAp
ICkgKTsKKyAgICAgICAgICAgIH0gKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggdHlwZW9m
IHZhbHVlID09PSAic3RyaW5nIiAmJiB2YWx1ZSApIHsKKyAgICAgICAgICAgIGNsYXNzZXMgPSB2
YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdOworCisgICAgICAgICAgICB3aGlsZSAo
ICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7CisgICAgICAgICAgICAgICAgY3VyVmFsdWUgPSBn
ZXRDbGFzcyggZWxlbSApOworICAgICAgICAgICAgICAgIGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09
IDEgJiYgKCAiICIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgIiAiICk7CisKKyAg
ICAgICAgICAgICAgICBpZiAoIGN1ciApIHsKKyAgICAgICAgICAgICAgICAgICAgaiA9IDA7Cisg
ICAgICAgICAgICAgICAgICAgIHdoaWxlICggKCBjbGF6eiA9IGNsYXNzZXNbIGorKyBdICkgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGN1ci5pbmRleE9mKCAiICIgKyBjbGF6eiAr
ICIgIiApIDwgMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXIgKz0gY2xhenog
KyAiICI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZv
aWQgdW5uZWVkZWQgcmVuZGVyaW5nLgorICAgICAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0g
c3RyaXBBbmRDb2xsYXBzZSggY3VyICk7CisgICAgICAgICAgICAgICAgICAgIGlmICggY3VyVmFs
dWUgIT09IGZpbmFsVmFsdWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNldEF0
dHJpYnV0ZSggImNsYXNzIiwgZmluYWxWYWx1ZSApOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgfSwKKworICAgIHJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7
CisgICAgICAgIHZhciBjbGFzc2VzLCBlbGVtLCBjdXIsIGN1clZhbHVlLCBjbGF6eiwgaiwgZmlu
YWxWYWx1ZSwKKyAgICAgICAgICAgIGkgPSAwOworCisgICAgICAgIGlmICggalF1ZXJ5LmlzRnVu
Y3Rpb24oIHZhbHVlICkgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlv
biggaiApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFzcyggdmFs
dWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7CisgICAgICAgICAgICB9ICk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoICFhcmd1bWVudHMubGVuZ3RoICkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuYXR0ciggImNsYXNzIiwgIiIgKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICggdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJiB2YWx1ZSApIHsKKyAgICAgICAg
ICAgIGNsYXNzZXMgPSB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdOworCisgICAg
ICAgICAgICB3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7CisgICAgICAgICAgICAg
ICAgY3VyVmFsdWUgPSBnZXRDbGFzcyggZWxlbSApOworCisgICAgICAgICAgICAgICAgLy8gVGhp
cyBleHByZXNzaW9uIGlzIGhlcmUgZm9yIGJldHRlciBjb21wcmVzc2liaWxpdHkgKHNlZSBhZGRD
bGFzcykKKyAgICAgICAgICAgICAgICBjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggIiAi
ICsgc3RyaXBBbmRDb2xsYXBzZSggY3VyVmFsdWUgKSArICIgIiApOworCisgICAgICAgICAgICAg
ICAgaWYgKCBjdXIgKSB7CisgICAgICAgICAgICAgICAgICAgIGogPSAwOworICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkgeworCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgKmFsbCogaW5zdGFuY2VzCisgICAgICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAoIGN1ci5pbmRleE9mKCAiICIgKyBjbGF6eiArICIgIiApID4gLTEg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyID0gY3VyLnJlcGxhY2UoICIgIiAr
IGNsYXp6ICsgIiAiLCAiICIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgYXNzaWduIGlmIGRp
ZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuCisgICAgICAgICAgICAgICAgICAg
IGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCBjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW0uc2V0QXR0cmlidXRlKCAiY2xhc3MiLCBmaW5hbFZhbHVlICk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgdG9nZ2xlQ2xhc3M6IGZ1bmN0
aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7CisgICAgICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVl
OworCisgICAgICAgIGlmICggdHlwZW9mIHN0YXRlVmFsID09PSAiYm9vbGVhbiIgJiYgdHlwZSA9
PT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGVWYWwgPyB0aGlzLmFkZENs
YXNzKCB2YWx1ZSApIDogdGhpcy5yZW1vdmVDbGFzcyggdmFsdWUgKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnko
IHRoaXMgKS50b2dnbGVDbGFzcygKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUuY2FsbCggdGhp
cywgaSwgZ2V0Q2xhc3MoIHRoaXMgKSwgc3RhdGVWYWwgKSwKKyAgICAgICAgICAgICAgICAgICAg
c3RhdGVWYWwKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfSApOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2
YXIgY2xhc3NOYW1lLCBpLCBzZWxmLCBjbGFzc05hbWVzOworCisgICAgICAgICAgICBpZiAoIHR5
cGUgPT09ICJzdHJpbmciICkgeworCisgICAgICAgICAgICAgICAgLy8gVG9nZ2xlIGluZGl2aWR1
YWwgY2xhc3MgbmFtZXMKKyAgICAgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgICAgICAgICBz
ZWxmID0galF1ZXJ5KCB0aGlzICk7CisgICAgICAgICAgICAgICAgY2xhc3NOYW1lcyA9IHZhbHVl
Lm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107CisKKyAgICAgICAgICAgICAgICB3aGlsZSAo
ICggY2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSsrIF0gKSApIHsKKworICAgICAgICAgICAgICAg
ICAgICAvLyBDaGVjayBlYWNoIGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwYXJhdGVkIGxpc3QK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCBzZWxmLmhhc0NsYXNzKCBjbGFzc05hbWUgKSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlQ2xhc3MoIGNsYXNzTmFtZSApOwor
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5hZGRDbGFzcyggY2xhc3NOYW1lICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRvZ2dsZSB3aG9sZSBjbGFzcyBuYW1lCisgICAg
ICAgICAgICB9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGUgPT09ICJib29s
ZWFuIiApIHsKKyAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSBnZXRDbGFzcyggdGhpcyApOwor
ICAgICAgICAgICAgICAgIGlmICggY2xhc3NOYW1lICkgeworCisgICAgICAgICAgICAgICAgICAg
IC8vIFN0b3JlIGNsYXNzTmFtZSBpZiBzZXQKKyAgICAgICAgICAgICAgICAgICAgZGF0YVByaXYu
c2V0KCB0aGlzLCAiX19jbGFzc05hbWVfXyIsIGNsYXNzTmFtZSApOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGhhcyBhIGNsYXNzIG5hbWUg
b3IgaWYgd2UncmUgcGFzc2VkIGBmYWxzZWAsCisgICAgICAgICAgICAgICAgLy8gdGhlbiByZW1v
dmUgdGhlIHdob2xlIGNsYXNzbmFtZSAoaWYgdGhlcmUgd2FzIG9uZSwgdGhlIGFib3ZlIHNhdmVk
IGl0KS4KKyAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgYnJpbmcgYmFjayB3aGF0ZXZlciB3
YXMgcHJldmlvdXNseSBzYXZlZCAoaWYgYW55dGhpbmcpLAorICAgICAgICAgICAgICAgIC8vIGZh
bGxpbmcgYmFjayB0byB0aGUgZW1wdHkgc3RyaW5nIGlmIG5vdGhpbmcgd2FzIHN0b3JlZC4KKyAg
ICAgICAgICAgICAgICBpZiAoIHRoaXMuc2V0QXR0cmlidXRlICkgeworICAgICAgICAgICAgICAg
ICAgICB0aGlzLnNldEF0dHJpYnV0ZSggImNsYXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0gZmFsc2UgPworICAgICAgICAgICAgICAgICAgICAgICAg
IiIgOgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVByaXYuZ2V0KCB0aGlzLCAiX19jbGFz
c05hbWVfXyIgKSB8fCAiIgorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOworICAgIH0sCisKKyAgICBoYXNDbGFzczog
ZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAgICB2YXIgY2xhc3NOYW1lLCBlbGVtLAorICAg
ICAgICAgICAgaSA9IDA7CisKKyAgICAgICAgY2xhc3NOYW1lID0gIiAiICsgc2VsZWN0b3IgKyAi
ICI7CisgICAgICAgIHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHsKKyAgICAgICAg
ICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJgorICAgICAgICAgICAgICAgICggIiAiICsg
c3RyaXBBbmRDb2xsYXBzZSggZ2V0Q2xhc3MoIGVsZW0gKSApICsgIiAiICkuaW5kZXhPZiggY2xh
c3NOYW1lICkgPiAtMSApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfSAp
OworCisKKworCit2YXIgcnJldHVybiA9IC9cci9nOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7Cisg
ICAgdmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgIHZhciBob29rcywgcmV0LCBpc0Z1
bmN0aW9uLAorICAgICAgICAgICAgZWxlbSA9IHRoaXNbIDAgXTsKKworICAgICAgICBpZiAoICFh
cmd1bWVudHMubGVuZ3RoICkgeworICAgICAgICAgICAgaWYgKCBlbGVtICkgeworICAgICAgICAg
ICAgICAgIGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyBlbGVtLnR5cGUgXSB8fAorICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBd
OworCisgICAgICAgICAgICAgICAgaWYgKCBob29rcyAmJgorICAgICAgICAgICAgICAgICAgICAi
Z2V0IiBpbiBob29rcyAmJgorICAgICAgICAgICAgICAgICAgICAoIHJldCA9IGhvb2tzLmdldCgg
ZWxlbSwgInZhbHVlIiApICkgIT09IHVuZGVmaW5lZAorICAgICAgICAgICAgICAgICkgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIHJldCA9IGVsZW0udmFsdWU7CisKKyAgICAgICAgICAgICAgICAvLyBIYW5kbGUg
bW9zdCBjb21tb24gc3RyaW5nIGNhc2VzCisgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgcmV0
ID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldC5yZXBsYWNl
KCBycmV0dXJuLCAiIiApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8v
IEhhbmRsZSBjYXNlcyB3aGVyZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9yIG51bWJlcgorICAgICAg
ICAgICAgICAgIHJldHVybiByZXQgPT0gbnVsbCA/ICIiIDogcmV0OworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpc0Z1bmN0aW9uID0g
alF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICk7CisKKyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCgg
ZnVuY3Rpb24oIGkgKSB7CisgICAgICAgICAgICB2YXIgdmFsOworCisgICAgICAgICAgICBpZiAo
IHRoaXMubm9kZVR5cGUgIT09IDEgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGlzRnVuY3Rpb24gKSB7CisgICAgICAgICAgICAg
ICAgdmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgalF1ZXJ5KCB0aGlzICkudmFsKCkgKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFsID0gdmFsdWU7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzICIiOyBjb252
ZXJ0IG51bWJlcnMgdG8gc3RyaW5nCisgICAgICAgICAgICBpZiAoIHZhbCA9PSBudWxsICkgewor
ICAgICAgICAgICAgICAgIHZhbCA9ICIiOworCisgICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBl
b2YgdmFsID09PSAibnVtYmVyIiApIHsKKyAgICAgICAgICAgICAgICB2YWwgKz0gIiI7CisKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWwgKSApIHsKKyAgICAgICAg
ICAgICAgICB2YWwgPSBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAiIiA6IHZhbHVlICsgIiI7Cisg
ICAgICAgICAgICAgICAgfSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBob29rcyA9
IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5v
ZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTsKKworICAgICAgICAgICAgLy8gSWYgc2V0IHJldHVybnMg
dW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmcKKyAgICAgICAgICAgIGlmICgg
IWhvb2tzIHx8ICEoICJzZXQiIGluIGhvb2tzICkgfHwgaG9va3Muc2V0KCB0aGlzLCB2YWwsICJ2
YWx1ZSIgKSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2
YWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAgICB9Cit9ICk7CisKK2pRdWVyeS5l
eHRlbmQoIHsKKyAgICB2YWxIb29rczogeworICAgICAgICBvcHRpb246IHsKKyAgICAgICAgICAg
IGdldDogZnVuY3Rpb24oIGVsZW0gKSB7CisKKyAgICAgICAgICAgICAgICB2YXIgdmFsID0galF1
ZXJ5LmZpbmQuYXR0ciggZWxlbSwgInZhbHVlIiApOworICAgICAgICAgICAgICAgIHJldHVybiB2
YWwgIT0gbnVsbCA/CisgICAgICAgICAgICAgICAgICAgIHZhbCA6CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gU3VwcG9ydDogSUUgPD0xMCAtIDExIG9ubHkKKyAgICAgICAgICAgICAgICAgICAg
Ly8gb3B0aW9uLnRleHQgdGhyb3dzIGV4Y2VwdGlvbnMgKCMxNDY4NiwgIzE0ODU4KQorICAgICAg
ICAgICAgICAgICAgICAvLyBTdHJpcCBhbmQgY29sbGFwc2Ugd2hpdGVzcGFjZQorICAgICAgICAg
ICAgICAgICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29s
bGFwc2Utd2hpdGVzcGFjZQorICAgICAgICAgICAgICAgICAgICBzdHJpcEFuZENvbGxhcHNlKCBq
UXVlcnkudGV4dCggZWxlbSApICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAg
IHNlbGVjdDogeworICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAg
ICAgICAgICB2YXIgdmFsdWUsIG9wdGlvbiwgaSwKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9u
cyA9IGVsZW0ub3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBlbGVtLnNlbGVj
dGVkSW5kZXgsCisgICAgICAgICAgICAgICAgICAgIG9uZSA9IGVsZW0udHlwZSA9PT0gInNlbGVj
dC1vbmUiLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBvbmUgPyBudWxsIDogW10sCisg
ICAgICAgICAgICAgICAgICAgIG1heCA9IG9uZSA/IGluZGV4ICsgMSA6IG9wdGlvbnMubGVuZ3Ro
OworCisgICAgICAgICAgICAgICAgaWYgKCBpbmRleCA8IDAgKSB7CisgICAgICAgICAgICAgICAg
ICAgIGkgPSBtYXg7CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBpID0gb25lID8gaW5kZXggOiAwOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnMKKyAgICAgICAg
ICAgICAgICBmb3IgKCA7IGkgPCBtYXg7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgb3B0
aW9uID0gb3B0aW9uc1sgaSBdOworCisgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElF
IDw9OSBvbmx5CisgICAgICAgICAgICAgICAgICAgIC8vIElFOC05IGRvZXNuJ3QgdXBkYXRlIHNl
bGVjdGVkIGFmdGVyIGZvcm0gcmVzZXQgKCMyNTUxKQorICAgICAgICAgICAgICAgICAgICBpZiAo
ICggb3B0aW9uLnNlbGVjdGVkIHx8IGkgPT09IGluZGV4ICkgJiYKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIERvbid0IHJldHVybiBvcHRpb25zIHRoYXQgYXJlIGRpc2FibGVkIG9y
IGluIGEgZGlzYWJsZWQgb3B0Z3JvdXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAhb3B0
aW9uLmRpc2FibGVkICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAhb3B0aW9uLnBh
cmVudE5vZGUuZGlzYWJsZWQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWpR
dWVyeS5ub2RlTmFtZSggb3B0aW9uLnBhcmVudE5vZGUsICJvcHRncm91cCIgKSApICkgeworCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUg
b3B0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICku
dmFsKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgYW4gYXJy
YXkgZm9yIG9uZSBzZWxlY3RzCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9uZSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE11bHRpLVNlbGVjdHMg
cmV0dXJuIGFuIGFycmF5CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaCggdmFs
dWUgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIHJldHVybiB2YWx1ZXM7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICBz
ZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICB2YXIgb3B0aW9u
U2V0LCBvcHRpb24sCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMs
CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGpRdWVyeS5tYWtlQXJyYXkoIHZhbHVlICks
CisgICAgICAgICAgICAgICAgICAgIGkgPSBvcHRpb25zLmxlbmd0aDsKKworICAgICAgICAgICAg
ICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgICAgICAgICBvcHRpb24gPSBvcHRpb25z
WyBpIF07CisKKyAgICAgICAgICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uZC1h
c3NpZ24gKi8KKworICAgICAgICAgICAgICAgICAgICBpZiAoIG9wdGlvbi5zZWxlY3RlZCA9Cisg
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuaW5BcnJheSggalF1ZXJ5LnZhbEhvb2tzLm9w
dGlvbi5nZXQoIG9wdGlvbiApLCB2YWx1ZXMgKSA+IC0xCisgICAgICAgICAgICAgICAgICAgICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tY29u
ZC1hc3NpZ24gKi8KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBGb3Jj
ZSBicm93c2VycyB0byBiZWhhdmUgY29uc2lzdGVudGx5IHdoZW4gbm9uLW1hdGNoaW5nIHZhbHVl
IGlzIHNldAorICAgICAgICAgICAgICAgIGlmICggIW9wdGlvblNldCApIHsKKyAgICAgICAgICAg
ICAgICAgICAgZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9Cit9ICk7CisKKy8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVyCitqUXVl
cnkuZWFjaCggWyAicmFkaW8iLCAiY2hlY2tib3giIF0sIGZ1bmN0aW9uKCkgeworICAgIGpRdWVy
eS52YWxIb29rc1sgdGhpcyBdID0geworICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1
ZSApIHsKKyAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbHVlICkgKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuICggZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVy
eSggZWxlbSApLnZhbCgpLCB2YWx1ZSApID4gLTEgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH07CisgICAgaWYgKCAhc3VwcG9ydC5jaGVja09uICkgeworICAgICAgICBqUXVlcnku
dmFsSG9va3NbIHRoaXMgXS5nZXQgPSBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJl
dHVybiBlbGVtLmdldEF0dHJpYnV0ZSggInZhbHVlIiApID09PSBudWxsID8gIm9uIiA6IGVsZW0u
dmFsdWU7CisgICAgICAgIH07CisgICAgfQorfSApOworCisKKworCisvLyBSZXR1cm4galF1ZXJ5
IGZvciBhdHRyaWJ1dGVzLW9ubHkgaW5jbHVzaW9uCisKKwordmFyIHJmb2N1c01vcnBoID0gL14o
Pzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvOworCitqUXVlcnkuZXh0ZW5kKCBqUXVlcnku
ZXZlbnQsIHsKKworICAgIHRyaWdnZXI6IGZ1bmN0aW9uKCBldmVudCwgZGF0YSwgZWxlbSwgb25s
eUhhbmRsZXJzICkgeworCisgICAgICAgIHZhciBpLCBjdXIsIHRtcCwgYnViYmxlVHlwZSwgb250
eXBlLCBoYW5kbGUsIHNwZWNpYWwsCisgICAgICAgICAgICBldmVudFBhdGggPSBbIGVsZW0gfHwg
ZG9jdW1lbnQgXSwKKyAgICAgICAgICAgIHR5cGUgPSBoYXNPd24uY2FsbCggZXZlbnQsICJ0eXBl
IiApID8gZXZlbnQudHlwZSA6IGV2ZW50LAorICAgICAgICAgICAgbmFtZXNwYWNlcyA9IGhhc093
bi5jYWxsKCBldmVudCwgIm5hbWVzcGFjZSIgKSA/IGV2ZW50Lm5hbWVzcGFjZS5zcGxpdCggIi4i
ICkgOiBbXTsKKworICAgICAgICBjdXIgPSB0bXAgPSBlbGVtID0gZWxlbSB8fCBkb2N1bWVudDsK
KworICAgICAgICAvLyBEb24ndCBkbyBldmVudHMgb24gdGV4dCBhbmQgY29tbWVudCBub2Rlcwor
ICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCAp
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGZvY3VzL2Js
dXIgbW9ycGhzIHRvIGZvY3VzaW4vb3V0OyBlbnN1cmUgd2UncmUgbm90IGZpcmluZyB0aGVtIHJp
Z2h0IG5vdworICAgICAgICBpZiAoIHJmb2N1c01vcnBoLnRlc3QoIHR5cGUgKyBqUXVlcnkuZXZl
bnQudHJpZ2dlcmVkICkgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIHR5cGUuaW5kZXhPZiggIi4iICkgPiAtMSApIHsKKworICAgICAgICAgICAgLy8g
TmFtZXNwYWNlZCB0cmlnZ2VyOyBjcmVhdGUgYSByZWdleHAgdG8gbWF0Y2ggZXZlbnQgdHlwZSBp
biBoYW5kbGUoKQorICAgICAgICAgICAgbmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoICIuIiApOwor
ICAgICAgICAgICAgdHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTsKKyAgICAgICAgICAgIG5hbWVz
cGFjZXMuc29ydCgpOworICAgICAgICB9CisgICAgICAgIG9udHlwZSA9IHR5cGUuaW5kZXhPZigg
IjoiICkgPCAwICYmICJvbiIgKyB0eXBlOworCisgICAgICAgIC8vIENhbGxlciBjYW4gcGFzcyBp
biBhIGpRdWVyeS5FdmVudCBvYmplY3QsIE9iamVjdCwgb3IganVzdCBhbiBldmVudCB0eXBlIHN0
cmluZworICAgICAgICBldmVudCA9IGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID8KKyAgICAgICAg
ICAgIGV2ZW50IDoKKyAgICAgICAgICAgIG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUsIHR5cGVvZiBl
dmVudCA9PT0gIm9iamVjdCIgJiYgZXZlbnQgKTsKKworICAgICAgICAvLyBUcmlnZ2VyIGJpdG1h
c2s6ICYgMSBmb3IgbmF0aXZlIGhhbmRsZXJzOyAmIDIgZm9yIGpRdWVyeSAoYWx3YXlzIHRydWUp
CisgICAgICAgIGV2ZW50LmlzVHJpZ2dlciA9IG9ubHlIYW5kbGVycyA/IDIgOiAzOworICAgICAg
ICBldmVudC5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmpvaW4oICIuIiApOworICAgICAgICBldmVu
dC5ybmFtZXNwYWNlID0gZXZlbnQubmFtZXNwYWNlID8KKyAgICAgICAgICAgIG5ldyBSZWdFeHAo
ICIoXnxcXC4pIiArIG5hbWVzcGFjZXMuam9pbiggIlxcLig/Oi4qXFwufCkiICkgKyAiKFxcLnwk
KSIgKSA6CisgICAgICAgICAgICBudWxsOworCisgICAgICAgIC8vIENsZWFuIHVwIHRoZSBldmVu
dCBpbiBjYXNlIGl0IGlzIGJlaW5nIHJldXNlZAorICAgICAgICBldmVudC5yZXN1bHQgPSB1bmRl
ZmluZWQ7CisgICAgICAgIGlmICggIWV2ZW50LnRhcmdldCApIHsKKyAgICAgICAgICAgIGV2ZW50
LnRhcmdldCA9IGVsZW07CisgICAgICAgIH0KKworICAgICAgICAvLyBDbG9uZSBhbnkgaW5jb21p
bmcgZGF0YSBhbmQgcHJlcGVuZCB0aGUgZXZlbnQsIGNyZWF0aW5nIHRoZSBoYW5kbGVyIGFyZyBs
aXN0CisgICAgICAgIGRhdGEgPSBkYXRhID09IG51bGwgPworICAgICAgICAgICAgWyBldmVudCBd
IDoKKyAgICAgICAgICAgIGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEsIFsgZXZlbnQgXSApOworCisg
ICAgICAgIC8vIEFsbG93IHNwZWNpYWwgZXZlbnRzIHRvIGRyYXcgb3V0c2lkZSB0aGUgbGluZXMK
KyAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307Cisg
ICAgICAgIGlmICggIW9ubHlIYW5kbGVycyAmJiBzcGVjaWFsLnRyaWdnZXIgJiYgc3BlY2lhbC50
cmlnZ2VyLmFwcGx5KCBlbGVtLCBkYXRhICkgPT09IGZhbHNlICkgeworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gRGV0ZXJtaW5lIGV2ZW50IHByb3BhZ2F0aW9u
IHBhdGggaW4gYWR2YW5jZSwgcGVyIFczQyBldmVudHMgc3BlYyAoIzk5NTEpCisgICAgICAgIC8v
IEJ1YmJsZSB1cCB0byBkb2N1bWVudCwgdGhlbiB0byB3aW5kb3c7IHdhdGNoIGZvciBhIGdsb2Jh
bCBvd25lckRvY3VtZW50IHZhciAoIzk3MjQpCisgICAgICAgIGlmICggIW9ubHlIYW5kbGVycyAm
JiAhc3BlY2lhbC5ub0J1YmJsZSAmJiAhalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7CisKKyAg
ICAgICAgICAgIGJ1YmJsZVR5cGUgPSBzcGVjaWFsLmRlbGVnYXRlVHlwZSB8fCB0eXBlOworICAg
ICAgICAgICAgaWYgKCAhcmZvY3VzTW9ycGgudGVzdCggYnViYmxlVHlwZSArIHR5cGUgKSApIHsK
KyAgICAgICAgICAgICAgICBjdXIgPSBjdXIucGFyZW50Tm9kZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHsKKyAgICAgICAg
ICAgICAgICBldmVudFBhdGgucHVzaCggY3VyICk7CisgICAgICAgICAgICAgICAgdG1wID0gY3Vy
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBPbmx5IGFkZCB3aW5kb3cgaWYgd2Ug
Z290IHRvIGRvY3VtZW50IChlLmcuLCBub3QgcGxhaW4gb2JqIG9yIGRldGFjaGVkIERPTSkKKyAg
ICAgICAgICAgIGlmICggdG1wID09PSAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCAp
ICkgeworICAgICAgICAgICAgICAgIGV2ZW50UGF0aC5wdXNoKCB0bXAuZGVmYXVsdFZpZXcgfHwg
dG1wLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIC8vIEZpcmUgaGFuZGxlcnMgb24gdGhlIGV2ZW50IHBhdGgKKyAgICAgICAgaSA9
IDA7CisgICAgICAgIHdoaWxlICggKCBjdXIgPSBldmVudFBhdGhbIGkrKyBdICkgJiYgIWV2ZW50
LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7CisKKyAgICAgICAgICAgIGV2ZW50LnR5cGUgPSBp
ID4gMSA/CisgICAgICAgICAgICAgICAgYnViYmxlVHlwZSA6CisgICAgICAgICAgICAgICAgc3Bl
Y2lhbC5iaW5kVHlwZSB8fCB0eXBlOworCisgICAgICAgICAgICAvLyBqUXVlcnkgaGFuZGxlcgor
ICAgICAgICAgICAgaGFuZGxlID0gKCBkYXRhUHJpdi5nZXQoIGN1ciwgImV2ZW50cyIgKSB8fCB7
fSApWyBldmVudC50eXBlIF0gJiYKKyAgICAgICAgICAgICAgICBkYXRhUHJpdi5nZXQoIGN1ciwg
ImhhbmRsZSIgKTsKKyAgICAgICAgICAgIGlmICggaGFuZGxlICkgeworICAgICAgICAgICAgICAg
IGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIE5hdGl2ZSBoYW5kbGVyCisgICAgICAgICAgICBoYW5kbGUgPSBvbnR5cGUgJiYgY3VyWyBv
bnR5cGUgXTsKKyAgICAgICAgICAgIGlmICggaGFuZGxlICYmIGhhbmRsZS5hcHBseSAmJiBhY2Nl
cHREYXRhKCBjdXIgKSApIHsKKyAgICAgICAgICAgICAgICBldmVudC5yZXN1bHQgPSBoYW5kbGUu
YXBwbHkoIGN1ciwgZGF0YSApOworICAgICAgICAgICAgICAgIGlmICggZXZlbnQucmVzdWx0ID09
PSBmYWxzZSApIHsKKyAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZXZl
bnQudHlwZSA9IHR5cGU7CisKKyAgICAgICAgLy8gSWYgbm9ib2R5IHByZXZlbnRlZCB0aGUgZGVm
YXVsdCBhY3Rpb24sIGRvIGl0IG5vdworICAgICAgICBpZiAoICFvbmx5SGFuZGxlcnMgJiYgIWV2
ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkgeworCisgICAgICAgICAgICBpZiAoICggIXNwZWNp
YWwuX2RlZmF1bHQgfHwKKyAgICAgICAgICAgICAgICBzcGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBl
dmVudFBhdGgucG9wKCksIGRhdGEgKSA9PT0gZmFsc2UgKSAmJgorICAgICAgICAgICAgICAgIGFj
Y2VwdERhdGEoIGVsZW0gKSApIHsKKworICAgICAgICAgICAgICAgIC8vIENhbGwgYSBuYXRpdmUg
RE9NIG1ldGhvZCBvbiB0aGUgdGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZXZlbnQu
CisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgZG8gZGVmYXVsdCBhY3Rpb25zIG9uIHdpbmRvdywg
dGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMgYmUgKCM2MTcwKQorICAgICAgICAgICAgICAg
IGlmICggb250eXBlICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBlbGVtWyB0eXBlIF0gKSAmJiAhalF1
ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3Qg
cmUtdHJpZ2dlciBhbiBvbkZPTyBldmVudCB3aGVuIHdlIGNhbGwgaXRzIEZPTygpIG1ldGhvZAor
ICAgICAgICAgICAgICAgICAgICB0bXAgPSBlbGVtWyBvbnR5cGUgXTsKKworICAgICAgICAgICAg
ICAgICAgICBpZiAoIHRtcCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bIG9udHlw
ZSBdID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
IC8vIFByZXZlbnQgcmUtdHJpZ2dlcmluZyBvZiB0aGUgc2FtZSBldmVudCwgc2luY2Ugd2UgYWxy
ZWFkeSBidWJibGVkIGl0IGFib3ZlCisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC50
cmlnZ2VyZWQgPSB0eXBlOworICAgICAgICAgICAgICAgICAgICBlbGVtWyB0eXBlIF0oKTsKKyAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHVuZGVmaW5lZDsKKwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIHRtcCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW1bIG9udHlwZSBdID0gdG1wOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGV2ZW50
LnJlc3VsdDsKKyAgICB9LAorCisgICAgLy8gUGlnZ3liYWNrIG9uIGEgZG9ub3IgZXZlbnQgdG8g
c2ltdWxhdGUgYSBkaWZmZXJlbnQgb25lCisgICAgLy8gVXNlZCBvbmx5IGZvciBgZm9jdXMoaW4g
fCBvdXQpYCBldmVudHMKKyAgICBzaW11bGF0ZTogZnVuY3Rpb24oIHR5cGUsIGVsZW0sIGV2ZW50
ICkgeworICAgICAgICB2YXIgZSA9IGpRdWVyeS5leHRlbmQoCisgICAgICAgICAgICBuZXcgalF1
ZXJ5LkV2ZW50KCksCisgICAgICAgICAgICBldmVudCwKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiB0eXBlLAorICAgICAgICAgICAgICAgIGlzU2ltdWxhdGVkOiB0cnVlCisg
ICAgICAgICAgICB9CisgICAgICAgICk7CisKKyAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIo
IGUsIG51bGwsIGVsZW0gKTsKKyAgICB9CisKK30gKTsKKworalF1ZXJ5LmZuLmV4dGVuZCggewor
CisgICAgdHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7CisgICAgICAgIHJldHVybiB0
aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIo
IHR5cGUsIGRhdGEsIHRoaXMgKTsKKyAgICAgICAgfSApOworICAgIH0sCisgICAgdHJpZ2dlckhh
bmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkgeworICAgICAgICB2YXIgZWxlbSA9IHRoaXNb
IDAgXTsKKyAgICAgICAgaWYgKCBlbGVtICkgeworICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5l
dmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCBlbGVtLCB0cnVlICk7CisgICAgICAgIH0KKyAgICB9
Cit9ICk7CisKKworalF1ZXJ5LmVhY2goICggImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBy
ZXNpemUgc2Nyb2xsIGNsaWNrIGRibGNsaWNrICIgKworICAgICJtb3VzZWRvd24gbW91c2V1cCBt
b3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSAiICsKKyAg
ICAiY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVu
dSIgKS5zcGxpdCggIiAiICksCisgICAgZnVuY3Rpb24oIGksIG5hbWUgKSB7CisKKyAgICAvLyBI
YW5kbGUgZXZlbnQgYmluZGluZworICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRh
dGEsIGZuICkgeworICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDAgPworICAgICAg
ICAgICAgdGhpcy5vbiggbmFtZSwgbnVsbCwgZGF0YSwgZm4gKSA6CisgICAgICAgICAgICB0aGlz
LnRyaWdnZXIoIG5hbWUgKTsKKyAgICB9OworfSApOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7Cisg
ICAgaG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkgeworICAgICAgICByZXR1cm4gdGhp
cy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIgKTsKKyAg
ICB9Cit9ICk7CisKKworCisKK3N1cHBvcnQuZm9jdXNpbiA9ICJvbmZvY3VzaW4iIGluIHdpbmRv
dzsKKworCisvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDQKKy8vIEZpcmVmb3ggZG9lc24ndCBoYXZl
IGZvY3VzKGluIHwgb3V0KSBldmVudHMKKy8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWd6
aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3Nzg3CisvLworLy8gU3VwcG9ydDog
Q2hyb21lIDw9NDggLSA0OSwgU2FmYXJpIDw9OS4wIC0gOS4xCisvLyBmb2N1cyhpbiB8IG91dCkg
ZXZlbnRzIGZpcmUgYWZ0ZXIgZm9jdXMgJiBibHVyIGV2ZW50cywKKy8vIHdoaWNoIGlzIHNwZWMg
dmlvbGF0aW9uIC0gaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVu
dHMtZm9jdXNldmVudC1ldmVudC1vcmRlcgorLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1
Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDk4NTcKK2lmICgg
IXN1cHBvcnQuZm9jdXNpbiApIHsKKyAgICBqUXVlcnkuZWFjaCggeyBmb2N1czogImZvY3VzaW4i
LCBibHVyOiAiZm9jdXNvdXQiIH0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7CisKKyAgICAgICAg
Ly8gQXR0YWNoIGEgc2luZ2xlIGNhcHR1cmluZyBoYW5kbGVyIG9uIHRoZSBkb2N1bWVudCB3aGls
ZSBzb21lb25lIHdhbnRzIGZvY3VzaW4vZm9jdXNvdXQKKyAgICAgICAgdmFyIGhhbmRsZXIgPSBm
dW5jdGlvbiggZXZlbnQgKSB7CisgICAgICAgICAgICBqUXVlcnkuZXZlbnQuc2ltdWxhdGUoIGZp
eCwgZXZlbnQudGFyZ2V0LCBqUXVlcnkuZXZlbnQuZml4KCBldmVudCApICk7CisgICAgICAgIH07
CisKKyAgICAgICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGZpeCBdID0geworICAgICAgICAgICAg
c2V0dXA6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBkb2MgPSB0aGlzLm93bmVy
RG9jdW1lbnQgfHwgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgYXR0YWNoZXMgPSBkYXRhUHJp
di5hY2Nlc3MoIGRvYywgZml4ICk7CisKKyAgICAgICAgICAgICAgICBpZiAoICFhdHRhY2hlcyAp
IHsKKyAgICAgICAgICAgICAgICAgICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRs
ZXIsIHRydWUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGF0YVByaXYu
YWNjZXNzKCBkb2MsIGZpeCwgKCBhdHRhY2hlcyB8fCAwICkgKyAxICk7CisgICAgICAgICAgICB9
LAorICAgICAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZh
ciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcywKKyAgICAgICAgICAgICAgICAgICAg
YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICkgLSAxOworCisgICAgICAgICAg
ICAgICAgaWYgKCAhYXR0YWNoZXMgKSB7CisgICAgICAgICAgICAgICAgICAgIGRvYy5yZW1vdmVF
dmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7CisgICAgICAgICAgICAgICAgICAg
IGRhdGFQcml2LnJlbW92ZSggZG9jLCBmaXggKTsKKworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsIGF0dGFjaGVz
ICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0g
KTsKK30KK3ZhciBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjsKKwordmFyIG5vbmNlID0galF1
ZXJ5Lm5vdygpOworCit2YXIgcnF1ZXJ5ID0gKCAvXD8vICk7CisKKworCisvLyBDcm9zcy1icm93
c2VyIHhtbCBwYXJzaW5nCitqUXVlcnkucGFyc2VYTUwgPSBmdW5jdGlvbiggZGF0YSApIHsKKyAg
ICB2YXIgeG1sOworICAgIGlmICggIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICJzdHJpbmciICkg
eworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICAvLyBTdXBwb3J0OiBJRSA5IC0g
MTEgb25seQorICAgIC8vIElFIHRocm93cyBvbiBwYXJzZUZyb21TdHJpbmcgd2l0aCBpbnZhbGlk
IGlucHV0LgorICAgIHRyeSB7CisgICAgICAgIHhtbCA9ICggbmV3IHdpbmRvdy5ET01QYXJzZXIo
KSApLnBhcnNlRnJvbVN0cmluZyggZGF0YSwgInRleHQveG1sIiApOworICAgIH0gY2F0Y2ggKCBl
ICkgeworICAgICAgICB4bWwgPSB1bmRlZmluZWQ7CisgICAgfQorCisgICAgaWYgKCAheG1sIHx8
IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggInBhcnNlcmVycm9yIiApLmxlbmd0aCApIHsKKyAg
ICAgICAgalF1ZXJ5LmVycm9yKCAiSW52YWxpZCBYTUw6ICIgKyBkYXRhICk7CisgICAgfQorICAg
IHJldHVybiB4bWw7Cit9OworCisKK3ZhcgorICAgIHJicmFja2V0ID0gL1xbXF0kLywKKyAgICBy
Q1JMRiA9IC9ccj9cbi9nLAorICAgIHJzdWJtaXR0ZXJUeXBlcyA9IC9eKD86c3VibWl0fGJ1dHRv
bnxpbWFnZXxyZXNldHxmaWxlKSQvaSwKKyAgICByc3VibWl0dGFibGUgPSAvXig/OmlucHV0fHNl
bGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7CisKK2Z1bmN0aW9uIGJ1aWxkUGFyYW1zKCBwcmVmaXgs
IG9iaiwgdHJhZGl0aW9uYWwsIGFkZCApIHsKKyAgICB2YXIgbmFtZTsKKworICAgIGlmICggalF1
ZXJ5LmlzQXJyYXkoIG9iaiApICkgeworCisgICAgICAgIC8vIFNlcmlhbGl6ZSBhcnJheSBpdGVt
LgorICAgICAgICBqUXVlcnkuZWFjaCggb2JqLCBmdW5jdGlvbiggaSwgdiApIHsKKyAgICAgICAg
ICAgIGlmICggdHJhZGl0aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4ICkgKSB7CisKKyAg
ICAgICAgICAgICAgICAvLyBUcmVhdCBlYWNoIGFycmF5IGl0ZW0gYXMgYSBzY2FsYXIuCisgICAg
ICAgICAgICAgICAgYWRkKCBwcmVmaXgsIHYgKTsKKworICAgICAgICAgICAgfSBlbHNlIHsKKwor
ICAgICAgICAgICAgICAgIC8vIEl0ZW0gaXMgbm9uLXNjYWxhciAoYXJyYXkgb3Igb2JqZWN0KSwg
ZW5jb2RlIGl0cyBudW1lcmljIGluZGV4LgorICAgICAgICAgICAgICAgIGJ1aWxkUGFyYW1zKAor
ICAgICAgICAgICAgICAgICAgICBwcmVmaXggKyAiWyIgKyAoIHR5cGVvZiB2ID09PSAib2JqZWN0
IiAmJiB2ICE9IG51bGwgPyBpIDogIiIgKSArICJdIiwKKyAgICAgICAgICAgICAgICAgICAgdiwK
KyAgICAgICAgICAgICAgICAgICAgdHJhZGl0aW9uYWwsCisgICAgICAgICAgICAgICAgICAgIGFk
ZAorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKworICAg
IH0gZWxzZSBpZiAoICF0cmFkaXRpb25hbCAmJiBqUXVlcnkudHlwZSggb2JqICkgPT09ICJvYmpl
Y3QiICkgeworCisgICAgICAgIC8vIFNlcmlhbGl6ZSBvYmplY3QgaXRlbS4KKyAgICAgICAgZm9y
ICggbmFtZSBpbiBvYmogKSB7CisgICAgICAgICAgICBidWlsZFBhcmFtcyggcHJlZml4ICsgIlsi
ICsgbmFtZSArICJdIiwgb2JqWyBuYW1lIF0sIHRyYWRpdGlvbmFsLCBhZGQgKTsKKyAgICAgICAg
fQorCisgICAgfSBlbHNlIHsKKworICAgICAgICAvLyBTZXJpYWxpemUgc2NhbGFyIGl0ZW0uCisg
ICAgICAgIGFkZCggcHJlZml4LCBvYmogKTsKKyAgICB9Cit9CisKKy8vIFNlcmlhbGl6ZSBhbiBh
cnJheSBvZiBmb3JtIGVsZW1lbnRzIG9yIGEgc2V0IG9mCisvLyBrZXkvdmFsdWVzIGludG8gYSBx
dWVyeSBzdHJpbmcKK2pRdWVyeS5wYXJhbSA9IGZ1bmN0aW9uKCBhLCB0cmFkaXRpb25hbCApIHsK
KyAgICB2YXIgcHJlZml4LAorICAgICAgICBzID0gW10sCisgICAgICAgIGFkZCA9IGZ1bmN0aW9u
KCBrZXksIHZhbHVlT3JGdW5jdGlvbiApIHsKKworICAgICAgICAgICAgLy8gSWYgdmFsdWUgaXMg
YSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCB1c2UgaXRzIHJldHVybiB2YWx1ZQorICAgICAgICAg
ICAgdmFyIHZhbHVlID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlT3JGdW5jdGlvbiApID8KKyAg
ICAgICAgICAgICAgICB2YWx1ZU9yRnVuY3Rpb24oKSA6CisgICAgICAgICAgICAgICAgdmFsdWVP
ckZ1bmN0aW9uOworCisgICAgICAgICAgICBzWyBzLmxlbmd0aCBdID0gZW5jb2RlVVJJQ29tcG9u
ZW50KCBrZXkgKSArICI9IiArCisgICAgICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KCB2
YWx1ZSA9PSBudWxsID8gIiIgOiB2YWx1ZSApOworICAgICAgICB9OworCisgICAgLy8gSWYgYW4g
YXJyYXkgd2FzIHBhc3NlZCBpbiwgYXNzdW1lIHRoYXQgaXQgaXMgYW4gYXJyYXkgb2YgZm9ybSBl
bGVtZW50cy4KKyAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCBhICkgfHwgKCBhLmpxdWVyeSAmJiAh
alF1ZXJ5LmlzUGxhaW5PYmplY3QoIGEgKSApICkgeworCisgICAgICAgIC8vIFNlcmlhbGl6ZSB0
aGUgZm9ybSBlbGVtZW50cworICAgICAgICBqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICBhZGQoIHRoaXMubmFtZSwgdGhpcy52YWx1ZSApOworICAgICAgICB9ICk7CisK
KyAgICB9IGVsc2UgeworCisgICAgICAgIC8vIElmIHRyYWRpdGlvbmFsLCBlbmNvZGUgdGhlICJv
bGQiIHdheSAodGhlIHdheSAxLjMuMiBvciBvbGRlcgorICAgICAgICAvLyBkaWQgaXQpLCBvdGhl
cndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS4KKyAgICAgICAgZm9yICggcHJlZml4IGlu
IGEgKSB7CisgICAgICAgICAgICBidWlsZFBhcmFtcyggcHJlZml4LCBhWyBwcmVmaXggXSwgdHJh
ZGl0aW9uYWwsIGFkZCApOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmV0dXJuIHRoZSBy
ZXN1bHRpbmcgc2VyaWFsaXphdGlvbgorICAgIHJldHVybiBzLmpvaW4oICImIiApOworfTsKKwor
alF1ZXJ5LmZuLmV4dGVuZCggeworICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApOworICAgIH0sCisg
ICAgc2VyaWFsaXplQXJyYXk6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5tYXAo
IGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAvLyBDYW4gYWRkIHByb3BIb29rIGZvciAiZWxl
bWVudHMiIHRvIGZpbHRlciBvciBhZGQgZm9ybSBlbGVtZW50cworICAgICAgICAgICAgdmFyIGVs
ZW1lbnRzID0galF1ZXJ5LnByb3AoIHRoaXMsICJlbGVtZW50cyIgKTsKKyAgICAgICAgICAgIHJl
dHVybiBlbGVtZW50cyA/IGpRdWVyeS5tYWtlQXJyYXkoIGVsZW1lbnRzICkgOiB0aGlzOworICAg
ICAgICB9ICkKKyAgICAgICAgLmZpbHRlciggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIg
dHlwZSA9IHRoaXMudHlwZTsKKworICAgICAgICAgICAgLy8gVXNlIC5pcyggIjpkaXNhYmxlZCIg
KSBzbyB0aGF0IGZpZWxkc2V0W2Rpc2FibGVkXSB3b3JrcworICAgICAgICAgICAgcmV0dXJuIHRo
aXMubmFtZSAmJiAhalF1ZXJ5KCB0aGlzICkuaXMoICI6ZGlzYWJsZWQiICkgJiYKKyAgICAgICAg
ICAgICAgICByc3VibWl0dGFibGUudGVzdCggdGhpcy5ub2RlTmFtZSApICYmICFyc3VibWl0dGVy
VHlwZXMudGVzdCggdHlwZSApICYmCisgICAgICAgICAgICAgICAgKCB0aGlzLmNoZWNrZWQgfHwg
IXJjaGVja2FibGVUeXBlLnRlc3QoIHR5cGUgKSApOworICAgICAgICB9ICkKKyAgICAgICAgLm1h
cCggZnVuY3Rpb24oIGksIGVsZW0gKSB7CisgICAgICAgICAgICB2YXIgdmFsID0galF1ZXJ5KCB0
aGlzICkudmFsKCk7CisKKyAgICAgICAgICAgIGlmICggdmFsID09IG51bGwgKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgg
alF1ZXJ5LmlzQXJyYXkoIHZhbCApICkgeworICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnku
bWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWwgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7
IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgIlxyXG4iICkgfTsK
KyAgICAgICAgICAgICAgICB9ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVy
biB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgIlxyXG4iICkg
fTsKKyAgICAgICAgfSApLmdldCgpOworICAgIH0KK30gKTsKKworCit2YXIKKyAgICByMjAgPSAv
JTIwL2csCisgICAgcmhhc2ggPSAvIy4qJC8sCisgICAgcmFudGlDYWNoZSA9IC8oWz8mXSlfPVte
Jl0qLywKKyAgICByaGVhZGVycyA9IC9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKSQvbWcsCisKKyAg
ICAvLyAjNzY1MywgIzgxMjUsICM4MTUyOiBsb2NhbCBwcm90b2NvbCBkZXRlY3Rpb24KKyAgICBy
bG9jYWxQcm90b2NvbCA9IC9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxm
aWxlfHJlc3x3aWRnZXQpOiQvLAorICAgIHJub0NvbnRlbnQgPSAvXig/OkdFVHxIRUFEKSQvLAor
ICAgIHJwcm90b2NvbCA9IC9eXC9cLy8sCisKKyAgICAvKiBQcmVmaWx0ZXJzCisgICAgICogMSkg
VGhleSBhcmUgdXNlZnVsIHRvIGludHJvZHVjZSBjdXN0b20gZGF0YVR5cGVzIChzZWUgYWpheC9q
c29ucC5qcyBmb3IgYW4gZXhhbXBsZSkKKyAgICAgKiAyKSBUaGVzZSBhcmUgY2FsbGVkOgorICAg
ICAqICAgIC0gQkVGT1JFIGFza2luZyBmb3IgYSB0cmFuc3BvcnQKKyAgICAgKiAgICAtIEFGVEVS
IHBhcmFtIHNlcmlhbGl6YXRpb24gKHMuZGF0YSBpcyBhIHN0cmluZyBpZiBzLnByb2Nlc3NEYXRh
IGlzIHRydWUpCisgICAgICogMykga2V5IGlzIHRoZSBkYXRhVHlwZQorICAgICAqIDQpIHRoZSBj
YXRjaGFsbCBzeW1ib2wgIioiIGNhbiBiZSB1c2VkCisgICAgICogNSkgZXhlY3V0aW9uIHdpbGwg
c3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gY29udGludWUgZG93biB0byAi
KiIgaWYgbmVlZGVkCisgICAgICovCisgICAgcHJlZmlsdGVycyA9IHt9LAorCisgICAgLyogVHJh
bnNwb3J0cyBiaW5kaW5ncworICAgICAqIDEpIGtleSBpcyB0aGUgZGF0YVR5cGUKKyAgICAgKiAy
KSB0aGUgY2F0Y2hhbGwgc3ltYm9sICIqIiBjYW4gYmUgdXNlZAorICAgICAqIDMpIHNlbGVjdGlv
biB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGdvIHRvICIqIiBp
ZiBuZWVkZWQKKyAgICAgKi8KKyAgICB0cmFuc3BvcnRzID0ge30sCisKKyAgICAvLyBBdm9pZCBj
b21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICgjMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGludCBh
bmQgZXZhZGUgY29tcHJlc3Npb24KKyAgICBhbGxUeXBlcyA9ICIqLyIuY29uY2F0KCAiKiIgKSwK
KworICAgIC8vIEFuY2hvciB0YWcgZm9yIHBhcnNpbmcgdGhlIGRvY3VtZW50IG9yaWdpbgorICAg
IG9yaWdpbkFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJhIiApOworICAgIG9yaWdp
bkFuY2hvci5ocmVmID0gbG9jYXRpb24uaHJlZjsKKworLy8gQmFzZSAiY29uc3RydWN0b3IiIGZv
ciBqUXVlcnkuYWpheFByZWZpbHRlciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnQKK2Z1bmN0aW9u
IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlICkgeworCisgICAgLy8gZGF0
YVR5cGVFeHByZXNzaW9uIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byAiKiIKKyAgICByZXR1
cm4gZnVuY3Rpb24oIGRhdGFUeXBlRXhwcmVzc2lvbiwgZnVuYyApIHsKKworICAgICAgICBpZiAo
IHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09ICJzdHJpbmciICkgeworICAgICAgICAgICAg
ZnVuYyA9IGRhdGFUeXBlRXhwcmVzc2lvbjsKKyAgICAgICAgICAgIGRhdGFUeXBlRXhwcmVzc2lv
biA9ICIqIjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBkYXRhVHlwZSwKKyAgICAgICAgICAg
IGkgPSAwLAorICAgICAgICAgICAgZGF0YVR5cGVzID0gZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93
ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTsKKworICAgICAgICBpZiAoIGpR
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
ICAgaWYgKCBjdXJyZW50ICkgeworCisgICAgICAgICAgICAvLyBUaGVyZSdzIG9ubHkgd29yayB0
byBkbyBpZiBjdXJyZW50IGRhdGFUeXBlIGlzIG5vbi1hdXRvCisgICAgICAgICAgICBpZiAoIGN1
cnJlbnQgPT09ICIqIiApIHsKKworICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBwcmV2OworCisg
ICAgICAgICAgICAvLyBDb252ZXJ0IHJlc3BvbnNlIGlmIHByZXYgZGF0YVR5cGUgaXMgbm9uLWF1
dG8gYW5kIGRpZmZlcnMgZnJvbSBjdXJyZW50CisgICAgICAgICAgICB9IGVsc2UgaWYgKCBwcmV2
ICE9PSAiKiIgJiYgcHJldiAhPT0gY3VycmVudCApIHsKKworICAgICAgICAgICAgICAgIC8vIFNl
ZWsgYSBkaXJlY3QgY29udmVydGVyCisgICAgICAgICAgICAgICAgY29udiA9IGNvbnZlcnRlcnNb
IHByZXYgKyAiICIgKyBjdXJyZW50IF0gfHwgY29udmVydGVyc1sgIiogIiArIGN1cnJlbnQgXTsK
KworICAgICAgICAgICAgICAgIC8vIElmIG5vbmUgZm91bmQsIHNlZWsgYSBwYWlyCisgICAgICAg
ICAgICAgICAgaWYgKCAhY29udiApIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICggY29udjIg
aW4gY29udmVydGVycyApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgY29udjIg
b3V0cHV0cyBjdXJyZW50CisgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBjb252Mi5zcGxp
dCggIiAiICk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRtcFsgMSBdID09PSBjdXJy
ZW50ICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgcHJldiBjYW4gYmUg
Y29udmVydGVkIHRvIGFjY2VwdGVkIGlucHV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyAiICIgKyB0bXBbIDAgXSBdIHx8CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlcnNbICIqICIgKyB0bXBbIDAgXSBdOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29udiApIHsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBDb25kZW5zZSBlcXVpdmFsZW5jZSBjb252ZXJ0ZXJzCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29udiA9PT0gdHJ1ZSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnYgPSBjb252ZXJ0ZXJzWyBjb252MiBd
OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgaW5zZXJ0
IHRoZSBpbnRlcm1lZGlhdGUgZGF0YVR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICggY29udmVydGVyc1sgY29udjIgXSAhPT0gdHJ1ZSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB0bXBbIDAgXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlcy51bnNoaWZ0KCB0bXBbIDEgXSAp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEFwcGx5IGNvbnZlcnRlciAoaWYgbm90IGFuIGVx
dWl2YWxlbmNlKQorICAgICAgICAgICAgICAgIGlmICggY29udiAhPT0gdHJ1ZSApIHsKKworICAg
ICAgICAgICAgICAgICAgICAvLyBVbmxlc3MgZXJyb3JzIGFyZSBhbGxvd2VkIHRvIGJ1YmJsZSwg
Y2F0Y2ggYW5kIHJldHVybiB0aGVtCisgICAgICAgICAgICAgICAgICAgIGlmICggY29udiAmJiBz
LnRocm93cyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gY29udiggcmVz
cG9uc2UgKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBjb252
KCByZXNwb25zZSApOworICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoIGUgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGU6ICJwYXJzZXJlcnJvciIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVycm9yOiBjb252ID8gZSA6ICJObyBjb252ZXJzaW9uIGZyb20gIiArIHByZXYg
KyAiIHRvICIgKyBjdXJyZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB7IHN0
YXRlOiAic3VjY2VzcyIsIGRhdGE6IHJlc3BvbnNlIH07Cit9CisKK2pRdWVyeS5leHRlbmQoIHsK
KworICAgIC8vIENvdW50ZXIgZm9yIGhvbGRpbmcgdGhlIG51bWJlciBvZiBhY3RpdmUgcXVlcmll
cworICAgIGFjdGl2ZTogMCwKKworICAgIC8vIExhc3QtTW9kaWZpZWQgaGVhZGVyIGNhY2hlIGZv
ciBuZXh0IHJlcXVlc3QKKyAgICBsYXN0TW9kaWZpZWQ6IHt9LAorICAgIGV0YWc6IHt9LAorCisg
ICAgYWpheFNldHRpbmdzOiB7CisgICAgICAgIHVybDogbG9jYXRpb24uaHJlZiwKKyAgICAgICAg
dHlwZTogIkdFVCIsCisgICAgICAgIGlzTG9jYWw6IHJsb2NhbFByb3RvY29sLnRlc3QoIGxvY2F0
aW9uLnByb3RvY29sICksCisgICAgICAgIGdsb2JhbDogdHJ1ZSwKKyAgICAgICAgcHJvY2Vzc0Rh
dGE6IHRydWUsCisgICAgICAgIGFzeW5jOiB0cnVlLAorICAgICAgICBjb250ZW50VHlwZTogImFw
cGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIsCisKKyAgICAg
ICAgLyoKKyAgICAgICAgdGltZW91dDogMCwKKyAgICAgICAgZGF0YTogbnVsbCwKKyAgICAgICAg
ZGF0YVR5cGU6IG51bGwsCisgICAgICAgIHVzZXJuYW1lOiBudWxsLAorICAgICAgICBwYXNzd29y
ZDogbnVsbCwKKyAgICAgICAgY2FjaGU6IG51bGwsCisgICAgICAgIHRocm93czogZmFsc2UsCisg
ICAgICAgIHRyYWRpdGlvbmFsOiBmYWxzZSwKKyAgICAgICAgaGVhZGVyczoge30sCisgICAgICAg
ICovCisKKyAgICAgICAgYWNjZXB0czogeworICAgICAgICAgICAgIioiOiBhbGxUeXBlcywKKyAg
ICAgICAgICAgIHRleHQ6ICJ0ZXh0L3BsYWluIiwKKyAgICAgICAgICAgIGh0bWw6ICJ0ZXh0L2h0
bWwiLAorICAgICAgICAgICAgeG1sOiAiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsCisgICAg
ICAgICAgICBqc29uOiAiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IgorICAgICAg
ICB9LAorCisgICAgICAgIGNvbnRlbnRzOiB7CisgICAgICAgICAgICB4bWw6IC9cYnhtbFxiLywK
KyAgICAgICAgICAgIGh0bWw6IC9cYmh0bWwvLAorICAgICAgICAgICAganNvbjogL1xianNvblxi
LworICAgICAgICB9LAorCisgICAgICAgIHJlc3BvbnNlRmllbGRzOiB7CisgICAgICAgICAgICB4
bWw6ICJyZXNwb25zZVhNTCIsCisgICAgICAgICAgICB0ZXh0OiAicmVzcG9uc2VUZXh0IiwKKyAg
ICAgICAgICAgIGpzb246ICJyZXNwb25zZUpTT04iCisgICAgICAgIH0sCisKKyAgICAgICAgLy8g
RGF0YSBjb252ZXJ0ZXJzCisgICAgICAgIC8vIEtleXMgc2VwYXJhdGUgc291cmNlIChvciBjYXRj
aGFsbCAiKiIpIGFuZCBkZXN0aW5hdGlvbiB0eXBlcyB3aXRoIGEgc2luZ2xlIHNwYWNlCisgICAg
ICAgIGNvbnZlcnRlcnM6IHsKKworICAgICAgICAgICAgLy8gQ29udmVydCBhbnl0aGluZyB0byB0
ZXh0CisgICAgICAgICAgICAiKiB0ZXh0IjogU3RyaW5nLAorCisgICAgICAgICAgICAvLyBUZXh0
IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1hdGlvbikKKyAgICAgICAgICAgICJ0ZXh0IGh0
bWwiOiB0cnVlLAorCisgICAgICAgICAgICAvLyBFdmFsdWF0ZSB0ZXh0IGFzIGEganNvbiBleHBy
ZXNzaW9uCisgICAgICAgICAgICAidGV4dCBqc29uIjogSlNPTi5wYXJzZSwKKworICAgICAgICAg
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
ICAgIHVybEFuY2hvciwKKworICAgICAgICAgICAgLy8gUmVxdWVzdCBzdGF0ZSAoYmVjb21lcyBm
YWxzZSB1cG9uIHNlbmQgYW5kIHRydWUgdXBvbiBjb21wbGV0aW9uKQorICAgICAgICAgICAgY29t
cGxldGVkLAorCisgICAgICAgICAgICAvLyBUbyBrbm93IGlmIGdsb2JhbCBldmVudHMgYXJlIHRv
IGJlIGRpc3BhdGNoZWQKKyAgICAgICAgICAgIGZpcmVHbG9iYWxzLAorCisgICAgICAgICAgICAv
LyBMb29wIHZhcmlhYmxlCisgICAgICAgICAgICBpLAorCisgICAgICAgICAgICAvLyB1bmNhY2hl
ZCBwYXJ0IG9mIHRoZSB1cmwKKyAgICAgICAgICAgIHVuY2FjaGVkLAorCisgICAgICAgICAgICAv
LyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0CisgICAgICAgICAgICBzID0galF1ZXJ5
LmFqYXhTZXR1cCgge30sIG9wdGlvbnMgKSwKKworICAgICAgICAgICAgLy8gQ2FsbGJhY2tzIGNv
bnRleHQKKyAgICAgICAgICAgIGNhbGxiYWNrQ29udGV4dCA9IHMuY29udGV4dCB8fCBzLAorCisg
ICAgICAgICAgICAvLyBDb250ZXh0IGZvciBnbG9iYWwgZXZlbnRzIGlzIGNhbGxiYWNrQ29udGV4
dCBpZiBpdCBpcyBhIERPTSBub2RlIG9yIGpRdWVyeSBjb2xsZWN0aW9uCisgICAgICAgICAgICBn
bG9iYWxFdmVudENvbnRleHQgPSBzLmNvbnRleHQgJiYKKyAgICAgICAgICAgICAgICAoIGNhbGxi
YWNrQ29udGV4dC5ub2RlVHlwZSB8fCBjYWxsYmFja0NvbnRleHQuanF1ZXJ5ICkgPworICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkoIGNhbGxiYWNrQ29udGV4dCApIDoKKyAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LmV2ZW50LAorCisgICAgICAgICAgICAvLyBEZWZlcnJlZHMKKyAgICAgICAg
ICAgIGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCksCisgICAgICAgICAgICBjb21wbGV0ZURl
ZmVycmVkID0galF1ZXJ5LkNhbGxiYWNrcyggIm9uY2UgbWVtb3J5IiApLAorCisgICAgICAgICAg
ICAvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrcworICAgICAgICAgICAgc3RhdHVzQ29kZSA9
IHMuc3RhdHVzQ29kZSB8fCB7fSwKKworICAgICAgICAgICAgLy8gSGVhZGVycyAodGhleSBhcmUg
c2VudCBhbGwgYXQgb25jZSkKKyAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJzID0ge30sCisgICAg
ICAgICAgICByZXF1ZXN0SGVhZGVyc05hbWVzID0ge30sCisKKyAgICAgICAgICAgIC8vIERlZmF1
bHQgYWJvcnQgbWVzc2FnZQorICAgICAgICAgICAgc3RyQWJvcnQgPSAiY2FuY2VsZWQiLAorCisg
ICAgICAgICAgICAvLyBGYWtlIHhocgorICAgICAgICAgICAganFYSFIgPSB7CisgICAgICAgICAg
ICAgICAgcmVhZHlTdGF0ZTogMCwKKworICAgICAgICAgICAgICAgIC8vIEJ1aWxkcyBoZWFkZXJz
IGhhc2h0YWJsZSBpZiBuZWVkZWQKKyAgICAgICAgICAgICAgICBnZXRSZXNwb25zZUhlYWRlcjog
ZnVuY3Rpb24oIGtleSApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIGNvbXBsZXRlZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggIXJlc3BvbnNlSGVhZGVycyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXNwb25zZUhlYWRlcnMgPSB7fTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAo
ICggbWF0Y2ggPSByaGVhZGVycy5leGVjKCByZXNwb25zZUhlYWRlcnNTdHJpbmcgKSApICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAx
IF0udG9Mb3dlckNhc2UoKSBdID0gbWF0Y2hbIDIgXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBtYXRjaCA9IHJlc3BvbnNlSGVhZGVyc1sga2V5LnRvTG93ZXJDYXNlKCkgXTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2ggPT0gbnVsbCA/
IG51bGwgOiBtYXRjaDsKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgLy8g
UmF3IHN0cmluZworICAgICAgICAgICAgICAgIGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0ZWQgPyByZXNwb25zZUhl
YWRlcnNTdHJpbmcgOiBudWxsOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAg
ICAvLyBDYWNoZXMgdGhlIGhlYWRlcgorICAgICAgICAgICAgICAgIHNldFJlcXVlc3RIZWFkZXI6
IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjb21w
bGV0ZWQgPT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSByZXF1ZXN0
SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSA9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHwgbmFt
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1
ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhp
czsKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgLy8gT3ZlcnJpZGVzIHJl
c3BvbnNlIGNvbnRlbnQtdHlwZSBoZWFkZXIKKyAgICAgICAgICAgICAgICBvdmVycmlkZU1pbWVU
eXBlOiBmdW5jdGlvbiggdHlwZSApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjb21wbGV0
ZWQgPT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMubWltZVR5cGUgPSB0eXBl
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
OworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAvLyBTdGF0dXMtZGVwZW5k
ZW50IGNhbGxiYWNrcworICAgICAgICAgICAgICAgIHN0YXR1c0NvZGU6IGZ1bmN0aW9uKCBtYXAg
KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlOworICAgICAgICAgICAgICAgICAgICBp
ZiAoIG1hcCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29tcGxldGVkICkgewor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXhlY3V0ZSB0aGUgYXBwcm9wcmlhdGUg
Y2FsbGJhY2tzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAganFYSFIuYWx3YXlzKCBtYXBb
IGpxWEhSLnN0YXR1cyBdICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGF6eS1hZGQgdGhlIG5ldyBjYWxsYmFja3Mg
aW4gYSB3YXkgdGhhdCBwcmVzZXJ2ZXMgb2xkIG9uZXMKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKCBjb2RlIGluIG1hcCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdHVzQ29kZVsgY29kZSBdID0gWyBzdGF0dXNDb2RlWyBjb2RlIF0sIG1hcFsgY29kZSBd
IF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAvLyBDYW5jZWwgdGhl
IHJlcXVlc3QKKyAgICAgICAgICAgICAgICBhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1RleHQgKSB7
CisgICAgICAgICAgICAgICAgICAgIHZhciBmaW5hbFRleHQgPSBzdGF0dXNUZXh0IHx8IHN0ckFi
b3J0OworICAgICAgICAgICAgICAgICAgICBpZiAoIHRyYW5zcG9ydCApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRyYW5zcG9ydC5hYm9ydCggZmluYWxUZXh0ICk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZG9uZSggMCwgZmluYWxUZXh0ICk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH07CisKKyAgICAgICAgLy8gQXR0YWNoIGRlZmVycmVkcworICAgICAgICBkZWZlcnJlZC5w
cm9taXNlKCBqcVhIUiApOworCisgICAgICAgIC8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJvdmlk
ZWQgKHByZWZpbHRlcnMgbWlnaHQgZXhwZWN0IGl0KQorICAgICAgICAvLyBIYW5kbGUgZmFsc3kg
dXJsIGluIHRoZSBzZXR0aW5ncyBvYmplY3QgKCMxMDA5MzogY29uc2lzdGVuY3kgd2l0aCBvbGQg
c2lnbmF0dXJlKQorICAgICAgICAvLyBXZSBhbHNvIHVzZSB0aGUgdXJsIHBhcmFtZXRlciBpZiBh
dmFpbGFibGUKKyAgICAgICAgcy51cmwgPSAoICggdXJsIHx8IHMudXJsIHx8IGxvY2F0aW9uLmhy
ZWYgKSArICIiICkKKyAgICAgICAgICAgIC5yZXBsYWNlKCBycHJvdG9jb2wsIGxvY2F0aW9uLnBy
b3RvY29sICsgIi8vIiApOworCisgICAgICAgIC8vIEFsaWFzIG1ldGhvZCBvcHRpb24gdG8gdHlw
ZSBhcyBwZXIgdGlja2V0ICMxMjAwNAorICAgICAgICBzLnR5cGUgPSBvcHRpb25zLm1ldGhvZCB8
fCBvcHRpb25zLnR5cGUgfHwgcy5tZXRob2QgfHwgcy50eXBlOworCisgICAgICAgIC8vIEV4dHJh
Y3QgZGF0YVR5cGVzIGxpc3QKKyAgICAgICAgcy5kYXRhVHlwZXMgPSAoIHMuZGF0YVR5cGUgfHwg
IioiICkudG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgIiIgXTsKKwor
ICAgICAgICAvLyBBIGNyb3NzLWRvbWFpbiByZXF1ZXN0IGlzIGluIG9yZGVyIHdoZW4gdGhlIG9y
aWdpbiBkb2Vzbid0IG1hdGNoIHRoZSBjdXJyZW50IG9yaWdpbi4KKyAgICAgICAgaWYgKCBzLmNy
b3NzRG9tYWluID09IG51bGwgKSB7CisgICAgICAgICAgICB1cmxBbmNob3IgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCAiYSIgKTsKKworICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUgPD04IC0g
MTEsIEVkZ2UgMTIgLSAxMworICAgICAgICAgICAgLy8gSUUgdGhyb3dzIGV4Y2VwdGlvbiBvbiBh
Y2Nlc3NpbmcgdGhlIGhyZWYgcHJvcGVydHkgaWYgdXJsIGlzIG1hbGZvcm1lZCwKKyAgICAgICAg
ICAgIC8vIGUuZy4gaHR0cDovL2V4YW1wbGUuY29tOjgweC8KKyAgICAgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICAgICAgdXJsQW5jaG9yLmhyZWYgPSBzLnVybDsKKworICAgICAgICAgICAgICAg
IC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExIG9ubHkKKyAgICAgICAgICAgICAgICAvLyBBbmNob3In
cyBob3N0IHByb3BlcnR5IGlzbid0IGNvcnJlY3RseSBzZXQgd2hlbiBzLnVybCBpcyByZWxhdGl2
ZQorICAgICAgICAgICAgICAgIHVybEFuY2hvci5ocmVmID0gdXJsQW5jaG9yLmhyZWY7CisgICAg
ICAgICAgICAgICAgcy5jcm9zc0RvbWFpbiA9IG9yaWdpbkFuY2hvci5wcm90b2NvbCArICIvLyIg
KyBvcmlnaW5BbmNob3IuaG9zdCAhPT0KKyAgICAgICAgICAgICAgICAgICAgdXJsQW5jaG9yLnBy
b3RvY29sICsgIi8vIiArIHVybEFuY2hvci5ob3N0OworICAgICAgICAgICAgfSBjYXRjaCAoIGUg
KSB7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhbiBlcnJvciBwYXJzaW5nIHRo
ZSBVUkwsIGFzc3VtZSBpdCBpcyBjcm9zc0RvbWFpbiwKKyAgICAgICAgICAgICAgICAvLyBpdCBj
YW4gYmUgcmVqZWN0ZWQgYnkgdGhlIHRyYW5zcG9ydCBpZiBpdCBpcyBpbnZhbGlkCisgICAgICAg
ICAgICAgICAgcy5jcm9zc0RvbWFpbiA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICAvLyBDb252ZXJ0IGRhdGEgaWYgbm90IGFscmVhZHkgYSBzdHJpbmcKKyAgICAg
ICAgaWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJiB0eXBlb2Ygcy5kYXRhICE9PSAic3Ry
aW5nIiApIHsKKyAgICAgICAgICAgIHMuZGF0YSA9IGpRdWVyeS5wYXJhbSggcy5kYXRhLCBzLnRy
YWRpdGlvbmFsICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBBcHBseSBwcmVmaWx0ZXJzCisg
ICAgICAgIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzLCBzLCBvcHRp
b25zLCBqcVhIUiApOworCisgICAgICAgIC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRl
IGEgcHJlZmlsdGVyLCBzdG9wIHRoZXJlCisgICAgICAgIGlmICggY29tcGxldGVkICkgeworICAg
ICAgICAgICAgcmV0dXJuIGpxWEhSOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgY2FuIGZp
cmUgZ2xvYmFsIGV2ZW50cyBhcyBvZiBub3cgaWYgYXNrZWQgdG8KKyAgICAgICAgLy8gRG9uJ3Qg
ZmlyZSBldmVudHMgaWYgalF1ZXJ5LmV2ZW50IGlzIHVuZGVmaW5lZCBpbiBhbiBBTUQtdXNhZ2Ug
c2NlbmFyaW8gKCMxNTExOCkKKyAgICAgICAgZmlyZUdsb2JhbHMgPSBqUXVlcnkuZXZlbnQgJiYg
cy5nbG9iYWw7CisKKyAgICAgICAgLy8gV2F0Y2ggZm9yIGEgbmV3IHNldCBvZiByZXF1ZXN0cwor
ICAgICAgICBpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVyeS5hY3RpdmUrKyA9PT0gMCApIHsKKyAg
ICAgICAgICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyKCAiYWpheFN0YXJ0IiApOworICAgICAgICB9
CisKKyAgICAgICAgLy8gVXBwZXJjYXNlIHRoZSB0eXBlCisgICAgICAgIHMudHlwZSA9IHMudHlw
ZS50b1VwcGVyQ2FzZSgpOworCisgICAgICAgIC8vIERldGVybWluZSBpZiByZXF1ZXN0IGhhcyBj
b250ZW50CisgICAgICAgIHMuaGFzQ29udGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMudHlwZSAp
OworCisgICAgICAgIC8vIFNhdmUgdGhlIFVSTCBpbiBjYXNlIHdlJ3JlIHRveWluZyB3aXRoIHRo
ZSBJZi1Nb2RpZmllZC1TaW5jZQorICAgICAgICAvLyBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFk
ZXIgbGF0ZXIgb24KKyAgICAgICAgLy8gUmVtb3ZlIGhhc2ggdG8gc2ltcGxpZnkgdXJsIG1hbmlw
dWxhdGlvbgorICAgICAgICBjYWNoZVVSTCA9IHMudXJsLnJlcGxhY2UoIHJoYXNoLCAiIiApOwor
CisgICAgICAgIC8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBj
b250ZW50CisgICAgICAgIGlmICggIXMuaGFzQ29udGVudCApIHsKKworICAgICAgICAgICAgLy8g
UmVtZW1iZXIgdGhlIGhhc2ggc28gd2UgY2FuIHB1dCBpdCBiYWNrCisgICAgICAgICAgICB1bmNh
Y2hlZCA9IHMudXJsLnNsaWNlKCBjYWNoZVVSTC5sZW5ndGggKTsKKworICAgICAgICAgICAgLy8g
SWYgZGF0YSBpcyBhdmFpbGFibGUsIGFwcGVuZCBkYXRhIHRvIHVybAorICAgICAgICAgICAgaWYg
KCBzLmRhdGEgKSB7CisgICAgICAgICAgICAgICAgY2FjaGVVUkwgKz0gKCBycXVlcnkudGVzdCgg
Y2FjaGVVUkwgKSA/ICImIiA6ICI/IiApICsgcy5kYXRhOworCisgICAgICAgICAgICAgICAgLy8g
Izk2ODI6IHJlbW92ZSBkYXRhIHNvIHRoYXQgaXQncyBub3QgdXNlZCBpbiBhbiBldmVudHVhbCBy
ZXRyeQorICAgICAgICAgICAgICAgIGRlbGV0ZSBzLmRhdGE7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEFkZCBvciB1cGRhdGUgYW50aS1jYWNoZSBwYXJhbSBpZiBuZWVkZWQKKyAg
ICAgICAgICAgIGlmICggcy5jYWNoZSA9PT0gZmFsc2UgKSB7CisgICAgICAgICAgICAgICAgY2Fj
aGVVUkwgPSBjYWNoZVVSTC5yZXBsYWNlKCByYW50aUNhY2hlLCAiJDEiICk7CisgICAgICAgICAg
ICAgICAgdW5jYWNoZWQgPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gIiYiIDogIj8iICkg
KyAiXz0iICsgKCBub25jZSsrICkgKyB1bmNhY2hlZDsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLy8gUHV0IGhhc2ggYW5kIGFudGktY2FjaGUgb24gdGhlIFVSTCB0aGF0IHdpbGwgYmUg
cmVxdWVzdGVkIChnaC0xNzMyKQorICAgICAgICAgICAgcy51cmwgPSBjYWNoZVVSTCArIHVuY2Fj
aGVkOworCisgICAgICAgIC8vIENoYW5nZSAnJTIwJyB0byAnKycgaWYgdGhpcyBpcyBlbmNvZGVk
IGZvcm0gYm9keSBjb250ZW50IChnaC0yNjU4KQorICAgICAgICB9IGVsc2UgaWYgKCBzLmRhdGEg
JiYgcy5wcm9jZXNzRGF0YSAmJgorICAgICAgICAgICAgKCBzLmNvbnRlbnRUeXBlIHx8ICIiICku
aW5kZXhPZiggImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIgKSA9PT0gMCApIHsK
KyAgICAgICAgICAgIHMuZGF0YSA9IHMuZGF0YS5yZXBsYWNlKCByMjAsICIrIiApOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9u
ZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS4KKyAgICAgICAgaWYgKCBzLmlm
TW9kaWZpZWQgKSB7CisgICAgICAgICAgICBpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hl
VVJMIF0gKSB7CisgICAgICAgICAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRlciggIklmLU1v
ZGlmaWVkLVNpbmNlIiwgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApIHsKKyAg
ICAgICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTm9uZS1NYXRjaCIsIGpR
dWVyeS5ldGFnWyBjYWNoZVVSTCBdICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICAvLyBTZXQgdGhlIGNvcnJlY3QgaGVhZGVyLCBpZiBkYXRhIGlzIGJlaW5nIHNlbnQKKyAg
ICAgICAgaWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5cGUgIT09IGZh
bHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7CisgICAgICAgICAgICBqcVhIUi5zZXRSZXF1
ZXN0SGVhZGVyKCAiQ29udGVudC1UeXBlIiwgcy5jb250ZW50VHlwZSApOworICAgICAgICB9CisK
KyAgICAgICAgLy8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5k
aW5nIG9uIHRoZSBkYXRhVHlwZQorICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKAorICAg
ICAgICAgICAgIkFjY2VwdCIsCisgICAgICAgICAgICBzLmRhdGFUeXBlc1sgMCBdICYmIHMuYWNj
ZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdID8KKyAgICAgICAgICAgICAgICBzLmFjY2VwdHNbIHMu
ZGF0YVR5cGVzWyAwIF0gXSArCisgICAgICAgICAgICAgICAgICAgICggcy5kYXRhVHlwZXNbIDAg
XSAhPT0gIioiID8gIiwgIiArIGFsbFR5cGVzICsgIjsgcT0wLjAxIiA6ICIiICkgOgorICAgICAg
ICAgICAgICAgIHMuYWNjZXB0c1sgIioiIF0KKyAgICAgICAgKTsKKworICAgICAgICAvLyBDaGVj
ayBmb3IgaGVhZGVycyBvcHRpb24KKyAgICAgICAgZm9yICggaSBpbiBzLmhlYWRlcnMgKSB7Cisg
ICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gQWxsb3cgY3VzdG9tIGhlYWRlcnMvbWltZXR5cGVzIGFu
ZCBlYXJseSBhYm9ydAorICAgICAgICBpZiAoIHMuYmVmb3JlU2VuZCAmJgorICAgICAgICAgICAg
KCBzLmJlZm9yZVNlbmQuY2FsbCggY2FsbGJhY2tDb250ZXh0LCBqcVhIUiwgcyApID09PSBmYWxz
ZSB8fCBjb21wbGV0ZWQgKSApIHsKKworICAgICAgICAgICAgLy8gQWJvcnQgaWYgbm90IGRvbmUg
YWxyZWFkeSBhbmQgcmV0dXJuCisgICAgICAgICAgICByZXR1cm4ganFYSFIuYWJvcnQoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIEFib3J0aW5nIGlzIG5vIGxvbmdlciBhIGNhbmNlbGxhdGlv
bgorICAgICAgICBzdHJBYm9ydCA9ICJhYm9ydCI7CisKKyAgICAgICAgLy8gSW5zdGFsbCBjYWxs
YmFja3Mgb24gZGVmZXJyZWRzCisgICAgICAgIGNvbXBsZXRlRGVmZXJyZWQuYWRkKCBzLmNvbXBs
ZXRlICk7CisgICAgICAgIGpxWEhSLmRvbmUoIHMuc3VjY2VzcyApOworICAgICAgICBqcVhIUi5m
YWlsKCBzLmVycm9yICk7CisKKyAgICAgICAgLy8gR2V0IHRyYW5zcG9ydAorICAgICAgICB0cmFu
c3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0
aW9ucywganFYSFIgKTsKKworICAgICAgICAvLyBJZiBubyB0cmFuc3BvcnQsIHdlIGF1dG8tYWJv
cnQKKyAgICAgICAgaWYgKCAhdHJhbnNwb3J0ICkgeworICAgICAgICAgICAgZG9uZSggLTEsICJO
byBUcmFuc3BvcnQiICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBqcVhIUi5yZWFk
eVN0YXRlID0gMTsKKworICAgICAgICAgICAgLy8gU2VuZCBnbG9iYWwgZXZlbnQKKyAgICAgICAg
ICAgIGlmICggZmlyZUdsb2JhbHMgKSB7CisgICAgICAgICAgICAgICAgZ2xvYmFsRXZlbnRDb250
ZXh0LnRyaWdnZXIoICJhamF4U2VuZCIsIFsganFYSFIsIHMgXSApOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhamF4U2VuZCwg
c3RvcCB0aGVyZQorICAgICAgICAgICAgaWYgKCBjb21wbGV0ZWQgKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGpxWEhSOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUaW1lb3V0
CisgICAgICAgICAgICBpZiAoIHMuYXN5bmMgJiYgcy50aW1lb3V0ID4gMCApIHsKKyAgICAgICAg
ICAgICAgICB0aW1lb3V0VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGpxWEhSLmFib3J0KCAidGltZW91dCIgKTsKKyAgICAgICAgICAg
ICAgICB9LCBzLnRpbWVvdXQgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdHJ5IHsK
KyAgICAgICAgICAgICAgICBjb21wbGV0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB0cmFu
c3BvcnQuc2VuZCggcmVxdWVzdEhlYWRlcnMsIGRvbmUgKTsKKyAgICAgICAgICAgIH0gY2F0Y2gg
KCBlICkgeworCisgICAgICAgICAgICAgICAgLy8gUmV0aHJvdyBwb3N0LWNvbXBsZXRpb24gZXhj
ZXB0aW9ucworICAgICAgICAgICAgICAgIGlmICggY29tcGxldGVkICkgeworICAgICAgICAgICAg
ICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8v
IFByb3BhZ2F0ZSBvdGhlcnMgYXMgcmVzdWx0cworICAgICAgICAgICAgICAgIGRvbmUoIC0xLCBl
ICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBDYWxsYmFjayBmb3Ig
d2hlbiBldmVyeXRoaW5nIGlzIGRvbmUKKyAgICAgICAgZnVuY3Rpb24gZG9uZSggc3RhdHVzLCBu
YXRpdmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7CisgICAgICAgICAgICB2YXIg
aXNTdWNjZXNzLCBzdWNjZXNzLCBlcnJvciwgcmVzcG9uc2UsIG1vZGlmaWVkLAorICAgICAgICAg
ICAgICAgIHN0YXR1c1RleHQgPSBuYXRpdmVTdGF0dXNUZXh0OworCisgICAgICAgICAgICAvLyBJ
Z25vcmUgcmVwZWF0IGludm9jYXRpb25zCisgICAgICAgICAgICBpZiAoIGNvbXBsZXRlZCApIHsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNv
bXBsZXRlZCA9IHRydWU7CisKKyAgICAgICAgICAgIC8vIENsZWFyIHRpbWVvdXQgaWYgaXQgZXhp
c3RzCisgICAgICAgICAgICBpZiAoIHRpbWVvdXRUaW1lciApIHsKKyAgICAgICAgICAgICAgICB3
aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0VGltZXIgKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxl
Y3Rpb24KKyAgICAgICAgICAgIC8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVj
dCB3aWxsIGJlIHVzZWQpCisgICAgICAgICAgICB0cmFuc3BvcnQgPSB1bmRlZmluZWQ7CisKKyAg
ICAgICAgICAgIC8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnMKKyAgICAgICAgICAgIHJlc3BvbnNl
SGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgIiI7CisKKyAgICAgICAgICAgIC8vIFNldCByZWFk
eVN0YXRlCisgICAgICAgICAgICBqcVhIUi5yZWFkeVN0YXRlID0gc3RhdHVzID4gMCA/IDQgOiAw
OworCisgICAgICAgICAgICAvLyBEZXRlcm1pbmUgaWYgc3VjY2Vzc2Z1bAorICAgICAgICAgICAg
aXNTdWNjZXNzID0gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAz
MDQ7CisKKyAgICAgICAgICAgIC8vIEdldCByZXNwb25zZSBkYXRhCisgICAgICAgICAgICBpZiAo
IHJlc3BvbnNlcyApIHsKKyAgICAgICAgICAgICAgICByZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNw
b25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gQ29udmVydCBubyBtYXR0ZXIgd2hhdCAodGhhdCB3YXkgcmVzcG9uc2VYWFggZmllbGRz
IGFyZSBhbHdheXMgc2V0KQorICAgICAgICAgICAgcmVzcG9uc2UgPSBhamF4Q29udmVydCggcywg
cmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKTsKKworICAgICAgICAgICAgLy8gSWYgc3VjY2Vz
c2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmcKKyAgICAgICAgICAgIGlmICggaXNTdWNjZXNzICkg
eworCisgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3Ig
SWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS4KKyAgICAgICAgICAg
ICAgICBpZiAoIHMuaWZNb2RpZmllZCApIHsKKyAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWQg
PSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggIkxhc3QtTW9kaWZpZWQiICk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICggbW9kaWZpZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqUXVl
cnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhl
YWRlciggImV0YWciICk7CisgICAgICAgICAgICAgICAgICAgIGlmICggbW9kaWZpZWQgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSA9IG1vZGlmaWVk
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgLy8gaWYgbm8gY29udGVudAorICAgICAgICAgICAgICAgIGlmICggc3RhdHVzID09PSAy
MDQgfHwgcy50eXBlID09PSAiSEVBRCIgKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1c1Rl
eHQgPSAibm9jb250ZW50IjsKKworICAgICAgICAgICAgICAgIC8vIGlmIG5vdCBtb2RpZmllZAor
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHN0YXR1cyA9PT0gMzA0ICkgeworICAgICAgICAg
ICAgICAgICAgICBzdGF0dXNUZXh0ID0gIm5vdG1vZGlmaWVkIjsKKworICAgICAgICAgICAgICAg
IC8vIElmIHdlIGhhdmUgZGF0YSwgbGV0J3MgY29udmVydCBpdAorICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0ZTsK
KyAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHJlc3BvbnNlLmRhdGE7CisgICAgICAgICAg
ICAgICAgICAgIGVycm9yID0gcmVzcG9uc2UuZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIGlz
U3VjY2VzcyA9ICFlcnJvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ug
eworCisgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBlcnJvciBmcm9tIHN0YXR1c1RleHQgYW5k
IG5vcm1hbGl6ZSBmb3Igbm9uLWFib3J0cworICAgICAgICAgICAgICAgIGVycm9yID0gc3RhdHVz
VGV4dDsKKyAgICAgICAgICAgICAgICBpZiAoIHN0YXR1cyB8fCAhc3RhdHVzVGV4dCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9ICJlcnJvciI7CisgICAgICAgICAgICAgICAg
ICAgIGlmICggc3RhdHVzIDwgMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9
IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIFNldCBkYXRhIGZvciB0aGUgZmFrZSB4aHIgb2JqZWN0Cisg
ICAgICAgICAgICBqcVhIUi5zdGF0dXMgPSBzdGF0dXM7CisgICAgICAgICAgICBqcVhIUi5zdGF0
dXNUZXh0ID0gKCBuYXRpdmVTdGF0dXNUZXh0IHx8IHN0YXR1c1RleHQgKSArICIiOworCisgICAg
ICAgICAgICAvLyBTdWNjZXNzL0Vycm9yCisgICAgICAgICAgICBpZiAoIGlzU3VjY2VzcyApIHsK
KyAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBb
IHN1Y2Nlc3MsIHN0YXR1c1RleHQsIGpxWEhSIF0gKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgZGVmZXJyZWQucmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpx
WEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzCisgICAgICAgICAgICBqcVhIUi5zdGF0dXND
b2RlKCBzdGF0dXNDb2RlICk7CisgICAgICAgICAgICBzdGF0dXNDb2RlID0gdW5kZWZpbmVkOwor
CisgICAgICAgICAgICBpZiAoIGZpcmVHbG9iYWxzICkgeworICAgICAgICAgICAgICAgIGdsb2Jh
bEV2ZW50Q29udGV4dC50cmlnZ2VyKCBpc1N1Y2Nlc3MgPyAiYWpheFN1Y2Nlc3MiIDogImFqYXhF
cnJvciIsCisgICAgICAgICAgICAgICAgICAgIFsganFYSFIsIHMsIGlzU3VjY2VzcyA/IHN1Y2Nl
c3MgOiBlcnJvciBdICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENvbXBsZXRl
CisgICAgICAgICAgICBjb21wbGV0ZURlZmVycmVkLmZpcmVXaXRoKCBjYWxsYmFja0NvbnRleHQs
IFsganFYSFIsIHN0YXR1c1RleHQgXSApOworCisgICAgICAgICAgICBpZiAoIGZpcmVHbG9iYWxz
ICkgeworICAgICAgICAgICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheENv
bXBsZXRlIiwgWyBqcVhIUiwgcyBdICk7CisKKyAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhl
IGdsb2JhbCBBSkFYIGNvdW50ZXIKKyAgICAgICAgICAgICAgICBpZiAoICEoIC0talF1ZXJ5LmFj
dGl2ZSApICkgeworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggImFq
YXhTdG9wIiApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBqcVhIUjsKKyAgICB9LAorCisgICAgZ2V0SlNPTjogZnVuY3Rpb24o
IHVybCwgZGF0YSwgY2FsbGJhY2sgKSB7CisgICAgICAgIHJldHVybiBqUXVlcnkuZ2V0KCB1cmws
IGRhdGEsIGNhbGxiYWNrLCAianNvbiIgKTsKKyAgICB9LAorCisgICAgZ2V0U2NyaXB0OiBmdW5j
dGlvbiggdXJsLCBjYWxsYmFjayApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5nZXQoIHVybCwg
dW5kZWZpbmVkLCBjYWxsYmFjaywgInNjcmlwdCIgKTsKKyAgICB9Cit9ICk7CisKK2pRdWVyeS5l
YWNoKCBbICJnZXQiLCAicG9zdCIgXSwgZnVuY3Rpb24oIGksIG1ldGhvZCApIHsKKyAgICBqUXVl
cnlbIG1ldGhvZCBdID0gZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2ssIHR5cGUgKSB7CisK
KyAgICAgICAgLy8gU2hpZnQgYXJndW1lbnRzIGlmIGRhdGEgYXJndW1lbnQgd2FzIG9taXR0ZWQK
KyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggZGF0YSApICkgeworICAgICAgICAgICAg
dHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7CisgICAgICAgICAgICBjYWxsYmFjayA9IGRhdGE7Cisg
ICAgICAgICAgICBkYXRhID0gdW5kZWZpbmVkOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhl
IHVybCBjYW4gYmUgYW4gb3B0aW9ucyBvYmplY3QgKHdoaWNoIHRoZW4gbXVzdCBoYXZlIC51cmwp
CisgICAgICAgIHJldHVybiBqUXVlcnkuYWpheCggalF1ZXJ5LmV4dGVuZCggeworICAgICAgICAg
ICAgdXJsOiB1cmwsCisgICAgICAgICAgICB0eXBlOiBtZXRob2QsCisgICAgICAgICAgICBkYXRh
VHlwZTogdHlwZSwKKyAgICAgICAgICAgIGRhdGE6IGRhdGEsCisgICAgICAgICAgICBzdWNjZXNz
OiBjYWxsYmFjaworICAgICAgICB9LCBqUXVlcnkuaXNQbGFpbk9iamVjdCggdXJsICkgJiYgdXJs
ICkgKTsKKyAgICB9OworfSApOworCisKK2pRdWVyeS5fZXZhbFVybCA9IGZ1bmN0aW9uKCB1cmwg
KSB7CisgICAgcmV0dXJuIGpRdWVyeS5hamF4KCB7CisgICAgICAgIHVybDogdXJsLAorCisgICAg
ICAgIC8vIE1ha2UgdGhpcyBleHBsaWNpdCwgc2luY2UgdXNlciBjYW4gb3ZlcnJpZGUgdGhpcyB0
aHJvdWdoIGFqYXhTZXR1cCAoIzExMjY0KQorICAgICAgICB0eXBlOiAiR0VUIiwKKyAgICAgICAg
ZGF0YVR5cGU6ICJzY3JpcHQiLAorICAgICAgICBjYWNoZTogdHJ1ZSwKKyAgICAgICAgYXN5bmM6
IGZhbHNlLAorICAgICAgICBnbG9iYWw6IGZhbHNlLAorICAgICAgICAidGhyb3dzIjogdHJ1ZQor
ICAgIH0gKTsKK307CisKKworalF1ZXJ5LmZuLmV4dGVuZCggeworICAgIHdyYXBBbGw6IGZ1bmN0
aW9uKCBodG1sICkgeworICAgICAgICB2YXIgd3JhcDsKKworICAgICAgICBpZiAoIHRoaXNbIDAg
XSApIHsKKyAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKSApIHsKKyAg
ICAgICAgICAgICAgICBodG1sID0gaHRtbC5jYWxsKCB0aGlzWyAwIF0gKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91
bmQKKyAgICAgICAgICAgIHdyYXAgPSBqUXVlcnkoIGh0bWwsIHRoaXNbIDAgXS5vd25lckRvY3Vt
ZW50ICkuZXEoIDAgKS5jbG9uZSggdHJ1ZSApOworCisgICAgICAgICAgICBpZiAoIHRoaXNbIDAg
XS5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgICAgIHdyYXAuaW5zZXJ0QmVmb3JlKCB0aGlz
WyAwIF0gKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd3JhcC5tYXAoIGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICAgIHZhciBlbGVtID0gdGhpczsKKworICAgICAgICAgICAgICAg
IHdoaWxlICggZWxlbS5maXJzdEVsZW1lbnRDaGlsZCApIHsKKyAgICAgICAgICAgICAgICAgICAg
ZWxlbSA9IGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQ7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVsZW07CisgICAgICAgICAgICB9ICkuYXBwZW5kKCB0aGlzICk7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgd3JhcElu
bmVyOiBmdW5jdGlvbiggaHRtbCApIHsKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbigg
aHRtbCApICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7
CisgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkud3JhcElubmVyKCBodG1sLmNhbGwoIHRo
aXMsIGkgKSApOworICAgICAgICAgICAgfSApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgc2VsZiA9IGpRdWVyeSgg
dGhpcyApLAorICAgICAgICAgICAgICAgIGNvbnRlbnRzID0gc2VsZi5jb250ZW50cygpOworCisg
ICAgICAgICAgICBpZiAoIGNvbnRlbnRzLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICBjb250
ZW50cy53cmFwQWxsKCBodG1sICk7CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgc2VsZi5hcHBlbmQoIGh0bWwgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOwor
ICAgIH0sCisKKyAgICB3cmFwOiBmdW5jdGlvbiggaHRtbCApIHsKKyAgICAgICAgdmFyIGlzRnVu
Y3Rpb24gPSBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApOworCisgICAgICAgIHJldHVybiB0aGlz
LmVhY2goIGZ1bmN0aW9uKCBpICkgeworICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkud3JhcEFs
bCggaXNGdW5jdGlvbiA/IGh0bWwuY2FsbCggdGhpcywgaSApIDogaHRtbCApOworICAgICAgICB9
ICk7CisgICAgfSwKKworICAgIHVud3JhcDogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAg
ICB0aGlzLnBhcmVudCggc2VsZWN0b3IgKS5ub3QoICJib2R5IiApLmVhY2goIGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMuY2hpbGROb2Rl
cyApOworICAgICAgICB9ICk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KK30gKTsKKwor
CitqUXVlcnkuZXhwci5wc2V1ZG9zLmhpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtICkgeworICAgIHJl
dHVybiAhalF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlKCBlbGVtICk7Cit9OworalF1ZXJ5LmV4
cHIucHNldWRvcy52aXNpYmxlID0gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgcmV0dXJuICEhKCBl
bGVtLm9mZnNldFdpZHRoIHx8IGVsZW0ub2Zmc2V0SGVpZ2h0IHx8IGVsZW0uZ2V0Q2xpZW50UmVj
dHMoKS5sZW5ndGggKTsKK307CisKKworCisKK2pRdWVyeS5hamF4U2V0dGluZ3MueGhyID0gZnVu
Y3Rpb24oKSB7CisgICAgdHJ5IHsKKyAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJl
cXVlc3QoKTsKKyAgICB9IGNhdGNoICggZSApIHt9Cit9OworCit2YXIgeGhyU3VjY2Vzc1N0YXR1
cyA9IHsKKworICAgICAgICAvLyBGaWxlIHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIGNv
ZGUgMCwgYXNzdW1lIDIwMAorICAgICAgICAwOiAyMDAsCisKKyAgICAgICAgLy8gU3VwcG9ydDog
SUUgPD05IG9ubHkKKyAgICAgICAgLy8gIzE0NTA6IHNvbWV0aW1lcyBJRSByZXR1cm5zIDEyMjMg
d2hlbiBpdCBzaG91bGQgYmUgMjA0CisgICAgICAgIDEyMjM6IDIwNAorICAgIH0sCisgICAgeGhy
U3VwcG9ydGVkID0galF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKTsKKworc3VwcG9ydC5jb3JzID0g
ISF4aHJTdXBwb3J0ZWQgJiYgKCAid2l0aENyZWRlbnRpYWxzIiBpbiB4aHJTdXBwb3J0ZWQgKTsK
K3N1cHBvcnQuYWpheCA9IHhoclN1cHBvcnRlZCA9ICEheGhyU3VwcG9ydGVkOworCitqUXVlcnku
YWpheFRyYW5zcG9ydCggZnVuY3Rpb24oIG9wdGlvbnMgKSB7CisgICAgdmFyIGNhbGxiYWNrLCBl
cnJvckNhbGxiYWNrOworCisgICAgLy8gQ3Jvc3MgZG9tYWluIG9ubHkgYWxsb3dlZCBpZiBzdXBw
b3J0ZWQgdGhyb3VnaCBYTUxIdHRwUmVxdWVzdAorICAgIGlmICggc3VwcG9ydC5jb3JzIHx8IHho
clN1cHBvcnRlZCAmJiAhb3B0aW9ucy5jcm9zc0RvbWFpbiApIHsKKyAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgIHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0ZSApIHsKKyAgICAg
ICAgICAgICAgICB2YXIgaSwKKyAgICAgICAgICAgICAgICAgICAgeGhyID0gb3B0aW9ucy54aHIo
KTsKKworICAgICAgICAgICAgICAgIHhoci5vcGVuKAorICAgICAgICAgICAgICAgICAgICBvcHRp
b25zLnR5cGUsCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudXJsLAorICAgICAgICAgICAg
ICAgICAgICBvcHRpb25zLmFzeW5jLAorICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnVzZXJu
YW1lLAorICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnBhc3N3b3JkCisgICAgICAgICAgICAg
ICAgKTsKKworICAgICAgICAgICAgICAgIC8vIEFwcGx5IGN1c3RvbSBmaWVsZHMgaWYgcHJvdmlk
ZWQKKyAgICAgICAgICAgICAgICBpZiAoIG9wdGlvbnMueGhyRmllbGRzICkgeworICAgICAgICAg
ICAgICAgICAgICBmb3IgKCBpIGluIG9wdGlvbnMueGhyRmllbGRzICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgeGhyWyBpIF0gPSBvcHRpb25zLnhockZpZWxkc1sgaSBdOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gT3Zl
cnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZAorICAgICAgICAgICAgICAgIGlmICggb3B0aW9ucy5t
aW1lVHlwZSAmJiB4aHIub3ZlcnJpZGVNaW1lVHlwZSApIHsKKyAgICAgICAgICAgICAgICAgICAg
eGhyLm92ZXJyaWRlTWltZVR5cGUoIG9wdGlvbnMubWltZVR5cGUgKTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAvLyBYLVJlcXVlc3RlZC1XaXRoIGhlYWRlcgorICAgICAg
ICAgICAgICAgIC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRp
b25zIGZvciBhIHByZWZsaWdodCBhcmUKKyAgICAgICAgICAgICAgICAvLyBha2luIHRvIGEgamln
c2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLgorICAgICAgICAg
ICAgICAgIC8vIChpdCBjYW4gYWx3YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIG9y
IGV2ZW4gdXNpbmcgYWpheFNldHVwKQorICAgICAgICAgICAgICAgIC8vIEZvciBzYW1lLWRvbWFp
biByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVkLgorICAg
ICAgICAgICAgICAgIGlmICggIW9wdGlvbnMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbICJYLVJl
cXVlc3RlZC1XaXRoIiBdICkgeworICAgICAgICAgICAgICAgICAgICBoZWFkZXJzWyAiWC1SZXF1
ZXN0ZWQtV2l0aCIgXSA9ICJYTUxIdHRwUmVxdWVzdCI7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgLy8gU2V0IGhlYWRlcnMKKyAgICAgICAgICAgICAgICBmb3IgKCBpIGlu
IGhlYWRlcnMgKSB7CisgICAgICAgICAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCBp
LCBoZWFkZXJzWyBpIF0gKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAv
LyBDYWxsYmFjaworICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24oIHR5cGUgKSB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggY2FsbGJhY2sgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrID0geGhyLm9ubG9hZCA9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0geGhyLm9uYWJvcnQgPSB4aHIub25yZWFkeXN0
YXRlY2hhbmdlID0gbnVsbDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlw
ZSA9PT0gImFib3J0IiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLmFi
b3J0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggdHlwZSA9PT0g
ImVycm9yIiApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0
OiBJRSA8PTkgb25seQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPbiBhIG1h
bnVhbCBuYXRpdmUgYWJvcnQsIElFOSB0aHJvd3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gZXJyb3JzIG9uIGFueSBwcm9wZXJ0eSBhY2Nlc3MgdGhhdCBpcyBub3QgcmVhZHlT
dGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiB4aHIuc3Rh
dHVzICE9PSAibnVtYmVyIiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbXBsZXRlKCAwLCAiZXJyb3IiICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSgK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbGU6IHByb3Rv
Y29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIDA7IHNlZSAjODYwNSwgIzE0MjA3CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLnN0YXR1cywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIuc3RhdHVzVGV4dAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbXBsZXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeGhyU3VjY2Vzc1N0YXR1c1sgeGhyLnN0YXR1cyBdIHx8IHhoci5zdGF0dXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIuc3RhdHVzVGV4dCwKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUgPD05IG9ubHkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFOSBoYXMgbm8gWEhSMiBidXQg
dGhyb3dzIG9uIGJpbmFyeSAodHJhYy0xMTQyNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEZvciBYSFIyIG5vbi10ZXh0LCBsZXQgdGhlIGNhbGxlciBoYW5kbGUgaXQg
KGdoLTI0OTgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHhoci5yZXNw
b25zZVR5cGUgfHwgInRleHQiICkgIT09ICJ0ZXh0IiAgfHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGVvZiB4aHIucmVzcG9uc2VUZXh0ICE9PSAic3RyaW5nIiA/Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBiaW5hcnk6IHhoci5yZXNw
b25zZSB9IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHRleHQ6
IHhoci5yZXNwb25zZVRleHQgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9OworCisg
ICAgICAgICAgICAgICAgLy8gTGlzdGVuIHRvIGV2ZW50cworICAgICAgICAgICAgICAgIHhoci5v
bmxvYWQgPSBjYWxsYmFjaygpOworICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2sgPSB4aHIu
b25lcnJvciA9IGNhbGxiYWNrKCAiZXJyb3IiICk7CisKKyAgICAgICAgICAgICAgICAvLyBTdXBw
b3J0OiBJRSA5IG9ubHkKKyAgICAgICAgICAgICAgICAvLyBVc2Ugb25yZWFkeXN0YXRlY2hhbmdl
IHRvIHJlcGxhY2Ugb25hYm9ydAorICAgICAgICAgICAgICAgIC8vIHRvIGhhbmRsZSB1bmNhdWdo
dCBhYm9ydHMKKyAgICAgICAgICAgICAgICBpZiAoIHhoci5vbmFib3J0ICE9PSB1bmRlZmluZWQg
KSB7CisgICAgICAgICAgICAgICAgICAgIHhoci5vbmFib3J0ID0gZXJyb3JDYWxsYmFjazsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB4aHIub25yZWFkeXN0
YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENo
ZWNrIHJlYWR5U3RhdGUgYmVmb3JlIHRpbWVvdXQgYXMgaXQgY2hhbmdlcworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEFsbG93IG9uZXJyb3IgdG8gYmUgY2FsbGVkIGZpcnN0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1dCB0aGF0IHdpbGwgbm90IGhhbmRsZSBhIG5h
dGl2ZSBhYm9ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFsc28sIHNhdmUgZXJy
b3JDYWxsYmFjayB0byBhIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
YXMgeGhyLm9uZXJyb3IgY2Fubm90IGJlIGFjY2Vzc2VkCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXJyb3JDYWxsYmFjaygpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgYWJvcnQgY2FsbGJhY2sKKyAgICAgICAgICAg
ICAgICBjYWxsYmFjayA9IGNhbGxiYWNrKCAiYWJvcnQiICk7CisKKyAgICAgICAgICAgICAgICB0
cnkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIERvIHNlbmQgdGhlIHJlcXVlc3QgKHRoaXMg
bWF5IHJhaXNlIGFuIGV4Y2VwdGlvbikKKyAgICAgICAgICAgICAgICAgICAgeGhyLnNlbmQoIG9w
dGlvbnMuaGFzQ29udGVudCAmJiBvcHRpb25zLmRhdGEgfHwgbnVsbCApOworICAgICAgICAgICAg
ICAgIH0gY2F0Y2ggKCBlICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vICMxNDY4MzogT25s
eSByZXRocm93IGlmIHRoaXMgaGFzbid0IGJlZW4gbm90aWZpZWQgYXMgYW4gZXJyb3IgeWV0Cisg
ICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2sgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0aHJvdyBlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgIGlmICggY2FsbGJhY2sgKSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNr
KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0K
K30gKTsKKworCisKKworLy8gUHJldmVudCBhdXRvLWV4ZWN1dGlvbiBvZiBzY3JpcHRzIHdoZW4g
bm8gZXhwbGljaXQgZGF0YVR5cGUgd2FzIHByb3ZpZGVkIChTZWUgZ2gtMjQzMikKK2pRdWVyeS5h
amF4UHJlZmlsdGVyKCBmdW5jdGlvbiggcyApIHsKKyAgICBpZiAoIHMuY3Jvc3NEb21haW4gKSB7
CisgICAgICAgIHMuY29udGVudHMuc2NyaXB0ID0gZmFsc2U7CisgICAgfQorfSApOworCisvLyBJ
bnN0YWxsIHNjcmlwdCBkYXRhVHlwZQoralF1ZXJ5LmFqYXhTZXR1cCggeworICAgIGFjY2VwdHM6
IHsKKyAgICAgICAgc2NyaXB0OiAidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2Ny
aXB0LCAiICsKKyAgICAgICAgICAgICJhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlv
bi94LWVjbWFzY3JpcHQiCisgICAgfSwKKyAgICBjb250ZW50czogeworICAgICAgICBzY3JpcHQ6
IC9cYig/OmphdmF8ZWNtYSlzY3JpcHRcYi8KKyAgICB9LAorICAgIGNvbnZlcnRlcnM6IHsKKyAg
ICAgICAgInRleHQgc2NyaXB0IjogZnVuY3Rpb24oIHRleHQgKSB7CisgICAgICAgICAgICBqUXVl
cnkuZ2xvYmFsRXZhbCggdGV4dCApOworICAgICAgICAgICAgcmV0dXJuIHRleHQ7CisgICAgICAg
IH0KKyAgICB9Cit9ICk7CisKKy8vIEhhbmRsZSBjYWNoZSdzIHNwZWNpYWwgY2FzZSBhbmQgY3Jv
c3NEb21haW4KK2pRdWVyeS5hamF4UHJlZmlsdGVyKCAic2NyaXB0IiwgZnVuY3Rpb24oIHMgKSB7
CisgICAgaWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgIHMuY2FjaGUgPSBm
YWxzZTsKKyAgICB9CisgICAgaWYgKCBzLmNyb3NzRG9tYWluICkgeworICAgICAgICBzLnR5cGUg
PSAiR0VUIjsKKyAgICB9Cit9ICk7CisKKy8vIEJpbmQgc2NyaXB0IHRhZyBoYWNrIHRyYW5zcG9y
dAoralF1ZXJ5LmFqYXhUcmFuc3BvcnQoICJzY3JpcHQiLCBmdW5jdGlvbiggcyApIHsKKworICAg
IC8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMgd2l0aCBjcm9zcyBkb21haW4gcmVxdWVzdHMK
KyAgICBpZiAoIHMuY3Jvc3NEb21haW4gKSB7CisgICAgICAgIHZhciBzY3JpcHQsIGNhbGxiYWNr
OworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgc2VuZDogZnVuY3Rpb24oIF8sIGNvbXBs
ZXRlICkgeworICAgICAgICAgICAgICAgIHNjcmlwdCA9IGpRdWVyeSggIjxzY3JpcHQ+IiApLnBy
b3AoIHsKKyAgICAgICAgICAgICAgICAgICAgY2hhcnNldDogcy5zY3JpcHRDaGFyc2V0LAorICAg
ICAgICAgICAgICAgICAgICBzcmM6IHMudXJsCisgICAgICAgICAgICAgICAgfSApLm9uKAorICAg
ICAgICAgICAgICAgICAgICAibG9hZCBlcnJvciIsCisgICAgICAgICAgICAgICAgICAgIGNhbGxi
YWNrID0gZnVuY3Rpb24oIGV2dCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5y
ZW1vdmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gbnVsbDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggZXZ0ICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbXBsZXRlKCBldnQudHlwZSA9PT0gImVycm9yIiA/IDQwNCA6IDIwMCwgZXZ0LnR5cGUg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICk7CisKKyAgICAgICAgICAgICAgICAvLyBVc2UgbmF0aXZlIERPTSBtYW5p
cHVsYXRpb24gdG8gYXZvaWQgb3VyIGRvbU1hbmlwIEFKQVggdHJpY2tlcnkKKyAgICAgICAgICAg
ICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHRbIDAgXSApOworICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgIGFib3J0OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIGNhbGxiYWNrICkgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9Cit9ICk7CisKKwor
CisKK3ZhciBvbGRDYWxsYmFja3MgPSBbXSwKKyAgICByanNvbnAgPSAvKD0pXD8oPz0mfCQpfFw/
XD8vOworCisvLyBEZWZhdWx0IGpzb25wIHNldHRpbmdzCitqUXVlcnkuYWpheFNldHVwKCB7Cisg
ICAganNvbnA6ICJjYWxsYmFjayIsCisgICAganNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHZhciBjYWxsYmFjayA9IG9sZENhbGxiYWNrcy5wb3AoKSB8fCAoIGpRdWVyeS5leHBh
bmRvICsgIl8iICsgKCBub25jZSsrICkgKTsKKyAgICAgICAgdGhpc1sgY2FsbGJhY2sgXSA9IHRy
dWU7CisgICAgICAgIHJldHVybiBjYWxsYmFjazsKKyAgICB9Cit9ICk7CisKKy8vIERldGVjdCwg
bm9ybWFsaXplIG9wdGlvbnMgYW5kIGluc3RhbGwgY2FsbGJhY2tzIGZvciBqc29ucCByZXF1ZXN0
cworalF1ZXJ5LmFqYXhQcmVmaWx0ZXIoICJqc29uIGpzb25wIiwgZnVuY3Rpb24oIHMsIG9yaWdp
bmFsU2V0dGluZ3MsIGpxWEhSICkgeworCisgICAgdmFyIGNhbGxiYWNrTmFtZSwgb3ZlcndyaXR0
ZW4sIHJlc3BvbnNlQ29udGFpbmVyLAorICAgICAgICBqc29uUHJvcCA9IHMuanNvbnAgIT09IGZh
bHNlICYmICggcmpzb25wLnRlc3QoIHMudXJsICkgPworICAgICAgICAgICAgInVybCIgOgorICAg
ICAgICAgICAgdHlwZW9mIHMuZGF0YSA9PT0gInN0cmluZyIgJiYKKyAgICAgICAgICAgICAgICAo
IHMuY29udGVudFR5cGUgfHwgIiIgKQorICAgICAgICAgICAgICAgICAgICAuaW5kZXhPZiggImFw
cGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIgKSA9PT0gMCAmJgorICAgICAgICAgICAg
ICAgIHJqc29ucC50ZXN0KCBzLmRhdGEgKSAmJiAiZGF0YSIKKyAgICAgICAgKTsKKworICAgIC8v
IEhhbmRsZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyAianNvbnAiIG9yIHdlIGhhdmUg
YSBwYXJhbWV0ZXIgdG8gc2V0CisgICAgaWYgKCBqc29uUHJvcCB8fCBzLmRhdGFUeXBlc1sgMCBd
ID09PSAianNvbnAiICkgeworCisgICAgICAgIC8vIEdldCBjYWxsYmFjayBuYW1lLCByZW1lbWJl
cmluZyBwcmVleGlzdGluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggaXQKKyAgICAgICAgY2FsbGJh
Y2tOYW1lID0gcy5qc29ucENhbGxiYWNrID0galF1ZXJ5LmlzRnVuY3Rpb24oIHMuanNvbnBDYWxs
YmFjayApID8KKyAgICAgICAgICAgIHMuanNvbnBDYWxsYmFjaygpIDoKKyAgICAgICAgICAgIHMu
anNvbnBDYWxsYmFjazsKKworICAgICAgICAvLyBJbnNlcnQgY2FsbGJhY2sgaW50byB1cmwgb3Ig
Zm9ybSBkYXRhCisgICAgICAgIGlmICgganNvblByb3AgKSB7CisgICAgICAgICAgICBzWyBqc29u
UHJvcCBdID0gc1sganNvblByb3AgXS5yZXBsYWNlKCByanNvbnAsICIkMSIgKyBjYWxsYmFja05h
bWUgKTsKKyAgICAgICAgfSBlbHNlIGlmICggcy5qc29ucCAhPT0gZmFsc2UgKSB7CisgICAgICAg
ICAgICBzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gIiYiIDogIj8iICkgKyBzLmpz
b25wICsgIj0iICsgY2FsbGJhY2tOYW1lOworICAgICAgICB9CisKKyAgICAgICAgLy8gVXNlIGRh
dGEgY29udmVydGVyIHRvIHJldHJpZXZlIGpzb24gYWZ0ZXIgc2NyaXB0IGV4ZWN1dGlvbgorICAg
ICAgICBzLmNvbnZlcnRlcnNbICJzY3JpcHQganNvbiIgXSA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgaWYgKCAhcmVzcG9uc2VDb250YWluZXIgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5
LmVycm9yKCBjYWxsYmFja05hbWUgKyAiIHdhcyBub3QgY2FsbGVkIiApOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlQ29udGFpbmVyWyAwIF07CisgICAgICAgIH07
CisKKyAgICAgICAgLy8gRm9yY2UganNvbiBkYXRhVHlwZQorICAgICAgICBzLmRhdGFUeXBlc1sg
MCBdID0gImpzb24iOworCisgICAgICAgIC8vIEluc3RhbGwgY2FsbGJhY2sKKyAgICAgICAgb3Zl
cndyaXR0ZW4gPSB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdOworICAgICAgICB3aW5kb3dbIGNhbGxi
YWNrTmFtZSBdID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICByZXNwb25zZUNvbnRhaW5lciA9
IGFyZ3VtZW50czsKKyAgICAgICAgfTsKKworICAgICAgICAvLyBDbGVhbi11cCBmdW5jdGlvbiAo
ZmlyZXMgYWZ0ZXIgY29udmVydGVycykKKyAgICAgICAganFYSFIuYWx3YXlzKCBmdW5jdGlvbigp
IHsKKworICAgICAgICAgICAgLy8gSWYgcHJldmlvdXMgdmFsdWUgZGlkbid0IGV4aXN0IC0gcmVt
b3ZlIGl0CisgICAgICAgICAgICBpZiAoIG92ZXJ3cml0dGVuID09PSB1bmRlZmluZWQgKSB7Cisg
ICAgICAgICAgICAgICAgalF1ZXJ5KCB3aW5kb3cgKS5yZW1vdmVQcm9wKCBjYWxsYmFja05hbWUg
KTsKKworICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHJlc3RvcmUgcHJlZXhpc3RpbmcgdmFsdWUK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgd2luZG93WyBjYWxsYmFja05h
bWUgXSA9IG92ZXJ3cml0dGVuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTYXZl
IGJhY2sgYXMgZnJlZQorICAgICAgICAgICAgaWYgKCBzWyBjYWxsYmFja05hbWUgXSApIHsKKwor
ICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHJlLXVzaW5nIHRoZSBvcHRpb25zIGRv
ZXNuJ3Qgc2NyZXcgdGhpbmdzIGFyb3VuZAorICAgICAgICAgICAgICAgIHMuanNvbnBDYWxsYmFj
ayA9IG9yaWdpbmFsU2V0dGluZ3MuanNvbnBDYWxsYmFjazsKKworICAgICAgICAgICAgICAgIC8v
IFNhdmUgdGhlIGNhbGxiYWNrIG5hbWUgZm9yIGZ1dHVyZSB1c2UKKyAgICAgICAgICAgICAgICBv
bGRDYWxsYmFja3MucHVzaCggY2FsbGJhY2tOYW1lICk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIENhbGwgaWYgaXQgd2FzIGEgZnVuY3Rpb24gYW5kIHdlIGhhdmUgYSByZXNwb25z
ZQorICAgICAgICAgICAgaWYgKCByZXNwb25zZUNvbnRhaW5lciAmJiBqUXVlcnkuaXNGdW5jdGlv
biggb3ZlcndyaXR0ZW4gKSApIHsKKyAgICAgICAgICAgICAgICBvdmVyd3JpdHRlbiggcmVzcG9u
c2VDb250YWluZXJbIDAgXSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXNwb25z
ZUNvbnRhaW5lciA9IG92ZXJ3cml0dGVuID0gdW5kZWZpbmVkOworICAgICAgICB9ICk7CisKKyAg
ICAgICAgLy8gRGVsZWdhdGUgdG8gc2NyaXB0CisgICAgICAgIHJldHVybiAic2NyaXB0IjsKKyAg
ICB9Cit9ICk7CisKKworCisKKy8vIFN1cHBvcnQ6IFNhZmFyaSA4IG9ubHkKKy8vIEluIFNhZmFy
aSA4IGRvY3VtZW50cyBjcmVhdGVkIHZpYSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVI
VE1MRG9jdW1lbnQKKy8vIGNvbGxhcHNlIHNpYmxpbmcgZm9ybXM6IHRoZSBzZWNvbmQgb25lIGJl
Y29tZXMgYSBjaGlsZCBvZiB0aGUgZmlyc3Qgb25lLgorLy8gQmVjYXVzZSBvZiB0aGF0LCB0aGlz
IHNlY3VyaXR5IG1lYXN1cmUgaGFzIHRvIGJlIGRpc2FibGVkIGluIFNhZmFyaSA4LgorLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzMzNworc3VwcG9ydC5jcmVh
dGVIVE1MRG9jdW1lbnQgPSAoIGZ1bmN0aW9uKCkgeworICAgIHZhciBib2R5ID0gZG9jdW1lbnQu
aW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCAiIiApLmJvZHk7CisgICAgYm9keS5p
bm5lckhUTUwgPSAiPGZvcm0+PC9mb3JtPjxmb3JtPjwvZm9ybT4iOworICAgIHJldHVybiBib2R5
LmNoaWxkTm9kZXMubGVuZ3RoID09PSAyOworfSApKCk7CisKKworLy8gQXJndW1lbnQgImRhdGEi
IHNob3VsZCBiZSBzdHJpbmcgb2YgaHRtbAorLy8gY29udGV4dCAob3B0aW9uYWwpOiBJZiBzcGVj
aWZpZWQsIHRoZSBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhpcyBjb250ZXh0LAorLy8g
ZGVmYXVsdHMgdG8gZG9jdW1lbnQKKy8vIGtlZXBTY3JpcHRzIChvcHRpb25hbCk6IElmIHRydWUs
IHdpbGwgaW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgaHRtbCBzdHJpbmcKK2pRdWVyeS5w
YXJzZUhUTUwgPSBmdW5jdGlvbiggZGF0YSwgY29udGV4dCwga2VlcFNjcmlwdHMgKSB7CisgICAg
aWYgKCB0eXBlb2YgZGF0YSAhPT0gInN0cmluZyIgKSB7CisgICAgICAgIHJldHVybiBbXTsKKyAg
ICB9CisgICAgaWYgKCB0eXBlb2YgY29udGV4dCA9PT0gImJvb2xlYW4iICkgeworICAgICAgICBr
ZWVwU2NyaXB0cyA9IGNvbnRleHQ7CisgICAgICAgIGNvbnRleHQgPSBmYWxzZTsKKyAgICB9CisK
KyAgICB2YXIgYmFzZSwgcGFyc2VkLCBzY3JpcHRzOworCisgICAgaWYgKCAhY29udGV4dCApIHsK
KworICAgICAgICAvLyBTdG9wIHNjcmlwdHMgb3IgaW5saW5lIGV2ZW50IGhhbmRsZXJzIGZyb20g
YmVpbmcgZXhlY3V0ZWQgaW1tZWRpYXRlbHkKKyAgICAgICAgLy8gYnkgdXNpbmcgZG9jdW1lbnQu
aW1wbGVtZW50YXRpb24KKyAgICAgICAgaWYgKCBzdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCAp
IHsKKyAgICAgICAgICAgIGNvbnRleHQgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVI
VE1MRG9jdW1lbnQoICIiICk7CisKKyAgICAgICAgICAgIC8vIFNldCB0aGUgYmFzZSBocmVmIGZv
ciB0aGUgY3JlYXRlZCBkb2N1bWVudAorICAgICAgICAgICAgLy8gc28gYW55IHBhcnNlZCBlbGVt
ZW50cyB3aXRoIFVSTHMKKyAgICAgICAgICAgIC8vIGFyZSBiYXNlZCBvbiB0aGUgZG9jdW1lbnQn
cyBVUkwgKGdoLTI5NjUpCisgICAgICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVFbGVtZW50
KCAiYmFzZSIgKTsKKyAgICAgICAgICAgIGJhc2UuaHJlZiA9IGRvY3VtZW50LmxvY2F0aW9uLmhy
ZWY7CisgICAgICAgICAgICBjb250ZXh0LmhlYWQuYXBwZW5kQ2hpbGQoIGJhc2UgKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnRleHQgPSBkb2N1bWVudDsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHBhcnNlZCA9IHJzaW5nbGVUYWcuZXhlYyggZGF0YSApOworICAgIHNjcmlw
dHMgPSAha2VlcFNjcmlwdHMgJiYgW107CisKKyAgICAvLyBTaW5nbGUgdGFnCisgICAgaWYgKCBw
YXJzZWQgKSB7CisgICAgICAgIHJldHVybiBbIGNvbnRleHQuY3JlYXRlRWxlbWVudCggcGFyc2Vk
WyAxIF0gKSBdOworICAgIH0KKworICAgIHBhcnNlZCA9IGJ1aWxkRnJhZ21lbnQoIFsgZGF0YSBd
LCBjb250ZXh0LCBzY3JpcHRzICk7CisKKyAgICBpZiAoIHNjcmlwdHMgJiYgc2NyaXB0cy5sZW5n
dGggKSB7CisgICAgICAgIGpRdWVyeSggc2NyaXB0cyApLnJlbW92ZSgpOworICAgIH0KKworICAg
IHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBwYXJzZWQuY2hpbGROb2RlcyApOworfTsKKworCisv
KioKKyAqIExvYWQgYSB1cmwgaW50byBhIHBhZ2UKKyAqLworalF1ZXJ5LmZuLmxvYWQgPSBmdW5j
dGlvbiggdXJsLCBwYXJhbXMsIGNhbGxiYWNrICkgeworICAgIHZhciBzZWxlY3RvciwgdHlwZSwg
cmVzcG9uc2UsCisgICAgICAgIHNlbGYgPSB0aGlzLAorICAgICAgICBvZmYgPSB1cmwuaW5kZXhP
ZiggIiAiICk7CisKKyAgICBpZiAoIG9mZiA+IC0xICkgeworICAgICAgICBzZWxlY3RvciA9IHN0
cmlwQW5kQ29sbGFwc2UoIHVybC5zbGljZSggb2ZmICkgKTsKKyAgICAgICAgdXJsID0gdXJsLnNs
aWNlKCAwLCBvZmYgKTsKKyAgICB9CisKKyAgICAvLyBJZiBpdCdzIGEgZnVuY3Rpb24KKyAgICBp
ZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHsKKworICAgICAgICAvLyBXZSBhc3N1
bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFjaworICAgICAgICBjYWxsYmFjayA9IHBhcmFtczsKKyAg
ICAgICAgcGFyYW1zID0gdW5kZWZpbmVkOworCisgICAgLy8gT3RoZXJ3aXNlLCBidWlsZCBhIHBh
cmFtIHN0cmluZworICAgIH0gZWxzZSBpZiAoIHBhcmFtcyAmJiB0eXBlb2YgcGFyYW1zID09PSAi
b2JqZWN0IiApIHsKKyAgICAgICAgdHlwZSA9ICJQT1NUIjsKKyAgICB9CisKKyAgICAvLyBJZiB3
ZSBoYXZlIGVsZW1lbnRzIHRvIG1vZGlmeSwgbWFrZSB0aGUgcmVxdWVzdAorICAgIGlmICggc2Vs
Zi5sZW5ndGggPiAwICkgeworICAgICAgICBqUXVlcnkuYWpheCggeworICAgICAgICAgICAgdXJs
OiB1cmwsCisKKyAgICAgICAgICAgIC8vIElmICJ0eXBlIiB2YXJpYWJsZSBpcyB1bmRlZmluZWQs
IHRoZW4gIkdFVCIgbWV0aG9kIHdpbGwgYmUgdXNlZC4KKyAgICAgICAgICAgIC8vIE1ha2UgdmFs
dWUgb2YgdGhpcyBmaWVsZCBleHBsaWNpdCBzaW5jZQorICAgICAgICAgICAgLy8gdXNlciBjYW4g
b3ZlcnJpZGUgaXQgdGhyb3VnaCBhamF4U2V0dXAgbWV0aG9kCisgICAgICAgICAgICB0eXBlOiB0
eXBlIHx8ICJHRVQiLAorICAgICAgICAgICAgZGF0YVR5cGU6ICJodG1sIiwKKyAgICAgICAgICAg
IGRhdGE6IHBhcmFtcworICAgICAgICB9ICkuZG9uZSggZnVuY3Rpb24oIHJlc3BvbnNlVGV4dCAp
IHsKKworICAgICAgICAgICAgLy8gU2F2ZSByZXNwb25zZSBmb3IgdXNlIGluIGNvbXBsZXRlIGNh
bGxiYWNrCisgICAgICAgICAgICByZXNwb25zZSA9IGFyZ3VtZW50czsKKworICAgICAgICAgICAg
c2VsZi5odG1sKCBzZWxlY3RvciA/CisKKyAgICAgICAgICAgICAgICAvLyBJZiBhIHNlbGVjdG9y
IHdhcyBzcGVjaWZpZWQsIGxvY2F0ZSB0aGUgcmlnaHQgZWxlbWVudHMgaW4gYSBkdW1teSBkaXYK
KyAgICAgICAgICAgICAgICAvLyBFeGNsdWRlIHNjcmlwdHMgdG8gYXZvaWQgSUUgJ1Blcm1pc3Np
b24gRGVuaWVkJyBlcnJvcnMKKyAgICAgICAgICAgICAgICBqUXVlcnkoICI8ZGl2PiIgKS5hcHBl
bmQoIGpRdWVyeS5wYXJzZUhUTUwoIHJlc3BvbnNlVGV4dCApICkuZmluZCggc2VsZWN0b3IgKSA6
CisKKyAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgdXNlIHRoZSBmdWxsIHJlc3VsdAorICAg
ICAgICAgICAgICAgIHJlc3BvbnNlVGV4dCApOworCisgICAgICAgIC8vIElmIHRoZSByZXF1ZXN0
IHN1Y2NlZWRzLCB0aGlzIGZ1bmN0aW9uIGdldHMgImRhdGEiLCAic3RhdHVzIiwgImpxWEhSIgor
ICAgICAgICAvLyBidXQgdGhleSBhcmUgaWdub3JlZCBiZWNhdXNlIHJlc3BvbnNlIHdhcyBzZXQg
YWJvdmUuCisgICAgICAgIC8vIElmIGl0IGZhaWxzLCB0aGlzIGZ1bmN0aW9uIGdldHMgImpxWEhS
IiwgInN0YXR1cyIsICJlcnJvciIKKyAgICAgICAgfSApLmFsd2F5cyggY2FsbGJhY2sgJiYgZnVu
Y3Rpb24oIGpxWEhSLCBzdGF0dXMgKSB7CisgICAgICAgICAgICBzZWxmLmVhY2goIGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KCB0aGlzLCByZXNwb25zZSB8fCBb
IGpxWEhSLnJlc3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhIUiBdICk7CisgICAgICAgICAgICB9ICk7
CisgICAgICAgIH0gKTsKKyAgICB9CisKKyAgICByZXR1cm4gdGhpczsKK307CisKKworCisKKy8v
IEF0dGFjaCBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgY29tbW9uIEFKQVggZXZl
bnRzCitqUXVlcnkuZWFjaCggWworICAgICJhamF4U3RhcnQiLAorICAgICJhamF4U3RvcCIsCisg
ICAgImFqYXhDb21wbGV0ZSIsCisgICAgImFqYXhFcnJvciIsCisgICAgImFqYXhTdWNjZXNzIiwK
KyAgICAiYWpheFNlbmQiCitdLCBmdW5jdGlvbiggaSwgdHlwZSApIHsKKyAgICBqUXVlcnkuZm5b
IHR5cGUgXSA9IGZ1bmN0aW9uKCBmbiApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMub24oIHR5cGUs
IGZuICk7CisgICAgfTsKK30gKTsKKworCisKKworalF1ZXJ5LmV4cHIucHNldWRvcy5hbmltYXRl
ZCA9IGZ1bmN0aW9uKCBlbGVtICkgeworICAgIHJldHVybiBqUXVlcnkuZ3JlcCggalF1ZXJ5LnRp
bWVycywgZnVuY3Rpb24oIGZuICkgeworICAgICAgICByZXR1cm4gZWxlbSA9PT0gZm4uZWxlbTsK
KyAgICB9ICkubGVuZ3RoOworfTsKKworCisKKworLyoqCisgKiBHZXRzIGEgd2luZG93IGZyb20g
YW4gZWxlbWVudAorICovCitmdW5jdGlvbiBnZXRXaW5kb3coIGVsZW0gKSB7CisgICAgcmV0dXJu
IGpRdWVyeS5pc1dpbmRvdyggZWxlbSApID8gZWxlbSA6IGVsZW0ubm9kZVR5cGUgPT09IDkgJiYg
ZWxlbS5kZWZhdWx0VmlldzsKK30KKworalF1ZXJ5Lm9mZnNldCA9IHsKKyAgICBzZXRPZmZzZXQ6
IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkgeworICAgICAgICB2YXIgY3VyUG9zaXRpb24s
IGN1ckxlZnQsIGN1ckNTU1RvcCwgY3VyVG9wLCBjdXJPZmZzZXQsIGN1ckNTU0xlZnQsIGNhbGN1
bGF0ZVBvc2l0aW9uLAorICAgICAgICAgICAgcG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCAi
cG9zaXRpb24iICksCisgICAgICAgICAgICBjdXJFbGVtID0galF1ZXJ5KCBlbGVtICksCisgICAg
ICAgICAgICBwcm9wcyA9IHt9OworCisgICAgICAgIC8vIFNldCBwb3NpdGlvbiBmaXJzdCwgaW4t
Y2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW0KKyAgICAgICAgaWYgKCBw
b3NpdGlvbiA9PT0gInN0YXRpYyIgKSB7CisgICAgICAgICAgICBlbGVtLnN0eWxlLnBvc2l0aW9u
ID0gInJlbGF0aXZlIjsKKyAgICAgICAgfQorCisgICAgICAgIGN1ck9mZnNldCA9IGN1ckVsZW0u
b2Zmc2V0KCk7CisgICAgICAgIGN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sICJ0b3AiICk7
CisgICAgICAgIGN1ckNTU0xlZnQgPSBqUXVlcnkuY3NzKCBlbGVtLCAibGVmdCIgKTsKKyAgICAg
ICAgY2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSAiYWJzb2x1dGUiIHx8IHBvc2l0
aW9uID09PSAiZml4ZWQiICkgJiYKKyAgICAgICAgICAgICggY3VyQ1NTVG9wICsgY3VyQ1NTTGVm
dCApLmluZGV4T2YoICJhdXRvIiApID4gLTE7CisKKyAgICAgICAgLy8gTmVlZCB0byBiZSBhYmxl
IHRvIGNhbGN1bGF0ZSBwb3NpdGlvbiBpZiBlaXRoZXIKKyAgICAgICAgLy8gdG9wIG9yIGxlZnQg
aXMgYXV0byBhbmQgcG9zaXRpb24gaXMgZWl0aGVyIGFic29sdXRlIG9yIGZpeGVkCisgICAgICAg
IGlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7CisgICAgICAgICAgICBjdXJQb3NpdGlvbiA9IGN1
ckVsZW0ucG9zaXRpb24oKTsKKyAgICAgICAgICAgIGN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDsK
KyAgICAgICAgICAgIGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0OworCisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBjdXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwOwor
ICAgICAgICAgICAgY3VyTGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggb3B0aW9ucyApICkgewor
CisgICAgICAgICAgICAvLyBVc2UgalF1ZXJ5LmV4dGVuZCBoZXJlIHRvIGFsbG93IG1vZGlmaWNh
dGlvbiBvZiBjb29yZGluYXRlcyBhcmd1bWVudCAoZ2gtMTg0OCkKKyAgICAgICAgICAgIG9wdGlv
bnMgPSBvcHRpb25zLmNhbGwoIGVsZW0sIGksIGpRdWVyeS5leHRlbmQoIHt9LCBjdXJPZmZzZXQg
KSApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkgewor
ICAgICAgICAgICAgcHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSAr
IGN1clRvcDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIG9wdGlvbnMubGVmdCAhPSBudWxsICkg
eworICAgICAgICAgICAgcHJvcHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0IC0gY3VyT2Zmc2V0Lmxl
ZnQgKSArIGN1ckxlZnQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoICJ1c2luZyIgaW4gb3B0
aW9ucyApIHsKKyAgICAgICAgICAgIG9wdGlvbnMudXNpbmcuY2FsbCggZWxlbSwgcHJvcHMgKTsK
KworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY3VyRWxlbS5jc3MoIHByb3BzICk7Cisg
ICAgICAgIH0KKyAgICB9Cit9OworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisgICAgb2Zmc2V0OiBm
dW5jdGlvbiggb3B0aW9ucyApIHsKKworICAgICAgICAvLyBQcmVzZXJ2ZSBjaGFpbmluZyBmb3Ig
c2V0dGVyCisgICAgICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCApIHsKKyAgICAgICAgICAgIHJl
dHVybiBvcHRpb25zID09PSB1bmRlZmluZWQgPworICAgICAgICAgICAgICAgIHRoaXMgOgorICAg
ICAgICAgICAgICAgIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7CisgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7CisgICAgICAg
ICAgICAgICAgfSApOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGRvY0VsZW0sIHdpbiwgcmVj
dCwgZG9jLAorICAgICAgICAgICAgZWxlbSA9IHRoaXNbIDAgXTsKKworICAgICAgICBpZiAoICFl
bGVtICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gU3Vw
cG9ydDogSUUgPD0xMSBvbmx5CisgICAgICAgIC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRS
ZWN0IG9uIGEKKyAgICAgICAgLy8gZGlzY29ubmVjdGVkIG5vZGUgaW4gSUUgdGhyb3dzIGFuIGVy
cm9yCisgICAgICAgIGlmICggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7CisgICAg
ICAgICAgICByZXR1cm4geyB0b3A6IDAsIGxlZnQ6IDAgfTsKKyAgICAgICAgfQorCisgICAgICAg
IHJlY3QgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworCisgICAgICAgIC8vIE1ha2Ug
c3VyZSBlbGVtZW50IGlzIG5vdCBoaWRkZW4gKGRpc3BsYXk6IG5vbmUpCisgICAgICAgIGlmICgg
cmVjdC53aWR0aCB8fCByZWN0LmhlaWdodCApIHsKKyAgICAgICAgICAgIGRvYyA9IGVsZW0ub3du
ZXJEb2N1bWVudDsKKyAgICAgICAgICAgIHdpbiA9IGdldFdpbmRvdyggZG9jICk7CisgICAgICAg
ICAgICBkb2NFbGVtID0gZG9jLmRvY3VtZW50RWxlbWVudDsKKworICAgICAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgICAgICB0b3A6IHJlY3QudG9wICsgd2luLnBhZ2VZT2Zmc2V0IC0gZG9j
RWxlbS5jbGllbnRUb3AsCisgICAgICAgICAgICAgICAgbGVmdDogcmVjdC5sZWZ0ICsgd2luLnBh
Z2VYT2Zmc2V0IC0gZG9jRWxlbS5jbGllbnRMZWZ0CisgICAgICAgICAgICB9OworICAgICAgICB9
CisKKyAgICAgICAgLy8gUmV0dXJuIHplcm9zIGZvciBkaXNjb25uZWN0ZWQgYW5kIGhpZGRlbiBl
bGVtZW50cyAoZ2gtMjMxMCkKKyAgICAgICAgcmV0dXJuIHJlY3Q7CisgICAgfSwKKworICAgIHBv
c2l0aW9uOiBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCAhdGhpc1sgMCBdICkgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdmFyIG9mZnNldFBhcmVudCwgb2Zm
c2V0LAorICAgICAgICAgICAgZWxlbSA9IHRoaXNbIDAgXSwKKyAgICAgICAgICAgIHBhcmVudE9m
ZnNldCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07CisKKyAgICAgICAgLy8gRml4ZWQgZWxlbWVudHMg
YXJlIG9mZnNldCBmcm9tIHdpbmRvdyAocGFyZW50T2Zmc2V0ID0ge3RvcDowLCBsZWZ0OiAwfSwK
KyAgICAgICAgLy8gYmVjYXVzZSBpdCBpcyBpdHMgb25seSBvZmZzZXQgcGFyZW50CisgICAgICAg
IGlmICggalF1ZXJ5LmNzcyggZWxlbSwgInBvc2l0aW9uIiApID09PSAiZml4ZWQiICkgeworCisg
ICAgICAgICAgICAvLyBBc3N1bWUgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGlzIHRoZXJlIHdoZW4g
Y29tcHV0ZWQgcG9zaXRpb24gaXMgZml4ZWQKKyAgICAgICAgICAgIG9mZnNldCA9IGVsZW0uZ2V0
Qm91bmRpbmdDbGllbnRSZWN0KCk7CisKKyAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAg
Ly8gR2V0ICpyZWFsKiBvZmZzZXRQYXJlbnQKKyAgICAgICAgICAgIG9mZnNldFBhcmVudCA9IHRo
aXMub2Zmc2V0UGFyZW50KCk7CisKKyAgICAgICAgICAgIC8vIEdldCBjb3JyZWN0IG9mZnNldHMK
KyAgICAgICAgICAgIG9mZnNldCA9IHRoaXMub2Zmc2V0KCk7CisgICAgICAgICAgICBpZiAoICFq
UXVlcnkubm9kZU5hbWUoIG9mZnNldFBhcmVudFsgMCBdLCAiaHRtbCIgKSApIHsKKyAgICAgICAg
ICAgICAgICBwYXJlbnRPZmZzZXQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0KCk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIEFkZCBvZmZzZXRQYXJlbnQgYm9yZGVycworICAgICAgICAg
ICAgcGFyZW50T2Zmc2V0ID0geworICAgICAgICAgICAgICAgIHRvcDogcGFyZW50T2Zmc2V0LnRv
cCArIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudFsgMCBdLCAiYm9yZGVyVG9wV2lkdGgiLCB0cnVl
ICksCisgICAgICAgICAgICAgICAgbGVmdDogcGFyZW50T2Zmc2V0LmxlZnQgKyBqUXVlcnkuY3Nz
KCBvZmZzZXRQYXJlbnRbIDAgXSwgImJvcmRlckxlZnRXaWR0aCIsIHRydWUgKQorICAgICAgICAg
ICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN1YnRyYWN0IHBhcmVudCBvZmZzZXRzIGFu
ZCBlbGVtZW50IG1hcmdpbnMKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHRvcDogb2Zm
c2V0LnRvcCAtIHBhcmVudE9mZnNldC50b3AgLSBqUXVlcnkuY3NzKCBlbGVtLCAibWFyZ2luVG9w
IiwgdHJ1ZSApLAorICAgICAgICAgICAgbGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQu
bGVmdCAtIGpRdWVyeS5jc3MoIGVsZW0sICJtYXJnaW5MZWZ0IiwgdHJ1ZSApCisgICAgICAgIH07
CisgICAgfSwKKworICAgIC8vIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGRvY3VtZW50RWxlbWVu
dCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOgorICAgIC8vIDEpIEZvciB0aGUgZWxlbWVudCBpbnNp
ZGUgdGhlIGlmcmFtZSB3aXRob3V0IG9mZnNldFBhcmVudCwgdGhpcyBtZXRob2Qgd2lsbCByZXR1
cm4KKyAgICAvLyAgICBkb2N1bWVudEVsZW1lbnQgb2YgdGhlIHBhcmVudCB3aW5kb3cKKyAgICAv
LyAyKSBGb3IgdGhlIGhpZGRlbiBvciBkZXRhY2hlZCBlbGVtZW50CisgICAgLy8gMykgRm9yIGJv
ZHkgb3IgaHRtbCBlbGVtZW50LCBpLmUuIGluIGNhc2Ugb2YgdGhlIGh0bWwgbm9kZSAtIGl0IHdp
bGwgcmV0dXJuIGl0c2VsZgorICAgIC8vCisgICAgLy8gYnV0IHRob3NlIGV4Y2VwdGlvbnMgd2Vy
ZSBuZXZlciBwcmVzZW50ZWQgYXMgYSByZWFsIGxpZmUgdXNlLWNhc2VzCisgICAgLy8gYW5kIG1p
Z2h0IGJlIGNvbnNpZGVyZWQgYXMgbW9yZSBwcmVmZXJhYmxlIHJlc3VsdHMuCisgICAgLy8KKyAg
ICAvLyBUaGlzIGxvZ2ljLCBob3dldmVyLCBpcyBub3QgZ3VhcmFudGVlZCBhbmQgY2FuIGNoYW5n
ZSBhdCBhbnkgcG9pbnQgaW4gdGhlIGZ1dHVyZQorICAgIG9mZnNldFBhcmVudDogZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2
YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQ7CisKKyAgICAgICAgICAgIHdoaWxl
ICggb2Zmc2V0UGFyZW50ICYmIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgInBvc2l0aW9uIiAp
ID09PSAic3RhdGljIiApIHsKKyAgICAgICAgICAgICAgICBvZmZzZXRQYXJlbnQgPSBvZmZzZXRQ
YXJlbnQub2Zmc2V0UGFyZW50OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4g
b2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50RWxlbWVudDsKKyAgICAgICAgfSApOworICAgIH0KK30g
KTsKKworLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzCitqUXVlcnku
ZWFjaCggeyBzY3JvbGxMZWZ0OiAicGFnZVhPZmZzZXQiLCBzY3JvbGxUb3A6ICJwYWdlWU9mZnNl
dCIgfSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHsKKyAgICB2YXIgdG9wID0gInBhZ2VZT2Zm
c2V0IiA9PT0gcHJvcDsKKworICAgIGpRdWVyeS5mblsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdmFs
ICkgeworICAgICAgICByZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9k
LCB2YWwgKSB7CisgICAgICAgICAgICB2YXIgd2luID0gZ2V0V2luZG93KCBlbGVtICk7CisKKyAg
ICAgICAgICAgIGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHdpbiA/IHdpblsgcHJvcCBdIDogZWxlbVsgbWV0aG9kIF07CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICggd2luICkgeworICAgICAgICAgICAgICAgIHdpbi5zY3JvbGxUbygK
KyAgICAgICAgICAgICAgICAgICAgIXRvcCA/IHZhbCA6IHdpbi5wYWdlWE9mZnNldCwKKyAgICAg
ICAgICAgICAgICAgICAgdG9wID8gdmFsIDogd2luLnBhZ2VZT2Zmc2V0CisgICAgICAgICAgICAg
ICAgKTsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbGVtWyBtZXRo
b2QgXSA9IHZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwgbWV0aG9kLCB2YWwsIGFyZ3Vt
ZW50cy5sZW5ndGggKTsKKyAgICB9OworfSApOworCisvLyBTdXBwb3J0OiBTYWZhcmkgPD03IC0g
OS4xLCBDaHJvbWUgPD0zNyAtIDQ5CisvLyBBZGQgdGhlIHRvcC9sZWZ0IGNzc0hvb2tzIHVzaW5n
IGpRdWVyeS5mbi5wb3NpdGlvbgorLy8gV2Via2l0IGJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI5MDg0CisvLyBCbGluayBidWc6IGh0dHBzOi8vYnVncy5jaHJv
bWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTU4OTM0NworLy8gZ2V0Q29tcHV0
ZWRTdHlsZSByZXR1cm5zIHBlcmNlbnQgd2hlbiBzcGVjaWZpZWQgZm9yIHRvcC9sZWZ0L2JvdHRv
bS9yaWdodDsKKy8vIHJhdGhlciB0aGFuIG1ha2UgdGhlIGNzcyBtb2R1bGUgZGVwZW5kIG9uIHRo
ZSBvZmZzZXQgbW9kdWxlLCBqdXN0IGNoZWNrIGZvciBpdCBoZXJlCitqUXVlcnkuZWFjaCggWyAi
dG9wIiwgImxlZnQiIF0sIGZ1bmN0aW9uKCBpLCBwcm9wICkgeworICAgIGpRdWVyeS5jc3NIb29r
c1sgcHJvcCBdID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnBpeGVsUG9zaXRpb24sCisgICAgICAg
IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKKyAgICAgICAgICAgIGlmICggY29tcHV0ZWQg
KSB7CisgICAgICAgICAgICAgICAgY29tcHV0ZWQgPSBjdXJDU1MoIGVsZW0sIHByb3AgKTsKKwor
ICAgICAgICAgICAgICAgIC8vIElmIGN1ckNTUyByZXR1cm5zIHBlcmNlbnRhZ2UsIGZhbGxiYWNr
IHRvIG9mZnNldAorICAgICAgICAgICAgICAgIHJldHVybiBybnVtbm9ucHgudGVzdCggY29tcHV0
ZWQgKSA/CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggZWxlbSApLnBvc2l0aW9uKClbIHBy
b3AgXSArICJweCIgOgorICAgICAgICAgICAgICAgICAgICBjb21wdXRlZDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICk7Cit9ICk7CisKKworLy8gQ3JlYXRlIGlubmVySGVpZ2h0LCBp
bm5lcldpZHRoLCBoZWlnaHQsIHdpZHRoLCBvdXRlckhlaWdodCBhbmQgb3V0ZXJXaWR0aCBtZXRo
b2RzCitqUXVlcnkuZWFjaCggeyBIZWlnaHQ6ICJoZWlnaHQiLCBXaWR0aDogIndpZHRoIiB9LCBm
dW5jdGlvbiggbmFtZSwgdHlwZSApIHsKKyAgICBqUXVlcnkuZWFjaCggeyBwYWRkaW5nOiAiaW5u
ZXIiICsgbmFtZSwgY29udGVudDogdHlwZSwgIiI6ICJvdXRlciIgKyBuYW1lIH0sCisgICAgICAg
IGZ1bmN0aW9uKCBkZWZhdWx0RXh0cmEsIGZ1bmNOYW1lICkgeworCisgICAgICAgIC8vIE1hcmdp
biBpcyBvbmx5IGZvciBvdXRlckhlaWdodCwgb3V0ZXJXaWR0aAorICAgICAgICBqUXVlcnkuZm5b
IGZ1bmNOYW1lIF0gPSBmdW5jdGlvbiggbWFyZ2luLCB2YWx1ZSApIHsKKyAgICAgICAgICAgIHZh
ciBjaGFpbmFibGUgPSBhcmd1bWVudHMubGVuZ3RoICYmICggZGVmYXVsdEV4dHJhIHx8IHR5cGVv
ZiBtYXJnaW4gIT09ICJib29sZWFuIiApLAorICAgICAgICAgICAgICAgIGV4dHJhID0gZGVmYXVs
dEV4dHJhIHx8ICggbWFyZ2luID09PSB0cnVlIHx8IHZhbHVlID09PSB0cnVlID8gIm1hcmdpbiIg
OiAiYm9yZGVyIiApOworCisgICAgICAgICAgICByZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlv
biggZWxlbSwgdHlwZSwgdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgdmFyIGRvYzsKKworICAg
ICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7CisKKyAgICAgICAg
ICAgICAgICAgICAgLy8gJCggd2luZG93ICkub3V0ZXJXaWR0aC9IZWlnaHQgcmV0dXJuIHcvaCBp
bmNsdWRpbmcgc2Nyb2xsYmFycyAoZ2gtMTcyOSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZ1bmNOYW1lLmluZGV4T2YoICJvdXRlciIgKSA9PT0gMCA/CisgICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtWyAiaW5uZXIiICsgbmFtZSBdIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGVs
ZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyAiY2xpZW50IiArIG5hbWUgXTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBHZXQgZG9jdW1lbnQgd2lkdGggb3IgaGVp
Z2h0CisgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkgeworICAgICAg
ICAgICAgICAgICAgICBkb2MgPSBlbGVtLmRvY3VtZW50RWxlbWVudDsKKworICAgICAgICAgICAg
ICAgICAgICAvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hl
aWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sCisgICAgICAgICAgICAgICAgICAgIC8vIHdo
aWNoZXZlciBpcyBncmVhdGVzdAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgo
CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmJvZHlbICJzY3JvbGwiICsgbmFtZSBdLCBk
b2NbICJzY3JvbGwiICsgbmFtZSBdLAorICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5ib2R5
WyAib2Zmc2V0IiArIG5hbWUgXSwgZG9jWyAib2Zmc2V0IiArIG5hbWUgXSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRvY1sgImNsaWVudCIgKyBuYW1lIF0KKyAgICAgICAgICAgICAgICAgICAg
KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09
IHVuZGVmaW5lZCA/CisKKyAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHdpZHRoIG9yIGhlaWdo
dCBvbiB0aGUgZWxlbWVudCwgcmVxdWVzdGluZyBidXQgbm90IGZvcmNpbmcgcGFyc2VGbG9hdAor
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY3NzKCBlbGVtLCB0eXBlLCBleHRyYSApIDoKKwor
ICAgICAgICAgICAgICAgICAgICAvLyBTZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50
CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5zdHlsZSggZWxlbSwgdHlwZSwgdmFsdWUsIGV4
dHJhICk7CisgICAgICAgICAgICB9LCB0eXBlLCBjaGFpbmFibGUgPyBtYXJnaW4gOiB1bmRlZmlu
ZWQsIGNoYWluYWJsZSApOworICAgICAgICB9OworICAgIH0gKTsKK30gKTsKKworCitqUXVlcnku
Zm4uZXh0ZW5kKCB7CisKKyAgICBiaW5kOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkgewor
ICAgICAgICByZXR1cm4gdGhpcy5vbiggdHlwZXMsIG51bGwsIGRhdGEsIGZuICk7CisgICAgfSwK
KyAgICB1bmJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7CisgICAgICAgIHJldHVybiB0aGlz
Lm9mZiggdHlwZXMsIG51bGwsIGZuICk7CisgICAgfSwKKworICAgIGRlbGVnYXRlOiBmdW5jdGlv
biggc2VsZWN0b3IsIHR5cGVzLCBkYXRhLCBmbiApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMub24o
IHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTsKKyAgICB9LAorICAgIHVuZGVsZWdhdGU6IGZ1
bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGZuICkgeworCisgICAgICAgIC8vICggbmFtZXNwYWNl
ICkgb3IgKCBzZWxlY3RvciwgdHlwZXMgWywgZm5dICkKKyAgICAgICAgcmV0dXJuIGFyZ3VtZW50
cy5sZW5ndGggPT09IDEgPworICAgICAgICAgICAgdGhpcy5vZmYoIHNlbGVjdG9yLCAiKioiICkg
OgorICAgICAgICAgICAgdGhpcy5vZmYoIHR5cGVzLCBzZWxlY3RvciB8fCAiKioiLCBmbiApOwor
ICAgIH0KK30gKTsKKworalF1ZXJ5LnBhcnNlSlNPTiA9IEpTT04ucGFyc2U7CisKKworCisKKy8v
IFJlZ2lzdGVyIGFzIGEgbmFtZWQgQU1EIG1vZHVsZSwgc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25j
YXRlbmF0ZWQgd2l0aCBvdGhlcgorLy8gZmlsZXMgdGhhdCBtYXkgdXNlIGRlZmluZSwgYnV0IG5v
dCB2aWEgYSBwcm9wZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdAorLy8gdW5kZXJzdGFuZHMg
YW5vbnltb3VzIEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9i
dXN0CisvLyB3YXkgdG8gcmVnaXN0ZXIuIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNl
IEFNRCBtb2R1bGUgbmFtZXMgYXJlCisvLyBkZXJpdmVkIGZyb20gZmlsZSBuYW1lcywgYW5kIGpR
dWVyeSBpcyBub3JtYWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2UKKy8vIGZpbGUgbmFtZS4g
RG8gdGhpcyBhZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVs
ZSB3YW50cworLy8gdG8gY2FsbCBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpR
dWVyeSwgaXQgd2lsbCB3b3JrLgorCisvLyBOb3RlIHRoYXQgZm9yIG1heGltdW0gcG9ydGFiaWxp
dHksIGxpYnJhcmllcyB0aGF0IGFyZSBub3QgalF1ZXJ5IHNob3VsZAorLy8gZGVjbGFyZSB0aGVt
c2VsdmVzIGFzIGFub255bW91cyBtb2R1bGVzLCBhbmQgYXZvaWQgc2V0dGluZyBhIGdsb2JhbCBp
ZiBhbgorLy8gQU1EIGxvYWRlciBpcyBwcmVzZW50LiBqUXVlcnkgaXMgYSBzcGVjaWFsIGNhc2Uu
IEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUKKy8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcmJ1cmtl
L3JlcXVpcmVqcy93aWtpL1VwZGF0aW5nLWV4aXN0aW5nLWxpYnJhcmllcyN3aWtpLWFub24KKwor
aWYgKCB0eXBlb2YgZGVmaW5lID09PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQgKSB7CisgICAg
ZGVmaW5lKCAianF1ZXJ5IiwgW10sIGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4galF1ZXJ5
OworICAgIH0gKTsKK30KKworCisKKwordmFyCisKKyAgICAvLyBNYXAgb3ZlciBqUXVlcnkgaW4g
Y2FzZSBvZiBvdmVyd3JpdGUKKyAgICBfalF1ZXJ5ID0gd2luZG93LmpRdWVyeSwKKworICAgIC8v
IE1hcCBvdmVyIHRoZSAkIGluIGNhc2Ugb2Ygb3ZlcndyaXRlCisgICAgXyQgPSB3aW5kb3cuJDsK
KworalF1ZXJ5Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiggZGVlcCApIHsKKyAgICBpZiAoIHdpbmRv
dy4kID09PSBqUXVlcnkgKSB7CisgICAgICAgIHdpbmRvdy4kID0gXyQ7CisgICAgfQorCisgICAg
aWYgKCBkZWVwICYmIHdpbmRvdy5qUXVlcnkgPT09IGpRdWVyeSApIHsKKyAgICAgICAgd2luZG93
LmpRdWVyeSA9IF9qUXVlcnk7CisgICAgfQorCisgICAgcmV0dXJuIGpRdWVyeTsKK307CisKKy8v
IEV4cG9zZSBqUXVlcnkgYW5kICQgaWRlbnRpZmllcnMsIGV2ZW4gaW4gQU1ECisvLyAoIzcxMDIj
Y29tbWVudDoxMCwgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvcHVsbC81NTcpCisv
LyBhbmQgQ29tbW9uSlMgZm9yIGJyb3dzZXIgZW11bGF0b3JzICgjMTM1NjYpCitpZiAoICFub0ds
b2JhbCApIHsKKyAgICB3aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7Cit9CisKKwor
CisKKworcmV0dXJuIGpRdWVyeTsKK30gKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2ti
b25lL25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvaW5kZXguY3NzIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
YmFja2JvbmUvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3MKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTBlM2QyZjZiNzkzZDQyY2I0ZTIwYWVlYTQ4YTNiNWNlYjQ4NmVlNQotLS0gL2Rldi9udWxs
CisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3Mv
aW5kZXguY3NzCkBAIC0wLDAgKzEsMzcwIEBACitodG1sLAorYm9keSB7CisgICAgbWFyZ2luOiAw
OworICAgIHBhZGRpbmc6IDA7Cit9CisKK2J1dHRvbiB7CisgICAgbWFyZ2luOiAwOworICAgIHBh
ZGRpbmc6IDA7CisgICAgYm9yZGVyOiAwOworICAgIGJhY2tncm91bmQ6IG5vbmU7CisgICAgZm9u
dC1zaXplOiAxMDAlOworICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICBmb250LWZh
bWlseTogaW5oZXJpdDsKKyAgICBmb250LXdlaWdodDogaW5oZXJpdDsKKyAgICBjb2xvcjogaW5o
ZXJpdDsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CisgICAgYXBwZWFyYW5jZTogbm9u
ZTsKKyAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICAtbW96LW9z
eC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOworfQorCitib2R5IHsKKyAgICBmb250OiAxNHB4
ICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CisgICAgbGlu
ZS1oZWlnaHQ6IDEuNGVtOworICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7CisgICAgY29sb3I6ICM0
ZDRkNGQ7CisgICAgbWluLXdpZHRoOiAyMzBweDsKKyAgICBtYXgtd2lkdGg6IDU1MHB4OworICAg
IG1hcmdpbjogMCBhdXRvOworICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2Vk
OworICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7CisgICAgZm9udC13ZWln
aHQ6IDMwMDsKK30KKworOmZvY3VzIHsKKyAgICBvdXRsaW5lOiAwOworfQorCisuaGlkZGVuIHsK
KyAgICBkaXNwbGF5OiBub25lOworfQorCisudG9kb2FwcCB7CisgICAgYmFja2dyb3VuZDogI2Zm
ZjsKKyAgICBtYXJnaW46IDEzMHB4IDAgNDBweCAwOworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsK
KyAgICBib3gtc2hhZG93OiAwIDJweCA0cHggMCByZ2JhKDAsIDAsIDAsIDAuMiksCisgICAgICAg
ICAgICAgICAgMCAyNXB4IDUwcHggMCByZ2JhKDAsIDAsIDAsIDAuMSk7Cit9CisKKy50b2RvYXBw
IGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHsKKyAgICBmb250LXN0eWxlOiBpdGFs
aWM7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKKyAgICBjb2xvcjogI2U2ZTZlNjsKK30KKworLnRv
ZG9hcHAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIgeworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsK
KyAgICBmb250LXdlaWdodDogMzAwOworICAgIGNvbG9yOiAjZTZlNmU2OworfQorCisudG9kb2Fw
cCBpbnB1dDo6aW5wdXQtcGxhY2Vob2xkZXIgeworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKKyAg
ICBmb250LXdlaWdodDogMzAwOworICAgIGNvbG9yOiAjZTZlNmU2OworfQorCisudG9kb2FwcCBo
MSB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogLTE1NXB4OworICAgIHdpZHRo
OiAxMDAlOworICAgIGZvbnQtc2l6ZTogMTAwcHg7CisgICAgZm9udC13ZWlnaHQ6IDEwMDsKKyAg
ICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgY29sb3I6IHJnYmEoMTc1LCA0NywgNDcsIDAuMTUp
OworICAgIC13ZWJraXQtdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKKyAgICAt
bW96LXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7CisgICAgdGV4dC1yZW5kZXJp
bmc6IG9wdGltaXplTGVnaWJpbGl0eTsKK30KKworLm5ldy10b2RvLAorLmVkaXQgeworICAgIHBv
c2l0aW9uOiByZWxhdGl2ZTsKKyAgICBtYXJnaW46IDA7CisgICAgd2lkdGg6IDEwMCU7CisgICAg
Zm9udC1zaXplOiAyNHB4OworICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OworICAgIGZvbnQtd2Vp
Z2h0OiBpbmhlcml0OworICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKKyAgICBib3JkZXI6IDA7Cisg
ICAgY29sb3I6IGluaGVyaXQ7CisgICAgcGFkZGluZzogNnB4OworICAgIGJvcmRlcjogMXB4IHNv
bGlkICM5OTk7CisgICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDVweCAwIHJnYmEoMCwgMCwg
MCwgMC4yKTsKKyAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIC13ZWJraXQtZm9udC1z
bW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5
c2NhbGU7Cit9CisKKy5uZXctdG9kbyB7CisgICAgcGFkZGluZzogMTZweCAxNnB4IDE2cHggNjBw
eDsKKyAgICBib3JkZXI6IG5vbmU7CisgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjAw
Myk7CisgICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMnB4IDFweCByZ2JhKDAsMCwwLDAuMDMpOwor
fQorCisubWFpbiB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIHotaW5kZXg6IDI7Cisg
ICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNmU2ZTY7Cit9CisKK2xhYmVsW2Zvcj0ndG9nZ2xl
LWFsbCddIHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisudG9nZ2xlLWFsbCB7CisgICAgcG9z
aXRpb246IGFic29sdXRlOworICAgIHRvcDogLTU1cHg7CisgICAgbGVmdDogLTEycHg7CisgICAg
d2lkdGg6IDYwcHg7CisgICAgaGVpZ2h0OiAzNHB4OworICAgIHRleHQtYWxpZ246IGNlbnRlcjsK
KyAgICBib3JkZXI6IG5vbmU7IC8qIE1vYmlsZSBTYWZhcmkgKi8KK30KKworLnRvZ2dsZS1hbGw6
YmVmb3JlIHsKKyAgICBjb250ZW50OiAn4p2vJzsKKyAgICBmb250LXNpemU6IDIycHg7CisgICAg
Y29sb3I6ICNlNmU2ZTY7CisgICAgcGFkZGluZzogMTBweCAyN3B4IDEwcHggMjdweDsKK30KKwor
LnRvZ2dsZS1hbGw6Y2hlY2tlZDpiZWZvcmUgeworICAgIGNvbG9yOiAjNzM3MzczOworfQorCisu
dG9kby1saXN0IHsKKyAgICBtYXJnaW46IDA7CisgICAgcGFkZGluZzogMDsKKyAgICBsaXN0LXN0
eWxlOiBub25lOworfQorCisudG9kby1saXN0IGxpIHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7
CisgICAgZm9udC1zaXplOiAyNHB4OworICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWRl
ZGVkOworfQorCisudG9kby1saXN0IGxpOmxhc3QtY2hpbGQgeworICAgIGJvcmRlci1ib3R0b206
IG5vbmU7Cit9CisKKy50b2RvLWxpc3QgbGkuZWRpdGluZyB7CisgICAgYm9yZGVyLWJvdHRvbTog
bm9uZTsKKyAgICBwYWRkaW5nOiAwOworfQorCisudG9kby1saXN0IGxpLmVkaXRpbmcgLmVkaXQg
eworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIHdpZHRoOiA1MDZweDsKKyAgICBwYWRkaW5nOiAx
MnB4IDE2cHg7CisgICAgbWFyZ2luOiAwIDAgMCA0M3B4OworfQorCisudG9kby1saXN0IGxpLmVk
aXRpbmcgLnZpZXcgeworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKy50b2RvLWxpc3QgbGkgLnRv
Z2dsZSB7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIHdpZHRoOiA0MHB4OworICAgIC8q
IGF1dG8sIHNpbmNlIG5vbi1XZWJLaXQgYnJvd3NlcnMgZG9lc24ndCBzdXBwb3J0IGlucHV0IHN0
eWxpbmcgKi8KKyAgICBoZWlnaHQ6IGF1dG87CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAg
IHRvcDogMDsKKyAgICBib3R0b206IDA7CisgICAgbWFyZ2luOiBhdXRvIDA7CisgICAgYm9yZGVy
OiBub25lOyAvKiBNb2JpbGUgU2FmYXJpICovCisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25l
OworICAgIGFwcGVhcmFuY2U6IG5vbmU7Cit9CisKKy50b2RvLWxpc3QgbGkgLnRvZ2dsZTphZnRl
ciB7CisgICAgY29udGVudDogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiB2aWV3
Qm94PSItMTAgLTE4IDEwMCAxMzUiPjxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIHI9IjUwIiBmaWxs
PSJub25lIiBzdHJva2U9IiNlZGVkZWQiIHN0cm9rZS13aWR0aD0iMyIvPjwvc3ZnPicpOworfQor
CisudG9kby1saXN0IGxpIC50b2dnbGU6Y2hlY2tlZDphZnRlciB7CisgICAgY29udGVudDogdXJs
KCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8y
MDAwL3N2ZyIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSItMTAgLTE4IDEwMCAxMzUi
PjxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIHI9IjUwIiBmaWxsPSJub25lIiBzdHJva2U9IiNiZGRh
ZDUiIHN0cm9rZS13aWR0aD0iMyIvPjxwYXRoIGZpbGw9IiM1ZGMyYWYiIGQ9Ik03MiAyNUw0MiA3
MSAyNyA1NmwtNCA0IDIwIDIwIDM0LTUyeiIvPjwvc3ZnPicpOworfQorCisudG9kby1saXN0IGxp
IGxhYmVsIHsKKyAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7CisgICAgcGFkZGluZzogMTVweCA2
MHB4IDE1cHggMTVweDsKKyAgICBtYXJnaW4tbGVmdDogNDVweDsKKyAgICBkaXNwbGF5OiBibG9j
azsKKyAgICBsaW5lLWhlaWdodDogMS4yOworICAgIHRyYW5zaXRpb246IGNvbG9yIDAuNHM7Cit9
CisKKy50b2RvLWxpc3QgbGkuY29tcGxldGVkIGxhYmVsIHsKKyAgICBjb2xvcjogI2Q5ZDlkOTsK
KyAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsKK30KKworLnRvZG8tbGlzdCBsaSAu
ZGVzdHJveSB7CisgICAgZGlzcGxheTogbm9uZTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7Cisg
ICAgdG9wOiAwOworICAgIHJpZ2h0OiAxMHB4OworICAgIGJvdHRvbTogMDsKKyAgICB3aWR0aDog
NDBweDsKKyAgICBoZWlnaHQ6IDQwcHg7CisgICAgbWFyZ2luOiBhdXRvIDA7CisgICAgZm9udC1z
aXplOiAzMHB4OworICAgIGNvbG9yOiAjY2M5YTlhOworICAgIG1hcmdpbi1ib3R0b206IDExcHg7
CisgICAgdHJhbnNpdGlvbjogY29sb3IgMC4ycyBlYXNlLW91dDsKK30KKworLnRvZG8tbGlzdCBs
aSAuZGVzdHJveTpob3ZlciB7CisgICAgY29sb3I6ICNhZjViNWU7Cit9CisKKy50b2RvLWxpc3Qg
bGkgLmRlc3Ryb3k6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICfDlyc7Cit9CisKKy50b2RvLWxpc3Qg
bGk6aG92ZXIgLmRlc3Ryb3kgeworICAgIGRpc3BsYXk6IGJsb2NrOworfQorCisudG9kby1saXN0
IGxpIC5lZGl0IHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisudG9kby1saXN0IGxpLmVkaXRp
bmc6bGFzdC1jaGlsZCB7CisgICAgbWFyZ2luLWJvdHRvbTogLTFweDsKK30KKworLmZvb3RlciB7
CisgICAgY29sb3I6ICM3Nzc7CisgICAgcGFkZGluZzogMTBweCAxNXB4OworICAgIGhlaWdodDog
MjBweDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlk
ICNlNmU2ZTY7Cit9CisKKy5mb290ZXI6YmVmb3JlIHsKKyAgICBjb250ZW50OiAnJzsKKyAgICBw
b3NpdGlvbjogYWJzb2x1dGU7CisgICAgcmlnaHQ6IDA7CisgICAgYm90dG9tOiAwOworICAgIGxl
ZnQ6IDA7CisgICAgaGVpZ2h0OiA1MHB4OworICAgIG92ZXJmbG93OiBoaWRkZW47CisgICAgYm94
LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwKKyAgICAgICAgICAgICAgICAw
IDhweCAwIC0zcHggI2Y2ZjZmNiwKKyAgICAgICAgICAgICAgICAwIDlweCAxcHggLTNweCByZ2Jh
KDAsIDAsIDAsIDAuMiksCisgICAgICAgICAgICAgICAgMCAxNnB4IDAgLTZweCAjZjZmNmY2LAor
ICAgICAgICAgICAgICAgIDAgMTdweCAycHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMik7Cit9CisK
Ky50b2RvLWNvdW50IHsKKyAgICBmbG9hdDogbGVmdDsKKyAgICB0ZXh0LWFsaWduOiBsZWZ0Owor
fQorCisudG9kby1jb3VudCBzdHJvbmcgeworICAgIGZvbnQtd2VpZ2h0OiAzMDA7Cit9CisKKy5m
aWx0ZXJzIHsKKyAgICBtYXJnaW46IDA7CisgICAgcGFkZGluZzogMDsKKyAgICBsaXN0LXN0eWxl
OiBub25lOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICByaWdodDogMDsKKyAgICBsZWZ0
OiAwOworfQorCisuZmlsdGVycyBsaSB7CisgICAgZGlzcGxheTogaW5saW5lOworfQorCisuZmls
dGVycyBsaSBhIHsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICBtYXJnaW46IDNweDsKKyAgICBw
YWRkaW5nOiAzcHggN3B4OworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBib3JkZXI6
IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgICBib3JkZXItcmFkaXVzOiAzcHg7Cit9CisKKy5m
aWx0ZXJzIGxpIGE6aG92ZXIgeworICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNzUsIDQ3LCA0Nywg
MC4xKTsKK30KKworLmZpbHRlcnMgbGkgYS5zZWxlY3RlZCB7CisgICAgYm9yZGVyLWNvbG9yOiBy
Z2JhKDE3NSwgNDcsIDQ3LCAwLjIpOworfQorCisuY2xlYXItY29tcGxldGVkLAoraHRtbCAuY2xl
YXItY29tcGxldGVkOmFjdGl2ZSB7CisgICAgZmxvYXQ6IHJpZ2h0OworICAgIHBvc2l0aW9uOiBy
ZWxhdGl2ZTsKKyAgICBsaW5lLWhlaWdodDogMjBweDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5v
bmU7CisgICAgY3Vyc29yOiBwb2ludGVyOworfQorCisuY2xlYXItY29tcGxldGVkOmhvdmVyIHsK
KyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworLmluZm8geworICAgIG1hcmdp
bjogNjVweCBhdXRvIDA7CisgICAgY29sb3I6ICNiZmJmYmY7CisgICAgZm9udC1zaXplOiAxMHB4
OworICAgIHRleHQtc2hhZG93OiAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKKyAg
ICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKKy5pbmZvIHAgeworICAgIGxpbmUtaGVpZ2h0OiAx
OworfQorCisuaW5mbyBhIHsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICB0ZXh0LWRlY29yYXRp
b246IG5vbmU7CisgICAgZm9udC13ZWlnaHQ6IDQwMDsKK30KKworLmluZm8gYTpob3ZlciB7Cisg
ICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy8qCisgICAgSGFjayB0byByZW1v
dmUgYmFja2dyb3VuZCBmcm9tIE1vYmlsZSBTYWZhcmkuCisgICAgQ2FuJ3QgdXNlIGl0IGdsb2Jh
bGx5IHNpbmNlIGl0IGRlc3Ryb3lzIGNoZWNrYm94ZXMgaW4gRmlyZWZveAorKi8KK0BtZWRpYSBz
Y3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCkgeworICAgIC50b2dn
bGUtYWxsLAorICAgIC50b2RvLWxpc3QgbGkgLnRvZ2dsZSB7CisgICAgICAgIGJhY2tncm91bmQ6
IG5vbmU7CisgICAgfQorCisgICAgLnRvZG8tbGlzdCBsaSAudG9nZ2xlIHsKKyAgICAgICAgaGVp
Z2h0OiA0MHB4OworICAgIH0KKworICAgIC50b2dnbGUtYWxsIHsKKyAgICAgICAgLXdlYmtpdC10
cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7CisgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVn
KTsKKyAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAgICAgICBhcHBlYXJhbmNl
OiBub25lOworICAgIH0KK30KKworQG1lZGlhIChtYXgtd2lkdGg6IDQzMHB4KSB7CisgICAgLmZv
b3RlciB7CisgICAgICAgIGhlaWdodDogNTBweDsKKyAgICB9CisKKyAgICAuZmlsdGVycyB7Cisg
ICAgICAgIGJvdHRvbTogMTBweDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9i
YWNrYm9uZS9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MgYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9iYWNrYm9uZS9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNGQyNWQzYzg0YWM2YzZhZWYyNmI5NjgzYTJiYzEwYzYxZjk2MGM4ZgotLS0gL2Rldi9udWxs
CisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9i
YXNlLmNzcwpAQCAtMCwwICsxLDE0MSBAQAoraHIgeworICAgIG1hcmdpbjogMjBweCAwOworICAg
IGJvcmRlcjogMDsKKyAgICBib3JkZXItdG9wOiAxcHggZGFzaGVkICNjNWM1YzU7CisgICAgYm9y
ZGVyLWJvdHRvbTogMXB4IGRhc2hlZCAjZjdmN2Y3OworfQorCisubGVhcm4gYSB7CisgICAgZm9u
dC13ZWlnaHQ6IG5vcm1hbDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgY29sb3I6
ICNiODNmNDU7Cit9CisKKy5sZWFybiBhOmhvdmVyIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVu
ZGVybGluZTsKKyAgICBjb2xvcjogIzc4N2U3ZTsKK30KKworLmxlYXJuIGgzLAorLmxlYXJuIGg0
LAorLmxlYXJuIGg1IHsKKyAgICBtYXJnaW46IDEwcHggMDsKKyAgICBmb250LXdlaWdodDogNTAw
OworICAgIGxpbmUtaGVpZ2h0OiAxLjI7CisgICAgY29sb3I6ICMwMDA7Cit9CisKKy5sZWFybiBo
MyB7CisgICAgZm9udC1zaXplOiAyNHB4OworfQorCisubGVhcm4gaDQgeworICAgIGZvbnQtc2l6
ZTogMThweDsKK30KKworLmxlYXJuIGg1IHsKKyAgICBtYXJnaW4tYm90dG9tOiAwOworICAgIGZv
bnQtc2l6ZTogMTRweDsKK30KKworLmxlYXJuIHVsIHsKKyAgICBwYWRkaW5nOiAwOworICAgIG1h
cmdpbjogMCAwIDMwcHggMjVweDsKK30KKworLmxlYXJuIGxpIHsKKyAgICBsaW5lLWhlaWdodDog
MjBweDsKK30KKworLmxlYXJuIHAgeworICAgIGZvbnQtc2l6ZTogMTVweDsKKyAgICBmb250LXdl
aWdodDogMzAwOworICAgIGxpbmUtaGVpZ2h0OiAxLjM7CisgICAgbWFyZ2luLXRvcDogMDsKKyAg
ICBtYXJnaW4tYm90dG9tOiAwOworfQorCisjaXNzdWUtY291bnQgeworICAgIGRpc3BsYXk6IG5v
bmU7Cit9CisKKy5xdW90ZSB7CisgICAgYm9yZGVyOiBub25lOworICAgIG1hcmdpbjogMjBweCAw
IDYwcHggMDsKK30KKworLnF1b3RlIHAgeworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKwor
LnF1b3RlIHA6YmVmb3JlIHsKKyAgICBjb250ZW50OiAn4oCcJzsKKyAgICBmb250LXNpemU6IDUw
cHg7CisgICAgb3BhY2l0eTogLjE1OworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6
IC0yMHB4OworICAgIGxlZnQ6IDNweDsKK30KKworLnF1b3RlIHA6YWZ0ZXIgeworICAgIGNvbnRl
bnQ6ICfigJ0nOworICAgIGZvbnQtc2l6ZTogNTBweDsKKyAgICBvcGFjaXR5OiAuMTU7CisgICAg
cG9zaXRpb246IGFic29sdXRlOworICAgIGJvdHRvbTogLTQycHg7CisgICAgcmlnaHQ6IDNweDsK
K30KKworLnF1b3RlIGZvb3RlciB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIGJvdHRv
bTogLTQwcHg7CisgICAgcmlnaHQ6IDA7Cit9CisKKy5xdW90ZSBmb290ZXIgaW1nIHsKKyAgICBi
b3JkZXItcmFkaXVzOiAzcHg7Cit9CisKKy5xdW90ZSBmb290ZXIgYSB7CisgICAgbWFyZ2luLWxl
ZnQ6IDVweDsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworfQorCisuc3BlZWNoLWJ1YmJs
ZSB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIHBhZGRpbmc6IDEwcHg7CisgICAgYmFj
a2dyb3VuZDogcmdiYSgwLCAwLCAwLCAuMDQpOworICAgIGJvcmRlci1yYWRpdXM6IDVweDsKK30K
KworLnNwZWVjaC1idWJibGU6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICcnOworICAgIHBvc2l0aW9u
OiBhYnNvbHV0ZTsKKyAgICB0b3A6IDEwMCU7CisgICAgcmlnaHQ6IDMwcHg7CisgICAgYm9yZGVy
OiAxM3B4IHNvbGlkIHRyYW5zcGFyZW50OworICAgIGJvcmRlci10b3AtY29sb3I6IHJnYmEoMCwg
MCwgMCwgLjA0KTsKK30KKworLmxlYXJuLWJhciA+IC5sZWFybiB7CisgICAgcG9zaXRpb246IGFi
c29sdXRlOworICAgIHdpZHRoOiAyNzJweDsKKyAgICB0b3A6IDhweDsKKyAgICBsZWZ0OiAtMzAw
cHg7CisgICAgcGFkZGluZzogMTBweDsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7CisgICAgYmFj
a2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAuNik7CisgICAgdHJhbnNpdGlvbi1w
cm9wZXJ0eTogbGVmdDsKKyAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiA1MDBtczsKK30KKworQG1l
ZGlhIChtaW4td2lkdGg6IDg5OXB4KSB7CisgICAgLmxlYXJuLWJhciB7CisgICAgICAgIHdpZHRo
OiBhdXRvOworICAgICAgICBwYWRkaW5nLWxlZnQ6IDMwMHB4OworICAgIH0KKworICAgIC5sZWFy
bi1iYXIgPiAubGVhcm4geworICAgICAgICBsZWZ0OiA4cHg7CisgICAgfQorfQpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2Uu
anMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFz
ZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44MWUwMDZiYzUwMmRkYzRjNzRmNDdiZDEzYTgzOTIyNzdmODMwZGI4
Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvbm9kZV9tb2R1bGVzL3Rv
ZG9tdmMtY29tbW9uL2Jhc2UuanMKQEAgLTAsMCArMSwyNDkgQEAKKy8qIGdsb2JhbCBfICovCiso
ZnVuY3Rpb24gKCkgeworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIC8qIGpzaGludCBpZ25vcmU6
c3RhcnQgKi8KKyAgICAvLyBVbmRlcnNjb3JlJ3MgVGVtcGxhdGUgTW9kdWxlCisgICAgLy8gQ291
cnRlc3kgb2YgdW5kZXJzY29yZWpzLm9yZworICAgIHZhciBfID0gKGZ1bmN0aW9uIChfKSB7Cisg
ICAgICAgIF8uZGVmYXVsdHMgPSBmdW5jdGlvbiAob2JqZWN0KSB7CisgICAgICAgICAgICBpZiAo
IW9iamVjdCkgeworICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBmb3IgKHZhciBhcmdzSW5kZXggPSAxLCBhcmdzTGVuZ3RoID0gYXJndW1l
bnRzLmxlbmd0aDsgYXJnc0luZGV4IDwgYXJnc0xlbmd0aDsgYXJnc0luZGV4KyspIHsKKyAgICAg
ICAgICAgICAgICB2YXIgaXRlcmFibGUgPSBhcmd1bWVudHNbYXJnc0luZGV4XTsKKyAgICAgICAg
ICAgICAgICBpZiAoaXRlcmFibGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5
IGluIGl0ZXJhYmxlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0W2tleV0g
PT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFtrZXldID0gaXRl
cmFibGVba2V5XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBvYmplY3Q7CisgICAgICAgIH0KKworICAgICAgICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3Jl
IHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMsIGNoYW5nZSB0aGUKKyAgICAgICAg
Ly8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0
ZXJzLgorICAgICAgICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7CisgICAgICAgICAgICBldmFsdWF0
ZSAgICA6IC88JShbXHNcU10rPyklPi9nLAorICAgICAgICAgICAgaW50ZXJwb2xhdGUgOiAvPCU9
KFtcc1xTXSs/KSU+L2csCisgICAgICAgICAgICBlc2NhcGUgICAgICA6IC88JS0oW1xzXFNdKz8p
JT4vZworICAgICAgICB9OworCisgICAgICAgIC8vIFdoZW4gY3VzdG9taXppbmcgYHRlbXBsYXRl
U2V0dGluZ3NgLCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBkZWZpbmUgYW4KKyAgICAgICAgLy8gaW50
ZXJwb2xhdGlvbiwgZXZhbHVhdGlvbiBvciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhh
dCBpcworICAgICAgICAvLyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaC4KKyAgICAgICAgdmFyIG5v
TWF0Y2ggPSAvKC4pXi87CisKKyAgICAgICAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8g
YmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGEKKyAgICAgICAgLy8gc3Ry
aW5nIGxpdGVyYWwuCisgICAgICAgIHZhciBlc2NhcGVzID0geworICAgICAgICAgICAgIiciOiAg
ICAgICInIiwKKyAgICAgICAgICAgICdcXCc6ICAgICAnXFwnLAorICAgICAgICAgICAgJ1xyJzog
ICAgICdyJywKKyAgICAgICAgICAgICdcbic6ICAgICAnbicsCisgICAgICAgICAgICAnXHQnOiAg
ICAgJ3QnLAorICAgICAgICAgICAgJ1x1MjAyOCc6ICd1MjAyOCcsCisgICAgICAgICAgICAnXHUy
MDI5JzogJ3UyMDI5JworICAgICAgICB9OworCisgICAgICAgIHZhciBlc2NhcGVyID0gL1xcfCd8
XHJ8XG58XHR8XHUyMDI4fFx1MjAyOS9nOworCisgICAgICAgIC8vIEphdmFTY3JpcHQgbWljcm8t
dGVtcGxhdGluZywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uCisgICAg
ICAgIC8vIFVuZGVyc2NvcmUgdGVtcGxhdGluZyBoYW5kbGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJz
LCBwcmVzZXJ2ZXMgd2hpdGVzcGFjZSwKKyAgICAgICAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVz
IHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUuCisgICAgICAgIF8udGVtcGxhdGUgPSBm
dW5jdGlvbih0ZXh0LCBkYXRhLCBzZXR0aW5ncykgeworICAgICAgICAgICAgdmFyIHJlbmRlcjsK
KyAgICAgICAgICAgIHNldHRpbmdzID0gXy5kZWZhdWx0cyh7fSwgc2V0dGluZ3MsIF8udGVtcGxh
dGVTZXR0aW5ncyk7CisKKyAgICAgICAgICAgIC8vIENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9u
ZSByZWd1bGFyIGV4cHJlc3Npb24gdmlhIGFsdGVybmF0aW9uLgorICAgICAgICAgICAgdmFyIG1h
dGNoZXIgPSBuZXcgUmVnRXhwKFsKKyAgICAgICAgICAgICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8
IG5vTWF0Y2gpLnNvdXJjZSwKKyAgICAgICAgICAgICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUg
fHwgbm9NYXRjaCkuc291cmNlLAorICAgICAgICAgICAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8
fCBub01hdGNoKS5zb3VyY2UKKyAgICAgICAgICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTsK
KworICAgICAgICAgICAgLy8gQ29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBz
dHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS4KKyAgICAgICAgICAgIHZhciBpbmRleCA9IDA7
CisgICAgICAgICAgICB2YXIgc291cmNlID0gIl9fcCs9JyI7CisgICAgICAgICAgICB0ZXh0LnJl
cGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1
YXRlLCBvZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShpbmRl
eCwgb2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShlc2NhcGVyLCBmdW5jdGlv
bihtYXRjaCkgeyByZXR1cm4gJ1xcJyArIGVzY2FwZXNbbWF0Y2hdOyB9KTsKKworICAgICAgICAg
ICAgICAgIGlmIChlc2NhcGUpIHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9ICInK1xu
KChfX3Q9KCIgKyBlc2NhcGUgKyAiKSk9PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXG4nIjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGludGVycG9sYXRlKSB7CisgICAg
ICAgICAgICAgICAgICAgIHNvdXJjZSArPSAiJytcbigoX190PSgiICsgaW50ZXJwb2xhdGUgKyAi
KSk9PW51bGw/Jyc6X190KStcbiciOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAoZXZhbHVhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9ICInO1xuIiAr
IGV2YWx1YXRlICsgIlxuX19wKz0nIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG1hdGNoOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBzb3VyY2UgKz0gIic7XG4iOwor
CisgICAgICAgICAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRh
dGEgdmFsdWVzIGluIGxvY2FsIHNjb3BlLgorICAgICAgICAgICAgaWYgKCFzZXR0aW5ncy52YXJp
YWJsZSkgc291cmNlID0gJ3dpdGgob2JqfHx7fSl7XG4nICsgc291cmNlICsgJ31cbic7CisKKyAg
ICAgICAgICAgIHNvdXJjZSA9ICJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpv
aW4sIiArCisgICAgICAgICAgICAgICAgInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChh
cmd1bWVudHMsJycpO307XG4iICsKKyAgICAgICAgICAgICAgICBzb3VyY2UgKyAicmV0dXJuIF9f
cDtcbiI7CisKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgcmVuZGVyID0gbmV3
IEZ1bmN0aW9uKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7CisgICAg
ICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7
CisgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKGRhdGEpIHJldHVybiByZW5kZXIoZGF0YSwgXyk7CisgICAgICAgICAgICB2YXIgdGVtcGxh
dGUgPSBmdW5jdGlvbihkYXRhKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlci5jYWxs
KHRoaXMsIGRhdGEsIF8pOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgLy8gUHJvdmlk
ZSB0aGUgY29tcGlsZWQgZnVuY3Rpb24gc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNv
bXBpbGF0aW9uLgorICAgICAgICAgICAgdGVtcGxhdGUuc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAo
c2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaicpICsgJyl7XG4nICsgc291cmNlICsgJ30nOworCisg
ICAgICAgICAgICByZXR1cm4gdGVtcGxhdGU7CisgICAgICAgIH07CisKKyAgICAgICAgcmV0dXJu
IF87CisgICAgfSkoe30pOworCisgICAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lID09PSAndG9kb212
Yy5jb20nKSB7CisgICAgICAgIChmdW5jdGlvbihpLHMsbyxnLHIsYSxtKXtpWydHb29nbGVBbmFs
eXRpY3NPYmplY3QnXT1yO2lbcl09aVtyXXx8ZnVuY3Rpb24oKXsKKyAgICAgICAgKGlbcl0ucT1p
W3JdLnF8fFtdKS5wdXNoKGFyZ3VtZW50cyl9LGlbcl0ubD0xKm5ldyBEYXRlKCk7YT1zLmNyZWF0
ZUVsZW1lbnQobyksCisgICAgICAgIG09cy5nZXRFbGVtZW50c0J5VGFnTmFtZShvKVswXTthLmFz
eW5jPTE7YS5zcmM9ZzttLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbSkKKyAgICAgICAgfSko
d2luZG93LGRvY3VtZW50LCdzY3JpcHQnLCdodHRwczovL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNv
bS9hbmFseXRpY3MuanMnLCdnYScpOworICAgICAgICBnYSgnY3JlYXRlJywgJ1VBLTMxMDgxMDYy
LTEnLCAnYXV0bycpOworICAgICAgICBnYSgnc2VuZCcsICdwYWdldmlldycpOworICAgIH0KKyAg
ICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqLworCisgICAgZnVuY3Rpb24gcmVkaXJlY3QoKSB7Cisg
ICAgICAgIGlmIChsb2NhdGlvbi5ob3N0bmFtZSA9PT0gJ3Rhc3RlanMuZ2l0aHViLmlvJykgewor
ICAgICAgICAgICAgbG9jYXRpb24uaHJlZiA9IGxvY2F0aW9uLmhyZWYucmVwbGFjZSgndGFzdGVq
cy5naXRodWIuaW8vdG9kb212YycsICd0b2RvbXZjLmNvbScpOworICAgICAgICB9CisgICAgfQor
CisgICAgZnVuY3Rpb24gZmluZFJvb3QoKSB7CisgICAgICAgIHZhciBiYXNlID0gbG9jYXRpb24u
aHJlZi5pbmRleE9mKCdleGFtcGxlcy8nKTsKKyAgICAgICAgcmV0dXJuIGxvY2F0aW9uLmhyZWYu
c3Vic3RyKDAsIGJhc2UpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGdldEZpbGUoZmlsZSwgY2Fs
bGJhY2spIHsKKyAgICAgICAgaWYgKCFsb2NhdGlvbi5ob3N0KSB7CisgICAgICAgICAgICByZXR1
cm4gY29uc29sZS5pbmZvKCdNaXNzIHRoZSBpbmZvIGJhcj8gUnVuIFRvZG9NVkMgZnJvbSBhIHNl
cnZlciB0byBhdm9pZCBhIGNyb3NzLW9yaWdpbiBlcnJvci4nKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKworICAgICAgICB4aHIub3Blbign
R0VUJywgZmluZFJvb3QoKSArIGZpbGUsIHRydWUpOworICAgICAgICB4aHIuc2VuZCgpOworCisg
ICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoeGhyLnN0
YXR1cyA9PT0gMjAwICYmIGNhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2soeGhy
LnJlc3BvbnNlVGV4dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAg
ZnVuY3Rpb24gTGVhcm4obGVhcm5KU09OLCBjb25maWcpIHsKKyAgICAgICAgaWYgKCEodGhpcyBp
bnN0YW5jZW9mIExlYXJuKSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBMZWFybihsZWFybkpT
T04sIGNvbmZpZyk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgdGVtcGxhdGUsIGZyYW1ld29y
azsKKworICAgICAgICBpZiAodHlwZW9mIGxlYXJuSlNPTiAhPT0gJ29iamVjdCcpIHsKKyAgICAg
ICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbGVhcm5KU09OID0gSlNPTi5wYXJzZShsZWFy
bkpTT04pOworICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25maWcpIHsKKyAg
ICAgICAgICAgIHRlbXBsYXRlID0gY29uZmlnLnRlbXBsYXRlOworICAgICAgICAgICAgZnJhbWV3
b3JrID0gY29uZmlnLmZyYW1ld29yazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdGVtcGxh
dGUgJiYgbGVhcm5KU09OLnRlbXBsYXRlcykgeworICAgICAgICAgICAgdGVtcGxhdGUgPSBsZWFy
bkpTT04udGVtcGxhdGVzLnRvZG9tdmM7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZyYW1l
d29yayAmJiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1mcmFtZXdvcmtdJykpIHsKKyAg
ICAgICAgICAgIGZyYW1ld29yayA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWZyYW1l
d29ya10nKS5kYXRhc2V0LmZyYW1ld29yazsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMudGVt
cGxhdGUgPSB0ZW1wbGF0ZTsKKworICAgICAgICBpZiAobGVhcm5KU09OLmJhY2tlbmQpIHsKKyAg
ICAgICAgICAgIHRoaXMuZnJhbWV3b3JrSlNPTiA9IGxlYXJuSlNPTi5iYWNrZW5kOworICAgICAg
ICAgICAgdGhpcy5mcmFtZXdvcmtKU09OLmlzc3VlTGFiZWwgPSBmcmFtZXdvcms7CisgICAgICAg
ICAgICB0aGlzLmFwcGVuZCh7CisgICAgICAgICAgICAgICAgYmFja2VuZDogdHJ1ZQorICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0gZWxzZSBpZiAobGVhcm5KU09OW2ZyYW1ld29ya10pIHsKKyAg
ICAgICAgICAgIHRoaXMuZnJhbWV3b3JrSlNPTiA9IGxlYXJuSlNPTltmcmFtZXdvcmtdOworICAg
ICAgICAgICAgdGhpcy5mcmFtZXdvcmtKU09OLmlzc3VlTGFiZWwgPSBmcmFtZXdvcms7CisgICAg
ICAgICAgICB0aGlzLmFwcGVuZCgpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5mZXRjaElz
c3VlQ291bnQoKTsKKyAgICB9CisKKyAgICBMZWFybi5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rp
b24gKG9wdHMpIHsKKyAgICAgICAgdmFyIGFzaWRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
YXNpZGUnKTsKKyAgICAgICAgYXNpZGUuaW5uZXJIVE1MID0gXy50ZW1wbGF0ZSh0aGlzLnRlbXBs
YXRlLCB0aGlzLmZyYW1ld29ya0pTT04pOworICAgICAgICBhc2lkZS5jbGFzc05hbWUgPSAnbGVh
cm4nOworCisgICAgICAgIGlmIChvcHRzICYmIG9wdHMuYmFja2VuZCkgeworICAgICAgICAgICAg
Ly8gUmVtb3ZlIGRlbW8gbGluaworICAgICAgICAgICAgdmFyIHNvdXJjZUxpbmtzID0gYXNpZGUu
cXVlcnlTZWxlY3RvcignLnNvdXJjZS1saW5rcycpOworICAgICAgICAgICAgdmFyIGhlYWRpbmcg
PSBzb3VyY2VMaW5rcy5maXJzdEVsZW1lbnRDaGlsZDsKKyAgICAgICAgICAgIHZhciBzb3VyY2VM
aW5rID0gc291cmNlTGlua3MubGFzdEVsZW1lbnRDaGlsZDsKKyAgICAgICAgICAgIC8vIENvcnJl
Y3QgbGluayBwYXRoCisgICAgICAgICAgICB2YXIgaHJlZiA9IHNvdXJjZUxpbmsuZ2V0QXR0cmli
dXRlKCdocmVmJyk7CisgICAgICAgICAgICBzb3VyY2VMaW5rLnNldEF0dHJpYnV0ZSgnaHJlZics
IGhyZWYuc3Vic3RyKGhyZWYubGFzdEluZGV4T2YoJ2h0dHAnKSkpOworICAgICAgICAgICAgc291
cmNlTGlua3MuaW5uZXJIVE1MID0gaGVhZGluZy5vdXRlckhUTUwgKyBzb3VyY2VMaW5rLm91dGVy
SFRNTDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIExvY2FsaXplIGRlbW8gbGlu
a3MKKyAgICAgICAgICAgIHZhciBkZW1vTGlua3MgPSBhc2lkZS5xdWVyeVNlbGVjdG9yQWxsKCcu
ZGVtby1saW5rJyk7CisgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGRl
bW9MaW5rcywgZnVuY3Rpb24gKGRlbW9MaW5rKSB7CisgICAgICAgICAgICAgICAgaWYgKGRlbW9M
aW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpLnN1YnN0cigwLCA0KSAhPT0gJ2h0dHAnKSB7CisgICAg
ICAgICAgICAgICAgICAgIGRlbW9MaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIGZpbmRSb290KCkg
KyBkZW1vTGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTmFt
ZSA9IChkb2N1bWVudC5ib2R5LmNsYXNzTmFtZSArICcgbGVhcm4tYmFyJykudHJpbSgpOworICAg
ICAgICBkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50SFRNTCgnYWZ0ZXJCZWdpbicsIGFzaWRl
Lm91dGVySFRNTCk7CisgICAgfTsKKworICAgIExlYXJuLnByb3RvdHlwZS5mZXRjaElzc3VlQ291
bnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBpc3N1ZUxpbmsgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnaXNzdWUtY291bnQtbGluaycpOworICAgICAgICBpZiAoaXNzdWVMaW5rKSB7
CisgICAgICAgICAgICB2YXIgdXJsID0gaXNzdWVMaW5rLmhyZWYucmVwbGFjZSgnaHR0cHM6Ly9n
aXRodWIuY29tJywgJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MnKTsKKyAgICAgICAgICAg
IHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgICAgIHhoci5vcGVuKCdH
RVQnLCB1cmwsIHRydWUpOworICAgICAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uIChlKSB7
CisgICAgICAgICAgICAgICAgdmFyIHBhcnNlZFJlc3BvbnNlID0gSlNPTi5wYXJzZShlLnRhcmdl
dC5yZXNwb25zZVRleHQpOworICAgICAgICAgICAgICAgIGlmIChwYXJzZWRSZXNwb25zZSBpbnN0
YW5jZW9mIEFycmF5KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IHBhcnNlZFJl
c3BvbnNlLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ICE9PSAwKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZUxpbmsuaW5uZXJIVE1MID0gJ1RoaXMgYXBwIGhh
cyAnICsgY291bnQgKyAnIG9wZW4gaXNzdWVzJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdpc3N1ZS1jb3VudCcpLnN0eWxlLmRpc3BsYXkgPSAnaW5s
aW5lJzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH07CisgICAgICAgICAgICB4aHIuc2VuZCgpOworICAgICAgICB9CisgICAgfTsKKworICAg
IHJlZGlyZWN0KCk7CisgICAgZ2V0RmlsZSgnbGVhcm4uanNvbicsIExlYXJuKTsKK30pKCk7CmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS91
bmRlcnNjb3JlLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvbm9kZV9tb2R1bGVzL3VuZGVyc2Nv
cmUvdW5kZXJzY29yZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMjkzMzJmOTQ1Yjg1OWNlYTAwNzViYjY5ZThi
ZDVjMWMxMTNmMDVjCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvbm9k
ZV9tb2R1bGVzL3VuZGVyc2NvcmUvdW5kZXJzY29yZS5qcwpAQCAtMCwwICsxLDE1NDggQEAKKy8v
ICAgICBVbmRlcnNjb3JlLmpzIDEuOC4zCisvLyAgICAgaHR0cDovL3VuZGVyc2NvcmVqcy5vcmcK
Ky8vICAgICAoYykgMjAwOS0yMDE1IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQg
SW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzCisvLyAgICAgVW5kZXJzY29yZSBtYXkg
YmUgZnJlZWx5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KKworKGZ1bmN0aW9u
KCkgeworCisgIC8vIEJhc2VsaW5lIHNldHVwCisgIC8vIC0tLS0tLS0tLS0tLS0tCisKKyAgLy8g
RXN0YWJsaXNoIHRoZSByb290IG9iamVjdCwgYHdpbmRvd2AgaW4gdGhlIGJyb3dzZXIsIG9yIGBl
eHBvcnRzYCBvbiB0aGUgc2VydmVyLgorICB2YXIgcm9vdCA9IHRoaXM7CisKKyAgLy8gU2F2ZSB0
aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhlIGBfYCB2YXJpYWJsZS4KKyAgdmFyIHByZXZpb3VzVW5k
ZXJzY29yZSA9IHJvb3QuXzsKKworICAvLyBTYXZlIGJ5dGVzIGluIHRoZSBtaW5pZmllZCAoYnV0
IG5vdCBnemlwcGVkKSB2ZXJzaW9uOgorICB2YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlw
ZSwgT2JqUHJvdG8gPSBPYmplY3QucHJvdG90eXBlLCBGdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90
b3R5cGU7CisKKyAgLy8gQ3JlYXRlIHF1aWNrIHJlZmVyZW5jZSB2YXJpYWJsZXMgZm9yIHNwZWVk
IGFjY2VzcyB0byBjb3JlIHByb3RvdHlwZXMuCisgIHZhcgorICAgIHB1c2ggICAgICAgICAgICAg
PSBBcnJheVByb3RvLnB1c2gsCisgICAgc2xpY2UgICAgICAgICAgICA9IEFycmF5UHJvdG8uc2xp
Y2UsCisgICAgdG9TdHJpbmcgICAgICAgICA9IE9ialByb3RvLnRvU3RyaW5nLAorICAgIGhhc093
blByb3BlcnR5ICAgPSBPYmpQcm90by5oYXNPd25Qcm9wZXJ0eTsKKworICAvLyBBbGwgKipFQ01B
U2NyaXB0IDUqKiBuYXRpdmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0
byB1c2UKKyAgLy8gYXJlIGRlY2xhcmVkIGhlcmUuCisgIHZhcgorICAgIG5hdGl2ZUlzQXJyYXkg
ICAgICA9IEFycmF5LmlzQXJyYXksCisgICAgbmF0aXZlS2V5cyAgICAgICAgID0gT2JqZWN0Lmtl
eXMsCisgICAgbmF0aXZlQmluZCAgICAgICAgID0gRnVuY1Byb3RvLmJpbmQsCisgICAgbmF0aXZl
Q3JlYXRlICAgICAgID0gT2JqZWN0LmNyZWF0ZTsKKworICAvLyBOYWtlZCBmdW5jdGlvbiByZWZl
cmVuY2UgZm9yIHN1cnJvZ2F0ZS1wcm90b3R5cGUtc3dhcHBpbmcuCisgIHZhciBDdG9yID0gZnVu
Y3Rpb24oKXt9OworCisgIC8vIENyZWF0ZSBhIHNhZmUgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNj
b3JlIG9iamVjdCBmb3IgdXNlIGJlbG93LgorICB2YXIgXyA9IGZ1bmN0aW9uKG9iaikgeworICAg
IGlmIChvYmogaW5zdGFuY2VvZiBfKSByZXR1cm4gb2JqOworICAgIGlmICghKHRoaXMgaW5zdGFu
Y2VvZiBfKSkgcmV0dXJuIG5ldyBfKG9iaik7CisgICAgdGhpcy5fd3JhcHBlZCA9IG9iajsKKyAg
fTsKKworICAvLyBFeHBvcnQgdGhlIFVuZGVyc2NvcmUgb2JqZWN0IGZvciAqKk5vZGUuanMqKiwg
d2l0aAorICAvLyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBmb3IgdGhlIG9sZCBgcmVxdWlyZSgp
YCBBUEkuIElmIHdlJ3JlIGluCisgIC8vIHRoZSBicm93c2VyLCBhZGQgYF9gIGFzIGEgZ2xvYmFs
IG9iamVjdC4KKyAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykgeworICAgIGlm
ICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykgeworICAg
ICAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gXzsKKyAgICB9CisgICAgZXhwb3J0cy5fID0g
XzsKKyAgfSBlbHNlIHsKKyAgICByb290Ll8gPSBfOworICB9CisKKyAgLy8gQ3VycmVudCB2ZXJz
aW9uLgorICBfLlZFUlNJT04gPSAnMS44LjMnOworCisgIC8vIEludGVybmFsIGZ1bmN0aW9uIHRo
YXQgcmV0dXJucyBhbiBlZmZpY2llbnQgKGZvciBjdXJyZW50IGVuZ2luZXMpIHZlcnNpb24KKyAg
Ly8gb2YgdGhlIHBhc3NlZC1pbiBjYWxsYmFjaywgdG8gYmUgcmVwZWF0ZWRseSBhcHBsaWVkIGlu
IG90aGVyIFVuZGVyc2NvcmUKKyAgLy8gZnVuY3Rpb25zLgorICB2YXIgb3B0aW1pemVDYiA9IGZ1
bmN0aW9uKGZ1bmMsIGNvbnRleHQsIGFyZ0NvdW50KSB7CisgICAgaWYgKGNvbnRleHQgPT09IHZv
aWQgMCkgcmV0dXJuIGZ1bmM7CisgICAgc3dpdGNoIChhcmdDb3VudCA9PSBudWxsID8gMyA6IGFy
Z0NvdW50KSB7CisgICAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbih2YWx1ZSkgeworICAgICAg
ICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlKTsKKyAgICAgIH07CisgICAgICBjYXNl
IDI6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgb3RoZXIpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmMu
Y2FsbChjb250ZXh0LCB2YWx1ZSwgb3RoZXIpOworICAgICAgfTsKKyAgICAgIGNhc2UgMzogcmV0
dXJuIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikgeworICAgICAgICByZXR1cm4g
ZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7CisgICAgICB9Owor
ICAgICAgY2FzZSA0OiByZXR1cm4gZnVuY3Rpb24oYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwg
Y29sbGVjdGlvbikgeworICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGFjY3VtdWxh
dG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pOworICAgICAgfTsKKyAgICB9CisgICAgcmV0
dXJuIGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJndW1l
bnRzKTsKKyAgICB9OworICB9OworCisgIC8vIEEgbW9zdGx5LWludGVybmFsIGZ1bmN0aW9uIHRv
IGdlbmVyYXRlIGNhbGxiYWNrcyB0aGF0IGNhbiBiZSBhcHBsaWVkCisgIC8vIHRvIGVhY2ggZWxl
bWVudCBpbiBhIGNvbGxlY3Rpb24sIHJldHVybmluZyB0aGUgZGVzaXJlZCByZXN1bHQg4oCUIGVp
dGhlcgorICAvLyBpZGVudGl0eSwgYW4gYXJiaXRyYXJ5IGNhbGxiYWNrLCBhIHByb3BlcnR5IG1h
dGNoZXIsIG9yIGEgcHJvcGVydHkgYWNjZXNzb3IuCisgIHZhciBjYiA9IGZ1bmN0aW9uKHZhbHVl
LCBjb250ZXh0LCBhcmdDb3VudCkgeworICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gXy5p
ZGVudGl0eTsKKyAgICBpZiAoXy5pc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuIG9wdGltaXplQ2Io
dmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KTsKKyAgICBpZiAoXy5pc09iamVjdCh2YWx1ZSkpIHJl
dHVybiBfLm1hdGNoZXIodmFsdWUpOworICAgIHJldHVybiBfLnByb3BlcnR5KHZhbHVlKTsKKyAg
fTsKKyAgXy5pdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0KSB7CisgICAgcmV0dXJu
IGNiKHZhbHVlLCBjb250ZXh0LCBJbmZpbml0eSk7CisgIH07CisKKyAgLy8gQW4gaW50ZXJuYWwg
ZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGFzc2lnbmVyIGZ1bmN0aW9ucy4KKyAgdmFyIGNyZWF0ZUFz
c2lnbmVyID0gZnVuY3Rpb24oa2V5c0Z1bmMsIHVuZGVmaW5lZE9ubHkpIHsKKyAgICByZXR1cm4g
ZnVuY3Rpb24ob2JqKSB7CisgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsKKyAg
ICAgIGlmIChsZW5ndGggPCAyIHx8IG9iaiA9PSBudWxsKSByZXR1cm4gb2JqOworICAgICAgZm9y
ICh2YXIgaW5kZXggPSAxOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICB2YXIg
c291cmNlID0gYXJndW1lbnRzW2luZGV4XSwKKyAgICAgICAgICAgIGtleXMgPSBrZXlzRnVuYyhz
b3VyY2UpLAorICAgICAgICAgICAgbCA9IGtleXMubGVuZ3RoOworICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGw7IGkrKykgeworICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldOworICAgICAg
ICAgIGlmICghdW5kZWZpbmVkT25seSB8fCBvYmpba2V5XSA9PT0gdm9pZCAwKSBvYmpba2V5XSA9
IHNvdXJjZVtrZXldOworICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gb2JqOworICAg
IH07CisgIH07CisKKyAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgbmV3
IG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gYW5vdGhlci4KKyAgdmFyIGJhc2VDcmVhdGUgPSBm
dW5jdGlvbihwcm90b3R5cGUpIHsKKyAgICBpZiAoIV8uaXNPYmplY3QocHJvdG90eXBlKSkgcmV0
dXJuIHt9OworICAgIGlmIChuYXRpdmVDcmVhdGUpIHJldHVybiBuYXRpdmVDcmVhdGUocHJvdG90
eXBlKTsKKyAgICBDdG9yLnByb3RvdHlwZSA9IHByb3RvdHlwZTsKKyAgICB2YXIgcmVzdWx0ID0g
bmV3IEN0b3I7CisgICAgQ3Rvci5wcm90b3R5cGUgPSBudWxsOworICAgIHJldHVybiByZXN1bHQ7
CisgIH07CisKKyAgdmFyIHByb3BlcnR5ID0gZnVuY3Rpb24oa2V5KSB7CisgICAgcmV0dXJuIGZ1
bmN0aW9uKG9iaikgeworICAgICAgcmV0dXJuIG9iaiA9PSBudWxsID8gdm9pZCAwIDogb2JqW2tl
eV07CisgICAgfTsKKyAgfTsKKworICAvLyBIZWxwZXIgZm9yIGNvbGxlY3Rpb24gbWV0aG9kcyB0
byBkZXRlcm1pbmUgd2hldGhlciBhIGNvbGxlY3Rpb24KKyAgLy8gc2hvdWxkIGJlIGl0ZXJhdGVk
IGFzIGFuIGFycmF5IG9yIGFzIGFuIG9iamVjdAorICAvLyBSZWxhdGVkOiBodHRwOi8vcGVvcGxl
Lm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy10b2xlbmd0aAorICAv
LyBBdm9pZHMgYSB2ZXJ5IG5hc3R5IGlPUyA4IEpJVCBidWcgb24gQVJNLTY0LiAjMjA5NAorICB2
YXIgTUFYX0FSUkFZX0lOREVYID0gTWF0aC5wb3coMiwgNTMpIC0gMTsKKyAgdmFyIGdldExlbmd0
aCA9IHByb3BlcnR5KCdsZW5ndGgnKTsKKyAgdmFyIGlzQXJyYXlMaWtlID0gZnVuY3Rpb24oY29s
bGVjdGlvbikgeworICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoY29sbGVjdGlvbik7CisgICAg
cmV0dXJuIHR5cGVvZiBsZW5ndGggPT0gJ251bWJlcicgJiYgbGVuZ3RoID49IDAgJiYgbGVuZ3Ro
IDw9IE1BWF9BUlJBWV9JTkRFWDsKKyAgfTsKKworICAvLyBDb2xsZWN0aW9uIEZ1bmN0aW9ucwor
ICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIC8vIFRoZSBjb3JuZXJzdG9uZSwgYW4gYGVh
Y2hgIGltcGxlbWVudGF0aW9uLCBha2EgYGZvckVhY2hgLgorICAvLyBIYW5kbGVzIHJhdyBvYmpl
Y3RzIGluIGFkZGl0aW9uIHRvIGFycmF5LWxpa2VzLiBUcmVhdHMgYWxsCisgIC8vIHNwYXJzZSBh
cnJheS1saWtlcyBhcyBpZiB0aGV5IHdlcmUgZGVuc2UuCisgIF8uZWFjaCA9IF8uZm9yRWFjaCA9
IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHsKKyAgICBpdGVyYXRlZSA9IG9wdGlt
aXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQpOworICAgIHZhciBpLCBsZW5ndGg7CisgICAgaWYgKGlz
QXJyYXlMaWtlKG9iaikpIHsKKyAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7
IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBpdGVyYXRlZShvYmpbaV0sIGksIG9iaik7Cisg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7CisgICAg
ICBmb3IgKGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgIGl0ZXJhdGVlKG9ialtrZXlzW2ldXSwga2V5c1tpXSwgb2JqKTsKKyAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIG9iajsKKyAgfTsKKworICAvLyBSZXR1cm4gdGhlIHJlc3VsdHMgb2Yg
YXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVudC4KKyAgXy5tYXAgPSBfLmNvbGxl
Y3QgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7CisgICAgaXRlcmF0ZWUgPSBj
YihpdGVyYXRlZSwgY29udGV4dCk7CisgICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAm
JiBfLmtleXMob2JqKSwKKyAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGgsCisg
ICAgICAgIHJlc3VsdHMgPSBBcnJheShsZW5ndGgpOworICAgIGZvciAodmFyIGluZGV4ID0gMDsg
aW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHsKKyAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/
IGtleXNbaW5kZXhdIDogaW5kZXg7CisgICAgICByZXN1bHRzW2luZGV4XSA9IGl0ZXJhdGVlKG9i
altjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dHM7CisgIH07CisKKyAgLy8gQ3JlYXRlIGEgcmVkdWNpbmcgZnVuY3Rpb24gaXRlcmF0aW5nIGxl
ZnQgb3IgcmlnaHQuCisgIGZ1bmN0aW9uIGNyZWF0ZVJlZHVjZShkaXIpIHsKKyAgICAvLyBPcHRp
bWl6ZWQgaXRlcmF0b3IgZnVuY3Rpb24gYXMgdXNpbmcgYXJndW1lbnRzLmxlbmd0aAorICAgIC8v
IGluIHRoZSBtYWluIGZ1bmN0aW9uIHdpbGwgZGVvcHRpbWl6ZSB0aGUsIHNlZSAjMTk5MS4KKyAg
ICBmdW5jdGlvbiBpdGVyYXRvcihvYmosIGl0ZXJhdGVlLCBtZW1vLCBrZXlzLCBpbmRleCwgbGVu
Z3RoKSB7CisgICAgICBmb3IgKDsgaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aDsgaW5kZXgg
Kz0gZGlyKSB7CisgICAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDog
aW5kZXg7CisgICAgICAgIG1lbW8gPSBpdGVyYXRlZShtZW1vLCBvYmpbY3VycmVudEtleV0sIGN1
cnJlbnRLZXksIG9iaik7CisgICAgICB9CisgICAgICByZXR1cm4gbWVtbzsKKyAgICB9CisKKyAg
ICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVtbywgY29udGV4dCkgeworICAgICAg
aXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCA0KTsKKyAgICAgIHZhciBr
ZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYgXy5rZXlzKG9iaiksCisgICAgICAgICAgbGVuZ3Ro
ID0gKGtleXMgfHwgb2JqKS5sZW5ndGgsCisgICAgICAgICAgaW5kZXggPSBkaXIgPiAwID8gMCA6
IGxlbmd0aCAtIDE7CisgICAgICAvLyBEZXRlcm1pbmUgdGhlIGluaXRpYWwgdmFsdWUgaWYgbm9u
ZSBpcyBwcm92aWRlZC4KKyAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykgeworICAgICAg
ICBtZW1vID0gb2JqW2tleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4XTsKKyAgICAgICAgaW5kZXgg
Kz0gZGlyOworICAgICAgfQorICAgICAgcmV0dXJuIGl0ZXJhdG9yKG9iaiwgaXRlcmF0ZWUsIG1l
bW8sIGtleXMsIGluZGV4LCBsZW5ndGgpOworICAgIH07CisgIH0KKworICAvLyAqKlJlZHVjZSoq
IGJ1aWxkcyB1cCBhIHNpbmdsZSByZXN1bHQgZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBha2EgYGlu
amVjdGAsCisgIC8vIG9yIGBmb2xkbGAuCisgIF8ucmVkdWNlID0gXy5mb2xkbCA9IF8uaW5qZWN0
ID0gY3JlYXRlUmVkdWNlKDEpOworCisgIC8vIFRoZSByaWdodC1hc3NvY2lhdGl2ZSB2ZXJzaW9u
IG9mIHJlZHVjZSwgYWxzbyBrbm93biBhcyBgZm9sZHJgLgorICBfLnJlZHVjZVJpZ2h0ID0gXy5m
b2xkciA9IGNyZWF0ZVJlZHVjZSgtMSk7CisKKyAgLy8gUmV0dXJuIHRoZSBmaXJzdCB2YWx1ZSB3
aGljaCBwYXNzZXMgYSB0cnV0aCB0ZXN0LiBBbGlhc2VkIGFzIGBkZXRlY3RgLgorICBfLmZpbmQg
PSBfLmRldGVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7CisgICAgdmFy
IGtleTsKKyAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSkgeworICAgICAga2V5ID0gXy5maW5kSW5k
ZXgob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpOworICAgIH0gZWxzZSB7CisgICAgICBrZXkgPSBf
LmZpbmRLZXkob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpOworICAgIH0KKyAgICBpZiAoa2V5ICE9
PSB2b2lkIDAgJiYga2V5ICE9PSAtMSkgcmV0dXJuIG9ialtrZXldOworICB9OworCisgIC8vIFJl
dHVybiBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgcGFzcyBhIHRydXRoIHRlc3QuCisgIC8vIEFsaWFz
ZWQgYXMgYHNlbGVjdGAuCisgIF8uZmlsdGVyID0gXy5zZWxlY3QgPSBmdW5jdGlvbihvYmosIHBy
ZWRpY2F0ZSwgY29udGV4dCkgeworICAgIHZhciByZXN1bHRzID0gW107CisgICAgcHJlZGljYXRl
ID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTsKKyAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1
ZSwgaW5kZXgsIGxpc3QpIHsKKyAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBsaXN0
KSkgcmVzdWx0cy5wdXNoKHZhbHVlKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0czsKKyAg
fTsKKworICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBmb3Igd2hpY2ggYSB0cnV0aCB0ZXN0
IGZhaWxzLgorICBfLnJlamVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7
CisgICAgcmV0dXJuIF8uZmlsdGVyKG9iaiwgXy5uZWdhdGUoY2IocHJlZGljYXRlKSksIGNvbnRl
eHQpOworICB9OworCisgIC8vIERldGVybWluZSB3aGV0aGVyIGFsbCBvZiB0aGUgZWxlbWVudHMg
bWF0Y2ggYSB0cnV0aCB0ZXN0LgorICAvLyBBbGlhc2VkIGFzIGBhbGxgLgorICBfLmV2ZXJ5ID0g
Xy5hbGwgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkgeworICAgIHByZWRpY2F0
ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7CisgICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uo
b2JqKSAmJiBfLmtleXMob2JqKSwKKyAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5n
dGg7CisgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgewor
ICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDsKKyAgICAg
IGlmICghcHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfTsKKworICAvLyBEZXRlcm1pbmUg
aWYgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaW4gdGhlIG9iamVjdCBtYXRjaGVzIGEgdHJ1dGggdGVz
dC4KKyAgLy8gQWxpYXNlZCBhcyBgYW55YC4KKyAgXy5zb21lID0gXy5hbnkgPSBmdW5jdGlvbihv
YmosIHByZWRpY2F0ZSwgY29udGV4dCkgeworICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwg
Y29udGV4dCk7CisgICAgdmFyIGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2Jq
KSwKKyAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGg7CisgICAgZm9yICh2YXIg
aW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgeworICAgICAgdmFyIGN1cnJlbnRL
ZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDsKKyAgICAgIGlmIChwcmVkaWNhdGUob2Jq
W2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworICB9OworCisgIC8vIERldGVybWluZSBpZiB0aGUgYXJyYXkgb3Igb2Jq
ZWN0IGNvbnRhaW5zIGEgZ2l2ZW4gaXRlbSAodXNpbmcgYD09PWApLgorICAvLyBBbGlhc2VkIGFz
IGBpbmNsdWRlc2AgYW5kIGBpbmNsdWRlYC4KKyAgXy5jb250YWlucyA9IF8uaW5jbHVkZXMgPSBf
LmluY2x1ZGUgPSBmdW5jdGlvbihvYmosIGl0ZW0sIGZyb21JbmRleCwgZ3VhcmQpIHsKKyAgICBp
ZiAoIWlzQXJyYXlMaWtlKG9iaikpIG9iaiA9IF8udmFsdWVzKG9iaik7CisgICAgaWYgKHR5cGVv
ZiBmcm9tSW5kZXggIT0gJ251bWJlcicgfHwgZ3VhcmQpIGZyb21JbmRleCA9IDA7CisgICAgcmV0
dXJuIF8uaW5kZXhPZihvYmosIGl0ZW0sIGZyb21JbmRleCkgPj0gMDsKKyAgfTsKKworICAvLyBJ
bnZva2UgYSBtZXRob2QgKHdpdGggYXJndW1lbnRzKSBvbiBldmVyeSBpdGVtIGluIGEgY29sbGVj
dGlvbi4KKyAgXy5pbnZva2UgPSBmdW5jdGlvbihvYmosIG1ldGhvZCkgeworICAgIHZhciBhcmdz
ID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpOworICAgIHZhciBpc0Z1bmMgPSBfLmlzRnVuY3Rp
b24obWV0aG9kKTsKKyAgICByZXR1cm4gXy5tYXAob2JqLCBmdW5jdGlvbih2YWx1ZSkgeworICAg
ICAgdmFyIGZ1bmMgPSBpc0Z1bmMgPyBtZXRob2QgOiB2YWx1ZVttZXRob2RdOworICAgICAgcmV0
dXJuIGZ1bmMgPT0gbnVsbCA/IGZ1bmMgOiBmdW5jLmFwcGx5KHZhbHVlLCBhcmdzKTsKKyAgICB9
KTsKKyAgfTsKKworICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNl
IG9mIGBtYXBgOiBmZXRjaGluZyBhIHByb3BlcnR5LgorICBfLnBsdWNrID0gZnVuY3Rpb24ob2Jq
LCBrZXkpIHsKKyAgICByZXR1cm4gXy5tYXAob2JqLCBfLnByb3BlcnR5KGtleSkpOworICB9Owor
CisgIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbHRl
cmA6IHNlbGVjdGluZyBvbmx5IG9iamVjdHMKKyAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5
OnZhbHVlYCBwYWlycy4KKyAgXy53aGVyZSA9IGZ1bmN0aW9uKG9iaiwgYXR0cnMpIHsKKyAgICBy
ZXR1cm4gXy5maWx0ZXIob2JqLCBfLm1hdGNoZXIoYXR0cnMpKTsKKyAgfTsKKworICAvLyBDb252
ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBmaW5kYDogZ2V0dGluZyB0
aGUgZmlyc3Qgb2JqZWN0CisgIC8vIGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFp
cnMuCisgIF8uZmluZFdoZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykgeworICAgIHJldHVybiBf
LmZpbmQob2JqLCBfLm1hdGNoZXIoYXR0cnMpKTsKKyAgfTsKKworICAvLyBSZXR1cm4gdGhlIG1h
eGltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuCisgIF8ubWF4ID0g
ZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkgeworICAgIHZhciByZXN1bHQgPSAtSW5m
aW5pdHksIGxhc3RDb21wdXRlZCA9IC1JbmZpbml0eSwKKyAgICAgICAgdmFsdWUsIGNvbXB1dGVk
OworICAgIGlmIChpdGVyYXRlZSA9PSBudWxsICYmIG9iaiAhPSBudWxsKSB7CisgICAgICBvYmog
PSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogXy52YWx1ZXMob2JqKTsKKyAgICAgIGZvciAodmFy
IGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
dmFsdWUgPSBvYmpbaV07CisgICAgICAgIGlmICh2YWx1ZSA+IHJlc3VsdCkgeworICAgICAgICAg
IHJlc3VsdCA9IHZhbHVlOworICAgICAgICB9CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
IGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpOworICAgICAgXy5lYWNoKG9iaiwgZnVu
Y3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7CisgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUo
dmFsdWUsIGluZGV4LCBsaXN0KTsKKyAgICAgICAgaWYgKGNvbXB1dGVkID4gbGFzdENvbXB1dGVk
IHx8IGNvbXB1dGVkID09PSAtSW5maW5pdHkgJiYgcmVzdWx0ID09PSAtSW5maW5pdHkpIHsKKyAg
ICAgICAgICByZXN1bHQgPSB2YWx1ZTsKKyAgICAgICAgICBsYXN0Q29tcHV0ZWQgPSBjb21wdXRl
ZDsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisgIH07
CisKKyAgLy8gUmV0dXJuIHRoZSBtaW5pbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQgY29t
cHV0YXRpb24pLgorICBfLm1pbiA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHsK
KyAgICB2YXIgcmVzdWx0ID0gSW5maW5pdHksIGxhc3RDb21wdXRlZCA9IEluZmluaXR5LAorICAg
ICAgICB2YWx1ZSwgY29tcHV0ZWQ7CisgICAgaWYgKGl0ZXJhdGVlID09IG51bGwgJiYgb2JqICE9
IG51bGwpIHsKKyAgICAgIG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhv
YmopOworICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5n
dGg7IGkrKykgeworICAgICAgICB2YWx1ZSA9IG9ialtpXTsKKyAgICAgICAgaWYgKHZhbHVlIDwg
cmVzdWx0KSB7CisgICAgICAgICAgcmVzdWx0ID0gdmFsdWU7CisgICAgICAgIH0KKyAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7Cisg
ICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHsKKyAgICAgICAg
Y29tcHV0ZWQgPSBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGxpc3QpOworICAgICAgICBpZiAoY29t
cHV0ZWQgPCBsYXN0Q29tcHV0ZWQgfHwgY29tcHV0ZWQgPT09IEluZmluaXR5ICYmIHJlc3VsdCA9
PT0gSW5maW5pdHkpIHsKKyAgICAgICAgICByZXN1bHQgPSB2YWx1ZTsKKyAgICAgICAgICBsYXN0
Q29tcHV0ZWQgPSBjb21wdXRlZDsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQ7CisgIH07CisKKyAgLy8gU2h1ZmZsZSBhIGNvbGxlY3Rpb24sIHVzaW5nIHRo
ZSBtb2Rlcm4gdmVyc2lvbiBvZiB0aGUKKyAgLy8gW0Zpc2hlci1ZYXRlcyBzaHVmZmxlXShodHRw
Oi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zpc2hlcuKAk1lhdGVzX3NodWZmbGUpLgorICBfLnNo
dWZmbGUgPSBmdW5jdGlvbihvYmopIHsKKyAgICB2YXIgc2V0ID0gaXNBcnJheUxpa2Uob2JqKSA/
IG9iaiA6IF8udmFsdWVzKG9iaik7CisgICAgdmFyIGxlbmd0aCA9IHNldC5sZW5ndGg7CisgICAg
dmFyIHNodWZmbGVkID0gQXJyYXkobGVuZ3RoKTsKKyAgICBmb3IgKHZhciBpbmRleCA9IDAsIHJh
bmQ7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICByYW5kID0gXy5yYW5kb20oMCwg
aW5kZXgpOworICAgICAgaWYgKHJhbmQgIT09IGluZGV4KSBzaHVmZmxlZFtpbmRleF0gPSBzaHVm
ZmxlZFtyYW5kXTsKKyAgICAgIHNodWZmbGVkW3JhbmRdID0gc2V0W2luZGV4XTsKKyAgICB9Cisg
ICAgcmV0dXJuIHNodWZmbGVkOworICB9OworCisgIC8vIFNhbXBsZSAqKm4qKiByYW5kb20gdmFs
dWVzIGZyb20gYSBjb2xsZWN0aW9uLgorICAvLyBJZiAqKm4qKiBpcyBub3Qgc3BlY2lmaWVkLCBy
ZXR1cm5zIGEgc2luZ2xlIHJhbmRvbSBlbGVtZW50LgorICAvLyBUaGUgaW50ZXJuYWwgYGd1YXJk
YCBhcmd1bWVudCBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBtYXBgLgorICBfLnNhbXBsZSA9IGZ1
bmN0aW9uKG9iaiwgbiwgZ3VhcmQpIHsKKyAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSB7Cisg
ICAgICBpZiAoIWlzQXJyYXlMaWtlKG9iaikpIG9iaiA9IF8udmFsdWVzKG9iaik7CisgICAgICBy
ZXR1cm4gb2JqW18ucmFuZG9tKG9iai5sZW5ndGggLSAxKV07CisgICAgfQorICAgIHJldHVybiBf
LnNodWZmbGUob2JqKS5zbGljZSgwLCBNYXRoLm1heCgwLCBuKSk7CisgIH07CisKKyAgLy8gU29y
dCB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uIHByb2R1Y2VkIGJ5IGFuIGl0ZXJh
dGVlLgorICBfLnNvcnRCeSA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHsKKyAg
ICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTsKKyAgICByZXR1cm4gXy5wbHVjayhf
Lm1hcChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkgeworICAgICAgcmV0dXJuIHsK
KyAgICAgICAgdmFsdWU6IHZhbHVlLAorICAgICAgICBpbmRleDogaW5kZXgsCisgICAgICAgIGNy
aXRlcmlhOiBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGxpc3QpCisgICAgICB9OworICAgIH0pLnNv
cnQoZnVuY3Rpb24obGVmdCwgcmlnaHQpIHsKKyAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYTsK
KyAgICAgIHZhciBiID0gcmlnaHQuY3JpdGVyaWE7CisgICAgICBpZiAoYSAhPT0gYikgeworICAg
ICAgICBpZiAoYSA+IGIgfHwgYSA9PT0gdm9pZCAwKSByZXR1cm4gMTsKKyAgICAgICAgaWYgKGEg
PCBiIHx8IGIgPT09IHZvaWQgMCkgcmV0dXJuIC0xOworICAgICAgfQorICAgICAgcmV0dXJuIGxl
ZnQuaW5kZXggLSByaWdodC5pbmRleDsKKyAgICB9KSwgJ3ZhbHVlJyk7CisgIH07CisKKyAgLy8g
QW4gaW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBmb3IgYWdncmVnYXRlICJncm91cCBieSIgb3BlcmF0
aW9ucy4KKyAgdmFyIGdyb3VwID0gZnVuY3Rpb24oYmVoYXZpb3IpIHsKKyAgICByZXR1cm4gZnVu
Y3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkgeworICAgICAgdmFyIHJlc3VsdCA9IHt9Owor
ICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7CisgICAgICBfLmVhY2gob2Jq
LCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKKyAgICAgICAgdmFyIGtleSA9IGl0ZXJhdGVlKHZh
bHVlLCBpbmRleCwgb2JqKTsKKyAgICAgICAgYmVoYXZpb3IocmVzdWx0LCB2YWx1ZSwga2V5KTsK
KyAgICAgIH0pOworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICB9OworCisgIC8vIEdy
b3VwcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLiBQYXNzIGVpdGhlciBhIHN0
cmluZyBhdHRyaWJ1dGUKKyAgLy8gdG8gZ3JvdXAgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1
cm5zIHRoZSBjcml0ZXJpb24uCisgIF8uZ3JvdXBCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwg
dmFsdWUsIGtleSkgeworICAgIGlmIChfLmhhcyhyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldLnB1
c2godmFsdWUpOyBlbHNlIHJlc3VsdFtrZXldID0gW3ZhbHVlXTsKKyAgfSk7CisKKyAgLy8gSW5k
ZXhlcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLCBzaW1pbGFyIHRvIGBncm91
cEJ5YCwgYnV0IGZvcgorICAvLyB3aGVuIHlvdSBrbm93IHRoYXQgeW91ciBpbmRleCB2YWx1ZXMg
d2lsbCBiZSB1bmlxdWUuCisgIF8uaW5kZXhCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFs
dWUsIGtleSkgeworICAgIHJlc3VsdFtrZXldID0gdmFsdWU7CisgIH0pOworCisgIC8vIENvdW50
cyBpbnN0YW5jZXMgb2YgYW4gb2JqZWN0IHRoYXQgZ3JvdXAgYnkgYSBjZXJ0YWluIGNyaXRlcmlv
bi4gUGFzcworICAvLyBlaXRoZXIgYSBzdHJpbmcgYXR0cmlidXRlIHRvIGNvdW50IGJ5LCBvciBh
IGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUKKyAgLy8gY3JpdGVyaW9uLgorICBfLmNvdW50Qnkg
PSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHsKKyAgICBpZiAoXy5oYXMocmVz
dWx0LCBrZXkpKSByZXN1bHRba2V5XSsrOyBlbHNlIHJlc3VsdFtrZXldID0gMTsKKyAgfSk7CisK
KyAgLy8gU2FmZWx5IGNyZWF0ZSBhIHJlYWwsIGxpdmUgYXJyYXkgZnJvbSBhbnl0aGluZyBpdGVy
YWJsZS4KKyAgXy50b0FycmF5ID0gZnVuY3Rpb24ob2JqKSB7CisgICAgaWYgKCFvYmopIHJldHVy
biBbXTsKKyAgICBpZiAoXy5pc0FycmF5KG9iaikpIHJldHVybiBzbGljZS5jYWxsKG9iaik7Cisg
ICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHJldHVybiBfLm1hcChvYmosIF8uaWRlbnRpdHkpOwor
ICAgIHJldHVybiBfLnZhbHVlcyhvYmopOworICB9OworCisgIC8vIFJldHVybiB0aGUgbnVtYmVy
IG9mIGVsZW1lbnRzIGluIGFuIG9iamVjdC4KKyAgXy5zaXplID0gZnVuY3Rpb24ob2JqKSB7Cisg
ICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gMDsKKyAgICByZXR1cm4gaXNBcnJheUxpa2Uob2Jq
KSA/IG9iai5sZW5ndGggOiBfLmtleXMob2JqKS5sZW5ndGg7CisgIH07CisKKyAgLy8gU3BsaXQg
YSBjb2xsZWN0aW9uIGludG8gdHdvIGFycmF5czogb25lIHdob3NlIGVsZW1lbnRzIGFsbCBzYXRp
c2Z5IHRoZSBnaXZlbgorICAvLyBwcmVkaWNhdGUsIGFuZCBvbmUgd2hvc2UgZWxlbWVudHMgYWxs
IGRvIG5vdCBzYXRpc2Z5IHRoZSBwcmVkaWNhdGUuCisgIF8ucGFydGl0aW9uID0gZnVuY3Rpb24o
b2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHsKKyAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUs
IGNvbnRleHQpOworICAgIHZhciBwYXNzID0gW10sIGZhaWwgPSBbXTsKKyAgICBfLmVhY2gob2Jq
LCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmopIHsKKyAgICAgIChwcmVkaWNhdGUodmFsdWUsIGtl
eSwgb2JqKSA/IHBhc3MgOiBmYWlsKS5wdXNoKHZhbHVlKTsKKyAgICB9KTsKKyAgICByZXR1cm4g
W3Bhc3MsIGZhaWxdOworICB9OworCisgIC8vIEFycmF5IEZ1bmN0aW9ucworICAvLyAtLS0tLS0t
LS0tLS0tLS0KKworICAvLyBHZXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3Np
bmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGZpcnN0IE4KKyAgLy8gdmFsdWVzIGluIHRoZSBhcnJh
eS4gQWxpYXNlZCBhcyBgaGVhZGAgYW5kIGB0YWtlYC4gVGhlICoqZ3VhcmQqKiBjaGVjaworICAv
LyBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBfLm1hcGAuCisgIF8uZmlyc3QgPSBfLmhlYWQgPSBf
LnRha2UgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHsKKyAgICBpZiAoYXJyYXkgPT0gbnVs
bCkgcmV0dXJuIHZvaWQgMDsKKyAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJy
YXlbMF07CisgICAgcmV0dXJuIF8uaW5pdGlhbChhcnJheSwgYXJyYXkubGVuZ3RoIC0gbik7Cisg
IH07CisKKyAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgbGFzdCBlbnRyeSBvZiB0aGUg
YXJyYXkuIEVzcGVjaWFsbHkgdXNlZnVsIG9uCisgIC8vIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBQ
YXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIGFsbCB0aGUgdmFsdWVzIGluCisgIC8vIHRoZSBhcnJh
eSwgZXhjbHVkaW5nIHRoZSBsYXN0IE4uCisgIF8uaW5pdGlhbCA9IGZ1bmN0aW9uKGFycmF5LCBu
LCBndWFyZCkgeworICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCAwLCBNYXRoLm1heCgwLCBh
cnJheS5sZW5ndGggLSAobiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pKSk7CisgIH07CisKKyAg
Ly8gR2V0IHRoZSBsYXN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCBy
ZXR1cm4gdGhlIGxhc3QgTgorICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5LgorICBfLmxhc3QgPSBm
dW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHsKKyAgICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJu
IHZvaWQgMDsKKyAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbYXJyYXku
bGVuZ3RoIC0gMV07CisgICAgcmV0dXJuIF8ucmVzdChhcnJheSwgTWF0aC5tYXgoMCwgYXJyYXku
bGVuZ3RoIC0gbikpOworICB9OworCisgIC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGZp
cnN0IGVudHJ5IG9mIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgdGFpbGAgYW5kIGBkcm9wYC4KKyAg
Ly8gRXNwZWNpYWxseSB1c2VmdWwgb24gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgYW4g
KipuKiogd2lsbCByZXR1cm4KKyAgLy8gdGhlIHJlc3QgTiB2YWx1ZXMgaW4gdGhlIGFycmF5Lgor
ICBfLnJlc3QgPSBfLnRhaWwgPSBfLmRyb3AgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHsK
KyAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgbiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4p
OworICB9OworCisgIC8vIFRyaW0gb3V0IGFsbCBmYWxzeSB2YWx1ZXMgZnJvbSBhbiBhcnJheS4K
KyAgXy5jb21wYWN0ID0gZnVuY3Rpb24oYXJyYXkpIHsKKyAgICByZXR1cm4gXy5maWx0ZXIoYXJy
YXksIF8uaWRlbnRpdHkpOworICB9OworCisgIC8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9m
IGEgcmVjdXJzaXZlIGBmbGF0dGVuYCBmdW5jdGlvbi4KKyAgdmFyIGZsYXR0ZW4gPSBmdW5jdGlv
bihpbnB1dCwgc2hhbGxvdywgc3RyaWN0LCBzdGFydEluZGV4KSB7CisgICAgdmFyIG91dHB1dCA9
IFtdLCBpZHggPSAwOworICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4IHx8IDAsIGxlbmd0aCA9
IGdldExlbmd0aChpbnB1dCk7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgdmFyIHZhbHVlID0g
aW5wdXRbaV07CisgICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmIChfLmlzQXJyYXkodmFs
dWUpIHx8IF8uaXNBcmd1bWVudHModmFsdWUpKSkgeworICAgICAgICAvL2ZsYXR0ZW4gY3VycmVu
dCBsZXZlbCBvZiBhcnJheSBvciBhcmd1bWVudHMgb2JqZWN0CisgICAgICAgIGlmICghc2hhbGxv
dykgdmFsdWUgPSBmbGF0dGVuKHZhbHVlLCBzaGFsbG93LCBzdHJpY3QpOworICAgICAgICB2YXIg
aiA9IDAsIGxlbiA9IHZhbHVlLmxlbmd0aDsKKyAgICAgICAgb3V0cHV0Lmxlbmd0aCArPSBsZW47
CisgICAgICAgIHdoaWxlIChqIDwgbGVuKSB7CisgICAgICAgICAgb3V0cHV0W2lkeCsrXSA9IHZh
bHVlW2orK107CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCkgeworICAgICAg
ICBvdXRwdXRbaWR4KytdID0gdmFsdWU7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBvdXRw
dXQ7CisgIH07CisKKyAgLy8gRmxhdHRlbiBvdXQgYW4gYXJyYXksIGVpdGhlciByZWN1cnNpdmVs
eSAoYnkgZGVmYXVsdCksIG9yIGp1c3Qgb25lIGxldmVsLgorICBfLmZsYXR0ZW4gPSBmdW5jdGlv
bihhcnJheSwgc2hhbGxvdykgeworICAgIHJldHVybiBmbGF0dGVuKGFycmF5LCBzaGFsbG93LCBm
YWxzZSk7CisgIH07CisKKyAgLy8gUmV0dXJuIGEgdmVyc2lvbiBvZiB0aGUgYXJyYXkgdGhhdCBk
b2VzIG5vdCBjb250YWluIHRoZSBzcGVjaWZpZWQgdmFsdWUocykuCisgIF8ud2l0aG91dCA9IGZ1
bmN0aW9uKGFycmF5KSB7CisgICAgcmV0dXJuIF8uZGlmZmVyZW5jZShhcnJheSwgc2xpY2UuY2Fs
bChhcmd1bWVudHMsIDEpKTsKKyAgfTsKKworICAvLyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUg
dmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRoZSBhcnJheSBoYXMgYWxyZWFkeQorICAvLyBiZWVu
IHNvcnRlZCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiB1c2luZyBhIGZhc3RlciBhbGdvcml0aG0u
CisgIC8vIEFsaWFzZWQgYXMgYHVuaXF1ZWAuCisgIF8udW5pcSA9IF8udW5pcXVlID0gZnVuY3Rp
b24oYXJyYXksIGlzU29ydGVkLCBpdGVyYXRlZSwgY29udGV4dCkgeworICAgIGlmICghXy5pc0Jv
b2xlYW4oaXNTb3J0ZWQpKSB7CisgICAgICBjb250ZXh0ID0gaXRlcmF0ZWU7CisgICAgICBpdGVy
YXRlZSA9IGlzU29ydGVkOworICAgICAgaXNTb3J0ZWQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYg
KGl0ZXJhdGVlICE9IG51bGwpIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpOworICAg
IHZhciByZXN1bHQgPSBbXTsKKyAgICB2YXIgc2VlbiA9IFtdOworICAgIGZvciAodmFyIGkgPSAw
LCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgIHZh
ciB2YWx1ZSA9IGFycmF5W2ldLAorICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVy
YXRlZSh2YWx1ZSwgaSwgYXJyYXkpIDogdmFsdWU7CisgICAgICBpZiAoaXNTb3J0ZWQpIHsKKyAg
ICAgICAgaWYgKCFpIHx8IHNlZW4gIT09IGNvbXB1dGVkKSByZXN1bHQucHVzaCh2YWx1ZSk7Cisg
ICAgICAgIHNlZW4gPSBjb21wdXRlZDsKKyAgICAgIH0gZWxzZSBpZiAoaXRlcmF0ZWUpIHsKKyAg
ICAgICAgaWYgKCFfLmNvbnRhaW5zKHNlZW4sIGNvbXB1dGVkKSkgeworICAgICAgICAgIHNlZW4u
cHVzaChjb21wdXRlZCk7CisgICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpOworICAgICAgICB9
CisgICAgICB9IGVsc2UgaWYgKCFfLmNvbnRhaW5zKHJlc3VsdCwgdmFsdWUpKSB7CisgICAgICAg
IHJlc3VsdC5wdXNoKHZhbHVlKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsK
KyAgfTsKKworICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgdGhlIHVuaW9uOiBl
YWNoIGRpc3RpbmN0IGVsZW1lbnQgZnJvbSBhbGwgb2YKKyAgLy8gdGhlIHBhc3NlZC1pbiBhcnJh
eXMuCisgIF8udW5pb24gPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gXy51bmlxKGZsYXR0ZW4o
YXJndW1lbnRzLCB0cnVlLCB0cnVlKSk7CisgIH07CisKKyAgLy8gUHJvZHVjZSBhbiBhcnJheSB0
aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hhcmVkIGJldHdlZW4gYWxsIHRoZQorICAvLyBwYXNz
ZWQtaW4gYXJyYXlzLgorICBfLmludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGFycmF5KSB7CisgICAg
dmFyIHJlc3VsdCA9IFtdOworICAgIHZhciBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsK
KyAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0
aDsgaSsrKSB7CisgICAgICB2YXIgaXRlbSA9IGFycmF5W2ldOworICAgICAgaWYgKF8uY29udGFp
bnMocmVzdWx0LCBpdGVtKSkgY29udGludWU7CisgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IGFy
Z3NMZW5ndGg7IGorKykgeworICAgICAgICBpZiAoIV8uY29udGFpbnMoYXJndW1lbnRzW2pdLCBp
dGVtKSkgYnJlYWs7CisgICAgICB9CisgICAgICBpZiAoaiA9PT0gYXJnc0xlbmd0aCkgcmVzdWx0
LnB1c2goaXRlbSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisgIH07CisKKyAgLy8gVGFr
ZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG9uZSBhcnJheSBhbmQgYSBudW1iZXIgb2Ygb3RoZXIg
YXJyYXlzLgorICAvLyBPbmx5IHRoZSBlbGVtZW50cyBwcmVzZW50IGluIGp1c3QgdGhlIGZpcnN0
IGFycmF5IHdpbGwgcmVtYWluLgorICBfLmRpZmZlcmVuY2UgPSBmdW5jdGlvbihhcnJheSkgewor
ICAgIHZhciByZXN0ID0gZmxhdHRlbihhcmd1bWVudHMsIHRydWUsIHRydWUsIDEpOworICAgIHJl
dHVybiBfLmZpbHRlcihhcnJheSwgZnVuY3Rpb24odmFsdWUpeworICAgICAgcmV0dXJuICFfLmNv
bnRhaW5zKHJlc3QsIHZhbHVlKTsKKyAgICB9KTsKKyAgfTsKKworICAvLyBaaXAgdG9nZXRoZXIg
bXVsdGlwbGUgbGlzdHMgaW50byBhIHNpbmdsZSBhcnJheSAtLSBlbGVtZW50cyB0aGF0IHNoYXJl
CisgIC8vIGFuIGluZGV4IGdvIHRvZ2V0aGVyLgorICBfLnppcCA9IGZ1bmN0aW9uKCkgeworICAg
IHJldHVybiBfLnVuemlwKGFyZ3VtZW50cyk7CisgIH07CisKKyAgLy8gQ29tcGxlbWVudCBvZiBf
LnppcC4gVW56aXAgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgYW5kIGdyb3VwcworICAvLyBl
YWNoIGFycmF5J3MgZWxlbWVudHMgb24gc2hhcmVkIGluZGljZXMKKyAgXy51bnppcCA9IGZ1bmN0
aW9uKGFycmF5KSB7CisgICAgdmFyIGxlbmd0aCA9IGFycmF5ICYmIF8ubWF4KGFycmF5LCBnZXRM
ZW5ndGgpLmxlbmd0aCB8fCAwOworICAgIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpOworCisg
ICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgeworICAgICAg
cmVzdWx0W2luZGV4XSA9IF8ucGx1Y2soYXJyYXksIGluZGV4KTsKKyAgICB9CisgICAgcmV0dXJu
IHJlc3VsdDsKKyAgfTsKKworICAvLyBDb252ZXJ0cyBsaXN0cyBpbnRvIG9iamVjdHMuIFBhc3Mg
ZWl0aGVyIGEgc2luZ2xlIGFycmF5IG9mIGBba2V5LCB2YWx1ZV1gCisgIC8vIHBhaXJzLCBvciB0
d28gcGFyYWxsZWwgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCAtLSBvbmUgb2Yga2V5cywgYW5k
IG9uZSBvZgorICAvLyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuCisgIF8ub2JqZWN0ID0gZnVu
Y3Rpb24obGlzdCwgdmFsdWVzKSB7CisgICAgdmFyIHJlc3VsdCA9IHt9OworICAgIGZvciAodmFy
IGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgobGlzdCk7IGkgPCBsZW5ndGg7IGkrKykgeworICAg
ICAgaWYgKHZhbHVlcykgeworICAgICAgICByZXN1bHRbbGlzdFtpXV0gPSB2YWx1ZXNbaV07Cisg
ICAgICB9IGVsc2UgeworICAgICAgICByZXN1bHRbbGlzdFtpXVswXV0gPSBsaXN0W2ldWzFdOwor
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworICB9OworCisgIC8vIEdlbmVyYXRv
ciBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGZpbmRJbmRleCBhbmQgZmluZExhc3RJbmRleCBmdW5j
dGlvbnMKKyAgZnVuY3Rpb24gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoZGlyKSB7CisgICAg
cmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBwcmVkaWNhdGUsIGNvbnRleHQpIHsKKyAgICAgIHByZWRp
Y2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7CisgICAgICB2YXIgbGVuZ3RoID0gZ2V0TGVu
Z3RoKGFycmF5KTsKKyAgICAgIHZhciBpbmRleCA9IGRpciA+IDAgPyAwIDogbGVuZ3RoIC0gMTsK
KyAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIp
IHsKKyAgICAgICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHJl
dHVybiBpbmRleDsKKyAgICAgIH0KKyAgICAgIHJldHVybiAtMTsKKyAgICB9OworICB9CisKKyAg
Ly8gUmV0dXJucyB0aGUgZmlyc3QgaW5kZXggb24gYW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBh
IHByZWRpY2F0ZSB0ZXN0CisgIF8uZmluZEluZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5k
ZXIoMSk7CisgIF8uZmluZExhc3RJbmRleCA9IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKC0x
KTsKKworICAvLyBVc2UgYSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRvIGZpZ3VyZSBvdXQgdGhlIHNt
YWxsZXN0IGluZGV4IGF0IHdoaWNoCisgIC8vIGFuIG9iamVjdCBzaG91bGQgYmUgaW5zZXJ0ZWQg
c28gYXMgdG8gbWFpbnRhaW4gb3JkZXIuIFVzZXMgYmluYXJ5IHNlYXJjaC4KKyAgXy5zb3J0ZWRJ
bmRleCA9IGZ1bmN0aW9uKGFycmF5LCBvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7CisgICAgaXRl
cmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCwgMSk7CisgICAgdmFyIHZhbHVlID0gaXRlcmF0
ZWUob2JqKTsKKyAgICB2YXIgbG93ID0gMCwgaGlnaCA9IGdldExlbmd0aChhcnJheSk7CisgICAg
d2hpbGUgKGxvdyA8IGhpZ2gpIHsKKyAgICAgIHZhciBtaWQgPSBNYXRoLmZsb29yKChsb3cgKyBo
aWdoKSAvIDIpOworICAgICAgaWYgKGl0ZXJhdGVlKGFycmF5W21pZF0pIDwgdmFsdWUpIGxvdyA9
IG1pZCArIDE7IGVsc2UgaGlnaCA9IG1pZDsKKyAgICB9CisgICAgcmV0dXJuIGxvdzsKKyAgfTsK
KworICAvLyBHZW5lcmF0b3IgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBpbmRleE9mIGFuZCBsYXN0
SW5kZXhPZiBmdW5jdGlvbnMKKyAgZnVuY3Rpb24gY3JlYXRlSW5kZXhGaW5kZXIoZGlyLCBwcmVk
aWNhdGVGaW5kLCBzb3J0ZWRJbmRleCkgeworICAgIHJldHVybiBmdW5jdGlvbihhcnJheSwgaXRl
bSwgaWR4KSB7CisgICAgICB2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7Cisg
ICAgICBpZiAodHlwZW9mIGlkeCA9PSAnbnVtYmVyJykgeworICAgICAgICBpZiAoZGlyID4gMCkg
eworICAgICAgICAgICAgaSA9IGlkeCA+PSAwID8gaWR4IDogTWF0aC5tYXgoaWR4ICsgbGVuZ3Ro
LCBpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IGlkeCA+PSAwID8g
TWF0aC5taW4oaWR4ICsgMSwgbGVuZ3RoKSA6IGlkeCArIGxlbmd0aCArIDE7CisgICAgICAgIH0K
KyAgICAgIH0gZWxzZSBpZiAoc29ydGVkSW5kZXggJiYgaWR4ICYmIGxlbmd0aCkgeworICAgICAg
ICBpZHggPSBzb3J0ZWRJbmRleChhcnJheSwgaXRlbSk7CisgICAgICAgIHJldHVybiBhcnJheVtp
ZHhdID09PSBpdGVtID8gaWR4IDogLTE7CisgICAgICB9CisgICAgICBpZiAoaXRlbSAhPT0gaXRl
bSkgeworICAgICAgICBpZHggPSBwcmVkaWNhdGVGaW5kKHNsaWNlLmNhbGwoYXJyYXksIGksIGxl
bmd0aCksIF8uaXNOYU4pOworICAgICAgICByZXR1cm4gaWR4ID49IDAgPyBpZHggKyBpIDogLTE7
CisgICAgICB9CisgICAgICBmb3IgKGlkeCA9IGRpciA+IDAgPyBpIDogbGVuZ3RoIC0gMTsgaWR4
ID49IDAgJiYgaWR4IDwgbGVuZ3RoOyBpZHggKz0gZGlyKSB7CisgICAgICAgIGlmIChhcnJheVtp
ZHhdID09PSBpdGVtKSByZXR1cm4gaWR4OworICAgICAgfQorICAgICAgcmV0dXJuIC0xOworICAg
IH07CisgIH0KKworICAvLyBSZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBvY2N1cnJl
bmNlIG9mIGFuIGl0ZW0gaW4gYW4gYXJyYXksCisgIC8vIG9yIC0xIGlmIHRoZSBpdGVtIGlzIG5v
dCBpbmNsdWRlZCBpbiB0aGUgYXJyYXkuCisgIC8vIElmIHRoZSBhcnJheSBpcyBsYXJnZSBhbmQg
YWxyZWFkeSBpbiBzb3J0IG9yZGVyLCBwYXNzIGB0cnVlYAorICAvLyBmb3IgKippc1NvcnRlZCoq
IHRvIHVzZSBiaW5hcnkgc2VhcmNoLgorICBfLmluZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigx
LCBfLmZpbmRJbmRleCwgXy5zb3J0ZWRJbmRleCk7CisgIF8ubGFzdEluZGV4T2YgPSBjcmVhdGVJ
bmRleEZpbmRlcigtMSwgXy5maW5kTGFzdEluZGV4KTsKKworICAvLyBHZW5lcmF0ZSBhbiBpbnRl
Z2VyIEFycmF5IGNvbnRhaW5pbmcgYW4gYXJpdGhtZXRpYyBwcm9ncmVzc2lvbi4gQSBwb3J0IG9m
CisgIC8vIHRoZSBuYXRpdmUgUHl0aG9uIGByYW5nZSgpYCBmdW5jdGlvbi4gU2VlCisgIC8vIFt0
aGUgUHl0aG9uIGRvY3VtZW50YXRpb25dKGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS9m
dW5jdGlvbnMuaHRtbCNyYW5nZSkuCisgIF8ucmFuZ2UgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwg
c3RlcCkgeworICAgIGlmIChzdG9wID09IG51bGwpIHsKKyAgICAgIHN0b3AgPSBzdGFydCB8fCAw
OworICAgICAgc3RhcnQgPSAwOworICAgIH0KKyAgICBzdGVwID0gc3RlcCB8fCAxOworCisgICAg
dmFyIGxlbmd0aCA9IE1hdGgubWF4KE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApLCAw
KTsKKyAgICB2YXIgcmFuZ2UgPSBBcnJheShsZW5ndGgpOworCisgICAgZm9yICh2YXIgaWR4ID0g
MDsgaWR4IDwgbGVuZ3RoOyBpZHgrKywgc3RhcnQgKz0gc3RlcCkgeworICAgICAgcmFuZ2VbaWR4
XSA9IHN0YXJ0OworICAgIH0KKworICAgIHJldHVybiByYW5nZTsKKyAgfTsKKworICAvLyBGdW5j
dGlvbiAoYWhlbSkgRnVuY3Rpb25zCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgIC8vIERl
dGVybWluZXMgd2hldGhlciB0byBleGVjdXRlIGEgZnVuY3Rpb24gYXMgYSBjb25zdHJ1Y3Rvcgor
ICAvLyBvciBhIG5vcm1hbCBmdW5jdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBhcmd1bWVudHMKKyAg
dmFyIGV4ZWN1dGVCb3VuZCA9IGZ1bmN0aW9uKHNvdXJjZUZ1bmMsIGJvdW5kRnVuYywgY29udGV4
dCwgY2FsbGluZ0NvbnRleHQsIGFyZ3MpIHsKKyAgICBpZiAoIShjYWxsaW5nQ29udGV4dCBpbnN0
YW5jZW9mIGJvdW5kRnVuYykpIHJldHVybiBzb3VyY2VGdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3Mp
OworICAgIHZhciBzZWxmID0gYmFzZUNyZWF0ZShzb3VyY2VGdW5jLnByb3RvdHlwZSk7CisgICAg
dmFyIHJlc3VsdCA9IHNvdXJjZUZ1bmMuYXBwbHkoc2VsZiwgYXJncyk7CisgICAgaWYgKF8uaXNP
YmplY3QocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gc2VsZjsKKyAgfTsKKwor
ICAvLyBDcmVhdGUgYSBmdW5jdGlvbiBib3VuZCB0byBhIGdpdmVuIG9iamVjdCAoYXNzaWduaW5n
IGB0aGlzYCwgYW5kIGFyZ3VtZW50cywKKyAgLy8gb3B0aW9uYWxseSkuIERlbGVnYXRlcyB0byAq
KkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBGdW5jdGlvbi5iaW5kYCBpZgorICAvLyBhdmFpbGFi
bGUuCisgIF8uYmluZCA9IGZ1bmN0aW9uKGZ1bmMsIGNvbnRleHQpIHsKKyAgICBpZiAobmF0aXZl
QmluZCAmJiBmdW5jLmJpbmQgPT09IG5hdGl2ZUJpbmQpIHJldHVybiBuYXRpdmVCaW5kLmFwcGx5
KGZ1bmMsIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7CisgICAgaWYgKCFfLmlzRnVuY3Rpb24o
ZnVuYykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JpbmQgbXVzdCBiZSBjYWxsZWQgb24gYSBmdW5j
dGlvbicpOworICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpOworICAgIHZh
ciBib3VuZCA9IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIGV4ZWN1dGVCb3VuZChmdW5jLCBi
b3VuZCwgY29udGV4dCwgdGhpcywgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7
CisgICAgfTsKKyAgICByZXR1cm4gYm91bmQ7CisgIH07CisKKyAgLy8gUGFydGlhbGx5IGFwcGx5
IGEgZnVuY3Rpb24gYnkgY3JlYXRpbmcgYSB2ZXJzaW9uIHRoYXQgaGFzIGhhZCBzb21lIG9mIGl0
cworICAvLyBhcmd1bWVudHMgcHJlLWZpbGxlZCwgd2l0aG91dCBjaGFuZ2luZyBpdHMgZHluYW1p
YyBgdGhpc2AgY29udGV4dC4gXyBhY3RzCisgIC8vIGFzIGEgcGxhY2Vob2xkZXIsIGFsbG93aW5n
IGFueSBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMgdG8gYmUgcHJlLWZpbGxlZC4KKyAgXy5wYXJ0
aWFsID0gZnVuY3Rpb24oZnVuYykgeworICAgIHZhciBib3VuZEFyZ3MgPSBzbGljZS5jYWxsKGFy
Z3VtZW50cywgMSk7CisgICAgdmFyIGJvdW5kID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgcG9z
aXRpb24gPSAwLCBsZW5ndGggPSBib3VuZEFyZ3MubGVuZ3RoOworICAgICAgdmFyIGFyZ3MgPSBB
cnJheShsZW5ndGgpOworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewor
ICAgICAgICBhcmdzW2ldID0gYm91bmRBcmdzW2ldID09PSBfID8gYXJndW1lbnRzW3Bvc2l0aW9u
KytdIDogYm91bmRBcmdzW2ldOworICAgICAgfQorICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgYXJn
dW1lbnRzLmxlbmd0aCkgYXJncy5wdXNoKGFyZ3VtZW50c1twb3NpdGlvbisrXSk7CisgICAgICBy
ZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCB0aGlzLCB0aGlzLCBhcmdzKTsKKyAgICB9
OworICAgIHJldHVybiBib3VuZDsKKyAgfTsKKworICAvLyBCaW5kIGEgbnVtYmVyIG9mIGFuIG9i
amVjdCdzIG1ldGhvZHMgdG8gdGhhdCBvYmplY3QuIFJlbWFpbmluZyBhcmd1bWVudHMKKyAgLy8g
YXJlIHRoZSBtZXRob2QgbmFtZXMgdG8gYmUgYm91bmQuIFVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhh
dCBhbGwgY2FsbGJhY2tzCisgIC8vIGRlZmluZWQgb24gYW4gb2JqZWN0IGJlbG9uZyB0byBpdC4K
KyAgXy5iaW5kQWxsID0gZnVuY3Rpb24ob2JqKSB7CisgICAgdmFyIGksIGxlbmd0aCA9IGFyZ3Vt
ZW50cy5sZW5ndGgsIGtleTsKKyAgICBpZiAobGVuZ3RoIDw9IDEpIHRocm93IG5ldyBFcnJvcign
YmluZEFsbCBtdXN0IGJlIHBhc3NlZCBmdW5jdGlvbiBuYW1lcycpOworICAgIGZvciAoaSA9IDE7
IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAga2V5ID0gYXJndW1lbnRzW2ldOworICAgICAgb2Jq
W2tleV0gPSBfLmJpbmQob2JqW2tleV0sIG9iaik7CisgICAgfQorICAgIHJldHVybiBvYmo7Cisg
IH07CisKKyAgLy8gTWVtb2l6ZSBhbiBleHBlbnNpdmUgZnVuY3Rpb24gYnkgc3RvcmluZyBpdHMg
cmVzdWx0cy4KKyAgXy5tZW1vaXplID0gZnVuY3Rpb24oZnVuYywgaGFzaGVyKSB7CisgICAgdmFy
IG1lbW9pemUgPSBmdW5jdGlvbihrZXkpIHsKKyAgICAgIHZhciBjYWNoZSA9IG1lbW9pemUuY2Fj
aGU7CisgICAgICB2YXIgYWRkcmVzcyA9ICcnICsgKGhhc2hlciA/IGhhc2hlci5hcHBseSh0aGlz
LCBhcmd1bWVudHMpIDoga2V5KTsKKyAgICAgIGlmICghXy5oYXMoY2FjaGUsIGFkZHJlc3MpKSBj
YWNoZVthZGRyZXNzXSA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICAgIHJldHVy
biBjYWNoZVthZGRyZXNzXTsKKyAgICB9OworICAgIG1lbW9pemUuY2FjaGUgPSB7fTsKKyAgICBy
ZXR1cm4gbWVtb2l6ZTsKKyAgfTsKKworICAvLyBEZWxheXMgYSBmdW5jdGlvbiBmb3IgdGhlIGdp
dmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIGFuZCB0aGVuIGNhbGxzCisgIC8vIGl0IHdpdGgg
dGhlIGFyZ3VtZW50cyBzdXBwbGllZC4KKyAgXy5kZWxheSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQp
IHsKKyAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTsKKyAgICByZXR1cm4g
c2V0VGltZW91dChmdW5jdGlvbigpeworICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkobnVsbCwgYXJn
cyk7CisgICAgfSwgd2FpdCk7CisgIH07CisKKyAgLy8gRGVmZXJzIGEgZnVuY3Rpb24sIHNjaGVk
dWxpbmcgaXQgdG8gcnVuIGFmdGVyIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzCisgIC8vIGNs
ZWFyZWQuCisgIF8uZGVmZXIgPSBfLnBhcnRpYWwoXy5kZWxheSwgXywgMSk7CisKKyAgLy8gUmV0
dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCB3aGVuIGludm9rZWQsIHdpbGwgb25seSBiZSB0cmlnZ2Vy
ZWQgYXQgbW9zdCBvbmNlCisgIC8vIGR1cmluZyBhIGdpdmVuIHdpbmRvdyBvZiB0aW1lLiBOb3Jt
YWxseSwgdGhlIHRocm90dGxlZCBmdW5jdGlvbiB3aWxsIHJ1bgorICAvLyBhcyBtdWNoIGFzIGl0
IGNhbiwgd2l0aG91dCBldmVyIGdvaW5nIG1vcmUgdGhhbiBvbmNlIHBlciBgd2FpdGAgZHVyYXRp
b247CisgIC8vIGJ1dCBpZiB5b3UnZCBsaWtlIHRvIGRpc2FibGUgdGhlIGV4ZWN1dGlvbiBvbiB0
aGUgbGVhZGluZyBlZGdlLCBwYXNzCisgIC8vIGB7bGVhZGluZzogZmFsc2V9YC4gVG8gZGlzYWJs
ZSBleGVjdXRpb24gb24gdGhlIHRyYWlsaW5nIGVkZ2UsIGRpdHRvLgorICBfLnRocm90dGxlID0g
ZnVuY3Rpb24oZnVuYywgd2FpdCwgb3B0aW9ucykgeworICAgIHZhciBjb250ZXh0LCBhcmdzLCBy
ZXN1bHQ7CisgICAgdmFyIHRpbWVvdXQgPSBudWxsOworICAgIHZhciBwcmV2aW91cyA9IDA7Cisg
ICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307CisgICAgdmFyIGxhdGVyID0gZnVuY3Rpb24o
KSB7CisgICAgICBwcmV2aW91cyA9IG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UgPyAwIDogXy5u
b3coKTsKKyAgICAgIHRpbWVvdXQgPSBudWxsOworICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShj
b250ZXh0LCBhcmdzKTsKKyAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxs
OworICAgIH07CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgdmFyIG5vdyA9IF8ubm93
KCk7CisgICAgICBpZiAoIXByZXZpb3VzICYmIG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UpIHBy
ZXZpb3VzID0gbm93OworICAgICAgdmFyIHJlbWFpbmluZyA9IHdhaXQgLSAobm93IC0gcHJldmlv
dXMpOworICAgICAgY29udGV4dCA9IHRoaXM7CisgICAgICBhcmdzID0gYXJndW1lbnRzOworICAg
ICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQpIHsKKyAgICAgICAgaWYg
KHRpbWVvdXQpIHsKKyAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7CisgICAgICAgICAg
dGltZW91dCA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgcHJldmlvdXMgPSBub3c7CisgICAg
ICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7CisgICAgICAgIGlmICghdGlt
ZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsOworICAgICAgfSBlbHNlIGlmICghdGltZW91dCAm
JiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkgeworICAgICAgICB0aW1lb3V0ID0gc2V0VGlt
ZW91dChsYXRlciwgcmVtYWluaW5nKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfTsKKyAgfTsKKworICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIGFzIGxvbmcgYXMg
aXQgY29udGludWVzIHRvIGJlIGludm9rZWQsIHdpbGwgbm90CisgIC8vIGJlIHRyaWdnZXJlZC4g
VGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGl0IHN0b3BzIGJlaW5nIGNhbGxlZCBm
b3IKKyAgLy8gTiBtaWxsaXNlY29uZHMuIElmIGBpbW1lZGlhdGVgIGlzIHBhc3NlZCwgdHJpZ2dl
ciB0aGUgZnVuY3Rpb24gb24gdGhlCisgIC8vIGxlYWRpbmcgZWRnZSwgaW5zdGVhZCBvZiB0aGUg
dHJhaWxpbmcuCisgIF8uZGVib3VuY2UgPSBmdW5jdGlvbihmdW5jLCB3YWl0LCBpbW1lZGlhdGUp
IHsKKyAgICB2YXIgdGltZW91dCwgYXJncywgY29udGV4dCwgdGltZXN0YW1wLCByZXN1bHQ7CisK
KyAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBsYXN0ID0gXy5ub3coKSAt
IHRpbWVzdGFtcDsKKworICAgICAgaWYgKGxhc3QgPCB3YWl0ICYmIGxhc3QgPj0gMCkgeworICAg
ICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCAtIGxhc3QpOworICAgICAgfSBl
bHNlIHsKKyAgICAgICAgdGltZW91dCA9IG51bGw7CisgICAgICAgIGlmICghaW1tZWRpYXRlKSB7
CisgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTsKKyAgICAgICAg
ICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDsKKyAgICAgICAgfQorICAgICAg
fQorICAgIH07CisKKyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICBjb250ZXh0ID0gdGhp
czsKKyAgICAgIGFyZ3MgPSBhcmd1bWVudHM7CisgICAgICB0aW1lc3RhbXAgPSBfLm5vdygpOwor
ICAgICAgdmFyIGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7CisgICAgICBpZiAoIXRp
bWVvdXQpIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTsKKyAgICAgIGlmIChjYWxs
Tm93KSB7CisgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7CisgICAg
ICAgIGNvbnRleHQgPSBhcmdzID0gbnVsbDsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9OworICB9OworCisgIC8vIFJldHVybnMgdGhlIGZpcnN0IGZ1bmN0aW9uIHBhc3Nl
ZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgc2Vjb25kLAorICAvLyBhbGxvd2luZyB5b3UgdG8gYWRq
dXN0IGFyZ3VtZW50cywgcnVuIGNvZGUgYmVmb3JlIGFuZCBhZnRlciwgYW5kCisgIC8vIGNvbmRp
dGlvbmFsbHkgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgZnVuY3Rpb24uCisgIF8ud3JhcCA9IGZ1bmN0
aW9uKGZ1bmMsIHdyYXBwZXIpIHsKKyAgICByZXR1cm4gXy5wYXJ0aWFsKHdyYXBwZXIsIGZ1bmMp
OworICB9OworCisgIC8vIFJldHVybnMgYSBuZWdhdGVkIHZlcnNpb24gb2YgdGhlIHBhc3NlZC1p
biBwcmVkaWNhdGUuCisgIF8ubmVnYXRlID0gZnVuY3Rpb24ocHJlZGljYXRlKSB7CisgICAgcmV0
dXJuIGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuICFwcmVkaWNhdGUuYXBwbHkodGhpcywgYXJn
dW1lbnRzKTsKKyAgICB9OworICB9OworCisgIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGlz
IHRoZSBjb21wb3NpdGlvbiBvZiBhIGxpc3Qgb2YgZnVuY3Rpb25zLCBlYWNoCisgIC8vIGNvbnN1
bWluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB0aGF0IGZvbGxvd3MuCisgIF8u
Y29tcG9zZSA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBhcmdzID0gYXJndW1lbnRzOworICAgIHZh
ciBzdGFydCA9IGFyZ3MubGVuZ3RoIC0gMTsKKyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAg
ICB2YXIgaSA9IHN0YXJ0OworICAgICAgdmFyIHJlc3VsdCA9IGFyZ3Nbc3RhcnRdLmFwcGx5KHRo
aXMsIGFyZ3VtZW50cyk7CisgICAgICB3aGlsZSAoaS0tKSByZXN1bHQgPSBhcmdzW2ldLmNhbGwo
dGhpcywgcmVzdWx0KTsKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgfTsKKworICAv
LyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgb24gYW5kIGFm
dGVyIHRoZSBOdGggY2FsbC4KKyAgXy5hZnRlciA9IGZ1bmN0aW9uKHRpbWVzLCBmdW5jKSB7Cisg
ICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgaWYgKC0tdGltZXMgPCAxKSB7CisgICAgICAg
IHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICB9CisgICAgfTsKKyAg
fTsKKworICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQg
dXAgdG8gKGJ1dCBub3QgaW5jbHVkaW5nKSB0aGUgTnRoIGNhbGwuCisgIF8uYmVmb3JlID0gZnVu
Y3Rpb24odGltZXMsIGZ1bmMpIHsKKyAgICB2YXIgbWVtbzsKKyAgICByZXR1cm4gZnVuY3Rpb24o
KSB7CisgICAgICBpZiAoLS10aW1lcyA+IDApIHsKKyAgICAgICAgbWVtbyA9IGZ1bmMuYXBwbHko
dGhpcywgYXJndW1lbnRzKTsKKyAgICAgIH0KKyAgICAgIGlmICh0aW1lcyA8PSAxKSBmdW5jID0g
bnVsbDsKKyAgICAgIHJldHVybiBtZW1vOworICAgIH07CisgIH07CisKKyAgLy8gUmV0dXJucyBh
IGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhdCBtb3N0IG9uZSB0aW1lLCBubyBtYXR0
ZXIgaG93CisgIC8vIG9mdGVuIHlvdSBjYWxsIGl0LiBVc2VmdWwgZm9yIGxhenkgaW5pdGlhbGl6
YXRpb24uCisgIF8ub25jZSA9IF8ucGFydGlhbChfLmJlZm9yZSwgMik7CisKKyAgLy8gT2JqZWN0
IEZ1bmN0aW9ucworICAvLyAtLS0tLS0tLS0tLS0tLS0tCisKKyAgLy8gS2V5cyBpbiBJRSA8IDkg
dGhhdCB3b24ndCBiZSBpdGVyYXRlZCBieSBgZm9yIGtleSBpbiAuLi5gIGFuZCB0aHVzIG1pc3Nl
ZC4KKyAgdmFyIGhhc0VudW1CdWcgPSAhe3RvU3RyaW5nOiBudWxsfS5wcm9wZXJ0eUlzRW51bWVy
YWJsZSgndG9TdHJpbmcnKTsKKyAgdmFyIG5vbkVudW1lcmFibGVQcm9wcyA9IFsndmFsdWVPZics
ICdpc1Byb3RvdHlwZU9mJywgJ3RvU3RyaW5nJywKKyAgICAgICAgICAgICAgICAgICAgICAncHJv
cGVydHlJc0VudW1lcmFibGUnLCAnaGFzT3duUHJvcGVydHknLCAndG9Mb2NhbGVTdHJpbmcnXTsK
KworICBmdW5jdGlvbiBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cykgeworICAgIHZhciBu
b25FbnVtSWR4ID0gbm9uRW51bWVyYWJsZVByb3BzLmxlbmd0aDsKKyAgICB2YXIgY29uc3RydWN0
b3IgPSBvYmouY29uc3RydWN0b3I7CisgICAgdmFyIHByb3RvID0gKF8uaXNGdW5jdGlvbihjb25z
dHJ1Y3RvcikgJiYgY29uc3RydWN0b3IucHJvdG90eXBlKSB8fCBPYmpQcm90bzsKKworICAgIC8v
IENvbnN0cnVjdG9yIGlzIGEgc3BlY2lhbCBjYXNlLgorICAgIHZhciBwcm9wID0gJ2NvbnN0cnVj
dG9yJzsKKyAgICBpZiAoXy5oYXMob2JqLCBwcm9wKSAmJiAhXy5jb250YWlucyhrZXlzLCBwcm9w
KSkga2V5cy5wdXNoKHByb3ApOworCisgICAgd2hpbGUgKG5vbkVudW1JZHgtLSkgeworICAgICAg
cHJvcCA9IG5vbkVudW1lcmFibGVQcm9wc1tub25FbnVtSWR4XTsKKyAgICAgIGlmIChwcm9wIGlu
IG9iaiAmJiBvYmpbcHJvcF0gIT09IHByb3RvW3Byb3BdICYmICFfLmNvbnRhaW5zKGtleXMsIHBy
b3ApKSB7CisgICAgICAgIGtleXMucHVzaChwcm9wKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKwor
ICAvLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3Mgb3duIHByb3BlcnRpZXMuCisg
IC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBPYmplY3Qua2V5c2AK
KyAgXy5rZXlzID0gZnVuY3Rpb24ob2JqKSB7CisgICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJl
dHVybiBbXTsKKyAgICBpZiAobmF0aXZlS2V5cykgcmV0dXJuIG5hdGl2ZUtleXMob2JqKTsKKyAg
ICB2YXIga2V5cyA9IFtdOworICAgIGZvciAodmFyIGtleSBpbiBvYmopIGlmIChfLmhhcyhvYmos
IGtleSkpIGtleXMucHVzaChrZXkpOworICAgIC8vIEFoZW0sIElFIDwgOS4KKyAgICBpZiAoaGFz
RW51bUJ1ZykgY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpOworICAgIHJldHVybiBrZXlz
OworICB9OworCisgIC8vIFJldHJpZXZlIGFsbCB0aGUgcHJvcGVydHkgbmFtZXMgb2YgYW4gb2Jq
ZWN0LgorICBfLmFsbEtleXMgPSBmdW5jdGlvbihvYmopIHsKKyAgICBpZiAoIV8uaXNPYmplY3Qo
b2JqKSkgcmV0dXJuIFtdOworICAgIHZhciBrZXlzID0gW107CisgICAgZm9yICh2YXIga2V5IGlu
IG9iaikga2V5cy5wdXNoKGtleSk7CisgICAgLy8gQWhlbSwgSUUgPCA5LgorICAgIGlmIChoYXNF
bnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7CisgICAgcmV0dXJuIGtleXM7
CisgIH07CisKKyAgLy8gUmV0cmlldmUgdGhlIHZhbHVlcyBvZiBhbiBvYmplY3QncyBwcm9wZXJ0
aWVzLgorICBfLnZhbHVlcyA9IGZ1bmN0aW9uKG9iaikgeworICAgIHZhciBrZXlzID0gXy5rZXlz
KG9iaik7CisgICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoOworICAgIHZhciB2YWx1ZXMgPSBB
cnJheShsZW5ndGgpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAg
ICAgIHZhbHVlc1tpXSA9IG9ialtrZXlzW2ldXTsKKyAgICB9CisgICAgcmV0dXJuIHZhbHVlczsK
KyAgfTsKKworICAvLyBSZXR1cm5zIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRl
ZSB0byBlYWNoIGVsZW1lbnQgb2YgdGhlIG9iamVjdAorICAvLyBJbiBjb250cmFzdCB0byBfLm1h
cCBpdCByZXR1cm5zIGFuIG9iamVjdAorICBfLm1hcE9iamVjdCA9IGZ1bmN0aW9uKG9iaiwgaXRl
cmF0ZWUsIGNvbnRleHQpIHsKKyAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTsK
KyAgICB2YXIga2V5cyA9ICBfLmtleXMob2JqKSwKKyAgICAgICAgICBsZW5ndGggPSBrZXlzLmxl
bmd0aCwKKyAgICAgICAgICByZXN1bHRzID0ge30sCisgICAgICAgICAgY3VycmVudEtleTsKKyAg
ICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHsKKyAgICAg
ICAgY3VycmVudEtleSA9IGtleXNbaW5kZXhdOworICAgICAgICByZXN1bHRzW2N1cnJlbnRLZXld
ID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopOworICAgICAgfQor
ICAgICAgcmV0dXJuIHJlc3VsdHM7CisgIH07CisKKyAgLy8gQ29udmVydCBhbiBvYmplY3QgaW50
byBhIGxpc3Qgb2YgYFtrZXksIHZhbHVlXWAgcGFpcnMuCisgIF8ucGFpcnMgPSBmdW5jdGlvbihv
YmopIHsKKyAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopOworICAgIHZhciBsZW5ndGggPSBrZXlz
Lmxlbmd0aDsKKyAgICB2YXIgcGFpcnMgPSBBcnJheShsZW5ndGgpOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgIHBhaXJzW2ldID0gW2tleXNbaV0sIG9ialtr
ZXlzW2ldXV07CisgICAgfQorICAgIHJldHVybiBwYWlyczsKKyAgfTsKKworICAvLyBJbnZlcnQg
dGhlIGtleXMgYW5kIHZhbHVlcyBvZiBhbiBvYmplY3QuIFRoZSB2YWx1ZXMgbXVzdCBiZSBzZXJp
YWxpemFibGUuCisgIF8uaW52ZXJ0ID0gZnVuY3Rpb24ob2JqKSB7CisgICAgdmFyIHJlc3VsdCA9
IHt9OworICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7CisgICAgZm9yICh2YXIgaSA9IDAsIGxl
bmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgIHJlc3VsdFtvYmpb
a2V5c1tpXV1dID0ga2V5c1tpXTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfTsKKwor
ICAvLyBSZXR1cm4gYSBzb3J0ZWQgbGlzdCBvZiB0aGUgZnVuY3Rpb24gbmFtZXMgYXZhaWxhYmxl
IG9uIHRoZSBvYmplY3QuCisgIC8vIEFsaWFzZWQgYXMgYG1ldGhvZHNgCisgIF8uZnVuY3Rpb25z
ID0gXy5tZXRob2RzID0gZnVuY3Rpb24ob2JqKSB7CisgICAgdmFyIG5hbWVzID0gW107CisgICAg
Zm9yICh2YXIga2V5IGluIG9iaikgeworICAgICAgaWYgKF8uaXNGdW5jdGlvbihvYmpba2V5XSkp
IG5hbWVzLnB1c2goa2V5KTsKKyAgICB9CisgICAgcmV0dXJuIG5hbWVzLnNvcnQoKTsKKyAgfTsK
KworICAvLyBFeHRlbmQgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIHByb3BlcnRpZXMgaW4g
cGFzc2VkLWluIG9iamVjdChzKS4KKyAgXy5leHRlbmQgPSBjcmVhdGVBc3NpZ25lcihfLmFsbEtl
eXMpOworCisgIC8vIEFzc2lnbnMgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIG93biBwcm9w
ZXJ0aWVzIGluIHRoZSBwYXNzZWQtaW4gb2JqZWN0KHMpCisgIC8vIChodHRwczovL2RldmVsb3Bl
ci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0
cy9PYmplY3QvYXNzaWduKQorICBfLmV4dGVuZE93biA9IF8uYXNzaWduID0gY3JlYXRlQXNzaWdu
ZXIoXy5rZXlzKTsKKworICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBrZXkgb24gYW4gb2JqZWN0IHRo
YXQgcGFzc2VzIGEgcHJlZGljYXRlIHRlc3QKKyAgXy5maW5kS2V5ID0gZnVuY3Rpb24ob2JqLCBw
cmVkaWNhdGUsIGNvbnRleHQpIHsKKyAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRl
eHQpOworICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaiksIGtleTsKKyAgICBmb3IgKHZhciBpID0g
MCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAga2V5ID0g
a2V5c1tpXTsKKyAgICAgIGlmIChwcmVkaWNhdGUob2JqW2tleV0sIGtleSwgb2JqKSkgcmV0dXJu
IGtleTsKKyAgICB9CisgIH07CisKKyAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IG9u
bHkgY29udGFpbmluZyB0aGUgd2hpdGVsaXN0ZWQgcHJvcGVydGllcy4KKyAgXy5waWNrID0gZnVu
Y3Rpb24ob2JqZWN0LCBvaXRlcmF0ZWUsIGNvbnRleHQpIHsKKyAgICB2YXIgcmVzdWx0ID0ge30s
IG9iaiA9IG9iamVjdCwgaXRlcmF0ZWUsIGtleXM7CisgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1
cm4gcmVzdWx0OworICAgIGlmIChfLmlzRnVuY3Rpb24ob2l0ZXJhdGVlKSkgeworICAgICAga2V5
cyA9IF8uYWxsS2V5cyhvYmopOworICAgICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKG9pdGVyYXRl
ZSwgY29udGV4dCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGtleXMgPSBmbGF0dGVuKGFyZ3VtZW50
cywgZmFsc2UsIGZhbHNlLCAxKTsKKyAgICAgIGl0ZXJhdGVlID0gZnVuY3Rpb24odmFsdWUsIGtl
eSwgb2JqKSB7IHJldHVybiBrZXkgaW4gb2JqOyB9OworICAgICAgb2JqID0gT2JqZWN0KG9iaik7
CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxl
bmd0aDsgaSsrKSB7CisgICAgICB2YXIga2V5ID0ga2V5c1tpXTsKKyAgICAgIHZhciB2YWx1ZSA9
IG9ialtrZXldOworICAgICAgaWYgKGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iaikpIHJlc3VsdFtr
ZXldID0gdmFsdWU7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisgIH07CisKKyAgIC8vIFJl
dHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRob3V0IHRoZSBibGFja2xpc3RlZCBwcm9wZXJ0
aWVzLgorICBfLm9taXQgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7CisgICAg
aWYgKF8uaXNGdW5jdGlvbihpdGVyYXRlZSkpIHsKKyAgICAgIGl0ZXJhdGVlID0gXy5uZWdhdGUo
aXRlcmF0ZWUpOworICAgIH0gZWxzZSB7CisgICAgICB2YXIga2V5cyA9IF8ubWFwKGZsYXR0ZW4o
YXJndW1lbnRzLCBmYWxzZSwgZmFsc2UsIDEpLCBTdHJpbmcpOworICAgICAgaXRlcmF0ZWUgPSBm
dW5jdGlvbih2YWx1ZSwga2V5KSB7CisgICAgICAgIHJldHVybiAhXy5jb250YWlucyhrZXlzLCBr
ZXkpOworICAgICAgfTsKKyAgICB9CisgICAgcmV0dXJuIF8ucGljayhvYmosIGl0ZXJhdGVlLCBj
b250ZXh0KTsKKyAgfTsKKworICAvLyBGaWxsIGluIGEgZ2l2ZW4gb2JqZWN0IHdpdGggZGVmYXVs
dCBwcm9wZXJ0aWVzLgorICBfLmRlZmF1bHRzID0gY3JlYXRlQXNzaWduZXIoXy5hbGxLZXlzLCB0
cnVlKTsKKworICAvLyBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGdp
dmVuIHByb3RvdHlwZSBvYmplY3QuCisgIC8vIElmIGFkZGl0aW9uYWwgcHJvcGVydGllcyBhcmUg
cHJvdmlkZWQgdGhlbiB0aGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlCisgIC8vIGNyZWF0ZWQgb2Jq
ZWN0LgorICBfLmNyZWF0ZSA9IGZ1bmN0aW9uKHByb3RvdHlwZSwgcHJvcHMpIHsKKyAgICB2YXIg
cmVzdWx0ID0gYmFzZUNyZWF0ZShwcm90b3R5cGUpOworICAgIGlmIChwcm9wcykgXy5leHRlbmRP
d24ocmVzdWx0LCBwcm9wcyk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfTsKKworICAvLyBDcmVh
dGUgYSAoc2hhbGxvdy1jbG9uZWQpIGR1cGxpY2F0ZSBvZiBhbiBvYmplY3QuCisgIF8uY2xvbmUg
PSBmdW5jdGlvbihvYmopIHsKKyAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajsK
KyAgICByZXR1cm4gXy5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF8uZXh0ZW5kKHt9LCBv
YmopOworICB9OworCisgIC8vIEludm9rZXMgaW50ZXJjZXB0b3Igd2l0aCB0aGUgb2JqLCBhbmQg
dGhlbiByZXR1cm5zIG9iai4KKyAgLy8gVGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIG1ldGhv
ZCBpcyB0byAidGFwIGludG8iIGEgbWV0aG9kIGNoYWluLCBpbgorICAvLyBvcmRlciB0byBwZXJm
b3JtIG9wZXJhdGlvbnMgb24gaW50ZXJtZWRpYXRlIHJlc3VsdHMgd2l0aGluIHRoZSBjaGFpbi4K
KyAgXy50YXAgPSBmdW5jdGlvbihvYmosIGludGVyY2VwdG9yKSB7CisgICAgaW50ZXJjZXB0b3Io
b2JqKTsKKyAgICByZXR1cm4gb2JqOworICB9OworCisgIC8vIFJldHVybnMgd2hldGhlciBhbiBv
YmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9mIGBrZXk6dmFsdWVgIHBhaXJzLgorICBfLmlzTWF0Y2gg
PSBmdW5jdGlvbihvYmplY3QsIGF0dHJzKSB7CisgICAgdmFyIGtleXMgPSBfLmtleXMoYXR0cnMp
LCBsZW5ndGggPSBrZXlzLmxlbmd0aDsKKyAgICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiAh
bGVuZ3RoOworICAgIHZhciBvYmogPSBPYmplY3Qob2JqZWN0KTsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICB2YXIga2V5ID0ga2V5c1tpXTsKKyAgICAgIGlm
IChhdHRyc1trZXldICE9PSBvYmpba2V5XSB8fCAhKGtleSBpbiBvYmopKSByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9OworCisKKyAgLy8gSW50ZXJuYWwgcmVjdXJz
aXZlIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGBpc0VxdWFsYC4KKyAgdmFyIGVxID0gZnVuY3Rp
b24oYSwgYiwgYVN0YWNrLCBiU3RhY2spIHsKKyAgICAvLyBJZGVudGljYWwgb2JqZWN0cyBhcmUg
ZXF1YWwuIGAwID09PSAtMGAsIGJ1dCB0aGV5IGFyZW4ndCBpZGVudGljYWwuCisgICAgLy8gU2Vl
IHRoZSBbSGFybW9ueSBgZWdhbGAgcHJvcG9zYWxdKGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3Jn
L2Rva3UucGhwP2lkPWhhcm1vbnk6ZWdhbCkuCisgICAgaWYgKGEgPT09IGIpIHJldHVybiBhICE9
PSAwIHx8IDEgLyBhID09PSAxIC8gYjsKKyAgICAvLyBBIHN0cmljdCBjb21wYXJpc29uIGlzIG5l
Y2Vzc2FyeSBiZWNhdXNlIGBudWxsID09IHVuZGVmaW5lZGAuCisgICAgaWYgKGEgPT0gbnVsbCB8
fCBiID09IG51bGwpIHJldHVybiBhID09PSBiOworICAgIC8vIFVud3JhcCBhbnkgd3JhcHBlZCBv
YmplY3RzLgorICAgIGlmIChhIGluc3RhbmNlb2YgXykgYSA9IGEuX3dyYXBwZWQ7CisgICAgaWYg
KGIgaW5zdGFuY2VvZiBfKSBiID0gYi5fd3JhcHBlZDsKKyAgICAvLyBDb21wYXJlIGBbW0NsYXNz
XV1gIG5hbWVzLgorICAgIHZhciBjbGFzc05hbWUgPSB0b1N0cmluZy5jYWxsKGEpOworICAgIGlm
IChjbGFzc05hbWUgIT09IHRvU3RyaW5nLmNhbGwoYikpIHJldHVybiBmYWxzZTsKKyAgICBzd2l0
Y2ggKGNsYXNzTmFtZSkgeworICAgICAgLy8gU3RyaW5ncywgbnVtYmVycywgcmVndWxhciBleHBy
ZXNzaW9ucywgZGF0ZXMsIGFuZCBib29sZWFucyBhcmUgY29tcGFyZWQgYnkgdmFsdWUuCisgICAg
ICBjYXNlICdbb2JqZWN0IFJlZ0V4cF0nOgorICAgICAgLy8gUmVnRXhwcyBhcmUgY29lcmNlZCB0
byBzdHJpbmdzIGZvciBjb21wYXJpc29uIChOb3RlOiAnJyArIC9hL2kgPT09ICcvYS9pJykKKyAg
ICAgIGNhc2UgJ1tvYmplY3QgU3RyaW5nXSc6CisgICAgICAgIC8vIFByaW1pdGl2ZXMgYW5kIHRo
ZWlyIGNvcnJlc3BvbmRpbmcgb2JqZWN0IHdyYXBwZXJzIGFyZSBlcXVpdmFsZW50OyB0aHVzLCBg
IjUiYCBpcworICAgICAgICAvLyBlcXVpdmFsZW50IHRvIGBuZXcgU3RyaW5nKCI1IilgLgorICAg
ICAgICByZXR1cm4gJycgKyBhID09PSAnJyArIGI7CisgICAgICBjYXNlICdbb2JqZWN0IE51bWJl
cl0nOgorICAgICAgICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZl
LgorICAgICAgICAvLyBPYmplY3QoTmFOKSBpcyBlcXVpdmFsZW50IHRvIE5hTgorICAgICAgICBp
ZiAoK2EgIT09ICthKSByZXR1cm4gK2IgIT09ICtiOworICAgICAgICAvLyBBbiBgZWdhbGAgY29t
cGFyaXNvbiBpcyBwZXJmb3JtZWQgZm9yIG90aGVyIG51bWVyaWMgdmFsdWVzLgorICAgICAgICBy
ZXR1cm4gK2EgPT09IDAgPyAxIC8gK2EgPT09IDEgLyBiIDogK2EgPT09ICtiOworICAgICAgY2Fz
ZSAnW29iamVjdCBEYXRlXSc6CisgICAgICBjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzoKKyAgICAg
ICAgLy8gQ29lcmNlIGRhdGVzIGFuZCBib29sZWFucyB0byBudW1lcmljIHByaW1pdGl2ZSB2YWx1
ZXMuIERhdGVzIGFyZSBjb21wYXJlZCBieSB0aGVpcgorICAgICAgICAvLyBtaWxsaXNlY29uZCBy
ZXByZXNlbnRhdGlvbnMuIE5vdGUgdGhhdCBpbnZhbGlkIGRhdGVzIHdpdGggbWlsbGlzZWNvbmQg
cmVwcmVzZW50YXRpb25zCisgICAgICAgIC8vIG9mIGBOYU5gIGFyZSBub3QgZXF1aXZhbGVudC4K
KyAgICAgICAgcmV0dXJuICthID09PSArYjsKKyAgICB9CisKKyAgICB2YXIgYXJlQXJyYXlzID0g
Y2xhc3NOYW1lID09PSAnW29iamVjdCBBcnJheV0nOworICAgIGlmICghYXJlQXJyYXlzKSB7Cisg
ICAgICBpZiAodHlwZW9mIGEgIT0gJ29iamVjdCcgfHwgdHlwZW9mIGIgIT0gJ29iamVjdCcpIHJl
dHVybiBmYWxzZTsKKworICAgICAgLy8gT2JqZWN0cyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3Rv
cnMgYXJlIG5vdCBlcXVpdmFsZW50LCBidXQgYE9iamVjdGBzIG9yIGBBcnJheWBzCisgICAgICAv
LyBmcm9tIGRpZmZlcmVudCBmcmFtZXMgYXJlLgorICAgICAgdmFyIGFDdG9yID0gYS5jb25zdHJ1
Y3RvciwgYkN0b3IgPSBiLmNvbnN0cnVjdG9yOworICAgICAgaWYgKGFDdG9yICE9PSBiQ3RvciAm
JiAhKF8uaXNGdW5jdGlvbihhQ3RvcikgJiYgYUN0b3IgaW5zdGFuY2VvZiBhQ3RvciAmJgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uaXNGdW5jdGlvbihiQ3RvcikgJiYgYkN0b3Ig
aW5zdGFuY2VvZiBiQ3RvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCdjb25zdHJ1
Y3RvcicgaW4gYSAmJiAnY29uc3RydWN0b3InIGluIGIpKSB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgIH0KKyAgICB9CisgICAgLy8gQXNzdW1lIGVxdWFsaXR5IGZvciBjeWNsaWMgc3Ry
dWN0dXJlcy4gVGhlIGFsZ29yaXRobSBmb3IgZGV0ZWN0aW5nIGN5Y2xpYworICAgIC8vIHN0cnVj
dHVyZXMgaXMgYWRhcHRlZCBmcm9tIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjMsIGFic3RyYWN0IG9w
ZXJhdGlvbiBgSk9gLgorCisgICAgLy8gSW5pdGlhbGl6aW5nIHN0YWNrIG9mIHRyYXZlcnNlZCBv
YmplY3RzLgorICAgIC8vIEl0J3MgZG9uZSBoZXJlIHNpbmNlIHdlIG9ubHkgbmVlZCB0aGVtIGZv
ciBvYmplY3RzIGFuZCBhcnJheXMgY29tcGFyaXNvbi4KKyAgICBhU3RhY2sgPSBhU3RhY2sgfHwg
W107CisgICAgYlN0YWNrID0gYlN0YWNrIHx8IFtdOworICAgIHZhciBsZW5ndGggPSBhU3RhY2su
bGVuZ3RoOworICAgIHdoaWxlIChsZW5ndGgtLSkgeworICAgICAgLy8gTGluZWFyIHNlYXJjaC4g
UGVyZm9ybWFuY2UgaXMgaW52ZXJzZWx5IHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mCisg
ICAgICAvLyB1bmlxdWUgbmVzdGVkIHN0cnVjdHVyZXMuCisgICAgICBpZiAoYVN0YWNrW2xlbmd0
aF0gPT09IGEpIHJldHVybiBiU3RhY2tbbGVuZ3RoXSA9PT0gYjsKKyAgICB9CisKKyAgICAvLyBB
ZGQgdGhlIGZpcnN0IG9iamVjdCB0byB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuCisg
ICAgYVN0YWNrLnB1c2goYSk7CisgICAgYlN0YWNrLnB1c2goYik7CisKKyAgICAvLyBSZWN1cnNp
dmVseSBjb21wYXJlIG9iamVjdHMgYW5kIGFycmF5cy4KKyAgICBpZiAoYXJlQXJyYXlzKSB7Cisg
ICAgICAvLyBDb21wYXJlIGFycmF5IGxlbmd0aHMgdG8gZGV0ZXJtaW5lIGlmIGEgZGVlcCBjb21w
YXJpc29uIGlzIG5lY2Vzc2FyeS4KKyAgICAgIGxlbmd0aCA9IGEubGVuZ3RoOworICAgICAgaWYg
KGxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTsKKyAgICAgIC8vIERlZXAgY29tcGFy
ZSB0aGUgY29udGVudHMsIGlnbm9yaW5nIG5vbi1udW1lcmljIHByb3BlcnRpZXMuCisgICAgICB3
aGlsZSAobGVuZ3RoLS0pIHsKKyAgICAgICAgaWYgKCFlcShhW2xlbmd0aF0sIGJbbGVuZ3RoXSwg
YVN0YWNrLCBiU3RhY2spKSByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgIC8vIERlZXAgY29tcGFyZSBvYmplY3RzLgorICAgICAgdmFyIGtleXMgPSBfLmtleXMoYSks
IGtleTsKKyAgICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoOworICAgICAgLy8gRW5zdXJlIHRoYXQg
Ym90aCBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVyIG9mIHByb3BlcnRpZXMgYmVmb3Jl
IGNvbXBhcmluZyBkZWVwIGVxdWFsaXR5LgorICAgICAgaWYgKF8ua2V5cyhiKS5sZW5ndGggIT09
IGxlbmd0aCkgcmV0dXJuIGZhbHNlOworICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7CisgICAgICAg
IC8vIERlZXAgY29tcGFyZSBlYWNoIG1lbWJlcgorICAgICAgICBrZXkgPSBrZXlzW2xlbmd0aF07
CisgICAgICAgIGlmICghKF8uaGFzKGIsIGtleSkgJiYgZXEoYVtrZXldLCBiW2tleV0sIGFTdGFj
aywgYlN0YWNrKSkpIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICB9CisgICAgLy8gUmVtb3Zl
IHRoZSBmaXJzdCBvYmplY3QgZnJvbSB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuCisg
ICAgYVN0YWNrLnBvcCgpOworICAgIGJTdGFjay5wb3AoKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAg
fTsKKworICAvLyBQZXJmb3JtIGEgZGVlcCBjb21wYXJpc29uIHRvIGNoZWNrIGlmIHR3byBvYmpl
Y3RzIGFyZSBlcXVhbC4KKyAgXy5pc0VxdWFsID0gZnVuY3Rpb24oYSwgYikgeworICAgIHJldHVy
biBlcShhLCBiKTsKKyAgfTsKKworICAvLyBJcyBhIGdpdmVuIGFycmF5LCBzdHJpbmcsIG9yIG9i
amVjdCBlbXB0eT8KKyAgLy8gQW4gImVtcHR5IiBvYmplY3QgaGFzIG5vIGVudW1lcmFibGUgb3du
LXByb3BlcnRpZXMuCisgIF8uaXNFbXB0eSA9IGZ1bmN0aW9uKG9iaikgeworICAgIGlmIChvYmog
PT0gbnVsbCkgcmV0dXJuIHRydWU7CisgICAgaWYgKGlzQXJyYXlMaWtlKG9iaikgJiYgKF8uaXNB
cnJheShvYmopIHx8IF8uaXNTdHJpbmcob2JqKSB8fCBfLmlzQXJndW1lbnRzKG9iaikpKSByZXR1
cm4gb2JqLmxlbmd0aCA9PT0gMDsKKyAgICByZXR1cm4gXy5rZXlzKG9iaikubGVuZ3RoID09PSAw
OworICB9OworCisgIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBET00gZWxlbWVudD8KKyAgXy5pc0Vs
ZW1lbnQgPSBmdW5jdGlvbihvYmopIHsKKyAgICByZXR1cm4gISEob2JqICYmIG9iai5ub2RlVHlw
ZSA9PT0gMSk7CisgIH07CisKKyAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhbiBhcnJheT8KKyAgLy8g
RGVsZWdhdGVzIHRvIEVDTUE1J3MgbmF0aXZlIEFycmF5LmlzQXJyYXkKKyAgXy5pc0FycmF5ID0g
bmF0aXZlSXNBcnJheSB8fCBmdW5jdGlvbihvYmopIHsKKyAgICByZXR1cm4gdG9TdHJpbmcuY2Fs
bChvYmopID09PSAnW29iamVjdCBBcnJheV0nOworICB9OworCisgIC8vIElzIGEgZ2l2ZW4gdmFy
aWFibGUgYW4gb2JqZWN0PworICBfLmlzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7CisgICAgdmFy
IHR5cGUgPSB0eXBlb2Ygb2JqOworICAgIHJldHVybiB0eXBlID09PSAnZnVuY3Rpb24nIHx8IHR5
cGUgPT09ICdvYmplY3QnICYmICEhb2JqOworICB9OworCisgIC8vIEFkZCBzb21lIGlzVHlwZSBt
ZXRob2RzOiBpc0FyZ3VtZW50cywgaXNGdW5jdGlvbiwgaXNTdHJpbmcsIGlzTnVtYmVyLCBpc0Rh
dGUsIGlzUmVnRXhwLCBpc0Vycm9yLgorICBfLmVhY2goWydBcmd1bWVudHMnLCAnRnVuY3Rpb24n
LCAnU3RyaW5nJywgJ051bWJlcicsICdEYXRlJywgJ1JlZ0V4cCcsICdFcnJvciddLCBmdW5jdGlv
bihuYW1lKSB7CisgICAgX1snaXMnICsgbmFtZV0gPSBmdW5jdGlvbihvYmopIHsKKyAgICAgIHJl
dHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0ICcgKyBuYW1lICsgJ10nOworICAg
IH07CisgIH0pOworCisgIC8vIERlZmluZSBhIGZhbGxiYWNrIHZlcnNpb24gb2YgdGhlIG1ldGhv
ZCBpbiBicm93c2VycyAoYWhlbSwgSUUgPCA5KSwgd2hlcmUKKyAgLy8gdGhlcmUgaXNuJ3QgYW55
IGluc3BlY3RhYmxlICJBcmd1bWVudHMiIHR5cGUuCisgIGlmICghXy5pc0FyZ3VtZW50cyhhcmd1
bWVudHMpKSB7CisgICAgXy5pc0FyZ3VtZW50cyA9IGZ1bmN0aW9uKG9iaikgeworICAgICAgcmV0
dXJuIF8uaGFzKG9iaiwgJ2NhbGxlZScpOworICAgIH07CisgIH0KKworICAvLyBPcHRpbWl6ZSBg
aXNGdW5jdGlvbmAgaWYgYXBwcm9wcmlhdGUuIFdvcmsgYXJvdW5kIHNvbWUgdHlwZW9mIGJ1Z3Mg
aW4gb2xkIHY4LAorICAvLyBJRSAxMSAoIzE2MjEpLCBhbmQgaW4gU2FmYXJpIDggKCMxOTI5KS4K
KyAgaWYgKHR5cGVvZiAvLi8gIT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgSW50OEFycmF5ICE9ICdv
YmplY3QnKSB7CisgICAgXy5pc0Z1bmN0aW9uID0gZnVuY3Rpb24ob2JqKSB7CisgICAgICByZXR1
cm4gdHlwZW9mIG9iaiA9PSAnZnVuY3Rpb24nIHx8IGZhbHNlOworICAgIH07CisgIH0KKworICAv
LyBJcyBhIGdpdmVuIG9iamVjdCBhIGZpbml0ZSBudW1iZXI/CisgIF8uaXNGaW5pdGUgPSBmdW5j
dGlvbihvYmopIHsKKyAgICByZXR1cm4gaXNGaW5pdGUob2JqKSAmJiAhaXNOYU4ocGFyc2VGbG9h
dChvYmopKTsKKyAgfTsKKworICAvLyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYE5hTmA/IChOYU4gaXMg
dGhlIG9ubHkgbnVtYmVyIHdoaWNoIGRvZXMgbm90IGVxdWFsIGl0c2VsZikuCisgIF8uaXNOYU4g
PSBmdW5jdGlvbihvYmopIHsKKyAgICByZXR1cm4gXy5pc051bWJlcihvYmopICYmIG9iaiAhPT0g
K29iajsKKyAgfTsKKworICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgYm9vbGVhbj8KKyAgXy5pc0Jv
b2xlYW4gPSBmdW5jdGlvbihvYmopIHsKKyAgICByZXR1cm4gb2JqID09PSB0cnVlIHx8IG9iaiA9
PT0gZmFsc2UgfHwgdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBCb29sZWFuXSc7Cisg
IH07CisKKyAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBlcXVhbCB0byBudWxsPworICBfLmlzTnVsbCA9
IGZ1bmN0aW9uKG9iaikgeworICAgIHJldHVybiBvYmogPT09IG51bGw7CisgIH07CisKKyAgLy8g
SXMgYSBnaXZlbiB2YXJpYWJsZSB1bmRlZmluZWQ/CisgIF8uaXNVbmRlZmluZWQgPSBmdW5jdGlv
bihvYmopIHsKKyAgICByZXR1cm4gb2JqID09PSB2b2lkIDA7CisgIH07CisKKyAgLy8gU2hvcnRj
dXQgZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBwcm9wZXJ0
eSBkaXJlY3RseQorICAvLyBvbiBpdHNlbGYgKGluIG90aGVyIHdvcmRzLCBub3Qgb24gYSBwcm90
b3R5cGUpLgorICBfLmhhcyA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7CisgICAgcmV0dXJuIG9iaiAh
PSBudWxsICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpOworICB9OworCisgIC8vIFV0
aWxpdHkgRnVuY3Rpb25zCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgLy8gUnVuIFVuZGVy
c2NvcmUuanMgaW4gKm5vQ29uZmxpY3QqIG1vZGUsIHJldHVybmluZyB0aGUgYF9gIHZhcmlhYmxl
IHRvIGl0cworICAvLyBwcmV2aW91cyBvd25lci4gUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUg
VW5kZXJzY29yZSBvYmplY3QuCisgIF8ubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkgeworICAgIHJv
b3QuXyA9IHByZXZpb3VzVW5kZXJzY29yZTsKKyAgICByZXR1cm4gdGhpczsKKyAgfTsKKworICAv
LyBLZWVwIHRoZSBpZGVudGl0eSBmdW5jdGlvbiBhcm91bmQgZm9yIGRlZmF1bHQgaXRlcmF0ZWVz
LgorICBfLmlkZW50aXR5ID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgICByZXR1cm4gdmFsdWU7Cisg
IH07CisKKyAgLy8gUHJlZGljYXRlLWdlbmVyYXRpbmcgZnVuY3Rpb25zLiBPZnRlbiB1c2VmdWwg
b3V0c2lkZSBvZiBVbmRlcnNjb3JlLgorICBfLmNvbnN0YW50ID0gZnVuY3Rpb24odmFsdWUpIHsK
KyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gdmFsdWU7CisgICAgfTsKKyAg
fTsKKworICBfLm5vb3AgPSBmdW5jdGlvbigpe307CisKKyAgXy5wcm9wZXJ0eSA9IHByb3BlcnR5
OworCisgIC8vIEdlbmVyYXRlcyBhIGZ1bmN0aW9uIGZvciBhIGdpdmVuIG9iamVjdCB0aGF0IHJl
dHVybnMgYSBnaXZlbiBwcm9wZXJ0eS4KKyAgXy5wcm9wZXJ0eU9mID0gZnVuY3Rpb24ob2JqKSB7
CisgICAgcmV0dXJuIG9iaiA9PSBudWxsID8gZnVuY3Rpb24oKXt9IDogZnVuY3Rpb24oa2V5KSB7
CisgICAgICByZXR1cm4gb2JqW2tleV07CisgICAgfTsKKyAgfTsKKworICAvLyBSZXR1cm5zIGEg
cHJlZGljYXRlIGZvciBjaGVja2luZyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQg
b2YKKyAgLy8gYGtleTp2YWx1ZWAgcGFpcnMuCisgIF8ubWF0Y2hlciA9IF8ubWF0Y2hlcyA9IGZ1
bmN0aW9uKGF0dHJzKSB7CisgICAgYXR0cnMgPSBfLmV4dGVuZE93bih7fSwgYXR0cnMpOworICAg
IHJldHVybiBmdW5jdGlvbihvYmopIHsKKyAgICAgIHJldHVybiBfLmlzTWF0Y2gob2JqLCBhdHRy
cyk7CisgICAgfTsKKyAgfTsKKworICAvLyBSdW4gYSBmdW5jdGlvbiAqKm4qKiB0aW1lcy4KKyAg
Xy50aW1lcyA9IGZ1bmN0aW9uKG4sIGl0ZXJhdGVlLCBjb250ZXh0KSB7CisgICAgdmFyIGFjY3Vt
ID0gQXJyYXkoTWF0aC5tYXgoMCwgbikpOworICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVy
YXRlZSwgY29udGV4dCwgMSk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIGFjY3Vt
W2ldID0gaXRlcmF0ZWUoaSk7CisgICAgcmV0dXJuIGFjY3VtOworICB9OworCisgIC8vIFJldHVy
biBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXggKGluY2x1c2l2ZSkuCisgIF8u
cmFuZG9tID0gZnVuY3Rpb24obWluLCBtYXgpIHsKKyAgICBpZiAobWF4ID09IG51bGwpIHsKKyAg
ICAgIG1heCA9IG1pbjsKKyAgICAgIG1pbiA9IDA7CisgICAgfQorICAgIHJldHVybiBtaW4gKyBN
YXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpOworICB9OworCisgIC8v
IEEgKHBvc3NpYmx5IGZhc3Rlcikgd2F5IHRvIGdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAgYXMg
YW4gaW50ZWdlci4KKyAgXy5ub3cgPSBEYXRlLm5vdyB8fCBmdW5jdGlvbigpIHsKKyAgICByZXR1
cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7CisgIH07CisKKyAgIC8vIExpc3Qgb2YgSFRNTCBlbnRp
dGllcyBmb3IgZXNjYXBpbmcuCisgIHZhciBlc2NhcGVNYXAgPSB7CisgICAgJyYnOiAnJmFtcDsn
LAorICAgICc8JzogJyZsdDsnLAorICAgICc+JzogJyZndDsnLAorICAgICciJzogJyZxdW90Oycs
CisgICAgIiciOiAnJiN4Mjc7JywKKyAgICAnYCc6ICcmI3g2MDsnCisgIH07CisgIHZhciB1bmVz
Y2FwZU1hcCA9IF8uaW52ZXJ0KGVzY2FwZU1hcCk7CisKKyAgLy8gRnVuY3Rpb25zIGZvciBlc2Nh
cGluZyBhbmQgdW5lc2NhcGluZyBzdHJpbmdzIHRvL2Zyb20gSFRNTCBpbnRlcnBvbGF0aW9uLgor
ICB2YXIgY3JlYXRlRXNjYXBlciA9IGZ1bmN0aW9uKG1hcCkgeworICAgIHZhciBlc2NhcGVyID0g
ZnVuY3Rpb24obWF0Y2gpIHsKKyAgICAgIHJldHVybiBtYXBbbWF0Y2hdOworICAgIH07CisgICAg
Ly8gUmVnZXhlcyBmb3IgaWRlbnRpZnlpbmcgYSBrZXkgdGhhdCBuZWVkcyB0byBiZSBlc2NhcGVk
CisgICAgdmFyIHNvdXJjZSA9ICcoPzonICsgXy5rZXlzKG1hcCkuam9pbignfCcpICsgJyknOwor
ICAgIHZhciB0ZXN0UmVnZXhwID0gUmVnRXhwKHNvdXJjZSk7CisgICAgdmFyIHJlcGxhY2VSZWdl
eHAgPSBSZWdFeHAoc291cmNlLCAnZycpOworICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHsK
KyAgICAgIHN0cmluZyA9IHN0cmluZyA9PSBudWxsID8gJycgOiAnJyArIHN0cmluZzsKKyAgICAg
IHJldHVybiB0ZXN0UmVnZXhwLnRlc3Qoc3RyaW5nKSA/IHN0cmluZy5yZXBsYWNlKHJlcGxhY2VS
ZWdleHAsIGVzY2FwZXIpIDogc3RyaW5nOworICAgIH07CisgIH07CisgIF8uZXNjYXBlID0gY3Jl
YXRlRXNjYXBlcihlc2NhcGVNYXApOworICBfLnVuZXNjYXBlID0gY3JlYXRlRXNjYXBlcih1bmVz
Y2FwZU1hcCk7CisKKyAgLy8gSWYgdGhlIHZhbHVlIG9mIHRoZSBuYW1lZCBgcHJvcGVydHlgIGlz
IGEgZnVuY3Rpb24gdGhlbiBpbnZva2UgaXQgd2l0aCB0aGUKKyAgLy8gYG9iamVjdGAgYXMgY29u
dGV4dDsgb3RoZXJ3aXNlLCByZXR1cm4gaXQuCisgIF8ucmVzdWx0ID0gZnVuY3Rpb24ob2JqZWN0
LCBwcm9wZXJ0eSwgZmFsbGJhY2spIHsKKyAgICB2YXIgdmFsdWUgPSBvYmplY3QgPT0gbnVsbCA/
IHZvaWQgMCA6IG9iamVjdFtwcm9wZXJ0eV07CisgICAgaWYgKHZhbHVlID09PSB2b2lkIDApIHsK
KyAgICAgIHZhbHVlID0gZmFsbGJhY2s7CisgICAgfQorICAgIHJldHVybiBfLmlzRnVuY3Rpb24o
dmFsdWUpID8gdmFsdWUuY2FsbChvYmplY3QpIDogdmFsdWU7CisgIH07CisKKyAgLy8gR2VuZXJh
dGUgYSB1bmlxdWUgaW50ZWdlciBpZCAodW5pcXVlIHdpdGhpbiB0aGUgZW50aXJlIGNsaWVudCBz
ZXNzaW9uKS4KKyAgLy8gVXNlZnVsIGZvciB0ZW1wb3JhcnkgRE9NIGlkcy4KKyAgdmFyIGlkQ291
bnRlciA9IDA7CisgIF8udW5pcXVlSWQgPSBmdW5jdGlvbihwcmVmaXgpIHsKKyAgICB2YXIgaWQg
PSArK2lkQ291bnRlciArICcnOworICAgIHJldHVybiBwcmVmaXggPyBwcmVmaXggKyBpZCA6IGlk
OworICB9OworCisgIC8vIEJ5IGRlZmF1bHQsIFVuZGVyc2NvcmUgdXNlcyBFUkItc3R5bGUgdGVt
cGxhdGUgZGVsaW1pdGVycywgY2hhbmdlIHRoZQorICAvLyBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0
dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMuCisgIF8udGVtcGxhdGVTZXR0aW5n
cyA9IHsKKyAgICBldmFsdWF0ZSAgICA6IC88JShbXHNcU10rPyklPi9nLAorICAgIGludGVycG9s
YXRlIDogLzwlPShbXHNcU10rPyklPi9nLAorICAgIGVzY2FwZSAgICAgIDogLzwlLShbXHNcU10r
PyklPi9nCisgIH07CisKKyAgLy8gV2hlbiBjdXN0b21pemluZyBgdGVtcGxhdGVTZXR0aW5nc2As
IGlmIHlvdSBkb24ndCB3YW50IHRvIGRlZmluZSBhbgorICAvLyBpbnRlcnBvbGF0aW9uLCBldmFs
dWF0aW9uIG9yIGVzY2FwaW5nIHJlZ2V4LCB3ZSBuZWVkIG9uZSB0aGF0IGlzCisgIC8vIGd1YXJh
bnRlZWQgbm90IHRvIG1hdGNoLgorICB2YXIgbm9NYXRjaCA9IC8oLileLzsKKworICAvLyBDZXJ0
YWluIGNoYXJhY3RlcnMgbmVlZCB0byBiZSBlc2NhcGVkIHNvIHRoYXQgdGhleSBjYW4gYmUgcHV0
IGludG8gYQorICAvLyBzdHJpbmcgbGl0ZXJhbC4KKyAgdmFyIGVzY2FwZXMgPSB7CisgICAgIici
OiAgICAgICInIiwKKyAgICAnXFwnOiAgICAgJ1xcJywKKyAgICAnXHInOiAgICAgJ3InLAorICAg
ICdcbic6ICAgICAnbicsCisgICAgJ1x1MjAyOCc6ICd1MjAyOCcsCisgICAgJ1x1MjAyOSc6ICd1
MjAyOScKKyAgfTsKKworICB2YXIgZXNjYXBlciA9IC9cXHwnfFxyfFxufFx1MjAyOHxcdTIwMjkv
ZzsKKworICB2YXIgZXNjYXBlQ2hhciA9IGZ1bmN0aW9uKG1hdGNoKSB7CisgICAgcmV0dXJuICdc
XCcgKyBlc2NhcGVzW21hdGNoXTsKKyAgfTsKKworICAvLyBKYXZhU2NyaXB0IG1pY3JvLXRlbXBs
YXRpbmcsIHNpbWlsYXIgdG8gSm9obiBSZXNpZydzIGltcGxlbWVudGF0aW9uLgorICAvLyBVbmRl
cnNjb3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVycywgcHJlc2VydmVz
IHdoaXRlc3BhY2UsCisgIC8vIGFuZCBjb3JyZWN0bHkgZXNjYXBlcyBxdW90ZXMgd2l0aGluIGlu
dGVycG9sYXRlZCBjb2RlLgorICAvLyBOQjogYG9sZFNldHRpbmdzYCBvbmx5IGV4aXN0cyBmb3Ig
YmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisgIF8udGVtcGxhdGUgPSBmdW5jdGlvbih0ZXh0LCBz
ZXR0aW5ncywgb2xkU2V0dGluZ3MpIHsKKyAgICBpZiAoIXNldHRpbmdzICYmIG9sZFNldHRpbmdz
KSBzZXR0aW5ncyA9IG9sZFNldHRpbmdzOworICAgIHNldHRpbmdzID0gXy5kZWZhdWx0cyh7fSwg
c2V0dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5ncyk7CisKKyAgICAvLyBDb21iaW5lIGRlbGltaXRl
cnMgaW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlvbi4KKyAgICB2YXIg
bWF0Y2hlciA9IFJlZ0V4cChbCisgICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNv
dXJjZSwKKyAgICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNoKS5zb3VyY2UsCisg
ICAgICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlCisgICAgXS5qb2luKCd8
JykgKyAnfCQnLCAnZycpOworCisgICAgLy8gQ29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBl
c2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS4KKyAgICB2YXIgaW5kZXggPSAw
OworICAgIHZhciBzb3VyY2UgPSAiX19wKz0nIjsKKyAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwg
ZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHsK
KyAgICAgIHNvdXJjZSArPSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UoZXNjYXBl
ciwgZXNjYXBlQ2hhcik7CisgICAgICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0aDsKKwor
ICAgICAgaWYgKGVzY2FwZSkgeworICAgICAgICBzb3VyY2UgKz0gIicrXG4oKF9fdD0oIiArIGVz
Y2FwZSArICIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcbiciOworICAgICAgfSBlbHNlIGlm
IChpbnRlcnBvbGF0ZSkgeworICAgICAgICBzb3VyY2UgKz0gIicrXG4oKF9fdD0oIiArIGludGVy
cG9sYXRlICsgIikpPT1udWxsPycnOl9fdCkrXG4nIjsKKyAgICAgIH0gZWxzZSBpZiAoZXZhbHVh
dGUpIHsKKyAgICAgICAgc291cmNlICs9ICInO1xuIiArIGV2YWx1YXRlICsgIlxuX19wKz0nIjsK
KyAgICAgIH0KKworICAgICAgLy8gQWRvYmUgVk1zIG5lZWQgdGhlIG1hdGNoIHJldHVybmVkIHRv
IHByb2R1Y2UgdGhlIGNvcnJlY3Qgb2ZmZXN0LgorICAgICAgcmV0dXJuIG1hdGNoOworICAgIH0p
OworICAgIHNvdXJjZSArPSAiJztcbiI7CisKKyAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBz
cGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2FsIHNjb3BlLgorICAgIGlmICghc2V0
dGluZ3MudmFyaWFibGUpIHNvdXJjZSA9ICd3aXRoKG9ianx8e30pe1xuJyArIHNvdXJjZSArICd9
XG4nOworCisgICAgc291cmNlID0gInZhciBfX3QsX19wPScnLF9faj1BcnJheS5wcm90b3R5cGUu
am9pbiwiICsKKyAgICAgICJwcmludD1mdW5jdGlvbigpe19fcCs9X19qLmNhbGwoYXJndW1lbnRz
LCcnKTt9O1xuIiArCisgICAgICBzb3VyY2UgKyAncmV0dXJuIF9fcDtcbic7CisKKyAgICB0cnkg
eworICAgICAgdmFyIHJlbmRlciA9IG5ldyBGdW5jdGlvbihzZXR0aW5ncy52YXJpYWJsZSB8fCAn
b2JqJywgJ18nLCBzb3VyY2UpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIGUuc291cmNlID0g
c291cmNlOworICAgICAgdGhyb3cgZTsKKyAgICB9CisKKyAgICB2YXIgdGVtcGxhdGUgPSBmdW5j
dGlvbihkYXRhKSB7CisgICAgICByZXR1cm4gcmVuZGVyLmNhbGwodGhpcywgZGF0YSwgXyk7Cisg
ICAgfTsKKworICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIHNvdXJjZSBhcyBhIGNvbnZlbmll
bmNlIGZvciBwcmVjb21waWxhdGlvbi4KKyAgICB2YXIgYXJndW1lbnQgPSBzZXR0aW5ncy52YXJp
YWJsZSB8fCAnb2JqJzsKKyAgICB0ZW1wbGF0ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyArIGFyZ3Vt
ZW50ICsgJyl7XG4nICsgc291cmNlICsgJ30nOworCisgICAgcmV0dXJuIHRlbXBsYXRlOworICB9
OworCisgIC8vIEFkZCBhICJjaGFpbiIgZnVuY3Rpb24uIFN0YXJ0IGNoYWluaW5nIGEgd3JhcHBl
ZCBVbmRlcnNjb3JlIG9iamVjdC4KKyAgXy5jaGFpbiA9IGZ1bmN0aW9uKG9iaikgeworICAgIHZh
ciBpbnN0YW5jZSA9IF8ob2JqKTsKKyAgICBpbnN0YW5jZS5fY2hhaW4gPSB0cnVlOworICAgIHJl
dHVybiBpbnN0YW5jZTsKKyAgfTsKKworICAvLyBPT1AKKyAgLy8gLS0tLS0tLS0tLS0tLS0tCisg
IC8vIElmIFVuZGVyc2NvcmUgaXMgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIGl0IHJldHVybnMgYSB3
cmFwcGVkIG9iamVjdCB0aGF0CisgIC8vIGNhbiBiZSB1c2VkIE9PLXN0eWxlLiBUaGlzIHdyYXBw
ZXIgaG9sZHMgYWx0ZXJlZCB2ZXJzaW9ucyBvZiBhbGwgdGhlCisgIC8vIHVuZGVyc2NvcmUgZnVu
Y3Rpb25zLiBXcmFwcGVkIG9iamVjdHMgbWF5IGJlIGNoYWluZWQuCisKKyAgLy8gSGVscGVyIGZ1
bmN0aW9uIHRvIGNvbnRpbnVlIGNoYWluaW5nIGludGVybWVkaWF0ZSByZXN1bHRzLgorICB2YXIg
cmVzdWx0ID0gZnVuY3Rpb24oaW5zdGFuY2UsIG9iaikgeworICAgIHJldHVybiBpbnN0YW5jZS5f
Y2hhaW4gPyBfKG9iaikuY2hhaW4oKSA6IG9iajsKKyAgfTsKKworICAvLyBBZGQgeW91ciBvd24g
Y3VzdG9tIGZ1bmN0aW9ucyB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QuCisgIF8ubWl4aW4gPSBm
dW5jdGlvbihvYmopIHsKKyAgICBfLmVhY2goXy5mdW5jdGlvbnMob2JqKSwgZnVuY3Rpb24obmFt
ZSkgeworICAgICAgdmFyIGZ1bmMgPSBfW25hbWVdID0gb2JqW25hbWVdOworICAgICAgXy5wcm90
b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGFyZ3MgPSBbdGhpcy5fd3Jh
cHBlZF07CisgICAgICAgIHB1c2guYXBwbHkoYXJncywgYXJndW1lbnRzKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdCh0aGlzLCBmdW5jLmFwcGx5KF8sIGFyZ3MpKTsKKyAgICAgIH07CisgICAgfSk7
CisgIH07CisKKyAgLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8gdGhl
IHdyYXBwZXIgb2JqZWN0LgorICBfLm1peGluKF8pOworCisgIC8vIEFkZCBhbGwgbXV0YXRvciBB
cnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuCisgIF8uZWFjaChbJ3BvcCcsICdwdXNoJywg
J3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5jdGlv
bihuYW1lKSB7CisgICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07CisgICAgXy5wcm90
b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBvYmogPSB0aGlzLl93cmFwcGVk
OworICAgICAgbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTsKKyAgICAgIGlmICgobmFtZSA9
PT0gJ3NoaWZ0JyB8fCBuYW1lID09PSAnc3BsaWNlJykgJiYgb2JqLmxlbmd0aCA9PT0gMCkgZGVs
ZXRlIG9ialswXTsKKyAgICAgIHJldHVybiByZXN1bHQodGhpcywgb2JqKTsKKyAgICB9OworICB9
KTsKKworICAvLyBBZGQgYWxsIGFjY2Vzc29yIEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBl
ci4KKyAgXy5lYWNoKFsnY29uY2F0JywgJ2pvaW4nLCAnc2xpY2UnXSwgZnVuY3Rpb24obmFtZSkg
eworICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdOworICAgIF8ucHJvdG90eXBlW25h
bWVdID0gZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gcmVzdWx0KHRoaXMsIG1ldGhvZC5hcHBs
eSh0aGlzLl93cmFwcGVkLCBhcmd1bWVudHMpKTsKKyAgICB9OworICB9KTsKKworICAvLyBFeHRy
YWN0cyB0aGUgcmVzdWx0IGZyb20gYSB3cmFwcGVkIGFuZCBjaGFpbmVkIG9iamVjdC4KKyAgXy5w
cm90b3R5cGUudmFsdWUgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5fd3JhcHBlZDsK
KyAgfTsKKworICAvLyBQcm92aWRlIHVud3JhcHBpbmcgcHJveHkgZm9yIHNvbWUgbWV0aG9kcyB1
c2VkIGluIGVuZ2luZSBvcGVyYXRpb25zCisgIC8vIHN1Y2ggYXMgYXJpdGhtZXRpYyBhbmQgSlNP
TiBzdHJpbmdpZmljYXRpb24uCisgIF8ucHJvdG90eXBlLnZhbHVlT2YgPSBfLnByb3RvdHlwZS50
b0pTT04gPSBfLnByb3RvdHlwZS52YWx1ZTsKKworICBfLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1
bmN0aW9uKCkgeworICAgIHJldHVybiAnJyArIHRoaXMuX3dyYXBwZWQ7CisgIH07CisKKyAgLy8g
QU1EIHJlZ2lzdHJhdGlvbiBoYXBwZW5zIGF0IHRoZSBlbmQgZm9yIGNvbXBhdGliaWxpdHkgd2l0
aCBBTUQgbG9hZGVycworICAvLyB0aGF0IG1heSBub3QgZW5mb3JjZSBuZXh0LXR1cm4gc2VtYW50
aWNzIG9uIG1vZHVsZXMuIEV2ZW4gdGhvdWdoIGdlbmVyYWwKKyAgLy8gcHJhY3RpY2UgZm9yIEFN
RCByZWdpc3RyYXRpb24gaXMgdG8gYmUgYW5vbnltb3VzLCB1bmRlcnNjb3JlIHJlZ2lzdGVycwor
ICAvLyBhcyBhIG5hbWVkIG1vZHVsZSBiZWNhdXNlLCBsaWtlIGpRdWVyeSwgaXQgaXMgYSBiYXNl
IGxpYnJhcnkgdGhhdCBpcworICAvLyBwb3B1bGFyIGVub3VnaCB0byBiZSBidW5kbGVkIGluIGEg
dGhpcmQgcGFydHkgbGliLCBidXQgbm90IGJlIHBhcnQgb2YKKyAgLy8gYW4gQU1EIGxvYWQgcmVx
dWVzdC4gVGhvc2UgY2FzZXMgY291bGQgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBhbgorICAvLyBh
bm9ueW1vdXMgZGVmaW5lKCkgaXMgY2FsbGVkIG91dHNpZGUgb2YgYSBsb2FkZXIgcmVxdWVzdC4K
KyAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgeworICAg
IGRlZmluZSgndW5kZXJzY29yZScsIFtdLCBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiBfOwor
ICAgIH0pOworICB9Cit9LmNhbGwodGhpcykpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFj
a2JvbmUvcGFja2FnZS5qc29uIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvcGFja2FnZS5qc29uCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjgyMzY2Y2ZjNjNlOTYzNjM1OWVlZmJkODEzYzQyZDhmYzU4ODNjYmIKLS0tIC9k
ZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9wYWNrYWdlLmpzb24KQEAgLTAsMCAr
MSwxMCBAQAoreworICAicHJpdmF0ZSI6IHRydWUsCisgICJkZXBlbmRlbmNpZXMiOiB7CisgICAg
ImJhY2tib25lIjogIl4xLjMuMyIsCisgICAgImpxdWVyeSI6ICJeMy4xLjEiLAorICAgICJ0b2Rv
bXZjLWFwcC1jc3MiOiAiXjIuMC4wIiwKKyAgICAidG9kb212Yy1jb21tb24iOiAiXjEuMC4xIiwK
KyAgICAidW5kZXJzY29yZSI6ICJeMS43LjAiCisgIH0KK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309839</attachid>
            <date>2017-05-11 18:12:49 -0700</date>
            <delta_ts>2017-05-11 19:46:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171305-20170511181248.patch</filename>
            <type>text/plain</type>
            <size>951482</size>
            <attacher name="Addy Osmani">addyo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NjgzCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGVjNDZiZjNlOGFh
MmIyMTYyMjE3ZWMxNDJiMGMzOWQwYTk5ZGFlZmMuLmUxZTE3ODg4ZWY4OWFlOThkZGIxMGM5MzZm
MjYzNTE3ODI4ZjViNzMgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTctMDUt
MTEgIEFkZHkgT3NtYW5pICA8YWRkeW9zbWFuaUBnbWFpbC5jb20+CisKKyAgICAgICAgU3BlZWRv
bWV0ZXI6IFVwZGF0ZSB0aGUgQmFja2JvbmUuanMgaW1wbGVtZW50YXRpb24gdG8gYSBtb3JlIHJl
Y2VudCBsaWJyYXJ5IHZlcnNpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3MTMwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFVwZGF0ZXMgdGhlIEJhY2tib25lLmpzIFRvZG9NVkMgaW1wbGVtZW50YXRp
b24gdG8gbGF0ZXN0CisKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvYm93ZXIuanNvbjogUmVtb3ZlZC4KKyAgICAg
ICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
YmFja2JvbmUvYm93ZXJfY29tcG9uZW50cy9iYWNrYm9uZS5sb2NhbFN0b3JhZ2UvYmFja2JvbmUu
bG9jYWxTdG9yYWdlLmpzOiBSZW1vdmVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9ib3dlcl9jb21wb25lbnRz
L2pxdWVyeS9qcXVlcnkuanM6IFJlbW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL2Jvd2VyX2NvbXBvbmVu
dHMvdG9kb212Yy1jb21tb24vYmFzZS5jc3M6IFJlbW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL2Jvd2Vy
X2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFzZS5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBT
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2Jv
bmUvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iZy5wbmc6IFJlbW92ZWQuCisgICAg
ICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2JhY2tib25lL2Jvd2VyX2NvbXBvbmVudHMvdW5kZXJzY29yZS91bmRlcnNjb3JlLmpzOiBSZW1v
dmVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9iYWNrYm9uZS9pbmRleC5odG1sOgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9qcy9hcHAuanM6
CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL2JhY2tib25lL2pzL2JhY2tib25lLnN5bmMuanM6IEFkZGVkLgorICAgICAgICAqIFNw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9u
ZS9qcy9jb2xsZWN0aW9ucy90b2Rvcy5qczoKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvanMvbW9kZWxzL3RvZG8u
anM6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2JhY2tib25lL2pzL3JvdXRlcnMvcm91dGVyLmpzOgorICAgICAgICAqIFNwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9q
cy92aWV3cy9hcHAtdmlldy5qczoKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvanMvdmlld3MvdG9kby12aWV3Lmpz
OgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9iYWNrYm9uZS9ub2RlX21vZHVsZXMvYmFja2JvbmUvYmFja2JvbmUuanM6IFJlbmFt
ZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9ib3dlcl9jb21wb25lbnRzL2JhY2tib25lL2Jh
Y2tib25lLmpzLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9ub2RlX21vZHVsZXMvanF1ZXJ5L2Rpc3QvanF1ZXJ5
LmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9p
bmRleC5jc3M6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21t
b24vYmFzZS5jc3M6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9ub2RlX21vZHVsZXMvdG9kb212Yy1j
b21tb24vYmFzZS5qczogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL25vZGVfbW9kdWxlcy91bmRlcnNj
b3JlL3VuZGVyc2NvcmUuanM6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9wYWNrYWdlLmpzb246IEFk
ZGVkLgorCiAyMDE3LTA0LTIxICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0OiBBZGQgcGVyZm9ybWFuY2UgdGVzdCB0byBtZWFzdXJl
IG1pZC13b3JkIGxpbmUgYnJlYWtpbmcgd2l0aCBsb25nIHRleHQuCmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9iYWNrYm9uZS9ib3dlci5qc29uIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvYm93ZXIu
anNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg1YTdhZDcwMGJmZmRlMDAxYzJl
OTg0ODQxMDczNmQ2MzU0NjViYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9ib3dlci5qc29uCisrKyAvZGV2L251bGwK
QEAgLTEsMTEgKzAsMCBAQAotewotICAibmFtZSI6ICJ0b2RvbXZjLWJhY2tib25lIiwKLSAgInZl
cnNpb24iOiAiMC4wLjAiLAotICAiZGVwZW5kZW5jaWVzIjogewotICAgICJiYWNrYm9uZSI6ICJ+
MS4wLjAiLAotICAgICJ1bmRlcnNjb3JlIjogIn4xLjQuNCIsCi0gICAgImpxdWVyeSI6ICJ+MS45
LjEiLAotICAgICJ0b2RvbXZjLWNvbW1vbiI6ICJ+MC4xLjQiLAotICAgICJiYWNrYm9uZS5sb2Nh
bFN0b3JhZ2UiOiAifjEuMS4wIgotICB9Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNr
Ym9uZS9ib3dlcl9jb21wb25lbnRzL2JhY2tib25lLmxvY2FsU3RvcmFnZS9iYWNrYm9uZS5sb2Nh
bFN0b3JhZ2UuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9ib3dlcl9jb21wb25lbnRzL2JhY2ti
b25lLmxvY2FsU3RvcmFnZS9iYWNrYm9uZS5sb2NhbFN0b3JhZ2UuanMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDUzYmJjOTU4YTQzMDFiMmUxNTcxZTM5ZDQ2YWJhYTVhN2FjM2NmMjcu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvYmFja2JvbmUvYm93ZXJfY29tcG9uZW50cy9iYWNrYm9uZS5sb2NhbFN0b3JhZ2UvYmFja2Jv
bmUubG9jYWxTdG9yYWdlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAKLS8qKgot
ICogQmFja2JvbmUgbG9jYWxTdG9yYWdlIEFkYXB0ZXIKLSAqIFZlcnNpb24gMS4xLjAKLSAqCi0g
KiBodHRwczovL2dpdGh1Yi5jb20vamVyb21lZ24vQmFja2JvbmUubG9jYWxTdG9yYWdlCi0gKi8K
LShmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkgewotICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICJm
dW5jdGlvbiIgJiYgZGVmaW5lLmFtZCkgewotICAgICAgLy8gQU1ELiBSZWdpc3RlciBhcyBhbiBh
bm9ueW1vdXMgbW9kdWxlLgotICAgICAgZGVmaW5lKFsidW5kZXJzY29yZSIsImJhY2tib25lIl0s
IGZ1bmN0aW9uKF8sIEJhY2tib25lKSB7Ci0gICAgICAgIC8vIFVzZSBnbG9iYWwgdmFyaWFibGVz
IGlmIHRoZSBsb2NhbHMgaXMgdW5kZWZpbmVkLgotICAgICAgICByZXR1cm4gZmFjdG9yeShfIHx8
IHJvb3QuXywgQmFja2JvbmUgfHwgcm9vdC5CYWNrYm9uZSk7Ci0gICAgICB9KTsKLSAgIH0gZWxz
ZSB7Ci0gICAgICAvLyBSZXF1aXJlSlMgaXNuJ3QgYmVpbmcgdXNlZC4gQXNzdW1lIHVuZGVyc2Nv
cmUgYW5kIGJhY2tib25lIGlzIGxvYWRlZCBpbiA8c2NyaXB0PiB0YWdzCi0gICAgICBmYWN0b3J5
KF8sIEJhY2tib25lKTsKLSAgIH0KLX0odGhpcywgZnVuY3Rpb24oXywgQmFja2JvbmUpIHsKLS8v
IEEgc2ltcGxlIG1vZHVsZSB0byByZXBsYWNlIGBCYWNrYm9uZS5zeW5jYCB3aXRoICpsb2NhbFN0
b3JhZ2UqLWJhc2VkCi0vLyBwZXJzaXN0ZW5jZS4gTW9kZWxzIGFyZSBnaXZlbiBHVUlEUywgYW5k
IHNhdmVkIGludG8gYSBKU09OIG9iamVjdC4gU2ltcGxlCi0vLyBhcyB0aGF0LgotCi0vLyBIb2xk
IHJlZmVyZW5jZSB0byBVbmRlcnNjb3JlLmpzIGFuZCBCYWNrYm9uZS5qcyBpbiB0aGUgY2xvc3Vy
ZSBpbiBvcmRlcgotLy8gdG8gbWFrZSB0aGluZ3Mgd29yayBldmVuIGlmIHRoZXkgYXJlIHJlbW92
ZWQgZnJvbSB0aGUgZ2xvYmFsIG5hbWVzcGFjZQotCi0vLyBHZW5lcmF0ZSBmb3VyIHJhbmRvbSBo
ZXggZGlnaXRzLgotZnVuY3Rpb24gUzQoKSB7Ci0gICByZXR1cm4gKCgoMStNYXRoLnJhbmRvbSgp
KSoweDEwMDAwKXwwKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpOwotfTsKLQotLy8gR2VuZXJh
dGUgYSBwc2V1ZG8tR1VJRCBieSBjb25jYXRlbmF0aW5nIHJhbmRvbSBoZXhhZGVjaW1hbC4KLWZ1
bmN0aW9uIGd1aWQoKSB7Ci0gICByZXR1cm4gKFM0KCkrUzQoKSsiLSIrUzQoKSsiLSIrUzQoKSsi
LSIrUzQoKSsiLSIrUzQoKStTNCgpK1M0KCkpOwotfTsKLQotLy8gT3VyIFN0b3JlIGlzIHJlcHJl
c2VudGVkIGJ5IGEgc2luZ2xlIEpTIG9iamVjdCBpbiAqbG9jYWxTdG9yYWdlKi4gQ3JlYXRlIGl0
Ci0vLyB3aXRoIGEgbWVhbmluZ2Z1bCBuYW1lLCBsaWtlIHRoZSBuYW1lIHlvdSdkIGdpdmUgYSB0
YWJsZS4KLS8vIHdpbmRvdy5TdG9yZSBpcyBkZXByZWN0YXRlZCwgdXNlIEJhY2tib25lLkxvY2Fs
U3RvcmFnZSBpbnN0ZWFkCi1CYWNrYm9uZS5Mb2NhbFN0b3JhZ2UgPSB3aW5kb3cuU3RvcmUgPSBm
dW5jdGlvbihuYW1lKSB7Ci0gIHRoaXMubmFtZSA9IG5hbWU7Ci0gIHZhciBzdG9yZSA9IHRoaXMu
bG9jYWxTdG9yYWdlKCkuZ2V0SXRlbSh0aGlzLm5hbWUpOwotICB0aGlzLnJlY29yZHMgPSAoc3Rv
cmUgJiYgc3RvcmUuc3BsaXQoIiwiKSkgfHwgW107Ci19OwotCi1fLmV4dGVuZChCYWNrYm9uZS5M
b2NhbFN0b3JhZ2UucHJvdG90eXBlLCB7Ci0KLSAgLy8gU2F2ZSB0aGUgY3VycmVudCBzdGF0ZSBv
ZiB0aGUgKipTdG9yZSoqIHRvICpsb2NhbFN0b3JhZ2UqLgotICBzYXZlOiBmdW5jdGlvbigpIHsK
LSAgICB0aGlzLmxvY2FsU3RvcmFnZSgpLnNldEl0ZW0odGhpcy5uYW1lLCB0aGlzLnJlY29yZHMu
am9pbigiLCIpKTsKLSAgfSwKLQotICAvLyBBZGQgYSBtb2RlbCwgZ2l2aW5nIGl0IGEgKGhvcGVm
dWxseSktdW5pcXVlIEdVSUQsIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeQotICAvLyBoYXZlIGFuIGlk
IG9mIGl0J3Mgb3duLgotICBjcmVhdGU6IGZ1bmN0aW9uKG1vZGVsKSB7Ci0gICAgaWYgKCFtb2Rl
bC5pZCkgewotICAgICAgbW9kZWwuaWQgPSBndWlkKCk7Ci0gICAgICBtb2RlbC5zZXQobW9kZWwu
aWRBdHRyaWJ1dGUsIG1vZGVsLmlkKTsKLSAgICB9Ci0gICAgdGhpcy5sb2NhbFN0b3JhZ2UoKS5z
ZXRJdGVtKHRoaXMubmFtZSsiLSIrbW9kZWwuaWQsIEpTT04uc3RyaW5naWZ5KG1vZGVsKSk7Ci0g
ICAgdGhpcy5yZWNvcmRzLnB1c2gobW9kZWwuaWQudG9TdHJpbmcoKSk7Ci0gICAgdGhpcy5zYXZl
KCk7Ci0gICAgcmV0dXJuIHRoaXMuZmluZChtb2RlbCk7Ci0gIH0sCi0KLSAgLy8gVXBkYXRlIGEg
bW9kZWwgYnkgcmVwbGFjaW5nIGl0cyBjb3B5IGluIGB0aGlzLmRhdGFgLgotICB1cGRhdGU6IGZ1
bmN0aW9uKG1vZGVsKSB7Ci0gICAgdGhpcy5sb2NhbFN0b3JhZ2UoKS5zZXRJdGVtKHRoaXMubmFt
ZSsiLSIrbW9kZWwuaWQsIEpTT04uc3RyaW5naWZ5KG1vZGVsKSk7Ci0gICAgaWYgKCFfLmluY2x1
ZGUodGhpcy5yZWNvcmRzLCBtb2RlbC5pZC50b1N0cmluZygpKSkKLSAgICAgIHRoaXMucmVjb3Jk
cy5wdXNoKG1vZGVsLmlkLnRvU3RyaW5nKCkpOyB0aGlzLnNhdmUoKTsKLSAgICByZXR1cm4gdGhp
cy5maW5kKG1vZGVsKTsKLSAgfSwKLQotICAvLyBSZXRyaWV2ZSBhIG1vZGVsIGZyb20gYHRoaXMu
ZGF0YWAgYnkgaWQuCi0gIGZpbmQ6IGZ1bmN0aW9uKG1vZGVsKSB7Ci0gICAgcmV0dXJuIHRoaXMu
anNvbkRhdGEodGhpcy5sb2NhbFN0b3JhZ2UoKS5nZXRJdGVtKHRoaXMubmFtZSsiLSIrbW9kZWwu
aWQpKTsKLSAgfSwKLQotICAvLyBSZXR1cm4gdGhlIGFycmF5IG9mIGFsbCBtb2RlbHMgY3VycmVu
dGx5IGluIHN0b3JhZ2UuCi0gIGZpbmRBbGw6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBfKHRo
aXMucmVjb3JkcykuY2hhaW4oKQotICAgICAgLm1hcChmdW5jdGlvbihpZCl7Ci0gICAgICAgIHJl
dHVybiB0aGlzLmpzb25EYXRhKHRoaXMubG9jYWxTdG9yYWdlKCkuZ2V0SXRlbSh0aGlzLm5hbWUr
Ii0iK2lkKSk7Ci0gICAgICB9LCB0aGlzKQotICAgICAgLmNvbXBhY3QoKQotICAgICAgLnZhbHVl
KCk7Ci0gIH0sCi0KLSAgLy8gRGVsZXRlIGEgbW9kZWwgZnJvbSBgdGhpcy5kYXRhYCwgcmV0dXJu
aW5nIGl0LgotICBkZXN0cm95OiBmdW5jdGlvbihtb2RlbCkgewotICAgIGlmIChtb2RlbC5pc05l
dygpKQotICAgICAgcmV0dXJuIGZhbHNlCi0gICAgdGhpcy5sb2NhbFN0b3JhZ2UoKS5yZW1vdmVJ
dGVtKHRoaXMubmFtZSsiLSIrbW9kZWwuaWQpOwotICAgIHRoaXMucmVjb3JkcyA9IF8ucmVqZWN0
KHRoaXMucmVjb3JkcywgZnVuY3Rpb24oaWQpewotICAgICAgcmV0dXJuIGlkID09PSBtb2RlbC5p
ZC50b1N0cmluZygpOwotICAgIH0pOwotICAgIHRoaXMuc2F2ZSgpOwotICAgIHJldHVybiBtb2Rl
bDsKLSAgfSwKLQotICBsb2NhbFN0b3JhZ2U6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBsb2Nh
bFN0b3JhZ2U7Ci0gIH0sCi0gIAotICAvLyBmaXggZm9yICJpbGxlZ2FsIGFjY2VzcyIgZXJyb3Ig
b24gQW5kcm9pZCB3aGVuIEpTT04ucGFyc2UgaXMgcGFzc2VkIG51bGwKLSAganNvbkRhdGE6IGZ1
bmN0aW9uIChkYXRhKSB7Ci0gICAgICByZXR1cm4gZGF0YSAmJiBKU09OLnBhcnNlKGRhdGEpOwot
ICB9Ci0KLX0pOwotCi0vLyBsb2NhbFN5bmMgZGVsZWdhdGUgdG8gdGhlIG1vZGVsIG9yIGNvbGxl
Y3Rpb24ncwotLy8gKmxvY2FsU3RvcmFnZSogcHJvcGVydHksIHdoaWNoIHNob3VsZCBiZSBhbiBp
bnN0YW5jZSBvZiBgU3RvcmVgLgotLy8gd2luZG93LlN0b3JlLnN5bmMgYW5kIEJhY2tib25lLmxv
Y2FsU3luYyBpcyBkZXByZWN0YXRlZCwgdXNlIEJhY2tib25lLkxvY2FsU3RvcmFnZS5zeW5jIGlu
c3RlYWQKLUJhY2tib25lLkxvY2FsU3RvcmFnZS5zeW5jID0gd2luZG93LlN0b3JlLnN5bmMgPSBC
YWNrYm9uZS5sb2NhbFN5bmMgPSBmdW5jdGlvbihtZXRob2QsIG1vZGVsLCBvcHRpb25zKSB7Ci0g
IHZhciBzdG9yZSA9IG1vZGVsLmxvY2FsU3RvcmFnZSB8fCBtb2RlbC5jb2xsZWN0aW9uLmxvY2Fs
U3RvcmFnZTsKLQotICB2YXIgcmVzcCwgZXJyb3JNZXNzYWdlLCBzeW5jRGZkID0gJC5EZWZlcnJl
ZCAmJiAkLkRlZmVycmVkKCk7IC8vSWYgJCBpcyBoYXZpbmcgRGVmZXJyZWQgLSB1c2UgaXQuIAot
Ci0gIHRyeSB7Ci0KLSAgICBzd2l0Y2ggKG1ldGhvZCkgewotICAgICAgY2FzZSAicmVhZCI6Ci0g
ICAgICAgIHJlc3AgPSBtb2RlbC5pZCAhPSB1bmRlZmluZWQgPyBzdG9yZS5maW5kKG1vZGVsKSA6
IHN0b3JlLmZpbmRBbGwoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlICJjcmVhdGUiOgot
ICAgICAgICByZXNwID0gc3RvcmUuY3JlYXRlKG1vZGVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlICJ1cGRhdGUiOgotICAgICAgICByZXNwID0gc3RvcmUudXBkYXRlKG1vZGVsKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlICJkZWxldGUiOgotICAgICAgICByZXNwID0gc3RvcmUu
ZGVzdHJveShtb2RlbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICB9IGNhdGNoKGVycm9y
KSB7Ci0gICAgaWYgKGVycm9yLmNvZGUgPT09IERPTUV4Y2VwdGlvbi5RVU9UQV9FWENFRURFRF9F
UlIgJiYgd2luZG93LmxvY2FsU3RvcmFnZS5sZW5ndGggPT09IDApCi0gICAgICBlcnJvck1lc3Nh
Z2UgPSAiUHJpdmF0ZSBicm93c2luZyBpcyB1bnN1cHBvcnRlZCI7Ci0gICAgZWxzZQotICAgICAg
ZXJyb3JNZXNzYWdlID0gZXJyb3IubWVzc2FnZTsKLSAgfQotCi0gIGlmIChyZXNwKSB7Ci0gICAg
aWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zdWNjZXNzKQotICAgICAgaWYgKEJhY2tib25lLlZFUlNJ
T04gPT09ICIwLjkuMTAiKSB7Ci0gICAgICAgIG9wdGlvbnMuc3VjY2Vzcyhtb2RlbCwgcmVzcCwg
b3B0aW9ucyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBvcHRpb25zLnN1Y2Nlc3MocmVzcCk7
Ci0gICAgICB9Ci0gICAgaWYgKHN5bmNEZmQpCi0gICAgICBzeW5jRGZkLnJlc29sdmUocmVzcCk7
Ci0KLSAgfSBlbHNlIHsKLSAgICBlcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2UgPyBlcnJvck1l
c3NhZ2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiUmVjb3JkIE5vdCBGb3Vu
ZCI7Ci0gICAgCi0gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lcnJvcikKLSAgICAgIGlmIChC
YWNrYm9uZS5WRVJTSU9OID09PSAiMC45LjEwIikgewotICAgICAgICBvcHRpb25zLmVycm9yKG1v
ZGVsLCBlcnJvck1lc3NhZ2UsIG9wdGlvbnMpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgb3B0
aW9ucy5lcnJvcihlcnJvck1lc3NhZ2UpOwotICAgICAgfQotICAgICAgCi0gICAgaWYgKHN5bmNE
ZmQpCi0gICAgICBzeW5jRGZkLnJlamVjdChlcnJvck1lc3NhZ2UpOwotICB9Ci0gIAotICAvLyBh
ZGQgY29tcGF0aWJpbGl0eSB3aXRoICQuYWpheAotICAvLyBhbHdheXMgZXhlY3V0ZSBjYWxsYmFj
ayBmb3Igc3VjY2VzcyBhbmQgZXJyb3IKLSAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5jb21wbGV0
ZSkgb3B0aW9ucy5jb21wbGV0ZShyZXNwKTsKLQotICByZXR1cm4gc3luY0RmZCAmJiBzeW5jRGZk
LnByb21pc2UoKTsKLX07Ci0KLUJhY2tib25lLmFqYXhTeW5jID0gQmFja2JvbmUuc3luYzsKLQot
QmFja2JvbmUuZ2V0U3luY01ldGhvZCA9IGZ1bmN0aW9uKG1vZGVsKSB7Ci0gIGlmKG1vZGVsLmxv
Y2FsU3RvcmFnZSB8fCAobW9kZWwuY29sbGVjdGlvbiAmJiBtb2RlbC5jb2xsZWN0aW9uLmxvY2Fs
U3RvcmFnZSkpIHsKLSAgICByZXR1cm4gQmFja2JvbmUubG9jYWxTeW5jOwotICB9Ci0KLSAgcmV0
dXJuIEJhY2tib25lLmFqYXhTeW5jOwotfTsKLQotLy8gT3ZlcnJpZGUgJ0JhY2tib25lLnN5bmMn
IHRvIGRlZmF1bHQgdG8gbG9jYWxTeW5jLAotLy8gdGhlIG9yaWdpbmFsICdCYWNrYm9uZS5zeW5j
JyBpcyBzdGlsbCBhdmFpbGFibGUgaW4gJ0JhY2tib25lLmFqYXhTeW5jJwotQmFja2JvbmUuc3lu
YyA9IGZ1bmN0aW9uKG1ldGhvZCwgbW9kZWwsIG9wdGlvbnMpIHsKLSAgcmV0dXJuIEJhY2tib25l
LmdldFN5bmNNZXRob2QobW9kZWwpLmFwcGx5KHRoaXMsIFttZXRob2QsIG1vZGVsLCBvcHRpb25z
XSk7Ci19OwotCi1yZXR1cm4gQmFja2JvbmUuTG9jYWxTdG9yYWdlOwotfSkpOwpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL2Jvd2Vy
X2NvbXBvbmVudHMvYmFja2JvbmUvYmFja2JvbmUuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9i
b3dlcl9jb21wb25lbnRzL2JhY2tib25lL2JhY2tib25lLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAzNTEyZDQyZmI0M2M4M2UyY2RkODY4MDRjOGVmMjc2YmRhMDA2ZmVmLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2Jh
Y2tib25lL2Jvd2VyX2NvbXBvbmVudHMvYmFja2JvbmUvYmFja2JvbmUuanMKKysrIC9kZXYvbnVs
bApAQCAtMSwxNTcxICswLDAgQEAKLS8vICAgICBCYWNrYm9uZS5qcyAxLjAuMAotCi0vLyAgICAg
KGMpIDIwMTAtMjAxMyBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgSW5jLgotLy8gICAg
IEJhY2tib25lIG1heSBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNl
LgotLy8gICAgIEZvciBhbGwgZGV0YWlscyBhbmQgZG9jdW1lbnRhdGlvbjoKLS8vICAgICBodHRw
Oi8vYmFja2JvbmVqcy5vcmcKLQotKGZ1bmN0aW9uKCl7Ci0KLSAgLy8gSW5pdGlhbCBTZXR1cAot
ICAvLyAtLS0tLS0tLS0tLS0tCi0KLSAgLy8gU2F2ZSBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFs
IG9iamVjdCAoYHdpbmRvd2AgaW4gdGhlIGJyb3dzZXIsIGBleHBvcnRzYAotICAvLyBvbiB0aGUg
c2VydmVyKS4KLSAgdmFyIHJvb3QgPSB0aGlzOwotCi0gIC8vIFNhdmUgdGhlIHByZXZpb3VzIHZh
bHVlIG9mIHRoZSBgQmFja2JvbmVgIHZhcmlhYmxlLCBzbyB0aGF0IGl0IGNhbiBiZQotICAvLyBy
ZXN0b3JlZCBsYXRlciBvbiwgaWYgYG5vQ29uZmxpY3RgIGlzIHVzZWQuCi0gIHZhciBwcmV2aW91
c0JhY2tib25lID0gcm9vdC5CYWNrYm9uZTsKLQotICAvLyBDcmVhdGUgbG9jYWwgcmVmZXJlbmNl
cyB0byBhcnJheSBtZXRob2RzIHdlJ2xsIHdhbnQgdG8gdXNlIGxhdGVyLgotICB2YXIgYXJyYXkg
PSBbXTsKLSAgdmFyIHB1c2ggPSBhcnJheS5wdXNoOwotICB2YXIgc2xpY2UgPSBhcnJheS5zbGlj
ZTsKLSAgdmFyIHNwbGljZSA9IGFycmF5LnNwbGljZTsKLQotICAvLyBUaGUgdG9wLWxldmVsIG5h
bWVzcGFjZS4gQWxsIHB1YmxpYyBCYWNrYm9uZSBjbGFzc2VzIGFuZCBtb2R1bGVzIHdpbGwKLSAg
Ly8gYmUgYXR0YWNoZWQgdG8gdGhpcy4gRXhwb3J0ZWQgZm9yIGJvdGggdGhlIGJyb3dzZXIgYW5k
IHRoZSBzZXJ2ZXIuCi0gIHZhciBCYWNrYm9uZTsKLSAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAn
dW5kZWZpbmVkJykgewotICAgIEJhY2tib25lID0gZXhwb3J0czsKLSAgfSBlbHNlIHsKLSAgICBC
YWNrYm9uZSA9IHJvb3QuQmFja2JvbmUgPSB7fTsKLSAgfQotCi0gIC8vIEN1cnJlbnQgdmVyc2lv
biBvZiB0aGUgbGlicmFyeS4gS2VlcCBpbiBzeW5jIHdpdGggYHBhY2thZ2UuanNvbmAuCi0gIEJh
Y2tib25lLlZFUlNJT04gPSAnMS4wLjAnOwotCi0gIC8vIFJlcXVpcmUgVW5kZXJzY29yZSwgaWYg
d2UncmUgb24gdGhlIHNlcnZlciwgYW5kIGl0J3Mgbm90IGFscmVhZHkgcHJlc2VudC4KLSAgdmFy
IF8gPSByb290Ll87Ci0gIGlmICghXyAmJiAodHlwZW9mIHJlcXVpcmUgIT09ICd1bmRlZmluZWQn
KSkgXyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKTsKLQotICAvLyBGb3IgQmFja2JvbmUncyBwdXJw
b3NlcywgalF1ZXJ5LCBaZXB0bywgRW5kZXIsIG9yIE15IExpYnJhcnkgKGtpZGRpbmcpIG93bnMK
LSAgLy8gdGhlIGAkYCB2YXJpYWJsZS4KLSAgQmFja2JvbmUuJCA9IHJvb3QualF1ZXJ5IHx8IHJv
b3QuWmVwdG8gfHwgcm9vdC5lbmRlciB8fCByb290LiQ7Ci0KLSAgLy8gUnVucyBCYWNrYm9uZS5q
cyBpbiAqbm9Db25mbGljdCogbW9kZSwgcmV0dXJuaW5nIHRoZSBgQmFja2JvbmVgIHZhcmlhYmxl
Ci0gIC8vIHRvIGl0cyBwcmV2aW91cyBvd25lci4gUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGlz
IEJhY2tib25lIG9iamVjdC4KLSAgQmFja2JvbmUubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkgewot
ICAgIHJvb3QuQmFja2JvbmUgPSBwcmV2aW91c0JhY2tib25lOwotICAgIHJldHVybiB0aGlzOwot
ICB9OwotCi0gIC8vIFR1cm4gb24gYGVtdWxhdGVIVFRQYCB0byBzdXBwb3J0IGxlZ2FjeSBIVFRQ
IHNlcnZlcnMuIFNldHRpbmcgdGhpcyBvcHRpb24KLSAgLy8gd2lsbCBmYWtlIGAiUFVUImAgYW5k
IGAiREVMRVRFImAgcmVxdWVzdHMgdmlhIHRoZSBgX21ldGhvZGAgcGFyYW1ldGVyIGFuZAotICAv
LyBzZXQgYSBgWC1IdHRwLU1ldGhvZC1PdmVycmlkZWAgaGVhZGVyLgotICBCYWNrYm9uZS5lbXVs
YXRlSFRUUCA9IGZhbHNlOwotCi0gIC8vIFR1cm4gb24gYGVtdWxhdGVKU09OYCB0byBzdXBwb3J0
IGxlZ2FjeSBzZXJ2ZXJzIHRoYXQgY2FuJ3QgZGVhbCB3aXRoIGRpcmVjdAotICAvLyBgYXBwbGlj
YXRpb24vanNvbmAgcmVxdWVzdHMgLi4uIHdpbGwgZW5jb2RlIHRoZSBib2R5IGFzCi0gIC8vIGBh
cHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRgIGluc3RlYWQgYW5kIHdpbGwgc2VuZCB0
aGUgbW9kZWwgaW4gYQotICAvLyBmb3JtIHBhcmFtIG5hbWVkIGBtb2RlbGAuCi0gIEJhY2tib25l
LmVtdWxhdGVKU09OID0gZmFsc2U7Ci0KLSAgLy8gQmFja2JvbmUuRXZlbnRzCi0gIC8vIC0tLS0t
LS0tLS0tLS0tLQotCi0gIC8vIEEgbW9kdWxlIHRoYXQgY2FuIGJlIG1peGVkIGluIHRvICphbnkg
b2JqZWN0KiBpbiBvcmRlciB0byBwcm92aWRlIGl0IHdpdGgKLSAgLy8gY3VzdG9tIGV2ZW50cy4g
WW91IG1heSBiaW5kIHdpdGggYG9uYCBvciByZW1vdmUgd2l0aCBgb2ZmYCBjYWxsYmFjawotICAv
LyBmdW5jdGlvbnMgdG8gYW4gZXZlbnQ7IGB0cmlnZ2VyYC1pbmcgYW4gZXZlbnQgZmlyZXMgYWxs
IGNhbGxiYWNrcyBpbgotICAvLyBzdWNjZXNzaW9uLgotICAvLwotICAvLyAgICAgdmFyIG9iamVj
dCA9IHt9OwotICAvLyAgICAgXy5leHRlbmQob2JqZWN0LCBCYWNrYm9uZS5FdmVudHMpOwotICAv
LyAgICAgb2JqZWN0Lm9uKCdleHBhbmQnLCBmdW5jdGlvbigpeyBhbGVydCgnZXhwYW5kZWQnKTsg
fSk7Ci0gIC8vICAgICBvYmplY3QudHJpZ2dlcignZXhwYW5kJyk7Ci0gIC8vCi0gIHZhciBFdmVu
dHMgPSBCYWNrYm9uZS5FdmVudHMgPSB7Ci0KLSAgICAvLyBCaW5kIGFuIGV2ZW50IHRvIGEgYGNh
bGxiYWNrYCBmdW5jdGlvbi4gUGFzc2luZyBgImFsbCJgIHdpbGwgYmluZAotICAgIC8vIHRoZSBj
YWxsYmFjayB0byBhbGwgZXZlbnRzIGZpcmVkLgotICAgIG9uOiBmdW5jdGlvbihuYW1lLCBjYWxs
YmFjaywgY29udGV4dCkgewotICAgICAgaWYgKCFldmVudHNBcGkodGhpcywgJ29uJywgbmFtZSwg
W2NhbGxiYWNrLCBjb250ZXh0XSkgfHwgIWNhbGxiYWNrKSByZXR1cm4gdGhpczsKLSAgICAgIHRo
aXMuX2V2ZW50cyB8fCAodGhpcy5fZXZlbnRzID0ge30pOwotICAgICAgdmFyIGV2ZW50cyA9IHRo
aXMuX2V2ZW50c1tuYW1lXSB8fCAodGhpcy5fZXZlbnRzW25hbWVdID0gW10pOwotICAgICAgZXZl
bnRzLnB1c2goe2NhbGxiYWNrOiBjYWxsYmFjaywgY29udGV4dDogY29udGV4dCwgY3R4OiBjb250
ZXh0IHx8IHRoaXN9KTsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0KLSAgICAvLyBCaW5k
IGFuIGV2ZW50IHRvIG9ubHkgYmUgdHJpZ2dlcmVkIGEgc2luZ2xlIHRpbWUuIEFmdGVyIHRoZSBm
aXJzdCB0aW1lCi0gICAgLy8gdGhlIGNhbGxiYWNrIGlzIGludm9rZWQsIGl0IHdpbGwgYmUgcmVt
b3ZlZC4KLSAgICBvbmNlOiBmdW5jdGlvbihuYW1lLCBjYWxsYmFjaywgY29udGV4dCkgewotICAg
ICAgaWYgKCFldmVudHNBcGkodGhpcywgJ29uY2UnLCBuYW1lLCBbY2FsbGJhY2ssIGNvbnRleHRd
KSB8fCAhY2FsbGJhY2spIHJldHVybiB0aGlzOwotICAgICAgdmFyIHNlbGYgPSB0aGlzOwotICAg
ICAgdmFyIG9uY2UgPSBfLm9uY2UoZnVuY3Rpb24oKSB7Ci0gICAgICAgIHNlbGYub2ZmKG5hbWUs
IG9uY2UpOwotICAgICAgICBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAg
fSk7Ci0gICAgICBvbmNlLl9jYWxsYmFjayA9IGNhbGxiYWNrOwotICAgICAgcmV0dXJuIHRoaXMu
b24obmFtZSwgb25jZSwgY29udGV4dCk7Ci0gICAgfSwKLQotICAgIC8vIFJlbW92ZSBvbmUgb3Ig
bWFueSBjYWxsYmFja3MuIElmIGBjb250ZXh0YCBpcyBudWxsLCByZW1vdmVzIGFsbAotICAgIC8v
IGNhbGxiYWNrcyB3aXRoIHRoYXQgZnVuY3Rpb24uIElmIGBjYWxsYmFja2AgaXMgbnVsbCwgcmVt
b3ZlcyBhbGwKLSAgICAvLyBjYWxsYmFja3MgZm9yIHRoZSBldmVudC4gSWYgYG5hbWVgIGlzIG51
bGwsIHJlbW92ZXMgYWxsIGJvdW5kCi0gICAgLy8gY2FsbGJhY2tzIGZvciBhbGwgZXZlbnRzLgot
ICAgIG9mZjogZnVuY3Rpb24obmFtZSwgY2FsbGJhY2ssIGNvbnRleHQpIHsKLSAgICAgIHZhciBy
ZXRhaW4sIGV2LCBldmVudHMsIG5hbWVzLCBpLCBsLCBqLCBrOwotICAgICAgaWYgKCF0aGlzLl9l
dmVudHMgfHwgIWV2ZW50c0FwaSh0aGlzLCAnb2ZmJywgbmFtZSwgW2NhbGxiYWNrLCBjb250ZXh0
XSkpIHJldHVybiB0aGlzOwotICAgICAgaWYgKCFuYW1lICYmICFjYWxsYmFjayAmJiAhY29udGV4
dCkgewotICAgICAgICB0aGlzLl9ldmVudHMgPSB7fTsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0g
ICAgICB9Ci0KLSAgICAgIG5hbWVzID0gbmFtZSA/IFtuYW1lXSA6IF8ua2V5cyh0aGlzLl9ldmVu
dHMpOwotICAgICAgZm9yIChpID0gMCwgbCA9IG5hbWVzLmxlbmd0aDsgaSA8IGw7IGkrKykgewot
ICAgICAgICBuYW1lID0gbmFtZXNbaV07Ci0gICAgICAgIGlmIChldmVudHMgPSB0aGlzLl9ldmVu
dHNbbmFtZV0pIHsKLSAgICAgICAgICB0aGlzLl9ldmVudHNbbmFtZV0gPSByZXRhaW4gPSBbXTsK
LSAgICAgICAgICBpZiAoY2FsbGJhY2sgfHwgY29udGV4dCkgewotICAgICAgICAgICAgZm9yIChq
ID0gMCwgayA9IGV2ZW50cy5sZW5ndGg7IGogPCBrOyBqKyspIHsKLSAgICAgICAgICAgICAgZXYg
PSBldmVudHNbal07Ci0gICAgICAgICAgICAgIGlmICgoY2FsbGJhY2sgJiYgY2FsbGJhY2sgIT09
IGV2LmNhbGxiYWNrICYmIGNhbGxiYWNrICE9PSBldi5jYWxsYmFjay5fY2FsbGJhY2spIHx8Ci0g
ICAgICAgICAgICAgICAgICAoY29udGV4dCAmJiBjb250ZXh0ICE9PSBldi5jb250ZXh0KSkgewot
ICAgICAgICAgICAgICAgIHJldGFpbi5wdXNoKGV2KTsKLSAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoIXJldGFpbi5sZW5ndGgpIGRlbGV0
ZSB0aGlzLl9ldmVudHNbbmFtZV07Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcmV0dXJu
IHRoaXM7Ci0gICAgfSwKLQotICAgIC8vIFRyaWdnZXIgb25lIG9yIG1hbnkgZXZlbnRzLCBmaXJp
bmcgYWxsIGJvdW5kIGNhbGxiYWNrcy4gQ2FsbGJhY2tzIGFyZQotICAgIC8vIHBhc3NlZCB0aGUg
c2FtZSBhcmd1bWVudHMgYXMgYHRyaWdnZXJgIGlzLCBhcGFydCBmcm9tIHRoZSBldmVudCBuYW1l
Ci0gICAgLy8gKHVubGVzcyB5b3UncmUgbGlzdGVuaW5nIG9uIGAiYWxsImAsIHdoaWNoIHdpbGwg
Y2F1c2UgeW91ciBjYWxsYmFjayB0bwotICAgIC8vIHJlY2VpdmUgdGhlIHRydWUgbmFtZSBvZiB0
aGUgZXZlbnQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50KS4KLSAgICB0cmlnZ2VyOiBmdW5jdGlvbihu
YW1lKSB7Ci0gICAgICBpZiAoIXRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXM7Ci0gICAgICB2YXIg
YXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKLSAgICAgIGlmICghZXZlbnRzQXBpKHRo
aXMsICd0cmlnZ2VyJywgbmFtZSwgYXJncykpIHJldHVybiB0aGlzOwotICAgICAgdmFyIGV2ZW50
cyA9IHRoaXMuX2V2ZW50c1tuYW1lXTsKLSAgICAgIHZhciBhbGxFdmVudHMgPSB0aGlzLl9ldmVu
dHMuYWxsOwotICAgICAgaWYgKGV2ZW50cykgdHJpZ2dlckV2ZW50cyhldmVudHMsIGFyZ3MpOwot
ICAgICAgaWYgKGFsbEV2ZW50cykgdHJpZ2dlckV2ZW50cyhhbGxFdmVudHMsIGFyZ3VtZW50cyk7
Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0gICAgLy8gVGVsbCB0aGlzIG9iamVjdCB0
byBzdG9wIGxpc3RlbmluZyB0byBlaXRoZXIgc3BlY2lmaWMgZXZlbnRzIC4uLiBvcgotICAgIC8v
IHRvIGV2ZXJ5IG9iamVjdCBpdCdzIGN1cnJlbnRseSBsaXN0ZW5pbmcgdG8uCi0gICAgc3RvcExp
c3RlbmluZzogZnVuY3Rpb24ob2JqLCBuYW1lLCBjYWxsYmFjaykgewotICAgICAgdmFyIGxpc3Rl
bmVycyA9IHRoaXMuX2xpc3RlbmVyczsKLSAgICAgIGlmICghbGlzdGVuZXJzKSByZXR1cm4gdGhp
czsKLSAgICAgIHZhciBkZWxldGVMaXN0ZW5lciA9ICFuYW1lICYmICFjYWxsYmFjazsKLSAgICAg
IGlmICh0eXBlb2YgbmFtZSA9PT0gJ29iamVjdCcpIGNhbGxiYWNrID0gdGhpczsKLSAgICAgIGlm
IChvYmopIChsaXN0ZW5lcnMgPSB7fSlbb2JqLl9saXN0ZW5lcklkXSA9IG9iajsKLSAgICAgIGZv
ciAodmFyIGlkIGluIGxpc3RlbmVycykgewotICAgICAgICBsaXN0ZW5lcnNbaWRdLm9mZihuYW1l
LCBjYWxsYmFjaywgdGhpcyk7Ci0gICAgICAgIGlmIChkZWxldGVMaXN0ZW5lcikgZGVsZXRlIHRo
aXMuX2xpc3RlbmVyc1tpZF07Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0K
LSAgfTsKLQotICAvLyBSZWd1bGFyIGV4cHJlc3Npb24gdXNlZCB0byBzcGxpdCBldmVudCBzdHJp
bmdzLgotICB2YXIgZXZlbnRTcGxpdHRlciA9IC9ccysvOwotCi0gIC8vIEltcGxlbWVudCBmYW5j
eSBmZWF0dXJlcyBvZiB0aGUgRXZlbnRzIEFQSSBzdWNoIGFzIG11bHRpcGxlIGV2ZW50Ci0gIC8v
IG5hbWVzIGAiY2hhbmdlIGJsdXIiYCBhbmQgalF1ZXJ5LXN0eWxlIGV2ZW50IG1hcHMgYHtjaGFu
Z2U6IGFjdGlvbn1gCi0gIC8vIGluIHRlcm1zIG9mIHRoZSBleGlzdGluZyBBUEkuCi0gIHZhciBl
dmVudHNBcGkgPSBmdW5jdGlvbihvYmosIGFjdGlvbiwgbmFtZSwgcmVzdCkgewotICAgIGlmICgh
bmFtZSkgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBIYW5kbGUgZXZlbnQgbWFwcy4KLSAgICBpZiAo
dHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7Ci0gICAgICBmb3IgKHZhciBrZXkgaW4gbmFtZSkg
ewotICAgICAgICBvYmpbYWN0aW9uXS5hcHBseShvYmosIFtrZXksIG5hbWVba2V5XV0uY29uY2F0
KHJlc3QpKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBI
YW5kbGUgc3BhY2Ugc2VwYXJhdGVkIGV2ZW50IG5hbWVzLgotICAgIGlmIChldmVudFNwbGl0dGVy
LnRlc3QobmFtZSkpIHsKLSAgICAgIHZhciBuYW1lcyA9IG5hbWUuc3BsaXQoZXZlbnRTcGxpdHRl
cik7Ci0gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG5hbWVzLmxlbmd0aDsgaSA8IGw7IGkrKykg
ewotICAgICAgICBvYmpbYWN0aW9uXS5hcHBseShvYmosIFtuYW1lc1tpXV0uY29uY2F0KHJlc3Qp
KTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLSAgfTsKLQotICAvLyBBIGRpZmZpY3VsdC10by1iZWxpZXZlLCBidXQgb3B0aW1pemVkIGlu
dGVybmFsIGRpc3BhdGNoIGZ1bmN0aW9uIGZvcgotICAvLyB0cmlnZ2VyaW5nIGV2ZW50cy4gVHJp
ZXMgdG8ga2VlcCB0aGUgdXN1YWwgY2FzZXMgc3BlZWR5IChtb3N0IGludGVybmFsCi0gIC8vIEJh
Y2tib25lIGV2ZW50cyBoYXZlIDMgYXJndW1lbnRzKS4KLSAgdmFyIHRyaWdnZXJFdmVudHMgPSBm
dW5jdGlvbihldmVudHMsIGFyZ3MpIHsKLSAgICB2YXIgZXYsIGkgPSAtMSwgbCA9IGV2ZW50cy5s
ZW5ndGgsIGExID0gYXJnc1swXSwgYTIgPSBhcmdzWzFdLCBhMyA9IGFyZ3NbMl07Ci0gICAgc3dp
dGNoIChhcmdzLmxlbmd0aCkgewotICAgICAgY2FzZSAwOiB3aGlsZSAoKytpIDwgbCkgKGV2ID0g
ZXZlbnRzW2ldKS5jYWxsYmFjay5jYWxsKGV2LmN0eCk7IHJldHVybjsKLSAgICAgIGNhc2UgMTog
d2hpbGUgKCsraSA8IGwpIChldiA9IGV2ZW50c1tpXSkuY2FsbGJhY2suY2FsbChldi5jdHgsIGEx
KTsgcmV0dXJuOwotICAgICAgY2FzZSAyOiB3aGlsZSAoKytpIDwgbCkgKGV2ID0gZXZlbnRzW2ld
KS5jYWxsYmFjay5jYWxsKGV2LmN0eCwgYTEsIGEyKTsgcmV0dXJuOwotICAgICAgY2FzZSAzOiB3
aGlsZSAoKytpIDwgbCkgKGV2ID0gZXZlbnRzW2ldKS5jYWxsYmFjay5jYWxsKGV2LmN0eCwgYTEs
IGEyLCBhMyk7IHJldHVybjsKLSAgICAgIGRlZmF1bHQ6IHdoaWxlICgrK2kgPCBsKSAoZXYgPSBl
dmVudHNbaV0pLmNhbGxiYWNrLmFwcGx5KGV2LmN0eCwgYXJncyk7Ci0gICAgfQotICB9OwotCi0g
IHZhciBsaXN0ZW5NZXRob2RzID0ge2xpc3RlblRvOiAnb24nLCBsaXN0ZW5Ub09uY2U6ICdvbmNl
J307Ci0KLSAgLy8gSW52ZXJzaW9uLW9mLWNvbnRyb2wgdmVyc2lvbnMgb2YgYG9uYCBhbmQgYG9u
Y2VgLiBUZWxsICp0aGlzKiBvYmplY3QgdG8KLSAgLy8gbGlzdGVuIHRvIGFuIGV2ZW50IGluIGFu
b3RoZXIgb2JqZWN0IC4uLiBrZWVwaW5nIHRyYWNrIG9mIHdoYXQgaXQncwotICAvLyBsaXN0ZW5p
bmcgdG8uCi0gIF8uZWFjaChsaXN0ZW5NZXRob2RzLCBmdW5jdGlvbihpbXBsZW1lbnRhdGlvbiwg
bWV0aG9kKSB7Ci0gICAgRXZlbnRzW21ldGhvZF0gPSBmdW5jdGlvbihvYmosIG5hbWUsIGNhbGxi
YWNrKSB7Ci0gICAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzIHx8ICh0aGlzLl9s
aXN0ZW5lcnMgPSB7fSk7Ci0gICAgICB2YXIgaWQgPSBvYmouX2xpc3RlbmVySWQgfHwgKG9iai5f
bGlzdGVuZXJJZCA9IF8udW5pcXVlSWQoJ2wnKSk7Ci0gICAgICBsaXN0ZW5lcnNbaWRdID0gb2Jq
OwotICAgICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0JykgY2FsbGJhY2sgPSB0aGlzOwot
ICAgICAgb2JqW2ltcGxlbWVudGF0aW9uXShuYW1lLCBjYWxsYmFjaywgdGhpcyk7Ci0gICAgICBy
ZXR1cm4gdGhpczsKLSAgICB9OwotICB9KTsKLQotICAvLyBBbGlhc2VzIGZvciBiYWNrd2FyZHMg
Y29tcGF0aWJpbGl0eS4KLSAgRXZlbnRzLmJpbmQgICA9IEV2ZW50cy5vbjsKLSAgRXZlbnRzLnVu
YmluZCA9IEV2ZW50cy5vZmY7Ci0KLSAgLy8gQWxsb3cgdGhlIGBCYWNrYm9uZWAgb2JqZWN0IHRv
IHNlcnZlIGFzIGEgZ2xvYmFsIGV2ZW50IGJ1cywgZm9yIGZvbGtzIHdobwotICAvLyB3YW50IGds
b2JhbCAicHVic3ViIiBpbiBhIGNvbnZlbmllbnQgcGxhY2UuCi0gIF8uZXh0ZW5kKEJhY2tib25l
LCBFdmVudHMpOwotCi0gIC8vIEJhY2tib25lLk1vZGVsCi0gIC8vIC0tLS0tLS0tLS0tLS0tCi0K
LSAgLy8gQmFja2JvbmUgKipNb2RlbHMqKiBhcmUgdGhlIGJhc2ljIGRhdGEgb2JqZWN0IGluIHRo
ZSBmcmFtZXdvcmsgLS0KLSAgLy8gZnJlcXVlbnRseSByZXByZXNlbnRpbmcgYSByb3cgaW4gYSB0
YWJsZSBpbiBhIGRhdGFiYXNlIG9uIHlvdXIgc2VydmVyLgotICAvLyBBIGRpc2NyZXRlIGNodW5r
IG9mIGRhdGEgYW5kIGEgYnVuY2ggb2YgdXNlZnVsLCByZWxhdGVkIG1ldGhvZHMgZm9yCi0gIC8v
IHBlcmZvcm1pbmcgY29tcHV0YXRpb25zIGFuZCB0cmFuc2Zvcm1hdGlvbnMgb24gdGhhdCBkYXRh
LgotCi0gIC8vIENyZWF0ZSBhIG5ldyBtb2RlbCB3aXRoIHRoZSBzcGVjaWZpZWQgYXR0cmlidXRl
cy4gQSBjbGllbnQgaWQgKGBjaWRgKQotICAvLyBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBh
bmQgYXNzaWduZWQgZm9yIHlvdS4KLSAgdmFyIE1vZGVsID0gQmFja2JvbmUuTW9kZWwgPSBmdW5j
dGlvbihhdHRyaWJ1dGVzLCBvcHRpb25zKSB7Ci0gICAgdmFyIGRlZmF1bHRzOwotICAgIHZhciBh
dHRycyA9IGF0dHJpYnV0ZXMgfHwge307Ci0gICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTsK
LSAgICB0aGlzLmNpZCA9IF8udW5pcXVlSWQoJ2MnKTsKLSAgICB0aGlzLmF0dHJpYnV0ZXMgPSB7
fTsKLSAgICBfLmV4dGVuZCh0aGlzLCBfLnBpY2sob3B0aW9ucywgbW9kZWxPcHRpb25zKSk7Ci0g
ICAgaWYgKG9wdGlvbnMucGFyc2UpIGF0dHJzID0gdGhpcy5wYXJzZShhdHRycywgb3B0aW9ucykg
fHwge307Ci0gICAgaWYgKGRlZmF1bHRzID0gXy5yZXN1bHQodGhpcywgJ2RlZmF1bHRzJykpIHsK
LSAgICAgIGF0dHJzID0gXy5kZWZhdWx0cyh7fSwgYXR0cnMsIGRlZmF1bHRzKTsKLSAgICB9Ci0g
ICAgdGhpcy5zZXQoYXR0cnMsIG9wdGlvbnMpOwotICAgIHRoaXMuY2hhbmdlZCA9IHt9OwotICAg
IHRoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICB9OwotCi0gIC8vIEEg
bGlzdCBvZiBvcHRpb25zIHRvIGJlIGF0dGFjaGVkIGRpcmVjdGx5IHRvIHRoZSBtb2RlbCwgaWYg
cHJvdmlkZWQuCi0gIHZhciBtb2RlbE9wdGlvbnMgPSBbJ3VybCcsICd1cmxSb290JywgJ2NvbGxl
Y3Rpb24nXTsKLQotICAvLyBBdHRhY2ggYWxsIGluaGVyaXRhYmxlIG1ldGhvZHMgdG8gdGhlIE1v
ZGVsIHByb3RvdHlwZS4KLSAgXy5leHRlbmQoTW9kZWwucHJvdG90eXBlLCBFdmVudHMsIHsKLQot
ICAgIC8vIEEgaGFzaCBvZiBhdHRyaWJ1dGVzIHdob3NlIGN1cnJlbnQgYW5kIHByZXZpb3VzIHZh
bHVlIGRpZmZlci4KLSAgICBjaGFuZ2VkOiBudWxsLAotCi0gICAgLy8gVGhlIHZhbHVlIHJldHVy
bmVkIGR1cmluZyB0aGUgbGFzdCBmYWlsZWQgdmFsaWRhdGlvbi4KLSAgICB2YWxpZGF0aW9uRXJy
b3I6IG51bGwsCi0KLSAgICAvLyBUaGUgZGVmYXVsdCBuYW1lIGZvciB0aGUgSlNPTiBgaWRgIGF0
dHJpYnV0ZSBpcyBgImlkImAuIE1vbmdvREIgYW5kCi0gICAgLy8gQ291Y2hEQiB1c2VycyBtYXkg
d2FudCB0byBzZXQgdGhpcyB0byBgIl9pZCJgLgotICAgIGlkQXR0cmlidXRlOiAnaWQnLAotCi0g
ICAgLy8gSW5pdGlhbGl6ZSBpcyBhbiBlbXB0eSBmdW5jdGlvbiBieSBkZWZhdWx0LiBPdmVycmlk
ZSBpdCB3aXRoIHlvdXIgb3duCi0gICAgLy8gaW5pdGlhbGl6YXRpb24gbG9naWMuCi0gICAgaW5p
dGlhbGl6ZTogZnVuY3Rpb24oKXt9LAotCi0gICAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgbW9k
ZWwncyBgYXR0cmlidXRlc2Agb2JqZWN0LgotICAgIHRvSlNPTjogZnVuY3Rpb24ob3B0aW9ucykg
ewotICAgICAgcmV0dXJuIF8uY2xvbmUodGhpcy5hdHRyaWJ1dGVzKTsKLSAgICB9LAotCi0gICAg
Ly8gUHJveHkgYEJhY2tib25lLnN5bmNgIGJ5IGRlZmF1bHQgLS0gYnV0IG92ZXJyaWRlIHRoaXMg
aWYgeW91IG5lZWQKLSAgICAvLyBjdXN0b20gc3luY2luZyBzZW1hbnRpY3MgZm9yICp0aGlzKiBw
YXJ0aWN1bGFyIG1vZGVsLgotICAgIHN5bmM6IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIEJh
Y2tib25lLnN5bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICB9LAotCi0gICAgLy8gR2V0
IHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUuCi0gICAgZ2V0OiBmdW5jdGlvbihhdHRyKSB7Ci0g
ICAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW2F0dHJdOwotICAgIH0sCi0KLSAgICAvLyBHZXQg
dGhlIEhUTUwtZXNjYXBlZCB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUuCi0gICAgZXNjYXBlOiBmdW5j
dGlvbihhdHRyKSB7Ci0gICAgICByZXR1cm4gXy5lc2NhcGUodGhpcy5nZXQoYXR0cikpOwotICAg
IH0sCi0KLSAgICAvLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXR0cmlidXRlIGNvbnRhaW5zIGEg
dmFsdWUgdGhhdCBpcyBub3QgbnVsbAotICAgIC8vIG9yIHVuZGVmaW5lZC4KLSAgICBoYXM6IGZ1
bmN0aW9uKGF0dHIpIHsKLSAgICAgIHJldHVybiB0aGlzLmdldChhdHRyKSAhPSBudWxsOwotICAg
IH0sCi0KLSAgICAvLyBTZXQgYSBoYXNoIG9mIG1vZGVsIGF0dHJpYnV0ZXMgb24gdGhlIG9iamVj
dCwgZmlyaW5nIGAiY2hhbmdlImAuIFRoaXMgaXMKLSAgICAvLyB0aGUgY29yZSBwcmltaXRpdmUg
b3BlcmF0aW9uIG9mIGEgbW9kZWwsIHVwZGF0aW5nIHRoZSBkYXRhIGFuZCBub3RpZnlpbmcKLSAg
ICAvLyBhbnlvbmUgd2hvIG5lZWRzIHRvIGtub3cgYWJvdXQgdGhlIGNoYW5nZSBpbiBzdGF0ZS4g
VGhlIGhlYXJ0IG9mIHRoZSBiZWFzdC4KLSAgICBzZXQ6IGZ1bmN0aW9uKGtleSwgdmFsLCBvcHRp
b25zKSB7Ci0gICAgICB2YXIgYXR0ciwgYXR0cnMsIHVuc2V0LCBjaGFuZ2VzLCBzaWxlbnQsIGNo
YW5naW5nLCBwcmV2LCBjdXJyZW50OwotICAgICAgaWYgKGtleSA9PSBudWxsKSByZXR1cm4gdGhp
czsKLQotICAgICAgLy8gSGFuZGxlIGJvdGggYCJrZXkiLCB2YWx1ZWAgYW5kIGB7a2V5OiB2YWx1
ZX1gIC1zdHlsZSBhcmd1bWVudHMuCi0gICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcp
IHsKLSAgICAgICAgYXR0cnMgPSBrZXk7Ci0gICAgICAgIG9wdGlvbnMgPSB2YWw7Ci0gICAgICB9
IGVsc2UgewotICAgICAgICAoYXR0cnMgPSB7fSlba2V5XSA9IHZhbDsKLSAgICAgIH0KLQotICAg
ICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTsKLQotICAgICAgLy8gUnVuIHZhbGlkYXRpb24u
Ci0gICAgICBpZiAoIXRoaXMuX3ZhbGlkYXRlKGF0dHJzLCBvcHRpb25zKSkgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAvLyBFeHRyYWN0IGF0dHJpYnV0ZXMgYW5kIG9wdGlvbnMuCi0gICAgICB1bnNl
dCAgICAgICAgICAgPSBvcHRpb25zLnVuc2V0OwotICAgICAgc2lsZW50ICAgICAgICAgID0gb3B0
aW9ucy5zaWxlbnQ7Ci0gICAgICBjaGFuZ2VzICAgICAgICAgPSBbXTsKLSAgICAgIGNoYW5naW5n
ICAgICAgICA9IHRoaXMuX2NoYW5naW5nOwotICAgICAgdGhpcy5fY2hhbmdpbmcgID0gdHJ1ZTsK
LQotICAgICAgaWYgKCFjaGFuZ2luZykgewotICAgICAgICB0aGlzLl9wcmV2aW91c0F0dHJpYnV0
ZXMgPSBfLmNsb25lKHRoaXMuYXR0cmlidXRlcyk7Ci0gICAgICAgIHRoaXMuY2hhbmdlZCA9IHt9
OwotICAgICAgfQotICAgICAgY3VycmVudCA9IHRoaXMuYXR0cmlidXRlcywgcHJldiA9IHRoaXMu
X3ByZXZpb3VzQXR0cmlidXRlczsKLQotICAgICAgLy8gQ2hlY2sgZm9yIGNoYW5nZXMgb2YgYGlk
YC4KLSAgICAgIGlmICh0aGlzLmlkQXR0cmlidXRlIGluIGF0dHJzKSB0aGlzLmlkID0gYXR0cnNb
dGhpcy5pZEF0dHJpYnV0ZV07Ci0KLSAgICAgIC8vIEZvciBlYWNoIGBzZXRgIGF0dHJpYnV0ZSwg
dXBkYXRlIG9yIGRlbGV0ZSB0aGUgY3VycmVudCB2YWx1ZS4KLSAgICAgIGZvciAoYXR0ciBpbiBh
dHRycykgewotICAgICAgICB2YWwgPSBhdHRyc1thdHRyXTsKLSAgICAgICAgaWYgKCFfLmlzRXF1
YWwoY3VycmVudFthdHRyXSwgdmFsKSkgY2hhbmdlcy5wdXNoKGF0dHIpOwotICAgICAgICBpZiAo
IV8uaXNFcXVhbChwcmV2W2F0dHJdLCB2YWwpKSB7Ci0gICAgICAgICAgdGhpcy5jaGFuZ2VkW2F0
dHJdID0gdmFsOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGRlbGV0ZSB0aGlzLmNoYW5n
ZWRbYXR0cl07Ci0gICAgICAgIH0KLSAgICAgICAgdW5zZXQgPyBkZWxldGUgY3VycmVudFthdHRy
XSA6IGN1cnJlbnRbYXR0cl0gPSB2YWw7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFRyaWdnZXIgYWxs
IHJlbGV2YW50IGF0dHJpYnV0ZSBjaGFuZ2VzLgotICAgICAgaWYgKCFzaWxlbnQpIHsKLSAgICAg
ICAgaWYgKGNoYW5nZXMubGVuZ3RoKSB0aGlzLl9wZW5kaW5nID0gdHJ1ZTsKLSAgICAgICAgZm9y
ICh2YXIgaSA9IDAsIGwgPSBjaGFuZ2VzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICAg
IHRoaXMudHJpZ2dlcignY2hhbmdlOicgKyBjaGFuZ2VzW2ldLCB0aGlzLCBjdXJyZW50W2NoYW5n
ZXNbaV1dLCBvcHRpb25zKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBZb3UgbWln
aHQgYmUgd29uZGVyaW5nIHdoeSB0aGVyZSdzIGEgYHdoaWxlYCBsb29wIGhlcmUuIENoYW5nZXMg
Y2FuCi0gICAgICAvLyBiZSByZWN1cnNpdmVseSBuZXN0ZWQgd2l0aGluIGAiY2hhbmdlImAgZXZl
bnRzLgotICAgICAgaWYgKGNoYW5naW5nKSByZXR1cm4gdGhpczsKLSAgICAgIGlmICghc2lsZW50
KSB7Ci0gICAgICAgIHdoaWxlICh0aGlzLl9wZW5kaW5nKSB7Ci0gICAgICAgICAgdGhpcy5fcGVu
ZGluZyA9IGZhbHNlOwotICAgICAgICAgIHRoaXMudHJpZ2dlcignY2hhbmdlJywgdGhpcywgb3B0
aW9ucyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTsK
LSAgICAgIHRoaXMuX2NoYW5naW5nID0gZmFsc2U7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9
LAotCi0gICAgLy8gUmVtb3ZlIGFuIGF0dHJpYnV0ZSBmcm9tIHRoZSBtb2RlbCwgZmlyaW5nIGAi
Y2hhbmdlImAuIGB1bnNldGAgaXMgYSBub29wCi0gICAgLy8gaWYgdGhlIGF0dHJpYnV0ZSBkb2Vz
bid0IGV4aXN0LgotICAgIHVuc2V0OiBmdW5jdGlvbihhdHRyLCBvcHRpb25zKSB7Ci0gICAgICBy
ZXR1cm4gdGhpcy5zZXQoYXR0ciwgdm9pZCAwLCBfLmV4dGVuZCh7fSwgb3B0aW9ucywge3Vuc2V0
OiB0cnVlfSkpOwotICAgIH0sCi0KLSAgICAvLyBDbGVhciBhbGwgYXR0cmlidXRlcyBvbiB0aGUg
bW9kZWwsIGZpcmluZyBgImNoYW5nZSJgLgotICAgIGNsZWFyOiBmdW5jdGlvbihvcHRpb25zKSB7
Ci0gICAgICB2YXIgYXR0cnMgPSB7fTsKLSAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmF0dHJp
YnV0ZXMpIGF0dHJzW2tleV0gPSB2b2lkIDA7Ci0gICAgICByZXR1cm4gdGhpcy5zZXQoYXR0cnMs
IF8uZXh0ZW5kKHt9LCBvcHRpb25zLCB7dW5zZXQ6IHRydWV9KSk7Ci0gICAgfSwKLQotICAgIC8v
IERldGVybWluZSBpZiB0aGUgbW9kZWwgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgYCJjaGFu
Z2UiYCBldmVudC4KLSAgICAvLyBJZiB5b3Ugc3BlY2lmeSBhbiBhdHRyaWJ1dGUgbmFtZSwgZGV0
ZXJtaW5lIGlmIHRoYXQgYXR0cmlidXRlIGhhcyBjaGFuZ2VkLgotICAgIGhhc0NoYW5nZWQ6IGZ1
bmN0aW9uKGF0dHIpIHsKLSAgICAgIGlmIChhdHRyID09IG51bGwpIHJldHVybiAhXy5pc0VtcHR5
KHRoaXMuY2hhbmdlZCk7Ci0gICAgICByZXR1cm4gXy5oYXModGhpcy5jaGFuZ2VkLCBhdHRyKTsK
LSAgICB9LAotCi0gICAgLy8gUmV0dXJuIGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgYXR0
cmlidXRlcyB0aGF0IGhhdmUgY2hhbmdlZCwgb3IKLSAgICAvLyBmYWxzZSBpZiB0aGVyZSBhcmUg
bm8gY2hhbmdlZCBhdHRyaWJ1dGVzLiBVc2VmdWwgZm9yIGRldGVybWluaW5nIHdoYXQKLSAgICAv
LyBwYXJ0cyBvZiBhIHZpZXcgbmVlZCB0byBiZSB1cGRhdGVkIGFuZC9vciB3aGF0IGF0dHJpYnV0
ZXMgbmVlZCB0byBiZQotICAgIC8vIHBlcnNpc3RlZCB0byB0aGUgc2VydmVyLiBVbnNldCBhdHRy
aWJ1dGVzIHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC4KLSAgICAvLyBZb3UgY2FuIGFsc28gcGFz
cyBhbiBhdHRyaWJ1dGVzIG9iamVjdCB0byBkaWZmIGFnYWluc3QgdGhlIG1vZGVsLAotICAgIC8v
IGRldGVybWluaW5nIGlmIHRoZXJlICp3b3VsZCBiZSogYSBjaGFuZ2UuCi0gICAgY2hhbmdlZEF0
dHJpYnV0ZXM6IGZ1bmN0aW9uKGRpZmYpIHsKLSAgICAgIGlmICghZGlmZikgcmV0dXJuIHRoaXMu
aGFzQ2hhbmdlZCgpID8gXy5jbG9uZSh0aGlzLmNoYW5nZWQpIDogZmFsc2U7Ci0gICAgICB2YXIg
dmFsLCBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgICB2YXIgb2xkID0gdGhpcy5fY2hhbmdpbmcgPyB0
aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMgOiB0aGlzLmF0dHJpYnV0ZXM7Ci0gICAgICBmb3IgKHZh
ciBhdHRyIGluIGRpZmYpIHsKLSAgICAgICAgaWYgKF8uaXNFcXVhbChvbGRbYXR0cl0sICh2YWwg
PSBkaWZmW2F0dHJdKSkpIGNvbnRpbnVlOwotICAgICAgICAoY2hhbmdlZCB8fCAoY2hhbmdlZCA9
IHt9KSlbYXR0cl0gPSB2YWw7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gY2hhbmdlZDsKLSAgICB9
LAotCi0gICAgLy8gR2V0IHRoZSBwcmV2aW91cyB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUsIHJlY29y
ZGVkIGF0IHRoZSB0aW1lIHRoZSBsYXN0Ci0gICAgLy8gYCJjaGFuZ2UiYCBldmVudCB3YXMgZmly
ZWQuCi0gICAgcHJldmlvdXM6IGZ1bmN0aW9uKGF0dHIpIHsKLSAgICAgIGlmIChhdHRyID09IG51
bGwgfHwgIXRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcykgcmV0dXJuIG51bGw7Ci0gICAgICByZXR1
cm4gdGhpcy5fcHJldmlvdXNBdHRyaWJ1dGVzW2F0dHJdOwotICAgIH0sCi0KLSAgICAvLyBHZXQg
YWxsIG9mIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBtb2RlbCBhdCB0aGUgdGltZSBvZiB0aGUgcHJl
dmlvdXMKLSAgICAvLyBgImNoYW5nZSJgIGV2ZW50LgotICAgIHByZXZpb3VzQXR0cmlidXRlczog
ZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gXy5jbG9uZSh0aGlzLl9wcmV2aW91c0F0dHJpYnV0
ZXMpOwotICAgIH0sCi0KLSAgICAvLyBGZXRjaCB0aGUgbW9kZWwgZnJvbSB0aGUgc2VydmVyLiBJ
ZiB0aGUgc2VydmVyJ3MgcmVwcmVzZW50YXRpb24gb2YgdGhlCi0gICAgLy8gbW9kZWwgZGlmZmVy
cyBmcm9tIGl0cyBjdXJyZW50IGF0dHJpYnV0ZXMsIHRoZXkgd2lsbCBiZSBvdmVycmlkZGVuLAot
ICAgIC8vIHRyaWdnZXJpbmcgYSBgImNoYW5nZSJgIGV2ZW50LgotICAgIGZldGNoOiBmdW5jdGlv
bihvcHRpb25zKSB7Ci0gICAgICBvcHRpb25zID0gb3B0aW9ucyA/IF8uY2xvbmUob3B0aW9ucykg
OiB7fTsKLSAgICAgIGlmIChvcHRpb25zLnBhcnNlID09PSB2b2lkIDApIG9wdGlvbnMucGFyc2Ug
PSB0cnVlOwotICAgICAgdmFyIG1vZGVsID0gdGhpczsKLSAgICAgIHZhciBzdWNjZXNzID0gb3B0
aW9ucy5zdWNjZXNzOwotICAgICAgb3B0aW9ucy5zdWNjZXNzID0gZnVuY3Rpb24ocmVzcCkgewot
ICAgICAgICBpZiAoIW1vZGVsLnNldChtb2RlbC5wYXJzZShyZXNwLCBvcHRpb25zKSwgb3B0aW9u
cykpIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHN1Y2Nlc3MpIHN1Y2Nlc3MobW9kZWwsIHJl
c3AsIG9wdGlvbnMpOwotICAgICAgICBtb2RlbC50cmlnZ2VyKCdzeW5jJywgbW9kZWwsIHJlc3As
IG9wdGlvbnMpOwotICAgICAgfTsKLSAgICAgIHdyYXBFcnJvcih0aGlzLCBvcHRpb25zKTsKLSAg
ICAgIHJldHVybiB0aGlzLnN5bmMoJ3JlYWQnLCB0aGlzLCBvcHRpb25zKTsKLSAgICB9LAotCi0g
ICAgLy8gU2V0IGEgaGFzaCBvZiBtb2RlbCBhdHRyaWJ1dGVzLCBhbmQgc3luYyB0aGUgbW9kZWwg
dG8gdGhlIHNlcnZlci4KLSAgICAvLyBJZiB0aGUgc2VydmVyIHJldHVybnMgYW4gYXR0cmlidXRl
cyBoYXNoIHRoYXQgZGlmZmVycywgdGhlIG1vZGVsJ3MKLSAgICAvLyBzdGF0ZSB3aWxsIGJlIGBz
ZXRgIGFnYWluLgotICAgIHNhdmU6IGZ1bmN0aW9uKGtleSwgdmFsLCBvcHRpb25zKSB7Ci0gICAg
ICB2YXIgYXR0cnMsIG1ldGhvZCwgeGhyLCBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzOwot
Ci0gICAgICAvLyBIYW5kbGUgYm90aCBgImtleSIsIHZhbHVlYCBhbmQgYHtrZXk6IHZhbHVlfWAg
LXN0eWxlIGFyZ3VtZW50cy4KLSAgICAgIGlmIChrZXkgPT0gbnVsbCB8fCB0eXBlb2Yga2V5ID09
PSAnb2JqZWN0JykgewotICAgICAgICBhdHRycyA9IGtleTsKLSAgICAgICAgb3B0aW9ucyA9IHZh
bDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIChhdHRycyA9IHt9KVtrZXldID0gdmFsOwotICAg
ICAgfQotCi0gICAgICAvLyBJZiB3ZSdyZSBub3Qgd2FpdGluZyBhbmQgYXR0cmlidXRlcyBleGlz
dCwgc2F2ZSBhY3RzIGFzIGBzZXQoYXR0cikuc2F2ZShudWxsLCBvcHRzKWAuCi0gICAgICBpZiAo
YXR0cnMgJiYgKCFvcHRpb25zIHx8ICFvcHRpb25zLndhaXQpICYmICF0aGlzLnNldChhdHRycywg
b3B0aW9ucykpIHJldHVybiBmYWxzZTsKLQotICAgICAgb3B0aW9ucyA9IF8uZXh0ZW5kKHt2YWxp
ZGF0ZTogdHJ1ZX0sIG9wdGlvbnMpOwotCi0gICAgICAvLyBEbyBub3QgcGVyc2lzdCBpbnZhbGlk
IG1vZGVscy4KLSAgICAgIGlmICghdGhpcy5fdmFsaWRhdGUoYXR0cnMsIG9wdGlvbnMpKSByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgIC8vIFNldCB0ZW1wb3JhcnkgYXR0cmlidXRlcyBpZiBge3dhaXQ6
IHRydWV9YC4KLSAgICAgIGlmIChhdHRycyAmJiBvcHRpb25zLndhaXQpIHsKLSAgICAgICAgdGhp
cy5hdHRyaWJ1dGVzID0gXy5leHRlbmQoe30sIGF0dHJpYnV0ZXMsIGF0dHJzKTsKLSAgICAgIH0K
LQotICAgICAgLy8gQWZ0ZXIgYSBzdWNjZXNzZnVsIHNlcnZlci1zaWRlIHNhdmUsIHRoZSBjbGll
bnQgaXMgKG9wdGlvbmFsbHkpCi0gICAgICAvLyB1cGRhdGVkIHdpdGggdGhlIHNlcnZlci1zaWRl
IHN0YXRlLgotICAgICAgaWYgKG9wdGlvbnMucGFyc2UgPT09IHZvaWQgMCkgb3B0aW9ucy5wYXJz
ZSA9IHRydWU7Ci0gICAgICB2YXIgbW9kZWwgPSB0aGlzOwotICAgICAgdmFyIHN1Y2Nlc3MgPSBv
cHRpb25zLnN1Y2Nlc3M7Ci0gICAgICBvcHRpb25zLnN1Y2Nlc3MgPSBmdW5jdGlvbihyZXNwKSB7
Ci0gICAgICAgIC8vIEVuc3VyZSBhdHRyaWJ1dGVzIGFyZSByZXN0b3JlZCBkdXJpbmcgc3luY2hy
b25vdXMgc2F2ZXMuCi0gICAgICAgIG1vZGVsLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwotICAg
ICAgICB2YXIgc2VydmVyQXR0cnMgPSBtb2RlbC5wYXJzZShyZXNwLCBvcHRpb25zKTsKLSAgICAg
ICAgaWYgKG9wdGlvbnMud2FpdCkgc2VydmVyQXR0cnMgPSBfLmV4dGVuZChhdHRycyB8fCB7fSwg
c2VydmVyQXR0cnMpOwotICAgICAgICBpZiAoXy5pc09iamVjdChzZXJ2ZXJBdHRycykgJiYgIW1v
ZGVsLnNldChzZXJ2ZXJBdHRycywgb3B0aW9ucykpIHsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHN1Y2Nlc3MpIHN1Y2Nlc3MobW9kZWwsIHJlc3AsIG9w
dGlvbnMpOwotICAgICAgICBtb2RlbC50cmlnZ2VyKCdzeW5jJywgbW9kZWwsIHJlc3AsIG9wdGlv
bnMpOwotICAgICAgfTsKLSAgICAgIHdyYXBFcnJvcih0aGlzLCBvcHRpb25zKTsKLQotICAgICAg
bWV0aG9kID0gdGhpcy5pc05ldygpID8gJ2NyZWF0ZScgOiAob3B0aW9ucy5wYXRjaCA/ICdwYXRj
aCcgOiAndXBkYXRlJyk7Ci0gICAgICBpZiAobWV0aG9kID09PSAncGF0Y2gnKSBvcHRpb25zLmF0
dHJzID0gYXR0cnM7Ci0gICAgICB4aHIgPSB0aGlzLnN5bmMobWV0aG9kLCB0aGlzLCBvcHRpb25z
KTsKLQotICAgICAgLy8gUmVzdG9yZSBhdHRyaWJ1dGVzLgotICAgICAgaWYgKGF0dHJzICYmIG9w
dGlvbnMud2FpdCkgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKLQotICAgICAgcmV0dXJu
IHhocjsKLSAgICB9LAotCi0gICAgLy8gRGVzdHJveSB0aGlzIG1vZGVsIG9uIHRoZSBzZXJ2ZXIg
aWYgaXQgd2FzIGFscmVhZHkgcGVyc2lzdGVkLgotICAgIC8vIE9wdGltaXN0aWNhbGx5IHJlbW92
ZXMgdGhlIG1vZGVsIGZyb20gaXRzIGNvbGxlY3Rpb24sIGlmIGl0IGhhcyBvbmUuCi0gICAgLy8g
SWYgYHdhaXQ6IHRydWVgIGlzIHBhc3NlZCwgd2FpdHMgZm9yIHRoZSBzZXJ2ZXIgdG8gcmVzcG9u
ZCBiZWZvcmUgcmVtb3ZhbC4KLSAgICBkZXN0cm95OiBmdW5jdGlvbihvcHRpb25zKSB7Ci0gICAg
ICBvcHRpb25zID0gb3B0aW9ucyA/IF8uY2xvbmUob3B0aW9ucykgOiB7fTsKLSAgICAgIHZhciBt
b2RlbCA9IHRoaXM7Ci0gICAgICB2YXIgc3VjY2VzcyA9IG9wdGlvbnMuc3VjY2VzczsKLQotICAg
ICAgdmFyIGRlc3Ryb3kgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgbW9kZWwudHJpZ2dlcignZGVz
dHJveScsIG1vZGVsLCBtb2RlbC5jb2xsZWN0aW9uLCBvcHRpb25zKTsKLSAgICAgIH07Ci0KLSAg
ICAgIG9wdGlvbnMuc3VjY2VzcyA9IGZ1bmN0aW9uKHJlc3ApIHsKLSAgICAgICAgaWYgKG9wdGlv
bnMud2FpdCB8fCBtb2RlbC5pc05ldygpKSBkZXN0cm95KCk7Ci0gICAgICAgIGlmIChzdWNjZXNz
KSBzdWNjZXNzKG1vZGVsLCByZXNwLCBvcHRpb25zKTsKLSAgICAgICAgaWYgKCFtb2RlbC5pc05l
dygpKSBtb2RlbC50cmlnZ2VyKCdzeW5jJywgbW9kZWwsIHJlc3AsIG9wdGlvbnMpOwotICAgICAg
fTsKLQotICAgICAgaWYgKHRoaXMuaXNOZXcoKSkgewotICAgICAgICBvcHRpb25zLnN1Y2Nlc3Mo
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgd3JhcEVycm9yKHRoaXMs
IG9wdGlvbnMpOwotCi0gICAgICB2YXIgeGhyID0gdGhpcy5zeW5jKCdkZWxldGUnLCB0aGlzLCBv
cHRpb25zKTsKLSAgICAgIGlmICghb3B0aW9ucy53YWl0KSBkZXN0cm95KCk7Ci0gICAgICByZXR1
cm4geGhyOwotICAgIH0sCi0KLSAgICAvLyBEZWZhdWx0IFVSTCBmb3IgdGhlIG1vZGVsJ3MgcmVw
cmVzZW50YXRpb24gb24gdGhlIHNlcnZlciAtLSBpZiB5b3UncmUKLSAgICAvLyB1c2luZyBCYWNr
Ym9uZSdzIHJlc3RmdWwgbWV0aG9kcywgb3ZlcnJpZGUgdGhpcyB0byBjaGFuZ2UgdGhlIGVuZHBv
aW50Ci0gICAgLy8gdGhhdCB3aWxsIGJlIGNhbGxlZC4KLSAgICB1cmw6IGZ1bmN0aW9uKCkgewot
ICAgICAgdmFyIGJhc2UgPSBfLnJlc3VsdCh0aGlzLCAndXJsUm9vdCcpIHx8IF8ucmVzdWx0KHRo
aXMuY29sbGVjdGlvbiwgJ3VybCcpIHx8IHVybEVycm9yKCk7Ci0gICAgICBpZiAodGhpcy5pc05l
dygpKSByZXR1cm4gYmFzZTsKLSAgICAgIHJldHVybiBiYXNlICsgKGJhc2UuY2hhckF0KGJhc2Uu
bGVuZ3RoIC0gMSkgPT09ICcvJyA/ICcnIDogJy8nKSArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlz
LmlkKTsKLSAgICB9LAotCi0gICAgLy8gKipwYXJzZSoqIGNvbnZlcnRzIGEgcmVzcG9uc2UgaW50
byB0aGUgaGFzaCBvZiBhdHRyaWJ1dGVzIHRvIGJlIGBzZXRgIG9uCi0gICAgLy8gdGhlIG1vZGVs
LiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBqdXN0IHRvIHBhc3MgdGhlIHJlc3BvbnNl
IGFsb25nLgotICAgIHBhcnNlOiBmdW5jdGlvbihyZXNwLCBvcHRpb25zKSB7Ci0gICAgICByZXR1
cm4gcmVzcDsKLSAgICB9LAotCi0gICAgLy8gQ3JlYXRlIGEgbmV3IG1vZGVsIHdpdGggaWRlbnRp
Y2FsIGF0dHJpYnV0ZXMgdG8gdGhpcyBvbmUuCi0gICAgY2xvbmU6IGZ1bmN0aW9uKCkgewotICAg
ICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuYXR0cmlidXRlcyk7Ci0gICAgfSwK
LQotICAgIC8vIEEgbW9kZWwgaXMgbmV3IGlmIGl0IGhhcyBuZXZlciBiZWVuIHNhdmVkIHRvIHRo
ZSBzZXJ2ZXIsIGFuZCBsYWNrcyBhbiBpZC4KLSAgICBpc05ldzogZnVuY3Rpb24oKSB7Ci0gICAg
ICByZXR1cm4gdGhpcy5pZCA9PSBudWxsOwotICAgIH0sCi0KLSAgICAvLyBDaGVjayBpZiB0aGUg
bW9kZWwgaXMgY3VycmVudGx5IGluIGEgdmFsaWQgc3RhdGUuCi0gICAgaXNWYWxpZDogZnVuY3Rp
b24ob3B0aW9ucykgewotICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHt9LCBfLmV4dGVuZChv
cHRpb25zIHx8IHt9LCB7IHZhbGlkYXRlOiB0cnVlIH0pKTsKLSAgICB9LAotCi0gICAgLy8gUnVu
IHZhbGlkYXRpb24gYWdhaW5zdCB0aGUgbmV4dCBjb21wbGV0ZSBzZXQgb2YgbW9kZWwgYXR0cmli
dXRlcywKLSAgICAvLyByZXR1cm5pbmcgYHRydWVgIGlmIGFsbCBpcyB3ZWxsLiBPdGhlcndpc2Us
IGZpcmUgYW4gYCJpbnZhbGlkImAgZXZlbnQuCi0gICAgX3ZhbGlkYXRlOiBmdW5jdGlvbihhdHRy
cywgb3B0aW9ucykgewotICAgICAgaWYgKCFvcHRpb25zLnZhbGlkYXRlIHx8ICF0aGlzLnZhbGlk
YXRlKSByZXR1cm4gdHJ1ZTsKLSAgICAgIGF0dHJzID0gXy5leHRlbmQoe30sIHRoaXMuYXR0cmli
dXRlcywgYXR0cnMpOwotICAgICAgdmFyIGVycm9yID0gdGhpcy52YWxpZGF0aW9uRXJyb3IgPSB0
aGlzLnZhbGlkYXRlKGF0dHJzLCBvcHRpb25zKSB8fCBudWxsOwotICAgICAgaWYgKCFlcnJvcikg
cmV0dXJuIHRydWU7Ci0gICAgICB0aGlzLnRyaWdnZXIoJ2ludmFsaWQnLCB0aGlzLCBlcnJvciwg
Xy5leHRlbmQob3B0aW9ucyB8fCB7fSwge3ZhbGlkYXRpb25FcnJvcjogZXJyb3J9KSk7Ci0gICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gIH0pOwotCi0gIC8vIFVuZGVyc2NvcmUgbWV0aG9k
cyB0aGF0IHdlIHdhbnQgdG8gaW1wbGVtZW50IG9uIHRoZSBNb2RlbC4KLSAgdmFyIG1vZGVsTWV0
aG9kcyA9IFsna2V5cycsICd2YWx1ZXMnLCAncGFpcnMnLCAnaW52ZXJ0JywgJ3BpY2snLCAnb21p
dCddOwotCi0gIC8vIE1peCBpbiBlYWNoIFVuZGVyc2NvcmUgbWV0aG9kIGFzIGEgcHJveHkgdG8g
YE1vZGVsI2F0dHJpYnV0ZXNgLgotICBfLmVhY2gobW9kZWxNZXRob2RzLCBmdW5jdGlvbihtZXRo
b2QpIHsKLSAgICBNb2RlbC5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKCkgewotICAgICAg
dmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyk7Ci0gICAgICBhcmdzLnVuc2hpZnQodGhp
cy5hdHRyaWJ1dGVzKTsKLSAgICAgIHJldHVybiBfW21ldGhvZF0uYXBwbHkoXywgYXJncyk7Ci0g
ICAgfTsKLSAgfSk7Ci0KLSAgLy8gQmFja2JvbmUuQ29sbGVjdGlvbgotICAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLSAgLy8gSWYgbW9kZWxzIHRlbmQgdG8gcmVwcmVzZW50IGEgc2luZ2xlIHJv
dyBvZiBkYXRhLCBhIEJhY2tib25lIENvbGxlY3Rpb24gaXMKLSAgLy8gbW9yZSBhbmFsYWdvdXMg
dG8gYSB0YWJsZSBmdWxsIG9mIGRhdGEgLi4uIG9yIGEgc21hbGwgc2xpY2Ugb3IgcGFnZSBvZiB0
aGF0Ci0gIC8vIHRhYmxlLCBvciBhIGNvbGxlY3Rpb24gb2Ygcm93cyB0aGF0IGJlbG9uZyB0b2dl
dGhlciBmb3IgYSBwYXJ0aWN1bGFyIHJlYXNvbgotICAvLyAtLSBhbGwgb2YgdGhlIG1lc3NhZ2Vz
IGluIHRoaXMgcGFydGljdWxhciBmb2xkZXIsIGFsbCBvZiB0aGUgZG9jdW1lbnRzCi0gIC8vIGJl
bG9uZ2luZyB0byB0aGlzIHBhcnRpY3VsYXIgYXV0aG9yLCBhbmQgc28gb24uIENvbGxlY3Rpb25z
IG1haW50YWluCi0gIC8vIGluZGV4ZXMgb2YgdGhlaXIgbW9kZWxzLCBib3RoIGluIG9yZGVyLCBh
bmQgZm9yIGxvb2t1cCBieSBgaWRgLgotCi0gIC8vIENyZWF0ZSBhIG5ldyAqKkNvbGxlY3Rpb24q
KiwgcGVyaGFwcyB0byBjb250YWluIGEgc3BlY2lmaWMgdHlwZSBvZiBgbW9kZWxgLgotICAvLyBJ
ZiBhIGBjb21wYXJhdG9yYCBpcyBzcGVjaWZpZWQsIHRoZSBDb2xsZWN0aW9uIHdpbGwgbWFpbnRh
aW4KLSAgLy8gaXRzIG1vZGVscyBpbiBzb3J0IG9yZGVyLCBhcyB0aGV5J3JlIGFkZGVkIGFuZCBy
ZW1vdmVkLgotICB2YXIgQ29sbGVjdGlvbiA9IEJhY2tib25lLkNvbGxlY3Rpb24gPSBmdW5jdGlv
bihtb2RlbHMsIG9wdGlvbnMpIHsKLSAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30pOwotICAg
IGlmIChvcHRpb25zLnVybCkgdGhpcy51cmwgPSBvcHRpb25zLnVybDsKLSAgICBpZiAob3B0aW9u
cy5tb2RlbCkgdGhpcy5tb2RlbCA9IG9wdGlvbnMubW9kZWw7Ci0gICAgaWYgKG9wdGlvbnMuY29t
cGFyYXRvciAhPT0gdm9pZCAwKSB0aGlzLmNvbXBhcmF0b3IgPSBvcHRpb25zLmNvbXBhcmF0b3I7
Ci0gICAgdGhpcy5fcmVzZXQoKTsKLSAgICB0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJn
dW1lbnRzKTsKLSAgICBpZiAobW9kZWxzKSB0aGlzLnJlc2V0KG1vZGVscywgXy5leHRlbmQoe3Np
bGVudDogdHJ1ZX0sIG9wdGlvbnMpKTsKLSAgfTsKLQotICAvLyBEZWZhdWx0IG9wdGlvbnMgZm9y
IGBDb2xsZWN0aW9uI3NldGAuCi0gIHZhciBzZXRPcHRpb25zID0ge2FkZDogdHJ1ZSwgcmVtb3Zl
OiB0cnVlLCBtZXJnZTogdHJ1ZX07Ci0gIHZhciBhZGRPcHRpb25zID0ge2FkZDogdHJ1ZSwgbWVy
Z2U6IGZhbHNlLCByZW1vdmU6IGZhbHNlfTsKLQotICAvLyBEZWZpbmUgdGhlIENvbGxlY3Rpb24n
cyBpbmhlcml0YWJsZSBtZXRob2RzLgotICBfLmV4dGVuZChDb2xsZWN0aW9uLnByb3RvdHlwZSwg
RXZlbnRzLCB7Ci0KLSAgICAvLyBUaGUgZGVmYXVsdCBtb2RlbCBmb3IgYSBjb2xsZWN0aW9uIGlz
IGp1c3QgYSAqKkJhY2tib25lLk1vZGVsKiouCi0gICAgLy8gVGhpcyBzaG91bGQgYmUgb3ZlcnJp
ZGRlbiBpbiBtb3N0IGNhc2VzLgotICAgIG1vZGVsOiBNb2RlbCwKLQotICAgIC8vIEluaXRpYWxp
emUgaXMgYW4gZW1wdHkgZnVuY3Rpb24gYnkgZGVmYXVsdC4gT3ZlcnJpZGUgaXQgd2l0aCB5b3Vy
IG93bgotICAgIC8vIGluaXRpYWxpemF0aW9uIGxvZ2ljLgotICAgIGluaXRpYWxpemU6IGZ1bmN0
aW9uKCl7fSwKLQotICAgIC8vIFRoZSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgQ29sbGVjdGlv
biBpcyBhbiBhcnJheSBvZiB0aGUKLSAgICAvLyBtb2RlbHMnIGF0dHJpYnV0ZXMuCi0gICAgdG9K
U09OOiBmdW5jdGlvbihvcHRpb25zKSB7Ci0gICAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24o
bW9kZWwpeyByZXR1cm4gbW9kZWwudG9KU09OKG9wdGlvbnMpOyB9KTsKLSAgICB9LAotCi0gICAg
Ly8gUHJveHkgYEJhY2tib25lLnN5bmNgIGJ5IGRlZmF1bHQuCi0gICAgc3luYzogZnVuY3Rpb24o
KSB7Ci0gICAgICByZXR1cm4gQmFja2JvbmUuc3luYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwot
ICAgIH0sCi0KLSAgICAvLyBBZGQgYSBtb2RlbCwgb3IgbGlzdCBvZiBtb2RlbHMgdG8gdGhlIHNl
dC4KLSAgICBhZGQ6IGZ1bmN0aW9uKG1vZGVscywgb3B0aW9ucykgewotICAgICAgcmV0dXJuIHRo
aXMuc2V0KG1vZGVscywgXy5kZWZhdWx0cyhvcHRpb25zIHx8IHt9LCBhZGRPcHRpb25zKSk7Ci0g
ICAgfSwKLQotICAgIC8vIFJlbW92ZSBhIG1vZGVsLCBvciBhIGxpc3Qgb2YgbW9kZWxzIGZyb20g
dGhlIHNldC4KLSAgICByZW1vdmU6IGZ1bmN0aW9uKG1vZGVscywgb3B0aW9ucykgewotICAgICAg
bW9kZWxzID0gXy5pc0FycmF5KG1vZGVscykgPyBtb2RlbHMuc2xpY2UoKSA6IFttb2RlbHNdOwot
ICAgICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTsKLSAgICAgIHZhciBpLCBsLCBpbmRleCwg
bW9kZWw7Ci0gICAgICBmb3IgKGkgPSAwLCBsID0gbW9kZWxzLmxlbmd0aDsgaSA8IGw7IGkrKykg
ewotICAgICAgICBtb2RlbCA9IHRoaXMuZ2V0KG1vZGVsc1tpXSk7Ci0gICAgICAgIGlmICghbW9k
ZWwpIGNvbnRpbnVlOwotICAgICAgICBkZWxldGUgdGhpcy5fYnlJZFttb2RlbC5pZF07Ci0gICAg
ICAgIGRlbGV0ZSB0aGlzLl9ieUlkW21vZGVsLmNpZF07Ci0gICAgICAgIGluZGV4ID0gdGhpcy5p
bmRleE9mKG1vZGVsKTsKLSAgICAgICAgdGhpcy5tb2RlbHMuc3BsaWNlKGluZGV4LCAxKTsKLSAg
ICAgICAgdGhpcy5sZW5ndGgtLTsKLSAgICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkgewotICAg
ICAgICAgIG9wdGlvbnMuaW5kZXggPSBpbmRleDsKLSAgICAgICAgICBtb2RlbC50cmlnZ2VyKCdy
ZW1vdmUnLCBtb2RlbCwgdGhpcywgb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5f
cmVtb3ZlUmVmZXJlbmNlKG1vZGVsKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0aGlzOwotICAg
IH0sCi0KLSAgICAvLyBVcGRhdGUgYSBjb2xsZWN0aW9uIGJ5IGBzZXRgLWluZyBhIG5ldyBsaXN0
IG9mIG1vZGVscywgYWRkaW5nIG5ldyBvbmVzLAotICAgIC8vIHJlbW92aW5nIG1vZGVscyB0aGF0
IGFyZSBubyBsb25nZXIgcHJlc2VudCwgYW5kIG1lcmdpbmcgbW9kZWxzIHRoYXQKLSAgICAvLyBh
bHJlYWR5IGV4aXN0IGluIHRoZSBjb2xsZWN0aW9uLCBhcyBuZWNlc3NhcnkuIFNpbWlsYXIgdG8g
KipNb2RlbCNzZXQqKiwKLSAgICAvLyB0aGUgY29yZSBvcGVyYXRpb24gZm9yIHVwZGF0aW5nIHRo
ZSBkYXRhIGNvbnRhaW5lZCBieSB0aGUgY29sbGVjdGlvbi4KLSAgICBzZXQ6IGZ1bmN0aW9uKG1v
ZGVscywgb3B0aW9ucykgewotICAgICAgb3B0aW9ucyA9IF8uZGVmYXVsdHMob3B0aW9ucyB8fCB7
fSwgc2V0T3B0aW9ucyk7Ci0gICAgICBpZiAob3B0aW9ucy5wYXJzZSkgbW9kZWxzID0gdGhpcy5w
YXJzZShtb2RlbHMsIG9wdGlvbnMpOwotICAgICAgaWYgKCFfLmlzQXJyYXkobW9kZWxzKSkgbW9k
ZWxzID0gbW9kZWxzID8gW21vZGVsc10gOiBbXTsKLSAgICAgIHZhciBpLCBsLCBtb2RlbCwgYXR0
cnMsIGV4aXN0aW5nLCBzb3J0OwotICAgICAgdmFyIGF0ID0gb3B0aW9ucy5hdDsKLSAgICAgIHZh
ciBzb3J0YWJsZSA9IHRoaXMuY29tcGFyYXRvciAmJiAoYXQgPT0gbnVsbCkgJiYgb3B0aW9ucy5z
b3J0ICE9PSBmYWxzZTsKLSAgICAgIHZhciBzb3J0QXR0ciA9IF8uaXNTdHJpbmcodGhpcy5jb21w
YXJhdG9yKSA/IHRoaXMuY29tcGFyYXRvciA6IG51bGw7Ci0gICAgICB2YXIgdG9BZGQgPSBbXSwg
dG9SZW1vdmUgPSBbXSwgbW9kZWxNYXAgPSB7fTsKLQotICAgICAgLy8gVHVybiBiYXJlIG9iamVj
dHMgaW50byBtb2RlbCByZWZlcmVuY2VzLCBhbmQgcHJldmVudCBpbnZhbGlkIG1vZGVscwotICAg
ICAgLy8gZnJvbSBiZWluZyBhZGRlZC4KLSAgICAgIGZvciAoaSA9IDAsIGwgPSBtb2RlbHMubGVu
Z3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgIGlmICghKG1vZGVsID0gdGhpcy5fcHJlcGFyZU1v
ZGVsKG1vZGVsc1tpXSwgb3B0aW9ucykpKSBjb250aW51ZTsKLQotICAgICAgICAvLyBJZiBhIGR1
cGxpY2F0ZSBpcyBmb3VuZCwgcHJldmVudCBpdCBmcm9tIGJlaW5nIGFkZGVkIGFuZAotICAgICAg
ICAvLyBvcHRpb25hbGx5IG1lcmdlIGl0IGludG8gdGhlIGV4aXN0aW5nIG1vZGVsLgotICAgICAg
ICBpZiAoZXhpc3RpbmcgPSB0aGlzLmdldChtb2RlbCkpIHsKLSAgICAgICAgICBpZiAob3B0aW9u
cy5yZW1vdmUpIG1vZGVsTWFwW2V4aXN0aW5nLmNpZF0gPSB0cnVlOwotICAgICAgICAgIGlmIChv
cHRpb25zLm1lcmdlKSB7Ci0gICAgICAgICAgICBleGlzdGluZy5zZXQobW9kZWwuYXR0cmlidXRl
cywgb3B0aW9ucyk7Ci0gICAgICAgICAgICBpZiAoc29ydGFibGUgJiYgIXNvcnQgJiYgZXhpc3Rp
bmcuaGFzQ2hhbmdlZChzb3J0QXR0cikpIHNvcnQgPSB0cnVlOwotICAgICAgICAgIH0KLQotICAg
ICAgICAvLyBUaGlzIGlzIGEgbmV3IG1vZGVsLCBwdXNoIGl0IHRvIHRoZSBgdG9BZGRgIGxpc3Qu
Ci0gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5hZGQpIHsKLSAgICAgICAgICB0b0FkZC5wdXNo
KG1vZGVsKTsKLQotICAgICAgICAgIC8vIExpc3RlbiB0byBhZGRlZCBtb2RlbHMnIGV2ZW50cywg
YW5kIGluZGV4IG1vZGVscyBmb3IgbG9va3VwIGJ5Ci0gICAgICAgICAgLy8gYGlkYCBhbmQgYnkg
YGNpZGAuCi0gICAgICAgICAgbW9kZWwub24oJ2FsbCcsIHRoaXMuX29uTW9kZWxFdmVudCwgdGhp
cyk7Ci0gICAgICAgICAgdGhpcy5fYnlJZFttb2RlbC5jaWRdID0gbW9kZWw7Ci0gICAgICAgICAg
aWYgKG1vZGVsLmlkICE9IG51bGwpIHRoaXMuX2J5SWRbbW9kZWwuaWRdID0gbW9kZWw7Ci0gICAg
ICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gUmVtb3ZlIG5vbmV4aXN0ZW50IG1vZGVscyBpZiBh
cHByb3ByaWF0ZS4KLSAgICAgIGlmIChvcHRpb25zLnJlbW92ZSkgewotICAgICAgICBmb3IgKGkg
PSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyArK2kpIHsKLSAgICAgICAgICBpZiAoIW1vZGVs
TWFwWyhtb2RlbCA9IHRoaXMubW9kZWxzW2ldKS5jaWRdKSB0b1JlbW92ZS5wdXNoKG1vZGVsKTsK
LSAgICAgICAgfQotICAgICAgICBpZiAodG9SZW1vdmUubGVuZ3RoKSB0aGlzLnJlbW92ZSh0b1Jl
bW92ZSwgb3B0aW9ucyk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFNlZSBpZiBzb3J0aW5nIGlzIG5l
ZWRlZCwgdXBkYXRlIGBsZW5ndGhgIGFuZCBzcGxpY2UgaW4gbmV3IG1vZGVscy4KLSAgICAgIGlm
ICh0b0FkZC5sZW5ndGgpIHsKLSAgICAgICAgaWYgKHNvcnRhYmxlKSBzb3J0ID0gdHJ1ZTsKLSAg
ICAgICAgdGhpcy5sZW5ndGggKz0gdG9BZGQubGVuZ3RoOwotICAgICAgICBpZiAoYXQgIT0gbnVs
bCkgewotICAgICAgICAgIHNwbGljZS5hcHBseSh0aGlzLm1vZGVscywgW2F0LCAwXS5jb25jYXQo
dG9BZGQpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBwdXNoLmFwcGx5KHRoaXMubW9k
ZWxzLCB0b0FkZCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gU2lsZW50bHkgc29y
dCB0aGUgY29sbGVjdGlvbiBpZiBhcHByb3ByaWF0ZS4KLSAgICAgIGlmIChzb3J0KSB0aGlzLnNv
cnQoe3NpbGVudDogdHJ1ZX0pOwotCi0gICAgICBpZiAob3B0aW9ucy5zaWxlbnQpIHJldHVybiB0
aGlzOwotCi0gICAgICAvLyBUcmlnZ2VyIGBhZGRgIGV2ZW50cy4KLSAgICAgIGZvciAoaSA9IDAs
IGwgPSB0b0FkZC5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgKG1vZGVsID0gdG9BZGRb
aV0pLnRyaWdnZXIoJ2FkZCcsIG1vZGVsLCB0aGlzLCBvcHRpb25zKTsKLSAgICAgIH0KLQotICAg
ICAgLy8gVHJpZ2dlciBgc29ydGAgaWYgdGhlIGNvbGxlY3Rpb24gd2FzIHNvcnRlZC4KLSAgICAg
IGlmIChzb3J0KSB0aGlzLnRyaWdnZXIoJ3NvcnQnLCB0aGlzLCBvcHRpb25zKTsKLSAgICAgIHJl
dHVybiB0aGlzOwotICAgIH0sCi0KLSAgICAvLyBXaGVuIHlvdSBoYXZlIG1vcmUgaXRlbXMgdGhh
biB5b3Ugd2FudCB0byBhZGQgb3IgcmVtb3ZlIGluZGl2aWR1YWxseSwKLSAgICAvLyB5b3UgY2Fu
IHJlc2V0IHRoZSBlbnRpcmUgc2V0IHdpdGggYSBuZXcgbGlzdCBvZiBtb2RlbHMsIHdpdGhvdXQg
ZmlyaW5nCi0gICAgLy8gYW55IGdyYW51bGFyIGBhZGRgIG9yIGByZW1vdmVgIGV2ZW50cy4gRmly
ZXMgYHJlc2V0YCB3aGVuIGZpbmlzaGVkLgotICAgIC8vIFVzZWZ1bCBmb3IgYnVsayBvcGVyYXRp
b25zIGFuZCBvcHRpbWl6YXRpb25zLgotICAgIHJlc2V0OiBmdW5jdGlvbihtb2RlbHMsIG9wdGlv
bnMpIHsKLSAgICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7Ci0gICAgICBmb3IgKHZhciBp
ID0gMCwgbCA9IHRoaXMubW9kZWxzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICB0aGlz
Ll9yZW1vdmVSZWZlcmVuY2UodGhpcy5tb2RlbHNbaV0pOwotICAgICAgfQotICAgICAgb3B0aW9u
cy5wcmV2aW91c01vZGVscyA9IHRoaXMubW9kZWxzOwotICAgICAgdGhpcy5fcmVzZXQoKTsKLSAg
ICAgIHRoaXMuYWRkKG1vZGVscywgXy5leHRlbmQoe3NpbGVudDogdHJ1ZX0sIG9wdGlvbnMpKTsK
LSAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHRoaXMudHJpZ2dlcigncmVzZXQnLCB0aGlzLCBv
cHRpb25zKTsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0KLSAgICAvLyBBZGQgYSBtb2Rl
bCB0byB0aGUgZW5kIG9mIHRoZSBjb2xsZWN0aW9uLgotICAgIHB1c2g6IGZ1bmN0aW9uKG1vZGVs
LCBvcHRpb25zKSB7Ci0gICAgICBtb2RlbCA9IHRoaXMuX3ByZXBhcmVNb2RlbChtb2RlbCwgb3B0
aW9ucyk7Ci0gICAgICB0aGlzLmFkZChtb2RlbCwgXy5leHRlbmQoe2F0OiB0aGlzLmxlbmd0aH0s
IG9wdGlvbnMpKTsKLSAgICAgIHJldHVybiBtb2RlbDsKLSAgICB9LAotCi0gICAgLy8gUmVtb3Zl
IGEgbW9kZWwgZnJvbSB0aGUgZW5kIG9mIHRoZSBjb2xsZWN0aW9uLgotICAgIHBvcDogZnVuY3Rp
b24ob3B0aW9ucykgewotICAgICAgdmFyIG1vZGVsID0gdGhpcy5hdCh0aGlzLmxlbmd0aCAtIDEp
OwotICAgICAgdGhpcy5yZW1vdmUobW9kZWwsIG9wdGlvbnMpOwotICAgICAgcmV0dXJuIG1vZGVs
OwotICAgIH0sCi0KLSAgICAvLyBBZGQgYSBtb2RlbCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBj
b2xsZWN0aW9uLgotICAgIHVuc2hpZnQ6IGZ1bmN0aW9uKG1vZGVsLCBvcHRpb25zKSB7Ci0gICAg
ICBtb2RlbCA9IHRoaXMuX3ByZXBhcmVNb2RlbChtb2RlbCwgb3B0aW9ucyk7Ci0gICAgICB0aGlz
LmFkZChtb2RlbCwgXy5leHRlbmQoe2F0OiAwfSwgb3B0aW9ucykpOwotICAgICAgcmV0dXJuIG1v
ZGVsOwotICAgIH0sCi0KLSAgICAvLyBSZW1vdmUgYSBtb2RlbCBmcm9tIHRoZSBiZWdpbm5pbmcg
b2YgdGhlIGNvbGxlY3Rpb24uCi0gICAgc2hpZnQ6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKLSAgICAg
IHZhciBtb2RlbCA9IHRoaXMuYXQoMCk7Ci0gICAgICB0aGlzLnJlbW92ZShtb2RlbCwgb3B0aW9u
cyk7Ci0gICAgICByZXR1cm4gbW9kZWw7Ci0gICAgfSwKLQotICAgIC8vIFNsaWNlIG91dCBhIHN1
Yi1hcnJheSBvZiBtb2RlbHMgZnJvbSB0aGUgY29sbGVjdGlvbi4KLSAgICBzbGljZTogZnVuY3Rp
b24oYmVnaW4sIGVuZCkgewotICAgICAgcmV0dXJuIHRoaXMubW9kZWxzLnNsaWNlKGJlZ2luLCBl
bmQpOwotICAgIH0sCi0KLSAgICAvLyBHZXQgYSBtb2RlbCBmcm9tIHRoZSBzZXQgYnkgaWQuCi0g
ICAgZ2V0OiBmdW5jdGlvbihvYmopIHsKLSAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHZv
aWQgMDsKLSAgICAgIHJldHVybiB0aGlzLl9ieUlkW29iai5pZCAhPSBudWxsID8gb2JqLmlkIDog
b2JqLmNpZCB8fCBvYmpdOwotICAgIH0sCi0KLSAgICAvLyBHZXQgdGhlIG1vZGVsIGF0IHRoZSBn
aXZlbiBpbmRleC4KLSAgICBhdDogZnVuY3Rpb24oaW5kZXgpIHsKLSAgICAgIHJldHVybiB0aGlz
Lm1vZGVsc1tpbmRleF07Ci0gICAgfSwKLQotICAgIC8vIFJldHVybiBtb2RlbHMgd2l0aCBtYXRj
aGluZyBhdHRyaWJ1dGVzLiBVc2VmdWwgZm9yIHNpbXBsZSBjYXNlcyBvZgotICAgIC8vIGBmaWx0
ZXJgLgotICAgIHdoZXJlOiBmdW5jdGlvbihhdHRycywgZmlyc3QpIHsKLSAgICAgIGlmIChfLmlz
RW1wdHkoYXR0cnMpKSByZXR1cm4gZmlyc3QgPyB2b2lkIDAgOiBbXTsKLSAgICAgIHJldHVybiB0
aGlzW2ZpcnN0ID8gJ2ZpbmQnIDogJ2ZpbHRlciddKGZ1bmN0aW9uKG1vZGVsKSB7Ci0gICAgICAg
IGZvciAodmFyIGtleSBpbiBhdHRycykgewotICAgICAgICAgIGlmIChhdHRyc1trZXldICE9PSBt
b2RlbC5nZXQoa2V5KSkgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgfSk7Ci0gICAgfSwKLQotICAgIC8vIFJldHVybiB0aGUgZmlyc3QgbW9kZWwg
d2l0aCBtYXRjaGluZyBhdHRyaWJ1dGVzLiBVc2VmdWwgZm9yIHNpbXBsZSBjYXNlcwotICAgIC8v
IG9mIGBmaW5kYC4KLSAgICBmaW5kV2hlcmU6IGZ1bmN0aW9uKGF0dHJzKSB7Ci0gICAgICByZXR1
cm4gdGhpcy53aGVyZShhdHRycywgdHJ1ZSk7Ci0gICAgfSwKLQotICAgIC8vIEZvcmNlIHRoZSBj
b2xsZWN0aW9uIHRvIHJlLXNvcnQgaXRzZWxmLiBZb3UgZG9uJ3QgbmVlZCB0byBjYWxsIHRoaXMg
dW5kZXIKLSAgICAvLyBub3JtYWwgY2lyY3Vtc3RhbmNlcywgYXMgdGhlIHNldCB3aWxsIG1haW50
YWluIHNvcnQgb3JkZXIgYXMgZWFjaCBpdGVtCi0gICAgLy8gaXMgYWRkZWQuCi0gICAgc29ydDog
ZnVuY3Rpb24ob3B0aW9ucykgewotICAgICAgaWYgKCF0aGlzLmNvbXBhcmF0b3IpIHRocm93IG5l
dyBFcnJvcignQ2Fubm90IHNvcnQgYSBzZXQgd2l0aG91dCBhIGNvbXBhcmF0b3InKTsKLSAgICAg
IG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7Ci0KLSAgICAgIC8vIFJ1biBzb3J0IGJhc2VkIG9u
IHR5cGUgb2YgYGNvbXBhcmF0b3JgLgotICAgICAgaWYgKF8uaXNTdHJpbmcodGhpcy5jb21wYXJh
dG9yKSB8fCB0aGlzLmNvbXBhcmF0b3IubGVuZ3RoID09PSAxKSB7Ci0gICAgICAgIHRoaXMubW9k
ZWxzID0gdGhpcy5zb3J0QnkodGhpcy5jb21wYXJhdG9yLCB0aGlzKTsKLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIHRoaXMubW9kZWxzLnNvcnQoXy5iaW5kKHRoaXMuY29tcGFyYXRvciwgdGhpcykp
OwotICAgICAgfQotCi0gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB0aGlzLnRyaWdnZXIoJ3Nv
cnQnLCB0aGlzLCBvcHRpb25zKTsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0KLSAgICAv
LyBGaWd1cmUgb3V0IHRoZSBzbWFsbGVzdCBpbmRleCBhdCB3aGljaCBhIG1vZGVsIHNob3VsZCBi
ZSBpbnNlcnRlZCBzbyBhcwotICAgIC8vIHRvIG1haW50YWluIG9yZGVyLgotICAgIHNvcnRlZElu
ZGV4OiBmdW5jdGlvbihtb2RlbCwgdmFsdWUsIGNvbnRleHQpIHsKLSAgICAgIHZhbHVlIHx8ICh2
YWx1ZSA9IHRoaXMuY29tcGFyYXRvcik7Ci0gICAgICB2YXIgaXRlcmF0b3IgPSBfLmlzRnVuY3Rp
b24odmFsdWUpID8gdmFsdWUgOiBmdW5jdGlvbihtb2RlbCkgewotICAgICAgICByZXR1cm4gbW9k
ZWwuZ2V0KHZhbHVlKTsKLSAgICAgIH07Ci0gICAgICByZXR1cm4gXy5zb3J0ZWRJbmRleCh0aGlz
Lm1vZGVscywgbW9kZWwsIGl0ZXJhdG9yLCBjb250ZXh0KTsKLSAgICB9LAotCi0gICAgLy8gUGx1
Y2sgYW4gYXR0cmlidXRlIGZyb20gZWFjaCBtb2RlbCBpbiB0aGUgY29sbGVjdGlvbi4KLSAgICBw
bHVjazogZnVuY3Rpb24oYXR0cikgewotICAgICAgcmV0dXJuIF8uaW52b2tlKHRoaXMubW9kZWxz
LCAnZ2V0JywgYXR0cik7Ci0gICAgfSwKLQotICAgIC8vIEZldGNoIHRoZSBkZWZhdWx0IHNldCBv
ZiBtb2RlbHMgZm9yIHRoaXMgY29sbGVjdGlvbiwgcmVzZXR0aW5nIHRoZQotICAgIC8vIGNvbGxl
Y3Rpb24gd2hlbiB0aGV5IGFycml2ZS4gSWYgYHJlc2V0OiB0cnVlYCBpcyBwYXNzZWQsIHRoZSBy
ZXNwb25zZQotICAgIC8vIGRhdGEgd2lsbCBiZSBwYXNzZWQgdGhyb3VnaCB0aGUgYHJlc2V0YCBt
ZXRob2QgaW5zdGVhZCBvZiBgc2V0YC4KLSAgICBmZXRjaDogZnVuY3Rpb24ob3B0aW9ucykgewot
ICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgPyBfLmNsb25lKG9wdGlvbnMpIDoge307Ci0gICAgICBp
ZiAob3B0aW9ucy5wYXJzZSA9PT0gdm9pZCAwKSBvcHRpb25zLnBhcnNlID0gdHJ1ZTsKLSAgICAg
IHZhciBzdWNjZXNzID0gb3B0aW9ucy5zdWNjZXNzOwotICAgICAgdmFyIGNvbGxlY3Rpb24gPSB0
aGlzOwotICAgICAgb3B0aW9ucy5zdWNjZXNzID0gZnVuY3Rpb24ocmVzcCkgewotICAgICAgICB2
YXIgbWV0aG9kID0gb3B0aW9ucy5yZXNldCA/ICdyZXNldCcgOiAnc2V0JzsKLSAgICAgICAgY29s
bGVjdGlvblttZXRob2RdKHJlc3AsIG9wdGlvbnMpOwotICAgICAgICBpZiAoc3VjY2Vzcykgc3Vj
Y2Vzcyhjb2xsZWN0aW9uLCByZXNwLCBvcHRpb25zKTsKLSAgICAgICAgY29sbGVjdGlvbi50cmln
Z2VyKCdzeW5jJywgY29sbGVjdGlvbiwgcmVzcCwgb3B0aW9ucyk7Ci0gICAgICB9OwotICAgICAg
d3JhcEVycm9yKHRoaXMsIG9wdGlvbnMpOwotICAgICAgcmV0dXJuIHRoaXMuc3luYygncmVhZCcs
IHRoaXMsIG9wdGlvbnMpOwotICAgIH0sCi0KLSAgICAvLyBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ug
b2YgYSBtb2RlbCBpbiB0aGlzIGNvbGxlY3Rpb24uIEFkZCB0aGUgbW9kZWwgdG8gdGhlCi0gICAg
Ly8gY29sbGVjdGlvbiBpbW1lZGlhdGVseSwgdW5sZXNzIGB3YWl0OiB0cnVlYCBpcyBwYXNzZWQs
IGluIHdoaWNoIGNhc2Ugd2UKLSAgICAvLyB3YWl0IGZvciB0aGUgc2VydmVyIHRvIGFncmVlLgot
ICAgIGNyZWF0ZTogZnVuY3Rpb24obW9kZWwsIG9wdGlvbnMpIHsKLSAgICAgIG9wdGlvbnMgPSBv
cHRpb25zID8gXy5jbG9uZShvcHRpb25zKSA6IHt9OwotICAgICAgaWYgKCEobW9kZWwgPSB0aGlz
Ll9wcmVwYXJlTW9kZWwobW9kZWwsIG9wdGlvbnMpKSkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYg
KCFvcHRpb25zLndhaXQpIHRoaXMuYWRkKG1vZGVsLCBvcHRpb25zKTsKLSAgICAgIHZhciBjb2xs
ZWN0aW9uID0gdGhpczsKLSAgICAgIHZhciBzdWNjZXNzID0gb3B0aW9ucy5zdWNjZXNzOwotICAg
ICAgb3B0aW9ucy5zdWNjZXNzID0gZnVuY3Rpb24ocmVzcCkgewotICAgICAgICBpZiAob3B0aW9u
cy53YWl0KSBjb2xsZWN0aW9uLmFkZChtb2RlbCwgb3B0aW9ucyk7Ci0gICAgICAgIGlmIChzdWNj
ZXNzKSBzdWNjZXNzKG1vZGVsLCByZXNwLCBvcHRpb25zKTsKLSAgICAgIH07Ci0gICAgICBtb2Rl
bC5zYXZlKG51bGwsIG9wdGlvbnMpOwotICAgICAgcmV0dXJuIG1vZGVsOwotICAgIH0sCi0KLSAg
ICAvLyAqKnBhcnNlKiogY29udmVydHMgYSByZXNwb25zZSBpbnRvIGEgbGlzdCBvZiBtb2RlbHMg
dG8gYmUgYWRkZWQgdG8gdGhlCi0gICAgLy8gY29sbGVjdGlvbi4gVGhlIGRlZmF1bHQgaW1wbGVt
ZW50YXRpb24gaXMganVzdCB0byBwYXNzIGl0IHRocm91Z2guCi0gICAgcGFyc2U6IGZ1bmN0aW9u
KHJlc3AsIG9wdGlvbnMpIHsKLSAgICAgIHJldHVybiByZXNwOwotICAgIH0sCi0KLSAgICAvLyBD
cmVhdGUgYSBuZXcgY29sbGVjdGlvbiB3aXRoIGFuIGlkZW50aWNhbCBsaXN0IG9mIG1vZGVscyBh
cyB0aGlzIG9uZS4KLSAgICBjbG9uZTogZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gbmV3IHRo
aXMuY29uc3RydWN0b3IodGhpcy5tb2RlbHMpOwotICAgIH0sCi0KLSAgICAvLyBQcml2YXRlIG1l
dGhvZCB0byByZXNldCBhbGwgaW50ZXJuYWwgc3RhdGUuIENhbGxlZCB3aGVuIHRoZSBjb2xsZWN0
aW9uCi0gICAgLy8gaXMgZmlyc3QgaW5pdGlhbGl6ZWQgb3IgcmVzZXQuCi0gICAgX3Jlc2V0OiBm
dW5jdGlvbigpIHsKLSAgICAgIHRoaXMubGVuZ3RoID0gMDsKLSAgICAgIHRoaXMubW9kZWxzID0g
W107Ci0gICAgICB0aGlzLl9ieUlkICA9IHt9OwotICAgIH0sCi0KLSAgICAvLyBQcmVwYXJlIGEg
aGFzaCBvZiBhdHRyaWJ1dGVzIChvciBvdGhlciBtb2RlbCkgdG8gYmUgYWRkZWQgdG8gdGhpcwot
ICAgIC8vIGNvbGxlY3Rpb24uCi0gICAgX3ByZXBhcmVNb2RlbDogZnVuY3Rpb24oYXR0cnMsIG9w
dGlvbnMpIHsKLSAgICAgIGlmIChhdHRycyBpbnN0YW5jZW9mIE1vZGVsKSB7Ci0gICAgICAgIGlm
ICghYXR0cnMuY29sbGVjdGlvbikgYXR0cnMuY29sbGVjdGlvbiA9IHRoaXM7Ci0gICAgICAgIHJl
dHVybiBhdHRyczsKLSAgICAgIH0KLSAgICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7Ci0g
ICAgICBvcHRpb25zLmNvbGxlY3Rpb24gPSB0aGlzOwotICAgICAgdmFyIG1vZGVsID0gbmV3IHRo
aXMubW9kZWwoYXR0cnMsIG9wdGlvbnMpOwotICAgICAgaWYgKCFtb2RlbC5fdmFsaWRhdGUoYXR0
cnMsIG9wdGlvbnMpKSB7Ci0gICAgICAgIHRoaXMudHJpZ2dlcignaW52YWxpZCcsIHRoaXMsIGF0
dHJzLCBvcHRpb25zKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgcmV0
dXJuIG1vZGVsOwotICAgIH0sCi0KLSAgICAvLyBJbnRlcm5hbCBtZXRob2QgdG8gc2V2ZXIgYSBt
b2RlbCdzIHRpZXMgdG8gYSBjb2xsZWN0aW9uLgotICAgIF9yZW1vdmVSZWZlcmVuY2U6IGZ1bmN0
aW9uKG1vZGVsKSB7Ci0gICAgICBpZiAodGhpcyA9PT0gbW9kZWwuY29sbGVjdGlvbikgZGVsZXRl
IG1vZGVsLmNvbGxlY3Rpb247Ci0gICAgICBtb2RlbC5vZmYoJ2FsbCcsIHRoaXMuX29uTW9kZWxF
dmVudCwgdGhpcyk7Ci0gICAgfSwKLQotICAgIC8vIEludGVybmFsIG1ldGhvZCBjYWxsZWQgZXZl
cnkgdGltZSBhIG1vZGVsIGluIHRoZSBzZXQgZmlyZXMgYW4gZXZlbnQuCi0gICAgLy8gU2V0cyBu
ZWVkIHRvIHVwZGF0ZSB0aGVpciBpbmRleGVzIHdoZW4gbW9kZWxzIGNoYW5nZSBpZHMuIEFsbCBv
dGhlcgotICAgIC8vIGV2ZW50cyBzaW1wbHkgcHJveHkgdGhyb3VnaC4gImFkZCIgYW5kICJyZW1v
dmUiIGV2ZW50cyB0aGF0IG9yaWdpbmF0ZQotICAgIC8vIGluIG90aGVyIGNvbGxlY3Rpb25zIGFy
ZSBpZ25vcmVkLgotICAgIF9vbk1vZGVsRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50LCBtb2RlbCwgY29s
bGVjdGlvbiwgb3B0aW9ucykgewotICAgICAgaWYgKChldmVudCA9PT0gJ2FkZCcgfHwgZXZlbnQg
PT09ICdyZW1vdmUnKSAmJiBjb2xsZWN0aW9uICE9PSB0aGlzKSByZXR1cm47Ci0gICAgICBpZiAo
ZXZlbnQgPT09ICdkZXN0cm95JykgdGhpcy5yZW1vdmUobW9kZWwsIG9wdGlvbnMpOwotICAgICAg
aWYgKG1vZGVsICYmIGV2ZW50ID09PSAnY2hhbmdlOicgKyBtb2RlbC5pZEF0dHJpYnV0ZSkgewot
ICAgICAgICBkZWxldGUgdGhpcy5fYnlJZFttb2RlbC5wcmV2aW91cyhtb2RlbC5pZEF0dHJpYnV0
ZSldOwotICAgICAgICBpZiAobW9kZWwuaWQgIT0gbnVsbCkgdGhpcy5fYnlJZFttb2RlbC5pZF0g
PSBtb2RlbDsKLSAgICAgIH0KLSAgICAgIHRoaXMudHJpZ2dlci5hcHBseSh0aGlzLCBhcmd1bWVu
dHMpOwotICAgIH0KLQotICB9KTsKLQotICAvLyBVbmRlcnNjb3JlIG1ldGhvZHMgdGhhdCB3ZSB3
YW50IHRvIGltcGxlbWVudCBvbiB0aGUgQ29sbGVjdGlvbi4KLSAgLy8gOTAlIG9mIHRoZSBjb3Jl
IHVzZWZ1bG5lc3Mgb2YgQmFja2JvbmUgQ29sbGVjdGlvbnMgaXMgYWN0dWFsbHkgaW1wbGVtZW50
ZWQKLSAgLy8gcmlnaHQgaGVyZToKLSAgdmFyIG1ldGhvZHMgPSBbJ2ZvckVhY2gnLCAnZWFjaCcs
ICdtYXAnLCAnY29sbGVjdCcsICdyZWR1Y2UnLCAnZm9sZGwnLAotICAgICdpbmplY3QnLCAncmVk
dWNlUmlnaHQnLCAnZm9sZHInLCAnZmluZCcsICdkZXRlY3QnLCAnZmlsdGVyJywgJ3NlbGVjdCcs
Ci0gICAgJ3JlamVjdCcsICdldmVyeScsICdhbGwnLCAnc29tZScsICdhbnknLCAnaW5jbHVkZScs
ICdjb250YWlucycsICdpbnZva2UnLAotICAgICdtYXgnLCAnbWluJywgJ3RvQXJyYXknLCAnc2l6
ZScsICdmaXJzdCcsICdoZWFkJywgJ3Rha2UnLCAnaW5pdGlhbCcsICdyZXN0JywKLSAgICAndGFp
bCcsICdkcm9wJywgJ2xhc3QnLCAnd2l0aG91dCcsICdpbmRleE9mJywgJ3NodWZmbGUnLCAnbGFz
dEluZGV4T2YnLAotICAgICdpc0VtcHR5JywgJ2NoYWluJ107Ci0KLSAgLy8gTWl4IGluIGVhY2gg
VW5kZXJzY29yZSBtZXRob2QgYXMgYSBwcm94eSB0byBgQ29sbGVjdGlvbiNtb2RlbHNgLgotICBf
LmVhY2gobWV0aG9kcywgZnVuY3Rpb24obWV0aG9kKSB7Ci0gICAgQ29sbGVjdGlvbi5wcm90b3R5
cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKCkgewotICAgICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFy
Z3VtZW50cyk7Ci0gICAgICBhcmdzLnVuc2hpZnQodGhpcy5tb2RlbHMpOwotICAgICAgcmV0dXJu
IF9bbWV0aG9kXS5hcHBseShfLCBhcmdzKTsKLSAgICB9OwotICB9KTsKLQotICAvLyBVbmRlcnNj
b3JlIG1ldGhvZHMgdGhhdCB0YWtlIGEgcHJvcGVydHkgbmFtZSBhcyBhbiBhcmd1bWVudC4KLSAg
dmFyIGF0dHJpYnV0ZU1ldGhvZHMgPSBbJ2dyb3VwQnknLCAnY291bnRCeScsICdzb3J0QnknXTsK
LQotICAvLyBVc2UgYXR0cmlidXRlcyBpbnN0ZWFkIG9mIHByb3BlcnRpZXMuCi0gIF8uZWFjaChh
dHRyaWJ1dGVNZXRob2RzLCBmdW5jdGlvbihtZXRob2QpIHsKLSAgICBDb2xsZWN0aW9uLnByb3Rv
dHlwZVttZXRob2RdID0gZnVuY3Rpb24odmFsdWUsIGNvbnRleHQpIHsKLSAgICAgIHZhciBpdGVy
YXRvciA9IF8uaXNGdW5jdGlvbih2YWx1ZSkgPyB2YWx1ZSA6IGZ1bmN0aW9uKG1vZGVsKSB7Ci0g
ICAgICAgIHJldHVybiBtb2RlbC5nZXQodmFsdWUpOwotICAgICAgfTsKLSAgICAgIHJldHVybiBf
W21ldGhvZF0odGhpcy5tb2RlbHMsIGl0ZXJhdG9yLCBjb250ZXh0KTsKLSAgICB9OwotICB9KTsK
LQotICAvLyBCYWNrYm9uZS5WaWV3Ci0gIC8vIC0tLS0tLS0tLS0tLS0KLQotICAvLyBCYWNrYm9u
ZSBWaWV3cyBhcmUgYWxtb3N0IG1vcmUgY29udmVudGlvbiB0aGFuIHRoZXkgYXJlIGFjdHVhbCBj
b2RlLiBBIFZpZXcKLSAgLy8gaXMgc2ltcGx5IGEgSmF2YVNjcmlwdCBvYmplY3QgdGhhdCByZXBy
ZXNlbnRzIGEgbG9naWNhbCBjaHVuayBvZiBVSSBpbiB0aGUKLSAgLy8gRE9NLiBUaGlzIG1pZ2h0
IGJlIGEgc2luZ2xlIGl0ZW0sIGFuIGVudGlyZSBsaXN0LCBhIHNpZGViYXIgb3IgcGFuZWwsIG9y
Ci0gIC8vIGV2ZW4gdGhlIHN1cnJvdW5kaW5nIGZyYW1lIHdoaWNoIHdyYXBzIHlvdXIgd2hvbGUg
YXBwLiBEZWZpbmluZyBhIGNodW5rIG9mCi0gIC8vIFVJIGFzIGEgKipWaWV3KiogYWxsb3dzIHlv
dSB0byBkZWZpbmUgeW91ciBET00gZXZlbnRzIGRlY2xhcmF0aXZlbHksIHdpdGhvdXQKLSAgLy8g
aGF2aW5nIHRvIHdvcnJ5IGFib3V0IHJlbmRlciBvcmRlciAuLi4gYW5kIG1ha2VzIGl0IGVhc3kg
Zm9yIHRoZSB2aWV3IHRvCi0gIC8vIHJlYWN0IHRvIHNwZWNpZmljIGNoYW5nZXMgaW4gdGhlIHN0
YXRlIG9mIHlvdXIgbW9kZWxzLgotCi0gIC8vIENyZWF0aW5nIGEgQmFja2JvbmUuVmlldyBjcmVh
dGVzIGl0cyBpbml0aWFsIGVsZW1lbnQgb3V0c2lkZSBvZiB0aGUgRE9NLAotICAvLyBpZiBhbiBl
eGlzdGluZyBlbGVtZW50IGlzIG5vdCBwcm92aWRlZC4uLgotICB2YXIgVmlldyA9IEJhY2tib25l
LlZpZXcgPSBmdW5jdGlvbihvcHRpb25zKSB7Ci0gICAgdGhpcy5jaWQgPSBfLnVuaXF1ZUlkKCd2
aWV3Jyk7Ci0gICAgdGhpcy5fY29uZmlndXJlKG9wdGlvbnMgfHwge30pOwotICAgIHRoaXMuX2Vu
c3VyZUVsZW1lbnQoKTsKLSAgICB0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRz
KTsKLSAgICB0aGlzLmRlbGVnYXRlRXZlbnRzKCk7Ci0gIH07Ci0KLSAgLy8gQ2FjaGVkIHJlZ2V4
IHRvIHNwbGl0IGtleXMgZm9yIGBkZWxlZ2F0ZWAuCi0gIHZhciBkZWxlZ2F0ZUV2ZW50U3BsaXR0
ZXIgPSAvXihcUyspXHMqKC4qKSQvOwotCi0gIC8vIExpc3Qgb2YgdmlldyBvcHRpb25zIHRvIGJl
IG1lcmdlZCBhcyBwcm9wZXJ0aWVzLgotICB2YXIgdmlld09wdGlvbnMgPSBbJ21vZGVsJywgJ2Nv
bGxlY3Rpb24nLCAnZWwnLCAnaWQnLCAnYXR0cmlidXRlcycsICdjbGFzc05hbWUnLCAndGFnTmFt
ZScsICdldmVudHMnXTsKLQotICAvLyBTZXQgdXAgYWxsIGluaGVyaXRhYmxlICoqQmFja2JvbmUu
VmlldyoqIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMuCi0gIF8uZXh0ZW5kKFZpZXcucHJvdG90eXBl
LCBFdmVudHMsIHsKLQotICAgIC8vIFRoZSBkZWZhdWx0IGB0YWdOYW1lYCBvZiBhIFZpZXcncyBl
bGVtZW50IGlzIGAiZGl2ImAuCi0gICAgdGFnTmFtZTogJ2RpdicsCi0KLSAgICAvLyBqUXVlcnkg
ZGVsZWdhdGUgZm9yIGVsZW1lbnQgbG9va3VwLCBzY29wZWQgdG8gRE9NIGVsZW1lbnRzIHdpdGhp
biB0aGUKLSAgICAvLyBjdXJyZW50IHZpZXcuIFRoaXMgc2hvdWxkIGJlIHByZWZlcmVkIHRvIGds
b2JhbCBsb29rdXBzIHdoZXJlIHBvc3NpYmxlLgotICAgICQ6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7
Ci0gICAgICByZXR1cm4gdGhpcy4kZWwuZmluZChzZWxlY3Rvcik7Ci0gICAgfSwKLQotICAgIC8v
IEluaXRpYWxpemUgaXMgYW4gZW1wdHkgZnVuY3Rpb24gYnkgZGVmYXVsdC4gT3ZlcnJpZGUgaXQg
d2l0aCB5b3VyIG93bgotICAgIC8vIGluaXRpYWxpemF0aW9uIGxvZ2ljLgotICAgIGluaXRpYWxp
emU6IGZ1bmN0aW9uKCl7fSwKLQotICAgIC8vICoqcmVuZGVyKiogaXMgdGhlIGNvcmUgZnVuY3Rp
b24gdGhhdCB5b3VyIHZpZXcgc2hvdWxkIG92ZXJyaWRlLCBpbiBvcmRlcgotICAgIC8vIHRvIHBv
cHVsYXRlIGl0cyBlbGVtZW50IChgdGhpcy5lbGApLCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBIVE1M
LiBUaGUKLSAgICAvLyBjb252ZW50aW9uIGlzIGZvciAqKnJlbmRlcioqIHRvIGFsd2F5cyByZXR1
cm4gYHRoaXNgLgotICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gdGhpczsK
LSAgICB9LAotCi0gICAgLy8gUmVtb3ZlIHRoaXMgdmlldyBieSB0YWtpbmcgdGhlIGVsZW1lbnQg
b3V0IG9mIHRoZSBET00sIGFuZCByZW1vdmluZyBhbnkKLSAgICAvLyBhcHBsaWNhYmxlIEJhY2ti
b25lLkV2ZW50cyBsaXN0ZW5lcnMuCi0gICAgcmVtb3ZlOiBmdW5jdGlvbigpIHsKLSAgICAgIHRo
aXMuJGVsLnJlbW92ZSgpOwotICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKCk7Ci0gICAgICByZXR1
cm4gdGhpczsKLSAgICB9LAotCi0gICAgLy8gQ2hhbmdlIHRoZSB2aWV3J3MgZWxlbWVudCAoYHRo
aXMuZWxgIHByb3BlcnR5KSwgaW5jbHVkaW5nIGV2ZW50Ci0gICAgLy8gcmUtZGVsZWdhdGlvbi4K
LSAgICBzZXRFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCBkZWxlZ2F0ZSkgewotICAgICAgaWYg
KHRoaXMuJGVsKSB0aGlzLnVuZGVsZWdhdGVFdmVudHMoKTsKLSAgICAgIHRoaXMuJGVsID0gZWxl
bWVudCBpbnN0YW5jZW9mIEJhY2tib25lLiQgPyBlbGVtZW50IDogQmFja2JvbmUuJChlbGVtZW50
KTsKLSAgICAgIHRoaXMuZWwgPSB0aGlzLiRlbFswXTsKLSAgICAgIGlmIChkZWxlZ2F0ZSAhPT0g
ZmFsc2UpIHRoaXMuZGVsZWdhdGVFdmVudHMoKTsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0s
Ci0KLSAgICAvLyBTZXQgY2FsbGJhY2tzLCB3aGVyZSBgdGhpcy5ldmVudHNgIGlzIGEgaGFzaCBv
ZgotICAgIC8vCi0gICAgLy8gKnsiZXZlbnQgc2VsZWN0b3IiOiAiY2FsbGJhY2sifSoKLSAgICAv
LwotICAgIC8vICAgICB7Ci0gICAgLy8gICAgICAgJ21vdXNlZG93biAudGl0bGUnOiAgJ2VkaXQn
LAotICAgIC8vICAgICAgICdjbGljayAuYnV0dG9uJzogICAgICdzYXZlJwotICAgIC8vICAgICAg
ICdjbGljayAub3Blbic6ICAgICAgIGZ1bmN0aW9uKGUpIHsgLi4uIH0KLSAgICAvLyAgICAgfQot
ICAgIC8vCi0gICAgLy8gcGFpcnMuIENhbGxiYWNrcyB3aWxsIGJlIGJvdW5kIHRvIHRoZSB2aWV3
LCB3aXRoIGB0aGlzYCBzZXQgcHJvcGVybHkuCi0gICAgLy8gVXNlcyBldmVudCBkZWxlZ2F0aW9u
IGZvciBlZmZpY2llbmN5LgotICAgIC8vIE9taXR0aW5nIHRoZSBzZWxlY3RvciBiaW5kcyB0aGUg
ZXZlbnQgdG8gYHRoaXMuZWxgLgotICAgIC8vIFRoaXMgb25seSB3b3JrcyBmb3IgZGVsZWdhdGUt
YWJsZSBldmVudHM6IG5vdCBgZm9jdXNgLCBgYmx1cmAsIGFuZAotICAgIC8vIG5vdCBgY2hhbmdl
YCwgYHN1Ym1pdGAsIGFuZCBgcmVzZXRgIGluIEludGVybmV0IEV4cGxvcmVyLgotICAgIGRlbGVn
YXRlRXZlbnRzOiBmdW5jdGlvbihldmVudHMpIHsKLSAgICAgIGlmICghKGV2ZW50cyB8fCAoZXZl
bnRzID0gXy5yZXN1bHQodGhpcywgJ2V2ZW50cycpKSkpIHJldHVybiB0aGlzOwotICAgICAgdGhp
cy51bmRlbGVnYXRlRXZlbnRzKCk7Ci0gICAgICBmb3IgKHZhciBrZXkgaW4gZXZlbnRzKSB7Ci0g
ICAgICAgIHZhciBtZXRob2QgPSBldmVudHNba2V5XTsKLSAgICAgICAgaWYgKCFfLmlzRnVuY3Rp
b24obWV0aG9kKSkgbWV0aG9kID0gdGhpc1tldmVudHNba2V5XV07Ci0gICAgICAgIGlmICghbWV0
aG9kKSBjb250aW51ZTsKLQotICAgICAgICB2YXIgbWF0Y2ggPSBrZXkubWF0Y2goZGVsZWdhdGVF
dmVudFNwbGl0dGVyKTsKLSAgICAgICAgdmFyIGV2ZW50TmFtZSA9IG1hdGNoWzFdLCBzZWxlY3Rv
ciA9IG1hdGNoWzJdOwotICAgICAgICBtZXRob2QgPSBfLmJpbmQobWV0aG9kLCB0aGlzKTsKLSAg
ICAgICAgZXZlbnROYW1lICs9ICcuZGVsZWdhdGVFdmVudHMnICsgdGhpcy5jaWQ7Ci0gICAgICAg
IGlmIChzZWxlY3RvciA9PT0gJycpIHsKLSAgICAgICAgICB0aGlzLiRlbC5vbihldmVudE5hbWUs
IG1ldGhvZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdGhpcy4kZWwub24oZXZlbnRO
YW1lLCBzZWxlY3RvciwgbWV0aG9kKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJu
IHRoaXM7Ci0gICAgfSwKLQotICAgIC8vIENsZWFycyBhbGwgY2FsbGJhY2tzIHByZXZpb3VzbHkg
Ym91bmQgdG8gdGhlIHZpZXcgd2l0aCBgZGVsZWdhdGVFdmVudHNgLgotICAgIC8vIFlvdSB1c3Vh
bGx5IGRvbid0IG5lZWQgdG8gdXNlIHRoaXMsIGJ1dCBtYXkgd2lzaCB0byBpZiB5b3UgaGF2ZSBt
dWx0aXBsZQotICAgIC8vIEJhY2tib25lIHZpZXdzIGF0dGFjaGVkIHRvIHRoZSBzYW1lIERPTSBl
bGVtZW50LgotICAgIHVuZGVsZWdhdGVFdmVudHM6IGZ1bmN0aW9uKCkgewotICAgICAgdGhpcy4k
ZWwub2ZmKCcuZGVsZWdhdGVFdmVudHMnICsgdGhpcy5jaWQpOwotICAgICAgcmV0dXJuIHRoaXM7
Ci0gICAgfSwKLQotICAgIC8vIFBlcmZvcm1zIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gb2Yg
YSBWaWV3IHdpdGggYSBzZXQgb2Ygb3B0aW9ucy4KLSAgICAvLyBLZXlzIHdpdGggc3BlY2lhbCBt
ZWFuaW5nICooZS5nLiBtb2RlbCwgY29sbGVjdGlvbiwgaWQsIGNsYXNzTmFtZSkqIGFyZQotICAg
IC8vIGF0dGFjaGVkIGRpcmVjdGx5IHRvIHRoZSB2aWV3LiAgU2VlIGB2aWV3T3B0aW9uc2AgZm9y
IGFuIGV4aGF1c3RpdmUKLSAgICAvLyBsaXN0LgotICAgIF9jb25maWd1cmU6IGZ1bmN0aW9uKG9w
dGlvbnMpIHsKLSAgICAgIGlmICh0aGlzLm9wdGlvbnMpIG9wdGlvbnMgPSBfLmV4dGVuZCh7fSwg
Xy5yZXN1bHQodGhpcywgJ29wdGlvbnMnKSwgb3B0aW9ucyk7Ci0gICAgICBfLmV4dGVuZCh0aGlz
LCBfLnBpY2sob3B0aW9ucywgdmlld09wdGlvbnMpKTsKLSAgICAgIHRoaXMub3B0aW9ucyA9IG9w
dGlvbnM7Ci0gICAgfSwKLQotICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBWaWV3IGhhcyBhIERPTSBl
bGVtZW50IHRvIHJlbmRlciBpbnRvLgotICAgIC8vIElmIGB0aGlzLmVsYCBpcyBhIHN0cmluZywg
cGFzcyBpdCB0aHJvdWdoIGAkKClgLCB0YWtlIHRoZSBmaXJzdAotICAgIC8vIG1hdGNoaW5nIGVs
ZW1lbnQsIGFuZCByZS1hc3NpZ24gaXQgdG8gYGVsYC4gT3RoZXJ3aXNlLCBjcmVhdGUKLSAgICAv
LyBhbiBlbGVtZW50IGZyb20gdGhlIGBpZGAsIGBjbGFzc05hbWVgIGFuZCBgdGFnTmFtZWAgcHJv
cGVydGllcy4KLSAgICBfZW5zdXJlRWxlbWVudDogZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAoIXRo
aXMuZWwpIHsKLSAgICAgICAgdmFyIGF0dHJzID0gXy5leHRlbmQoe30sIF8ucmVzdWx0KHRoaXMs
ICdhdHRyaWJ1dGVzJykpOwotICAgICAgICBpZiAodGhpcy5pZCkgYXR0cnMuaWQgPSBfLnJlc3Vs
dCh0aGlzLCAnaWQnKTsKLSAgICAgICAgaWYgKHRoaXMuY2xhc3NOYW1lKSBhdHRyc1snY2xhc3Mn
XSA9IF8ucmVzdWx0KHRoaXMsICdjbGFzc05hbWUnKTsKLSAgICAgICAgdmFyICRlbCA9IEJhY2ti
b25lLiQoJzwnICsgXy5yZXN1bHQodGhpcywgJ3RhZ05hbWUnKSArICc+JykuYXR0cihhdHRycyk7
Ci0gICAgICAgIHRoaXMuc2V0RWxlbWVudCgkZWwsIGZhbHNlKTsKLSAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHRoaXMuc2V0RWxlbWVudChfLnJlc3VsdCh0aGlzLCAnZWwnKSwgZmFsc2UpOwotICAg
ICAgfQotICAgIH0KLQotICB9KTsKLQotICAvLyBCYWNrYm9uZS5zeW5jCi0gIC8vIC0tLS0tLS0t
LS0tLS0KLQotICAvLyBPdmVycmlkZSB0aGlzIGZ1bmN0aW9uIHRvIGNoYW5nZSB0aGUgbWFubmVy
IGluIHdoaWNoIEJhY2tib25lIHBlcnNpc3RzCi0gIC8vIG1vZGVscyB0byB0aGUgc2VydmVyLiBZ
b3Ugd2lsbCBiZSBwYXNzZWQgdGhlIHR5cGUgb2YgcmVxdWVzdCwgYW5kIHRoZQotICAvLyBtb2Rl
bCBpbiBxdWVzdGlvbi4gQnkgZGVmYXVsdCwgbWFrZXMgYSBSRVNUZnVsIEFqYXggcmVxdWVzdAot
ICAvLyB0byB0aGUgbW9kZWwncyBgdXJsKClgLiBTb21lIHBvc3NpYmxlIGN1c3RvbWl6YXRpb25z
IGNvdWxkIGJlOgotICAvLwotICAvLyAqIFVzZSBgc2V0VGltZW91dGAgdG8gYmF0Y2ggcmFwaWQt
ZmlyZSB1cGRhdGVzIGludG8gYSBzaW5nbGUgcmVxdWVzdC4KLSAgLy8gKiBTZW5kIHVwIHRoZSBt
b2RlbHMgYXMgWE1MIGluc3RlYWQgb2YgSlNPTi4KLSAgLy8gKiBQZXJzaXN0IG1vZGVscyB2aWEg
V2ViU29ja2V0cyBpbnN0ZWFkIG9mIEFqYXguCi0gIC8vCi0gIC8vIFR1cm4gb24gYEJhY2tib25l
LmVtdWxhdGVIVFRQYCBpbiBvcmRlciB0byBzZW5kIGBQVVRgIGFuZCBgREVMRVRFYCByZXF1ZXN0
cwotICAvLyBhcyBgUE9TVGAsIHdpdGggYSBgX21ldGhvZGAgcGFyYW1ldGVyIGNvbnRhaW5pbmcg
dGhlIHRydWUgSFRUUCBtZXRob2QsCi0gIC8vIGFzIHdlbGwgYXMgYWxsIHJlcXVlc3RzIHdpdGgg
dGhlIGJvZHkgYXMgYGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZGAKLSAgLy8gaW5z
dGVhZCBvZiBgYXBwbGljYXRpb24vanNvbmAgd2l0aCB0aGUgbW9kZWwgaW4gYSBwYXJhbSBuYW1l
ZCBgbW9kZWxgLgotICAvLyBVc2VmdWwgd2hlbiBpbnRlcmZhY2luZyB3aXRoIHNlcnZlci1zaWRl
IGxhbmd1YWdlcyBsaWtlICoqUEhQKiogdGhhdCBtYWtlCi0gIC8vIGl0IGRpZmZpY3VsdCB0byBy
ZWFkIHRoZSBib2R5IG9mIGBQVVRgIHJlcXVlc3RzLgotICBCYWNrYm9uZS5zeW5jID0gZnVuY3Rp
b24obWV0aG9kLCBtb2RlbCwgb3B0aW9ucykgewotICAgIHZhciB0eXBlID0gbWV0aG9kTWFwW21l
dGhvZF07Ci0KLSAgICAvLyBEZWZhdWx0IG9wdGlvbnMsIHVubGVzcyBzcGVjaWZpZWQuCi0gICAg
Xy5kZWZhdWx0cyhvcHRpb25zIHx8IChvcHRpb25zID0ge30pLCB7Ci0gICAgICBlbXVsYXRlSFRU
UDogQmFja2JvbmUuZW11bGF0ZUhUVFAsCi0gICAgICBlbXVsYXRlSlNPTjogQmFja2JvbmUuZW11
bGF0ZUpTT04KLSAgICB9KTsKLQotICAgIC8vIERlZmF1bHQgSlNPTi1yZXF1ZXN0IG9wdGlvbnMu
Ci0gICAgdmFyIHBhcmFtcyA9IHt0eXBlOiB0eXBlLCBkYXRhVHlwZTogJ2pzb24nfTsKLQotICAg
IC8vIEVuc3VyZSB0aGF0IHdlIGhhdmUgYSBVUkwuCi0gICAgaWYgKCFvcHRpb25zLnVybCkgewot
ICAgICAgcGFyYW1zLnVybCA9IF8ucmVzdWx0KG1vZGVsLCAndXJsJykgfHwgdXJsRXJyb3IoKTsK
LSAgICB9Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCB3ZSBoYXZlIHRoZSBhcHByb3ByaWF0ZSByZXF1
ZXN0IGRhdGEuCi0gICAgaWYgKG9wdGlvbnMuZGF0YSA9PSBudWxsICYmIG1vZGVsICYmIChtZXRo
b2QgPT09ICdjcmVhdGUnIHx8IG1ldGhvZCA9PT0gJ3VwZGF0ZScgfHwgbWV0aG9kID09PSAncGF0
Y2gnKSkgewotICAgICAgcGFyYW1zLmNvbnRlbnRUeXBlID0gJ2FwcGxpY2F0aW9uL2pzb24nOwot
ICAgICAgcGFyYW1zLmRhdGEgPSBKU09OLnN0cmluZ2lmeShvcHRpb25zLmF0dHJzIHx8IG1vZGVs
LnRvSlNPTihvcHRpb25zKSk7Ci0gICAgfQotCi0gICAgLy8gRm9yIG9sZGVyIHNlcnZlcnMsIGVt
dWxhdGUgSlNPTiBieSBlbmNvZGluZyB0aGUgcmVxdWVzdCBpbnRvIGFuIEhUTUwtZm9ybS4KLSAg
ICBpZiAob3B0aW9ucy5lbXVsYXRlSlNPTikgewotICAgICAgcGFyYW1zLmNvbnRlbnRUeXBlID0g
J2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc7Ci0gICAgICBwYXJhbXMuZGF0YSA9
IHBhcmFtcy5kYXRhID8ge21vZGVsOiBwYXJhbXMuZGF0YX0gOiB7fTsKLSAgICB9Ci0KLSAgICAv
LyBGb3Igb2xkZXIgc2VydmVycywgZW11bGF0ZSBIVFRQIGJ5IG1pbWlja2luZyB0aGUgSFRUUCBt
ZXRob2Qgd2l0aCBgX21ldGhvZGAKLSAgICAvLyBBbmQgYW4gYFgtSFRUUC1NZXRob2QtT3ZlcnJp
ZGVgIGhlYWRlci4KLSAgICBpZiAob3B0aW9ucy5lbXVsYXRlSFRUUCAmJiAodHlwZSA9PT0gJ1BV
VCcgfHwgdHlwZSA9PT0gJ0RFTEVURScgfHwgdHlwZSA9PT0gJ1BBVENIJykpIHsKLSAgICAgIHBh
cmFtcy50eXBlID0gJ1BPU1QnOwotICAgICAgaWYgKG9wdGlvbnMuZW11bGF0ZUpTT04pIHBhcmFt
cy5kYXRhLl9tZXRob2QgPSB0eXBlOwotICAgICAgdmFyIGJlZm9yZVNlbmQgPSBvcHRpb25zLmJl
Zm9yZVNlbmQ7Ci0gICAgICBvcHRpb25zLmJlZm9yZVNlbmQgPSBmdW5jdGlvbih4aHIpIHsKLSAg
ICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ1gtSFRUUC1NZXRob2QtT3ZlcnJpZGUnLCB0eXBl
KTsKLSAgICAgICAgaWYgKGJlZm9yZVNlbmQpIHJldHVybiBiZWZvcmVTZW5kLmFwcGx5KHRoaXMs
IGFyZ3VtZW50cyk7Ci0gICAgICB9OwotICAgIH0KLQotICAgIC8vIERvbid0IHByb2Nlc3MgZGF0
YSBvbiBhIG5vbi1HRVQgcmVxdWVzdC4KLSAgICBpZiAocGFyYW1zLnR5cGUgIT09ICdHRVQnICYm
ICFvcHRpb25zLmVtdWxhdGVKU09OKSB7Ci0gICAgICBwYXJhbXMucHJvY2Vzc0RhdGEgPSBmYWxz
ZTsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSdyZSBzZW5kaW5nIGEgYFBBVENIYCByZXF1ZXN0LCBh
bmQgd2UncmUgaW4gYW4gb2xkIEludGVybmV0IEV4cGxvcmVyCi0gICAgLy8gdGhhdCBzdGlsbCBo
YXMgQWN0aXZlWCBlbmFibGVkIGJ5IGRlZmF1bHQsIG92ZXJyaWRlIGpRdWVyeSB0byB1c2UgdGhh
dAotICAgIC8vIGZvciBYSFIgaW5zdGVhZC4gUmVtb3ZlIHRoaXMgbGluZSB3aGVuIGpRdWVyeSBz
dXBwb3J0cyBgUEFUQ0hgIG9uIElFOC4KLSAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdQQVRDSCcg
JiYgd2luZG93LkFjdGl2ZVhPYmplY3QgJiYKLSAgICAgICAgICAhKHdpbmRvdy5leHRlcm5hbCAm
JiB3aW5kb3cuZXh0ZXJuYWwubXNBY3RpdmVYRmlsdGVyaW5nRW5hYmxlZCkpIHsKLSAgICAgIHBh
cmFtcy54aHIgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0
KCJNaWNyb3NvZnQuWE1MSFRUUCIpOwotICAgICAgfTsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHRo
ZSByZXF1ZXN0LCBhbGxvd2luZyB0aGUgdXNlciB0byBvdmVycmlkZSBhbnkgQWpheCBvcHRpb25z
LgotICAgIHZhciB4aHIgPSBvcHRpb25zLnhociA9IEJhY2tib25lLmFqYXgoXy5leHRlbmQocGFy
YW1zLCBvcHRpb25zKSk7Ci0gICAgbW9kZWwudHJpZ2dlcigncmVxdWVzdCcsIG1vZGVsLCB4aHIs
IG9wdGlvbnMpOwotICAgIHJldHVybiB4aHI7Ci0gIH07Ci0KLSAgLy8gTWFwIGZyb20gQ1JVRCB0
byBIVFRQIGZvciBvdXIgZGVmYXVsdCBgQmFja2JvbmUuc3luY2AgaW1wbGVtZW50YXRpb24uCi0g
IHZhciBtZXRob2RNYXAgPSB7Ci0gICAgJ2NyZWF0ZSc6ICdQT1NUJywKLSAgICAndXBkYXRlJzog
J1BVVCcsCi0gICAgJ3BhdGNoJzogICdQQVRDSCcsCi0gICAgJ2RlbGV0ZSc6ICdERUxFVEUnLAot
ICAgICdyZWFkJzogICAnR0VUJwotICB9OwotCi0gIC8vIFNldCB0aGUgZGVmYXVsdCBpbXBsZW1l
bnRhdGlvbiBvZiBgQmFja2JvbmUuYWpheGAgdG8gcHJveHkgdGhyb3VnaCB0byBgJGAuCi0gIC8v
IE92ZXJyaWRlIHRoaXMgaWYgeW91J2QgbGlrZSB0byB1c2UgYSBkaWZmZXJlbnQgbGlicmFyeS4K
LSAgQmFja2JvbmUuYWpheCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBCYWNrYm9uZS4kLmFq
YXguYXBwbHkoQmFja2JvbmUuJCwgYXJndW1lbnRzKTsKLSAgfTsKLQotICAvLyBCYWNrYm9uZS5S
b3V0ZXIKLSAgLy8gLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gUm91dGVycyBtYXAgZmF1eC1VUkxz
IHRvIGFjdGlvbnMsIGFuZCBmaXJlIGV2ZW50cyB3aGVuIHJvdXRlcyBhcmUKLSAgLy8gbWF0Y2hl
ZC4gQ3JlYXRpbmcgYSBuZXcgb25lIHNldHMgaXRzIGByb3V0ZXNgIGhhc2gsIGlmIG5vdCBzZXQg
c3RhdGljYWxseS4KLSAgdmFyIFJvdXRlciA9IEJhY2tib25lLlJvdXRlciA9IGZ1bmN0aW9uKG9w
dGlvbnMpIHsKLSAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30pOwotICAgIGlmIChvcHRpb25z
LnJvdXRlcykgdGhpcy5yb3V0ZXMgPSBvcHRpb25zLnJvdXRlczsKLSAgICB0aGlzLl9iaW5kUm91
dGVzKCk7Ci0gICAgdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gIH07
Ci0KLSAgLy8gQ2FjaGVkIHJlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIG1hdGNoaW5nIG5hbWVkIHBh
cmFtIHBhcnRzIGFuZCBzcGxhdHRlZAotICAvLyBwYXJ0cyBvZiByb3V0ZSBzdHJpbmdzLgotICB2
YXIgb3B0aW9uYWxQYXJhbSA9IC9cKCguKj8pXCkvZzsKLSAgdmFyIG5hbWVkUGFyYW0gICAgPSAv
KFwoXD8pPzpcdysvZzsKLSAgdmFyIHNwbGF0UGFyYW0gICAgPSAvXCpcdysvZzsKLSAgdmFyIGVz
Y2FwZVJlZ0V4cCAgPSAvW1wte31cW1xdKz8uLFxcXF4kfCNcc10vZzsKLQotICAvLyBTZXQgdXAg
YWxsIGluaGVyaXRhYmxlICoqQmFja2JvbmUuUm91dGVyKiogcHJvcGVydGllcyBhbmQgbWV0aG9k
cy4KLSAgXy5leHRlbmQoUm91dGVyLnByb3RvdHlwZSwgRXZlbnRzLCB7Ci0KLSAgICAvLyBJbml0
aWFsaXplIGlzIGFuIGVtcHR5IGZ1bmN0aW9uIGJ5IGRlZmF1bHQuIE92ZXJyaWRlIGl0IHdpdGgg
eW91ciBvd24KLSAgICAvLyBpbml0aWFsaXphdGlvbiBsb2dpYy4KLSAgICBpbml0aWFsaXplOiBm
dW5jdGlvbigpe30sCi0KLSAgICAvLyBNYW51YWxseSBiaW5kIGEgc2luZ2xlIG5hbWVkIHJvdXRl
IHRvIGEgY2FsbGJhY2suIEZvciBleGFtcGxlOgotICAgIC8vCi0gICAgLy8gICAgIHRoaXMucm91
dGUoJ3NlYXJjaC86cXVlcnkvcDpudW0nLCAnc2VhcmNoJywgZnVuY3Rpb24ocXVlcnksIG51bSkg
ewotICAgIC8vICAgICAgIC4uLgotICAgIC8vICAgICB9KTsKLSAgICAvLwotICAgIHJvdXRlOiBm
dW5jdGlvbihyb3V0ZSwgbmFtZSwgY2FsbGJhY2spIHsKLSAgICAgIGlmICghXy5pc1JlZ0V4cChy
b3V0ZSkpIHJvdXRlID0gdGhpcy5fcm91dGVUb1JlZ0V4cChyb3V0ZSk7Ci0gICAgICBpZiAoXy5p
c0Z1bmN0aW9uKG5hbWUpKSB7Ci0gICAgICAgIGNhbGxiYWNrID0gbmFtZTsKLSAgICAgICAgbmFt
ZSA9ICcnOwotICAgICAgfQotICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSB0aGlzW25h
bWVdOwotICAgICAgdmFyIHJvdXRlciA9IHRoaXM7Ci0gICAgICBCYWNrYm9uZS5oaXN0b3J5LnJv
dXRlKHJvdXRlLCBmdW5jdGlvbihmcmFnbWVudCkgewotICAgICAgICB2YXIgYXJncyA9IHJvdXRl
ci5fZXh0cmFjdFBhcmFtZXRlcnMocm91dGUsIGZyYWdtZW50KTsKLSAgICAgICAgY2FsbGJhY2sg
JiYgY2FsbGJhY2suYXBwbHkocm91dGVyLCBhcmdzKTsKLSAgICAgICAgcm91dGVyLnRyaWdnZXIu
YXBwbHkocm91dGVyLCBbJ3JvdXRlOicgKyBuYW1lXS5jb25jYXQoYXJncykpOwotICAgICAgICBy
b3V0ZXIudHJpZ2dlcigncm91dGUnLCBuYW1lLCBhcmdzKTsKLSAgICAgICAgQmFja2JvbmUuaGlz
dG9yeS50cmlnZ2VyKCdyb3V0ZScsIHJvdXRlciwgbmFtZSwgYXJncyk7Ci0gICAgICB9KTsKLSAg
ICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0KLSAgICAvLyBTaW1wbGUgcHJveHkgdG8gYEJhY2ti
b25lLmhpc3RvcnlgIHRvIHNhdmUgYSBmcmFnbWVudCBpbnRvIHRoZSBoaXN0b3J5LgotICAgIG5h
dmlnYXRlOiBmdW5jdGlvbihmcmFnbWVudCwgb3B0aW9ucykgewotICAgICAgQmFja2JvbmUuaGlz
dG9yeS5uYXZpZ2F0ZShmcmFnbWVudCwgb3B0aW9ucyk7Ci0gICAgICByZXR1cm4gdGhpczsKLSAg
ICB9LAotCi0gICAgLy8gQmluZCBhbGwgZGVmaW5lZCByb3V0ZXMgdG8gYEJhY2tib25lLmhpc3Rv
cnlgLiBXZSBoYXZlIHRvIHJldmVyc2UgdGhlCi0gICAgLy8gb3JkZXIgb2YgdGhlIHJvdXRlcyBo
ZXJlIHRvIHN1cHBvcnQgYmVoYXZpb3Igd2hlcmUgdGhlIG1vc3QgZ2VuZXJhbAotICAgIC8vIHJv
dXRlcyBjYW4gYmUgZGVmaW5lZCBhdCB0aGUgYm90dG9tIG9mIHRoZSByb3V0ZSBtYXAuCi0gICAg
X2JpbmRSb3V0ZXM6IGZ1bmN0aW9uKCkgewotICAgICAgaWYgKCF0aGlzLnJvdXRlcykgcmV0dXJu
OwotICAgICAgdGhpcy5yb3V0ZXMgPSBfLnJlc3VsdCh0aGlzLCAncm91dGVzJyk7Ci0gICAgICB2
YXIgcm91dGUsIHJvdXRlcyA9IF8ua2V5cyh0aGlzLnJvdXRlcyk7Ci0gICAgICB3aGlsZSAoKHJv
dXRlID0gcm91dGVzLnBvcCgpKSAhPSBudWxsKSB7Ci0gICAgICAgIHRoaXMucm91dGUocm91dGUs
IHRoaXMucm91dGVzW3JvdXRlXSk7Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIC8vIENvbnZlcnQg
YSByb3V0ZSBzdHJpbmcgaW50byBhIHJlZ3VsYXIgZXhwcmVzc2lvbiwgc3VpdGFibGUgZm9yIG1h
dGNoaW5nCi0gICAgLy8gYWdhaW5zdCB0aGUgY3VycmVudCBsb2NhdGlvbiBoYXNoLgotICAgIF9y
b3V0ZVRvUmVnRXhwOiBmdW5jdGlvbihyb3V0ZSkgewotICAgICAgcm91dGUgPSByb3V0ZS5yZXBs
YWNlKGVzY2FwZVJlZ0V4cCwgJ1xcJCYnKQotICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKG9w
dGlvbmFsUGFyYW0sICcoPzokMSk/JykKLSAgICAgICAgICAgICAgICAgICAucmVwbGFjZShuYW1l
ZFBhcmFtLCBmdW5jdGlvbihtYXRjaCwgb3B0aW9uYWwpewotICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG9wdGlvbmFsID8gbWF0Y2ggOiAnKFteXC9dKyknOwotICAgICAgICAgICAgICAgICAg
IH0pCi0gICAgICAgICAgICAgICAgICAgLnJlcGxhY2Uoc3BsYXRQYXJhbSwgJyguKj8pJyk7Ci0g
ICAgICByZXR1cm4gbmV3IFJlZ0V4cCgnXicgKyByb3V0ZSArICckJyk7Ci0gICAgfSwKLQotICAg
IC8vIEdpdmVuIGEgcm91dGUsIGFuZCBhIFVSTCBmcmFnbWVudCB0aGF0IGl0IG1hdGNoZXMsIHJl
dHVybiB0aGUgYXJyYXkgb2YKLSAgICAvLyBleHRyYWN0ZWQgZGVjb2RlZCBwYXJhbWV0ZXJzLiBF
bXB0eSBvciB1bm1hdGNoZWQgcGFyYW1ldGVycyB3aWxsIGJlCi0gICAgLy8gdHJlYXRlZCBhcyBg
bnVsbGAgdG8gbm9ybWFsaXplIGNyb3NzLWJyb3dzZXIgYmVoYXZpb3IuCi0gICAgX2V4dHJhY3RQ
YXJhbWV0ZXJzOiBmdW5jdGlvbihyb3V0ZSwgZnJhZ21lbnQpIHsKLSAgICAgIHZhciBwYXJhbXMg
PSByb3V0ZS5leGVjKGZyYWdtZW50KS5zbGljZSgxKTsKLSAgICAgIHJldHVybiBfLm1hcChwYXJh
bXMsIGZ1bmN0aW9uKHBhcmFtKSB7Ci0gICAgICAgIHJldHVybiBwYXJhbSA/IGRlY29kZVVSSUNv
bXBvbmVudChwYXJhbSkgOiBudWxsOwotICAgICAgfSk7Ci0gICAgfQotCi0gIH0pOwotCi0gIC8v
IEJhY2tib25lLkhpc3RvcnkKLSAgLy8gLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8vIEhhbmRsZXMg
Y3Jvc3MtYnJvd3NlciBoaXN0b3J5IG1hbmFnZW1lbnQsIGJhc2VkIG9uIGVpdGhlcgotICAvLyBb
cHVzaFN0YXRlXShodHRwOi8vZGl2ZWludG9odG1sNS5pbmZvL2hpc3RvcnkuaHRtbCkgYW5kIHJl
YWwgVVJMcywgb3IKLSAgLy8gW29uaGFzaGNoYW5nZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxs
YS5vcmcvZW4tVVMvZG9jcy9ET00vd2luZG93Lm9uaGFzaGNoYW5nZSkKLSAgLy8gYW5kIFVSTCBm
cmFnbWVudHMuIElmIHRoZSBicm93c2VyIHN1cHBvcnRzIG5laXRoZXIgKG9sZCBJRSwgbmF0Y2gp
LAotICAvLyBmYWxscyBiYWNrIHRvIHBvbGxpbmcuCi0gIHZhciBIaXN0b3J5ID0gQmFja2JvbmUu
SGlzdG9yeSA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuaGFuZGxlcnMgPSBbXTsKLSAgICBfLmJp
bmRBbGwodGhpcywgJ2NoZWNrVXJsJyk7Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCBgSGlzdG9yeWAg
Y2FuIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUgYnJvd3Nlci4KLSAgICBpZiAodHlwZW9mIHdpbmRv
dyAhPT0gJ3VuZGVmaW5lZCcpIHsKLSAgICAgIHRoaXMubG9jYXRpb24gPSB3aW5kb3cubG9jYXRp
b247Ci0gICAgICB0aGlzLmhpc3RvcnkgPSB3aW5kb3cuaGlzdG9yeTsKLSAgICB9Ci0gIH07Ci0K
LSAgLy8gQ2FjaGVkIHJlZ2V4IGZvciBzdHJpcHBpbmcgYSBsZWFkaW5nIGhhc2gvc2xhc2ggYW5k
IHRyYWlsaW5nIHNwYWNlLgotICB2YXIgcm91dGVTdHJpcHBlciA9IC9eWyNcL118XHMrJC9nOwot
Ci0gIC8vIENhY2hlZCByZWdleCBmb3Igc3RyaXBwaW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNs
YXNoZXMuCi0gIHZhciByb290U3RyaXBwZXIgPSAvXlwvK3xcLyskL2c7Ci0KLSAgLy8gQ2FjaGVk
IHJlZ2V4IGZvciBkZXRlY3RpbmcgTVNJRS4KLSAgdmFyIGlzRXhwbG9yZXIgPSAvbXNpZSBbXHcu
XSsvOwotCi0gIC8vIENhY2hlZCByZWdleCBmb3IgcmVtb3ZpbmcgYSB0cmFpbGluZyBzbGFzaC4K
LSAgdmFyIHRyYWlsaW5nU2xhc2ggPSAvXC8kLzsKLQotICAvLyBIYXMgdGhlIGhpc3RvcnkgaGFu
ZGxpbmcgYWxyZWFkeSBiZWVuIHN0YXJ0ZWQ/Ci0gIEhpc3Rvcnkuc3RhcnRlZCA9IGZhbHNlOwot
Ci0gIC8vIFNldCB1cCBhbGwgaW5oZXJpdGFibGUgKipCYWNrYm9uZS5IaXN0b3J5KiogcHJvcGVy
dGllcyBhbmQgbWV0aG9kcy4KLSAgXy5leHRlbmQoSGlzdG9yeS5wcm90b3R5cGUsIEV2ZW50cywg
ewotCi0gICAgLy8gVGhlIGRlZmF1bHQgaW50ZXJ2YWwgdG8gcG9sbCBmb3IgaGFzaCBjaGFuZ2Vz
LCBpZiBuZWNlc3NhcnksIGlzCi0gICAgLy8gdHdlbnR5IHRpbWVzIGEgc2Vjb25kLgotICAgIGlu
dGVydmFsOiA1MCwKLQotICAgIC8vIEdldHMgdGhlIHRydWUgaGFzaCB2YWx1ZS4gQ2Fubm90IHVz
ZSBsb2NhdGlvbi5oYXNoIGRpcmVjdGx5IGR1ZSB0byBidWcKLSAgICAvLyBpbiBGaXJlZm94IHdo
ZXJlIGxvY2F0aW9uLmhhc2ggd2lsbCBhbHdheXMgYmUgZGVjb2RlZC4KLSAgICBnZXRIYXNoOiBm
dW5jdGlvbih3aW5kb3cpIHsKLSAgICAgIHZhciBtYXRjaCA9ICh3aW5kb3cgfHwgdGhpcykubG9j
YXRpb24uaHJlZi5tYXRjaCgvIyguKikkLyk7Ci0gICAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsx
XSA6ICcnOwotICAgIH0sCi0KLSAgICAvLyBHZXQgdGhlIGNyb3NzLWJyb3dzZXIgbm9ybWFsaXpl
ZCBVUkwgZnJhZ21lbnQsIGVpdGhlciBmcm9tIHRoZSBVUkwsCi0gICAgLy8gdGhlIGhhc2gsIG9y
IHRoZSBvdmVycmlkZS4KLSAgICBnZXRGcmFnbWVudDogZnVuY3Rpb24oZnJhZ21lbnQsIGZvcmNl
UHVzaFN0YXRlKSB7Ci0gICAgICBpZiAoZnJhZ21lbnQgPT0gbnVsbCkgewotICAgICAgICBpZiAo
dGhpcy5faGFzUHVzaFN0YXRlIHx8ICF0aGlzLl93YW50c0hhc2hDaGFuZ2UgfHwgZm9yY2VQdXNo
U3RhdGUpIHsKLSAgICAgICAgICBmcmFnbWVudCA9IHRoaXMubG9jYXRpb24ucGF0aG5hbWU7Ci0g
ICAgICAgICAgdmFyIHJvb3QgPSB0aGlzLnJvb3QucmVwbGFjZSh0cmFpbGluZ1NsYXNoLCAnJyk7
Ci0gICAgICAgICAgaWYgKCFmcmFnbWVudC5pbmRleE9mKHJvb3QpKSBmcmFnbWVudCA9IGZyYWdt
ZW50LnN1YnN0cihyb290Lmxlbmd0aCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZnJh
Z21lbnQgPSB0aGlzLmdldEhhc2goKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJu
IGZyYWdtZW50LnJlcGxhY2Uocm91dGVTdHJpcHBlciwgJycpOwotICAgIH0sCi0KLSAgICAvLyBT
dGFydCB0aGUgaGFzaCBjaGFuZ2UgaGFuZGxpbmcsIHJldHVybmluZyBgdHJ1ZWAgaWYgdGhlIGN1
cnJlbnQgVVJMIG1hdGNoZXMKLSAgICAvLyBhbiBleGlzdGluZyByb3V0ZSwgYW5kIGBmYWxzZWAg
b3RoZXJ3aXNlLgotICAgIHN0YXJ0OiBmdW5jdGlvbihvcHRpb25zKSB7Ci0gICAgICBpZiAoSGlz
dG9yeS5zdGFydGVkKSB0aHJvdyBuZXcgRXJyb3IoIkJhY2tib25lLmhpc3RvcnkgaGFzIGFscmVh
ZHkgYmVlbiBzdGFydGVkIik7Ci0gICAgICBIaXN0b3J5LnN0YXJ0ZWQgPSB0cnVlOwotCi0gICAg
ICAvLyBGaWd1cmUgb3V0IHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24uIERvIHdlIG5lZWQgYW4g
aWZyYW1lPwotICAgICAgLy8gSXMgcHVzaFN0YXRlIGRlc2lyZWQgLi4uIGlzIGl0IGF2YWlsYWJs
ZT8KLSAgICAgIHRoaXMub3B0aW9ucyAgICAgICAgICA9IF8uZXh0ZW5kKHt9LCB7cm9vdDogJy8n
fSwgdGhpcy5vcHRpb25zLCBvcHRpb25zKTsKLSAgICAgIHRoaXMucm9vdCAgICAgICAgICAgICA9
IHRoaXMub3B0aW9ucy5yb290OwotICAgICAgdGhpcy5fd2FudHNIYXNoQ2hhbmdlID0gdGhpcy5v
cHRpb25zLmhhc2hDaGFuZ2UgIT09IGZhbHNlOwotICAgICAgdGhpcy5fd2FudHNQdXNoU3RhdGUg
ID0gISF0aGlzLm9wdGlvbnMucHVzaFN0YXRlOwotICAgICAgdGhpcy5faGFzUHVzaFN0YXRlICAg
ID0gISEodGhpcy5vcHRpb25zLnB1c2hTdGF0ZSAmJiB0aGlzLmhpc3RvcnkgJiYgdGhpcy5oaXN0
b3J5LnB1c2hTdGF0ZSk7Ci0gICAgICB2YXIgZnJhZ21lbnQgICAgICAgICAgPSB0aGlzLmdldEZy
YWdtZW50KCk7Ci0gICAgICB2YXIgZG9jTW9kZSAgICAgICAgICAgPSBkb2N1bWVudC5kb2N1bWVu
dE1vZGU7Ci0gICAgICB2YXIgb2xkSUUgICAgICAgICAgICAgPSAoaXNFeHBsb3Jlci5leGVjKG5h
dmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSkgJiYgKCFkb2NNb2RlIHx8IGRvY01vZGUg
PD0gNykpOwotCi0gICAgICAvLyBOb3JtYWxpemUgcm9vdCB0byBhbHdheXMgaW5jbHVkZSBhIGxl
YWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoLgotICAgICAgdGhpcy5yb290ID0gKCcvJyArIHRoaXMu
cm9vdCArICcvJykucmVwbGFjZShyb290U3RyaXBwZXIsICcvJyk7Ci0KLSAgICAgIGlmIChvbGRJ
RSAmJiB0aGlzLl93YW50c0hhc2hDaGFuZ2UpIHsKLSAgICAgICAgdGhpcy5pZnJhbWUgPSBCYWNr
Ym9uZS4kKCc8aWZyYW1lIHNyYz0iamF2YXNjcmlwdDowIiB0YWJpbmRleD0iLTEiIC8+JykuaGlk
ZSgpLmFwcGVuZFRvKCdib2R5JylbMF0uY29udGVudFdpbmRvdzsKLSAgICAgICAgdGhpcy5uYXZp
Z2F0ZShmcmFnbWVudCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIERlcGVuZGluZyBvbiB3aGV0aGVy
IHdlJ3JlIHVzaW5nIHB1c2hTdGF0ZSBvciBoYXNoZXMsIGFuZCB3aGV0aGVyCi0gICAgICAvLyAn
b25oYXNoY2hhbmdlJyBpcyBzdXBwb3J0ZWQsIGRldGVybWluZSBob3cgd2UgY2hlY2sgdGhlIFVS
TCBzdGF0ZS4KLSAgICAgIGlmICh0aGlzLl9oYXNQdXNoU3RhdGUpIHsKLSAgICAgICAgQmFja2Jv
bmUuJCh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIHRoaXMuY2hlY2tVcmwpOwotICAgICAgfSBlbHNl
IGlmICh0aGlzLl93YW50c0hhc2hDaGFuZ2UgJiYgKCdvbmhhc2hjaGFuZ2UnIGluIHdpbmRvdykg
JiYgIW9sZElFKSB7Ci0gICAgICAgIEJhY2tib25lLiQod2luZG93KS5vbignaGFzaGNoYW5nZScs
IHRoaXMuY2hlY2tVcmwpOwotICAgICAgfSBlbHNlIGlmICh0aGlzLl93YW50c0hhc2hDaGFuZ2Up
IHsKLSAgICAgICAgdGhpcy5fY2hlY2tVcmxJbnRlcnZhbCA9IHNldEludGVydmFsKHRoaXMuY2hl
Y2tVcmwsIHRoaXMuaW50ZXJ2YWwpOwotICAgICAgfQotCi0gICAgICAvLyBEZXRlcm1pbmUgaWYg
d2UgbmVlZCB0byBjaGFuZ2UgdGhlIGJhc2UgdXJsLCBmb3IgYSBwdXNoU3RhdGUgbGluawotICAg
ICAgLy8gb3BlbmVkIGJ5IGEgbm9uLXB1c2hTdGF0ZSBicm93c2VyLgotICAgICAgdGhpcy5mcmFn
bWVudCA9IGZyYWdtZW50OwotICAgICAgdmFyIGxvYyA9IHRoaXMubG9jYXRpb247Ci0gICAgICB2
YXIgYXRSb290ID0gbG9jLnBhdGhuYW1lLnJlcGxhY2UoL1teXC9dJC8sICckJi8nKSA9PT0gdGhp
cy5yb290OwotCi0gICAgICAvLyBJZiB3ZSd2ZSBzdGFydGVkIG9mZiB3aXRoIGEgcm91dGUgZnJv
bSBhIGBwdXNoU3RhdGVgLWVuYWJsZWQgYnJvd3NlciwKLSAgICAgIC8vIGJ1dCB3ZSdyZSBjdXJy
ZW50bHkgaW4gYSBicm93c2VyIHRoYXQgZG9lc24ndCBzdXBwb3J0IGl0Li4uCi0gICAgICBpZiAo
dGhpcy5fd2FudHNIYXNoQ2hhbmdlICYmIHRoaXMuX3dhbnRzUHVzaFN0YXRlICYmICF0aGlzLl9o
YXNQdXNoU3RhdGUgJiYgIWF0Um9vdCkgewotICAgICAgICB0aGlzLmZyYWdtZW50ID0gdGhpcy5n
ZXRGcmFnbWVudChudWxsLCB0cnVlKTsKLSAgICAgICAgdGhpcy5sb2NhdGlvbi5yZXBsYWNlKHRo
aXMucm9vdCArIHRoaXMubG9jYXRpb24uc2VhcmNoICsgJyMnICsgdGhpcy5mcmFnbWVudCk7Ci0g
ICAgICAgIC8vIFJldHVybiBpbW1lZGlhdGVseSBhcyBicm93c2VyIHdpbGwgZG8gcmVkaXJlY3Qg
dG8gbmV3IHVybAotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgLy8gT3IgaWYgd2UndmUg
c3RhcnRlZCBvdXQgd2l0aCBhIGhhc2gtYmFzZWQgcm91dGUsIGJ1dCB3ZSdyZSBjdXJyZW50bHkK
LSAgICAgIC8vIGluIGEgYnJvd3NlciB3aGVyZSBpdCBjb3VsZCBiZSBgcHVzaFN0YXRlYC1iYXNl
ZCBpbnN0ZWFkLi4uCi0gICAgICB9IGVsc2UgaWYgKHRoaXMuX3dhbnRzUHVzaFN0YXRlICYmIHRo
aXMuX2hhc1B1c2hTdGF0ZSAmJiBhdFJvb3QgJiYgbG9jLmhhc2gpIHsKLSAgICAgICAgdGhpcy5m
cmFnbWVudCA9IHRoaXMuZ2V0SGFzaCgpLnJlcGxhY2Uocm91dGVTdHJpcHBlciwgJycpOwotICAg
ICAgICB0aGlzLmhpc3RvcnkucmVwbGFjZVN0YXRlKHt9LCBkb2N1bWVudC50aXRsZSwgdGhpcy5y
b290ICsgdGhpcy5mcmFnbWVudCArIGxvYy5zZWFyY2gpOwotICAgICAgfQotCi0gICAgICBpZiAo
IXRoaXMub3B0aW9ucy5zaWxlbnQpIHJldHVybiB0aGlzLmxvYWRVcmwoKTsKLSAgICB9LAotCi0g
ICAgLy8gRGlzYWJsZSBCYWNrYm9uZS5oaXN0b3J5LCBwZXJoYXBzIHRlbXBvcmFyaWx5LiBOb3Qg
dXNlZnVsIGluIGEgcmVhbCBhcHAsCi0gICAgLy8gYnV0IHBvc3NpYmx5IHVzZWZ1bCBmb3IgdW5p
dCB0ZXN0aW5nIFJvdXRlcnMuCi0gICAgc3RvcDogZnVuY3Rpb24oKSB7Ci0gICAgICBCYWNrYm9u
ZS4kKHdpbmRvdykub2ZmKCdwb3BzdGF0ZScsIHRoaXMuY2hlY2tVcmwpLm9mZignaGFzaGNoYW5n
ZScsIHRoaXMuY2hlY2tVcmwpOwotICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9jaGVja1VybElu
dGVydmFsKTsKLSAgICAgIEhpc3Rvcnkuc3RhcnRlZCA9IGZhbHNlOwotICAgIH0sCi0KLSAgICAv
LyBBZGQgYSByb3V0ZSB0byBiZSB0ZXN0ZWQgd2hlbiB0aGUgZnJhZ21lbnQgY2hhbmdlcy4gUm91
dGVzIGFkZGVkIGxhdGVyCi0gICAgLy8gbWF5IG92ZXJyaWRlIHByZXZpb3VzIHJvdXRlcy4KLSAg
ICByb3V0ZTogZnVuY3Rpb24ocm91dGUsIGNhbGxiYWNrKSB7Ci0gICAgICB0aGlzLmhhbmRsZXJz
LnVuc2hpZnQoe3JvdXRlOiByb3V0ZSwgY2FsbGJhY2s6IGNhbGxiYWNrfSk7Ci0gICAgfSwKLQot
ICAgIC8vIENoZWNrcyB0aGUgY3VycmVudCBVUkwgdG8gc2VlIGlmIGl0IGhhcyBjaGFuZ2VkLCBh
bmQgaWYgaXQgaGFzLAotICAgIC8vIGNhbGxzIGBsb2FkVXJsYCwgbm9ybWFsaXppbmcgYWNyb3Nz
IHRoZSBoaWRkZW4gaWZyYW1lLgotICAgIGNoZWNrVXJsOiBmdW5jdGlvbihlKSB7Ci0gICAgICB2
YXIgY3VycmVudCA9IHRoaXMuZ2V0RnJhZ21lbnQoKTsKLSAgICAgIGlmIChjdXJyZW50ID09PSB0
aGlzLmZyYWdtZW50ICYmIHRoaXMuaWZyYW1lKSB7Ci0gICAgICAgIGN1cnJlbnQgPSB0aGlzLmdl
dEZyYWdtZW50KHRoaXMuZ2V0SGFzaCh0aGlzLmlmcmFtZSkpOwotICAgICAgfQotICAgICAgaWYg
KGN1cnJlbnQgPT09IHRoaXMuZnJhZ21lbnQpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmICh0aGlz
LmlmcmFtZSkgdGhpcy5uYXZpZ2F0ZShjdXJyZW50KTsKLSAgICAgIHRoaXMubG9hZFVybCgpIHx8
IHRoaXMubG9hZFVybCh0aGlzLmdldEhhc2goKSk7Ci0gICAgfSwKLQotICAgIC8vIEF0dGVtcHQg
dG8gbG9hZCB0aGUgY3VycmVudCBVUkwgZnJhZ21lbnQuIElmIGEgcm91dGUgc3VjY2VlZHMgd2l0
aCBhCi0gICAgLy8gbWF0Y2gsIHJldHVybnMgYHRydWVgLiBJZiBubyBkZWZpbmVkIHJvdXRlcyBt
YXRjaGVzIHRoZSBmcmFnbWVudCwKLSAgICAvLyByZXR1cm5zIGBmYWxzZWAuCi0gICAgbG9hZFVy
bDogZnVuY3Rpb24oZnJhZ21lbnRPdmVycmlkZSkgewotICAgICAgdmFyIGZyYWdtZW50ID0gdGhp
cy5mcmFnbWVudCA9IHRoaXMuZ2V0RnJhZ21lbnQoZnJhZ21lbnRPdmVycmlkZSk7Ci0gICAgICB2
YXIgbWF0Y2hlZCA9IF8uYW55KHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uKGhhbmRsZXIpIHsKLSAg
ICAgICAgaWYgKGhhbmRsZXIucm91dGUudGVzdChmcmFnbWVudCkpIHsKLSAgICAgICAgICBoYW5k
bGVyLmNhbGxiYWNrKGZyYWdtZW50KTsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgfSk7Ci0gICAgICByZXR1cm4gbWF0Y2hlZDsKLSAgICB9LAotCi0gICAgLy8gU2F2
ZSBhIGZyYWdtZW50IGludG8gdGhlIGhhc2ggaGlzdG9yeSwgb3IgcmVwbGFjZSB0aGUgVVJMIHN0
YXRlIGlmIHRoZQotICAgIC8vICdyZXBsYWNlJyBvcHRpb24gaXMgcGFzc2VkLiBZb3UgYXJlIHJl
c3BvbnNpYmxlIGZvciBwcm9wZXJseSBVUkwtZW5jb2RpbmcKLSAgICAvLyB0aGUgZnJhZ21lbnQg
aW4gYWR2YW5jZS4KLSAgICAvLwotICAgIC8vIFRoZSBvcHRpb25zIG9iamVjdCBjYW4gY29udGFp
biBgdHJpZ2dlcjogdHJ1ZWAgaWYgeW91IHdpc2ggdG8gaGF2ZSB0aGUKLSAgICAvLyByb3V0ZSBj
YWxsYmFjayBiZSBmaXJlZCAobm90IHVzdWFsbHkgZGVzaXJhYmxlKSwgb3IgYHJlcGxhY2U6IHRy
dWVgLCBpZgotICAgIC8vIHlvdSB3aXNoIHRvIG1vZGlmeSB0aGUgY3VycmVudCBVUkwgd2l0aG91
dCBhZGRpbmcgYW4gZW50cnkgdG8gdGhlIGhpc3RvcnkuCi0gICAgbmF2aWdhdGU6IGZ1bmN0aW9u
KGZyYWdtZW50LCBvcHRpb25zKSB7Ci0gICAgICBpZiAoIUhpc3Rvcnkuc3RhcnRlZCkgcmV0dXJu
IGZhbHNlOwotICAgICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMgPT09IHRydWUpIG9wdGlvbnMg
PSB7dHJpZ2dlcjogb3B0aW9uc307Ci0gICAgICBmcmFnbWVudCA9IHRoaXMuZ2V0RnJhZ21lbnQo
ZnJhZ21lbnQgfHwgJycpOwotICAgICAgaWYgKHRoaXMuZnJhZ21lbnQgPT09IGZyYWdtZW50KSBy
ZXR1cm47Ci0gICAgICB0aGlzLmZyYWdtZW50ID0gZnJhZ21lbnQ7Ci0gICAgICB2YXIgdXJsID0g
dGhpcy5yb290ICsgZnJhZ21lbnQ7Ci0KLSAgICAgIC8vIElmIHB1c2hTdGF0ZSBpcyBhdmFpbGFi
bGUsIHdlIHVzZSBpdCB0byBzZXQgdGhlIGZyYWdtZW50IGFzIGEgcmVhbCBVUkwuCi0gICAgICBp
ZiAodGhpcy5faGFzUHVzaFN0YXRlKSB7Ci0gICAgICAgIHRoaXMuaGlzdG9yeVtvcHRpb25zLnJl
cGxhY2UgPyAncmVwbGFjZVN0YXRlJyA6ICdwdXNoU3RhdGUnXSh7fSwgZG9jdW1lbnQudGl0bGUs
IHVybCk7Ci0KLSAgICAgIC8vIElmIGhhc2ggY2hhbmdlcyBoYXZlbid0IGJlZW4gZXhwbGljaXRs
eSBkaXNhYmxlZCwgdXBkYXRlIHRoZSBoYXNoCi0gICAgICAvLyBmcmFnbWVudCB0byBzdG9yZSBo
aXN0b3J5LgotICAgICAgfSBlbHNlIGlmICh0aGlzLl93YW50c0hhc2hDaGFuZ2UpIHsKLSAgICAg
ICAgdGhpcy5fdXBkYXRlSGFzaCh0aGlzLmxvY2F0aW9uLCBmcmFnbWVudCwgb3B0aW9ucy5yZXBs
YWNlKTsKLSAgICAgICAgaWYgKHRoaXMuaWZyYW1lICYmIChmcmFnbWVudCAhPT0gdGhpcy5nZXRG
cmFnbWVudCh0aGlzLmdldEhhc2godGhpcy5pZnJhbWUpKSkpIHsKLSAgICAgICAgICAvLyBPcGVu
aW5nIGFuZCBjbG9zaW5nIHRoZSBpZnJhbWUgdHJpY2tzIElFNyBhbmQgZWFybGllciB0byBwdXNo
IGEKLSAgICAgICAgICAvLyBoaXN0b3J5IGVudHJ5IG9uIGhhc2gtdGFnIGNoYW5nZS4gIFdoZW4g
cmVwbGFjZSBpcyB0cnVlLCB3ZSBkb24ndAotICAgICAgICAgIC8vIHdhbnQgdGhpcy4KLSAgICAg
ICAgICBpZighb3B0aW9ucy5yZXBsYWNlKSB0aGlzLmlmcmFtZS5kb2N1bWVudC5vcGVuKCkuY2xv
c2UoKTsKLSAgICAgICAgICB0aGlzLl91cGRhdGVIYXNoKHRoaXMuaWZyYW1lLmxvY2F0aW9uLCBm
cmFnbWVudCwgb3B0aW9ucy5yZXBsYWNlKTsKLSAgICAgICAgfQotCi0gICAgICAvLyBJZiB5b3Un
dmUgdG9sZCB1cyB0aGF0IHlvdSBleHBsaWNpdGx5IGRvbid0IHdhbnQgZmFsbGJhY2sgaGFzaGNo
YW5nZS0KLSAgICAgIC8vIGJhc2VkIGhpc3RvcnksIHRoZW4gYG5hdmlnYXRlYCBiZWNvbWVzIGEg
cGFnZSByZWZyZXNoLgotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubG9jYXRp
b24uYXNzaWduKHVybCk7Ci0gICAgICB9Ci0gICAgICBpZiAob3B0aW9ucy50cmlnZ2VyKSB0aGlz
LmxvYWRVcmwoZnJhZ21lbnQpOwotICAgIH0sCi0KLSAgICAvLyBVcGRhdGUgdGhlIGhhc2ggbG9j
YXRpb24sIGVpdGhlciByZXBsYWNpbmcgdGhlIGN1cnJlbnQgZW50cnksIG9yIGFkZGluZwotICAg
IC8vIGEgbmV3IG9uZSB0byB0aGUgYnJvd3NlciBoaXN0b3J5LgotICAgIF91cGRhdGVIYXNoOiBm
dW5jdGlvbihsb2NhdGlvbiwgZnJhZ21lbnQsIHJlcGxhY2UpIHsKLSAgICAgIGlmIChyZXBsYWNl
KSB7Ci0gICAgICAgIHZhciBocmVmID0gbG9jYXRpb24uaHJlZi5yZXBsYWNlKC8oamF2YXNjcmlw
dDp8IykuKiQvLCAnJyk7Ci0gICAgICAgIGxvY2F0aW9uLnJlcGxhY2UoaHJlZiArICcjJyArIGZy
YWdtZW50KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFNvbWUgYnJvd3NlcnMgcmVxdWly
ZSB0aGF0IGBoYXNoYCBjb250YWlucyBhIGxlYWRpbmcgIy4KLSAgICAgICAgbG9jYXRpb24uaGFz
aCA9ICcjJyArIGZyYWdtZW50OwotICAgICAgfQotICAgIH0KLQotICB9KTsKLQotICAvLyBDcmVh
dGUgdGhlIGRlZmF1bHQgQmFja2JvbmUuaGlzdG9yeS4KLSAgQmFja2JvbmUuaGlzdG9yeSA9IG5l
dyBIaXN0b3J5OwotCi0gIC8vIEhlbHBlcnMKLSAgLy8gLS0tLS0tLQotCi0gIC8vIEhlbHBlciBm
dW5jdGlvbiB0byBjb3JyZWN0bHkgc2V0IHVwIHRoZSBwcm90b3R5cGUgY2hhaW4sIGZvciBzdWJj
bGFzc2VzLgotICAvLyBTaW1pbGFyIHRvIGBnb29nLmluaGVyaXRzYCwgYnV0IHVzZXMgYSBoYXNo
IG9mIHByb3RvdHlwZSBwcm9wZXJ0aWVzIGFuZAotICAvLyBjbGFzcyBwcm9wZXJ0aWVzIHRvIGJl
IGV4dGVuZGVkLgotICB2YXIgZXh0ZW5kID0gZnVuY3Rpb24ocHJvdG9Qcm9wcywgc3RhdGljUHJv
cHMpIHsKLSAgICB2YXIgcGFyZW50ID0gdGhpczsKLSAgICB2YXIgY2hpbGQ7Ci0KLSAgICAvLyBU
aGUgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBuZXcgc3ViY2xhc3MgaXMgZWl0aGVyIGRl
ZmluZWQgYnkgeW91Ci0gICAgLy8gKHRoZSAiY29uc3RydWN0b3IiIHByb3BlcnR5IGluIHlvdXIg
YGV4dGVuZGAgZGVmaW5pdGlvbiksIG9yIGRlZmF1bHRlZAotICAgIC8vIGJ5IHVzIHRvIHNpbXBs
eSBjYWxsIHRoZSBwYXJlbnQncyBjb25zdHJ1Y3Rvci4KLSAgICBpZiAocHJvdG9Qcm9wcyAmJiBf
Lmhhcyhwcm90b1Byb3BzLCAnY29uc3RydWN0b3InKSkgewotICAgICAgY2hpbGQgPSBwcm90b1By
b3BzLmNvbnN0cnVjdG9yOwotICAgIH0gZWxzZSB7Ci0gICAgICBjaGlsZCA9IGZ1bmN0aW9uKCl7
IHJldHVybiBwYXJlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTsKLSAgICB9Ci0KLSAgICAv
LyBBZGQgc3RhdGljIHByb3BlcnRpZXMgdG8gdGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLCBpZiBz
dXBwbGllZC4KLSAgICBfLmV4dGVuZChjaGlsZCwgcGFyZW50LCBzdGF0aWNQcm9wcyk7Ci0KLSAg
ICAvLyBTZXQgdGhlIHByb3RvdHlwZSBjaGFpbiB0byBpbmhlcml0IGZyb20gYHBhcmVudGAsIHdp
dGhvdXQgY2FsbGluZwotICAgIC8vIGBwYXJlbnRgJ3MgY29uc3RydWN0b3IgZnVuY3Rpb24uCi0g
ICAgdmFyIFN1cnJvZ2F0ZSA9IGZ1bmN0aW9uKCl7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsg
fTsKLSAgICBTdXJyb2dhdGUucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTsKLSAgICBjaGls
ZC5wcm90b3R5cGUgPSBuZXcgU3Vycm9nYXRlOwotCi0gICAgLy8gQWRkIHByb3RvdHlwZSBwcm9w
ZXJ0aWVzIChpbnN0YW5jZSBwcm9wZXJ0aWVzKSB0byB0aGUgc3ViY2xhc3MsCi0gICAgLy8gaWYg
c3VwcGxpZWQuCi0gICAgaWYgKHByb3RvUHJvcHMpIF8uZXh0ZW5kKGNoaWxkLnByb3RvdHlwZSwg
cHJvdG9Qcm9wcyk7Ci0KLSAgICAvLyBTZXQgYSBjb252ZW5pZW5jZSBwcm9wZXJ0eSBpbiBjYXNl
IHRoZSBwYXJlbnQncyBwcm90b3R5cGUgaXMgbmVlZGVkCi0gICAgLy8gbGF0ZXIuCi0gICAgY2hp
bGQuX19zdXBlcl9fID0gcGFyZW50LnByb3RvdHlwZTsKLQotICAgIHJldHVybiBjaGlsZDsKLSAg
fTsKLQotICAvLyBTZXQgdXAgaW5oZXJpdGFuY2UgZm9yIHRoZSBtb2RlbCwgY29sbGVjdGlvbiwg
cm91dGVyLCB2aWV3IGFuZCBoaXN0b3J5LgotICBNb2RlbC5leHRlbmQgPSBDb2xsZWN0aW9uLmV4
dGVuZCA9IFJvdXRlci5leHRlbmQgPSBWaWV3LmV4dGVuZCA9IEhpc3RvcnkuZXh0ZW5kID0gZXh0
ZW5kOwotCi0gIC8vIFRocm93IGFuIGVycm9yIHdoZW4gYSBVUkwgaXMgbmVlZGVkLCBhbmQgbm9u
ZSBpcyBzdXBwbGllZC4KLSAgdmFyIHVybEVycm9yID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhyb3cg
bmV3IEVycm9yKCdBICJ1cmwiIHByb3BlcnR5IG9yIGZ1bmN0aW9uIG11c3QgYmUgc3BlY2lmaWVk
Jyk7Ci0gIH07Ci0KLSAgLy8gV3JhcCBhbiBvcHRpb25hbCBlcnJvciBjYWxsYmFjayB3aXRoIGEg
ZmFsbGJhY2sgZXJyb3IgZXZlbnQuCi0gIHZhciB3cmFwRXJyb3IgPSBmdW5jdGlvbiAobW9kZWws
IG9wdGlvbnMpIHsKLSAgICB2YXIgZXJyb3IgPSBvcHRpb25zLmVycm9yOwotICAgIG9wdGlvbnMu
ZXJyb3IgPSBmdW5jdGlvbihyZXNwKSB7Ci0gICAgICBpZiAoZXJyb3IpIGVycm9yKG1vZGVsLCBy
ZXNwLCBvcHRpb25zKTsKLSAgICAgIG1vZGVsLnRyaWdnZXIoJ2Vycm9yJywgbW9kZWwsIHJlc3As
IG9wdGlvbnMpOwotICAgIH07Ci0gIH07Ci0KLX0pLmNhbGwodGhpcyk7CmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9iYWNrYm9uZS9ib3dlcl9jb21wb25lbnRzL2pxdWVyeS9qcXVlcnkuanMgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9iYWNrYm9uZS9ib3dlcl9jb21wb25lbnRzL2pxdWVyeS9qcXVlcnkuanMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzZmVlZjJkOTlhZTIzYmQ2OWIxMDNkZmNkNmY2
NDZkMGY4ZmZlMWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvYm93ZXJfY29tcG9uZW50cy9qcXVlcnkvanF1ZXJ5Lmpz
CisrKyAvZGV2L251bGwKQEAgLTEsOTU5NyArMCwwIEBACi0vKiEKLSAqIGpRdWVyeSBKYXZhU2Ny
aXB0IExpYnJhcnkgdjEuOS4xCi0gKiBodHRwOi8vanF1ZXJ5LmNvbS8KLSAqCi0gKiBJbmNsdWRl
cyBTaXp6bGUuanMKLSAqIGh0dHA6Ly9zaXp6bGVqcy5jb20vCi0gKgotICogQ29weXJpZ2h0IDIw
MDUsIDIwMTIgalF1ZXJ5IEZvdW5kYXRpb24sIEluYy4gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycwot
ICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCi0gKiBodHRwOi8vanF1ZXJ5Lm9yZy9s
aWNlbnNlCi0gKgotICogRGF0ZTogMjAxMy0yLTQKLSAqLwotKGZ1bmN0aW9uKCB3aW5kb3csIHVu
ZGVmaW5lZCApIHsKLQotLy8gQ2FuJ3QgZG8gdGhpcyBiZWNhdXNlIHNldmVyYWwgYXBwcyBpbmNs
dWRpbmcgQVNQLk5FVCB0cmFjZQotLy8gdGhlIHN0YWNrIHZpYSBhcmd1bWVudHMuY2FsbGVyLmNh
bGxlZSBhbmQgRmlyZWZveCBkaWVzIGlmCi0vLyB5b3UgdHJ5IHRvIHRyYWNlIHRocm91Z2ggInVz
ZSBzdHJpY3QiIGNhbGwgY2hhaW5zLiAoIzEzMzM1KQotLy8gU3VwcG9ydDogRmlyZWZveCAxOCsK
LS8vInVzZSBzdHJpY3QiOwotdmFyCi0gICAgLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJl
YWR5Ci0gICAgcmVhZHlMaXN0LAotCi0gICAgLy8gQSBjZW50cmFsIHJlZmVyZW5jZSB0byB0aGUg
cm9vdCBqUXVlcnkoZG9jdW1lbnQpCi0gICAgcm9vdGpRdWVyeSwKLQotICAgIC8vIFN1cHBvcnQ6
IElFPDkKLSAgICAvLyBGb3IgYHR5cGVvZiBub2RlLm1ldGhvZGAgaW5zdGVhZCBvZiBgbm9kZS5t
ZXRob2QgIT09IHVuZGVmaW5lZGAKLSAgICBjb3JlX3N0cnVuZGVmaW5lZCA9IHR5cGVvZiB1bmRl
ZmluZWQsCi0KLSAgICAvLyBVc2UgdGhlIGNvcnJlY3QgZG9jdW1lbnQgYWNjb3JkaW5nbHkgd2l0
aCB3aW5kb3cgYXJndW1lbnQgKHNhbmRib3gpCi0gICAgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1l
bnQsCi0gICAgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb24sCi0KLSAgICAvLyBNYXAgb3ZlciBq
UXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGUKLSAgICBfalF1ZXJ5ID0gd2luZG93LmpRdWVyeSwK
LQotICAgIC8vIE1hcCBvdmVyIHRoZSAkIGluIGNhc2Ugb2Ygb3ZlcndyaXRlCi0gICAgXyQgPSB3
aW5kb3cuJCwKLQotICAgIC8vIFtbQ2xhc3NdXSAtPiB0eXBlIHBhaXJzCi0gICAgY2xhc3MydHlw
ZSA9IHt9LAotCi0gICAgLy8gTGlzdCBvZiBkZWxldGVkIGRhdGEgY2FjaGUgaWRzLCBzbyB3ZSBj
YW4gcmV1c2UgdGhlbQotICAgIGNvcmVfZGVsZXRlZElkcyA9IFtdLAotCi0gICAgY29yZV92ZXJz
aW9uID0gIjEuOS4xIiwKLQotICAgIC8vIFNhdmUgYSByZWZlcmVuY2UgdG8gc29tZSBjb3JlIG1l
dGhvZHMKLSAgICBjb3JlX2NvbmNhdCA9IGNvcmVfZGVsZXRlZElkcy5jb25jYXQsCi0gICAgY29y
ZV9wdXNoID0gY29yZV9kZWxldGVkSWRzLnB1c2gsCi0gICAgY29yZV9zbGljZSA9IGNvcmVfZGVs
ZXRlZElkcy5zbGljZSwKLSAgICBjb3JlX2luZGV4T2YgPSBjb3JlX2RlbGV0ZWRJZHMuaW5kZXhP
ZiwKLSAgICBjb3JlX3RvU3RyaW5nID0gY2xhc3MydHlwZS50b1N0cmluZywKLSAgICBjb3JlX2hh
c093biA9IGNsYXNzMnR5cGUuaGFzT3duUHJvcGVydHksCi0gICAgY29yZV90cmltID0gY29yZV92
ZXJzaW9uLnRyaW0sCi0KLSAgICAvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeQotICAg
IGpRdWVyeSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHsKLSAgICAvLyBUaGUgalF1
ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNl
ZCcKLSAgICByZXR1cm4gbmV3IGpRdWVyeS5mbi5pbml0KCBzZWxlY3RvciwgY29udGV4dCwgcm9v
dGpRdWVyeSApOwotICAgIH0sCi0KLSAgICAvLyBVc2VkIGZvciBtYXRjaGluZyBudW1iZXJzCi0g
ICAgY29yZV9wbnVtID0gL1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3Vy
Y2UsCi0KLSAgICAvLyBVc2VkIGZvciBzcGxpdHRpbmcgb24gd2hpdGVzcGFjZQotICAgIGNvcmVf
cm5vdHdoaXRlID0gL1xTKy9nLAotCi0gICAgLy8gTWFrZSBzdXJlIHdlIHRyaW0gQk9NIGFuZCBO
QlNQIChoZXJlJ3MgbG9va2luZyBhdCB5b3UsIFNhZmFyaSA1LjAgYW5kIElFKQotICAgIHJ0cmlt
ID0gL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLAotCi0gICAgLy8gQSBzaW1w
bGUgd2F5IHRvIGNoZWNrIGZvciBIVE1MIHN0cmluZ3MKLSAgICAvLyBQcmlvcml0aXplICNpZCBv
dmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAoIzk1MjEpCi0gICAgLy8g
U3RyaWN0IEhUTUwgcmVjb2duaXRpb24gKCMxMTI5MDogbXVzdCBzdGFydCB3aXRoIDwpCi0gICAg
cnF1aWNrRXhwciA9IC9eKD86KDxbXHdcV10rPilbXj5dKnwjKFtcdy1dKikpJC8sCi0KLSAgICAv
LyBNYXRjaCBhIHN0YW5kYWxvbmUgdGFnCi0gICAgcnNpbmdsZVRhZyA9IC9ePChcdyspXHMqXC8/
Pig/OjxcL1wxPnwpJC8sCi0KLSAgICAvLyBKU09OIFJlZ0V4cAotICAgIHJ2YWxpZGNoYXJzID0g
L15bXF0sOnt9XHNdKiQvLAotICAgIHJ2YWxpZGJyYWNlcyA9IC8oPzpefDp8LCkoPzpccypcWykr
L2csCi0gICAgcnZhbGlkZXNjYXBlID0gL1xcKD86WyJcXFwvYmZucnRdfHVbXGRhLWZBLUZdezR9
KS9nLAotICAgIHJ2YWxpZHRva2VucyA9IC8iW14iXFxcclxuXSoifHRydWV8ZmFsc2V8bnVsbHwt
Pyg/OlxkK1wufClcZCsoPzpbZUVdWystXT9cZCt8KS9nLAotCi0gICAgLy8gTWF0Y2hlcyBkYXNo
ZWQgc3RyaW5nIGZvciBjYW1lbGl6aW5nCi0gICAgcm1zUHJlZml4ID0gL14tbXMtLywKLSAgICBy
ZGFzaEFscGhhID0gLy0oW1xkYS16XSkvZ2ksCi0KLSAgICAvLyBVc2VkIGJ5IGpRdWVyeS5jYW1l
bENhc2UgYXMgY2FsbGJhY2sgdG8gcmVwbGFjZSgpCi0gICAgZmNhbWVsQ2FzZSA9IGZ1bmN0aW9u
KCBhbGwsIGxldHRlciApIHsKLSAgICByZXR1cm4gbGV0dGVyLnRvVXBwZXJDYXNlKCk7Ci0gICAg
fSwKLQotICAgIC8vIFRoZSByZWFkeSBldmVudCBoYW5kbGVyCi0gICAgY29tcGxldGVkID0gZnVu
Y3Rpb24oIGV2ZW50ICkgewotCi0gICAgLy8gcmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIiBpcyBn
b29kIGVub3VnaCBmb3IgdXMgdG8gY2FsbCB0aGUgZG9tIHJlYWR5IGluIG9sZElFCi0gICAgaWYg
KCBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyIHx8IGV2ZW50LnR5cGUgPT09ICJsb2FkIiB8fCBk
b2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiICkgewotICAgIGRldGFjaCgpOwotICAg
IGpRdWVyeS5yZWFkeSgpOwotICAgIH0KLSAgICB9LAotICAgIC8vIENsZWFuLXVwIG1ldGhvZCBm
b3IgZG9tIHJlYWR5IGV2ZW50cwotICAgIGRldGFjaCA9IGZ1bmN0aW9uKCkgewotICAgIGlmICgg
ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciApIHsKLSAgICBkb2N1bWVudC5yZW1vdmVFdmVudExp
c3RlbmVyKCAiRE9NQ29udGVudExvYWRlZCIsIGNvbXBsZXRlZCwgZmFsc2UgKTsKLSAgICB3aW5k
b3cucmVtb3ZlRXZlbnRMaXN0ZW5lciggImxvYWQiLCBjb21wbGV0ZWQsIGZhbHNlICk7Ci0KLSAg
ICB9IGVsc2UgewotICAgIGRvY3VtZW50LmRldGFjaEV2ZW50KCAib25yZWFkeXN0YXRlY2hhbmdl
IiwgY29tcGxldGVkICk7Ci0gICAgd2luZG93LmRldGFjaEV2ZW50KCAib25sb2FkIiwgY29tcGxl
dGVkICk7Ci0gICAgfQotICAgIH07Ci0KLWpRdWVyeS5mbiA9IGpRdWVyeS5wcm90b3R5cGUgPSB7
Ci0gICAgLy8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNlZAotICAgIGpx
dWVyeTogY29yZV92ZXJzaW9uLAotCi0gICAgY29uc3RydWN0b3I6IGpRdWVyeSwKLSAgICBpbml0
OiBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJvb3RqUXVlcnkgKSB7Ci0gICAgdmFyIG1h
dGNoLCBlbGVtOwotCi0gICAgLy8gSEFORExFOiAkKCIiKSwgJChudWxsKSwgJCh1bmRlZmluZWQp
LCAkKGZhbHNlKQotICAgIGlmICggIXNlbGVjdG9yICkgewotICAgIHJldHVybiB0aGlzOwotICAg
IH0KLQotICAgIC8vIEhhbmRsZSBIVE1MIHN0cmluZ3MKLSAgICBpZiAoIHR5cGVvZiBzZWxlY3Rv
ciA9PT0gInN0cmluZyIgKSB7Ci0gICAgaWYgKCBzZWxlY3Rvci5jaGFyQXQoMCkgPT09ICI8IiAm
JiBzZWxlY3Rvci5jaGFyQXQoIHNlbGVjdG9yLmxlbmd0aCAtIDEgKSA9PT0gIj4iICYmIHNlbGVj
dG9yLmxlbmd0aCA+PSAzICkgewotICAgIC8vIEFzc3VtZSB0aGF0IHN0cmluZ3MgdGhhdCBzdGFy
dCBhbmQgZW5kIHdpdGggPD4gYXJlIEhUTUwgYW5kIHNraXAgdGhlIHJlZ2V4IGNoZWNrCi0gICAg
bWF0Y2ggPSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07Ci0KLSAgICB9IGVsc2UgewotICAgIG1h
dGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApOwotICAgIH0KLQotICAgIC8vIE1hdGNo
IGh0bWwgb3IgbWFrZSBzdXJlIG5vIGNvbnRleHQgaXMgc3BlY2lmaWVkIGZvciAjaWQKLSAgICBp
ZiAoIG1hdGNoICYmIChtYXRjaFsxXSB8fCAhY29udGV4dCkgKSB7Ci0KLSAgICAvLyBIQU5ETEU6
ICQoaHRtbCkgLT4gJChhcnJheSkKLSAgICBpZiAoIG1hdGNoWzFdICkgewotICAgIGNvbnRleHQg
PSBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ID8gY29udGV4dFswXSA6IGNvbnRleHQ7Ci0KLSAg
ICAvLyBzY3JpcHRzIGlzIHRydWUgZm9yIGJhY2stY29tcGF0Ci0gICAgalF1ZXJ5Lm1lcmdlKCB0
aGlzLCBqUXVlcnkucGFyc2VIVE1MKAotICAgIG1hdGNoWzFdLAotICAgIGNvbnRleHQgJiYgY29u
dGV4dC5ub2RlVHlwZSA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogZG9jdW1l
bnQsCi0gICAgdHJ1ZQotICAgICkgKTsKLQotICAgIC8vIEhBTkRMRTogJChodG1sLCBwcm9wcykK
LSAgICBpZiAoIHJzaW5nbGVUYWcudGVzdCggbWF0Y2hbMV0gKSAmJiBqUXVlcnkuaXNQbGFpbk9i
amVjdCggY29udGV4dCApICkgewotICAgIGZvciAoIG1hdGNoIGluIGNvbnRleHQgKSB7Ci0gICAg
Ly8gUHJvcGVydGllcyBvZiBjb250ZXh0IGFyZSBjYWxsZWQgYXMgbWV0aG9kcyBpZiBwb3NzaWJs
ZQotICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHRoaXNbIG1hdGNoIF0gKSApIHsKLSAgICB0
aGlzWyBtYXRjaCBdKCBjb250ZXh0WyBtYXRjaCBdICk7Ci0KLSAgICAvLyAuLi5hbmQgb3RoZXJ3
aXNlIHNldCBhcyBhdHRyaWJ1dGVzCi0gICAgfSBlbHNlIHsKLSAgICB0aGlzLmF0dHIoIG1hdGNo
LCBjb250ZXh0WyBtYXRjaCBdICk7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
dGhpczsKLQotICAgIC8vIEhBTkRMRTogJCgjaWQpCi0gICAgfSBlbHNlIHsKLSAgICBlbGVtID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWzJdICk7Ci0KLSAgICAvLyBDaGVjayBwYXJl
bnROb2RlIHRvIGNhdGNoIHdoZW4gQmxhY2tiZXJyeSA0LjYgcmV0dXJucwotICAgIC8vIG5vZGVz
IHRoYXQgYXJlIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgIzY5NjMKLSAgICBpZiAoIGVsZW0g
JiYgZWxlbS5wYXJlbnROb2RlICkgewotICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBJRSBh
bmQgT3BlcmEgcmV0dXJuIGl0ZW1zCi0gICAgLy8gYnkgbmFtZSBpbnN0ZWFkIG9mIElECi0gICAg
aWYgKCBlbGVtLmlkICE9PSBtYXRjaFsyXSApIHsKLSAgICByZXR1cm4gcm9vdGpRdWVyeS5maW5k
KCBzZWxlY3RvciApOwotICAgIH0KLQotICAgIC8vIE90aGVyd2lzZSwgd2UgaW5qZWN0IHRoZSBl
bGVtZW50IGRpcmVjdGx5IGludG8gdGhlIGpRdWVyeSBvYmplY3QKLSAgICB0aGlzLmxlbmd0aCA9
IDE7Ci0gICAgdGhpc1swXSA9IGVsZW07Ci0gICAgfQotCi0gICAgdGhpcy5jb250ZXh0ID0gZG9j
dW1lbnQ7Ci0gICAgdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yOwotICAgIHJldHVybiB0aGlzOwot
ICAgIH0KLQotICAgIC8vIEhBTkRMRTogJChleHByLCAkKC4uLikpCi0gICAgfSBlbHNlIGlmICgg
IWNvbnRleHQgfHwgY29udGV4dC5qcXVlcnkgKSB7Ci0gICAgcmV0dXJuICggY29udGV4dCB8fCBy
b290alF1ZXJ5ICkuZmluZCggc2VsZWN0b3IgKTsKLQotICAgIC8vIEhBTkRMRTogJChleHByLCBj
b250ZXh0KQotICAgIC8vICh3aGljaCBpcyBqdXN0IGVxdWl2YWxlbnQgdG86ICQoY29udGV4dCku
ZmluZChleHByKQotICAgIH0gZWxzZSB7Ci0gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IoIGNv
bnRleHQgKS5maW5kKCBzZWxlY3RvciApOwotICAgIH0KLQotICAgIC8vIEhBTkRMRTogJChET01F
bGVtZW50KQotICAgIH0gZWxzZSBpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkgewotICAgIHRoaXMu
Y29udGV4dCA9IHRoaXNbMF0gPSBzZWxlY3RvcjsKLSAgICB0aGlzLmxlbmd0aCA9IDE7Ci0gICAg
cmV0dXJuIHRoaXM7Ci0KLSAgICAvLyBIQU5ETEU6ICQoZnVuY3Rpb24pCi0gICAgLy8gU2hvcnRj
dXQgZm9yIGRvY3VtZW50IHJlYWR5Ci0gICAgfSBlbHNlIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24o
IHNlbGVjdG9yICkgKSB7Ci0gICAgcmV0dXJuIHJvb3RqUXVlcnkucmVhZHkoIHNlbGVjdG9yICk7
Ci0gICAgfQotCi0gICAgaWYgKCBzZWxlY3Rvci5zZWxlY3RvciAhPT0gdW5kZWZpbmVkICkgewot
ICAgIHRoaXMuc2VsZWN0b3IgPSBzZWxlY3Rvci5zZWxlY3RvcjsKLSAgICB0aGlzLmNvbnRleHQg
PSBzZWxlY3Rvci5jb250ZXh0OwotICAgIH0KLQotICAgIHJldHVybiBqUXVlcnkubWFrZUFycmF5
KCBzZWxlY3RvciwgdGhpcyApOwotICAgIH0sCi0KLSAgICAvLyBTdGFydCB3aXRoIGFuIGVtcHR5
IHNlbGVjdG9yCi0gICAgc2VsZWN0b3I6ICIiLAotCi0gICAgLy8gVGhlIGRlZmF1bHQgbGVuZ3Ro
IG9mIGEgalF1ZXJ5IG9iamVjdCBpcyAwCi0gICAgbGVuZ3RoOiAwLAotCi0gICAgLy8gVGhlIG51
bWJlciBvZiBlbGVtZW50cyBjb250YWluZWQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQKLSAg
ICBzaXplOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5sZW5ndGg7Ci0gICAgfSwKLQot
ICAgIHRvQXJyYXk6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBjb3JlX3NsaWNlLmNhbGwoIHRo
aXMgKTsKLSAgICB9LAotCi0gICAgLy8gR2V0IHRoZSBOdGggZWxlbWVudCBpbiB0aGUgbWF0Y2hl
ZCBlbGVtZW50IHNldCBPUgotICAgIC8vIEdldCB0aGUgd2hvbGUgbWF0Y2hlZCBlbGVtZW50IHNl
dCBhcyBhIGNsZWFuIGFycmF5Ci0gICAgZ2V0OiBmdW5jdGlvbiggbnVtICkgewotICAgIHJldHVy
biBudW0gPT0gbnVsbCA/Ci0KLSAgICAvLyBSZXR1cm4gYSAnY2xlYW4nIGFycmF5Ci0gICAgdGhp
cy50b0FycmF5KCkgOgotCi0gICAgLy8gUmV0dXJuIGp1c3QgdGhlIG9iamVjdAotICAgICggbnVt
IDwgMCA/IHRoaXNbIHRoaXMubGVuZ3RoICsgbnVtIF0gOiB0aGlzWyBudW0gXSApOwotICAgIH0s
Ci0KLSAgICAvLyBUYWtlIGFuIGFycmF5IG9mIGVsZW1lbnRzIGFuZCBwdXNoIGl0IG9udG8gdGhl
IHN0YWNrCi0gICAgLy8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQpCi0g
ICAgcHVzaFN0YWNrOiBmdW5jdGlvbiggZWxlbXMgKSB7Ci0KLSAgICAvLyBCdWlsZCBhIG5ldyBq
UXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldAotICAgIHZhciByZXQgPSBqUXVlcnkubWVyZ2UoIHRo
aXMuY29uc3RydWN0b3IoKSwgZWxlbXMgKTsKLQotICAgIC8vIEFkZCB0aGUgb2xkIG9iamVjdCBv
bnRvIHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpCi0gICAgcmV0LnByZXZPYmplY3QgPSB0aGlz
OwotICAgIHJldC5jb250ZXh0ID0gdGhpcy5jb250ZXh0OwotCi0gICAgLy8gUmV0dXJuIHRoZSBu
ZXdseS1mb3JtZWQgZWxlbWVudCBzZXQKLSAgICByZXR1cm4gcmV0OwotICAgIH0sCi0KLSAgICAv
LyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0
LgotICAgIC8vIChZb3UgY2FuIHNlZWQgdGhlIGFyZ3VtZW50cyB3aXRoIGFuIGFycmF5IG9mIGFy
Z3MsIGJ1dCB0aGlzIGlzCi0gICAgLy8gb25seSB1c2VkIGludGVybmFsbHkuKQotICAgIGVhY2g6
IGZ1bmN0aW9uKCBjYWxsYmFjaywgYXJncyApIHsKLSAgICByZXR1cm4galF1ZXJ5LmVhY2goIHRo
aXMsIGNhbGxiYWNrLCBhcmdzICk7Ci0gICAgfSwKLQotICAgIHJlYWR5OiBmdW5jdGlvbiggZm4g
KSB7Ci0gICAgLy8gQWRkIHRoZSBjYWxsYmFjawotICAgIGpRdWVyeS5yZWFkeS5wcm9taXNlKCku
ZG9uZSggZm4gKTsKLQotICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0KLSAgICBzbGljZTogZnVu
Y3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBjb3JlX3NsaWNlLmFwcGx5KCB0
aGlzLCBhcmd1bWVudHMgKSApOwotICAgIH0sCi0KLSAgICBmaXJzdDogZnVuY3Rpb24oKSB7Ci0g
ICAgcmV0dXJuIHRoaXMuZXEoIDAgKTsKLSAgICB9LAotCi0gICAgbGFzdDogZnVuY3Rpb24oKSB7
Ci0gICAgcmV0dXJuIHRoaXMuZXEoIC0xICk7Ci0gICAgfSwKLQotICAgIGVxOiBmdW5jdGlvbigg
aSApIHsKLSAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGgsCi0gICAgaiA9ICtpICsgKCBpIDwgMCA/
IGxlbiA6IDAgKTsKLSAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIGogPj0gMCAmJiBqIDwgbGVu
ID8gWyB0aGlzW2pdIF0gOiBbXSApOwotICAgIH0sCi0KLSAgICBtYXA6IGZ1bmN0aW9uKCBjYWxs
YmFjayApIHsKLSAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tYXAodGhpcywgZnVu
Y3Rpb24oIGVsZW0sIGkgKSB7Ci0gICAgcmV0dXJuIGNhbGxiYWNrLmNhbGwoIGVsZW0sIGksIGVs
ZW0gKTsKLSAgICB9KSk7Ci0gICAgfSwKLQotICAgIGVuZDogZnVuY3Rpb24oKSB7Ci0gICAgcmV0
dXJuIHRoaXMucHJldk9iamVjdCB8fCB0aGlzLmNvbnN0cnVjdG9yKG51bGwpOwotICAgIH0sCi0K
LSAgICAvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCi0gICAgLy8gQmVoYXZlcyBsaWtlIGFuIEFy
cmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuCi0gICAgcHVzaDogY29yZV9w
dXNoLAotICAgIHNvcnQ6IFtdLnNvcnQsCi0gICAgc3BsaWNlOiBbXS5zcGxpY2UKLX07Ci0KLS8v
IEdpdmUgdGhlIGluaXQgZnVuY3Rpb24gdGhlIGpRdWVyeSBwcm90b3R5cGUgZm9yIGxhdGVyIGlu
c3RhbnRpYXRpb24KLWpRdWVyeS5mbi5pbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjsKLQotalF1
ZXJ5LmV4dGVuZCA9IGpRdWVyeS5mbi5leHRlbmQgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgc3Jj
LCBjb3B5SXNBcnJheSwgY29weSwgbmFtZSwgb3B0aW9ucywgY2xvbmUsCi0gICAgdGFyZ2V0ID0g
YXJndW1lbnRzWzBdIHx8IHt9LAotICAgIGkgPSAxLAotICAgIGxlbmd0aCA9IGFyZ3VtZW50cy5s
ZW5ndGgsCi0gICAgZGVlcCA9IGZhbHNlOwotCi0gICAgLy8gSGFuZGxlIGEgZGVlcCBjb3B5IHNp
dHVhdGlvbgotICAgIGlmICggdHlwZW9mIHRhcmdldCA9PT0gImJvb2xlYW4iICkgewotICAgIGRl
ZXAgPSB0YXJnZXQ7Ci0gICAgdGFyZ2V0ID0gYXJndW1lbnRzWzFdIHx8IHt9OwotICAgIC8vIHNr
aXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXQKLSAgICBpID0gMjsKLSAgICB9Ci0KLSAgICAv
LyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3Np
YmxlIGluIGRlZXAgY29weSkKLSAgICBpZiAoIHR5cGVvZiB0YXJnZXQgIT09ICJvYmplY3QiICYm
ICFqUXVlcnkuaXNGdW5jdGlvbih0YXJnZXQpICkgewotICAgIHRhcmdldCA9IHt9OwotICAgIH0K
LQotICAgIC8vIGV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBh
c3NlZAotICAgIGlmICggbGVuZ3RoID09PSBpICkgewotICAgIHRhcmdldCA9IHRoaXM7Ci0gICAg
LS1pOwotICAgIH0KLQotICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgewotICAgIC8vIE9u
bHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXMKLSAgICBpZiAoIChvcHRpb25z
ID0gYXJndW1lbnRzWyBpIF0pICE9IG51bGwgKSB7Ci0gICAgLy8gRXh0ZW5kIHRoZSBiYXNlIG9i
amVjdAotICAgIGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHsKLSAgICBzcmMgPSB0YXJnZXRbIG5h
bWUgXTsKLSAgICBjb3B5ID0gb3B0aW9uc1sgbmFtZSBdOwotCi0gICAgLy8gUHJldmVudCBuZXZl
ci1lbmRpbmcgbG9vcAotICAgIGlmICggdGFyZ2V0ID09PSBjb3B5ICkgewotICAgIGNvbnRpbnVl
OwotICAgIH0KLQotICAgIC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3Rz
IG9yIGFycmF5cwotICAgIGlmICggZGVlcCAmJiBjb3B5ICYmICggalF1ZXJ5LmlzUGxhaW5PYmpl
Y3QoY29weSkgfHwgKGNvcHlJc0FycmF5ID0galF1ZXJ5LmlzQXJyYXkoY29weSkpICkgKSB7Ci0g
ICAgaWYgKCBjb3B5SXNBcnJheSApIHsKLSAgICBjb3B5SXNBcnJheSA9IGZhbHNlOwotICAgIGNs
b25lID0gc3JjICYmIGpRdWVyeS5pc0FycmF5KHNyYykgPyBzcmMgOiBbXTsKLQotICAgIH0gZWxz
ZSB7Ci0gICAgY2xvbmUgPSBzcmMgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3Qoc3JjKSA/IHNyYyA6
IHt9OwotICAgIH0KLQotICAgIC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUg
dGhlbQotICAgIHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNv
cHkgKTsKLQotICAgIC8vIERvbid0IGJyaW5nIGluIHVuZGVmaW5lZCB2YWx1ZXMKLSAgICB9IGVs
c2UgaWYgKCBjb3B5ICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgdGFyZ2V0WyBuYW1lIF0gPSBjb3B5
OwotICAgIH0KLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiB0aGUgbW9kaWZp
ZWQgb2JqZWN0Ci0gICAgcmV0dXJuIHRhcmdldDsKLX07Ci0KLWpRdWVyeS5leHRlbmQoewotICAg
IG5vQ29uZmxpY3Q6IGZ1bmN0aW9uKCBkZWVwICkgewotICAgIGlmICggd2luZG93LiQgPT09IGpR
dWVyeSApIHsKLSAgICB3aW5kb3cuJCA9IF8kOwotICAgIH0KLQotICAgIGlmICggZGVlcCAmJiB3
aW5kb3cualF1ZXJ5ID09PSBqUXVlcnkgKSB7Ci0gICAgd2luZG93LmpRdWVyeSA9IF9qUXVlcnk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGpRdWVyeTsKLSAgICB9LAotCi0gICAgLy8gSXMgdGhlIERP
TSByZWFkeSB0byBiZSB1c2VkPyBTZXQgdG8gdHJ1ZSBvbmNlIGl0IG9jY3Vycy4KLSAgICBpc1Jl
YWR5OiBmYWxzZSwKLQotICAgIC8vIEEgY291bnRlciB0byB0cmFjayBob3cgbWFueSBpdGVtcyB0
byB3YWl0IGZvciBiZWZvcmUKLSAgICAvLyB0aGUgcmVhZHkgZXZlbnQgZmlyZXMuIFNlZSAjNjc4
MQotICAgIHJlYWR5V2FpdDogMSwKLQotICAgIC8vIEhvbGQgKG9yIHJlbGVhc2UpIHRoZSByZWFk
eSBldmVudAotICAgIGhvbGRSZWFkeTogZnVuY3Rpb24oIGhvbGQgKSB7Ci0gICAgaWYgKCBob2xk
ICkgewotICAgIGpRdWVyeS5yZWFkeVdhaXQrKzsKLSAgICB9IGVsc2UgewotICAgIGpRdWVyeS5y
ZWFkeSggdHJ1ZSApOwotICAgIH0KLSAgICB9LAotCi0gICAgLy8gSGFuZGxlIHdoZW4gdGhlIERP
TSBpcyByZWFkeQotICAgIHJlYWR5OiBmdW5jdGlvbiggd2FpdCApIHsKLQotICAgIC8vIEFib3J0
IGlmIHRoZXJlIGFyZSBwZW5kaW5nIGhvbGRzIG9yIHdlJ3JlIGFscmVhZHkgcmVhZHkKLSAgICBp
ZiAoIHdhaXQgPT09IHRydWUgPyAtLWpRdWVyeS5yZWFkeVdhaXQgOiBqUXVlcnkuaXNSZWFkeSAp
IHsKLSAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gTWFrZSBzdXJlIGJvZHkgZXhpc3RzLCBh
dCBsZWFzdCwgaW4gY2FzZSBJRSBnZXRzIGEgbGl0dGxlIG92ZXJ6ZWFsb3VzICh0aWNrZXQgIzU0
NDMpLgotICAgIGlmICggIWRvY3VtZW50LmJvZHkgKSB7Ci0gICAgcmV0dXJuIHNldFRpbWVvdXQo
IGpRdWVyeS5yZWFkeSApOwotICAgIH0KLQotICAgIC8vIFJlbWVtYmVyIHRoYXQgdGhlIERPTSBp
cyByZWFkeQotICAgIGpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTsKLQotICAgIC8vIElmIGEgbm9ybWFs
IERPTSBSZWFkeSBldmVudCBmaXJlZCwgZGVjcmVtZW50LCBhbmQgd2FpdCBpZiBuZWVkIGJlCi0g
ICAgaWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7Ci0gICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIElmIHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRv
IGV4ZWN1dGUKLSAgICByZWFkeUxpc3QucmVzb2x2ZVdpdGgoIGRvY3VtZW50LCBbIGpRdWVyeSBd
ICk7Ci0KLSAgICAvLyBUcmlnZ2VyIGFueSBib3VuZCByZWFkeSBldmVudHMKLSAgICBpZiAoIGpR
dWVyeS5mbi50cmlnZ2VyICkgewotICAgIGpRdWVyeSggZG9jdW1lbnQgKS50cmlnZ2VyKCJyZWFk
eSIpLm9mZigicmVhZHkiKTsKLSAgICB9Ci0gICAgfSwKLQotICAgIC8vIFNlZSB0ZXN0L3VuaXQv
Y29yZS5qcyBmb3IgZGV0YWlscyBjb25jZXJuaW5nIGlzRnVuY3Rpb24uCi0gICAgLy8gU2luY2Ug
dmVyc2lvbiAxLjMsIERPTSBtZXRob2RzIGFuZCBmdW5jdGlvbnMgbGlrZSBhbGVydAotICAgIC8v
IGFyZW4ndCBzdXBwb3J0ZWQuIFRoZXkgcmV0dXJuIGZhbHNlIG9uIElFICgjMjk2OCkuCi0gICAg
aXNGdW5jdGlvbjogZnVuY3Rpb24oIG9iaiApIHsKLSAgICByZXR1cm4galF1ZXJ5LnR5cGUob2Jq
KSA9PT0gImZ1bmN0aW9uIjsKLSAgICB9LAotCi0gICAgaXNBcnJheTogQXJyYXkuaXNBcnJheSB8
fCBmdW5jdGlvbiggb2JqICkgewotICAgIHJldHVybiBqUXVlcnkudHlwZShvYmopID09PSAiYXJy
YXkiOwotICAgIH0sCi0KLSAgICBpc1dpbmRvdzogZnVuY3Rpb24oIG9iaiApIHsKLSAgICByZXR1
cm4gb2JqICE9IG51bGwgJiYgb2JqID09IG9iai53aW5kb3c7Ci0gICAgfSwKLQotICAgIGlzTnVt
ZXJpYzogZnVuY3Rpb24oIG9iaiApIHsKLSAgICByZXR1cm4gIWlzTmFOKCBwYXJzZUZsb2F0KG9i
aikgKSAmJiBpc0Zpbml0ZSggb2JqICk7Ci0gICAgfSwKLQotICAgIHR5cGU6IGZ1bmN0aW9uKCBv
YmogKSB7Ci0gICAgaWYgKCBvYmogPT0gbnVsbCApIHsKLSAgICByZXR1cm4gU3RyaW5nKCBvYmog
KTsKLSAgICB9Ci0gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICJvYmplY3QiIHx8IHR5cGVvZiBv
YmogPT09ICJmdW5jdGlvbiIgPwotICAgIGNsYXNzMnR5cGVbIGNvcmVfdG9TdHJpbmcuY2FsbChv
YmopIF0gfHwgIm9iamVjdCIgOgotICAgIHR5cGVvZiBvYmo7Ci0gICAgfSwKLQotICAgIGlzUGxh
aW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7Ci0gICAgLy8gTXVzdCBiZSBhbiBPYmplY3QuCi0g
ICAgLy8gQmVjYXVzZSBvZiBJRSwgd2UgYWxzbyBoYXZlIHRvIGNoZWNrIHRoZSBwcmVzZW5jZSBv
ZiB0aGUgY29uc3RydWN0b3IgcHJvcGVydHkuCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgRE9NIG5v
ZGVzIGFuZCB3aW5kb3cgb2JqZWN0cyBkb24ndCBwYXNzIHRocm91Z2gsIGFzIHdlbGwKLSAgICBp
ZiAoICFvYmogfHwgalF1ZXJ5LnR5cGUob2JqKSAhPT0gIm9iamVjdCIgfHwgb2JqLm5vZGVUeXBl
IHx8IGpRdWVyeS5pc1dpbmRvdyggb2JqICkgKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIHRyeSB7Ci0gICAgLy8gTm90IG93biBjb25zdHJ1Y3RvciBwcm9wZXJ0eSBtdXN0IGJl
IE9iamVjdAotICAgIGlmICggb2JqLmNvbnN0cnVjdG9yICYmCi0gICAgIWNvcmVfaGFzT3duLmNh
bGwob2JqLCAiY29uc3RydWN0b3IiKSAmJgotICAgICFjb3JlX2hhc093bi5jYWxsKG9iai5jb25z
dHJ1Y3Rvci5wcm90b3R5cGUsICJpc1Byb3RvdHlwZU9mIikgKSB7Ci0gICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICB9IGNhdGNoICggZSApIHsKLSAgICAvLyBJRTgsOSBXaWxsIHRocm93IGV4
Y2VwdGlvbnMgb24gY2VydGFpbiBob3N0IG9iamVjdHMgIzk4OTcKLSAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgLy8gT3duIHByb3BlcnRpZXMgYXJlIGVudW1lcmF0ZWQgZmlyc3RseSwg
c28gdG8gc3BlZWQgdXAsCi0gICAgLy8gaWYgbGFzdCBvbmUgaXMgb3duLCB0aGVuIGFsbCBwcm9w
ZXJ0aWVzIGFyZSBvd24uCi0KLSAgICB2YXIga2V5OwotICAgIGZvciAoIGtleSBpbiBvYmogKSB7
fQotCi0gICAgcmV0dXJuIGtleSA9PT0gdW5kZWZpbmVkIHx8IGNvcmVfaGFzT3duLmNhbGwoIG9i
aiwga2V5ICk7Ci0gICAgfSwKLQotICAgIGlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7
Ci0gICAgdmFyIG5hbWU7Ci0gICAgZm9yICggbmFtZSBpbiBvYmogKSB7Ci0gICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgZXJyb3I6IGZ1bmN0
aW9uKCBtc2cgKSB7Ci0gICAgdGhyb3cgbmV3IEVycm9yKCBtc2cgKTsKLSAgICB9LAotCi0gICAg
Ly8gZGF0YTogc3RyaW5nIG9mIGh0bWwKLSAgICAvLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNw
ZWNpZmllZCwgdGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsIGRl
ZmF1bHRzIHRvIGRvY3VtZW50Ci0gICAgLy8ga2VlcFNjcmlwdHMgKG9wdGlvbmFsKTogSWYgdHJ1
ZSwgd2lsbCBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBodG1sIHN0cmluZwotICAgIHBh
cnNlSFRNTDogZnVuY3Rpb24oIGRhdGEsIGNvbnRleHQsIGtlZXBTY3JpcHRzICkgewotICAgIGlm
ICggIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICJzdHJpbmciICkgewotICAgIHJldHVybiBudWxs
OwotICAgIH0KLSAgICBpZiAoIHR5cGVvZiBjb250ZXh0ID09PSAiYm9vbGVhbiIgKSB7Ci0gICAg
a2VlcFNjcmlwdHMgPSBjb250ZXh0OwotICAgIGNvbnRleHQgPSBmYWxzZTsKLSAgICB9Ci0gICAg
Y29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7Ci0KLSAgICB2YXIgcGFyc2VkID0gcnNpbmds
ZVRhZy5leGVjKCBkYXRhICksCi0gICAgc2NyaXB0cyA9ICFrZWVwU2NyaXB0cyAmJiBbXTsKLQot
ICAgIC8vIFNpbmdsZSB0YWcKLSAgICBpZiAoIHBhcnNlZCApIHsKLSAgICByZXR1cm4gWyBjb250
ZXh0LmNyZWF0ZUVsZW1lbnQoIHBhcnNlZFsxXSApIF07Ci0gICAgfQotCi0gICAgcGFyc2VkID0g
alF1ZXJ5LmJ1aWxkRnJhZ21lbnQoIFsgZGF0YSBdLCBjb250ZXh0LCBzY3JpcHRzICk7Ci0gICAg
aWYgKCBzY3JpcHRzICkgewotICAgIGpRdWVyeSggc2NyaXB0cyApLnJlbW92ZSgpOwotICAgIH0K
LSAgICByZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgcGFyc2VkLmNoaWxkTm9kZXMgKTsKLSAgICB9
LAotCi0gICAgcGFyc2VKU09OOiBmdW5jdGlvbiggZGF0YSApIHsKLSAgICAvLyBBdHRlbXB0IHRv
IHBhcnNlIHVzaW5nIHRoZSBuYXRpdmUgSlNPTiBwYXJzZXIgZmlyc3QKLSAgICBpZiAoIHdpbmRv
dy5KU09OICYmIHdpbmRvdy5KU09OLnBhcnNlICkgewotICAgIHJldHVybiB3aW5kb3cuSlNPTi5w
YXJzZSggZGF0YSApOwotICAgIH0KLQotICAgIGlmICggZGF0YSA9PT0gbnVsbCApIHsKLSAgICBy
ZXR1cm4gZGF0YTsKLSAgICB9Ci0KLSAgICBpZiAoIHR5cGVvZiBkYXRhID09PSAic3RyaW5nIiAp
IHsKLQotICAgIC8vIE1ha2Ugc3VyZSBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2UgaXMgcmVt
b3ZlZCAoSUUgY2FuJ3QgaGFuZGxlIGl0KQotICAgIGRhdGEgPSBqUXVlcnkudHJpbSggZGF0YSAp
OwotCi0gICAgaWYgKCBkYXRhICkgewotICAgIC8vIE1ha2Ugc3VyZSB0aGUgaW5jb21pbmcgZGF0
YSBpcyBhY3R1YWwgSlNPTgotICAgIC8vIExvZ2ljIGJvcnJvd2VkIGZyb20gaHR0cDovL2pzb24u
b3JnL2pzb24yLmpzCi0gICAgaWYgKCBydmFsaWRjaGFycy50ZXN0KCBkYXRhLnJlcGxhY2UoIHJ2
YWxpZGVzY2FwZSwgIkAiICkKLSAgICAucmVwbGFjZSggcnZhbGlkdG9rZW5zLCAiXSIgKQotICAg
IC5yZXBsYWNlKCBydmFsaWRicmFjZXMsICIiKSkgKSB7Ci0KLSAgICByZXR1cm4gKCBuZXcgRnVu
Y3Rpb24oICJyZXR1cm4gIiArIGRhdGEgKSApKCk7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAg
ICBqUXVlcnkuZXJyb3IoICJJbnZhbGlkIEpTT046ICIgKyBkYXRhICk7Ci0gICAgfSwKLQotICAg
IC8vIENyb3NzLWJyb3dzZXIgeG1sIHBhcnNpbmcKLSAgICBwYXJzZVhNTDogZnVuY3Rpb24oIGRh
dGEgKSB7Ci0gICAgdmFyIHhtbCwgdG1wOwotICAgIGlmICggIWRhdGEgfHwgdHlwZW9mIGRhdGEg
IT09ICJzdHJpbmciICkgewotICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICB0cnkgewotICAg
IGlmICggd2luZG93LkRPTVBhcnNlciApIHsgLy8gU3RhbmRhcmQKLSAgICB0bXAgPSBuZXcgRE9N
UGFyc2VyKCk7Ci0gICAgeG1sID0gdG1wLnBhcnNlRnJvbVN0cmluZyggZGF0YSAsICJ0ZXh0L3ht
bCIgKTsKLSAgICB9IGVsc2UgeyAvLyBJRQotICAgIHhtbCA9IG5ldyBBY3RpdmVYT2JqZWN0KCAi
TWljcm9zb2Z0LlhNTERPTSIgKTsKLSAgICB4bWwuYXN5bmMgPSAiZmFsc2UiOwotICAgIHhtbC5s
b2FkWE1MKCBkYXRhICk7Ci0gICAgfQotICAgIH0gY2F0Y2goIGUgKSB7Ci0gICAgeG1sID0gdW5k
ZWZpbmVkOwotICAgIH0KLSAgICBpZiAoICF4bWwgfHwgIXhtbC5kb2N1bWVudEVsZW1lbnQgfHwg
eG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCAicGFyc2VyZXJyb3IiICkubGVuZ3RoICkgewotICAg
IGpRdWVyeS5lcnJvciggIkludmFsaWQgWE1MOiAiICsgZGF0YSApOwotICAgIH0KLSAgICByZXR1
cm4geG1sOwotICAgIH0sCi0KLSAgICBub29wOiBmdW5jdGlvbigpIHt9LAotCi0gICAgLy8gRXZh
bHVhdGVzIGEgc2NyaXB0IGluIGEgZ2xvYmFsIGNvbnRleHQKLSAgICAvLyBXb3JrYXJvdW5kcyBi
YXNlZCBvbiBmaW5kaW5ncyBieSBKaW0gRHJpc2NvbGwKLSAgICAvLyBodHRwOi8vd2VibG9ncy5q
YXZhLm5ldC9ibG9nL2RyaXNjb2xsL2FyY2hpdmUvMjAwOS8wOS8wOC9ldmFsLWphdmFzY3JpcHQt
Z2xvYmFsLWNvbnRleHQKLSAgICBnbG9iYWxFdmFsOiBmdW5jdGlvbiggZGF0YSApIHsKLSAgICBp
ZiAoIGRhdGEgJiYgalF1ZXJ5LnRyaW0oIGRhdGEgKSApIHsKLSAgICAvLyBXZSB1c2UgZXhlY1Nj
cmlwdCBvbiBJbnRlcm5ldCBFeHBsb3JlcgotICAgIC8vIFdlIHVzZSBhbiBhbm9ueW1vdXMgZnVu
Y3Rpb24gc28gdGhhdCBjb250ZXh0IGlzIHdpbmRvdwotICAgIC8vIHJhdGhlciB0aGFuIGpRdWVy
eSBpbiBGaXJlZm94Ci0gICAgKCB3aW5kb3cuZXhlY1NjcmlwdCB8fCBmdW5jdGlvbiggZGF0YSAp
IHsKLSAgICB3aW5kb3dbICJldmFsIiBdLmNhbGwoIHdpbmRvdywgZGF0YSApOwotICAgIH0gKSgg
ZGF0YSApOwotICAgIH0KLSAgICB9LAotCi0gICAgLy8gQ29udmVydCBkYXNoZWQgdG8gY2FtZWxD
YXNlOyB1c2VkIGJ5IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlcwotICAgIC8vIE1pY3Jvc29mdCBm
b3Jnb3QgdG8gaHVtcCB0aGVpciB2ZW5kb3IgcHJlZml4ICgjOTU3MikKLSAgICBjYW1lbENhc2U6
IGZ1bmN0aW9uKCBzdHJpbmcgKSB7Ci0gICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVm
aXgsICJtcy0iICkucmVwbGFjZSggcmRhc2hBbHBoYSwgZmNhbWVsQ2FzZSApOwotICAgIH0sCi0K
LSAgICBub2RlTmFtZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7Ci0gICAgcmV0dXJuIGVsZW0u
bm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJD
YXNlKCk7Ci0gICAgfSwKLQotICAgIC8vIGFyZ3MgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHkK
LSAgICBlYWNoOiBmdW5jdGlvbiggb2JqLCBjYWxsYmFjaywgYXJncyApIHsKLSAgICB2YXIgdmFs
dWUsCi0gICAgaSA9IDAsCi0gICAgbGVuZ3RoID0gb2JqLmxlbmd0aCwKLSAgICBpc0FycmF5ID0g
aXNBcnJheWxpa2UoIG9iaiApOwotCi0gICAgaWYgKCBhcmdzICkgewotICAgIGlmICggaXNBcnJh
eSApIHsKLSAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKLSAgICB2YWx1ZSA9IGNhbGxi
YWNrLmFwcGx5KCBvYmpbIGkgXSwgYXJncyApOwotCi0gICAgaWYgKCB2YWx1ZSA9PT0gZmFsc2Ug
KSB7Ci0gICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLSAgICB9IGVsc2UgewotICAgIGZvciAoIGkg
aW4gb2JqICkgewotICAgIHZhbHVlID0gY2FsbGJhY2suYXBwbHkoIG9ialsgaSBdLCBhcmdzICk7
Ci0KLSAgICBpZiAoIHZhbHVlID09PSBmYWxzZSApIHsKLSAgICBicmVhazsKLSAgICB9Ci0gICAg
fQotICAgIH0KLQotICAgIC8vIEEgc3BlY2lhbCwgZmFzdCwgY2FzZSBmb3IgdGhlIG1vc3QgY29t
bW9uIHVzZSBvZiBlYWNoCi0gICAgfSBlbHNlIHsKLSAgICBpZiAoIGlzQXJyYXkgKSB7Ci0gICAg
Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7Ci0gICAgdmFsdWUgPSBjYWxsYmFjay5jYWxsKCBv
YmpbIGkgXSwgaSwgb2JqWyBpIF0gKTsKLQotICAgIGlmICggdmFsdWUgPT09IGZhbHNlICkgewot
ICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICBmb3IgKCBpIGluIG9i
aiApIHsKLSAgICB2YWx1ZSA9IGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSAp
OwotCi0gICAgaWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7Ci0gICAgYnJlYWs7Ci0gICAgfQotICAg
IH0KLSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG9iajsKLSAgICB9LAotCi0gICAgLy8gVXNl
IG5hdGl2ZSBTdHJpbmcudHJpbSBmdW5jdGlvbiB3aGVyZXZlciBwb3NzaWJsZQotICAgIHRyaW06
IGNvcmVfdHJpbSAmJiAhY29yZV90cmltLmNhbGwoIlx1RkVGRlx4QTAiKSA/Ci0gICAgZnVuY3Rp
b24oIHRleHQgKSB7Ci0gICAgcmV0dXJuIHRleHQgPT0gbnVsbCA/Ci0gICAgIiIgOgotICAgIGNv
cmVfdHJpbS5jYWxsKCB0ZXh0ICk7Ci0gICAgfSA6Ci0KLSAgICAvLyBPdGhlcndpc2UgdXNlIG91
ciBvd24gdHJpbW1pbmcgZnVuY3Rpb25hbGl0eQotICAgIGZ1bmN0aW9uKCB0ZXh0ICkgewotICAg
IHJldHVybiB0ZXh0ID09IG51bGwgPwotICAgICIiIDoKLSAgICAoIHRleHQgKyAiIiApLnJlcGxh
Y2UoIHJ0cmltLCAiIiApOwotICAgIH0sCi0KLSAgICAvLyByZXN1bHRzIGlzIGZvciBpbnRlcm5h
bCB1c2FnZSBvbmx5Ci0gICAgbWFrZUFycmF5OiBmdW5jdGlvbiggYXJyLCByZXN1bHRzICkgewot
ICAgIHZhciByZXQgPSByZXN1bHRzIHx8IFtdOwotCi0gICAgaWYgKCBhcnIgIT0gbnVsbCApIHsK
LSAgICBpZiAoIGlzQXJyYXlsaWtlKCBPYmplY3QoYXJyKSApICkgewotICAgIGpRdWVyeS5tZXJn
ZSggcmV0LAotICAgIHR5cGVvZiBhcnIgPT09ICJzdHJpbmciID8KLSAgICBbIGFyciBdIDogYXJy
Ci0gICAgKTsKLSAgICB9IGVsc2UgewotICAgIGNvcmVfcHVzaC5jYWxsKCByZXQsIGFyciApOwot
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0OwotICAgIH0sCi0KLSAgICBpbkFycmF5OiBm
dW5jdGlvbiggZWxlbSwgYXJyLCBpICkgewotICAgIHZhciBsZW47Ci0KLSAgICBpZiAoIGFyciAp
IHsKLSAgICBpZiAoIGNvcmVfaW5kZXhPZiApIHsKLSAgICByZXR1cm4gY29yZV9pbmRleE9mLmNh
bGwoIGFyciwgZWxlbSwgaSApOwotICAgIH0KLQotICAgIGxlbiA9IGFyci5sZW5ndGg7Ci0gICAg
aSA9IGkgPyBpIDwgMCA/IE1hdGgubWF4KCAwLCBsZW4gKyBpICkgOiBpIDogMDsKLQotICAgIGZv
ciAoIDsgaSA8IGxlbjsgaSsrICkgewotICAgIC8vIFNraXAgYWNjZXNzaW5nIGluIHNwYXJzZSBh
cnJheXMKLSAgICBpZiAoIGkgaW4gYXJyICYmIGFyclsgaSBdID09PSBlbGVtICkgewotICAgIHJl
dHVybiBpOwotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotICAgIH0sCi0K
LSAgICBtZXJnZTogZnVuY3Rpb24oIGZpcnN0LCBzZWNvbmQgKSB7Ci0gICAgdmFyIGwgPSBzZWNv
bmQubGVuZ3RoLAotICAgIGkgPSBmaXJzdC5sZW5ndGgsCi0gICAgaiA9IDA7Ci0KLSAgICBpZiAo
IHR5cGVvZiBsID09PSAibnVtYmVyIiApIHsKLSAgICBmb3IgKCA7IGogPCBsOyBqKysgKSB7Ci0g
ICAgZmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqIF07Ci0gICAgfQotICAgIH0gZWxzZSB7Ci0gICAg
d2hpbGUgKCBzZWNvbmRbal0gIT09IHVuZGVmaW5lZCApIHsKLSAgICBmaXJzdFsgaSsrIF0gPSBz
ZWNvbmRbIGorKyBdOwotICAgIH0KLSAgICB9Ci0KLSAgICBmaXJzdC5sZW5ndGggPSBpOwotCi0g
ICAgcmV0dXJuIGZpcnN0OwotICAgIH0sCi0KLSAgICBncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNh
bGxiYWNrLCBpbnYgKSB7Ci0gICAgdmFyIHJldFZhbCwKLSAgICByZXQgPSBbXSwKLSAgICBpID0g
MCwKLSAgICBsZW5ndGggPSBlbGVtcy5sZW5ndGg7Ci0gICAgaW52ID0gISFpbnY7Ci0KLSAgICAv
LyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgb25seSBzYXZpbmcgdGhlIGl0ZW1zCi0gICAgLy8gdGhh
dCBwYXNzIHRoZSB2YWxpZGF0b3IgZnVuY3Rpb24KLSAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkr
KyApIHsKLSAgICByZXRWYWwgPSAhIWNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpICk7Ci0gICAgaWYg
KCBpbnYgIT09IHJldFZhbCApIHsKLSAgICByZXQucHVzaCggZWxlbXNbIGkgXSApOwotICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gcmV0OwotICAgIH0sCi0KLSAgICAvLyBhcmcgaXMgZm9yIGlu
dGVybmFsIHVzYWdlIG9ubHkKLSAgICBtYXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGFy
ZyApIHsKLSAgICB2YXIgdmFsdWUsCi0gICAgaSA9IDAsCi0gICAgbGVuZ3RoID0gZWxlbXMubGVu
Z3RoLAotICAgIGlzQXJyYXkgPSBpc0FycmF5bGlrZSggZWxlbXMgKSwKLSAgICByZXQgPSBbXTsK
LQotICAgIC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBp
dGVtcyB0byB0aGVpcgotICAgIGlmICggaXNBcnJheSApIHsKLSAgICBmb3IgKCA7IGkgPCBsZW5n
dGg7IGkrKyApIHsKLSAgICB2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTsK
LQotICAgIGlmICggdmFsdWUgIT0gbnVsbCApIHsKLSAgICByZXRbIHJldC5sZW5ndGggXSA9IHZh
bHVlOwotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBHbyB0aHJvdWdoIGV2ZXJ5IGtleSBvbiB0aGUg
b2JqZWN0LAotICAgIH0gZWxzZSB7Ci0gICAgZm9yICggaSBpbiBlbGVtcyApIHsKLSAgICB2YWx1
ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTsKLQotICAgIGlmICggdmFsdWUgIT0g
bnVsbCApIHsKLSAgICByZXRbIHJldC5sZW5ndGggXSA9IHZhbHVlOwotICAgIH0KLSAgICB9Ci0g
ICAgfQotCi0gICAgLy8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5cwotICAgIHJldHVybiBjb3Jl
X2NvbmNhdC5hcHBseSggW10sIHJldCApOwotICAgIH0sCi0KLSAgICAvLyBBIGdsb2JhbCBHVUlE
IGNvdW50ZXIgZm9yIG9iamVjdHMKLSAgICBndWlkOiAxLAotCi0gICAgLy8gQmluZCBhIGZ1bmN0
aW9uIHRvIGEgY29udGV4dCwgb3B0aW9uYWxseSBwYXJ0aWFsbHkgYXBwbHlpbmcgYW55Ci0gICAg
Ly8gYXJndW1lbnRzLgotICAgIHByb3h5OiBmdW5jdGlvbiggZm4sIGNvbnRleHQgKSB7Ci0gICAg
dmFyIGFyZ3MsIHByb3h5LCB0bXA7Ci0KLSAgICBpZiAoIHR5cGVvZiBjb250ZXh0ID09PSAic3Ry
aW5nIiApIHsKLSAgICB0bXAgPSBmblsgY29udGV4dCBdOwotICAgIGNvbnRleHQgPSBmbjsKLSAg
ICBmbiA9IHRtcDsKLSAgICB9Ci0KLSAgICAvLyBRdWljayBjaGVjayB0byBkZXRlcm1pbmUgaWYg
dGFyZ2V0IGlzIGNhbGxhYmxlLCBpbiB0aGUgc3BlYwotICAgIC8vIHRoaXMgdGhyb3dzIGEgVHlw
ZUVycm9yLCBidXQgd2Ugd2lsbCBqdXN0IHJldHVybiB1bmRlZmluZWQuCi0gICAgaWYgKCAhalF1
ZXJ5LmlzRnVuY3Rpb24oIGZuICkgKSB7Ci0gICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgICB9Ci0K
LSAgICAvLyBTaW11bGF0ZWQgYmluZAotICAgIGFyZ3MgPSBjb3JlX3NsaWNlLmNhbGwoIGFyZ3Vt
ZW50cywgMiApOwotICAgIHByb3h5ID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIGZuLmFwcGx5
KCBjb250ZXh0IHx8IHRoaXMsIGFyZ3MuY29uY2F0KCBjb3JlX3NsaWNlLmNhbGwoIGFyZ3VtZW50
cyApICkgKTsKLSAgICB9OwotCi0gICAgLy8gU2V0IHRoZSBndWlkIG9mIHVuaXF1ZSBoYW5kbGVy
IHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFsIGhhbmRsZXIsIHNvIGl0IGNhbiBiZSByZW1vdmVkCi0g
ICAgcHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5ndWlkKys7Ci0KLSAg
ICByZXR1cm4gcHJveHk7Ci0gICAgfSwKLQotICAgIC8vIE11bHRpZnVuY3Rpb25hbCBtZXRob2Qg
dG8gZ2V0IGFuZCBzZXQgdmFsdWVzIG9mIGEgY29sbGVjdGlvbgotICAgIC8vIFRoZSB2YWx1ZS9z
IGNhbiBvcHRpb25hbGx5IGJlIGV4ZWN1dGVkIGlmIGl0J3MgYSBmdW5jdGlvbgotICAgIGFjY2Vz
czogZnVuY3Rpb24oIGVsZW1zLCBmbiwga2V5LCB2YWx1ZSwgY2hhaW5hYmxlLCBlbXB0eUdldCwg
cmF3ICkgewotICAgIHZhciBpID0gMCwKLSAgICBsZW5ndGggPSBlbGVtcy5sZW5ndGgsCi0gICAg
YnVsayA9IGtleSA9PSBudWxsOwotCi0gICAgLy8gU2V0cyBtYW55IHZhbHVlcwotICAgIGlmICgg
alF1ZXJ5LnR5cGUoIGtleSApID09PSAib2JqZWN0IiApIHsKLSAgICBjaGFpbmFibGUgPSB0cnVl
OwotICAgIGZvciAoIGkgaW4ga2V5ICkgewotICAgIGpRdWVyeS5hY2Nlc3MoIGVsZW1zLCBmbiwg
aSwga2V5W2ldLCB0cnVlLCBlbXB0eUdldCwgcmF3ICk7Ci0gICAgfQotCi0gICAgLy8gU2V0cyBv
bmUgdmFsdWUKLSAgICB9IGVsc2UgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgewotICAgIGNo
YWluYWJsZSA9IHRydWU7Ci0KLSAgICBpZiAoICFqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSAp
IHsKLSAgICByYXcgPSB0cnVlOwotICAgIH0KLQotICAgIGlmICggYnVsayApIHsKLSAgICAvLyBC
dWxrIG9wZXJhdGlvbnMgcnVuIGFnYWluc3QgdGhlIGVudGlyZSBzZXQKLSAgICBpZiAoIHJhdyAp
IHsKLSAgICBmbi5jYWxsKCBlbGVtcywgdmFsdWUgKTsKLSAgICBmbiA9IG51bGw7Ci0KLSAgICAv
LyAuLi5leGNlcHQgd2hlbiBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzCi0gICAgfSBlbHNlIHsK
LSAgICBidWxrID0gZm47Ci0gICAgZm4gPSBmdW5jdGlvbiggZWxlbSwga2V5LCB2YWx1ZSApIHsK
LSAgICByZXR1cm4gYnVsay5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdmFsdWUgKTsKLSAgICB9Owot
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIGZuICkgewotICAgIGZvciAoIDsgaSA8IGxlbmd0aDsg
aSsrICkgewotICAgIGZuKCBlbGVtc1tpXSwga2V5LCByYXcgPyB2YWx1ZSA6IHZhbHVlLmNhbGwo
IGVsZW1zW2ldLCBpLCBmbiggZWxlbXNbaV0sIGtleSApICkgKTsKLSAgICB9Ci0gICAgfQotICAg
IH0KLQotICAgIHJldHVybiBjaGFpbmFibGUgPwotICAgIGVsZW1zIDoKLQotICAgIC8vIEdldHMK
LSAgICBidWxrID8KLSAgICBmbi5jYWxsKCBlbGVtcyApIDoKLSAgICBsZW5ndGggPyBmbiggZWxl
bXNbMF0sIGtleSApIDogZW1wdHlHZXQ7Ci0gICAgfSwKLQotICAgIG5vdzogZnVuY3Rpb24oKSB7
Ci0gICAgcmV0dXJuICggbmV3IERhdGUoKSApLmdldFRpbWUoKTsKLSAgICB9Ci19KTsKLQotalF1
ZXJ5LnJlYWR5LnByb21pc2UgPSBmdW5jdGlvbiggb2JqICkgewotICAgIGlmICggIXJlYWR5TGlz
dCApIHsKLQotICAgIHJlYWR5TGlzdCA9IGpRdWVyeS5EZWZlcnJlZCgpOwotCi0gICAgLy8gQ2F0
Y2ggY2FzZXMgd2hlcmUgJChkb2N1bWVudCkucmVhZHkoKSBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGJy
b3dzZXIgZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJyZWQuCi0gICAgLy8gd2Ugb25jZSB0cmllZCB0
byB1c2UgcmVhZHlTdGF0ZSAiaW50ZXJhY3RpdmUiIGhlcmUsIGJ1dCBpdCBjYXVzZWQgaXNzdWVz
IGxpa2UgdGhlIG9uZQotICAgIC8vIGRpc2NvdmVyZWQgYnkgQ2hyaXNTIGhlcmU6IGh0dHA6Ly9i
dWdzLmpxdWVyeS5jb20vdGlja2V0LzEyMjgyI2NvbW1lbnQ6MTUKLSAgICBpZiAoIGRvY3VtZW50
LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIgKSB7Ci0gICAgLy8gSGFuZGxlIGl0IGFzeW5jaHJv
bm91c2x5IHRvIGFsbG93IHNjcmlwdHMgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJlYWR5Ci0g
ICAgc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5ICk7Ci0KLSAgICAvLyBTdGFuZGFyZHMtYmFzZWQg
YnJvd3NlcnMgc3VwcG9ydCBET01Db250ZW50TG9hZGVkCi0gICAgfSBlbHNlIGlmICggZG9jdW1l
bnQuYWRkRXZlbnRMaXN0ZW5lciApIHsKLSAgICAvLyBVc2UgdGhlIGhhbmR5IGV2ZW50IGNhbGxi
YWNrCi0gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggIkRPTUNvbnRlbnRMb2FkZWQiLCBj
b21wbGV0ZWQsIGZhbHNlICk7Ci0KLSAgICAvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQs
IHRoYXQgd2lsbCBhbHdheXMgd29yawotICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAibG9h
ZCIsIGNvbXBsZXRlZCwgZmFsc2UgKTsKLQotICAgIC8vIElmIElFIGV2ZW50IG1vZGVsIGlzIHVz
ZWQKLSAgICB9IGVsc2UgewotICAgIC8vIEVuc3VyZSBmaXJpbmcgYmVmb3JlIG9ubG9hZCwgbWF5
YmUgbGF0ZSBidXQgc2FmZSBhbHNvIGZvciBpZnJhbWVzCi0gICAgZG9jdW1lbnQuYXR0YWNoRXZl
bnQoICJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBjb21wbGV0ZWQgKTsKLQotICAgIC8vIEEgZmFsbGJh
Y2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3JrCi0gICAgd2luZG93LmF0
dGFjaEV2ZW50KCAib25sb2FkIiwgY29tcGxldGVkICk7Ci0KLSAgICAvLyBJZiBJRSBhbmQgbm90
IGEgZnJhbWUKLSAgICAvLyBjb250aW51YWxseSBjaGVjayB0byBzZWUgaWYgdGhlIGRvY3VtZW50
IGlzIHJlYWR5Ci0gICAgdmFyIHRvcCA9IGZhbHNlOwotCi0gICAgdHJ5IHsKLSAgICB0b3AgPSB3
aW5kb3cuZnJhbWVFbGVtZW50ID09IG51bGwgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Owot
ICAgIH0gY2F0Y2goZSkge30KLQotICAgIGlmICggdG9wICYmIHRvcC5kb1Njcm9sbCApIHsKLSAg
ICAoZnVuY3Rpb24gZG9TY3JvbGxDaGVjaygpIHsKLSAgICBpZiAoICFqUXVlcnkuaXNSZWFkeSAp
IHsKLQotICAgIHRyeSB7Ci0gICAgLy8gVXNlIHRoZSB0cmljayBieSBEaWVnbyBQZXJpbmkKLSAg
ICAvLyBodHRwOi8vamF2YXNjcmlwdC5ud2JveC5jb20vSUVDb250ZW50TG9hZGVkLwotICAgIHRv
cC5kb1Njcm9sbCgibGVmdCIpOwotICAgIH0gY2F0Y2goZSkgewotICAgIHJldHVybiBzZXRUaW1l
b3V0KCBkb1Njcm9sbENoZWNrLCA1MCApOwotICAgIH0KLQotICAgIC8vIGRldGFjaCBhbGwgZG9t
IHJlYWR5IGV2ZW50cwotICAgIGRldGFjaCgpOwotCi0gICAgLy8gYW5kIGV4ZWN1dGUgYW55IHdh
aXRpbmcgZnVuY3Rpb25zCi0gICAgalF1ZXJ5LnJlYWR5KCk7Ci0gICAgfQotICAgIH0pKCk7Ci0g
ICAgfQotICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlYWR5TGlzdC5wcm9taXNlKCBvYmogKTsK
LX07Ci0KLS8vIFBvcHVsYXRlIHRoZSBjbGFzczJ0eXBlIG1hcAotalF1ZXJ5LmVhY2goIkJvb2xl
YW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3Ii
LnNwbGl0KCIgIiksIGZ1bmN0aW9uKGksIG5hbWUpIHsKLSAgICBjbGFzczJ0eXBlWyAiW29iamVj
dCAiICsgbmFtZSArICJdIiBdID0gbmFtZS50b0xvd2VyQ2FzZSgpOwotfSk7Ci0KLWZ1bmN0aW9u
IGlzQXJyYXlsaWtlKCBvYmogKSB7Ci0gICAgdmFyIGxlbmd0aCA9IG9iai5sZW5ndGgsCi0gICAg
dHlwZSA9IGpRdWVyeS50eXBlKCBvYmogKTsKLQotICAgIGlmICggalF1ZXJ5LmlzV2luZG93KCBv
YmogKSApIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCBvYmoubm9kZVR5
cGUgPT09IDEgJiYgbGVuZ3RoICkgewotICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJl
dHVybiB0eXBlID09PSAiYXJyYXkiIHx8IHR5cGUgIT09ICJmdW5jdGlvbiIgJiYKLSAgICAoIGxl
bmd0aCA9PT0gMCB8fAotICAgIHR5cGVvZiBsZW5ndGggPT09ICJudW1iZXIiICYmIGxlbmd0aCA+
IDAgJiYgKCBsZW5ndGggLSAxICkgaW4gb2JqICk7Ci19Ci0KLS8vIEFsbCBqUXVlcnkgb2JqZWN0
cyBzaG91bGQgcG9pbnQgYmFjayB0byB0aGVzZQotcm9vdGpRdWVyeSA9IGpRdWVyeShkb2N1bWVu
dCk7Ci0vLyBTdHJpbmcgdG8gT2JqZWN0IG9wdGlvbnMgZm9ybWF0IGNhY2hlCi12YXIgb3B0aW9u
c0NhY2hlID0ge307Ci0KLS8vIENvbnZlcnQgU3RyaW5nLWZvcm1hdHRlZCBvcHRpb25zIGludG8g
T2JqZWN0LWZvcm1hdHRlZCBvbmVzIGFuZCBzdG9yZSBpbiBjYWNoZQotZnVuY3Rpb24gY3JlYXRl
T3B0aW9ucyggb3B0aW9ucyApIHsKLSAgICB2YXIgb2JqZWN0ID0gb3B0aW9uc0NhY2hlWyBvcHRp
b25zIF0gPSB7fTsKLSAgICBqUXVlcnkuZWFjaCggb3B0aW9ucy5tYXRjaCggY29yZV9ybm90d2hp
dGUgKSB8fCBbXSwgZnVuY3Rpb24oIF8sIGZsYWcgKSB7Ci0gICAgb2JqZWN0WyBmbGFnIF0gPSB0
cnVlOwotICAgIH0pOwotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLS8qCi0gKiBDcmVhdGUgYSBj
YWxsYmFjayBsaXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKLSAqCi0gKiAgICBv
cHRpb25zOiBhbiBvcHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBvcHRpb25zIHRoYXQg
d2lsbCBjaGFuZ2UgaG93Ci0gKiAgICAgICAgICAgIHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMg
b3IgYSBtb3JlIHRyYWRpdGlvbmFsIG9wdGlvbiBvYmplY3QKLSAqCi0gKiBCeSBkZWZhdWx0IGEg
Y2FsbGJhY2sgbGlzdCB3aWxsIGFjdCBsaWtlIGFuIGV2ZW50IGNhbGxiYWNrIGxpc3QgYW5kIGNh
biBiZQotICogImZpcmVkIiBtdWx0aXBsZSB0aW1lcy4KLSAqCi0gKiBQb3NzaWJsZSBvcHRpb25z
OgotICoKLSAqICAgIG9uY2U6ICAgICAgICAgICAgd2lsbCBlbnN1cmUgdGhlIGNhbGxiYWNrIGxp
c3QgY2FuIG9ubHkgYmUgZmlyZWQgb25jZSAobGlrZSBhIERlZmVycmVkKQotICoKLSAqICAgIG1l
bW9yeTogICAgICAgICAgICB3aWxsIGtlZXAgdHJhY2sgb2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3
aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkCi0gKiAgICAgICAgICAgICAgICAgICAgYWZ0ZXIg
dGhlIGxpc3QgaGFzIGJlZW4gZmlyZWQgcmlnaHQgYXdheSB3aXRoIHRoZSBsYXRlc3QgIm1lbW9y
aXplZCIKLSAqICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZCkKLSAq
Ci0gKiAgICB1bmlxdWU6ICAgICAgICAgICAgd2lsbCBlbnN1cmUgYSBjYWxsYmFjayBjYW4gb25s
eSBiZSBhZGRlZCBvbmNlIChubyBkdXBsaWNhdGUgaW4gdGhlIGxpc3QpCi0gKgotICogICAgc3Rv
cE9uRmFsc2U6ICAgIGludGVycnVwdCBjYWxsaW5ncyB3aGVuIGEgY2FsbGJhY2sgcmV0dXJucyBm
YWxzZQotICoKLSAqLwotalF1ZXJ5LkNhbGxiYWNrcyA9IGZ1bmN0aW9uKCBvcHRpb25zICkgewot
Ci0gICAgLy8gQ29udmVydCBvcHRpb25zIGZyb20gU3RyaW5nLWZvcm1hdHRlZCB0byBPYmplY3Qt
Zm9ybWF0dGVkIGlmIG5lZWRlZAotICAgIC8vICh3ZSBjaGVjayBpbiBjYWNoZSBmaXJzdCkKLSAg
ICBvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09ICJzdHJpbmciID8KLSAgICAoIG9wdGlvbnND
YWNoZVsgb3B0aW9ucyBdIHx8IGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSApIDoKLSAgICBqUXVl
cnkuZXh0ZW5kKCB7fSwgb3B0aW9ucyApOwotCi0gICAgdmFyIC8vIEZsYWcgdG8ga25vdyBpZiBs
aXN0IGlzIGN1cnJlbnRseSBmaXJpbmcKLSAgICBmaXJpbmcsCi0gICAgLy8gTGFzdCBmaXJlIHZh
bHVlIChmb3Igbm9uLWZvcmdldHRhYmxlIGxpc3RzKQotICAgIG1lbW9yeSwKLSAgICAvLyBGbGFn
IHRvIGtub3cgaWYgbGlzdCB3YXMgYWxyZWFkeSBmaXJlZAotICAgIGZpcmVkLAotICAgIC8vIEVu
ZCBvZiB0aGUgbG9vcCB3aGVuIGZpcmluZwotICAgIGZpcmluZ0xlbmd0aCwKLSAgICAvLyBJbmRl
eCBvZiBjdXJyZW50bHkgZmlyaW5nIGNhbGxiYWNrIChtb2RpZmllZCBieSByZW1vdmUgaWYgbmVl
ZGVkKQotICAgIGZpcmluZ0luZGV4LAotICAgIC8vIEZpcnN0IGNhbGxiYWNrIHRvIGZpcmUgKHVz
ZWQgaW50ZXJuYWxseSBieSBhZGQgYW5kIGZpcmVXaXRoKQotICAgIGZpcmluZ1N0YXJ0LAotICAg
IC8vIEFjdHVhbCBjYWxsYmFjayBsaXN0Ci0gICAgbGlzdCA9IFtdLAotICAgIC8vIFN0YWNrIG9m
IGZpcmUgY2FsbHMgZm9yIHJlcGVhdGFibGUgbGlzdHMKLSAgICBzdGFjayA9ICFvcHRpb25zLm9u
Y2UgJiYgW10sCi0gICAgLy8gRmlyZSBjYWxsYmFja3MKLSAgICBmaXJlID0gZnVuY3Rpb24oIGRh
dGEgKSB7Ci0gICAgbWVtb3J5ID0gb3B0aW9ucy5tZW1vcnkgJiYgZGF0YTsKLSAgICBmaXJlZCA9
IHRydWU7Ci0gICAgZmlyaW5nSW5kZXggPSBmaXJpbmdTdGFydCB8fCAwOwotICAgIGZpcmluZ1N0
YXJ0ID0gMDsKLSAgICBmaXJpbmdMZW5ndGggPSBsaXN0Lmxlbmd0aDsKLSAgICBmaXJpbmcgPSB0
cnVlOwotICAgIGZvciAoIDsgbGlzdCAmJiBmaXJpbmdJbmRleCA8IGZpcmluZ0xlbmd0aDsgZmly
aW5nSW5kZXgrKyApIHsKLSAgICBpZiAoIGxpc3RbIGZpcmluZ0luZGV4IF0uYXBwbHkoIGRhdGFb
IDAgXSwgZGF0YVsgMSBdICkgPT09IGZhbHNlICYmIG9wdGlvbnMuc3RvcE9uRmFsc2UgKSB7Ci0g
ICAgbWVtb3J5ID0gZmFsc2U7IC8vIFRvIHByZXZlbnQgZnVydGhlciBjYWxscyB1c2luZyBhZGQK
LSAgICBicmVhazsKLSAgICB9Ci0gICAgfQotICAgIGZpcmluZyA9IGZhbHNlOwotICAgIGlmICgg
bGlzdCApIHsKLSAgICBpZiAoIHN0YWNrICkgewotICAgIGlmICggc3RhY2subGVuZ3RoICkgewot
ICAgIGZpcmUoIHN0YWNrLnNoaWZ0KCkgKTsKLSAgICB9Ci0gICAgfSBlbHNlIGlmICggbWVtb3J5
ICkgewotICAgIGxpc3QgPSBbXTsKLSAgICB9IGVsc2UgewotICAgIHNlbGYuZGlzYWJsZSgpOwot
ICAgIH0KLSAgICB9Ci0gICAgfSwKLSAgICAvLyBBY3R1YWwgQ2FsbGJhY2tzIG9iamVjdAotICAg
IHNlbGYgPSB7Ci0gICAgLy8gQWRkIGEgY2FsbGJhY2sgb3IgYSBjb2xsZWN0aW9uIG9mIGNhbGxi
YWNrcyB0byB0aGUgbGlzdAotICAgIGFkZDogZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCBsaXN0ICkg
ewotICAgIC8vIEZpcnN0LCB3ZSBzYXZlIHRoZSBjdXJyZW50IGxlbmd0aAotICAgIHZhciBzdGFy
dCA9IGxpc3QubGVuZ3RoOwotICAgIChmdW5jdGlvbiBhZGQoIGFyZ3MgKSB7Ci0gICAgalF1ZXJ5
LmVhY2goIGFyZ3MsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7Ci0gICAgdmFyIHR5cGUgPSBqUXVlcnku
dHlwZSggYXJnICk7Ci0gICAgaWYgKCB0eXBlID09PSAiZnVuY3Rpb24iICkgewotICAgIGlmICgg
IW9wdGlvbnMudW5pcXVlIHx8ICFzZWxmLmhhcyggYXJnICkgKSB7Ci0gICAgbGlzdC5wdXNoKCBh
cmcgKTsKLSAgICB9Ci0gICAgfSBlbHNlIGlmICggYXJnICYmIGFyZy5sZW5ndGggJiYgdHlwZSAh
PT0gInN0cmluZyIgKSB7Ci0gICAgLy8gSW5zcGVjdCByZWN1cnNpdmVseQotICAgIGFkZCggYXJn
ICk7Ci0gICAgfQotICAgIH0pOwotICAgIH0pKCBhcmd1bWVudHMgKTsKLSAgICAvLyBEbyB3ZSBu
ZWVkIHRvIGFkZCB0aGUgY2FsbGJhY2tzIHRvIHRoZQotICAgIC8vIGN1cnJlbnQgZmlyaW5nIGJh
dGNoPwotICAgIGlmICggZmlyaW5nICkgewotICAgIGZpcmluZ0xlbmd0aCA9IGxpc3QubGVuZ3Ro
OwotICAgIC8vIFdpdGggbWVtb3J5LCBpZiB3ZSdyZSBub3QgZmlyaW5nIHRoZW4KLSAgICAvLyB3
ZSBzaG91bGQgY2FsbCByaWdodCBhd2F5Ci0gICAgfSBlbHNlIGlmICggbWVtb3J5ICkgewotICAg
IGZpcmluZ1N0YXJ0ID0gc3RhcnQ7Ci0gICAgZmlyZSggbWVtb3J5ICk7Ci0gICAgfQotICAgIH0K
LSAgICByZXR1cm4gdGhpczsKLSAgICB9LAotICAgIC8vIFJlbW92ZSBhIGNhbGxiYWNrIGZyb20g
dGhlIGxpc3QKLSAgICByZW1vdmU6IGZ1bmN0aW9uKCkgewotICAgIGlmICggbGlzdCApIHsKLSAg
ICBqUXVlcnkuZWFjaCggYXJndW1lbnRzLCBmdW5jdGlvbiggXywgYXJnICkgewotICAgIHZhciBp
bmRleDsKLSAgICB3aGlsZSggKCBpbmRleCA9IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGlu
ZGV4ICkgKSA+IC0xICkgewotICAgIGxpc3Quc3BsaWNlKCBpbmRleCwgMSApOwotICAgIC8vIEhh
bmRsZSBmaXJpbmcgaW5kZXhlcwotICAgIGlmICggZmlyaW5nICkgewotICAgIGlmICggaW5kZXgg
PD0gZmlyaW5nTGVuZ3RoICkgewotICAgIGZpcmluZ0xlbmd0aC0tOwotICAgIH0KLSAgICBpZiAo
IGluZGV4IDw9IGZpcmluZ0luZGV4ICkgewotICAgIGZpcmluZ0luZGV4LS07Ci0gICAgfQotICAg
IH0KLSAgICB9Ci0gICAgfSk7Ci0gICAgfQotICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0gICAg
Ly8gQ2hlY2sgaWYgYSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0aGUgbGlzdC4KLSAgICAvLyBJZiBu
byBhcmd1bWVudCBpcyBnaXZlbiwgcmV0dXJuIHdoZXRoZXIgb3Igbm90IGxpc3QgaGFzIGNhbGxi
YWNrcyBhdHRhY2hlZC4KLSAgICBoYXM6IGZ1bmN0aW9uKCBmbiApIHsKLSAgICByZXR1cm4gZm4g
PyBqUXVlcnkuaW5BcnJheSggZm4sIGxpc3QgKSA+IC0xIDogISEoIGxpc3QgJiYgbGlzdC5sZW5n
dGggKTsKLSAgICB9LAotICAgIC8vIFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIGxpc3QK
LSAgICBlbXB0eTogZnVuY3Rpb24oKSB7Ci0gICAgbGlzdCA9IFtdOwotICAgIHJldHVybiB0aGlz
OwotICAgIH0sCi0gICAgLy8gSGF2ZSB0aGUgbGlzdCBkbyBub3RoaW5nIGFueW1vcmUKLSAgICBk
aXNhYmxlOiBmdW5jdGlvbigpIHsKLSAgICBsaXN0ID0gc3RhY2sgPSBtZW1vcnkgPSB1bmRlZmlu
ZWQ7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLSAgICAvLyBJcyBpdCBkaXNhYmxlZD8KLSAg
ICBkaXNhYmxlZDogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuICFsaXN0OwotICAgIH0sCi0gICAg
Ly8gTG9jayB0aGUgbGlzdCBpbiBpdHMgY3VycmVudCBzdGF0ZQotICAgIGxvY2s6IGZ1bmN0aW9u
KCkgewotICAgIHN0YWNrID0gdW5kZWZpbmVkOwotICAgIGlmICggIW1lbW9yeSApIHsKLSAgICBz
ZWxmLmRpc2FibGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLSAgICAvLyBJ
cyBpdCBsb2NrZWQ/Ci0gICAgbG9ja2VkOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gIXN0YWNr
OwotICAgIH0sCi0gICAgLy8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGNvbnRl
eHQgYW5kIGFyZ3VtZW50cwotICAgIGZpcmVXaXRoOiBmdW5jdGlvbiggY29udGV4dCwgYXJncyAp
IHsKLSAgICBhcmdzID0gYXJncyB8fCBbXTsKLSAgICBhcmdzID0gWyBjb250ZXh0LCBhcmdzLnNs
aWNlID8gYXJncy5zbGljZSgpIDogYXJncyBdOwotICAgIGlmICggbGlzdCAmJiAoICFmaXJlZCB8
fCBzdGFjayApICkgewotICAgIGlmICggZmlyaW5nICkgewotICAgIHN0YWNrLnB1c2goIGFyZ3Mg
KTsKLSAgICB9IGVsc2UgewotICAgIGZpcmUoIGFyZ3MgKTsKLSAgICB9Ci0gICAgfQotICAgIHJl
dHVybiB0aGlzOwotICAgIH0sCi0gICAgLy8gQ2FsbCBhbGwgdGhlIGNhbGxiYWNrcyB3aXRoIHRo
ZSBnaXZlbiBhcmd1bWVudHMKLSAgICBmaXJlOiBmdW5jdGlvbigpIHsKLSAgICBzZWxmLmZpcmVX
aXRoKCB0aGlzLCBhcmd1bWVudHMgKTsKLSAgICByZXR1cm4gdGhpczsKLSAgICB9LAotICAgIC8v
IFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVh
c3Qgb25jZQotICAgIGZpcmVkOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gISFmaXJlZDsKLSAg
ICB9Ci0gICAgfTsKLQotICAgIHJldHVybiBzZWxmOwotfTsKLWpRdWVyeS5leHRlbmQoewotCi0g
ICAgRGVmZXJyZWQ6IGZ1bmN0aW9uKCBmdW5jICkgewotICAgIHZhciB0dXBsZXMgPSBbCi0gICAg
Ly8gYWN0aW9uLCBhZGQgbGlzdGVuZXIsIGxpc3RlbmVyIGxpc3QsIGZpbmFsIHN0YXRlCi0gICAg
WyAicmVzb2x2ZSIsICJkb25lIiwgalF1ZXJ5LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwgInJl
c29sdmVkIiBdLAotICAgIFsgInJlamVjdCIsICJmYWlsIiwgalF1ZXJ5LkNhbGxiYWNrcygib25j
ZSBtZW1vcnkiKSwgInJlamVjdGVkIiBdLAotICAgIFsgIm5vdGlmeSIsICJwcm9ncmVzcyIsIGpR
dWVyeS5DYWxsYmFja3MoIm1lbW9yeSIpIF0KLSAgICBdLAotICAgIHN0YXRlID0gInBlbmRpbmci
LAotICAgIHByb21pc2UgPSB7Ci0gICAgc3RhdGU6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBz
dGF0ZTsKLSAgICB9LAotICAgIGFsd2F5czogZnVuY3Rpb24oKSB7Ci0gICAgZGVmZXJyZWQuZG9u
ZSggYXJndW1lbnRzICkuZmFpbCggYXJndW1lbnRzICk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gICAg
fSwKLSAgICB0aGVuOiBmdW5jdGlvbiggLyogZm5Eb25lLCBmbkZhaWwsIGZuUHJvZ3Jlc3MgKi8g
KSB7Ci0gICAgdmFyIGZucyA9IGFyZ3VtZW50czsKLSAgICByZXR1cm4galF1ZXJ5LkRlZmVycmVk
KGZ1bmN0aW9uKCBuZXdEZWZlciApIHsKLSAgICBqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlv
biggaSwgdHVwbGUgKSB7Ci0gICAgdmFyIGFjdGlvbiA9IHR1cGxlWyAwIF0sCi0gICAgZm4gPSBq
UXVlcnkuaXNGdW5jdGlvbiggZm5zWyBpIF0gKSAmJiBmbnNbIGkgXTsKLSAgICAvLyBkZWZlcnJl
ZFsgZG9uZSB8IGZhaWwgfCBwcm9ncmVzcyBdIGZvciBmb3J3YXJkaW5nIGFjdGlvbnMgdG8gbmV3
RGVmZXIKLSAgICBkZWZlcnJlZFsgdHVwbGVbMV0gXShmdW5jdGlvbigpIHsKLSAgICB2YXIgcmV0
dXJuZWQgPSBmbiAmJiBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7Ci0gICAgaWYgKCByZXR1
cm5lZCAmJiBqUXVlcnkuaXNGdW5jdGlvbiggcmV0dXJuZWQucHJvbWlzZSApICkgewotICAgIHJl
dHVybmVkLnByb21pc2UoKQotICAgIC5kb25lKCBuZXdEZWZlci5yZXNvbHZlICkKLSAgICAuZmFp
bCggbmV3RGVmZXIucmVqZWN0ICkKLSAgICAucHJvZ3Jlc3MoIG5ld0RlZmVyLm5vdGlmeSApOwot
ICAgIH0gZWxzZSB7Ci0gICAgbmV3RGVmZXJbIGFjdGlvbiArICJXaXRoIiBdKCB0aGlzID09PSBw
cm9taXNlID8gbmV3RGVmZXIucHJvbWlzZSgpIDogdGhpcywgZm4gPyBbIHJldHVybmVkIF0gOiBh
cmd1bWVudHMgKTsKLSAgICB9Ci0gICAgfSk7Ci0gICAgfSk7Ci0gICAgZm5zID0gbnVsbDsKLSAg
ICB9KS5wcm9taXNlKCk7Ci0gICAgfSwKLSAgICAvLyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRl
ZmVycmVkCi0gICAgLy8gSWYgb2JqIGlzIHByb3ZpZGVkLCB0aGUgcHJvbWlzZSBhc3BlY3QgaXMg
YWRkZWQgdG8gdGhlIG9iamVjdAotICAgIHByb21pc2U6IGZ1bmN0aW9uKCBvYmogKSB7Ci0gICAg
cmV0dXJuIG9iaiAhPSBudWxsID8galF1ZXJ5LmV4dGVuZCggb2JqLCBwcm9taXNlICkgOiBwcm9t
aXNlOwotICAgIH0KLSAgICB9LAotICAgIGRlZmVycmVkID0ge307Ci0KLSAgICAvLyBLZWVwIHBp
cGUgZm9yIGJhY2stY29tcGF0Ci0gICAgcHJvbWlzZS5waXBlID0gcHJvbWlzZS50aGVuOwotCi0g
ICAgLy8gQWRkIGxpc3Qtc3BlY2lmaWMgbWV0aG9kcwotICAgIGpRdWVyeS5lYWNoKCB0dXBsZXMs
IGZ1bmN0aW9uKCBpLCB0dXBsZSApIHsKLSAgICB2YXIgbGlzdCA9IHR1cGxlWyAyIF0sCi0gICAg
c3RhdGVTdHJpbmcgPSB0dXBsZVsgMyBdOwotCi0gICAgLy8gcHJvbWlzZVsgZG9uZSB8IGZhaWwg
fCBwcm9ncmVzcyBdID0gbGlzdC5hZGQKLSAgICBwcm9taXNlWyB0dXBsZVsxXSBdID0gbGlzdC5h
ZGQ7Ci0KLSAgICAvLyBIYW5kbGUgc3RhdGUKLSAgICBpZiAoIHN0YXRlU3RyaW5nICkgewotICAg
IGxpc3QuYWRkKGZ1bmN0aW9uKCkgewotICAgIC8vIHN0YXRlID0gWyByZXNvbHZlZCB8IHJlamVj
dGVkIF0KLSAgICBzdGF0ZSA9IHN0YXRlU3RyaW5nOwotCi0gICAgLy8gWyByZWplY3RfbGlzdCB8
IHJlc29sdmVfbGlzdCBdLmRpc2FibGU7IHByb2dyZXNzX2xpc3QubG9jawotICAgIH0sIHR1cGxl
c1sgaSBeIDEgXVsgMiBdLmRpc2FibGUsIHR1cGxlc1sgMiBdWyAyIF0ubG9jayApOwotICAgIH0K
LQotICAgIC8vIGRlZmVycmVkWyByZXNvbHZlIHwgcmVqZWN0IHwgbm90aWZ5IF0KLSAgICBkZWZl
cnJlZFsgdHVwbGVbMF0gXSA9IGZ1bmN0aW9uKCkgewotICAgIGRlZmVycmVkWyB0dXBsZVswXSAr
ICJXaXRoIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IHByb21pc2UgOiB0aGlzLCBhcmd1bWVudHMg
KTsKLSAgICByZXR1cm4gdGhpczsKLSAgICB9OwotICAgIGRlZmVycmVkWyB0dXBsZVswXSArICJX
aXRoIiBdID0gbGlzdC5maXJlV2l0aDsKLSAgICB9KTsKLQotICAgIC8vIE1ha2UgdGhlIGRlZmVy
cmVkIGEgcHJvbWlzZQotICAgIHByb21pc2UucHJvbWlzZSggZGVmZXJyZWQgKTsKLQotICAgIC8v
IENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnkKLSAgICBpZiAoIGZ1bmMgKSB7Ci0gICAgZnVuYy5jYWxs
KCBkZWZlcnJlZCwgZGVmZXJyZWQgKTsKLSAgICB9Ci0KLSAgICAvLyBBbGwgZG9uZSEKLSAgICBy
ZXR1cm4gZGVmZXJyZWQ7Ci0gICAgfSwKLQotICAgIC8vIERlZmVycmVkIGhlbHBlcgotICAgIHdo
ZW46IGZ1bmN0aW9uKCBzdWJvcmRpbmF0ZSAvKiAsIC4uLiwgc3Vib3JkaW5hdGVOICovICkgewot
ICAgIHZhciBpID0gMCwKLSAgICByZXNvbHZlVmFsdWVzID0gY29yZV9zbGljZS5jYWxsKCBhcmd1
bWVudHMgKSwKLSAgICBsZW5ndGggPSByZXNvbHZlVmFsdWVzLmxlbmd0aCwKLQotICAgIC8vIHRo
ZSBjb3VudCBvZiB1bmNvbXBsZXRlZCBzdWJvcmRpbmF0ZXMKLSAgICByZW1haW5pbmcgPSBsZW5n
dGggIT09IDEgfHwgKCBzdWJvcmRpbmF0ZSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggc3Vib3JkaW5h
dGUucHJvbWlzZSApICkgPyBsZW5ndGggOiAwLAotCi0gICAgLy8gdGhlIG1hc3RlciBEZWZlcnJl
ZC4gSWYgcmVzb2x2ZVZhbHVlcyBjb25zaXN0IG9mIG9ubHkgYSBzaW5nbGUgRGVmZXJyZWQsIGp1
c3QgdXNlIHRoYXQuCi0gICAgZGVmZXJyZWQgPSByZW1haW5pbmcgPT09IDEgPyBzdWJvcmRpbmF0
ZSA6IGpRdWVyeS5EZWZlcnJlZCgpLAotCi0gICAgLy8gVXBkYXRlIGZ1bmN0aW9uIGZvciBib3Ro
IHJlc29sdmUgYW5kIHByb2dyZXNzIHZhbHVlcwotICAgIHVwZGF0ZUZ1bmMgPSBmdW5jdGlvbigg
aSwgY29udGV4dHMsIHZhbHVlcyApIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oIHZhbHVlICkgewot
ICAgIGNvbnRleHRzWyBpIF0gPSB0aGlzOwotICAgIHZhbHVlc1sgaSBdID0gYXJndW1lbnRzLmxl
bmd0aCA+IDEgPyBjb3JlX3NsaWNlLmNhbGwoIGFyZ3VtZW50cyApIDogdmFsdWU7Ci0gICAgaWYo
IHZhbHVlcyA9PT0gcHJvZ3Jlc3NWYWx1ZXMgKSB7Ci0gICAgZGVmZXJyZWQubm90aWZ5V2l0aCgg
Y29udGV4dHMsIHZhbHVlcyApOwotICAgIH0gZWxzZSBpZiAoICEoIC0tcmVtYWluaW5nICkgKSB7
Ci0gICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNvbnRleHRzLCB2YWx1ZXMgKTsKLSAgICB9Ci0g
ICAgfTsKLSAgICB9LAotCi0gICAgcHJvZ3Jlc3NWYWx1ZXMsIHByb2dyZXNzQ29udGV4dHMsIHJl
c29sdmVDb250ZXh0czsKLQotICAgIC8vIGFkZCBsaXN0ZW5lcnMgdG8gRGVmZXJyZWQgc3Vib3Jk
aW5hdGVzOyB0cmVhdCBvdGhlcnMgYXMgcmVzb2x2ZWQKLSAgICBpZiAoIGxlbmd0aCA+IDEgKSB7
Ci0gICAgcHJvZ3Jlc3NWYWx1ZXMgPSBuZXcgQXJyYXkoIGxlbmd0aCApOwotICAgIHByb2dyZXNz
Q29udGV4dHMgPSBuZXcgQXJyYXkoIGxlbmd0aCApOwotICAgIHJlc29sdmVDb250ZXh0cyA9IG5l
dyBBcnJheSggbGVuZ3RoICk7Ci0gICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7Ci0gICAg
aWYgKCByZXNvbHZlVmFsdWVzWyBpIF0gJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHJlc29sdmVWYWx1
ZXNbIGkgXS5wcm9taXNlICkgKSB7Ci0gICAgcmVzb2x2ZVZhbHVlc1sgaSBdLnByb21pc2UoKQot
ICAgIC5kb25lKCB1cGRhdGVGdW5jKCBpLCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMg
KSApCi0gICAgLmZhaWwoIGRlZmVycmVkLnJlamVjdCApCi0gICAgLnByb2dyZXNzKCB1cGRhdGVG
dW5jKCBpLCBwcm9ncmVzc0NvbnRleHRzLCBwcm9ncmVzc1ZhbHVlcyApICk7Ci0gICAgfSBlbHNl
IHsKLSAgICAtLXJlbWFpbmluZzsKLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIC8vIGlmIHdl
J3JlIG5vdCB3YWl0aW5nIG9uIGFueXRoaW5nLCByZXNvbHZlIHRoZSBtYXN0ZXIKLSAgICBpZiAo
ICFyZW1haW5pbmcgKSB7Ci0gICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIHJlc29sdmVDb250ZXh0
cywgcmVzb2x2ZVZhbHVlcyApOwotICAgIH0KLQotICAgIHJldHVybiBkZWZlcnJlZC5wcm9taXNl
KCk7Ci0gICAgfQotfSk7Ci1qUXVlcnkuc3VwcG9ydCA9IChmdW5jdGlvbigpIHsKLQotICAgIHZh
ciBzdXBwb3J0LCBhbGwsIGEsCi0gICAgaW5wdXQsIHNlbGVjdCwgZnJhZ21lbnQsCi0gICAgb3B0
LCBldmVudE5hbWUsIGlzU3VwcG9ydGVkLCBpLAotICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOwotCi0gICAgLy8gU2V0dXAKLSAgICBkaXYuc2V0QXR0cmlidXRlKCAiY2xh
c3NOYW1lIiwgInQiICk7Ci0gICAgZGl2LmlubmVySFRNTCA9ICIgIDxsaW5rLz48dGFibGU+PC90
YWJsZT48YSBocmVmPScvYSc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz4iOwotCi0gICAg
Ly8gU3VwcG9ydCB0ZXN0cyB3b24ndCBydW4gaW4gc29tZSBsaW1pdGVkIG9yIG5vbi1icm93c2Vy
IGVudmlyb25tZW50cwotICAgIGFsbCA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOwot
ICAgIGEgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVsgMCBdOwotICAgIGlmICggIWFs
bCB8fCAhYSB8fCAhYWxsLmxlbmd0aCApIHsKLSAgICByZXR1cm4ge307Ci0gICAgfQotCi0gICAg
Ly8gRmlyc3QgYmF0Y2ggb2YgdGVzdHMKLSAgICBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJzZWxlY3QiKTsKLSAgICBvcHQgPSBzZWxlY3QuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoIm9wdGlvbiIpICk7Ci0gICAgaW5wdXQgPSBkaXYuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoImlucHV0IilbIDAgXTsKLQotICAgIGEuc3R5bGUuY3NzVGV4dCA9ICJ0b3A6MXB4O2Zs
b2F0OmxlZnQ7b3BhY2l0eTouNSI7Ci0gICAgc3VwcG9ydCA9IHsKLSAgICAvLyBUZXN0IHNldEF0
dHJpYnV0ZSBvbiBjYW1lbENhc2UgY2xhc3MuIElmIGl0IHdvcmtzLCB3ZSBuZWVkIGF0dHJGaXhl
cyB3aGVuIGRvaW5nIGdldC9zZXRBdHRyaWJ1dGUgKGllNi83KQotICAgIGdldFNldEF0dHJpYnV0
ZTogZGl2LmNsYXNzTmFtZSAhPT0gInQiLAotCi0gICAgLy8gSUUgc3RyaXBzIGxlYWRpbmcgd2hp
dGVzcGFjZSB3aGVuIC5pbm5lckhUTUwgaXMgdXNlZAotICAgIGxlYWRpbmdXaGl0ZXNwYWNlOiBk
aXYuZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gMywKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRi
b2R5IGVsZW1lbnRzIGFyZW4ndCBhdXRvbWF0aWNhbGx5IGluc2VydGVkCi0gICAgLy8gSUUgd2ls
bCBpbnNlcnQgdGhlbSBpbnRvIGVtcHR5IHRhYmxlcwotICAgIHRib2R5OiAhZGl2LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCJ0Ym9keSIpLmxlbmd0aCwKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGxp
bmsgZWxlbWVudHMgZ2V0IHNlcmlhbGl6ZWQgY29ycmVjdGx5IGJ5IGlubmVySFRNTAotICAgIC8v
IFRoaXMgcmVxdWlyZXMgYSB3cmFwcGVyIGVsZW1lbnQgaW4gSUUKLSAgICBodG1sU2VyaWFsaXpl
OiAhIWRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCwKLQotICAgIC8vIEdl
dCB0aGUgc3R5bGUgaW5mb3JtYXRpb24gZnJvbSBnZXRBdHRyaWJ1dGUKLSAgICAvLyAoSUUgdXNl
cyAuY3NzVGV4dCBpbnN0ZWFkKQotICAgIHN0eWxlOiAvdG9wLy50ZXN0KCBhLmdldEF0dHJpYnV0
ZSgic3R5bGUiKSApLAotCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgVVJMcyBhcmVuJ3QgbWFuaXB1
bGF0ZWQKLSAgICAvLyAoSUUgbm9ybWFsaXplcyBpdCBieSBkZWZhdWx0KQotICAgIGhyZWZOb3Jt
YWxpemVkOiBhLmdldEF0dHJpYnV0ZSgiaHJlZiIpID09PSAiL2EiLAotCi0gICAgLy8gTWFrZSBz
dXJlIHRoYXQgZWxlbWVudCBvcGFjaXR5IGV4aXN0cwotICAgIC8vIChJRSB1c2VzIGZpbHRlciBp
bnN0ZWFkKQotICAgIC8vIFVzZSBhIHJlZ2V4IHRvIHdvcmsgYXJvdW5kIGEgV2ViS2l0IGlzc3Vl
LiBTZWUgIzUxNDUKLSAgICBvcGFjaXR5OiAvXjAuNS8udGVzdCggYS5zdHlsZS5vcGFjaXR5ICks
Ci0KLSAgICAvLyBWZXJpZnkgc3R5bGUgZmxvYXQgZXhpc3RlbmNlCi0gICAgLy8gKElFIHVzZXMg
c3R5bGVGbG9hdCBpbnN0ZWFkIG9mIGNzc0Zsb2F0KQotICAgIGNzc0Zsb2F0OiAhIWEuc3R5bGUu
Y3NzRmxvYXQsCi0KLSAgICAvLyBDaGVjayB0aGUgZGVmYXVsdCBjaGVja2JveC9yYWRpbyB2YWx1
ZSAoIiIgb24gV2ViS2l0OyAib24iIGVsc2V3aGVyZSkKLSAgICBjaGVja09uOiAhIWlucHV0LnZh
bHVlLAotCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgYSBzZWxlY3RlZC1ieS1kZWZhdWx0IG9wdGlv
biBoYXMgYSB3b3JraW5nIHNlbGVjdGVkIHByb3BlcnR5LgotICAgIC8vIChXZWJLaXQgZGVmYXVs
dHMgdG8gZmFsc2UgaW5zdGVhZCBvZiB0cnVlLCBJRSB0b28sIGlmIGl0J3MgaW4gYW4gb3B0Z3Jv
dXApCi0gICAgb3B0U2VsZWN0ZWQ6IG9wdC5zZWxlY3RlZCwKLQotICAgIC8vIFRlc3RzIGZvciBl
bmN0eXBlIHN1cHBvcnQgb24gYSBmb3JtICgjNjc0MykKLSAgICBlbmN0eXBlOiAhIWRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5lbmN0eXBlLAotCi0gICAgLy8gTWFrZXMgc3VyZSBjbG9u
aW5nIGFuIGh0bWw1IGVsZW1lbnQgZG9lcyBub3QgY2F1c2UgcHJvYmxlbXMKLSAgICAvLyBXaGVy
ZSBvdXRlckhUTUwgaXMgdW5kZWZpbmVkLCB0aGlzIHN0aWxsIHdvcmtzCi0gICAgaHRtbDVDbG9u
ZTogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibmF2IikuY2xvbmVOb2RlKCB0cnVlICkub3V0ZXJI
VE1MICE9PSAiPDpuYXY+PC86bmF2PiIsCi0KLSAgICAvLyBqUXVlcnkuc3VwcG9ydC5ib3hNb2Rl
bCBERVBSRUNBVEVEIGluIDEuOCBzaW5jZSB3ZSBkb24ndCBzdXBwb3J0IFF1aXJrcyBNb2RlCi0g
ICAgYm94TW9kZWw6IGRvY3VtZW50LmNvbXBhdE1vZGUgPT09ICJDU1MxQ29tcGF0IiwKLQotICAg
IC8vIFdpbGwgYmUgZGVmaW5lZCBsYXRlcgotICAgIGRlbGV0ZUV4cGFuZG86IHRydWUsCi0gICAg
bm9DbG9uZUV2ZW50OiB0cnVlLAotICAgIGlubGluZUJsb2NrTmVlZHNMYXlvdXQ6IGZhbHNlLAot
ICAgIHNocmlua1dyYXBCbG9ja3M6IGZhbHNlLAotICAgIHJlbGlhYmxlTWFyZ2luUmlnaHQ6IHRy
dWUsCi0gICAgYm94U2l6aW5nUmVsaWFibGU6IHRydWUsCi0gICAgcGl4ZWxQb3NpdGlvbjogZmFs
c2UKLSAgICB9OwotCi0gICAgLy8gTWFrZSBzdXJlIGNoZWNrZWQgc3RhdHVzIGlzIHByb3Blcmx5
IGNsb25lZAotICAgIGlucHV0LmNoZWNrZWQgPSB0cnVlOwotICAgIHN1cHBvcnQubm9DbG9uZUNo
ZWNrZWQgPSBpbnB1dC5jbG9uZU5vZGUoIHRydWUgKS5jaGVja2VkOwotCi0gICAgLy8gTWFrZSBz
dXJlIHRoYXQgdGhlIG9wdGlvbnMgaW5zaWRlIGRpc2FibGVkIHNlbGVjdHMgYXJlbid0IG1hcmtl
ZCBhcyBkaXNhYmxlZAotICAgIC8vIChXZWJLaXQgbWFya3MgdGhlbSBhcyBkaXNhYmxlZCkKLSAg
ICBzZWxlY3QuZGlzYWJsZWQgPSB0cnVlOwotICAgIHN1cHBvcnQub3B0RGlzYWJsZWQgPSAhb3B0
LmRpc2FibGVkOwotCi0gICAgLy8gU3VwcG9ydDogSUU8OQotICAgIHRyeSB7Ci0gICAgZGVsZXRl
IGRpdi50ZXN0OwotICAgIH0gY2F0Y2goIGUgKSB7Ci0gICAgc3VwcG9ydC5kZWxldGVFeHBhbmRv
ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgaWYgd2UgY2FuIHRydXN0IGdldEF0dHJp
YnV0ZSgidmFsdWUiKQotICAgIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQi
KTsKLSAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoICJ2YWx1ZSIsICIiICk7Ci0gICAgc3VwcG9ydC5p
bnB1dCA9IGlucHV0LmdldEF0dHJpYnV0ZSggInZhbHVlIiApID09PSAiIjsKLQotICAgIC8vIENo
ZWNrIGlmIGFuIGlucHV0IG1haW50YWlucyBpdHMgdmFsdWUgYWZ0ZXIgYmVjb21pbmcgYSByYWRp
bwotICAgIGlucHV0LnZhbHVlID0gInQiOwotICAgIGlucHV0LnNldEF0dHJpYnV0ZSggInR5cGUi
LCAicmFkaW8iICk7Ci0gICAgc3VwcG9ydC5yYWRpb1ZhbHVlID0gaW5wdXQudmFsdWUgPT09ICJ0
IjsKLQotICAgIC8vICMxMTIxNyAtIFdlYktpdCBsb3NlcyBjaGVjayB3aGVuIHRoZSBuYW1lIGlz
IGFmdGVyIHRoZSBjaGVja2VkIGF0dHJpYnV0ZQotICAgIGlucHV0LnNldEF0dHJpYnV0ZSggImNo
ZWNrZWQiLCAidCIgKTsKLSAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoICJuYW1lIiwgInQiICk7Ci0K
LSAgICBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLSAgICBm
cmFnbWVudC5hcHBlbmRDaGlsZCggaW5wdXQgKTsKLQotICAgIC8vIENoZWNrIGlmIGEgZGlzY29u
bmVjdGVkIGNoZWNrYm94IHdpbGwgcmV0YWluIGl0cyBjaGVja2VkCi0gICAgLy8gdmFsdWUgb2Yg
dHJ1ZSBhZnRlciBhcHBlbmRlZCB0byB0aGUgRE9NIChJRTYvNykKLSAgICBzdXBwb3J0LmFwcGVu
ZENoZWNrZWQgPSBpbnB1dC5jaGVja2VkOwotCi0gICAgLy8gV2ViS2l0IGRvZXNuJ3QgY2xvbmUg
Y2hlY2tlZCBzdGF0ZSBjb3JyZWN0bHkgaW4gZnJhZ21lbnRzCi0gICAgc3VwcG9ydC5jaGVja0Ns
b25lID0gZnJhZ21lbnQuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENo
aWxkLmNoZWNrZWQ7Ci0KLSAgICAvLyBTdXBwb3J0OiBJRTw5Ci0gICAgLy8gT3BlcmEgZG9lcyBu
b3QgY2xvbmUgZXZlbnRzIChhbmQgdHlwZW9mIGRpdi5hdHRhY2hFdmVudCA9PT0gdW5kZWZpbmVk
KS4KLSAgICAvLyBJRTktMTAgY2xvbmVzIGV2ZW50cyBib3VuZCB2aWEgYXR0YWNoRXZlbnQsIGJ1
dCB0aGV5IGRvbid0IHRyaWdnZXIgd2l0aCAuY2xpY2soKQotICAgIGlmICggZGl2LmF0dGFjaEV2
ZW50ICkgewotICAgIGRpdi5hdHRhY2hFdmVudCggIm9uY2xpY2siLCBmdW5jdGlvbigpIHsKLSAg
ICBzdXBwb3J0Lm5vQ2xvbmVFdmVudCA9IGZhbHNlOwotICAgIH0pOwotCi0gICAgZGl2LmNsb25l
Tm9kZSggdHJ1ZSApLmNsaWNrKCk7Ci0gICAgfQotCi0gICAgLy8gU3VwcG9ydDogSUU8OSAobGFj
ayBzdWJtaXQvY2hhbmdlIGJ1YmJsZSksIEZpcmVmb3ggMTcrIChsYWNrIGZvY3VzaW4gZXZlbnQp
Ci0gICAgLy8gQmV3YXJlIG9mIENTUCByZXN0cmljdGlvbnMgKGh0dHBzOi8vZGV2ZWxvcGVyLm1v
emlsbGEub3JnL2VuL1NlY3VyaXR5L0NTUCksIHRlc3QvY3NwLnBocAotICAgIGZvciAoIGkgaW4g
eyBzdWJtaXQ6IHRydWUsIGNoYW5nZTogdHJ1ZSwgZm9jdXNpbjogdHJ1ZSB9KSB7Ci0gICAgZGl2
LnNldEF0dHJpYnV0ZSggZXZlbnROYW1lID0gIm9uIiArIGksICJ0IiApOwotCi0gICAgc3VwcG9y
dFsgaSArICJCdWJibGVzIiBdID0gZXZlbnROYW1lIGluIHdpbmRvdyB8fCBkaXYuYXR0cmlidXRl
c1sgZXZlbnROYW1lIF0uZXhwYW5kbyA9PT0gZmFsc2U7Ci0gICAgfQotCi0gICAgZGl2LnN0eWxl
LmJhY2tncm91bmRDbGlwID0gImNvbnRlbnQtYm94IjsKLSAgICBkaXYuY2xvbmVOb2RlKCB0cnVl
ICkuc3R5bGUuYmFja2dyb3VuZENsaXAgPSAiIjsKLSAgICBzdXBwb3J0LmNsZWFyQ2xvbmVTdHls
ZSA9IGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9PT0gImNvbnRlbnQtYm94IjsKLQotICAgIC8v
IFJ1biB0ZXN0cyB0aGF0IG5lZWQgYSBib2R5IGF0IGRvYyByZWFkeQotICAgIGpRdWVyeShmdW5j
dGlvbigpIHsKLSAgICB2YXIgY29udGFpbmVyLCBtYXJnaW5EaXYsIHRkcywKLSAgICBkaXZSZXNl
dCA9ICJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpibG9jaztib3gtc2l6aW5n
OmNvbnRlbnQtYm94Oy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDstd2Via2l0LWJveC1zaXpp
bmc6Y29udGVudC1ib3g7IiwKLSAgICBib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoImJvZHkiKVswXTsKLQotICAgIGlmICggIWJvZHkgKSB7Ci0gICAgLy8gUmV0dXJuIGZvciBm
cmFtZXNldCBkb2NzIHRoYXQgZG9uJ3QgaGF2ZSBhIGJvZHkKLSAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgY29u
dGFpbmVyLnN0eWxlLmNzc1RleHQgPSAiYm9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDtwb3NpdGlv
bjphYnNvbHV0ZTt0b3A6MDtsZWZ0Oi05OTk5cHg7bWFyZ2luLXRvcDoxcHgiOwotCi0gICAgYm9k
eS5hcHBlbmRDaGlsZCggY29udGFpbmVyICkuYXBwZW5kQ2hpbGQoIGRpdiApOwotCi0gICAgLy8g
U3VwcG9ydDogSUU4Ci0gICAgLy8gQ2hlY2sgaWYgdGFibGUgY2VsbHMgc3RpbGwgaGF2ZSBvZmZz
ZXRXaWR0aC9IZWlnaHQgd2hlbiB0aGV5IGFyZSBzZXQKLSAgICAvLyB0byBkaXNwbGF5Om5vbmUg
YW5kIHRoZXJlIGFyZSBzdGlsbCBvdGhlciB2aXNpYmxlIHRhYmxlIGNlbGxzIGluIGEKLSAgICAv
LyB0YWJsZSByb3c7IGlmIHNvLCBvZmZzZXRXaWR0aC9IZWlnaHQgYXJlIG5vdCByZWxpYWJsZSBm
b3IgdXNlIHdoZW4KLSAgICAvLyBkZXRlcm1pbmluZyBpZiBhbiBlbGVtZW50IGhhcyBiZWVuIGhp
ZGRlbiBkaXJlY3RseSB1c2luZwotICAgIC8vIGRpc3BsYXk6bm9uZSAoaXQgaXMgc3RpbGwgc2Fm
ZSB0byB1c2Ugb2Zmc2V0cyBpZiBhIHBhcmVudCBlbGVtZW50IGlzCi0gICAgLy8gaGlkZGVuOyBk
b24gc2FmZXR5IGdvZ2dsZXMgYW5kIHNlZSBidWcgIzQ1MTIgZm9yIG1vcmUgaW5mb3JtYXRpb24p
LgotICAgIGRpdi5pbm5lckhUTUwgPSAiPHRhYmxlPjx0cj48dGQ+PC90ZD48dGQ+dDwvdGQ+PC90
cj48L3RhYmxlPiI7Ci0gICAgdGRzID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpOwot
ICAgIHRkc1sgMCBdLnN0eWxlLmNzc1RleHQgPSAicGFkZGluZzowO21hcmdpbjowO2JvcmRlcjow
O2Rpc3BsYXk6bm9uZSI7Ci0gICAgaXNTdXBwb3J0ZWQgPSAoIHRkc1sgMCBdLm9mZnNldEhlaWdo
dCA9PT0gMCApOwotCi0gICAgdGRzWyAwIF0uc3R5bGUuZGlzcGxheSA9ICIiOwotICAgIHRkc1sg
MSBdLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0KLSAgICAvLyBTdXBwb3J0OiBJRTgKLSAgICAv
LyBDaGVjayBpZiBlbXB0eSB0YWJsZSBjZWxscyBzdGlsbCBoYXZlIG9mZnNldFdpZHRoL0hlaWdo
dAotICAgIHN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzID0gaXNTdXBwb3J0ZWQgJiYgKCB0
ZHNbIDAgXS5vZmZzZXRIZWlnaHQgPT09IDAgKTsKLQotICAgIC8vIENoZWNrIGJveC1zaXppbmcg
YW5kIG1hcmdpbiBiZWhhdmlvcgotICAgIGRpdi5pbm5lckhUTUwgPSAiIjsKLSAgICBkaXYuc3R5
bGUuY3NzVGV4dCA9ICJib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRl
ci1ib3g7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoxcHg7Ym9yZGVyOjFw
eDtkaXNwbGF5OmJsb2NrO3dpZHRoOjRweDttYXJnaW4tdG9wOjElO3Bvc2l0aW9uOmFic29sdXRl
O3RvcDoxJTsiOwotICAgIHN1cHBvcnQuYm94U2l6aW5nID0gKCBkaXYub2Zmc2V0V2lkdGggPT09
IDQgKTsKLSAgICBzdXBwb3J0LmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0ID0gKCBi
b2R5Lm9mZnNldFRvcCAhPT0gMSApOwotCi0gICAgLy8gVXNlIHdpbmRvdy5nZXRDb21wdXRlZFN0
eWxlIGJlY2F1c2UganNkb20gb24gbm9kZS5qcyB3aWxsIGJyZWFrIHdpdGhvdXQgaXQuCi0gICAg
aWYgKCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSApIHsKLSAgICBzdXBwb3J0LnBpeGVsUG9zaXRp
b24gPSAoIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYsIG51bGwgKSB8fCB7fSApLnRvcCAh
PT0gIjElIjsKLSAgICBzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlID0gKCB3aW5kb3cuZ2V0Q29t
cHV0ZWRTdHlsZSggZGl2LCBudWxsICkgfHwgeyB3aWR0aDogIjRweCIgfSApLndpZHRoID09PSAi
NHB4IjsKLQotICAgIC8vIENoZWNrIGlmIGRpdiB3aXRoIGV4cGxpY2l0IHdpZHRoIGFuZCBubyBt
YXJnaW4tcmlnaHQgaW5jb3JyZWN0bHkKLSAgICAvLyBnZXRzIGNvbXB1dGVkIG1hcmdpbi1yaWdo
dCBiYXNlZCBvbiB3aWR0aCBvZiBjb250YWluZXIuICgjMzMzMykKLSAgICAvLyBGYWlscyBpbiBX
ZWJLaXQgYmVmb3JlIEZlYiAyMDExIG5pZ2h0bGllcwotICAgIC8vIFdlYktpdCBCdWcgMTMzNDMg
LSBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgd3JvbmcgdmFsdWUgZm9yIG1hcmdpbi1yaWdodAot
ICAgIG1hcmdpbkRpdiA9IGRpdi5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
ZGl2IikgKTsKLSAgICBtYXJnaW5EaXYuc3R5bGUuY3NzVGV4dCA9IGRpdi5zdHlsZS5jc3NUZXh0
ID0gZGl2UmVzZXQ7Ci0gICAgbWFyZ2luRGl2LnN0eWxlLm1hcmdpblJpZ2h0ID0gbWFyZ2luRGl2
LnN0eWxlLndpZHRoID0gIjAiOwotICAgIGRpdi5zdHlsZS53aWR0aCA9ICIxcHgiOwotCi0gICAg
c3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0ID0KLSAgICAhcGFyc2VGbG9hdCggKCB3aW5kb3cu
Z2V0Q29tcHV0ZWRTdHlsZSggbWFyZ2luRGl2LCBudWxsICkgfHwge30gKS5tYXJnaW5SaWdodCAp
OwotICAgIH0KLQotICAgIGlmICggdHlwZW9mIGRpdi5zdHlsZS56b29tICE9PSBjb3JlX3N0cnVu
ZGVmaW5lZCApIHsKLSAgICAvLyBTdXBwb3J0OiBJRTw4Ci0gICAgLy8gQ2hlY2sgaWYgbmF0aXZl
bHkgYmxvY2stbGV2ZWwgZWxlbWVudHMgYWN0IGxpa2UgaW5saW5lLWJsb2NrCi0gICAgLy8gZWxl
bWVudHMgd2hlbiBzZXR0aW5nIHRoZWlyIGRpc3BsYXkgdG8gJ2lubGluZScgYW5kIGdpdmluZwot
ICAgIC8vIHRoZW0gbGF5b3V0Ci0gICAgZGl2LmlubmVySFRNTCA9ICIiOwotICAgIGRpdi5zdHls
ZS5jc3NUZXh0ID0gZGl2UmVzZXQgKyAid2lkdGg6MXB4O3BhZGRpbmc6MXB4O2Rpc3BsYXk6aW5s
aW5lO3pvb206MSI7Ci0gICAgc3VwcG9ydC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0ID0gKCBkaXYu
b2Zmc2V0V2lkdGggPT09IDMgKTsKLQotICAgIC8vIFN1cHBvcnQ6IElFNgotICAgIC8vIENoZWNr
IGlmIGVsZW1lbnRzIHdpdGggbGF5b3V0IHNocmluay13cmFwIHRoZWlyIGNoaWxkcmVuCi0gICAg
ZGl2LnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwotICAgIGRpdi5pbm5lckhUTUwgPSAiPGRpdj48
L2Rpdj4iOwotICAgIGRpdi5maXJzdENoaWxkLnN0eWxlLndpZHRoID0gIjVweCI7Ci0gICAgc3Vw
cG9ydC5zaHJpbmtXcmFwQmxvY2tzID0gKCBkaXYub2Zmc2V0V2lkdGggIT09IDMgKTsKLQotICAg
IGlmICggc3VwcG9ydC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0ICkgewotICAgIC8vIFByZXZlbnQg
SUUgNiBmcm9tIGFmZmVjdGluZyBsYXlvdXQgZm9yIHBvc2l0aW9uZWQgZWxlbWVudHMgIzExMDQ4
Ci0gICAgLy8gUHJldmVudCBJRSBmcm9tIHNocmlua2luZyB0aGUgYm9keSBpbiBJRSA3IG1vZGUg
IzEyODY5Ci0gICAgLy8gU3VwcG9ydDogSUU8OAotICAgIGJvZHkuc3R5bGUuem9vbSA9IDE7Ci0g
ICAgfQotICAgIH0KLQotICAgIGJvZHkucmVtb3ZlQ2hpbGQoIGNvbnRhaW5lciApOwotCi0gICAg
Ly8gTnVsbCBlbGVtZW50cyB0byBhdm9pZCBsZWFrcyBpbiBJRQotICAgIGNvbnRhaW5lciA9IGRp
diA9IHRkcyA9IG1hcmdpbkRpdiA9IG51bGw7Ci0gICAgfSk7Ci0KLSAgICAvLyBOdWxsIGVsZW1l
bnRzIHRvIGF2b2lkIGxlYWtzIGluIElFCi0gICAgYWxsID0gc2VsZWN0ID0gZnJhZ21lbnQgPSBv
cHQgPSBhID0gaW5wdXQgPSBudWxsOwotCi0gICAgcmV0dXJuIHN1cHBvcnQ7Ci19KSgpOwotCi12
YXIgcmJyYWNlID0gLyg/Olx7W1xzXFNdKlx9fFxbW1xzXFNdKlxdKSQvLAotICAgIHJtdWx0aURh
c2ggPSAvKFtBLVpdKS9nOwotCi1mdW5jdGlvbiBpbnRlcm5hbERhdGEoIGVsZW0sIG5hbWUsIGRh
dGEsIHB2dCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApewotICAgIGlmICggIWpRdWVyeS5hY2Nl
cHREYXRhKCBlbGVtICkgKSB7Ci0gICAgcmV0dXJuOwotICAgIH0KLQotICAgIHZhciB0aGlzQ2Fj
aGUsIHJldCwKLSAgICBpbnRlcm5hbEtleSA9IGpRdWVyeS5leHBhbmRvLAotICAgIGdldEJ5TmFt
ZSA9IHR5cGVvZiBuYW1lID09PSAic3RyaW5nIiwKLQotICAgIC8vIFdlIGhhdmUgdG8gaGFuZGxl
IERPTSBub2RlcyBhbmQgSlMgb2JqZWN0cyBkaWZmZXJlbnRseSBiZWNhdXNlIElFNi03Ci0gICAg
Ly8gY2FuJ3QgR0Mgb2JqZWN0IHJlZmVyZW5jZXMgcHJvcGVybHkgYWNyb3NzIHRoZSBET00tSlMg
Ym91bmRhcnkKLSAgICBpc05vZGUgPSBlbGVtLm5vZGVUeXBlLAotCi0gICAgLy8gT25seSBET00g
bm9kZXMgbmVlZCB0aGUgZ2xvYmFsIGpRdWVyeSBjYWNoZTsgSlMgb2JqZWN0IGRhdGEgaXMKLSAg
ICAvLyBhdHRhY2hlZCBkaXJlY3RseSB0byB0aGUgb2JqZWN0IHNvIEdDIGNhbiBvY2N1ciBhdXRv
bWF0aWNhbGx5Ci0gICAgY2FjaGUgPSBpc05vZGUgPyBqUXVlcnkuY2FjaGUgOiBlbGVtLAotCi0g
ICAgLy8gT25seSBkZWZpbmluZyBhbiBJRCBmb3IgSlMgb2JqZWN0cyBpZiBpdHMgY2FjaGUgYWxy
ZWFkeSBleGlzdHMgYWxsb3dzCi0gICAgLy8gdGhlIGNvZGUgdG8gc2hvcnRjdXQgb24gdGhlIHNh
bWUgcGF0aCBhcyBhIERPTSBub2RlIHdpdGggbm8gY2FjaGUKLSAgICBpZCA9IGlzTm9kZSA/IGVs
ZW1bIGludGVybmFsS2V5IF0gOiBlbGVtWyBpbnRlcm5hbEtleSBdICYmIGludGVybmFsS2V5Owot
Ci0gICAgLy8gQXZvaWQgZG9pbmcgYW55IG1vcmUgd29yayB0aGFuIHdlIG5lZWQgdG8gd2hlbiB0
cnlpbmcgdG8gZ2V0IGRhdGEgb24gYW4KLSAgICAvLyBvYmplY3QgdGhhdCBoYXMgbm8gZGF0YSBh
dCBhbGwKLSAgICBpZiAoICghaWQgfHwgIWNhY2hlW2lkXSB8fCAoIXB2dCAmJiAhY2FjaGVbaWRd
LmRhdGEpKSAmJiBnZXRCeU5hbWUgJiYgZGF0YSA9PT0gdW5kZWZpbmVkICkgewotICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoICFpZCApIHsKLSAgICAvLyBPbmx5IERPTSBub2RlcyBuZWVk
IGEgbmV3IHVuaXF1ZSBJRCBmb3IgZWFjaCBlbGVtZW50IHNpbmNlIHRoZWlyIGRhdGEKLSAgICAv
LyBlbmRzIHVwIGluIHRoZSBnbG9iYWwgY2FjaGUKLSAgICBpZiAoIGlzTm9kZSApIHsKLSAgICBl
bGVtWyBpbnRlcm5hbEtleSBdID0gaWQgPSBjb3JlX2RlbGV0ZWRJZHMucG9wKCkgfHwgalF1ZXJ5
Lmd1aWQrKzsKLSAgICB9IGVsc2UgewotICAgIGlkID0gaW50ZXJuYWxLZXk7Ci0gICAgfQotICAg
IH0KLQotICAgIGlmICggIWNhY2hlWyBpZCBdICkgewotICAgIGNhY2hlWyBpZCBdID0ge307Ci0K
LSAgICAvLyBBdm9pZHMgZXhwb3NpbmcgalF1ZXJ5IG1ldGFkYXRhIG9uIHBsYWluIEpTIG9iamVj
dHMgd2hlbiB0aGUgb2JqZWN0Ci0gICAgLy8gaXMgc2VyaWFsaXplZCB1c2luZyBKU09OLnN0cmlu
Z2lmeQotICAgIGlmICggIWlzTm9kZSApIHsKLSAgICBjYWNoZVsgaWQgXS50b0pTT04gPSBqUXVl
cnkubm9vcDsKLSAgICB9Ci0gICAgfQotCi0gICAgLy8gQW4gb2JqZWN0IGNhbiBiZSBwYXNzZWQg
dG8galF1ZXJ5LmRhdGEgaW5zdGVhZCBvZiBhIGtleS92YWx1ZSBwYWlyOyB0aGlzIGdldHMKLSAg
ICAvLyBzaGFsbG93IGNvcGllZCBvdmVyIG9udG8gdGhlIGV4aXN0aW5nIGNhY2hlCi0gICAgaWYg
KCB0eXBlb2YgbmFtZSA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIG5hbWUgPT09ICJmdW5jdGlvbiIg
KSB7Ci0gICAgaWYgKCBwdnQgKSB7Ci0gICAgY2FjaGVbIGlkIF0gPSBqUXVlcnkuZXh0ZW5kKCBj
YWNoZVsgaWQgXSwgbmFtZSApOwotICAgIH0gZWxzZSB7Ci0gICAgY2FjaGVbIGlkIF0uZGF0YSA9
IGpRdWVyeS5leHRlbmQoIGNhY2hlWyBpZCBdLmRhdGEsIG5hbWUgKTsKLSAgICB9Ci0gICAgfQot
Ci0gICAgdGhpc0NhY2hlID0gY2FjaGVbIGlkIF07Ci0KLSAgICAvLyBqUXVlcnkgZGF0YSgpIGlz
IHN0b3JlZCBpbiBhIHNlcGFyYXRlIG9iamVjdCBpbnNpZGUgdGhlIG9iamVjdCdzIGludGVybmFs
IGRhdGEKLSAgICAvLyBjYWNoZSBpbiBvcmRlciB0byBhdm9pZCBrZXkgY29sbGlzaW9ucyBiZXR3
ZWVuIGludGVybmFsIGRhdGEgYW5kIHVzZXItZGVmaW5lZAotICAgIC8vIGRhdGEuCi0gICAgaWYg
KCAhcHZ0ICkgewotICAgIGlmICggIXRoaXNDYWNoZS5kYXRhICkgewotICAgIHRoaXNDYWNoZS5k
YXRhID0ge307Ci0gICAgfQotCi0gICAgdGhpc0NhY2hlID0gdGhpc0NhY2hlLmRhdGE7Ci0gICAg
fQotCi0gICAgaWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgdGhpc0NhY2hlWyBqUXVl
cnkuY2FtZWxDYXNlKCBuYW1lICkgXSA9IGRhdGE7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgZm9y
IGJvdGggY29udmVydGVkLXRvLWNhbWVsIGFuZCBub24tY29udmVydGVkIGRhdGEgcHJvcGVydHkg
bmFtZXMKLSAgICAvLyBJZiBhIGRhdGEgcHJvcGVydHkgd2FzIHNwZWNpZmllZAotICAgIGlmICgg
Z2V0QnlOYW1lICkgewotCi0gICAgLy8gRmlyc3QgVHJ5IHRvIGZpbmQgYXMtaXMgcHJvcGVydHkg
ZGF0YQotICAgIHJldCA9IHRoaXNDYWNoZVsgbmFtZSBdOwotCi0gICAgLy8gVGVzdCBmb3IgbnVs
bHx1bmRlZmluZWQgcHJvcGVydHkgZGF0YQotICAgIGlmICggcmV0ID09IG51bGwgKSB7Ci0KLSAg
ICAvLyBUcnkgdG8gZmluZCB0aGUgY2FtZWxDYXNlZCBwcm9wZXJ0eQotICAgIHJldCA9IHRoaXND
YWNoZVsgalF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApIF07Ci0gICAgfQotICAgIH0gZWxzZSB7Ci0g
ICAgcmV0ID0gdGhpc0NhY2hlOwotICAgIH0KLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLWZ1bmN0
aW9uIGludGVybmFsUmVtb3ZlRGF0YSggZWxlbSwgbmFtZSwgcHZ0ICkgewotICAgIGlmICggIWpR
dWVyeS5hY2NlcHREYXRhKCBlbGVtICkgKSB7Ci0gICAgcmV0dXJuOwotICAgIH0KLQotICAgIHZh
ciBpLCBsLCB0aGlzQ2FjaGUsCi0gICAgaXNOb2RlID0gZWxlbS5ub2RlVHlwZSwKLQotICAgIC8v
IFNlZSBqUXVlcnkuZGF0YSBmb3IgbW9yZSBpbmZvcm1hdGlvbgotICAgIGNhY2hlID0gaXNOb2Rl
ID8galF1ZXJ5LmNhY2hlIDogZWxlbSwKLSAgICBpZCA9IGlzTm9kZSA/IGVsZW1bIGpRdWVyeS5l
eHBhbmRvIF0gOiBqUXVlcnkuZXhwYW5kbzsKLQotICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkg
bm8gY2FjaGUgZW50cnkgZm9yIHRoaXMgb2JqZWN0LCB0aGVyZSBpcyBubwotICAgIC8vIHB1cnBv
c2UgaW4gY29udGludWluZwotICAgIGlmICggIWNhY2hlWyBpZCBdICkgewotICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoIG5hbWUgKSB7Ci0KLSAgICB0aGlzQ2FjaGUgPSBwdnQgPyBjYWNo
ZVsgaWQgXSA6IGNhY2hlWyBpZCBdLmRhdGE7Ci0KLSAgICBpZiAoIHRoaXNDYWNoZSApIHsKLQot
ICAgIC8vIFN1cHBvcnQgYXJyYXkgb3Igc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyBuYW1lcyBmb3Ig
ZGF0YSBrZXlzCi0gICAgaWYgKCAhalF1ZXJ5LmlzQXJyYXkoIG5hbWUgKSApIHsKLQotICAgIC8v
IHRyeSB0aGUgc3RyaW5nIGFzIGEga2V5IGJlZm9yZSBhbnkgbWFuaXB1bGF0aW9uCi0gICAgaWYg
KCBuYW1lIGluIHRoaXNDYWNoZSApIHsKLSAgICBuYW1lID0gWyBuYW1lIF07Ci0gICAgfSBlbHNl
IHsKLQotICAgIC8vIHNwbGl0IHRoZSBjYW1lbCBjYXNlZCB2ZXJzaW9uIGJ5IHNwYWNlcyB1bmxl
c3MgYSBrZXkgd2l0aCB0aGUgc3BhY2VzIGV4aXN0cwotICAgIG5hbWUgPSBqUXVlcnkuY2FtZWxD
YXNlKCBuYW1lICk7Ci0gICAgaWYgKCBuYW1lIGluIHRoaXNDYWNoZSApIHsKLSAgICBuYW1lID0g
WyBuYW1lIF07Ci0gICAgfSBlbHNlIHsKLSAgICBuYW1lID0gbmFtZS5zcGxpdCgiICIpOwotICAg
IH0KLSAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAvLyBJZiAibmFtZSIgaXMgYW4gYXJyYXkgb2Yg
a2V5cy4uLgotICAgIC8vIFdoZW4gZGF0YSBpcyBpbml0aWFsbHkgY3JlYXRlZCwgdmlhICgia2V5
IiwgInZhbCIpIHNpZ25hdHVyZSwKLSAgICAvLyBrZXlzIHdpbGwgYmUgY29udmVydGVkIHRvIGNh
bWVsQ2FzZS4KLSAgICAvLyBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gdGVsbCBfaG93XyBhIGtl
eSB3YXMgYWRkZWQsIHJlbW92ZQotICAgIC8vIGJvdGggcGxhaW4ga2V5IGFuZCBjYW1lbENhc2Ug
a2V5LiAjMTI3ODYKLSAgICAvLyBUaGlzIHdpbGwgb25seSBwZW5hbGl6ZSB0aGUgYXJyYXkgYXJn
dW1lbnQgcGF0aC4KLSAgICBuYW1lID0gbmFtZS5jb25jYXQoIGpRdWVyeS5tYXAoIG5hbWUsIGpR
dWVyeS5jYW1lbENhc2UgKSApOwotICAgIH0KLQotICAgIGZvciAoIGkgPSAwLCBsID0gbmFtZS5s
ZW5ndGg7IGkgPCBsOyBpKysgKSB7Ci0gICAgZGVsZXRlIHRoaXNDYWNoZVsgbmFtZVtpXSBdOwot
ICAgIH0KLQotICAgIC8vIElmIHRoZXJlIGlzIG5vIGRhdGEgbGVmdCBpbiB0aGUgY2FjaGUsIHdl
IHdhbnQgdG8gY29udGludWUKLSAgICAvLyBhbmQgbGV0IHRoZSBjYWNoZSBvYmplY3QgaXRzZWxm
IGdldCBkZXN0cm95ZWQKLSAgICBpZiAoICEoIHB2dCA/IGlzRW1wdHlEYXRhT2JqZWN0IDogalF1
ZXJ5LmlzRW1wdHlPYmplY3QgKSggdGhpc0NhY2hlICkgKSB7Ci0gICAgcmV0dXJuOwotICAgIH0K
LSAgICB9Ci0gICAgfQotCi0gICAgLy8gU2VlIGpRdWVyeS5kYXRhIGZvciBtb3JlIGluZm9ybWF0
aW9uCi0gICAgaWYgKCAhcHZ0ICkgewotICAgIGRlbGV0ZSBjYWNoZVsgaWQgXS5kYXRhOwotCi0g
ICAgLy8gRG9uJ3QgZGVzdHJveSB0aGUgcGFyZW50IGNhY2hlIHVubGVzcyB0aGUgaW50ZXJuYWwg
ZGF0YSBvYmplY3QKLSAgICAvLyBoYWQgYmVlbiB0aGUgb25seSB0aGluZyBsZWZ0IGluIGl0Ci0g
ICAgaWYgKCAhaXNFbXB0eURhdGFPYmplY3QoIGNhY2hlWyBpZCBdICkgKSB7Ci0gICAgcmV0dXJu
OwotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBEZXN0cm95IHRoZSBjYWNoZQotICAgIGlmICggaXNO
b2RlICkgewotICAgIGpRdWVyeS5jbGVhbkRhdGEoIFsgZWxlbSBdLCB0cnVlICk7Ci0KLSAgICAv
LyBVc2UgZGVsZXRlIHdoZW4gc3VwcG9ydGVkIGZvciBleHBhbmRvcyBvciBgY2FjaGVgIGlzIG5v
dCBhIHdpbmRvdyBwZXIgaXNXaW5kb3cgKCMxMDA4MCkKLSAgICB9IGVsc2UgaWYgKCBqUXVlcnku
c3VwcG9ydC5kZWxldGVFeHBhbmRvIHx8IGNhY2hlICE9IGNhY2hlLndpbmRvdyApIHsKLSAgICBk
ZWxldGUgY2FjaGVbIGlkIF07Ci0KLSAgICAvLyBXaGVuIGFsbCBlbHNlIGZhaWxzLCBudWxsCi0g
ICAgfSBlbHNlIHsKLSAgICBjYWNoZVsgaWQgXSA9IG51bGw7Ci0gICAgfQotfQotCi1qUXVlcnku
ZXh0ZW5kKHsKLSAgICBjYWNoZToge30sCi0KLSAgICAvLyBVbmlxdWUgZm9yIGVhY2ggY29weSBv
ZiBqUXVlcnkgb24gdGhlIHBhZ2UKLSAgICAvLyBOb24tZGlnaXRzIHJlbW92ZWQgdG8gbWF0Y2gg
cmlubGluZWpRdWVyeQotICAgIGV4cGFuZG86ICJqUXVlcnkiICsgKCBjb3JlX3ZlcnNpb24gKyBN
YXRoLnJhbmRvbSgpICkucmVwbGFjZSggL1xEL2csICIiICksCi0KLSAgICAvLyBUaGUgZm9sbG93
aW5nIGVsZW1lbnRzIHRocm93IHVuY2F0Y2hhYmxlIGV4Y2VwdGlvbnMgaWYgeW91Ci0gICAgLy8g
YXR0ZW1wdCB0byBhZGQgZXhwYW5kbyBwcm9wZXJ0aWVzIHRvIHRoZW0uCi0gICAgbm9EYXRhOiB7
Ci0gICAgImVtYmVkIjogdHJ1ZSwKLSAgICAvLyBCYW4gYWxsIG9iamVjdHMgZXhjZXB0IGZvciBG
bGFzaCAod2hpY2ggaGFuZGxlIGV4cGFuZG9zKQotICAgICJvYmplY3QiOiAiY2xzaWQ6RDI3Q0RC
NkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIiwKLSAgICAiYXBwbGV0IjogdHJ1ZQotICAg
IH0sCi0KLSAgICBoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICBlbGVtID0gZWxlbS5u
b2RlVHlwZSA/IGpRdWVyeS5jYWNoZVsgZWxlbVtqUXVlcnkuZXhwYW5kb10gXSA6IGVsZW1bIGpR
dWVyeS5leHBhbmRvIF07Ci0gICAgcmV0dXJuICEhZWxlbSAmJiAhaXNFbXB0eURhdGFPYmplY3Qo
IGVsZW0gKTsKLSAgICB9LAotCi0gICAgZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEg
KSB7Ci0gICAgcmV0dXJuIGludGVybmFsRGF0YSggZWxlbSwgbmFtZSwgZGF0YSApOwotICAgIH0s
Ci0KLSAgICByZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKLSAgICByZXR1cm4g
aW50ZXJuYWxSZW1vdmVEYXRhKCBlbGVtLCBuYW1lICk7Ci0gICAgfSwKLQotICAgIC8vIEZvciBp
bnRlcm5hbCB1c2Ugb25seS4KLSAgICBfZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEg
KSB7Ci0gICAgcmV0dXJuIGludGVybmFsRGF0YSggZWxlbSwgbmFtZSwgZGF0YSwgdHJ1ZSApOwot
ICAgIH0sCi0KLSAgICBfcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7Ci0gICAg
cmV0dXJuIGludGVybmFsUmVtb3ZlRGF0YSggZWxlbSwgbmFtZSwgdHJ1ZSApOwotICAgIH0sCi0K
LSAgICAvLyBBIG1ldGhvZCBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBET00gbm9kZSBjYW4gaGFuZGxl
IHRoZSBkYXRhIGV4cGFuZG8KLSAgICBhY2NlcHREYXRhOiBmdW5jdGlvbiggZWxlbSApIHsKLSAg
ICAvLyBEbyBub3Qgc2V0IGRhdGEgb24gbm9uLWVsZW1lbnQgYmVjYXVzZSBpdCB3aWxsIG5vdCBi
ZSBjbGVhcmVkICgjODMzNSkuCi0gICAgaWYgKCBlbGVtLm5vZGVUeXBlICYmIGVsZW0ubm9kZVR5
cGUgIT09IDEgJiYgZWxlbS5ub2RlVHlwZSAhPT0gOSApIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgdmFyIG5vRGF0YSA9IGVsZW0ubm9kZU5hbWUgJiYgalF1ZXJ5Lm5vRGF0YVsg
ZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07Ci0KLSAgICAvLyBub2RlcyBhY2NlcHQgZGF0
YSB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZDsgcmVqZWN0aW9uIGNhbiBiZSBjb25kaXRpb25h
bAotICAgIHJldHVybiAhbm9EYXRhIHx8IG5vRGF0YSAhPT0gdHJ1ZSAmJiBlbGVtLmdldEF0dHJp
YnV0ZSgiY2xhc3NpZCIpID09PSBub0RhdGE7Ci0gICAgfQotfSk7Ci0KLWpRdWVyeS5mbi5leHRl
bmQoewotICAgIGRhdGE6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgewotICAgIHZhciBhdHRycywg
bmFtZSwKLSAgICBlbGVtID0gdGhpc1swXSwKLSAgICBpID0gMCwKLSAgICBkYXRhID0gbnVsbDsK
LQotICAgIC8vIEdldHMgYWxsIHZhbHVlcwotICAgIGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7
Ci0gICAgaWYgKCB0aGlzLmxlbmd0aCApIHsKLSAgICBkYXRhID0galF1ZXJ5LmRhdGEoIGVsZW0g
KTsKLQotICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAhalF1ZXJ5Ll9kYXRhKCBlbGVt
LCAicGFyc2VkQXR0cnMiICkgKSB7Ci0gICAgYXR0cnMgPSBlbGVtLmF0dHJpYnV0ZXM7Ci0gICAg
Zm9yICggOyBpIDwgYXR0cnMubGVuZ3RoOyBpKysgKSB7Ci0gICAgbmFtZSA9IGF0dHJzW2ldLm5h
bWU7Ci0KLSAgICBpZiAoICFuYW1lLmluZGV4T2YoICJkYXRhLSIgKSApIHsKLSAgICBuYW1lID0g
alF1ZXJ5LmNhbWVsQ2FzZSggbmFtZS5zbGljZSg1KSApOwotCi0gICAgZGF0YUF0dHIoIGVsZW0s
IG5hbWUsIGRhdGFbIG5hbWUgXSApOwotICAgIH0KLSAgICB9Ci0gICAgalF1ZXJ5Ll9kYXRhKCBl
bGVtLCAicGFyc2VkQXR0cnMiLCB0cnVlICk7Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiBk
YXRhOwotICAgIH0KLQotICAgIC8vIFNldHMgbXVsdGlwbGUgdmFsdWVzCi0gICAgaWYgKCB0eXBl
b2Yga2V5ID09PSAib2JqZWN0IiApIHsKLSAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkg
ewotICAgIGpRdWVyeS5kYXRhKCB0aGlzLCBrZXkgKTsKLSAgICB9KTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkgewotCi0gICAgaWYg
KCB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgewotICAgIC8vIFRyeSB0byBmZXRjaCBhbnkgaW50ZXJu
YWxseSBzdG9yZWQgZGF0YSBmaXJzdAotICAgIHJldHVybiBlbGVtID8gZGF0YUF0dHIoIGVsZW0s
IGtleSwgalF1ZXJ5LmRhdGEoIGVsZW0sIGtleSApICkgOiBudWxsOwotICAgIH0KLQotICAgIHRo
aXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICBqUXVlcnkuZGF0YSggdGhpcywga2V5LCB2YWx1ZSAp
OwotICAgIH0pOwotICAgIH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVs
bCwgdHJ1ZSApOwotICAgIH0sCi0KLSAgICByZW1vdmVEYXRhOiBmdW5jdGlvbigga2V5ICkgewot
ICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgalF1ZXJ5LnJlbW92ZURhdGEo
IHRoaXMsIGtleSApOwotICAgIH0pOwotICAgIH0KLX0pOwotCi1mdW5jdGlvbiBkYXRhQXR0cigg
ZWxlbSwga2V5LCBkYXRhICkgewotICAgIC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGludGVybmFs
bHksIHRyeSB0byBmZXRjaCBhbnkKLSAgICAvLyBkYXRhIGZyb20gdGhlIEhUTUw1IGRhdGEtKiBh
dHRyaWJ1dGUKLSAgICBpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09
PSAxICkgewotCi0gICAgdmFyIG5hbWUgPSAiZGF0YS0iICsga2V5LnJlcGxhY2UoIHJtdWx0aURh
c2gsICItJDEiICkudG9Mb3dlckNhc2UoKTsKLQotICAgIGRhdGEgPSBlbGVtLmdldEF0dHJpYnV0
ZSggbmFtZSApOwotCi0gICAgaWYgKCB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIgKSB7Ci0gICAg
dHJ5IHsKLSAgICBkYXRhID0gZGF0YSA9PT0gInRydWUiID8gdHJ1ZSA6Ci0gICAgZGF0YSA9PT0g
ImZhbHNlIiA/IGZhbHNlIDoKLSAgICBkYXRhID09PSAibnVsbCIgPyBudWxsIDoKLSAgICAvLyBP
bmx5IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZwot
ICAgICtkYXRhICsgIiIgPT09IGRhdGEgPyArZGF0YSA6Ci0gICAgcmJyYWNlLnRlc3QoIGRhdGEg
KSA/IGpRdWVyeS5wYXJzZUpTT04oIGRhdGEgKSA6Ci0gICAgZGF0YTsKLSAgICB9IGNhdGNoKCBl
ICkge30KLQotICAgIC8vIE1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGRhdGEgc28gaXQgaXNuJ3QgY2hh
bmdlZCBsYXRlcgotICAgIGpRdWVyeS5kYXRhKCBlbGVtLCBrZXksIGRhdGEgKTsKLQotICAgIH0g
ZWxzZSB7Ci0gICAgZGF0YSA9IHVuZGVmaW5lZDsKLSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IGRhdGE7Ci19Ci0KLS8vIGNoZWNrcyBhIGNhY2hlIG9iamVjdCBmb3IgZW1wdGluZXNzCi1mdW5j
dGlvbiBpc0VtcHR5RGF0YU9iamVjdCggb2JqICkgewotICAgIHZhciBuYW1lOwotICAgIGZvciAo
IG5hbWUgaW4gb2JqICkgewotCi0gICAgLy8gaWYgdGhlIHB1YmxpYyBkYXRhIG9iamVjdCBpcyBl
bXB0eSwgdGhlIHByaXZhdGUgaXMgc3RpbGwgZW1wdHkKLSAgICBpZiAoIG5hbWUgPT09ICJkYXRh
IiAmJiBqUXVlcnkuaXNFbXB0eU9iamVjdCggb2JqW25hbWVdICkgKSB7Ci0gICAgY29udGludWU7
Ci0gICAgfQotICAgIGlmICggbmFtZSAhPT0gInRvSlNPTiIgKSB7Ci0gICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLWpRdWVyeS5leHRlbmQoewot
ICAgIHF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSwgZGF0YSApIHsKLSAgICB2YXIgcXVldWU7
Ci0KLSAgICBpZiAoIGVsZW0gKSB7Ci0gICAgdHlwZSA9ICggdHlwZSB8fCAiZngiICkgKyAicXVl
dWUiOwotICAgIHF1ZXVlID0galF1ZXJ5Ll9kYXRhKCBlbGVtLCB0eXBlICk7Ci0KLSAgICAvLyBT
cGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEg
bG9va3VwCi0gICAgaWYgKCBkYXRhICkgewotICAgIGlmICggIXF1ZXVlIHx8IGpRdWVyeS5pc0Fy
cmF5KGRhdGEpICkgewotICAgIHF1ZXVlID0galF1ZXJ5Ll9kYXRhKCBlbGVtLCB0eXBlLCBqUXVl
cnkubWFrZUFycmF5KGRhdGEpICk7Ci0gICAgfSBlbHNlIHsKLSAgICBxdWV1ZS5wdXNoKCBkYXRh
ICk7Ci0gICAgfQotICAgIH0KLSAgICByZXR1cm4gcXVldWUgfHwgW107Ci0gICAgfQotICAgIH0s
Ci0KLSAgICBkZXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHsKLSAgICB0eXBlID0gdHlw
ZSB8fCAiZngiOwotCi0gICAgdmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCBlbGVtLCB0eXBlICks
Ci0gICAgc3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsCi0gICAgZm4gPSBxdWV1ZS5zaGlmdCgp
LAotICAgIGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCB0eXBlICksCi0gICAgbmV4
dCA9IGZ1bmN0aW9uKCkgewotICAgIGpRdWVyeS5kZXF1ZXVlKCBlbGVtLCB0eXBlICk7Ci0gICAg
fTsKLQotICAgIC8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0
aGUgcHJvZ3Jlc3Mgc2VudGluZWwKLSAgICBpZiAoIGZuID09PSAiaW5wcm9ncmVzcyIgKSB7Ci0g
ICAgZm4gPSBxdWV1ZS5zaGlmdCgpOwotICAgIHN0YXJ0TGVuZ3RoLS07Ci0gICAgfQotCi0gICAg
aG9va3MuY3VyID0gZm47Ci0gICAgaWYgKCBmbiApIHsKLQotICAgIC8vIEFkZCBhIHByb2dyZXNz
IHNlbnRpbmVsIHRvIHByZXZlbnQgdGhlIGZ4IHF1ZXVlIGZyb20gYmVpbmcKLSAgICAvLyBhdXRv
bWF0aWNhbGx5IGRlcXVldWVkCi0gICAgaWYgKCB0eXBlID09PSAiZngiICkgewotICAgIHF1ZXVl
LnVuc2hpZnQoICJpbnByb2dyZXNzIiApOwotICAgIH0KLQotICAgIC8vIGNsZWFyIHVwIHRoZSBs
YXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb24KLSAgICBkZWxldGUgaG9va3Muc3RvcDsKLSAgICBmbi5j
YWxsKCBlbGVtLCBuZXh0LCBob29rcyApOwotICAgIH0KLQotICAgIGlmICggIXN0YXJ0TGVuZ3Ro
ICYmIGhvb2tzICkgewotICAgIGhvb2tzLmVtcHR5LmZpcmUoKTsKLSAgICB9Ci0gICAgfSwKLQot
ICAgIC8vIG5vdCBpbnRlbmRlZCBmb3IgcHVibGljIGNvbnN1bXB0aW9uIC0gZ2VuZXJhdGVzIGEg
cXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybnMgdGhlIGN1cnJlbnQgb25lCi0gICAgX3F1ZXVl
SG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkgewotICAgIHZhciBrZXkgPSB0eXBlICsgInF1
ZXVlSG9va3MiOwotICAgIHJldHVybiBqUXVlcnkuX2RhdGEoIGVsZW0sIGtleSApIHx8IGpRdWVy
eS5fZGF0YSggZWxlbSwga2V5LCB7Ci0gICAgZW1wdHk6IGpRdWVyeS5DYWxsYmFja3MoIm9uY2Ug
bWVtb3J5IikuYWRkKGZ1bmN0aW9uKCkgewotICAgIGpRdWVyeS5fcmVtb3ZlRGF0YSggZWxlbSwg
dHlwZSArICJxdWV1ZSIgKTsKLSAgICBqUXVlcnkuX3JlbW92ZURhdGEoIGVsZW0sIGtleSApOwot
ICAgIH0pCi0gICAgfSk7Ci0gICAgfQotfSk7Ci0KLWpRdWVyeS5mbi5leHRlbmQoewotICAgIHF1
ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHsKLSAgICB2YXIgc2V0dGVyID0gMjsKLQotICAg
IGlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmciICkgewotICAgIGRhdGEgPSB0eXBlOwotICAg
IHR5cGUgPSAiZngiOwotICAgIHNldHRlci0tOwotICAgIH0KLQotICAgIGlmICggYXJndW1lbnRz
Lmxlbmd0aCA8IHNldHRlciApIHsKLSAgICByZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWzBdLCB0
eXBlICk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRhdGEgPT09IHVuZGVmaW5lZCA/Ci0gICAgdGhp
cyA6Ci0gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgIHZhciBxdWV1ZSA9IGpRdWVyeS5x
dWV1ZSggdGhpcywgdHlwZSwgZGF0YSApOwotCi0gICAgLy8gZW5zdXJlIGEgaG9va3MgZm9yIHRo
aXMgcXVldWUKLSAgICBqUXVlcnkuX3F1ZXVlSG9va3MoIHRoaXMsIHR5cGUgKTsKLQotICAgIGlm
ICggdHlwZSA9PT0gImZ4IiAmJiBxdWV1ZVswXSAhPT0gImlucHJvZ3Jlc3MiICkgewotICAgIGpR
dWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7Ci0gICAgfQotICAgIH0pOwotICAgIH0sCi0gICAg
ZGVxdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7Ci0gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlv
bigpIHsKLSAgICBqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApOwotICAgIH0pOwotICAgIH0s
Ci0gICAgLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBw
ZXJtaXNzaW9uLgotICAgIC8vIGh0dHA6Ly9ibGluZHNpZ25hbHMuY29tL2luZGV4LnBocC8yMDA5
LzA3L2pxdWVyeS1kZWxheS8KLSAgICBkZWxheTogZnVuY3Rpb24oIHRpbWUsIHR5cGUgKSB7Ci0g
ICAgdGltZSA9IGpRdWVyeS5meCA/IGpRdWVyeS5meC5zcGVlZHNbIHRpbWUgXSB8fCB0aW1lIDog
dGltZTsKLSAgICB0eXBlID0gdHlwZSB8fCAiZngiOwotCi0gICAgcmV0dXJuIHRoaXMucXVldWUo
IHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHsKLSAgICB2YXIgdGltZW91dCA9IHNldFRp
bWVvdXQoIG5leHQsIHRpbWUgKTsKLSAgICBob29rcy5zdG9wID0gZnVuY3Rpb24oKSB7Ci0gICAg
Y2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7Ci0gICAgfTsKLSAgICB9KTsKLSAgICB9LAotICAgIGNs
ZWFyUXVldWU6IGZ1bmN0aW9uKCB0eXBlICkgewotICAgIHJldHVybiB0aGlzLnF1ZXVlKCB0eXBl
IHx8ICJmeCIsIFtdICk7Ci0gICAgfSwKLSAgICAvLyBHZXQgYSBwcm9taXNlIHJlc29sdmVkIHdo
ZW4gcXVldWVzIG9mIGEgY2VydGFpbiB0eXBlCi0gICAgLy8gYXJlIGVtcHRpZWQgKGZ4IGlzIHRo
ZSB0eXBlIGJ5IGRlZmF1bHQpCi0gICAgcHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiApIHsK
LSAgICB2YXIgdG1wLAotICAgIGNvdW50ID0gMSwKLSAgICBkZWZlciA9IGpRdWVyeS5EZWZlcnJl
ZCgpLAotICAgIGVsZW1lbnRzID0gdGhpcywKLSAgICBpID0gdGhpcy5sZW5ndGgsCi0gICAgcmVz
b2x2ZSA9IGZ1bmN0aW9uKCkgewotICAgIGlmICggISggLS1jb3VudCApICkgewotICAgIGRlZmVy
LnJlc29sdmVXaXRoKCBlbGVtZW50cywgWyBlbGVtZW50cyBdICk7Ci0gICAgfQotICAgIH07Ci0K
LSAgICBpZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiApIHsKLSAgICBvYmogPSB0eXBlOwot
ICAgIHR5cGUgPSB1bmRlZmluZWQ7Ci0gICAgfQotICAgIHR5cGUgPSB0eXBlIHx8ICJmeCI7Ci0K
LSAgICB3aGlsZSggaS0tICkgewotICAgIHRtcCA9IGpRdWVyeS5fZGF0YSggZWxlbWVudHNbIGkg
XSwgdHlwZSArICJxdWV1ZUhvb2tzIiApOwotICAgIGlmICggdG1wICYmIHRtcC5lbXB0eSApIHsK
LSAgICBjb3VudCsrOwotICAgIHRtcC5lbXB0eS5hZGQoIHJlc29sdmUgKTsKLSAgICB9Ci0gICAg
fQotICAgIHJlc29sdmUoKTsKLSAgICByZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7Ci0gICAg
fQotfSk7Ci12YXIgbm9kZUhvb2ssIGJvb2xIb29rLAotICAgIHJjbGFzcyA9IC9bXHRcclxuXS9n
LAotICAgIHJyZXR1cm4gPSAvXHIvZywKLSAgICByZm9jdXNhYmxlID0gL14oPzppbnB1dHxzZWxl
Y3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdCkkL2ksCi0gICAgcmNsaWNrYWJsZSA9IC9eKD86YXxh
cmVhKSQvaSwKLSAgICByYm9vbGVhbiA9IC9eKD86Y2hlY2tlZHxzZWxlY3RlZHxhdXRvZm9jdXN8
YXV0b3BsYXl8YXN5bmN8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGxvb3B8bXVsdGlw
bGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQpJC9pLAotICAgIHJ1c2VEZWZhdWx0ID0g
L14oPzpjaGVja2VkfHNlbGVjdGVkKSQvaSwKLSAgICBnZXRTZXRBdHRyaWJ1dGUgPSBqUXVlcnku
c3VwcG9ydC5nZXRTZXRBdHRyaWJ1dGUsCi0gICAgZ2V0U2V0SW5wdXQgPSBqUXVlcnkuc3VwcG9y
dC5pbnB1dDsKLQotalF1ZXJ5LmZuLmV4dGVuZCh7Ci0gICAgYXR0cjogZnVuY3Rpb24oIG5hbWUs
IHZhbHVlICkgewotICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwg
bmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7Ci0gICAgfSwKLQotICAgIHJlbW92
ZUF0dHI6IGZ1bmN0aW9uKCBuYW1lICkgewotICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24o
KSB7Ci0gICAgalF1ZXJ5LnJlbW92ZUF0dHIoIHRoaXMsIG5hbWUgKTsKLSAgICB9KTsKLSAgICB9
LAotCi0gICAgcHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgewotICAgIHJldHVybiBqUXVl
cnkuYWNjZXNzKCB0aGlzLCBqUXVlcnkucHJvcCwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5n
dGggPiAxICk7Ci0gICAgfSwKLQotICAgIHJlbW92ZVByb3A6IGZ1bmN0aW9uKCBuYW1lICkgewot
ICAgIG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7Ci0gICAgcmV0dXJuIHRo
aXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICAvLyB0cnkvY2F0Y2ggaGFuZGxlcyBjYXNlcyB3aGVy
ZSBJRSBiYWxrcyAoc3VjaCBhcyByZW1vdmluZyBhIHByb3BlcnR5IG9uIHdpbmRvdykKLSAgICB0
cnkgewotICAgIHRoaXNbIG5hbWUgXSA9IHVuZGVmaW5lZDsKLSAgICBkZWxldGUgdGhpc1sgbmFt
ZSBdOwotICAgIH0gY2F0Y2goIGUgKSB7fQotICAgIH0pOwotICAgIH0sCi0KLSAgICBhZGRDbGFz
czogZnVuY3Rpb24oIHZhbHVlICkgewotICAgIHZhciBjbGFzc2VzLCBlbGVtLCBjdXIsIGNsYXp6
LCBqLAotICAgIGkgPSAwLAotICAgIGxlbiA9IHRoaXMubGVuZ3RoLAotICAgIHByb2NlZWQgPSB0
eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICYmIHZhbHVlOwotCi0gICAgaWYgKCBqUXVlcnkuaXNG
dW5jdGlvbiggdmFsdWUgKSApIHsKLSAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBqICkg
ewotICAgIGpRdWVyeSggdGhpcyApLmFkZENsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCB0aGlz
LmNsYXNzTmFtZSApICk7Ci0gICAgfSk7Ci0gICAgfQotCi0gICAgaWYgKCBwcm9jZWVkICkgewot
ICAgIC8vIFRoZSBkaXNqdW5jdGlvbiBoZXJlIGlzIGZvciBiZXR0ZXIgY29tcHJlc3NpYmlsaXR5
IChzZWUgcmVtb3ZlQ2xhc3MpCi0gICAgY2xhc3NlcyA9ICggdmFsdWUgfHwgIiIgKS5tYXRjaCgg
Y29yZV9ybm90d2hpdGUgKSB8fCBbXTsKLQotICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgewot
ICAgIGVsZW0gPSB0aGlzWyBpIF07Ci0gICAgY3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAo
IGVsZW0uY2xhc3NOYW1lID8KLSAgICAoICIgIiArIGVsZW0uY2xhc3NOYW1lICsgIiAiICkucmVw
bGFjZSggcmNsYXNzLCAiICIgKSA6Ci0gICAgIiAiCi0gICAgKTsKLQotICAgIGlmICggY3VyICkg
ewotICAgIGogPSAwOwotICAgIHdoaWxlICggKGNsYXp6ID0gY2xhc3Nlc1tqKytdKSApIHsKLSAg
ICBpZiAoIGN1ci5pbmRleE9mKCAiICIgKyBjbGF6eiArICIgIiApIDwgMCApIHsKLSAgICBjdXIg
Kz0gY2xhenogKyAiICI7Ci0gICAgfQotICAgIH0KLSAgICBlbGVtLmNsYXNzTmFtZSA9IGpRdWVy
eS50cmltKCBjdXIgKTsKLQotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRoaXM7
Ci0gICAgfSwKLQotICAgIHJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7Ci0gICAgdmFy
IGNsYXNzZXMsIGVsZW0sIGN1ciwgY2xhenosIGosCi0gICAgaSA9IDAsCi0gICAgbGVuID0gdGhp
cy5sZW5ndGgsCi0gICAgcHJvY2VlZCA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDAgfHwgdHlwZW9m
IHZhbHVlID09PSAic3RyaW5nIiAmJiB2YWx1ZTsKLQotICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rp
b24oIHZhbHVlICkgKSB7Ci0gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaiApIHsKLSAg
ICBqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgdGhpcy5j
bGFzc05hbWUgKSApOwotICAgIH0pOwotICAgIH0KLSAgICBpZiAoIHByb2NlZWQgKSB7Ci0gICAg
Y2xhc3NlcyA9ICggdmFsdWUgfHwgIiIgKS5tYXRjaCggY29yZV9ybm90d2hpdGUgKSB8fCBbXTsK
LQotICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgewotICAgIGVsZW0gPSB0aGlzWyBpIF07Ci0g
ICAgLy8gVGhpcyBleHByZXNzaW9uIGlzIGhlcmUgZm9yIGJldHRlciBjb21wcmVzc2liaWxpdHkg
KHNlZSBhZGRDbGFzcykKLSAgICBjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggZWxlbS5j
bGFzc05hbWUgPwotICAgICggIiAiICsgZWxlbS5jbGFzc05hbWUgKyAiICIgKS5yZXBsYWNlKCBy
Y2xhc3MsICIgIiApIDoKLSAgICAiIgotICAgICk7Ci0KLSAgICBpZiAoIGN1ciApIHsKLSAgICBq
ID0gMDsKLSAgICB3aGlsZSAoIChjbGF6eiA9IGNsYXNzZXNbaisrXSkgKSB7Ci0gICAgLy8gUmVt
b3ZlICphbGwqIGluc3RhbmNlcwotICAgIHdoaWxlICggY3VyLmluZGV4T2YoICIgIiArIGNsYXp6
ICsgIiAiICkgPj0gMCApIHsKLSAgICBjdXIgPSBjdXIucmVwbGFjZSggIiAiICsgY2xhenogKyAi
ICIsICIgIiApOwotICAgIH0KLSAgICB9Ci0gICAgZWxlbS5jbGFzc05hbWUgPSB2YWx1ZSA/IGpR
dWVyeS50cmltKCBjdXIgKSA6ICIiOwotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRoaXM7Ci0gICAgfSwKLQotICAgIHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRl
VmFsICkgewotICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlLAotICAgIGlzQm9vbCA9IHR5cGVv
ZiBzdGF0ZVZhbCA9PT0gImJvb2xlYW4iOwotCi0gICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbigg
dmFsdWUgKSApIHsKLSAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkgewotICAgIGpR
dWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKCB2YWx1ZS5jYWxsKHRoaXMsIGksIHRoaXMuY2xhc3NO
YW1lLCBzdGF0ZVZhbCksIHN0YXRlVmFsICk7Ci0gICAgfSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICBpZiAoIHR5cGUgPT09ICJzdHJpbmciICkgewot
ICAgIC8vIHRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzCi0gICAgdmFyIGNsYXNzTmFtZSwK
LSAgICBpID0gMCwKLSAgICBzZWxmID0galF1ZXJ5KCB0aGlzICksCi0gICAgc3RhdGUgPSBzdGF0
ZVZhbCwKLSAgICBjbGFzc05hbWVzID0gdmFsdWUubWF0Y2goIGNvcmVfcm5vdHdoaXRlICkgfHwg
W107Ci0KLSAgICB3aGlsZSAoIChjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBpKysgXSkgKSB7Ci0g
ICAgLy8gY2hlY2sgZWFjaCBjbGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGFyYXRlZCBsaXN0Ci0g
ICAgc3RhdGUgPSBpc0Jvb2wgPyBzdGF0ZSA6ICFzZWxmLmhhc0NsYXNzKCBjbGFzc05hbWUgKTsK
LSAgICBzZWxmWyBzdGF0ZSA/ICJhZGRDbGFzcyIgOiAicmVtb3ZlQ2xhc3MiIF0oIGNsYXNzTmFt
ZSApOwotICAgIH0KLQotICAgIC8vIFRvZ2dsZSB3aG9sZSBjbGFzcyBuYW1lCi0gICAgfSBlbHNl
IGlmICggdHlwZSA9PT0gY29yZV9zdHJ1bmRlZmluZWQgfHwgdHlwZSA9PT0gImJvb2xlYW4iICkg
ewotICAgIGlmICggdGhpcy5jbGFzc05hbWUgKSB7Ci0gICAgLy8gc3RvcmUgY2xhc3NOYW1lIGlm
IHNldAotICAgIGpRdWVyeS5fZGF0YSggdGhpcywgIl9fY2xhc3NOYW1lX18iLCB0aGlzLmNsYXNz
TmFtZSApOwotICAgIH0KLQotICAgIC8vIElmIHRoZSBlbGVtZW50IGhhcyBhIGNsYXNzIG5hbWUg
b3IgaWYgd2UncmUgcGFzc2VkICJmYWxzZSIsCi0gICAgLy8gdGhlbiByZW1vdmUgdGhlIHdob2xl
IGNsYXNzbmFtZSAoaWYgdGhlcmUgd2FzIG9uZSwgdGhlIGFib3ZlIHNhdmVkIGl0KS4KLSAgICAv
LyBPdGhlcndpc2UgYnJpbmcgYmFjayB3aGF0ZXZlciB3YXMgcHJldmlvdXNseSBzYXZlZCAoaWYg
YW55dGhpbmcpLAotICAgIC8vIGZhbGxpbmcgYmFjayB0byB0aGUgZW1wdHkgc3RyaW5nIGlmIG5v
dGhpbmcgd2FzIHN0b3JlZC4KLSAgICB0aGlzLmNsYXNzTmFtZSA9IHRoaXMuY2xhc3NOYW1lIHx8
IHZhbHVlID09PSBmYWxzZSA/ICIiIDogalF1ZXJ5Ll9kYXRhKCB0aGlzLCAiX19jbGFzc05hbWVf
XyIgKSB8fCAiIjsKLSAgICB9Ci0gICAgfSk7Ci0gICAgfSwKLQotICAgIGhhc0NsYXNzOiBmdW5j
dGlvbiggc2VsZWN0b3IgKSB7Ci0gICAgdmFyIGNsYXNzTmFtZSA9ICIgIiArIHNlbGVjdG9yICsg
IiAiLAotICAgIGkgPSAwLAotICAgIGwgPSB0aGlzLmxlbmd0aDsKLSAgICBmb3IgKCA7IGkgPCBs
OyBpKysgKSB7Ci0gICAgaWYgKCB0aGlzW2ldLm5vZGVUeXBlID09PSAxICYmICgiICIgKyB0aGlz
W2ldLmNsYXNzTmFtZSArICIgIikucmVwbGFjZShyY2xhc3MsICIgIikuaW5kZXhPZiggY2xhc3NO
YW1lICkgPj0gMCApIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotICAgIH0sCi0KLSAgICB2YWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAgICB2
YXIgcmV0LCBob29rcywgaXNGdW5jdGlvbiwKLSAgICBlbGVtID0gdGhpc1swXTsKLQotICAgIGlm
ICggIWFyZ3VtZW50cy5sZW5ndGggKSB7Ci0gICAgaWYgKCBlbGVtICkgewotICAgIGhvb2tzID0g
alF1ZXJ5LnZhbEhvb2tzWyBlbGVtLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9k
ZU5hbWUudG9Mb3dlckNhc2UoKSBdOwotCi0gICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29r
cyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCAidmFsdWUiICkpICE9PSB1bmRlZmluZWQgKSB7
Ci0gICAgcmV0dXJuIHJldDsKLSAgICB9Ci0KLSAgICByZXQgPSBlbGVtLnZhbHVlOwotCi0gICAg
cmV0dXJuIHR5cGVvZiByZXQgPT09ICJzdHJpbmciID8KLSAgICAvLyBoYW5kbGUgbW9zdCBjb21t
b24gc3RyaW5nIGNhc2VzCi0gICAgcmV0LnJlcGxhY2UocnJldHVybiwgIiIpIDoKLSAgICAvLyBo
YW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXIKLSAgICByZXQg
PT0gbnVsbCA/ICIiIDogcmV0OwotICAgIH0KLQotICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
c0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICk7Ci0KLSAgICByZXR1cm4gdGhp
cy5lYWNoKGZ1bmN0aW9uKCBpICkgewotICAgIHZhciB2YWwsCi0gICAgc2VsZiA9IGpRdWVyeSh0
aGlzKTsKLQotICAgIGlmICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHsKLSAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKCBpc0Z1bmN0aW9uICkgewotICAgIHZhbCA9IHZhbHVlLmNhbGwoIHRo
aXMsIGksIHNlbGYudmFsKCkgKTsKLSAgICB9IGVsc2UgewotICAgIHZhbCA9IHZhbHVlOwotICAg
IH0KLQotICAgIC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzICIiOyBjb252ZXJ0IG51bWJlcnMg
dG8gc3RyaW5nCi0gICAgaWYgKCB2YWwgPT0gbnVsbCApIHsKLSAgICB2YWwgPSAiIjsKLSAgICB9
IGVsc2UgaWYgKCB0eXBlb2YgdmFsID09PSAibnVtYmVyIiApIHsKLSAgICB2YWwgKz0gIiI7Ci0g
ICAgfSBlbHNlIGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbCApICkgewotICAgIHZhbCA9IGpRdWVy
eS5tYXAodmFsLCBmdW5jdGlvbiAoIHZhbHVlICkgewotICAgIHJldHVybiB2YWx1ZSA9PSBudWxs
ID8gIiIgOiB2YWx1ZSArICIiOwotICAgIH0pOwotICAgIH0KLQotICAgIGhvb2tzID0galF1ZXJ5
LnZhbEhvb2tzWyB0aGlzLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIHRoaXMubm9kZU5hbWUu
dG9Mb3dlckNhc2UoKSBdOwotCi0gICAgLy8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxs
IGJhY2sgdG8gbm9ybWFsIHNldHRpbmcKLSAgICBpZiAoICFob29rcyB8fCAhKCJzZXQiIGluIGhv
b2tzKSB8fCBob29rcy5zZXQoIHRoaXMsIHZhbCwgInZhbHVlIiApID09PSB1bmRlZmluZWQgKSB7
Ci0gICAgdGhpcy52YWx1ZSA9IHZhbDsKLSAgICB9Ci0gICAgfSk7Ci0gICAgfQotfSk7Ci0KLWpR
dWVyeS5leHRlbmQoewotICAgIHZhbEhvb2tzOiB7Ci0gICAgb3B0aW9uOiB7Ci0gICAgZ2V0OiBm
dW5jdGlvbiggZWxlbSApIHsKLSAgICAvLyBhdHRyaWJ1dGVzLnZhbHVlIGlzIHVuZGVmaW5lZCBp
biBCbGFja2JlcnJ5IDQuNyBidXQKLSAgICAvLyB1c2VzIC52YWx1ZS4gU2VlICM2OTMyCi0gICAg
dmFyIHZhbCA9IGVsZW0uYXR0cmlidXRlcy52YWx1ZTsKLSAgICByZXR1cm4gIXZhbCB8fCB2YWwu
c3BlY2lmaWVkID8gZWxlbS52YWx1ZSA6IGVsZW0udGV4dDsKLSAgICB9Ci0gICAgfSwKLSAgICBz
ZWxlY3Q6IHsKLSAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHZhciB2YWx1ZSwgb3B0
aW9uLAotICAgIG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsCi0gICAgaW5kZXggPSBlbGVtLnNlbGVj
dGVkSW5kZXgsCi0gICAgb25lID0gZWxlbS50eXBlID09PSAic2VsZWN0LW9uZSIgfHwgaW5kZXgg
PCAwLAotICAgIHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSwKLSAgICBtYXggPSBvbmUgPyBpbmRl
eCArIDEgOiBvcHRpb25zLmxlbmd0aCwKLSAgICBpID0gaW5kZXggPCAwID8KLSAgICBtYXggOgot
ICAgIG9uZSA/IGluZGV4IDogMDsKLQotICAgIC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVj
dGVkIG9wdGlvbnMKLSAgICBmb3IgKCA7IGkgPCBtYXg7IGkrKyApIHsKLSAgICBvcHRpb24gPSBv
cHRpb25zWyBpIF07Ci0KLSAgICAvLyBvbGRJRSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRl
ciBmb3JtIHJlc2V0ICgjMjU1MSkKLSAgICBpZiAoICggb3B0aW9uLnNlbGVjdGVkIHx8IGkgPT09
IGluZGV4ICkgJiYKLSAgICAvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxl
ZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwCi0gICAgKCBqUXVlcnkuc3VwcG9ydC5vcHREaXNh
YmxlZCA/ICFvcHRpb24uZGlzYWJsZWQgOiBvcHRpb24uZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIp
ID09PSBudWxsICkgJiYKLSAgICAoICFvcHRpb24ucGFyZW50Tm9kZS5kaXNhYmxlZCB8fCAhalF1
ZXJ5Lm5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwgIm9wdGdyb3VwIiApICkgKSB7Ci0KLSAg
ICAvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uCi0gICAgdmFsdWUgPSBq
UXVlcnkoIG9wdGlvbiApLnZhbCgpOwotCi0gICAgLy8gV2UgZG9uJ3QgbmVlZCBhbiBhcnJheSBm
b3Igb25lIHNlbGVjdHMKLSAgICBpZiAoIG9uZSApIHsKLSAgICByZXR1cm4gdmFsdWU7Ci0gICAg
fQotCi0gICAgLy8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXkKLSAgICB2YWx1ZXMucHVz
aCggdmFsdWUgKTsKLSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbHVlczsKLSAgICB9LAot
Ci0gICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7Ci0gICAgdmFyIHZhbHVlcyA9IGpR
dWVyeS5tYWtlQXJyYXkoIHZhbHVlICk7Ci0KLSAgICBqUXVlcnkoZWxlbSkuZmluZCgib3B0aW9u
IikuZWFjaChmdW5jdGlvbigpIHsKLSAgICB0aGlzLnNlbGVjdGVkID0galF1ZXJ5LmluQXJyYXko
IGpRdWVyeSh0aGlzKS52YWwoKSwgdmFsdWVzICkgPj0gMDsKLSAgICB9KTsKLQotICAgIGlmICgg
IXZhbHVlcy5sZW5ndGggKSB7Ci0gICAgZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7Ci0gICAgfQot
ICAgIHJldHVybiB2YWx1ZXM7Ci0gICAgfQotICAgIH0KLSAgICB9LAotCi0gICAgYXR0cjogZnVu
Y3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkgewotICAgIHZhciBob29rcywgbm90eG1sLCByZXQs
Ci0gICAgblR5cGUgPSBlbGVtLm5vZGVUeXBlOwotCi0gICAgLy8gZG9uJ3QgZ2V0L3NldCBhdHRy
aWJ1dGVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2RlcwotICAgIGlmICggIWVs
ZW0gfHwgblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7Ci0gICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1dGVz
IGFyZSBub3Qgc3VwcG9ydGVkCi0gICAgaWYgKCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgPT09
IGNvcmVfc3RydW5kZWZpbmVkICkgewotICAgIHJldHVybiBqUXVlcnkucHJvcCggZWxlbSwgbmFt
ZSwgdmFsdWUgKTsKLSAgICB9Ci0KLSAgICBub3R4bWwgPSBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5
LmlzWE1MRG9jKCBlbGVtICk7Ci0KLSAgICAvLyBBbGwgYXR0cmlidXRlcyBhcmUgbG93ZXJjYXNl
Ci0gICAgLy8gR3JhYiBuZWNlc3NhcnkgaG9vayBpZiBvbmUgaXMgZGVmaW5lZAotICAgIGlmICgg
bm90eG1sICkgewotICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7Ci0gICAgaG9va3MgPSBq
UXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0gfHwgKCByYm9vbGVhbi50ZXN0KCBuYW1lICkgPyBib29s
SG9vayA6IG5vZGVIb29rICk7Ci0gICAgfQotCi0gICAgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVk
ICkgewotCi0gICAgaWYgKCB2YWx1ZSA9PT0gbnVsbCApIHsKLSAgICBqUXVlcnkucmVtb3ZlQXR0
ciggZWxlbSwgbmFtZSApOwotCi0gICAgfSBlbHNlIGlmICggaG9va3MgJiYgbm90eG1sICYmICJz
ZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkpICE9
PSB1bmRlZmluZWQgKSB7Ci0gICAgcmV0dXJuIHJldDsKLQotICAgIH0gZWxzZSB7Ci0gICAgZWxl
bS5zZXRBdHRyaWJ1dGUoIG5hbWUsIHZhbHVlICsgIiIgKTsKLSAgICByZXR1cm4gdmFsdWU7Ci0g
ICAgfQotCi0gICAgfSBlbHNlIGlmICggaG9va3MgJiYgbm90eG1sICYmICJnZXQiIGluIGhvb2tz
ICYmIChyZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSkgIT09IG51bGwgKSB7Ci0gICAgcmV0
dXJuIHJldDsKLQotICAgIH0gZWxzZSB7Ci0KLSAgICAvLyBJbiBJRTkrLCBGbGFzaCBvYmplY3Rz
IGRvbid0IGhhdmUgLmdldEF0dHJpYnV0ZSAoIzEyOTQ1KQotICAgIC8vIFN1cHBvcnQ6IElFOSsK
LSAgICBpZiAoIHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSAhPT0gY29yZV9zdHJ1bmRlZmluZWQg
KSB7Ci0gICAgcmV0ID0gIGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7Ci0gICAgfQotCi0gICAg
Ly8gTm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgcmV0dXJuIG51bGwsIHdlIG5vcm1hbGl6ZSB0byB1
bmRlZmluZWQKLSAgICByZXR1cm4gcmV0ID09IG51bGwgPwotICAgIHVuZGVmaW5lZCA6Ci0gICAg
cmV0OwotICAgIH0KLSAgICB9LAotCi0gICAgcmVtb3ZlQXR0cjogZnVuY3Rpb24oIGVsZW0sIHZh
bHVlICkgewotICAgIHZhciBuYW1lLCBwcm9wTmFtZSwKLSAgICBpID0gMCwKLSAgICBhdHRyTmFt
ZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCggY29yZV9ybm90d2hpdGUgKTsKLQotICAgIGlmICgg
YXR0ck5hbWVzICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0gICAgd2hpbGUgKCAobmFtZSA9
IGF0dHJOYW1lc1tpKytdKSApIHsKLSAgICBwcm9wTmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1l
IF0gfHwgbmFtZTsKLQotICAgIC8vIEJvb2xlYW4gYXR0cmlidXRlcyBnZXQgc3BlY2lhbCB0cmVh
dG1lbnQgKCMxMDg3MCkKLSAgICBpZiAoIHJib29sZWFuLnRlc3QoIG5hbWUgKSApIHsKLSAgICAv
LyBTZXQgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSB0byBmYWxzZSBmb3IgYm9vbGVhbiBhdHRyaWJ1
dGVzCi0gICAgLy8gQWxzbyBjbGVhciBkZWZhdWx0Q2hlY2tlZC9kZWZhdWx0U2VsZWN0ZWQgKGlm
IGFwcHJvcHJpYXRlKSBmb3IgSUU8OAotICAgIGlmICggIWdldFNldEF0dHJpYnV0ZSAmJiBydXNl
RGVmYXVsdC50ZXN0KCBuYW1lICkgKSB7Ci0gICAgZWxlbVsgalF1ZXJ5LmNhbWVsQ2FzZSggImRl
ZmF1bHQtIiArIG5hbWUgKSBdID0KLSAgICBlbGVtWyBwcm9wTmFtZSBdID0gZmFsc2U7Ci0gICAg
fSBlbHNlIHsKLSAgICBlbGVtWyBwcm9wTmFtZSBdID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8g
U2VlICM5Njk5IGZvciBleHBsYW5hdGlvbiBvZiB0aGlzIGFwcHJvYWNoIChzZXR0aW5nIGZpcnN0
LCB0aGVuIHJlbW92YWwpCi0gICAgfSBlbHNlIHsKLSAgICBqUXVlcnkuYXR0ciggZWxlbSwgbmFt
ZSwgIiIgKTsKLSAgICB9Ci0KLSAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZSggZ2V0U2V0QXR0cmli
dXRlID8gbmFtZSA6IHByb3BOYW1lICk7Ci0gICAgfQotICAgIH0KLSAgICB9LAotCi0gICAgYXR0
ckhvb2tzOiB7Ci0gICAgdHlwZTogewotICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkg
ewotICAgIGlmICggIWpRdWVyeS5zdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFsdWUgPT09ICJyYWRp
byIgJiYgalF1ZXJ5Lm5vZGVOYW1lKGVsZW0sICJpbnB1dCIpICkgewotICAgIC8vIFNldHRpbmcg
dGhlIHR5cGUgb24gYSByYWRpbyBidXR0b24gYWZ0ZXIgdGhlIHZhbHVlIHJlc2V0cyB0aGUgdmFs
dWUgaW4gSUU2LTkKLSAgICAvLyBSZXNldCB2YWx1ZSB0byBkZWZhdWx0IGluIGNhc2UgdHlwZSBp
cyBzZXQgYWZ0ZXIgdmFsdWUgZHVyaW5nIGNyZWF0aW9uCi0gICAgdmFyIHZhbCA9IGVsZW0udmFs
dWU7Ci0gICAgZWxlbS5zZXRBdHRyaWJ1dGUoICJ0eXBlIiwgdmFsdWUgKTsKLSAgICBpZiAoIHZh
bCApIHsKLSAgICBlbGVtLnZhbHVlID0gdmFsOwotICAgIH0KLSAgICByZXR1cm4gdmFsdWU7Ci0g
ICAgfQotICAgIH0KLSAgICB9Ci0gICAgfSwKLQotICAgIHByb3BGaXg6IHsKLSAgICB0YWJpbmRl
eDogInRhYkluZGV4IiwKLSAgICByZWFkb25seTogInJlYWRPbmx5IiwKLSAgICAiZm9yIjogImh0
bWxGb3IiLAotICAgICJjbGFzcyI6ICJjbGFzc05hbWUiLAotICAgIG1heGxlbmd0aDogIm1heExl
bmd0aCIsCi0gICAgY2VsbHNwYWNpbmc6ICJjZWxsU3BhY2luZyIsCi0gICAgY2VsbHBhZGRpbmc6
ICJjZWxsUGFkZGluZyIsCi0gICAgcm93c3BhbjogInJvd1NwYW4iLAotICAgIGNvbHNwYW46ICJj
b2xTcGFuIiwKLSAgICB1c2VtYXA6ICJ1c2VNYXAiLAotICAgIGZyYW1lYm9yZGVyOiAiZnJhbWVC
b3JkZXIiLAotICAgIGNvbnRlbnRlZGl0YWJsZTogImNvbnRlbnRFZGl0YWJsZSIKLSAgICB9LAot
Ci0gICAgcHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkgewotICAgIHZhciByZXQs
IGhvb2tzLCBub3R4bWwsCi0gICAgblR5cGUgPSBlbGVtLm5vZGVUeXBlOwotCi0gICAgLy8gZG9u
J3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rl
cwotICAgIGlmICggIWVsZW0gfHwgblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUg
PT09IDIgKSB7Ci0gICAgcmV0dXJuOwotICAgIH0KLQotICAgIG5vdHhtbCA9IG5UeXBlICE9PSAx
IHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKTsKLQotICAgIGlmICggbm90eG1sICkgewotICAg
IC8vIEZpeCBuYW1lIGFuZCBhdHRhY2ggaG9va3MKLSAgICBuYW1lID0galF1ZXJ5LnByb3BGaXhb
IG5hbWUgXSB8fCBuYW1lOwotICAgIGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBdOwot
ICAgIH0KLQotICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKLSAgICBpZiAoIGhvb2tz
ICYmICJzZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1l
ICkpICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgcmV0dXJuIHJldDsKLQotICAgIH0gZWxzZSB7Ci0g
ICAgcmV0dXJuICggZWxlbVsgbmFtZSBdID0gdmFsdWUgKTsKLSAgICB9Ci0KLSAgICB9IGVsc2Ug
ewotICAgIGlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLmdldCgg
ZWxlbSwgbmFtZSApKSAhPT0gbnVsbCApIHsKLSAgICByZXR1cm4gcmV0OwotCi0gICAgfSBlbHNl
IHsKLSAgICByZXR1cm4gZWxlbVsgbmFtZSBdOwotICAgIH0KLSAgICB9Ci0gICAgfSwKLQotICAg
IHByb3BIb29rczogewotICAgIHRhYkluZGV4OiB7Ci0gICAgZ2V0OiBmdW5jdGlvbiggZWxlbSAp
IHsKLSAgICAvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGUgY29ycmVj
dCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0Ci0gICAgLy8gaHR0cDov
L2ZsdWlkcHJvamVjdC5vcmcvYmxvZy8yMDA4LzAxLzA5L2dldHRpbmctc2V0dGluZy1hbmQtcmVt
b3ZpbmctdGFiaW5kZXgtdmFsdWVzLXdpdGgtamF2YXNjcmlwdC8KLSAgICB2YXIgYXR0cmlidXRl
Tm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSgidGFiaW5kZXgiKTsKLQotICAgIHJldHVybiBh
dHRyaWJ1dGVOb2RlICYmIGF0dHJpYnV0ZU5vZGUuc3BlY2lmaWVkID8KLSAgICBwYXJzZUludCgg
YXR0cmlidXRlTm9kZS52YWx1ZSwgMTAgKSA6Ci0gICAgcmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5v
ZGVOYW1lICkgfHwgcmNsaWNrYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiYgZWxlbS5ocmVm
ID8KLSAgICAwIDoKLSAgICB1bmRlZmluZWQ7Ci0gICAgfQotICAgIH0KLSAgICB9Ci19KTsKLQot
Ly8gSG9vayBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzCi1ib29sSG9vayA9IHsKLSAgICBnZXQ6IGZ1
bmN0aW9uKCBlbGVtLCBuYW1lICkgewotICAgIHZhcgotICAgIC8vIFVzZSAucHJvcCB0byBkZXRl
cm1pbmUgaWYgdGhpcyBhdHRyaWJ1dGUgaXMgdW5kZXJzdG9vZCBhcyBib29sZWFuCi0gICAgcHJv
cCA9IGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lICksCi0KLSAgICAvLyBGZXRjaCBpdCBhY2NvcmRp
bmdseQotICAgIGF0dHIgPSB0eXBlb2YgcHJvcCA9PT0gImJvb2xlYW4iICYmIGVsZW0uZ2V0QXR0
cmlidXRlKCBuYW1lICksCi0gICAgZGV0YWlsID0gdHlwZW9mIHByb3AgPT09ICJib29sZWFuIiA/
Ci0KLSAgICBnZXRTZXRJbnB1dCAmJiBnZXRTZXRBdHRyaWJ1dGUgPwotICAgIGF0dHIgIT0gbnVs
bCA6Ci0gICAgLy8gb2xkSUUgZmFicmljYXRlcyBhbiBlbXB0eSBzdHJpbmcgZm9yIG1pc3Npbmcg
Ym9vbGVhbiBhdHRyaWJ1dGVzCi0gICAgLy8gYW5kIGNvbmZsYXRlcyBjaGVja2VkL3NlbGVjdGVk
IGludG8gYXR0cm9wZXJ0aWVzCi0gICAgcnVzZURlZmF1bHQudGVzdCggbmFtZSApID8KLSAgICBl
bGVtWyBqUXVlcnkuY2FtZWxDYXNlKCAiZGVmYXVsdC0iICsgbmFtZSApIF0gOgotICAgICEhYXR0
ciA6Ci0KLSAgICAvLyBmZXRjaCBhbiBhdHRyaWJ1dGUgbm9kZSBmb3IgcHJvcGVydGllcyBub3Qg
cmVjb2duaXplZCBhcyBib29sZWFuCi0gICAgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICk7
Ci0KLSAgICByZXR1cm4gZGV0YWlsICYmIGRldGFpbC52YWx1ZSAhPT0gZmFsc2UgPwotICAgIG5h
bWUudG9Mb3dlckNhc2UoKSA6Ci0gICAgdW5kZWZpbmVkOwotICAgIH0sCi0gICAgc2V0OiBmdW5j
dGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7Ci0gICAgaWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7
Ci0gICAgLy8gUmVtb3ZlIGJvb2xlYW4gYXR0cmlidXRlcyB3aGVuIHNldCB0byBmYWxzZQotICAg
IGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7Ci0gICAgfSBlbHNlIGlmICggZ2V0U2V0
SW5wdXQgJiYgZ2V0U2V0QXR0cmlidXRlIHx8ICFydXNlRGVmYXVsdC50ZXN0KCBuYW1lICkgKSB7
Ci0gICAgLy8gSUU8OCBuZWVkcyB0aGUgKnByb3BlcnR5KiBuYW1lCi0gICAgZWxlbS5zZXRBdHRy
aWJ1dGUoICFnZXRTZXRBdHRyaWJ1dGUgJiYgalF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1l
LCBuYW1lICk7Ci0KLSAgICAvLyBVc2UgZGVmYXVsdENoZWNrZWQgYW5kIGRlZmF1bHRTZWxlY3Rl
ZCBmb3Igb2xkSUUKLSAgICB9IGVsc2UgewotICAgIGVsZW1bIGpRdWVyeS5jYW1lbENhc2UoICJk
ZWZhdWx0LSIgKyBuYW1lICkgXSA9IGVsZW1bIG5hbWUgXSA9IHRydWU7Ci0gICAgfQotCi0gICAg
cmV0dXJuIG5hbWU7Ci0gICAgfQotfTsKLQotLy8gZml4IG9sZElFIHZhbHVlIGF0dHJvcGVydHkK
LWlmICggIWdldFNldElucHV0IHx8ICFnZXRTZXRBdHRyaWJ1dGUgKSB7Ci0gICAgalF1ZXJ5LmF0
dHJIb29rcy52YWx1ZSA9IHsKLSAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewotICAg
IHZhciByZXQgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKTsKLSAgICByZXR1cm4galF1
ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaW5wdXQiICkgPwotCi0gICAgLy8gSWdub3JlIHRoZSB2YWx1
ZSAqcHJvcGVydHkqIGJ5IHVzaW5nIGRlZmF1bHRWYWx1ZQotICAgIGVsZW0uZGVmYXVsdFZhbHVl
IDoKLQotICAgIHJldCAmJiByZXQuc3BlY2lmaWVkID8gcmV0LnZhbHVlIDogdW5kZWZpbmVkOwot
ICAgIH0sCi0gICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7Ci0gICAgaWYg
KCBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJpbnB1dCIgKSApIHsKLSAgICAvLyBEb2VzIG5vdCBy
ZXR1cm4gc28gdGhhdCBzZXRBdHRyaWJ1dGUgaXMgYWxzbyB1c2VkCi0gICAgZWxlbS5kZWZhdWx0
VmFsdWUgPSB2YWx1ZTsKLSAgICB9IGVsc2UgewotICAgIC8vIFVzZSBub2RlSG9vayBpZiBkZWZp
bmVkICgjMTk1NCk7IG90aGVyd2lzZSBzZXRBdHRyaWJ1dGUgaXMgZmluZQotICAgIHJldHVybiBu
b2RlSG9vayAmJiBub2RlSG9vay5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICk7Ci0gICAgfQotICAg
IH0KLSAgICB9OwotfQotCi0vLyBJRTYvNyBkbyBub3Qgc3VwcG9ydCBnZXR0aW5nL3NldHRpbmcg
c29tZSBhdHRyaWJ1dGVzIHdpdGggZ2V0L3NldEF0dHJpYnV0ZQotaWYgKCAhZ2V0U2V0QXR0cmli
dXRlICkgewotCi0gICAgLy8gVXNlIHRoaXMgZm9yIGFueSBhdHRyaWJ1dGUgaW4gSUU2LzcKLSAg
ICAvLyBUaGlzIGZpeGVzIGFsbW9zdCBldmVyeSBJRTYvNyBpc3N1ZQotICAgIG5vZGVIb29rID0g
alF1ZXJ5LnZhbEhvb2tzLmJ1dHRvbiA9IHsKLSAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBuYW1l
ICkgewotICAgIHZhciByZXQgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKTsKLSAgICBy
ZXR1cm4gcmV0ICYmICggbmFtZSA9PT0gImlkIiB8fCBuYW1lID09PSAibmFtZSIgfHwgbmFtZSA9
PT0gImNvb3JkcyIgPyByZXQudmFsdWUgIT09ICIiIDogcmV0LnNwZWNpZmllZCApID8KLSAgICBy
ZXQudmFsdWUgOgotICAgIHVuZGVmaW5lZDsKLSAgICB9LAotICAgIHNldDogZnVuY3Rpb24oIGVs
ZW0sIHZhbHVlLCBuYW1lICkgewotICAgIC8vIFNldCB0aGUgZXhpc3Rpbmcgb3IgY3JlYXRlIGEg
bmV3IGF0dHJpYnV0ZSBub2RlCi0gICAgdmFyIHJldCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSgg
bmFtZSApOwotICAgIGlmICggIXJldCApIHsKLSAgICBlbGVtLnNldEF0dHJpYnV0ZU5vZGUoCi0g
ICAgKHJldCA9IGVsZW0ub3duZXJEb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUoIG5hbWUgKSkKLSAg
ICApOwotICAgIH0KLQotICAgIHJldC52YWx1ZSA9IHZhbHVlICs9ICIiOwotCi0gICAgLy8gQnJl
YWsgYXNzb2NpYXRpb24gd2l0aCBjbG9uZWQgZWxlbWVudHMgYnkgYWxzbyB1c2luZyBzZXRBdHRy
aWJ1dGUgKCM5NjQ2KQotICAgIHJldHVybiBuYW1lID09PSAidmFsdWUiIHx8IHZhbHVlID09PSBl
bGVtLmdldEF0dHJpYnV0ZSggbmFtZSApID8KLSAgICB2YWx1ZSA6Ci0gICAgdW5kZWZpbmVkOwot
ICAgIH0KLSAgICB9OwotCi0gICAgLy8gU2V0IGNvbnRlbnRlZGl0YWJsZSB0byBmYWxzZSBvbiBy
ZW1vdmFscygjMTA0MjkpCi0gICAgLy8gU2V0dGluZyB0byBlbXB0eSBzdHJpbmcgdGhyb3dzIGFu
IGVycm9yIGFzIGFuIGludmFsaWQgdmFsdWUKLSAgICBqUXVlcnkuYXR0ckhvb2tzLmNvbnRlbnRl
ZGl0YWJsZSA9IHsKLSAgICBnZXQ6IG5vZGVIb29rLmdldCwKLSAgICBzZXQ6IGZ1bmN0aW9uKCBl
bGVtLCB2YWx1ZSwgbmFtZSApIHsKLSAgICBub2RlSG9vay5zZXQoIGVsZW0sIHZhbHVlID09PSAi
IiA/IGZhbHNlIDogdmFsdWUsIG5hbWUgKTsKLSAgICB9Ci0gICAgfTsKLQotICAgIC8vIFNldCB3
aWR0aCBhbmQgaGVpZ2h0IHRvIGF1dG8gaW5zdGVhZCBvZiAwIG9uIGVtcHR5IHN0cmluZyggQnVn
ICM4MTUwICkKLSAgICAvLyBUaGlzIGlzIGZvciByZW1vdmFscwotICAgIGpRdWVyeS5lYWNoKFsg
IndpZHRoIiwgImhlaWdodCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7Ci0gICAgalF1ZXJ5LmF0
dHJIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBd
LCB7Ci0gICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7Ci0gICAgaWYgKCB2YWx1ZSA9
PT0gIiIgKSB7Ci0gICAgZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsICJhdXRvIiApOwotICAgIHJl
dHVybiB2YWx1ZTsKLSAgICB9Ci0gICAgfQotICAgIH0pOwotICAgIH0pOwotfQotCi0KLS8vIFNv
bWUgYXR0cmlidXRlcyByZXF1aXJlIGEgc3BlY2lhbCBjYWxsIG9uIElFCi0vLyBodHRwOi8vbXNk
bi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY0MjklMjhWUy44NSUyOS5hc3B4Ci1p
ZiAoICFqUXVlcnkuc3VwcG9ydC5ocmVmTm9ybWFsaXplZCApIHsKLSAgICBqUXVlcnkuZWFjaChb
ICJocmVmIiwgInNyYyIsICJ3aWR0aCIsICJoZWlnaHQiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkg
ewotICAgIGpRdWVyeS5hdHRySG9va3NbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGpRdWVyeS5h
dHRySG9va3NbIG5hbWUgXSwgewotICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgdmFy
IHJldCA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lLCAyICk7Ci0gICAgcmV0dXJuIHJldCA9PSBu
dWxsID8gdW5kZWZpbmVkIDogcmV0OwotICAgIH0KLSAgICB9KTsKLSAgICB9KTsKLQotICAgIC8v
IGhyZWYvc3JjIHByb3BlcnR5IHNob3VsZCBnZXQgdGhlIGZ1bGwgbm9ybWFsaXplZCBVUkwgKCMx
MDI5OS8jMTI5MTUpCi0gICAgalF1ZXJ5LmVhY2goWyAiaHJlZiIsICJzcmMiIF0sIGZ1bmN0aW9u
KCBpLCBuYW1lICkgewotICAgIGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXSA9IHsKLSAgICBnZXQ6
IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwg
NCApOwotICAgIH0KLSAgICB9OwotICAgIH0pOwotfQotCi1pZiAoICFqUXVlcnkuc3VwcG9ydC5z
dHlsZSApIHsKLSAgICBqUXVlcnkuYXR0ckhvb2tzLnN0eWxlID0gewotICAgIGdldDogZnVuY3Rp
b24oIGVsZW0gKSB7Ci0gICAgLy8gUmV0dXJuIHVuZGVmaW5lZCBpbiB0aGUgY2FzZSBvZiBlbXB0
eSBzdHJpbmcKLSAgICAvLyBOb3RlOiBJRSB1cHBlcmNhc2VzIGNzcyBwcm9wZXJ0eSBuYW1lcywg
YnV0IGlmIHdlIHdlcmUgdG8gLnRvTG93ZXJDYXNlKCkKLSAgICAvLyAuY3NzVGV4dCwgdGhhdCB3
b3VsZCBkZXN0cm95IGNhc2Ugc2Vuc3RpdGl2aXR5IGluIFVSTCdzLCBsaWtlIGluICJiYWNrZ3Jv
dW5kIgotICAgIHJldHVybiBlbGVtLnN0eWxlLmNzc1RleHQgfHwgdW5kZWZpbmVkOwotICAgIH0s
Ci0gICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7Ci0gICAgcmV0dXJuICggZWxlbS5z
dHlsZS5jc3NUZXh0ID0gdmFsdWUgKyAiIiApOwotICAgIH0KLSAgICB9OwotfQotCi0vLyBTYWZh
cmkgbWlzLXJlcG9ydHMgdGhlIGRlZmF1bHQgc2VsZWN0ZWQgcHJvcGVydHkgb2YgYW4gb3B0aW9u
Ci0vLyBBY2Nlc3NpbmcgdGhlIHBhcmVudCdzIHNlbGVjdGVkSW5kZXggcHJvcGVydHkgZml4ZXMg
aXQKLWlmICggIWpRdWVyeS5zdXBwb3J0Lm9wdFNlbGVjdGVkICkgewotICAgIGpRdWVyeS5wcm9w
SG9va3Muc2VsZWN0ZWQgPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVk
LCB7Ci0gICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICB2YXIgcGFyZW50ID0gZWxlbS5w
YXJlbnROb2RlOwotCi0gICAgaWYgKCBwYXJlbnQgKSB7Ci0gICAgcGFyZW50LnNlbGVjdGVkSW5k
ZXg7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBpdCBhbHNvIHdvcmtzIHdpdGggb3B0Z3JvdXBz
LCBzZWUgIzU3MDEKLSAgICBpZiAoIHBhcmVudC5wYXJlbnROb2RlICkgewotICAgIHBhcmVudC5w
YXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7Ci0gICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsK
LSAgICB9Ci0gICAgfSk7Ci19Ci0KLS8vIElFNi83IGNhbGwgZW5jdHlwZSBlbmNvZGluZwotaWYg
KCAhalF1ZXJ5LnN1cHBvcnQuZW5jdHlwZSApIHsKLSAgICBqUXVlcnkucHJvcEZpeC5lbmN0eXBl
ID0gImVuY29kaW5nIjsKLX0KLQotLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0
ZXIKLWlmICggIWpRdWVyeS5zdXBwb3J0LmNoZWNrT24gKSB7Ci0gICAgalF1ZXJ5LmVhY2goWyAi
cmFkaW8iLCAiY2hlY2tib3giIF0sIGZ1bmN0aW9uKCkgewotICAgIGpRdWVyeS52YWxIb29rc1sg
dGhpcyBdID0gewotICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgLy8gSGFuZGxlIHRo
ZSBjYXNlIHdoZXJlIGluIFdlYmtpdCAiIiBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mICJvbiIgaWYg
YSB2YWx1ZSBpc24ndCBzcGVjaWZpZWQKLSAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoInZh
bHVlIikgPT09IG51bGwgPyAib24iIDogZWxlbS52YWx1ZTsKLSAgICB9Ci0gICAgfTsKLSAgICB9
KTsKLX0KLWpRdWVyeS5lYWNoKFsgInJhZGlvIiwgImNoZWNrYm94IiBdLCBmdW5jdGlvbigpIHsK
LSAgICBqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IGpRdWVyeS5leHRlbmQoIGpRdWVyeS52YWxI
b29rc1sgdGhpcyBdLCB7Ci0gICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7Ci0gICAg
aWYgKCBqUXVlcnkuaXNBcnJheSggdmFsdWUgKSApIHsKLSAgICByZXR1cm4gKCBlbGVtLmNoZWNr
ZWQgPSBqUXVlcnkuaW5BcnJheSggalF1ZXJ5KGVsZW0pLnZhbCgpLCB2YWx1ZSApID49IDAgKTsK
LSAgICB9Ci0gICAgfQotICAgIH0pOwotfSk7Ci12YXIgcmZvcm1FbGVtcyA9IC9eKD86aW5wdXR8
c2VsZWN0fHRleHRhcmVhKSQvaSwKLSAgICBya2V5RXZlbnQgPSAvXmtleS8sCi0gICAgcm1vdXNl
RXZlbnQgPSAvXig/Om1vdXNlfGNvbnRleHRtZW51KXxjbGljay8sCi0gICAgcmZvY3VzTW9ycGgg
PSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sCi0gICAgcnR5cGVuYW1lc3BhY2Ug
PSAvXihbXi5dKikoPzpcLiguKyl8KSQvOwotCi1mdW5jdGlvbiByZXR1cm5UcnVlKCkgewotICAg
IHJldHVybiB0cnVlOwotfQotCi1mdW5jdGlvbiByZXR1cm5GYWxzZSgpIHsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLS8qCi0gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMg
LS0gbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuCi0gKiBQcm9wcyB0byBEZWFuIEVk
d2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLgotICovCi1qUXVl
cnkuZXZlbnQgPSB7Ci0KLSAgICBnbG9iYWw6IHt9LAotCi0gICAgYWRkOiBmdW5jdGlvbiggZWxl
bSwgdHlwZXMsIGhhbmRsZXIsIGRhdGEsIHNlbGVjdG9yICkgewotICAgIHZhciB0bXAsIGV2ZW50
cywgdCwgaGFuZGxlT2JqSW4sCi0gICAgc3BlY2lhbCwgZXZlbnRIYW5kbGUsIGhhbmRsZU9iaiwK
LSAgICBoYW5kbGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsCi0gICAgZWxlbURhdGEg
PSBqUXVlcnkuX2RhdGEoIGVsZW0gKTsKLQotICAgIC8vIERvbid0IGF0dGFjaCBldmVudHMgdG8g
bm9EYXRhIG9yIHRleHQvY29tbWVudCBub2RlcyAoYnV0IGFsbG93IHBsYWluIG9iamVjdHMpCi0g
ICAgaWYgKCAhZWxlbURhdGEgKSB7Ci0gICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIENhbGxl
ciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFu
ZGxlcgotICAgIGlmICggaGFuZGxlci5oYW5kbGVyICkgewotICAgIGhhbmRsZU9iakluID0gaGFu
ZGxlcjsKLSAgICBoYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjsKLSAgICBzZWxlY3RvciA9
IGhhbmRsZU9iakluLnNlbGVjdG9yOwotICAgIH0KLQotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRo
ZSBoYW5kbGVyIGhhcyBhIHVuaXF1ZSBJRCwgdXNlZCB0byBmaW5kL3JlbW92ZSBpdCBsYXRlcgot
ICAgIGlmICggIWhhbmRsZXIuZ3VpZCApIHsKLSAgICBoYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3Vp
ZCsrOwotICAgIH0KLQotICAgIC8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1Y3R1cmUg
YW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmlyc3QKLSAgICBpZiAoICEoZXZlbnRz
ID0gZWxlbURhdGEuZXZlbnRzKSApIHsKLSAgICBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgPSB7
fTsKLSAgICB9Ci0gICAgaWYgKCAhKGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlKSApIHsK
LSAgICBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSA9IGZ1bmN0aW9uKCBlICkgewotICAg
IC8vIERpc2NhcmQgdGhlIHNlY29uZCBldmVudCBvZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkg
YW5kCi0gICAgLy8gd2hlbiBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBwYWdlIGhhcyB1bmxv
YWRlZAotICAgIHJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSBjb3JlX3N0cnVuZGVmaW5lZCAmJiAo
IWUgfHwgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlKSA/Ci0gICAgalF1ZXJ5LmV2
ZW50LmRpc3BhdGNoLmFwcGx5KCBldmVudEhhbmRsZS5lbGVtLCBhcmd1bWVudHMgKSA6Ci0gICAg
dW5kZWZpbmVkOwotICAgIH07Ci0gICAgLy8gQWRkIGVsZW0gYXMgYSBwcm9wZXJ0eSBvZiB0aGUg
aGFuZGxlIGZuIHRvIHByZXZlbnQgYSBtZW1vcnkgbGVhayB3aXRoIElFIG5vbi1uYXRpdmUgZXZl
bnRzCi0gICAgZXZlbnRIYW5kbGUuZWxlbSA9IGVsZW07Ci0gICAgfQotCi0gICAgLy8gSGFuZGxl
IG11bHRpcGxlIGV2ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZQotICAgIC8vIGpRdWVyeSguLi4p
LmJpbmQoIm1vdXNlb3ZlciBtb3VzZW91dCIsIGZuKTsKLSAgICB0eXBlcyA9ICggdHlwZXMgfHwg
IiIgKS5tYXRjaCggY29yZV9ybm90d2hpdGUgKSB8fCBbIiJdOwotICAgIHQgPSB0eXBlcy5sZW5n
dGg7Ci0gICAgd2hpbGUgKCB0LS0gKSB7Ci0gICAgdG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYygg
dHlwZXNbdF0gKSB8fCBbXTsKLSAgICB0eXBlID0gb3JpZ1R5cGUgPSB0bXBbMV07Ci0gICAgbmFt
ZXNwYWNlcyA9ICggdG1wWzJdIHx8ICIiICkuc3BsaXQoICIuIiApLnNvcnQoKTsKLQotICAgIC8v
IElmIGV2ZW50IGNoYW5nZXMgaXRzIHR5cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5kbGVy
cyBmb3IgdGhlIGNoYW5nZWQgdHlwZQotICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lh
bFsgdHlwZSBdIHx8IHt9OwotCi0gICAgLy8gSWYgc2VsZWN0b3IgZGVmaW5lZCwgZGV0ZXJtaW5l
IHNwZWNpYWwgZXZlbnQgYXBpIHR5cGUsIG90aGVyd2lzZSBnaXZlbiB0eXBlCi0gICAgdHlwZSA9
ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8
fCB0eXBlOwotCi0gICAgLy8gVXBkYXRlIHNwZWNpYWwgYmFzZWQgb24gbmV3bHkgcmVzZXQgdHlw
ZQotICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OwotCi0g
ICAgLy8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0byBhbGwgZXZlbnQgaGFuZGxlcnMKLSAgICBoYW5k
bGVPYmogPSBqUXVlcnkuZXh0ZW5kKHsKLSAgICB0eXBlOiB0eXBlLAotICAgIG9yaWdUeXBlOiBv
cmlnVHlwZSwKLSAgICBkYXRhOiBkYXRhLAotICAgIGhhbmRsZXI6IGhhbmRsZXIsCi0gICAgZ3Vp
ZDogaGFuZGxlci5ndWlkLAotICAgIHNlbGVjdG9yOiBzZWxlY3RvciwKLSAgICBuZWVkc0NvbnRl
eHQ6IHNlbGVjdG9yICYmIGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxl
Y3RvciApLAotICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKCIuIikKLSAgICB9LCBoYW5k
bGVPYmpJbiApOwotCi0gICAgLy8gSW5pdCB0aGUgZXZlbnQgaGFuZGxlciBxdWV1ZSBpZiB3ZSdy
ZSB0aGUgZmlyc3QKLSAgICBpZiAoICEoaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSkgKSB7Ci0g
ICAgaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSA9IFtdOwotICAgIGhhbmRsZXJzLmRlbGVnYXRl
Q291bnQgPSAwOwotCi0gICAgLy8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lci9hdHRhY2hFdmVu
dCBpZiB0aGUgc3BlY2lhbCBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlCi0gICAgaWYgKCAh
c3BlY2lhbC5zZXR1cCB8fCBzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFj
ZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkgewotICAgIC8vIEJpbmQgdGhlIGdsb2JhbCBl
dmVudCBoYW5kbGVyIHRvIHRoZSBlbGVtZW50Ci0gICAgaWYgKCBlbGVtLmFkZEV2ZW50TGlzdGVu
ZXIgKSB7Ci0gICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBldmVudEhhbmRsZSwgZmFs
c2UgKTsKLQotICAgIH0gZWxzZSBpZiAoIGVsZW0uYXR0YWNoRXZlbnQgKSB7Ci0gICAgZWxlbS5h
dHRhY2hFdmVudCggIm9uIiArIHR5cGUsIGV2ZW50SGFuZGxlICk7Ci0gICAgfQotICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoIHNwZWNpYWwuYWRkICkgewotICAgIHNwZWNpYWwuYWRkLmNhbGwoIGVs
ZW0sIGhhbmRsZU9iaiApOwotCi0gICAgaWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHsK
LSAgICBoYW5kbGVPYmouaGFuZGxlci5ndWlkID0gaGFuZGxlci5ndWlkOwotICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBBZGQgdG8gdGhlIGVsZW1lbnQncyBoYW5kbGVyIGxpc3QsIGRlbGVnYXRlcyBp
biBmcm9udAotICAgIGlmICggc2VsZWN0b3IgKSB7Ci0gICAgaGFuZGxlcnMuc3BsaWNlKCBoYW5k
bGVycy5kZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRsZU9iaiApOwotICAgIH0gZWxzZSB7Ci0gICAg
aGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7Ci0gICAgfQotCi0gICAgLy8gS2VlcCB0cmFjayBv
ZiB3aGljaCBldmVudHMgaGF2ZSBldmVyIGJlZW4gdXNlZCwgZm9yIGV2ZW50IG9wdGltaXphdGlv
bgotICAgIGpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7Ci0gICAgfQotCi0gICAg
Ly8gTnVsbGlmeSBlbGVtIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzIGluIElFCi0gICAgZWxlbSA9
IG51bGw7Ci0gICAgfSwKLQotICAgIC8vIERldGFjaCBhbiBldmVudCBvciBzZXQgb2YgZXZlbnRz
IGZyb20gYW4gZWxlbWVudAotICAgIHJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5k
bGVyLCBzZWxlY3RvciwgbWFwcGVkVHlwZXMgKSB7Ci0gICAgdmFyIGosIGhhbmRsZU9iaiwgdG1w
LAotICAgIG9yaWdDb3VudCwgdCwgZXZlbnRzLAotICAgIHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBl
LAotICAgIG5hbWVzcGFjZXMsIG9yaWdUeXBlLAotICAgIGVsZW1EYXRhID0galF1ZXJ5Lmhhc0Rh
dGEoIGVsZW0gKSAmJiBqUXVlcnkuX2RhdGEoIGVsZW0gKTsKLQotICAgIGlmICggIWVsZW1EYXRh
IHx8ICEoZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzKSApIHsKLSAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gT25jZSBmb3IgZWFjaCB0eXBlLm5hbWVzcGFjZSBpbiB0eXBlczsgdHlwZSBtYXkg
YmUgb21pdHRlZAotICAgIHR5cGVzID0gKCB0eXBlcyB8fCAiIiApLm1hdGNoKCBjb3JlX3Jub3R3
aGl0ZSApIHx8IFsiIl07Ci0gICAgdCA9IHR5cGVzLmxlbmd0aDsKLSAgICB3aGlsZSAoIHQtLSAp
IHsKLSAgICB0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1t0XSApIHx8IFtdOwotICAg
IHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsxXTsKLSAgICBuYW1lc3BhY2VzID0gKCB0bXBbMl0gfHwg
IiIgKS5zcGxpdCggIi4iICkuc29ydCgpOwotCi0gICAgLy8gVW5iaW5kIGFsbCBldmVudHMgKG9u
IHRoaXMgbmFtZXNwYWNlLCBpZiBwcm92aWRlZCkgZm9yIHRoZSBlbGVtZW50Ci0gICAgaWYgKCAh
dHlwZSApIHsKLSAgICBmb3IgKCB0eXBlIGluIGV2ZW50cyApIHsKLSAgICBqUXVlcnkuZXZlbnQu
cmVtb3ZlKCBlbGVtLCB0eXBlICsgdHlwZXNbIHQgXSwgaGFuZGxlciwgc2VsZWN0b3IsIHRydWUg
KTsKLSAgICB9Ci0gICAgY29udGludWU7Ci0gICAgfQotCi0gICAgc3BlY2lhbCA9IGpRdWVyeS5l
dmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307Ci0gICAgdHlwZSA9ICggc2VsZWN0b3IgPyBzcGVj
aWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlOwotICAgIGhhbmRs
ZXJzID0gZXZlbnRzWyB0eXBlIF0gfHwgW107Ci0gICAgdG1wID0gdG1wWzJdICYmIG5ldyBSZWdF
eHAoICIoXnxcXC4pIiArIG5hbWVzcGFjZXMuam9pbigiXFwuKD86LipcXC58KSIpICsgIihcXC58
JCkiICk7Ci0KLSAgICAvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzCi0gICAgb3JpZ0NvdW50ID0g
aiA9IGhhbmRsZXJzLmxlbmd0aDsKLSAgICB3aGlsZSAoIGotLSApIHsKLSAgICBoYW5kbGVPYmog
PSBoYW5kbGVyc1sgaiBdOwotCi0gICAgaWYgKCAoIG1hcHBlZFR5cGVzIHx8IG9yaWdUeXBlID09
PSBoYW5kbGVPYmoub3JpZ1R5cGUgKSAmJgotICAgICggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlk
ID09PSBoYW5kbGVPYmouZ3VpZCApICYmCi0gICAgKCAhdG1wIHx8IHRtcC50ZXN0KCBoYW5kbGVP
YmoubmFtZXNwYWNlICkgKSAmJgotICAgICggIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBoYW5k
bGVPYmouc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09ICIqKiIgJiYgaGFuZGxlT2JqLnNlbGVjdG9y
ICkgKSB7Ci0gICAgaGFuZGxlcnMuc3BsaWNlKCBqLCAxICk7Ci0KLSAgICBpZiAoIGhhbmRsZU9i
ai5zZWxlY3RvciApIHsKLSAgICBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LS07Ci0gICAgfQotICAg
IGlmICggc3BlY2lhbC5yZW1vdmUgKSB7Ci0gICAgc3BlY2lhbC5yZW1vdmUuY2FsbCggZWxlbSwg
aGFuZGxlT2JqICk7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZW1vdmUgZ2VuZXJp
YyBldmVudCBoYW5kbGVyIGlmIHdlIHJlbW92ZWQgc29tZXRoaW5nIGFuZCBubyBtb3JlIGhhbmRs
ZXJzIGV4aXN0Ci0gICAgLy8gKGF2b2lkcyBwb3RlbnRpYWwgZm9yIGVuZGxlc3MgcmVjdXJzaW9u
IGR1cmluZyByZW1vdmFsIG9mIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMpCi0gICAgaWYgKCBvcmln
Q291bnQgJiYgIWhhbmRsZXJzLmxlbmd0aCApIHsKLSAgICBpZiAoICFzcGVjaWFsLnRlYXJkb3du
IHx8IHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNwYWNlcywgZWxlbURhdGEuaGFu
ZGxlICkgPT09IGZhbHNlICkgewotICAgIGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwg
ZWxlbURhdGEuaGFuZGxlICk7Ci0gICAgfQotCi0gICAgZGVsZXRlIGV2ZW50c1sgdHlwZSBdOwot
ICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgaXQncyBubyBsb25n
ZXIgdXNlZAotICAgIGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGV2ZW50cyApICkgewotICAg
IGRlbGV0ZSBlbGVtRGF0YS5oYW5kbGU7Ci0KLSAgICAvLyByZW1vdmVEYXRhIGFsc28gY2hlY2tz
IGZvciBlbXB0aW5lc3MgYW5kIGNsZWFycyB0aGUgZXhwYW5kbyBpZiBlbXB0eQotICAgIC8vIHNv
IHVzZSBpdCBpbnN0ZWFkIG9mIGRlbGV0ZQotICAgIGpRdWVyeS5fcmVtb3ZlRGF0YSggZWxlbSwg
ImV2ZW50cyIgKTsKLSAgICB9Ci0gICAgfSwKLQotICAgIHRyaWdnZXI6IGZ1bmN0aW9uKCBldmVu
dCwgZGF0YSwgZWxlbSwgb25seUhhbmRsZXJzICkgewotICAgIHZhciBoYW5kbGUsIG9udHlwZSwg
Y3VyLAotICAgIGJ1YmJsZVR5cGUsIHNwZWNpYWwsIHRtcCwgaSwKLSAgICBldmVudFBhdGggPSBb
IGVsZW0gfHwgZG9jdW1lbnQgXSwKLSAgICB0eXBlID0gY29yZV9oYXNPd24uY2FsbCggZXZlbnQs
ICJ0eXBlIiApID8gZXZlbnQudHlwZSA6IGV2ZW50LAotICAgIG5hbWVzcGFjZXMgPSBjb3JlX2hh
c093bi5jYWxsKCBldmVudCwgIm5hbWVzcGFjZSIgKSA/IGV2ZW50Lm5hbWVzcGFjZS5zcGxpdCgi
LiIpIDogW107Ci0KLSAgICBjdXIgPSB0bXAgPSBlbGVtID0gZWxlbSB8fCBkb2N1bWVudDsKLQot
ICAgIC8vIERvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzCi0gICAgaWYg
KCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7Ci0gICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIGZvY3VzL2JsdXIgbW9ycGhzIHRvIGZvY3VzaW4vb3V0OyBl
bnN1cmUgd2UncmUgbm90IGZpcmluZyB0aGVtIHJpZ2h0IG5vdwotICAgIGlmICggcmZvY3VzTW9y
cGgudGVzdCggdHlwZSArIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgKSApIHsKLSAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKCB0eXBlLmluZGV4T2YoIi4iKSA+PSAwICkgewotICAgIC8vIE5h
bWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4g
aGFuZGxlKCkKLSAgICBuYW1lc3BhY2VzID0gdHlwZS5zcGxpdCgiLiIpOwotICAgIHR5cGUgPSBu
YW1lc3BhY2VzLnNoaWZ0KCk7Ci0gICAgbmFtZXNwYWNlcy5zb3J0KCk7Ci0gICAgfQotICAgIG9u
dHlwZSA9IHR5cGUuaW5kZXhPZigiOiIpIDwgMCAmJiAib24iICsgdHlwZTsKLQotICAgIC8vIENh
bGxlciBjYW4gcGFzcyBpbiBhIGpRdWVyeS5FdmVudCBvYmplY3QsIE9iamVjdCwgb3IganVzdCBh
biBldmVudCB0eXBlIHN0cmluZwotICAgIGV2ZW50ID0gZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0g
PwotICAgIGV2ZW50IDoKLSAgICBuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlLCB0eXBlb2YgZXZlbnQg
PT09ICJvYmplY3QiICYmIGV2ZW50ICk7Ci0KLSAgICBldmVudC5pc1RyaWdnZXIgPSB0cnVlOwot
ICAgIGV2ZW50Lm5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuam9pbigiLiIpOwotICAgIGV2ZW50Lm5h
bWVzcGFjZV9yZSA9IGV2ZW50Lm5hbWVzcGFjZSA/Ci0gICAgbmV3IFJlZ0V4cCggIihefFxcLiki
ICsgbmFtZXNwYWNlcy5qb2luKCJcXC4oPzouKlxcLnwpIikgKyAiKFxcLnwkKSIgKSA6Ci0gICAg
bnVsbDsKLQotICAgIC8vIENsZWFuIHVwIHRoZSBldmVudCBpbiBjYXNlIGl0IGlzIGJlaW5nIHJl
dXNlZAotICAgIGV2ZW50LnJlc3VsdCA9IHVuZGVmaW5lZDsKLSAgICBpZiAoICFldmVudC50YXJn
ZXQgKSB7Ci0gICAgZXZlbnQudGFyZ2V0ID0gZWxlbTsKLSAgICB9Ci0KLSAgICAvLyBDbG9uZSBh
bnkgaW5jb21pbmcgZGF0YSBhbmQgcHJlcGVuZCB0aGUgZXZlbnQsIGNyZWF0aW5nIHRoZSBoYW5k
bGVyIGFyZyBsaXN0Ci0gICAgZGF0YSA9IGRhdGEgPT0gbnVsbCA/Ci0gICAgWyBldmVudCBdIDoK
LSAgICBqUXVlcnkubWFrZUFycmF5KCBkYXRhLCBbIGV2ZW50IF0gKTsKLQotICAgIC8vIEFsbG93
IHNwZWNpYWwgZXZlbnRzIHRvIGRyYXcgb3V0c2lkZSB0aGUgbGluZXMKLSAgICBzcGVjaWFsID0g
alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKLSAgICBpZiAoICFvbmx5SGFuZGxl
cnMgJiYgc3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwudHJpZ2dlci5hcHBseSggZWxlbSwgZGF0
YSApID09PSBmYWxzZSApIHsKLSAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRGV0ZXJtaW5l
IGV2ZW50IHByb3BhZ2F0aW9uIHBhdGggaW4gYWR2YW5jZSwgcGVyIFczQyBldmVudHMgc3BlYyAo
Izk5NTEpCi0gICAgLy8gQnViYmxlIHVwIHRvIGRvY3VtZW50LCB0aGVuIHRvIHdpbmRvdzsgd2F0
Y2ggZm9yIGEgZ2xvYmFsIG93bmVyRG9jdW1lbnQgdmFyICgjOTcyNCkKLSAgICBpZiAoICFvbmx5
SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWpRdWVyeS5pc1dpbmRvdyggZWxlbSAp
ICkgewotCi0gICAgYnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7Ci0g
ICAgaWYgKCAhcmZvY3VzTW9ycGgudGVzdCggYnViYmxlVHlwZSArIHR5cGUgKSApIHsKLSAgICBj
dXIgPSBjdXIucGFyZW50Tm9kZTsKLSAgICB9Ci0gICAgZm9yICggOyBjdXI7IGN1ciA9IGN1ci5w
YXJlbnROb2RlICkgewotICAgIGV2ZW50UGF0aC5wdXNoKCBjdXIgKTsKLSAgICB0bXAgPSBjdXI7
Ci0gICAgfQotCi0gICAgLy8gT25seSBhZGQgd2luZG93IGlmIHdlIGdvdCB0byBkb2N1bWVudCAo
ZS5nLiwgbm90IHBsYWluIG9iaiBvciBkZXRhY2hlZCBET00pCi0gICAgaWYgKCB0bXAgPT09IChl
bGVtLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQpICkgewotICAgIGV2ZW50UGF0aC5wdXNoKCB0
bXAuZGVmYXVsdFZpZXcgfHwgdG1wLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cgKTsKLSAgICB9Ci0g
ICAgfQotCi0gICAgLy8gRmlyZSBoYW5kbGVycyBvbiB0aGUgZXZlbnQgcGF0aAotICAgIGkgPSAw
OwotICAgIHdoaWxlICggKGN1ciA9IGV2ZW50UGF0aFtpKytdKSAmJiAhZXZlbnQuaXNQcm9wYWdh
dGlvblN0b3BwZWQoKSApIHsKLQotICAgIGV2ZW50LnR5cGUgPSBpID4gMSA/Ci0gICAgYnViYmxl
VHlwZSA6Ci0gICAgc3BlY2lhbC5iaW5kVHlwZSB8fCB0eXBlOwotCi0gICAgLy8galF1ZXJ5IGhh
bmRsZXIKLSAgICBoYW5kbGUgPSAoIGpRdWVyeS5fZGF0YSggY3VyLCAiZXZlbnRzIiApIHx8IHt9
IClbIGV2ZW50LnR5cGUgXSAmJiBqUXVlcnkuX2RhdGEoIGN1ciwgImhhbmRsZSIgKTsKLSAgICBp
ZiAoIGhhbmRsZSApIHsKLSAgICBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApOwotICAgIH0KLQot
ICAgIC8vIE5hdGl2ZSBoYW5kbGVyCi0gICAgaGFuZGxlID0gb250eXBlICYmIGN1clsgb250eXBl
IF07Ci0gICAgaWYgKCBoYW5kbGUgJiYgalF1ZXJ5LmFjY2VwdERhdGEoIGN1ciApICYmIGhhbmRs
ZS5hcHBseSAmJiBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApID09PSBmYWxzZSApIHsKLSAgICBl
dmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgIH0KLSAgICB9Ci0gICAgZXZlbnQudHlwZSA9IHR5
cGU7Ci0KLSAgICAvLyBJZiBub2JvZHkgcHJldmVudGVkIHRoZSBkZWZhdWx0IGFjdGlvbiwgZG8g
aXQgbm93Ci0gICAgaWYgKCAhb25seUhhbmRsZXJzICYmICFldmVudC5pc0RlZmF1bHRQcmV2ZW50
ZWQoKSApIHsKLQotICAgIGlmICggKCFzcGVjaWFsLl9kZWZhdWx0IHx8IHNwZWNpYWwuX2RlZmF1
bHQuYXBwbHkoIGVsZW0ub3duZXJEb2N1bWVudCwgZGF0YSApID09PSBmYWxzZSkgJiYKLSAgICAh
KHR5cGUgPT09ICJjbGljayIgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiYSIgKSkgJiYgalF1
ZXJ5LmFjY2VwdERhdGEoIGVsZW0gKSApIHsKLQotICAgIC8vIENhbGwgYSBuYXRpdmUgRE9NIG1l
dGhvZCBvbiB0aGUgdGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZSBuYW1lIGFzIHRoZSBldmVudC4K
LSAgICAvLyBDYW4ndCB1c2UgYW4gLmlzRnVuY3Rpb24oKSBjaGVjayBoZXJlIGJlY2F1c2UgSUU2
LzcgZmFpbHMgdGhhdCB0ZXN0LgotICAgIC8vIERvbid0IGRvIGRlZmF1bHQgYWN0aW9ucyBvbiB3
aW5kb3csIHRoYXQncyB3aGVyZSBnbG9iYWwgdmFyaWFibGVzIGJlICgjNjE3MCkKLSAgICBpZiAo
IG9udHlwZSAmJiBlbGVtWyB0eXBlIF0gJiYgIWpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkgewot
Ci0gICAgLy8gRG9uJ3QgcmUtdHJpZ2dlciBhbiBvbkZPTyBldmVudCB3aGVuIHdlIGNhbGwgaXRz
IEZPTygpIG1ldGhvZAotICAgIHRtcCA9IGVsZW1bIG9udHlwZSBdOwotCi0gICAgaWYgKCB0bXAg
KSB7Ci0gICAgZWxlbVsgb250eXBlIF0gPSBudWxsOwotICAgIH0KLQotICAgIC8vIFByZXZlbnQg
cmUtdHJpZ2dlcmluZyBvZiB0aGUgc2FtZSBldmVudCwgc2luY2Ugd2UgYWxyZWFkeSBidWJibGVk
IGl0IGFib3ZlCi0gICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHR5cGU7Ci0gICAgdHJ5IHsK
LSAgICBlbGVtWyB0eXBlIF0oKTsKLSAgICB9IGNhdGNoICggZSApIHsKLSAgICAvLyBJRTw5IGRp
ZXMgb24gZm9jdXMvYmx1ciB0byBoaWRkZW4gZWxlbWVudCAoIzE0ODYsIzEyNTE4KQotICAgIC8v
IG9ubHkgcmVwcm9kdWNpYmxlIG9uIHdpblhQIElFOCBuYXRpdmUsIG5vdCBJRTkgaW4gSUU4IG1v
ZGUKLSAgICB9Ci0gICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHVuZGVmaW5lZDsKLQotICAg
IGlmICggdG1wICkgewotICAgIGVsZW1bIG9udHlwZSBdID0gdG1wOwotICAgIH0KLSAgICB9Ci0g
ICAgfQotICAgIH0KLQotICAgIHJldHVybiBldmVudC5yZXN1bHQ7Ci0gICAgfSwKLQotICAgIGRp
c3BhdGNoOiBmdW5jdGlvbiggZXZlbnQgKSB7Ci0KLSAgICAvLyBNYWtlIGEgd3JpdGFibGUgalF1
ZXJ5LkV2ZW50IGZyb20gdGhlIG5hdGl2ZSBldmVudCBvYmplY3QKLSAgICBldmVudCA9IGpRdWVy
eS5ldmVudC5maXgoIGV2ZW50ICk7Ci0KLSAgICB2YXIgaSwgcmV0LCBoYW5kbGVPYmosIG1hdGNo
ZWQsIGosCi0gICAgaGFuZGxlclF1ZXVlID0gW10sCi0gICAgYXJncyA9IGNvcmVfc2xpY2UuY2Fs
bCggYXJndW1lbnRzICksCi0gICAgaGFuZGxlcnMgPSAoIGpRdWVyeS5fZGF0YSggdGhpcywgImV2
ZW50cyIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gfHwgW10sCi0gICAgc3BlY2lhbCA9IGpRdWVy
eS5ldmVudC5zcGVjaWFsWyBldmVudC50eXBlIF0gfHwge307Ci0KLSAgICAvLyBVc2UgdGhlIGZp
eC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkpIG5hdGl2ZSBldmVu
dAotICAgIGFyZ3NbMF0gPSBldmVudDsKLSAgICBldmVudC5kZWxlZ2F0ZVRhcmdldCA9IHRoaXM7
Ci0KLSAgICAvLyBDYWxsIHRoZSBwcmVEaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGUs
IGFuZCBsZXQgaXQgYmFpbCBpZiBkZXNpcmVkCi0gICAgaWYgKCBzcGVjaWFsLnByZURpc3BhdGNo
ICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKSA9PT0gZmFsc2UgKSB7
Ci0gICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIERldGVybWluZSBoYW5kbGVycwotICAgIGhh
bmRsZXJRdWV1ZSA9IGpRdWVyeS5ldmVudC5oYW5kbGVycy5jYWxsKCB0aGlzLCBldmVudCwgaGFu
ZGxlcnMgKTsKLQotICAgIC8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8g
c3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzCi0gICAgaSA9IDA7Ci0gICAgd2hpbGUgKCAobWF0
Y2hlZCA9IGhhbmRsZXJRdWV1ZVsgaSsrIF0pICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBl
ZCgpICkgewotICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07Ci0KLSAgICBq
ID0gMDsKLSAgICB3aGlsZSAoIChoYW5kbGVPYmogPSBtYXRjaGVkLmhhbmRsZXJzWyBqKysgXSkg
JiYgIWV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7Ci0KLSAgICAvLyBU
cmlnZ2VyZWQgZXZlbnQgbXVzdCBlaXRoZXIgMSkgaGF2ZSBubyBuYW1lc3BhY2UsIG9yCi0gICAg
Ly8gMikgaGF2ZSBuYW1lc3BhY2UocykgYSBzdWJzZXQgb3IgZXF1YWwgdG8gdGhvc2UgaW4gdGhl
IGJvdW5kIGV2ZW50IChib3RoIGNhbiBoYXZlIG5vIG5hbWVzcGFjZSkuCi0gICAgaWYgKCAhZXZl
bnQubmFtZXNwYWNlX3JlIHx8IGV2ZW50Lm5hbWVzcGFjZV9yZS50ZXN0KCBoYW5kbGVPYmoubmFt
ZXNwYWNlICkgKSB7Ci0KLSAgICBldmVudC5oYW5kbGVPYmogPSBoYW5kbGVPYmo7Ci0gICAgZXZl
bnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhOwotCi0gICAgcmV0ID0gKCAoalF1ZXJ5LmV2ZW50LnNw
ZWNpYWxbIGhhbmRsZU9iai5vcmlnVHlwZSBdIHx8IHt9KS5oYW5kbGUgfHwgaGFuZGxlT2JqLmhh
bmRsZXIgKQotICAgIC5hcHBseSggbWF0Y2hlZC5lbGVtLCBhcmdzICk7Ci0KLSAgICBpZiAoIHJl
dCAhPT0gdW5kZWZpbmVkICkgewotICAgIGlmICggKGV2ZW50LnJlc3VsdCA9IHJldCkgPT09IGZh
bHNlICkgewotICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgZXZlbnQuc3RvcFByb3Bh
Z2F0aW9uKCk7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIC8vIENh
bGwgdGhlIHBvc3REaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGUKLSAgICBpZiAoIHNw
ZWNpYWwucG9zdERpc3BhdGNoICkgewotICAgIHNwZWNpYWwucG9zdERpc3BhdGNoLmNhbGwoIHRo
aXMsIGV2ZW50ICk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGV2ZW50LnJlc3VsdDsKLSAgICB9LAot
Ci0gICAgaGFuZGxlcnM6IGZ1bmN0aW9uKCBldmVudCwgaGFuZGxlcnMgKSB7Ci0gICAgdmFyIHNl
bCwgaGFuZGxlT2JqLCBtYXRjaGVzLCBpLAotICAgIGhhbmRsZXJRdWV1ZSA9IFtdLAotICAgIGRl
bGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LAotICAgIGN1ciA9IGV2ZW50LnRh
cmdldDsKLQotICAgIC8vIEZpbmQgZGVsZWdhdGUgaGFuZGxlcnMKLSAgICAvLyBCbGFjay1ob2xl
IFNWRyA8dXNlPiBpbnN0YW5jZSB0cmVlcyAoIzEzMTgwKQotICAgIC8vIEF2b2lkIG5vbi1sZWZ0
LWNsaWNrIGJ1YmJsaW5nIGluIEZpcmVmb3ggKCMzODYxKQotICAgIGlmICggZGVsZWdhdGVDb3Vu
dCAmJiBjdXIubm9kZVR5cGUgJiYgKCFldmVudC5idXR0b24gfHwgZXZlbnQudHlwZSAhPT0gImNs
aWNrIikgKSB7Ci0KLSAgICBmb3IgKCA7IGN1ciAhPSB0aGlzOyBjdXIgPSBjdXIucGFyZW50Tm9k
ZSB8fCB0aGlzICkgewotCi0gICAgLy8gRG9uJ3QgY2hlY2sgbm9uLWVsZW1lbnRzICgjMTMyMDgp
Ci0gICAgLy8gRG9uJ3QgcHJvY2VzcyBjbGlja3Mgb24gZGlzYWJsZWQgZWxlbWVudHMgKCM2OTEx
LCAjODE2NSwgIzExMzgyLCAjMTE3NjQpCi0gICAgaWYgKCBjdXIubm9kZVR5cGUgPT09IDEgJiYg
KGN1ci5kaXNhYmxlZCAhPT0gdHJ1ZSB8fCBldmVudC50eXBlICE9PSAiY2xpY2siKSApIHsKLSAg
ICBtYXRjaGVzID0gW107Ci0gICAgZm9yICggaSA9IDA7IGkgPCBkZWxlZ2F0ZUNvdW50OyBpKysg
KSB7Ci0gICAgaGFuZGxlT2JqID0gaGFuZGxlcnNbIGkgXTsKLQotICAgIC8vIERvbid0IGNvbmZs
aWN0IHdpdGggT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzICgjMTMyMDMpCi0gICAgc2VsID0g
aGFuZGxlT2JqLnNlbGVjdG9yICsgIiAiOwotCi0gICAgaWYgKCBtYXRjaGVzWyBzZWwgXSA9PT0g
dW5kZWZpbmVkICkgewotICAgIG1hdGNoZXNbIHNlbCBdID0gaGFuZGxlT2JqLm5lZWRzQ29udGV4
dCA/Ci0gICAgalF1ZXJ5KCBzZWwsIHRoaXMgKS5pbmRleCggY3VyICkgPj0gMCA6Ci0gICAgalF1
ZXJ5LmZpbmQoIHNlbCwgdGhpcywgbnVsbCwgWyBjdXIgXSApLmxlbmd0aDsKLSAgICB9Ci0gICAg
aWYgKCBtYXRjaGVzWyBzZWwgXSApIHsKLSAgICBtYXRjaGVzLnB1c2goIGhhbmRsZU9iaiApOwot
ICAgIH0KLSAgICB9Ci0gICAgaWYgKCBtYXRjaGVzLmxlbmd0aCApIHsKLSAgICBoYW5kbGVyUXVl
dWUucHVzaCh7IGVsZW06IGN1ciwgaGFuZGxlcnM6IG1hdGNoZXMgfSk7Ci0gICAgfQotICAgIH0K
LSAgICB9Ci0gICAgfQotCi0gICAgLy8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5LWJvdW5k
KSBoYW5kbGVycwotICAgIGlmICggZGVsZWdhdGVDb3VudCA8IGhhbmRsZXJzLmxlbmd0aCApIHsK
LSAgICBoYW5kbGVyUXVldWUucHVzaCh7IGVsZW06IHRoaXMsIGhhbmRsZXJzOiBoYW5kbGVycy5z
bGljZSggZGVsZWdhdGVDb3VudCApIH0pOwotICAgIH0KLQotICAgIHJldHVybiBoYW5kbGVyUXVl
dWU7Ci0gICAgfSwKLQotICAgIGZpeDogZnVuY3Rpb24oIGV2ZW50ICkgewotICAgIGlmICggZXZl
bnRbIGpRdWVyeS5leHBhbmRvIF0gKSB7Ci0gICAgcmV0dXJuIGV2ZW50OwotICAgIH0KLQotICAg
IC8vIENyZWF0ZSBhIHdyaXRhYmxlIGNvcHkgb2YgdGhlIGV2ZW50IG9iamVjdCBhbmQgbm9ybWFs
aXplIHNvbWUgcHJvcGVydGllcwotICAgIHZhciBpLCBwcm9wLCBjb3B5LAotICAgIHR5cGUgPSBl
dmVudC50eXBlLAotICAgIG9yaWdpbmFsRXZlbnQgPSBldmVudCwKLSAgICBmaXhIb29rID0gdGhp
cy5maXhIb29rc1sgdHlwZSBdOwotCi0gICAgaWYgKCAhZml4SG9vayApIHsKLSAgICB0aGlzLmZp
eEhvb2tzWyB0eXBlIF0gPSBmaXhIb29rID0KLSAgICBybW91c2VFdmVudC50ZXN0KCB0eXBlICkg
PyB0aGlzLm1vdXNlSG9va3MgOgotICAgIHJrZXlFdmVudC50ZXN0KCB0eXBlICkgPyB0aGlzLmtl
eUhvb2tzIDoKLSAgICB7fTsKLSAgICB9Ci0gICAgY29weSA9IGZpeEhvb2sucHJvcHMgPyB0aGlz
LnByb3BzLmNvbmNhdCggZml4SG9vay5wcm9wcyApIDogdGhpcy5wcm9wczsKLQotICAgIGV2ZW50
ID0gbmV3IGpRdWVyeS5FdmVudCggb3JpZ2luYWxFdmVudCApOwotCi0gICAgaSA9IGNvcHkubGVu
Z3RoOwotICAgIHdoaWxlICggaS0tICkgewotICAgIHByb3AgPSBjb3B5WyBpIF07Ci0gICAgZXZl
bnRbIHByb3AgXSA9IG9yaWdpbmFsRXZlbnRbIHByb3AgXTsKLSAgICB9Ci0KLSAgICAvLyBTdXBw
b3J0OiBJRTw5Ci0gICAgLy8gRml4IHRhcmdldCBwcm9wZXJ0eSAoIzE5MjUpCi0gICAgaWYgKCAh
ZXZlbnQudGFyZ2V0ICkgewotICAgIGV2ZW50LnRhcmdldCA9IG9yaWdpbmFsRXZlbnQuc3JjRWxl
bWVudCB8fCBkb2N1bWVudDsKLSAgICB9Ci0KLSAgICAvLyBTdXBwb3J0OiBDaHJvbWUgMjMrLCBT
YWZhcmk/Ci0gICAgLy8gVGFyZ2V0IHNob3VsZCBub3QgYmUgYSB0ZXh0IG5vZGUgKCM1MDQsICMx
MzE0MykKLSAgICBpZiAoIGV2ZW50LnRhcmdldC5ub2RlVHlwZSA9PT0gMyApIHsKLSAgICBldmVu
dC50YXJnZXQgPSBldmVudC50YXJnZXQucGFyZW50Tm9kZTsKLSAgICB9Ci0KLSAgICAvLyBTdXBw
b3J0OiBJRTw5Ci0gICAgLy8gRm9yIG1vdXNlL2tleSBldmVudHMsIG1ldGFLZXk9PWZhbHNlIGlm
IGl0J3MgdW5kZWZpbmVkICgjMzM2OCwgIzExMzI4KQotICAgIGV2ZW50Lm1ldGFLZXkgPSAhIWV2
ZW50Lm1ldGFLZXk7Ci0KLSAgICByZXR1cm4gZml4SG9vay5maWx0ZXIgPyBmaXhIb29rLmZpbHRl
ciggZXZlbnQsIG9yaWdpbmFsRXZlbnQgKSA6IGV2ZW50OwotICAgIH0sCi0KLSAgICAvLyBJbmNs
dWRlcyBzb21lIGV2ZW50IHByb3BzIHNoYXJlZCBieSBLZXlFdmVudCBhbmQgTW91c2VFdmVudAot
ICAgIHByb3BzOiAiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJn
ZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVT
dGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLAotCi0gICAgZml4SG9va3M6IHt9LAotCi0gICAg
a2V5SG9va3M6IHsKLSAgICBwcm9wczogImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0
KCIgIiksCi0gICAgZmlsdGVyOiBmdW5jdGlvbiggZXZlbnQsIG9yaWdpbmFsICkgewotCi0gICAg
Ly8gQWRkIHdoaWNoIGZvciBrZXkgZXZlbnRzCi0gICAgaWYgKCBldmVudC53aGljaCA9PSBudWxs
ICkgewotICAgIGV2ZW50LndoaWNoID0gb3JpZ2luYWwuY2hhckNvZGUgIT0gbnVsbCA/IG9yaWdp
bmFsLmNoYXJDb2RlIDogb3JpZ2luYWwua2V5Q29kZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZXZl
bnQ7Ci0gICAgfQotICAgIH0sCi0KLSAgICBtb3VzZUhvb2tzOiB7Ci0gICAgcHJvcHM6ICJidXR0
b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgZnJvbUVsZW1lbnQgb2Zmc2V0WCBvZmZzZXRZIHBh
Z2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksCi0gICAgZmls
dGVyOiBmdW5jdGlvbiggZXZlbnQsIG9yaWdpbmFsICkgewotICAgIHZhciBib2R5LCBldmVudERv
YywgZG9jLAotICAgIGJ1dHRvbiA9IG9yaWdpbmFsLmJ1dHRvbiwKLSAgICBmcm9tRWxlbWVudCA9
IG9yaWdpbmFsLmZyb21FbGVtZW50OwotCi0gICAgLy8gQ2FsY3VsYXRlIHBhZ2VYL1kgaWYgbWlz
c2luZyBhbmQgY2xpZW50WC9ZIGF2YWlsYWJsZQotICAgIGlmICggZXZlbnQucGFnZVggPT0gbnVs
bCAmJiBvcmlnaW5hbC5jbGllbnRYICE9IG51bGwgKSB7Ci0gICAgZXZlbnREb2MgPSBldmVudC50
YXJnZXQub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudDsKLSAgICBkb2MgPSBldmVudERvYy5kb2N1
bWVudEVsZW1lbnQ7Ci0gICAgYm9keSA9IGV2ZW50RG9jLmJvZHk7Ci0KLSAgICBldmVudC5wYWdl
WCA9IG9yaWdpbmFsLmNsaWVudFggKyAoIGRvYyAmJiBkb2Muc2Nyb2xsTGVmdCB8fCBib2R5ICYm
IGJvZHkuc2Nyb2xsTGVmdCB8fCAwICkgLSAoIGRvYyAmJiBkb2MuY2xpZW50TGVmdCB8fCBib2R5
ICYmIGJvZHkuY2xpZW50TGVmdCB8fCAwICk7Ci0gICAgZXZlbnQucGFnZVkgPSBvcmlnaW5hbC5j
bGllbnRZICsgKCBkb2MgJiYgZG9jLnNjcm9sbFRvcCAgfHwgYm9keSAmJiBib2R5LnNjcm9sbFRv
cCAgfHwgMCApIC0gKCBkb2MgJiYgZG9jLmNsaWVudFRvcCAgfHwgYm9keSAmJiBib2R5LmNsaWVu
dFRvcCAgfHwgMCApOwotICAgIH0KLQotICAgIC8vIEFkZCByZWxhdGVkVGFyZ2V0LCBpZiBuZWNl
c3NhcnkKLSAgICBpZiAoICFldmVudC5yZWxhdGVkVGFyZ2V0ICYmIGZyb21FbGVtZW50ICkgewot
ICAgIGV2ZW50LnJlbGF0ZWRUYXJnZXQgPSBmcm9tRWxlbWVudCA9PT0gZXZlbnQudGFyZ2V0ID8g
b3JpZ2luYWwudG9FbGVtZW50IDogZnJvbUVsZW1lbnQ7Ci0gICAgfQotCi0gICAgLy8gQWRkIHdo
aWNoIGZvciBjbGljazogMSA9PT0gbGVmdDsgMiA9PT0gbWlkZGxlOyAzID09PSByaWdodAotICAg
IC8vIE5vdGU6IGJ1dHRvbiBpcyBub3Qgbm9ybWFsaXplZCwgc28gZG9uJ3QgdXNlIGl0Ci0gICAg
aWYgKCAhZXZlbnQud2hpY2ggJiYgYnV0dG9uICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgZXZlbnQu
d2hpY2ggPSAoIGJ1dHRvbiAmIDEgPyAxIDogKCBidXR0b24gJiAyID8gMyA6ICggYnV0dG9uICYg
NCA/IDIgOiAwICkgKSApOwotICAgIH0KLQotICAgIHJldHVybiBldmVudDsKLSAgICB9Ci0gICAg
fSwKLQotICAgIHNwZWNpYWw6IHsKLSAgICBsb2FkOiB7Ci0gICAgLy8gUHJldmVudCB0cmlnZ2Vy
ZWQgaW1hZ2UubG9hZCBldmVudHMgZnJvbSBidWJibGluZyB0byB3aW5kb3cubG9hZAotICAgIG5v
QnViYmxlOiB0cnVlCi0gICAgfSwKLSAgICBjbGljazogewotICAgIC8vIEZvciBjaGVja2JveCwg
ZmlyZSBuYXRpdmUgZXZlbnQgc28gY2hlY2tlZCBzdGF0ZSB3aWxsIGJlIHJpZ2h0Ci0gICAgdHJp
Z2dlcjogZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCBqUXVlcnkubm9kZU5hbWUoIHRoaXMsICJpbnB1
dCIgKSAmJiB0aGlzLnR5cGUgPT09ICJjaGVja2JveCIgJiYgdGhpcy5jbGljayApIHsKLSAgICB0
aGlzLmNsaWNrKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICB9Ci0gICAgfSwKLSAg
ICBmb2N1czogewotICAgIC8vIEZpcmUgbmF0aXZlIGV2ZW50IGlmIHBvc3NpYmxlIHNvIGJsdXIv
Zm9jdXMgc2VxdWVuY2UgaXMgY29ycmVjdAotICAgIHRyaWdnZXI6IGZ1bmN0aW9uKCkgewotICAg
IGlmICggdGhpcyAhPT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiB0aGlzLmZvY3VzICkgewot
ICAgIHRyeSB7Ci0gICAgdGhpcy5mb2N1cygpOwotICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGNh
dGNoICggZSApIHsKLSAgICAvLyBTdXBwb3J0OiBJRTw5Ci0gICAgLy8gSWYgd2UgZXJyb3Igb24g
Zm9jdXMgdG8gaGlkZGVuIGVsZW1lbnQgKCMxNDg2LCAjMTI1MTgpLAotICAgIC8vIGxldCAudHJp
Z2dlcigpIHJ1biB0aGUgaGFuZGxlcnMKLSAgICB9Ci0gICAgfQotICAgIH0sCi0gICAgZGVsZWdh
dGVUeXBlOiAiZm9jdXNpbiIKLSAgICB9LAotICAgIGJsdXI6IHsKLSAgICB0cmlnZ2VyOiBmdW5j
dGlvbigpIHsKLSAgICBpZiAoIHRoaXMgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgdGhp
cy5ibHVyICkgewotICAgIHRoaXMuYmx1cigpOwotICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgfSwKLSAgICBkZWxlZ2F0ZVR5cGU6ICJmb2N1c291dCIKLSAgICB9LAotCi0gICAgYmVmb3Jl
dW5sb2FkOiB7Ci0gICAgcG9zdERpc3BhdGNoOiBmdW5jdGlvbiggZXZlbnQgKSB7Ci0KLSAgICAv
LyBFdmVuIHdoZW4gcmV0dXJuVmFsdWUgZXF1YWxzIHRvIHVuZGVmaW5lZCBGaXJlZm94IHdpbGwg
c3RpbGwgc2hvdyBhbGVydAotICAgIGlmICggZXZlbnQucmVzdWx0ICE9PSB1bmRlZmluZWQgKSB7
Ci0gICAgZXZlbnQub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZSA9IGV2ZW50LnJlc3VsdDsKLSAg
ICB9Ci0gICAgfQotICAgIH0KLSAgICB9LAotCi0gICAgc2ltdWxhdGU6IGZ1bmN0aW9uKCB0eXBl
LCBlbGVtLCBldmVudCwgYnViYmxlICkgewotICAgIC8vIFBpZ2d5YmFjayBvbiBhIGRvbm9yIGV2
ZW50IHRvIHNpbXVsYXRlIGEgZGlmZmVyZW50IG9uZS4KLSAgICAvLyBGYWtlIG9yaWdpbmFsRXZl
bnQgdG8gYXZvaWQgZG9ub3IncyBzdG9wUHJvcGFnYXRpb24sIGJ1dCBpZiB0aGUKLSAgICAvLyBz
aW11bGF0ZWQgZXZlbnQgcHJldmVudHMgZGVmYXVsdCB0aGVuIHdlIGRvIHRoZSBzYW1lIG9uIHRo
ZSBkb25vci4KLSAgICB2YXIgZSA9IGpRdWVyeS5leHRlbmQoCi0gICAgbmV3IGpRdWVyeS5FdmVu
dCgpLAotICAgIGV2ZW50LAotICAgIHsgdHlwZTogdHlwZSwKLSAgICBpc1NpbXVsYXRlZDogdHJ1
ZSwKLSAgICBvcmlnaW5hbEV2ZW50OiB7fQotICAgIH0KLSAgICApOwotICAgIGlmICggYnViYmxl
ICkgewotICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyKCBlLCBudWxsLCBlbGVtICk7Ci0gICAgfSBl
bHNlIHsKLSAgICBqUXVlcnkuZXZlbnQuZGlzcGF0Y2guY2FsbCggZWxlbSwgZSApOwotICAgIH0K
LSAgICBpZiAoIGUuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7Ci0gICAgZXZlbnQucHJldmVudERl
ZmF1bHQoKTsKLSAgICB9Ci0gICAgfQotfTsKLQotalF1ZXJ5LnJlbW92ZUV2ZW50ID0gZG9jdW1l
bnQucmVtb3ZlRXZlbnRMaXN0ZW5lciA/Ci0gICAgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRs
ZSApIHsKLSAgICBpZiAoIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciApIHsKLSAgICBlbGVtLnJl
bW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIGhhbmRsZSwgZmFsc2UgKTsKLSAgICB9Ci0gICAgfSA6
Ci0gICAgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHsKLSAgICB2YXIgbmFtZSA9ICJv
biIgKyB0eXBlOwotCi0gICAgaWYgKCBlbGVtLmRldGFjaEV2ZW50ICkgewotCi0gICAgLy8gIzg1
NDUsICM3MDU0LCBwcmV2ZW50aW5nIG1lbW9yeSBsZWFrcyBmb3IgY3VzdG9tIGV2ZW50cyBpbiBJ
RTYtOAotICAgIC8vIGRldGFjaEV2ZW50IG5lZWRlZCBwcm9wZXJ0eSBvbiBlbGVtZW50LCBieSBu
YW1lIG9mIHRoYXQgZXZlbnQsIHRvIHByb3Blcmx5IGV4cG9zZSBpdCB0byBHQwotICAgIGlmICgg
dHlwZW9mIGVsZW1bIG5hbWUgXSA9PT0gY29yZV9zdHJ1bmRlZmluZWQgKSB7Ci0gICAgZWxlbVsg
bmFtZSBdID0gbnVsbDsKLSAgICB9Ci0KLSAgICBlbGVtLmRldGFjaEV2ZW50KCBuYW1lLCBoYW5k
bGUgKTsKLSAgICB9Ci0gICAgfTsKLQotalF1ZXJ5LkV2ZW50ID0gZnVuY3Rpb24oIHNyYywgcHJv
cHMgKSB7Ci0gICAgLy8gQWxsb3cgaW5zdGFudGlhdGlvbiB3aXRob3V0IHRoZSAnbmV3JyBrZXl3
b3JkCi0gICAgaWYgKCAhKHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQpICkgewotICAgIHJl
dHVybiBuZXcgalF1ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7Ci0gICAgfQotCi0gICAgLy8gRXZl
bnQgb2JqZWN0Ci0gICAgaWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7Ci0gICAgdGhpcy5vcmlnaW5h
bEV2ZW50ID0gc3JjOwotICAgIHRoaXMudHlwZSA9IHNyYy50eXBlOwotCi0gICAgLy8gRXZlbnRz
IGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50
ZWQKLSAgICAvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUg
Y29ycmVjdCB2YWx1ZS4KLSAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9ICggc3JjLmRlZmF1
bHRQcmV2ZW50ZWQgfHwgc3JjLnJldHVyblZhbHVlID09PSBmYWxzZSB8fAotICAgIHNyYy5nZXRQ
cmV2ZW50RGVmYXVsdCAmJiBzcmMuZ2V0UHJldmVudERlZmF1bHQoKSApID8gcmV0dXJuVHJ1ZSA6
IHJldHVybkZhbHNlOwotCi0gICAgLy8gRXZlbnQgdHlwZQotICAgIH0gZWxzZSB7Ci0gICAgdGhp
cy50eXBlID0gc3JjOwotICAgIH0KLQotICAgIC8vIFB1dCBleHBsaWNpdGx5IHByb3ZpZGVkIHBy
b3BlcnRpZXMgb250byB0aGUgZXZlbnQgb2JqZWN0Ci0gICAgaWYgKCBwcm9wcyApIHsKLSAgICBq
UXVlcnkuZXh0ZW5kKCB0aGlzLCBwcm9wcyApOwotICAgIH0KLQotICAgIC8vIENyZWF0ZSBhIHRp
bWVzdGFtcCBpZiBpbmNvbWluZyBldmVudCBkb2Vzbid0IGhhdmUgb25lCi0gICAgdGhpcy50aW1l
U3RhbXAgPSBzcmMgJiYgc3JjLnRpbWVTdGFtcCB8fCBqUXVlcnkubm93KCk7Ci0KLSAgICAvLyBN
YXJrIGl0IGFzIGZpeGVkCi0gICAgdGhpc1sgalF1ZXJ5LmV4cGFuZG8gXSA9IHRydWU7Ci19Owot
Ci0vLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVkIGJ5
IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmcKLS8vIGh0dHA6Ly93d3cudzMub3JnL1RS
LzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcu
aHRtbAotalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHsKLSAgICBpc0RlZmF1bHRQcmV2ZW50ZWQ6
IHJldHVybkZhbHNlLAotICAgIGlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSwKLSAg
ICBpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsCi0KLSAgICBwcmV2
ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7
Ci0KLSAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVyblRydWU7Ci0gICAgaWYgKCAh
ZSApIHsKLSAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgcHJldmVudERlZmF1bHQgZXhp
c3RzLCBydW4gaXQgb24gdGhlIG9yaWdpbmFsIGV2ZW50Ci0gICAgaWYgKCBlLnByZXZlbnREZWZh
dWx0ICkgewotICAgIGUucHJldmVudERlZmF1bHQoKTsKLQotICAgIC8vIFN1cHBvcnQ6IElFCi0g
ICAgLy8gT3RoZXJ3aXNlIHNldCB0aGUgcmV0dXJuVmFsdWUgcHJvcGVydHkgb2YgdGhlIG9yaWdp
bmFsIGV2ZW50IHRvIGZhbHNlCi0gICAgfSBlbHNlIHsKLSAgICBlLnJldHVyblZhbHVlID0gZmFs
c2U7Ci0gICAgfQotICAgIH0sCi0gICAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHsKLSAg
ICB2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDsKLQotICAgIHRoaXMuaXNQcm9wYWdhdGlvblN0
b3BwZWQgPSByZXR1cm5UcnVlOwotICAgIGlmICggIWUgKSB7Ci0gICAgcmV0dXJuOwotICAgIH0K
LSAgICAvLyBJZiBzdG9wUHJvcGFnYXRpb24gZXhpc3RzLCBydW4gaXQgb24gdGhlIG9yaWdpbmFs
IGV2ZW50Ci0gICAgaWYgKCBlLnN0b3BQcm9wYWdhdGlvbiApIHsKLSAgICBlLnN0b3BQcm9wYWdh
dGlvbigpOwotICAgIH0KLQotICAgIC8vIFN1cHBvcnQ6IElFCi0gICAgLy8gU2V0IHRoZSBjYW5j
ZWxCdWJibGUgcHJvcGVydHkgb2YgdGhlIG9yaWdpbmFsIGV2ZW50IHRvIHRydWUKLSAgICBlLmNh
bmNlbEJ1YmJsZSA9IHRydWU7Ci0gICAgfSwKLSAgICBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246
IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSBy
ZXR1cm5UcnVlOwotICAgIHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgfQotfTsKLQotLy8g
Q3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUgZXZlbnRzIHVzaW5nIG1vdXNlb3Zlci9vdXQgYW5kIGV2
ZW50LXRpbWUgY2hlY2tzCi1qUXVlcnkuZWFjaCh7Ci0gICAgbW91c2VlbnRlcjogIm1vdXNlb3Zl
ciIsCi0gICAgbW91c2VsZWF2ZTogIm1vdXNlb3V0IgotfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCAp
IHsKLSAgICBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgb3JpZyBdID0gewotICAgIGRlbGVnYXRlVHlw
ZTogZml4LAotICAgIGJpbmRUeXBlOiBmaXgsCi0KLSAgICBoYW5kbGU6IGZ1bmN0aW9uKCBldmVu
dCApIHsKLSAgICB2YXIgcmV0LAotICAgIHRhcmdldCA9IHRoaXMsCi0gICAgcmVsYXRlZCA9IGV2
ZW50LnJlbGF0ZWRUYXJnZXQsCi0gICAgaGFuZGxlT2JqID0gZXZlbnQuaGFuZGxlT2JqOwotCi0g
ICAgLy8gRm9yIG1vdXNlbnRlci9sZWF2ZSBjYWxsIHRoZSBoYW5kbGVyIGlmIHJlbGF0ZWQgaXMg
b3V0c2lkZSB0aGUgdGFyZ2V0LgotICAgIC8vIE5COiBObyByZWxhdGVkVGFyZ2V0IGlmIHRoZSBt
b3VzZSBsZWZ0L2VudGVyZWQgdGhlIGJyb3dzZXIgd2luZG93Ci0gICAgaWYgKCAhcmVsYXRlZCB8
fCAocmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRl
ZCApKSApIHsKLSAgICBldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlOwotICAgIHJldCA9
IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKLSAgICBldmVudC50
eXBlID0gZml4OwotICAgIH0KLSAgICByZXR1cm4gcmV0OwotICAgIH0KLSAgICB9OwotfSk7Ci0K
LS8vIElFIHN1Ym1pdCBkZWxlZ2F0aW9uCi1pZiAoICFqUXVlcnkuc3VwcG9ydC5zdWJtaXRCdWJi
bGVzICkgewotCi0gICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWwuc3VibWl0ID0gewotICAgIHNldHVw
OiBmdW5jdGlvbigpIHsKLSAgICAvLyBPbmx5IG5lZWQgdGhpcyBmb3IgZGVsZWdhdGVkIGZvcm0g
c3VibWl0IGV2ZW50cwotICAgIGlmICggalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCAiZm9ybSIgKSAp
IHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gTGF6eS1hZGQgYSBzdWJtaXQg
aGFuZGxlciB3aGVuIGEgZGVzY2VuZGFudCBmb3JtIG1heSBwb3RlbnRpYWxseSBiZSBzdWJtaXR0
ZWQKLSAgICBqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCAiY2xpY2suX3N1Ym1pdCBrZXlwcmVzcy5f
c3VibWl0IiwgZnVuY3Rpb24oIGUgKSB7Ci0gICAgLy8gTm9kZSBuYW1lIGNoZWNrIGF2b2lkcyBh
IFZNTC1yZWxhdGVkIGNyYXNoIGluIElFICgjOTgwNykKLSAgICB2YXIgZWxlbSA9IGUudGFyZ2V0
LAotICAgIGZvcm0gPSBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJpbnB1dCIgKSB8fCBqUXVlcnku
bm9kZU5hbWUoIGVsZW0sICJidXR0b24iICkgPyBlbGVtLmZvcm0gOiB1bmRlZmluZWQ7Ci0gICAg
aWYgKCBmb3JtICYmICFqUXVlcnkuX2RhdGEoIGZvcm0sICJzdWJtaXRCdWJibGVzIiApICkgewot
ICAgIGpRdWVyeS5ldmVudC5hZGQoIGZvcm0sICJzdWJtaXQuX3N1Ym1pdCIsIGZ1bmN0aW9uKCBl
dmVudCApIHsKLSAgICBldmVudC5fc3VibWl0X2J1YmJsZSA9IHRydWU7Ci0gICAgfSk7Ci0gICAg
alF1ZXJ5Ll9kYXRhKCBmb3JtLCAic3VibWl0QnViYmxlcyIsIHRydWUgKTsKLSAgICB9Ci0gICAg
fSk7Ci0gICAgLy8gcmV0dXJuIHVuZGVmaW5lZCBzaW5jZSB3ZSBkb24ndCBuZWVkIGFuIGV2ZW50
IGxpc3RlbmVyCi0gICAgfSwKLQotICAgIHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkg
ewotICAgIC8vIElmIGZvcm0gd2FzIHN1Ym1pdHRlZCBieSB0aGUgdXNlciwgYnViYmxlIHRoZSBl
dmVudCB1cCB0aGUgdHJlZQotICAgIGlmICggZXZlbnQuX3N1Ym1pdF9idWJibGUgKSB7Ci0gICAg
ZGVsZXRlIGV2ZW50Ll9zdWJtaXRfYnViYmxlOwotICAgIGlmICggdGhpcy5wYXJlbnROb2RlICYm
ICFldmVudC5pc1RyaWdnZXIgKSB7Ci0gICAgalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCAic3VibWl0
IiwgdGhpcy5wYXJlbnROb2RlLCBldmVudCwgdHJ1ZSApOwotICAgIH0KLSAgICB9Ci0gICAgfSwK
LQotICAgIHRlYXJkb3duOiBmdW5jdGlvbigpIHsKLSAgICAvLyBPbmx5IG5lZWQgdGhpcyBmb3Ig
ZGVsZWdhdGVkIGZvcm0gc3VibWl0IGV2ZW50cwotICAgIGlmICggalF1ZXJ5Lm5vZGVOYW1lKCB0
aGlzLCAiZm9ybSIgKSApIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gUmVt
b3ZlIGRlbGVnYXRlZCBoYW5kbGVyczsgY2xlYW5EYXRhIGV2ZW50dWFsbHkgcmVhcHMgc3VibWl0
IGhhbmRsZXJzIGF0dGFjaGVkIGFib3ZlCi0gICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywg
Ii5fc3VibWl0IiApOwotICAgIH0KLSAgICB9OwotfQotCi0vLyBJRSBjaGFuZ2UgZGVsZWdhdGlv
biBhbmQgY2hlY2tib3gvcmFkaW8gZml4Ci1pZiAoICFqUXVlcnkuc3VwcG9ydC5jaGFuZ2VCdWJi
bGVzICkgewotCi0gICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWwuY2hhbmdlID0gewotCi0gICAgc2V0
dXA6IGZ1bmN0aW9uKCkgewotCi0gICAgaWYgKCByZm9ybUVsZW1zLnRlc3QoIHRoaXMubm9kZU5h
bWUgKSApIHsKLSAgICAvLyBJRSBkb2Vzbid0IGZpcmUgY2hhbmdlIG9uIGEgY2hlY2svcmFkaW8g
dW50aWwgYmx1cjsgdHJpZ2dlciBpdCBvbiBjbGljawotICAgIC8vIGFmdGVyIGEgcHJvcGVydHlj
aGFuZ2UuIEVhdCB0aGUgYmx1ci1jaGFuZ2UgaW4gc3BlY2lhbC5jaGFuZ2UuaGFuZGxlLgotICAg
IC8vIFRoaXMgc3RpbGwgZmlyZXMgb25jaGFuZ2UgYSBzZWNvbmQgdGltZSBmb3IgY2hlY2svcmFk
aW8gYWZ0ZXIgYmx1ci4KLSAgICBpZiAoIHRoaXMudHlwZSA9PT0gImNoZWNrYm94IiB8fCB0aGlz
LnR5cGUgPT09ICJyYWRpbyIgKSB7Ci0gICAgalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgInByb3Bl
cnR5Y2hhbmdlLl9jaGFuZ2UiLCBmdW5jdGlvbiggZXZlbnQgKSB7Ci0gICAgaWYgKCBldmVudC5v
cmlnaW5hbEV2ZW50LnByb3BlcnR5TmFtZSA9PT0gImNoZWNrZWQiICkgewotICAgIHRoaXMuX2p1
c3RfY2hhbmdlZCA9IHRydWU7Ci0gICAgfQotICAgIH0pOwotICAgIGpRdWVyeS5ldmVudC5hZGQo
IHRoaXMsICJjbGljay5fY2hhbmdlIiwgZnVuY3Rpb24oIGV2ZW50ICkgewotICAgIGlmICggdGhp
cy5fanVzdF9jaGFuZ2VkICYmICFldmVudC5pc1RyaWdnZXIgKSB7Ci0gICAgdGhpcy5fanVzdF9j
aGFuZ2VkID0gZmFsc2U7Ci0gICAgfQotICAgIC8vIEFsbG93IHRyaWdnZXJlZCwgc2ltdWxhdGVk
IGNoYW5nZSBldmVudHMgKCMxMTUwMCkKLSAgICBqUXVlcnkuZXZlbnQuc2ltdWxhdGUoICJjaGFu
Z2UiLCB0aGlzLCBldmVudCwgdHJ1ZSApOwotICAgIH0pOwotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIC8vIERlbGVnYXRlZCBldmVudDsgbGF6eS1hZGQgYSBjaGFuZ2UgaGFu
ZGxlciBvbiBkZXNjZW5kYW50IGlucHV0cwotICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsICJi
ZWZvcmVhY3RpdmF0ZS5fY2hhbmdlIiwgZnVuY3Rpb24oIGUgKSB7Ci0gICAgdmFyIGVsZW0gPSBl
LnRhcmdldDsKLQotICAgIGlmICggcmZvcm1FbGVtcy50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiYg
IWpRdWVyeS5fZGF0YSggZWxlbSwgImNoYW5nZUJ1YmJsZXMiICkgKSB7Ci0gICAgalF1ZXJ5LmV2
ZW50LmFkZCggZWxlbSwgImNoYW5nZS5fY2hhbmdlIiwgZnVuY3Rpb24oIGV2ZW50ICkgewotICAg
IGlmICggdGhpcy5wYXJlbnROb2RlICYmICFldmVudC5pc1NpbXVsYXRlZCAmJiAhZXZlbnQuaXNU
cmlnZ2VyICkgewotICAgIGpRdWVyeS5ldmVudC5zaW11bGF0ZSggImNoYW5nZSIsIHRoaXMucGFy
ZW50Tm9kZSwgZXZlbnQsIHRydWUgKTsKLSAgICB9Ci0gICAgfSk7Ci0gICAgalF1ZXJ5Ll9kYXRh
KCBlbGVtLCAiY2hhbmdlQnViYmxlcyIsIHRydWUgKTsKLSAgICB9Ci0gICAgfSk7Ci0gICAgfSwK
LQotICAgIGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkgewotICAgIHZhciBlbGVtID0gZXZlbnQu
dGFyZ2V0OwotCi0gICAgLy8gU3dhbGxvdyBuYXRpdmUgY2hhbmdlIGV2ZW50cyBmcm9tIGNoZWNr
Ym94L3JhZGlvLCB3ZSBhbHJlYWR5IHRyaWdnZXJlZCB0aGVtIGFib3ZlCi0gICAgaWYgKCB0aGlz
ICE9PSBlbGVtIHx8IGV2ZW50LmlzU2ltdWxhdGVkIHx8IGV2ZW50LmlzVHJpZ2dlciB8fCAoZWxl
bS50eXBlICE9PSAicmFkaW8iICYmIGVsZW0udHlwZSAhPT0gImNoZWNrYm94IikgKSB7Ci0gICAg
cmV0dXJuIGV2ZW50LmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsK
LSAgICB9Ci0gICAgfSwKLQotICAgIHRlYXJkb3duOiBmdW5jdGlvbigpIHsKLSAgICBqUXVlcnku
ZXZlbnQucmVtb3ZlKCB0aGlzLCAiLl9jaGFuZ2UiICk7Ci0KLSAgICByZXR1cm4gIXJmb3JtRWxl
bXMudGVzdCggdGhpcy5ub2RlTmFtZSApOwotICAgIH0KLSAgICB9OwotfQotCi0vLyBDcmVhdGUg
ImJ1YmJsaW5nIiBmb2N1cyBhbmQgYmx1ciBldmVudHMKLWlmICggIWpRdWVyeS5zdXBwb3J0LmZv
Y3VzaW5CdWJibGVzICkgewotICAgIGpRdWVyeS5lYWNoKHsgZm9jdXM6ICJmb2N1c2luIiwgYmx1
cjogImZvY3Vzb3V0IiB9LCBmdW5jdGlvbiggb3JpZywgZml4ICkgewotCi0gICAgLy8gQXR0YWNo
IGEgc2luZ2xlIGNhcHR1cmluZyBoYW5kbGVyIHdoaWxlIHNvbWVvbmUgd2FudHMgZm9jdXNpbi9m
b2N1c291dAotICAgIHZhciBhdHRhY2hlcyA9IDAsCi0gICAgaGFuZGxlciA9IGZ1bmN0aW9uKCBl
dmVudCApIHsKLSAgICBqUXVlcnkuZXZlbnQuc2ltdWxhdGUoIGZpeCwgZXZlbnQudGFyZ2V0LCBq
UXVlcnkuZXZlbnQuZml4KCBldmVudCApLCB0cnVlICk7Ci0gICAgfTsKLQotICAgIGpRdWVyeS5l
dmVudC5zcGVjaWFsWyBmaXggXSA9IHsKLSAgICBzZXR1cDogZnVuY3Rpb24oKSB7Ci0gICAgaWYg
KCBhdHRhY2hlcysrID09PSAwICkgewotICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIG9y
aWcsIGhhbmRsZXIsIHRydWUgKTsKLSAgICB9Ci0gICAgfSwKLSAgICB0ZWFyZG93bjogZnVuY3Rp
b24oKSB7Ci0gICAgaWYgKCAtLWF0dGFjaGVzID09PSAwICkgewotICAgIGRvY3VtZW50LnJlbW92
ZUV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTsKLSAgICB9Ci0gICAgfQotICAg
IH07Ci0gICAgfSk7Ci19Ci0KLWpRdWVyeS5mbi5leHRlbmQoewotCi0gICAgb246IGZ1bmN0aW9u
KCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAvKklOVEVSTkFMKi8gb25lICkgewotICAgIHZh
ciB0eXBlLCBvcmlnRm47Ci0KLSAgICAvLyBUeXBlcyBjYW4gYmUgYSBtYXAgb2YgdHlwZXMvaGFu
ZGxlcnMKLSAgICBpZiAoIHR5cGVvZiB0eXBlcyA9PT0gIm9iamVjdCIgKSB7Ci0gICAgLy8gKCB0
eXBlcy1PYmplY3QsIHNlbGVjdG9yLCBkYXRhICkKLSAgICBpZiAoIHR5cGVvZiBzZWxlY3RvciAh
PT0gInN0cmluZyIgKSB7Ci0gICAgLy8gKCB0eXBlcy1PYmplY3QsIGRhdGEgKQotICAgIGRhdGEg
PSBkYXRhIHx8IHNlbGVjdG9yOwotICAgIHNlbGVjdG9yID0gdW5kZWZpbmVkOwotICAgIH0KLSAg
ICBmb3IgKCB0eXBlIGluIHR5cGVzICkgewotICAgIHRoaXMub24oIHR5cGUsIHNlbGVjdG9yLCBk
YXRhLCB0eXBlc1sgdHlwZSBdLCBvbmUgKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRoaXM7Ci0gICAg
fQotCi0gICAgaWYgKCBkYXRhID09IG51bGwgJiYgZm4gPT0gbnVsbCApIHsKLSAgICAvLyAoIHR5
cGVzLCBmbiApCi0gICAgZm4gPSBzZWxlY3RvcjsKLSAgICBkYXRhID0gc2VsZWN0b3IgPSB1bmRl
ZmluZWQ7Ci0gICAgfSBlbHNlIGlmICggZm4gPT0gbnVsbCApIHsKLSAgICBpZiAoIHR5cGVvZiBz
ZWxlY3RvciA9PT0gInN0cmluZyIgKSB7Ci0gICAgLy8gKCB0eXBlcywgc2VsZWN0b3IsIGZuICkK
LSAgICBmbiA9IGRhdGE7Ci0gICAgZGF0YSA9IHVuZGVmaW5lZDsKLSAgICB9IGVsc2UgewotICAg
IC8vICggdHlwZXMsIGRhdGEsIGZuICkKLSAgICBmbiA9IGRhdGE7Ci0gICAgZGF0YSA9IHNlbGVj
dG9yOwotICAgIHNlbGVjdG9yID0gdW5kZWZpbmVkOwotICAgIH0KLSAgICB9Ci0gICAgaWYgKCBm
biA9PT0gZmFsc2UgKSB7Ci0gICAgZm4gPSByZXR1cm5GYWxzZTsKLSAgICB9IGVsc2UgaWYgKCAh
Zm4gKSB7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgaWYgKCBvbmUgPT09IDEgKSB7
Ci0gICAgb3JpZ0ZuID0gZm47Ci0gICAgZm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7Ci0gICAgLy8g
Q2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBpbmZvCi0gICAg
alF1ZXJ5KCkub2ZmKCBldmVudCApOwotICAgIHJldHVybiBvcmlnRm4uYXBwbHkoIHRoaXMsIGFy
Z3VtZW50cyApOwotICAgIH07Ci0gICAgLy8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJl
bW92ZSB1c2luZyBvcmlnRm4KLSAgICBmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4u
Z3VpZCA9IGpRdWVyeS5ndWlkKysgKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRoaXMuZWFjaCggZnVu
Y3Rpb24oKSB7Ci0gICAgalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZXMsIGZuLCBkYXRhLCBz
ZWxlY3RvciApOwotICAgIH0pOwotICAgIH0sCi0gICAgb25lOiBmdW5jdGlvbiggdHlwZXMsIHNl
bGVjdG9yLCBkYXRhLCBmbiApIHsKLSAgICByZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9y
LCBkYXRhLCBmbiwgMSApOwotICAgIH0sCi0gICAgb2ZmOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVj
dG9yLCBmbiApIHsKLSAgICB2YXIgaGFuZGxlT2JqLCB0eXBlOwotICAgIGlmICggdHlwZXMgJiYg
dHlwZXMucHJldmVudERlZmF1bHQgJiYgdHlwZXMuaGFuZGxlT2JqICkgewotICAgIC8vICggZXZl
bnQgKSAgZGlzcGF0Y2hlZCBqUXVlcnkuRXZlbnQKLSAgICBoYW5kbGVPYmogPSB0eXBlcy5oYW5k
bGVPYmo7Ci0gICAgalF1ZXJ5KCB0eXBlcy5kZWxlZ2F0ZVRhcmdldCApLm9mZigKLSAgICBoYW5k
bGVPYmoubmFtZXNwYWNlID8gaGFuZGxlT2JqLm9yaWdUeXBlICsgIi4iICsgaGFuZGxlT2JqLm5h
bWVzcGFjZSA6IGhhbmRsZU9iai5vcmlnVHlwZSwKLSAgICBoYW5kbGVPYmouc2VsZWN0b3IsCi0g
ICAgaGFuZGxlT2JqLmhhbmRsZXIKLSAgICApOwotICAgIHJldHVybiB0aGlzOwotICAgIH0KLSAg
ICBpZiAoIHR5cGVvZiB0eXBlcyA9PT0gIm9iamVjdCIgKSB7Ci0gICAgLy8gKCB0eXBlcy1vYmpl
Y3QgWywgc2VsZWN0b3JdICkKLSAgICBmb3IgKCB0eXBlIGluIHR5cGVzICkgewotICAgIHRoaXMu
b2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNbIHR5cGUgXSApOwotICAgIH0KLSAgICByZXR1cm4g
dGhpczsKLSAgICB9Ci0gICAgaWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlwZW9mIHNlbGVj
dG9yID09PSAiZnVuY3Rpb24iICkgewotICAgIC8vICggdHlwZXMgWywgZm5dICkKLSAgICBmbiA9
IHNlbGVjdG9yOwotICAgIHNlbGVjdG9yID0gdW5kZWZpbmVkOwotICAgIH0KLSAgICBpZiAoIGZu
ID09PSBmYWxzZSApIHsKLSAgICBmbiA9IHJldHVybkZhbHNlOwotICAgIH0KLSAgICByZXR1cm4g
dGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsIHR5
cGVzLCBmbiwgc2VsZWN0b3IgKTsKLSAgICB9KTsKLSAgICB9LAotCi0gICAgYmluZDogZnVuY3Rp
b24oIHR5cGVzLCBkYXRhLCBmbiApIHsKLSAgICByZXR1cm4gdGhpcy5vbiggdHlwZXMsIG51bGws
IGRhdGEsIGZuICk7Ci0gICAgfSwKLSAgICB1bmJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7
Ci0gICAgcmV0dXJuIHRoaXMub2ZmKCB0eXBlcywgbnVsbCwgZm4gKTsKLSAgICB9LAotCi0gICAg
ZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkgewotICAgIHJl
dHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7Ci0gICAgfSwKLSAgICB1
bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHsKLSAgICAvLyAoIG5h
bWVzcGFjZSApIG9yICggc2VsZWN0b3IsIHR5cGVzIFssIGZuXSApCi0gICAgcmV0dXJuIGFyZ3Vt
ZW50cy5sZW5ndGggPT09IDEgPyB0aGlzLm9mZiggc2VsZWN0b3IsICIqKiIgKSA6IHRoaXMub2Zm
KCB0eXBlcywgc2VsZWN0b3IgfHwgIioqIiwgZm4gKTsKLSAgICB9LAotCi0gICAgdHJpZ2dlcjog
ZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7Ci0gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigp
IHsKLSAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpcyApOwotICAgIH0p
OwotICAgIH0sCi0gICAgdHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkgewot
ICAgIHZhciBlbGVtID0gdGhpc1swXTsKLSAgICBpZiAoIGVsZW0gKSB7Ci0gICAgcmV0dXJuIGpR
dWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCBlbGVtLCB0cnVlICk7Ci0gICAgfQotICAg
IH0KLX0pOwotLyohCi0gKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZQotICogQ29weXJpZ2h0
IDIwMTIgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycwotICogUmVsZWFz
ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCi0gKiBodHRwOi8vc2l6emxlanMuY29tLwotICovCi0o
ZnVuY3Rpb24oIHdpbmRvdywgdW5kZWZpbmVkICkgewotCi12YXIgaSwKLSAgICBjYWNoZWRydW5z
LAotICAgIEV4cHIsCi0gICAgZ2V0VGV4dCwKLSAgICBpc1hNTCwKLSAgICBjb21waWxlLAotICAg
IGhhc0R1cGxpY2F0ZSwKLSAgICBvdXRlcm1vc3RDb250ZXh0LAotCi0gICAgLy8gTG9jYWwgZG9j
dW1lbnQgdmFycwotICAgIHNldERvY3VtZW50LAotICAgIGRvY3VtZW50LAotICAgIGRvY0VsZW0s
Ci0gICAgZG9jdW1lbnRJc1hNTCwKLSAgICByYnVnZ3lRU0EsCi0gICAgcmJ1Z2d5TWF0Y2hlcywK
LSAgICBtYXRjaGVzLAotICAgIGNvbnRhaW5zLAotICAgIHNvcnRPcmRlciwKLQotICAgIC8vIElu
c3RhbmNlLXNwZWNpZmljIGRhdGEKLSAgICBleHBhbmRvID0gInNpenpsZSIgKyAtKG5ldyBEYXRl
KCkpLAotICAgIHByZWZlcnJlZERvYyA9IHdpbmRvdy5kb2N1bWVudCwKLSAgICBzdXBwb3J0ID0g
e30sCi0gICAgZGlycnVucyA9IDAsCi0gICAgZG9uZSA9IDAsCi0gICAgY2xhc3NDYWNoZSA9IGNy
ZWF0ZUNhY2hlKCksCi0gICAgdG9rZW5DYWNoZSA9IGNyZWF0ZUNhY2hlKCksCi0gICAgY29tcGls
ZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksCi0KLSAgICAvLyBHZW5lcmFsLXB1cnBvc2UgY29uc3Rh
bnRzCi0gICAgc3RydW5kZWZpbmVkID0gdHlwZW9mIHVuZGVmaW5lZCwKLSAgICBNQVhfTkVHQVRJ
VkUgPSAxIDw8IDMxLAotCi0gICAgLy8gQXJyYXkgbWV0aG9kcwotICAgIGFyciA9IFtdLAotICAg
IHBvcCA9IGFyci5wb3AsCi0gICAgcHVzaCA9IGFyci5wdXNoLAotICAgIHNsaWNlID0gYXJyLnNs
aWNlLAotICAgIC8vIFVzZSBhIHN0cmlwcGVkLWRvd24gaW5kZXhPZiBpZiB3ZSBjYW4ndCB1c2Ug
YSBuYXRpdmUgb25lCi0gICAgaW5kZXhPZiA9IGFyci5pbmRleE9mIHx8IGZ1bmN0aW9uKCBlbGVt
ICkgewotICAgIHZhciBpID0gMCwKLSAgICBsZW4gPSB0aGlzLmxlbmd0aDsKLSAgICBmb3IgKCA7
IGkgPCBsZW47IGkrKyApIHsKLSAgICBpZiAoIHRoaXNbaV0gPT09IGVsZW0gKSB7Ci0gICAgcmV0
dXJuIGk7Ci0gICAgfQotICAgIH0KLSAgICByZXR1cm4gLTE7Ci0gICAgfSwKLQotCi0gICAgLy8g
UmVndWxhciBleHByZXNzaW9ucwotCi0gICAgLy8gV2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGh0dHA6
Ly93d3cudzMub3JnL1RSL2NzczMtc2VsZWN0b3JzLyN3aGl0ZXNwYWNlCi0gICAgd2hpdGVzcGFj
ZSA9ICJbXFx4MjBcXHRcXHJcXG5cXGZdIiwKLSAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9j
c3MzLXN5bnRheC8jY2hhcmFjdGVycwotICAgIGNoYXJhY3RlckVuY29kaW5nID0gIig/OlxcXFwu
fFtcXHctXXxbXlxceDAwLVxceGEwXSkrIiwKLQotICAgIC8vIExvb3NlbHkgbW9kZWxlZCBvbiBD
U1MgaWRlbnRpZmllciBjaGFyYWN0ZXJzCi0gICAgLy8gQW4gdW5xdW90ZWQgdmFsdWUgc2hvdWxk
IGJlIGEgQ1NTIGlkZW50aWZpZXIgaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMv
I2F0dHJpYnV0ZS1zZWxlY3RvcnMKLSAgICAvLyBQcm9wZXIgc3ludGF4OiBodHRwOi8vd3d3Lncz
Lm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjdmFsdWUtZGVmLWlkZW50aWZpZXIKLSAgICBpZGVu
dGlmaWVyID0gY2hhcmFjdGVyRW5jb2RpbmcucmVwbGFjZSggInciLCAidyMiICksCi0KLSAgICAv
LyBBY2NlcHRhYmxlIG9wZXJhdG9ycyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2F0
dHJpYnV0ZS1zZWxlY3RvcnMKLSAgICBvcGVyYXRvcnMgPSAiKFsqXiR8IX5dPz0pIiwKLSAgICBh
dHRyaWJ1dGVzID0gIlxcWyIgKyB3aGl0ZXNwYWNlICsgIiooIiArIGNoYXJhY3RlckVuY29kaW5n
ICsgIikiICsgd2hpdGVzcGFjZSArCi0gICAgIiooPzoiICsgb3BlcmF0b3JzICsgd2hpdGVzcGFj
ZSArICIqKD86KFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcM3woIiArIGlkZW50aWZpZXIg
KyAiKXwpfCkiICsgd2hpdGVzcGFjZSArICIqXFxdIiwKLQotICAgIC8vIFByZWZlciBhcmd1bWVu
dHMgcXVvdGVkLAotICAgIC8vICAgdGhlbiBub3QgY29udGFpbmluZyBwc2V1ZG9zL2JyYWNrZXRz
LAotICAgIC8vICAgdGhlbiBhdHRyaWJ1dGUgc2VsZWN0b3JzL25vbi1wYXJlbnRoZXRpY2FsIGV4
cHJlc3Npb25zLAotICAgIC8vICAgdGhlbiBhbnl0aGluZyBlbHNlCi0gICAgLy8gVGhlc2UgcHJl
ZmVyZW5jZXMgYXJlIGhlcmUgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzCi0gICAg
Ly8gICBuZWVkaW5nIHRva2VuaXplIGluIHRoZSBQU0VVRE8gcHJlRmlsdGVyCi0gICAgcHNldWRv
cyA9ICI6KCIgKyBjaGFyYWN0ZXJFbmNvZGluZyArICIpKD86XFwoKChbJ1wiXSkoKD86XFxcXC58
W15cXFxcXSkqPylcXDN8KCg/OlxcXFwufFteXFxcXCgpW1xcXV18IiArIGF0dHJpYnV0ZXMucmVw
bGFjZSggMywgOCApICsgIikqKXwuKilcXCl8KSIsCi0KLSAgICAvLyBMZWFkaW5nIGFuZCBub24t
ZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBub24td2hpdGVzcGFj
ZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyCi0gICAgcnRyaW0gPSBuZXcgUmVnRXhw
KCAiXiIgKyB3aGl0ZXNwYWNlICsgIit8KCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIgKyB3aGl0
ZXNwYWNlICsgIiskIiwgImciICksCi0KLSAgICByY29tbWEgPSBuZXcgUmVnRXhwKCAiXiIgKyB3
aGl0ZXNwYWNlICsgIiosIiArIHdoaXRlc3BhY2UgKyAiKiIgKSwKLSAgICByY29tYmluYXRvcnMg
PSBuZXcgUmVnRXhwKCAiXiIgKyB3aGl0ZXNwYWNlICsgIiooW1xceDIwXFx0XFxyXFxuXFxmPit+
XSkiICsgd2hpdGVzcGFjZSArICIqIiApLAotICAgIHJwc2V1ZG8gPSBuZXcgUmVnRXhwKCBwc2V1
ZG9zICksCi0gICAgcmlkZW50aWZpZXIgPSBuZXcgUmVnRXhwKCAiXiIgKyBpZGVudGlmaWVyICsg
IiQiICksCi0KLSAgICBtYXRjaEV4cHIgPSB7Ci0gICAgIklEIjogbmV3IFJlZ0V4cCggIl4jKCIg
KyBjaGFyYWN0ZXJFbmNvZGluZyArICIpIiApLAotICAgICJDTEFTUyI6IG5ldyBSZWdFeHAoICJe
XFwuKCIgKyBjaGFyYWN0ZXJFbmNvZGluZyArICIpIiApLAotICAgICJOQU1FIjogbmV3IFJlZ0V4
cCggIl5cXFtuYW1lPVsnXCJdPygiICsgY2hhcmFjdGVyRW5jb2RpbmcgKyAiKVsnXCJdP1xcXSIg
KSwKLSAgICAiVEFHIjogbmV3IFJlZ0V4cCggIl4oIiArIGNoYXJhY3RlckVuY29kaW5nLnJlcGxh
Y2UoICJ3IiwgIncqIiApICsgIikiICksCi0gICAgIkFUVFIiOiBuZXcgUmVnRXhwKCAiXiIgKyBh
dHRyaWJ1dGVzICksCi0gICAgIlBTRVVETyI6IG5ldyBSZWdFeHAoICJeIiArIHBzZXVkb3MgKSwK
LSAgICAiQ0hJTEQiOiBuZXcgUmVnRXhwKCAiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFz
dCktKGNoaWxkfG9mLXR5cGUpKD86XFwoIiArIHdoaXRlc3BhY2UgKwotICAgICIqKGV2ZW58b2Rk
fCgoWystXXwpKFxcZCopbnwpIiArIHdoaXRlc3BhY2UgKyAiKig/OihbKy1dfCkiICsgd2hpdGVz
cGFjZSArCi0gICAgIiooXFxkKyl8KSkiICsgd2hpdGVzcGFjZSArICIqXFwpfCkiLCAiaSIgKSwK
LSAgICAvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBsZW1lbnRpbmcgLmlzKCkKLSAgICAvLyBX
ZSB1c2UgdGhpcyBmb3IgUE9TIG1hdGNoaW5nIGluIGBzZWxlY3RgCi0gICAgIm5lZWRzQ29udGV4
dCI6IG5ldyBSZWdFeHAoICJeIiArIHdoaXRlc3BhY2UgKyAiKls+K35dfDooZXZlbnxvZGR8ZXF8
Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIiArCi0gICAgd2hpdGVzcGFjZSArICIqKCg/Oi1c
XGQpP1xcZCopIiArIHdoaXRlc3BhY2UgKyAiKlxcKXwpKD89W14tXXwkKSIsICJpIiApCi0gICAg
fSwKLQotICAgIHJzaWJsaW5nID0gL1tceDIwXHRcclxuXGZdKlsrfl0vLAotCi0gICAgcm5hdGl2
ZSA9IC9eW157XStce1xzKlxbbmF0aXZlIGNvZGUvLAotCi0gICAgLy8gRWFzaWx5LXBhcnNlYWJs
ZS9yZXRyaWV2YWJsZSBJRCBvciBUQUcgb3IgQ0xBU1Mgc2VsZWN0b3JzCi0gICAgcnF1aWNrRXhw
ciA9IC9eKD86IyhbXHctXSspfChcdyspfFwuKFtcdy1dKykpJC8sCi0KLSAgICByaW5wdXRzID0g
L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSwKLSAgICByaGVhZGVyID0gL15o
XGQkL2ksCi0KLSAgICByZXNjYXBlID0gLyd8XFwvZywKLSAgICByYXR0cmlidXRlUXVvdGVzID0g
L1w9W1x4MjBcdFxyXG5cZl0qKFteJyJcXV0qKVtceDIwXHRcclxuXGZdKlxdL2csCi0KLSAgICAv
LyBDU1MgZXNjYXBlcyBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjZXNj
YXBlZC1jaGFyYWN0ZXJzCi0gICAgcnVuZXNjYXBlID0gL1xcKFtcZGEtZkEtRl17MSw2fVtceDIw
XHRcclxuXGZdP3wuKS9nLAotICAgIGZ1bmVzY2FwZSA9IGZ1bmN0aW9uKCBfLCBlc2NhcGVkICkg
ewotICAgIHZhciBoaWdoID0gIjB4IiArIGVzY2FwZWQgLSAweDEwMDAwOwotICAgIC8vIE5hTiBt
ZWFucyBub24tY29kZXBvaW50Ci0gICAgcmV0dXJuIGhpZ2ggIT09IGhpZ2ggPwotICAgIGVzY2Fw
ZWQgOgotICAgIC8vIEJNUCBjb2RlcG9pbnQKLSAgICBoaWdoIDwgMCA/Ci0gICAgU3RyaW5nLmZy
b21DaGFyQ29kZSggaGlnaCArIDB4MTAwMDAgKSA6Ci0gICAgLy8gU3VwcGxlbWVudGFsIFBsYW5l
IGNvZGVwb2ludCAoc3Vycm9nYXRlIHBhaXIpCi0gICAgU3RyaW5nLmZyb21DaGFyQ29kZSggaGln
aCA+PiAxMCB8IDB4RDgwMCwgaGlnaCAmIDB4M0ZGIHwgMHhEQzAwICk7Ci0gICAgfTsKLQotLy8g
VXNlIGEgc3RyaXBwZWQtZG93biBzbGljZSBpZiB3ZSBjYW4ndCB1c2UgYSBuYXRpdmUgb25lCi10
cnkgewotICAgIHNsaWNlLmNhbGwoIHByZWZlcnJlZERvYy5kb2N1bWVudEVsZW1lbnQuY2hpbGRO
b2RlcywgMCApWzBdLm5vZGVUeXBlOwotfSBjYXRjaCAoIGUgKSB7Ci0gICAgc2xpY2UgPSBmdW5j
dGlvbiggaSApIHsKLSAgICB2YXIgZWxlbSwKLSAgICByZXN1bHRzID0gW107Ci0gICAgd2hpbGUg
KCAoZWxlbSA9IHRoaXNbaSsrXSkgKSB7Ci0gICAgcmVzdWx0cy5wdXNoKCBlbGVtICk7Ci0gICAg
fQotICAgIHJldHVybiByZXN1bHRzOwotICAgIH07Ci19Ci0KLS8qKgotICogRm9yIGZlYXR1cmUg
ZGV0ZWN0aW9uCi0gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gdGVzdCBm
b3IgbmF0aXZlIHN1cHBvcnQKLSAqLwotZnVuY3Rpb24gaXNOYXRpdmUoIGZuICkgewotICAgIHJl
dHVybiBybmF0aXZlLnRlc3QoIGZuICsgIiIgKTsKLX0KLQotLyoqCi0gKiBDcmVhdGUga2V5LXZh
bHVlIGNhY2hlcyBvZiBsaW1pdGVkIHNpemUKLSAqIEByZXR1cm5zIHtGdW5jdGlvbihzdHJpbmcs
IE9iamVjdCl9IFJldHVybnMgdGhlIE9iamVjdCBkYXRhIGFmdGVyIHN0b3JpbmcgaXQgb24gaXRz
ZWxmIHdpdGgKLSAqICAgIHByb3BlcnR5IG5hbWUgdGhlIChzcGFjZS1zdWZmaXhlZCkgc3RyaW5n
IGFuZCAoaWYgdGhlIGNhY2hlIGlzIGxhcmdlciB0aGFuIEV4cHIuY2FjaGVMZW5ndGgpCi0gKiAg
ICBkZWxldGluZyB0aGUgb2xkZXN0IGVudHJ5Ci0gKi8KLWZ1bmN0aW9uIGNyZWF0ZUNhY2hlKCkg
ewotICAgIHZhciBjYWNoZSwKLSAgICBrZXlzID0gW107Ci0KLSAgICByZXR1cm4gKGNhY2hlID0g
ZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7Ci0gICAgLy8gVXNlIChrZXkgKyAiICIpIHRvIGF2b2lk
IGNvbGxpc2lvbiB3aXRoIG5hdGl2ZSBwcm90b3R5cGUgcHJvcGVydGllcyAoc2VlIElzc3VlICMx
NTcpCi0gICAgaWYgKCBrZXlzLnB1c2goIGtleSArPSAiICIgKSA+IEV4cHIuY2FjaGVMZW5ndGgg
KSB7Ci0gICAgLy8gT25seSBrZWVwIHRoZSBtb3N0IHJlY2VudCBlbnRyaWVzCi0gICAgZGVsZXRl
IGNhY2hlWyBrZXlzLnNoaWZ0KCkgXTsKLSAgICB9Ci0gICAgcmV0dXJuIChjYWNoZVsga2V5IF0g
PSB2YWx1ZSk7Ci0gICAgfSk7Ci19Ci0KLS8qKgotICogTWFyayBhIGZ1bmN0aW9uIGZvciBzcGVj
aWFsIHVzZSBieSBTaXp6bGUKLSAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0
byBtYXJrCi0gKi8KLWZ1bmN0aW9uIG1hcmtGdW5jdGlvbiggZm4gKSB7Ci0gICAgZm5bIGV4cGFu
ZG8gXSA9IHRydWU7Ci0gICAgcmV0dXJuIGZuOwotfQotCi0vKioKLSAqIFN1cHBvcnQgdGVzdGlu
ZyB1c2luZyBhbiBlbGVtZW50Ci0gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBQYXNzZWQgdGhlIGNy
ZWF0ZWQgZGl2IGFuZCBleHBlY3RzIGEgYm9vbGVhbiByZXN1bHQKLSAqLwotZnVuY3Rpb24gYXNz
ZXJ0KCBmbiApIHsKLSAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7
Ci0KLSAgICB0cnkgewotICAgIHJldHVybiBmbiggZGl2ICk7Ci0gICAgfSBjYXRjaCAoZSkgewot
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGZpbmFsbHkgewotICAgIC8vIHJlbGVhc2UgbWVtb3J5
IGluIElFCi0gICAgZGl2ID0gbnVsbDsKLSAgICB9Ci19Ci0KLWZ1bmN0aW9uIFNpenpsZSggc2Vs
ZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7Ci0gICAgdmFyIG1hdGNoLCBlbGVtLCBt
LCBub2RlVHlwZSwKLSAgICAvLyBRU0EgdmFycwotICAgIGksIGdyb3Vwcywgb2xkLCBuaWQsIG5l
d0NvbnRleHQsIG5ld1NlbGVjdG9yOwotCi0gICAgaWYgKCAoIGNvbnRleHQgPyBjb250ZXh0Lm93
bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IHByZWZlcnJlZERvYyApICE9PSBkb2N1bWVudCApIHsK
LSAgICBzZXREb2N1bWVudCggY29udGV4dCApOwotICAgIH0KLQotICAgIGNvbnRleHQgPSBjb250
ZXh0IHx8IGRvY3VtZW50OwotICAgIHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdOwotCi0gICAgaWYg
KCAhc2VsZWN0b3IgfHwgdHlwZW9mIHNlbGVjdG9yICE9PSAic3RyaW5nIiApIHsKLSAgICByZXR1
cm4gcmVzdWx0czsKLSAgICB9Ci0KLSAgICBpZiAoIChub2RlVHlwZSA9IGNvbnRleHQubm9kZVR5
cGUpICE9PSAxICYmIG5vZGVUeXBlICE9PSA5ICkgewotICAgIHJldHVybiBbXTsKLSAgICB9Ci0K
LSAgICBpZiAoICFkb2N1bWVudElzWE1MICYmICFzZWVkICkgewotCi0gICAgLy8gU2hvcnRjdXRz
Ci0gICAgaWYgKCAobWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICkpICkgewotICAg
IC8vIFNwZWVkLXVwOiBTaXp6bGUoIiNJRCIpCi0gICAgaWYgKCAobSA9IG1hdGNoWzFdKSApIHsK
LSAgICBpZiAoIG5vZGVUeXBlID09PSA5ICkgewotICAgIGVsZW0gPSBjb250ZXh0LmdldEVsZW1l
bnRCeUlkKCBtICk7Ci0gICAgLy8gQ2hlY2sgcGFyZW50Tm9kZSB0byBjYXRjaCB3aGVuIEJsYWNr
YmVycnkgNC42IHJldHVybnMKLSAgICAvLyBub2RlcyB0aGF0IGFyZSBubyBsb25nZXIgaW4gdGhl
IGRvY3VtZW50ICM2OTYzCi0gICAgaWYgKCBlbGVtICYmIGVsZW0ucGFyZW50Tm9kZSApIHsKLSAg
ICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgSUUsIE9wZXJhLCBhbmQgV2Via2l0IHJldHVybiBp
dGVtcwotICAgIC8vIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRAotICAgIGlmICggZWxlbS5pZCA9PT0g
bSApIHsKLSAgICByZXN1bHRzLnB1c2goIGVsZW0gKTsKLSAgICByZXR1cm4gcmVzdWx0czsKLSAg
ICB9Ci0gICAgfSBlbHNlIHsKLSAgICByZXR1cm4gcmVzdWx0czsKLSAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAvLyBDb250ZXh0IGlzIG5vdCBhIGRvY3VtZW50Ci0gICAgaWYgKCBjb250ZXh0Lm93
bmVyRG9jdW1lbnQgJiYgKGVsZW0gPSBjb250ZXh0Lm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoIG0gKSkgJiYKLSAgICBjb250YWlucyggY29udGV4dCwgZWxlbSApICYmIGVsZW0uaWQgPT09
IG0gKSB7Ci0gICAgcmVzdWx0cy5wdXNoKCBlbGVtICk7Ci0gICAgcmV0dXJuIHJlc3VsdHM7Ci0g
ICAgfQotICAgIH0KLQotICAgIC8vIFNwZWVkLXVwOiBTaXp6bGUoIlRBRyIpCi0gICAgfSBlbHNl
IGlmICggbWF0Y2hbMl0gKSB7Ci0gICAgcHVzaC5hcHBseSggcmVzdWx0cywgc2xpY2UuY2FsbChj
b250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBzZWxlY3RvciApLCAwKSApOwotICAgIHJldHVy
biByZXN1bHRzOwotCi0gICAgLy8gU3BlZWQtdXA6IFNpenpsZSgiLkNMQVNTIikKLSAgICB9IGVs
c2UgaWYgKCAobSA9IG1hdGNoWzNdKSAmJiBzdXBwb3J0LmdldEJ5Q2xhc3NOYW1lICYmIGNvbnRl
eHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHsKLSAgICBwdXNoLmFwcGx5KCByZXN1bHRzLCBz
bGljZS5jYWxsKGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbSApLCAwKSApOwotICAg
IHJldHVybiByZXN1bHRzOwotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBRU0EgcGF0aAotICAgIGlm
ICggc3VwcG9ydC5xc2EgJiYgIXJidWdneVFTQS50ZXN0KHNlbGVjdG9yKSApIHsKLSAgICBvbGQg
PSB0cnVlOwotICAgIG5pZCA9IGV4cGFuZG87Ci0gICAgbmV3Q29udGV4dCA9IGNvbnRleHQ7Ci0g
ICAgbmV3U2VsZWN0b3IgPSBub2RlVHlwZSA9PT0gOSAmJiBzZWxlY3RvcjsKLQotICAgIC8vIHFT
QSB3b3JrcyBzdHJhbmdlbHkgb24gRWxlbWVudC1yb290ZWQgcXVlcmllcwotICAgIC8vIFdlIGNh
biB3b3JrIGFyb3VuZCB0aGlzIGJ5IHNwZWNpZnlpbmcgYW4gZXh0cmEgSUQgb24gdGhlIHJvb3QK
LSAgICAvLyBhbmQgd29ya2luZyB1cCBmcm9tIHRoZXJlIChUaGFua3MgdG8gQW5kcmV3IER1cG9u
dCBmb3IgdGhlIHRlY2huaXF1ZSkKLSAgICAvLyBJRSA4IGRvZXNuJ3Qgd29yayBvbiBvYmplY3Qg
ZWxlbWVudHMKLSAgICBpZiAoIG5vZGVUeXBlID09PSAxICYmIGNvbnRleHQubm9kZU5hbWUudG9M
b3dlckNhc2UoKSAhPT0gIm9iamVjdCIgKSB7Ci0gICAgZ3JvdXBzID0gdG9rZW5pemUoIHNlbGVj
dG9yICk7Ci0KLSAgICBpZiAoIChvbGQgPSBjb250ZXh0LmdldEF0dHJpYnV0ZSgiaWQiKSkgKSB7
Ci0gICAgbmlkID0gb2xkLnJlcGxhY2UoIHJlc2NhcGUsICJcXCQmIiApOwotICAgIH0gZWxzZSB7
Ci0gICAgY29udGV4dC5zZXRBdHRyaWJ1dGUoICJpZCIsIG5pZCApOwotICAgIH0KLSAgICBuaWQg
PSAiW2lkPSciICsgbmlkICsgIiddICI7Ci0KLSAgICBpID0gZ3JvdXBzLmxlbmd0aDsKLSAgICB3
aGlsZSAoIGktLSApIHsKLSAgICBncm91cHNbaV0gPSBuaWQgKyB0b1NlbGVjdG9yKCBncm91cHNb
aV0gKTsKLSAgICB9Ci0gICAgbmV3Q29udGV4dCA9IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkg
JiYgY29udGV4dC5wYXJlbnROb2RlIHx8IGNvbnRleHQ7Ci0gICAgbmV3U2VsZWN0b3IgPSBncm91
cHMuam9pbigiLCIpOwotICAgIH0KLQotICAgIGlmICggbmV3U2VsZWN0b3IgKSB7Ci0gICAgdHJ5
IHsKLSAgICBwdXNoLmFwcGx5KCByZXN1bHRzLCBzbGljZS5jYWxsKCBuZXdDb250ZXh0LnF1ZXJ5
U2VsZWN0b3JBbGwoCi0gICAgbmV3U2VsZWN0b3IKLSAgICApLCAwICkgKTsKLSAgICByZXR1cm4g
cmVzdWx0czsKLSAgICB9IGNhdGNoKHFzYUVycm9yKSB7Ci0gICAgfSBmaW5hbGx5IHsKLSAgICBp
ZiAoICFvbGQgKSB7Ci0gICAgY29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoImlkIik7Ci0gICAgfQot
ICAgIH0KLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIC8vIEFsbCBvdGhlcnMKLSAgICByZXR1
cm4gc2VsZWN0KCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgIiQxIiApLCBjb250ZXh0LCByZXN1
bHRzLCBzZWVkICk7Ci19Ci0KLS8qKgotICogRGV0ZWN0IHhtbAotICogQHBhcmFtIHtFbGVtZW50
fE9iamVjdH0gZWxlbSBBbiBlbGVtZW50IG9yIGEgZG9jdW1lbnQKLSAqLwotaXNYTUwgPSBTaXp6
bGUuaXNYTUwgPSBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAvLyBkb2N1bWVudEVsZW1lbnQgaXMg
dmVyaWZpZWQgZm9yIGNhc2VzIHdoZXJlIGl0IGRvZXNuJ3QgeWV0IGV4aXN0Ci0gICAgLy8gKHN1
Y2ggYXMgbG9hZGluZyBpZnJhbWVzIGluIElFIC0gIzQ4MzMpCi0gICAgdmFyIGRvY3VtZW50RWxl
bWVudCA9IGVsZW0gJiYgKGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtKS5kb2N1bWVudEVsZW1l
bnQ7Ci0gICAgcmV0dXJuIGRvY3VtZW50RWxlbWVudCA/IGRvY3VtZW50RWxlbWVudC5ub2RlTmFt
ZSAhPT0gIkhUTUwiIDogZmFsc2U7Ci19OwotCi0vKioKLSAqIFNldHMgZG9jdW1lbnQtcmVsYXRl
ZCB2YXJpYWJsZXMgb25jZSBiYXNlZCBvbiB0aGUgY3VycmVudCBkb2N1bWVudAotICogQHBhcmFt
IHtFbGVtZW50fE9iamVjdH0gW2RvY10gQW4gZWxlbWVudCBvciBkb2N1bWVudCBvYmplY3QgdG8g
dXNlIHRvIHNldCB0aGUgZG9jdW1lbnQKLSAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhl
IGN1cnJlbnQgZG9jdW1lbnQKLSAqLwotc2V0RG9jdW1lbnQgPSBTaXp6bGUuc2V0RG9jdW1lbnQg
PSBmdW5jdGlvbiggbm9kZSApIHsKLSAgICB2YXIgZG9jID0gbm9kZSA/IG5vZGUub3duZXJEb2N1
bWVudCB8fCBub2RlIDogcHJlZmVycmVkRG9jOwotCi0gICAgLy8gSWYgbm8gZG9jdW1lbnQgYW5k
IGRvY3VtZW50RWxlbWVudCBpcyBhdmFpbGFibGUsIHJldHVybgotICAgIGlmICggZG9jID09PSBk
b2N1bWVudCB8fCBkb2Mubm9kZVR5cGUgIT09IDkgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQgKSB7
Ci0gICAgcmV0dXJuIGRvY3VtZW50OwotICAgIH0KLQotICAgIC8vIFNldCBvdXIgZG9jdW1lbnQK
LSAgICBkb2N1bWVudCA9IGRvYzsKLSAgICBkb2NFbGVtID0gZG9jLmRvY3VtZW50RWxlbWVudDsK
LQotICAgIC8vIFN1cHBvcnQgdGVzdHMKLSAgICBkb2N1bWVudElzWE1MID0gaXNYTUwoIGRvYyAp
OwotCi0gICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSByZXR1cm5zIG9u
bHkgZWxlbWVudHMKLSAgICBzdXBwb3J0LnRhZ05hbWVOb0NvbW1lbnRzID0gYXNzZXJ0KGZ1bmN0
aW9uKCBkaXYgKSB7Ci0gICAgZGl2LmFwcGVuZENoaWxkKCBkb2MuY3JlYXRlQ29tbWVudCgiIikg
KTsKLSAgICByZXR1cm4gIWRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aDsKLSAg
ICB9KTsKLQotICAgIC8vIENoZWNrIGlmIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIHJldHJpZXZlZCBi
eSBhdHRyaWJ1dGUgbm9kZXMKLSAgICBzdXBwb3J0LmF0dHJpYnV0ZXMgPSBhc3NlcnQoZnVuY3Rp
b24oIGRpdiApIHsKLSAgICBkaXYuaW5uZXJIVE1MID0gIjxzZWxlY3Q+PC9zZWxlY3Q+IjsKLSAg
ICB2YXIgdHlwZSA9IHR5cGVvZiBkaXYubGFzdENoaWxkLmdldEF0dHJpYnV0ZSgibXVsdGlwbGUi
KTsKLSAgICAvLyBJRTggcmV0dXJucyBhIHN0cmluZyBmb3Igc29tZSBhdHRyaWJ1dGVzIGV2ZW4g
d2hlbiBub3QgcHJlc2VudAotICAgIHJldHVybiB0eXBlICE9PSAiYm9vbGVhbiIgJiYgdHlwZSAh
PT0gInN0cmluZyI7Ci0gICAgfSk7Ci0KLSAgICAvLyBDaGVjayBpZiBnZXRFbGVtZW50c0J5Q2xh
c3NOYW1lIGNhbiBiZSB0cnVzdGVkCi0gICAgc3VwcG9ydC5nZXRCeUNsYXNzTmFtZSA9IGFzc2Vy
dChmdW5jdGlvbiggZGl2ICkgewotICAgIC8vIE9wZXJhIGNhbid0IGZpbmQgYSBzZWNvbmQgY2xh
c3NuYW1lIChpbiA5LjYpCi0gICAgZGl2LmlubmVySFRNTCA9ICI8ZGl2IGNsYXNzPSdoaWRkZW4g
ZSc+PC9kaXY+PGRpdiBjbGFzcz0naGlkZGVuJz48L2Rpdj4iOwotICAgIGlmICggIWRpdi5nZXRF
bGVtZW50c0J5Q2xhc3NOYW1lIHx8ICFkaXYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxl
bmd0aCApIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gU2FmYXJpIDMuMiBj
YWNoZXMgY2xhc3MgYXR0cmlidXRlcyBhbmQgZG9lc24ndCBjYXRjaCBjaGFuZ2VzCi0gICAgZGl2
Lmxhc3RDaGlsZC5jbGFzc05hbWUgPSAiZSI7Ci0gICAgcmV0dXJuIGRpdi5nZXRFbGVtZW50c0J5
Q2xhc3NOYW1lKCJlIikubGVuZ3RoID09PSAyOwotICAgIH0pOwotCi0gICAgLy8gQ2hlY2sgaWYg
Z2V0RWxlbWVudEJ5SWQgcmV0dXJucyBlbGVtZW50cyBieSBuYW1lCi0gICAgLy8gQ2hlY2sgaWYg
Z2V0RWxlbWVudHNCeU5hbWUgcHJpdmlsZWdlcyBmb3JtIGNvbnRyb2xzIG9yIHJldHVybnMgZWxl
bWVudHMgYnkgSUQKLSAgICBzdXBwb3J0LmdldEJ5TmFtZSA9IGFzc2VydChmdW5jdGlvbiggZGl2
ICkgewotICAgIC8vIEluamVjdCBjb250ZW50Ci0gICAgZGl2LmlkID0gZXhwYW5kbyArIDA7Ci0g
ICAgZGl2LmlubmVySFRNTCA9ICI8YSBuYW1lPSciICsgZXhwYW5kbyArICInPjwvYT48ZGl2IG5h
bWU9JyIgKyBleHBhbmRvICsgIic+PC9kaXY+IjsKLSAgICBkb2NFbGVtLmluc2VydEJlZm9yZSgg
ZGl2LCBkb2NFbGVtLmZpcnN0Q2hpbGQgKTsKLQotICAgIC8vIFRlc3QKLSAgICB2YXIgcGFzcyA9
IGRvYy5nZXRFbGVtZW50c0J5TmFtZSAmJgotICAgIC8vIGJ1Z2d5IGJyb3dzZXJzIHdpbGwgcmV0
dXJuIGZld2VyIHRoYW4gdGhlIGNvcnJlY3QgMgotICAgIGRvYy5nZXRFbGVtZW50c0J5TmFtZSgg
ZXhwYW5kbyApLmxlbmd0aCA9PT0gMiArCi0gICAgLy8gYnVnZ3kgYnJvd3NlcnMgd2lsbCByZXR1
cm4gbW9yZSB0aGFuIHRoZSBjb3JyZWN0IDAKLSAgICBkb2MuZ2V0RWxlbWVudHNCeU5hbWUoIGV4
cGFuZG8gKyAwICkubGVuZ3RoOwotICAgIHN1cHBvcnQuZ2V0SWROb3ROYW1lID0gIWRvYy5nZXRF
bGVtZW50QnlJZCggZXhwYW5kbyApOwotCi0gICAgLy8gQ2xlYW51cAotICAgIGRvY0VsZW0ucmVt
b3ZlQ2hpbGQoIGRpdiApOwotCi0gICAgcmV0dXJuIHBhc3M7Ci0gICAgfSk7Ci0KLSAgICAvLyBJ
RTYvNyByZXR1cm4gbW9kaWZpZWQgYXR0cmlidXRlcwotICAgIEV4cHIuYXR0ckhhbmRsZSA9IGFz
c2VydChmdW5jdGlvbiggZGl2ICkgewotICAgIGRpdi5pbm5lckhUTUwgPSAiPGEgaHJlZj0nIyc+
PC9hPiI7Ci0gICAgcmV0dXJuIGRpdi5maXJzdENoaWxkICYmIHR5cGVvZiBkaXYuZmlyc3RDaGls
ZC5nZXRBdHRyaWJ1dGUgIT09IHN0cnVuZGVmaW5lZCAmJgotICAgIGRpdi5maXJzdENoaWxkLmdl
dEF0dHJpYnV0ZSgiaHJlZiIpID09PSAiIyI7Ci0gICAgfSkgPwotICAgIHt9IDoKLSAgICB7Ci0g
ICAgImhyZWYiOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1
dGUoICJocmVmIiwgMiApOwotICAgIH0sCi0gICAgInR5cGUiOiBmdW5jdGlvbiggZWxlbSApIHsK
LSAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoInR5cGUiKTsKLSAgICB9Ci0gICAgfTsKLQot
ICAgIC8vIElEIGZpbmQgYW5kIGZpbHRlcgotICAgIGlmICggc3VwcG9ydC5nZXRJZE5vdE5hbWUg
KSB7Ci0gICAgRXhwci5maW5kWyJJRCJdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkgewotICAg
IGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IHN0cnVuZGVmaW5lZCAmJiAh
ZG9jdW1lbnRJc1hNTCApIHsKLSAgICB2YXIgbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlk
ICk7Ci0gICAgLy8gQ2hlY2sgcGFyZW50Tm9kZSB0byBjYXRjaCB3aGVuIEJsYWNrYmVycnkgNC42
IHJldHVybnMKLSAgICAvLyBub2RlcyB0aGF0IGFyZSBubyBsb25nZXIgaW4gdGhlIGRvY3VtZW50
ICM2OTYzCi0gICAgcmV0dXJuIG0gJiYgbS5wYXJlbnROb2RlID8gW21dIDogW107Ci0gICAgfQot
ICAgIH07Ci0gICAgRXhwci5maWx0ZXJbIklEIl0gPSBmdW5jdGlvbiggaWQgKSB7Ci0gICAgdmFy
IGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7Ci0gICAgcmV0dXJu
IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSgiaWQiKSA9
PT0gYXR0cklkOwotICAgIH07Ci0gICAgfTsKLSAgICB9IGVsc2UgewotICAgIEV4cHIuZmluZFsi
SUQiXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHsKLSAgICBpZiAoIHR5cGVvZiBjb250ZXh0
LmdldEVsZW1lbnRCeUlkICE9PSBzdHJ1bmRlZmluZWQgJiYgIWRvY3VtZW50SXNYTUwgKSB7Ci0g
ICAgdmFyIG0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApOwotCi0gICAgcmV0dXJuIG0g
PwotICAgIG0uaWQgPT09IGlkIHx8IHR5cGVvZiBtLmdldEF0dHJpYnV0ZU5vZGUgIT09IHN0cnVu
ZGVmaW5lZCAmJiBtLmdldEF0dHJpYnV0ZU5vZGUoImlkIikudmFsdWUgPT09IGlkID8KLSAgICBb
bV0gOgotICAgIHVuZGVmaW5lZCA6Ci0gICAgW107Ci0gICAgfQotICAgIH07Ci0gICAgRXhwci5m
aWx0ZXJbIklEIl0gPSAgZnVuY3Rpb24oIGlkICkgewotICAgIHZhciBhdHRySWQgPSBpZC5yZXBs
YWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApOwotICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSAp
IHsKLSAgICB2YXIgbm9kZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09IHN0cnVu
ZGVmaW5lZCAmJiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7Ci0gICAgcmV0dXJuIG5vZGUg
JiYgbm9kZS52YWx1ZSA9PT0gYXR0cklkOwotICAgIH07Ci0gICAgfTsKLSAgICB9Ci0KLSAgICAv
LyBUYWcKLSAgICBFeHByLmZpbmRbIlRBRyJdID0gc3VwcG9ydC50YWdOYW1lTm9Db21tZW50cyA/
Ci0gICAgZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHsKLSAgICBpZiAoIHR5cGVvZiBjb250ZXh0
LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBzdHJ1bmRlZmluZWQgKSB7Ci0gICAgcmV0dXJuIGNv
bnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApOwotICAgIH0KLSAgICB9IDoKLSAgICBm
dW5jdGlvbiggdGFnLCBjb250ZXh0ICkgewotICAgIHZhciBlbGVtLAotICAgIHRtcCA9IFtdLAot
ICAgIGkgPSAwLAotICAgIHJlc3VsdHMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0
YWcgKTsKLQotICAgIC8vIEZpbHRlciBvdXQgcG9zc2libGUgY29tbWVudHMKLSAgICBpZiAoIHRh
ZyA9PT0gIioiICkgewotICAgIHdoaWxlICggKGVsZW0gPSByZXN1bHRzW2krK10pICkgewotICAg
IGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKLSAgICB0bXAucHVzaCggZWxlbSApOwotICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdG1wOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0czsK
LSAgICB9OwotCi0gICAgLy8gTmFtZQotICAgIEV4cHIuZmluZFsiTkFNRSJdID0gc3VwcG9ydC5n
ZXRCeU5hbWUgJiYgZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHsKLSAgICBpZiAoIHR5cGVvZiBj
b250ZXh0LmdldEVsZW1lbnRzQnlOYW1lICE9PSBzdHJ1bmRlZmluZWQgKSB7Ci0gICAgcmV0dXJu
IGNvbnRleHQuZ2V0RWxlbWVudHNCeU5hbWUoIG5hbWUgKTsKLSAgICB9Ci0gICAgfTsKLQotICAg
IC8vIENsYXNzCi0gICAgRXhwci5maW5kWyJDTEFTUyJdID0gc3VwcG9ydC5nZXRCeUNsYXNzTmFt
ZSAmJiBmdW5jdGlvbiggY2xhc3NOYW1lLCBjb250ZXh0ICkgewotICAgIGlmICggdHlwZW9mIGNv
bnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gc3RydW5kZWZpbmVkICYmICFkb2N1bWVu
dElzWE1MICkgewotICAgIHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIGNs
YXNzTmFtZSApOwotICAgIH0KLSAgICB9OwotCi0gICAgLy8gUVNBIGFuZCBtYXRjaGVzU2VsZWN0
b3Igc3VwcG9ydAotCi0gICAgLy8gbWF0Y2hlc1NlbGVjdG9yKDphY3RpdmUpIHJlcG9ydHMgZmFs
c2Ugd2hlbiB0cnVlIChJRTkvT3BlcmEgMTEuNSkKLSAgICByYnVnZ3lNYXRjaGVzID0gW107Ci0K
LSAgICAvLyBxU2EoOmZvY3VzKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoQ2hyb21lIDIxKSwK
LSAgICAvLyBubyBuZWVkIHRvIGFsc28gYWRkIHRvIGJ1Z2d5TWF0Y2hlcyBzaW5jZSBtYXRjaGVz
IGNoZWNrcyBidWdneVFTQQotICAgIC8vIEEgc3VwcG9ydCB0ZXN0IHdvdWxkIHJlcXVpcmUgdG9v
IG11Y2ggY29kZSAod291bGQgaW5jbHVkZSBkb2N1bWVudCByZWFkeSkKLSAgICByYnVnZ3lRU0Eg
PSBbICI6Zm9jdXMiIF07Ci0KLSAgICBpZiAoIChzdXBwb3J0LnFzYSA9IGlzTmF0aXZlKGRvYy5x
dWVyeVNlbGVjdG9yQWxsKSkgKSB7Ci0gICAgLy8gQnVpbGQgUVNBIHJlZ2V4Ci0gICAgLy8gUmVn
ZXggc3RyYXRlZ3kgYWRvcHRlZCBmcm9tIERpZWdvIFBlcmluaQotICAgIGFzc2VydChmdW5jdGlv
biggZGl2ICkgewotICAgIC8vIFNlbGVjdCBpcyBzZXQgdG8gZW1wdHkgc3RyaW5nIG9uIHB1cnBv
c2UKLSAgICAvLyBUaGlzIGlzIHRvIHRlc3QgSUUncyB0cmVhdG1lbnQgb2Ygbm90IGV4cGxpY3Rs
eQotICAgIC8vIHNldHRpbmcgYSBib29sZWFuIGNvbnRlbnQgYXR0cmlidXRlLAotICAgIC8vIHNp
bmNlIGl0cyBwcmVzZW5jZSBzaG91bGQgYmUgZW5vdWdoCi0gICAgLy8gaHR0cDovL2J1Z3MuanF1
ZXJ5LmNvbS90aWNrZXQvMTIzNTkKLSAgICBkaXYuaW5uZXJIVE1MID0gIjxzZWxlY3Q+PG9wdGlv
biBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iOwotCi0gICAgLy8gSUU4IC0gU29tZSBi
b29sZWFuIGF0dHJpYnV0ZXMgYXJlIG5vdCB0cmVhdGVkIGNvcnJlY3RseQotICAgIGlmICggIWRp
di5xdWVyeVNlbGVjdG9yQWxsKCJbc2VsZWN0ZWRdIikubGVuZ3RoICkgewotICAgIHJidWdneVFT
QS5wdXNoKCAiXFxbIiArIHdoaXRlc3BhY2UgKyAiKig/OmNoZWNrZWR8ZGlzYWJsZWR8aXNtYXB8
bXVsdGlwbGV8cmVhZG9ubHl8c2VsZWN0ZWR8dmFsdWUpIiApOwotICAgIH0KLQotICAgIC8vIFdl
YmtpdC9PcGVyYSAtIDpjaGVja2VkIHNob3VsZCByZXR1cm4gc2VsZWN0ZWQgb3B0aW9uIGVsZW1l
bnRzCi0gICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMt
MjAxMTA5MjkvI2NoZWNrZWQKLSAgICAvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwg
bm90IHNlZSBsYXRlciB0ZXN0cwotICAgIGlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hl
Y2tlZCIpLmxlbmd0aCApIHsKLSAgICByYnVnZ3lRU0EucHVzaCgiOmNoZWNrZWQiKTsKLSAgICB9
Ci0gICAgfSk7Ci0KLSAgICBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKLQotICAgIC8vIE9wZXJh
IDEwLTEyL0lFOCAtIF49ICQ9ICo9IGFuZCBlbXB0eSB2YWx1ZXMKLSAgICAvLyBTaG91bGQgbm90
IHNlbGVjdCBhbnl0aGluZwotICAgIGRpdi5pbm5lckhUTUwgPSAiPGlucHV0IHR5cGU9J2hpZGRl
bicgaT0nJy8+IjsKLSAgICBpZiAoIGRpdi5xdWVyeVNlbGVjdG9yQWxsKCJbaV49JyddIikubGVu
Z3RoICkgewotICAgIHJidWdneVFTQS5wdXNoKCAiWypeJF09IiArIHdoaXRlc3BhY2UgKyAiKig/
OlwiXCJ8JycpIiApOwotICAgIH0KLQotICAgIC8vIEZGIDMuNSAtIDplbmFibGVkLzpkaXNhYmxl
ZCBhbmQgaGlkZGVuIGVsZW1lbnRzIChoaWRkZW4gZWxlbWVudHMgYXJlIHN0aWxsIGVuYWJsZWQp
Ci0gICAgLy8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVz
dHMKLSAgICBpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGggKSB7
Ci0gICAgcmJ1Z2d5UVNBLnB1c2goICI6ZW5hYmxlZCIsICI6ZGlzYWJsZWQiICk7Ci0gICAgfQot
Ci0gICAgLy8gT3BlcmEgMTAtMTEgZG9lcyBub3QgdGhyb3cgb24gcG9zdC1jb21tYSBpbnZhbGlk
IHBzZXVkb3MKLSAgICBkaXYucXVlcnlTZWxlY3RvckFsbCgiKiw6eCIpOwotICAgIHJidWdneVFT
QS5wdXNoKCIsLio6Iik7Ci0gICAgfSk7Ci0gICAgfQotCi0gICAgaWYgKCAoc3VwcG9ydC5tYXRj
aGVzU2VsZWN0b3IgPSBpc05hdGl2ZSggKG1hdGNoZXMgPSBkb2NFbGVtLm1hdGNoZXNTZWxlY3Rv
ciB8fAotICAgIGRvY0VsZW0ubW96TWF0Y2hlc1NlbGVjdG9yIHx8Ci0gICAgZG9jRWxlbS53ZWJr
aXRNYXRjaGVzU2VsZWN0b3IgfHwKLSAgICBkb2NFbGVtLm9NYXRjaGVzU2VsZWN0b3IgfHwKLSAg
ICBkb2NFbGVtLm1zTWF0Y2hlc1NlbGVjdG9yKSApKSApIHsKLQotICAgIGFzc2VydChmdW5jdGlv
biggZGl2ICkgewotICAgIC8vIENoZWNrIHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGRvIG1h
dGNoZXNTZWxlY3RvcgotICAgIC8vIG9uIGEgZGlzY29ubmVjdGVkIG5vZGUgKElFIDkpCi0gICAg
c3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCA9IG1hdGNoZXMuY2FsbCggZGl2LCAiZGl2IiApOwot
Ci0gICAgLy8gVGhpcyBzaG91bGQgZmFpbCB3aXRoIGFuIGV4Y2VwdGlvbgotICAgIC8vIEdlY2tv
IGRvZXMgbm90IGVycm9yLCByZXR1cm5zIGZhbHNlIGluc3RlYWQKLSAgICBtYXRjaGVzLmNhbGwo
IGRpdiwgIltzIT0nJ106eCIgKTsKLSAgICByYnVnZ3lNYXRjaGVzLnB1c2goICIhPSIsIHBzZXVk
b3MgKTsKLSAgICB9KTsKLSAgICB9Ci0KLSAgICByYnVnZ3lRU0EgPSBuZXcgUmVnRXhwKCByYnVn
Z3lRU0Euam9pbigifCIpICk7Ci0gICAgcmJ1Z2d5TWF0Y2hlcyA9IG5ldyBSZWdFeHAoIHJidWdn
eU1hdGNoZXMuam9pbigifCIpICk7Ci0KLSAgICAvLyBFbGVtZW50IGNvbnRhaW5zIGFub3RoZXIK
LSAgICAvLyBQdXJwb3NlZnVsbHkgZG9lcyBub3QgaW1wbGVtZW50IGluY2x1c2l2ZSBkZXNjZW5k
ZW50Ci0gICAgLy8gQXMgaW4sIGFuIGVsZW1lbnQgZG9lcyBub3QgY29udGFpbiBpdHNlbGYKLSAg
ICBjb250YWlucyA9IGlzTmF0aXZlKGRvY0VsZW0uY29udGFpbnMpIHx8IGRvY0VsZW0uY29tcGFy
ZURvY3VtZW50UG9zaXRpb24gPwotICAgIGZ1bmN0aW9uKCBhLCBiICkgewotICAgIHZhciBhZG93
biA9IGEubm9kZVR5cGUgPT09IDkgPyBhLmRvY3VtZW50RWxlbWVudCA6IGEsCi0gICAgYnVwID0g
YiAmJiBiLnBhcmVudE5vZGU7Ci0gICAgcmV0dXJuIGEgPT09IGJ1cCB8fCAhISggYnVwICYmIGJ1
cC5ub2RlVHlwZSA9PT0gMSAmJiAoCi0gICAgYWRvd24uY29udGFpbnMgPwotICAgIGFkb3duLmNv
bnRhaW5zKCBidXAgKSA6Ci0gICAgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiBhLmNvbXBh
cmVEb2N1bWVudFBvc2l0aW9uKCBidXAgKSAmIDE2Ci0gICAgKSk7Ci0gICAgfSA6Ci0gICAgZnVu
Y3Rpb24oIGEsIGIgKSB7Ci0gICAgaWYgKCBiICkgewotICAgIHdoaWxlICggKGIgPSBiLnBhcmVu
dE5vZGUpICkgewotICAgIGlmICggYiA9PT0gYSApIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gICAgfTsKLQotICAgIC8vIERvY3Vt
ZW50IG9yZGVyIHNvcnRpbmcKLSAgICBzb3J0T3JkZXIgPSBkb2NFbGVtLmNvbXBhcmVEb2N1bWVu
dFBvc2l0aW9uID8KLSAgICBmdW5jdGlvbiggYSwgYiApIHsKLSAgICB2YXIgY29tcGFyZTsKLQot
ICAgIGlmICggYSA9PT0gYiApIHsKLSAgICBoYXNEdXBsaWNhdGUgPSB0cnVlOwotICAgIHJldHVy
biAwOwotICAgIH0KLQotICAgIGlmICggKGNvbXBhcmUgPSBiLmNvbXBhcmVEb2N1bWVudFBvc2l0
aW9uICYmIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gJiYgYS5jb21wYXJlRG9jdW1lbnRQb3Np
dGlvbiggYiApKSApIHsKLSAgICBpZiAoIGNvbXBhcmUgJiAxIHx8IGEucGFyZW50Tm9kZSAmJiBh
LnBhcmVudE5vZGUubm9kZVR5cGUgPT09IDExICkgewotICAgIGlmICggYSA9PT0gZG9jIHx8IGNv
bnRhaW5zKCBwcmVmZXJyZWREb2MsIGEgKSApIHsKLSAgICByZXR1cm4gLTE7Ci0gICAgfQotICAg
IGlmICggYiA9PT0gZG9jIHx8IGNvbnRhaW5zKCBwcmVmZXJyZWREb2MsIGIgKSApIHsKLSAgICBy
ZXR1cm4gMTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiBjb21wYXJl
ICYgNCA/IC0xIDogMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3Np
dGlvbiA/IC0xIDogMTsKLSAgICB9IDoKLSAgICBmdW5jdGlvbiggYSwgYiApIHsKLSAgICB2YXIg
Y3VyLAotICAgIGkgPSAwLAotICAgIGF1cCA9IGEucGFyZW50Tm9kZSwKLSAgICBidXAgPSBiLnBh
cmVudE5vZGUsCi0gICAgYXAgPSBbIGEgXSwKLSAgICBicCA9IFsgYiBdOwotCi0gICAgLy8gRXhp
dCBlYXJseSBpZiB0aGUgbm9kZXMgYXJlIGlkZW50aWNhbAotICAgIGlmICggYSA9PT0gYiApIHsK
LSAgICBoYXNEdXBsaWNhdGUgPSB0cnVlOwotICAgIHJldHVybiAwOwotCi0gICAgLy8gUGFyZW50
bGVzcyBub2RlcyBhcmUgZWl0aGVyIGRvY3VtZW50cyBvciBkaXNjb25uZWN0ZWQKLSAgICB9IGVs
c2UgaWYgKCAhYXVwIHx8ICFidXAgKSB7Ci0gICAgcmV0dXJuIGEgPT09IGRvYyA/IC0xIDoKLSAg
ICBiID09PSBkb2MgPyAxIDoKLSAgICBhdXAgPyAtMSA6Ci0gICAgYnVwID8gMSA6Ci0gICAgMDsK
LQotICAgIC8vIElmIHRoZSBub2RlcyBhcmUgc2libGluZ3MsIHdlIGNhbiBkbyBhIHF1aWNrIGNo
ZWNrCi0gICAgfSBlbHNlIGlmICggYXVwID09PSBidXAgKSB7Ci0gICAgcmV0dXJuIHNpYmxpbmdD
aGVjayggYSwgYiApOwotICAgIH0KLQotICAgIC8vIE90aGVyd2lzZSB3ZSBuZWVkIGZ1bGwgbGlz
dHMgb2YgdGhlaXIgYW5jZXN0b3JzIGZvciBjb21wYXJpc29uCi0gICAgY3VyID0gYTsKLSAgICB3
aGlsZSAoIChjdXIgPSBjdXIucGFyZW50Tm9kZSkgKSB7Ci0gICAgYXAudW5zaGlmdCggY3VyICk7
Ci0gICAgfQotICAgIGN1ciA9IGI7Ci0gICAgd2hpbGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUp
ICkgewotICAgIGJwLnVuc2hpZnQoIGN1ciApOwotICAgIH0KLQotICAgIC8vIFdhbGsgZG93biB0
aGUgdHJlZSBsb29raW5nIGZvciBhIGRpc2NyZXBhbmN5Ci0gICAgd2hpbGUgKCBhcFtpXSA9PT0g
YnBbaV0gKSB7Ci0gICAgaSsrOwotICAgIH0KLQotICAgIHJldHVybiBpID8KLSAgICAvLyBEbyBh
IHNpYmxpbmcgY2hlY2sgaWYgdGhlIG5vZGVzIGhhdmUgYSBjb21tb24gYW5jZXN0b3IKLSAgICBz
aWJsaW5nQ2hlY2soIGFwW2ldLCBicFtpXSApIDoKLQotICAgIC8vIE90aGVyd2lzZSBub2RlcyBp
biBvdXIgZG9jdW1lbnQgc29ydCBmaXJzdAotICAgIGFwW2ldID09PSBwcmVmZXJyZWREb2MgPyAt
MSA6Ci0gICAgYnBbaV0gPT09IHByZWZlcnJlZERvYyA/IDEgOgotICAgIDA7Ci0gICAgfTsKLQot
ICAgIC8vIEFsd2F5cyBhc3N1bWUgdGhlIHByZXNlbmNlIG9mIGR1cGxpY2F0ZXMgaWYgc29ydCBk
b2Vzbid0Ci0gICAgLy8gcGFzcyB0aGVtIHRvIG91ciBjb21wYXJpc29uIGZ1bmN0aW9uIChhcyBp
biBHb29nbGUgQ2hyb21lKS4KLSAgICBoYXNEdXBsaWNhdGUgPSBmYWxzZTsKLSAgICBbMCwgMF0u
c29ydCggc29ydE9yZGVyICk7Ci0gICAgc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzID0gaGFzRHVw
bGljYXRlOwotCi0gICAgcmV0dXJuIGRvY3VtZW50OwotfTsKLQotU2l6emxlLm1hdGNoZXMgPSBm
dW5jdGlvbiggZXhwciwgZWxlbWVudHMgKSB7Ci0gICAgcmV0dXJuIFNpenpsZSggZXhwciwgbnVs
bCwgbnVsbCwgZWxlbWVudHMgKTsKLX07Ci0KLVNpenpsZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5j
dGlvbiggZWxlbSwgZXhwciApIHsKLSAgICAvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWQK
LSAgICBpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPT0gZG9jdW1lbnQgKSB7
Ci0gICAgc2V0RG9jdW1lbnQoIGVsZW0gKTsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhh
dCBhdHRyaWJ1dGUgc2VsZWN0b3JzIGFyZSBxdW90ZWQKLSAgICBleHByID0gZXhwci5yZXBsYWNl
KCByYXR0cmlidXRlUXVvdGVzLCAiPSckMSddIiApOwotCi0gICAgLy8gcmJ1Z2d5UVNBIGFsd2F5
cyBjb250YWlucyA6Zm9jdXMsIHNvIG5vIG5lZWQgZm9yIGFuIGV4aXN0ZW5jZSBjaGVjawotICAg
IGlmICggc3VwcG9ydC5tYXRjaGVzU2VsZWN0b3IgJiYgIWRvY3VtZW50SXNYTUwgJiYgKCFyYnVn
Z3lNYXRjaGVzIHx8ICFyYnVnZ3lNYXRjaGVzLnRlc3QoZXhwcikpICYmICFyYnVnZ3lRU0EudGVz
dChleHByKSApIHsKLSAgICB0cnkgewotICAgIHZhciByZXQgPSBtYXRjaGVzLmNhbGwoIGVsZW0s
IGV4cHIgKTsKLQotICAgIC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBv
biBkaXNjb25uZWN0ZWQgbm9kZXMKLSAgICBpZiAoIHJldCB8fCBzdXBwb3J0LmRpc2Nvbm5lY3Rl
ZE1hdGNoIHx8Ci0gICAgLy8gQXMgd2VsbCwgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRv
IGJlIGluIGEgZG9jdW1lbnQKLSAgICAvLyBmcmFnbWVudCBpbiBJRSA5Ci0gICAgZWxlbS5kb2N1
bWVudCAmJiBlbGVtLmRvY3VtZW50Lm5vZGVUeXBlICE9PSAxMSApIHsKLSAgICByZXR1cm4gcmV0
OwotICAgIH0KLSAgICB9IGNhdGNoKGUpIHt9Ci0gICAgfQotCi0gICAgcmV0dXJuIFNpenpsZSgg
ZXhwciwgZG9jdW1lbnQsIG51bGwsIFtlbGVtXSApLmxlbmd0aCA+IDA7Ci19OwotCi1TaXp6bGUu
Y29udGFpbnMgPSBmdW5jdGlvbiggY29udGV4dCwgZWxlbSApIHsKLSAgICAvLyBTZXQgZG9jdW1l
bnQgdmFycyBpZiBuZWVkZWQKLSAgICBpZiAoICggY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNv
bnRleHQgKSAhPT0gZG9jdW1lbnQgKSB7Ci0gICAgc2V0RG9jdW1lbnQoIGNvbnRleHQgKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICk7Ci19OwotCi1TaXp6bGUu
YXR0ciA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewotICAgIHZhciB2YWw7Ci0KLSAgICAvLyBT
ZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWQKLSAgICBpZiAoICggZWxlbS5vd25lckRvY3VtZW50
IHx8IGVsZW0gKSAhPT0gZG9jdW1lbnQgKSB7Ci0gICAgc2V0RG9jdW1lbnQoIGVsZW0gKTsKLSAg
ICB9Ci0KLSAgICBpZiAoICFkb2N1bWVudElzWE1MICkgewotICAgIG5hbWUgPSBuYW1lLnRvTG93
ZXJDYXNlKCk7Ci0gICAgfQotICAgIGlmICggKHZhbCA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZSBd
KSApIHsKLSAgICByZXR1cm4gdmFsKCBlbGVtICk7Ci0gICAgfQotICAgIGlmICggZG9jdW1lbnRJ
c1hNTCB8fCBzdXBwb3J0LmF0dHJpYnV0ZXMgKSB7Ci0gICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmli
dXRlKCBuYW1lICk7Ci0gICAgfQotICAgIHJldHVybiAoICh2YWwgPSBlbGVtLmdldEF0dHJpYnV0
ZU5vZGUoIG5hbWUgKSkgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKSApICYmIGVsZW1bIG5h
bWUgXSA9PT0gdHJ1ZSA/Ci0gICAgbmFtZSA6Ci0gICAgdmFsICYmIHZhbC5zcGVjaWZpZWQgPyB2
YWwudmFsdWUgOiBudWxsOwotfTsKLQotU2l6emxlLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHsK
LSAgICB0aHJvdyBuZXcgRXJyb3IoICJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNz
aW9uOiAiICsgbXNnICk7Ci19OwotCi0vLyBEb2N1bWVudCBzb3J0aW5nIGFuZCByZW1vdmluZyBk
dXBsaWNhdGVzCi1TaXp6bGUudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1bHRzICkgewotICAg
IHZhciBlbGVtLAotICAgIGR1cGxpY2F0ZXMgPSBbXSwKLSAgICBpID0gMSwKLSAgICBqID0gMDsK
LQotICAgIC8vIFVubGVzcyB3ZSAqa25vdyogd2UgY2FuIGRldGVjdCBkdXBsaWNhdGVzLCBhc3N1
bWUgdGhlaXIgcHJlc2VuY2UKLSAgICBoYXNEdXBsaWNhdGUgPSAhc3VwcG9ydC5kZXRlY3REdXBs
aWNhdGVzOwotICAgIHJlc3VsdHMuc29ydCggc29ydE9yZGVyICk7Ci0KLSAgICBpZiAoIGhhc0R1
cGxpY2F0ZSApIHsKLSAgICBmb3IgKCA7IChlbGVtID0gcmVzdWx0c1tpXSk7IGkrKyApIHsKLSAg
ICBpZiAoIGVsZW0gPT09IHJlc3VsdHNbIGkgLSAxIF0gKSB7Ci0gICAgaiA9IGR1cGxpY2F0ZXMu
cHVzaCggaSApOwotICAgIH0KLSAgICB9Ci0gICAgd2hpbGUgKCBqLS0gKSB7Ci0gICAgcmVzdWx0
cy5zcGxpY2UoIGR1cGxpY2F0ZXNbIGogXSwgMSApOwotICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gcmVzdWx0czsKLX07Ci0KLWZ1bmN0aW9uIHNpYmxpbmdDaGVjayggYSwgYiApIHsKLSAgICB2
YXIgY3VyID0gYiAmJiBhLAotICAgIGRpZmYgPSBjdXIgJiYgKCB+Yi5zb3VyY2VJbmRleCB8fCBN
QVhfTkVHQVRJVkUgKSAtICggfmEuc291cmNlSW5kZXggfHwgTUFYX05FR0FUSVZFICk7Ci0KLSAg
ICAvLyBVc2UgSUUgc291cmNlSW5kZXggaWYgYXZhaWxhYmxlIG9uIGJvdGggbm9kZXMKLSAgICBp
ZiAoIGRpZmYgKSB7Ci0gICAgcmV0dXJuIGRpZmY7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgaWYg
YiBmb2xsb3dzIGEKLSAgICBpZiAoIGN1ciApIHsKLSAgICB3aGlsZSAoIChjdXIgPSBjdXIubmV4
dFNpYmxpbmcpICkgewotICAgIGlmICggY3VyID09PSBiICkgewotICAgIHJldHVybiAtMTsKLSAg
ICB9Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiBhID8gMSA6IC0xOwotfQotCi0vLyBSZXR1
cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGlucHV0IHR5cGVzCi1mdW5jdGlv
biBjcmVhdGVJbnB1dFBzZXVkbyggdHlwZSApIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0g
KSB7Ci0gICAgdmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Ci0gICAgcmV0
dXJuIG5hbWUgPT09ICJpbnB1dCIgJiYgZWxlbS50eXBlID09PSB0eXBlOwotICAgIH07Ci19Ci0K
LS8vIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgYnV0dG9ucwotZnVu
Y3Rpb24gY3JlYXRlQnV0dG9uUHNldWRvKCB0eXBlICkgewotICAgIHJldHVybiBmdW5jdGlvbigg
ZWxlbSApIHsKLSAgICB2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKLSAg
ICByZXR1cm4gKG5hbWUgPT09ICJpbnB1dCIgfHwgbmFtZSA9PT0gImJ1dHRvbiIpICYmIGVsZW0u
dHlwZSA9PT0gdHlwZTsKLSAgICB9OwotfQotCi0vLyBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNl
IGluIHBzZXVkb3MgZm9yIHBvc2l0aW9uYWxzCi1mdW5jdGlvbiBjcmVhdGVQb3NpdGlvbmFsUHNl
dWRvKCBmbiApIHsKLSAgICByZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBhcmd1bWVudCAp
IHsKLSAgICBhcmd1bWVudCA9ICthcmd1bWVudDsKLSAgICByZXR1cm4gbWFya0Z1bmN0aW9uKGZ1
bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkgewotICAgIHZhciBqLAotICAgIG1hdGNoSW5kZXhlcyA9
IGZuKCBbXSwgc2VlZC5sZW5ndGgsIGFyZ3VtZW50ICksCi0gICAgaSA9IG1hdGNoSW5kZXhlcy5s
ZW5ndGg7Ci0KLSAgICAvLyBNYXRjaCBlbGVtZW50cyBmb3VuZCBhdCB0aGUgc3BlY2lmaWVkIGlu
ZGV4ZXMKLSAgICB3aGlsZSAoIGktLSApIHsKLSAgICBpZiAoIHNlZWRbIChqID0gbWF0Y2hJbmRl
eGVzW2ldKSBdICkgewotICAgIHNlZWRbal0gPSAhKG1hdGNoZXNbal0gPSBzZWVkW2pdKTsKLSAg
ICB9Ci0gICAgfQotICAgIH0pOwotICAgIH0pOwotfQotCi0vKioKLSAqIFV0aWxpdHkgZnVuY3Rp
b24gZm9yIHJldHJpZXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVz
Ci0gKiBAcGFyYW0ge0FycmF5fEVsZW1lbnR9IGVsZW0KLSAqLwotZ2V0VGV4dCA9IFNpenpsZS5n
ZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgdmFyIG5vZGUsCi0gICAgcmV0ID0gIiIs
Ci0gICAgaSA9IDAsCi0gICAgbm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlOwotCi0gICAgaWYgKCAh
bm9kZVR5cGUgKSB7Ci0gICAgLy8gSWYgbm8gbm9kZVR5cGUsIHRoaXMgaXMgZXhwZWN0ZWQgdG8g
YmUgYW4gYXJyYXkKLSAgICBmb3IgKCA7IChub2RlID0gZWxlbVtpXSk7IGkrKyApIHsKLSAgICAv
LyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2RlcwotICAgIHJldCArPSBnZXRUZXh0KCBub2Rl
ICk7Ci0gICAgfQotICAgIH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09
PSA5IHx8IG5vZGVUeXBlID09PSAxMSApIHsKLSAgICAvLyBVc2UgdGV4dENvbnRlbnQgZm9yIGVs
ZW1lbnRzCi0gICAgLy8gaW5uZXJUZXh0IHVzYWdlIHJlbW92ZWQgZm9yIGNvbnNpc3RlbmN5IG9m
IG5ldyBsaW5lcyAoc2VlICMxMTE1MykKLSAgICBpZiAoIHR5cGVvZiBlbGVtLnRleHRDb250ZW50
ID09PSAic3RyaW5nIiApIHsKLSAgICByZXR1cm4gZWxlbS50ZXh0Q29udGVudDsKLSAgICB9IGVs
c2UgewotICAgIC8vIFRyYXZlcnNlIGl0cyBjaGlsZHJlbgotICAgIGZvciAoIGVsZW0gPSBlbGVt
LmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkgewotICAgIHJldCAr
PSBnZXRUZXh0KCBlbGVtICk7Ci0gICAgfQotICAgIH0KLSAgICB9IGVsc2UgaWYgKCBub2RlVHlw
ZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHsKLSAgICByZXR1cm4gZWxlbS5ub2RlVmFsdWU7
Ci0gICAgfQotICAgIC8vIERvIG5vdCBpbmNsdWRlIGNvbW1lbnQgb3IgcHJvY2Vzc2luZyBpbnN0
cnVjdGlvbiBub2RlcwotCi0gICAgcmV0dXJuIHJldDsKLX07Ci0KLUV4cHIgPSBTaXp6bGUuc2Vs
ZWN0b3JzID0gewotCi0gICAgLy8gQ2FuIGJlIGFkanVzdGVkIGJ5IHRoZSB1c2VyCi0gICAgY2Fj
aGVMZW5ndGg6IDUwLAotCi0gICAgY3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rpb24sCi0KLSAgICBt
YXRjaDogbWF0Y2hFeHByLAotCi0gICAgZmluZDoge30sCi0KLSAgICByZWxhdGl2ZTogewotICAg
ICI+IjogeyBkaXI6ICJwYXJlbnROb2RlIiwgZmlyc3Q6IHRydWUgfSwKLSAgICAiICI6IHsgZGly
OiAicGFyZW50Tm9kZSIgfSwKLSAgICAiKyI6IHsgZGlyOiAicHJldmlvdXNTaWJsaW5nIiwgZmly
c3Q6IHRydWUgfSwKLSAgICAifiI6IHsgZGlyOiAicHJldmlvdXNTaWJsaW5nIiB9Ci0gICAgfSwK
LQotICAgIHByZUZpbHRlcjogewotICAgICJBVFRSIjogZnVuY3Rpb24oIG1hdGNoICkgewotICAg
IG1hdGNoWzFdID0gbWF0Y2hbMV0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTsKLQot
ICAgIC8vIE1vdmUgdGhlIGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVvdGVkIG9y
IHVucXVvdGVkCi0gICAgbWF0Y2hbM10gPSAoIG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8ICIiICku
cmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTsKLQotICAgIGlmICggbWF0Y2hbMl0gPT09
ICJ+PSIgKSB7Ci0gICAgbWF0Y2hbM10gPSAiICIgKyBtYXRjaFszXSArICIgIjsKLSAgICB9Ci0K
LSAgICByZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDQgKTsKLSAgICB9LAotCi0gICAgIkNISUxEIjog
ZnVuY3Rpb24oIG1hdGNoICkgewotICAgIC8qIG1hdGNoZXMgZnJvbSBtYXRjaEV4cHJbIkNISUxE
Il0KLSAgICAxIHR5cGUgKG9ubHl8bnRofC4uLikKLSAgICAyIHdoYXQgKGNoaWxkfG9mLXR5cGUp
Ci0gICAgMyBhcmd1bWVudCAoZXZlbnxvZGR8XGQqfFxkKm4oWystXVxkKyk/fC4uLikKLSAgICA0
IHhuLWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xkKm58KQotICAgIDUgc2lnbiBv
ZiB4bi1jb21wb25lbnQKLSAgICA2IHggb2YgeG4tY29tcG9uZW50Ci0gICAgNyBzaWduIG9mIHkt
Y29tcG9uZW50Ci0gICAgOCB5IG9mIHktY29tcG9uZW50Ci0gICAgKi8KLSAgICBtYXRjaFsxXSA9
IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7Ci0KLSAgICBpZiAoIG1hdGNoWzFdLnNsaWNlKCAwLCAz
ICkgPT09ICJudGgiICkgewotICAgIC8vIG50aC0qIHJlcXVpcmVzIGFyZ3VtZW50Ci0gICAgaWYg
KCAhbWF0Y2hbM10gKSB7Ci0gICAgU2l6emxlLmVycm9yKCBtYXRjaFswXSApOwotICAgIH0KLQot
ICAgIC8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZvciBFeHByLmZpbHRlci5DSElMRAot
ICAgIC8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzEK
LSAgICBtYXRjaFs0XSA9ICsoIG1hdGNoWzRdID8gbWF0Y2hbNV0gKyAobWF0Y2hbNl0gfHwgMSkg
OiAyICogKCBtYXRjaFszXSA9PT0gImV2ZW4iIHx8IG1hdGNoWzNdID09PSAib2RkIiApICk7Ci0g
ICAgbWF0Y2hbNV0gPSArKCAoIG1hdGNoWzddICsgbWF0Y2hbOF0gKSB8fCBtYXRjaFszXSA9PT0g
Im9kZCIgKTsKLQotICAgIC8vIG90aGVyIHR5cGVzIHByb2hpYml0IGFyZ3VtZW50cwotICAgIH0g
ZWxzZSBpZiAoIG1hdGNoWzNdICkgewotICAgIFNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gbWF0Y2g7Ci0gICAgfSwKLQotICAgICJQU0VVRE8iOiBmdW5jdGlv
biggbWF0Y2ggKSB7Ci0gICAgdmFyIGV4Y2VzcywKLSAgICB1bnF1b3RlZCA9ICFtYXRjaFs1XSAm
JiBtYXRjaFsyXTsKLQotICAgIGlmICggbWF0Y2hFeHByWyJDSElMRCJdLnRlc3QoIG1hdGNoWzBd
ICkgKSB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLy8gQWNjZXB0IHF1b3RlZCBh
cmd1bWVudHMgYXMtaXMKLSAgICBpZiAoIG1hdGNoWzRdICkgewotICAgIG1hdGNoWzJdID0gbWF0
Y2hbNF07Ci0KLSAgICAvLyBTdHJpcCBleGNlc3MgY2hhcmFjdGVycyBmcm9tIHVucXVvdGVkIGFy
Z3VtZW50cwotICAgIH0gZWxzZSBpZiAoIHVucXVvdGVkICYmIHJwc2V1ZG8udGVzdCggdW5xdW90
ZWQgKSAmJgotICAgIC8vIEdldCBleGNlc3MgZnJvbSB0b2tlbml6ZSAocmVjdXJzaXZlbHkpCi0g
ICAgKGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSApKSAmJgotICAgIC8vIGFkdmFu
Y2UgdG8gdGhlIG5leHQgY2xvc2luZyBwYXJlbnRoZXNpcwotICAgIChleGNlc3MgPSB1bnF1b3Rl
ZC5pbmRleE9mKCAiKSIsIHVucXVvdGVkLmxlbmd0aCAtIGV4Y2VzcyApIC0gdW5xdW90ZWQubGVu
Z3RoKSApIHsKLQotICAgIC8vIGV4Y2VzcyBpcyBhIG5lZ2F0aXZlIGluZGV4Ci0gICAgbWF0Y2hb
MF0gPSBtYXRjaFswXS5zbGljZSggMCwgZXhjZXNzICk7Ci0gICAgbWF0Y2hbMl0gPSB1bnF1b3Rl
ZC5zbGljZSggMCwgZXhjZXNzICk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIG9ubHkgY2FwdHVy
ZXMgbmVlZGVkIGJ5IHRoZSBwc2V1ZG8gZmlsdGVyIG1ldGhvZCAodHlwZSBhbmQgYXJndW1lbnQp
Ci0gICAgcmV0dXJuIG1hdGNoLnNsaWNlKCAwLCAzICk7Ci0gICAgfQotICAgIH0sCi0KLSAgICBm
aWx0ZXI6IHsKLQotICAgICJUQUciOiBmdW5jdGlvbiggbm9kZU5hbWUgKSB7Ci0gICAgaWYgKCBu
b2RlTmFtZSA9PT0gIioiICkgewotICAgIHJldHVybiBmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7
IH07Ci0gICAgfQotCi0gICAgbm9kZU5hbWUgPSBub2RlTmFtZS5yZXBsYWNlKCBydW5lc2NhcGUs
IGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkg
ewotICAgIHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2Uo
KSA9PT0gbm9kZU5hbWU7Ci0gICAgfTsKLSAgICB9LAotCi0gICAgIkNMQVNTIjogZnVuY3Rpb24o
IGNsYXNzTmFtZSApIHsKLSAgICB2YXIgcGF0dGVybiA9IGNsYXNzQ2FjaGVbIGNsYXNzTmFtZSAr
ICIgIiBdOwotCi0gICAgcmV0dXJuIHBhdHRlcm4gfHwKLSAgICAocGF0dGVybiA9IG5ldyBSZWdF
eHAoICIoXnwiICsgd2hpdGVzcGFjZSArICIpIiArIGNsYXNzTmFtZSArICIoIiArIHdoaXRlc3Bh
Y2UgKyAifCQpIiApKSAmJgotICAgIGNsYXNzQ2FjaGUoIGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVs
ZW0gKSB7Ci0gICAgcmV0dXJuIHBhdHRlcm4udGVzdCggZWxlbS5jbGFzc05hbWUgfHwgKHR5cGVv
ZiBlbGVtLmdldEF0dHJpYnV0ZSAhPT0gc3RydW5kZWZpbmVkICYmIGVsZW0uZ2V0QXR0cmlidXRl
KCJjbGFzcyIpKSB8fCAiIiApOwotICAgIH0pOwotICAgIH0sCi0KLSAgICAiQVRUUiI6IGZ1bmN0
aW9uKCBuYW1lLCBvcGVyYXRvciwgY2hlY2sgKSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVt
ICkgewotICAgIHZhciByZXN1bHQgPSBTaXp6bGUuYXR0ciggZWxlbSwgbmFtZSApOwotCi0gICAg
aWYgKCByZXN1bHQgPT0gbnVsbCApIHsKLSAgICByZXR1cm4gb3BlcmF0b3IgPT09ICIhPSI7Ci0g
ICAgfQotICAgIGlmICggIW9wZXJhdG9yICkgewotICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIHJlc3VsdCArPSAiIjsKLQotICAgIHJldHVybiBvcGVyYXRvciA9PT0gIj0iID8gcmVzdWx0
ID09PSBjaGVjayA6Ci0gICAgb3BlcmF0b3IgPT09ICIhPSIgPyByZXN1bHQgIT09IGNoZWNrIDoK
LSAgICBvcGVyYXRvciA9PT0gIl49IiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayAp
ID09PSAwIDoKLSAgICBvcGVyYXRvciA9PT0gIio9IiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9m
KCBjaGVjayApID4gLTEgOgotICAgIG9wZXJhdG9yID09PSAiJD0iID8gY2hlY2sgJiYgcmVzdWx0
LnNsaWNlKCAtY2hlY2subGVuZ3RoICkgPT09IGNoZWNrIDoKLSAgICBvcGVyYXRvciA9PT0gIn49
IiA/ICggIiAiICsgcmVzdWx0ICsgIiAiICkuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDoKLSAgICBv
cGVyYXRvciA9PT0gInw9IiA/IHJlc3VsdCA9PT0gY2hlY2sgfHwgcmVzdWx0LnNsaWNlKCAwLCBj
aGVjay5sZW5ndGggKyAxICkgPT09IGNoZWNrICsgIi0iIDoKLSAgICBmYWxzZTsKLSAgICB9Owot
ICAgIH0sCi0KLSAgICAiQ0hJTEQiOiBmdW5jdGlvbiggdHlwZSwgd2hhdCwgYXJndW1lbnQsIGZp
cnN0LCBsYXN0ICkgewotICAgIHZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKCAwLCAzICkgIT09ICJu
dGgiLAotICAgIGZvcndhcmQgPSB0eXBlLnNsaWNlKCAtNCApICE9PSAibGFzdCIsCi0gICAgb2ZU
eXBlID0gd2hhdCA9PT0gIm9mLXR5cGUiOwotCi0gICAgcmV0dXJuIGZpcnN0ID09PSAxICYmIGxh
c3QgPT09IDAgPwotCi0gICAgLy8gU2hvcnRjdXQgZm9yIDpudGgtKihuKQotICAgIGZ1bmN0aW9u
KCBlbGVtICkgewotICAgIHJldHVybiAhIWVsZW0ucGFyZW50Tm9kZTsKLSAgICB9IDoKLQotICAg
IGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7Ci0gICAgdmFyIGNhY2hlLCBvdXRlckNh
Y2hlLCBub2RlLCBkaWZmLCBub2RlSW5kZXgsIHN0YXJ0LAotICAgIGRpciA9IHNpbXBsZSAhPT0g
Zm9yd2FyZCA/ICJuZXh0U2libGluZyIgOiAicHJldmlvdXNTaWJsaW5nIiwKLSAgICBwYXJlbnQg
PSBlbGVtLnBhcmVudE5vZGUsCi0gICAgbmFtZSA9IG9mVHlwZSAmJiBlbGVtLm5vZGVOYW1lLnRv
TG93ZXJDYXNlKCksCi0gICAgdXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGU7Ci0KLSAgICBpZiAo
IHBhcmVudCApIHsKLQotICAgIC8vIDooZmlyc3R8bGFzdHxvbmx5KS0oY2hpbGR8b2YtdHlwZSkK
LSAgICBpZiAoIHNpbXBsZSApIHsKLSAgICB3aGlsZSAoIGRpciApIHsKLSAgICBub2RlID0gZWxl
bTsKLSAgICB3aGlsZSAoIChub2RlID0gbm9kZVsgZGlyIF0pICkgewotICAgIGlmICggb2ZUeXBl
ID8gbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDogbm9kZS5ub2RlVHlwZSA9
PT0gMSApIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIH0KLSAgICAvLyBSZXZlcnNl
IGRpcmVjdGlvbiBmb3IgOm9ubHktKiAoaWYgd2UgaGF2ZW4ndCB5ZXQgZG9uZSBzbykKLSAgICBz
dGFydCA9IGRpciA9IHR5cGUgPT09ICJvbmx5IiAmJiAhc3RhcnQgJiYgIm5leHRTaWJsaW5nIjsK
LSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgc3RhcnQgPSBbIGZvcndhcmQg
PyBwYXJlbnQuZmlyc3RDaGlsZCA6IHBhcmVudC5sYXN0Q2hpbGQgXTsKLQotICAgIC8vIG5vbi14
bWwgOm50aC1jaGlsZCguLi4pIHN0b3JlcyBjYWNoZSBkYXRhIG9uIGBwYXJlbnRgCi0gICAgaWYg
KCBmb3J3YXJkICYmIHVzZUNhY2hlICkgewotICAgIC8vIFNlZWsgYGVsZW1gIGZyb20gYSBwcmV2
aW91c2x5LWNhY2hlZCBpbmRleAotICAgIG91dGVyQ2FjaGUgPSBwYXJlbnRbIGV4cGFuZG8gXSB8
fCAocGFyZW50WyBleHBhbmRvIF0gPSB7fSk7Ci0gICAgY2FjaGUgPSBvdXRlckNhY2hlWyB0eXBl
IF0gfHwgW107Ci0gICAgbm9kZUluZGV4ID0gY2FjaGVbMF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVb
MV07Ci0gICAgZGlmZiA9IGNhY2hlWzBdID09PSBkaXJydW5zICYmIGNhY2hlWzJdOwotICAgIG5v
ZGUgPSBub2RlSW5kZXggJiYgcGFyZW50LmNoaWxkTm9kZXNbIG5vZGVJbmRleCBdOwotCi0gICAg
d2hpbGUgKCAobm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHwKLQot
ICAgIC8vIEZhbGxiYWNrIHRvIHNlZWtpbmcgYGVsZW1gIGZyb20gdGhlIHN0YXJ0Ci0gICAgKGRp
ZmYgPSBub2RlSW5kZXggPSAwKSB8fCBzdGFydC5wb3AoKSkgKSB7Ci0KLSAgICAvLyBXaGVuIGZv
dW5kLCBjYWNoZSBpbmRleGVzIG9uIGBwYXJlbnRgIGFuZCBicmVhawotICAgIGlmICggbm9kZS5u
b2RlVHlwZSA9PT0gMSAmJiArK2RpZmYgJiYgbm9kZSA9PT0gZWxlbSApIHsKLSAgICBvdXRlckNh
Y2hlWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIG5vZGVJbmRleCwgZGlmZiBdOwotICAgIGJyZWFrOwot
ICAgIH0KLSAgICB9Ci0KLSAgICAvLyBVc2UgcHJldmlvdXNseS1jYWNoZWQgZWxlbWVudCBpbmRl
eCBpZiBhdmFpbGFibGUKLSAgICB9IGVsc2UgaWYgKCB1c2VDYWNoZSAmJiAoY2FjaGUgPSAoZWxl
bVsgZXhwYW5kbyBdIHx8IChlbGVtWyBleHBhbmRvIF0gPSB7fSkpWyB0eXBlIF0pICYmIGNhY2hl
WzBdID09PSBkaXJydW5zICkgewotICAgIGRpZmYgPSBjYWNoZVsxXTsKLQotICAgIC8vIHhtbCA6
bnRoLWNoaWxkKC4uLikgb3IgOm50aC1sYXN0LWNoaWxkKC4uLikgb3IgOm50aCgtbGFzdCk/LW9m
LXR5cGUoLi4uKQotICAgIH0gZWxzZSB7Ci0gICAgLy8gVXNlIHRoZSBzYW1lIGxvb3AgYXMgYWJv
dmUgdG8gc2VlayBgZWxlbWAgZnJvbSB0aGUgc3RhcnQKLSAgICB3aGlsZSAoIChub2RlID0gKytu
b2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fAotICAgIChkaWZmID0gbm9kZUluZGV4
ID0gMCkgfHwgc3RhcnQucG9wKCkpICkgewotCi0gICAgaWYgKCAoIG9mVHlwZSA/IG5vZGUubm9k
ZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6IG5vZGUubm9kZVR5cGUgPT09IDEgKSAmJiAr
K2RpZmYgKSB7Ci0gICAgLy8gQ2FjaGUgdGhlIGluZGV4IG9mIGVhY2ggZW5jb3VudGVyZWQgZWxl
bWVudAotICAgIGlmICggdXNlQ2FjaGUgKSB7Ci0gICAgKG5vZGVbIGV4cGFuZG8gXSB8fCAobm9k
ZVsgZXhwYW5kbyBdID0ge30pKVsgdHlwZSBdID0gWyBkaXJydW5zLCBkaWZmIF07Ci0gICAgfQot
Ci0gICAgaWYgKCBub2RlID09PSBlbGVtICkgewotICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0g
ICAgfQotICAgIH0KLQotICAgIC8vIEluY29ycG9yYXRlIHRoZSBvZmZzZXQsIHRoZW4gY2hlY2sg
YWdhaW5zdCBjeWNsZSBzaXplCi0gICAgZGlmZiAtPSBsYXN0OwotICAgIHJldHVybiBkaWZmID09
PSBmaXJzdCB8fCAoIGRpZmYgJSBmaXJzdCA9PT0gMCAmJiBkaWZmIC8gZmlyc3QgPj0gMCApOwot
ICAgIH0KLSAgICB9OwotICAgIH0sCi0KLSAgICAiUFNFVURPIjogZnVuY3Rpb24oIHBzZXVkbywg
YXJndW1lbnQgKSB7Ci0gICAgLy8gcHNldWRvLWNsYXNzIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0
aXZlCi0gICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNwc2V1ZG8tY2xhc3Nl
cwotICAgIC8vIFByaW9yaXRpemUgYnkgY2FzZSBzZW5zaXRpdml0eSBpbiBjYXNlIGN1c3RvbSBw
c2V1ZG9zIGFyZSBhZGRlZCB3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzCi0gICAgLy8gUmVtZW1iZXIg
dGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvcwotICAgIHZhciBhcmdzLAotICAg
IGZuID0gRXhwci5wc2V1ZG9zWyBwc2V1ZG8gXSB8fCBFeHByLnNldEZpbHRlcnNbIHBzZXVkby50
b0xvd2VyQ2FzZSgpIF0gfHwKLSAgICBTaXp6bGUuZXJyb3IoICJ1bnN1cHBvcnRlZCBwc2V1ZG86
ICIgKyBwc2V1ZG8gKTsKLQotICAgIC8vIFRoZSB1c2VyIG1heSB1c2UgY3JlYXRlUHNldWRvIHRv
IGluZGljYXRlIHRoYXQKLSAgICAvLyBhcmd1bWVudHMgYXJlIG5lZWRlZCB0byBjcmVhdGUgdGhl
IGZpbHRlciBmdW5jdGlvbgotICAgIC8vIGp1c3QgYXMgU2l6emxlIGRvZXMKLSAgICBpZiAoIGZu
WyBleHBhbmRvIF0gKSB7Ci0gICAgcmV0dXJuIGZuKCBhcmd1bWVudCApOwotICAgIH0KLQotICAg
IC8vIEJ1dCBtYWludGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlcwotICAgIGlmICggZm4u
bGVuZ3RoID4gMSApIHsKLSAgICBhcmdzID0gWyBwc2V1ZG8sIHBzZXVkbywgIiIsIGFyZ3VtZW50
IF07Ci0gICAgcmV0dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eSggcHNldWRvLnRv
TG93ZXJDYXNlKCkgKSA/Ci0gICAgbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVz
ICkgewotICAgIHZhciBpZHgsCi0gICAgbWF0Y2hlZCA9IGZuKCBzZWVkLCBhcmd1bWVudCApLAot
ICAgIGkgPSBtYXRjaGVkLmxlbmd0aDsKLSAgICB3aGlsZSAoIGktLSApIHsKLSAgICBpZHggPSBp
bmRleE9mLmNhbGwoIHNlZWQsIG1hdGNoZWRbaV0gKTsKLSAgICBzZWVkWyBpZHggXSA9ICEoIG1h
dGNoZXNbIGlkeCBdID0gbWF0Y2hlZFtpXSApOwotICAgIH0KLSAgICB9KSA6Ci0gICAgZnVuY3Rp
b24oIGVsZW0gKSB7Ci0gICAgcmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7Ci0gICAgfTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZm47Ci0gICAgfQotICAgIH0sCi0KLSAgICBwc2V1ZG9zOiB7Ci0g
ICAgLy8gUG90ZW50aWFsbHkgY29tcGxleCBwc2V1ZG9zCi0gICAgIm5vdCI6IG1hcmtGdW5jdGlv
bihmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0gICAgLy8gVHJpbSB0aGUgc2VsZWN0b3IgcGFzc2Vk
IHRvIGNvbXBpbGUKLSAgICAvLyB0byBhdm9pZCB0cmVhdGluZyBsZWFkaW5nIGFuZCB0cmFpbGlu
ZwotICAgIC8vIHNwYWNlcyBhcyBjb21iaW5hdG9ycwotICAgIHZhciBpbnB1dCA9IFtdLAotICAg
IHJlc3VsdHMgPSBbXSwKLSAgICBtYXRjaGVyID0gY29tcGlsZSggc2VsZWN0b3IucmVwbGFjZSgg
cnRyaW0sICIkMSIgKSApOwotCi0gICAgcmV0dXJuIG1hdGNoZXJbIGV4cGFuZG8gXSA/Ci0gICAg
bWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzLCBjb250ZXh0LCB4bWwgKSB7Ci0g
ICAgdmFyIGVsZW0sCi0gICAgdW5tYXRjaGVkID0gbWF0Y2hlciggc2VlZCwgbnVsbCwgeG1sLCBb
XSApLAotICAgIGkgPSBzZWVkLmxlbmd0aDsKLQotICAgIC8vIE1hdGNoIGVsZW1lbnRzIHVubWF0
Y2hlZCBieSBgbWF0Y2hlcmAKLSAgICB3aGlsZSAoIGktLSApIHsKLSAgICBpZiAoIChlbGVtID0g
dW5tYXRjaGVkW2ldKSApIHsKLSAgICBzZWVkW2ldID0gIShtYXRjaGVzW2ldID0gZWxlbSk7Ci0g
ICAgfQotICAgIH0KLSAgICB9KSA6Ci0gICAgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCAp
IHsKLSAgICBpbnB1dFswXSA9IGVsZW07Ci0gICAgbWF0Y2hlciggaW5wdXQsIG51bGwsIHhtbCwg
cmVzdWx0cyApOwotICAgIHJldHVybiAhcmVzdWx0cy5wb3AoKTsKLSAgICB9OwotICAgIH0pLAot
Ci0gICAgImhhcyI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0gICAgcmV0
dXJuIGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHJldHVybiBTaXp6bGUoIHNlbGVjdG9yLCBlbGVt
ICkubGVuZ3RoID4gMDsKLSAgICB9OwotICAgIH0pLAotCi0gICAgImNvbnRhaW5zIjogbWFya0Z1
bmN0aW9uKGZ1bmN0aW9uKCB0ZXh0ICkgewotICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsK
LSAgICByZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGVsZW0uaW5uZXJUZXh0IHx8IGdldFRl
eHQoIGVsZW0gKSApLmluZGV4T2YoIHRleHQgKSA+IC0xOwotICAgIH07Ci0gICAgfSksCi0KLSAg
ICAvLyAiV2hldGhlciBhbiBlbGVtZW50IGlzIHJlcHJlc2VudGVkIGJ5IGEgOmxhbmcoKSBzZWxl
Y3RvcgotICAgIC8vIGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZh
bHVlCi0gICAgLy8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQywKLSAgICAvLyBvciBi
ZWdpbm5pbmcgd2l0aCB0aGUgaWRlbnRpZmllciBDIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5ICIt
Ii4KLSAgICAvLyBUaGUgbWF0Y2hpbmcgb2YgQyBhZ2FpbnN0IHRoZSBlbGVtZW50J3MgbGFuZ3Vh
Z2UgdmFsdWUgaXMgcGVyZm9ybWVkIGNhc2UtaW5zZW5zaXRpdmVseS4KLSAgICAvLyBUaGUgaWRl
bnRpZmllciBDIGRvZXMgbm90IGhhdmUgdG8gYmUgYSB2YWxpZCBsYW5ndWFnZSBuYW1lLiIKLSAg
ICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2xhbmctcHNldWRvCi0gICAgImxh
bmciOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBsYW5nICkgewotICAgIC8vIGxhbmcgdmFsdWUg
bXVzdCBiZSBhIHZhbGlkIGlkZW50aWZpZGVyCi0gICAgaWYgKCAhcmlkZW50aWZpZXIudGVzdChs
YW5nIHx8ICIiKSApIHsKLSAgICBTaXp6bGUuZXJyb3IoICJ1bnN1cHBvcnRlZCBsYW5nOiAiICsg
bGFuZyApOwotICAgIH0KLSAgICBsYW5nID0gbGFuZy5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVz
Y2FwZSApLnRvTG93ZXJDYXNlKCk7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgewotICAg
IHZhciBlbGVtTGFuZzsKLSAgICBkbyB7Ci0gICAgaWYgKCAoZWxlbUxhbmcgPSBkb2N1bWVudElz
WE1MID8KLSAgICBlbGVtLmdldEF0dHJpYnV0ZSgieG1sOmxhbmciKSB8fCBlbGVtLmdldEF0dHJp
YnV0ZSgibGFuZyIpIDoKLSAgICBlbGVtLmxhbmcpICkgewotCi0gICAgZWxlbUxhbmcgPSBlbGVt
TGFuZy50b0xvd2VyQ2FzZSgpOwotICAgIHJldHVybiBlbGVtTGFuZyA9PT0gbGFuZyB8fCBlbGVt
TGFuZy5pbmRleE9mKCBsYW5nICsgIi0iICkgPT09IDA7Ci0gICAgfQotICAgIH0gd2hpbGUgKCAo
ZWxlbSA9IGVsZW0ucGFyZW50Tm9kZSkgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApOwotICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9OwotICAgIH0pLAotCi0gICAgLy8gTWlzY2VsbGFuZW91cwotICAg
ICJ0YXJnZXQiOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICB2YXIgaGFzaCA9IHdpbmRvdy5sb2Nh
dGlvbiAmJiB3aW5kb3cubG9jYXRpb24uaGFzaDsKLSAgICByZXR1cm4gaGFzaCAmJiBoYXNoLnNs
aWNlKCAxICkgPT09IGVsZW0uaWQ7Ci0gICAgfSwKLQotICAgICJyb290IjogZnVuY3Rpb24oIGVs
ZW0gKSB7Ci0gICAgcmV0dXJuIGVsZW0gPT09IGRvY0VsZW07Ci0gICAgfSwKLQotICAgICJmb2N1
cyI6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHJldHVybiBlbGVtID09PSBkb2N1bWVudC5hY3Rp
dmVFbGVtZW50ICYmICghZG9jdW1lbnQuaGFzRm9jdXMgfHwgZG9jdW1lbnQuaGFzRm9jdXMoKSkg
JiYgISEoZWxlbS50eXBlIHx8IGVsZW0uaHJlZiB8fCB+ZWxlbS50YWJJbmRleCk7Ci0gICAgfSwK
LQotICAgIC8vIEJvb2xlYW4gcHJvcGVydGllcwotICAgICJlbmFibGVkIjogZnVuY3Rpb24oIGVs
ZW0gKSB7Ci0gICAgcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGZhbHNlOwotICAgIH0sCi0KLSAg
ICAiZGlzYWJsZWQiOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICByZXR1cm4gZWxlbS5kaXNhYmxl
ZCA9PT0gdHJ1ZTsKLSAgICB9LAotCi0gICAgImNoZWNrZWQiOiBmdW5jdGlvbiggZWxlbSApIHsK
LSAgICAvLyBJbiBDU1MzLCA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIGJvdGggY2hlY2tlZCBhbmQg
c2VsZWN0ZWQgZWxlbWVudHMKLSAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1j
c3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZAotICAgIHZhciBub2RlTmFtZSA9IGVsZW0u
bm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKLSAgICByZXR1cm4gKG5vZGVOYW1lID09PSAiaW5wdXQi
ICYmICEhZWxlbS5jaGVja2VkKSB8fCAobm9kZU5hbWUgPT09ICJvcHRpb24iICYmICEhZWxlbS5z
ZWxlY3RlZCk7Ci0gICAgfSwKLQotICAgICJzZWxlY3RlZCI6IGZ1bmN0aW9uKCBlbGVtICkgewot
ICAgIC8vIEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5IG1ha2VzIHNlbGVjdGVkLWJ5LWRlZmF1bHQK
LSAgICAvLyBvcHRpb25zIGluIFNhZmFyaSB3b3JrIHByb3Blcmx5Ci0gICAgaWYgKCBlbGVtLnBh
cmVudE5vZGUgKSB7Ci0gICAgZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGVsZW0uc2VsZWN0ZWQgPT09IHRydWU7Ci0gICAgfSwKLQotICAgIC8vIENv
bnRlbnRzCi0gICAgImVtcHR5IjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgLy8gaHR0cDovL3d3
dy53My5vcmcvVFIvc2VsZWN0b3JzLyNlbXB0eS1wc2V1ZG8KLSAgICAvLyA6ZW1wdHkgaXMgb25s
eSBhZmZlY3RlZCBieSBlbGVtZW50IG5vZGVzIGFuZCBjb250ZW50IG5vZGVzKGluY2x1ZGluZyB0
ZXh0KDMpLCBjZGF0YSg0KSksCi0gICAgLy8gICBub3QgY29tbWVudCwgcHJvY2Vzc2luZyBpbnN0
cnVjdGlvbnMsIG9yIG90aGVycwotICAgIC8vIFRoYW5rcyB0byBEaWVnbyBQZXJpbmkgZm9yIHRo
ZSBub2RlTmFtZSBzaG9ydGN1dAotICAgIC8vICAgR3JlYXRlciB0aGFuICJAIiBtZWFucyBhbHBo
YSBjaGFyYWN0ZXJzIChzcGVjaWZpY2FsbHkgbm90IHN0YXJ0aW5nIHdpdGggIiMiIG9yICI/IikK
LSAgICBmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0
U2libGluZyApIHsKLSAgICBpZiAoIGVsZW0ubm9kZU5hbWUgPiAiQCIgfHwgZWxlbS5ub2RlVHlw
ZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA0ICkgewotICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICAgIH0sCi0KLSAgICAicGFyZW50IjogZnVu
Y3Rpb24oIGVsZW0gKSB7Ci0gICAgcmV0dXJuICFFeHByLnBzZXVkb3NbImVtcHR5Il0oIGVsZW0g
KTsKLSAgICB9LAotCi0gICAgLy8gRWxlbWVudC9pbnB1dCB0eXBlcwotICAgICJoZWFkZXIiOiBm
dW5jdGlvbiggZWxlbSApIHsKLSAgICByZXR1cm4gcmhlYWRlci50ZXN0KCBlbGVtLm5vZGVOYW1l
ICk7Ci0gICAgfSwKLQotICAgICJpbnB1dCI6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHJldHVy
biByaW5wdXRzLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTsKLSAgICB9LAotCi0gICAgImJ1dHRvbiI6
IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2Vy
Q2FzZSgpOwotICAgIHJldHVybiBuYW1lID09PSAiaW5wdXQiICYmIGVsZW0udHlwZSA9PT0gImJ1
dHRvbiIgfHwgbmFtZSA9PT0gImJ1dHRvbiI7Ci0gICAgfSwKLQotICAgICJ0ZXh0IjogZnVuY3Rp
b24oIGVsZW0gKSB7Ci0gICAgdmFyIGF0dHI7Ci0gICAgLy8gSUU2IGFuZCA3IHdpbGwgbWFwIGVs
ZW0udHlwZSB0byAndGV4dCcgZm9yIG5ldyBIVE1MNSB0eXBlcyAoc2VhcmNoLCBldGMpCi0gICAg
Ly8gdXNlIGdldEF0dHJpYnV0ZSBpbnN0ZWFkIHRvIHRlc3QgdGhpcyBjYXNlCi0gICAgcmV0dXJu
IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImlucHV0IiAmJgotICAgIGVsZW0udHlw
ZSA9PT0gInRleHQiICYmCi0gICAgKCAoYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKCJ0eXBlIikp
ID09IG51bGwgfHwgYXR0ci50b0xvd2VyQ2FzZSgpID09PSBlbGVtLnR5cGUgKTsKLSAgICB9LAot
Ci0gICAgLy8gUG9zaXRpb24taW4tY29sbGVjdGlvbgotICAgICJmaXJzdCI6IGNyZWF0ZVBvc2l0
aW9uYWxQc2V1ZG8oZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIFsgMCBdOwotICAgIH0pLAotCi0g
ICAgImxhc3QiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMs
IGxlbmd0aCApIHsKLSAgICByZXR1cm4gWyBsZW5ndGggLSAxIF07Ci0gICAgfSksCi0KLSAgICAi
ZXEiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0
aCwgYXJndW1lbnQgKSB7Ci0gICAgcmV0dXJuIFsgYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBs
ZW5ndGggOiBhcmd1bWVudCBdOwotICAgIH0pLAotCi0gICAgImV2ZW4iOiBjcmVhdGVQb3NpdGlv
bmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHsKLSAgICB2YXIgaSA9
IDA7Ci0gICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7Ci0gICAgbWF0Y2hJbmRleGVz
LnB1c2goIGkgKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1hdGNoSW5kZXhlczsKLSAgICB9KSwKLQot
ICAgICJvZGQiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMs
IGxlbmd0aCApIHsKLSAgICB2YXIgaSA9IDE7Ci0gICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpICs9
IDIgKSB7Ci0gICAgbWF0Y2hJbmRleGVzLnB1c2goIGkgKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1h
dGNoSW5kZXhlczsKLSAgICB9KSwKLQotICAgICJsdCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8o
ZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHsKLSAgICB2YXIgaSA9
IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7Ci0gICAgZm9yICgg
OyAtLWkgPj0gMDsgKSB7Ci0gICAgbWF0Y2hJbmRleGVzLnB1c2goIGkgKTsKLSAgICB9Ci0gICAg
cmV0dXJuIG1hdGNoSW5kZXhlczsKLSAgICB9KSwKLQotICAgICJndCI6IGNyZWF0ZVBvc2l0aW9u
YWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHsKLSAg
ICB2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7Ci0g
ICAgZm9yICggOyArK2kgPCBsZW5ndGg7ICkgewotICAgIG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7
Ci0gICAgfQotICAgIHJldHVybiBtYXRjaEluZGV4ZXM7Ci0gICAgfSkKLSAgICB9Ci19OwotCi0v
LyBBZGQgYnV0dG9uL2lucHV0IHR5cGUgcHNldWRvcwotZm9yICggaSBpbiB7IHJhZGlvOiB0cnVl
LCBjaGVja2JveDogdHJ1ZSwgZmlsZTogdHJ1ZSwgcGFzc3dvcmQ6IHRydWUsIGltYWdlOiB0cnVl
IH0gKSB7Ci0gICAgRXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVJbnB1dFBzZXVkbyggaSApOwot
fQotZm9yICggaSBpbiB7IHN1Ym1pdDogdHJ1ZSwgcmVzZXQ6IHRydWUgfSApIHsKLSAgICBFeHBy
LnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUJ1dHRvblBzZXVkbyggaSApOwotfQotCi1mdW5jdGlvbiB0
b2tlbml6ZSggc2VsZWN0b3IsIHBhcnNlT25seSApIHsKLSAgICB2YXIgbWF0Y2hlZCwgbWF0Y2gs
IHRva2VucywgdHlwZSwKLSAgICBzb0ZhciwgZ3JvdXBzLCBwcmVGaWx0ZXJzLAotICAgIGNhY2hl
ZCA9IHRva2VuQ2FjaGVbIHNlbGVjdG9yICsgIiAiIF07Ci0KLSAgICBpZiAoIGNhY2hlZCApIHsK
LSAgICByZXR1cm4gcGFyc2VPbmx5ID8gMCA6IGNhY2hlZC5zbGljZSggMCApOwotICAgIH0KLQot
ICAgIHNvRmFyID0gc2VsZWN0b3I7Ci0gICAgZ3JvdXBzID0gW107Ci0gICAgcHJlRmlsdGVycyA9
IEV4cHIucHJlRmlsdGVyOwotCi0gICAgd2hpbGUgKCBzb0ZhciApIHsKLQotICAgIC8vIENvbW1h
IGFuZCBmaXJzdCBydW4KLSAgICBpZiAoICFtYXRjaGVkIHx8IChtYXRjaCA9IHJjb21tYS5leGVj
KCBzb0ZhciApKSApIHsKLSAgICBpZiAoIG1hdGNoICkgewotICAgIC8vIERvbid0IGNvbnN1bWUg
dHJhaWxpbmcgY29tbWFzIGFzIHZhbGlkCi0gICAgc29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hb
MF0ubGVuZ3RoICkgfHwgc29GYXI7Ci0gICAgfQotICAgIGdyb3Vwcy5wdXNoKCB0b2tlbnMgPSBb
XSApOwotICAgIH0KLQotICAgIG1hdGNoZWQgPSBmYWxzZTsKLQotICAgIC8vIENvbWJpbmF0b3Jz
Ci0gICAgaWYgKCAobWF0Y2ggPSByY29tYmluYXRvcnMuZXhlYyggc29GYXIgKSkgKSB7Ci0gICAg
bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7Ci0gICAgdG9rZW5zLnB1c2goIHsKLSAgICB2YWx1ZTog
bWF0Y2hlZCwKLSAgICAvLyBDYXN0IGRlc2NlbmRhbnQgY29tYmluYXRvcnMgdG8gc3BhY2UKLSAg
ICB0eXBlOiBtYXRjaFswXS5yZXBsYWNlKCBydHJpbSwgIiAiICkKLSAgICB9ICk7Ci0gICAgc29G
YXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTsKLSAgICB9Ci0KLSAgICAvLyBGaWx0
ZXJzCi0gICAgZm9yICggdHlwZSBpbiBFeHByLmZpbHRlciApIHsKLSAgICBpZiAoIChtYXRjaCA9
IG1hdGNoRXhwclsgdHlwZSBdLmV4ZWMoIHNvRmFyICkpICYmICghcHJlRmlsdGVyc1sgdHlwZSBd
IHx8Ci0gICAgKG1hdGNoID0gcHJlRmlsdGVyc1sgdHlwZSBdKCBtYXRjaCApKSkgKSB7Ci0gICAg
bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7Ci0gICAgdG9rZW5zLnB1c2goIHsKLSAgICB2YWx1ZTog
bWF0Y2hlZCwKLSAgICB0eXBlOiB0eXBlLAotICAgIG1hdGNoZXM6IG1hdGNoCi0gICAgfSApOwot
ICAgIHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7Ci0gICAgfQotICAgIH0K
LQotICAgIGlmICggIW1hdGNoZWQgKSB7Ci0gICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLQotICAg
IC8vIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnZhbGlkIGV4Y2VzcwotICAgIC8vIGlmIHdl
J3JlIGp1c3QgcGFyc2luZwotICAgIC8vIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3Igb3IgcmV0
dXJuIHRva2VucwotICAgIHJldHVybiBwYXJzZU9ubHkgPwotICAgIHNvRmFyLmxlbmd0aCA6Ci0g
ICAgc29GYXIgPwotICAgIFNpenpsZS5lcnJvciggc2VsZWN0b3IgKSA6Ci0gICAgLy8gQ2FjaGUg
dGhlIHRva2VucwotICAgIHRva2VuQ2FjaGUoIHNlbGVjdG9yLCBncm91cHMgKS5zbGljZSggMCAp
OwotfQotCi1mdW5jdGlvbiB0b1NlbGVjdG9yKCB0b2tlbnMgKSB7Ci0gICAgdmFyIGkgPSAwLAot
ICAgIGxlbiA9IHRva2Vucy5sZW5ndGgsCi0gICAgc2VsZWN0b3IgPSAiIjsKLSAgICBmb3IgKCA7
IGkgPCBsZW47IGkrKyApIHsKLSAgICBzZWxlY3RvciArPSB0b2tlbnNbaV0udmFsdWU7Ci0gICAg
fQotICAgIHJldHVybiBzZWxlY3RvcjsKLX0KLQotZnVuY3Rpb24gYWRkQ29tYmluYXRvciggbWF0
Y2hlciwgY29tYmluYXRvciwgYmFzZSApIHsKLSAgICB2YXIgZGlyID0gY29tYmluYXRvci5kaXIs
Ci0gICAgY2hlY2tOb25FbGVtZW50cyA9IGJhc2UgJiYgZGlyID09PSAicGFyZW50Tm9kZSIsCi0g
ICAgZG9uZU5hbWUgPSBkb25lKys7Ci0KLSAgICByZXR1cm4gY29tYmluYXRvci5maXJzdCA/Ci0g
ICAgLy8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50Ci0g
ICAgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKLSAgICB3aGlsZSAoIChlbGVtID0g
ZWxlbVsgZGlyIF0pICkgewotICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05v
bkVsZW1lbnRzICkgewotICAgIHJldHVybiBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKTsK
LSAgICB9Ci0gICAgfQotICAgIH0gOgotCi0gICAgLy8gQ2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0
b3IvcHJlY2VkaW5nIGVsZW1lbnRzCi0gICAgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCAp
IHsKLSAgICB2YXIgZGF0YSwgY2FjaGUsIG91dGVyQ2FjaGUsCi0gICAgZGlya2V5ID0gZGlycnVu
cyArICIgIiArIGRvbmVOYW1lOwotCi0gICAgLy8gV2UgY2FuJ3Qgc2V0IGFyYml0cmFyeSBkYXRh
IG9uIFhNTCBub2Rlcywgc28gdGhleSBkb24ndCBiZW5lZml0IGZyb20gZGlyIGNhY2hpbmcKLSAg
ICBpZiAoIHhtbCApIHsKLSAgICB3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkgewotICAg
IGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkgewotICAgIGlm
ICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIH0KLSAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICB3aGlsZSAoIChlbGVtID0gZWxl
bVsgZGlyIF0pICkgewotICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVs
ZW1lbnRzICkgewotICAgIG91dGVyQ2FjaGUgPSBlbGVtWyBleHBhbmRvIF0gfHwgKGVsZW1bIGV4
cGFuZG8gXSA9IHt9KTsKLSAgICBpZiAoIChjYWNoZSA9IG91dGVyQ2FjaGVbIGRpciBdKSAmJiBj
YWNoZVswXSA9PT0gZGlya2V5ICkgewotICAgIGlmICggKGRhdGEgPSBjYWNoZVsxXSkgPT09IHRy
dWUgfHwgZGF0YSA9PT0gY2FjaGVkcnVucyApIHsKLSAgICByZXR1cm4gZGF0YSA9PT0gdHJ1ZTsK
LSAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICBjYWNoZSA9IG91dGVyQ2FjaGVbIGRpciBdID0gWyBk
aXJrZXkgXTsKLSAgICBjYWNoZVsxXSA9IG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApIHx8
IGNhY2hlZHJ1bnM7Ci0gICAgaWYgKCBjYWNoZVsxXSA9PT0gdHJ1ZSApIHsKLSAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgfQotICAgIH0KLSAgICB9Ci0gICAgfQotICAgIH07Ci19Ci0KLWZ1
bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHsKLSAgICByZXR1cm4gbWF0Y2hlcnMu
bGVuZ3RoID4gMSA/Ci0gICAgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKLSAgICB2
YXIgaSA9IG1hdGNoZXJzLmxlbmd0aDsKLSAgICB3aGlsZSAoIGktLSApIHsKLSAgICBpZiAoICFt
YXRjaGVyc1tpXSggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gICAgfSA6Ci0gICAgbWF0Y2hlcnNbMF07
Ci19Ci0KLWZ1bmN0aW9uIGNvbmRlbnNlKCB1bm1hdGNoZWQsIG1hcCwgZmlsdGVyLCBjb250ZXh0
LCB4bWwgKSB7Ci0gICAgdmFyIGVsZW0sCi0gICAgbmV3VW5tYXRjaGVkID0gW10sCi0gICAgaSA9
IDAsCi0gICAgbGVuID0gdW5tYXRjaGVkLmxlbmd0aCwKLSAgICBtYXBwZWQgPSBtYXAgIT0gbnVs
bDsKLQotICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgewotICAgIGlmICggKGVsZW0gPSB1bm1h
dGNoZWRbaV0pICkgewotICAgIGlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVsZW0sIGNvbnRleHQs
IHhtbCApICkgewotICAgIG5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7Ci0gICAgaWYgKCBtYXBw
ZWQgKSB7Ci0gICAgbWFwLnB1c2goIGkgKTsKLSAgICB9Ci0gICAgfQotICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gbmV3VW5tYXRjaGVkOwotfQotCi1mdW5jdGlvbiBzZXRNYXRjaGVyKCBwcmVG
aWx0ZXIsIHNlbGVjdG9yLCBtYXRjaGVyLCBwb3N0RmlsdGVyLCBwb3N0RmluZGVyLCBwb3N0U2Vs
ZWN0b3IgKSB7Ci0gICAgaWYgKCBwb3N0RmlsdGVyICYmICFwb3N0RmlsdGVyWyBleHBhbmRvIF0g
KSB7Ci0gICAgcG9zdEZpbHRlciA9IHNldE1hdGNoZXIoIHBvc3RGaWx0ZXIgKTsKLSAgICB9Ci0g
ICAgaWYgKCBwb3N0RmluZGVyICYmICFwb3N0RmluZGVyWyBleHBhbmRvIF0gKSB7Ci0gICAgcG9z
dEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApOwotICAgIH0K
LSAgICByZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCByZXN1bHRzLCBjb250ZXh0
LCB4bWwgKSB7Ci0gICAgdmFyIHRlbXAsIGksIGVsZW0sCi0gICAgcHJlTWFwID0gW10sCi0gICAg
cG9zdE1hcCA9IFtdLAotICAgIHByZWV4aXN0aW5nID0gcmVzdWx0cy5sZW5ndGgsCi0KLSAgICAv
LyBHZXQgaW5pdGlhbCBlbGVtZW50cyBmcm9tIHNlZWQgb3IgY29udGV4dAotICAgIGVsZW1zID0g
c2VlZCB8fCBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciB8fCAiKiIsIGNvbnRleHQubm9kZVR5
cGUgPyBbIGNvbnRleHQgXSA6IGNvbnRleHQsIFtdICksCi0KLSAgICAvLyBQcmVmaWx0ZXIgdG8g
Z2V0IG1hdGNoZXIgaW5wdXQsIHByZXNlcnZpbmcgYSBtYXAgZm9yIHNlZWQtcmVzdWx0cyBzeW5j
aHJvbml6YXRpb24KLSAgICBtYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxl
Y3RvciApID8KLSAgICBjb25kZW5zZSggZWxlbXMsIHByZU1hcCwgcHJlRmlsdGVyLCBjb250ZXh0
LCB4bWwgKSA6Ci0gICAgZWxlbXMsCi0KLSAgICBtYXRjaGVyT3V0ID0gbWF0Y2hlciA/Ci0gICAg
Ly8gSWYgd2UgaGF2ZSBhIHBvc3RGaW5kZXIsIG9yIGZpbHRlcmVkIHNlZWQsIG9yIG5vbi1zZWVk
IHBvc3RGaWx0ZXIgb3IgcHJlZXhpc3RpbmcgcmVzdWx0cywKLSAgICBwb3N0RmluZGVyIHx8ICgg
c2VlZCA/IHByZUZpbHRlciA6IHByZWV4aXN0aW5nIHx8IHBvc3RGaWx0ZXIgKSA/Ci0KLSAgICAv
LyAuLi5pbnRlcm1lZGlhdGUgcHJvY2Vzc2luZyBpcyBuZWNlc3NhcnkKLSAgICBbXSA6Ci0KLSAg
ICAvLyAuLi5vdGhlcndpc2UgdXNlIHJlc3VsdHMgZGlyZWN0bHkKLSAgICByZXN1bHRzIDoKLSAg
ICBtYXRjaGVySW47Ci0KLSAgICAvLyBGaW5kIHByaW1hcnkgbWF0Y2hlcwotICAgIGlmICggbWF0
Y2hlciApIHsKLSAgICBtYXRjaGVyKCBtYXRjaGVySW4sIG1hdGNoZXJPdXQsIGNvbnRleHQsIHht
bCApOwotICAgIH0KLQotICAgIC8vIEFwcGx5IHBvc3RGaWx0ZXIKLSAgICBpZiAoIHBvc3RGaWx0
ZXIgKSB7Ci0gICAgdGVtcCA9IGNvbmRlbnNlKCBtYXRjaGVyT3V0LCBwb3N0TWFwICk7Ci0gICAg
cG9zdEZpbHRlciggdGVtcCwgW10sIGNvbnRleHQsIHhtbCApOwotCi0gICAgLy8gVW4tbWF0Y2gg
ZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhlbSBiYWNrIHRvIG1hdGNoZXJJbgotICAgIGkg
PSB0ZW1wLmxlbmd0aDsKLSAgICB3aGlsZSAoIGktLSApIHsKLSAgICBpZiAoIChlbGVtID0gdGVt
cFtpXSkgKSB7Ci0gICAgbWF0Y2hlck91dFsgcG9zdE1hcFtpXSBdID0gIShtYXRjaGVySW5bIHBv
c3RNYXBbaV0gXSA9IGVsZW0pOwotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAgaWYgKCBzZWVk
ICkgewotICAgIGlmICggcG9zdEZpbmRlciB8fCBwcmVGaWx0ZXIgKSB7Ci0gICAgaWYgKCBwb3N0
RmluZGVyICkgewotICAgIC8vIEdldCB0aGUgZmluYWwgbWF0Y2hlck91dCBieSBjb25kZW5zaW5n
IHRoaXMgaW50ZXJtZWRpYXRlIGludG8gcG9zdEZpbmRlciBjb250ZXh0cwotICAgIHRlbXAgPSBb
XTsKLSAgICBpID0gbWF0Y2hlck91dC5sZW5ndGg7Ci0gICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAg
aWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICkgewotICAgIC8vIFJlc3RvcmUgbWF0Y2hlcklu
IHNpbmNlIGVsZW0gaXMgbm90IHlldCBhIGZpbmFsIG1hdGNoCi0gICAgdGVtcC5wdXNoKCAobWF0
Y2hlckluW2ldID0gZWxlbSkgKTsKLSAgICB9Ci0gICAgfQotICAgIHBvc3RGaW5kZXIoIG51bGws
IChtYXRjaGVyT3V0ID0gW10pLCB0ZW1wLCB4bWwgKTsKLSAgICB9Ci0KLSAgICAvLyBNb3ZlIG1h
dGNoZWQgZWxlbWVudHMgZnJvbSBzZWVkIHRvIHJlc3VsdHMgdG8ga2VlcCB0aGVtIHN5bmNocm9u
aXplZAotICAgIGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDsKLSAgICB3aGlsZSAoIGktLSApIHsKLSAg
ICBpZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkgJiYKLSAgICAodGVtcCA9IHBvc3RGaW5kZXIg
PyBpbmRleE9mLmNhbGwoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFtpXSkgPiAtMSApIHsKLQotICAg
IHNlZWRbdGVtcF0gPSAhKHJlc3VsdHNbdGVtcF0gPSBlbGVtKTsKLSAgICB9Ci0gICAgfQotICAg
IH0KLQotICAgIC8vIEFkZCBlbGVtZW50cyB0byByZXN1bHRzLCB0aHJvdWdoIHBvc3RGaW5kZXIg
aWYgZGVmaW5lZAotICAgIH0gZWxzZSB7Ci0gICAgbWF0Y2hlck91dCA9IGNvbmRlbnNlKAotICAg
IG1hdGNoZXJPdXQgPT09IHJlc3VsdHMgPwotICAgIG1hdGNoZXJPdXQuc3BsaWNlKCBwcmVleGlz
dGluZywgbWF0Y2hlck91dC5sZW5ndGggKSA6Ci0gICAgbWF0Y2hlck91dAotICAgICk7Ci0gICAg
aWYgKCBwb3N0RmluZGVyICkgewotICAgIHBvc3RGaW5kZXIoIG51bGwsIHJlc3VsdHMsIG1hdGNo
ZXJPdXQsIHhtbCApOwotICAgIH0gZWxzZSB7Ci0gICAgcHVzaC5hcHBseSggcmVzdWx0cywgbWF0
Y2hlck91dCApOwotICAgIH0KLSAgICB9Ci0gICAgfSk7Ci19Ci0KLWZ1bmN0aW9uIG1hdGNoZXJG
cm9tVG9rZW5zKCB0b2tlbnMgKSB7Ci0gICAgdmFyIGNoZWNrQ29udGV4dCwgbWF0Y2hlciwgaiwK
LSAgICBsZW4gPSB0b2tlbnMubGVuZ3RoLAotICAgIGxlYWRpbmdSZWxhdGl2ZSA9IEV4cHIucmVs
YXRpdmVbIHRva2Vuc1swXS50eXBlIF0sCi0gICAgaW1wbGljaXRSZWxhdGl2ZSA9IGxlYWRpbmdS
ZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZlWyIgIl0sCi0gICAgaSA9IGxlYWRpbmdSZWxhdGl2ZSA/
IDEgOiAwLAotCi0gICAgLy8gVGhlIGZvdW5kYXRpb25hbCBtYXRjaGVyIGVuc3VyZXMgdGhhdCBl
bGVtZW50cyBhcmUgcmVhY2hhYmxlIGZyb20gdG9wLWxldmVsIGNvbnRleHQocykKLSAgICBtYXRj
aENvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHsKLSAgICByZXR1cm4g
ZWxlbSA9PT0gY2hlY2tDb250ZXh0OwotICAgIH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSwK
LSAgICBtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHsK
LSAgICByZXR1cm4gaW5kZXhPZi5jYWxsKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xOwotICAg
IH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSwKLSAgICBtYXRjaGVycyA9IFsgZnVuY3Rpb24o
IGVsZW0sIGNvbnRleHQsIHhtbCApIHsKLSAgICByZXR1cm4gKCAhbGVhZGluZ1JlbGF0aXZlICYm
ICggeG1sIHx8IGNvbnRleHQgIT09IG91dGVybW9zdENvbnRleHQgKSApIHx8ICgKLSAgICAoY2hl
Y2tDb250ZXh0ID0gY29udGV4dCkubm9kZVR5cGUgPwotICAgIG1hdGNoQ29udGV4dCggZWxlbSwg
Y29udGV4dCwgeG1sICkgOgotICAgIG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1s
ICkgKTsKLSAgICB9IF07Ci0KLSAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKLSAgICBpZiAo
IChtYXRjaGVyID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zW2ldLnR5cGUgXSkgKSB7Ci0gICAgbWF0
Y2hlcnMgPSBbIGFkZENvbWJpbmF0b3IoZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksIG1hdGNo
ZXIpIF07Ci0gICAgfSBlbHNlIHsKLSAgICBtYXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1tp
XS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1tpXS5tYXRjaGVzICk7Ci0KLSAgICAvLyBSZXR1
cm4gc3BlY2lhbCB1cG9uIHNlZWluZyBhIHBvc2l0aW9uYWwgbWF0Y2hlcgotICAgIGlmICggbWF0
Y2hlclsgZXhwYW5kbyBdICkgewotICAgIC8vIEZpbmQgdGhlIG5leHQgcmVsYXRpdmUgb3BlcmF0
b3IgKGlmIGFueSkgZm9yIHByb3BlciBoYW5kbGluZwotICAgIGogPSArK2k7Ci0gICAgZm9yICgg
OyBqIDwgbGVuOyBqKysgKSB7Ci0gICAgaWYgKCBFeHByLnJlbGF0aXZlWyB0b2tlbnNbal0udHlw
ZSBdICkgewotICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHNldE1hdGNoZXIo
Ci0gICAgaSA+IDEgJiYgZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksCi0gICAgaSA+IDEgJiYg
dG9TZWxlY3RvciggdG9rZW5zLnNsaWNlKCAwLCBpIC0gMSApICkucmVwbGFjZSggcnRyaW0sICIk
MSIgKSwKLSAgICBtYXRjaGVyLAotICAgIGkgPCBqICYmIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tl
bnMuc2xpY2UoIGksIGogKSApLAotICAgIGogPCBsZW4gJiYgbWF0Y2hlckZyb21Ub2tlbnMoICh0
b2tlbnMgPSB0b2tlbnMuc2xpY2UoIGogKSkgKSwKLSAgICBqIDwgbGVuICYmIHRvU2VsZWN0b3Io
IHRva2VucyApCi0gICAgKTsKLSAgICB9Ci0gICAgbWF0Y2hlcnMucHVzaCggbWF0Y2hlciApOwot
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICk7Ci19
Ci0KLWZ1bmN0aW9uIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBz
ZXRNYXRjaGVycyApIHsKLSAgICAvLyBBIGNvdW50ZXIgdG8gc3BlY2lmeSB3aGljaCBlbGVtZW50
IGlzIGN1cnJlbnRseSBiZWluZyBtYXRjaGVkCi0gICAgdmFyIG1hdGNoZXJDYWNoZWRSdW5zID0g
MCwKLSAgICBieVNldCA9IHNldE1hdGNoZXJzLmxlbmd0aCA+IDAsCi0gICAgYnlFbGVtZW50ID0g
ZWxlbWVudE1hdGNoZXJzLmxlbmd0aCA+IDAsCi0gICAgc3VwZXJNYXRjaGVyID0gZnVuY3Rpb24o
IHNlZWQsIGNvbnRleHQsIHhtbCwgcmVzdWx0cywgZXhwYW5kQ29udGV4dCApIHsKLSAgICB2YXIg
ZWxlbSwgaiwgbWF0Y2hlciwKLSAgICBzZXRNYXRjaGVkID0gW10sCi0gICAgbWF0Y2hlZENvdW50
ID0gMCwKLSAgICBpID0gIjAiLAotICAgIHVubWF0Y2hlZCA9IHNlZWQgJiYgW10sCi0gICAgb3V0
ZXJtb3N0ID0gZXhwYW5kQ29udGV4dCAhPSBudWxsLAotICAgIGNvbnRleHRCYWNrdXAgPSBvdXRl
cm1vc3RDb250ZXh0LAotICAgIC8vIFdlIG11c3QgYWx3YXlzIGhhdmUgZWl0aGVyIHNlZWQgZWxl
bWVudHMgb3IgY29udGV4dAotICAgIGVsZW1zID0gc2VlZCB8fCBieUVsZW1lbnQgJiYgRXhwci5m
aW5kWyJUQUciXSggIioiLCBleHBhbmRDb250ZXh0ICYmIGNvbnRleHQucGFyZW50Tm9kZSB8fCBj
b250ZXh0ICksCi0gICAgLy8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0
ZXJtb3N0IG1hdGNoZXIKLSAgICBkaXJydW5zVW5pcXVlID0gKGRpcnJ1bnMgKz0gY29udGV4dEJh
Y2t1cCA9PSBudWxsID8gMSA6IE1hdGgucmFuZG9tKCkgfHwgMC4xKTsKLQotICAgIGlmICggb3V0
ZXJtb3N0ICkgewotICAgIG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ICE9PSBkb2N1bWVudCAm
JiBjb250ZXh0OwotICAgIGNhY2hlZHJ1bnMgPSBtYXRjaGVyQ2FjaGVkUnVuczsKLSAgICB9Ci0K
LSAgICAvLyBBZGQgZWxlbWVudHMgcGFzc2luZyBlbGVtZW50TWF0Y2hlcnMgZGlyZWN0bHkgdG8g
cmVzdWx0cwotICAgIC8vIEtlZXAgYGlgIGEgc3RyaW5nIGlmIHRoZXJlIGFyZSBubyBlbGVtZW50
cyBzbyBgbWF0Y2hlZENvdW50YCB3aWxsIGJlICIwMCIgYmVsb3cKLSAgICBmb3IgKCA7IChlbGVt
ID0gZWxlbXNbaV0pICE9IG51bGw7IGkrKyApIHsKLSAgICBpZiAoIGJ5RWxlbWVudCAmJiBlbGVt
ICkgewotICAgIGogPSAwOwotICAgIHdoaWxlICggKG1hdGNoZXIgPSBlbGVtZW50TWF0Y2hlcnNb
aisrXSkgKSB7Ci0gICAgaWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHsKLSAg
ICByZXN1bHRzLnB1c2goIGVsZW0gKTsKLSAgICBicmVhazsKLSAgICB9Ci0gICAgfQotICAgIGlm
ICggb3V0ZXJtb3N0ICkgewotICAgIGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlOwotICAgIGNhY2hl
ZHJ1bnMgPSArK21hdGNoZXJDYWNoZWRSdW5zOwotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUcmFj
ayB1bm1hdGNoZWQgZWxlbWVudHMgZm9yIHNldCBmaWx0ZXJzCi0gICAgaWYgKCBieVNldCApIHsK
LSAgICAvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJz
Ci0gICAgaWYgKCAoZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0pICkgewotICAgIG1hdGNoZWRDb3Vu
dC0tOwotICAgIH0KLQotICAgIC8vIExlbmd0aGVuIHRoZSBhcnJheSBmb3IgZXZlcnkgZWxlbWVu
dCwgbWF0Y2hlZCBvciBub3QKLSAgICBpZiAoIHNlZWQgKSB7Ci0gICAgdW5tYXRjaGVkLnB1c2go
IGVsZW0gKTsKLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIC8vIEFwcGx5IHNldCBmaWx0ZXJz
IHRvIHVubWF0Y2hlZCBlbGVtZW50cwotICAgIG1hdGNoZWRDb3VudCArPSBpOwotICAgIGlmICgg
YnlTZXQgJiYgaSAhPT0gbWF0Y2hlZENvdW50ICkgewotICAgIGogPSAwOwotICAgIHdoaWxlICgg
KG1hdGNoZXIgPSBzZXRNYXRjaGVyc1tqKytdKSApIHsKLSAgICBtYXRjaGVyKCB1bm1hdGNoZWQs
IHNldE1hdGNoZWQsIGNvbnRleHQsIHhtbCApOwotICAgIH0KLQotICAgIGlmICggc2VlZCApIHsK
LSAgICAvLyBSZWludGVncmF0ZSBlbGVtZW50IG1hdGNoZXMgdG8gZWxpbWluYXRlIHRoZSBuZWVk
IGZvciBzb3J0aW5nCi0gICAgaWYgKCBtYXRjaGVkQ291bnQgPiAwICkgewotICAgIHdoaWxlICgg
aS0tICkgewotICAgIGlmICggISh1bm1hdGNoZWRbaV0gfHwgc2V0TWF0Y2hlZFtpXSkgKSB7Ci0g
ICAgc2V0TWF0Y2hlZFtpXSA9IHBvcC5jYWxsKCByZXN1bHRzICk7Ci0gICAgfQotICAgIH0KLSAg
ICB9Ci0KLSAgICAvLyBEaXNjYXJkIGluZGV4IHBsYWNlaG9sZGVyIHZhbHVlcyB0byBnZXQgb25s
eSBhY3R1YWwgbWF0Y2hlcwotICAgIHNldE1hdGNoZWQgPSBjb25kZW5zZSggc2V0TWF0Y2hlZCAp
OwotICAgIH0KLQotICAgIC8vIEFkZCBtYXRjaGVzIHRvIHJlc3VsdHMKLSAgICBwdXNoLmFwcGx5
KCByZXN1bHRzLCBzZXRNYXRjaGVkICk7Ci0KLSAgICAvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBz
dWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmcK
LSAgICBpZiAoIG91dGVybW9zdCAmJiAhc2VlZCAmJiBzZXRNYXRjaGVkLmxlbmd0aCA+IDAgJiYK
LSAgICAoIG1hdGNoZWRDb3VudCArIHNldE1hdGNoZXJzLmxlbmd0aCApID4gMSApIHsKLQotICAg
IFNpenpsZS51bmlxdWVTb3J0KCByZXN1bHRzICk7Ci0gICAgfQotICAgIH0KLQotICAgIC8vIE92
ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVycwotICAgIGlm
ICggb3V0ZXJtb3N0ICkgewotICAgIGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlOwotICAgIG91dGVy
bW9zdENvbnRleHQgPSBjb250ZXh0QmFja3VwOwotICAgIH0KLQotICAgIHJldHVybiB1bm1hdGNo
ZWQ7Ci0gICAgfTsKLQotICAgIHJldHVybiBieVNldCA/Ci0gICAgbWFya0Z1bmN0aW9uKCBzdXBl
ck1hdGNoZXIgKSA6Ci0gICAgc3VwZXJNYXRjaGVyOwotfQotCi1jb21waWxlID0gU2l6emxlLmNv
bXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGdyb3VwIC8qIEludGVybmFsIFVzZSBPbmx5ICov
ICkgewotICAgIHZhciBpLAotICAgIHNldE1hdGNoZXJzID0gW10sCi0gICAgZWxlbWVudE1hdGNo
ZXJzID0gW10sCi0gICAgY2FjaGVkID0gY29tcGlsZXJDYWNoZVsgc2VsZWN0b3IgKyAiICIgXTsK
LQotICAgIGlmICggIWNhY2hlZCApIHsKLSAgICAvLyBHZW5lcmF0ZSBhIGZ1bmN0aW9uIG9mIHJl
Y3Vyc2l2ZSBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGVjayBlYWNoIGVsZW1lbnQK
LSAgICBpZiAoICFncm91cCApIHsKLSAgICBncm91cCA9IHRva2VuaXplKCBzZWxlY3RvciApOwot
ICAgIH0KLSAgICBpID0gZ3JvdXAubGVuZ3RoOwotICAgIHdoaWxlICggaS0tICkgewotICAgIGNh
Y2hlZCA9IG1hdGNoZXJGcm9tVG9rZW5zKCBncm91cFtpXSApOwotICAgIGlmICggY2FjaGVkWyBl
eHBhbmRvIF0gKSB7Ci0gICAgc2V0TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7Ci0gICAgfSBlbHNl
IHsKLSAgICBlbGVtZW50TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7Ci0gICAgfQotICAgIH0KLQot
ICAgIC8vIENhY2hlIHRoZSBjb21waWxlZCBmdW5jdGlvbgotICAgIGNhY2hlZCA9IGNvbXBpbGVy
Q2FjaGUoIHNlbGVjdG9yLCBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVy
cywgc2V0TWF0Y2hlcnMgKSApOwotICAgIH0KLSAgICByZXR1cm4gY2FjaGVkOwotfTsKLQotZnVu
Y3Rpb24gbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkgewot
ICAgIHZhciBpID0gMCwKLSAgICBsZW4gPSBjb250ZXh0cy5sZW5ndGg7Ci0gICAgZm9yICggOyBp
IDwgbGVuOyBpKysgKSB7Ci0gICAgU2l6emxlKCBzZWxlY3RvciwgY29udGV4dHNbaV0sIHJlc3Vs
dHMgKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdHM7Ci19Ci0KLWZ1bmN0aW9uIHNlbGVjdCgg
c2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7Ci0gICAgdmFyIGksIHRva2Vucywg
dG9rZW4sIHR5cGUsIGZpbmQsCi0gICAgbWF0Y2ggPSB0b2tlbml6ZSggc2VsZWN0b3IgKTsKLQot
ICAgIGlmICggIXNlZWQgKSB7Ci0gICAgLy8gVHJ5IHRvIG1pbmltaXplIG9wZXJhdGlvbnMgaWYg
dGhlcmUgaXMgb25seSBvbmUgZ3JvdXAKLSAgICBpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHsK
LQotICAgIC8vIFRha2UgYSBzaG9ydGN1dCBhbmQgc2V0IHRoZSBjb250ZXh0IGlmIHRoZSByb290
IHNlbGVjdG9yIGlzIGFuIElECi0gICAgdG9rZW5zID0gbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGlj
ZSggMCApOwotICAgIGlmICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKHRva2VuID0gdG9rZW5zWzBd
KS50eXBlID09PSAiSUQiICYmCi0gICAgY29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiAhZG9jdW1l
bnRJc1hNTCAmJgotICAgIEV4cHIucmVsYXRpdmVbIHRva2Vuc1sxXS50eXBlIF0gKSB7Ci0KLSAg
ICBjb250ZXh0ID0gRXhwci5maW5kWyJJRCJdKCB0b2tlbi5tYXRjaGVzWzBdLnJlcGxhY2UoIHJ1
bmVzY2FwZSwgZnVuZXNjYXBlICksIGNvbnRleHQgKVswXTsKLSAgICBpZiAoICFjb250ZXh0ICkg
ewotICAgIHJldHVybiByZXN1bHRzOwotICAgIH0KLQotICAgIHNlbGVjdG9yID0gc2VsZWN0b3Iu
c2xpY2UoIHRva2Vucy5zaGlmdCgpLnZhbHVlLmxlbmd0aCApOwotICAgIH0KLQotICAgIC8vIEZl
dGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmcKLSAgICBpID0gbWF0Y2hF
eHByWyJuZWVkc0NvbnRleHQiXS50ZXN0KCBzZWxlY3RvciApID8gMCA6IHRva2Vucy5sZW5ndGg7
Ci0gICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgdG9rZW4gPSB0b2tlbnNbaV07Ci0KLSAgICAvLyBB
Ym9ydCBpZiB3ZSBoaXQgYSBjb21iaW5hdG9yCi0gICAgaWYgKCBFeHByLnJlbGF0aXZlWyAodHlw
ZSA9IHRva2VuLnR5cGUpIF0gKSB7Ci0gICAgYnJlYWs7Ci0gICAgfQotICAgIGlmICggKGZpbmQg
PSBFeHByLmZpbmRbIHR5cGUgXSkgKSB7Ci0gICAgLy8gU2VhcmNoLCBleHBhbmRpbmcgY29udGV4
dCBmb3IgbGVhZGluZyBzaWJsaW5nIGNvbWJpbmF0b3JzCi0gICAgaWYgKCAoc2VlZCA9IGZpbmQo
Ci0gICAgdG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLAot
ICAgIHJzaWJsaW5nLnRlc3QoIHRva2Vuc1swXS50eXBlICkgJiYgY29udGV4dC5wYXJlbnROb2Rl
IHx8IGNvbnRleHQKLSAgICApKSApIHsKLQotICAgIC8vIElmIHNlZWQgaXMgZW1wdHkgb3Igbm8g
dG9rZW5zIHJlbWFpbiwgd2UgY2FuIHJldHVybiBlYXJseQotICAgIHRva2Vucy5zcGxpY2UoIGks
IDEgKTsKLSAgICBzZWxlY3RvciA9IHNlZWQubGVuZ3RoICYmIHRvU2VsZWN0b3IoIHRva2VucyAp
OwotICAgIGlmICggIXNlbGVjdG9yICkgewotICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIHNsaWNl
LmNhbGwoIHNlZWQsIDAgKSApOwotICAgIHJldHVybiByZXN1bHRzOwotICAgIH0KLQotICAgIGJy
ZWFrOwotICAgIH0KLSAgICB9Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDb21waWxl
IGFuZCBleGVjdXRlIGEgZmlsdGVyaW5nIGZ1bmN0aW9uCi0gICAgLy8gUHJvdmlkZSBgbWF0Y2hg
IHRvIGF2b2lkIHJldG9rZW5pemF0aW9uIGlmIHdlIG1vZGlmaWVkIHRoZSBzZWxlY3RvciBhYm92
ZQotICAgIGNvbXBpbGUoIHNlbGVjdG9yLCBtYXRjaCApKAotICAgIHNlZWQsCi0gICAgY29udGV4
dCwKLSAgICBkb2N1bWVudElzWE1MLAotICAgIHJlc3VsdHMsCi0gICAgcnNpYmxpbmcudGVzdCgg
c2VsZWN0b3IgKQotICAgICk7Ci0gICAgcmV0dXJuIHJlc3VsdHM7Ci19Ci0KLS8vIERlcHJlY2F0
ZWQKLUV4cHIucHNldWRvc1sibnRoIl0gPSBFeHByLnBzZXVkb3NbImVxIl07Ci0KLS8vIEVhc3kg
QVBJIGZvciBjcmVhdGluZyBuZXcgc2V0RmlsdGVycwotZnVuY3Rpb24gc2V0RmlsdGVycygpIHt9
Ci1FeHByLmZpbHRlcnMgPSBzZXRGaWx0ZXJzLnByb3RvdHlwZSA9IEV4cHIucHNldWRvczsKLUV4
cHIuc2V0RmlsdGVycyA9IG5ldyBzZXRGaWx0ZXJzKCk7Ci0KLS8vIEluaXRpYWxpemUgd2l0aCB0
aGUgZGVmYXVsdCBkb2N1bWVudAotc2V0RG9jdW1lbnQoKTsKLQotLy8gT3ZlcnJpZGUgc2l6emxl
IGF0dHJpYnV0ZSByZXRyaWV2YWwKLVNpenpsZS5hdHRyID0galF1ZXJ5LmF0dHI7Ci1qUXVlcnku
ZmluZCA9IFNpenpsZTsKLWpRdWVyeS5leHByID0gU2l6emxlLnNlbGVjdG9yczsKLWpRdWVyeS5l
eHByWyI6Il0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zOwotalF1ZXJ5LnVuaXF1ZSA9IFNpenpsZS51
bmlxdWVTb3J0OwotalF1ZXJ5LnRleHQgPSBTaXp6bGUuZ2V0VGV4dDsKLWpRdWVyeS5pc1hNTERv
YyA9IFNpenpsZS5pc1hNTDsKLWpRdWVyeS5jb250YWlucyA9IFNpenpsZS5jb250YWluczsKLQot
Ci19KSggd2luZG93ICk7Ci12YXIgcnVudGlsID0gL1VudGlsJC8sCi0gICAgcnBhcmVudHNwcmV2
ID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sCi0gICAgaXNTaW1wbGUgPSAvXi5b
XjojXFtcLixdKiQvLAotICAgIHJuZWVkc0NvbnRleHQgPSBqUXVlcnkuZXhwci5tYXRjaC5uZWVk
c0NvbnRleHQsCi0gICAgLy8gbWV0aG9kcyBndWFyYW50ZWVkIHRvIHByb2R1Y2UgYSB1bmlxdWUg
c2V0IHdoZW4gc3RhcnRpbmcgZnJvbSBhIHVuaXF1ZSBzZXQKLSAgICBndWFyYW50ZWVkVW5pcXVl
ID0gewotICAgIGNoaWxkcmVuOiB0cnVlLAotICAgIGNvbnRlbnRzOiB0cnVlLAotICAgIG5leHQ6
IHRydWUsCi0gICAgcHJldjogdHJ1ZQotICAgIH07Ci0KLWpRdWVyeS5mbi5leHRlbmQoewotICAg
IGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLSAgICB2YXIgaSwgcmV0LCBzZWxmLAotICAg
IGxlbiA9IHRoaXMubGVuZ3RoOwotCi0gICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJp
bmciICkgewotICAgIHNlbGYgPSB0aGlzOwotICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1
ZXJ5KCBzZWxlY3RvciApLmZpbHRlcihmdW5jdGlvbigpIHsKLSAgICBmb3IgKCBpID0gMDsgaSA8
IGxlbjsgaSsrICkgewotICAgIGlmICggalF1ZXJ5LmNvbnRhaW5zKCBzZWxmWyBpIF0sIHRoaXMg
KSApIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgfQotICAgIH0pICk7Ci0gICAgfQot
Ci0gICAgcmV0ID0gW107Ci0gICAgZm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHsKLSAgICBq
UXVlcnkuZmluZCggc2VsZWN0b3IsIHRoaXNbIGkgXSwgcmV0ICk7Ci0gICAgfQotCi0gICAgLy8g
TmVlZGVkIGJlY2F1c2UgJCggc2VsZWN0b3IsIGNvbnRleHQgKSBiZWNvbWVzICQoIGNvbnRleHQg
KS5maW5kKCBzZWxlY3RvciApCi0gICAgcmV0ID0gdGhpcy5wdXNoU3RhY2soIGxlbiA+IDEgPyBq
UXVlcnkudW5pcXVlKCByZXQgKSA6IHJldCApOwotICAgIHJldC5zZWxlY3RvciA9ICggdGhpcy5z
ZWxlY3RvciA/IHRoaXMuc2VsZWN0b3IgKyAiICIgOiAiIiApICsgc2VsZWN0b3I7Ci0gICAgcmV0
dXJuIHJldDsKLSAgICB9LAotCi0gICAgaGFzOiBmdW5jdGlvbiggdGFyZ2V0ICkgewotICAgIHZh
ciBpLAotICAgIHRhcmdldHMgPSBqUXVlcnkoIHRhcmdldCwgdGhpcyApLAotICAgIGxlbiA9IHRh
cmdldHMubGVuZ3RoOwotCi0gICAgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCkgewotICAg
IGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7Ci0gICAgaWYgKCBqUXVlcnkuY29udGFpbnMo
IHRoaXMsIHRhcmdldHNbaV0gKSApIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgfQot
ICAgIH0pOwotICAgIH0sCi0KLSAgICBub3Q6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLSAgICBy
ZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyh0aGlzLCBzZWxlY3RvciwgZmFsc2UpICk7Ci0g
ICAgfSwKLQotICAgIGZpbHRlcjogZnVuY3Rpb24oIHNlbGVjdG9yICkgewotICAgIHJldHVybiB0
aGlzLnB1c2hTdGFjayggd2lubm93KHRoaXMsIHNlbGVjdG9yLCB0cnVlKSApOwotICAgIH0sCi0K
LSAgICBpczogZnVuY3Rpb24oIHNlbGVjdG9yICkgewotICAgIHJldHVybiAhIXNlbGVjdG9yICYm
ICgKLSAgICB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciID8KLSAgICAvLyBJZiB0aGlzIGlz
IGEgcG9zaXRpb25hbC9yZWxhdGl2ZSBzZWxlY3RvciwgY2hlY2sgbWVtYmVyc2hpcCBpbiB0aGUg
cmV0dXJuZWQgc2V0Ci0gICAgLy8gc28gJCgicDpmaXJzdCIpLmlzKCJwOmxhc3QiKSB3b24ndCBy
ZXR1cm4gdHJ1ZSBmb3IgYSBkb2Mgd2l0aCB0d28gInAiLgotICAgIHJuZWVkc0NvbnRleHQudGVz
dCggc2VsZWN0b3IgKSA/Ci0gICAgalF1ZXJ5KCBzZWxlY3RvciwgdGhpcy5jb250ZXh0ICkuaW5k
ZXgoIHRoaXNbMF0gKSA+PSAwIDoKLSAgICBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgdGhpcyAp
Lmxlbmd0aCA+IDAgOgotICAgIHRoaXMuZmlsdGVyKCBzZWxlY3RvciApLmxlbmd0aCA+IDAgKTsK
LSAgICB9LAotCi0gICAgY2xvc2VzdDogZnVuY3Rpb24oIHNlbGVjdG9ycywgY29udGV4dCApIHsK
LSAgICB2YXIgY3VyLAotICAgIGkgPSAwLAotICAgIGwgPSB0aGlzLmxlbmd0aCwKLSAgICByZXQg
PSBbXSwKLSAgICBwb3MgPSBybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9ycyApIHx8IHR5cGVv
ZiBzZWxlY3RvcnMgIT09ICJzdHJpbmciID8KLSAgICBqUXVlcnkoIHNlbGVjdG9ycywgY29udGV4
dCB8fCB0aGlzLmNvbnRleHQgKSA6Ci0gICAgMDsKLQotICAgIGZvciAoIDsgaSA8IGw7IGkrKyAp
IHsKLSAgICBjdXIgPSB0aGlzW2ldOwotCi0gICAgd2hpbGUgKCBjdXIgJiYgY3VyLm93bmVyRG9j
dW1lbnQgJiYgY3VyICE9PSBjb250ZXh0ICYmIGN1ci5ub2RlVHlwZSAhPT0gMTEgKSB7Ci0gICAg
aWYgKCBwb3MgPyBwb3MuaW5kZXgoY3VyKSA+IC0xIDogalF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVj
dG9yKGN1ciwgc2VsZWN0b3JzKSApIHsKLSAgICByZXQucHVzaCggY3VyICk7Ci0gICAgYnJlYWs7
Ci0gICAgfQotICAgIGN1ciA9IGN1ci5wYXJlbnROb2RlOwotICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldC5sZW5ndGggPiAxID8galF1ZXJ5LnVuaXF1ZSggcmV0
ICkgOiByZXQgKTsKLSAgICB9LAotCi0gICAgLy8gRGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBvZiBh
biBlbGVtZW50IHdpdGhpbgotICAgIC8vIHRoZSBtYXRjaGVkIHNldCBvZiBlbGVtZW50cwotICAg
IGluZGV4OiBmdW5jdGlvbiggZWxlbSApIHsKLQotICAgIC8vIE5vIGFyZ3VtZW50LCByZXR1cm4g
aW5kZXggaW4gcGFyZW50Ci0gICAgaWYgKCAhZWxlbSApIHsKLSAgICByZXR1cm4gKCB0aGlzWzBd
ICYmIHRoaXNbMF0ucGFyZW50Tm9kZSApID8gdGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGgg
OiAtMTsKLSAgICB9Ci0KLSAgICAvLyBpbmRleCBpbiBzZWxlY3RvcgotICAgIGlmICggdHlwZW9m
IGVsZW0gPT09ICJzdHJpbmciICkgewotICAgIHJldHVybiBqUXVlcnkuaW5BcnJheSggdGhpc1sw
XSwgalF1ZXJ5KCBlbGVtICkgKTsKLSAgICB9Ci0KLSAgICAvLyBMb2NhdGUgdGhlIHBvc2l0aW9u
IG9mIHRoZSBkZXNpcmVkIGVsZW1lbnQKLSAgICByZXR1cm4galF1ZXJ5LmluQXJyYXkoCi0gICAg
Ly8gSWYgaXQgcmVjZWl2ZXMgYSBqUXVlcnkgb2JqZWN0LCB0aGUgZmlyc3QgZWxlbWVudCBpcyB1
c2VkCi0gICAgZWxlbS5qcXVlcnkgPyBlbGVtWzBdIDogZWxlbSwgdGhpcyApOwotICAgIH0sCi0K
LSAgICBhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHsKLSAgICB2YXIgc2V0ID0g
dHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiA/Ci0gICAgalF1ZXJ5KCBzZWxlY3RvciwgY29u
dGV4dCApIDoKLSAgICBqUXVlcnkubWFrZUFycmF5KCBzZWxlY3RvciAmJiBzZWxlY3Rvci5ub2Rl
VHlwZSA/IFsgc2VsZWN0b3IgXSA6IHNlbGVjdG9yICksCi0gICAgYWxsID0galF1ZXJ5Lm1lcmdl
KCB0aGlzLmdldCgpLCBzZXQgKTsKLQotICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5
LnVuaXF1ZShhbGwpICk7Ci0gICAgfSwKLQotICAgIGFkZEJhY2s6IGZ1bmN0aW9uKCBzZWxlY3Rv
ciApIHsKLSAgICByZXR1cm4gdGhpcy5hZGQoIHNlbGVjdG9yID09IG51bGwgPwotICAgIHRoaXMu
cHJldk9iamVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoc2VsZWN0b3IpCi0gICAgKTsKLSAg
ICB9Ci19KTsKLQotalF1ZXJ5LmZuLmFuZFNlbGYgPSBqUXVlcnkuZm4uYWRkQmFjazsKLQotZnVu
Y3Rpb24gc2libGluZyggY3VyLCBkaXIgKSB7Ci0gICAgZG8gewotICAgIGN1ciA9IGN1clsgZGly
IF07Ci0gICAgfSB3aGlsZSAoIGN1ciAmJiBjdXIubm9kZVR5cGUgIT09IDEgKTsKLQotICAgIHJl
dHVybiBjdXI7Ci19Ci0KLWpRdWVyeS5lYWNoKHsKLSAgICBwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVt
ICkgewotICAgIHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7Ci0gICAgcmV0dXJuIHBhcmVu
dCAmJiBwYXJlbnQubm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDsKLSAgICB9LAotICAg
IHBhcmVudHM6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVt
LCAicGFyZW50Tm9kZSIgKTsKLSAgICB9LAotICAgIHBhcmVudHNVbnRpbDogZnVuY3Rpb24oIGVs
ZW0sIGksIHVudGlsICkgewotICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAicGFyZW50Tm9k
ZSIsIHVudGlsICk7Ci0gICAgfSwKLSAgICBuZXh0OiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICBy
ZXR1cm4gc2libGluZyggZWxlbSwgIm5leHRTaWJsaW5nIiApOwotICAgIH0sCi0gICAgcHJldjog
ZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgcmV0dXJuIHNpYmxpbmcoIGVsZW0sICJwcmV2aW91c1Np
YmxpbmciICk7Ci0gICAgfSwKLSAgICBuZXh0QWxsOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICBy
ZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgIm5leHRTaWJsaW5nIiApOwotICAgIH0sCi0gICAgcHJl
dkFsbDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJw
cmV2aW91c1NpYmxpbmciICk7Ci0gICAgfSwKLSAgICBuZXh0VW50aWw6IGZ1bmN0aW9uKCBlbGVt
LCBpLCB1bnRpbCApIHsKLSAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgIm5leHRTaWJsaW5n
IiwgdW50aWwgKTsKLSAgICB9LAotICAgIHByZXZVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVu
dGlsICkgewotICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAicHJldmlvdXNTaWJsaW5nIiwg
dW50aWwgKTsKLSAgICB9LAotICAgIHNpYmxpbmdzOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICBy
ZXR1cm4galF1ZXJ5LnNpYmxpbmcoICggZWxlbS5wYXJlbnROb2RlIHx8IHt9ICkuZmlyc3RDaGls
ZCwgZWxlbSApOwotICAgIH0sCi0gICAgY2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkgewotICAg
IHJldHVybiBqUXVlcnkuc2libGluZyggZWxlbS5maXJzdENoaWxkICk7Ci0gICAgfSwKLSAgICBj
b250ZW50czogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5ub2RlTmFtZSgg
ZWxlbSwgImlmcmFtZSIgKSA/Ci0gICAgZWxlbS5jb250ZW50RG9jdW1lbnQgfHwgZWxlbS5jb250
ZW50V2luZG93LmRvY3VtZW50IDoKLSAgICBqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9k
ZXMgKTsKLSAgICB9Ci19LCBmdW5jdGlvbiggbmFtZSwgZm4gKSB7Ci0gICAgalF1ZXJ5LmZuWyBu
YW1lIF0gPSBmdW5jdGlvbiggdW50aWwsIHNlbGVjdG9yICkgewotICAgIHZhciByZXQgPSBqUXVl
cnkubWFwKCB0aGlzLCBmbiwgdW50aWwgKTsKLQotICAgIGlmICggIXJ1bnRpbC50ZXN0KCBuYW1l
ICkgKSB7Ci0gICAgc2VsZWN0b3IgPSB1bnRpbDsKLSAgICB9Ci0KLSAgICBpZiAoIHNlbGVjdG9y
ICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7Ci0gICAgcmV0ID0galF1ZXJ5LmZp
bHRlciggc2VsZWN0b3IsIHJldCApOwotICAgIH0KLQotICAgIHJldCA9IHRoaXMubGVuZ3RoID4g
MSAmJiAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdID8galF1ZXJ5LnVuaXF1ZSggcmV0ICkgOiBy
ZXQ7Ci0KLSAgICBpZiAoIHRoaXMubGVuZ3RoID4gMSAmJiBycGFyZW50c3ByZXYudGVzdCggbmFt
ZSApICkgewotICAgIHJldCA9IHJldC5yZXZlcnNlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRo
aXMucHVzaFN0YWNrKCByZXQgKTsKLSAgICB9OwotfSk7Ci0KLWpRdWVyeS5leHRlbmQoewotICAg
IGZpbHRlcjogZnVuY3Rpb24oIGV4cHIsIGVsZW1zLCBub3QgKSB7Ci0gICAgaWYgKCBub3QgKSB7
Ci0gICAgZXhwciA9ICI6bm90KCIgKyBleHByICsgIikiOwotICAgIH0KLQotICAgIHJldHVybiBl
bGVtcy5sZW5ndGggPT09IDEgPwotICAgIGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvcihlbGVt
c1swXSwgZXhwcikgPyBbIGVsZW1zWzBdIF0gOiBbXSA6Ci0gICAgalF1ZXJ5LmZpbmQubWF0Y2hl
cyhleHByLCBlbGVtcyk7Ci0gICAgfSwKLQotICAgIGRpcjogZnVuY3Rpb24oIGVsZW0sIGRpciwg
dW50aWwgKSB7Ci0gICAgdmFyIG1hdGNoZWQgPSBbXSwKLSAgICBjdXIgPSBlbGVtWyBkaXIgXTsK
LQotICAgIHdoaWxlICggY3VyICYmIGN1ci5ub2RlVHlwZSAhPT0gOSAmJiAodW50aWwgPT09IHVu
ZGVmaW5lZCB8fCBjdXIubm9kZVR5cGUgIT09IDEgfHwgIWpRdWVyeSggY3VyICkuaXMoIHVudGls
ICkpICkgewotICAgIGlmICggY3VyLm5vZGVUeXBlID09PSAxICkgewotICAgIG1hdGNoZWQucHVz
aCggY3VyICk7Ci0gICAgfQotICAgIGN1ciA9IGN1cltkaXJdOwotICAgIH0KLSAgICByZXR1cm4g
bWF0Y2hlZDsKLSAgICB9LAotCi0gICAgc2libGluZzogZnVuY3Rpb24oIG4sIGVsZW0gKSB7Ci0g
ICAgdmFyIHIgPSBbXTsKLQotICAgIGZvciAoIDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcgKSB7Ci0g
ICAgaWYgKCBuLm5vZGVUeXBlID09PSAxICYmIG4gIT09IGVsZW0gKSB7Ci0gICAgci5wdXNoKCBu
ICk7Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiByOwotICAgIH0KLX0pOwotCi0vLyBJbXBs
ZW1lbnQgdGhlIGlkZW50aWNhbCBmdW5jdGlvbmFsaXR5IGZvciBmaWx0ZXIgYW5kIG5vdAotZnVu
Y3Rpb24gd2lubm93KCBlbGVtZW50cywgcXVhbGlmaWVyLCBrZWVwICkgewotCi0gICAgLy8gQ2Fu
J3QgcGFzcyBudWxsIG9yIHVuZGVmaW5lZCB0byBpbmRleE9mIGluIEZpcmVmb3ggNAotICAgIC8v
IFNldCB0byAwIHRvIHNraXAgc3RyaW5nIGNoZWNrCi0gICAgcXVhbGlmaWVyID0gcXVhbGlmaWVy
IHx8IDA7Ci0KLSAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHsKLSAg
ICByZXR1cm4galF1ZXJ5LmdyZXAoZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtLCBpICkgewotICAg
IHZhciByZXRWYWwgPSAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVtICk7Ci0gICAgcmV0
dXJuIHJldFZhbCA9PT0ga2VlcDsKLSAgICB9KTsKLQotICAgIH0gZWxzZSBpZiAoIHF1YWxpZmll
ci5ub2RlVHlwZSApIHsKLSAgICByZXR1cm4galF1ZXJ5LmdyZXAoZWxlbWVudHMsIGZ1bmN0aW9u
KCBlbGVtICkgewotICAgIHJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApID09PSBrZWVwOwot
ICAgIH0pOwotCi0gICAgfSBlbHNlIGlmICggdHlwZW9mIHF1YWxpZmllciA9PT0gInN0cmluZyIg
KSB7Ci0gICAgdmFyIGZpbHRlcmVkID0galF1ZXJ5LmdyZXAoZWxlbWVudHMsIGZ1bmN0aW9uKCBl
bGVtICkgewotICAgIHJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxOwotICAgIH0pOwotCi0gICAg
aWYgKCBpc1NpbXBsZS50ZXN0KCBxdWFsaWZpZXIgKSApIHsKLSAgICByZXR1cm4galF1ZXJ5LmZp
bHRlcihxdWFsaWZpZXIsIGZpbHRlcmVkLCAha2VlcCk7Ci0gICAgfSBlbHNlIHsKLSAgICBxdWFs
aWZpZXIgPSBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGZpbHRlcmVkICk7Ci0gICAgfQotICAg
IH0KLQotICAgIHJldHVybiBqUXVlcnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7
Ci0gICAgcmV0dXJuICggalF1ZXJ5LmluQXJyYXkoIGVsZW0sIHF1YWxpZmllciApID49IDAgKSA9
PT0ga2VlcDsKLSAgICB9KTsKLX0KLWZ1bmN0aW9uIGNyZWF0ZVNhZmVGcmFnbWVudCggZG9jdW1l
bnQgKSB7Ci0gICAgdmFyIGxpc3QgPSBub2RlTmFtZXMuc3BsaXQoICJ8IiApLAotICAgIHNhZmVG
cmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotCi0gICAgaWYgKCBzYWZl
RnJhZy5jcmVhdGVFbGVtZW50ICkgewotICAgIHdoaWxlICggbGlzdC5sZW5ndGggKSB7Ci0gICAg
c2FmZUZyYWcuY3JlYXRlRWxlbWVudCgKLSAgICBsaXN0LnBvcCgpCi0gICAgKTsKLSAgICB9Ci0g
ICAgfQotICAgIHJldHVybiBzYWZlRnJhZzsKLX0KLQotdmFyIG5vZGVOYW1lcyA9ICJhYmJyfGFy
dGljbGV8YXNpZGV8YXVkaW98YmRpfGNhbnZhc3xkYXRhfGRhdGFsaXN0fGRldGFpbHN8ZmlnY2Fw
dGlvbnxmaWd1cmV8Zm9vdGVyfCIgKwotICAgICJoZWFkZXJ8aGdyb3VwfG1hcmt8bWV0ZXJ8bmF2
fG91dHB1dHxwcm9ncmVzc3xzZWN0aW9ufHN1bW1hcnl8dGltZXx2aWRlbyIsCi0gICAgcmlubGlu
ZWpRdWVyeSA9IC8galF1ZXJ5XGQrPSIoPzpudWxsfFxkKykiL2csCi0gICAgcm5vc2hpbWNhY2hl
ID0gbmV3IFJlZ0V4cCgiPCg/OiIgKyBub2RlTmFtZXMgKyAiKVtcXHMvPl0iLCAiaSIpLAotICAg
IHJsZWFkaW5nV2hpdGVzcGFjZSA9IC9eXHMrLywKLSAgICByeGh0bWxUYWcgPSAvPCg/IWFyZWF8
YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSop
XC8+L2dpLAotICAgIHJ0YWdOYW1lID0gLzwoW1x3Ol0rKS8sCi0gICAgcnRib2R5ID0gLzx0Ym9k
eS9pLAotICAgIHJodG1sID0gLzx8JiM/XHcrOy8sCi0gICAgcm5vSW5uZXJodG1sID0gLzwoPzpz
Y3JpcHR8c3R5bGV8bGluaykvaSwKLSAgICBtYW5pcHVsYXRpb25fcmNoZWNrYWJsZVR5cGUgPSAv
Xig/OmNoZWNrYm94fHJhZGlvKSQvaSwKLSAgICAvLyBjaGVja2VkPSJjaGVja2VkIiBvciBjaGVj
a2VkCi0gICAgcmNoZWNrZWQgPSAvY2hlY2tlZFxzKig/OltePV18PVxzKi5jaGVja2VkLikvaSwK
LSAgICByc2NyaXB0VHlwZSA9IC9eJHxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSwKLSAgICByc2Ny
aXB0VHlwZU1hc2tlZCA9IC9edHJ1ZVwvKC4qKS8sCi0gICAgcmNsZWFuU2NyaXB0ID0gL15ccyo8
ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nLAotCi0gICAgLy8gV2UgaGF2ZSB0
byBjbG9zZSB0aGVzZSB0YWdzIHRvIHN1cHBvcnQgWEhUTUwgKCMxMzIwMCkKLSAgICB3cmFwTWFw
ID0gewotICAgIG9wdGlvbjogWyAxLCAiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsICI8
L3NlbGVjdD4iIF0sCi0gICAgbGVnZW5kOiBbIDEsICI8ZmllbGRzZXQ+IiwgIjwvZmllbGRzZXQ+
IiBdLAotICAgIGFyZWE6IFsgMSwgIjxtYXA+IiwgIjwvbWFwPiIgXSwKLSAgICBwYXJhbTogWyAx
LCAiPG9iamVjdD4iLCAiPC9vYmplY3Q+IiBdLAotICAgIHRoZWFkOiBbIDEsICI8dGFibGU+Iiwg
IjwvdGFibGU+IiBdLAotICAgIHRyOiBbIDIsICI8dGFibGU+PHRib2R5PiIsICI8L3Rib2R5Pjwv
dGFibGU+IiBdLAotICAgIGNvbDogWyAyLCAiPHRhYmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91
cD4iLCAiPC9jb2xncm91cD48L3RhYmxlPiIgXSwKLSAgICB0ZDogWyAzLCAiPHRhYmxlPjx0Ym9k
eT48dHI+IiwgIjwvdHI+PC90Ym9keT48L3RhYmxlPiIgXSwKLQotICAgIC8vIElFNi04IGNhbid0
IHNlcmlhbGl6ZSBsaW5rLCBzY3JpcHQsIHN0eWxlLCBvciBhbnkgaHRtbDUgKE5vU2NvcGUpIHRh
Z3MsCi0gICAgLy8gdW5sZXNzIHdyYXBwZWQgaW4gYSBkaXYgd2l0aCBub24tYnJlYWtpbmcgY2hh
cmFjdGVycyBpbiBmcm9udCBvZiBpdC4KLSAgICBfZGVmYXVsdDogalF1ZXJ5LnN1cHBvcnQuaHRt
bFNlcmlhbGl6ZSA/IFsgMCwgIiIsICIiIF0gOiBbIDEsICJYPGRpdj4iLCAiPC9kaXY+IiAgXQot
ICAgIH0sCi0gICAgc2FmZUZyYWdtZW50ID0gY3JlYXRlU2FmZUZyYWdtZW50KCBkb2N1bWVudCAp
LAotICAgIGZyYWdtZW50RGl2ID0gc2FmZUZyYWdtZW50LmFwcGVuZENoaWxkKCBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJkaXYiKSApOwotCi13cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRp
b247Ci13cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9IHdyYXBNYXAuY29sZ3JvdXAgPSB3
cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkOwotd3JhcE1hcC50aCA9IHdyYXBNYXAudGQ7
Ci0KLWpRdWVyeS5mbi5leHRlbmQoewotICAgIHRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAg
ICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkgewotICAgIHJl
dHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8KLSAgICBqUXVlcnkudGV4dCggdGhpcyApIDoKLSAg
ICB0aGlzLmVtcHR5KCkuYXBwZW5kKCAoIHRoaXNbMF0gJiYgdGhpc1swXS5vd25lckRvY3VtZW50
IHx8IGRvY3VtZW50ICkuY3JlYXRlVGV4dE5vZGUoIHZhbHVlICkgKTsKLSAgICB9LCBudWxsLCB2
YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApOwotICAgIH0sCi0KLSAgICB3cmFwQWxsOiBmdW5jdGlv
biggaHRtbCApIHsKLSAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICkgKSB7Ci0gICAg
cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7Ci0gICAgalF1ZXJ5KHRoaXMpLndyYXBBbGwo
IGh0bWwuY2FsbCh0aGlzLCBpKSApOwotICAgIH0pOwotICAgIH0KLQotICAgIGlmICggdGhpc1sw
XSApIHsKLSAgICAvLyBUaGUgZWxlbWVudHMgdG8gd3JhcCB0aGUgdGFyZ2V0IGFyb3VuZAotICAg
IHZhciB3cmFwID0galF1ZXJ5KCBodG1sLCB0aGlzWzBdLm93bmVyRG9jdW1lbnQgKS5lcSgwKS5j
bG9uZSh0cnVlKTsKLQotICAgIGlmICggdGhpc1swXS5wYXJlbnROb2RlICkgewotICAgIHdyYXAu
aW5zZXJ0QmVmb3JlKCB0aGlzWzBdICk7Ci0gICAgfQotCi0gICAgd3JhcC5tYXAoZnVuY3Rpb24o
KSB7Ci0gICAgdmFyIGVsZW0gPSB0aGlzOwotCi0gICAgd2hpbGUgKCBlbGVtLmZpcnN0Q2hpbGQg
JiYgZWxlbS5maXJzdENoaWxkLm5vZGVUeXBlID09PSAxICkgewotICAgIGVsZW0gPSBlbGVtLmZp
cnN0Q2hpbGQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVsZW07Ci0gICAgfSkuYXBwZW5kKCB0aGlz
ICk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLQotICAgIHdyYXBJbm5lcjog
ZnVuY3Rpb24oIGh0bWwgKSB7Ci0gICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApICkg
ewotICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSkgewotICAgIGpRdWVyeSh0aGlzKS53
cmFwSW5uZXIoIGh0bWwuY2FsbCh0aGlzLCBpKSApOwotICAgIH0pOwotICAgIH0KLQotICAgIHJl
dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMg
KSwKLSAgICBjb250ZW50cyA9IHNlbGYuY29udGVudHMoKTsKLQotICAgIGlmICggY29udGVudHMu
bGVuZ3RoICkgewotICAgIGNvbnRlbnRzLndyYXBBbGwoIGh0bWwgKTsKLQotICAgIH0gZWxzZSB7
Ci0gICAgc2VsZi5hcHBlbmQoIGh0bWwgKTsKLSAgICB9Ci0gICAgfSk7Ci0gICAgfSwKLQotICAg
IHdyYXA6IGZ1bmN0aW9uKCBodG1sICkgewotICAgIHZhciBpc0Z1bmN0aW9uID0galF1ZXJ5Lmlz
RnVuY3Rpb24oIGh0bWwgKTsKLQotICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSkgewot
ICAgIGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGlzRnVuY3Rpb24gPyBodG1sLmNhbGwodGhpcywg
aSkgOiBodG1sICk7Ci0gICAgfSk7Ci0gICAgfSwKLQotICAgIHVud3JhcDogZnVuY3Rpb24oKSB7
Ci0gICAgcmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpIHsKLSAgICBpZiAoICFq
UXVlcnkubm9kZU5hbWUoIHRoaXMsICJib2R5IiApICkgewotICAgIGpRdWVyeSggdGhpcyApLnJl
cGxhY2VXaXRoKCB0aGlzLmNoaWxkTm9kZXMgKTsKLSAgICB9Ci0gICAgfSkuZW5kKCk7Ci0gICAg
fSwKLQotICAgIGFwcGVuZDogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuZG9tTWFuaXAo
YXJndW1lbnRzLCB0cnVlLCBmdW5jdGlvbiggZWxlbSApIHsKLSAgICBpZiAoIHRoaXMubm9kZVR5
cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSAp
IHsKLSAgICB0aGlzLmFwcGVuZENoaWxkKCBlbGVtICk7Ci0gICAgfQotICAgIH0pOwotICAgIH0s
Ci0KLSAgICBwcmVwZW5kOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5kb21NYW5pcChh
cmd1bWVudHMsIHRydWUsIGZ1bmN0aW9uKCBlbGVtICkgewotICAgIGlmICggdGhpcy5ub2RlVHlw
ZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkg
ewotICAgIHRoaXMuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLmZpcnN0Q2hpbGQgKTsKLSAgICB9
Ci0gICAgfSk7Ci0gICAgfSwKLQotICAgIGJlZm9yZTogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJu
IHRoaXMuZG9tTWFuaXAoIGFyZ3VtZW50cywgZmFsc2UsIGZ1bmN0aW9uKCBlbGVtICkgewotICAg
IGlmICggdGhpcy5wYXJlbnROb2RlICkgewotICAgIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZv
cmUoIGVsZW0sIHRoaXMgKTsKLSAgICB9Ci0gICAgfSk7Ci0gICAgfSwKLQotICAgIGFmdGVyOiBm
dW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5kb21NYW5pcCggYXJndW1lbnRzLCBmYWxzZSwg
ZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgaWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7Ci0gICAgdGhp
cy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5uZXh0U2libGluZyApOwotICAg
IH0KLSAgICB9KTsKLSAgICB9LAotCi0gICAgLy8ga2VlcERhdGEgaXMgZm9yIGludGVybmFsIHVz
ZSBvbmx5LS1kbyBub3QgZG9jdW1lbnQKLSAgICByZW1vdmU6IGZ1bmN0aW9uKCBzZWxlY3Rvciwg
a2VlcERhdGEgKSB7Ci0gICAgdmFyIGVsZW0sCi0gICAgaSA9IDA7Ci0KLSAgICBmb3IgKCA7IChl
bGVtID0gdGhpc1tpXSkgIT0gbnVsbDsgaSsrICkgewotICAgIGlmICggIXNlbGVjdG9yIHx8IGpR
dWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBbIGVsZW0gXSApLmxlbmd0aCA+IDAgKSB7Ci0gICAgaWYg
KCAha2VlcERhdGEgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKLSAgICBqUXVlcnkuY2xlYW5E
YXRhKCBnZXRBbGwoIGVsZW0gKSApOwotICAgIH0KLQotICAgIGlmICggZWxlbS5wYXJlbnROb2Rl
ICkgewotICAgIGlmICgga2VlcERhdGEgJiYgalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9j
dW1lbnQsIGVsZW0gKSApIHsKLSAgICBzZXRHbG9iYWxFdmFsKCBnZXRBbGwoIGVsZW0sICJzY3Jp
cHQiICkgKTsKLSAgICB9Ci0gICAgZWxlbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbGVtICk7
Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0gICAg
ZW1wdHk6IGZ1bmN0aW9uKCkgewotICAgIHZhciBlbGVtLAotICAgIGkgPSAwOwotCi0gICAgZm9y
ICggOyAoZWxlbSA9IHRoaXNbaV0pICE9IG51bGw7IGkrKyApIHsKLSAgICAvLyBSZW1vdmUgZWxl
bWVudCBub2RlcyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3MKLSAgICBpZiAoIGVsZW0ubm9kZVR5
cGUgPT09IDEgKSB7Ci0gICAgalF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSAp
ICk7Ci0gICAgfQotCi0gICAgLy8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXMKLSAgICB3aGls
ZSAoIGVsZW0uZmlyc3RDaGlsZCApIHsKLSAgICBlbGVtLnJlbW92ZUNoaWxkKCBlbGVtLmZpcnN0
Q2hpbGQgKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGlzIGlzIGEgc2VsZWN0LCBlbnN1cmUgdGhh
dCBpdCBkaXNwbGF5cyBlbXB0eSAoIzEyMzM2KQotICAgIC8vIFN1cHBvcnQ6IElFPDkKLSAgICBp
ZiAoIGVsZW0ub3B0aW9ucyAmJiBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJzZWxlY3QiICkgKSB7
Ci0gICAgZWxlbS5vcHRpb25zLmxlbmd0aCA9IDA7Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVy
biB0aGlzOwotICAgIH0sCi0KLSAgICBjbG9uZTogZnVuY3Rpb24oIGRhdGFBbmRFdmVudHMsIGRl
ZXBEYXRhQW5kRXZlbnRzICkgewotICAgIGRhdGFBbmRFdmVudHMgPSBkYXRhQW5kRXZlbnRzID09
IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7Ci0gICAgZGVlcERhdGFBbmRFdmVudHMgPSBk
ZWVwRGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZl
bnRzOwotCi0gICAgcmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbiAoKSB7Ci0gICAgcmV0dXJuIGpR
dWVyeS5jbG9uZSggdGhpcywgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKTsKLSAg
ICB9KTsKLSAgICB9LAotCi0gICAgaHRtbDogZnVuY3Rpb24oIHZhbHVlICkgewotICAgIHJldHVy
biBqUXVlcnkuYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7Ci0gICAgdmFyIGVsZW0g
PSB0aGlzWzBdIHx8IHt9LAotICAgIGkgPSAwLAotICAgIGwgPSB0aGlzLmxlbmd0aDsKLQotICAg
IGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCApIHsKLSAgICByZXR1cm4gZWxlbS5ub2RlVHlwZSA9
PT0gMSA/Ci0gICAgZWxlbS5pbm5lckhUTUwucmVwbGFjZSggcmlubGluZWpRdWVyeSwgIiIgKSA6
Ci0gICAgdW5kZWZpbmVkOwotICAgIH0KLQotICAgIC8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNo
b3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhUTUwKLSAgICBpZiAoIHR5cGVvZiB2YWx1ZSA9PT0g
InN0cmluZyIgJiYgIXJub0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmCi0gICAgKCBqUXVlcnku
c3VwcG9ydC5odG1sU2VyaWFsaXplIHx8ICFybm9zaGltY2FjaGUudGVzdCggdmFsdWUgKSAgKSAm
JgotICAgICggalF1ZXJ5LnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UgfHwgIXJsZWFkaW5nV2hp
dGVzcGFjZS50ZXN0KCB2YWx1ZSApICkgJiYKLSAgICAhd3JhcE1hcFsgKCBydGFnTmFtZS5leGVj
KCB2YWx1ZSApIHx8IFsiIiwgIiJdIClbMV0udG9Mb3dlckNhc2UoKSBdICkgewotCi0gICAgdmFs
dWUgPSB2YWx1ZS5yZXBsYWNlKCByeGh0bWxUYWcsICI8JDE+PC8kMj4iICk7Ci0KLSAgICB0cnkg
ewotICAgIGZvciAoOyBpIDwgbDsgaSsrICkgewotICAgIC8vIFJlbW92ZSBlbGVtZW50IG5vZGVz
IGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrcwotICAgIGVsZW0gPSB0aGlzW2ldIHx8IHt9OwotICAg
IGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKLSAgICBqUXVlcnkuY2xlYW5EYXRhKCBnZXRB
bGwoIGVsZW0sIGZhbHNlICkgKTsKLSAgICBlbGVtLmlubmVySFRNTCA9IHZhbHVlOwotICAgIH0K
LSAgICB9Ci0KLSAgICBlbGVtID0gMDsKLQotICAgIC8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJv
d3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNrIG1ldGhvZAotICAgIH0gY2F0Y2goZSkg
e30KLSAgICB9Ci0KLSAgICBpZiAoIGVsZW0gKSB7Ci0gICAgdGhpcy5lbXB0eSgpLmFwcGVuZCgg
dmFsdWUgKTsKLSAgICB9Ci0gICAgfSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTsK
LSAgICB9LAotCi0gICAgcmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAgICB2YXIg
aXNGdW5jID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICk7Ci0KLSAgICAvLyBNYWtlIHN1cmUg
dGhhdCB0aGUgZWxlbWVudHMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgRE9NIGJlZm9yZSB0aGV5IGFy
ZSBpbnNlcnRlZAotICAgIC8vIHRoaXMgY2FuIGhlbHAgZml4IHJlcGxhY2luZyBhIHBhcmVudCB3
aXRoIGNoaWxkIGVsZW1lbnRzCi0gICAgaWYgKCAhaXNGdW5jICYmIHR5cGVvZiB2YWx1ZSAhPT0g
InN0cmluZyIgKSB7Ci0gICAgdmFsdWUgPSBqUXVlcnkoIHZhbHVlICkubm90KCB0aGlzICkuZGV0
YWNoKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRoaXMuZG9tTWFuaXAoIFsgdmFsdWUgXSwgdHJ1
ZSwgZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgdmFyIG5leHQgPSB0aGlzLm5leHRTaWJsaW5nLAot
ICAgIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTsKLQotICAgIGlmICggcGFyZW50ICkgewotICAg
IGpRdWVyeSggdGhpcyApLnJlbW92ZSgpOwotICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoIGVsZW0s
IG5leHQgKTsKLSAgICB9Ci0gICAgfSk7Ci0gICAgfSwKLQotICAgIGRldGFjaDogZnVuY3Rpb24o
IHNlbGVjdG9yICkgewotICAgIHJldHVybiB0aGlzLnJlbW92ZSggc2VsZWN0b3IsIHRydWUgKTsK
LSAgICB9LAotCi0gICAgZG9tTWFuaXA6IGZ1bmN0aW9uKCBhcmdzLCB0YWJsZSwgY2FsbGJhY2sg
KSB7Ci0KLSAgICAvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzCi0gICAgYXJncyA9IGNvcmVf
Y29uY2F0LmFwcGx5KCBbXSwgYXJncyApOwotCi0gICAgdmFyIGZpcnN0LCBub2RlLCBoYXNTY3Jp
cHRzLAotICAgIHNjcmlwdHMsIGRvYywgZnJhZ21lbnQsCi0gICAgaSA9IDAsCi0gICAgbCA9IHRo
aXMubGVuZ3RoLAotICAgIHNldCA9IHRoaXMsCi0gICAgaU5vQ2xvbmUgPSBsIC0gMSwKLSAgICB2
YWx1ZSA9IGFyZ3NbMF0sCi0gICAgaXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1
ZSApOwotCi0gICAgLy8gV2UgY2FuJ3QgY2xvbmVOb2RlIGZyYWdtZW50cyB0aGF0IGNvbnRhaW4g
Y2hlY2tlZCwgaW4gV2ViS2l0Ci0gICAgaWYgKCBpc0Z1bmN0aW9uIHx8ICEoIGwgPD0gMSB8fCB0
eXBlb2YgdmFsdWUgIT09ICJzdHJpbmciIHx8IGpRdWVyeS5zdXBwb3J0LmNoZWNrQ2xvbmUgfHwg
IXJjaGVja2VkLnRlc3QoIHZhbHVlICkgKSApIHsKLSAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0
aW9uKCBpbmRleCApIHsKLSAgICB2YXIgc2VsZiA9IHNldC5lcSggaW5kZXggKTsKLSAgICBpZiAo
IGlzRnVuY3Rpb24gKSB7Ci0gICAgYXJnc1swXSA9IHZhbHVlLmNhbGwoIHRoaXMsIGluZGV4LCB0
YWJsZSA/IHNlbGYuaHRtbCgpIDogdW5kZWZpbmVkICk7Ci0gICAgfQotICAgIHNlbGYuZG9tTWFu
aXAoIGFyZ3MsIHRhYmxlLCBjYWxsYmFjayApOwotICAgIH0pOwotICAgIH0KLQotICAgIGlmICgg
bCApIHsKLSAgICBmcmFnbWVudCA9IGpRdWVyeS5idWlsZEZyYWdtZW50KCBhcmdzLCB0aGlzWyAw
IF0ub3duZXJEb2N1bWVudCwgZmFsc2UsIHRoaXMgKTsKLSAgICBmaXJzdCA9IGZyYWdtZW50LmZp
cnN0Q2hpbGQ7Ci0KLSAgICBpZiAoIGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICkg
ewotICAgIGZyYWdtZW50ID0gZmlyc3Q7Ci0gICAgfQotCi0gICAgaWYgKCBmaXJzdCApIHsKLSAg
ICB0YWJsZSA9IHRhYmxlICYmIGpRdWVyeS5ub2RlTmFtZSggZmlyc3QsICJ0ciIgKTsKLSAgICBz
Y3JpcHRzID0galF1ZXJ5Lm1hcCggZ2V0QWxsKCBmcmFnbWVudCwgInNjcmlwdCIgKSwgZGlzYWJs
ZVNjcmlwdCApOwotICAgIGhhc1NjcmlwdHMgPSBzY3JpcHRzLmxlbmd0aDsKLQotICAgIC8vIFVz
ZSB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgZm9yIHRoZSBsYXN0IGl0ZW0gaW5zdGVhZCBvZiB0aGUg
Zmlyc3QgYmVjYXVzZSBpdCBjYW4gZW5kIHVwCi0gICAgLy8gYmVpbmcgZW1wdGllZCBpbmNvcnJl
Y3RseSBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgKCM4MDcwKS4KLSAgICBmb3IgKCA7IGkgPCBsOyBp
KysgKSB7Ci0gICAgbm9kZSA9IGZyYWdtZW50OwotCi0gICAgaWYgKCBpICE9PSBpTm9DbG9uZSAp
IHsKLSAgICBub2RlID0galF1ZXJ5LmNsb25lKCBub2RlLCB0cnVlLCB0cnVlICk7Ci0KLSAgICAv
LyBLZWVwIHJlZmVyZW5jZXMgdG8gY2xvbmVkIHNjcmlwdHMgZm9yIGxhdGVyIHJlc3RvcmF0aW9u
Ci0gICAgaWYgKCBoYXNTY3JpcHRzICkgewotICAgIGpRdWVyeS5tZXJnZSggc2NyaXB0cywgZ2V0
QWxsKCBub2RlLCAic2NyaXB0IiApICk7Ci0gICAgfQotICAgIH0KLQotICAgIGNhbGxiYWNrLmNh
bGwoCi0gICAgdGFibGUgJiYgalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzW2ldLCAidGFibGUiICkgPwot
ICAgIGZpbmRPckFwcGVuZCggdGhpc1tpXSwgInRib2R5IiApIDoKLSAgICB0aGlzW2ldLAotICAg
IG5vZGUsCi0gICAgaQotICAgICk7Ci0gICAgfQotCi0gICAgaWYgKCBoYXNTY3JpcHRzICkgewot
ICAgIGRvYyA9IHNjcmlwdHNbIHNjcmlwdHMubGVuZ3RoIC0gMSBdLm93bmVyRG9jdW1lbnQ7Ci0K
LSAgICAvLyBSZWVuYWJsZSBzY3JpcHRzCi0gICAgalF1ZXJ5Lm1hcCggc2NyaXB0cywgcmVzdG9y
ZVNjcmlwdCApOwotCi0gICAgLy8gRXZhbHVhdGUgZXhlY3V0YWJsZSBzY3JpcHRzIG9uIGZpcnN0
IGRvY3VtZW50IGluc2VydGlvbgotICAgIGZvciAoIGkgPSAwOyBpIDwgaGFzU2NyaXB0czsgaSsr
ICkgewotICAgIG5vZGUgPSBzY3JpcHRzWyBpIF07Ci0gICAgaWYgKCByc2NyaXB0VHlwZS50ZXN0
KCBub2RlLnR5cGUgfHwgIiIgKSAmJgotICAgICFqUXVlcnkuX2RhdGEoIG5vZGUsICJnbG9iYWxF
dmFsIiApICYmIGpRdWVyeS5jb250YWlucyggZG9jLCBub2RlICkgKSB7Ci0KLSAgICBpZiAoIG5v
ZGUuc3JjICkgewotICAgIC8vIEhvcGUgYWpheCBpcyBhdmFpbGFibGUuLi4KLSAgICBqUXVlcnku
YWpheCh7Ci0gICAgdXJsOiBub2RlLnNyYywKLSAgICB0eXBlOiAiR0VUIiwKLSAgICBkYXRhVHlw
ZTogInNjcmlwdCIsCi0gICAgYXN5bmM6IGZhbHNlLAotICAgIGdsb2JhbDogZmFsc2UsCi0gICAg
InRocm93cyI6IHRydWUKLSAgICB9KTsKLSAgICB9IGVsc2UgewotICAgIGpRdWVyeS5nbG9iYWxF
dmFsKCAoIG5vZGUudGV4dCB8fCBub2RlLnRleHRDb250ZW50IHx8IG5vZGUuaW5uZXJIVE1MIHx8
ICIiICkucmVwbGFjZSggcmNsZWFuU2NyaXB0LCAiIiApICk7Ci0gICAgfQotICAgIH0KLSAgICB9
Ci0gICAgfQotCi0gICAgLy8gRml4ICMxMTgwOTogQXZvaWQgbGVha2luZyBtZW1vcnkKLSAgICBm
cmFnbWVudCA9IGZpcnN0ID0gbnVsbDsKLSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRoaXM7
Ci0gICAgfQotfSk7Ci0KLWZ1bmN0aW9uIGZpbmRPckFwcGVuZCggZWxlbSwgdGFnICkgewotICAg
IHJldHVybiBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKVswXSB8fCBlbGVtLmFwcGVu
ZENoaWxkKCBlbGVtLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCggdGFnICkgKTsKLX0KLQot
Ly8gUmVwbGFjZS9yZXN0b3JlIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiBzY3JpcHQgZWxlbWVudHMg
Zm9yIHNhZmUgRE9NIG1hbmlwdWxhdGlvbgotZnVuY3Rpb24gZGlzYWJsZVNjcmlwdCggZWxlbSAp
IHsKLSAgICB2YXIgYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSgidHlwZSIpOwotICAgIGVs
ZW0udHlwZSA9ICggYXR0ciAmJiBhdHRyLnNwZWNpZmllZCApICsgIi8iICsgZWxlbS50eXBlOwot
ICAgIHJldHVybiBlbGVtOwotfQotZnVuY3Rpb24gcmVzdG9yZVNjcmlwdCggZWxlbSApIHsKLSAg
ICB2YXIgbWF0Y2ggPSByc2NyaXB0VHlwZU1hc2tlZC5leGVjKCBlbGVtLnR5cGUgKTsKLSAgICBp
ZiAoIG1hdGNoICkgewotICAgIGVsZW0udHlwZSA9IG1hdGNoWzFdOwotICAgIH0gZWxzZSB7Ci0g
ICAgZWxlbS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVsZW07
Ci19Ci0KLS8vIE1hcmsgc2NyaXB0cyBhcyBoYXZpbmcgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZAot
ZnVuY3Rpb24gc2V0R2xvYmFsRXZhbCggZWxlbXMsIHJlZkVsZW1lbnRzICkgewotICAgIHZhciBl
bGVtLAotICAgIGkgPSAwOwotICAgIGZvciAoIDsgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsg
aSsrICkgewotICAgIGpRdWVyeS5fZGF0YSggZWxlbSwgImdsb2JhbEV2YWwiLCAhcmVmRWxlbWVu
dHMgfHwgalF1ZXJ5Ll9kYXRhKCByZWZFbGVtZW50c1tpXSwgImdsb2JhbEV2YWwiICkgKTsKLSAg
ICB9Ci19Ci0KLWZ1bmN0aW9uIGNsb25lQ29weUV2ZW50KCBzcmMsIGRlc3QgKSB7Ci0KLSAgICBp
ZiAoIGRlc3Qubm9kZVR5cGUgIT09IDEgfHwgIWpRdWVyeS5oYXNEYXRhKCBzcmMgKSApIHsKLSAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgdmFyIHR5cGUsIGksIGwsCi0gICAgb2xkRGF0YSA9IGpR
dWVyeS5fZGF0YSggc3JjICksCi0gICAgY3VyRGF0YSA9IGpRdWVyeS5fZGF0YSggZGVzdCwgb2xk
RGF0YSApLAotICAgIGV2ZW50cyA9IG9sZERhdGEuZXZlbnRzOwotCi0gICAgaWYgKCBldmVudHMg
KSB7Ci0gICAgZGVsZXRlIGN1ckRhdGEuaGFuZGxlOwotICAgIGN1ckRhdGEuZXZlbnRzID0ge307
Ci0KLSAgICBmb3IgKCB0eXBlIGluIGV2ZW50cyApIHsKLSAgICBmb3IgKCBpID0gMCwgbCA9IGV2
ZW50c1sgdHlwZSBdLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKLSAgICBqUXVlcnkuZXZlbnQuYWRk
KCBkZXN0LCB0eXBlLCBldmVudHNbIHR5cGUgXVsgaSBdICk7Ci0gICAgfQotICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBtYWtlIHRoZSBjbG9uZWQgcHVibGljIGRhdGEgb2JqZWN0IGEgY29weSBmcm9t
IHRoZSBvcmlnaW5hbAotICAgIGlmICggY3VyRGF0YS5kYXRhICkgewotICAgIGN1ckRhdGEuZGF0
YSA9IGpRdWVyeS5leHRlbmQoIHt9LCBjdXJEYXRhLmRhdGEgKTsKLSAgICB9Ci19Ci0KLWZ1bmN0
aW9uIGZpeENsb25lTm9kZUlzc3Vlcyggc3JjLCBkZXN0ICkgewotICAgIHZhciBub2RlTmFtZSwg
ZSwgZGF0YTsKLQotICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIGRvIGFueXRoaW5nIGZvciBub24t
RWxlbWVudHMKLSAgICBpZiAoIGRlc3Qubm9kZVR5cGUgIT09IDEgKSB7Ci0gICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIG5vZGVOYW1lID0gZGVzdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwotCi0g
ICAgLy8gSUU2LTggY29waWVzIGV2ZW50cyBib3VuZCB2aWEgYXR0YWNoRXZlbnQgd2hlbiB1c2lu
ZyBjbG9uZU5vZGUuCi0gICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQubm9DbG9uZUV2ZW50ICYmIGRl
c3RbIGpRdWVyeS5leHBhbmRvIF0gKSB7Ci0gICAgZGF0YSA9IGpRdWVyeS5fZGF0YSggZGVzdCAp
OwotCi0gICAgZm9yICggZSBpbiBkYXRhLmV2ZW50cyApIHsKLSAgICBqUXVlcnkucmVtb3ZlRXZl
bnQoIGRlc3QsIGUsIGRhdGEuaGFuZGxlICk7Ci0gICAgfQotCi0gICAgLy8gRXZlbnQgZGF0YSBn
ZXRzIHJlZmVyZW5jZWQgaW5zdGVhZCBvZiBjb3BpZWQgaWYgdGhlIGV4cGFuZG8gZ2V0cyBjb3Bp
ZWQgdG9vCi0gICAgZGVzdC5yZW1vdmVBdHRyaWJ1dGUoIGpRdWVyeS5leHBhbmRvICk7Ci0gICAg
fQotCi0gICAgLy8gSUUgYmxhbmtzIGNvbnRlbnRzIHdoZW4gY2xvbmluZyBzY3JpcHRzLCBhbmQg
dHJpZXMgdG8gZXZhbHVhdGUgbmV3bHktc2V0IHRleHQKLSAgICBpZiAoIG5vZGVOYW1lID09PSAi
c2NyaXB0IiAmJiBkZXN0LnRleHQgIT09IHNyYy50ZXh0ICkgewotICAgIGRpc2FibGVTY3JpcHQo
IGRlc3QgKS50ZXh0ID0gc3JjLnRleHQ7Ci0gICAgcmVzdG9yZVNjcmlwdCggZGVzdCApOwotCi0g
ICAgLy8gSUU2LTEwIGltcHJvcGVybHkgY2xvbmVzIGNoaWxkcmVuIG9mIG9iamVjdCBlbGVtZW50
cyB1c2luZyBjbGFzc2lkLgotICAgIC8vIElFMTAgdGhyb3dzIE5vTW9kaWZpY2F0aW9uQWxsb3dl
ZEVycm9yIGlmIHBhcmVudCBpcyBudWxsLCAjMTIxMzIuCi0gICAgfSBlbHNlIGlmICggbm9kZU5h
bWUgPT09ICJvYmplY3QiICkgewotICAgIGlmICggZGVzdC5wYXJlbnROb2RlICkgewotICAgIGRl
c3Qub3V0ZXJIVE1MID0gc3JjLm91dGVySFRNTDsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIHBhdGgg
YXBwZWFycyB1bmF2b2lkYWJsZSBmb3IgSUU5LiBXaGVuIGNsb25pbmcgYW4gb2JqZWN0Ci0gICAg
Ly8gZWxlbWVudCBpbiBJRTksIHRoZSBvdXRlckhUTUwgc3RyYXRlZ3kgYWJvdmUgaXMgbm90IHN1
ZmZpY2llbnQuCi0gICAgLy8gSWYgdGhlIHNyYyBoYXMgaW5uZXJIVE1MIGFuZCB0aGUgZGVzdGlu
YXRpb24gZG9lcyBub3QsCi0gICAgLy8gY29weSB0aGUgc3JjLmlubmVySFRNTCBpbnRvIHRoZSBk
ZXN0LmlubmVySFRNTC4gIzEwMzI0Ci0gICAgaWYgKCBqUXVlcnkuc3VwcG9ydC5odG1sNUNsb25l
ICYmICggc3JjLmlubmVySFRNTCAmJiAhalF1ZXJ5LnRyaW0oZGVzdC5pbm5lckhUTUwpICkgKSB7
Ci0gICAgZGVzdC5pbm5lckhUTUwgPSBzcmMuaW5uZXJIVE1MOwotICAgIH0KLQotICAgIH0gZWxz
ZSBpZiAoIG5vZGVOYW1lID09PSAiaW5wdXQiICYmIG1hbmlwdWxhdGlvbl9yY2hlY2thYmxlVHlw
ZS50ZXN0KCBzcmMudHlwZSApICkgewotICAgIC8vIElFNi04IGZhaWxzIHRvIHBlcnNpc3QgdGhl
IGNoZWNrZWQgc3RhdGUgb2YgYSBjbG9uZWQgY2hlY2tib3gKLSAgICAvLyBvciByYWRpbyBidXR0
b24uIFdvcnNlLCBJRTYtNyBmYWlsIHRvIGdpdmUgdGhlIGNsb25lZCBlbGVtZW50Ci0gICAgLy8g
YSBjaGVja2VkIGFwcGVhcmFuY2UgaWYgdGhlIGRlZmF1bHRDaGVja2VkIHZhbHVlIGlzbid0IGFs
c28gc2V0Ci0KLSAgICBkZXN0LmRlZmF1bHRDaGVja2VkID0gZGVzdC5jaGVja2VkID0gc3JjLmNo
ZWNrZWQ7Ci0KLSAgICAvLyBJRTYtNyBnZXQgY29uZnVzZWQgYW5kIGVuZCB1cCBzZXR0aW5nIHRo
ZSB2YWx1ZSBvZiBhIGNsb25lZAotICAgIC8vIGNoZWNrYm94L3JhZGlvIGJ1dHRvbiB0byBhbiBl
bXB0eSBzdHJpbmcgaW5zdGVhZCBvZiAib24iCi0gICAgaWYgKCBkZXN0LnZhbHVlICE9PSBzcmMu
dmFsdWUgKSB7Ci0gICAgZGVzdC52YWx1ZSA9IHNyYy52YWx1ZTsKLSAgICB9Ci0KLSAgICAvLyBJ
RTYtOCBmYWlscyB0byByZXR1cm4gdGhlIHNlbGVjdGVkIG9wdGlvbiB0byB0aGUgZGVmYXVsdCBz
ZWxlY3RlZAotICAgIC8vIHN0YXRlIHdoZW4gY2xvbmluZyBvcHRpb25zCi0gICAgfSBlbHNlIGlm
ICggbm9kZU5hbWUgPT09ICJvcHRpb24iICkgewotICAgIGRlc3QuZGVmYXVsdFNlbGVjdGVkID0g
ZGVzdC5zZWxlY3RlZCA9IHNyYy5kZWZhdWx0U2VsZWN0ZWQ7Ci0KLSAgICAvLyBJRTYtOCBmYWls
cyB0byBzZXQgdGhlIGRlZmF1bHRWYWx1ZSB0byB0aGUgY29ycmVjdCB2YWx1ZSB3aGVuCi0gICAg
Ly8gY2xvbmluZyBvdGhlciB0eXBlcyBvZiBpbnB1dCBmaWVsZHMKLSAgICB9IGVsc2UgaWYgKCBu
b2RlTmFtZSA9PT0gImlucHV0IiB8fCBub2RlTmFtZSA9PT0gInRleHRhcmVhIiApIHsKLSAgICBk
ZXN0LmRlZmF1bHRWYWx1ZSA9IHNyYy5kZWZhdWx0VmFsdWU7Ci0gICAgfQotfQotCi1qUXVlcnku
ZWFjaCh7Ci0gICAgYXBwZW5kVG86ICJhcHBlbmQiLAotICAgIHByZXBlbmRUbzogInByZXBlbmQi
LAotICAgIGluc2VydEJlZm9yZTogImJlZm9yZSIsCi0gICAgaW5zZXJ0QWZ0ZXI6ICJhZnRlciIs
Ci0gICAgcmVwbGFjZUFsbDogInJlcGxhY2VXaXRoIgotfSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdp
bmFsICkgewotICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNlbGVjdG9yICkgewot
ICAgIHZhciBlbGVtcywKLSAgICBpID0gMCwKLSAgICByZXQgPSBbXSwKLSAgICBpbnNlcnQgPSBq
UXVlcnkoIHNlbGVjdG9yICksCi0gICAgbGFzdCA9IGluc2VydC5sZW5ndGggLSAxOwotCi0gICAg
Zm9yICggOyBpIDw9IGxhc3Q7IGkrKyApIHsKLSAgICBlbGVtcyA9IGkgPT09IGxhc3QgPyB0aGlz
IDogdGhpcy5jbG9uZSh0cnVlKTsKLSAgICBqUXVlcnkoIGluc2VydFtpXSApWyBvcmlnaW5hbCBd
KCBlbGVtcyApOwotCi0gICAgLy8gTW9kZXJuIGJyb3dzZXJzIGNhbiBhcHBseSBqUXVlcnkgY29s
bGVjdGlvbnMgYXMgYXJyYXlzLCBidXQgb2xkSUUgbmVlZHMgYSAuZ2V0KCkKLSAgICBjb3JlX3B1
c2guYXBwbHkoIHJldCwgZWxlbXMuZ2V0KCkgKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGhpcy5w
dXNoU3RhY2soIHJldCApOwotICAgIH07Ci19KTsKLQotZnVuY3Rpb24gZ2V0QWxsKCBjb250ZXh0
LCB0YWcgKSB7Ci0gICAgdmFyIGVsZW1zLCBlbGVtLAotICAgIGkgPSAwLAotICAgIGZvdW5kID0g
dHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IGNvcmVfc3RydW5kZWZpbmVk
ID8gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnIHx8ICIqIiApIDoKLSAgICB0eXBl
b2YgY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsICE9PSBjb3JlX3N0cnVuZGVmaW5lZCA/IGNvbnRl
eHQucXVlcnlTZWxlY3RvckFsbCggdGFnIHx8ICIqIiApIDoKLSAgICB1bmRlZmluZWQ7Ci0KLSAg
ICBpZiAoICFmb3VuZCApIHsKLSAgICBmb3IgKCBmb3VuZCA9IFtdLCBlbGVtcyA9IGNvbnRleHQu
Y2hpbGROb2RlcyB8fCBjb250ZXh0OyAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7
Ci0gICAgaWYgKCAhdGFnIHx8IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgdGFnICkgKSB7Ci0gICAg
Zm91bmQucHVzaCggZWxlbSApOwotICAgIH0gZWxzZSB7Ci0gICAgalF1ZXJ5Lm1lcmdlKCBmb3Vu
ZCwgZ2V0QWxsKCBlbGVtLCB0YWcgKSApOwotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRhZyA9PT0gdW5kZWZpbmVkIHx8IHRhZyAmJiBqUXVlcnkubm9kZU5hbWUoIGNvbnRleHQs
IHRhZyApID8KLSAgICBqUXVlcnkubWVyZ2UoIFsgY29udGV4dCBdLCBmb3VuZCApIDoKLSAgICBm
b3VuZDsKLX0KLQotLy8gVXNlZCBpbiBidWlsZEZyYWdtZW50LCBmaXhlcyB0aGUgZGVmYXVsdENo
ZWNrZWQgcHJvcGVydHkKLWZ1bmN0aW9uIGZpeERlZmF1bHRDaGVja2VkKCBlbGVtICkgewotICAg
IGlmICggbWFuaXB1bGF0aW9uX3JjaGVja2FibGVUeXBlLnRlc3QoIGVsZW0udHlwZSApICkgewot
ICAgIGVsZW0uZGVmYXVsdENoZWNrZWQgPSBlbGVtLmNoZWNrZWQ7Ci0gICAgfQotfQotCi1qUXVl
cnkuZXh0ZW5kKHsKLSAgICBjbG9uZTogZnVuY3Rpb24oIGVsZW0sIGRhdGFBbmRFdmVudHMsIGRl
ZXBEYXRhQW5kRXZlbnRzICkgewotICAgIHZhciBkZXN0RWxlbWVudHMsIG5vZGUsIGNsb25lLCBp
LCBzcmNFbGVtZW50cywKLSAgICBpblBhZ2UgPSBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJE
b2N1bWVudCwgZWxlbSApOwotCi0gICAgaWYgKCBqUXVlcnkuc3VwcG9ydC5odG1sNUNsb25lIHx8
IGpRdWVyeS5pc1hNTERvYyhlbGVtKSB8fCAhcm5vc2hpbWNhY2hlLnRlc3QoICI8IiArIGVsZW0u
bm9kZU5hbWUgKyAiPiIgKSApIHsKLSAgICBjbG9uZSA9IGVsZW0uY2xvbmVOb2RlKCB0cnVlICk7
Ci0KLSAgICAvLyBJRTw9OCBkb2VzIG5vdCBwcm9wZXJseSBjbG9uZSBkZXRhY2hlZCwgdW5rbm93
biBlbGVtZW50IG5vZGVzCi0gICAgfSBlbHNlIHsKLSAgICBmcmFnbWVudERpdi5pbm5lckhUTUwg
PSBlbGVtLm91dGVySFRNTDsKLSAgICBmcmFnbWVudERpdi5yZW1vdmVDaGlsZCggY2xvbmUgPSBm
cmFnbWVudERpdi5maXJzdENoaWxkICk7Ci0gICAgfQotCi0gICAgaWYgKCAoIWpRdWVyeS5zdXBw
b3J0Lm5vQ2xvbmVFdmVudCB8fCAhalF1ZXJ5LnN1cHBvcnQubm9DbG9uZUNoZWNrZWQpICYmCi0g
ICAgKGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMTEpICYmICFqUXVl
cnkuaXNYTUxEb2MoZWxlbSkgKSB7Ci0KLSAgICAvLyBXZSBlc2NoZXcgU2l6emxlIGhlcmUgZm9y
IHBlcmZvcm1hbmNlIHJlYXNvbnM6IGh0dHA6Ly9qc3BlcmYuY29tL2dldGFsbC12cy1zaXp6bGUv
MgotICAgIGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTsKLSAgICBzcmNFbGVtZW50cyA9
IGdldEFsbCggZWxlbSApOwotCi0gICAgLy8gRml4IGFsbCBJRSBjbG9uaW5nIGlzc3VlcwotICAg
IGZvciAoIGkgPSAwOyAobm9kZSA9IHNyY0VsZW1lbnRzW2ldKSAhPSBudWxsOyArK2kgKSB7Ci0g
ICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIG5vZGUgaXMgbm90IG51bGw7IEZpeGVz
ICM5NTg3Ci0gICAgaWYgKCBkZXN0RWxlbWVudHNbaV0gKSB7Ci0gICAgZml4Q2xvbmVOb2RlSXNz
dWVzKCBub2RlLCBkZXN0RWxlbWVudHNbaV0gKTsKLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAg
IC8vIENvcHkgdGhlIGV2ZW50cyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUgY2xvbmUKLSAgICBp
ZiAoIGRhdGFBbmRFdmVudHMgKSB7Ci0gICAgaWYgKCBkZWVwRGF0YUFuZEV2ZW50cyApIHsKLSAg
ICBzcmNFbGVtZW50cyA9IHNyY0VsZW1lbnRzIHx8IGdldEFsbCggZWxlbSApOwotICAgIGRlc3RF
bGVtZW50cyA9IGRlc3RFbGVtZW50cyB8fCBnZXRBbGwoIGNsb25lICk7Ci0KLSAgICBmb3IgKCBp
ID0gMDsgKG5vZGUgPSBzcmNFbGVtZW50c1tpXSkgIT0gbnVsbDsgaSsrICkgewotICAgIGNsb25l
Q29weUV2ZW50KCBub2RlLCBkZXN0RWxlbWVudHNbaV0gKTsKLSAgICB9Ci0gICAgfSBlbHNlIHsK
LSAgICBjbG9uZUNvcHlFdmVudCggZWxlbSwgY2xvbmUgKTsKLSAgICB9Ci0gICAgfQotCi0gICAg
Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeQotICAgIGRlc3RFbGVtZW50cyA9
IGdldEFsbCggY2xvbmUsICJzY3JpcHQiICk7Ci0gICAgaWYgKCBkZXN0RWxlbWVudHMubGVuZ3Ro
ID4gMCApIHsKLSAgICBzZXRHbG9iYWxFdmFsKCBkZXN0RWxlbWVudHMsICFpblBhZ2UgJiYgZ2V0
QWxsKCBlbGVtLCAic2NyaXB0IiApICk7Ci0gICAgfQotCi0gICAgZGVzdEVsZW1lbnRzID0gc3Jj
RWxlbWVudHMgPSBub2RlID0gbnVsbDsKLQotICAgIC8vIFJldHVybiB0aGUgY2xvbmVkIHNldAot
ICAgIHJldHVybiBjbG9uZTsKLSAgICB9LAotCi0gICAgYnVpbGRGcmFnbWVudDogZnVuY3Rpb24o
IGVsZW1zLCBjb250ZXh0LCBzY3JpcHRzLCBzZWxlY3Rpb24gKSB7Ci0gICAgdmFyIGosIGVsZW0s
IGNvbnRhaW5zLAotICAgIHRtcCwgdGFnLCB0Ym9keSwgd3JhcCwKLSAgICBsID0gZWxlbXMubGVu
Z3RoLAotCi0gICAgLy8gRW5zdXJlIGEgc2FmZSBmcmFnbWVudAotICAgIHNhZmUgPSBjcmVhdGVT
YWZlRnJhZ21lbnQoIGNvbnRleHQgKSwKLQotICAgIG5vZGVzID0gW10sCi0gICAgaSA9IDA7Ci0K
LSAgICBmb3IgKCA7IGkgPCBsOyBpKysgKSB7Ci0gICAgZWxlbSA9IGVsZW1zWyBpIF07Ci0KLSAg
ICBpZiAoIGVsZW0gfHwgZWxlbSA9PT0gMCApIHsKLQotICAgIC8vIEFkZCBub2RlcyBkaXJlY3Rs
eQotICAgIGlmICggalF1ZXJ5LnR5cGUoIGVsZW0gKSA9PT0gIm9iamVjdCIgKSB7Ci0gICAgalF1
ZXJ5Lm1lcmdlKCBub2RlcywgZWxlbS5ub2RlVHlwZSA/IFsgZWxlbSBdIDogZWxlbSApOwotCi0g
ICAgLy8gQ29udmVydCBub24taHRtbCBpbnRvIGEgdGV4dCBub2RlCi0gICAgfSBlbHNlIGlmICgg
IXJodG1sLnRlc3QoIGVsZW0gKSApIHsKLSAgICBub2Rlcy5wdXNoKCBjb250ZXh0LmNyZWF0ZVRl
eHROb2RlKCBlbGVtICkgKTsKLQotICAgIC8vIENvbnZlcnQgaHRtbCBpbnRvIERPTSBub2Rlcwot
ICAgIH0gZWxzZSB7Ci0gICAgdG1wID0gdG1wIHx8IHNhZmUuYXBwZW5kQ2hpbGQoIGNvbnRleHQu
Y3JlYXRlRWxlbWVudCgiZGl2IikgKTsKLQotICAgIC8vIERlc2VyaWFsaXplIGEgc3RhbmRhcmQg
cmVwcmVzZW50YXRpb24KLSAgICB0YWcgPSAoIHJ0YWdOYW1lLmV4ZWMoIGVsZW0gKSB8fCBbIiIs
ICIiXSApWzFdLnRvTG93ZXJDYXNlKCk7Ci0gICAgd3JhcCA9IHdyYXBNYXBbIHRhZyBdIHx8IHdy
YXBNYXAuX2RlZmF1bHQ7Ci0KLSAgICB0bXAuaW5uZXJIVE1MID0gd3JhcFsxXSArIGVsZW0ucmVw
bGFjZSggcnhodG1sVGFnLCAiPCQxPjwvJDI+IiApICsgd3JhcFsyXTsKLQotICAgIC8vIERlc2Nl
bmQgdGhyb3VnaCB3cmFwcGVycyB0byB0aGUgcmlnaHQgY29udGVudAotICAgIGogPSB3cmFwWzBd
OwotICAgIHdoaWxlICggai0tICkgewotICAgIHRtcCA9IHRtcC5sYXN0Q2hpbGQ7Ci0gICAgfQot
Ci0gICAgLy8gTWFudWFsbHkgYWRkIGxlYWRpbmcgd2hpdGVzcGFjZSByZW1vdmVkIGJ5IElFCi0g
ICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UgJiYgcmxlYWRpbmdXaGl0
ZXNwYWNlLnRlc3QoIGVsZW0gKSApIHsKLSAgICBub2Rlcy5wdXNoKCBjb250ZXh0LmNyZWF0ZVRl
eHROb2RlKCBybGVhZGluZ1doaXRlc3BhY2UuZXhlYyggZWxlbSApWzBdICkgKTsKLSAgICB9Ci0K
LSAgICAvLyBSZW1vdmUgSUUncyBhdXRvaW5zZXJ0ZWQgPHRib2R5PiBmcm9tIHRhYmxlIGZyYWdt
ZW50cwotICAgIGlmICggIWpRdWVyeS5zdXBwb3J0LnRib2R5ICkgewotCi0gICAgLy8gU3RyaW5n
IHdhcyBhIDx0YWJsZT4sICptYXkqIGhhdmUgc3B1cmlvdXMgPHRib2R5PgotICAgIGVsZW0gPSB0
YWcgPT09ICJ0YWJsZSIgJiYgIXJ0Ym9keS50ZXN0KCBlbGVtICkgPwotICAgIHRtcC5maXJzdENo
aWxkIDoKLQotICAgIC8vIFN0cmluZyB3YXMgYSBiYXJlIDx0aGVhZD4gb3IgPHRmb290PgotICAg
IHdyYXBbMV0gPT09ICI8dGFibGU+IiAmJiAhcnRib2R5LnRlc3QoIGVsZW0gKSA/Ci0gICAgdG1w
IDoKLSAgICAwOwotCi0gICAgaiA9IGVsZW0gJiYgZWxlbS5jaGlsZE5vZGVzLmxlbmd0aDsKLSAg
ICB3aGlsZSAoIGotLSApIHsKLSAgICBpZiAoIGpRdWVyeS5ub2RlTmFtZSggKHRib2R5ID0gZWxl
bS5jaGlsZE5vZGVzW2pdKSwgInRib2R5IiApICYmICF0Ym9keS5jaGlsZE5vZGVzLmxlbmd0aCAp
IHsKLSAgICBlbGVtLnJlbW92ZUNoaWxkKCB0Ym9keSApOwotICAgIH0KLSAgICB9Ci0gICAgfQot
Ci0gICAgalF1ZXJ5Lm1lcmdlKCBub2RlcywgdG1wLmNoaWxkTm9kZXMgKTsKLQotICAgIC8vIEZp
eCAjMTIzOTIgZm9yIFdlYktpdCBhbmQgSUUgPiA5Ci0gICAgdG1wLnRleHRDb250ZW50ID0gIiI7
Ci0KLSAgICAvLyBGaXggIzEyMzkyIGZvciBvbGRJRQotICAgIHdoaWxlICggdG1wLmZpcnN0Q2hp
bGQgKSB7Ci0gICAgdG1wLnJlbW92ZUNoaWxkKCB0bXAuZmlyc3RDaGlsZCApOwotICAgIH0KLQot
ICAgIC8vIFJlbWVtYmVyIHRoZSB0b3AtbGV2ZWwgY29udGFpbmVyIGZvciBwcm9wZXIgY2xlYW51
cAotICAgIHRtcCA9IHNhZmUubGFzdENoaWxkOwotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAg
Ly8gRml4ICMxMTM1NjogQ2xlYXIgZWxlbWVudHMgZnJvbSBmcmFnbWVudAotICAgIGlmICggdG1w
ICkgewotICAgIHNhZmUucmVtb3ZlQ2hpbGQoIHRtcCApOwotICAgIH0KLQotICAgIC8vIFJlc2V0
IGRlZmF1bHRDaGVja2VkIGZvciBhbnkgcmFkaW9zIGFuZCBjaGVja2JveGVzCi0gICAgLy8gYWJv
dXQgdG8gYmUgYXBwZW5kZWQgdG8gdGhlIERPTSBpbiBJRSA2LzcgKCM4MDYwKQotICAgIGlmICgg
IWpRdWVyeS5zdXBwb3J0LmFwcGVuZENoZWNrZWQgKSB7Ci0gICAgalF1ZXJ5LmdyZXAoIGdldEFs
bCggbm9kZXMsICJpbnB1dCIgKSwgZml4RGVmYXVsdENoZWNrZWQgKTsKLSAgICB9Ci0KLSAgICBp
ID0gMDsKLSAgICB3aGlsZSAoIChlbGVtID0gbm9kZXNbIGkrKyBdKSApIHsKLQotICAgIC8vICM0
MDg3IC0gSWYgb3JpZ2luIGFuZCBkZXN0aW5hdGlvbiBlbGVtZW50cyBhcmUgdGhlIHNhbWUsIGFu
ZCB0aGlzIGlzCi0gICAgLy8gdGhhdCBlbGVtZW50LCBkbyBub3QgZG8gYW55dGhpbmcKLSAgICBp
ZiAoIHNlbGVjdGlvbiAmJiBqUXVlcnkuaW5BcnJheSggZWxlbSwgc2VsZWN0aW9uICkgIT09IC0x
ICkgewotICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIGNvbnRhaW5zID0galF1ZXJ5LmNvbnRh
aW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKTsKLQotICAgIC8vIEFwcGVuZCB0byBmcmFn
bWVudAotICAgIHRtcCA9IGdldEFsbCggc2FmZS5hcHBlbmRDaGlsZCggZWxlbSApLCAic2NyaXB0
IiApOwotCi0gICAgLy8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeQotICAgIGlm
ICggY29udGFpbnMgKSB7Ci0gICAgc2V0R2xvYmFsRXZhbCggdG1wICk7Ci0gICAgfQotCi0gICAg
Ly8gQ2FwdHVyZSBleGVjdXRhYmxlcwotICAgIGlmICggc2NyaXB0cyApIHsKLSAgICBqID0gMDsK
LSAgICB3aGlsZSAoIChlbGVtID0gdG1wWyBqKysgXSkgKSB7Ci0gICAgaWYgKCByc2NyaXB0VHlw
ZS50ZXN0KCBlbGVtLnR5cGUgfHwgIiIgKSApIHsKLSAgICBzY3JpcHRzLnB1c2goIGVsZW0gKTsK
LSAgICB9Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICB0bXAgPSBudWxsOwotCi0gICAgcmV0
dXJuIHNhZmU7Ci0gICAgfSwKLQotICAgIGNsZWFuRGF0YTogZnVuY3Rpb24oIGVsZW1zLCAvKiBp
bnRlcm5hbCAqLyBhY2NlcHREYXRhICkgewotICAgIHZhciBlbGVtLCB0eXBlLCBpZCwgZGF0YSwK
LSAgICBpID0gMCwKLSAgICBpbnRlcm5hbEtleSA9IGpRdWVyeS5leHBhbmRvLAotICAgIGNhY2hl
ID0galF1ZXJ5LmNhY2hlLAotICAgIGRlbGV0ZUV4cGFuZG8gPSBqUXVlcnkuc3VwcG9ydC5kZWxl
dGVFeHBhbmRvLAotICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbDsKLQotICAgIGZv
ciAoIDsgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkgewotCi0gICAgaWYgKCBhY2Nl
cHREYXRhIHx8IGpRdWVyeS5hY2NlcHREYXRhKCBlbGVtICkgKSB7Ci0KLSAgICBpZCA9IGVsZW1b
IGludGVybmFsS2V5IF07Ci0gICAgZGF0YSA9IGlkICYmIGNhY2hlWyBpZCBdOwotCi0gICAgaWYg
KCBkYXRhICkgewotICAgIGlmICggZGF0YS5ldmVudHMgKSB7Ci0gICAgZm9yICggdHlwZSBpbiBk
YXRhLmV2ZW50cyApIHsKLSAgICBpZiAoIHNwZWNpYWxbIHR5cGUgXSApIHsKLSAgICBqUXVlcnku
ZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7Ci0KLSAgICAvLyBUaGlzIGlzIGEgc2hvcnRjdXQg
dG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkCi0gICAgfSBlbHNlIHsKLSAg
ICBqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGRhdGEuaGFuZGxlICk7Ci0gICAgfQot
ICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZW1vdmUgY2FjaGUgb25seSBpZiBpdCB3YXMgbm90IGFs
cmVhZHkgcmVtb3ZlZCBieSBqUXVlcnkuZXZlbnQucmVtb3ZlCi0gICAgaWYgKCBjYWNoZVsgaWQg
XSApIHsKLQotICAgIGRlbGV0ZSBjYWNoZVsgaWQgXTsKLQotICAgIC8vIElFIGRvZXMgbm90IGFs
bG93IHVzIHRvIGRlbGV0ZSBleHBhbmRvIHByb3BlcnRpZXMgZnJvbSBub2RlcywKLSAgICAvLyBu
b3IgZG9lcyBpdCBoYXZlIGEgcmVtb3ZlQXR0cmlidXRlIGZ1bmN0aW9uIG9uIERvY3VtZW50IG5v
ZGVzOwotICAgIC8vIHdlIG11c3QgaGFuZGxlIGFsbCBvZiB0aGVzZSBjYXNlcwotICAgIGlmICgg
ZGVsZXRlRXhwYW5kbyApIHsKLSAgICBkZWxldGUgZWxlbVsgaW50ZXJuYWxLZXkgXTsKLQotICAg
IH0gZWxzZSBpZiAoIHR5cGVvZiBlbGVtLnJlbW92ZUF0dHJpYnV0ZSAhPT0gY29yZV9zdHJ1bmRl
ZmluZWQgKSB7Ci0gICAgZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIGludGVybmFsS2V5ICk7Ci0KLSAg
ICB9IGVsc2UgewotICAgIGVsZW1bIGludGVybmFsS2V5IF0gPSBudWxsOwotICAgIH0KLQotICAg
IGNvcmVfZGVsZXRlZElkcy5wdXNoKCBpZCApOwotICAgIH0KLSAgICB9Ci0gICAgfQotICAgIH0K
LSAgICB9Ci19KTsKLXZhciBpZnJhbWUsIGdldFN0eWxlcywgY3VyQ1NTLAotICAgIHJhbHBoYSA9
IC9hbHBoYVwoW14pXSpcKS9pLAotICAgIHJvcGFjaXR5ID0gL29wYWNpdHlccyo9XHMqKFteKV0q
KS8sCi0gICAgcnBvc2l0aW9uID0gL14odG9wfHJpZ2h0fGJvdHRvbXxsZWZ0KSQvLAotICAgIC8v
IHN3YXBwYWJsZSBpZiBkaXNwbGF5IGlzIG5vbmUgb3Igc3RhcnRzIHdpdGggdGFibGUgZXhjZXB0
ICJ0YWJsZSIsICJ0YWJsZS1jZWxsIiwgb3IgInRhYmxlLWNhcHRpb24iCi0gICAgLy8gc2VlIGhl
cmUgZm9yIGRpc3BsYXkgdmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1V
Uy9kb2NzL0NTUy9kaXNwbGF5Ci0gICAgcmRpc3BsYXlzd2FwID0gL14obm9uZXx0YWJsZSg/IS1j
W2VhXSkuKykvLAotICAgIHJtYXJnaW4gPSAvXm1hcmdpbi8sCi0gICAgcm51bXNwbGl0ID0gbmV3
IFJlZ0V4cCggIl4oIiArIGNvcmVfcG51bSArICIpKC4qKSQiLCAiaSIgKSwKLSAgICBybnVtbm9u
cHggPSBuZXcgUmVnRXhwKCAiXigiICsgY29yZV9wbnVtICsgIikoPyFweClbYS16JV0rJCIsICJp
IiApLAotICAgIHJyZWxOdW0gPSBuZXcgUmVnRXhwKCAiXihbKy1dKT0oIiArIGNvcmVfcG51bSAr
ICIpIiwgImkiICksCi0gICAgZWxlbWRpc3BsYXkgPSB7IEJPRFk6ICJibG9jayIgfSwKLQotICAg
IGNzc1Nob3cgPSB7IHBvc2l0aW9uOiAiYWJzb2x1dGUiLCB2aXNpYmlsaXR5OiAiaGlkZGVuIiwg
ZGlzcGxheTogImJsb2NrIiB9LAotICAgIGNzc05vcm1hbFRyYW5zZm9ybSA9IHsKLSAgICBsZXR0
ZXJTcGFjaW5nOiAwLAotICAgIGZvbnRXZWlnaHQ6IDQwMAotICAgIH0sCi0KLSAgICBjc3NFeHBh
bmQgPSBbICJUb3AiLCAiUmlnaHQiLCAiQm90dG9tIiwgIkxlZnQiIF0sCi0gICAgY3NzUHJlZml4
ZXMgPSBbICJXZWJraXQiLCAiTyIsICJNb3oiLCAibXMiIF07Ci0KLS8vIHJldHVybiBhIGNzcyBw
cm9wZXJ0eSBtYXBwZWQgdG8gYSBwb3RlbnRpYWxseSB2ZW5kb3IgcHJlZml4ZWQgcHJvcGVydHkK
LWZ1bmN0aW9uIHZlbmRvclByb3BOYW1lKCBzdHlsZSwgbmFtZSApIHsKLQotICAgIC8vIHNob3J0
Y3V0IGZvciBuYW1lcyB0aGF0IGFyZSBub3QgdmVuZG9yIHByZWZpeGVkCi0gICAgaWYgKCBuYW1l
IGluIHN0eWxlICkgewotICAgIHJldHVybiBuYW1lOwotICAgIH0KLQotICAgIC8vIGNoZWNrIGZv
ciB2ZW5kb3IgcHJlZml4ZWQgbmFtZXMKLSAgICB2YXIgY2FwTmFtZSA9IG5hbWUuY2hhckF0KDAp
LnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKDEpLAotICAgIG9yaWdOYW1lID0gbmFtZSwKLSAg
ICBpID0gY3NzUHJlZml4ZXMubGVuZ3RoOwotCi0gICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgbmFt
ZSA9IGNzc1ByZWZpeGVzWyBpIF0gKyBjYXBOYW1lOwotICAgIGlmICggbmFtZSBpbiBzdHlsZSAp
IHsKLSAgICByZXR1cm4gbmFtZTsKLSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG9yaWdOYW1l
OwotfQotCi1mdW5jdGlvbiBpc0hpZGRlbiggZWxlbSwgZWwgKSB7Ci0gICAgLy8gaXNIaWRkZW4g
bWlnaHQgYmUgY2FsbGVkIGZyb20galF1ZXJ5I2ZpbHRlciBmdW5jdGlvbjsKLSAgICAvLyBpbiB0
aGF0IGNhc2UsIGVsZW1lbnQgd2lsbCBiZSBzZWNvbmQgYXJndW1lbnQKLSAgICBlbGVtID0gZWwg
fHwgZWxlbTsKLSAgICByZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXkiICkgPT09ICJu
b25lIiB8fCAhalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKTsKLX0K
LQotZnVuY3Rpb24gc2hvd0hpZGUoIGVsZW1lbnRzLCBzaG93ICkgewotICAgIHZhciBkaXNwbGF5
LCBlbGVtLCBoaWRkZW4sCi0gICAgdmFsdWVzID0gW10sCi0gICAgaW5kZXggPSAwLAotICAgIGxl
bmd0aCA9IGVsZW1lbnRzLmxlbmd0aDsKLQotICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGlu
ZGV4KysgKSB7Ci0gICAgZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdOwotICAgIGlmICggIWVsZW0u
c3R5bGUgKSB7Ci0gICAgY29udGludWU7Ci0gICAgfQotCi0gICAgdmFsdWVzWyBpbmRleCBdID0g
alF1ZXJ5Ll9kYXRhKCBlbGVtLCAib2xkZGlzcGxheSIgKTsKLSAgICBkaXNwbGF5ID0gZWxlbS5z
dHlsZS5kaXNwbGF5OwotICAgIGlmICggc2hvdyApIHsKLSAgICAvLyBSZXNldCB0aGUgaW5saW5l
IGRpc3BsYXkgb2YgdGhpcyBlbGVtZW50IHRvIGxlYXJuIGlmIGl0IGlzCi0gICAgLy8gYmVpbmcg
aGlkZGVuIGJ5IGNhc2NhZGVkIHJ1bGVzIG9yIG5vdAotICAgIGlmICggIXZhbHVlc1sgaW5kZXgg
XSAmJiBkaXNwbGF5ID09PSAibm9uZSIgKSB7Ci0gICAgZWxlbS5zdHlsZS5kaXNwbGF5ID0gIiI7
Ci0gICAgfQotCi0gICAgLy8gU2V0IGVsZW1lbnRzIHdoaWNoIGhhdmUgYmVlbiBvdmVycmlkZGVu
IHdpdGggZGlzcGxheTogbm9uZQotICAgIC8vIGluIGEgc3R5bGVzaGVldCB0byB3aGF0ZXZlciB0
aGUgZGVmYXVsdCBicm93c2VyIHN0eWxlIGlzCi0gICAgLy8gZm9yIHN1Y2ggYW4gZWxlbWVudAot
ICAgIGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSAiIiAmJiBpc0hpZGRlbiggZWxlbSApICkg
ewotICAgIHZhbHVlc1sgaW5kZXggXSA9IGpRdWVyeS5fZGF0YSggZWxlbSwgIm9sZGRpc3BsYXki
LCBjc3NfZGVmYXVsdERpc3BsYXkoZWxlbS5ub2RlTmFtZSkgKTsKLSAgICB9Ci0gICAgfSBlbHNl
IHsKLQotICAgIGlmICggIXZhbHVlc1sgaW5kZXggXSApIHsKLSAgICBoaWRkZW4gPSBpc0hpZGRl
biggZWxlbSApOwotCi0gICAgaWYgKCBkaXNwbGF5ICYmIGRpc3BsYXkgIT09ICJub25lIiB8fCAh
aGlkZGVuICkgewotICAgIGpRdWVyeS5fZGF0YSggZWxlbSwgIm9sZGRpc3BsYXkiLCBoaWRkZW4g
PyBkaXNwbGF5IDogalF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXkiICkgKTsKLSAgICB9Ci0gICAg
fQotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBTZXQgdGhlIGRpc3BsYXkgb2YgbW9zdCBvZiB0aGUg
ZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcAotICAgIC8vIHRvIGF2b2lkIHRoZSBjb25zdGFudCBy
ZWZsb3cKLSAgICBmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkgewot
ICAgIGVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTsKLSAgICBpZiAoICFlbGVtLnN0eWxlICkgewot
ICAgIGNvbnRpbnVlOwotICAgIH0KLSAgICBpZiAoICFzaG93IHx8IGVsZW0uc3R5bGUuZGlzcGxh
eSA9PT0gIm5vbmUiIHx8IGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIiIgKSB7Ci0gICAgZWxlbS5z
dHlsZS5kaXNwbGF5ID0gc2hvdyA/IHZhbHVlc1sgaW5kZXggXSB8fCAiIiA6ICJub25lIjsKLSAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGVsZW1lbnRzOwotfQotCi1qUXVlcnkuZm4uZXh0ZW5k
KHsKLSAgICBjc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKLSAgICByZXR1cm4galF1ZXJ5
LmFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkgewotICAgIHZhciBs
ZW4sIHN0eWxlcywKLSAgICBtYXAgPSB7fSwKLSAgICBpID0gMDsKLQotICAgIGlmICggalF1ZXJ5
LmlzQXJyYXkoIG5hbWUgKSApIHsKLSAgICBzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKTsKLSAg
ICBsZW4gPSBuYW1lLmxlbmd0aDsKLQotICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgewotICAg
IG1hcFsgbmFtZVsgaSBdIF0gPSBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lWyBpIF0sIGZhbHNlLCBz
dHlsZXMgKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbWFwOwotICAgIH0KLQotICAgIHJldHVybiB2
YWx1ZSAhPT0gdW5kZWZpbmVkID8KLSAgICBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUsIHZhbHVl
ICkgOgotICAgIGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTsKLSAgICB9LCBuYW1lLCB2YWx1ZSwg
YXJndW1lbnRzLmxlbmd0aCA+IDEgKTsKLSAgICB9LAotICAgIHNob3c6IGZ1bmN0aW9uKCkgewot
ICAgIHJldHVybiBzaG93SGlkZSggdGhpcywgdHJ1ZSApOwotICAgIH0sCi0gICAgaGlkZTogZnVu
Y3Rpb24oKSB7Ci0gICAgcmV0dXJuIHNob3dIaWRlKCB0aGlzICk7Ci0gICAgfSwKLSAgICB0b2dn
bGU6IGZ1bmN0aW9uKCBzdGF0ZSApIHsKLSAgICB2YXIgYm9vbCA9IHR5cGVvZiBzdGF0ZSA9PT0g
ImJvb2xlYW4iOwotCi0gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICBpZiAo
IGJvb2wgPyBzdGF0ZSA6IGlzSGlkZGVuKCB0aGlzICkgKSB7Ci0gICAgalF1ZXJ5KCB0aGlzICku
c2hvdygpOwotICAgIH0gZWxzZSB7Ci0gICAgalF1ZXJ5KCB0aGlzICkuaGlkZSgpOwotICAgIH0K
LSAgICB9KTsKLSAgICB9Ci19KTsKLQotalF1ZXJ5LmV4dGVuZCh7Ci0gICAgLy8gQWRkIGluIHN0
eWxlIHByb3BlcnR5IGhvb2tzIGZvciBvdmVycmlkaW5nIHRoZSBkZWZhdWx0Ci0gICAgLy8gYmVo
YXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5Ci0gICAgY3NzSG9v
a3M6IHsKLSAgICBvcGFjaXR5OiB7Ci0gICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQg
KSB7Ci0gICAgaWYgKCBjb21wdXRlZCApIHsKLSAgICAvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBh
IG51bWJlciBiYWNrIGZyb20gb3BhY2l0eQotICAgIHZhciByZXQgPSBjdXJDU1MoIGVsZW0sICJv
cGFjaXR5IiApOwotICAgIHJldHVybiByZXQgPT09ICIiID8gIjEiIDogcmV0OwotICAgIH0KLSAg
ICB9Ci0gICAgfQotICAgIH0sCi0KLSAgICAvLyBFeGNsdWRlIHRoZSBmb2xsb3dpbmcgY3NzIHBy
b3BlcnRpZXMgdG8gYWRkIHB4Ci0gICAgY3NzTnVtYmVyOiB7Ci0gICAgImNvbHVtbkNvdW50Ijog
dHJ1ZSwKLSAgICAiZmlsbE9wYWNpdHkiOiB0cnVlLAotICAgICJmb250V2VpZ2h0IjogdHJ1ZSwK
LSAgICAibGluZUhlaWdodCI6IHRydWUsCi0gICAgIm9wYWNpdHkiOiB0cnVlLAotICAgICJvcnBo
YW5zIjogdHJ1ZSwKLSAgICAid2lkb3dzIjogdHJ1ZSwKLSAgICAiekluZGV4IjogdHJ1ZSwKLSAg
ICAiem9vbSI6IHRydWUKLSAgICB9LAotCi0gICAgLy8gQWRkIGluIHByb3BlcnRpZXMgd2hvc2Ug
bmFtZXMgeW91IHdpc2ggdG8gZml4IGJlZm9yZQotICAgIC8vIHNldHRpbmcgb3IgZ2V0dGluZyB0
aGUgdmFsdWUKLSAgICBjc3NQcm9wczogewotICAgIC8vIG5vcm1hbGl6ZSBmbG9hdCBjc3MgcHJv
cGVydHkKLSAgICAiZmxvYXQiOiBqUXVlcnkuc3VwcG9ydC5jc3NGbG9hdCA/ICJjc3NGbG9hdCIg
OiAic3R5bGVGbG9hdCIKLSAgICB9LAotCi0gICAgLy8gR2V0IGFuZCBzZXQgdGhlIHN0eWxlIHBy
b3BlcnR5IG9uIGEgRE9NIE5vZGUKLSAgICBzdHlsZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZh
bHVlLCBleHRyYSApIHsKLSAgICAvLyBEb24ndCBzZXQgc3R5bGVzIG9uIHRleHQgYW5kIGNvbW1l
bnQgbm9kZXMKLSAgICBpZiAoICFlbGVtIHx8IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5u
b2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHlsZSApIHsKLSAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lCi0g
ICAgdmFyIHJldCwgdHlwZSwgaG9va3MsCi0gICAgb3JpZ05hbWUgPSBqUXVlcnkuY2FtZWxDYXNl
KCBuYW1lICksCi0gICAgc3R5bGUgPSBlbGVtLnN0eWxlOwotCi0gICAgbmFtZSA9IGpRdWVyeS5j
c3NQcm9wc1sgb3JpZ05hbWUgXSB8fCAoIGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSA9IHZl
bmRvclByb3BOYW1lKCBzdHlsZSwgb3JpZ05hbWUgKSApOwotCi0gICAgLy8gZ2V0cyBob29rIGZv
ciB0aGUgcHJlZml4ZWQgdmVyc2lvbgotICAgIC8vIGZvbGxvd2VkIGJ5IHRoZSB1bnByZWZpeGVk
IHZlcnNpb24KLSAgICBob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5j
c3NIb29rc1sgb3JpZ05hbWUgXTsKLQotICAgIC8vIENoZWNrIGlmIHdlJ3JlIHNldHRpbmcgYSB2
YWx1ZQotICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKLSAgICB0eXBlID0gdHlwZW9m
IHZhbHVlOwotCi0gICAgLy8gY29udmVydCByZWxhdGl2ZSBudW1iZXIgc3RyaW5ncyAoKz0gb3Ig
LT0pIHRvIHJlbGF0aXZlIG51bWJlcnMuICM3MzQ1Ci0gICAgaWYgKCB0eXBlID09PSAic3RyaW5n
IiAmJiAocmV0ID0gcnJlbE51bS5leGVjKCB2YWx1ZSApKSApIHsKLSAgICB2YWx1ZSA9ICggcmV0
WzFdICsgMSApICogcmV0WzJdICsgcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggZWxlbSwgbmFtZSAp
ICk7Ci0gICAgLy8gRml4ZXMgYnVnICM5MjM3Ci0gICAgdHlwZSA9ICJudW1iZXIiOwotICAgIH0K
LQotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IE5hTiBhbmQgbnVsbCB2YWx1ZXMgYXJlbid0IHNldC4g
U2VlOiAjNzExNgotICAgIGlmICggdmFsdWUgPT0gbnVsbCB8fCB0eXBlID09PSAibnVtYmVyIiAm
JiBpc05hTiggdmFsdWUgKSApIHsKLSAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgYSBu
dW1iZXIgd2FzIHBhc3NlZCBpbiwgYWRkICdweCcgdG8gdGhlIChleGNlcHQgZm9yIGNlcnRhaW4g
Q1NTIHByb3BlcnRpZXMpCi0gICAgaWYgKCB0eXBlID09PSAibnVtYmVyIiAmJiAhalF1ZXJ5LmNz
c051bWJlclsgb3JpZ05hbWUgXSApIHsKLSAgICB2YWx1ZSArPSAicHgiOwotICAgIH0KLQotICAg
IC8vIEZpeGVzICM4OTA4LCBpdCBjYW4gYmUgZG9uZSBtb3JlIGNvcnJlY3RseSBieSBzcGVjaWZp
bmcgc2V0dGVycyBpbiBjc3NIb29rcywKLSAgICAvLyBidXQgaXQgd291bGQgbWVhbiB0byBkZWZp
bmUgZWlnaHQgKGZvciBldmVyeSBwcm9ibGVtYXRpYyBwcm9wZXJ0eSkgaWRlbnRpY2FsIGZ1bmN0
aW9ucwotICAgIGlmICggIWpRdWVyeS5zdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSAmJiB2YWx1ZSA9
PT0gIiIgJiYgbmFtZS5pbmRleE9mKCJiYWNrZ3JvdW5kIikgPT09IDAgKSB7Ci0gICAgc3R5bGVb
IG5hbWUgXSA9ICJpbmhlcml0IjsKLSAgICB9Ci0KLSAgICAvLyBJZiBhIGhvb2sgd2FzIHByb3Zp
ZGVkLCB1c2UgdGhhdCB2YWx1ZSwgb3RoZXJ3aXNlIGp1c3Qgc2V0IHRoZSBzcGVjaWZpZWQgdmFs
dWUKLSAgICBpZiAoICFob29rcyB8fCAhKCJzZXQiIGluIGhvb2tzKSB8fCAodmFsdWUgPSBob29r
cy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApKSAhPT0gdW5kZWZpbmVkICkgewotCi0gICAgLy8g
V3JhcHBlZCB0byBwcmV2ZW50IElFIGZyb20gdGhyb3dpbmcgZXJyb3JzIHdoZW4gJ2ludmFsaWQn
IHZhbHVlcyBhcmUgcHJvdmlkZWQKLSAgICAvLyBGaXhlcyBidWcgIzU1MDkKLSAgICB0cnkgewot
ICAgIHN0eWxlWyBuYW1lIF0gPSB2YWx1ZTsKLSAgICB9IGNhdGNoKGUpIHt9Ci0gICAgfQotCi0g
ICAgfSBlbHNlIHsKLSAgICAvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgbm9uLWNv
bXB1dGVkIHZhbHVlIGZyb20gdGhlcmUKLSAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tz
ICYmIChyZXQgPSBob29rcy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApKSAhPT0gdW5kZWZpbmVk
ICkgewotICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAgLy8gT3RoZXJ3aXNlIGp1c3QgZ2V0
IHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3QKLSAgICByZXR1cm4gc3R5bGVbIG5hbWUg
XTsKLSAgICB9Ci0gICAgfSwKLQotICAgIGNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGV4dHJh
LCBzdHlsZXMgKSB7Ci0gICAgdmFyIG51bSwgdmFsLCBob29rcywKLSAgICBvcmlnTmFtZSA9IGpR
dWVyeS5jYW1lbENhc2UoIG5hbWUgKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdv
cmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZQotICAgIG5hbWUgPSBqUXVlcnkuY3NzUHJvcHNbIG9y
aWdOYW1lIF0gfHwgKCBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gPSB2ZW5kb3JQcm9wTmFt
ZSggZWxlbS5zdHlsZSwgb3JpZ05hbWUgKSApOwotCi0gICAgLy8gZ2V0cyBob29rIGZvciB0aGUg
cHJlZml4ZWQgdmVyc2lvbgotICAgIC8vIGZvbGxvd2VkIGJ5IHRoZSB1bnByZWZpeGVkIHZlcnNp
b24KLSAgICBob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29r
c1sgb3JpZ05hbWUgXTsKLQotICAgIC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBj
b21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlCi0gICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29r
cyApIHsKLSAgICB2YWwgPSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICk7Ci0gICAgfQot
Ci0gICAgLy8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4
aXN0cywgdXNlIHRoYXQKLSAgICBpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkgewotICAgIHZhbCA9
IGN1ckNTUyggZWxlbSwgbmFtZSwgc3R5bGVzICk7Ci0gICAgfQotCi0gICAgLy9jb252ZXJ0ICJu
b3JtYWwiIHRvIGNvbXB1dGVkIHZhbHVlCi0gICAgaWYgKCB2YWwgPT09ICJub3JtYWwiICYmIG5h
bWUgaW4gY3NzTm9ybWFsVHJhbnNmb3JtICkgewotICAgIHZhbCA9IGNzc05vcm1hbFRyYW5zZm9y
bVsgbmFtZSBdOwotICAgIH0KLQotICAgIC8vIFJldHVybiwgY29udmVydGluZyB0byBudW1iZXIg
aWYgZm9yY2VkIG9yIGEgcXVhbGlmaWVyIHdhcyBwcm92aWRlZCBhbmQgdmFsIGxvb2tzIG51bWVy
aWMKLSAgICBpZiAoIGV4dHJhID09PSAiIiB8fCBleHRyYSApIHsKLSAgICBudW0gPSBwYXJzZUZs
b2F0KCB2YWwgKTsKLSAgICByZXR1cm4gZXh0cmEgPT09IHRydWUgfHwgalF1ZXJ5LmlzTnVtZXJp
YyggbnVtICkgPyBudW0gfHwgMCA6IHZhbDsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbDsKLSAgICB9
LAotCi0gICAgLy8gQSBtZXRob2QgZm9yIHF1aWNrbHkgc3dhcHBpbmcgaW4vb3V0IENTUyBwcm9w
ZXJ0aWVzIHRvIGdldCBjb3JyZWN0IGNhbGN1bGF0aW9ucwotICAgIHN3YXA6IGZ1bmN0aW9uKCBl
bGVtLCBvcHRpb25zLCBjYWxsYmFjaywgYXJncyApIHsKLSAgICB2YXIgcmV0LCBuYW1lLAotICAg
IG9sZCA9IHt9OwotCi0gICAgLy8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBpbnNlcnQg
dGhlIG5ldyBvbmVzCi0gICAgZm9yICggbmFtZSBpbiBvcHRpb25zICkgewotICAgIG9sZFsgbmFt
ZSBdID0gZWxlbS5zdHlsZVsgbmFtZSBdOwotICAgIGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9wdGlv
bnNbIG5hbWUgXTsKLSAgICB9Ci0KLSAgICByZXQgPSBjYWxsYmFjay5hcHBseSggZWxlbSwgYXJn
cyB8fCBbXSApOwotCi0gICAgLy8gUmV2ZXJ0IHRoZSBvbGQgdmFsdWVzCi0gICAgZm9yICggbmFt
ZSBpbiBvcHRpb25zICkgewotICAgIGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9sZFsgbmFtZSBdOwot
ICAgIH0KLQotICAgIHJldHVybiByZXQ7Ci0gICAgfQotfSk7Ci0KLS8vIE5PVEU6IHdlJ3ZlIGlu
Y2x1ZGVkIHRoZSAid2luZG93IiBpbiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZQotLy8gYmVjYXVz
ZSBqc2RvbSBvbiBub2RlLmpzIHdpbGwgYnJlYWsgd2l0aG91dCBpdC4KLWlmICggd2luZG93Lmdl
dENvbXB1dGVkU3R5bGUgKSB7Ci0gICAgZ2V0U3R5bGVzID0gZnVuY3Rpb24oIGVsZW0gKSB7Ci0g
ICAgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtLCBudWxsICk7Ci0gICAgfTsK
LQotICAgIGN1ckNTUyA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBfY29tcHV0ZWQgKSB7Ci0gICAg
dmFyIHdpZHRoLCBtaW5XaWR0aCwgbWF4V2lkdGgsCi0gICAgY29tcHV0ZWQgPSBfY29tcHV0ZWQg
fHwgZ2V0U3R5bGVzKCBlbGVtICksCi0KLSAgICAvLyBnZXRQcm9wZXJ0eVZhbHVlIGlzIG9ubHkg
bmVlZGVkIGZvciAuY3NzKCdmaWx0ZXInKSBpbiBJRTksIHNlZSAjMTI1MzcKLSAgICByZXQgPSBj
b21wdXRlZCA/IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoIG5hbWUgKSB8fCBjb21wdXRlZFsg
bmFtZSBdIDogdW5kZWZpbmVkLAotICAgIHN0eWxlID0gZWxlbS5zdHlsZTsKLQotICAgIGlmICgg
Y29tcHV0ZWQgKSB7Ci0KLSAgICBpZiAoIHJldCA9PT0gIiIgJiYgIWpRdWVyeS5jb250YWlucygg
ZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICkgKSB7Ci0gICAgcmV0ID0galF1ZXJ5LnN0eWxlKCBl
bGVtLCBuYW1lICk7Ci0gICAgfQotCi0gICAgLy8gQSB0cmlidXRlIHRvIHRoZSAiYXdlc29tZSBo
YWNrIGJ5IERlYW4gRWR3YXJkcyIKLSAgICAvLyBDaHJvbWUgPCAxNyBhbmQgU2FmYXJpIDUuMCB1
c2VzICJjb21wdXRlZCB2YWx1ZSIgaW5zdGVhZCBvZiAidXNlZCB2YWx1ZSIgZm9yIG1hcmdpbi1y
aWdodAotICAgIC8vIFNhZmFyaSA1LjEuNyAoYXQgbGVhc3QpIHJldHVybnMgcGVyY2VudGFnZSBm
b3IgYSBsYXJnZXIgc2V0IG9mIHZhbHVlcywgYnV0IHdpZHRoIHNlZW1zIHRvIGJlIHJlbGlhYmx5
IHBpeGVscwotICAgIC8vIHRoaXMgaXMgYWdhaW5zdCB0aGUgQ1NTT00gZHJhZnQgc3BlYzogaHR0
cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nzb20vI3Jlc29sdmVkLXZhbHVlcwotICAgIGlmICggcm51
bW5vbnB4LnRlc3QoIHJldCApICYmIHJtYXJnaW4udGVzdCggbmFtZSApICkgewotCi0gICAgLy8g
UmVtZW1iZXIgdGhlIG9yaWdpbmFsIHZhbHVlcwotICAgIHdpZHRoID0gc3R5bGUud2lkdGg7Ci0g
ICAgbWluV2lkdGggPSBzdHlsZS5taW5XaWR0aDsKLSAgICBtYXhXaWR0aCA9IHN0eWxlLm1heFdp
ZHRoOwotCi0gICAgLy8gUHV0IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1dGVkIHZh
bHVlIG91dAotICAgIHN0eWxlLm1pbldpZHRoID0gc3R5bGUubWF4V2lkdGggPSBzdHlsZS53aWR0
aCA9IHJldDsKLSAgICByZXQgPSBjb21wdXRlZC53aWR0aDsKLQotICAgIC8vIFJldmVydCB0aGUg
Y2hhbmdlZCB2YWx1ZXMKLSAgICBzdHlsZS53aWR0aCA9IHdpZHRoOwotICAgIHN0eWxlLm1pbldp
ZHRoID0gbWluV2lkdGg7Ci0gICAgc3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDsKLSAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHJldDsKLSAgICB9OwotfSBlbHNlIGlmICggZG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZSApIHsKLSAgICBnZXRTdHlsZXMgPSBmdW5jdGlvbigg
ZWxlbSApIHsKLSAgICByZXR1cm4gZWxlbS5jdXJyZW50U3R5bGU7Ci0gICAgfTsKLQotICAgIGN1
ckNTUyA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBfY29tcHV0ZWQgKSB7Ci0gICAgdmFyIGxlZnQs
IHJzLCByc0xlZnQsCi0gICAgY29tcHV0ZWQgPSBfY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVt
ICksCi0gICAgcmV0ID0gY29tcHV0ZWQgPyBjb21wdXRlZFsgbmFtZSBdIDogdW5kZWZpbmVkLAot
ICAgIHN0eWxlID0gZWxlbS5zdHlsZTsKLQotICAgIC8vIEF2b2lkIHNldHRpbmcgcmV0IHRvIGVt
cHR5IHN0cmluZyBoZXJlCi0gICAgLy8gc28gd2UgZG9uJ3QgZGVmYXVsdCB0byBhdXRvCi0gICAg
aWYgKCByZXQgPT0gbnVsbCAmJiBzdHlsZSAmJiBzdHlsZVsgbmFtZSBdICkgewotICAgIHJldCA9
IHN0eWxlWyBuYW1lIF07Ci0gICAgfQotCi0gICAgLy8gRnJvbSB0aGUgYXdlc29tZSBoYWNrIGJ5
IERlYW4gRWR3YXJkcwotICAgIC8vIGh0dHA6Ly9lcmlrLmVhZS5uZXQvYXJjaGl2ZXMvMjAwNy8w
Ny8yNy8xOC41NC4xNS8jY29tbWVudC0xMDIyOTEKLQotICAgIC8vIElmIHdlJ3JlIG5vdCBkZWFs
aW5nIHdpdGggYSByZWd1bGFyIHBpeGVsIG51bWJlcgotICAgIC8vIGJ1dCBhIG51bWJlciB0aGF0
IGhhcyBhIHdlaXJkIGVuZGluZywgd2UgbmVlZCB0byBjb252ZXJ0IGl0IHRvIHBpeGVscwotICAg
IC8vIGJ1dCBub3QgcG9zaXRpb24gY3NzIGF0dHJpYnV0ZXMsIGFzIHRob3NlIGFyZSBwcm9wb3J0
aW9uYWwgdG8gdGhlIHBhcmVudCBlbGVtZW50IGluc3RlYWQKLSAgICAvLyBhbmQgd2UgY2FuJ3Qg
bWVhc3VyZSB0aGUgcGFyZW50IGluc3RlYWQgYmVjYXVzZSBpdCBtaWdodCB0cmlnZ2VyIGEgInN0
YWNraW5nIGRvbGxzIiBwcm9ibGVtCi0gICAgaWYgKCBybnVtbm9ucHgudGVzdCggcmV0ICkgJiYg
IXJwb3NpdGlvbi50ZXN0KCBuYW1lICkgKSB7Ci0KLSAgICAvLyBSZW1lbWJlciB0aGUgb3JpZ2lu
YWwgdmFsdWVzCi0gICAgbGVmdCA9IHN0eWxlLmxlZnQ7Ci0gICAgcnMgPSBlbGVtLnJ1bnRpbWVT
dHlsZTsKLSAgICByc0xlZnQgPSBycyAmJiBycy5sZWZ0OwotCi0gICAgLy8gUHV0IGluIHRoZSBu
ZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dAotICAgIGlmICggcnNMZWZ0ICkg
ewotICAgIHJzLmxlZnQgPSBlbGVtLmN1cnJlbnRTdHlsZS5sZWZ0OwotICAgIH0KLSAgICBzdHls
ZS5sZWZ0ID0gbmFtZSA9PT0gImZvbnRTaXplIiA/ICIxZW0iIDogcmV0OwotICAgIHJldCA9IHN0
eWxlLnBpeGVsTGVmdCArICJweCI7Ci0KLSAgICAvLyBSZXZlcnQgdGhlIGNoYW5nZWQgdmFsdWVz
Ci0gICAgc3R5bGUubGVmdCA9IGxlZnQ7Ci0gICAgaWYgKCByc0xlZnQgKSB7Ci0gICAgcnMubGVm
dCA9IHJzTGVmdDsKLSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldCA9PT0gIiIgPyAiYXV0
byIgOiByZXQ7Ci0gICAgfTsKLX0KLQotZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0s
IHZhbHVlLCBzdWJ0cmFjdCApIHsKLSAgICB2YXIgbWF0Y2hlcyA9IHJudW1zcGxpdC5leGVjKCB2
YWx1ZSApOwotICAgIHJldHVybiBtYXRjaGVzID8KLSAgICAvLyBHdWFyZCBhZ2FpbnN0IHVuZGVm
aW5lZCAic3VidHJhY3QiLCBlLmcuLCB3aGVuIHVzZWQgYXMgaW4gY3NzSG9va3MKLSAgICBNYXRo
Lm1heCggMCwgbWF0Y2hlc1sgMSBdIC0gKCBzdWJ0cmFjdCB8fCAwICkgKSArICggbWF0Y2hlc1sg
MiBdIHx8ICJweCIgKSA6Ci0gICAgdmFsdWU7Ci19Ci0KLWZ1bmN0aW9uIGF1Z21lbnRXaWR0aE9y
SGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSwgaXNCb3JkZXJCb3gsIHN0eWxlcyApIHsKLSAgICB2
YXIgaSA9IGV4dHJhID09PSAoIGlzQm9yZGVyQm94ID8gImJvcmRlciIgOiAiY29udGVudCIgKSA/
Ci0gICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIHRoZSByaWdodCBtZWFzdXJlbWVudCwgYXZvaWQg
YXVnbWVudGF0aW9uCi0gICAgNCA6Ci0gICAgLy8gT3RoZXJ3aXNlIGluaXRpYWxpemUgZm9yIGhv
cml6b250YWwgb3IgdmVydGljYWwgcHJvcGVydGllcwotICAgIG5hbWUgPT09ICJ3aWR0aCIgPyAx
IDogMCwKLQotICAgIHZhbCA9IDA7Ci0KLSAgICBmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7Ci0g
ICAgLy8gYm90aCBib3ggbW9kZWxzIGV4Y2x1ZGUgbWFyZ2luLCBzbyBhZGQgaXQgaWYgd2Ugd2Fu
dCBpdAotICAgIGlmICggZXh0cmEgPT09ICJtYXJnaW4iICkgewotICAgIHZhbCArPSBqUXVlcnku
Y3NzKCBlbGVtLCBleHRyYSArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTsKLSAgICB9
Ci0KLSAgICBpZiAoIGlzQm9yZGVyQm94ICkgewotICAgIC8vIGJvcmRlci1ib3ggaW5jbHVkZXMg
cGFkZGluZywgc28gcmVtb3ZlIGl0IGlmIHdlIHdhbnQgY29udGVudAotICAgIGlmICggZXh0cmEg
PT09ICJjb250ZW50IiApIHsKLSAgICB2YWwgLT0galF1ZXJ5LmNzcyggZWxlbSwgInBhZGRpbmci
ICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApOwotICAgIH0KLQotICAgIC8vIGF0IHRo
aXMgcG9pbnQsIGV4dHJhIGlzbid0IGJvcmRlciBub3IgbWFyZ2luLCBzbyByZW1vdmUgYm9yZGVy
Ci0gICAgaWYgKCBleHRyYSAhPT0gIm1hcmdpbiIgKSB7Ci0gICAgdmFsIC09IGpRdWVyeS5jc3Mo
IGVsZW0sICJib3JkZXIiICsgY3NzRXhwYW5kWyBpIF0gKyAiV2lkdGgiLCB0cnVlLCBzdHlsZXMg
KTsKLSAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAvLyBhdCB0aGlzIHBvaW50LCBleHRyYSBpc24n
dCBjb250ZW50LCBzbyBhZGQgcGFkZGluZwotICAgIHZhbCArPSBqUXVlcnkuY3NzKCBlbGVtLCAi
cGFkZGluZyIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7Ci0KLSAgICAvLyBhdCB0
aGlzIHBvaW50LCBleHRyYSBpc24ndCBjb250ZW50IG5vciBwYWRkaW5nLCBzbyBhZGQgYm9yZGVy
Ci0gICAgaWYgKCBleHRyYSAhPT0gInBhZGRpbmciICkgewotICAgIHZhbCArPSBqUXVlcnkuY3Nz
KCBlbGVtLCAiYm9yZGVyIiArIGNzc0V4cGFuZFsgaSBdICsgIldpZHRoIiwgdHJ1ZSwgc3R5bGVz
ICk7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsOwotfQotCi1mdW5jdGlv
biBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSApIHsKLQotICAgIC8vIFN0YXJ0
IHdpdGggb2Zmc2V0IHByb3BlcnR5LCB3aGljaCBpcyBlcXVpdmFsZW50IHRvIHRoZSBib3JkZXIt
Ym94IHZhbHVlCi0gICAgdmFyIHZhbHVlSXNCb3JkZXJCb3ggPSB0cnVlLAotICAgIHZhbCA9IG5h
bWUgPT09ICJ3aWR0aCIgPyBlbGVtLm9mZnNldFdpZHRoIDogZWxlbS5vZmZzZXRIZWlnaHQsCi0g
ICAgc3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksCi0gICAgaXNCb3JkZXJCb3ggPSBqUXVlcnku
c3VwcG9ydC5ib3hTaXppbmcgJiYgalF1ZXJ5LmNzcyggZWxlbSwgImJveFNpemluZyIsIGZhbHNl
LCBzdHlsZXMgKSA9PT0gImJvcmRlci1ib3giOwotCi0gICAgLy8gc29tZSBub24taHRtbCBlbGVt
ZW50cyByZXR1cm4gdW5kZWZpbmVkIGZvciBvZmZzZXRXaWR0aCwgc28gY2hlY2sgZm9yIG51bGwv
dW5kZWZpbmVkCi0gICAgLy8gc3ZnIC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjQ5Mjg1Ci0gICAgLy8gTWF0aE1MIC0gaHR0cHM6Ly9idWd6aWxsYS5tb3pp
bGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkxNjY4Ci0gICAgaWYgKCB2YWwgPD0gMCB8fCB2YWwg
PT0gbnVsbCApIHsKLSAgICAvLyBGYWxsIGJhY2sgdG8gY29tcHV0ZWQgdGhlbiB1bmNvbXB1dGVk
IGNzcyBpZiBuZWNlc3NhcnkKLSAgICB2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyAp
OwotICAgIGlmICggdmFsIDwgMCB8fCB2YWwgPT0gbnVsbCApIHsKLSAgICB2YWwgPSBlbGVtLnN0
eWxlWyBuYW1lIF07Ci0gICAgfQotCi0gICAgLy8gQ29tcHV0ZWQgdW5pdCBpcyBub3QgcGl4ZWxz
LiBTdG9wIGhlcmUgYW5kIHJldHVybi4KLSAgICBpZiAoIHJudW1ub25weC50ZXN0KHZhbCkgKSB7
Ci0gICAgcmV0dXJuIHZhbDsKLSAgICB9Ci0KLSAgICAvLyB3ZSBuZWVkIHRoZSBjaGVjayBmb3Ig
c3R5bGUgaW4gY2FzZSBhIGJyb3dzZXIgd2hpY2ggcmV0dXJucyB1bnJlbGlhYmxlIHZhbHVlcwot
ICAgIC8vIGZvciBnZXRDb21wdXRlZFN0eWxlIHNpbGVudGx5IGZhbGxzIGJhY2sgdG8gdGhlIHJl
bGlhYmxlIGVsZW0uc3R5bGUKLSAgICB2YWx1ZUlzQm9yZGVyQm94ID0gaXNCb3JkZXJCb3ggJiYg
KCBqUXVlcnkuc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSB8fCB2YWwgPT09IGVsZW0uc3R5bGVb
IG5hbWUgXSApOwotCi0gICAgLy8gTm9ybWFsaXplICIiLCBhdXRvLCBhbmQgcHJlcGFyZSBmb3Ig
ZXh0cmEKLSAgICB2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwOwotICAgIH0KLQotICAgIC8v
IHVzZSB0aGUgYWN0aXZlIGJveC1zaXppbmcgbW9kZWwgdG8gYWRkL3N1YnRyYWN0IGlycmVsZXZh
bnQgc3R5bGVzCi0gICAgcmV0dXJuICggdmFsICsKLSAgICBhdWdtZW50V2lkdGhPckhlaWdodCgK
LSAgICBlbGVtLAotICAgIG5hbWUsCi0gICAgZXh0cmEgfHwgKCBpc0JvcmRlckJveCA/ICJib3Jk
ZXIiIDogImNvbnRlbnQiICksCi0gICAgdmFsdWVJc0JvcmRlckJveCwKLSAgICBzdHlsZXMKLSAg
ICApCi0gICAgKSArICJweCI7Ci19Ci0KLS8vIFRyeSB0byBkZXRlcm1pbmUgdGhlIGRlZmF1bHQg
ZGlzcGxheSB2YWx1ZSBvZiBhbiBlbGVtZW50Ci1mdW5jdGlvbiBjc3NfZGVmYXVsdERpc3BsYXko
IG5vZGVOYW1lICkgewotICAgIHZhciBkb2MgPSBkb2N1bWVudCwKLSAgICBkaXNwbGF5ID0gZWxl
bWRpc3BsYXlbIG5vZGVOYW1lIF07Ci0KLSAgICBpZiAoICFkaXNwbGF5ICkgewotICAgIGRpc3Bs
YXkgPSBhY3R1YWxEaXNwbGF5KCBub2RlTmFtZSwgZG9jICk7Ci0KLSAgICAvLyBJZiB0aGUgc2lt
cGxlIHdheSBmYWlscywgcmVhZCBmcm9tIGluc2lkZSBhbiBpZnJhbWUKLSAgICBpZiAoIGRpc3Bs
YXkgPT09ICJub25lIiB8fCAhZGlzcGxheSApIHsKLSAgICAvLyBVc2UgdGhlIGFscmVhZHktY3Jl
YXRlZCBpZnJhbWUgaWYgcG9zc2libGUKLSAgICBpZnJhbWUgPSAoIGlmcmFtZSB8fAotICAgIGpR
dWVyeSgiPGlmcmFtZSBmcmFtZWJvcmRlcj0nMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPiIpCi0g
ICAgLmNzcyggImNzc1RleHQiLCAiZGlzcGxheTpibG9jayAhaW1wb3J0YW50IiApCi0gICAgKS5h
cHBlbmRUbyggZG9jLmRvY3VtZW50RWxlbWVudCApOwotCi0gICAgLy8gQWx3YXlzIHdyaXRlIGEg
bmV3IEhUTUwgc2tlbGV0b24gc28gV2Via2l0IGFuZCBGaXJlZm94IGRvbid0IGNob2tlIG9uIHJl
dXNlCi0gICAgZG9jID0gKCBpZnJhbWVbMF0uY29udGVudFdpbmRvdyB8fCBpZnJhbWVbMF0uY29u
dGVudERvY3VtZW50ICkuZG9jdW1lbnQ7Ci0gICAgZG9jLndyaXRlKCI8IWRvY3R5cGUgaHRtbD48
aHRtbD48Ym9keT4iKTsKLSAgICBkb2MuY2xvc2UoKTsKLQotICAgIGRpc3BsYXkgPSBhY3R1YWxE
aXNwbGF5KCBub2RlTmFtZSwgZG9jICk7Ci0gICAgaWZyYW1lLmRldGFjaCgpOwotICAgIH0KLQot
ICAgIC8vIFN0b3JlIHRoZSBjb3JyZWN0IGRlZmF1bHQgZGlzcGxheQotICAgIGVsZW1kaXNwbGF5
WyBub2RlTmFtZSBdID0gZGlzcGxheTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGlzcGxheTsKLX0K
LQotLy8gQ2FsbGVkIE9OTFkgZnJvbSB3aXRoaW4gY3NzX2RlZmF1bHREaXNwbGF5Ci1mdW5jdGlv
biBhY3R1YWxEaXNwbGF5KCBuYW1lLCBkb2MgKSB7Ci0gICAgdmFyIGVsZW0gPSBqUXVlcnkoIGRv
Yy5jcmVhdGVFbGVtZW50KCBuYW1lICkgKS5hcHBlbmRUbyggZG9jLmJvZHkgKSwKLSAgICBkaXNw
bGF5ID0galF1ZXJ5LmNzcyggZWxlbVswXSwgImRpc3BsYXkiICk7Ci0gICAgZWxlbS5yZW1vdmUo
KTsKLSAgICByZXR1cm4gZGlzcGxheTsKLX0KLQotalF1ZXJ5LmVhY2goWyAiaGVpZ2h0IiwgIndp
ZHRoIiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKLSAgICBqUXVlcnkuY3NzSG9va3NbIG5hbWUg
XSA9IHsKLSAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7Ci0gICAg
aWYgKCBjb21wdXRlZCApIHsKLSAgICAvLyBjZXJ0YWluIGVsZW1lbnRzIGNhbiBoYXZlIGRpbWVu
c2lvbiBpbmZvIGlmIHdlIGludmlzaWJseSBzaG93IHRoZW0KLSAgICAvLyBob3dldmVyLCBpdCBt
dXN0IGhhdmUgYSBjdXJyZW50IGRpc3BsYXkgc3R5bGUgdGhhdCB3b3VsZCBiZW5lZml0IGZyb20g
dGhpcwotICAgIHJldHVybiBlbGVtLm9mZnNldFdpZHRoID09PSAwICYmIHJkaXNwbGF5c3dhcC50
ZXN0KCBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKSApID8KLSAgICBqUXVlcnkuc3dhcCgg
ZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIGdldFdpZHRoT3JIZWlnaHQo
IGVsZW0sIG5hbWUsIGV4dHJhICk7Ci0gICAgfSkgOgotICAgIGdldFdpZHRoT3JIZWlnaHQoIGVs
ZW0sIG5hbWUsIGV4dHJhICk7Ci0gICAgfQotICAgIH0sCi0KLSAgICBzZXQ6IGZ1bmN0aW9uKCBl
bGVtLCB2YWx1ZSwgZXh0cmEgKSB7Ci0gICAgdmFyIHN0eWxlcyA9IGV4dHJhICYmIGdldFN0eWxl
cyggZWxlbSApOwotICAgIHJldHVybiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIGV4
dHJhID8KLSAgICBhdWdtZW50V2lkdGhPckhlaWdodCgKLSAgICBlbGVtLAotICAgIG5hbWUsCi0g
ICAgZXh0cmEsCi0gICAgalF1ZXJ5LnN1cHBvcnQuYm94U2l6aW5nICYmIGpRdWVyeS5jc3MoIGVs
ZW0sICJib3hTaXppbmciLCBmYWxzZSwgc3R5bGVzICkgPT09ICJib3JkZXItYm94IiwKLSAgICBz
dHlsZXMKLSAgICApIDogMAotICAgICk7Ci0gICAgfQotICAgIH07Ci19KTsKLQotaWYgKCAhalF1
ZXJ5LnN1cHBvcnQub3BhY2l0eSApIHsKLSAgICBqUXVlcnkuY3NzSG9va3Mub3BhY2l0eSA9IHsK
LSAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKLSAgICAvLyBJRSB1c2VzIGZp
bHRlcnMgZm9yIG9wYWNpdHkKLSAgICByZXR1cm4gcm9wYWNpdHkudGVzdCggKGNvbXB1dGVkICYm
IGVsZW0uY3VycmVudFN0eWxlID8gZWxlbS5jdXJyZW50U3R5bGUuZmlsdGVyIDogZWxlbS5zdHls
ZS5maWx0ZXIpIHx8ICIiICkgPwotICAgICggMC4wMSAqIHBhcnNlRmxvYXQoIFJlZ0V4cC4kMSAp
ICkgKyAiIiA6Ci0gICAgY29tcHV0ZWQgPyAiMSIgOiAiIjsKLSAgICB9LAotCi0gICAgc2V0OiBm
dW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7Ci0gICAgdmFyIHN0eWxlID0gZWxlbS5zdHlsZSwKLSAg
ICBjdXJyZW50U3R5bGUgPSBlbGVtLmN1cnJlbnRTdHlsZSwKLSAgICBvcGFjaXR5ID0galF1ZXJ5
LmlzTnVtZXJpYyggdmFsdWUgKSA/ICJhbHBoYShvcGFjaXR5PSIgKyB2YWx1ZSAqIDEwMCArICIp
IiA6ICIiLAotICAgIGZpbHRlciA9IGN1cnJlbnRTdHlsZSAmJiBjdXJyZW50U3R5bGUuZmlsdGVy
IHx8IHN0eWxlLmZpbHRlciB8fCAiIjsKLQotICAgIC8vIElFIGhhcyB0cm91YmxlIHdpdGggb3Bh
Y2l0eSBpZiBpdCBkb2VzIG5vdCBoYXZlIGxheW91dAotICAgIC8vIEZvcmNlIGl0IGJ5IHNldHRp
bmcgdGhlIHpvb20gbGV2ZWwKLSAgICBzdHlsZS56b29tID0gMTsKLQotICAgIC8vIGlmIHNldHRp
bmcgb3BhY2l0eSB0byAxLCBhbmQgbm8gb3RoZXIgZmlsdGVycyBleGlzdCAtIGF0dGVtcHQgdG8g
cmVtb3ZlIGZpbHRlciBhdHRyaWJ1dGUgIzY2NTIKLSAgICAvLyBpZiB2YWx1ZSA9PT0gIiIsIHRo
ZW4gcmVtb3ZlIGlubGluZSBvcGFjaXR5ICMxMjY4NQotICAgIGlmICggKCB2YWx1ZSA+PSAxIHx8
IHZhbHVlID09PSAiIiApICYmCi0gICAgalF1ZXJ5LnRyaW0oIGZpbHRlci5yZXBsYWNlKCByYWxw
aGEsICIiICkgKSA9PT0gIiIgJiYKLSAgICBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUgKSB7Ci0KLSAg
ICAvLyBTZXR0aW5nIHN0eWxlLmZpbHRlciB0byBudWxsLCAiIiAmICIgIiBzdGlsbCBsZWF2ZSAi
ZmlsdGVyOiIgaW4gdGhlIGNzc1RleHQKLSAgICAvLyBpZiAiZmlsdGVyOiIgaXMgcHJlc2VudCBh
dCBhbGwsIGNsZWFyVHlwZSBpcyBkaXNhYmxlZCwgd2Ugd2FudCB0byBhdm9pZCB0aGlzCi0gICAg
Ly8gc3R5bGUucmVtb3ZlQXR0cmlidXRlIGlzIElFIE9ubHksIGJ1dCBzbyBhcHBhcmVudGx5IGlz
IHRoaXMgY29kZSBwYXRoLi4uCi0gICAgc3R5bGUucmVtb3ZlQXR0cmlidXRlKCAiZmlsdGVyIiAp
OwotCi0gICAgLy8gaWYgdGhlcmUgaXMgbm8gZmlsdGVyIHN0eWxlIGFwcGxpZWQgaW4gYSBjc3Mg
cnVsZSBvciB1bnNldCBpbmxpbmUgb3BhY2l0eSwgd2UgYXJlIGRvbmUKLSAgICBpZiAoIHZhbHVl
ID09PSAiIiB8fCBjdXJyZW50U3R5bGUgJiYgIWN1cnJlbnRTdHlsZS5maWx0ZXIgKSB7Ci0gICAg
cmV0dXJuOwotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBvdGhlcndpc2UsIHNldCBuZXcgZmlsdGVy
IHZhbHVlcwotICAgIHN0eWxlLmZpbHRlciA9IHJhbHBoYS50ZXN0KCBmaWx0ZXIgKSA/Ci0gICAg
ZmlsdGVyLnJlcGxhY2UoIHJhbHBoYSwgb3BhY2l0eSApIDoKLSAgICBmaWx0ZXIgKyAiICIgKyBv
cGFjaXR5OwotICAgIH0KLSAgICB9OwotfQotCi0vLyBUaGVzZSBob29rcyBjYW5ub3QgYmUgYWRk
ZWQgdW50aWwgRE9NIHJlYWR5IGJlY2F1c2UgdGhlIHN1cHBvcnQgdGVzdAotLy8gZm9yIGl0IGlz
IG5vdCBydW4gdW50aWwgYWZ0ZXIgRE9NIHJlYWR5Ci1qUXVlcnkoZnVuY3Rpb24oKSB7Ci0gICAg
aWYgKCAhalF1ZXJ5LnN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodCApIHsKLSAgICBqUXVlcnku
Y3NzSG9va3MubWFyZ2luUmlnaHQgPSB7Ci0gICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0
ZWQgKSB7Ci0gICAgaWYgKCBjb21wdXRlZCApIHsKLSAgICAvLyBXZWJLaXQgQnVnIDEzMzQzIC0g
Z2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHdyb25nIHZhbHVlIGZvciBtYXJnaW4tcmlnaHQKLSAg
ICAvLyBXb3JrIGFyb3VuZCBieSB0ZW1wb3JhcmlseSBzZXR0aW5nIGVsZW1lbnQgZGlzcGxheSB0
byBpbmxpbmUtYmxvY2sKLSAgICByZXR1cm4galF1ZXJ5LnN3YXAoIGVsZW0sIHsgImRpc3BsYXki
OiAiaW5saW5lLWJsb2NrIiB9LAotICAgIGN1ckNTUywgWyBlbGVtLCAibWFyZ2luUmlnaHQiIF0g
KTsKLSAgICB9Ci0gICAgfQotICAgIH07Ci0gICAgfQotCi0gICAgLy8gV2Via2l0IGJ1ZzogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MDg0Ci0gICAgLy8gZ2V0Q29t
cHV0ZWRTdHlsZSByZXR1cm5zIHBlcmNlbnQgd2hlbiBzcGVjaWZpZWQgZm9yIHRvcC9sZWZ0L2Jv
dHRvbS9yaWdodAotICAgIC8vIHJhdGhlciB0aGFuIG1ha2UgdGhlIGNzcyBtb2R1bGUgZGVwZW5k
IG9uIHRoZSBvZmZzZXQgbW9kdWxlLCB3ZSBqdXN0IGNoZWNrIGZvciBpdCBoZXJlCi0gICAgaWYg
KCAhalF1ZXJ5LnN1cHBvcnQucGl4ZWxQb3NpdGlvbiAmJiBqUXVlcnkuZm4ucG9zaXRpb24gKSB7
Ci0gICAgalF1ZXJ5LmVhY2goIFsgInRvcCIsICJsZWZ0IiBdLCBmdW5jdGlvbiggaSwgcHJvcCAp
IHsKLSAgICBqUXVlcnkuY3NzSG9va3NbIHByb3AgXSA9IHsKLSAgICBnZXQ6IGZ1bmN0aW9uKCBl
bGVtLCBjb21wdXRlZCApIHsKLSAgICBpZiAoIGNvbXB1dGVkICkgewotICAgIGNvbXB1dGVkID0g
Y3VyQ1NTKCBlbGVtLCBwcm9wICk7Ci0gICAgLy8gaWYgY3VyQ1NTIHJldHVybnMgcGVyY2VudGFn
ZSwgZmFsbGJhY2sgdG8gb2Zmc2V0Ci0gICAgcmV0dXJuIHJudW1ub25weC50ZXN0KCBjb21wdXRl
ZCApID8KLSAgICBqUXVlcnkoIGVsZW0gKS5wb3NpdGlvbigpWyBwcm9wIF0gKyAicHgiIDoKLSAg
ICBjb21wdXRlZDsKLSAgICB9Ci0gICAgfQotICAgIH07Ci0gICAgfSk7Ci0gICAgfQotCi19KTsK
LQotaWYgKCBqUXVlcnkuZXhwciAmJiBqUXVlcnkuZXhwci5maWx0ZXJzICkgewotICAgIGpRdWVy
eS5leHByLmZpbHRlcnMuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgLy8gU3VwcG9y
dDogT3BlcmEgPD0gMTIuMTIKLSAgICAvLyBPcGVyYSByZXBvcnRzIG9mZnNldFdpZHRocyBhbmQg
b2Zmc2V0SGVpZ2h0cyBsZXNzIHRoYW4gemVybyBvbiBzb21lIGVsZW1lbnRzCi0gICAgcmV0dXJu
IGVsZW0ub2Zmc2V0V2lkdGggPD0gMCAmJiBlbGVtLm9mZnNldEhlaWdodCA8PSAwIHx8Ci0gICAg
KCFqUXVlcnkuc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHMgJiYgKChlbGVtLnN0eWxlICYm
IGVsZW0uc3R5bGUuZGlzcGxheSkgfHwgalF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXkiICkpID09
PSAibm9uZSIpOwotICAgIH07Ci0KLSAgICBqUXVlcnkuZXhwci5maWx0ZXJzLnZpc2libGUgPSBm
dW5jdGlvbiggZWxlbSApIHsKLSAgICByZXR1cm4gIWpRdWVyeS5leHByLmZpbHRlcnMuaGlkZGVu
KCBlbGVtICk7Ci0gICAgfTsKLX0KLQotLy8gVGhlc2UgaG9va3MgYXJlIHVzZWQgYnkgYW5pbWF0
ZSB0byBleHBhbmQgcHJvcGVydGllcwotalF1ZXJ5LmVhY2goewotICAgIG1hcmdpbjogIiIsCi0g
ICAgcGFkZGluZzogIiIsCi0gICAgYm9yZGVyOiAiV2lkdGgiCi19LCBmdW5jdGlvbiggcHJlZml4
LCBzdWZmaXggKSB7Ci0gICAgalF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHsK
LSAgICBleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAgICB2YXIgaSA9IDAsCi0gICAgZXhw
YW5kZWQgPSB7fSwKLQotICAgIC8vIGFzc3VtZXMgYSBzaW5nbGUgbnVtYmVyIGlmIG5vdCBhIHN0
cmluZwotICAgIHBhcnRzID0gdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiA/IHZhbHVlLnNwbGl0
KCIgIikgOiBbIHZhbHVlIF07Ci0KLSAgICBmb3IgKCA7IGkgPCA0OyBpKysgKSB7Ci0gICAgZXhw
YW5kZWRbIHByZWZpeCArIGNzc0V4cGFuZFsgaSBdICsgc3VmZml4IF0gPQotICAgIHBhcnRzWyBp
IF0gfHwgcGFydHNbIGkgLSAyIF0gfHwgcGFydHNbIDAgXTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZXhwYW5kZWQ7Ci0gICAgfQotICAgIH07Ci0KLSAgICBpZiAoICFybWFyZ2luLnRlc3QoIHByZWZp
eCApICkgewotICAgIGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0
UG9zaXRpdmVOdW1iZXI7Ci0gICAgfQotfSk7Ci12YXIgcjIwID0gLyUyMC9nLAotICAgIHJicmFj
a2V0ID0gL1xbXF0kLywKLSAgICByQ1JMRiA9IC9ccj9cbi9nLAotICAgIHJzdWJtaXR0ZXJUeXBl
cyA9IC9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSwKLSAgICByc3VibWl0
dGFibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7Ci0KLWpRdWVyeS5m
bi5leHRlbmQoewotICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIGpRdWVy
eS5wYXJhbSggdGhpcy5zZXJpYWxpemVBcnJheSgpICk7Ci0gICAgfSwKLSAgICBzZXJpYWxpemVB
cnJheTogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7Ci0gICAg
Ly8gQ2FuIGFkZCBwcm9wSG9vayBmb3IgImVsZW1lbnRzIiB0byBmaWx0ZXIgb3IgYWRkIGZvcm0g
ZWxlbWVudHMKLSAgICB2YXIgZWxlbWVudHMgPSBqUXVlcnkucHJvcCggdGhpcywgImVsZW1lbnRz
IiApOwotICAgIHJldHVybiBlbGVtZW50cyA/IGpRdWVyeS5tYWtlQXJyYXkoIGVsZW1lbnRzICkg
OiB0aGlzOwotICAgIH0pCi0gICAgLmZpbHRlcihmdW5jdGlvbigpewotICAgIHZhciB0eXBlID0g
dGhpcy50eXBlOwotICAgIC8vIFVzZSAuaXMoIjpkaXNhYmxlZCIpIHNvIHRoYXQgZmllbGRzZXRb
ZGlzYWJsZWRdIHdvcmtzCi0gICAgcmV0dXJuIHRoaXMubmFtZSAmJiAhalF1ZXJ5KCB0aGlzICku
aXMoICI6ZGlzYWJsZWQiICkgJiYKLSAgICByc3VibWl0dGFibGUudGVzdCggdGhpcy5ub2RlTmFt
ZSApICYmICFyc3VibWl0dGVyVHlwZXMudGVzdCggdHlwZSApICYmCi0gICAgKCB0aGlzLmNoZWNr
ZWQgfHwgIW1hbmlwdWxhdGlvbl9yY2hlY2thYmxlVHlwZS50ZXN0KCB0eXBlICkgKTsKLSAgICB9
KQotICAgIC5tYXAoZnVuY3Rpb24oIGksIGVsZW0gKXsKLSAgICB2YXIgdmFsID0galF1ZXJ5KCB0
aGlzICkudmFsKCk7Ci0KLSAgICByZXR1cm4gdmFsID09IG51bGwgPwotICAgIG51bGwgOgotICAg
IGpRdWVyeS5pc0FycmF5KCB2YWwgKSA/Ci0gICAgalF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbigg
dmFsICl7Ci0gICAgcmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2Uo
IHJDUkxGLCAiXHJcbiIgKSB9OwotICAgIH0pIDoKLSAgICB7IG5hbWU6IGVsZW0ubmFtZSwgdmFs
dWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgIlxyXG4iICkgfTsKLSAgICB9KS5nZXQoKTsKLSAgICB9
Ci19KTsKLQotLy9TZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cyBvciBhIHNldCBv
ZgotLy9rZXkvdmFsdWVzIGludG8gYSBxdWVyeSBzdHJpbmcKLWpRdWVyeS5wYXJhbSA9IGZ1bmN0
aW9uKCBhLCB0cmFkaXRpb25hbCApIHsKLSAgICB2YXIgcHJlZml4LAotICAgIHMgPSBbXSwKLSAg
ICBhZGQgPSBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHsKLSAgICAvLyBJZiB2YWx1ZSBpcyBhIGZ1
bmN0aW9uLCBpbnZva2UgaXQgYW5kIHJldHVybiBpdHMgdmFsdWUKLSAgICB2YWx1ZSA9IGpRdWVy
eS5pc0Z1bmN0aW9uKCB2YWx1ZSApID8gdmFsdWUoKSA6ICggdmFsdWUgPT0gbnVsbCA/ICIiIDog
dmFsdWUgKTsKLSAgICBzWyBzLmxlbmd0aCBdID0gZW5jb2RlVVJJQ29tcG9uZW50KCBrZXkgKSAr
ICI9IiArIGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgKTsKLSAgICB9OwotCi0gICAgLy8gU2V0
IHRyYWRpdGlvbmFsIHRvIHRydWUgZm9yIGpRdWVyeSA8PSAxLjMuMiBiZWhhdmlvci4KLSAgICBp
ZiAoIHRyYWRpdGlvbmFsID09PSB1bmRlZmluZWQgKSB7Ci0gICAgdHJhZGl0aW9uYWwgPSBqUXVl
cnkuYWpheFNldHRpbmdzICYmIGpRdWVyeS5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWw7Ci0gICAg
fQotCi0gICAgLy8gSWYgYW4gYXJyYXkgd2FzIHBhc3NlZCBpbiwgYXNzdW1lIHRoYXQgaXQgaXMg
YW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cy4KLSAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCBhICkg
fHwgKCBhLmpxdWVyeSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGEgKSApICkgewotICAgIC8v
IFNlcmlhbGl6ZSB0aGUgZm9ybSBlbGVtZW50cwotICAgIGpRdWVyeS5lYWNoKCBhLCBmdW5jdGlv
bigpIHsKLSAgICBhZGQoIHRoaXMubmFtZSwgdGhpcy52YWx1ZSApOwotICAgIH0pOwotCi0gICAg
fSBlbHNlIHsKLSAgICAvLyBJZiB0cmFkaXRpb25hbCwgZW5jb2RlIHRoZSAib2xkIiB3YXkgKHRo
ZSB3YXkgMS4zLjIgb3Igb2xkZXIKLSAgICAvLyBkaWQgaXQpLCBvdGhlcndpc2UgZW5jb2RlIHBh
cmFtcyByZWN1cnNpdmVseS4KLSAgICBmb3IgKCBwcmVmaXggaW4gYSApIHsKLSAgICBidWlsZFBh
cmFtcyggcHJlZml4LCBhWyBwcmVmaXggXSwgdHJhZGl0aW9uYWwsIGFkZCApOwotICAgIH0KLSAg
ICB9Ci0KLSAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9uCi0gICAgcmV0
dXJuIHMuam9pbiggIiYiICkucmVwbGFjZSggcjIwLCAiKyIgKTsKLX07Ci0KLWZ1bmN0aW9uIGJ1
aWxkUGFyYW1zKCBwcmVmaXgsIG9iaiwgdHJhZGl0aW9uYWwsIGFkZCApIHsKLSAgICB2YXIgbmFt
ZTsKLQotICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIG9iaiApICkgewotICAgIC8vIFNlcmlhbGl6
ZSBhcnJheSBpdGVtLgotICAgIGpRdWVyeS5lYWNoKCBvYmosIGZ1bmN0aW9uKCBpLCB2ICkgewot
ICAgIGlmICggdHJhZGl0aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4ICkgKSB7Ci0gICAg
Ly8gVHJlYXQgZWFjaCBhcnJheSBpdGVtIGFzIGEgc2NhbGFyLgotICAgIGFkZCggcHJlZml4LCB2
ICk7Ci0KLSAgICB9IGVsc2UgewotICAgIC8vIEl0ZW0gaXMgbm9uLXNjYWxhciAoYXJyYXkgb3Ig
b2JqZWN0KSwgZW5jb2RlIGl0cyBudW1lcmljIGluZGV4LgotICAgIGJ1aWxkUGFyYW1zKCBwcmVm
aXggKyAiWyIgKyAoIHR5cGVvZiB2ID09PSAib2JqZWN0IiA/IGkgOiAiIiApICsgIl0iLCB2LCB0
cmFkaXRpb25hbCwgYWRkICk7Ci0gICAgfQotICAgIH0pOwotCi0gICAgfSBlbHNlIGlmICggIXRy
YWRpdGlvbmFsICYmIGpRdWVyeS50eXBlKCBvYmogKSA9PT0gIm9iamVjdCIgKSB7Ci0gICAgLy8g
U2VyaWFsaXplIG9iamVjdCBpdGVtLgotICAgIGZvciAoIG5hbWUgaW4gb2JqICkgewotICAgIGJ1
aWxkUGFyYW1zKCBwcmVmaXggKyAiWyIgKyBuYW1lICsgIl0iLCBvYmpbIG5hbWUgXSwgdHJhZGl0
aW9uYWwsIGFkZCApOwotICAgIH0KLQotICAgIH0gZWxzZSB7Ci0gICAgLy8gU2VyaWFsaXplIHNj
YWxhciBpdGVtLgotICAgIGFkZCggcHJlZml4LCBvYmogKTsKLSAgICB9Ci19Ci1qUXVlcnkuZWFj
aCggKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVubG9h
ZCBjbGljayBkYmxjbGljayAiICsKLSAgICAibW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1v
dXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgIiArCi0gICAgImNoYW5nZSBz
ZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IgY29udGV4dG1lbnUiKS5z
cGxpdCgiICIpLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKLQotICAgIC8vIEhhbmRsZSBldmVudCBi
aW5kaW5nCi0gICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggZGF0YSwgZm4gKSB7Ci0g
ICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID8KLSAgICB0aGlzLm9uKCBuYW1lLCBudWxs
LCBkYXRhLCBmbiApIDoKLSAgICB0aGlzLnRyaWdnZXIoIG5hbWUgKTsKLSAgICB9OwotfSk7Ci0K
LWpRdWVyeS5mbi5ob3ZlciA9IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkgewotICAgIHJldHVy
biB0aGlzLm1vdXNlZW50ZXIoIGZuT3ZlciApLm1vdXNlbGVhdmUoIGZuT3V0IHx8IGZuT3ZlciAp
OwotfTsKLXZhcgotICAgIC8vIERvY3VtZW50IGxvY2F0aW9uCi0gICAgYWpheExvY1BhcnRzLAot
ICAgIGFqYXhMb2NhdGlvbiwKLSAgICBhamF4X25vbmNlID0galF1ZXJ5Lm5vdygpLAotCi0gICAg
YWpheF9ycXVlcnkgPSAvXD8vLAotICAgIHJoYXNoID0gLyMuKiQvLAotICAgIHJ0cyA9IC8oWz8m
XSlfPVteJl0qLywKLSAgICByaGVhZGVycyA9IC9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKVxyPyQv
bWcsIC8vIElFIGxlYXZlcyBhbiBcciBjaGFyYWN0ZXIgYXQgRU9MCi0gICAgLy8gIzc2NTMsICM4
MTI1LCAjODE1MjogbG9jYWwgcHJvdG9jb2wgZGV0ZWN0aW9uCi0gICAgcmxvY2FsUHJvdG9jb2wg
PSAvXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0
KTokLywKLSAgICBybm9Db250ZW50ID0gL14oPzpHRVR8SEVBRCkkLywKLSAgICBycHJvdG9jb2wg
PSAvXlwvXC8vLAotICAgIHJ1cmwgPSAvXihbXHcuKy1dKzopKD86XC9cLyhbXlwvPyM6XSopKD86
OihcZCspfCl8KS8sCi0KLSAgICAvLyBLZWVwIGEgY29weSBvZiB0aGUgb2xkIGxvYWQgbWV0aG9k
Ci0gICAgX2xvYWQgPSBqUXVlcnkuZm4ubG9hZCwKLQotICAgIC8qIFByZWZpbHRlcnMKLSAgICAg
KiAxKSBUaGV5IGFyZSB1c2VmdWwgdG8gaW50cm9kdWNlIGN1c3RvbSBkYXRhVHlwZXMgKHNlZSBh
amF4L2pzb25wLmpzIGZvciBhbiBleGFtcGxlKQotICAgICAqIDIpIFRoZXNlIGFyZSBjYWxsZWQ6
Ci0gICAgICogICAgLSBCRUZPUkUgYXNraW5nIGZvciBhIHRyYW5zcG9ydAotICAgICAqICAgIC0g
QUZURVIgcGFyYW0gc2VyaWFsaXphdGlvbiAocy5kYXRhIGlzIGEgc3RyaW5nIGlmIHMucHJvY2Vz
c0RhdGEgaXMgdHJ1ZSkKLSAgICAgKiAzKSBrZXkgaXMgdGhlIGRhdGFUeXBlCi0gICAgICogNCkg
dGhlIGNhdGNoYWxsIHN5bWJvbCAiKiIgY2FuIGJlIHVzZWQKLSAgICAgKiA1KSBleGVjdXRpb24g
d2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBjb250aW51ZSBkb3du
IHRvICIqIiBpZiBuZWVkZWQKLSAgICAgKi8KLSAgICBwcmVmaWx0ZXJzID0ge30sCi0KLSAgICAv
KiBUcmFuc3BvcnRzIGJpbmRpbmdzCi0gICAgICogMSkga2V5IGlzIHRoZSBkYXRhVHlwZQotICAg
ICAqIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgIioiIGNhbiBiZSB1c2VkCi0gICAgICogMykgc2Vs
ZWN0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gZ28gdG8g
IioiIGlmIG5lZWRlZAotICAgICAqLwotICAgIHRyYW5zcG9ydHMgPSB7fSwKLQotICAgIC8vIEF2
b2lkIGNvbW1lbnQtcHJvbG9nIGNoYXIgc2VxdWVuY2UgKCMxMDA5OCk7IG11c3QgYXBwZWFzZSBs
aW50IGFuZCBldmFkZSBjb21wcmVzc2lvbgotICAgIGFsbFR5cGVzID0gIiovIi5jb25jYXQoIioi
KTsKLQotLy8gIzgxMzgsIElFIG1heSB0aHJvdyBhbiBleGNlcHRpb24gd2hlbiBhY2Nlc3NpbmcK
LS8vIGEgZmllbGQgZnJvbSB3aW5kb3cubG9jYXRpb24gaWYgZG9jdW1lbnQuZG9tYWluIGhhcyBi
ZWVuIHNldAotdHJ5IHsKLSAgICBhamF4TG9jYXRpb24gPSBsb2NhdGlvbi5ocmVmOwotfSBjYXRj
aCggZSApIHsKLSAgICAvLyBVc2UgdGhlIGhyZWYgYXR0cmlidXRlIG9mIGFuIEEgZWxlbWVudAot
ICAgIC8vIHNpbmNlIElFIHdpbGwgbW9kaWZ5IGl0IGdpdmVuIGRvY3VtZW50LmxvY2F0aW9uCi0g
ICAgYWpheExvY2F0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImEiICk7Ci0gICAgYWph
eExvY2F0aW9uLmhyZWYgPSAiIjsKLSAgICBhamF4TG9jYXRpb24gPSBhamF4TG9jYXRpb24uaHJl
ZjsKLX0KLQotLy8gU2VnbWVudCBsb2NhdGlvbiBpbnRvIHBhcnRzCi1hamF4TG9jUGFydHMgPSBy
dXJsLmV4ZWMoIGFqYXhMb2NhdGlvbi50b0xvd2VyQ2FzZSgpICkgfHwgW107Ci0KLS8vIEJhc2Ug
ImNvbnN0cnVjdG9yIiBmb3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJh
bnNwb3J0Ci1mdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSAp
IHsKLQotICAgIC8vIGRhdGFUeXBlRXhwcmVzc2lvbiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMg
dG8gIioiCi0gICAgcmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7
Ci0KLSAgICBpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09ICJzdHJpbmciICkgewot
ICAgIGZ1bmMgPSBkYXRhVHlwZUV4cHJlc3Npb247Ci0gICAgZGF0YVR5cGVFeHByZXNzaW9uID0g
IioiOwotICAgIH0KLQotICAgIHZhciBkYXRhVHlwZSwKLSAgICBpID0gMCwKLSAgICBkYXRhVHlw
ZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5tYXRjaCggY29yZV9ybm90d2hp
dGUgKSB8fCBbXTsKLQotICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGZ1bmMgKSApIHsKLSAg
ICAvLyBGb3IgZWFjaCBkYXRhVHlwZSBpbiB0aGUgZGF0YVR5cGVFeHByZXNzaW9uCi0gICAgd2hp
bGUgKCAoZGF0YVR5cGUgPSBkYXRhVHlwZXNbaSsrXSkgKSB7Ci0gICAgLy8gUHJlcGVuZCBpZiBy
ZXF1ZXN0ZWQKLSAgICBpZiAoIGRhdGFUeXBlWzBdID09PSAiKyIgKSB7Ci0gICAgZGF0YVR5cGUg
PSBkYXRhVHlwZS5zbGljZSggMSApIHx8ICIqIjsKLSAgICAoc3RydWN0dXJlWyBkYXRhVHlwZSBd
ID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdKS51bnNoaWZ0KCBmdW5jICk7Ci0KLSAgICAv
LyBPdGhlcndpc2UgYXBwZW5kCi0gICAgfSBlbHNlIHsKLSAgICAoc3RydWN0dXJlWyBkYXRhVHlw
ZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdKS5wdXNoKCBmdW5jICk7Ci0gICAgfQot
ICAgIH0KLSAgICB9Ci0gICAgfTsKLX0KLQotLy8gQmFzZSBpbnNwZWN0aW9uIGZ1bmN0aW9uIGZv
ciBwcmVmaWx0ZXJzIGFuZCB0cmFuc3BvcnRzCi1mdW5jdGlvbiBpbnNwZWN0UHJlZmlsdGVyc09y
VHJhbnNwb3J0cyggc3RydWN0dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICkg
ewotCi0gICAgdmFyIGluc3BlY3RlZCA9IHt9LAotICAgIHNlZWtpbmdUcmFuc3BvcnQgPSAoIHN0
cnVjdHVyZSA9PT0gdHJhbnNwb3J0cyApOwotCi0gICAgZnVuY3Rpb24gaW5zcGVjdCggZGF0YVR5
cGUgKSB7Ci0gICAgdmFyIHNlbGVjdGVkOwotICAgIGluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRy
dWU7Ci0gICAgalF1ZXJ5LmVhY2goIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSwgZnVuY3Rp
b24oIF8sIHByZWZpbHRlck9yRmFjdG9yeSApIHsKLSAgICB2YXIgZGF0YVR5cGVPclRyYW5zcG9y
dCA9IHByZWZpbHRlck9yRmFjdG9yeSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiAp
OwotICAgIGlmKCB0eXBlb2YgZGF0YVR5cGVPclRyYW5zcG9ydCA9PT0gInN0cmluZyIgJiYgIXNl
ZWtpbmdUcmFuc3BvcnQgJiYgIWluc3BlY3RlZFsgZGF0YVR5cGVPclRyYW5zcG9ydCBdICkgewot
ICAgIG9wdGlvbnMuZGF0YVR5cGVzLnVuc2hpZnQoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTsKLSAg
ICBpbnNwZWN0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICAg
IH0gZWxzZSBpZiAoIHNlZWtpbmdUcmFuc3BvcnQgKSB7Ci0gICAgcmV0dXJuICEoIHNlbGVjdGVk
ID0gZGF0YVR5cGVPclRyYW5zcG9ydCApOwotICAgIH0KLSAgICB9KTsKLSAgICByZXR1cm4gc2Vs
ZWN0ZWQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIGluc3BlY3QoIG9wdGlvbnMuZGF0YVR5cGVzWyAw
IF0gKSB8fCAhaW5zcGVjdGVkWyAiKiIgXSAmJiBpbnNwZWN0KCAiKiIgKTsKLX0KLQotLy8gQSBz
cGVjaWFsIGV4dGVuZCBmb3IgYWpheCBvcHRpb25zCi0vLyB0aGF0IHRha2VzICJmbGF0IiBvcHRp
b25zIChub3QgdG8gYmUgZGVlcCBleHRlbmRlZCkKLS8vIEZpeGVzICM5ODg3Ci1mdW5jdGlvbiBh
amF4RXh0ZW5kKCB0YXJnZXQsIHNyYyApIHsKLSAgICB2YXIgZGVlcCwga2V5LAotICAgIGZsYXRP
cHRpb25zID0galF1ZXJ5LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9ucyB8fCB7fTsKLQotICAgIGZv
ciAoIGtleSBpbiBzcmMgKSB7Ci0gICAgaWYgKCBzcmNbIGtleSBdICE9PSB1bmRlZmluZWQgKSB7
Ci0gICAgKCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwgKGRlZXAgPSB7
fSkgKSApWyBrZXkgXSA9IHNyY1sga2V5IF07Ci0gICAgfQotICAgIH0KLSAgICBpZiAoIGRlZXAg
KSB7Ci0gICAgalF1ZXJ5LmV4dGVuZCggdHJ1ZSwgdGFyZ2V0LCBkZWVwICk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRhcmdldDsKLX0KLQotalF1ZXJ5LmZuLmxvYWQgPSBmdW5jdGlvbiggdXJsLCBw
YXJhbXMsIGNhbGxiYWNrICkgewotICAgIGlmICggdHlwZW9mIHVybCAhPT0gInN0cmluZyIgJiYg
X2xvYWQgKSB7Ci0gICAgcmV0dXJuIF9sb2FkLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKLSAg
ICB9Ci0KLSAgICB2YXIgc2VsZWN0b3IsIHJlc3BvbnNlLCB0eXBlLAotICAgIHNlbGYgPSB0aGlz
LAotICAgIG9mZiA9IHVybC5pbmRleE9mKCIgIik7Ci0KLSAgICBpZiAoIG9mZiA+PSAwICkgewot
ICAgIHNlbGVjdG9yID0gdXJsLnNsaWNlKCBvZmYsIHVybC5sZW5ndGggKTsKLSAgICB1cmwgPSB1
cmwuc2xpY2UoIDAsIG9mZiApOwotICAgIH0KLQotICAgIC8vIElmIGl0J3MgYSBmdW5jdGlvbgot
ICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHBhcmFtcyApICkgewotCi0gICAgLy8gV2UgYXNz
dW1lIHRoYXQgaXQncyB0aGUgY2FsbGJhY2sKLSAgICBjYWxsYmFjayA9IHBhcmFtczsKLSAgICBw
YXJhbXMgPSB1bmRlZmluZWQ7Ci0KLSAgICAvLyBPdGhlcndpc2UsIGJ1aWxkIGEgcGFyYW0gc3Ry
aW5nCi0gICAgfSBlbHNlIGlmICggcGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09ICJvYmplY3Qi
ICkgewotICAgIHR5cGUgPSAiUE9TVCI7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgaGF2ZSBlbGVt
ZW50cyB0byBtb2RpZnksIG1ha2UgdGhlIHJlcXVlc3QKLSAgICBpZiAoIHNlbGYubGVuZ3RoID4g
MCApIHsKLSAgICBqUXVlcnkuYWpheCh7Ci0gICAgdXJsOiB1cmwsCi0KLSAgICAvLyBpZiAidHlw
ZSIgdmFyaWFibGUgaXMgdW5kZWZpbmVkLCB0aGVuICJHRVQiIG1ldGhvZCB3aWxsIGJlIHVzZWQK
LSAgICB0eXBlOiB0eXBlLAotICAgIGRhdGFUeXBlOiAiaHRtbCIsCi0gICAgZGF0YTogcGFyYW1z
Ci0gICAgfSkuZG9uZShmdW5jdGlvbiggcmVzcG9uc2VUZXh0ICkgewotCi0gICAgLy8gU2F2ZSBy
ZXNwb25zZSBmb3IgdXNlIGluIGNvbXBsZXRlIGNhbGxiYWNrCi0gICAgcmVzcG9uc2UgPSBhcmd1
bWVudHM7Ci0KLSAgICBzZWxmLmh0bWwoIHNlbGVjdG9yID8KLQotICAgIC8vIElmIGEgc2VsZWN0
b3Igd2FzIHNwZWNpZmllZCwgbG9jYXRlIHRoZSByaWdodCBlbGVtZW50cyBpbiBhIGR1bW15IGRp
dgotICAgIC8vIEV4Y2x1ZGUgc2NyaXB0cyB0byBhdm9pZCBJRSAnUGVybWlzc2lvbiBEZW5pZWQn
IGVycm9ycwotICAgIGpRdWVyeSgiPGRpdj4iKS5hcHBlbmQoIGpRdWVyeS5wYXJzZUhUTUwoIHJl
c3BvbnNlVGV4dCApICkuZmluZCggc2VsZWN0b3IgKSA6Ci0KLSAgICAvLyBPdGhlcndpc2UgdXNl
IHRoZSBmdWxsIHJlc3VsdAotICAgIHJlc3BvbnNlVGV4dCApOwotCi0gICAgfSkuY29tcGxldGUo
IGNhbGxiYWNrICYmIGZ1bmN0aW9uKCBqcVhIUiwgc3RhdHVzICkgewotICAgIHNlbGYuZWFjaCgg
Y2FsbGJhY2ssIHJlc3BvbnNlIHx8IFsganFYSFIucmVzcG9uc2VUZXh0LCBzdGF0dXMsIGpxWEhS
IF0gKTsKLSAgICB9KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGhpczsKLX07Ci0KLS8vIEF0dGFj
aCBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgY29tbW9uIEFKQVggZXZlbnRzCi1q
UXVlcnkuZWFjaCggWyAiYWpheFN0YXJ0IiwgImFqYXhTdG9wIiwgImFqYXhDb21wbGV0ZSIsICJh
amF4RXJyb3IiLCAiYWpheFN1Y2Nlc3MiLCAiYWpheFNlbmQiIF0sIGZ1bmN0aW9uKCBpLCB0eXBl
ICl7Ci0gICAgalF1ZXJ5LmZuWyB0eXBlIF0gPSBmdW5jdGlvbiggZm4gKXsKLSAgICByZXR1cm4g
dGhpcy5vbiggdHlwZSwgZm4gKTsKLSAgICB9OwotfSk7Ci0KLWpRdWVyeS5lYWNoKCBbICJnZXQi
LCAicG9zdCIgXSwgZnVuY3Rpb24oIGksIG1ldGhvZCApIHsKLSAgICBqUXVlcnlbIG1ldGhvZCBd
ID0gZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2ssIHR5cGUgKSB7Ci0gICAgLy8gc2hpZnQg
YXJndW1lbnRzIGlmIGRhdGEgYXJndW1lbnQgd2FzIG9taXR0ZWQKLSAgICBpZiAoIGpRdWVyeS5p
c0Z1bmN0aW9uKCBkYXRhICkgKSB7Ci0gICAgdHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7Ci0gICAg
Y2FsbGJhY2sgPSBkYXRhOwotICAgIGRhdGEgPSB1bmRlZmluZWQ7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGpRdWVyeS5hamF4KHsKLSAgICB1cmw6IHVybCwKLSAgICB0eXBlOiBtZXRob2QsCi0gICAg
ZGF0YVR5cGU6IHR5cGUsCi0gICAgZGF0YTogZGF0YSwKLSAgICBzdWNjZXNzOiBjYWxsYmFjawot
ICAgIH0pOwotICAgIH07Ci19KTsKLQotalF1ZXJ5LmV4dGVuZCh7Ci0KLSAgICAvLyBDb3VudGVy
IGZvciBob2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1ZXJpZXMKLSAgICBhY3RpdmU6IDAs
Ci0KLSAgICAvLyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYWNoZSBmb3IgbmV4dCByZXF1ZXN0Ci0g
ICAgbGFzdE1vZGlmaWVkOiB7fSwKLSAgICBldGFnOiB7fSwKLQotICAgIGFqYXhTZXR0aW5nczog
ewotICAgIHVybDogYWpheExvY2F0aW9uLAotICAgIHR5cGU6ICJHRVQiLAotICAgIGlzTG9jYWw6
IHJsb2NhbFByb3RvY29sLnRlc3QoIGFqYXhMb2NQYXJ0c1sgMSBdICksCi0gICAgZ2xvYmFsOiB0
cnVlLAotICAgIHByb2Nlc3NEYXRhOiB0cnVlLAotICAgIGFzeW5jOiB0cnVlLAotICAgIGNvbnRl
bnRUeXBlOiAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04
IiwKLSAgICAvKgotICAgIHRpbWVvdXQ6IDAsCi0gICAgZGF0YTogbnVsbCwKLSAgICBkYXRhVHlw
ZTogbnVsbCwKLSAgICB1c2VybmFtZTogbnVsbCwKLSAgICBwYXNzd29yZDogbnVsbCwKLSAgICBj
YWNoZTogbnVsbCwKLSAgICB0aHJvd3M6IGZhbHNlLAotICAgIHRyYWRpdGlvbmFsOiBmYWxzZSwK
LSAgICBoZWFkZXJzOiB7fSwKLSAgICAqLwotCi0gICAgYWNjZXB0czogewotICAgICIqIjogYWxs
VHlwZXMsCi0gICAgdGV4dDogInRleHQvcGxhaW4iLAotICAgIGh0bWw6ICJ0ZXh0L2h0bWwiLAot
ICAgIHhtbDogImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLAotICAgIGpzb246ICJhcHBsaWNh
dGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQiCi0gICAgfSwKLQotICAgIGNvbnRlbnRzOiB7Ci0g
ICAgeG1sOiAveG1sLywKLSAgICBodG1sOiAvaHRtbC8sCi0gICAganNvbjogL2pzb24vCi0gICAg
fSwKLQotICAgIHJlc3BvbnNlRmllbGRzOiB7Ci0gICAgeG1sOiAicmVzcG9uc2VYTUwiLAotICAg
IHRleHQ6ICJyZXNwb25zZVRleHQiCi0gICAgfSwKLQotICAgIC8vIERhdGEgY29udmVydGVycwot
ICAgIC8vIEtleXMgc2VwYXJhdGUgc291cmNlIChvciBjYXRjaGFsbCAiKiIpIGFuZCBkZXN0aW5h
dGlvbiB0eXBlcyB3aXRoIGEgc2luZ2xlIHNwYWNlCi0gICAgY29udmVydGVyczogewotCi0gICAg
Ly8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0Ci0gICAgIiogdGV4dCI6IHdpbmRvdy5TdHJpbmcs
Ci0KLSAgICAvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1hdGlvbikKLSAgICAi
dGV4dCBodG1sIjogdHJ1ZSwKLQotICAgIC8vIEV2YWx1YXRlIHRleHQgYXMgYSBqc29uIGV4cHJl
c3Npb24KLSAgICAidGV4dCBqc29uIjogalF1ZXJ5LnBhcnNlSlNPTiwKLQotICAgIC8vIFBhcnNl
IHRleHQgYXMgeG1sCi0gICAgInRleHQgeG1sIjogalF1ZXJ5LnBhcnNlWE1MCi0gICAgfSwKLQot
ICAgIC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6Ci0gICAg
Ly8geW91IGNhbiBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZgotICAgIC8vIGFu
ZCB3aGVuIHlvdSBjcmVhdGUgb25lIHRoYXQgc2hvdWxkbid0IGJlCi0gICAgLy8gZGVlcCBleHRl
bmRlZCAoc2VlIGFqYXhFeHRlbmQpCi0gICAgZmxhdE9wdGlvbnM6IHsKLSAgICB1cmw6IHRydWUs
Ci0gICAgY29udGV4dDogdHJ1ZQotICAgIH0KLSAgICB9LAotCi0gICAgLy8gQ3JlYXRlcyBhIGZ1
bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50byB0YXJnZXQKLSAgICAvLyB3aXRoIGJvdGgg
YWpheFNldHRpbmdzIGFuZCBzZXR0aW5ncyBmaWVsZHMuCi0gICAgLy8gSWYgdGFyZ2V0IGlzIG9t
aXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhTZXR0aW5ncy4KLSAgICBhamF4U2V0dXA6IGZ1bmN0aW9u
KCB0YXJnZXQsIHNldHRpbmdzICkgewotICAgIHJldHVybiBzZXR0aW5ncyA/Ci0KLSAgICAvLyBC
dWlsZGluZyBhIHNldHRpbmdzIG9iamVjdAotICAgIGFqYXhFeHRlbmQoIGFqYXhFeHRlbmQoIHRh
cmdldCwgalF1ZXJ5LmFqYXhTZXR0aW5ncyApLCBzZXR0aW5ncyApIDoKLQotICAgIC8vIEV4dGVu
ZGluZyBhamF4U2V0dGluZ3MKLSAgICBhamF4RXh0ZW5kKCBqUXVlcnkuYWpheFNldHRpbmdzLCB0
YXJnZXQgKTsKLSAgICB9LAotCi0gICAgYWpheFByZWZpbHRlcjogYWRkVG9QcmVmaWx0ZXJzT3JU
cmFuc3BvcnRzKCBwcmVmaWx0ZXJzICksCi0gICAgYWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0
ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzICksCi0KLSAgICAvLyBNYWluIG1ldGhvZAotICAg
IGFqYXg6IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7Ci0KLSAgICAvLyBJZiB1cmwgaXMgYW4g
b2JqZWN0LCBzaW11bGF0ZSBwcmUtMS41IHNpZ25hdHVyZQotICAgIGlmICggdHlwZW9mIHVybCA9
PT0gIm9iamVjdCIgKSB7Ci0gICAgb3B0aW9ucyA9IHVybDsKLSAgICB1cmwgPSB1bmRlZmluZWQ7
Ci0gICAgfQotCi0gICAgLy8gRm9yY2Ugb3B0aW9ucyB0byBiZSBhbiBvYmplY3QKLSAgICBvcHRp
b25zID0gb3B0aW9ucyB8fCB7fTsKLQotICAgIHZhciAvLyBDcm9zcy1kb21haW4gZGV0ZWN0aW9u
IHZhcnMKLSAgICBwYXJ0cywKLSAgICAvLyBMb29wIHZhcmlhYmxlCi0gICAgaSwKLSAgICAvLyBV
Ukwgd2l0aG91dCBhbnRpLWNhY2hlIHBhcmFtCi0gICAgY2FjaGVVUkwsCi0gICAgLy8gUmVzcG9u
c2UgaGVhZGVycyBhcyBzdHJpbmcKLSAgICByZXNwb25zZUhlYWRlcnNTdHJpbmcsCi0gICAgLy8g
dGltZW91dCBoYW5kbGUKLSAgICB0aW1lb3V0VGltZXIsCi0KLSAgICAvLyBUbyBrbm93IGlmIGds
b2JhbCBldmVudHMgYXJlIHRvIGJlIGRpc3BhdGNoZWQKLSAgICBmaXJlR2xvYmFscywKLQotICAg
IHRyYW5zcG9ydCwKLSAgICAvLyBSZXNwb25zZSBoZWFkZXJzCi0gICAgcmVzcG9uc2VIZWFkZXJz
LAotICAgIC8vIENyZWF0ZSB0aGUgZmluYWwgb3B0aW9ucyBvYmplY3QKLSAgICBzID0galF1ZXJ5
LmFqYXhTZXR1cCgge30sIG9wdGlvbnMgKSwKLSAgICAvLyBDYWxsYmFja3MgY29udGV4dAotICAg
IGNhbGxiYWNrQ29udGV4dCA9IHMuY29udGV4dCB8fCBzLAotICAgIC8vIENvbnRleHQgZm9yIGds
b2JhbCBldmVudHMgaXMgY2FsbGJhY2tDb250ZXh0IGlmIGl0IGlzIGEgRE9NIG5vZGUgb3IgalF1
ZXJ5IGNvbGxlY3Rpb24KLSAgICBnbG9iYWxFdmVudENvbnRleHQgPSBzLmNvbnRleHQgJiYgKCBj
YWxsYmFja0NvbnRleHQubm9kZVR5cGUgfHwgY2FsbGJhY2tDb250ZXh0LmpxdWVyeSApID8KLSAg
ICBqUXVlcnkoIGNhbGxiYWNrQ29udGV4dCApIDoKLSAgICBqUXVlcnkuZXZlbnQsCi0gICAgLy8g
RGVmZXJyZWRzCi0gICAgZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSwKLSAgICBjb21wbGV0
ZURlZmVycmVkID0galF1ZXJ5LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwKLSAgICAvLyBTdGF0
dXMtZGVwZW5kZW50IGNhbGxiYWNrcwotICAgIHN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUgfHwg
e30sCi0gICAgLy8gSGVhZGVycyAodGhleSBhcmUgc2VudCBhbGwgYXQgb25jZSkKLSAgICByZXF1
ZXN0SGVhZGVycyA9IHt9LAotICAgIHJlcXVlc3RIZWFkZXJzTmFtZXMgPSB7fSwKLSAgICAvLyBU
aGUganFYSFIgc3RhdGUKLSAgICBzdGF0ZSA9IDAsCi0gICAgLy8gRGVmYXVsdCBhYm9ydCBtZXNz
YWdlCi0gICAgc3RyQWJvcnQgPSAiY2FuY2VsZWQiLAotICAgIC8vIEZha2UgeGhyCi0gICAganFY
SFIgPSB7Ci0gICAgcmVhZHlTdGF0ZTogMCwKLQotICAgIC8vIEJ1aWxkcyBoZWFkZXJzIGhhc2h0
YWJsZSBpZiBuZWVkZWQKLSAgICBnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24oIGtleSApIHsK
LSAgICB2YXIgbWF0Y2g7Ci0gICAgaWYgKCBzdGF0ZSA9PT0gMiApIHsKLSAgICBpZiAoICFyZXNw
b25zZUhlYWRlcnMgKSB7Ci0gICAgcmVzcG9uc2VIZWFkZXJzID0ge307Ci0gICAgd2hpbGUgKCAo
bWF0Y2ggPSByaGVhZGVycy5leGVjKCByZXNwb25zZUhlYWRlcnNTdHJpbmcgKSkgKSB7Ci0gICAg
cmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpIF0gPSBtYXRjaFsgMiBdOwot
ICAgIH0KLSAgICB9Ci0gICAgbWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50b0xvd2VyQ2Fz
ZSgpIF07Ci0gICAgfQotICAgIHJldHVybiBtYXRjaCA9PSBudWxsID8gbnVsbCA6IG1hdGNoOwot
ICAgIH0sCi0KLSAgICAvLyBSYXcgc3RyaW5nCi0gICAgZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBm
dW5jdGlvbigpIHsKLSAgICByZXR1cm4gc3RhdGUgPT09IDIgPyByZXNwb25zZUhlYWRlcnNTdHJp
bmcgOiBudWxsOwotICAgIH0sCi0KLSAgICAvLyBDYWNoZXMgdGhlIGhlYWRlcgotICAgIHNldFJl
cXVlc3RIZWFkZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKLSAgICB2YXIgbG5hbWUgPSBu
YW1lLnRvTG93ZXJDYXNlKCk7Ci0gICAgaWYgKCAhc3RhdGUgKSB7Ci0gICAgbmFtZSA9IHJlcXVl
c3RIZWFkZXJzTmFtZXNbIGxuYW1lIF0gPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBsbmFtZSBdIHx8
IG5hbWU7Ci0gICAgcmVxdWVzdEhlYWRlcnNbIG5hbWUgXSA9IHZhbHVlOwotICAgIH0KLSAgICBy
ZXR1cm4gdGhpczsKLSAgICB9LAotCi0gICAgLy8gT3ZlcnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQt
dHlwZSBoZWFkZXIKLSAgICBvdmVycmlkZU1pbWVUeXBlOiBmdW5jdGlvbiggdHlwZSApIHsKLSAg
ICBpZiAoICFzdGF0ZSApIHsKLSAgICBzLm1pbWVUeXBlID0gdHlwZTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRoaXM7Ci0gICAgfSwKLQotICAgIC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzCi0g
ICAgc3RhdHVzQ29kZTogZnVuY3Rpb24oIG1hcCApIHsKLSAgICB2YXIgY29kZTsKLSAgICBpZiAo
IG1hcCApIHsKLSAgICBpZiAoIHN0YXRlIDwgMiApIHsKLSAgICBmb3IgKCBjb2RlIGluIG1hcCAp
IHsKLSAgICAvLyBMYXp5LWFkZCB0aGUgbmV3IGNhbGxiYWNrIGluIGEgd2F5IHRoYXQgcHJlc2Vy
dmVzIG9sZCBvbmVzCi0gICAgc3RhdHVzQ29kZVsgY29kZSBdID0gWyBzdGF0dXNDb2RlWyBjb2Rl
IF0sIG1hcFsgY29kZSBdIF07Ci0gICAgfQotICAgIH0gZWxzZSB7Ci0gICAgLy8gRXhlY3V0ZSB0
aGUgYXBwcm9wcmlhdGUgY2FsbGJhY2tzCi0gICAganFYSFIuYWx3YXlzKCBtYXBbIGpxWEhSLnN0
YXR1cyBdICk7Ci0gICAgfQotICAgIH0KLSAgICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0gICAg
Ly8gQ2FuY2VsIHRoZSByZXF1ZXN0Ci0gICAgYWJvcnQ6IGZ1bmN0aW9uKCBzdGF0dXNUZXh0ICkg
ewotICAgIHZhciBmaW5hbFRleHQgPSBzdGF0dXNUZXh0IHx8IHN0ckFib3J0OwotICAgIGlmICgg
dHJhbnNwb3J0ICkgewotICAgIHRyYW5zcG9ydC5hYm9ydCggZmluYWxUZXh0ICk7Ci0gICAgfQot
ICAgIGRvbmUoIDAsIGZpbmFsVGV4dCApOwotICAgIHJldHVybiB0aGlzOwotICAgIH0KLSAgICB9
OwotCi0gICAgLy8gQXR0YWNoIGRlZmVycmVkcwotICAgIGRlZmVycmVkLnByb21pc2UoIGpxWEhS
ICkuY29tcGxldGUgPSBjb21wbGV0ZURlZmVycmVkLmFkZDsKLSAgICBqcVhIUi5zdWNjZXNzID0g
anFYSFIuZG9uZTsKLSAgICBqcVhIUi5lcnJvciA9IGpxWEhSLmZhaWw7Ci0KLSAgICAvLyBSZW1v
dmUgaGFzaCBjaGFyYWN0ZXIgKCM3NTMxOiBhbmQgc3RyaW5nIHByb21vdGlvbikKLSAgICAvLyBB
ZGQgcHJvdG9jb2wgaWYgbm90IHByb3ZpZGVkICgjNTg2NjogSUU3IGlzc3VlIHdpdGggcHJvdG9j
b2wtbGVzcyB1cmxzKQotICAgIC8vIEhhbmRsZSBmYWxzeSB1cmwgaW4gdGhlIHNldHRpbmdzIG9i
amVjdCAoIzEwMDkzOiBjb25zaXN0ZW5jeSB3aXRoIG9sZCBzaWduYXR1cmUpCi0gICAgLy8gV2Ug
YWxzbyB1c2UgdGhlIHVybCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlCi0gICAgcy51cmwgPSAoICgg
dXJsIHx8IHMudXJsIHx8IGFqYXhMb2NhdGlvbiApICsgIiIgKS5yZXBsYWNlKCByaGFzaCwgIiIg
KS5yZXBsYWNlKCBycHJvdG9jb2wsIGFqYXhMb2NQYXJ0c1sgMSBdICsgIi8vIiApOwotCi0gICAg
Ly8gQWxpYXMgbWV0aG9kIG9wdGlvbiB0byB0eXBlIGFzIHBlciB0aWNrZXQgIzEyMDA0Ci0gICAg
cy50eXBlID0gb3B0aW9ucy5tZXRob2QgfHwgb3B0aW9ucy50eXBlIHx8IHMubWV0aG9kIHx8IHMu
dHlwZTsKLQotICAgIC8vIEV4dHJhY3QgZGF0YVR5cGVzIGxpc3QKLSAgICBzLmRhdGFUeXBlcyA9
IGpRdWVyeS50cmltKCBzLmRhdGFUeXBlIHx8ICIqIiApLnRvTG93ZXJDYXNlKCkubWF0Y2goIGNv
cmVfcm5vdHdoaXRlICkgfHwgWyIiXTsKLQotICAgIC8vIEEgY3Jvc3MtZG9tYWluIHJlcXVlc3Qg
aXMgaW4gb3JkZXIgd2hlbiB3ZSBoYXZlIGEgcHJvdG9jb2w6aG9zdDpwb3J0IG1pc21hdGNoCi0g
ICAgaWYgKCBzLmNyb3NzRG9tYWluID09IG51bGwgKSB7Ci0gICAgcGFydHMgPSBydXJsLmV4ZWMo
IHMudXJsLnRvTG93ZXJDYXNlKCkgKTsKLSAgICBzLmNyb3NzRG9tYWluID0gISEoIHBhcnRzICYm
Ci0gICAgKCBwYXJ0c1sgMSBdICE9PSBhamF4TG9jUGFydHNbIDEgXSB8fCBwYXJ0c1sgMiBdICE9
PSBhamF4TG9jUGFydHNbIDIgXSB8fAotICAgICggcGFydHNbIDMgXSB8fCAoIHBhcnRzWyAxIF0g
PT09ICJodHRwOiIgPyA4MCA6IDQ0MyApICkgIT0KLSAgICAoIGFqYXhMb2NQYXJ0c1sgMyBdIHx8
ICggYWpheExvY1BhcnRzWyAxIF0gPT09ICJodHRwOiIgPyA4MCA6IDQ0MyApICkgKQotICAgICk7
Ci0gICAgfQotCi0gICAgLy8gQ29udmVydCBkYXRhIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nCi0g
ICAgaWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJiB0eXBlb2Ygcy5kYXRhICE9PSAic3Ry
aW5nIiApIHsKLSAgICBzLmRhdGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0YSwgcy50cmFkaXRpb25h
bCApOwotICAgIH0KLQotICAgIC8vIEFwcGx5IHByZWZpbHRlcnMKLSAgICBpbnNwZWN0UHJlZmls
dGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycywgcywgb3B0aW9ucywganFYSFIgKTsKLQotICAg
IC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGEgcHJlZmlsdGVyLCBzdG9wIHRoZXJl
Ci0gICAgaWYgKCBzdGF0ZSA9PT0gMiApIHsKLSAgICByZXR1cm4ganFYSFI7Ci0gICAgfQotCi0g
ICAgLy8gV2UgY2FuIGZpcmUgZ2xvYmFsIGV2ZW50cyBhcyBvZiBub3cgaWYgYXNrZWQgdG8KLSAg
ICBmaXJlR2xvYmFscyA9IHMuZ2xvYmFsOwotCi0gICAgLy8gV2F0Y2ggZm9yIGEgbmV3IHNldCBv
ZiByZXF1ZXN0cwotICAgIGlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFjdGl2ZSsrID09PSAw
ICkgewotICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKTsKLSAgICB9Ci0KLSAg
ICAvLyBVcHBlcmNhc2UgdGhlIHR5cGUKLSAgICBzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2Uo
KTsKLQotICAgIC8vIERldGVybWluZSBpZiByZXF1ZXN0IGhhcyBjb250ZW50Ci0gICAgcy5oYXND
b250ZW50ID0gIXJub0NvbnRlbnQudGVzdCggcy50eXBlICk7Ci0KLSAgICAvLyBTYXZlIHRoZSBV
UkwgaW4gY2FzZSB3ZSdyZSB0b3lpbmcgd2l0aCB0aGUgSWYtTW9kaWZpZWQtU2luY2UKLSAgICAv
LyBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIgbGF0ZXIgb24KLSAgICBjYWNoZVVSTCA9IHMu
dXJsOwotCi0gICAgLy8gTW9yZSBvcHRpb25zIGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRoIG5v
IGNvbnRlbnQKLSAgICBpZiAoICFzLmhhc0NvbnRlbnQgKSB7Ci0KLSAgICAvLyBJZiBkYXRhIGlz
IGF2YWlsYWJsZSwgYXBwZW5kIGRhdGEgdG8gdXJsCi0gICAgaWYgKCBzLmRhdGEgKSB7Ci0gICAg
Y2FjaGVVUkwgPSAoIHMudXJsICs9ICggYWpheF9ycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/ICIm
IiA6ICI/IiApICsgcy5kYXRhICk7Ci0gICAgLy8gIzk2ODI6IHJlbW92ZSBkYXRhIHNvIHRoYXQg
aXQncyBub3QgdXNlZCBpbiBhbiBldmVudHVhbCByZXRyeQotICAgIGRlbGV0ZSBzLmRhdGE7Ci0g
ICAgfQotCi0gICAgLy8gQWRkIGFudGktY2FjaGUgaW4gdXJsIGlmIG5lZWRlZAotICAgIGlmICgg
cy5jYWNoZSA9PT0gZmFsc2UgKSB7Ci0gICAgcy51cmwgPSBydHMudGVzdCggY2FjaGVVUkwgKSA/
Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgJ18nIHBhcmFtZXRlciwgc2V0IGl0cyB2
YWx1ZQotICAgIGNhY2hlVVJMLnJlcGxhY2UoIHJ0cywgIiQxXz0iICsgYWpheF9ub25jZSsrICkg
OgotCi0gICAgLy8gT3RoZXJ3aXNlIGFkZCBvbmUgdG8gdGhlIGVuZAotICAgIGNhY2hlVVJMICsg
KCBhamF4X3JxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gIiYiIDogIj8iICkgKyAiXz0iICsgYWph
eF9ub25jZSsrOwotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNp
bmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLgot
ICAgIGlmICggcy5pZk1vZGlmaWVkICkgewotICAgIGlmICggalF1ZXJ5Lmxhc3RNb2RpZmllZFsg
Y2FjaGVVUkwgXSApIHsKLSAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTW9kaWZpZWQt
U2luY2UiLCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICk7Ci0gICAgfQotICAgIGlm
ICggalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKSB7Ci0gICAganFYSFIuc2V0UmVxdWVzdEhlYWRl
ciggIklmLU5vbmUtTWF0Y2giLCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApOwotICAgIH0KLSAg
ICB9Ci0KLSAgICAvLyBTZXQgdGhlIGNvcnJlY3QgaGVhZGVyLCBpZiBkYXRhIGlzIGJlaW5nIHNl
bnQKLSAgICBpZiAoIHMuZGF0YSAmJiBzLmhhc0NvbnRlbnQgJiYgcy5jb250ZW50VHlwZSAhPT0g
ZmFsc2UgfHwgb3B0aW9ucy5jb250ZW50VHlwZSApIHsKLSAgICBqcVhIUi5zZXRSZXF1ZXN0SGVh
ZGVyKCAiQ29udGVudC1UeXBlIiwgcy5jb250ZW50VHlwZSApOwotICAgIH0KLQotICAgIC8vIFNl
dCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0aGUgZGF0
YVR5cGUKLSAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKAotICAgICJBY2NlcHQiLAotICAgIHMu
ZGF0YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1swXSBdID8KLSAgICBzLmFj
Y2VwdHNbIHMuZGF0YVR5cGVzWzBdIF0gKyAoIHMuZGF0YVR5cGVzWyAwIF0gIT09ICIqIiA/ICIs
ICIgKyBhbGxUeXBlcyArICI7IHE9MC4wMSIgOiAiIiApIDoKLSAgICBzLmFjY2VwdHNbICIqIiBd
Ci0gICAgKTsKLQotICAgIC8vIENoZWNrIGZvciBoZWFkZXJzIG9wdGlvbgotICAgIGZvciAoIGkg
aW4gcy5oZWFkZXJzICkgewotICAgIGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIGksIHMuaGVhZGVy
c1sgaSBdICk7Ci0gICAgfQotCi0gICAgLy8gQWxsb3cgY3VzdG9tIGhlYWRlcnMvbWltZXR5cGVz
IGFuZCBlYXJseSBhYm9ydAotICAgIGlmICggcy5iZWZvcmVTZW5kICYmICggcy5iZWZvcmVTZW5k
LmNhbGwoIGNhbGxiYWNrQ29udGV4dCwganFYSFIsIHMgKSA9PT0gZmFsc2UgfHwgc3RhdGUgPT09
IDIgKSApIHsKLSAgICAvLyBBYm9ydCBpZiBub3QgZG9uZSBhbHJlYWR5IGFuZCByZXR1cm4KLSAg
ICByZXR1cm4ganFYSFIuYWJvcnQoKTsKLSAgICB9Ci0KLSAgICAvLyBhYm9ydGluZyBpcyBubyBs
b25nZXIgYSBjYW5jZWxsYXRpb24KLSAgICBzdHJBYm9ydCA9ICJhYm9ydCI7Ci0KLSAgICAvLyBJ
bnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHMKLSAgICBmb3IgKCBpIGluIHsgc3VjY2Vzczog
MSwgZXJyb3I6IDEsIGNvbXBsZXRlOiAxIH0gKSB7Ci0gICAganFYSFJbIGkgXSggc1sgaSBdICk7
Ci0gICAgfQotCi0gICAgLy8gR2V0IHRyYW5zcG9ydAotICAgIHRyYW5zcG9ydCA9IGluc3BlY3RQ
cmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBzLCBvcHRpb25zLCBqcVhIUiApOwot
Ci0gICAgLy8gSWYgbm8gdHJhbnNwb3J0LCB3ZSBhdXRvLWFib3J0Ci0gICAgaWYgKCAhdHJhbnNw
b3J0ICkgewotICAgIGRvbmUoIC0xLCAiTm8gVHJhbnNwb3J0IiApOwotICAgIH0gZWxzZSB7Ci0g
ICAganFYSFIucmVhZHlTdGF0ZSA9IDE7Ci0KLSAgICAvLyBTZW5kIGdsb2JhbCBldmVudAotICAg
IGlmICggZmlyZUdsb2JhbHMgKSB7Ci0gICAgZ2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoICJh
amF4U2VuZCIsIFsganFYSFIsIHMgXSApOwotICAgIH0KLSAgICAvLyBUaW1lb3V0Ci0gICAgaWYg
KCBzLmFzeW5jICYmIHMudGltZW91dCA+IDAgKSB7Ci0gICAgdGltZW91dFRpbWVyID0gc2V0VGlt
ZW91dChmdW5jdGlvbigpIHsKLSAgICBqcVhIUi5hYm9ydCgidGltZW91dCIpOwotICAgIH0sIHMu
dGltZW91dCApOwotICAgIH0KLQotICAgIHRyeSB7Ci0gICAgc3RhdGUgPSAxOwotICAgIHRyYW5z
cG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApOwotICAgIH0gY2F0Y2ggKCBlICkgewot
ICAgIC8vIFByb3BhZ2F0ZSBleGNlcHRpb24gYXMgZXJyb3IgaWYgbm90IGRvbmUKLSAgICBpZiAo
IHN0YXRlIDwgMiApIHsKLSAgICBkb25lKCAtMSwgZSApOwotICAgIC8vIFNpbXBseSByZXRocm93
IG90aGVyd2lzZQotICAgIH0gZWxzZSB7Ci0gICAgdGhyb3cgZTsKLSAgICB9Ci0gICAgfQotICAg
IH0KLQotICAgIC8vIENhbGxiYWNrIGZvciB3aGVuIGV2ZXJ5dGhpbmcgaXMgZG9uZQotICAgIGZ1
bmN0aW9uIGRvbmUoIHN0YXR1cywgbmF0aXZlU3RhdHVzVGV4dCwgcmVzcG9uc2VzLCBoZWFkZXJz
ICkgewotICAgIHZhciBpc1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVycm9yLCByZXNwb25zZSwgbW9kaWZp
ZWQsCi0gICAgc3RhdHVzVGV4dCA9IG5hdGl2ZVN0YXR1c1RleHQ7Ci0KLSAgICAvLyBDYWxsZWQg
b25jZQotICAgIGlmICggc3RhdGUgPT09IDIgKSB7Ci0gICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIFN0YXRlIGlzICJkb25lIiBub3cKLSAgICBzdGF0ZSA9IDI7Ci0KLSAgICAvLyBDbGVhciB0
aW1lb3V0IGlmIGl0IGV4aXN0cwotICAgIGlmICggdGltZW91dFRpbWVyICkgewotICAgIGNsZWFy
VGltZW91dCggdGltZW91dFRpbWVyICk7Ci0gICAgfQotCi0gICAgLy8gRGVyZWZlcmVuY2UgdHJh
bnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxlY3Rpb24KLSAgICAvLyAobm8gbWF0dGVyIGhv
dyBsb25nIHRoZSBqcVhIUiBvYmplY3Qgd2lsbCBiZSB1c2VkKQotICAgIHRyYW5zcG9ydCA9IHVu
ZGVmaW5lZDsKLQotICAgIC8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnMKLSAgICByZXNwb25zZUhl
YWRlcnNTdHJpbmcgPSBoZWFkZXJzIHx8ICIiOwotCi0gICAgLy8gU2V0IHJlYWR5U3RhdGUKLSAg
ICBqcVhIUi5yZWFkeVN0YXRlID0gc3RhdHVzID4gMCA/IDQgOiAwOwotCi0gICAgLy8gR2V0IHJl
c3BvbnNlIGRhdGEKLSAgICBpZiAoIHJlc3BvbnNlcyApIHsKLSAgICByZXNwb25zZSA9IGFqYXhI
YW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKTsKLSAgICB9Ci0KLSAgICAvLyBJ
ZiBzdWNjZXNzZnVsLCBoYW5kbGUgdHlwZSBjaGFpbmluZwotICAgIGlmICggc3RhdHVzID49IDIw
MCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAzMDQgKSB7Ci0KLSAgICAvLyBTZXQgdGhl
IElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZN
b2RpZmllZCBtb2RlLgotICAgIGlmICggcy5pZk1vZGlmaWVkICkgewotICAgIG1vZGlmaWVkID0g
anFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKTsKLSAgICBpZiAoIG1vZGlm
aWVkICkgewotICAgIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDsK
LSAgICB9Ci0gICAgbW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpOwot
ICAgIGlmICggbW9kaWZpZWQgKSB7Ci0gICAgalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gPSBtb2Rp
ZmllZDsKLSAgICB9Ci0gICAgfQotCi0gICAgLy8gaWYgbm8gY29udGVudAotICAgIGlmICggc3Rh
dHVzID09PSAyMDQgKSB7Ci0gICAgaXNTdWNjZXNzID0gdHJ1ZTsKLSAgICBzdGF0dXNUZXh0ID0g
Im5vY29udGVudCI7Ci0KLSAgICAvLyBpZiBub3QgbW9kaWZpZWQKLSAgICB9IGVsc2UgaWYgKCBz
dGF0dXMgPT09IDMwNCApIHsKLSAgICBpc1N1Y2Nlc3MgPSB0cnVlOwotICAgIHN0YXR1c1RleHQg
PSAibm90bW9kaWZpZWQiOwotCi0gICAgLy8gSWYgd2UgaGF2ZSBkYXRhLCBsZXQncyBjb252ZXJ0
IGl0Ci0gICAgfSBlbHNlIHsKLSAgICBpc1N1Y2Nlc3MgPSBhamF4Q29udmVydCggcywgcmVzcG9u
c2UgKTsKLSAgICBzdGF0dXNUZXh0ID0gaXNTdWNjZXNzLnN0YXRlOwotICAgIHN1Y2Nlc3MgPSBp
c1N1Y2Nlc3MuZGF0YTsKLSAgICBlcnJvciA9IGlzU3VjY2Vzcy5lcnJvcjsKLSAgICBpc1N1Y2Nl
c3MgPSAhZXJyb3I7Ci0gICAgfQotICAgIH0gZWxzZSB7Ci0gICAgLy8gV2UgZXh0cmFjdCBlcnJv
ciBmcm9tIHN0YXR1c1RleHQKLSAgICAvLyB0aGVuIG5vcm1hbGl6ZSBzdGF0dXNUZXh0IGFuZCBz
dGF0dXMgZm9yIG5vbi1hYm9ydHMKLSAgICBlcnJvciA9IHN0YXR1c1RleHQ7Ci0gICAgaWYgKCBz
dGF0dXMgfHwgIXN0YXR1c1RleHQgKSB7Ci0gICAgc3RhdHVzVGV4dCA9ICJlcnJvciI7Ci0gICAg
aWYgKCBzdGF0dXMgPCAwICkgewotICAgIHN0YXR1cyA9IDA7Ci0gICAgfQotICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBTZXQgZGF0YSBmb3IgdGhlIGZha2UgeGhyIG9iamVjdAotICAgIGpxWEhSLnN0
YXR1cyA9IHN0YXR1czsKLSAgICBqcVhIUi5zdGF0dXNUZXh0ID0gKCBuYXRpdmVTdGF0dXNUZXh0
IHx8IHN0YXR1c1RleHQgKSArICIiOwotCi0gICAgLy8gU3VjY2Vzcy9FcnJvcgotICAgIGlmICgg
aXNTdWNjZXNzICkgewotICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxsYmFja0NvbnRleHQs
IFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApOwotICAgIH0gZWxzZSB7Ci0gICAgZGVm
ZXJyZWQucmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBl
cnJvciBdICk7Ci0gICAgfQotCi0gICAgLy8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3MKLSAg
ICBqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7Ci0gICAgc3RhdHVzQ29kZSA9IHVuZGVm
aW5lZDsKLQotICAgIGlmICggZmlyZUdsb2JhbHMgKSB7Ci0gICAgZ2xvYmFsRXZlbnRDb250ZXh0
LnRyaWdnZXIoIGlzU3VjY2VzcyA/ICJhamF4U3VjY2VzcyIgOiAiYWpheEVycm9yIiwKLSAgICBb
IGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApOwotICAgIH0KLQotICAg
IC8vIENvbXBsZXRlCi0gICAgY29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250
ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTsKLQotICAgIGlmICggZmlyZUdsb2JhbHMgKSB7
Ci0gICAgZ2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoICJhamF4Q29tcGxldGUiLCBbIGpxWEhS
LCBzIF0gKTsKLSAgICAvLyBIYW5kbGUgdGhlIGdsb2JhbCBBSkFYIGNvdW50ZXIKLSAgICBpZiAo
ICEoIC0talF1ZXJ5LmFjdGl2ZSApICkgewotICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyKCJhamF4
U3RvcCIpOwotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGpxWEhSOwotICAgIH0s
Ci0KLSAgICBnZXRTY3JpcHQ6IGZ1bmN0aW9uKCB1cmwsIGNhbGxiYWNrICkgewotICAgIHJldHVy
biBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssICJzY3JpcHQiICk7Ci0gICAg
fSwKLQotICAgIGdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrICkgewotICAg
IHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIGRhdGEsIGNhbGxiYWNrLCAianNvbiIgKTsKLSAgICB9
Ci19KTsKLQotLyogSGFuZGxlcyByZXNwb25zZXMgdG8gYW4gYWpheCByZXF1ZXN0OgotICogLSBz
ZXRzIGFsbCByZXNwb25zZVhYWCBmaWVsZHMgYWNjb3JkaW5nbHkKLSAqIC0gZmluZHMgdGhlIHJp
Z2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQg
ZGF0YVR5cGUpCi0gKiAtIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2UKLSAqLwot
ZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHsKLSAg
ICB2YXIgZmlyc3REYXRhVHlwZSwgY3QsIGZpbmFsRGF0YVR5cGUsIHR5cGUsCi0gICAgY29udGVu
dHMgPSBzLmNvbnRlbnRzLAotICAgIGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLAotICAgIHJlc3Bv
bnNlRmllbGRzID0gcy5yZXNwb25zZUZpZWxkczsKLQotICAgIC8vIEZpbGwgcmVzcG9uc2VYWFgg
ZmllbGRzCi0gICAgZm9yICggdHlwZSBpbiByZXNwb25zZUZpZWxkcyApIHsKLSAgICBpZiAoIHR5
cGUgaW4gcmVzcG9uc2VzICkgewotICAgIGpxWEhSWyByZXNwb25zZUZpZWxkc1t0eXBlXSBdID0g
cmVzcG9uc2VzWyB0eXBlIF07Ci0gICAgfQotICAgIH0KLQotICAgIC8vIFJlbW92ZSBhdXRvIGRh
dGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzCi0gICAgd2hpbGUoIGRh
dGFUeXBlc1sgMCBdID09PSAiKiIgKSB7Ci0gICAgZGF0YVR5cGVzLnNoaWZ0KCk7Ci0gICAgaWYg
KCBjdCA9PT0gdW5kZWZpbmVkICkgewotICAgIGN0ID0gcy5taW1lVHlwZSB8fCBqcVhIUi5nZXRS
ZXNwb25zZUhlYWRlcigiQ29udGVudC1UeXBlIik7Ci0gICAgfQotICAgIH0KLQotICAgIC8vIENo
ZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGtub3duIGNvbnRlbnQtdHlwZQotICAgIGlmICgg
Y3QgKSB7Ci0gICAgZm9yICggdHlwZSBpbiBjb250ZW50cyApIHsKLSAgICBpZiAoIGNvbnRlbnRz
WyB0eXBlIF0gJiYgY29udGVudHNbIHR5cGUgXS50ZXN0KCBjdCApICkgewotICAgIGRhdGFUeXBl
cy51bnNoaWZ0KCB0eXBlICk7Ci0gICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAg
ICAvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQg
ZGF0YVR5cGUKLSAgICBpZiAoIGRhdGFUeXBlc1sgMCBdIGluIHJlc3BvbnNlcyApIHsKLSAgICBm
aW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAwIF07Ci0gICAgfSBlbHNlIHsKLSAgICAvLyBUcnkg
Y29udmVydGlibGUgZGF0YVR5cGVzCi0gICAgZm9yICggdHlwZSBpbiByZXNwb25zZXMgKSB7Ci0g
ICAgaWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgIiAiICsgZGF0
YVR5cGVzWzBdIF0gKSB7Ci0gICAgZmluYWxEYXRhVHlwZSA9IHR5cGU7Ci0gICAgYnJlYWs7Ci0g
ICAgfQotICAgIGlmICggIWZpcnN0RGF0YVR5cGUgKSB7Ci0gICAgZmlyc3REYXRhVHlwZSA9IHR5
cGU7Ci0gICAgfQotICAgIH0KLSAgICAvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmUKLSAgICBmaW5h
bERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFUeXBlOwotICAgIH0KLQotICAg
IC8vIElmIHdlIGZvdW5kIGEgZGF0YVR5cGUKLSAgICAvLyBXZSBhZGQgdGhlIGRhdGFUeXBlIHRv
IHRoZSBsaXN0IGlmIG5lZWRlZAotICAgIC8vIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcg
cmVzcG9uc2UKLSAgICBpZiAoIGZpbmFsRGF0YVR5cGUgKSB7Ci0gICAgaWYgKCBmaW5hbERhdGFU
eXBlICE9PSBkYXRhVHlwZXNbIDAgXSApIHsKLSAgICBkYXRhVHlwZXMudW5zaGlmdCggZmluYWxE
YXRhVHlwZSApOwotICAgIH0KLSAgICByZXR1cm4gcmVzcG9uc2VzWyBmaW5hbERhdGFUeXBlIF07
Ci0gICAgfQotfQotCi0vLyBDaGFpbiBjb252ZXJzaW9ucyBnaXZlbiB0aGUgcmVxdWVzdCBhbmQg
dGhlIG9yaWdpbmFsIHJlc3BvbnNlCi1mdW5jdGlvbiBhamF4Q29udmVydCggcywgcmVzcG9uc2Ug
KSB7Ci0gICAgdmFyIGNvbnYyLCBjdXJyZW50LCBjb252LCB0bXAsCi0gICAgY29udmVydGVycyA9
IHt9LAotICAgIGkgPSAwLAotICAgIC8vIFdvcmsgd2l0aCBhIGNvcHkgb2YgZGF0YVR5cGVzIGlu
IGNhc2Ugd2UgbmVlZCB0byBtb2RpZnkgaXQgZm9yIGNvbnZlcnNpb24KLSAgICBkYXRhVHlwZXMg
PSBzLmRhdGFUeXBlcy5zbGljZSgpLAotICAgIHByZXYgPSBkYXRhVHlwZXNbIDAgXTsKLQotICAg
IC8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkCi0gICAgaWYgKCBzLmRhdGFGaWx0
ZXIgKSB7Ci0gICAgcmVzcG9uc2UgPSBzLmRhdGFGaWx0ZXIoIHJlc3BvbnNlLCBzLmRhdGFUeXBl
ICk7Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRlIGNvbnZlcnRlcnMgbWFwIHdpdGggbG93ZXJjYXNl
ZCBrZXlzCi0gICAgaWYgKCBkYXRhVHlwZXNbIDEgXSApIHsKLSAgICBmb3IgKCBjb252IGluIHMu
Y29udmVydGVycyApIHsKLSAgICBjb252ZXJ0ZXJzWyBjb252LnRvTG93ZXJDYXNlKCkgXSA9IHMu
Y29udmVydGVyc1sgY29udiBdOwotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDb252ZXJ0IHRvIGVh
Y2ggc2VxdWVudGlhbCBkYXRhVHlwZSwgdG9sZXJhdGluZyBsaXN0IG1vZGlmaWNhdGlvbgotICAg
IGZvciAoIDsgKGN1cnJlbnQgPSBkYXRhVHlwZXNbKytpXSk7ICkgewotCi0gICAgLy8gVGhlcmUn
cyBvbmx5IHdvcmsgdG8gZG8gaWYgY3VycmVudCBkYXRhVHlwZSBpcyBub24tYXV0bwotICAgIGlm
ICggY3VycmVudCAhPT0gIioiICkgewotCi0gICAgLy8gQ29udmVydCByZXNwb25zZSBpZiBwcmV2
IGRhdGFUeXBlIGlzIG5vbi1hdXRvIGFuZCBkaWZmZXJzIGZyb20gY3VycmVudAotICAgIGlmICgg
cHJldiAhPT0gIioiICYmIHByZXYgIT09IGN1cnJlbnQgKSB7Ci0KLSAgICAvLyBTZWVrIGEgZGly
ZWN0IGNvbnZlcnRlcgotICAgIGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgIiAiICsgY3VycmVu
dCBdIHx8IGNvbnZlcnRlcnNbICIqICIgKyBjdXJyZW50IF07Ci0KLSAgICAvLyBJZiBub25lIGZv
dW5kLCBzZWVrIGEgcGFpcgotICAgIGlmICggIWNvbnYgKSB7Ci0gICAgZm9yICggY29udjIgaW4g
Y29udmVydGVycyApIHsKLQotICAgIC8vIElmIGNvbnYyIG91dHB1dHMgY3VycmVudAotICAgIHRt
cCA9IGNvbnYyLnNwbGl0KCIgIik7Ci0gICAgaWYgKCB0bXBbIDEgXSA9PT0gY3VycmVudCApIHsK
LQotICAgIC8vIElmIHByZXYgY2FuIGJlIGNvbnZlcnRlZCB0byBhY2NlcHRlZCBpbnB1dAotICAg
IGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgIiAiICsgdG1wWyAwIF0gXSB8fAotICAgIGNvbnZl
cnRlcnNbICIqICIgKyB0bXBbIDAgXSBdOwotICAgIGlmICggY29udiApIHsKLSAgICAvLyBDb25k
ZW5zZSBlcXVpdmFsZW5jZSBjb252ZXJ0ZXJzCi0gICAgaWYgKCBjb252ID09PSB0cnVlICkgewot
ICAgIGNvbnYgPSBjb252ZXJ0ZXJzWyBjb252MiBdOwotCi0gICAgLy8gT3RoZXJ3aXNlLCBpbnNl
cnQgdGhlIGludGVybWVkaWF0ZSBkYXRhVHlwZQotICAgIH0gZWxzZSBpZiAoIGNvbnZlcnRlcnNb
IGNvbnYyIF0gIT09IHRydWUgKSB7Ci0gICAgY3VycmVudCA9IHRtcFsgMCBdOwotICAgIGRhdGFU
eXBlcy5zcGxpY2UoIGktLSwgMCwgY3VycmVudCApOwotICAgIH0KLQotICAgIGJyZWFrOwotICAg
IH0KLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIC8vIEFwcGx5IGNvbnZlcnRlciAoaWYgbm90
IGFuIGVxdWl2YWxlbmNlKQotICAgIGlmICggY29udiAhPT0gdHJ1ZSApIHsKLQotICAgIC8vIFVu
bGVzcyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW0K
LSAgICBpZiAoIGNvbnYgJiYgc1sidGhyb3dzIl0gKSB7Ci0gICAgcmVzcG9uc2UgPSBjb252KCBy
ZXNwb25zZSApOwotICAgIH0gZWxzZSB7Ci0gICAgdHJ5IHsKLSAgICByZXNwb25zZSA9IGNvbnYo
IHJlc3BvbnNlICk7Ci0gICAgfSBjYXRjaCAoIGUgKSB7Ci0gICAgcmV0dXJuIHsgc3RhdGU6ICJw
YXJzZXJlcnJvciIsIGVycm9yOiBjb252ID8gZSA6ICJObyBjb252ZXJzaW9uIGZyb20gIiArIHBy
ZXYgKyAiIHRvICIgKyBjdXJyZW50IH07Ci0gICAgfQotICAgIH0KLSAgICB9Ci0gICAgfQotCi0g
ICAgLy8gVXBkYXRlIHByZXYgZm9yIG5leHQgaXRlcmF0aW9uCi0gICAgcHJldiA9IGN1cnJlbnQ7
Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiB7IHN0YXRlOiAic3VjY2VzcyIsIGRhdGE6IHJl
c3BvbnNlIH07Ci19Ci0vLyBJbnN0YWxsIHNjcmlwdCBkYXRhVHlwZQotalF1ZXJ5LmFqYXhTZXR1
cCh7Ci0gICAgYWNjZXB0czogewotICAgIHNjcmlwdDogInRleHQvamF2YXNjcmlwdCwgYXBwbGlj
YXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1l
Y21hc2NyaXB0IgotICAgIH0sCi0gICAgY29udGVudHM6IHsKLSAgICBzY3JpcHQ6IC8oPzpqYXZh
fGVjbWEpc2NyaXB0LwotICAgIH0sCi0gICAgY29udmVydGVyczogewotICAgICJ0ZXh0IHNjcmlw
dCI6IGZ1bmN0aW9uKCB0ZXh0ICkgewotICAgIGpRdWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7Ci0g
ICAgcmV0dXJuIHRleHQ7Ci0gICAgfQotICAgIH0KLX0pOwotCi0vLyBIYW5kbGUgY2FjaGUncyBz
cGVjaWFsIGNhc2UgYW5kIGdsb2JhbAotalF1ZXJ5LmFqYXhQcmVmaWx0ZXIoICJzY3JpcHQiLCBm
dW5jdGlvbiggcyApIHsKLSAgICBpZiAoIHMuY2FjaGUgPT09IHVuZGVmaW5lZCApIHsKLSAgICBz
LmNhY2hlID0gZmFsc2U7Ci0gICAgfQotICAgIGlmICggcy5jcm9zc0RvbWFpbiApIHsKLSAgICBz
LnR5cGUgPSAiR0VUIjsKLSAgICBzLmdsb2JhbCA9IGZhbHNlOwotICAgIH0KLX0pOwotCi0vLyBC
aW5kIHNjcmlwdCB0YWcgaGFjayB0cmFuc3BvcnQKLWpRdWVyeS5hamF4VHJhbnNwb3J0KCAic2Ny
aXB0IiwgZnVuY3Rpb24ocykgewotCi0gICAgLy8gVGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3
aXRoIGNyb3NzIGRvbWFpbiByZXF1ZXN0cwotICAgIGlmICggcy5jcm9zc0RvbWFpbiApIHsKLQot
ICAgIHZhciBzY3JpcHQsCi0gICAgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgalF1ZXJ5KCJoZWFk
IilbMF0gfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OwotCi0gICAgcmV0dXJuIHsKLQotICAg
IHNlbmQ6IGZ1bmN0aW9uKCBfLCBjYWxsYmFjayApIHsKLQotICAgIHNjcmlwdCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOwotCi0gICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTsKLQot
ICAgIGlmICggcy5zY3JpcHRDaGFyc2V0ICkgewotICAgIHNjcmlwdC5jaGFyc2V0ID0gcy5zY3Jp
cHRDaGFyc2V0OwotICAgIH0KLQotICAgIHNjcmlwdC5zcmMgPSBzLnVybDsKLQotICAgIC8vIEF0
dGFjaCBoYW5kbGVycyBmb3IgYWxsIGJyb3dzZXJzCi0gICAgc2NyaXB0Lm9ubG9hZCA9IHNjcmlw
dC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiggXywgaXNBYm9ydCApIHsKLQotICAgIGlm
ICggaXNBYm9ydCB8fCAhc2NyaXB0LnJlYWR5U3RhdGUgfHwgL2xvYWRlZHxjb21wbGV0ZS8udGVz
dCggc2NyaXB0LnJlYWR5U3RhdGUgKSApIHsKLQotICAgIC8vIEhhbmRsZSBtZW1vcnkgbGVhayBp
biBJRQotICAgIHNjcmlwdC5vbmxvYWQgPSBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVs
bDsKLQotICAgIC8vIFJlbW92ZSB0aGUgc2NyaXB0Ci0gICAgaWYgKCBzY3JpcHQucGFyZW50Tm9k
ZSApIHsKLSAgICBzY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggc2NyaXB0ICk7Ci0gICAg
fQotCi0gICAgLy8gRGVyZWZlcmVuY2UgdGhlIHNjcmlwdAotICAgIHNjcmlwdCA9IG51bGw7Ci0K
LSAgICAvLyBDYWxsYmFjayBpZiBub3QgYWJvcnQKLSAgICBpZiAoICFpc0Fib3J0ICkgewotICAg
IGNhbGxiYWNrKCAyMDAsICJzdWNjZXNzIiApOwotICAgIH0KLSAgICB9Ci0gICAgfTsKLQotICAg
IC8vIENpcmN1bXZlbnQgSUU2IGJ1Z3Mgd2l0aCBiYXNlIGVsZW1lbnRzICgjMjcwOSBhbmQgIzQz
NzgpIGJ5IHByZXBlbmRpbmcKLSAgICAvLyBVc2UgbmF0aXZlIERPTSBtYW5pcHVsYXRpb24gdG8g
YXZvaWQgb3VyIGRvbU1hbmlwIEFKQVggdHJpY2tlcnkKLSAgICBoZWFkLmluc2VydEJlZm9yZSgg
c2NyaXB0LCBoZWFkLmZpcnN0Q2hpbGQgKTsKLSAgICB9LAotCi0gICAgYWJvcnQ6IGZ1bmN0aW9u
KCkgewotICAgIGlmICggc2NyaXB0ICkgewotICAgIHNjcmlwdC5vbmxvYWQoIHVuZGVmaW5lZCwg
dHJ1ZSApOwotICAgIH0KLSAgICB9Ci0gICAgfTsKLSAgICB9Ci19KTsKLXZhciBvbGRDYWxsYmFj
a3MgPSBbXSwKLSAgICByanNvbnAgPSAvKD0pXD8oPz0mfCQpfFw/XD8vOwotCi0vLyBEZWZhdWx0
IGpzb25wIHNldHRpbmdzCi1qUXVlcnkuYWpheFNldHVwKHsKLSAgICBqc29ucDogImNhbGxiYWNr
IiwKLSAgICBqc29ucENhbGxiYWNrOiBmdW5jdGlvbigpIHsKLSAgICB2YXIgY2FsbGJhY2sgPSBv
bGRDYWxsYmFja3MucG9wKCkgfHwgKCBqUXVlcnkuZXhwYW5kbyArICJfIiArICggYWpheF9ub25j
ZSsrICkgKTsKLSAgICB0aGlzWyBjYWxsYmFjayBdID0gdHJ1ZTsKLSAgICByZXR1cm4gY2FsbGJh
Y2s7Ci0gICAgfQotfSk7Ci0KLS8vIERldGVjdCwgbm9ybWFsaXplIG9wdGlvbnMgYW5kIGluc3Rh
bGwgY2FsbGJhY2tzIGZvciBqc29ucCByZXF1ZXN0cwotalF1ZXJ5LmFqYXhQcmVmaWx0ZXIoICJq
c29uIGpzb25wIiwgZnVuY3Rpb24oIHMsIG9yaWdpbmFsU2V0dGluZ3MsIGpxWEhSICkgewotCi0g
ICAgdmFyIGNhbGxiYWNrTmFtZSwgb3ZlcndyaXR0ZW4sIHJlc3BvbnNlQ29udGFpbmVyLAotICAg
IGpzb25Qcm9wID0gcy5qc29ucCAhPT0gZmFsc2UgJiYgKCByanNvbnAudGVzdCggcy51cmwgKSA/
Ci0gICAgInVybCIgOgotICAgIHR5cGVvZiBzLmRhdGEgPT09ICJzdHJpbmciICYmICEoIHMuY29u
dGVudFR5cGUgfHwgIiIgKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29k
ZWQiKSAmJiByanNvbnAudGVzdCggcy5kYXRhICkgJiYgImRhdGEiCi0gICAgKTsKLQotICAgIC8v
IEhhbmRsZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyAianNvbnAiIG9yIHdlIGhhdmUg
YSBwYXJhbWV0ZXIgdG8gc2V0Ci0gICAgaWYgKCBqc29uUHJvcCB8fCBzLmRhdGFUeXBlc1sgMCBd
ID09PSAianNvbnAiICkgewotCi0gICAgLy8gR2V0IGNhbGxiYWNrIG5hbWUsIHJlbWVtYmVyaW5n
IHByZWV4aXN0aW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpdAotICAgIGNhbGxiYWNrTmFtZSA9
IHMuanNvbnBDYWxsYmFjayA9IGpRdWVyeS5pc0Z1bmN0aW9uKCBzLmpzb25wQ2FsbGJhY2sgKSA/
Ci0gICAgcy5qc29ucENhbGxiYWNrKCkgOgotICAgIHMuanNvbnBDYWxsYmFjazsKLQotICAgIC8v
IEluc2VydCBjYWxsYmFjayBpbnRvIHVybCBvciBmb3JtIGRhdGEKLSAgICBpZiAoIGpzb25Qcm9w
ICkgewotICAgIHNbIGpzb25Qcm9wIF0gPSBzWyBqc29uUHJvcCBdLnJlcGxhY2UoIHJqc29ucCwg
IiQxIiArIGNhbGxiYWNrTmFtZSApOwotICAgIH0gZWxzZSBpZiAoIHMuanNvbnAgIT09IGZhbHNl
ICkgewotICAgIHMudXJsICs9ICggYWpheF9ycXVlcnkudGVzdCggcy51cmwgKSA/ICImIiA6ICI/
IiApICsgcy5qc29ucCArICI9IiArIGNhbGxiYWNrTmFtZTsKLSAgICB9Ci0KLSAgICAvLyBVc2Ug
ZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uCi0g
ICAgcy5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdID0gZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCAh
cmVzcG9uc2VDb250YWluZXIgKSB7Ci0gICAgalF1ZXJ5LmVycm9yKCBjYWxsYmFja05hbWUgKyAi
IHdhcyBub3QgY2FsbGVkIiApOwotICAgIH0KLSAgICByZXR1cm4gcmVzcG9uc2VDb250YWluZXJb
IDAgXTsKLSAgICB9OwotCi0gICAgLy8gZm9yY2UganNvbiBkYXRhVHlwZQotICAgIHMuZGF0YVR5
cGVzWyAwIF0gPSAianNvbiI7Ci0KLSAgICAvLyBJbnN0YWxsIGNhbGxiYWNrCi0gICAgb3Zlcndy
aXR0ZW4gPSB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdOwotICAgIHdpbmRvd1sgY2FsbGJhY2tOYW1l
IF0gPSBmdW5jdGlvbigpIHsKLSAgICByZXNwb25zZUNvbnRhaW5lciA9IGFyZ3VtZW50czsKLSAg
ICB9OwotCi0gICAgLy8gQ2xlYW4tdXAgZnVuY3Rpb24gKGZpcmVzIGFmdGVyIGNvbnZlcnRlcnMp
Ci0gICAganFYSFIuYWx3YXlzKGZ1bmN0aW9uKCkgewotICAgIC8vIFJlc3RvcmUgcHJlZXhpc3Rp
bmcgdmFsdWUKLSAgICB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gb3ZlcndyaXR0ZW47Ci0KLSAg
ICAvLyBTYXZlIGJhY2sgYXMgZnJlZQotICAgIGlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7Ci0g
ICAgLy8gbWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0
aGluZ3MgYXJvdW5kCi0gICAgcy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxTZXR0aW5ncy5qc29u
cENhbGxiYWNrOwotCi0gICAgLy8gc2F2ZSB0aGUgY2FsbGJhY2sgbmFtZSBmb3IgZnV0dXJlIHVz
ZQotICAgIG9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTsKLSAgICB9Ci0KLSAgICAv
LyBDYWxsIGlmIGl0IHdhcyBhIGZ1bmN0aW9uIGFuZCB3ZSBoYXZlIGEgcmVzcG9uc2UKLSAgICBp
ZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBvdmVyd3JpdHRlbiAp
ICkgewotICAgIG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7Ci0gICAgfQot
Ci0gICAgcmVzcG9uc2VDb250YWluZXIgPSBvdmVyd3JpdHRlbiA9IHVuZGVmaW5lZDsKLSAgICB9
KTsKLQotICAgIC8vIERlbGVnYXRlIHRvIHNjcmlwdAotICAgIHJldHVybiAic2NyaXB0IjsKLSAg
ICB9Ci19KTsKLXZhciB4aHJDYWxsYmFja3MsIHhoclN1cHBvcnRlZCwKLSAgICB4aHJJZCA9IDAs
Ci0gICAgLy8gIzUyODA6IEludGVybmV0IEV4cGxvcmVyIHdpbGwga2VlcCBjb25uZWN0aW9ucyBh
bGl2ZSBpZiB3ZSBkb24ndCBhYm9ydCBvbiB1bmxvYWQKLSAgICB4aHJPblVubG9hZEFib3J0ID0g
d2luZG93LkFjdGl2ZVhPYmplY3QgJiYgZnVuY3Rpb24oKSB7Ci0gICAgLy8gQWJvcnQgYWxsIHBl
bmRpbmcgcmVxdWVzdHMKLSAgICB2YXIga2V5OwotICAgIGZvciAoIGtleSBpbiB4aHJDYWxsYmFj
a3MgKSB7Ci0gICAgeGhyQ2FsbGJhY2tzWyBrZXkgXSggdW5kZWZpbmVkLCB0cnVlICk7Ci0gICAg
fQotICAgIH07Ci0KLS8vIEZ1bmN0aW9ucyB0byBjcmVhdGUgeGhycwotZnVuY3Rpb24gY3JlYXRl
U3RhbmRhcmRYSFIoKSB7Ci0gICAgdHJ5IHsKLSAgICByZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRw
UmVxdWVzdCgpOwotICAgIH0gY2F0Y2goIGUgKSB7fQotfQotCi1mdW5jdGlvbiBjcmVhdGVBY3Rp
dmVYSFIoKSB7Ci0gICAgdHJ5IHsKLSAgICByZXR1cm4gbmV3IHdpbmRvdy5BY3RpdmVYT2JqZWN0
KCJNaWNyb3NvZnQuWE1MSFRUUCIpOwotICAgIH0gY2F0Y2goIGUgKSB7fQotfQotCi0vLyBDcmVh
dGUgdGhlIHJlcXVlc3Qgb2JqZWN0Ci0vLyAoVGhpcyBpcyBzdGlsbCBhdHRhY2hlZCB0byBhamF4
U2V0dGluZ3MgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpCi1qUXVlcnkuYWpheFNldHRpbmdz
LnhociA9IHdpbmRvdy5BY3RpdmVYT2JqZWN0ID8KLSAgICAvKiBNaWNyb3NvZnQgZmFpbGVkIHRv
IHByb3Blcmx5Ci0gICAgICogaW1wbGVtZW50IHRoZSBYTUxIdHRwUmVxdWVzdCBpbiBJRTcgKGNh
bid0IHJlcXVlc3QgbG9jYWwgZmlsZXMpLAotICAgICAqIHNvIHdlIHVzZSB0aGUgQWN0aXZlWE9i
amVjdCB3aGVuIGl0IGlzIGF2YWlsYWJsZQotICAgICAqIEFkZGl0aW9uYWxseSBYTUxIdHRwUmVx
dWVzdCBjYW4gYmUgZGlzYWJsZWQgaW4gSUU3L0lFOCBzbwotICAgICAqIHdlIG5lZWQgYSBmYWxs
YmFjay4KLSAgICAgKi8KLSAgICBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gIXRoaXMuaXNMb2Nh
bCAmJiBjcmVhdGVTdGFuZGFyZFhIUigpIHx8IGNyZWF0ZUFjdGl2ZVhIUigpOwotICAgIH0gOgot
ICAgIC8vIEZvciBhbGwgb3RoZXIgYnJvd3NlcnMsIHVzZSB0aGUgc3RhbmRhcmQgWE1MSHR0cFJl
cXVlc3Qgb2JqZWN0Ci0gICAgY3JlYXRlU3RhbmRhcmRYSFI7Ci0KLS8vIERldGVybWluZSBzdXBw
b3J0IHByb3BlcnRpZXMKLXhoclN1cHBvcnRlZCA9IGpRdWVyeS5hamF4U2V0dGluZ3MueGhyKCk7
Ci1qUXVlcnkuc3VwcG9ydC5jb3JzID0gISF4aHJTdXBwb3J0ZWQgJiYgKCAid2l0aENyZWRlbnRp
YWxzIiBpbiB4aHJTdXBwb3J0ZWQgKTsKLXhoclN1cHBvcnRlZCA9IGpRdWVyeS5zdXBwb3J0LmFq
YXggPSAhIXhoclN1cHBvcnRlZDsKLQotLy8gQ3JlYXRlIHRyYW5zcG9ydCBpZiB0aGUgYnJvd3Nl
ciBjYW4gcHJvdmlkZSBhbiB4aHIKLWlmICggeGhyU3VwcG9ydGVkICkgewotCi0gICAgalF1ZXJ5
LmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24oIHMgKSB7Ci0gICAgLy8gQ3Jvc3MgZG9tYWluIG9ubHkg
YWxsb3dlZCBpZiBzdXBwb3J0ZWQgdGhyb3VnaCBYTUxIdHRwUmVxdWVzdAotICAgIGlmICggIXMu
Y3Jvc3NEb21haW4gfHwgalF1ZXJ5LnN1cHBvcnQuY29ycyApIHsKLQotICAgIHZhciBjYWxsYmFj
azsKLQotICAgIHJldHVybiB7Ci0gICAgc2VuZDogZnVuY3Rpb24oIGhlYWRlcnMsIGNvbXBsZXRl
ICkgewotCi0gICAgLy8gR2V0IGEgbmV3IHhocgotICAgIHZhciBoYW5kbGUsIGksCi0gICAgeGhy
ID0gcy54aHIoKTsKLQotICAgIC8vIE9wZW4gdGhlIHNvY2tldAotICAgIC8vIFBhc3NpbmcgbnVs
bCB1c2VybmFtZSwgZ2VuZXJhdGVzIGEgbG9naW4gcG9wdXAgb24gT3BlcmEgKCMyODY1KQotICAg
IGlmICggcy51c2VybmFtZSApIHsKLSAgICB4aHIub3Blbiggcy50eXBlLCBzLnVybCwgcy5hc3lu
Yywgcy51c2VybmFtZSwgcy5wYXNzd29yZCApOwotICAgIH0gZWxzZSB7Ci0gICAgeGhyLm9wZW4o
IHMudHlwZSwgcy51cmwsIHMuYXN5bmMgKTsKLSAgICB9Ci0KLSAgICAvLyBBcHBseSBjdXN0b20g
ZmllbGRzIGlmIHByb3ZpZGVkCi0gICAgaWYgKCBzLnhockZpZWxkcyApIHsKLSAgICBmb3IgKCBp
IGluIHMueGhyRmllbGRzICkgewotICAgIHhoclsgaSBdID0gcy54aHJGaWVsZHNbIGkgXTsKLSAg
ICB9Ci0gICAgfQotCi0gICAgLy8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZAotICAgIGlm
ICggcy5taW1lVHlwZSAmJiB4aHIub3ZlcnJpZGVNaW1lVHlwZSApIHsKLSAgICB4aHIub3ZlcnJp
ZGVNaW1lVHlwZSggcy5taW1lVHlwZSApOwotICAgIH0KLQotICAgIC8vIFgtUmVxdWVzdGVkLVdp
dGggaGVhZGVyCi0gICAgLy8gRm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cywgc2VlaW5nIGFzIGNv
bmRpdGlvbnMgZm9yIGEgcHJlZmxpZ2h0IGFyZQotICAgIC8vIGFraW4gdG8gYSBqaWdzYXcgcHV6
emxlLCB3ZSBzaW1wbHkgbmV2ZXIgc2V0IGl0IHRvIGJlIHN1cmUuCi0gICAgLy8gKGl0IGNhbiBh
bHdheXMgYmUgc2V0IG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgb3IgZXZlbiB1c2luZyBhamF4U2V0
dXApCi0gICAgLy8gRm9yIHNhbWUtZG9tYWluIHJlcXVlc3RzLCB3b24ndCBjaGFuZ2UgaGVhZGVy
IGlmIGFscmVhZHkgcHJvdmlkZWQuCi0gICAgaWYgKCAhcy5jcm9zc0RvbWFpbiAmJiAhaGVhZGVy
c1siWC1SZXF1ZXN0ZWQtV2l0aCJdICkgewotICAgIGhlYWRlcnNbIlgtUmVxdWVzdGVkLVdpdGgi
XSA9ICJYTUxIdHRwUmVxdWVzdCI7Ci0gICAgfQotCi0gICAgLy8gTmVlZCBhbiBleHRyYSB0cnkv
Y2F0Y2ggZm9yIGNyb3NzIGRvbWFpbiByZXF1ZXN0cyBpbiBGaXJlZm94IDMKLSAgICB0cnkgewot
ICAgIGZvciAoIGkgaW4gaGVhZGVycyApIHsKLSAgICB4aHIuc2V0UmVxdWVzdEhlYWRlciggaSwg
aGVhZGVyc1sgaSBdICk7Ci0gICAgfQotICAgIH0gY2F0Y2goIGVyciApIHt9Ci0KLSAgICAvLyBE
byBzZW5kIHRoZSByZXF1ZXN0Ci0gICAgLy8gVGhpcyBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uIHdo
aWNoIGlzIGFjdHVhbGx5Ci0gICAgLy8gaGFuZGxlZCBpbiBqUXVlcnkuYWpheCAoc28gbm8gdHJ5
L2NhdGNoIGhlcmUpCi0gICAgeGhyLnNlbmQoICggcy5oYXNDb250ZW50ICYmIHMuZGF0YSApIHx8
IG51bGwgKTsKLQotICAgIC8vIExpc3RlbmVyCi0gICAgY2FsbGJhY2sgPSBmdW5jdGlvbiggXywg
aXNBYm9ydCApIHsKLSAgICB2YXIgc3RhdHVzLCByZXNwb25zZUhlYWRlcnMsIHN0YXR1c1RleHQs
IHJlc3BvbnNlczsKLQotICAgIC8vIEZpcmVmb3ggdGhyb3dzIGV4Y2VwdGlvbnMgd2hlbiBhY2Nl
c3NpbmcgcHJvcGVydGllcwotICAgIC8vIG9mIGFuIHhociB3aGVuIGEgbmV0d29yayBlcnJvciBv
Y2N1cnJlZAotICAgIC8vIGh0dHA6Ly9oZWxwZnVsLmtub2JzLWRpYWxzLmNvbS9pbmRleC5waHAv
Q29tcG9uZW50X3JldHVybmVkX2ZhaWx1cmVfY29kZTpfMHg4MDA0MDExMV8oTlNfRVJST1JfTk9U
X0FWQUlMQUJMRSkKLSAgICB0cnkgewotCi0gICAgLy8gV2FzIG5ldmVyIGNhbGxlZCBhbmQgaXMg
YWJvcnRlZCBvciBjb21wbGV0ZQotICAgIGlmICggY2FsbGJhY2sgJiYgKCBpc0Fib3J0IHx8IHho
ci5yZWFkeVN0YXRlID09PSA0ICkgKSB7Ci0KLSAgICAvLyBPbmx5IGNhbGxlZCBvbmNlCi0gICAg
Y2FsbGJhY2sgPSB1bmRlZmluZWQ7Ci0KLSAgICAvLyBEbyBub3Qga2VlcCBhcyBhY3RpdmUgYW55
bW9yZQotICAgIGlmICggaGFuZGxlICkgewotICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBq
UXVlcnkubm9vcDsKLSAgICBpZiAoIHhock9uVW5sb2FkQWJvcnQgKSB7Ci0gICAgZGVsZXRlIHho
ckNhbGxiYWNrc1sgaGFuZGxlIF07Ci0gICAgfQotICAgIH0KLQotICAgIC8vIElmIGl0J3MgYW4g
YWJvcnQKLSAgICBpZiAoIGlzQWJvcnQgKSB7Ci0gICAgLy8gQWJvcnQgaXQgbWFudWFsbHkgaWYg
bmVlZGVkCi0gICAgaWYgKCB4aHIucmVhZHlTdGF0ZSAhPT0gNCApIHsKLSAgICB4aHIuYWJvcnQo
KTsKLSAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICByZXNwb25zZXMgPSB7fTsKLSAgICBzdGF0dXMg
PSB4aHIuc3RhdHVzOwotICAgIHJlc3BvbnNlSGVhZGVycyA9IHhoci5nZXRBbGxSZXNwb25zZUhl
YWRlcnMoKTsKLQotICAgIC8vIFdoZW4gcmVxdWVzdGluZyBiaW5hcnkgZGF0YSwgSUU2LTkgd2ls
bCB0aHJvdyBhbiBleGNlcHRpb24KLSAgICAvLyBvbiBhbnkgYXR0ZW1wdCB0byBhY2Nlc3MgcmVz
cG9uc2VUZXh0ICgjMTE0MjYpCi0gICAgaWYgKCB0eXBlb2YgeGhyLnJlc3BvbnNlVGV4dCA9PT0g
InN0cmluZyIgKSB7Ci0gICAgcmVzcG9uc2VzLnRleHQgPSB4aHIucmVzcG9uc2VUZXh0OwotICAg
IH0KLQotICAgIC8vIEZpcmVmb3ggdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGVuIGFjY2Vzc2luZwot
ICAgIC8vIHN0YXR1c1RleHQgZm9yIGZhdWx0eSBjcm9zcy1kb21haW4gcmVxdWVzdHMKLSAgICB0
cnkgewotICAgIHN0YXR1c1RleHQgPSB4aHIuc3RhdHVzVGV4dDsKLSAgICB9IGNhdGNoKCBlICkg
ewotICAgIC8vIFdlIG5vcm1hbGl6ZSB3aXRoIFdlYmtpdCBnaXZpbmcgYW4gZW1wdHkgc3RhdHVz
VGV4dAotICAgIHN0YXR1c1RleHQgPSAiIjsKLSAgICB9Ci0KLSAgICAvLyBGaWx0ZXIgc3RhdHVz
IGZvciBub24gc3RhbmRhcmQgYmVoYXZpb3JzCi0KLSAgICAvLyBJZiB0aGUgcmVxdWVzdCBpcyBs
b2NhbCBhbmQgd2UgaGF2ZSBkYXRhOiBhc3N1bWUgYSBzdWNjZXNzCi0gICAgLy8gKHN1Y2Nlc3Mg
d2l0aCBubyBkYXRhIHdvbid0IGdldCBub3RpZmllZCwgdGhhdCdzIHRoZSBiZXN0IHdlCi0gICAg
Ly8gY2FuIGRvIGdpdmVuIGN1cnJlbnQgaW1wbGVtZW50YXRpb25zKQotICAgIGlmICggIXN0YXR1
cyAmJiBzLmlzTG9jYWwgJiYgIXMuY3Jvc3NEb21haW4gKSB7Ci0gICAgc3RhdHVzID0gcmVzcG9u
c2VzLnRleHQgPyAyMDAgOiA0MDQ7Ci0gICAgLy8gSUUgLSAjMTQ1MDogc29tZXRpbWVzIHJldHVy
bnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDQKLSAgICB9IGVsc2UgaWYgKCBzdGF0dXMgPT09
IDEyMjMgKSB7Ci0gICAgc3RhdHVzID0gMjA0OwotICAgIH0KLSAgICB9Ci0gICAgfQotICAgIH0g
Y2F0Y2goIGZpcmVmb3hBY2Nlc3NFeGNlcHRpb24gKSB7Ci0gICAgaWYgKCAhaXNBYm9ydCApIHsK
LSAgICBjb21wbGV0ZSggLTEsIGZpcmVmb3hBY2Nlc3NFeGNlcHRpb24gKTsKLSAgICB9Ci0gICAg
fQotCi0gICAgLy8gQ2FsbCBjb21wbGV0ZSBpZiBuZWVkZWQKLSAgICBpZiAoIHJlc3BvbnNlcyAp
IHsKLSAgICBjb21wbGV0ZSggc3RhdHVzLCBzdGF0dXNUZXh0LCByZXNwb25zZXMsIHJlc3BvbnNl
SGVhZGVycyApOwotICAgIH0KLSAgICB9OwotCi0gICAgaWYgKCAhcy5hc3luYyApIHsKLSAgICAv
LyBpZiB3ZSdyZSBpbiBzeW5jIG1vZGUgd2UgZmlyZSB0aGUgY2FsbGJhY2sKLSAgICBjYWxsYmFj
aygpOwotICAgIH0gZWxzZSBpZiAoIHhoci5yZWFkeVN0YXRlID09PSA0ICkgewotICAgIC8vIChJ
RTYgJiBJRTcpIGlmIGl0J3MgaW4gY2FjaGUgYW5kIGhhcyBiZWVuCi0gICAgLy8gcmV0cmlldmVk
IGRpcmVjdGx5IHdlIG5lZWQgdG8gZmlyZSB0aGUgY2FsbGJhY2sKLSAgICBzZXRUaW1lb3V0KCBj
YWxsYmFjayApOwotICAgIH0gZWxzZSB7Ci0gICAgaGFuZGxlID0gKyt4aHJJZDsKLSAgICBpZiAo
IHhock9uVW5sb2FkQWJvcnQgKSB7Ci0gICAgLy8gQ3JlYXRlIHRoZSBhY3RpdmUgeGhycyBjYWxs
YmFja3MgbGlzdCBpZiBuZWVkZWQKLSAgICAvLyBhbmQgYXR0YWNoIHRoZSB1bmxvYWQgaGFuZGxl
cgotICAgIGlmICggIXhockNhbGxiYWNrcyApIHsKLSAgICB4aHJDYWxsYmFja3MgPSB7fTsKLSAg
ICBqUXVlcnkoIHdpbmRvdyApLnVubG9hZCggeGhyT25VbmxvYWRBYm9ydCApOwotICAgIH0KLSAg
ICAvLyBBZGQgdG8gbGlzdCBvZiBhY3RpdmUgeGhycyBjYWxsYmFja3MKLSAgICB4aHJDYWxsYmFj
a3NbIGhhbmRsZSBdID0gY2FsbGJhY2s7Ci0gICAgfQotICAgIHhoci5vbnJlYWR5c3RhdGVjaGFu
Z2UgPSBjYWxsYmFjazsKLSAgICB9Ci0gICAgfSwKLQotICAgIGFib3J0OiBmdW5jdGlvbigpIHsK
LSAgICBpZiAoIGNhbGxiYWNrICkgewotICAgIGNhbGxiYWNrKCB1bmRlZmluZWQsIHRydWUgKTsK
LSAgICB9Ci0gICAgfQotICAgIH07Ci0gICAgfQotICAgIH0pOwotfQotdmFyIGZ4Tm93LCB0aW1l
cklkLAotICAgIHJmeHR5cGVzID0gL14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLAotICAgIHJmeG51
bSA9IG5ldyBSZWdFeHAoICJeKD86KFsrLV0pPXwpKCIgKyBjb3JlX3BudW0gKyAiKShbYS16JV0q
KSQiLCAiaSIgKSwKLSAgICBycnVuID0gL3F1ZXVlSG9va3MkLywKLSAgICBhbmltYXRpb25QcmVm
aWx0ZXJzID0gWyBkZWZhdWx0UHJlZmlsdGVyIF0sCi0gICAgdHdlZW5lcnMgPSB7Ci0gICAgIioi
OiBbZnVuY3Rpb24oIHByb3AsIHZhbHVlICkgewotICAgIHZhciBlbmQsIHVuaXQsCi0gICAgdHdl
ZW4gPSB0aGlzLmNyZWF0ZVR3ZWVuKCBwcm9wLCB2YWx1ZSApLAotICAgIHBhcnRzID0gcmZ4bnVt
LmV4ZWMoIHZhbHVlICksCi0gICAgdGFyZ2V0ID0gdHdlZW4uY3VyKCksCi0gICAgc3RhcnQgPSAr
dGFyZ2V0IHx8IDAsCi0gICAgc2NhbGUgPSAxLAotICAgIG1heEl0ZXJhdGlvbnMgPSAyMDsKLQot
ICAgIGlmICggcGFydHMgKSB7Ci0gICAgZW5kID0gK3BhcnRzWzJdOwotICAgIHVuaXQgPSBwYXJ0
c1szXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/ICIiIDogInB4IiApOwotCi0gICAg
Ly8gV2UgbmVlZCB0byBjb21wdXRlIHN0YXJ0aW5nIHZhbHVlCi0gICAgaWYgKCB1bml0ICE9PSAi
cHgiICYmIHN0YXJ0ICkgewotICAgIC8vIEl0ZXJhdGl2ZWx5IGFwcHJveGltYXRlIGZyb20gYSBu
b256ZXJvIHN0YXJ0aW5nIHBvaW50Ci0gICAgLy8gUHJlZmVyIHRoZSBjdXJyZW50IHByb3BlcnR5
LCBiZWNhdXNlIHRoaXMgcHJvY2VzcyB3aWxsIGJlIHRyaXZpYWwgaWYgaXQgdXNlcyB0aGUgc2Ft
ZSB1bml0cwotICAgIC8vIEZhbGxiYWNrIHRvIGVuZCBvciBhIHNpbXBsZSBjb25zdGFudAotICAg
IHN0YXJ0ID0galF1ZXJ5LmNzcyggdHdlZW4uZWxlbSwgcHJvcCwgdHJ1ZSApIHx8IGVuZCB8fCAx
OwotCi0gICAgZG8gewotICAgIC8vIElmIHByZXZpb3VzIGl0ZXJhdGlvbiB6ZXJvZWQgb3V0LCBk
b3VibGUgdW50aWwgd2UgZ2V0ICpzb21ldGhpbmcqCi0gICAgLy8gVXNlIGEgc3RyaW5nIGZvciBk
b3VibGluZyBmYWN0b3Igc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHNlZSBzY2FsZSBhcyB1bmNo
YW5nZWQgYmVsb3cKLSAgICBzY2FsZSA9IHNjYWxlIHx8ICIuNSI7Ci0KLSAgICAvLyBBZGp1c3Qg
YW5kIGFwcGx5Ci0gICAgc3RhcnQgPSBzdGFydCAvIHNjYWxlOwotICAgIGpRdWVyeS5zdHlsZSgg
dHdlZW4uZWxlbSwgcHJvcCwgc3RhcnQgKyB1bml0ICk7Ci0KLSAgICAvLyBVcGRhdGUgc2NhbGUs
IHRvbGVyYXRpbmcgemVybyBvciBOYU4gZnJvbSB0d2Vlbi5jdXIoKQotICAgIC8vIEFuZCBicmVh
a2luZyB0aGUgbG9vcCBpZiBzY2FsZSBpcyB1bmNoYW5nZWQgb3IgcGVyZmVjdCwgb3IgaWYgd2Un
dmUganVzdCBoYWQgZW5vdWdoCi0gICAgfSB3aGlsZSAoIHNjYWxlICE9PSAoc2NhbGUgPSB0d2Vl
bi5jdXIoKSAvIHRhcmdldCkgJiYgc2NhbGUgIT09IDEgJiYgLS1tYXhJdGVyYXRpb25zICk7Ci0g
ICAgfQotCi0gICAgdHdlZW4udW5pdCA9IHVuaXQ7Ci0gICAgdHdlZW4uc3RhcnQgPSBzdGFydDsK
LSAgICAvLyBJZiBhICs9Ly09IHRva2VuIHdhcyBwcm92aWRlZCwgd2UncmUgZG9pbmcgYSByZWxh
dGl2ZSBhbmltYXRpb24KLSAgICB0d2Vlbi5lbmQgPSBwYXJ0c1sxXSA/IHN0YXJ0ICsgKCBwYXJ0
c1sxXSArIDEgKSAqIGVuZCA6IGVuZDsKLSAgICB9Ci0gICAgcmV0dXJuIHR3ZWVuOwotICAgIH1d
Ci0gICAgfTsKLQotLy8gQW5pbWF0aW9ucyBjcmVhdGVkIHN5bmNocm9ub3VzbHkgd2lsbCBydW4g
c3luY2hyb25vdXNseQotZnVuY3Rpb24gY3JlYXRlRnhOb3coKSB7Ci0gICAgc2V0VGltZW91dChm
dW5jdGlvbigpIHsKLSAgICBmeE5vdyA9IHVuZGVmaW5lZDsKLSAgICB9KTsKLSAgICByZXR1cm4g
KCBmeE5vdyA9IGpRdWVyeS5ub3coKSApOwotfQotCi1mdW5jdGlvbiBjcmVhdGVUd2VlbnMoIGFu
aW1hdGlvbiwgcHJvcHMgKSB7Ci0gICAgalF1ZXJ5LmVhY2goIHByb3BzLCBmdW5jdGlvbiggcHJv
cCwgdmFsdWUgKSB7Ci0gICAgdmFyIGNvbGxlY3Rpb24gPSAoIHR3ZWVuZXJzWyBwcm9wIF0gfHwg
W10gKS5jb25jYXQoIHR3ZWVuZXJzWyAiKiIgXSApLAotICAgIGluZGV4ID0gMCwKLSAgICBsZW5n
dGggPSBjb2xsZWN0aW9uLmxlbmd0aDsKLSAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRl
eCsrICkgewotICAgIGlmICggY29sbGVjdGlvblsgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIHBy
b3AsIHZhbHVlICkgKSB7Ci0KLSAgICAvLyB3ZSdyZSBkb25lIHdpdGggdGhpcyBwcm9wZXJ0eQot
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgfQotICAgIH0pOwotfQotCi1mdW5jdGlvbiBBbmltYXRp
b24oIGVsZW0sIHByb3BlcnRpZXMsIG9wdGlvbnMgKSB7Ci0gICAgdmFyIHJlc3VsdCwKLSAgICBz
dG9wcGVkLAotICAgIGluZGV4ID0gMCwKLSAgICBsZW5ndGggPSBhbmltYXRpb25QcmVmaWx0ZXJz
Lmxlbmd0aCwKLSAgICBkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLmFsd2F5cyggZnVuY3Rp
b24oKSB7Ci0gICAgLy8gZG9uJ3QgbWF0Y2ggZWxlbSBpbiB0aGUgOmFuaW1hdGVkIHNlbGVjdG9y
Ci0gICAgZGVsZXRlIHRpY2suZWxlbTsKLSAgICB9KSwKLSAgICB0aWNrID0gZnVuY3Rpb24oKSB7
Ci0gICAgaWYgKCBzdG9wcGVkICkgewotICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgdmFy
IGN1cnJlbnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSwKLSAgICByZW1haW5pbmcgPSBN
YXRoLm1heCggMCwgYW5pbWF0aW9uLnN0YXJ0VGltZSArIGFuaW1hdGlvbi5kdXJhdGlvbiAtIGN1
cnJlbnRUaW1lICksCi0gICAgLy8gYXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8g
dXNlIDEgLSAoIDAuNSB8fCAwICkgKCMxMjQ5NykKLSAgICB0ZW1wID0gcmVtYWluaW5nIC8gYW5p
bWF0aW9uLmR1cmF0aW9uIHx8IDAsCi0gICAgcGVyY2VudCA9IDEgLSB0ZW1wLAotICAgIGluZGV4
ID0gMCwKLSAgICBsZW5ndGggPSBhbmltYXRpb24udHdlZW5zLmxlbmd0aDsKLQotICAgIGZvciAo
IDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkgewotICAgIGFuaW1hdGlvbi50d2VlbnNbIGlu
ZGV4IF0ucnVuKCBwZXJjZW50ICk7Ci0gICAgfQotCi0gICAgZGVmZXJyZWQubm90aWZ5V2l0aCgg
ZWxlbSwgWyBhbmltYXRpb24sIHBlcmNlbnQsIHJlbWFpbmluZyBdKTsKLQotICAgIGlmICggcGVy
Y2VudCA8IDEgJiYgbGVuZ3RoICkgewotICAgIHJldHVybiByZW1haW5pbmc7Ci0gICAgfSBlbHNl
IHsKLSAgICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24gXSApOwotICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgfSwKLSAgICBhbmltYXRpb24gPSBkZWZlcnJlZC5w
cm9taXNlKHsKLSAgICBlbGVtOiBlbGVtLAotICAgIHByb3BzOiBqUXVlcnkuZXh0ZW5kKCB7fSwg
cHJvcGVydGllcyApLAotICAgIG9wdHM6IGpRdWVyeS5leHRlbmQoIHRydWUsIHsgc3BlY2lhbEVh
c2luZzoge30gfSwgb3B0aW9ucyApLAotICAgIG9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGll
cywKLSAgICBvcmlnaW5hbE9wdGlvbnM6IG9wdGlvbnMsCi0gICAgc3RhcnRUaW1lOiBmeE5vdyB8
fCBjcmVhdGVGeE5vdygpLAotICAgIGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLAotICAgIHR3
ZWVuczogW10sCi0gICAgY3JlYXRlVHdlZW46IGZ1bmN0aW9uKCBwcm9wLCBlbmQgKSB7Ci0gICAg
dmFyIHR3ZWVuID0galF1ZXJ5LlR3ZWVuKCBlbGVtLCBhbmltYXRpb24ub3B0cywgcHJvcCwgZW5k
LAotICAgIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmdbIHByb3AgXSB8fCBhbmltYXRpb24u
b3B0cy5lYXNpbmcgKTsKLSAgICBhbmltYXRpb24udHdlZW5zLnB1c2goIHR3ZWVuICk7Ci0gICAg
cmV0dXJuIHR3ZWVuOwotICAgIH0sCi0gICAgc3RvcDogZnVuY3Rpb24oIGdvdG9FbmQgKSB7Ci0g
ICAgdmFyIGluZGV4ID0gMCwKLSAgICAvLyBpZiB3ZSBhcmUgZ29pbmcgdG8gdGhlIGVuZCwgd2Ug
d2FudCB0byBydW4gYWxsIHRoZSB0d2VlbnMKLSAgICAvLyBvdGhlcndpc2Ugd2Ugc2tpcCB0aGlz
IHBhcnQKLSAgICBsZW5ndGggPSBnb3RvRW5kID8gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGggOiAw
OwotICAgIGlmICggc3RvcHBlZCApIHsKLSAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0gICAgc3Rv
cHBlZCA9IHRydWU7Ci0gICAgZm9yICggOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7Ci0g
ICAgYW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIDEgKTsKLSAgICB9Ci0KLSAgICAvLyBy
ZXNvbHZlIHdoZW4gd2UgcGxheWVkIHRoZSBsYXN0IGZyYW1lCi0gICAgLy8gb3RoZXJ3aXNlLCBy
ZWplY3QKLSAgICBpZiAoIGdvdG9FbmQgKSB7Ci0gICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVs
ZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTsKLSAgICB9IGVsc2UgewotICAgIGRlZmVycmVk
LnJlamVjdFdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTsKLSAgICB9Ci0gICAg
cmV0dXJuIHRoaXM7Ci0gICAgfQotICAgIH0pLAotICAgIHByb3BzID0gYW5pbWF0aW9uLnByb3Bz
OwotCi0gICAgcHJvcEZpbHRlciggcHJvcHMsIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmcg
KTsKLQotICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkgewotICAgIHJlc3Vs
dCA9IGFuaW1hdGlvblByZWZpbHRlcnNbIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBlbGVtLCBw
cm9wcywgYW5pbWF0aW9uLm9wdHMgKTsKLSAgICBpZiAoIHJlc3VsdCApIHsKLSAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0KLSAgICB9Ci0KLSAgICBjcmVhdGVUd2VlbnMoIGFuaW1hdGlvbiwgcHJv
cHMgKTsKLQotICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGFuaW1hdGlvbi5vcHRzLnN0YXJ0
ICkgKSB7Ci0gICAgYW5pbWF0aW9uLm9wdHMuc3RhcnQuY2FsbCggZWxlbSwgYW5pbWF0aW9uICk7
Ci0gICAgfQotCi0gICAgalF1ZXJ5LmZ4LnRpbWVyKAotICAgIGpRdWVyeS5leHRlbmQoIHRpY2ss
IHsKLSAgICBlbGVtOiBlbGVtLAotICAgIGFuaW06IGFuaW1hdGlvbiwKLSAgICBxdWV1ZTogYW5p
bWF0aW9uLm9wdHMucXVldWUKLSAgICB9KQotICAgICk7Ci0KLSAgICAvLyBhdHRhY2ggY2FsbGJh
Y2tzIGZyb20gb3B0aW9ucwotICAgIHJldHVybiBhbmltYXRpb24ucHJvZ3Jlc3MoIGFuaW1hdGlv
bi5vcHRzLnByb2dyZXNzICkKLSAgICAuZG9uZSggYW5pbWF0aW9uLm9wdHMuZG9uZSwgYW5pbWF0
aW9uLm9wdHMuY29tcGxldGUgKQotICAgIC5mYWlsKCBhbmltYXRpb24ub3B0cy5mYWlsICkKLSAg
ICAuYWx3YXlzKCBhbmltYXRpb24ub3B0cy5hbHdheXMgKTsKLX0KLQotZnVuY3Rpb24gcHJvcEZp
bHRlciggcHJvcHMsIHNwZWNpYWxFYXNpbmcgKSB7Ci0gICAgdmFyIHZhbHVlLCBuYW1lLCBpbmRl
eCwgZWFzaW5nLCBob29rczsKLQotICAgIC8vIGNhbWVsQ2FzZSwgc3BlY2lhbEVhc2luZyBhbmQg
ZXhwYW5kIGNzc0hvb2sgcGFzcwotICAgIGZvciAoIGluZGV4IGluIHByb3BzICkgewotICAgIG5h
bWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBpbmRleCApOwotICAgIGVhc2luZyA9IHNwZWNpYWxFYXNp
bmdbIG5hbWUgXTsKLSAgICB2YWx1ZSA9IHByb3BzWyBpbmRleCBdOwotICAgIGlmICggalF1ZXJ5
LmlzQXJyYXkoIHZhbHVlICkgKSB7Ci0gICAgZWFzaW5nID0gdmFsdWVbIDEgXTsKLSAgICB2YWx1
ZSA9IHByb3BzWyBpbmRleCBdID0gdmFsdWVbIDAgXTsKLSAgICB9Ci0KLSAgICBpZiAoIGluZGV4
ICE9PSBuYW1lICkgewotICAgIHByb3BzWyBuYW1lIF0gPSB2YWx1ZTsKLSAgICBkZWxldGUgcHJv
cHNbIGluZGV4IF07Ci0gICAgfQotCi0gICAgaG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUg
XTsKLSAgICBpZiAoIGhvb2tzICYmICJleHBhbmQiIGluIGhvb2tzICkgewotICAgIHZhbHVlID0g
aG9va3MuZXhwYW5kKCB2YWx1ZSApOwotICAgIGRlbGV0ZSBwcm9wc1sgbmFtZSBdOwotCi0gICAg
Ly8gbm90IHF1aXRlICQuZXh0ZW5kLCB0aGlzIHdvbnQgb3ZlcndyaXRlIGtleXMgYWxyZWFkeSBw
cmVzZW50LgotICAgIC8vIGFsc28gLSByZXVzaW5nICdpbmRleCcgZnJvbSBhYm92ZSBiZWNhdXNl
IHdlIGhhdmUgdGhlIGNvcnJlY3QgIm5hbWUiCi0gICAgZm9yICggaW5kZXggaW4gdmFsdWUgKSB7
Ci0gICAgaWYgKCAhKCBpbmRleCBpbiBwcm9wcyApICkgewotICAgIHByb3BzWyBpbmRleCBdID0g
dmFsdWVbIGluZGV4IF07Ci0gICAgc3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZzsKLSAg
ICB9Ci0gICAgfQotICAgIH0gZWxzZSB7Ci0gICAgc3BlY2lhbEVhc2luZ1sgbmFtZSBdID0gZWFz
aW5nOwotICAgIH0KLSAgICB9Ci19Ci0KLWpRdWVyeS5BbmltYXRpb24gPSBqUXVlcnkuZXh0ZW5k
KCBBbmltYXRpb24sIHsKLQotICAgIHR3ZWVuZXI6IGZ1bmN0aW9uKCBwcm9wcywgY2FsbGJhY2sg
KSB7Ci0gICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcHJvcHMgKSApIHsKLSAgICBjYWxsYmFj
ayA9IHByb3BzOwotICAgIHByb3BzID0gWyAiKiIgXTsKLSAgICB9IGVsc2UgewotICAgIHByb3Bz
ID0gcHJvcHMuc3BsaXQoIiAiKTsKLSAgICB9Ci0KLSAgICB2YXIgcHJvcCwKLSAgICBpbmRleCA9
IDAsCi0gICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoOwotCi0gICAgZm9yICggOyBpbmRleCA8IGxl
bmd0aCA7IGluZGV4KysgKSB7Ci0gICAgcHJvcCA9IHByb3BzWyBpbmRleCBdOwotICAgIHR3ZWVu
ZXJzWyBwcm9wIF0gPSB0d2VlbmVyc1sgcHJvcCBdIHx8IFtdOwotICAgIHR3ZWVuZXJzWyBwcm9w
IF0udW5zaGlmdCggY2FsbGJhY2sgKTsKLSAgICB9Ci0gICAgfSwKLQotICAgIHByZWZpbHRlcjog
ZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVwZW5kICkgewotICAgIGlmICggcHJlcGVuZCApIHsKLSAg
ICBhbmltYXRpb25QcmVmaWx0ZXJzLnVuc2hpZnQoIGNhbGxiYWNrICk7Ci0gICAgfSBlbHNlIHsK
LSAgICBhbmltYXRpb25QcmVmaWx0ZXJzLnB1c2goIGNhbGxiYWNrICk7Ci0gICAgfQotICAgIH0K
LX0pOwotCi1mdW5jdGlvbiBkZWZhdWx0UHJlZmlsdGVyKCBlbGVtLCBwcm9wcywgb3B0cyApIHsK
LSAgICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqLwotICAgIHZhciBwcm9wLCBpbmRleCwgbGVu
Z3RoLAotICAgIHZhbHVlLCBkYXRhU2hvdywgdG9nZ2xlLAotICAgIHR3ZWVuLCBob29rcywgb2xk
ZmlyZSwKLSAgICBhbmltID0gdGhpcywKLSAgICBzdHlsZSA9IGVsZW0uc3R5bGUsCi0gICAgb3Jp
ZyA9IHt9LAotICAgIGhhbmRsZWQgPSBbXSwKLSAgICBoaWRkZW4gPSBlbGVtLm5vZGVUeXBlICYm
IGlzSGlkZGVuKCBlbGVtICk7Ci0KLSAgICAvLyBoYW5kbGUgcXVldWU6IGZhbHNlIHByb21pc2Vz
Ci0gICAgaWYgKCAhb3B0cy5xdWV1ZSApIHsKLSAgICBob29rcyA9IGpRdWVyeS5fcXVldWVIb29r
cyggZWxlbSwgImZ4IiApOwotICAgIGlmICggaG9va3MudW5xdWV1ZWQgPT0gbnVsbCApIHsKLSAg
ICBob29rcy51bnF1ZXVlZCA9IDA7Ci0gICAgb2xkZmlyZSA9IGhvb2tzLmVtcHR5LmZpcmU7Ci0g
ICAgaG9va3MuZW1wdHkuZmlyZSA9IGZ1bmN0aW9uKCkgewotICAgIGlmICggIWhvb2tzLnVucXVl
dWVkICkgewotICAgIG9sZGZpcmUoKTsKLSAgICB9Ci0gICAgfTsKLSAgICB9Ci0gICAgaG9va3Mu
dW5xdWV1ZWQrKzsKLQotICAgIGFuaW0uYWx3YXlzKGZ1bmN0aW9uKCkgewotICAgIC8vIGRvaW5n
IHRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSBjb21wbGV0ZSBoYW5kbGVyIHdpbGwgYmUgY2FsbGVk
Ci0gICAgLy8gYmVmb3JlIHRoaXMgY29tcGxldGVzCi0gICAgYW5pbS5hbHdheXMoZnVuY3Rpb24o
KSB7Ci0gICAgaG9va3MudW5xdWV1ZWQtLTsKLSAgICBpZiAoICFqUXVlcnkucXVldWUoIGVsZW0s
ICJmeCIgKS5sZW5ndGggKSB7Ci0gICAgaG9va3MuZW1wdHkuZmlyZSgpOwotICAgIH0KLSAgICB9
KTsKLSAgICB9KTsKLSAgICB9Ci0KLSAgICAvLyBoZWlnaHQvd2lkdGggb3ZlcmZsb3cgcGFzcwot
ICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoICJoZWlnaHQiIGluIHByb3BzIHx8ICJ3
aWR0aCIgaW4gcHJvcHMgKSApIHsKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBub3RoaW5nIHNuZWFr
cyBvdXQKLSAgICAvLyBSZWNvcmQgYWxsIDMgb3ZlcmZsb3cgYXR0cmlidXRlcyBiZWNhdXNlIElF
IGRvZXMgbm90Ci0gICAgLy8gY2hhbmdlIHRoZSBvdmVyZmxvdyBhdHRyaWJ1dGUgd2hlbiBvdmVy
Zmxvd1ggYW5kCi0gICAgLy8gb3ZlcmZsb3dZIGFyZSBzZXQgdG8gdGhlIHNhbWUgdmFsdWUKLSAg
ICBvcHRzLm92ZXJmbG93ID0gWyBzdHlsZS5vdmVyZmxvdywgc3R5bGUub3ZlcmZsb3dYLCBzdHls
ZS5vdmVyZmxvd1kgXTsKLQotICAgIC8vIFNldCBkaXNwbGF5IHByb3BlcnR5IHRvIGlubGluZS1i
bG9jayBmb3IgaGVpZ2h0L3dpZHRoCi0gICAgLy8gYW5pbWF0aW9ucyBvbiBpbmxpbmUgZWxlbWVu
dHMgdGhhdCBhcmUgaGF2aW5nIHdpZHRoL2hlaWdodCBhbmltYXRlZAotICAgIGlmICggalF1ZXJ5
LmNzcyggZWxlbSwgImRpc3BsYXkiICkgPT09ICJpbmxpbmUiICYmCi0gICAgalF1ZXJ5LmNzcygg
ZWxlbSwgImZsb2F0IiApID09PSAibm9uZSIgKSB7Ci0KLSAgICAvLyBpbmxpbmUtbGV2ZWwgZWxl
bWVudHMgYWNjZXB0IGlubGluZS1ibG9jazsKLSAgICAvLyBibG9jay1sZXZlbCBlbGVtZW50cyBu
ZWVkIHRvIGJlIGlubGluZSB3aXRoIGxheW91dAotICAgIGlmICggIWpRdWVyeS5zdXBwb3J0Lmlu
bGluZUJsb2NrTmVlZHNMYXlvdXQgfHwgY3NzX2RlZmF1bHREaXNwbGF5KCBlbGVtLm5vZGVOYW1l
ICkgPT09ICJpbmxpbmUiICkgewotICAgIHN0eWxlLmRpc3BsYXkgPSAiaW5saW5lLWJsb2NrIjsK
LQotICAgIH0gZWxzZSB7Ci0gICAgc3R5bGUuem9vbSA9IDE7Ci0gICAgfQotICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAoIG9wdHMub3ZlcmZsb3cgKSB7Ci0gICAgc3R5bGUub3ZlcmZsb3cgPSAiaGlk
ZGVuIjsKLSAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5zaHJpbmtXcmFwQmxvY2tzICkgewotICAg
IGFuaW0uYWx3YXlzKGZ1bmN0aW9uKCkgewotICAgIHN0eWxlLm92ZXJmbG93ID0gb3B0cy5vdmVy
Zmxvd1sgMCBdOwotICAgIHN0eWxlLm92ZXJmbG93WCA9IG9wdHMub3ZlcmZsb3dbIDEgXTsKLSAg
ICBzdHlsZS5vdmVyZmxvd1kgPSBvcHRzLm92ZXJmbG93WyAyIF07Ci0gICAgfSk7Ci0gICAgfQot
ICAgIH0KLQotCi0gICAgLy8gc2hvdy9oaWRlIHBhc3MKLSAgICBmb3IgKCBpbmRleCBpbiBwcm9w
cyApIHsKLSAgICB2YWx1ZSA9IHByb3BzWyBpbmRleCBdOwotICAgIGlmICggcmZ4dHlwZXMuZXhl
YyggdmFsdWUgKSApIHsKLSAgICBkZWxldGUgcHJvcHNbIGluZGV4IF07Ci0gICAgdG9nZ2xlID0g
dG9nZ2xlIHx8IHZhbHVlID09PSAidG9nZ2xlIjsKLSAgICBpZiAoIHZhbHVlID09PSAoIGhpZGRl
biA/ICJoaWRlIiA6ICJzaG93IiApICkgewotICAgIGNvbnRpbnVlOwotICAgIH0KLSAgICBoYW5k
bGVkLnB1c2goIGluZGV4ICk7Ci0gICAgfQotICAgIH0KLQotICAgIGxlbmd0aCA9IGhhbmRsZWQu
bGVuZ3RoOwotICAgIGlmICggbGVuZ3RoICkgewotICAgIGRhdGFTaG93ID0galF1ZXJ5Ll9kYXRh
KCBlbGVtLCAiZnhzaG93IiApIHx8IGpRdWVyeS5fZGF0YSggZWxlbSwgImZ4c2hvdyIsIHt9ICk7
Ci0gICAgaWYgKCAiaGlkZGVuIiBpbiBkYXRhU2hvdyApIHsKLSAgICBoaWRkZW4gPSBkYXRhU2hv
dy5oaWRkZW47Ci0gICAgfQotCi0gICAgLy8gc3RvcmUgc3RhdGUgaWYgaXRzIHRvZ2dsZSAtIGVu
YWJsZXMgLnN0b3AoKS50b2dnbGUoKSB0byAicmV2ZXJzZSIKLSAgICBpZiAoIHRvZ2dsZSApIHsK
LSAgICBkYXRhU2hvdy5oaWRkZW4gPSAhaGlkZGVuOwotICAgIH0KLSAgICBpZiAoIGhpZGRlbiAp
IHsKLSAgICBqUXVlcnkoIGVsZW0gKS5zaG93KCk7Ci0gICAgfSBlbHNlIHsKLSAgICBhbmltLmRv
bmUoZnVuY3Rpb24oKSB7Ci0gICAgalF1ZXJ5KCBlbGVtICkuaGlkZSgpOwotICAgIH0pOwotICAg
IH0KLSAgICBhbmltLmRvbmUoZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHByb3A7Ci0gICAgalF1ZXJ5
Ll9yZW1vdmVEYXRhKCBlbGVtLCAiZnhzaG93IiApOwotICAgIGZvciAoIHByb3AgaW4gb3JpZyAp
IHsKLSAgICBqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIG9yaWdbIHByb3AgXSApOwotICAgIH0K
LSAgICB9KTsKLSAgICBmb3IgKCBpbmRleCA9IDAgOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4Kysg
KSB7Ci0gICAgcHJvcCA9IGhhbmRsZWRbIGluZGV4IF07Ci0gICAgdHdlZW4gPSBhbmltLmNyZWF0
ZVR3ZWVuKCBwcm9wLCBoaWRkZW4gPyBkYXRhU2hvd1sgcHJvcCBdIDogMCApOwotICAgIG9yaWdb
IHByb3AgXSA9IGRhdGFTaG93WyBwcm9wIF0gfHwgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wICk7
Ci0KLSAgICBpZiAoICEoIHByb3AgaW4gZGF0YVNob3cgKSApIHsKLSAgICBkYXRhU2hvd1sgcHJv
cCBdID0gdHdlZW4uc3RhcnQ7Ci0gICAgaWYgKCBoaWRkZW4gKSB7Ci0gICAgdHdlZW4uZW5kID0g
dHdlZW4uc3RhcnQ7Ci0gICAgdHdlZW4uc3RhcnQgPSBwcm9wID09PSAid2lkdGgiIHx8IHByb3Ag
PT09ICJoZWlnaHQiID8gMSA6IDA7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0gICAgfQotfQotCi1m
dW5jdGlvbiBUd2VlbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKSB7Ci0gICAg
cmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5k
LCBlYXNpbmcgKTsKLX0KLWpRdWVyeS5Ud2VlbiA9IFR3ZWVuOwotCi1Ud2Vlbi5wcm90b3R5cGUg
PSB7Ci0gICAgY29uc3RydWN0b3I6IFR3ZWVuLAotICAgIGluaXQ6IGZ1bmN0aW9uKCBlbGVtLCBv
cHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZywgdW5pdCApIHsKLSAgICB0aGlzLmVsZW0gPSBlbGVt
OwotICAgIHRoaXMucHJvcCA9IHByb3A7Ci0gICAgdGhpcy5lYXNpbmcgPSBlYXNpbmcgfHwgInN3
aW5nIjsKLSAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwotICAgIHRoaXMuc3RhcnQgPSB0aGlz
Lm5vdyA9IHRoaXMuY3VyKCk7Ci0gICAgdGhpcy5lbmQgPSBlbmQ7Ci0gICAgdGhpcy51bml0ID0g
dW5pdCB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/ICIiIDogInB4IiApOwotICAgIH0s
Ci0gICAgY3VyOiBmdW5jdGlvbigpIHsKLSAgICB2YXIgaG9va3MgPSBUd2Vlbi5wcm9wSG9va3Nb
IHRoaXMucHJvcCBdOwotCi0gICAgcmV0dXJuIGhvb2tzICYmIGhvb2tzLmdldCA/Ci0gICAgaG9v
a3MuZ2V0KCB0aGlzICkgOgotICAgIFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMg
KTsKLSAgICB9LAotICAgIHJ1bjogZnVuY3Rpb24oIHBlcmNlbnQgKSB7Ci0gICAgdmFyIGVhc2Vk
LAotICAgIGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTsKLQotICAgIGlmICgg
dGhpcy5vcHRpb25zLmR1cmF0aW9uICkgewotICAgIHRoaXMucG9zID0gZWFzZWQgPSBqUXVlcnku
ZWFzaW5nWyB0aGlzLmVhc2luZyBdKAotICAgIHBlcmNlbnQsIHRoaXMub3B0aW9ucy5kdXJhdGlv
biAqIHBlcmNlbnQsIDAsIDEsIHRoaXMub3B0aW9ucy5kdXJhdGlvbgotICAgICk7Ci0gICAgfSBl
bHNlIHsKLSAgICB0aGlzLnBvcyA9IGVhc2VkID0gcGVyY2VudDsKLSAgICB9Ci0gICAgdGhpcy5u
b3cgPSAoIHRoaXMuZW5kIC0gdGhpcy5zdGFydCApICogZWFzZWQgKyB0aGlzLnN0YXJ0OwotCi0g
ICAgaWYgKCB0aGlzLm9wdGlvbnMuc3RlcCApIHsKLSAgICB0aGlzLm9wdGlvbnMuc3RlcC5jYWxs
KCB0aGlzLmVsZW0sIHRoaXMubm93LCB0aGlzICk7Ci0gICAgfQotCi0gICAgaWYgKCBob29rcyAm
JiBob29rcy5zZXQgKSB7Ci0gICAgaG9va3Muc2V0KCB0aGlzICk7Ci0gICAgfSBlbHNlIHsKLSAg
ICBUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KCB0aGlzICk7Ci0gICAgfQotICAgIHJldHVy
biB0aGlzOwotICAgIH0KLX07Ci0KLVR3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3
ZWVuLnByb3RvdHlwZTsKLQotVHdlZW4ucHJvcEhvb2tzID0gewotICAgIF9kZWZhdWx0OiB7Ci0g
ICAgZ2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7Ci0gICAgdmFyIHJlc3VsdDsKLQotICAgIGlmICgg
dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiYKLSAgICAoIXR3ZWVuLmVsZW0uc3R5
bGUgfHwgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51bGwpICkgewotICAgIHJl
dHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07Ci0gICAgfQotCi0gICAgLy8gcGFzc2luZyBh
biBlbXB0eSBzdHJpbmcgYXMgYSAzcmQgcGFyYW1ldGVyIHRvIC5jc3Mgd2lsbCBhdXRvbWF0aWNh
bGx5Ci0gICAgLy8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5n
IGlmIHRoZSBwYXJzZSBmYWlscwotICAgIC8vIHNvLCBzaW1wbGUgdmFsdWVzIHN1Y2ggYXMgIjEw
cHgiIGFyZSBwYXJzZWQgdG8gRmxvYXQuCi0gICAgLy8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyAi
cm90YXRlKDFyYWQpIiBhcmUgcmV0dXJuZWQgYXMgaXMuCi0gICAgcmVzdWx0ID0galF1ZXJ5LmNz
cyggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgIiIgKTsKLSAgICAvLyBFbXB0eSBzdHJpbmdzLCBu
dWxsLCB1bmRlZmluZWQgYW5kICJhdXRvIiBhcmUgY29udmVydGVkIHRvIDAuCi0gICAgcmV0dXJu
ICFyZXN1bHQgfHwgcmVzdWx0ID09PSAiYXV0byIgPyAwIDogcmVzdWx0OwotICAgIH0sCi0gICAg
c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7Ci0gICAgLy8gdXNlIHN0ZXAgaG9vayBmb3IgYmFjayBj
b21wYXQgLSB1c2UgY3NzSG9vayBpZiBpdHMgdGhlcmUgLSB1c2UgLnN0eWxlIGlmIGl0cwotICAg
IC8vIGF2YWlsYWJsZSBhbmQgdXNlIHBsYWluIHByb3BlcnRpZXMgd2hlcmUgYXZhaWxhYmxlCi0g
ICAgaWYgKCBqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdICkgewotICAgIGpRdWVyeS5meC5z
dGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7Ci0gICAgfSBlbHNlIGlmICggdHdlZW4uZWxlbS5z
dHlsZSAmJiAoIHR3ZWVuLmVsZW0uc3R5bGVbIGpRdWVyeS5jc3NQcm9wc1sgdHdlZW4ucHJvcCBd
IF0gIT0gbnVsbCB8fCBqUXVlcnkuY3NzSG9va3NbIHR3ZWVuLnByb3AgXSApICkgewotICAgIGpR
dWVyeS5zdHlsZSggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgdHdlZW4ubm93ICsgdHdlZW4udW5p
dCApOwotICAgIH0gZWxzZSB7Ci0gICAgdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4u
bm93OwotICAgIH0KLSAgICB9Ci0gICAgfQotfTsKLQotLy8gUmVtb3ZlIGluIDIuMCAtIHRoaXMg
c3VwcG9ydHMgSUU4J3MgcGFuaWMgYmFzZWQgYXBwcm9hY2gKLS8vIHRvIHNldHRpbmcgdGhpbmdz
IG9uIGRpc2Nvbm5lY3RlZCBub2RlcwotCi1Ud2Vlbi5wcm9wSG9va3Muc2Nyb2xsVG9wID0gVHdl
ZW4ucHJvcEhvb2tzLnNjcm9sbExlZnQgPSB7Ci0gICAgc2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7
Ci0gICAgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICYmIHR3ZWVuLmVsZW0ucGFyZW50Tm9kZSAp
IHsKLSAgICB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7Ci0gICAgfQotICAg
IH0KLX07Ci0KLWpRdWVyeS5lYWNoKFsgInRvZ2dsZSIsICJzaG93IiwgImhpZGUiIF0sIGZ1bmN0
aW9uKCBpLCBuYW1lICkgewotICAgIHZhciBjc3NGbiA9IGpRdWVyeS5mblsgbmFtZSBdOwotICAg
IGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkg
ewotICAgIHJldHVybiBzcGVlZCA9PSBudWxsIHx8IHR5cGVvZiBzcGVlZCA9PT0gImJvb2xlYW4i
ID8KLSAgICBjc3NGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICkgOgotICAgIHRoaXMuYW5pbWF0
ZSggZ2VuRngoIG5hbWUsIHRydWUgKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKLSAgICB9
OwotfSk7Ci0KLWpRdWVyeS5mbi5leHRlbmQoewotICAgIGZhZGVUbzogZnVuY3Rpb24oIHNwZWVk
LCB0bywgZWFzaW5nLCBjYWxsYmFjayApIHsKLQotICAgIC8vIHNob3cgYW55IGhpZGRlbiBlbGVt
ZW50cyBhZnRlciBzZXR0aW5nIG9wYWNpdHkgdG8gMAotICAgIHJldHVybiB0aGlzLmZpbHRlcigg
aXNIaWRkZW4gKS5jc3MoICJvcGFjaXR5IiwgMCApLnNob3coKQotCi0gICAgLy8gYW5pbWF0ZSB0
byB0aGUgdmFsdWUgc3BlY2lmaWVkCi0gICAgLmVuZCgpLmFuaW1hdGUoeyBvcGFjaXR5OiB0byB9
LCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApOwotICAgIH0sCi0gICAgYW5pbWF0ZTogZnVuY3Rp
b24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkgewotICAgIHZhciBlbXB0eSA9IGpR
dWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wICksCi0gICAgb3B0YWxsID0galF1ZXJ5LnNwZWVkKCBz
cGVlZCwgZWFzaW5nLCBjYWxsYmFjayApLAotICAgIGRvQW5pbWF0aW9uID0gZnVuY3Rpb24oKSB7
Ci0gICAgLy8gT3BlcmF0ZSBvbiBhIGNvcHkgb2YgcHJvcCBzbyBwZXItcHJvcGVydHkgZWFzaW5n
IHdvbid0IGJlIGxvc3QKLSAgICB2YXIgYW5pbSA9IEFuaW1hdGlvbiggdGhpcywgalF1ZXJ5LmV4
dGVuZCgge30sIHByb3AgKSwgb3B0YWxsICk7Ci0gICAgZG9BbmltYXRpb24uZmluaXNoID0gZnVu
Y3Rpb24oKSB7Ci0gICAgYW5pbS5zdG9wKCB0cnVlICk7Ci0gICAgfTsKLSAgICAvLyBFbXB0eSBh
bmltYXRpb25zLCBvciBmaW5pc2hpbmcgcmVzb2x2ZXMgaW1tZWRpYXRlbHkKLSAgICBpZiAoIGVt
cHR5IHx8IGpRdWVyeS5fZGF0YSggdGhpcywgImZpbmlzaCIgKSApIHsKLSAgICBhbmltLnN0b3Ao
IHRydWUgKTsKLSAgICB9Ci0gICAgfTsKLSAgICBkb0FuaW1hdGlvbi5maW5pc2ggPSBkb0FuaW1h
dGlvbjsKLQotICAgIHJldHVybiBlbXB0eSB8fCBvcHRhbGwucXVldWUgPT09IGZhbHNlID8KLSAg
ICB0aGlzLmVhY2goIGRvQW5pbWF0aW9uICkgOgotICAgIHRoaXMucXVldWUoIG9wdGFsbC5xdWV1
ZSwgZG9BbmltYXRpb24gKTsKLSAgICB9LAotICAgIHN0b3A6IGZ1bmN0aW9uKCB0eXBlLCBjbGVh
clF1ZXVlLCBnb3RvRW5kICkgewotICAgIHZhciBzdG9wUXVldWUgPSBmdW5jdGlvbiggaG9va3Mg
KSB7Ci0gICAgdmFyIHN0b3AgPSBob29rcy5zdG9wOwotICAgIGRlbGV0ZSBob29rcy5zdG9wOwot
ICAgIHN0b3AoIGdvdG9FbmQgKTsKLSAgICB9OwotCi0gICAgaWYgKCB0eXBlb2YgdHlwZSAhPT0g
InN0cmluZyIgKSB7Ci0gICAgZ290b0VuZCA9IGNsZWFyUXVldWU7Ci0gICAgY2xlYXJRdWV1ZSA9
IHR5cGU7Ci0gICAgdHlwZSA9IHVuZGVmaW5lZDsKLSAgICB9Ci0gICAgaWYgKCBjbGVhclF1ZXVl
ICYmIHR5cGUgIT09IGZhbHNlICkgewotICAgIHRoaXMucXVldWUoIHR5cGUgfHwgImZ4IiwgW10g
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgIHZhciBk
ZXF1ZXVlID0gdHJ1ZSwKLSAgICBpbmRleCA9IHR5cGUgIT0gbnVsbCAmJiB0eXBlICsgInF1ZXVl
SG9va3MiLAotICAgIHRpbWVycyA9IGpRdWVyeS50aW1lcnMsCi0gICAgZGF0YSA9IGpRdWVyeS5f
ZGF0YSggdGhpcyApOwotCi0gICAgaWYgKCBpbmRleCApIHsKLSAgICBpZiAoIGRhdGFbIGluZGV4
IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICkgewotICAgIHN0b3BRdWV1ZSggZGF0YVsgaW5kZXgg
XSApOwotICAgIH0KLSAgICB9IGVsc2UgewotICAgIGZvciAoIGluZGV4IGluIGRhdGEgKSB7Ci0g
ICAgaWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCAmJiBycnVuLnRlc3Qo
IGluZGV4ICkgKSB7Ci0gICAgc3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7Ci0gICAgfQotICAg
IH0KLSAgICB9Ci0KLSAgICBmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkg
ewotICAgIGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYgKHR5cGUgPT0gbnVs
bCB8fCB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUpICkgewotICAgIHRpbWVyc1sgaW5k
ZXggXS5hbmltLnN0b3AoIGdvdG9FbmQgKTsKLSAgICBkZXF1ZXVlID0gZmFsc2U7Ci0gICAgdGlt
ZXJzLnNwbGljZSggaW5kZXgsIDEgKTsKLSAgICB9Ci0gICAgfQotCi0gICAgLy8gc3RhcnQgdGhl
IG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZAotICAgIC8v
IHRpbWVycyBjdXJyZW50bHkgd2lsbCBjYWxsIHRoZWlyIGNvbXBsZXRlIGNhbGxiYWNrcywgd2hp
Y2ggd2lsbCBkZXF1ZXVlCi0gICAgLy8gYnV0IG9ubHkgaWYgdGhleSB3ZXJlIGdvdG9FbmQKLSAg
ICBpZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7Ci0gICAgalF1ZXJ5LmRlcXVldWUoIHRoaXMs
IHR5cGUgKTsKLSAgICB9Ci0gICAgfSk7Ci0gICAgfSwKLSAgICBmaW5pc2g6IGZ1bmN0aW9uKCB0
eXBlICkgewotICAgIGlmICggdHlwZSAhPT0gZmFsc2UgKSB7Ci0gICAgdHlwZSA9IHR5cGUgfHwg
ImZ4IjsKLSAgICB9Ci0gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICB2YXIg
aW5kZXgsCi0gICAgZGF0YSA9IGpRdWVyeS5fZGF0YSggdGhpcyApLAotICAgIHF1ZXVlID0gZGF0
YVsgdHlwZSArICJxdWV1ZSIgXSwKLSAgICBob29rcyA9IGRhdGFbIHR5cGUgKyAicXVldWVIb29r
cyIgXSwKLSAgICB0aW1lcnMgPSBqUXVlcnkudGltZXJzLAotICAgIGxlbmd0aCA9IHF1ZXVlID8g
cXVldWUubGVuZ3RoIDogMDsKLQotICAgIC8vIGVuYWJsZSBmaW5pc2hpbmcgZmxhZyBvbiBwcml2
YXRlIGRhdGEKLSAgICBkYXRhLmZpbmlzaCA9IHRydWU7Ci0KLSAgICAvLyBlbXB0eSB0aGUgcXVl
dWUgZmlyc3QKLSAgICBqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIFtdICk7Ci0KLSAgICBpZiAo
IGhvb2tzICYmIGhvb2tzLmN1ciAmJiBob29rcy5jdXIuZmluaXNoICkgewotICAgIGhvb2tzLmN1
ci5maW5pc2guY2FsbCggdGhpcyApOwotICAgIH0KLQotICAgIC8vIGxvb2sgZm9yIGFueSBhY3Rp
dmUgYW5pbWF0aW9ucywgYW5kIGZpbmlzaCB0aGVtCi0gICAgZm9yICggaW5kZXggPSB0aW1lcnMu
bGVuZ3RoOyBpbmRleC0tOyApIHsKLSAgICBpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0
aGlzICYmIHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApIHsKLSAgICB0aW1lcnNbIGlu
ZGV4IF0uYW5pbS5zdG9wKCB0cnVlICk7Ci0gICAgdGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTsK
LSAgICB9Ci0gICAgfQotCi0gICAgLy8gbG9vayBmb3IgYW55IGFuaW1hdGlvbnMgaW4gdGhlIG9s
ZCBxdWV1ZSBhbmQgZmluaXNoIHRoZW0KLSAgICBmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVu
Z3RoOyBpbmRleCsrICkgewotICAgIGlmICggcXVldWVbIGluZGV4IF0gJiYgcXVldWVbIGluZGV4
IF0uZmluaXNoICkgewotICAgIHF1ZXVlWyBpbmRleCBdLmZpbmlzaC5jYWxsKCB0aGlzICk7Ci0g
ICAgfQotICAgIH0KLQotICAgIC8vIHR1cm4gb2ZmIGZpbmlzaGluZyBmbGFnCi0gICAgZGVsZXRl
IGRhdGEuZmluaXNoOwotICAgIH0pOwotICAgIH0KLX0pOwotCi0vLyBHZW5lcmF0ZSBwYXJhbWV0
ZXJzIHRvIGNyZWF0ZSBhIHN0YW5kYXJkIGFuaW1hdGlvbgotZnVuY3Rpb24gZ2VuRngoIHR5cGUs
IGluY2x1ZGVXaWR0aCApIHsKLSAgICB2YXIgd2hpY2gsCi0gICAgYXR0cnMgPSB7IGhlaWdodDog
dHlwZSB9LAotICAgIGkgPSAwOwotCi0gICAgLy8gaWYgd2UgaW5jbHVkZSB3aWR0aCwgc3RlcCB2
YWx1ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLAotICAgIC8vIGlmIHdlIGRvbid0
IGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMiB0byBza2lwIG92ZXIgTGVmdCBhbmQgUmln
aHQKLSAgICBpbmNsdWRlV2lkdGggPSBpbmNsdWRlV2lkdGg/IDEgOiAwOwotICAgIGZvciggOyBp
IDwgNCA7IGkgKz0gMiAtIGluY2x1ZGVXaWR0aCApIHsKLSAgICB3aGljaCA9IGNzc0V4cGFuZFsg
aSBdOwotICAgIGF0dHJzWyAibWFyZ2luIiArIHdoaWNoIF0gPSBhdHRyc1sgInBhZGRpbmciICsg
d2hpY2ggXSA9IHR5cGU7Ci0gICAgfQotCi0gICAgaWYgKCBpbmNsdWRlV2lkdGggKSB7Ci0gICAg
YXR0cnMub3BhY2l0eSA9IGF0dHJzLndpZHRoID0gdHlwZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
YXR0cnM7Ci19Ci0KLS8vIEdlbmVyYXRlIHNob3J0Y3V0cyBmb3IgY3VzdG9tIGFuaW1hdGlvbnMK
LWpRdWVyeS5lYWNoKHsKLSAgICBzbGlkZURvd246IGdlbkZ4KCJzaG93IiksCi0gICAgc2xpZGVV
cDogZ2VuRngoImhpZGUiKSwKLSAgICBzbGlkZVRvZ2dsZTogZ2VuRngoInRvZ2dsZSIpLAotICAg
IGZhZGVJbjogeyBvcGFjaXR5OiAic2hvdyIgfSwKLSAgICBmYWRlT3V0OiB7IG9wYWNpdHk6ICJo
aWRlIiB9LAotICAgIGZhZGVUb2dnbGU6IHsgb3BhY2l0eTogInRvZ2dsZSIgfQotfSwgZnVuY3Rp
b24oIG5hbWUsIHByb3BzICkgewotICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNw
ZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkgewotICAgIHJldHVybiB0aGlzLmFuaW1hdGUoIHByb3Bz
LCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApOwotICAgIH07Ci19KTsKLQotalF1ZXJ5LnNwZWVk
ID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGZuICkgewotICAgIHZhciBvcHQgPSBzcGVlZCAm
JiB0eXBlb2Ygc3BlZWQgPT09ICJvYmplY3QiID8galF1ZXJ5LmV4dGVuZCgge30sIHNwZWVkICkg
OiB7Ci0gICAgY29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHwKLSAgICBqUXVlcnkuaXNG
dW5jdGlvbiggc3BlZWQgKSAmJiBzcGVlZCwKLSAgICBkdXJhdGlvbjogc3BlZWQsCi0gICAgZWFz
aW5nOiBmbiAmJiBlYXNpbmcgfHwgZWFzaW5nICYmICFqUXVlcnkuaXNGdW5jdGlvbiggZWFzaW5n
ICkgJiYgZWFzaW5nCi0gICAgfTsKLQotICAgIG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5vZmYg
PyAwIDogdHlwZW9mIG9wdC5kdXJhdGlvbiA9PT0gIm51bWJlciIgPyBvcHQuZHVyYXRpb24gOgot
ICAgIG9wdC5kdXJhdGlvbiBpbiBqUXVlcnkuZnguc3BlZWRzID8galF1ZXJ5LmZ4LnNwZWVkc1sg
b3B0LmR1cmF0aW9uIF0gOiBqUXVlcnkuZnguc3BlZWRzLl9kZWZhdWx0OwotCi0gICAgLy8gbm9y
bWFsaXplIG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwgLT4gImZ4IgotICAgIGlmICgg
b3B0LnF1ZXVlID09IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVlICkgewotICAgIG9wdC5xdWV1
ZSA9ICJmeCI7Ci0gICAgfQotCi0gICAgLy8gUXVldWVpbmcKLSAgICBvcHQub2xkID0gb3B0LmNv
bXBsZXRlOwotCi0gICAgb3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCBqUXVl
cnkuaXNGdW5jdGlvbiggb3B0Lm9sZCApICkgewotICAgIG9wdC5vbGQuY2FsbCggdGhpcyApOwot
ICAgIH0KLQotICAgIGlmICggb3B0LnF1ZXVlICkgewotICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlz
LCBvcHQucXVldWUgKTsKLSAgICB9Ci0gICAgfTsKLQotICAgIHJldHVybiBvcHQ7Ci19OwotCi1q
UXVlcnkuZWFzaW5nID0gewotICAgIGxpbmVhcjogZnVuY3Rpb24oIHAgKSB7Ci0gICAgcmV0dXJu
IHA7Ci0gICAgfSwKLSAgICBzd2luZzogZnVuY3Rpb24oIHAgKSB7Ci0gICAgcmV0dXJuIDAuNSAt
IE1hdGguY29zKCBwKk1hdGguUEkgKSAvIDI7Ci0gICAgfQotfTsKLQotalF1ZXJ5LnRpbWVycyA9
IFtdOwotalF1ZXJ5LmZ4ID0gVHdlZW4ucHJvdG90eXBlLmluaXQ7Ci1qUXVlcnkuZngudGljayA9
IGZ1bmN0aW9uKCkgewotICAgIHZhciB0aW1lciwKLSAgICB0aW1lcnMgPSBqUXVlcnkudGltZXJz
LAotICAgIGkgPSAwOwotCi0gICAgZnhOb3cgPSBqUXVlcnkubm93KCk7Ci0KLSAgICBmb3IgKCA7
IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7Ci0gICAgdGltZXIgPSB0aW1lcnNbIGkgXTsKLSAg
ICAvLyBDaGVja3MgdGhlIHRpbWVyIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlbW92ZWQKLSAgICBp
ZiAoICF0aW1lcigpICYmIHRpbWVyc1sgaSBdID09PSB0aW1lciApIHsKLSAgICB0aW1lcnMuc3Bs
aWNlKCBpLS0sIDEgKTsKLSAgICB9Ci0gICAgfQotCi0gICAgaWYgKCAhdGltZXJzLmxlbmd0aCAp
IHsKLSAgICBqUXVlcnkuZnguc3RvcCgpOwotICAgIH0KLSAgICBmeE5vdyA9IHVuZGVmaW5lZDsK
LX07Ci0KLWpRdWVyeS5meC50aW1lciA9IGZ1bmN0aW9uKCB0aW1lciApIHsKLSAgICBpZiAoIHRp
bWVyKCkgJiYgalF1ZXJ5LnRpbWVycy5wdXNoKCB0aW1lciApICkgewotICAgIGpRdWVyeS5meC5z
dGFydCgpOwotICAgIH0KLX07Ci0KLWpRdWVyeS5meC5pbnRlcnZhbCA9IDEzOwotCi1qUXVlcnku
Znguc3RhcnQgPSBmdW5jdGlvbigpIHsKLSAgICBpZiAoICF0aW1lcklkICkgewotICAgIHRpbWVy
SWQgPSBzZXRJbnRlcnZhbCggalF1ZXJ5LmZ4LnRpY2ssIGpRdWVyeS5meC5pbnRlcnZhbCApOwot
ICAgIH0KLX07Ci0KLWpRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24oKSB7Ci0gICAgY2xlYXJJbnRl
cnZhbCggdGltZXJJZCApOwotICAgIHRpbWVySWQgPSBudWxsOwotfTsKLQotalF1ZXJ5LmZ4LnNw
ZWVkcyA9IHsKLSAgICBzbG93OiA2MDAsCi0gICAgZmFzdDogMjAwLAotICAgIC8vIERlZmF1bHQg
c3BlZWQKLSAgICBfZGVmYXVsdDogNDAwCi19OwotCi0vLyBCYWNrIENvbXBhdCA8MS44IGV4dGVu
c2lvbiBwb2ludAotalF1ZXJ5LmZ4LnN0ZXAgPSB7fTsKLQotaWYgKCBqUXVlcnkuZXhwciAmJiBq
UXVlcnkuZXhwci5maWx0ZXJzICkgewotICAgIGpRdWVyeS5leHByLmZpbHRlcnMuYW5pbWF0ZWQg
PSBmdW5jdGlvbiggZWxlbSApIHsKLSAgICByZXR1cm4galF1ZXJ5LmdyZXAoalF1ZXJ5LnRpbWVy
cywgZnVuY3Rpb24oIGZuICkgewotICAgIHJldHVybiBlbGVtID09PSBmbi5lbGVtOwotICAgIH0p
Lmxlbmd0aDsKLSAgICB9OwotfQotalF1ZXJ5LmZuLm9mZnNldCA9IGZ1bmN0aW9uKCBvcHRpb25z
ICkgewotICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCApIHsKLSAgICByZXR1cm4gb3B0aW9ucyA9
PT0gdW5kZWZpbmVkID8KLSAgICB0aGlzIDoKLSAgICB0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7
Ci0gICAgalF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTsKLSAgICB9
KTsKLSAgICB9Ci0KLSAgICB2YXIgZG9jRWxlbSwgd2luLAotICAgIGJveCA9IHsgdG9wOiAwLCBs
ZWZ0OiAwIH0sCi0gICAgZWxlbSA9IHRoaXNbIDAgXSwKLSAgICBkb2MgPSBlbGVtICYmIGVsZW0u
b3duZXJEb2N1bWVudDsKLQotICAgIGlmICggIWRvYyApIHsKLSAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgZG9jRWxlbSA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7Ci0KLSAgICAvLyBNYWtlIHN1cmUg
aXQncyBub3QgYSBkaXNjb25uZWN0ZWQgRE9NIG5vZGUKLSAgICBpZiAoICFqUXVlcnkuY29udGFp
bnMoIGRvY0VsZW0sIGVsZW0gKSApIHsKLSAgICByZXR1cm4gYm94OwotICAgIH0KLQotICAgIC8v
IElmIHdlIGRvbid0IGhhdmUgZ0JDUiwganVzdCB1c2UgMCwwIHJhdGhlciB0aGFuIGVycm9yCi0g
ICAgLy8gQmxhY2tCZXJyeSA1LCBpT1MgMyAob3JpZ2luYWwgaVBob25lKQotICAgIGlmICggdHlw
ZW9mIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0ICE9PSBjb3JlX3N0cnVuZGVmaW5lZCApIHsK
LSAgICBib3ggPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwotICAgIH0KLSAgICB3aW4g
PSBnZXRXaW5kb3coIGRvYyApOwotICAgIHJldHVybiB7Ci0gICAgdG9wOiBib3gudG9wICArICgg
d2luLnBhZ2VZT2Zmc2V0IHx8IGRvY0VsZW0uc2Nyb2xsVG9wICkgIC0gKCBkb2NFbGVtLmNsaWVu
dFRvcCAgfHwgMCApLAotICAgIGxlZnQ6IGJveC5sZWZ0ICsgKCB3aW4ucGFnZVhPZmZzZXQgfHwg
ZG9jRWxlbS5zY3JvbGxMZWZ0ICkgLSAoIGRvY0VsZW0uY2xpZW50TGVmdCB8fCAwICkKLSAgICB9
OwotfTsKLQotalF1ZXJ5Lm9mZnNldCA9IHsKLQotICAgIHNldE9mZnNldDogZnVuY3Rpb24oIGVs
ZW0sIG9wdGlvbnMsIGkgKSB7Ci0gICAgdmFyIHBvc2l0aW9uID0galF1ZXJ5LmNzcyggZWxlbSwg
InBvc2l0aW9uIiApOwotCi0gICAgLy8gc2V0IHBvc2l0aW9uIGZpcnN0LCBpbi1jYXNlIHRvcC9s
ZWZ0IGFyZSBzZXQgZXZlbiBvbiBzdGF0aWMgZWxlbQotICAgIGlmICggcG9zaXRpb24gPT09ICJz
dGF0aWMiICkgewotICAgIGVsZW0uc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOwotICAgIH0K
LQotICAgIHZhciBjdXJFbGVtID0galF1ZXJ5KCBlbGVtICksCi0gICAgY3VyT2Zmc2V0ID0gY3Vy
RWxlbS5vZmZzZXQoKSwKLSAgICBjdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCAidG9wIiAp
LAotICAgIGN1ckNTU0xlZnQgPSBqUXVlcnkuY3NzKCBlbGVtLCAibGVmdCIgKSwKLSAgICBjYWxj
dWxhdGVQb3NpdGlvbiA9ICggcG9zaXRpb24gPT09ICJhYnNvbHV0ZSIgfHwgcG9zaXRpb24gPT09
ICJmaXhlZCIgKSAmJiBqUXVlcnkuaW5BcnJheSgiYXV0byIsIFtjdXJDU1NUb3AsIGN1ckNTU0xl
ZnRdKSA+IC0xLAotICAgIHByb3BzID0ge30sIGN1clBvc2l0aW9uID0ge30sIGN1clRvcCwgY3Vy
TGVmdDsKLQotICAgIC8vIG5lZWQgdG8gYmUgYWJsZSB0byBjYWxjdWxhdGUgcG9zaXRpb24gaWYg
ZWl0aGVyIHRvcCBvciBsZWZ0IGlzIGF1dG8gYW5kIHBvc2l0aW9uIGlzIGVpdGhlciBhYnNvbHV0
ZSBvciBmaXhlZAotICAgIGlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7Ci0gICAgY3VyUG9zaXRp
b24gPSBjdXJFbGVtLnBvc2l0aW9uKCk7Ci0gICAgY3VyVG9wID0gY3VyUG9zaXRpb24udG9wOwot
ICAgIGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0OwotICAgIH0gZWxzZSB7Ci0gICAgY3VyVG9w
ID0gcGFyc2VGbG9hdCggY3VyQ1NTVG9wICkgfHwgMDsKLSAgICBjdXJMZWZ0ID0gcGFyc2VGbG9h
dCggY3VyQ1NTTGVmdCApIHx8IDA7Ci0gICAgfQotCi0gICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlv
biggb3B0aW9ucyApICkgewotICAgIG9wdGlvbnMgPSBvcHRpb25zLmNhbGwoIGVsZW0sIGksIGN1
ck9mZnNldCApOwotICAgIH0KLQotICAgIGlmICggb3B0aW9ucy50b3AgIT0gbnVsbCApIHsKLSAg
ICBwcm9wcy50b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wOwot
ICAgIH0KLSAgICBpZiAoIG9wdGlvbnMubGVmdCAhPSBudWxsICkgewotICAgIHByb3BzLmxlZnQg
PSAoIG9wdGlvbnMubGVmdCAtIGN1ck9mZnNldC5sZWZ0ICkgKyBjdXJMZWZ0OwotICAgIH0KLQot
ICAgIGlmICggInVzaW5nIiBpbiBvcHRpb25zICkgewotICAgIG9wdGlvbnMudXNpbmcuY2FsbCgg
ZWxlbSwgcHJvcHMgKTsKLSAgICB9IGVsc2UgewotICAgIGN1ckVsZW0uY3NzKCBwcm9wcyApOwot
ICAgIH0KLSAgICB9Ci19OwotCi0KLWpRdWVyeS5mbi5leHRlbmQoewotCi0gICAgcG9zaXRpb246
IGZ1bmN0aW9uKCkgewotICAgIGlmICggIXRoaXNbIDAgXSApIHsKLSAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgdmFyIG9mZnNldFBhcmVudCwgb2Zmc2V0LAotICAgIHBhcmVudE9mZnNldCA9IHsg
dG9wOiAwLCBsZWZ0OiAwIH0sCi0gICAgZWxlbSA9IHRoaXNbIDAgXTsKLQotICAgIC8vIGZpeGVk
IGVsZW1lbnRzIGFyZSBvZmZzZXQgZnJvbSB3aW5kb3cgKHBhcmVudE9mZnNldCA9IHt0b3A6MCwg
bGVmdDogMH0sIGJlY2F1c2UgaXQgaXMgaXQncyBvbmx5IG9mZnNldCBwYXJlbnQKLSAgICBpZiAo
IGpRdWVyeS5jc3MoIGVsZW0sICJwb3NpdGlvbiIgKSA9PT0gImZpeGVkIiApIHsKLSAgICAvLyB3
ZSBhc3N1bWUgdGhhdCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgaXMgYXZhaWxhYmxlIHdoZW4gY29t
cHV0ZWQgcG9zaXRpb24gaXMgZml4ZWQKLSAgICBvZmZzZXQgPSBlbGVtLmdldEJvdW5kaW5nQ2xp
ZW50UmVjdCgpOwotICAgIH0gZWxzZSB7Ci0gICAgLy8gR2V0ICpyZWFsKiBvZmZzZXRQYXJlbnQK
LSAgICBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudCgpOwotCi0gICAgLy8gR2V0IGNv
cnJlY3Qgb2Zmc2V0cwotICAgIG9mZnNldCA9IHRoaXMub2Zmc2V0KCk7Ci0gICAgaWYgKCAhalF1
ZXJ5Lm5vZGVOYW1lKCBvZmZzZXRQYXJlbnRbIDAgXSwgImh0bWwiICkgKSB7Ci0gICAgcGFyZW50
T2Zmc2V0ID0gb2Zmc2V0UGFyZW50Lm9mZnNldCgpOwotICAgIH0KLQotICAgIC8vIEFkZCBvZmZz
ZXRQYXJlbnQgYm9yZGVycwotICAgIHBhcmVudE9mZnNldC50b3AgICs9IGpRdWVyeS5jc3MoIG9m
ZnNldFBhcmVudFsgMCBdLCAiYm9yZGVyVG9wV2lkdGgiLCB0cnVlICk7Ci0gICAgcGFyZW50T2Zm
c2V0LmxlZnQgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50WyAwIF0sICJib3JkZXJMZWZ0V2lk
dGgiLCB0cnVlICk7Ci0gICAgfQotCi0gICAgLy8gU3VidHJhY3QgcGFyZW50IG9mZnNldHMgYW5k
IGVsZW1lbnQgbWFyZ2lucwotICAgIC8vIG5vdGU6IHdoZW4gYW4gZWxlbWVudCBoYXMgbWFyZ2lu
OiBhdXRvIHRoZSBvZmZzZXRMZWZ0IGFuZCBtYXJnaW5MZWZ0Ci0gICAgLy8gYXJlIHRoZSBzYW1l
IGluIFNhZmFyaSBjYXVzaW5nIG9mZnNldC5sZWZ0IHRvIGluY29ycmVjdGx5IGJlIDAKLSAgICBy
ZXR1cm4gewotICAgIHRvcDogIG9mZnNldC50b3AgIC0gcGFyZW50T2Zmc2V0LnRvcCAtIGpRdWVy
eS5jc3MoIGVsZW0sICJtYXJnaW5Ub3AiLCB0cnVlICksCi0gICAgbGVmdDogb2Zmc2V0LmxlZnQg
LSBwYXJlbnRPZmZzZXQubGVmdCAtIGpRdWVyeS5jc3MoIGVsZW0sICJtYXJnaW5MZWZ0IiwgdHJ1
ZSkKLSAgICB9OwotICAgIH0sCi0KLSAgICBvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkgewotICAg
IHJldHVybiB0aGlzLm1hcChmdW5jdGlvbigpIHsKLSAgICB2YXIgb2Zmc2V0UGFyZW50ID0gdGhp
cy5vZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OwotICAgIHdoaWxlICgg
b2Zmc2V0UGFyZW50ICYmICggIWpRdWVyeS5ub2RlTmFtZSggb2Zmc2V0UGFyZW50LCAiaHRtbCIg
KSAmJiBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsICJwb3NpdGlvbiIpID09PSAic3RhdGljIiAp
ICkgewotICAgIG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7Ci0gICAg
fQotICAgIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Owot
ICAgIH0pOwotICAgIH0KLX0pOwotCi0KLS8vIENyZWF0ZSBzY3JvbGxMZWZ0IGFuZCBzY3JvbGxU
b3AgbWV0aG9kcwotalF1ZXJ5LmVhY2goIHtzY3JvbGxMZWZ0OiAicGFnZVhPZmZzZXQiLCBzY3Jv
bGxUb3A6ICJwYWdlWU9mZnNldCJ9LCBmdW5jdGlvbiggbWV0aG9kLCBwcm9wICkgewotICAgIHZh
ciB0b3AgPSAvWS8udGVzdCggcHJvcCApOwotCi0gICAgalF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1
bmN0aW9uKCB2YWwgKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIGZ1bmN0aW9u
KCBlbGVtLCBtZXRob2QsIHZhbCApIHsKLSAgICB2YXIgd2luID0gZ2V0V2luZG93KCBlbGVtICk7
Ci0KLSAgICBpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkgewotICAgIHJldHVybiB3aW4gPyAocHJv
cCBpbiB3aW4pID8gd2luWyBwcm9wIF0gOgotICAgIHdpbi5kb2N1bWVudC5kb2N1bWVudEVsZW1l
bnRbIG1ldGhvZCBdIDoKLSAgICBlbGVtWyBtZXRob2QgXTsKLSAgICB9Ci0KLSAgICBpZiAoIHdp
biApIHsKLSAgICB3aW4uc2Nyb2xsVG8oCi0gICAgIXRvcCA/IHZhbCA6IGpRdWVyeSggd2luICku
c2Nyb2xsTGVmdCgpLAotICAgIHRvcCA/IHZhbCA6IGpRdWVyeSggd2luICkuc2Nyb2xsVG9wKCkK
LSAgICApOwotCi0gICAgfSBlbHNlIHsKLSAgICBlbGVtWyBtZXRob2QgXSA9IHZhbDsKLSAgICB9
Ci0gICAgfSwgbWV0aG9kLCB2YWwsIGFyZ3VtZW50cy5sZW5ndGgsIG51bGwgKTsKLSAgICB9Owot
fSk7Ci0KLWZ1bmN0aW9uIGdldFdpbmRvdyggZWxlbSApIHsKLSAgICByZXR1cm4galF1ZXJ5Lmlz
V2luZG93KCBlbGVtICkgPwotICAgIGVsZW0gOgotICAgIGVsZW0ubm9kZVR5cGUgPT09IDkgPwot
ICAgIGVsZW0uZGVmYXVsdFZpZXcgfHwgZWxlbS5wYXJlbnRXaW5kb3cgOgotICAgIGZhbHNlOwot
fQotLy8gQ3JlYXRlIGlubmVySGVpZ2h0LCBpbm5lcldpZHRoLCBoZWlnaHQsIHdpZHRoLCBvdXRl
ckhlaWdodCBhbmQgb3V0ZXJXaWR0aCBtZXRob2RzCi1qUXVlcnkuZWFjaCggeyBIZWlnaHQ6ICJo
ZWlnaHQiLCBXaWR0aDogIndpZHRoIiB9LCBmdW5jdGlvbiggbmFtZSwgdHlwZSApIHsKLSAgICBq
UXVlcnkuZWFjaCggeyBwYWRkaW5nOiAiaW5uZXIiICsgbmFtZSwgY29udGVudDogdHlwZSwgIiI6
ICJvdXRlciIgKyBuYW1lIH0sIGZ1bmN0aW9uKCBkZWZhdWx0RXh0cmEsIGZ1bmNOYW1lICkgewot
ICAgIC8vIG1hcmdpbiBpcyBvbmx5IGZvciBvdXRlckhlaWdodCwgb3V0ZXJXaWR0aAotICAgIGpR
dWVyeS5mblsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4sIHZhbHVlICkgewotICAgIHZh
ciBjaGFpbmFibGUgPSBhcmd1bWVudHMubGVuZ3RoICYmICggZGVmYXVsdEV4dHJhIHx8IHR5cGVv
ZiBtYXJnaW4gIT09ICJib29sZWFuIiApLAotICAgIGV4dHJhID0gZGVmYXVsdEV4dHJhIHx8ICgg
bWFyZ2luID09PSB0cnVlIHx8IHZhbHVlID09PSB0cnVlID8gIm1hcmdpbiIgOiAiYm9yZGVyIiAp
OwotCi0gICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCB0eXBl
LCB2YWx1ZSApIHsKLSAgICB2YXIgZG9jOwotCi0gICAgaWYgKCBqUXVlcnkuaXNXaW5kb3coIGVs
ZW0gKSApIHsKLSAgICAvLyBBcyBvZiA1LzgvMjAxMiB0aGlzIHdpbGwgeWllbGQgaW5jb3JyZWN0
IHJlc3VsdHMgZm9yIE1vYmlsZSBTYWZhcmksIGJ1dCB0aGVyZQotICAgIC8vIGlzbid0IGEgd2hv
bGUgbG90IHdlIGNhbiBkby4gU2VlIHB1bGwgcmVxdWVzdCBhdCB0aGlzIFVSTCBmb3IgZGlzY3Vz
c2lvbjoKLSAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9wdWxsLzc2NAot
ICAgIHJldHVybiBlbGVtLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsgImNsaWVudCIgKyBuYW1l
IF07Ci0gICAgfQotCi0gICAgLy8gR2V0IGRvY3VtZW50IHdpZHRoIG9yIGhlaWdodAotICAgIGlm
ICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHsKLSAgICBkb2MgPSBlbGVtLmRvY3VtZW50RWxlbWVu
dDsKLQotICAgIC8vIEVpdGhlciBzY3JvbGxbV2lkdGgvSGVpZ2h0XSBvciBvZmZzZXRbV2lkdGgv
SGVpZ2h0XSBvciBjbGllbnRbV2lkdGgvSGVpZ2h0XSwgd2hpY2hldmVyIGlzIGdyZWF0ZXN0Ci0g
ICAgLy8gdW5mb3J0dW5hdGVseSwgdGhpcyBjYXVzZXMgYnVnICMzODM4IGluIElFNi84IG9ubHks
IGJ1dCB0aGVyZSBpcyBjdXJyZW50bHkgbm8gZ29vZCwgc21hbGwgd2F5IHRvIGZpeCBpdC4KLSAg
ICByZXR1cm4gTWF0aC5tYXgoCi0gICAgZWxlbS5ib2R5WyAic2Nyb2xsIiArIG5hbWUgXSwgZG9j
WyAic2Nyb2xsIiArIG5hbWUgXSwKLSAgICBlbGVtLmJvZHlbICJvZmZzZXQiICsgbmFtZSBdLCBk
b2NbICJvZmZzZXQiICsgbmFtZSBdLAotICAgIGRvY1sgImNsaWVudCIgKyBuYW1lIF0KLSAgICAp
OwotICAgIH0KLQotICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8KLSAgICAvLyBHZXQg
d2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50LCByZXF1ZXN0aW5nIGJ1dCBub3QgZm9yY2lu
ZyBwYXJzZUZsb2F0Ci0gICAgalF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgZXh0cmEgKSA6Ci0KLSAg
ICAvLyBTZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50Ci0gICAgalF1ZXJ5LnN0eWxl
KCBlbGVtLCB0eXBlLCB2YWx1ZSwgZXh0cmEgKTsKLSAgICB9LCB0eXBlLCBjaGFpbmFibGUgPyBt
YXJnaW4gOiB1bmRlZmluZWQsIGNoYWluYWJsZSwgbnVsbCApOwotICAgIH07Ci0gICAgfSk7Ci19
KTsKLS8vIExpbWl0IHNjb3BlIHBvbGx1dGlvbiBmcm9tIGFueSBkZXByZWNhdGVkIEFQSQotLy8g
KGZ1bmN0aW9uKCkgewotCi0vLyB9KSgpOwotLy8gRXhwb3NlIGpRdWVyeSB0byB0aGUgZ2xvYmFs
IG9iamVjdAotd2luZG93LmpRdWVyeSA9IHdpbmRvdy4kID0galF1ZXJ5OwotCi0vLyBFeHBvc2Ug
alF1ZXJ5IGFzIGFuIEFNRCBtb2R1bGUsIGJ1dCBvbmx5IGZvciBBTUQgbG9hZGVycyB0aGF0Ci0v
LyB1bmRlcnN0YW5kIHRoZSBpc3N1ZXMgd2l0aCBsb2FkaW5nIG11bHRpcGxlIHZlcnNpb25zIG9m
IGpRdWVyeQotLy8gaW4gYSBwYWdlIHRoYXQgYWxsIG1pZ2h0IGNhbGwgZGVmaW5lKCkuIFRoZSBs
b2FkZXIgd2lsbCBpbmRpY2F0ZQotLy8gdGhleSBoYXZlIHNwZWNpYWwgYWxsb3dhbmNlcyBmb3Ig
bXVsdGlwbGUgalF1ZXJ5IHZlcnNpb25zIGJ5Ci0vLyBzcGVjaWZ5aW5nIGRlZmluZS5hbWQualF1
ZXJ5ID0gdHJ1ZS4gUmVnaXN0ZXIgYXMgYSBuYW1lZCBtb2R1bGUsCi0vLyBzaW5jZSBqUXVlcnkg
Y2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRoIG90aGVyIGZpbGVzIHRoYXQgbWF5IHVzZSBkZWZpbmUs
Ci0vLyBidXQgbm90IHVzZSBhIHByb3BlciBjb25jYXRlbmF0aW9uIHNjcmlwdCB0aGF0IHVuZGVy
c3RhbmRzIGFub255bW91cwotLy8gQU1EIG1vZHVsZXMuIEEgbmFtZWQgQU1EIGlzIHNhZmVzdCBh
bmQgbW9zdCByb2J1c3Qgd2F5IHRvIHJlZ2lzdGVyLgotLy8gTG93ZXJjYXNlIGpxdWVyeSBpcyB1
c2VkIGJlY2F1c2UgQU1EIG1vZHVsZSBuYW1lcyBhcmUgZGVyaXZlZCBmcm9tCi0vLyBmaWxlIG5h
bWVzLCBhbmQgalF1ZXJ5IGlzIG5vcm1hbGx5IGRlbGl2ZXJlZCBpbiBhIGxvd2VyY2FzZSBmaWxl
IG5hbWUuCi0vLyBEbyB0aGlzIGFmdGVyIGNyZWF0aW5nIHRoZSBnbG9iYWwgc28gdGhhdCBpZiBh
biBBTUQgbW9kdWxlIHdhbnRzIHRvIGNhbGwKLS8vIG5vQ29uZmxpY3QgdG8gaGlkZSB0aGlzIHZl
cnNpb24gb2YgalF1ZXJ5LCBpdCB3aWxsIHdvcmsuCi1pZiAoIHR5cGVvZiBkZWZpbmUgPT09ICJm
dW5jdGlvbiIgJiYgZGVmaW5lLmFtZCAmJiBkZWZpbmUuYW1kLmpRdWVyeSApIHsKLSAgICBkZWZp
bmUoICJqcXVlcnkiLCBbXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4galF1ZXJ5OyB9ICk7Ci19Ci0K
LX0pKCB3aW5kb3cgKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9iYWNrYm9uZS9ib3dlcl9jb21wb25lbnRzL3RvZG9tdmMtY29tbW9uL2Jhc2Uu
Y3NzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1v
bi9iYXNlLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM3Y2Q5Y2M4YzdlMDdl
NDY5MWQ0ZWUxYmFhNzAyZTQ5OTNjYTIxYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9ib3dlcl9jb21wb25lbnRzL3Rv
ZG9tdmMtY29tbW9uL2Jhc2UuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNTU0ICswLDAgQEAKLWh0
bWwsCi1ib2R5IHsKLSAgICBtYXJnaW46IDA7Ci0gICAgcGFkZGluZzogMDsKLX0KLQotYnV0dG9u
IHsKLSAgICBtYXJnaW46IDA7Ci0gICAgcGFkZGluZzogMDsKLSAgICBib3JkZXI6IDA7Ci0gICAg
YmFja2dyb3VuZDogbm9uZTsKLSAgICBmb250LXNpemU6IDEwMCU7Ci0gICAgdmVydGljYWwtYWxp
Z246IGJhc2VsaW5lOwotICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwotICAgIGNvbG9yOiBpbmhl
cml0OwotICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKLSAgICAvKi1tb3otYXBwZWFyYW5j
ZTogbm9uZTsqLwotICAgIC1tcy1hcHBlYXJhbmNlOiBub25lOwotICAgIC1vLWFwcGVhcmFuY2U6
IG5vbmU7Ci0gICAgYXBwZWFyYW5jZTogbm9uZTsKLX0KLQotYm9keSB7Ci0gICAgZm9udDogMTRw
eCAnSGVsdmV0aWNhIE5ldWUnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOwotICAgIGxp
bmUtaGVpZ2h0OiAxLjRlbTsKLSAgICBiYWNrZ3JvdW5kOiAjZWFlYWVhIHVybCgnYmcucG5nJyk7
Ci0gICAgY29sb3I6ICM0ZDRkNGQ7Ci0gICAgd2lkdGg6IDU1MHB4OwotICAgIG1hcmdpbjogMCBh
dXRvOwotICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwotICAgIC1tb3ot
Zm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwotICAgIC1tcy1mb250LXNtb290aGluZzogYW50
aWFsaWFzZWQ7Ci0gICAgLW8tZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwotICAgIGZvbnQt
c21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLX0KLQotI3RvZG9hcHAgewotICAgIGJhY2tncm91bmQ6
ICNmZmY7Ci0gICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwotICAgIG1h
cmdpbjogMTMwcHggMCA0MHB4IDA7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsKLSAgICBw
b3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMnB4OwotICAg
IGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAycHg7Ci0gICAgYm94LXNoYWRvdzogMCAycHggNnB4
IDAgcmdiYSgwLCAwLCAwLCAwLjIpLAotICAgIDAgMjVweCA1MHB4IDAgcmdiYSgwLCAwLCAwLCAw
LjE1KTsKLX0KLQotI3RvZG9hcHA6YmVmb3JlIHsKLSAgICBjb250ZW50OiAnJzsKLSAgICBib3Jk
ZXItbGVmdDogMXB4IHNvbGlkICNmNWQ2ZDY7Ci0gICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQg
I2Y1ZDZkNjsKLSAgICB3aWR0aDogMnB4OwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0
b3A6IDA7Ci0gICAgbGVmdDogNDBweDsKLSAgICBoZWlnaHQ6IDEwMCU7Ci19Ci0KLSN0b2RvYXBw
IGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHsKLSAgICBmb250LXN0eWxlOiBpdGFs
aWM7Ci19Ci0KLSN0b2RvYXBwIGlucHV0OjotbW96LXBsYWNlaG9sZGVyIHsKLSAgICBmb250LXN0
eWxlOiBpdGFsaWM7Ci0gICAgY29sb3I6ICNhOWE5YTk7Ci19Ci0KLSN0b2RvYXBwIGgxIHsKLSAg
ICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAtMTIwcHg7Ci0gICAgd2lkdGg6IDEwMCU7
Ci0gICAgZm9udC1zaXplOiA3MHB4OwotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotICAgIHRleHQt
YWxpZ246IGNlbnRlcjsKLSAgICBjb2xvcjogI2IzYjNiMzsKLSAgICBjb2xvcjogcmdiYSgyNTUs
IDI1NSwgMjU1LCAwLjMpOwotICAgIHRleHQtc2hhZG93OiAtMXB4IC0xcHggcmdiYSgwLCAwLCAw
LCAwLjIpOwotICAgIC13ZWJraXQtdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsK
LSAgICAtbW96LXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7Ci0gICAgLW1zLXRl
eHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7Ci0gICAgLW8tdGV4dC1yZW5kZXJpbmc6
IG9wdGltaXplTGVnaWJpbGl0eTsKLSAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmls
aXR5OwotfQotCi0jaGVhZGVyIHsKLSAgICBwYWRkaW5nLXRvcDogMTVweDsKLSAgICBib3JkZXIt
cmFkaXVzOiBpbmhlcml0OwotfQotCi0jaGVhZGVyOmJlZm9yZSB7Ci0gICAgY29udGVudDogJyc7
Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsKLSAgICByaWdodDogMDsKLSAg
ICBsZWZ0OiAwOwotICAgIGhlaWdodDogMTVweDsKLSAgICB6LWluZGV4OiAyOwotICAgIGJvcmRl
ci1ib3R0b206IDFweCBzb2xpZCAjNmM2MTVjOwotICAgIGJhY2tncm91bmQ6ICM4ZDdkNzc7Ci0g
ICAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJv
dHRvbSwgZnJvbShyZ2JhKDEzMiwgMTEwLCAxMDAsIDAuOCkpLHRvKHJnYmEoMTAxLCA4NCwgNzYs
IDAuOCkpKTsKLSAgICBiYWNrZ3JvdW5kOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIHJn
YmEoMTMyLCAxMTAsIDEwMCwgMC44KSwgcmdiYSgxMDEsIDg0LCA3NiwgMC44KSk7Ci0gICAgYmFj
a2dyb3VuZDogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCByZ2JhKDEzMiwgMTEwLCAxMDAsIDAu
OCksIHJnYmEoMTAxLCA4NCwgNzYsIDAuOCkpOwotICAgIGJhY2tncm91bmQ6IC1vLWxpbmVhci1n
cmFkaWVudCh0b3AsIHJnYmEoMTMyLCAxMTAsIDEwMCwgMC44KSwgcmdiYSgxMDEsIDg0LCA3Niwg
MC44KSk7Ci0gICAgYmFja2dyb3VuZDogLW1zLWxpbmVhci1ncmFkaWVudCh0b3AsIHJnYmEoMTMy
LCAxMTAsIDEwMCwgMC44KSwgcmdiYSgxMDEsIDg0LCA3NiwgMC44KSk7Ci0gICAgYmFja2dyb3Vu
ZDogbGluZWFyLWdyYWRpZW50KHRvcCwgcmdiYSgxMzIsIDExMCwgMTAwLCAwLjgpLCByZ2JhKDEw
MSwgODQsIDc2LCAwLjgpKTsKLSAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAxcHg7Ci0gICAg
Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDFweDsKLX0KLQotI25ldy10b2RvLAotLmVkaXQgewot
ICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICBtYXJnaW46IDA7Ci0gICAgd2lkdGg6IDEwMCU7
Ci0gICAgZm9udC1zaXplOiAyNHB4OwotICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwotICAgIGxp
bmUtaGVpZ2h0OiAxLjRlbTsKLSAgICBib3JkZXI6IDA7Ci0gICAgb3V0bGluZTogbm9uZTsKLSAg
ICBjb2xvcjogaW5oZXJpdDsKLSAgICBwYWRkaW5nOiA2cHg7Ci0gICAgYm9yZGVyOiAxcHggc29s
aWQgIzk5OTsKLSAgICBib3gtc2hhZG93OiBpbnNldCAwIC0xcHggNXB4IDAgcmdiYSgwLCAwLCAw
LCAwLjIpOwotICAgIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDsKLSAgICAtbW96LWJv
eC1zaXppbmc6IGJvcmRlci1ib3g7Ci0gICAgLW1zLWJveC1zaXppbmc6IGJvcmRlci1ib3g7Ci0g
ICAgLW8tYm94LXNpemluZzogYm9yZGVyLWJveDsKLSAgICBib3gtc2l6aW5nOiBib3JkZXItYm94
OwotICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwotICAgIC1tb3otZm9u
dC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwotICAgIC1tcy1mb250LXNtb290aGluZzogYW50aWFs
aWFzZWQ7Ci0gICAgLW8tZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwotICAgIGZvbnQtc21v
b3RoaW5nOiBhbnRpYWxpYXNlZDsKLX0KLQotI25ldy10b2RvIHsKLSAgICBwYWRkaW5nOiAxNnB4
IDE2cHggMTZweCA2MHB4OwotICAgIGJvcmRlcjogbm9uZTsKLSAgICBiYWNrZ3JvdW5kOiByZ2Jh
KDAsIDAsIDAsIDAuMDIpOwotICAgIHotaW5kZXg6IDI7Ci0gICAgYm94LXNoYWRvdzogbm9uZTsK
LX0KLQotI21haW4gewotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICB6LWluZGV4OiAyOwot
ICAgIGJvcmRlci10b3A6IDFweCBkb3R0ZWQgI2FkYWRhZDsKLX0KLQotbGFiZWxbZm9yPSd0b2dn
bGUtYWxsJ10gewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLSN0b2dnbGUtYWxsIHsKLSAgICBw
b3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAtNDJweDsKLSAgICBsZWZ0OiAtNHB4OwotICAg
IHdpZHRoOiA0MHB4OwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLSAgICBib3JkZXI6IG5vbmU7
IC8qIE1vYmlsZSBTYWZhcmkgKi8KLX0KLQotI3RvZ2dsZS1hbGw6YmVmb3JlIHsKLSAgICBjb250
ZW50OiAnwrsnOwotICAgIGZvbnQtc2l6ZTogMjhweDsKLSAgICBjb2xvcjogI2Q5ZDlkOTsKLSAg
ICBwYWRkaW5nOiAwIDI1cHggN3B4OwotfQotCi0jdG9nZ2xlLWFsbDpjaGVja2VkOmJlZm9yZSB7
Ci0gICAgY29sb3I6ICM3MzczNzM7Ci19Ci0KLSN0b2RvLWxpc3QgewotICAgIG1hcmdpbjogMDsK
LSAgICBwYWRkaW5nOiAwOwotICAgIGxpc3Qtc3R5bGU6IG5vbmU7Ci19Ci0KLSN0b2RvLWxpc3Qg
bGkgewotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICBmb250LXNpemU6IDI0cHg7Ci0gICAg
Ym9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCAjY2NjOwotfQotCi0jdG9kby1saXN0IGxpOmxhc3Qt
Y2hpbGQgewotICAgIGJvcmRlci1ib3R0b206IG5vbmU7Ci19Ci0KLSN0b2RvLWxpc3QgbGkuZWRp
dGluZyB7Ci0gICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKLSAgICBwYWRkaW5nOiAwOwotfQotCi0j
dG9kby1saXN0IGxpLmVkaXRpbmcgLmVkaXQgewotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIHdp
ZHRoOiA1MDZweDsKLSAgICBwYWRkaW5nOiAxM3B4IDE3cHggMTJweCAxN3B4OwotICAgIG1hcmdp
bjogMCAwIDAgNDNweDsKLX0KLQotI3RvZG8tbGlzdCBsaS5lZGl0aW5nIC52aWV3IHsKLSAgICBk
aXNwbGF5OiBub25lOwotfQotCi0jdG9kby1saXN0IGxpIC50b2dnbGUgewotICAgIHRleHQtYWxp
Z246IGNlbnRlcjsKLSAgICB3aWR0aDogNDBweDsKLSAgICAvKiBhdXRvLCBzaW5jZSBub24tV2Vi
S2l0IGJyb3dzZXJzIGRvZXNuJ3Qgc3VwcG9ydCBpbnB1dCBzdHlsaW5nICovCi0gICAgaGVpZ2h0
OiBhdXRvOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0gICAgYm90dG9t
OiAwOwotICAgIG1hcmdpbjogYXV0byAwOwotICAgIGJvcmRlcjogbm9uZTsgLyogTW9iaWxlIFNh
ZmFyaSAqLwotICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKLSAgICAvKi1tb3otYXBwZWFy
YW5jZTogbm9uZTsqLwotICAgIC1tcy1hcHBlYXJhbmNlOiBub25lOwotICAgIC1vLWFwcGVhcmFu
Y2U6IG5vbmU7Ci0gICAgYXBwZWFyYW5jZTogbm9uZTsKLX0KLQotI3RvZG8tbGlzdCBsaSAudG9n
Z2xlOmFmdGVyIHsKLSAgICBjb250ZW50OiAn4pyUJzsKLSAgICBsaW5lLWhlaWdodDogNDNweDsg
LyogNDAgKyBhIGNvdXBsZSBvZiBwaXhlbHMgdmlzdWFsIGFkanVzdG1lbnQgKi8KLSAgICBmb250
LXNpemU6IDIwcHg7Ci0gICAgY29sb3I6ICNkOWQ5ZDk7Ci0gICAgdGV4dC1zaGFkb3c6IDAgLTFw
eCAwICNiZmJmYmY7Ci19Ci0KLSN0b2RvLWxpc3QgbGkgLnRvZ2dsZTpjaGVja2VkOmFmdGVyIHsK
LSAgICBjb2xvcjogIzg1YWRhNzsKLSAgICB0ZXh0LXNoYWRvdzogMCAxcHggMCAjNjY5OTkxOwot
ICAgIGJvdHRvbTogMXB4OwotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLX0KLQotI3RvZG8tbGlz
dCBsaSBsYWJlbCB7Ci0gICAgd29yZC1icmVhazogYnJlYWstd29yZDsKLSAgICBwYWRkaW5nOiAx
NXB4OwotICAgIG1hcmdpbi1sZWZ0OiA0NXB4OwotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIGxp
bmUtaGVpZ2h0OiAxLjI7Ci0gICAgLXdlYmtpdC10cmFuc2l0aW9uOiBjb2xvciAwLjRzOwotICAg
IC1tb3otdHJhbnNpdGlvbjogY29sb3IgMC40czsKLSAgICAtbXMtdHJhbnNpdGlvbjogY29sb3Ig
MC40czsKLSAgICAtby10cmFuc2l0aW9uOiBjb2xvciAwLjRzOwotICAgIHRyYW5zaXRpb246IGNv
bG9yIDAuNHM7Ci19Ci0KLSN0b2RvLWxpc3QgbGkuY29tcGxldGVkIGxhYmVsIHsKLSAgICBjb2xv
cjogI2E5YTlhOTsKLSAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsKLX0KLQotI3Rv
ZG8tbGlzdCBsaSAuZGVzdHJveSB7Ci0gICAgZGlzcGxheTogbm9uZTsKLSAgICBwb3NpdGlvbjog
YWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIHJpZ2h0OiAxMHB4OwotICAgIGJvdHRvbTogMDsK
LSAgICB3aWR0aDogNDBweDsKLSAgICBoZWlnaHQ6IDQwcHg7Ci0gICAgbWFyZ2luOiBhdXRvIDA7
Ci0gICAgZm9udC1zaXplOiAyMnB4OwotICAgIGNvbG9yOiAjYTg4YThhOwotICAgIC13ZWJraXQt
dHJhbnNpdGlvbjogYWxsIDAuMnM7Ci0gICAgLW1vei10cmFuc2l0aW9uOiBhbGwgMC4yczsKLSAg
ICAtbXMtdHJhbnNpdGlvbjogYWxsIDAuMnM7Ci0gICAgLW8tdHJhbnNpdGlvbjogYWxsIDAuMnM7
Ci0gICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7Ci19Ci0KLSN0b2RvLWxpc3QgbGkgLmRlc3Ryb3k6
aG92ZXIgewotICAgIHRleHQtc2hhZG93OiAwIDAgMXB4ICMwMDAsCi0gICAgIDAgMCAxMHB4IHJn
YmEoMTk5LCAxMDcsIDEwNywgMC44KTsKLSAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMS4z
KTsKLSAgICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMS4zKTsKLSAgICAtbXMtdHJhbnNmb3JtOiBz
Y2FsZSgxLjMpOwotICAgIC1vLXRyYW5zZm9ybTogc2NhbGUoMS4zKTsKLSAgICB0cmFuc2Zvcm06
IHNjYWxlKDEuMyk7Ci19Ci0KLSN0b2RvLWxpc3QgbGkgLmRlc3Ryb3k6YWZ0ZXIgewotICAgIGNv
bnRlbnQ6ICfinJYnOwotfQotCi0jdG9kby1saXN0IGxpOmhvdmVyIC5kZXN0cm95IHsKLSAgICBk
aXNwbGF5OiBibG9jazsKLX0KLQotI3RvZG8tbGlzdCBsaSAuZWRpdCB7Ci0gICAgZGlzcGxheTog
bm9uZTsKLX0KLQotI3RvZG8tbGlzdCBsaS5lZGl0aW5nOmxhc3QtY2hpbGQgewotICAgIG1hcmdp
bi1ib3R0b206IC0xcHg7Ci19Ci0KLSNmb290ZXIgewotICAgIGNvbG9yOiAjNzc3OwotICAgIHBh
ZGRpbmc6IDAgMTVweDsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgcmlnaHQ6IDA7Ci0g
ICAgYm90dG9tOiAtMzFweDsKLSAgICBsZWZ0OiAwOwotICAgIGhlaWdodDogMjBweDsKLSAgICB6
LWluZGV4OiAxOwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLX0KLQotI2Zvb3RlcjpiZWZvcmUg
ewotICAgIGNvbnRlbnQ6ICcnOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICByaWdodDog
MDsKLSAgICBib3R0b206IDMxcHg7Ci0gICAgbGVmdDogMDsKLSAgICBoZWlnaHQ6IDUwcHg7Ci0g
ICAgei1pbmRleDogLTE7Ci0gICAgYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwg
MC4zKSwKLSAgICAwIDZweCAwIC0zcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpLAotICAgIDAg
N3B4IDFweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4zKSwKLSAgICAwIDQzcHggMCAtNnB4IHJnYmEo
MjU1LCAyNTUsIDI1NSwgMC44KSwKLSAgICAwIDQ0cHggMnB4IC02cHggcmdiYSgwLCAwLCAwLCAw
LjIpOwotfQotCi0jdG9kby1jb3VudCB7Ci0gICAgZmxvYXQ6IGxlZnQ7Ci0gICAgdGV4dC1hbGln
bjogbGVmdDsKLX0KLQotI2ZpbHRlcnMgewotICAgIG1hcmdpbjogMDsKLSAgICBwYWRkaW5nOiAw
OwotICAgIGxpc3Qtc3R5bGU6IG5vbmU7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHJp
Z2h0OiAwOwotICAgIGxlZnQ6IDA7Ci19Ci0KLSNmaWx0ZXJzIGxpIHsKLSAgICBkaXNwbGF5OiBp
bmxpbmU7Ci19Ci0KLSNmaWx0ZXJzIGxpIGEgewotICAgIGNvbG9yOiAjODM3NTZmOwotICAgIG1h
cmdpbjogMnB4OwotICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKLX0KLQotI2ZpbHRlcnMgbGkg
YS5zZWxlY3RlZCB7Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci19Ci0KLSNjbGVhci1jb21wbGV0
ZWQgewotICAgIGZsb2F0OiByaWdodDsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgbGlu
ZS1oZWlnaHQ6IDIwcHg7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwotICAgIGJhY2tncm91
bmQ6IHJnYmEoMCwgMCwgMCwgMC4xKTsKLSAgICBmb250LXNpemU6IDExcHg7Ci0gICAgcGFkZGlu
ZzogMCAxMHB4OwotICAgIGJvcmRlci1yYWRpdXM6IDNweDsKLSAgICBib3gtc2hhZG93OiAwIC0x
cHggMCAwIHJnYmEoMCwgMCwgMCwgMC4yKTsKLX0KLQotI2NsZWFyLWNvbXBsZXRlZDpob3ZlciB7
Ci0gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjE1KTsKLSAgICBib3gtc2hhZG93OiAw
IC0xcHggMCAwIHJnYmEoMCwgMCwgMCwgMC4zKTsKLX0KLQotI2luZm8gewotICAgIG1hcmdpbjog
NjVweCBhdXRvIDA7Ci0gICAgY29sb3I6ICNhNmE2YTY7Ci0gICAgZm9udC1zaXplOiAxMnB4Owot
ICAgIHRleHQtc2hhZG93OiAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKLSAgICB0
ZXh0LWFsaWduOiBjZW50ZXI7Ci19Ci0KLSNpbmZvIGEgewotICAgIGNvbG9yOiBpbmhlcml0Owot
fQotCi0vKgotICAgIEhhY2sgdG8gcmVtb3ZlIGJhY2tncm91bmQgZnJvbSBNb2JpbGUgU2FmYXJp
LgotICAgIENhbid0IHVzZSBpdCBnbG9iYWxseSBzaW5jZSBpdCBkZXN0cm95cyBjaGVja2JveGVz
IGluIEZpcmVmb3ggYW5kIE9wZXJhCi0qLwotQG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWlu
LWRldmljZS1waXhlbC1yYXRpbzowKSB7Ci0gICAgI3RvZ2dsZS1hbGwsCi0gICAgI3RvZG8tbGlz
dCBsaSAudG9nZ2xlIHsKLSAgICBiYWNrZ3JvdW5kOiBub25lOwotICAgIH0KLQotICAgICN0b2Rv
LWxpc3QgbGkgLnRvZ2dsZSB7Ci0gICAgaGVpZ2h0OiA0MHB4OwotICAgIH0KLQotICAgICN0b2dn
bGUtYWxsIHsKLSAgICB0b3A6IC01NnB4OwotICAgIGxlZnQ6IC0xNXB4OwotICAgIHdpZHRoOiA2
NXB4OwotICAgIGhlaWdodDogNDFweDsKLSAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDkw
ZGVnKTsKLSAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7Ci0gICAgLXdlYmtpdC1hcHBlYXJh
bmNlOiBub25lOwotICAgIGFwcGVhcmFuY2U6IG5vbmU7Ci0gICAgfQotfQotCi0uaGlkZGVuewot
ICAgIGRpc3BsYXk6bm9uZTsKLX0KLQotaHIgewotICAgIG1hcmdpbjogMjBweCAwOwotICAgIGJv
cmRlcjogMDsKLSAgICBib3JkZXItdG9wOiAxcHggZGFzaGVkICNDNUM1QzU7Ci0gICAgYm9yZGVy
LWJvdHRvbTogMXB4IGRhc2hlZCAjRjdGN0Y3OwotfQotCi0ubGVhcm4gYSB7Ci0gICAgZm9udC13
ZWlnaHQ6IG5vcm1hbDsKLSAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Ci0gICAgY29sb3I6ICNi
ODNmNDU7Ci19Ci0KLS5sZWFybiBhOmhvdmVyIHsKLSAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVy
bGluZTsKLSAgICBjb2xvcjogIzc4N2U3ZTsKLX0KLQotLmxlYXJuIGgzLAotLmxlYXJuIGg0LAot
LmxlYXJuIGg1IHsKLSAgICBtYXJnaW46IDEwcHggMDsKLSAgICBmb250LXdlaWdodDogNTAwOwot
ICAgIGxpbmUtaGVpZ2h0OiAxLjI7Ci0gICAgY29sb3I6ICMwMDA7Ci19Ci0KLS5sZWFybiBoMyB7
Ci0gICAgZm9udC1zaXplOiAyNHB4OwotfQotCi0ubGVhcm4gaDQgewotICAgIGZvbnQtc2l6ZTog
MThweDsKLX0KLQotLmxlYXJuIGg1IHsKLSAgICBtYXJnaW4tYm90dG9tOiAwOwotICAgIGZvbnQt
c2l6ZTogMTRweDsKLX0KLQotLmxlYXJuIHVsIHsKLSAgICBwYWRkaW5nOiAwOwotICAgIG1hcmdp
bjogMCAwIDMwcHggMjVweDsKLX0KLQotLmxlYXJuIGxpIHsKLSAgICBsaW5lLWhlaWdodDogMjBw
eDsKLX0KLQotLmxlYXJuIHAgewotICAgIGZvbnQtc2l6ZTogMTVweDsKLSAgICBmb250LXdlaWdo
dDogMzAwOwotICAgIGxpbmUtaGVpZ2h0OiAxLjM7Ci0gICAgbWFyZ2luLXRvcDogMDsKLSAgICBt
YXJnaW4tYm90dG9tOiAwOwotfQotCi0ucXVvdGUgewotICAgIGJvcmRlcjogbm9uZTsKLSAgICBt
YXJnaW46IDIwcHggMCA2MHB4IDA7Ci19Ci0KLS5xdW90ZSBwIHsKLSAgICBmb250LXN0eWxlOiBp
dGFsaWM7Ci19Ci0KLS5xdW90ZSBwOmJlZm9yZSB7Ci0gICAgY29udGVudDogJ+KAnCc7Ci0gICAg
Zm9udC1zaXplOiA1MHB4OwotICAgIG9wYWNpdHk6IC4xNTsKLSAgICBwb3NpdGlvbjogYWJzb2x1
dGU7Ci0gICAgdG9wOiAtMjBweDsKLSAgICBsZWZ0OiAzcHg7Ci19Ci0KLS5xdW90ZSBwOmFmdGVy
IHsKLSAgICBjb250ZW50OiAn4oCdJzsKLSAgICBmb250LXNpemU6IDUwcHg7Ci0gICAgb3BhY2l0
eTogLjE1OwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICBib3R0b206IC00MnB4OwotICAg
IHJpZ2h0OiAzcHg7Ci19Ci0KLS5xdW90ZSBmb290ZXIgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0
ZTsKLSAgICBib3R0b206IC00MHB4OwotICAgIHJpZ2h0OiAwOwotfQotCi0ucXVvdGUgZm9vdGVy
IGltZyB7Ci0gICAgYm9yZGVyLXJhZGl1czogM3B4OwotfQotCi0ucXVvdGUgZm9vdGVyIGEgewot
ICAgIG1hcmdpbi1sZWZ0OiA1cHg7Ci0gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKLX0KLQot
LnNwZWVjaC1idWJibGUgewotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICBwYWRkaW5nOiAx
MHB4OwotICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgLjA0KTsKLSAgICBib3JkZXItcmFk
aXVzOiA1cHg7Ci19Ci0KLS5zcGVlY2gtYnViYmxlOmFmdGVyIHsKLSAgICBjb250ZW50OiAnJzsK
LSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAxMDAlOwotICAgIHJpZ2h0OiAzMHB4
OwotICAgIGJvcmRlcjogMTNweCBzb2xpZCB0cmFuc3BhcmVudDsKLSAgICBib3JkZXItdG9wLWNv
bG9yOiByZ2JhKDAsIDAsIDAsIC4wNCk7Ci19Ci0KLS8qKmJvZHkqLy5sZWFybi1iYXIgPiAubGVh
cm4gewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB3aWR0aDogMjcycHg7Ci0gICAgdG9w
OiA4cHg7Ci0gICAgbGVmdDogLTMwMHB4OwotICAgIHBhZGRpbmc6IDEwcHg7Ci0gICAgYm9yZGVy
LXJhZGl1czogNXB4OwotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwg
LjYpOwotICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IGxlZnQ7Ci0gICAgdHJhbnNpdGlvbi1kdXJh
dGlvbjogNTAwbXM7Ci19Ci0KLUBtZWRpYSAobWluLXdpZHRoOiA4OTlweCkgewotICAgIC8qKmJv
ZHkqLy5sZWFybi1iYXIgewotICAgIHdpZHRoOiBhdXRvOwotICAgIG1hcmdpbjogMCAwIDAgMzAw
cHg7Ci0gICAgfQotICAgIC8qKmJvZHkqLy5sZWFybi1iYXIgPiAubGVhcm4gewotICAgIGxlZnQ6
IDhweDsKLSAgICB9Ci0gICAgLyoqYm9keSovLmxlYXJuLWJhciAjdG9kb2FwcCB7Ci0gICAgd2lk
dGg6IDU1MHB4OwotICAgIG1hcmdpbjogMTMwcHggYXV0byA0MHB4IGF1dG87Ci0gICAgfQotfQpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvYm93ZXJfY29tcG9uZW50cy90b2RvbXZj
LWNvbW1vbi9iYXNlLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvYm93ZXJfY29tcG9uZW50cy90
b2RvbXZjLWNvbW1vbi9iYXNlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWJm
NDI0MGZhZDlhOWMxMTk0YzgxNTg2ZGMyOTE2YmVjMWNjYTc4Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL2Jvd2VyX2Nv
bXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFzZS5qcworKysgL2Rldi9udWxsCkBAIC0xLDIwOSAr
MCwwIEBACi0oZnVuY3Rpb24gKCkgewotICAgICd1c2Ugc3RyaWN0JzsKLQotICAgIC8vIFVuZGVy
c2NvcmUncyBUZW1wbGF0ZSBNb2R1bGUKLSAgICAvLyBDb3VydGVzeSBvZiB1bmRlcnNjb3JlanMu
b3JnCi0gICAgdmFyIF8gPSAoZnVuY3Rpb24gKF8pIHsKLSAgICBfLmRlZmF1bHRzID0gZnVuY3Rp
b24gKG9iamVjdCkgewotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgcmV0dXJuIG9iamVjdDsKLSAg
ICB9Ci0gICAgZm9yICh2YXIgYXJnc0luZGV4ID0gMSwgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5s
ZW5ndGg7IGFyZ3NJbmRleCA8IGFyZ3NMZW5ndGg7IGFyZ3NJbmRleCsrKSB7Ci0gICAgdmFyIGl0
ZXJhYmxlID0gYXJndW1lbnRzW2FyZ3NJbmRleF07Ci0gICAgaWYgKGl0ZXJhYmxlKSB7Ci0gICAg
Zm9yICh2YXIga2V5IGluIGl0ZXJhYmxlKSB7Ci0gICAgaWYgKG9iamVjdFtrZXldID09IG51bGwp
IHsKLSAgICBvYmplY3Rba2V5XSA9IGl0ZXJhYmxlW2tleV07Ci0gICAgfQotICAgIH0KLSAgICB9
Ci0gICAgfQotICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotCi0gICAgLy8gQnkgZGVmYXVsdCwg
VW5kZXJzY29yZSB1c2VzIEVSQi1zdHlsZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLCBjaGFuZ2UgdGhl
Ci0gICAgLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBk
ZWxpbWl0ZXJzLgotICAgIF8udGVtcGxhdGVTZXR0aW5ncyA9IHsKLSAgICBldmFsdWF0ZSAgICA6
IC88JShbXHNcU10rPyklPi9nLAotICAgIGludGVycG9sYXRlIDogLzwlPShbXHNcU10rPyklPi9n
LAotICAgIGVzY2FwZSAgICAgIDogLzwlLShbXHNcU10rPyklPi9nCi0gICAgfTsKLQotICAgIC8v
IFdoZW4gY3VzdG9taXppbmcgYHRlbXBsYXRlU2V0dGluZ3NgLCBpZiB5b3UgZG9uJ3Qgd2FudCB0
byBkZWZpbmUgYW4KLSAgICAvLyBpbnRlcnBvbGF0aW9uLCBldmFsdWF0aW9uIG9yIGVzY2FwaW5n
IHJlZ2V4LCB3ZSBuZWVkIG9uZSB0aGF0IGlzCi0gICAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0
Y2guCi0gICAgdmFyIG5vTWF0Y2ggPSAvKC4pXi87Ci0KLSAgICAvLyBDZXJ0YWluIGNoYXJhY3Rl
cnMgbmVlZCB0byBiZSBlc2NhcGVkIHNvIHRoYXQgdGhleSBjYW4gYmUgcHV0IGludG8gYQotICAg
IC8vIHN0cmluZyBsaXRlcmFsLgotICAgIHZhciBlc2NhcGVzID0gewotICAgICInIjogICAgICAi
JyIsCi0gICAgJ1xcJzogICAgICdcXCcsCi0gICAgJ1xyJzogICAgICdyJywKLSAgICAnXG4nOiAg
ICAgJ24nLAotICAgICdcdCc6ICAgICAndCcsCi0gICAgJ1x1MjAyOCc6ICd1MjAyOCcsCi0gICAg
J1x1MjAyOSc6ICd1MjAyOScKLSAgICB9OwotCi0gICAgdmFyIGVzY2FwZXIgPSAvXFx8J3xccnxc
bnxcdHxcdTIwMjh8XHUyMDI5L2c7Ci0KLSAgICAvLyBKYXZhU2NyaXB0IG1pY3JvLXRlbXBsYXRp
bmcsIHNpbWlsYXIgdG8gSm9obiBSZXNpZydzIGltcGxlbWVudGF0aW9uLgotICAgIC8vIFVuZGVy
c2NvcmUgdGVtcGxhdGluZyBoYW5kbGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMg
d2hpdGVzcGFjZSwKLSAgICAvLyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBp
bnRlcnBvbGF0ZWQgY29kZS4KLSAgICBfLnRlbXBsYXRlID0gZnVuY3Rpb24odGV4dCwgZGF0YSwg
c2V0dGluZ3MpIHsKLSAgICB2YXIgcmVuZGVyOwotICAgIHNldHRpbmdzID0gXy5kZWZhdWx0cyh7
fSwgc2V0dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5ncyk7Ci0KLSAgICAvLyBDb21iaW5lIGRlbGlt
aXRlcnMgaW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlvbi4KLSAgICB2
YXIgbWF0Y2hlciA9IG5ldyBSZWdFeHAoWwotICAgIChzZXR0aW5ncy5lc2NhcGUgfHwgbm9NYXRj
aCkuc291cmNlLAotICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNoKS5zb3VyY2Us
Ci0gICAgKHNldHRpbmdzLmV2YWx1YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZQotICAgIF0uam9pbign
fCcpICsgJ3wkJywgJ2cnKTsKLQotICAgIC8vIENvbXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwg
ZXNjYXBpbmcgc3RyaW5nIGxpdGVyYWxzIGFwcHJvcHJpYXRlbHkuCi0gICAgdmFyIGluZGV4ID0g
MDsKLSAgICB2YXIgc291cmNlID0gIl9fcCs9JyI7Ci0gICAgdGV4dC5yZXBsYWNlKG1hdGNoZXIs
IGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGUsIGludGVycG9sYXRlLCBldmFsdWF0ZSwgb2Zmc2V0KSB7
Ci0gICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCkKLSAgICAucmVwbGFjZShl
c2NhcGVyLCBmdW5jdGlvbihtYXRjaCkgeyByZXR1cm4gJ1xcJyArIGVzY2FwZXNbbWF0Y2hdOyB9
KTsKLQotICAgIGlmIChlc2NhcGUpIHsKLSAgICBzb3VyY2UgKz0gIicrXG4oKF9fdD0oIiArIGVz
Y2FwZSArICIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcbiciOwotICAgIH0KLSAgICBpZiAo
aW50ZXJwb2xhdGUpIHsKLSAgICBzb3VyY2UgKz0gIicrXG4oKF9fdD0oIiArIGludGVycG9sYXRl
ICsgIikpPT1udWxsPycnOl9fdCkrXG4nIjsKLSAgICB9Ci0gICAgaWYgKGV2YWx1YXRlKSB7Ci0g
ICAgc291cmNlICs9ICInO1xuIiArIGV2YWx1YXRlICsgIlxuX19wKz0nIjsKLSAgICB9Ci0gICAg
aW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7Ci0gICAgcmV0dXJuIG1hdGNoOwotICAgIH0p
OwotICAgIHNvdXJjZSArPSAiJztcbiI7Ci0KLSAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBz
cGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2FsIHNjb3BlLgotICAgIGlmICghc2V0
dGluZ3MudmFyaWFibGUpIHNvdXJjZSA9ICd3aXRoKG9ianx8e30pe1xuJyArIHNvdXJjZSArICd9
XG4nOwotCi0gICAgc291cmNlID0gInZhciBfX3QsX19wPScnLF9faj1BcnJheS5wcm90b3R5cGUu
am9pbiwiICsKLSAgICAicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywn
Jyk7fTtcbiIgKwotICAgIHNvdXJjZSArICJyZXR1cm4gX19wO1xuIjsKLQotICAgIHRyeSB7Ci0g
ICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonLCAnXycs
IHNvdXJjZSk7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgIGUuc291cmNlID0gc291cmNlOwotICAg
IHRocm93IGU7Ci0gICAgfQotCi0gICAgaWYgKGRhdGEpIHJldHVybiByZW5kZXIoZGF0YSwgXyk7
Ci0gICAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24oZGF0YSkgewotICAgIHJldHVybiByZW5kZXIu
Y2FsbCh0aGlzLCBkYXRhLCBfKTsKLSAgICB9OwotCi0gICAgLy8gUHJvdmlkZSB0aGUgY29tcGls
ZWQgZnVuY3Rpb24gc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLgot
ICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgKHNldHRpbmdzLnZhcmlhYmxlIHx8
ICdvYmonKSArICcpe1xuJyArIHNvdXJjZSArICd9JzsKLQotICAgIHJldHVybiB0ZW1wbGF0ZTsK
LSAgICB9OwotCi0gICAgcmV0dXJuIF87Ci0gICAgfSkoe30pOwotCi0gICAgaWYgKGxvY2F0aW9u
Lmhvc3RuYW1lID09PSAndG9kb212Yy5jb20nKSB7Ci0gICAgd2luZG93Ll9nYXEgPSBbWydfc2V0
QWNjb3VudCcsJ1VBLTMxMDgxMDYyLTEnXSxbJ190cmFja1BhZ2V2aWV3J11dOyhmdW5jdGlvbihk
LHQpe3ZhciBnPWQuY3JlYXRlRWxlbWVudCh0KSxzPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodClb
MF07Zy5zcmM9Jy8vd3d3Lmdvb2dsZS1hbmFseXRpY3MuY29tL2dhLmpzJztzLnBhcmVudE5vZGUu
aW5zZXJ0QmVmb3JlKGcscyl9KGRvY3VtZW50LCdzY3JpcHQnKSk7Ci0gICAgfQotCi0gICAgZnVu
Y3Rpb24gcmVkaXJlY3QoKSB7Ci0gICAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lID09PSAndGFzdGVq
cy5naXRodWIuaW8nKSB7Ci0gICAgbG9jYXRpb24uaHJlZiA9IGxvY2F0aW9uLmhyZWYucmVwbGFj
ZSgndGFzdGVqcy5naXRodWIuaW8vdG9kb212YycsICd0b2RvbXZjLmNvbScpOwotICAgIH0KLSAg
ICB9Ci0KLSAgICBmdW5jdGlvbiBmaW5kUm9vdCgpIHsKLSAgICB2YXIgYmFzZTsKLQotICAgIFsv
bGFicy8sIC9cdyotZXhhbXBsZXMvXS5mb3JFYWNoKGZ1bmN0aW9uIChocmVmKSB7Ci0gICAgdmFy
IG1hdGNoID0gbG9jYXRpb24uaHJlZi5tYXRjaChocmVmKTsKLQotICAgIGlmICghYmFzZSAmJiBt
YXRjaCkgewotICAgIGJhc2UgPSBsb2NhdGlvbi5ocmVmLmluZGV4T2YobWF0Y2gpOwotICAgIH0K
LSAgICB9KTsKLQotICAgIHJldHVybiBsb2NhdGlvbi5ocmVmLnN1YnN0cigwLCBiYXNlKTsKLSAg
ICB9Ci0KLSAgICBmdW5jdGlvbiBnZXRGaWxlKGZpbGUsIGNhbGxiYWNrKSB7Ci0gICAgaWYgKCFs
b2NhdGlvbi5ob3N0KSB7Ci0gICAgcmV0dXJuIGNvbnNvbGUuaW5mbygnTWlzcyB0aGUgaW5mbyBi
YXI/IFJ1biBUb2RvTVZDIGZyb20gYSBzZXJ2ZXIgdG8gYXZvaWQgYSBjcm9zcy1vcmlnaW4gZXJy
b3IuJyk7Ci0gICAgfQotCi0gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwotCi0g
ICAgeGhyLm9wZW4oJ0dFVCcsIGZpbmRSb290KCkgKyBmaWxlLCB0cnVlKTsKLSAgICB4aHIuc2Vu
ZCgpOwotCi0gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKLSAgICBpZiAoeGhyLnN0YXR1
cyA9PT0gMjAwICYmIGNhbGxiYWNrKSB7Ci0gICAgY2FsbGJhY2soeGhyLnJlc3BvbnNlVGV4dCk7
Ci0gICAgfQotICAgIH07Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gTGVhcm4obGVhcm5KU09OLCBj
b25maWcpIHsKLSAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgTGVhcm4pKSB7Ci0gICAgcmV0dXJu
IG5ldyBMZWFybihsZWFybkpTT04sIGNvbmZpZyk7Ci0gICAgfQotCi0gICAgdmFyIHRlbXBsYXRl
LCBmcmFtZXdvcms7Ci0KLSAgICBpZiAodHlwZW9mIGxlYXJuSlNPTiAhPT0gJ29iamVjdCcpIHsK
LSAgICB0cnkgewotICAgIGxlYXJuSlNPTiA9IEpTT04ucGFyc2UobGVhcm5KU09OKTsKLSAgICB9
IGNhdGNoIChlKSB7Ci0gICAgcmV0dXJuOwotICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY29uZmln
KSB7Ci0gICAgdGVtcGxhdGUgPSBjb25maWcudGVtcGxhdGU7Ci0gICAgZnJhbWV3b3JrID0gY29u
ZmlnLmZyYW1ld29yazsKLSAgICB9Ci0KLSAgICBpZiAoIXRlbXBsYXRlICYmIGxlYXJuSlNPTi50
ZW1wbGF0ZXMpIHsKLSAgICB0ZW1wbGF0ZSA9IGxlYXJuSlNPTi50ZW1wbGF0ZXMudG9kb212YzsK
LSAgICB9Ci0KLSAgICBpZiAoIWZyYW1ld29yayAmJiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdb
ZGF0YS1mcmFtZXdvcmtdJykpIHsKLSAgICBmcmFtZXdvcmsgPSBkb2N1bWVudC5xdWVyeVNlbGVj
dG9yKCdbZGF0YS1mcmFtZXdvcmtdJykuZ2V0QXR0cmlidXRlKCdkYXRhLWZyYW1ld29yaycpOwot
ICAgIH0KLQotCi0gICAgaWYgKHRlbXBsYXRlICYmIGxlYXJuSlNPTltmcmFtZXdvcmtdKSB7Ci0g
ICAgdGhpcy5mcmFtZXdvcmtKU09OID0gbGVhcm5KU09OW2ZyYW1ld29ya107Ci0gICAgdGhpcy50
ZW1wbGF0ZSA9IHRlbXBsYXRlOwotCi0gICAgdGhpcy5hcHBlbmQoKTsKLSAgICB9Ci0gICAgfQot
Ci0gICAgTGVhcm4ucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uICgpIHsKLSAgICB2YXIgYXNp
ZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhc2lkZScpOwotICAgIGFzaWRlLmlubmVySFRN
TCA9IF8udGVtcGxhdGUodGhpcy50ZW1wbGF0ZSwgdGhpcy5mcmFtZXdvcmtKU09OKTsKLSAgICBh
c2lkZS5jbGFzc05hbWUgPSAnbGVhcm4nOwotCi0gICAgLy8gTG9jYWxpemUgZGVtbyBsaW5rcwot
ICAgIHZhciBkZW1vTGlua3MgPSBhc2lkZS5xdWVyeVNlbGVjdG9yQWxsKCcuZGVtby1saW5rJyk7
Ci0gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChkZW1vTGlua3MsIGZ1bmN0aW9uIChk
ZW1vTGluaykgewotICAgIGRlbW9MaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIGZpbmRSb290KCkg
KyBkZW1vTGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSk7Ci0gICAgfSk7Ci0KLSAgICBkb2N1bWVu
dC5ib2R5LmNsYXNzTmFtZSA9IChkb2N1bWVudC5ib2R5LmNsYXNzTmFtZSArICcgbGVhcm4tYmFy
JykudHJpbSgpOwotICAgIGRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRIVE1MKCdhZnRlckJl
Z2luJywgYXNpZGUub3V0ZXJIVE1MKTsKLSAgICB9OwotCi0gICAgcmVkaXJlY3QoKTsKLSAgICBn
ZXRGaWxlKCdsZWFybi5qc29uJywgTGVhcm4pOwotfSkoKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL2JhY2tib25lL2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmcucG5nIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvYmFja2JvbmUvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iZy5wbmcK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyYTc2MDA4MjVlZTExZjIxODQ5ZWQ0NzU0
OTljN2QxZWNiY2M4NzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
R0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMjEyNgp6Y21W
LVUyKGtCeFApPGg7M0t8TGswMDBlMU5KTFRxMDAza0YwMDNrSDB7e1IzNFVCIXEwMDAwQ1ApdC1z
PyhYakUKej4rOXlgPUhLN250PX4zdDAwME81TmtsPFpjd1RqdShRNHZ+N0tXRVcjWW0/bEtfdjtU
bXwhRmMpQE53RW5tdHNoCnp4IU9+ejgxSlQzcEZzbT5tPTA0aFZhX2xYbF9ibT0rTTs9ZUk8JSRy
TzJ0YWBzdWgqU3IjUE93Kj9hZHEhTyFDVgp6KjAmYilya0NDRVYpMW5JdWlMQm50VUgtTUpJOyZx
WWd6fGRATmhubl9hYmkyZ2BwdTROQU1WaWQzaFMlP3F1en4KempsSmYoeDhjajxQR2NqbipKK2F7
Jkg1cCpuNSQ1ZTM/PEtDYz9vMDZtQXNOU2JnUFdPP1B6I0N6bjwhPXs+e1ZTCnpVVkVQMW1zZzlg
Xk9GVWhTTzVydFhIaFJseVUyaT42JEJUPWdsR2B7SmxjdEdIcndSSW0pNkJ1dTY1akxRbl5IOAp6
dmw5bFpxVUJBKyVxdk01WEMreVlAbWZBKFlCflhQPWV8Njx7JSReZVU4bnJLP3YyY2NiQEpvbTVD
Rz5yS0FMN0oKenBsSEVJYXZWcHwwcDEmbSFHYFRpPzw3aVo7fUBHNyNaKX1LbSUyIUZIblEwKiY/
UExSKUchSEFhSGdVI2N8JGR6CnpwaiMwSG1lYWRJZT5gIyk9SmprYntCPUZLblUzcGMtJllAal9q
NihoNFl+K1VxPFBVMzZDOzViPU1eRmA9cDFkSQp6azxDUU9QTmE3PiFeSj1MSHVueDF4aTRRWEst
WXsmTW9UOGt5NlZiOWN8V2huT3dGfmM9M3pPeThhZ2t0bGlTNiMKemAjOEZgOUgpRD1ibWs5QjVN
blcmX3IjKWYkYys7JExTci1AXkFuOGRoY35JcXV1dj5qT0s3cHc3TEo7JlgwaTFDCnpHTXNIZFAx
T3NAbnkkJGohPlhBaWklN2JwNWs+YHB5TkEhfmVwYikoKXA5elI0WWw2ej1VfXtDSWRoMXooRnBB
bwp6UUlXITswenBDeUM0KjdZTGtaQ09AY3VsMFJfJnpnaHNBOEVrKXolPCFwLWJ2c3NwbFlZMn1Q
OyF2NENZajlrbUYKemIwYk5fbTRWKmZeWVpNb2IyKGozcEtqfjd2I1p0a3M9SW8re3N1JVdpdWtk
SkgkYj9mWmtpQT1QWV8zT2hEQmtvCnooTFRRSFkmRl5eMmhHLVlgKlo5M3ZifmM/KihKY2hEalRm
Q3M/elJtKmAqTipWLSQ9P1FxdGhuU3IqP09TM3NqSwp6bzxfVV5me35hZzYwdWw+ak5wS2E5MntA
TkgrU3N0WCVAfXhCKkprIWx9UFoxY0NsSW5zfn01XiFSbmNVaypybUEKeiVTSVZndDU4RVF4TEor
T2lGcTx5dTRlT0R8OUx0M2ROc2VmeE91cSlEJiRfJWowRGdxQ3kxZ3pjfHRURDMqbWVlCnp7PSV8
PGBgfV9IeXBoT3V7Oyl4a1JnK1FuSENDM1RmK2tzcHFWNip8UUstUmNxRH00PktrQnV3cXV5WkxV
cHxncgp6UFViVWJGYkJyUGQxeE9gXkMqci1pM3A5KkYjKE9CaCE0V3lAYUMmKiF8T3xHWGNqREEm
WWhGeztjRDcqbyhHU14KekBwUVNFNyl4XzgxPVF5amU2KkxRI1RYdS03KG87Uzh1M3RwREE8U2dj
S2NLT3BtQTs9SEJaU0BPRlRAX1hPdnhxCnoqTnwzS0x5dGd6SDZHVSYmVW9jNFp6azRsdW0zUHs5
P2ZwSTQrUUdQSit2NmAxbGZScTNMY1MqKE0qV0srfGIlTwp6ZSR6PjBfZGRqJWhtQ3NwZVhkaFlS
fS1pOUE9Q2BFb0NoVVl1SH5eeCE5K3wmKFBnYio+Q2s8PTlqfCkqQHh5ZlQKenBQIytLdDx9Mzli
fDNXbDRmeFQoK0c/YUg+Z0deZEBNRWFVT0pSZnk1NVR0Rkk3XlkpVnVNVT03UHAweTU1alN+Cnor
VEopaWdNeXJxa1g7d1U4ajY4aUlEdHFKWWhTX0QzX09lbS1AZzZtZV9SZmlRfXVUX0stQS05cUcl
fWdrM0U5Ywp6IThgS2dzTU5YbSliZWxvUGZNcWwqfCYkTT4xcWBpIWNZKVJGWW5qTll1KmdTdkA4
WGViVjclfXhZTD42KUdKUEoKekpwQTdLMzFsY0p1SUZLU3cte3g0RlgwSzJBeil+WGc8YHNPdSQ0
fF48TUM3QCt4Ynd4c0dnVHZKSUFMalB7NjhMCno4QVl1U0dTMEdVZ2s2V2B2NFc7UnkqdW9FVG51
bFBpfDU3MyVsdipaeHcjdjZ5VVFeTU9mY3BUI1Y4UklEViMjTgp6RDFgK0FlbXNPaCl3YldERXhW
Y2ZwS3opanlWPTx+JlpYUGc2Y3xaREU3VTRiazxEXj4tKF5YSlg0WXpvaU5SdkwKenl1WTd+MjZ3
LVBeWnclNkZ9c2hCd1YyJDAyYzhSc1NVeTZkTTkyZGlDQXhpWDNJVXFzcTVpZzY+VV8hVnkqcTUk
CnpqbX0xNnRKcitRWiZUP0hra3BlSXdWWC1yMUVJPUAlWmx0OzY8dHdIODZJRD5nKm1qJkUhQSkp
JWdYSj14NnUjbAp6Y0tFUD5ieDRycVYqa2BCQnJaJE1xanR7VHNIY3hVSD47KWlBS31CKEtpbGEm
VkQlYj82bSZeMFdLNF4mRVpOQUkKejhBTVlzXyUkRCV8TStAK2NRcUwtaGk0eUc+aCpqd2RpaSFX
MXt9cD5aaHdGWXRfNFN1MWtqWTk8YkFaanp+OWVrCnpfRGlhcitBZkpGUF85QHltVW8kS1c+PC01
YCEkVk5PSTF5KEVEU0g0V3BDaWpFXz5hbCFOdD1eZVZFUiN1SjE9Ygp6O0JXRjJJZ3lGNUxleFYr
eWVjJEtpbjtBaUBteW87Rz56SiZqcmRXI2VjWGhJWnBoNU9ZcXdfUEVmY0Y1NjxPMTkKekwpOHIh
S00oKWlmMGBAP1c0KEpkYyk3V29QR14mPSQ8elVzTStIQ1dha0NeM3RaeGsrUGpRR31CPlo1PFo2
Vnh3CnpCQEhyViQmbH5AVGFqNzBwY2V7aVN1UkxzVWN6RFlfNVRuRHE4UHlfUTN3aGBEOCE0aks7
dkZkUlArUTA9ekp5Kgp6enVXZCUhYWlARHt8Kko8STtPRCZpJWx7SnAtOCpQdTNWR0xXaXlrNnYj
WG1RcXdgLSslZSR8Q0p3KkBgNXpiMzwKekV9eiM7a1JoTCZxNVBERzZAbW0qJD5adV9aWkUjcTNN
YytOJjFPXjdob2g5UVI3YCtMJGNCUDVwcUc9ZnFBMHVoCnpVQnVrYXhURm1IKTx8WGJ2cDJjPUhT
Yk5rcFh3NzNhNWx2N1YkamI5MiN5WjE0MUAkWD9GfUp0OGdJVTdXbTZtOQp6P2VfOzt6c25tNmBM
WmVQPlQ9JClLcj5aP2tyKlVtRnFSN3p4MEM2XmJtY3NjQDFBR3R3X3JOSD4tWG0kZCp8UTwKem4m
MUxuMHU3PWwmSUxzPiVDa0pwYERpRzlGMTh4NE5lK2xnPCNpP2U3akwleDs0Wm5Sa05eTXgwNypx
b002TjwkCkVmKD4wTiEya2ROCgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvYm93
ZXJfY29tcG9uZW50cy91bmRlcnNjb3JlL3VuZGVyc2NvcmUuanMgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNr
Ym9uZS9ib3dlcl9jb21wb25lbnRzL3VuZGVyc2NvcmUvdW5kZXJzY29yZS5qcwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYTEyZjBkOTZjZmI0OGEwMmQ1MTg0MjdiMjZjMzMzYmFjNjIy
ODEwYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9iYWNrYm9uZS9ib3dlcl9jb21wb25lbnRzL3VuZGVyc2NvcmUvdW5kZXJzY29yZS5q
cworKysgL2Rldi9udWxsCkBAIC0xLDEyMjYgKzAsMCBAQAotLy8gICAgIFVuZGVyc2NvcmUuanMg
MS40LjQKLS8vICAgICBodHRwOi8vdW5kZXJzY29yZWpzLm9yZwotLy8gICAgIChjKSAyMDA5LTIw
MTMgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIEluYy4KLS8vICAgICBVbmRlcnNjb3Jl
IG1heSBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgotCi0oZnVu
Y3Rpb24oKSB7Ci0KLSAgLy8gQmFzZWxpbmUgc2V0dXAKLSAgLy8gLS0tLS0tLS0tLS0tLS0KLQot
ICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCBpbiB0aGUgYnJvd3Nlciwg
b3IgYGdsb2JhbGAgb24gdGhlIHNlcnZlci4KLSAgdmFyIHJvb3QgPSB0aGlzOwotCi0gIC8vIFNh
dmUgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBgX2AgdmFyaWFibGUuCi0gIHZhciBwcmV2aW91
c1VuZGVyc2NvcmUgPSByb290Ll87Ci0KLSAgLy8gRXN0YWJsaXNoIHRoZSBvYmplY3QgdGhhdCBn
ZXRzIHJldHVybmVkIHRvIGJyZWFrIG91dCBvZiBhIGxvb3AgaXRlcmF0aW9uLgotICB2YXIgYnJl
YWtlciA9IHt9OwotCi0gIC8vIFNhdmUgYnl0ZXMgaW4gdGhlIG1pbmlmaWVkIChidXQgbm90IGd6
aXBwZWQpIHZlcnNpb246Ci0gIHZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLCBPYmpQ
cm90byA9IE9iamVjdC5wcm90b3R5cGUsIEZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTsK
LQotICAvLyBDcmVhdGUgcXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQgYWNjZXNz
IHRvIGNvcmUgcHJvdG90eXBlcy4KLSAgdmFyIHB1c2ggICAgICAgICAgICAgPSBBcnJheVByb3Rv
LnB1c2gsCi0gICAgICBzbGljZSAgICAgICAgICAgID0gQXJyYXlQcm90by5zbGljZSwKLSAgICAg
IGNvbmNhdCAgICAgICAgICAgPSBBcnJheVByb3RvLmNvbmNhdCwKLSAgICAgIHRvU3RyaW5nICAg
ICAgICAgPSBPYmpQcm90by50b1N0cmluZywKLSAgICAgIGhhc093blByb3BlcnR5ICAgPSBPYmpQ
cm90by5oYXNPd25Qcm9wZXJ0eTsKLQotICAvLyBBbGwgKipFQ01BU2NyaXB0IDUqKiBuYXRpdmUg
ZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2UKLSAgLy8gYXJlIGRl
Y2xhcmVkIGhlcmUuCi0gIHZhcgotICAgIG5hdGl2ZUZvckVhY2ggICAgICA9IEFycmF5UHJvdG8u
Zm9yRWFjaCwKLSAgICBuYXRpdmVNYXAgICAgICAgICAgPSBBcnJheVByb3RvLm1hcCwKLSAgICBu
YXRpdmVSZWR1Y2UgICAgICAgPSBBcnJheVByb3RvLnJlZHVjZSwKLSAgICBuYXRpdmVSZWR1Y2VS
aWdodCAgPSBBcnJheVByb3RvLnJlZHVjZVJpZ2h0LAotICAgIG5hdGl2ZUZpbHRlciAgICAgICA9
IEFycmF5UHJvdG8uZmlsdGVyLAotICAgIG5hdGl2ZUV2ZXJ5ICAgICAgICA9IEFycmF5UHJvdG8u
ZXZlcnksCi0gICAgbmF0aXZlU29tZSAgICAgICAgID0gQXJyYXlQcm90by5zb21lLAotICAgIG5h
dGl2ZUluZGV4T2YgICAgICA9IEFycmF5UHJvdG8uaW5kZXhPZiwKLSAgICBuYXRpdmVMYXN0SW5k
ZXhPZiAgPSBBcnJheVByb3RvLmxhc3RJbmRleE9mLAotICAgIG5hdGl2ZUlzQXJyYXkgICAgICA9
IEFycmF5LmlzQXJyYXksCi0gICAgbmF0aXZlS2V5cyAgICAgICAgID0gT2JqZWN0LmtleXMsCi0g
ICAgbmF0aXZlQmluZCAgICAgICAgID0gRnVuY1Byb3RvLmJpbmQ7Ci0KLSAgLy8gQ3JlYXRlIGEg
c2FmZSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0IGZvciB1c2UgYmVsb3cuCi0g
IHZhciBfID0gZnVuY3Rpb24ob2JqKSB7Ci0gICAgaWYgKG9iaiBpbnN0YW5jZW9mIF8pIHJldHVy
biBvYmo7Ci0gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIF8pKSByZXR1cm4gbmV3IF8ob2JqKTsK
LSAgICB0aGlzLl93cmFwcGVkID0gb2JqOwotICB9OwotCi0gIC8vIEV4cG9ydCB0aGUgVW5kZXJz
Y29yZSBvYmplY3QgZm9yICoqTm9kZS5qcyoqLCB3aXRoCi0gIC8vIGJhY2t3YXJkcy1jb21wYXRp
YmlsaXR5IGZvciB0aGUgb2xkIGByZXF1aXJlKClgIEFQSS4gSWYgd2UncmUgaW4KLSAgLy8gdGhl
IGJyb3dzZXIsIGFkZCBgX2AgYXMgYSBnbG9iYWwgb2JqZWN0IHZpYSBhIHN0cmluZyBpZGVudGlm
aWVyLAotICAvLyBmb3IgQ2xvc3VyZSBDb21waWxlciAiYWR2YW5jZWQiIG1vZGUuCi0gIGlmICh0
eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHsKLSAgICBpZiAodHlwZW9mIG1vZHVsZSAh
PT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHsKLSAgICAgIGV4cG9ydHMgPSBtb2R1
bGUuZXhwb3J0cyA9IF87Ci0gICAgfQotICAgIGV4cG9ydHMuXyA9IF87Ci0gIH0gZWxzZSB7Ci0g
ICAgcm9vdC5fID0gXzsKLSAgfQotCi0gIC8vIEN1cnJlbnQgdmVyc2lvbi4KLSAgXy5WRVJTSU9O
ID0gJzEuNC40JzsKLQotICAvLyBDb2xsZWN0aW9uIEZ1bmN0aW9ucwotICAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi0gIC8vIFRoZSBjb3JuZXJzdG9uZSwgYW4gYGVhY2hgIGltcGxlbWVudGF0
aW9uLCBha2EgYGZvckVhY2hgLgotICAvLyBIYW5kbGVzIG9iamVjdHMgd2l0aCB0aGUgYnVpbHQt
aW4gYGZvckVhY2hgLCBhcnJheXMsIGFuZCByYXcgb2JqZWN0cy4KLSAgLy8gRGVsZWdhdGVzIHRv
ICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYGZvckVhY2hgIGlmIGF2YWlsYWJsZS4KLSAgdmFy
IGVhY2ggPSBfLmVhY2ggPSBfLmZvckVhY2ggPSBmdW5jdGlvbihvYmosIGl0ZXJhdG9yLCBjb250
ZXh0KSB7Ci0gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm47Ci0gICAgaWYgKG5hdGl2ZUZvckVh
Y2ggJiYgb2JqLmZvckVhY2ggPT09IG5hdGl2ZUZvckVhY2gpIHsKLSAgICAgIG9iai5mb3JFYWNo
KGl0ZXJhdG9yLCBjb250ZXh0KTsKLSAgICB9IGVsc2UgaWYgKG9iai5sZW5ndGggPT09ICtvYmou
bGVuZ3RoKSB7Ci0gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBp
KyspIHsKLSAgICAgICAgaWYgKGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmop
ID09PSBicmVha2VyKSByZXR1cm47Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZvciAo
dmFyIGtleSBpbiBvYmopIHsKLSAgICAgICAgaWYgKF8uaGFzKG9iaiwga2V5KSkgewotICAgICAg
ICAgIGlmIChpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtrZXldLCBrZXksIG9iaikgPT09IGJy
ZWFrZXIpIHJldHVybjsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfTsKLQotICAvLyBS
ZXR1cm4gdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdG9yIHRvIGVhY2ggZWxlbWVu
dC4KLSAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYG1hcGAgaWYg
YXZhaWxhYmxlLgotICBfLm1hcCA9IF8uY29sbGVjdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0b3Is
IGNvbnRleHQpIHsKLSAgICB2YXIgcmVzdWx0cyA9IFtdOwotICAgIGlmIChvYmogPT0gbnVsbCkg
cmV0dXJuIHJlc3VsdHM7Ci0gICAgaWYgKG5hdGl2ZU1hcCAmJiBvYmoubWFwID09PSBuYXRpdmVN
YXApIHJldHVybiBvYmoubWFwKGl0ZXJhdG9yLCBjb250ZXh0KTsKLSAgICBlYWNoKG9iaiwgZnVu
Y3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7Ci0gICAgICByZXN1bHRzW3Jlc3VsdHMubGVuZ3Ro
XSA9IGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBsaXN0KTsKLSAgICB9KTsK
LSAgICByZXR1cm4gcmVzdWx0czsKLSAgfTsKLQotICB2YXIgcmVkdWNlRXJyb3IgPSAnUmVkdWNl
IG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSc7Ci0KLSAgLy8gKipSZWR1Y2Uq
KiBidWlsZHMgdXAgYSBzaW5nbGUgcmVzdWx0IGZyb20gYSBsaXN0IG9mIHZhbHVlcywgYWthIGBp
bmplY3RgLAotICAvLyBvciBgZm9sZGxgLiBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidz
IG5hdGl2ZSBgcmVkdWNlYCBpZiBhdmFpbGFibGUuCi0gIF8ucmVkdWNlID0gXy5mb2xkbCA9IF8u
aW5qZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRvciwgbWVtbywgY29udGV4dCkgewotICAgIHZh
ciBpbml0aWFsID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7Ci0gICAgaWYgKG9iaiA9PSBudWxsKSBv
YmogPSBbXTsKLSAgICBpZiAobmF0aXZlUmVkdWNlICYmIG9iai5yZWR1Y2UgPT09IG5hdGl2ZVJl
ZHVjZSkgewotICAgICAgaWYgKGNvbnRleHQpIGl0ZXJhdG9yID0gXy5iaW5kKGl0ZXJhdG9yLCBj
b250ZXh0KTsKLSAgICAgIHJldHVybiBpbml0aWFsID8gb2JqLnJlZHVjZShpdGVyYXRvciwgbWVt
bykgOiBvYmoucmVkdWNlKGl0ZXJhdG9yKTsKLSAgICB9Ci0gICAgZWFjaChvYmosIGZ1bmN0aW9u
KHZhbHVlLCBpbmRleCwgbGlzdCkgewotICAgICAgaWYgKCFpbml0aWFsKSB7Ci0gICAgICAgIG1l
bW8gPSB2YWx1ZTsKLSAgICAgICAgaW5pdGlhbCA9IHRydWU7Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICBtZW1vID0gaXRlcmF0b3IuY2FsbChjb250ZXh0LCBtZW1vLCB2YWx1ZSwgaW5kZXgsIGxp
c3QpOwotICAgICAgfQotICAgIH0pOwotICAgIGlmICghaW5pdGlhbCkgdGhyb3cgbmV3IFR5cGVF
cnJvcihyZWR1Y2VFcnJvcik7Ci0gICAgcmV0dXJuIG1lbW87Ci0gIH07Ci0KLSAgLy8gVGhlIHJp
Z2h0LWFzc29jaWF0aXZlIHZlcnNpb24gb2YgcmVkdWNlLCBhbHNvIGtub3duIGFzIGBmb2xkcmAu
Ci0gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGByZWR1Y2VSaWdo
dGAgaWYgYXZhaWxhYmxlLgotICBfLnJlZHVjZVJpZ2h0ID0gXy5mb2xkciA9IGZ1bmN0aW9uKG9i
aiwgaXRlcmF0b3IsIG1lbW8sIGNvbnRleHQpIHsKLSAgICB2YXIgaW5pdGlhbCA9IGFyZ3VtZW50
cy5sZW5ndGggPiAyOwotICAgIGlmIChvYmogPT0gbnVsbCkgb2JqID0gW107Ci0gICAgaWYgKG5h
dGl2ZVJlZHVjZVJpZ2h0ICYmIG9iai5yZWR1Y2VSaWdodCA9PT0gbmF0aXZlUmVkdWNlUmlnaHQp
IHsKLSAgICAgIGlmIChjb250ZXh0KSBpdGVyYXRvciA9IF8uYmluZChpdGVyYXRvciwgY29udGV4
dCk7Ci0gICAgICByZXR1cm4gaW5pdGlhbCA/IG9iai5yZWR1Y2VSaWdodChpdGVyYXRvciwgbWVt
bykgOiBvYmoucmVkdWNlUmlnaHQoaXRlcmF0b3IpOwotICAgIH0KLSAgICB2YXIgbGVuZ3RoID0g
b2JqLmxlbmd0aDsKLSAgICBpZiAobGVuZ3RoICE9PSArbGVuZ3RoKSB7Ci0gICAgICB2YXIga2V5
cyA9IF8ua2V5cyhvYmopOwotICAgICAgbGVuZ3RoID0ga2V5cy5sZW5ndGg7Ci0gICAgfQotICAg
IGVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHsKLSAgICAgIGluZGV4ID0g
a2V5cyA/IGtleXNbLS1sZW5ndGhdIDogLS1sZW5ndGg7Ci0gICAgICBpZiAoIWluaXRpYWwpIHsK
LSAgICAgICAgbWVtbyA9IG9ialtpbmRleF07Ci0gICAgICAgIGluaXRpYWwgPSB0cnVlOwotICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgbWVtbyA9IGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgbWVtbywg
b2JqW2luZGV4XSwgaW5kZXgsIGxpc3QpOwotICAgICAgfQotICAgIH0pOwotICAgIGlmICghaW5p
dGlhbCkgdGhyb3cgbmV3IFR5cGVFcnJvcihyZWR1Y2VFcnJvcik7Ci0gICAgcmV0dXJuIG1lbW87
Ci0gIH07Ci0KLSAgLy8gUmV0dXJuIHRoZSBmaXJzdCB2YWx1ZSB3aGljaCBwYXNzZXMgYSB0cnV0
aCB0ZXN0LiBBbGlhc2VkIGFzIGBkZXRlY3RgLgotICBfLmZpbmQgPSBfLmRldGVjdCA9IGZ1bmN0
aW9uKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHsKLSAgICB2YXIgcmVzdWx0OwotICAgIGFueShv
YmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkgewotICAgICAgaWYgKGl0ZXJhdG9yLmNh
bGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBsaXN0KSkgewotICAgICAgICByZXN1bHQgPSB2YWx1
ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLSAgfTsKLQotICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyB0aGF0IHBhc3MgYSB0
cnV0aCB0ZXN0LgotICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBg
ZmlsdGVyYCBpZiBhdmFpbGFibGUuCi0gIC8vIEFsaWFzZWQgYXMgYHNlbGVjdGAuCi0gIF8uZmls
dGVyID0gXy5zZWxlY3QgPSBmdW5jdGlvbihvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7Ci0gICAg
dmFyIHJlc3VsdHMgPSBbXTsKLSAgICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1bHRzOwot
ICAgIGlmIChuYXRpdmVGaWx0ZXIgJiYgb2JqLmZpbHRlciA9PT0gbmF0aXZlRmlsdGVyKSByZXR1
cm4gb2JqLmZpbHRlcihpdGVyYXRvciwgY29udGV4dCk7Ci0gICAgZWFjaChvYmosIGZ1bmN0aW9u
KHZhbHVlLCBpbmRleCwgbGlzdCkgewotICAgICAgaWYgKGl0ZXJhdG9yLmNhbGwoY29udGV4dCwg
dmFsdWUsIGluZGV4LCBsaXN0KSkgcmVzdWx0c1tyZXN1bHRzLmxlbmd0aF0gPSB2YWx1ZTsKLSAg
ICB9KTsKLSAgICByZXR1cm4gcmVzdWx0czsKLSAgfTsKLQotICAvLyBSZXR1cm4gYWxsIHRoZSBl
bGVtZW50cyBmb3Igd2hpY2ggYSB0cnV0aCB0ZXN0IGZhaWxzLgotICBfLnJlamVjdCA9IGZ1bmN0
aW9uKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHsKLSAgICByZXR1cm4gXy5maWx0ZXIob2JqLCBm
dW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHsKLSAgICAgIHJldHVybiAhaXRlcmF0b3IuY2Fs
bChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpOwotICAgIH0sIGNvbnRleHQpOwotICB9Owot
Ci0gIC8vIERldGVybWluZSB3aGV0aGVyIGFsbCBvZiB0aGUgZWxlbWVudHMgbWF0Y2ggYSB0cnV0
aCB0ZXN0LgotICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgZXZl
cnlgIGlmIGF2YWlsYWJsZS4KLSAgLy8gQWxpYXNlZCBhcyBgYWxsYC4KLSAgXy5ldmVyeSA9IF8u
YWxsID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRvciwgY29udGV4dCkgewotICAgIGl0ZXJhdG9yIHx8
IChpdGVyYXRvciA9IF8uaWRlbnRpdHkpOwotICAgIHZhciByZXN1bHQgPSB0cnVlOwotICAgIGlm
IChvYmogPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDsKLSAgICBpZiAobmF0aXZlRXZlcnkgJiYgb2Jq
LmV2ZXJ5ID09PSBuYXRpdmVFdmVyeSkgcmV0dXJuIG9iai5ldmVyeShpdGVyYXRvciwgY29udGV4
dCk7Ci0gICAgZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkgewotICAgICAg
aWYgKCEocmVzdWx0ID0gcmVzdWx0ICYmIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGlu
ZGV4LCBsaXN0KSkpIHJldHVybiBicmVha2VyOwotICAgIH0pOwotICAgIHJldHVybiAhIXJlc3Vs
dDsKLSAgfTsKLQotICAvLyBEZXRlcm1pbmUgaWYgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaW4gdGhl
IG9iamVjdCBtYXRjaGVzIGEgdHJ1dGggdGVzdC4KLSAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNj
cmlwdCA1KioncyBuYXRpdmUgYHNvbWVgIGlmIGF2YWlsYWJsZS4KLSAgLy8gQWxpYXNlZCBhcyBg
YW55YC4KLSAgdmFyIGFueSA9IF8uc29tZSA9IF8uYW55ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRv
ciwgY29udGV4dCkgewotICAgIGl0ZXJhdG9yIHx8IChpdGVyYXRvciA9IF8uaWRlbnRpdHkpOwot
ICAgIHZhciByZXN1bHQgPSBmYWxzZTsKLSAgICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1
bHQ7Ci0gICAgaWYgKG5hdGl2ZVNvbWUgJiYgb2JqLnNvbWUgPT09IG5hdGl2ZVNvbWUpIHJldHVy
biBvYmouc29tZShpdGVyYXRvciwgY29udGV4dCk7Ci0gICAgZWFjaChvYmosIGZ1bmN0aW9uKHZh
bHVlLCBpbmRleCwgbGlzdCkgewotICAgICAgaWYgKHJlc3VsdCB8fCAocmVzdWx0ID0gaXRlcmF0
b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpKSkgcmV0dXJuIGJyZWFrZXI7Ci0g
ICAgfSk7Ci0gICAgcmV0dXJuICEhcmVzdWx0OwotICB9OwotCi0gIC8vIERldGVybWluZSBpZiB0
aGUgYXJyYXkgb3Igb2JqZWN0IGNvbnRhaW5zIGEgZ2l2ZW4gdmFsdWUgKHVzaW5nIGA9PT1gKS4K
LSAgLy8gQWxpYXNlZCBhcyBgaW5jbHVkZWAuCi0gIF8uY29udGFpbnMgPSBfLmluY2x1ZGUgPSBm
dW5jdGlvbihvYmosIHRhcmdldCkgewotICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChuYXRpdmVJbmRleE9mICYmIG9iai5pbmRleE9mID09PSBuYXRpdmVJbmRleE9m
KSByZXR1cm4gb2JqLmluZGV4T2YodGFyZ2V0KSAhPSAtMTsKLSAgICByZXR1cm4gYW55KG9iaiwg
ZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIHJldHVybiB2YWx1ZSA9PT0gdGFyZ2V0OwotICAgIH0p
OwotICB9OwotCi0gIC8vIEludm9rZSBhIG1ldGhvZCAod2l0aCBhcmd1bWVudHMpIG9uIGV2ZXJ5
IGl0ZW0gaW4gYSBjb2xsZWN0aW9uLgotICBfLmludm9rZSA9IGZ1bmN0aW9uKG9iaiwgbWV0aG9k
KSB7Ci0gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7Ci0gICAgdmFyIGlz
RnVuYyA9IF8uaXNGdW5jdGlvbihtZXRob2QpOwotICAgIHJldHVybiBfLm1hcChvYmosIGZ1bmN0
aW9uKHZhbHVlKSB7Ci0gICAgICByZXR1cm4gKGlzRnVuYyA/IG1ldGhvZCA6IHZhbHVlW21ldGhv
ZF0pLmFwcGx5KHZhbHVlLCBhcmdzKTsKLSAgICB9KTsKLSAgfTsKLQotICAvLyBDb252ZW5pZW5j
ZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBtYXBgOiBmZXRjaGluZyBhIHByb3Bl
cnR5LgotICBfLnBsdWNrID0gZnVuY3Rpb24ob2JqLCBrZXkpIHsKLSAgICByZXR1cm4gXy5tYXAo
b2JqLCBmdW5jdGlvbih2YWx1ZSl7IHJldHVybiB2YWx1ZVtrZXldOyB9KTsKLSAgfTsKLQotICAv
LyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBmaWx0ZXJgOiBz
ZWxlY3Rpbmcgb25seSBvYmplY3RzCi0gIC8vIGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1
ZWAgcGFpcnMuCi0gIF8ud2hlcmUgPSBmdW5jdGlvbihvYmosIGF0dHJzLCBmaXJzdCkgewotICAg
IGlmIChfLmlzRW1wdHkoYXR0cnMpKSByZXR1cm4gZmlyc3QgPyBudWxsIDogW107Ci0gICAgcmV0
dXJuIF9bZmlyc3QgPyAnZmluZCcgOiAnZmlsdGVyJ10ob2JqLCBmdW5jdGlvbih2YWx1ZSkgewot
ICAgICAgZm9yICh2YXIga2V5IGluIGF0dHJzKSB7Ci0gICAgICAgIGlmIChhdHRyc1trZXldICE9
PSB2YWx1ZVtrZXldKSByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9KTsKLSAgfTsKLQotICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVz
ZSBjYXNlIG9mIGBmaW5kYDogZ2V0dGluZyB0aGUgZmlyc3Qgb2JqZWN0Ci0gIC8vIGNvbnRhaW5p
bmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuCi0gIF8uZmluZFdoZXJlID0gZnVuY3Rpb24o
b2JqLCBhdHRycykgewotICAgIHJldHVybiBfLndoZXJlKG9iaiwgYXR0cnMsIHRydWUpOwotICB9
OwotCi0gIC8vIFJldHVybiB0aGUgbWF4aW11bSBlbGVtZW50IG9yIChlbGVtZW50LWJhc2VkIGNv
bXB1dGF0aW9uKS4KLSAgLy8gQ2FuJ3Qgb3B0aW1pemUgYXJyYXlzIG9mIGludGVnZXJzIGxvbmdl
ciB0aGFuIDY1LDUzNSBlbGVtZW50cy4KLSAgLy8gU2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODA3OTcKLSAgXy5tYXggPSBmdW5jdGlvbihvYmosIGl0ZXJhdG9y
LCBjb250ZXh0KSB7Ci0gICAgaWYgKCFpdGVyYXRvciAmJiBfLmlzQXJyYXkob2JqKSAmJiBvYmpb
MF0gPT09ICtvYmpbMF0gJiYgb2JqLmxlbmd0aCA8IDY1NTM1KSB7Ci0gICAgICByZXR1cm4gTWF0
aC5tYXguYXBwbHkoTWF0aCwgb2JqKTsKLSAgICB9Ci0gICAgaWYgKCFpdGVyYXRvciAmJiBfLmlz
RW1wdHkob2JqKSkgcmV0dXJuIC1JbmZpbml0eTsKLSAgICB2YXIgcmVzdWx0ID0ge2NvbXB1dGVk
IDogLUluZmluaXR5LCB2YWx1ZTogLUluZmluaXR5fTsKLSAgICBlYWNoKG9iaiwgZnVuY3Rpb24o
dmFsdWUsIGluZGV4LCBsaXN0KSB7Ci0gICAgICB2YXIgY29tcHV0ZWQgPSBpdGVyYXRvciA/IGl0
ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBsaXN0KSA6IHZhbHVlOwotICAgICAg
Y29tcHV0ZWQgPj0gcmVzdWx0LmNvbXB1dGVkICYmIChyZXN1bHQgPSB7dmFsdWUgOiB2YWx1ZSwg
Y29tcHV0ZWQgOiBjb21wdXRlZH0pOwotICAgIH0pOwotICAgIHJldHVybiByZXN1bHQudmFsdWU7
Ci0gIH07Ci0KLSAgLy8gUmV0dXJuIHRoZSBtaW5pbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFz
ZWQgY29tcHV0YXRpb24pLgotICBfLm1pbiA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0b3IsIGNvbnRl
eHQpIHsKLSAgICBpZiAoIWl0ZXJhdG9yICYmIF8uaXNBcnJheShvYmopICYmIG9ialswXSA9PT0g
K29ialswXSAmJiBvYmoubGVuZ3RoIDwgNjU1MzUpIHsKLSAgICAgIHJldHVybiBNYXRoLm1pbi5h
cHBseShNYXRoLCBvYmopOwotICAgIH0KLSAgICBpZiAoIWl0ZXJhdG9yICYmIF8uaXNFbXB0eShv
YmopKSByZXR1cm4gSW5maW5pdHk7Ci0gICAgdmFyIHJlc3VsdCA9IHtjb21wdXRlZCA6IEluZmlu
aXR5LCB2YWx1ZTogSW5maW5pdHl9OwotICAgIGVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5k
ZXgsIGxpc3QpIHsKLSAgICAgIHZhciBjb21wdXRlZCA9IGl0ZXJhdG9yID8gaXRlcmF0b3IuY2Fs
bChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpIDogdmFsdWU7Ci0gICAgICBjb21wdXRlZCA8
IHJlc3VsdC5jb21wdXRlZCAmJiAocmVzdWx0ID0ge3ZhbHVlIDogdmFsdWUsIGNvbXB1dGVkIDog
Y29tcHV0ZWR9KTsKLSAgICB9KTsKLSAgICByZXR1cm4gcmVzdWx0LnZhbHVlOwotICB9OwotCi0g
IC8vIFNodWZmbGUgYW4gYXJyYXkuCi0gIF8uc2h1ZmZsZSA9IGZ1bmN0aW9uKG9iaikgewotICAg
IHZhciByYW5kOwotICAgIHZhciBpbmRleCA9IDA7Ci0gICAgdmFyIHNodWZmbGVkID0gW107Ci0g
ICAgZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICByYW5kID0gXy5yYW5kb20oaW5k
ZXgrKyk7Ci0gICAgICBzaHVmZmxlZFtpbmRleCAtIDFdID0gc2h1ZmZsZWRbcmFuZF07Ci0gICAg
ICBzaHVmZmxlZFtyYW5kXSA9IHZhbHVlOwotICAgIH0pOwotICAgIHJldHVybiBzaHVmZmxlZDsK
LSAgfTsKLQotICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBsb29rdXAgaXRl
cmF0b3JzLgotICB2YXIgbG9va3VwSXRlcmF0b3IgPSBmdW5jdGlvbih2YWx1ZSkgewotICAgIHJl
dHVybiBfLmlzRnVuY3Rpb24odmFsdWUpID8gdmFsdWUgOiBmdW5jdGlvbihvYmopeyByZXR1cm4g
b2JqW3ZhbHVlXTsgfTsKLSAgfTsKLQotICAvLyBTb3J0IHRoZSBvYmplY3QncyB2YWx1ZXMgYnkg
YSBjcml0ZXJpb24gcHJvZHVjZWQgYnkgYW4gaXRlcmF0b3IuCi0gIF8uc29ydEJ5ID0gZnVuY3Rp
b24ob2JqLCB2YWx1ZSwgY29udGV4dCkgewotICAgIHZhciBpdGVyYXRvciA9IGxvb2t1cEl0ZXJh
dG9yKHZhbHVlKTsKLSAgICByZXR1cm4gXy5wbHVjayhfLm1hcChvYmosIGZ1bmN0aW9uKHZhbHVl
LCBpbmRleCwgbGlzdCkgewotICAgICAgcmV0dXJuIHsKLSAgICAgICAgdmFsdWUgOiB2YWx1ZSwK
LSAgICAgICAgaW5kZXggOiBpbmRleCwKLSAgICAgICAgY3JpdGVyaWEgOiBpdGVyYXRvci5jYWxs
KGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdCkKLSAgICAgIH07Ci0gICAgfSkuc29ydChmdW5j
dGlvbihsZWZ0LCByaWdodCkgewotICAgICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlhOwotICAgICAg
dmFyIGIgPSByaWdodC5jcml0ZXJpYTsKLSAgICAgIGlmIChhICE9PSBiKSB7Ci0gICAgICAgIGlm
IChhID4gYiB8fCBhID09PSB2b2lkIDApIHJldHVybiAxOwotICAgICAgICBpZiAoYSA8IGIgfHwg
YiA9PT0gdm9pZCAwKSByZXR1cm4gLTE7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbGVmdC5pbmRl
eCA8IHJpZ2h0LmluZGV4ID8gLTEgOiAxOwotICAgIH0pLCAndmFsdWUnKTsKLSAgfTsKLQotICAv
LyBBbiBpbnRlcm5hbCBmdW5jdGlvbiB1c2VkIGZvciBhZ2dyZWdhdGUgImdyb3VwIGJ5IiBvcGVy
YXRpb25zLgotICB2YXIgZ3JvdXAgPSBmdW5jdGlvbihvYmosIHZhbHVlLCBjb250ZXh0LCBiZWhh
dmlvcikgewotICAgIHZhciByZXN1bHQgPSB7fTsKLSAgICB2YXIgaXRlcmF0b3IgPSBsb29rdXBJ
dGVyYXRvcih2YWx1ZSB8fCBfLmlkZW50aXR5KTsKLSAgICBlYWNoKG9iaiwgZnVuY3Rpb24odmFs
dWUsIGluZGV4KSB7Ci0gICAgICB2YXIga2V5ID0gaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1
ZSwgaW5kZXgsIG9iaik7Ci0gICAgICBiZWhhdmlvcihyZXN1bHQsIGtleSwgdmFsdWUpOwotICAg
IH0pOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH07Ci0KLSAgLy8gR3JvdXBzIHRoZSBvYmplY3Qn
cyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24uIFBhc3MgZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZQot
ICAvLyB0byBncm91cCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGNyaXRlcmlv
bi4KLSAgXy5ncm91cEJ5ID0gZnVuY3Rpb24ob2JqLCB2YWx1ZSwgY29udGV4dCkgewotICAgIHJl
dHVybiBncm91cChvYmosIHZhbHVlLCBjb250ZXh0LCBmdW5jdGlvbihyZXN1bHQsIGtleSwgdmFs
dWUpIHsKLSAgICAgIChfLmhhcyhyZXN1bHQsIGtleSkgPyByZXN1bHRba2V5XSA6IChyZXN1bHRb
a2V5XSA9IFtdKSkucHVzaCh2YWx1ZSk7Ci0gICAgfSk7Ci0gIH07Ci0KLSAgLy8gQ291bnRzIGlu
c3RhbmNlcyBvZiBhbiBvYmplY3QgdGhhdCBncm91cCBieSBhIGNlcnRhaW4gY3JpdGVyaW9uLiBQ
YXNzCi0gIC8vIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGUgdG8gY291bnQgYnksIG9yIGEgZnVu
Y3Rpb24gdGhhdCByZXR1cm5zIHRoZQotICAvLyBjcml0ZXJpb24uCi0gIF8uY291bnRCeSA9IGZ1
bmN0aW9uKG9iaiwgdmFsdWUsIGNvbnRleHQpIHsKLSAgICByZXR1cm4gZ3JvdXAob2JqLCB2YWx1
ZSwgY29udGV4dCwgZnVuY3Rpb24ocmVzdWx0LCBrZXkpIHsKLSAgICAgIGlmICghXy5oYXMocmVz
dWx0LCBrZXkpKSByZXN1bHRba2V5XSA9IDA7Ci0gICAgICByZXN1bHRba2V5XSsrOwotICAgIH0p
OwotICB9OwotCi0gIC8vIFVzZSBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8gZmlndXJlIG91dCB0
aGUgc21hbGxlc3QgaW5kZXggYXQgd2hpY2gKLSAgLy8gYW4gb2JqZWN0IHNob3VsZCBiZSBpbnNl
cnRlZCBzbyBhcyB0byBtYWludGFpbiBvcmRlci4gVXNlcyBiaW5hcnkgc2VhcmNoLgotICBfLnNv
cnRlZEluZGV4ID0gZnVuY3Rpb24oYXJyYXksIG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHsKLSAg
ICBpdGVyYXRvciA9IGl0ZXJhdG9yID09IG51bGwgPyBfLmlkZW50aXR5IDogbG9va3VwSXRlcmF0
b3IoaXRlcmF0b3IpOwotICAgIHZhciB2YWx1ZSA9IGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2Jq
KTsKLSAgICB2YXIgbG93ID0gMCwgaGlnaCA9IGFycmF5Lmxlbmd0aDsKLSAgICB3aGlsZSAobG93
IDwgaGlnaCkgewotICAgICAgdmFyIG1pZCA9IChsb3cgKyBoaWdoKSA+Pj4gMTsKLSAgICAgIGl0
ZXJhdG9yLmNhbGwoY29udGV4dCwgYXJyYXlbbWlkXSkgPCB2YWx1ZSA/IGxvdyA9IG1pZCArIDEg
OiBoaWdoID0gbWlkOwotICAgIH0KLSAgICByZXR1cm4gbG93OwotICB9OwotCi0gIC8vIFNhZmVs
eSBjb252ZXJ0IGFueXRoaW5nIGl0ZXJhYmxlIGludG8gYSByZWFsLCBsaXZlIGFycmF5LgotICBf
LnRvQXJyYXkgPSBmdW5jdGlvbihvYmopIHsKLSAgICBpZiAoIW9iaikgcmV0dXJuIFtdOwotICAg
IGlmIChfLmlzQXJyYXkob2JqKSkgcmV0dXJuIHNsaWNlLmNhbGwob2JqKTsKLSAgICBpZiAob2Jq
Lmxlbmd0aCA9PT0gK29iai5sZW5ndGgpIHJldHVybiBfLm1hcChvYmosIF8uaWRlbnRpdHkpOwot
ICAgIHJldHVybiBfLnZhbHVlcyhvYmopOwotICB9OwotCi0gIC8vIFJldHVybiB0aGUgbnVtYmVy
IG9mIGVsZW1lbnRzIGluIGFuIG9iamVjdC4KLSAgXy5zaXplID0gZnVuY3Rpb24ob2JqKSB7Ci0g
ICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gMDsKLSAgICByZXR1cm4gKG9iai5sZW5ndGggPT09
ICtvYmoubGVuZ3RoKSA/IG9iai5sZW5ndGggOiBfLmtleXMob2JqKS5sZW5ndGg7Ci0gIH07Ci0K
LSAgLy8gQXJyYXkgRnVuY3Rpb25zCi0gIC8vIC0tLS0tLS0tLS0tLS0tLQotCi0gIC8vIEdldCB0
aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0
aGUgZmlyc3QgTgotICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5LiBBbGlhc2VkIGFzIGBoZWFkYCBh
bmQgYHRha2VgLiBUaGUgKipndWFyZCoqIGNoZWNrCi0gIC8vIGFsbG93cyBpdCB0byB3b3JrIHdp
dGggYF8ubWFwYC4KLSAgXy5maXJzdCA9IF8uaGVhZCA9IF8udGFrZSA9IGZ1bmN0aW9uKGFycmF5
LCBuLCBndWFyZCkgewotICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gdm9pZCAwOwotICAg
IHJldHVybiAobiAhPSBudWxsKSAmJiAhZ3VhcmQgPyBzbGljZS5jYWxsKGFycmF5LCAwLCBuKSA6
IGFycmF5WzBdOwotICB9OwotCi0gIC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGxhc3Qg
ZW50cnkgb2YgdGhlIGFycmF5LiBFc3BlY2lhbGx5IHVzZWZ1bCBvbgotICAvLyB0aGUgYXJndW1l
bnRzIG9iamVjdC4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiBhbGwgdGhlIHZhbHVlcyBpbgot
ICAvLyB0aGUgYXJyYXksIGV4Y2x1ZGluZyB0aGUgbGFzdCBOLiBUaGUgKipndWFyZCoqIGNoZWNr
IGFsbG93cyBpdCB0byB3b3JrIHdpdGgKLSAgLy8gYF8ubWFwYC4KLSAgXy5pbml0aWFsID0gZnVu
Y3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7Ci0gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIDAs
IGFycmF5Lmxlbmd0aCAtICgobiA9PSBudWxsKSB8fCBndWFyZCA/IDEgOiBuKSk7Ci0gIH07Ci0K
LSAgLy8gR2V0IHRoZSBsYXN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2ls
bCByZXR1cm4gdGhlIGxhc3QgTgotICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5LiBUaGUgKipndWFy
ZCoqIGNoZWNrIGFsbG93cyBpdCB0byB3b3JrIHdpdGggYF8ubWFwYC4KLSAgXy5sYXN0ID0gZnVu
Y3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7Ci0gICAgaWYgKGFycmF5ID09IG51bGwpIHJldHVybiB2
b2lkIDA7Ci0gICAgaWYgKChuICE9IG51bGwpICYmICFndWFyZCkgewotICAgICAgcmV0dXJuIHNs
aWNlLmNhbGwoYXJyYXksIE1hdGgubWF4KGFycmF5Lmxlbmd0aCAtIG4sIDApKTsKLSAgICB9IGVs
c2UgewotICAgICAgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdOwotICAgIH0KLSAgfTsK
LQotICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBmaXJzdCBlbnRyeSBvZiB0aGUgYXJy
YXkuIEFsaWFzZWQgYXMgYHRhaWxgIGFuZCBgZHJvcGAuCi0gIC8vIEVzcGVjaWFsbHkgdXNlZnVs
IG9uIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBQYXNzaW5nIGFuICoqbioqIHdpbGwgcmV0dXJuCi0g
IC8vIHRoZSByZXN0IE4gdmFsdWVzIGluIHRoZSBhcnJheS4gVGhlICoqZ3VhcmQqKgotICAvLyBj
aGVjayBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBfLm1hcGAuCi0gIF8ucmVzdCA9IF8udGFpbCA9
IF8uZHJvcCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkgewotICAgIHJldHVybiBzbGljZS5j
YWxsKGFycmF5LCAobiA9PSBudWxsKSB8fCBndWFyZCA/IDEgOiBuKTsKLSAgfTsKLQotICAvLyBU
cmltIG91dCBhbGwgZmFsc3kgdmFsdWVzIGZyb20gYW4gYXJyYXkuCi0gIF8uY29tcGFjdCA9IGZ1
bmN0aW9uKGFycmF5KSB7Ci0gICAgcmV0dXJuIF8uZmlsdGVyKGFycmF5LCBfLmlkZW50aXR5KTsK
LSAgfTsKLQotICAvLyBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBhIHJlY3Vyc2l2ZSBgZmxh
dHRlbmAgZnVuY3Rpb24uCi0gIHZhciBmbGF0dGVuID0gZnVuY3Rpb24oaW5wdXQsIHNoYWxsb3cs
IG91dHB1dCkgewotICAgIGVhY2goaW5wdXQsIGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICBpZiAo
Xy5pc0FycmF5KHZhbHVlKSkgewotICAgICAgICBzaGFsbG93ID8gcHVzaC5hcHBseShvdXRwdXQs
IHZhbHVlKSA6IGZsYXR0ZW4odmFsdWUsIHNoYWxsb3csIG91dHB1dCk7Ci0gICAgICB9IGVsc2Ug
ewotICAgICAgICBvdXRwdXQucHVzaCh2YWx1ZSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgcmV0
dXJuIG91dHB1dDsKLSAgfTsKLQotICAvLyBSZXR1cm4gYSBjb21wbGV0ZWx5IGZsYXR0ZW5lZCB2
ZXJzaW9uIG9mIGFuIGFycmF5LgotICBfLmZsYXR0ZW4gPSBmdW5jdGlvbihhcnJheSwgc2hhbGxv
dykgewotICAgIHJldHVybiBmbGF0dGVuKGFycmF5LCBzaGFsbG93LCBbXSk7Ci0gIH07Ci0KLSAg
Ly8gUmV0dXJuIGEgdmVyc2lvbiBvZiB0aGUgYXJyYXkgdGhhdCBkb2VzIG5vdCBjb250YWluIHRo
ZSBzcGVjaWZpZWQgdmFsdWUocykuCi0gIF8ud2l0aG91dCA9IGZ1bmN0aW9uKGFycmF5KSB7Ci0g
ICAgcmV0dXJuIF8uZGlmZmVyZW5jZShhcnJheSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTsK
LSAgfTsKLQotICAvLyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJy
YXkuIElmIHRoZSBhcnJheSBoYXMgYWxyZWFkeQotICAvLyBiZWVuIHNvcnRlZCwgeW91IGhhdmUg
dGhlIG9wdGlvbiBvZiB1c2luZyBhIGZhc3RlciBhbGdvcml0aG0uCi0gIC8vIEFsaWFzZWQgYXMg
YHVuaXF1ZWAuCi0gIF8udW5pcSA9IF8udW5pcXVlID0gZnVuY3Rpb24oYXJyYXksIGlzU29ydGVk
LCBpdGVyYXRvciwgY29udGV4dCkgewotICAgIGlmIChfLmlzRnVuY3Rpb24oaXNTb3J0ZWQpKSB7
Ci0gICAgICBjb250ZXh0ID0gaXRlcmF0b3I7Ci0gICAgICBpdGVyYXRvciA9IGlzU29ydGVkOwot
ICAgICAgaXNTb3J0ZWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgdmFyIGluaXRpYWwgPSBpdGVyYXRv
ciA/IF8ubWFwKGFycmF5LCBpdGVyYXRvciwgY29udGV4dCkgOiBhcnJheTsKLSAgICB2YXIgcmVz
dWx0cyA9IFtdOwotICAgIHZhciBzZWVuID0gW107Ci0gICAgZWFjaChpbml0aWFsLCBmdW5jdGlv
bih2YWx1ZSwgaW5kZXgpIHsKLSAgICAgIGlmIChpc1NvcnRlZCA/ICghaW5kZXggfHwgc2Vlbltz
ZWVuLmxlbmd0aCAtIDFdICE9PSB2YWx1ZSkgOiAhXy5jb250YWlucyhzZWVuLCB2YWx1ZSkpIHsK
LSAgICAgICAgc2Vlbi5wdXNoKHZhbHVlKTsKLSAgICAgICAgcmVzdWx0cy5wdXNoKGFycmF5W2lu
ZGV4XSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHJlc3VsdHM7Ci0gIH07Ci0KLSAg
Ly8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSB1bmlvbjogZWFjaCBkaXN0aW5j
dCBlbGVtZW50IGZyb20gYWxsIG9mCi0gIC8vIHRoZSBwYXNzZWQtaW4gYXJyYXlzLgotICBfLnVu
aW9uID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIF8udW5pcShjb25jYXQuYXBwbHkoQXJyYXlQ
cm90bywgYXJndW1lbnRzKSk7Ci0gIH07Ci0KLSAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNv
bnRhaW5zIGV2ZXJ5IGl0ZW0gc2hhcmVkIGJldHdlZW4gYWxsIHRoZQotICAvLyBwYXNzZWQtaW4g
YXJyYXlzLgotICBfLmludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGFycmF5KSB7Ci0gICAgdmFyIHJl
c3QgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7Ci0gICAgcmV0dXJuIF8uZmlsdGVyKF8udW5p
cShhcnJheSksIGZ1bmN0aW9uKGl0ZW0pIHsKLSAgICAgIHJldHVybiBfLmV2ZXJ5KHJlc3QsIGZ1
bmN0aW9uKG90aGVyKSB7Ci0gICAgICAgIHJldHVybiBfLmluZGV4T2Yob3RoZXIsIGl0ZW0pID49
IDA7Ci0gICAgICB9KTsKLSAgICB9KTsKLSAgfTsKLQotICAvLyBUYWtlIHRoZSBkaWZmZXJlbmNl
IGJldHdlZW4gb25lIGFycmF5IGFuZCBhIG51bWJlciBvZiBvdGhlciBhcnJheXMuCi0gIC8vIE9u
bHkgdGhlIGVsZW1lbnRzIHByZXNlbnQgaW4ganVzdCB0aGUgZmlyc3QgYXJyYXkgd2lsbCByZW1h
aW4uCi0gIF8uZGlmZmVyZW5jZSA9IGZ1bmN0aW9uKGFycmF5KSB7Ci0gICAgdmFyIHJlc3QgPSBj
b25jYXQuYXBwbHkoQXJyYXlQcm90bywgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTsKLSAgICBy
ZXR1cm4gXy5maWx0ZXIoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKXsgcmV0dXJuICFfLmNvbnRhaW5z
KHJlc3QsIHZhbHVlKTsgfSk7Ci0gIH07Ci0KLSAgLy8gWmlwIHRvZ2V0aGVyIG11bHRpcGxlIGxp
c3RzIGludG8gYSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFyZQotICAvLyBhbiBp
bmRleCBnbyB0b2dldGhlci4KLSAgXy56aXAgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgYXJncyA9
IHNsaWNlLmNhbGwoYXJndW1lbnRzKTsKLSAgICB2YXIgbGVuZ3RoID0gXy5tYXgoXy5wbHVjayhh
cmdzLCAnbGVuZ3RoJykpOwotICAgIHZhciByZXN1bHRzID0gbmV3IEFycmF5KGxlbmd0aCk7Ci0g
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgcmVzdWx0c1tpXSA9
IF8ucGx1Y2soYXJncywgIiIgKyBpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdHM7Ci0gIH07
Ci0KLSAgLy8gQ29udmVydHMgbGlzdHMgaW50byBvYmplY3RzLiBQYXNzIGVpdGhlciBhIHNpbmds
ZSBhcnJheSBvZiBgW2tleSwgdmFsdWVdYAotICAvLyBwYWlycywgb3IgdHdvIHBhcmFsbGVsIGFy
cmF5cyBvZiB0aGUgc2FtZSBsZW5ndGggLS0gb25lIG9mIGtleXMsIGFuZCBvbmUgb2YKLSAgLy8g
dGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLgotICBfLm9iamVjdCA9IGZ1bmN0aW9uKGxpc3QsIHZh
bHVlcykgewotICAgIGlmIChsaXN0ID09IG51bGwpIHJldHVybiB7fTsKLSAgICB2YXIgcmVzdWx0
ID0ge307Ci0gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykg
ewotICAgICAgaWYgKHZhbHVlcykgewotICAgICAgICByZXN1bHRbbGlzdFtpXV0gPSB2YWx1ZXNb
aV07Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXN1bHRbbGlzdFtpXVswXV0gPSBsaXN0W2ld
WzFdOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9OwotCi0gIC8vIElm
IHRoZSBicm93c2VyIGRvZXNuJ3Qgc3VwcGx5IHVzIHdpdGggaW5kZXhPZiAoSSdtIGxvb2tpbmcg
YXQgeW91LCAqKk1TSUUqKiksCi0gIC8vIHdlIG5lZWQgdGhpcyBmdW5jdGlvbi4gUmV0dXJuIHRo
ZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhbgotICAvLyBpdGVtIGluIGFu
IGFycmF5LCBvciAtMSBpZiB0aGUgaXRlbSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGFycmF5Lgot
ICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgaW5kZXhPZmAgaWYg
YXZhaWxhYmxlLgotICAvLyBJZiB0aGUgYXJyYXkgaXMgbGFyZ2UgYW5kIGFscmVhZHkgaW4gc29y
dCBvcmRlciwgcGFzcyBgdHJ1ZWAKLSAgLy8gZm9yICoqaXNTb3J0ZWQqKiB0byB1c2UgYmluYXJ5
IHNlYXJjaC4KLSAgXy5pbmRleE9mID0gZnVuY3Rpb24oYXJyYXksIGl0ZW0sIGlzU29ydGVkKSB7
Ci0gICAgaWYgKGFycmF5ID09IG51bGwpIHJldHVybiAtMTsKLSAgICB2YXIgaSA9IDAsIGwgPSBh
cnJheS5sZW5ndGg7Ci0gICAgaWYgKGlzU29ydGVkKSB7Ci0gICAgICBpZiAodHlwZW9mIGlzU29y
dGVkID09ICdudW1iZXInKSB7Ci0gICAgICAgIGkgPSAoaXNTb3J0ZWQgPCAwID8gTWF0aC5tYXgo
MCwgbCArIGlzU29ydGVkKSA6IGlzU29ydGVkKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGkg
PSBfLnNvcnRlZEluZGV4KGFycmF5LCBpdGVtKTsKLSAgICAgICAgcmV0dXJuIGFycmF5W2ldID09
PSBpdGVtID8gaSA6IC0xOwotICAgICAgfQotICAgIH0KLSAgICBpZiAobmF0aXZlSW5kZXhPZiAm
JiBhcnJheS5pbmRleE9mID09PSBuYXRpdmVJbmRleE9mKSByZXR1cm4gYXJyYXkuaW5kZXhPZihp
dGVtLCBpc1NvcnRlZCk7Ci0gICAgZm9yICg7IGkgPCBsOyBpKyspIGlmIChhcnJheVtpXSA9PT0g
aXRlbSkgcmV0dXJuIGk7Ci0gICAgcmV0dXJuIC0xOwotICB9OwotCi0gIC8vIERlbGVnYXRlcyB0
byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBsYXN0SW5kZXhPZmAgaWYgYXZhaWxhYmxlLgot
ICBfLmxhc3RJbmRleE9mID0gZnVuY3Rpb24oYXJyYXksIGl0ZW0sIGZyb20pIHsKLSAgICBpZiAo
YXJyYXkgPT0gbnVsbCkgcmV0dXJuIC0xOwotICAgIHZhciBoYXNJbmRleCA9IGZyb20gIT0gbnVs
bDsKLSAgICBpZiAobmF0aXZlTGFzdEluZGV4T2YgJiYgYXJyYXkubGFzdEluZGV4T2YgPT09IG5h
dGl2ZUxhc3RJbmRleE9mKSB7Ci0gICAgICByZXR1cm4gaGFzSW5kZXggPyBhcnJheS5sYXN0SW5k
ZXhPZihpdGVtLCBmcm9tKSA6IGFycmF5Lmxhc3RJbmRleE9mKGl0ZW0pOwotICAgIH0KLSAgICB2
YXIgaSA9IChoYXNJbmRleCA/IGZyb20gOiBhcnJheS5sZW5ndGgpOwotICAgIHdoaWxlIChpLS0p
IGlmIChhcnJheVtpXSA9PT0gaXRlbSkgcmV0dXJuIGk7Ci0gICAgcmV0dXJuIC0xOwotICB9Owot
Ci0gIC8vIEdlbmVyYXRlIGFuIGludGVnZXIgQXJyYXkgY29udGFpbmluZyBhbiBhcml0aG1ldGlj
IHByb2dyZXNzaW9uLiBBIHBvcnQgb2YKLSAgLy8gdGhlIG5hdGl2ZSBQeXRob24gYHJhbmdlKClg
IGZ1bmN0aW9uLiBTZWUKLSAgLy8gW3RoZSBQeXRob24gZG9jdW1lbnRhdGlvbl0oaHR0cDovL2Rv
Y3MucHl0aG9uLm9yZy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3JhbmdlKS4KLSAgXy5yYW5nZSA9
IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7Ci0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgg
PD0gMSkgewotICAgICAgc3RvcCA9IHN0YXJ0IHx8IDA7Ci0gICAgICBzdGFydCA9IDA7Ci0gICAg
fQotICAgIHN0ZXAgPSBhcmd1bWVudHNbMl0gfHwgMTsKLQotICAgIHZhciBsZW4gPSBNYXRoLm1h
eChNYXRoLmNlaWwoKHN0b3AgLSBzdGFydCkgLyBzdGVwKSwgMCk7Ci0gICAgdmFyIGlkeCA9IDA7
Ci0gICAgdmFyIHJhbmdlID0gbmV3IEFycmF5KGxlbik7Ci0KLSAgICB3aGlsZShpZHggPCBsZW4p
IHsKLSAgICAgIHJhbmdlW2lkeCsrXSA9IHN0YXJ0OwotICAgICAgc3RhcnQgKz0gc3RlcDsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gcmFuZ2U7Ci0gIH07Ci0KLSAgLy8gRnVuY3Rpb24gKGFoZW0pIEZ1
bmN0aW9ucwotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyBDcmVhdGUgYSBmdW5jdGlv
biBib3VuZCB0byBhIGdpdmVuIG9iamVjdCAoYXNzaWduaW5nIGB0aGlzYCwgYW5kIGFyZ3VtZW50
cywKLSAgLy8gb3B0aW9uYWxseSkuIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0
aXZlIGBGdW5jdGlvbi5iaW5kYCBpZgotICAvLyBhdmFpbGFibGUuCi0gIF8uYmluZCA9IGZ1bmN0
aW9uKGZ1bmMsIGNvbnRleHQpIHsKLSAgICBpZiAoZnVuYy5iaW5kID09PSBuYXRpdmVCaW5kICYm
IG5hdGl2ZUJpbmQpIHJldHVybiBuYXRpdmVCaW5kLmFwcGx5KGZ1bmMsIHNsaWNlLmNhbGwoYXJn
dW1lbnRzLCAxKSk7Ci0gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7Ci0g
ICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkoY29udGV4dCwg
YXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7Ci0gICAgfTsKLSAgfTsKLQotICAv
LyBQYXJ0aWFsbHkgYXBwbHkgYSBmdW5jdGlvbiBieSBjcmVhdGluZyBhIHZlcnNpb24gdGhhdCBo
YXMgaGFkIHNvbWUgb2YgaXRzCi0gIC8vIGFyZ3VtZW50cyBwcmUtZmlsbGVkLCB3aXRob3V0IGNo
YW5naW5nIGl0cyBkeW5hbWljIGB0aGlzYCBjb250ZXh0LgotICBfLnBhcnRpYWwgPSBmdW5jdGlv
bihmdW5jKSB7Ci0gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7Ci0gICAg
cmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJncy5j
b25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7Ci0gICAgfTsKLSAgfTsKLQotICAvLyBCaW5k
IGFsbCBvZiBhbiBvYmplY3QncyBtZXRob2RzIHRvIHRoYXQgb2JqZWN0LiBVc2VmdWwgZm9yIGVu
c3VyaW5nIHRoYXQKLSAgLy8gYWxsIGNhbGxiYWNrcyBkZWZpbmVkIG9uIGFuIG9iamVjdCBiZWxv
bmcgdG8gaXQuCi0gIF8uYmluZEFsbCA9IGZ1bmN0aW9uKG9iaikgewotICAgIHZhciBmdW5jcyA9
IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKLSAgICBpZiAoZnVuY3MubGVuZ3RoID09PSAwKSBm
dW5jcyA9IF8uZnVuY3Rpb25zKG9iaik7Ci0gICAgZWFjaChmdW5jcywgZnVuY3Rpb24oZikgeyBv
YmpbZl0gPSBfLmJpbmQob2JqW2ZdLCBvYmopOyB9KTsKLSAgICByZXR1cm4gb2JqOwotICB9Owot
Ci0gIC8vIE1lbW9pemUgYW4gZXhwZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0b3JpbmcgaXRzIHJlc3Vs
dHMuCi0gIF8ubWVtb2l6ZSA9IGZ1bmN0aW9uKGZ1bmMsIGhhc2hlcikgewotICAgIHZhciBtZW1v
ID0ge307Ci0gICAgaGFzaGVyIHx8IChoYXNoZXIgPSBfLmlkZW50aXR5KTsKLSAgICByZXR1cm4g
ZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIga2V5ID0gaGFzaGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50
cyk7Ci0gICAgICByZXR1cm4gXy5oYXMobWVtbywga2V5KSA/IG1lbW9ba2V5XSA6IChtZW1vW2tl
eV0gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpOwotICAgIH07Ci0gIH07Ci0KLSAgLy8g
RGVsYXlzIGEgZnVuY3Rpb24gZm9yIHRoZSBnaXZlbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCBh
bmQgdGhlbiBjYWxscwotICAvLyBpdCB3aXRoIHRoZSBhcmd1bWVudHMgc3VwcGxpZWQuCi0gIF8u
ZGVsYXkgPSBmdW5jdGlvbihmdW5jLCB3YWl0KSB7Ci0gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxs
KGFyZ3VtZW50cywgMik7Ci0gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgcmV0dXJu
IGZ1bmMuYXBwbHkobnVsbCwgYXJncyk7IH0sIHdhaXQpOwotICB9OwotCi0gIC8vIERlZmVycyBh
IGZ1bmN0aW9uLCBzY2hlZHVsaW5nIGl0IHRvIHJ1biBhZnRlciB0aGUgY3VycmVudCBjYWxsIHN0
YWNrIGhhcwotICAvLyBjbGVhcmVkLgotICBfLmRlZmVyID0gZnVuY3Rpb24oZnVuYykgewotICAg
IHJldHVybiBfLmRlbGF5LmFwcGx5KF8sIFtmdW5jLCAxXS5jb25jYXQoc2xpY2UuY2FsbChhcmd1
bWVudHMsIDEpKSk7Ci0gIH07Ci0KLSAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCB3aGVu
IGludm9rZWQsIHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgYXQgbW9zdCBvbmNlCi0gIC8vIGR1cmlu
ZyBhIGdpdmVuIHdpbmRvdyBvZiB0aW1lLgotICBfLnRocm90dGxlID0gZnVuY3Rpb24oZnVuYywg
d2FpdCkgewotICAgIHZhciBjb250ZXh0LCBhcmdzLCB0aW1lb3V0LCByZXN1bHQ7Ci0gICAgdmFy
IHByZXZpb3VzID0gMDsKLSAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHsKLSAgICAgIHByZXZp
b3VzID0gbmV3IERhdGU7Ci0gICAgICB0aW1lb3V0ID0gbnVsbDsKLSAgICAgIHJlc3VsdCA9IGZ1
bmMuYXBwbHkoY29udGV4dCwgYXJncyk7Ci0gICAgfTsKLSAgICByZXR1cm4gZnVuY3Rpb24oKSB7
Ci0gICAgICB2YXIgbm93ID0gbmV3IERhdGU7Ci0gICAgICB2YXIgcmVtYWluaW5nID0gd2FpdCAt
IChub3cgLSBwcmV2aW91cyk7Ci0gICAgICBjb250ZXh0ID0gdGhpczsKLSAgICAgIGFyZ3MgPSBh
cmd1bWVudHM7Ci0gICAgICBpZiAocmVtYWluaW5nIDw9IDApIHsKLSAgICAgICAgY2xlYXJUaW1l
b3V0KHRpbWVvdXQpOwotICAgICAgICB0aW1lb3V0ID0gbnVsbDsKLSAgICAgICAgcHJldmlvdXMg
PSBub3c7Ci0gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7Ci0gICAg
ICB9IGVsc2UgaWYgKCF0aW1lb3V0KSB7Ci0gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxh
dGVyLCByZW1haW5pbmcpOwotICAgICAgfQotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Owot
ICB9OwotCi0gIC8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBjb250
aW51ZXMgdG8gYmUgaW52b2tlZCwgd2lsbCBub3QKLSAgLy8gYmUgdHJpZ2dlcmVkLiBUaGUgZnVu
Y3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgaXQgc3RvcHMgYmVpbmcgY2FsbGVkIGZvcgotICAv
LyBOIG1pbGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBm
dW5jdGlvbiBvbiB0aGUKLSAgLy8gbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGlu
Zy4KLSAgXy5kZWJvdW5jZSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkgewotICAg
IHZhciB0aW1lb3V0LCByZXN1bHQ7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgdmFy
IGNvbnRleHQgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOwotICAgICAgdmFyIGxhdGVyID0gZnVu
Y3Rpb24oKSB7Ci0gICAgICAgIHRpbWVvdXQgPSBudWxsOwotICAgICAgICBpZiAoIWltbWVkaWF0
ZSkgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTsKLSAgICAgIH07Ci0gICAgICB2
YXIgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDsKLSAgICAgIGNsZWFyVGltZW91dCh0
aW1lb3V0KTsKLSAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTsKLSAgICAg
IGlmIChjYWxsTm93KSByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpOwotICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICB9OwotICB9OwotCi0gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0
aGF0IHdpbGwgYmUgZXhlY3V0ZWQgYXQgbW9zdCBvbmUgdGltZSwgbm8gbWF0dGVyIGhvdwotICAv
LyBvZnRlbiB5b3UgY2FsbCBpdC4gVXNlZnVsIGZvciBsYXp5IGluaXRpYWxpemF0aW9uLgotICBf
Lm9uY2UgPSBmdW5jdGlvbihmdW5jKSB7Ci0gICAgdmFyIHJhbiA9IGZhbHNlLCBtZW1vOwotICAg
IHJldHVybiBmdW5jdGlvbigpIHsKLSAgICAgIGlmIChyYW4pIHJldHVybiBtZW1vOwotICAgICAg
cmFuID0gdHJ1ZTsKLSAgICAgIG1lbW8gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0g
ICAgICBmdW5jID0gbnVsbDsKLSAgICAgIHJldHVybiBtZW1vOwotICAgIH07Ci0gIH07Ci0KLSAg
Ly8gUmV0dXJucyB0aGUgZmlyc3QgZnVuY3Rpb24gcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRo
ZSBzZWNvbmQsCi0gIC8vIGFsbG93aW5nIHlvdSB0byBhZGp1c3QgYXJndW1lbnRzLCBydW4gY29k
ZSBiZWZvcmUgYW5kIGFmdGVyLCBhbmQKLSAgLy8gY29uZGl0aW9uYWxseSBleGVjdXRlIHRoZSBv
cmlnaW5hbCBmdW5jdGlvbi4KLSAgXy53cmFwID0gZnVuY3Rpb24oZnVuYywgd3JhcHBlcikgewot
ICAgIHJldHVybiBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBhcmdzID0gW2Z1bmNdOwotICAgICAg
cHVzaC5hcHBseShhcmdzLCBhcmd1bWVudHMpOwotICAgICAgcmV0dXJuIHdyYXBwZXIuYXBwbHko
dGhpcywgYXJncyk7Ci0gICAgfTsKLSAgfTsKLQotICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhh
dCBpcyB0aGUgY29tcG9zaXRpb24gb2YgYSBsaXN0IG9mIGZ1bmN0aW9ucywgZWFjaAotICAvLyBj
b25zdW1pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCBmb2xsb3dzLgot
ICBfLmNvbXBvc2UgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgZnVuY3MgPSBhcmd1bWVudHM7Ci0g
ICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7Ci0gICAg
ICBmb3IgKHZhciBpID0gZnVuY3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAg
YXJncyA9IFtmdW5jc1tpXS5hcHBseSh0aGlzLCBhcmdzKV07Ci0gICAgICB9Ci0gICAgICByZXR1
cm4gYXJnc1swXTsKLSAgICB9OwotICB9OwotCi0gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0
IHdpbGwgb25seSBiZSBleGVjdXRlZCBhZnRlciBiZWluZyBjYWxsZWQgTiB0aW1lcy4KLSAgXy5h
ZnRlciA9IGZ1bmN0aW9uKHRpbWVzLCBmdW5jKSB7Ci0gICAgaWYgKHRpbWVzIDw9IDApIHJldHVy
biBmdW5jKCk7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgaWYgKC0tdGltZXMgPCAx
KSB7Ci0gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICB9
Ci0gICAgfTsKLSAgfTsKLQotICAvLyBPYmplY3QgRnVuY3Rpb25zCi0gIC8vIC0tLS0tLS0tLS0t
LS0tLS0KLQotICAvLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3MgcHJvcGVydGll
cy4KLSAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYE9iamVjdC5r
ZXlzYAotICBfLmtleXMgPSBuYXRpdmVLZXlzIHx8IGZ1bmN0aW9uKG9iaikgewotICAgIGlmIChv
YmogIT09IE9iamVjdChvYmopKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG9iamVjdCcp
OwotICAgIHZhciBrZXlzID0gW107Ci0gICAgZm9yICh2YXIga2V5IGluIG9iaikgaWYgKF8uaGFz
KG9iaiwga2V5KSkga2V5c1trZXlzLmxlbmd0aF0gPSBrZXk7Ci0gICAgcmV0dXJuIGtleXM7Ci0g
IH07Ci0KLSAgLy8gUmV0cmlldmUgdGhlIHZhbHVlcyBvZiBhbiBvYmplY3QncyBwcm9wZXJ0aWVz
LgotICBfLnZhbHVlcyA9IGZ1bmN0aW9uKG9iaikgewotICAgIHZhciB2YWx1ZXMgPSBbXTsKLSAg
ICBmb3IgKHZhciBrZXkgaW4gb2JqKSBpZiAoXy5oYXMob2JqLCBrZXkpKSB2YWx1ZXMucHVzaChv
Ympba2V5XSk7Ci0gICAgcmV0dXJuIHZhbHVlczsKLSAgfTsKLQotICAvLyBDb252ZXJ0IGFuIG9i
amVjdCBpbnRvIGEgbGlzdCBvZiBgW2tleSwgdmFsdWVdYCBwYWlycy4KLSAgXy5wYWlycyA9IGZ1
bmN0aW9uKG9iaikgewotICAgIHZhciBwYWlycyA9IFtdOwotICAgIGZvciAodmFyIGtleSBpbiBv
YmopIGlmIChfLmhhcyhvYmosIGtleSkpIHBhaXJzLnB1c2goW2tleSwgb2JqW2tleV1dKTsKLSAg
ICByZXR1cm4gcGFpcnM7Ci0gIH07Ci0KLSAgLy8gSW52ZXJ0IHRoZSBrZXlzIGFuZCB2YWx1ZXMg
b2YgYW4gb2JqZWN0LiBUaGUgdmFsdWVzIG11c3QgYmUgc2VyaWFsaXphYmxlLgotICBfLmludmVy
dCA9IGZ1bmN0aW9uKG9iaikgewotICAgIHZhciByZXN1bHQgPSB7fTsKLSAgICBmb3IgKHZhciBr
ZXkgaW4gb2JqKSBpZiAoXy5oYXMob2JqLCBrZXkpKSByZXN1bHRbb2JqW2tleV1dID0ga2V5Owot
ICAgIHJldHVybiByZXN1bHQ7Ci0gIH07Ci0KLSAgLy8gUmV0dXJuIGEgc29ydGVkIGxpc3Qgb2Yg
dGhlIGZ1bmN0aW9uIG5hbWVzIGF2YWlsYWJsZSBvbiB0aGUgb2JqZWN0LgotICAvLyBBbGlhc2Vk
IGFzIGBtZXRob2RzYAotICBfLmZ1bmN0aW9ucyA9IF8ubWV0aG9kcyA9IGZ1bmN0aW9uKG9iaikg
ewotICAgIHZhciBuYW1lcyA9IFtdOwotICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsKLSAgICAg
IGlmIChfLmlzRnVuY3Rpb24ob2JqW2tleV0pKSBuYW1lcy5wdXNoKGtleSk7Ci0gICAgfQotICAg
IHJldHVybiBuYW1lcy5zb3J0KCk7Ci0gIH07Ci0KLSAgLy8gRXh0ZW5kIGEgZ2l2ZW4gb2JqZWN0
IHdpdGggYWxsIHRoZSBwcm9wZXJ0aWVzIGluIHBhc3NlZC1pbiBvYmplY3QocykuCi0gIF8uZXh0
ZW5kID0gZnVuY3Rpb24ob2JqKSB7Ci0gICAgZWFjaChzbGljZS5jYWxsKGFyZ3VtZW50cywgMSks
IGZ1bmN0aW9uKHNvdXJjZSkgewotICAgICAgaWYgKHNvdXJjZSkgewotICAgICAgICBmb3IgKHZh
ciBwcm9wIGluIHNvdXJjZSkgewotICAgICAgICAgIG9ialtwcm9wXSA9IHNvdXJjZVtwcm9wXTsK
LSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICAgIHJldHVybiBvYmo7Ci0gIH07Ci0KLSAg
Ly8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IG9ubHkgY29udGFpbmluZyB0aGUgd2hpdGVs
aXN0ZWQgcHJvcGVydGllcy4KLSAgXy5waWNrID0gZnVuY3Rpb24ob2JqKSB7Ci0gICAgdmFyIGNv
cHkgPSB7fTsKLSAgICB2YXIga2V5cyA9IGNvbmNhdC5hcHBseShBcnJheVByb3RvLCBzbGljZS5j
YWxsKGFyZ3VtZW50cywgMSkpOwotICAgIGVhY2goa2V5cywgZnVuY3Rpb24oa2V5KSB7Ci0gICAg
ICBpZiAoa2V5IGluIG9iaikgY29weVtrZXldID0gb2JqW2tleV07Ci0gICAgfSk7Ci0gICAgcmV0
dXJuIGNvcHk7Ci0gIH07Ci0KLSAgIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRo
b3V0IHRoZSBibGFja2xpc3RlZCBwcm9wZXJ0aWVzLgotICBfLm9taXQgPSBmdW5jdGlvbihvYmop
IHsKLSAgICB2YXIgY29weSA9IHt9OwotICAgIHZhciBrZXlzID0gY29uY2F0LmFwcGx5KEFycmF5
UHJvdG8sIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7Ci0gICAgZm9yICh2YXIga2V5IGluIG9i
aikgewotICAgICAgaWYgKCFfLmNvbnRhaW5zKGtleXMsIGtleSkpIGNvcHlba2V5XSA9IG9ialtr
ZXldOwotICAgIH0KLSAgICByZXR1cm4gY29weTsKLSAgfTsKLQotICAvLyBGaWxsIGluIGEgZ2l2
ZW4gb2JqZWN0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzLgotICBfLmRlZmF1bHRzID0gZnVuY3Rp
b24ob2JqKSB7Ci0gICAgZWFjaChzbGljZS5jYWxsKGFyZ3VtZW50cywgMSksIGZ1bmN0aW9uKHNv
dXJjZSkgewotICAgICAgaWYgKHNvdXJjZSkgewotICAgICAgICBmb3IgKHZhciBwcm9wIGluIHNv
dXJjZSkgewotICAgICAgICAgIGlmIChvYmpbcHJvcF0gPT0gbnVsbCkgb2JqW3Byb3BdID0gc291
cmNlW3Byb3BdOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgcmV0dXJuIG9iajsK
LSAgfTsKLQotICAvLyBDcmVhdGUgYSAoc2hhbGxvdy1jbG9uZWQpIGR1cGxpY2F0ZSBvZiBhbiBv
YmplY3QuCi0gIF8uY2xvbmUgPSBmdW5jdGlvbihvYmopIHsKLSAgICBpZiAoIV8uaXNPYmplY3Qo
b2JqKSkgcmV0dXJuIG9iajsKLSAgICByZXR1cm4gXy5pc0FycmF5KG9iaikgPyBvYmouc2xpY2Uo
KSA6IF8uZXh0ZW5kKHt9LCBvYmopOwotICB9OwotCi0gIC8vIEludm9rZXMgaW50ZXJjZXB0b3Ig
d2l0aCB0aGUgb2JqLCBhbmQgdGhlbiByZXR1cm5zIG9iai4KLSAgLy8gVGhlIHByaW1hcnkgcHVy
cG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byAidGFwIGludG8iIGEgbWV0aG9kIGNoYWluLCBpbgot
ICAvLyBvcmRlciB0byBwZXJmb3JtIG9wZXJhdGlvbnMgb24gaW50ZXJtZWRpYXRlIHJlc3VsdHMg
d2l0aGluIHRoZSBjaGFpbi4KLSAgXy50YXAgPSBmdW5jdGlvbihvYmosIGludGVyY2VwdG9yKSB7
Ci0gICAgaW50ZXJjZXB0b3Iob2JqKTsKLSAgICByZXR1cm4gb2JqOwotICB9OwotCi0gIC8vIElu
dGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgaXNFcXVhbGAuCi0gIHZh
ciBlcSA9IGZ1bmN0aW9uKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7Ci0gICAgLy8gSWRlbnRpY2Fs
IG9iamVjdHMgYXJlIGVxdWFsLiBgMCA9PT0gLTBgLCBidXQgdGhleSBhcmVuJ3QgaWRlbnRpY2Fs
LgotICAgIC8vIFNlZSB0aGUgSGFybW9ueSBgZWdhbGAgcHJvcG9zYWw6IGh0dHA6Ly93aWtpLmVj
bWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6ZWdhbC4KLSAgICBpZiAoYSA9PT0gYikg
cmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT0gMSAvIGI7Ci0gICAgLy8gQSBzdHJpY3QgY29tcGFy
aXNvbiBpcyBuZWNlc3NhcnkgYmVjYXVzZSBgbnVsbCA9PSB1bmRlZmluZWRgLgotICAgIGlmIChh
ID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gYSA9PT0gYjsKLSAgICAvLyBVbndyYXAgYW55
IHdyYXBwZWQgb2JqZWN0cy4KLSAgICBpZiAoYSBpbnN0YW5jZW9mIF8pIGEgPSBhLl93cmFwcGVk
OwotICAgIGlmIChiIGluc3RhbmNlb2YgXykgYiA9IGIuX3dyYXBwZWQ7Ci0gICAgLy8gQ29tcGFy
ZSBgW1tDbGFzc11dYCBuYW1lcy4KLSAgICB2YXIgY2xhc3NOYW1lID0gdG9TdHJpbmcuY2FsbChh
KTsKLSAgICBpZiAoY2xhc3NOYW1lICE9IHRvU3RyaW5nLmNhbGwoYikpIHJldHVybiBmYWxzZTsK
LSAgICBzd2l0Y2ggKGNsYXNzTmFtZSkgewotICAgICAgLy8gU3RyaW5ncywgbnVtYmVycywgZGF0
ZXMsIGFuZCBib29sZWFucyBhcmUgY29tcGFyZWQgYnkgdmFsdWUuCi0gICAgICBjYXNlICdbb2Jq
ZWN0IFN0cmluZ10nOgotICAgICAgICAvLyBQcmltaXRpdmVzIGFuZCB0aGVpciBjb3JyZXNwb25k
aW5nIG9iamVjdCB3cmFwcGVycyBhcmUgZXF1aXZhbGVudDsgdGh1cywgYCI1ImAgaXMKLSAgICAg
ICAgLy8gZXF1aXZhbGVudCB0byBgbmV3IFN0cmluZygiNSIpYC4KLSAgICAgICAgcmV0dXJuIGEg
PT0gU3RyaW5nKGIpOwotICAgICAgY2FzZSAnW29iamVjdCBOdW1iZXJdJzoKLSAgICAgICAgLy8g
YE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS4gQW4gYGVnYWxgIGNvbXBh
cmlzb24gaXMgcGVyZm9ybWVkIGZvcgotICAgICAgICAvLyBvdGhlciBudW1lcmljIHZhbHVlcy4K
LSAgICAgICAgcmV0dXJuIGEgIT0gK2EgPyBiICE9ICtiIDogKGEgPT0gMCA/IDEgLyBhID09IDEg
LyBiIDogYSA9PSArYik7Ci0gICAgICBjYXNlICdbb2JqZWN0IERhdGVdJzoKLSAgICAgIGNhc2Ug
J1tvYmplY3QgQm9vbGVhbl0nOgotICAgICAgICAvLyBDb2VyY2UgZGF0ZXMgYW5kIGJvb2xlYW5z
IHRvIG51bWVyaWMgcHJpbWl0aXZlIHZhbHVlcy4gRGF0ZXMgYXJlIGNvbXBhcmVkIGJ5IHRoZWly
Ci0gICAgICAgIC8vIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9ucy4gTm90ZSB0aGF0IGludmFs
aWQgZGF0ZXMgd2l0aCBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnMKLSAgICAgICAgLy8gb2Yg
YE5hTmAgYXJlIG5vdCBlcXVpdmFsZW50LgotICAgICAgICByZXR1cm4gK2EgPT0gK2I7Ci0gICAg
ICAvLyBSZWdFeHBzIGFyZSBjb21wYXJlZCBieSB0aGVpciBzb3VyY2UgcGF0dGVybnMgYW5kIGZs
YWdzLgotICAgICAgY2FzZSAnW29iamVjdCBSZWdFeHBdJzoKLSAgICAgICAgcmV0dXJuIGEuc291
cmNlID09IGIuc291cmNlICYmCi0gICAgICAgICAgICAgICBhLmdsb2JhbCA9PSBiLmdsb2JhbCAm
JgotICAgICAgICAgICAgICAgYS5tdWx0aWxpbmUgPT0gYi5tdWx0aWxpbmUgJiYKLSAgICAgICAg
ICAgICAgIGEuaWdub3JlQ2FzZSA9PSBiLmlnbm9yZUNhc2U7Ci0gICAgfQotICAgIGlmICh0eXBl
b2YgYSAhPSAnb2JqZWN0JyB8fCB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlOwot
ICAgIC8vIEFzc3VtZSBlcXVhbGl0eSBmb3IgY3ljbGljIHN0cnVjdHVyZXMuIFRoZSBhbGdvcml0
aG0gZm9yIGRldGVjdGluZyBjeWNsaWMKLSAgICAvLyBzdHJ1Y3R1cmVzIGlzIGFkYXB0ZWQgZnJv
bSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLCBhYnN0cmFjdCBvcGVyYXRpb24gYEpPYC4KLSAgICB2
YXIgbGVuZ3RoID0gYVN0YWNrLmxlbmd0aDsKLSAgICB3aGlsZSAobGVuZ3RoLS0pIHsKLSAgICAg
IC8vIExpbmVhciBzZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwg
dG8gdGhlIG51bWJlciBvZgotICAgICAgLy8gdW5pcXVlIG5lc3RlZCBzdHJ1Y3R1cmVzLgotICAg
ICAgaWYgKGFTdGFja1tsZW5ndGhdID09IGEpIHJldHVybiBiU3RhY2tbbGVuZ3RoXSA9PSBiOwot
ICAgIH0KLSAgICAvLyBBZGQgdGhlIGZpcnN0IG9iamVjdCB0byB0aGUgc3RhY2sgb2YgdHJhdmVy
c2VkIG9iamVjdHMuCi0gICAgYVN0YWNrLnB1c2goYSk7Ci0gICAgYlN0YWNrLnB1c2goYik7Ci0g
ICAgdmFyIHNpemUgPSAwLCByZXN1bHQgPSB0cnVlOwotICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBh
cmUgb2JqZWN0cyBhbmQgYXJyYXlzLgotICAgIGlmIChjbGFzc05hbWUgPT0gJ1tvYmplY3QgQXJy
YXldJykgewotICAgICAgLy8gQ29tcGFyZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBh
IGRlZXAgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkuCi0gICAgICBzaXplID0gYS5sZW5ndGg7Ci0g
ICAgICByZXN1bHQgPSBzaXplID09IGIubGVuZ3RoOwotICAgICAgaWYgKHJlc3VsdCkgewotICAg
ICAgICAvLyBEZWVwIGNvbXBhcmUgdGhlIGNvbnRlbnRzLCBpZ25vcmluZyBub24tbnVtZXJpYyBw
cm9wZXJ0aWVzLgotICAgICAgICB3aGlsZSAoc2l6ZS0tKSB7Ci0gICAgICAgICAgaWYgKCEocmVz
dWx0ID0gZXEoYVtzaXplXSwgYltzaXplXSwgYVN0YWNrLCBiU3RhY2spKSkgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgLy8gT2JqZWN0cyB3aXRoIGRpZmZl
cmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVpdmFsZW50LCBidXQgYE9iamVjdGBzCi0gICAg
ICAvLyBmcm9tIGRpZmZlcmVudCBmcmFtZXMgYXJlLgotICAgICAgdmFyIGFDdG9yID0gYS5jb25z
dHJ1Y3RvciwgYkN0b3IgPSBiLmNvbnN0cnVjdG9yOwotICAgICAgaWYgKGFDdG9yICE9PSBiQ3Rv
ciAmJiAhKF8uaXNGdW5jdGlvbihhQ3RvcikgJiYgKGFDdG9yIGluc3RhbmNlb2YgYUN0b3IpICYm
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5pc0Z1bmN0aW9uKGJDdG9yKSAmJiAo
YkN0b3IgaW5zdGFuY2VvZiBiQ3RvcikpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
IH0KLSAgICAgIC8vIERlZXAgY29tcGFyZSBvYmplY3RzLgotICAgICAgZm9yICh2YXIga2V5IGlu
IGEpIHsKLSAgICAgICAgaWYgKF8uaGFzKGEsIGtleSkpIHsKLSAgICAgICAgICAvLyBDb3VudCB0
aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIHByb3BlcnRpZXMuCi0gICAgICAgICAgc2l6ZSsrOwotICAg
ICAgICAgIC8vIERlZXAgY29tcGFyZSBlYWNoIG1lbWJlci4KLSAgICAgICAgICBpZiAoIShyZXN1
bHQgPSBfLmhhcyhiLCBrZXkpICYmIGVxKGFba2V5XSwgYltrZXldLCBhU3RhY2ssIGJTdGFjaykp
KSBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gRW5zdXJlIHRoYXQgYm90aCBv
YmplY3RzIGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVyIG9mIHByb3BlcnRpZXMuCi0gICAgICBpZiAo
cmVzdWx0KSB7Ci0gICAgICAgIGZvciAoa2V5IGluIGIpIHsKLSAgICAgICAgICBpZiAoXy5oYXMo
Yiwga2V5KSAmJiAhKHNpemUtLSkpIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJlc3VsdCA9
ICFzaXplOwotICAgICAgfQotICAgIH0KLSAgICAvLyBSZW1vdmUgdGhlIGZpcnN0IG9iamVjdCBm
cm9tIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy4KLSAgICBhU3RhY2sucG9wKCk7Ci0g
ICAgYlN0YWNrLnBvcCgpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH07Ci0KLSAgLy8gUGVyZm9y
bSBhIGRlZXAgY29tcGFyaXNvbiB0byBjaGVjayBpZiB0d28gb2JqZWN0cyBhcmUgZXF1YWwuCi0g
IF8uaXNFcXVhbCA9IGZ1bmN0aW9uKGEsIGIpIHsKLSAgICByZXR1cm4gZXEoYSwgYiwgW10sIFtd
KTsKLSAgfTsKLQotICAvLyBJcyBhIGdpdmVuIGFycmF5LCBzdHJpbmcsIG9yIG9iamVjdCBlbXB0
eT8KLSAgLy8gQW4gImVtcHR5IiBvYmplY3QgaGFzIG5vIGVudW1lcmFibGUgb3duLXByb3BlcnRp
ZXMuCi0gIF8uaXNFbXB0eSA9IGZ1bmN0aW9uKG9iaikgewotICAgIGlmIChvYmogPT0gbnVsbCkg
cmV0dXJuIHRydWU7Ci0gICAgaWYgKF8uaXNBcnJheShvYmopIHx8IF8uaXNTdHJpbmcob2JqKSkg
cmV0dXJuIG9iai5sZW5ndGggPT09IDA7Ci0gICAgZm9yICh2YXIga2V5IGluIG9iaikgaWYgKF8u
aGFzKG9iaiwga2V5KSkgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9OwotCi0g
IC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBET00gZWxlbWVudD8KLSAgXy5pc0VsZW1lbnQgPSBmdW5j
dGlvbihvYmopIHsKLSAgICByZXR1cm4gISEob2JqICYmIG9iai5ub2RlVHlwZSA9PT0gMSk7Ci0g
IH07Ci0KLSAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhbiBhcnJheT8KLSAgLy8gRGVsZWdhdGVzIHRv
IEVDTUE1J3MgbmF0aXZlIEFycmF5LmlzQXJyYXkKLSAgXy5pc0FycmF5ID0gbmF0aXZlSXNBcnJh
eSB8fCBmdW5jdGlvbihvYmopIHsKLSAgICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09ICdb
b2JqZWN0IEFycmF5XSc7Ci0gIH07Ci0KLSAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSBhbiBvYmpl
Y3Q/Ci0gIF8uaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHsKLSAgICByZXR1cm4gb2JqID09PSBP
YmplY3Qob2JqKTsKLSAgfTsKLQotICAvLyBBZGQgc29tZSBpc1R5cGUgbWV0aG9kczogaXNBcmd1
bWVudHMsIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBpc051bWJlciwgaXNEYXRlLCBpc1JlZ0V4cC4K
LSAgZWFjaChbJ0FyZ3VtZW50cycsICdGdW5jdGlvbicsICdTdHJpbmcnLCAnTnVtYmVyJywgJ0Rh
dGUnLCAnUmVnRXhwJ10sIGZ1bmN0aW9uKG5hbWUpIHsKLSAgICBfWydpcycgKyBuYW1lXSA9IGZ1
bmN0aW9uKG9iaikgewotICAgICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PSAnW29iamVj
dCAnICsgbmFtZSArICddJzsKLSAgICB9OwotICB9KTsKLQotICAvLyBEZWZpbmUgYSBmYWxsYmFj
ayB2ZXJzaW9uIG9mIHRoZSBtZXRob2QgaW4gYnJvd3NlcnMgKGFoZW0sIElFKSwgd2hlcmUKLSAg
Ly8gdGhlcmUgaXNuJ3QgYW55IGluc3BlY3RhYmxlICJBcmd1bWVudHMiIHR5cGUuCi0gIGlmICgh
Xy5pc0FyZ3VtZW50cyhhcmd1bWVudHMpKSB7Ci0gICAgXy5pc0FyZ3VtZW50cyA9IGZ1bmN0aW9u
KG9iaikgewotICAgICAgcmV0dXJuICEhKG9iaiAmJiBfLmhhcyhvYmosICdjYWxsZWUnKSk7Ci0g
ICAgfTsKLSAgfQotCi0gIC8vIE9wdGltaXplIGBpc0Z1bmN0aW9uYCBpZiBhcHByb3ByaWF0ZS4K
LSAgaWYgKHR5cGVvZiAoLy4vKSAhPT0gJ2Z1bmN0aW9uJykgewotICAgIF8uaXNGdW5jdGlvbiA9
IGZ1bmN0aW9uKG9iaikgewotICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbic7
Ci0gICAgfTsKLSAgfQotCi0gIC8vIElzIGEgZ2l2ZW4gb2JqZWN0IGEgZmluaXRlIG51bWJlcj8K
LSAgXy5pc0Zpbml0ZSA9IGZ1bmN0aW9uKG9iaikgewotICAgIHJldHVybiBpc0Zpbml0ZShvYmop
ICYmICFpc05hTihwYXJzZUZsb2F0KG9iaikpOwotICB9OwotCi0gIC8vIElzIHRoZSBnaXZlbiB2
YWx1ZSBgTmFOYD8gKE5hTiBpcyB0aGUgb25seSBudW1iZXIgd2hpY2ggZG9lcyBub3QgZXF1YWwg
aXRzZWxmKS4KLSAgXy5pc05hTiA9IGZ1bmN0aW9uKG9iaikgewotICAgIHJldHVybiBfLmlzTnVt
YmVyKG9iaikgJiYgb2JqICE9ICtvYmo7Ci0gIH07Ci0KLSAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBh
IGJvb2xlYW4/Ci0gIF8uaXNCb29sZWFuID0gZnVuY3Rpb24ob2JqKSB7Ci0gICAgcmV0dXJuIG9i
aiA9PT0gdHJ1ZSB8fCBvYmogPT09IGZhbHNlIHx8IHRvU3RyaW5nLmNhbGwob2JqKSA9PSAnW29i
amVjdCBCb29sZWFuXSc7Ci0gIH07Ci0KLSAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBlcXVhbCB0byBu
dWxsPwotICBfLmlzTnVsbCA9IGZ1bmN0aW9uKG9iaikgewotICAgIHJldHVybiBvYmogPT09IG51
bGw7Ci0gIH07Ci0KLSAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSB1bmRlZmluZWQ/Ci0gIF8uaXNV
bmRlZmluZWQgPSBmdW5jdGlvbihvYmopIHsKLSAgICByZXR1cm4gb2JqID09PSB2b2lkIDA7Ci0g
IH07Ci0KLSAgLy8gU2hvcnRjdXQgZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGFuIG9iamVjdCBo
YXMgYSBnaXZlbiBwcm9wZXJ0eSBkaXJlY3RseQotICAvLyBvbiBpdHNlbGYgKGluIG90aGVyIHdv
cmRzLCBub3Qgb24gYSBwcm90b3R5cGUpLgotICBfLmhhcyA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7
Ci0gICAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpOwotICB9OwotCi0gIC8v
IFV0aWxpdHkgRnVuY3Rpb25zCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gUnVuIFVu
ZGVyc2NvcmUuanMgaW4gKm5vQ29uZmxpY3QqIG1vZGUsIHJldHVybmluZyB0aGUgYF9gIHZhcmlh
YmxlIHRvIGl0cwotICAvLyBwcmV2aW91cyBvd25lci4gUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0
aGUgVW5kZXJzY29yZSBvYmplY3QuCi0gIF8ubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkgewotICAg
IHJvb3QuXyA9IHByZXZpb3VzVW5kZXJzY29yZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfTsKLQot
ICAvLyBLZWVwIHRoZSBpZGVudGl0eSBmdW5jdGlvbiBhcm91bmQgZm9yIGRlZmF1bHQgaXRlcmF0
b3JzLgotICBfLmlkZW50aXR5ID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgICByZXR1cm4gdmFsdWU7
Ci0gIH07Ci0KLSAgLy8gUnVuIGEgZnVuY3Rpb24gKipuKiogdGltZXMuCi0gIF8udGltZXMgPSBm
dW5jdGlvbihuLCBpdGVyYXRvciwgY29udGV4dCkgewotICAgIHZhciBhY2N1bSA9IEFycmF5KG4p
OwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSBhY2N1bVtpXSA9IGl0ZXJhdG9yLmNh
bGwoY29udGV4dCwgaSk7Ci0gICAgcmV0dXJuIGFjY3VtOwotICB9OwotCi0gIC8vIFJldHVybiBh
IHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXggKGluY2x1c2l2ZSkuCi0gIF8ucmFu
ZG9tID0gZnVuY3Rpb24obWluLCBtYXgpIHsKLSAgICBpZiAobWF4ID09IG51bGwpIHsKLSAgICAg
IG1heCA9IG1pbjsKLSAgICAgIG1pbiA9IDA7Ci0gICAgfQotICAgIHJldHVybiBtaW4gKyBNYXRo
LmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpOwotICB9OwotCi0gIC8vIExp
c3Qgb2YgSFRNTCBlbnRpdGllcyBmb3IgZXNjYXBpbmcuCi0gIHZhciBlbnRpdHlNYXAgPSB7Ci0g
ICAgZXNjYXBlOiB7Ci0gICAgICAnJic6ICcmYW1wOycsCi0gICAgICAnPCc6ICcmbHQ7JywKLSAg
ICAgICc+JzogJyZndDsnLAotICAgICAgJyInOiAnJnF1b3Q7JywKLSAgICAgICInIjogJyYjeDI3
OycsCi0gICAgICAnLyc6ICcmI3gyRjsnCi0gICAgfQotICB9OwotICBlbnRpdHlNYXAudW5lc2Nh
cGUgPSBfLmludmVydChlbnRpdHlNYXAuZXNjYXBlKTsKLQotICAvLyBSZWdleGVzIGNvbnRhaW5p
bmcgdGhlIGtleXMgYW5kIHZhbHVlcyBsaXN0ZWQgaW1tZWRpYXRlbHkgYWJvdmUuCi0gIHZhciBl
bnRpdHlSZWdleGVzID0gewotICAgIGVzY2FwZTogICBuZXcgUmVnRXhwKCdbJyArIF8ua2V5cyhl
bnRpdHlNYXAuZXNjYXBlKS5qb2luKCcnKSArICddJywgJ2cnKSwKLSAgICB1bmVzY2FwZTogbmV3
IFJlZ0V4cCgnKCcgKyBfLmtleXMoZW50aXR5TWFwLnVuZXNjYXBlKS5qb2luKCd8JykgKyAnKScs
ICdnJykKLSAgfTsKLQotICAvLyBGdW5jdGlvbnMgZm9yIGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5n
IHN0cmluZ3MgdG8vZnJvbSBIVE1MIGludGVycG9sYXRpb24uCi0gIF8uZWFjaChbJ2VzY2FwZScs
ICd1bmVzY2FwZSddLCBmdW5jdGlvbihtZXRob2QpIHsKLSAgICBfW21ldGhvZF0gPSBmdW5jdGlv
bihzdHJpbmcpIHsKLSAgICAgIGlmIChzdHJpbmcgPT0gbnVsbCkgcmV0dXJuICcnOwotICAgICAg
cmV0dXJuICgnJyArIHN0cmluZykucmVwbGFjZShlbnRpdHlSZWdleGVzW21ldGhvZF0sIGZ1bmN0
aW9uKG1hdGNoKSB7Ci0gICAgICAgIHJldHVybiBlbnRpdHlNYXBbbWV0aG9kXVttYXRjaF07Ci0g
ICAgICB9KTsKLSAgICB9OwotICB9KTsKLQotICAvLyBJZiB0aGUgdmFsdWUgb2YgdGhlIG5hbWVk
IHByb3BlcnR5IGlzIGEgZnVuY3Rpb24gdGhlbiBpbnZva2UgaXQ7Ci0gIC8vIG90aGVyd2lzZSwg
cmV0dXJuIGl0LgotICBfLnJlc3VsdCA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsKLSAg
ICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiBudWxsOwotICAgIHZhciB2YWx1ZSA9IG9iamVj
dFtwcm9wZXJ0eV07Ci0gICAgcmV0dXJuIF8uaXNGdW5jdGlvbih2YWx1ZSkgPyB2YWx1ZS5jYWxs
KG9iamVjdCkgOiB2YWx1ZTsKLSAgfTsKLQotICAvLyBBZGQgeW91ciBvd24gY3VzdG9tIGZ1bmN0
aW9ucyB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QuCi0gIF8ubWl4aW4gPSBmdW5jdGlvbihvYmop
IHsKLSAgICBlYWNoKF8uZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpewotICAgICAgdmFy
IGZ1bmMgPSBfW25hbWVdID0gb2JqW25hbWVdOwotICAgICAgXy5wcm90b3R5cGVbbmFtZV0gPSBm
dW5jdGlvbigpIHsKLSAgICAgICAgdmFyIGFyZ3MgPSBbdGhpcy5fd3JhcHBlZF07Ci0gICAgICAg
IHB1c2guYXBwbHkoYXJncywgYXJndW1lbnRzKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5jYWxs
KHRoaXMsIGZ1bmMuYXBwbHkoXywgYXJncykpOwotICAgICAgfTsKLSAgICB9KTsKLSAgfTsKLQot
ICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBpbnRlZ2VyIGlkICh1bmlxdWUgd2l0aGluIHRoZSBlbnRp
cmUgY2xpZW50IHNlc3Npb24pLgotICAvLyBVc2VmdWwgZm9yIHRlbXBvcmFyeSBET00gaWRzLgot
ICB2YXIgaWRDb3VudGVyID0gMDsKLSAgXy51bmlxdWVJZCA9IGZ1bmN0aW9uKHByZWZpeCkgewot
ICAgIHZhciBpZCA9ICsraWRDb3VudGVyICsgJyc7Ci0gICAgcmV0dXJuIHByZWZpeCA/IHByZWZp
eCArIGlkIDogaWQ7Ci0gIH07Ci0KLSAgLy8gQnkgZGVmYXVsdCwgVW5kZXJzY29yZSB1c2VzIEVS
Qi1zdHlsZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLCBjaGFuZ2UgdGhlCi0gIC8vIGZvbGxvd2luZyB0
ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy4KLSAgXy50ZW1w
bGF0ZVNldHRpbmdzID0gewotICAgIGV2YWx1YXRlICAgIDogLzwlKFtcc1xTXSs/KSU+L2csCi0g
ICAgaW50ZXJwb2xhdGUgOiAvPCU9KFtcc1xTXSs/KSU+L2csCi0gICAgZXNjYXBlICAgICAgOiAv
PCUtKFtcc1xTXSs/KSU+L2cKLSAgfTsKLQotICAvLyBXaGVuIGN1c3RvbWl6aW5nIGB0ZW1wbGF0
ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuCi0gIC8vIGludGVycG9s
YXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQgaXMK
LSAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guCi0gIHZhciBub01hdGNoID0gLyguKV4vOwot
Ci0gIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhhdCB0aGV5
IGNhbiBiZSBwdXQgaW50byBhCi0gIC8vIHN0cmluZyBsaXRlcmFsLgotICB2YXIgZXNjYXBlcyA9
IHsKLSAgICAiJyI6ICAgICAgIiciLAotICAgICdcXCc6ICAgICAnXFwnLAotICAgICdccic6ICAg
ICAncicsCi0gICAgJ1xuJzogICAgICduJywKLSAgICAnXHQnOiAgICAgJ3QnLAotICAgICdcdTIw
MjgnOiAndTIwMjgnLAotICAgICdcdTIwMjknOiAndTIwMjknCi0gIH07Ci0KLSAgdmFyIGVzY2Fw
ZXIgPSAvXFx8J3xccnxcbnxcdHxcdTIwMjh8XHUyMDI5L2c7Ci0KLSAgLy8gSmF2YVNjcmlwdCBt
aWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi4K
LSAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMs
IHByZXNlcnZlcyB3aGl0ZXNwYWNlLAotICAvLyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVvdGVz
IHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS4KLSAgXy50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHRleHQs
IGRhdGEsIHNldHRpbmdzKSB7Ci0gICAgdmFyIHJlbmRlcjsKLSAgICBzZXR0aW5ncyA9IF8uZGVm
YXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBsYXRlU2V0dGluZ3MpOwotCi0gICAgLy8gQ29tYmlu
ZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24u
Ci0gICAgdmFyIG1hdGNoZXIgPSBuZXcgUmVnRXhwKFsKLSAgICAgIChzZXR0aW5ncy5lc2NhcGUg
fHwgbm9NYXRjaCkuc291cmNlLAotICAgICAgKHNldHRpbmdzLmludGVycG9sYXRlIHx8IG5vTWF0
Y2gpLnNvdXJjZSwKLSAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2UK
LSAgICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7Ci0KLSAgICAvLyBDb21waWxlIHRoZSB0ZW1w
bGF0ZSBzb3VyY2UsIGVzY2FwaW5nIHN0cmluZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5LgotICAg
IHZhciBpbmRleCA9IDA7Ci0gICAgdmFyIHNvdXJjZSA9ICJfX3ArPSciOwotICAgIHRleHQucmVw
bGFjZShtYXRjaGVyLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVh
dGUsIG9mZnNldCkgewotICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCkK
LSAgICAgICAgLnJlcGxhY2UoZXNjYXBlciwgZnVuY3Rpb24obWF0Y2gpIHsgcmV0dXJuICdcXCcg
KyBlc2NhcGVzW21hdGNoXTsgfSk7Ci0KLSAgICAgIGlmIChlc2NhcGUpIHsKLSAgICAgICAgc291
cmNlICs9ICInK1xuKChfX3Q9KCIgKyBlc2NhcGUgKyAiKSk9PW51bGw/Jyc6Xy5lc2NhcGUoX190
KSkrXG4nIjsKLSAgICAgIH0KLSAgICAgIGlmIChpbnRlcnBvbGF0ZSkgewotICAgICAgICBzb3Vy
Y2UgKz0gIicrXG4oKF9fdD0oIiArIGludGVycG9sYXRlICsgIikpPT1udWxsPycnOl9fdCkrXG4n
IjsKLSAgICAgIH0KLSAgICAgIGlmIChldmFsdWF0ZSkgewotICAgICAgICBzb3VyY2UgKz0gIic7
XG4iICsgZXZhbHVhdGUgKyAiXG5fX3ArPSciOwotICAgICAgfQotICAgICAgaW5kZXggPSBvZmZz
ZXQgKyBtYXRjaC5sZW5ndGg7Ci0gICAgICByZXR1cm4gbWF0Y2g7Ci0gICAgfSk7Ci0gICAgc291
cmNlICs9ICInO1xuIjsKLQotICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwg
cGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuCi0gICAgaWYgKCFzZXR0aW5ncy52YXJp
YWJsZSkgc291cmNlID0gJ3dpdGgob2JqfHx7fSl7XG4nICsgc291cmNlICsgJ31cbic7Ci0KLSAg
ICBzb3VyY2UgPSAidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLCIgKwot
ICAgICAgInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307XG4i
ICsKLSAgICAgIHNvdXJjZSArICJyZXR1cm4gX19wO1xuIjsKLQotICAgIHRyeSB7Ci0gICAgICBy
ZW5kZXIgPSBuZXcgRnVuY3Rpb24oc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaicsICdfJywgc291
cmNlKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICBlLnNvdXJjZSA9IHNvdXJjZTsKLSAgICAg
IHRocm93IGU7Ci0gICAgfQotCi0gICAgaWYgKGRhdGEpIHJldHVybiByZW5kZXIoZGF0YSwgXyk7
Ci0gICAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24oZGF0YSkgewotICAgICAgcmV0dXJuIHJlbmRl
ci5jYWxsKHRoaXMsIGRhdGEsIF8pOwotICAgIH07Ci0KLSAgICAvLyBQcm92aWRlIHRoZSBjb21w
aWxlZCBmdW5jdGlvbiBzb3VyY2UgYXMgYSBjb252ZW5pZW5jZSBmb3IgcHJlY29tcGlsYXRpb24u
Ci0gICAgdGVtcGxhdGUuc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAoc2V0dGluZ3MudmFyaWFibGUg
fHwgJ29iaicpICsgJyl7XG4nICsgc291cmNlICsgJ30nOwotCi0gICAgcmV0dXJuIHRlbXBsYXRl
OwotICB9OwotCi0gIC8vIEFkZCBhICJjaGFpbiIgZnVuY3Rpb24sIHdoaWNoIHdpbGwgZGVsZWdh
dGUgdG8gdGhlIHdyYXBwZXIuCi0gIF8uY2hhaW4gPSBmdW5jdGlvbihvYmopIHsKLSAgICByZXR1
cm4gXyhvYmopLmNoYWluKCk7Ci0gIH07Ci0KLSAgLy8gT09QCi0gIC8vIC0tLS0tLS0tLS0tLS0t
LQotICAvLyBJZiBVbmRlcnNjb3JlIGlzIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLCBpdCByZXR1cm5z
IGEgd3JhcHBlZCBvYmplY3QgdGhhdAotICAvLyBjYW4gYmUgdXNlZCBPTy1zdHlsZS4gVGhpcyB3
cmFwcGVyIGhvbGRzIGFsdGVyZWQgdmVyc2lvbnMgb2YgYWxsIHRoZQotICAvLyB1bmRlcnNjb3Jl
IGZ1bmN0aW9ucy4gV3JhcHBlZCBvYmplY3RzIG1heSBiZSBjaGFpbmVkLgotCi0gIC8vIEhlbHBl
ciBmdW5jdGlvbiB0byBjb250aW51ZSBjaGFpbmluZyBpbnRlcm1lZGlhdGUgcmVzdWx0cy4KLSAg
dmFyIHJlc3VsdCA9IGZ1bmN0aW9uKG9iaikgewotICAgIHJldHVybiB0aGlzLl9jaGFpbiA/IF8o
b2JqKS5jaGFpbigpIDogb2JqOwotICB9OwotCi0gIC8vIEFkZCBhbGwgb2YgdGhlIFVuZGVyc2Nv
cmUgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyIG9iamVjdC4KLSAgXy5taXhpbihfKTsKLQotICAv
LyBBZGQgYWxsIG11dGF0b3IgQXJyYXkgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLgotICBlYWNo
KFsncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1
bnNoaWZ0J10sIGZ1bmN0aW9uKG5hbWUpIHsKLSAgICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tu
YW1lXTsKLSAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkgewotICAgICAgdmFyIG9i
aiA9IHRoaXMuX3dyYXBwZWQ7Ci0gICAgICBtZXRob2QuYXBwbHkob2JqLCBhcmd1bWVudHMpOwot
ICAgICAgaWYgKChuYW1lID09ICdzaGlmdCcgfHwgbmFtZSA9PSAnc3BsaWNlJykgJiYgb2JqLmxl
bmd0aCA9PT0gMCkgZGVsZXRlIG9ialswXTsKLSAgICAgIHJldHVybiByZXN1bHQuY2FsbCh0aGlz
LCBvYmopOwotICAgIH07Ci0gIH0pOwotCi0gIC8vIEFkZCBhbGwgYWNjZXNzb3IgQXJyYXkgZnVu
Y3Rpb25zIHRvIHRoZSB3cmFwcGVyLgotICBlYWNoKFsnY29uY2F0JywgJ2pvaW4nLCAnc2xpY2Un
XSwgZnVuY3Rpb24obmFtZSkgewotICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdOwot
ICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gcmVzdWx0
LmNhbGwodGhpcywgbWV0aG9kLmFwcGx5KHRoaXMuX3dyYXBwZWQsIGFyZ3VtZW50cykpOwotICAg
IH07Ci0gIH0pOwotCi0gIF8uZXh0ZW5kKF8ucHJvdG90eXBlLCB7Ci0KLSAgICAvLyBTdGFydCBj
aGFpbmluZyBhIHdyYXBwZWQgVW5kZXJzY29yZSBvYmplY3QuCi0gICAgY2hhaW46IGZ1bmN0aW9u
KCkgewotICAgICAgdGhpcy5fY2hhaW4gPSB0cnVlOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAg
fSwKLQotICAgIC8vIEV4dHJhY3RzIHRoZSByZXN1bHQgZnJvbSBhIHdyYXBwZWQgYW5kIGNoYWlu
ZWQgb2JqZWN0LgotICAgIHZhbHVlOiBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiB0aGlzLl93
cmFwcGVkOwotICAgIH0KLQotICB9KTsKLQotfSkuY2FsbCh0aGlzKTsKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2JhY2tib25lL2luZGV4Lmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9pbmRl
eC5odG1sCmluZGV4IGQ2M2EzMGViNDAxODIyMDcyMzhjZGIyZmNmZDMyZGFiYzRjNzQzMzQuLmFh
MjE0NzMzZWQ3Zjc1ZjEwYzUzYmNhZjAyZjIwNmIzZDU1ZTIxYmEgMTAwNjQ0Ci0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL2JhY2tib25lL2luZGV4Lmh0bWwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvaW5k
ZXguaHRtbApAQCAtMSw2NCArMSw2NCBAQAogPCFkb2N0eXBlIGh0bWw+CiA8aHRtbCBsYW5nPSJl
biIgZGF0YS1mcmFtZXdvcms9ImJhY2tib25lanMiPgogICAgIDxoZWFkPgotICAgIDxtZXRhIGNo
YXJzZXQ9InV0Zi04Ij4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNv
bnRlbnQ9IklFPWVkZ2UiPgotICAgIDx0aXRsZT5CYWNrYm9uZS5qcyDigKIgVG9kb01WQzwvdGl0
bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJib3dlcl9jb21wb25lbnRzL3Rv
ZG9tdmMtY29tbW9uL2Jhc2UuY3NzIj4KKyAgICAgICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgor
ICAgICAgICA8dGl0bGU+QmFja2JvbmUuanMg4oCiIFRvZG9NVkM8L3RpdGxlPgorICAgICAgICA8
bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Im5vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9i
YXNlLmNzcyI+CisgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ibm9kZV9tb2R1
bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3MiPgogICAgIDwvaGVhZD4KICAgICA8Ym9keT4K
LSAgICA8c2VjdGlvbiBpZD0idG9kb2FwcCI+Ci0gICAgPGhlYWRlciBpZD0iaGVhZGVyIj4KLSAg
ICA8aDE+dG9kb3M8L2gxPgotICAgIDxpbnB1dCBpZD0ibmV3LXRvZG8iIHBsYWNlaG9sZGVyPSJX
aGF0IG5lZWRzIHRvIGJlIGRvbmU/IiBhdXRvZm9jdXM+Ci0gICAgPC9oZWFkZXI+Ci0gICAgPHNl
Y3Rpb24gaWQ9Im1haW4iPgotICAgIDxpbnB1dCBpZD0idG9nZ2xlLWFsbCIgdHlwZT0iY2hlY2ti
b3giPgotICAgIDxsYWJlbCBmb3I9InRvZ2dsZS1hbGwiPk1hcmsgYWxsIGFzIGNvbXBsZXRlPC9s
YWJlbD4KLSAgICA8dWwgaWQ9InRvZG8tbGlzdCI+PC91bD4KLSAgICA8L3NlY3Rpb24+Ci0gICAg
PGZvb3RlciBpZD0iZm9vdGVyIj48L2Zvb3Rlcj4KLSAgICA8L3NlY3Rpb24+Ci0gICAgPGZvb3Rl
ciBpZD0iaW5mbyI+Ci0gICAgPHA+RG91YmxlLWNsaWNrIHRvIGVkaXQgYSB0b2RvPC9wPgotICAg
IDxwPldyaXR0ZW4gYnkgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2FkZHlvc21hbmkiPkFk
ZHkgT3NtYW5pPC9hPjwvcD4KLSAgICA8cD5QYXJ0IG9mIDxhIGhyZWY9Imh0dHA6Ly90b2RvbXZj
LmNvbSI+VG9kb01WQzwvYT48L3A+Ci0gICAgPC9mb290ZXI+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L3RlbXBsYXRlIiBpZD0iaXRlbS10ZW1wbGF0ZSI+Ci0gICAgPGRpdiBjbGFzcz0idmlldyI+
Ci0gICAgPGlucHV0IGNsYXNzPSJ0b2dnbGUiIHR5cGU9ImNoZWNrYm94IiA8JT0gY29tcGxldGVk
ID8gJ2NoZWNrZWQnIDogJycgJT4+Ci0gICAgPGxhYmVsPjwlLSB0aXRsZSAlPjwvbGFiZWw+Ci0g
ICAgPGJ1dHRvbiBjbGFzcz0iZGVzdHJveSI+PC9idXR0b24+Ci0gICAgPC9kaXY+Ci0gICAgPGlu
cHV0IGNsYXNzPSJlZGl0IiB2YWx1ZT0iPCUtIHRpdGxlICU+Ij4KLSAgICA8L3NjcmlwdD4KLSAg
ICA8c2NyaXB0IHR5cGU9InRleHQvdGVtcGxhdGUiIGlkPSJzdGF0cy10ZW1wbGF0ZSI+Ci0gICAg
PHNwYW4gaWQ9InRvZG8tY291bnQiPjxzdHJvbmc+PCU9IHJlbWFpbmluZyAlPjwvc3Ryb25nPiA8
JT0gcmVtYWluaW5nID09PSAxID8gJ2l0ZW0nIDogJ2l0ZW1zJyAlPiBsZWZ0PC9zcGFuPgotICAg
IDx1bCBpZD0iZmlsdGVycyI+Ci0gICAgPGxpPgotICAgIDxhIGNsYXNzPSJzZWxlY3RlZCIgaHJl
Zj0iIy8iPkFsbDwvYT4KLSAgICA8L2xpPgotICAgIDxsaT4KLSAgICA8YSBocmVmPSIjL2FjdGl2
ZSI+QWN0aXZlPC9hPgotICAgIDwvbGk+Ci0gICAgPGxpPgotICAgIDxhIGhyZWY9IiMvY29tcGxl
dGVkIj5Db21wbGV0ZWQ8L2E+Ci0gICAgPC9saT4KLSAgICA8L3VsPgotICAgIDwlIGlmIChjb21w
bGV0ZWQpIHsgJT4KLSAgICA8YnV0dG9uIGlkPSJjbGVhci1jb21wbGV0ZWQiPkNsZWFyIGNvbXBs
ZXRlZCAoPCU9IGNvbXBsZXRlZCAlPik8L2J1dHRvbj4KLSAgICA8JSB9ICU+Ci0gICAgPC9zY3Jp
cHQ+Ci0gICAgPHNjcmlwdCBzcmM9ImJvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFz
ZS5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9ImJvd2VyX2NvbXBvbmVudHMvanF1ZXJ5
L2pxdWVyeS5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9ImJvd2VyX2NvbXBvbmVudHMv
dW5kZXJzY29yZS91bmRlcnNjb3JlLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0iYm93
ZXJfY29tcG9uZW50cy9iYWNrYm9uZS9iYWNrYm9uZS5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlw
dCBzcmM9ImJvd2VyX2NvbXBvbmVudHMvYmFja2JvbmUubG9jYWxTdG9yYWdlL2JhY2tib25lLmxv
Y2FsU3RvcmFnZS5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9ImpzL21vZGVscy90b2Rv
LmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0ianMvY29sbGVjdGlvbnMvdG9kb3MuanMi
Pjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJqcy92aWV3cy90b2RvLXZpZXcuanMiPjwvc2Ny
aXB0PgotICAgIDxzY3JpcHQgc3JjPSJqcy92aWV3cy9hcHAtdmlldy5qcyI+PC9zY3JpcHQ+Ci0g
ICAgPHNjcmlwdCBzcmM9ImpzL3JvdXRlcnMvcm91dGVyLmpzIj48L3NjcmlwdD4KLSAgICA8c2Ny
aXB0IHNyYz0ianMvYXBwLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRv
ZG9hcHAiPgorICAgICAgICAgICAgPGhlYWRlciBjbGFzcz0iaGVhZGVyIj4KKyAgICAgICAgICAg
ICAgICA8aDE+dG9kb3M8L2gxPgorICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0ibmV3LXRv
ZG8iIHBsYWNlaG9sZGVyPSJXaGF0IG5lZWRzIHRvIGJlIGRvbmU/IiBhdXRvZm9jdXM+CisgICAg
ICAgICAgICA8L2hlYWRlcj4KKyAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJtYWluIj4KKyAg
ICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9InRvZ2dsZS1hbGwiIGlkPSJ0b2dnbGUtYWxsIiB0
eXBlPSJjaGVja2JveCI+CisgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0idG9nZ2xlLWFsbCI+
TWFyayBhbGwgYXMgY29tcGxldGU8L2xhYmVsPgorICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0i
dG9kby1saXN0Ij48L3VsPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICAgICAgPGZv
b3RlciBjbGFzcz0iZm9vdGVyIj48L2Zvb3Rlcj4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgICAg
ICA8Zm9vdGVyIGNsYXNzPSJpbmZvIj4KKyAgICAgICAgICAgIDxwPkRvdWJsZS1jbGljayB0byBl
ZGl0IGEgdG9kbzwvcD4KKyAgICAgICAgICAgIDxwPldyaXR0ZW4gYnkgPGEgaHJlZj0iaHR0cHM6
Ly9naXRodWIuY29tL2FkZHlvc21hbmkiPkFkZHkgT3NtYW5pPC9hPjwvcD4KKyAgICAgICAgICAg
IDxwPlBhcnQgb2YgPGEgaHJlZj0iaHR0cDovL3RvZG9tdmMuY29tIj5Ub2RvTVZDPC9hPjwvcD4K
KyAgICAgICAgPC9mb290ZXI+CisgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC90ZW1wbGF0ZSIg
aWQ9Iml0ZW0tdGVtcGxhdGUiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0idmlldyI+CisgICAg
ICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJ0b2dnbGUiIHR5cGU9ImNoZWNrYm94IiA8JT0gY29t
cGxldGVkID8gJ2NoZWNrZWQnIDogJycgJT4+CisgICAgICAgICAgICAgICAgPGxhYmVsPjwlLSB0
aXRsZSAlPjwvbGFiZWw+CisgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZGVzdHJveSI+
PC9idXR0b24+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0i
ZWRpdCIgdmFsdWU9IjwlLSB0aXRsZSAlPiI+CisgICAgICAgIDwvc2NyaXB0PgorICAgICAgICA8
c2NyaXB0IHR5cGU9InRleHQvdGVtcGxhdGUiIGlkPSJzdGF0cy10ZW1wbGF0ZSI+CisgICAgICAg
ICAgICA8c3BhbiBjbGFzcz0idG9kby1jb3VudCI+PHN0cm9uZz48JT0gcmVtYWluaW5nICU+PC9z
dHJvbmc+IDwlPSByZW1haW5pbmcgPT09IDEgPyAnaXRlbScgOiAnaXRlbXMnICU+IGxlZnQ8L3Nw
YW4+CisgICAgICAgICAgICA8dWwgY2xhc3M9ImZpbHRlcnMiPgorICAgICAgICAgICAgICAgIDxs
aT4KKyAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNlbGVjdGVkIiBocmVmPSIjLyI+QWxs
PC9hPgorICAgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpPgorICAgICAg
ICAgICAgICAgICAgICA8YSBocmVmPSIjL2FjdGl2ZSI+QWN0aXZlPC9hPgorICAgICAgICAgICAg
ICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgICAgICA8YSBo
cmVmPSIjL2NvbXBsZXRlZCI+Q29tcGxldGVkPC9hPgorICAgICAgICAgICAgICAgIDwvbGk+Cisg
ICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgPCUgaWYgKGNvbXBsZXRlZCkgeyAlPgorICAg
ICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY2xlYXItY29tcGxldGVkIj5DbGVhciBjb21wbGV0ZWQ8
L2J1dHRvbj4KKyAgICAgICAgICAgIDwlIH0gJT4KKyAgICAgICAgPC9zY3JpcHQ+CisgICAgICAg
IDwhLS0gPHNjcmlwdCBzcmM9Im5vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzIj48
L3NjcmlwdD4gLS0+CisgICAgICAgIDxzY3JpcHQgc3JjPSJub2RlX21vZHVsZXMvanF1ZXJ5L2Rp
c3QvanF1ZXJ5LmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9Im5vZGVfbW9kdWxl
cy91bmRlcnNjb3JlL3VuZGVyc2NvcmUuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNy
Yz0ibm9kZV9tb2R1bGVzL2JhY2tib25lL2JhY2tib25lLmpzIj48L3NjcmlwdD4KKyAgICAgICAg
PHNjcmlwdCBzcmM9ImpzL2JhY2tib25lLnN5bmMuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2Ny
aXB0IHNyYz0ianMvbW9kZWxzL3RvZG8uanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNy
Yz0ianMvY29sbGVjdGlvbnMvdG9kb3MuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNy
Yz0ianMvdmlld3MvdG9kby12aWV3LmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9
ImpzL3ZpZXdzL2FwcC12aWV3LmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9Impz
L3JvdXRlcnMvcm91dGVyLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9ImpzL2Fw
cC5qcyI+PC9zY3JpcHQ+CiAgICAgPC9ib2R5PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvYmFja2JvbmUvanMvYXBwLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvanMvYXBwLmpz
CmluZGV4IGFjYTc5MDc5NTczZTgxYTAxMDhkMTI0Njc5Mjc5MzMwNDAxNzg1ODQuLjFlMTM5ZDNi
ZDQ2NjBhNWM0NDBlOTRhYmNmZDBmNzhlMDkzYjU2ZTAgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2JhY2tib25lL2pzL2FwcC5qcworKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9qcy9hcHAuanMK
QEAgLTIsNiArMiw3IEBACiAvKmpzaGludCB1bnVzZWQ6ZmFsc2UgKi8KIHZhciBhcHAgPSBhcHAg
fHwge307CiB2YXIgRU5URVJfS0VZID0gMTM7Cit2YXIgRVNDX0tFWSA9IDI3OwogCiAkKGZ1bmN0
aW9uICgpIHsKICAgICAndXNlIHN0cmljdCc7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNr
Ym9uZS9qcy9iYWNrYm9uZS5zeW5jLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvanMvYmFja2Jv
bmUuc3luYy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOGUzYzY3ZWRkYjc5YTUxNzNjNWFjZWQxNTNmNGViYzM2
YjZhMmFiCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvanMvYmFja2Jv
bmUuc3luYy5qcwpAQCAtMCwwICsxLDExOCBAQAorQmFja2JvbmUuc3luYyA9IGZ1bmN0aW9uKG1l
dGhvZCwgbW9kZWwsIG9wdGlvbnMpIHsKKworICAvLyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBp
bml0aWFsaXplIGEgc3RvcmUsIGluIHRoaXMgY2FzZQorICAvLyB3ZSB3aWxsIGp1c3QgdXNlIGEg
SlMgb2JqZWN0LgorICB2YXIgY2FjaGUgPSB7fTsKKyAgCisgIC8vIFRoZSBzaXplIHdpbGwgYmUg
cHJpbWFyaWx5IHVzZWQgdG8gYXNzaWduIGlkcyB0byBuZXdseSAKKyAgLy8gY3JlYXRlZCBtb2Rl
bHMuIEVhY2ggdGltZSBhIG5ldyBtb2RlbCBpcyBjcmVhdGVkLCB0aGUgc2l6ZSAKKyAgLy8gd2ls
bCBiZSBpbmNyZW1lbnRlZC4KKyAgdmFyIHNpemUgID0gMDsKKworICAvLyBzaW5jZSB3ZSBuZWVk
IHRvIGNyZWF0ZSBhIHN0b3JlIGZvciB0aGUgbW9kZWxzL2NvbGxlY3Rpb25zCisgIC8vIHdlIGFy
ZSBhY3R1YWxseSBnb2luZyB0byBpbnZva2UgdGhlIG91dGVyIGZ1bmN0aW9uIHdoaWNoIHdpbGwK
KyAgLy8gcmV0dXJuIHRoaXMgZnVuY3Rpb24gYmVsb3cgYXMgdGhlIEJhY2tib25lLnN5bmMgdGhh
dCB3aWxsCisgIC8vIGFjdHVhbGx5IGJlIHVzZWQuCisgIHJldHVybiBmdW5jdGlvbihtZXRob2Qs
IG1vZGVsLCBvcHRpb25zKSB7CisKKyAgICAvLyBjcmVhdGUgYSBuZXcgZGVmZXJyZWQgb2JqZWN0
LiBzdGFuZGFyZCBzeW5jIHJldHVybnMgdGhlICQuYWpheAorICAgIC8vIHJlcXVlc3QsIHdoaWNo
IGludGVybmFsbHkgcmV0dXJucyBhIGRlZmVycmVkLiBJdCdzIGltcG9ydGFudCB0bworICAgIC8v
IGRvIHRoaXMgc28gdGhhdCBwZW9wbGUgY2FuIGNoYWluIG9uIGZldGNoIHVzaW5nIHRoZSBzdGFu
ZGFyZCAudGhlbi8uZmFpbAorICAgIC8vIHN5bnRheCwgcmF0aGVyIHRoYW4ganVzdCB0aGUgc3Vj
Y2Vzcy9lcnJvciBjYWxsYmFja3MuCisgICAgdmFyIGRlZmVycmVkID0gJC5EZWZlcnJlZCgpOwor
ICAgIAorICAgIC8vIHdoZW4gY3JlYXRpbmcgYSBuZXcgbW9kZWwuLi4KKyAgICBpZiAobWV0aG9k
ID09PSAiY3JlYXRlIikgeworCisgICAgICAvLyBmaXJzdCBhc3NpZ24gaXQgYW4gaWQuIFRoZSBz
ZXJ2ZXIgd291bGQgdHJhZGl0aW9uYWxseSBkbyB0aGlzLgorICAgICAgbW9kZWwuaWQgPSBzaXpl
OworICAgICAgLy8gc3RvcmUgaXQgaW4gb3VyIGNhY2hlCisgICAgICBjYWNoZVttb2RlbC5pZF0g
PSBtb2RlbDsKKyAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBpbmNyZW1lbnQgdGhlIG51bWJlciBvZiBt
b2RlbHMgd2Ugbm93IGhhdmUuCisgICAgICBzaXplICs9IDE7CisKKyAgICAgIC8vIGlmIGEgc3Vj
Y2VzcyBjYWxsYmFjayB3YXMgcHJvdmlkZWQsIGV4ZWN1dGUgaXQuCisgICAgICBpZiAob3B0aW9u
cy5zdWNjZXNzKSB7CisgICAgICAgIG9wdGlvbnMuc3VjY2Vzcyhtb2RlbCwgbW9kZWwudG9KU09O
KCksIG9wdGlvbnMpOworICAgICAgfQorCisgICAgICAvLyByZXNvbHZlIHRoZSBkZWZlcnJlZC4K
KyAgICAgIGRlZmVycmVkLnJlc29sdmUobW9kZWwpOworCisgICAgLy8gd2UgYXJlIHVwZGF0aW5n
IGEgbW9kZWwKKyAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gInVwZGF0ZSIpIHsKKyAgICAgIAor
ICAgICAgLy8gYXMgbG9uZyBhcyB0aGUgbW9kZWwgYWN0dWFsbHkgZXhpc3RzIGluIG91ciBzdG9y
ZQorICAgICAgaWYgKGNhY2hlW21vZGVsLmlkXSkgeworICAgICAgICAKKyAgICAgICAgLy8gb3Zl
cndyaXRlIHdoYXQgaXMgY3VycmVudGx5IGluIHRoZSBzdG9yZSB3aXRoIHRoaXMgbW9kZWwuCisg
ICAgICAgIGNhY2hlW21vZGVsLmlkXSA9IG1vZGVsOworCisgICAgICAgIC8vIGlmIGEgc3VjY2Vz
cyBjYWxsYmFjayB3YXMgcHJvdmlkZWQsIGV4ZWN1dGUgaXQuCisgICAgICAgIGlmIChvcHRpb25z
LnN1Y2Nlc3MpIHsKKyAgICAgICAgICBvcHRpb25zLnN1Y2Nlc3MobW9kZWwsIG1vZGVsLnRvSlNP
TigpLCBvcHRpb25zKTsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmVycmVkLnJlc29sdmUobW9k
ZWwpOworICAgICAgCisgICAgICAvLyBpZiB0aGlzIG1vZGVsIGRvZXNuJ3QgZXhpc3QgeWV0LCB3
ZSBjYW4ndCB1cGRhdGUgaXQKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIAorICAgICAgICBpZiAo
b3B0aW9ucy5lcnJvcikgeworICAgICAgICAgIG9wdGlvbnMuZXJyb3IobW9kZWwsICJNb2RlbCBu
b3QgZm91bmQiKTsKKyAgICAgICAgfQorICAgICAgICBkZWZlcnJlZC5yZWplY3QobW9kZWwpOwor
ICAgICAgfQorCisgICAgLy8gaWYgd2UncmUgdHJ5aW5nIHRvIHJlYWQgYSBtb2RlbC4uLgorICAg
IH0gZWxzZSBpZiAobWV0aG9kID09PSAicmVhZCIpIHsKKyAgICAgIAorICAgICAgLy8gYXMgbG9u
ZyBhcyBpdCBleGlzdHMKKyAgICAgIGlmIChjYWNoZVttb2RlbC5pZF0pIHsKKyAgICAgICAgCisg
ICAgICAgIC8vIGlmIGEgc3VjY2VzcyBjYWxsYmFjayB3YXMgcHJvdmlkZWQsIGV4ZWN1dGUgaXQu
CisgICAgICAgIGlmIChvcHRpb25zLnN1Y2Nlc3MpIHsKKyAgICAgICAgICBvcHRpb25zLnN1Y2Nl
c3MobW9kZWwsIGNhY2hlW21vZGVsLmlkXS50b0pTT04oKSwgb3B0aW9ucyk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIC8vIHJlc29sdmUgCisgICAgICAgIGRlZmVycmVkLnJlc29sdmUo
bW9kZWwpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG9wdGlvbnMuZXJyb3IpIHsKKyAg
ICAgICAgICBvcHRpb25zLmVycm9yKG1vZGVsLCAiTW9kZWwgbm90IGZvdW5kIik7CisgICAgICAg
IH0KKyAgICAgICAgZGVmZXJyZWQucmVqZWN0KG1vZGVsKTsKKyAgICAgIH0KKyAgICAgIAorICAg
IC8vIGlmIHdlJ3JlIGRlbGV0aW5nIGEgbW9kZWwuLi4KKyAgICB9IGVsc2UgaWYgKG1ldGhvZCA9
PT0gImRlbGV0ZSIpIHsKKyAgICAgIAorICAgICAgLy8gZmlyc3QgbWFrZSBzdXJlIGl0IGV4aXN0
cyBpbiB0aGUgY2FjaGUKKyAgICAgIGlmIChjYWNoZVttb2RlbC5pZF0pIHsKKyAgICAgICAgCisg
ICAgICAgIC8vIHRoZW4gcmVtb3ZlIGl0IGZyb20gdGhlIGNhY2hlCisgICAgICAgIGRlbGV0ZSBj
YWNoZVttb2RlbC5pZF07CisgICAgICAgIAorICAgICAgICAvLyBhbmQgdHJpZ2dlciB0aGUgc3Vj
Y2VzcyBjYWxsYmFjay4gTm90ZSB3ZSdyZSBwYXNzaW5nIGFuIAorICAgICAgICAvLyBlbXB0eSBv
YmplY3QgYXMgdGhlIHNlY29uZCBhcmd1bWVudCwgYmVjYXVzZSBhIGRlbGV0aW9uIAorICAgICAg
ICAvLyB3b3VsZCByZXN1bHQgaW4gYW4gZW1wdHkgcmV0dXJuIGZyb20gdGhlIHNlcnZlci4KKyAg
ICAgICAgaWYgKG9wdGlvbnMuc3VjY2VzcykgeworICAgICAgICAgIG9wdGlvbnMuc3VjY2Vzcyht
b2RlbCwge30sIG9wdGlvbnMpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyByZXNv
bHZlIHRoZSBkZWZlcnJlZAorICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKG1vZGVsKTsKKyAgICAg
ICAgCisgICAgICAvLyBvdGhlcndpc2UsIGVycm9yIHRoYXQgdGhlIG1vZGVsIGRvZXNuJ3QgZXhp
c3QuCisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAob3B0aW9ucy5lcnJvcikgeworICAgICAg
ICAgIG9wdGlvbnMuZXJyb3IobW9kZWwsICJNb2RlbCBub3QgZm91bmQiKTsKKyAgICAgICAgfQor
ICAgICAgICBkZWZlcnJlZC5yZWplY3QobW9kZWwpOworICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiBkZWZlcnJlZC5wcm9taXNlKCk7ICAKKyAgfQorICAKK30oKTsKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9qcy9jb2xsZWN0
aW9ucy90b2Rvcy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL2pzL2NvbGxlY3Rpb25zL3RvZG9z
LmpzCmluZGV4IDNiMTUwMDRmM2ZiM2JkOWQyYTZkOGQ5MDVkOWNiNmY1MzM5NGQ1MDYuLmY4ZjVk
MzExMTMzNTg4ZDg3NjhjYWYyZjBkZWY0ZTJhNDgzOGViMzMgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL2JhY2tib25lL2pzL2NvbGxlY3Rpb25zL3RvZG9zLmpzCisrKyBiL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2Jh
Y2tib25lL2pzL2NvbGxlY3Rpb25zL3RvZG9zLmpzCkBAIC03LDQwICs3LDMxIEBAIHZhciBhcHAg
PSBhcHAgfHwge307CiAgICAgLy8gVG9kbyBDb2xsZWN0aW9uCiAgICAgLy8gLS0tLS0tLS0tLS0t
LS0tCiAKLSAgICAvLyBUaGUgY29sbGVjdGlvbiBvZiB0b2RvcyBpcyBiYWNrZWQgYnkgKmxvY2Fs
U3RvcmFnZSogaW5zdGVhZCBvZiBhIHJlbW90ZQotICAgIC8vIHNlcnZlci4KKwogICAgIHZhciBU
b2RvcyA9IEJhY2tib25lLkNvbGxlY3Rpb24uZXh0ZW5kKHsKLSAgICAvLyBSZWZlcmVuY2UgdG8g
dGhpcyBjb2xsZWN0aW9uJ3MgbW9kZWwuCi0gICAgbW9kZWw6IGFwcC5Ub2RvLAorICAgICAgICAv
LyBSZWZlcmVuY2UgdG8gdGhpcyBjb2xsZWN0aW9uJ3MgbW9kZWwuCisgICAgICAgIG1vZGVsOiBh
cHAuVG9kbywKIAotICAgIC8vIFNhdmUgYWxsIG9mIHRoZSB0b2RvIGl0ZW1zIHVuZGVyIHRoZSBg
InRvZG9zImAgbmFtZXNwYWNlLgotICAgIGxvY2FsU3RvcmFnZTogbmV3IEJhY2tib25lLkxvY2Fs
U3RvcmFnZSgndG9kb3MtYmFja2JvbmUnKSwKKyAgICAgICAgLy8gU2F2ZSBhbGwgb2YgdGhlIHRv
ZG8gaXRlbXMgdW5kZXIgdGhpcyBleGFtcGxlJ3MgbmFtZXNwYWNlLgogCi0gICAgLy8gRmlsdGVy
IGRvd24gdGhlIGxpc3Qgb2YgYWxsIHRvZG8gaXRlbXMgdGhhdCBhcmUgZmluaXNoZWQuCi0gICAg
Y29tcGxldGVkOiBmdW5jdGlvbiAoKSB7Ci0gICAgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9u
ICh0b2RvKSB7Ci0gICAgcmV0dXJuIHRvZG8uZ2V0KCdjb21wbGV0ZWQnKTsKLSAgICB9KTsKLSAg
ICB9LAotCi0gICAgLy8gRmlsdGVyIGRvd24gdGhlIGxpc3QgdG8gb25seSB0b2RvIGl0ZW1zIHRo
YXQgYXJlIHN0aWxsIG5vdCBmaW5pc2hlZC4KLSAgICByZW1haW5pbmc6IGZ1bmN0aW9uICgpIHsK
LSAgICByZXR1cm4gdGhpcy53aXRob3V0LmFwcGx5KHRoaXMsIHRoaXMuY29tcGxldGVkKCkpOwot
ICAgIH0sCi0KLSAgICAvLyBXZSBrZWVwIHRoZSBUb2RvcyBpbiBzZXF1ZW50aWFsIG9yZGVyLCBk
ZXNwaXRlIGJlaW5nIHNhdmVkIGJ5IHVub3JkZXJlZAotICAgIC8vIEdVSUQgaW4gdGhlIGRhdGFi
YXNlLiBUaGlzIGdlbmVyYXRlcyB0aGUgbmV4dCBvcmRlciBudW1iZXIgZm9yIG5ldyBpdGVtcy4K
LSAgICBuZXh0T3JkZXI6IGZ1bmN0aW9uICgpIHsKLSAgICBpZiAoIXRoaXMubGVuZ3RoKSB7Ci0g
ICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIHJldHVybiB0aGlzLmxhc3QoKS5nZXQoJ29yZGVyJykg
KyAxOwotICAgIH0sCi0KLSAgICAvLyBUb2RvcyBhcmUgc29ydGVkIGJ5IHRoZWlyIG9yaWdpbmFs
IGluc2VydGlvbiBvcmRlci4KLSAgICBjb21wYXJhdG9yOiBmdW5jdGlvbiAodG9kbykgewotICAg
IHJldHVybiB0b2RvLmdldCgnb3JkZXInKTsKLSAgICB9CisgICAgICAgIC8vIEZpbHRlciBkb3du
IHRoZSBsaXN0IG9mIGFsbCB0b2RvIGl0ZW1zIHRoYXQgYXJlIGZpbmlzaGVkLgorICAgICAgICBj
b21wbGV0ZWQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLndoZXJlKHtj
b21wbGV0ZWQ6IHRydWV9KTsKKyAgICAgICAgfSwKKworICAgICAgICAvLyBGaWx0ZXIgZG93biB0
aGUgbGlzdCB0byBvbmx5IHRvZG8gaXRlbXMgdGhhdCBhcmUgc3RpbGwgbm90IGZpbmlzaGVkLgor
ICAgICAgICByZW1haW5pbmc6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
LndoZXJlKHtjb21wbGV0ZWQ6IGZhbHNlfSk7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8gV2Ug
a2VlcCB0aGUgVG9kb3MgaW4gc2VxdWVudGlhbCBvcmRlciwgZGVzcGl0ZSBiZWluZyBzYXZlZCBi
eSB1bm9yZGVyZWQKKyAgICAgICAgLy8gR1VJRCBpbiB0aGUgZGF0YWJhc2UuIFRoaXMgZ2VuZXJh
dGVzIHRoZSBuZXh0IG9yZGVyIG51bWJlciBmb3IgbmV3IGl0ZW1zLgorICAgICAgICBuZXh0T3Jk
ZXI6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmxlbmd0aCA/IHRoaXMu
bGFzdCgpLmdldCgnb3JkZXInKSArIDEgOiAxOworICAgICAgICB9LAorCisgICAgICAgIC8vIFRv
ZG9zIGFyZSBzb3J0ZWQgYnkgdGhlaXIgb3JpZ2luYWwgaW5zZXJ0aW9uIG9yZGVyLgorICAgICAg
ICBjb21wYXJhdG9yOiAnb3JkZXInCiAgICAgfSk7CiAKICAgICAvLyBDcmVhdGUgb3VyIGdsb2Jh
bCBjb2xsZWN0aW9uIG9mICoqVG9kb3MqKi4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2ti
b25lL2pzL21vZGVscy90b2RvLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvanMvbW9kZWxzL3Rv
ZG8uanMKaW5kZXggNDkxN2RmZTA2ZDA3MzRjYTBjNDliN2VlN2IxNWEwMjkzNDE0YmZkMy4uNGYz
ZmRlM2UyNmZiMWI3MTY4MjRhMDg4MjA0NmIwYWZmZjMxZmMxYiAxMDA2NDQKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvYmFja2JvbmUvanMvbW9kZWxzL3RvZG8uanMKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2Jv
bmUvanMvbW9kZWxzL3RvZG8uanMKQEAgLTksMTggKzksMTggQEAgdmFyIGFwcCA9IGFwcCB8fCB7
fTsKIAogICAgIC8vIE91ciBiYXNpYyAqKlRvZG8qKiBtb2RlbCBoYXMgYHRpdGxlYCwgYG9yZGVy
YCwgYW5kIGBjb21wbGV0ZWRgIGF0dHJpYnV0ZXMuCiAgICAgYXBwLlRvZG8gPSBCYWNrYm9uZS5N
b2RlbC5leHRlbmQoewotICAgIC8vIERlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIHRvZG8KLSAg
ICAvLyBhbmQgZW5zdXJlIHRoYXQgZWFjaCB0b2RvIGNyZWF0ZWQgaGFzIGB0aXRsZWAgYW5kIGBj
b21wbGV0ZWRgIGtleXMuCi0gICAgZGVmYXVsdHM6IHsKLSAgICB0aXRsZTogJycsCi0gICAgY29t
cGxldGVkOiBmYWxzZQotICAgIH0sCisgICAgICAgIC8vIERlZmF1bHQgYXR0cmlidXRlcyBmb3Ig
dGhlIHRvZG8KKyAgICAgICAgLy8gYW5kIGVuc3VyZSB0aGF0IGVhY2ggdG9kbyBjcmVhdGVkIGhh
cyBgdGl0bGVgIGFuZCBgY29tcGxldGVkYCBrZXlzLgorICAgICAgICBkZWZhdWx0czogeworICAg
ICAgICAgICAgdGl0bGU6ICcnLAorICAgICAgICAgICAgY29tcGxldGVkOiBmYWxzZQorICAgICAg
ICB9LAogCi0gICAgLy8gVG9nZ2xlIHRoZSBgY29tcGxldGVkYCBzdGF0ZSBvZiB0aGlzIHRvZG8g
aXRlbS4KLSAgICB0b2dnbGU6IGZ1bmN0aW9uICgpIHsKLSAgICB0aGlzLnNhdmUoewotICAgIGNv
bXBsZXRlZDogIXRoaXMuZ2V0KCdjb21wbGV0ZWQnKQotICAgIH0pOwotICAgIH0KKyAgICAgICAg
Ly8gVG9nZ2xlIHRoZSBgY29tcGxldGVkYCBzdGF0ZSBvZiB0aGlzIHRvZG8gaXRlbS4KKyAgICAg
ICAgdG9nZ2xlOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0aGlzLnNhdmUoeworICAgICAg
ICAgICAgICAgIGNvbXBsZXRlZDogIXRoaXMuZ2V0KCdjb21wbGV0ZWQnKQorICAgICAgICAgICAg
fSk7CisgICAgICAgIH0KICAgICB9KTsKIH0pKCk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9i
YWNrYm9uZS9qcy9yb3V0ZXJzL3JvdXRlci5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL2pzL3Jv
dXRlcnMvcm91dGVyLmpzCmluZGV4IDAwOTcwMzlmMjk1NzM4YTA2NjE4MWNlNTQxMDBlMDdhMWRl
YWVhZjQuLjU5MzdlOWZmMDM3ODQzYTA3NTIzNmVmMDMyNTFjYjExZDkyMWQ5YmMgMTAwNjQ0Ci0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL2pzL3JvdXRlcnMvcm91dGVyLmpzCisrKyBiL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL2JhY2tib25lL2pzL3JvdXRlcnMvcm91dGVyLmpzCkBAIC03LDE4ICs3LDE4IEBAIHZh
ciBhcHAgPSBhcHAgfHwge307CiAgICAgLy8gVG9kbyBSb3V0ZXIKICAgICAvLyAtLS0tLS0tLS0t
CiAgICAgdmFyIFRvZG9Sb3V0ZXIgPSBCYWNrYm9uZS5Sb3V0ZXIuZXh0ZW5kKHsKLSAgICByb3V0
ZXM6IHsKLSAgICAnKmZpbHRlcic6ICdzZXRGaWx0ZXInCi0gICAgfSwKKyAgICAgICAgcm91dGVz
OiB7CisgICAgICAgICAgICAnKmZpbHRlcic6ICdzZXRGaWx0ZXInCisgICAgICAgIH0sCiAKLSAg
ICBzZXRGaWx0ZXI6IGZ1bmN0aW9uIChwYXJhbSkgewotICAgIC8vIFNldCB0aGUgY3VycmVudCBm
aWx0ZXIgdG8gYmUgdXNlZAotICAgIGFwcC5Ub2RvRmlsdGVyID0gcGFyYW0gfHwgJyc7CisgICAg
ICAgIHNldEZpbHRlcjogZnVuY3Rpb24gKHBhcmFtKSB7CisgICAgICAgICAgICAvLyBTZXQgdGhl
IGN1cnJlbnQgZmlsdGVyIHRvIGJlIHVzZWQKKyAgICAgICAgICAgIGFwcC5Ub2RvRmlsdGVyID0g
cGFyYW0gfHwgJyc7CiAKLSAgICAvLyBUcmlnZ2VyIGEgY29sbGVjdGlvbiBmaWx0ZXIgZXZlbnQs
IGNhdXNpbmcgaGlkaW5nL3VuaGlkaW5nCi0gICAgLy8gb2YgVG9kbyB2aWV3IGl0ZW1zCi0gICAg
YXBwLnRvZG9zLnRyaWdnZXIoJ2ZpbHRlcicpOwotICAgIH0KKyAgICAgICAgICAgIC8vIFRyaWdn
ZXIgYSBjb2xsZWN0aW9uIGZpbHRlciBldmVudCwgY2F1c2luZyBoaWRpbmcvdW5oaWRpbmcKKyAg
ICAgICAgICAgIC8vIG9mIFRvZG8gdmlldyBpdGVtcworICAgICAgICAgICAgYXBwLnRvZG9zLnRy
aWdnZXIoJ2ZpbHRlcicpOworICAgICAgICB9CiAgICAgfSk7CiAKICAgICBhcHAuVG9kb1JvdXRl
ciA9IG5ldyBUb2RvUm91dGVyKCk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9q
cy92aWV3cy9hcHAtdmlldy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL2pzL3ZpZXdzL2FwcC12
aWV3LmpzCmluZGV4IDQ5NWViYzQxOWU3ZDMwMDNiM2Y0MTFjMDQyODA2NDQ3OTE2NDhlZTAuLjM0
MjUyZmM5Y2IyMjY0ZjZkMzY0NDlkZTNiMmEyODUzZmQ4ZTk1ZmIgMTAwNjQ0Ci0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL2JhY2tib25lL2pzL3ZpZXdzL2FwcC12aWV3LmpzCisrKyBiL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2Jh
Y2tib25lL2pzL3ZpZXdzL2FwcC12aWV3LmpzCkBAIC0xMCwxMjMgKzEwLDEyMiBAQCB2YXIgYXBw
ID0gYXBwIHx8IHt9OwogICAgIC8vIE91ciBvdmVyYWxsICoqQXBwVmlldyoqIGlzIHRoZSB0b3At
bGV2ZWwgcGllY2Ugb2YgVUkuCiAgICAgYXBwLkFwcFZpZXcgPSBCYWNrYm9uZS5WaWV3LmV4dGVu
ZCh7CiAKLSAgICAvLyBJbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSBuZXcgZWxlbWVudCwgYmluZCB0
byB0aGUgZXhpc3Rpbmcgc2tlbGV0b24gb2YKLSAgICAvLyB0aGUgQXBwIGFscmVhZHkgcHJlc2Vu
dCBpbiB0aGUgSFRNTC4KLSAgICBlbDogJyN0b2RvYXBwJywKLQotICAgIC8vIE91ciB0ZW1wbGF0
ZSBmb3IgdGhlIGxpbmUgb2Ygc3RhdGlzdGljcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBhcHAuCi0g
ICAgc3RhdHNUZW1wbGF0ZTogXy50ZW1wbGF0ZSgkKCcjc3RhdHMtdGVtcGxhdGUnKS5odG1sKCkp
LAotCi0gICAgLy8gRGVsZWdhdGVkIGV2ZW50cyBmb3IgY3JlYXRpbmcgbmV3IGl0ZW1zLCBhbmQg
Y2xlYXJpbmcgY29tcGxldGVkIG9uZXMuCi0gICAgZXZlbnRzOiB7Ci0gICAgJ2tleXByZXNzICNu
ZXctdG9kbyc6ICdjcmVhdGVPbkVudGVyJywKLSAgICAnY2xpY2sgI2NsZWFyLWNvbXBsZXRlZCc6
ICdjbGVhckNvbXBsZXRlZCcsCi0gICAgJ2NsaWNrICN0b2dnbGUtYWxsJzogJ3RvZ2dsZUFsbENv
bXBsZXRlJwotICAgIH0sCi0KLSAgICAvLyBBdCBpbml0aWFsaXphdGlvbiB3ZSBiaW5kIHRvIHRo
ZSByZWxldmFudCBldmVudHMgb24gdGhlIGBUb2Rvc2AKLSAgICAvLyBjb2xsZWN0aW9uLCB3aGVu
IGl0ZW1zIGFyZSBhZGRlZCBvciBjaGFuZ2VkLiBLaWNrIHRoaW5ncyBvZmYgYnkKLSAgICAvLyBs
b2FkaW5nIGFueSBwcmVleGlzdGluZyB0b2RvcyB0aGF0IG1pZ2h0IGJlIHNhdmVkIGluICpsb2Nh
bFN0b3JhZ2UqLgotICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uICgpIHsKLSAgICB0aGlzLmFsbENo
ZWNrYm94ID0gdGhpcy4kKCcjdG9nZ2xlLWFsbCcpWzBdOwotICAgIHRoaXMuJGlucHV0ID0gdGhp
cy4kKCcjbmV3LXRvZG8nKTsKLSAgICB0aGlzLiRmb290ZXIgPSB0aGlzLiQoJyNmb290ZXInKTsK
LSAgICB0aGlzLiRtYWluID0gdGhpcy4kKCcjbWFpbicpOwotCi0gICAgdGhpcy5saXN0ZW5Ubyhh
cHAudG9kb3MsICdhZGQnLCB0aGlzLmFkZE9uZSk7Ci0gICAgdGhpcy5saXN0ZW5UbyhhcHAudG9k
b3MsICdyZXNldCcsIHRoaXMuYWRkQWxsKTsKLSAgICB0aGlzLmxpc3RlblRvKGFwcC50b2Rvcywg
J2NoYW5nZTpjb21wbGV0ZWQnLCB0aGlzLmZpbHRlck9uZSk7Ci0gICAgdGhpcy5saXN0ZW5Ubyhh
cHAudG9kb3MsICdmaWx0ZXInLCB0aGlzLmZpbHRlckFsbCk7Ci0gICAgdGhpcy5saXN0ZW5Ubyhh
cHAudG9kb3MsICdhbGwnLCB0aGlzLnJlbmRlcik7Ci0KLSAgICAvLyBTdXBwcmVzc2VzICdhZGQn
IGV2ZW50cyB3aXRoIHtyZXNldDogdHJ1ZX0gYW5kIHByZXZlbnRzIHRoZSBhcHAgdmlldyAKLSAg
ICAvLyBmcm9tIGJlaW5nIHJlLXJlbmRlcmVkIGZvciBldmVyeSBtb2RlbC4gT25seSByZW5kZXJz
IHdoZW4gdGhlICdyZXNldCcKLSAgICAvLyBldmVudCBpcyB0cmlnZ2VyZWQgYXQgdGhlIGVuZCBv
ZiB0aGUgZmV0Y2guCi0gICAgYXBwLnRvZG9zLmZldGNoKHtyZXNldDogdHJ1ZX0pOwotICAgIH0s
Ci0KLSAgICAvLyBSZS1yZW5kZXJpbmcgdGhlIEFwcCBqdXN0IG1lYW5zIHJlZnJlc2hpbmcgdGhl
IHN0YXRpc3RpY3MgLS0gdGhlIHJlc3QKLSAgICAvLyBvZiB0aGUgYXBwIGRvZXNuJ3QgY2hhbmdl
LgotICAgIHJlbmRlcjogZnVuY3Rpb24gKCkgewotICAgIHZhciBjb21wbGV0ZWQgPSBhcHAudG9k
b3MuY29tcGxldGVkKCkubGVuZ3RoOwotICAgIHZhciByZW1haW5pbmcgPSBhcHAudG9kb3MucmVt
YWluaW5nKCkubGVuZ3RoOwotCi0gICAgaWYgKGFwcC50b2Rvcy5sZW5ndGgpIHsKLSAgICB0aGlz
LiRtYWluLnNob3coKTsKLSAgICB0aGlzLiRmb290ZXIuc2hvdygpOwotCi0gICAgdGhpcy4kZm9v
dGVyLmh0bWwodGhpcy5zdGF0c1RlbXBsYXRlKHsKLSAgICBjb21wbGV0ZWQ6IGNvbXBsZXRlZCwK
LSAgICByZW1haW5pbmc6IHJlbWFpbmluZwotICAgIH0pKTsKLQotICAgIHRoaXMuJCgnI2ZpbHRl
cnMgbGkgYScpCi0gICAgLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpCi0gICAgLmZpbHRlcignW2hy
ZWY9IiMvJyArIChhcHAuVG9kb0ZpbHRlciB8fCAnJykgKyAnIl0nKQotICAgIC5hZGRDbGFzcygn
c2VsZWN0ZWQnKTsKLSAgICB9IGVsc2UgewotICAgIHRoaXMuJG1haW4uaGlkZSgpOwotICAgIHRo
aXMuJGZvb3Rlci5oaWRlKCk7Ci0gICAgfQotCi0gICAgdGhpcy5hbGxDaGVja2JveC5jaGVja2Vk
ID0gIXJlbWFpbmluZzsKLSAgICB9LAotCi0gICAgLy8gQWRkIGEgc2luZ2xlIHRvZG8gaXRlbSB0
byB0aGUgbGlzdCBieSBjcmVhdGluZyBhIHZpZXcgZm9yIGl0LCBhbmQKLSAgICAvLyBhcHBlbmRp
bmcgaXRzIGVsZW1lbnQgdG8gdGhlIGA8dWw+YC4KLSAgICBhZGRPbmU6IGZ1bmN0aW9uICh0b2Rv
KSB7Ci0gICAgdmFyIHZpZXcgPSBuZXcgYXBwLlRvZG9WaWV3KHsgbW9kZWw6IHRvZG8gfSk7Ci0g
ICAgJCgnI3RvZG8tbGlzdCcpLmFwcGVuZCh2aWV3LnJlbmRlcigpLmVsKTsKLSAgICB9LAotCi0g
ICAgLy8gQWRkIGFsbCBpdGVtcyBpbiB0aGUgKipUb2RvcyoqIGNvbGxlY3Rpb24gYXQgb25jZS4K
LSAgICBhZGRBbGw6IGZ1bmN0aW9uICgpIHsKLSAgICB0aGlzLiQoJyN0b2RvLWxpc3QnKS5odG1s
KCcnKTsKLSAgICBhcHAudG9kb3MuZWFjaCh0aGlzLmFkZE9uZSwgdGhpcyk7Ci0gICAgfSwKLQot
ICAgIGZpbHRlck9uZTogZnVuY3Rpb24gKHRvZG8pIHsKLSAgICB0b2RvLnRyaWdnZXIoJ3Zpc2li
bGUnKTsKLSAgICB9LAotCi0gICAgZmlsdGVyQWxsOiBmdW5jdGlvbiAoKSB7Ci0gICAgYXBwLnRv
ZG9zLmVhY2godGhpcy5maWx0ZXJPbmUsIHRoaXMpOwotICAgIH0sCi0KLSAgICAvLyBHZW5lcmF0
ZSB0aGUgYXR0cmlidXRlcyBmb3IgYSBuZXcgVG9kbyBpdGVtLgotICAgIG5ld0F0dHJpYnV0ZXM6
IGZ1bmN0aW9uICgpIHsKLSAgICByZXR1cm4gewotICAgIHRpdGxlOiB0aGlzLiRpbnB1dC52YWwo
KS50cmltKCksCi0gICAgb3JkZXI6IGFwcC50b2Rvcy5uZXh0T3JkZXIoKSwKLSAgICBjb21wbGV0
ZWQ6IGZhbHNlCi0gICAgfTsKLSAgICB9LAotCi0gICAgLy8gSWYgeW91IGhpdCByZXR1cm4gaW4g
dGhlIG1haW4gaW5wdXQgZmllbGQsIGNyZWF0ZSBuZXcgKipUb2RvKiogbW9kZWwsCi0gICAgLy8g
cGVyc2lzdGluZyBpdCB0byAqbG9jYWxTdG9yYWdlKi4KLSAgICBjcmVhdGVPbkVudGVyOiBmdW5j
dGlvbiAoZSkgewotICAgIGlmIChlLndoaWNoICE9PSBFTlRFUl9LRVkgfHwgIXRoaXMuJGlucHV0
LnZhbCgpLnRyaW0oKSkgewotICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhcHAudG9kb3MuY3Jl
YXRlKHRoaXMubmV3QXR0cmlidXRlcygpKTsKLSAgICB0aGlzLiRpbnB1dC52YWwoJycpOwotICAg
IH0sCi0KLSAgICAvLyBDbGVhciBhbGwgY29tcGxldGVkIHRvZG8gaXRlbXMsIGRlc3Ryb3lpbmcg
dGhlaXIgbW9kZWxzLgotICAgIGNsZWFyQ29tcGxldGVkOiBmdW5jdGlvbiAoKSB7Ci0gICAgXy5p
bnZva2UoYXBwLnRvZG9zLmNvbXBsZXRlZCgpLCAnZGVzdHJveScpOwotICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9LAotCi0gICAgdG9nZ2xlQWxsQ29tcGxldGU6IGZ1bmN0aW9uICgpIHsKLSAgICB2
YXIgY29tcGxldGVkID0gdGhpcy5hbGxDaGVja2JveC5jaGVja2VkOwotCi0gICAgYXBwLnRvZG9z
LmVhY2goZnVuY3Rpb24gKHRvZG8pIHsKLSAgICB0b2RvLnNhdmUoewotICAgICdjb21wbGV0ZWQn
OiBjb21wbGV0ZWQKLSAgICB9KTsKLSAgICB9KTsKLSAgICB9CisgICAgICAgIC8vIEluc3RlYWQg
b2YgZ2VuZXJhdGluZyBhIG5ldyBlbGVtZW50LCBiaW5kIHRvIHRoZSBleGlzdGluZyBza2VsZXRv
biBvZgorICAgICAgICAvLyB0aGUgQXBwIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgSFRNTC4KKyAg
ICAgICAgZWw6ICcudG9kb2FwcCcsCisKKyAgICAgICAgLy8gT3VyIHRlbXBsYXRlIGZvciB0aGUg
bGluZSBvZiBzdGF0aXN0aWNzIGF0IHRoZSBib3R0b20gb2YgdGhlIGFwcC4KKyAgICAgICAgc3Rh
dHNUZW1wbGF0ZTogXy50ZW1wbGF0ZSgkKCcjc3RhdHMtdGVtcGxhdGUnKS5odG1sKCkpLAorCisg
ICAgICAgIC8vIERlbGVnYXRlZCBldmVudHMgZm9yIGNyZWF0aW5nIG5ldyBpdGVtcywgYW5kIGNs
ZWFyaW5nIGNvbXBsZXRlZCBvbmVzLgorICAgICAgICBldmVudHM6IHsKKyAgICAgICAgICAgICdr
ZXlwcmVzcyAubmV3LXRvZG8nOiAnY3JlYXRlT25FbnRlcicsCisgICAgICAgICAgICAnY2xpY2sg
LmNsZWFyLWNvbXBsZXRlZCc6ICdjbGVhckNvbXBsZXRlZCcsCisgICAgICAgICAgICAnY2xpY2sg
LnRvZ2dsZS1hbGwnOiAndG9nZ2xlQWxsQ29tcGxldGUnCisgICAgICAgIH0sCisKKyAgICAgICAg
Ly8gQXQgaW5pdGlhbGl6YXRpb24gd2UgYmluZCB0byB0aGUgcmVsZXZhbnQgZXZlbnRzIG9uIHRo
ZSBgVG9kb3NgCisgICAgICAgIC8vIGNvbGxlY3Rpb24sIHdoZW4gaXRlbXMgYXJlIGFkZGVkIG9y
IGNoYW5nZWQuIEtpY2sgdGhpbmdzIG9mZiBieQorICAgICAgICAvLyBsb2FkaW5nIGFueSBwcmVl
eGlzdGluZyB0b2RvcyB0aGF0IG1pZ2h0IGJlIHNhdmVkIGluICpsb2NhbFN0b3JhZ2UqLgorICAg
ICAgICBpbml0aWFsaXplOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0aGlzLmFsbENoZWNr
Ym94ID0gdGhpcy4kKCcudG9nZ2xlLWFsbCcpWzBdOworICAgICAgICAgICAgdGhpcy4kaW5wdXQg
PSB0aGlzLiQoJy5uZXctdG9kbycpOworICAgICAgICAgICAgdGhpcy4kZm9vdGVyID0gdGhpcy4k
KCcuZm9vdGVyJyk7CisgICAgICAgICAgICB0aGlzLiRtYWluID0gdGhpcy4kKCcubWFpbicpOwor
ICAgICAgICAgICAgdGhpcy4kbGlzdCA9ICQoJy50b2RvLWxpc3QnKTsKKworICAgICAgICAgICAg
dGhpcy5saXN0ZW5UbyhhcHAudG9kb3MsICdhZGQnLCB0aGlzLmFkZE9uZSk7CisgICAgICAgICAg
ICB0aGlzLmxpc3RlblRvKGFwcC50b2RvcywgJ3Jlc2V0JywgdGhpcy5hZGRBbGwpOworICAgICAg
ICAgICAgdGhpcy5saXN0ZW5UbyhhcHAudG9kb3MsICdjaGFuZ2U6Y29tcGxldGVkJywgdGhpcy5m
aWx0ZXJPbmUpOworICAgICAgICAgICAgdGhpcy5saXN0ZW5UbyhhcHAudG9kb3MsICdmaWx0ZXIn
LCB0aGlzLmZpbHRlckFsbCk7CisgICAgICAgICAgICB0aGlzLmxpc3RlblRvKGFwcC50b2Rvcywg
J2FsbCcsIF8uZGVib3VuY2UodGhpcy5yZW5kZXIsIDApKTsKKworICAgICAgICAgICAgLy8gU3Vw
cHJlc3NlcyAnYWRkJyBldmVudHMgd2l0aCB7cmVzZXQ6IHRydWV9IGFuZCBwcmV2ZW50cyB0aGUg
YXBwIHZpZXcKKyAgICAgICAgICAgIC8vIGZyb20gYmVpbmcgcmUtcmVuZGVyZWQgZm9yIGV2ZXJ5
IG1vZGVsLiBPbmx5IHJlbmRlcnMgd2hlbiB0aGUgJ3Jlc2V0JworICAgICAgICAgICAgLy8gZXZl
bnQgaXMgdHJpZ2dlcmVkIGF0IHRoZSBlbmQgb2YgdGhlIGZldGNoLgorICAgICAgICAgICAgYXBw
LnRvZG9zLmZldGNoKHtyZXNldDogdHJ1ZX0pOworICAgICAgICB9LAorCisgICAgICAgIC8vIFJl
LXJlbmRlcmluZyB0aGUgQXBwIGp1c3QgbWVhbnMgcmVmcmVzaGluZyB0aGUgc3RhdGlzdGljcyAt
LSB0aGUgcmVzdAorICAgICAgICAvLyBvZiB0aGUgYXBwIGRvZXNuJ3QgY2hhbmdlLgorICAgICAg
ICByZW5kZXI6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBjb21wbGV0ZWQgPSBhcHAu
dG9kb3MuY29tcGxldGVkKCkubGVuZ3RoOworICAgICAgICAgICAgdmFyIHJlbWFpbmluZyA9IGFw
cC50b2Rvcy5yZW1haW5pbmcoKS5sZW5ndGg7CisKKyAgICAgICAgICAgIGlmIChhcHAudG9kb3Mu
bGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgdGhpcy4kbWFpbi5zaG93KCk7CisgICAgICAgICAg
ICAgICAgdGhpcy4kZm9vdGVyLnNob3coKTsKKworICAgICAgICAgICAgICAgIHRoaXMuJGZvb3Rl
ci5odG1sKHRoaXMuc3RhdHNUZW1wbGF0ZSh7CisgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRl
ZDogY29tcGxldGVkLAorICAgICAgICAgICAgICAgICAgICByZW1haW5pbmc6IHJlbWFpbmluZwor
ICAgICAgICAgICAgICAgIH0pKTsKKworICAgICAgICAgICAgICAgIHRoaXMuJCgnLmZpbHRlcnMg
bGkgYScpCisgICAgICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKQorICAg
ICAgICAgICAgICAgICAgICAuZmlsdGVyKCdbaHJlZj0iIy8nICsgKGFwcC5Ub2RvRmlsdGVyIHx8
ICcnKSArICciXScpCisgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnc2VsZWN0ZWQnKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy4kbWFpbi5oaWRlKCk7
CisgICAgICAgICAgICAgICAgdGhpcy4kZm9vdGVyLmhpZGUoKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgdGhpcy5hbGxDaGVja2JveC5jaGVja2VkID0gIXJlbWFpbmluZzsKKyAgICAg
ICAgfSwKKworICAgICAgICAvLyBBZGQgYSBzaW5nbGUgdG9kbyBpdGVtIHRvIHRoZSBsaXN0IGJ5
IGNyZWF0aW5nIGEgdmlldyBmb3IgaXQsIGFuZAorICAgICAgICAvLyBhcHBlbmRpbmcgaXRzIGVs
ZW1lbnQgdG8gdGhlIGA8dWw+YC4KKyAgICAgICAgYWRkT25lOiBmdW5jdGlvbiAodG9kbykgewor
ICAgICAgICAgICAgdmFyIHZpZXcgPSBuZXcgYXBwLlRvZG9WaWV3KHsgbW9kZWw6IHRvZG8gfSk7
CisgICAgICAgICAgICB0aGlzLiRsaXN0LmFwcGVuZCh2aWV3LnJlbmRlcigpLmVsKTsKKyAgICAg
ICAgfSwKKworICAgICAgICAvLyBBZGQgYWxsIGl0ZW1zIGluIHRoZSAqKlRvZG9zKiogY29sbGVj
dGlvbiBhdCBvbmNlLgorICAgICAgICBhZGRBbGw6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHRoaXMuJGxpc3QuaHRtbCgnJyk7CisgICAgICAgICAgICBhcHAudG9kb3MuZWFjaCh0aGlzLmFk
ZE9uZSwgdGhpcyk7CisgICAgICAgIH0sCisKKyAgICAgICAgZmlsdGVyT25lOiBmdW5jdGlvbiAo
dG9kbykgeworICAgICAgICAgICAgdG9kby50cmlnZ2VyKCd2aXNpYmxlJyk7CisgICAgICAgIH0s
CisKKyAgICAgICAgZmlsdGVyQWxsOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBhcHAudG9k
b3MuZWFjaCh0aGlzLmZpbHRlck9uZSwgdGhpcyk7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8g
R2VuZXJhdGUgdGhlIGF0dHJpYnV0ZXMgZm9yIGEgbmV3IFRvZG8gaXRlbS4KKyAgICAgICAgbmV3
QXR0cmlidXRlczogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICB0aXRsZTogdGhpcy4kaW5wdXQudmFsKCkudHJpbSgpLAorICAgICAgICAgICAgICAg
IG9yZGVyOiBhcHAudG9kb3MubmV4dE9yZGVyKCksCisgICAgICAgICAgICAgICAgY29tcGxldGVk
OiBmYWxzZQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICAvLyBJZiB5b3Ug
aGl0IHJldHVybiBpbiB0aGUgbWFpbiBpbnB1dCBmaWVsZCwgY3JlYXRlIG5ldyAqKlRvZG8qKiBt
b2RlbCwKKyAgICAgICAgLy8gcGVyc2lzdGluZyBpdCB0byAqbWVtb3J5Ki4KKyAgICAgICAgY3Jl
YXRlT25FbnRlcjogZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIGlmIChlLndoaWNoID09PSBF
TlRFUl9LRVkgJiYgdGhpcy4kaW5wdXQudmFsKCkudHJpbSgpKSB7CisgICAgICAgICAgICAgICAg
YXBwLnRvZG9zLmNyZWF0ZSh0aGlzLm5ld0F0dHJpYnV0ZXMoKSk7CisgICAgICAgICAgICAgICAg
dGhpcy4kaW5wdXQudmFsKCcnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAg
ICAvLyBDbGVhciBhbGwgY29tcGxldGVkIHRvZG8gaXRlbXMsIGRlc3Ryb3lpbmcgdGhlaXIgbW9k
ZWxzLgorICAgICAgICBjbGVhckNvbXBsZXRlZDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
Xy5pbnZva2UoYXBwLnRvZG9zLmNvbXBsZXRlZCgpLCAnZGVzdHJveScpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9LAorCisgICAgICAgIHRvZ2dsZUFsbENvbXBsZXRlOiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgY29tcGxldGVkID0gdGhpcy5hbGxDaGVja2Jv
eC5jaGVja2VkOworCisgICAgICAgICAgICBhcHAudG9kb3MuZWFjaChmdW5jdGlvbiAodG9kbykg
eworICAgICAgICAgICAgICAgIHRvZG8uc2F2ZSh7CisgICAgICAgICAgICAgICAgICAgIGNvbXBs
ZXRlZDogY29tcGxldGVkCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQogICAgIH0pOwogfSkoalF1ZXJ5KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2Jh
Y2tib25lL2pzL3ZpZXdzL3RvZG8tdmlldy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL2pzL3Zp
ZXdzL3RvZG8tdmlldy5qcwppbmRleCAxZjgyZTdmM2JlMDZkNTZmZDMyNDVkNWI1M2Y2ODhlY2Y5
YzFlOWFhLi5iYjNiNDA0M2ZmNmUwNzcxYWRiMDNlMjAyMDY4NDE1YjczMDNiZmVkIDEwMDY0NAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9qcy92aWV3cy90b2RvLXZpZXcuanMKKysrIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvYmFja2JvbmUvanMvdmlld3MvdG9kby12aWV3LmpzCkBAIC0xLDQgKzEsNCBAQAot
LypnbG9iYWwgQmFja2JvbmUsIGpRdWVyeSwgXywgRU5URVJfS0VZICovCisvKmdsb2JhbCBCYWNr
Ym9uZSwgalF1ZXJ5LCBfLCBFTlRFUl9LRVksIEVTQ19LRVkgKi8KIHZhciBhcHAgPSBhcHAgfHwg
e307CiAKIChmdW5jdGlvbiAoJCkgewpAQCAtOSw4NiArOSwxMTUgQEAgdmFyIGFwcCA9IGFwcCB8
fCB7fTsKIAogICAgIC8vIFRoZSBET00gZWxlbWVudCBmb3IgYSB0b2RvIGl0ZW0uLi4KICAgICBh
cHAuVG9kb1ZpZXcgPSBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7Ci0gICAgLy8uLi4gaXMgYSBsaXN0
IHRhZy4KLSAgICB0YWdOYW1lOiAgJ2xpJywKLQotICAgIC8vIENhY2hlIHRoZSB0ZW1wbGF0ZSBm
dW5jdGlvbiBmb3IgYSBzaW5nbGUgaXRlbS4KLSAgICB0ZW1wbGF0ZTogXy50ZW1wbGF0ZSgkKCcj
aXRlbS10ZW1wbGF0ZScpLmh0bWwoKSksCi0KLSAgICAvLyBUaGUgRE9NIGV2ZW50cyBzcGVjaWZp
YyB0byBhbiBpdGVtLgotICAgIGV2ZW50czogewotICAgICdjbGljayAudG9nZ2xlJzogJ3RvZ2ds
ZUNvbXBsZXRlZCcsCi0gICAgJ2RibGNsaWNrIGxhYmVsJzogJ2VkaXQnLAotICAgICdjbGljayAu
ZGVzdHJveSc6ICdjbGVhcicsCi0gICAgJ2tleXByZXNzIC5lZGl0JzogJ3VwZGF0ZU9uRW50ZXIn
LAotICAgICdibHVyIC5lZGl0JzogJ2Nsb3NlJwotICAgIH0sCi0KLSAgICAvLyBUaGUgVG9kb1Zp
ZXcgbGlzdGVucyBmb3IgY2hhbmdlcyB0byBpdHMgbW9kZWwsIHJlLXJlbmRlcmluZy4gU2luY2Ug
dGhlcmUncwotICAgIC8vIGEgb25lLXRvLW9uZSBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIGEgKipU
b2RvKiogYW5kIGEgKipUb2RvVmlldyoqIGluIHRoaXMKLSAgICAvLyBhcHAsIHdlIHNldCBhIGRp
cmVjdCByZWZlcmVuY2Ugb24gdGhlIG1vZGVsIGZvciBjb252ZW5pZW5jZS4KLSAgICBpbml0aWFs
aXplOiBmdW5jdGlvbiAoKSB7Ci0gICAgdGhpcy5saXN0ZW5Ubyh0aGlzLm1vZGVsLCAnY2hhbmdl
JywgdGhpcy5yZW5kZXIpOwotICAgIHRoaXMubGlzdGVuVG8odGhpcy5tb2RlbCwgJ2Rlc3Ryb3kn
LCB0aGlzLnJlbW92ZSk7Ci0gICAgdGhpcy5saXN0ZW5Ubyh0aGlzLm1vZGVsLCAndmlzaWJsZScs
IHRoaXMudG9nZ2xlVmlzaWJsZSk7Ci0gICAgfSwKLQotICAgIC8vIFJlLXJlbmRlciB0aGUgdGl0
bGVzIG9mIHRoZSB0b2RvIGl0ZW0uCi0gICAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7Ci0gICAgdGhp
cy4kZWwuaHRtbCh0aGlzLnRlbXBsYXRlKHRoaXMubW9kZWwudG9KU09OKCkpKTsKLSAgICB0aGlz
LiRlbC50b2dnbGVDbGFzcygnY29tcGxldGVkJywgdGhpcy5tb2RlbC5nZXQoJ2NvbXBsZXRlZCcp
KTsKLSAgICB0aGlzLnRvZ2dsZVZpc2libGUoKTsKLSAgICB0aGlzLiRpbnB1dCA9IHRoaXMuJCgn
LmVkaXQnKTsKLSAgICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0gICAgdG9nZ2xlVmlzaWJsZTog
ZnVuY3Rpb24gKCkgewotICAgIHRoaXMuJGVsLnRvZ2dsZUNsYXNzKCdoaWRkZW4nLCB0aGlzLmlz
SGlkZGVuKCkpOwotICAgIH0sCi0KLSAgICBpc0hpZGRlbjogZnVuY3Rpb24gKCkgewotICAgIHZh
ciBpc0NvbXBsZXRlZCA9IHRoaXMubW9kZWwuZ2V0KCdjb21wbGV0ZWQnKTsKLSAgICByZXR1cm4g
KC8vIGhpZGRlbiBjYXNlcyBvbmx5Ci0gICAgKCFpc0NvbXBsZXRlZCAmJiBhcHAuVG9kb0ZpbHRl
ciA9PT0gJ2NvbXBsZXRlZCcpIHx8Ci0gICAgKGlzQ29tcGxldGVkICYmIGFwcC5Ub2RvRmlsdGVy
ID09PSAnYWN0aXZlJykKLSAgICApOwotICAgIH0sCi0KLSAgICAvLyBUb2dnbGUgdGhlIGAiY29t
cGxldGVkImAgc3RhdGUgb2YgdGhlIG1vZGVsLgotICAgIHRvZ2dsZUNvbXBsZXRlZDogZnVuY3Rp
b24gKCkgewotICAgIHRoaXMubW9kZWwudG9nZ2xlKCk7Ci0gICAgfSwKLQotICAgIC8vIFN3aXRj
aCB0aGlzIHZpZXcgaW50byBgImVkaXRpbmciYCBtb2RlLCBkaXNwbGF5aW5nIHRoZSBpbnB1dCBm
aWVsZC4KLSAgICBlZGl0OiBmdW5jdGlvbiAoKSB7Ci0gICAgdGhpcy4kZWwuYWRkQ2xhc3MoJ2Vk
aXRpbmcnKTsKLSAgICB0aGlzLiRpbnB1dC5mb2N1cygpOwotICAgIH0sCi0KLSAgICAvLyBDbG9z
ZSB0aGUgYCJlZGl0aW5nImAgbW9kZSwgc2F2aW5nIGNoYW5nZXMgdG8gdGhlIHRvZG8uCi0gICAg
Y2xvc2U6IGZ1bmN0aW9uICgpIHsKLSAgICB2YXIgdHJpbW1lZFZhbHVlID0gdGhpcy4kaW5wdXQu
dmFsKCkudHJpbSgpOwotICAgIHRoaXMuJGlucHV0LnZhbCh0cmltbWVkVmFsdWUpOwotCi0gICAg
aWYgKHRyaW1tZWRWYWx1ZSkgewotICAgIHRoaXMubW9kZWwuc2F2ZSh7IHRpdGxlOiB0cmltbWVk
VmFsdWUgfSk7Ci0gICAgfSBlbHNlIHsKLSAgICB0aGlzLmNsZWFyKCk7Ci0gICAgfQotCi0gICAg
dGhpcy4kZWwucmVtb3ZlQ2xhc3MoJ2VkaXRpbmcnKTsKLSAgICB9LAotCi0gICAgLy8gSWYgeW91
IGhpdCBgZW50ZXJgLCB3ZSdyZSB0aHJvdWdoIGVkaXRpbmcgdGhlIGl0ZW0uCi0gICAgdXBkYXRl
T25FbnRlcjogZnVuY3Rpb24gKGUpIHsKLSAgICBpZiAoZS53aGljaCA9PT0gRU5URVJfS0VZKSB7
Ci0gICAgdGhpcy5jbG9zZSgpOwotICAgIH0KLSAgICB9LAotCi0gICAgLy8gUmVtb3ZlIHRoZSBp
dGVtLCBkZXN0cm95IHRoZSBtb2RlbCBmcm9tICpsb2NhbFN0b3JhZ2UqIGFuZCBkZWxldGUgaXRz
IHZpZXcuCi0gICAgY2xlYXI6IGZ1bmN0aW9uICgpIHsKLSAgICB0aGlzLm1vZGVsLmRlc3Ryb3ko
KTsKLSAgICB9CisgICAgICAgIC8vLi4uIGlzIGEgbGlzdCB0YWcuCisgICAgICAgIHRhZ05hbWU6
ICAnbGknLAorCisgICAgICAgIC8vIENhY2hlIHRoZSB0ZW1wbGF0ZSBmdW5jdGlvbiBmb3IgYSBz
aW5nbGUgaXRlbS4KKyAgICAgICAgdGVtcGxhdGU6IF8udGVtcGxhdGUoJCgnI2l0ZW0tdGVtcGxh
dGUnKS5odG1sKCkpLAorCisgICAgICAgIC8vIFRoZSBET00gZXZlbnRzIHNwZWNpZmljIHRvIGFu
IGl0ZW0uCisgICAgICAgIGV2ZW50czogeworICAgICAgICAgICAgJ2NsaWNrIC50b2dnbGUnOiAn
dG9nZ2xlQ29tcGxldGVkJywKKyAgICAgICAgICAgICdkYmxjbGljayBsYWJlbCc6ICdlZGl0JywK
KyAgICAgICAgICAgICdjbGljayAuZGVzdHJveSc6ICdjbGVhcicsCisgICAgICAgICAgICAna2V5
cHJlc3MgLmVkaXQnOiAndXBkYXRlT25FbnRlcicsCisgICAgICAgICAgICAna2V5ZG93biAuZWRp
dCc6ICdyZXZlcnRPbkVzY2FwZScsCisgICAgICAgICAgICAnYmx1ciAuZWRpdCc6ICdjbG9zZScK
KyAgICAgICAgfSwKKworICAgICAgICAvLyBUaGUgVG9kb1ZpZXcgbGlzdGVucyBmb3IgY2hhbmdl
cyB0byBpdHMgbW9kZWwsIHJlLXJlbmRlcmluZy4gU2luY2UKKyAgICAgICAgLy8gdGhlcmUncyBh
IG9uZS10by1vbmUgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBhICoqVG9kbyoqIGFuZCBhCisgICAg
ICAgIC8vICoqVG9kb1ZpZXcqKiBpbiB0aGlzIGFwcCwgd2Ugc2V0IGEgZGlyZWN0IHJlZmVyZW5j
ZSBvbiB0aGUgbW9kZWwgZm9yCisgICAgICAgIC8vIGNvbnZlbmllbmNlLgorICAgICAgICBpbml0
aWFsaXplOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0aGlzLmxpc3RlblRvKHRoaXMubW9k
ZWwsICdjaGFuZ2UnLCB0aGlzLnJlbmRlcik7CisgICAgICAgICAgICB0aGlzLmxpc3RlblRvKHRo
aXMubW9kZWwsICdkZXN0cm95JywgdGhpcy5yZW1vdmUpOworICAgICAgICAgICAgdGhpcy5saXN0
ZW5Ubyh0aGlzLm1vZGVsLCAndmlzaWJsZScsIHRoaXMudG9nZ2xlVmlzaWJsZSk7CisgICAgICAg
IH0sCisKKyAgICAgICAgLy8gUmUtcmVuZGVyIHRoZSB0aXRsZXMgb2YgdGhlIHRvZG8gaXRlbS4K
KyAgICAgICAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAvLyBCYWNrYm9uZSBM
b2NhbFN0b3JhZ2UgaXMgYWRkaW5nIGBpZGAgYXR0cmlidXRlIGluc3RhbnRseSBhZnRlcgorICAg
ICAgICAgICAgLy8gY3JlYXRpbmcgYSBtb2RlbC4gIFRoaXMgY2F1c2VzIG91ciBUb2RvVmlldyB0
byByZW5kZXIgdHdpY2UuIE9uY2UKKyAgICAgICAgICAgIC8vIGFmdGVyIGNyZWF0aW5nIGEgbW9k
ZWwgYW5kIG9uY2Ugb24gYGlkYCBjaGFuZ2UuICBXZSB3YW50IHRvCisgICAgICAgICAgICAvLyBm
aWx0ZXIgb3V0IHRoZSBzZWNvbmQgcmVkdW5kYW50IHJlbmRlciwgd2hpY2ggaXMgY2F1c2VkIGJ5
IHRoaXMKKyAgICAgICAgICAgIC8vIGBpZGAgY2hhbmdlLiAgSXQncyBrbm93biBCYWNrYm9uZSBM
b2NhbFN0b3JhZ2UgYnVnLCB0aGVyZWZvcmUKKyAgICAgICAgICAgIC8vIHdlJ3ZlIHRvIGNyZWF0
ZSBhIHdvcmthcm91bmQuCisgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGFzdGVq
cy90b2RvbXZjL2lzc3Vlcy80NjkKKyAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsLmNoYW5nZWQu
aWQgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgdGhpcy4kZWwuaHRtbCh0aGlzLnRlbXBsYXRlKHRoaXMubW9kZWwu
dG9KU09OKCkpKTsKKyAgICAgICAgICAgIHRoaXMuJGVsLnRvZ2dsZUNsYXNzKCdjb21wbGV0ZWQn
LCB0aGlzLm1vZGVsLmdldCgnY29tcGxldGVkJykpOworICAgICAgICAgICAgdGhpcy50b2dnbGVW
aXNpYmxlKCk7CisgICAgICAgICAgICB0aGlzLiRpbnB1dCA9IHRoaXMuJCgnLmVkaXQnKTsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9LAorCisgICAgICAgIHRvZ2dsZVZpc2li
bGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMuJGVsLnRvZ2dsZUNsYXNzKCdoaWRk
ZW4nLCB0aGlzLmlzSGlkZGVuKCkpOworICAgICAgICB9LAorCisgICAgICAgIGlzSGlkZGVuOiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5nZXQoJ2NvbXBsZXRl
ZCcpID8KKyAgICAgICAgICAgICAgICBhcHAuVG9kb0ZpbHRlciA9PT0gJ2FjdGl2ZScgOgorICAg
ICAgICAgICAgICAgIGFwcC5Ub2RvRmlsdGVyID09PSAnY29tcGxldGVkJzsKKyAgICAgICAgfSwK
KworICAgICAgICAvLyBUb2dnbGUgdGhlIGAiY29tcGxldGVkImAgc3RhdGUgb2YgdGhlIG1vZGVs
LgorICAgICAgICB0b2dnbGVDb21wbGV0ZWQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRo
aXMubW9kZWwudG9nZ2xlKCk7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8gU3dpdGNoIHRoaXMg
dmlldyBpbnRvIGAiZWRpdGluZyJgIG1vZGUsIGRpc3BsYXlpbmcgdGhlIGlucHV0IGZpZWxkLgor
ICAgICAgICBlZGl0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0aGlzLiRlbC5hZGRDbGFz
cygnZWRpdGluZycpOworICAgICAgICAgICAgdGhpcy4kaW5wdXQuZm9jdXMoKTsKKyAgICAgICAg
fSwKKworICAgICAgICAvLyBDbG9zZSB0aGUgYCJlZGl0aW5nImAgbW9kZSwgc2F2aW5nIGNoYW5n
ZXMgdG8gdGhlIHRvZG8uCisgICAgICAgIGNsb3NlOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICB2YXIgdmFsdWUgPSB0aGlzLiRpbnB1dC52YWwoKTsKKyAgICAgICAgICAgIHZhciB0cmltbWVk
VmFsdWUgPSB2YWx1ZS50cmltKCk7CisKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8g
aGFuZGxlIGJsdXIgZXZlbnRzIGZyb20gYW4gaXRlbSB0aGF0IGlzIG5vCisgICAgICAgICAgICAv
LyBsb25nZXIgYmVpbmcgZWRpdGVkLiBSZWx5aW5nIG9uIHRoZSBDU1MgY2xhc3MgaGVyZSBoYXMg
dGhlCisgICAgICAgICAgICAvLyBiZW5lZml0IG9mIHVzIG5vdCBoYXZpbmcgdG8gbWFpbnRhaW4g
c3RhdGUgaW4gdGhlIERPTSBhbmQgdGhlCisgICAgICAgICAgICAvLyBKYXZhU2NyaXB0IGxvZ2lj
LgorICAgICAgICAgICAgaWYgKCF0aGlzLiRlbC5oYXNDbGFzcygnZWRpdGluZycpKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHJp
bW1lZFZhbHVlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zYXZlKHsgdGl0bGU6IHRy
aW1tZWRWYWx1ZSB9KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhp
cy5jbGVhcigpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0aGlzLiRlbC5yZW1vdmVD
bGFzcygnZWRpdGluZycpOworICAgICAgICB9LAorCisgICAgICAgIC8vIElmIHlvdSBoaXQgYGVu
dGVyYCwgd2UncmUgdGhyb3VnaCBlZGl0aW5nIHRoZSBpdGVtLgorICAgICAgICB1cGRhdGVPbkVu
dGVyOiBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgaWYgKGUud2hpY2ggPT09IEVOVEVSX0tF
WSkgeworICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSwKKworICAgICAgICAvLyBJZiB5b3UncmUgcHJlc3NpbmcgYGVzY2FwZWAgd2UgcmV2ZXJ0
IHlvdXIgY2hhbmdlIGJ5IHNpbXBseSBsZWF2aW5nCisgICAgICAgIC8vIHRoZSBgZWRpdGluZ2Ag
c3RhdGUuCisgICAgICAgIHJldmVydE9uRXNjYXBlOiBmdW5jdGlvbiAoZSkgeworICAgICAgICAg
ICAgaWYgKGUud2hpY2ggPT09IEVTQ19LRVkpIHsKKyAgICAgICAgICAgICAgICB0aGlzLiRlbC5y
ZW1vdmVDbGFzcygnZWRpdGluZycpOworICAgICAgICAgICAgICAgIC8vIEFsc28gcmVzZXQgdGhl
IGhpZGRlbiBpbnB1dCBiYWNrIHRvIHRoZSBvcmlnaW5hbCB2YWx1ZS4KKyAgICAgICAgICAgICAg
ICB0aGlzLiRpbnB1dC52YWwodGhpcy5tb2RlbC5nZXQoJ3RpdGxlJykpOworICAgICAgICAgICAg
fQorICAgICAgICB9LAorCisgICAgICAgIC8vIFJlbW92ZSB0aGUgaXRlbSwgZGVzdHJveSB0aGUg
bW9kZWwgZnJvbSAqbG9jYWxTdG9yYWdlKiBhbmQgZGVsZXRlIGl0cyB2aWV3LgorICAgICAgICBj
bGVhcjogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy5tb2RlbC5kZXN0cm95KCk7Cisg
ICAgICAgIH0KICAgICB9KTsKIH0pKGpRdWVyeSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9i
YWNrYm9uZS9ub2RlX21vZHVsZXMvYmFja2JvbmUvYmFja2JvbmUuanMgYi9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9i
YWNrYm9uZS9ub2RlX21vZHVsZXMvYmFja2JvbmUvYmFja2JvbmUuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTVj
Y2IyMmJkMDBhZjAzZGRlZWU0NmU5YTgyZThmMTkzMjRkOWY4MwotLS0gL2Rldi9udWxsCisrKyBi
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2JhY2tib25lL25vZGVfbW9kdWxlcy9iYWNrYm9uZS9iYWNrYm9uZS5qcwpA
QCAtMCwwICsxLDE5MjAgQEAKKy8vICAgICBCYWNrYm9uZS5qcyAxLjMuMworCisvLyAgICAgKGMp
IDIwMTAtMjAxNiBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRp
dmUgUmVwb3J0ZXJzICYgRWRpdG9ycworLy8gICAgIEJhY2tib25lIG1heSBiZSBmcmVlbHkgZGlz
dHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgorLy8gICAgIEZvciBhbGwgZGV0YWlscyBh
bmQgZG9jdW1lbnRhdGlvbjoKKy8vICAgICBodHRwOi8vYmFja2JvbmVqcy5vcmcKKworKGZ1bmN0
aW9uKGZhY3RvcnkpIHsKKworICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93
YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3Nlciwgb3IgYGdsb2JhbGAgb24gdGhlIHNlcnZlci4KKyAg
Ly8gV2UgdXNlIGBzZWxmYCBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBw
b3J0LgorICB2YXIgcm9vdCA9ICh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYg
PT09IHNlbGYgJiYgc2VsZikgfHwKKyAgICAgICAgICAgICh0eXBlb2YgZ2xvYmFsID09ICdvYmpl
Y3QnICYmIGdsb2JhbC5nbG9iYWwgPT09IGdsb2JhbCAmJiBnbG9iYWwpOworCisgIC8vIFNldCB1
cCBCYWNrYm9uZSBhcHByb3ByaWF0ZWx5IGZvciB0aGUgZW52aXJvbm1lbnQuIFN0YXJ0IHdpdGgg
QU1ELgorICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7
CisgICAgZGVmaW5lKFsndW5kZXJzY29yZScsICdqcXVlcnknLCAnZXhwb3J0cyddLCBmdW5jdGlv
bihfLCAkLCBleHBvcnRzKSB7CisgICAgICAvLyBFeHBvcnQgZ2xvYmFsIGV2ZW4gaW4gQU1EIGNh
c2UgaW4gY2FzZSB0aGlzIHNjcmlwdCBpcyBsb2FkZWQgd2l0aAorICAgICAgLy8gb3RoZXJzIHRo
YXQgbWF5IHN0aWxsIGV4cGVjdCBhIGdsb2JhbCBCYWNrYm9uZS4KKyAgICAgIHJvb3QuQmFja2Jv
bmUgPSBmYWN0b3J5KHJvb3QsIGV4cG9ydHMsIF8sICQpOworICAgIH0pOworCisgIC8vIE5leHQg
Zm9yIE5vZGUuanMgb3IgQ29tbW9uSlMuIGpRdWVyeSBtYXkgbm90IGJlIG5lZWRlZCBhcyBhIG1v
ZHVsZS4KKyAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAg
ICB2YXIgXyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKSwgJDsKKyAgICB0cnkgeyAkID0gcmVxdWly
ZSgnanF1ZXJ5Jyk7IH0gY2F0Y2ggKGUpIHt9CisgICAgZmFjdG9yeShyb290LCBleHBvcnRzLCBf
LCAkKTsKKworICAvLyBGaW5hbGx5LCBhcyBhIGJyb3dzZXIgZ2xvYmFsLgorICB9IGVsc2Ugewor
ICAgIHJvb3QuQmFja2JvbmUgPSBmYWN0b3J5KHJvb3QsIHt9LCByb290Ll8sIChyb290LmpRdWVy
eSB8fCByb290LlplcHRvIHx8IHJvb3QuZW5kZXIgfHwgcm9vdC4kKSk7CisgIH0KKworfSkoZnVu
Y3Rpb24ocm9vdCwgQmFja2JvbmUsIF8sICQpIHsKKworICAvLyBJbml0aWFsIFNldHVwCisgIC8v
IC0tLS0tLS0tLS0tLS0KKworICAvLyBTYXZlIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgYEJh
Y2tib25lYCB2YXJpYWJsZSwgc28gdGhhdCBpdCBjYW4gYmUKKyAgLy8gcmVzdG9yZWQgbGF0ZXIg
b24sIGlmIGBub0NvbmZsaWN0YCBpcyB1c2VkLgorICB2YXIgcHJldmlvdXNCYWNrYm9uZSA9IHJv
b3QuQmFja2JvbmU7CisKKyAgLy8gQ3JlYXRlIGEgbG9jYWwgcmVmZXJlbmNlIHRvIGEgY29tbW9u
IGFycmF5IG1ldGhvZCB3ZSdsbCB3YW50IHRvIHVzZSBsYXRlci4KKyAgdmFyIHNsaWNlID0gQXJy
YXkucHJvdG90eXBlLnNsaWNlOworCisgIC8vIEN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgbGlicmFy
eS4gS2VlcCBpbiBzeW5jIHdpdGggYHBhY2thZ2UuanNvbmAuCisgIEJhY2tib25lLlZFUlNJT04g
PSAnMS4zLjMnOworCisgIC8vIEZvciBCYWNrYm9uZSdzIHB1cnBvc2VzLCBqUXVlcnksIFplcHRv
LCBFbmRlciwgb3IgTXkgTGlicmFyeSAoa2lkZGluZykgb3ducworICAvLyB0aGUgYCRgIHZhcmlh
YmxlLgorICBCYWNrYm9uZS4kID0gJDsKKworICAvLyBSdW5zIEJhY2tib25lLmpzIGluICpub0Nv
bmZsaWN0KiBtb2RlLCByZXR1cm5pbmcgdGhlIGBCYWNrYm9uZWAgdmFyaWFibGUKKyAgLy8gdG8g
aXRzIHByZXZpb3VzIG93bmVyLiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoaXMgQmFja2JvbmUg
b2JqZWN0LgorICBCYWNrYm9uZS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7CisgICAgcm9vdC5C
YWNrYm9uZSA9IHByZXZpb3VzQmFja2JvbmU7CisgICAgcmV0dXJuIHRoaXM7CisgIH07CisKKyAg
Ly8gVHVybiBvbiBgZW11bGF0ZUhUVFBgIHRvIHN1cHBvcnQgbGVnYWN5IEhUVFAgc2VydmVycy4g
U2V0dGluZyB0aGlzIG9wdGlvbgorICAvLyB3aWxsIGZha2UgYCJQQVRDSCJgLCBgIlBVVCJgIGFu
ZCBgIkRFTEVURSJgIHJlcXVlc3RzIHZpYSB0aGUgYF9tZXRob2RgIHBhcmFtZXRlciBhbmQKKyAg
Ly8gc2V0IGEgYFgtSHR0cC1NZXRob2QtT3ZlcnJpZGVgIGhlYWRlci4KKyAgQmFja2JvbmUuZW11
bGF0ZUhUVFAgPSBmYWxzZTsKKworICAvLyBUdXJuIG9uIGBlbXVsYXRlSlNPTmAgdG8gc3VwcG9y
dCBsZWdhY3kgc2VydmVycyB0aGF0IGNhbid0IGRlYWwgd2l0aCBkaXJlY3QKKyAgLy8gYGFwcGxp
Y2F0aW9uL2pzb25gIHJlcXVlc3RzIC4uLiB0aGlzIHdpbGwgZW5jb2RlIHRoZSBib2R5IGFzCisg
IC8vIGBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRgIGluc3RlYWQgYW5kIHdpbGwg
c2VuZCB0aGUgbW9kZWwgaW4gYQorICAvLyBmb3JtIHBhcmFtIG5hbWVkIGBtb2RlbGAuCisgIEJh
Y2tib25lLmVtdWxhdGVKU09OID0gZmFsc2U7CisKKyAgLy8gUHJveHkgQmFja2JvbmUgY2xhc3Mg
bWV0aG9kcyB0byBVbmRlcnNjb3JlIGZ1bmN0aW9ucywgd3JhcHBpbmcgdGhlIG1vZGVsJ3MKKyAg
Ly8gYGF0dHJpYnV0ZXNgIG9iamVjdCBvciBjb2xsZWN0aW9uJ3MgYG1vZGVsc2AgYXJyYXkgYmVo
aW5kIHRoZSBzY2VuZXMuCisgIC8vCisgIC8vIGNvbGxlY3Rpb24uZmlsdGVyKGZ1bmN0aW9uKG1v
ZGVsKSB7IHJldHVybiBtb2RlbC5nZXQoJ2FnZScpID4gMTAgfSk7CisgIC8vIGNvbGxlY3Rpb24u
ZWFjaCh0aGlzLmFkZFZpZXcpOworICAvLworICAvLyBgRnVuY3Rpb24jYXBwbHlgIGNhbiBiZSBz
bG93IHNvIHdlIHVzZSB0aGUgbWV0aG9kJ3MgYXJnIGNvdW50LCBpZiB3ZSBrbm93IGl0LgorICB2
YXIgYWRkTWV0aG9kID0gZnVuY3Rpb24obGVuZ3RoLCBtZXRob2QsIGF0dHJpYnV0ZSkgeworICAg
IHN3aXRjaCAobGVuZ3RoKSB7CisgICAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbigpIHsKKyAg
ICAgICAgcmV0dXJuIF9bbWV0aG9kXSh0aGlzW2F0dHJpYnV0ZV0pOworICAgICAgfTsKKyAgICAg
IGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgIHJldHVybiBfW21ldGhv
ZF0odGhpc1thdHRyaWJ1dGVdLCB2YWx1ZSk7CisgICAgICB9OworICAgICAgY2FzZSAzOiByZXR1
cm4gZnVuY3Rpb24oaXRlcmF0ZWUsIGNvbnRleHQpIHsKKyAgICAgICAgcmV0dXJuIF9bbWV0aG9k
XSh0aGlzW2F0dHJpYnV0ZV0sIGNiKGl0ZXJhdGVlLCB0aGlzKSwgY29udGV4dCk7CisgICAgICB9
OworICAgICAgY2FzZSA0OiByZXR1cm4gZnVuY3Rpb24oaXRlcmF0ZWUsIGRlZmF1bHRWYWwsIGNv
bnRleHQpIHsKKyAgICAgICAgcmV0dXJuIF9bbWV0aG9kXSh0aGlzW2F0dHJpYnV0ZV0sIGNiKGl0
ZXJhdGVlLCB0aGlzKSwgZGVmYXVsdFZhbCwgY29udGV4dCk7CisgICAgICB9OworICAgICAgZGVm
YXVsdDogcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwo
YXJndW1lbnRzKTsKKyAgICAgICAgYXJncy51bnNoaWZ0KHRoaXNbYXR0cmlidXRlXSk7CisgICAg
ICAgIHJldHVybiBfW21ldGhvZF0uYXBwbHkoXywgYXJncyk7CisgICAgICB9OworICAgIH0KKyAg
fTsKKyAgdmFyIGFkZFVuZGVyc2NvcmVNZXRob2RzID0gZnVuY3Rpb24oQ2xhc3MsIG1ldGhvZHMs
IGF0dHJpYnV0ZSkgeworICAgIF8uZWFjaChtZXRob2RzLCBmdW5jdGlvbihsZW5ndGgsIG1ldGhv
ZCkgeworICAgICAgaWYgKF9bbWV0aG9kXSkgQ2xhc3MucHJvdG90eXBlW21ldGhvZF0gPSBhZGRN
ZXRob2QobGVuZ3RoLCBtZXRob2QsIGF0dHJpYnV0ZSk7CisgICAgfSk7CisgIH07CisKKyAgLy8g
U3VwcG9ydCBgY29sbGVjdGlvbi5zb3J0QnkoJ2F0dHInKWAgYW5kIGBjb2xsZWN0aW9uLmZpbmRX
aGVyZSh7aWQ6IDF9KWAuCisgIHZhciBjYiA9IGZ1bmN0aW9uKGl0ZXJhdGVlLCBpbnN0YW5jZSkg
eworICAgIGlmIChfLmlzRnVuY3Rpb24oaXRlcmF0ZWUpKSByZXR1cm4gaXRlcmF0ZWU7CisgICAg
aWYgKF8uaXNPYmplY3QoaXRlcmF0ZWUpICYmICFpbnN0YW5jZS5faXNNb2RlbChpdGVyYXRlZSkp
IHJldHVybiBtb2RlbE1hdGNoZXIoaXRlcmF0ZWUpOworICAgIGlmIChfLmlzU3RyaW5nKGl0ZXJh
dGVlKSkgcmV0dXJuIGZ1bmN0aW9uKG1vZGVsKSB7IHJldHVybiBtb2RlbC5nZXQoaXRlcmF0ZWUp
OyB9OworICAgIHJldHVybiBpdGVyYXRlZTsKKyAgfTsKKyAgdmFyIG1vZGVsTWF0Y2hlciA9IGZ1
bmN0aW9uKGF0dHJzKSB7CisgICAgdmFyIG1hdGNoZXIgPSBfLm1hdGNoZXMoYXR0cnMpOworICAg
IHJldHVybiBmdW5jdGlvbihtb2RlbCkgeworICAgICAgcmV0dXJuIG1hdGNoZXIobW9kZWwuYXR0
cmlidXRlcyk7CisgICAgfTsKKyAgfTsKKworICAvLyBCYWNrYm9uZS5FdmVudHMKKyAgLy8gLS0t
LS0tLS0tLS0tLS0tCisKKyAgLy8gQSBtb2R1bGUgdGhhdCBjYW4gYmUgbWl4ZWQgaW4gdG8gKmFu
eSBvYmplY3QqIGluIG9yZGVyIHRvIHByb3ZpZGUgaXQgd2l0aAorICAvLyBhIGN1c3RvbSBldmVu
dCBjaGFubmVsLiBZb3UgbWF5IGJpbmQgYSBjYWxsYmFjayB0byBhbiBldmVudCB3aXRoIGBvbmAg
b3IKKyAgLy8gcmVtb3ZlIHdpdGggYG9mZmA7IGB0cmlnZ2VyYC1pbmcgYW4gZXZlbnQgZmlyZXMg
YWxsIGNhbGxiYWNrcyBpbgorICAvLyBzdWNjZXNzaW9uLgorICAvLworICAvLyAgICAgdmFyIG9i
amVjdCA9IHt9OworICAvLyAgICAgXy5leHRlbmQob2JqZWN0LCBCYWNrYm9uZS5FdmVudHMpOwor
ICAvLyAgICAgb2JqZWN0Lm9uKCdleHBhbmQnLCBmdW5jdGlvbigpeyBhbGVydCgnZXhwYW5kZWQn
KTsgfSk7CisgIC8vICAgICBvYmplY3QudHJpZ2dlcignZXhwYW5kJyk7CisgIC8vCisgIHZhciBF
dmVudHMgPSBCYWNrYm9uZS5FdmVudHMgPSB7fTsKKworICAvLyBSZWd1bGFyIGV4cHJlc3Npb24g
dXNlZCB0byBzcGxpdCBldmVudCBzdHJpbmdzLgorICB2YXIgZXZlbnRTcGxpdHRlciA9IC9ccysv
OworCisgIC8vIEl0ZXJhdGVzIG92ZXIgdGhlIHN0YW5kYXJkIGBldmVudCwgY2FsbGJhY2tgIChh
cyB3ZWxsIGFzIHRoZSBmYW5jeSBtdWx0aXBsZQorICAvLyBzcGFjZS1zZXBhcmF0ZWQgZXZlbnRz
IGAiY2hhbmdlIGJsdXIiLCBjYWxsYmFja2AgYW5kIGpRdWVyeS1zdHlsZSBldmVudAorICAvLyBt
YXBzIGB7ZXZlbnQ6IGNhbGxiYWNrfWApLgorICB2YXIgZXZlbnRzQXBpID0gZnVuY3Rpb24oaXRl
cmF0ZWUsIGV2ZW50cywgbmFtZSwgY2FsbGJhY2ssIG9wdHMpIHsKKyAgICB2YXIgaSA9IDAsIG5h
bWVzOworICAgIGlmIChuYW1lICYmIHR5cGVvZiBuYW1lID09PSAnb2JqZWN0JykgeworICAgICAg
Ly8gSGFuZGxlIGV2ZW50IG1hcHMuCisgICAgICBpZiAoY2FsbGJhY2sgIT09IHZvaWQgMCAmJiAn
Y29udGV4dCcgaW4gb3B0cyAmJiBvcHRzLmNvbnRleHQgPT09IHZvaWQgMCkgb3B0cy5jb250ZXh0
ID0gY2FsbGJhY2s7CisgICAgICBmb3IgKG5hbWVzID0gXy5rZXlzKG5hbWUpOyBpIDwgbmFtZXMu
bGVuZ3RoIDsgaSsrKSB7CisgICAgICAgIGV2ZW50cyA9IGV2ZW50c0FwaShpdGVyYXRlZSwgZXZl
bnRzLCBuYW1lc1tpXSwgbmFtZVtuYW1lc1tpXV0sIG9wdHMpOworICAgICAgfQorICAgIH0gZWxz
ZSBpZiAobmFtZSAmJiBldmVudFNwbGl0dGVyLnRlc3QobmFtZSkpIHsKKyAgICAgIC8vIEhhbmRs
ZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgbmFtZXMgYnkgZGVsZWdhdGluZyB0aGVtIGluZGl2aWR1
YWxseS4KKyAgICAgIGZvciAobmFtZXMgPSBuYW1lLnNwbGl0KGV2ZW50U3BsaXR0ZXIpOyBpIDwg
bmFtZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgZXZlbnRzID0gaXRlcmF0ZWUoZXZlbnRzLCBu
YW1lc1tpXSwgY2FsbGJhY2ssIG9wdHMpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAv
LyBGaW5hbGx5LCBzdGFuZGFyZCBldmVudHMuCisgICAgICBldmVudHMgPSBpdGVyYXRlZShldmVu
dHMsIG5hbWUsIGNhbGxiYWNrLCBvcHRzKTsKKyAgICB9CisgICAgcmV0dXJuIGV2ZW50czsKKyAg
fTsKKworICAvLyBCaW5kIGFuIGV2ZW50IHRvIGEgYGNhbGxiYWNrYCBmdW5jdGlvbi4gUGFzc2lu
ZyBgImFsbCJgIHdpbGwgYmluZAorICAvLyB0aGUgY2FsbGJhY2sgdG8gYWxsIGV2ZW50cyBmaXJl
ZC4KKyAgRXZlbnRzLm9uID0gZnVuY3Rpb24obmFtZSwgY2FsbGJhY2ssIGNvbnRleHQpIHsKKyAg
ICByZXR1cm4gaW50ZXJuYWxPbih0aGlzLCBuYW1lLCBjYWxsYmFjaywgY29udGV4dCk7CisgIH07
CisKKyAgLy8gR3VhcmQgdGhlIGBsaXN0ZW5pbmdgIGFyZ3VtZW50IGZyb20gdGhlIHB1YmxpYyBB
UEkuCisgIHZhciBpbnRlcm5hbE9uID0gZnVuY3Rpb24ob2JqLCBuYW1lLCBjYWxsYmFjaywgY29u
dGV4dCwgbGlzdGVuaW5nKSB7CisgICAgb2JqLl9ldmVudHMgPSBldmVudHNBcGkob25BcGksIG9i
ai5fZXZlbnRzIHx8IHt9LCBuYW1lLCBjYWxsYmFjaywgeworICAgICAgY29udGV4dDogY29udGV4
dCwKKyAgICAgIGN0eDogb2JqLAorICAgICAgbGlzdGVuaW5nOiBsaXN0ZW5pbmcKKyAgICB9KTsK
KworICAgIGlmIChsaXN0ZW5pbmcpIHsKKyAgICAgIHZhciBsaXN0ZW5lcnMgPSBvYmouX2xpc3Rl
bmVycyB8fCAob2JqLl9saXN0ZW5lcnMgPSB7fSk7CisgICAgICBsaXN0ZW5lcnNbbGlzdGVuaW5n
LmlkXSA9IGxpc3RlbmluZzsKKyAgICB9CisKKyAgICByZXR1cm4gb2JqOworICB9OworCisgIC8v
IEludmVyc2lvbi1vZi1jb250cm9sIHZlcnNpb25zIG9mIGBvbmAuIFRlbGwgKnRoaXMqIG9iamVj
dCB0byBsaXN0ZW4gdG8KKyAgLy8gYW4gZXZlbnQgaW4gYW5vdGhlciBvYmplY3QuLi4ga2VlcGlu
ZyB0cmFjayBvZiB3aGF0IGl0J3MgbGlzdGVuaW5nIHRvCisgIC8vIGZvciBlYXNpZXIgdW5iaW5k
aW5nIGxhdGVyLgorICBFdmVudHMubGlzdGVuVG8gPSBmdW5jdGlvbihvYmosIG5hbWUsIGNhbGxi
YWNrKSB7CisgICAgaWYgKCFvYmopIHJldHVybiB0aGlzOworICAgIHZhciBpZCA9IG9iai5fbGlz
dGVuSWQgfHwgKG9iai5fbGlzdGVuSWQgPSBfLnVuaXF1ZUlkKCdsJykpOworICAgIHZhciBsaXN0
ZW5pbmdUbyA9IHRoaXMuX2xpc3RlbmluZ1RvIHx8ICh0aGlzLl9saXN0ZW5pbmdUbyA9IHt9KTsK
KyAgICB2YXIgbGlzdGVuaW5nID0gbGlzdGVuaW5nVG9baWRdOworCisgICAgLy8gVGhpcyBvYmpl
Y3QgaXMgbm90IGxpc3RlbmluZyB0byBhbnkgb3RoZXIgZXZlbnRzIG9uIGBvYmpgIHlldC4KKyAg
ICAvLyBTZXR1cCB0aGUgbmVjZXNzYXJ5IHJlZmVyZW5jZXMgdG8gdHJhY2sgdGhlIGxpc3Rlbmlu
ZyBjYWxsYmFja3MuCisgICAgaWYgKCFsaXN0ZW5pbmcpIHsKKyAgICAgIHZhciB0aGlzSWQgPSB0
aGlzLl9saXN0ZW5JZCB8fCAodGhpcy5fbGlzdGVuSWQgPSBfLnVuaXF1ZUlkKCdsJykpOworICAg
ICAgbGlzdGVuaW5nID0gbGlzdGVuaW5nVG9baWRdID0ge29iajogb2JqLCBvYmpJZDogaWQsIGlk
OiB0aGlzSWQsIGxpc3RlbmluZ1RvOiBsaXN0ZW5pbmdUbywgY291bnQ6IDB9OworICAgIH0KKwor
ICAgIC8vIEJpbmQgY2FsbGJhY2tzIG9uIG9iaiwgYW5kIGtlZXAgdHJhY2sgb2YgdGhlbSBvbiBs
aXN0ZW5pbmcuCisgICAgaW50ZXJuYWxPbihvYmosIG5hbWUsIGNhbGxiYWNrLCB0aGlzLCBsaXN0
ZW5pbmcpOworICAgIHJldHVybiB0aGlzOworICB9OworCisgIC8vIFRoZSByZWR1Y2luZyBBUEkg
dGhhdCBhZGRzIGEgY2FsbGJhY2sgdG8gdGhlIGBldmVudHNgIG9iamVjdC4KKyAgdmFyIG9uQXBp
ID0gZnVuY3Rpb24oZXZlbnRzLCBuYW1lLCBjYWxsYmFjaywgb3B0aW9ucykgeworICAgIGlmIChj
YWxsYmFjaykgeworICAgICAgdmFyIGhhbmRsZXJzID0gZXZlbnRzW25hbWVdIHx8IChldmVudHNb
bmFtZV0gPSBbXSk7CisgICAgICB2YXIgY29udGV4dCA9IG9wdGlvbnMuY29udGV4dCwgY3R4ID0g
b3B0aW9ucy5jdHgsIGxpc3RlbmluZyA9IG9wdGlvbnMubGlzdGVuaW5nOworICAgICAgaWYgKGxp
c3RlbmluZykgbGlzdGVuaW5nLmNvdW50Kys7CisKKyAgICAgIGhhbmRsZXJzLnB1c2goe2NhbGxi
YWNrOiBjYWxsYmFjaywgY29udGV4dDogY29udGV4dCwgY3R4OiBjb250ZXh0IHx8IGN0eCwgbGlz
dGVuaW5nOiBsaXN0ZW5pbmd9KTsKKyAgICB9CisgICAgcmV0dXJuIGV2ZW50czsKKyAgfTsKKwor
ICAvLyBSZW1vdmUgb25lIG9yIG1hbnkgY2FsbGJhY2tzLiBJZiBgY29udGV4dGAgaXMgbnVsbCwg
cmVtb3ZlcyBhbGwKKyAgLy8gY2FsbGJhY2tzIHdpdGggdGhhdCBmdW5jdGlvbi4gSWYgYGNhbGxi
YWNrYCBpcyBudWxsLCByZW1vdmVzIGFsbAorICAvLyBjYWxsYmFja3MgZm9yIHRoZSBldmVudC4g
SWYgYG5hbWVgIGlzIG51bGwsIHJlbW92ZXMgYWxsIGJvdW5kCisgIC8vIGNhbGxiYWNrcyBmb3Ig
YWxsIGV2ZW50cy4KKyAgRXZlbnRzLm9mZiA9IGZ1bmN0aW9uKG5hbWUsIGNhbGxiYWNrLCBjb250
ZXh0KSB7CisgICAgaWYgKCF0aGlzLl9ldmVudHMpIHJldHVybiB0aGlzOworICAgIHRoaXMuX2V2
ZW50cyA9IGV2ZW50c0FwaShvZmZBcGksIHRoaXMuX2V2ZW50cywgbmFtZSwgY2FsbGJhY2ssIHsK
KyAgICAgIGNvbnRleHQ6IGNvbnRleHQsCisgICAgICBsaXN0ZW5lcnM6IHRoaXMuX2xpc3RlbmVy
cworICAgIH0pOworICAgIHJldHVybiB0aGlzOworICB9OworCisgIC8vIFRlbGwgdGhpcyBvYmpl
Y3QgdG8gc3RvcCBsaXN0ZW5pbmcgdG8gZWl0aGVyIHNwZWNpZmljIGV2ZW50cyAuLi4gb3IKKyAg
Ly8gdG8gZXZlcnkgb2JqZWN0IGl0J3MgY3VycmVudGx5IGxpc3RlbmluZyB0by4KKyAgRXZlbnRz
LnN0b3BMaXN0ZW5pbmcgPSBmdW5jdGlvbihvYmosIG5hbWUsIGNhbGxiYWNrKSB7CisgICAgdmFy
IGxpc3RlbmluZ1RvID0gdGhpcy5fbGlzdGVuaW5nVG87CisgICAgaWYgKCFsaXN0ZW5pbmdUbykg
cmV0dXJuIHRoaXM7CisKKyAgICB2YXIgaWRzID0gb2JqID8gW29iai5fbGlzdGVuSWRdIDogXy5r
ZXlzKGxpc3RlbmluZ1RvKTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsg
aSsrKSB7CisgICAgICB2YXIgbGlzdGVuaW5nID0gbGlzdGVuaW5nVG9baWRzW2ldXTsKKworICAg
ICAgLy8gSWYgbGlzdGVuaW5nIGRvZXNuJ3QgZXhpc3QsIHRoaXMgb2JqZWN0IGlzIG5vdCBjdXJy
ZW50bHkKKyAgICAgIC8vIGxpc3RlbmluZyB0byBvYmouIEJyZWFrIG91dCBlYXJseS4KKyAgICAg
IGlmICghbGlzdGVuaW5nKSBicmVhazsKKworICAgICAgbGlzdGVuaW5nLm9iai5vZmYobmFtZSwg
Y2FsbGJhY2ssIHRoaXMpOworICAgIH0KKworICAgIHJldHVybiB0aGlzOworICB9OworCisgIC8v
IFRoZSByZWR1Y2luZyBBUEkgdGhhdCByZW1vdmVzIGEgY2FsbGJhY2sgZnJvbSB0aGUgYGV2ZW50
c2Agb2JqZWN0LgorICB2YXIgb2ZmQXBpID0gZnVuY3Rpb24oZXZlbnRzLCBuYW1lLCBjYWxsYmFj
aywgb3B0aW9ucykgeworICAgIGlmICghZXZlbnRzKSByZXR1cm47CisKKyAgICB2YXIgaSA9IDAs
IGxpc3RlbmluZzsKKyAgICB2YXIgY29udGV4dCA9IG9wdGlvbnMuY29udGV4dCwgbGlzdGVuZXJz
ID0gb3B0aW9ucy5saXN0ZW5lcnM7CisKKyAgICAvLyBEZWxldGUgYWxsIGV2ZW50cyBsaXN0ZW5l
cnMgYW5kICJkcm9wIiBldmVudHMuCisgICAgaWYgKCFuYW1lICYmICFjYWxsYmFjayAmJiAhY29u
dGV4dCkgeworICAgICAgdmFyIGlkcyA9IF8ua2V5cyhsaXN0ZW5lcnMpOworICAgICAgZm9yICg7
IGkgPCBpZHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgbGlzdGVuaW5nID0gbGlzdGVuZXJzW2lk
c1tpXV07CisgICAgICAgIGRlbGV0ZSBsaXN0ZW5lcnNbbGlzdGVuaW5nLmlkXTsKKyAgICAgICAg
ZGVsZXRlIGxpc3RlbmluZy5saXN0ZW5pbmdUb1tsaXN0ZW5pbmcub2JqSWRdOworICAgICAgfQor
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciBuYW1lcyA9IG5hbWUgPyBbbmFtZV0gOiBf
LmtleXMoZXZlbnRzKTsKKyAgICBmb3IgKDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7CisgICAg
ICBuYW1lID0gbmFtZXNbaV07CisgICAgICB2YXIgaGFuZGxlcnMgPSBldmVudHNbbmFtZV07CisK
KyAgICAgIC8vIEJhaWwgb3V0IGlmIHRoZXJlIGFyZSBubyBldmVudHMgc3RvcmVkLgorICAgICAg
aWYgKCFoYW5kbGVycykgYnJlYWs7CisKKyAgICAgIC8vIFJlcGxhY2UgZXZlbnRzIGlmIHRoZXJl
IGFyZSBhbnkgcmVtYWluaW5nLiAgT3RoZXJ3aXNlLCBjbGVhbiB1cC4KKyAgICAgIHZhciByZW1h
aW5pbmcgPSBbXTsKKyAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaGFuZGxlcnMubGVuZ3RoOyBq
KyspIHsKKyAgICAgICAgdmFyIGhhbmRsZXIgPSBoYW5kbGVyc1tqXTsKKyAgICAgICAgaWYgKAor
ICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrICE9PSBoYW5kbGVyLmNhbGxiYWNrICYmCisg
ICAgICAgICAgICBjYWxsYmFjayAhPT0gaGFuZGxlci5jYWxsYmFjay5fY2FsbGJhY2sgfHwKKyAg
ICAgICAgICAgICAgY29udGV4dCAmJiBjb250ZXh0ICE9PSBoYW5kbGVyLmNvbnRleHQKKyAgICAg
ICAgKSB7CisgICAgICAgICAgcmVtYWluaW5nLnB1c2goaGFuZGxlcik7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgbGlzdGVuaW5nID0gaGFuZGxlci5saXN0ZW5pbmc7CisgICAgICAgICAg
aWYgKGxpc3RlbmluZyAmJiAtLWxpc3RlbmluZy5jb3VudCA9PT0gMCkgeworICAgICAgICAgICAg
ZGVsZXRlIGxpc3RlbmVyc1tsaXN0ZW5pbmcuaWRdOworICAgICAgICAgICAgZGVsZXRlIGxpc3Rl
bmluZy5saXN0ZW5pbmdUb1tsaXN0ZW5pbmcub2JqSWRdOworICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgfQorCisgICAgICAvLyBVcGRhdGUgdGFpbCBldmVudCBpZiB0aGUgbGlzdCBoYXMg
YW55IGV2ZW50cy4gIE90aGVyd2lzZSwgY2xlYW4gdXAuCisgICAgICBpZiAocmVtYWluaW5nLmxl
bmd0aCkgeworICAgICAgICBldmVudHNbbmFtZV0gPSByZW1haW5pbmc7CisgICAgICB9IGVsc2Ug
eworICAgICAgICBkZWxldGUgZXZlbnRzW25hbWVdOworICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gZXZlbnRzOworICB9OworCisgIC8vIEJpbmQgYW4gZXZlbnQgdG8gb25seSBiZSB0cmlnZ2Vy
ZWQgYSBzaW5nbGUgdGltZS4gQWZ0ZXIgdGhlIGZpcnN0IHRpbWUKKyAgLy8gdGhlIGNhbGxiYWNr
IGlzIGludm9rZWQsIGl0cyBsaXN0ZW5lciB3aWxsIGJlIHJlbW92ZWQuIElmIG11bHRpcGxlIGV2
ZW50cworICAvLyBhcmUgcGFzc2VkIGluIHVzaW5nIHRoZSBzcGFjZS1zZXBhcmF0ZWQgc3ludGF4
LCB0aGUgaGFuZGxlciB3aWxsIGZpcmUKKyAgLy8gb25jZSBmb3IgZWFjaCBldmVudCwgbm90IG9u
Y2UgZm9yIGEgY29tYmluYXRpb24gb2YgYWxsIGV2ZW50cy4KKyAgRXZlbnRzLm9uY2UgPSBmdW5j
dGlvbihuYW1lLCBjYWxsYmFjaywgY29udGV4dCkgeworICAgIC8vIE1hcCB0aGUgZXZlbnQgaW50
byBhIGB7ZXZlbnQ6IG9uY2V9YCBvYmplY3QuCisgICAgdmFyIGV2ZW50cyA9IGV2ZW50c0FwaShv
bmNlTWFwLCB7fSwgbmFtZSwgY2FsbGJhY2ssIF8uYmluZCh0aGlzLm9mZiwgdGhpcykpOworICAg
IGlmICh0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycgJiYgY29udGV4dCA9PSBudWxsKSBjYWxsYmFj
ayA9IHZvaWQgMDsKKyAgICByZXR1cm4gdGhpcy5vbihldmVudHMsIGNhbGxiYWNrLCBjb250ZXh0
KTsKKyAgfTsKKworICAvLyBJbnZlcnNpb24tb2YtY29udHJvbCB2ZXJzaW9ucyBvZiBgb25jZWAu
CisgIEV2ZW50cy5saXN0ZW5Ub09uY2UgPSBmdW5jdGlvbihvYmosIG5hbWUsIGNhbGxiYWNrKSB7
CisgICAgLy8gTWFwIHRoZSBldmVudCBpbnRvIGEgYHtldmVudDogb25jZX1gIG9iamVjdC4KKyAg
ICB2YXIgZXZlbnRzID0gZXZlbnRzQXBpKG9uY2VNYXAsIHt9LCBuYW1lLCBjYWxsYmFjaywgXy5i
aW5kKHRoaXMuc3RvcExpc3RlbmluZywgdGhpcywgb2JqKSk7CisgICAgcmV0dXJuIHRoaXMubGlz
dGVuVG8ob2JqLCBldmVudHMpOworICB9OworCisgIC8vIFJlZHVjZXMgdGhlIGV2ZW50IGNhbGxi
YWNrcyBpbnRvIGEgbWFwIG9mIGB7ZXZlbnQ6IG9uY2VXcmFwcGVyfWAuCisgIC8vIGBvZmZlcmAg
dW5iaW5kcyB0aGUgYG9uY2VXcmFwcGVyYCBhZnRlciBpdCBoYXMgYmVlbiBjYWxsZWQuCisgIHZh
ciBvbmNlTWFwID0gZnVuY3Rpb24obWFwLCBuYW1lLCBjYWxsYmFjaywgb2ZmZXIpIHsKKyAgICBp
ZiAoY2FsbGJhY2spIHsKKyAgICAgIHZhciBvbmNlID0gbWFwW25hbWVdID0gXy5vbmNlKGZ1bmN0
aW9uKCkgeworICAgICAgICBvZmZlcihuYW1lLCBvbmNlKTsKKyAgICAgICAgY2FsbGJhY2suYXBw
bHkodGhpcywgYXJndW1lbnRzKTsKKyAgICAgIH0pOworICAgICAgb25jZS5fY2FsbGJhY2sgPSBj
YWxsYmFjazsKKyAgICB9CisgICAgcmV0dXJuIG1hcDsKKyAgfTsKKworICAvLyBUcmlnZ2VyIG9u
ZSBvciBtYW55IGV2ZW50cywgZmlyaW5nIGFsbCBib3VuZCBjYWxsYmFja3MuIENhbGxiYWNrcyBh
cmUKKyAgLy8gcGFzc2VkIHRoZSBzYW1lIGFyZ3VtZW50cyBhcyBgdHJpZ2dlcmAgaXMsIGFwYXJ0
IGZyb20gdGhlIGV2ZW50IG5hbWUKKyAgLy8gKHVubGVzcyB5b3UncmUgbGlzdGVuaW5nIG9uIGAi
YWxsImAsIHdoaWNoIHdpbGwgY2F1c2UgeW91ciBjYWxsYmFjayB0bworICAvLyByZWNlaXZlIHRo
ZSB0cnVlIG5hbWUgb2YgdGhlIGV2ZW50IGFzIHRoZSBmaXJzdCBhcmd1bWVudCkuCisgIEV2ZW50
cy50cmlnZ2VyID0gZnVuY3Rpb24obmFtZSkgeworICAgIGlmICghdGhpcy5fZXZlbnRzKSByZXR1
cm4gdGhpczsKKworICAgIHZhciBsZW5ndGggPSBNYXRoLm1heCgwLCBhcmd1bWVudHMubGVuZ3Ro
IC0gMSk7CisgICAgdmFyIGFyZ3MgPSBBcnJheShsZW5ndGgpOworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIGFyZ3NbaV0gPSBhcmd1bWVudHNbaSArIDFdOworCisgICAgZXZl
bnRzQXBpKHRyaWdnZXJBcGksIHRoaXMuX2V2ZW50cywgbmFtZSwgdm9pZCAwLCBhcmdzKTsKKyAg
ICByZXR1cm4gdGhpczsKKyAgfTsKKworICAvLyBIYW5kbGVzIHRyaWdnZXJpbmcgdGhlIGFwcHJv
cHJpYXRlIGV2ZW50IGNhbGxiYWNrcy4KKyAgdmFyIHRyaWdnZXJBcGkgPSBmdW5jdGlvbihvYmpF
dmVudHMsIG5hbWUsIGNhbGxiYWNrLCBhcmdzKSB7CisgICAgaWYgKG9iakV2ZW50cykgeworICAg
ICAgdmFyIGV2ZW50cyA9IG9iakV2ZW50c1tuYW1lXTsKKyAgICAgIHZhciBhbGxFdmVudHMgPSBv
YmpFdmVudHMuYWxsOworICAgICAgaWYgKGV2ZW50cyAmJiBhbGxFdmVudHMpIGFsbEV2ZW50cyA9
IGFsbEV2ZW50cy5zbGljZSgpOworICAgICAgaWYgKGV2ZW50cykgdHJpZ2dlckV2ZW50cyhldmVu
dHMsIGFyZ3MpOworICAgICAgaWYgKGFsbEV2ZW50cykgdHJpZ2dlckV2ZW50cyhhbGxFdmVudHMs
IFtuYW1lXS5jb25jYXQoYXJncykpOworICAgIH0KKyAgICByZXR1cm4gb2JqRXZlbnRzOworICB9
OworCisgIC8vIEEgZGlmZmljdWx0LXRvLWJlbGlldmUsIGJ1dCBvcHRpbWl6ZWQgaW50ZXJuYWwg
ZGlzcGF0Y2ggZnVuY3Rpb24gZm9yCisgIC8vIHRyaWdnZXJpbmcgZXZlbnRzLiBUcmllcyB0byBr
ZWVwIHRoZSB1c3VhbCBjYXNlcyBzcGVlZHkgKG1vc3QgaW50ZXJuYWwKKyAgLy8gQmFja2JvbmUg
ZXZlbnRzIGhhdmUgMyBhcmd1bWVudHMpLgorICB2YXIgdHJpZ2dlckV2ZW50cyA9IGZ1bmN0aW9u
KGV2ZW50cywgYXJncykgeworICAgIHZhciBldiwgaSA9IC0xLCBsID0gZXZlbnRzLmxlbmd0aCwg
YTEgPSBhcmdzWzBdLCBhMiA9IGFyZ3NbMV0sIGEzID0gYXJnc1syXTsKKyAgICBzd2l0Y2ggKGFy
Z3MubGVuZ3RoKSB7CisgICAgICBjYXNlIDA6IHdoaWxlICgrK2kgPCBsKSAoZXYgPSBldmVudHNb
aV0pLmNhbGxiYWNrLmNhbGwoZXYuY3R4KTsgcmV0dXJuOworICAgICAgY2FzZSAxOiB3aGlsZSAo
KytpIDwgbCkgKGV2ID0gZXZlbnRzW2ldKS5jYWxsYmFjay5jYWxsKGV2LmN0eCwgYTEpOyByZXR1
cm47CisgICAgICBjYXNlIDI6IHdoaWxlICgrK2kgPCBsKSAoZXYgPSBldmVudHNbaV0pLmNhbGxi
YWNrLmNhbGwoZXYuY3R4LCBhMSwgYTIpOyByZXR1cm47CisgICAgICBjYXNlIDM6IHdoaWxlICgr
K2kgPCBsKSAoZXYgPSBldmVudHNbaV0pLmNhbGxiYWNrLmNhbGwoZXYuY3R4LCBhMSwgYTIsIGEz
KTsgcmV0dXJuOworICAgICAgZGVmYXVsdDogd2hpbGUgKCsraSA8IGwpIChldiA9IGV2ZW50c1tp
XSkuY2FsbGJhY2suYXBwbHkoZXYuY3R4LCBhcmdzKTsgcmV0dXJuOworICAgIH0KKyAgfTsKKwor
ICAvLyBBbGlhc2VzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKyAgRXZlbnRzLmJpbmQg
ICA9IEV2ZW50cy5vbjsKKyAgRXZlbnRzLnVuYmluZCA9IEV2ZW50cy5vZmY7CisKKyAgLy8gQWxs
b3cgdGhlIGBCYWNrYm9uZWAgb2JqZWN0IHRvIHNlcnZlIGFzIGEgZ2xvYmFsIGV2ZW50IGJ1cywg
Zm9yIGZvbGtzIHdobworICAvLyB3YW50IGdsb2JhbCAicHVic3ViIiBpbiBhIGNvbnZlbmllbnQg
cGxhY2UuCisgIF8uZXh0ZW5kKEJhY2tib25lLCBFdmVudHMpOworCisgIC8vIEJhY2tib25lLk1v
ZGVsCisgIC8vIC0tLS0tLS0tLS0tLS0tCisKKyAgLy8gQmFja2JvbmUgKipNb2RlbHMqKiBhcmUg
dGhlIGJhc2ljIGRhdGEgb2JqZWN0IGluIHRoZSBmcmFtZXdvcmsgLS0KKyAgLy8gZnJlcXVlbnRs
eSByZXByZXNlbnRpbmcgYSByb3cgaW4gYSB0YWJsZSBpbiBhIGRhdGFiYXNlIG9uIHlvdXIgc2Vy
dmVyLgorICAvLyBBIGRpc2NyZXRlIGNodW5rIG9mIGRhdGEgYW5kIGEgYnVuY2ggb2YgdXNlZnVs
LCByZWxhdGVkIG1ldGhvZHMgZm9yCisgIC8vIHBlcmZvcm1pbmcgY29tcHV0YXRpb25zIGFuZCB0
cmFuc2Zvcm1hdGlvbnMgb24gdGhhdCBkYXRhLgorCisgIC8vIENyZWF0ZSBhIG5ldyBtb2RlbCB3
aXRoIHRoZSBzcGVjaWZpZWQgYXR0cmlidXRlcy4gQSBjbGllbnQgaWQgKGBjaWRgKQorICAvLyBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBhbmQgYXNzaWduZWQgZm9yIHlvdS4KKyAgdmFyIE1v
ZGVsID0gQmFja2JvbmUuTW9kZWwgPSBmdW5jdGlvbihhdHRyaWJ1dGVzLCBvcHRpb25zKSB7Cisg
ICAgdmFyIGF0dHJzID0gYXR0cmlidXRlcyB8fCB7fTsKKyAgICBvcHRpb25zIHx8IChvcHRpb25z
ID0ge30pOworICAgIHRoaXMuY2lkID0gXy51bmlxdWVJZCh0aGlzLmNpZFByZWZpeCk7CisgICAg
dGhpcy5hdHRyaWJ1dGVzID0ge307CisgICAgaWYgKG9wdGlvbnMuY29sbGVjdGlvbikgdGhpcy5j
b2xsZWN0aW9uID0gb3B0aW9ucy5jb2xsZWN0aW9uOworICAgIGlmIChvcHRpb25zLnBhcnNlKSBh
dHRycyA9IHRoaXMucGFyc2UoYXR0cnMsIG9wdGlvbnMpIHx8IHt9OworICAgIHZhciBkZWZhdWx0
cyA9IF8ucmVzdWx0KHRoaXMsICdkZWZhdWx0cycpOworICAgIGF0dHJzID0gXy5kZWZhdWx0cyhf
LmV4dGVuZCh7fSwgZGVmYXVsdHMsIGF0dHJzKSwgZGVmYXVsdHMpOworICAgIHRoaXMuc2V0KGF0
dHJzLCBvcHRpb25zKTsKKyAgICB0aGlzLmNoYW5nZWQgPSB7fTsKKyAgICB0aGlzLmluaXRpYWxp
emUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgfTsKKworICAvLyBBdHRhY2ggYWxsIGluaGVy
aXRhYmxlIG1ldGhvZHMgdG8gdGhlIE1vZGVsIHByb3RvdHlwZS4KKyAgXy5leHRlbmQoTW9kZWwu
cHJvdG90eXBlLCBFdmVudHMsIHsKKworICAgIC8vIEEgaGFzaCBvZiBhdHRyaWJ1dGVzIHdob3Nl
IGN1cnJlbnQgYW5kIHByZXZpb3VzIHZhbHVlIGRpZmZlci4KKyAgICBjaGFuZ2VkOiBudWxsLAor
CisgICAgLy8gVGhlIHZhbHVlIHJldHVybmVkIGR1cmluZyB0aGUgbGFzdCBmYWlsZWQgdmFsaWRh
dGlvbi4KKyAgICB2YWxpZGF0aW9uRXJyb3I6IG51bGwsCisKKyAgICAvLyBUaGUgZGVmYXVsdCBu
YW1lIGZvciB0aGUgSlNPTiBgaWRgIGF0dHJpYnV0ZSBpcyBgImlkImAuIE1vbmdvREIgYW5kCisg
ICAgLy8gQ291Y2hEQiB1c2VycyBtYXkgd2FudCB0byBzZXQgdGhpcyB0byBgIl9pZCJgLgorICAg
IGlkQXR0cmlidXRlOiAnaWQnLAorCisgICAgLy8gVGhlIHByZWZpeCBpcyB1c2VkIHRvIGNyZWF0
ZSB0aGUgY2xpZW50IGlkIHdoaWNoIGlzIHVzZWQgdG8gaWRlbnRpZnkgbW9kZWxzIGxvY2FsbHku
CisgICAgLy8gWW91IG1heSB3YW50IHRvIG92ZXJyaWRlIHRoaXMgaWYgeW91J3JlIGV4cGVyaWVu
Y2luZyBuYW1lIGNsYXNoZXMgd2l0aCBtb2RlbCBpZHMuCisgICAgY2lkUHJlZml4OiAnYycsCisK
KyAgICAvLyBJbml0aWFsaXplIGlzIGFuIGVtcHR5IGZ1bmN0aW9uIGJ5IGRlZmF1bHQuIE92ZXJy
aWRlIGl0IHdpdGggeW91ciBvd24KKyAgICAvLyBpbml0aWFsaXphdGlvbiBsb2dpYy4KKyAgICBp
bml0aWFsaXplOiBmdW5jdGlvbigpe30sCisKKyAgICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBt
b2RlbCdzIGBhdHRyaWJ1dGVzYCBvYmplY3QuCisgICAgdG9KU09OOiBmdW5jdGlvbihvcHRpb25z
KSB7CisgICAgICByZXR1cm4gXy5jbG9uZSh0aGlzLmF0dHJpYnV0ZXMpOworICAgIH0sCisKKyAg
ICAvLyBQcm94eSBgQmFja2JvbmUuc3luY2AgYnkgZGVmYXVsdCAtLSBidXQgb3ZlcnJpZGUgdGhp
cyBpZiB5b3UgbmVlZAorICAgIC8vIGN1c3RvbSBzeW5jaW5nIHNlbWFudGljcyBmb3IgKnRoaXMq
IHBhcnRpY3VsYXIgbW9kZWwuCisgICAgc3luYzogZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4g
QmFja2JvbmUuc3luYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgIH0sCisKKyAgICAvLyBH
ZXQgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZS4KKyAgICBnZXQ6IGZ1bmN0aW9uKGF0dHIpIHsK
KyAgICAgIHJldHVybiB0aGlzLmF0dHJpYnV0ZXNbYXR0cl07CisgICAgfSwKKworICAgIC8vIEdl
dCB0aGUgSFRNTC1lc2NhcGVkIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZS4KKyAgICBlc2NhcGU6IGZ1
bmN0aW9uKGF0dHIpIHsKKyAgICAgIHJldHVybiBfLmVzY2FwZSh0aGlzLmdldChhdHRyKSk7Cisg
ICAgfSwKKworICAgIC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBhdHRyaWJ1dGUgY29udGFpbnMg
YSB2YWx1ZSB0aGF0IGlzIG5vdCBudWxsCisgICAgLy8gb3IgdW5kZWZpbmVkLgorICAgIGhhczog
ZnVuY3Rpb24oYXR0cikgeworICAgICAgcmV0dXJuIHRoaXMuZ2V0KGF0dHIpICE9IG51bGw7Cisg
ICAgfSwKKworICAgIC8vIFNwZWNpYWwtY2FzZWQgcHJveHkgdG8gdW5kZXJzY29yZSdzIGBfLm1h
dGNoZXNgIG1ldGhvZC4KKyAgICBtYXRjaGVzOiBmdW5jdGlvbihhdHRycykgeworICAgICAgcmV0
dXJuICEhXy5pdGVyYXRlZShhdHRycywgdGhpcykodGhpcy5hdHRyaWJ1dGVzKTsKKyAgICB9LAor
CisgICAgLy8gU2V0IGEgaGFzaCBvZiBtb2RlbCBhdHRyaWJ1dGVzIG9uIHRoZSBvYmplY3QsIGZp
cmluZyBgImNoYW5nZSJgLiBUaGlzIGlzCisgICAgLy8gdGhlIGNvcmUgcHJpbWl0aXZlIG9wZXJh
dGlvbiBvZiBhIG1vZGVsLCB1cGRhdGluZyB0aGUgZGF0YSBhbmQgbm90aWZ5aW5nCisgICAgLy8g
YW55b25lIHdobyBuZWVkcyB0byBrbm93IGFib3V0IHRoZSBjaGFuZ2UgaW4gc3RhdGUuIFRoZSBo
ZWFydCBvZiB0aGUgYmVhc3QuCisgICAgc2V0OiBmdW5jdGlvbihrZXksIHZhbCwgb3B0aW9ucykg
eworICAgICAgaWYgKGtleSA9PSBudWxsKSByZXR1cm4gdGhpczsKKworICAgICAgLy8gSGFuZGxl
IGJvdGggYCJrZXkiLCB2YWx1ZWAgYW5kIGB7a2V5OiB2YWx1ZX1gIC1zdHlsZSBhcmd1bWVudHMu
CisgICAgICB2YXIgYXR0cnM7CisgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHsK
KyAgICAgICAgYXR0cnMgPSBrZXk7CisgICAgICAgIG9wdGlvbnMgPSB2YWw7CisgICAgICB9IGVs
c2UgeworICAgICAgICAoYXR0cnMgPSB7fSlba2V5XSA9IHZhbDsKKyAgICAgIH0KKworICAgICAg
b3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTsKKworICAgICAgLy8gUnVuIHZhbGlkYXRpb24uCisg
ICAgICBpZiAoIXRoaXMuX3ZhbGlkYXRlKGF0dHJzLCBvcHRpb25zKSkgcmV0dXJuIGZhbHNlOwor
CisgICAgICAvLyBFeHRyYWN0IGF0dHJpYnV0ZXMgYW5kIG9wdGlvbnMuCisgICAgICB2YXIgdW5z
ZXQgICAgICA9IG9wdGlvbnMudW5zZXQ7CisgICAgICB2YXIgc2lsZW50ICAgICA9IG9wdGlvbnMu
c2lsZW50OworICAgICAgdmFyIGNoYW5nZXMgICAgPSBbXTsKKyAgICAgIHZhciBjaGFuZ2luZyAg
ID0gdGhpcy5fY2hhbmdpbmc7CisgICAgICB0aGlzLl9jaGFuZ2luZyA9IHRydWU7CisKKyAgICAg
IGlmICghY2hhbmdpbmcpIHsKKyAgICAgICAgdGhpcy5fcHJldmlvdXNBdHRyaWJ1dGVzID0gXy5j
bG9uZSh0aGlzLmF0dHJpYnV0ZXMpOworICAgICAgICB0aGlzLmNoYW5nZWQgPSB7fTsKKyAgICAg
IH0KKworICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmF0dHJpYnV0ZXM7CisgICAgICB2YXIgY2hh
bmdlZCA9IHRoaXMuY2hhbmdlZDsKKyAgICAgIHZhciBwcmV2ICAgID0gdGhpcy5fcHJldmlvdXNB
dHRyaWJ1dGVzOworCisgICAgICAvLyBGb3IgZWFjaCBgc2V0YCBhdHRyaWJ1dGUsIHVwZGF0ZSBv
ciBkZWxldGUgdGhlIGN1cnJlbnQgdmFsdWUuCisgICAgICBmb3IgKHZhciBhdHRyIGluIGF0dHJz
KSB7CisgICAgICAgIHZhbCA9IGF0dHJzW2F0dHJdOworICAgICAgICBpZiAoIV8uaXNFcXVhbChj
dXJyZW50W2F0dHJdLCB2YWwpKSBjaGFuZ2VzLnB1c2goYXR0cik7CisgICAgICAgIGlmICghXy5p
c0VxdWFsKHByZXZbYXR0cl0sIHZhbCkpIHsKKyAgICAgICAgICBjaGFuZ2VkW2F0dHJdID0gdmFs
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGRlbGV0ZSBjaGFuZ2VkW2F0dHJdOworICAg
ICAgICB9CisgICAgICAgIHVuc2V0ID8gZGVsZXRlIGN1cnJlbnRbYXR0cl0gOiBjdXJyZW50W2F0
dHJdID0gdmFsOworICAgICAgfQorCisgICAgICAvLyBVcGRhdGUgdGhlIGBpZGAuCisgICAgICBp
ZiAodGhpcy5pZEF0dHJpYnV0ZSBpbiBhdHRycykgdGhpcy5pZCA9IHRoaXMuZ2V0KHRoaXMuaWRB
dHRyaWJ1dGUpOworCisgICAgICAvLyBUcmlnZ2VyIGFsbCByZWxldmFudCBhdHRyaWJ1dGUgY2hh
bmdlcy4KKyAgICAgIGlmICghc2lsZW50KSB7CisgICAgICAgIGlmIChjaGFuZ2VzLmxlbmd0aCkg
dGhpcy5fcGVuZGluZyA9IG9wdGlvbnM7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hh
bmdlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgIHRoaXMudHJpZ2dlcignY2hhbmdlOicgKyBj
aGFuZ2VzW2ldLCB0aGlzLCBjdXJyZW50W2NoYW5nZXNbaV1dLCBvcHRpb25zKTsKKyAgICAgICAg
fQorICAgICAgfQorCisgICAgICAvLyBZb3UgbWlnaHQgYmUgd29uZGVyaW5nIHdoeSB0aGVyZSdz
IGEgYHdoaWxlYCBsb29wIGhlcmUuIENoYW5nZXMgY2FuCisgICAgICAvLyBiZSByZWN1cnNpdmVs
eSBuZXN0ZWQgd2l0aGluIGAiY2hhbmdlImAgZXZlbnRzLgorICAgICAgaWYgKGNoYW5naW5nKSBy
ZXR1cm4gdGhpczsKKyAgICAgIGlmICghc2lsZW50KSB7CisgICAgICAgIHdoaWxlICh0aGlzLl9w
ZW5kaW5nKSB7CisgICAgICAgICAgb3B0aW9ucyA9IHRoaXMuX3BlbmRpbmc7CisgICAgICAgICAg
dGhpcy5fcGVuZGluZyA9IGZhbHNlOworICAgICAgICAgIHRoaXMudHJpZ2dlcignY2hhbmdlJywg
dGhpcywgb3B0aW9ucyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHRoaXMuX3BlbmRpbmcg
PSBmYWxzZTsKKyAgICAgIHRoaXMuX2NoYW5naW5nID0gZmFsc2U7CisgICAgICByZXR1cm4gdGhp
czsKKyAgICB9LAorCisgICAgLy8gUmVtb3ZlIGFuIGF0dHJpYnV0ZSBmcm9tIHRoZSBtb2RlbCwg
ZmlyaW5nIGAiY2hhbmdlImAuIGB1bnNldGAgaXMgYSBub29wCisgICAgLy8gaWYgdGhlIGF0dHJp
YnV0ZSBkb2Vzbid0IGV4aXN0LgorICAgIHVuc2V0OiBmdW5jdGlvbihhdHRyLCBvcHRpb25zKSB7
CisgICAgICByZXR1cm4gdGhpcy5zZXQoYXR0ciwgdm9pZCAwLCBfLmV4dGVuZCh7fSwgb3B0aW9u
cywge3Vuc2V0OiB0cnVlfSkpOworICAgIH0sCisKKyAgICAvLyBDbGVhciBhbGwgYXR0cmlidXRl
cyBvbiB0aGUgbW9kZWwsIGZpcmluZyBgImNoYW5nZSJgLgorICAgIGNsZWFyOiBmdW5jdGlvbihv
cHRpb25zKSB7CisgICAgICB2YXIgYXR0cnMgPSB7fTsKKyAgICAgIGZvciAodmFyIGtleSBpbiB0
aGlzLmF0dHJpYnV0ZXMpIGF0dHJzW2tleV0gPSB2b2lkIDA7CisgICAgICByZXR1cm4gdGhpcy5z
ZXQoYXR0cnMsIF8uZXh0ZW5kKHt9LCBvcHRpb25zLCB7dW5zZXQ6IHRydWV9KSk7CisgICAgfSwK
KworICAgIC8vIERldGVybWluZSBpZiB0aGUgbW9kZWwgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxh
c3QgYCJjaGFuZ2UiYCBldmVudC4KKyAgICAvLyBJZiB5b3Ugc3BlY2lmeSBhbiBhdHRyaWJ1dGUg
bmFtZSwgZGV0ZXJtaW5lIGlmIHRoYXQgYXR0cmlidXRlIGhhcyBjaGFuZ2VkLgorICAgIGhhc0No
YW5nZWQ6IGZ1bmN0aW9uKGF0dHIpIHsKKyAgICAgIGlmIChhdHRyID09IG51bGwpIHJldHVybiAh
Xy5pc0VtcHR5KHRoaXMuY2hhbmdlZCk7CisgICAgICByZXR1cm4gXy5oYXModGhpcy5jaGFuZ2Vk
LCBhdHRyKTsKKyAgICB9LAorCisgICAgLy8gUmV0dXJuIGFuIG9iamVjdCBjb250YWluaW5nIGFs
bCB0aGUgYXR0cmlidXRlcyB0aGF0IGhhdmUgY2hhbmdlZCwgb3IKKyAgICAvLyBmYWxzZSBpZiB0
aGVyZSBhcmUgbm8gY2hhbmdlZCBhdHRyaWJ1dGVzLiBVc2VmdWwgZm9yIGRldGVybWluaW5nIHdo
YXQKKyAgICAvLyBwYXJ0cyBvZiBhIHZpZXcgbmVlZCB0byBiZSB1cGRhdGVkIGFuZC9vciB3aGF0
IGF0dHJpYnV0ZXMgbmVlZCB0byBiZQorICAgIC8vIHBlcnNpc3RlZCB0byB0aGUgc2VydmVyLiBV
bnNldCBhdHRyaWJ1dGVzIHdpbGwgYmUgc2V0IHRvIHVuZGVmaW5lZC4KKyAgICAvLyBZb3UgY2Fu
IGFsc28gcGFzcyBhbiBhdHRyaWJ1dGVzIG9iamVjdCB0byBkaWZmIGFnYWluc3QgdGhlIG1vZGVs
LAorICAgIC8vIGRldGVybWluaW5nIGlmIHRoZXJlICp3b3VsZCBiZSogYSBjaGFuZ2UuCisgICAg
Y2hhbmdlZEF0dHJpYnV0ZXM6IGZ1bmN0aW9uKGRpZmYpIHsKKyAgICAgIGlmICghZGlmZikgcmV0
dXJuIHRoaXMuaGFzQ2hhbmdlZCgpID8gXy5jbG9uZSh0aGlzLmNoYW5nZWQpIDogZmFsc2U7Cisg
ICAgICB2YXIgb2xkID0gdGhpcy5fY2hhbmdpbmcgPyB0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMg
OiB0aGlzLmF0dHJpYnV0ZXM7CisgICAgICB2YXIgY2hhbmdlZCA9IHt9OworICAgICAgZm9yICh2
YXIgYXR0ciBpbiBkaWZmKSB7CisgICAgICAgIHZhciB2YWwgPSBkaWZmW2F0dHJdOworICAgICAg
ICBpZiAoXy5pc0VxdWFsKG9sZFthdHRyXSwgdmFsKSkgY29udGludWU7CisgICAgICAgIGNoYW5n
ZWRbYXR0cl0gPSB2YWw7CisgICAgICB9CisgICAgICByZXR1cm4gXy5zaXplKGNoYW5nZWQpID8g
Y2hhbmdlZCA6IGZhbHNlOworICAgIH0sCisKKyAgICAvLyBHZXQgdGhlIHByZXZpb3VzIHZhbHVl
IG9mIGFuIGF0dHJpYnV0ZSwgcmVjb3JkZWQgYXQgdGhlIHRpbWUgdGhlIGxhc3QKKyAgICAvLyBg
ImNoYW5nZSJgIGV2ZW50IHdhcyBmaXJlZC4KKyAgICBwcmV2aW91czogZnVuY3Rpb24oYXR0cikg
eworICAgICAgaWYgKGF0dHIgPT0gbnVsbCB8fCAhdGhpcy5fcHJldmlvdXNBdHRyaWJ1dGVzKSBy
ZXR1cm4gbnVsbDsKKyAgICAgIHJldHVybiB0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXNbYXR0cl07
CisgICAgfSwKKworICAgIC8vIEdldCBhbGwgb2YgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIG1vZGVs
IGF0IHRoZSB0aW1lIG9mIHRoZSBwcmV2aW91cworICAgIC8vIGAiY2hhbmdlImAgZXZlbnQuCisg
ICAgcHJldmlvdXNBdHRyaWJ1dGVzOiBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiBfLmNsb25l
KHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcyk7CisgICAgfSwKKworICAgIC8vIEZldGNoIHRoZSBt
b2RlbCBmcm9tIHRoZSBzZXJ2ZXIsIG1lcmdpbmcgdGhlIHJlc3BvbnNlIHdpdGggdGhlIG1vZGVs
J3MKKyAgICAvLyBsb2NhbCBhdHRyaWJ1dGVzLiBBbnkgY2hhbmdlZCBhdHRyaWJ1dGVzIHdpbGwg
dHJpZ2dlciBhICJjaGFuZ2UiIGV2ZW50LgorICAgIGZldGNoOiBmdW5jdGlvbihvcHRpb25zKSB7
CisgICAgICBvcHRpb25zID0gXy5leHRlbmQoe3BhcnNlOiB0cnVlfSwgb3B0aW9ucyk7CisgICAg
ICB2YXIgbW9kZWwgPSB0aGlzOworICAgICAgdmFyIHN1Y2Nlc3MgPSBvcHRpb25zLnN1Y2Nlc3M7
CisgICAgICBvcHRpb25zLnN1Y2Nlc3MgPSBmdW5jdGlvbihyZXNwKSB7CisgICAgICAgIHZhciBz
ZXJ2ZXJBdHRycyA9IG9wdGlvbnMucGFyc2UgPyBtb2RlbC5wYXJzZShyZXNwLCBvcHRpb25zKSA6
IHJlc3A7CisgICAgICAgIGlmICghbW9kZWwuc2V0KHNlcnZlckF0dHJzLCBvcHRpb25zKSkgcmV0
dXJuIGZhbHNlOworICAgICAgICBpZiAoc3VjY2Vzcykgc3VjY2Vzcy5jYWxsKG9wdGlvbnMuY29u
dGV4dCwgbW9kZWwsIHJlc3AsIG9wdGlvbnMpOworICAgICAgICBtb2RlbC50cmlnZ2VyKCdzeW5j
JywgbW9kZWwsIHJlc3AsIG9wdGlvbnMpOworICAgICAgfTsKKyAgICAgIHdyYXBFcnJvcih0aGlz
LCBvcHRpb25zKTsKKyAgICAgIHJldHVybiB0aGlzLnN5bmMoJ3JlYWQnLCB0aGlzLCBvcHRpb25z
KTsKKyAgICB9LAorCisgICAgLy8gU2V0IGEgaGFzaCBvZiBtb2RlbCBhdHRyaWJ1dGVzLCBhbmQg
c3luYyB0aGUgbW9kZWwgdG8gdGhlIHNlcnZlci4KKyAgICAvLyBJZiB0aGUgc2VydmVyIHJldHVy
bnMgYW4gYXR0cmlidXRlcyBoYXNoIHRoYXQgZGlmZmVycywgdGhlIG1vZGVsJ3MKKyAgICAvLyBz
dGF0ZSB3aWxsIGJlIGBzZXRgIGFnYWluLgorICAgIHNhdmU6IGZ1bmN0aW9uKGtleSwgdmFsLCBv
cHRpb25zKSB7CisgICAgICAvLyBIYW5kbGUgYm90aCBgImtleSIsIHZhbHVlYCBhbmQgYHtrZXk6
IHZhbHVlfWAgLXN0eWxlIGFyZ3VtZW50cy4KKyAgICAgIHZhciBhdHRyczsKKyAgICAgIGlmIChr
ZXkgPT0gbnVsbCB8fCB0eXBlb2Yga2V5ID09PSAnb2JqZWN0JykgeworICAgICAgICBhdHRycyA9
IGtleTsKKyAgICAgICAgb3B0aW9ucyA9IHZhbDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIChh
dHRycyA9IHt9KVtrZXldID0gdmFsOworICAgICAgfQorCisgICAgICBvcHRpb25zID0gXy5leHRl
bmQoe3ZhbGlkYXRlOiB0cnVlLCBwYXJzZTogdHJ1ZX0sIG9wdGlvbnMpOworICAgICAgdmFyIHdh
aXQgPSBvcHRpb25zLndhaXQ7CisKKyAgICAgIC8vIElmIHdlJ3JlIG5vdCB3YWl0aW5nIGFuZCBh
dHRyaWJ1dGVzIGV4aXN0LCBzYXZlIGFjdHMgYXMKKyAgICAgIC8vIGBzZXQoYXR0cikuc2F2ZShu
dWxsLCBvcHRzKWAgd2l0aCB2YWxpZGF0aW9uLiBPdGhlcndpc2UsIGNoZWNrIGlmCisgICAgICAv
LyB0aGUgbW9kZWwgd2lsbCBiZSB2YWxpZCB3aGVuIHRoZSBhdHRyaWJ1dGVzLCBpZiBhbnksIGFy
ZSBzZXQuCisgICAgICBpZiAoYXR0cnMgJiYgIXdhaXQpIHsKKyAgICAgICAgaWYgKCF0aGlzLnNl
dChhdHRycywgb3B0aW9ucykpIHJldHVybiBmYWxzZTsKKyAgICAgIH0gZWxzZSBpZiAoIXRoaXMu
X3ZhbGlkYXRlKGF0dHJzLCBvcHRpb25zKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICB9CisKKyAgICAgIC8vIEFmdGVyIGEgc3VjY2Vzc2Z1bCBzZXJ2ZXItc2lkZSBzYXZlLCB0aGUg
Y2xpZW50IGlzIChvcHRpb25hbGx5KQorICAgICAgLy8gdXBkYXRlZCB3aXRoIHRoZSBzZXJ2ZXIt
c2lkZSBzdGF0ZS4KKyAgICAgIHZhciBtb2RlbCA9IHRoaXM7CisgICAgICB2YXIgc3VjY2VzcyA9
IG9wdGlvbnMuc3VjY2VzczsKKyAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVz
OworICAgICAgb3B0aW9ucy5zdWNjZXNzID0gZnVuY3Rpb24ocmVzcCkgeworICAgICAgICAvLyBF
bnN1cmUgYXR0cmlidXRlcyBhcmUgcmVzdG9yZWQgZHVyaW5nIHN5bmNocm9ub3VzIHNhdmVzLgor
ICAgICAgICBtb2RlbC5hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKKyAgICAgICAgdmFyIHNlcnZl
ckF0dHJzID0gb3B0aW9ucy5wYXJzZSA/IG1vZGVsLnBhcnNlKHJlc3AsIG9wdGlvbnMpIDogcmVz
cDsKKyAgICAgICAgaWYgKHdhaXQpIHNlcnZlckF0dHJzID0gXy5leHRlbmQoe30sIGF0dHJzLCBz
ZXJ2ZXJBdHRycyk7CisgICAgICAgIGlmIChzZXJ2ZXJBdHRycyAmJiAhbW9kZWwuc2V0KHNlcnZl
ckF0dHJzLCBvcHRpb25zKSkgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoc3VjY2Vzcykgc3Vj
Y2Vzcy5jYWxsKG9wdGlvbnMuY29udGV4dCwgbW9kZWwsIHJlc3AsIG9wdGlvbnMpOworICAgICAg
ICBtb2RlbC50cmlnZ2VyKCdzeW5jJywgbW9kZWwsIHJlc3AsIG9wdGlvbnMpOworICAgICAgfTsK
KyAgICAgIHdyYXBFcnJvcih0aGlzLCBvcHRpb25zKTsKKworICAgICAgLy8gU2V0IHRlbXBvcmFy
eSBhdHRyaWJ1dGVzIGlmIGB7d2FpdDogdHJ1ZX1gIHRvIHByb3Blcmx5IGZpbmQgbmV3IGlkcy4K
KyAgICAgIGlmIChhdHRycyAmJiB3YWl0KSB0aGlzLmF0dHJpYnV0ZXMgPSBfLmV4dGVuZCh7fSwg
YXR0cmlidXRlcywgYXR0cnMpOworCisgICAgICB2YXIgbWV0aG9kID0gdGhpcy5pc05ldygpID8g
J2NyZWF0ZScgOiAob3B0aW9ucy5wYXRjaCA/ICdwYXRjaCcgOiAndXBkYXRlJyk7CisgICAgICBp
ZiAobWV0aG9kID09PSAncGF0Y2gnICYmICFvcHRpb25zLmF0dHJzKSBvcHRpb25zLmF0dHJzID0g
YXR0cnM7CisgICAgICB2YXIgeGhyID0gdGhpcy5zeW5jKG1ldGhvZCwgdGhpcywgb3B0aW9ucyk7
CisKKyAgICAgIC8vIFJlc3RvcmUgYXR0cmlidXRlcy4KKyAgICAgIHRoaXMuYXR0cmlidXRlcyA9
IGF0dHJpYnV0ZXM7CisKKyAgICAgIHJldHVybiB4aHI7CisgICAgfSwKKworICAgIC8vIERlc3Ry
b3kgdGhpcyBtb2RlbCBvbiB0aGUgc2VydmVyIGlmIGl0IHdhcyBhbHJlYWR5IHBlcnNpc3RlZC4K
KyAgICAvLyBPcHRpbWlzdGljYWxseSByZW1vdmVzIHRoZSBtb2RlbCBmcm9tIGl0cyBjb2xsZWN0
aW9uLCBpZiBpdCBoYXMgb25lLgorICAgIC8vIElmIGB3YWl0OiB0cnVlYCBpcyBwYXNzZWQsIHdh
aXRzIGZvciB0aGUgc2VydmVyIHRvIHJlc3BvbmQgYmVmb3JlIHJlbW92YWwuCisgICAgZGVzdHJv
eTogZnVuY3Rpb24ob3B0aW9ucykgeworICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgPyBfLmNsb25l
KG9wdGlvbnMpIDoge307CisgICAgICB2YXIgbW9kZWwgPSB0aGlzOworICAgICAgdmFyIHN1Y2Nl
c3MgPSBvcHRpb25zLnN1Y2Nlc3M7CisgICAgICB2YXIgd2FpdCA9IG9wdGlvbnMud2FpdDsKKwor
ICAgICAgdmFyIGRlc3Ryb3kgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgbW9kZWwuc3RvcExpc3Rl
bmluZygpOworICAgICAgICBtb2RlbC50cmlnZ2VyKCdkZXN0cm95JywgbW9kZWwsIG1vZGVsLmNv
bGxlY3Rpb24sIG9wdGlvbnMpOworICAgICAgfTsKKworICAgICAgb3B0aW9ucy5zdWNjZXNzID0g
ZnVuY3Rpb24ocmVzcCkgeworICAgICAgICBpZiAod2FpdCkgZGVzdHJveSgpOworICAgICAgICBp
ZiAoc3VjY2Vzcykgc3VjY2Vzcy5jYWxsKG9wdGlvbnMuY29udGV4dCwgbW9kZWwsIHJlc3AsIG9w
dGlvbnMpOworICAgICAgICBpZiAoIW1vZGVsLmlzTmV3KCkpIG1vZGVsLnRyaWdnZXIoJ3N5bmMn
LCBtb2RlbCwgcmVzcCwgb3B0aW9ucyk7CisgICAgICB9OworCisgICAgICB2YXIgeGhyID0gZmFs
c2U7CisgICAgICBpZiAodGhpcy5pc05ldygpKSB7CisgICAgICAgIF8uZGVmZXIob3B0aW9ucy5z
dWNjZXNzKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHdyYXBFcnJvcih0aGlzLCBvcHRpb25z
KTsKKyAgICAgICAgeGhyID0gdGhpcy5zeW5jKCdkZWxldGUnLCB0aGlzLCBvcHRpb25zKTsKKyAg
ICAgIH0KKyAgICAgIGlmICghd2FpdCkgZGVzdHJveSgpOworICAgICAgcmV0dXJuIHhocjsKKyAg
ICB9LAorCisgICAgLy8gRGVmYXVsdCBVUkwgZm9yIHRoZSBtb2RlbCdzIHJlcHJlc2VudGF0aW9u
IG9uIHRoZSBzZXJ2ZXIgLS0gaWYgeW91J3JlCisgICAgLy8gdXNpbmcgQmFja2JvbmUncyByZXN0
ZnVsIG1ldGhvZHMsIG92ZXJyaWRlIHRoaXMgdG8gY2hhbmdlIHRoZSBlbmRwb2ludAorICAgIC8v
IHRoYXQgd2lsbCBiZSBjYWxsZWQuCisgICAgdXJsOiBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBi
YXNlID0KKyAgICAgICAgXy5yZXN1bHQodGhpcywgJ3VybFJvb3QnKSB8fAorICAgICAgICBfLnJl
c3VsdCh0aGlzLmNvbGxlY3Rpb24sICd1cmwnKSB8fAorICAgICAgICB1cmxFcnJvcigpOworICAg
ICAgaWYgKHRoaXMuaXNOZXcoKSkgcmV0dXJuIGJhc2U7CisgICAgICB2YXIgaWQgPSB0aGlzLmdl
dCh0aGlzLmlkQXR0cmlidXRlKTsKKyAgICAgIHJldHVybiBiYXNlLnJlcGxhY2UoL1teXC9dJC8s
ICckJi8nKSArIGVuY29kZVVSSUNvbXBvbmVudChpZCk7CisgICAgfSwKKworICAgIC8vICoqcGFy
c2UqKiBjb252ZXJ0cyBhIHJlc3BvbnNlIGludG8gdGhlIGhhc2ggb2YgYXR0cmlidXRlcyB0byBi
ZSBgc2V0YCBvbgorICAgIC8vIHRoZSBtb2RlbC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24g
aXMganVzdCB0byBwYXNzIHRoZSByZXNwb25zZSBhbG9uZy4KKyAgICBwYXJzZTogZnVuY3Rpb24o
cmVzcCwgb3B0aW9ucykgeworICAgICAgcmV0dXJuIHJlc3A7CisgICAgfSwKKworICAgIC8vIENy
ZWF0ZSBhIG5ldyBtb2RlbCB3aXRoIGlkZW50aWNhbCBhdHRyaWJ1dGVzIHRvIHRoaXMgb25lLgor
ICAgIGNsb25lOiBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rv
cih0aGlzLmF0dHJpYnV0ZXMpOworICAgIH0sCisKKyAgICAvLyBBIG1vZGVsIGlzIG5ldyBpZiBp
dCBoYXMgbmV2ZXIgYmVlbiBzYXZlZCB0byB0aGUgc2VydmVyLCBhbmQgbGFja3MgYW4gaWQuCisg
ICAgaXNOZXc6IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuICF0aGlzLmhhcyh0aGlzLmlkQXR0
cmlidXRlKTsKKyAgICB9LAorCisgICAgLy8gQ2hlY2sgaWYgdGhlIG1vZGVsIGlzIGN1cnJlbnRs
eSBpbiBhIHZhbGlkIHN0YXRlLgorICAgIGlzVmFsaWQ6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKKyAg
ICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZSh7fSwgXy5leHRlbmQoe30sIG9wdGlvbnMsIHt2YWxp
ZGF0ZTogdHJ1ZX0pKTsKKyAgICB9LAorCisgICAgLy8gUnVuIHZhbGlkYXRpb24gYWdhaW5zdCB0
aGUgbmV4dCBjb21wbGV0ZSBzZXQgb2YgbW9kZWwgYXR0cmlidXRlcywKKyAgICAvLyByZXR1cm5p
bmcgYHRydWVgIGlmIGFsbCBpcyB3ZWxsLiBPdGhlcndpc2UsIGZpcmUgYW4gYCJpbnZhbGlkImAg
ZXZlbnQuCisgICAgX3ZhbGlkYXRlOiBmdW5jdGlvbihhdHRycywgb3B0aW9ucykgeworICAgICAg
aWYgKCFvcHRpb25zLnZhbGlkYXRlIHx8ICF0aGlzLnZhbGlkYXRlKSByZXR1cm4gdHJ1ZTsKKyAg
ICAgIGF0dHJzID0gXy5leHRlbmQoe30sIHRoaXMuYXR0cmlidXRlcywgYXR0cnMpOworICAgICAg
dmFyIGVycm9yID0gdGhpcy52YWxpZGF0aW9uRXJyb3IgPSB0aGlzLnZhbGlkYXRlKGF0dHJzLCBv
cHRpb25zKSB8fCBudWxsOworICAgICAgaWYgKCFlcnJvcikgcmV0dXJuIHRydWU7CisgICAgICB0
aGlzLnRyaWdnZXIoJ2ludmFsaWQnLCB0aGlzLCBlcnJvciwgXy5leHRlbmQob3B0aW9ucywge3Zh
bGlkYXRpb25FcnJvcjogZXJyb3J9KSk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
IH0pOworCisgIC8vIFVuZGVyc2NvcmUgbWV0aG9kcyB0aGF0IHdlIHdhbnQgdG8gaW1wbGVtZW50
IG9uIHRoZSBNb2RlbCwgbWFwcGVkIHRvIHRoZQorICAvLyBudW1iZXIgb2YgYXJndW1lbnRzIHRo
ZXkgdGFrZS4KKyAgdmFyIG1vZGVsTWV0aG9kcyA9IHtrZXlzOiAxLCB2YWx1ZXM6IDEsIHBhaXJz
OiAxLCBpbnZlcnQ6IDEsIHBpY2s6IDAsCisgICAgICBvbWl0OiAwLCBjaGFpbjogMSwgaXNFbXB0
eTogMX07CisKKyAgLy8gTWl4IGluIGVhY2ggVW5kZXJzY29yZSBtZXRob2QgYXMgYSBwcm94eSB0
byBgTW9kZWwjYXR0cmlidXRlc2AuCisgIGFkZFVuZGVyc2NvcmVNZXRob2RzKE1vZGVsLCBtb2Rl
bE1ldGhvZHMsICdhdHRyaWJ1dGVzJyk7CisKKyAgLy8gQmFja2JvbmUuQ29sbGVjdGlvbgorICAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgLy8gSWYgbW9kZWxzIHRlbmQgdG8gcmVwcmVzZW50
IGEgc2luZ2xlIHJvdyBvZiBkYXRhLCBhIEJhY2tib25lIENvbGxlY3Rpb24gaXMKKyAgLy8gbW9y
ZSBhbmFsb2dvdXMgdG8gYSB0YWJsZSBmdWxsIG9mIGRhdGEgLi4uIG9yIGEgc21hbGwgc2xpY2Ug
b3IgcGFnZSBvZiB0aGF0CisgIC8vIHRhYmxlLCBvciBhIGNvbGxlY3Rpb24gb2Ygcm93cyB0aGF0
IGJlbG9uZyB0b2dldGhlciBmb3IgYSBwYXJ0aWN1bGFyIHJlYXNvbgorICAvLyAtLSBhbGwgb2Yg
dGhlIG1lc3NhZ2VzIGluIHRoaXMgcGFydGljdWxhciBmb2xkZXIsIGFsbCBvZiB0aGUgZG9jdW1l
bnRzCisgIC8vIGJlbG9uZ2luZyB0byB0aGlzIHBhcnRpY3VsYXIgYXV0aG9yLCBhbmQgc28gb24u
IENvbGxlY3Rpb25zIG1haW50YWluCisgIC8vIGluZGV4ZXMgb2YgdGhlaXIgbW9kZWxzLCBib3Ro
IGluIG9yZGVyLCBhbmQgZm9yIGxvb2t1cCBieSBgaWRgLgorCisgIC8vIENyZWF0ZSBhIG5ldyAq
KkNvbGxlY3Rpb24qKiwgcGVyaGFwcyB0byBjb250YWluIGEgc3BlY2lmaWMgdHlwZSBvZiBgbW9k
ZWxgLgorICAvLyBJZiBhIGBjb21wYXJhdG9yYCBpcyBzcGVjaWZpZWQsIHRoZSBDb2xsZWN0aW9u
IHdpbGwgbWFpbnRhaW4KKyAgLy8gaXRzIG1vZGVscyBpbiBzb3J0IG9yZGVyLCBhcyB0aGV5J3Jl
IGFkZGVkIGFuZCByZW1vdmVkLgorICB2YXIgQ29sbGVjdGlvbiA9IEJhY2tib25lLkNvbGxlY3Rp
b24gPSBmdW5jdGlvbihtb2RlbHMsIG9wdGlvbnMpIHsKKyAgICBvcHRpb25zIHx8IChvcHRpb25z
ID0ge30pOworICAgIGlmIChvcHRpb25zLm1vZGVsKSB0aGlzLm1vZGVsID0gb3B0aW9ucy5tb2Rl
bDsKKyAgICBpZiAob3B0aW9ucy5jb21wYXJhdG9yICE9PSB2b2lkIDApIHRoaXMuY29tcGFyYXRv
ciA9IG9wdGlvbnMuY29tcGFyYXRvcjsKKyAgICB0aGlzLl9yZXNldCgpOworICAgIHRoaXMuaW5p
dGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgIGlmIChtb2RlbHMpIHRoaXMucmVz
ZXQobW9kZWxzLCBfLmV4dGVuZCh7c2lsZW50OiB0cnVlfSwgb3B0aW9ucykpOworICB9OworCisg
IC8vIERlZmF1bHQgb3B0aW9ucyBmb3IgYENvbGxlY3Rpb24jc2V0YC4KKyAgdmFyIHNldE9wdGlv
bnMgPSB7YWRkOiB0cnVlLCByZW1vdmU6IHRydWUsIG1lcmdlOiB0cnVlfTsKKyAgdmFyIGFkZE9w
dGlvbnMgPSB7YWRkOiB0cnVlLCByZW1vdmU6IGZhbHNlfTsKKworICAvLyBTcGxpY2VzIGBpbnNl
cnRgIGludG8gYGFycmF5YCBhdCBpbmRleCBgYXRgLgorICB2YXIgc3BsaWNlID0gZnVuY3Rpb24o
YXJyYXksIGluc2VydCwgYXQpIHsKKyAgICBhdCA9IE1hdGgubWluKE1hdGgubWF4KGF0LCAwKSwg
YXJyYXkubGVuZ3RoKTsKKyAgICB2YXIgdGFpbCA9IEFycmF5KGFycmF5Lmxlbmd0aCAtIGF0KTsK
KyAgICB2YXIgbGVuZ3RoID0gaW5zZXJ0Lmxlbmd0aDsKKyAgICB2YXIgaTsKKyAgICBmb3IgKGkg
PSAwOyBpIDwgdGFpbC5sZW5ndGg7IGkrKykgdGFpbFtpXSA9IGFycmF5W2kgKyBhdF07CisgICAg
Zm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSBhcnJheVtpICsgYXRdID0gaW5zZXJ0W2ldOwor
ICAgIGZvciAoaSA9IDA7IGkgPCB0YWlsLmxlbmd0aDsgaSsrKSBhcnJheVtpICsgbGVuZ3RoICsg
YXRdID0gdGFpbFtpXTsKKyAgfTsKKworICAvLyBEZWZpbmUgdGhlIENvbGxlY3Rpb24ncyBpbmhl
cml0YWJsZSBtZXRob2RzLgorICBfLmV4dGVuZChDb2xsZWN0aW9uLnByb3RvdHlwZSwgRXZlbnRz
LCB7CisKKyAgICAvLyBUaGUgZGVmYXVsdCBtb2RlbCBmb3IgYSBjb2xsZWN0aW9uIGlzIGp1c3Qg
YSAqKkJhY2tib25lLk1vZGVsKiouCisgICAgLy8gVGhpcyBzaG91bGQgYmUgb3ZlcnJpZGRlbiBp
biBtb3N0IGNhc2VzLgorICAgIG1vZGVsOiBNb2RlbCwKKworICAgIC8vIEluaXRpYWxpemUgaXMg
YW4gZW1wdHkgZnVuY3Rpb24gYnkgZGVmYXVsdC4gT3ZlcnJpZGUgaXQgd2l0aCB5b3VyIG93bgor
ICAgIC8vIGluaXRpYWxpemF0aW9uIGxvZ2ljLgorICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCl7
fSwKKworICAgIC8vIFRoZSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgQ29sbGVjdGlvbiBpcyBh
biBhcnJheSBvZiB0aGUKKyAgICAvLyBtb2RlbHMnIGF0dHJpYnV0ZXMuCisgICAgdG9KU09OOiBm
dW5jdGlvbihvcHRpb25zKSB7CisgICAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24obW9kZWwp
IHsgcmV0dXJuIG1vZGVsLnRvSlNPTihvcHRpb25zKTsgfSk7CisgICAgfSwKKworICAgIC8vIFBy
b3h5IGBCYWNrYm9uZS5zeW5jYCBieSBkZWZhdWx0LgorICAgIHN5bmM6IGZ1bmN0aW9uKCkgewor
ICAgICAgcmV0dXJuIEJhY2tib25lLnN5bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICB9
LAorCisgICAgLy8gQWRkIGEgbW9kZWwsIG9yIGxpc3Qgb2YgbW9kZWxzIHRvIHRoZSBzZXQuIGBt
b2RlbHNgIG1heSBiZSBCYWNrYm9uZQorICAgIC8vIE1vZGVscyBvciByYXcgSmF2YVNjcmlwdCBv
YmplY3RzIHRvIGJlIGNvbnZlcnRlZCB0byBNb2RlbHMsIG9yIGFueQorICAgIC8vIGNvbWJpbmF0
aW9uIG9mIHRoZSB0d28uCisgICAgYWRkOiBmdW5jdGlvbihtb2RlbHMsIG9wdGlvbnMpIHsKKyAg
ICAgIHJldHVybiB0aGlzLnNldChtb2RlbHMsIF8uZXh0ZW5kKHttZXJnZTogZmFsc2V9LCBvcHRp
b25zLCBhZGRPcHRpb25zKSk7CisgICAgfSwKKworICAgIC8vIFJlbW92ZSBhIG1vZGVsLCBvciBh
IGxpc3Qgb2YgbW9kZWxzIGZyb20gdGhlIHNldC4KKyAgICByZW1vdmU6IGZ1bmN0aW9uKG1vZGVs
cywgb3B0aW9ucykgeworICAgICAgb3B0aW9ucyA9IF8uZXh0ZW5kKHt9LCBvcHRpb25zKTsKKyAg
ICAgIHZhciBzaW5ndWxhciA9ICFfLmlzQXJyYXkobW9kZWxzKTsKKyAgICAgIG1vZGVscyA9IHNp
bmd1bGFyID8gW21vZGVsc10gOiBtb2RlbHMuc2xpY2UoKTsKKyAgICAgIHZhciByZW1vdmVkID0g
dGhpcy5fcmVtb3ZlTW9kZWxzKG1vZGVscywgb3B0aW9ucyk7CisgICAgICBpZiAoIW9wdGlvbnMu
c2lsZW50ICYmIHJlbW92ZWQubGVuZ3RoKSB7CisgICAgICAgIG9wdGlvbnMuY2hhbmdlcyA9IHth
ZGRlZDogW10sIG1lcmdlZDogW10sIHJlbW92ZWQ6IHJlbW92ZWR9OworICAgICAgICB0aGlzLnRy
aWdnZXIoJ3VwZGF0ZScsIHRoaXMsIG9wdGlvbnMpOworICAgICAgfQorICAgICAgcmV0dXJuIHNp
bmd1bGFyID8gcmVtb3ZlZFswXSA6IHJlbW92ZWQ7CisgICAgfSwKKworICAgIC8vIFVwZGF0ZSBh
IGNvbGxlY3Rpb24gYnkgYHNldGAtaW5nIGEgbmV3IGxpc3Qgb2YgbW9kZWxzLCBhZGRpbmcgbmV3
IG9uZXMsCisgICAgLy8gcmVtb3ZpbmcgbW9kZWxzIHRoYXQgYXJlIG5vIGxvbmdlciBwcmVzZW50
LCBhbmQgbWVyZ2luZyBtb2RlbHMgdGhhdAorICAgIC8vIGFscmVhZHkgZXhpc3QgaW4gdGhlIGNv
bGxlY3Rpb24sIGFzIG5lY2Vzc2FyeS4gU2ltaWxhciB0byAqKk1vZGVsI3NldCoqLAorICAgIC8v
IHRoZSBjb3JlIG9wZXJhdGlvbiBmb3IgdXBkYXRpbmcgdGhlIGRhdGEgY29udGFpbmVkIGJ5IHRo
ZSBjb2xsZWN0aW9uLgorICAgIHNldDogZnVuY3Rpb24obW9kZWxzLCBvcHRpb25zKSB7CisgICAg
ICBpZiAobW9kZWxzID09IG51bGwpIHJldHVybjsKKworICAgICAgb3B0aW9ucyA9IF8uZXh0ZW5k
KHt9LCBzZXRPcHRpb25zLCBvcHRpb25zKTsKKyAgICAgIGlmIChvcHRpb25zLnBhcnNlICYmICF0
aGlzLl9pc01vZGVsKG1vZGVscykpIHsKKyAgICAgICAgbW9kZWxzID0gdGhpcy5wYXJzZShtb2Rl
bHMsIG9wdGlvbnMpIHx8IFtdOworICAgICAgfQorCisgICAgICB2YXIgc2luZ3VsYXIgPSAhXy5p
c0FycmF5KG1vZGVscyk7CisgICAgICBtb2RlbHMgPSBzaW5ndWxhciA/IFttb2RlbHNdIDogbW9k
ZWxzLnNsaWNlKCk7CisKKyAgICAgIHZhciBhdCA9IG9wdGlvbnMuYXQ7CisgICAgICBpZiAoYXQg
IT0gbnVsbCkgYXQgPSArYXQ7CisgICAgICBpZiAoYXQgPiB0aGlzLmxlbmd0aCkgYXQgPSB0aGlz
Lmxlbmd0aDsKKyAgICAgIGlmIChhdCA8IDApIGF0ICs9IHRoaXMubGVuZ3RoICsgMTsKKworICAg
ICAgdmFyIHNldCA9IFtdOworICAgICAgdmFyIHRvQWRkID0gW107CisgICAgICB2YXIgdG9NZXJn
ZSA9IFtdOworICAgICAgdmFyIHRvUmVtb3ZlID0gW107CisgICAgICB2YXIgbW9kZWxNYXAgPSB7
fTsKKworICAgICAgdmFyIGFkZCA9IG9wdGlvbnMuYWRkOworICAgICAgdmFyIG1lcmdlID0gb3B0
aW9ucy5tZXJnZTsKKyAgICAgIHZhciByZW1vdmUgPSBvcHRpb25zLnJlbW92ZTsKKworICAgICAg
dmFyIHNvcnQgPSBmYWxzZTsKKyAgICAgIHZhciBzb3J0YWJsZSA9IHRoaXMuY29tcGFyYXRvciAm
JiBhdCA9PSBudWxsICYmIG9wdGlvbnMuc29ydCAhPT0gZmFsc2U7CisgICAgICB2YXIgc29ydEF0
dHIgPSBfLmlzU3RyaW5nKHRoaXMuY29tcGFyYXRvcikgPyB0aGlzLmNvbXBhcmF0b3IgOiBudWxs
OworCisgICAgICAvLyBUdXJuIGJhcmUgb2JqZWN0cyBpbnRvIG1vZGVsIHJlZmVyZW5jZXMsIGFu
ZCBwcmV2ZW50IGludmFsaWQgbW9kZWxzCisgICAgICAvLyBmcm9tIGJlaW5nIGFkZGVkLgorICAg
ICAgdmFyIG1vZGVsLCBpOworICAgICAgZm9yIChpID0gMDsgaSA8IG1vZGVscy5sZW5ndGg7IGkr
KykgeworICAgICAgICBtb2RlbCA9IG1vZGVsc1tpXTsKKworICAgICAgICAvLyBJZiBhIGR1cGxp
Y2F0ZSBpcyBmb3VuZCwgcHJldmVudCBpdCBmcm9tIGJlaW5nIGFkZGVkIGFuZAorICAgICAgICAv
LyBvcHRpb25hbGx5IG1lcmdlIGl0IGludG8gdGhlIGV4aXN0aW5nIG1vZGVsLgorICAgICAgICB2
YXIgZXhpc3RpbmcgPSB0aGlzLmdldChtb2RlbCk7CisgICAgICAgIGlmIChleGlzdGluZykgewor
ICAgICAgICAgIGlmIChtZXJnZSAmJiBtb2RlbCAhPT0gZXhpc3RpbmcpIHsKKyAgICAgICAgICAg
IHZhciBhdHRycyA9IHRoaXMuX2lzTW9kZWwobW9kZWwpID8gbW9kZWwuYXR0cmlidXRlcyA6IG1v
ZGVsOworICAgICAgICAgICAgaWYgKG9wdGlvbnMucGFyc2UpIGF0dHJzID0gZXhpc3RpbmcucGFy
c2UoYXR0cnMsIG9wdGlvbnMpOworICAgICAgICAgICAgZXhpc3Rpbmcuc2V0KGF0dHJzLCBvcHRp
b25zKTsKKyAgICAgICAgICAgIHRvTWVyZ2UucHVzaChleGlzdGluZyk7CisgICAgICAgICAgICBp
ZiAoc29ydGFibGUgJiYgIXNvcnQpIHNvcnQgPSBleGlzdGluZy5oYXNDaGFuZ2VkKHNvcnRBdHRy
KTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKCFtb2RlbE1hcFtleGlzdGluZy5jaWRdKSB7
CisgICAgICAgICAgICBtb2RlbE1hcFtleGlzdGluZy5jaWRdID0gdHJ1ZTsKKyAgICAgICAgICAg
IHNldC5wdXNoKGV4aXN0aW5nKTsKKyAgICAgICAgICB9CisgICAgICAgICAgbW9kZWxzW2ldID0g
ZXhpc3Rpbmc7CisKKyAgICAgICAgLy8gSWYgdGhpcyBpcyBhIG5ldywgdmFsaWQgbW9kZWwsIHB1
c2ggaXQgdG8gdGhlIGB0b0FkZGAgbGlzdC4KKyAgICAgICAgfSBlbHNlIGlmIChhZGQpIHsKKyAg
ICAgICAgICBtb2RlbCA9IG1vZGVsc1tpXSA9IHRoaXMuX3ByZXBhcmVNb2RlbChtb2RlbCwgb3B0
aW9ucyk7CisgICAgICAgICAgaWYgKG1vZGVsKSB7CisgICAgICAgICAgICB0b0FkZC5wdXNoKG1v
ZGVsKTsKKyAgICAgICAgICAgIHRoaXMuX2FkZFJlZmVyZW5jZShtb2RlbCwgb3B0aW9ucyk7Cisg
ICAgICAgICAgICBtb2RlbE1hcFttb2RlbC5jaWRdID0gdHJ1ZTsKKyAgICAgICAgICAgIHNldC5w
dXNoKG1vZGVsKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLy8g
UmVtb3ZlIHN0YWxlIG1vZGVscy4KKyAgICAgIGlmIChyZW1vdmUpIHsKKyAgICAgICAgZm9yIChp
ID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICBtb2RlbCA9IHRoaXMubW9k
ZWxzW2ldOworICAgICAgICAgIGlmICghbW9kZWxNYXBbbW9kZWwuY2lkXSkgdG9SZW1vdmUucHVz
aChtb2RlbCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRvUmVtb3ZlLmxlbmd0aCkgdGhpcy5f
cmVtb3ZlTW9kZWxzKHRvUmVtb3ZlLCBvcHRpb25zKTsKKyAgICAgIH0KKworICAgICAgLy8gU2Vl
IGlmIHNvcnRpbmcgaXMgbmVlZGVkLCB1cGRhdGUgYGxlbmd0aGAgYW5kIHNwbGljZSBpbiBuZXcg
bW9kZWxzLgorICAgICAgdmFyIG9yZGVyQ2hhbmdlZCA9IGZhbHNlOworICAgICAgdmFyIHJlcGxh
Y2UgPSAhc29ydGFibGUgJiYgYWRkICYmIHJlbW92ZTsKKyAgICAgIGlmIChzZXQubGVuZ3RoICYm
IHJlcGxhY2UpIHsKKyAgICAgICAgb3JkZXJDaGFuZ2VkID0gdGhpcy5sZW5ndGggIT09IHNldC5s
ZW5ndGggfHwgXy5zb21lKHRoaXMubW9kZWxzLCBmdW5jdGlvbihtLCBpbmRleCkgeworICAgICAg
ICAgIHJldHVybiBtICE9PSBzZXRbaW5kZXhdOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5t
b2RlbHMubGVuZ3RoID0gMDsKKyAgICAgICAgc3BsaWNlKHRoaXMubW9kZWxzLCBzZXQsIDApOwor
ICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubW9kZWxzLmxlbmd0aDsKKyAgICAgIH0gZWxzZSBp
ZiAodG9BZGQubGVuZ3RoKSB7CisgICAgICAgIGlmIChzb3J0YWJsZSkgc29ydCA9IHRydWU7Cisg
ICAgICAgIHNwbGljZSh0aGlzLm1vZGVscywgdG9BZGQsIGF0ID09IG51bGwgPyB0aGlzLmxlbmd0
aCA6IGF0KTsKKyAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLm1vZGVscy5sZW5ndGg7CisgICAg
ICB9CisKKyAgICAgIC8vIFNpbGVudGx5IHNvcnQgdGhlIGNvbGxlY3Rpb24gaWYgYXBwcm9wcmlh
dGUuCisgICAgICBpZiAoc29ydCkgdGhpcy5zb3J0KHtzaWxlbnQ6IHRydWV9KTsKKworICAgICAg
Ly8gVW5sZXNzIHNpbGVuY2VkLCBpdCdzIHRpbWUgdG8gZmlyZSBhbGwgYXBwcm9wcmlhdGUgYWRk
L3NvcnQvdXBkYXRlIGV2ZW50cy4KKyAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHsKKyAgICAg
ICAgZm9yIChpID0gMDsgaSA8IHRvQWRkLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgaWYgKGF0
ICE9IG51bGwpIG9wdGlvbnMuaW5kZXggPSBhdCArIGk7CisgICAgICAgICAgbW9kZWwgPSB0b0Fk
ZFtpXTsKKyAgICAgICAgICBtb2RlbC50cmlnZ2VyKCdhZGQnLCBtb2RlbCwgdGhpcywgb3B0aW9u
cyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNvcnQgfHwgb3JkZXJDaGFuZ2VkKSB0aGlzLnRy
aWdnZXIoJ3NvcnQnLCB0aGlzLCBvcHRpb25zKTsKKyAgICAgICAgaWYgKHRvQWRkLmxlbmd0aCB8
fCB0b1JlbW92ZS5sZW5ndGggfHwgdG9NZXJnZS5sZW5ndGgpIHsKKyAgICAgICAgICBvcHRpb25z
LmNoYW5nZXMgPSB7CisgICAgICAgICAgICBhZGRlZDogdG9BZGQsCisgICAgICAgICAgICByZW1v
dmVkOiB0b1JlbW92ZSwKKyAgICAgICAgICAgIG1lcmdlZDogdG9NZXJnZQorICAgICAgICAgIH07
CisgICAgICAgICAgdGhpcy50cmlnZ2VyKCd1cGRhdGUnLCB0aGlzLCBvcHRpb25zKTsKKyAgICAg
ICAgfQorICAgICAgfQorCisgICAgICAvLyBSZXR1cm4gdGhlIGFkZGVkIChvciBtZXJnZWQpIG1v
ZGVsIChvciBtb2RlbHMpLgorICAgICAgcmV0dXJuIHNpbmd1bGFyID8gbW9kZWxzWzBdIDogbW9k
ZWxzOworICAgIH0sCisKKyAgICAvLyBXaGVuIHlvdSBoYXZlIG1vcmUgaXRlbXMgdGhhbiB5b3Ug
d2FudCB0byBhZGQgb3IgcmVtb3ZlIGluZGl2aWR1YWxseSwKKyAgICAvLyB5b3UgY2FuIHJlc2V0
IHRoZSBlbnRpcmUgc2V0IHdpdGggYSBuZXcgbGlzdCBvZiBtb2RlbHMsIHdpdGhvdXQgZmlyaW5n
CisgICAgLy8gYW55IGdyYW51bGFyIGBhZGRgIG9yIGByZW1vdmVgIGV2ZW50cy4gRmlyZXMgYHJl
c2V0YCB3aGVuIGZpbmlzaGVkLgorICAgIC8vIFVzZWZ1bCBmb3IgYnVsayBvcGVyYXRpb25zIGFu
ZCBvcHRpbWl6YXRpb25zLgorICAgIHJlc2V0OiBmdW5jdGlvbihtb2RlbHMsIG9wdGlvbnMpIHsK
KyAgICAgIG9wdGlvbnMgPSBvcHRpb25zID8gXy5jbG9uZShvcHRpb25zKSA6IHt9OworICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1vZGVscy5sZW5ndGg7IGkrKykgeworICAgICAgICB0
aGlzLl9yZW1vdmVSZWZlcmVuY2UodGhpcy5tb2RlbHNbaV0sIG9wdGlvbnMpOworICAgICAgfQor
ICAgICAgb3B0aW9ucy5wcmV2aW91c01vZGVscyA9IHRoaXMubW9kZWxzOworICAgICAgdGhpcy5f
cmVzZXQoKTsKKyAgICAgIG1vZGVscyA9IHRoaXMuYWRkKG1vZGVscywgXy5leHRlbmQoe3NpbGVu
dDogdHJ1ZX0sIG9wdGlvbnMpKTsKKyAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHRoaXMudHJp
Z2dlcigncmVzZXQnLCB0aGlzLCBvcHRpb25zKTsKKyAgICAgIHJldHVybiBtb2RlbHM7CisgICAg
fSwKKworICAgIC8vIEFkZCBhIG1vZGVsIHRvIHRoZSBlbmQgb2YgdGhlIGNvbGxlY3Rpb24uCisg
ICAgcHVzaDogZnVuY3Rpb24obW9kZWwsIG9wdGlvbnMpIHsKKyAgICAgIHJldHVybiB0aGlzLmFk
ZChtb2RlbCwgXy5leHRlbmQoe2F0OiB0aGlzLmxlbmd0aH0sIG9wdGlvbnMpKTsKKyAgICB9LAor
CisgICAgLy8gUmVtb3ZlIGEgbW9kZWwgZnJvbSB0aGUgZW5kIG9mIHRoZSBjb2xsZWN0aW9uLgor
ICAgIHBvcDogZnVuY3Rpb24ob3B0aW9ucykgeworICAgICAgdmFyIG1vZGVsID0gdGhpcy5hdCh0
aGlzLmxlbmd0aCAtIDEpOworICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlKG1vZGVsLCBvcHRpb25z
KTsKKyAgICB9LAorCisgICAgLy8gQWRkIGEgbW9kZWwgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUg
Y29sbGVjdGlvbi4KKyAgICB1bnNoaWZ0OiBmdW5jdGlvbihtb2RlbCwgb3B0aW9ucykgeworICAg
ICAgcmV0dXJuIHRoaXMuYWRkKG1vZGVsLCBfLmV4dGVuZCh7YXQ6IDB9LCBvcHRpb25zKSk7Cisg
ICAgfSwKKworICAgIC8vIFJlbW92ZSBhIG1vZGVsIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUg
Y29sbGVjdGlvbi4KKyAgICBzaGlmdDogZnVuY3Rpb24ob3B0aW9ucykgeworICAgICAgdmFyIG1v
ZGVsID0gdGhpcy5hdCgwKTsKKyAgICAgIHJldHVybiB0aGlzLnJlbW92ZShtb2RlbCwgb3B0aW9u
cyk7CisgICAgfSwKKworICAgIC8vIFNsaWNlIG91dCBhIHN1Yi1hcnJheSBvZiBtb2RlbHMgZnJv
bSB0aGUgY29sbGVjdGlvbi4KKyAgICBzbGljZTogZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4g
c2xpY2UuYXBwbHkodGhpcy5tb2RlbHMsIGFyZ3VtZW50cyk7CisgICAgfSwKKworICAgIC8vIEdl
dCBhIG1vZGVsIGZyb20gdGhlIHNldCBieSBpZCwgY2lkLCBtb2RlbCBvYmplY3Qgd2l0aCBpZCBv
ciBjaWQKKyAgICAvLyBwcm9wZXJ0aWVzLCBvciBhbiBhdHRyaWJ1dGVzIG9iamVjdCB0aGF0IGlz
IHRyYW5zZm9ybWVkIHRocm91Z2ggbW9kZWxJZC4KKyAgICBnZXQ6IGZ1bmN0aW9uKG9iaikgewor
ICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdm9pZCAwOworICAgICAgcmV0dXJuIHRoaXMu
X2J5SWRbb2JqXSB8fAorICAgICAgICB0aGlzLl9ieUlkW3RoaXMubW9kZWxJZChvYmouYXR0cmli
dXRlcyB8fCBvYmopXSB8fAorICAgICAgICBvYmouY2lkICYmIHRoaXMuX2J5SWRbb2JqLmNpZF07
CisgICAgfSwKKworICAgIC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBtb2RlbCBpcyBpbiB0aGUg
Y29sbGVjdGlvbi4KKyAgICBoYXM6IGZ1bmN0aW9uKG9iaikgeworICAgICAgcmV0dXJuIHRoaXMu
Z2V0KG9iaikgIT0gbnVsbDsKKyAgICB9LAorCisgICAgLy8gR2V0IHRoZSBtb2RlbCBhdCB0aGUg
Z2l2ZW4gaW5kZXguCisgICAgYXQ6IGZ1bmN0aW9uKGluZGV4KSB7CisgICAgICBpZiAoaW5kZXgg
PCAwKSBpbmRleCArPSB0aGlzLmxlbmd0aDsKKyAgICAgIHJldHVybiB0aGlzLm1vZGVsc1tpbmRl
eF07CisgICAgfSwKKworICAgIC8vIFJldHVybiBtb2RlbHMgd2l0aCBtYXRjaGluZyBhdHRyaWJ1
dGVzLiBVc2VmdWwgZm9yIHNpbXBsZSBjYXNlcyBvZgorICAgIC8vIGBmaWx0ZXJgLgorICAgIHdo
ZXJlOiBmdW5jdGlvbihhdHRycywgZmlyc3QpIHsKKyAgICAgIHJldHVybiB0aGlzW2ZpcnN0ID8g
J2ZpbmQnIDogJ2ZpbHRlciddKGF0dHJzKTsKKyAgICB9LAorCisgICAgLy8gUmV0dXJuIHRoZSBm
aXJzdCBtb2RlbCB3aXRoIG1hdGNoaW5nIGF0dHJpYnV0ZXMuIFVzZWZ1bCBmb3Igc2ltcGxlIGNh
c2VzCisgICAgLy8gb2YgYGZpbmRgLgorICAgIGZpbmRXaGVyZTogZnVuY3Rpb24oYXR0cnMpIHsK
KyAgICAgIHJldHVybiB0aGlzLndoZXJlKGF0dHJzLCB0cnVlKTsKKyAgICB9LAorCisgICAgLy8g
Rm9yY2UgdGhlIGNvbGxlY3Rpb24gdG8gcmUtc29ydCBpdHNlbGYuIFlvdSBkb24ndCBuZWVkIHRv
IGNhbGwgdGhpcyB1bmRlcgorICAgIC8vIG5vcm1hbCBjaXJjdW1zdGFuY2VzLCBhcyB0aGUgc2V0
IHdpbGwgbWFpbnRhaW4gc29ydCBvcmRlciBhcyBlYWNoIGl0ZW0KKyAgICAvLyBpcyBhZGRlZC4K
KyAgICBzb3J0OiBmdW5jdGlvbihvcHRpb25zKSB7CisgICAgICB2YXIgY29tcGFyYXRvciA9IHRo
aXMuY29tcGFyYXRvcjsKKyAgICAgIGlmICghY29tcGFyYXRvcikgdGhyb3cgbmV3IEVycm9yKCdD
YW5ub3Qgc29ydCBhIHNldCB3aXRob3V0IGEgY29tcGFyYXRvcicpOworICAgICAgb3B0aW9ucyB8
fCAob3B0aW9ucyA9IHt9KTsKKworICAgICAgdmFyIGxlbmd0aCA9IGNvbXBhcmF0b3IubGVuZ3Ro
OworICAgICAgaWYgKF8uaXNGdW5jdGlvbihjb21wYXJhdG9yKSkgY29tcGFyYXRvciA9IF8uYmlu
ZChjb21wYXJhdG9yLCB0aGlzKTsKKworICAgICAgLy8gUnVuIHNvcnQgYmFzZWQgb24gdHlwZSBv
ZiBgY29tcGFyYXRvcmAuCisgICAgICBpZiAobGVuZ3RoID09PSAxIHx8IF8uaXNTdHJpbmcoY29t
cGFyYXRvcikpIHsKKyAgICAgICAgdGhpcy5tb2RlbHMgPSB0aGlzLnNvcnRCeShjb21wYXJhdG9y
KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMubW9kZWxzLnNvcnQoY29tcGFyYXRvcik7
CisgICAgICB9CisgICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB0aGlzLnRyaWdnZXIoJ3NvcnQn
LCB0aGlzLCBvcHRpb25zKTsKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICAvLyBQ
bHVjayBhbiBhdHRyaWJ1dGUgZnJvbSBlYWNoIG1vZGVsIGluIHRoZSBjb2xsZWN0aW9uLgorICAg
IHBsdWNrOiBmdW5jdGlvbihhdHRyKSB7CisgICAgICByZXR1cm4gdGhpcy5tYXAoYXR0ciArICcn
KTsKKyAgICB9LAorCisgICAgLy8gRmV0Y2ggdGhlIGRlZmF1bHQgc2V0IG9mIG1vZGVscyBmb3Ig
dGhpcyBjb2xsZWN0aW9uLCByZXNldHRpbmcgdGhlCisgICAgLy8gY29sbGVjdGlvbiB3aGVuIHRo
ZXkgYXJyaXZlLiBJZiBgcmVzZXQ6IHRydWVgIGlzIHBhc3NlZCwgdGhlIHJlc3BvbnNlCisgICAg
Ly8gZGF0YSB3aWxsIGJlIHBhc3NlZCB0aHJvdWdoIHRoZSBgcmVzZXRgIG1ldGhvZCBpbnN0ZWFk
IG9mIGBzZXRgLgorICAgIGZldGNoOiBmdW5jdGlvbihvcHRpb25zKSB7CisgICAgICBvcHRpb25z
ID0gXy5leHRlbmQoe3BhcnNlOiB0cnVlfSwgb3B0aW9ucyk7CisgICAgICB2YXIgc3VjY2VzcyA9
IG9wdGlvbnMuc3VjY2VzczsKKyAgICAgIHZhciBjb2xsZWN0aW9uID0gdGhpczsKKyAgICAgIG9w
dGlvbnMuc3VjY2VzcyA9IGZ1bmN0aW9uKHJlc3ApIHsKKyAgICAgICAgdmFyIG1ldGhvZCA9IG9w
dGlvbnMucmVzZXQgPyAncmVzZXQnIDogJ3NldCc7CisgICAgICAgIGNvbGxlY3Rpb25bbWV0aG9k
XShyZXNwLCBvcHRpb25zKTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHN1Y2Nlc3MuY2FsbChvcHRp
b25zLmNvbnRleHQsIGNvbGxlY3Rpb24sIHJlc3AsIG9wdGlvbnMpOworICAgICAgICBjb2xsZWN0
aW9uLnRyaWdnZXIoJ3N5bmMnLCBjb2xsZWN0aW9uLCByZXNwLCBvcHRpb25zKTsKKyAgICAgIH07
CisgICAgICB3cmFwRXJyb3IodGhpcywgb3B0aW9ucyk7CisgICAgICByZXR1cm4gdGhpcy5zeW5j
KCdyZWFkJywgdGhpcywgb3B0aW9ucyk7CisgICAgfSwKKworICAgIC8vIENyZWF0ZSBhIG5ldyBp
bnN0YW5jZSBvZiBhIG1vZGVsIGluIHRoaXMgY29sbGVjdGlvbi4gQWRkIHRoZSBtb2RlbCB0byB0
aGUKKyAgICAvLyBjb2xsZWN0aW9uIGltbWVkaWF0ZWx5LCB1bmxlc3MgYHdhaXQ6IHRydWVgIGlz
IHBhc3NlZCwgaW4gd2hpY2ggY2FzZSB3ZQorICAgIC8vIHdhaXQgZm9yIHRoZSBzZXJ2ZXIgdG8g
YWdyZWUuCisgICAgY3JlYXRlOiBmdW5jdGlvbihtb2RlbCwgb3B0aW9ucykgeworICAgICAgb3B0
aW9ucyA9IG9wdGlvbnMgPyBfLmNsb25lKG9wdGlvbnMpIDoge307CisgICAgICB2YXIgd2FpdCA9
IG9wdGlvbnMud2FpdDsKKyAgICAgIG1vZGVsID0gdGhpcy5fcHJlcGFyZU1vZGVsKG1vZGVsLCBv
cHRpb25zKTsKKyAgICAgIGlmICghbW9kZWwpIHJldHVybiBmYWxzZTsKKyAgICAgIGlmICghd2Fp
dCkgdGhpcy5hZGQobW9kZWwsIG9wdGlvbnMpOworICAgICAgdmFyIGNvbGxlY3Rpb24gPSB0aGlz
OworICAgICAgdmFyIHN1Y2Nlc3MgPSBvcHRpb25zLnN1Y2Nlc3M7CisgICAgICBvcHRpb25zLnN1
Y2Nlc3MgPSBmdW5jdGlvbihtLCByZXNwLCBjYWxsYmFja09wdHMpIHsKKyAgICAgICAgaWYgKHdh
aXQpIGNvbGxlY3Rpb24uYWRkKG0sIGNhbGxiYWNrT3B0cyk7CisgICAgICAgIGlmIChzdWNjZXNz
KSBzdWNjZXNzLmNhbGwoY2FsbGJhY2tPcHRzLmNvbnRleHQsIG0sIHJlc3AsIGNhbGxiYWNrT3B0
cyk7CisgICAgICB9OworICAgICAgbW9kZWwuc2F2ZShudWxsLCBvcHRpb25zKTsKKyAgICAgIHJl
dHVybiBtb2RlbDsKKyAgICB9LAorCisgICAgLy8gKipwYXJzZSoqIGNvbnZlcnRzIGEgcmVzcG9u
c2UgaW50byBhIGxpc3Qgb2YgbW9kZWxzIHRvIGJlIGFkZGVkIHRvIHRoZQorICAgIC8vIGNvbGxl
Y3Rpb24uIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIGp1c3QgdG8gcGFzcyBpdCB0aHJv
dWdoLgorICAgIHBhcnNlOiBmdW5jdGlvbihyZXNwLCBvcHRpb25zKSB7CisgICAgICByZXR1cm4g
cmVzcDsKKyAgICB9LAorCisgICAgLy8gQ3JlYXRlIGEgbmV3IGNvbGxlY3Rpb24gd2l0aCBhbiBp
ZGVudGljYWwgbGlzdCBvZiBtb2RlbHMgYXMgdGhpcyBvbmUuCisgICAgY2xvbmU6IGZ1bmN0aW9u
KCkgeworICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMubW9kZWxzLCB7Cisg
ICAgICAgIG1vZGVsOiB0aGlzLm1vZGVsLAorICAgICAgICBjb21wYXJhdG9yOiB0aGlzLmNvbXBh
cmF0b3IKKyAgICAgIH0pOworICAgIH0sCisKKyAgICAvLyBEZWZpbmUgaG93IHRvIHVuaXF1ZWx5
IGlkZW50aWZ5IG1vZGVscyBpbiB0aGUgY29sbGVjdGlvbi4KKyAgICBtb2RlbElkOiBmdW5jdGlv
bihhdHRycykgeworICAgICAgcmV0dXJuIGF0dHJzW3RoaXMubW9kZWwucHJvdG90eXBlLmlkQXR0
cmlidXRlIHx8ICdpZCddOworICAgIH0sCisKKyAgICAvLyBQcml2YXRlIG1ldGhvZCB0byByZXNl
dCBhbGwgaW50ZXJuYWwgc3RhdGUuIENhbGxlZCB3aGVuIHRoZSBjb2xsZWN0aW9uCisgICAgLy8g
aXMgZmlyc3QgaW5pdGlhbGl6ZWQgb3IgcmVzZXQuCisgICAgX3Jlc2V0OiBmdW5jdGlvbigpIHsK
KyAgICAgIHRoaXMubGVuZ3RoID0gMDsKKyAgICAgIHRoaXMubW9kZWxzID0gW107CisgICAgICB0
aGlzLl9ieUlkICA9IHt9OworICAgIH0sCisKKyAgICAvLyBQcmVwYXJlIGEgaGFzaCBvZiBhdHRy
aWJ1dGVzIChvciBvdGhlciBtb2RlbCkgdG8gYmUgYWRkZWQgdG8gdGhpcworICAgIC8vIGNvbGxl
Y3Rpb24uCisgICAgX3ByZXBhcmVNb2RlbDogZnVuY3Rpb24oYXR0cnMsIG9wdGlvbnMpIHsKKyAg
ICAgIGlmICh0aGlzLl9pc01vZGVsKGF0dHJzKSkgeworICAgICAgICBpZiAoIWF0dHJzLmNvbGxl
Y3Rpb24pIGF0dHJzLmNvbGxlY3Rpb24gPSB0aGlzOworICAgICAgICByZXR1cm4gYXR0cnM7Cisg
ICAgICB9CisgICAgICBvcHRpb25zID0gb3B0aW9ucyA/IF8uY2xvbmUob3B0aW9ucykgOiB7fTsK
KyAgICAgIG9wdGlvbnMuY29sbGVjdGlvbiA9IHRoaXM7CisgICAgICB2YXIgbW9kZWwgPSBuZXcg
dGhpcy5tb2RlbChhdHRycywgb3B0aW9ucyk7CisgICAgICBpZiAoIW1vZGVsLnZhbGlkYXRpb25F
cnJvcikgcmV0dXJuIG1vZGVsOworICAgICAgdGhpcy50cmlnZ2VyKCdpbnZhbGlkJywgdGhpcywg
bW9kZWwudmFsaWRhdGlvbkVycm9yLCBvcHRpb25zKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9LAorCisgICAgLy8gSW50ZXJuYWwgbWV0aG9kIGNhbGxlZCBieSBib3RoIHJlbW92ZSBhbmQg
c2V0LgorICAgIF9yZW1vdmVNb2RlbHM6IGZ1bmN0aW9uKG1vZGVscywgb3B0aW9ucykgeworICAg
ICAgdmFyIHJlbW92ZWQgPSBbXTsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kZWxzLmxl
bmd0aDsgaSsrKSB7CisgICAgICAgIHZhciBtb2RlbCA9IHRoaXMuZ2V0KG1vZGVsc1tpXSk7Cisg
ICAgICAgIGlmICghbW9kZWwpIGNvbnRpbnVlOworCisgICAgICAgIHZhciBpbmRleCA9IHRoaXMu
aW5kZXhPZihtb2RlbCk7CisgICAgICAgIHRoaXMubW9kZWxzLnNwbGljZShpbmRleCwgMSk7Cisg
ICAgICAgIHRoaXMubGVuZ3RoLS07CisKKyAgICAgICAgLy8gUmVtb3ZlIHJlZmVyZW5jZXMgYmVm
b3JlIHRyaWdnZXJpbmcgJ3JlbW92ZScgZXZlbnQgdG8gcHJldmVudCBhbgorICAgICAgICAvLyBp
bmZpbml0ZSBsb29wLiAjMzY5MworICAgICAgICBkZWxldGUgdGhpcy5fYnlJZFttb2RlbC5jaWRd
OworICAgICAgICB2YXIgaWQgPSB0aGlzLm1vZGVsSWQobW9kZWwuYXR0cmlidXRlcyk7CisgICAg
ICAgIGlmIChpZCAhPSBudWxsKSBkZWxldGUgdGhpcy5fYnlJZFtpZF07CisKKyAgICAgICAgaWYg
KCFvcHRpb25zLnNpbGVudCkgeworICAgICAgICAgIG9wdGlvbnMuaW5kZXggPSBpbmRleDsKKyAg
ICAgICAgICBtb2RlbC50cmlnZ2VyKCdyZW1vdmUnLCBtb2RlbCwgdGhpcywgb3B0aW9ucyk7Cisg
ICAgICAgIH0KKworICAgICAgICByZW1vdmVkLnB1c2gobW9kZWwpOworICAgICAgICB0aGlzLl9y
ZW1vdmVSZWZlcmVuY2UobW9kZWwsIG9wdGlvbnMpOworICAgICAgfQorICAgICAgcmV0dXJuIHJl
bW92ZWQ7CisgICAgfSwKKworICAgIC8vIE1ldGhvZCBmb3IgY2hlY2tpbmcgd2hldGhlciBhbiBv
YmplY3Qgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSBtb2RlbCBmb3IKKyAgICAvLyB0aGUgcHVycG9z
ZXMgb2YgYWRkaW5nIHRvIHRoZSBjb2xsZWN0aW9uLgorICAgIF9pc01vZGVsOiBmdW5jdGlvbiht
b2RlbCkgeworICAgICAgcmV0dXJuIG1vZGVsIGluc3RhbmNlb2YgTW9kZWw7CisgICAgfSwKKwor
ICAgIC8vIEludGVybmFsIG1ldGhvZCB0byBjcmVhdGUgYSBtb2RlbCdzIHRpZXMgdG8gYSBjb2xs
ZWN0aW9uLgorICAgIF9hZGRSZWZlcmVuY2U6IGZ1bmN0aW9uKG1vZGVsLCBvcHRpb25zKSB7Cisg
ICAgICB0aGlzLl9ieUlkW21vZGVsLmNpZF0gPSBtb2RlbDsKKyAgICAgIHZhciBpZCA9IHRoaXMu
bW9kZWxJZChtb2RlbC5hdHRyaWJ1dGVzKTsKKyAgICAgIGlmIChpZCAhPSBudWxsKSB0aGlzLl9i
eUlkW2lkXSA9IG1vZGVsOworICAgICAgbW9kZWwub24oJ2FsbCcsIHRoaXMuX29uTW9kZWxFdmVu
dCwgdGhpcyk7CisgICAgfSwKKworICAgIC8vIEludGVybmFsIG1ldGhvZCB0byBzZXZlciBhIG1v
ZGVsJ3MgdGllcyB0byBhIGNvbGxlY3Rpb24uCisgICAgX3JlbW92ZVJlZmVyZW5jZTogZnVuY3Rp
b24obW9kZWwsIG9wdGlvbnMpIHsKKyAgICAgIGRlbGV0ZSB0aGlzLl9ieUlkW21vZGVsLmNpZF07
CisgICAgICB2YXIgaWQgPSB0aGlzLm1vZGVsSWQobW9kZWwuYXR0cmlidXRlcyk7CisgICAgICBp
ZiAoaWQgIT0gbnVsbCkgZGVsZXRlIHRoaXMuX2J5SWRbaWRdOworICAgICAgaWYgKHRoaXMgPT09
IG1vZGVsLmNvbGxlY3Rpb24pIGRlbGV0ZSBtb2RlbC5jb2xsZWN0aW9uOworICAgICAgbW9kZWwu
b2ZmKCdhbGwnLCB0aGlzLl9vbk1vZGVsRXZlbnQsIHRoaXMpOworICAgIH0sCisKKyAgICAvLyBJ
bnRlcm5hbCBtZXRob2QgY2FsbGVkIGV2ZXJ5IHRpbWUgYSBtb2RlbCBpbiB0aGUgc2V0IGZpcmVz
IGFuIGV2ZW50LgorICAgIC8vIFNldHMgbmVlZCB0byB1cGRhdGUgdGhlaXIgaW5kZXhlcyB3aGVu
IG1vZGVscyBjaGFuZ2UgaWRzLiBBbGwgb3RoZXIKKyAgICAvLyBldmVudHMgc2ltcGx5IHByb3h5
IHRocm91Z2guICJhZGQiIGFuZCAicmVtb3ZlIiBldmVudHMgdGhhdCBvcmlnaW5hdGUKKyAgICAv
LyBpbiBvdGhlciBjb2xsZWN0aW9ucyBhcmUgaWdub3JlZC4KKyAgICBfb25Nb2RlbEV2ZW50OiBm
dW5jdGlvbihldmVudCwgbW9kZWwsIGNvbGxlY3Rpb24sIG9wdGlvbnMpIHsKKyAgICAgIGlmICht
b2RlbCkgeworICAgICAgICBpZiAoKGV2ZW50ID09PSAnYWRkJyB8fCBldmVudCA9PT0gJ3JlbW92
ZScpICYmIGNvbGxlY3Rpb24gIT09IHRoaXMpIHJldHVybjsKKyAgICAgICAgaWYgKGV2ZW50ID09
PSAnZGVzdHJveScpIHRoaXMucmVtb3ZlKG1vZGVsLCBvcHRpb25zKTsKKyAgICAgICAgaWYgKGV2
ZW50ID09PSAnY2hhbmdlJykgeworICAgICAgICAgIHZhciBwcmV2SWQgPSB0aGlzLm1vZGVsSWQo
bW9kZWwucHJldmlvdXNBdHRyaWJ1dGVzKCkpOworICAgICAgICAgIHZhciBpZCA9IHRoaXMubW9k
ZWxJZChtb2RlbC5hdHRyaWJ1dGVzKTsKKyAgICAgICAgICBpZiAocHJldklkICE9PSBpZCkgewor
ICAgICAgICAgICAgaWYgKHByZXZJZCAhPSBudWxsKSBkZWxldGUgdGhpcy5fYnlJZFtwcmV2SWRd
OworICAgICAgICAgICAgaWYgKGlkICE9IG51bGwpIHRoaXMuX2J5SWRbaWRdID0gbW9kZWw7Cisg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICB0aGlzLnRyaWdnZXIuYXBwbHko
dGhpcywgYXJndW1lbnRzKTsKKyAgICB9CisKKyAgfSk7CisKKyAgLy8gVW5kZXJzY29yZSBtZXRo
b2RzIHRoYXQgd2Ugd2FudCB0byBpbXBsZW1lbnQgb24gdGhlIENvbGxlY3Rpb24uCisgIC8vIDkw
JSBvZiB0aGUgY29yZSB1c2VmdWxuZXNzIG9mIEJhY2tib25lIENvbGxlY3Rpb25zIGlzIGFjdHVh
bGx5IGltcGxlbWVudGVkCisgIC8vIHJpZ2h0IGhlcmU6CisgIHZhciBjb2xsZWN0aW9uTWV0aG9k
cyA9IHtmb3JFYWNoOiAzLCBlYWNoOiAzLCBtYXA6IDMsIGNvbGxlY3Q6IDMsIHJlZHVjZTogMCwK
KyAgICAgIGZvbGRsOiAwLCBpbmplY3Q6IDAsIHJlZHVjZVJpZ2h0OiAwLCBmb2xkcjogMCwgZmlu
ZDogMywgZGV0ZWN0OiAzLCBmaWx0ZXI6IDMsCisgICAgICBzZWxlY3Q6IDMsIHJlamVjdDogMywg
ZXZlcnk6IDMsIGFsbDogMywgc29tZTogMywgYW55OiAzLCBpbmNsdWRlOiAzLCBpbmNsdWRlczog
MywKKyAgICAgIGNvbnRhaW5zOiAzLCBpbnZva2U6IDAsIG1heDogMywgbWluOiAzLCB0b0FycmF5
OiAxLCBzaXplOiAxLCBmaXJzdDogMywKKyAgICAgIGhlYWQ6IDMsIHRha2U6IDMsIGluaXRpYWw6
IDMsIHJlc3Q6IDMsIHRhaWw6IDMsIGRyb3A6IDMsIGxhc3Q6IDMsCisgICAgICB3aXRob3V0OiAw
LCBkaWZmZXJlbmNlOiAwLCBpbmRleE9mOiAzLCBzaHVmZmxlOiAxLCBsYXN0SW5kZXhPZjogMywK
KyAgICAgIGlzRW1wdHk6IDEsIGNoYWluOiAxLCBzYW1wbGU6IDMsIHBhcnRpdGlvbjogMywgZ3Jv
dXBCeTogMywgY291bnRCeTogMywKKyAgICAgIHNvcnRCeTogMywgaW5kZXhCeTogMywgZmluZElu
ZGV4OiAzLCBmaW5kTGFzdEluZGV4OiAzfTsKKworICAvLyBNaXggaW4gZWFjaCBVbmRlcnNjb3Jl
IG1ldGhvZCBhcyBhIHByb3h5IHRvIGBDb2xsZWN0aW9uI21vZGVsc2AuCisgIGFkZFVuZGVyc2Nv
cmVNZXRob2RzKENvbGxlY3Rpb24sIGNvbGxlY3Rpb25NZXRob2RzLCAnbW9kZWxzJyk7CisKKyAg
Ly8gQmFja2JvbmUuVmlldworICAvLyAtLS0tLS0tLS0tLS0tCisKKyAgLy8gQmFja2JvbmUgVmll
d3MgYXJlIGFsbW9zdCBtb3JlIGNvbnZlbnRpb24gdGhhbiB0aGV5IGFyZSBhY3R1YWwgY29kZS4g
QSBWaWV3CisgIC8vIGlzIHNpbXBseSBhIEphdmFTY3JpcHQgb2JqZWN0IHRoYXQgcmVwcmVzZW50
cyBhIGxvZ2ljYWwgY2h1bmsgb2YgVUkgaW4gdGhlCisgIC8vIERPTS4gVGhpcyBtaWdodCBiZSBh
IHNpbmdsZSBpdGVtLCBhbiBlbnRpcmUgbGlzdCwgYSBzaWRlYmFyIG9yIHBhbmVsLCBvcgorICAv
LyBldmVuIHRoZSBzdXJyb3VuZGluZyBmcmFtZSB3aGljaCB3cmFwcyB5b3VyIHdob2xlIGFwcC4g
RGVmaW5pbmcgYSBjaHVuayBvZgorICAvLyBVSSBhcyBhICoqVmlldyoqIGFsbG93cyB5b3UgdG8g
ZGVmaW5lIHlvdXIgRE9NIGV2ZW50cyBkZWNsYXJhdGl2ZWx5LCB3aXRob3V0CisgIC8vIGhhdmlu
ZyB0byB3b3JyeSBhYm91dCByZW5kZXIgb3JkZXIgLi4uIGFuZCBtYWtlcyBpdCBlYXN5IGZvciB0
aGUgdmlldyB0bworICAvLyByZWFjdCB0byBzcGVjaWZpYyBjaGFuZ2VzIGluIHRoZSBzdGF0ZSBv
ZiB5b3VyIG1vZGVscy4KKworICAvLyBDcmVhdGluZyBhIEJhY2tib25lLlZpZXcgY3JlYXRlcyBp
dHMgaW5pdGlhbCBlbGVtZW50IG91dHNpZGUgb2YgdGhlIERPTSwKKyAgLy8gaWYgYW4gZXhpc3Rp
bmcgZWxlbWVudCBpcyBub3QgcHJvdmlkZWQuLi4KKyAgdmFyIFZpZXcgPSBCYWNrYm9uZS5WaWV3
ID0gZnVuY3Rpb24ob3B0aW9ucykgeworICAgIHRoaXMuY2lkID0gXy51bmlxdWVJZCgndmlldycp
OworICAgIF8uZXh0ZW5kKHRoaXMsIF8ucGljayhvcHRpb25zLCB2aWV3T3B0aW9ucykpOworICAg
IHRoaXMuX2Vuc3VyZUVsZW1lbnQoKTsKKyAgICB0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywg
YXJndW1lbnRzKTsKKyAgfTsKKworICAvLyBDYWNoZWQgcmVnZXggdG8gc3BsaXQga2V5cyBmb3Ig
YGRlbGVnYXRlYC4KKyAgdmFyIGRlbGVnYXRlRXZlbnRTcGxpdHRlciA9IC9eKFxTKylccyooLiop
JC87CisKKyAgLy8gTGlzdCBvZiB2aWV3IG9wdGlvbnMgdG8gYmUgc2V0IGFzIHByb3BlcnRpZXMu
CisgIHZhciB2aWV3T3B0aW9ucyA9IFsnbW9kZWwnLCAnY29sbGVjdGlvbicsICdlbCcsICdpZCcs
ICdhdHRyaWJ1dGVzJywgJ2NsYXNzTmFtZScsICd0YWdOYW1lJywgJ2V2ZW50cyddOworCisgIC8v
IFNldCB1cCBhbGwgaW5oZXJpdGFibGUgKipCYWNrYm9uZS5WaWV3KiogcHJvcGVydGllcyBhbmQg
bWV0aG9kcy4KKyAgXy5leHRlbmQoVmlldy5wcm90b3R5cGUsIEV2ZW50cywgeworCisgICAgLy8g
VGhlIGRlZmF1bHQgYHRhZ05hbWVgIG9mIGEgVmlldydzIGVsZW1lbnQgaXMgYCJkaXYiYC4KKyAg
ICB0YWdOYW1lOiAnZGl2JywKKworICAgIC8vIGpRdWVyeSBkZWxlZ2F0ZSBmb3IgZWxlbWVudCBs
b29rdXAsIHNjb3BlZCB0byBET00gZWxlbWVudHMgd2l0aGluIHRoZQorICAgIC8vIGN1cnJlbnQg
dmlldy4gVGhpcyBzaG91bGQgYmUgcHJlZmVycmVkIHRvIGdsb2JhbCBsb29rdXBzIHdoZXJlIHBv
c3NpYmxlLgorICAgICQ6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7CisgICAgICByZXR1cm4gdGhpcy4k
ZWwuZmluZChzZWxlY3Rvcik7CisgICAgfSwKKworICAgIC8vIEluaXRpYWxpemUgaXMgYW4gZW1w
dHkgZnVuY3Rpb24gYnkgZGVmYXVsdC4gT3ZlcnJpZGUgaXQgd2l0aCB5b3VyIG93bgorICAgIC8v
IGluaXRpYWxpemF0aW9uIGxvZ2ljLgorICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCl7fSwKKwor
ICAgIC8vICoqcmVuZGVyKiogaXMgdGhlIGNvcmUgZnVuY3Rpb24gdGhhdCB5b3VyIHZpZXcgc2hv
dWxkIG92ZXJyaWRlLCBpbiBvcmRlcgorICAgIC8vIHRvIHBvcHVsYXRlIGl0cyBlbGVtZW50IChg
dGhpcy5lbGApLCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBIVE1MLiBUaGUKKyAgICAvLyBjb252ZW50
aW9uIGlzIGZvciAqKnJlbmRlcioqIHRvIGFsd2F5cyByZXR1cm4gYHRoaXNgLgorICAgIHJlbmRl
cjogZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgLy8gUmVt
b3ZlIHRoaXMgdmlldyBieSB0YWtpbmcgdGhlIGVsZW1lbnQgb3V0IG9mIHRoZSBET00sIGFuZCBy
ZW1vdmluZyBhbnkKKyAgICAvLyBhcHBsaWNhYmxlIEJhY2tib25lLkV2ZW50cyBsaXN0ZW5lcnMu
CisgICAgcmVtb3ZlOiBmdW5jdGlvbigpIHsKKyAgICAgIHRoaXMuX3JlbW92ZUVsZW1lbnQoKTsK
KyAgICAgIHRoaXMuc3RvcExpc3RlbmluZygpOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwK
KworICAgIC8vIFJlbW92ZSB0aGlzIHZpZXcncyBlbGVtZW50IGZyb20gdGhlIGRvY3VtZW50IGFu
ZCBhbGwgZXZlbnQgbGlzdGVuZXJzCisgICAgLy8gYXR0YWNoZWQgdG8gaXQuIEV4cG9zZWQgZm9y
IHN1YmNsYXNzZXMgdXNpbmcgYW4gYWx0ZXJuYXRpdmUgRE9NCisgICAgLy8gbWFuaXB1bGF0aW9u
IEFQSS4KKyAgICBfcmVtb3ZlRWxlbWVudDogZnVuY3Rpb24oKSB7CisgICAgICB0aGlzLiRlbC5y
ZW1vdmUoKTsKKyAgICB9LAorCisgICAgLy8gQ2hhbmdlIHRoZSB2aWV3J3MgZWxlbWVudCAoYHRo
aXMuZWxgIHByb3BlcnR5KSBhbmQgcmUtZGVsZWdhdGUgdGhlCisgICAgLy8gdmlldydzIGV2ZW50
cyBvbiB0aGUgbmV3IGVsZW1lbnQuCisgICAgc2V0RWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCkg
eworICAgICAgdGhpcy51bmRlbGVnYXRlRXZlbnRzKCk7CisgICAgICB0aGlzLl9zZXRFbGVtZW50
KGVsZW1lbnQpOworICAgICAgdGhpcy5kZWxlZ2F0ZUV2ZW50cygpOworICAgICAgcmV0dXJuIHRo
aXM7CisgICAgfSwKKworICAgIC8vIENyZWF0ZXMgdGhlIGB0aGlzLmVsYCBhbmQgYHRoaXMuJGVs
YCByZWZlcmVuY2VzIGZvciB0aGlzIHZpZXcgdXNpbmcgdGhlCisgICAgLy8gZ2l2ZW4gYGVsYC4g
YGVsYCBjYW4gYmUgYSBDU1Mgc2VsZWN0b3Igb3IgYW4gSFRNTCBzdHJpbmcsIGEgalF1ZXJ5Cisg
ICAgLy8gY29udGV4dCBvciBhbiBlbGVtZW50LiBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB0aGlz
IHRvIHV0aWxpemUgYW4KKyAgICAvLyBhbHRlcm5hdGl2ZSBET00gbWFuaXB1bGF0aW9uIEFQSSBh
bmQgYXJlIG9ubHkgcmVxdWlyZWQgdG8gc2V0IHRoZQorICAgIC8vIGB0aGlzLmVsYCBwcm9wZXJ0
eS4KKyAgICBfc2V0RWxlbWVudDogZnVuY3Rpb24oZWwpIHsKKyAgICAgIHRoaXMuJGVsID0gZWwg
aW5zdGFuY2VvZiBCYWNrYm9uZS4kID8gZWwgOiBCYWNrYm9uZS4kKGVsKTsKKyAgICAgIHRoaXMu
ZWwgPSB0aGlzLiRlbFswXTsKKyAgICB9LAorCisgICAgLy8gU2V0IGNhbGxiYWNrcywgd2hlcmUg
YHRoaXMuZXZlbnRzYCBpcyBhIGhhc2ggb2YKKyAgICAvLworICAgIC8vICp7ImV2ZW50IHNlbGVj
dG9yIjogImNhbGxiYWNrIn0qCisgICAgLy8KKyAgICAvLyAgICAgeworICAgIC8vICAgICAgICdt
b3VzZWRvd24gLnRpdGxlJzogICdlZGl0JywKKyAgICAvLyAgICAgICAnY2xpY2sgLmJ1dHRvbic6
ICAgICAnc2F2ZScsCisgICAgLy8gICAgICAgJ2NsaWNrIC5vcGVuJzogICAgICAgZnVuY3Rpb24o
ZSkgeyAuLi4gfQorICAgIC8vICAgICB9CisgICAgLy8KKyAgICAvLyBwYWlycy4gQ2FsbGJhY2tz
IHdpbGwgYmUgYm91bmQgdG8gdGhlIHZpZXcsIHdpdGggYHRoaXNgIHNldCBwcm9wZXJseS4KKyAg
ICAvLyBVc2VzIGV2ZW50IGRlbGVnYXRpb24gZm9yIGVmZmljaWVuY3kuCisgICAgLy8gT21pdHRp
bmcgdGhlIHNlbGVjdG9yIGJpbmRzIHRoZSBldmVudCB0byBgdGhpcy5lbGAuCisgICAgZGVsZWdh
dGVFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cykgeworICAgICAgZXZlbnRzIHx8IChldmVudHMgPSBf
LnJlc3VsdCh0aGlzLCAnZXZlbnRzJykpOworICAgICAgaWYgKCFldmVudHMpIHJldHVybiB0aGlz
OworICAgICAgdGhpcy51bmRlbGVnYXRlRXZlbnRzKCk7CisgICAgICBmb3IgKHZhciBrZXkgaW4g
ZXZlbnRzKSB7CisgICAgICAgIHZhciBtZXRob2QgPSBldmVudHNba2V5XTsKKyAgICAgICAgaWYg
KCFfLmlzRnVuY3Rpb24obWV0aG9kKSkgbWV0aG9kID0gdGhpc1ttZXRob2RdOworICAgICAgICBp
ZiAoIW1ldGhvZCkgY29udGludWU7CisgICAgICAgIHZhciBtYXRjaCA9IGtleS5tYXRjaChkZWxl
Z2F0ZUV2ZW50U3BsaXR0ZXIpOworICAgICAgICB0aGlzLmRlbGVnYXRlKG1hdGNoWzFdLCBtYXRj
aFsyXSwgXy5iaW5kKG1ldGhvZCwgdGhpcykpOworICAgICAgfQorICAgICAgcmV0dXJuIHRoaXM7
CisgICAgfSwKKworICAgIC8vIEFkZCBhIHNpbmdsZSBldmVudCBsaXN0ZW5lciB0byB0aGUgdmll
dydzIGVsZW1lbnQgKG9yIGEgY2hpbGQgZWxlbWVudAorICAgIC8vIHVzaW5nIGBzZWxlY3RvcmAp
LiBUaGlzIG9ubHkgd29ya3MgZm9yIGRlbGVnYXRlLWFibGUgZXZlbnRzOiBub3QgYGZvY3VzYCwK
KyAgICAvLyBgYmx1cmAsIGFuZCBub3QgYGNoYW5nZWAsIGBzdWJtaXRgLCBhbmQgYHJlc2V0YCBp
biBJbnRlcm5ldCBFeHBsb3Jlci4KKyAgICBkZWxlZ2F0ZTogZnVuY3Rpb24oZXZlbnROYW1lLCBz
ZWxlY3RvciwgbGlzdGVuZXIpIHsKKyAgICAgIHRoaXMuJGVsLm9uKGV2ZW50TmFtZSArICcuZGVs
ZWdhdGVFdmVudHMnICsgdGhpcy5jaWQsIHNlbGVjdG9yLCBsaXN0ZW5lcik7CisgICAgICByZXR1
cm4gdGhpczsKKyAgICB9LAorCisgICAgLy8gQ2xlYXJzIGFsbCBjYWxsYmFja3MgcHJldmlvdXNs
eSBib3VuZCB0byB0aGUgdmlldyBieSBgZGVsZWdhdGVFdmVudHNgLgorICAgIC8vIFlvdSB1c3Vh
bGx5IGRvbid0IG5lZWQgdG8gdXNlIHRoaXMsIGJ1dCBtYXkgd2lzaCB0byBpZiB5b3UgaGF2ZSBt
dWx0aXBsZQorICAgIC8vIEJhY2tib25lIHZpZXdzIGF0dGFjaGVkIHRvIHRoZSBzYW1lIERPTSBl
bGVtZW50LgorICAgIHVuZGVsZWdhdGVFdmVudHM6IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKHRo
aXMuJGVsKSB0aGlzLiRlbC5vZmYoJy5kZWxlZ2F0ZUV2ZW50cycgKyB0aGlzLmNpZCk7CisgICAg
ICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgLy8gQSBmaW5lci1ncmFpbmVkIGB1bmRlbGVn
YXRlRXZlbnRzYCBmb3IgcmVtb3ZpbmcgYSBzaW5nbGUgZGVsZWdhdGVkIGV2ZW50LgorICAgIC8v
IGBzZWxlY3RvcmAgYW5kIGBsaXN0ZW5lcmAgYXJlIGJvdGggb3B0aW9uYWwuCisgICAgdW5kZWxl
Z2F0ZTogZnVuY3Rpb24oZXZlbnROYW1lLCBzZWxlY3RvciwgbGlzdGVuZXIpIHsKKyAgICAgIHRo
aXMuJGVsLm9mZihldmVudE5hbWUgKyAnLmRlbGVnYXRlRXZlbnRzJyArIHRoaXMuY2lkLCBzZWxl
Y3RvciwgbGlzdGVuZXIpOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIC8vIFBy
b2R1Y2VzIGEgRE9NIGVsZW1lbnQgdG8gYmUgYXNzaWduZWQgdG8geW91ciB2aWV3LiBFeHBvc2Vk
IGZvcgorICAgIC8vIHN1YmNsYXNzZXMgdXNpbmcgYW4gYWx0ZXJuYXRpdmUgRE9NIG1hbmlwdWxh
dGlvbiBBUEkuCisgICAgX2NyZWF0ZUVsZW1lbnQ6IGZ1bmN0aW9uKHRhZ05hbWUpIHsKKyAgICAg
IHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOworICAgIH0sCisKKyAgICAv
LyBFbnN1cmUgdGhhdCB0aGUgVmlldyBoYXMgYSBET00gZWxlbWVudCB0byByZW5kZXIgaW50by4K
KyAgICAvLyBJZiBgdGhpcy5lbGAgaXMgYSBzdHJpbmcsIHBhc3MgaXQgdGhyb3VnaCBgJCgpYCwg
dGFrZSB0aGUgZmlyc3QKKyAgICAvLyBtYXRjaGluZyBlbGVtZW50LCBhbmQgcmUtYXNzaWduIGl0
IHRvIGBlbGAuIE90aGVyd2lzZSwgY3JlYXRlCisgICAgLy8gYW4gZWxlbWVudCBmcm9tIHRoZSBg
aWRgLCBgY2xhc3NOYW1lYCBhbmQgYHRhZ05hbWVgIHByb3BlcnRpZXMuCisgICAgX2Vuc3VyZUVs
ZW1lbnQ6IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKCF0aGlzLmVsKSB7CisgICAgICAgIHZhciBh
dHRycyA9IF8uZXh0ZW5kKHt9LCBfLnJlc3VsdCh0aGlzLCAnYXR0cmlidXRlcycpKTsKKyAgICAg
ICAgaWYgKHRoaXMuaWQpIGF0dHJzLmlkID0gXy5yZXN1bHQodGhpcywgJ2lkJyk7CisgICAgICAg
IGlmICh0aGlzLmNsYXNzTmFtZSkgYXR0cnNbJ2NsYXNzJ10gPSBfLnJlc3VsdCh0aGlzLCAnY2xh
c3NOYW1lJyk7CisgICAgICAgIHRoaXMuc2V0RWxlbWVudCh0aGlzLl9jcmVhdGVFbGVtZW50KF8u
cmVzdWx0KHRoaXMsICd0YWdOYW1lJykpKTsKKyAgICAgICAgdGhpcy5fc2V0QXR0cmlidXRlcyhh
dHRycyk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLnNldEVsZW1lbnQoXy5yZXN1bHQo
dGhpcywgJ2VsJykpOworICAgICAgfQorICAgIH0sCisKKyAgICAvLyBTZXQgYXR0cmlidXRlcyBm
cm9tIGEgaGFzaCBvbiB0aGlzIHZpZXcncyBlbGVtZW50LiAgRXhwb3NlZCBmb3IKKyAgICAvLyBz
dWJjbGFzc2VzIHVzaW5nIGFuIGFsdGVybmF0aXZlIERPTSBtYW5pcHVsYXRpb24gQVBJLgorICAg
IF9zZXRBdHRyaWJ1dGVzOiBmdW5jdGlvbihhdHRyaWJ1dGVzKSB7CisgICAgICB0aGlzLiRlbC5h
dHRyKGF0dHJpYnV0ZXMpOworICAgIH0KKworICB9KTsKKworICAvLyBCYWNrYm9uZS5zeW5jCisg
IC8vIC0tLS0tLS0tLS0tLS0KKworICAvLyBPdmVycmlkZSB0aGlzIGZ1bmN0aW9uIHRvIGNoYW5n
ZSB0aGUgbWFubmVyIGluIHdoaWNoIEJhY2tib25lIHBlcnNpc3RzCisgIC8vIG1vZGVscyB0byB0
aGUgc2VydmVyLiBZb3Ugd2lsbCBiZSBwYXNzZWQgdGhlIHR5cGUgb2YgcmVxdWVzdCwgYW5kIHRo
ZQorICAvLyBtb2RlbCBpbiBxdWVzdGlvbi4gQnkgZGVmYXVsdCwgbWFrZXMgYSBSRVNUZnVsIEFq
YXggcmVxdWVzdAorICAvLyB0byB0aGUgbW9kZWwncyBgdXJsKClgLiBTb21lIHBvc3NpYmxlIGN1
c3RvbWl6YXRpb25zIGNvdWxkIGJlOgorICAvLworICAvLyAqIFVzZSBgc2V0VGltZW91dGAgdG8g
YmF0Y2ggcmFwaWQtZmlyZSB1cGRhdGVzIGludG8gYSBzaW5nbGUgcmVxdWVzdC4KKyAgLy8gKiBT
ZW5kIHVwIHRoZSBtb2RlbHMgYXMgWE1MIGluc3RlYWQgb2YgSlNPTi4KKyAgLy8gKiBQZXJzaXN0
IG1vZGVscyB2aWEgV2ViU29ja2V0cyBpbnN0ZWFkIG9mIEFqYXguCisgIC8vCisgIC8vIFR1cm4g
b24gYEJhY2tib25lLmVtdWxhdGVIVFRQYCBpbiBvcmRlciB0byBzZW5kIGBQVVRgIGFuZCBgREVM
RVRFYCByZXF1ZXN0cworICAvLyBhcyBgUE9TVGAsIHdpdGggYSBgX21ldGhvZGAgcGFyYW1ldGVy
IGNvbnRhaW5pbmcgdGhlIHRydWUgSFRUUCBtZXRob2QsCisgIC8vIGFzIHdlbGwgYXMgYWxsIHJl
cXVlc3RzIHdpdGggdGhlIGJvZHkgYXMgYGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2Rl
ZGAKKyAgLy8gaW5zdGVhZCBvZiBgYXBwbGljYXRpb24vanNvbmAgd2l0aCB0aGUgbW9kZWwgaW4g
YSBwYXJhbSBuYW1lZCBgbW9kZWxgLgorICAvLyBVc2VmdWwgd2hlbiBpbnRlcmZhY2luZyB3aXRo
IHNlcnZlci1zaWRlIGxhbmd1YWdlcyBsaWtlICoqUEhQKiogdGhhdCBtYWtlCisgIC8vIGl0IGRp
ZmZpY3VsdCB0byByZWFkIHRoZSBib2R5IG9mIGBQVVRgIHJlcXVlc3RzLgorICBCYWNrYm9uZS5z
eW5jID0gZnVuY3Rpb24obWV0aG9kLCBtb2RlbCwgb3B0aW9ucykgeworICAgIHZhciB0eXBlID0g
bWV0aG9kTWFwW21ldGhvZF07CisKKyAgICAvLyBEZWZhdWx0IG9wdGlvbnMsIHVubGVzcyBzcGVj
aWZpZWQuCisgICAgXy5kZWZhdWx0cyhvcHRpb25zIHx8IChvcHRpb25zID0ge30pLCB7CisgICAg
ICBlbXVsYXRlSFRUUDogQmFja2JvbmUuZW11bGF0ZUhUVFAsCisgICAgICBlbXVsYXRlSlNPTjog
QmFja2JvbmUuZW11bGF0ZUpTT04KKyAgICB9KTsKKworICAgIC8vIERlZmF1bHQgSlNPTi1yZXF1
ZXN0IG9wdGlvbnMuCisgICAgdmFyIHBhcmFtcyA9IHt0eXBlOiB0eXBlLCBkYXRhVHlwZTogJ2pz
b24nfTsKKworICAgIC8vIEVuc3VyZSB0aGF0IHdlIGhhdmUgYSBVUkwuCisgICAgaWYgKCFvcHRp
b25zLnVybCkgeworICAgICAgcGFyYW1zLnVybCA9IF8ucmVzdWx0KG1vZGVsLCAndXJsJykgfHwg
dXJsRXJyb3IoKTsKKyAgICB9CisKKyAgICAvLyBFbnN1cmUgdGhhdCB3ZSBoYXZlIHRoZSBhcHBy
b3ByaWF0ZSByZXF1ZXN0IGRhdGEuCisgICAgaWYgKG9wdGlvbnMuZGF0YSA9PSBudWxsICYmIG1v
ZGVsICYmIChtZXRob2QgPT09ICdjcmVhdGUnIHx8IG1ldGhvZCA9PT0gJ3VwZGF0ZScgfHwgbWV0
aG9kID09PSAncGF0Y2gnKSkgeworICAgICAgcGFyYW1zLmNvbnRlbnRUeXBlID0gJ2FwcGxpY2F0
aW9uL2pzb24nOworICAgICAgcGFyYW1zLmRhdGEgPSBKU09OLnN0cmluZ2lmeShvcHRpb25zLmF0
dHJzIHx8IG1vZGVsLnRvSlNPTihvcHRpb25zKSk7CisgICAgfQorCisgICAgLy8gRm9yIG9sZGVy
IHNlcnZlcnMsIGVtdWxhdGUgSlNPTiBieSBlbmNvZGluZyB0aGUgcmVxdWVzdCBpbnRvIGFuIEhU
TUwtZm9ybS4KKyAgICBpZiAob3B0aW9ucy5lbXVsYXRlSlNPTikgeworICAgICAgcGFyYW1zLmNv
bnRlbnRUeXBlID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc7CisgICAgICBw
YXJhbXMuZGF0YSA9IHBhcmFtcy5kYXRhID8ge21vZGVsOiBwYXJhbXMuZGF0YX0gOiB7fTsKKyAg
ICB9CisKKyAgICAvLyBGb3Igb2xkZXIgc2VydmVycywgZW11bGF0ZSBIVFRQIGJ5IG1pbWlja2lu
ZyB0aGUgSFRUUCBtZXRob2Qgd2l0aCBgX21ldGhvZGAKKyAgICAvLyBBbmQgYW4gYFgtSFRUUC1N
ZXRob2QtT3ZlcnJpZGVgIGhlYWRlci4KKyAgICBpZiAob3B0aW9ucy5lbXVsYXRlSFRUUCAmJiAo
dHlwZSA9PT0gJ1BVVCcgfHwgdHlwZSA9PT0gJ0RFTEVURScgfHwgdHlwZSA9PT0gJ1BBVENIJykp
IHsKKyAgICAgIHBhcmFtcy50eXBlID0gJ1BPU1QnOworICAgICAgaWYgKG9wdGlvbnMuZW11bGF0
ZUpTT04pIHBhcmFtcy5kYXRhLl9tZXRob2QgPSB0eXBlOworICAgICAgdmFyIGJlZm9yZVNlbmQg
PSBvcHRpb25zLmJlZm9yZVNlbmQ7CisgICAgICBvcHRpb25zLmJlZm9yZVNlbmQgPSBmdW5jdGlv
bih4aHIpIHsKKyAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ1gtSFRUUC1NZXRob2QtT3Zl
cnJpZGUnLCB0eXBlKTsKKyAgICAgICAgaWYgKGJlZm9yZVNlbmQpIHJldHVybiBiZWZvcmVTZW5k
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICB9OworICAgIH0KKworICAgIC8vIERvbid0
IHByb2Nlc3MgZGF0YSBvbiBhIG5vbi1HRVQgcmVxdWVzdC4KKyAgICBpZiAocGFyYW1zLnR5cGUg
IT09ICdHRVQnICYmICFvcHRpb25zLmVtdWxhdGVKU09OKSB7CisgICAgICBwYXJhbXMucHJvY2Vz
c0RhdGEgPSBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBQYXNzIGFsb25nIGB0ZXh0U3RhdHVzYCBh
bmQgYGVycm9yVGhyb3duYCBmcm9tIGpRdWVyeS4KKyAgICB2YXIgZXJyb3IgPSBvcHRpb25zLmVy
cm9yOworICAgIG9wdGlvbnMuZXJyb3IgPSBmdW5jdGlvbih4aHIsIHRleHRTdGF0dXMsIGVycm9y
VGhyb3duKSB7CisgICAgICBvcHRpb25zLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzOworICAgICAg
b3B0aW9ucy5lcnJvclRocm93biA9IGVycm9yVGhyb3duOworICAgICAgaWYgKGVycm9yKSBlcnJv
ci5jYWxsKG9wdGlvbnMuY29udGV4dCwgeGhyLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bik7Cisg
ICAgfTsKKworICAgIC8vIE1ha2UgdGhlIHJlcXVlc3QsIGFsbG93aW5nIHRoZSB1c2VyIHRvIG92
ZXJyaWRlIGFueSBBamF4IG9wdGlvbnMuCisgICAgdmFyIHhociA9IG9wdGlvbnMueGhyID0gQmFj
a2JvbmUuYWpheChfLmV4dGVuZChwYXJhbXMsIG9wdGlvbnMpKTsKKyAgICBtb2RlbC50cmlnZ2Vy
KCdyZXF1ZXN0JywgbW9kZWwsIHhociwgb3B0aW9ucyk7CisgICAgcmV0dXJuIHhocjsKKyAgfTsK
KworICAvLyBNYXAgZnJvbSBDUlVEIHRvIEhUVFAgZm9yIG91ciBkZWZhdWx0IGBCYWNrYm9uZS5z
eW5jYCBpbXBsZW1lbnRhdGlvbi4KKyAgdmFyIG1ldGhvZE1hcCA9IHsKKyAgICAnY3JlYXRlJzog
J1BPU1QnLAorICAgICd1cGRhdGUnOiAnUFVUJywKKyAgICAncGF0Y2gnOiAnUEFUQ0gnLAorICAg
ICdkZWxldGUnOiAnREVMRVRFJywKKyAgICAncmVhZCc6ICdHRVQnCisgIH07CisKKyAgLy8gU2V0
IHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGBCYWNrYm9uZS5hamF4YCB0byBwcm94eSB0
aHJvdWdoIHRvIGAkYC4KKyAgLy8gT3ZlcnJpZGUgdGhpcyBpZiB5b3UnZCBsaWtlIHRvIHVzZSBh
IGRpZmZlcmVudCBsaWJyYXJ5LgorICBCYWNrYm9uZS5hamF4ID0gZnVuY3Rpb24oKSB7CisgICAg
cmV0dXJuIEJhY2tib25lLiQuYWpheC5hcHBseShCYWNrYm9uZS4kLCBhcmd1bWVudHMpOworICB9
OworCisgIC8vIEJhY2tib25lLlJvdXRlcgorICAvLyAtLS0tLS0tLS0tLS0tLS0KKworICAvLyBS
b3V0ZXJzIG1hcCBmYXV4LVVSTHMgdG8gYWN0aW9ucywgYW5kIGZpcmUgZXZlbnRzIHdoZW4gcm91
dGVzIGFyZQorICAvLyBtYXRjaGVkLiBDcmVhdGluZyBhIG5ldyBvbmUgc2V0cyBpdHMgYHJvdXRl
c2AgaGFzaCwgaWYgbm90IHNldCBzdGF0aWNhbGx5LgorICB2YXIgUm91dGVyID0gQmFja2JvbmUu
Um91dGVyID0gZnVuY3Rpb24ob3B0aW9ucykgeworICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7
fSk7CisgICAgaWYgKG9wdGlvbnMucm91dGVzKSB0aGlzLnJvdXRlcyA9IG9wdGlvbnMucm91dGVz
OworICAgIHRoaXMuX2JpbmRSb3V0ZXMoKTsKKyAgICB0aGlzLmluaXRpYWxpemUuYXBwbHkodGhp
cywgYXJndW1lbnRzKTsKKyAgfTsKKworICAvLyBDYWNoZWQgcmVndWxhciBleHByZXNzaW9ucyBm
b3IgbWF0Y2hpbmcgbmFtZWQgcGFyYW0gcGFydHMgYW5kIHNwbGF0dGVkCisgIC8vIHBhcnRzIG9m
IHJvdXRlIHN0cmluZ3MuCisgIHZhciBvcHRpb25hbFBhcmFtID0gL1woKC4qPylcKS9nOworICB2
YXIgbmFtZWRQYXJhbSAgICA9IC8oXChcPyk/Olx3Ky9nOworICB2YXIgc3BsYXRQYXJhbSAgICA9
IC9cKlx3Ky9nOworICB2YXIgZXNjYXBlUmVnRXhwICA9IC9bXC17fVxbXF0rPy4sXFxcXiR8I1xz
XS9nOworCisgIC8vIFNldCB1cCBhbGwgaW5oZXJpdGFibGUgKipCYWNrYm9uZS5Sb3V0ZXIqKiBw
cm9wZXJ0aWVzIGFuZCBtZXRob2RzLgorICBfLmV4dGVuZChSb3V0ZXIucHJvdG90eXBlLCBFdmVu
dHMsIHsKKworICAgIC8vIEluaXRpYWxpemUgaXMgYW4gZW1wdHkgZnVuY3Rpb24gYnkgZGVmYXVs
dC4gT3ZlcnJpZGUgaXQgd2l0aCB5b3VyIG93bgorICAgIC8vIGluaXRpYWxpemF0aW9uIGxvZ2lj
LgorICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCl7fSwKKworICAgIC8vIE1hbnVhbGx5IGJpbmQg
YSBzaW5nbGUgbmFtZWQgcm91dGUgdG8gYSBjYWxsYmFjay4gRm9yIGV4YW1wbGU6CisgICAgLy8K
KyAgICAvLyAgICAgdGhpcy5yb3V0ZSgnc2VhcmNoLzpxdWVyeS9wOm51bScsICdzZWFyY2gnLCBm
dW5jdGlvbihxdWVyeSwgbnVtKSB7CisgICAgLy8gICAgICAgLi4uCisgICAgLy8gICAgIH0pOwor
ICAgIC8vCisgICAgcm91dGU6IGZ1bmN0aW9uKHJvdXRlLCBuYW1lLCBjYWxsYmFjaykgeworICAg
ICAgaWYgKCFfLmlzUmVnRXhwKHJvdXRlKSkgcm91dGUgPSB0aGlzLl9yb3V0ZVRvUmVnRXhwKHJv
dXRlKTsKKyAgICAgIGlmIChfLmlzRnVuY3Rpb24obmFtZSkpIHsKKyAgICAgICAgY2FsbGJhY2sg
PSBuYW1lOworICAgICAgICBuYW1lID0gJyc7CisgICAgICB9CisgICAgICBpZiAoIWNhbGxiYWNr
KSBjYWxsYmFjayA9IHRoaXNbbmFtZV07CisgICAgICB2YXIgcm91dGVyID0gdGhpczsKKyAgICAg
IEJhY2tib25lLmhpc3Rvcnkucm91dGUocm91dGUsIGZ1bmN0aW9uKGZyYWdtZW50KSB7CisgICAg
ICAgIHZhciBhcmdzID0gcm91dGVyLl9leHRyYWN0UGFyYW1ldGVycyhyb3V0ZSwgZnJhZ21lbnQp
OworICAgICAgICBpZiAocm91dGVyLmV4ZWN1dGUoY2FsbGJhY2ssIGFyZ3MsIG5hbWUpICE9PSBm
YWxzZSkgeworICAgICAgICAgIHJvdXRlci50cmlnZ2VyLmFwcGx5KHJvdXRlciwgWydyb3V0ZTon
ICsgbmFtZV0uY29uY2F0KGFyZ3MpKTsKKyAgICAgICAgICByb3V0ZXIudHJpZ2dlcigncm91dGUn
LCBuYW1lLCBhcmdzKTsKKyAgICAgICAgICBCYWNrYm9uZS5oaXN0b3J5LnRyaWdnZXIoJ3JvdXRl
Jywgcm91dGVyLCBuYW1lLCBhcmdzKTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgICByZXR1
cm4gdGhpczsKKyAgICB9LAorCisgICAgLy8gRXhlY3V0ZSBhIHJvdXRlIGhhbmRsZXIgd2l0aCB0
aGUgcHJvdmlkZWQgcGFyYW1ldGVycy4gIFRoaXMgaXMgYW4KKyAgICAvLyBleGNlbGxlbnQgcGxh
Y2UgdG8gZG8gcHJlLXJvdXRlIHNldHVwIG9yIHBvc3Qtcm91dGUgY2xlYW51cC4KKyAgICBleGVj
dXRlOiBmdW5jdGlvbihjYWxsYmFjaywgYXJncywgbmFtZSkgeworICAgICAgaWYgKGNhbGxiYWNr
KSBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmdzKTsKKyAgICB9LAorCisgICAgLy8gU2ltcGxlIHBy
b3h5IHRvIGBCYWNrYm9uZS5oaXN0b3J5YCB0byBzYXZlIGEgZnJhZ21lbnQgaW50byB0aGUgaGlz
dG9yeS4KKyAgICBuYXZpZ2F0ZTogZnVuY3Rpb24oZnJhZ21lbnQsIG9wdGlvbnMpIHsKKyAgICAg
IEJhY2tib25lLmhpc3RvcnkubmF2aWdhdGUoZnJhZ21lbnQsIG9wdGlvbnMpOworICAgICAgcmV0
dXJuIHRoaXM7CisgICAgfSwKKworICAgIC8vIEJpbmQgYWxsIGRlZmluZWQgcm91dGVzIHRvIGBC
YWNrYm9uZS5oaXN0b3J5YC4gV2UgaGF2ZSB0byByZXZlcnNlIHRoZQorICAgIC8vIG9yZGVyIG9m
IHRoZSByb3V0ZXMgaGVyZSB0byBzdXBwb3J0IGJlaGF2aW9yIHdoZXJlIHRoZSBtb3N0IGdlbmVy
YWwKKyAgICAvLyByb3V0ZXMgY2FuIGJlIGRlZmluZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgcm91
dGUgbWFwLgorICAgIF9iaW5kUm91dGVzOiBmdW5jdGlvbigpIHsKKyAgICAgIGlmICghdGhpcy5y
b3V0ZXMpIHJldHVybjsKKyAgICAgIHRoaXMucm91dGVzID0gXy5yZXN1bHQodGhpcywgJ3JvdXRl
cycpOworICAgICAgdmFyIHJvdXRlLCByb3V0ZXMgPSBfLmtleXModGhpcy5yb3V0ZXMpOworICAg
ICAgd2hpbGUgKChyb3V0ZSA9IHJvdXRlcy5wb3AoKSkgIT0gbnVsbCkgeworICAgICAgICB0aGlz
LnJvdXRlKHJvdXRlLCB0aGlzLnJvdXRlc1tyb3V0ZV0pOworICAgICAgfQorICAgIH0sCisKKyAg
ICAvLyBDb252ZXJ0IGEgcm91dGUgc3RyaW5nIGludG8gYSByZWd1bGFyIGV4cHJlc3Npb24sIHN1
aXRhYmxlIGZvciBtYXRjaGluZworICAgIC8vIGFnYWluc3QgdGhlIGN1cnJlbnQgbG9jYXRpb24g
aGFzaC4KKyAgICBfcm91dGVUb1JlZ0V4cDogZnVuY3Rpb24ocm91dGUpIHsKKyAgICAgIHJvdXRl
ID0gcm91dGUucmVwbGFjZShlc2NhcGVSZWdFeHAsICdcXCQmJykKKyAgICAgICAgICAgICAgICAg
ICAucmVwbGFjZShvcHRpb25hbFBhcmFtLCAnKD86JDEpPycpCisgICAgICAgICAgICAgICAgICAg
LnJlcGxhY2UobmFtZWRQYXJhbSwgZnVuY3Rpb24obWF0Y2gsIG9wdGlvbmFsKSB7CisgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uYWwgPyBtYXRjaCA6ICcoW14vP10rKSc7CisgICAg
ICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAgICAucmVwbGFjZShzcGxhdFBhcmFt
LCAnKFteP10qPyknKTsKKyAgICAgIHJldHVybiBuZXcgUmVnRXhwKCdeJyArIHJvdXRlICsgJyg/
OlxcPyhbXFxzXFxTXSopKT8kJyk7CisgICAgfSwKKworICAgIC8vIEdpdmVuIGEgcm91dGUsIGFu
ZCBhIFVSTCBmcmFnbWVudCB0aGF0IGl0IG1hdGNoZXMsIHJldHVybiB0aGUgYXJyYXkgb2YKKyAg
ICAvLyBleHRyYWN0ZWQgZGVjb2RlZCBwYXJhbWV0ZXJzLiBFbXB0eSBvciB1bm1hdGNoZWQgcGFy
YW1ldGVycyB3aWxsIGJlCisgICAgLy8gdHJlYXRlZCBhcyBgbnVsbGAgdG8gbm9ybWFsaXplIGNy
b3NzLWJyb3dzZXIgYmVoYXZpb3IuCisgICAgX2V4dHJhY3RQYXJhbWV0ZXJzOiBmdW5jdGlvbihy
b3V0ZSwgZnJhZ21lbnQpIHsKKyAgICAgIHZhciBwYXJhbXMgPSByb3V0ZS5leGVjKGZyYWdtZW50
KS5zbGljZSgxKTsKKyAgICAgIHJldHVybiBfLm1hcChwYXJhbXMsIGZ1bmN0aW9uKHBhcmFtLCBp
KSB7CisgICAgICAgIC8vIERvbid0IGRlY29kZSB0aGUgc2VhcmNoIHBhcmFtcy4KKyAgICAgICAg
aWYgKGkgPT09IHBhcmFtcy5sZW5ndGggLSAxKSByZXR1cm4gcGFyYW0gfHwgbnVsbDsKKyAgICAg
ICAgcmV0dXJuIHBhcmFtID8gZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtKSA6IG51bGw7CisgICAg
ICB9KTsKKyAgICB9CisKKyAgfSk7CisKKyAgLy8gQmFja2JvbmUuSGlzdG9yeQorICAvLyAtLS0t
LS0tLS0tLS0tLS0tCisKKyAgLy8gSGFuZGxlcyBjcm9zcy1icm93c2VyIGhpc3RvcnkgbWFuYWdl
bWVudCwgYmFzZWQgb24gZWl0aGVyCisgIC8vIFtwdXNoU3RhdGVdKGh0dHA6Ly9kaXZlaW50b2h0
bWw1LmluZm8vaGlzdG9yeS5odG1sKSBhbmQgcmVhbCBVUkxzLCBvcgorICAvLyBbb25oYXNoY2hh
bmdlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0RPTS93aW5kb3cu
b25oYXNoY2hhbmdlKQorICAvLyBhbmQgVVJMIGZyYWdtZW50cy4gSWYgdGhlIGJyb3dzZXIgc3Vw
cG9ydHMgbmVpdGhlciAob2xkIElFLCBuYXRjaCksCisgIC8vIGZhbGxzIGJhY2sgdG8gcG9sbGlu
Zy4KKyAgdmFyIEhpc3RvcnkgPSBCYWNrYm9uZS5IaXN0b3J5ID0gZnVuY3Rpb24oKSB7CisgICAg
dGhpcy5oYW5kbGVycyA9IFtdOworICAgIHRoaXMuY2hlY2tVcmwgPSBfLmJpbmQodGhpcy5jaGVj
a1VybCwgdGhpcyk7CisKKyAgICAvLyBFbnN1cmUgdGhhdCBgSGlzdG9yeWAgY2FuIGJlIHVzZWQg
b3V0c2lkZSBvZiB0aGUgYnJvd3Nlci4KKyAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVm
aW5lZCcpIHsKKyAgICAgIHRoaXMubG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247CisgICAgICB0
aGlzLmhpc3RvcnkgPSB3aW5kb3cuaGlzdG9yeTsKKyAgICB9CisgIH07CisKKyAgLy8gQ2FjaGVk
IHJlZ2V4IGZvciBzdHJpcHBpbmcgYSBsZWFkaW5nIGhhc2gvc2xhc2ggYW5kIHRyYWlsaW5nIHNw
YWNlLgorICB2YXIgcm91dGVTdHJpcHBlciA9IC9eWyNcL118XHMrJC9nOworCisgIC8vIENhY2hl
ZCByZWdleCBmb3Igc3RyaXBwaW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMuCisgIHZh
ciByb290U3RyaXBwZXIgPSAvXlwvK3xcLyskL2c7CisKKyAgLy8gQ2FjaGVkIHJlZ2V4IGZvciBz
dHJpcHBpbmcgdXJscyBvZiBoYXNoLgorICB2YXIgcGF0aFN0cmlwcGVyID0gLyMuKiQvOworCisg
IC8vIEhhcyB0aGUgaGlzdG9yeSBoYW5kbGluZyBhbHJlYWR5IGJlZW4gc3RhcnRlZD8KKyAgSGlz
dG9yeS5zdGFydGVkID0gZmFsc2U7CisKKyAgLy8gU2V0IHVwIGFsbCBpbmhlcml0YWJsZSAqKkJh
Y2tib25lLkhpc3RvcnkqKiBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLgorICBfLmV4dGVuZChIaXN0
b3J5LnByb3RvdHlwZSwgRXZlbnRzLCB7CisKKyAgICAvLyBUaGUgZGVmYXVsdCBpbnRlcnZhbCB0
byBwb2xsIGZvciBoYXNoIGNoYW5nZXMsIGlmIG5lY2Vzc2FyeSwgaXMKKyAgICAvLyB0d2VudHkg
dGltZXMgYSBzZWNvbmQuCisgICAgaW50ZXJ2YWw6IDUwLAorCisgICAgLy8gQXJlIHdlIGF0IHRo
ZSBhcHAgcm9vdD8KKyAgICBhdFJvb3Q6IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIHBhdGggPSB0
aGlzLmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1teXC9dJC8sICckJi8nKTsKKyAgICAgIHJl
dHVybiBwYXRoID09PSB0aGlzLnJvb3QgJiYgIXRoaXMuZ2V0U2VhcmNoKCk7CisgICAgfSwKKwor
ICAgIC8vIERvZXMgdGhlIHBhdGhuYW1lIG1hdGNoIHRoZSByb290PworICAgIG1hdGNoUm9vdDog
ZnVuY3Rpb24oKSB7CisgICAgICB2YXIgcGF0aCA9IHRoaXMuZGVjb2RlRnJhZ21lbnQodGhpcy5s
b2NhdGlvbi5wYXRobmFtZSk7CisgICAgICB2YXIgcm9vdFBhdGggPSBwYXRoLnNsaWNlKDAsIHRo
aXMucm9vdC5sZW5ndGggLSAxKSArICcvJzsKKyAgICAgIHJldHVybiByb290UGF0aCA9PT0gdGhp
cy5yb290OworICAgIH0sCisKKyAgICAvLyBVbmljb2RlIGNoYXJhY3RlcnMgaW4gYGxvY2F0aW9u
LnBhdGhuYW1lYCBhcmUgcGVyY2VudCBlbmNvZGVkIHNvIHRoZXkncmUKKyAgICAvLyBkZWNvZGVk
IGZvciBjb21wYXJpc29uLiBgJTI1YCBzaG91bGQgbm90IGJlIGRlY29kZWQgc2luY2UgaXQgbWF5
IGJlIHBhcnQKKyAgICAvLyBvZiBhbiBlbmNvZGVkIHBhcmFtZXRlci4KKyAgICBkZWNvZGVGcmFn
bWVudDogZnVuY3Rpb24oZnJhZ21lbnQpIHsKKyAgICAgIHJldHVybiBkZWNvZGVVUkkoZnJhZ21l
bnQucmVwbGFjZSgvJTI1L2csICclMjUyNScpKTsKKyAgICB9LAorCisgICAgLy8gSW4gSUU2LCB0
aGUgaGFzaCBmcmFnbWVudCBhbmQgc2VhcmNoIHBhcmFtcyBhcmUgaW5jb3JyZWN0IGlmIHRoZQor
ICAgIC8vIGZyYWdtZW50IGNvbnRhaW5zIGA/YC4KKyAgICBnZXRTZWFyY2g6IGZ1bmN0aW9uKCkg
eworICAgICAgdmFyIG1hdGNoID0gdGhpcy5sb2NhdGlvbi5ocmVmLnJlcGxhY2UoLyMuKi8sICcn
KS5tYXRjaCgvXD8uKy8pOworICAgICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMF0gOiAnJzsKKyAg
ICB9LAorCisgICAgLy8gR2V0cyB0aGUgdHJ1ZSBoYXNoIHZhbHVlLiBDYW5ub3QgdXNlIGxvY2F0
aW9uLmhhc2ggZGlyZWN0bHkgZHVlIHRvIGJ1ZworICAgIC8vIGluIEZpcmVmb3ggd2hlcmUgbG9j
YXRpb24uaGFzaCB3aWxsIGFsd2F5cyBiZSBkZWNvZGVkLgorICAgIGdldEhhc2g6IGZ1bmN0aW9u
KHdpbmRvdykgeworICAgICAgdmFyIG1hdGNoID0gKHdpbmRvdyB8fCB0aGlzKS5sb2NhdGlvbi5o
cmVmLm1hdGNoKC8jKC4qKSQvKTsKKyAgICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogJyc7
CisgICAgfSwKKworICAgIC8vIEdldCB0aGUgcGF0aG5hbWUgYW5kIHNlYXJjaCBwYXJhbXMsIHdp
dGhvdXQgdGhlIHJvb3QuCisgICAgZ2V0UGF0aDogZnVuY3Rpb24oKSB7CisgICAgICB2YXIgcGF0
aCA9IHRoaXMuZGVjb2RlRnJhZ21lbnQoCisgICAgICAgIHRoaXMubG9jYXRpb24ucGF0aG5hbWUg
KyB0aGlzLmdldFNlYXJjaCgpCisgICAgICApLnNsaWNlKHRoaXMucm9vdC5sZW5ndGggLSAxKTsK
KyAgICAgIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nID8gcGF0aC5zbGljZSgxKSA6IHBh
dGg7CisgICAgfSwKKworICAgIC8vIEdldCB0aGUgY3Jvc3MtYnJvd3NlciBub3JtYWxpemVkIFVS
TCBmcmFnbWVudCBmcm9tIHRoZSBwYXRoIG9yIGhhc2guCisgICAgZ2V0RnJhZ21lbnQ6IGZ1bmN0
aW9uKGZyYWdtZW50KSB7CisgICAgICBpZiAoZnJhZ21lbnQgPT0gbnVsbCkgeworICAgICAgICBp
ZiAodGhpcy5fdXNlUHVzaFN0YXRlIHx8ICF0aGlzLl93YW50c0hhc2hDaGFuZ2UpIHsKKyAgICAg
ICAgICBmcmFnbWVudCA9IHRoaXMuZ2V0UGF0aCgpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgIGZyYWdtZW50ID0gdGhpcy5nZXRIYXNoKCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAg
IHJldHVybiBmcmFnbWVudC5yZXBsYWNlKHJvdXRlU3RyaXBwZXIsICcnKTsKKyAgICB9LAorCisg
ICAgLy8gU3RhcnQgdGhlIGhhc2ggY2hhbmdlIGhhbmRsaW5nLCByZXR1cm5pbmcgYHRydWVgIGlm
IHRoZSBjdXJyZW50IFVSTCBtYXRjaGVzCisgICAgLy8gYW4gZXhpc3Rpbmcgcm91dGUsIGFuZCBg
ZmFsc2VgIG90aGVyd2lzZS4KKyAgICBzdGFydDogZnVuY3Rpb24ob3B0aW9ucykgeworICAgICAg
aWYgKEhpc3Rvcnkuc3RhcnRlZCkgdGhyb3cgbmV3IEVycm9yKCdCYWNrYm9uZS5oaXN0b3J5IGhh
cyBhbHJlYWR5IGJlZW4gc3RhcnRlZCcpOworICAgICAgSGlzdG9yeS5zdGFydGVkID0gdHJ1ZTsK
KworICAgICAgLy8gRmlndXJlIG91dCB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uLiBEbyB3ZSBu
ZWVkIGFuIGlmcmFtZT8KKyAgICAgIC8vIElzIHB1c2hTdGF0ZSBkZXNpcmVkIC4uLiBpcyBpdCBh
dmFpbGFibGU/CisgICAgICB0aGlzLm9wdGlvbnMgICAgICAgICAgPSBfLmV4dGVuZCh7cm9vdDog
Jy8nfSwgdGhpcy5vcHRpb25zLCBvcHRpb25zKTsKKyAgICAgIHRoaXMucm9vdCAgICAgICAgICAg
ICA9IHRoaXMub3B0aW9ucy5yb290OworICAgICAgdGhpcy5fd2FudHNIYXNoQ2hhbmdlID0gdGhp
cy5vcHRpb25zLmhhc2hDaGFuZ2UgIT09IGZhbHNlOworICAgICAgdGhpcy5faGFzSGFzaENoYW5n
ZSAgID0gJ29uaGFzaGNoYW5nZScgaW4gd2luZG93ICYmIChkb2N1bWVudC5kb2N1bWVudE1vZGUg
PT09IHZvaWQgMCB8fCBkb2N1bWVudC5kb2N1bWVudE1vZGUgPiA3KTsKKyAgICAgIHRoaXMuX3Vz
ZUhhc2hDaGFuZ2UgICA9IHRoaXMuX3dhbnRzSGFzaENoYW5nZSAmJiB0aGlzLl9oYXNIYXNoQ2hh
bmdlOworICAgICAgdGhpcy5fd2FudHNQdXNoU3RhdGUgID0gISF0aGlzLm9wdGlvbnMucHVzaFN0
YXRlOworICAgICAgdGhpcy5faGFzUHVzaFN0YXRlICAgID0gISEodGhpcy5oaXN0b3J5ICYmIHRo
aXMuaGlzdG9yeS5wdXNoU3RhdGUpOworICAgICAgdGhpcy5fdXNlUHVzaFN0YXRlICAgID0gdGhp
cy5fd2FudHNQdXNoU3RhdGUgJiYgdGhpcy5faGFzUHVzaFN0YXRlOworICAgICAgdGhpcy5mcmFn
bWVudCAgICAgICAgID0gdGhpcy5nZXRGcmFnbWVudCgpOworCisgICAgICAvLyBOb3JtYWxpemUg
cm9vdCB0byBhbHdheXMgaW5jbHVkZSBhIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoLgorICAg
ICAgdGhpcy5yb290ID0gKCcvJyArIHRoaXMucm9vdCArICcvJykucmVwbGFjZShyb290U3RyaXBw
ZXIsICcvJyk7CisKKyAgICAgIC8vIFRyYW5zaXRpb24gZnJvbSBoYXNoQ2hhbmdlIHRvIHB1c2hT
dGF0ZSBvciB2aWNlIHZlcnNhIGlmIGJvdGggYXJlCisgICAgICAvLyByZXF1ZXN0ZWQuCisgICAg
ICBpZiAodGhpcy5fd2FudHNIYXNoQ2hhbmdlICYmIHRoaXMuX3dhbnRzUHVzaFN0YXRlKSB7CisK
KyAgICAgICAgLy8gSWYgd2UndmUgc3RhcnRlZCBvZmYgd2l0aCBhIHJvdXRlIGZyb20gYSBgcHVz
aFN0YXRlYC1lbmFibGVkCisgICAgICAgIC8vIGJyb3dzZXIsIGJ1dCB3ZSdyZSBjdXJyZW50bHkg
aW4gYSBicm93c2VyIHRoYXQgZG9lc24ndCBzdXBwb3J0IGl0Li4uCisgICAgICAgIGlmICghdGhp
cy5faGFzUHVzaFN0YXRlICYmICF0aGlzLmF0Um9vdCgpKSB7CisgICAgICAgICAgdmFyIHJvb3RQ
YXRoID0gdGhpcy5yb290LnNsaWNlKDAsIC0xKSB8fCAnLyc7CisgICAgICAgICAgdGhpcy5sb2Nh
dGlvbi5yZXBsYWNlKHJvb3RQYXRoICsgJyMnICsgdGhpcy5nZXRQYXRoKCkpOworICAgICAgICAg
IC8vIFJldHVybiBpbW1lZGlhdGVseSBhcyBicm93c2VyIHdpbGwgZG8gcmVkaXJlY3QgdG8gbmV3
IHVybAorICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIC8vIE9yIGlmIHdlJ3ZlIHN0
YXJ0ZWQgb3V0IHdpdGggYSBoYXNoLWJhc2VkIHJvdXRlLCBidXQgd2UncmUgY3VycmVudGx5Cisg
ICAgICAgIC8vIGluIGEgYnJvd3NlciB3aGVyZSBpdCBjb3VsZCBiZSBgcHVzaFN0YXRlYC1iYXNl
ZCBpbnN0ZWFkLi4uCisgICAgICAgIH0gZWxzZSBpZiAodGhpcy5faGFzUHVzaFN0YXRlICYmIHRo
aXMuYXRSb290KCkpIHsKKyAgICAgICAgICB0aGlzLm5hdmlnYXRlKHRoaXMuZ2V0SGFzaCgpLCB7
cmVwbGFjZTogdHJ1ZX0pOworICAgICAgICB9CisKKyAgICAgIH0KKworICAgICAgLy8gUHJveHkg
YW4gaWZyYW1lIHRvIGhhbmRsZSBsb2NhdGlvbiBldmVudHMgaWYgdGhlIGJyb3dzZXIgZG9lc24n
dAorICAgICAgLy8gc3VwcG9ydCB0aGUgYGhhc2hjaGFuZ2VgIGV2ZW50LCBIVE1MNSBoaXN0b3J5
LCBvciB0aGUgdXNlciB3YW50cworICAgICAgLy8gYGhhc2hDaGFuZ2VgIGJ1dCBub3QgYHB1c2hT
dGF0ZWAuCisgICAgICBpZiAoIXRoaXMuX2hhc0hhc2hDaGFuZ2UgJiYgdGhpcy5fd2FudHNIYXNo
Q2hhbmdlICYmICF0aGlzLl91c2VQdXNoU3RhdGUpIHsKKyAgICAgICAgdGhpcy5pZnJhbWUgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKKyAgICAgICAgdGhpcy5pZnJhbWUuc3Jj
ID0gJ2phdmFzY3JpcHQ6MCc7CisgICAgICAgIHRoaXMuaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAn
bm9uZSc7CisgICAgICAgIHRoaXMuaWZyYW1lLnRhYkluZGV4ID0gLTE7CisgICAgICAgIHZhciBi
b2R5ID0gZG9jdW1lbnQuYm9keTsKKyAgICAgICAgLy8gVXNpbmcgYGFwcGVuZENoaWxkYCB3aWxs
IHRocm93IG9uIElFIDwgOSBpZiB0aGUgZG9jdW1lbnQgaXMgbm90IHJlYWR5LgorICAgICAgICB2
YXIgaVdpbmRvdyA9IGJvZHkuaW5zZXJ0QmVmb3JlKHRoaXMuaWZyYW1lLCBib2R5LmZpcnN0Q2hp
bGQpLmNvbnRlbnRXaW5kb3c7CisgICAgICAgIGlXaW5kb3cuZG9jdW1lbnQub3BlbigpOworICAg
ICAgICBpV2luZG93LmRvY3VtZW50LmNsb3NlKCk7CisgICAgICAgIGlXaW5kb3cubG9jYXRpb24u
aGFzaCA9ICcjJyArIHRoaXMuZnJhZ21lbnQ7CisgICAgICB9CisKKyAgICAgIC8vIEFkZCBhIGNy
b3NzLXBsYXRmb3JtIGBhZGRFdmVudExpc3RlbmVyYCBzaGltIGZvciBvbGRlciBicm93c2Vycy4K
KyAgICAgIHZhciBhZGRFdmVudExpc3RlbmVyID0gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIgfHwg
ZnVuY3Rpb24oZXZlbnROYW1lLCBsaXN0ZW5lcikgeworICAgICAgICByZXR1cm4gYXR0YWNoRXZl
bnQoJ29uJyArIGV2ZW50TmFtZSwgbGlzdGVuZXIpOworICAgICAgfTsKKworICAgICAgLy8gRGVw
ZW5kaW5nIG9uIHdoZXRoZXIgd2UncmUgdXNpbmcgcHVzaFN0YXRlIG9yIGhhc2hlcywgYW5kIHdo
ZXRoZXIKKyAgICAgIC8vICdvbmhhc2hjaGFuZ2UnIGlzIHN1cHBvcnRlZCwgZGV0ZXJtaW5lIGhv
dyB3ZSBjaGVjayB0aGUgVVJMIHN0YXRlLgorICAgICAgaWYgKHRoaXMuX3VzZVB1c2hTdGF0ZSkg
eworICAgICAgICBhZGRFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsIHRoaXMuY2hlY2tVcmwsIGZh
bHNlKTsKKyAgICAgIH0gZWxzZSBpZiAodGhpcy5fdXNlSGFzaENoYW5nZSAmJiAhdGhpcy5pZnJh
bWUpIHsKKyAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcignaGFzaGNoYW5nZScsIHRoaXMuY2hlY2tV
cmwsIGZhbHNlKTsKKyAgICAgIH0gZWxzZSBpZiAodGhpcy5fd2FudHNIYXNoQ2hhbmdlKSB7Cisg
ICAgICAgIHRoaXMuX2NoZWNrVXJsSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCh0aGlzLmNoZWNrVXJs
LCB0aGlzLmludGVydmFsKTsKKyAgICAgIH0KKworICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuc2ls
ZW50KSByZXR1cm4gdGhpcy5sb2FkVXJsKCk7CisgICAgfSwKKworICAgIC8vIERpc2FibGUgQmFj
a2JvbmUuaGlzdG9yeSwgcGVyaGFwcyB0ZW1wb3JhcmlseS4gTm90IHVzZWZ1bCBpbiBhIHJlYWwg
YXBwLAorICAgIC8vIGJ1dCBwb3NzaWJseSB1c2VmdWwgZm9yIHVuaXQgdGVzdGluZyBSb3V0ZXJz
LgorICAgIHN0b3A6IGZ1bmN0aW9uKCkgeworICAgICAgLy8gQWRkIGEgY3Jvc3MtcGxhdGZvcm0g
YHJlbW92ZUV2ZW50TGlzdGVuZXJgIHNoaW0gZm9yIG9sZGVyIGJyb3dzZXJzLgorICAgICAgdmFy
IHJlbW92ZUV2ZW50TGlzdGVuZXIgPSB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciB8fCBmdW5j
dGlvbihldmVudE5hbWUsIGxpc3RlbmVyKSB7CisgICAgICAgIHJldHVybiBkZXRhY2hFdmVudCgn
b24nICsgZXZlbnROYW1lLCBsaXN0ZW5lcik7CisgICAgICB9OworCisgICAgICAvLyBSZW1vdmUg
d2luZG93IGxpc3RlbmVycy4KKyAgICAgIGlmICh0aGlzLl91c2VQdXNoU3RhdGUpIHsKKyAgICAg
ICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCB0aGlzLmNoZWNrVXJsLCBmYWxzZSk7
CisgICAgICB9IGVsc2UgaWYgKHRoaXMuX3VzZUhhc2hDaGFuZ2UgJiYgIXRoaXMuaWZyYW1lKSB7
CisgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoJ2hhc2hjaGFuZ2UnLCB0aGlzLmNoZWNrVXJs
LCBmYWxzZSk7CisgICAgICB9CisKKyAgICAgIC8vIENsZWFuIHVwIHRoZSBpZnJhbWUgaWYgbmVj
ZXNzYXJ5LgorICAgICAgaWYgKHRoaXMuaWZyYW1lKSB7CisgICAgICAgIGRvY3VtZW50LmJvZHku
cmVtb3ZlQ2hpbGQodGhpcy5pZnJhbWUpOworICAgICAgICB0aGlzLmlmcmFtZSA9IG51bGw7Cisg
ICAgICB9CisKKyAgICAgIC8vIFNvbWUgZW52aXJvbm1lbnRzIHdpbGwgdGhyb3cgd2hlbiBjbGVh
cmluZyBhbiB1bmRlZmluZWQgaW50ZXJ2YWwuCisgICAgICBpZiAodGhpcy5fY2hlY2tVcmxJbnRl
cnZhbCkgY2xlYXJJbnRlcnZhbCh0aGlzLl9jaGVja1VybEludGVydmFsKTsKKyAgICAgIEhpc3Rv
cnkuc3RhcnRlZCA9IGZhbHNlOworICAgIH0sCisKKyAgICAvLyBBZGQgYSByb3V0ZSB0byBiZSB0
ZXN0ZWQgd2hlbiB0aGUgZnJhZ21lbnQgY2hhbmdlcy4gUm91dGVzIGFkZGVkIGxhdGVyCisgICAg
Ly8gbWF5IG92ZXJyaWRlIHByZXZpb3VzIHJvdXRlcy4KKyAgICByb3V0ZTogZnVuY3Rpb24ocm91
dGUsIGNhbGxiYWNrKSB7CisgICAgICB0aGlzLmhhbmRsZXJzLnVuc2hpZnQoe3JvdXRlOiByb3V0
ZSwgY2FsbGJhY2s6IGNhbGxiYWNrfSk7CisgICAgfSwKKworICAgIC8vIENoZWNrcyB0aGUgY3Vy
cmVudCBVUkwgdG8gc2VlIGlmIGl0IGhhcyBjaGFuZ2VkLCBhbmQgaWYgaXQgaGFzLAorICAgIC8v
IGNhbGxzIGBsb2FkVXJsYCwgbm9ybWFsaXppbmcgYWNyb3NzIHRoZSBoaWRkZW4gaWZyYW1lLgor
ICAgIGNoZWNrVXJsOiBmdW5jdGlvbihlKSB7CisgICAgICB2YXIgY3VycmVudCA9IHRoaXMuZ2V0
RnJhZ21lbnQoKTsKKworICAgICAgLy8gSWYgdGhlIHVzZXIgcHJlc3NlZCB0aGUgYmFjayBidXR0
b24sIHRoZSBpZnJhbWUncyBoYXNoIHdpbGwgaGF2ZQorICAgICAgLy8gY2hhbmdlZCBhbmQgd2Ug
c2hvdWxkIHVzZSB0aGF0IGZvciBjb21wYXJpc29uLgorICAgICAgaWYgKGN1cnJlbnQgPT09IHRo
aXMuZnJhZ21lbnQgJiYgdGhpcy5pZnJhbWUpIHsKKyAgICAgICAgY3VycmVudCA9IHRoaXMuZ2V0
SGFzaCh0aGlzLmlmcmFtZS5jb250ZW50V2luZG93KTsKKyAgICAgIH0KKworICAgICAgaWYgKGN1
cnJlbnQgPT09IHRoaXMuZnJhZ21lbnQpIHJldHVybiBmYWxzZTsKKyAgICAgIGlmICh0aGlzLmlm
cmFtZSkgdGhpcy5uYXZpZ2F0ZShjdXJyZW50KTsKKyAgICAgIHRoaXMubG9hZFVybCgpOworICAg
IH0sCisKKyAgICAvLyBBdHRlbXB0IHRvIGxvYWQgdGhlIGN1cnJlbnQgVVJMIGZyYWdtZW50LiBJ
ZiBhIHJvdXRlIHN1Y2NlZWRzIHdpdGggYQorICAgIC8vIG1hdGNoLCByZXR1cm5zIGB0cnVlYC4g
SWYgbm8gZGVmaW5lZCByb3V0ZXMgbWF0Y2hlcyB0aGUgZnJhZ21lbnQsCisgICAgLy8gcmV0dXJu
cyBgZmFsc2VgLgorICAgIGxvYWRVcmw6IGZ1bmN0aW9uKGZyYWdtZW50KSB7CisgICAgICAvLyBJ
ZiB0aGUgcm9vdCBkb2Vzbid0IG1hdGNoLCBubyByb3V0ZXMgY2FuIG1hdGNoIGVpdGhlci4KKyAg
ICAgIGlmICghdGhpcy5tYXRjaFJvb3QoKSkgcmV0dXJuIGZhbHNlOworICAgICAgZnJhZ21lbnQg
PSB0aGlzLmZyYWdtZW50ID0gdGhpcy5nZXRGcmFnbWVudChmcmFnbWVudCk7CisgICAgICByZXR1
cm4gXy5zb21lKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uKGhhbmRsZXIpIHsKKyAgICAgICAgaWYg
KGhhbmRsZXIucm91dGUudGVzdChmcmFnbWVudCkpIHsKKyAgICAgICAgICBoYW5kbGVyLmNhbGxi
YWNrKGZyYWdtZW50KTsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
fSk7CisgICAgfSwKKworICAgIC8vIFNhdmUgYSBmcmFnbWVudCBpbnRvIHRoZSBoYXNoIGhpc3Rv
cnksIG9yIHJlcGxhY2UgdGhlIFVSTCBzdGF0ZSBpZiB0aGUKKyAgICAvLyAncmVwbGFjZScgb3B0
aW9uIGlzIHBhc3NlZC4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgcHJvcGVybHkgVVJMLWVuY29k
aW5nCisgICAgLy8gdGhlIGZyYWdtZW50IGluIGFkdmFuY2UuCisgICAgLy8KKyAgICAvLyBUaGUg
b3B0aW9ucyBvYmplY3QgY2FuIGNvbnRhaW4gYHRyaWdnZXI6IHRydWVgIGlmIHlvdSB3aXNoIHRv
IGhhdmUgdGhlCisgICAgLy8gcm91dGUgY2FsbGJhY2sgYmUgZmlyZWQgKG5vdCB1c3VhbGx5IGRl
c2lyYWJsZSksIG9yIGByZXBsYWNlOiB0cnVlYCwgaWYKKyAgICAvLyB5b3Ugd2lzaCB0byBtb2Rp
ZnkgdGhlIGN1cnJlbnQgVVJMIHdpdGhvdXQgYWRkaW5nIGFuIGVudHJ5IHRvIHRoZSBoaXN0b3J5
LgorICAgIG5hdmlnYXRlOiBmdW5jdGlvbihmcmFnbWVudCwgb3B0aW9ucykgeworICAgICAgaWYg
KCFIaXN0b3J5LnN0YXJ0ZWQpIHJldHVybiBmYWxzZTsKKyAgICAgIGlmICghb3B0aW9ucyB8fCBv
cHRpb25zID09PSB0cnVlKSBvcHRpb25zID0ge3RyaWdnZXI6ICEhb3B0aW9uc307CisKKyAgICAg
IC8vIE5vcm1hbGl6ZSB0aGUgZnJhZ21lbnQuCisgICAgICBmcmFnbWVudCA9IHRoaXMuZ2V0RnJh
Z21lbnQoZnJhZ21lbnQgfHwgJycpOworCisgICAgICAvLyBEb24ndCBpbmNsdWRlIGEgdHJhaWxp
bmcgc2xhc2ggb24gdGhlIHJvb3QuCisgICAgICB2YXIgcm9vdFBhdGggPSB0aGlzLnJvb3Q7Cisg
ICAgICBpZiAoZnJhZ21lbnQgPT09ICcnIHx8IGZyYWdtZW50LmNoYXJBdCgwKSA9PT0gJz8nKSB7
CisgICAgICAgIHJvb3RQYXRoID0gcm9vdFBhdGguc2xpY2UoMCwgLTEpIHx8ICcvJzsKKyAgICAg
IH0KKyAgICAgIHZhciB1cmwgPSByb290UGF0aCArIGZyYWdtZW50OworCisgICAgICAvLyBTdHJp
cCB0aGUgaGFzaCBhbmQgZGVjb2RlIGZvciBtYXRjaGluZy4KKyAgICAgIGZyYWdtZW50ID0gdGhp
cy5kZWNvZGVGcmFnbWVudChmcmFnbWVudC5yZXBsYWNlKHBhdGhTdHJpcHBlciwgJycpKTsKKwor
ICAgICAgaWYgKHRoaXMuZnJhZ21lbnQgPT09IGZyYWdtZW50KSByZXR1cm47CisgICAgICB0aGlz
LmZyYWdtZW50ID0gZnJhZ21lbnQ7CisKKyAgICAgIC8vIElmIHB1c2hTdGF0ZSBpcyBhdmFpbGFi
bGUsIHdlIHVzZSBpdCB0byBzZXQgdGhlIGZyYWdtZW50IGFzIGEgcmVhbCBVUkwuCisgICAgICBp
ZiAodGhpcy5fdXNlUHVzaFN0YXRlKSB7CisgICAgICAgIHRoaXMuaGlzdG9yeVtvcHRpb25zLnJl
cGxhY2UgPyAncmVwbGFjZVN0YXRlJyA6ICdwdXNoU3RhdGUnXSh7fSwgZG9jdW1lbnQudGl0bGUs
IHVybCk7CisKKyAgICAgIC8vIElmIGhhc2ggY2hhbmdlcyBoYXZlbid0IGJlZW4gZXhwbGljaXRs
eSBkaXNhYmxlZCwgdXBkYXRlIHRoZSBoYXNoCisgICAgICAvLyBmcmFnbWVudCB0byBzdG9yZSBo
aXN0b3J5LgorICAgICAgfSBlbHNlIGlmICh0aGlzLl93YW50c0hhc2hDaGFuZ2UpIHsKKyAgICAg
ICAgdGhpcy5fdXBkYXRlSGFzaCh0aGlzLmxvY2F0aW9uLCBmcmFnbWVudCwgb3B0aW9ucy5yZXBs
YWNlKTsKKyAgICAgICAgaWYgKHRoaXMuaWZyYW1lICYmIGZyYWdtZW50ICE9PSB0aGlzLmdldEhh
c2godGhpcy5pZnJhbWUuY29udGVudFdpbmRvdykpIHsKKyAgICAgICAgICB2YXIgaVdpbmRvdyA9
IHRoaXMuaWZyYW1lLmNvbnRlbnRXaW5kb3c7CisKKyAgICAgICAgICAvLyBPcGVuaW5nIGFuZCBj
bG9zaW5nIHRoZSBpZnJhbWUgdHJpY2tzIElFNyBhbmQgZWFybGllciB0byBwdXNoIGEKKyAgICAg
ICAgICAvLyBoaXN0b3J5IGVudHJ5IG9uIGhhc2gtdGFnIGNoYW5nZS4gIFdoZW4gcmVwbGFjZSBp
cyB0cnVlLCB3ZSBkb24ndAorICAgICAgICAgIC8vIHdhbnQgdGhpcy4KKyAgICAgICAgICBpZiAo
IW9wdGlvbnMucmVwbGFjZSkgeworICAgICAgICAgICAgaVdpbmRvdy5kb2N1bWVudC5vcGVuKCk7
CisgICAgICAgICAgICBpV2luZG93LmRvY3VtZW50LmNsb3NlKCk7CisgICAgICAgICAgfQorCisg
ICAgICAgICAgdGhpcy5fdXBkYXRlSGFzaChpV2luZG93LmxvY2F0aW9uLCBmcmFnbWVudCwgb3B0
aW9ucy5yZXBsYWNlKTsKKyAgICAgICAgfQorCisgICAgICAvLyBJZiB5b3UndmUgdG9sZCB1cyB0
aGF0IHlvdSBleHBsaWNpdGx5IGRvbid0IHdhbnQgZmFsbGJhY2sgaGFzaGNoYW5nZS0KKyAgICAg
IC8vIGJhc2VkIGhpc3RvcnksIHRoZW4gYG5hdmlnYXRlYCBiZWNvbWVzIGEgcGFnZSByZWZyZXNo
LgorICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubG9jYXRpb24uYXNzaWduKHVy
bCk7CisgICAgICB9CisgICAgICBpZiAob3B0aW9ucy50cmlnZ2VyKSByZXR1cm4gdGhpcy5sb2Fk
VXJsKGZyYWdtZW50KTsKKyAgICB9LAorCisgICAgLy8gVXBkYXRlIHRoZSBoYXNoIGxvY2F0aW9u
LCBlaXRoZXIgcmVwbGFjaW5nIHRoZSBjdXJyZW50IGVudHJ5LCBvciBhZGRpbmcKKyAgICAvLyBh
IG5ldyBvbmUgdG8gdGhlIGJyb3dzZXIgaGlzdG9yeS4KKyAgICBfdXBkYXRlSGFzaDogZnVuY3Rp
b24obG9jYXRpb24sIGZyYWdtZW50LCByZXBsYWNlKSB7CisgICAgICBpZiAocmVwbGFjZSkgewor
ICAgICAgICB2YXIgaHJlZiA9IGxvY2F0aW9uLmhyZWYucmVwbGFjZSgvKGphdmFzY3JpcHQ6fCMp
LiokLywgJycpOworICAgICAgICBsb2NhdGlvbi5yZXBsYWNlKGhyZWYgKyAnIycgKyBmcmFnbWVu
dCk7CisgICAgICB9IGVsc2UgeworICAgICAgICAvLyBTb21lIGJyb3dzZXJzIHJlcXVpcmUgdGhh
dCBgaGFzaGAgY29udGFpbnMgYSBsZWFkaW5nICMuCisgICAgICAgIGxvY2F0aW9uLmhhc2ggPSAn
IycgKyBmcmFnbWVudDsKKyAgICAgIH0KKyAgICB9CisKKyAgfSk7CisKKyAgLy8gQ3JlYXRlIHRo
ZSBkZWZhdWx0IEJhY2tib25lLmhpc3RvcnkuCisgIEJhY2tib25lLmhpc3RvcnkgPSBuZXcgSGlz
dG9yeTsKKworICAvLyBIZWxwZXJzCisgIC8vIC0tLS0tLS0KKworICAvLyBIZWxwZXIgZnVuY3Rp
b24gdG8gY29ycmVjdGx5IHNldCB1cCB0aGUgcHJvdG90eXBlIGNoYWluIGZvciBzdWJjbGFzc2Vz
LgorICAvLyBTaW1pbGFyIHRvIGBnb29nLmluaGVyaXRzYCwgYnV0IHVzZXMgYSBoYXNoIG9mIHBy
b3RvdHlwZSBwcm9wZXJ0aWVzIGFuZAorICAvLyBjbGFzcyBwcm9wZXJ0aWVzIHRvIGJlIGV4dGVu
ZGVkLgorICB2YXIgZXh0ZW5kID0gZnVuY3Rpb24ocHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsK
KyAgICB2YXIgcGFyZW50ID0gdGhpczsKKyAgICB2YXIgY2hpbGQ7CisKKyAgICAvLyBUaGUgY29u
c3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBuZXcgc3ViY2xhc3MgaXMgZWl0aGVyIGRlZmluZWQg
YnkgeW91CisgICAgLy8gKHRoZSAiY29uc3RydWN0b3IiIHByb3BlcnR5IGluIHlvdXIgYGV4dGVu
ZGAgZGVmaW5pdGlvbiksIG9yIGRlZmF1bHRlZAorICAgIC8vIGJ5IHVzIHRvIHNpbXBseSBjYWxs
IHRoZSBwYXJlbnQgY29uc3RydWN0b3IuCisgICAgaWYgKHByb3RvUHJvcHMgJiYgXy5oYXMocHJv
dG9Qcm9wcywgJ2NvbnN0cnVjdG9yJykpIHsKKyAgICAgIGNoaWxkID0gcHJvdG9Qcm9wcy5jb25z
dHJ1Y3RvcjsKKyAgICB9IGVsc2UgeworICAgICAgY2hpbGQgPSBmdW5jdGlvbigpeyByZXR1cm4g
cGFyZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07CisgICAgfQorCisgICAgLy8gQWRkIHN0
YXRpYyBwcm9wZXJ0aWVzIHRvIHRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiwgaWYgc3VwcGxpZWQu
CisgICAgXy5leHRlbmQoY2hpbGQsIHBhcmVudCwgc3RhdGljUHJvcHMpOworCisgICAgLy8gU2V0
IHRoZSBwcm90b3R5cGUgY2hhaW4gdG8gaW5oZXJpdCBmcm9tIGBwYXJlbnRgLCB3aXRob3V0IGNh
bGxpbmcKKyAgICAvLyBgcGFyZW50YCdzIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGFuZCBhZGQgdGhl
IHByb3RvdHlwZSBwcm9wZXJ0aWVzLgorICAgIGNoaWxkLnByb3RvdHlwZSA9IF8uY3JlYXRlKHBh
cmVudC5wcm90b3R5cGUsIHByb3RvUHJvcHMpOworICAgIGNoaWxkLnByb3RvdHlwZS5jb25zdHJ1
Y3RvciA9IGNoaWxkOworCisgICAgLy8gU2V0IGEgY29udmVuaWVuY2UgcHJvcGVydHkgaW4gY2Fz
ZSB0aGUgcGFyZW50J3MgcHJvdG90eXBlIGlzIG5lZWRlZAorICAgIC8vIGxhdGVyLgorICAgIGNo
aWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7CisKKyAgICByZXR1cm4gY2hpbGQ7Cisg
IH07CisKKyAgLy8gU2V0IHVwIGluaGVyaXRhbmNlIGZvciB0aGUgbW9kZWwsIGNvbGxlY3Rpb24s
IHJvdXRlciwgdmlldyBhbmQgaGlzdG9yeS4KKyAgTW9kZWwuZXh0ZW5kID0gQ29sbGVjdGlvbi5l
eHRlbmQgPSBSb3V0ZXIuZXh0ZW5kID0gVmlldy5leHRlbmQgPSBIaXN0b3J5LmV4dGVuZCA9IGV4
dGVuZDsKKworICAvLyBUaHJvdyBhbiBlcnJvciB3aGVuIGEgVVJMIGlzIG5lZWRlZCwgYW5kIG5v
bmUgaXMgc3VwcGxpZWQuCisgIHZhciB1cmxFcnJvciA9IGZ1bmN0aW9uKCkgeworICAgIHRocm93
IG5ldyBFcnJvcignQSAidXJsIiBwcm9wZXJ0eSBvciBmdW5jdGlvbiBtdXN0IGJlIHNwZWNpZmll
ZCcpOworICB9OworCisgIC8vIFdyYXAgYW4gb3B0aW9uYWwgZXJyb3IgY2FsbGJhY2sgd2l0aCBh
IGZhbGxiYWNrIGVycm9yIGV2ZW50LgorICB2YXIgd3JhcEVycm9yID0gZnVuY3Rpb24obW9kZWws
IG9wdGlvbnMpIHsKKyAgICB2YXIgZXJyb3IgPSBvcHRpb25zLmVycm9yOworICAgIG9wdGlvbnMu
ZXJyb3IgPSBmdW5jdGlvbihyZXNwKSB7CisgICAgICBpZiAoZXJyb3IpIGVycm9yLmNhbGwob3B0
aW9ucy5jb250ZXh0LCBtb2RlbCwgcmVzcCwgb3B0aW9ucyk7CisgICAgICBtb2RlbC50cmlnZ2Vy
KCdlcnJvcicsIG1vZGVsLCByZXNwLCBvcHRpb25zKTsKKyAgICB9OworICB9OworCisgIHJldHVy
biBCYWNrYm9uZTsKK30pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvbm9kZV9t
b2R1bGVzL2pxdWVyeS9kaXN0L2pxdWVyeS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL25vZGVf
bW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTFhZWEyOTNhMzNmYTRi
MmI4N2ZhYmI0MDYwZTc2MjZkYzJhNDg5MQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2JhY2tib25lL25vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanMKQEAgLTAsMCArMSwx
MDIyMCBAQAorLyohCisgKiBqUXVlcnkgSmF2YVNjcmlwdCBMaWJyYXJ5IHYzLjEuMQorICogaHR0
cHM6Ly9qcXVlcnkuY29tLworICoKKyAqIEluY2x1ZGVzIFNpenpsZS5qcworICogaHR0cHM6Ly9z
aXp6bGVqcy5jb20vCisgKgorICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhl
ciBjb250cmlidXRvcnMKKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQorICogaHR0
cHM6Ly9qcXVlcnkub3JnL2xpY2Vuc2UKKyAqCisgKiBEYXRlOiAyMDE2LTA5LTIyVDIyOjMwWgor
ICovCisoIGZ1bmN0aW9uKCBnbG9iYWwsIGZhY3RvcnkgKSB7CisKKyAgICAidXNlIHN0cmljdCI7
CisKKyAgICBpZiAoIHR5cGVvZiBtb2R1bGUgPT09ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUu
ZXhwb3J0cyA9PT0gIm9iamVjdCIgKSB7CisKKyAgICAgICAgLy8gRm9yIENvbW1vbkpTIGFuZCBD
b21tb25KUy1saWtlIGVudmlyb25tZW50cyB3aGVyZSBhIHByb3BlciBgd2luZG93YAorICAgICAg
ICAvLyBpcyBwcmVzZW50LCBleGVjdXRlIHRoZSBmYWN0b3J5IGFuZCBnZXQgalF1ZXJ5LgorICAg
ICAgICAvLyBGb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IGhhdmUgYSBgd2luZG93YCB3aXRo
IGEgYGRvY3VtZW50YAorICAgICAgICAvLyAoc3VjaCBhcyBOb2RlLmpzKSwgZXhwb3NlIGEgZmFj
dG9yeSBhcyBtb2R1bGUuZXhwb3J0cy4KKyAgICAgICAgLy8gVGhpcyBhY2NlbnR1YXRlcyB0aGUg
bmVlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIGEgcmVhbCBgd2luZG93YC4KKyAgICAgICAgLy8gZS5n
LiB2YXIgalF1ZXJ5ID0gcmVxdWlyZSgianF1ZXJ5Iikod2luZG93KTsKKyAgICAgICAgLy8gU2Vl
IHRpY2tldCAjMTQ1NDkgZm9yIG1vcmUgaW5mby4KKyAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBn
bG9iYWwuZG9jdW1lbnQgPworICAgICAgICAgICAgZmFjdG9yeSggZ2xvYmFsLCB0cnVlICkgOgor
ICAgICAgICAgICAgZnVuY3Rpb24oIHcgKSB7CisgICAgICAgICAgICAgICAgaWYgKCAhdy5kb2N1
bWVudCApIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCAialF1ZXJ5IHJl
cXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCIgKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhY3RvcnkoIHcgKTsKKyAgICAgICAgICAgIH07CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZmFjdG9yeSggZ2xvYmFsICk7CisgICAgfQorCisvLyBQYXNzIHRo
aXMgaWYgd2luZG93IGlzIG5vdCBkZWZpbmVkIHlldAorfSApKCB0eXBlb2Ygd2luZG93ICE9PSAi
dW5kZWZpbmVkIiA/IHdpbmRvdyA6IHRoaXMsIGZ1bmN0aW9uKCB3aW5kb3csIG5vR2xvYmFsICkg
eworCisvLyBFZGdlIDw9IDEyIC0gMTMrLCBGaXJlZm94IDw9MTggLSA0NSssIElFIDEwIC0gMTEs
IFNhZmFyaSA1LjEgLSA5KywgaU9TIDYgLSA5LjEKKy8vIHRocm93IGV4Y2VwdGlvbnMgd2hlbiBu
b24tc3RyaWN0IGNvZGUgKGUuZy4sIEFTUC5ORVQgNC41KSBhY2Nlc3NlcyBzdHJpY3QgbW9kZQor
Ly8gYXJndW1lbnRzLmNhbGxlZS5jYWxsZXIgKHRyYWMtMTMzMzUpLiBCdXQgYXMgb2YgalF1ZXJ5
IDMuMCAoMjAxNiksIHN0cmljdCBtb2RlIHNob3VsZCBiZSBjb21tb24KKy8vIGVub3VnaCB0aGF0
IGFsbCBzdWNoIGF0dGVtcHRzIGFyZSBndWFyZGVkIGluIGEgdHJ5IGJsb2NrLgorInVzZSBzdHJp
Y3QiOworCit2YXIgYXJyID0gW107CisKK3ZhciBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDsK
KwordmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mOworCit2YXIgc2xpY2UgPSBh
cnIuc2xpY2U7CisKK3ZhciBjb25jYXQgPSBhcnIuY29uY2F0OworCit2YXIgcHVzaCA9IGFyci5w
dXNoOworCit2YXIgaW5kZXhPZiA9IGFyci5pbmRleE9mOworCit2YXIgY2xhc3MydHlwZSA9IHt9
OworCit2YXIgdG9TdHJpbmcgPSBjbGFzczJ0eXBlLnRvU3RyaW5nOworCit2YXIgaGFzT3duID0g
Y2xhc3MydHlwZS5oYXNPd25Qcm9wZXJ0eTsKKwordmFyIGZuVG9TdHJpbmcgPSBoYXNPd24udG9T
dHJpbmc7CisKK3ZhciBPYmplY3RGdW5jdGlvblN0cmluZyA9IGZuVG9TdHJpbmcuY2FsbCggT2Jq
ZWN0ICk7CisKK3ZhciBzdXBwb3J0ID0ge307CisKKworCisgICAgZnVuY3Rpb24gRE9NRXZhbCgg
Y29kZSwgZG9jICkgeworICAgICAgICBkb2MgPSBkb2MgfHwgZG9jdW1lbnQ7CisKKyAgICAgICAg
dmFyIHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KCAic2NyaXB0IiApOworCisgICAgICAgIHNj
cmlwdC50ZXh0ID0gY29kZTsKKyAgICAgICAgZG9jLmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdCAp
LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHNjcmlwdCApOworICAgIH0KKy8qIGdsb2JhbCBTeW1i
b2wgKi8KKy8vIERlZmluaW5nIHRoaXMgZ2xvYmFsIGluIC5lc2xpbnRyYy5qc29uIHdvdWxkIGNy
ZWF0ZSBhIGRhbmdlciBvZiB1c2luZyB0aGUgZ2xvYmFsCisvLyB1bmd1YXJkZWQgaW4gYW5vdGhl
ciBwbGFjZSwgaXQgc2VlbXMgc2FmZXIgdG8gZGVmaW5lIGdsb2JhbCBvbmx5IGZvciB0aGlzIG1v
ZHVsZQorCisKKwordmFyCisgICAgdmVyc2lvbiA9ICIzLjEuMSIsCisKKyAgICAvLyBEZWZpbmUg
YSBsb2NhbCBjb3B5IG9mIGpRdWVyeQorICAgIGpRdWVyeSA9IGZ1bmN0aW9uKCBzZWxlY3Rvciwg
Y29udGV4dCApIHsKKworICAgICAgICAvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBq
dXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCcKKyAgICAgICAgLy8gTmVlZCBpbml0
IGlmIGpRdWVyeSBpcyBjYWxsZWQgKGp1c3QgYWxsb3cgZXJyb3IgdG8gYmUgdGhyb3duIGlmIG5v
dCBpbmNsdWRlZCkKKyAgICAgICAgcmV0dXJuIG5ldyBqUXVlcnkuZm4uaW5pdCggc2VsZWN0b3Is
IGNvbnRleHQgKTsKKyAgICB9LAorCisgICAgLy8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5
CisgICAgLy8gTWFrZSBzdXJlIHdlIHRyaW0gQk9NIGFuZCBOQlNQCisgICAgcnRyaW0gPSAvXltc
c1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csCisKKyAgICAvLyBNYXRjaGVzIGRhc2hl
ZCBzdHJpbmcgZm9yIGNhbWVsaXppbmcKKyAgICBybXNQcmVmaXggPSAvXi1tcy0vLAorICAgIHJk
YXNoQWxwaGEgPSAvLShbYS16XSkvZywKKworICAgIC8vIFVzZWQgYnkgalF1ZXJ5LmNhbWVsQ2Fz
ZSBhcyBjYWxsYmFjayB0byByZXBsYWNlKCkKKyAgICBmY2FtZWxDYXNlID0gZnVuY3Rpb24oIGFs
bCwgbGV0dGVyICkgeworICAgICAgICByZXR1cm4gbGV0dGVyLnRvVXBwZXJDYXNlKCk7CisgICAg
fTsKKworalF1ZXJ5LmZuID0galF1ZXJ5LnByb3RvdHlwZSA9IHsKKworICAgIC8vIFRoZSBjdXJy
ZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJlaW5nIHVzZWQKKyAgICBqcXVlcnk6IHZlcnNpb24sCisK
KyAgICBjb25zdHJ1Y3RvcjogalF1ZXJ5LAorCisgICAgLy8gVGhlIGRlZmF1bHQgbGVuZ3RoIG9m
IGEgalF1ZXJ5IG9iamVjdCBpcyAwCisgICAgbGVuZ3RoOiAwLAorCisgICAgdG9BcnJheTogZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7CisgICAgfSwKKwor
ICAgIC8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1IK
KyAgICAvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJh
eQorICAgIGdldDogZnVuY3Rpb24oIG51bSApIHsKKworICAgICAgICAvLyBSZXR1cm4gYWxsIHRo
ZSBlbGVtZW50cyBpbiBhIGNsZWFuIGFycmF5CisgICAgICAgIGlmICggbnVtID09IG51bGwgKSB7
CisgICAgICAgICAgICByZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gUmV0dXJuIGp1c3QgdGhlIG9uZSBlbGVtZW50IGZyb20gdGhlIHNldAorICAgICAg
ICByZXR1cm4gbnVtIDwgMCA/IHRoaXNbIG51bSArIHRoaXMubGVuZ3RoIF0gOiB0aGlzWyBudW0g
XTsKKyAgICB9LAorCisgICAgLy8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBp
dCBvbnRvIHRoZSBzdGFjaworICAgIC8vIChyZXR1cm5pbmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1l
bnQgc2V0KQorICAgIHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zICkgeworCisgICAgICAgIC8v
IEJ1aWxkIGEgbmV3IGpRdWVyeSBtYXRjaGVkIGVsZW1lbnQgc2V0CisgICAgICAgIHZhciByZXQg
PSBqUXVlcnkubWVyZ2UoIHRoaXMuY29uc3RydWN0b3IoKSwgZWxlbXMgKTsKKworICAgICAgICAv
LyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNlKQorICAg
ICAgICByZXQucHJldk9iamVjdCA9IHRoaXM7CisKKyAgICAgICAgLy8gUmV0dXJuIHRoZSBuZXds
eS1mb3JtZWQgZWxlbWVudCBzZXQKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9LAorCisgICAg
Ly8gRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBldmVyeSBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNl
dC4KKyAgICBlYWNoOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7CisgICAgICAgIHJldHVybiBqUXVl
cnkuZWFjaCggdGhpcywgY2FsbGJhY2sgKTsKKyAgICB9LAorCisgICAgbWFwOiBmdW5jdGlvbigg
Y2FsbGJhY2sgKSB7CisgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1hcCgg
dGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7CisgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2su
Y2FsbCggZWxlbSwgaSwgZWxlbSApOworICAgICAgICB9ICkgKTsKKyAgICB9LAorCisgICAgc2xp
Y2U6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNsaWNlLmFw
cGx5KCB0aGlzLCBhcmd1bWVudHMgKSApOworICAgIH0sCisKKyAgICBmaXJzdDogZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiB0aGlzLmVxKCAwICk7CisgICAgfSwKKworICAgIGxhc3Q6IGZ1
bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5lcSggLTEgKTsKKyAgICB9LAorCisgICAg
ZXE6IGZ1bmN0aW9uKCBpICkgeworICAgICAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGgsCisgICAg
ICAgICAgICBqID0gK2kgKyAoIGkgPCAwID8gbGVuIDogMCApOworICAgICAgICByZXR1cm4gdGhp
cy5wdXNoU3RhY2soIGogPj0gMCAmJiBqIDwgbGVuID8gWyB0aGlzWyBqIF0gXSA6IFtdICk7Cisg
ICAgfSwKKworICAgIGVuZDogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLnByZXZP
YmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcigpOworICAgIH0sCisKKyAgICAvLyBGb3IgaW50ZXJu
YWwgdXNlIG9ubHkuCisgICAgLy8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9kLCBub3Qg
bGlrZSBhIGpRdWVyeSBtZXRob2QuCisgICAgcHVzaDogcHVzaCwKKyAgICBzb3J0OiBhcnIuc29y
dCwKKyAgICBzcGxpY2U6IGFyci5zcGxpY2UKK307CisKK2pRdWVyeS5leHRlbmQgPSBqUXVlcnku
Zm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIG9wdGlvbnMsIG5hbWUsIHNyYywgY29w
eSwgY29weUlzQXJyYXksIGNsb25lLAorICAgICAgICB0YXJnZXQgPSBhcmd1bWVudHNbIDAgXSB8
fCB7fSwKKyAgICAgICAgaSA9IDEsCisgICAgICAgIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgs
CisgICAgICAgIGRlZXAgPSBmYWxzZTsKKworICAgIC8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1
YXRpb24KKyAgICBpZiAoIHR5cGVvZiB0YXJnZXQgPT09ICJib29sZWFuIiApIHsKKyAgICAgICAg
ZGVlcCA9IHRhcmdldDsKKworICAgICAgICAvLyBTa2lwIHRoZSBib29sZWFuIGFuZCB0aGUgdGFy
Z2V0CisgICAgICAgIHRhcmdldCA9IGFyZ3VtZW50c1sgaSBdIHx8IHt9OworICAgICAgICBpKys7
CisgICAgfQorCisgICAgLy8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Ig
c29tZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpCisgICAgaWYgKCB0eXBlb2YgdGFyZ2V0
ICE9PSAib2JqZWN0IiAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24oIHRhcmdldCApICkgeworICAgICAg
ICB0YXJnZXQgPSB7fTsKKyAgICB9CisKKyAgICAvLyBFeHRlbmQgalF1ZXJ5IGl0c2VsZiBpZiBv
bmx5IG9uZSBhcmd1bWVudCBpcyBwYXNzZWQKKyAgICBpZiAoIGkgPT09IGxlbmd0aCApIHsKKyAg
ICAgICAgdGFyZ2V0ID0gdGhpczsKKyAgICAgICAgaS0tOworICAgIH0KKworICAgIGZvciAoIDsg
aSA8IGxlbmd0aDsgaSsrICkgeworCisgICAgICAgIC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxs
L3VuZGVmaW5lZCB2YWx1ZXMKKyAgICAgICAgaWYgKCAoIG9wdGlvbnMgPSBhcmd1bWVudHNbIGkg
XSApICE9IG51bGwgKSB7CisKKyAgICAgICAgICAgIC8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3QK
KyAgICAgICAgICAgIGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHsKKyAgICAgICAgICAgICAgICBz
cmMgPSB0YXJnZXRbIG5hbWUgXTsKKyAgICAgICAgICAgICAgICBjb3B5ID0gb3B0aW9uc1sgbmFt
ZSBdOworCisgICAgICAgICAgICAgICAgLy8gUHJldmVudCBuZXZlci1lbmRpbmcgbG9vcAorICAg
ICAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSBjb3B5ICkgeworICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBSZWN1
cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXMKKyAgICAgICAgICAg
ICAgICBpZiAoIGRlZXAgJiYgY29weSAmJiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb3B5ICkg
fHwKKyAgICAgICAgICAgICAgICAgICAgKCBjb3B5SXNBcnJheSA9IGpRdWVyeS5pc0FycmF5KCBj
b3B5ICkgKSApICkgeworCisgICAgICAgICAgICAgICAgICAgIGlmICggY29weUlzQXJyYXkgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBjb3B5SXNBcnJheSA9IGZhbHNlOworICAgICAgICAg
ICAgICAgICAgICAgICAgY2xvbmUgPSBzcmMgJiYgalF1ZXJ5LmlzQXJyYXkoIHNyYyApID8gc3Jj
IDogW107CisKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNsb25lID0gc3JjICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBzcmMgKSA/IHNyYyA6
IHt9OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gTmV2
ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtCisgICAgICAgICAgICAgICAgICAg
IHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTsKKwor
ICAgICAgICAgICAgICAgIC8vIERvbid0IGJyaW5nIGluIHVuZGVmaW5lZCB2YWx1ZXMKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKCBjb3B5ICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRhcmdldFsgbmFtZSBdID0gY29weTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIG1vZGlmaWVk
IG9iamVjdAorICAgIHJldHVybiB0YXJnZXQ7Cit9OworCitqUXVlcnkuZXh0ZW5kKCB7CisKKyAg
ICAvLyBVbmlxdWUgZm9yIGVhY2ggY29weSBvZiBqUXVlcnkgb24gdGhlIHBhZ2UKKyAgICBleHBh
bmRvOiAialF1ZXJ5IiArICggdmVyc2lvbiArIE1hdGgucmFuZG9tKCkgKS5yZXBsYWNlKCAvXEQv
ZywgIiIgKSwKKworICAgIC8vIEFzc3VtZSBqUXVlcnkgaXMgcmVhZHkgd2l0aG91dCB0aGUgcmVh
ZHkgbW9kdWxlCisgICAgaXNSZWFkeTogdHJ1ZSwKKworICAgIGVycm9yOiBmdW5jdGlvbiggbXNn
ICkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIG1zZyApOworICAgIH0sCisKKyAgICBub29w
OiBmdW5jdGlvbigpIHt9LAorCisgICAgaXNGdW5jdGlvbjogZnVuY3Rpb24oIG9iaiApIHsKKyAg
ICAgICAgcmV0dXJuIGpRdWVyeS50eXBlKCBvYmogKSA9PT0gImZ1bmN0aW9uIjsKKyAgICB9LAor
CisgICAgaXNBcnJheTogQXJyYXkuaXNBcnJheSwKKworICAgIGlzV2luZG93OiBmdW5jdGlvbigg
b2JqICkgeworICAgICAgICByZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09PSBvYmoud2luZG93
OworICAgIH0sCisKKyAgICBpc051bWVyaWM6IGZ1bmN0aW9uKCBvYmogKSB7CisKKyAgICAgICAg
Ly8gQXMgb2YgalF1ZXJ5IDMuMCwgaXNOdW1lcmljIGlzIGxpbWl0ZWQgdG8KKyAgICAgICAgLy8g
c3RyaW5ncyBhbmQgbnVtYmVycyAocHJpbWl0aXZlcyBvciBvYmplY3RzKQorICAgICAgICAvLyB0
aGF0IGNhbiBiZSBjb2VyY2VkIHRvIGZpbml0ZSBudW1iZXJzIChnaC0yNjYyKQorICAgICAgICB2
YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBvYmogKTsKKyAgICAgICAgcmV0dXJuICggdHlwZSA9PT0g
Im51bWJlciIgfHwgdHlwZSA9PT0gInN0cmluZyIgKSAmJgorCisgICAgICAgICAgICAvLyBwYXJz
ZUZsb2F0IE5hTnMgbnVtZXJpYy1jYXN0IGZhbHNlIHBvc2l0aXZlcyAoIiIpCisgICAgICAgICAg
ICAvLyAuLi5idXQgbWlzaW50ZXJwcmV0cyBsZWFkaW5nLW51bWJlciBzdHJpbmdzLCBwYXJ0aWN1
bGFybHkgaGV4IGxpdGVyYWxzICgiMHguLi4iKQorICAgICAgICAgICAgLy8gc3VidHJhY3Rpb24g
Zm9yY2VzIGluZmluaXRpZXMgdG8gTmFOCisgICAgICAgICAgICAhaXNOYU4oIG9iaiAtIHBhcnNl
RmxvYXQoIG9iaiApICk7CisgICAgfSwKKworICAgIGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBv
YmogKSB7CisgICAgICAgIHZhciBwcm90bywgQ3RvcjsKKworICAgICAgICAvLyBEZXRlY3Qgb2J2
aW91cyBuZWdhdGl2ZXMKKyAgICAgICAgLy8gVXNlIHRvU3RyaW5nIGluc3RlYWQgb2YgalF1ZXJ5
LnR5cGUgdG8gY2F0Y2ggaG9zdCBvYmplY3RzCisgICAgICAgIGlmICggIW9iaiB8fCB0b1N0cmlu
Zy5jYWxsKCBvYmogKSAhPT0gIltvYmplY3QgT2JqZWN0XSIgKSB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBwcm90byA9IGdldFByb3RvKCBvYmogKTsK
KworICAgICAgICAvLyBPYmplY3RzIHdpdGggbm8gcHJvdG90eXBlIChlLmcuLCBgT2JqZWN0LmNy
ZWF0ZSggbnVsbCApYCkgYXJlIHBsYWluCisgICAgICAgIGlmICggIXByb3RvICkgeworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBPYmplY3RzIHdpdGgg
cHJvdG90eXBlIGFyZSBwbGFpbiBpZmYgdGhleSB3ZXJlIGNvbnN0cnVjdGVkIGJ5IGEgZ2xvYmFs
IE9iamVjdCBmdW5jdGlvbgorICAgICAgICBDdG9yID0gaGFzT3duLmNhbGwoIHByb3RvLCAiY29u
c3RydWN0b3IiICkgJiYgcHJvdG8uY29uc3RydWN0b3I7CisgICAgICAgIHJldHVybiB0eXBlb2Yg
Q3RvciA9PT0gImZ1bmN0aW9uIiAmJiBmblRvU3RyaW5nLmNhbGwoIEN0b3IgKSA9PT0gT2JqZWN0
RnVuY3Rpb25TdHJpbmc7CisgICAgfSwKKworICAgIGlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBv
YmogKSB7CisKKyAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi8KKyAg
ICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNsaW50L2lzc3Vlcy82MTI1
CisgICAgICAgIHZhciBuYW1lOworCisgICAgICAgIGZvciAoIG5hbWUgaW4gb2JqICkgeworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0sCisKKyAgICB0eXBlOiBmdW5jdGlvbiggb2JqICkgeworICAgICAgICBpZiAoIG9iaiA9
PSBudWxsICkgeworICAgICAgICAgICAgcmV0dXJuIG9iaiArICIiOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5IChmdW5jdGlvbmlzaCBSZWdFeHAp
CisgICAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAib2JqZWN0IiB8fCB0eXBlb2Ygb2JqID09
PSAiZnVuY3Rpb24iID8KKyAgICAgICAgICAgIGNsYXNzMnR5cGVbIHRvU3RyaW5nLmNhbGwoIG9i
aiApIF0gfHwgIm9iamVjdCIgOgorICAgICAgICAgICAgdHlwZW9mIG9iajsKKyAgICB9LAorCisg
ICAgLy8gRXZhbHVhdGVzIGEgc2NyaXB0IGluIGEgZ2xvYmFsIGNvbnRleHQKKyAgICBnbG9iYWxF
dmFsOiBmdW5jdGlvbiggY29kZSApIHsKKyAgICAgICAgRE9NRXZhbCggY29kZSApOworICAgIH0s
CisKKyAgICAvLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBh
bmQgZGF0YSBtb2R1bGVzCisgICAgLy8gU3VwcG9ydDogSUUgPD05IC0gMTEsIEVkZ2UgMTIgLSAx
MworICAgIC8vIE1pY3Jvc29mdCBmb3Jnb3QgdG8gaHVtcCB0aGVpciB2ZW5kb3IgcHJlZml4ICgj
OTU3MikKKyAgICBjYW1lbENhc2U6IGZ1bmN0aW9uKCBzdHJpbmcgKSB7CisgICAgICAgIHJldHVy
biBzdHJpbmcucmVwbGFjZSggcm1zUHJlZml4LCAibXMtIiApLnJlcGxhY2UoIHJkYXNoQWxwaGEs
IGZjYW1lbENhc2UgKTsKKyAgICB9LAorCisgICAgbm9kZU5hbWU6IGZ1bmN0aW9uKCBlbGVtLCBu
YW1lICkgeworICAgICAgICByZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRv
TG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKTsKKyAgICB9LAorCisgICAgZWFjaDog
ZnVuY3Rpb24oIG9iaiwgY2FsbGJhY2sgKSB7CisgICAgICAgIHZhciBsZW5ndGgsIGkgPSAwOwor
CisgICAgICAgIGlmICggaXNBcnJheUxpa2UoIG9iaiApICkgeworICAgICAgICAgICAgbGVuZ3Ro
ID0gb2JqLmxlbmd0aDsKKyAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgewor
ICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBd
ICkgPT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3Ig
KCBpIGluIG9iaiApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsg
aSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIG9iajsKKyAgICB9LAorCisgICAgLy8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBv
bmx5CisgICAgdHJpbTogZnVuY3Rpb24oIHRleHQgKSB7CisgICAgICAgIHJldHVybiB0ZXh0ID09
IG51bGwgPworICAgICAgICAgICAgIiIgOgorICAgICAgICAgICAgKCB0ZXh0ICsgIiIgKS5yZXBs
YWNlKCBydHJpbSwgIiIgKTsKKyAgICB9LAorCisgICAgLy8gcmVzdWx0cyBpcyBmb3IgaW50ZXJu
YWwgdXNhZ2Ugb25seQorICAgIG1ha2VBcnJheTogZnVuY3Rpb24oIGFyciwgcmVzdWx0cyApIHsK
KyAgICAgICAgdmFyIHJldCA9IHJlc3VsdHMgfHwgW107CisKKyAgICAgICAgaWYgKCBhcnIgIT0g
bnVsbCApIHsKKyAgICAgICAgICAgIGlmICggaXNBcnJheUxpa2UoIE9iamVjdCggYXJyICkgKSAp
IHsKKyAgICAgICAgICAgICAgICBqUXVlcnkubWVyZ2UoIHJldCwKKyAgICAgICAgICAgICAgICAg
ICAgdHlwZW9mIGFyciA9PT0gInN0cmluZyIgPworICAgICAgICAgICAgICAgICAgICBbIGFyciBd
IDogYXJyCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgcHVzaC5jYWxsKCByZXQsIGFyciApOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9LAorCisgICAgaW5BcnJheTogZnVuY3Rpb24o
IGVsZW0sIGFyciwgaSApIHsKKyAgICAgICAgcmV0dXJuIGFyciA9PSBudWxsID8gLTEgOiBpbmRl
eE9mLmNhbGwoIGFyciwgZWxlbSwgaSApOworICAgIH0sCisKKyAgICAvLyBTdXBwb3J0OiBBbmRy
b2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHkKKyAgICAvLyBwdXNoLmFwcGx5KF8sIGFy
cmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0CisgICAgbWVyZ2U6IGZ1bmN0aW9uKCBm
aXJzdCwgc2Vjb25kICkgeworICAgICAgICB2YXIgbGVuID0gK3NlY29uZC5sZW5ndGgsCisgICAg
ICAgICAgICBqID0gMCwKKyAgICAgICAgICAgIGkgPSBmaXJzdC5sZW5ndGg7CisKKyAgICAgICAg
Zm9yICggOyBqIDwgbGVuOyBqKysgKSB7CisgICAgICAgICAgICBmaXJzdFsgaSsrIF0gPSBzZWNv
bmRbIGogXTsKKyAgICAgICAgfQorCisgICAgICAgIGZpcnN0Lmxlbmd0aCA9IGk7CisKKyAgICAg
ICAgcmV0dXJuIGZpcnN0OworICAgIH0sCisKKyAgICBncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNh
bGxiYWNrLCBpbnZlcnQgKSB7CisgICAgICAgIHZhciBjYWxsYmFja0ludmVyc2UsCisgICAgICAg
ICAgICBtYXRjaGVzID0gW10sCisgICAgICAgICAgICBpID0gMCwKKyAgICAgICAgICAgIGxlbmd0
aCA9IGVsZW1zLmxlbmd0aCwKKyAgICAgICAgICAgIGNhbGxiYWNrRXhwZWN0ID0gIWludmVydDsK
KworICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgb25seSBzYXZpbmcgdGhlIGl0ZW1z
CisgICAgICAgIC8vIHRoYXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uCisgICAgICAgIGZv
ciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgeworICAgICAgICAgICAgY2FsbGJhY2tJbnZlcnNlID0g
IWNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpICk7CisgICAgICAgICAgICBpZiAoIGNhbGxiYWNrSW52
ZXJzZSAhPT0gY2FsbGJhY2tFeHBlY3QgKSB7CisgICAgICAgICAgICAgICAgbWF0Y2hlcy5wdXNo
KCBlbGVtc1sgaSBdICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gbWF0Y2hlczsKKyAgICB9LAorCisgICAgLy8gYXJnIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBv
bmx5CisgICAgbWFwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBhcmcgKSB7CisgICAgICAg
IHZhciBsZW5ndGgsIHZhbHVlLAorICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICByZXQg
PSBbXTsKKworICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFj
aCBvZiB0aGUgaXRlbXMgdG8gdGhlaXIgbmV3IHZhbHVlcworICAgICAgICBpZiAoIGlzQXJyYXlM
aWtlKCBlbGVtcyApICkgeworICAgICAgICAgICAgbGVuZ3RoID0gZWxlbXMubGVuZ3RoOworICAg
ICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CisgICAgICAgICAgICAgICAgdmFs
dWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoIHZhbHVlICE9IG51bGwgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKCB2YWx1
ZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAvLyBHbyB0
aHJvdWdoIGV2ZXJ5IGtleSBvbiB0aGUgb2JqZWN0LAorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgZm9yICggaSBpbiBlbGVtcyApIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGNhbGxi
YWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTsKKworICAgICAgICAgICAgICAgIGlmICggdmFsdWUg
IT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goIHZhbHVlICk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRmxh
dHRlbiBhbnkgbmVzdGVkIGFycmF5cworICAgICAgICByZXR1cm4gY29uY2F0LmFwcGx5KCBbXSwg
cmV0ICk7CisgICAgfSwKKworICAgIC8vIEEgZ2xvYmFsIEdVSUQgY291bnRlciBmb3Igb2JqZWN0
cworICAgIGd1aWQ6IDEsCisKKyAgICAvLyBCaW5kIGEgZnVuY3Rpb24gdG8gYSBjb250ZXh0LCBv
cHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnkKKyAgICAvLyBhcmd1bWVudHMuCisgICAg
cHJveHk6IGZ1bmN0aW9uKCBmbiwgY29udGV4dCApIHsKKyAgICAgICAgdmFyIHRtcCwgYXJncywg
cHJveHk7CisKKyAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dCA9PT0gInN0cmluZyIgKSB7Cisg
ICAgICAgICAgICB0bXAgPSBmblsgY29udGV4dCBdOworICAgICAgICAgICAgY29udGV4dCA9IGZu
OworICAgICAgICAgICAgZm4gPSB0bXA7CisgICAgICAgIH0KKworICAgICAgICAvLyBRdWljayBj
aGVjayB0byBkZXRlcm1pbmUgaWYgdGFyZ2V0IGlzIGNhbGxhYmxlLCBpbiB0aGUgc3BlYworICAg
ICAgICAvLyB0aGlzIHRocm93cyBhIFR5cGVFcnJvciwgYnV0IHdlIHdpbGwganVzdCByZXR1cm4g
dW5kZWZpbmVkLgorICAgICAgICBpZiAoICFqUXVlcnkuaXNGdW5jdGlvbiggZm4gKSApIHsKKyAg
ICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBTaW11
bGF0ZWQgYmluZAorICAgICAgICBhcmdzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzLCAyICk7Cisg
ICAgICAgIHByb3h5ID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICByZXR1cm4gZm4uYXBwbHko
IGNvbnRleHQgfHwgdGhpcywgYXJncy5jb25jYXQoIHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApICkg
KTsKKyAgICAgICAgfTsKKworICAgICAgICAvLyBTZXQgdGhlIGd1aWQgb2YgdW5pcXVlIGhhbmRs
ZXIgdG8gdGhlIHNhbWUgb2Ygb3JpZ2luYWwgaGFuZGxlciwgc28gaXQgY2FuIGJlIHJlbW92ZWQK
KyAgICAgICAgcHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5ndWlkKys7
CisKKyAgICAgICAgcmV0dXJuIHByb3h5OworICAgIH0sCisKKyAgICBub3c6IERhdGUubm93LAor
CisgICAgLy8galF1ZXJ5LnN1cHBvcnQgaXMgbm90IHVzZWQgaW4gQ29yZSBidXQgb3RoZXIgcHJv
amVjdHMgYXR0YWNoIHRoZWlyCisgICAgLy8gcHJvcGVydGllcyB0byBpdCBzbyBpdCBuZWVkcyB0
byBleGlzdC4KKyAgICBzdXBwb3J0OiBzdXBwb3J0Cit9ICk7CisKK2lmICggdHlwZW9mIFN5bWJv
bCA9PT0gImZ1bmN0aW9uIiApIHsKKyAgICBqUXVlcnkuZm5bIFN5bWJvbC5pdGVyYXRvciBdID0g
YXJyWyBTeW1ib2wuaXRlcmF0b3IgXTsKK30KKworLy8gUG9wdWxhdGUgdGhlIGNsYXNzMnR5cGUg
bWFwCitqUXVlcnkuZWFjaCggIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBE
YXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sIi5zcGxpdCggIiAiICksCitmdW5jdGlvbigg
aSwgbmFtZSApIHsKKyAgICBjbGFzczJ0eXBlWyAiW29iamVjdCAiICsgbmFtZSArICJdIiBdID0g
bmFtZS50b0xvd2VyQ2FzZSgpOworfSApOworCitmdW5jdGlvbiBpc0FycmF5TGlrZSggb2JqICkg
eworCisgICAgLy8gU3VwcG9ydDogcmVhbCBpT1MgOC4yIG9ubHkgKG5vdCByZXByb2R1Y2libGUg
aW4gc2ltdWxhdG9yKQorICAgIC8vIGBpbmAgY2hlY2sgdXNlZCB0byBwcmV2ZW50IEpJVCBlcnJv
ciAoZ2gtMjE0NSkKKyAgICAvLyBoYXNPd24gaXNuJ3QgdXNlZCBoZXJlIGR1ZSB0byBmYWxzZSBu
ZWdhdGl2ZXMKKyAgICAvLyByZWdhcmRpbmcgTm9kZWxpc3QgbGVuZ3RoIGluIElFCisgICAgdmFy
IGxlbmd0aCA9ICEhb2JqICYmICJsZW5ndGgiIGluIG9iaiAmJiBvYmoubGVuZ3RoLAorICAgICAg
ICB0eXBlID0galF1ZXJ5LnR5cGUoIG9iaiApOworCisgICAgaWYgKCB0eXBlID09PSAiZnVuY3Rp
b24iIHx8IGpRdWVyeS5pc1dpbmRvdyggb2JqICkgKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHlwZSA9PT0gImFycmF5IiB8fCBsZW5ndGggPT09IDAgfHwK
KyAgICAgICAgdHlwZW9mIGxlbmd0aCA9PT0gIm51bWJlciIgJiYgbGVuZ3RoID4gMCAmJiAoIGxl
bmd0aCAtIDEgKSBpbiBvYmo7Cit9Cit2YXIgU2l6emxlID0KKy8qIQorICogU2l6emxlIENTUyBT
ZWxlY3RvciBFbmdpbmUgdjIuMy4zCisgKiBodHRwczovL3NpenpsZWpzLmNvbS8KKyAqCisgKiBD
b3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycworICogUmVs
ZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCisgKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNl
CisgKgorICogRGF0ZTogMjAxNi0wOC0wOAorICovCisoZnVuY3Rpb24oIHdpbmRvdyApIHsKKwor
dmFyIGksCisgICAgc3VwcG9ydCwKKyAgICBFeHByLAorICAgIGdldFRleHQsCisgICAgaXNYTUws
CisgICAgdG9rZW5pemUsCisgICAgY29tcGlsZSwKKyAgICBzZWxlY3QsCisgICAgb3V0ZXJtb3N0
Q29udGV4dCwKKyAgICBzb3J0SW5wdXQsCisgICAgaGFzRHVwbGljYXRlLAorCisgICAgLy8gTG9j
YWwgZG9jdW1lbnQgdmFycworICAgIHNldERvY3VtZW50LAorICAgIGRvY3VtZW50LAorICAgIGRv
Y0VsZW0sCisgICAgZG9jdW1lbnRJc0hUTUwsCisgICAgcmJ1Z2d5UVNBLAorICAgIHJidWdneU1h
dGNoZXMsCisgICAgbWF0Y2hlcywKKyAgICBjb250YWlucywKKworICAgIC8vIEluc3RhbmNlLXNw
ZWNpZmljIGRhdGEKKyAgICBleHBhbmRvID0gInNpenpsZSIgKyAxICogbmV3IERhdGUoKSwKKyAg
ICBwcmVmZXJyZWREb2MgPSB3aW5kb3cuZG9jdW1lbnQsCisgICAgZGlycnVucyA9IDAsCisgICAg
ZG9uZSA9IDAsCisgICAgY2xhc3NDYWNoZSA9IGNyZWF0ZUNhY2hlKCksCisgICAgdG9rZW5DYWNo
ZSA9IGNyZWF0ZUNhY2hlKCksCisgICAgY29tcGlsZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksCisg
ICAgc29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7CisgICAgICAgIGlmICggYSA9PT0gYiAp
IHsKKyAgICAgICAgICAgIGhhc0R1cGxpY2F0ZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfSwKKworICAgIC8vIEluc3RhbmNlIG1ldGhvZHMKKyAgICBoYXNPd24g
PSAoe30pLmhhc093blByb3BlcnR5LAorICAgIGFyciA9IFtdLAorICAgIHBvcCA9IGFyci5wb3As
CisgICAgcHVzaF9uYXRpdmUgPSBhcnIucHVzaCwKKyAgICBwdXNoID0gYXJyLnB1c2gsCisgICAg
c2xpY2UgPSBhcnIuc2xpY2UsCisgICAgLy8gVXNlIGEgc3RyaXBwZWQtZG93biBpbmRleE9mIGFz
IGl0J3MgZmFzdGVyIHRoYW4gbmF0aXZlCisgICAgLy8gaHR0cHM6Ly9qc3BlcmYuY29tL3Rob3It
aW5kZXhvZi12cy1mb3IvNQorICAgIGluZGV4T2YgPSBmdW5jdGlvbiggbGlzdCwgZWxlbSApIHsK
KyAgICAgICAgdmFyIGkgPSAwLAorICAgICAgICAgICAgbGVuID0gbGlzdC5sZW5ndGg7CisgICAg
ICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworICAgICAgICAgICAgaWYgKCBsaXN0W2ldID09
PSBlbGVtICkgeworICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9LAorCisgICAgYm9vbGVhbnMgPSAiY2hl
Y2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlz
YWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxz
Y29wZWQiLAorCisgICAgLy8gUmVndWxhciBleHByZXNzaW9ucworCisgICAgLy8gaHR0cDovL3d3
dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI3doaXRlc3BhY2UKKyAgICB3aGl0ZXNwYWNlID0g
IltcXHgyMFxcdFxcclxcblxcZl0iLAorCisgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvQ1NT
MjEvc3luZGF0YS5odG1sI3ZhbHVlLWRlZi1pZGVudGlmaWVyCisgICAgaWRlbnRpZmllciA9ICIo
PzpcXFxcLnxbXFx3LV18W15cMC1cXHhhMF0pKyIsCisKKyAgICAvLyBBdHRyaWJ1dGUgc2VsZWN0
b3JzOiBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2F0dHJpYnV0ZS1zZWxlY3RvcnMK
KyAgICBhdHRyaWJ1dGVzID0gIlxcWyIgKyB3aGl0ZXNwYWNlICsgIiooIiArIGlkZW50aWZpZXIg
KyAiKSg/OiIgKyB3aGl0ZXNwYWNlICsKKyAgICAgICAgLy8gT3BlcmF0b3IgKGNhcHR1cmUgMikK
KyAgICAgICAgIiooWypeJHwhfl0/PSkiICsgd2hpdGVzcGFjZSArCisgICAgICAgIC8vICJBdHRy
aWJ1dGUgdmFsdWVzIG11c3QgYmUgQ1NTIGlkZW50aWZpZXJzIFtjYXB0dXJlIDVdIG9yIHN0cmlu
Z3MgW2NhcHR1cmUgMyBvciBjYXB0dXJlIDRdIgorICAgICAgICAiKig/OicoKD86XFxcXC58W15c
XFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwifCgiICsgaWRlbnRpZmllciArICIp
KXwpIiArIHdoaXRlc3BhY2UgKworICAgICAgICAiKlxcXSIsCisKKyAgICBwc2V1ZG9zID0gIjoo
IiArIGlkZW50aWZpZXIgKyAiKSg/OlxcKCgiICsKKyAgICAgICAgLy8gVG8gcmVkdWNlIHRoZSBu
dW1iZXIgb2Ygc2VsZWN0b3JzIG5lZWRpbmcgdG9rZW5pemUgaW4gdGhlIHByZUZpbHRlciwgcHJl
ZmVyIGFyZ3VtZW50czoKKyAgICAgICAgLy8gMS4gcXVvdGVkIChjYXB0dXJlIDM7IGNhcHR1cmUg
NCBvciBjYXB0dXJlIDUpCisgICAgICAgICIoJygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86
XFxcXC58W15cXFxcXCJdKSopXCIpfCIgKworICAgICAgICAvLyAyLiBzaW1wbGUgKGNhcHR1cmUg
NikKKyAgICAgICAgIigoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfCIgKyBhdHRyaWJ1dGVzICsgIikq
KXwiICsKKyAgICAgICAgLy8gMy4gYW55dGhpbmcgZWxzZSAoY2FwdHVyZSAyKQorICAgICAgICAi
LioiICsKKyAgICAgICAgIilcXCl8KSIsCisKKyAgICAvLyBMZWFkaW5nIGFuZCBub24tZXNjYXBl
ZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBub24td2hpdGVzcGFjZSBjaGFy
YWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyCisgICAgcndoaXRlc3BhY2UgPSBuZXcgUmVnRXhw
KCB3aGl0ZXNwYWNlICsgIisiLCAiZyIgKSwKKyAgICBydHJpbSA9IG5ldyBSZWdFeHAoICJeIiAr
IHdoaXRlc3BhY2UgKyAiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIiArIHdoaXRlc3BhY2Ug
KyAiKyQiLCAiZyIgKSwKKworICAgIHJjb21tYSA9IG5ldyBSZWdFeHAoICJeIiArIHdoaXRlc3Bh
Y2UgKyAiKiwiICsgd2hpdGVzcGFjZSArICIqIiApLAorICAgIHJjb21iaW5hdG9ycyA9IG5ldyBS
ZWdFeHAoICJeIiArIHdoaXRlc3BhY2UgKyAiKihbPit+XXwiICsgd2hpdGVzcGFjZSArICIpIiAr
IHdoaXRlc3BhY2UgKyAiKiIgKSwKKworICAgIHJhdHRyaWJ1dGVRdW90ZXMgPSBuZXcgUmVnRXhw
KCAiPSIgKyB3aGl0ZXNwYWNlICsgIiooW15cXF0nXCJdKj8pIiArIHdoaXRlc3BhY2UgKyAiKlxc
XSIsICJnIiApLAorCisgICAgcnBzZXVkbyA9IG5ldyBSZWdFeHAoIHBzZXVkb3MgKSwKKyAgICBy
aWRlbnRpZmllciA9IG5ldyBSZWdFeHAoICJeIiArIGlkZW50aWZpZXIgKyAiJCIgKSwKKworICAg
IG1hdGNoRXhwciA9IHsKKyAgICAgICAgIklEIjogbmV3IFJlZ0V4cCggIl4jKCIgKyBpZGVudGlm
aWVyICsgIikiICksCisgICAgICAgICJDTEFTUyI6IG5ldyBSZWdFeHAoICJeXFwuKCIgKyBpZGVu
dGlmaWVyICsgIikiICksCisgICAgICAgICJUQUciOiBuZXcgUmVnRXhwKCAiXigiICsgaWRlbnRp
ZmllciArICJ8WypdKSIgKSwKKyAgICAgICAgIkFUVFIiOiBuZXcgUmVnRXhwKCAiXiIgKyBhdHRy
aWJ1dGVzICksCisgICAgICAgICJQU0VVRE8iOiBuZXcgUmVnRXhwKCAiXiIgKyBwc2V1ZG9zICks
CisgICAgICAgICJDSElMRCI6IG5ldyBSZWdFeHAoICJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50
aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiICsgd2hpdGVzcGFjZSArCisgICAgICAgICAg
ICAiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIgKyB3aGl0ZXNwYWNlICsgIiooPzooWyst
XXwpIiArIHdoaXRlc3BhY2UgKworICAgICAgICAgICAgIiooXFxkKyl8KSkiICsgd2hpdGVzcGFj
ZSArICIqXFwpfCkiLCAiaSIgKSwKKyAgICAgICAgImJvb2wiOiBuZXcgUmVnRXhwKCAiXig/OiIg
KyBib29sZWFucyArICIpJCIsICJpIiApLAorICAgICAgICAvLyBGb3IgdXNlIGluIGxpYnJhcmll
cyBpbXBsZW1lbnRpbmcgLmlzKCkKKyAgICAgICAgLy8gV2UgdXNlIHRoaXMgZm9yIFBPUyBtYXRj
aGluZyBpbiBgc2VsZWN0YAorICAgICAgICAibmVlZHNDb250ZXh0IjogbmV3IFJlZ0V4cCggIl4i
ICsgd2hpdGVzcGFjZSArICIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFz
dCkoPzpcXCgiICsKKyAgICAgICAgICAgIHdoaXRlc3BhY2UgKyAiKigoPzotXFxkKT9cXGQqKSIg
KyB3aGl0ZXNwYWNlICsgIipcXCl8KSg/PVteLV18JCkiLCAiaSIgKQorICAgIH0sCisKKyAgICBy
aW5wdXRzID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSwKKyAgICByaGVh
ZGVyID0gL15oXGQkL2ksCisKKyAgICBybmF0aXZlID0gL15bXntdK1x7XHMqXFtuYXRpdmUgXHcv
LAorCisgICAgLy8gRWFzaWx5LXBhcnNlYWJsZS9yZXRyaWV2YWJsZSBJRCBvciBUQUcgb3IgQ0xB
U1Mgc2VsZWN0b3JzCisgICAgcnF1aWNrRXhwciA9IC9eKD86IyhbXHctXSspfChcdyspfFwuKFtc
dy1dKykpJC8sCisKKyAgICByc2libGluZyA9IC9bK35dLywKKworICAgIC8vIENTUyBlc2NhcGVz
CisgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI2VzY2FwZWQt
Y2hhcmFjdGVycworICAgIHJ1bmVzY2FwZSA9IG5ldyBSZWdFeHAoICJcXFxcKFtcXGRhLWZdezEs
Nn0iICsgd2hpdGVzcGFjZSArICI/fCgiICsgd2hpdGVzcGFjZSArICIpfC4pIiwgImlnIiApLAor
ICAgIGZ1bmVzY2FwZSA9IGZ1bmN0aW9uKCBfLCBlc2NhcGVkLCBlc2NhcGVkV2hpdGVzcGFjZSAp
IHsKKyAgICAgICAgdmFyIGhpZ2ggPSAiMHgiICsgZXNjYXBlZCAtIDB4MTAwMDA7CisgICAgICAg
IC8vIE5hTiBtZWFucyBub24tY29kZXBvaW50CisgICAgICAgIC8vIFN1cHBvcnQ6IEZpcmVmb3g8
MjQKKyAgICAgICAgLy8gV29ya2Fyb3VuZCBlcnJvbmVvdXMgbnVtZXJpYyBpbnRlcnByZXRhdGlv
biBvZiArIjB4IgorICAgICAgICByZXR1cm4gaGlnaCAhPT0gaGlnaCB8fCBlc2NhcGVkV2hpdGVz
cGFjZSA/CisgICAgICAgICAgICBlc2NhcGVkIDoKKyAgICAgICAgICAgIGhpZ2ggPCAwID8KKyAg
ICAgICAgICAgICAgICAvLyBCTVAgY29kZXBvaW50CisgICAgICAgICAgICAgICAgU3RyaW5nLmZy
b21DaGFyQ29kZSggaGlnaCArIDB4MTAwMDAgKSA6CisgICAgICAgICAgICAgICAgLy8gU3VwcGxl
bWVudGFsIFBsYW5lIGNvZGVwb2ludCAoc3Vycm9nYXRlIHBhaXIpCisgICAgICAgICAgICAgICAg
U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCA+PiAxMCB8IDB4RDgwMCwgaGlnaCAmIDB4M0ZGIHwg
MHhEQzAwICk7CisgICAgfSwKKworICAgIC8vIENTUyBzdHJpbmcvaWRlbnRpZmllciBzZXJpYWxp
emF0aW9uCisgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNjb21tb24tc2Vy
aWFsaXppbmctaWRpb21zCisgICAgcmNzc2VzY2FwZSA9IC8oW1wwLVx4MWZceDdmXXxeLT9cZCl8
Xi0kfFteXDAtXHgxZlx4N2YtXHVGRkZGXHctXS9nLAorICAgIGZjc3Nlc2NhcGUgPSBmdW5jdGlv
biggY2gsIGFzQ29kZVBvaW50ICkgeworICAgICAgICBpZiAoIGFzQ29kZVBvaW50ICkgeworCisg
ICAgICAgICAgICAvLyBVKzAwMDAgTlVMTCBiZWNvbWVzIFUrRkZGRCBSRVBMQUNFTUVOVCBDSEFS
QUNURVIKKyAgICAgICAgICAgIGlmICggY2ggPT09ICJcMCIgKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuICJcdUZGRkQiOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDb250cm9s
IGNoYXJhY3RlcnMgYW5kIChkZXBlbmRlbnQgdXBvbiBwb3NpdGlvbikgbnVtYmVycyBnZXQgZXNj
YXBlZCBhcyBjb2RlIHBvaW50cworICAgICAgICAgICAgcmV0dXJuIGNoLnNsaWNlKCAwLCAtMSAp
ICsgIlxcIiArIGNoLmNoYXJDb2RlQXQoIGNoLmxlbmd0aCAtIDEgKS50b1N0cmluZyggMTYgKSAr
ICIgIjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE90aGVyIHBvdGVudGlhbGx5LXNwZWNpYWwg
QVNDSUkgY2hhcmFjdGVycyBnZXQgYmFja3NsYXNoLWVzY2FwZWQKKyAgICAgICAgcmV0dXJuICJc
XCIgKyBjaDsKKyAgICB9LAorCisgICAgLy8gVXNlZCBmb3IgaWZyYW1lcworICAgIC8vIFNlZSBz
ZXREb2N1bWVudCgpCisgICAgLy8gUmVtb3ZpbmcgdGhlIGZ1bmN0aW9uIHdyYXBwZXIgY2F1c2Vz
IGEgIlBlcm1pc3Npb24gRGVuaWVkIgorICAgIC8vIGVycm9yIGluIElFCisgICAgdW5sb2FkSGFu
ZGxlciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBzZXREb2N1bWVudCgpOworICAgIH0sCisKKyAg
ICBkaXNhYmxlZEFuY2VzdG9yID0gYWRkQ29tYmluYXRvcigKKyAgICAgICAgZnVuY3Rpb24oIGVs
ZW0gKSB7CisgICAgICAgICAgICByZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gdHJ1ZSAmJiAoImZv
cm0iIGluIGVsZW0gfHwgImxhYmVsIiBpbiBlbGVtKTsKKyAgICAgICAgfSwKKyAgICAgICAgeyBk
aXI6ICJwYXJlbnROb2RlIiwgbmV4dDogImxlZ2VuZCIgfQorICAgICk7CisKKy8vIE9wdGltaXpl
IGZvciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlzdCApCit0cnkgeworICAgIHB1c2guYXBwbHkoCisg
ICAgICAgIChhcnIgPSBzbGljZS5jYWxsKCBwcmVmZXJyZWREb2MuY2hpbGROb2RlcyApKSwKKyAg
ICAgICAgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMKKyAgICApOworICAgIC8vIFN1cHBvcnQ6IEFu
ZHJvaWQ8NC4wCisgICAgLy8gRGV0ZWN0IHNpbGVudGx5IGZhaWxpbmcgcHVzaC5hcHBseQorICAg
IGFyclsgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMubGVuZ3RoIF0ubm9kZVR5cGU7Cit9IGNhdGNo
ICggZSApIHsKKyAgICBwdXNoID0geyBhcHBseTogYXJyLmxlbmd0aCA/CisKKyAgICAgICAgLy8g
TGV2ZXJhZ2Ugc2xpY2UgaWYgcG9zc2libGUKKyAgICAgICAgZnVuY3Rpb24oIHRhcmdldCwgZWxz
ICkgeworICAgICAgICAgICAgcHVzaF9uYXRpdmUuYXBwbHkoIHRhcmdldCwgc2xpY2UuY2FsbChl
bHMpICk7CisgICAgICAgIH0gOgorCisgICAgICAgIC8vIFN1cHBvcnQ6IElFPDkKKyAgICAgICAg
Ly8gT3RoZXJ3aXNlIGFwcGVuZCBkaXJlY3RseQorICAgICAgICBmdW5jdGlvbiggdGFyZ2V0LCBl
bHMgKSB7CisgICAgICAgICAgICB2YXIgaiA9IHRhcmdldC5sZW5ndGgsCisgICAgICAgICAgICAg
ICAgaSA9IDA7CisgICAgICAgICAgICAvLyBDYW4ndCB0cnVzdCBOb2RlTGlzdC5sZW5ndGgKKyAg
ICAgICAgICAgIHdoaWxlICggKHRhcmdldFtqKytdID0gZWxzW2krK10pICkge30KKyAgICAgICAg
ICAgIHRhcmdldC5sZW5ndGggPSBqIC0gMTsKKyAgICAgICAgfQorICAgIH07Cit9CisKK2Z1bmN0
aW9uIFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7CisgICAgdmFy
IG0sIGksIGVsZW0sIG5pZCwgbWF0Y2gsIGdyb3VwcywgbmV3U2VsZWN0b3IsCisgICAgICAgIG5l
d0NvbnRleHQgPSBjb250ZXh0ICYmIGNvbnRleHQub3duZXJEb2N1bWVudCwKKworICAgICAgICAv
LyBub2RlVHlwZSBkZWZhdWx0cyB0byA5LCBzaW5jZSBjb250ZXh0IGRlZmF1bHRzIHRvIGRvY3Vt
ZW50CisgICAgICAgIG5vZGVUeXBlID0gY29udGV4dCA/IGNvbnRleHQubm9kZVR5cGUgOiA5Owor
CisgICAgcmVzdWx0cyA9IHJlc3VsdHMgfHwgW107CisKKyAgICAvLyBSZXR1cm4gZWFybHkgZnJv
bSBjYWxscyB3aXRoIGludmFsaWQgc2VsZWN0b3Igb3IgY29udGV4dAorICAgIGlmICggdHlwZW9m
IHNlbGVjdG9yICE9PSAic3RyaW5nIiB8fCAhc2VsZWN0b3IgfHwKKyAgICAgICAgbm9kZVR5cGUg
IT09IDEgJiYgbm9kZVR5cGUgIT09IDkgJiYgbm9kZVR5cGUgIT09IDExICkgeworCisgICAgICAg
IHJldHVybiByZXN1bHRzOworICAgIH0KKworICAgIC8vIFRyeSB0byBzaG9ydGN1dCBmaW5kIG9w
ZXJhdGlvbnMgKGFzIG9wcG9zZWQgdG8gZmlsdGVycykgaW4gSFRNTCBkb2N1bWVudHMKKyAgICBp
ZiAoICFzZWVkICkgeworCisgICAgICAgIGlmICggKCBjb250ZXh0ID8gY29udGV4dC5vd25lckRv
Y3VtZW50IHx8IGNvbnRleHQgOiBwcmVmZXJyZWREb2MgKSAhPT0gZG9jdW1lbnQgKSB7CisgICAg
ICAgICAgICBzZXREb2N1bWVudCggY29udGV4dCApOworICAgICAgICB9CisgICAgICAgIGNvbnRl
eHQgPSBjb250ZXh0IHx8IGRvY3VtZW50OworCisgICAgICAgIGlmICggZG9jdW1lbnRJc0hUTUwg
KSB7CisKKyAgICAgICAgICAgIC8vIElmIHRoZSBzZWxlY3RvciBpcyBzdWZmaWNpZW50bHkgc2lt
cGxlLCB0cnkgdXNpbmcgYSAiZ2V0KkJ5KiIgRE9NIG1ldGhvZAorICAgICAgICAgICAgLy8gKGV4
Y2VwdGluZyBEb2N1bWVudEZyYWdtZW50IGNvbnRleHQsIHdoZXJlIHRoZSBtZXRob2RzIGRvbid0
IGV4aXN0KQorICAgICAgICAgICAgaWYgKCBub2RlVHlwZSAhPT0gMTEgJiYgKG1hdGNoID0gcnF1
aWNrRXhwci5leGVjKCBzZWxlY3RvciApKSApIHsKKworICAgICAgICAgICAgICAgIC8vIElEIHNl
bGVjdG9yCisgICAgICAgICAgICAgICAgaWYgKCAobSA9IG1hdGNoWzFdKSApIHsKKworICAgICAg
ICAgICAgICAgICAgICAvLyBEb2N1bWVudCBjb250ZXh0CisgICAgICAgICAgICAgICAgICAgIGlm
ICggbm9kZVR5cGUgPT09IDkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChlbGVt
ID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApKSApIHsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnMKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBp
bnN0ZWFkIG9mIElECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLmlkID09
PSBtICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goIGVs
ZW0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBFbGVtZW50IGNv
bnRleHQKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXQKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElE
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5ld0NvbnRleHQgJiYgKGVsZW0gPSBuZXdD
b250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW0uaWQgPT09IG0gKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHRzLnB1c2goIGVsZW0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0czsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgLy8gVHlwZSBzZWxlY3RvcgorICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIG1hdGNoWzJdICkgeworICAgICAgICAgICAgICAgICAgICBwdXNoLmFwcGx5KCByZXN1
bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBzZWxlY3RvciApICk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOworCisgICAgICAgICAgICAgICAgLy8gQ2xhc3Mg
c2VsZWN0b3IKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAobSA9IG1hdGNoWzNdKSAmJiBz
dXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYKKyAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICkgeworCisgICAgICAgICAgICAgICAgICAgIHB1
c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbSApICk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVGFrZSBhZHZhbnRhZ2Ugb2YgcXVlcnlT
ZWxlY3RvckFsbAorICAgICAgICAgICAgaWYgKCBzdXBwb3J0LnFzYSAmJgorICAgICAgICAgICAg
ICAgICFjb21waWxlckNhY2hlWyBzZWxlY3RvciArICIgIiBdICYmCisgICAgICAgICAgICAgICAg
KCFyYnVnZ3lRU0EgfHwgIXJidWdneVFTQS50ZXN0KCBzZWxlY3RvciApKSApIHsKKworICAgICAg
ICAgICAgICAgIGlmICggbm9kZVR5cGUgIT09IDEgKSB7CisgICAgICAgICAgICAgICAgICAgIG5l
d0NvbnRleHQgPSBjb250ZXh0OworICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3RvciA9IHNl
bGVjdG9yOworCisgICAgICAgICAgICAgICAgLy8gcVNBIGxvb2tzIG91dHNpZGUgRWxlbWVudCBj
b250ZXh0LCB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50CisgICAgICAgICAgICAgICAgLy8gVGhh
bmtzIHRvIEFuZHJldyBEdXBvbnQgZm9yIHRoaXMgd29ya2Fyb3VuZCB0ZWNobmlxdWUKKyAgICAg
ICAgICAgICAgICAvLyBTdXBwb3J0OiBJRSA8PTgKKyAgICAgICAgICAgICAgICAvLyBFeGNsdWRl
IG9iamVjdCBlbGVtZW50cworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGNvbnRleHQubm9k
ZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gIm9iamVjdCIgKSB7CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gQ2FwdHVyZSB0aGUgY29udGV4dCBJRCwgc2V0dGluZyBpdCBmaXJzdCBpZiBuZWNlc3Nh
cnkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAobmlkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUo
ICJpZCIgKSkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuaWQgPSBuaWQucmVwbGFjZSgg
cmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApOworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zZXRBdHRyaWJ1dGUoICJpZCIsIChuaWQg
PSBleHBhbmRvKSApOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gUHJlZml4IGV2ZXJ5IHNlbGVjdG9yIGluIHRoZSBsaXN0CisgICAgICAgICAgICAgICAg
ICAgIGdyb3VwcyA9IHRva2VuaXplKCBzZWxlY3RvciApOworICAgICAgICAgICAgICAgICAgICBp
ID0gZ3JvdXBzLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBncm91cHNbaV0gPSAiIyIgKyBuaWQgKyAiICIgKyB0b1Nl
bGVjdG9yKCBncm91cHNbaV0gKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBuZXdTZWxlY3RvciA9IGdyb3Vwcy5qb2luKCAiLCIgKTsKKworICAgICAgICAgICAg
ICAgICAgICAvLyBFeHBhbmQgY29udGV4dCBmb3Igc2libGluZyBzZWxlY3RvcnMKKyAgICAgICAg
ICAgICAgICAgICAgbmV3Q29udGV4dCA9IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVz
dENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8CisgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICggbmV3
U2VsZWN0b3IgKSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoLmFwcGx5KCByZXN1bHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5ld0NvbnRleHQucXVlcnlTZWxlY3RvckFsbCggbmV3U2VsZWN0b3IgKQorICAgICAgICAgICAg
ICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwor
ICAgICAgICAgICAgICAgICAgICB9IGNhdGNoICggcXNhRXJyb3IgKSB7CisgICAgICAgICAgICAg
ICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5pZCA9PT0g
ZXhwYW5kbyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlbW92ZUF0
dHJpYnV0ZSggImlkIiApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gQWxsIG90aGVycworICAgIHJldHVybiBzZWxlY3QoIHNlbGVjdG9yLnJl
cGxhY2UoIHJ0cmltLCAiJDEiICksIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKTsKK30KKworLyoq
CisgKiBDcmVhdGUga2V5LXZhbHVlIGNhY2hlcyBvZiBsaW1pdGVkIHNpemUKKyAqIEByZXR1cm5z
IHtmdW5jdGlvbihzdHJpbmcsIG9iamVjdCl9IFJldHVybnMgdGhlIE9iamVjdCBkYXRhIGFmdGVy
IHN0b3JpbmcgaXQgb24gaXRzZWxmIHdpdGgKKyAqICBwcm9wZXJ0eSBuYW1lIHRoZSAoc3BhY2Ut
c3VmZml4ZWQpIHN0cmluZyBhbmQgKGlmIHRoZSBjYWNoZSBpcyBsYXJnZXIgdGhhbiBFeHByLmNh
Y2hlTGVuZ3RoKQorICogIGRlbGV0aW5nIHRoZSBvbGRlc3QgZW50cnkKKyAqLworZnVuY3Rpb24g
Y3JlYXRlQ2FjaGUoKSB7CisgICAgdmFyIGtleXMgPSBbXTsKKworICAgIGZ1bmN0aW9uIGNhY2hl
KCBrZXksIHZhbHVlICkgeworICAgICAgICAvLyBVc2UgKGtleSArICIgIikgdG8gYXZvaWQgY29s
bGlzaW9uIHdpdGggbmF0aXZlIHByb3RvdHlwZSBwcm9wZXJ0aWVzIChzZWUgSXNzdWUgIzE1NykK
KyAgICAgICAgaWYgKCBrZXlzLnB1c2goIGtleSArICIgIiApID4gRXhwci5jYWNoZUxlbmd0aCAp
IHsKKyAgICAgICAgICAgIC8vIE9ubHkga2VlcCB0aGUgbW9zdCByZWNlbnQgZW50cmllcworICAg
ICAgICAgICAgZGVsZXRlIGNhY2hlWyBrZXlzLnNoaWZ0KCkgXTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gKGNhY2hlWyBrZXkgKyAiICIgXSA9IHZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJu
IGNhY2hlOworfQorCisvKioKKyAqIE1hcmsgYSBmdW5jdGlvbiBmb3Igc3BlY2lhbCB1c2UgYnkg
U2l6emxlCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gbWFyaworICov
CitmdW5jdGlvbiBtYXJrRnVuY3Rpb24oIGZuICkgeworICAgIGZuWyBleHBhbmRvIF0gPSB0cnVl
OworICAgIHJldHVybiBmbjsKK30KKworLyoqCisgKiBTdXBwb3J0IHRlc3RpbmcgdXNpbmcgYW4g
ZWxlbWVudAorICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gUGFzc2VkIHRoZSBjcmVhdGVkIGVsZW1l
bnQgYW5kIHJldHVybnMgYSBib29sZWFuIHJlc3VsdAorICovCitmdW5jdGlvbiBhc3NlcnQoIGZu
ICkgeworICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZpZWxkc2V0Iik7CisK
KyAgICB0cnkgeworICAgICAgICByZXR1cm4gISFmbiggZWwgKTsKKyAgICB9IGNhdGNoIChlKSB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICAvLyBSZW1v
dmUgZnJvbSBpdHMgcGFyZW50IGJ5IGRlZmF1bHQKKyAgICAgICAgaWYgKCBlbC5wYXJlbnROb2Rl
ICkgeworICAgICAgICAgICAgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZWwgKTsKKyAgICAg
ICAgfQorICAgICAgICAvLyByZWxlYXNlIG1lbW9yeSBpbiBJRQorICAgICAgICBlbCA9IG51bGw7
CisgICAgfQorfQorCisvKioKKyAqIEFkZHMgdGhlIHNhbWUgaGFuZGxlciBmb3IgYWxsIG9mIHRo
ZSBzcGVjaWZpZWQgYXR0cnMKKyAqIEBwYXJhbSB7U3RyaW5nfSBhdHRycyBQaXBlLXNlcGFyYXRl
ZCBsaXN0IG9mIGF0dHJpYnV0ZXMKKyAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgVGhlIG1l
dGhvZCB0aGF0IHdpbGwgYmUgYXBwbGllZAorICovCitmdW5jdGlvbiBhZGRIYW5kbGUoIGF0dHJz
LCBoYW5kbGVyICkgeworICAgIHZhciBhcnIgPSBhdHRycy5zcGxpdCgifCIpLAorICAgICAgICBp
ID0gYXJyLmxlbmd0aDsKKworICAgIHdoaWxlICggaS0tICkgeworICAgICAgICBFeHByLmF0dHJI
YW5kbGVbIGFycltpXSBdID0gaGFuZGxlcjsKKyAgICB9Cit9CisKKy8qKgorICogQ2hlY2tzIGRv
Y3VtZW50IG9yZGVyIG9mIHR3byBzaWJsaW5ncworICogQHBhcmFtIHtFbGVtZW50fSBhCisgKiBA
cGFyYW0ge0VsZW1lbnR9IGIKKyAqIEByZXR1cm5zIHtOdW1iZXJ9IFJldHVybnMgbGVzcyB0aGFu
IDAgaWYgYSBwcmVjZWRlcyBiLCBncmVhdGVyIHRoYW4gMCBpZiBhIGZvbGxvd3MgYgorICovCitm
dW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIgKSB7CisgICAgdmFyIGN1ciA9IGIgJiYgYSwKKyAg
ICAgICAgZGlmZiA9IGN1ciAmJiBhLm5vZGVUeXBlID09PSAxICYmIGIubm9kZVR5cGUgPT09IDEg
JiYKKyAgICAgICAgICAgIGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4OworCisgICAgLy8g
VXNlIElFIHNvdXJjZUluZGV4IGlmIGF2YWlsYWJsZSBvbiBib3RoIG5vZGVzCisgICAgaWYgKCBk
aWZmICkgeworICAgICAgICByZXR1cm4gZGlmZjsKKyAgICB9CisKKyAgICAvLyBDaGVjayBpZiBi
IGZvbGxvd3MgYQorICAgIGlmICggY3VyICkgeworICAgICAgICB3aGlsZSAoIChjdXIgPSBjdXIu
bmV4dFNpYmxpbmcpICkgeworICAgICAgICAgICAgaWYgKCBjdXIgPT09IGIgKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIGEgPyAxIDogLTE7Cit9CisKKy8qKgorICogUmV0dXJucyBhIGZ1bmN0aW9uIHRv
IHVzZSBpbiBwc2V1ZG9zIGZvciBpbnB1dCB0eXBlcworICogQHBhcmFtIHtTdHJpbmd9IHR5cGUK
KyAqLworZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7CisgICAgcmV0dXJuIGZ1
bmN0aW9uKCBlbGVtICkgeworICAgICAgICB2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dl
ckNhc2UoKTsKKyAgICAgICAgcmV0dXJuIG5hbWUgPT09ICJpbnB1dCIgJiYgZWxlbS50eXBlID09
PSB0eXBlOworICAgIH07Cit9CisKKy8qKgorICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBp
biBwc2V1ZG9zIGZvciBidXR0b25zCisgKiBAcGFyYW0ge1N0cmluZ30gdHlwZQorICovCitmdW5j
dGlvbiBjcmVhdGVCdXR0b25Qc2V1ZG8oIHR5cGUgKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCBl
bGVtICkgeworICAgICAgICB2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsK
KyAgICAgICAgcmV0dXJuIChuYW1lID09PSAiaW5wdXQiIHx8IG5hbWUgPT09ICJidXR0b24iKSAm
JiBlbGVtLnR5cGUgPT09IHR5cGU7CisgICAgfTsKK30KKworLyoqCisgKiBSZXR1cm5zIGEgZnVu
Y3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIDplbmFibGVkLzpkaXNhYmxlZAorICogQHBhcmFt
IHtCb29sZWFufSBkaXNhYmxlZCB0cnVlIGZvciA6ZGlzYWJsZWQ7IGZhbHNlIGZvciA6ZW5hYmxl
ZAorICovCitmdW5jdGlvbiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZGlzYWJsZWQgKSB7CisKKyAg
ICAvLyBLbm93biA6ZGlzYWJsZWQgZmFsc2UgcG9zaXRpdmVzOiBmaWVsZHNldFtkaXNhYmxlZF0g
PiBsZWdlbmQ6bnRoLW9mLXR5cGUobisyKSA6Y2FuLWRpc2FibGUKKyAgICByZXR1cm4gZnVuY3Rp
b24oIGVsZW0gKSB7CisKKyAgICAgICAgLy8gT25seSBjZXJ0YWluIGVsZW1lbnRzIGNhbiBtYXRj
aCA6ZW5hYmxlZCBvciA6ZGlzYWJsZWQKKyAgICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hh
dHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZW5hYmxlZAorICAgICAg
ICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRt
bCNzZWxlY3Rvci1kaXNhYmxlZAorICAgICAgICBpZiAoICJmb3JtIiBpbiBlbGVtICkgeworCisg
ICAgICAgICAgICAvLyBDaGVjayBmb3IgaW5oZXJpdGVkIGRpc2FibGVkbmVzcyBvbiByZWxldmFu
dCBub24tZGlzYWJsZWQgZWxlbWVudHM6CisgICAgICAgICAgICAvLyAqIGxpc3RlZCBmb3JtLWFz
c29jaWF0ZWQgZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBmaWVsZHNldAorICAgICAgICAgICAgLy8g
ICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NhdGVn
b3J5LWxpc3RlZAorICAgICAgICAgICAgLy8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3Jn
L211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtZmUtZGlzYWJsZWQKKyAgICAgICAgICAgIC8v
ICogb3B0aW9uIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXAKKyAgICAgICAgICAgIC8v
ICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25j
ZXB0LW9wdGlvbi1kaXNhYmxlZAorICAgICAgICAgICAgLy8gQWxsIHN1Y2ggZWxlbWVudHMgaGF2
ZSBhICJmb3JtIiBwcm9wZXJ0eS4KKyAgICAgICAgICAgIGlmICggZWxlbS5wYXJlbnROb2RlICYm
IGVsZW0uZGlzYWJsZWQgPT09IGZhbHNlICkgeworCisgICAgICAgICAgICAgICAgLy8gT3B0aW9u
IGVsZW1lbnRzIGRlZmVyIHRvIGEgcGFyZW50IG9wdGdyb3VwIGlmIHByZXNlbnQKKyAgICAgICAg
ICAgICAgICBpZiAoICJsYWJlbCIgaW4gZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCAibGFiZWwiIGluIGVsZW0ucGFyZW50Tm9kZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlbGVtLnBhcmVudE5vZGUuZGlzYWJsZWQgPT09IGRpc2FibGVkOworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0u
ZGlzYWJsZWQgPT09IGRpc2FibGVkOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUgNiAtIDExCisgICAgICAg
ICAgICAgICAgLy8gVXNlIHRoZSBpc0Rpc2FibGVkIHNob3J0Y3V0IHByb3BlcnR5IHRvIGNoZWNr
IGZvciBkaXNhYmxlZCBmaWVsZHNldCBhbmNlc3RvcnMKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZWxlbS5pc0Rpc2FibGVkID09PSBkaXNhYmxlZCB8fAorCisgICAgICAgICAgICAgICAgICAgIC8v
IFdoZXJlIHRoZXJlIGlzIG5vIGlzRGlzYWJsZWQsIGNoZWNrIG1hbnVhbGx5CisgICAgICAgICAg
ICAgICAgICAgIC8qIGpzaGludCAtVzAxOCAqLworICAgICAgICAgICAgICAgICAgICBlbGVtLmlz
RGlzYWJsZWQgIT09ICFkaXNhYmxlZCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJs
ZWRBbmNlc3RvciggZWxlbSApID09PSBkaXNhYmxlZDsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkOworCisgICAgICAgIC8vIFRy
eSB0byB3aW5ub3cgb3V0IGVsZW1lbnRzIHRoYXQgY2FuJ3QgYmUgZGlzYWJsZWQgYmVmb3JlIHRy
dXN0aW5nIHRoZSBkaXNhYmxlZCBwcm9wZXJ0eS4KKyAgICAgICAgLy8gU29tZSB2aWN0aW1zIGdl
dCBjYXVnaHQgaW4gb3VyIG5ldCAobGFiZWwsIGxlZ2VuZCwgbWVudSwgdHJhY2spLCBidXQgaXQg
c2hvdWxkbid0CisgICAgICAgIC8vIGV2ZW4gZXhpc3Qgb24gdGhlbSwgbGV0IGFsb25lIGhhdmUg
YSBib29sZWFuIHZhbHVlLgorICAgICAgICB9IGVsc2UgaWYgKCAibGFiZWwiIGluIGVsZW0gKSB7
CisgICAgICAgICAgICByZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7CisgICAgICAg
IH0KKworICAgICAgICAvLyBSZW1haW5pbmcgZWxlbWVudHMgYXJlIG5laXRoZXIgOmVuYWJsZWQg
bm9yIDpkaXNhYmxlZAorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKK30KKworLyoqCisg
KiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIHBvc2l0aW9uYWxzCisg
KiBAcGFyYW0ge0Z1bmN0aW9ufSBmbgorICovCitmdW5jdGlvbiBjcmVhdGVQb3NpdGlvbmFsUHNl
dWRvKCBmbiApIHsKKyAgICByZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBhcmd1bWVudCAp
IHsKKyAgICAgICAgYXJndW1lbnQgPSArYXJndW1lbnQ7CisgICAgICAgIHJldHVybiBtYXJrRnVu
Y3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7CisgICAgICAgICAgICB2YXIgaiwKKyAg
ICAgICAgICAgICAgICBtYXRjaEluZGV4ZXMgPSBmbiggW10sIHNlZWQubGVuZ3RoLCBhcmd1bWVu
dCApLAorICAgICAgICAgICAgICAgIGkgPSBtYXRjaEluZGV4ZXMubGVuZ3RoOworCisgICAgICAg
ICAgICAvLyBNYXRjaCBlbGVtZW50cyBmb3VuZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4ZXMKKyAg
ICAgICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgICAgIGlmICggc2VlZFsgKGog
PSBtYXRjaEluZGV4ZXNbaV0pIF0gKSB7CisgICAgICAgICAgICAgICAgICAgIHNlZWRbal0gPSAh
KG1hdGNoZXNbal0gPSBzZWVkW2pdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0pOworICAgIH0pOworfQorCisvKioKKyAqIENoZWNrcyBhIG5vZGUgZm9yIHZh
bGlkaXR5IGFzIGEgU2l6emxlIGNvbnRleHQKKyAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3Q9fSBj
b250ZXh0CisgKiBAcmV0dXJucyB7RWxlbWVudHxPYmplY3R8Qm9vbGVhbn0gVGhlIGlucHV0IG5v
ZGUgaWYgYWNjZXB0YWJsZSwgb3RoZXJ3aXNlIGEgZmFsc3kgdmFsdWUKKyAqLworZnVuY3Rpb24g
dGVzdENvbnRleHQoIGNvbnRleHQgKSB7CisgICAgcmV0dXJuIGNvbnRleHQgJiYgdHlwZW9mIGNv
bnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09ICJ1bmRlZmluZWQiICYmIGNvbnRleHQ7Cit9
CisKKy8vIEV4cG9zZSBzdXBwb3J0IHZhcnMgZm9yIGNvbnZlbmllbmNlCitzdXBwb3J0ID0gU2l6
emxlLnN1cHBvcnQgPSB7fTsKKworLyoqCisgKiBEZXRlY3RzIFhNTCBub2RlcworICogQHBhcmFt
IHtFbGVtZW50fE9iamVjdH0gZWxlbSBBbiBlbGVtZW50IG9yIGEgZG9jdW1lbnQKKyAqIEByZXR1
cm5zIHtCb29sZWFufSBUcnVlIGlmZiBlbGVtIGlzIGEgbm9uLUhUTUwgWE1MIG5vZGUKKyAqLwor
aXNYTUwgPSBTaXp6bGUuaXNYTUwgPSBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAvLyBkb2N1bWVu
dEVsZW1lbnQgaXMgdmVyaWZpZWQgZm9yIGNhc2VzIHdoZXJlIGl0IGRvZXNuJ3QgeWV0IGV4aXN0
CisgICAgLy8gKHN1Y2ggYXMgbG9hZGluZyBpZnJhbWVzIGluIElFIC0gIzQ4MzMpCisgICAgdmFy
IGRvY3VtZW50RWxlbWVudCA9IGVsZW0gJiYgKGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtKS5k
b2N1bWVudEVsZW1lbnQ7CisgICAgcmV0dXJuIGRvY3VtZW50RWxlbWVudCA/IGRvY3VtZW50RWxl
bWVudC5ub2RlTmFtZSAhPT0gIkhUTUwiIDogZmFsc2U7Cit9OworCisvKioKKyAqIFNldHMgZG9j
dW1lbnQtcmVsYXRlZCB2YXJpYWJsZXMgb25jZSBiYXNlZCBvbiB0aGUgY3VycmVudCBkb2N1bWVu
dAorICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gW2RvY10gQW4gZWxlbWVudCBvciBkb2N1bWVu
dCBvYmplY3QgdG8gdXNlIHRvIHNldCB0aGUgZG9jdW1lbnQKKyAqIEByZXR1cm5zIHtPYmplY3R9
IFJldHVybnMgdGhlIGN1cnJlbnQgZG9jdW1lbnQKKyAqLworc2V0RG9jdW1lbnQgPSBTaXp6bGUu
c2V0RG9jdW1lbnQgPSBmdW5jdGlvbiggbm9kZSApIHsKKyAgICB2YXIgaGFzQ29tcGFyZSwgc3Vi
V2luZG93LAorICAgICAgICBkb2MgPSBub2RlID8gbm9kZS5vd25lckRvY3VtZW50IHx8IG5vZGUg
OiBwcmVmZXJyZWREb2M7CisKKyAgICAvLyBSZXR1cm4gZWFybHkgaWYgZG9jIGlzIGludmFsaWQg
b3IgYWxyZWFkeSBzZWxlY3RlZAorICAgIGlmICggZG9jID09PSBkb2N1bWVudCB8fCBkb2Mubm9k
ZVR5cGUgIT09IDkgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQgKSB7CisgICAgICAgIHJldHVybiBk
b2N1bWVudDsKKyAgICB9CisKKyAgICAvLyBVcGRhdGUgZ2xvYmFsIHZhcmlhYmxlcworICAgIGRv
Y3VtZW50ID0gZG9jOworICAgIGRvY0VsZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7Cisg
ICAgZG9jdW1lbnRJc0hUTUwgPSAhaXNYTUwoIGRvY3VtZW50ICk7CisKKyAgICAvLyBTdXBwb3J0
OiBJRSA5LTExLCBFZGdlCisgICAgLy8gQWNjZXNzaW5nIGlmcmFtZSBkb2N1bWVudHMgYWZ0ZXIg
dW5sb2FkIHRocm93cyAicGVybWlzc2lvbiBkZW5pZWQiIGVycm9ycyAoalF1ZXJ5ICMxMzkzNikK
KyAgICBpZiAoIHByZWZlcnJlZERvYyAhPT0gZG9jdW1lbnQgJiYKKyAgICAgICAgKHN1YldpbmRv
dyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3KSAmJiBzdWJXaW5kb3cudG9wICE9PSBzdWJXaW5kb3cg
KSB7CisKKyAgICAgICAgLy8gU3VwcG9ydDogSUUgMTEsIEVkZ2UKKyAgICAgICAgaWYgKCBzdWJX
aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciApIHsKKyAgICAgICAgICAgIHN1YldpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKCAidW5sb2FkIiwgdW5sb2FkSGFuZGxlciwgZmFsc2UgKTsKKworICAgICAgICAv
LyBTdXBwb3J0OiBJRSA5IC0gMTAgb25seQorICAgICAgICB9IGVsc2UgaWYgKCBzdWJXaW5kb3cu
YXR0YWNoRXZlbnQgKSB7CisgICAgICAgICAgICBzdWJXaW5kb3cuYXR0YWNoRXZlbnQoICJvbnVu
bG9hZCIsIHVubG9hZEhhbmRsZXIgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEF0dHJp
YnV0ZXMKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyAgICAvLyBTdXBwb3J0OiBJRTw4CisgICAg
Ly8gVmVyaWZ5IHRoYXQgZ2V0QXR0cmlidXRlIHJlYWxseSByZXR1cm5zIGF0dHJpYnV0ZXMgYW5k
IG5vdCBwcm9wZXJ0aWVzCisgICAgLy8gKGV4Y2VwdGluZyBJRTggYm9vbGVhbnMpCisgICAgc3Vw
cG9ydC5hdHRyaWJ1dGVzID0gYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHsKKyAgICAgICAgZWwuY2xh
c3NOYW1lID0gImkiOworICAgICAgICByZXR1cm4gIWVsLmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1l
Iik7CisgICAgfSk7CisKKyAgICAvKiBnZXRFbGVtZW50KHMpQnkqCisgICAgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSAqLworCisgICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSByZXR1cm5z
IG9ubHkgZWxlbWVudHMKKyAgICBzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID0gYXNzZXJ0
KGZ1bmN0aW9uKCBlbCApIHsKKyAgICAgICAgZWwuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0
ZUNvbW1lbnQoIiIpICk7CisgICAgICAgIHJldHVybiAhZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
IioiKS5sZW5ndGg7CisgICAgfSk7CisKKyAgICAvLyBTdXBwb3J0OiBJRTw5CisgICAgc3VwcG9y
dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5nZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lICk7CisKKyAgICAvLyBTdXBwb3J0OiBJRTwxMAorICAgIC8vIENoZWNr
IGlmIGdldEVsZW1lbnRCeUlkIHJldHVybnMgZWxlbWVudHMgYnkgbmFtZQorICAgIC8vIFRoZSBi
cm9rZW4gZ2V0RWxlbWVudEJ5SWQgbWV0aG9kcyBkb24ndCBwaWNrIHVwIHByb2dyYW1tYXRpY2Fs
bHktc2V0IG5hbWVzLAorICAgIC8vIHNvIHVzZSBhIHJvdW5kYWJvdXQgZ2V0RWxlbWVudHNCeU5h
bWUgdGVzdAorICAgIHN1cHBvcnQuZ2V0QnlJZCA9IGFzc2VydChmdW5jdGlvbiggZWwgKSB7Cisg
ICAgICAgIGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuaWQgPSBleHBhbmRvOworICAgICAgICBy
ZXR1cm4gIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lIHx8ICFkb2N1bWVudC5nZXRFbGVtZW50
c0J5TmFtZSggZXhwYW5kbyApLmxlbmd0aDsKKyAgICB9KTsKKworICAgIC8vIElEIGZpbHRlciBh
bmQgZmluZAorICAgIGlmICggc3VwcG9ydC5nZXRCeUlkICkgeworICAgICAgICBFeHByLmZpbHRl
clsiSUQiXSA9IGZ1bmN0aW9uKCBpZCApIHsKKyAgICAgICAgICAgIHZhciBhdHRySWQgPSBpZC5y
ZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApOworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0
aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSgi
aWQiKSA9PT0gYXR0cklkOworICAgICAgICAgICAgfTsKKyAgICAgICAgfTsKKyAgICAgICAgRXhw
ci5maW5kWyJJRCJdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkgeworICAgICAgICAgICAgaWYg
KCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gInVuZGVmaW5lZCIgJiYgZG9jdW1l
bnRJc0hUTUwgKSB7CisgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSBjb250ZXh0LmdldEVsZW1l
bnRCeUlkKCBpZCApOworICAgICAgICAgICAgICAgIHJldHVybiBlbGVtID8gWyBlbGVtIF0gOiBb
XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9IGVsc2UgeworICAgICAgICBFeHBy
LmZpbHRlclsiSUQiXSA9ICBmdW5jdGlvbiggaWQgKSB7CisgICAgICAgICAgICB2YXIgYXR0cklk
ID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTsKKyAgICAgICAgICAgIHJldHVy
biBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHR5cGVvZiBl
bGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09ICJ1bmRlZmluZWQiICYmCisgICAgICAgICAgICAgICAg
ICAgIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bm9kZSAmJiBub2RlLnZhbHVlID09PSBhdHRySWQ7CisgICAgICAgICAgICB9OworICAgICAgICB9
OworCisgICAgICAgIC8vIFN1cHBvcnQ6IElFIDYgLSA3IG9ubHkKKyAgICAgICAgLy8gZ2V0RWxl
bWVudEJ5SWQgaXMgbm90IHJlbGlhYmxlIGFzIGEgZmluZCBzaG9ydGN1dAorICAgICAgICBFeHBy
LmZpbmRbIklEIl0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7CisgICAgICAgICAgICBpZiAo
IHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSAidW5kZWZpbmVkIiAmJiBkb2N1bWVu
dElzSFRNTCApIHsKKyAgICAgICAgICAgICAgICB2YXIgbm9kZSwgaSwgZWxlbXMsCisgICAgICAg
ICAgICAgICAgICAgIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApOworCisgICAg
ICAgICAgICAgICAgaWYgKCBlbGVtICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIFZlcmlm
eSB0aGUgaWQgYXR0cmlidXRlCisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBlbGVtLmdldEF0
dHJpYnV0ZU5vZGUoImlkIik7CisgICAgICAgICAgICAgICAgICAgIGlmICggbm9kZSAmJiBub2Rl
LnZhbHVlID09PSBpZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbIGVsZW0g
XTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIEZhbGwg
YmFjayBvbiBnZXRFbGVtZW50c0J5TmFtZQorICAgICAgICAgICAgICAgICAgICBlbGVtcyA9IGNv
bnRleHQuZ2V0RWxlbWVudHNCeU5hbWUoIGlkICk7CisgICAgICAgICAgICAgICAgICAgIGkgPSAw
OworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIChlbGVtID0gZWxlbXNbaSsrXSkgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlk
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbIGVsZW0gXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfTsKKyAgICB9CisKKyAgICAvLyBUYWcKKyAgICBFeHByLmZpbmRbIlRBRyJdID0gc3VwcG9y
dC5nZXRFbGVtZW50c0J5VGFnTmFtZSA/CisgICAgICAgIGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQg
KSB7CisgICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1l
ICE9PSAidW5kZWZpbmVkIiApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5nZXRF
bGVtZW50c0J5VGFnTmFtZSggdGFnICk7CisKKyAgICAgICAgICAgIC8vIERvY3VtZW50RnJhZ21l
bnQgbm9kZXMgZG9uJ3QgaGF2ZSBnRUJUTgorICAgICAgICAgICAgfSBlbHNlIGlmICggc3VwcG9y
dC5xc2EgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQucXVlcnlTZWxlY3RvckFs
bCggdGFnICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gOgorCisgICAgICAgIGZ1bmN0aW9u
KCB0YWcsIGNvbnRleHQgKSB7CisgICAgICAgICAgICB2YXIgZWxlbSwKKyAgICAgICAgICAgICAg
ICB0bXAgPSBbXSwKKyAgICAgICAgICAgICAgICBpID0gMCwKKyAgICAgICAgICAgICAgICAvLyBC
eSBoYXBweSBjb2luY2lkZW5jZSwgYSAoYnJva2VuKSBnRUJUTiBhcHBlYXJzIG9uIERvY3VtZW50
RnJhZ21lbnQgbm9kZXMgdG9vCisgICAgICAgICAgICAgICAgcmVzdWx0cyA9IGNvbnRleHQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApOworCisgICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHBv
c3NpYmxlIGNvbW1lbnRzCisgICAgICAgICAgICBpZiAoIHRhZyA9PT0gIioiICkgeworICAgICAg
ICAgICAgICAgIHdoaWxlICggKGVsZW0gPSByZXN1bHRzW2krK10pICkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0bXAucHVzaCggZWxlbSApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHRtcDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHRzOworICAgICAgICB9OworCisgICAgLy8gQ2xhc3MKKyAg
ICBFeHByLmZpbmRbIkNMQVNTIl0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYg
ZnVuY3Rpb24oIGNsYXNzTmFtZSwgY29udGV4dCApIHsKKyAgICAgICAgaWYgKCB0eXBlb2YgY29u
dGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICE9PSAidW5kZWZpbmVkIiAmJiBkb2N1bWVudElz
SFRNTCApIHsKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05h
bWUoIGNsYXNzTmFtZSApOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qIFFTQS9tYXRjaGVz
U2VsZWN0b3IKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyAgICAvLyBRU0EgYW5kIG1hdGNoZXNT
ZWxlY3RvciBzdXBwb3J0CisKKyAgICAvLyBtYXRjaGVzU2VsZWN0b3IoOmFjdGl2ZSkgcmVwb3J0
cyBmYWxzZSB3aGVuIHRydWUgKElFOS9PcGVyYSAxMS41KQorICAgIHJidWdneU1hdGNoZXMgPSBb
XTsKKworICAgIC8vIHFTYSg6Zm9jdXMpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChDaHJvbWUg
MjEpCisgICAgLy8gV2UgYWxsb3cgdGhpcyBiZWNhdXNlIG9mIGEgYnVnIGluIElFOC85IHRoYXQg
dGhyb3dzIGFuIGVycm9yCisgICAgLy8gd2hlbmV2ZXIgYGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRg
IGlzIGFjY2Vzc2VkIG9uIGFuIGlmcmFtZQorICAgIC8vIFNvLCB3ZSBhbGxvdyA6Zm9jdXMgdG8g
cGFzcyB0aHJvdWdoIFFTQSBhbGwgdGhlIHRpbWUgdG8gYXZvaWQgdGhlIElFIGVycm9yCisgICAg
Ly8gU2VlIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM3OAorICAgIHJidWdneVFT
QSA9IFtdOworCisgICAgaWYgKCAoc3VwcG9ydC5xc2EgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50
LnF1ZXJ5U2VsZWN0b3JBbGwgKSkgKSB7CisgICAgICAgIC8vIEJ1aWxkIFFTQSByZWdleAorICAg
ICAgICAvLyBSZWdleCBzdHJhdGVneSBhZG9wdGVkIGZyb20gRGllZ28gUGVyaW5pCisgICAgICAg
IGFzc2VydChmdW5jdGlvbiggZWwgKSB7CisgICAgICAgICAgICAvLyBTZWxlY3QgaXMgc2V0IHRv
IGVtcHR5IHN0cmluZyBvbiBwdXJwb3NlCisgICAgICAgICAgICAvLyBUaGlzIGlzIHRvIHRlc3Qg
SUUncyB0cmVhdG1lbnQgb2Ygbm90IGV4cGxpY2l0bHkKKyAgICAgICAgICAgIC8vIHNldHRpbmcg
YSBib29sZWFuIGNvbnRlbnQgYXR0cmlidXRlLAorICAgICAgICAgICAgLy8gc2luY2UgaXRzIHBy
ZXNlbmNlIHNob3VsZCBiZSBlbm91Z2gKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy5qcXVl
cnkuY29tL3RpY2tldC8xMjM1OQorICAgICAgICAgICAgZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwg
KS5pbm5lckhUTUwgPSAiPGEgaWQ9JyIgKyBleHBhbmRvICsgIic+PC9hPiIgKworICAgICAgICAg
ICAgICAgICI8c2VsZWN0IGlkPSciICsgZXhwYW5kbyArICItXHJcXCcgbXNhbGxvd2NhcHR1cmU9
Jyc+IiArCisgICAgICAgICAgICAgICAgIjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9z
ZWxlY3Q+IjsKKworICAgICAgICAgICAgLy8gU3VwcG9ydDogSUU4LCBPcGVyYSAxMS0xMi4xNgor
ICAgICAgICAgICAgLy8gTm90aGluZyBzaG91bGQgYmUgc2VsZWN0ZWQgd2hlbiBlbXB0eSBzdHJp
bmdzIGZvbGxvdyBePSBvciAkPSBvciAqPQorICAgICAgICAgICAgLy8gVGhlIHRlc3QgYXR0cmli
dXRlIG11c3QgYmUgdW5rbm93biBpbiBPcGVyYSBidXQgInNhZmUiIGZvciBXaW5SVAorICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9oaDQ2
NTM4OC5hc3B4I2F0dHJpYnV0ZV9zZWN0aW9uCisgICAgICAgICAgICBpZiAoIGVsLnF1ZXJ5U2Vs
ZWN0b3JBbGwoIlttc2FsbG93Y2FwdHVyZV49JyddIikubGVuZ3RoICkgeworICAgICAgICAgICAg
ICAgIHJidWdneVFTQS5wdXNoKCAiWypeJF09IiArIHdoaXRlc3BhY2UgKyAiKig/OicnfFwiXCIp
IiApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRTgKKyAgICAg
ICAgICAgIC8vIEJvb2xlYW4gYXR0cmlidXRlcyBhbmQgInZhbHVlIiBhcmUgbm90IHRyZWF0ZWQg
Y29ycmVjdGx5CisgICAgICAgICAgICBpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCJbc2VsZWN0
ZWRdIikubGVuZ3RoICkgeworICAgICAgICAgICAgICAgIHJidWdneVFTQS5wdXNoKCAiXFxbIiAr
IHdoaXRlc3BhY2UgKyAiKig/OnZhbHVlfCIgKyBib29sZWFucyArICIpIiApOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBTdXBwb3J0OiBDaHJvbWU8MjksIEFuZHJvaWQ8NC40LCBT
YWZhcmk8Ny4wKywgaU9TPDcuMCssIFBoYW50b21KUzwxLjkuOCsKKyAgICAgICAgICAgIGlmICgg
IWVsLnF1ZXJ5U2VsZWN0b3JBbGwoICJbaWR+PSIgKyBleHBhbmRvICsgIi1dIiApLmxlbmd0aCAp
IHsKKyAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCgifj0iKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gV2Via2l0L09wZXJhIC0gOmNoZWNrZWQgc2hvdWxkIHJldHVybiBz
ZWxlY3RlZCBvcHRpb24gZWxlbWVudHMKKyAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3Jn
L1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkCisgICAgICAgICAg
ICAvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0cwor
ICAgICAgICAgICAgaWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGgg
KSB7CisgICAgICAgICAgICAgICAgcmJ1Z2d5UVNBLnB1c2goIjpjaGVja2VkIik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IFNhZmFyaSA4KywgaU9TIDgrCisgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2ODUx
CisgICAgICAgICAgICAvLyBJbi1wYWdlIGBzZWxlY3RvciNpZCBzaWJsaW5nLWNvbWJpbmF0b3Ig
c2VsZWN0b3JgIGZhaWxzCisgICAgICAgICAgICBpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCAi
YSMiICsgZXhwYW5kbyArICIrKiIgKS5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgcmJ1Z2d5
UVNBLnB1c2goIi4jLitbK35dIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAg
ICAgIGFzc2VydChmdW5jdGlvbiggZWwgKSB7CisgICAgICAgICAgICBlbC5pbm5lckhUTUwgPSAi
PGEgaHJlZj0nJyBkaXNhYmxlZD0nZGlzYWJsZWQnPjwvYT4iICsKKyAgICAgICAgICAgICAgICAi
PHNlbGVjdCBkaXNhYmxlZD0nZGlzYWJsZWQnPjxvcHRpb24vPjwvc2VsZWN0PiI7CisKKyAgICAg
ICAgICAgIC8vIFN1cHBvcnQ6IFdpbmRvd3MgOCBOYXRpdmUgQXBwcworICAgICAgICAgICAgLy8g
VGhlIHR5cGUgYW5kIG5hbWUgYXR0cmlidXRlcyBhcmUgcmVzdHJpY3RlZCBkdXJpbmcgLmlubmVy
SFRNTCBhc3NpZ25tZW50CisgICAgICAgICAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJpbnB1dCIpOworICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCAidHlwZSIs
ICJoaWRkZW4iICk7CisgICAgICAgICAgICBlbC5hcHBlbmRDaGlsZCggaW5wdXQgKS5zZXRBdHRy
aWJ1dGUoICJuYW1lIiwgIkQiICk7CisKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFOAorICAg
ICAgICAgICAgLy8gRW5mb3JjZSBjYXNlLXNlbnNpdGl2aXR5IG9mIG5hbWUgYXR0cmlidXRlCisg
ICAgICAgICAgICBpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIltuYW1lPWRdIikubGVuZ3RoICkg
eworICAgICAgICAgICAgICAgIHJidWdneVFTQS5wdXNoKCAibmFtZSIgKyB3aGl0ZXNwYWNlICsg
IipbKl4kfCF+XT89IiApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGRiAzLjUg
LSA6ZW5hYmxlZC86ZGlzYWJsZWQgYW5kIGhpZGRlbiBlbGVtZW50cyAoaGlkZGVuIGVsZW1lbnRz
IGFyZSBzdGlsbCBlbmFibGVkKQorICAgICAgICAgICAgLy8gSUU4IHRocm93cyBlcnJvciBoZXJl
IGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHMKKyAgICAgICAgICAgIGlmICggZWwucXVlcnlT
ZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGggIT09IDIgKSB7CisgICAgICAgICAgICAgICAg
cmJ1Z2d5UVNBLnB1c2goICI6ZW5hYmxlZCIsICI6ZGlzYWJsZWQiICk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFOS0xMSsKKyAgICAgICAgICAgIC8vIElFJ3Mg
OmRpc2FibGVkIHNlbGVjdG9yIGRvZXMgbm90IHBpY2sgdXAgdGhlIGNoaWxkcmVuIG9mIGRpc2Fi
bGVkIGZpZWxkc2V0cworICAgICAgICAgICAgZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5kaXNh
YmxlZCA9IHRydWU7CisgICAgICAgICAgICBpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIjpkaXNh
YmxlZCIpLmxlbmd0aCAhPT0gMiApIHsKKyAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCgg
IjplbmFibGVkIiwgIjpkaXNhYmxlZCIgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gT3BlcmEgMTAtMTEgZG9lcyBub3QgdGhyb3cgb24gcG9zdC1jb21tYSBpbnZhbGlkIHBzZXVk
b3MKKyAgICAgICAgICAgIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKTsKKyAgICAgICAgICAg
IHJidWdneVFTQS5wdXNoKCIsLio6Iik7CisgICAgICAgIH0pOworICAgIH0KKworICAgIGlmICgg
KHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yID0gcm5hdGl2ZS50ZXN0KCAobWF0Y2hlcyA9IGRvY0Vs
ZW0ubWF0Y2hlcyB8fAorICAgICAgICBkb2NFbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fAor
ICAgICAgICBkb2NFbGVtLm1vek1hdGNoZXNTZWxlY3RvciB8fAorICAgICAgICBkb2NFbGVtLm9N
YXRjaGVzU2VsZWN0b3IgfHwKKyAgICAgICAgZG9jRWxlbS5tc01hdGNoZXNTZWxlY3RvcikgKSkg
KSB7CisKKyAgICAgICAgYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHsKKyAgICAgICAgICAgIC8vIENo
ZWNrIHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGRvIG1hdGNoZXNTZWxlY3RvcgorICAgICAg
ICAgICAgLy8gb24gYSBkaXNjb25uZWN0ZWQgbm9kZSAoSUUgOSkKKyAgICAgICAgICAgIHN1cHBv
cnQuZGlzY29ubmVjdGVkTWF0Y2ggPSBtYXRjaGVzLmNhbGwoIGVsLCAiKiIgKTsKKworICAgICAg
ICAgICAgLy8gVGhpcyBzaG91bGQgZmFpbCB3aXRoIGFuIGV4Y2VwdGlvbgorICAgICAgICAgICAg
Ly8gR2Vja28gZG9lcyBub3QgZXJyb3IsIHJldHVybnMgZmFsc2UgaW5zdGVhZAorICAgICAgICAg
ICAgbWF0Y2hlcy5jYWxsKCBlbCwgIltzIT0nJ106eCIgKTsKKyAgICAgICAgICAgIHJidWdneU1h
dGNoZXMucHVzaCggIiE9IiwgcHNldWRvcyApOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBy
YnVnZ3lRU0EgPSByYnVnZ3lRU0EubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneVFTQS5qb2lu
KCJ8IikgKTsKKyAgICByYnVnZ3lNYXRjaGVzID0gcmJ1Z2d5TWF0Y2hlcy5sZW5ndGggJiYgbmV3
IFJlZ0V4cCggcmJ1Z2d5TWF0Y2hlcy5qb2luKCJ8IikgKTsKKworICAgIC8qIENvbnRhaW5zCisg
ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGhhc0NvbXBhcmUgPSBybmF0aXZlLnRlc3QoIGRvY0Vs
ZW0uY29tcGFyZURvY3VtZW50UG9zaXRpb24gKTsKKworICAgIC8vIEVsZW1lbnQgY29udGFpbnMg
YW5vdGhlcgorICAgIC8vIFB1cnBvc2VmdWxseSBzZWxmLWV4Y2x1c2l2ZQorICAgIC8vIEFzIGlu
LCBhbiBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxmCisgICAgY29udGFpbnMgPSBoYXND
b21wYXJlIHx8IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb250YWlucyApID8KKyAgICAgICAgZnVu
Y3Rpb24oIGEsIGIgKSB7CisgICAgICAgICAgICB2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09PSA5
ID8gYS5kb2N1bWVudEVsZW1lbnQgOiBhLAorICAgICAgICAgICAgICAgIGJ1cCA9IGIgJiYgYi5w
YXJlbnROb2RlOworICAgICAgICAgICAgcmV0dXJuIGEgPT09IGJ1cCB8fCAhISggYnVwICYmIGJ1
cC5ub2RlVHlwZSA9PT0gMSAmJiAoCisgICAgICAgICAgICAgICAgYWRvd24uY29udGFpbnMgPwor
ICAgICAgICAgICAgICAgICAgICBhZG93bi5jb250YWlucyggYnVwICkgOgorICAgICAgICAgICAg
ICAgICAgICBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIGEuY29tcGFyZURvY3VtZW50UG9z
aXRpb24oIGJ1cCApICYgMTYKKyAgICAgICAgICAgICkpOworICAgICAgICB9IDoKKyAgICAgICAg
ZnVuY3Rpb24oIGEsIGIgKSB7CisgICAgICAgICAgICBpZiAoIGIgKSB7CisgICAgICAgICAgICAg
ICAgd2hpbGUgKCAoYiA9IGIucGFyZW50Tm9kZSkgKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICggYiA9PT0gYSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9OworCisgICAgLyogU29ydGluZworICAg
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gKi8KKworICAgIC8vIERvY3VtZW50IG9yZGVyIHNvcnRpbmcKKyAgICBz
b3J0T3JkZXIgPSBoYXNDb21wYXJlID8KKyAgICBmdW5jdGlvbiggYSwgYiApIHsKKworICAgICAg
ICAvLyBGbGFnIGZvciBkdXBsaWNhdGUgcmVtb3ZhbAorICAgICAgICBpZiAoIGEgPT09IGIgKSB7
CisgICAgICAgICAgICBoYXNEdXBsaWNhdGUgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIH0KKworICAgICAgICAvLyBTb3J0IG9uIG1ldGhvZCBleGlzdGVuY2UgaWYgb25s
eSBvbmUgaW5wdXQgaGFzIGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uCisgICAgICAgIHZhciBjb21w
YXJlID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAhYi5jb21wYXJlRG9jdW1lbnRQb3Np
dGlvbjsKKyAgICAgICAgaWYgKCBjb21wYXJlICkgeworICAgICAgICAgICAgcmV0dXJuIGNvbXBh
cmU7CisgICAgICAgIH0KKworICAgICAgICAvLyBDYWxjdWxhdGUgcG9zaXRpb24gaWYgYm90aCBp
bnB1dHMgYmVsb25nIHRvIHRoZSBzYW1lIGRvY3VtZW50CisgICAgICAgIGNvbXBhcmUgPSAoIGEu
b3duZXJEb2N1bWVudCB8fCBhICkgPT09ICggYi5vd25lckRvY3VtZW50IHx8IGIgKSA/CisgICAg
ICAgICAgICBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBiICkgOgorCisgICAgICAgICAgICAv
LyBPdGhlcndpc2Ugd2Uga25vdyB0aGV5IGFyZSBkaXNjb25uZWN0ZWQKKyAgICAgICAgICAgIDE7
CisKKyAgICAgICAgLy8gRGlzY29ubmVjdGVkIG5vZGVzCisgICAgICAgIGlmICggY29tcGFyZSAm
IDEgfHwKKyAgICAgICAgICAgICghc3VwcG9ydC5zb3J0RGV0YWNoZWQgJiYgYi5jb21wYXJlRG9j
dW1lbnRQb3NpdGlvbiggYSApID09PSBjb21wYXJlKSApIHsKKworICAgICAgICAgICAgLy8gQ2hv
b3NlIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgcmVsYXRlZCB0byBvdXIgcHJlZmVycmVkIGRv
Y3VtZW50CisgICAgICAgICAgICBpZiAoIGEgPT09IGRvY3VtZW50IHx8IGEub3duZXJEb2N1bWVu
dCA9PT0gcHJlZmVycmVkRG9jICYmIGNvbnRhaW5zKHByZWZlcnJlZERvYywgYSkgKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCBi
ID09PSBkb2N1bWVudCB8fCBiLm93bmVyRG9jdW1lbnQgPT09IHByZWZlcnJlZERvYyAmJiBjb250
YWlucyhwcmVmZXJyZWREb2MsIGIpICkgeworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBNYWludGFpbiBvcmlnaW5hbCBvcmRlcgorICAg
ICAgICAgICAgcmV0dXJuIHNvcnRJbnB1dCA/CisgICAgICAgICAgICAgICAgKCBpbmRleE9mKCBz
b3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOgorICAgICAgICAgICAg
ICAgIDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gY29tcGFyZSAmIDQgPyAtMSA6IDE7
CisgICAgfSA6CisgICAgZnVuY3Rpb24oIGEsIGIgKSB7CisgICAgICAgIC8vIEV4aXQgZWFybHkg
aWYgdGhlIG5vZGVzIGFyZSBpZGVudGljYWwKKyAgICAgICAgaWYgKCBhID09PSBiICkgeworICAg
ICAgICAgICAgaGFzRHVwbGljYXRlID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICB9CisKKyAgICAgICAgdmFyIGN1ciwKKyAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAg
ICAgYXVwID0gYS5wYXJlbnROb2RlLAorICAgICAgICAgICAgYnVwID0gYi5wYXJlbnROb2RlLAor
ICAgICAgICAgICAgYXAgPSBbIGEgXSwKKyAgICAgICAgICAgIGJwID0gWyBiIF07CisKKyAgICAg
ICAgLy8gUGFyZW50bGVzcyBub2RlcyBhcmUgZWl0aGVyIGRvY3VtZW50cyBvciBkaXNjb25uZWN0
ZWQKKyAgICAgICAgaWYgKCAhYXVwIHx8ICFidXAgKSB7CisgICAgICAgICAgICByZXR1cm4gYSA9
PT0gZG9jdW1lbnQgPyAtMSA6CisgICAgICAgICAgICAgICAgYiA9PT0gZG9jdW1lbnQgPyAxIDoK
KyAgICAgICAgICAgICAgICBhdXAgPyAtMSA6CisgICAgICAgICAgICAgICAgYnVwID8gMSA6Cisg
ICAgICAgICAgICAgICAgc29ydElucHV0ID8KKyAgICAgICAgICAgICAgICAoIGluZGV4T2YoIHNv
cnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6CisgICAgICAgICAgICAg
ICAgMDsKKworICAgICAgICAvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzLCB3ZSBjYW4gZG8g
YSBxdWljayBjaGVjaworICAgICAgICB9IGVsc2UgaWYgKCBhdXAgPT09IGJ1cCApIHsKKyAgICAg
ICAgICAgIHJldHVybiBzaWJsaW5nQ2hlY2soIGEsIGIgKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIE90aGVyd2lzZSB3ZSBuZWVkIGZ1bGwgbGlzdHMgb2YgdGhlaXIgYW5jZXN0b3JzIGZvciBj
b21wYXJpc29uCisgICAgICAgIGN1ciA9IGE7CisgICAgICAgIHdoaWxlICggKGN1ciA9IGN1ci5w
YXJlbnROb2RlKSApIHsKKyAgICAgICAgICAgIGFwLnVuc2hpZnQoIGN1ciApOworICAgICAgICB9
CisgICAgICAgIGN1ciA9IGI7CisgICAgICAgIHdoaWxlICggKGN1ciA9IGN1ci5wYXJlbnROb2Rl
KSApIHsKKyAgICAgICAgICAgIGJwLnVuc2hpZnQoIGN1ciApOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gV2FsayBkb3duIHRoZSB0cmVlIGxvb2tpbmcgZm9yIGEgZGlzY3JlcGFuY3kKKyAgICAg
ICAgd2hpbGUgKCBhcFtpXSA9PT0gYnBbaV0gKSB7CisgICAgICAgICAgICBpKys7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gaSA/CisgICAgICAgICAgICAvLyBEbyBhIHNpYmxpbmcgY2hl
Y2sgaWYgdGhlIG5vZGVzIGhhdmUgYSBjb21tb24gYW5jZXN0b3IKKyAgICAgICAgICAgIHNpYmxp
bmdDaGVjayggYXBbaV0sIGJwW2ldICkgOgorCisgICAgICAgICAgICAvLyBPdGhlcndpc2Ugbm9k
ZXMgaW4gb3VyIGRvY3VtZW50IHNvcnQgZmlyc3QKKyAgICAgICAgICAgIGFwW2ldID09PSBwcmVm
ZXJyZWREb2MgPyAtMSA6CisgICAgICAgICAgICBicFtpXSA9PT0gcHJlZmVycmVkRG9jID8gMSA6
CisgICAgICAgICAgICAwOworICAgIH07CisKKyAgICByZXR1cm4gZG9jdW1lbnQ7Cit9OworCitT
aXp6bGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBlbGVtZW50cyApIHsKKyAgICByZXR1cm4g
U2l6emxlKCBleHByLCBudWxsLCBudWxsLCBlbGVtZW50cyApOworfTsKKworU2l6emxlLm1hdGNo
ZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBlbGVtLCBleHByICkgeworICAgIC8vIFNldCBkb2N1bWVu
dCB2YXJzIGlmIG5lZWRlZAorICAgIGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSAp
ICE9PSBkb2N1bWVudCApIHsKKyAgICAgICAgc2V0RG9jdW1lbnQoIGVsZW0gKTsKKyAgICB9CisK
KyAgICAvLyBNYWtlIHN1cmUgdGhhdCBhdHRyaWJ1dGUgc2VsZWN0b3JzIGFyZSBxdW90ZWQKKyAg
ICBleHByID0gZXhwci5yZXBsYWNlKCByYXR0cmlidXRlUXVvdGVzLCAiPSckMSddIiApOworCisg
ICAgaWYgKCBzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciAmJiBkb2N1bWVudElzSFRNTCAmJgorICAg
ICAgICAhY29tcGlsZXJDYWNoZVsgZXhwciArICIgIiBdICYmCisgICAgICAgICggIXJidWdneU1h
dGNoZXMgfHwgIXJidWdneU1hdGNoZXMudGVzdCggZXhwciApICkgJiYKKyAgICAgICAgKCAhcmJ1
Z2d5UVNBICAgICB8fCAhcmJ1Z2d5UVNBLnRlc3QoIGV4cHIgKSApICkgeworCisgICAgICAgIHRy
eSB7CisgICAgICAgICAgICB2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBleHByICk7CisK
KyAgICAgICAgICAgIC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBvbiBk
aXNjb25uZWN0ZWQgbm9kZXMKKyAgICAgICAgICAgIGlmICggcmV0IHx8IHN1cHBvcnQuZGlzY29u
bmVjdGVkTWF0Y2ggfHwKKyAgICAgICAgICAgICAgICAgICAgLy8gQXMgd2VsbCwgZGlzY29ubmVj
dGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1lbnQKKyAgICAgICAgICAgICAgICAg
ICAgLy8gZnJhZ21lbnQgaW4gSUUgOQorICAgICAgICAgICAgICAgICAgICBlbGVtLmRvY3VtZW50
ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkgeworICAgICAgICAgICAgICAgIHJl
dHVybiByZXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKGUpIHt9CisgICAgfQor
CisgICAgcmV0dXJuIFNpenpsZSggZXhwciwgZG9jdW1lbnQsIG51bGwsIFsgZWxlbSBdICkubGVu
Z3RoID4gMDsKK307CisKK1NpenpsZS5jb250YWlucyA9IGZ1bmN0aW9uKCBjb250ZXh0LCBlbGVt
ICkgeworICAgIC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZAorICAgIGlmICggKCBjb250
ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCApICE9PSBkb2N1bWVudCApIHsKKyAgICAgICAg
c2V0RG9jdW1lbnQoIGNvbnRleHQgKTsKKyAgICB9CisgICAgcmV0dXJuIGNvbnRhaW5zKCBjb250
ZXh0LCBlbGVtICk7Cit9OworCitTaXp6bGUuYXR0ciA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkg
eworICAgIC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZAorICAgIGlmICggKCBlbGVtLm93
bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9PSBkb2N1bWVudCApIHsKKyAgICAgICAgc2V0RG9jdW1l
bnQoIGVsZW0gKTsKKyAgICB9CisKKyAgICB2YXIgZm4gPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUu
dG9Mb3dlckNhc2UoKSBdLAorICAgICAgICAvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IE9iamVjdC5w
cm90b3R5cGUgcHJvcGVydGllcyAoalF1ZXJ5ICMxMzgwNykKKyAgICAgICAgdmFsID0gZm4gJiYg
aGFzT3duLmNhbGwoIEV4cHIuYXR0ckhhbmRsZSwgbmFtZS50b0xvd2VyQ2FzZSgpICkgPworICAg
ICAgICAgICAgZm4oIGVsZW0sIG5hbWUsICFkb2N1bWVudElzSFRNTCApIDoKKyAgICAgICAgICAg
IHVuZGVmaW5lZDsKKworICAgIHJldHVybiB2YWwgIT09IHVuZGVmaW5lZCA/CisgICAgICAgIHZh
bCA6CisgICAgICAgIHN1cHBvcnQuYXR0cmlidXRlcyB8fCAhZG9jdW1lbnRJc0hUTUwgPworICAg
ICAgICAgICAgZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKSA6CisgICAgICAgICAgICAodmFsID0g
ZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpKSAmJiB2YWwuc3BlY2lmaWVkID8KKyAgICAgICAg
ICAgICAgICB2YWwudmFsdWUgOgorICAgICAgICAgICAgICAgIG51bGw7Cit9OworCitTaXp6bGUu
ZXNjYXBlID0gZnVuY3Rpb24oIHNlbCApIHsKKyAgICByZXR1cm4gKHNlbCArICIiKS5yZXBsYWNl
KCByY3NzZXNjYXBlLCBmY3NzZXNjYXBlICk7Cit9OworCitTaXp6bGUuZXJyb3IgPSBmdW5jdGlv
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
ICAgICAgIC8vIEJvb2xlYW4gcHJvcGVydGllcworICAgICAgICAiZW5hYmxlZCI6IGNyZWF0ZURp
c2FibGVkUHNldWRvKCBmYWxzZSApLAorICAgICAgICAiZGlzYWJsZWQiOiBjcmVhdGVEaXNhYmxl
ZFBzZXVkbyggdHJ1ZSApLAorCisgICAgICAgICJjaGVja2VkIjogZnVuY3Rpb24oIGVsZW0gKSB7
CisgICAgICAgICAgICAvLyBJbiBDU1MzLCA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIGJvdGggY2hl
Y2tlZCBhbmQgc2VsZWN0ZWQgZWxlbWVudHMKKyAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cudzMu
b3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkCisgICAgICAg
ICAgICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgICAg
ICAgICByZXR1cm4gKG5vZGVOYW1lID09PSAiaW5wdXQiICYmICEhZWxlbS5jaGVja2VkKSB8fCAo
bm9kZU5hbWUgPT09ICJvcHRpb24iICYmICEhZWxlbS5zZWxlY3RlZCk7CisgICAgICAgIH0sCisK
KyAgICAgICAgInNlbGVjdGVkIjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAvLyBB
Y2Nlc3NpbmcgdGhpcyBwcm9wZXJ0eSBtYWtlcyBzZWxlY3RlZC1ieS1kZWZhdWx0CisgICAgICAg
ICAgICAvLyBvcHRpb25zIGluIFNhZmFyaSB3b3JrIHByb3Blcmx5CisgICAgICAgICAgICBpZiAo
IGVsZW0ucGFyZW50Tm9kZSApIHsKKyAgICAgICAgICAgICAgICBlbGVtLnBhcmVudE5vZGUuc2Vs
ZWN0ZWRJbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGVsZW0uc2Vs
ZWN0ZWQgPT09IHRydWU7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8gQ29udGVudHMKKyAgICAg
ICAgImVtcHR5IjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAvLyBodHRwOi8vd3d3
LnczLm9yZy9UUi9zZWxlY3RvcnMvI2VtcHR5LXBzZXVkbworICAgICAgICAgICAgLy8gOmVtcHR5
IGlzIG5lZ2F0ZWQgYnkgZWxlbWVudCAoMSkgb3IgY29udGVudCBub2RlcyAodGV4dDogMzsgY2Rh
dGE6IDQ7IGVudGl0eSByZWY6IDUpLAorICAgICAgICAgICAgLy8gICBidXQgbm90IGJ5IG90aGVy
cyAoY29tbWVudDogODsgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbjogNzsgZXRjLikKKyAgICAgICAg
ICAgIC8vIG5vZGVUeXBlIDwgNiB3b3JrcyBiZWNhdXNlIGF0dHJpYnV0ZXMgKDIpIGRvIG5vdCBh
cHBlYXIgYXMgY2hpbGRyZW4KKyAgICAgICAgICAgIGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hp
bGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkgeworICAgICAgICAgICAgICAgIGlm
ICggZWxlbS5ub2RlVHlwZSA8IDYgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfSwKKworICAgICAgICAicGFyZW50IjogZnVuY3Rpb24oIGVsZW0gKSB7
CisgICAgICAgICAgICByZXR1cm4gIUV4cHIucHNldWRvc1siZW1wdHkiXSggZWxlbSApOworICAg
ICAgICB9LAorCisgICAgICAgIC8vIEVsZW1lbnQvaW5wdXQgdHlwZXMKKyAgICAgICAgImhlYWRl
ciI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgcmV0dXJuIHJoZWFkZXIudGVzdCgg
ZWxlbS5ub2RlTmFtZSApOworICAgICAgICB9LAorCisgICAgICAgICJpbnB1dCI6IGZ1bmN0aW9u
KCBlbGVtICkgeworICAgICAgICAgICAgcmV0dXJuIHJpbnB1dHMudGVzdCggZWxlbS5ub2RlTmFt
ZSApOworICAgICAgICB9LAorCisgICAgICAgICJidXR0b24iOiBmdW5jdGlvbiggZWxlbSApIHsK
KyAgICAgICAgICAgIHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOworICAg
ICAgICAgICAgcmV0dXJuIG5hbWUgPT09ICJpbnB1dCIgJiYgZWxlbS50eXBlID09PSAiYnV0dG9u
IiB8fCBuYW1lID09PSAiYnV0dG9uIjsKKyAgICAgICAgfSwKKworICAgICAgICAidGV4dCI6IGZ1
bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgdmFyIGF0dHI7CisgICAgICAgICAgICByZXR1
cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAiaW5wdXQiICYmCisgICAgICAgICAg
ICAgICAgZWxlbS50eXBlID09PSAidGV4dCIgJiYKKworICAgICAgICAgICAgICAgIC8vIFN1cHBv
cnQ6IElFPDgKKyAgICAgICAgICAgICAgICAvLyBOZXcgSFRNTDUgYXR0cmlidXRlIHZhbHVlcyAo
ZS5nLiwgInNlYXJjaCIpIGFwcGVhciB3aXRoIGVsZW0udHlwZSA9PT0gInRleHQiCisgICAgICAg
ICAgICAgICAgKCAoYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKCJ0eXBlIikpID09IG51bGwgfHwg
YXR0ci50b0xvd2VyQ2FzZSgpID09PSAidGV4dCIgKTsKKyAgICAgICAgfSwKKworICAgICAgICAv
LyBQb3NpdGlvbi1pbi1jb2xsZWN0aW9uCisgICAgICAgICJmaXJzdCI6IGNyZWF0ZVBvc2l0aW9u
YWxQc2V1ZG8oZnVuY3Rpb24oKSB7CisgICAgICAgICAgICByZXR1cm4gWyAwIF07CisgICAgICAg
IH0pLAorCisgICAgICAgICJsYXN0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbigg
bWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7CisgICAgICAgICAgICByZXR1cm4gWyBsZW5ndGggLSAx
IF07CisgICAgICAgIH0pLAorCisgICAgICAgICJlcSI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8o
ZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHsKKyAgICAgICAgICAg
IHJldHVybiBbIGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQgXTsK
KyAgICAgICAgfSksCisKKyAgICAgICAgImV2ZW4iOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1
bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHsKKyAgICAgICAgICAgIHZhciBpID0gMDsK
KyAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkgeworICAgICAgICAgICAg
ICAgIG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gbWF0Y2hJbmRleGVzOworICAgICAgICB9KSwKKworICAgICAgICAib2RkIjogY3JlYXRl
UG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7CisgICAg
ICAgICAgICB2YXIgaSA9IDE7CisgICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0g
MiApIHsKKyAgICAgICAgICAgICAgICBtYXRjaEluZGV4ZXMucHVzaCggaSApOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIG1hdGNoSW5kZXhlczsKKyAgICAgICAgfSksCisKKyAg
ICAgICAgImx0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVz
LCBsZW5ndGgsIGFyZ3VtZW50ICkgeworICAgICAgICAgICAgdmFyIGkgPSBhcmd1bWVudCA8IDAg
PyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50OworICAgICAgICAgICAgZm9yICggOyAtLWkg
Pj0gMDsgKSB7CisgICAgICAgICAgICAgICAgbWF0Y2hJbmRleGVzLnB1c2goIGkgKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtYXRjaEluZGV4ZXM7CisgICAgICAgIH0pLAor
CisgICAgICAgICJndCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5k
ZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHsKKyAgICAgICAgICAgIHZhciBpID0gYXJndW1lbnQg
PCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDsKKyAgICAgICAgICAgIGZvciAoIDsg
KytpIDwgbGVuZ3RoOyApIHsKKyAgICAgICAgICAgICAgICBtYXRjaEluZGV4ZXMucHVzaCggaSAp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG1hdGNoSW5kZXhlczsKKyAgICAg
ICAgfSkKKyAgICB9Cit9OworCitFeHByLnBzZXVkb3NbIm50aCJdID0gRXhwci5wc2V1ZG9zWyJl
cSJdOworCisvLyBBZGQgYnV0dG9uL2lucHV0IHR5cGUgcHNldWRvcworZm9yICggaSBpbiB7IHJh
ZGlvOiB0cnVlLCBjaGVja2JveDogdHJ1ZSwgZmlsZTogdHJ1ZSwgcGFzc3dvcmQ6IHRydWUsIGlt
YWdlOiB0cnVlIH0gKSB7CisgICAgRXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVJbnB1dFBzZXVk
byggaSApOworfQorZm9yICggaSBpbiB7IHN1Ym1pdDogdHJ1ZSwgcmVzZXQ6IHRydWUgfSApIHsK
KyAgICBFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUJ1dHRvblBzZXVkbyggaSApOworfQorCisv
LyBFYXN5IEFQSSBmb3IgY3JlYXRpbmcgbmV3IHNldEZpbHRlcnMKK2Z1bmN0aW9uIHNldEZpbHRl
cnMoKSB7fQorc2V0RmlsdGVycy5wcm90b3R5cGUgPSBFeHByLmZpbHRlcnMgPSBFeHByLnBzZXVk
b3M7CitFeHByLnNldEZpbHRlcnMgPSBuZXcgc2V0RmlsdGVycygpOworCit0b2tlbml6ZSA9IFNp
enpsZS50b2tlbml6ZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgcGFyc2VPbmx5ICkgeworICAgIHZh
ciBtYXRjaGVkLCBtYXRjaCwgdG9rZW5zLCB0eXBlLAorICAgICAgICBzb0ZhciwgZ3JvdXBzLCBw
cmVGaWx0ZXJzLAorICAgICAgICBjYWNoZWQgPSB0b2tlbkNhY2hlWyBzZWxlY3RvciArICIgIiBd
OworCisgICAgaWYgKCBjYWNoZWQgKSB7CisgICAgICAgIHJldHVybiBwYXJzZU9ubHkgPyAwIDog
Y2FjaGVkLnNsaWNlKCAwICk7CisgICAgfQorCisgICAgc29GYXIgPSBzZWxlY3RvcjsKKyAgICBn
cm91cHMgPSBbXTsKKyAgICBwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7CisKKyAgICB3aGls
ZSAoIHNvRmFyICkgeworCisgICAgICAgIC8vIENvbW1hIGFuZCBmaXJzdCBydW4KKyAgICAgICAg
aWYgKCAhbWF0Y2hlZCB8fCAobWF0Y2ggPSByY29tbWEuZXhlYyggc29GYXIgKSkgKSB7CisgICAg
ICAgICAgICBpZiAoIG1hdGNoICkgeworICAgICAgICAgICAgICAgIC8vIERvbid0IGNvbnN1bWUg
dHJhaWxpbmcgY29tbWFzIGFzIHZhbGlkCisgICAgICAgICAgICAgICAgc29GYXIgPSBzb0Zhci5z
bGljZSggbWF0Y2hbMF0ubGVuZ3RoICkgfHwgc29GYXI7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBncm91cHMucHVzaCggKHRva2VucyA9IFtdKSApOworICAgICAgICB9CisKKyAgICAgICAg
bWF0Y2hlZCA9IGZhbHNlOworCisgICAgICAgIC8vIENvbWJpbmF0b3JzCisgICAgICAgIGlmICgg
KG1hdGNoID0gcmNvbWJpbmF0b3JzLmV4ZWMoIHNvRmFyICkpICkgeworICAgICAgICAgICAgbWF0
Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7CisgICAgICAgICAgICB0b2tlbnMucHVzaCh7CisgICAgICAg
ICAgICAgICAgdmFsdWU6IG1hdGNoZWQsCisgICAgICAgICAgICAgICAgLy8gQ2FzdCBkZXNjZW5k
YW50IGNvbWJpbmF0b3JzIHRvIHNwYWNlCisgICAgICAgICAgICAgICAgdHlwZTogbWF0Y2hbMF0u
cmVwbGFjZSggcnRyaW0sICIgIiApCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHNvRmFy
ID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBGaWx0ZXJzCisgICAgICAgIGZvciAoIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7CisgICAgICAg
ICAgICBpZiAoIChtYXRjaCA9IG1hdGNoRXhwclsgdHlwZSBdLmV4ZWMoIHNvRmFyICkpICYmICgh
cHJlRmlsdGVyc1sgdHlwZSBdIHx8CisgICAgICAgICAgICAgICAgKG1hdGNoID0gcHJlRmlsdGVy
c1sgdHlwZSBdKCBtYXRjaCApKSkgKSB7CisgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IG1hdGNo
LnNoaWZ0KCk7CisgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2goeworICAgICAgICAgICAgICAg
ICAgICB2YWx1ZTogbWF0Y2hlZCwKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZSwKKyAg
ICAgICAgICAgICAgICAgICAgbWF0Y2hlczogbWF0Y2gKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICBzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCAhbWF0Y2hlZCApIHsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmV0dXJuIHRoZSBsZW5n
dGggb2YgdGhlIGludmFsaWQgZXhjZXNzCisgICAgLy8gaWYgd2UncmUganVzdCBwYXJzaW5nCisg
ICAgLy8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvciBvciByZXR1cm4gdG9rZW5zCisgICAgcmV0
dXJuIHBhcnNlT25seSA/CisgICAgICAgIHNvRmFyLmxlbmd0aCA6CisgICAgICAgIHNvRmFyID8K
KyAgICAgICAgICAgIFNpenpsZS5lcnJvciggc2VsZWN0b3IgKSA6CisgICAgICAgICAgICAvLyBD
YWNoZSB0aGUgdG9rZW5zCisgICAgICAgICAgICB0b2tlbkNhY2hlKCBzZWxlY3RvciwgZ3JvdXBz
ICkuc2xpY2UoIDAgKTsKK307CisKK2Z1bmN0aW9uIHRvU2VsZWN0b3IoIHRva2VucyApIHsKKyAg
ICB2YXIgaSA9IDAsCisgICAgICAgIGxlbiA9IHRva2Vucy5sZW5ndGgsCisgICAgICAgIHNlbGVj
dG9yID0gIiI7CisgICAgZm9yICggOyBpIDwgbGVuOyBpKysgKSB7CisgICAgICAgIHNlbGVjdG9y
ICs9IHRva2Vuc1tpXS52YWx1ZTsKKyAgICB9CisgICAgcmV0dXJuIHNlbGVjdG9yOworfQorCitm
dW5jdGlvbiBhZGRDb21iaW5hdG9yKCBtYXRjaGVyLCBjb21iaW5hdG9yLCBiYXNlICkgeworICAg
IHZhciBkaXIgPSBjb21iaW5hdG9yLmRpciwKKyAgICAgICAgc2tpcCA9IGNvbWJpbmF0b3IubmV4
dCwKKyAgICAgICAga2V5ID0gc2tpcCB8fCBkaXIsCisgICAgICAgIGNoZWNrTm9uRWxlbWVudHMg
PSBiYXNlICYmIGtleSA9PT0gInBhcmVudE5vZGUiLAorICAgICAgICBkb25lTmFtZSA9IGRvbmUr
KzsKKworICAgIHJldHVybiBjb21iaW5hdG9yLmZpcnN0ID8KKyAgICAgICAgLy8gQ2hlY2sgYWdh
aW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50CisgICAgICAgIGZ1bmN0aW9u
KCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7CisgICAgICAgICAgICB3aGlsZSAoIChlbGVtID0gZWxl
bVsgZGlyIF0pICkgeworICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8
fCBjaGVja05vbkVsZW1lbnRzICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hl
ciggZWxlbSwgY29udGV4dCwgeG1sICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IDoKKworICAgICAgICAvLyBD
aGVjayBhZ2FpbnN0IGFsbCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudHMKKyAgICAgICAgZnVu
Y3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKKyAgICAgICAgICAgIHZhciBvbGRDYWNoZSwg
dW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsCisgICAgICAgICAgICAgICAgbmV3Q2FjaGUgPSBbIGRp
cnJ1bnMsIGRvbmVOYW1lIF07CisKKyAgICAgICAgICAgIC8vIFdlIGNhbid0IHNldCBhcmJpdHJh
cnkgZGF0YSBvbiBYTUwgbm9kZXMsIHNvIHRoZXkgZG9uJ3QgYmVuZWZpdCBmcm9tIGNvbWJpbmF0
b3IgY2FjaGluZworICAgICAgICAgICAgaWYgKCB4bWwgKSB7CisgICAgICAgICAgICAgICAgd2hp
bGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBl
bGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0p
ICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hl
Y2tOb25FbGVtZW50cyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGVyQ2FjaGUgPSBl
bGVtWyBleHBhbmRvIF0gfHwgKGVsZW1bIGV4cGFuZG8gXSA9IHt9KTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUgPDkgb25seQorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkp
CisgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIGVsZW0u
dW5pcXVlSUQgXSB8fCAob3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdID0ge30pOworCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIHNraXAgJiYgc2tpcCA9PT0gZWxlbS5ub2RlTmFtZS50
b0xvd2VyQ2FzZSgpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVt
WyBkaXIgXSB8fCBlbGVtOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggKG9s
ZENhY2hlID0gdW5pcXVlQ2FjaGVbIGtleSBdKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9sZENhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgb2xkQ2FjaGVbIDEgXSA9PT0gZG9uZU5h
bWUgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBc3NpZ24gdG8gbmV3Q2Fj
aGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50cworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobmV3Q2FjaGVbIDIgXSA9IG9sZENhY2hlWyAy
IF0pOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBSZXVzZSBuZXdjYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRv
IHByZXZpb3VzIGVsZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlQ2Fj
aGVbIGtleSBdID0gbmV3Q2FjaGU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBB
IG1hdGNoIG1lYW5zIHdlJ3JlIGRvbmU7IGEgZmFpbCBtZWFucyB3ZSBoYXZlIHRvIGtlZXAgY2hl
Y2tpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChuZXdDYWNoZVsgMiBdID0g
bWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkpICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH07Cit9CisKK2Z1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHsKKyAgICBy
ZXR1cm4gbWF0Y2hlcnMubGVuZ3RoID4gMSA/CisgICAgICAgIGZ1bmN0aW9uKCBlbGVtLCBjb250
ZXh0LCB4bWwgKSB7CisgICAgICAgICAgICB2YXIgaSA9IG1hdGNoZXJzLmxlbmd0aDsKKyAgICAg
ICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgICAgIGlmICggIW1hdGNoZXJzW2ld
KCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9IDoKKyAgICAgICAgbWF0Y2hlcnNbMF07Cit9CisKK2Z1bmN0aW9u
IG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yLCBjb250ZXh0cywgcmVzdWx0cyApIHsKKyAgICB2
YXIgaSA9IDAsCisgICAgICAgIGxlbiA9IGNvbnRleHRzLmxlbmd0aDsKKyAgICBmb3IgKCA7IGkg
PCBsZW47IGkrKyApIHsKKyAgICAgICAgU2l6emxlKCBzZWxlY3RvciwgY29udGV4dHNbaV0sIHJl
c3VsdHMgKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK2Z1bmN0aW9uIGNvbmRl
bnNlKCB1bm1hdGNoZWQsIG1hcCwgZmlsdGVyLCBjb250ZXh0LCB4bWwgKSB7CisgICAgdmFyIGVs
ZW0sCisgICAgICAgIG5ld1VubWF0Y2hlZCA9IFtdLAorICAgICAgICBpID0gMCwKKyAgICAgICAg
bGVuID0gdW5tYXRjaGVkLmxlbmd0aCwKKyAgICAgICAgbWFwcGVkID0gbWFwICE9IG51bGw7CisK
KyAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKKyAgICAgICAgaWYgKCAoZWxlbSA9IHVubWF0
Y2hlZFtpXSkgKSB7CisgICAgICAgICAgICBpZiAoICFmaWx0ZXIgfHwgZmlsdGVyKCBlbGVtLCBj
b250ZXh0LCB4bWwgKSApIHsKKyAgICAgICAgICAgICAgICBuZXdVbm1hdGNoZWQucHVzaCggZWxl
bSApOworICAgICAgICAgICAgICAgIGlmICggbWFwcGVkICkgeworICAgICAgICAgICAgICAgICAg
ICBtYXAucHVzaCggaSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBuZXdVbm1hdGNoZWQ7Cit9CisKK2Z1bmN0aW9uIHNl
dE1hdGNoZXIoIHByZUZpbHRlciwgc2VsZWN0b3IsIG1hdGNoZXIsIHBvc3RGaWx0ZXIsIHBvc3RG
aW5kZXIsIHBvc3RTZWxlY3RvciApIHsKKyAgICBpZiAoIHBvc3RGaWx0ZXIgJiYgIXBvc3RGaWx0
ZXJbIGV4cGFuZG8gXSApIHsKKyAgICAgICAgcG9zdEZpbHRlciA9IHNldE1hdGNoZXIoIHBvc3RG
aWx0ZXIgKTsKKyAgICB9CisgICAgaWYgKCBwb3N0RmluZGVyICYmICFwb3N0RmluZGVyWyBleHBh
bmRvIF0gKSB7CisgICAgICAgIHBvc3RGaW5kZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmluZGVyLCBw
b3N0U2VsZWN0b3IgKTsKKyAgICB9CisgICAgcmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbigg
c2VlZCwgcmVzdWx0cywgY29udGV4dCwgeG1sICkgeworICAgICAgICB2YXIgdGVtcCwgaSwgZWxl
bSwKKyAgICAgICAgICAgIHByZU1hcCA9IFtdLAorICAgICAgICAgICAgcG9zdE1hcCA9IFtdLAor
ICAgICAgICAgICAgcHJlZXhpc3RpbmcgPSByZXN1bHRzLmxlbmd0aCwKKworICAgICAgICAgICAg
Ly8gR2V0IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVkIG9yIGNvbnRleHQKKyAgICAgICAgICAg
IGVsZW1zID0gc2VlZCB8fCBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciB8fCAiKiIsIGNvbnRl
eHQubm9kZVR5cGUgPyBbIGNvbnRleHQgXSA6IGNvbnRleHQsIFtdICksCisKKyAgICAgICAgICAg
IC8vIFByZWZpbHRlciB0byBnZXQgbWF0Y2hlciBpbnB1dCwgcHJlc2VydmluZyBhIG1hcCBmb3Ig
c2VlZC1yZXN1bHRzIHN5bmNocm9uaXphdGlvbgorICAgICAgICAgICAgbWF0Y2hlckluID0gcHJl
RmlsdGVyICYmICggc2VlZCB8fCAhc2VsZWN0b3IgKSA/CisgICAgICAgICAgICAgICAgY29uZGVu
c2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwgeG1sICkgOgorICAgICAgICAg
ICAgICAgIGVsZW1zLAorCisgICAgICAgICAgICBtYXRjaGVyT3V0ID0gbWF0Y2hlciA/CisgICAg
ICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHBvc3RGaW5kZXIsIG9yIGZpbHRlcmVkIHNlZWQs
IG9yIG5vbi1zZWVkIHBvc3RGaWx0ZXIgb3IgcHJlZXhpc3RpbmcgcmVzdWx0cywKKyAgICAgICAg
ICAgICAgICBwb3N0RmluZGVyIHx8ICggc2VlZCA/IHByZUZpbHRlciA6IHByZWV4aXN0aW5nIHx8
IHBvc3RGaWx0ZXIgKSA/CisKKyAgICAgICAgICAgICAgICAgICAgLy8gLi4uaW50ZXJtZWRpYXRl
IHByb2Nlc3NpbmcgaXMgbmVjZXNzYXJ5CisgICAgICAgICAgICAgICAgICAgIFtdIDoKKworICAg
ICAgICAgICAgICAgICAgICAvLyAuLi5vdGhlcndpc2UgdXNlIHJlc3VsdHMgZGlyZWN0bHkKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0cyA6CisgICAgICAgICAgICAgICAgbWF0Y2hlckluOwor
CisgICAgICAgIC8vIEZpbmQgcHJpbWFyeSBtYXRjaGVzCisgICAgICAgIGlmICggbWF0Y2hlciAp
IHsKKyAgICAgICAgICAgIG1hdGNoZXIoIG1hdGNoZXJJbiwgbWF0Y2hlck91dCwgY29udGV4dCwg
eG1sICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBBcHBseSBwb3N0RmlsdGVyCisgICAgICAg
IGlmICggcG9zdEZpbHRlciApIHsKKyAgICAgICAgICAgIHRlbXAgPSBjb25kZW5zZSggbWF0Y2hl
ck91dCwgcG9zdE1hcCApOworICAgICAgICAgICAgcG9zdEZpbHRlciggdGVtcCwgW10sIGNvbnRl
eHQsIHhtbCApOworCisgICAgICAgICAgICAvLyBVbi1tYXRjaCBmYWlsaW5nIGVsZW1lbnRzIGJ5
IG1vdmluZyB0aGVtIGJhY2sgdG8gbWF0Y2hlckluCisgICAgICAgICAgICBpID0gdGVtcC5sZW5n
dGg7CisgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIChl
bGVtID0gdGVtcFtpXSkgKSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZXJPdXRbIHBvc3RN
YXBbaV0gXSA9ICEobWF0Y2hlckluWyBwb3N0TWFwW2ldIF0gPSBlbGVtKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHNlZWQgKSB7
CisgICAgICAgICAgICBpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkgeworICAgICAgICAg
ICAgICAgIGlmICggcG9zdEZpbmRlciApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRo
ZSBmaW5hbCBtYXRjaGVyT3V0IGJ5IGNvbmRlbnNpbmcgdGhpcyBpbnRlcm1lZGlhdGUgaW50byBw
b3N0RmluZGVyIGNvbnRleHRzCisgICAgICAgICAgICAgICAgICAgIHRlbXAgPSBbXTsKKyAgICAg
ICAgICAgICAgICAgICAgaSA9IG1hdGNoZXJPdXQubGVuZ3RoOworICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKGVsZW0gPSBt
YXRjaGVyT3V0W2ldKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXN0b3Jl
IG1hdGNoZXJJbiBzaW5jZSBlbGVtIGlzIG5vdCB5ZXQgYSBmaW5hbCBtYXRjaAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRlbXAucHVzaCggKG1hdGNoZXJJbltpXSA9IGVsZW0pICk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgcG9zdEZpbmRlciggbnVsbCwgKG1hdGNoZXJPdXQgPSBbXSksIHRlbXAsIHht
bCApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIE1vdmUgbWF0Y2hl
ZCBlbGVtZW50cyBmcm9tIHNlZWQgdG8gcmVzdWx0cyB0byBrZWVwIHRoZW0gc3luY2hyb25pemVk
CisgICAgICAgICAgICAgICAgaSA9IG1hdGNoZXJPdXQubGVuZ3RoOworICAgICAgICAgICAgICAg
IHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIChlbGVtID0gbWF0Y2hl
ck91dFtpXSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICh0ZW1wID0gcG9zdEZpbmRlciA/
IGluZGV4T2YoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFtpXSkgPiAtMSApIHsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgc2VlZFt0ZW1wXSA9ICEocmVzdWx0c1t0ZW1wXSA9IGVsZW0pOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisg
ICAgICAgIC8vIEFkZCBlbGVtZW50cyB0byByZXN1bHRzLCB0aHJvdWdoIHBvc3RGaW5kZXIgaWYg
ZGVmaW5lZAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWF0Y2hlck91dCA9IGNvbmRl
bnNlKAorICAgICAgICAgICAgICAgIG1hdGNoZXJPdXQgPT09IHJlc3VsdHMgPworICAgICAgICAg
ICAgICAgICAgICBtYXRjaGVyT3V0LnNwbGljZSggcHJlZXhpc3RpbmcsIG1hdGNoZXJPdXQubGVu
Z3RoICkgOgorICAgICAgICAgICAgICAgICAgICBtYXRjaGVyT3V0CisgICAgICAgICAgICApOwor
ICAgICAgICAgICAgaWYgKCBwb3N0RmluZGVyICkgeworICAgICAgICAgICAgICAgIHBvc3RGaW5k
ZXIoIG51bGwsIHJlc3VsdHMsIG1hdGNoZXJPdXQsIHhtbCApOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBwdXNoLmFwcGx5KCByZXN1bHRzLCBtYXRjaGVyT3V0ICk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKK30KKworZnVuY3Rpb24gbWF0Y2hlckZy
b21Ub2tlbnMoIHRva2VucyApIHsKKyAgICB2YXIgY2hlY2tDb250ZXh0LCBtYXRjaGVyLCBqLAor
ICAgICAgICBsZW4gPSB0b2tlbnMubGVuZ3RoLAorICAgICAgICBsZWFkaW5nUmVsYXRpdmUgPSBF
eHByLnJlbGF0aXZlWyB0b2tlbnNbMF0udHlwZSBdLAorICAgICAgICBpbXBsaWNpdFJlbGF0aXZl
ID0gbGVhZGluZ1JlbGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbIiAiXSwKKyAgICAgICAgaSA9IGxl
YWRpbmdSZWxhdGl2ZSA/IDEgOiAwLAorCisgICAgICAgIC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0
Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBj
b250ZXh0KHMpCisgICAgICAgIG1hdGNoQ29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9u
KCBlbGVtICkgeworICAgICAgICAgICAgcmV0dXJuIGVsZW0gPT09IGNoZWNrQ29udGV4dDsKKyAg
ICAgICAgfSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLAorICAgICAgICBtYXRjaEFueUNvbnRl
eHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVy
biBpbmRleE9mKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xOworICAgICAgICB9LCBpbXBsaWNp
dFJlbGF0aXZlLCB0cnVlICksCisgICAgICAgIG1hdGNoZXJzID0gWyBmdW5jdGlvbiggZWxlbSwg
Y29udGV4dCwgeG1sICkgeworICAgICAgICAgICAgdmFyIHJldCA9ICggIWxlYWRpbmdSZWxhdGl2
ZSAmJiAoIHhtbCB8fCBjb250ZXh0ICE9PSBvdXRlcm1vc3RDb250ZXh0ICkgKSB8fCAoCisgICAg
ICAgICAgICAgICAgKGNoZWNrQ29udGV4dCA9IGNvbnRleHQpLm5vZGVUeXBlID8KKyAgICAgICAg
ICAgICAgICAgICAgbWF0Y2hDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSA6CisgICAgICAg
ICAgICAgICAgICAgIG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgKTsKKyAg
ICAgICAgICAgIC8vIEF2b2lkIGhhbmdpbmcgb250byBlbGVtZW50IChpc3N1ZSAjMjk5KQorICAg
ICAgICAgICAgY2hlY2tDb250ZXh0ID0gbnVsbDsKKyAgICAgICAgICAgIHJldHVybiByZXQ7Cisg
ICAgICAgIH0gXTsKKworICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworICAgICAgICBpZiAo
IChtYXRjaGVyID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zW2ldLnR5cGUgXSkgKSB7CisgICAgICAg
ICAgICBtYXRjaGVycyA9IFsgYWRkQ29tYmluYXRvcihlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMg
KSwgbWF0Y2hlcikgXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1hdGNoZXIgPSBF
eHByLmZpbHRlclsgdG9rZW5zW2ldLnR5cGUgXS5hcHBseSggbnVsbCwgdG9rZW5zW2ldLm1hdGNo
ZXMgKTsKKworICAgICAgICAgICAgLy8gUmV0dXJuIHNwZWNpYWwgdXBvbiBzZWVpbmcgYSBwb3Np
dGlvbmFsIG1hdGNoZXIKKyAgICAgICAgICAgIGlmICggbWF0Y2hlclsgZXhwYW5kbyBdICkgewor
ICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIG5leHQgcmVsYXRpdmUgb3BlcmF0b3IgKGlmIGFu
eSkgZm9yIHByb3BlciBoYW5kbGluZworICAgICAgICAgICAgICAgIGogPSArK2k7CisgICAgICAg
ICAgICAgICAgZm9yICggOyBqIDwgbGVuOyBqKysgKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICggRXhwci5yZWxhdGl2ZVsgdG9rZW5zW2pdLnR5cGUgXSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJldHVybiBzZXRNYXRjaGVyKAorICAgICAgICAgICAgICAgICAgICBp
ID4gMSAmJiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSwKKyAgICAgICAgICAgICAgICAgICAg
aSA+IDEgJiYgdG9TZWxlY3RvcigKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBw
cmVjZWRpbmcgdG9rZW4gd2FzIGEgZGVzY2VuZGFudCBjb21iaW5hdG9yLCBpbnNlcnQgYW4gaW1w
bGljaXQgYW55LWVsZW1lbnQgYCpgCisgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMuc2xp
Y2UoIDAsIGkgLSAxICkuY29uY2F0KHsgdmFsdWU6IHRva2Vuc1sgaSAtIDIgXS50eXBlID09PSAi
ICIgPyAiKiIgOiAiIiB9KQorICAgICAgICAgICAgICAgICAgICApLnJlcGxhY2UoIHJ0cmltLCAi
JDEiICksCisgICAgICAgICAgICAgICAgICAgIG1hdGNoZXIsCisgICAgICAgICAgICAgICAgICAg
IGkgPCBqICYmIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMuc2xpY2UoIGksIGogKSApLAorICAg
ICAgICAgICAgICAgICAgICBqIDwgbGVuICYmIG1hdGNoZXJGcm9tVG9rZW5zKCAodG9rZW5zID0g
dG9rZW5zLnNsaWNlKCBqICkpICksCisgICAgICAgICAgICAgICAgICAgIGogPCBsZW4gJiYgdG9T
ZWxlY3RvciggdG9rZW5zICkKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbWF0Y2hlcnMucHVzaCggbWF0Y2hlciApOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApOworfQorCitmdW5jdGlvbiBtYXRj
aGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSB7Cisg
ICAgdmFyIGJ5U2V0ID0gc2V0TWF0Y2hlcnMubGVuZ3RoID4gMCwKKyAgICAgICAgYnlFbGVtZW50
ID0gZWxlbWVudE1hdGNoZXJzLmxlbmd0aCA+IDAsCisgICAgICAgIHN1cGVyTWF0Y2hlciA9IGZ1
bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91dGVybW9zdCApIHsKKyAgICAg
ICAgICAgIHZhciBlbGVtLCBqLCBtYXRjaGVyLAorICAgICAgICAgICAgICAgIG1hdGNoZWRDb3Vu
dCA9IDAsCisgICAgICAgICAgICAgICAgaSA9ICIwIiwKKyAgICAgICAgICAgICAgICB1bm1hdGNo
ZWQgPSBzZWVkICYmIFtdLAorICAgICAgICAgICAgICAgIHNldE1hdGNoZWQgPSBbXSwKKyAgICAg
ICAgICAgICAgICBjb250ZXh0QmFja3VwID0gb3V0ZXJtb3N0Q29udGV4dCwKKyAgICAgICAgICAg
ICAgICAvLyBXZSBtdXN0IGFsd2F5cyBoYXZlIGVpdGhlciBzZWVkIGVsZW1lbnRzIG9yIG91dGVy
bW9zdCBjb250ZXh0CisgICAgICAgICAgICAgICAgZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAm
JiBFeHByLmZpbmRbIlRBRyJdKCAiKiIsIG91dGVybW9zdCApLAorICAgICAgICAgICAgICAgIC8v
IFVzZSBpbnRlZ2VyIGRpcnJ1bnMgaWZmIHRoaXMgaXMgdGhlIG91dGVybW9zdCBtYXRjaGVyCisg
ICAgICAgICAgICAgICAgZGlycnVuc1VuaXF1ZSA9IChkaXJydW5zICs9IGNvbnRleHRCYWNrdXAg
PT0gbnVsbCA/IDEgOiBNYXRoLnJhbmRvbSgpIHx8IDAuMSksCisgICAgICAgICAgICAgICAgbGVu
ID0gZWxlbXMubGVuZ3RoOworCisgICAgICAgICAgICBpZiAoIG91dGVybW9zdCApIHsKKyAgICAg
ICAgICAgICAgICBvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dCA9PT0gZG9jdW1lbnQgfHwgY29u
dGV4dCB8fCBvdXRlcm1vc3Q7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEFkZCBl
bGVtZW50cyBwYXNzaW5nIGVsZW1lbnRNYXRjaGVycyBkaXJlY3RseSB0byByZXN1bHRzCisgICAg
ICAgICAgICAvLyBTdXBwb3J0OiBJRTw5LCBTYWZhcmkKKyAgICAgICAgICAgIC8vIFRvbGVyYXRl
IE5vZGVMaXN0IHByb3BlcnRpZXMgKElFOiAibGVuZ3RoIjsgU2FmYXJpOiA8bnVtYmVyPikgbWF0
Y2hpbmcgZWxlbWVudHMgYnkgaWQKKyAgICAgICAgICAgIGZvciAoIDsgaSAhPT0gbGVuICYmIChl
bGVtID0gZWxlbXNbaV0pICE9IG51bGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGJ5
RWxlbWVudCAmJiBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICBqID0gMDsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCAhY29udGV4dCAmJiBlbGVtLm93bmVyRG9jdW1lbnQgIT09IGRvY3Vt
ZW50ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2V0RG9jdW1lbnQoIGVsZW0gKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHhtbCA9ICFkb2N1bWVudElzSFRNTDsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIChtYXRjaGVyID0gZWxlbWVu
dE1hdGNoZXJzW2orK10pICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVy
KCBlbGVtLCBjb250ZXh0IHx8IGRvY3VtZW50LCB4bWwpICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdHMucHVzaCggZWxlbSApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGlmICggb3V0ZXJtb3N0ICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBUcmFjayB1bm1hdGNo
ZWQgZWxlbWVudHMgZm9yIHNldCBmaWx0ZXJzCisgICAgICAgICAgICAgICAgaWYgKCBieVNldCAp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhleSB3aWxsIGhhdmUgZ29uZSB0aHJvdWdoIGFs
bCBwb3NzaWJsZSBtYXRjaGVycworICAgICAgICAgICAgICAgICAgICBpZiAoIChlbGVtID0gIW1h
dGNoZXIgJiYgZWxlbSkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkQ291bnQt
LTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIExlbmd0
aGVuIHRoZSBhcnJheSBmb3IgZXZlcnkgZWxlbWVudCwgbWF0Y2hlZCBvciBub3QKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCBzZWVkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5tYXRj
aGVkLnB1c2goIGVsZW0gKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gYGlgIGlzIG5vdyB0aGUgY291bnQg
b2YgZWxlbWVudHMgdmlzaXRlZCBhYm92ZSwgYW5kIGFkZGluZyBpdCB0byBgbWF0Y2hlZENvdW50
YAorICAgICAgICAgICAgLy8gbWFrZXMgdGhlIGxhdHRlciBub25uZWdhdGl2ZS4KKyAgICAgICAg
ICAgIG1hdGNoZWRDb3VudCArPSBpOworCisgICAgICAgICAgICAvLyBBcHBseSBzZXQgZmlsdGVy
cyB0byB1bm1hdGNoZWQgZWxlbWVudHMKKyAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgY2FuIGJl
IHNraXBwZWQgaWYgdGhlcmUgYXJlIG5vIHVubWF0Y2hlZCBlbGVtZW50cyAoaS5lLiwgYG1hdGNo
ZWRDb3VudGAKKyAgICAgICAgICAgIC8vIGVxdWFscyBgaWApLCB1bmxlc3Mgd2UgZGlkbid0IHZp
c2l0IF9hbnlfIGVsZW1lbnRzIGluIHRoZSBhYm92ZSBsb29wIGJlY2F1c2Ugd2UgaGF2ZQorICAg
ICAgICAgICAgLy8gbm8gZWxlbWVudCBtYXRjaGVycyBhbmQgbm8gc2VlZC4KKyAgICAgICAgICAg
IC8vIEluY3JlbWVudGluZyBhbiBpbml0aWFsbHktc3RyaW5nICIwIiBgaWAgYWxsb3dzIGBpYCB0
byByZW1haW4gYSBzdHJpbmcgb25seSBpbiB0aGF0CisgICAgICAgICAgICAvLyBjYXNlLCB3aGlj
aCB3aWxsIHJlc3VsdCBpbiBhICIwMCIgYG1hdGNoZWRDb3VudGAgdGhhdCBkaWZmZXJzIGZyb20g
YGlgIGJ1dCBpcyBhbHNvCisgICAgICAgICAgICAvLyBudW1lcmljYWxseSB6ZXJvLgorICAgICAg
ICAgICAgaWYgKCBieVNldCAmJiBpICE9PSBtYXRjaGVkQ291bnQgKSB7CisgICAgICAgICAgICAg
ICAgaiA9IDA7CisgICAgICAgICAgICAgICAgd2hpbGUgKCAobWF0Y2hlciA9IHNldE1hdGNoZXJz
W2orK10pICkgeworICAgICAgICAgICAgICAgICAgICBtYXRjaGVyKCB1bm1hdGNoZWQsIHNldE1h
dGNoZWQsIGNvbnRleHQsIHhtbCApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGlmICggc2VlZCApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVpbnRlZ3JhdGUgZWxl
bWVudCBtYXRjaGVzIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3Igc29ydGluZworICAgICAgICAg
ICAgICAgICAgICBpZiAoIG1hdGNoZWRDb3VudCA+IDAgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEo
dW5tYXRjaGVkW2ldIHx8IHNldE1hdGNoZWRbaV0pICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZXRNYXRjaGVkW2ldID0gcG9wLmNhbGwoIHJlc3VsdHMgKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGluZGV4IHBs
YWNlaG9sZGVyIHZhbHVlcyB0byBnZXQgb25seSBhY3R1YWwgbWF0Y2hlcworICAgICAgICAgICAg
ICAgICAgICBzZXRNYXRjaGVkID0gY29uZGVuc2UoIHNldE1hdGNoZWQgKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzCisgICAg
ICAgICAgICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywgc2V0TWF0Y2hlZCApOworCisgICAgICAg
ICAgICAgICAgLy8gU2VlZGxlc3Mgc2V0IG1hdGNoZXMgc3VjY2VlZGluZyBtdWx0aXBsZSBzdWNj
ZXNzZnVsIG1hdGNoZXJzIHN0aXB1bGF0ZSBzb3J0aW5nCisgICAgICAgICAgICAgICAgaWYgKCBv
dXRlcm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5ndGggPiAwICYmCisgICAgICAgICAg
ICAgICAgICAgICggbWF0Y2hlZENvdW50ICsgc2V0TWF0Y2hlcnMubGVuZ3RoICkgPiAxICkgewor
CisgICAgICAgICAgICAgICAgICAgIFNpenpsZS51bmlxdWVTb3J0KCByZXN1bHRzICk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBPdmVycmlkZSBt
YW5pcHVsYXRpb24gb2YgZ2xvYmFscyBieSBuZXN0ZWQgbWF0Y2hlcnMKKyAgICAgICAgICAgIGlm
ICggb3V0ZXJtb3N0ICkgeworICAgICAgICAgICAgICAgIGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVl
OworICAgICAgICAgICAgICAgIG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0QmFja3VwOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdW5tYXRjaGVkOworICAgICAgICB9Owor
CisgICAgcmV0dXJuIGJ5U2V0ID8KKyAgICAgICAgbWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIg
KSA6CisgICAgICAgIHN1cGVyTWF0Y2hlcjsKK30KKworY29tcGlsZSA9IFNpenpsZS5jb21waWxl
ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBtYXRjaCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHsK
KyAgICB2YXIgaSwKKyAgICAgICAgc2V0TWF0Y2hlcnMgPSBbXSwKKyAgICAgICAgZWxlbWVudE1h
dGNoZXJzID0gW10sCisgICAgICAgIGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsg
IiAiIF07CisKKyAgICBpZiAoICFjYWNoZWQgKSB7CisgICAgICAgIC8vIEdlbmVyYXRlIGEgZnVu
Y3Rpb24gb2YgcmVjdXJzaXZlIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNoZWNrIGVh
Y2ggZWxlbWVudAorICAgICAgICBpZiAoICFtYXRjaCApIHsKKyAgICAgICAgICAgIG1hdGNoID0g
dG9rZW5pemUoIHNlbGVjdG9yICk7CisgICAgICAgIH0KKyAgICAgICAgaSA9IG1hdGNoLmxlbmd0
aDsKKyAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICBjYWNoZWQgPSBtYXRjaGVy
RnJvbVRva2VucyggbWF0Y2hbaV0gKTsKKyAgICAgICAgICAgIGlmICggY2FjaGVkWyBleHBhbmRv
IF0gKSB7CisgICAgICAgICAgICAgICAgc2V0TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVsZW1lbnRNYXRjaGVycy5wdXNoKCBj
YWNoZWQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIENhY2hlIHRo
ZSBjb21waWxlZCBmdW5jdGlvbgorICAgICAgICBjYWNoZWQgPSBjb21waWxlckNhY2hlKCBzZWxl
Y3RvciwgbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNo
ZXJzICkgKTsKKworICAgICAgICAvLyBTYXZlIHNlbGVjdG9yIGFuZCB0b2tlbml6YXRpb24KKyAg
ICAgICAgY2FjaGVkLnNlbGVjdG9yID0gc2VsZWN0b3I7CisgICAgfQorICAgIHJldHVybiBjYWNo
ZWQ7Cit9OworCisvKioKKyAqIEEgbG93LWxldmVsIHNlbGVjdGlvbiBmdW5jdGlvbiB0aGF0IHdv
cmtzIHdpdGggU2l6emxlJ3MgY29tcGlsZWQKKyAqICBzZWxlY3RvciBmdW5jdGlvbnMKKyAqIEBw
YXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBzZWxlY3RvciBBIHNlbGVjdG9yIG9yIGEgcHJlLWNvbXBp
bGVkCisgKiAgc2VsZWN0b3IgZnVuY3Rpb24gYnVpbHQgd2l0aCBTaXp6bGUuY29tcGlsZQorICog
QHBhcmFtIHtFbGVtZW50fSBjb250ZXh0CisgKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0c10KKyAq
IEBwYXJhbSB7QXJyYXl9IFtzZWVkXSBBIHNldCBvZiBlbGVtZW50cyB0byBtYXRjaCBhZ2FpbnN0
CisgKi8KK3NlbGVjdCA9IFNpenpsZS5zZWxlY3QgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRl
eHQsIHJlc3VsdHMsIHNlZWQgKSB7CisgICAgdmFyIGksIHRva2VucywgdG9rZW4sIHR5cGUsIGZp
bmQsCisgICAgICAgIGNvbXBpbGVkID0gdHlwZW9mIHNlbGVjdG9yID09PSAiZnVuY3Rpb24iICYm
IHNlbGVjdG9yLAorICAgICAgICBtYXRjaCA9ICFzZWVkICYmIHRva2VuaXplKCAoc2VsZWN0b3Ig
PSBjb21waWxlZC5zZWxlY3RvciB8fCBzZWxlY3RvcikgKTsKKworICAgIHJlc3VsdHMgPSByZXN1
bHRzIHx8IFtdOworCisgICAgLy8gVHJ5IHRvIG1pbmltaXplIG9wZXJhdGlvbnMgaWYgdGhlcmUg
aXMgb25seSBvbmUgc2VsZWN0b3IgaW4gdGhlIGxpc3QgYW5kIG5vIHNlZWQKKyAgICAvLyAodGhl
IGxhdHRlciBvZiB3aGljaCBndWFyYW50ZWVzIHVzIGNvbnRleHQpCisgICAgaWYgKCBtYXRjaC5s
ZW5ndGggPT09IDEgKSB7CisKKyAgICAgICAgLy8gUmVkdWNlIGNvbnRleHQgaWYgdGhlIGxlYWRp
bmcgY29tcG91bmQgc2VsZWN0b3IgaXMgYW4gSUQKKyAgICAgICAgdG9rZW5zID0gbWF0Y2hbMF0g
PSBtYXRjaFswXS5zbGljZSggMCApOworICAgICAgICBpZiAoIHRva2Vucy5sZW5ndGggPiAyICYm
ICh0b2tlbiA9IHRva2Vuc1swXSkudHlwZSA9PT0gIklEIiAmJgorICAgICAgICAgICAgICAgIGNv
bnRleHQubm9kZVR5cGUgPT09IDkgJiYgZG9jdW1lbnRJc0hUTUwgJiYgRXhwci5yZWxhdGl2ZVsg
dG9rZW5zWzFdLnR5cGUgXSApIHsKKworICAgICAgICAgICAgY29udGV4dCA9ICggRXhwci5maW5k
WyJJRCJdKCB0b2tlbi5tYXRjaGVzWzBdLnJlcGxhY2UocnVuZXNjYXBlLCBmdW5lc2NhcGUpLCBj
b250ZXh0ICkgfHwgW10gKVswXTsKKyAgICAgICAgICAgIGlmICggIWNvbnRleHQgKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisKKyAgICAgICAgICAgIC8vIFByZWNvbXBpbGVk
IG1hdGNoZXJzIHdpbGwgc3RpbGwgdmVyaWZ5IGFuY2VzdHJ5LCBzbyBzdGVwIHVwIGEgbGV2ZWwK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAoIGNvbXBpbGVkICkgeworICAgICAgICAgICAgICAgIGNv
bnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlmdCgpLnZhbHVlLmxlbmd0aCAp
OworICAgICAgICB9CisKKyAgICAgICAgLy8gRmV0Y2ggYSBzZWVkIHNldCBmb3IgcmlnaHQtdG8t
bGVmdCBtYXRjaGluZworICAgICAgICBpID0gbWF0Y2hFeHByWyJuZWVkc0NvbnRleHQiXS50ZXN0
KCBzZWxlY3RvciApID8gMCA6IHRva2Vucy5sZW5ndGg7CisgICAgICAgIHdoaWxlICggaS0tICkg
eworICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbaV07CisKKyAgICAgICAgICAgIC8vIEFib3J0
IGlmIHdlIGhpdCBhIGNvbWJpbmF0b3IKKyAgICAgICAgICAgIGlmICggRXhwci5yZWxhdGl2ZVsg
KHR5cGUgPSB0b2tlbi50eXBlKSBdICkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKCAoZmluZCA9IEV4cHIuZmluZFsgdHlwZSBdKSApIHsK
KyAgICAgICAgICAgICAgICAvLyBTZWFyY2gsIGV4cGFuZGluZyBjb250ZXh0IGZvciBsZWFkaW5n
IHNpYmxpbmcgY29tYmluYXRvcnMKKyAgICAgICAgICAgICAgICBpZiAoIChzZWVkID0gZmluZCgK
KyAgICAgICAgICAgICAgICAgICAgdG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKCBydW5lc2NhcGUs
IGZ1bmVzY2FwZSApLAorICAgICAgICAgICAgICAgICAgICByc2libGluZy50ZXN0KCB0b2tlbnNb
MF0udHlwZSApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0
CisgICAgICAgICAgICAgICAgKSkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgc2Vl
ZCBpcyBlbXB0eSBvciBubyB0b2tlbnMgcmVtYWluLCB3ZSBjYW4gcmV0dXJuIGVhcmx5CisgICAg
ICAgICAgICAgICAgICAgIHRva2Vucy5zcGxpY2UoIGksIDEgKTsKKyAgICAgICAgICAgICAgICAg
ICAgc2VsZWN0b3IgPSBzZWVkLmxlbmd0aCAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhc2VsZWN0b3IgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBwdXNoLmFwcGx5KCByZXN1bHRzLCBzZWVkICk7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0czsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIENvbXBpbGUgYW5kIGV4ZWN1dGUgYSBmaWx0ZXJpbmcgZnVuY3Rpb24g
aWYgb25lIGlzIG5vdCBwcm92aWRlZAorICAgIC8vIFByb3ZpZGUgYG1hdGNoYCB0byBhdm9pZCBy
ZXRva2VuaXphdGlvbiBpZiB3ZSBtb2RpZmllZCB0aGUgc2VsZWN0b3IgYWJvdmUKKyAgICAoIGNv
bXBpbGVkIHx8IGNvbXBpbGUoIHNlbGVjdG9yLCBtYXRjaCApICkoCisgICAgICAgIHNlZWQsCisg
ICAgICAgIGNvbnRleHQsCisgICAgICAgICFkb2N1bWVudElzSFRNTCwKKyAgICAgICAgcmVzdWx0
cywKKyAgICAgICAgIWNvbnRleHQgfHwgcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0
Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwgY29udGV4dAorICAgICk7CisgICAgcmV0
dXJuIHJlc3VsdHM7Cit9OworCisvLyBPbmUtdGltZSBhc3NpZ25tZW50cworCisvLyBTb3J0IHN0
YWJpbGl0eQorc3VwcG9ydC5zb3J0U3RhYmxlID0gZXhwYW5kby5zcGxpdCgiIikuc29ydCggc29y
dE9yZGVyICkuam9pbigiIikgPT09IGV4cGFuZG87CisKKy8vIFN1cHBvcnQ6IENocm9tZSAxNC0z
NSsKKy8vIEFsd2F5cyBhc3N1bWUgZHVwbGljYXRlcyBpZiB0aGV5IGFyZW4ndCBwYXNzZWQgdG8g
dGhlIGNvbXBhcmlzb24gZnVuY3Rpb24KK3N1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcyA9ICEhaGFz
RHVwbGljYXRlOworCisvLyBJbml0aWFsaXplIGFnYWluc3QgdGhlIGRlZmF1bHQgZG9jdW1lbnQK
K3NldERvY3VtZW50KCk7CisKKy8vIFN1cHBvcnQ6IFdlYmtpdDw1MzcuMzIgLSBTYWZhcmkgNi4w
LjMvQ2hyb21lIDI1IChmaXhlZCBpbiBDaHJvbWUgMjcpCisvLyBEZXRhY2hlZCBub2RlcyBjb25m
b3VuZGluZ2x5IGZvbGxvdyAqZWFjaCBvdGhlcioKK3N1cHBvcnQuc29ydERldGFjaGVkID0gYXNz
ZXJ0KGZ1bmN0aW9uKCBlbCApIHsKKyAgICAvLyBTaG91bGQgcmV0dXJuIDEsIGJ1dCByZXR1cm5z
IDQgKGZvbGxvd2luZykKKyAgICByZXR1cm4gZWwuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImZpZWxkc2V0IikgKSAmIDE7Cit9KTsKKworLy8gU3VwcG9y
dDogSUU8OAorLy8gUHJldmVudCBhdHRyaWJ1dGUvcHJvcGVydHkgImludGVycG9sYXRpb24iCisv
LyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTM2NDI5JTI4VlMu
ODUlMjkuYXNweAoraWYgKCAhYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHsKKyAgICBlbC5pbm5lckhU
TUwgPSAiPGEgaHJlZj0nIyc+PC9hPiI7CisgICAgcmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0
cmlidXRlKCJocmVmIikgPT09ICIjIiA7Cit9KSApIHsKKyAgICBhZGRIYW5kbGUoICJ0eXBlfGhy
ZWZ8aGVpZ2h0fHdpZHRoIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkgeworICAgICAg
ICBpZiAoICFpc1hNTCApIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSgg
bmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpID09PSAidHlwZSIgPyAxIDogMiApOworICAgICAgICB9
CisgICAgfSk7Cit9CisKKy8vIFN1cHBvcnQ6IElFPDkKKy8vIFVzZSBkZWZhdWx0VmFsdWUgaW4g
cGxhY2Ugb2YgZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpCitpZiAoICFzdXBwb3J0LmF0dHJpYnV0ZXMg
fHwgIWFzc2VydChmdW5jdGlvbiggZWwgKSB7CisgICAgZWwuaW5uZXJIVE1MID0gIjxpbnB1dC8+
IjsKKyAgICBlbC5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSggInZhbHVlIiwgIiIgKTsKKyAgICBy
ZXR1cm4gZWwuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoICJ2YWx1ZSIgKSA9PT0gIiI7Cit9KSAp
IHsKKyAgICBhZGRIYW5kbGUoICJ2YWx1ZSIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCAp
IHsKKyAgICAgICAgaWYgKCAhaXNYTUwgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09
PSAiaW5wdXQiICkgeworICAgICAgICAgICAgcmV0dXJuIGVsZW0uZGVmYXVsdFZhbHVlOworICAg
ICAgICB9CisgICAgfSk7Cit9CisKKy8vIFN1cHBvcnQ6IElFPDkKKy8vIFVzZSBnZXRBdHRyaWJ1
dGVOb2RlIHRvIGZldGNoIGJvb2xlYW5zIHdoZW4gZ2V0QXR0cmlidXRlIGxpZXMKK2lmICggIWFz
c2VydChmdW5jdGlvbiggZWwgKSB7CisgICAgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZSgiZGlzYWJs
ZWQiKSA9PSBudWxsOworfSkgKSB7CisgICAgYWRkSGFuZGxlKCBib29sZWFucywgZnVuY3Rpb24o
IGVsZW0sIG5hbWUsIGlzWE1MICkgeworICAgICAgICB2YXIgdmFsOworICAgICAgICBpZiAoICFp
c1hNTCApIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtWyBuYW1lIF0gPT09IHRydWUgPyBuYW1l
LnRvTG93ZXJDYXNlKCkgOgorICAgICAgICAgICAgICAgICAgICAodmFsID0gZWxlbS5nZXRBdHRy
aWJ1dGVOb2RlKCBuYW1lICkpICYmIHZhbC5zcGVjaWZpZWQgPworICAgICAgICAgICAgICAgICAg
ICB2YWwudmFsdWUgOgorICAgICAgICAgICAgICAgIG51bGw7CisgICAgICAgIH0KKyAgICB9KTsK
K30KKworcmV0dXJuIFNpenpsZTsKKworfSkoIHdpbmRvdyApOworCisKKworalF1ZXJ5LmZpbmQg
PSBTaXp6bGU7CitqUXVlcnkuZXhwciA9IFNpenpsZS5zZWxlY3RvcnM7CisKKy8vIERlcHJlY2F0
ZWQKK2pRdWVyeS5leHByWyAiOiIgXSA9IGpRdWVyeS5leHByLnBzZXVkb3M7CitqUXVlcnkudW5p
cXVlU29ydCA9IGpRdWVyeS51bmlxdWUgPSBTaXp6bGUudW5pcXVlU29ydDsKK2pRdWVyeS50ZXh0
ID0gU2l6emxlLmdldFRleHQ7CitqUXVlcnkuaXNYTUxEb2MgPSBTaXp6bGUuaXNYTUw7CitqUXVl
cnkuY29udGFpbnMgPSBTaXp6bGUuY29udGFpbnM7CitqUXVlcnkuZXNjYXBlU2VsZWN0b3IgPSBT
aXp6bGUuZXNjYXBlOworCisKKworCit2YXIgZGlyID0gZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50
aWwgKSB7CisgICAgdmFyIG1hdGNoZWQgPSBbXSwKKyAgICAgICAgdHJ1bmNhdGUgPSB1bnRpbCAh
PT0gdW5kZWZpbmVkOworCisgICAgd2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICYmIGVs
ZW0ubm9kZVR5cGUgIT09IDkgKSB7CisgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAp
IHsKKyAgICAgICAgICAgIGlmICggdHJ1bmNhdGUgJiYgalF1ZXJ5KCBlbGVtICkuaXMoIHVudGls
ICkgKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBtYXRjaGVkLnB1c2goIGVsZW0gKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbWF0
Y2hlZDsKK307CisKKwordmFyIHNpYmxpbmdzID0gZnVuY3Rpb24oIG4sIGVsZW0gKSB7CisgICAg
dmFyIG1hdGNoZWQgPSBbXTsKKworICAgIGZvciAoIDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcgKSB7
CisgICAgICAgIGlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkgeworICAgICAg
ICAgICAgbWF0Y2hlZC5wdXNoKCBuICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
bWF0Y2hlZDsKK307CisKKwordmFyIHJuZWVkc0NvbnRleHQgPSBqUXVlcnkuZXhwci5tYXRjaC5u
ZWVkc0NvbnRleHQ7CisKK3ZhciByc2luZ2xlVGFnID0gKCAvXjwoW2Etel1bXlwvXDA+Olx4MjBc
dFxyXG5cZl0qKVtceDIwXHRcclxuXGZdKlwvPz4oPzo8XC9cMT58KSQvaSApOworCisKKwordmFy
IHJpc1NpbXBsZSA9IC9eLlteOiNcW1wuLF0qJC87CisKKy8vIEltcGxlbWVudCB0aGUgaWRlbnRp
Y2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90CitmdW5jdGlvbiB3aW5ub3coIGVs
ZW1lbnRzLCBxdWFsaWZpZXIsIG5vdCApIHsKKyAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBx
dWFsaWZpZXIgKSApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVu
Y3Rpb24oIGVsZW0sIGkgKSB7CisgICAgICAgICAgICByZXR1cm4gISFxdWFsaWZpZXIuY2FsbCgg
ZWxlbSwgaSwgZWxlbSApICE9PSBub3Q7CisgICAgICAgIH0gKTsKKyAgICB9CisKKyAgICAvLyBT
aW5nbGUgZWxlbWVudAorICAgIGlmICggcXVhbGlmaWVyLm5vZGVUeXBlICkgeworICAgICAgICBy
ZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAg
ICAgIHJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApICE9PSBub3Q7CisgICAgICAgIH0gKTsK
KyAgICB9CisKKyAgICAvLyBBcnJheWxpa2Ugb2YgZWxlbWVudHMgKGpRdWVyeSwgYXJndW1lbnRz
LCBBcnJheSkKKyAgICBpZiAoIHR5cGVvZiBxdWFsaWZpZXIgIT09ICJzdHJpbmciICkgeworICAg
ICAgICByZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKKyAg
ICAgICAgICAgIHJldHVybiAoIGluZGV4T2YuY2FsbCggcXVhbGlmaWVyLCBlbGVtICkgPiAtMSAp
ICE9PSBub3Q7CisgICAgICAgIH0gKTsKKyAgICB9CisKKyAgICAvLyBTaW1wbGUgc2VsZWN0b3Ig
dGhhdCBjYW4gYmUgZmlsdGVyZWQgZGlyZWN0bHksIHJlbW92aW5nIG5vbi1FbGVtZW50cworICAg
IGlmICggcmlzU2ltcGxlLnRlc3QoIHF1YWxpZmllciApICkgeworICAgICAgICByZXR1cm4galF1
ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cywgbm90ICk7CisgICAgfQorCisgICAgLy8g
Q29tcGxleCBzZWxlY3RvciwgY29tcGFyZSB0aGUgdHdvIHNldHMsIHJlbW92aW5nIG5vbi1FbGVt
ZW50cworICAgIHF1YWxpZmllciA9IGpRdWVyeS5maWx0ZXIoIHF1YWxpZmllciwgZWxlbWVudHMg
KTsKKyAgICByZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsK
KyAgICAgICAgcmV0dXJuICggaW5kZXhPZi5jYWxsKCBxdWFsaWZpZXIsIGVsZW0gKSA+IC0xICkg
IT09IG5vdCAmJiBlbGVtLm5vZGVUeXBlID09PSAxOworICAgIH0gKTsKK30KKworalF1ZXJ5LmZp
bHRlciA9IGZ1bmN0aW9uKCBleHByLCBlbGVtcywgbm90ICkgeworICAgIHZhciBlbGVtID0gZWxl
bXNbIDAgXTsKKworICAgIGlmICggbm90ICkgeworICAgICAgICBleHByID0gIjpub3QoIiArIGV4
cHIgKyAiKSI7CisgICAgfQorCisgICAgaWYgKCBlbGVtcy5sZW5ndGggPT09IDEgJiYgZWxlbS5u
b2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5maW5kLm1hdGNoZXNTZWxl
Y3RvciggZWxlbSwgZXhwciApID8gWyBlbGVtIF0gOiBbXTsKKyAgICB9CisKKyAgICByZXR1cm4g
alF1ZXJ5LmZpbmQubWF0Y2hlcyggZXhwciwgalF1ZXJ5LmdyZXAoIGVsZW1zLCBmdW5jdGlvbigg
ZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDE7CisgICAgfSApICk7
Cit9OworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisgICAgZmluZDogZnVuY3Rpb24oIHNlbGVjdG9y
ICkgeworICAgICAgICB2YXIgaSwgcmV0LAorICAgICAgICAgICAgbGVuID0gdGhpcy5sZW5ndGgs
CisgICAgICAgICAgICBzZWxmID0gdGhpczsKKworICAgICAgICBpZiAoIHR5cGVvZiBzZWxlY3Rv
ciAhPT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpR
dWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGZv
ciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggalF1
ZXJ5LmNvbnRhaW5zKCBzZWxmWyBpIF0sIHRoaXMgKSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSApICk7CisgICAgICAgIH0KKworICAgICAgICByZXQgPSB0aGlzLnB1
c2hTdGFjayggW10gKTsKKworICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkgewor
ICAgICAgICAgICAgalF1ZXJ5LmZpbmQoIHNlbGVjdG9yLCBzZWxmWyBpIF0sIHJldCApOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIGxlbiA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggcmV0
ICkgOiByZXQ7CisgICAgfSwKKyAgICBmaWx0ZXI6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtd
LCBmYWxzZSApICk7CisgICAgfSwKKyAgICBub3Q6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtd
LCB0cnVlICkgKTsKKyAgICB9LAorICAgIGlzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAg
ICAgIHJldHVybiAhIXdpbm5vdygKKyAgICAgICAgICAgIHRoaXMsCisKKyAgICAgICAgICAgIC8v
IElmIHRoaXMgaXMgYSBwb3NpdGlvbmFsL3JlbGF0aXZlIHNlbGVjdG9yLCBjaGVjayBtZW1iZXJz
aGlwIGluIHRoZSByZXR1cm5lZCBzZXQKKyAgICAgICAgICAgIC8vIHNvICQoInA6Zmlyc3QiKS5p
cygicDpsYXN0Iikgd29uJ3QgcmV0dXJuIHRydWUgZm9yIGEgZG9jIHdpdGggdHdvICJwIi4KKyAg
ICAgICAgICAgIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgJiYgcm5lZWRzQ29udGV4dC50
ZXN0KCBzZWxlY3RvciApID8KKyAgICAgICAgICAgICAgICBqUXVlcnkoIHNlbGVjdG9yICkgOgor
ICAgICAgICAgICAgICAgIHNlbGVjdG9yIHx8IFtdLAorICAgICAgICAgICAgZmFsc2UKKyAgICAg
ICAgKS5sZW5ndGg7CisgICAgfQorfSApOworCisKKy8vIEluaXRpYWxpemUgYSBqUXVlcnkgb2Jq
ZWN0CisKKworLy8gQSBjZW50cmFsIHJlZmVyZW5jZSB0byB0aGUgcm9vdCBqUXVlcnkoZG9jdW1l
bnQpCit2YXIgcm9vdGpRdWVyeSwKKworICAgIC8vIEEgc2ltcGxlIHdheSB0byBjaGVjayBmb3Ig
SFRNTCBzdHJpbmdzCisgICAgLy8gUHJpb3JpdGl6ZSAjaWQgb3ZlciA8dGFnPiB0byBhdm9pZCBY
U1MgdmlhIGxvY2F0aW9uLmhhc2ggKCM5NTIxKQorICAgIC8vIFN0cmljdCBIVE1MIHJlY29nbml0
aW9uICgjMTEyOTA6IG11c3Qgc3RhcnQgd2l0aCA8KQorICAgIC8vIFNob3J0Y3V0IHNpbXBsZSAj
aWQgY2FzZSBmb3Igc3BlZWQKKyAgICBycXVpY2tFeHByID0gL14oPzpccyooPFtcd1xXXSs+KVte
Pl0qfCMoW1x3LV0rKSkkLywKKworICAgIGluaXQgPSBqUXVlcnkuZm4uaW5pdCA9IGZ1bmN0aW9u
KCBzZWxlY3RvciwgY29udGV4dCwgcm9vdCApIHsKKyAgICAgICAgdmFyIG1hdGNoLCBlbGVtOwor
CisgICAgICAgIC8vIEhBTkRMRTogJCgiIiksICQobnVsbCksICQodW5kZWZpbmVkKSwgJChmYWxz
ZSkKKyAgICAgICAgaWYgKCAhc2VsZWN0b3IgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIE1ldGhvZCBpbml0KCkgYWNjZXB0cyBhbiBhbHRlcm5h
dGUgcm9vdGpRdWVyeQorICAgICAgICAvLyBzbyBtaWdyYXRlIGNhbiBzdXBwb3J0IGpRdWVyeS5z
dWIgKGdoLTIxMDEpCisgICAgICAgIHJvb3QgPSByb290IHx8IHJvb3RqUXVlcnk7CisKKyAgICAg
ICAgLy8gSGFuZGxlIEhUTUwgc3RyaW5ncworICAgICAgICBpZiAoIHR5cGVvZiBzZWxlY3RvciA9
PT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICBpZiAoIHNlbGVjdG9yWyAwIF0gPT09ICI8IiAm
JgorICAgICAgICAgICAgICAgIHNlbGVjdG9yWyBzZWxlY3Rvci5sZW5ndGggLSAxIF0gPT09ICI+
IiAmJgorICAgICAgICAgICAgICAgIHNlbGVjdG9yLmxlbmd0aCA+PSAzICkgeworCisgICAgICAg
ICAgICAgICAgLy8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8
PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2sKKyAgICAgICAgICAgICAgICBtYXRj
aCA9IFsgbnVsbCwgc2VsZWN0b3IsIG51bGwgXTsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gTWF0Y2ggaHRtbCBvciBtYWtlIHN1cmUgbm8gY29u
dGV4dCBpcyBzcGVjaWZpZWQgZm9yICNpZAorICAgICAgICAgICAgaWYgKCBtYXRjaCAmJiAoIG1h
dGNoWyAxIF0gfHwgIWNvbnRleHQgKSApIHsKKworICAgICAgICAgICAgICAgIC8vIEhBTkRMRTog
JChodG1sKSAtPiAkKGFycmF5KQorICAgICAgICAgICAgICAgIGlmICggbWF0Y2hbIDEgXSApIHsK
KyAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkg
PyBjb250ZXh0WyAwIF0gOiBjb250ZXh0OworCisgICAgICAgICAgICAgICAgICAgIC8vIE9wdGlv
biB0byBydW4gc2NyaXB0cyBpcyB0cnVlIGZvciBiYWNrLWNvbXBhdAorICAgICAgICAgICAgICAg
ICAgICAvLyBJbnRlbnRpb25hbGx5IGxldCB0aGUgZXJyb3IgYmUgdGhyb3duIGlmIHBhcnNlSFRN
TCBpcyBub3QgcHJlc2VudAorICAgICAgICAgICAgICAgICAgICBqUXVlcnkubWVyZ2UoIHRoaXMs
IGpRdWVyeS5wYXJzZUhUTUwoCisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFsgMSBdLAor
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID8gY29u
dGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVudCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRydWUKKyAgICAgICAgICAgICAgICAgICAgKSApOworCisgICAgICAgICAgICAg
ICAgICAgIC8vIEhBTkRMRTogJChodG1sLCBwcm9wcykKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCByc2luZ2xlVGFnLnRlc3QoIG1hdGNoWyAxIF0gKSAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCgg
Y29udGV4dCApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggbWF0Y2ggaW4gY29u
dGV4dCApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb3BlcnRpZXMgb2Yg
Y29udGV4dCBhcmUgY2FsbGVkIGFzIG1ldGhvZHMgaWYgcG9zc2libGUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB0aGlzWyBtYXRjaCBdICkgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbIG1hdGNoIF0oIGNvbnRleHRb
IG1hdGNoIF0gKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC4uLmFuZCBvdGhl
cndpc2Ugc2V0IGFzIGF0dHJpYnV0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF0dHIoIG1hdGNoLCBj
b250ZXh0WyBtYXRjaCBdICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAgICAgICAgICAgICAgICAvLyBIQU5ETEU6ICQoI2lk
KQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCggbWF0Y2hbIDIgXSApOworCisgICAgICAgICAgICAgICAg
ICAgIGlmICggZWxlbSApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5qZWN0IHRo
ZSBlbGVtZW50IGRpcmVjdGx5IGludG8gdGhlIGpRdWVyeSBvYmplY3QKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXNbIDAgXSA9IGVsZW07CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
Lmxlbmd0aCA9IDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBIQU5ETEU6
ICQoZXhwciwgJCguLi4pKQorICAgICAgICAgICAgfSBlbHNlIGlmICggIWNvbnRleHQgfHwgY29u
dGV4dC5qcXVlcnkgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICggY29udGV4dCB8fCByb290
ICkuZmluZCggc2VsZWN0b3IgKTsKKworICAgICAgICAgICAgLy8gSEFORExFOiAkKGV4cHIsIGNv
bnRleHQpCisgICAgICAgICAgICAvLyAod2hpY2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNv
bnRleHQpLmZpbmQoZXhwcikKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoIGNvbnRleHQgKS5maW5kKCBzZWxlY3RvciApOworICAg
ICAgICAgICAgfQorCisgICAgICAgIC8vIEhBTkRMRTogJChET01FbGVtZW50KQorICAgICAgICB9
IGVsc2UgaWYgKCBzZWxlY3Rvci5ub2RlVHlwZSApIHsKKyAgICAgICAgICAgIHRoaXNbIDAgXSA9
IHNlbGVjdG9yOworICAgICAgICAgICAgdGhpcy5sZW5ndGggPSAxOworICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CisKKyAgICAgICAgLy8gSEFORExFOiAkKGZ1bmN0aW9uKQorICAgICAgICAvLyBT
aG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHkKKyAgICAgICAgfSBlbHNlIGlmICggalF1ZXJ5Lmlz
RnVuY3Rpb24oIHNlbGVjdG9yICkgKSB7CisgICAgICAgICAgICByZXR1cm4gcm9vdC5yZWFkeSAh
PT0gdW5kZWZpbmVkID8KKyAgICAgICAgICAgICAgICByb290LnJlYWR5KCBzZWxlY3RvciApIDoK
KworICAgICAgICAgICAgICAgIC8vIEV4ZWN1dGUgaW1tZWRpYXRlbHkgaWYgcmVhZHkgaXMgbm90
IHByZXNlbnQKKyAgICAgICAgICAgICAgICBzZWxlY3RvciggalF1ZXJ5ICk7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4galF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IsIHRoaXMgKTsKKyAg
ICB9OworCisvLyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkgcHJvdG90eXBlIGZv
ciBsYXRlciBpbnN0YW50aWF0aW9uCitpbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjsKKworLy8g
SW5pdGlhbGl6ZSBjZW50cmFsIHJlZmVyZW5jZQorcm9vdGpRdWVyeSA9IGpRdWVyeSggZG9jdW1l
bnQgKTsKKworCit2YXIgcnBhcmVudHNwcmV2ID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxB
bGwpKS8sCisKKyAgICAvLyBNZXRob2RzIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBhIHVuaXF1ZSBz
ZXQgd2hlbiBzdGFydGluZyBmcm9tIGEgdW5pcXVlIHNldAorICAgIGd1YXJhbnRlZWRVbmlxdWUg
PSB7CisgICAgICAgIGNoaWxkcmVuOiB0cnVlLAorICAgICAgICBjb250ZW50czogdHJ1ZSwKKyAg
ICAgICAgbmV4dDogdHJ1ZSwKKyAgICAgICAgcHJldjogdHJ1ZQorICAgIH07CisKK2pRdWVyeS5m
bi5leHRlbmQoIHsKKyAgICBoYXM6IGZ1bmN0aW9uKCB0YXJnZXQgKSB7CisgICAgICAgIHZhciB0
YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQsIHRoaXMgKSwKKyAgICAgICAgICAgIGwgPSB0YXJnZXRz
Lmxlbmd0aDsKKworICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoIGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgdmFyIGkgPSAwOworICAgICAgICAgICAgZm9yICggOyBpIDwgbDsgaSsrICkgewor
ICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzWyBpIF0g
KSApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9ICk7CisgICAgfSwKKworICAgIGNsb3Nlc3Q6IGZ1
bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7CisgICAgICAgIHZhciBjdXIsCisgICAgICAg
ICAgICBpID0gMCwKKyAgICAgICAgICAgIGwgPSB0aGlzLmxlbmd0aCwKKyAgICAgICAgICAgIG1h
dGNoZWQgPSBbXSwKKyAgICAgICAgICAgIHRhcmdldHMgPSB0eXBlb2Ygc2VsZWN0b3JzICE9PSAi
c3RyaW5nIiAmJiBqUXVlcnkoIHNlbGVjdG9ycyApOworCisgICAgICAgIC8vIFBvc2l0aW9uYWwg
c2VsZWN0b3JzIG5ldmVyIG1hdGNoLCBzaW5jZSB0aGVyZSdzIG5vIF9zZWxlY3Rpb25fIGNvbnRl
eHQKKyAgICAgICAgaWYgKCAhcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSApIHsKKyAg
ICAgICAgICAgIGZvciAoIDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICBmb3IgKCBj
dXIgPSB0aGlzWyBpIF07IGN1ciAmJiBjdXIgIT09IGNvbnRleHQ7IGN1ciA9IGN1ci5wYXJlbnRO
b2RlICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIEFsd2F5cyBza2lwIGRvY3VtZW50IGZy
YWdtZW50cworICAgICAgICAgICAgICAgICAgICBpZiAoIGN1ci5ub2RlVHlwZSA8IDExICYmICgg
dGFyZ2V0cyA/CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzLmluZGV4KCBjdXIgKSA+
IC0xIDoKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcGFzcyBub24tZWxlbWVu
dHMgdG8gU2l6emxlCisgICAgICAgICAgICAgICAgICAgICAgICBjdXIubm9kZVR5cGUgPT09IDEg
JiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0
b3IoIGN1ciwgc2VsZWN0b3JzICkgKSApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgbWF0
Y2hlZC5wdXNoKCBjdXIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkLmxlbmd0aCA+IDEg
PyBqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApIDogbWF0Y2hlZCApOworICAgIH0sCisKKyAg
ICAvLyBEZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgd2l0aGluIHRoZSBzZXQK
KyAgICBpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7CisKKyAgICAgICAgLy8gTm8gYXJndW1lbnQs
IHJldHVybiBpbmRleCBpbiBwYXJlbnQKKyAgICAgICAgaWYgKCAhZWxlbSApIHsKKyAgICAgICAg
ICAgIHJldHVybiAoIHRoaXNbIDAgXSAmJiB0aGlzWyAwIF0ucGFyZW50Tm9kZSApID8gdGhpcy5m
aXJzdCgpLnByZXZBbGwoKS5sZW5ndGggOiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElu
ZGV4IGluIHNlbGVjdG9yCisgICAgICAgIGlmICggdHlwZW9mIGVsZW0gPT09ICJzdHJpbmciICkg
eworICAgICAgICAgICAgcmV0dXJuIGluZGV4T2YuY2FsbCggalF1ZXJ5KCBlbGVtICksIHRoaXNb
IDAgXSApOworICAgICAgICB9CisKKyAgICAgICAgLy8gTG9jYXRlIHRoZSBwb3NpdGlvbiBvZiB0
aGUgZGVzaXJlZCBlbGVtZW50CisgICAgICAgIHJldHVybiBpbmRleE9mLmNhbGwoIHRoaXMsCisK
KyAgICAgICAgICAgIC8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0
IGVsZW1lbnQgaXMgdXNlZAorICAgICAgICAgICAgZWxlbS5qcXVlcnkgPyBlbGVtWyAwIF0gOiBl
bGVtCisgICAgICAgICk7CisgICAgfSwKKworICAgIGFkZDogZnVuY3Rpb24oIHNlbGVjdG9yLCBj
b250ZXh0ICkgeworICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soCisgICAgICAgICAgICBq
UXVlcnkudW5pcXVlU29ydCgKKyAgICAgICAgICAgICAgICBqUXVlcnkubWVyZ2UoIHRoaXMuZ2V0
KCksIGpRdWVyeSggc2VsZWN0b3IsIGNvbnRleHQgKSApCisgICAgICAgICAgICApCisgICAgICAg
ICk7CisgICAgfSwKKworICAgIGFkZEJhY2s6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuYWRkKCBzZWxlY3RvciA9PSBudWxsID8KKyAgICAgICAgICAgIHRoaXMu
cHJldk9iamVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoIHNlbGVjdG9yICkKKyAgICAgICAg
KTsKKyAgICB9Cit9ICk7CisKK2Z1bmN0aW9uIHNpYmxpbmcoIGN1ciwgZGlyICkgeworICAgIHdo
aWxlICggKCBjdXIgPSBjdXJbIGRpciBdICkgJiYgY3VyLm5vZGVUeXBlICE9PSAxICkge30KKyAg
ICByZXR1cm4gY3VyOworfQorCitqUXVlcnkuZWFjaCggeworICAgIHBhcmVudDogZnVuY3Rpb24o
IGVsZW0gKSB7CisgICAgICAgIHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7CisgICAgICAg
IHJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51bGw7
CisgICAgfSwKKyAgICBwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJu
IGRpciggZWxlbSwgInBhcmVudE5vZGUiICk7CisgICAgfSwKKyAgICBwYXJlbnRzVW50aWw6IGZ1
bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKKyAgICAgICAgcmV0dXJuIGRpciggZWxlbSwgInBh
cmVudE5vZGUiLCB1bnRpbCApOworICAgIH0sCisgICAgbmV4dDogZnVuY3Rpb24oIGVsZW0gKSB7
CisgICAgICAgIHJldHVybiBzaWJsaW5nKCBlbGVtLCAibmV4dFNpYmxpbmciICk7CisgICAgfSwK
KyAgICBwcmV2OiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIHNpYmxpbmcoIGVs
ZW0sICJwcmV2aW91c1NpYmxpbmciICk7CisgICAgfSwKKyAgICBuZXh0QWxsOiBmdW5jdGlvbigg
ZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIGRpciggZWxlbSwgIm5leHRTaWJsaW5nIiApOworICAg
IH0sCisgICAgcHJldkFsbDogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHJldHVybiBkaXIo
IGVsZW0sICJwcmV2aW91c1NpYmxpbmciICk7CisgICAgfSwKKyAgICBuZXh0VW50aWw6IGZ1bmN0
aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKKyAgICAgICAgcmV0dXJuIGRpciggZWxlbSwgIm5leHRT
aWJsaW5nIiwgdW50aWwgKTsKKyAgICB9LAorICAgIHByZXZVbnRpbDogZnVuY3Rpb24oIGVsZW0s
IGksIHVudGlsICkgeworICAgICAgICByZXR1cm4gZGlyKCBlbGVtLCAicHJldmlvdXNTaWJsaW5n
IiwgdW50aWwgKTsKKyAgICB9LAorICAgIHNpYmxpbmdzOiBmdW5jdGlvbiggZWxlbSApIHsKKyAg
ICAgICAgcmV0dXJuIHNpYmxpbmdzKCAoIGVsZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZpcnN0Q2hp
bGQsIGVsZW0gKTsKKyAgICB9LAorICAgIGNoaWxkcmVuOiBmdW5jdGlvbiggZWxlbSApIHsKKyAg
ICAgICAgcmV0dXJuIHNpYmxpbmdzKCBlbGVtLmZpcnN0Q2hpbGQgKTsKKyAgICB9LAorICAgIGNv
bnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIGVsZW0uY29udGVudERv
Y3VtZW50IHx8IGpRdWVyeS5tZXJnZSggW10sIGVsZW0uY2hpbGROb2RlcyApOworICAgIH0KK30s
IGZ1bmN0aW9uKCBuYW1lLCBmbiApIHsKKyAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9u
KCB1bnRpbCwgc2VsZWN0b3IgKSB7CisgICAgICAgIHZhciBtYXRjaGVkID0galF1ZXJ5Lm1hcCgg
dGhpcywgZm4sIHVudGlsICk7CisKKyAgICAgICAgaWYgKCBuYW1lLnNsaWNlKCAtNSApICE9PSAi
VW50aWwiICkgeworICAgICAgICAgICAgc2VsZWN0b3IgPSB1bnRpbDsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICggc2VsZWN0b3IgJiYgdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiApIHsK
KyAgICAgICAgICAgIG1hdGNoZWQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgbWF0Y2hlZCAp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCB0aGlzLmxlbmd0aCA+IDEgKSB7CisKKyAgICAg
ICAgICAgIC8vIFJlbW92ZSBkdXBsaWNhdGVzCisgICAgICAgICAgICBpZiAoICFndWFyYW50ZWVk
VW5pcXVlWyBuYW1lIF0gKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LnVuaXF1ZVNvcnQoIG1h
dGNoZWQgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUmV2ZXJzZSBvcmRlciBm
b3IgcGFyZW50cyogYW5kIHByZXYtZGVyaXZhdGl2ZXMKKyAgICAgICAgICAgIGlmICggcnBhcmVu
dHNwcmV2LnRlc3QoIG5hbWUgKSApIHsKKyAgICAgICAgICAgICAgICBtYXRjaGVkLnJldmVyc2Uo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzLnB1c2hT
dGFjayggbWF0Y2hlZCApOworICAgIH07Cit9ICk7Cit2YXIgcm5vdGh0bWx3aGl0ZSA9ICggL1te
XHgyMFx0XHJcblxmXSsvZyApOworCisKKworLy8gQ29udmVydCBTdHJpbmctZm9ybWF0dGVkIG9w
dGlvbnMgaW50byBPYmplY3QtZm9ybWF0dGVkIG9uZXMKK2Z1bmN0aW9uIGNyZWF0ZU9wdGlvbnMo
IG9wdGlvbnMgKSB7CisgICAgdmFyIG9iamVjdCA9IHt9OworICAgIGpRdWVyeS5lYWNoKCBvcHRp
b25zLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10sIGZ1bmN0aW9uKCBfLCBmbGFnICkgewor
ICAgICAgICBvYmplY3RbIGZsYWcgXSA9IHRydWU7CisgICAgfSApOworICAgIHJldHVybiBvYmpl
Y3Q7Cit9CisKKy8qCisgKiBDcmVhdGUgYSBjYWxsYmFjayBsaXN0IHVzaW5nIHRoZSBmb2xsb3dp
bmcgcGFyYW1ldGVyczoKKyAqCisgKiAgb3B0aW9uczogYW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFj
ZS1zZXBhcmF0ZWQgb3B0aW9ucyB0aGF0IHdpbGwgY2hhbmdlIGhvdworICogICAgICAgICAgdGhl
IGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9iamVj
dAorICoKKyAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4gZXZl
bnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlCisgKiAiZmlyZWQiIG11bHRpcGxlIHRpbWVzLgor
ICoKKyAqIFBvc3NpYmxlIG9wdGlvbnM6CisgKgorICogIG9uY2U6ICAgICAgICAgICB3aWxsIGVu
c3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChsaWtlIGEgRGVm
ZXJyZWQpCisgKgorICogIG1lbW9yeTogICAgICAgICB3aWxsIGtlZXAgdHJhY2sgb2YgcHJldmlv
dXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkCisgKiAgICAgICAgICAg
ICAgICAgIGFmdGVyIHRoZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJpZ2h0IGF3YXkgd2l0aCB0aGUg
bGF0ZXN0ICJtZW1vcml6ZWQiCisgKiAgICAgICAgICAgICAgICAgIHZhbHVlcyAobGlrZSBhIERl
ZmVycmVkKQorICoKKyAqICB1bmlxdWU6ICAgICAgICAgd2lsbCBlbnN1cmUgYSBjYWxsYmFjayBj
YW4gb25seSBiZSBhZGRlZCBvbmNlIChubyBkdXBsaWNhdGUgaW4gdGhlIGxpc3QpCisgKgorICog
IHN0b3BPbkZhbHNlOiAgICBpbnRlcnJ1cHQgY2FsbGluZ3Mgd2hlbiBhIGNhbGxiYWNrIHJldHVy
bnMgZmFsc2UKKyAqCisgKi8KK2pRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbiggb3B0aW9ucyAp
IHsKKworICAgIC8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0ZWQgdG8gT2Jq
ZWN0LWZvcm1hdHRlZCBpZiBuZWVkZWQKKyAgICAvLyAod2UgY2hlY2sgaW4gY2FjaGUgZmlyc3Qp
CisgICAgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zID09PSAic3RyaW5nIiA/CisgICAgICAgIGNy
ZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSA6CisgICAgICAgIGpRdWVyeS5leHRlbmQoIHt9LCBvcHRp
b25zICk7CisKKyAgICB2YXIgLy8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMgY3VycmVudGx5IGZp
cmluZworICAgICAgICBmaXJpbmcsCisKKyAgICAgICAgLy8gTGFzdCBmaXJlIHZhbHVlIGZvciBu
b24tZm9yZ2V0dGFibGUgbGlzdHMKKyAgICAgICAgbWVtb3J5LAorCisgICAgICAgIC8vIEZsYWcg
dG8ga25vdyBpZiBsaXN0IHdhcyBhbHJlYWR5IGZpcmVkCisgICAgICAgIGZpcmVkLAorCisgICAg
ICAgIC8vIEZsYWcgdG8gcHJldmVudCBmaXJpbmcKKyAgICAgICAgbG9ja2VkLAorCisgICAgICAg
IC8vIEFjdHVhbCBjYWxsYmFjayBsaXN0CisgICAgICAgIGxpc3QgPSBbXSwKKworICAgICAgICAv
LyBRdWV1ZSBvZiBleGVjdXRpb24gZGF0YSBmb3IgcmVwZWF0YWJsZSBsaXN0cworICAgICAgICBx
dWV1ZSA9IFtdLAorCisgICAgICAgIC8vIEluZGV4IG9mIGN1cnJlbnRseSBmaXJpbmcgY2FsbGJh
Y2sgKG1vZGlmaWVkIGJ5IGFkZC9yZW1vdmUgYXMgbmVlZGVkKQorICAgICAgICBmaXJpbmdJbmRl
eCA9IC0xLAorCisgICAgICAgIC8vIEZpcmUgY2FsbGJhY2tzCisgICAgICAgIGZpcmUgPSBmdW5j
dGlvbigpIHsKKworICAgICAgICAgICAgLy8gRW5mb3JjZSBzaW5nbGUtZmlyaW5nCisgICAgICAg
ICAgICBsb2NrZWQgPSBvcHRpb25zLm9uY2U7CisKKyAgICAgICAgICAgIC8vIEV4ZWN1dGUgY2Fs
bGJhY2tzIGZvciBhbGwgcGVuZGluZyBleGVjdXRpb25zLAorICAgICAgICAgICAgLy8gcmVzcGVj
dGluZyBmaXJpbmdJbmRleCBvdmVycmlkZXMgYW5kIHJ1bnRpbWUgY2hhbmdlcworICAgICAgICAg
ICAgZmlyZWQgPSBmaXJpbmcgPSB0cnVlOworICAgICAgICAgICAgZm9yICggOyBxdWV1ZS5sZW5n
dGg7IGZpcmluZ0luZGV4ID0gLTEgKSB7CisgICAgICAgICAgICAgICAgbWVtb3J5ID0gcXVldWUu
c2hpZnQoKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoICsrZmlyaW5nSW5kZXggPCBsaXN0Lmxl
bmd0aCApIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBSdW4gY2FsbGJhY2sgYW5kIGNoZWNr
IGZvciBlYXJseSB0ZXJtaW5hdGlvbgorICAgICAgICAgICAgICAgICAgICBpZiAoIGxpc3RbIGZp
cmluZ0luZGV4IF0uYXBwbHkoIG1lbW9yeVsgMCBdLCBtZW1vcnlbIDEgXSApID09PSBmYWxzZSAm
JgorICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zdG9wT25GYWxzZSApIHsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSnVtcCB0byBlbmQgYW5kIGZvcmdldCB0aGUgZGF0YSBz
byAuYWRkIGRvZXNuJ3QgcmUtZmlyZQorICAgICAgICAgICAgICAgICAgICAgICAgZmlyaW5nSW5k
ZXggPSBsaXN0Lmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBGb3JnZXQgdGhlIGRhdGEgaWYgd2UncmUgZG9uZSB3aXRoIGl0
CisgICAgICAgICAgICBpZiAoICFvcHRpb25zLm1lbW9yeSApIHsKKyAgICAgICAgICAgICAgICBt
ZW1vcnkgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmlyaW5nID0gZmFs
c2U7CisKKyAgICAgICAgICAgIC8vIENsZWFuIHVwIGlmIHdlJ3JlIGRvbmUgZmlyaW5nIGZvciBn
b29kCisgICAgICAgICAgICBpZiAoIGxvY2tlZCApIHsKKworICAgICAgICAgICAgICAgIC8vIEtl
ZXAgYW4gZW1wdHkgbGlzdCBpZiB3ZSBoYXZlIGRhdGEgZm9yIGZ1dHVyZSBhZGQgY2FsbHMKKyAg
ICAgICAgICAgICAgICBpZiAoIG1lbW9yeSApIHsKKyAgICAgICAgICAgICAgICAgICAgbGlzdCA9
IFtdOworCisgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB0aGlzIG9iamVjdCBpcyBzcGVu
dAorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxpc3QgPSAi
IjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAg
ICAgLy8gQWN0dWFsIENhbGxiYWNrcyBvYmplY3QKKyAgICAgICAgc2VsZiA9IHsKKworICAgICAg
ICAgICAgLy8gQWRkIGEgY2FsbGJhY2sgb3IgYSBjb2xsZWN0aW9uIG9mIGNhbGxiYWNrcyB0byB0
aGUgbGlzdAorICAgICAgICAgICAgYWRkOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIGxpc3QgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBtZW1vcnkg
ZnJvbSBhIHBhc3QgcnVuLCB3ZSBzaG91bGQgZmlyZSBhZnRlciBhZGRpbmcKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGggLSAxOworICAgICAgICAgICAgICAgICAgICAg
ICAgcXVldWUucHVzaCggbWVtb3J5ICk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAoIGZ1bmN0aW9uIGFkZCggYXJncyApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5lYWNoKCBhcmdzLCBmdW5jdGlvbiggXywgYXJnICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGFyZyApICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2Vs
Zi5oYXMoIGFyZyApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlz
dC5wdXNoKCBhcmcgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIGpR
dWVyeS50eXBlKCBhcmcgKSAhPT0gInN0cmluZyIgKSB7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gSW5zcGVjdCByZWN1cnNpdmVseQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhZGQoIGFyZyApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0gKTsKKyAgICAgICAgICAgICAgICAgICAgfSApKCBhcmd1
bWVudHMgKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgZmlyZSgpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAg
ICAgICAgfSwKKworICAgICAgICAgICAgLy8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgbGlz
dAorICAgICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBqUXVl
cnkuZWFjaCggYXJndW1lbnRzLCBmdW5jdGlvbiggXywgYXJnICkgeworICAgICAgICAgICAgICAg
ICAgICB2YXIgaW5kZXg7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICggKCBpbmRleCA9IGpR
dWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgbGlzdC5zcGxpY2UoIGluZGV4LCAxICk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlcworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBpbmRleCA8PSBmaXJpbmdJbmRleCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaXJpbmdJbmRleC0tOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfSApOworICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgYSBnaXZlbiBj
YWxsYmFjayBpcyBpbiB0aGUgbGlzdC4KKyAgICAgICAgICAgIC8vIElmIG5vIGFyZ3VtZW50IGlz
IGdpdmVuLCByZXR1cm4gd2hldGhlciBvciBub3QgbGlzdCBoYXMgY2FsbGJhY2tzIGF0dGFjaGVk
LgorICAgICAgICAgICAgaGFzOiBmdW5jdGlvbiggZm4gKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZuID8KKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkg
PiAtMSA6CisgICAgICAgICAgICAgICAgICAgIGxpc3QubGVuZ3RoID4gMDsKKyAgICAgICAgICAg
IH0sCisKKyAgICAgICAgICAgIC8vIFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIGxpc3QK
KyAgICAgICAgICAgIGVtcHR5OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoIGxp
c3QgKSB7CisgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBbXTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9LAorCisgICAgICAg
ICAgICAvLyBEaXNhYmxlIC5maXJlIGFuZCAuYWRkCisgICAgICAgICAgICAvLyBBYm9ydCBhbnkg
Y3VycmVudC9wZW5kaW5nIGV4ZWN1dGlvbnMKKyAgICAgICAgICAgIC8vIENsZWFyIGFsbCBjYWxs
YmFja3MgYW5kIHZhbHVlcworICAgICAgICAgICAgZGlzYWJsZTogZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgbG9ja2VkID0gcXVldWUgPSBbXTsKKyAgICAgICAgICAgICAgICBsaXN0ID0g
bWVtb3J5ID0gIiI7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9
LAorICAgICAgICAgICAgZGlzYWJsZWQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHJl
dHVybiAhbGlzdDsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8vIERpc2FibGUgLmZp
cmUKKyAgICAgICAgICAgIC8vIEFsc28gZGlzYWJsZSAuYWRkIHVubGVzcyB3ZSBoYXZlIG1lbW9y
eSAoc2luY2UgaXQgd291bGQgaGF2ZSBubyBlZmZlY3QpCisgICAgICAgICAgICAvLyBBYm9ydCBh
bnkgcGVuZGluZyBleGVjdXRpb25zCisgICAgICAgICAgICBsb2NrOiBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICBsb2NrZWQgPSBxdWV1ZSA9IFtdOworICAgICAgICAgICAgICAgIGlmICgg
IW1lbW9yeSAmJiAhZmlyaW5nICkgeworICAgICAgICAgICAgICAgICAgICBsaXN0ID0gbWVtb3J5
ID0gIiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwor
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGxvY2tlZDogZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuICEhbG9ja2VkOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAg
Ly8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGNvbnRleHQgYW5kIGFyZ3VtZW50
cworICAgICAgICAgICAgZmlyZVdpdGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBhcmdzICkgeworICAg
ICAgICAgICAgICAgIGlmICggIWxvY2tlZCApIHsKKyAgICAgICAgICAgICAgICAgICAgYXJncyA9
IGFyZ3MgfHwgW107CisgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBbIGNvbnRleHQsIGFyZ3Mu
c2xpY2UgPyBhcmdzLnNsaWNlKCkgOiBhcmdzIF07CisgICAgICAgICAgICAgICAgICAgIHF1ZXVl
LnB1c2goIGFyZ3MgKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhZmlyaW5nICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZmlyZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAg
fSwKKworICAgICAgICAgICAgLy8gQ2FsbCBhbGwgdGhlIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZl
biBhcmd1bWVudHMKKyAgICAgICAgICAgIGZpcmU6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgIHNlbGYuZmlyZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApOworICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgLy8gVG8ga25vdyBpZiB0
aGUgY2FsbGJhY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZCBhdCBsZWFzdCBvbmNlCisgICAg
ICAgICAgICBmaXJlZDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEhZmly
ZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICByZXR1cm4gc2VsZjsKK307CisK
KworZnVuY3Rpb24gSWRlbnRpdHkoIHYgKSB7CisgICAgcmV0dXJuIHY7Cit9CitmdW5jdGlvbiBU
aHJvd2VyKCBleCApIHsKKyAgICB0aHJvdyBleDsKK30KKworZnVuY3Rpb24gYWRvcHRWYWx1ZSgg
dmFsdWUsIHJlc29sdmUsIHJlamVjdCApIHsKKyAgICB2YXIgbWV0aG9kOworCisgICAgdHJ5IHsK
KworICAgICAgICAvLyBDaGVjayBmb3IgcHJvbWlzZSBhc3BlY3QgZmlyc3QgdG8gcHJpdmlsZWdl
IHN5bmNocm9ub3VzIGJlaGF2aW9yCisgICAgICAgIGlmICggdmFsdWUgJiYgalF1ZXJ5LmlzRnVu
Y3Rpb24oICggbWV0aG9kID0gdmFsdWUucHJvbWlzZSApICkgKSB7CisgICAgICAgICAgICBtZXRo
b2QuY2FsbCggdmFsdWUgKS5kb25lKCByZXNvbHZlICkuZmFpbCggcmVqZWN0ICk7CisKKyAgICAg
ICAgLy8gT3RoZXIgdGhlbmFibGVzCisgICAgICAgIH0gZWxzZSBpZiAoIHZhbHVlICYmIGpRdWVy
eS5pc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnRoZW4gKSApICkgeworICAgICAgICAgICAg
bWV0aG9kLmNhbGwoIHZhbHVlLCByZXNvbHZlLCByZWplY3QgKTsKKworICAgICAgICAvLyBPdGhl
ciBub24tdGhlbmFibGVzCisgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgIC8vIFN1cHBv
cnQ6IEFuZHJvaWQgNC4wIG9ubHkKKyAgICAgICAgICAgIC8vIFN0cmljdCBtb2RlIGZ1bmN0aW9u
cyBpbnZva2VkIHdpdGhvdXQgLmNhbGwvLmFwcGx5IGdldCBnbG9iYWwtb2JqZWN0IGNvbnRleHQK
KyAgICAgICAgICAgIHJlc29sdmUuY2FsbCggdW5kZWZpbmVkLCB2YWx1ZSApOworICAgICAgICB9
CisKKyAgICAvLyBGb3IgUHJvbWlzZXMvQSssIGNvbnZlcnQgZXhjZXB0aW9ucyBpbnRvIHJlamVj
dGlvbnMKKyAgICAvLyBTaW5jZSBqUXVlcnkud2hlbiBkb2Vzbid0IHVud3JhcCB0aGVuYWJsZXMs
IHdlIGNhbiBza2lwIHRoZSBleHRyYSBjaGVja3MgYXBwZWFyaW5nIGluCisgICAgLy8gRGVmZXJy
ZWQjdGhlbiB0byBjb25kaXRpb25hbGx5IHN1cHByZXNzIHJlamVjdGlvbi4KKyAgICB9IGNhdGNo
ICggdmFsdWUgKSB7CisKKyAgICAgICAgLy8gU3VwcG9ydDogQW5kcm9pZCA0LjAgb25seQorICAg
ICAgICAvLyBTdHJpY3QgbW9kZSBmdW5jdGlvbnMgaW52b2tlZCB3aXRob3V0IC5jYWxsLy5hcHBs
eSBnZXQgZ2xvYmFsLW9iamVjdCBjb250ZXh0CisgICAgICAgIHJlamVjdC5jYWxsKCB1bmRlZmlu
ZWQsIHZhbHVlICk7CisgICAgfQorfQorCitqUXVlcnkuZXh0ZW5kKCB7CisKKyAgICBEZWZlcnJl
ZDogZnVuY3Rpb24oIGZ1bmMgKSB7CisgICAgICAgIHZhciB0dXBsZXMgPSBbCisKKyAgICAgICAg
ICAgICAgICAvLyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgY2FsbGJhY2tzLAorICAgICAgICAgICAg
ICAgIC8vIC4uLiAudGhlbiBoYW5kbGVycywgYXJndW1lbnQgaW5kZXgsIFtmaW5hbCBzdGF0ZV0K
KyAgICAgICAgICAgICAgICBbICJub3RpZnkiLCAicHJvZ3Jlc3MiLCBqUXVlcnkuQ2FsbGJhY2tz
KCAibWVtb3J5IiApLAorICAgICAgICAgICAgICAgICAgICBqUXVlcnkuQ2FsbGJhY2tzKCAibWVt
b3J5IiApLCAyIF0sCisgICAgICAgICAgICAgICAgWyAicmVzb2x2ZSIsICJkb25lIiwgalF1ZXJ5
LkNhbGxiYWNrcyggIm9uY2UgbWVtb3J5IiApLAorICAgICAgICAgICAgICAgICAgICBqUXVlcnku
Q2FsbGJhY2tzKCAib25jZSBtZW1vcnkiICksIDAsICJyZXNvbHZlZCIgXSwKKyAgICAgICAgICAg
ICAgICBbICJyZWplY3QiLCAiZmFpbCIsIGpRdWVyeS5DYWxsYmFja3MoICJvbmNlIG1lbW9yeSIg
KSwKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LkNhbGxiYWNrcyggIm9uY2UgbWVtb3J5IiAp
LCAxLCAicmVqZWN0ZWQiIF0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICBzdGF0ZSA9ICJw
ZW5kaW5nIiwKKyAgICAgICAgICAgIHByb21pc2UgPSB7CisgICAgICAgICAgICAgICAgc3RhdGU6
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGU7CisgICAgICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBhbHdheXM6IGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgICAgICBkZWZlcnJlZC5kb25lKCBhcmd1bWVudHMgKS5mYWlsKCBhcmd1bWVudHMg
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgICAgICAiY2F0Y2giOiBmdW5jdGlvbiggZm4gKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oIG51bGwsIGZuICk7CisgICAgICAgICAgICAgICAg
fSwKKworICAgICAgICAgICAgICAgIC8vIEtlZXAgcGlwZSBmb3IgYmFjay1jb21wYXQKKyAgICAg
ICAgICAgICAgICBwaXBlOiBmdW5jdGlvbiggLyogZm5Eb25lLCBmbkZhaWwsIGZuUHJvZ3Jlc3Mg
Ki8gKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBmbnMgPSBhcmd1bWVudHM7CisKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVy
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rp
b24oIGksIHR1cGxlICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFwIHR1
cGxlcyAocHJvZ3Jlc3MsIGRvbmUsIGZhaWwpIHRvIGFyZ3VtZW50cyAoZG9uZSwgZmFpbCwgcHJv
Z3Jlc3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuID0galF1ZXJ5LmlzRnVu
Y3Rpb24oIGZuc1sgdHVwbGVbIDQgXSBdICkgJiYgZm5zWyB0dXBsZVsgNCBdIF07CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWZlcnJlZC5wcm9ncmVzcyhmdW5jdGlvbigpIHsg
YmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5ub3RpZnkgfSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBkZWZlcnJlZC5kb25lKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVy
IG9yIG5ld0RlZmVyLnJlc29sdmUgfSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBk
ZWZlcnJlZC5mYWlsKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJl
amVjdCB9KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkWyB0dXBsZVsgMSBd
IF0oIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0
dXJuZWQgPSBmbiAmJiBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggcmV0dXJuZWQgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHJl
dHVybmVkLnByb21pc2UgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybmVkLnByb21pc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC5wcm9ncmVzcyggbmV3RGVmZXIubm90aWZ5ICkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZhaWwoIG5ld0RlZmVyLnJlamVjdCApOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3RGVmZXJbIHR1cGxlWyAwIF0gKyAiV2l0aCIgXSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZuID8gWyByZXR1cm5lZCBdIDogYXJndW1lbnRzCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOworICAgICAg
ICAgICAgICAgICAgICAgICAgfSApOworICAgICAgICAgICAgICAgICAgICAgICAgZm5zID0gbnVs
bDsKKyAgICAgICAgICAgICAgICAgICAgfSApLnByb21pc2UoKTsKKyAgICAgICAgICAgICAgICB9
LAorICAgICAgICAgICAgICAgIHRoZW46IGZ1bmN0aW9uKCBvbkZ1bGZpbGxlZCwgb25SZWplY3Rl
ZCwgb25Qcm9ncmVzcyApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG1heERlcHRoID0gMDsK
KyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZSggZGVwdGgsIGRlZmVycmVkLCBo
YW5kbGVyLCBzcGVjaWFsICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3VtZW50cywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWlnaHRUaHJvdyA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldHVybmVkLCB0aGVuOworCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBz
ZWN0aW9uIDIuMy4zLjMuMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
aHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIElnbm9yZSBkb3VibGUtcmVzb2x1dGlvbiBhdHRlbXB0cworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkZXB0aCA8IG1heERlcHRoICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuZWQgPSBoYW5kbGVyLmFwcGx5KCB0aGF0LCBhcmdzICk7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IFByb21pc2Vz
L0ErIHNlY3Rpb24gMi4zLjEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTQ4CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHJldHVybmVkID09PSBkZWZlcnJlZC5wcm9taXNlKCkgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVF
cnJvciggIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvbiIgKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbnMgMi4zLjMuMSwgMy41CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNw
b2ludC01NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9w
cm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNzUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFJldHJpZXZlIGB0aGVuYCBvbmx5IG9uY2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoZW4gPSByZXR1cm5lZCAmJgorCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMu
NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vcHJv
bWlzZXNhcGx1cy5jb20vI3BvaW50LTY0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gT25seSBjaGVjayBvYmplY3RzIGFuZCBmdW5jdGlvbnMgZm9yIHRoZW5hYmls
aXR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCB0eXBlb2YgcmV0
dXJuZWQgPT09ICJvYmplY3QiIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGVvZiByZXR1cm5lZCA9PT0gImZ1bmN0aW9uIiApICYmCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQudGhlbjsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGEgcmV0dXJuZWQgdGhlbmFibGUK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rp
b24oIHRoZW4gKSApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFNwZWNpYWwgcHJvY2Vzc29ycyAobm90aWZ5KSBqdXN0IHdhaXQgZm9yIHJlc29sdXRpb24K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNwZWNpYWwgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4uY2FsbCgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVk
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2
ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSggbWF4RGVwdGgsIGRl
ZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIE5vcm1hbCBwcm9jZXNzb3JzIChyZXNvbHZlKSBhbHNvIGhvb2sgaW50byBwcm9ncmVz
cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLi4uYW5kIGRpc3Jl
Z2FyZCBvbGRlciByZXNvbHV0aW9uIHZhbHVlcworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYXhEZXB0aCsrOworCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoZW4uY2FsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVu
dGl0eSwgc3BlY2lhbCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsICks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZl
KCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm5vdGlmeVdpdGggKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSGFuZGxlIGFsbCBvdGhlciByZXR1cm5lZCB2YWx1ZXMKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHN1YnN0aXR1dGUgaGFuZGxlcnMgcGFzcyBvbiBj
b250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIG11
bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBoYW5kbGVyICE9PSBJZGVudGl0eSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCA9IHVuZGVmaW5lZDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IFsgcmV0dXJu
ZWQgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9jZXNzIHRoZSB2YWx1ZShz
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgcHJv
Y2VzcyBpcyByZXNvbHZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KCBzcGVjaWFsIHx8IGRlZmVycmVkLnJlc29sdmVXaXRoICkoIHRoYXQsIGFyZ3MgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IG5v
cm1hbCBwcm9jZXNzb3JzIChyZXNvbHZlKSBjYXRjaCBhbmQgcmVqZWN0IGV4Y2VwdGlvbnMKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VzcyA9IHNwZWNpYWwgPworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlnaHRUaHJvdyA6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtaWdodFRocm93KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBjYXRjaCAoIGUgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5E
ZWZlcnJlZC5leGNlcHRpb25Ib29rKCBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Muc3RhY2tUcmFjZSApOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAy
LjMuMy4zLjQuMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC02MQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmUgcG9zdC1yZXNvbHV0aW9uIGV4Y2Vw
dGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBk
ZXB0aCArIDEgPj0gbWF4RGVwdGggKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNv
bnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBoYW5kbGVyICE9PSBUaHJvd2Vy
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoYXQgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXJncyA9IFsgZSBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZWplY3RXaXRoKCB0aGF0LCBhcmdzICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogUHJv
bWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01NworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFJlLXJlc29sdmUgcHJvbWlzZXMgaW1tZWRpYXRlbHkgdG8gZG9kZ2UgZmFs
c2UgcmVqZWN0aW9uIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdWJzZXF1
ZW50IGVycm9ycworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGVwdGggKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIENhbGwgYW4gb3B0aW9uYWwgaG9vayB0byByZWNvcmQgdGhlIHN0YWNrLCBpbiBjYXNlIG9m
IGV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaW5jZSBpdCdz
IG90aGVyd2lzZSBsb3N0IHdoZW4gZXhlY3V0aW9uIGdvZXMgYXN5bmMKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5zdGFja1RyYWNlID0g
alF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vaygpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1l
b3V0KCBwcm9jZXNzICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvZ3Jlc3NfaGFuZGxlcnMuYWRkKCAuLi4gKQor
ICAgICAgICAgICAgICAgICAgICAgICAgdHVwbGVzWyAwIF1bIDMgXS5hZGQoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RGVmZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5pc0Z1bmN0aW9uKCBvblByb2dyZXNzICkg
PworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Qcm9ncmVzcyA6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZGVudGl0eSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3RGVmZXIubm90aWZ5V2l0aAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5hZGQoIC4uLiApCisgICAgICAgICAgICAg
ICAgICAgICAgICB0dXBsZXNbIDEgXVsgMyBdLmFkZCgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXNvbHZlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdEZWZlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LmlzRnVuY3Rpb24oIG9uRnVsZmlsbGVkICkgPworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb25GdWxmaWxsZWQgOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSWRlbnRpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICApCisgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyByZWplY3RlZF9oYW5kbGVycy5hZGQoIC4uLiApCisgICAgICAgICAgICAgICAgICAgICAg
ICB0dXBsZXNbIDIgXVsgMyBdLmFkZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNv
bHZlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuZXdEZWZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmlzRnVuY3Rpb24oIG9uUmVqZWN0ZWQgKSA/CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvblJlamVjdGVkIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRocm93ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAg
ICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICB9ICkucHJvbWlzZSgpOwor
ICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAvLyBHZXQgYSBwcm9taXNlIGZv
ciB0aGlzIGRlZmVycmVkCisgICAgICAgICAgICAgICAgLy8gSWYgb2JqIGlzIHByb3ZpZGVkLCB0
aGUgcHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8gdGhlIG9iamVjdAorICAgICAgICAgICAgICAg
IHByb21pc2U6IGZ1bmN0aW9uKCBvYmogKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBv
YmogIT0gbnVsbCA/IGpRdWVyeS5leHRlbmQoIG9iaiwgcHJvbWlzZSApIDogcHJvbWlzZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgZGVmZXJyZWQgPSB7
fTsKKworICAgICAgICAvLyBBZGQgbGlzdC1zcGVjaWZpYyBtZXRob2RzCisgICAgICAgIGpRdWVy
eS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHsKKyAgICAgICAgICAgIHZhciBs
aXN0ID0gdHVwbGVbIDIgXSwKKyAgICAgICAgICAgICAgICBzdGF0ZVN0cmluZyA9IHR1cGxlWyA1
IF07CisKKyAgICAgICAgICAgIC8vIHByb21pc2UucHJvZ3Jlc3MgPSBsaXN0LmFkZAorICAgICAg
ICAgICAgLy8gcHJvbWlzZS5kb25lID0gbGlzdC5hZGQKKyAgICAgICAgICAgIC8vIHByb21pc2Uu
ZmFpbCA9IGxpc3QuYWRkCisgICAgICAgICAgICBwcm9taXNlWyB0dXBsZVsgMSBdIF0gPSBsaXN0
LmFkZDsKKworICAgICAgICAgICAgLy8gSGFuZGxlIHN0YXRlCisgICAgICAgICAgICBpZiAoIHN0
YXRlU3RyaW5nICkgeworICAgICAgICAgICAgICAgIGxpc3QuYWRkKAorICAgICAgICAgICAgICAg
ICAgICBmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RhdGUgPSAi
cmVzb2x2ZWQiIChpLmUuLCBmdWxmaWxsZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBz
dGF0ZSA9ICJyZWplY3RlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVT
dHJpbmc7CisgICAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAgICAgLy8g
cmVqZWN0ZWRfY2FsbGJhY2tzLmRpc2FibGUKKyAgICAgICAgICAgICAgICAgICAgLy8gZnVsZmls
bGVkX2NhbGxiYWNrcy5kaXNhYmxlCisgICAgICAgICAgICAgICAgICAgIHR1cGxlc1sgMyAtIGkg
XVsgMiBdLmRpc2FibGUsCisKKyAgICAgICAgICAgICAgICAgICAgLy8gcHJvZ3Jlc3NfY2FsbGJh
Y2tzLmxvY2sKKyAgICAgICAgICAgICAgICAgICAgdHVwbGVzWyAwIF1bIDIgXS5sb2NrCisgICAg
ICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gcHJvZ3Jlc3Nf
aGFuZGxlcnMuZmlyZQorICAgICAgICAgICAgLy8gZnVsZmlsbGVkX2hhbmRsZXJzLmZpcmUKKyAg
ICAgICAgICAgIC8vIHJlamVjdGVkX2hhbmRsZXJzLmZpcmUKKyAgICAgICAgICAgIGxpc3QuYWRk
KCB0dXBsZVsgMyBdLmZpcmUgKTsKKworICAgICAgICAgICAgLy8gZGVmZXJyZWQubm90aWZ5ID0g
ZnVuY3Rpb24oKSB7IGRlZmVycmVkLm5vdGlmeVdpdGgoLi4uKSB9CisgICAgICAgICAgICAvLyBk
ZWZlcnJlZC5yZXNvbHZlID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLnJlc29sdmVXaXRoKC4uLikg
fQorICAgICAgICAgICAgLy8gZGVmZXJyZWQucmVqZWN0ID0gZnVuY3Rpb24oKSB7IGRlZmVycmVk
LnJlamVjdFdpdGgoLi4uKSB9CisgICAgICAgICAgICBkZWZlcnJlZFsgdHVwbGVbIDAgXSBdID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyAiV2l0
aCIgXSggdGhpcyA9PT0gZGVmZXJyZWQgPyB1bmRlZmluZWQgOiB0aGlzLCBhcmd1bWVudHMgKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAg
ICAgIC8vIGRlZmVycmVkLm5vdGlmeVdpdGggPSBsaXN0LmZpcmVXaXRoCisgICAgICAgICAgICAv
LyBkZWZlcnJlZC5yZXNvbHZlV2l0aCA9IGxpc3QuZmlyZVdpdGgKKyAgICAgICAgICAgIC8vIGRl
ZmVycmVkLnJlamVjdFdpdGggPSBsaXN0LmZpcmVXaXRoCisgICAgICAgICAgICBkZWZlcnJlZFsg
dHVwbGVbIDAgXSArICJXaXRoIiBdID0gbGlzdC5maXJlV2l0aDsKKyAgICAgICAgfSApOworCisg
ICAgICAgIC8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZQorICAgICAgICBwcm9taXNlLnBy
b21pc2UoIGRlZmVycmVkICk7CisKKyAgICAgICAgLy8gQ2FsbCBnaXZlbiBmdW5jIGlmIGFueQor
ICAgICAgICBpZiAoIGZ1bmMgKSB7CisgICAgICAgICAgICBmdW5jLmNhbGwoIGRlZmVycmVkLCBk
ZWZlcnJlZCApOworICAgICAgICB9CisKKyAgICAgICAgLy8gQWxsIGRvbmUhCisgICAgICAgIHJl
dHVybiBkZWZlcnJlZDsKKyAgICB9LAorCisgICAgLy8gRGVmZXJyZWQgaGVscGVyCisgICAgd2hl
bjogZnVuY3Rpb24oIHNpbmdsZVZhbHVlICkgeworICAgICAgICB2YXIKKworICAgICAgICAgICAg
Ly8gY291bnQgb2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVzCisgICAgICAgICAgICByZW1haW5p
bmcgPSBhcmd1bWVudHMubGVuZ3RoLAorCisgICAgICAgICAgICAvLyBjb3VudCBvZiB1bnByb2Nl
c3NlZCBhcmd1bWVudHMKKyAgICAgICAgICAgIGkgPSByZW1haW5pbmcsCisKKyAgICAgICAgICAg
IC8vIHN1Ym9yZGluYXRlIGZ1bGZpbGxtZW50IGRhdGEKKyAgICAgICAgICAgIHJlc29sdmVDb250
ZXh0cyA9IEFycmF5KCBpICksCisgICAgICAgICAgICByZXNvbHZlVmFsdWVzID0gc2xpY2UuY2Fs
bCggYXJndW1lbnRzICksCisKKyAgICAgICAgICAgIC8vIHRoZSBtYXN0ZXIgRGVmZXJyZWQKKyAg
ICAgICAgICAgIG1hc3RlciA9IGpRdWVyeS5EZWZlcnJlZCgpLAorCisgICAgICAgICAgICAvLyBz
dWJvcmRpbmF0ZSBjYWxsYmFjayBmYWN0b3J5CisgICAgICAgICAgICB1cGRhdGVGdW5jID0gZnVu
Y3Rpb24oIGkgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCB2YWx1ZSApIHsK
KyAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNvbnRleHRzWyBpIF0gPSB0aGlzOworICAgICAg
ICAgICAgICAgICAgICByZXNvbHZlVmFsdWVzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/
IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApIDogdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGlm
ICggISggLS1yZW1haW5pbmcgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hc3Rlci5y
ZXNvbHZlV2l0aCggcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfTsKKworICAgICAg
ICAvLyBTaW5nbGUtIGFuZCBlbXB0eSBhcmd1bWVudHMgYXJlIGFkb3B0ZWQgbGlrZSBQcm9taXNl
LnJlc29sdmUKKyAgICAgICAgaWYgKCByZW1haW5pbmcgPD0gMSApIHsKKyAgICAgICAgICAgIGFk
b3B0VmFsdWUoIHNpbmdsZVZhbHVlLCBtYXN0ZXIuZG9uZSggdXBkYXRlRnVuYyggaSApICkucmVz
b2x2ZSwgbWFzdGVyLnJlamVjdCApOworCisgICAgICAgICAgICAvLyBVc2UgLnRoZW4oKSB0byB1
bndyYXAgc2Vjb25kYXJ5IHRoZW5hYmxlcyAoY2YuIGdoLTMwMDApCisgICAgICAgICAgICBpZiAo
IG1hc3Rlci5zdGF0ZSgpID09PSAicGVuZGluZyIgfHwKKyAgICAgICAgICAgICAgICBqUXVlcnku
aXNGdW5jdGlvbiggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIHJlc29sdmVWYWx1ZXNbIGkgXS50aGVu
ICkgKSB7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFzdGVyLnRoZW4oKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIE11bHRpcGxlIGFyZ3VtZW50cyBhcmUgYWdn
cmVnYXRlZCBsaWtlIFByb21pc2UuYWxsIGFycmF5IGVsZW1lbnRzCisgICAgICAgIHdoaWxlICgg
aS0tICkgeworICAgICAgICAgICAgYWRvcHRWYWx1ZSggcmVzb2x2ZVZhbHVlc1sgaSBdLCB1cGRh
dGVGdW5jKCBpICksIG1hc3Rlci5yZWplY3QgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biBtYXN0ZXIucHJvbWlzZSgpOworICAgIH0KK30gKTsKKworCisvLyBUaGVzZSB1c3VhbGx5IGlu
ZGljYXRlIGEgcHJvZ3JhbW1lciBtaXN0YWtlIGR1cmluZyBkZXZlbG9wbWVudCwKKy8vIHdhcm4g
YWJvdXQgdGhlbSBBU0FQIHJhdGhlciB0aGFuIHN3YWxsb3dpbmcgdGhlbSBieSBkZWZhdWx0Lgor
dmFyIHJlcnJvck5hbWVzID0gL14oRXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4
fFR5cGV8VVJJKUVycm9yJC87CisKK2pRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rID0gZnVu
Y3Rpb24oIGVycm9yLCBzdGFjayApIHsKKworICAgIC8vIFN1cHBvcnQ6IElFIDggLSA5IG9ubHkK
KyAgICAvLyBDb25zb2xlIGV4aXN0cyB3aGVuIGRldiB0b29scyBhcmUgb3Blbiwgd2hpY2ggY2Fu
IGhhcHBlbiBhdCBhbnkgdGltZQorICAgIGlmICggd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNv
bnNvbGUud2FybiAmJiBlcnJvciAmJiByZXJyb3JOYW1lcy50ZXN0KCBlcnJvci5uYW1lICkgKSB7
CisgICAgICAgIHdpbmRvdy5jb25zb2xlLndhcm4oICJqUXVlcnkuRGVmZXJyZWQgZXhjZXB0aW9u
OiAiICsgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIHN0YWNrICk7CisgICAgfQorfTsKKwor
CisKKworalF1ZXJ5LnJlYWR5RXhjZXB0aW9uID0gZnVuY3Rpb24oIGVycm9yICkgeworICAgIHdp
bmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhyb3cgZXJyb3I7CisgICAg
fSApOworfTsKKworCisKKworLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5Cit2YXIg
cmVhZHlMaXN0ID0galF1ZXJ5LkRlZmVycmVkKCk7CisKK2pRdWVyeS5mbi5yZWFkeSA9IGZ1bmN0
aW9uKCBmbiApIHsKKworICAgIHJlYWR5TGlzdAorICAgICAgICAudGhlbiggZm4gKQorCisgICAg
ICAgIC8vIFdyYXAgalF1ZXJ5LnJlYWR5RXhjZXB0aW9uIGluIGEgZnVuY3Rpb24gc28gdGhhdCB0
aGUgbG9va3VwCisgICAgICAgIC8vIGhhcHBlbnMgYXQgdGhlIHRpbWUgb2YgZXJyb3IgaGFuZGxp
bmcgaW5zdGVhZCBvZiBjYWxsYmFjaworICAgICAgICAvLyByZWdpc3RyYXRpb24uCisgICAgICAg
IC5jYXRjaCggZnVuY3Rpb24oIGVycm9yICkgeworICAgICAgICAgICAgalF1ZXJ5LnJlYWR5RXhj
ZXB0aW9uKCBlcnJvciApOworICAgICAgICB9ICk7CisKKyAgICByZXR1cm4gdGhpczsKK307CisK
K2pRdWVyeS5leHRlbmQoIHsKKworICAgIC8vIElzIHRoZSBET00gcmVhZHkgdG8gYmUgdXNlZD8g
U2V0IHRvIHRydWUgb25jZSBpdCBvY2N1cnMuCisgICAgaXNSZWFkeTogZmFsc2UsCisKKyAgICAv
LyBBIGNvdW50ZXIgdG8gdHJhY2sgaG93IG1hbnkgaXRlbXMgdG8gd2FpdCBmb3IgYmVmb3JlCisg
ICAgLy8gdGhlIHJlYWR5IGV2ZW50IGZpcmVzLiBTZWUgIzY3ODEKKyAgICByZWFkeVdhaXQ6IDEs
CisKKyAgICAvLyBIb2xkIChvciByZWxlYXNlKSB0aGUgcmVhZHkgZXZlbnQKKyAgICBob2xkUmVh
ZHk6IGZ1bmN0aW9uKCBob2xkICkgeworICAgICAgICBpZiAoIGhvbGQgKSB7CisgICAgICAgICAg
ICBqUXVlcnkucmVhZHlXYWl0Kys7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBqUXVl
cnkucmVhZHkoIHRydWUgKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICAvLyBIYW5kbGUgd2hl
biB0aGUgRE9NIGlzIHJlYWR5CisgICAgcmVhZHk6IGZ1bmN0aW9uKCB3YWl0ICkgeworCisgICAg
ICAgIC8vIEFib3J0IGlmIHRoZXJlIGFyZSBwZW5kaW5nIGhvbGRzIG9yIHdlJ3JlIGFscmVhZHkg
cmVhZHkKKyAgICAgICAgaWYgKCB3YWl0ID09PSB0cnVlID8gLS1qUXVlcnkucmVhZHlXYWl0IDog
alF1ZXJ5LmlzUmVhZHkgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICAvLyBSZW1lbWJlciB0aGF0IHRoZSBET00gaXMgcmVhZHkKKyAgICAgICAgalF1ZXJ5Lmlz
UmVhZHkgPSB0cnVlOworCisgICAgICAgIC8vIElmIGEgbm9ybWFsIERPTSBSZWFkeSBldmVudCBm
aXJlZCwgZGVjcmVtZW50LCBhbmQgd2FpdCBpZiBuZWVkIGJlCisgICAgICAgIGlmICggd2FpdCAh
PT0gdHJ1ZSAmJiAtLWpRdWVyeS5yZWFkeVdhaXQgPiAwICkgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGZ1bmN0aW9ucyBib3VuZCwg
dG8gZXhlY3V0ZQorICAgICAgICByZWFkeUxpc3QucmVzb2x2ZVdpdGgoIGRvY3VtZW50LCBbIGpR
dWVyeSBdICk7CisgICAgfQorfSApOworCitqUXVlcnkucmVhZHkudGhlbiA9IHJlYWR5TGlzdC50
aGVuOworCisvLyBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlciBhbmQgc2VsZiBjbGVhbnVwIG1ldGhv
ZAorZnVuY3Rpb24gY29tcGxldGVkKCkgeworICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVu
ZXIoICJET01Db250ZW50TG9hZGVkIiwgY29tcGxldGVkICk7CisgICAgd2luZG93LnJlbW92ZUV2
ZW50TGlzdGVuZXIoICJsb2FkIiwgY29tcGxldGVkICk7CisgICAgalF1ZXJ5LnJlYWR5KCk7Cit9
CisKKy8vIENhdGNoIGNhc2VzIHdoZXJlICQoZG9jdW1lbnQpLnJlYWR5KCkgaXMgY2FsbGVkCisv
LyBhZnRlciB0aGUgYnJvd3NlciBldmVudCBoYXMgYWxyZWFkeSBvY2N1cnJlZC4KKy8vIFN1cHBv
cnQ6IElFIDw9OSAtIDEwIG9ubHkKKy8vIE9sZGVyIElFIHNvbWV0aW1lcyBzaWduYWxzICJpbnRl
cmFjdGl2ZSIgdG9vIHNvb24KK2lmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRl
IiB8fAorICAgICggZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gImxvYWRpbmciICYmICFkb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgKSApIHsKKworICAgIC8vIEhhbmRsZSBpdCBhc3lu
Y2hyb25vdXNseSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1bml0eSB0byBkZWxheSByZWFk
eQorICAgIHdpbmRvdy5zZXRUaW1lb3V0KCBqUXVlcnkucmVhZHkgKTsKKworfSBlbHNlIHsKKwor
ICAgIC8vIFVzZSB0aGUgaGFuZHkgZXZlbnQgY2FsbGJhY2sKKyAgICBkb2N1bWVudC5hZGRFdmVu
dExpc3RlbmVyKCAiRE9NQ29udGVudExvYWRlZCIsIGNvbXBsZXRlZCApOworCisgICAgLy8gQSBm
YWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmsKKyAgICB3aW5k
b3cuYWRkRXZlbnRMaXN0ZW5lciggImxvYWQiLCBjb21wbGV0ZWQgKTsKK30KKworCisKKworLy8g
TXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2YWx1ZXMgb2YgYSBjb2xsZWN0
aW9uCisvLyBUaGUgdmFsdWUvcyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBpdCdzIGEg
ZnVuY3Rpb24KK3ZhciBhY2Nlc3MgPSBmdW5jdGlvbiggZWxlbXMsIGZuLCBrZXksIHZhbHVlLCBj
aGFpbmFibGUsIGVtcHR5R2V0LCByYXcgKSB7CisgICAgdmFyIGkgPSAwLAorICAgICAgICBsZW4g
PSBlbGVtcy5sZW5ndGgsCisgICAgICAgIGJ1bGsgPSBrZXkgPT0gbnVsbDsKKworICAgIC8vIFNl
dHMgbWFueSB2YWx1ZXMKKyAgICBpZiAoIGpRdWVyeS50eXBlKCBrZXkgKSA9PT0gIm9iamVjdCIg
KSB7CisgICAgICAgIGNoYWluYWJsZSA9IHRydWU7CisgICAgICAgIGZvciAoIGkgaW4ga2V5ICkg
eworICAgICAgICAgICAgYWNjZXNzKCBlbGVtcywgZm4sIGksIGtleVsgaSBdLCB0cnVlLCBlbXB0
eUdldCwgcmF3ICk7CisgICAgICAgIH0KKworICAgIC8vIFNldHMgb25lIHZhbHVlCisgICAgfSBl
bHNlIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgY2hhaW5hYmxlID0gdHJ1
ZTsKKworICAgICAgICBpZiAoICFqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKKyAgICAg
ICAgICAgIHJhdyA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGJ1bGsgKSB7CisK
KyAgICAgICAgICAgIC8vIEJ1bGsgb3BlcmF0aW9ucyBydW4gYWdhaW5zdCB0aGUgZW50aXJlIHNl
dAorICAgICAgICAgICAgaWYgKCByYXcgKSB7CisgICAgICAgICAgICAgICAgZm4uY2FsbCggZWxl
bXMsIHZhbHVlICk7CisgICAgICAgICAgICAgICAgZm4gPSBudWxsOworCisgICAgICAgICAgICAv
LyAuLi5leGNlcHQgd2hlbiBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzCisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGJ1bGsgPSBmbjsKKyAgICAgICAgICAgICAgICBmbiA9
IGZ1bmN0aW9uKCBlbGVtLCBrZXksIHZhbHVlICkgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gYnVsay5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdmFsdWUgKTsKKyAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCBmbiApIHsKKyAgICAg
ICAgICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworICAgICAgICAgICAgICAgIGZuKAorICAg
ICAgICAgICAgICAgICAgICBlbGVtc1sgaSBdLCBrZXksIHJhdyA/CisgICAgICAgICAgICAgICAg
ICAgIHZhbHVlIDoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUuY2FsbCggZWxlbXNbIGkgXSwg
aSwgZm4oIGVsZW1zWyBpIF0sIGtleSApICkKKyAgICAgICAgICAgICAgICApOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCBjaGFpbmFibGUgKSB7CisgICAgICAg
IHJldHVybiBlbGVtczsKKyAgICB9CisKKyAgICAvLyBHZXRzCisgICAgaWYgKCBidWxrICkgewor
ICAgICAgICByZXR1cm4gZm4uY2FsbCggZWxlbXMgKTsKKyAgICB9CisKKyAgICByZXR1cm4gbGVu
ID8gZm4oIGVsZW1zWyAwIF0sIGtleSApIDogZW1wdHlHZXQ7Cit9OwordmFyIGFjY2VwdERhdGEg
PSBmdW5jdGlvbiggb3duZXIgKSB7CisKKyAgICAvLyBBY2NlcHRzIG9ubHk6CisgICAgLy8gIC0g
Tm9kZQorICAgIC8vICAgIC0gTm9kZS5FTEVNRU5UX05PREUKKyAgICAvLyAgICAtIE5vZGUuRE9D
VU1FTlRfTk9ERQorICAgIC8vICAtIE9iamVjdAorICAgIC8vICAgIC0gQW55CisgICAgcmV0dXJu
IG93bmVyLm5vZGVUeXBlID09PSAxIHx8IG93bmVyLm5vZGVUeXBlID09PSA5IHx8ICEoICtvd25l
ci5ub2RlVHlwZSApOworfTsKKworCisKKworZnVuY3Rpb24gRGF0YSgpIHsKKyAgICB0aGlzLmV4
cGFuZG8gPSBqUXVlcnkuZXhwYW5kbyArIERhdGEudWlkKys7Cit9CisKK0RhdGEudWlkID0gMTsK
KworRGF0YS5wcm90b3R5cGUgPSB7CisKKyAgICBjYWNoZTogZnVuY3Rpb24oIG93bmVyICkgewor
CisgICAgICAgIC8vIENoZWNrIGlmIHRoZSBvd25lciBvYmplY3QgYWxyZWFkeSBoYXMgYSBjYWNo
ZQorICAgICAgICB2YXIgdmFsdWUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07CisKKyAgICAgICAg
Ly8gSWYgbm90LCBjcmVhdGUgb25lCisgICAgICAgIGlmICggIXZhbHVlICkgeworICAgICAgICAg
ICAgdmFsdWUgPSB7fTsKKworICAgICAgICAgICAgLy8gV2UgY2FuIGFjY2VwdCBkYXRhIGZvciBu
b24tZWxlbWVudCBub2RlcyBpbiBtb2Rlcm4gYnJvd3NlcnMsCisgICAgICAgICAgICAvLyBidXQg
d2Ugc2hvdWxkIG5vdCwgc2VlICM4MzM1LgorICAgICAgICAgICAgLy8gQWx3YXlzIHJldHVybiBh
biBlbXB0eSBvYmplY3QuCisgICAgICAgICAgICBpZiAoIGFjY2VwdERhdGEoIG93bmVyICkgKSB7
CisKKyAgICAgICAgICAgICAgICAvLyBJZiBpdCBpcyBhIG5vZGUgdW5saWtlbHkgdG8gYmUgc3Ry
aW5naWZ5LWVkIG9yIGxvb3BlZCBvdmVyCisgICAgICAgICAgICAgICAgLy8gdXNlIHBsYWluIGFz
c2lnbm1lbnQKKyAgICAgICAgICAgICAgICBpZiAoIG93bmVyLm5vZGVUeXBlICkgeworICAgICAg
ICAgICAgICAgICAgICBvd25lclsgdGhpcy5leHBhbmRvIF0gPSB2YWx1ZTsKKworICAgICAgICAg
ICAgICAgIC8vIE90aGVyd2lzZSBzZWN1cmUgaXQgaW4gYSBub24tZW51bWVyYWJsZSBwcm9wZXJ0
eQorICAgICAgICAgICAgICAgIC8vIGNvbmZpZ3VyYWJsZSBtdXN0IGJlIHRydWUgdG8gYWxsb3cg
dGhlIHByb3BlcnR5IHRvIGJlCisgICAgICAgICAgICAgICAgLy8gZGVsZXRlZCB3aGVuIGRhdGEg
aXMgcmVtb3ZlZAorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhwYW5kbywgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgICAgICAgICAgICAgICAgICAgIH0gKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdmFsdWU7Cisg
ICAgfSwKKyAgICBzZXQ6IGZ1bmN0aW9uKCBvd25lciwgZGF0YSwgdmFsdWUgKSB7CisgICAgICAg
IHZhciBwcm9wLAorICAgICAgICAgICAgY2FjaGUgPSB0aGlzLmNhY2hlKCBvd25lciApOworCisg
ICAgICAgIC8vIEhhbmRsZTogWyBvd25lciwga2V5LCB2YWx1ZSBdIGFyZ3MKKyAgICAgICAgLy8g
QWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KQorICAgICAgICBpZiAoIHR5cGVvZiBk
YXRhID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIGNhY2hlWyBqUXVlcnkuY2FtZWxDYXNl
KCBkYXRhICkgXSA9IHZhbHVlOworCisgICAgICAgIC8vIEhhbmRsZTogWyBvd25lciwgeyBwcm9w
ZXJ0aWVzIH0gXSBhcmdzCisgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgIC8vIENvcHkg
dGhlIHByb3BlcnRpZXMgb25lLWJ5LW9uZSB0byB0aGUgY2FjaGUgb2JqZWN0CisgICAgICAgICAg
ICBmb3IgKCBwcm9wIGluIGRhdGEgKSB7CisgICAgICAgICAgICAgICAgY2FjaGVbIGpRdWVyeS5j
YW1lbENhc2UoIHByb3AgKSBdID0gZGF0YVsgcHJvcCBdOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiBjYWNoZTsKKyAgICB9LAorICAgIGdldDogZnVuY3Rpb24oIG93
bmVyLCBrZXkgKSB7CisgICAgICAgIHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/CisgICAgICAg
ICAgICB0aGlzLmNhY2hlKCBvd25lciApIDoKKworICAgICAgICAgICAgLy8gQWx3YXlzIHVzZSBj
YW1lbENhc2Uga2V5IChnaC0yMjU3KQorICAgICAgICAgICAgb3duZXJbIHRoaXMuZXhwYW5kbyBd
ICYmIG93bmVyWyB0aGlzLmV4cGFuZG8gXVsgalF1ZXJ5LmNhbWVsQ2FzZSgga2V5ICkgXTsKKyAg
ICB9LAorICAgIGFjY2VzczogZnVuY3Rpb24oIG93bmVyLCBrZXksIHZhbHVlICkgeworCisgICAg
ICAgIC8vIEluIGNhc2VzIHdoZXJlIGVpdGhlcjoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAx
LiBObyBrZXkgd2FzIHNwZWNpZmllZAorICAgICAgICAvLyAgIDIuIEEgc3RyaW5nIGtleSB3YXMg
c3BlY2lmaWVkLCBidXQgbm8gdmFsdWUgcHJvdmlkZWQKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
VGFrZSB0aGUgInJlYWQiIHBhdGggYW5kIGFsbG93IHRoZSBnZXQgbWV0aG9kIHRvIGRldGVybWlu
ZQorICAgICAgICAvLyB3aGljaCB2YWx1ZSB0byByZXR1cm4sIHJlc3BlY3RpdmVseSBlaXRoZXI6
CisgICAgICAgIC8vCisgICAgICAgIC8vICAgMS4gVGhlIGVudGlyZSBjYWNoZSBvYmplY3QKKyAg
ICAgICAgLy8gICAyLiBUaGUgZGF0YSBzdG9yZWQgYXQgdGhlIGtleQorICAgICAgICAvLworICAg
ICAgICBpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8CisgICAgICAgICAgICAgICAgKCAoIGtleSAm
JiB0eXBlb2Yga2V5ID09PSAic3RyaW5nIiApICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSApIHsK
KworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCBvd25lciwga2V5ICk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBXaGVuIHRoZSBrZXkgaXMgbm90IGEgc3RyaW5nLCBvciBib3RoIGEga2V5
IGFuZCB2YWx1ZQorICAgICAgICAvLyBhcmUgc3BlY2lmaWVkLCBzZXQgb3IgZXh0ZW5kIChleGlz
dGluZyBvYmplY3RzKSB3aXRoIGVpdGhlcjoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAxLiBB
biBvYmplY3Qgb2YgcHJvcGVydGllcworICAgICAgICAvLyAgIDIuIEEga2V5IGFuZCB2YWx1ZQor
ICAgICAgICAvLworICAgICAgICB0aGlzLnNldCggb3duZXIsIGtleSwgdmFsdWUgKTsKKworICAg
ICAgICAvLyBTaW5jZSB0aGUgInNldCIgcGF0aCBjYW4gaGF2ZSB0d28gcG9zc2libGUgZW50cnkg
cG9pbnRzCisgICAgICAgIC8vIHJldHVybiB0aGUgZXhwZWN0ZWQgZGF0YSBiYXNlZCBvbiB3aGlj
aCBwYXRoIHdhcyB0YWtlblsqXQorICAgICAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/
IHZhbHVlIDoga2V5OworICAgIH0sCisgICAgcmVtb3ZlOiBmdW5jdGlvbiggb3duZXIsIGtleSAp
IHsKKyAgICAgICAgdmFyIGksCisgICAgICAgICAgICBjYWNoZSA9IG93bmVyWyB0aGlzLmV4cGFu
ZG8gXTsKKworICAgICAgICBpZiAoIGNhY2hlID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGtleSAhPT0gdW5kZWZpbmVkICkg
eworCisgICAgICAgICAgICAvLyBTdXBwb3J0IGFycmF5IG9yIHNwYWNlIHNlcGFyYXRlZCBzdHJp
bmcgb2Yga2V5cworICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNBcnJheSgga2V5ICkgKSB7CisK
KyAgICAgICAgICAgICAgICAvLyBJZiBrZXkgaXMgYW4gYXJyYXkgb2Yga2V5cy4uLgorICAgICAg
ICAgICAgICAgIC8vIFdlIGFsd2F5cyBzZXQgY2FtZWxDYXNlIGtleXMsIHNvIHJlbW92ZSB0aGF0
LgorICAgICAgICAgICAgICAgIGtleSA9IGtleS5tYXAoIGpRdWVyeS5jYW1lbENhc2UgKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAga2V5ID0galF1ZXJ5LmNhbWVsQ2Fz
ZSgga2V5ICk7CisKKyAgICAgICAgICAgICAgICAvLyBJZiBhIGtleSB3aXRoIHRoZSBzcGFjZXMg
ZXhpc3RzLCB1c2UgaXQuCisgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBjcmVhdGUgYW4g
YXJyYXkgYnkgbWF0Y2hpbmcgbm9uLXdoaXRlc3BhY2UKKyAgICAgICAgICAgICAgICBrZXkgPSBr
ZXkgaW4gY2FjaGUgPworICAgICAgICAgICAgICAgICAgICBbIGtleSBdIDoKKyAgICAgICAgICAg
ICAgICAgICAgKCBrZXkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSApOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpID0ga2V5Lmxlbmd0aDsKKworICAgICAgICAgICAgd2hpbGUg
KCBpLS0gKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIGNhY2hlWyBrZXlbIGkgXSBdOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gUmVtb3ZlIHRoZSBleHBhbmRvIGlm
IHRoZXJlJ3Mgbm8gbW9yZSBkYXRhCisgICAgICAgIGlmICgga2V5ID09PSB1bmRlZmluZWQgfHwg
alF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICkgKSB7CisKKyAgICAgICAgICAgIC8vIFN1cHBv
cnQ6IENocm9tZSA8PTM1IC0gNDUKKyAgICAgICAgICAgIC8vIFdlYmtpdCAmIEJsaW5rIHBlcmZv
cm1hbmNlIHN1ZmZlcnMgd2hlbiBkZWxldGluZyBwcm9wZXJ0aWVzCisgICAgICAgICAgICAvLyBm
cm9tIERPTSBub2Rlcywgc28gc2V0IHRvIHVuZGVmaW5lZCBpbnN0ZWFkCisgICAgICAgICAgICAv
LyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0z
Nzg2MDcgKGJ1ZyByZXN0cmljdGVkKQorICAgICAgICAgICAgaWYgKCBvd25lci5ub2RlVHlwZSAp
IHsKKyAgICAgICAgICAgICAgICBvd25lclsgdGhpcy5leHBhbmRvIF0gPSB1bmRlZmluZWQ7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBvd25lclsgdGhpcy5l
eHBhbmRvIF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LAorICAgIGhhc0RhdGE6
IGZ1bmN0aW9uKCBvd25lciApIHsKKyAgICAgICAgdmFyIGNhY2hlID0gb3duZXJbIHRoaXMuZXhw
YW5kbyBdOworICAgICAgICByZXR1cm4gY2FjaGUgIT09IHVuZGVmaW5lZCAmJiAhalF1ZXJ5Lmlz
RW1wdHlPYmplY3QoIGNhY2hlICk7CisgICAgfQorfTsKK3ZhciBkYXRhUHJpdiA9IG5ldyBEYXRh
KCk7CisKK3ZhciBkYXRhVXNlciA9IG5ldyBEYXRhKCk7CisKKworCisvLyAgSW1wbGVtZW50YXRp
b24gU3VtbWFyeQorLy8KKy8vICAxLiBFbmZvcmNlIEFQSSBzdXJmYWNlIGFuZCBzZW1hbnRpYyBj
b21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoCisvLyAgMi4gSW1wcm92ZSB0aGUgbW9kdWxl
J3MgbWFpbnRhaW5hYmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBzdG9yYWdlCisvLyAgICAgIHBhdGhz
IHRvIGEgc2luZ2xlIG1lY2hhbmlzbS4KKy8vICAzLiBVc2UgdGhlIHNhbWUgc2luZ2xlIG1lY2hh
bmlzbSB0byBzdXBwb3J0ICJwcml2YXRlIiBhbmQgInVzZXIiIGRhdGEuCisvLyAgNC4gX05ldmVy
XyBleHBvc2UgInByaXZhdGUiIGRhdGEgdG8gdXNlciBjb2RlIChUT0RPOiBEcm9wIF9kYXRhLCBf
cmVtb3ZlRGF0YSkKKy8vICA1LiBBdm9pZCBleHBvc2luZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxz
IG9uIHVzZXIgb2JqZWN0cyAoZWcuIGV4cGFuZG8gcHJvcGVydGllcykKKy8vICA2LiBQcm92aWRl
IGEgY2xlYXIgcGF0aCBmb3IgaW1wbGVtZW50YXRpb24gdXBncmFkZSB0byBXZWFrTWFwIGluIDIw
MTQKKwordmFyIHJicmFjZSA9IC9eKD86XHtbXHdcV10qXH18XFtbXHdcV10qXF0pJC8sCisgICAg
cm11bHRpRGFzaCA9IC9bQS1aXS9nOworCitmdW5jdGlvbiBnZXREYXRhKCBkYXRhICkgeworICAg
IGlmICggZGF0YSA9PT0gInRydWUiICkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBpZiAoIGRhdGEgPT09ICJmYWxzZSIgKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBpZiAoIGRhdGEgPT09ICJudWxsIiApIHsKKyAgICAgICAgcmV0dXJuIG51bGw7
CisgICAgfQorCisgICAgLy8gT25seSBjb252ZXJ0IHRvIGEgbnVtYmVyIGlmIGl0IGRvZXNuJ3Qg
Y2hhbmdlIHRoZSBzdHJpbmcKKyAgICBpZiAoIGRhdGEgPT09ICtkYXRhICsgIiIgKSB7CisgICAg
ICAgIHJldHVybiArZGF0YTsKKyAgICB9CisKKyAgICBpZiAoIHJicmFjZS50ZXN0KCBkYXRhICkg
KSB7CisgICAgICAgIHJldHVybiBKU09OLnBhcnNlKCBkYXRhICk7CisgICAgfQorCisgICAgcmV0
dXJuIGRhdGE7Cit9CisKK2Z1bmN0aW9uIGRhdGFBdHRyKCBlbGVtLCBrZXksIGRhdGEgKSB7Cisg
ICAgdmFyIG5hbWU7CisKKyAgICAvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5hbGx5LCB0
cnkgdG8gZmV0Y2ggYW55CisgICAgLy8gZGF0YSBmcm9tIHRoZSBIVE1MNSBkYXRhLSogYXR0cmli
dXRlCisgICAgaWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSAp
IHsKKyAgICAgICAgbmFtZSA9ICJkYXRhLSIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgIi0k
JiIgKS50b0xvd2VyQ2FzZSgpOworICAgICAgICBkYXRhID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5h
bWUgKTsKKworICAgICAgICBpZiAoIHR5cGVvZiBkYXRhID09PSAic3RyaW5nIiApIHsKKyAgICAg
ICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgZGF0YSA9IGdldERhdGEoIGRhdGEgKTsKKyAg
ICAgICAgICAgIH0gY2F0Y2ggKCBlICkge30KKworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdl
IHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyCisgICAgICAgICAgICBkYXRh
VXNlci5zZXQoIGVsZW0sIGtleSwgZGF0YSApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgZGF0YSA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZGF0YTsK
K30KKworalF1ZXJ5LmV4dGVuZCggeworICAgIGhhc0RhdGE6IGZ1bmN0aW9uKCBlbGVtICkgewor
ICAgICAgICByZXR1cm4gZGF0YVVzZXIuaGFzRGF0YSggZWxlbSApIHx8IGRhdGFQcml2Lmhhc0Rh
dGEoIGVsZW0gKTsKKyAgICB9LAorCisgICAgZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRh
dGEgKSB7CisgICAgICAgIHJldHVybiBkYXRhVXNlci5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEg
KTsKKyAgICB9LAorCisgICAgcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7Cisg
ICAgICAgIGRhdGFVc2VyLnJlbW92ZSggZWxlbSwgbmFtZSApOworICAgIH0sCisKKyAgICAvLyBU
T0RPOiBOb3cgdGhhdCBhbGwgY2FsbHMgdG8gX2RhdGEgYW5kIF9yZW1vdmVEYXRhIGhhdmUgYmVl
biByZXBsYWNlZAorICAgIC8vIHdpdGggZGlyZWN0IGNhbGxzIHRvIGRhdGFQcml2IG1ldGhvZHMs
IHRoZXNlIGNhbiBiZSBkZXByZWNhdGVkLgorICAgIF9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFt
ZSwgZGF0YSApIHsKKyAgICAgICAgcmV0dXJuIGRhdGFQcml2LmFjY2VzcyggZWxlbSwgbmFtZSwg
ZGF0YSApOworICAgIH0sCisKKyAgICBfcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUg
KSB7CisgICAgICAgIGRhdGFQcml2LnJlbW92ZSggZWxlbSwgbmFtZSApOworICAgIH0KK30gKTsK
KworalF1ZXJ5LmZuLmV4dGVuZCggeworICAgIGRhdGE6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkg
eworICAgICAgICB2YXIgaSwgbmFtZSwgZGF0YSwKKyAgICAgICAgICAgIGVsZW0gPSB0aGlzWyAw
IF0sCisgICAgICAgICAgICBhdHRycyA9IGVsZW0gJiYgZWxlbS5hdHRyaWJ1dGVzOworCisgICAg
ICAgIC8vIEdldHMgYWxsIHZhbHVlcworICAgICAgICBpZiAoIGtleSA9PT0gdW5kZWZpbmVkICkg
eworICAgICAgICAgICAgaWYgKCB0aGlzLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICBkYXRh
ID0gZGF0YVVzZXIuZ2V0KCBlbGVtICk7CisKKyAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9k
ZVR5cGUgPT09IDEgJiYgIWRhdGFQcml2LmdldCggZWxlbSwgImhhc0RhdGFBdHRycyIgKSApIHsK
KyAgICAgICAgICAgICAgICAgICAgaSA9IGF0dHJzLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKCBpLS0gKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6
IElFIDExIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBhdHRycyBlbGVtZW50
cyBjYW4gYmUgbnVsbCAoIzE0ODk0KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBhdHRy
c1sgaSBdICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBhdHRyc1sgaSBd
Lm5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBuYW1lLmluZGV4T2YoICJk
YXRhLSIgKSA9PT0gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9
IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUuc2xpY2UoIDUgKSApOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhQXR0ciggZWxlbSwgbmFtZSwgZGF0YVsgbmFtZSBdICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRhdGFQcml2LnNldCggZWxl
bSwgImhhc0RhdGFBdHRycyIsIHRydWUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybiBkYXRhOworICAgICAgICB9CisKKyAgICAgICAgLy8g
U2V0cyBtdWx0aXBsZSB2YWx1ZXMKKyAgICAgICAgaWYgKCB0eXBlb2Yga2V5ID09PSAib2JqZWN0
IiApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgIGRhdGFVc2VyLnNldCggdGhpcywga2V5ICk7CisgICAgICAgICAgICB9ICk7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUg
KSB7CisgICAgICAgICAgICB2YXIgZGF0YTsKKworICAgICAgICAgICAgLy8gVGhlIGNhbGxpbmcg
alF1ZXJ5IG9iamVjdCAoZWxlbWVudCBtYXRjaGVzKSBpcyBub3QgZW1wdHkKKyAgICAgICAgICAg
IC8vIChhbmQgdGhlcmVmb3JlIGhhcyBhbiBlbGVtZW50IGFwcGVhcnMgYXQgdGhpc1sgMCBdKSBh
bmQgdGhlCisgICAgICAgICAgICAvLyBgdmFsdWVgIHBhcmFtZXRlciB3YXMgbm90IHVuZGVmaW5l
ZC4gQW4gZW1wdHkgalF1ZXJ5IG9iamVjdAorICAgICAgICAgICAgLy8gd2lsbCByZXN1bHQgaW4g
YHVuZGVmaW5lZGAgZm9yIGVsZW0gPSB0aGlzWyAwIF0gd2hpY2ggd2lsbAorICAgICAgICAgICAg
Ly8gdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFuIGF0dGVtcHQgdG8gcmVhZCBhIGRhdGEgY2FjaGUg
aXMgbWFkZS4KKyAgICAgICAgICAgIGlmICggZWxlbSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkg
eworCisgICAgICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNo
ZQorICAgICAgICAgICAgICAgIC8vIFRoZSBrZXkgd2lsbCBhbHdheXMgYmUgY2FtZWxDYXNlZCBp
biBEYXRhCisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSwga2V5ICk7
CisgICAgICAgICAgICAgICAgaWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBkYXRhOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIC8vIEF0dGVtcHQgdG8gImRpc2NvdmVyIiB0aGUgZGF0YSBpbgorICAgICAgICAgICAgICAg
IC8vIEhUTUw1IGN1c3RvbSBkYXRhLSogYXR0cnMKKyAgICAgICAgICAgICAgICBkYXRhID0gZGF0
YUF0dHIoIGVsZW0sIGtleSApOworICAgICAgICAgICAgICAgIGlmICggZGF0YSAhPT0gdW5kZWZp
bmVkICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAvLyBXZSB0cmllZCByZWFsbHkgaGFyZCwgYnV0IHRoZSBk
YXRhIGRvZXNuJ3QgZXhpc3QuCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBTZXQgdGhlIGRhdGEuLi4KKyAgICAgICAgICAgIHRoaXMuZWFj
aCggZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgICAgICAvLyBXZSBhbHdheXMgc3RvcmUgdGhl
IGNhbWVsQ2FzZWQga2V5CisgICAgICAgICAgICAgICAgZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXks
IHZhbHVlICk7CisgICAgICAgICAgICB9ICk7CisgICAgICAgIH0sIG51bGwsIHZhbHVlLCBhcmd1
bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgdHJ1ZSApOworICAgIH0sCisKKyAgICByZW1vdmVEYXRh
OiBmdW5jdGlvbigga2V5ICkgeworICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgIGRhdGFVc2VyLnJlbW92ZSggdGhpcywga2V5ICk7CisgICAgICAgIH0g
KTsKKyAgICB9Cit9ICk7CisKKworalF1ZXJ5LmV4dGVuZCggeworICAgIHF1ZXVlOiBmdW5jdGlv
biggZWxlbSwgdHlwZSwgZGF0YSApIHsKKyAgICAgICAgdmFyIHF1ZXVlOworCisgICAgICAgIGlm
ICggZWxlbSApIHsKKyAgICAgICAgICAgIHR5cGUgPSAoIHR5cGUgfHwgImZ4IiApICsgInF1ZXVl
IjsKKyAgICAgICAgICAgIHF1ZXVlID0gZGF0YVByaXYuZ2V0KCBlbGVtLCB0eXBlICk7CisKKyAg
ICAgICAgICAgIC8vIFNwZWVkIHVwIGRlcXVldWUgYnkgZ2V0dGluZyBvdXQgcXVpY2tseSBpZiB0
aGlzIGlzIGp1c3QgYSBsb29rdXAKKyAgICAgICAgICAgIGlmICggZGF0YSApIHsKKyAgICAgICAg
ICAgICAgICBpZiAoICFxdWV1ZSB8fCBqUXVlcnkuaXNBcnJheSggZGF0YSApICkgeworICAgICAg
ICAgICAgICAgICAgICBxdWV1ZSA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgdHlwZSwgalF1ZXJ5
Lm1ha2VBcnJheSggZGF0YSApICk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgcXVldWUucHVzaCggZGF0YSApOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBxdWV1ZSB8fCBbXTsKKyAgICAgICAgfQorICAg
IH0sCisKKyAgICBkZXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHsKKyAgICAgICAgdHlw
ZSA9IHR5cGUgfHwgImZ4IjsKKworICAgICAgICB2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIGVs
ZW0sIHR5cGUgKSwKKyAgICAgICAgICAgIHN0YXJ0TGVuZ3RoID0gcXVldWUubGVuZ3RoLAorICAg
ICAgICAgICAgZm4gPSBxdWV1ZS5zaGlmdCgpLAorICAgICAgICAgICAgaG9va3MgPSBqUXVlcnku
X3F1ZXVlSG9va3MoIGVsZW0sIHR5cGUgKSwKKyAgICAgICAgICAgIG5leHQgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApOworICAgICAg
ICAgICAgfTsKKworICAgICAgICAvLyBJZiB0aGUgZnggcXVldWUgaXMgZGVxdWV1ZWQsIGFsd2F5
cyByZW1vdmUgdGhlIHByb2dyZXNzIHNlbnRpbmVsCisgICAgICAgIGlmICggZm4gPT09ICJpbnBy
b2dyZXNzIiApIHsKKyAgICAgICAgICAgIGZuID0gcXVldWUuc2hpZnQoKTsKKyAgICAgICAgICAg
IHN0YXJ0TGVuZ3RoLS07CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGZuICkgeworCisgICAg
ICAgICAgICAvLyBBZGQgYSBwcm9ncmVzcyBzZW50aW5lbCB0byBwcmV2ZW50IHRoZSBmeCBxdWV1
ZSBmcm9tIGJlaW5nCisgICAgICAgICAgICAvLyBhdXRvbWF0aWNhbGx5IGRlcXVldWVkCisgICAg
ICAgICAgICBpZiAoIHR5cGUgPT09ICJmeCIgKSB7CisgICAgICAgICAgICAgICAgcXVldWUudW5z
aGlmdCggImlucHJvZ3Jlc3MiICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENs
ZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb24KKyAgICAgICAgICAgIGRlbGV0ZSBo
b29rcy5zdG9wOworICAgICAgICAgICAgZm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICggIXN0YXJ0TGVuZ3RoICYmIGhvb2tzICkgeworICAgICAg
ICAgICAgaG9va3MuZW1wdHkuZmlyZSgpOworICAgICAgICB9CisgICAgfSwKKworICAgIC8vIE5v
dCBwdWJsaWMgLSBnZW5lcmF0ZSBhIHF1ZXVlSG9va3Mgb2JqZWN0LCBvciByZXR1cm4gdGhlIGN1
cnJlbnQgb25lCisgICAgX3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkgeworICAg
ICAgICB2YXIga2V5ID0gdHlwZSArICJxdWV1ZUhvb2tzIjsKKyAgICAgICAgcmV0dXJuIGRhdGFQ
cml2LmdldCggZWxlbSwga2V5ICkgfHwgZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBrZXksIHsKKyAg
ICAgICAgICAgIGVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCAib25jZSBtZW1vcnkiICkuYWRkKCBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFsgdHlw
ZSArICJxdWV1ZSIsIGtleSBdICk7CisgICAgICAgICAgICB9ICkKKyAgICAgICAgfSApOworICAg
IH0KK30gKTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworICAgIHF1ZXVlOiBmdW5jdGlvbiggdHlw
ZSwgZGF0YSApIHsKKyAgICAgICAgdmFyIHNldHRlciA9IDI7CisKKyAgICAgICAgaWYgKCB0eXBl
b2YgdHlwZSAhPT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICBkYXRhID0gdHlwZTsKKyAgICAg
ICAgICAgIHR5cGUgPSAiZngiOworICAgICAgICAgICAgc2V0dGVyLS07CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7CisgICAgICAgICAgICBy
ZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWyAwIF0sIHR5cGUgKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgPworICAgICAgICAgICAgdGhpcyA6CisgICAg
ICAgICAgICB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBxdWV1
ZSA9IGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgZGF0YSApOworCisgICAgICAgICAgICAgICAg
Ly8gRW5zdXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWUKKyAgICAgICAgICAgICAgICBqUXVlcnku
X3F1ZXVlSG9va3MoIHRoaXMsIHR5cGUgKTsKKworICAgICAgICAgICAgICAgIGlmICggdHlwZSA9
PT0gImZ4IiAmJiBxdWV1ZVsgMCBdICE9PSAiaW5wcm9ncmVzcyIgKSB7CisgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfSApOworICAgIH0sCisgICAgZGVxdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7
CisgICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgalF1
ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTsKKyAgICAgICAgfSApOworICAgIH0sCisgICAgY2xl
YXJRdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7CisgICAgICAgIHJldHVybiB0aGlzLnF1ZXVlKCB0
eXBlIHx8ICJmeCIsIFtdICk7CisgICAgfSwKKworICAgIC8vIEdldCBhIHByb21pc2UgcmVzb2x2
ZWQgd2hlbiBxdWV1ZXMgb2YgYSBjZXJ0YWluIHR5cGUKKyAgICAvLyBhcmUgZW1wdGllZCAoZngg
aXMgdGhlIHR5cGUgYnkgZGVmYXVsdCkKKyAgICBwcm9taXNlOiBmdW5jdGlvbiggdHlwZSwgb2Jq
ICkgeworICAgICAgICB2YXIgdG1wLAorICAgICAgICAgICAgY291bnQgPSAxLAorICAgICAgICAg
ICAgZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSwKKyAgICAgICAgICAgIGVsZW1lbnRzID0gdGhp
cywKKyAgICAgICAgICAgIGkgPSB0aGlzLmxlbmd0aCwKKyAgICAgICAgICAgIHJlc29sdmUgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoICEoIC0tY291bnQgKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0g
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworCisgICAgICAgIGlmICggdHlw
ZW9mIHR5cGUgIT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgb2JqID0gdHlwZTsKKyAgICAg
ICAgICAgIHR5cGUgPSB1bmRlZmluZWQ7CisgICAgICAgIH0KKyAgICAgICAgdHlwZSA9IHR5cGUg
fHwgImZ4IjsKKworICAgICAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgICAgIHRtcCA9IGRh
dGFQcml2LmdldCggZWxlbWVudHNbIGkgXSwgdHlwZSArICJxdWV1ZUhvb2tzIiApOworICAgICAg
ICAgICAgaWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkgeworICAgICAgICAgICAgICAgIGNvdW50Kys7
CisgICAgICAgICAgICAgICAgdG1wLmVtcHR5LmFkZCggcmVzb2x2ZSApOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHJlc29sdmUoKTsKKyAgICAgICAgcmV0dXJuIGRlZmVyLnBy
b21pc2UoIG9iaiApOworICAgIH0KK30gKTsKK3ZhciBwbnVtID0gKCAvWystXT8oPzpcZCpcLnwp
XGQrKD86W2VFXVsrLV0/XGQrfCkvICkuc291cmNlOworCit2YXIgcmNzc051bSA9IG5ldyBSZWdF
eHAoICJeKD86KFsrLV0pPXwpKCIgKyBwbnVtICsgIikoW2EteiVdKikkIiwgImkiICk7CisKKwor
dmFyIGNzc0V4cGFuZCA9IFsgIlRvcCIsICJSaWdodCIsICJCb3R0b20iLCAiTGVmdCIgXTsKKwor
dmFyIGlzSGlkZGVuV2l0aGluVHJlZSA9IGZ1bmN0aW9uKCBlbGVtLCBlbCApIHsKKworICAgICAg
ICAvLyBpc0hpZGRlbldpdGhpblRyZWUgbWlnaHQgYmUgY2FsbGVkIGZyb20galF1ZXJ5I2ZpbHRl
ciBmdW5jdGlvbjsKKyAgICAgICAgLy8gaW4gdGhhdCBjYXNlLCBlbGVtZW50IHdpbGwgYmUgc2Vj
b25kIGFyZ3VtZW50CisgICAgICAgIGVsZW0gPSBlbCB8fCBlbGVtOworCisgICAgICAgIC8vIElu
bGluZSBzdHlsZSB0cnVtcHMgYWxsCisgICAgICAgIHJldHVybiBlbGVtLnN0eWxlLmRpc3BsYXkg
PT09ICJub25lIiB8fAorICAgICAgICAgICAgZWxlbS5zdHlsZS5kaXNwbGF5ID09PSAiIiAmJgor
CisgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGNoZWNrIGNvbXB1dGVkIHN0eWxlCisgICAgICAg
ICAgICAvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDMgLSA0NQorICAgICAgICAgICAgLy8gRGlzY29u
bmVjdGVkIGVsZW1lbnRzIGNhbiBoYXZlIGNvbXB1dGVkIGRpc3BsYXk6IG5vbmUsIHNvIGZpcnN0
IGNvbmZpcm0gdGhhdCBlbGVtIGlzCisgICAgICAgICAgICAvLyBpbiB0aGUgZG9jdW1lbnQuCisg
ICAgICAgICAgICBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApICYm
CisKKyAgICAgICAgICAgIGpRdWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApID09PSAibm9uZSI7
CisgICAgfTsKKwordmFyIHN3YXAgPSBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgY2FsbGJhY2ss
IGFyZ3MgKSB7CisgICAgdmFyIHJldCwgbmFtZSwKKyAgICAgICAgb2xkID0ge307CisKKyAgICAv
LyBSZW1lbWJlciB0aGUgb2xkIHZhbHVlcywgYW5kIGluc2VydCB0aGUgbmV3IG9uZXMKKyAgICBm
b3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7CisgICAgICAgIG9sZFsgbmFtZSBdID0gZWxlbS5zdHls
ZVsgbmFtZSBdOworICAgICAgICBlbGVtLnN0eWxlWyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07
CisgICAgfQorCisgICAgcmV0ID0gY2FsbGJhY2suYXBwbHkoIGVsZW0sIGFyZ3MgfHwgW10gKTsK
KworICAgIC8vIFJldmVydCB0aGUgb2xkIHZhbHVlcworICAgIGZvciAoIG5hbWUgaW4gb3B0aW9u
cyApIHsKKyAgICAgICAgZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07CisgICAgfQor
CisgICAgcmV0dXJuIHJldDsKK307CisKKworCisKK2Z1bmN0aW9uIGFkanVzdENTUyggZWxlbSwg
cHJvcCwgdmFsdWVQYXJ0cywgdHdlZW4gKSB7CisgICAgdmFyIGFkanVzdGVkLAorICAgICAgICBz
Y2FsZSA9IDEsCisgICAgICAgIG1heEl0ZXJhdGlvbnMgPSAyMCwKKyAgICAgICAgY3VycmVudFZh
bHVlID0gdHdlZW4gPworICAgICAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHR3ZWVuLmN1cigpOworICAgICAgICAgICAgfSA6CisgICAgICAgICAgICBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgcHJvcCwgIiIg
KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgIGluaXRpYWwgPSBjdXJyZW50VmFsdWUoKSwKKyAg
ICAgICAgdW5pdCA9IHZhbHVlUGFydHMgJiYgdmFsdWVQYXJ0c1sgMyBdIHx8ICggalF1ZXJ5LmNz
c051bWJlclsgcHJvcCBdID8gIiIgOiAicHgiICksCisKKyAgICAgICAgLy8gU3RhcnRpbmcgdmFs
dWUgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgZm9yIHBvdGVudGlhbCB1bml0IG1pc21hdGNoZXMK
KyAgICAgICAgaW5pdGlhbEluVW5pdCA9ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdIHx8IHVu
aXQgIT09ICJweCIgJiYgK2luaXRpYWwgKSAmJgorICAgICAgICAgICAgcmNzc051bS5leGVjKCBq
UXVlcnkuY3NzKCBlbGVtLCBwcm9wICkgKTsKKworICAgIGlmICggaW5pdGlhbEluVW5pdCAmJiBp
bml0aWFsSW5Vbml0WyAzIF0gIT09IHVuaXQgKSB7CisKKyAgICAgICAgLy8gVHJ1c3QgdW5pdHMg
cmVwb3J0ZWQgYnkgalF1ZXJ5LmNzcworICAgICAgICB1bml0ID0gdW5pdCB8fCBpbml0aWFsSW5V
bml0WyAzIF07CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHdlIHVwZGF0ZSB0aGUgdHdlZW4gcHJv
cGVydGllcyBsYXRlciBvbgorICAgICAgICB2YWx1ZVBhcnRzID0gdmFsdWVQYXJ0cyB8fCBbXTsK
KworICAgICAgICAvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBmcm9tIGEgbm9uemVybyBzdGFy
dGluZyBwb2ludAorICAgICAgICBpbml0aWFsSW5Vbml0ID0gK2luaXRpYWwgfHwgMTsKKworICAg
ICAgICBkbyB7CisKKyAgICAgICAgICAgIC8vIElmIHByZXZpb3VzIGl0ZXJhdGlvbiB6ZXJvZWQg
b3V0LCBkb3VibGUgdW50aWwgd2UgZ2V0ICpzb21ldGhpbmcqLgorICAgICAgICAgICAgLy8gVXNl
IHN0cmluZyBmb3IgZG91Ymxpbmcgc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHNlZSBzY2FsZSBh
cyB1bmNoYW5nZWQgYmVsb3cKKyAgICAgICAgICAgIHNjYWxlID0gc2NhbGUgfHwgIi41IjsKKwor
ICAgICAgICAgICAgLy8gQWRqdXN0IGFuZCBhcHBseQorICAgICAgICAgICAgaW5pdGlhbEluVW5p
dCA9IGluaXRpYWxJblVuaXQgLyBzY2FsZTsKKyAgICAgICAgICAgIGpRdWVyeS5zdHlsZSggZWxl
bSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTsKKworICAgICAgICAvLyBVcGRhdGUgc2Nh
bGUsIHRvbGVyYXRpbmcgemVybyBvciBOYU4gZnJvbSB0d2Vlbi5jdXIoKQorICAgICAgICAvLyBC
cmVhayB0aGUgbG9vcCBpZiBzY2FsZSBpcyB1bmNoYW5nZWQgb3IgcGVyZmVjdCwgb3IgaWYgd2Un
dmUganVzdCBoYWQgZW5vdWdoLgorICAgICAgICB9IHdoaWxlICgKKyAgICAgICAgICAgIHNjYWxl
ICE9PSAoIHNjYWxlID0gY3VycmVudFZhbHVlKCkgLyBpbml0aWFsICkgJiYgc2NhbGUgIT09IDEg
JiYgLS1tYXhJdGVyYXRpb25zCisgICAgICAgICk7CisgICAgfQorCisgICAgaWYgKCB2YWx1ZVBh
cnRzICkgeworICAgICAgICBpbml0aWFsSW5Vbml0ID0gK2luaXRpYWxJblVuaXQgfHwgK2luaXRp
YWwgfHwgMDsKKworICAgICAgICAvLyBBcHBseSByZWxhdGl2ZSBvZmZzZXQgKCs9Ly09KSBpZiBz
cGVjaWZpZWQKKyAgICAgICAgYWRqdXN0ZWQgPSB2YWx1ZVBhcnRzWyAxIF0gPworICAgICAgICAg
ICAgaW5pdGlhbEluVW5pdCArICggdmFsdWVQYXJ0c1sgMSBdICsgMSApICogdmFsdWVQYXJ0c1sg
MiBdIDoKKyAgICAgICAgICAgICt2YWx1ZVBhcnRzWyAyIF07CisgICAgICAgIGlmICggdHdlZW4g
KSB7CisgICAgICAgICAgICB0d2Vlbi51bml0ID0gdW5pdDsKKyAgICAgICAgICAgIHR3ZWVuLnN0
YXJ0ID0gaW5pdGlhbEluVW5pdDsKKyAgICAgICAgICAgIHR3ZWVuLmVuZCA9IGFkanVzdGVkOwor
ICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBhZGp1c3RlZDsKK30KKworCit2YXIgZGVmYXVs
dERpc3BsYXlNYXAgPSB7fTsKKworZnVuY3Rpb24gZ2V0RGVmYXVsdERpc3BsYXkoIGVsZW0gKSB7
CisgICAgdmFyIHRlbXAsCisgICAgICAgIGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudCwKKyAgICAg
ICAgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLAorICAgICAgICBkaXNwbGF5ID0gZGVmYXVsdERp
c3BsYXlNYXBbIG5vZGVOYW1lIF07CisKKyAgICBpZiAoIGRpc3BsYXkgKSB7CisgICAgICAgIHJl
dHVybiBkaXNwbGF5OworICAgIH0KKworICAgIHRlbXAgPSBkb2MuYm9keS5hcHBlbmRDaGlsZCgg
ZG9jLmNyZWF0ZUVsZW1lbnQoIG5vZGVOYW1lICkgKTsKKyAgICBkaXNwbGF5ID0galF1ZXJ5LmNz
cyggdGVtcCwgImRpc3BsYXkiICk7CisKKyAgICB0ZW1wLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo
IHRlbXAgKTsKKworICAgIGlmICggZGlzcGxheSA9PT0gIm5vbmUiICkgeworICAgICAgICBkaXNw
bGF5ID0gImJsb2NrIjsKKyAgICB9CisgICAgZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF0g
PSBkaXNwbGF5OworCisgICAgcmV0dXJuIGRpc3BsYXk7Cit9CisKK2Z1bmN0aW9uIHNob3dIaWRl
KCBlbGVtZW50cywgc2hvdyApIHsKKyAgICB2YXIgZGlzcGxheSwgZWxlbSwKKyAgICAgICAgdmFs
dWVzID0gW10sCisgICAgICAgIGluZGV4ID0gMCwKKyAgICAgICAgbGVuZ3RoID0gZWxlbWVudHMu
bGVuZ3RoOworCisgICAgLy8gRGV0ZXJtaW5lIG5ldyBkaXNwbGF5IHZhbHVlIGZvciBlbGVtZW50
cyB0aGF0IG5lZWQgdG8gY2hhbmdlCisgICAgZm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgr
KyApIHsKKyAgICAgICAgZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdOworICAgICAgICBpZiAoICFl
bGVtLnN0eWxlICkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAg
ICBkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5OworICAgICAgICBpZiAoIHNob3cgKSB7CisK
KyAgICAgICAgICAgIC8vIFNpbmNlIHdlIGZvcmNlIHZpc2liaWxpdHkgdXBvbiBjYXNjYWRlLWhp
ZGRlbiBlbGVtZW50cywgYW4gaW1tZWRpYXRlIChhbmQgc2xvdykKKyAgICAgICAgICAgIC8vIGNo
ZWNrIGlzIHJlcXVpcmVkIGluIHRoaXMgZmlyc3QgbG9vcCB1bmxlc3Mgd2UgaGF2ZSBhIG5vbmVt
cHR5IGRpc3BsYXkgdmFsdWUgKGVpdGhlcgorICAgICAgICAgICAgLy8gaW5saW5lIG9yIGFib3V0
LXRvLWJlLXJlc3RvcmVkKQorICAgICAgICAgICAgaWYgKCBkaXNwbGF5ID09PSAibm9uZSIgKSB7
CisgICAgICAgICAgICAgICAgdmFsdWVzWyBpbmRleCBdID0gZGF0YVByaXYuZ2V0KCBlbGVtLCAi
ZGlzcGxheSIgKSB8fCBudWxsOworICAgICAgICAgICAgICAgIGlmICggIXZhbHVlc1sgaW5kZXgg
XSApIHsKKyAgICAgICAgICAgICAgICAgICAgZWxlbS5zdHlsZS5kaXNwbGF5ID0gIiI7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCBlbGVtLnN0eWxl
LmRpc3BsYXkgPT09ICIiICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApICkgeworICAgICAg
ICAgICAgICAgIHZhbHVlc1sgaW5kZXggXSA9IGdldERlZmF1bHREaXNwbGF5KCBlbGVtICk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIGRpc3BsYXkg
IT09ICJub25lIiApIHsKKyAgICAgICAgICAgICAgICB2YWx1ZXNbIGluZGV4IF0gPSAibm9uZSI7
CisKKyAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciB3aGF0IHdlJ3JlIG92ZXJ3cml0aW5nCisg
ICAgICAgICAgICAgICAgZGF0YVByaXYuc2V0KCBlbGVtLCAiZGlzcGxheSIsIGRpc3BsYXkgKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFNldCB0aGUgZGlzcGxh
eSBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcCB0byBhdm9pZCBjb25zdGFudCByZWZs
b3cKKyAgICBmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkgeworICAg
ICAgICBpZiAoIHZhbHVlc1sgaW5kZXggXSAhPSBudWxsICkgeworICAgICAgICAgICAgZWxlbWVu
dHNbIGluZGV4IF0uc3R5bGUuZGlzcGxheSA9IHZhbHVlc1sgaW5kZXggXTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBlbGVtZW50czsKK30KKworalF1ZXJ5LmZuLmV4dGVuZCggewor
ICAgIHNob3c6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gc2hvd0hpZGUoIHRoaXMsIHRy
dWUgKTsKKyAgICB9LAorICAgIGhpZGU6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gc2hv
d0hpZGUoIHRoaXMgKTsKKyAgICB9LAorICAgIHRvZ2dsZTogZnVuY3Rpb24oIHN0YXRlICkgewor
ICAgICAgICBpZiAoIHR5cGVvZiBzdGF0ZSA9PT0gImJvb2xlYW4iICkgeworICAgICAgICAgICAg
cmV0dXJuIHN0YXRlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaWYgKCBp
c0hpZGRlbldpdGhpblRyZWUoIHRoaXMgKSApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkoIHRo
aXMgKS5zaG93KCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGpRdWVy
eSggdGhpcyApLmhpZGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOworICAgIH0KK30g
KTsKK3ZhciByY2hlY2thYmxlVHlwZSA9ICggL14oPzpjaGVja2JveHxyYWRpbykkL2kgKTsKKwor
dmFyIHJ0YWdOYW1lID0gKCAvPChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKykvaSApOworCit2
YXIgcnNjcmlwdFR5cGUgPSAoIC9eJHxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSApOworCisKKwor
Ly8gV2UgaGF2ZSB0byBjbG9zZSB0aGVzZSB0YWdzIHRvIHN1cHBvcnQgWEhUTUwgKCMxMzIwMCkK
K3ZhciB3cmFwTWFwID0geworCisgICAgLy8gU3VwcG9ydDogSUUgPD05IG9ubHkKKyAgICBvcHRp
b246IFsgMSwgIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCAiPC9zZWxlY3Q+IiBdLAor
CisgICAgLy8gWEhUTUwgcGFyc2VycyBkbyBub3QgbWFnaWNhbGx5IGluc2VydCBlbGVtZW50cyBp
biB0aGUKKyAgICAvLyBzYW1lIHdheSB0aGF0IHRhZyBzb3VwIHBhcnNlcnMgZG8uIFNvIHdlIGNh
bm5vdCBzaG9ydGVuCisgICAgLy8gdGhpcyBieSBvbWl0dGluZyA8dGJvZHk+IG9yIG90aGVyIHJl
cXVpcmVkIGVsZW1lbnRzLgorICAgIHRoZWFkOiBbIDEsICI8dGFibGU+IiwgIjwvdGFibGU+IiBd
LAorICAgIGNvbDogWyAyLCAiPHRhYmxlPjxjb2xncm91cD4iLCAiPC9jb2xncm91cD48L3RhYmxl
PiIgXSwKKyAgICB0cjogWyAyLCAiPHRhYmxlPjx0Ym9keT4iLCAiPC90Ym9keT48L3RhYmxlPiIg
XSwKKyAgICB0ZDogWyAzLCAiPHRhYmxlPjx0Ym9keT48dHI+IiwgIjwvdHI+PC90Ym9keT48L3Rh
YmxlPiIgXSwKKworICAgIF9kZWZhdWx0OiBbIDAsICIiLCAiIiBdCit9OworCisvLyBTdXBwb3J0
OiBJRSA8PTkgb25seQord3JhcE1hcC5vcHRncm91cCA9IHdyYXBNYXAub3B0aW9uOworCit3cmFw
TWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9IHdyYXBNYXAuY29sZ3JvdXAgPSB3cmFwTWFwLmNh
cHRpb24gPSB3cmFwTWFwLnRoZWFkOword3JhcE1hcC50aCA9IHdyYXBNYXAudGQ7CisKKworZnVu
Y3Rpb24gZ2V0QWxsKCBjb250ZXh0LCB0YWcgKSB7CisKKyAgICAvLyBTdXBwb3J0OiBJRSA8PTkg
LSAxMSBvbmx5CisgICAgLy8gVXNlIHR5cGVvZiB0byBhdm9pZCB6ZXJvLWFyZ3VtZW50IG1ldGhv
ZCBpbnZvY2F0aW9uIG9uIGhvc3Qgb2JqZWN0cyAoIzE1MTUxKQorICAgIHZhciByZXQ7CisKKyAg
ICBpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSAidW5kZWZpbmVk
IiApIHsKKyAgICAgICAgcmV0ID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnIHx8
ICIqIiApOworCisgICAgfSBlbHNlIGlmICggdHlwZW9mIGNvbnRleHQucXVlcnlTZWxlY3RvckFs
bCAhPT0gInVuZGVmaW5lZCIgKSB7CisgICAgICAgIHJldCA9IGNvbnRleHQucXVlcnlTZWxlY3Rv
ckFsbCggdGFnIHx8ICIqIiApOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0ID0gW107Cisg
ICAgfQorCisgICAgaWYgKCB0YWcgPT09IHVuZGVmaW5lZCB8fCB0YWcgJiYgalF1ZXJ5Lm5vZGVO
YW1lKCBjb250ZXh0LCB0YWcgKSApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5tZXJnZSggWyBj
b250ZXh0IF0sIHJldCApOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKKworLy8gTWFy
ayBzY3JpcHRzIGFzIGhhdmluZyBhbHJlYWR5IGJlZW4gZXZhbHVhdGVkCitmdW5jdGlvbiBzZXRH
bG9iYWxFdmFsKCBlbGVtcywgcmVmRWxlbWVudHMgKSB7CisgICAgdmFyIGkgPSAwLAorICAgICAg
ICBsID0gZWxlbXMubGVuZ3RoOworCisgICAgZm9yICggOyBpIDwgbDsgaSsrICkgeworICAgICAg
ICBkYXRhUHJpdi5zZXQoCisgICAgICAgICAgICBlbGVtc1sgaSBdLAorICAgICAgICAgICAgImds
b2JhbEV2YWwiLAorICAgICAgICAgICAgIXJlZkVsZW1lbnRzIHx8IGRhdGFQcml2LmdldCggcmVm
RWxlbWVudHNbIGkgXSwgImdsb2JhbEV2YWwiICkKKyAgICAgICAgKTsKKyAgICB9Cit9CisKKwor
dmFyIHJodG1sID0gLzx8JiM/XHcrOy87CisKK2Z1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoIGVsZW1z
LCBjb250ZXh0LCBzY3JpcHRzLCBzZWxlY3Rpb24sIGlnbm9yZWQgKSB7CisgICAgdmFyIGVsZW0s
IHRtcCwgdGFnLCB3cmFwLCBjb250YWlucywgaiwKKyAgICAgICAgZnJhZ21lbnQgPSBjb250ZXh0
LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwKKyAgICAgICAgbm9kZXMgPSBbXSwKKyAgICAgICAg
aSA9IDAsCisgICAgICAgIGwgPSBlbGVtcy5sZW5ndGg7CisKKyAgICBmb3IgKCA7IGkgPCBsOyBp
KysgKSB7CisgICAgICAgIGVsZW0gPSBlbGVtc1sgaSBdOworCisgICAgICAgIGlmICggZWxlbSB8
fCBlbGVtID09PSAwICkgeworCisgICAgICAgICAgICAvLyBBZGQgbm9kZXMgZGlyZWN0bHkKKyAg
ICAgICAgICAgIGlmICggalF1ZXJ5LnR5cGUoIGVsZW0gKSA9PT0gIm9iamVjdCIgKSB7CisKKyAg
ICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAx
IG9ubHkKKyAgICAgICAgICAgICAgICAvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dz
IG9uIGFuY2llbnQgV2ViS2l0CisgICAgICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCBub2Rlcywg
ZWxlbS5ub2RlVHlwZSA/IFsgZWxlbSBdIDogZWxlbSApOworCisgICAgICAgICAgICAvLyBDb252
ZXJ0IG5vbi1odG1sIGludG8gYSB0ZXh0IG5vZGUKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoICFy
aHRtbC50ZXN0KCBlbGVtICkgKSB7CisgICAgICAgICAgICAgICAgbm9kZXMucHVzaCggY29udGV4
dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApICk7CisKKyAgICAgICAgICAgIC8vIENvbnZlcnQgaHRt
bCBpbnRvIERPTSBub2RlcworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0
bXAgPSB0bXAgfHwgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGNvbnRleHQuY3JlYXRlRWxlbWVudCgg
ImRpdiIgKSApOworCisgICAgICAgICAgICAgICAgLy8gRGVzZXJpYWxpemUgYSBzdGFuZGFyZCBy
ZXByZXNlbnRhdGlvbgorICAgICAgICAgICAgICAgIHRhZyA9ICggcnRhZ05hbWUuZXhlYyggZWxl
bSApIHx8IFsgIiIsICIiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICAgICAg
d3JhcCA9IHdyYXBNYXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1bHQ7CisgICAgICAgICAgICAg
ICAgdG1wLmlubmVySFRNTCA9IHdyYXBbIDEgXSArIGpRdWVyeS5odG1sUHJlZmlsdGVyKCBlbGVt
ICkgKyB3cmFwWyAyIF07CisKKyAgICAgICAgICAgICAgICAvLyBEZXNjZW5kIHRocm91Z2ggd3Jh
cHBlcnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnQKKyAgICAgICAgICAgICAgICBqID0gd3JhcFsgMCBd
OworICAgICAgICAgICAgICAgIHdoaWxlICggai0tICkgeworICAgICAgICAgICAgICAgICAgICB0
bXAgPSB0bXAubGFzdENoaWxkOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seQorICAgICAg
ICAgICAgICAgIC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBX
ZWJLaXQKKyAgICAgICAgICAgICAgICBqUXVlcnkubWVyZ2UoIG5vZGVzLCB0bXAuY2hpbGROb2Rl
cyApOworCisgICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhlIHRvcC1sZXZlbCBjb250YWlu
ZXIKKyAgICAgICAgICAgICAgICB0bXAgPSBmcmFnbWVudC5maXJzdENoaWxkOworCisgICAgICAg
ICAgICAgICAgLy8gRW5zdXJlIHRoZSBjcmVhdGVkIG5vZGVzIGFyZSBvcnBoYW5lZCAoIzEyMzky
KQorICAgICAgICAgICAgICAgIHRtcC50ZXh0Q29udGVudCA9ICIiOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmVtb3ZlIHdyYXBwZXIgZnJvbSBmcmFnbWVudAor
ICAgIGZyYWdtZW50LnRleHRDb250ZW50ID0gIiI7CisKKyAgICBpID0gMDsKKyAgICB3aGlsZSAo
ICggZWxlbSA9IG5vZGVzWyBpKysgXSApICkgeworCisgICAgICAgIC8vIFNraXAgZWxlbWVudHMg
YWxyZWFkeSBpbiB0aGUgY29udGV4dCBjb2xsZWN0aW9uICh0cmFjLTQwODcpCisgICAgICAgIGlm
ICggc2VsZWN0aW9uICYmIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBzZWxlY3Rpb24gKSA+IC0xICkg
eworICAgICAgICAgICAgaWYgKCBpZ25vcmVkICkgeworICAgICAgICAgICAgICAgIGlnbm9yZWQu
cHVzaCggZWxlbSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICBjb250YWlucyA9IGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRv
Y3VtZW50LCBlbGVtICk7CisKKyAgICAgICAgLy8gQXBwZW5kIHRvIGZyYWdtZW50CisgICAgICAg
IHRtcCA9IGdldEFsbCggZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGVsZW0gKSwgInNjcmlwdCIgKTsK
KworICAgICAgICAvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5CisgICAgICAg
IGlmICggY29udGFpbnMgKSB7CisgICAgICAgICAgICBzZXRHbG9iYWxFdmFsKCB0bXAgKTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIENhcHR1cmUgZXhlY3V0YWJsZXMKKyAgICAgICAgaWYgKCBz
Y3JpcHRzICkgeworICAgICAgICAgICAgaiA9IDA7CisgICAgICAgICAgICB3aGlsZSAoICggZWxl
bSA9IHRtcFsgaisrIF0gKSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHJzY3JpcHRUeXBlLnRl
c3QoIGVsZW0udHlwZSB8fCAiIiApICkgeworICAgICAgICAgICAgICAgICAgICBzY3JpcHRzLnB1
c2goIGVsZW0gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gZnJhZ21lbnQ7Cit9CisKKworKCBmdW5jdGlvbigpIHsKKyAg
ICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksCisgICAg
ICAgIGRpdiA9IGZyYWdtZW50LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAi
ZGl2IiApICksCisgICAgICAgIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImlucHV0
IiApOworCisgICAgLy8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seQorICAgIC8vIENo
ZWNrIHN0YXRlIGxvc3QgaWYgdGhlIG5hbWUgaXMgc2V0ICgjMTEyMTcpCisgICAgLy8gU3VwcG9y
dDogV2luZG93cyBXZWIgQXBwcyAoV1dBKQorICAgIC8vIGBuYW1lYCBhbmQgYHR5cGVgIG11c3Qg
dXNlIC5zZXRBdHRyaWJ1dGUgZm9yIFdXQSAoIzE0OTAxKQorICAgIGlucHV0LnNldEF0dHJpYnV0
ZSggInR5cGUiLCAicmFkaW8iICk7CisgICAgaW5wdXQuc2V0QXR0cmlidXRlKCAiY2hlY2tlZCIs
ICJjaGVja2VkIiApOworICAgIGlucHV0LnNldEF0dHJpYnV0ZSggIm5hbWUiLCAidCIgKTsKKwor
ICAgIGRpdi5hcHBlbmRDaGlsZCggaW5wdXQgKTsKKworICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQg
PD00LjEgb25seQorICAgIC8vIE9sZGVyIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3Rh
dGUgY29ycmVjdGx5IGluIGZyYWdtZW50cworICAgIHN1cHBvcnQuY2hlY2tDbG9uZSA9IGRpdi5j
bG9uZU5vZGUoIHRydWUgKS5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuY2hlY2tlZDsKKwor
ICAgIC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seQorICAgIC8vIE1ha2Ugc3VyZSB0ZXh0YXJlYSAo
YW5kIGNoZWNrYm94KSBkZWZhdWx0VmFsdWUgaXMgcHJvcGVybHkgY2xvbmVkCisgICAgZGl2Lmlu
bmVySFRNTCA9ICI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+IjsKKyAgICBzdXBwb3J0Lm5vQ2xvbmVD
aGVja2VkID0gISFkaXYuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZTsK
K30gKSgpOwordmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsK
KworCisKK3ZhcgorICAgIHJrZXlFdmVudCA9IC9ea2V5LywKKyAgICBybW91c2VFdmVudCA9IC9e
KD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3ApfGNsaWNrLywKKyAgICBydHlw
ZW5hbWVzcGFjZSA9IC9eKFteLl0qKSg/OlwuKC4rKXwpLzsKKworZnVuY3Rpb24gcmV0dXJuVHJ1
ZSgpIHsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBTdXBwb3J0OiBJRSA8PTkgb25seQorLy8gU2VlICMx
MzM5MyBmb3IgbW9yZSBpbmZvCitmdW5jdGlvbiBzYWZlQWN0aXZlRWxlbWVudCgpIHsKKyAgICB0
cnkgeworICAgICAgICByZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDsKKyAgICB9IGNhdGNo
ICggZXJyICkgeyB9Cit9CisKK2Z1bmN0aW9uIG9uKCBlbGVtLCB0eXBlcywgc2VsZWN0b3IsIGRh
dGEsIGZuLCBvbmUgKSB7CisgICAgdmFyIG9yaWdGbiwgdHlwZTsKKworICAgIC8vIFR5cGVzIGNh
biBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVycworICAgIGlmICggdHlwZW9mIHR5cGVzID09PSAi
b2JqZWN0IiApIHsKKworICAgICAgICAvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEg
KQorICAgICAgICBpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gInN0cmluZyIgKSB7CisKKyAgICAg
ICAgICAgIC8vICggdHlwZXMtT2JqZWN0LCBkYXRhICkKKyAgICAgICAgICAgIGRhdGEgPSBkYXRh
IHx8IHNlbGVjdG9yOworICAgICAgICAgICAgc2VsZWN0b3IgPSB1bmRlZmluZWQ7CisgICAgICAg
IH0KKyAgICAgICAgZm9yICggdHlwZSBpbiB0eXBlcyApIHsKKyAgICAgICAgICAgIG9uKCBlbGVt
LCB0eXBlLCBzZWxlY3RvciwgZGF0YSwgdHlwZXNbIHR5cGUgXSwgb25lICk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGVsZW07CisgICAgfQorCisgICAgaWYgKCBkYXRhID09IG51bGwgJiYg
Zm4gPT0gbnVsbCApIHsKKworICAgICAgICAvLyAoIHR5cGVzLCBmbiApCisgICAgICAgIGZuID0g
c2VsZWN0b3I7CisgICAgICAgIGRhdGEgPSBzZWxlY3RvciA9IHVuZGVmaW5lZDsKKyAgICB9IGVs
c2UgaWYgKCBmbiA9PSBudWxsICkgeworICAgICAgICBpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0g
InN0cmluZyIgKSB7CisKKyAgICAgICAgICAgIC8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApCisg
ICAgICAgICAgICBmbiA9IGRhdGE7CisgICAgICAgICAgICBkYXRhID0gdW5kZWZpbmVkOworICAg
ICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAvLyAoIHR5cGVzLCBkYXRhLCBmbiApCisgICAg
ICAgICAgICBmbiA9IGRhdGE7CisgICAgICAgICAgICBkYXRhID0gc2VsZWN0b3I7CisgICAgICAg
ICAgICBzZWxlY3RvciA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIGZu
ID09PSBmYWxzZSApIHsKKyAgICAgICAgZm4gPSByZXR1cm5GYWxzZTsKKyAgICB9IGVsc2UgaWYg
KCAhZm4gKSB7CisgICAgICAgIHJldHVybiBlbGVtOworICAgIH0KKworICAgIGlmICggb25lID09
PSAxICkgeworICAgICAgICBvcmlnRm4gPSBmbjsKKyAgICAgICAgZm4gPSBmdW5jdGlvbiggZXZl
bnQgKSB7CisKKyAgICAgICAgICAgIC8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVu
dCBjb250YWlucyB0aGUgaW5mbworICAgICAgICAgICAgalF1ZXJ5KCkub2ZmKCBldmVudCApOwor
ICAgICAgICAgICAgcmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7CisgICAg
ICAgIH07CisKKyAgICAgICAgLy8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1
c2luZyBvcmlnRm4KKyAgICAgICAgZm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1
aWQgPSBqUXVlcnkuZ3VpZCsrICk7CisgICAgfQorICAgIHJldHVybiBlbGVtLmVhY2goIGZ1bmN0
aW9uKCkgeworICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRhdGEs
IHNlbGVjdG9yICk7CisgICAgfSApOworfQorCisvKgorICogSGVscGVyIGZ1bmN0aW9ucyBmb3Ig
bWFuYWdpbmcgZXZlbnRzIC0tIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLgorICog
UHJvcHMgdG8gRGVhbiBFZHdhcmRzJyBhZGRFdmVudCBsaWJyYXJ5IGZvciBtYW55IG9mIHRoZSBp
ZGVhcy4KKyAqLworalF1ZXJ5LmV2ZW50ID0geworCisgICAgZ2xvYmFsOiB7fSwKKworICAgIGFk
ZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHsKKwor
ICAgICAgICB2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0bXAsCisgICAgICAgICAgICBl
dmVudHMsIHQsIGhhbmRsZU9iaiwKKyAgICAgICAgICAgIHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBl
LCBuYW1lc3BhY2VzLCBvcmlnVHlwZSwKKyAgICAgICAgICAgIGVsZW1EYXRhID0gZGF0YVByaXYu
Z2V0KCBlbGVtICk7CisKKyAgICAgICAgLy8gRG9uJ3QgYXR0YWNoIGV2ZW50cyB0byBub0RhdGEg
b3IgdGV4dC9jb21tZW50IG5vZGVzIChidXQgYWxsb3cgcGxhaW4gb2JqZWN0cykKKyAgICAgICAg
aWYgKCAhZWxlbURhdGEgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICAvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYW4gb2JqZWN0IG9mIGN1c3RvbSBkYXRhIGluIGxp
ZXUgb2YgdGhlIGhhbmRsZXIKKyAgICAgICAgaWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7CisgICAg
ICAgICAgICBoYW5kbGVPYmpJbiA9IGhhbmRsZXI7CisgICAgICAgICAgICBoYW5kbGVyID0gaGFu
ZGxlT2JqSW4uaGFuZGxlcjsKKyAgICAgICAgICAgIHNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2Vs
ZWN0b3I7CisgICAgICAgIH0KKworICAgICAgICAvLyBFbnN1cmUgdGhhdCBpbnZhbGlkIHNlbGVj
dG9ycyB0aHJvdyBleGNlcHRpb25zIGF0IGF0dGFjaCB0aW1lCisgICAgICAgIC8vIEV2YWx1YXRl
IGFnYWluc3QgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgZWxlbSBpcyBhIG5vbi1lbGVtZW50IG5v
ZGUgKGUuZy4sIGRvY3VtZW50KQorICAgICAgICBpZiAoIHNlbGVjdG9yICkgeworICAgICAgICAg
ICAgalF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBkb2N1bWVudEVsZW1lbnQsIHNlbGVjdG9y
ICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaGFuZGxlciBo
YXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXIKKyAgICAgICAgaWYg
KCAhaGFuZGxlci5ndWlkICkgeworICAgICAgICAgICAgaGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1
aWQrKzsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBz
dHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmlyc3QKKyAgICAgICAg
aWYgKCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHsKKyAgICAgICAgICAgIGV2ZW50
cyA9IGVsZW1EYXRhLmV2ZW50cyA9IHt9OworICAgICAgICB9CisgICAgICAgIGlmICggISggZXZl
bnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgKSApIHsKKyAgICAgICAgICAgIGV2ZW50SGFuZGxl
ID0gZWxlbURhdGEuaGFuZGxlID0gZnVuY3Rpb24oIGUgKSB7CisKKyAgICAgICAgICAgICAgICAv
LyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFu
ZAorICAgICAgICAgICAgICAgIC8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFn
ZSBoYXMgdW5sb2FkZWQKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0g
InVuZGVmaW5lZCIgJiYgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlID8KKyAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmFwcGx5KCBlbGVtLCBhcmd1bWVu
dHMgKSA6IHVuZGVmaW5lZDsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICAv
LyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBhIHNwYWNlCisgICAgICAgIHR5
cGVzID0gKCB0eXBlcyB8fCAiIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyAiIiBdOwor
ICAgICAgICB0ID0gdHlwZXMubGVuZ3RoOworICAgICAgICB3aGlsZSAoIHQtLSApIHsKKyAgICAg
ICAgICAgIHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTsKKyAg
ICAgICAgICAgIHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdOworICAgICAgICAgICAgbmFtZXNw
YWNlcyA9ICggdG1wWyAyIF0gfHwgIiIgKS5zcGxpdCggIi4iICkuc29ydCgpOworCisgICAgICAg
ICAgICAvLyBUaGVyZSAqbXVzdCogYmUgYSB0eXBlLCBubyBhdHRhY2hpbmcgbmFtZXNwYWNlLW9u
bHkgaGFuZGxlcnMKKyAgICAgICAgICAgIGlmICggIXR5cGUgKSB7CisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIElmIGV2ZW50IGNoYW5n
ZXMgaXRzIHR5cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5n
ZWQgdHlwZQorICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBl
IF0gfHwge307CisKKyAgICAgICAgICAgIC8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWlu
ZSBzcGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZQorICAgICAgICAg
ICAgdHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmlu
ZFR5cGUgKSB8fCB0eXBlOworCisgICAgICAgICAgICAvLyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBv
biBuZXdseSByZXNldCB0eXBlCisgICAgICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNw
ZWNpYWxbIHR5cGUgXSB8fCB7fTsKKworICAgICAgICAgICAgLy8gaGFuZGxlT2JqIGlzIHBhc3Nl
ZCB0byBhbGwgZXZlbnQgaGFuZGxlcnMKKyAgICAgICAgICAgIGhhbmRsZU9iaiA9IGpRdWVyeS5l
eHRlbmQoIHsKKyAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLAorICAgICAgICAgICAgICAgIG9y
aWdUeXBlOiBvcmlnVHlwZSwKKyAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLAorICAgICAgICAg
ICAgICAgIGhhbmRsZXI6IGhhbmRsZXIsCisgICAgICAgICAgICAgICAgZ3VpZDogaGFuZGxlci5n
dWlkLAorICAgICAgICAgICAgICAgIHNlbGVjdG9yOiBzZWxlY3RvciwKKyAgICAgICAgICAgICAg
ICBuZWVkc0NvbnRleHQ6IHNlbGVjdG9yICYmIGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4
dC50ZXN0KCBzZWxlY3RvciApLAorICAgICAgICAgICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNl
cy5qb2luKCAiLiIgKQorICAgICAgICAgICAgfSwgaGFuZGxlT2JqSW4gKTsKKworICAgICAgICAg
ICAgLy8gSW5pdCB0aGUgZXZlbnQgaGFuZGxlciBxdWV1ZSBpZiB3ZSdyZSB0aGUgZmlyc3QKKyAg
ICAgICAgICAgIGlmICggISggaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSApICkgeworICAgICAg
ICAgICAgICAgIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gPSBbXTsKKyAgICAgICAgICAgICAg
ICBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50ID0gMDsKKworICAgICAgICAgICAgICAgIC8vIE9ubHkg
dXNlIGFkZEV2ZW50TGlzdGVuZXIgaWYgdGhlIHNwZWNpYWwgZXZlbnRzIGhhbmRsZXIgcmV0dXJu
cyBmYWxzZQorICAgICAgICAgICAgICAgIGlmICggIXNwZWNpYWwuc2V0dXAgfHwKKyAgICAgICAg
ICAgICAgICAgICAgc3BlY2lhbC5zZXR1cC5jYWxsKCBlbGVtLCBkYXRhLCBuYW1lc3BhY2VzLCBl
dmVudEhhbmRsZSApID09PSBmYWxzZSApIHsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIGVs
ZW0uYWRkRXZlbnRMaXN0ZW5lciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uYWRk
RXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUgKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCBz
cGVjaWFsLmFkZCApIHsKKyAgICAgICAgICAgICAgICBzcGVjaWFsLmFkZC5jYWxsKCBlbGVtLCBo
YW5kbGVPYmogKTsKKworICAgICAgICAgICAgICAgIGlmICggIWhhbmRsZU9iai5oYW5kbGVyLmd1
aWQgKSB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iai5oYW5kbGVyLmd1aWQgPSBoYW5k
bGVyLmd1aWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBBZGQgdG8gdGhlIGVsZW1lbnQncyBoYW5kbGVyIGxpc3QsIGRlbGVnYXRlcyBpbiBmcm9u
dAorICAgICAgICAgICAgaWYgKCBzZWxlY3RvciApIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVy
cy5zcGxpY2UoIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQrKywgMCwgaGFuZGxlT2JqICk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGhhbmRsZXJzLnB1c2goIGhhbmRsZU9i
aiApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBLZWVwIHRyYWNrIG9mIHdoaWNo
IGV2ZW50cyBoYXZlIGV2ZXIgYmVlbiB1c2VkLCBmb3IgZXZlbnQgb3B0aW1pemF0aW9uCisgICAg
ICAgICAgICBqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gPSB0cnVlOworICAgICAgICB9CisK
KyAgICB9LAorCisgICAgLy8gRGV0YWNoIGFuIGV2ZW50IG9yIHNldCBvZiBldmVudHMgZnJvbSBh
biBlbGVtZW50CisgICAgcmVtb3ZlOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIHNl
bGVjdG9yLCBtYXBwZWRUeXBlcyApIHsKKworICAgICAgICB2YXIgaiwgb3JpZ0NvdW50LCB0bXAs
CisgICAgICAgICAgICBldmVudHMsIHQsIGhhbmRsZU9iaiwKKyAgICAgICAgICAgIHNwZWNpYWws
IGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSwKKyAgICAgICAgICAgIGVsZW1E
YXRhID0gZGF0YVByaXYuaGFzRGF0YSggZWxlbSApICYmIGRhdGFQcml2LmdldCggZWxlbSApOwor
CisgICAgICAgIGlmICggIWVsZW1EYXRhIHx8ICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyAp
ICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gT25jZSBm
b3IgZWFjaCB0eXBlLm5hbWVzcGFjZSBpbiB0eXBlczsgdHlwZSBtYXkgYmUgb21pdHRlZAorICAg
ICAgICB0eXBlcyA9ICggdHlwZXMgfHwgIiIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsg
IiIgXTsKKyAgICAgICAgdCA9IHR5cGVzLmxlbmd0aDsKKyAgICAgICAgd2hpbGUgKCB0LS0gKSB7
CisgICAgICAgICAgICB0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwg
W107CisgICAgICAgICAgICB0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTsKKyAgICAgICAgICAg
IG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8ICIiICkuc3BsaXQoICIuIiApLnNvcnQoKTsKKwor
ICAgICAgICAgICAgLy8gVW5iaW5kIGFsbCBldmVudHMgKG9uIHRoaXMgbmFtZXNwYWNlLCBpZiBw
cm92aWRlZCkgZm9yIHRoZSBlbGVtZW50CisgICAgICAgICAgICBpZiAoICF0eXBlICkgeworICAg
ICAgICAgICAgICAgIGZvciAoIHR5cGUgaW4gZXZlbnRzICkgeworICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICsgdHlwZXNbIHQgXSwgaGFuZGxlciwg
c2VsZWN0b3IsIHRydWUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZl
bnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OworICAgICAgICAgICAgdHlwZSA9ICggc2VsZWN0b3Ig
PyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlOworICAg
ICAgICAgICAgaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSB8fCBbXTsKKyAgICAgICAgICAgIHRt
cCA9IHRtcFsgMiBdICYmCisgICAgICAgICAgICAgICAgbmV3IFJlZ0V4cCggIihefFxcLikiICsg
bmFtZXNwYWNlcy5qb2luKCAiXFwuKD86LipcXC58KSIgKSArICIoXFwufCQpIiApOworCisgICAg
ICAgICAgICAvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzCisgICAgICAgICAgICBvcmlnQ291bnQg
PSBqID0gaGFuZGxlcnMubGVuZ3RoOworICAgICAgICAgICAgd2hpbGUgKCBqLS0gKSB7CisgICAg
ICAgICAgICAgICAgaGFuZGxlT2JqID0gaGFuZGxlcnNbIGogXTsKKworICAgICAgICAgICAgICAg
IGlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkg
JiYKKyAgICAgICAgICAgICAgICAgICAgKCAhaGFuZGxlciB8fCBoYW5kbGVyLmd1aWQgPT09IGhh
bmRsZU9iai5ndWlkICkgJiYKKyAgICAgICAgICAgICAgICAgICAgKCAhdG1wIHx8IHRtcC50ZXN0
KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSAmJgorICAgICAgICAgICAgICAgICAgICAoICFzZWxl
Y3RvciB8fCBzZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yIHx8CisgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxlY3RvciA9PT0gIioqIiAmJiBoYW5kbGVPYmouc2VsZWN0b3IgKSApIHsK
KyAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnMuc3BsaWNlKCBqLCAxICk7CisKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCBoYW5kbGVPYmouc2VsZWN0b3IgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LS07CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgaWYgKCBzcGVjaWFsLnJlbW92ZSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNwZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBSZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIHdlIHJlbW92ZWQg
c29tZXRoaW5nIGFuZCBubyBtb3JlIGhhbmRsZXJzIGV4aXN0CisgICAgICAgICAgICAvLyAoYXZv
aWRzIHBvdGVudGlhbCBmb3IgZW5kbGVzcyByZWN1cnNpb24gZHVyaW5nIHJlbW92YWwgb2Ygc3Bl
Y2lhbCBldmVudCBoYW5kbGVycykKKyAgICAgICAgICAgIGlmICggb3JpZ0NvdW50ICYmICFoYW5k
bGVycy5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgaWYgKCAhc3BlY2lhbC50ZWFyZG93biB8
fAorICAgICAgICAgICAgICAgICAgICBzcGVjaWFsLnRlYXJkb3duLmNhbGwoIGVsZW0sIG5hbWVz
cGFjZXMsIGVsZW1EYXRhLmhhbmRsZSApID09PSBmYWxzZSApIHsKKworICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbIHR5cGUg
XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlbW92ZSBkYXRhIGFu
ZCB0aGUgZXhwYW5kbyBpZiBpdCdzIG5vIGxvbmdlciB1c2VkCisgICAgICAgIGlmICggalF1ZXJ5
LmlzRW1wdHlPYmplY3QoIGV2ZW50cyApICkgeworICAgICAgICAgICAgZGF0YVByaXYucmVtb3Zl
KCBlbGVtLCAiaGFuZGxlIGV2ZW50cyIgKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBkaXNw
YXRjaDogZnVuY3Rpb24oIG5hdGl2ZUV2ZW50ICkgeworCisgICAgICAgIC8vIE1ha2UgYSB3cml0
YWJsZSBqUXVlcnkuRXZlbnQgZnJvbSB0aGUgbmF0aXZlIGV2ZW50IG9iamVjdAorICAgICAgICB2
YXIgZXZlbnQgPSBqUXVlcnkuZXZlbnQuZml4KCBuYXRpdmVFdmVudCApOworCisgICAgICAgIHZh
ciBpLCBqLCByZXQsIG1hdGNoZWQsIGhhbmRsZU9iaiwgaGFuZGxlclF1ZXVlLAorICAgICAgICAg
ICAgYXJncyA9IG5ldyBBcnJheSggYXJndW1lbnRzLmxlbmd0aCApLAorICAgICAgICAgICAgaGFu
ZGxlcnMgPSAoIGRhdGFQcml2LmdldCggdGhpcywgImV2ZW50cyIgKSB8fCB7fSApWyBldmVudC50
eXBlIF0gfHwgW10sCisgICAgICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxb
IGV2ZW50LnR5cGUgXSB8fCB7fTsKKworICAgICAgICAvLyBVc2UgdGhlIGZpeC1lZCBqUXVlcnku
RXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkpIG5hdGl2ZSBldmVudAorICAgICAgICBh
cmdzWyAwIF0gPSBldmVudDsKKworICAgICAgICBmb3IgKCBpID0gMTsgaSA8IGFyZ3VtZW50cy5s
ZW5ndGg7IGkrKyApIHsKKyAgICAgICAgICAgIGFyZ3NbIGkgXSA9IGFyZ3VtZW50c1sgaSBdOwor
ICAgICAgICB9CisKKyAgICAgICAgZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzOworCisgICAg
ICAgIC8vIENhbGwgdGhlIHByZURpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZSwgYW5k
IGxldCBpdCBiYWlsIGlmIGRlc2lyZWQKKyAgICAgICAgaWYgKCBzcGVjaWFsLnByZURpc3BhdGNo
ICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKSA9PT0gZmFsc2UgKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBEZXRlcm1pbmUg
aGFuZGxlcnMKKyAgICAgICAgaGFuZGxlclF1ZXVlID0galF1ZXJ5LmV2ZW50LmhhbmRsZXJzLmNh
bGwoIHRoaXMsIGV2ZW50LCBoYW5kbGVycyApOworCisgICAgICAgIC8vIFJ1biBkZWxlZ2F0ZXMg
Zmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzCisgICAg
ICAgIGkgPSAwOworICAgICAgICB3aGlsZSAoICggbWF0Y2hlZCA9IGhhbmRsZXJRdWV1ZVsgaSsr
IF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHsKKyAgICAgICAgICAgIGV2
ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07CisKKyAgICAgICAgICAgIGogPSAwOwor
ICAgICAgICAgICAgd2hpbGUgKCAoIGhhbmRsZU9iaiA9IG1hdGNoZWQuaGFuZGxlcnNbIGorKyBd
ICkgJiYKKyAgICAgICAgICAgICAgICAhZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3Bw
ZWQoKSApIHsKKworICAgICAgICAgICAgICAgIC8vIFRyaWdnZXJlZCBldmVudCBtdXN0IGVpdGhl
ciAxKSBoYXZlIG5vIG5hbWVzcGFjZSwgb3IgMikgaGF2ZSBuYW1lc3BhY2UocykKKyAgICAgICAg
ICAgICAgICAvLyBhIHN1YnNldCBvciBlcXVhbCB0byB0aG9zZSBpbiB0aGUgYm91bmQgZXZlbnQg
KGJvdGggY2FuIGhhdmUgbm8gbmFtZXNwYWNlKS4KKyAgICAgICAgICAgICAgICBpZiAoICFldmVu
dC5ybmFtZXNwYWNlIHx8IGV2ZW50LnJuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFj
ZSApICkgeworCisgICAgICAgICAgICAgICAgICAgIGV2ZW50LmhhbmRsZU9iaiA9IGhhbmRsZU9i
ajsKKyAgICAgICAgICAgICAgICAgICAgZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhOworCisg
ICAgICAgICAgICAgICAgICAgIHJldCA9ICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFuZGxl
T2JqLm9yaWdUeXBlIF0gfHwge30gKS5oYW5kbGUgfHwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGhhbmRsZU9iai5oYW5kbGVyICkuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApOworCisgICAg
ICAgICAgICAgICAgICAgIGlmICggcmV0ICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoICggZXZlbnQucmVzdWx0ID0gcmV0ICkgPT09IGZhbHNlICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBDYWxsIHRoZSBwb3N0RGlz
cGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlCisgICAgICAgIGlmICggc3BlY2lhbC5wb3N0
RGlzcGF0Y2ggKSB7CisgICAgICAgICAgICBzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxsKCB0aGlz
LCBldmVudCApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGV2ZW50LnJlc3VsdDsKKyAg
ICB9LAorCisgICAgaGFuZGxlcnM6IGZ1bmN0aW9uKCBldmVudCwgaGFuZGxlcnMgKSB7CisgICAg
ICAgIHZhciBpLCBoYW5kbGVPYmosIHNlbCwgbWF0Y2hlZEhhbmRsZXJzLCBtYXRjaGVkU2VsZWN0
b3JzLAorICAgICAgICAgICAgaGFuZGxlclF1ZXVlID0gW10sCisgICAgICAgICAgICBkZWxlZ2F0
ZUNvdW50ID0gaGFuZGxlcnMuZGVsZWdhdGVDb3VudCwKKyAgICAgICAgICAgIGN1ciA9IGV2ZW50
LnRhcmdldDsKKworICAgICAgICAvLyBGaW5kIGRlbGVnYXRlIGhhbmRsZXJzCisgICAgICAgIGlm
ICggZGVsZWdhdGVDb3VudCAmJgorCisgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRSA8PTkKKyAg
ICAgICAgICAgIC8vIEJsYWNrLWhvbGUgU1ZHIDx1c2U+IGluc3RhbmNlIHRyZWVzICh0cmFjLTEz
MTgwKQorICAgICAgICAgICAgY3VyLm5vZGVUeXBlICYmCisKKyAgICAgICAgICAgIC8vIFN1cHBv
cnQ6IEZpcmVmb3ggPD00MgorICAgICAgICAgICAgLy8gU3VwcHJlc3Mgc3BlYy12aW9sYXRpbmcg
Y2xpY2tzIGluZGljYXRpbmcgYSBub24tcHJpbWFyeSBwb2ludGVyIGJ1dHRvbiAodHJhYy0zODYx
KQorICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50
cy8jZXZlbnQtdHlwZS1jbGljaworICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUgMTEgb25seQor
ICAgICAgICAgICAgLy8gLi4uYnV0IG5vdCBhcnJvdyBrZXkgImNsaWNrcyIgb2YgcmFkaW8gaW5w
dXRzLCB3aGljaCBjYW4gaGF2ZSBgYnV0dG9uYCAtMSAoZ2gtMjM0MykKKyAgICAgICAgICAgICEo
IGV2ZW50LnR5cGUgPT09ICJjbGljayIgJiYgZXZlbnQuYnV0dG9uID49IDEgKSApIHsKKworICAg
ICAgICAgICAgZm9yICggOyBjdXIgIT09IHRoaXM7IGN1ciA9IGN1ci5wYXJlbnROb2RlIHx8IHRo
aXMgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBjaGVjayBub24tZWxlbWVudHMgKCMx
MzIwOCkKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBwcm9jZXNzIGNsaWNrcyBvbiBkaXNhYmxl
ZCBlbGVtZW50cyAoIzY5MTEsICM4MTY1LCAjMTEzODIsICMxMTc2NCkKKyAgICAgICAgICAgICAg
ICBpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSAmJiAhKCBldmVudC50eXBlID09PSAiY2xpY2siICYm
IGN1ci5kaXNhYmxlZCA9PT0gdHJ1ZSApICkgeworICAgICAgICAgICAgICAgICAgICBtYXRjaGVk
SGFuZGxlcnMgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZFNlbGVjdG9ycyA9IHt9
OworICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGRlbGVnYXRlQ291bnQ7IGkr
KyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBpIF07
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGNvbmZsaWN0IHdpdGggT2JqZWN0
LnByb3RvdHlwZSBwcm9wZXJ0aWVzICgjMTMyMDMpCisgICAgICAgICAgICAgICAgICAgICAgICBz
ZWwgPSBoYW5kbGVPYmouc2VsZWN0b3IgKyAiICI7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9IGhhbmRsZU9iai5u
ZWVkc0NvbnRleHQgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHNl
bCwgdGhpcyApLmluZGV4KCBjdXIgKSA+IC0xIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LmZpbmQoIHNlbCwgdGhpcywgbnVsbCwgWyBjdXIgXSApLmxlbmd0aDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0
Y2hlZFNlbGVjdG9yc1sgc2VsIF0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0
Y2hlZEhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2hl
ZEhhbmRsZXJzLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJRdWV1
ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IG1hdGNoZWRIYW5kbGVycyB9ICk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICAvLyBBZGQgdGhlIHJlbWFpbmluZyAoZGlyZWN0bHktYm91bmQpIGhh
bmRsZXJzCisgICAgICAgIGN1ciA9IHRoaXM7CisgICAgICAgIGlmICggZGVsZWdhdGVDb3VudCA8
IGhhbmRsZXJzLmxlbmd0aCApIHsKKyAgICAgICAgICAgIGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVs
ZW06IGN1ciwgaGFuZGxlcnM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSApOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGhhbmRsZXJRdWV1ZTsKKyAgICB9LAorCisgICAg
YWRkUHJvcDogZnVuY3Rpb24oIG5hbWUsIGhvb2sgKSB7CisgICAgICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eSggalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSwgbmFtZSwgeworICAgICAgICAgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKworICAgICAg
ICAgICAgZ2V0OiBqUXVlcnkuaXNGdW5jdGlvbiggaG9vayApID8KKyAgICAgICAgICAgICAgICBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhvb2soIHRoaXMub3JpZ2lu
YWxFdmVudCApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSA6Cisg
ICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggdGhp
cy5vcmlnaW5hbEV2ZW50ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLm9yaWdpbmFsRXZlbnRbIG5hbWUgXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIHZhbHVlICkgeworICAg
ICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgbmFtZSwgeworICAgICAg
ICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAgICAgICAgICAgICAgICBjb25m
aWd1cmFibGU6IHRydWUsCisgICAgICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAorICAg
ICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUKKyAgICAgICAgICAgICAgICB9ICk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gKTsKKyAgICB9LAorCisgICAgZml4OiBmdW5jdGlvbiggb3Jp
Z2luYWxFdmVudCApIHsKKyAgICAgICAgcmV0dXJuIG9yaWdpbmFsRXZlbnRbIGpRdWVyeS5leHBh
bmRvIF0gPworICAgICAgICAgICAgb3JpZ2luYWxFdmVudCA6CisgICAgICAgICAgICBuZXcgalF1
ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50ICk7CisgICAgfSwKKworICAgIHNwZWNpYWw6IHsKKyAg
ICAgICAgbG9hZDogeworCisgICAgICAgICAgICAvLyBQcmV2ZW50IHRyaWdnZXJlZCBpbWFnZS5s
b2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkCisgICAgICAgICAgICBub0J1
YmJsZTogdHJ1ZQorICAgICAgICB9LAorICAgICAgICBmb2N1czogeworCisgICAgICAgICAgICAv
LyBGaXJlIG5hdGl2ZSBldmVudCBpZiBwb3NzaWJsZSBzbyBibHVyL2ZvY3VzIHNlcXVlbmNlIGlz
IGNvcnJlY3QKKyAgICAgICAgICAgIHRyaWdnZXI6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgIGlmICggdGhpcyAhPT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSAmJiB0aGlzLmZvY3VzICkgewor
ICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzKCk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgZGVsZWdhdGVUeXBlOiAiZm9jdXNpbiIKKyAgICAgICAgfSwKKyAgICAgICAgYmx1cjogewor
ICAgICAgICAgICAgdHJpZ2dlcjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYgKCB0
aGlzID09PSBzYWZlQWN0aXZlRWxlbWVudCgpICYmIHRoaXMuYmx1ciApIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5ibHVyKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgZGVsZWdhdGVU
eXBlOiAiZm9jdXNvdXQiCisgICAgICAgIH0sCisgICAgICAgIGNsaWNrOiB7CisKKyAgICAgICAg
ICAgIC8vIEZvciBjaGVja2JveCwgZmlyZSBuYXRpdmUgZXZlbnQgc28gY2hlY2tlZCBzdGF0ZSB3
aWxsIGJlIHJpZ2h0CisgICAgICAgICAgICB0cmlnZ2VyOiBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIHRoaXMudHlwZSA9PT0gImNoZWNrYm94IiAmJiB0aGlzLmNsaWNrICYmIGpR
dWVyeS5ub2RlTmFtZSggdGhpcywgImlucHV0IiApICkgeworICAgICAgICAgICAgICAgICAgICB0
aGlzLmNsaWNrKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAvLyBGb3IgY3Jvc3MtYnJv
d3NlciBjb25zaXN0ZW5jeSwgZG9uJ3QgZmlyZSBuYXRpdmUgLmNsaWNrKCkgb24gbGlua3MKKyAg
ICAgICAgICAgIF9kZWZhdWx0OiBmdW5jdGlvbiggZXZlbnQgKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGpRdWVyeS5ub2RlTmFtZSggZXZlbnQudGFyZ2V0LCAiYSIgKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSwKKworICAgICAgICBiZWZvcmV1bmxvYWQ6IHsKKyAgICAgICAgICAgIHBv
c3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkgeworCisgICAgICAgICAgICAgICAgLy8gU3Vw
cG9ydDogRmlyZWZveCAyMCsKKyAgICAgICAgICAgICAgICAvLyBGaXJlZm94IGRvZXNuJ3QgYWxl
cnQgaWYgdGhlIHJldHVyblZhbHVlIGZpZWxkIGlzIG5vdCBzZXQuCisgICAgICAgICAgICAgICAg
aWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVmaW5lZCAmJiBldmVudC5vcmlnaW5hbEV2ZW50ICkg
eworICAgICAgICAgICAgICAgICAgICBldmVudC5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlID0g
ZXZlbnQucmVzdWx0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KK307CisKK2pRdWVyeS5yZW1vdmVFdmVudCA9IGZ1bmN0aW9uKCBlbGVtLCB0eXBl
LCBoYW5kbGUgKSB7CisKKyAgICAvLyBUaGlzICJpZiIgaXMgbmVlZGVkIGZvciBwbGFpbiBvYmpl
Y3RzCisgICAgaWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7CisgICAgICAgIGVsZW0u
cmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlICk7CisgICAgfQorfTsKKworalF1ZXJ5
LkV2ZW50ID0gZnVuY3Rpb24oIHNyYywgcHJvcHMgKSB7CisKKyAgICAvLyBBbGxvdyBpbnN0YW50
aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmQKKyAgICBpZiAoICEoIHRoaXMgaW5zdGFu
Y2VvZiBqUXVlcnkuRXZlbnQgKSApIHsKKyAgICAgICAgcmV0dXJuIG5ldyBqUXVlcnkuRXZlbnQo
IHNyYywgcHJvcHMgKTsKKyAgICB9CisKKyAgICAvLyBFdmVudCBvYmplY3QKKyAgICBpZiAoIHNy
YyAmJiBzcmMudHlwZSApIHsKKyAgICAgICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gc3JjOworICAg
ICAgICB0aGlzLnR5cGUgPSBzcmMudHlwZTsKKworICAgICAgICAvLyBFdmVudHMgYnViYmxpbmcg
dXAgdGhlIGRvY3VtZW50IG1heSBoYXZlIGJlZW4gbWFya2VkIGFzIHByZXZlbnRlZAorICAgICAg
ICAvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVj
dCB2YWx1ZS4KKyAgICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBzcmMuZGVmYXVsdFBy
ZXZlbnRlZCB8fAorICAgICAgICAgICAgICAgIHNyYy5kZWZhdWx0UHJldmVudGVkID09PSB1bmRl
ZmluZWQgJiYKKworICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25s
eQorICAgICAgICAgICAgICAgIHNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgPworICAgICAgICAg
ICAgcmV0dXJuVHJ1ZSA6CisgICAgICAgICAgICByZXR1cm5GYWxzZTsKKworICAgICAgICAvLyBD
cmVhdGUgdGFyZ2V0IHByb3BlcnRpZXMKKyAgICAgICAgLy8gU3VwcG9ydDogU2FmYXJpIDw9NiAt
IDcgb25seQorICAgICAgICAvLyBUYXJnZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAoIzUw
NCwgIzEzMTQzKQorICAgICAgICB0aGlzLnRhcmdldCA9ICggc3JjLnRhcmdldCAmJiBzcmMudGFy
Z2V0Lm5vZGVUeXBlID09PSAzICkgPworICAgICAgICAgICAgc3JjLnRhcmdldC5wYXJlbnROb2Rl
IDoKKyAgICAgICAgICAgIHNyYy50YXJnZXQ7CisKKyAgICAgICAgdGhpcy5jdXJyZW50VGFyZ2V0
ID0gc3JjLmN1cnJlbnRUYXJnZXQ7CisgICAgICAgIHRoaXMucmVsYXRlZFRhcmdldCA9IHNyYy5y
ZWxhdGVkVGFyZ2V0OworCisgICAgLy8gRXZlbnQgdHlwZQorICAgIH0gZWxzZSB7CisgICAgICAg
IHRoaXMudHlwZSA9IHNyYzsKKyAgICB9CisKKyAgICAvLyBQdXQgZXhwbGljaXRseSBwcm92aWRl
ZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdAorICAgIGlmICggcHJvcHMgKSB7Cisg
ICAgICAgIGpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7CisgICAgfQorCisgICAgLy8gQ3Jl
YXRlIGEgdGltZXN0YW1wIGlmIGluY29taW5nIGV2ZW50IGRvZXNuJ3QgaGF2ZSBvbmUKKyAgICB0
aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IGpRdWVyeS5ub3coKTsKKwor
ICAgIC8vIE1hcmsgaXQgYXMgZml4ZWQKKyAgICB0aGlzWyBqUXVlcnkuZXhwYW5kbyBdID0gdHJ1
ZTsKK307CisKKy8vIGpRdWVyeS5FdmVudCBpcyBiYXNlZCBvbiBET00zIEV2ZW50cyBhcyBzcGVj
aWZpZWQgYnkgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgQmluZGluZworLy8gaHR0cHM6Ly93d3cu
dzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0
LWJpbmRpbmcuaHRtbAoralF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3Rv
cjogalF1ZXJ5LkV2ZW50LAorICAgIGlzRGVmYXVsdFByZXZlbnRlZDogcmV0dXJuRmFsc2UsCisg
ICAgaXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLAorICAgIGlzSW1tZWRpYXRlUHJv
cGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSwKKyAgICBpc1NpbXVsYXRlZDogZmFsc2UsCisK
KyAgICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBlID0gdGhpcy5v
cmlnaW5hbEV2ZW50OworCisgICAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJu
VHJ1ZTsKKworICAgICAgICBpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7CisgICAgICAg
ICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgIH0KKyAgICB9LAorICAgIHN0b3BQcm9w
YWdhdGlvbjogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50
OworCisgICAgICAgIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlOworCisg
ICAgICAgIGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHsKKyAgICAgICAgICAgIGUuc3Rv
cFByb3BhZ2F0aW9uKCk7CisgICAgICAgIH0KKyAgICB9LAorICAgIHN0b3BJbW1lZGlhdGVQcm9w
YWdhdGlvbjogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50
OworCisgICAgICAgIHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5U
cnVlOworCisgICAgICAgIGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHsKKyAgICAgICAg
ICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICB0
aGlzLnN0b3BQcm9wYWdhdGlvbigpOworICAgIH0KK307CisKKy8vIEluY2x1ZGVzIGFsbCBjb21t
b24gZXZlbnQgcHJvcHMgaW5jbHVkaW5nIEtleUV2ZW50IGFuZCBNb3VzZUV2ZW50IHNwZWNpZmlj
IHByb3BzCitqUXVlcnkuZWFjaCggeworICAgIGFsdEtleTogdHJ1ZSwKKyAgICBidWJibGVzOiB0
cnVlLAorICAgIGNhbmNlbGFibGU6IHRydWUsCisgICAgY2hhbmdlZFRvdWNoZXM6IHRydWUsCisg
ICAgY3RybEtleTogdHJ1ZSwKKyAgICBkZXRhaWw6IHRydWUsCisgICAgZXZlbnRQaGFzZTogdHJ1
ZSwKKyAgICBtZXRhS2V5OiB0cnVlLAorICAgIHBhZ2VYOiB0cnVlLAorICAgIHBhZ2VZOiB0cnVl
LAorICAgIHNoaWZ0S2V5OiB0cnVlLAorICAgIHZpZXc6IHRydWUsCisgICAgImNoYXIiOiB0cnVl
LAorICAgIGNoYXJDb2RlOiB0cnVlLAorICAgIGtleTogdHJ1ZSwKKyAgICBrZXlDb2RlOiB0cnVl
LAorICAgIGJ1dHRvbjogdHJ1ZSwKKyAgICBidXR0b25zOiB0cnVlLAorICAgIGNsaWVudFg6IHRy
dWUsCisgICAgY2xpZW50WTogdHJ1ZSwKKyAgICBvZmZzZXRYOiB0cnVlLAorICAgIG9mZnNldFk6
IHRydWUsCisgICAgcG9pbnRlcklkOiB0cnVlLAorICAgIHBvaW50ZXJUeXBlOiB0cnVlLAorICAg
IHNjcmVlblg6IHRydWUsCisgICAgc2NyZWVuWTogdHJ1ZSwKKyAgICB0YXJnZXRUb3VjaGVzOiB0
cnVlLAorICAgIHRvRWxlbWVudDogdHJ1ZSwKKyAgICB0b3VjaGVzOiB0cnVlLAorCisgICAgd2hp
Y2g6IGZ1bmN0aW9uKCBldmVudCApIHsKKyAgICAgICAgdmFyIGJ1dHRvbiA9IGV2ZW50LmJ1dHRv
bjsKKworICAgICAgICAvLyBBZGQgd2hpY2ggZm9yIGtleSBldmVudHMKKyAgICAgICAgaWYgKCBl
dmVudC53aGljaCA9PSBudWxsICYmIHJrZXlFdmVudC50ZXN0KCBldmVudC50eXBlICkgKSB7Cisg
ICAgICAgICAgICByZXR1cm4gZXZlbnQuY2hhckNvZGUgIT0gbnVsbCA/IGV2ZW50LmNoYXJDb2Rl
IDogZXZlbnQua2V5Q29kZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFkZCB3aGljaCBmb3Ig
Y2xpY2s6IDEgPT09IGxlZnQ7IDIgPT09IG1pZGRsZTsgMyA9PT0gcmlnaHQKKyAgICAgICAgaWYg
KCAhZXZlbnQud2hpY2ggJiYgYnV0dG9uICE9PSB1bmRlZmluZWQgJiYgcm1vdXNlRXZlbnQudGVz
dCggZXZlbnQudHlwZSApICkgeworICAgICAgICAgICAgaWYgKCBidXR0b24gJiAxICkgeworICAg
ICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
IGJ1dHRvbiAmIDIgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICggYnV0dG9uICYgNCApIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gMjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gZXZlbnQud2hpY2g7CisgICAgfQorfSwgalF1ZXJ5LmV2ZW50LmFk
ZFByb3AgKTsKKworLy8gQ3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUgZXZlbnRzIHVzaW5nIG1vdXNl
b3Zlci9vdXQgYW5kIGV2ZW50LXRpbWUgY2hlY2tzCisvLyBzbyB0aGF0IGV2ZW50IGRlbGVnYXRp
b24gd29ya3MgaW4galF1ZXJ5LgorLy8gRG8gdGhlIHNhbWUgZm9yIHBvaW50ZXJlbnRlci9wb2lu
dGVybGVhdmUgYW5kIHBvaW50ZXJvdmVyL3BvaW50ZXJvdXQKKy8vCisvLyBTdXBwb3J0OiBTYWZh
cmkgNyBvbmx5CisvLyBTYWZhcmkgc2VuZHMgbW91c2VlbnRlciB0b28gb2Z0ZW47IHNlZToKKy8v
IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ3
MDI1OAorLy8gZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYnVnIChpdCBleGlzdGVkIGluIG9s
ZGVyIENocm9tZSB2ZXJzaW9ucyBhcyB3ZWxsKS4KK2pRdWVyeS5lYWNoKCB7CisgICAgbW91c2Vl
bnRlcjogIm1vdXNlb3ZlciIsCisgICAgbW91c2VsZWF2ZTogIm1vdXNlb3V0IiwKKyAgICBwb2lu
dGVyZW50ZXI6ICJwb2ludGVyb3ZlciIsCisgICAgcG9pbnRlcmxlYXZlOiAicG9pbnRlcm91dCIK
K30sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7CisgICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIG9y
aWcgXSA9IHsKKyAgICAgICAgZGVsZWdhdGVUeXBlOiBmaXgsCisgICAgICAgIGJpbmRUeXBlOiBm
aXgsCisKKyAgICAgICAgaGFuZGxlOiBmdW5jdGlvbiggZXZlbnQgKSB7CisgICAgICAgICAgICB2
YXIgcmV0LAorICAgICAgICAgICAgICAgIHRhcmdldCA9IHRoaXMsCisgICAgICAgICAgICAgICAg
cmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsCisgICAgICAgICAgICAgICAgaGFuZGxlT2Jq
ID0gZXZlbnQuaGFuZGxlT2JqOworCisgICAgICAgICAgICAvLyBGb3IgbW91c2VlbnRlci9sZWF2
ZSBjYWxsIHRoZSBoYW5kbGVyIGlmIHJlbGF0ZWQgaXMgb3V0c2lkZSB0aGUgdGFyZ2V0LgorICAg
ICAgICAgICAgLy8gTkI6IE5vIHJlbGF0ZWRUYXJnZXQgaWYgdGhlIG1vdXNlIGxlZnQvZW50ZXJl
ZCB0aGUgYnJvd3NlciB3aW5kb3cKKyAgICAgICAgICAgIGlmICggIXJlbGF0ZWQgfHwgKCByZWxh
dGVkICE9PSB0YXJnZXQgJiYgIWpRdWVyeS5jb250YWlucyggdGFyZ2V0LCByZWxhdGVkICkgKSAp
IHsKKyAgICAgICAgICAgICAgICBldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlOworICAg
ICAgICAgICAgICAgIHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVu
dHMgKTsKKyAgICAgICAgICAgICAgICBldmVudC50eXBlID0gZml4OworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorICAgIH07Cit9ICk7CisKK2pRdWVy
eS5mbi5leHRlbmQoIHsKKworICAgIG9uOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRh
LCBmbiApIHsKKyAgICAgICAgcmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEs
IGZuICk7CisgICAgfSwKKyAgICBvbmU6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEs
IGZuICkgeworICAgICAgICByZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwg
Zm4sIDEgKTsKKyAgICB9LAorICAgIG9mZjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZm4g
KSB7CisgICAgICAgIHZhciBoYW5kbGVPYmosIHR5cGU7CisgICAgICAgIGlmICggdHlwZXMgJiYg
dHlwZXMucHJldmVudERlZmF1bHQgJiYgdHlwZXMuaGFuZGxlT2JqICkgeworCisgICAgICAgICAg
ICAvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50CisgICAgICAgICAgICBoYW5k
bGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7CisgICAgICAgICAgICBqUXVlcnkoIHR5cGVzLmRlbGVn
YXRlVGFyZ2V0ICkub2ZmKAorICAgICAgICAgICAgICAgIGhhbmRsZU9iai5uYW1lc3BhY2UgPwor
ICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmoub3JpZ1R5cGUgKyAiLiIgKyBoYW5kbGVPYmou
bmFtZXNwYWNlIDoKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqLm9yaWdUeXBlLAorICAg
ICAgICAgICAgICAgIGhhbmRsZU9iai5zZWxlY3RvciwKKyAgICAgICAgICAgICAgICBoYW5kbGVP
YmouaGFuZGxlcgorICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAg
ICAgICB9CisgICAgICAgIGlmICggdHlwZW9mIHR5cGVzID09PSAib2JqZWN0IiApIHsKKworICAg
ICAgICAgICAgLy8gKCB0eXBlcy1vYmplY3QgWywgc2VsZWN0b3JdICkKKyAgICAgICAgICAgIGZv
ciAoIHR5cGUgaW4gdHlwZXMgKSB7CisgICAgICAgICAgICAgICAgdGhpcy5vZmYoIHR5cGUsIHNl
bGVjdG9yLCB0eXBlc1sgdHlwZSBdICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICBpZiAoIHNlbGVjdG9yID09PSBmYWxzZSB8fCB0
eXBlb2Ygc2VsZWN0b3IgPT09ICJmdW5jdGlvbiIgKSB7CisKKyAgICAgICAgICAgIC8vICggdHlw
ZXMgWywgZm5dICkKKyAgICAgICAgICAgIGZuID0gc2VsZWN0b3I7CisgICAgICAgICAgICBzZWxl
Y3RvciA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIGZuID09PSBmYWxzZSAp
IHsKKyAgICAgICAgICAgIGZuID0gcmV0dXJuRmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVt
b3ZlKCB0aGlzLCB0eXBlcywgZm4sIHNlbGVjdG9yICk7CisgICAgICAgIH0gKTsKKyAgICB9Cit9
ICk7CisKKwordmFyCisKKyAgICAvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovCisKKyAgICAv
LyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzbGludC9lc2xpbnQvaXNzdWVzLzMyMjkKKyAgICBy
eGh0bWxUYWcgPSAvPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8
cGFyYW0pKChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKilbXj5dKilcLz4vZ2ksCisKKyAgICAv
KiBlc2xpbnQtZW5hYmxlICovCisKKyAgICAvLyBTdXBwb3J0OiBJRSA8PTEwIC0gMTEsIEVkZ2Ug
MTIgLSAxMworICAgIC8vIEluIElFL0VkZ2UgdXNpbmcgcmVnZXggZ3JvdXBzIGhlcmUgY2F1c2Vz
IHNldmVyZSBzbG93ZG93bnMuCisgICAgLy8gU2VlIGh0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQu
Y29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvMTczNjUxMi8KKyAgICBybm9Jbm5lcmh0bWwgPSAvPHNj
cmlwdHw8c3R5bGV8PGxpbmsvaSwKKworICAgIC8vIGNoZWNrZWQ9ImNoZWNrZWQiIG9yIGNoZWNr
ZWQKKyAgICByY2hlY2tlZCA9IC9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLAor
ICAgIHJzY3JpcHRUeXBlTWFza2VkID0gL150cnVlXC8oLiopLywKKyAgICByY2xlYW5TY3JpcHQg
PSAvXlxzKjwhKD86XFtDREFUQVxbfC0tKXwoPzpcXVxdfC0tKT5ccyokL2c7CisKK2Z1bmN0aW9u
IG1hbmlwdWxhdGlvblRhcmdldCggZWxlbSwgY29udGVudCApIHsKKyAgICBpZiAoIGpRdWVyeS5u
b2RlTmFtZSggZWxlbSwgInRhYmxlIiApICYmCisgICAgICAgIGpRdWVyeS5ub2RlTmFtZSggY29u
dGVudC5ub2RlVHlwZSAhPT0gMTEgPyBjb250ZW50IDogY29udGVudC5maXJzdENoaWxkLCAidHIi
ICkgKSB7CisKKyAgICAgICAgcmV0dXJuIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJ0Ym9k
eSIgKVsgMCBdIHx8IGVsZW07CisgICAgfQorCisgICAgcmV0dXJuIGVsZW07Cit9CisKKy8vIFJl
cGxhY2UvcmVzdG9yZSB0aGUgdHlwZSBhdHRyaWJ1dGUgb2Ygc2NyaXB0IGVsZW1lbnRzIGZvciBz
YWZlIERPTSBtYW5pcHVsYXRpb24KK2Z1bmN0aW9uIGRpc2FibGVTY3JpcHQoIGVsZW0gKSB7Cisg
ICAgZWxlbS50eXBlID0gKCBlbGVtLmdldEF0dHJpYnV0ZSggInR5cGUiICkgIT09IG51bGwgKSAr
ICIvIiArIGVsZW0udHlwZTsKKyAgICByZXR1cm4gZWxlbTsKK30KK2Z1bmN0aW9uIHJlc3RvcmVT
Y3JpcHQoIGVsZW0gKSB7CisgICAgdmFyIG1hdGNoID0gcnNjcmlwdFR5cGVNYXNrZWQuZXhlYygg
ZWxlbS50eXBlICk7CisKKyAgICBpZiAoIG1hdGNoICkgeworICAgICAgICBlbGVtLnR5cGUgPSBt
YXRjaFsgMSBdOworICAgIH0gZWxzZSB7CisgICAgICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCAi
dHlwZSIgKTsKKyAgICB9CisKKyAgICByZXR1cm4gZWxlbTsKK30KKworZnVuY3Rpb24gY2xvbmVD
b3B5RXZlbnQoIHNyYywgZGVzdCApIHsKKyAgICB2YXIgaSwgbCwgdHlwZSwgcGRhdGFPbGQsIHBk
YXRhQ3VyLCB1ZGF0YU9sZCwgdWRhdGFDdXIsIGV2ZW50czsKKworICAgIGlmICggZGVzdC5ub2Rl
VHlwZSAhPT0gMSApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIDEuIENvcHkg
cHJpdmF0ZSBkYXRhOiBldmVudHMsIGhhbmRsZXJzLCBldGMuCisgICAgaWYgKCBkYXRhUHJpdi5o
YXNEYXRhKCBzcmMgKSApIHsKKyAgICAgICAgcGRhdGFPbGQgPSBkYXRhUHJpdi5hY2Nlc3MoIHNy
YyApOworICAgICAgICBwZGF0YUN1ciA9IGRhdGFQcml2LnNldCggZGVzdCwgcGRhdGFPbGQgKTsK
KyAgICAgICAgZXZlbnRzID0gcGRhdGFPbGQuZXZlbnRzOworCisgICAgICAgIGlmICggZXZlbnRz
ICkgeworICAgICAgICAgICAgZGVsZXRlIHBkYXRhQ3VyLmhhbmRsZTsKKyAgICAgICAgICAgIHBk
YXRhQ3VyLmV2ZW50cyA9IHt9OworCisgICAgICAgICAgICBmb3IgKCB0eXBlIGluIGV2ZW50cyAp
IHsKKyAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IGV2ZW50c1sgdHlwZSBdLmxlbmd0
aDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmFkZCgg
ZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIDIuIENvcHkgdXNlciBkYXRh
CisgICAgaWYgKCBkYXRhVXNlci5oYXNEYXRhKCBzcmMgKSApIHsKKyAgICAgICAgdWRhdGFPbGQg
PSBkYXRhVXNlci5hY2Nlc3MoIHNyYyApOworICAgICAgICB1ZGF0YUN1ciA9IGpRdWVyeS5leHRl
bmQoIHt9LCB1ZGF0YU9sZCApOworCisgICAgICAgIGRhdGFVc2VyLnNldCggZGVzdCwgdWRhdGFD
dXIgKTsKKyAgICB9Cit9CisKKy8vIEZpeCBJRSBidWdzLCBzZWUgc3VwcG9ydCB0ZXN0cworZnVu
Y3Rpb24gZml4SW5wdXQoIHNyYywgZGVzdCApIHsKKyAgICB2YXIgbm9kZU5hbWUgPSBkZXN0Lm5v
ZGVOYW1lLnRvTG93ZXJDYXNlKCk7CisKKyAgICAvLyBGYWlscyB0byBwZXJzaXN0IHRoZSBjaGVj
a2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbi4KKyAgICBpZiAo
IG5vZGVOYW1lID09PSAiaW5wdXQiICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBlICkg
KSB7CisgICAgICAgIGRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2VkOworCisgICAgLy8gRmFpbHMg
dG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQgc3Rh
dGUgd2hlbiBjbG9uaW5nIG9wdGlvbnMKKyAgICB9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gImlu
cHV0IiB8fCBub2RlTmFtZSA9PT0gInRleHRhcmVhIiApIHsKKyAgICAgICAgZGVzdC5kZWZhdWx0
VmFsdWUgPSBzcmMuZGVmYXVsdFZhbHVlOworICAgIH0KK30KKworZnVuY3Rpb24gZG9tTWFuaXAo
IGNvbGxlY3Rpb24sIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICkgeworCisgICAgLy8gRmxhdHRl
biBhbnkgbmVzdGVkIGFycmF5cworICAgIGFyZ3MgPSBjb25jYXQuYXBwbHkoIFtdLCBhcmdzICk7
CisKKyAgICB2YXIgZnJhZ21lbnQsIGZpcnN0LCBzY3JpcHRzLCBoYXNTY3JpcHRzLCBub2RlLCBk
b2MsCisgICAgICAgIGkgPSAwLAorICAgICAgICBsID0gY29sbGVjdGlvbi5sZW5ndGgsCisgICAg
ICAgIGlOb0Nsb25lID0gbCAtIDEsCisgICAgICAgIHZhbHVlID0gYXJnc1sgMCBdLAorICAgICAg
ICBpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICk7CisKKyAgICAvLyBXZSBj
YW4ndCBjbG9uZU5vZGUgZnJhZ21lbnRzIHRoYXQgY29udGFpbiBjaGVja2VkLCBpbiBXZWJLaXQK
KyAgICBpZiAoIGlzRnVuY3Rpb24gfHwKKyAgICAgICAgICAgICggbCA+IDEgJiYgdHlwZW9mIHZh
bHVlID09PSAic3RyaW5nIiAmJgorICAgICAgICAgICAgICAgICFzdXBwb3J0LmNoZWNrQ2xvbmUg
JiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApICkgeworICAgICAgICByZXR1cm4gY29sbGVjdGlv
bi5lYWNoKCBmdW5jdGlvbiggaW5kZXggKSB7CisgICAgICAgICAgICB2YXIgc2VsZiA9IGNvbGxl
Y3Rpb24uZXEoIGluZGV4ICk7CisgICAgICAgICAgICBpZiAoIGlzRnVuY3Rpb24gKSB7CisgICAg
ICAgICAgICAgICAgYXJnc1sgMCBdID0gdmFsdWUuY2FsbCggdGhpcywgaW5kZXgsIHNlbGYuaHRt
bCgpICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkb21NYW5pcCggc2VsZiwgYXJncywg
Y2FsbGJhY2ssIGlnbm9yZWQgKTsKKyAgICAgICAgfSApOworICAgIH0KKworICAgIGlmICggbCAp
IHsKKyAgICAgICAgZnJhZ21lbnQgPSBidWlsZEZyYWdtZW50KCBhcmdzLCBjb2xsZWN0aW9uWyAw
IF0ub3duZXJEb2N1bWVudCwgZmFsc2UsIGNvbGxlY3Rpb24sIGlnbm9yZWQgKTsKKyAgICAgICAg
Zmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkOworCisgICAgICAgIGlmICggZnJhZ21lbnQuY2hp
bGROb2Rlcy5sZW5ndGggPT09IDEgKSB7CisgICAgICAgICAgICBmcmFnbWVudCA9IGZpcnN0Owor
ICAgICAgICB9CisKKyAgICAgICAgLy8gUmVxdWlyZSBlaXRoZXIgbmV3IGNvbnRlbnQgb3IgYW4g
aW50ZXJlc3QgaW4gaWdub3JlZCBlbGVtZW50cyB0byBpbnZva2UgdGhlIGNhbGxiYWNrCisgICAg
ICAgIGlmICggZmlyc3QgfHwgaWdub3JlZCApIHsKKyAgICAgICAgICAgIHNjcmlwdHMgPSBqUXVl
cnkubWFwKCBnZXRBbGwoIGZyYWdtZW50LCAic2NyaXB0IiApLCBkaXNhYmxlU2NyaXB0ICk7Cisg
ICAgICAgICAgICBoYXNTY3JpcHRzID0gc2NyaXB0cy5sZW5ndGg7CisKKyAgICAgICAgICAgIC8v
IFVzZSB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgZm9yIHRoZSBsYXN0IGl0ZW0KKyAgICAgICAgICAg
IC8vIGluc3RlYWQgb2YgdGhlIGZpcnN0IGJlY2F1c2UgaXQgY2FuIGVuZCB1cAorICAgICAgICAg
ICAgLy8gYmVpbmcgZW1wdGllZCBpbmNvcnJlY3RseSBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgKCM4
MDcwKS4KKyAgICAgICAgICAgIGZvciAoIDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAg
ICBub2RlID0gZnJhZ21lbnQ7CisKKyAgICAgICAgICAgICAgICBpZiAoIGkgIT09IGlOb0Nsb25l
ICkgeworICAgICAgICAgICAgICAgICAgICBub2RlID0galF1ZXJ5LmNsb25lKCBub2RlLCB0cnVl
LCB0cnVlICk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gS2VlcCByZWZlcmVuY2VzIHRvIGNs
b25lZCBzY3JpcHRzIGZvciBsYXRlciByZXN0b3JhdGlvbgorICAgICAgICAgICAgICAgICAgICBp
ZiAoIGhhc1NjcmlwdHMgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6
IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seQorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktp
dAorICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCBzY3JpcHRzLCBnZXRBbGwo
IG5vZGUsICJzY3JpcHQiICkgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoIGNvbGxlY3Rpb25bIGkgXSwg
bm9kZSwgaSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGhhc1NjcmlwdHMg
KSB7CisgICAgICAgICAgICAgICAgZG9jID0gc2NyaXB0c1sgc2NyaXB0cy5sZW5ndGggLSAxIF0u
b3duZXJEb2N1bWVudDsKKworICAgICAgICAgICAgICAgIC8vIFJlZW5hYmxlIHNjcmlwdHMKKyAg
ICAgICAgICAgICAgICBqUXVlcnkubWFwKCBzY3JpcHRzLCByZXN0b3JlU2NyaXB0ICk7CisKKyAg
ICAgICAgICAgICAgICAvLyBFdmFsdWF0ZSBleGVjdXRhYmxlIHNjcmlwdHMgb24gZmlyc3QgZG9j
dW1lbnQgaW5zZXJ0aW9uCisgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBoYXNTY3Jp
cHRzOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBzY3JpcHRzWyBpIF07Cisg
ICAgICAgICAgICAgICAgICAgIGlmICggcnNjcmlwdFR5cGUudGVzdCggbm9kZS50eXBlIHx8ICIi
ICkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICFkYXRhUHJpdi5hY2Nlc3MoIG5vZGUsICJn
bG9iYWxFdmFsIiApICYmCisgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY29udGFpbnMo
IGRvYywgbm9kZSApICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5vZGUuc3Jj
ICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3B0aW9uYWwgQUpBWCBkZXBl
bmRlbmN5LCBidXQgd29uJ3QgcnVuIHNjcmlwdHMgaWYgbm90IHByZXNlbnQKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5fZXZhbFVybCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9ldmFsVXJsKCBub2RlLnNyYyApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRE9NRXZhbCggbm9kZS50ZXh0Q29udGVudC5yZXBs
YWNlKCByY2xlYW5TY3JpcHQsICIiICksIGRvYyApOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNvbGxlY3Rpb247Cit9CisKK2Z1bmN0
aW9uIHJlbW92ZSggZWxlbSwgc2VsZWN0b3IsIGtlZXBEYXRhICkgeworICAgIHZhciBub2RlLAor
ICAgICAgICBub2RlcyA9IHNlbGVjdG9yID8galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIGVsZW0g
KSA6IGVsZW0sCisgICAgICAgIGkgPSAwOworCisgICAgZm9yICggOyAoIG5vZGUgPSBub2Rlc1sg
aSBdICkgIT0gbnVsbDsgaSsrICkgeworICAgICAgICBpZiAoICFrZWVwRGF0YSAmJiBub2RlLm5v
ZGVUeXBlID09PSAxICkgeworICAgICAgICAgICAgalF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBu
b2RlICkgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggbm9kZS5wYXJlbnROb2RlICkgewor
ICAgICAgICAgICAgaWYgKCBrZWVwRGF0YSAmJiBqUXVlcnkuY29udGFpbnMoIG5vZGUub3duZXJE
b2N1bWVudCwgbm9kZSApICkgeworICAgICAgICAgICAgICAgIHNldEdsb2JhbEV2YWwoIGdldEFs
bCggbm9kZSwgInNjcmlwdCIgKSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbm9kZS5w
YXJlbnROb2RlLnJlbW92ZUNoaWxkKCBub2RlICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gZWxlbTsKK30KKworalF1ZXJ5LmV4dGVuZCggeworICAgIGh0bWxQcmVmaWx0ZXI6IGZ1
bmN0aW9uKCBodG1sICkgeworICAgICAgICByZXR1cm4gaHRtbC5yZXBsYWNlKCByeGh0bWxUYWcs
ICI8JDE+PC8kMj4iICk7CisgICAgfSwKKworICAgIGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0
YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7CisgICAgICAgIHZhciBpLCBsLCBzcmNF
bGVtZW50cywgZGVzdEVsZW1lbnRzLAorICAgICAgICAgICAgY2xvbmUgPSBlbGVtLmNsb25lTm9k
ZSggdHJ1ZSApLAorICAgICAgICAgICAgaW5QYWdlID0galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93
bmVyRG9jdW1lbnQsIGVsZW0gKTsKKworICAgICAgICAvLyBGaXggSUUgY2xvbmluZyBpc3N1ZXMK
KyAgICAgICAgaWYgKCAhc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCAmJiAoIGVsZW0ubm9kZVR5cGUg
PT09IDEgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMTEgKSAmJgorICAgICAgICAgICAgICAgICFqUXVl
cnkuaXNYTUxEb2MoIGVsZW0gKSApIHsKKworICAgICAgICAgICAgLy8gV2UgZXNjaGV3IFNpenps
ZSBoZXJlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOiBodHRwczovL2pzcGVyZi5jb20vZ2V0YWxs
LXZzLXNpenpsZS8yCisgICAgICAgICAgICBkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7
CisgICAgICAgICAgICBzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApOworCisgICAgICAgICAg
ICBmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKyAg
ICAgICAgICAgICAgICBmaXhJbnB1dCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBp
IF0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIENvcHkgdGhlIGV2
ZW50cyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUgY2xvbmUKKyAgICAgICAgaWYgKCBkYXRhQW5k
RXZlbnRzICkgeworICAgICAgICAgICAgaWYgKCBkZWVwRGF0YUFuZEV2ZW50cyApIHsKKyAgICAg
ICAgICAgICAgICBzcmNFbGVtZW50cyA9IHNyY0VsZW1lbnRzIHx8IGdldEFsbCggZWxlbSApOwor
ICAgICAgICAgICAgICAgIGRlc3RFbGVtZW50cyA9IGRlc3RFbGVtZW50cyB8fCBnZXRBbGwoIGNs
b25lICk7CisKKyAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxl
bmd0aDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgY2xvbmVDb3B5RXZlbnQo
IHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjbG9uZUNvcHlFdmVudCgg
ZWxlbSwgY2xvbmUgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFBy
ZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3RvcnkKKyAgICAgICAgZGVzdEVsZW1lbnRzID0g
Z2V0QWxsKCBjbG9uZSwgInNjcmlwdCIgKTsKKyAgICAgICAgaWYgKCBkZXN0RWxlbWVudHMubGVu
Z3RoID4gMCApIHsKKyAgICAgICAgICAgIHNldEdsb2JhbEV2YWwoIGRlc3RFbGVtZW50cywgIWlu
UGFnZSAmJiBnZXRBbGwoIGVsZW0sICJzY3JpcHQiICkgKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIFJldHVybiB0aGUgY2xvbmVkIHNldAorICAgICAgICByZXR1cm4gY2xvbmU7CisgICAgfSwK
KworICAgIGNsZWFuRGF0YTogZnVuY3Rpb24oIGVsZW1zICkgeworICAgICAgICB2YXIgZGF0YSwg
ZWxlbSwgdHlwZSwKKyAgICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbCwK
KyAgICAgICAgICAgIGkgPSAwOworCisgICAgICAgIGZvciAoIDsgKCBlbGVtID0gZWxlbXNbIGkg
XSApICE9PSB1bmRlZmluZWQ7IGkrKyApIHsKKyAgICAgICAgICAgIGlmICggYWNjZXB0RGF0YSgg
ZWxlbSApICkgeworICAgICAgICAgICAgICAgIGlmICggKCBkYXRhID0gZWxlbVsgZGF0YVByaXYu
ZXhwYW5kbyBdICkgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggZGF0YS5ldmVudHMgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3BlY2lhbFsgdHlwZSBdICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0
eXBlICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgc2hvcnRj
dXQgdG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IENocm9tZSA8
PTM1IC0gNDUrCisgICAgICAgICAgICAgICAgICAgIC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVh
ZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZQorICAgICAgICAgICAgICAgICAgICBl
bGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmICggZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdICkgeworCisgICAg
ICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDUrCisgICAgICAgICAg
ICAgICAgICAgIC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNl
ZSBEYXRhI3JlbW92ZQorICAgICAgICAgICAgICAgICAgICBlbGVtWyBkYXRhVXNlci5leHBhbmRv
IF0gPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorfSApOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisgICAgZGV0YWNoOiBmdW5j
dGlvbiggc2VsZWN0b3IgKSB7CisgICAgICAgIHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9y
LCB0cnVlICk7CisgICAgfSwKKworICAgIHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yICkgewor
ICAgICAgICByZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciApOworICAgIH0sCisKKyAgICB0
ZXh0OiBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgIHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1
bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVk
ID8KKyAgICAgICAgICAgICAgICBqUXVlcnkudGV4dCggdGhpcyApIDoKKyAgICAgICAgICAgICAg
ICB0aGlzLmVtcHR5KCkuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5v
ZGVUeXBlID09PSA5ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0Q29udGVu
dCA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSApOwor
ICAgICAgICB9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApOworICAgIH0sCisKKyAg
ICBhcHBlbmQ6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFy
Z3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICBpZiAoIHRoaXMubm9kZVR5
cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSAp
IHsKKyAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlz
LCBlbGVtICk7CisgICAgICAgICAgICAgICAgdGFyZ2V0LmFwcGVuZENoaWxkKCBlbGVtICk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAgICB9LAorCisgICAgcHJlcGVuZDogZnVuY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlv
biggZWxlbSApIHsKKyAgICAgICAgICAgIGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlz
Lm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkgeworICAgICAgICAgICAg
ICAgIHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTsKKyAgICAg
ICAgICAgICAgICB0YXJnZXQuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0YXJnZXQuZmlyc3RDaGlsZCAp
OworICAgICAgICAgICAgfQorICAgICAgICB9ICk7CisgICAgfSwKKworICAgIGJlZm9yZTogZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5j
dGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIGlmICggdGhpcy5wYXJlbnROb2RlICkgeworICAg
ICAgICAgICAgICAgIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOworICAgIH0sCisKKyAgICBhZnRlcjogZnVuY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlv
biggZWxlbSApIHsKKyAgICAgICAgICAgIGlmICggdGhpcy5wYXJlbnROb2RlICkgeworICAgICAg
ICAgICAgICAgIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNp
YmxpbmcgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOworICAgIH0sCisKKyAgICBlbXB0
eTogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBlbGVtLAorICAgICAgICAgICAgaSA9IDA7CisK
KyAgICAgICAgZm9yICggOyAoIGVsZW0gPSB0aGlzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7Cisg
ICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CisKKyAgICAgICAgICAgICAg
ICAvLyBQcmV2ZW50IG1lbW9yeSBsZWFrcworICAgICAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRh
dGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApOworCisgICAgICAgICAgICAgICAgLy8gUmVtb3Zl
IGFueSByZW1haW5pbmcgbm9kZXMKKyAgICAgICAgICAgICAgICBlbGVtLnRleHRDb250ZW50ID0g
IiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICB9LAorCisgICAgY2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2
ZW50cyApIHsKKyAgICAgICAgZGF0YUFuZEV2ZW50cyA9IGRhdGFBbmRFdmVudHMgPT0gbnVsbCA/
IGZhbHNlIDogZGF0YUFuZEV2ZW50czsKKyAgICAgICAgZGVlcERhdGFBbmRFdmVudHMgPSBkZWVw
RGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRz
OworCisgICAgICAgIHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBy
ZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50
cyApOworICAgICAgICB9ICk7CisgICAgfSwKKworICAgIGh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSAp
IHsKKyAgICAgICAgcmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkgeworICAg
ICAgICAgICAgdmFyIGVsZW0gPSB0aGlzWyAwIF0gfHwge30sCisgICAgICAgICAgICAgICAgaSA9
IDAsCisgICAgICAgICAgICAgICAgbCA9IHRoaXMubGVuZ3RoOworCisgICAgICAgICAgICBpZiAo
IHZhbHVlID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZWxlbS5pbm5lckhUTUw7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhU
TUwKKyAgICAgICAgICAgIGlmICggdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJiAhcm5vSW5u
ZXJodG1sLnRlc3QoIHZhbHVlICkgJiYKKyAgICAgICAgICAgICAgICAhd3JhcE1hcFsgKCBydGFn
TmFtZS5leGVjKCB2YWx1ZSApIHx8IFsgIiIsICIiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCkgXSAp
IHsKKworICAgICAgICAgICAgICAgIHZhbHVlID0galF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIHZhbHVl
ICk7CisKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKCA7
IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gdGhpc1sgaSBd
IHx8IHt9OworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgZWxlbWVudCBub2Rl
cyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
ZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVl
cnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbGVtLmlubmVySFRNTCA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZWxlbSA9
IDA7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB1c2luZyBpbm5lckhUTUwgdGhyb3dzIGFuIGV4
Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2QKKyAgICAgICAgICAgICAgICB9IGNhdGNo
ICggZSApIHt9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggZWxlbSApIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApOworICAgICAgICAgICAg
fQorICAgICAgICB9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApOworICAgIH0sCisK
KyAgICByZXBsYWNlV2l0aDogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZ25vcmVkID0gW107
CisKKyAgICAgICAgLy8gTWFrZSB0aGUgY2hhbmdlcywgcmVwbGFjaW5nIGVhY2ggbm9uLWlnbm9y
ZWQgY29udGV4dCBlbGVtZW50IHdpdGggdGhlIG5ldyBjb250ZW50CisgICAgICAgIHJldHVybiBk
b21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAg
IHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7CisKKyAgICAgICAgICAgIGlmICggalF1ZXJ5
LmluQXJyYXkoIHRoaXMsIGlnbm9yZWQgKSA8IDAgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5
LmNsZWFuRGF0YSggZ2V0QWxsKCB0aGlzICkgKTsKKyAgICAgICAgICAgICAgICBpZiAoIHBhcmVu
dCApIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZCggZWxlbSwgdGhp
cyApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAvLyBGb3Jj
ZSBjYWxsYmFjayBpbnZvY2F0aW9uCisgICAgICAgIH0sIGlnbm9yZWQgKTsKKyAgICB9Cit9ICk7
CisKK2pRdWVyeS5lYWNoKCB7CisgICAgYXBwZW5kVG86ICJhcHBlbmQiLAorICAgIHByZXBlbmRU
bzogInByZXBlbmQiLAorICAgIGluc2VydEJlZm9yZTogImJlZm9yZSIsCisgICAgaW5zZXJ0QWZ0
ZXI6ICJhZnRlciIsCisgICAgcmVwbGFjZUFsbDogInJlcGxhY2VXaXRoIgorfSwgZnVuY3Rpb24o
IG5hbWUsIG9yaWdpbmFsICkgeworICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNl
bGVjdG9yICkgeworICAgICAgICB2YXIgZWxlbXMsCisgICAgICAgICAgICByZXQgPSBbXSwKKyAg
ICAgICAgICAgIGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSwKKyAgICAgICAgICAgIGxhc3Qg
PSBpbnNlcnQubGVuZ3RoIC0gMSwKKyAgICAgICAgICAgIGkgPSAwOworCisgICAgICAgIGZvciAo
IDsgaSA8PSBsYXN0OyBpKysgKSB7CisgICAgICAgICAgICBlbGVtcyA9IGkgPT09IGxhc3QgPyB0
aGlzIDogdGhpcy5jbG9uZSggdHJ1ZSApOworICAgICAgICAgICAgalF1ZXJ5KCBpbnNlcnRbIGkg
XSApWyBvcmlnaW5hbCBdKCBlbGVtcyApOworCisgICAgICAgICAgICAvLyBTdXBwb3J0OiBBbmRy
b2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHkKKyAgICAgICAgICAgIC8vIC5nZXQoKSBi
ZWNhdXNlIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXQK
KyAgICAgICAgICAgIHB1c2guYXBwbHkoIHJldCwgZWxlbXMuZ2V0KCkgKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0ICk7CisgICAgfTsKK30gKTsKK3Zh
ciBybWFyZ2luID0gKCAvXm1hcmdpbi8gKTsKKwordmFyIHJudW1ub25weCA9IG5ldyBSZWdFeHAo
ICJeKCIgKyBwbnVtICsgIikoPyFweClbYS16JV0rJCIsICJpIiApOworCit2YXIgZ2V0U3R5bGVz
ID0gZnVuY3Rpb24oIGVsZW0gKSB7CisKKyAgICAgICAgLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5
LCBGaXJlZm94IDw9MzAgKCMxNTA5OCwgIzE0MTUwKQorICAgICAgICAvLyBJRSB0aHJvd3Mgb24g
ZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHMKKyAgICAgICAgLy8gRkYgbWVhbndoaWxlIHRocm93
cyBvbiBmcmFtZSBlbGVtZW50cyB0aHJvdWdoICJkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxl
IgorICAgICAgICB2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldzsKKwor
ICAgICAgICBpZiAoICF2aWV3IHx8ICF2aWV3Lm9wZW5lciApIHsKKyAgICAgICAgICAgIHZpZXcg
PSB3aW5kb3c7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdmlldy5nZXRDb21wdXRlZFN0
eWxlKCBlbGVtICk7CisgICAgfTsKKworCisKKyggZnVuY3Rpb24oKSB7CisKKyAgICAvLyBFeGVj
dXRpbmcgYm90aCBwaXhlbFBvc2l0aW9uICYgYm94U2l6aW5nUmVsaWFibGUgdGVzdHMgcmVxdWly
ZSBvbmx5IG9uZSBsYXlvdXQKKyAgICAvLyBzbyB0aGV5J3JlIGV4ZWN1dGVkIGF0IHRoZSBzYW1l
IHRpbWUgdG8gc2F2ZSB0aGUgc2Vjb25kIGNvbXB1dGF0aW9uLgorICAgIGZ1bmN0aW9uIGNvbXB1
dGVTdHlsZVRlc3RzKCkgeworCisgICAgICAgIC8vIFRoaXMgaXMgYSBzaW5nbGV0b24sIHdlIG5l
ZWQgdG8gZXhlY3V0ZSBpdCBvbmx5IG9uY2UKKyAgICAgICAgaWYgKCAhZGl2ICkgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZGl2LnN0eWxlLmNzc1RleHQgPQor
ICAgICAgICAgICAgImJveC1zaXppbmc6Ym9yZGVyLWJveDsiICsKKyAgICAgICAgICAgICJwb3Np
dGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrOyIgKworICAgICAgICAgICAgIm1hcmdpbjphdXRv
O2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7IiArCisgICAgICAgICAgICAidG9wOjElO3dpZHRoOjUw
JSI7CisgICAgICAgIGRpdi5pbm5lckhUTUwgPSAiIjsKKyAgICAgICAgZG9jdW1lbnRFbGVtZW50
LmFwcGVuZENoaWxkKCBjb250YWluZXIgKTsKKworICAgICAgICB2YXIgZGl2U3R5bGUgPSB3aW5k
b3cuZ2V0Q29tcHV0ZWRTdHlsZSggZGl2ICk7CisgICAgICAgIHBpeGVsUG9zaXRpb25WYWwgPSBk
aXZTdHlsZS50b3AgIT09ICIxJSI7CisKKyAgICAgICAgLy8gU3VwcG9ydDogQW5kcm9pZCA0LjAg
LSA0LjMgb25seSwgRmlyZWZveCA8PTMgLSA0NAorICAgICAgICByZWxpYWJsZU1hcmdpbkxlZnRW
YWwgPSBkaXZTdHlsZS5tYXJnaW5MZWZ0ID09PSAiMnB4IjsKKyAgICAgICAgYm94U2l6aW5nUmVs
aWFibGVWYWwgPSBkaXZTdHlsZS53aWR0aCA9PT0gIjRweCI7CisKKyAgICAgICAgLy8gU3VwcG9y
dDogQW5kcm9pZCA0LjAgLSA0LjMgb25seQorICAgICAgICAvLyBTb21lIHN0eWxlcyBjb21lIGJh
Y2sgd2l0aCBwZXJjZW50YWdlIHZhbHVlcywgZXZlbiB0aG91Z2ggdGhleSBzaG91bGRuJ3QKKyAg
ICAgICAgZGl2LnN0eWxlLm1hcmdpblJpZ2h0ID0gIjUwJSI7CisgICAgICAgIHBpeGVsTWFyZ2lu
UmlnaHRWYWwgPSBkaXZTdHlsZS5tYXJnaW5SaWdodCA9PT0gIjRweCI7CisKKyAgICAgICAgZG9j
dW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTsKKworICAgICAgICAvLyBOdWxs
aWZ5IHRoZSBkaXYgc28gaXQgd291bGRuJ3QgYmUgc3RvcmVkIGluIHRoZSBtZW1vcnkgYW5kCisg
ICAgICAgIC8vIGl0IHdpbGwgYWxzbyBiZSBhIHNpZ24gdGhhdCBjaGVja3MgYWxyZWFkeSBwZXJm
b3JtZWQKKyAgICAgICAgZGl2ID0gbnVsbDsKKyAgICB9CisKKyAgICB2YXIgcGl4ZWxQb3NpdGlv
blZhbCwgYm94U2l6aW5nUmVsaWFibGVWYWwsIHBpeGVsTWFyZ2luUmlnaHRWYWwsIHJlbGlhYmxl
TWFyZ2luTGVmdFZhbCwKKyAgICAgICAgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCggImRpdiIgKSwKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImRpdiIg
KTsKKworICAgIC8vIEZpbmlzaCBlYXJseSBpbiBsaW1pdGVkIChub24tYnJvd3NlcikgZW52aXJv
bm1lbnRzCisgICAgaWYgKCAhZGl2LnN0eWxlICkgeworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgLy8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seQorICAgIC8vIFN0eWxlIG9mIGNsb25l
ZCBlbGVtZW50IGFmZmVjdHMgc291cmNlIGVsZW1lbnQgY2xvbmVkICgjODkwOCkKKyAgICBkaXYu
c3R5bGUuYmFja2dyb3VuZENsaXAgPSAiY29udGVudC1ib3giOworICAgIGRpdi5jbG9uZU5vZGUo
IHRydWUgKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9ICIiOworICAgIHN1cHBvcnQuY2xlYXJDbG9u
ZVN0eWxlID0gZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID09PSAiY29udGVudC1ib3giOworCisg
ICAgY29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSAiYm9yZGVyOjA7d2lkdGg6OHB4O2hlaWdodDow
O3RvcDowO2xlZnQ6LTk5OTlweDsiICsKKyAgICAgICAgInBhZGRpbmc6MDttYXJnaW4tdG9wOjFw
eDtwb3NpdGlvbjphYnNvbHV0ZSI7CisgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKCBkaXYgKTsK
KworICAgIGpRdWVyeS5leHRlbmQoIHN1cHBvcnQsIHsKKyAgICAgICAgcGl4ZWxQb3NpdGlvbjog
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBjb21wdXRlU3R5bGVUZXN0cygpOworICAgICAgICAg
ICAgcmV0dXJuIHBpeGVsUG9zaXRpb25WYWw7CisgICAgICAgIH0sCisgICAgICAgIGJveFNpemlu
Z1JlbGlhYmxlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGNvbXB1dGVTdHlsZVRlc3RzKCk7
CisgICAgICAgICAgICByZXR1cm4gYm94U2l6aW5nUmVsaWFibGVWYWw7CisgICAgICAgIH0sCisg
ICAgICAgIHBpeGVsTWFyZ2luUmlnaHQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgY29tcHV0
ZVN0eWxlVGVzdHMoKTsKKyAgICAgICAgICAgIHJldHVybiBwaXhlbE1hcmdpblJpZ2h0VmFsOwor
ICAgICAgICB9LAorICAgICAgICByZWxpYWJsZU1hcmdpbkxlZnQ6IGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgY29tcHV0ZVN0eWxlVGVzdHMoKTsKKyAgICAgICAgICAgIHJldHVybiByZWxpYWJs
ZU1hcmdpbkxlZnRWYWw7CisgICAgICAgIH0KKyAgICB9ICk7Cit9ICkoKTsKKworCitmdW5jdGlv
biBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkgeworICAgIHZhciB3aWR0aCwgbWluV2lk
dGgsIG1heFdpZHRoLCByZXQsCisgICAgICAgIHN0eWxlID0gZWxlbS5zdHlsZTsKKworICAgIGNv
bXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7CisKKyAgICAvLyBTdXBwb3J0
OiBJRSA8PTkgb25seQorICAgIC8vIGdldFByb3BlcnR5VmFsdWUgaXMgb25seSBuZWVkZWQgZm9y
IC5jc3MoJ2ZpbHRlcicpICgjMTI1MzcpCisgICAgaWYgKCBjb21wdXRlZCApIHsKKyAgICAgICAg
cmV0ID0gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSApIHx8IGNvbXB1dGVkWyBuYW1l
IF07CisKKyAgICAgICAgaWYgKCByZXQgPT09ICIiICYmICFqUXVlcnkuY29udGFpbnMoIGVsZW0u
b3duZXJEb2N1bWVudCwgZWxlbSApICkgeworICAgICAgICAgICAgcmV0ID0galF1ZXJ5LnN0eWxl
KCBlbGVtLCBuYW1lICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBBIHRyaWJ1dGUgdG8gdGhl
ICJhd2Vzb21lIGhhY2sgYnkgRGVhbiBFZHdhcmRzIgorICAgICAgICAvLyBBbmRyb2lkIEJyb3dz
ZXIgcmV0dXJucyBwZXJjZW50YWdlIGZvciBzb21lIHZhbHVlcywKKyAgICAgICAgLy8gYnV0IHdp
ZHRoIHNlZW1zIHRvIGJlIHJlbGlhYmx5IHBpeGVscy4KKyAgICAgICAgLy8gVGhpcyBpcyBhZ2Fp
bnN0IHRoZSBDU1NPTSBkcmFmdCBzcGVjOgorICAgICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3
Zy5vcmcvY3Nzb20vI3Jlc29sdmVkLXZhbHVlcworICAgICAgICBpZiAoICFzdXBwb3J0LnBpeGVs
TWFyZ2luUmlnaHQoKSAmJiBybnVtbm9ucHgudGVzdCggcmV0ICkgJiYgcm1hcmdpbi50ZXN0KCBu
YW1lICkgKSB7CisKKyAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXMK
KyAgICAgICAgICAgIHdpZHRoID0gc3R5bGUud2lkdGg7CisgICAgICAgICAgICBtaW5XaWR0aCA9
IHN0eWxlLm1pbldpZHRoOworICAgICAgICAgICAgbWF4V2lkdGggPSBzdHlsZS5tYXhXaWR0aDsK
KworICAgICAgICAgICAgLy8gUHV0IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1dGVk
IHZhbHVlIG91dAorICAgICAgICAgICAgc3R5bGUubWluV2lkdGggPSBzdHlsZS5tYXhXaWR0aCA9
IHN0eWxlLndpZHRoID0gcmV0OworICAgICAgICAgICAgcmV0ID0gY29tcHV0ZWQud2lkdGg7CisK
KyAgICAgICAgICAgIC8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXMKKyAgICAgICAgICAgIHN0
eWxlLndpZHRoID0gd2lkdGg7CisgICAgICAgICAgICBzdHlsZS5taW5XaWR0aCA9IG1pbldpZHRo
OworICAgICAgICAgICAgc3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiByZXQgIT09IHVuZGVmaW5lZCA/CisKKyAgICAgICAgLy8gU3VwcG9y
dDogSUUgPD05IC0gMTEgb25seQorICAgICAgICAvLyBJRSByZXR1cm5zIHpJbmRleCB2YWx1ZSBh
cyBhbiBpbnRlZ2VyLgorICAgICAgICByZXQgKyAiIiA6CisgICAgICAgIHJldDsKK30KKworCitm
dW5jdGlvbiBhZGRHZXRIb29rSWYoIGNvbmRpdGlvbkZuLCBob29rRm4gKSB7CisKKyAgICAvLyBE
ZWZpbmUgdGhlIGhvb2ssIHdlJ2xsIGNoZWNrIG9uIHRoZSBmaXJzdCBydW4gaWYgaXQncyByZWFs
bHkgbmVlZGVkLgorICAgIHJldHVybiB7CisgICAgICAgIGdldDogZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICBpZiAoIGNvbmRpdGlvbkZuKCkgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBIb29r
IG5vdCBuZWVkZWQgKG9yIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBpdCBkdWUKKyAgICAgICAg
ICAgICAgICAvLyB0byBtaXNzaW5nIGRlcGVuZGVuY3kpLCByZW1vdmUgaXQuCisgICAgICAgICAg
ICAgICAgZGVsZXRlIHRoaXMuZ2V0OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gSG9vayBuZWVkZWQ7IHJlZGVmaW5lIGl0IHNvIHRoYXQg
dGhlIHN1cHBvcnQgdGVzdCBpcyBub3QgZXhlY3V0ZWQgYWdhaW4uCisgICAgICAgICAgICByZXR1
cm4gKCB0aGlzLmdldCA9IGhvb2tGbiApLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKKyAgICAg
ICAgfQorICAgIH07Cit9CisKKwordmFyCisKKyAgICAvLyBTd2FwcGFibGUgaWYgZGlzcGxheSBp
cyBub25lIG9yIHN0YXJ0cyB3aXRoIHRhYmxlCisgICAgLy8gZXhjZXB0ICJ0YWJsZSIsICJ0YWJs
ZS1jZWxsIiwgb3IgInRhYmxlLWNhcHRpb24iCisgICAgLy8gU2VlIGhlcmUgZm9yIGRpc3BsYXkg
dmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9kaXNw
bGF5CisgICAgcmRpc3BsYXlzd2FwID0gL14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLAorICAg
IGNzc1Nob3cgPSB7IHBvc2l0aW9uOiAiYWJzb2x1dGUiLCB2aXNpYmlsaXR5OiAiaGlkZGVuIiwg
ZGlzcGxheTogImJsb2NrIiB9LAorICAgIGNzc05vcm1hbFRyYW5zZm9ybSA9IHsKKyAgICAgICAg
bGV0dGVyU3BhY2luZzogIjAiLAorICAgICAgICBmb250V2VpZ2h0OiAiNDAwIgorICAgIH0sCisK
KyAgICBjc3NQcmVmaXhlcyA9IFsgIldlYmtpdCIsICJNb3oiLCAibXMiIF0sCisgICAgZW1wdHlT
dHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICkuc3R5bGU7CisKKy8vIFJldHVy
biBhIGNzcyBwcm9wZXJ0eSBtYXBwZWQgdG8gYSBwb3RlbnRpYWxseSB2ZW5kb3IgcHJlZml4ZWQg
cHJvcGVydHkKK2Z1bmN0aW9uIHZlbmRvclByb3BOYW1lKCBuYW1lICkgeworCisgICAgLy8gU2hv
cnRjdXQgZm9yIG5hbWVzIHRoYXQgYXJlIG5vdCB2ZW5kb3IgcHJlZml4ZWQKKyAgICBpZiAoIG5h
bWUgaW4gZW1wdHlTdHlsZSApIHsKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgfQorCisgICAg
Ly8gQ2hlY2sgZm9yIHZlbmRvciBwcmVmaXhlZCBuYW1lcworICAgIHZhciBjYXBOYW1lID0gbmFt
ZVsgMCBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKCAxICksCisgICAgICAgIGkgPSBjc3NQ
cmVmaXhlcy5sZW5ndGg7CisKKyAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgbmFtZSA9IGNz
c1ByZWZpeGVzWyBpIF0gKyBjYXBOYW1lOworICAgICAgICBpZiAoIG5hbWUgaW4gZW1wdHlTdHls
ZSApIHsKKyAgICAgICAgICAgIHJldHVybiBuYW1lOworICAgICAgICB9CisgICAgfQorfQorCitm
dW5jdGlvbiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICkgeworCisg
ICAgLy8gQW55IHJlbGF0aXZlICgrLy0pIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlbgorICAgIC8v
IG5vcm1hbGl6ZWQgYXQgdGhpcyBwb2ludAorICAgIHZhciBtYXRjaGVzID0gcmNzc051bS5leGVj
KCB2YWx1ZSApOworICAgIHJldHVybiBtYXRjaGVzID8KKworICAgICAgICAvLyBHdWFyZCBhZ2Fp
bnN0IHVuZGVmaW5lZCAic3VidHJhY3QiLCBlLmcuLCB3aGVuIHVzZWQgYXMgaW4gY3NzSG9va3MK
KyAgICAgICAgTWF0aC5tYXgoIDAsIG1hdGNoZXNbIDIgXSAtICggc3VidHJhY3QgfHwgMCApICkg
KyAoIG1hdGNoZXNbIDMgXSB8fCAicHgiICkgOgorICAgICAgICB2YWx1ZTsKK30KKworZnVuY3Rp
b24gYXVnbWVudFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhLCBpc0JvcmRlckJveCwg
c3R5bGVzICkgeworICAgIHZhciBpLAorICAgICAgICB2YWwgPSAwOworCisgICAgLy8gSWYgd2Ug
YWxyZWFkeSBoYXZlIHRoZSByaWdodCBtZWFzdXJlbWVudCwgYXZvaWQgYXVnbWVudGF0aW9uCisg
ICAgaWYgKCBleHRyYSA9PT0gKCBpc0JvcmRlckJveCA/ICJib3JkZXIiIDogImNvbnRlbnQiICkg
KSB7CisgICAgICAgIGkgPSA0OworCisgICAgLy8gT3RoZXJ3aXNlIGluaXRpYWxpemUgZm9yIGhv
cml6b250YWwgb3IgdmVydGljYWwgcHJvcGVydGllcworICAgIH0gZWxzZSB7CisgICAgICAgIGkg
PSBuYW1lID09PSAid2lkdGgiID8gMSA6IDA7CisgICAgfQorCisgICAgZm9yICggOyBpIDwgNDsg
aSArPSAyICkgeworCisgICAgICAgIC8vIEJvdGggYm94IG1vZGVscyBleGNsdWRlIG1hcmdpbiwg
c28gYWRkIGl0IGlmIHdlIHdhbnQgaXQKKyAgICAgICAgaWYgKCBleHRyYSA9PT0gIm1hcmdpbiIg
KSB7CisgICAgICAgICAgICB2YWwgKz0galF1ZXJ5LmNzcyggZWxlbSwgZXh0cmEgKyBjc3NFeHBh
bmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGlzQm9y
ZGVyQm94ICkgeworCisgICAgICAgICAgICAvLyBib3JkZXItYm94IGluY2x1ZGVzIHBhZGRpbmcs
IHNvIHJlbW92ZSBpdCBpZiB3ZSB3YW50IGNvbnRlbnQKKyAgICAgICAgICAgIGlmICggZXh0cmEg
PT09ICJjb250ZW50IiApIHsKKyAgICAgICAgICAgICAgICB2YWwgLT0galF1ZXJ5LmNzcyggZWxl
bSwgInBhZGRpbmciICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBib3JkZXIg
bm9yIG1hcmdpbiwgc28gcmVtb3ZlIGJvcmRlcgorICAgICAgICAgICAgaWYgKCBleHRyYSAhPT0g
Im1hcmdpbiIgKSB7CisgICAgICAgICAgICAgICAgdmFsIC09IGpRdWVyeS5jc3MoIGVsZW0sICJi
b3JkZXIiICsgY3NzRXhwYW5kWyBpIF0gKyAiV2lkdGgiLCB0cnVlLCBzdHlsZXMgKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2lu
dCwgZXh0cmEgaXNuJ3QgY29udGVudCwgc28gYWRkIHBhZGRpbmcKKyAgICAgICAgICAgIHZhbCAr
PSBqUXVlcnkuY3NzKCBlbGVtLCAicGFkZGluZyIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5
bGVzICk7CisKKyAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIGV4dHJhIGlzbid0IGNvbnRl
bnQgbm9yIHBhZGRpbmcsIHNvIGFkZCBib3JkZXIKKyAgICAgICAgICAgIGlmICggZXh0cmEgIT09
ICJwYWRkaW5nIiApIHsKKyAgICAgICAgICAgICAgICB2YWwgKz0galF1ZXJ5LmNzcyggZWxlbSwg
ImJvcmRlciIgKyBjc3NFeHBhbmRbIGkgXSArICJXaWR0aCIsIHRydWUsIHN0eWxlcyApOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHZhbDsKK30KKworZnVu
Y3Rpb24gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKSB7CisKKyAgICAvLyBT
dGFydCB3aXRoIG9mZnNldCBwcm9wZXJ0eSwgd2hpY2ggaXMgZXF1aXZhbGVudCB0byB0aGUgYm9y
ZGVyLWJveCB2YWx1ZQorICAgIHZhciB2YWwsCisgICAgICAgIHZhbHVlSXNCb3JkZXJCb3ggPSB0
cnVlLAorICAgICAgICBzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSwKKyAgICAgICAgaXNCb3Jk
ZXJCb3ggPSBqUXVlcnkuY3NzKCBlbGVtLCAiYm94U2l6aW5nIiwgZmFsc2UsIHN0eWxlcyApID09
PSAiYm9yZGVyLWJveCI7CisKKyAgICAvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHkKKyAgICAvLyBS
dW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlCisgICAg
Ly8gaW4gSUUgdGhyb3dzIGFuIGVycm9yLgorICAgIGlmICggZWxlbS5nZXRDbGllbnRSZWN0cygp
Lmxlbmd0aCApIHsKKyAgICAgICAgdmFsID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVsg
bmFtZSBdOworICAgIH0KKworICAgIC8vIFNvbWUgbm9uLWh0bWwgZWxlbWVudHMgcmV0dXJuIHVu
ZGVmaW5lZCBmb3Igb2Zmc2V0V2lkdGgsIHNvIGNoZWNrIGZvciBudWxsL3VuZGVmaW5lZAorICAg
IC8vIHN2ZyAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY0
OTI4NQorICAgIC8vIE1hdGhNTCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ5MTY2OAorICAgIGlmICggdmFsIDw9IDAgfHwgdmFsID09IG51bGwgKSB7CisK
KyAgICAgICAgLy8gRmFsbCBiYWNrIHRvIGNvbXB1dGVkIHRoZW4gdW5jb21wdXRlZCBjc3MgaWYg
bmVjZXNzYXJ5CisgICAgICAgIHZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSwgc3R5bGVzICk7Cisg
ICAgICAgIGlmICggdmFsIDwgMCB8fCB2YWwgPT0gbnVsbCApIHsKKyAgICAgICAgICAgIHZhbCA9
IGVsZW0uc3R5bGVbIG5hbWUgXTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENvbXB1dGVkIHVu
aXQgaXMgbm90IHBpeGVscy4gU3RvcCBoZXJlIGFuZCByZXR1cm4uCisgICAgICAgIGlmICggcm51
bW5vbnB4LnRlc3QoIHZhbCApICkgeworICAgICAgICAgICAgcmV0dXJuIHZhbDsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIENoZWNrIGZvciBzdHlsZSBpbiBjYXNlIGEgYnJvd3NlciB3aGljaCBy
ZXR1cm5zIHVucmVsaWFibGUgdmFsdWVzCisgICAgICAgIC8vIGZvciBnZXRDb21wdXRlZFN0eWxl
IHNpbGVudGx5IGZhbGxzIGJhY2sgdG8gdGhlIHJlbGlhYmxlIGVsZW0uc3R5bGUKKyAgICAgICAg
dmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94ICYmCisgICAgICAgICAgICAoIHN1cHBvcnQu
Ym94U2l6aW5nUmVsaWFibGUoKSB8fCB2YWwgPT09IGVsZW0uc3R5bGVbIG5hbWUgXSApOworCisg
ICAgICAgIC8vIE5vcm1hbGl6ZSAiIiwgYXV0bywgYW5kIHByZXBhcmUgZm9yIGV4dHJhCisgICAg
ICAgIHZhbCA9IHBhcnNlRmxvYXQoIHZhbCApIHx8IDA7CisgICAgfQorCisgICAgLy8gVXNlIHRo
ZSBhY3RpdmUgYm94LXNpemluZyBtb2RlbCB0byBhZGQvc3VidHJhY3QgaXJyZWxldmFudCBzdHls
ZXMKKyAgICByZXR1cm4gKCB2YWwgKworICAgICAgICBhdWdtZW50V2lkdGhPckhlaWdodCgKKyAg
ICAgICAgICAgIGVsZW0sCisgICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAgZXh0cmEgfHwg
KCBpc0JvcmRlckJveCA/ICJib3JkZXIiIDogImNvbnRlbnQiICksCisgICAgICAgICAgICB2YWx1
ZUlzQm9yZGVyQm94LAorICAgICAgICAgICAgc3R5bGVzCisgICAgICAgICkKKyAgICApICsgInB4
IjsKK30KKworalF1ZXJ5LmV4dGVuZCggeworCisgICAgLy8gQWRkIGluIHN0eWxlIHByb3BlcnR5
IGhvb2tzIGZvciBvdmVycmlkaW5nIHRoZSBkZWZhdWx0CisgICAgLy8gYmVoYXZpb3Igb2YgZ2V0
dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5CisgICAgY3NzSG9va3M6IHsKKyAgICAg
ICAgb3BhY2l0eTogeworICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQg
KSB7CisgICAgICAgICAgICAgICAgaWYgKCBjb21wdXRlZCApIHsKKworICAgICAgICAgICAgICAg
ICAgICAvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eQor
ICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gY3VyQ1NTKCBlbGVtLCAib3BhY2l0eSIgKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldCA9PT0gIiIgPyAiMSIgOiByZXQ7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSwKKworICAgIC8v
IERvbid0IGF1dG9tYXRpY2FsbHkgYWRkICJweCIgdG8gdGhlc2UgcG9zc2libHktdW5pdGxlc3Mg
cHJvcGVydGllcworICAgIGNzc051bWJlcjogeworICAgICAgICAiYW5pbWF0aW9uSXRlcmF0aW9u
Q291bnQiOiB0cnVlLAorICAgICAgICAiY29sdW1uQ291bnQiOiB0cnVlLAorICAgICAgICAiZmls
bE9wYWNpdHkiOiB0cnVlLAorICAgICAgICAiZmxleEdyb3ciOiB0cnVlLAorICAgICAgICAiZmxl
eFNocmluayI6IHRydWUsCisgICAgICAgICJmb250V2VpZ2h0IjogdHJ1ZSwKKyAgICAgICAgImxp
bmVIZWlnaHQiOiB0cnVlLAorICAgICAgICAib3BhY2l0eSI6IHRydWUsCisgICAgICAgICJvcmRl
ciI6IHRydWUsCisgICAgICAgICJvcnBoYW5zIjogdHJ1ZSwKKyAgICAgICAgIndpZG93cyI6IHRy
dWUsCisgICAgICAgICJ6SW5kZXgiOiB0cnVlLAorICAgICAgICAiem9vbSI6IHRydWUKKyAgICB9
LAorCisgICAgLy8gQWRkIGluIHByb3BlcnRpZXMgd2hvc2UgbmFtZXMgeW91IHdpc2ggdG8gZml4
IGJlZm9yZQorICAgIC8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWUKKyAgICBjc3NQcm9w
czogeworICAgICAgICAiZmxvYXQiOiAiY3NzRmxvYXQiCisgICAgfSwKKworICAgIC8vIEdldCBh
bmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlCisgICAgc3R5bGU6IGZ1bmN0
aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7CisKKyAgICAgICAgLy8gRG9uJ3Qgc2V0
IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzCisgICAgICAgIGlmICggIWVsZW0gfHwg
ZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4IHx8ICFlbGVtLnN0eWxl
ICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gTWFrZSBz
dXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lCisgICAgICAgIHZhciBy
ZXQsIHR5cGUsIGhvb2tzLAorICAgICAgICAgICAgb3JpZ05hbWUgPSBqUXVlcnkuY2FtZWxDYXNl
KCBuYW1lICksCisgICAgICAgICAgICBzdHlsZSA9IGVsZW0uc3R5bGU7CisKKyAgICAgICAgbmFt
ZSA9IGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSB8fAorICAgICAgICAgICAgKCBqUXVlcnku
Y3NzUHJvcHNbIG9yaWdOYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggb3JpZ05hbWUgKSB8fCBvcmln
TmFtZSApOworCisgICAgICAgIC8vIEdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24s
IHRoZW4gdW5wcmVmaXhlZCB2ZXJzaW9uCisgICAgICAgIGhvb2tzID0galF1ZXJ5LmNzc0hvb2tz
WyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdOworCisgICAgICAgIC8vIENo
ZWNrIGlmIHdlJ3JlIHNldHRpbmcgYSB2YWx1ZQorICAgICAgICBpZiAoIHZhbHVlICE9PSB1bmRl
ZmluZWQgKSB7CisgICAgICAgICAgICB0eXBlID0gdHlwZW9mIHZhbHVlOworCisgICAgICAgICAg
ICAvLyBDb252ZXJ0ICIrPSIgb3IgIi09IiB0byByZWxhdGl2ZSBudW1iZXJzICgjNzM0NSkKKyAg
ICAgICAgICAgIGlmICggdHlwZSA9PT0gInN0cmluZyIgJiYgKCByZXQgPSByY3NzTnVtLmV4ZWMo
IHZhbHVlICkgKSAmJiByZXRbIDEgXSApIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGFkanVz
dENTUyggZWxlbSwgbmFtZSwgcmV0ICk7CisKKyAgICAgICAgICAgICAgICAvLyBGaXhlcyBidWcg
IzkyMzcKKyAgICAgICAgICAgICAgICB0eXBlID0gIm51bWJlciI7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IG51bGwgYW5kIE5hTiB2YWx1ZXMgYXJlbid0
IHNldCAoIzcxMTYpCisgICAgICAgICAgICBpZiAoIHZhbHVlID09IG51bGwgfHwgdmFsdWUgIT09
IHZhbHVlICkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gSWYgYSBudW1iZXIgd2FzIHBhc3NlZCBpbiwgYWRkIHRoZSB1bml0IChleGNl
cHQgZm9yIGNlcnRhaW4gQ1NTIHByb3BlcnRpZXMpCisgICAgICAgICAgICBpZiAoIHR5cGUgPT09
ICJudW1iZXIiICkgeworICAgICAgICAgICAgICAgIHZhbHVlICs9IHJldCAmJiByZXRbIDMgXSB8
fCAoIGpRdWVyeS5jc3NOdW1iZXJbIG9yaWdOYW1lIF0gPyAiIiA6ICJweCIgKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gYmFja2dyb3VuZC0qIHByb3BzIGFmZmVjdCBvcmlnaW5h
bCBjbG9uZSdzIHZhbHVlcworICAgICAgICAgICAgaWYgKCAhc3VwcG9ydC5jbGVhckNsb25lU3R5
bGUgJiYgdmFsdWUgPT09ICIiICYmIG5hbWUuaW5kZXhPZiggImJhY2tncm91bmQiICkgPT09IDAg
KSB7CisgICAgICAgICAgICAgICAgc3R5bGVbIG5hbWUgXSA9ICJpbmhlcml0IjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gSWYgYSBob29rIHdhcyBwcm92aWRlZCwgdXNlIHRoYXQg
dmFsdWUsIG90aGVyd2lzZSBqdXN0IHNldCB0aGUgc3BlY2lmaWVkIHZhbHVlCisgICAgICAgICAg
ICBpZiAoICFob29rcyB8fCAhKCAic2V0IiBpbiBob29rcyApIHx8CisgICAgICAgICAgICAgICAg
KCB2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVk
ICkgeworCisgICAgICAgICAgICAgICAgc3R5bGVbIG5hbWUgXSA9IHZhbHVlOworICAgICAgICAg
ICAgfQorCisgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgIC8vIElmIGEgaG9vayB3YXMg
cHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZQorICAgICAgICAg
ICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJgorICAgICAgICAgICAgICAgICggcmV0
ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7CisK
KyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBPdGhlcndpc2UganVzdCBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIHN0eWxlIG9iamVjdAor
ICAgICAgICAgICAgcmV0dXJuIHN0eWxlWyBuYW1lIF07CisgICAgICAgIH0KKyAgICB9LAorCisg
ICAgY3NzOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZXh0cmEsIHN0eWxlcyApIHsKKyAgICAgICAg
dmFyIHZhbCwgbnVtLCBob29rcywKKyAgICAgICAgICAgIG9yaWdOYW1lID0galF1ZXJ5LmNhbWVs
Q2FzZSggbmFtZSApOworCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcg
d2l0aCB0aGUgcmlnaHQgbmFtZQorICAgICAgICBuYW1lID0galF1ZXJ5LmNzc1Byb3BzWyBvcmln
TmFtZSBdIHx8CisgICAgICAgICAgICAoIGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSA9IHZl
bmRvclByb3BOYW1lKCBvcmlnTmFtZSApIHx8IG9yaWdOYW1lICk7CisKKyAgICAgICAgLy8gVHJ5
IHByZWZpeGVkIG5hbWUgZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgbmFtZQorICAgICAgICBo
b29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05h
bWUgXTsKKworICAgICAgICAvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgY29tcHV0
ZWQgdmFsdWUgZnJvbSB0aGVyZQorICAgICAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tz
ICkgeworICAgICAgICAgICAgdmFsID0gaG9va3MuZ2V0KCBlbGVtLCB0cnVlLCBleHRyYSApOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNv
bXB1dGVkIHZhbHVlIGV4aXN0cywgdXNlIHRoYXQKKyAgICAgICAgaWYgKCB2YWwgPT09IHVuZGVm
aW5lZCApIHsKKyAgICAgICAgICAgIHZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSwgc3R5bGVzICk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBDb252ZXJ0ICJub3JtYWwiIHRvIGNvbXB1dGVkIHZh
bHVlCisgICAgICAgIGlmICggdmFsID09PSAibm9ybWFsIiAmJiBuYW1lIGluIGNzc05vcm1hbFRy
YW5zZm9ybSApIHsKKyAgICAgICAgICAgIHZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBd
OworICAgICAgICB9CisKKyAgICAgICAgLy8gTWFrZSBudW1lcmljIGlmIGZvcmNlZCBvciBhIHF1
YWxpZmllciB3YXMgcHJvdmlkZWQgYW5kIHZhbCBsb29rcyBudW1lcmljCisgICAgICAgIGlmICgg
ZXh0cmEgPT09ICIiIHx8IGV4dHJhICkgeworICAgICAgICAgICAgbnVtID0gcGFyc2VGbG9hdCgg
dmFsICk7CisgICAgICAgICAgICByZXR1cm4gZXh0cmEgPT09IHRydWUgfHwgaXNGaW5pdGUoIG51
bSApID8gbnVtIHx8IDAgOiB2YWw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbDsKKyAg
ICB9Cit9ICk7CisKK2pRdWVyeS5lYWNoKCBbICJoZWlnaHQiLCAid2lkdGgiIF0sIGZ1bmN0aW9u
KCBpLCBuYW1lICkgeworICAgIGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdID0geworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7CisgICAgICAgICAgICBpZiAo
IGNvbXB1dGVkICkgeworCisgICAgICAgICAgICAgICAgLy8gQ2VydGFpbiBlbGVtZW50cyBjYW4g
aGF2ZSBkaW1lbnNpb24gaW5mbyBpZiB3ZSBpbnZpc2libHkgc2hvdyB0aGVtCisgICAgICAgICAg
ICAgICAgLy8gYnV0IGl0IG11c3QgaGF2ZSBhIGN1cnJlbnQgZGlzcGxheSBzdHlsZSB0aGF0IHdv
dWxkIGJlbmVmaXQKKyAgICAgICAgICAgICAgICByZXR1cm4gcmRpc3BsYXlzd2FwLnRlc3QoIGpR
dWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApICkgJiYKKworICAgICAgICAgICAgICAgICAgICAv
LyBTdXBwb3J0OiBTYWZhcmkgOCsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGFibGUgY29sdW1u
cyBpbiBTYWZhcmkgaGF2ZSBub24temVybyBvZmZzZXRXaWR0aCAmIHplcm8KKyAgICAgICAgICAg
ICAgICAgICAgLy8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggdW5sZXNzIGRpc3BsYXkg
aXMgY2hhbmdlZC4KKyAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5
CisgICAgICAgICAgICAgICAgICAgIC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9u
IGEgZGlzY29ubmVjdGVkIG5vZGUKKyAgICAgICAgICAgICAgICAgICAgLy8gaW4gSUUgdGhyb3dz
IGFuIGVycm9yLgorICAgICAgICAgICAgICAgICAgICAoICFlbGVtLmdldENsaWVudFJlY3RzKCku
bGVuZ3RoIHx8ICFlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICkgPworICAgICAg
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
cHgiOworICAgICAgICB9CisgICAgfQorKTsKKworLy8gVGhlc2UgaG9va3MgYXJlIHVzZWQgYnkg
YW5pbWF0ZSB0byBleHBhbmQgcHJvcGVydGllcworalF1ZXJ5LmVhY2goIHsKKyAgICBtYXJnaW46
ICIiLAorICAgIHBhZGRpbmc6ICIiLAorICAgIGJvcmRlcjogIldpZHRoIgorfSwgZnVuY3Rpb24o
IHByZWZpeCwgc3VmZml4ICkgeworICAgIGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4
IF0gPSB7CisgICAgICAgIGV4cGFuZDogZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICAgICAg
dmFyIGkgPSAwLAorICAgICAgICAgICAgICAgIGV4cGFuZGVkID0ge30sCisKKyAgICAgICAgICAg
ICAgICAvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmcKKyAgICAgICAg
ICAgICAgICBwYXJ0cyA9IHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgPyB2YWx1ZS5zcGxpdCgg
IiAiICkgOiBbIHZhbHVlIF07CisKKyAgICAgICAgICAgIGZvciAoIDsgaSA8IDQ7IGkrKyApIHsK
KyAgICAgICAgICAgICAgICBleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZm
aXggXSA9CisgICAgICAgICAgICAgICAgICAgIHBhcnRzWyBpIF0gfHwgcGFydHNbIGkgLSAyIF0g
fHwgcGFydHNbIDAgXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGV4cGFu
ZGVkOworICAgICAgICB9CisgICAgfTsKKworICAgIGlmICggIXJtYXJnaW4udGVzdCggcHJlZml4
ICkgKSB7CisgICAgICAgIGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0g
c2V0UG9zaXRpdmVOdW1iZXI7CisgICAgfQorfSApOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7Cisg
ICAgY3NzOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7CisgICAgICAgIHJldHVybiBhY2Nlc3Mo
IHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHsKKyAgICAgICAgICAgIHZhciBz
dHlsZXMsIGxlbiwKKyAgICAgICAgICAgICAgICBtYXAgPSB7fSwKKyAgICAgICAgICAgICAgICBp
ID0gMDsKKworICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNBcnJheSggbmFtZSApICkgeworICAg
ICAgICAgICAgICAgIHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApOworICAgICAgICAgICAgICAg
IGxlbiA9IG5hbWUubGVuZ3RoOworCisgICAgICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuOyBp
KysgKSB7CisgICAgICAgICAgICAgICAgICAgIG1hcFsgbmFtZVsgaSBdIF0gPSBqUXVlcnkuY3Nz
KCBlbGVtLCBuYW1lWyBpIF0sIGZhbHNlLCBzdHlsZXMgKTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICByZXR1cm4gbWFwOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/CisgICAgICAgICAgICAgICAgalF1ZXJ5LnN0
eWxlKCBlbGVtLCBuYW1lLCB2YWx1ZSApIDoKKyAgICAgICAgICAgICAgICBqUXVlcnkuY3NzKCBl
bGVtLCBuYW1lICk7CisgICAgICAgIH0sIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4g
MSApOworICAgIH0KK30gKTsKKworCitmdW5jdGlvbiBUd2VlbiggZWxlbSwgb3B0aW9ucywgcHJv
cCwgZW5kLCBlYXNpbmcgKSB7CisgICAgcmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCgg
ZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTsKK30KK2pRdWVyeS5Ud2VlbiA9IFR3
ZWVuOworCitUd2Vlbi5wcm90b3R5cGUgPSB7CisgICAgY29uc3RydWN0b3I6IFR3ZWVuLAorICAg
IGluaXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZywgdW5pdCAp
IHsKKyAgICAgICAgdGhpcy5lbGVtID0gZWxlbTsKKyAgICAgICAgdGhpcy5wcm9wID0gcHJvcDsK
KyAgICAgICAgdGhpcy5lYXNpbmcgPSBlYXNpbmcgfHwgalF1ZXJ5LmVhc2luZy5fZGVmYXVsdDsK
KyAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKKyAgICAgICAgdGhpcy5zdGFydCA9IHRo
aXMubm93ID0gdGhpcy5jdXIoKTsKKyAgICAgICAgdGhpcy5lbmQgPSBlbmQ7CisgICAgICAgIHRo
aXMudW5pdCA9IHVuaXQgfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyAiIiA6ICJweCIg
KTsKKyAgICB9LAorICAgIGN1cjogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBob29rcyA9IFR3
ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07CisKKyAgICAgICAgcmV0dXJuIGhvb2tzICYmIGhv
b2tzLmdldCA/CisgICAgICAgICAgICBob29rcy5nZXQoIHRoaXMgKSA6CisgICAgICAgICAgICBU
d2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KCB0aGlzICk7CisgICAgfSwKKyAgICBydW46IGZ1
bmN0aW9uKCBwZXJjZW50ICkgeworICAgICAgICB2YXIgZWFzZWQsCisgICAgICAgICAgICBob29r
cyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07CisKKyAgICAgICAgaWYgKCB0aGlzLm9w
dGlvbnMuZHVyYXRpb24gKSB7CisgICAgICAgICAgICB0aGlzLnBvcyA9IGVhc2VkID0galF1ZXJ5
LmVhc2luZ1sgdGhpcy5lYXNpbmcgXSgKKyAgICAgICAgICAgICAgICBwZXJjZW50LCB0aGlzLm9w
dGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb24KKyAg
ICAgICAgICAgICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLnBvcyA9IGVh
c2VkID0gcGVyY2VudDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLm5vdyA9ICggdGhpcy5lbmQg
LSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7CisKKyAgICAgICAgaWYgKCB0aGlz
Lm9wdGlvbnMuc3RlcCApIHsKKyAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGVwLmNhbGwoIHRo
aXMuZWxlbSwgdGhpcy5ub3csIHRoaXMgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggaG9v
a3MgJiYgaG9va3Muc2V0ICkgeworICAgICAgICAgICAgaG9va3Muc2V0KCB0aGlzICk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KCB0
aGlzICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorfTsKKworVHdl
ZW4ucHJvdG90eXBlLmluaXQucHJvdG90eXBlID0gVHdlZW4ucHJvdG90eXBlOworCitUd2Vlbi5w
cm9wSG9va3MgPSB7CisgICAgX2RlZmF1bHQ6IHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiggdHdl
ZW4gKSB7CisgICAgICAgICAgICB2YXIgcmVzdWx0OworCisgICAgICAgICAgICAvLyBVc2UgYSBw
cm9wZXJ0eSBvbiB0aGUgZWxlbWVudCBkaXJlY3RseSB3aGVuIGl0IGlzIG5vdCBhIERPTSBlbGVt
ZW50LAorICAgICAgICAgICAgLy8gb3Igd2hlbiB0aGVyZSBpcyBubyBtYXRjaGluZyBzdHlsZSBw
cm9wZXJ0eSB0aGF0IGV4aXN0cy4KKyAgICAgICAgICAgIGlmICggdHdlZW4uZWxlbS5ub2RlVHlw
ZSAhPT0gMSB8fAorICAgICAgICAgICAgICAgIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSAhPSBu
dWxsICYmIHR3ZWVuLmVsZW0uc3R5bGVbIHR3ZWVuLnByb3AgXSA9PSBudWxsICkgeworICAgICAg
ICAgICAgICAgIHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIFBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFt
ZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseQorICAgICAgICAgICAgLy8gYXR0ZW1wdCBh
IHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlmIHRoZSBwYXJzZSBmYWlscy4K
KyAgICAgICAgICAgIC8vIFNpbXBsZSB2YWx1ZXMgc3VjaCBhcyAiMTBweCIgYXJlIHBhcnNlZCB0
byBGbG9hdDsKKyAgICAgICAgICAgIC8vIGNvbXBsZXggdmFsdWVzIHN1Y2ggYXMgInJvdGF0ZSgx
cmFkKSIgYXJlIHJldHVybmVkIGFzLWlzLgorICAgICAgICAgICAgcmVzdWx0ID0galF1ZXJ5LmNz
cyggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgIiIgKTsKKworICAgICAgICAgICAgLy8gRW1wdHkg
c3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCAiYXV0byIgYXJlIGNvbnZlcnRlZCB0byAwLgor
ICAgICAgICAgICAgcmV0dXJuICFyZXN1bHQgfHwgcmVzdWx0ID09PSAiYXV0byIgPyAwIDogcmVz
dWx0OworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHsKKworICAg
ICAgICAgICAgLy8gVXNlIHN0ZXAgaG9vayBmb3IgYmFjayBjb21wYXQuCisgICAgICAgICAgICAv
LyBVc2UgY3NzSG9vayBpZiBpdHMgdGhlcmUuCisgICAgICAgICAgICAvLyBVc2UgLnN0eWxlIGlm
IGF2YWlsYWJsZSBhbmQgdXNlIHBsYWluIHByb3BlcnRpZXMgd2hlcmUgYXZhaWxhYmxlLgorICAg
ICAgICAgICAgaWYgKCBqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdICkgeworICAgICAgICAg
ICAgICAgIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlID09PSAxICYmCisgICAgICAgICAgICAg
ICAgKCB0d2Vlbi5lbGVtLnN0eWxlWyBqUXVlcnkuY3NzUHJvcHNbIHR3ZWVuLnByb3AgXSBdICE9
IG51bGwgfHwKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5wcm9w
IF0gKSApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuc3R5bGUoIHR3ZWVuLmVsZW0sIHR3ZWVu
LnByb3AsIHR3ZWVuLm5vdyArIHR3ZWVuLnVuaXQgKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93OworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfTsKKworLy8gU3VwcG9ydDogSUUgPD05IG9u
bHkKKy8vIFBhbmljIGJhc2VkIGFwcHJvYWNoIHRvIHNldHRpbmcgdGhpbmdzIG9uIGRpc2Nvbm5l
Y3RlZCBub2RlcworVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9IFR3ZWVuLnByb3BIb29rcy5z
Y3JvbGxMZWZ0ID0geworICAgIHNldDogZnVuY3Rpb24oIHR3ZWVuICkgeworICAgICAgICBpZiAo
IHR3ZWVuLmVsZW0ubm9kZVR5cGUgJiYgdHdlZW4uZWxlbS5wYXJlbnROb2RlICkgeworICAgICAg
ICAgICAgdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93OworICAgICAgICB9Cisg
ICAgfQorfTsKKworalF1ZXJ5LmVhc2luZyA9IHsKKyAgICBsaW5lYXI6IGZ1bmN0aW9uKCBwICkg
eworICAgICAgICByZXR1cm4gcDsKKyAgICB9LAorICAgIHN3aW5nOiBmdW5jdGlvbiggcCApIHsK
KyAgICAgICAgcmV0dXJuIDAuNSAtIE1hdGguY29zKCBwICogTWF0aC5QSSApIC8gMjsKKyAgICB9
LAorICAgIF9kZWZhdWx0OiAic3dpbmciCit9OworCitqUXVlcnkuZnggPSBUd2Vlbi5wcm90b3R5
cGUuaW5pdDsKKworLy8gQmFjayBjb21wYXQgPDEuOCBleHRlbnNpb24gcG9pbnQKK2pRdWVyeS5m
eC5zdGVwID0ge307CisKKworCisKK3ZhcgorICAgIGZ4Tm93LCB0aW1lcklkLAorICAgIHJmeHR5
cGVzID0gL14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLAorICAgIHJydW4gPSAvcXVldWVIb29rcyQv
OworCitmdW5jdGlvbiByYWYoKSB7CisgICAgaWYgKCB0aW1lcklkICkgeworICAgICAgICB3aW5k
b3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCByYWYgKTsKKyAgICAgICAgalF1ZXJ5LmZ4LnRpY2so
KTsKKyAgICB9Cit9CisKKy8vIEFuaW1hdGlvbnMgY3JlYXRlZCBzeW5jaHJvbm91c2x5IHdpbGwg
cnVuIHN5bmNocm9ub3VzbHkKK2Z1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkgeworICAgIHdpbmRvdy5z
ZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsKKyAgICAgICAgZnhOb3cgPSB1bmRlZmluZWQ7CisgICAg
fSApOworICAgIHJldHVybiAoIGZ4Tm93ID0galF1ZXJ5Lm5vdygpICk7Cit9CisKKy8vIEdlbmVy
YXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgc3RhbmRhcmQgYW5pbWF0aW9uCitmdW5jdGlvbiBn
ZW5GeCggdHlwZSwgaW5jbHVkZVdpZHRoICkgeworICAgIHZhciB3aGljaCwKKyAgICAgICAgaSA9
IDAsCisgICAgICAgIGF0dHJzID0geyBoZWlnaHQ6IHR5cGUgfTsKKworICAgIC8vIElmIHdlIGlu
Y2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMSB0byBkbyBhbGwgY3NzRXhwYW5kIHZhbHVlcywK
KyAgICAvLyBvdGhlcndpc2Ugc3RlcCB2YWx1ZSBpcyAyIHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBS
aWdodAorICAgIGluY2x1ZGVXaWR0aCA9IGluY2x1ZGVXaWR0aCA/IDEgOiAwOworICAgIGZvciAo
IDsgaSA8IDQ7IGkgKz0gMiAtIGluY2x1ZGVXaWR0aCApIHsKKyAgICAgICAgd2hpY2ggPSBjc3NF
eHBhbmRbIGkgXTsKKyAgICAgICAgYXR0cnNbICJtYXJnaW4iICsgd2hpY2ggXSA9IGF0dHJzWyAi
cGFkZGluZyIgKyB3aGljaCBdID0gdHlwZTsKKyAgICB9CisKKyAgICBpZiAoIGluY2x1ZGVXaWR0
aCApIHsKKyAgICAgICAgYXR0cnMub3BhY2l0eSA9IGF0dHJzLndpZHRoID0gdHlwZTsKKyAgICB9
CisKKyAgICByZXR1cm4gYXR0cnM7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVR3ZWVuKCB2YWx1ZSwg
cHJvcCwgYW5pbWF0aW9uICkgeworICAgIHZhciB0d2VlbiwKKyAgICAgICAgY29sbGVjdGlvbiA9
ICggQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW10gKS5jb25jYXQoIEFuaW1hdGlvbi50
d2VlbmVyc1sgIioiIF0gKSwKKyAgICAgICAgaW5kZXggPSAwLAorICAgICAgICBsZW5ndGggPSBj
b2xsZWN0aW9uLmxlbmd0aDsKKyAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkg
eworICAgICAgICBpZiAoICggdHdlZW4gPSBjb2xsZWN0aW9uWyBpbmRleCBdLmNhbGwoIGFuaW1h
dGlvbiwgcHJvcCwgdmFsdWUgKSApICkgeworCisgICAgICAgICAgICAvLyBXZSdyZSBkb25lIHdp
dGggdGhpcyBwcm9wZXJ0eQorICAgICAgICAgICAgcmV0dXJuIHR3ZWVuOworICAgICAgICB9Cisg
ICAgfQorfQorCitmdW5jdGlvbiBkZWZhdWx0UHJlZmlsdGVyKCBlbGVtLCBwcm9wcywgb3B0cyAp
IHsKKyAgICB2YXIgcHJvcCwgdmFsdWUsIHRvZ2dsZSwgaG9va3MsIG9sZGZpcmUsIHByb3BUd2Vl
biwgcmVzdG9yZURpc3BsYXksIGRpc3BsYXksCisgICAgICAgIGlzQm94ID0gIndpZHRoIiBpbiBw
cm9wcyB8fCAiaGVpZ2h0IiBpbiBwcm9wcywKKyAgICAgICAgYW5pbSA9IHRoaXMsCisgICAgICAg
IG9yaWcgPSB7fSwKKyAgICAgICAgc3R5bGUgPSBlbGVtLnN0eWxlLAorICAgICAgICBoaWRkZW4g
PSBlbGVtLm5vZGVUeXBlICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApLAorICAgICAgICBk
YXRhU2hvdyA9IGRhdGFQcml2LmdldCggZWxlbSwgImZ4c2hvdyIgKTsKKworICAgIC8vIFF1ZXVl
LXNraXBwaW5nIGFuaW1hdGlvbnMgaGlqYWNrIHRoZSBmeCBob29rcworICAgIGlmICggIW9wdHMu
cXVldWUgKSB7CisgICAgICAgIGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCAiZngi
ICk7CisgICAgICAgIGlmICggaG9va3MudW5xdWV1ZWQgPT0gbnVsbCApIHsKKyAgICAgICAgICAg
IGhvb2tzLnVucXVldWVkID0gMDsKKyAgICAgICAgICAgIG9sZGZpcmUgPSBob29rcy5lbXB0eS5m
aXJlOworICAgICAgICAgICAgaG9va3MuZW1wdHkuZmlyZSA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgIGlmICggIWhvb2tzLnVucXVldWVkICkgeworICAgICAgICAgICAgICAgICAgICBv
bGRmaXJlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQor
ICAgICAgICBob29rcy51bnF1ZXVlZCsrOworCisgICAgICAgIGFuaW0uYWx3YXlzKCBmdW5jdGlv
bigpIHsKKworICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBjb21wbGV0ZSBoYW5kbGVyIGlzIGNh
bGxlZCBiZWZvcmUgdGhpcyBjb21wbGV0ZXMKKyAgICAgICAgICAgIGFuaW0uYWx3YXlzKCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICBob29rcy51bnF1ZXVlZC0tOworICAgICAgICAgICAg
ICAgIGlmICggIWpRdWVyeS5xdWV1ZSggZWxlbSwgImZ4IiApLmxlbmd0aCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgaG9va3MuZW1wdHkuZmlyZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gKTsKKyAgICAgICAgfSApOworICAgIH0KKworICAgIC8vIERldGVjdCBzaG93L2hp
ZGUgYW5pbWF0aW9ucworICAgIGZvciAoIHByb3AgaW4gcHJvcHMgKSB7CisgICAgICAgIHZhbHVl
ID0gcHJvcHNbIHByb3AgXTsKKyAgICAgICAgaWYgKCByZnh0eXBlcy50ZXN0KCB2YWx1ZSApICkg
eworICAgICAgICAgICAgZGVsZXRlIHByb3BzWyBwcm9wIF07CisgICAgICAgICAgICB0b2dnbGUg
PSB0b2dnbGUgfHwgdmFsdWUgPT09ICJ0b2dnbGUiOworICAgICAgICAgICAgaWYgKCB2YWx1ZSA9
PT0gKCBoaWRkZW4gPyAiaGlkZSIgOiAic2hvdyIgKSApIHsKKworICAgICAgICAgICAgICAgIC8v
IFByZXRlbmQgdG8gYmUgaGlkZGVuIGlmIHRoaXMgaXMgYSAic2hvdyIgYW5kCisgICAgICAgICAg
ICAgICAgLy8gdGhlcmUgaXMgc3RpbGwgZGF0YSBmcm9tIGEgc3RvcHBlZCBzaG93L2hpZGUKKyAg
ICAgICAgICAgICAgICBpZiAoIHZhbHVlID09PSAic2hvdyIgJiYgZGF0YVNob3cgJiYgZGF0YVNo
b3dbIHByb3AgXSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAgICBoaWRkZW4g
PSB0cnVlOworCisgICAgICAgICAgICAgICAgLy8gSWdub3JlIGFsbCBvdGhlciBuby1vcCBzaG93
L2hpZGUgZGF0YQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IG9yaWdbIHByb3AgXSA9IGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gfHwgalF1ZXJ5LnN0
eWxlKCBlbGVtLCBwcm9wICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBCYWlsIG91dCBp
ZiB0aGlzIGlzIGEgbm8tb3AgbGlrZSAuaGlkZSgpLmhpZGUoKQorICAgIHByb3BUd2VlbiA9ICFq
UXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcHMgKTsKKyAgICBpZiAoICFwcm9wVHdlZW4gJiYgalF1
ZXJ5LmlzRW1wdHlPYmplY3QoIG9yaWcgKSApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIFJlc3RyaWN0ICJvdmVyZmxvdyIgYW5kICJkaXNwbGF5IiBzdHlsZXMgZHVyaW5nIGJv
eCBhbmltYXRpb25zCisgICAgaWYgKCBpc0JveCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkgewor
CisgICAgICAgIC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExLCBFZGdlIDEyIC0gMTMKKyAgICAgICAg
Ly8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVjYXVzZSBJRSBkb2VzIG5vdCBp
bmZlciB0aGUgc2hvcnRoYW5kCisgICAgICAgIC8vIGZyb20gaWRlbnRpY2FsbHktdmFsdWVkIG92
ZXJmbG93WCBhbmQgb3ZlcmZsb3dZCisgICAgICAgIG9wdHMub3ZlcmZsb3cgPSBbIHN0eWxlLm92
ZXJmbG93LCBzdHlsZS5vdmVyZmxvd1gsIHN0eWxlLm92ZXJmbG93WSBdOworCisgICAgICAgIC8v
IElkZW50aWZ5IGEgZGlzcGxheSB0eXBlLCBwcmVmZXJyaW5nIG9sZCBzaG93L2hpZGUgZGF0YSBv
dmVyIHRoZSBDU1MgY2FzY2FkZQorICAgICAgICByZXN0b3JlRGlzcGxheSA9IGRhdGFTaG93ICYm
IGRhdGFTaG93LmRpc3BsYXk7CisgICAgICAgIGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCAp
IHsKKyAgICAgICAgICAgIHJlc3RvcmVEaXNwbGF5ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCAiZGlz
cGxheSIgKTsKKyAgICAgICAgfQorICAgICAgICBkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwg
ImRpc3BsYXkiICk7CisgICAgICAgIGlmICggZGlzcGxheSA9PT0gIm5vbmUiICkgeworICAgICAg
ICAgICAgaWYgKCByZXN0b3JlRGlzcGxheSApIHsKKyAgICAgICAgICAgICAgICBkaXNwbGF5ID0g
cmVzdG9yZURpc3BsYXk7CisgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAg
Ly8gR2V0IG5vbmVtcHR5IHZhbHVlKHMpIGJ5IHRlbXBvcmFyaWx5IGZvcmNpbmcgdmlzaWJpbGl0
eQorICAgICAgICAgICAgICAgIHNob3dIaWRlKCBbIGVsZW0gXSwgdHJ1ZSApOworICAgICAgICAg
ICAgICAgIHJlc3RvcmVEaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5IHx8IHJlc3RvcmVEaXNw
bGF5OworICAgICAgICAgICAgICAgIGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxh
eSIgKTsKKyAgICAgICAgICAgICAgICBzaG93SGlkZSggWyBlbGVtIF0gKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEFuaW1hdGUgaW5saW5lIGVsZW1lbnRzIGFzIGlu
bGluZS1ibG9jaworICAgICAgICBpZiAoIGRpc3BsYXkgPT09ICJpbmxpbmUiIHx8IGRpc3BsYXkg
PT09ICJpbmxpbmUtYmxvY2siICYmIHJlc3RvcmVEaXNwbGF5ICE9IG51bGwgKSB7CisgICAgICAg
ICAgICBpZiAoIGpRdWVyeS5jc3MoIGVsZW0sICJmbG9hdCIgKSA9PT0gIm5vbmUiICkgeworCisg
ICAgICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgZGlzcGxheSB2YWx1ZSBhdCB0
aGUgZW5kIG9mIHB1cmUgc2hvdy9oaWRlIGFuaW1hdGlvbnMKKyAgICAgICAgICAgICAgICBpZiAo
ICFwcm9wVHdlZW4gKSB7CisgICAgICAgICAgICAgICAgICAgIGFuaW0uZG9uZSggZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5kaXNwbGF5ID0gcmVzdG9yZURpc3Bs
YXk7CisgICAgICAgICAgICAgICAgICAgIH0gKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBy
ZXN0b3JlRGlzcGxheSA9PSBudWxsICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxh
eSA9IHN0eWxlLmRpc3BsYXk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN0b3JlRGlzcGxh
eSA9IGRpc3BsYXkgPT09ICJub25lIiA/ICIiIDogZGlzcGxheTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdHlsZS5kaXNwbGF5ID0g
ImlubGluZS1ibG9jayI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoIG9wdHMub3ZlcmZsb3cgKSB7CisgICAgICAgIHN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7
CisgICAgICAgIGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHN0eWxlLm92
ZXJmbG93ID0gb3B0cy5vdmVyZmxvd1sgMCBdOworICAgICAgICAgICAgc3R5bGUub3ZlcmZsb3dY
ID0gb3B0cy5vdmVyZmxvd1sgMSBdOworICAgICAgICAgICAgc3R5bGUub3ZlcmZsb3dZID0gb3B0
cy5vdmVyZmxvd1sgMiBdOworICAgICAgICB9ICk7CisgICAgfQorCisgICAgLy8gSW1wbGVtZW50
IHNob3cvaGlkZSBhbmltYXRpb25zCisgICAgcHJvcFR3ZWVuID0gZmFsc2U7CisgICAgZm9yICgg
cHJvcCBpbiBvcmlnICkgeworCisgICAgICAgIC8vIEdlbmVyYWwgc2hvdy9oaWRlIHNldHVwIGZv
ciB0aGlzIGVsZW1lbnQgYW5pbWF0aW9uCisgICAgICAgIGlmICggIXByb3BUd2VlbiApIHsKKyAg
ICAgICAgICAgIGlmICggZGF0YVNob3cgKSB7CisgICAgICAgICAgICAgICAgaWYgKCAiaGlkZGVu
IiBpbiBkYXRhU2hvdyApIHsKKyAgICAgICAgICAgICAgICAgICAgaGlkZGVuID0gZGF0YVNob3cu
aGlkZGVuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgZGF0YVNob3cgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sICJmeHNob3ciLCB7IGRp
c3BsYXk6IHJlc3RvcmVEaXNwbGF5IH0gKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gU3RvcmUgaGlkZGVuL3Zpc2libGUgZm9yIHRvZ2dsZSBzbyBgLnN0b3AoKS50b2dnbGUoKWAg
InJldmVyc2VzIgorICAgICAgICAgICAgaWYgKCB0b2dnbGUgKSB7CisgICAgICAgICAgICAgICAg
ZGF0YVNob3cuaGlkZGVuID0gIWhpZGRlbjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gU2hvdyBlbGVtZW50cyBiZWZvcmUgYW5pbWF0aW5nIHRoZW0KKyAgICAgICAgICAgIGlmICgg
aGlkZGVuICkgeworICAgICAgICAgICAgICAgIHNob3dIaWRlKCBbIGVsZW0gXSwgdHJ1ZSApOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1
bmMgKi8KKworICAgICAgICAgICAgYW5pbS5kb25lKCBmdW5jdGlvbigpIHsKKworICAgICAgICAg
ICAgLyogZXNsaW50LWVuYWJsZSBuby1sb29wLWZ1bmMgKi8KKworICAgICAgICAgICAgICAgIC8v
IFRoZSBmaW5hbCBzdGVwIG9mIGEgImhpZGUiIGFuaW1hdGlvbiBpcyBhY3R1YWxseSBoaWRpbmcg
dGhlIGVsZW1lbnQKKyAgICAgICAgICAgICAgICBpZiAoICFoaWRkZW4gKSB7CisgICAgICAgICAg
ICAgICAgICAgIHNob3dIaWRlKCBbIGVsZW0gXSApOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBkYXRhUHJpdi5yZW1vdmUoIGVsZW0sICJmeHNob3ciICk7CisgICAgICAgICAg
ICAgICAgZm9yICggcHJvcCBpbiBvcmlnICkgeworICAgICAgICAgICAgICAgICAgICBqUXVlcnku
c3R5bGUoIGVsZW0sIHByb3AsIG9yaWdbIHByb3AgXSApOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0gKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFBlci1wcm9wZXJ0eSBzZXR1
cAorICAgICAgICBwcm9wVHdlZW4gPSBjcmVhdGVUd2VlbiggaGlkZGVuID8gZGF0YVNob3dbIHBy
b3AgXSA6IDAsIHByb3AsIGFuaW0gKTsKKyAgICAgICAgaWYgKCAhKCBwcm9wIGluIGRhdGFTaG93
ICkgKSB7CisgICAgICAgICAgICBkYXRhU2hvd1sgcHJvcCBdID0gcHJvcFR3ZWVuLnN0YXJ0Owor
ICAgICAgICAgICAgaWYgKCBoaWRkZW4gKSB7CisgICAgICAgICAgICAgICAgcHJvcFR3ZWVuLmVu
ZCA9IHByb3BUd2Vlbi5zdGFydDsKKyAgICAgICAgICAgICAgICBwcm9wVHdlZW4uc3RhcnQgPSAw
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitmdW5jdGlvbiBwcm9wRmls
dGVyKCBwcm9wcywgc3BlY2lhbEVhc2luZyApIHsKKyAgICB2YXIgaW5kZXgsIG5hbWUsIGVhc2lu
ZywgdmFsdWUsIGhvb2tzOworCisgICAgLy8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFuZCBl
eHBhbmQgY3NzSG9vayBwYXNzCisgICAgZm9yICggaW5kZXggaW4gcHJvcHMgKSB7CisgICAgICAg
IG5hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBpbmRleCApOworICAgICAgICBlYXNpbmcgPSBzcGVj
aWFsRWFzaW5nWyBuYW1lIF07CisgICAgICAgIHZhbHVlID0gcHJvcHNbIGluZGV4IF07CisgICAg
ICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbHVlICkgKSB7CisgICAgICAgICAgICBlYXNpbmcg
PSB2YWx1ZVsgMSBdOworICAgICAgICAgICAgdmFsdWUgPSBwcm9wc1sgaW5kZXggXSA9IHZhbHVl
WyAwIF07CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGluZGV4ICE9PSBuYW1lICkgeworICAg
ICAgICAgICAgcHJvcHNbIG5hbWUgXSA9IHZhbHVlOworICAgICAgICAgICAgZGVsZXRlIHByb3Bz
WyBpbmRleCBdOworICAgICAgICB9CisKKyAgICAgICAgaG9va3MgPSBqUXVlcnkuY3NzSG9va3Nb
IG5hbWUgXTsKKyAgICAgICAgaWYgKCBob29rcyAmJiAiZXhwYW5kIiBpbiBob29rcyApIHsKKyAg
ICAgICAgICAgIHZhbHVlID0gaG9va3MuZXhwYW5kKCB2YWx1ZSApOworICAgICAgICAgICAgZGVs
ZXRlIHByb3BzWyBuYW1lIF07CisKKyAgICAgICAgICAgIC8vIE5vdCBxdWl0ZSAkLmV4dGVuZCwg
dGhpcyB3b24ndCBvdmVyd3JpdGUgZXhpc3Rpbmcga2V5cy4KKyAgICAgICAgICAgIC8vIFJldXNp
bmcgJ2luZGV4JyBiZWNhdXNlIHdlIGhhdmUgdGhlIGNvcnJlY3QgIm5hbWUiCisgICAgICAgICAg
ICBmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICBpZiAoICEoIGluZGV4
IGluIHByb3BzICkgKSB7CisgICAgICAgICAgICAgICAgICAgIHByb3BzWyBpbmRleCBdID0gdmFs
dWVbIGluZGV4IF07CisgICAgICAgICAgICAgICAgICAgIHNwZWNpYWxFYXNpbmdbIGluZGV4IF0g
PSBlYXNpbmc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgc3BlY2lhbEVhc2luZ1sgbmFtZSBdID0gZWFzaW5nOworICAgICAg
ICB9CisgICAgfQorfQorCitmdW5jdGlvbiBBbmltYXRpb24oIGVsZW0sIHByb3BlcnRpZXMsIG9w
dGlvbnMgKSB7CisgICAgdmFyIHJlc3VsdCwKKyAgICAgICAgc3RvcHBlZCwKKyAgICAgICAgaW5k
ZXggPSAwLAorICAgICAgICBsZW5ndGggPSBBbmltYXRpb24ucHJlZmlsdGVycy5sZW5ndGgsCisg
ICAgICAgIGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCkuYWx3YXlzKCBmdW5jdGlvbigpIHsK
KworICAgICAgICAgICAgLy8gRG9uJ3QgbWF0Y2ggZWxlbSBpbiB0aGUgOmFuaW1hdGVkIHNlbGVj
dG9yCisgICAgICAgICAgICBkZWxldGUgdGljay5lbGVtOworICAgICAgICB9ICksCisgICAgICAg
IHRpY2sgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmICggc3RvcHBlZCApIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIg
Y3VycmVudFRpbWUgPSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLAorICAgICAgICAgICAgICAgIHJl
bWFpbmluZyA9IE1hdGgubWF4KCAwLCBhbmltYXRpb24uc3RhcnRUaW1lICsgYW5pbWF0aW9uLmR1
cmF0aW9uIC0gY3VycmVudFRpbWUgKSwKKworICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IEFu
ZHJvaWQgMi4zIG9ubHkKKyAgICAgICAgICAgICAgICAvLyBBcmNoYWljIGNyYXNoIGJ1ZyB3b24n
dCBhbGxvdyB1cyB0byB1c2UgYDEgLSAoIDAuNSB8fCAwIClgICgjMTI0OTcpCisgICAgICAgICAg
ICAgICAgdGVtcCA9IHJlbWFpbmluZyAvIGFuaW1hdGlvbi5kdXJhdGlvbiB8fCAwLAorICAgICAg
ICAgICAgICAgIHBlcmNlbnQgPSAxIC0gdGVtcCwKKyAgICAgICAgICAgICAgICBpbmRleCA9IDAs
CisgICAgICAgICAgICAgICAgbGVuZ3RoID0gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGg7CisKKyAg
ICAgICAgICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7CisgICAgICAgICAg
ICAgICAgYW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIHBlcmNlbnQgKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRp
b24sIHBlcmNlbnQsIHJlbWFpbmluZyBdICk7CisKKyAgICAgICAgICAgIGlmICggcGVyY2VudCA8
IDEgJiYgbGVuZ3RoICkgeworICAgICAgICAgICAgICAgIHJldHVybiByZW1haW5pbmc7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBl
bGVtLCBbIGFuaW1hdGlvbiBdICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBhbmltYXRpb24gPSBkZWZlcnJlZC5wcm9t
aXNlKCB7CisgICAgICAgICAgICBlbGVtOiBlbGVtLAorICAgICAgICAgICAgcHJvcHM6IGpRdWVy
eS5leHRlbmQoIHt9LCBwcm9wZXJ0aWVzICksCisgICAgICAgICAgICBvcHRzOiBqUXVlcnkuZXh0
ZW5kKCB0cnVlLCB7CisgICAgICAgICAgICAgICAgc3BlY2lhbEVhc2luZzoge30sCisgICAgICAg
ICAgICAgICAgZWFzaW5nOiBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0CisgICAgICAgICAgICB9LCBv
cHRpb25zICksCisgICAgICAgICAgICBvcmlnaW5hbFByb3BlcnRpZXM6IHByb3BlcnRpZXMsCisg
ICAgICAgICAgICBvcmlnaW5hbE9wdGlvbnM6IG9wdGlvbnMsCisgICAgICAgICAgICBzdGFydFRp
bWU6IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksCisgICAgICAgICAgICBkdXJhdGlvbjogb3B0aW9u
cy5kdXJhdGlvbiwKKyAgICAgICAgICAgIHR3ZWVuczogW10sCisgICAgICAgICAgICBjcmVhdGVU
d2VlbjogZnVuY3Rpb24oIHByb3AsIGVuZCApIHsKKyAgICAgICAgICAgICAgICB2YXIgdHdlZW4g
PSBqUXVlcnkuVHdlZW4oIGVsZW0sIGFuaW1hdGlvbi5vcHRzLCBwcm9wLCBlbmQsCisgICAgICAg
ICAgICAgICAgICAgICAgICBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nWyBwcm9wIF0gfHwg
YW5pbWF0aW9uLm9wdHMuZWFzaW5nICk7CisgICAgICAgICAgICAgICAgYW5pbWF0aW9uLnR3ZWVu
cy5wdXNoKCB0d2VlbiApOworICAgICAgICAgICAgICAgIHJldHVybiB0d2VlbjsKKyAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICBzdG9wOiBmdW5jdGlvbiggZ290b0VuZCApIHsKKyAgICAgICAg
ICAgICAgICB2YXIgaW5kZXggPSAwLAorCisgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGFy
ZSBnb2luZyB0byB0aGUgZW5kLCB3ZSB3YW50IHRvIHJ1biBhbGwgdGhlIHR3ZWVucworICAgICAg
ICAgICAgICAgICAgICAvLyBvdGhlcndpc2Ugd2Ugc2tpcCB0aGlzIHBhcnQKKyAgICAgICAgICAg
ICAgICAgICAgbGVuZ3RoID0gZ290b0VuZCA/IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoIDogMDsK
KyAgICAgICAgICAgICAgICBpZiAoIHN0b3BwZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdG9wcGVkID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkg
eworICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggMSAp
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFJlc29sdmUgd2hlbiB3
ZSBwbGF5ZWQgdGhlIGxhc3QgZnJhbWU7IG90aGVyd2lzZSwgcmVqZWN0CisgICAgICAgICAgICAg
ICAgaWYgKCBnb3RvRW5kICkgeworICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5ub3RpZnlX
aXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7CisgICAgICAgICAgICAgICAgICAgIGRl
ZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVqZWN0
V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAp
LAorICAgICAgICBwcm9wcyA9IGFuaW1hdGlvbi5wcm9wczsKKworICAgIHByb3BGaWx0ZXIoIHBy
b3BzLCBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nICk7CisKKyAgICBmb3IgKCA7IGluZGV4
IDwgbGVuZ3RoOyBpbmRleCsrICkgeworICAgICAgICByZXN1bHQgPSBBbmltYXRpb24ucHJlZmls
dGVyc1sgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIGVsZW0sIHByb3BzLCBhbmltYXRpb24ub3B0
cyApOworICAgICAgICBpZiAoIHJlc3VsdCApIHsKKyAgICAgICAgICAgIGlmICggalF1ZXJ5Lmlz
RnVuY3Rpb24oIHJlc3VsdC5zdG9wICkgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5Ll9xdWV1
ZUhvb2tzKCBhbmltYXRpb24uZWxlbSwgYW5pbWF0aW9uLm9wdHMucXVldWUgKS5zdG9wID0KKyAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5LnByb3h5KCByZXN1bHQuc3RvcCwgcmVzdWx0ICk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAg
fQorCisgICAgalF1ZXJ5Lm1hcCggcHJvcHMsIGNyZWF0ZVR3ZWVuLCBhbmltYXRpb24gKTsKKwor
ICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGFuaW1hdGlvbi5vcHRzLnN0YXJ0ICkgKSB7Cisg
ICAgICAgIGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApOworICAg
IH0KKworICAgIGpRdWVyeS5meC50aW1lcigKKyAgICAgICAgalF1ZXJ5LmV4dGVuZCggdGljaywg
eworICAgICAgICAgICAgZWxlbTogZWxlbSwKKyAgICAgICAgICAgIGFuaW06IGFuaW1hdGlvbiwK
KyAgICAgICAgICAgIHF1ZXVlOiBhbmltYXRpb24ub3B0cy5xdWV1ZQorICAgICAgICB9ICkKKyAg
ICApOworCisgICAgLy8gYXR0YWNoIGNhbGxiYWNrcyBmcm9tIG9wdGlvbnMKKyAgICByZXR1cm4g
YW5pbWF0aW9uLnByb2dyZXNzKCBhbmltYXRpb24ub3B0cy5wcm9ncmVzcyApCisgICAgICAgIC5k
b25lKCBhbmltYXRpb24ub3B0cy5kb25lLCBhbmltYXRpb24ub3B0cy5jb21wbGV0ZSApCisgICAg
ICAgIC5mYWlsKCBhbmltYXRpb24ub3B0cy5mYWlsICkKKyAgICAgICAgLmFsd2F5cyggYW5pbWF0
aW9uLm9wdHMuYWx3YXlzICk7Cit9CisKK2pRdWVyeS5BbmltYXRpb24gPSBqUXVlcnkuZXh0ZW5k
KCBBbmltYXRpb24sIHsKKworICAgIHR3ZWVuZXJzOiB7CisgICAgICAgICIqIjogWyBmdW5jdGlv
biggcHJvcCwgdmFsdWUgKSB7CisgICAgICAgICAgICB2YXIgdHdlZW4gPSB0aGlzLmNyZWF0ZVR3
ZWVuKCBwcm9wLCB2YWx1ZSApOworICAgICAgICAgICAgYWRqdXN0Q1NTKCB0d2Vlbi5lbGVtLCBw
cm9wLCByY3NzTnVtLmV4ZWMoIHZhbHVlICksIHR3ZWVuICk7CisgICAgICAgICAgICByZXR1cm4g
dHdlZW47CisgICAgICAgIH0gXQorICAgIH0sCisKKyAgICB0d2VlbmVyOiBmdW5jdGlvbiggcHJv
cHMsIGNhbGxiYWNrICkgeworICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBwcm9wcyAp
ICkgeworICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9wczsKKyAgICAgICAgICAgIHByb3BzID0g
WyAiKiIgXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByb3BzID0gcHJvcHMubWF0
Y2goIHJub3RodG1sd2hpdGUgKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBwcm9wLAorICAg
ICAgICAgICAgaW5kZXggPSAwLAorICAgICAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoOwor
CisgICAgICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7CisgICAgICAgICAg
ICBwcm9wID0gcHJvcHNbIGluZGV4IF07CisgICAgICAgICAgICBBbmltYXRpb24udHdlZW5lcnNb
IHByb3AgXSA9IEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdOworICAgICAgICAgICAg
QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0udW5zaGlmdCggY2FsbGJhY2sgKTsKKyAgICAgICAg
fQorICAgIH0sCisKKyAgICBwcmVmaWx0ZXJzOiBbIGRlZmF1bHRQcmVmaWx0ZXIgXSwKKworICAg
IHByZWZpbHRlcjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVwZW5kICkgeworICAgICAgICBpZiAo
IHByZXBlbmQgKSB7CisgICAgICAgICAgICBBbmltYXRpb24ucHJlZmlsdGVycy51bnNoaWZ0KCBj
YWxsYmFjayApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQW5pbWF0aW9uLnByZWZp
bHRlcnMucHVzaCggY2FsbGJhY2sgKTsKKyAgICAgICAgfQorICAgIH0KK30gKTsKKworalF1ZXJ5
LnNwZWVkID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGZuICkgeworICAgIHZhciBvcHQgPSBz
cGVlZCAmJiB0eXBlb2Ygc3BlZWQgPT09ICJvYmplY3QiID8galF1ZXJ5LmV4dGVuZCgge30sIHNw
ZWVkICkgOiB7CisgICAgICAgIGNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8CisgICAg
ICAgICAgICBqUXVlcnkuaXNGdW5jdGlvbiggc3BlZWQgKSAmJiBzcGVlZCwKKyAgICAgICAgZHVy
YXRpb246IHNwZWVkLAorICAgICAgICBlYXNpbmc6IGZuICYmIGVhc2luZyB8fCBlYXNpbmcgJiYg
IWpRdWVyeS5pc0Z1bmN0aW9uKCBlYXNpbmcgKSAmJiBlYXNpbmcKKyAgICB9OworCisgICAgLy8g
R28gdG8gdGhlIGVuZCBzdGF0ZSBpZiBmeCBhcmUgb2ZmIG9yIGlmIGRvY3VtZW50IGlzIGhpZGRl
bgorICAgIGlmICggalF1ZXJ5LmZ4Lm9mZiB8fCBkb2N1bWVudC5oaWRkZW4gKSB7CisgICAgICAg
IG9wdC5kdXJhdGlvbiA9IDA7CisKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIHR5cGVvZiBv
cHQuZHVyYXRpb24gIT09ICJudW1iZXIiICkgeworICAgICAgICAgICAgaWYgKCBvcHQuZHVyYXRp
b24gaW4galF1ZXJ5LmZ4LnNwZWVkcyApIHsKKyAgICAgICAgICAgICAgICBvcHQuZHVyYXRpb24g
PSBqUXVlcnkuZnguc3BlZWRzWyBvcHQuZHVyYXRpb24gXTsKKworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBvcHQuZHVyYXRpb24gPSBqUXVlcnkuZnguc3BlZWRzLl9kZWZh
dWx0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm9ybWFsaXpl
IG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwgLT4gImZ4IgorICAgIGlmICggb3B0LnF1
ZXVlID09IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVlICkgeworICAgICAgICBvcHQucXVldWUg
PSAiZngiOworICAgIH0KKworICAgIC8vIFF1ZXVlaW5nCisgICAgb3B0Lm9sZCA9IG9wdC5jb21w
bGV0ZTsKKworICAgIG9wdC5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoIGpR
dWVyeS5pc0Z1bmN0aW9uKCBvcHQub2xkICkgKSB7CisgICAgICAgICAgICBvcHQub2xkLmNhbGwo
IHRoaXMgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggb3B0LnF1ZXVlICkgeworICAgICAg
ICAgICAgalF1ZXJ5LmRlcXVldWUoIHRoaXMsIG9wdC5xdWV1ZSApOworICAgICAgICB9CisgICAg
fTsKKworICAgIHJldHVybiBvcHQ7Cit9OworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisgICAgZmFk
ZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkgeworCisgICAgICAg
IC8vIFNob3cgYW55IGhpZGRlbiBlbGVtZW50cyBhZnRlciBzZXR0aW5nIG9wYWNpdHkgdG8gMAor
ICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoIGlzSGlkZGVuV2l0aGluVHJlZSApLmNzcyggIm9w
YWNpdHkiLCAwICkuc2hvdygpCisKKyAgICAgICAgICAgIC8vIEFuaW1hdGUgdG8gdGhlIHZhbHVl
IHNwZWNpZmllZAorICAgICAgICAgICAgLmVuZCgpLmFuaW1hdGUoIHsgb3BhY2l0eTogdG8gfSwg
c3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKKyAgICB9LAorICAgIGFuaW1hdGU6IGZ1bmN0aW9u
KCBwcm9wLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKKyAgICAgICAgdmFyIGVtcHR5ID0g
alF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3AgKSwKKyAgICAgICAgICAgIG9wdGFsbCA9IGpRdWVy
eS5zcGVlZCggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSwKKyAgICAgICAgICAgIGRvQW5pbWF0
aW9uID0gZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgICAgICAvLyBPcGVyYXRlIG9uIGEgY29w
eSBvZiBwcm9wIHNvIHBlci1wcm9wZXJ0eSBlYXNpbmcgd29uJ3QgYmUgbG9zdAorICAgICAgICAg
ICAgICAgIHZhciBhbmltID0gQW5pbWF0aW9uKCB0aGlzLCBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJv
cCApLCBvcHRhbGwgKTsKKworICAgICAgICAgICAgICAgIC8vIEVtcHR5IGFuaW1hdGlvbnMsIG9y
IGZpbmlzaGluZyByZXNvbHZlcyBpbW1lZGlhdGVseQorICAgICAgICAgICAgICAgIGlmICggZW1w
dHkgfHwgZGF0YVByaXYuZ2V0KCB0aGlzLCAiZmluaXNoIiApICkgeworICAgICAgICAgICAgICAg
ICAgICBhbmltLnN0b3AoIHRydWUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
OworICAgICAgICAgICAgZG9BbmltYXRpb24uZmluaXNoID0gZG9BbmltYXRpb247CisKKyAgICAg
ICAgcmV0dXJuIGVtcHR5IHx8IG9wdGFsbC5xdWV1ZSA9PT0gZmFsc2UgPworICAgICAgICAgICAg
dGhpcy5lYWNoKCBkb0FuaW1hdGlvbiApIDoKKyAgICAgICAgICAgIHRoaXMucXVldWUoIG9wdGFs
bC5xdWV1ZSwgZG9BbmltYXRpb24gKTsKKyAgICB9LAorICAgIHN0b3A6IGZ1bmN0aW9uKCB0eXBl
LCBjbGVhclF1ZXVlLCBnb3RvRW5kICkgeworICAgICAgICB2YXIgc3RvcFF1ZXVlID0gZnVuY3Rp
b24oIGhvb2tzICkgeworICAgICAgICAgICAgdmFyIHN0b3AgPSBob29rcy5zdG9wOworICAgICAg
ICAgICAgZGVsZXRlIGhvb2tzLnN0b3A7CisgICAgICAgICAgICBzdG9wKCBnb3RvRW5kICk7Cisg
ICAgICAgIH07CisKKyAgICAgICAgaWYgKCB0eXBlb2YgdHlwZSAhPT0gInN0cmluZyIgKSB7Cisg
ICAgICAgICAgICBnb3RvRW5kID0gY2xlYXJRdWV1ZTsKKyAgICAgICAgICAgIGNsZWFyUXVldWUg
PSB0eXBlOworICAgICAgICAgICAgdHlwZSA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoIGNsZWFyUXVldWUgJiYgdHlwZSAhPT0gZmFsc2UgKSB7CisgICAgICAgICAgICB0aGlz
LnF1ZXVlKCB0eXBlIHx8ICJmeCIsIFtdICk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
dGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBkZXF1ZXVlID0gdHJ1ZSwK
KyAgICAgICAgICAgICAgICBpbmRleCA9IHR5cGUgIT0gbnVsbCAmJiB0eXBlICsgInF1ZXVlSG9v
a3MiLAorICAgICAgICAgICAgICAgIHRpbWVycyA9IGpRdWVyeS50aW1lcnMsCisgICAgICAgICAg
ICAgICAgZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApOworCisgICAgICAgICAgICBpZiAoIGlu
ZGV4ICkgeworICAgICAgICAgICAgICAgIGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRl
eCBdLnN0b3AgKSB7CisgICAgICAgICAgICAgICAgICAgIHN0b3BRdWV1ZSggZGF0YVsgaW5kZXgg
XSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgZm9yICggaW5kZXggaW4gZGF0YSApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBk
YXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCAmJiBycnVuLnRlc3QoIGluZGV4ICkg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHsK
KyAgICAgICAgICAgICAgICBpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmCisg
ICAgICAgICAgICAgICAgICAgICggdHlwZSA9PSBudWxsIHx8IHRpbWVyc1sgaW5kZXggXS5xdWV1
ZSA9PT0gdHlwZSApICkgeworCisgICAgICAgICAgICAgICAgICAgIHRpbWVyc1sgaW5kZXggXS5h
bmltLnN0b3AoIGdvdG9FbmQgKTsKKyAgICAgICAgICAgICAgICAgICAgZGVxdWV1ZSA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICB0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU3RhcnQgdGhlIG5l
eHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZC4KKyAgICAgICAg
ICAgIC8vIFRpbWVycyBjdXJyZW50bHkgd2lsbCBjYWxsIHRoZWlyIGNvbXBsZXRlIGNhbGxiYWNr
cywgd2hpY2gKKyAgICAgICAgICAgIC8vIHdpbGwgZGVxdWV1ZSBidXQgb25seSBpZiB0aGV5IHdl
cmUgZ290b0VuZC4KKyAgICAgICAgICAgIGlmICggZGVxdWV1ZSB8fCAhZ290b0VuZCApIHsKKyAg
ICAgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApOworICAgICAgICAgICAg
fQorICAgICAgICB9ICk7CisgICAgfSwKKyAgICBmaW5pc2g6IGZ1bmN0aW9uKCB0eXBlICkgewor
ICAgICAgICBpZiAoIHR5cGUgIT09IGZhbHNlICkgeworICAgICAgICAgICAgdHlwZSA9IHR5cGUg
fHwgImZ4IjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgIHZhciBpbmRleCwKKyAgICAgICAgICAgICAgICBkYXRhID0gZGF0YVBy
aXYuZ2V0KCB0aGlzICksCisgICAgICAgICAgICAgICAgcXVldWUgPSBkYXRhWyB0eXBlICsgInF1
ZXVlIiBdLAorICAgICAgICAgICAgICAgIGhvb2tzID0gZGF0YVsgdHlwZSArICJxdWV1ZUhvb2tz
IiBdLAorICAgICAgICAgICAgICAgIHRpbWVycyA9IGpRdWVyeS50aW1lcnMsCisgICAgICAgICAg
ICAgICAgbGVuZ3RoID0gcXVldWUgPyBxdWV1ZS5sZW5ndGggOiAwOworCisgICAgICAgICAgICAv
LyBFbmFibGUgZmluaXNoaW5nIGZsYWcgb24gcHJpdmF0ZSBkYXRhCisgICAgICAgICAgICBkYXRh
LmZpbmlzaCA9IHRydWU7CisKKyAgICAgICAgICAgIC8vIEVtcHR5IHRoZSBxdWV1ZSBmaXJzdAor
ICAgICAgICAgICAgalF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBbXSApOworCisgICAgICAgICAg
ICBpZiAoIGhvb2tzICYmIGhvb2tzLnN0b3AgKSB7CisgICAgICAgICAgICAgICAgaG9va3Muc3Rv
cC5jYWxsKCB0aGlzLCB0cnVlICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIExv
b2sgZm9yIGFueSBhY3RpdmUgYW5pbWF0aW9ucywgYW5kIGZpbmlzaCB0aGVtCisgICAgICAgICAg
ICBmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkgeworICAgICAgICAgICAg
ICAgIGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYgdGltZXJzWyBpbmRleCBd
LnF1ZXVlID09PSB0eXBlICkgeworICAgICAgICAgICAgICAgICAgICB0aW1lcnNbIGluZGV4IF0u
YW5pbS5zdG9wKCB0cnVlICk7CisgICAgICAgICAgICAgICAgICAgIHRpbWVycy5zcGxpY2UoIGlu
ZGV4LCAxICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBMb29rIGZvciBhbnkgYW5pbWF0aW9ucyBpbiB0aGUgb2xkIHF1ZXVlIGFuZCBmaW5pc2gg
dGhlbQorICAgICAgICAgICAgZm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgr
KyApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHF1ZXVlWyBpbmRleCBdICYmIHF1ZXVlWyBpbmRl
eCBdLmZpbmlzaCApIHsKKyAgICAgICAgICAgICAgICAgICAgcXVldWVbIGluZGV4IF0uZmluaXNo
LmNhbGwoIHRoaXMgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIFR1cm4gb2ZmIGZpbmlzaGluZyBmbGFnCisgICAgICAgICAgICBkZWxldGUgZGF0
YS5maW5pc2g7CisgICAgICAgIH0gKTsKKyAgICB9Cit9ICk7CisKK2pRdWVyeS5lYWNoKCBbICJ0
b2dnbGUiLCAic2hvdyIsICJoaWRlIiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKKyAgICB2YXIg
Y3NzRm4gPSBqUXVlcnkuZm5bIG5hbWUgXTsKKyAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0
aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKKyAgICAgICAgcmV0dXJuIHNwZWVkID09
IG51bGwgfHwgdHlwZW9mIHNwZWVkID09PSAiYm9vbGVhbiIgPworICAgICAgICAgICAgY3NzRm4u
YXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApIDoKKyAgICAgICAgICAgIHRoaXMuYW5pbWF0ZSggZ2Vu
RngoIG5hbWUsIHRydWUgKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKKyAgICB9OworfSAp
OworCisvLyBHZW5lcmF0ZSBzaG9ydGN1dHMgZm9yIGN1c3RvbSBhbmltYXRpb25zCitqUXVlcnku
ZWFjaCggeworICAgIHNsaWRlRG93bjogZ2VuRngoICJzaG93IiApLAorICAgIHNsaWRlVXA6IGdl
bkZ4KCAiaGlkZSIgKSwKKyAgICBzbGlkZVRvZ2dsZTogZ2VuRngoICJ0b2dnbGUiICksCisgICAg
ZmFkZUluOiB7IG9wYWNpdHk6ICJzaG93IiB9LAorICAgIGZhZGVPdXQ6IHsgb3BhY2l0eTogImhp
ZGUiIH0sCisgICAgZmFkZVRvZ2dsZTogeyBvcGFjaXR5OiAidG9nZ2xlIiB9Cit9LCBmdW5jdGlv
biggbmFtZSwgcHJvcHMgKSB7CisgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3Bl
ZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7CisgICAgICAgIHJldHVybiB0aGlzLmFuaW1hdGUoIHBy
b3BzLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApOworICAgIH07Cit9ICk7CisKK2pRdWVyeS50
aW1lcnMgPSBbXTsKK2pRdWVyeS5meC50aWNrID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHRpbWVy
LAorICAgICAgICBpID0gMCwKKyAgICAgICAgdGltZXJzID0galF1ZXJ5LnRpbWVyczsKKworICAg
IGZ4Tm93ID0galF1ZXJ5Lm5vdygpOworCisgICAgZm9yICggOyBpIDwgdGltZXJzLmxlbmd0aDsg
aSsrICkgeworICAgICAgICB0aW1lciA9IHRpbWVyc1sgaSBdOworCisgICAgICAgIC8vIENoZWNr
cyB0aGUgdGltZXIgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcmVtb3ZlZAorICAgICAgICBpZiAoICF0
aW1lcigpICYmIHRpbWVyc1sgaSBdID09PSB0aW1lciApIHsKKyAgICAgICAgICAgIHRpbWVycy5z
cGxpY2UoIGktLSwgMSApOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCAhdGltZXJzLmxl
bmd0aCApIHsKKyAgICAgICAgalF1ZXJ5LmZ4LnN0b3AoKTsKKyAgICB9CisgICAgZnhOb3cgPSB1
bmRlZmluZWQ7Cit9OworCitqUXVlcnkuZngudGltZXIgPSBmdW5jdGlvbiggdGltZXIgKSB7Cisg
ICAgalF1ZXJ5LnRpbWVycy5wdXNoKCB0aW1lciApOworICAgIGlmICggdGltZXIoKSApIHsKKyAg
ICAgICAgalF1ZXJ5LmZ4LnN0YXJ0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgalF1ZXJ5LnRp
bWVycy5wb3AoKTsKKyAgICB9Cit9OworCitqUXVlcnkuZnguaW50ZXJ2YWwgPSAxMzsKK2pRdWVy
eS5meC5zdGFydCA9IGZ1bmN0aW9uKCkgeworICAgIGlmICggIXRpbWVySWQgKSB7CisgICAgICAg
IHRpbWVySWQgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID8KKyAgICAgICAgICAgIHdp
bmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIHJhZiApIDoKKyAgICAgICAgICAgIHdpbmRvdy5z
ZXRJbnRlcnZhbCggalF1ZXJ5LmZ4LnRpY2ssIGpRdWVyeS5meC5pbnRlcnZhbCApOworICAgIH0K
K307CisKK2pRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKCB3aW5kb3cuY2Fu
Y2VsQW5pbWF0aW9uRnJhbWUgKSB7CisgICAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFt
ZSggdGltZXJJZCApOworICAgIH0gZWxzZSB7CisgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFs
KCB0aW1lcklkICk7CisgICAgfQorCisgICAgdGltZXJJZCA9IG51bGw7Cit9OworCitqUXVlcnku
Znguc3BlZWRzID0geworICAgIHNsb3c6IDYwMCwKKyAgICBmYXN0OiAyMDAsCisKKyAgICAvLyBE
ZWZhdWx0IHNwZWVkCisgICAgX2RlZmF1bHQ6IDQwMAorfTsKKworCisvLyBCYXNlZCBvZmYgb2Yg
dGhlIHBsdWdpbiBieSBDbGludCBIZWxmZXJzLCB3aXRoIHBlcm1pc3Npb24uCisvLyBodHRwczov
L3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMDAzMjQwMTQ3NDcvaHR0cDovL2JsaW5kc2lnbmFscy5j
b20vaW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5LWRlbGF5LworalF1ZXJ5LmZuLmRlbGF5ID0gZnVu
Y3Rpb24oIHRpbWUsIHR5cGUgKSB7CisgICAgdGltZSA9IGpRdWVyeS5meCA/IGpRdWVyeS5meC5z
cGVlZHNbIHRpbWUgXSB8fCB0aW1lIDogdGltZTsKKyAgICB0eXBlID0gdHlwZSB8fCAiZngiOwor
CisgICAgcmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHsK
KyAgICAgICAgdmFyIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCggbmV4dCwgdGltZSApOwor
ICAgICAgICBob29rcy5zdG9wID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB3aW5kb3cuY2xl
YXJUaW1lb3V0KCB0aW1lb3V0ICk7CisgICAgICAgIH07CisgICAgfSApOworfTsKKworCisoIGZ1
bmN0aW9uKCkgeworICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJpbnB1
dCIgKSwKKyAgICAgICAgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggInNlbGVjdCIg
KSwKKyAgICAgICAgb3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCAib3B0aW9uIiApICk7CisKKyAgICBpbnB1dC50eXBlID0gImNoZWNrYm94IjsKKworICAg
IC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjMgb25seQorICAgIC8vIERlZmF1bHQgdmFsdWUgZm9y
IGEgY2hlY2tib3ggc2hvdWxkIGJlICJvbiIKKyAgICBzdXBwb3J0LmNoZWNrT24gPSBpbnB1dC52
YWx1ZSAhPT0gIiI7CisKKyAgICAvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHkKKyAgICAvLyBNdXN0
IGFjY2VzcyBzZWxlY3RlZEluZGV4IHRvIG1ha2UgZGVmYXVsdCBvcHRpb25zIHNlbGVjdAorICAg
IHN1cHBvcnQub3B0U2VsZWN0ZWQgPSBvcHQuc2VsZWN0ZWQ7CisKKyAgICAvLyBTdXBwb3J0OiBJ
RSA8PTExIG9ubHkKKyAgICAvLyBBbiBpbnB1dCBsb3NlcyBpdHMgdmFsdWUgYWZ0ZXIgYmVjb21p
bmcgYSByYWRpbworICAgIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImlucHV0IiAp
OworICAgIGlucHV0LnZhbHVlID0gInQiOworICAgIGlucHV0LnR5cGUgPSAicmFkaW8iOworICAg
IHN1cHBvcnQucmFkaW9WYWx1ZSA9IGlucHV0LnZhbHVlID09PSAidCI7Cit9ICkoKTsKKworCit2
YXIgYm9vbEhvb2ssCisgICAgYXR0ckhhbmRsZSA9IGpRdWVyeS5leHByLmF0dHJIYW5kbGU7CisK
K2pRdWVyeS5mbi5leHRlbmQoIHsKKyAgICBhdHRyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7
CisgICAgICAgIHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5hdHRyLCBuYW1lLCB2YWx1ZSwg
YXJndW1lbnRzLmxlbmd0aCA+IDEgKTsKKyAgICB9LAorCisgICAgcmVtb3ZlQXR0cjogZnVuY3Rp
b24oIG5hbWUgKSB7CisgICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgalF1ZXJ5LnJlbW92ZUF0dHIoIHRoaXMsIG5hbWUgKTsKKyAgICAgICAgfSApOwor
ICAgIH0KK30gKTsKKworalF1ZXJ5LmV4dGVuZCggeworICAgIGF0dHI6IGZ1bmN0aW9uKCBlbGVt
LCBuYW1lLCB2YWx1ZSApIHsKKyAgICAgICAgdmFyIHJldCwgaG9va3MsCisgICAgICAgICAgICBu
VHlwZSA9IGVsZW0ubm9kZVR5cGU7CisKKyAgICAgICAgLy8gRG9uJ3QgZ2V0L3NldCBhdHRyaWJ1
dGVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2RlcworICAgICAgICBpZiAoIG5U
eXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gRmFsbGJhY2sgdG8gcHJvcCB3aGVuIGF0
dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQKKyAgICAgICAgaWYgKCB0eXBlb2YgZWxlbS5nZXRB
dHRyaWJ1dGUgPT09ICJ1bmRlZmluZWQiICkgeworICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5w
cm9wKCBlbGVtLCBuYW1lLCB2YWx1ZSApOworICAgICAgICB9CisKKyAgICAgICAgLy8gQXR0cmli
dXRlIGhvb2tzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsb3dlcmNhc2UgdmVyc2lvbgorICAgICAg
ICAvLyBHcmFiIG5lY2Vzc2FyeSBob29rIGlmIG9uZSBpcyBkZWZpbmVkCisgICAgICAgIGlmICgg
blR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkgeworICAgICAgICAgICAg
aG9va3MgPSBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSB8fAorICAgICAg
ICAgICAgICAgICggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC50ZXN0KCBuYW1lICkgPyBib29sSG9v
ayA6IHVuZGVmaW5lZCApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCB2YWx1ZSAhPT0gdW5k
ZWZpbmVkICkgeworICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gbnVsbCApIHsKKyAgICAgICAg
ICAgICAgICBqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCBob29rcyAmJiAic2V0
IiBpbiBob29rcyAmJgorICAgICAgICAgICAgICAgICggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2
YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
cmV0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSggbmFt
ZSwgdmFsdWUgKyAiIiApOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdl
dCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7CisgICAgICAgICAgICByZXR1cm4gcmV0Owor
ICAgICAgICB9CisKKyAgICAgICAgcmV0ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgbmFtZSAp
OworCisgICAgICAgIC8vIE5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHJldHVybiBudWxsLCB3ZSBu
b3JtYWxpemUgdG8gdW5kZWZpbmVkCisgICAgICAgIHJldHVybiByZXQgPT0gbnVsbCA/IHVuZGVm
aW5lZCA6IHJldDsKKyAgICB9LAorCisgICAgYXR0ckhvb2tzOiB7CisgICAgICAgIHR5cGU6IHsK
KyAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgeworICAgICAgICAgICAg
ICAgIGlmICggIXN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gInJhZGlvIiAmJgorICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJpbnB1dCIgKSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IGVsZW0udmFsdWU7CisgICAgICAgICAgICAgICAg
ICAgIGVsZW0uc2V0QXR0cmlidXRlKCAidHlwZSIsIHZhbHVlICk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICggdmFsICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS52YWx1ZSA9IHZh
bDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFs
dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSwK
KworICAgIHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKKyAgICAgICAgdmFy
IG5hbWUsCisgICAgICAgICAgICBpID0gMCwKKworICAgICAgICAgICAgLy8gQXR0cmlidXRlIG5h
bWVzIGNhbiBjb250YWluIG5vbi1IVE1MIHdoaXRlc3BhY2UgY2hhcmFjdGVycworICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwj
YXR0cmlidXRlcy0yCisgICAgICAgICAgICBhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRj
aCggcm5vdGh0bWx3aGl0ZSApOworCisgICAgICAgIGlmICggYXR0ck5hbWVzICYmIGVsZW0ubm9k
ZVR5cGUgPT09IDEgKSB7CisgICAgICAgICAgICB3aGlsZSAoICggbmFtZSA9IGF0dHJOYW1lc1sg
aSsrIF0gKSApIHsKKyAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSAp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfSApOworCisvLyBIb29rcyBmb3Ig
Ym9vbGVhbiBhdHRyaWJ1dGVzCitib29sSG9vayA9IHsKKyAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVt
LCB2YWx1ZSwgbmFtZSApIHsKKyAgICAgICAgaWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7CisKKyAg
ICAgICAgICAgIC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2UK
KyAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgbmFtZSApOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBuYW1lOworICAgIH0KK307CisKK2pRdWVyeS5lYWNoKCBq
UXVlcnkuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCggL1x3Ky9nICksIGZ1bmN0aW9uKCBp
LCBuYW1lICkgeworICAgIHZhciBnZXR0ZXIgPSBhdHRySGFuZGxlWyBuYW1lIF0gfHwgalF1ZXJ5
LmZpbmQuYXR0cjsKKworICAgIGF0dHJIYW5kbGVbIG5hbWUgXSA9IGZ1bmN0aW9uKCBlbGVtLCBu
YW1lLCBpc1hNTCApIHsKKyAgICAgICAgdmFyIHJldCwgaGFuZGxlLAorICAgICAgICAgICAgbG93
ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKKworICAgICAgICBpZiAoICFpc1hNTCAp
IHsKKworICAgICAgICAgICAgLy8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcCBieSB0ZW1wb3Jhcmls
eSByZW1vdmluZyB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGdldHRlcgorICAgICAgICAgICAgaGFu
ZGxlID0gYXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdOworICAgICAgICAgICAgYXR0ckhhbmRs
ZVsgbG93ZXJjYXNlTmFtZSBdID0gcmV0OworICAgICAgICAgICAgcmV0ID0gZ2V0dGVyKCBlbGVt
LCBuYW1lLCBpc1hNTCApICE9IG51bGwgPworICAgICAgICAgICAgICAgIGxvd2VyY2FzZU5hbWUg
OgorICAgICAgICAgICAgICAgIG51bGw7CisgICAgICAgICAgICBhdHRySGFuZGxlWyBsb3dlcmNh
c2VOYW1lIF0gPSBoYW5kbGU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9
OworfSApOworCisKKworCit2YXIgcmZvY3VzYWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRh
cmVhfGJ1dHRvbikkL2ksCisgICAgcmNsaWNrYWJsZSA9IC9eKD86YXxhcmVhKSQvaTsKKworalF1
ZXJ5LmZuLmV4dGVuZCggeworICAgIHByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKKyAg
ICAgICAgcmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LnByb3AsIG5hbWUsIHZhbHVlLCBhcmd1
bWVudHMubGVuZ3RoID4gMSApOworICAgIH0sCisKKyAgICByZW1vdmVQcm9wOiBmdW5jdGlvbigg
bmFtZSApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICBkZWxldGUgdGhpc1sgalF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lIF07CisgICAg
ICAgIH0gKTsKKyAgICB9Cit9ICk7CisKK2pRdWVyeS5leHRlbmQoIHsKKyAgICBwcm9wOiBmdW5j
dGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7CisgICAgICAgIHZhciByZXQsIGhvb2tzLAorICAg
ICAgICAgICAgblR5cGUgPSBlbGVtLm5vZGVUeXBlOworCisgICAgICAgIC8vIERvbid0IGdldC9z
ZXQgcHJvcGVydGllcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXMKKyAgICAg
ICAgaWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggblR5cGUgIT09IDEg
fHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkgeworCisgICAgICAgICAgICAvLyBGaXggbmFt
ZSBhbmQgYXR0YWNoIGhvb2tzCisgICAgICAgICAgICBuYW1lID0galF1ZXJ5LnByb3BGaXhbIG5h
bWUgXSB8fCBuYW1lOworICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkucHJvcEhvb2tzWyBuYW1l
IF07CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7Cisg
ICAgICAgICAgICBpZiAoIGhvb2tzICYmICJzZXQiIGluIGhvb2tzICYmCisgICAgICAgICAgICAg
ICAgKCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVk
ICkgeworICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHJldHVybiAoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBl
bGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gZWxlbVsgbmFtZSBdOworICAgIH0sCisKKyAgICBwcm9w
SG9va3M6IHsKKyAgICAgICAgdGFiSW5kZXg6IHsKKyAgICAgICAgICAgIGdldDogZnVuY3Rpb24o
IGVsZW0gKSB7CisKKyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5
CisgICAgICAgICAgICAgICAgLy8gZWxlbS50YWJJbmRleCBkb2Vzbid0IGFsd2F5cyByZXR1cm4g
dGhlCisgICAgICAgICAgICAgICAgLy8gY29ycmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVu
IGV4cGxpY2l0bHkgc2V0CisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5v
cmcvd2ViLzIwMTQxMTE2MjMzMzQ3L2h0dHA6Ly9mbHVpZHByb2plY3Qub3JnL2Jsb2cvMjAwOC8w
MS8wOS9nZXR0aW5nLXNldHRpbmctYW5kLXJlbW92aW5nLXRhYmluZGV4LXZhbHVlcy13aXRoLWph
dmFzY3JpcHQvCisgICAgICAgICAgICAgICAgLy8gVXNlIHByb3BlciBhdHRyaWJ1dGUgcmV0cmll
dmFsKCMxMjA3MikKKyAgICAgICAgICAgICAgICB2YXIgdGFiaW5kZXggPSBqUXVlcnkuZmluZC5h
dHRyKCBlbGVtLCAidGFiaW5kZXgiICk7CisKKyAgICAgICAgICAgICAgICBpZiAoIHRhYmluZGV4
ICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoIHRhYmluZGV4LCAxMCAp
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICgKKyAgICAgICAgICAg
ICAgICAgICAgcmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgcmNsaWNrYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiYKKyAgICAgICAgICAg
ICAgICAgICAgZWxlbS5ocmVmCisgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVy
biAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisKKyAgICBwcm9wRml4OiB7
CisgICAgICAgICJmb3IiOiAiaHRtbEZvciIsCisgICAgICAgICJjbGFzcyI6ICJjbGFzc05hbWUi
CisgICAgfQorfSApOworCisvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHkKKy8vIEFjY2Vzc2luZyB0
aGUgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eQorLy8gZm9yY2VzIHRoZSBicm93c2VyIHRvIHJlc3Bl
Y3Qgc2V0dGluZyBzZWxlY3RlZAorLy8gb24gdGhlIG9wdGlvbgorLy8gVGhlIGdldHRlciBlbnN1
cmVzIGEgZGVmYXVsdCBvcHRpb24gaXMgc2VsZWN0ZWQKKy8vIHdoZW4gaW4gYW4gb3B0Z3JvdXAK
Ky8vIGVzbGludCBydWxlICJuby11bnVzZWQtZXhwcmVzc2lvbnMiIGlzIGRpc2FibGVkIGZvciB0
aGlzIGNvZGUKKy8vIHNpbmNlIGl0IGNvbnNpZGVycyBzdWNoIGFjY2Vzc2lvbnMgbm9vcAoraWYg
KCAhc3VwcG9ydC5vcHRTZWxlY3RlZCApIHsKKyAgICBqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVk
ID0geworICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworCisgICAgICAgICAgICAvKiBl
c2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiAib2ZmIiAqLworCisgICAgICAgICAgICB2YXIg
cGFyZW50ID0gZWxlbS5wYXJlbnROb2RlOworICAgICAgICAgICAgaWYgKCBwYXJlbnQgJiYgcGFy
ZW50LnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICAgICAgcGFyZW50LnBhcmVudE5vZGUuc2Vs
ZWN0ZWRJbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAg
ICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworCisgICAgICAgICAgICAv
KiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiAib2ZmIiAqLworCisgICAgICAgICAgICB2
YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlOworICAgICAgICAgICAgaWYgKCBwYXJlbnQgKSB7
CisgICAgICAgICAgICAgICAgcGFyZW50LnNlbGVjdGVkSW5kZXg7CisKKyAgICAgICAgICAgICAg
ICBpZiAoIHBhcmVudC5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgICAgICAgICBwYXJlbnQu
cGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH07Cit9CisKK2pRdWVyeS5lYWNoKCBbCisgICAgInRhYkluZGV4
IiwKKyAgICAicmVhZE9ubHkiLAorICAgICJtYXhMZW5ndGgiLAorICAgICJjZWxsU3BhY2luZyIs
CisgICAgImNlbGxQYWRkaW5nIiwKKyAgICAicm93U3BhbiIsCisgICAgImNvbFNwYW4iLAorICAg
ICJ1c2VNYXAiLAorICAgICJmcmFtZUJvcmRlciIsCisgICAgImNvbnRlbnRFZGl0YWJsZSIKK10s
IGZ1bmN0aW9uKCkgeworICAgIGpRdWVyeS5wcm9wRml4WyB0aGlzLnRvTG93ZXJDYXNlKCkgXSA9
IHRoaXM7Cit9ICk7CisKKworCisKKyAgICAvLyBTdHJpcCBhbmQgY29sbGFwc2Ugd2hpdGVzcGFj
ZSBhY2NvcmRpbmcgdG8gSFRNTCBzcGVjCisgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdn
Lm9yZy9tdWx0aXBhZ2UvaW5mcmFzdHJ1Y3R1cmUuaHRtbCNzdHJpcC1hbmQtY29sbGFwc2Utd2hp
dGVzcGFjZQorICAgIGZ1bmN0aW9uIHN0cmlwQW5kQ29sbGFwc2UoIHZhbHVlICkgeworICAgICAg
ICB2YXIgdG9rZW5zID0gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTsKKyAgICAg
ICAgcmV0dXJuIHRva2Vucy5qb2luKCAiICIgKTsKKyAgICB9CisKKworZnVuY3Rpb24gZ2V0Q2xh
c3MoIGVsZW0gKSB7CisgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlICYmIGVsZW0uZ2V0QXR0
cmlidXRlKCAiY2xhc3MiICkgfHwgIiI7Cit9CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKyAgICBh
ZGRDbGFzczogZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICB2YXIgY2xhc3NlcywgZWxlbSwg
Y3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsCisgICAgICAgICAgICBpID0gMDsK
KworICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7CisgICAgICAgICAgICAgICAgalF1
ZXJ5KCB0aGlzICkuYWRkQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlz
ICkgKSApOworICAgICAgICAgICAgfSApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCB0eXBl
b2YgdmFsdWUgPT09ICJzdHJpbmciICYmIHZhbHVlICkgeworICAgICAgICAgICAgY2xhc3NlcyA9
IHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107CisKKyAgICAgICAgICAgIHdoaWxl
ICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHsKKyAgICAgICAgICAgICAgICBjdXJWYWx1ZSA9
IGdldENsYXNzKCBlbGVtICk7CisgICAgICAgICAgICAgICAgY3VyID0gZWxlbS5ub2RlVHlwZSA9
PT0gMSAmJiAoICIgIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyAiICIgKTsKKwor
ICAgICAgICAgICAgICAgIGlmICggY3VyICkgeworICAgICAgICAgICAgICAgICAgICBqID0gMDsK
KyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAoIGNsYXp6ID0gY2xhc3Nlc1sgaisrIF0gKSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY3VyLmluZGV4T2YoICIgIiArIGNsYXp6
ICsgIiAiICkgPCAwICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ciArPSBjbGF6
eiArICIgIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBh
dm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuCisgICAgICAgICAgICAgICAgICAgIGZpbmFsVmFsdWUg
PSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjdXJW
YWx1ZSAhPT0gZmluYWxWYWx1ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc2V0
QXR0cmlidXRlKCAiY2xhc3MiLCBmaW5hbFZhbHVlICk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgcmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSAp
IHsKKyAgICAgICAgdmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBm
aW5hbFZhbHVlLAorICAgICAgICAgICAgaSA9IDA7CisKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNG
dW5jdGlvbiggdmFsdWUgKSApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0
aW9uKCBqICkgeworICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnJlbW92ZUNsYXNzKCB2
YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTsKKyAgICAgICAgICAgIH0g
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5hdHRyKCAiY2xhc3MiLCAiIiApOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICYmIHZhbHVlICkgeworICAgICAg
ICAgICAgY2xhc3NlcyA9IHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107CisKKyAg
ICAgICAgICAgIHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHsKKyAgICAgICAgICAg
ICAgICBjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7CisKKyAgICAgICAgICAgICAgICAvLyBU
aGlzIGV4cHJlc3Npb24gaXMgaGVyZSBmb3IgYmV0dGVyIGNvbXByZXNzaWJpbGl0eSAoc2VlIGFk
ZENsYXNzKQorICAgICAgICAgICAgICAgIGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCAi
ICIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgIiAiICk7CisKKyAgICAgICAgICAg
ICAgICBpZiAoIGN1ciApIHsKKyAgICAgICAgICAgICAgICAgICAgaiA9IDA7CisgICAgICAgICAg
ICAgICAgICAgIHdoaWxlICggKCBjbGF6eiA9IGNsYXNzZXNbIGorKyBdICkgKSB7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSAqYWxsKiBpbnN0YW5jZXMKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHdoaWxlICggY3VyLmluZGV4T2YoICIgIiArIGNsYXp6ICsgIiAiICkgPiAt
MSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXIgPSBjdXIucmVwbGFjZSggIiAi
ICsgY2xhenogKyAiICIsICIgIiApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gT25seSBhc3NpZ24gaWYg
ZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy4KKyAgICAgICAgICAgICAgICAg
ICAgZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoICJjbGFzcyIsIGZpbmFsVmFsdWUgKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICB0b2dnbGVDbGFzczogZnVu
Y3Rpb24oIHZhbHVlLCBzdGF0ZVZhbCApIHsKKyAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFs
dWU7CisKKyAgICAgICAgaWYgKCB0eXBlb2Ygc3RhdGVWYWwgPT09ICJib29sZWFuIiAmJiB0eXBl
ID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0ZVZhbCA/IHRoaXMuYWRk
Q2xhc3MoIHZhbHVlICkgOiB0aGlzLnJlbW92ZUNsYXNzKCB2YWx1ZSApOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkgeworICAgICAgICAgICAgICAgIGpRdWVy
eSggdGhpcyApLnRvZ2dsZUNsYXNzKAorICAgICAgICAgICAgICAgICAgICB2YWx1ZS5jYWxsKCB0
aGlzLCBpLCBnZXRDbGFzcyggdGhpcyApLCBzdGF0ZVZhbCApLAorICAgICAgICAgICAgICAgICAg
ICBzdGF0ZVZhbAorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9ICk7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
IHZhciBjbGFzc05hbWUsIGksIHNlbGYsIGNsYXNzTmFtZXM7CisKKyAgICAgICAgICAgIGlmICgg
dHlwZSA9PT0gInN0cmluZyIgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBUb2dnbGUgaW5kaXZp
ZHVhbCBjbGFzcyBuYW1lcworICAgICAgICAgICAgICAgIGkgPSAwOworICAgICAgICAgICAgICAg
IHNlbGYgPSBqUXVlcnkoIHRoaXMgKTsKKyAgICAgICAgICAgICAgICBjbGFzc05hbWVzID0gdmFs
dWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTsKKworICAgICAgICAgICAgICAgIHdoaWxl
ICggKCBjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBpKysgXSApICkgeworCisgICAgICAgICAgICAg
ICAgICAgIC8vIENoZWNrIGVhY2ggY2xhc3NOYW1lIGdpdmVuLCBzcGFjZSBzZXBhcmF0ZWQgbGlz
dAorICAgICAgICAgICAgICAgICAgICBpZiAoIHNlbGYuaGFzQ2xhc3MoIGNsYXNzTmFtZSApICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVDbGFzcyggY2xhc3NOYW1lICk7
CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLmFkZENsYXNzKCBjbGFzc05hbWUgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVG9nZ2xlIHdob2xlIGNsYXNzIG5hbWUKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZSA9PT0gImJv
b2xlYW4iICkgeworICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9IGdldENsYXNzKCB0aGlzICk7
CisgICAgICAgICAgICAgICAgaWYgKCBjbGFzc05hbWUgKSB7CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gU3RvcmUgY2xhc3NOYW1lIGlmIHNldAorICAgICAgICAgICAgICAgICAgICBkYXRhUHJp
di5zZXQoIHRoaXMsICJfX2NsYXNzTmFtZV9fIiwgY2xhc3NOYW1lICk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaGFzIGEgY2xhc3MgbmFt
ZSBvciBpZiB3ZSdyZSBwYXNzZWQgYGZhbHNlYCwKKyAgICAgICAgICAgICAgICAvLyB0aGVuIHJl
bW92ZSB0aGUgd2hvbGUgY2xhc3NuYW1lIChpZiB0aGVyZSB3YXMgb25lLCB0aGUgYWJvdmUgc2F2
ZWQgaXQpLgorICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSBicmluZyBiYWNrIHdoYXRldmVy
IHdhcyBwcmV2aW91c2x5IHNhdmVkIChpZiBhbnl0aGluZyksCisgICAgICAgICAgICAgICAgLy8g
ZmFsbGluZyBiYWNrIHRvIHRoZSBlbXB0eSBzdHJpbmcgaWYgbm90aGluZyB3YXMgc3RvcmVkLgor
ICAgICAgICAgICAgICAgIGlmICggdGhpcy5zZXRBdHRyaWJ1dGUgKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCAiY2xhc3MiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgY2xhc3NOYW1lIHx8IHZhbHVlID09PSBmYWxzZSA/CisgICAgICAgICAgICAgICAgICAgICAg
ICAiIiA6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUHJpdi5nZXQoIHRoaXMsICJfX2Ns
YXNzTmFtZV9fIiApIHx8ICIiCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9ICk7CisgICAgfSwKKworICAgIGhhc0NsYXNz
OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAgICAgIHZhciBjbGFzc05hbWUsIGVsZW0sCisg
ICAgICAgICAgICBpID0gMDsKKworICAgICAgICBjbGFzc05hbWUgPSAiICIgKyBzZWxlY3RvciAr
ICIgIjsKKyAgICAgICAgd2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkgeworICAgICAg
ICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmCisgICAgICAgICAgICAgICAgKCAiICIg
KyBzdHJpcEFuZENvbGxhcHNlKCBnZXRDbGFzcyggZWxlbSApICkgKyAiICIgKS5pbmRleE9mKCBj
bGFzc05hbWUgKSA+IC0xICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
ICk7CisKKworCisKK3ZhciBycmV0dXJuID0gL1xyL2c7CisKK2pRdWVyeS5mbi5leHRlbmQoIHsK
KyAgICB2YWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgdmFyIGhvb2tzLCByZXQsIGlz
RnVuY3Rpb24sCisgICAgICAgICAgICBlbGVtID0gdGhpc1sgMCBdOworCisgICAgICAgIGlmICgg
IWFyZ3VtZW50cy5sZW5ndGggKSB7CisgICAgICAgICAgICBpZiAoIGVsZW0gKSB7CisgICAgICAg
ICAgICAgICAgaG9va3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0udHlwZSBdIHx8CisgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeS52YWxIb29rc1sgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgp
IF07CisKKyAgICAgICAgICAgICAgICBpZiAoIGhvb2tzICYmCisgICAgICAgICAgICAgICAgICAg
ICJnZXQiIGluIGhvb2tzICYmCisgICAgICAgICAgICAgICAgICAgICggcmV0ID0gaG9va3MuZ2V0
KCBlbGVtLCAidmFsdWUiICkgKSAhPT0gdW5kZWZpbmVkCisgICAgICAgICAgICAgICAgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgcmV0ID0gZWxlbS52YWx1ZTsKKworICAgICAgICAgICAgICAgIC8vIEhhbmRs
ZSBtb3N0IGNvbW1vbiBzdHJpbmcgY2FzZXMKKyAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBy
ZXQgPT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0LnJlcGxh
Y2UoIHJyZXR1cm4sICIiICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
Ly8gSGFuZGxlIGNhc2VzIHdoZXJlIHZhbHVlIGlzIG51bGwvdW5kZWYgb3IgbnVtYmVyCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJldCA9PSBudWxsID8gIiIgOiByZXQ7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlzRnVuY3Rpb24g
PSBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKTsKKworICAgICAgICByZXR1cm4gdGhpcy5lYWNo
KCBmdW5jdGlvbiggaSApIHsKKyAgICAgICAgICAgIHZhciB2YWw7CisKKyAgICAgICAgICAgIGlm
ICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggaXNGdW5jdGlvbiApIHsKKyAgICAgICAgICAg
ICAgICB2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBqUXVlcnkoIHRoaXMgKS52YWwoKSApOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWwgPSB2YWx1ZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gVHJlYXQgbnVsbC91bmRlZmluZWQgYXMgIiI7IGNv
bnZlcnQgbnVtYmVycyB0byBzdHJpbmcKKyAgICAgICAgICAgIGlmICggdmFsID09IG51bGwgKSB7
CisgICAgICAgICAgICAgICAgdmFsID0gIiI7CisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5
cGVvZiB2YWwgPT09ICJudW1iZXIiICkgeworICAgICAgICAgICAgICAgIHZhbCArPSAiIjsKKwor
ICAgICAgICAgICAgfSBlbHNlIGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbCApICkgeworICAgICAg
ICAgICAgICAgIHZhbCA9IGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbHVlICkgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICIiIDogdmFsdWUgKyAiIjsK
KyAgICAgICAgICAgICAgICB9ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGhvb2tz
ID0galF1ZXJ5LnZhbEhvb2tzWyB0aGlzLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIHRoaXMu
bm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdOworCisgICAgICAgICAgICAvLyBJZiBzZXQgcmV0dXJu
cyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBub3JtYWwgc2V0dGluZworICAgICAgICAgICAgaWYg
KCAhaG9va3MgfHwgISggInNldCIgaW4gaG9va3MgKSB8fCBob29rcy5zZXQoIHRoaXMsIHZhbCwg
InZhbHVlIiApID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9
IHZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOworICAgIH0KK30gKTsKKworalF1ZXJ5
LmV4dGVuZCggeworICAgIHZhbEhvb2tzOiB7CisgICAgICAgIG9wdGlvbjogeworICAgICAgICAg
ICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKKworICAgICAgICAgICAgICAgIHZhciB2YWwgPSBq
UXVlcnkuZmluZC5hdHRyKCBlbGVtLCAidmFsdWUiICk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHZhbCAhPSBudWxsID8KKyAgICAgICAgICAgICAgICAgICAgdmFsIDoKKworICAgICAgICAgICAg
ICAgICAgICAvLyBTdXBwb3J0OiBJRSA8PTEwIC0gMTEgb25seQorICAgICAgICAgICAgICAgICAg
ICAvLyBvcHRpb24udGV4dCB0aHJvd3MgZXhjZXB0aW9ucyAoIzE0Njg2LCAjMTQ4NTgpCisgICAg
ICAgICAgICAgICAgICAgIC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlCisgICAgICAg
ICAgICAgICAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWFuZC1j
b2xsYXBzZS13aGl0ZXNwYWNlCisgICAgICAgICAgICAgICAgICAgIHN0cmlwQW5kQ29sbGFwc2Uo
IGpRdWVyeS50ZXh0KCBlbGVtICkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAg
ICAgc2VsZWN0OiB7CisgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAg
ICAgICAgICAgIHZhciB2YWx1ZSwgb3B0aW9uLCBpLAorICAgICAgICAgICAgICAgICAgICBvcHRp
b25zID0gZWxlbS5vcHRpb25zLAorICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGVsZW0uc2Vs
ZWN0ZWRJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgb25lID0gZWxlbS50eXBlID09PSAic2Vs
ZWN0LW9uZSIsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSwK
KyAgICAgICAgICAgICAgICAgICAgbWF4ID0gb25lID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5n
dGg7CisKKyAgICAgICAgICAgICAgICBpZiAoIGluZGV4IDwgMCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgaSA9IG1heDsKKworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGkgPSBvbmUgPyBpbmRleCA6IDA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCB0aGUgc2VsZWN0ZWQgb3B0aW9ucworICAgICAg
ICAgICAgICAgIGZvciAoIDsgaSA8IG1heDsgaSsrICkgeworICAgICAgICAgICAgICAgICAgICBv
cHRpb24gPSBvcHRpb25zWyBpIF07CisKKyAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDog
SUUgPD05IG9ubHkKKyAgICAgICAgICAgICAgICAgICAgLy8gSUU4LTkgZG9lc24ndCB1cGRhdGUg
c2VsZWN0ZWQgYWZ0ZXIgZm9ybSByZXNldCAoIzI1NTEpCisgICAgICAgICAgICAgICAgICAgIGlm
ICggKCBvcHRpb24uc2VsZWN0ZWQgfHwgaSA9PT0gaW5kZXggKSAmJgorCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRG9uJ3QgcmV0dXJuIG9wdGlvbnMgdGhhdCBhcmUgZGlzYWJsZWQg
b3IgaW4gYSBkaXNhYmxlZCBvcHRncm91cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICFv
cHRpb24uZGlzYWJsZWQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICFvcHRpb24u
cGFyZW50Tm9kZS5kaXNhYmxlZCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAh
alF1ZXJ5Lm5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwgIm9wdGdyb3VwIiApICkgKSB7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgc3BlY2lmaWMgdmFsdWUgZm9yIHRo
ZSBvcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0galF1ZXJ5KCBvcHRpb24g
KS52YWwoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCBhbiBh
cnJheSBmb3Igb25lIHNlbGVjdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb25lICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTXVsdGktU2VsZWN0
cyByZXR1cm4gYW4gYXJyYXkKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKCB2
YWx1ZSApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlczsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAg
IHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgeworICAgICAgICAgICAgICAgIHZhciBvcHRp
b25TZXQsIG9wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IGVsZW0ub3B0aW9u
cywKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSggdmFsdWUg
KSwKKyAgICAgICAgICAgICAgICAgICAgaSA9IG9wdGlvbnMubGVuZ3RoOworCisgICAgICAgICAg
ICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbiA9IG9wdGlv
bnNbIGkgXTsKKworICAgICAgICAgICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25k
LWFzc2lnbiAqLworCisgICAgICAgICAgICAgICAgICAgIGlmICggb3B0aW9uLnNlbGVjdGVkID0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5pbkFycmF5KCBqUXVlcnkudmFsSG9va3Mu
b3B0aW9uLmdldCggb3B0aW9uICksIHZhbHVlcyApID4gLTEKKyAgICAgICAgICAgICAgICAgICAg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25TZXQgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1j
b25kLWFzc2lnbiAqLworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEZv
cmNlIGJyb3dzZXJzIHRvIGJlaGF2ZSBjb25zaXN0ZW50bHkgd2hlbiBub24tbWF0Y2hpbmcgdmFs
dWUgaXMgc2V0CisgICAgICAgICAgICAgICAgaWYgKCAhb3B0aW9uU2V0ICkgeworICAgICAgICAg
ICAgICAgICAgICBlbGVtLnNlbGVjdGVkSW5kZXggPSAtMTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KK30gKTsKKworLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXIKK2pR
dWVyeS5lYWNoKCBbICJyYWRpbyIsICJjaGVja2JveCIgXSwgZnVuY3Rpb24oKSB7CisgICAgalF1
ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSB7CisgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZh
bHVlICkgeworICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNBcnJheSggdmFsdWUgKSApIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gKCBlbGVtLmNoZWNrZWQgPSBqUXVlcnkuaW5BcnJheSggalF1
ZXJ5KCBlbGVtICkudmFsKCksIHZhbHVlICkgPiAtMSApOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfTsKKyAgICBpZiAoICFzdXBwb3J0LmNoZWNrT24gKSB7CisgICAgICAgIGpRdWVy
eS52YWxIb29rc1sgdGhpcyBdLmdldCA9IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAg
cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCAidmFsdWUiICkgPT09IG51bGwgPyAib24iIDogZWxl
bS52YWx1ZTsKKyAgICAgICAgfTsKKyAgICB9Cit9ICk7CisKKworCisKKy8vIFJldHVybiBqUXVl
cnkgZm9yIGF0dHJpYnV0ZXMtb25seSBpbmNsdXNpb24KKworCit2YXIgcmZvY3VzTW9ycGggPSAv
Xig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC87CisKK2pRdWVyeS5leHRlbmQoIGpRdWVy
eS5ldmVudCwgeworCisgICAgdHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBlbGVtLCBv
bmx5SGFuZGxlcnMgKSB7CisKKyAgICAgICAgdmFyIGksIGN1ciwgdG1wLCBidWJibGVUeXBlLCBv
bnR5cGUsIGhhbmRsZSwgc3BlY2lhbCwKKyAgICAgICAgICAgIGV2ZW50UGF0aCA9IFsgZWxlbSB8
fCBkb2N1bWVudCBdLAorICAgICAgICAgICAgdHlwZSA9IGhhc093bi5jYWxsKCBldmVudCwgInR5
cGUiICkgPyBldmVudC50eXBlIDogZXZlbnQsCisgICAgICAgICAgICBuYW1lc3BhY2VzID0gaGFz
T3duLmNhbGwoIGV2ZW50LCAibmFtZXNwYWNlIiApID8gZXZlbnQubmFtZXNwYWNlLnNwbGl0KCAi
LiIgKSA6IFtdOworCisgICAgICAgIGN1ciA9IHRtcCA9IGVsZW0gPSBlbGVtIHx8IGRvY3VtZW50
OworCisgICAgICAgIC8vIERvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVz
CisgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4
ICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gZm9jdXMv
Ymx1ciBtb3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3QgZmlyaW5nIHRoZW0g
cmlnaHQgbm93CisgICAgICAgIGlmICggcmZvY3VzTW9ycGgudGVzdCggdHlwZSArIGpRdWVyeS5l
dmVudC50cmlnZ2VyZWQgKSApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICggdHlwZS5pbmRleE9mKCAiLiIgKSA+IC0xICkgeworCisgICAgICAgICAgICAv
LyBOYW1lc3BhY2VkIHRyaWdnZXI7IGNyZWF0ZSBhIHJlZ2V4cCB0byBtYXRjaCBldmVudCB0eXBl
IGluIGhhbmRsZSgpCisgICAgICAgICAgICBuYW1lc3BhY2VzID0gdHlwZS5zcGxpdCggIi4iICk7
CisgICAgICAgICAgICB0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpOworICAgICAgICAgICAgbmFt
ZXNwYWNlcy5zb3J0KCk7CisgICAgICAgIH0KKyAgICAgICAgb250eXBlID0gdHlwZS5pbmRleE9m
KCAiOiIgKSA8IDAgJiYgIm9uIiArIHR5cGU7CisKKyAgICAgICAgLy8gQ2FsbGVyIGNhbiBwYXNz
IGluIGEgalF1ZXJ5LkV2ZW50IG9iamVjdCwgT2JqZWN0LCBvciBqdXN0IGFuIGV2ZW50IHR5cGUg
c3RyaW5nCisgICAgICAgIGV2ZW50ID0gZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gPworICAgICAg
ICAgICAgZXZlbnQgOgorICAgICAgICAgICAgbmV3IGpRdWVyeS5FdmVudCggdHlwZSwgdHlwZW9m
IGV2ZW50ID09PSAib2JqZWN0IiAmJiBldmVudCApOworCisgICAgICAgIC8vIFRyaWdnZXIgYml0
bWFzazogJiAxIGZvciBuYXRpdmUgaGFuZGxlcnM7ICYgMiBmb3IgalF1ZXJ5IChhbHdheXMgdHJ1
ZSkKKyAgICAgICAgZXZlbnQuaXNUcmlnZ2VyID0gb25seUhhbmRsZXJzID8gMiA6IDM7CisgICAg
ICAgIGV2ZW50Lm5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuam9pbiggIi4iICk7CisgICAgICAgIGV2
ZW50LnJuYW1lc3BhY2UgPSBldmVudC5uYW1lc3BhY2UgPworICAgICAgICAgICAgbmV3IFJlZ0V4
cCggIihefFxcLikiICsgbmFtZXNwYWNlcy5qb2luKCAiXFwuKD86LipcXC58KSIgKSArICIoXFwu
fCQpIiApIDoKKyAgICAgICAgICAgIG51bGw7CisKKyAgICAgICAgLy8gQ2xlYW4gdXAgdGhlIGV2
ZW50IGluIGNhc2UgaXQgaXMgYmVpbmcgcmV1c2VkCisgICAgICAgIGV2ZW50LnJlc3VsdCA9IHVu
ZGVmaW5lZDsKKyAgICAgICAgaWYgKCAhZXZlbnQudGFyZ2V0ICkgeworICAgICAgICAgICAgZXZl
bnQudGFyZ2V0ID0gZWxlbTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENsb25lIGFueSBpbmNv
bWluZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRpbmcgdGhlIGhhbmRsZXIgYXJn
IGxpc3QKKyAgICAgICAgZGF0YSA9IGRhdGEgPT0gbnVsbCA/CisgICAgICAgICAgICBbIGV2ZW50
IF0gOgorICAgICAgICAgICAgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSwgWyBldmVudCBdICk7CisK
KyAgICAgICAgLy8gQWxsb3cgc3BlY2lhbCBldmVudHMgdG8gZHJhdyBvdXRzaWRlIHRoZSBsaW5l
cworICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsK
KyAgICAgICAgaWYgKCAhb25seUhhbmRsZXJzICYmIHNwZWNpYWwudHJpZ2dlciAmJiBzcGVjaWFs
LnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFsc2UgKSB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBEZXRlcm1pbmUgZXZlbnQgcHJvcGFnYXRp
b24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBzcGVjICgjOTk1MSkKKyAgICAgICAg
Ly8gQnViYmxlIHVwIHRvIGRvY3VtZW50LCB0aGVuIHRvIHdpbmRvdzsgd2F0Y2ggZm9yIGEgZ2xv
YmFsIG93bmVyRG9jdW1lbnQgdmFyICgjOTcyNCkKKyAgICAgICAgaWYgKCAhb25seUhhbmRsZXJz
ICYmICFzcGVjaWFsLm5vQnViYmxlICYmICFqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHsKKwor
ICAgICAgICAgICAgYnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7Cisg
ICAgICAgICAgICBpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkg
eworICAgICAgICAgICAgICAgIGN1ciA9IGN1ci5wYXJlbnROb2RlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZm9yICggOyBjdXI7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkgeworICAgICAg
ICAgICAgICAgIGV2ZW50UGF0aC5wdXNoKCBjdXIgKTsKKyAgICAgICAgICAgICAgICB0bXAgPSBj
dXI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3
ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKQor
ICAgICAgICAgICAgaWYgKCB0bXAgPT09ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50
ICkgKSB7CisgICAgICAgICAgICAgICAgZXZlbnRQYXRoLnB1c2goIHRtcC5kZWZhdWx0VmlldyB8
fCB0bXAucGFyZW50V2luZG93IHx8IHdpbmRvdyApOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgLy8gRmlyZSBoYW5kbGVycyBvbiB0aGUgZXZlbnQgcGF0aAorICAgICAgICBp
ID0gMDsKKyAgICAgICAgd2hpbGUgKCAoIGN1ciA9IGV2ZW50UGF0aFsgaSsrIF0gKSAmJiAhZXZl
bnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHsKKworICAgICAgICAgICAgZXZlbnQudHlwZSA9
IGkgPiAxID8KKyAgICAgICAgICAgICAgICBidWJibGVUeXBlIDoKKyAgICAgICAgICAgICAgICBz
cGVjaWFsLmJpbmRUeXBlIHx8IHR5cGU7CisKKyAgICAgICAgICAgIC8vIGpRdWVyeSBoYW5kbGVy
CisgICAgICAgICAgICBoYW5kbGUgPSAoIGRhdGFQcml2LmdldCggY3VyLCAiZXZlbnRzIiApIHx8
IHt9IClbIGV2ZW50LnR5cGUgXSAmJgorICAgICAgICAgICAgICAgIGRhdGFQcml2LmdldCggY3Vy
LCAiaGFuZGxlIiApOworICAgICAgICAgICAgaWYgKCBoYW5kbGUgKSB7CisgICAgICAgICAgICAg
ICAgaGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gTmF0aXZlIGhhbmRsZXIKKyAgICAgICAgICAgIGhhbmRsZSA9IG9udHlwZSAmJiBjdXJb
IG9udHlwZSBdOworICAgICAgICAgICAgaWYgKCBoYW5kbGUgJiYgaGFuZGxlLmFwcGx5ICYmIGFj
Y2VwdERhdGEoIGN1ciApICkgeworICAgICAgICAgICAgICAgIGV2ZW50LnJlc3VsdCA9IGhhbmRs
ZS5hcHBseSggY3VyLCBkYXRhICk7CisgICAgICAgICAgICAgICAgaWYgKCBldmVudC5yZXN1bHQg
PT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBl
dmVudC50eXBlID0gdHlwZTsKKworICAgICAgICAvLyBJZiBub2JvZHkgcHJldmVudGVkIHRoZSBk
ZWZhdWx0IGFjdGlvbiwgZG8gaXQgbm93CisgICAgICAgIGlmICggIW9ubHlIYW5kbGVycyAmJiAh
ZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7CisKKyAgICAgICAgICAgIGlmICggKCAhc3Bl
Y2lhbC5fZGVmYXVsdCB8fAorICAgICAgICAgICAgICAgIHNwZWNpYWwuX2RlZmF1bHQuYXBwbHko
IGV2ZW50UGF0aC5wb3AoKSwgZGF0YSApID09PSBmYWxzZSApICYmCisgICAgICAgICAgICAgICAg
YWNjZXB0RGF0YSggZWxlbSApICkgeworCisgICAgICAgICAgICAgICAgLy8gQ2FsbCBhIG5hdGl2
ZSBET00gbWV0aG9kIG9uIHRoZSB0YXJnZXQgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBldmVu
dC4KKyAgICAgICAgICAgICAgICAvLyBEb24ndCBkbyBkZWZhdWx0IGFjdGlvbnMgb24gd2luZG93
LCB0aGF0J3Mgd2hlcmUgZ2xvYmFsIHZhcmlhYmxlcyBiZSAoIzYxNzApCisgICAgICAgICAgICAg
ICAgaWYgKCBvbnR5cGUgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIGVsZW1bIHR5cGUgXSApICYmICFq
UXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBEb24n
dCByZS10cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9k
CisgICAgICAgICAgICAgICAgICAgIHRtcCA9IGVsZW1bIG9udHlwZSBdOworCisgICAgICAgICAg
ICAgICAgICAgIGlmICggdG1wICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsgb250
eXBlIF0gPSBudWxsOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gUHJldmVudCByZS10cmlnZ2VyaW5nIG9mIHRoZSBzYW1lIGV2ZW50LCBzaW5jZSB3ZSBh
bHJlYWR5IGJ1YmJsZWQgaXQgYWJvdmUKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50
LnRyaWdnZXJlZCA9IHR5cGU7CisgICAgICAgICAgICAgICAgICAgIGVsZW1bIHR5cGUgXSgpOwor
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5kZWZpbmVkOwor
CisgICAgICAgICAgICAgICAgICAgIGlmICggdG1wICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbVsgb250eXBlIF0gPSB0bXA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXZl
bnQucmVzdWx0OworICAgIH0sCisKKyAgICAvLyBQaWdneWJhY2sgb24gYSBkb25vciBldmVudCB0
byBzaW11bGF0ZSBhIGRpZmZlcmVudCBvbmUKKyAgICAvLyBVc2VkIG9ubHkgZm9yIGBmb2N1cyhp
biB8IG91dClgIGV2ZW50cworICAgIHNpbXVsYXRlOiBmdW5jdGlvbiggdHlwZSwgZWxlbSwgZXZl
bnQgKSB7CisgICAgICAgIHZhciBlID0galF1ZXJ5LmV4dGVuZCgKKyAgICAgICAgICAgIG5ldyBq
UXVlcnkuRXZlbnQoKSwKKyAgICAgICAgICAgIGV2ZW50LAorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHR5cGU6IHR5cGUsCisgICAgICAgICAgICAgICAgaXNTaW11bGF0ZWQ6IHRydWUK
KyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKKworICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dl
ciggZSwgbnVsbCwgZWxlbSApOworICAgIH0KKworfSApOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7
CisKKyAgICB0cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dl
ciggdHlwZSwgZGF0YSwgdGhpcyApOworICAgICAgICB9ICk7CisgICAgfSwKKyAgICB0cmlnZ2Vy
SGFuZGxlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7CisgICAgICAgIHZhciBlbGVtID0gdGhp
c1sgMCBdOworICAgICAgICBpZiAoIGVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4galF1ZXJ5
LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIGVsZW0sIHRydWUgKTsKKyAgICAgICAgfQorICAg
IH0KK30gKTsKKworCitqUXVlcnkuZWFjaCggKCAiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0
IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgIiArCisgICAgIm1vdXNlZG93biBtb3VzZXVw
IG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlICIgKwor
ICAgICJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRt
ZW51IiApLnNwbGl0KCAiICIgKSwKKyAgICBmdW5jdGlvbiggaSwgbmFtZSApIHsKKworICAgIC8v
IEhhbmRsZSBldmVudCBiaW5kaW5nCisgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbigg
ZGF0YSwgZm4gKSB7CisgICAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/CisgICAg
ICAgICAgICB0aGlzLm9uKCBuYW1lLCBudWxsLCBkYXRhLCBmbiApIDoKKyAgICAgICAgICAgIHRo
aXMudHJpZ2dlciggbmFtZSApOworICAgIH07Cit9ICk7CisKK2pRdWVyeS5mbi5leHRlbmQoIHsK
KyAgICBob3ZlcjogZnVuY3Rpb24oIGZuT3ZlciwgZm5PdXQgKSB7CisgICAgICAgIHJldHVybiB0
aGlzLm1vdXNlZW50ZXIoIGZuT3ZlciApLm1vdXNlbGVhdmUoIGZuT3V0IHx8IGZuT3ZlciApOwor
ICAgIH0KK30gKTsKKworCisKKworc3VwcG9ydC5mb2N1c2luID0gIm9uZm9jdXNpbiIgaW4gd2lu
ZG93OworCisKKy8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00NAorLy8gRmlyZWZveCBkb2Vzbid0IGhh
dmUgZm9jdXMoaW4gfCBvdXQpIGV2ZW50cworLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1
Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02ODc3ODcKKy8vCisvLyBTdXBwb3J0
OiBDaHJvbWUgPD00OCAtIDQ5LCBTYWZhcmkgPD05LjAgLSA5LjEKKy8vIGZvY3VzKGluIHwgb3V0
KSBldmVudHMgZmlyZSBhZnRlciBmb2N1cyAmIGJsdXIgZXZlbnRzLAorLy8gd2hpY2ggaXMgc3Bl
YyB2aW9sYXRpb24gLSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2
ZW50cy1mb2N1c2V2ZW50LWV2ZW50LW9yZGVyCisvLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8v
YnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ0OTg1NworaWYg
KCAhc3VwcG9ydC5mb2N1c2luICkgeworICAgIGpRdWVyeS5lYWNoKCB7IGZvY3VzOiAiZm9jdXNp
biIsIGJsdXI6ICJmb2N1c291dCIgfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHsKKworICAgICAg
ICAvLyBBdHRhY2ggYSBzaW5nbGUgY2FwdHVyaW5nIGhhbmRsZXIgb24gdGhlIGRvY3VtZW50IHdo
aWxlIHNvbWVvbmUgd2FudHMgZm9jdXNpbi9mb2N1c291dAorICAgICAgICB2YXIgaGFuZGxlciA9
IGZ1bmN0aW9uKCBldmVudCApIHsKKyAgICAgICAgICAgIGpRdWVyeS5ldmVudC5zaW11bGF0ZSgg
Zml4LCBldmVudC50YXJnZXQsIGpRdWVyeS5ldmVudC5maXgoIGV2ZW50ICkgKTsKKyAgICAgICAg
fTsKKworICAgICAgICBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZml4IF0gPSB7CisgICAgICAgICAg
ICBzZXR1cDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGRvYyA9IHRoaXMub3du
ZXJEb2N1bWVudCB8fCB0aGlzLAorICAgICAgICAgICAgICAgICAgICBhdHRhY2hlcyA9IGRhdGFQ
cml2LmFjY2VzcyggZG9jLCBmaXggKTsKKworICAgICAgICAgICAgICAgIGlmICggIWF0dGFjaGVz
ICkgeworICAgICAgICAgICAgICAgICAgICBkb2MuYWRkRXZlbnRMaXN0ZW5lciggb3JpZywgaGFu
ZGxlciwgdHJ1ZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkYXRhUHJp
di5hY2Nlc3MoIGRvYywgZml4LCAoIGF0dGFjaGVzIHx8IDAgKSArIDEgKTsKKyAgICAgICAgICAg
IH0sCisgICAgICAgICAgICB0ZWFyZG93bjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLAorICAgICAgICAgICAgICAgICAg
ICBhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXggKSAtIDE7CisKKyAgICAgICAg
ICAgICAgICBpZiAoICFhdHRhY2hlcyApIHsKKyAgICAgICAgICAgICAgICAgICAgZG9jLnJlbW92
ZUV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTsKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YVByaXYucmVtb3ZlKCBkb2MsIGZpeCApOworCisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgYXR0YWNo
ZXMgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAg
fSApOworfQordmFyIGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uOworCit2YXIgbm9uY2UgPSBq
UXVlcnkubm93KCk7CisKK3ZhciBycXVlcnkgPSAoIC9cPy8gKTsKKworCisKKy8vIENyb3NzLWJy
b3dzZXIgeG1sIHBhcnNpbmcKK2pRdWVyeS5wYXJzZVhNTCA9IGZ1bmN0aW9uKCBkYXRhICkgewor
ICAgIHZhciB4bWw7CisgICAgaWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gInN0cmluZyIg
KSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIC8vIFN1cHBvcnQ6IElFIDkg
LSAxMSBvbmx5CisgICAgLy8gSUUgdGhyb3dzIG9uIHBhcnNlRnJvbVN0cmluZyB3aXRoIGludmFs
aWQgaW5wdXQuCisgICAgdHJ5IHsKKyAgICAgICAgeG1sID0gKCBuZXcgd2luZG93LkRPTVBhcnNl
cigpICkucGFyc2VGcm9tU3RyaW5nKCBkYXRhLCAidGV4dC94bWwiICk7CisgICAgfSBjYXRjaCAo
IGUgKSB7CisgICAgICAgIHhtbCA9IHVuZGVmaW5lZDsKKyAgICB9CisKKyAgICBpZiAoICF4bWwg
fHwgeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCAicGFyc2VyZXJyb3IiICkubGVuZ3RoICkgewor
ICAgICAgICBqUXVlcnkuZXJyb3IoICJJbnZhbGlkIFhNTDogIiArIGRhdGEgKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHhtbDsKK307CisKKwordmFyCisgICAgcmJyYWNrZXQgPSAvXFtcXSQvLAorICAg
IHJDUkxGID0gL1xyP1xuL2csCisgICAgcnN1Ym1pdHRlclR5cGVzID0gL14oPzpzdWJtaXR8YnV0
dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLAorICAgIHJzdWJtaXR0YWJsZSA9IC9eKD86aW5wdXR8
c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTsKKworZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZp
eCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkgeworICAgIHZhciBuYW1lOworCisgICAgaWYgKCBq
UXVlcnkuaXNBcnJheSggb2JqICkgKSB7CisKKyAgICAgICAgLy8gU2VyaWFsaXplIGFycmF5IGl0
ZW0uCisgICAgICAgIGpRdWVyeS5lYWNoKCBvYmosIGZ1bmN0aW9uKCBpLCB2ICkgeworICAgICAg
ICAgICAgaWYgKCB0cmFkaXRpb25hbCB8fCByYnJhY2tldC50ZXN0KCBwcmVmaXggKSApIHsKKwor
ICAgICAgICAgICAgICAgIC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci4KKyAg
ICAgICAgICAgICAgICBhZGQoIHByZWZpeCwgdiApOworCisgICAgICAgICAgICB9IGVsc2Ugewor
CisgICAgICAgICAgICAgICAgLy8gSXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3Qp
LCBlbmNvZGUgaXRzIG51bWVyaWMgaW5kZXguCisgICAgICAgICAgICAgICAgYnVpbGRQYXJhbXMo
CisgICAgICAgICAgICAgICAgICAgIHByZWZpeCArICJbIiArICggdHlwZW9mIHYgPT09ICJvYmpl
Y3QiICYmIHYgIT0gbnVsbCA/IGkgOiAiIiApICsgIl0iLAorICAgICAgICAgICAgICAgICAgICB2
LAorICAgICAgICAgICAgICAgICAgICB0cmFkaXRpb25hbCwKKyAgICAgICAgICAgICAgICAgICAg
YWRkCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOworCisg
ICAgfSBlbHNlIGlmICggIXRyYWRpdGlvbmFsICYmIGpRdWVyeS50eXBlKCBvYmogKSA9PT0gIm9i
amVjdCIgKSB7CisKKyAgICAgICAgLy8gU2VyaWFsaXplIG9iamVjdCBpdGVtLgorICAgICAgICBm
b3IgKCBuYW1lIGluIG9iaiApIHsKKyAgICAgICAgICAgIGJ1aWxkUGFyYW1zKCBwcmVmaXggKyAi
WyIgKyBuYW1lICsgIl0iLCBvYmpbIG5hbWUgXSwgdHJhZGl0aW9uYWwsIGFkZCApOworICAgICAg
ICB9CisKKyAgICB9IGVsc2UgeworCisgICAgICAgIC8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS4K
KyAgICAgICAgYWRkKCBwcmVmaXgsIG9iaiApOworICAgIH0KK30KKworLy8gU2VyaWFsaXplIGFu
IGFycmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2YKKy8vIGtleS92YWx1ZXMgaW50byBh
IHF1ZXJ5IHN0cmluZworalF1ZXJ5LnBhcmFtID0gZnVuY3Rpb24oIGEsIHRyYWRpdGlvbmFsICkg
eworICAgIHZhciBwcmVmaXgsCisgICAgICAgIHMgPSBbXSwKKyAgICAgICAgYWRkID0gZnVuY3Rp
b24oIGtleSwgdmFsdWVPckZ1bmN0aW9uICkgeworCisgICAgICAgICAgICAvLyBJZiB2YWx1ZSBp
cyBhIGZ1bmN0aW9uLCBpbnZva2UgaXQgYW5kIHVzZSBpdHMgcmV0dXJuIHZhbHVlCisgICAgICAg
ICAgICB2YXIgdmFsdWUgPSBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWVPckZ1bmN0aW9uICkgPwor
ICAgICAgICAgICAgICAgIHZhbHVlT3JGdW5jdGlvbigpIDoKKyAgICAgICAgICAgICAgICB2YWx1
ZU9yRnVuY3Rpb247CisKKyAgICAgICAgICAgIHNbIHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21w
b25lbnQoIGtleSApICsgIj0iICsKKyAgICAgICAgICAgICAgICBlbmNvZGVVUklDb21wb25lbnQo
IHZhbHVlID09IG51bGwgPyAiIiA6IHZhbHVlICk7CisgICAgICAgIH07CisKKyAgICAvLyBJZiBh
biBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3Jt
IGVsZW1lbnRzLgorICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYm
ICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7CisKKyAgICAgICAgLy8gU2VyaWFsaXpl
IHRoZSBmb3JtIGVsZW1lbnRzCisgICAgICAgIGpRdWVyeS5lYWNoKCBhLCBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgIGFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7CisgICAgICAgIH0gKTsK
KworICAgIH0gZWxzZSB7CisKKyAgICAgICAgLy8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUg
Im9sZCIgd2F5ICh0aGUgd2F5IDEuMy4yIG9yIG9sZGVyCisgICAgICAgIC8vIGRpZCBpdCksIG90
aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LgorICAgICAgICBmb3IgKCBwcmVmaXgg
aW4gYSApIHsKKyAgICAgICAgICAgIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0
cmFkaXRpb25hbCwgYWRkICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhl
IHJlc3VsdGluZyBzZXJpYWxpemF0aW9uCisgICAgcmV0dXJuIHMuam9pbiggIiYiICk7Cit9Owor
CitqUXVlcnkuZm4uZXh0ZW5kKCB7CisgICAgc2VyaWFsaXplOiBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIGpRdWVyeS5wYXJhbSggdGhpcy5zZXJpYWxpemVBcnJheSgpICk7CisgICAgfSwK
KyAgICBzZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLm1h
cCggZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgIC8vIENhbiBhZGQgcHJvcEhvb2sgZm9yICJl
bGVtZW50cyIgdG8gZmlsdGVyIG9yIGFkZCBmb3JtIGVsZW1lbnRzCisgICAgICAgICAgICB2YXIg
ZWxlbWVudHMgPSBqUXVlcnkucHJvcCggdGhpcywgImVsZW1lbnRzIiApOworICAgICAgICAgICAg
cmV0dXJuIGVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJheSggZWxlbWVudHMgKSA6IHRoaXM7Cisg
ICAgICAgIH0gKQorICAgICAgICAuZmlsdGVyKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZh
ciB0eXBlID0gdGhpcy50eXBlOworCisgICAgICAgICAgICAvLyBVc2UgLmlzKCAiOmRpc2FibGVk
IiApIHNvIHRoYXQgZmllbGRzZXRbZGlzYWJsZWRdIHdvcmtzCisgICAgICAgICAgICByZXR1cm4g
dGhpcy5uYW1lICYmICFqUXVlcnkoIHRoaXMgKS5pcyggIjpkaXNhYmxlZCIgKSAmJgorICAgICAg
ICAgICAgICAgIHJzdWJtaXR0YWJsZS50ZXN0KCB0aGlzLm5vZGVOYW1lICkgJiYgIXJzdWJtaXR0
ZXJUeXBlcy50ZXN0KCB0eXBlICkgJiYKKyAgICAgICAgICAgICAgICAoIHRoaXMuY2hlY2tlZCB8
fCAhcmNoZWNrYWJsZVR5cGUudGVzdCggdHlwZSApICk7CisgICAgICAgIH0gKQorICAgICAgICAu
bWFwKCBmdW5jdGlvbiggaSwgZWxlbSApIHsKKyAgICAgICAgICAgIHZhciB2YWwgPSBqUXVlcnko
IHRoaXMgKS52YWwoKTsKKworICAgICAgICAgICAgaWYgKCB2YWwgPT0gbnVsbCApIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCBqUXVlcnkuaXNBcnJheSggdmFsICkgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVy
eS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbCApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCAiXHJcbiIgKSB9
OworICAgICAgICAgICAgICAgIH0gKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0
dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCAiXHJcbiIg
KSB9OworICAgICAgICB9ICkuZ2V0KCk7CisgICAgfQorfSApOworCisKK3ZhcgorICAgIHIyMCA9
IC8lMjAvZywKKyAgICByaGFzaCA9IC8jLiokLywKKyAgICByYW50aUNhY2hlID0gLyhbPyZdKV89
W14mXSovLAorICAgIHJoZWFkZXJzID0gL14oLio/KTpbIFx0XSooW15cclxuXSopJC9tZywKKwor
ICAgIC8vICM3NjUzLCAjODEyNSwgIzgxNTI6IGxvY2FsIHByb3RvY29sIGRldGVjdGlvbgorICAg
IHJsb2NhbFByb3RvY29sID0gL14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9u
fGZpbGV8cmVzfHdpZGdldCk6JC8sCisgICAgcm5vQ29udGVudCA9IC9eKD86R0VUfEhFQUQpJC8s
CisgICAgcnByb3RvY29sID0gL15cL1wvLywKKworICAgIC8qIFByZWZpbHRlcnMKKyAgICAgKiAx
KSBUaGV5IGFyZSB1c2VmdWwgdG8gaW50cm9kdWNlIGN1c3RvbSBkYXRhVHlwZXMgKHNlZSBhamF4
L2pzb25wLmpzIGZvciBhbiBleGFtcGxlKQorICAgICAqIDIpIFRoZXNlIGFyZSBjYWxsZWQ6Cisg
ICAgICogICAgLSBCRUZPUkUgYXNraW5nIGZvciBhIHRyYW5zcG9ydAorICAgICAqICAgIC0gQUZU
RVIgcGFyYW0gc2VyaWFsaXphdGlvbiAocy5kYXRhIGlzIGEgc3RyaW5nIGlmIHMucHJvY2Vzc0Rh
dGEgaXMgdHJ1ZSkKKyAgICAgKiAzKSBrZXkgaXMgdGhlIGRhdGFUeXBlCisgICAgICogNCkgdGhl
IGNhdGNoYWxsIHN5bWJvbCAiKiIgY2FuIGJlIHVzZWQKKyAgICAgKiA1KSBleGVjdXRpb24gd2ls
bCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBjb250aW51ZSBkb3duIHRv
ICIqIiBpZiBuZWVkZWQKKyAgICAgKi8KKyAgICBwcmVmaWx0ZXJzID0ge30sCisKKyAgICAvKiBU
cmFuc3BvcnRzIGJpbmRpbmdzCisgICAgICogMSkga2V5IGlzIHRoZSBkYXRhVHlwZQorICAgICAq
IDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgIioiIGNhbiBiZSB1c2VkCisgICAgICogMykgc2VsZWN0
aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gZ28gdG8gIioi
IGlmIG5lZWRlZAorICAgICAqLworICAgIHRyYW5zcG9ydHMgPSB7fSwKKworICAgIC8vIEF2b2lk
IGNvbW1lbnQtcHJvbG9nIGNoYXIgc2VxdWVuY2UgKCMxMDA5OCk7IG11c3QgYXBwZWFzZSBsaW50
IGFuZCBldmFkZSBjb21wcmVzc2lvbgorICAgIGFsbFR5cGVzID0gIiovIi5jb25jYXQoICIqIiAp
LAorCisgICAgLy8gQW5jaG9yIHRhZyBmb3IgcGFyc2luZyB0aGUgZG9jdW1lbnQgb3JpZ2luCisg
ICAgb3JpZ2luQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImEiICk7CisgICAgb3Jp
Z2luQW5jaG9yLmhyZWYgPSBsb2NhdGlvbi5ocmVmOworCisvLyBCYXNlICJjb25zdHJ1Y3RvciIg
Zm9yIGpRdWVyeS5hamF4UHJlZmlsdGVyIGFuZCBqUXVlcnkuYWpheFRyYW5zcG9ydAorZnVuY3Rp
b24gYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUgKSB7CisKKyAgICAvLyBk
YXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvICIqIgorICAgIHJl
dHVybiBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNzaW9uLCBmdW5jICkgeworCisgICAgICAgIGlm
ICggdHlwZW9mIGRhdGFUeXBlRXhwcmVzc2lvbiAhPT0gInN0cmluZyIgKSB7CisgICAgICAgICAg
ICBmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uOworICAgICAgICAgICAgZGF0YVR5cGVFeHByZXNz
aW9uID0gIioiOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGRhdGFUeXBlLAorICAgICAgICAg
ICAgaSA9IDAsCisgICAgICAgICAgICBkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9M
b3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdOworCisgICAgICAgIGlmICgg
alF1ZXJ5LmlzRnVuY3Rpb24oIGZ1bmMgKSApIHsKKworICAgICAgICAgICAgLy8gRm9yIGVhY2gg
ZGF0YVR5cGUgaW4gdGhlIGRhdGFUeXBlRXhwcmVzc2lvbgorICAgICAgICAgICAgd2hpbGUgKCAo
IGRhdGFUeXBlID0gZGF0YVR5cGVzWyBpKysgXSApICkgeworCisgICAgICAgICAgICAgICAgLy8g
UHJlcGVuZCBpZiByZXF1ZXN0ZWQKKyAgICAgICAgICAgICAgICBpZiAoIGRhdGFUeXBlWyAwIF0g
PT09ICIrIiApIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGUgPSBkYXRhVHlwZS5zbGlj
ZSggMSApIHx8ICIqIjsKKyAgICAgICAgICAgICAgICAgICAgKCBzdHJ1Y3R1cmVbIGRhdGFUeXBl
IF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS51bnNoaWZ0KCBmdW5jICk7CisKKyAg
ICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgYXBwZW5kCisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1
cmVbIGRhdGFUeXBlIF0gfHwgW10gKS5wdXNoKCBmdW5jICk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKK30KKworLy8gQmFzZSBpbnNwZWN0aW9u
IGZ1bmN0aW9uIGZvciBwcmVmaWx0ZXJzIGFuZCB0cmFuc3BvcnRzCitmdW5jdGlvbiBpbnNwZWN0
UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlv
bnMsIGpxWEhSICkgeworCisgICAgdmFyIGluc3BlY3RlZCA9IHt9LAorICAgICAgICBzZWVraW5n
VHJhbnNwb3J0ID0gKCBzdHJ1Y3R1cmUgPT09IHRyYW5zcG9ydHMgKTsKKworICAgIGZ1bmN0aW9u
IGluc3BlY3QoIGRhdGFUeXBlICkgeworICAgICAgICB2YXIgc2VsZWN0ZWQ7CisgICAgICAgIGlu
c3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7CisgICAgICAgIGpRdWVyeS5lYWNoKCBzdHJ1Y3R1
cmVbIGRhdGFUeXBlIF0gfHwgW10sIGZ1bmN0aW9uKCBfLCBwcmVmaWx0ZXJPckZhY3RvcnkgKSB7
CisgICAgICAgICAgICB2YXIgZGF0YVR5cGVPclRyYW5zcG9ydCA9IHByZWZpbHRlck9yRmFjdG9y
eSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApOworICAgICAgICAgICAgaWYgKCB0
eXBlb2YgZGF0YVR5cGVPclRyYW5zcG9ydCA9PT0gInN0cmluZyIgJiYKKyAgICAgICAgICAgICAg
ICAhc2Vla2luZ1RyYW5zcG9ydCAmJiAhaW5zcGVjdGVkWyBkYXRhVHlwZU9yVHJhbnNwb3J0IF0g
KSB7CisKKyAgICAgICAgICAgICAgICBvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KCBkYXRhVHlw
ZU9yVHJhbnNwb3J0ICk7CisgICAgICAgICAgICAgICAgaW5zcGVjdCggZGF0YVR5cGVPclRyYW5z
cG9ydCApOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIHNlZWtpbmdUcmFuc3BvcnQgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoIHNl
bGVjdGVkID0gZGF0YVR5cGVPclRyYW5zcG9ydCApOworICAgICAgICAgICAgfQorICAgICAgICB9
ICk7CisgICAgICAgIHJldHVybiBzZWxlY3RlZDsKKyAgICB9CisKKyAgICByZXR1cm4gaW5zcGVj
dCggb3B0aW9ucy5kYXRhVHlwZXNbIDAgXSApIHx8ICFpbnNwZWN0ZWRbICIqIiBdICYmIGluc3Bl
Y3QoICIqIiApOworfQorCisvLyBBIHNwZWNpYWwgZXh0ZW5kIGZvciBhamF4IG9wdGlvbnMKKy8v
IHRoYXQgdGFrZXMgImZsYXQiIG9wdGlvbnMgKG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKQorLy8g
Rml4ZXMgIzk4ODcKK2Z1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdldCwgc3JjICkgeworICAgIHZh
ciBrZXksIGRlZXAsCisgICAgICAgIGZsYXRPcHRpb25zID0galF1ZXJ5LmFqYXhTZXR0aW5ncy5m
bGF0T3B0aW9ucyB8fCB7fTsKKworICAgIGZvciAoIGtleSBpbiBzcmMgKSB7CisgICAgICAgIGlm
ICggc3JjWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgKCBmbGF0T3B0aW9u
c1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwgKCBkZWVwID0ge30gKSApIClbIGtleSBdID0g
c3JjWyBrZXkgXTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIGRlZXAgKSB7CisgICAgICAg
IGpRdWVyeS5leHRlbmQoIHRydWUsIHRhcmdldCwgZGVlcCApOworICAgIH0KKworICAgIHJldHVy
biB0YXJnZXQ7Cit9CisKKy8qIEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFqYXggcmVxdWVzdDoK
KyAqIC0gZmluZHMgdGhlIHJpZ2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQt
dHlwZSBhbmQgZXhwZWN0ZWQgZGF0YVR5cGUpCisgKiAtIHJldHVybnMgdGhlIGNvcnJlc3BvbmRp
bmcgcmVzcG9uc2UKKyAqLworZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIs
IHJlc3BvbnNlcyApIHsKKworICAgIHZhciBjdCwgdHlwZSwgZmluYWxEYXRhVHlwZSwgZmlyc3RE
YXRhVHlwZSwKKyAgICAgICAgY29udGVudHMgPSBzLmNvbnRlbnRzLAorICAgICAgICBkYXRhVHlw
ZXMgPSBzLmRhdGFUeXBlczsKKworICAgIC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQg
Y29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzCisgICAgd2hpbGUgKCBkYXRhVHlwZXNbIDAgXSA9
PT0gIioiICkgeworICAgICAgICBkYXRhVHlwZXMuc2hpZnQoKTsKKyAgICAgICAgaWYgKCBjdCA9
PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgY3QgPSBzLm1pbWVUeXBlIHx8IGpxWEhSLmdl
dFJlc3BvbnNlSGVhZGVyKCAiQ29udGVudC1UeXBlIiApOworICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEga25vd24gY29udGVudC10eXBlCisg
ICAgaWYgKCBjdCApIHsKKyAgICAgICAgZm9yICggdHlwZSBpbiBjb250ZW50cyApIHsKKyAgICAg
ICAgICAgIGlmICggY29udGVudHNbIHR5cGUgXSAmJiBjb250ZW50c1sgdHlwZSBdLnRlc3QoIGN0
ICkgKSB7CisgICAgICAgICAgICAgICAgZGF0YVR5cGVzLnVuc2hpZnQoIHR5cGUgKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgcmVzcG9uc2UgZm9yIHRoZSBleHBlY3RlZCBk
YXRhVHlwZQorICAgIGlmICggZGF0YVR5cGVzWyAwIF0gaW4gcmVzcG9uc2VzICkgeworICAgICAg
ICBmaW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAwIF07CisgICAgfSBlbHNlIHsKKworICAgICAg
ICAvLyBUcnkgY29udmVydGlibGUgZGF0YVR5cGVzCisgICAgICAgIGZvciAoIHR5cGUgaW4gcmVz
cG9uc2VzICkgeworICAgICAgICAgICAgaWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0
ZXJzWyB0eXBlICsgIiAiICsgZGF0YVR5cGVzWyAwIF0gXSApIHsKKyAgICAgICAgICAgICAgICBm
aW5hbERhdGFUeXBlID0gdHlwZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICggIWZpcnN0RGF0YVR5cGUgKSB7CisgICAgICAgICAgICAgICAg
Zmlyc3REYXRhVHlwZSA9IHR5cGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICAvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmUKKyAgICAgICAgZmluYWxEYXRhVHlwZSA9IGZpbmFs
RGF0YVR5cGUgfHwgZmlyc3REYXRhVHlwZTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBmb3VuZCBh
IGRhdGFUeXBlCisgICAgLy8gV2UgYWRkIHRoZSBkYXRhVHlwZSB0byB0aGUgbGlzdCBpZiBuZWVk
ZWQKKyAgICAvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlCisgICAgaWYg
KCBmaW5hbERhdGFUeXBlICkgeworICAgICAgICBpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFU
eXBlc1sgMCBdICkgeworICAgICAgICAgICAgZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5
cGUgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzcG9uc2VzWyBmaW5hbERhdGFUeXBl
IF07CisgICAgfQorfQorCisvKiBDaGFpbiBjb252ZXJzaW9ucyBnaXZlbiB0aGUgcmVxdWVzdCBh
bmQgdGhlIG9yaWdpbmFsIHJlc3BvbnNlCisgKiBBbHNvIHNldHMgdGhlIHJlc3BvbnNlWFhYIGZp
ZWxkcyBvbiB0aGUganFYSFIgaW5zdGFuY2UKKyAqLworZnVuY3Rpb24gYWpheENvbnZlcnQoIHMs
IHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICkgeworICAgIHZhciBjb252MiwgY3VycmVudCwg
Y29udiwgdG1wLCBwcmV2LAorICAgICAgICBjb252ZXJ0ZXJzID0ge30sCisKKyAgICAgICAgLy8g
V29yayB3aXRoIGEgY29weSBvZiBkYXRhVHlwZXMgaW4gY2FzZSB3ZSBuZWVkIHRvIG1vZGlmeSBp
dCBmb3IgY29udmVyc2lvbgorICAgICAgICBkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcy5zbGljZSgp
OworCisgICAgLy8gQ3JlYXRlIGNvbnZlcnRlcnMgbWFwIHdpdGggbG93ZXJjYXNlZCBrZXlzCisg
ICAgaWYgKCBkYXRhVHlwZXNbIDEgXSApIHsKKyAgICAgICAgZm9yICggY29udiBpbiBzLmNvbnZl
cnRlcnMgKSB7CisgICAgICAgICAgICBjb252ZXJ0ZXJzWyBjb252LnRvTG93ZXJDYXNlKCkgXSA9
IHMuY29udmVydGVyc1sgY29udiBdOworICAgICAgICB9CisgICAgfQorCisgICAgY3VycmVudCA9
IGRhdGFUeXBlcy5zaGlmdCgpOworCisgICAgLy8gQ29udmVydCB0byBlYWNoIHNlcXVlbnRpYWwg
ZGF0YVR5cGUKKyAgICB3aGlsZSAoIGN1cnJlbnQgKSB7CisKKyAgICAgICAgaWYgKCBzLnJlc3Bv
bnNlRmllbGRzWyBjdXJyZW50IF0gKSB7CisgICAgICAgICAgICBqcVhIUlsgcy5yZXNwb25zZUZp
ZWxkc1sgY3VycmVudCBdIF0gPSByZXNwb25zZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFw
cGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkCisgICAgICAgIGlmICggIXByZXYgJiYgaXNT
dWNjZXNzICYmIHMuZGF0YUZpbHRlciApIHsKKyAgICAgICAgICAgIHJlc3BvbnNlID0gcy5kYXRh
RmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSApOworICAgICAgICB9CisKKyAgICAgICAgcHJl
diA9IGN1cnJlbnQ7CisgICAgICAgIGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTsKKworICAg
ICAgICBpZiAoIGN1cnJlbnQgKSB7CisKKyAgICAgICAgICAgIC8vIFRoZXJlJ3Mgb25seSB3b3Jr
IHRvIGRvIGlmIGN1cnJlbnQgZGF0YVR5cGUgaXMgbm9uLWF1dG8KKyAgICAgICAgICAgIGlmICgg
Y3VycmVudCA9PT0gIioiICkgeworCisgICAgICAgICAgICAgICAgY3VycmVudCA9IHByZXY7CisK
KyAgICAgICAgICAgIC8vIENvbnZlcnQgcmVzcG9uc2UgaWYgcHJldiBkYXRhVHlwZSBpcyBub24t
YXV0byBhbmQgZGlmZmVycyBmcm9tIGN1cnJlbnQKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIHBy
ZXYgIT09ICIqIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkgeworCisgICAgICAgICAgICAgICAgLy8g
U2VlayBhIGRpcmVjdCBjb252ZXJ0ZXIKKyAgICAgICAgICAgICAgICBjb252ID0gY29udmVydGVy
c1sgcHJldiArICIgIiArIGN1cnJlbnQgXSB8fCBjb252ZXJ0ZXJzWyAiKiAiICsgY3VycmVudCBd
OworCisgICAgICAgICAgICAgICAgLy8gSWYgbm9uZSBmb3VuZCwgc2VlayBhIHBhaXIKKyAgICAg
ICAgICAgICAgICBpZiAoICFjb252ICkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKCBjb252
MiBpbiBjb252ZXJ0ZXJzICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBjb252
MiBvdXRwdXRzIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IGNvbnYyLnNw
bGl0KCAiICIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdG1wWyAxIF0gPT09IGN1
cnJlbnQgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBwcmV2IGNhbiBi
ZSBjb252ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb252ID0gY29udmVydGVyc1sgcHJldiArICIgIiArIHRtcFsgMCBdIF0gfHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydGVyc1sgIiogIiArIHRtcFsgMCBdIF07Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb252ICkgeworCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnMKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb252ID09PSB0cnVlICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udiA9IGNvbnZlcnRlcnNbIGNvbnYy
IF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBpbnNl
cnQgdGhlIGludGVybWVkaWF0ZSBkYXRhVHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9PSB0cnVlICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IHRtcFsgMCBdOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGVzLnVuc2hpZnQoIHRtcFsgMSBd
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQXBwbHkgY29udmVydGVyIChpZiBub3QgYW4g
ZXF1aXZhbGVuY2UpCisgICAgICAgICAgICAgICAgaWYgKCBjb252ICE9PSB0cnVlICkgeworCisg
ICAgICAgICAgICAgICAgICAgIC8vIFVubGVzcyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnViYmxl
LCBjYXRjaCBhbmQgcmV0dXJuIHRoZW0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjb252ICYm
IHMudGhyb3dzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBjb252KCBy
ZXNwb25zZSApOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IGNv
bnYoIHJlc3BvbnNlICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoICggZSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0ZTogInBhcnNlcmVycm9yIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXJyb3I6IGNvbnYgPyBlIDogIk5vIGNvbnZlcnNpb24gZnJvbSAiICsgcHJl
diArICIgdG8gIiArIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsg
c3RhdGU6ICJzdWNjZXNzIiwgZGF0YTogcmVzcG9uc2UgfTsKK30KKworalF1ZXJ5LmV4dGVuZCgg
eworCisgICAgLy8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVy
aWVzCisgICAgYWN0aXZlOiAwLAorCisgICAgLy8gTGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUg
Zm9yIG5leHQgcmVxdWVzdAorICAgIGxhc3RNb2RpZmllZDoge30sCisgICAgZXRhZzoge30sCisK
KyAgICBhamF4U2V0dGluZ3M6IHsKKyAgICAgICAgdXJsOiBsb2NhdGlvbi5ocmVmLAorICAgICAg
ICB0eXBlOiAiR0VUIiwKKyAgICAgICAgaXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggbG9j
YXRpb24ucHJvdG9jb2wgKSwKKyAgICAgICAgZ2xvYmFsOiB0cnVlLAorICAgICAgICBwcm9jZXNz
RGF0YTogdHJ1ZSwKKyAgICAgICAgYXN5bmM6IHRydWUsCisgICAgICAgIGNvbnRlbnRUeXBlOiAi
YXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IiwKKworICAg
ICAgICAvKgorICAgICAgICB0aW1lb3V0OiAwLAorICAgICAgICBkYXRhOiBudWxsLAorICAgICAg
ICBkYXRhVHlwZTogbnVsbCwKKyAgICAgICAgdXNlcm5hbWU6IG51bGwsCisgICAgICAgIHBhc3N3
b3JkOiBudWxsLAorICAgICAgICBjYWNoZTogbnVsbCwKKyAgICAgICAgdGhyb3dzOiBmYWxzZSwK
KyAgICAgICAgdHJhZGl0aW9uYWw6IGZhbHNlLAorICAgICAgICBoZWFkZXJzOiB7fSwKKyAgICAg
ICAgKi8KKworICAgICAgICBhY2NlcHRzOiB7CisgICAgICAgICAgICAiKiI6IGFsbFR5cGVzLAor
ICAgICAgICAgICAgdGV4dDogInRleHQvcGxhaW4iLAorICAgICAgICAgICAgaHRtbDogInRleHQv
aHRtbCIsCisgICAgICAgICAgICB4bWw6ICJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIiwKKyAg
ICAgICAgICAgIGpzb246ICJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQiCisgICAg
ICAgIH0sCisKKyAgICAgICAgY29udGVudHM6IHsKKyAgICAgICAgICAgIHhtbDogL1xieG1sXGIv
LAorICAgICAgICAgICAgaHRtbDogL1xiaHRtbC8sCisgICAgICAgICAgICBqc29uOiAvXGJqc29u
XGIvCisgICAgICAgIH0sCisKKyAgICAgICAgcmVzcG9uc2VGaWVsZHM6IHsKKyAgICAgICAgICAg
IHhtbDogInJlc3BvbnNlWE1MIiwKKyAgICAgICAgICAgIHRleHQ6ICJyZXNwb25zZVRleHQiLAor
ICAgICAgICAgICAganNvbjogInJlc3BvbnNlSlNPTiIKKyAgICAgICAgfSwKKworICAgICAgICAv
LyBEYXRhIGNvbnZlcnRlcnMKKyAgICAgICAgLy8gS2V5cyBzZXBhcmF0ZSBzb3VyY2UgKG9yIGNh
dGNoYWxsICIqIikgYW5kIGRlc3RpbmF0aW9uIHR5cGVzIHdpdGggYSBzaW5nbGUgc3BhY2UKKyAg
ICAgICAgY29udmVydGVyczogeworCisgICAgICAgICAgICAvLyBDb252ZXJ0IGFueXRoaW5nIHRv
IHRleHQKKyAgICAgICAgICAgICIqIHRleHQiOiBTdHJpbmcsCisKKyAgICAgICAgICAgIC8vIFRl
eHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKQorICAgICAgICAgICAgInRleHQg
aHRtbCI6IHRydWUsCisKKyAgICAgICAgICAgIC8vIEV2YWx1YXRlIHRleHQgYXMgYSBqc29uIGV4
cHJlc3Npb24KKyAgICAgICAgICAgICJ0ZXh0IGpzb24iOiBKU09OLnBhcnNlLAorCisgICAgICAg
ICAgICAvLyBQYXJzZSB0ZXh0IGFzIHhtbAorICAgICAgICAgICAgInRleHQgeG1sIjogalF1ZXJ5
LnBhcnNlWE1MCisgICAgICAgIH0sCisKKyAgICAgICAgLy8gRm9yIG9wdGlvbnMgdGhhdCBzaG91
bGRuJ3QgYmUgZGVlcCBleHRlbmRlZDoKKyAgICAgICAgLy8geW91IGNhbiBhZGQgeW91ciBvd24g
Y3VzdG9tIG9wdGlvbnMgaGVyZSBpZgorICAgICAgICAvLyBhbmQgd2hlbiB5b3UgY3JlYXRlIG9u
ZSB0aGF0IHNob3VsZG4ndCBiZQorICAgICAgICAvLyBkZWVwIGV4dGVuZGVkIChzZWUgYWpheEV4
dGVuZCkKKyAgICAgICAgZmxhdE9wdGlvbnM6IHsKKyAgICAgICAgICAgIHVybDogdHJ1ZSwKKyAg
ICAgICAgICAgIGNvbnRleHQ6IHRydWUKKyAgICAgICAgfQorICAgIH0sCisKKyAgICAvLyBDcmVh
dGVzIGEgZnVsbCBmbGVkZ2VkIHNldHRpbmdzIG9iamVjdCBpbnRvIHRhcmdldAorICAgIC8vIHdp
dGggYm90aCBhamF4U2V0dGluZ3MgYW5kIHNldHRpbmdzIGZpZWxkcy4KKyAgICAvLyBJZiB0YXJn
ZXQgaXMgb21pdHRlZCwgd3JpdGVzIGludG8gYWpheFNldHRpbmdzLgorICAgIGFqYXhTZXR1cDog
ZnVuY3Rpb24oIHRhcmdldCwgc2V0dGluZ3MgKSB7CisgICAgICAgIHJldHVybiBzZXR0aW5ncyA/
CisKKyAgICAgICAgICAgIC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0CisgICAgICAgICAg
ICBhamF4RXh0ZW5kKCBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKSwg
c2V0dGluZ3MgKSA6CisKKyAgICAgICAgICAgIC8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3MKKyAg
ICAgICAgICAgIGFqYXhFeHRlbmQoIGpRdWVyeS5hamF4U2V0dGluZ3MsIHRhcmdldCApOworICAg
IH0sCisKKyAgICBhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHBy
ZWZpbHRlcnMgKSwKKyAgICBhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9y
dHMoIHRyYW5zcG9ydHMgKSwKKworICAgIC8vIE1haW4gbWV0aG9kCisgICAgYWpheDogZnVuY3Rp
b24oIHVybCwgb3B0aW9ucyApIHsKKworICAgICAgICAvLyBJZiB1cmwgaXMgYW4gb2JqZWN0LCBz
aW11bGF0ZSBwcmUtMS41IHNpZ25hdHVyZQorICAgICAgICBpZiAoIHR5cGVvZiB1cmwgPT09ICJv
YmplY3QiICkgeworICAgICAgICAgICAgb3B0aW9ucyA9IHVybDsKKyAgICAgICAgICAgIHVybCA9
IHVuZGVmaW5lZDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUg
YW4gb2JqZWN0CisgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OworCisgICAgICAgIHZh
ciB0cmFuc3BvcnQsCisKKyAgICAgICAgICAgIC8vIFVSTCB3aXRob3V0IGFudGktY2FjaGUgcGFy
YW0KKyAgICAgICAgICAgIGNhY2hlVVJMLAorCisgICAgICAgICAgICAvLyBSZXNwb25zZSBoZWFk
ZXJzCisgICAgICAgICAgICByZXNwb25zZUhlYWRlcnNTdHJpbmcsCisgICAgICAgICAgICByZXNw
b25zZUhlYWRlcnMsCisKKyAgICAgICAgICAgIC8vIHRpbWVvdXQgaGFuZGxlCisgICAgICAgICAg
ICB0aW1lb3V0VGltZXIsCisKKyAgICAgICAgICAgIC8vIFVybCBjbGVhbnVwIHZhcgorICAgICAg
ICAgICAgdXJsQW5jaG9yLAorCisgICAgICAgICAgICAvLyBSZXF1ZXN0IHN0YXRlIChiZWNvbWVz
IGZhbHNlIHVwb24gc2VuZCBhbmQgdHJ1ZSB1cG9uIGNvbXBsZXRpb24pCisgICAgICAgICAgICBj
b21wbGV0ZWQsCisKKyAgICAgICAgICAgIC8vIFRvIGtub3cgaWYgZ2xvYmFsIGV2ZW50cyBhcmUg
dG8gYmUgZGlzcGF0Y2hlZAorICAgICAgICAgICAgZmlyZUdsb2JhbHMsCisKKyAgICAgICAgICAg
IC8vIExvb3AgdmFyaWFibGUKKyAgICAgICAgICAgIGksCisKKyAgICAgICAgICAgIC8vIHVuY2Fj
aGVkIHBhcnQgb2YgdGhlIHVybAorICAgICAgICAgICAgdW5jYWNoZWQsCisKKyAgICAgICAgICAg
IC8vIENyZWF0ZSB0aGUgZmluYWwgb3B0aW9ucyBvYmplY3QKKyAgICAgICAgICAgIHMgPSBqUXVl
cnkuYWpheFNldHVwKCB7fSwgb3B0aW9ucyApLAorCisgICAgICAgICAgICAvLyBDYWxsYmFja3Mg
Y29udGV4dAorICAgICAgICAgICAgY2FsbGJhY2tDb250ZXh0ID0gcy5jb250ZXh0IHx8IHMsCisK
KyAgICAgICAgICAgIC8vIENvbnRleHQgZm9yIGdsb2JhbCBldmVudHMgaXMgY2FsbGJhY2tDb250
ZXh0IGlmIGl0IGlzIGEgRE9NIG5vZGUgb3IgalF1ZXJ5IGNvbGxlY3Rpb24KKyAgICAgICAgICAg
IGdsb2JhbEV2ZW50Q29udGV4dCA9IHMuY29udGV4dCAmJgorICAgICAgICAgICAgICAgICggY2Fs
bGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dC5qcXVlcnkgKSA/CisgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeSggY2FsbGJhY2tDb250ZXh0ICkgOgorICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkuZXZlbnQsCisKKyAgICAgICAgICAgIC8vIERlZmVycmVkcworICAgICAg
ICAgICAgZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSwKKyAgICAgICAgICAgIGNvbXBsZXRl
RGVmZXJyZWQgPSBqUXVlcnkuQ2FsbGJhY2tzKCAib25jZSBtZW1vcnkiICksCisKKyAgICAgICAg
ICAgIC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzCisgICAgICAgICAgICBzdGF0dXNDb2Rl
ID0gcy5zdGF0dXNDb2RlIHx8IHt9LAorCisgICAgICAgICAgICAvLyBIZWFkZXJzICh0aGV5IGFy
ZSBzZW50IGFsbCBhdCBvbmNlKQorICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnMgPSB7fSwKKyAg
ICAgICAgICAgIHJlcXVlc3RIZWFkZXJzTmFtZXMgPSB7fSwKKworICAgICAgICAgICAgLy8gRGVm
YXVsdCBhYm9ydCBtZXNzYWdlCisgICAgICAgICAgICBzdHJBYm9ydCA9ICJjYW5jZWxlZCIsCisK
KyAgICAgICAgICAgIC8vIEZha2UgeGhyCisgICAgICAgICAgICBqcVhIUiA9IHsKKyAgICAgICAg
ICAgICAgICByZWFkeVN0YXRlOiAwLAorCisgICAgICAgICAgICAgICAgLy8gQnVpbGRzIGhlYWRl
cnMgaGFzaHRhYmxlIGlmIG5lZWRlZAorICAgICAgICAgICAgICAgIGdldFJlc3BvbnNlSGVhZGVy
OiBmdW5jdGlvbigga2V5ICkgeworICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2g7CisgICAg
ICAgICAgICAgICAgICAgIGlmICggY29tcGxldGVkICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCAhcmVzcG9uc2VIZWFkZXJzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3BvbnNlSGVhZGVycyA9IHt9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxl
ICggKCBtYXRjaCA9IHJoZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVhZGVyc1N0cmluZyApICkgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hb
IDEgXS50b0xvd2VyQ2FzZSgpIF0gPSBtYXRjaFsgMiBdOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dlckNhc2UoKSBdOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaCA9PSBudWxs
ID8gbnVsbCA6IG1hdGNoOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAv
LyBSYXcgc3RyaW5nCisgICAgICAgICAgICAgICAgZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRlZCA/IHJlc3BvbnNl
SGVhZGVyc1N0cmluZyA6IG51bGw7CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAg
ICAgIC8vIENhY2hlcyB0aGUgaGVhZGVyCisgICAgICAgICAgICAgICAgc2V0UmVxdWVzdEhlYWRl
cjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGNv
bXBsZXRlZCA9PSBudWxsICkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHJlcXVl
c3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdID0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSB8fCBu
YW1lOworICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnNbIG5hbWUgXSA9IHZh
bHVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAvLyBPdmVycmlkZXMg
cmVzcG9uc2UgY29udGVudC10eXBlIGhlYWRlcgorICAgICAgICAgICAgICAgIG92ZXJyaWRlTWlt
ZVR5cGU6IGZ1bmN0aW9uKCB0eXBlICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbXBs
ZXRlZCA9PSBudWxsICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcy5taW1lVHlwZSA9IHR5
cGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIC8vIFN0YXR1cy1kZXBl
bmRlbnQgY2FsbGJhY2tzCisgICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogZnVuY3Rpb24oIG1h
cCApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGU7CisgICAgICAgICAgICAgICAgICAg
IGlmICggbWFwICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb21wbGV0ZWQgKSB7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFeGVjdXRlIHRoZSBhcHByb3ByaWF0
ZSBjYWxsYmFja3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcVhIUi5hbHdheXMoIG1h
cFsganFYSFIuc3RhdHVzIF0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMYXp5LWFkZCB0aGUgbmV3IGNhbGxiYWNr
cyBpbiBhIHdheSB0aGF0IHByZXNlcnZlcyBvbGQgb25lcworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoIGNvZGUgaW4gbWFwICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0dXNDb2RlWyBjb2RlIF0gPSBbIHN0YXR1c0NvZGVbIGNvZGUgXSwgbWFwWyBjb2Rl
IF0gXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIC8vIENhbmNlbCB0
aGUgcmVxdWVzdAorICAgICAgICAgICAgICAgIGFib3J0OiBmdW5jdGlvbiggc3RhdHVzVGV4dCAp
IHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGZpbmFsVGV4dCA9IHN0YXR1c1RleHQgfHwgc3Ry
QWJvcnQ7CisgICAgICAgICAgICAgICAgICAgIGlmICggdHJhbnNwb3J0ICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdHJhbnNwb3J0LmFib3J0KCBmaW5hbFRleHQgKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkb25lKCAwLCBmaW5hbFRleHQgKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfTsKKworICAgICAgICAvLyBBdHRhY2ggZGVmZXJyZWRzCisgICAgICAgIGRlZmVycmVk
LnByb21pc2UoIGpxWEhSICk7CisKKyAgICAgICAgLy8gQWRkIHByb3RvY29sIGlmIG5vdCBwcm92
aWRlZCAocHJlZmlsdGVycyBtaWdodCBleHBlY3QgaXQpCisgICAgICAgIC8vIEhhbmRsZSBmYWxz
eSB1cmwgaW4gdGhlIHNldHRpbmdzIG9iamVjdCAoIzEwMDkzOiBjb25zaXN0ZW5jeSB3aXRoIG9s
ZCBzaWduYXR1cmUpCisgICAgICAgIC8vIFdlIGFsc28gdXNlIHRoZSB1cmwgcGFyYW1ldGVyIGlm
IGF2YWlsYWJsZQorICAgICAgICBzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgfHwgbG9jYXRpb24u
aHJlZiApICsgIiIgKQorICAgICAgICAgICAgLnJlcGxhY2UoIHJwcm90b2NvbCwgbG9jYXRpb24u
cHJvdG9jb2wgKyAiLy8iICk7CisKKyAgICAgICAgLy8gQWxpYXMgbWV0aG9kIG9wdGlvbiB0byB0
eXBlIGFzIHBlciB0aWNrZXQgIzEyMDA0CisgICAgICAgIHMudHlwZSA9IG9wdGlvbnMubWV0aG9k
IHx8IG9wdGlvbnMudHlwZSB8fCBzLm1ldGhvZCB8fCBzLnR5cGU7CisKKyAgICAgICAgLy8gRXh0
cmFjdCBkYXRhVHlwZXMgbGlzdAorICAgICAgICBzLmRhdGFUeXBlcyA9ICggcy5kYXRhVHlwZSB8
fCAiKiIgKS50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyAiIiBdOwor
CisgICAgICAgIC8vIEEgY3Jvc3MtZG9tYWluIHJlcXVlc3QgaXMgaW4gb3JkZXIgd2hlbiB0aGUg
b3JpZ2luIGRvZXNuJ3QgbWF0Y2ggdGhlIGN1cnJlbnQgb3JpZ2luLgorICAgICAgICBpZiAoIHMu
Y3Jvc3NEb21haW4gPT0gbnVsbCApIHsKKyAgICAgICAgICAgIHVybEFuY2hvciA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoICJhIiApOworCisgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRSA8PTgg
LSAxMSwgRWRnZSAxMiAtIDEzCisgICAgICAgICAgICAvLyBJRSB0aHJvd3MgZXhjZXB0aW9uIG9u
IGFjY2Vzc2luZyB0aGUgaHJlZiBwcm9wZXJ0eSBpZiB1cmwgaXMgbWFsZm9ybWVkLAorICAgICAg
ICAgICAgLy8gZS5nLiBodHRwOi8vZXhhbXBsZS5jb206ODB4LworICAgICAgICAgICAgdHJ5IHsK
KyAgICAgICAgICAgICAgICB1cmxBbmNob3IuaHJlZiA9IHMudXJsOworCisgICAgICAgICAgICAg
ICAgLy8gU3VwcG9ydDogSUUgPD04IC0gMTEgb25seQorICAgICAgICAgICAgICAgIC8vIEFuY2hv
cidzIGhvc3QgcHJvcGVydHkgaXNuJ3QgY29ycmVjdGx5IHNldCB3aGVuIHMudXJsIGlzIHJlbGF0
aXZlCisgICAgICAgICAgICAgICAgdXJsQW5jaG9yLmhyZWYgPSB1cmxBbmNob3IuaHJlZjsKKyAg
ICAgICAgICAgICAgICBzLmNyb3NzRG9tYWluID0gb3JpZ2luQW5jaG9yLnByb3RvY29sICsgIi8v
IiArIG9yaWdpbkFuY2hvci5ob3N0ICE9PQorICAgICAgICAgICAgICAgICAgICB1cmxBbmNob3Iu
cHJvdG9jb2wgKyAiLy8iICsgdXJsQW5jaG9yLmhvc3Q7CisgICAgICAgICAgICB9IGNhdGNoICgg
ZSApIHsKKworICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFuIGVycm9yIHBhcnNpbmcg
dGhlIFVSTCwgYXNzdW1lIGl0IGlzIGNyb3NzRG9tYWluLAorICAgICAgICAgICAgICAgIC8vIGl0
IGNhbiBiZSByZWplY3RlZCBieSB0aGUgdHJhbnNwb3J0IGlmIGl0IGlzIGludmFsaWQKKyAgICAg
ICAgICAgICAgICBzLmNyb3NzRG9tYWluID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIC8vIENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZworICAg
ICAgICBpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09ICJz
dHJpbmciICkgeworICAgICAgICAgICAgcy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMu
dHJhZGl0aW9uYWwgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFwcGx5IHByZWZpbHRlcnMK
KyAgICAgICAgaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9w
dGlvbnMsIGpxWEhSICk7CisKKyAgICAgICAgLy8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNp
ZGUgYSBwcmVmaWx0ZXIsIHN0b3AgdGhlcmUKKyAgICAgICAgaWYgKCBjb21wbGV0ZWQgKSB7Cisg
ICAgICAgICAgICByZXR1cm4ganFYSFI7CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBjYW4g
ZmlyZSBnbG9iYWwgZXZlbnRzIGFzIG9mIG5vdyBpZiBhc2tlZCB0bworICAgICAgICAvLyBEb24n
dCBmaXJlIGV2ZW50cyBpZiBqUXVlcnkuZXZlbnQgaXMgdW5kZWZpbmVkIGluIGFuIEFNRC11c2Fn
ZSBzY2VuYXJpbyAoIzE1MTE4KQorICAgICAgICBmaXJlR2xvYmFscyA9IGpRdWVyeS5ldmVudCAm
JiBzLmdsb2JhbDsKKworICAgICAgICAvLyBXYXRjaCBmb3IgYSBuZXcgc2V0IG9mIHJlcXVlc3Rz
CisgICAgICAgIGlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFjdGl2ZSsrID09PSAwICkgewor
ICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3RhcnQiICk7CisgICAgICAg
IH0KKworICAgICAgICAvLyBVcHBlcmNhc2UgdGhlIHR5cGUKKyAgICAgICAgcy50eXBlID0gcy50
eXBlLnRvVXBwZXJDYXNlKCk7CisKKyAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIHJlcXVlc3QgaGFz
IGNvbnRlbnQKKyAgICAgICAgcy5oYXNDb250ZW50ID0gIXJub0NvbnRlbnQudGVzdCggcy50eXBl
ICk7CisKKyAgICAgICAgLy8gU2F2ZSB0aGUgVVJMIGluIGNhc2Ugd2UncmUgdG95aW5nIHdpdGgg
dGhlIElmLU1vZGlmaWVkLVNpbmNlCisgICAgICAgIC8vIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhl
YWRlciBsYXRlciBvbgorICAgICAgICAvLyBSZW1vdmUgaGFzaCB0byBzaW1wbGlmeSB1cmwgbWFu
aXB1bGF0aW9uCisgICAgICAgIGNhY2hlVVJMID0gcy51cmwucmVwbGFjZSggcmhhc2gsICIiICk7
CisKKyAgICAgICAgLy8gTW9yZSBvcHRpb25zIGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRoIG5v
IGNvbnRlbnQKKyAgICAgICAgaWYgKCAhcy5oYXNDb250ZW50ICkgeworCisgICAgICAgICAgICAv
LyBSZW1lbWJlciB0aGUgaGFzaCBzbyB3ZSBjYW4gcHV0IGl0IGJhY2sKKyAgICAgICAgICAgIHVu
Y2FjaGVkID0gcy51cmwuc2xpY2UoIGNhY2hlVVJMLmxlbmd0aCApOworCisgICAgICAgICAgICAv
LyBJZiBkYXRhIGlzIGF2YWlsYWJsZSwgYXBwZW5kIGRhdGEgdG8gdXJsCisgICAgICAgICAgICBp
ZiAoIHMuZGF0YSApIHsKKyAgICAgICAgICAgICAgICBjYWNoZVVSTCArPSAoIHJxdWVyeS50ZXN0
KCBjYWNoZVVSTCApID8gIiYiIDogIj8iICkgKyBzLmRhdGE7CisKKyAgICAgICAgICAgICAgICAv
LyAjOTY4MjogcmVtb3ZlIGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1c2VkIGluIGFuIGV2ZW50dWFs
IHJldHJ5CisgICAgICAgICAgICAgICAgZGVsZXRlIHMuZGF0YTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gQWRkIG9yIHVwZGF0ZSBhbnRpLWNhY2hlIHBhcmFtIGlmIG5lZWRlZAor
ICAgICAgICAgICAgaWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHsKKyAgICAgICAgICAgICAgICBj
YWNoZVVSTCA9IGNhY2hlVVJMLnJlcGxhY2UoIHJhbnRpQ2FjaGUsICIkMSIgKTsKKyAgICAgICAg
ICAgICAgICB1bmNhY2hlZCA9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyAiJiIgOiAiPyIg
KSArICJfPSIgKyAoIG5vbmNlKysgKSArIHVuY2FjaGVkOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBQdXQgaGFzaCBhbmQgYW50aS1jYWNoZSBvbiB0aGUgVVJMIHRoYXQgd2lsbCBi
ZSByZXF1ZXN0ZWQgKGdoLTE3MzIpCisgICAgICAgICAgICBzLnVybCA9IGNhY2hlVVJMICsgdW5j
YWNoZWQ7CisKKyAgICAgICAgLy8gQ2hhbmdlICclMjAnIHRvICcrJyBpZiB0aGlzIGlzIGVuY29k
ZWQgZm9ybSBib2R5IGNvbnRlbnQgKGdoLTI2NTgpCisgICAgICAgIH0gZWxzZSBpZiAoIHMuZGF0
YSAmJiBzLnByb2Nlc3NEYXRhICYmCisgICAgICAgICAgICAoIHMuY29udGVudFR5cGUgfHwgIiIg
KS5pbmRleE9mKCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiApID09PSAwICkg
eworICAgICAgICAgICAgcy5kYXRhID0gcy5kYXRhLnJlcGxhY2UoIHIyMCwgIisiICk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1O
b25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLgorICAgICAgICBpZiAoIHMu
aWZNb2RpZmllZCApIHsKKyAgICAgICAgICAgIGlmICggalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2Fj
aGVVUkwgXSApIHsKKyAgICAgICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYt
TW9kaWZpZWQtU2luY2UiLCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICkgewor
ICAgICAgICAgICAgICAgIGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoICJJZi1Ob25lLU1hdGNoIiwg
alF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIC8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudAor
ICAgICAgICBpZiAoIHMuZGF0YSAmJiBzLmhhc0NvbnRlbnQgJiYgcy5jb250ZW50VHlwZSAhPT0g
ZmFsc2UgfHwgb3B0aW9ucy5jb250ZW50VHlwZSApIHsKKyAgICAgICAgICAgIGpxWEhSLnNldFJl
cXVlc3RIZWFkZXIoICJDb250ZW50LVR5cGUiLCBzLmNvbnRlbnRUeXBlICk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBTZXQgdGhlIEFjY2VwdHMgaGVhZGVyIGZvciB0aGUgc2VydmVyLCBkZXBl
bmRpbmcgb24gdGhlIGRhdGFUeXBlCisgICAgICAgIGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoCisg
ICAgICAgICAgICAiQWNjZXB0IiwKKyAgICAgICAgICAgIHMuZGF0YVR5cGVzWyAwIF0gJiYgcy5h
Y2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gPworICAgICAgICAgICAgICAgIHMuYWNjZXB0c1sg
cy5kYXRhVHlwZXNbIDAgXSBdICsKKyAgICAgICAgICAgICAgICAgICAgKCBzLmRhdGFUeXBlc1sg
MCBdICE9PSAiKiIgPyAiLCAiICsgYWxsVHlwZXMgKyAiOyBxPTAuMDEiIDogIiIgKSA6CisgICAg
ICAgICAgICAgICAgcy5hY2NlcHRzWyAiKiIgXQorICAgICAgICApOworCisgICAgICAgIC8vIENo
ZWNrIGZvciBoZWFkZXJzIG9wdGlvbgorICAgICAgICBmb3IgKCBpIGluIHMuaGVhZGVycyApIHsK
KyAgICAgICAgICAgIGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIGksIHMuaGVhZGVyc1sgaSBdICk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMg
YW5kIGVhcmx5IGFib3J0CisgICAgICAgIGlmICggcy5iZWZvcmVTZW5kICYmCisgICAgICAgICAg
ICAoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09IGZh
bHNlIHx8IGNvbXBsZXRlZCApICkgeworCisgICAgICAgICAgICAvLyBBYm9ydCBpZiBub3QgZG9u
ZSBhbHJlYWR5IGFuZCByZXR1cm4KKyAgICAgICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gQWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0
aW9uCisgICAgICAgIHN0ckFib3J0ID0gImFib3J0IjsKKworICAgICAgICAvLyBJbnN0YWxsIGNh
bGxiYWNrcyBvbiBkZWZlcnJlZHMKKyAgICAgICAgY29tcGxldGVEZWZlcnJlZC5hZGQoIHMuY29t
cGxldGUgKTsKKyAgICAgICAganFYSFIuZG9uZSggcy5zdWNjZXNzICk7CisgICAgICAgIGpxWEhS
LmZhaWwoIHMuZXJyb3IgKTsKKworICAgICAgICAvLyBHZXQgdHJhbnNwb3J0CisgICAgICAgIHRy
YW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBzLCBv
cHRpb25zLCBqcVhIUiApOworCisgICAgICAgIC8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1h
Ym9ydAorICAgICAgICBpZiAoICF0cmFuc3BvcnQgKSB7CisgICAgICAgICAgICBkb25lKCAtMSwg
Ik5vIFRyYW5zcG9ydCIgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGpxWEhSLnJl
YWR5U3RhdGUgPSAxOworCisgICAgICAgICAgICAvLyBTZW5kIGdsb2JhbCBldmVudAorICAgICAg
ICAgICAgaWYgKCBmaXJlR2xvYmFscyApIHsKKyAgICAgICAgICAgICAgICBnbG9iYWxFdmVudENv
bnRleHQudHJpZ2dlciggImFqYXhTZW5kIiwgWyBqcVhIUiwgcyBdICk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGFqYXhTZW5k
LCBzdG9wIHRoZXJlCisgICAgICAgICAgICBpZiAoIGNvbXBsZXRlZCApIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4ganFYSFI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRpbWVv
dXQKKyAgICAgICAgICAgIGlmICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkgeworICAgICAg
ICAgICAgICAgIHRpbWVvdXRUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgICAgICAganFYSFIuYWJvcnQoICJ0aW1lb3V0IiApOworICAgICAgICAg
ICAgICAgIH0sIHMudGltZW91dCApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0cnkg
eworICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIHRy
YW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApOworICAgICAgICAgICAgfSBjYXRj
aCAoIGUgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBSZXRocm93IHBvc3QtY29tcGxldGlvbiBl
eGNlcHRpb25zCisgICAgICAgICAgICAgICAgaWYgKCBjb21wbGV0ZWQgKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
Ly8gUHJvcGFnYXRlIG90aGVycyBhcyByZXN1bHRzCisgICAgICAgICAgICAgICAgZG9uZSggLTEs
IGUgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIENhbGxiYWNrIGZv
ciB3aGVuIGV2ZXJ5dGhpbmcgaXMgZG9uZQorICAgICAgICBmdW5jdGlvbiBkb25lKCBzdGF0dXMs
IG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyApIHsKKyAgICAgICAgICAgIHZh
ciBpc1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVycm9yLCByZXNwb25zZSwgbW9kaWZpZWQsCisgICAgICAg
ICAgICAgICAgc3RhdHVzVGV4dCA9IG5hdGl2ZVN0YXR1c1RleHQ7CisKKyAgICAgICAgICAgIC8v
IElnbm9yZSByZXBlYXQgaW52b2NhdGlvbnMKKyAgICAgICAgICAgIGlmICggY29tcGxldGVkICkg
eworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Y29tcGxldGVkID0gdHJ1ZTsKKworICAgICAgICAgICAgLy8gQ2xlYXIgdGltZW91dCBpZiBpdCBl
eGlzdHMKKyAgICAgICAgICAgIGlmICggdGltZW91dFRpbWVyICkgeworICAgICAgICAgICAgICAg
IHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXRUaW1lciApOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBEZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9yIGVhcmx5IGdhcmJhZ2UgY29s
bGVjdGlvbgorICAgICAgICAgICAgLy8gKG5vIG1hdHRlciBob3cgbG9uZyB0aGUganFYSFIgb2Jq
ZWN0IHdpbGwgYmUgdXNlZCkKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IHVuZGVmaW5lZDsKKwor
ICAgICAgICAgICAgLy8gQ2FjaGUgcmVzcG9uc2UgaGVhZGVycworICAgICAgICAgICAgcmVzcG9u
c2VIZWFkZXJzU3RyaW5nID0gaGVhZGVycyB8fCAiIjsKKworICAgICAgICAgICAgLy8gU2V0IHJl
YWR5U3RhdGUKKyAgICAgICAgICAgIGpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6
IDA7CisKKyAgICAgICAgICAgIC8vIERldGVybWluZSBpZiBzdWNjZXNzZnVsCisgICAgICAgICAg
ICBpc1N1Y2Nlc3MgPSBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09
IDMwNDsKKworICAgICAgICAgICAgLy8gR2V0IHJlc3BvbnNlIGRhdGEKKyAgICAgICAgICAgIGlm
ICggcmVzcG9uc2VzICkgeworICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gYWpheEhhbmRsZVJl
c3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBDb252ZXJ0IG5vIG1hdHRlciB3aGF0ICh0aGF0IHdheSByZXNwb25zZVhYWCBmaWVs
ZHMgYXJlIGFsd2F5cyBzZXQpCisgICAgICAgICAgICByZXNwb25zZSA9IGFqYXhDb252ZXJ0KCBz
LCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApOworCisgICAgICAgICAgICAvLyBJZiBzdWNj
ZXNzZnVsLCBoYW5kbGUgdHlwZSBjaGFpbmluZworICAgICAgICAgICAgaWYgKCBpc1N1Y2Nlc3Mg
KSB7CisKKyAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9v
ciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLgorICAgICAgICAg
ICAgICAgIGlmICggcy5pZk1vZGlmaWVkICkgeworICAgICAgICAgICAgICAgICAgICBtb2RpZmll
ZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCAiTGFzdC1Nb2RpZmllZCIgKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCBtb2RpZmllZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNl
SGVhZGVyKCAiZXRhZyIgKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBtb2RpZmllZCApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdID0gbW9kaWZp
ZWQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAvLyBpZiBubyBjb250ZW50CisgICAgICAgICAgICAgICAgaWYgKCBzdGF0dXMgPT09
IDIwNCB8fCBzLnR5cGUgPT09ICJIRUFEIiApIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVz
VGV4dCA9ICJub2NvbnRlbnQiOworCisgICAgICAgICAgICAgICAgLy8gaWYgbm90IG1vZGlmaWVk
CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggc3RhdHVzID09PSAzMDQgKSB7CisgICAgICAg
ICAgICAgICAgICAgIHN0YXR1c1RleHQgPSAibm90bW9kaWZpZWQiOworCisgICAgICAgICAgICAg
ICAgLy8gSWYgd2UgaGF2ZSBkYXRhLCBsZXQncyBjb252ZXJ0IGl0CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9IHJlc3BvbnNlLnN0YXRl
OworICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gcmVzcG9uc2UuZGF0YTsKKyAgICAgICAg
ICAgICAgICAgICAgZXJyb3IgPSByZXNwb25zZS5lcnJvcjsKKyAgICAgICAgICAgICAgICAgICAg
aXNTdWNjZXNzID0gIWVycm9yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZSB7CisKKyAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGVycm9yIGZyb20gc3RhdHVzVGV4dCBh
bmQgbm9ybWFsaXplIGZvciBub24tYWJvcnRzCisgICAgICAgICAgICAgICAgZXJyb3IgPSBzdGF0
dXNUZXh0OworICAgICAgICAgICAgICAgIGlmICggc3RhdHVzIHx8ICFzdGF0dXNUZXh0ICkgewor
ICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gImVycm9yIjsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCBzdGF0dXMgPCAwICkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVz
ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmplY3QK
KyAgICAgICAgICAgIGpxWEhSLnN0YXR1cyA9IHN0YXR1czsKKyAgICAgICAgICAgIGpxWEhSLnN0
YXR1c1RleHQgPSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApICsgIiI7CisKKyAg
ICAgICAgICAgIC8vIFN1Y2Nlc3MvRXJyb3IKKyAgICAgICAgICAgIGlmICggaXNTdWNjZXNzICkg
eworICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxsYmFja0NvbnRleHQs
IFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZWplY3RXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsg
anFYSFIsIHN0YXR1c1RleHQsIGVycm9yIF0gKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3MKKyAgICAgICAgICAgIGpxWEhSLnN0YXR1
c0NvZGUoIHN0YXR1c0NvZGUgKTsKKyAgICAgICAgICAgIHN0YXR1c0NvZGUgPSB1bmRlZmluZWQ7
CisKKyAgICAgICAgICAgIGlmICggZmlyZUdsb2JhbHMgKSB7CisgICAgICAgICAgICAgICAgZ2xv
YmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIGlzU3VjY2VzcyA/ICJhamF4U3VjY2VzcyIgOiAiYWph
eEVycm9yIiwKKyAgICAgICAgICAgICAgICAgICAgWyBqcVhIUiwgcywgaXNTdWNjZXNzID8gc3Vj
Y2VzcyA6IGVycm9yIF0gKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ29tcGxl
dGUKKyAgICAgICAgICAgIGNvbXBsZXRlRGVmZXJyZWQuZmlyZVdpdGgoIGNhbGxiYWNrQ29udGV4
dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCBdICk7CisKKyAgICAgICAgICAgIGlmICggZmlyZUdsb2Jh
bHMgKSB7CisgICAgICAgICAgICAgICAgZ2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoICJhamF4
Q29tcGxldGUiLCBbIGpxWEhSLCBzIF0gKTsKKworICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0
aGUgZ2xvYmFsIEFKQVggY291bnRlcgorICAgICAgICAgICAgICAgIGlmICggISggLS1qUXVlcnku
YWN0aXZlICkgKSB7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyKCAi
YWpheFN0b3AiICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIGpxWEhSOworICAgIH0sCisKKyAgICBnZXRKU09OOiBmdW5jdGlv
biggdXJsLCBkYXRhLCBjYWxsYmFjayApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5nZXQoIHVy
bCwgZGF0YSwgY2FsbGJhY2ssICJqc29uIiApOworICAgIH0sCisKKyAgICBnZXRTY3JpcHQ6IGZ1
bmN0aW9uKCB1cmwsIGNhbGxiYWNrICkgeworICAgICAgICByZXR1cm4galF1ZXJ5LmdldCggdXJs
LCB1bmRlZmluZWQsIGNhbGxiYWNrLCAic2NyaXB0IiApOworICAgIH0KK30gKTsKKworalF1ZXJ5
LmVhY2goIFsgImdldCIsICJwb3N0IiBdLCBmdW5jdGlvbiggaSwgbWV0aG9kICkgeworICAgIGpR
dWVyeVsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjaywgdHlwZSApIHsK
KworICAgICAgICAvLyBTaGlmdCBhcmd1bWVudHMgaWYgZGF0YSBhcmd1bWVudCB3YXMgb21pdHRl
ZAorICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBkYXRhICkgKSB7CisgICAgICAgICAg
ICB0eXBlID0gdHlwZSB8fCBjYWxsYmFjazsKKyAgICAgICAgICAgIGNhbGxiYWNrID0gZGF0YTsK
KyAgICAgICAgICAgIGRhdGEgPSB1bmRlZmluZWQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBU
aGUgdXJsIGNhbiBiZSBhbiBvcHRpb25zIG9iamVjdCAod2hpY2ggdGhlbiBtdXN0IGhhdmUgLnVy
bCkKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5hamF4KCBqUXVlcnkuZXh0ZW5kKCB7CisgICAgICAg
ICAgICB1cmw6IHVybCwKKyAgICAgICAgICAgIHR5cGU6IG1ldGhvZCwKKyAgICAgICAgICAgIGRh
dGFUeXBlOiB0eXBlLAorICAgICAgICAgICAgZGF0YTogZGF0YSwKKyAgICAgICAgICAgIHN1Y2Nl
c3M6IGNhbGxiYWNrCisgICAgICAgIH0sIGpRdWVyeS5pc1BsYWluT2JqZWN0KCB1cmwgKSAmJiB1
cmwgKSApOworICAgIH07Cit9ICk7CisKKworalF1ZXJ5Ll9ldmFsVXJsID0gZnVuY3Rpb24oIHVy
bCApIHsKKyAgICByZXR1cm4galF1ZXJ5LmFqYXgoIHsKKyAgICAgICAgdXJsOiB1cmwsCisKKyAg
ICAgICAgLy8gTWFrZSB0aGlzIGV4cGxpY2l0LCBzaW5jZSB1c2VyIGNhbiBvdmVycmlkZSB0aGlz
IHRocm91Z2ggYWpheFNldHVwICgjMTEyNjQpCisgICAgICAgIHR5cGU6ICJHRVQiLAorICAgICAg
ICBkYXRhVHlwZTogInNjcmlwdCIsCisgICAgICAgIGNhY2hlOiB0cnVlLAorICAgICAgICBhc3lu
YzogZmFsc2UsCisgICAgICAgIGdsb2JhbDogZmFsc2UsCisgICAgICAgICJ0aHJvd3MiOiB0cnVl
CisgICAgfSApOworfTsKKworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisgICAgd3JhcEFsbDogZnVu
Y3Rpb24oIGh0bWwgKSB7CisgICAgICAgIHZhciB3cmFwOworCisgICAgICAgIGlmICggdGhpc1sg
MCBdICkgeworICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApICkgewor
ICAgICAgICAgICAgICAgIGh0bWwgPSBodG1sLmNhbGwoIHRoaXNbIDAgXSApOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBUaGUgZWxlbWVudHMgdG8gd3JhcCB0aGUgdGFyZ2V0IGFy
b3VuZAorICAgICAgICAgICAgd3JhcCA9IGpRdWVyeSggaHRtbCwgdGhpc1sgMCBdLm93bmVyRG9j
dW1lbnQgKS5lcSggMCApLmNsb25lKCB0cnVlICk7CisKKyAgICAgICAgICAgIGlmICggdGhpc1sg
MCBdLnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICAgICAgd3JhcC5pbnNlcnRCZWZvcmUoIHRo
aXNbIDAgXSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3cmFwLm1hcCggZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSB0aGlzOworCisgICAgICAgICAgICAg
ICAgd2hpbGUgKCBlbGVtLmZpcnN0RWxlbWVudENoaWxkICkgeworICAgICAgICAgICAgICAgICAg
ICBlbGVtID0gZWxlbS5maXJzdEVsZW1lbnRDaGlsZDsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZWxlbTsKKyAgICAgICAgICAgIH0gKS5hcHBlbmQoIHRoaXMg
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICB3cmFw
SW5uZXI6IGZ1bmN0aW9uKCBodG1sICkgeworICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9u
KCBodG1sICkgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSAp
IHsKKyAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS53cmFwSW5uZXIoIGh0bWwuY2FsbCgg
dGhpcywgaSApICk7CisgICAgICAgICAgICB9ICk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBzZWxmID0galF1ZXJ5
KCB0aGlzICksCisgICAgICAgICAgICAgICAgY29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7CisK
KyAgICAgICAgICAgIGlmICggY29udGVudHMubGVuZ3RoICkgeworICAgICAgICAgICAgICAgIGNv
bnRlbnRzLndyYXBBbGwoIGh0bWwgKTsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBzZWxmLmFwcGVuZCggaHRtbCApOworICAgICAgICAgICAgfQorICAgICAgICB9ICk7
CisgICAgfSwKKworICAgIHdyYXA6IGZ1bmN0aW9uKCBodG1sICkgeworICAgICAgICB2YXIgaXNG
dW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICk7CisKKyAgICAgICAgcmV0dXJuIHRo
aXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7CisgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS53cmFw
QWxsKCBpc0Z1bmN0aW9uID8gaHRtbC5jYWxsKCB0aGlzLCBpICkgOiBodG1sICk7CisgICAgICAg
IH0gKTsKKyAgICB9LAorCisgICAgdW53cmFwOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAg
ICAgIHRoaXMucGFyZW50KCBzZWxlY3RvciApLm5vdCggImJvZHkiICkuZWFjaCggZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5yZXBsYWNlV2l0aCggdGhpcy5jaGlsZE5v
ZGVzICk7CisgICAgICAgIH0gKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorfSApOwor
CisKK2pRdWVyeS5leHByLnBzZXVkb3MuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAg
cmV0dXJuICFqUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUoIGVsZW0gKTsKK307CitqUXVlcnku
ZXhwci5wc2V1ZG9zLnZpc2libGUgPSBmdW5jdGlvbiggZWxlbSApIHsKKyAgICByZXR1cm4gISEo
IGVsZW0ub2Zmc2V0V2lkdGggfHwgZWxlbS5vZmZzZXRIZWlnaHQgfHwgZWxlbS5nZXRDbGllbnRS
ZWN0cygpLmxlbmd0aCApOworfTsKKworCisKKworalF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIgPSBm
dW5jdGlvbigpIHsKKyAgICB0cnkgeworICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRw
UmVxdWVzdCgpOworICAgIH0gY2F0Y2ggKCBlICkge30KK307CisKK3ZhciB4aHJTdWNjZXNzU3Rh
dHVzID0geworCisgICAgICAgIC8vIEZpbGUgcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMg
Y29kZSAwLCBhc3N1bWUgMjAwCisgICAgICAgIDA6IDIwMCwKKworICAgICAgICAvLyBTdXBwb3J0
OiBJRSA8PTkgb25seQorICAgICAgICAvLyAjMTQ1MDogc29tZXRpbWVzIElFIHJldHVybnMgMTIy
MyB3aGVuIGl0IHNob3VsZCBiZSAyMDQKKyAgICAgICAgMTIyMzogMjA0CisgICAgfSwKKyAgICB4
aHJTdXBwb3J0ZWQgPSBqUXVlcnkuYWpheFNldHRpbmdzLnhocigpOworCitzdXBwb3J0LmNvcnMg
PSAhIXhoclN1cHBvcnRlZCAmJiAoICJ3aXRoQ3JlZGVudGlhbHMiIGluIHhoclN1cHBvcnRlZCAp
Oworc3VwcG9ydC5hamF4ID0geGhyU3VwcG9ydGVkID0gISF4aHJTdXBwb3J0ZWQ7CisKK2pRdWVy
eS5hamF4VHJhbnNwb3J0KCBmdW5jdGlvbiggb3B0aW9ucyApIHsKKyAgICB2YXIgY2FsbGJhY2ss
IGVycm9yQ2FsbGJhY2s7CisKKyAgICAvLyBDcm9zcyBkb21haW4gb25seSBhbGxvd2VkIGlmIHN1
cHBvcnRlZCB0aHJvdWdoIFhNTEh0dHBSZXF1ZXN0CisgICAgaWYgKCBzdXBwb3J0LmNvcnMgfHwg
eGhyU3VwcG9ydGVkICYmICFvcHRpb25zLmNyb3NzRG9tYWluICkgeworICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgc2VuZDogZnVuY3Rpb24oIGhlYWRlcnMsIGNvbXBsZXRlICkgeworICAg
ICAgICAgICAgICAgIHZhciBpLAorICAgICAgICAgICAgICAgICAgICB4aHIgPSBvcHRpb25zLnho
cigpOworCisgICAgICAgICAgICAgICAgeGhyLm9wZW4oCisgICAgICAgICAgICAgICAgICAgIG9w
dGlvbnMudHlwZSwKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51cmwsCisgICAgICAgICAg
ICAgICAgICAgIG9wdGlvbnMuYXN5bmMsCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudXNl
cm5hbWUsCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucGFzc3dvcmQKKyAgICAgICAgICAg
ICAgICApOworCisgICAgICAgICAgICAgICAgLy8gQXBwbHkgY3VzdG9tIGZpZWxkcyBpZiBwcm92
aWRlZAorICAgICAgICAgICAgICAgIGlmICggb3B0aW9ucy54aHJGaWVsZHMgKSB7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAoIGkgaW4gb3B0aW9ucy54aHJGaWVsZHMgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB4aHJbIGkgXSA9IG9wdGlvbnMueGhyRmllbGRzWyBpIF07CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBP
dmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkCisgICAgICAgICAgICAgICAgaWYgKCBvcHRpb25z
Lm1pbWVUeXBlICYmIHhoci5vdmVycmlkZU1pbWVUeXBlICkgeworICAgICAgICAgICAgICAgICAg
ICB4aHIub3ZlcnJpZGVNaW1lVHlwZSggb3B0aW9ucy5taW1lVHlwZSApOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFgtUmVxdWVzdGVkLVdpdGggaGVhZGVyCisgICAg
ICAgICAgICAgICAgLy8gRm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cywgc2VlaW5nIGFzIGNvbmRp
dGlvbnMgZm9yIGEgcHJlZmxpZ2h0IGFyZQorICAgICAgICAgICAgICAgIC8vIGFraW4gdG8gYSBq
aWdzYXcgcHV6emxlLCB3ZSBzaW1wbHkgbmV2ZXIgc2V0IGl0IHRvIGJlIHN1cmUuCisgICAgICAg
ICAgICAgICAgLy8gKGl0IGNhbiBhbHdheXMgYmUgc2V0IG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMg
b3IgZXZlbiB1c2luZyBhamF4U2V0dXApCisgICAgICAgICAgICAgICAgLy8gRm9yIHNhbWUtZG9t
YWluIHJlcXVlc3RzLCB3b24ndCBjaGFuZ2UgaGVhZGVyIGlmIGFscmVhZHkgcHJvdmlkZWQuCisg
ICAgICAgICAgICAgICAgaWYgKCAhb3B0aW9ucy5jcm9zc0RvbWFpbiAmJiAhaGVhZGVyc1sgIlgt
UmVxdWVzdGVkLVdpdGgiIF0gKSB7CisgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbICJYLVJl
cXVlc3RlZC1XaXRoIiBdID0gIlhNTEh0dHBSZXF1ZXN0IjsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAvLyBTZXQgaGVhZGVycworICAgICAgICAgICAgICAgIGZvciAoIGkg
aW4gaGVhZGVycyApIHsKKyAgICAgICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIo
IGksIGhlYWRlcnNbIGkgXSApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IC8vIENhbGxiYWNrCisgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiggdHlwZSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBjYWxsYmFjayApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYWxsYmFjayA9IGVycm9yQ2FsbGJhY2sgPSB4aHIub25sb2FkID0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSB4aHIub25hYm9ydCA9IHhoci5vbnJlYWR5
c3RhdGVjaGFuZ2UgPSBudWxsOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0
eXBlID09PSAiYWJvcnQiICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIu
YWJvcnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBlID09
PSAiZXJyb3IiICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBv
cnQ6IElFIDw9OSBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9uIGEg
bWFudWFsIG5hdGl2ZSBhYm9ydCwgSUU5IHRocm93cworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBlcnJvcnMgb24gYW55IHByb3BlcnR5IGFjY2VzcyB0aGF0IGlzIG5vdCByZWFk
eVN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHhoci5z
dGF0dXMgIT09ICJudW1iZXIiICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29tcGxldGUoIDAsICJlcnJvciIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRl
KAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlsZTogcHJv
dG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgMDsgc2VlICM4NjA1LCAjMTQyMDcKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIuc3RhdHVzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5zdGF0dXNUZXh0CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29tcGxldGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB4aHJTdWNjZXNzU3RhdHVzWyB4aHIuc3RhdHVzIF0gfHwgeGhyLnN0YXR1cywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5zdGF0dXNUZXh0LAorCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRSA8PTkgb25seQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUU5IGhhcyBubyBYSFIyIGJ1
dCB0aHJvd3Mgb24gYmluYXJ5ICh0cmFjLTExNDI2KQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gRm9yIFhIUjIgbm9uLXRleHQsIGxldCB0aGUgY2FsbGVyIGhhbmRsZSBp
dCAoZ2gtMjQ5OCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggeGhyLnJl
c3BvbnNlVHlwZSB8fCAidGV4dCIgKSAhPT0gInRleHQiICB8fAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZW9mIHhoci5yZXNwb25zZVRleHQgIT09ICJzdHJpbmciID8K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGJpbmFyeTogeGhyLnJl
c3BvbnNlIH0gOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdGV4
dDogeGhyLnJlc3BvbnNlVGV4dCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH07CisK
KyAgICAgICAgICAgICAgICAvLyBMaXN0ZW4gdG8gZXZlbnRzCisgICAgICAgICAgICAgICAgeGhy
Lm9ubG9hZCA9IGNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjayA9IHho
ci5vbmVycm9yID0gY2FsbGJhY2soICJlcnJvciIgKTsKKworICAgICAgICAgICAgICAgIC8vIFN1
cHBvcnQ6IElFIDkgb25seQorICAgICAgICAgICAgICAgIC8vIFVzZSBvbnJlYWR5c3RhdGVjaGFu
Z2UgdG8gcmVwbGFjZSBvbmFib3J0CisgICAgICAgICAgICAgICAgLy8gdG8gaGFuZGxlIHVuY2F1
Z2h0IGFib3J0cworICAgICAgICAgICAgICAgIGlmICggeGhyLm9uYWJvcnQgIT09IHVuZGVmaW5l
ZCApIHsKKyAgICAgICAgICAgICAgICAgICAgeGhyLm9uYWJvcnQgPSBlcnJvckNhbGxiYWNrOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHhoci5vbnJlYWR5
c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Q2hlY2sgcmVhZHlTdGF0ZSBiZWZvcmUgdGltZW91dCBhcyBpdCBjaGFuZ2VzCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHhoci5yZWFkeVN0YXRlID09PSA0ICkgeworCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQWxsb3cgb25lcnJvciB0byBiZSBjYWxsZWQgZmlyc3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnV0IHRoYXQgd2lsbCBub3QgaGFuZGxlIGEg
bmF0aXZlIGFib3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWxzbywgc2F2ZSBl
cnJvckNhbGxiYWNrIHRvIGEgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBhcyB4aHIub25lcnJvciBjYW5ub3QgYmUgYWNjZXNzZWQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2sgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBhYm9ydCBjYWxsYmFjaworICAgICAgICAg
ICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2soICJhYm9ydCIgKTsKKworICAgICAgICAgICAgICAg
IHRyeSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRG8gc2VuZCB0aGUgcmVxdWVzdCAodGhp
cyBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uKQorICAgICAgICAgICAgICAgICAgICB4aHIuc2VuZCgg
b3B0aW9ucy5oYXNDb250ZW50ICYmIG9wdGlvbnMuZGF0YSB8fCBudWxsICk7CisgICAgICAgICAg
ICAgICAgfSBjYXRjaCAoIGUgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gIzE0NjgzOiBP
bmx5IHJldGhyb3cgaWYgdGhpcyBoYXNuJ3QgYmVlbiBub3RpZmllZCBhcyBhbiBlcnJvciB5ZXQK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjayApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRocm93IGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICBhYm9ydDogZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCBjYWxsYmFjayApIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJh
Y2soKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAg
fQorfSApOworCisKKworCisvLyBQcmV2ZW50IGF1dG8tZXhlY3V0aW9uIG9mIHNjcmlwdHMgd2hl
biBubyBleHBsaWNpdCBkYXRhVHlwZSB3YXMgcHJvdmlkZWQgKFNlZSBnaC0yNDMyKQoralF1ZXJ5
LmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzICkgeworICAgIGlmICggcy5jcm9zc0RvbWFpbiAp
IHsKKyAgICAgICAgcy5jb250ZW50cy5zY3JpcHQgPSBmYWxzZTsKKyAgICB9Cit9ICk7CisKKy8v
IEluc3RhbGwgc2NyaXB0IGRhdGFUeXBlCitqUXVlcnkuYWpheFNldHVwKCB7CisgICAgYWNjZXB0
czogeworICAgICAgICBzY3JpcHQ6ICJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFz
Y3JpcHQsICIgKworICAgICAgICAgICAgImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0
aW9uL3gtZWNtYXNjcmlwdCIKKyAgICB9LAorICAgIGNvbnRlbnRzOiB7CisgICAgICAgIHNjcmlw
dDogL1xiKD86amF2YXxlY21hKXNjcmlwdFxiLworICAgIH0sCisgICAgY29udmVydGVyczogewor
ICAgICAgICAidGV4dCBzY3JpcHQiOiBmdW5jdGlvbiggdGV4dCApIHsKKyAgICAgICAgICAgIGpR
dWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7CisgICAgICAgICAgICByZXR1cm4gdGV4dDsKKyAgICAg
ICAgfQorICAgIH0KK30gKTsKKworLy8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBj
cm9zc0RvbWFpbgoralF1ZXJ5LmFqYXhQcmVmaWx0ZXIoICJzY3JpcHQiLCBmdW5jdGlvbiggcyAp
IHsKKyAgICBpZiAoIHMuY2FjaGUgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgcy5jYWNoZSA9
IGZhbHNlOworICAgIH0KKyAgICBpZiAoIHMuY3Jvc3NEb21haW4gKSB7CisgICAgICAgIHMudHlw
ZSA9ICJHRVQiOworICAgIH0KK30gKTsKKworLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNw
b3J0CitqUXVlcnkuYWpheFRyYW5zcG9ydCggInNjcmlwdCIsIGZ1bmN0aW9uKCBzICkgeworCisg
ICAgLy8gVGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3aXRoIGNyb3NzIGRvbWFpbiByZXF1ZXN0
cworICAgIGlmICggcy5jcm9zc0RvbWFpbiApIHsKKyAgICAgICAgdmFyIHNjcmlwdCwgY2FsbGJh
Y2s7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBzZW5kOiBmdW5jdGlvbiggXywgY29t
cGxldGUgKSB7CisgICAgICAgICAgICAgICAgc2NyaXB0ID0galF1ZXJ5KCAiPHNjcmlwdD4iICku
cHJvcCggeworICAgICAgICAgICAgICAgICAgICBjaGFyc2V0OiBzLnNjcmlwdENoYXJzZXQsCisg
ICAgICAgICAgICAgICAgICAgIHNyYzogcy51cmwKKyAgICAgICAgICAgICAgICB9ICkub24oCisg
ICAgICAgICAgICAgICAgICAgICJsb2FkIGVycm9yIiwKKyAgICAgICAgICAgICAgICAgICAgY2Fs
bGJhY2sgPSBmdW5jdGlvbiggZXZ0ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0
LnJlbW92ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBudWxsOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBldnQgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29tcGxldGUoIGV2dC50eXBlID09PSAiZXJyb3IiID8gNDA0IDogMjAwLCBldnQudHlw
ZSApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgICAgIC8vIFVzZSBuYXRpdmUgRE9NIG1h
bmlwdWxhdGlvbiB0byBhdm9pZCBvdXIgZG9tTWFuaXAgQUpBWCB0cmlja2VyeQorICAgICAgICAg
ICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdFsgMCBdICk7CisgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
IGlmICggY2FsbGJhY2sgKSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30gKTsKKwor
CisKKwordmFyIG9sZENhbGxiYWNrcyA9IFtdLAorICAgIHJqc29ucCA9IC8oPSlcPyg/PSZ8JCl8
XD9cPy87CisKKy8vIERlZmF1bHQganNvbnAgc2V0dGluZ3MKK2pRdWVyeS5hamF4U2V0dXAoIHsK
KyAgICBqc29ucDogImNhbGxiYWNrIiwKKyAgICBqc29ucENhbGxiYWNrOiBmdW5jdGlvbigpIHsK
KyAgICAgICAgdmFyIGNhbGxiYWNrID0gb2xkQ2FsbGJhY2tzLnBvcCgpIHx8ICggalF1ZXJ5LmV4
cGFuZG8gKyAiXyIgKyAoIG5vbmNlKysgKSApOworICAgICAgICB0aGlzWyBjYWxsYmFjayBdID0g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuIGNhbGxiYWNrOworICAgIH0KK30gKTsKKworLy8gRGV0ZWN0
LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVl
c3RzCitqUXVlcnkuYWpheFByZWZpbHRlciggImpzb24ganNvbnAiLCBmdW5jdGlvbiggcywgb3Jp
Z2luYWxTZXR0aW5ncywganFYSFIgKSB7CisKKyAgICB2YXIgY2FsbGJhY2tOYW1lLCBvdmVyd3Jp
dHRlbiwgcmVzcG9uc2VDb250YWluZXIsCisgICAgICAgIGpzb25Qcm9wID0gcy5qc29ucCAhPT0g
ZmFsc2UgJiYgKCByanNvbnAudGVzdCggcy51cmwgKSA/CisgICAgICAgICAgICAidXJsIiA6Cisg
ICAgICAgICAgICB0eXBlb2Ygcy5kYXRhID09PSAic3RyaW5nIiAmJgorICAgICAgICAgICAgICAg
ICggcy5jb250ZW50VHlwZSB8fCAiIiApCisgICAgICAgICAgICAgICAgICAgIC5pbmRleE9mKCAi
YXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiApID09PSAwICYmCisgICAgICAgICAg
ICAgICAgcmpzb25wLnRlc3QoIHMuZGF0YSApICYmICJkYXRhIgorICAgICAgICApOworCisgICAg
Ly8gSGFuZGxlIGlmZiB0aGUgZXhwZWN0ZWQgZGF0YSB0eXBlIGlzICJqc29ucCIgb3Igd2UgaGF2
ZSBhIHBhcmFtZXRlciB0byBzZXQKKyAgICBpZiAoIGpzb25Qcm9wIHx8IHMuZGF0YVR5cGVzWyAw
IF0gPT09ICJqc29ucCIgKSB7CisKKyAgICAgICAgLy8gR2V0IGNhbGxiYWNrIG5hbWUsIHJlbWVt
YmVyaW5nIHByZWV4aXN0aW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpdAorICAgICAgICBjYWxs
YmFja05hbWUgPSBzLmpzb25wQ2FsbGJhY2sgPSBqUXVlcnkuaXNGdW5jdGlvbiggcy5qc29ucENh
bGxiYWNrICkgPworICAgICAgICAgICAgcy5qc29ucENhbGxiYWNrKCkgOgorICAgICAgICAgICAg
cy5qc29ucENhbGxiYWNrOworCisgICAgICAgIC8vIEluc2VydCBjYWxsYmFjayBpbnRvIHVybCBv
ciBmb3JtIGRhdGEKKyAgICAgICAgaWYgKCBqc29uUHJvcCApIHsKKyAgICAgICAgICAgIHNbIGpz
b25Qcm9wIF0gPSBzWyBqc29uUHJvcCBdLnJlcGxhY2UoIHJqc29ucCwgIiQxIiArIGNhbGxiYWNr
TmFtZSApOworICAgICAgICB9IGVsc2UgaWYgKCBzLmpzb25wICE9PSBmYWxzZSApIHsKKyAgICAg
ICAgICAgIHMudXJsICs9ICggcnF1ZXJ5LnRlc3QoIHMudXJsICkgPyAiJiIgOiAiPyIgKSArIHMu
anNvbnAgKyAiPSIgKyBjYWxsYmFja05hbWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBVc2Ug
ZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uCisg
ICAgICAgIHMuY29udmVydGVyc1sgInNjcmlwdCBqc29uIiBdID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICBpZiAoICFyZXNwb25zZUNvbnRhaW5lciApIHsKKyAgICAgICAgICAgICAgICBqUXVl
cnkuZXJyb3IoIGNhbGxiYWNrTmFtZSArICIgd2FzIG5vdCBjYWxsZWQiICk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VDb250YWluZXJbIDAgXTsKKyAgICAgICAg
fTsKKworICAgICAgICAvLyBGb3JjZSBqc29uIGRhdGFUeXBlCisgICAgICAgIHMuZGF0YVR5cGVz
WyAwIF0gPSAianNvbiI7CisKKyAgICAgICAgLy8gSW5zdGFsbCBjYWxsYmFjaworICAgICAgICBv
dmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF07CisgICAgICAgIHdpbmRvd1sgY2Fs
bGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHJlc3BvbnNlQ29udGFpbmVy
ID0gYXJndW1lbnRzOworICAgICAgICB9OworCisgICAgICAgIC8vIENsZWFuLXVwIGZ1bmN0aW9u
IChmaXJlcyBhZnRlciBjb252ZXJ0ZXJzKQorICAgICAgICBqcVhIUi5hbHdheXMoIGZ1bmN0aW9u
KCkgeworCisgICAgICAgICAgICAvLyBJZiBwcmV2aW91cyB2YWx1ZSBkaWRuJ3QgZXhpc3QgLSBy
ZW1vdmUgaXQKKyAgICAgICAgICAgIGlmICggb3ZlcndyaXR0ZW4gPT09IHVuZGVmaW5lZCApIHsK
KyAgICAgICAgICAgICAgICBqUXVlcnkoIHdpbmRvdyApLnJlbW92ZVByb3AoIGNhbGxiYWNrTmFt
ZSApOworCisgICAgICAgICAgICAvLyBPdGhlcndpc2UgcmVzdG9yZSBwcmVleGlzdGluZyB2YWx1
ZQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB3aW5kb3dbIGNhbGxiYWNr
TmFtZSBdID0gb3ZlcndyaXR0ZW47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNh
dmUgYmFjayBhcyBmcmVlCisgICAgICAgICAgICBpZiAoIHNbIGNhbGxiYWNrTmFtZSBdICkgewor
CisgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMg
ZG9lc24ndCBzY3JldyB0aGluZ3MgYXJvdW5kCisgICAgICAgICAgICAgICAgcy5qc29ucENhbGxi
YWNrID0gb3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxiYWNrOworCisgICAgICAgICAgICAgICAg
Ly8gU2F2ZSB0aGUgY2FsbGJhY2sgbmFtZSBmb3IgZnV0dXJlIHVzZQorICAgICAgICAgICAgICAg
IG9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3Bv
bnNlCisgICAgICAgICAgICBpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGpRdWVyeS5pc0Z1bmN0
aW9uKCBvdmVyd3JpdHRlbiApICkgeworICAgICAgICAgICAgICAgIG92ZXJ3cml0dGVuKCByZXNw
b25zZUNvbnRhaW5lclsgMCBdICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJlc3Bv
bnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7CisgICAgICAgIH0gKTsKKwor
ICAgICAgICAvLyBEZWxlZ2F0ZSB0byBzY3JpcHQKKyAgICAgICAgcmV0dXJuICJzY3JpcHQiOwor
ICAgIH0KK30gKTsKKworCisKKworLy8gU3VwcG9ydDogU2FmYXJpIDggb25seQorLy8gSW4gU2Fm
YXJpIDggZG9jdW1lbnRzIGNyZWF0ZWQgdmlhIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0
ZUhUTUxEb2N1bWVudAorLy8gY29sbGFwc2Ugc2libGluZyBmb3JtczogdGhlIHNlY29uZCBvbmUg
YmVjb21lcyBhIGNoaWxkIG9mIHRoZSBmaXJzdCBvbmUuCisvLyBCZWNhdXNlIG9mIHRoYXQsIHRo
aXMgc2VjdXJpdHkgbWVhc3VyZSBoYXMgdG8gYmUgZGlzYWJsZWQgaW4gU2FmYXJpIDguCisvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzM3CitzdXBwb3J0LmNy
ZWF0ZUhUTUxEb2N1bWVudCA9ICggZnVuY3Rpb24oKSB7CisgICAgdmFyIGJvZHkgPSBkb2N1bWVu
dC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoICIiICkuYm9keTsKKyAgICBib2R5
LmlubmVySFRNTCA9ICI8Zm9ybT48L2Zvcm0+PGZvcm0+PC9mb3JtPiI7CisgICAgcmV0dXJuIGJv
ZHkuY2hpbGROb2Rlcy5sZW5ndGggPT09IDI7Cit9ICkoKTsKKworCisvLyBBcmd1bWVudCAiZGF0
YSIgc2hvdWxkIGJlIHN0cmluZyBvZiBodG1sCisvLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNw
ZWNpZmllZCwgdGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsCisv
LyBkZWZhdWx0cyB0byBkb2N1bWVudAorLy8ga2VlcFNjcmlwdHMgKG9wdGlvbmFsKTogSWYgdHJ1
ZSwgd2lsbCBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBodG1sIHN0cmluZworalF1ZXJ5
LnBhcnNlSFRNTCA9IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBrZWVwU2NyaXB0cyApIHsKKyAg
ICBpZiAoIHR5cGVvZiBkYXRhICE9PSAic3RyaW5nIiApIHsKKyAgICAgICAgcmV0dXJuIFtdOwor
ICAgIH0KKyAgICBpZiAoIHR5cGVvZiBjb250ZXh0ID09PSAiYm9vbGVhbiIgKSB7CisgICAgICAg
IGtlZXBTY3JpcHRzID0gY29udGV4dDsKKyAgICAgICAgY29udGV4dCA9IGZhbHNlOworICAgIH0K
KworICAgIHZhciBiYXNlLCBwYXJzZWQsIHNjcmlwdHM7CisKKyAgICBpZiAoICFjb250ZXh0ICkg
eworCisgICAgICAgIC8vIFN0b3Agc2NyaXB0cyBvciBpbmxpbmUgZXZlbnQgaGFuZGxlcnMgZnJv
bSBiZWluZyBleGVjdXRlZCBpbW1lZGlhdGVseQorICAgICAgICAvLyBieSB1c2luZyBkb2N1bWVu
dC5pbXBsZW1lbnRhdGlvbgorICAgICAgICBpZiAoIHN1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50
ICkgeworICAgICAgICAgICAgY29udGV4dCA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0
ZUhUTUxEb2N1bWVudCggIiIgKTsKKworICAgICAgICAgICAgLy8gU2V0IHRoZSBiYXNlIGhyZWYg
Zm9yIHRoZSBjcmVhdGVkIGRvY3VtZW50CisgICAgICAgICAgICAvLyBzbyBhbnkgcGFyc2VkIGVs
ZW1lbnRzIHdpdGggVVJMcworICAgICAgICAgICAgLy8gYXJlIGJhc2VkIG9uIHRoZSBkb2N1bWVu
dCdzIFVSTCAoZ2gtMjk2NSkKKyAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0ZUVsZW1l
bnQoICJiYXNlIiApOworICAgICAgICAgICAgYmFzZS5ocmVmID0gZG9jdW1lbnQubG9jYXRpb24u
aHJlZjsKKyAgICAgICAgICAgIGNvbnRleHQuaGVhZC5hcHBlbmRDaGlsZCggYmFzZSApOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29udGV4dCA9IGRvY3VtZW50OworICAgICAgICB9
CisgICAgfQorCisgICAgcGFyc2VkID0gcnNpbmdsZVRhZy5leGVjKCBkYXRhICk7CisgICAgc2Ny
aXB0cyA9ICFrZWVwU2NyaXB0cyAmJiBbXTsKKworICAgIC8vIFNpbmdsZSB0YWcKKyAgICBpZiAo
IHBhcnNlZCApIHsKKyAgICAgICAgcmV0dXJuIFsgY29udGV4dC5jcmVhdGVFbGVtZW50KCBwYXJz
ZWRbIDEgXSApIF07CisgICAgfQorCisgICAgcGFyc2VkID0gYnVpbGRGcmFnbWVudCggWyBkYXRh
IF0sIGNvbnRleHQsIHNjcmlwdHMgKTsKKworICAgIGlmICggc2NyaXB0cyAmJiBzY3JpcHRzLmxl
bmd0aCApIHsKKyAgICAgICAgalF1ZXJ5KCBzY3JpcHRzICkucmVtb3ZlKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIHBhcnNlZC5jaGlsZE5vZGVzICk7Cit9OworCisK
Ky8qKgorICogTG9hZCBhIHVybCBpbnRvIGEgcGFnZQorICovCitqUXVlcnkuZm4ubG9hZCA9IGZ1
bmN0aW9uKCB1cmwsIHBhcmFtcywgY2FsbGJhY2sgKSB7CisgICAgdmFyIHNlbGVjdG9yLCB0eXBl
LCByZXNwb25zZSwKKyAgICAgICAgc2VsZiA9IHRoaXMsCisgICAgICAgIG9mZiA9IHVybC5pbmRl
eE9mKCAiICIgKTsKKworICAgIGlmICggb2ZmID4gLTEgKSB7CisgICAgICAgIHNlbGVjdG9yID0g
c3RyaXBBbmRDb2xsYXBzZSggdXJsLnNsaWNlKCBvZmYgKSApOworICAgICAgICB1cmwgPSB1cmwu
c2xpY2UoIDAsIG9mZiApOworICAgIH0KKworICAgIC8vIElmIGl0J3MgYSBmdW5jdGlvbgorICAg
IGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHBhcmFtcyApICkgeworCisgICAgICAgIC8vIFdlIGFz
c3VtZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNrCisgICAgICAgIGNhbGxiYWNrID0gcGFyYW1zOwor
ICAgICAgICBwYXJhbXMgPSB1bmRlZmluZWQ7CisKKyAgICAvLyBPdGhlcndpc2UsIGJ1aWxkIGEg
cGFyYW0gc3RyaW5nCisgICAgfSBlbHNlIGlmICggcGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09
ICJvYmplY3QiICkgeworICAgICAgICB0eXBlID0gIlBPU1QiOworICAgIH0KKworICAgIC8vIElm
IHdlIGhhdmUgZWxlbWVudHMgdG8gbW9kaWZ5LCBtYWtlIHRoZSByZXF1ZXN0CisgICAgaWYgKCBz
ZWxmLmxlbmd0aCA+IDAgKSB7CisgICAgICAgIGpRdWVyeS5hamF4KCB7CisgICAgICAgICAgICB1
cmw6IHVybCwKKworICAgICAgICAgICAgLy8gSWYgInR5cGUiIHZhcmlhYmxlIGlzIHVuZGVmaW5l
ZCwgdGhlbiAiR0VUIiBtZXRob2Qgd2lsbCBiZSB1c2VkLgorICAgICAgICAgICAgLy8gTWFrZSB2
YWx1ZSBvZiB0aGlzIGZpZWxkIGV4cGxpY2l0IHNpbmNlCisgICAgICAgICAgICAvLyB1c2VyIGNh
biBvdmVycmlkZSBpdCB0aHJvdWdoIGFqYXhTZXR1cCBtZXRob2QKKyAgICAgICAgICAgIHR5cGU6
IHR5cGUgfHwgIkdFVCIsCisgICAgICAgICAgICBkYXRhVHlwZTogImh0bWwiLAorICAgICAgICAg
ICAgZGF0YTogcGFyYW1zCisgICAgICAgIH0gKS5kb25lKCBmdW5jdGlvbiggcmVzcG9uc2VUZXh0
ICkgeworCisgICAgICAgICAgICAvLyBTYXZlIHJlc3BvbnNlIGZvciB1c2UgaW4gY29tcGxldGUg
Y2FsbGJhY2sKKyAgICAgICAgICAgIHJlc3BvbnNlID0gYXJndW1lbnRzOworCisgICAgICAgICAg
ICBzZWxmLmh0bWwoIHNlbGVjdG9yID8KKworICAgICAgICAgICAgICAgIC8vIElmIGEgc2VsZWN0
b3Igd2FzIHNwZWNpZmllZCwgbG9jYXRlIHRoZSByaWdodCBlbGVtZW50cyBpbiBhIGR1bW15IGRp
dgorICAgICAgICAgICAgICAgIC8vIEV4Y2x1ZGUgc2NyaXB0cyB0byBhdm9pZCBJRSAnUGVybWlz
c2lvbiBEZW5pZWQnIGVycm9ycworICAgICAgICAgICAgICAgIGpRdWVyeSggIjxkaXY+IiApLmFw
cGVuZCggalF1ZXJ5LnBhcnNlSFRNTCggcmVzcG9uc2VUZXh0ICkgKS5maW5kKCBzZWxlY3RvciAp
IDoKKworICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB1c2UgdGhlIGZ1bGwgcmVzdWx0Cisg
ICAgICAgICAgICAgICAgcmVzcG9uc2VUZXh0ICk7CisKKyAgICAgICAgLy8gSWYgdGhlIHJlcXVl
c3Qgc3VjY2VlZHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyAiZGF0YSIsICJzdGF0dXMiLCAianFYSFIi
CisgICAgICAgIC8vIGJ1dCB0aGV5IGFyZSBpZ25vcmVkIGJlY2F1c2UgcmVzcG9uc2Ugd2FzIHNl
dCBhYm92ZS4KKyAgICAgICAgLy8gSWYgaXQgZmFpbHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyAianFY
SFIiLCAic3RhdHVzIiwgImVycm9yIgorICAgICAgICB9ICkuYWx3YXlzKCBjYWxsYmFjayAmJiBm
dW5jdGlvbigganFYSFIsIHN0YXR1cyApIHsKKyAgICAgICAgICAgIHNlbGYuZWFjaCggZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkoIHRoaXMsIHJlc3BvbnNlIHx8
IFsganFYSFIucmVzcG9uc2VUZXh0LCBzdGF0dXMsIGpxWEhSIF0gKTsKKyAgICAgICAgICAgIH0g
KTsKKyAgICAgICAgfSApOworICAgIH0KKworICAgIHJldHVybiB0aGlzOworfTsKKworCisKKwor
Ly8gQXR0YWNoIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGZvciBoYW5kbGluZyBjb21tb24gQUpBWCBl
dmVudHMKK2pRdWVyeS5lYWNoKCBbCisgICAgImFqYXhTdGFydCIsCisgICAgImFqYXhTdG9wIiwK
KyAgICAiYWpheENvbXBsZXRlIiwKKyAgICAiYWpheEVycm9yIiwKKyAgICAiYWpheFN1Y2Nlc3Mi
LAorICAgICJhamF4U2VuZCIKK10sIGZ1bmN0aW9uKCBpLCB0eXBlICkgeworICAgIGpRdWVyeS5m
blsgdHlwZSBdID0gZnVuY3Rpb24oIGZuICkgeworICAgICAgICByZXR1cm4gdGhpcy5vbiggdHlw
ZSwgZm4gKTsKKyAgICB9OworfSApOworCisKKworCitqUXVlcnkuZXhwci5wc2V1ZG9zLmFuaW1h
dGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgcmV0dXJuIGpRdWVyeS5ncmVwKCBqUXVlcnku
dGltZXJzLCBmdW5jdGlvbiggZm4gKSB7CisgICAgICAgIHJldHVybiBlbGVtID09PSBmbi5lbGVt
OworICAgIH0gKS5sZW5ndGg7Cit9OworCisKKworCisvKioKKyAqIEdldHMgYSB3aW5kb3cgZnJv
bSBhbiBlbGVtZW50CisgKi8KK2Z1bmN0aW9uIGdldFdpbmRvdyggZWxlbSApIHsKKyAgICByZXR1
cm4galF1ZXJ5LmlzV2luZG93KCBlbGVtICkgPyBlbGVtIDogZWxlbS5ub2RlVHlwZSA9PT0gOSAm
JiBlbGVtLmRlZmF1bHRWaWV3OworfQorCitqUXVlcnkub2Zmc2V0ID0geworICAgIHNldE9mZnNl
dDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGkgKSB7CisgICAgICAgIHZhciBjdXJQb3NpdGlv
biwgY3VyTGVmdCwgY3VyQ1NTVG9wLCBjdXJUb3AsIGN1ck9mZnNldCwgY3VyQ1NTTGVmdCwgY2Fs
Y3VsYXRlUG9zaXRpb24sCisgICAgICAgICAgICBwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0s
ICJwb3NpdGlvbiIgKSwKKyAgICAgICAgICAgIGN1ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSwKKyAg
ICAgICAgICAgIHByb3BzID0ge307CisKKyAgICAgICAgLy8gU2V0IHBvc2l0aW9uIGZpcnN0LCBp
bi1jYXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZlbiBvbiBzdGF0aWMgZWxlbQorICAgICAgICBpZiAo
IHBvc2l0aW9uID09PSAic3RhdGljIiApIHsKKyAgICAgICAgICAgIGVsZW0uc3R5bGUucG9zaXRp
b24gPSAicmVsYXRpdmUiOworICAgICAgICB9CisKKyAgICAgICAgY3VyT2Zmc2V0ID0gY3VyRWxl
bS5vZmZzZXQoKTsKKyAgICAgICAgY3VyQ1NTVG9wID0galF1ZXJ5LmNzcyggZWxlbSwgInRvcCIg
KTsKKyAgICAgICAgY3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sICJsZWZ0IiApOworICAg
ICAgICBjYWxjdWxhdGVQb3NpdGlvbiA9ICggcG9zaXRpb24gPT09ICJhYnNvbHV0ZSIgfHwgcG9z
aXRpb24gPT09ICJmaXhlZCIgKSAmJgorICAgICAgICAgICAgKCBjdXJDU1NUb3AgKyBjdXJDU1NM
ZWZ0ICkuaW5kZXhPZiggImF1dG8iICkgPiAtMTsKKworICAgICAgICAvLyBOZWVkIHRvIGJlIGFi
bGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlcgorICAgICAgICAvLyB0b3Agb3IgbGVm
dCBpcyBhdXRvIGFuZCBwb3NpdGlvbiBpcyBlaXRoZXIgYWJzb2x1dGUgb3IgZml4ZWQKKyAgICAg
ICAgaWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHsKKyAgICAgICAgICAgIGN1clBvc2l0aW9uID0g
Y3VyRWxlbS5wb3NpdGlvbigpOworICAgICAgICAgICAgY3VyVG9wID0gY3VyUG9zaXRpb24udG9w
OworICAgICAgICAgICAgY3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7CisKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGN1clRvcCA9IHBhcnNlRmxvYXQoIGN1ckNTU1RvcCApIHx8IDA7
CisgICAgICAgICAgICBjdXJMZWZ0ID0gcGFyc2VGbG9hdCggY3VyQ1NTTGVmdCApIHx8IDA7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7
CisKKyAgICAgICAgICAgIC8vIFVzZSBqUXVlcnkuZXh0ZW5kIGhlcmUgdG8gYWxsb3cgbW9kaWZp
Y2F0aW9uIG9mIGNvb3JkaW5hdGVzIGFyZ3VtZW50IChnaC0xODQ4KQorICAgICAgICAgICAgb3B0
aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgalF1ZXJ5LmV4dGVuZCgge30sIGN1ck9mZnNl
dCApICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIG9wdGlvbnMudG9wICE9IG51bGwgKSB7
CisgICAgICAgICAgICBwcm9wcy50b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCAp
ICsgY3VyVG9wOworICAgICAgICB9CisgICAgICAgIGlmICggb3B0aW9ucy5sZWZ0ICE9IG51bGwg
KSB7CisgICAgICAgICAgICBwcm9wcy5sZWZ0ID0gKCBvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQu
bGVmdCApICsgY3VyTGVmdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggInVzaW5nIiBpbiBv
cHRpb25zICkgeworICAgICAgICAgICAgb3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyAp
OworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjdXJFbGVtLmNzcyggcHJvcHMgKTsK
KyAgICAgICAgfQorICAgIH0KK307CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKyAgICBvZmZzZXQ6
IGZ1bmN0aW9uKCBvcHRpb25zICkgeworCisgICAgICAgIC8vIFByZXNlcnZlIGNoYWluaW5nIGZv
ciBzZXR0ZXIKKyAgICAgICAgaWYgKCBhcmd1bWVudHMubGVuZ3RoICkgeworICAgICAgICAgICAg
cmV0dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/CisgICAgICAgICAgICAgICAgdGhpcyA6Cisg
ICAgICAgICAgICAgICAgdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTsKKyAgICAg
ICAgICAgICAgICB9ICk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgZG9jRWxlbSwgd2luLCBy
ZWN0LCBkb2MsCisgICAgICAgICAgICBlbGVtID0gdGhpc1sgMCBdOworCisgICAgICAgIGlmICgg
IWVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBT
dXBwb3J0OiBJRSA8PTExIG9ubHkKKyAgICAgICAgLy8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVu
dFJlY3Qgb24gYQorICAgICAgICAvLyBkaXNjb25uZWN0ZWQgbm9kZSBpbiBJRSB0aHJvd3MgYW4g
ZXJyb3IKKyAgICAgICAgaWYgKCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHsKKyAg
ICAgICAgICAgIHJldHVybiB7IHRvcDogMCwgbGVmdDogMCB9OworICAgICAgICB9CisKKyAgICAg
ICAgcmVjdCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisKKyAgICAgICAgLy8gTWFr
ZSBzdXJlIGVsZW1lbnQgaXMgbm90IGhpZGRlbiAoZGlzcGxheTogbm9uZSkKKyAgICAgICAgaWYg
KCByZWN0LndpZHRoIHx8IHJlY3QuaGVpZ2h0ICkgeworICAgICAgICAgICAgZG9jID0gZWxlbS5v
d25lckRvY3VtZW50OworICAgICAgICAgICAgd2luID0gZ2V0V2luZG93KCBkb2MgKTsKKyAgICAg
ICAgICAgIGRvY0VsZW0gPSBkb2MuZG9jdW1lbnRFbGVtZW50OworCisgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgIHRvcDogcmVjdC50b3AgKyB3aW4ucGFnZVlPZmZzZXQgLSBk
b2NFbGVtLmNsaWVudFRvcCwKKyAgICAgICAgICAgICAgICBsZWZ0OiByZWN0LmxlZnQgKyB3aW4u
cGFnZVhPZmZzZXQgLSBkb2NFbGVtLmNsaWVudExlZnQKKyAgICAgICAgICAgIH07CisgICAgICAg
IH0KKworICAgICAgICAvLyBSZXR1cm4gemVyb3MgZm9yIGRpc2Nvbm5lY3RlZCBhbmQgaGlkZGVu
IGVsZW1lbnRzIChnaC0yMzEwKQorICAgICAgICByZXR1cm4gcmVjdDsKKyAgICB9LAorCisgICAg
cG9zaXRpb246IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoICF0aGlzWyAwIF0gKSB7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB2YXIgb2Zmc2V0UGFyZW50LCBv
ZmZzZXQsCisgICAgICAgICAgICBlbGVtID0gdGhpc1sgMCBdLAorICAgICAgICAgICAgcGFyZW50
T2Zmc2V0ID0geyB0b3A6IDAsIGxlZnQ6IDAgfTsKKworICAgICAgICAvLyBGaXhlZCBlbGVtZW50
cyBhcmUgb2Zmc2V0IGZyb20gd2luZG93IChwYXJlbnRPZmZzZXQgPSB7dG9wOjAsIGxlZnQ6IDB9
LAorICAgICAgICAvLyBiZWNhdXNlIGl0IGlzIGl0cyBvbmx5IG9mZnNldCBwYXJlbnQKKyAgICAg
ICAgaWYgKCBqUXVlcnkuY3NzKCBlbGVtLCAicG9zaXRpb24iICkgPT09ICJmaXhlZCIgKSB7CisK
KyAgICAgICAgICAgIC8vIEFzc3VtZSBnZXRCb3VuZGluZ0NsaWVudFJlY3QgaXMgdGhlcmUgd2hl
biBjb21wdXRlZCBwb3NpdGlvbiBpcyBmaXhlZAorICAgICAgICAgICAgb2Zmc2V0ID0gZWxlbS5n
ZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKworICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAg
ICAvLyBHZXQgKnJlYWwqIG9mZnNldFBhcmVudAorICAgICAgICAgICAgb2Zmc2V0UGFyZW50ID0g
dGhpcy5vZmZzZXRQYXJlbnQoKTsKKworICAgICAgICAgICAgLy8gR2V0IGNvcnJlY3Qgb2Zmc2V0
cworICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTsKKyAgICAgICAgICAgIGlmICgg
IWpRdWVyeS5ub2RlTmFtZSggb2Zmc2V0UGFyZW50WyAwIF0sICJodG1sIiApICkgeworICAgICAg
ICAgICAgICAgIHBhcmVudE9mZnNldCA9IG9mZnNldFBhcmVudC5vZmZzZXQoKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gQWRkIG9mZnNldFBhcmVudCBib3JkZXJzCisgICAgICAg
ICAgICBwYXJlbnRPZmZzZXQgPSB7CisgICAgICAgICAgICAgICAgdG9wOiBwYXJlbnRPZmZzZXQu
dG9wICsgalF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50WyAwIF0sICJib3JkZXJUb3BXaWR0aCIsIHRy
dWUgKSwKKyAgICAgICAgICAgICAgICBsZWZ0OiBwYXJlbnRPZmZzZXQubGVmdCArIGpRdWVyeS5j
c3MoIG9mZnNldFBhcmVudFsgMCBdLCAiYm9yZGVyTGVmdFdpZHRoIiwgdHJ1ZSApCisgICAgICAg
ICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgLy8gU3VidHJhY3QgcGFyZW50IG9mZnNldHMg
YW5kIGVsZW1lbnQgbWFyZ2lucworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgdG9wOiBv
ZmZzZXQudG9wIC0gcGFyZW50T2Zmc2V0LnRvcCAtIGpRdWVyeS5jc3MoIGVsZW0sICJtYXJnaW5U
b3AiLCB0cnVlICksCisgICAgICAgICAgICBsZWZ0OiBvZmZzZXQubGVmdCAtIHBhcmVudE9mZnNl
dC5sZWZ0IC0galF1ZXJ5LmNzcyggZWxlbSwgIm1hcmdpbkxlZnQiLCB0cnVlICkKKyAgICAgICAg
fTsKKyAgICB9LAorCisgICAgLy8gVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gZG9jdW1lbnRFbGVt
ZW50IGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6CisgICAgLy8gMSkgRm9yIHRoZSBlbGVtZW50IGlu
c2lkZSB0aGUgaWZyYW1lIHdpdGhvdXQgb2Zmc2V0UGFyZW50LCB0aGlzIG1ldGhvZCB3aWxsIHJl
dHVybgorICAgIC8vICAgIGRvY3VtZW50RWxlbWVudCBvZiB0aGUgcGFyZW50IHdpbmRvdworICAg
IC8vIDIpIEZvciB0aGUgaGlkZGVuIG9yIGRldGFjaGVkIGVsZW1lbnQKKyAgICAvLyAzKSBGb3Ig
Ym9keSBvciBodG1sIGVsZW1lbnQsIGkuZS4gaW4gY2FzZSBvZiB0aGUgaHRtbCBub2RlIC0gaXQg
d2lsbCByZXR1cm4gaXRzZWxmCisgICAgLy8KKyAgICAvLyBidXQgdGhvc2UgZXhjZXB0aW9ucyB3
ZXJlIG5ldmVyIHByZXNlbnRlZCBhcyBhIHJlYWwgbGlmZSB1c2UtY2FzZXMKKyAgICAvLyBhbmQg
bWlnaHQgYmUgY29uc2lkZXJlZCBhcyBtb3JlIHByZWZlcmFibGUgcmVzdWx0cy4KKyAgICAvLwor
ICAgIC8vIFRoaXMgbG9naWMsIGhvd2V2ZXIsIGlzIG5vdCBndWFyYW50ZWVkIGFuZCBjYW4gY2hh
bmdlIGF0IGFueSBwb2ludCBpbiB0aGUgZnV0dXJlCisgICAgb2Zmc2V0UGFyZW50OiBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
IHZhciBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudDsKKworICAgICAgICAgICAgd2hp
bGUgKCBvZmZzZXRQYXJlbnQgJiYgalF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCAicG9zaXRpb24i
ICkgPT09ICJzdGF0aWMiICkgeworICAgICAgICAgICAgICAgIG9mZnNldFBhcmVudCA9IG9mZnNl
dFBhcmVudC5vZmZzZXRQYXJlbnQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVy
biBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnRFbGVtZW50OworICAgICAgICB9ICk7CisgICAgfQor
fSApOworCisvLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhvZHMKK2pRdWVy
eS5lYWNoKCB7IHNjcm9sbExlZnQ6ICJwYWdlWE9mZnNldCIsIHNjcm9sbFRvcDogInBhZ2VZT2Zm
c2V0IiB9LCBmdW5jdGlvbiggbWV0aG9kLCBwcm9wICkgeworICAgIHZhciB0b3AgPSAicGFnZVlP
ZmZzZXQiID09PSBwcm9wOworCisgICAgalF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2
YWwgKSB7CisgICAgICAgIHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBtZXRo
b2QsIHZhbCApIHsKKyAgICAgICAgICAgIHZhciB3aW4gPSBnZXRXaW5kb3coIGVsZW0gKTsKKwor
ICAgICAgICAgICAgaWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gd2luID8gd2luWyBwcm9wIF0gOiBlbGVtWyBtZXRob2QgXTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKCB3aW4gKSB7CisgICAgICAgICAgICAgICAgd2luLnNjcm9sbFRv
KAorICAgICAgICAgICAgICAgICAgICAhdG9wID8gdmFsIDogd2luLnBhZ2VYT2Zmc2V0LAorICAg
ICAgICAgICAgICAgICAgICB0b3AgPyB2YWwgOiB3aW4ucGFnZVlPZmZzZXQKKyAgICAgICAgICAg
ICAgICApOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVsZW1bIG1l
dGhvZCBdID0gdmFsOworICAgICAgICAgICAgfQorICAgICAgICB9LCBtZXRob2QsIHZhbCwgYXJn
dW1lbnRzLmxlbmd0aCApOworICAgIH07Cit9ICk7CisKKy8vIFN1cHBvcnQ6IFNhZmFyaSA8PTcg
LSA5LjEsIENocm9tZSA8PTM3IC0gNDkKKy8vIEFkZCB0aGUgdG9wL2xlZnQgY3NzSG9va3MgdXNp
bmcgalF1ZXJ5LmZuLnBvc2l0aW9uCisvLyBXZWJraXQgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODQKKy8vIEJsaW5rIGJ1ZzogaHR0cHM6Ly9idWdzLmNo
cm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NTg5MzQ3CisvLyBnZXRDb21w
dXRlZFN0eWxlIHJldHVybnMgcGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQvYm90
dG9tL3JpZ2h0OworLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24g
dGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmUKK2pRdWVyeS5lYWNoKCBb
ICJ0b3AiLCAibGVmdCIgXSwgZnVuY3Rpb24oIGksIHByb3AgKSB7CisgICAgalF1ZXJ5LmNzc0hv
b2tzWyBwcm9wIF0gPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucGl4ZWxQb3NpdGlvbiwKKyAgICAg
ICAgZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkgeworICAgICAgICAgICAgaWYgKCBjb21wdXRl
ZCApIHsKKyAgICAgICAgICAgICAgICBjb21wdXRlZCA9IGN1ckNTUyggZWxlbSwgcHJvcCApOwor
CisgICAgICAgICAgICAgICAgLy8gSWYgY3VyQ1NTIHJldHVybnMgcGVyY2VudGFnZSwgZmFsbGJh
Y2sgdG8gb2Zmc2V0CisgICAgICAgICAgICAgICAgcmV0dXJuIHJudW1ub25weC50ZXN0KCBjb21w
dXRlZCApID8KKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCBlbGVtICkucG9zaXRpb24oKVsg
cHJvcCBdICsgInB4IiA6CisgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgKTsKK30gKTsKKworCisvLyBDcmVhdGUgaW5uZXJIZWlnaHQs
IGlubmVyV2lkdGgsIGhlaWdodCwgd2lkdGgsIG91dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoIG1l
dGhvZHMKK2pRdWVyeS5lYWNoKCB7IEhlaWdodDogImhlaWdodCIsIFdpZHRoOiAid2lkdGgiIH0s
IGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkgeworICAgIGpRdWVyeS5lYWNoKCB7IHBhZGRpbmc6ICJp
bm5lciIgKyBuYW1lLCBjb250ZW50OiB0eXBlLCAiIjogIm91dGVyIiArIG5hbWUgfSwKKyAgICAg
ICAgZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwgZnVuY05hbWUgKSB7CisKKyAgICAgICAgLy8gTWFy
Z2luIGlzIG9ubHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoCisgICAgICAgIGpRdWVyeS5m
blsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4sIHZhbHVlICkgeworICAgICAgICAgICAg
dmFyIGNoYWluYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0cmEgfHwgdHlw
ZW9mIG1hcmdpbiAhPT0gImJvb2xlYW4iICksCisgICAgICAgICAgICAgICAgZXh0cmEgPSBkZWZh
dWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUgfHwgdmFsdWUgPT09IHRydWUgPyAibWFyZ2lu
IiA6ICJib3JkZXIiICk7CisKKyAgICAgICAgICAgIHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0
aW9uKCBlbGVtLCB0eXBlLCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICB2YXIgZG9jOworCisg
ICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHsKKworICAgICAg
ICAgICAgICAgICAgICAvLyAkKCB3aW5kb3cgKS5vdXRlcldpZHRoL0hlaWdodCByZXR1cm4gdy9o
IGluY2x1ZGluZyBzY3JvbGxiYXJzIChnaC0xNzI5KQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZnVuY05hbWUuaW5kZXhPZiggIm91dGVyIiApID09PSAwID8KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW1bICJpbm5lciIgKyBuYW1lIF0gOgorICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbICJjbGllbnQiICsgbmFtZSBdOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEdldCBkb2N1bWVudCB3aWR0aCBvciBo
ZWlnaHQKKyAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7CisgICAg
ICAgICAgICAgICAgICAgIGRvYyA9IGVsZW0uZG9jdW1lbnRFbGVtZW50OworCisgICAgICAgICAg
ICAgICAgICAgIC8vIEVpdGhlciBzY3JvbGxbV2lkdGgvSGVpZ2h0XSBvciBvZmZzZXRbV2lkdGgv
SGVpZ2h0XSBvciBjbGllbnRbV2lkdGgvSGVpZ2h0XSwKKyAgICAgICAgICAgICAgICAgICAgLy8g
d2hpY2hldmVyIGlzIGdyZWF0ZXN0CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1h
eCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uYm9keVsgInNjcm9sbCIgKyBuYW1lIF0s
IGRvY1sgInNjcm9sbCIgKyBuYW1lIF0sCisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmJv
ZHlbICJvZmZzZXQiICsgbmFtZSBdLCBkb2NbICJvZmZzZXQiICsgbmFtZSBdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgZG9jWyAiY2xpZW50IiArIG5hbWUgXQorICAgICAgICAgICAgICAgICAg
ICApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9
PT0gdW5kZWZpbmVkID8KKworICAgICAgICAgICAgICAgICAgICAvLyBHZXQgd2lkdGggb3IgaGVp
Z2h0IG9uIHRoZSBlbGVtZW50LCByZXF1ZXN0aW5nIGJ1dCBub3QgZm9yY2luZyBwYXJzZUZsb2F0
CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUsIGV4dHJhICkgOgor
CisgICAgICAgICAgICAgICAgICAgIC8vIFNldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1l
bnQKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCBlbGVtLCB0eXBlLCB2YWx1ZSwg
ZXh0cmEgKTsKKyAgICAgICAgICAgIH0sIHR5cGUsIGNoYWluYWJsZSA/IG1hcmdpbiA6IHVuZGVm
aW5lZCwgY2hhaW5hYmxlICk7CisgICAgICAgIH07CisgICAgfSApOworfSApOworCisKK2pRdWVy
eS5mbi5leHRlbmQoIHsKKworICAgIGJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZGF0YSwgZm4gKSB7
CisgICAgICAgIHJldHVybiB0aGlzLm9uKCB0eXBlcywgbnVsbCwgZGF0YSwgZm4gKTsKKyAgICB9
LAorICAgIHVuYmluZDogZnVuY3Rpb24oIHR5cGVzLCBmbiApIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMub2ZmKCB0eXBlcywgbnVsbCwgZm4gKTsKKyAgICB9LAorCisgICAgZGVsZWdhdGU6IGZ1bmN0
aW9uKCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkgeworICAgICAgICByZXR1cm4gdGhpcy5v
biggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApOworICAgIH0sCisgICAgdW5kZWxlZ2F0ZTog
ZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZm4gKSB7CisKKyAgICAgICAgLy8gKCBuYW1lc3Bh
Y2UgKSBvciAoIHNlbGVjdG9yLCB0eXBlcyBbLCBmbl0gKQorICAgICAgICByZXR1cm4gYXJndW1l
bnRzLmxlbmd0aCA9PT0gMSA/CisgICAgICAgICAgICB0aGlzLm9mZiggc2VsZWN0b3IsICIqKiIg
KSA6CisgICAgICAgICAgICB0aGlzLm9mZiggdHlwZXMsIHNlbGVjdG9yIHx8ICIqKiIsIGZuICk7
CisgICAgfQorfSApOworCitqUXVlcnkucGFyc2VKU09OID0gSlNPTi5wYXJzZTsKKworCisKKwor
Ly8gUmVnaXN0ZXIgYXMgYSBuYW1lZCBBTUQgbW9kdWxlLCBzaW5jZSBqUXVlcnkgY2FuIGJlIGNv
bmNhdGVuYXRlZCB3aXRoIG90aGVyCisvLyBmaWxlcyB0aGF0IG1heSB1c2UgZGVmaW5lLCBidXQg
bm90IHZpYSBhIHByb3BlciBjb25jYXRlbmF0aW9uIHNjcmlwdCB0aGF0CisvLyB1bmRlcnN0YW5k
cyBhbm9ueW1vdXMgQU1EIG1vZHVsZXMuIEEgbmFtZWQgQU1EIGlzIHNhZmVzdCBhbmQgbW9zdCBy
b2J1c3QKKy8vIHdheSB0byByZWdpc3Rlci4gTG93ZXJjYXNlIGpxdWVyeSBpcyB1c2VkIGJlY2F1
c2UgQU1EIG1vZHVsZSBuYW1lcyBhcmUKKy8vIGRlcml2ZWQgZnJvbSBmaWxlIG5hbWVzLCBhbmQg
alF1ZXJ5IGlzIG5vcm1hbGx5IGRlbGl2ZXJlZCBpbiBhIGxvd2VyY2FzZQorLy8gZmlsZSBuYW1l
LiBEbyB0aGlzIGFmdGVyIGNyZWF0aW5nIHRoZSBnbG9iYWwgc28gdGhhdCBpZiBhbiBBTUQgbW9k
dWxlIHdhbnRzCisvLyB0byBjYWxsIG5vQ29uZmxpY3QgdG8gaGlkZSB0aGlzIHZlcnNpb24gb2Yg
alF1ZXJ5LCBpdCB3aWxsIHdvcmsuCisKKy8vIE5vdGUgdGhhdCBmb3IgbWF4aW11bSBwb3J0YWJp
bGl0eSwgbGlicmFyaWVzIHRoYXQgYXJlIG5vdCBqUXVlcnkgc2hvdWxkCisvLyBkZWNsYXJlIHRo
ZW1zZWx2ZXMgYXMgYW5vbnltb3VzIG1vZHVsZXMsIGFuZCBhdm9pZCBzZXR0aW5nIGEgZ2xvYmFs
IGlmIGFuCisvLyBBTUQgbG9hZGVyIGlzIHByZXNlbnQuIGpRdWVyeSBpcyBhIHNwZWNpYWwgY2Fz
ZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZQorLy8gaHR0cHM6Ly9naXRodWIuY29tL2pyYnVy
a2UvcmVxdWlyZWpzL3dpa2kvVXBkYXRpbmctZXhpc3RpbmctbGlicmFyaWVzI3dpa2ktYW5vbgor
CitpZiAoIHR5cGVvZiBkZWZpbmUgPT09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCApIHsKKyAg
ICBkZWZpbmUoICJqcXVlcnkiLCBbXSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBqUXVl
cnk7CisgICAgfSApOworfQorCisKKworCit2YXIKKworICAgIC8vIE1hcCBvdmVyIGpRdWVyeSBp
biBjYXNlIG9mIG92ZXJ3cml0ZQorICAgIF9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LAorCisgICAg
Ly8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGUKKyAgICBfJCA9IHdpbmRvdy4k
OworCitqUXVlcnkubm9Db25mbGljdCA9IGZ1bmN0aW9uKCBkZWVwICkgeworICAgIGlmICggd2lu
ZG93LiQgPT09IGpRdWVyeSApIHsKKyAgICAgICAgd2luZG93LiQgPSBfJDsKKyAgICB9CisKKyAg
ICBpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkgeworICAgICAgICB3aW5k
b3cualF1ZXJ5ID0gX2pRdWVyeTsKKyAgICB9CisKKyAgICByZXR1cm4galF1ZXJ5OworfTsKKwor
Ly8gRXhwb3NlIGpRdWVyeSBhbmQgJCBpZGVudGlmaWVycywgZXZlbiBpbiBBTUQKKy8vICgjNzEw
MiNjb21tZW50OjEwLCBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9wdWxsLzU1NykK
Ky8vIGFuZCBDb21tb25KUyBmb3IgYnJvd3NlciBlbXVsYXRvcnMgKCMxMzU2NikKK2lmICggIW5v
R2xvYmFsICkgeworICAgIHdpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9IGpRdWVyeTsKK30KKwor
CisKKworCityZXR1cm4galF1ZXJ5OworfSApOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFj
a2JvbmUvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3MgYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9iYWNrYm9uZS9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4LmNzcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xMGUzZDJmNmI3OTNkNDJjYjRlMjBhZWVhNDhhM2I1Y2ViNDg2ZWU1Ci0tLSAvZGV2L251
bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNz
cy9pbmRleC5jc3MKQEAgLTAsMCArMSwzNzAgQEAKK2h0bWwsCitib2R5IHsKKyAgICBtYXJnaW46
IDA7CisgICAgcGFkZGluZzogMDsKK30KKworYnV0dG9uIHsKKyAgICBtYXJnaW46IDA7CisgICAg
cGFkZGluZzogMDsKKyAgICBib3JkZXI6IDA7CisgICAgYmFja2dyb3VuZDogbm9uZTsKKyAgICBm
b250LXNpemU6IDEwMCU7CisgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgIGZvbnQt
ZmFtaWx5OiBpbmhlcml0OworICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OworICAgIGNvbG9yOiBp
bmhlcml0OworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKKyAgICBhcHBlYXJhbmNlOiBu
b25lOworICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAgIC1tb3ot
b3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7Cit9CisKK2JvZHkgeworICAgIGZvbnQ6IDE0
cHggJ0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKKyAgICBs
aW5lLWhlaWdodDogMS40ZW07CisgICAgYmFja2dyb3VuZDogI2Y1ZjVmNTsKKyAgICBjb2xvcjog
IzRkNGQ0ZDsKKyAgICBtaW4td2lkdGg6IDIzMHB4OworICAgIG1heC13aWR0aDogNTUwcHg7Cisg
ICAgbWFyZ2luOiAwIGF1dG87CisgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFz
ZWQ7CisgICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKKyAgICBmb250LXdl
aWdodDogMzAwOworfQorCis6Zm9jdXMgeworICAgIG91dGxpbmU6IDA7Cit9CisKKy5oaWRkZW4g
eworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKy50b2RvYXBwIHsKKyAgICBiYWNrZ3JvdW5kOiAj
ZmZmOworICAgIG1hcmdpbjogMTMwcHggMCA0MHB4IDA7CisgICAgcG9zaXRpb246IHJlbGF0aXZl
OworICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCAwIHJnYmEoMCwgMCwgMCwgMC4yKSwKKyAgICAg
ICAgICAgICAgICAwIDI1cHggNTBweCAwIHJnYmEoMCwgMCwgMCwgMC4xKTsKK30KKworLnRvZG9h
cHAgaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgeworICAgIGZvbnQtc3R5bGU6IGl0
YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGNvbG9yOiAjZTZlNmU2OworfQorCisu
dG9kb2FwcCBpbnB1dDo6LW1vei1wbGFjZWhvbGRlciB7CisgICAgZm9udC1zdHlsZTogaXRhbGlj
OworICAgIGZvbnQtd2VpZ2h0OiAzMDA7CisgICAgY29sb3I6ICNlNmU2ZTY7Cit9CisKKy50b2Rv
YXBwIGlucHV0OjppbnB1dC1wbGFjZWhvbGRlciB7CisgICAgZm9udC1zdHlsZTogaXRhbGljOwor
ICAgIGZvbnQtd2VpZ2h0OiAzMDA7CisgICAgY29sb3I6ICNlNmU2ZTY7Cit9CisKKy50b2RvYXBw
IGgxIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAtMTU1cHg7CisgICAgd2lk
dGg6IDEwMCU7CisgICAgZm9udC1zaXplOiAxMDBweDsKKyAgICBmb250LXdlaWdodDogMTAwOwor
ICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBjb2xvcjogcmdiYSgxNzUsIDQ3LCA0NywgMC4x
NSk7CisgICAgLXdlYmtpdC10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OworICAg
IC1tb3otdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKKyAgICB0ZXh0LXJlbmRl
cmluZzogb3B0aW1pemVMZWdpYmlsaXR5OworfQorCisubmV3LXRvZG8sCisuZWRpdCB7CisgICAg
cG9zaXRpb246IHJlbGF0aXZlOworICAgIG1hcmdpbjogMDsKKyAgICB3aWR0aDogMTAwJTsKKyAg
ICBmb250LXNpemU6IDI0cHg7CisgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CisgICAgZm9udC13
ZWlnaHQ6IGluaGVyaXQ7CisgICAgbGluZS1oZWlnaHQ6IDEuNGVtOworICAgIGJvcmRlcjogMDsK
KyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICBwYWRkaW5nOiA2cHg7CisgICAgYm9yZGVyOiAxcHgg
c29saWQgIzk5OTsKKyAgICBib3gtc2hhZG93OiBpbnNldCAwIC0xcHggNXB4IDAgcmdiYSgwLCAw
LCAwLCAwLjIpOworICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAgLXdlYmtpdC1mb250
LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdy
YXlzY2FsZTsKK30KKworLm5ldy10b2RvIHsKKyAgICBwYWRkaW5nOiAxNnB4IDE2cHggMTZweCA2
MHB4OworICAgIGJvcmRlcjogbm9uZTsKKyAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAu
MDAzKTsKKyAgICBib3gtc2hhZG93OiBpbnNldCAwIC0ycHggMXB4IHJnYmEoMCwwLDAsMC4wMyk7
Cit9CisKKy5tYWluIHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgei1pbmRleDogMjsK
KyAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2U2ZTZlNjsKK30KKworbGFiZWxbZm9yPSd0b2dn
bGUtYWxsJ10geworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKy50b2dnbGUtYWxsIHsKKyAgICBw
b3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAtNTVweDsKKyAgICBsZWZ0OiAtMTJweDsKKyAg
ICB3aWR0aDogNjBweDsKKyAgICBoZWlnaHQ6IDM0cHg7CisgICAgdGV4dC1hbGlnbjogY2VudGVy
OworICAgIGJvcmRlcjogbm9uZTsgLyogTW9iaWxlIFNhZmFyaSAqLworfQorCisudG9nZ2xlLWFs
bDpiZWZvcmUgeworICAgIGNvbnRlbnQ6ICfina8nOworICAgIGZvbnQtc2l6ZTogMjJweDsKKyAg
ICBjb2xvcjogI2U2ZTZlNjsKKyAgICBwYWRkaW5nOiAxMHB4IDI3cHggMTBweCAyN3B4OworfQor
CisudG9nZ2xlLWFsbDpjaGVja2VkOmJlZm9yZSB7CisgICAgY29sb3I6ICM3MzczNzM7Cit9CisK
Ky50b2RvLWxpc3QgeworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOworICAgIGxpc3Qt
c3R5bGU6IG5vbmU7Cit9CisKKy50b2RvLWxpc3QgbGkgeworICAgIHBvc2l0aW9uOiByZWxhdGl2
ZTsKKyAgICBmb250LXNpemU6IDI0cHg7CisgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNl
ZGVkZWQ7Cit9CisKKy50b2RvLWxpc3QgbGk6bGFzdC1jaGlsZCB7CisgICAgYm9yZGVyLWJvdHRv
bTogbm9uZTsKK30KKworLnRvZG8tbGlzdCBsaS5lZGl0aW5nIHsKKyAgICBib3JkZXItYm90dG9t
OiBub25lOworICAgIHBhZGRpbmc6IDA7Cit9CisKKy50b2RvLWxpc3QgbGkuZWRpdGluZyAuZWRp
dCB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgd2lkdGg6IDUwNnB4OworICAgIHBhZGRpbmc6
IDEycHggMTZweDsKKyAgICBtYXJnaW46IDAgMCAwIDQzcHg7Cit9CisKKy50b2RvLWxpc3QgbGku
ZWRpdGluZyAudmlldyB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworLnRvZG8tbGlzdCBsaSAu
dG9nZ2xlIHsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgd2lkdGg6IDQwcHg7CisgICAg
LyogYXV0bywgc2luY2Ugbm9uLVdlYktpdCBicm93c2VycyBkb2Vzbid0IHN1cHBvcnQgaW5wdXQg
c3R5bGluZyAqLworICAgIGhlaWdodDogYXV0bzsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7Cisg
ICAgdG9wOiAwOworICAgIGJvdHRvbTogMDsKKyAgICBtYXJnaW46IGF1dG8gMDsKKyAgICBib3Jk
ZXI6IG5vbmU7IC8qIE1vYmlsZSBTYWZhcmkgKi8KKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5v
bmU7CisgICAgYXBwZWFyYW5jZTogbm9uZTsKK30KKworLnRvZG8tbGlzdCBsaSAudG9nZ2xlOmFm
dGVyIHsKKyAgICBjb250ZW50OiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1s
bnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZp
ZXdCb3g9Ii0xMCAtMTggMTAwIDEzNSI+PGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNTAiIGZp
bGw9Im5vbmUiIHN0cm9rZT0iI2VkZWRlZCIgc3Ryb2tlLXdpZHRoPSIzIi8+PC9zdmc+Jyk7Cit9
CisKKy50b2RvLWxpc3QgbGkgLnRvZ2dsZTpjaGVja2VkOmFmdGVyIHsKKyAgICBjb250ZW50OiB1
cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn
LzIwMDAvc3ZnIiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9Ii0xMCAtMTggMTAwIDEz
NSI+PGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNTAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2Jk
ZGFkNSIgc3Ryb2tlLXdpZHRoPSIzIi8+PHBhdGggZmlsbD0iIzVkYzJhZiIgZD0iTTcyIDI1TDQy
IDcxIDI3IDU2bC00IDQgMjAgMjAgMzQtNTJ6Ii8+PC9zdmc+Jyk7Cit9CisKKy50b2RvLWxpc3Qg
bGkgbGFiZWwgeworICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKKyAgICBwYWRkaW5nOiAxNXB4
IDYwcHggMTVweCAxNXB4OworICAgIG1hcmdpbi1sZWZ0OiA0NXB4OworICAgIGRpc3BsYXk6IGJs
b2NrOworICAgIGxpbmUtaGVpZ2h0OiAxLjI7CisgICAgdHJhbnNpdGlvbjogY29sb3IgMC40czsK
K30KKworLnRvZG8tbGlzdCBsaS5jb21wbGV0ZWQgbGFiZWwgeworICAgIGNvbG9yOiAjZDlkOWQ5
OworICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOworfQorCisudG9kby1saXN0IGxp
IC5kZXN0cm95IHsKKyAgICBkaXNwbGF5OiBub25lOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
KyAgICB0b3A6IDA7CisgICAgcmlnaHQ6IDEwcHg7CisgICAgYm90dG9tOiAwOworICAgIHdpZHRo
OiA0MHB4OworICAgIGhlaWdodDogNDBweDsKKyAgICBtYXJnaW46IGF1dG8gMDsKKyAgICBmb250
LXNpemU6IDMwcHg7CisgICAgY29sb3I6ICNjYzlhOWE7CisgICAgbWFyZ2luLWJvdHRvbTogMTFw
eDsKKyAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzIGVhc2Utb3V0OworfQorCisudG9kby1saXN0
IGxpIC5kZXN0cm95OmhvdmVyIHsKKyAgICBjb2xvcjogI2FmNWI1ZTsKK30KKworLnRvZG8tbGlz
dCBsaSAuZGVzdHJveTphZnRlciB7CisgICAgY29udGVudDogJ8OXJzsKK30KKworLnRvZG8tbGlz
dCBsaTpob3ZlciAuZGVzdHJveSB7CisgICAgZGlzcGxheTogYmxvY2s7Cit9CisKKy50b2RvLWxp
c3QgbGkgLmVkaXQgeworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKy50b2RvLWxpc3QgbGkuZWRp
dGluZzpsYXN0LWNoaWxkIHsKKyAgICBtYXJnaW4tYm90dG9tOiAtMXB4OworfQorCisuZm9vdGVy
IHsKKyAgICBjb2xvcjogIzc3NzsKKyAgICBwYWRkaW5nOiAxMHB4IDE1cHg7CisgICAgaGVpZ2h0
OiAyMHB4OworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBib3JkZXItdG9wOiAxcHggc29s
aWQgI2U2ZTZlNjsKK30KKworLmZvb3RlcjpiZWZvcmUgeworICAgIGNvbnRlbnQ6ICcnOworICAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICByaWdodDogMDsKKyAgICBib3R0b206IDA7CisgICAg
bGVmdDogMDsKKyAgICBoZWlnaHQ6IDUwcHg7CisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgICBi
b3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjIpLAorICAgICAgICAgICAgICAg
IDAgOHB4IDAgLTNweCAjZjZmNmY2LAorICAgICAgICAgICAgICAgIDAgOXB4IDFweCAtM3B4IHJn
YmEoMCwgMCwgMCwgMC4yKSwKKyAgICAgICAgICAgICAgICAwIDE2cHggMCAtNnB4ICNmNmY2ZjYs
CisgICAgICAgICAgICAgICAgMCAxN3B4IDJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKK30K
KworLnRvZG8tY291bnQgeworICAgIGZsb2F0OiBsZWZ0OworICAgIHRleHQtYWxpZ246IGxlZnQ7
Cit9CisKKy50b2RvLWNvdW50IHN0cm9uZyB7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKK30KKwor
LmZpbHRlcnMgeworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOworICAgIGxpc3Qtc3R5
bGU6IG5vbmU7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHJpZ2h0OiAwOworICAgIGxl
ZnQ6IDA7Cit9CisKKy5maWx0ZXJzIGxpIHsKKyAgICBkaXNwbGF5OiBpbmxpbmU7Cit9CisKKy5m
aWx0ZXJzIGxpIGEgeworICAgIGNvbG9yOiBpbmhlcml0OworICAgIG1hcmdpbjogM3B4OworICAg
IHBhZGRpbmc6IDNweCA3cHg7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGJvcmRl
cjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OworICAgIGJvcmRlci1yYWRpdXM6IDNweDsKK30KKwor
LmZpbHRlcnMgbGkgYTpob3ZlciB7CisgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE3NSwgNDcsIDQ3
LCAwLjEpOworfQorCisuZmlsdGVycyBsaSBhLnNlbGVjdGVkIHsKKyAgICBib3JkZXItY29sb3I6
IHJnYmEoMTc1LCA0NywgNDcsIDAuMik7Cit9CisKKy5jbGVhci1jb21wbGV0ZWQsCitodG1sIC5j
bGVhci1jb21wbGV0ZWQ6YWN0aXZlIHsKKyAgICBmbG9hdDogcmlnaHQ7CisgICAgcG9zaXRpb246
IHJlbGF0aXZlOworICAgIGxpbmUtaGVpZ2h0OiAyMHB4OworICAgIHRleHQtZGVjb3JhdGlvbjog
bm9uZTsKKyAgICBjdXJzb3I6IHBvaW50ZXI7Cit9CisKKy5jbGVhci1jb21wbGV0ZWQ6aG92ZXIg
eworICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisuaW5mbyB7CisgICAgbWFy
Z2luOiA2NXB4IGF1dG8gMDsKKyAgICBjb2xvcjogI2JmYmZiZjsKKyAgICBmb250LXNpemU6IDEw
cHg7CisgICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwor
ICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworLmluZm8gcCB7CisgICAgbGluZS1oZWlnaHQ6
IDE7Cit9CisKKy5pbmZvIGEgeworICAgIGNvbG9yOiBpbmhlcml0OworICAgIHRleHQtZGVjb3Jh
dGlvbjogbm9uZTsKKyAgICBmb250LXdlaWdodDogNDAwOworfQorCisuaW5mbyBhOmhvdmVyIHsK
KyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworLyoKKyAgICBIYWNrIHRvIHJl
bW92ZSBiYWNrZ3JvdW5kIGZyb20gTW9iaWxlIFNhZmFyaS4KKyAgICBDYW4ndCB1c2UgaXQgZ2xv
YmFsbHkgc2luY2UgaXQgZGVzdHJveXMgY2hlY2tib3hlcyBpbiBGaXJlZm94CisqLworQG1lZGlh
IHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzowKSB7CisgICAgLnRv
Z2dsZS1hbGwsCisgICAgLnRvZG8tbGlzdCBsaSAudG9nZ2xlIHsKKyAgICAgICAgYmFja2dyb3Vu
ZDogbm9uZTsKKyAgICB9CisKKyAgICAudG9kby1saXN0IGxpIC50b2dnbGUgeworICAgICAgICBo
ZWlnaHQ6IDQwcHg7CisgICAgfQorCisgICAgLnRvZ2dsZS1hbGwgeworICAgICAgICAtd2Via2l0
LXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKKyAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBk
ZWcpOworICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CisgICAgICAgIGFwcGVhcmFu
Y2U6IG5vbmU7CisgICAgfQorfQorCitAbWVkaWEgKG1heC13aWR0aDogNDMwcHgpIHsKKyAgICAu
Zm9vdGVyIHsKKyAgICAgICAgaGVpZ2h0OiA1MHB4OworICAgIH0KKworICAgIC5maWx0ZXJzIHsK
KyAgICAgICAgYm90dG9tOiAxMHB4OworICAgIH0KK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2JhY2tib25lL25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcyBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL2JhY2tib25lL25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40ZDI1ZDNjODRhYzZjNmFlZjI2Yjk2ODNhMmJjMTBjNjFmOTYwYzhmCi0tLSAvZGV2L251
bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvYmFja2JvbmUvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9u
L2Jhc2UuY3NzCkBAIC0wLDAgKzEsMTQxIEBACitociB7CisgICAgbWFyZ2luOiAyMHB4IDA7Cisg
ICAgYm9yZGVyOiAwOworICAgIGJvcmRlci10b3A6IDFweCBkYXNoZWQgI2M1YzVjNTsKKyAgICBi
b3JkZXItYm90dG9tOiAxcHggZGFzaGVkICNmN2Y3Zjc7Cit9CisKKy5sZWFybiBhIHsKKyAgICBm
b250LXdlaWdodDogbm9ybWFsOworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBjb2xv
cjogI2I4M2Y0NTsKK30KKworLmxlYXJuIGE6aG92ZXIgeworICAgIHRleHQtZGVjb3JhdGlvbjog
dW5kZXJsaW5lOworICAgIGNvbG9yOiAjNzg3ZTdlOworfQorCisubGVhcm4gaDMsCisubGVhcm4g
aDQsCisubGVhcm4gaDUgeworICAgIG1hcmdpbjogMTBweCAwOworICAgIGZvbnQtd2VpZ2h0OiA1
MDA7CisgICAgbGluZS1oZWlnaHQ6IDEuMjsKKyAgICBjb2xvcjogIzAwMDsKK30KKworLmxlYXJu
IGgzIHsKKyAgICBmb250LXNpemU6IDI0cHg7Cit9CisKKy5sZWFybiBoNCB7CisgICAgZm9udC1z
aXplOiAxOHB4OworfQorCisubGVhcm4gaDUgeworICAgIG1hcmdpbi1ib3R0b206IDA7CisgICAg
Zm9udC1zaXplOiAxNHB4OworfQorCisubGVhcm4gdWwgeworICAgIHBhZGRpbmc6IDA7CisgICAg
bWFyZ2luOiAwIDAgMzBweCAyNXB4OworfQorCisubGVhcm4gbGkgeworICAgIGxpbmUtaGVpZ2h0
OiAyMHB4OworfQorCisubGVhcm4gcCB7CisgICAgZm9udC1zaXplOiAxNXB4OworICAgIGZvbnQt
d2VpZ2h0OiAzMDA7CisgICAgbGluZS1oZWlnaHQ6IDEuMzsKKyAgICBtYXJnaW4tdG9wOiAwOwor
ICAgIG1hcmdpbi1ib3R0b206IDA7Cit9CisKKyNpc3N1ZS1jb3VudCB7CisgICAgZGlzcGxheTog
bm9uZTsKK30KKworLnF1b3RlIHsKKyAgICBib3JkZXI6IG5vbmU7CisgICAgbWFyZ2luOiAyMHB4
IDAgNjBweCAwOworfQorCisucXVvdGUgcCB7CisgICAgZm9udC1zdHlsZTogaXRhbGljOworfQor
CisucXVvdGUgcDpiZWZvcmUgeworICAgIGNvbnRlbnQ6ICfigJwnOworICAgIGZvbnQtc2l6ZTog
NTBweDsKKyAgICBvcGFjaXR5OiAuMTU7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRv
cDogLTIwcHg7CisgICAgbGVmdDogM3B4OworfQorCisucXVvdGUgcDphZnRlciB7CisgICAgY29u
dGVudDogJ+KAnSc7CisgICAgZm9udC1zaXplOiA1MHB4OworICAgIG9wYWNpdHk6IC4xNTsKKyAg
ICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgYm90dG9tOiAtNDJweDsKKyAgICByaWdodDogM3B4
OworfQorCisucXVvdGUgZm9vdGVyIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgYm90
dG9tOiAtNDBweDsKKyAgICByaWdodDogMDsKK30KKworLnF1b3RlIGZvb3RlciBpbWcgeworICAg
IGJvcmRlci1yYWRpdXM6IDNweDsKK30KKworLnF1b3RlIGZvb3RlciBhIHsKKyAgICBtYXJnaW4t
bGVmdDogNXB4OworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cit9CisKKy5zcGVlY2gtYnVi
YmxlIHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgcGFkZGluZzogMTBweDsKKyAgICBi
YWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIC4wNCk7CisgICAgYm9yZGVyLXJhZGl1czogNXB4Owor
fQorCisuc3BlZWNoLWJ1YmJsZTphZnRlciB7CisgICAgY29udGVudDogJyc7CisgICAgcG9zaXRp
b246IGFic29sdXRlOworICAgIHRvcDogMTAwJTsKKyAgICByaWdodDogMzBweDsKKyAgICBib3Jk
ZXI6IDEzcHggc29saWQgdHJhbnNwYXJlbnQ7CisgICAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgw
LCAwLCAwLCAuMDQpOworfQorCisubGVhcm4tYmFyID4gLmxlYXJuIHsKKyAgICBwb3NpdGlvbjog
YWJzb2x1dGU7CisgICAgd2lkdGg6IDI3MnB4OworICAgIHRvcDogOHB4OworICAgIGxlZnQ6IC0z
MDBweDsKKyAgICBwYWRkaW5nOiAxMHB4OworICAgIGJvcmRlci1yYWRpdXM6IDVweDsKKyAgICBi
YWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIC42KTsKKyAgICB0cmFuc2l0aW9u
LXByb3BlcnR5OiBsZWZ0OworICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDUwMG1zOworfQorCitA
bWVkaWEgKG1pbi13aWR0aDogODk5cHgpIHsKKyAgICAubGVhcm4tYmFyIHsKKyAgICAgICAgd2lk
dGg6IGF1dG87CisgICAgICAgIHBhZGRpbmctbGVmdDogMzAwcHg7CisgICAgfQorCisgICAgLmxl
YXJuLWJhciA+IC5sZWFybiB7CisgICAgICAgIGxlZnQ6IDhweDsKKyAgICB9Cit9CmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFz
ZS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9i
YXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjgxZTAwNmJjNTAyZGRjNGM3NGY0N2JkMTNhODM5MjI3N2Y4MzBk
YjgKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9ub2RlX21vZHVsZXMv
dG9kb212Yy1jb21tb24vYmFzZS5qcwpAQCAtMCwwICsxLDI0OSBAQAorLyogZ2xvYmFsIF8gKi8K
KyhmdW5jdGlvbiAoKSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgLyoganNoaW50IGlnbm9y
ZTpzdGFydCAqLworICAgIC8vIFVuZGVyc2NvcmUncyBUZW1wbGF0ZSBNb2R1bGUKKyAgICAvLyBD
b3VydGVzeSBvZiB1bmRlcnNjb3JlanMub3JnCisgICAgdmFyIF8gPSAoZnVuY3Rpb24gKF8pIHsK
KyAgICAgICAgXy5kZWZhdWx0cyA9IGZ1bmN0aW9uIChvYmplY3QpIHsKKyAgICAgICAgICAgIGlm
ICghb2JqZWN0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGZvciAodmFyIGFyZ3NJbmRleCA9IDEsIGFyZ3NMZW5ndGggPSBhcmd1
bWVudHMubGVuZ3RoOyBhcmdzSW5kZXggPCBhcmdzTGVuZ3RoOyBhcmdzSW5kZXgrKykgeworICAg
ICAgICAgICAgICAgIHZhciBpdGVyYWJsZSA9IGFyZ3VtZW50c1thcmdzSW5kZXhdOworICAgICAg
ICAgICAgICAgIGlmIChpdGVyYWJsZSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBr
ZXkgaW4gaXRlcmFibGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Rba2V5
XSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0W2tleV0gPSBp
dGVyYWJsZVtrZXldOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIG9iamVjdDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEJ5IGRlZmF1bHQsIFVuZGVyc2Nv
cmUgdXNlcyBFUkItc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycywgY2hhbmdlIHRoZQorICAgICAg
ICAvLyBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRlbGlt
aXRlcnMuCisgICAgICAgIF8udGVtcGxhdGVTZXR0aW5ncyA9IHsKKyAgICAgICAgICAgIGV2YWx1
YXRlICAgIDogLzwlKFtcc1xTXSs/KSU+L2csCisgICAgICAgICAgICBpbnRlcnBvbGF0ZSA6IC88
JT0oW1xzXFNdKz8pJT4vZywKKyAgICAgICAgICAgIGVzY2FwZSAgICAgIDogLzwlLShbXHNcU10r
PyklPi9nCisgICAgICAgIH07CisKKyAgICAgICAgLy8gV2hlbiBjdXN0b21pemluZyBgdGVtcGxh
dGVTZXR0aW5nc2AsIGlmIHlvdSBkb24ndCB3YW50IHRvIGRlZmluZSBhbgorICAgICAgICAvLyBp
bnRlcnBvbGF0aW9uLCBldmFsdWF0aW9uIG9yIGVzY2FwaW5nIHJlZ2V4LCB3ZSBuZWVkIG9uZSB0
aGF0IGlzCisgICAgICAgIC8vIGd1YXJhbnRlZWQgbm90IHRvIG1hdGNoLgorICAgICAgICB2YXIg
bm9NYXRjaCA9IC8oLileLzsKKworICAgICAgICAvLyBDZXJ0YWluIGNoYXJhY3RlcnMgbmVlZCB0
byBiZSBlc2NhcGVkIHNvIHRoYXQgdGhleSBjYW4gYmUgcHV0IGludG8gYQorICAgICAgICAvLyBz
dHJpbmcgbGl0ZXJhbC4KKyAgICAgICAgdmFyIGVzY2FwZXMgPSB7CisgICAgICAgICAgICAiJyI6
ICAgICAgIiciLAorICAgICAgICAgICAgJ1xcJzogICAgICdcXCcsCisgICAgICAgICAgICAnXHIn
OiAgICAgJ3InLAorICAgICAgICAgICAgJ1xuJzogICAgICduJywKKyAgICAgICAgICAgICdcdCc6
ICAgICAndCcsCisgICAgICAgICAgICAnXHUyMDI4JzogJ3UyMDI4JywKKyAgICAgICAgICAgICdc
dTIwMjknOiAndTIwMjknCisgICAgICAgIH07CisKKyAgICAgICAgdmFyIGVzY2FwZXIgPSAvXFx8
J3xccnxcbnxcdHxcdTIwMjh8XHUyMDI5L2c7CisKKyAgICAgICAgLy8gSmF2YVNjcmlwdCBtaWNy
by10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi4KKyAg
ICAgICAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRl
cnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLAorICAgICAgICAvLyBhbmQgY29ycmVjdGx5IGVzY2Fw
ZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS4KKyAgICAgICAgXy50ZW1wbGF0ZSA9
IGZ1bmN0aW9uKHRleHQsIGRhdGEsIHNldHRpbmdzKSB7CisgICAgICAgICAgICB2YXIgcmVuZGVy
OworICAgICAgICAgICAgc2V0dGluZ3MgPSBfLmRlZmF1bHRzKHt9LCBzZXR0aW5ncywgXy50ZW1w
bGF0ZVNldHRpbmdzKTsKKworICAgICAgICAgICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8g
b25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uCisgICAgICAgICAgICB2YXIg
bWF0Y2hlciA9IG5ldyBSZWdFeHAoWworICAgICAgICAgICAgICAgIChzZXR0aW5ncy5lc2NhcGUg
fHwgbm9NYXRjaCkuc291cmNlLAorICAgICAgICAgICAgICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0
ZSB8fCBub01hdGNoKS5zb3VyY2UsCisgICAgICAgICAgICAgICAgKHNldHRpbmdzLmV2YWx1YXRl
IHx8IG5vTWF0Y2gpLnNvdXJjZQorICAgICAgICAgICAgXS5qb2luKCd8JykgKyAnfCQnLCAnZycp
OworCisgICAgICAgICAgICAvLyBDb21waWxlIHRoZSB0ZW1wbGF0ZSBzb3VyY2UsIGVzY2FwaW5n
IHN0cmluZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5LgorICAgICAgICAgICAgdmFyIGluZGV4ID0g
MDsKKyAgICAgICAgICAgIHZhciBzb3VyY2UgPSAiX19wKz0nIjsKKyAgICAgICAgICAgIHRleHQu
cmVwbGFjZShtYXRjaGVyLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZh
bHVhdGUsIG9mZnNldCkgeworICAgICAgICAgICAgICAgIHNvdXJjZSArPSB0ZXh0LnNsaWNlKGlu
ZGV4LCBvZmZzZXQpCisgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGVzY2FwZXIsIGZ1bmN0
aW9uKG1hdGNoKSB7IHJldHVybiAnXFwnICsgZXNjYXBlc1ttYXRjaF07IH0pOworCisgICAgICAg
ICAgICAgICAgaWYgKGVzY2FwZSkgeworICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gIicr
XG4oKF9fdD0oIiArIGVzY2FwZSArICIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcbiciOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaW50ZXJwb2xhdGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIgKyBpbnRlcnBvbGF0ZSAr
ICIpKT09bnVsbD8nJzpfX3QpK1xuJyI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmIChldmFsdWF0ZSkgeworICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gIic7XG4i
ICsgZXZhbHVhdGUgKyAiXG5fX3ArPSciOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0aDsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbWF0Y2g7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHNvdXJjZSArPSAiJztcbiI7
CisKKyAgICAgICAgICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2Ug
ZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuCisgICAgICAgICAgICBpZiAoIXNldHRpbmdzLnZh
cmlhYmxlKSBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcbicgKyBzb3VyY2UgKyAnfVxuJzsKKwor
ICAgICAgICAgICAgc291cmNlID0gInZhciBfX3QsX19wPScnLF9faj1BcnJheS5wcm90b3R5cGUu
am9pbiwiICsKKyAgICAgICAgICAgICAgICAicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxs
KGFyZ3VtZW50cywnJyk7fTtcbiIgKworICAgICAgICAgICAgICAgIHNvdXJjZSArICJyZXR1cm4g
X19wO1xuIjsKKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICByZW5kZXIgPSBu
ZXcgRnVuY3Rpb24oc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaicsICdfJywgc291cmNlKTsKKyAg
ICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICBlLnNvdXJjZSA9IHNvdXJj
ZTsKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoZGF0YSkgcmV0dXJuIHJlbmRlcihkYXRhLCBfKTsKKyAgICAgICAgICAgIHZhciB0ZW1w
bGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyLmNh
bGwodGhpcywgZGF0YSwgXyk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICAvLyBQcm92
aWRlIHRoZSBjb21waWxlZCBmdW5jdGlvbiBzb3VyY2UgYXMgYSBjb252ZW5pZW5jZSBmb3IgcHJl
Y29tcGlsYXRpb24uCisgICAgICAgICAgICB0ZW1wbGF0ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyAr
IChzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJykgKyAnKXtcbicgKyBzb3VyY2UgKyAnfSc7CisK
KyAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZTsKKyAgICAgICAgfTsKKworICAgICAgICByZXR1
cm4gXzsKKyAgICB9KSh7fSk7CisKKyAgICBpZiAobG9jYXRpb24uaG9zdG5hbWUgPT09ICd0b2Rv
bXZjLmNvbScpIHsKKyAgICAgICAgKGZ1bmN0aW9uKGkscyxvLGcscixhLG0pe2lbJ0dvb2dsZUFu
YWx5dGljc09iamVjdCddPXI7aVtyXT1pW3JdfHxmdW5jdGlvbigpeworICAgICAgICAoaVtyXS5x
PWlbcl0ucXx8W10pLnB1c2goYXJndW1lbnRzKX0saVtyXS5sPTEqbmV3IERhdGUoKTthPXMuY3Jl
YXRlRWxlbWVudChvKSwKKyAgICAgICAgbT1zLmdldEVsZW1lbnRzQnlUYWdOYW1lKG8pWzBdO2Eu
YXN5bmM9MTthLnNyYz1nO20ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxtKQorICAgICAgICB9
KSh3aW5kb3csZG9jdW1lbnQsJ3NjcmlwdCcsJ2h0dHBzOi8vd3d3Lmdvb2dsZS1hbmFseXRpY3Mu
Y29tL2FuYWx5dGljcy5qcycsJ2dhJyk7CisgICAgICAgIGdhKCdjcmVhdGUnLCAnVUEtMzEwODEw
NjItMScsICdhdXRvJyk7CisgICAgICAgIGdhKCdzZW5kJywgJ3BhZ2V2aWV3Jyk7CisgICAgfQor
ICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovCisKKyAgICBmdW5jdGlvbiByZWRpcmVjdCgpIHsK
KyAgICAgICAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lID09PSAndGFzdGVqcy5naXRodWIuaW8nKSB7
CisgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gbG9jYXRpb24uaHJlZi5yZXBsYWNlKCd0YXN0
ZWpzLmdpdGh1Yi5pby90b2RvbXZjJywgJ3RvZG9tdmMuY29tJyk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmdW5jdGlvbiBmaW5kUm9vdCgpIHsKKyAgICAgICAgdmFyIGJhc2UgPSBsb2NhdGlv
bi5ocmVmLmluZGV4T2YoJ2V4YW1wbGVzLycpOworICAgICAgICByZXR1cm4gbG9jYXRpb24uaHJl
Zi5zdWJzdHIoMCwgYmFzZSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZ2V0RmlsZShmaWxlLCBj
YWxsYmFjaykgeworICAgICAgICBpZiAoIWxvY2F0aW9uLmhvc3QpIHsKKyAgICAgICAgICAgIHJl
dHVybiBjb25zb2xlLmluZm8oJ01pc3MgdGhlIGluZm8gYmFyPyBSdW4gVG9kb01WQyBmcm9tIGEg
c2VydmVyIHRvIGF2b2lkIGEgY3Jvc3Mtb3JpZ2luIGVycm9yLicpOworICAgICAgICB9CisKKyAg
ICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworCisgICAgICAgIHhoci5vcGVu
KCdHRVQnLCBmaW5kUm9vdCgpICsgZmlsZSwgdHJ1ZSk7CisgICAgICAgIHhoci5zZW5kKCk7CisK
KyAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICh4aHIu
c3RhdHVzID09PSAyMDAgJiYgY2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayh4
aHIucmVzcG9uc2VUZXh0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBMZWFybihsZWFybkpTT04sIGNvbmZpZykgeworICAgICAgICBpZiAoISh0aGlz
IGluc3RhbmNlb2YgTGVhcm4pKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IExlYXJuKGxlYXJu
SlNPTiwgY29uZmlnKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciB0ZW1wbGF0ZSwgZnJhbWV3
b3JrOworCisgICAgICAgIGlmICh0eXBlb2YgbGVhcm5KU09OICE9PSAnb2JqZWN0JykgeworICAg
ICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBsZWFybkpTT04gPSBKU09OLnBhcnNlKGxl
YXJuSlNPTik7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbmZpZykgewor
ICAgICAgICAgICAgdGVtcGxhdGUgPSBjb25maWcudGVtcGxhdGU7CisgICAgICAgICAgICBmcmFt
ZXdvcmsgPSBjb25maWcuZnJhbWV3b3JrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF0ZW1w
bGF0ZSAmJiBsZWFybkpTT04udGVtcGxhdGVzKSB7CisgICAgICAgICAgICB0ZW1wbGF0ZSA9IGxl
YXJuSlNPTi50ZW1wbGF0ZXMudG9kb212YzsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZnJh
bWV3b3JrICYmIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWZyYW1ld29ya10nKSkgewor
ICAgICAgICAgICAgZnJhbWV3b3JrID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZnJh
bWV3b3JrXScpLmRhdGFzZXQuZnJhbWV3b3JrOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy50
ZW1wbGF0ZSA9IHRlbXBsYXRlOworCisgICAgICAgIGlmIChsZWFybkpTT04uYmFja2VuZCkgewor
ICAgICAgICAgICAgdGhpcy5mcmFtZXdvcmtKU09OID0gbGVhcm5KU09OLmJhY2tlbmQ7CisgICAg
ICAgICAgICB0aGlzLmZyYW1ld29ya0pTT04uaXNzdWVMYWJlbCA9IGZyYW1ld29yazsKKyAgICAg
ICAgICAgIHRoaXMuYXBwZW5kKHsKKyAgICAgICAgICAgICAgICBiYWNrZW5kOiB0cnVlCisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChsZWFybkpTT05bZnJhbWV3b3JrXSkgewor
ICAgICAgICAgICAgdGhpcy5mcmFtZXdvcmtKU09OID0gbGVhcm5KU09OW2ZyYW1ld29ya107Cisg
ICAgICAgICAgICB0aGlzLmZyYW1ld29ya0pTT04uaXNzdWVMYWJlbCA9IGZyYW1ld29yazsKKyAg
ICAgICAgICAgIHRoaXMuYXBwZW5kKCk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLmZldGNo
SXNzdWVDb3VudCgpOworICAgIH0KKworICAgIExlYXJuLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5j
dGlvbiAob3B0cykgeworICAgICAgICB2YXIgYXNpZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdhc2lkZScpOworICAgICAgICBhc2lkZS5pbm5lckhUTUwgPSBfLnRlbXBsYXRlKHRoaXMudGVt
cGxhdGUsIHRoaXMuZnJhbWV3b3JrSlNPTik7CisgICAgICAgIGFzaWRlLmNsYXNzTmFtZSA9ICds
ZWFybic7CisKKyAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5iYWNrZW5kKSB7CisgICAgICAgICAg
ICAvLyBSZW1vdmUgZGVtbyBsaW5rCisgICAgICAgICAgICB2YXIgc291cmNlTGlua3MgPSBhc2lk
ZS5xdWVyeVNlbGVjdG9yKCcuc291cmNlLWxpbmtzJyk7CisgICAgICAgICAgICB2YXIgaGVhZGlu
ZyA9IHNvdXJjZUxpbmtzLmZpcnN0RWxlbWVudENoaWxkOworICAgICAgICAgICAgdmFyIHNvdXJj
ZUxpbmsgPSBzb3VyY2VMaW5rcy5sYXN0RWxlbWVudENoaWxkOworICAgICAgICAgICAgLy8gQ29y
cmVjdCBsaW5rIHBhdGgKKyAgICAgICAgICAgIHZhciBocmVmID0gc291cmNlTGluay5nZXRBdHRy
aWJ1dGUoJ2hyZWYnKTsKKyAgICAgICAgICAgIHNvdXJjZUxpbmsuc2V0QXR0cmlidXRlKCdocmVm
JywgaHJlZi5zdWJzdHIoaHJlZi5sYXN0SW5kZXhPZignaHR0cCcpKSk7CisgICAgICAgICAgICBz
b3VyY2VMaW5rcy5pbm5lckhUTUwgPSBoZWFkaW5nLm91dGVySFRNTCArIHNvdXJjZUxpbmsub3V0
ZXJIVE1MOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTG9jYWxpemUgZGVtbyBs
aW5rcworICAgICAgICAgICAgdmFyIGRlbW9MaW5rcyA9IGFzaWRlLnF1ZXJ5U2VsZWN0b3JBbGwo
Jy5kZW1vLWxpbmsnKTsKKyAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwo
ZGVtb0xpbmtzLCBmdW5jdGlvbiAoZGVtb0xpbmspIHsKKyAgICAgICAgICAgICAgICBpZiAoZGVt
b0xpbmsuZ2V0QXR0cmlidXRlKCdocmVmJykuc3Vic3RyKDAsIDQpICE9PSAnaHR0cCcpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZGVtb0xpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgZmluZFJvb3Qo
KSArIGRlbW9MaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NO
YW1lID0gKGRvY3VtZW50LmJvZHkuY2xhc3NOYW1lICsgJyBsZWFybi1iYXInKS50cmltKCk7Cisg
ICAgICAgIGRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRIVE1MKCdhZnRlckJlZ2luJywgYXNp
ZGUub3V0ZXJIVE1MKTsKKyAgICB9OworCisgICAgTGVhcm4ucHJvdG90eXBlLmZldGNoSXNzdWVD
b3VudCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGlzc3VlTGluayA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdpc3N1ZS1jb3VudC1saW5rJyk7CisgICAgICAgIGlmIChpc3N1ZUxpbmsp
IHsKKyAgICAgICAgICAgIHZhciB1cmwgPSBpc3N1ZUxpbmsuaHJlZi5yZXBsYWNlKCdodHRwczov
L2dpdGh1Yi5jb20nLCAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcycpOworICAgICAgICAg
ICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgICAgICAgICAgeGhyLm9wZW4o
J0dFVCcsIHVybCwgdHJ1ZSk7CisgICAgICAgICAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKGUp
IHsKKyAgICAgICAgICAgICAgICB2YXIgcGFyc2VkUmVzcG9uc2UgPSBKU09OLnBhcnNlKGUudGFy
Z2V0LnJlc3BvbnNlVGV4dCk7CisgICAgICAgICAgICAgICAgaWYgKHBhcnNlZFJlc3BvbnNlIGlu
c3RhbmNlb2YgQXJyYXkpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50ID0gcGFyc2Vk
UmVzcG9uc2UubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgIT09IDApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlzc3VlTGluay5pbm5lckhUTUwgPSAnVGhpcyBhcHAg
aGFzICcgKyBjb3VudCArICcgb3BlbiBpc3N1ZXMnOworICAgICAgICAgICAgICAgICAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lzc3VlLWNvdW50Jykuc3R5bGUuZGlzcGxheSA9ICdp
bmxpbmUnOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIHhoci5zZW5kKCk7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgcmVkaXJlY3QoKTsKKyAgICBnZXRGaWxlKCdsZWFybi5qc29uJywgTGVhcm4pOworfSkoKTsK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL25vZGVfbW9kdWxlcy91bmRlcnNjb3Jl
L3VuZGVyc2NvcmUuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9ub2RlX21vZHVsZXMvdW5kZXJz
Y29yZS91bmRlcnNjb3JlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIyOTMzMmY5NDViODU5Y2VhMDA3NWJiNjll
OGJkNWMxYzExM2YwNWMKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9u
b2RlX21vZHVsZXMvdW5kZXJzY29yZS91bmRlcnNjb3JlLmpzCkBAIC0wLDAgKzEsMTU0OCBAQAor
Ly8gICAgIFVuZGVyc2NvcmUuanMgMS44LjMKKy8vICAgICBodHRwOi8vdW5kZXJzY29yZWpzLm9y
ZworLy8gICAgIChjKSAyMDA5LTIwMTUgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFu
ZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnMKKy8vICAgICBVbmRlcnNjb3JlIG1h
eSBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgorCisoZnVuY3Rp
b24oKSB7CisKKyAgLy8gQmFzZWxpbmUgc2V0dXAKKyAgLy8gLS0tLS0tLS0tLS0tLS0KKworICAv
LyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCBpbiB0aGUgYnJvd3Nlciwgb3Ig
YGV4cG9ydHNgIG9uIHRoZSBzZXJ2ZXIuCisgIHZhciByb290ID0gdGhpczsKKworICAvLyBTYXZl
IHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgYF9gIHZhcmlhYmxlLgorICB2YXIgcHJldmlvdXNV
bmRlcnNjb3JlID0gcm9vdC5fOworCisgIC8vIFNhdmUgYnl0ZXMgaW4gdGhlIG1pbmlmaWVkIChi
dXQgbm90IGd6aXBwZWQpIHZlcnNpb246CisgIHZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90
eXBlLCBPYmpQcm90byA9IE9iamVjdC5wcm90b3R5cGUsIEZ1bmNQcm90byA9IEZ1bmN0aW9uLnBy
b3RvdHlwZTsKKworICAvLyBDcmVhdGUgcXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3Bl
ZWQgYWNjZXNzIHRvIGNvcmUgcHJvdG90eXBlcy4KKyAgdmFyCisgICAgcHVzaCAgICAgICAgICAg
ICA9IEFycmF5UHJvdG8ucHVzaCwKKyAgICBzbGljZSAgICAgICAgICAgID0gQXJyYXlQcm90by5z
bGljZSwKKyAgICB0b1N0cmluZyAgICAgICAgID0gT2JqUHJvdG8udG9TdHJpbmcsCisgICAgaGFz
T3duUHJvcGVydHkgICA9IE9ialByb3RvLmhhc093blByb3BlcnR5OworCisgIC8vIEFsbCAqKkVD
TUFTY3JpcHQgNSoqIG5hdGl2ZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB3ZSBob3Bl
IHRvIHVzZQorICAvLyBhcmUgZGVjbGFyZWQgaGVyZS4KKyAgdmFyCisgICAgbmF0aXZlSXNBcnJh
eSAgICAgID0gQXJyYXkuaXNBcnJheSwKKyAgICBuYXRpdmVLZXlzICAgICAgICAgPSBPYmplY3Qu
a2V5cywKKyAgICBuYXRpdmVCaW5kICAgICAgICAgPSBGdW5jUHJvdG8uYmluZCwKKyAgICBuYXRp
dmVDcmVhdGUgICAgICAgPSBPYmplY3QuY3JlYXRlOworCisgIC8vIE5ha2VkIGZ1bmN0aW9uIHJl
ZmVyZW5jZSBmb3Igc3Vycm9nYXRlLXByb3RvdHlwZS1zd2FwcGluZy4KKyAgdmFyIEN0b3IgPSBm
dW5jdGlvbigpe307CisKKyAgLy8gQ3JlYXRlIGEgc2FmZSByZWZlcmVuY2UgdG8gdGhlIFVuZGVy
c2NvcmUgb2JqZWN0IGZvciB1c2UgYmVsb3cuCisgIHZhciBfID0gZnVuY3Rpb24ob2JqKSB7Cisg
ICAgaWYgKG9iaiBpbnN0YW5jZW9mIF8pIHJldHVybiBvYmo7CisgICAgaWYgKCEodGhpcyBpbnN0
YW5jZW9mIF8pKSByZXR1cm4gbmV3IF8ob2JqKTsKKyAgICB0aGlzLl93cmFwcGVkID0gb2JqOwor
ICB9OworCisgIC8vIEV4cG9ydCB0aGUgVW5kZXJzY29yZSBvYmplY3QgZm9yICoqTm9kZS5qcyoq
LCB3aXRoCisgIC8vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGZvciB0aGUgb2xkIGByZXF1aXJl
KClgIEFQSS4gSWYgd2UncmUgaW4KKyAgLy8gdGhlIGJyb3dzZXIsIGFkZCBgX2AgYXMgYSBnbG9i
YWwgb2JqZWN0LgorICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7CisgICAg
aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7Cisg
ICAgICBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBfOworICAgIH0KKyAgICBleHBvcnRzLl8g
PSBfOworICB9IGVsc2UgeworICAgIHJvb3QuXyA9IF87CisgIH0KKworICAvLyBDdXJyZW50IHZl
cnNpb24uCisgIF8uVkVSU0lPTiA9ICcxLjguMyc7CisKKyAgLy8gSW50ZXJuYWwgZnVuY3Rpb24g
dGhhdCByZXR1cm5zIGFuIGVmZmljaWVudCAoZm9yIGN1cnJlbnQgZW5naW5lcykgdmVyc2lvbgor
ICAvLyBvZiB0aGUgcGFzc2VkLWluIGNhbGxiYWNrLCB0byBiZSByZXBlYXRlZGx5IGFwcGxpZWQg
aW4gb3RoZXIgVW5kZXJzY29yZQorICAvLyBmdW5jdGlvbnMuCisgIHZhciBvcHRpbWl6ZUNiID0g
ZnVuY3Rpb24oZnVuYywgY29udGV4dCwgYXJnQ291bnQpIHsKKyAgICBpZiAoY29udGV4dCA9PT0g
dm9pZCAwKSByZXR1cm4gZnVuYzsKKyAgICBzd2l0Y2ggKGFyZ0NvdW50ID09IG51bGwgPyAzIDog
YXJnQ291bnQpIHsKKyAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7CisgICAg
ICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUpOworICAgICAgfTsKKyAgICAgIGNh
c2UgMjogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikgeworICAgICAgICByZXR1cm4gZnVu
Yy5jYWxsKGNvbnRleHQsIHZhbHVlLCBvdGhlcik7CisgICAgICB9OworICAgICAgY2FzZSAzOiBy
ZXR1cm4gZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7CisgICAgICAgIHJldHVy
biBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTsKKyAgICAgIH07
CisgICAgICBjYXNlIDQ6IHJldHVybiBmdW5jdGlvbihhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4
LCBjb2xsZWN0aW9uKSB7CisgICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgYWNjdW11
bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7CisgICAgICB9OworICAgIH0KKyAgICBy
ZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gZnVuYy5hcHBseShjb250ZXh0LCBhcmd1
bWVudHMpOworICAgIH07CisgIH07CisKKyAgLy8gQSBtb3N0bHktaW50ZXJuYWwgZnVuY3Rpb24g
dG8gZ2VuZXJhdGUgY2FsbGJhY2tzIHRoYXQgY2FuIGJlIGFwcGxpZWQKKyAgLy8gdG8gZWFjaCBl
bGVtZW50IGluIGEgY29sbGVjdGlvbiwgcmV0dXJuaW5nIHRoZSBkZXNpcmVkIHJlc3VsdCDigJQg
ZWl0aGVyCisgIC8vIGlkZW50aXR5LCBhbiBhcmJpdHJhcnkgY2FsbGJhY2ssIGEgcHJvcGVydHkg
bWF0Y2hlciwgb3IgYSBwcm9wZXJ0eSBhY2Nlc3Nvci4KKyAgdmFyIGNiID0gZnVuY3Rpb24odmFs
dWUsIGNvbnRleHQsIGFyZ0NvdW50KSB7CisgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBf
LmlkZW50aXR5OworICAgIGlmIChfLmlzRnVuY3Rpb24odmFsdWUpKSByZXR1cm4gb3B0aW1pemVD
Yih2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpOworICAgIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkg
cmV0dXJuIF8ubWF0Y2hlcih2YWx1ZSk7CisgICAgcmV0dXJuIF8ucHJvcGVydHkodmFsdWUpOwor
ICB9OworICBfLml0ZXJhdGVlID0gZnVuY3Rpb24odmFsdWUsIGNvbnRleHQpIHsKKyAgICByZXR1
cm4gY2IodmFsdWUsIGNvbnRleHQsIEluZmluaXR5KTsKKyAgfTsKKworICAvLyBBbiBpbnRlcm5h
bCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYXNzaWduZXIgZnVuY3Rpb25zLgorICB2YXIgY3JlYXRl
QXNzaWduZXIgPSBmdW5jdGlvbihrZXlzRnVuYywgdW5kZWZpbmVkT25seSkgeworICAgIHJldHVy
biBmdW5jdGlvbihvYmopIHsKKyAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOwor
ICAgICAgaWYgKGxlbmd0aCA8IDIgfHwgb2JqID09IG51bGwpIHJldHVybiBvYmo7CisgICAgICBm
b3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgIHZh
ciBzb3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdLAorICAgICAgICAgICAga2V5cyA9IGtleXNGdW5j
KHNvdXJjZSksCisgICAgICAgICAgICBsID0ga2V5cy5sZW5ndGg7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbDsgaSsrKSB7CisgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07CisgICAg
ICAgICAgaWYgKCF1bmRlZmluZWRPbmx5IHx8IG9ialtrZXldID09PSB2b2lkIDApIG9ialtrZXld
ID0gc291cmNlW2tleV07CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiBvYmo7Cisg
ICAgfTsKKyAgfTsKKworICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSBu
ZXcgb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSBhbm90aGVyLgorICB2YXIgYmFzZUNyZWF0ZSA9
IGZ1bmN0aW9uKHByb3RvdHlwZSkgeworICAgIGlmICghXy5pc09iamVjdChwcm90b3R5cGUpKSBy
ZXR1cm4ge307CisgICAgaWYgKG5hdGl2ZUNyZWF0ZSkgcmV0dXJuIG5hdGl2ZUNyZWF0ZShwcm90
b3R5cGUpOworICAgIEN0b3IucHJvdG90eXBlID0gcHJvdG90eXBlOworICAgIHZhciByZXN1bHQg
PSBuZXcgQ3RvcjsKKyAgICBDdG9yLnByb3RvdHlwZSA9IG51bGw7CisgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgfTsKKworICB2YXIgcHJvcGVydHkgPSBmdW5jdGlvbihrZXkpIHsKKyAgICByZXR1cm4g
ZnVuY3Rpb24ob2JqKSB7CisgICAgICByZXR1cm4gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpb
a2V5XTsKKyAgICB9OworICB9OworCisgIC8vIEhlbHBlciBmb3IgY29sbGVjdGlvbiBtZXRob2Rz
IHRvIGRldGVybWluZSB3aGV0aGVyIGEgY29sbGVjdGlvbgorICAvLyBzaG91bGQgYmUgaXRlcmF0
ZWQgYXMgYW4gYXJyYXkgb3IgYXMgYW4gb2JqZWN0CisgIC8vIFJlbGF0ZWQ6IGh0dHA6Ly9wZW9w
bGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLXRvbGVuZ3RoCisg
IC8vIEF2b2lkcyBhIHZlcnkgbmFzdHkgaU9TIDggSklUIGJ1ZyBvbiBBUk0tNjQuICMyMDk0Cisg
IHZhciBNQVhfQVJSQVlfSU5ERVggPSBNYXRoLnBvdygyLCA1MykgLSAxOworICB2YXIgZ2V0TGVu
Z3RoID0gcHJvcGVydHkoJ2xlbmd0aCcpOworICB2YXIgaXNBcnJheUxpa2UgPSBmdW5jdGlvbihj
b2xsZWN0aW9uKSB7CisgICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChjb2xsZWN0aW9uKTsKKyAg
ICByZXR1cm4gdHlwZW9mIGxlbmd0aCA9PSAnbnVtYmVyJyAmJiBsZW5ndGggPj0gMCAmJiBsZW5n
dGggPD0gTUFYX0FSUkFZX0lOREVYOworICB9OworCisgIC8vIENvbGxlY3Rpb24gRnVuY3Rpb25z
CisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgLy8gVGhlIGNvcm5lcnN0b25lLCBhbiBg
ZWFjaGAgaW1wbGVtZW50YXRpb24sIGFrYSBgZm9yRWFjaGAuCisgIC8vIEhhbmRsZXMgcmF3IG9i
amVjdHMgaW4gYWRkaXRpb24gdG8gYXJyYXktbGlrZXMuIFRyZWF0cyBhbGwKKyAgLy8gc3BhcnNl
IGFycmF5LWxpa2VzIGFzIGlmIHRoZXkgd2VyZSBkZW5zZS4KKyAgXy5lYWNoID0gXy5mb3JFYWNo
ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkgeworICAgIGl0ZXJhdGVlID0gb3B0
aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCk7CisgICAgdmFyIGksIGxlbmd0aDsKKyAgICBpZiAo
aXNBcnJheUxpa2Uob2JqKSkgeworICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0
aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIGl0ZXJhdGVlKG9ialtpXSwgaSwgb2JqKTsK
KyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTsKKyAg
ICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgaXRlcmF0ZWUob2JqW2tleXNbaV1dLCBrZXlzW2ldLCBvYmopOworICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gb2JqOworICB9OworCisgIC8vIFJldHVybiB0aGUgcmVzdWx0cyBv
ZiBhcHBseWluZyB0aGUgaXRlcmF0ZWUgdG8gZWFjaCBlbGVtZW50LgorICBfLm1hcCA9IF8uY29s
bGVjdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHsKKyAgICBpdGVyYXRlZSA9
IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTsKKyAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmop
ICYmIF8ua2V5cyhvYmopLAorICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aCwK
KyAgICAgICAgcmVzdWx0cyA9IEFycmF5KGxlbmd0aCk7CisgICAgZm9yICh2YXIgaW5kZXggPSAw
OyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgeworICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlz
ID8ga2V5c1tpbmRleF0gOiBpbmRleDsKKyAgICAgIHJlc3VsdHNbaW5kZXhdID0gaXRlcmF0ZWUo
b2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopOworICAgIH0KKyAgICByZXR1cm4gcmVz
dWx0czsKKyAgfTsKKworICAvLyBDcmVhdGUgYSByZWR1Y2luZyBmdW5jdGlvbiBpdGVyYXRpbmcg
bGVmdCBvciByaWdodC4KKyAgZnVuY3Rpb24gY3JlYXRlUmVkdWNlKGRpcikgeworICAgIC8vIE9w
dGltaXplZCBpdGVyYXRvciBmdW5jdGlvbiBhcyB1c2luZyBhcmd1bWVudHMubGVuZ3RoCisgICAg
Ly8gaW4gdGhlIG1haW4gZnVuY3Rpb24gd2lsbCBkZW9wdGltaXplIHRoZSwgc2VlICMxOTkxLgor
ICAgIGZ1bmN0aW9uIGl0ZXJhdG9yKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGtleXMsIGluZGV4LCBs
ZW5ndGgpIHsKKyAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRl
eCArPSBkaXIpIHsKKyAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0g
OiBpbmRleDsKKyAgICAgICAgbWVtbyA9IGl0ZXJhdGVlKG1lbW8sIG9ialtjdXJyZW50S2V5XSwg
Y3VycmVudEtleSwgb2JqKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBtZW1vOworICAgIH0KKwor
ICAgIHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBtZW1vLCBjb250ZXh0KSB7CisgICAg
ICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDQpOworICAgICAgdmFy
IGtleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBfLmtleXMob2JqKSwKKyAgICAgICAgICBsZW5n
dGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aCwKKyAgICAgICAgICBpbmRleCA9IGRpciA+IDAgPyAw
IDogbGVuZ3RoIC0gMTsKKyAgICAgIC8vIERldGVybWluZSB0aGUgaW5pdGlhbCB2YWx1ZSBpZiBu
b25lIGlzIHByb3ZpZGVkLgorICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7CisgICAg
ICAgIG1lbW8gPSBvYmpba2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXhdOworICAgICAgICBpbmRl
eCArPSBkaXI7CisgICAgICB9CisgICAgICByZXR1cm4gaXRlcmF0b3Iob2JqLCBpdGVyYXRlZSwg
bWVtbywga2V5cywgaW5kZXgsIGxlbmd0aCk7CisgICAgfTsKKyAgfQorCisgIC8vICoqUmVkdWNl
KiogYnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFrYSBg
aW5qZWN0YCwKKyAgLy8gb3IgYGZvbGRsYC4KKyAgXy5yZWR1Y2UgPSBfLmZvbGRsID0gXy5pbmpl
Y3QgPSBjcmVhdGVSZWR1Y2UoMSk7CisKKyAgLy8gVGhlIHJpZ2h0LWFzc29jaWF0aXZlIHZlcnNp
b24gb2YgcmVkdWNlLCBhbHNvIGtub3duIGFzIGBmb2xkcmAuCisgIF8ucmVkdWNlUmlnaHQgPSBf
LmZvbGRyID0gY3JlYXRlUmVkdWNlKC0xKTsKKworICAvLyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVl
IHdoaWNoIHBhc3NlcyBhIHRydXRoIHRlc3QuIEFsaWFzZWQgYXMgYGRldGVjdGAuCisgIF8uZmlu
ZCA9IF8uZGV0ZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHsKKyAgICB2
YXIga2V5OworICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7CisgICAgICBrZXkgPSBfLmZpbmRJ
bmRleChvYmosIHByZWRpY2F0ZSwgY29udGV4dCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGtleSA9
IF8uZmluZEtleShvYmosIHByZWRpY2F0ZSwgY29udGV4dCk7CisgICAgfQorICAgIGlmIChrZXkg
IT09IHZvaWQgMCAmJiBrZXkgIT09IC0xKSByZXR1cm4gb2JqW2tleV07CisgIH07CisKKyAgLy8g
UmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBwYXNzIGEgdHJ1dGggdGVzdC4KKyAgLy8gQWxp
YXNlZCBhcyBgc2VsZWN0YC4KKyAgXy5maWx0ZXIgPSBfLnNlbGVjdCA9IGZ1bmN0aW9uKG9iaiwg
cHJlZGljYXRlLCBjb250ZXh0KSB7CisgICAgdmFyIHJlc3VsdHMgPSBbXTsKKyAgICBwcmVkaWNh
dGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpOworICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZh
bHVlLCBpbmRleCwgbGlzdCkgeworICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGxp
c3QpKSByZXN1bHRzLnB1c2godmFsdWUpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHRzOwor
ICB9OworCisgIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRl
c3QgZmFpbHMuCisgIF8ucmVqZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQp
IHsKKyAgICByZXR1cm4gXy5maWx0ZXIob2JqLCBfLm5lZ2F0ZShjYihwcmVkaWNhdGUpKSwgY29u
dGV4dCk7CisgIH07CisKKyAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgYWxsIG9mIHRoZSBlbGVtZW50
cyBtYXRjaCBhIHRydXRoIHRlc3QuCisgIC8vIEFsaWFzZWQgYXMgYGFsbGAuCisgIF8uZXZlcnkg
PSBfLmFsbCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7CisgICAgcHJlZGlj
YXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTsKKyAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlr
ZShvYmopICYmIF8ua2V5cyhvYmopLAorICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxl
bmd0aDsKKyAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7
CisgICAgICB2YXIgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4OworICAg
ICAgaWYgKCFwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9OworCisgIC8vIERldGVybWlu
ZSBpZiBhdCBsZWFzdCBvbmUgZWxlbWVudCBpbiB0aGUgb2JqZWN0IG1hdGNoZXMgYSB0cnV0aCB0
ZXN0LgorICAvLyBBbGlhc2VkIGFzIGBhbnlgLgorICBfLnNvbWUgPSBfLmFueSA9IGZ1bmN0aW9u
KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7CisgICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRl
LCBjb250ZXh0KTsKKyAgICB2YXIga2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIF8ua2V5cyhv
YmopLAorICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aDsKKyAgICBmb3IgKHZh
ciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICB2YXIgY3VycmVu
dEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4OworICAgICAgaWYgKHByZWRpY2F0ZShv
YmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhcnJheSBvciBv
YmplY3QgY29udGFpbnMgYSBnaXZlbiBpdGVtICh1c2luZyBgPT09YCkuCisgIC8vIEFsaWFzZWQg
YXMgYGluY2x1ZGVzYCBhbmQgYGluY2x1ZGVgLgorICBfLmNvbnRhaW5zID0gXy5pbmNsdWRlcyA9
IF8uaW5jbHVkZSA9IGZ1bmN0aW9uKG9iaiwgaXRlbSwgZnJvbUluZGV4LCBndWFyZCkgeworICAg
IGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gXy52YWx1ZXMob2JqKTsKKyAgICBpZiAodHlw
ZW9mIGZyb21JbmRleCAhPSAnbnVtYmVyJyB8fCBndWFyZCkgZnJvbUluZGV4ID0gMDsKKyAgICBy
ZXR1cm4gXy5pbmRleE9mKG9iaiwgaXRlbSwgZnJvbUluZGV4KSA+PSAwOworICB9OworCisgIC8v
IEludm9rZSBhIG1ldGhvZCAod2l0aCBhcmd1bWVudHMpIG9uIGV2ZXJ5IGl0ZW0gaW4gYSBjb2xs
ZWN0aW9uLgorICBfLmludm9rZSA9IGZ1bmN0aW9uKG9iaiwgbWV0aG9kKSB7CisgICAgdmFyIGFy
Z3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7CisgICAgdmFyIGlzRnVuYyA9IF8uaXNGdW5j
dGlvbihtZXRob2QpOworICAgIHJldHVybiBfLm1hcChvYmosIGZ1bmN0aW9uKHZhbHVlKSB7Cisg
ICAgICB2YXIgZnVuYyA9IGlzRnVuYyA/IG1ldGhvZCA6IHZhbHVlW21ldGhvZF07CisgICAgICBy
ZXR1cm4gZnVuYyA9PSBudWxsID8gZnVuYyA6IGZ1bmMuYXBwbHkodmFsdWUsIGFyZ3MpOworICAg
IH0pOworICB9OworCisgIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNh
c2Ugb2YgYG1hcGA6IGZldGNoaW5nIGEgcHJvcGVydHkuCisgIF8ucGx1Y2sgPSBmdW5jdGlvbihv
YmosIGtleSkgeworICAgIHJldHVybiBfLm1hcChvYmosIF8ucHJvcGVydHkoa2V5KSk7CisgIH07
CisKKyAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmls
dGVyYDogc2VsZWN0aW5nIG9ubHkgb2JqZWN0cworICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBr
ZXk6dmFsdWVgIHBhaXJzLgorICBfLndoZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykgeworICAg
IHJldHVybiBfLmZpbHRlcihvYmosIF8ubWF0Y2hlcihhdHRycykpOworICB9OworCisgIC8vIENv
bnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbmRgOiBnZXR0aW5n
IHRoZSBmaXJzdCBvYmplY3QKKyAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBw
YWlycy4KKyAgXy5maW5kV2hlcmUgPSBmdW5jdGlvbihvYmosIGF0dHJzKSB7CisgICAgcmV0dXJu
IF8uZmluZChvYmosIF8ubWF0Y2hlcihhdHRycykpOworICB9OworCisgIC8vIFJldHVybiB0aGUg
bWF4aW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS4KKyAgXy5tYXgg
PSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7CisgICAgdmFyIHJlc3VsdCA9IC1J
bmZpbml0eSwgbGFzdENvbXB1dGVkID0gLUluZmluaXR5LAorICAgICAgICB2YWx1ZSwgY29tcHV0
ZWQ7CisgICAgaWYgKGl0ZXJhdGVlID09IG51bGwgJiYgb2JqICE9IG51bGwpIHsKKyAgICAgIG9i
aiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiBfLnZhbHVlcyhvYmopOworICAgICAgZm9yICh2
YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAg
ICB2YWx1ZSA9IG9ialtpXTsKKyAgICAgICAgaWYgKHZhbHVlID4gcmVzdWx0KSB7CisgICAgICAg
ICAgcmVzdWx0ID0gdmFsdWU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7CisgICAgICBfLmVhY2gob2JqLCBm
dW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHsKKyAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRl
ZSh2YWx1ZSwgaW5kZXgsIGxpc3QpOworICAgICAgICBpZiAoY29tcHV0ZWQgPiBsYXN0Q29tcHV0
ZWQgfHwgY29tcHV0ZWQgPT09IC1JbmZpbml0eSAmJiByZXN1bHQgPT09IC1JbmZpbml0eSkgewor
ICAgICAgICAgIHJlc3VsdCA9IHZhbHVlOworICAgICAgICAgIGxhc3RDb21wdXRlZCA9IGNvbXB1
dGVkOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyAg
fTsKKworICAvLyBSZXR1cm4gdGhlIG1pbmltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBj
b21wdXRhdGlvbikuCisgIF8ubWluID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkg
eworICAgIHZhciByZXN1bHQgPSBJbmZpbml0eSwgbGFzdENvbXB1dGVkID0gSW5maW5pdHksCisg
ICAgICAgIHZhbHVlLCBjb21wdXRlZDsKKyAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCAmJiBvYmog
IT0gbnVsbCkgeworICAgICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IF8udmFsdWVz
KG9iaik7CisgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxl
bmd0aDsgaSsrKSB7CisgICAgICAgIHZhbHVlID0gb2JqW2ldOworICAgICAgICBpZiAodmFsdWUg
PCByZXN1bHQpIHsKKyAgICAgICAgICByZXN1bHQgPSB2YWx1ZTsKKyAgICAgICAgfQorICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTsK
KyAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkgeworICAgICAg
ICBjb21wdXRlZCA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdCk7CisgICAgICAgIGlmIChj
b21wdXRlZCA8IGxhc3RDb21wdXRlZCB8fCBjb21wdXRlZCA9PT0gSW5maW5pdHkgJiYgcmVzdWx0
ID09PSBJbmZpbml0eSkgeworICAgICAgICAgIHJlc3VsdCA9IHZhbHVlOworICAgICAgICAgIGxh
c3RDb21wdXRlZCA9IGNvbXB1dGVkOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisgICAg
cmV0dXJuIHJlc3VsdDsKKyAgfTsKKworICAvLyBTaHVmZmxlIGEgY29sbGVjdGlvbiwgdXNpbmcg
dGhlIG1vZGVybiB2ZXJzaW9uIG9mIHRoZQorICAvLyBbRmlzaGVyLVlhdGVzIHNodWZmbGVdKGh0
dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmlzaGVy4oCTWWF0ZXNfc2h1ZmZsZSkuCisgIF8u
c2h1ZmZsZSA9IGZ1bmN0aW9uKG9iaikgeworICAgIHZhciBzZXQgPSBpc0FycmF5TGlrZShvYmop
ID8gb2JqIDogXy52YWx1ZXMob2JqKTsKKyAgICB2YXIgbGVuZ3RoID0gc2V0Lmxlbmd0aDsKKyAg
ICB2YXIgc2h1ZmZsZWQgPSBBcnJheShsZW5ndGgpOworICAgIGZvciAodmFyIGluZGV4ID0gMCwg
cmFuZDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHsKKyAgICAgIHJhbmQgPSBfLnJhbmRvbSgw
LCBpbmRleCk7CisgICAgICBpZiAocmFuZCAhPT0gaW5kZXgpIHNodWZmbGVkW2luZGV4XSA9IHNo
dWZmbGVkW3JhbmRdOworICAgICAgc2h1ZmZsZWRbcmFuZF0gPSBzZXRbaW5kZXhdOworICAgIH0K
KyAgICByZXR1cm4gc2h1ZmZsZWQ7CisgIH07CisKKyAgLy8gU2FtcGxlICoqbioqIHJhbmRvbSB2
YWx1ZXMgZnJvbSBhIGNvbGxlY3Rpb24uCisgIC8vIElmICoqbioqIGlzIG5vdCBzcGVjaWZpZWQs
IHJldHVybnMgYSBzaW5nbGUgcmFuZG9tIGVsZW1lbnQuCisgIC8vIFRoZSBpbnRlcm5hbCBgZ3Vh
cmRgIGFyZ3VtZW50IGFsbG93cyBpdCB0byB3b3JrIHdpdGggYG1hcGAuCisgIF8uc2FtcGxlID0g
ZnVuY3Rpb24ob2JqLCBuLCBndWFyZCkgeworICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHsK
KyAgICAgIGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gXy52YWx1ZXMob2JqKTsKKyAgICAg
IHJldHVybiBvYmpbXy5yYW5kb20ob2JqLmxlbmd0aCAtIDEpXTsKKyAgICB9CisgICAgcmV0dXJu
IF8uc2h1ZmZsZShvYmopLnNsaWNlKDAsIE1hdGgubWF4KDAsIG4pKTsKKyAgfTsKKworICAvLyBT
b3J0IHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24gcHJvZHVjZWQgYnkgYW4gaXRl
cmF0ZWUuCisgIF8uc29ydEJ5ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkgewor
ICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpOworICAgIHJldHVybiBfLnBsdWNr
KF8ubWFwKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7CisgICAgICByZXR1cm4g
eworICAgICAgICB2YWx1ZTogdmFsdWUsCisgICAgICAgIGluZGV4OiBpbmRleCwKKyAgICAgICAg
Y3JpdGVyaWE6IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdCkKKyAgICAgIH07CisgICAgfSku
c29ydChmdW5jdGlvbihsZWZ0LCByaWdodCkgeworICAgICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlh
OworICAgICAgdmFyIGIgPSByaWdodC5jcml0ZXJpYTsKKyAgICAgIGlmIChhICE9PSBiKSB7Cisg
ICAgICAgIGlmIChhID4gYiB8fCBhID09PSB2b2lkIDApIHJldHVybiAxOworICAgICAgICBpZiAo
YSA8IGIgfHwgYiA9PT0gdm9pZCAwKSByZXR1cm4gLTE7CisgICAgICB9CisgICAgICByZXR1cm4g
bGVmdC5pbmRleCAtIHJpZ2h0LmluZGV4OworICAgIH0pLCAndmFsdWUnKTsKKyAgfTsKKworICAv
LyBBbiBpbnRlcm5hbCBmdW5jdGlvbiB1c2VkIGZvciBhZ2dyZWdhdGUgImdyb3VwIGJ5IiBvcGVy
YXRpb25zLgorICB2YXIgZ3JvdXAgPSBmdW5jdGlvbihiZWhhdmlvcikgeworICAgIHJldHVybiBm
dW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7CisgICAgICB2YXIgcmVzdWx0ID0ge307
CisgICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTsKKyAgICAgIF8uZWFjaChv
YmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgeworICAgICAgICB2YXIga2V5ID0gaXRlcmF0ZWUo
dmFsdWUsIGluZGV4LCBvYmopOworICAgICAgICBiZWhhdmlvcihyZXN1bHQsIHZhbHVlLCBrZXkp
OworICAgICAgfSk7CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisgIH07CisKKyAgLy8g
R3JvdXBzIHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24uIFBhc3MgZWl0aGVyIGEg
c3RyaW5nIGF0dHJpYnV0ZQorICAvLyB0byBncm91cCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJl
dHVybnMgdGhlIGNyaXRlcmlvbi4KKyAgXy5ncm91cEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0
LCB2YWx1ZSwga2V5KSB7CisgICAgaWYgKF8uaGFzKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tleV0u
cHVzaCh2YWx1ZSk7IGVsc2UgcmVzdWx0W2tleV0gPSBbdmFsdWVdOworICB9KTsKKworICAvLyBJ
bmRleGVzIHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24sIHNpbWlsYXIgdG8gYGdy
b3VwQnlgLCBidXQgZm9yCisgIC8vIHdoZW4geW91IGtub3cgdGhhdCB5b3VyIGluZGV4IHZhbHVl
cyB3aWxsIGJlIHVuaXF1ZS4KKyAgXy5pbmRleEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2
YWx1ZSwga2V5KSB7CisgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTsKKyAgfSk7CisKKyAgLy8gQ291
bnRzIGluc3RhbmNlcyBvZiBhbiBvYmplY3QgdGhhdCBncm91cCBieSBhIGNlcnRhaW4gY3JpdGVy
aW9uLiBQYXNzCisgIC8vIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGUgdG8gY291bnQgYnksIG9y
IGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZQorICAvLyBjcml0ZXJpb24uCisgIF8uY291bnRC
eSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkgeworICAgIGlmIChfLmhhcyhy
ZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldKys7IGVsc2UgcmVzdWx0W2tleV0gPSAxOworICB9KTsK
KworICAvLyBTYWZlbHkgY3JlYXRlIGEgcmVhbCwgbGl2ZSBhcnJheSBmcm9tIGFueXRoaW5nIGl0
ZXJhYmxlLgorICBfLnRvQXJyYXkgPSBmdW5jdGlvbihvYmopIHsKKyAgICBpZiAoIW9iaikgcmV0
dXJuIFtdOworICAgIGlmIChfLmlzQXJyYXkob2JqKSkgcmV0dXJuIHNsaWNlLmNhbGwob2JqKTsK
KyAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSkgcmV0dXJuIF8ubWFwKG9iaiwgXy5pZGVudGl0eSk7
CisgICAgcmV0dXJuIF8udmFsdWVzKG9iaik7CisgIH07CisKKyAgLy8gUmV0dXJuIHRoZSBudW1i
ZXIgb2YgZWxlbWVudHMgaW4gYW4gb2JqZWN0LgorICBfLnNpemUgPSBmdW5jdGlvbihvYmopIHsK
KyAgICBpZiAob2JqID09IG51bGwpIHJldHVybiAwOworICAgIHJldHVybiBpc0FycmF5TGlrZShv
YmopID8gb2JqLmxlbmd0aCA6IF8ua2V5cyhvYmopLmxlbmd0aDsKKyAgfTsKKworICAvLyBTcGxp
dCBhIGNvbGxlY3Rpb24gaW50byB0d28gYXJyYXlzOiBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIHNh
dGlzZnkgdGhlIGdpdmVuCisgIC8vIHByZWRpY2F0ZSwgYW5kIG9uZSB3aG9zZSBlbGVtZW50cyBh
bGwgZG8gbm90IHNhdGlzZnkgdGhlIHByZWRpY2F0ZS4KKyAgXy5wYXJ0aXRpb24gPSBmdW5jdGlv
bihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkgeworICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0
ZSwgY29udGV4dCk7CisgICAgdmFyIHBhc3MgPSBbXSwgZmFpbCA9IFtdOworICAgIF8uZWFjaChv
YmosIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iaikgeworICAgICAgKHByZWRpY2F0ZSh2YWx1ZSwg
a2V5LCBvYmopID8gcGFzcyA6IGZhaWwpLnB1c2godmFsdWUpOworICAgIH0pOworICAgIHJldHVy
biBbcGFzcywgZmFpbF07CisgIH07CisKKyAgLy8gQXJyYXkgRnVuY3Rpb25zCisgIC8vIC0tLS0t
LS0tLS0tLS0tLQorCisgIC8vIEdldCB0aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFz
c2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgZmlyc3QgTgorICAvLyB2YWx1ZXMgaW4gdGhlIGFy
cmF5LiBBbGlhc2VkIGFzIGBoZWFkYCBhbmQgYHRha2VgLiBUaGUgKipndWFyZCoqIGNoZWNrCisg
IC8vIGFsbG93cyBpdCB0byB3b3JrIHdpdGggYF8ubWFwYC4KKyAgXy5maXJzdCA9IF8uaGVhZCA9
IF8udGFrZSA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkgeworICAgIGlmIChhcnJheSA9PSBu
dWxsKSByZXR1cm4gdm9pZCAwOworICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBh
cnJheVswXTsKKyAgICByZXR1cm4gXy5pbml0aWFsKGFycmF5LCBhcnJheS5sZW5ndGggLSBuKTsK
KyAgfTsKKworICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBsYXN0IGVudHJ5IG9mIHRo
ZSBhcnJheS4gRXNwZWNpYWxseSB1c2VmdWwgb24KKyAgLy8gdGhlIGFyZ3VtZW50cyBvYmplY3Qu
IFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gYWxsIHRoZSB2YWx1ZXMgaW4KKyAgLy8gdGhlIGFy
cmF5LCBleGNsdWRpbmcgdGhlIGxhc3QgTi4KKyAgXy5pbml0aWFsID0gZnVuY3Rpb24oYXJyYXks
IG4sIGd1YXJkKSB7CisgICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIDAsIE1hdGgubWF4KDAs
IGFycmF5Lmxlbmd0aCAtIChuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbikpKTsKKyAgfTsKKwor
ICAvLyBHZXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxs
IHJldHVybiB0aGUgbGFzdCBOCisgIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuCisgIF8ubGFzdCA9
IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkgeworICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1
cm4gdm9pZCAwOworICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVthcnJh
eS5sZW5ndGggLSAxXTsKKyAgICByZXR1cm4gXy5yZXN0KGFycmF5LCBNYXRoLm1heCgwLCBhcnJh
eS5sZW5ndGggLSBuKSk7CisgIH07CisKKyAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUg
Zmlyc3QgZW50cnkgb2YgdGhlIGFycmF5LiBBbGlhc2VkIGFzIGB0YWlsYCBhbmQgYGRyb3BgLgor
ICAvLyBFc3BlY2lhbGx5IHVzZWZ1bCBvbiB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyBh
biAqKm4qKiB3aWxsIHJldHVybgorICAvLyB0aGUgcmVzdCBOIHZhbHVlcyBpbiB0aGUgYXJyYXku
CisgIF8ucmVzdCA9IF8udGFpbCA9IF8uZHJvcCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkg
eworICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCBuID09IG51bGwgfHwgZ3VhcmQgPyAxIDog
bik7CisgIH07CisKKyAgLy8gVHJpbSBvdXQgYWxsIGZhbHN5IHZhbHVlcyBmcm9tIGFuIGFycmF5
LgorICBfLmNvbXBhY3QgPSBmdW5jdGlvbihhcnJheSkgeworICAgIHJldHVybiBfLmZpbHRlcihh
cnJheSwgXy5pZGVudGl0eSk7CisgIH07CisKKyAgLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24g
b2YgYSByZWN1cnNpdmUgYGZsYXR0ZW5gIGZ1bmN0aW9uLgorICB2YXIgZmxhdHRlbiA9IGZ1bmN0
aW9uKGlucHV0LCBzaGFsbG93LCBzdHJpY3QsIHN0YXJ0SW5kZXgpIHsKKyAgICB2YXIgb3V0cHV0
ID0gW10sIGlkeCA9IDA7CisgICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXggfHwgMCwgbGVuZ3Ro
ID0gZ2V0TGVuZ3RoKGlucHV0KTsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICB2YXIgdmFsdWUg
PSBpbnB1dFtpXTsKKyAgICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiYgKF8uaXNBcnJheSh2
YWx1ZSkgfHwgXy5pc0FyZ3VtZW50cyh2YWx1ZSkpKSB7CisgICAgICAgIC8vZmxhdHRlbiBjdXJy
ZW50IGxldmVsIG9mIGFycmF5IG9yIGFyZ3VtZW50cyBvYmplY3QKKyAgICAgICAgaWYgKCFzaGFs
bG93KSB2YWx1ZSA9IGZsYXR0ZW4odmFsdWUsIHNoYWxsb3csIHN0cmljdCk7CisgICAgICAgIHZh
ciBqID0gMCwgbGVuID0gdmFsdWUubGVuZ3RoOworICAgICAgICBvdXRwdXQubGVuZ3RoICs9IGxl
bjsKKyAgICAgICAgd2hpbGUgKGogPCBsZW4pIHsKKyAgICAgICAgICBvdXRwdXRbaWR4KytdID0g
dmFsdWVbaisrXTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIGlmICghc3RyaWN0KSB7CisgICAg
ICAgIG91dHB1dFtpZHgrK10gPSB2YWx1ZTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG91
dHB1dDsKKyAgfTsKKworICAvLyBGbGF0dGVuIG91dCBhbiBhcnJheSwgZWl0aGVyIHJlY3Vyc2l2
ZWx5IChieSBkZWZhdWx0KSwgb3IganVzdCBvbmUgbGV2ZWwuCisgIF8uZmxhdHRlbiA9IGZ1bmN0
aW9uKGFycmF5LCBzaGFsbG93KSB7CisgICAgcmV0dXJuIGZsYXR0ZW4oYXJyYXksIHNoYWxsb3cs
IGZhbHNlKTsKKyAgfTsKKworICAvLyBSZXR1cm4gYSB2ZXJzaW9uIG9mIHRoZSBhcnJheSB0aGF0
IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNwZWNpZmllZCB2YWx1ZShzKS4KKyAgXy53aXRob3V0ID0g
ZnVuY3Rpb24oYXJyYXkpIHsKKyAgICByZXR1cm4gXy5kaWZmZXJlbmNlKGFycmF5LCBzbGljZS5j
YWxsKGFyZ3VtZW50cywgMSkpOworICB9OworCisgIC8vIFByb2R1Y2UgYSBkdXBsaWNhdGUtZnJl
ZSB2ZXJzaW9uIG9mIHRoZSBhcnJheS4gSWYgdGhlIGFycmF5IGhhcyBhbHJlYWR5CisgIC8vIGJl
ZW4gc29ydGVkLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIHVzaW5nIGEgZmFzdGVyIGFsZ29yaXRo
bS4KKyAgLy8gQWxpYXNlZCBhcyBgdW5pcXVlYC4KKyAgXy51bmlxID0gXy51bmlxdWUgPSBmdW5j
dGlvbihhcnJheSwgaXNTb3J0ZWQsIGl0ZXJhdGVlLCBjb250ZXh0KSB7CisgICAgaWYgKCFfLmlz
Qm9vbGVhbihpc1NvcnRlZCkpIHsKKyAgICAgIGNvbnRleHQgPSBpdGVyYXRlZTsKKyAgICAgIGl0
ZXJhdGVlID0gaXNTb3J0ZWQ7CisgICAgICBpc1NvcnRlZCA9IGZhbHNlOworICAgIH0KKyAgICBp
ZiAoaXRlcmF0ZWUgIT0gbnVsbCkgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7Cisg
ICAgdmFyIHJlc3VsdCA9IFtdOworICAgIHZhciBzZWVuID0gW107CisgICAgZm9yICh2YXIgaSA9
IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAg
dmFyIHZhbHVlID0gYXJyYXlbaV0sCisgICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0
ZXJhdGVlKHZhbHVlLCBpLCBhcnJheSkgOiB2YWx1ZTsKKyAgICAgIGlmIChpc1NvcnRlZCkgewor
ICAgICAgICBpZiAoIWkgfHwgc2VlbiAhPT0gY29tcHV0ZWQpIHJlc3VsdC5wdXNoKHZhbHVlKTsK
KyAgICAgICAgc2VlbiA9IGNvbXB1dGVkOworICAgICAgfSBlbHNlIGlmIChpdGVyYXRlZSkgewor
ICAgICAgICBpZiAoIV8uY29udGFpbnMoc2VlbiwgY29tcHV0ZWQpKSB7CisgICAgICAgICAgc2Vl
bi5wdXNoKGNvbXB1dGVkKTsKKyAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7CisgICAgICAg
IH0KKyAgICAgIH0gZWxzZSBpZiAoIV8uY29udGFpbnMocmVzdWx0LCB2YWx1ZSkpIHsKKyAgICAg
ICAgcmVzdWx0LnB1c2godmFsdWUpOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworICB9OworCisgIC8vIFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgdW5pb246
IGVhY2ggZGlzdGluY3QgZWxlbWVudCBmcm9tIGFsbCBvZgorICAvLyB0aGUgcGFzc2VkLWluIGFy
cmF5cy4KKyAgXy51bmlvbiA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBfLnVuaXEoZmxhdHRl
bihhcmd1bWVudHMsIHRydWUsIHRydWUpKTsKKyAgfTsKKworICAvLyBQcm9kdWNlIGFuIGFycmF5
IHRoYXQgY29udGFpbnMgZXZlcnkgaXRlbSBzaGFyZWQgYmV0d2VlbiBhbGwgdGhlCisgIC8vIHBh
c3NlZC1pbiBhcnJheXMuCisgIF8uaW50ZXJzZWN0aW9uID0gZnVuY3Rpb24oYXJyYXkpIHsKKyAg
ICB2YXIgcmVzdWx0ID0gW107CisgICAgdmFyIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3Ro
OworICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVu
Z3RoOyBpKyspIHsKKyAgICAgIHZhciBpdGVtID0gYXJyYXlbaV07CisgICAgICBpZiAoXy5jb250
YWlucyhyZXN1bHQsIGl0ZW0pKSBjb250aW51ZTsKKyAgICAgIGZvciAodmFyIGogPSAxOyBqIDwg
YXJnc0xlbmd0aDsgaisrKSB7CisgICAgICAgIGlmICghXy5jb250YWlucyhhcmd1bWVudHNbal0s
IGl0ZW0pKSBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmIChqID09PSBhcmdzTGVuZ3RoKSByZXN1
bHQucHVzaChpdGVtKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfTsKKworICAvLyBU
YWtlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gb25lIGFycmF5IGFuZCBhIG51bWJlciBvZiBvdGhl
ciBhcnJheXMuCisgIC8vIE9ubHkgdGhlIGVsZW1lbnRzIHByZXNlbnQgaW4ganVzdCB0aGUgZmly
c3QgYXJyYXkgd2lsbCByZW1haW4uCisgIF8uZGlmZmVyZW5jZSA9IGZ1bmN0aW9uKGFycmF5KSB7
CisgICAgdmFyIHJlc3QgPSBmbGF0dGVuKGFyZ3VtZW50cywgdHJ1ZSwgdHJ1ZSwgMSk7CisgICAg
cmV0dXJuIF8uZmlsdGVyKGFycmF5LCBmdW5jdGlvbih2YWx1ZSl7CisgICAgICByZXR1cm4gIV8u
Y29udGFpbnMocmVzdCwgdmFsdWUpOworICAgIH0pOworICB9OworCisgIC8vIFppcCB0b2dldGhl
ciBtdWx0aXBsZSBsaXN0cyBpbnRvIGEgc2luZ2xlIGFycmF5IC0tIGVsZW1lbnRzIHRoYXQgc2hh
cmUKKyAgLy8gYW4gaW5kZXggZ28gdG9nZXRoZXIuCisgIF8uemlwID0gZnVuY3Rpb24oKSB7Cisg
ICAgcmV0dXJuIF8udW56aXAoYXJndW1lbnRzKTsKKyAgfTsKKworICAvLyBDb21wbGVtZW50IG9m
IF8uemlwLiBVbnppcCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyBhbmQgZ3JvdXBzCisgIC8v
IGVhY2ggYXJyYXkncyBlbGVtZW50cyBvbiBzaGFyZWQgaW5kaWNlcworICBfLnVuemlwID0gZnVu
Y3Rpb24oYXJyYXkpIHsKKyAgICB2YXIgbGVuZ3RoID0gYXJyYXkgJiYgXy5tYXgoYXJyYXksIGdl
dExlbmd0aCkubGVuZ3RoIHx8IDA7CisgICAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7CisK
KyAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7CisgICAg
ICByZXN1bHRbaW5kZXhdID0gXy5wbHVjayhhcnJheSwgaW5kZXgpOworICAgIH0KKyAgICByZXR1
cm4gcmVzdWx0OworICB9OworCisgIC8vIENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0cy4gUGFz
cyBlaXRoZXIgYSBzaW5nbGUgYXJyYXkgb2YgYFtrZXksIHZhbHVlXWAKKyAgLy8gcGFpcnMsIG9y
IHR3byBwYXJhbGxlbCBhcnJheXMgb2YgdGhlIHNhbWUgbGVuZ3RoIC0tIG9uZSBvZiBrZXlzLCBh
bmQgb25lIG9mCisgIC8vIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy4KKyAgXy5vYmplY3QgPSBm
dW5jdGlvbihsaXN0LCB2YWx1ZXMpIHsKKyAgICB2YXIgcmVzdWx0ID0ge307CisgICAgZm9yICh2
YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChsaXN0KTsgaSA8IGxlbmd0aDsgaSsrKSB7Cisg
ICAgICBpZiAodmFsdWVzKSB7CisgICAgICAgIHJlc3VsdFtsaXN0W2ldXSA9IHZhbHVlc1tpXTsK
KyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdFtsaXN0W2ldWzBdXSA9IGxpc3RbaV1bMV07
CisgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisgIH07CisKKyAgLy8gR2VuZXJh
dG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgZmluZEluZGV4IGFuZCBmaW5kTGFzdEluZGV4IGZ1
bmN0aW9ucworICBmdW5jdGlvbiBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcihkaXIpIHsKKyAg
ICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIHByZWRpY2F0ZSwgY29udGV4dCkgeworICAgICAgcHJl
ZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTsKKyAgICAgIHZhciBsZW5ndGggPSBnZXRM
ZW5ndGgoYXJyYXkpOworICAgICAgdmFyIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAx
OworICAgICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRp
cikgeworICAgICAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkg
cmV0dXJuIGluZGV4OworICAgICAgfQorICAgICAgcmV0dXJuIC0xOworICAgIH07CisgIH0KKwor
ICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBpbmRleCBvbiBhbiBhcnJheS1saWtlIHRoYXQgcGFzc2Vz
IGEgcHJlZGljYXRlIHRlc3QKKyAgXy5maW5kSW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZp
bmRlcigxKTsKKyAgXy5maW5kTGFzdEluZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIo
LTEpOworCisgIC8vIFVzZSBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8gZmlndXJlIG91dCB0aGUg
c21hbGxlc3QgaW5kZXggYXQgd2hpY2gKKyAgLy8gYW4gb2JqZWN0IHNob3VsZCBiZSBpbnNlcnRl
ZCBzbyBhcyB0byBtYWludGFpbiBvcmRlci4gVXNlcyBiaW5hcnkgc2VhcmNoLgorICBfLnNvcnRl
ZEluZGV4ID0gZnVuY3Rpb24oYXJyYXksIG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHsKKyAgICBp
dGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0LCAxKTsKKyAgICB2YXIgdmFsdWUgPSBpdGVy
YXRlZShvYmopOworICAgIHZhciBsb3cgPSAwLCBoaWdoID0gZ2V0TGVuZ3RoKGFycmF5KTsKKyAg
ICB3aGlsZSAobG93IDwgaGlnaCkgeworICAgICAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGxvdyAr
IGhpZ2gpIC8gMik7CisgICAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbbWlkXSkgPCB2YWx1ZSkgbG93
ID0gbWlkICsgMTsgZWxzZSBoaWdoID0gbWlkOworICAgIH0KKyAgICByZXR1cm4gbG93OworICB9
OworCisgIC8vIEdlbmVyYXRvciBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGluZGV4T2YgYW5kIGxh
c3RJbmRleE9mIGZ1bmN0aW9ucworICBmdW5jdGlvbiBjcmVhdGVJbmRleEZpbmRlcihkaXIsIHBy
ZWRpY2F0ZUZpbmQsIHNvcnRlZEluZGV4KSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBp
dGVtLCBpZHgpIHsKKyAgICAgIHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTsK
KyAgICAgIGlmICh0eXBlb2YgaWR4ID09ICdudW1iZXInKSB7CisgICAgICAgIGlmIChkaXIgPiAw
KSB7CisgICAgICAgICAgICBpID0gaWR4ID49IDAgPyBpZHggOiBNYXRoLm1heChpZHggKyBsZW5n
dGgsIGkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGVuZ3RoID0gaWR4ID49IDAg
PyBNYXRoLm1pbihpZHggKyAxLCBsZW5ndGgpIDogaWR4ICsgbGVuZ3RoICsgMTsKKyAgICAgICAg
fQorICAgICAgfSBlbHNlIGlmIChzb3J0ZWRJbmRleCAmJiBpZHggJiYgbGVuZ3RoKSB7CisgICAg
ICAgIGlkeCA9IHNvcnRlZEluZGV4KGFycmF5LCBpdGVtKTsKKyAgICAgICAgcmV0dXJuIGFycmF5
W2lkeF0gPT09IGl0ZW0gPyBpZHggOiAtMTsKKyAgICAgIH0KKyAgICAgIGlmIChpdGVtICE9PSBp
dGVtKSB7CisgICAgICAgIGlkeCA9IHByZWRpY2F0ZUZpbmQoc2xpY2UuY2FsbChhcnJheSwgaSwg
bGVuZ3RoKSwgXy5pc05hTik7CisgICAgICAgIHJldHVybiBpZHggPj0gMCA/IGlkeCArIGkgOiAt
MTsKKyAgICAgIH0KKyAgICAgIGZvciAoaWR4ID0gZGlyID4gMCA/IGkgOiBsZW5ndGggLSAxOyBp
ZHggPj0gMCAmJiBpZHggPCBsZW5ndGg7IGlkeCArPSBkaXIpIHsKKyAgICAgICAgaWYgKGFycmF5
W2lkeF0gPT09IGl0ZW0pIHJldHVybiBpZHg7CisgICAgICB9CisgICAgICByZXR1cm4gLTE7Cisg
ICAgfTsKKyAgfQorCisgIC8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3Vy
cmVuY2Ugb2YgYW4gaXRlbSBpbiBhbiBhcnJheSwKKyAgLy8gb3IgLTEgaWYgdGhlIGl0ZW0gaXMg
bm90IGluY2x1ZGVkIGluIHRoZSBhcnJheS4KKyAgLy8gSWYgdGhlIGFycmF5IGlzIGxhcmdlIGFu
ZCBhbHJlYWR5IGluIHNvcnQgb3JkZXIsIHBhc3MgYHRydWVgCisgIC8vIGZvciAqKmlzU29ydGVk
KiogdG8gdXNlIGJpbmFyeSBzZWFyY2guCisgIF8uaW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVy
KDEsIF8uZmluZEluZGV4LCBfLnNvcnRlZEluZGV4KTsKKyAgXy5sYXN0SW5kZXhPZiA9IGNyZWF0
ZUluZGV4RmluZGVyKC0xLCBfLmZpbmRMYXN0SW5kZXgpOworCisgIC8vIEdlbmVyYXRlIGFuIGlu
dGVnZXIgQXJyYXkgY29udGFpbmluZyBhbiBhcml0aG1ldGljIHByb2dyZXNzaW9uLiBBIHBvcnQg
b2YKKyAgLy8gdGhlIG5hdGl2ZSBQeXRob24gYHJhbmdlKClgIGZ1bmN0aW9uLiBTZWUKKyAgLy8g
W3RoZSBQeXRob24gZG9jdW1lbnRhdGlvbl0oaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5
L2Z1bmN0aW9ucy5odG1sI3JhbmdlKS4KKyAgXy5yYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9w
LCBzdGVwKSB7CisgICAgaWYgKHN0b3AgPT0gbnVsbCkgeworICAgICAgc3RvcCA9IHN0YXJ0IHx8
IDA7CisgICAgICBzdGFydCA9IDA7CisgICAgfQorICAgIHN0ZXAgPSBzdGVwIHx8IDE7CisKKyAg
ICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCks
IDApOworICAgIHZhciByYW5nZSA9IEFycmF5KGxlbmd0aCk7CisKKyAgICBmb3IgKHZhciBpZHgg
PSAwOyBpZHggPCBsZW5ndGg7IGlkeCsrLCBzdGFydCArPSBzdGVwKSB7CisgICAgICByYW5nZVtp
ZHhdID0gc3RhcnQ7CisgICAgfQorCisgICAgcmV0dXJuIHJhbmdlOworICB9OworCisgIC8vIEZ1
bmN0aW9uIChhaGVtKSBGdW5jdGlvbnMKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgLy8g
RGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGV4ZWN1dGUgYSBmdW5jdGlvbiBhcyBhIGNvbnN0cnVjdG9y
CisgIC8vIG9yIGEgbm9ybWFsIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50cwor
ICB2YXIgZXhlY3V0ZUJvdW5kID0gZnVuY3Rpb24oc291cmNlRnVuYywgYm91bmRGdW5jLCBjb250
ZXh0LCBjYWxsaW5nQ29udGV4dCwgYXJncykgeworICAgIGlmICghKGNhbGxpbmdDb250ZXh0IGlu
c3RhbmNlb2YgYm91bmRGdW5jKSkgcmV0dXJuIHNvdXJjZUZ1bmMuYXBwbHkoY29udGV4dCwgYXJn
cyk7CisgICAgdmFyIHNlbGYgPSBiYXNlQ3JlYXRlKHNvdXJjZUZ1bmMucHJvdG90eXBlKTsKKyAg
ICB2YXIgcmVzdWx0ID0gc291cmNlRnVuYy5hcHBseShzZWxmLCBhcmdzKTsKKyAgICBpZiAoXy5p
c09iamVjdChyZXN1bHQpKSByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBzZWxmOworICB9Owor
CisgIC8vIENyZWF0ZSBhIGZ1bmN0aW9uIGJvdW5kIHRvIGEgZ2l2ZW4gb2JqZWN0IChhc3NpZ25p
bmcgYHRoaXNgLCBhbmQgYXJndW1lbnRzLAorICAvLyBvcHRpb25hbGx5KS4gRGVsZWdhdGVzIHRv
ICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYEZ1bmN0aW9uLmJpbmRgIGlmCisgIC8vIGF2YWls
YWJsZS4KKyAgXy5iaW5kID0gZnVuY3Rpb24oZnVuYywgY29udGV4dCkgeworICAgIGlmIChuYXRp
dmVCaW5kICYmIGZ1bmMuYmluZCA9PT0gbmF0aXZlQmluZCkgcmV0dXJuIG5hdGl2ZUJpbmQuYXBw
bHkoZnVuYywgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTsKKyAgICBpZiAoIV8uaXNGdW5jdGlv
bihmdW5jKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQmluZCBtdXN0IGJlIGNhbGxlZCBvbiBhIGZ1
bmN0aW9uJyk7CisgICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7CisgICAg
dmFyIGJvdW5kID0gZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMs
IGJvdW5kLCBjb250ZXh0LCB0aGlzLCBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykp
KTsKKyAgICB9OworICAgIHJldHVybiBib3VuZDsKKyAgfTsKKworICAvLyBQYXJ0aWFsbHkgYXBw
bHkgYSBmdW5jdGlvbiBieSBjcmVhdGluZyBhIHZlcnNpb24gdGhhdCBoYXMgaGFkIHNvbWUgb2Yg
aXRzCisgIC8vIGFyZ3VtZW50cyBwcmUtZmlsbGVkLCB3aXRob3V0IGNoYW5naW5nIGl0cyBkeW5h
bWljIGB0aGlzYCBjb250ZXh0LiBfIGFjdHMKKyAgLy8gYXMgYSBwbGFjZWhvbGRlciwgYWxsb3dp
bmcgYW55IGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyB0byBiZSBwcmUtZmlsbGVkLgorICBfLnBh
cnRpYWwgPSBmdW5jdGlvbihmdW5jKSB7CisgICAgdmFyIGJvdW5kQXJncyA9IHNsaWNlLmNhbGwo
YXJndW1lbnRzLCAxKTsKKyAgICB2YXIgYm91bmQgPSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBw
b3NpdGlvbiA9IDAsIGxlbmd0aCA9IGJvdW5kQXJncy5sZW5ndGg7CisgICAgICB2YXIgYXJncyA9
IEFycmF5KGxlbmd0aCk7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
CisgICAgICAgIGFyZ3NbaV0gPSBib3VuZEFyZ3NbaV0gPT09IF8gPyBhcmd1bWVudHNbcG9zaXRp
b24rK10gOiBib3VuZEFyZ3NbaV07CisgICAgICB9CisgICAgICB3aGlsZSAocG9zaXRpb24gPCBh
cmd1bWVudHMubGVuZ3RoKSBhcmdzLnB1c2goYXJndW1lbnRzW3Bvc2l0aW9uKytdKTsKKyAgICAg
IHJldHVybiBleGVjdXRlQm91bmQoZnVuYywgYm91bmQsIHRoaXMsIHRoaXMsIGFyZ3MpOworICAg
IH07CisgICAgcmV0dXJuIGJvdW5kOworICB9OworCisgIC8vIEJpbmQgYSBudW1iZXIgb2YgYW4g
b2JqZWN0J3MgbWV0aG9kcyB0byB0aGF0IG9iamVjdC4gUmVtYWluaW5nIGFyZ3VtZW50cworICAv
LyBhcmUgdGhlIG1ldGhvZCBuYW1lcyB0byBiZSBib3VuZC4gVXNlZnVsIGZvciBlbnN1cmluZyB0
aGF0IGFsbCBjYWxsYmFja3MKKyAgLy8gZGVmaW5lZCBvbiBhbiBvYmplY3QgYmVsb25nIHRvIGl0
LgorICBfLmJpbmRBbGwgPSBmdW5jdGlvbihvYmopIHsKKyAgICB2YXIgaSwgbGVuZ3RoID0gYXJn
dW1lbnRzLmxlbmd0aCwga2V5OworICAgIGlmIChsZW5ndGggPD0gMSkgdGhyb3cgbmV3IEVycm9y
KCdiaW5kQWxsIG11c3QgYmUgcGFzc2VkIGZ1bmN0aW9uIG5hbWVzJyk7CisgICAgZm9yIChpID0g
MTsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICBrZXkgPSBhcmd1bWVudHNbaV07CisgICAgICBv
Ympba2V5XSA9IF8uYmluZChvYmpba2V5XSwgb2JqKTsKKyAgICB9CisgICAgcmV0dXJuIG9iajsK
KyAgfTsKKworICAvLyBNZW1vaXplIGFuIGV4cGVuc2l2ZSBmdW5jdGlvbiBieSBzdG9yaW5nIGl0
cyByZXN1bHRzLgorICBfLm1lbW9pemUgPSBmdW5jdGlvbihmdW5jLCBoYXNoZXIpIHsKKyAgICB2
YXIgbWVtb2l6ZSA9IGZ1bmN0aW9uKGtleSkgeworICAgICAgdmFyIGNhY2hlID0gbWVtb2l6ZS5j
YWNoZTsKKyAgICAgIHZhciBhZGRyZXNzID0gJycgKyAoaGFzaGVyID8gaGFzaGVyLmFwcGx5KHRo
aXMsIGFyZ3VtZW50cykgOiBrZXkpOworICAgICAgaWYgKCFfLmhhcyhjYWNoZSwgYWRkcmVzcykp
IGNhY2hlW2FkZHJlc3NdID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgcmV0
dXJuIGNhY2hlW2FkZHJlc3NdOworICAgIH07CisgICAgbWVtb2l6ZS5jYWNoZSA9IHt9OworICAg
IHJldHVybiBtZW1vaXplOworICB9OworCisgIC8vIERlbGF5cyBhIGZ1bmN0aW9uIGZvciB0aGUg
Z2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gY2FsbHMKKyAgLy8gaXQgd2l0
aCB0aGUgYXJndW1lbnRzIHN1cHBsaWVkLgorICBfLmRlbGF5ID0gZnVuY3Rpb24oZnVuYywgd2Fp
dCkgeworICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpOworICAgIHJldHVy
biBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CisgICAgICByZXR1cm4gZnVuYy5hcHBseShudWxsLCBh
cmdzKTsKKyAgICB9LCB3YWl0KTsKKyAgfTsKKworICAvLyBEZWZlcnMgYSBmdW5jdGlvbiwgc2No
ZWR1bGluZyBpdCB0byBydW4gYWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXMKKyAgLy8g
Y2xlYXJlZC4KKyAgXy5kZWZlciA9IF8ucGFydGlhbChfLmRlbGF5LCBfLCAxKTsKKworICAvLyBS
ZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIHdoZW4gaW52b2tlZCwgd2lsbCBvbmx5IGJlIHRyaWdn
ZXJlZCBhdCBtb3N0IG9uY2UKKyAgLy8gZHVyaW5nIGEgZ2l2ZW4gd2luZG93IG9mIHRpbWUuIE5v
cm1hbGx5LCB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uIHdpbGwgcnVuCisgIC8vIGFzIG11Y2ggYXMg
aXQgY2FuLCB3aXRob3V0IGV2ZXIgZ29pbmcgbW9yZSB0aGFuIG9uY2UgcGVyIGB3YWl0YCBkdXJh
dGlvbjsKKyAgLy8gYnV0IGlmIHlvdSdkIGxpa2UgdG8gZGlzYWJsZSB0aGUgZXhlY3V0aW9uIG9u
IHRoZSBsZWFkaW5nIGVkZ2UsIHBhc3MKKyAgLy8gYHtsZWFkaW5nOiBmYWxzZX1gLiBUbyBkaXNh
YmxlIGV4ZWN1dGlvbiBvbiB0aGUgdHJhaWxpbmcgZWRnZSwgZGl0dG8uCisgIF8udGhyb3R0bGUg
PSBmdW5jdGlvbihmdW5jLCB3YWl0LCBvcHRpb25zKSB7CisgICAgdmFyIGNvbnRleHQsIGFyZ3Ms
IHJlc3VsdDsKKyAgICB2YXIgdGltZW91dCA9IG51bGw7CisgICAgdmFyIHByZXZpb3VzID0gMDsK
KyAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTsKKyAgICB2YXIgbGF0ZXIgPSBmdW5jdGlv
bigpIHsKKyAgICAgIHByZXZpb3VzID0gb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSA/IDAgOiBf
Lm5vdygpOworICAgICAgdGltZW91dCA9IG51bGw7CisgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5
KGNvbnRleHQsIGFyZ3MpOworICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51
bGw7CisgICAgfTsKKyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgbm93ID0gXy5u
b3coKTsKKyAgICAgIGlmICghcHJldmlvdXMgJiYgb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSkg
cHJldmlvdXMgPSBub3c7CisgICAgICB2YXIgcmVtYWluaW5nID0gd2FpdCAtIChub3cgLSBwcmV2
aW91cyk7CisgICAgICBjb250ZXh0ID0gdGhpczsKKyAgICAgIGFyZ3MgPSBhcmd1bWVudHM7Cisg
ICAgICBpZiAocmVtYWluaW5nIDw9IDAgfHwgcmVtYWluaW5nID4gd2FpdCkgeworICAgICAgICBp
ZiAodGltZW91dCkgeworICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTsKKyAgICAgICAg
ICB0aW1lb3V0ID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBwcmV2aW91cyA9IG5vdzsKKyAg
ICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTsKKyAgICAgICAgaWYgKCF0
aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7CisgICAgICB9IGVsc2UgaWYgKCF0aW1lb3V0
ICYmIG9wdGlvbnMudHJhaWxpbmcgIT09IGZhbHNlKSB7CisgICAgICAgIHRpbWVvdXQgPSBzZXRU
aW1lb3V0KGxhdGVyLCByZW1haW5pbmcpOworICAgICAgfQorICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9OworICB9OworCisgIC8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBh
cyBpdCBjb250aW51ZXMgdG8gYmUgaW52b2tlZCwgd2lsbCBub3QKKyAgLy8gYmUgdHJpZ2dlcmVk
LiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgaXQgc3RvcHMgYmVpbmcgY2FsbGVk
IGZvcgorICAvLyBOIG1pbGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0cmln
Z2VyIHRoZSBmdW5jdGlvbiBvbiB0aGUKKyAgLy8gbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9mIHRo
ZSB0cmFpbGluZy4KKyAgXy5kZWJvdW5jZSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGltbWVkaWF0
ZSkgeworICAgIHZhciB0aW1lb3V0LCBhcmdzLCBjb250ZXh0LCB0aW1lc3RhbXAsIHJlc3VsdDsK
KworICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIGxhc3QgPSBfLm5vdygp
IC0gdGltZXN0YW1wOworCisgICAgICBpZiAobGFzdCA8IHdhaXQgJiYgbGFzdCA+PSAwKSB7Cisg
ICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0IC0gbGFzdCk7CisgICAgICB9
IGVsc2UgeworICAgICAgICB0aW1lb3V0ID0gbnVsbDsKKyAgICAgICAgaWYgKCFpbW1lZGlhdGUp
IHsKKyAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpOworICAgICAg
ICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsOworICAgICAgICB9CisgICAg
ICB9CisgICAgfTsKKworICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgIGNvbnRleHQgPSB0
aGlzOworICAgICAgYXJncyA9IGFyZ3VtZW50czsKKyAgICAgIHRpbWVzdGFtcCA9IF8ubm93KCk7
CisgICAgICB2YXIgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDsKKyAgICAgIGlmICgh
dGltZW91dCkgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpOworICAgICAgaWYgKGNh
bGxOb3cpIHsKKyAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTsKKyAg
ICAgICAgY29udGV4dCA9IGFyZ3MgPSBudWxsOworICAgICAgfQorCisgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH07CisgIH07CisKKyAgLy8gUmV0dXJucyB0aGUgZmlyc3QgZnVuY3Rpb24gcGFz
c2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBzZWNvbmQsCisgIC8vIGFsbG93aW5nIHlvdSB0byBh
ZGp1c3QgYXJndW1lbnRzLCBydW4gY29kZSBiZWZvcmUgYW5kIGFmdGVyLCBhbmQKKyAgLy8gY29u
ZGl0aW9uYWxseSBleGVjdXRlIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi4KKyAgXy53cmFwID0gZnVu
Y3Rpb24oZnVuYywgd3JhcHBlcikgeworICAgIHJldHVybiBfLnBhcnRpYWwod3JhcHBlciwgZnVu
Yyk7CisgIH07CisKKyAgLy8gUmV0dXJucyBhIG5lZ2F0ZWQgdmVyc2lvbiBvZiB0aGUgcGFzc2Vk
LWluIHByZWRpY2F0ZS4KKyAgXy5uZWdhdGUgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHsKKyAgICBy
ZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gIXByZWRpY2F0ZS5hcHBseSh0aGlzLCBh
cmd1bWVudHMpOworICAgIH07CisgIH07CisKKyAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQg
aXMgdGhlIGNvbXBvc2l0aW9uIG9mIGEgbGlzdCBvZiBmdW5jdGlvbnMsIGVhY2gKKyAgLy8gY29u
c3VtaW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgZm9sbG93cy4KKyAg
Xy5jb21wb3NlID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7CisgICAg
dmFyIHN0YXJ0ID0gYXJncy5sZW5ndGggLSAxOworICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAg
ICAgIHZhciBpID0gc3RhcnQ7CisgICAgICB2YXIgcmVzdWx0ID0gYXJnc1tzdGFydF0uYXBwbHko
dGhpcywgYXJndW1lbnRzKTsKKyAgICAgIHdoaWxlIChpLS0pIHJlc3VsdCA9IGFyZ3NbaV0uY2Fs
bCh0aGlzLCByZXN1bHQpOworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICB9OworCisg
IC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCBvbiBhbmQg
YWZ0ZXIgdGhlIE50aCBjYWxsLgorICBfLmFmdGVyID0gZnVuY3Rpb24odGltZXMsIGZ1bmMpIHsK
KyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICBpZiAoLS10aW1lcyA8IDEpIHsKKyAgICAg
ICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICAgIH0KKyAgICB9Owor
ICB9OworCisgIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRl
ZCB1cCB0byAoYnV0IG5vdCBpbmNsdWRpbmcpIHRoZSBOdGggY2FsbC4KKyAgXy5iZWZvcmUgPSBm
dW5jdGlvbih0aW1lcywgZnVuYykgeworICAgIHZhciBtZW1vOworICAgIHJldHVybiBmdW5jdGlv
bigpIHsKKyAgICAgIGlmICgtLXRpbWVzID4gMCkgeworICAgICAgICBtZW1vID0gZnVuYy5hcHBs
eSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgfQorICAgICAgaWYgKHRpbWVzIDw9IDEpIGZ1bmMg
PSBudWxsOworICAgICAgcmV0dXJuIG1lbW87CisgICAgfTsKKyAgfTsKKworICAvLyBSZXR1cm5z
IGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGF0IG1vc3Qgb25lIHRpbWUsIG5vIG1h
dHRlciBob3cKKyAgLy8gb2Z0ZW4geW91IGNhbGwgaXQuIFVzZWZ1bCBmb3IgbGF6eSBpbml0aWFs
aXphdGlvbi4KKyAgXy5vbmNlID0gXy5wYXJ0aWFsKF8uYmVmb3JlLCAyKTsKKworICAvLyBPYmpl
Y3QgRnVuY3Rpb25zCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0KKworICAvLyBLZXlzIGluIElFIDwg
OSB0aGF0IHdvbid0IGJlIGl0ZXJhdGVkIGJ5IGBmb3Iga2V5IGluIC4uLmAgYW5kIHRodXMgbWlz
c2VkLgorICB2YXIgaGFzRW51bUJ1ZyA9ICF7dG9TdHJpbmc6IG51bGx9LnByb3BlcnR5SXNFbnVt
ZXJhYmxlKCd0b1N0cmluZycpOworICB2YXIgbm9uRW51bWVyYWJsZVByb3BzID0gWyd2YWx1ZU9m
JywgJ2lzUHJvdG90eXBlT2YnLCAndG9TdHJpbmcnLAorICAgICAgICAgICAgICAgICAgICAgICdw
cm9wZXJ0eUlzRW51bWVyYWJsZScsICdoYXNPd25Qcm9wZXJ0eScsICd0b0xvY2FsZVN0cmluZydd
OworCisgIGZ1bmN0aW9uIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKSB7CisgICAgdmFy
IG5vbkVudW1JZHggPSBub25FbnVtZXJhYmxlUHJvcHMubGVuZ3RoOworICAgIHZhciBjb25zdHJ1
Y3RvciA9IG9iai5jb25zdHJ1Y3RvcjsKKyAgICB2YXIgcHJvdG8gPSAoXy5pc0Z1bmN0aW9uKGNv
bnN0cnVjdG9yKSAmJiBjb25zdHJ1Y3Rvci5wcm90b3R5cGUpIHx8IE9ialByb3RvOworCisgICAg
Ly8gQ29uc3RydWN0b3IgaXMgYSBzcGVjaWFsIGNhc2UuCisgICAgdmFyIHByb3AgPSAnY29uc3Ry
dWN0b3InOworICAgIGlmIChfLmhhcyhvYmosIHByb3ApICYmICFfLmNvbnRhaW5zKGtleXMsIHBy
b3ApKSBrZXlzLnB1c2gocHJvcCk7CisKKyAgICB3aGlsZSAobm9uRW51bUlkeC0tKSB7CisgICAg
ICBwcm9wID0gbm9uRW51bWVyYWJsZVByb3BzW25vbkVudW1JZHhdOworICAgICAgaWYgKHByb3Ag
aW4gb2JqICYmIG9ialtwcm9wXSAhPT0gcHJvdG9bcHJvcF0gJiYgIV8uY29udGFpbnMoa2V5cywg
cHJvcCkpIHsKKyAgICAgICAga2V5cy5wdXNoKHByb3ApOworICAgICAgfQorICAgIH0KKyAgfQor
CisgIC8vIFJldHJpZXZlIHRoZSBuYW1lcyBvZiBhbiBvYmplY3QncyBvd24gcHJvcGVydGllcy4K
KyAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYE9iamVjdC5rZXlz
YAorICBfLmtleXMgPSBmdW5jdGlvbihvYmopIHsKKyAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkg
cmV0dXJuIFtdOworICAgIGlmIChuYXRpdmVLZXlzKSByZXR1cm4gbmF0aXZlS2V5cyhvYmopOwor
ICAgIHZhciBrZXlzID0gW107CisgICAgZm9yICh2YXIga2V5IGluIG9iaikgaWYgKF8uaGFzKG9i
aiwga2V5KSkga2V5cy5wdXNoKGtleSk7CisgICAgLy8gQWhlbSwgSUUgPCA5LgorICAgIGlmICho
YXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7CisgICAgcmV0dXJuIGtl
eXM7CisgIH07CisKKyAgLy8gUmV0cmlldmUgYWxsIHRoZSBwcm9wZXJ0eSBuYW1lcyBvZiBhbiBv
YmplY3QuCisgIF8uYWxsS2V5cyA9IGZ1bmN0aW9uKG9iaikgeworICAgIGlmICghXy5pc09iamVj
dChvYmopKSByZXR1cm4gW107CisgICAgdmFyIGtleXMgPSBbXTsKKyAgICBmb3IgKHZhciBrZXkg
aW4gb2JqKSBrZXlzLnB1c2goa2V5KTsKKyAgICAvLyBBaGVtLCBJRSA8IDkuCisgICAgaWYgKGhh
c0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTsKKyAgICByZXR1cm4ga2V5
czsKKyAgfTsKKworICAvLyBSZXRyaWV2ZSB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdCdzIHByb3Bl
cnRpZXMuCisgIF8udmFsdWVzID0gZnVuY3Rpb24ob2JqKSB7CisgICAgdmFyIGtleXMgPSBfLmtl
eXMob2JqKTsKKyAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7CisgICAgdmFyIHZhbHVlcyA9
IEFycmF5KGxlbmd0aCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewor
ICAgICAgdmFsdWVzW2ldID0gb2JqW2tleXNbaV1dOworICAgIH0KKyAgICByZXR1cm4gdmFsdWVz
OworICB9OworCisgIC8vIFJldHVybnMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJh
dGVlIHRvIGVhY2ggZWxlbWVudCBvZiB0aGUgb2JqZWN0CisgIC8vIEluIGNvbnRyYXN0IHRvIF8u
bWFwIGl0IHJldHVybnMgYW4gb2JqZWN0CisgIF8ubWFwT2JqZWN0ID0gZnVuY3Rpb24ob2JqLCBp
dGVyYXRlZSwgY29udGV4dCkgeworICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQp
OworICAgIHZhciBrZXlzID0gIF8ua2V5cyhvYmopLAorICAgICAgICAgIGxlbmd0aCA9IGtleXMu
bGVuZ3RoLAorICAgICAgICAgIHJlc3VsdHMgPSB7fSwKKyAgICAgICAgICBjdXJyZW50S2V5Owor
ICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgeworICAg
ICAgICBjdXJyZW50S2V5ID0ga2V5c1tpbmRleF07CisgICAgICAgIHJlc3VsdHNbY3VycmVudEtl
eV0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7CisgICAgICB9
CisgICAgICByZXR1cm4gcmVzdWx0czsKKyAgfTsKKworICAvLyBDb252ZXJ0IGFuIG9iamVjdCBp
bnRvIGEgbGlzdCBvZiBgW2tleSwgdmFsdWVdYCBwYWlycy4KKyAgXy5wYWlycyA9IGZ1bmN0aW9u
KG9iaikgeworICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7CisgICAgdmFyIGxlbmd0aCA9IGtl
eXMubGVuZ3RoOworICAgIHZhciBwYWlycyA9IEFycmF5KGxlbmd0aCk7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgcGFpcnNbaV0gPSBba2V5c1tpXSwgb2Jq
W2tleXNbaV1dXTsKKyAgICB9CisgICAgcmV0dXJuIHBhaXJzOworICB9OworCisgIC8vIEludmVy
dCB0aGUga2V5cyBhbmQgdmFsdWVzIG9mIGFuIG9iamVjdC4gVGhlIHZhbHVlcyBtdXN0IGJlIHNl
cmlhbGl6YWJsZS4KKyAgXy5pbnZlcnQgPSBmdW5jdGlvbihvYmopIHsKKyAgICB2YXIgcmVzdWx0
ID0ge307CisgICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTsKKyAgICBmb3IgKHZhciBpID0gMCwg
bGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgcmVzdWx0W29i
altrZXlzW2ldXV0gPSBrZXlzW2ldOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworICB9Owor
CisgIC8vIFJldHVybiBhIHNvcnRlZCBsaXN0IG9mIHRoZSBmdW5jdGlvbiBuYW1lcyBhdmFpbGFi
bGUgb24gdGhlIG9iamVjdC4KKyAgLy8gQWxpYXNlZCBhcyBgbWV0aG9kc2AKKyAgXy5mdW5jdGlv
bnMgPSBfLm1ldGhvZHMgPSBmdW5jdGlvbihvYmopIHsKKyAgICB2YXIgbmFtZXMgPSBbXTsKKyAg
ICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CisgICAgICBpZiAoXy5pc0Z1bmN0aW9uKG9ialtrZXld
KSkgbmFtZXMucHVzaChrZXkpOworICAgIH0KKyAgICByZXR1cm4gbmFtZXMuc29ydCgpOworICB9
OworCisgIC8vIEV4dGVuZCBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgcHJvcGVydGllcyBp
biBwYXNzZWQtaW4gb2JqZWN0KHMpLgorICBfLmV4dGVuZCA9IGNyZWF0ZUFzc2lnbmVyKF8uYWxs
S2V5cyk7CisKKyAgLy8gQXNzaWducyBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgb3duIHBy
b3BlcnRpZXMgaW4gdGhlIHBhc3NlZC1pbiBvYmplY3QocykKKyAgLy8gKGh0dHBzOi8vZGV2ZWxv
cGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmpl
Y3RzL09iamVjdC9hc3NpZ24pCisgIF8uZXh0ZW5kT3duID0gXy5hc3NpZ24gPSBjcmVhdGVBc3Np
Z25lcihfLmtleXMpOworCisgIC8vIFJldHVybnMgdGhlIGZpcnN0IGtleSBvbiBhbiBvYmplY3Qg
dGhhdCBwYXNzZXMgYSBwcmVkaWNhdGUgdGVzdAorICBfLmZpbmRLZXkgPSBmdW5jdGlvbihvYmos
IHByZWRpY2F0ZSwgY29udGV4dCkgeworICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29u
dGV4dCk7CisgICAgdmFyIGtleXMgPSBfLmtleXMob2JqKSwga2V5OworICAgIGZvciAodmFyIGkg
PSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICBrZXkg
PSBrZXlzW2ldOworICAgICAgaWYgKHByZWRpY2F0ZShvYmpba2V5XSwga2V5LCBvYmopKSByZXR1
cm4ga2V5OworICAgIH0KKyAgfTsKKworICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3Qg
b25seSBjb250YWluaW5nIHRoZSB3aGl0ZWxpc3RlZCBwcm9wZXJ0aWVzLgorICBfLnBpY2sgPSBm
dW5jdGlvbihvYmplY3QsIG9pdGVyYXRlZSwgY29udGV4dCkgeworICAgIHZhciByZXN1bHQgPSB7
fSwgb2JqID0gb2JqZWN0LCBpdGVyYXRlZSwga2V5czsKKyAgICBpZiAob2JqID09IG51bGwpIHJl
dHVybiByZXN1bHQ7CisgICAgaWYgKF8uaXNGdW5jdGlvbihvaXRlcmF0ZWUpKSB7CisgICAgICBr
ZXlzID0gXy5hbGxLZXlzKG9iaik7CisgICAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2Iob2l0ZXJh
dGVlLCBjb250ZXh0KTsKKyAgICB9IGVsc2UgeworICAgICAga2V5cyA9IGZsYXR0ZW4oYXJndW1l
bnRzLCBmYWxzZSwgZmFsc2UsIDEpOworICAgICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwg
a2V5LCBvYmopIHsgcmV0dXJuIGtleSBpbiBvYmo7IH07CisgICAgICBvYmogPSBPYmplY3Qob2Jq
KTsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwg
bGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciBrZXkgPSBrZXlzW2ldOworICAgICAgdmFyIHZhbHVl
ID0gb2JqW2tleV07CisgICAgICBpZiAoaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqKSkgcmVzdWx0
W2tleV0gPSB2YWx1ZTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfTsKKworICAgLy8g
UmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IHdpdGhvdXQgdGhlIGJsYWNrbGlzdGVkIHByb3Bl
cnRpZXMuCisgIF8ub21pdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHsKKyAg
ICBpZiAoXy5pc0Z1bmN0aW9uKGl0ZXJhdGVlKSkgeworICAgICAgaXRlcmF0ZWUgPSBfLm5lZ2F0
ZShpdGVyYXRlZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHZhciBrZXlzID0gXy5tYXAoZmxhdHRl
bihhcmd1bWVudHMsIGZhbHNlLCBmYWxzZSwgMSksIFN0cmluZyk7CisgICAgICBpdGVyYXRlZSA9
IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHsKKyAgICAgICAgcmV0dXJuICFfLmNvbnRhaW5zKGtleXMs
IGtleSk7CisgICAgICB9OworICAgIH0KKyAgICByZXR1cm4gXy5waWNrKG9iaiwgaXRlcmF0ZWUs
IGNvbnRleHQpOworICB9OworCisgIC8vIEZpbGwgaW4gYSBnaXZlbiBvYmplY3Qgd2l0aCBkZWZh
dWx0IHByb3BlcnRpZXMuCisgIF8uZGVmYXVsdHMgPSBjcmVhdGVBc3NpZ25lcihfLmFsbEtleXMs
IHRydWUpOworCisgIC8vIENyZWF0ZXMgYW4gb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSB0aGUg
Z2l2ZW4gcHJvdG90eXBlIG9iamVjdC4KKyAgLy8gSWYgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGFy
ZSBwcm92aWRlZCB0aGVuIHRoZXkgd2lsbCBiZSBhZGRlZCB0byB0aGUKKyAgLy8gY3JlYXRlZCBv
YmplY3QuCisgIF8uY3JlYXRlID0gZnVuY3Rpb24ocHJvdG90eXBlLCBwcm9wcykgeworICAgIHZh
ciByZXN1bHQgPSBiYXNlQ3JlYXRlKHByb3RvdHlwZSk7CisgICAgaWYgKHByb3BzKSBfLmV4dGVu
ZE93bihyZXN1bHQsIHByb3BzKTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9OworCisgIC8vIENy
ZWF0ZSBhIChzaGFsbG93LWNsb25lZCkgZHVwbGljYXRlIG9mIGFuIG9iamVjdC4KKyAgXy5jbG9u
ZSA9IGZ1bmN0aW9uKG9iaikgeworICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gb2Jq
OworICAgIHJldHVybiBfLmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogXy5leHRlbmQoe30s
IG9iaik7CisgIH07CisKKyAgLy8gSW52b2tlcyBpbnRlcmNlcHRvciB3aXRoIHRoZSBvYmosIGFu
ZCB0aGVuIHJldHVybnMgb2JqLgorICAvLyBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMgbWV0
aG9kIGlzIHRvICJ0YXAgaW50byIgYSBtZXRob2QgY2hhaW4sIGluCisgIC8vIG9yZGVyIHRvIHBl
cmZvcm0gb3BlcmF0aW9ucyBvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWlu
LgorICBfLnRhcCA9IGZ1bmN0aW9uKG9iaiwgaW50ZXJjZXB0b3IpIHsKKyAgICBpbnRlcmNlcHRv
cihvYmopOworICAgIHJldHVybiBvYmo7CisgIH07CisKKyAgLy8gUmV0dXJucyB3aGV0aGVyIGFu
IG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2YgYGtleTp2YWx1ZWAgcGFpcnMuCisgIF8uaXNNYXRj
aCA9IGZ1bmN0aW9uKG9iamVjdCwgYXR0cnMpIHsKKyAgICB2YXIga2V5cyA9IF8ua2V5cyhhdHRy
cyksIGxlbmd0aCA9IGtleXMubGVuZ3RoOworICAgIGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJu
ICFsZW5ndGg7CisgICAgdmFyIG9iaiA9IE9iamVjdChvYmplY3QpOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciBrZXkgPSBrZXlzW2ldOworICAgICAg
aWYgKGF0dHJzW2tleV0gIT09IG9ialtrZXldIHx8ICEoa2V5IGluIG9iaikpIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7CisgIH07CisKKworICAvLyBJbnRlcm5hbCByZWN1
cnNpdmUgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgYGlzRXF1YWxgLgorICB2YXIgZXEgPSBmdW5j
dGlvbihhLCBiLCBhU3RhY2ssIGJTdGFjaykgeworICAgIC8vIElkZW50aWNhbCBvYmplY3RzIGFy
ZSBlcXVhbC4gYDAgPT09IC0wYCwgYnV0IHRoZXkgYXJlbid0IGlkZW50aWNhbC4KKyAgICAvLyBT
ZWUgdGhlIFtIYXJtb255IGBlZ2FsYCBwcm9wb3NhbF0oaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5v
cmcvZG9rdS5waHA/aWQ9aGFybW9ueTplZ2FsKS4KKyAgICBpZiAoYSA9PT0gYikgcmV0dXJuIGEg
IT09IDAgfHwgMSAvIGEgPT09IDEgLyBiOworICAgIC8vIEEgc3RyaWN0IGNvbXBhcmlzb24gaXMg
bmVjZXNzYXJ5IGJlY2F1c2UgYG51bGwgPT0gdW5kZWZpbmVkYC4KKyAgICBpZiAoYSA9PSBudWxs
IHx8IGIgPT0gbnVsbCkgcmV0dXJuIGEgPT09IGI7CisgICAgLy8gVW53cmFwIGFueSB3cmFwcGVk
IG9iamVjdHMuCisgICAgaWYgKGEgaW5zdGFuY2VvZiBfKSBhID0gYS5fd3JhcHBlZDsKKyAgICBp
ZiAoYiBpbnN0YW5jZW9mIF8pIGIgPSBiLl93cmFwcGVkOworICAgIC8vIENvbXBhcmUgYFtbQ2xh
c3NdXWAgbmFtZXMuCisgICAgdmFyIGNsYXNzTmFtZSA9IHRvU3RyaW5nLmNhbGwoYSk7CisgICAg
aWYgKGNsYXNzTmFtZSAhPT0gdG9TdHJpbmcuY2FsbChiKSkgcmV0dXJuIGZhbHNlOworICAgIHN3
aXRjaCAoY2xhc3NOYW1lKSB7CisgICAgICAvLyBTdHJpbmdzLCBudW1iZXJzLCByZWd1bGFyIGV4
cHJlc3Npb25zLCBkYXRlcywgYW5kIGJvb2xlYW5zIGFyZSBjb21wYXJlZCBieSB2YWx1ZS4KKyAg
ICAgIGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6CisgICAgICAvLyBSZWdFeHBzIGFyZSBjb2VyY2Vk
IHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24gKE5vdGU6ICcnICsgL2EvaSA9PT0gJy9hL2knKQor
ICAgICAgY2FzZSAnW29iamVjdCBTdHJpbmddJzoKKyAgICAgICAgLy8gUHJpbWl0aXZlcyBhbmQg
dGhlaXIgY29ycmVzcG9uZGluZyBvYmplY3Qgd3JhcHBlcnMgYXJlIGVxdWl2YWxlbnQ7IHRodXMs
IGAiNSJgIGlzCisgICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gYG5ldyBTdHJpbmcoIjUiKWAuCisg
ICAgICAgIHJldHVybiAnJyArIGEgPT09ICcnICsgYjsKKyAgICAgIGNhc2UgJ1tvYmplY3QgTnVt
YmVyXSc6CisgICAgICAgIC8vIGBOYU5gcyBhcmUgZXF1aXZhbGVudCwgYnV0IG5vbi1yZWZsZXhp
dmUuCisgICAgICAgIC8vIE9iamVjdChOYU4pIGlzIGVxdWl2YWxlbnQgdG8gTmFOCisgICAgICAg
IGlmICgrYSAhPT0gK2EpIHJldHVybiArYiAhPT0gK2I7CisgICAgICAgIC8vIEFuIGBlZ2FsYCBj
b21wYXJpc29uIGlzIHBlcmZvcm1lZCBmb3Igb3RoZXIgbnVtZXJpYyB2YWx1ZXMuCisgICAgICAg
IHJldHVybiArYSA9PT0gMCA/IDEgLyArYSA9PT0gMSAvIGIgOiArYSA9PT0gK2I7CisgICAgICBj
YXNlICdbb2JqZWN0IERhdGVdJzoKKyAgICAgIGNhc2UgJ1tvYmplY3QgQm9vbGVhbl0nOgorICAg
ICAgICAvLyBDb2VyY2UgZGF0ZXMgYW5kIGJvb2xlYW5zIHRvIG51bWVyaWMgcHJpbWl0aXZlIHZh
bHVlcy4gRGF0ZXMgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyCisgICAgICAgIC8vIG1pbGxpc2Vjb25k
IHJlcHJlc2VudGF0aW9ucy4gTm90ZSB0aGF0IGludmFsaWQgZGF0ZXMgd2l0aCBtaWxsaXNlY29u
ZCByZXByZXNlbnRhdGlvbnMKKyAgICAgICAgLy8gb2YgYE5hTmAgYXJlIG5vdCBlcXVpdmFsZW50
LgorICAgICAgICByZXR1cm4gK2EgPT09ICtiOworICAgIH0KKworICAgIHZhciBhcmVBcnJheXMg
PSBjbGFzc05hbWUgPT09ICdbb2JqZWN0IEFycmF5XSc7CisgICAgaWYgKCFhcmVBcnJheXMpIHsK
KyAgICAgIGlmICh0eXBlb2YgYSAhPSAnb2JqZWN0JyB8fCB0eXBlb2YgYiAhPSAnb2JqZWN0Jykg
cmV0dXJuIGZhbHNlOworCisgICAgICAvLyBPYmplY3RzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVj
dG9ycyBhcmUgbm90IGVxdWl2YWxlbnQsIGJ1dCBgT2JqZWN0YHMgb3IgYEFycmF5YHMKKyAgICAg
IC8vIGZyb20gZGlmZmVyZW50IGZyYW1lcyBhcmUuCisgICAgICB2YXIgYUN0b3IgPSBhLmNvbnN0
cnVjdG9yLCBiQ3RvciA9IGIuY29uc3RydWN0b3I7CisgICAgICBpZiAoYUN0b3IgIT09IGJDdG9y
ICYmICEoXy5pc0Z1bmN0aW9uKGFDdG9yKSAmJiBhQ3RvciBpbnN0YW5jZW9mIGFDdG9yICYmCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5pc0Z1bmN0aW9uKGJDdG9yKSAmJiBiQ3Rv
ciBpbnN0YW5jZW9mIGJDdG9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoJ2NvbnN0
cnVjdG9yJyBpbiBhICYmICdjb25zdHJ1Y3RvcicgaW4gYikpIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgfQorICAgIH0KKyAgICAvLyBBc3N1bWUgZXF1YWxpdHkgZm9yIGN5Y2xpYyBz
dHJ1Y3R1cmVzLiBUaGUgYWxnb3JpdGhtIGZvciBkZXRlY3RpbmcgY3ljbGljCisgICAgLy8gc3Ry
dWN0dXJlcyBpcyBhZGFwdGVkIGZyb20gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMywgYWJzdHJhY3Qg
b3BlcmF0aW9uIGBKT2AuCisKKyAgICAvLyBJbml0aWFsaXppbmcgc3RhY2sgb2YgdHJhdmVyc2Vk
IG9iamVjdHMuCisgICAgLy8gSXQncyBkb25lIGhlcmUgc2luY2Ugd2Ugb25seSBuZWVkIHRoZW0g
Zm9yIG9iamVjdHMgYW5kIGFycmF5cyBjb21wYXJpc29uLgorICAgIGFTdGFjayA9IGFTdGFjayB8
fCBbXTsKKyAgICBiU3RhY2sgPSBiU3RhY2sgfHwgW107CisgICAgdmFyIGxlbmd0aCA9IGFTdGFj
ay5sZW5ndGg7CisgICAgd2hpbGUgKGxlbmd0aC0tKSB7CisgICAgICAvLyBMaW5lYXIgc2VhcmNo
LiBQZXJmb3JtYW5jZSBpcyBpbnZlcnNlbHkgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2YK
KyAgICAgIC8vIHVuaXF1ZSBuZXN0ZWQgc3RydWN0dXJlcy4KKyAgICAgIGlmIChhU3RhY2tbbGVu
Z3RoXSA9PT0gYSkgcmV0dXJuIGJTdGFja1tsZW5ndGhdID09PSBiOworICAgIH0KKworICAgIC8v
IEFkZCB0aGUgZmlyc3Qgb2JqZWN0IHRvIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy4K
KyAgICBhU3RhY2sucHVzaChhKTsKKyAgICBiU3RhY2sucHVzaChiKTsKKworICAgIC8vIFJlY3Vy
c2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyBhbmQgYXJyYXlzLgorICAgIGlmIChhcmVBcnJheXMpIHsK
KyAgICAgIC8vIENvbXBhcmUgYXJyYXkgbGVuZ3RocyB0byBkZXRlcm1pbmUgaWYgYSBkZWVwIGNv
bXBhcmlzb24gaXMgbmVjZXNzYXJ5LgorICAgICAgbGVuZ3RoID0gYS5sZW5ndGg7CisgICAgICBp
ZiAobGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlOworICAgICAgLy8gRGVlcCBjb21w
YXJlIHRoZSBjb250ZW50cywgaWdub3Jpbmcgbm9uLW51bWVyaWMgcHJvcGVydGllcy4KKyAgICAg
IHdoaWxlIChsZW5ndGgtLSkgeworICAgICAgICBpZiAoIWVxKGFbbGVuZ3RoXSwgYltsZW5ndGhd
LCBhU3RhY2ssIGJTdGFjaykpIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgLy8gRGVlcCBjb21wYXJlIG9iamVjdHMuCisgICAgICB2YXIga2V5cyA9IF8ua2V5cyhh
KSwga2V5OworICAgICAgbGVuZ3RoID0ga2V5cy5sZW5ndGg7CisgICAgICAvLyBFbnN1cmUgdGhh
dCBib3RoIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBudW1iZXIgb2YgcHJvcGVydGllcyBiZWZv
cmUgY29tcGFyaW5nIGRlZXAgZXF1YWxpdHkuCisgICAgICBpZiAoXy5rZXlzKGIpLmxlbmd0aCAh
PT0gbGVuZ3RoKSByZXR1cm4gZmFsc2U7CisgICAgICB3aGlsZSAobGVuZ3RoLS0pIHsKKyAgICAg
ICAgLy8gRGVlcCBjb21wYXJlIGVhY2ggbWVtYmVyCisgICAgICAgIGtleSA9IGtleXNbbGVuZ3Ro
XTsKKyAgICAgICAgaWYgKCEoXy5oYXMoYiwga2V5KSAmJiBlcShhW2tleV0sIGJba2V5XSwgYVN0
YWNrLCBiU3RhY2spKSkgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH0KKyAgICAvLyBSZW1v
dmUgdGhlIGZpcnN0IG9iamVjdCBmcm9tIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy4K
KyAgICBhU3RhY2sucG9wKCk7CisgICAgYlN0YWNrLnBvcCgpOworICAgIHJldHVybiB0cnVlOwor
ICB9OworCisgIC8vIFBlcmZvcm0gYSBkZWVwIGNvbXBhcmlzb24gdG8gY2hlY2sgaWYgdHdvIG9i
amVjdHMgYXJlIGVxdWFsLgorICBfLmlzRXF1YWwgPSBmdW5jdGlvbihhLCBiKSB7CisgICAgcmV0
dXJuIGVxKGEsIGIpOworICB9OworCisgIC8vIElzIGEgZ2l2ZW4gYXJyYXksIHN0cmluZywgb3Ig
b2JqZWN0IGVtcHR5PworICAvLyBBbiAiZW1wdHkiIG9iamVjdCBoYXMgbm8gZW51bWVyYWJsZSBv
d24tcHJvcGVydGllcy4KKyAgXy5pc0VtcHR5ID0gZnVuY3Rpb24ob2JqKSB7CisgICAgaWYgKG9i
aiA9PSBudWxsKSByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSAmJiAoXy5p
c0FycmF5KG9iaikgfHwgXy5pc1N0cmluZyhvYmopIHx8IF8uaXNBcmd1bWVudHMob2JqKSkpIHJl
dHVybiBvYmoubGVuZ3RoID09PSAwOworICAgIHJldHVybiBfLmtleXMob2JqKS5sZW5ndGggPT09
IDA7CisgIH07CisKKyAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIERPTSBlbGVtZW50PworICBfLmlz
RWxlbWVudCA9IGZ1bmN0aW9uKG9iaikgeworICAgIHJldHVybiAhIShvYmogJiYgb2JqLm5vZGVU
eXBlID09PSAxKTsKKyAgfTsKKworICAvLyBJcyBhIGdpdmVuIHZhbHVlIGFuIGFycmF5PworICAv
LyBEZWxlZ2F0ZXMgdG8gRUNNQTUncyBuYXRpdmUgQXJyYXkuaXNBcnJheQorICBfLmlzQXJyYXkg
PSBuYXRpdmVJc0FycmF5IHx8IGZ1bmN0aW9uKG9iaikgeworICAgIHJldHVybiB0b1N0cmluZy5j
YWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7CisgIH07CisKKyAgLy8gSXMgYSBnaXZlbiB2
YXJpYWJsZSBhbiBvYmplY3Q/CisgIF8uaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHsKKyAgICB2
YXIgdHlwZSA9IHR5cGVvZiBvYmo7CisgICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwg
dHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7CisgIH07CisKKyAgLy8gQWRkIHNvbWUgaXNUeXBl
IG1ldGhvZHM6IGlzQXJndW1lbnRzLCBpc0Z1bmN0aW9uLCBpc1N0cmluZywgaXNOdW1iZXIsIGlz
RGF0ZSwgaXNSZWdFeHAsIGlzRXJyb3IuCisgIF8uZWFjaChbJ0FyZ3VtZW50cycsICdGdW5jdGlv
bicsICdTdHJpbmcnLCAnTnVtYmVyJywgJ0RhdGUnLCAnUmVnRXhwJywgJ0Vycm9yJ10sIGZ1bmN0
aW9uKG5hbWUpIHsKKyAgICBfWydpcycgKyBuYW1lXSA9IGZ1bmN0aW9uKG9iaikgeworICAgICAg
cmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgJyArIG5hbWUgKyAnXSc7Cisg
ICAgfTsKKyAgfSk7CisKKyAgLy8gRGVmaW5lIGEgZmFsbGJhY2sgdmVyc2lvbiBvZiB0aGUgbWV0
aG9kIGluIGJyb3dzZXJzIChhaGVtLCBJRSA8IDkpLCB3aGVyZQorICAvLyB0aGVyZSBpc24ndCBh
bnkgaW5zcGVjdGFibGUgIkFyZ3VtZW50cyIgdHlwZS4KKyAgaWYgKCFfLmlzQXJndW1lbnRzKGFy
Z3VtZW50cykpIHsKKyAgICBfLmlzQXJndW1lbnRzID0gZnVuY3Rpb24ob2JqKSB7CisgICAgICBy
ZXR1cm4gXy5oYXMob2JqLCAnY2FsbGVlJyk7CisgICAgfTsKKyAgfQorCisgIC8vIE9wdGltaXpl
IGBpc0Z1bmN0aW9uYCBpZiBhcHByb3ByaWF0ZS4gV29yayBhcm91bmQgc29tZSB0eXBlb2YgYnVn
cyBpbiBvbGQgdjgsCisgIC8vIElFIDExICgjMTYyMSksIGFuZCBpbiBTYWZhcmkgOCAoIzE5Mjkp
LgorICBpZiAodHlwZW9mIC8uLyAhPSAnZnVuY3Rpb24nICYmIHR5cGVvZiBJbnQ4QXJyYXkgIT0g
J29iamVjdCcpIHsKKyAgICBfLmlzRnVuY3Rpb24gPSBmdW5jdGlvbihvYmopIHsKKyAgICAgIHJl
dHVybiB0eXBlb2Ygb2JqID09ICdmdW5jdGlvbicgfHwgZmFsc2U7CisgICAgfTsKKyAgfQorCisg
IC8vIElzIGEgZ2l2ZW4gb2JqZWN0IGEgZmluaXRlIG51bWJlcj8KKyAgXy5pc0Zpbml0ZSA9IGZ1
bmN0aW9uKG9iaikgeworICAgIHJldHVybiBpc0Zpbml0ZShvYmopICYmICFpc05hTihwYXJzZUZs
b2F0KG9iaikpOworICB9OworCisgIC8vIElzIHRoZSBnaXZlbiB2YWx1ZSBgTmFOYD8gKE5hTiBp
cyB0aGUgb25seSBudW1iZXIgd2hpY2ggZG9lcyBub3QgZXF1YWwgaXRzZWxmKS4KKyAgXy5pc05h
TiA9IGZ1bmN0aW9uKG9iaikgeworICAgIHJldHVybiBfLmlzTnVtYmVyKG9iaikgJiYgb2JqICE9
PSArb2JqOworICB9OworCisgIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBib29sZWFuPworICBfLmlz
Qm9vbGVhbiA9IGZ1bmN0aW9uKG9iaikgeworICAgIHJldHVybiBvYmogPT09IHRydWUgfHwgb2Jq
ID09PSBmYWxzZSB8fCB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEJvb2xlYW5dJzsK
KyAgfTsKKworICAvLyBJcyBhIGdpdmVuIHZhbHVlIGVxdWFsIHRvIG51bGw/CisgIF8uaXNOdWxs
ID0gZnVuY3Rpb24ob2JqKSB7CisgICAgcmV0dXJuIG9iaiA9PT0gbnVsbDsKKyAgfTsKKworICAv
LyBJcyBhIGdpdmVuIHZhcmlhYmxlIHVuZGVmaW5lZD8KKyAgXy5pc1VuZGVmaW5lZCA9IGZ1bmN0
aW9uKG9iaikgeworICAgIHJldHVybiBvYmogPT09IHZvaWQgMDsKKyAgfTsKKworICAvLyBTaG9y
dGN1dCBmdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHByb3Bl
cnR5IGRpcmVjdGx5CisgIC8vIG9uIGl0c2VsZiAoaW4gb3RoZXIgd29yZHMsIG5vdCBvbiBhIHBy
b3RvdHlwZSkuCisgIF8uaGFzID0gZnVuY3Rpb24ob2JqLCBrZXkpIHsKKyAgICByZXR1cm4gb2Jq
ICE9IG51bGwgJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7CisgIH07CisKKyAgLy8g
VXRpbGl0eSBGdW5jdGlvbnMKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0KKworICAvLyBSdW4gVW5k
ZXJzY29yZS5qcyBpbiAqbm9Db25mbGljdCogbW9kZSwgcmV0dXJuaW5nIHRoZSBgX2AgdmFyaWFi
bGUgdG8gaXRzCisgIC8vIHByZXZpb3VzIG93bmVyLiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRo
ZSBVbmRlcnNjb3JlIG9iamVjdC4KKyAgXy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7CisgICAg
cm9vdC5fID0gcHJldmlvdXNVbmRlcnNjb3JlOworICAgIHJldHVybiB0aGlzOworICB9OworCisg
IC8vIEtlZXAgdGhlIGlkZW50aXR5IGZ1bmN0aW9uIGFyb3VuZCBmb3IgZGVmYXVsdCBpdGVyYXRl
ZXMuCisgIF8uaWRlbnRpdHkgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIHJldHVybiB2YWx1ZTsK
KyAgfTsKKworICAvLyBQcmVkaWNhdGUtZ2VuZXJhdGluZyBmdW5jdGlvbnMuIE9mdGVuIHVzZWZ1
bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuCisgIF8uY29uc3RhbnQgPSBmdW5jdGlvbih2YWx1ZSkg
eworICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9Owor
ICB9OworCisgIF8ubm9vcCA9IGZ1bmN0aW9uKCl7fTsKKworICBfLnByb3BlcnR5ID0gcHJvcGVy
dHk7CisKKyAgLy8gR2VuZXJhdGVzIGEgZnVuY3Rpb24gZm9yIGEgZ2l2ZW4gb2JqZWN0IHRoYXQg
cmV0dXJucyBhIGdpdmVuIHByb3BlcnR5LgorICBfLnByb3BlcnR5T2YgPSBmdW5jdGlvbihvYmop
IHsKKyAgICByZXR1cm4gb2JqID09IG51bGwgPyBmdW5jdGlvbigpe30gOiBmdW5jdGlvbihrZXkp
IHsKKyAgICAgIHJldHVybiBvYmpba2V5XTsKKyAgICB9OworICB9OworCisgIC8vIFJldHVybnMg
YSBwcmVkaWNhdGUgZm9yIGNoZWNraW5nIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHNl
dCBvZgorICAvLyBga2V5OnZhbHVlYCBwYWlycy4KKyAgXy5tYXRjaGVyID0gXy5tYXRjaGVzID0g
ZnVuY3Rpb24oYXR0cnMpIHsKKyAgICBhdHRycyA9IF8uZXh0ZW5kT3duKHt9LCBhdHRycyk7Cisg
ICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikgeworICAgICAgcmV0dXJuIF8uaXNNYXRjaChvYmosIGF0
dHJzKTsKKyAgICB9OworICB9OworCisgIC8vIFJ1biBhIGZ1bmN0aW9uICoqbioqIHRpbWVzLgor
ICBfLnRpbWVzID0gZnVuY3Rpb24obiwgaXRlcmF0ZWUsIGNvbnRleHQpIHsKKyAgICB2YXIgYWNj
dW0gPSBBcnJheShNYXRoLm1heCgwLCBuKSk7CisgICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0
ZXJhdGVlLCBjb250ZXh0LCAxKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgYWNj
dW1baV0gPSBpdGVyYXRlZShpKTsKKyAgICByZXR1cm4gYWNjdW07CisgIH07CisKKyAgLy8gUmV0
dXJuIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiBtaW4gYW5kIG1heCAoaW5jbHVzaXZlKS4KKyAg
Xy5yYW5kb20gPSBmdW5jdGlvbihtaW4sIG1heCkgeworICAgIGlmIChtYXggPT0gbnVsbCkgewor
ICAgICAgbWF4ID0gbWluOworICAgICAgbWluID0gMDsKKyAgICB9CisgICAgcmV0dXJuIG1pbiAr
IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSk7CisgIH07CisKKyAg
Ly8gQSAocG9zc2libHkgZmFzdGVyKSB3YXkgdG8gZ2V0IHRoZSBjdXJyZW50IHRpbWVzdGFtcCBh
cyBhbiBpbnRlZ2VyLgorICBfLm5vdyA9IERhdGUubm93IHx8IGZ1bmN0aW9uKCkgeworICAgIHJl
dHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKKyAgfTsKKworICAgLy8gTGlzdCBvZiBIVE1MIGVu
dGl0aWVzIGZvciBlc2NhcGluZy4KKyAgdmFyIGVzY2FwZU1hcCA9IHsKKyAgICAnJic6ICcmYW1w
OycsCisgICAgJzwnOiAnJmx0OycsCisgICAgJz4nOiAnJmd0OycsCisgICAgJyInOiAnJnF1b3Q7
JywKKyAgICAiJyI6ICcmI3gyNzsnLAorICAgICdgJzogJyYjeDYwOycKKyAgfTsKKyAgdmFyIHVu
ZXNjYXBlTWFwID0gXy5pbnZlcnQoZXNjYXBlTWFwKTsKKworICAvLyBGdW5jdGlvbnMgZm9yIGVz
Y2FwaW5nIGFuZCB1bmVzY2FwaW5nIHN0cmluZ3MgdG8vZnJvbSBIVE1MIGludGVycG9sYXRpb24u
CisgIHZhciBjcmVhdGVFc2NhcGVyID0gZnVuY3Rpb24obWFwKSB7CisgICAgdmFyIGVzY2FwZXIg
PSBmdW5jdGlvbihtYXRjaCkgeworICAgICAgcmV0dXJuIG1hcFttYXRjaF07CisgICAgfTsKKyAg
ICAvLyBSZWdleGVzIGZvciBpZGVudGlmeWluZyBhIGtleSB0aGF0IG5lZWRzIHRvIGJlIGVzY2Fw
ZWQKKyAgICB2YXIgc291cmNlID0gJyg/OicgKyBfLmtleXMobWFwKS5qb2luKCd8JykgKyAnKSc7
CisgICAgdmFyIHRlc3RSZWdleHAgPSBSZWdFeHAoc291cmNlKTsKKyAgICB2YXIgcmVwbGFjZVJl
Z2V4cCA9IFJlZ0V4cChzb3VyY2UsICdnJyk7CisgICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmluZykg
eworICAgICAgc3RyaW5nID0gc3RyaW5nID09IG51bGwgPyAnJyA6ICcnICsgc3RyaW5nOworICAg
ICAgcmV0dXJuIHRlc3RSZWdleHAudGVzdChzdHJpbmcpID8gc3RyaW5nLnJlcGxhY2UocmVwbGFj
ZVJlZ2V4cCwgZXNjYXBlcikgOiBzdHJpbmc7CisgICAgfTsKKyAgfTsKKyAgXy5lc2NhcGUgPSBj
cmVhdGVFc2NhcGVyKGVzY2FwZU1hcCk7CisgIF8udW5lc2NhcGUgPSBjcmVhdGVFc2NhcGVyKHVu
ZXNjYXBlTWFwKTsKKworICAvLyBJZiB0aGUgdmFsdWUgb2YgdGhlIG5hbWVkIGBwcm9wZXJ0eWAg
aXMgYSBmdW5jdGlvbiB0aGVuIGludm9rZSBpdCB3aXRoIHRoZQorICAvLyBgb2JqZWN0YCBhcyBj
b250ZXh0OyBvdGhlcndpc2UsIHJldHVybiBpdC4KKyAgXy5yZXN1bHQgPSBmdW5jdGlvbihvYmpl
Y3QsIHByb3BlcnR5LCBmYWxsYmFjaykgeworICAgIHZhciB2YWx1ZSA9IG9iamVjdCA9PSBudWxs
ID8gdm9pZCAwIDogb2JqZWN0W3Byb3BlcnR5XTsKKyAgICBpZiAodmFsdWUgPT09IHZvaWQgMCkg
eworICAgICAgdmFsdWUgPSBmYWxsYmFjazsKKyAgICB9CisgICAgcmV0dXJuIF8uaXNGdW5jdGlv
bih2YWx1ZSkgPyB2YWx1ZS5jYWxsKG9iamVjdCkgOiB2YWx1ZTsKKyAgfTsKKworICAvLyBHZW5l
cmF0ZSBhIHVuaXF1ZSBpbnRlZ2VyIGlkICh1bmlxdWUgd2l0aGluIHRoZSBlbnRpcmUgY2xpZW50
IHNlc3Npb24pLgorICAvLyBVc2VmdWwgZm9yIHRlbXBvcmFyeSBET00gaWRzLgorICB2YXIgaWRD
b3VudGVyID0gMDsKKyAgXy51bmlxdWVJZCA9IGZ1bmN0aW9uKHByZWZpeCkgeworICAgIHZhciBp
ZCA9ICsraWRDb3VudGVyICsgJyc7CisgICAgcmV0dXJuIHByZWZpeCA/IHByZWZpeCArIGlkIDog
aWQ7CisgIH07CisKKyAgLy8gQnkgZGVmYXVsdCwgVW5kZXJzY29yZSB1c2VzIEVSQi1zdHlsZSB0
ZW1wbGF0ZSBkZWxpbWl0ZXJzLCBjaGFuZ2UgdGhlCisgIC8vIGZvbGxvd2luZyB0ZW1wbGF0ZSBz
ZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy4KKyAgXy50ZW1wbGF0ZVNldHRp
bmdzID0geworICAgIGV2YWx1YXRlICAgIDogLzwlKFtcc1xTXSs/KSU+L2csCisgICAgaW50ZXJw
b2xhdGUgOiAvPCU9KFtcc1xTXSs/KSU+L2csCisgICAgZXNjYXBlICAgICAgOiAvPCUtKFtcc1xT
XSs/KSU+L2cKKyAgfTsKKworICAvLyBXaGVuIGN1c3RvbWl6aW5nIGB0ZW1wbGF0ZVNldHRpbmdz
YCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuCisgIC8vIGludGVycG9sYXRpb24sIGV2
YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQgaXMKKyAgLy8gZ3Vh
cmFudGVlZCBub3QgdG8gbWF0Y2guCisgIHZhciBub01hdGNoID0gLyguKV4vOworCisgIC8vIENl
cnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBw
dXQgaW50byBhCisgIC8vIHN0cmluZyBsaXRlcmFsLgorICB2YXIgZXNjYXBlcyA9IHsKKyAgICAi
JyI6ICAgICAgIiciLAorICAgICdcXCc6ICAgICAnXFwnLAorICAgICdccic6ICAgICAncicsCisg
ICAgJ1xuJzogICAgICduJywKKyAgICAnXHUyMDI4JzogJ3UyMDI4JywKKyAgICAnXHUyMDI5Jzog
J3UyMDI5JworICB9OworCisgIHZhciBlc2NhcGVyID0gL1xcfCd8XHJ8XG58XHUyMDI4fFx1MjAy
OS9nOworCisgIHZhciBlc2NhcGVDaGFyID0gZnVuY3Rpb24obWF0Y2gpIHsKKyAgICByZXR1cm4g
J1xcJyArIGVzY2FwZXNbbWF0Y2hdOworICB9OworCisgIC8vIEphdmFTY3JpcHQgbWljcm8tdGVt
cGxhdGluZywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uCisgIC8vIFVu
ZGVyc2NvcmUgdGVtcGxhdGluZyBoYW5kbGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2
ZXMgd2hpdGVzcGFjZSwKKyAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4g
aW50ZXJwb2xhdGVkIGNvZGUuCisgIC8vIE5COiBgb2xkU2V0dGluZ3NgIG9ubHkgZXhpc3RzIGZv
ciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKyAgXy50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHRleHQs
IHNldHRpbmdzLCBvbGRTZXR0aW5ncykgeworICAgIGlmICghc2V0dGluZ3MgJiYgb2xkU2V0dGlu
Z3MpIHNldHRpbmdzID0gb2xkU2V0dGluZ3M7CisgICAgc2V0dGluZ3MgPSBfLmRlZmF1bHRzKHt9
LCBzZXR0aW5ncywgXy50ZW1wbGF0ZVNldHRpbmdzKTsKKworICAgIC8vIENvbWJpbmUgZGVsaW1p
dGVycyBpbnRvIG9uZSByZWd1bGFyIGV4cHJlc3Npb24gdmlhIGFsdGVybmF0aW9uLgorICAgIHZh
ciBtYXRjaGVyID0gUmVnRXhwKFsKKyAgICAgIChzZXR0aW5ncy5lc2NhcGUgfHwgbm9NYXRjaCku
c291cmNlLAorICAgICAgKHNldHRpbmdzLmludGVycG9sYXRlIHx8IG5vTWF0Y2gpLnNvdXJjZSwK
KyAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2UKKyAgICBdLmpvaW4o
J3wnKSArICd8JCcsICdnJyk7CisKKyAgICAvLyBDb21waWxlIHRoZSB0ZW1wbGF0ZSBzb3VyY2Us
IGVzY2FwaW5nIHN0cmluZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5LgorICAgIHZhciBpbmRleCA9
IDA7CisgICAgdmFyIHNvdXJjZSA9ICJfX3ArPSciOworICAgIHRleHQucmVwbGFjZShtYXRjaGVy
LCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVhdGUsIG9mZnNldCkg
eworICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCkucmVwbGFjZShlc2Nh
cGVyLCBlc2NhcGVDaGFyKTsKKyAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoOwor
CisgICAgICBpZiAoZXNjYXBlKSB7CisgICAgICAgIHNvdXJjZSArPSAiJytcbigoX190PSgiICsg
ZXNjYXBlICsgIikpPT1udWxsPycnOl8uZXNjYXBlKF9fdCkpK1xuJyI7CisgICAgICB9IGVsc2Ug
aWYgKGludGVycG9sYXRlKSB7CisgICAgICAgIHNvdXJjZSArPSAiJytcbigoX190PSgiICsgaW50
ZXJwb2xhdGUgKyAiKSk9PW51bGw/Jyc6X190KStcbiciOworICAgICAgfSBlbHNlIGlmIChldmFs
dWF0ZSkgeworICAgICAgICBzb3VyY2UgKz0gIic7XG4iICsgZXZhbHVhdGUgKyAiXG5fX3ArPSci
OworICAgICAgfQorCisgICAgICAvLyBBZG9iZSBWTXMgbmVlZCB0aGUgbWF0Y2ggcmV0dXJuZWQg
dG8gcHJvZHVjZSB0aGUgY29ycmVjdCBvZmZlc3QuCisgICAgICByZXR1cm4gbWF0Y2g7CisgICAg
fSk7CisgICAgc291cmNlICs9ICInO1xuIjsKKworICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90
IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuCisgICAgaWYgKCFz
ZXR0aW5ncy52YXJpYWJsZSkgc291cmNlID0gJ3dpdGgob2JqfHx7fSl7XG4nICsgc291cmNlICsg
J31cbic7CisKKyAgICBzb3VyY2UgPSAidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlw
ZS5qb2luLCIgKworICAgICAgInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVu
dHMsJycpO307XG4iICsKKyAgICAgIHNvdXJjZSArICdyZXR1cm4gX19wO1xuJzsKKworICAgIHRy
eSB7CisgICAgICB2YXIgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdzLnZhcmlhYmxlIHx8
ICdvYmonLCAnXycsIHNvdXJjZSk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgZS5zb3VyY2Ug
PSBzb3VyY2U7CisgICAgICB0aHJvdyBlOworICAgIH0KKworICAgIHZhciB0ZW1wbGF0ZSA9IGZ1
bmN0aW9uKGRhdGEpIHsKKyAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfKTsK
KyAgICB9OworCisgICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgc291cmNlIGFzIGEgY29udmVu
aWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLgorICAgIHZhciBhcmd1bWVudCA9IHNldHRpbmdzLnZh
cmlhYmxlIHx8ICdvYmonOworICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgYXJn
dW1lbnQgKyAnKXtcbicgKyBzb3VyY2UgKyAnfSc7CisKKyAgICByZXR1cm4gdGVtcGxhdGU7Cisg
IH07CisKKyAgLy8gQWRkIGEgImNoYWluIiBmdW5jdGlvbi4gU3RhcnQgY2hhaW5pbmcgYSB3cmFw
cGVkIFVuZGVyc2NvcmUgb2JqZWN0LgorICBfLmNoYWluID0gZnVuY3Rpb24ob2JqKSB7CisgICAg
dmFyIGluc3RhbmNlID0gXyhvYmopOworICAgIGluc3RhbmNlLl9jaGFpbiA9IHRydWU7CisgICAg
cmV0dXJuIGluc3RhbmNlOworICB9OworCisgIC8vIE9PUAorICAvLyAtLS0tLS0tLS0tLS0tLS0K
KyAgLy8gSWYgVW5kZXJzY29yZSBpcyBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgaXQgcmV0dXJucyBh
IHdyYXBwZWQgb2JqZWN0IHRoYXQKKyAgLy8gY2FuIGJlIHVzZWQgT08tc3R5bGUuIFRoaXMgd3Jh
cHBlciBob2xkcyBhbHRlcmVkIHZlcnNpb25zIG9mIGFsbCB0aGUKKyAgLy8gdW5kZXJzY29yZSBm
dW5jdGlvbnMuIFdyYXBwZWQgb2JqZWN0cyBtYXkgYmUgY2hhaW5lZC4KKworICAvLyBIZWxwZXIg
ZnVuY3Rpb24gdG8gY29udGludWUgY2hhaW5pbmcgaW50ZXJtZWRpYXRlIHJlc3VsdHMuCisgIHZh
ciByZXN1bHQgPSBmdW5jdGlvbihpbnN0YW5jZSwgb2JqKSB7CisgICAgcmV0dXJuIGluc3RhbmNl
Ll9jaGFpbiA/IF8ob2JqKS5jaGFpbigpIDogb2JqOworICB9OworCisgIC8vIEFkZCB5b3VyIG93
biBjdXN0b20gZnVuY3Rpb25zIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC4KKyAgXy5taXhpbiA9
IGZ1bmN0aW9uKG9iaikgeworICAgIF8uZWFjaChfLmZ1bmN0aW9ucyhvYmopLCBmdW5jdGlvbihu
YW1lKSB7CisgICAgICB2YXIgZnVuYyA9IF9bbmFtZV0gPSBvYmpbbmFtZV07CisgICAgICBfLnBy
b3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgYXJncyA9IFt0aGlzLl93
cmFwcGVkXTsKKyAgICAgICAgcHVzaC5hcHBseShhcmdzLCBhcmd1bWVudHMpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0KHRoaXMsIGZ1bmMuYXBwbHkoXywgYXJncykpOworICAgICAgfTsKKyAgICB9
KTsKKyAgfTsKKworICAvLyBBZGQgYWxsIG9mIHRoZSBVbmRlcnNjb3JlIGZ1bmN0aW9ucyB0byB0
aGUgd3JhcHBlciBvYmplY3QuCisgIF8ubWl4aW4oXyk7CisKKyAgLy8gQWRkIGFsbCBtdXRhdG9y
IEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci4KKyAgXy5lYWNoKFsncG9wJywgJ3B1c2gn
LCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0J10sIGZ1bmN0
aW9uKG5hbWUpIHsKKyAgICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTsKKyAgICBfLnBy
b3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIG9iaiA9IHRoaXMuX3dyYXBw
ZWQ7CisgICAgICBtZXRob2QuYXBwbHkob2JqLCBhcmd1bWVudHMpOworICAgICAgaWYgKChuYW1l
ID09PSAnc2hpZnQnIHx8IG5hbWUgPT09ICdzcGxpY2UnKSAmJiBvYmoubGVuZ3RoID09PSAwKSBk
ZWxldGUgb2JqWzBdOworICAgICAgcmV0dXJuIHJlc3VsdCh0aGlzLCBvYmopOworICAgIH07Cisg
IH0pOworCisgIC8vIEFkZCBhbGwgYWNjZXNzb3IgQXJyYXkgZnVuY3Rpb25zIHRvIHRoZSB3cmFw
cGVyLgorICBfLmVhY2goWydjb25jYXQnLCAnam9pbicsICdzbGljZSddLCBmdW5jdGlvbihuYW1l
KSB7CisgICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07CisgICAgXy5wcm90b3R5cGVb
bmFtZV0gPSBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiByZXN1bHQodGhpcywgbWV0aG9kLmFw
cGx5KHRoaXMuX3dyYXBwZWQsIGFyZ3VtZW50cykpOworICAgIH07CisgIH0pOworCisgIC8vIEV4
dHJhY3RzIHRoZSByZXN1bHQgZnJvbSBhIHdyYXBwZWQgYW5kIGNoYWluZWQgb2JqZWN0LgorICBf
LnByb3RvdHlwZS52YWx1ZSA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLl93cmFwcGVk
OworICB9OworCisgIC8vIFByb3ZpZGUgdW53cmFwcGluZyBwcm94eSBmb3Igc29tZSBtZXRob2Rz
IHVzZWQgaW4gZW5naW5lIG9wZXJhdGlvbnMKKyAgLy8gc3VjaCBhcyBhcml0aG1ldGljIGFuZCBK
U09OIHN0cmluZ2lmaWNhdGlvbi4KKyAgXy5wcm90b3R5cGUudmFsdWVPZiA9IF8ucHJvdG90eXBl
LnRvSlNPTiA9IF8ucHJvdG90eXBlLnZhbHVlOworCisgIF8ucHJvdG90eXBlLnRvU3RyaW5nID0g
ZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuICcnICsgdGhpcy5fd3JhcHBlZDsKKyAgfTsKKworICAv
LyBBTUQgcmVnaXN0cmF0aW9uIGhhcHBlbnMgYXQgdGhlIGVuZCBmb3IgY29tcGF0aWJpbGl0eSB3
aXRoIEFNRCBsb2FkZXJzCisgIC8vIHRoYXQgbWF5IG5vdCBlbmZvcmNlIG5leHQtdHVybiBzZW1h
bnRpY3Mgb24gbW9kdWxlcy4gRXZlbiB0aG91Z2ggZ2VuZXJhbAorICAvLyBwcmFjdGljZSBmb3Ig
QU1EIHJlZ2lzdHJhdGlvbiBpcyB0byBiZSBhbm9ueW1vdXMsIHVuZGVyc2NvcmUgcmVnaXN0ZXJz
CisgIC8vIGFzIGEgbmFtZWQgbW9kdWxlIGJlY2F1c2UsIGxpa2UgalF1ZXJ5LCBpdCBpcyBhIGJh
c2UgbGlicmFyeSB0aGF0IGlzCisgIC8vIHBvcHVsYXIgZW5vdWdoIHRvIGJlIGJ1bmRsZWQgaW4g
YSB0aGlyZCBwYXJ0eSBsaWIsIGJ1dCBub3QgYmUgcGFydCBvZgorICAvLyBhbiBBTUQgbG9hZCBy
ZXF1ZXN0LiBUaG9zZSBjYXNlcyBjb3VsZCBnZW5lcmF0ZSBhbiBlcnJvciB3aGVuIGFuCisgIC8v
IGFub255bW91cyBkZWZpbmUoKSBpcyBjYWxsZWQgb3V0c2lkZSBvZiBhIGxvYWRlciByZXF1ZXN0
LgorICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7Cisg
ICAgZGVmaW5lKCd1bmRlcnNjb3JlJywgW10sIGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIF87
CisgICAgfSk7CisgIH0KK30uY2FsbCh0aGlzKSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9i
YWNrYm9uZS9wYWNrYWdlLmpzb24gYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9iYWNrYm9uZS9wYWNrYWdlLmpzb24K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uODIzNjZjZmM2M2U5NjM2MzU5ZWVmYmQ4MTNjNDJkOGZjNTg4M2NiYgotLS0g
L2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2JhY2tib25lL3BhY2thZ2UuanNvbgpAQCAtMCww
ICsxLDEwIEBACit7CisgICJwcml2YXRlIjogdHJ1ZSwKKyAgImRlcGVuZGVuY2llcyI6IHsKKyAg
ICAiYmFja2JvbmUiOiAiXjEuMy4zIiwKKyAgICAianF1ZXJ5IjogIl4zLjEuMSIsCisgICAgInRv
ZG9tdmMtYXBwLWNzcyI6ICJeMi4wLjAiLAorICAgICJ0b2RvbXZjLWNvbW1vbiI6ICJeMS4wLjEi
LAorICAgICJ1bmRlcnNjb3JlIjogIl4xLjcuMCIKKyAgfQorfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>