<?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>132727</bug_id>
          
          <creation_ts>2014-05-08 22:45:33 -0700</creation_ts>
          <short_desc>DYEBench should use TodoMVC to test FlightJS for consistency</short_desc>
          <delta_ts>2014-05-08 23:01:31 -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>528+ (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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>kling</cc>
    
    <cc>mjs</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1007896</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-05-08 22:45:33 -0700</bug_when>
    <thetext>Now that TodoMVC app has a FightJS example, we should just use that instead of one off mail client demo app.

We can add a variety of web apps in v2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007898</commentid>
    <comment_count>1</comment_count>
      <attachid>231132</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-05-08 22:55:44 -0700</bug_when>
    <thetext>Created attachment 231132
Adds FlightJS TodoMVC and disables MailClient demo app by default</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007900</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-05-08 23:01:31 -0700</bug_when>
    <thetext>Committed r168521: &lt;http://trac.webkit.org/changeset/168521&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231132</attachid>
            <date>2014-05-08 22:55:44 -0700</date>
            <delta_ts>2014-05-08 23:00:29 -0700</delta_ts>
            <desc>Adds FlightJS TodoMVC and disables MailClient demo app by default</desc>
            <filename>bug-132727-20140508225522.patch</filename>
            <type>text/plain</type>
            <size>701017</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjg1MjApCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBACisyMDE0LTA1LTA4ICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIERZRUJlbmNoIHNob3Vs
ZCB1c2UgVG9kb01WQyB0byB0ZXN0IEZsaWdodEpTIGZvciBjb25zaXN0ZW5jeQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMyNzI3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgdGVzdCBzdWl0ZSBm
b3IgdGhlIEZsaWdodEpTIHZlcnNpb24gb2YgVG9kb01WQywgYW5kIGRpc2FibGUgRmxpZ2h0SlMt
TWFpbENsaWVudCBieSBkZWZhdWx0LgorCisgICAgICAgIEkgaW5pdGlhbGx5IGludGVuZGVkIHRv
IGluY2x1ZGUgYSB3aWRlciB2YXJpZXR5IG9mIGRlbW8gYXBwcyBpbiBEWUVCZW5jaAorICAgICAg
ICBidXQgdGhhdCdzIG5vdCBoYXBwZW5pbmcgYW55IHRpbWUgc29vbiBzbyBsZXQgdXMgdXNlIFRv
ZG9NVkMgZm9yIGFsbCBmcmFtZXdvcmtzIGZvciBub3cuCisKKyAgICAgICAgV2UgY2FuIGFkZCBt
b3JlIGRlbW8gYXBwcyBpbiB2Mi4KKworICAgICAgICAqIERvWW91RXZlbkJlbmNoL0Z1bGwuaHRt
bDogSW5jcmVtZW50IHRoZSB2ZXJzaW9uIHRvIDAuMTAuCisgICAgICAgICogRG9Zb3VFdmVuQmVu
Y2gvSW50ZXJhY3RpdmVSdW5uZXIuaHRtbDogRG9uJ3QgY2hlY2sgZGlzYWJsZWQgc3VpdGVzIGJ5
IGRlZmF1bHQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3Rlc3RzLmpzOgor
ICAgICAgICAqIERvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZj
L2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0OiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5C
ZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC8uZ2l0aWdu
b3JlOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC8uanNoaW50cmM6IEFkZGVkLgorICAgICAgICAqIERv
WW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L2FwcDogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMv
ZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lv
dUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9h
cHAvanMvYXBwLmpzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvZGF0YTogQWRkZWQuCisg
ICAgICAgICogRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQvYXBwL2pzL2RhdGEvc3RhdHMuanM6IEFkZGVkLgorICAgICAgICAqIERvWW91
RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Fw
cC9qcy9kYXRhL3RvZG9zLmpzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvbWFpbi5qczog
QWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL3N0b3JlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBE
b1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdo
dC9hcHAvanMvdWk6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90
b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS9tYWluX3NlbGVjdG9y
LmpzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvdWkvbmV3X2l0ZW0uanM6IEFkZGVkLgor
ICAgICAgICAqIERvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L2FwcC9qcy91aS9zdGF0cy5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VF
dmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBw
L2pzL3VpL3RvZG9fbGlzdC5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvcmVz
b3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL3VpL3RvZ2ds
ZV9hbGwuanM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS93aXRoX2ZpbHRlcnMuanM6
IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91dGlscy5qczogQWRkZWQuCisgICAgICAgICog
RG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGln
aHQvYXBwL3RlbXBsYXRlczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL3RlbXBsYXRlcy9zdGF0
cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvdGVtcGxhdGVzL3RvZG8uaHRtbDogQWRk
ZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvYm93ZXIuanNvbjogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVu
QmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJf
Y29tcG9uZW50czogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3Rv
ZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9kZXBvdDog
QWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9kZXBvdC9kZXBvdC5qczogQWRk
ZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9lczUtc2hpbTogQWRkZWQuCisgICAg
ICAgICogRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxl
cy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9lczUtc2hpbS9lczUtc2hhbS5qczogQWRkZWQuCisg
ICAgICAgICogRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9lczUtc2hpbS9lczUtc2hpbS5qczogQWRkZWQu
CisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQ6IEFkZGVkLgorICAgICAgICAq
IERvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxp
Z2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xpYjogQWRkZWQuCisgICAgICAgICogRG9Zb3VF
dmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93
ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2FkdmljZS5qczogQWRkZWQuCisgICAgICAgICogRG9Z
b3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
Ym93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2Jhc2UuanM6IEFkZGVkLgorICAgICAgICAqIERv
WW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9jb21wb25lbnQuanM6IEFkZGVkLgorICAgICAg
ICAqIERvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMv
ZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9jb21wb3NlLmpzOiBBZGRlZC4KKyAg
ICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1w
bGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9saWIvZGVidWcuanM6IEFkZGVkLgor
ICAgICAgICAqIERvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9pbmRleC5qczogQWRkZWQu
CisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2xvZ2dlci5qczogQWRk
ZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL3JlZ2lzdHJ5Lmpz
OiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBl
bmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9saWIvdXRpbHMu
anM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2Rl
cGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvanF1ZXJ5OiBBZGRlZC4K
KyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2pxdWVyeS9qcXVlcnkuanM6IEFkZGVkLgor
ICAgICAgICAqIERvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvcmVxdWlyZWpzOiBBZGRlZC4KKyAgICAgICAg
KiBEb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9ib3dlcl9jb21wb25lbnRzL3JlcXVpcmVqcy10ZXh0OiBBZGRlZC4KKyAgICAgICAgKiBE
b1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdo
dC9ib3dlcl9jb21wb25lbnRzL3JlcXVpcmVqcy10ZXh0L3RleHQuanM6IEFkZGVkLgorICAgICAg
ICAqIERvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMv
ZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvcmVxdWlyZWpzL3JlcXVpcmUuanM6IEFkZGVkLgorICAg
ICAgICAqIERvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBs
ZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb246IEFkZGVkLgorICAgICAg
ICAqIERvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMv
ZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFzZS5jc3M6IEFkZGVkLgor
ICAgICAgICAqIERvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFzZS5qczogQWRk
ZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iZy5wbmc6
IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2luZGV4Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIERvWW91
RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2th
cm1hLmNvbmYuanM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90
b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3BhY2thZ2UuanNvbjogQWRkZWQuCisg
ICAgICAgICogRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQvcmVhZG1lLm1kOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9y
ZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0OiBBZGRlZC4K
KyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodC90ZXN0Ly5qc2hpbnRyYzogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVu
QmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9m
aXh0dXJlOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L2ZpeHR1cmUvZm9vdGVyLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L3Rlc3QvZml4dHVyZS9uZXdfdG9kby5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1w
bGVzL2ZsaWdodC90ZXN0L2ZpeHR1cmUvdG9nZ2xlX2FsbC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBEb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC90ZXN0L21vY2s6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL3Jlc291cmNl
cy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3Rlc3QvbW9jay9kYXRhc3RvcmUu
anM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2Rl
cGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3Rlc3Qvc3BlYzogQWRkZWQuCisgICAgICAgICogRG9Z
b3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
dGVzdC9zcGVjL2RhdGE6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL3Jlc291cmNl
cy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3Rlc3Qvc3BlYy9kYXRhL3N0YXRz
X3NwZWMuanM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3Rlc3Qvc3BlYy9kYXRhL3RvZG9zX3NwZWMu
anM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2Rl
cGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3Rlc3Qvc3BlYy91aTogQWRkZWQuCisgICAgICAgICog
RG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGln
aHQvdGVzdC9zcGVjL3VpL25ld19pdGVtX3NwZWMuanM6IEFkZGVkLgorICAgICAgICAqIERvWW91
RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3Rl
c3Qvc3BlYy91aS9zdGF0c19zcGVjLmpzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5j
aC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3NwZWMv
dWkvdG9nZ2xlX2FsbF9zcGVjLmpzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9y
ZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3Rlc3QtbWFp
bi5qczogQWRkZWQuCisKIDIwMTQtMDUtMDcgIE1hbnVlbCBSZWdvIENhc2Fzbm92YXMgIDxyZWdv
QGlnYWxpYS5jb20+CiAKICAgICAgICAgW0NTUyBHcmlkIExheW91dF0gUmVtb3ZlIHJ1bnRpbWUg
ZmVhdHVyZQpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9GdWxsLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9GdWxsLmh0bWwJ
KHJldmlzaW9uIDE2ODUxNCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvRnVs
bC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogPCFET0NUWVBFIGh0bWw+CiA8
aHRtbD4KIDxoZWFkPgotPHRpdGxlPkRvWW91RXZlbkJlbmNoIHYwLjk8L3RpdGxlPgorPHRpdGxl
PkRvWW91RXZlbkJlbmNoIHYwLjEwPC90aXRsZT4KIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiBj
YXB0aW9uIHsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyBmb250LWZhbWlseTogc2Fucy1zZXJpZjsg
Zm9udC1zaXplOiAxZW07IGZvbnQtd2VpZ2h0OiBib2xkOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB9
CiAjcHJvZ3Jlc3NDb250YWluZXIgeyBwYWRkaW5nOiA2MDVweCAwIDEwcHggMDsgd2lkdGg6IDgw
MHB4OyB9CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL0ludGVyYWN0aXZl
UnVubmVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5j
aC9JbnRlcmFjdGl2ZVJ1bm5lci5odG1sCShyZXZpc2lvbiAxNjg1MTQpCisrKyBQZXJmb3JtYW5j
ZVRlc3RzL0RvWW91RXZlbkJlbmNoL0ludGVyYWN0aXZlUnVubmVyLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDcgQEAgZnVuY3Rpb24gY3JlYXRlVUlGb3JTdWl0ZXMoc3VpdGVzLCBv
bnN0ZQogICAgICAgICB2YXIgY2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1
dCcpOwogICAgICAgICBjaGVja2JveC5pZCA9IHN1aXRlLm5hbWU7CiAgICAgICAgIGNoZWNrYm94
LnR5cGUgPSAnY2hlY2tib3gnOwotICAgICAgICBjaGVja2JveC5jaGVja2VkID0gdHJ1ZTsKKyAg
ICAgICAgY2hlY2tib3guY2hlY2tlZCA9ICFzdWl0ZS5kaXNhYmxlZDsKICAgICAgICAgY2hlY2ti
b3gub25jaGFuZ2UgPSAoZnVuY3Rpb24gKHN1aXRlLCBjaGVja2JveCkgeyByZXR1cm4gZnVuY3Rp
b24gKCkgeyBzdWl0ZS5kaXNhYmxlZCA9ICFjaGVja2JveC5jaGVja2VkOyB9IH0pKHN1aXRlLCBj
aGVja2JveCk7CiAgICAgICAgIGNoZWNrYm94Lm9uY2hhbmdlKCk7CiAgICAgICAgIGNoZWNrYm94
ZXMucHVzaChjaGVja2JveCk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNo
L3Jlc291cmNlcy90ZXN0cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91
RXZlbkJlbmNoL3Jlc291cmNlcy90ZXN0cy5qcwkocmV2aXNpb24gMTY4NTE0KQorKysgUGVyZm9y
bWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdGVzdHMuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTIyMyw4ICsyMjMsNDQgQEAgU3VpdGVzLnB1c2goewogICAgIF0KIH0pOwogCitTdWl0
ZXMucHVzaCh7CisgICAgbmFtZTogJ0ZsaWdodEpTLVRvZG9NVkMnLAorICAgIHVybDogJ3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvaW5kZXguaHRtbCcsCisgICAgcHJlcGFyZTog
ZnVuY3Rpb24gKHJ1bm5lciwgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7CisgICAg
ICAgIHJldHVybiBydW5uZXIud2FpdEZvckVsZW1lbnQoJyNhcHBJc1JlYWR5JykudGhlbihmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgbmV3VG9kbyA9IGNvbnRlbnREb2N1bWVudC5xdWVy
eVNlbGVjdG9yKCcjbmV3LXRvZG8nKTsKKyAgICAgICAgICAgIG5ld1RvZG8uZm9jdXMoKTsKKyAg
ICAgICAgICAgIHJldHVybiBuZXdUb2RvOworICAgICAgICB9KTs7CisgICAgfSwKKyAgICB0ZXN0
czogWworICAgICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ0FkZGluZycgKyBudW1iZXJPZkl0
ZW1zVG9BZGQgKyAnSXRlbXMnLCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29u
dGVudERvY3VtZW50KSB7CisgICAgICAgICAgICB2YXIgdG9kb212YyA9IGNvbnRlbnRXaW5kb3cu
dG9kb212YzsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtc1Rv
QWRkOyBpKyspIHsKKyAgICAgICAgICAgICAgICBuZXdUb2RvLnZhbHVlID0gJ1NvbWV0aGluZyB0
byBkbyAnICsgaTsKKworICAgICAgICAgICAgICAgIHZhciBrZXlkb3duRXZlbnQgPSBkb2N1bWVu
dC5jcmVhdGVFdmVudCgnRXZlbnQnKTsKKyAgICAgICAgICAgICAgICBrZXlkb3duRXZlbnQuaW5p
dEV2ZW50KCdrZXlkb3duJywgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAga2V5ZG93bkV2
ZW50LndoaWNoID0gMTM7IC8vIFZLX0VOVEVSCisgICAgICAgICAgICAgICAgbmV3VG9kby5kaXNw
YXRjaEV2ZW50KGtleWRvd25FdmVudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pLAorICAg
ICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ0NvbXBsZXRpbmdBbGxJdGVtcycsIGZ1bmN0aW9u
IChuZXdUb2RvLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKKyAgICAgICAgICAg
IHZhciBjaGVja2JveGVzID0gY29udGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50b2dn
bGUnKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hlY2tib3hlcy5sZW5ndGg7
IGkrKykKKyAgICAgICAgICAgICAgICBjaGVja2JveGVzW2ldLmNsaWNrKCk7CisgICAgICAgIH0p
LAorICAgICAgICBuZXcgQmVuY2htYXJrVGVzdFN0ZXAoJ0RlbGV0aW5nQWxsSXRlbXMnLCBmdW5j
dGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7CisgICAgICAg
ICAgICB2YXIgZGVsZXRlQnV0dG9ucyA9IGNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxs
KCcuZGVzdHJveScpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxldGVCdXR0
b25zLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIGRlbGV0ZUJ1dHRvbnNbaV0uY2xpY2so
KTsKKyAgICAgICAgfSksCisgICAgXQorfSk7CisKIHZhciBhY3Rpb25Db3VudCA9IDUwOwogU3Vp
dGVzLnB1c2goeworICAgIGRpc2FibGVkOiB0cnVlLAogICAgIG5hbWU6ICdGbGlnaHRKUy1NYWls
Q2xpZW50JywKICAgICB1cmw6ICdmbGlnaHRqcy1leGFtcGxlLWFwcC9pbmRleC5odG1sJywKICAg
ICBwcmVwYXJlOiBmdW5jdGlvbiAocnVubmVyLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1l
bnQpIHsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3Rv
ZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvLmdpdGlnbm9yZQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0Ly5naXRpZ25vcmUJKHJldmlzaW9uIDApCisrKyBQZXJmb3Jt
YW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0Ly5naXRpZ25vcmUJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSBAQAorbm9k
ZV9tb2R1bGVzLwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJj
ZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC8uanNoaW50cmMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC8uanNoaW50cmMJKHJldmlzaW9uIDApCisrKyBQZXJm
b3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0Ly5qc2hpbnRyYwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzIEBA
Cit7CisJIm5vZGUiOiB0cnVlLAorCSJicm93c2VyIjogdHJ1ZSwKKwkiZXNuZXh0IjogdHJ1ZSwK
KwkiYml0d2lzZSI6IHRydWUsCisJImNhbWVsY2FzZSI6IHRydWUsCisJImN1cmx5IjogdHJ1ZSwK
KwkiZXFlcWVxIjogdHJ1ZSwKKwkiaW1tZWQiOiB0cnVlLAorCSJpbmRlbnQiOiA0LAorCSJsYXRl
ZGVmIjogdHJ1ZSwKKwkibmV3Y2FwIjogdHJ1ZSwKKwkibm9hcmciOiB0cnVlLAorCSJxdW90bWFy
ayI6ICJzaW5nbGUiLAorCSJyZWdleHAiOiB0cnVlLAorCSJ1bmRlZiI6IHRydWUsCisJInVudXNl
ZCI6IHRydWUsCisJInN0cmljdCI6IHRydWUsCisJInRyYWlsaW5nIjogdHJ1ZSwKKwkic21hcnR0
YWJzIjogdHJ1ZSwKKwkid2hpdGUiOiB0cnVlLAorCSJ2YWxpZHRoaXMiOiB0cnVlCit9CkluZGV4
OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyLmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFu
Y2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1w
bGVzL2ZsaWdodC9ib3dlci5qc29uCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9E
b1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdo
dC9ib3dlci5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYgQEAKK3sKKyAgIm5hbWUi
OiAiZmxpZ2h0LXRvZG9tdmMiLAorICAidmVyc2lvbiI6ICIwLjAuMCIsCisgICJkZXBlbmRlbmNp
ZXMiOiB7CisgICAgImRlcG90IjogIn4wLjEuNCIsCisgICAgImZsaWdodCI6ICJ+MS4xLjAiLAor
ICAgICJqcXVlcnkiOiAiMS44LjMiLAorICAgICJyZXF1aXJlanMiOiAifjIuMS41IiwKKyAgICAi
dG9kb212Yy1jb21tb24iOiAifjAuMS40IiwKKyAgICAicmVxdWlyZWpzLXRleHQiOiAifjIuMC4x
MCIKKyAgfSwKKyAgImRldkRlcGVuZGVuY2llcyI6IHsKKyAgICAiamFzbWluZS1mbGlnaHQiOiAi
fjIuMS4wIiwKKyAgICAiamFzbWluZS1qcXVlcnkiOiAifjEuNS44IgorICB9Cit9CkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L2luZGV4Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VU
ZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodC9pbmRleC5odG1sCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lv
dUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9p
bmRleC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjkgQEAKKzwhZG9jdHlwZSBodG1s
PgorPGh0bWwgbGFuZz0iZW4iIGRhdGEtZnJhbWV3b3JrPSJmbGlnaHQiPgorICAgIDxoZWFkPgor
ICAgICAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgICAgICAgIDx0aXRsZT5GbGlnaHQg4oCi
IFRvZG88L3RpdGxlPgorICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImJvd2Vy
X2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MiPgorICAgIDwvaGVhZD4KKyAgICA8
Ym9keT4KKyAgICAgICAgPHNlY3Rpb24gaWQ9InRvZG9hcHAiPgorICAgICAgICAgICAgPGhlYWRl
ciBpZD0iaGVhZGVyIj4KKyAgICAgICAgICAgICAgICA8aDE+dG9kb3M8L2gxPgorICAgICAgICAg
ICAgICAgIDxpbnB1dCBpZD0ibmV3LXRvZG8iIHBsYWNlaG9sZGVyPSJXaGF0IG5lZWRzIHRvIGJl
IGRvbmU/IiBhdXRvZm9jdXM+CisgICAgICAgICAgICA8L2hlYWRlcj4KKyAgICAgICAgICAgIDxz
ZWN0aW9uIGlkPSJtYWluIj4KKyAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9InRvZ2dsZS1hbGwi
IHR5cGU9ImNoZWNrYm94Ij4KKyAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJ0b2dnbGUtYWxs
Ij5NYXJrIGFsbCBhcyBjb21wbGV0ZTwvbGFiZWw+CisgICAgICAgICAgICAgICAgPHVsIGlkPSJ0
b2RvLWxpc3QiPjwvdWw+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgICAgICA8Zm9v
dGVyIGlkPSJmb290ZXIiPjwvZm9vdGVyPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDxm
b290ZXIgaWQ9ImluZm8iPgorICAgICAgICAgICAgPHA+RG91YmxlLWNsaWNrIHRvIGVkaXQgYSB0
b2RvPC9wPgorICAgICAgICAgICAgPHA+Q3JlYXRlZCBieSA8YSBocmVmPSJodHRwOi8vZ2l0aHVi
LmNvbS9ta3VrbGlzIj5NaWNoYWwgS3VrbGlzPC9hPjwvcD4KKyAgICAgICAgICAgIDxwPlBhcnQg
b2YgPGEgaHJlZj0iaHR0cDovL3RvZG9tdmMuY29tIj5Ub2RvTVZDPC9hPjwvcD4KKyAgICAgICAg
PC9mb290ZXI+CisgICAgICAgIDxzY3JpcHQgc3JjPSJib3dlcl9jb21wb25lbnRzL3RvZG9tdmMt
Y29tbW9uL2Jhc2UuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IGRhdGEtbWFpbj0iYXBw
L2pzL21haW4iIHNyYz0iYm93ZXJfY29tcG9uZW50cy9yZXF1aXJlanMvcmVxdWlyZS5qcyI+PC9z
Y3JpcHQ+CisgICAgPC9ib2R5PgorPC9odG1sPgpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lv
dUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9r
YXJtYS5jb25mLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVu
Y2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQva2FybWEuY29u
Zi5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVz
b3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQva2FybWEuY29uZi5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg0IEBACisvLyBLYXJtYSBjb25maWd1cmF0aW9uIGZp
bGUKKy8vCisvLyBGb3IgYWxsIGF2YWlsYWJsZSBjb25maWcgb3B0aW9ucyBhbmQgZGVmYXVsdCB2
YWx1ZXMsIHNlZToKKy8vIGh0dHBzOi8vZ2l0aHViLmNvbS9rYXJtYS1ydW5uZXIva2FybWEvYmxv
Yi9zdGFibGUvbGliL2NvbmZpZy5qcyNMNTQKKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAo
Y29uZmlnKSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgY29uZmlnLnNldCh7CisgICAgICAg
IC8vIGJhc2UgcGF0aCwgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVzb2x2ZSBmaWxlcyBhbmQgZXhj
bHVkZQorICAgICAgICBiYXNlUGF0aDogJycsCisKKyAgICAgICAgZnJhbWV3b3JrczogWydqYXNt
aW5lJ10sCisKKyAgICAgICAgLy8gbGlzdCBvZiBmaWxlcyAvIHBhdHRlcm5zIHRvIGxvYWQgaW4g
dGhlIGJyb3dzZXIKKyAgICAgICAgZmlsZXM6IFsKKyAgICAgICAgICAgIC8vIGxvYWRlZCB3aXRo
b3V0IHJlcXVpcmUKKyAgICAgICAgICAgICdib3dlcl9jb21wb25lbnRzL2VzNS1zaGltL2VzNS1z
aGltLmpzJywKKyAgICAgICAgICAgICdib3dlcl9jb21wb25lbnRzL2VzNS1zaGltL2VzNS1zaGFt
LmpzJywKKyAgICAgICAgICAgICdib3dlcl9jb21wb25lbnRzL2pxdWVyeS9qcXVlcnkuanMnLAor
ICAgICAgICAgICAgJ2Jvd2VyX2NvbXBvbmVudHMvamFzbWluZS1mbGlnaHQvbGliL2phc21pbmUt
ZmxpZ2h0LmpzJywKKyAgICAgICAgICAgICdib3dlcl9jb21wb25lbnRzL2phc21pbmUtanF1ZXJ5
L2xpYi9qYXNtaW5lLWpxdWVyeS5qcycsCisKKyAgICAgICAgICAgIC8vIGhhY2sgdG8gbG9hZCBS
ZXF1aXJlSlMgYWZ0ZXIgdGhlIHNoaW0gbGlicworICAgICAgICAgICAgJ25vZGVfbW9kdWxlcy9r
YXJtYS1yZXF1aXJlanMvbGliL3JlcXVpcmUuanMnLAorICAgICAgICAgICAgJ25vZGVfbW9kdWxl
cy9rYXJtYS1yZXF1aXJlanMvbGliL2FkYXB0ZXIuanMnLAorCisgICAgICAgICAgICAvLyBsb2Fk
ZWQgd2l0aCByZXF1aXJlCisgICAgICAgICAgICB7IHBhdHRlcm46ICdib3dlcl9jb21wb25lbnRz
L2ZsaWdodC8qKi8qLmpzJywgaW5jbHVkZWQ6IGZhbHNlIH0sCisgICAgICAgICAgICB7IHBhdHRl
cm46ICdib3dlcl9jb21wb25lbnRzL2RlcG90LyoqLyouanMnLCBpbmNsdWRlZDogZmFsc2UgfSwK
KyAgICAgICAgICAgIHsgcGF0dGVybjogJ2Jvd2VyX2NvbXBvbmVudHMvcmVxdWlyZWpzLXRleHQv
dGV4dC5qcycsIGluY2x1ZGVkOiBmYWxzZSB9LAorICAgICAgICAgICAgeyBwYXR0ZXJuOiAnYXBw
LyoqLyouanMnLCBpbmNsdWRlZDogZmFsc2UgfSwKKyAgICAgICAgICAgIHsgcGF0dGVybjogJ2Fw
cC8qKi8qLmh0bWwnLCBpbmNsdWRlZDogZmFsc2UgfSwKKyAgICAgICAgICAgIHsgcGF0dGVybjog
J3Rlc3Qvc3BlYy8qKi8qX3NwZWMuanMnLCBpbmNsdWRlZDogZmFsc2UgfSwKKyAgICAgICAgICAg
IHsgcGF0dGVybjogJ3Rlc3QvZml4dHVyZS8qLmh0bWwnLCBpbmNsdWRlZDogZmFsc2UgfSwKKwor
ICAgICAgICAgICAgLy8gRW50cnkgcG9pbnQgZm9yIGthcm1hLgorICAgICAgICAgICAgJ3Rlc3Qv
dGVzdC1tYWluLmpzJywKKworICAgICAgICAgICAgeyBwYXR0ZXJuOiAndGVzdC9tb2NrLyouanMn
LCBpbmNsdWRlZDogdHJ1ZSB9CisgICAgICAgIF0sCisKKyAgICAgICAgLy8gbGlzdCBvZiBmaWxl
cyB0byBleGNsdWRlCisgICAgICAgIGV4Y2x1ZGU6IFtdLAorCisgICAgICAgIC8vIHVzZSBkb3Rz
IHJlcG9ydGVyLCBhcyB0cmF2aXMgdGVybWluYWwgZG9lcyBub3Qgc3VwcG9ydCBlc2NhcGluZyBz
ZXF1ZW5jZXMKKyAgICAgICAgLy8gcG9zc2libGUgdmFsdWVzOiAnZG90cycsICdwcm9ncmVzcycK
KyAgICAgICAgLy8gQ0xJIC0tcmVwb3J0ZXJzIHByb2dyZXNzCisgICAgICAgIHJlcG9ydGVyczog
Wydkb3RzJ10sCisKKyAgICAgICAgLy8gZW5hYmxlIC8gZGlzYWJsZSB3YXRjaGluZyBmaWxlIGFu
ZCBleGVjdXRpbmcgdGVzdHMgd2hlbmV2ZXIgYW55IGZpbGUgY2hhbmdlcworICAgICAgICAvLyBD
TEkgLS1hdXRvLXdhdGNoIC0tbm8tYXV0by13YXRjaAorICAgICAgICBhdXRvV2F0Y2g6IHRydWUs
CisKKyAgICAgICAgLy8gU3RhcnQgdGhlc2UgYnJvd3NlcnMsIGN1cnJlbnRseSBhdmFpbGFibGU6
CisgICAgICAgIC8vIC0gQ2hyb21lCisgICAgICAgIC8vIC0gQ2hyb21lQ2FuYXJ5CisgICAgICAg
IC8vIC0gRmlyZWZveAorICAgICAgICAvLyAtIE9wZXJhCisgICAgICAgIC8vIC0gU2FmYXJpIChv
bmx5IE1hYykKKyAgICAgICAgLy8gLSBQaGFudG9tSlMKKyAgICAgICAgLy8gLSBJRSAob25seSBX
aW5kb3dzKQorICAgICAgICAvLyBDTEkgLS1icm93c2VycyBDaHJvbWUsIEZpcmVmb3gsIFNhZmFy
aQorICAgICAgICBicm93c2VyczogWydDaHJvbWUnLCAnRmlyZWZveCddLAorCisgICAgICAgIC8v
IElmIGJyb3dzZXIgZG9lcyBub3QgY2FwdHVyZSBpbiBnaXZlbiB0aW1lb3V0IFttc10sIGtpbGwg
aXQKKyAgICAgICAgLy8gQ0xJIC0tY2FwdHVyZS10aW1lb3V0IDUwMDAKKyAgICAgICAgY2FwdHVy
ZVRpbWVvdXQ6IDIwMDAwLAorCisgICAgICAgIC8vIEF1dG8gcnVuIHRlc3RzIG9uIHN0YXJ0ICh3
aGVuIGJyb3dzZXJzIGFyZSBjYXB0dXJlZCkgYW5kIGV4aXQKKyAgICAgICAgLy8gQ0xJIC0tc2lu
Z2xlLXJ1biAtLW5vLXNpbmdsZS1ydW4KKyAgICAgICAgc2luZ2xlUnVuOiBmYWxzZSwKKworICAg
ICAgICBwbHVnaW5zOiBbCisgICAgICAgICAgICAna2FybWEtamFzbWluZScsCisgICAgICAgICAg
ICAna2FybWEtcmVxdWlyZWpzJywKKyAgICAgICAgICAgICdrYXJtYS1jaHJvbWUtbGF1bmNoZXIn
LAorICAgICAgICAgICAgJ2thcm1hLWZpcmVmb3gtbGF1bmNoZXInLAorICAgICAgICAgICAgJ2th
cm1hLWllLWxhdW5jaGVyJywKKyAgICAgICAgICAgICdrYXJtYS1waGFudG9tanMtbGF1bmNoZXIn
LAorICAgICAgICAgICAgJ2thcm1hLXNhZmFyaS1sYXVuY2hlcicKKyAgICAgICAgXQorICAgIH0p
OworfTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3Rv
ZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvcGFja2FnZS5qc29uCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvcGFja2FnZS5qc29uCShyZXZpc2lvbiAwKQorKysgUGVy
Zm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9wYWNrYWdlLmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NyBAQAoreworICAibmFtZSI6ICJmbGlnaHQtdG9kb212YyIsCisgICJ2ZXJzaW9uIjogIjAuMC4w
IiwKKyAgImRldkRlcGVuZGVuY2llcyI6IHsKKyAgICAia2FybWEiOiAifjAuMTAuMSIsCisgICAg
Imthcm1hLWphc21pbmUiOiAifjAuMS4wIiwKKyAgICAia2FybWEtcmVxdWlyZWpzIjogIn4wLjEu
MCIsCisgICAgImthcm1hLWNocm9tZS1sYXVuY2hlciI6ICJ+MC4xLjAiLAorICAgICJrYXJtYS1p
ZS1sYXVuY2hlciI6ICJ+MC4xLjEiLAorICAgICJrYXJtYS1maXJlZm94LWxhdW5jaGVyIjogIn4w
LjEuMCIsCisgICAgImthcm1hLXBoYW50b21qcy1sYXVuY2hlciI6ICJ+MC4xLjAiLAorICAgICJr
YXJtYS1zYWZhcmktbGF1bmNoZXIiOiAifjAuMS4xIgorICB9LAorICAic2NyaXB0cyI6IHsKKyAg
ICAidGVzdCI6ICJrYXJtYSBzdGFydCAtLWJyb3dzZXJzIEZpcmVmb3ggLS1zaW5nbGUtcnVuIgor
ICB9Cit9CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90
b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3JlYWRtZS5tZAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3JlYWRtZS5tZAkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1h
bmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQvcmVhZG1lLm1kCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKyMg
RmxpZ2h0IFRvZG9NVkMgRXhhbXBsZQorCis+IEZsaWdodCBpcyBhIGxpZ2h0d2VpZ2h0LCBjb21w
b25lbnQtYmFzZWQgSmF2YVNjcmlwdCBmcmFtZXdvcmsgdGhhdCBtYXBzIGJlaGF2aW9yIHRvIERP
TSBub2Rlcy4KKworPiBfW0ZsaWdodCAtIGZsaWdodGpzLmdpdGh1Yi5pb10oaHR0cDovL2ZsaWdo
dGpzLmdpdGh1Yi5pbylfCisKKworIyMgTGVhcm5pbmcgRmxpZ2h0CisKK1RoZSBbRmxpZ2h0IHdl
YnNpdGVdKGh0dHA6Ly9mbGlnaHRqcy5naXRodWIuaW8pIGlzIGEgZ3JlYXQgcmVzb3VyY2UgZm9y
IGdldHRpbmcgc3RhcnRlZC4KKworSGVyZSBhcmUgc29tZSBsaW5rcyB5b3UgbWF5IGZpbmQgaGVs
cGZ1bDoKKworKiBbR2l0SHViXShodHRwczovL2dpdGh1Yi5jb20vZmxpZ2h0anMvZmxpZ2h0KQor
KiBbRGVtbyBBcHBsaWNhdGlvbl0oaHR0cDovL3R3aXR0ZXIuZ2l0aHViLmlvL2ZsaWdodC9kZW1v
KQorKiBbSW5zdGFsbGF0aW9uXShodHRwczovL2dpdGh1Yi5jb20vZmxpZ2h0anMvZmxpZ2h0L2Js
b2IvbWFzdGVyL1JFQURNRS5tZCNpbnN0YWxsYXRpb24pCisqIFtGbGlnaHQgb24gVHdpdHRlcl0o
aHR0cDovL3R3aXR0ZXIuY29tL2ZsaWdodCkKKworX0lmIHlvdSBoYXZlIG90aGVyIGhlbHBmdWwg
bGlua3MgdG8gc2hhcmUsIG9yIGZpbmQgYW55IG9mIHRoZSBsaW5rcyBhYm92ZSBubyBsb25nZXIg
d29yaywgcGxlYXNlIFtsZXQgdXMga25vd10oaHR0cHM6Ly9naXRodWIuY29tL3Rhc3RlanMvdG9k
b212Yy9pc3N1ZXMpLl8KKworCisjIyBSdW5uaW5nIHRoZSBUZXN0cworCitUbyBydW4gdGhlIHRl
c3RzLCB5b3UgbmVlZCB0byBpbnN0YWxsIGFkZGl0aW9uYWwgaGVscGVycyB2aWEgYm93ZXIgYW5k
IG5wbSBhbmQKK3J1biBgbnBtIHRlc3RgIGFmdGVyd2FyZHM6CisKK2BgYGJhc2gKK2Jvd2VyIGlu
c3RhbGwgJiBucG0gaW5zdGFsbAorbnBtIHRlc3QKK2BgYAorCitZb3UgY2FuIGFsc28gcnVuIGBr
YXJtYSBzdGFydGAgYWZ0ZXIgdGhlIGRlcGVuZGVuY2llcyBhcmUgaW5zdGFsbGVkIHRvCithdXRv
bWF0aWNhbGx5IHdhdGNoIGZvciBjaGFuZ2VzIGFuZCByZS1ydW4gdGhlIHRlc3Qgc3VpdGUuCklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2Rl
cGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy9hcHAuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVy
Zm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvYXBwLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFu
Y2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1w
bGVzL2ZsaWdodC9hcHAvanMvYXBwLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAgQEAK
Ky8qZ2xvYmFsIGRlZmluZSAqLworJ3VzZSBzdHJpY3QnOworCitkZWZpbmUoWworICAgICcuL2Rh
dGEvdG9kb3MnLAorICAgICcuL2RhdGEvc3RhdHMnLAorICAgICcuL3VpL25ld19pdGVtJywKKyAg
ICAnLi91aS90b2RvX2xpc3QnLAorICAgICcuL3VpL3N0YXRzJywKKyAgICAnLi91aS9tYWluX3Nl
bGVjdG9yJywKKyAgICAnLi91aS90b2dnbGVfYWxsJworXSwgZnVuY3Rpb24gKFRvZG9zRGF0YSwg
U3RhdHNEYXRhLCBOZXdJdGVtVUksIFRvZG9MaXN0VUksIFN0YXRzVUksIE1haW5TZWxlY3RvclVJ
LCBUb2dnbGVBbGxVSSkgeworICAgIHZhciBpbml0aWFsaXplID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICBTdGF0c0RhdGEuYXR0YWNoVG8oZG9jdW1lbnQpOworICAgICAgICBUb2Rvc0RhdGEuYXR0
YWNoVG8oZG9jdW1lbnQpOworICAgICAgICBOZXdJdGVtVUkuYXR0YWNoVG8oJyNuZXctdG9kbycp
OworICAgICAgICBNYWluU2VsZWN0b3JVSS5hdHRhY2hUbygnI21haW4nKTsKKyAgICAgICAgU3Rh
dHNVSS5hdHRhY2hUbygnI2Zvb3RlcicpOworICAgICAgICBUb2dnbGVBbGxVSS5hdHRhY2hUbygn
I3RvZ2dsZS1hbGwnKTsKKyAgICAgICAgVG9kb0xpc3RVSS5hdHRhY2hUbygnI3RvZG8tbGlzdCcp
OworCisgICAgICAgIHZhciBkdW1teU5vZGVUb05vdGlmeUFwcElzUmVhZHkgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgZHVtbXlOb2RlVG9Ob3RpZnlBcHBJc1JlYWR5
LmlkID0gJ2FwcElzUmVhZHknOworICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGR1
bW15Tm9kZVRvTm90aWZ5QXBwSXNSZWFkeSk7CisgICAgfTsKKworICAgIHJldHVybiB7CisgICAg
ICAgIGluaXRpYWxpemU6IGluaXRpYWxpemUKKyAgICB9OworfSk7CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBs
ZXMvZmxpZ2h0L2FwcC9qcy9tYWluLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMv
RG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGln
aHQvYXBwL2pzL21haW4uanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91
RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Fw
cC9qcy9tYWluLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIgQEAKKyd1c2Ugc3RyaWN0
JzsKKworcmVxdWlyZS5jb25maWcoeworICAgIGJhc2VVcmw6ICcuLycsCisgICAgcGF0aHM6IHsK
KyAgICAgICAganF1ZXJ5OiAnYm93ZXJfY29tcG9uZW50cy9qcXVlcnkvanF1ZXJ5JywKKyAgICAg
ICAgZXM1c2hpbTogJ2Jvd2VyX2NvbXBvbmVudHMvZXM1LXNoaW0vZXM1LXNoaW0nLAorICAgICAg
ICBlczVzaGFtOiAnYm93ZXJfY29tcG9uZW50cy9lczUtc2hpbS9lczUtc2hhbScsCisgICAgICAg
IHRleHQ6ICdib3dlcl9jb21wb25lbnRzL3JlcXVpcmVqcy10ZXh0L3RleHQnLAorICAgICAgICBm
bGlnaHQ6ICdib3dlcl9jb21wb25lbnRzL2ZsaWdodCcsCisgICAgICAgIGRlcG90OiAnYm93ZXJf
Y29tcG9uZW50cy9kZXBvdC9kZXBvdCcKKyAgICB9LAorICAgIHNoaW06IHsKKyAgICAgICAgJ2Fw
cC9qcy9hcHAnOiB7CisgICAgICAgICAgICBkZXBzOiBbJ2pxdWVyeScsICdlczVzaGltJywgJ2Vz
NXNoYW0nXQorICAgICAgICB9CisgICAgfQorfSk7CisKK3JlcXVpcmUoWydhcHAvanMvYXBwJ10s
IGZ1bmN0aW9uIChBcHApIHsKKyAgICBBcHAuaW5pdGlhbGl6ZSgpOworfSk7CkluZGV4OiBQZXJm
b3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy9zdG9yZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5j
ZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBs
ZXMvZmxpZ2h0L2FwcC9qcy9zdG9yZS5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVz
dHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9m
bGlnaHQvYXBwL2pzL3N0b3JlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOSBAQAorLypn
bG9iYWwgZGVmaW5lICovCisKKyd1c2Ugc3RyaWN0JzsKKworZGVmaW5lKFsKKyAgICAnZGVwb3Qn
CitdLCBmdW5jdGlvbiAoZGVwb3QpIHsKKyAgICByZXR1cm4gZGVwb3QoJ3RvZG9zJywgeyBpZEF0
dHJpYnV0ZTogJ2lkJyB9KTsKK30pOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5C
ZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMv
dXRpbHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9y
ZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvdXRpbHMu
anMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291
cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91dGlscy5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNCBAQAorLypnbG9iYWwgZGVmaW5lICovCisndXNl
IHN0cmljdCc7CisKKy8vIHRtcGwgZnVuY3Rpb24gc2Nvb3BlZCBmcm9tIHVuZGVyc2NvcmUuCisv
LyBodHRwOi8vZG9jdW1lbnRjbG91ZC5naXRodWIuY29tL3VuZGVyc2NvcmUvI3RlbXBsYXRlCitk
ZWZpbmUoZnVuY3Rpb24gKCkgeworICAgIHZhciBfID0ge307CisKKyAgICAvLyBMaXN0IG9mIEhU
TUwgZW50aXRpZXMgZm9yIGVzY2FwaW5nLgorICAgIHZhciBlbnRpdHlNYXAgPSB7CisgICAgICAg
IGVzY2FwZTogeworICAgICAgICAgICAgJyYnOiAnJmFtcDsnLAorICAgICAgICAgICAgJzwnOiAn
Jmx0OycsCisgICAgICAgICAgICAnPic6ICcmZ3Q7JywKKyAgICAgICAgICAgICciJzogJyZxdW90
OycsCisgICAgICAgICAgICAvKmpzaGludCBxdW90bWFyazpmYWxzZSAqLworICAgICAgICAgICAg
IiciOiAnJiN4Mjc7JywKKyAgICAgICAgICAgICcvJzogJyYjeDJGOycKKyAgICAgICAgfQorICAg
IH07CisKKyAgICB2YXIgZXNjYXBlS2V5cyA9ICcmPD4iXCcvJzsKKyAgICB2YXIgdW5lc2NhcGVL
ZXlzID0gJyZhbXA7fCZsdDt8Jmd0O3wmcXVvdDt8JiN4Mjc7fCYjeDJGOyc7CisKKyAgICAvLyBS
ZWdleGVzIGNvbnRhaW5pbmcgdGhlIGtleXMgYW5kIHZhbHVlcyBsaXN0ZWQgaW1tZWRpYXRlbHkg
YWJvdmUuCisgICAgdmFyIGVudGl0eVJlZ2V4ZXMgPSB7CisgICAgICAgIGVzY2FwZTogICBuZXcg
UmVnRXhwKCdbJyArIGVzY2FwZUtleXMgKyAnXScsICdnJyksCisgICAgICAgIHVuZXNjYXBlOiBu
ZXcgUmVnRXhwKCcoJyArIHVuZXNjYXBlS2V5cyArICcpJywgJ2cnKQorICAgIH07CisKKyAgICAv
LyBGdW5jdGlvbnMgZm9yIGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5nIHN0cmluZ3MgdG8vZnJvbSBI
VE1MIGludGVycG9sYXRpb24uCisgICAgWydlc2NhcGUnLCAndW5lc2NhcGUnXS5mb3JFYWNoKGZ1
bmN0aW9uIChtZXRob2QpIHsKKyAgICAgICAgX1ttZXRob2RdID0gZnVuY3Rpb24gKHN0cmluZykg
eworICAgICAgICAgICAgaWYgKHN0cmluZyA9PT0gbnVsbCB8fCBzdHJpbmcgPT09IHVuZGVmaW5l
ZCkgeworICAgICAgICAgICAgICAgIHJldHVybiAnJzsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuICgnJyArIHN0cmluZykucmVwbGFjZShlbnRpdHlSZWdleGVzW21ldGhvZF0s
IGZ1bmN0aW9uIChtYXRjaCkgeworICAgICAgICAgICAgICAgIHJldHVybiBlbnRpdHlNYXBbbWV0
aG9kXVttYXRjaF07CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfTsKKyAgICB9KTsKKworICAg
IHZhciBzZXR0aW5ncyA9IHsKKyAgICAgICAgZXZhbHVhdGU6IC88JShbXHNcU10rPyklPi9nLAor
ICAgICAgICBpbnRlcnBvbGF0ZTogLzwlPShbXHNcU10rPyklPi9nLAorICAgICAgICBlc2NhcGU6
IC88JS0oW1xzXFNdKz8pJT4vZworICAgIH07CisKKyAgICB2YXIgbm9NYXRjaCA9IC8oLileLzsK
KyAgICB2YXIgZXNjYXBlcyA9IHsKKyAgICAgICAgLypqc2hpbnQgcXVvdG1hcms6ZmFsc2UgKi8K
KyAgICAgICAgIiciOiAiJyIsCisgICAgICAgICdcXCc6ICdcXCcsCisgICAgICAgICdccic6ICdy
JywKKyAgICAgICAgJ1xuJzogJ24nLAorICAgICAgICAnXHQnOiAndCcsCisgICAgICAgICdcdTIw
MjgnOiAndTIwMjgnLAorICAgICAgICAnXHUyMDI5JzogJ3UyMDI5JworICAgIH07CisKKyAgICB2
YXIgZXNjYXBlciA9IC9cXHwnfFxyfFxufFx0fFx1MjAyOHxcdTIwMjkvZzsKKworICAgIC8vIEph
dmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3MgaW1wbGVt
ZW50YXRpb24uCisgICAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5
IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLAorICAgIC8vIGFuZCBjb3JyZWN0bHkg
ZXNjYXBlcyBxdW90ZXMgd2l0aGluIGludGVycG9sYXRlZCBjb2RlLgorICAgIHZhciB0ZW1wbGF0
ZSA9IGZ1bmN0aW9uICh0ZXh0LCBkYXRhKSB7CisgICAgICAgIHZhciByZW5kZXI7CisKKyAgICAg
ICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEg
YWx0ZXJuYXRpb24uCisgICAgICAgIHZhciBtYXRjaGVyID0gbmV3IFJlZ0V4cChbCisgICAgICAg
ICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJjZSwKKyAgICAgICAgICAgIChz
ZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNoKS5zb3VyY2UsCisgICAgICAgICAgICAoc2V0
dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlCisgICAgICAgIF0uam9pbignfCcpICsg
J3wkJywgJ2cnKTsKKworICAgICAgICAvLyBDb21waWxlIHRoZSB0ZW1wbGF0ZSBzb3VyY2UsIGVz
Y2FwaW5nIHN0cmluZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5LgorICAgICAgICB2YXIgaW5kZXgg
PSAwOworICAgICAgICB2YXIgc291cmNlID0gIl9fcCs9JyI7CisgICAgICAgIHRleHQucmVwbGFj
ZShtYXRjaGVyLCBmdW5jdGlvbiAobWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRl
LCBvZmZzZXQpIHsKKyAgICAgICAgICAgIHNvdXJjZSArPSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZz
ZXQpCisgICAgICAgICAgICAucmVwbGFjZShlc2NhcGVyLCBmdW5jdGlvbiAobWF0Y2gpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gJ1xcJyArIGVzY2FwZXNbbWF0Y2hdOworICAgICAgICAgICAg
fSk7CisKKyAgICAgICAgICAgIGlmIChlc2NhcGUpIHsKKyAgICAgICAgICAgICAgICBzb3VyY2Ug
Kz0gIicrXG4oKF9fdD0oIiArIGVzY2FwZSArICIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStc
biciOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGludGVycG9sYXRlKSB7CisgICAg
ICAgICAgICAgICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIgKyBpbnRlcnBvbGF0ZSArICIpKT09
bnVsbD8nJzpfX3QpK1xuJyI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZXZhbHVh
dGUpIHsKKyAgICAgICAgICAgICAgICBzb3VyY2UgKz0gIic7XG4iICsgZXZhbHVhdGUgKyAiXG5f
X3ArPSciOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5kZXggPSBvZmZzZXQgKyBtYXRj
aC5sZW5ndGg7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CisgICAgICAgIH0pOworICAgICAg
ICBzb3VyY2UgKz0gIic7XG4iOworCisgICAgICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNw
ZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuCisgICAgICAgIGlmICgh
c2V0dGluZ3MudmFyaWFibGUpIHsKKyAgICAgICAgICAgIHNvdXJjZSA9ICd3aXRoKG9ianx8e30p
e1xuJyArIHNvdXJjZSArICd9XG4nOworICAgICAgICB9CisKKyAgICAgICAgc291cmNlID0gInZh
ciBfX3QsX19wPScnLF9faj1BcnJheS5wcm90b3R5cGUuam9pbiwiICsKKyAgICAgICAgICAgICJw
cmludD1mdW5jdGlvbigpe19fcCs9X19qLmNhbGwoYXJndW1lbnRzLCcnKTt9O1xuIiArCisgICAg
ICAgICAgICBzb3VyY2UgKyAicmV0dXJuIF9fcDtcbiI7CisKKyAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgIC8qanNoaW50IGV2aWw6dHJ1ZSAqLworICAgICAgICAgICAgcmVuZGVyID0gbmV3IEZ1
bmN0aW9uKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7CisgICAgICAg
IH0gY2F0Y2ggKGVycikgeworICAgICAgICAgICAgZXJyLnNvdXJjZSA9IHNvdXJjZTsKKyAgICAg
ICAgICAgIHRocm93IGVycjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkYXRhKSB7CisgICAg
ICAgICAgICByZXR1cm4gcmVuZGVyKGRhdGEsIF8pOworICAgICAgICB9CisKKyAgICAgICAgdmFy
IHRlbXBsYXRlID0gZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiByZW5kZXIu
Y2FsbCh0aGlzLCBkYXRhLCBfKTsKKyAgICAgICAgfTsKKworICAgICAgICAvLyBQcm92aWRlIHRo
ZSBjb21waWxlZCBmdW5jdGlvbiBzb3VyY2UgYXMgYSBjb252ZW5pZW5jZSBmb3IgcHJlY29tcGls
YXRpb24uCisgICAgICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgKHNldHRpbmdz
LnZhcmlhYmxlIHx8ICdvYmonKSArICcpe1xuJyArIHNvdXJjZSArICd9JzsKKworICAgICAgICBy
ZXR1cm4gdGVtcGxhdGU7CisgICAgfTsKKworICAgIHJldHVybiB7CisgICAgICAgIHRtcGw6IHRl
bXBsYXRlCisgICAgfTsKK30pOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5j
aC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvZGF0
YS9zdGF0cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNo
L3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy9kYXRh
L3N0YXRzLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5j
aC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvZGF0
YS9zdGF0cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisvKmdsb2JhbCBkZWZp
bmUgKi8KKyd1c2Ugc3RyaWN0JzsKKworZGVmaW5lKFsKKyAgICAnZmxpZ2h0L2xpYi9jb21wb25l
bnQnLAorICAgICcuLi9zdG9yZScKK10sIGZ1bmN0aW9uIChkZWZpbmVDb21wb25lbnQsIGRhdGFT
dG9yZSkgeworICAgIGZ1bmN0aW9uIHN0YXRzKCkgeworICAgICAgICB0aGlzLmRlZmF1bHRBdHRy
cyh7CisgICAgICAgICAgICBkYXRhU3RvcmU6IGRhdGFTdG9yZQorICAgICAgICB9KTsKKworICAg
ICAgICB0aGlzLnJlY291bnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgdG9kb3Mg
PSB0aGlzLmF0dHIuZGF0YVN0b3JlLmFsbCgpOworICAgICAgICAgICAgdmFyIGFsbCA9IHRvZG9z
Lmxlbmd0aDsKKyAgICAgICAgICAgIHZhciByZW1haW5pbmcgPSB0b2Rvcy5yZWR1Y2UoZnVuY3Rp
b24gKG1lbW8sIGVhY2gpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWVtbyArPSBlYWNoLmNv
bXBsZXRlZCA/IDAgOiAxOworICAgICAgICAgICAgfSwgMCk7CisKKyAgICAgICAgICAgIHRoaXMu
dHJpZ2dlcignZGF0YVN0YXRzQ291bnRlZCcsIHsKKyAgICAgICAgICAgICAgICBhbGw6IGFsbCwK
KyAgICAgICAgICAgICAgICByZW1haW5pbmc6IHJlbWFpbmluZywKKyAgICAgICAgICAgICAgICBj
b21wbGV0ZWQ6IGFsbCAtIHJlbWFpbmluZywKKyAgICAgICAgICAgICAgICBmaWx0ZXI6IGxvY2Fs
U3RvcmFnZS5nZXRJdGVtKCdmaWx0ZXInKSB8fCAnJworICAgICAgICAgICAgfSk7CisgICAgICAg
IH07CisKKyAgICAgICAgdGhpcy5hZnRlcignaW5pdGlhbGl6ZScsIGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhVG9kb3NMb2FkZWQnLCB0aGlzLnJlY291
bnQpOworICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2RhdGFUb2RvQWRkZWQnLCB0aGlz
LnJlY291bnQpOworICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2RhdGFUb2RvUmVtb3Zl
ZCcsIHRoaXMucmVjb3VudCk7CisgICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAnZGF0YVRv
ZG9Ub2dnbGVkJywgdGhpcy5yZWNvdW50KTsKKyAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQs
ICdkYXRhQ2xlYXJlZENvbXBsZXRlZCcsIHRoaXMucmVjb3VudCk7CisgICAgICAgICAgICB0aGlz
Lm9uKGRvY3VtZW50LCAnZGF0YVRvZG9Ub2dnbGVkQWxsJywgdGhpcy5yZWNvdW50KTsKKyAgICAg
ICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIGRlZmluZUNvbXBvbmVudChzdGF0cyk7Cit9KTsK
SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMv
ZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL2RhdGEvdG9kb3MuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvZGF0YS90b2Rvcy5qcwkocmV2aXNpb24g
MCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMv
ZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL2RhdGEvdG9kb3MuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMDIgQEAKKy8qZ2xvYmFsIGRlZmluZSAqLworJ3VzZSBzdHJpY3Qn
OworCitkZWZpbmUoWworICAgICdmbGlnaHQvbGliL2NvbXBvbmVudCcsCisgICAgJy4uL3N0b3Jl
JworXSwgZnVuY3Rpb24gKGRlZmluZUNvbXBvbmVudCwgZGF0YVN0b3JlKSB7CisgICAgZnVuY3Rp
b24gdG9kb3MoKSB7CisgICAgICAgIHZhciBmaWx0ZXI7CisgICAgICAgIHRoaXMuZGVmYXVsdEF0
dHJzKHsKKyAgICAgICAgICAgIGRhdGFTdG9yZTogZGF0YVN0b3JlCisgICAgICAgIH0pOworCisg
ICAgICAgIHRoaXMuYWRkID0gZnVuY3Rpb24gKGUsIGRhdGEpIHsKKyAgICAgICAgICAgIHZhciB0
b2RvID0gdGhpcy5hdHRyLmRhdGFTdG9yZS5zYXZlKHsKKyAgICAgICAgICAgICAgICB0aXRsZTog
ZGF0YS50aXRsZSwKKyAgICAgICAgICAgICAgICBjb21wbGV0ZWQ6IGZhbHNlCisgICAgICAgICAg
ICB9KTsKKworICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdkYXRhVG9kb0FkZGVkJywgeyB0b2Rv
OiB0b2RvLCBmaWx0ZXI6IGZpbHRlciB9KTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLnJl
bW92ZSA9IGZ1bmN0aW9uIChlLCBkYXRhKSB7CisgICAgICAgICAgICB2YXIgdG9kbyA9IHRoaXMu
YXR0ci5kYXRhU3RvcmUuZGVzdHJveShkYXRhLmlkKTsKKworICAgICAgICAgICAgdGhpcy50cmln
Z2VyKCdkYXRhVG9kb1JlbW92ZWQnLCB0b2RvKTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlz
LmxvYWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgdG9kb3M7CisKKyAgICAgICAg
ICAgIGZpbHRlciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdmaWx0ZXInKTsKKyAgICAgICAgICAg
IHRvZG9zID0gdGhpcy5maW5kKCk7CisgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2RhdGFUb2Rv
c0xvYWRlZCcsIHsgdG9kb3M6IHRvZG9zIH0pOworICAgICAgICB9OworCisgICAgICAgIHRoaXMu
dXBkYXRlID0gZnVuY3Rpb24gKGUsIGRhdGEpIHsKKyAgICAgICAgICAgIHRoaXMuYXR0ci5kYXRh
U3RvcmUuc2F2ZShkYXRhKTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLnRvZ2dsZUNvbXBs
ZXRlZCA9IGZ1bmN0aW9uIChlLCBkYXRhKSB7CisgICAgICAgICAgICB2YXIgZXZlbnRUeXBlOwor
ICAgICAgICAgICAgdmFyIHRvZG8gPSB0aGlzLmF0dHIuZGF0YVN0b3JlLmdldChkYXRhLmlkKTsK
KworICAgICAgICAgICAgdG9kby5jb21wbGV0ZWQgPSAhdG9kby5jb21wbGV0ZWQ7CisgICAgICAg
ICAgICB0aGlzLmF0dHIuZGF0YVN0b3JlLnNhdmUodG9kbyk7CisKKyAgICAgICAgICAgIGV2ZW50
VHlwZSA9IGZpbHRlciA/ICdkYXRhVG9kb1JlbW92ZWQnIDogJ2RhdGFUb2RvVG9nZ2xlZCc7CisK
KyAgICAgICAgICAgIHRoaXMudHJpZ2dlcihldmVudFR5cGUsIHRvZG8pOworICAgICAgICB9Owor
CisgICAgICAgIHRoaXMudG9nZ2xlQWxsQ29tcGxldGVkID0gZnVuY3Rpb24gKGUsIGRhdGEpIHsK
KyAgICAgICAgICAgIHRoaXMuYXR0ci5kYXRhU3RvcmUudXBkYXRlQWxsKHsgY29tcGxldGVkOiBk
YXRhLmNvbXBsZXRlZCB9KTsKKyAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZGF0YVRvZG9Ub2dn
bGVkQWxsJywgeyB0b2RvczogdGhpcy5maW5kKGZpbHRlcikgfSk7CisgICAgICAgIH07CisKKyAg
ICAgICAgdGhpcy5maWx0ZXIgPSBmdW5jdGlvbiAoZSwgZGF0YSkgeworICAgICAgICAgICAgdmFy
IHRvZG9zOworCisgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZmlsdGVyJywgZGF0
YS5maWx0ZXIpOworICAgICAgICAgICAgZmlsdGVyID0gZGF0YS5maWx0ZXI7CisgICAgICAgICAg
ICB0b2RvcyA9IHRoaXMuZmluZCgpOworCisgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2RhdGFU
b2Rvc0ZpbHRlcmVkJywgeyB0b2RvczogdG9kb3MgfSk7CisgICAgICAgIH07CisKKyAgICAgICAg
dGhpcy5maW5kID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIHRvZG9zOworCisgICAg
ICAgICAgICBpZiAoZmlsdGVyKSB7CisgICAgICAgICAgICAgICAgdG9kb3MgPSB0aGlzLmF0dHIu
ZGF0YVN0b3JlLmZpbmQoZnVuY3Rpb24gKGVhY2gpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICh0eXBlb2YgZWFjaFtmaWx0ZXJdICE9PSAndW5kZWZpbmVkJykgPyBlYWNoLmNvbXBsZXRl
ZCA6ICFlYWNoLmNvbXBsZXRlZDsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgdG9kb3MgPSB0aGlzLmF0dHIuZGF0YVN0b3JlLmFsbCgp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdG9kb3M7CisgICAgICAgIH07
CisKKyAgICAgICAgdGhpcy5jbGVhckNvbXBsZXRlZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHRoaXMuYXR0ci5kYXRhU3RvcmUuZGVzdHJveUFsbCh7IGNvbXBsZXRlZDogdHJ1ZSB9KTsK
KworICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCd1aUZpbHRlclJlcXVlc3RlZCcsIHsgZmlsdGVy
OiBmaWx0ZXIgfSk7CisgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2RhdGFDbGVhcmVkQ29tcGxl
dGVkJyk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5hZnRlcignaW5pdGlhbGl6ZScsIGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICd1aUFkZFJlcXVlc3Rl
ZCcsIHRoaXMuYWRkKTsKKyAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICd1aVVwZGF0ZVJl
cXVlc3RlZCcsIHRoaXMudXBkYXRlKTsKKyAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICd1
aVJlbW92ZVJlcXVlc3RlZCcsIHRoaXMucmVtb3ZlKTsKKyAgICAgICAgICAgIHRoaXMub24oZG9j
dW1lbnQsICd1aUxvYWRSZXF1ZXN0ZWQnLCB0aGlzLmxvYWQpOworICAgICAgICAgICAgdGhpcy5v
bihkb2N1bWVudCwgJ3VpVG9nZ2xlUmVxdWVzdGVkJywgdGhpcy50b2dnbGVDb21wbGV0ZWQpOwor
ICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ3VpVG9nZ2xlQWxsUmVxdWVzdGVkJywgdGhp
cy50b2dnbGVBbGxDb21wbGV0ZWQpOworICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ3Vp
Q2xlYXJSZXF1ZXN0ZWQnLCB0aGlzLmNsZWFyQ29tcGxldGVkKTsKKyAgICAgICAgICAgIHRoaXMu
b24oZG9jdW1lbnQsICd1aUZpbHRlclJlcXVlc3RlZCcsIHRoaXMuZmlsdGVyKTsKKyAgICAgICAg
fSk7CisgICAgfQorCisgICAgcmV0dXJuIGRlZmluZUNvbXBvbmVudCh0b2Rvcyk7Cit9KTsKSW5k
ZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL3VpL21haW5fc2VsZWN0b3IuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvdWkvbWFpbl9zZWxlY3Rvci5qcwko
cmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL3VpL21haW5fc2VsZWN0
b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMCBAQAorLypnbG9iYWwgZGVmaW5lICov
CisndXNlIHN0cmljdCc7CisKK2RlZmluZShbCisgICAgJ2ZsaWdodC9saWIvY29tcG9uZW50Jwor
XSwgZnVuY3Rpb24gKGRlZmluZUNvbXBvbmVudCkgeworICAgIGZ1bmN0aW9uIG1haW5TZWxlY3Rv
cigpIHsKKyAgICAgICAgdGhpcy50b2dnbGUgPSBmdW5jdGlvbiAoZSwgZGF0YSkgeworICAgICAg
ICAgICAgdmFyIHRvZ2dsZSA9IGRhdGEuYWxsID4gMDsKKyAgICAgICAgICAgIHRoaXMuJG5vZGUu
dG9nZ2xlKHRvZ2dsZSk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5hZnRlcignaW5pdGlh
bGl6ZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMuJG5vZGUuaGlkZSgpOworICAg
ICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2RhdGFTdGF0c0NvdW50ZWQnLCB0aGlzLnRvZ2ds
ZSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHJldHVybiBkZWZpbmVDb21wb25lbnQobWFp
blNlbGVjdG9yKTsKK30pOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9y
ZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvdWkvbmV3
X2l0ZW0uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9y
ZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvdWkvbmV3
X2l0ZW0uanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNo
L3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS9u
ZXdfaXRlbS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI5IEBACisvKmdsb2JhbCBkZWZp
bmUgKi8KKyd1c2Ugc3RyaWN0JzsKKworZGVmaW5lKFsKKyAgICAnZmxpZ2h0L2xpYi9jb21wb25l
bnQnCitdLCBmdW5jdGlvbiAoZGVmaW5lQ29tcG9uZW50KSB7CisgICAgZnVuY3Rpb24gbmV3SXRl
bSgpIHsKKyAgICAgICAgdmFyIEVOVEVSX0tFWSA9IDEzOworCisgICAgICAgIHRoaXMuY3JlYXRl
T25FbnRlciA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICBpZiAoZS53aGljaCAhPT0gRU5U
RVJfS0VZIHx8CisgICAgICAgICAgICAgICAgIXRoaXMuJG5vZGUudmFsKCkudHJpbSgpKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0aGlz
LnRyaWdnZXIoJ3VpQWRkUmVxdWVzdGVkJywgeworICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlz
LiRub2RlLnZhbCgpLnRyaW0oKQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHRoaXMu
JG5vZGUudmFsKCcnKTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLmFmdGVyKCdpbml0aWFs
aXplJywgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy5vbigna2V5ZG93bicsIHRoaXMu
Y3JlYXRlT25FbnRlcik7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHJldHVybiBkZWZpbmVD
b21wb25lbnQobmV3SXRlbSk7Cit9KTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVu
QmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pz
L3VpL3N0YXRzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVu
Y2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL3Vp
L3N0YXRzLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5j
aC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvdWkv
c3RhdHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNyBAQAorLypnbG9iYWwgZGVmaW5l
ICovCisndXNlIHN0cmljdCc7CisKK2RlZmluZShbCisgICAgJ2ZsaWdodC9saWIvY29tcG9uZW50
JywKKyAgICAnLi93aXRoX2ZpbHRlcnMnLAorICAgICd0ZXh0IWFwcC90ZW1wbGF0ZXMvc3RhdHMu
aHRtbCcsCisgICAgJy4uL3V0aWxzJworXSwgZnVuY3Rpb24gKGRlZmluZUNvbXBvbmVudCwgd2l0
aEZpbHRlcnMsIHN0YXRzVG1wbCwgdXRpbHMpIHsKKyAgICBmdW5jdGlvbiBzdGF0cygpIHsKKyAg
ICAgICAgdmFyIHRlbXBsYXRlID0gdXRpbHMudG1wbChzdGF0c1RtcGwpOworCisgICAgICAgIHRo
aXMuZGVmYXVsdEF0dHJzKHsKKyAgICAgICAgICAgIGNsZWFyQ29tcGxldGVkU2VsZWN0b3I6ICcj
Y2xlYXItY29tcGxldGVkJworICAgICAgICB9KTsKKworICAgICAgICB0aGlzLnJlbmRlciA9IGZ1
bmN0aW9uIChlLCBkYXRhKSB7CisgICAgICAgICAgICB2YXIgdG9nZ2xlID0gZGF0YS5hbGwgPiAw
OworCisgICAgICAgICAgICB0aGlzLiRub2RlLmh0bWwodGVtcGxhdGUoZGF0YSkpOworICAgICAg
ICAgICAgdGhpcy4kbm9kZS50b2dnbGUodG9nZ2xlKTsKKyAgICAgICAgICAgIHRoaXMubWFya1Nl
bGVjdGVkKGRhdGEuZmlsdGVyKTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLmNsZWFyQ29t
cGxldGVkID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCd1aUNsZWFy
UmVxdWVzdGVkJyk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5hZnRlcignaW5pdGlhbGl6
ZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMuJG5vZGUuaGlkZSgpOworICAgICAg
ICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2RhdGFTdGF0c0NvdW50ZWQnLCB0aGlzLnJlbmRlcik7
CisgICAgICAgICAgICB0aGlzLm9uKCdjbGljaycsIHsgJ2NsZWFyQ29tcGxldGVkU2VsZWN0b3In
OiB0aGlzLmNsZWFyQ29tcGxldGVkIH0pOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1
cm4gZGVmaW5lQ29tcG9uZW50KHN0YXRzLCB3aXRoRmlsdGVycyk7Cit9KTsKSW5kZXg6IFBlcmZv
cm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvYXBwL2pzL3VpL3RvZG9fbGlzdC5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJm
b3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS90b2RvX2xpc3QuanMJKHJldmlzaW9uIDApCisrKyBQ
ZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS90b2RvX2xpc3QuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMDggQEAKKy8qZ2xvYmFsIGRlZmluZSwgJCAqLworJ3VzZSBzdHJpY3QnOwor
CitkZWZpbmUoWworICAgICdmbGlnaHQvbGliL2NvbXBvbmVudCcsCisgICAgJ3RleHQhYXBwL3Rl
bXBsYXRlcy90b2RvLmh0bWwnLAorICAgICcuLi91dGlscycKK10sIGZ1bmN0aW9uIChkZWZpbmVD
b21wb25lbnQsIHRvZG9UbXBsLCB1dGlscykgeworICAgIGZ1bmN0aW9uIHRvZG9MaXN0KCkgewor
ICAgICAgICB2YXIgRU5URVJfS0VZID0gMTM7CisgICAgICAgIHZhciB0ZW1wbGF0ZSA9IHV0aWxz
LnRtcGwodG9kb1RtcGwpOworCisgICAgICAgIHRoaXMuZGVmYXVsdEF0dHJzKHsKKyAgICAgICAg
ICAgIGRlc3Ryb3lTZWxlY3RvcjogJ2J1dHRvbi5kZXN0cm95JywKKyAgICAgICAgICAgIHRvZ2ds
ZVNlbGVjdG9yOiAnaW5wdXQudG9nZ2xlJywKKyAgICAgICAgICAgIGxhYmVsU2VsZWN0b3I6ICds
YWJlbCcsCisgICAgICAgICAgICBlZGl0U2VsZWN0b3I6ICcuZWRpdCcKKyAgICAgICAgfSk7CisK
KyAgICAgICAgdGhpcy5yZW5kZXJBbGwgPSBmdW5jdGlvbiAoZSwgZGF0YSkgeworICAgICAgICAg
ICAgdGhpcy4kbm9kZS5odG1sKCcnKTsKKyAgICAgICAgICAgIGRhdGEudG9kb3MuZm9yRWFjaChm
dW5jdGlvbiAoZWFjaCkgeworICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKGUsIHsgdG9kbzog
ZWFjaCB9KTsKKyAgICAgICAgICAgIH0sIHRoaXMpOworICAgICAgICB9OworCisgICAgICAgIHRo
aXMucmVuZGVyID0gZnVuY3Rpb24gKGUsIGRhdGEpIHsKKyAgICAgICAgICAgIGlmIChlLnR5cGUg
PT09ICdkYXRhVG9kb0FkZGVkJyAmJiBkYXRhLmZpbHRlciA9PT0gJ2NvbXBsZXRlZCcpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRoaXMu
JG5vZGUuYXBwZW5kKHRlbXBsYXRlKGRhdGEudG9kbykpOworICAgICAgICB9OworCisgICAgICAg
IHRoaXMuZWRpdCA9IGZ1bmN0aW9uIChlLCBkYXRhKSB7CisgICAgICAgICAgICB2YXIgJHRvZG9F
bCA9ICQoZGF0YS5lbCkucGFyZW50cygnbGknKTsKKworICAgICAgICAgICAgJHRvZG9FbC5hZGRD
bGFzcygnZWRpdGluZycpOworICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2VkaXRTZWxlY3Rvcicp
LmZvY3VzKCk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlID0gZnVu
Y3Rpb24gKGUpIHsKKyAgICAgICAgICAgIHZhciAkaW5wdXRFbCA9ICQoZS5jdXJyZW50VGFyZ2V0
KTsKKyAgICAgICAgICAgIHZhciAkdG9kb0VsID0gJGlucHV0RWwucGFyZW50cygnbGknKTsKKyAg
ICAgICAgICAgIHZhciB2YWx1ZSA9ICRpbnB1dEVsLnZhbCgpLnRyaW0oKTsKKyAgICAgICAgICAg
IHZhciBpZCA9ICR0b2RvRWwuYXR0cignaWQnKTsKKworICAgICAgICAgICAgaWYgKCEkdG9kb0Vs
Lmhhc0NsYXNzKCdlZGl0aW5nJykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICR0b2RvRWwucmVtb3ZlQ2xhc3MoJ2VkaXRpbmcnKTsKKwor
ICAgICAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgJHRvZG9FbC5maW5kKCds
YWJlbCcpLmh0bWwodmFsdWUpOworICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndWlVcGRh
dGVSZXF1ZXN0ZWQnLCAgeyBpZDogaWQsIHRpdGxlOiB2YWx1ZSB9KTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCd1aVJlbW92ZVJlcXVlc3RlZCcs
IHsgaWQ6IGlkIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHRoaXMu
cmVxdWVzdFVwZGF0ZU9uRW50ZXIgPSBmdW5jdGlvbiAoZSwgZGF0YSkgeworICAgICAgICAgICAg
aWYgKGUud2hpY2ggPT09IEVOVEVSX0tFWSkgeworICAgICAgICAgICAgICAgIHRoaXMucmVxdWVz
dFVwZGF0ZShlLCBkYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICB0
aGlzLnJlcXVlc3RSZW1vdmUgPSBmdW5jdGlvbiAoZSwgZGF0YSkgeworICAgICAgICAgICAgdmFy
IGlkID0gJChkYXRhLmVsKS5hdHRyKCdpZCcpLnNwbGl0KCdfJylbMV07CisgICAgICAgICAgICB0
aGlzLnRyaWdnZXIoJ3VpUmVtb3ZlUmVxdWVzdGVkJywgeyBpZDogaWQgfSk7CisgICAgICAgIH07
CisKKyAgICAgICAgdGhpcy5yZW1vdmUgPSBmdW5jdGlvbiAoZSwgZGF0YSkgeworICAgICAgICAg
ICAgdmFyICR0b2RvRWwgPSB0aGlzLiRub2RlLmZpbmQoJyMnICsgZGF0YS5pZCk7CisgICAgICAg
ICAgICAkdG9kb0VsLnJlbW92ZSgpOworICAgICAgICB9OworCisgICAgICAgIHRoaXMudG9nZ2xl
ID0gZnVuY3Rpb24gKGUsIGRhdGEpIHsKKyAgICAgICAgICAgIHZhciAkdG9kb0VsID0gJChkYXRh
LmVsKS5wYXJlbnRzKCdsaScpOworCisgICAgICAgICAgICAkdG9kb0VsLnRvZ2dsZUNsYXNzKCdj
b21wbGV0ZWQnKTsKKyAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndWlUb2dnbGVSZXF1ZXN0ZWQn
LCB7IGlkOiAkdG9kb0VsLmF0dHIoJ2lkJykgfSk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhp
cy5hZnRlcignaW5pdGlhbGl6ZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMub24o
ZG9jdW1lbnQsICdkYXRhVG9kb0FkZGVkJywgdGhpcy5yZW5kZXIpOworICAgICAgICAgICAgdGhp
cy5vbihkb2N1bWVudCwgJ2RhdGFUb2Rvc0xvYWRlZCcsIHRoaXMucmVuZGVyQWxsKTsKKyAgICAg
ICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhVG9kb3NGaWx0ZXJlZCcsIHRoaXMucmVuZGVy
QWxsKTsKKyAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhVG9kb1RvZ2dsZWRBbGwn
LCB0aGlzLnJlbmRlckFsbCk7CisgICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAnZGF0YVRv
ZG9SZW1vdmVkJywgdGhpcy5yZW1vdmUpOworCisgICAgICAgICAgICB0aGlzLm9uKCdjbGljaycs
IHsgJ2Rlc3Ryb3lTZWxlY3Rvcic6IHRoaXMucmVxdWVzdFJlbW92ZSB9KTsKKyAgICAgICAgICAg
IHRoaXMub24oJ2NsaWNrJywgeyAndG9nZ2xlU2VsZWN0b3InOiB0aGlzLnRvZ2dsZSB9KTsKKyAg
ICAgICAgICAgIHRoaXMub24oJ2RibGNsaWNrJywgeyAnbGFiZWxTZWxlY3Rvcic6IHRoaXMuZWRp
dCB9KTsKKworICAgICAgICAgICAgdGhpcy4kbm9kZS5vbignYmx1cicsICcuZWRpdCcsIHRoaXMu
cmVxdWVzdFVwZGF0ZS5iaW5kKHRoaXMpKTsKKyAgICAgICAgICAgIHRoaXMuJG5vZGUub24oJ2tl
eWRvd24nLCAnLmVkaXQnLCB0aGlzLnJlcXVlc3RVcGRhdGVPbkVudGVyLmJpbmQodGhpcykpOwor
CisgICAgICAgICAgICAvLyB0aGVzZSBkb24ndCB3b3JrCisgICAgICAgICAgICAvLyB0aGlzLm9u
KHRoaXMuYXR0ci5lZGl0U2VsZWN0b3IsICdibHVyJywgdGhpcy5yZXF1ZXN0VXBkYXRlKTsKKyAg
ICAgICAgICAgIC8vIHRoaXMub24oJ2JsdXInLCB7ICdlZGl0U2VsZWN0b3InOiB0aGlzLnJlcXVl
c3RVcGRhdGUgfSk7CisKKyAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndWlMb2FkUmVxdWVzdGVk
Jyk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHJldHVybiBkZWZpbmVDb21wb25lbnQodG9k
b0xpc3QpOworfSk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291
cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS90b2dnbGVf
YWxsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVz
b3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL3VpL3RvZ2ds
ZV9hbGwuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNo
L3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS90
b2dnbGVfYWxsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAKKy8qZ2xvYmFsIGRl
ZmluZSAqLworJ3VzZSBzdHJpY3QnOworCitkZWZpbmUoWworICAgICdmbGlnaHQvbGliL2NvbXBv
bmVudCcKK10sIGZ1bmN0aW9uIChkZWZpbmVDb21wb25lbnQpIHsKKyAgICBmdW5jdGlvbiB0b2dn
bGVBbGwoKSB7CisgICAgICAgIHRoaXMudG9nZ2xlQWxsQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3VpVG9nZ2xlQWxsUmVxdWVzdGVkJywgeworICAg
ICAgICAgICAgICAgIGNvbXBsZXRlZDogdGhpcy4kbm9kZS5pcygnOmNoZWNrZWQnKQorICAgICAg
ICAgICAgfSk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy50b2dnbGVDaGVja2JveCA9IGZ1
bmN0aW9uIChlLCBkYXRhKSB7CisgICAgICAgICAgICB0aGlzLm5vZGUuY2hlY2tlZCA9ICFkYXRh
LnJlbWFpbmluZzsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLmFmdGVyKCdpbml0aWFsaXpl
JywgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy5vbignY2xpY2snLCB0aGlzLnRvZ2ds
ZUFsbENvbXBsZXRlKTsKKyAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhU3RhdHND
b3VudGVkJywgdGhpcy50b2dnbGVDaGVja2JveCk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IHJldHVybiBkZWZpbmVDb21wb25lbnQodG9nZ2xlQWxsKTsKK30pOwpJbmRleDogUGVyZm9ybWFu
Y2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1w
bGVzL2ZsaWdodC9hcHAvanMvdWkvd2l0aF9maWx0ZXJzLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZv
cm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvYXBwL2pzL3VpL3dpdGhfZmlsdGVycy5qcwkocmV2aXNpb24gMCkKKysr
IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL3VpL3dpdGhfZmlsdGVycy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDI2IEBACisvKmdsb2JhbCBkZWZpbmUsICQgKi8KKyd1c2Ugc3RyaWN0
JzsKKworZGVmaW5lKGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24gd2l0aEZpbHRl
cnMoKSB7CisgICAgICAgIHRoaXMuZGVmYXVsdEF0dHJzKHsKKyAgICAgICAgICAgIGZpbHRlclNl
bGVjdG9yOiAnI2ZpbHRlcnMgYScKKyAgICAgICAgfSk7CisKKyAgICAgICAgdGhpcy5jaG9vc2VG
aWx0ZXIgPSBmdW5jdGlvbiAoZSwgZGF0YSkgeworICAgICAgICAgICAgdmFyIGZpbHRlciA9IGRh
dGEuZWwuaGFzaC5zbGljZSgyKTsKKworICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2ZpbHRlclNl
bGVjdG9yJykucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7CisgICAgICAgICAgICAkKGRhdGEuZWwp
LmFkZENsYXNzKCdzZWxlY3RlZCcpOworICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCd1aUZpbHRl
clJlcXVlc3RlZCcsIHsgZmlsdGVyOiBmaWx0ZXIgfSk7CisgICAgICAgIH07CisKKyAgICAgICAg
dGhpcy5tYXJrU2VsZWN0ZWQgPSBmdW5jdGlvbiAoZmlsdGVyKSB7CisgICAgICAgICAgICB0aGlz
LiRub2RlLmZpbmQoJ1tocmVmPSIjLycgKyBmaWx0ZXIgKyAnIl0nKS5hZGRDbGFzcygnc2VsZWN0
ZWQnKTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLmFmdGVyKCdpbml0aWFsaXplJywgZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy5vbignY2xpY2snLCB7IGZpbHRlclNlbGVjdG9y
OiB0aGlzLmNob29zZUZpbHRlciB9KTsKKyAgICAgICAgfSk7CisgICAgfTsKK30pOwpJbmRleDog
UGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvdGVtcGxhdGVzL3N0YXRzLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBl
bmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvdGVtcGxhdGVzL3N0YXRzLmh0bWwJKHJldmlzaW9u
IDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZj
L2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC90ZW1wbGF0ZXMvc3RhdHMuaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE3IEBACis8c3BhbiBpZD0idG9kby1jb3VudCI+CisgICAg
PHN0cm9uZz48JT0gcmVtYWluaW5nICU+PC9zdHJvbmc+IDwlPSByZW1haW5pbmcgPT0gMSA/ICdp
dGVtJyA6ICdpdGVtcycgJT4gbGVmdAorPC9zcGFuPgorPHVsIGlkPSJmaWx0ZXJzIj4KKyAgICA8
bGk+CisgICAgICAgIDxhIGhyZWY9IiMvIj5BbGw8L2E+CisgICAgPC9saT4KKyAgICA8bGk+Cisg
ICAgICAgIDxhIGhyZWY9IiMvYWN0aXZlIj5BY3RpdmU8L2E+CisgICAgPC9saT4KKyAgICA8bGk+
CisgICAgICAgIDxhIGhyZWY9IiMvY29tcGxldGVkIj5Db21wbGV0ZWQ8L2E+CisgICAgPC9saT4K
KzwvdWw+Cis8JSBpZiAoY29tcGxldGVkKSB7ICU+Cis8YnV0dG9uIGlkPSJjbGVhci1jb21wbGV0
ZWQiPkNsZWFyIGNvbXBsZXRlZCAoPCU9IGNvbXBsZXRlZCAlPik8L2J1dHRvbj4KKzwlIH0gJT4K
SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMv
ZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL3RlbXBsYXRlcy90b2RvLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvdGVtcGxhdGVzL3RvZG8uaHRtbAkocmV2
aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3Rv
ZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL3RlbXBsYXRlcy90b2RvLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBACis8bGkgaWQ9IjwlPSBpZCAlPiIgY2xhc3M9
IjwlPSBjb21wbGV0ZWQgPyAnY29tcGxldGVkJyA6ICcnICU+Ij4KKyAgICA8ZGl2IGNsYXNzPSJ2
aWV3Ij4KKyAgICAgICAgPGlucHV0IGNsYXNzPSJ0b2dnbGUiIHR5cGU9ImNoZWNrYm94IiA8JT0g
Y29tcGxldGVkID8gJ2NoZWNrZWQnIDogJycgJT4+CisgICAgICAgIDxsYWJlbD48JS0gdGl0bGUg
JT48L2xhYmVsPgorICAgICAgICA8YnV0dG9uIGlkPSJkZXN0cm95XzwlPSBpZCAlPiIgY2xhc3M9
ImRlc3Ryb3kiPjwvYnV0dG9uPgorICAgIDwvZGl2PgorICAgIDxpbnB1dCBjbGFzcz0iZWRpdCIg
dmFsdWU9IjwlLSB0aXRsZSAlPiI+Cis8L2xpPgpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lv
dUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9i
b3dlcl9jb21wb25lbnRzL2RlcG90L2RlcG90LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNl
VGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxl
cy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9kZXBvdC9kZXBvdC5qcwkocmV2aXNpb24gMCkKKysr
IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9kZXBvdC9kZXBvdC5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDI1MSBAQAorLy8gZGVwb3QuanMgdjAuMS42CisKKy8vIChj
KSAyMDEzIE1pY2hhbCBLdWtsaXMKKy8vIExpY2Vuc2VkIHVuZGVyIFRoZSBNSVQgTGljZW5zZQor
Ly8gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVAorCisoZnVuY3Rpb24gKG5hbWUs
IHJvb3QsIGZhY3RvcnkpIHsKKyAgaWYgKHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnKSB7Cisg
ICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7CisgIH0gZWxzZSBpZiAodHlwZW9mIGRlZmlu
ZSA9PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHsKKyAgICBkZWZpbmUoZmFjdG9yeSk7Cisg
IH0gZWxzZSB7CisgICAgcm9vdFtuYW1lXSA9IGZhY3RvcnkoKTsKKyAgfQorfSgiZGVwb3QiLCB0
aGlzLCBmdW5jdGlvbiAoKSB7CisKKyAgInVzZSBzdHJpY3QiOworCisgIC8vIGRlcG90IGFwaQor
CisgIHZhciBhcGkgPSB7CisKKyAgICBzYXZlOiBmdW5jdGlvbiAocmVjb3JkKSB7CisgICAgICB2
YXIgaWQ7CisKKyAgICAgIGlmICghcmVjb3JkW3RoaXMuaWRBdHRyaWJ1dGVdKSB7CisgICAgICAg
IHJlY29yZFt0aGlzLmlkQXR0cmlidXRlXSA9IGd1aWQoKTsKKyAgICAgIH0KKworICAgICAgaWQg
PSByZWNvcmRbdGhpcy5pZEF0dHJpYnV0ZV0gKyAnJzsKKworICAgICAgaWYgKHRoaXMuaWRzLmlu
ZGV4T2YoaWQpIDwgMCkgeworICAgICAgICB0aGlzLmlkcy5wdXNoKGlkKTsKKyAgICAgICAgdGhp
cy5zdG9yYWdlQWRhcHRvci5zZXRJdGVtKHRoaXMubmFtZSwgdGhpcy5pZHMuam9pbigiLCIpKTsK
KyAgICAgIH0KKworICAgICAgdGhpcy5zdG9yYWdlQWRhcHRvci5zZXRJdGVtKGdldEtleSh0aGlz
Lm5hbWUsIGlkKSwgSlNPTi5zdHJpbmdpZnkocmVjb3JkKSk7CisKKyAgICAgIHJldHVybiByZWNv
cmQ7CisgICAgfSwKKworICAgIHVwZGF0ZTogZnVuY3Rpb24gKGlkLCBkYXRhKSB7CisgICAgICBp
ZiAodHlwZW9mIGRhdGEgPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZGF0YSA9IGlkOworICAg
ICAgICBpZCA9IGRhdGFbdGhpcy5pZEF0dHJpYnV0ZV07CisgICAgICB9CisKKyAgICAgIHZhciBy
ZWNvcmQgPSB0aGlzLmdldChpZCk7CisKKyAgICAgIGlmIChyZWNvcmQpIHsKKyAgICAgICAgcmVj
b3JkID0gZXh0ZW5kKHJlY29yZCwgZGF0YSk7CisgICAgICAgIHRoaXMuc2F2ZShyZWNvcmQpOwor
ICAgICAgfQorCisgICAgICByZXR1cm4gcmVjb3JkOworICAgIH0sCisKKyAgICB1cGRhdGVBbGw6
IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICB2YXIgcmVjb3JkcyA9IHRoaXMuYWxsKCk7CisKKyAg
ICAgIHJlY29yZHMuZm9yRWFjaChmdW5jdGlvbiAocmVjb3JkKSB7CisgICAgICAgIHJlY29yZCA9
IGV4dGVuZChyZWNvcmQsIGRhdGEpOworICAgICAgICB0aGlzLnNhdmUocmVjb3JkKTsKKyAgICAg
IH0sIHRoaXMpOworCisgICAgICByZXR1cm4gcmVjb3JkczsKKyAgICB9LAorCisgICAgZmluZDog
ZnVuY3Rpb24gKGNyaXRlcmlhKSB7CisgICAgICB2YXIga2V5LCBtYXRjaCwgcmVjb3JkOworICAg
ICAgdmFyIG5hbWUgPSB0aGlzLm5hbWU7CisgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAg
IGlmICghY3JpdGVyaWEpIHJldHVybiB0aGlzLmFsbCgpOworCisgICAgICByZXR1cm4gdGhpcy5p
ZHMucmVkdWNlKGZ1bmN0aW9uIChtZW1vLCBpZCkgeworICAgICAgICByZWNvcmQgPSBqc29uRGF0
YShzZWxmLnN0b3JhZ2VBZGFwdG9yLmdldEl0ZW0oZ2V0S2V5KG5hbWUsIGlkKSkpOworICAgICAg
ICBtYXRjaCA9IGZpbmRNYXRjaChjcml0ZXJpYSwgcmVjb3JkKTsKKworICAgICAgICBpZiAobWF0
Y2gpIHsKKyAgICAgICAgICBtZW1vLnB1c2gocmVjb3JkKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBtZW1vOworICAgICAgfSwgW10pOworICAgIH0sCisKKyAgICBnZXQ6IGZ1bmN0aW9u
IChpZCkgeworICAgICAgcmV0dXJuIGpzb25EYXRhKHRoaXMuc3RvcmFnZUFkYXB0b3IuZ2V0SXRl
bShnZXRLZXkodGhpcy5uYW1lLCBpZCkpKTsKKyAgICB9LAorCisgICAgYWxsOiBmdW5jdGlvbiAo
KSB7CisgICAgICB2YXIgcmVjb3JkLCBzZWxmID0gdGhpcywgbmFtZSA9IHRoaXMubmFtZTsKKwor
ICAgICAgcmV0dXJuIHRoaXMuaWRzLnJlZHVjZShmdW5jdGlvbiAobWVtbywgaWQpIHsKKyAgICAg
ICAgcmVjb3JkID0gc2VsZi5zdG9yYWdlQWRhcHRvci5nZXRJdGVtKGdldEtleShuYW1lLCBpZCkp
OworCisgICAgICAgIGlmIChyZWNvcmQpIHsKKyAgICAgICAgICBtZW1vLnB1c2goanNvbkRhdGEo
cmVjb3JkKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbWVtbzsKKyAgICAgIH0sIFtd
KTsKKyAgICB9LAorCisgICAgZGVzdHJveTogZnVuY3Rpb24gKHJlY29yZCkgeworICAgICAgdmFy
IGluZGV4OworICAgICAgdmFyIGlkID0gKHJlY29yZFt0aGlzLmlkQXR0cmlidXRlXSkgPyByZWNv
cmRbdGhpcy5pZEF0dHJpYnV0ZV0gOiByZWNvcmQ7CisgICAgICB2YXIga2V5ID0gZ2V0S2V5KHRo
aXMubmFtZSwgaWQpOworCisgICAgICByZWNvcmQgPSBqc29uRGF0YSh0aGlzLnN0b3JhZ2VBZGFw
dG9yLmdldEl0ZW0oa2V5KSk7CisgICAgICB0aGlzLnN0b3JhZ2VBZGFwdG9yLnJlbW92ZUl0ZW0o
a2V5KTsKKworICAgICAgaW5kZXggPSB0aGlzLmlkcy5pbmRleE9mKGlkKTsKKyAgICAgIGlmIChp
bmRleCAhPSAtMSkgdGhpcy5pZHMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgIHRoaXMuc3RvcmFn
ZUFkYXB0b3Iuc2V0SXRlbSh0aGlzLm5hbWUsIHRoaXMuaWRzLmpvaW4oIiwiKSk7CisKKyAgICAg
IHJldHVybiByZWNvcmQ7CisgICAgfSwKKworICAgIGRlc3Ryb3lBbGw6IGZ1bmN0aW9uIChjcml0
ZXJpYSkgeworICAgICAgdmFyIGF0dHIsIGlkLCBtYXRjaCwgcmVjb3JkLCBrZXk7CisKKyAgICAg
IGZvciAodmFyIGkgPSB0aGlzLmlkcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgeworICAgICAg
ICBpZCA9IHRoaXMuaWRzW2ldOworICAgICAgICBrZXkgPSBnZXRLZXkodGhpcy5uYW1lLCBpZCk7
CisKKyAgICAgICAgaWYgKGNyaXRlcmlhKSB7CisKKyAgICAgICAgICByZWNvcmQgPSBqc29uRGF0
YSh0aGlzLnN0b3JhZ2VBZGFwdG9yLmdldEl0ZW0oa2V5KSk7CisgICAgICAgICAgbWF0Y2ggPSBm
aW5kTWF0Y2goY3JpdGVyaWEsIHJlY29yZCk7CisKKyAgICAgICAgICBpZiAobWF0Y2gpIHsKKyAg
ICAgICAgICAgIHRoaXMuc3RvcmFnZUFkYXB0b3IucmVtb3ZlSXRlbShrZXkpOworICAgICAgICAg
ICAgdGhpcy5pZHMuc3BsaWNlKGksIDEpOworICAgICAgICAgIH0KKworICAgICAgICB9CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgIHRoaXMuc3RvcmFnZUFkYXB0b3IucmVtb3ZlSXRlbShrZXkp
OworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChjcml0ZXJpYSkgeworICAgICAgICB0
aGlzLnN0b3JhZ2VBZGFwdG9yLnNldEl0ZW0odGhpcy5uYW1lLCB0aGlzLmlkcy5qb2luKCIsIikp
OworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHRoaXMuc3RvcmFnZUFkYXB0b3IucmVt
b3ZlSXRlbSh0aGlzLm5hbWUpOworICAgICAgICB0aGlzLmlkcyA9IFtdOworICAgICAgfQorICAg
IH0sCisKKyAgICBzaXplOiBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gdGhpcy5pZHMubGVu
Z3RoOworICAgIH0KKyAgfTsKKworICAvLyBoZWxwZXJzCisKKyAgZnVuY3Rpb24ganNvbkRhdGEo
ZGF0YSkgeworICAgIHJldHVybiBkYXRhICYmIEpTT04ucGFyc2UoZGF0YSk7CisgIH0KKworICBm
dW5jdGlvbiBnZXRLZXkobmFtZSwgaWQpIHsKKyAgICByZXR1cm4gbmFtZSArICItIiArIGlkOwor
ICB9CisKKyAgZnVuY3Rpb24gZmluZE1hdGNoKGNyaXRlcmlhLCByZWNvcmQpIHsKKyAgICB2YXIg
bWF0Y2gsIGF0dHI7CisKKyAgICBpZiAodHlwZW9mIGNyaXRlcmlhID09ICdmdW5jdGlvbicpIHsK
KyAgICAgIG1hdGNoID0gY3JpdGVyaWEocmVjb3JkKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAg
ICBtYXRjaCA9IHRydWU7CisgICAgICBmb3IgKGF0dHIgaW4gY3JpdGVyaWEpIHsKKyAgICAgICAg
bWF0Y2ggJj0gKGNyaXRlcmlhW2F0dHJdID09PSByZWNvcmRbYXR0cl0pOworICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiBtYXRjaDsKKyAgfQorCisgIGZ1bmN0aW9uIHM0KCkgeworICAgIHJl
dHVybiBNYXRoLmZsb29yKCgxICsgTWF0aC5yYW5kb20oKSkgKiAweDEwMDAwKQorICAgICAgLnRv
U3RyaW5nKDE2KS5zdWJzdHJpbmcoMSk7CisgIH0KKworICBmdW5jdGlvbiBndWlkKCkgeworICAg
IHJldHVybiBzNCgpICsgczQoKSArICctJyArIHM0KCkgKyAnLScgKyBzNCgpICsKKyAgICAgICct
JyArczQoKSArICctJyArIHM0KCkgKyBzNCgpICsgczQoKTsKKyAgfQorCisgIGZ1bmN0aW9uIGV4
dGVuZChkZXN0LCBzb3VyY2UpIHsKKyAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7CisgICAg
ICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KGtleSkpIHsKKyAgICAgICAgZGVzdFtrZXldID0g
c291cmNlW2tleV07CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGRlc3Q7CisgIH0KKwor
ICBmdW5jdGlvbiBkZXBvdChuYW1lLCBvcHRpb25zKSB7CisgICAgdmFyIHN0b3JlLCBpZHM7CisK
KyAgICB2YXIgZGF0YSA9IHt9OworICAgIHZhciBsb2NhbFN0b3JhZ2UgPSB7CisgICAgICAgIGdl
dEl0ZW06IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGRhdGFba2V5XTsgfSwKKyAgICAgICAgc2V0
SXRlbTogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHsKKyAgICAgICAgICAgIGlmICghZGF0YVtrZXld
KQorICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoKys7CisgICAgICAgICAgICBkYXRhW2tleV0g
PSB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgcmVtb3ZlSXRlbTogZnVuY3Rpb24gKGtleSkg
eworICAgICAgICAgICAgZGVsZXRlIGRhdGFba2V5XTsKKyAgICAgICAgICAgIHRoaXMubGVuZ3Ro
LS07CisgICAgICAgIH0sCisgICAgICAgIGtleTogZnVuY3Rpb24gKGluZGV4KSB7CisgICAgICAg
ICAgICB2YXIgaSA9IDA7CisgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkgeworICAg
ICAgICAgICAgICAgIGlmIChpID09IGluZGV4KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
a2V5OworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBudWxsOworICAgICAgICB9LAorICAgICAgICBsZW5ndGg6IDAsCisgICAgfTsKKworICAg
IG9wdGlvbnMgPSBleHRlbmQoeworICAgICAgaWRBdHRyaWJ1dGU6ICdfaWQnLAorICAgICAgc3Rv
cmFnZUFkYXB0b3I6IGxvY2FsU3RvcmFnZQorICAgIH0sIG9wdGlvbnMpOworCisgICAgaWYgKCFv
cHRpb25zLnN0b3JhZ2VBZGFwdG9yKSB0aHJvdyBuZXcgRXJyb3IoIk5vIHN0b3JhZ2UgYWRhcHRv
ciB3YXMgZm91bmQiKTsKKworICAgIHN0b3JlID0gb3B0aW9ucy5zdG9yYWdlQWRhcHRvci5nZXRJ
dGVtKG5hbWUpOworICAgIGlkcyA9IChzdG9yZSAmJiBzdG9yZS5zcGxpdCgiLCIpKSB8fCBbXTsK
KworICAgIHJldHVybiBPYmplY3QuY3JlYXRlKGFwaSwgeworICAgICAgbmFtZTogeyB2YWx1ZTog
bmFtZSB9LAorICAgICAgc3RvcmU6IHsgdmFsdWU6IHN0b3JlIH0sCisgICAgICBpZHM6IHsgdmFs
dWU6IGlkcywgd3JpdGFibGU6IHRydWUgfSwKKyAgICAgIGlkQXR0cmlidXRlOiB7IHZhbHVlOiBv
cHRpb25zLmlkQXR0cmlidXRlIH0sCisgICAgICBzdG9yYWdlQWRhcHRvcjogeyB2YWx1ZTogb3B0
aW9ucy5zdG9yYWdlQWRhcHRvciB9CisgICAgfSk7CisgIH0KKworICByZXR1cm4gZGVwb3Q7Cit9
KSk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZXM1LXNoaW0v
ZXM1LXNoYW0uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5j
aC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21w
b25lbnRzL2VzNS1zaGltL2VzNS1zaGFtLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VU
ZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2VzNS1zaGltL2VzNS1zaGFtLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzI2IEBACisvLyBDb3B5cmlnaHQgMjAwOS0yMDEyIGJ5IGNvbnRyaWJ1
dG9ycywgTUlUIExpY2Vuc2UKKy8vIHZpbTogdHM9NCBzdHM9NCBzdz00IGV4cGFuZHRhYgorCisv
LyBNb2R1bGUgc3lzdGVtcyBtYWdpYyBkYW5jZQorKGZ1bmN0aW9uIChkZWZpbml0aW9uKSB7Cisg
ICAgLy8gUmVxdWlyZUpTCisgICAgaWYgKHR5cGVvZiBkZWZpbmUgPT0gImZ1bmN0aW9uIikgewor
ICAgICAgICBkZWZpbmUoZGVmaW5pdGlvbik7CisgICAgLy8gWVVJMworICAgIH0gZWxzZSBpZiAo
dHlwZW9mIFlVSSA9PSAiZnVuY3Rpb24iKSB7CisgICAgICAgIFlVSS5hZGQoImVzNS1zaGFtIiwg
ZGVmaW5pdGlvbik7CisgICAgLy8gQ29tbW9uSlMgYW5kIDxzY3JpcHQ+CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZGVmaW5pdGlvbigpOworICAgIH0KK30pKGZ1bmN0aW9uICgpIHsKKworLy8gRVM1
IDE1LjIuMy4yCisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuMgoraWYgKCFPYmpl
Y3QuZ2V0UHJvdG90eXBlT2YpIHsKKyAgICAvLyBodHRwczovL2dpdGh1Yi5jb20va3Jpc2tvd2Fs
L2VzNS1zaGltL2lzc3VlcyNpc3N1ZS8yCisgICAgLy8gaHR0cDovL2Vqb2huLm9yZy9ibG9nL29i
amVjdGdldHByb3RvdHlwZW9mLworICAgIC8vIHJlY29tbWVuZGVkIGJ5IGZzY2hhZWZlciBvbiBn
aXRodWIKKyAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YgPSBmdW5jdGlvbiBnZXRQcm90b3R5cGVP
ZihvYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIG9iamVjdC5fX3Byb3RvX18gfHwgKAorICAgICAg
ICAgICAgb2JqZWN0LmNvbnN0cnVjdG9yCisgICAgICAgICAgICAgICAgPyBvYmplY3QuY29uc3Ry
dWN0b3IucHJvdG90eXBlCisgICAgICAgICAgICAgICAgOiBwcm90b3R5cGVPZk9iamVjdAorICAg
ICAgICApOworICAgIH07Cit9CisKKy8vIEVTNSAxNS4yLjMuMworLy8gaHR0cDovL2VzNS5naXRo
dWIuY29tLyN4MTUuMi4zLjMKK2lmICghT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcikg
eworICAgIHZhciBFUlJfTk9OX09CSkVDVCA9ICJPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yIGNhbGxlZCBvbiBhIG5vbi1vYmplY3Q6ICI7CisKKyAgICBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwg
cHJvcGVydHkpIHsKKyAgICAgICAgaWYgKCh0eXBlb2Ygb2JqZWN0ICE9ICJvYmplY3QiICYmIHR5
cGVvZiBvYmplY3QgIT0gImZ1bmN0aW9uIikgfHwgb2JqZWN0ID09PSBudWxsKSB7CisgICAgICAg
ICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUICsgb2JqZWN0KTsKKyAgICAg
ICAgfQorICAgICAgICAvLyBJZiBvYmplY3QgZG9lcyBub3Qgb3ducyBwcm9wZXJ0eSByZXR1cm4g
dW5kZWZpbmVkIGltbWVkaWF0ZWx5LgorICAgICAgICBpZiAoIW93bnMob2JqZWN0LCBwcm9wZXJ0
eSkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIG9i
amVjdCBoYXMgYSBwcm9wZXJ0eSB0aGVuIGl0J3MgZm9yIHN1cmUgYm90aCBgZW51bWVyYWJsZWAg
YW5kCisgICAgICAgIC8vIGBjb25maWd1cmFibGVgLgorICAgICAgICB2YXIgZGVzY3JpcHRvciA9
ICB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9OworCisgICAgICAgIC8v
IElmIEpTIGVuZ2luZSBzdXBwb3J0cyBhY2Nlc3NvciBwcm9wZXJ0aWVzIHRoZW4gcHJvcGVydHkg
bWF5IGJlIGEKKyAgICAgICAgLy8gZ2V0dGVyIG9yIHNldHRlci4KKyAgICAgICAgaWYgKHN1cHBv
cnRzQWNjZXNzb3JzKSB7CisgICAgICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5IGBfX2xvb2t1cEdl
dHRlcl9fYCB3aWxsIHJldHVybiBhIGdldHRlciBldmVuCisgICAgICAgICAgICAvLyBpZiBvYmpl
Y3QgaGFzIG93biBub24gZ2V0dGVyIHByb3BlcnR5IGFsb25nIHdpdGggYSBzYW1lIG5hbWVkCisg
ICAgICAgICAgICAvLyBpbmhlcml0ZWQgZ2V0dGVyLiBUbyBhdm9pZCBtaXNiZWhhdmlvciB3ZSB0
ZW1wb3JhcnkgcmVtb3ZlCisgICAgICAgICAgICAvLyBgX19wcm90b19fYCBzbyB0aGF0IGBfX2xv
b2t1cEdldHRlcl9fYCB3aWxsIHJldHVybiBnZXR0ZXIgb25seQorICAgICAgICAgICAgLy8gaWYg
aXQncyBvd25lZCBieSBhbiBvYmplY3QuCisgICAgICAgICAgICB2YXIgcHJvdG90eXBlID0gb2Jq
ZWN0Ll9fcHJvdG9fXzsKKyAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGVP
Zk9iamVjdDsKKworICAgICAgICAgICAgdmFyIGdldHRlciA9IGxvb2t1cEdldHRlcihvYmplY3Qs
IHByb3BlcnR5KTsKKyAgICAgICAgICAgIHZhciBzZXR0ZXIgPSBsb29rdXBTZXR0ZXIob2JqZWN0
LCBwcm9wZXJ0eSk7CisKKyAgICAgICAgICAgIC8vIE9uY2Ugd2UgaGF2ZSBnZXR0ZXIgYW5kIHNl
dHRlciB3ZSBjYW4gcHV0IHZhbHVlcyBiYWNrLgorICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9f
XyA9IHByb3RvdHlwZTsKKworICAgICAgICAgICAgaWYgKGdldHRlciB8fCBzZXR0ZXIpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoZ2V0dGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0
b3IuZ2V0ID0gZ2V0dGVyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
c2V0dGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0ID0gc2V0dGVyOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBJZiBpdCB3YXMgYWNjZXNzb3Ig
cHJvcGVydHkgd2UncmUgZG9uZSBhbmQgcmV0dXJuIGhlcmUKKyAgICAgICAgICAgICAgICAvLyBp
biBvcmRlciB0byBhdm9pZCBhZGRpbmcgYHZhbHVlYCB0byB0aGUgZGVzY3JpcHRvci4KKyAgICAg
ICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIC8vIElmIHdlIGdvdCB0aGlzIGZhciB3ZSBrbm93IHRoYXQgb2JqZWN0IGhhcyBh
biBvd24gcHJvcGVydHkgdGhhdCBpcworICAgICAgICAvLyBub3QgYW4gYWNjZXNzb3Igc28gd2Ug
c2V0IGl0IGFzIGEgdmFsdWUgYW5kIHJldHVybiBkZXNjcmlwdG9yLgorICAgICAgICBkZXNjcmlw
dG9yLnZhbHVlID0gb2JqZWN0W3Byb3BlcnR5XTsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7
CisgICAgfTsKK30KKworLy8gRVM1IDE1LjIuMy40CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20v
I3gxNS4yLjMuNAoraWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcykgeworICAgIE9iamVj
dC5nZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhvYmpl
Y3QpIHsKKyAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCk7CisgICAgfTsKK30KKwor
Ly8gRVM1IDE1LjIuMy41CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuNQoraWYg
KCFPYmplY3QuY3JlYXRlKSB7CisgICAgT2JqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShw
cm90b3R5cGUsIHByb3BlcnRpZXMpIHsKKyAgICAgICAgdmFyIG9iamVjdDsKKyAgICAgICAgaWYg
KHByb3RvdHlwZSA9PT0gbnVsbCkgeworICAgICAgICAgICAgb2JqZWN0ID0geyAiX19wcm90b19f
IjogbnVsbCB9OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm90
b3R5cGUgIT0gIm9iamVjdCIpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9y
KCJ0eXBlb2YgcHJvdG90eXBlWyIrKHR5cGVvZiBwcm90b3R5cGUpKyJdICE9ICdvYmplY3QnIik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgVHlwZSA9IGZ1bmN0aW9uICgpIHt9Owor
ICAgICAgICAgICAgVHlwZS5wcm90b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAgICAgICBvYmpl
Y3QgPSBuZXcgVHlwZSgpOworICAgICAgICAgICAgLy8gSUUgaGFzIG5vIGJ1aWx0LWluIGltcGxl
bWVudGF0aW9uIG9mIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgCisgICAgICAgICAgICAvLyBuZWl0
aGVyIGBfX3Byb3RvX19gLCBidXQgdGhpcyBtYW51YWxseSBzZXR0aW5nIGBfX3Byb3RvX19gIHdp
bGwKKyAgICAgICAgICAgIC8vIGd1YXJhbnRlZSB0aGF0IGBPYmplY3QuZ2V0UHJvdG90eXBlT2Zg
IHdpbGwgd29yayBhcyBleHBlY3RlZCB3aXRoCisgICAgICAgICAgICAvLyBvYmplY3RzIGNyZWF0
ZWQgdXNpbmcgYE9iamVjdC5jcmVhdGVgCisgICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0g
cHJvdG90eXBlOworICAgICAgICB9CisgICAgICAgIGlmIChwcm9wZXJ0aWVzICE9PSB2b2lkIDAp
IHsKKyAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9iamVjdCwgcHJvcGVydGll
cyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9OworfQorCisvLyBF
UzUgMTUuMi4zLjYKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy42CisKKy8vIFBh
dGNoIGZvciBXZWJLaXQgYW5kIElFOCBzdGFuZGFyZCBtb2RlCisvLyBEZXNpZ25lZCBieSBoYXgg
PGhheC5naXRodWIuY29tPgorLy8gcmVsYXRlZCBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL2ty
aXNrb3dhbC9lczUtc2hpbS9pc3N1ZXMjaXNzdWUvNQorLy8gSUU4IFJlZmVyZW5jZToKKy8vICAg
ICBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvZGQyODI5MDAuYXNweAor
Ly8gICAgIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9kZDIyOTkxNi5h
c3B4CisvLyBXZWJLaXQgQnVnczoKKy8vICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzY0MjMKKworZnVuY3Rpb24gZG9lc0RlZmluZVByb3BlcnR5V29yayhvYmpl
Y3QpIHsKKyAgICB0cnkgeworICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCAi
c2VudGluZWwiLCB7fSk7CisgICAgICAgIHJldHVybiAic2VudGluZWwiIGluIG9iamVjdDsKKyAg
ICB9IGNhdGNoIChleGNlcHRpb24pIHsKKyAgICAgICAgLy8gcmV0dXJucyBmYWxzeQorICAgIH0K
K30KKworLy8gY2hlY2sgd2hldGhlciBkZWZpbmVQcm9wZXJ0eSB3b3JrcyBpZiBpdCdzIGdpdmVu
LiBPdGhlcndpc2UsCisvLyBzaGltIHBhcnRpYWxseS4KK2lmIChPYmplY3QuZGVmaW5lUHJvcGVy
dHkpIHsKKyAgICB2YXIgZGVmaW5lUHJvcGVydHlXb3Jrc09uT2JqZWN0ID0gZG9lc0RlZmluZVBy
b3BlcnR5V29yayh7fSk7CisgICAgdmFyIGRlZmluZVByb3BlcnR5V29ya3NPbkRvbSA9IHR5cGVv
ZiBkb2N1bWVudCA9PSAidW5kZWZpbmVkIiB8fAorICAgICAgICBkb2VzRGVmaW5lUHJvcGVydHlX
b3JrKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTsKKyAgICBpZiAoIWRlZmluZVByb3Bl
cnR5V29ya3NPbk9iamVjdCB8fCAhZGVmaW5lUHJvcGVydHlXb3Jrc09uRG9tKSB7CisgICAgICAg
IHZhciBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrID0gT2JqZWN0LmRlZmluZVByb3BlcnR5OworICAg
IH0KK30KKworaWYgKCFPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZGVmaW5lUHJvcGVydHlGYWxs
YmFjaykgeworICAgIHZhciBFUlJfTk9OX09CSkVDVF9ERVNDUklQVE9SID0gIlByb3BlcnR5IGRl
c2NyaXB0aW9uIG11c3QgYmUgYW4gb2JqZWN0OiAiOworICAgIHZhciBFUlJfTk9OX09CSkVDVF9U
QVJHRVQgPSAiT2JqZWN0LmRlZmluZVByb3BlcnR5IGNhbGxlZCBvbiBub24tb2JqZWN0OiAiCisg
ICAgdmFyIEVSUl9BQ0NFU1NPUlNfTk9UX1NVUFBPUlRFRCA9ICJnZXR0ZXJzICYgc2V0dGVycyBj
YW4gbm90IGJlIGRlZmluZWQgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJvbiB0aGlzIGphdmFzY3JpcHQgZW5naW5lIjsKKworICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0
b3IpIHsKKyAgICAgICAgaWYgKCh0eXBlb2Ygb2JqZWN0ICE9ICJvYmplY3QiICYmIHR5cGVvZiBv
YmplY3QgIT0gImZ1bmN0aW9uIikgfHwgb2JqZWN0ID09PSBudWxsKSB7CisgICAgICAgICAgICB0
aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUX1RBUkdFVCArIG9iamVjdCk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKCh0eXBlb2YgZGVzY3JpcHRvciAhPSAib2JqZWN0IiAmJiB0eXBl
b2YgZGVzY3JpcHRvciAhPSAiZnVuY3Rpb24iKSB8fCBkZXNjcmlwdG9yID09PSBudWxsKSB7Cisg
ICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUX0RFU0NSSVBUT1Ig
KyBkZXNjcmlwdG9yKTsKKyAgICAgICAgfQorICAgICAgICAvLyBtYWtlIGEgdmFsaWFudCBhdHRl
bXB0IHRvIHVzZSB0aGUgcmVhbCBkZWZpbmVQcm9wZXJ0eQorICAgICAgICAvLyBmb3IgSTgncyBE
T00gZWxlbWVudHMuCisgICAgICAgIGlmIChkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrKSB7CisgICAg
ICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eUZhbGxi
YWNrLmNhbGwoT2JqZWN0LCBvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yKTsKKyAgICAgICAg
ICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgeworICAgICAgICAgICAgICAgIC8vIHRyeSB0aGUgc2hp
bSBpZiB0aGUgcmVhbCBvbmUgZG9lc24ndCB3b3JrCisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICAvLyBJZiBpdCdzIGEgZGF0YSBwcm9wZXJ0eS4KKyAgICAgICAgaWYgKG93bnMo
ZGVzY3JpcHRvciwgInZhbHVlIikpIHsKKyAgICAgICAgICAgIC8vIGZhaWwgc2lsZW50bHkgaWYg
IndyaXRhYmxlIiwgImVudW1lcmFibGUiLCBvciAiY29uZmlndXJhYmxlIgorICAgICAgICAgICAg
Ly8gYXJlIHJlcXVlc3RlZCBidXQgbm90IHN1cHBvcnRlZAorICAgICAgICAgICAgLyoKKyAgICAg
ICAgICAgIC8vIGFsdGVybmF0ZSBhcHByb2FjaDoKKyAgICAgICAgICAgIGlmICggLy8gY2FuJ3Qg
aW1wbGVtZW50IHRoZXNlIGZlYXR1cmVzOyBhbGxvdyBmYWxzZSBidXQgbm90IHRydWUKKyAgICAg
ICAgICAgICAgICAhKG93bnMoZGVzY3JpcHRvciwgIndyaXRhYmxlIikgPyBkZXNjcmlwdG9yLndy
aXRhYmxlIDogdHJ1ZSkgfHwKKyAgICAgICAgICAgICAgICAhKG93bnMoZGVzY3JpcHRvciwgImVu
dW1lcmFibGUiKSA/IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA6IHRydWUpIHx8CisgICAgICAgICAg
ICAgICAgIShvd25zKGRlc2NyaXB0b3IsICJjb25maWd1cmFibGUiKSA/IGRlc2NyaXB0b3IuY29u
ZmlndXJhYmxlIDogdHJ1ZSkKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgUmFuZ2VFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgIlRoaXMgaW1wbGVtZW50YXRpb24g
b2YgT2JqZWN0LmRlZmluZVByb3BlcnR5IGRvZXMgbm90ICIgKworICAgICAgICAgICAgICAgICAg
ICAic3VwcG9ydCBjb25maWd1cmFibGUsIGVudW1lcmFibGUsIG9yIHdyaXRhYmxlLiIKKyAgICAg
ICAgICAgICAgICApOworICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgaWYgKHN1cHBvcnRz
QWNjZXNzb3JzICYmIChsb29rdXBHZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSkgfHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va3VwU2V0dGVyKG9iamVjdCwgcHJvcGVy
dHkpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBBcyBhY2Nlc3NvcnMgYXJl
IHN1cHBvcnRlZCBvbmx5IG9uIGVuZ2luZXMgaW1wbGVtZW50aW5nCisgICAgICAgICAgICAgICAg
Ly8gYF9fcHJvdG9fX2Agd2UgY2FuIHNhZmVseSBvdmVycmlkZSBgX19wcm90b19fYCB3aGlsZSBk
ZWZpbmluZworICAgICAgICAgICAgICAgIC8vIGEgcHJvcGVydHkgdG8gbWFrZSBzdXJlIHRoYXQg
d2UgZG9uJ3QgaGl0IGFuIGluaGVyaXRlZAorICAgICAgICAgICAgICAgIC8vIGFjY2Vzc29yLgor
ICAgICAgICAgICAgICAgIHZhciBwcm90b3R5cGUgPSBvYmplY3QuX19wcm90b19fOworICAgICAg
ICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGVPZk9iamVjdDsKKyAgICAgICAg
ICAgICAgICAvLyBEZWxldGluZyBhIHByb3BlcnR5IGFueXdheSBzaW5jZSBnZXR0ZXIgLyBzZXR0
ZXIgbWF5IGJlCisgICAgICAgICAgICAgICAgLy8gZGVmaW5lZCBvbiBvYmplY3QgaXRzZWxmLgor
ICAgICAgICAgICAgICAgIGRlbGV0ZSBvYmplY3RbcHJvcGVydHldOworICAgICAgICAgICAgICAg
IG9iamVjdFtwcm9wZXJ0eV0gPSBkZXNjcmlwdG9yLnZhbHVlOworICAgICAgICAgICAgICAgIC8v
IFNldHRpbmcgb3JpZ2luYWwgYF9fcHJvdG9fX2AgYmFjayBub3cuCisgICAgICAgICAgICAgICAg
b2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IGRlc2NyaXB0b3IudmFsdWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIXN1cHBvcnRzQWNjZXNz
b3JzKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfQUNDRVNTT1JT
X05PVF9TVVBQT1JURUQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gSWYgd2UgZ290
IHRoYXQgZmFyIHRoZW4gZ2V0dGVycyBhbmQgc2V0dGVycyBjYW4gYmUgZGVmaW5lZCAhIQorICAg
ICAgICAgICAgaWYgKG93bnMoZGVzY3JpcHRvciwgImdldCIpKSB7CisgICAgICAgICAgICAgICAg
ZGVmaW5lR2V0dGVyKG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IuZ2V0KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChvd25zKGRlc2NyaXB0b3IsICJzZXQiKSkgeworICAgICAg
ICAgICAgICAgIGRlZmluZVNldHRlcihvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yLnNldCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9
OworfQorCisvLyBFUzUgMTUuMi4zLjcKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIu
My43CitpZiAoIU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKSB7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKG9iamVjdCwgcHJvcGVydGllcykg
eworICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzKSB7CisgICAgICAgICAg
ICBpZiAob3ducyhwcm9wZXJ0aWVzLCBwcm9wZXJ0eSkgJiYgcHJvcGVydHkgIT0gIl9fcHJvdG9f
XyIpIHsKKyAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9w
ZXJ0eSwgcHJvcGVydGllc1twcm9wZXJ0eV0pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfTsKK30KKworLy8gRVM1IDE1LjIuMy44CisvLyBo
dHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuOAoraWYgKCFPYmplY3Quc2VhbCkgeworICAg
IE9iamVjdC5zZWFsID0gZnVuY3Rpb24gc2VhbChvYmplY3QpIHsKKyAgICAgICAgLy8gdGhpcyBp
cyBtaXNsZWFkaW5nIGFuZCBicmVha3MgZmVhdHVyZS1kZXRlY3Rpb24sIGJ1dAorICAgICAgICAv
LyBhbGxvd3MgInNlY3VyYWJsZSIgY29kZSB0byAiZ3JhY2VmdWxseSIgZGVncmFkZSB0byB3b3Jr
aW5nCisgICAgICAgIC8vIGJ1dCBpbnNlY3VyZSBjb2RlLgorICAgICAgICByZXR1cm4gb2JqZWN0
OworICAgIH07Cit9CisKKy8vIEVTNSAxNS4yLjMuOQorLy8gaHR0cDovL2VzNS5naXRodWIuY29t
LyN4MTUuMi4zLjkKK2lmICghT2JqZWN0LmZyZWV6ZSkgeworICAgIE9iamVjdC5mcmVlemUgPSBm
dW5jdGlvbiBmcmVlemUob2JqZWN0KSB7CisgICAgICAgIC8vIHRoaXMgaXMgbWlzbGVhZGluZyBh
bmQgYnJlYWtzIGZlYXR1cmUtZGV0ZWN0aW9uLCBidXQKKyAgICAgICAgLy8gYWxsb3dzICJzZWN1
cmFibGUiIGNvZGUgdG8gImdyYWNlZnVsbHkiIGRlZ3JhZGUgdG8gd29ya2luZworICAgICAgICAv
LyBidXQgaW5zZWN1cmUgY29kZS4KKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9OworfQor
CisvLyBkZXRlY3QgYSBSaGlubyBidWcgYW5kIHBhdGNoIGl0Cit0cnkgeworICAgIE9iamVjdC5m
cmVlemUoZnVuY3Rpb24gKCkge30pOworfSBjYXRjaCAoZXhjZXB0aW9uKSB7CisgICAgT2JqZWN0
LmZyZWV6ZSA9IChmdW5jdGlvbiBmcmVlemUoZnJlZXplT2JqZWN0KSB7CisgICAgICAgIHJldHVy
biBmdW5jdGlvbiBmcmVlemUob2JqZWN0KSB7CisgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVj
dCA9PSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZyZWV6ZU9iamVjdChvYmpl
Y3QpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0pKE9iamVjdC5mcmVlemUpOwor
fQorCisvLyBFUzUgMTUuMi4zLjEwCisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMu
MTAKK2lmICghT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKSB7CisgICAgT2JqZWN0LnByZXZlbnRF
eHRlbnNpb25zID0gZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnMob2JqZWN0KSB7CisgICAgICAg
IC8vIHRoaXMgaXMgbWlzbGVhZGluZyBhbmQgYnJlYWtzIGZlYXR1cmUtZGV0ZWN0aW9uLCBidXQK
KyAgICAgICAgLy8gYWxsb3dzICJzZWN1cmFibGUiIGNvZGUgdG8gImdyYWNlZnVsbHkiIGRlZ3Jh
ZGUgdG8gd29ya2luZworICAgICAgICAvLyBidXQgaW5zZWN1cmUgY29kZS4KKyAgICAgICAgcmV0
dXJuIG9iamVjdDsKKyAgICB9OworfQorCisvLyBFUzUgMTUuMi4zLjExCisvLyBodHRwOi8vZXM1
LmdpdGh1Yi5jb20vI3gxNS4yLjMuMTEKK2lmICghT2JqZWN0LmlzU2VhbGVkKSB7CisgICAgT2Jq
ZWN0LmlzU2VhbGVkID0gZnVuY3Rpb24gaXNTZWFsZWQob2JqZWN0KSB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9OworfQorCisvLyBFUzUgMTUuMi4zLjEyCisvLyBodHRwOi8vZXM1Lmdp
dGh1Yi5jb20vI3gxNS4yLjMuMTIKK2lmICghT2JqZWN0LmlzRnJvemVuKSB7CisgICAgT2JqZWN0
LmlzRnJvemVuID0gZnVuY3Rpb24gaXNGcm96ZW4ob2JqZWN0KSB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9OworfQorCisvLyBFUzUgMTUuMi4zLjEzCisvLyBodHRwOi8vZXM1LmdpdGh1
Yi5jb20vI3gxNS4yLjMuMTMKK2lmICghT2JqZWN0LmlzRXh0ZW5zaWJsZSkgeworICAgIE9iamVj
dC5pc0V4dGVuc2libGUgPSBmdW5jdGlvbiBpc0V4dGVuc2libGUob2JqZWN0KSB7CisgICAgICAg
IC8vIDEuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCB0aHJvdyBhIFR5cGVFcnJvciBleGNlcHRp
b24uCisgICAgICAgIGlmIChPYmplY3Qob2JqZWN0KSAhPT0gb2JqZWN0KSB7CisgICAgICAgICAg
ICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQorICAgICAgICB9CisgICAg
ICAgIC8vIDIuIFJldHVybiB0aGUgQm9vbGVhbiB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxlXV0g
aW50ZXJuYWwgcHJvcGVydHkgb2YgTy4KKyAgICAgICAgdmFyIG5hbWUgPSAnJzsKKyAgICAgICAg
d2hpbGUgKG93bnMob2JqZWN0LCBuYW1lKSkgeworICAgICAgICAgICAgbmFtZSArPSAnPyc7Cisg
ICAgICAgIH0KKyAgICAgICAgb2JqZWN0W25hbWVdID0gdHJ1ZTsKKyAgICAgICAgdmFyIHJldHVy
blZhbHVlID0gb3ducyhvYmplY3QsIG5hbWUpOworICAgICAgICBkZWxldGUgb2JqZWN0W25hbWVd
OworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfTsKK30KKworfSk7CkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZXM1LXNoaW0vZXM1LXNoaW0uanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2VzNS1z
aGltL2VzNS1zaGltLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2
ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dl
cl9jb21wb25lbnRzL2VzNS1zaGltL2VzNS1zaGltLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzc4IEBACisvLyBDb3B5cmlnaHQgMjAwOS0yMDEyIGJ5IGNvbnRyaWJ1dG9ycywgTUlUIExp
Y2Vuc2UKKy8vIHZpbTogdHM9NCBzdHM9NCBzdz00IGV4cGFuZHRhYgorCisvLyBNb2R1bGUgc3lz
dGVtcyBtYWdpYyBkYW5jZQorKGZ1bmN0aW9uIChkZWZpbml0aW9uKSB7CisgICAgLy8gUmVxdWly
ZUpTCisgICAgaWYgKHR5cGVvZiBkZWZpbmUgPT0gImZ1bmN0aW9uIikgeworICAgICAgICBkZWZp
bmUoZGVmaW5pdGlvbik7CisgICAgLy8gWVVJMworICAgIH0gZWxzZSBpZiAodHlwZW9mIFlVSSA9
PSAiZnVuY3Rpb24iKSB7CisgICAgICAgIFlVSS5hZGQoImVzNSIsIGRlZmluaXRpb24pOworICAg
IC8vIENvbW1vbkpTIGFuZCA8c2NyaXB0PgorICAgIH0gZWxzZSB7CisgICAgICAgIGRlZmluaXRp
b24oKTsKKyAgICB9Cit9KShmdW5jdGlvbiAoKSB7CisKKy8qKgorICogQnJpbmdzIGFuIGVudmly
b25tZW50IGFzIGNsb3NlIHRvIEVDTUFTY3JpcHQgNSBjb21wbGlhbmNlCisgKiBhcyBpcyBwb3Nz
aWJsZSB3aXRoIHRoZSBmYWNpbGl0aWVzIG9mIGVyc3R3aGlsZSBlbmdpbmVzLgorICoKKyAqIEFu
bm90YXRlZCBFUzU6IGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8gKHNwZWNpZmljIGxpbmtzIGJlbG93
KQorICogRVM1IFNwZWM6IGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9wdWJsaWNh
dGlvbnMvZmlsZXMvRUNNQS1TVC9FY21hLTI2Mi5wZGYKKyAqIFJlcXVpcmVkIHJlYWRpbmc6IGh0
dHA6Ly9qYXZhc2NyaXB0d2VibG9nLndvcmRwcmVzcy5jb20vMjAxMS8xMi8wNS9leHRlbmRpbmct
amF2YXNjcmlwdC1uYXRpdmVzLworICovCisKKy8vCisvLyBGdW5jdGlvbgorLy8gPT09PT09PT0K
Ky8vCisKKy8vIEVTLTUgMTUuMy40LjUKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjMu
NC41CisKK2lmICghRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQpIHsKKyAgICBGdW5jdGlvbi5wcm90
b3R5cGUuYmluZCA9IGZ1bmN0aW9uIGJpbmQodGhhdCkgeyAvLyAubGVuZ3RoIGlzIDEKKyAgICAg
ICAgLy8gMS4gTGV0IFRhcmdldCBiZSB0aGUgdGhpcyB2YWx1ZS4KKyAgICAgICAgdmFyIHRhcmdl
dCA9IHRoaXM7CisgICAgICAgIC8vIDIuIElmIElzQ2FsbGFibGUoVGFyZ2V0KSBpcyBmYWxzZSwg
dGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLgorICAgICAgICBpZiAodHlwZW9mIHRhcmdldCAh
PSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlv
bi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICIgKyB0YXJnZXQpOworICAg
ICAgICB9CisgICAgICAgIC8vIDMuIExldCBBIGJlIGEgbmV3IChwb3NzaWJseSBlbXB0eSkgaW50
ZXJuYWwgbGlzdCBvZiBhbGwgb2YgdGhlCisgICAgICAgIC8vICAgYXJndW1lbnQgdmFsdWVzIHBy
b3ZpZGVkIGFmdGVyIHRoaXNBcmcgKGFyZzEsIGFyZzIgZXRjKSwgaW4gb3JkZXIuCisgICAgICAg
IC8vIFhYWCBzbGljZWRBcmdzIHdpbGwgc3RhbmQgaW4gZm9yICJBIiBpZiB1c2VkCisgICAgICAg
IHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOyAvLyBmb3Igbm9ybWFsIGNhbGwK
KyAgICAgICAgLy8gNC4gTGV0IEYgYmUgYSBuZXcgbmF0aXZlIEVDTUFTY3JpcHQgb2JqZWN0Lgor
ICAgICAgICAvLyAxMS4gU2V0IHRoZSBbW1Byb3RvdHlwZV1dIGludGVybmFsIHByb3BlcnR5IG9m
IEYgdG8gdGhlIHN0YW5kYXJkCisgICAgICAgIC8vICAgYnVpbHQtaW4gRnVuY3Rpb24gcHJvdG90
eXBlIG9iamVjdCBhcyBzcGVjaWZpZWQgaW4gMTUuMy4zLjEuCisgICAgICAgIC8vIDEyLiBTZXQg
dGhlIFtbQ2FsbF1dIGludGVybmFsIHByb3BlcnR5IG9mIEYgYXMgZGVzY3JpYmVkIGluCisgICAg
ICAgIC8vICAgMTUuMy40LjUuMS4KKyAgICAgICAgLy8gMTMuIFNldCB0aGUgW1tDb25zdHJ1Y3Rd
XSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBGIGFzIGRlc2NyaWJlZCBpbgorICAgICAgICAvLyAgIDE1
LjMuNC41LjIuCisgICAgICAgIC8vIDE0LiBTZXQgdGhlIFtbSGFzSW5zdGFuY2VdXSBpbnRlcm5h
bCBwcm9wZXJ0eSBvZiBGIGFzIGRlc2NyaWJlZCBpbgorICAgICAgICAvLyAgIDE1LjMuNC41LjMu
CisgICAgICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uICgpIHsKKworICAgICAgICAgICAgaWYgKHRo
aXMgaW5zdGFuY2VvZiBib3VuZCkgeworICAgICAgICAgICAgICAgIC8vIDE1LjMuNC41LjIgW1tD
b25zdHJ1Y3RdXQorICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIFtbQ29uc3RydWN0XV0gaW50
ZXJuYWwgbWV0aG9kIG9mIGEgZnVuY3Rpb24gb2JqZWN0LAorICAgICAgICAgICAgICAgIC8vIEYg
dGhhdCB3YXMgY3JlYXRlZCB1c2luZyB0aGUgYmluZCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBh
CisgICAgICAgICAgICAgICAgLy8gbGlzdCBvZiBhcmd1bWVudHMgRXh0cmFBcmdzLCB0aGUgZm9s
bG93aW5nIHN0ZXBzIGFyZSB0YWtlbjoKKyAgICAgICAgICAgICAgICAvLyAxLiBMZXQgdGFyZ2V0
IGJlIHRoZSB2YWx1ZSBvZiBGJ3MgW1tUYXJnZXRGdW5jdGlvbl1dCisgICAgICAgICAgICAgICAg
Ly8gICBpbnRlcm5hbCBwcm9wZXJ0eS4KKyAgICAgICAgICAgICAgICAvLyAyLiBJZiB0YXJnZXQg
aGFzIG5vIFtbQ29uc3RydWN0XV0gaW50ZXJuYWwgbWV0aG9kLCBhCisgICAgICAgICAgICAgICAg
Ly8gICBUeXBlRXJyb3IgZXhjZXB0aW9uIGlzIHRocm93bi4KKyAgICAgICAgICAgICAgICAvLyAz
LiBMZXQgYm91bmRBcmdzIGJlIHRoZSB2YWx1ZSBvZiBGJ3MgW1tCb3VuZEFyZ3NdXSBpbnRlcm5h
bAorICAgICAgICAgICAgICAgIC8vICAgcHJvcGVydHkuCisgICAgICAgICAgICAgICAgLy8gNC4g
TGV0IGFyZ3MgYmUgYSBuZXcgbGlzdCBjb250YWluaW5nIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGUK
KyAgICAgICAgICAgICAgICAvLyAgIGxpc3QgYm91bmRBcmdzIGluIHRoZSBzYW1lIG9yZGVyIGZv
bGxvd2VkIGJ5IHRoZSBzYW1lCisgICAgICAgICAgICAgICAgLy8gICB2YWx1ZXMgYXMgdGhlIGxp
c3QgRXh0cmFBcmdzIGluIHRoZSBzYW1lIG9yZGVyLgorICAgICAgICAgICAgICAgIC8vIDUuIFJl
dHVybiB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbQ29uc3RydWN0XV0gaW50ZXJuYWwKKyAg
ICAgICAgICAgICAgICAvLyAgIG1ldGhvZCBvZiB0YXJnZXQgcHJvdmlkaW5nIGFyZ3MgYXMgdGhl
IGFyZ3VtZW50cy4KKworICAgICAgICAgICAgICAgIHZhciBGID0gZnVuY3Rpb24oKXt9OworICAg
ICAgICAgICAgICAgIEYucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTsKKyAgICAgICAgICAg
ICAgICB2YXIgc2VsZiA9IG5ldyBGOworCisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRh
cmdldC5hcHBseSgKKyAgICAgICAgICAgICAgICAgICAgc2VsZiwKKyAgICAgICAgICAgICAgICAg
ICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKQorICAgICAgICAgICAgICAgICk7
CisgICAgICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHNlbGY7CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgLy8gMTUuMy40LjUuMSBbW0NhbGxdXQorICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhl
IFtbQ2FsbF1dIGludGVybmFsIG1ldGhvZCBvZiBhIGZ1bmN0aW9uIG9iamVjdCwgRiwKKyAgICAg
ICAgICAgICAgICAvLyB3aGljaCB3YXMgY3JlYXRlZCB1c2luZyB0aGUgYmluZCBmdW5jdGlvbiBp
cyBjYWxsZWQgd2l0aCBhCisgICAgICAgICAgICAgICAgLy8gdGhpcyB2YWx1ZSBhbmQgYSBsaXN0
IG9mIGFyZ3VtZW50cyBFeHRyYUFyZ3MsIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAv
LyBzdGVwcyBhcmUgdGFrZW46CisgICAgICAgICAgICAgICAgLy8gMS4gTGV0IGJvdW5kQXJncyBi
ZSB0aGUgdmFsdWUgb2YgRidzIFtbQm91bmRBcmdzXV0gaW50ZXJuYWwKKyAgICAgICAgICAgICAg
ICAvLyAgIHByb3BlcnR5LgorICAgICAgICAgICAgICAgIC8vIDIuIExldCBib3VuZFRoaXMgYmUg
dGhlIHZhbHVlIG9mIEYncyBbW0JvdW5kVGhpc11dIGludGVybmFsCisgICAgICAgICAgICAgICAg
Ly8gICBwcm9wZXJ0eS4KKyAgICAgICAgICAgICAgICAvLyAzLiBMZXQgdGFyZ2V0IGJlIHRoZSB2
YWx1ZSBvZiBGJ3MgW1tUYXJnZXRGdW5jdGlvbl1dIGludGVybmFsCisgICAgICAgICAgICAgICAg
Ly8gICBwcm9wZXJ0eS4KKyAgICAgICAgICAgICAgICAvLyA0LiBMZXQgYXJncyBiZSBhIG5ldyBs
aXN0IGNvbnRhaW5pbmcgdGhlIHNhbWUgdmFsdWVzIGFzIHRoZQorICAgICAgICAgICAgICAgIC8v
ICAgbGlzdCBib3VuZEFyZ3MgaW4gdGhlIHNhbWUgb3JkZXIgZm9sbG93ZWQgYnkgdGhlIHNhbWUK
KyAgICAgICAgICAgICAgICAvLyAgIHZhbHVlcyBhcyB0aGUgbGlzdCBFeHRyYUFyZ3MgaW4gdGhl
IHNhbWUgb3JkZXIuCisgICAgICAgICAgICAgICAgLy8gNS4gUmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y2FsbGluZyB0aGUgW1tDYWxsXV0gaW50ZXJuYWwgbWV0aG9kCisgICAgICAgICAgICAgICAgLy8g
ICBvZiB0YXJnZXQgcHJvdmlkaW5nIGJvdW5kVGhpcyBhcyB0aGUgdGhpcyB2YWx1ZSBhbmQKKyAg
ICAgICAgICAgICAgICAvLyAgIHByb3ZpZGluZyBhcmdzIGFzIHRoZSBhcmd1bWVudHMuCisKKyAg
ICAgICAgICAgICAgICAvLyBlcXVpdjogdGFyZ2V0LmNhbGwodGhpcywgLi4uYm91bmRBcmdzLCAu
Li5hcmdzKQorICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkoCisgICAgICAgICAg
ICAgICAgICAgIHRoYXQsCisgICAgICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNh
bGwoYXJndW1lbnRzKSkKKyAgICAgICAgICAgICAgICApOworCisgICAgICAgICAgICB9CisKKyAg
ICAgICAgfTsKKyAgICAgICAgLy8gWFhYIGJvdW5kLmxlbmd0aCBpcyBuZXZlciB3cml0YWJsZSwg
c28gZG9uJ3QgZXZlbiB0cnkKKyAgICAgICAgLy8KKyAgICAgICAgLy8gMTUuIElmIHRoZSBbW0Ns
YXNzXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgVGFyZ2V0IGlzICJGdW5jdGlvbiIsIHRoZW4KKyAg
ICAgICAgLy8gICAgIGEuIExldCBMIGJlIHRoZSBsZW5ndGggcHJvcGVydHkgb2YgVGFyZ2V0IG1p
bnVzIHRoZSBsZW5ndGggb2YgQS4KKyAgICAgICAgLy8gICAgIGIuIFNldCB0aGUgbGVuZ3RoIG93
biBwcm9wZXJ0eSBvZiBGIHRvIGVpdGhlciAwIG9yIEwsIHdoaWNoZXZlciBpcworICAgICAgICAv
LyAgICAgICBsYXJnZXIuCisgICAgICAgIC8vIDE2LiBFbHNlIHNldCB0aGUgbGVuZ3RoIG93biBw
cm9wZXJ0eSBvZiBGIHRvIDAuCisgICAgICAgIC8vIDE3LiBTZXQgdGhlIGF0dHJpYnV0ZXMgb2Yg
dGhlIGxlbmd0aCBvd24gcHJvcGVydHkgb2YgRiB0byB0aGUgdmFsdWVzCisgICAgICAgIC8vICAg
c3BlY2lmaWVkIGluIDE1LjMuNS4xLgorCisgICAgICAgIC8vIFRPRE8KKyAgICAgICAgLy8gMTgu
IFNldCB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgRiB0byB0cnVlLgor
CisgICAgICAgIC8vIFRPRE8KKyAgICAgICAgLy8gMTkuIExldCB0aHJvd2VyIGJlIHRoZSBbW1Ro
cm93VHlwZUVycm9yXV0gZnVuY3Rpb24gT2JqZWN0ICgxMy4yLjMpLgorICAgICAgICAvLyAyMC4g
Q2FsbCB0aGUgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBGIHdpdGgK
KyAgICAgICAgLy8gICBhcmd1bWVudHMgImNhbGxlciIsIFByb3BlcnR5RGVzY3JpcHRvciB7W1tH
ZXRdXTogdGhyb3dlciwgW1tTZXRdXToKKyAgICAgICAgLy8gICB0aHJvd2VyLCBbW0VudW1lcmFi
bGVdXTogZmFsc2UsIFtbQ29uZmlndXJhYmxlXV06IGZhbHNlfSwgYW5kCisgICAgICAgIC8vICAg
ZmFsc2UuCisgICAgICAgIC8vIDIxLiBDYWxsIHRoZSBbW0RlZmluZU93blByb3BlcnR5XV0gaW50
ZXJuYWwgbWV0aG9kIG9mIEYgd2l0aAorICAgICAgICAvLyAgIGFyZ3VtZW50cyAiYXJndW1lbnRz
IiwgUHJvcGVydHlEZXNjcmlwdG9yIHtbW0dldF1dOiB0aHJvd2VyLAorICAgICAgICAvLyAgIFtb
U2V0XV06IHRocm93ZXIsIFtbRW51bWVyYWJsZV1dOiBmYWxzZSwgW1tDb25maWd1cmFibGVdXTog
ZmFsc2V9LAorICAgICAgICAvLyAgIGFuZCBmYWxzZS4KKworICAgICAgICAvLyBUT0RPCisgICAg
ICAgIC8vIE5PVEUgRnVuY3Rpb24gb2JqZWN0cyBjcmVhdGVkIHVzaW5nIEZ1bmN0aW9uLnByb3Rv
dHlwZS5iaW5kIGRvIG5vdAorICAgICAgICAvLyBoYXZlIGEgcHJvdG90eXBlIHByb3BlcnR5IG9y
IHRoZSBbW0NvZGVdXSwgW1tGb3JtYWxQYXJhbWV0ZXJzXV0sIGFuZAorICAgICAgICAvLyBbW1Nj
b3BlXV0gaW50ZXJuYWwgcHJvcGVydGllcy4KKyAgICAgICAgLy8gWFhYIGNhbid0IGRlbGV0ZSBw
cm90b3R5cGUgaW4gcHVyZS1qcy4KKworICAgICAgICAvLyAyMi4gUmV0dXJuIEYuCisgICAgICAg
IHJldHVybiBib3VuZDsKKyAgICB9OworfQorCisvLyBTaG9ydGN1dCB0byBhbiBvZnRlbiBhY2Nl
c3NlZCBwcm9wZXJ0aWVzLCBpbiBvcmRlciB0byBhdm9pZCBtdWx0aXBsZQorLy8gZGVyZWZlcmVu
Y2UgdGhhdCBjb3N0cyB1bml2ZXJzYWxseS4KKy8vIF9QbGVhc2Ugbm90ZTogU2hvcnRjdXRzIGFy
ZSBkZWZpbmVkIGFmdGVyIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAgYXMgd2UKKy8vIHVzIGl0
IGluIGRlZmluaW5nIHNob3J0Y3V0cy4KK3ZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNh
bGw7Cit2YXIgcHJvdG90eXBlT2ZBcnJheSA9IEFycmF5LnByb3RvdHlwZTsKK3ZhciBwcm90b3R5
cGVPZk9iamVjdCA9IE9iamVjdC5wcm90b3R5cGU7Cit2YXIgc2xpY2UgPSBwcm90b3R5cGVPZkFy
cmF5LnNsaWNlOworLy8gSGF2aW5nIGEgdG9TdHJpbmcgbG9jYWwgdmFyaWFibGUgbmFtZSBicmVh
a3MgaW4gT3BlcmEgc28gdXNlIF90b1N0cmluZy4KK3ZhciBfdG9TdHJpbmcgPSBjYWxsLmJpbmQo
cHJvdG90eXBlT2ZPYmplY3QudG9TdHJpbmcpOwordmFyIG93bnMgPSBjYWxsLmJpbmQocHJvdG90
eXBlT2ZPYmplY3QuaGFzT3duUHJvcGVydHkpOworCisvLyBJZiBKUyBlbmdpbmUgc3VwcG9ydHMg
YWNjZXNzb3JzIGNyZWF0aW5nIHNob3J0Y3V0cy4KK3ZhciBkZWZpbmVHZXR0ZXI7Cit2YXIgZGVm
aW5lU2V0dGVyOwordmFyIGxvb2t1cEdldHRlcjsKK3ZhciBsb29rdXBTZXR0ZXI7Cit2YXIgc3Vw
cG9ydHNBY2Nlc3NvcnM7CitpZiAoKHN1cHBvcnRzQWNjZXNzb3JzID0gb3ducyhwcm90b3R5cGVP
Zk9iamVjdCwgIl9fZGVmaW5lR2V0dGVyX18iKSkpIHsKKyAgICBkZWZpbmVHZXR0ZXIgPSBjYWxs
LmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19kZWZpbmVHZXR0ZXJfXyk7CisgICAgZGVmaW5lU2V0
dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fZGVmaW5lU2V0dGVyX18pOworICAg
IGxvb2t1cEdldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2xvb2t1cEdldHRl
cl9fKTsKKyAgICBsb29rdXBTZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19s
b29rdXBTZXR0ZXJfXyk7Cit9CisKKy8vCisvLyBBcnJheQorLy8gPT09PT0KKy8vCisKKy8vIEVT
NSAxNS40LjMuMgorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC4zLjIKKy8vIGh0dHBz
Oi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9P
YmplY3RzL0FycmF5L2lzQXJyYXkKK2lmICghQXJyYXkuaXNBcnJheSkgeworICAgIEFycmF5Lmlz
QXJyYXkgPSBmdW5jdGlvbiBpc0FycmF5KG9iaikgeworICAgICAgICByZXR1cm4gX3RvU3RyaW5n
KG9iaikgPT0gIltvYmplY3QgQXJyYXldIjsKKyAgICB9OworfQorCisvLyBUaGUgSXNDYWxsYWJs
ZSgpIGNoZWNrIGluIHRoZSBBcnJheSBmdW5jdGlvbnMKKy8vIGhhcyBiZWVuIHJlcGxhY2VkIHdp
dGggYSBzdHJpY3QgY2hlY2sgb24gdGhlCisvLyBpbnRlcm5hbCBjbGFzcyBvZiB0aGUgb2JqZWN0
IHRvIHRyYXAgY2FzZXMgd2hlcmUKKy8vIHRoZSBwcm92aWRlZCBmdW5jdGlvbiB3YXMgYWN0dWFs
bHkgYSByZWd1bGFyCisvLyBleHByZXNzaW9uIGxpdGVyYWwsIHdoaWNoIGluIFY4IGFuZAorLy8g
SmF2YVNjcmlwdENvcmUgaXMgYSB0eXBlb2YgImZ1bmN0aW9uIi4gIE9ubHkgaW4KKy8vIFY4IGFy
ZSByZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbHMgcGVybWl0dGVkIGFzCisvLyByZWR1Y2UgcGFy
YW1ldGVycywgc28gaXQgaXMgZGVzaXJhYmxlIGluIHRoZQorLy8gZ2VuZXJhbCBjYXNlIGZvciB0
aGUgc2hpbSB0byBtYXRjaCB0aGUgbW9yZQorLy8gc3RyaWN0IGFuZCBjb21tb24gYmVoYXZpb3Ig
b2YgcmVqZWN0aW5nIHJlZ3VsYXIKKy8vIGV4cHJlc3Npb25zLgorCisvLyBFUzUgMTUuNC40LjE4
CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMTgKKy8vIGh0dHBzOi8vZGV2ZWxv
cGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL2Fy
cmF5L2ZvckVhY2gKK2lmICghQXJyYXkucHJvdG90eXBlLmZvckVhY2gpIHsKKyAgICBBcnJheS5w
cm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIGZvckVhY2goZnVuIC8qLCB0aGlzcCovKSB7Cisg
ICAgICAgIHZhciBzZWxmID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICB0aGlzcCA9IGFy
Z3VtZW50c1sxXSwKKyAgICAgICAgICAgIGkgPSAtMSwKKyAgICAgICAgICAgIGxlbmd0aCA9IHNl
bGYubGVuZ3RoID4+PiAwOworCisgICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9y
IGlmIGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxhYmxlIGZ1bmN0aW9uCisgICAgICAgIGlmIChfdG9T
dHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CisgICAgICAgICAgICB0aHJvdyBu
ZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQorICAgICAgICB9CisKKyAgICAgICAgd2hp
bGUgKCsraSA8IGxlbmd0aCkgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgeworICAgICAg
ICAgICAgICAgIC8vIEludm9rZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCBjYWxsLCBwYXNz
aW5nIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgICAvLyBjb250ZXh0LCBwcm9wZXJ0eSB2YWx1
ZSwgcHJvcGVydHkga2V5LCB0aGlzQXJnIG9iamVjdCBjb250ZXh0CisgICAgICAgICAgICAgICAg
ZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIHNlbGYpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfTsKK30KKworLy8gRVM1IDE1LjQuNC4xOQorLy8gaHR0cDovL2VzNS5naXRodWIu
Y29tLyN4MTUuNC40LjE5CisvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9Db3Jl
X0phdmFTY3JpcHRfMS41X1JlZmVyZW5jZS9PYmplY3RzL0FycmF5L21hcAoraWYgKCFBcnJheS5w
cm90b3R5cGUubWFwKSB7CisgICAgQXJyYXkucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIG1hcChm
dW4gLyosIHRoaXNwKi8pIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0b09iamVjdCh0aGlzKSwKKyAg
ICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAorICAgICAgICAgICAgcmVzdWx0
ID0gQXJyYXkobGVuZ3RoKSwKKyAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOworCisg
ICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBh
IGNhbGxhYmxlIGZ1bmN0aW9uCisgICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVj
dCBGdW5jdGlvbl0iKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIg
aXMgbm90IGEgZnVuY3Rpb24iKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpIGluIHNlbGYpCisgICAgICAg
ICAgICAgICAgcmVzdWx0W2ldID0gZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIHNlbGYpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKK30KKworLy8gRVM1IDE1
LjQuNC4yMAorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjIwCisvLyBodHRwczov
L2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9Db3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5jZS9P
YmplY3RzL0FycmF5L2ZpbHRlcgoraWYgKCFBcnJheS5wcm90b3R5cGUuZmlsdGVyKSB7CisgICAg
QXJyYXkucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uIGZpbHRlcihmdW4gLyosIHRoaXNwICov
KSB7CisgICAgICAgIHZhciBzZWxmID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBsZW5n
dGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwKKyAgICAgICAgICAgIHJlc3VsdCA9IFtdLAorICAgICAg
ICAgICAgdmFsdWUsCisgICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTsKKworICAgICAg
ICAvLyBJZiBubyBjYWxsYmFjayBmdW5jdGlvbiBvciBpZiBjYWxsYmFjayBpcyBub3QgYSBjYWxs
YWJsZSBmdW5jdGlvbgorICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVu
Y3Rpb25dIikgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5v
dCBhIGZ1bmN0aW9uIik7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CisgICAgICAgICAg
ICAgICAgdmFsdWUgPSBzZWxmW2ldOworICAgICAgICAgICAgICAgIGlmIChmdW4uY2FsbCh0aGlz
cCwgdmFsdWUsIGksIHNlbGYpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHZh
bHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworfQorCisvLyBFUzUgMTUuNC40LjE2CisvLyBodHRw
Oi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMTYKKy8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemls
bGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2V2ZXJ5
CitpZiAoIUFycmF5LnByb3RvdHlwZS5ldmVyeSkgeworICAgIEFycmF5LnByb3RvdHlwZS5ldmVy
eSA9IGZ1bmN0aW9uIGV2ZXJ5KGZ1biAvKiwgdGhpc3AgKi8pIHsKKyAgICAgICAgdmFyIHNlbGYg
PSB0b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAw
LAorICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07CisKKyAgICAgICAgLy8gSWYgbm8g
Y2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rp
b24KKyAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsK
KyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlv
biIpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiAhZnVuLmNhbGwodGhpc3AsIHNlbGZb
aV0sIGksIHNlbGYpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07Cit9CisKKy8vIEVT
NSAxNS40LjQuMTcKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuNC4xNworLy8gaHR0
cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFs
X09iamVjdHMvQXJyYXkvc29tZQoraWYgKCFBcnJheS5wcm90b3R5cGUuc29tZSkgeworICAgIEFy
cmF5LnByb3RvdHlwZS5zb21lID0gZnVuY3Rpb24gc29tZShmdW4gLyosIHRoaXNwICovKSB7Cisg
ICAgICAgIHZhciBzZWxmID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBsZW5ndGggPSBz
ZWxmLmxlbmd0aCA+Pj4gMCwKKyAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOworCisg
ICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBh
IGNhbGxhYmxlIGZ1bmN0aW9uCisgICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVj
dCBGdW5jdGlvbl0iKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIg
aXMgbm90IGEgZnVuY3Rpb24iKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgZnVuLmNh
bGwodGhpc3AsIHNlbGZbaV0sIGksIHNlbGYpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH07Cit9CisKKy8vIEVTNSAxNS40LjQuMjEKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1
LjQuNC4yMQorLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vQ29yZV9KYXZhU2Ny
aXB0XzEuNV9SZWZlcmVuY2UvT2JqZWN0cy9BcnJheS9yZWR1Y2UKK2lmICghQXJyYXkucHJvdG90
eXBlLnJlZHVjZSkgeworICAgIEFycmF5LnByb3RvdHlwZS5yZWR1Y2UgPSBmdW5jdGlvbiByZWR1
Y2UoZnVuIC8qLCBpbml0aWFsKi8pIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0b09iamVjdCh0aGlz
KSwKKyAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOworCisgICAgICAgIC8v
IElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxhYmxl
IGZ1bmN0aW9uCisgICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlv
bl0iKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEg
ZnVuY3Rpb24iKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIG5vIHZhbHVlIHRvIHJldHVybiBp
ZiBubyBpbml0aWFsIHZhbHVlIGFuZCBhbiBlbXB0eSBhcnJheQorICAgICAgICBpZiAoIWxlbmd0
aCAmJiBhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBl
RXJyb3IoJ3JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZhciBpID0gMDsKKyAgICAgICAgdmFyIHJlc3VsdDsKKyAgICAg
ICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMikgeworICAgICAgICAgICAgcmVzdWx0ID0gYXJn
dW1lbnRzWzFdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZG8geworICAgICAgICAg
ICAgICAgIGlmIChpIGluIHNlbGYpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2Vs
ZltpKytdOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAvLyBpZiBhcnJheSBjb250YWlucyBubyB2YWx1ZXMsIG5vIGluaXRp
YWwgdmFsdWUgdG8gcmV0dXJuCisgICAgICAgICAgICAgICAgaWYgKCsraSA+PSBsZW5ndGgpIHsK
KyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVkdWNlIG9mIGVtcHR5
IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gd2hpbGUgKHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICg7IGkgPCBs
ZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgeworICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IGZ1bi5jYWxsKHZvaWQgMCwgcmVzdWx0LCBzZWxmW2ldLCBpLCBzZWxmKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fTsKK30KKworLy8gRVM1IDE1LjQuNC4yMgorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUu
NC40LjIyCisvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9Db3JlX0phdmFTY3Jp
cHRfMS41X1JlZmVyZW5jZS9PYmplY3RzL0FycmF5L3JlZHVjZVJpZ2h0CitpZiAoIUFycmF5LnBy
b3RvdHlwZS5yZWR1Y2VSaWdodCkgeworICAgIEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCA9
IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGZ1biAvKiwgaW5pdGlhbCovKSB7CisgICAgICAgIHZhciBz
ZWxmID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+
Pj4gMDsKKworICAgICAgICAvLyBJZiBubyBjYWxsYmFjayBmdW5jdGlvbiBvciBpZiBjYWxsYmFj
ayBpcyBub3QgYSBjYWxsYWJsZSBmdW5jdGlvbgorICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikg
IT0gIltvYmplY3QgRnVuY3Rpb25dIikgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJv
cihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CisgICAgICAgIH0KKworICAgICAgICAvLyBu
byB2YWx1ZSB0byByZXR1cm4gaWYgbm8gaW5pdGlhbCB2YWx1ZSwgZW1wdHkgYXJyYXkKKyAgICAg
ICAgaWYgKCFsZW5ndGggJiYgYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICB0
aHJvdyBuZXcgVHlwZUVycm9yKCdyZWR1Y2VSaWdodCBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGlu
aXRpYWwgdmFsdWUnKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciByZXN1bHQsIGkgPSBsZW5n
dGggLSAxOworICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAyKSB7CisgICAgICAgICAg
ICByZXN1bHQgPSBhcmd1bWVudHNbMV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBk
byB7CisgICAgICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgeworICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgPSBzZWxmW2ktLV07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGlmIGFycmF5IGNvbnRhaW5zIG5vIHZh
bHVlcywgbm8gaW5pdGlhbCB2YWx1ZSB0byByZXR1cm4KKyAgICAgICAgICAgICAgICBpZiAoLS1p
IDwgMCkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZWR1Y2VS
aWdodCBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IHdoaWxlICh0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAg
IGRvIHsKKyAgICAgICAgICAgIGlmIChpIGluIHRoaXMpIHsKKyAgICAgICAgICAgICAgICByZXN1
bHQgPSBmdW4uY2FsbCh2b2lkIDAsIHJlc3VsdCwgc2VsZltpXSwgaSwgc2VsZik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gd2hpbGUgKGktLSk7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9OworfQorCisvLyBFUzUgMTUuNC40LjE0CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20v
I3gxNS40LjQuMTQKKy8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3Jp
cHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2luZGV4T2YKK2lmICghQXJyYXkucHJv
dG90eXBlLmluZGV4T2YpIHsKKyAgICBBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9u
IGluZGV4T2Yoc291Z2h0IC8qLCBmcm9tSW5kZXggKi8gKSB7CisgICAgICAgIHZhciBzZWxmID0g
dG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsK
KworICAgICAgICBpZiAoIWxlbmd0aCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAg
ICB9CisKKyAgICAgICAgdmFyIGkgPSAwOworICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+
IDEpIHsKKyAgICAgICAgICAgIGkgPSB0b0ludGVnZXIoYXJndW1lbnRzWzFdKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIGhhbmRsZSBuZWdhdGl2ZSBpbmRpY2VzCisgICAgICAgIGkgPSBpID49
IDAgPyBpIDogTWF0aC5tYXgoMCwgbGVuZ3RoICsgaSk7CisgICAgICAgIGZvciAoOyBpIDwgbGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgc2VsZltpXSA9PT0gc291
Z2h0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH07Cit9CisKKy8vIEVTNSAxNS40LjQuMTUKKy8v
IGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuNC4xNQorLy8gaHR0cHM6Ly9kZXZlbG9wZXIu
bW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkv
bGFzdEluZGV4T2YKK2lmICghQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKSB7CisgICAgQXJy
YXkucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2Yoc291Z2h0IC8q
LCBmcm9tSW5kZXggKi8pIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0b09iamVjdCh0aGlzKSwKKyAg
ICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOworCisgICAgICAgIGlmICghbGVu
Z3RoKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGkg
PSBsZW5ndGggLSAxOworICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKKyAgICAg
ICAgICAgIGkgPSBNYXRoLm1pbihpLCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7CisgICAgICAg
IH0KKyAgICAgICAgLy8gaGFuZGxlIG5lZ2F0aXZlIGluZGljZXMKKyAgICAgICAgaSA9IGkgPj0g
MCA/IGkgOiBsZW5ndGggLSBNYXRoLmFicyhpKTsKKyAgICAgICAgZm9yICg7IGkgPj0gMDsgaS0t
KSB7CisgICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmIHNvdWdodCA9PT0gc2VsZltpXSkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHJldHVybiAtMTsKKyAgICB9OworfQorCisvLworLy8gT2JqZWN0CisvLyA9PT09PT0KKy8v
CisKKy8vIEVTNSAxNS4yLjMuMTQKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy4x
NAoraWYgKCFPYmplY3Qua2V5cykgeworICAgIC8vIGh0dHA6Ly93aGF0dGhlaGVhZHNhaWQuY29t
LzIwMTAvMTAvYS1zYWZlci1vYmplY3Qta2V5cy1jb21wYXRpYmlsaXR5LWltcGxlbWVudGF0aW9u
CisgICAgdmFyIGhhc0RvbnRFbnVtQnVnID0gdHJ1ZSwKKyAgICAgICAgZG9udEVudW1zID0gWwor
ICAgICAgICAgICAgInRvU3RyaW5nIiwKKyAgICAgICAgICAgICJ0b0xvY2FsZVN0cmluZyIsCisg
ICAgICAgICAgICAidmFsdWVPZiIsCisgICAgICAgICAgICAiaGFzT3duUHJvcGVydHkiLAorICAg
ICAgICAgICAgImlzUHJvdG90eXBlT2YiLAorICAgICAgICAgICAgInByb3BlcnR5SXNFbnVtZXJh
YmxlIiwKKyAgICAgICAgICAgICJjb25zdHJ1Y3RvciIKKyAgICAgICAgXSwKKyAgICAgICAgZG9u
dEVudW1zTGVuZ3RoID0gZG9udEVudW1zLmxlbmd0aDsKKworICAgIGZvciAodmFyIGtleSBpbiB7
InRvU3RyaW5nIjogbnVsbH0pIHsKKyAgICAgICAgaGFzRG9udEVudW1CdWcgPSBmYWxzZTsKKyAg
ICB9CisKKyAgICBPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7CisKKyAgICAg
ICAgaWYgKCh0eXBlb2Ygb2JqZWN0ICE9ICJvYmplY3QiICYmIHR5cGVvZiBvYmplY3QgIT0gImZ1
bmN0aW9uIikgfHwgb2JqZWN0ID09PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlw
ZUVycm9yKCJPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Iik7CisgICAgICAgIH0K
KworICAgICAgICB2YXIga2V5cyA9IFtdOworICAgICAgICBmb3IgKHZhciBuYW1lIGluIG9iamVj
dCkgeworICAgICAgICAgICAgaWYgKG93bnMob2JqZWN0LCBuYW1lKSkgeworICAgICAgICAgICAg
ICAgIGtleXMucHVzaChuYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGlmIChoYXNEb250RW51bUJ1ZykgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0g
ZG9udEVudW1zTGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAgICAgIHZhciBkb250
RW51bSA9IGRvbnRFbnVtc1tpXTsKKyAgICAgICAgICAgICAgICBpZiAob3ducyhvYmplY3QsIGRv
bnRFbnVtKSkgeworICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goZG9udEVudW0pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
a2V5czsKKyAgICB9OworCit9CisKKy8vCisvLyBEYXRlCisvLyA9PT09CisvLworCisvLyBFUzUg
MTUuOS41LjQzCisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS45LjUuNDMKKy8vIFRoaXMg
ZnVuY3Rpb24gcmV0dXJucyBhIFN0cmluZyB2YWx1ZSByZXByZXNlbnQgdGhlIGluc3RhbmNlIGlu
IHRpbWUKKy8vIHJlcHJlc2VudGVkIGJ5IHRoaXMgRGF0ZSBvYmplY3QuIFRoZSBmb3JtYXQgb2Yg
dGhlIFN0cmluZyBpcyB0aGUgRGF0ZSBUaW1lCisvLyBzdHJpbmcgZm9ybWF0IGRlZmluZWQgaW4g
MTUuOS4xLjE1LiBBbGwgZmllbGRzIGFyZSBwcmVzZW50IGluIHRoZSBTdHJpbmcuCisvLyBUaGUg
dGltZSB6b25lIGlzIGFsd2F5cyBVVEMsIGRlbm90ZWQgYnkgdGhlIHN1ZmZpeCBaLiBJZiB0aGUg
dGltZSB2YWx1ZSBvZgorLy8gdGhpcyBvYmplY3QgaXMgbm90IGEgZmluaXRlIE51bWJlciBhIFJh
bmdlRXJyb3IgZXhjZXB0aW9uIGlzIHRocm93bi4KK2lmICghRGF0ZS5wcm90b3R5cGUudG9JU09T
dHJpbmcgfHwgKG5ldyBEYXRlKC02MjE5ODc1NTIwMDAwMCkudG9JU09TdHJpbmcoKS5pbmRleE9m
KCctMDAwMDAxJykgPT09IC0xKSkgeworICAgIERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nID0g
ZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7CisgICAgICAgIHZhciByZXN1bHQsIGxlbmd0aCwgdmFs
dWUsIHllYXI7CisgICAgICAgIGlmICghaXNGaW5pdGUodGhpcykpIHsKKyAgICAgICAgICAgIHRo
cm93IG5ldyBSYW5nZUVycm9yKCJEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyBjYWxsZWQgb24g
bm9uLWZpbml0ZSB2YWx1ZS4iKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHRoZSBkYXRlIHRp
bWUgc3RyaW5nIGZvcm1hdCBpcyBzcGVjaWZpZWQgaW4gMTUuOS4xLjE1LgorICAgICAgICByZXN1
bHQgPSBbdGhpcy5nZXRVVENNb250aCgpICsgMSwgdGhpcy5nZXRVVENEYXRlKCksCisgICAgICAg
ICAgICB0aGlzLmdldFVUQ0hvdXJzKCksIHRoaXMuZ2V0VVRDTWludXRlcygpLCB0aGlzLmdldFVU
Q1NlY29uZHMoKV07CisgICAgICAgIHllYXIgPSB0aGlzLmdldFVUQ0Z1bGxZZWFyKCk7CisgICAg
ICAgIHllYXIgPSAoeWVhciA8IDAgPyAnLScgOiAoeWVhciA+IDk5OTkgPyAnKycgOiAnJykpICsg
KCcwMDAwMCcgKyBNYXRoLmFicyh5ZWFyKSkuc2xpY2UoMCA8PSB5ZWFyICYmIHllYXIgPD0gOTk5
OSA/IC00IDogLTYpOworCisgICAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7CisgICAgICAg
IHdoaWxlIChsZW5ndGgtLSkgeworICAgICAgICAgICAgdmFsdWUgPSByZXN1bHRbbGVuZ3RoXTsK
KyAgICAgICAgICAgIC8vIHBhZCBtb250aHMsIGRheXMsIGhvdXJzLCBtaW51dGVzLCBhbmQgc2Vj
b25kcyB0byBoYXZlIHR3byBkaWdpdHMuCisgICAgICAgICAgICBpZiAodmFsdWUgPCAxMCkgewor
ICAgICAgICAgICAgICAgIHJlc3VsdFtsZW5ndGhdID0gIjAiICsgdmFsdWU7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gcGFkIG1pbGxpc2Vjb25kcyB0byBoYXZlIHRocmVl
IGRpZ2l0cy4KKyAgICAgICAgcmV0dXJuIHllYXIgKyAiLSIgKyByZXN1bHQuc2xpY2UoMCwgMiku
am9pbigiLSIpICsgIlQiICsgcmVzdWx0LnNsaWNlKDIpLmpvaW4oIjoiKSArICIuIiArCisgICAg
ICAgICAgICAoIjAwMCIgKyB0aGlzLmdldFVUQ01pbGxpc2Vjb25kcygpKS5zbGljZSgtMykgKyAi
WiI7CisgICAgfQorfQorCisvLyBFUzUgMTUuOS40LjQKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNv
bS8jeDE1LjkuNC40CitpZiAoIURhdGUubm93KSB7CisgICAgRGF0ZS5ub3cgPSBmdW5jdGlvbiBu
b3coKSB7CisgICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKKyAgICB9OworfQor
CisvLyBFUzUgMTUuOS41LjQ0CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS45LjUuNDQK
Ky8vIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBE
YXRlIG9iamVjdCBmb3IgdXNlIGJ5CisvLyBKU09OLnN0cmluZ2lmeSAoMTUuMTIuMykuCitpZiAo
IURhdGUucHJvdG90eXBlLnRvSlNPTikgeworICAgIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1
bmN0aW9uIHRvSlNPTihrZXkpIHsKKyAgICAgICAgLy8gV2hlbiB0aGUgdG9KU09OIG1ldGhvZCBp
cyBjYWxsZWQgd2l0aCBhcmd1bWVudCBrZXksIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgLy8gc3Rl
cHMgYXJlIHRha2VuOgorCisgICAgICAgIC8vIDEuICBMZXQgTyBiZSB0aGUgcmVzdWx0IG9mIGNh
bGxpbmcgVG9PYmplY3QsIGdpdmluZyBpdCB0aGUgdGhpcworICAgICAgICAvLyB2YWx1ZSBhcyBp
dHMgYXJndW1lbnQuCisgICAgICAgIC8vIDIuIExldCB0diBiZSBUb1ByaW1pdGl2ZShPLCBoaW50
IE51bWJlcikuCisgICAgICAgIC8vIDMuIElmIHR2IGlzIGEgTnVtYmVyIGFuZCBpcyBub3QgZmlu
aXRlLCByZXR1cm4gbnVsbC4KKyAgICAgICAgLy8gWFhYCisgICAgICAgIC8vIDQuIExldCB0b0lT
TyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9kIG9m
CisgICAgICAgIC8vIE8gd2l0aCBhcmd1bWVudCAidG9JU09TdHJpbmciLgorICAgICAgICAvLyA1
LiBJZiBJc0NhbGxhYmxlKHRvSVNPKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0
aW9uLgorICAgICAgICBpZiAodHlwZW9mIHRoaXMudG9JU09TdHJpbmcgIT0gImZ1bmN0aW9uIikg
eworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndG9JU09TdHJpbmcgcHJvcGVydHkg
aXMgbm90IGNhbGxhYmxlJyk7CisgICAgICAgIH0KKyAgICAgICAgLy8gNi4gUmV0dXJuIHRoZSBy
ZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDYWxsXV0gaW50ZXJuYWwgbWV0aG9kIG9mCisgICAgICAg
IC8vICB0b0lTTyB3aXRoIE8gYXMgdGhlIHRoaXMgdmFsdWUgYW5kIGFuIGVtcHR5IGFyZ3VtZW50
IGxpc3QuCisgICAgICAgIHJldHVybiB0aGlzLnRvSVNPU3RyaW5nKCk7CisKKyAgICAgICAgLy8g
Tk9URSAxIFRoZSBhcmd1bWVudCBpcyBpZ25vcmVkLgorCisgICAgICAgIC8vIE5PVEUgMiBUaGUg
dG9KU09OIGZ1bmN0aW9uIGlzIGludGVudGlvbmFsbHkgZ2VuZXJpYzsgaXQgZG9lcyBub3QKKyAg
ICAgICAgLy8gcmVxdWlyZSB0aGF0IGl0cyB0aGlzIHZhbHVlIGJlIGEgRGF0ZSBvYmplY3QuIFRo
ZXJlZm9yZSwgaXQgY2FuIGJlCisgICAgICAgIC8vIHRyYW5zZmVycmVkIHRvIG90aGVyIGtpbmRz
IG9mIG9iamVjdHMgZm9yIHVzZSBhcyBhIG1ldGhvZC4gSG93ZXZlciwKKyAgICAgICAgLy8gaXQg
ZG9lcyByZXF1aXJlIHRoYXQgYW55IHN1Y2ggb2JqZWN0IGhhdmUgYSB0b0lTT1N0cmluZyBtZXRo
b2QuIEFuCisgICAgICAgIC8vIG9iamVjdCBpcyBmcmVlIHRvIHVzZSB0aGUgYXJndW1lbnQga2V5
IHRvIGZpbHRlciBpdHMKKyAgICAgICAgLy8gc3RyaW5naWZpY2F0aW9uLgorICAgIH07Cit9CisK
Ky8vIEVTNSAxNS45LjQuMgorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuOS40LjIKKy8v
IGJhc2VkIG9uIHdvcmsgc2hhcmVkIGJ5IERhbmllbCBGcmllc2VuIChkYW50bWFuKQorLy8gaHR0
cDovL2dpc3QuZ2l0aHViLmNvbS8zMDMyNDkKK2lmICghRGF0ZS5wYXJzZSB8fCBEYXRlLnBhcnNl
KCIrMjc1NzYwLTA5LTEzVDAwOjAwOjAwLjAwMFoiKSAhPT0gOC42NGUxNSkgeworICAgIC8vIFhY
WCBnbG9iYWwgYXNzaWdubWVudCB3b24ndCB3b3JrIGluIGVtYmVkZGluZ3MgdGhhdCB1c2UKKyAg
ICAvLyBhbiBhbHRlcm5hdGUgb2JqZWN0IGZvciB0aGUgY29udGV4dC4KKyAgICBEYXRlID0gKGZ1
bmN0aW9uKE5hdGl2ZURhdGUpIHsKKworICAgICAgICAvLyBEYXRlLmxlbmd0aCA9PT0gNworICAg
ICAgICB2YXIgRGF0ZSA9IGZ1bmN0aW9uIERhdGUoWSwgTSwgRCwgaCwgbSwgcywgbXMpIHsKKyAg
ICAgICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOworICAgICAgICAgICAgaWYg
KHRoaXMgaW5zdGFuY2VvZiBOYXRpdmVEYXRlKSB7CisgICAgICAgICAgICAgICAgdmFyIGRhdGUg
PSBsZW5ndGggPT0gMSAmJiBTdHJpbmcoWSkgPT09IFkgPyAvLyBpc1N0cmluZyhZKQorICAgICAg
ICAgICAgICAgICAgICAvLyBXZSBleHBsaWNpdGx5IHBhc3MgaXQgdGhyb3VnaCBwYXJzZToKKyAg
ICAgICAgICAgICAgICAgICAgbmV3IE5hdGl2ZURhdGUoRGF0ZS5wYXJzZShZKSkgOgorICAgICAg
ICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIG1hbnVhbGx5IG1ha2UgY2FsbHMgZGVwZW5kaW5n
IG9uIGFyZ3VtZW50CisgICAgICAgICAgICAgICAgICAgIC8vIGxlbmd0aCBoZXJlCisgICAgICAg
ICAgICAgICAgICAgIGxlbmd0aCA+PSA3ID8gbmV3IE5hdGl2ZURhdGUoWSwgTSwgRCwgaCwgbSwg
cywgbXMpIDoKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID49IDYgPyBuZXcgTmF0aXZlRGF0
ZShZLCBNLCBELCBoLCBtLCBzKSA6CisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA+PSA1ID8g
bmV3IE5hdGl2ZURhdGUoWSwgTSwgRCwgaCwgbSkgOgorICAgICAgICAgICAgICAgICAgICBsZW5n
dGggPj0gNCA/IG5ldyBOYXRpdmVEYXRlKFksIE0sIEQsIGgpIDoKKyAgICAgICAgICAgICAgICAg
ICAgbGVuZ3RoID49IDMgPyBuZXcgTmF0aXZlRGF0ZShZLCBNLCBEKSA6CisgICAgICAgICAgICAg
ICAgICAgIGxlbmd0aCA+PSAyID8gbmV3IE5hdGl2ZURhdGUoWSwgTSkgOgorICAgICAgICAgICAg
ICAgICAgICBsZW5ndGggPj0gMSA/IG5ldyBOYXRpdmVEYXRlKFkpIDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuZXcgTmF0aXZlRGF0ZSgpOworICAgICAgICAgICAgICAgIC8v
IFByZXZlbnQgbWl4dXBzIHdpdGggdW5maXhlZCBEYXRlIG9iamVjdAorICAgICAgICAgICAgICAg
IGRhdGUuY29uc3RydWN0b3IgPSBEYXRlOworICAgICAgICAgICAgICAgIHJldHVybiBkYXRlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZURhdGUuYXBwbHkodGhpcywg
YXJndW1lbnRzKTsKKyAgICAgICAgfTsKKworICAgICAgICAvLyAxNS45LjEuMTUgRGF0ZSBUaW1l
IFN0cmluZyBGb3JtYXQuCisgICAgICAgIHZhciBpc29EYXRlRXhwcmVzc2lvbiA9IG5ldyBSZWdF
eHAoIl4iICsKKyAgICAgICAgICAgICIoXFxkezR9fFtcK1wtXVxcZHs2fSkiICsgLy8gZm91ci1k
aWdpdCB5ZWFyIGNhcHR1cmUgb3Igc2lnbiArIDYtZGlnaXQgZXh0ZW5kZWQgeWVhcgorICAgICAg
ICAgICAgIig/Oi0oXFxkezJ9KSIgKyAvLyBvcHRpb25hbCBtb250aCBjYXB0dXJlCisgICAgICAg
ICAgICAiKD86LShcXGR7Mn0pIiArIC8vIG9wdGlvbmFsIGRheSBjYXB0dXJlCisgICAgICAgICAg
ICAiKD86IiArIC8vIGNhcHR1cmUgaG91cnM6bWludXRlczpzZWNvbmRzLm1pbGxpc2Vjb25kcwor
ICAgICAgICAgICAgICAgICJUKFxcZHsyfSkiICsgLy8gaG91cnMgY2FwdHVyZQorICAgICAgICAg
ICAgICAgICI6KFxcZHsyfSkiICsgLy8gbWludXRlcyBjYXB0dXJlCisgICAgICAgICAgICAgICAg
Iig/OiIgKyAvLyBvcHRpb25hbCA6c2Vjb25kcy5taWxsaXNlY29uZHMKKyAgICAgICAgICAgICAg
ICAgICAgIjooXFxkezJ9KSIgKyAvLyBzZWNvbmRzIGNhcHR1cmUKKyAgICAgICAgICAgICAgICAg
ICAgIig/OlxcLihcXGR7M30pKT8iICsgLy8gbWlsbGlzZWNvbmRzIGNhcHR1cmUKKyAgICAgICAg
ICAgICAgICAiKT8iICsKKyAgICAgICAgICAgICIoPzoiICsgLy8gY2FwdHVyZSBVVEMgb2Zmc2V0
IGNvbXBvbmVudAorICAgICAgICAgICAgICAgICJafCIgKyAvLyBVVEMgY2FwdHVyZQorICAgICAg
ICAgICAgICAgICIoPzoiICsgLy8gb2Zmc2V0IHNwZWNpZmllciArLy1ob3VyczptaW51dGVzCisg
ICAgICAgICAgICAgICAgICAgICIoWy0rXSkiICsgLy8gc2lnbiBjYXB0dXJlCisgICAgICAgICAg
ICAgICAgICAgICIoXFxkezJ9KSIgKyAvLyBob3VycyBvZmZzZXQgY2FwdHVyZQorICAgICAgICAg
ICAgICAgICAgICAiOihcXGR7Mn0pIiArIC8vIG1pbnV0ZXMgb2Zmc2V0IGNhcHR1cmUKKyAgICAg
ICAgICAgICAgICAiKSIgKworICAgICAgICAgICAgIik/KT8pPyk/IiArCisgICAgICAgICIkIik7
CisKKyAgICAgICAgLy8gQ29weSBhbnkgY3VzdG9tIG1ldGhvZHMgYSAzcmQgcGFydHkgbGlicmFy
eSBtYXkgaGF2ZSBhZGRlZAorICAgICAgICBmb3IgKHZhciBrZXkgaW4gTmF0aXZlRGF0ZSkgewor
ICAgICAgICAgICAgRGF0ZVtrZXldID0gTmF0aXZlRGF0ZVtrZXldOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gQ29weSAibmF0aXZlIiBtZXRob2RzIGV4cGxpY2l0bHk7IHRoZXkgbWF5IGJlIG5v
bi1lbnVtZXJhYmxlCisgICAgICAgIERhdGUubm93ID0gTmF0aXZlRGF0ZS5ub3c7CisgICAgICAg
IERhdGUuVVRDID0gTmF0aXZlRGF0ZS5VVEM7CisgICAgICAgIERhdGUucHJvdG90eXBlID0gTmF0
aXZlRGF0ZS5wcm90b3R5cGU7CisgICAgICAgIERhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0g
RGF0ZTsKKworICAgICAgICAvLyBVcGdyYWRlIERhdGUucGFyc2UgdG8gaGFuZGxlIHNpbXBsaWZp
ZWQgSVNPIDg2MDEgc3RyaW5ncworICAgICAgICBEYXRlLnBhcnNlID0gZnVuY3Rpb24gcGFyc2Uo
c3RyaW5nKSB7CisgICAgICAgICAgICB2YXIgbWF0Y2ggPSBpc29EYXRlRXhwcmVzc2lvbi5leGVj
KHN0cmluZyk7CisgICAgICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICBtYXRj
aC5zaGlmdCgpOyAvLyBraWxsIG1hdGNoWzBdLCB0aGUgZnVsbCBtYXRjaAorICAgICAgICAgICAg
ICAgIC8vIHBhcnNlIG1vbnRocywgZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFuZCBt
aWxsaXNlY29uZHMKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IDc7IGkrKykg
eworICAgICAgICAgICAgICAgICAgICAvLyBwcm92aWRlIGRlZmF1bHQgdmFsdWVzIGlmIG5lY2Vz
c2FyeQorICAgICAgICAgICAgICAgICAgICBtYXRjaFtpXSA9ICsobWF0Y2hbaV0gfHwgKGkgPCAz
ID8gMSA6IDApKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2hbMV0gaXMgdGhlIG1vbnRo
LiBNb250aHMgYXJlIDAtMTEgaW4gSmF2YVNjcmlwdAorICAgICAgICAgICAgICAgICAgICAvLyBg
RGF0ZWAgb2JqZWN0cywgYnV0IDEtMTIgaW4gSVNPIG5vdGF0aW9uLCBzbyB3ZQorICAgICAgICAg
ICAgICAgICAgICAvLyBkZWNyZW1lbnQuCisgICAgICAgICAgICAgICAgICAgIGlmIChpID09IDEp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoW2ldLS07CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBwYXJzZSB0aGUg
VVRDIG9mZnNldCBjb21wb25lbnQKKyAgICAgICAgICAgICAgICB2YXIgbWludXRlT2Zmc2V0ID0g
K21hdGNoLnBvcCgpLCBob3VyT2Zmc2V0ID0gK21hdGNoLnBvcCgpLCBzaWduID0gbWF0Y2gucG9w
KCk7CisKKyAgICAgICAgICAgICAgICAvLyBjb21wdXRlIHRoZSBleHBsaWNpdCB0aW1lIHpvbmUg
b2Zmc2V0IGlmIHNwZWNpZmllZAorICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwOworICAg
ICAgICAgICAgICAgIGlmIChzaWduKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGRldGVjdCBp
bnZhbGlkIG9mZnNldHMgYW5kIHJldHVybiBlYXJseQorICAgICAgICAgICAgICAgICAgICBpZiAo
aG91ck9mZnNldCA+IDIzIHx8IG1pbnV0ZU9mZnNldCA+IDU5KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gTmFOOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgLy8gZXhwcmVzcyB0aGUgcHJvdmlkZWQgdGltZSB6b25lIG9mZnNldCBpbiBtaW51
dGVzLiBUaGUgb2Zmc2V0IGlzCisgICAgICAgICAgICAgICAgICAgIC8vIG5lZ2F0aXZlIGZvciB0
aW1lIHpvbmVzIHdlc3Qgb2YgVVRDOyBwb3NpdGl2ZSBvdGhlcndpc2UuCisgICAgICAgICAgICAg
ICAgICAgIG9mZnNldCA9IChob3VyT2Zmc2V0ICogNjAgKyBtaW51dGVPZmZzZXQpICogNmU0ICog
KHNpZ24gPT0gIisiID8gLTEgOiAxKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAvLyBEYXRlLlVUQyBmb3IgeWVhcnMgYmV0d2VlbiAwIGFuZCA5OSBjb252ZXJ0cyB5ZWFy
IHRvIDE5MDAgKyB5ZWFyCisgICAgICAgICAgICAgICAgLy8gVGhlIEdyZWdvcmlhbiBjYWxlbmRh
ciBoYXMgYSA0MDAteWVhciBjeWNsZSwgc28KKyAgICAgICAgICAgICAgICAvLyB0byBEYXRlLlVU
Qyh5ZWFyICsgNDAwLCAuLi4uICkgLSAxMjYyMjc4MDgwMDAwMCA9PSBEYXRlLlVUQyh5ZWFyLCAu
Li4pLAorICAgICAgICAgICAgICAgIC8vIHdoZXJlIDEyNjIyNzgwODAwMDAwIC0gbnVtYmVyIG9m
IG1pbGxpc2Vjb25kcyBpbiBHcmVnb3JpYW4gY2FsZW5kYXIgNDAwIHllYXJzCisgICAgICAgICAg
ICAgICAgdmFyIHllYXIgPSArbWF0Y2hbMF07CisgICAgICAgICAgICAgICAgaWYgKDAgPD0geWVh
ciAmJiB5ZWFyIDw9IDk5KSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoWzBdID0geWVhciAr
IDQwMDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZURhdGUuVVRDLmFwcGx5KHRo
aXMsIG1hdGNoKSArIG9mZnNldCAtIDEyNjIyNzgwODAwMDAwOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIGNvbXB1dGUgYSBuZXcgVVRDIGRhdGUgdmFsdWUsIGFjY291
bnRpbmcgZm9yIHRoZSBvcHRpb25hbCBvZmZzZXQKKyAgICAgICAgICAgICAgICByZXR1cm4gTmF0
aXZlRGF0ZS5VVEMuYXBwbHkodGhpcywgbWF0Y2gpICsgb2Zmc2V0OworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZURhdGUucGFyc2UuYXBwbHkodGhpcywgYXJndW1lbnRz
KTsKKyAgICAgICAgfTsKKworICAgICAgICByZXR1cm4gRGF0ZTsKKyAgICB9KShEYXRlKTsKK30K
KworLy8KKy8vIFN0cmluZworLy8gPT09PT09CisvLworCisvLyBFUzUgMTUuNS40LjIwCisvLyBo
dHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS41LjQuMjAKK3ZhciB3cyA9ICJceDA5XHgwQVx4MEJc
eDBDXHgwRFx4MjBceEEwXHUxNjgwXHUxODBFXHUyMDAwXHUyMDAxXHUyMDAyXHUyMDAzIiArCisg
ICAgIlx1MjAwNFx1MjAwNVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwQVx1MjAyRlx1MjA1
Rlx1MzAwMFx1MjAyOCIgKworICAgICJcdTIwMjlcdUZFRkYiOworaWYgKCFTdHJpbmcucHJvdG90
eXBlLnRyaW0gfHwgd3MudHJpbSgpKSB7CisgICAgLy8gaHR0cDovL2Jsb2cuc3RldmVubGV2aXRo
YW4uY29tL2FyY2hpdmVzL2Zhc3Rlci10cmltLWphdmFzY3JpcHQKKyAgICAvLyBodHRwOi8vcGVy
ZmVjdGlvbmtpbGxzLmNvbS93aGl0ZXNwYWNlLWRldmlhdGlvbnMvCisgICAgd3MgPSAiWyIgKyB3
cyArICJdIjsKKyAgICB2YXIgdHJpbUJlZ2luUmVnZXhwID0gbmV3IFJlZ0V4cCgiXiIgKyB3cyAr
IHdzICsgIioiKSwKKyAgICAgICAgdHJpbUVuZFJlZ2V4cCA9IG5ldyBSZWdFeHAod3MgKyB3cyAr
ICIqJCIpOworICAgIFN0cmluZy5wcm90b3R5cGUudHJpbSA9IGZ1bmN0aW9uIHRyaW0oKSB7Cisg
ICAgICAgIGlmICh0aGlzID09PSB1bmRlZmluZWQgfHwgdGhpcyA9PT0gbnVsbCkgeworICAgICAg
ICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FuJ3QgY29udmVydCAiK3RoaXMrIiB0byBvYmpl
Y3QiKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UodHJp
bUJlZ2luUmVnZXhwLCAiIikucmVwbGFjZSh0cmltRW5kUmVnZXhwLCAiIik7CisgICAgfTsKK30K
KworLy8KKy8vIFV0aWwKKy8vID09PT09PQorLy8KKworLy8gRVM1IDkuNAorLy8gaHR0cDovL2Vz
NS5naXRodWIuY29tLyN4OS40CisvLyBodHRwOi8vanNwZXJmLmNvbS90by1pbnRlZ2VyCit2YXIg
dG9JbnRlZ2VyID0gZnVuY3Rpb24gKG4pIHsKKyAgICBuID0gK247CisgICAgaWYgKG4gIT09IG4p
IHsgLy8gaXNOYU4KKyAgICAgICAgbiA9IDA7CisgICAgfSBlbHNlIGlmIChuICE9PSAwICYmIG4g
IT09ICgxLzApICYmIG4gIT09IC0oMS8wKSkgeworICAgICAgICBuID0gKG4gPiAwIHx8IC0xKSAq
IE1hdGguZmxvb3IoTWF0aC5hYnMobikpOworICAgIH0KKyAgICByZXR1cm4gbjsKK307CisKK3Zh
ciBwcmVwYXJlU3RyaW5nID0gImEiWzBdICE9ICJhIjsKKyAgICAvLyBFUzUgOS45CisgICAgLy8g
aHR0cDovL2VzNS5naXRodWIuY29tLyN4OS45Cit2YXIgdG9PYmplY3QgPSBmdW5jdGlvbiAobykg
eworICAgIGlmIChvID09IG51bGwpIHsgLy8gdGhpcyBtYXRjaGVzIGJvdGggbnVsbCBhbmQgdW5k
ZWZpbmVkCisgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImNhbid0IGNvbnZlcnQgIitvKyIg
dG8gb2JqZWN0Iik7CisgICAgfQorICAgIC8vIElmIHRoZSBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0
IHN1cHBvcnQgYnktaW5kZXggYWNjZXNzIG9mCisgICAgLy8gc3RyaW5nIGNoYXJhY3RlcnMgKGV4
LiBJRSA8IDkpLCBzcGxpdCB0aGUgc3RyaW5nCisgICAgaWYgKHByZXBhcmVTdHJpbmcgJiYgdHlw
ZW9mIG8gPT0gInN0cmluZyIgJiYgbykgeworICAgICAgICByZXR1cm4gby5zcGxpdCgiIik7Cisg
ICAgfQorICAgIHJldHVybiBPYmplY3Qobyk7Cit9OworCit9KTsKSW5kZXg6IFBlcmZvcm1hbmNl
VGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxl
cy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2FkdmljZS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2Rl
cGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9hZHZp
Y2UuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jl
c291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVu
dHMvZmxpZ2h0L2xpYi9hZHZpY2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAor
Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBDb3B5cmln
aHQgMjAxMyBUd2l0dGVyLCBJbmMKKy8vIExpY2Vuc2VkIHVuZGVyIFRoZSBNSVQgTGljZW5zZQor
Ly8gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVAorLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2RlZmluZSgKKworICBbCisgICAgJy4vY29t
cG9zZScKKyAgXSwKKworICBmdW5jdGlvbihjb21wb3NlKSB7CisgICAgJ3VzZSBzdHJpY3QnOwor
CisgICAgdmFyIGFkdmljZSA9IHsKKworICAgICAgYXJvdW5kOiBmdW5jdGlvbihiYXNlLCB3cmFw
cGVkKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiBjb21wb3NlZEFyb3VuZCgpIHsKKyAgICAg
ICAgICAvLyB1bnBhY2tpbmcgYXJndW1lbnRzIGJ5IGhhbmQgYmVuY2htYXJrZWQgZmFzdGVyCisg
ICAgICAgICAgdmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJh
eShsICsgMSk7CisgICAgICAgICAgYXJnc1swXSA9IGJhc2UuYmluZCh0aGlzKTsKKyAgICAgICAg
ICBmb3IgKDsgaSA8IGw7IGkrKykgYXJnc1tpICsgMV0gPSBhcmd1bWVudHNbaV07CisKKyAgICAg
ICAgICByZXR1cm4gd3JhcHBlZC5hcHBseSh0aGlzLCBhcmdzKTsKKyAgICAgICAgfTsKKyAgICAg
IH0sCisKKyAgICAgIGJlZm9yZTogZnVuY3Rpb24oYmFzZSwgYmVmb3JlKSB7CisgICAgICAgIHZh
ciBiZWZvcmVGbiA9ICh0eXBlb2YgYmVmb3JlID09ICdmdW5jdGlvbicpID8gYmVmb3JlIDogYmVm
b3JlLm9ialtiZWZvcmUuZm5OYW1lXTsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbXBvc2Vk
QmVmb3JlKCkgeworICAgICAgICAgIGJlZm9yZUZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Cisg
ICAgICAgICAgcmV0dXJuIGJhc2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgfTsK
KyAgICAgIH0sCisKKyAgICAgIGFmdGVyOiBmdW5jdGlvbihiYXNlLCBhZnRlcikgeworICAgICAg
ICB2YXIgYWZ0ZXJGbiA9ICh0eXBlb2YgYWZ0ZXIgPT0gJ2Z1bmN0aW9uJykgPyBhZnRlciA6IGFm
dGVyLm9ialthZnRlci5mbk5hbWVdOworICAgICAgICByZXR1cm4gZnVuY3Rpb24gY29tcG9zZWRB
ZnRlcigpIHsKKyAgICAgICAgICB2YXIgcmVzID0gKGJhc2UudW5ib3VuZCB8fCBiYXNlKS5hcHBs
eSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgICAgIGFmdGVyRm4uYXBwbHkodGhpcywgYXJndW1l
bnRzKTsKKyAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICB9OworICAgICAgfSwKKworICAg
ICAgLy8gYSBtaXhpbiB0aGF0IGFsbG93cyBvdGhlciBtaXhpbnMgdG8gYXVnbWVudCBleGlzdGlu
ZyBmdW5jdGlvbnMgYnkgYWRkaW5nIGFkZGl0aW9uYWwKKyAgICAgIC8vIGNvZGUgYmVmb3JlLCBh
ZnRlciBvciBhcm91bmQuCisgICAgICB3aXRoQWR2aWNlOiBmdW5jdGlvbigpIHsKKyAgICAgICAg
WydiZWZvcmUnLCAnYWZ0ZXInLCAnYXJvdW5kJ10uZm9yRWFjaChmdW5jdGlvbihtKSB7CisgICAg
ICAgICAgdGhpc1ttXSA9IGZ1bmN0aW9uKG1ldGhvZCwgZm4pIHsKKworICAgICAgICAgICAgY29t
cG9zZS51bmxvY2tQcm9wZXJ0eSh0aGlzLCBtZXRob2QsIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICBpZiAodHlwZW9mIHRoaXNbbWV0aG9kXSA9PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAg
ICAgICAgdGhpc1ttZXRob2RdID0gYWR2aWNlW21dKHRoaXNbbWV0aG9kXSwgZm4pOworICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXNbbWV0aG9kXSA9IGZuOworICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbbWV0aG9kXTsKKyAgICAg
ICAgICAgIH0pOworCisgICAgICAgICAgfTsKKyAgICAgICAgfSwgdGhpcyk7CisgICAgICB9Cisg
ICAgfTsKKworICAgIHJldHVybiBhZHZpY2U7CisgIH0KKyk7CkluZGV4OiBQZXJmb3JtYW5jZVRl
c3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMv
ZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9iYXNlLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2Jhc2UuanMJ
KHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNl
cy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxp
Z2h0L2xpYi9iYXNlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE5IEBACisvLyA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIENvcHlyaWdodCAyMDEz
IFR3aXR0ZXIsIEluYworLy8gTGljZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlCisvLyBodHRw
Oi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUCisvLyA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KKworZGVmaW5lKAorCisgIFsKKyAgICAnLi91dGlscycsCisg
ICAgJy4vcmVnaXN0cnknLAorICAgICcuL2RlYnVnJworICBdLAorCisgIGZ1bmN0aW9uKHV0aWxz
LCByZWdpc3RyeSwgZGVidWcpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICAvLyBjb21tb24g
bWl4aW4gYWxsb2NhdGVzIGJhc2ljIGZ1bmN0aW9uYWxpdHkgLSB1c2VkIGJ5IGFsbCBjb21wb25l
bnQgcHJvdG90eXBlcworICAgIC8vIGNhbGxiYWNrIGNvbnRleHQgaXMgYm91bmQgdG8gY29tcG9u
ZW50CisgICAgdmFyIGNvbXBvbmVudElkID0gMDsKKworICAgIGZ1bmN0aW9uIHRlYXJkb3duSW5z
dGFuY2UoaW5zdGFuY2VJbmZvKXsKKyAgICAgIGluc3RhbmNlSW5mby5ldmVudHMuc2xpY2UoKS5m
b3JFYWNoKGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHZhciBhcmdzID0gW2V2ZW50LnR5cGVd
OworCisgICAgICAgIGV2ZW50LmVsZW1lbnQgJiYgYXJncy51bnNoaWZ0KGV2ZW50LmVsZW1lbnQp
OworICAgICAgICAodHlwZW9mIGV2ZW50LmNhbGxiYWNrID09ICdmdW5jdGlvbicpICYmIGFyZ3Mu
cHVzaChldmVudC5jYWxsYmFjayk7CisKKyAgICAgICAgdGhpcy5vZmYuYXBwbHkodGhpcywgYXJn
cyk7CisgICAgICB9LCBpbnN0YW5jZUluZm8uaW5zdGFuY2UpOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGNoZWNrU2VyaWFsaXphYmxlKHR5cGUsIGRhdGEpIHsKKyAgICAgIHRyeSB7CisgICAgICAg
IHdpbmRvdy5wb3N0TWVzc2FnZShkYXRhLCAnKicpOworICAgICAgfSBjYXRjaChlKSB7CisgICAg
ICAgIGNvbnNvbGUubG9nKCd1bnNlcmlhbGl6YWJsZSBkYXRhIGZvciBldmVudCcsdHlwZSwnOics
ZGF0YSk7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigKKyAgICAgICAgICBbJ1RoZSBldmVudCcs
IHR5cGUsICdvbiBjb21wb25lbnQnLCB0aGlzLnRvU3RyaW5nKCksICd3YXMgdHJpZ2dlcmVkIHdp
dGggbm9uLXNlcmlhbGl6YWJsZSBkYXRhJ10uam9pbignICcpCisgICAgICAgICk7CisgICAgICB9
CisgICAgfQorCisgICAgZnVuY3Rpb24gd2l0aEJhc2UoKSB7CisKKyAgICAgIC8vIGRlbGVnYXRl
IHRyaWdnZXIsIGJpbmQgYW5kIHVuYmluZCB0byBhbiBlbGVtZW50CisgICAgICAvLyBpZiAkZWxl
bWVudCBub3Qgc3VwcGxpZWQsIHVzZSBjb21wb25lbnQncyBub2RlCisgICAgICAvLyBvdGhlciBh
cmd1bWVudHMgYXJlIHBhc3NlZCBvbgorICAgICAgLy8gZXZlbnQgY2FuIGJlIGVpdGhlciBhIHN0
cmluZyBzcGVjaWZ5aW5nIHRoZSB0eXBlCisgICAgICAvLyBvZiB0aGUgZXZlbnQsIG9yIGEgaGFz
aCBzcGVjaWZ5aW5nIGJvdGggdGhlIHR5cGUKKyAgICAgIC8vIGFuZCBhIGRlZmF1bHQgZnVuY3Rp
b24gdG8gYmUgY2FsbGVkLgorICAgICAgdGhpcy50cmlnZ2VyID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHZhciAkZWxlbWVudCwgdHlwZSwgZGF0YSwgZXZlbnQsIGRlZmF1bHRGbjsKKyAgICAgICAg
dmFyIGxhc3RJbmRleCA9IGFyZ3VtZW50cy5sZW5ndGggLSAxLCBsYXN0QXJnID0gYXJndW1lbnRz
W2xhc3RJbmRleF07CisKKyAgICAgICAgaWYgKHR5cGVvZiBsYXN0QXJnICE9ICdzdHJpbmcnICYm
ICEobGFzdEFyZyAmJiBsYXN0QXJnLmRlZmF1bHRCZWhhdmlvcikpIHsKKyAgICAgICAgICBsYXN0
SW5kZXgtLTsKKyAgICAgICAgICBkYXRhID0gbGFzdEFyZzsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChsYXN0SW5kZXggPT0gMSkgeworICAgICAgICAgICRlbGVtZW50ID0gJChhcmd1bWVudHNb
MF0pOworICAgICAgICAgIGV2ZW50ID0gYXJndW1lbnRzWzFdOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICRlbGVtZW50ID0gdGhpcy4kbm9kZTsKKyAgICAgICAgICBldmVudCA9IGFyZ3Vt
ZW50c1swXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChldmVudC5kZWZhdWx0QmVoYXZpb3Ip
IHsKKyAgICAgICAgICBkZWZhdWx0Rm4gPSBldmVudC5kZWZhdWx0QmVoYXZpb3I7CisgICAgICAg
ICAgZXZlbnQgPSAkLkV2ZW50KGV2ZW50LnR5cGUpOworICAgICAgICB9CisKKyAgICAgICAgdHlw
ZSA9IGV2ZW50LnR5cGUgfHwgZXZlbnQ7CisKKyAgICAgICAgaWYgKGRlYnVnLmVuYWJsZWQgJiYg
d2luZG93LnBvc3RNZXNzYWdlKSB7CisgICAgICAgICAgY2hlY2tTZXJpYWxpemFibGUuY2FsbCh0
aGlzLCB0eXBlLCBkYXRhKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlb2YgdGhpcy5h
dHRyLmV2ZW50RGF0YSA9PT0gJ29iamVjdCcpIHsKKyAgICAgICAgICBkYXRhID0gJC5leHRlbmQo
dHJ1ZSwge30sIHRoaXMuYXR0ci5ldmVudERhdGEsIGRhdGEpOworICAgICAgICB9CisKKyAgICAg
ICAgJGVsZW1lbnQudHJpZ2dlcigoZXZlbnQgfHwgdHlwZSksIGRhdGEpOworCisgICAgICAgIGlm
IChkZWZhdWx0Rm4gJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7CisgICAgICAgICAg
KHRoaXNbZGVmYXVsdEZuXSB8fCBkZWZhdWx0Rm4pLmNhbGwodGhpcyk7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gJGVsZW1lbnQ7CisgICAgICB9OworCisgICAgICB0aGlzLm9uID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHZhciAkZWxlbWVudCwgdHlwZSwgY2FsbGJhY2ssIG9yaWdpbmFs
Q2I7CisgICAgICAgIHZhciBsYXN0SW5kZXggPSBhcmd1bWVudHMubGVuZ3RoIC0gMSwgb3JpZ2lu
ID0gYXJndW1lbnRzW2xhc3RJbmRleF07CisKKyAgICAgICAgaWYgKHR5cGVvZiBvcmlnaW4gPT0g
J29iamVjdCcpIHsKKyAgICAgICAgICAvL2RlbGVnYXRlIGNhbGxiYWNrCisgICAgICAgICAgb3Jp
Z2luYWxDYiA9IHV0aWxzLmRlbGVnYXRlKAorICAgICAgICAgICAgdGhpcy5yZXNvbHZlRGVsZWdh
dGVSdWxlcyhvcmlnaW4pCisgICAgICAgICAgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICBvcmlnaW5hbENiID0gb3JpZ2luOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxhc3RJbmRl
eCA9PSAyKSB7CisgICAgICAgICAgJGVsZW1lbnQgPSAkKGFyZ3VtZW50c1swXSk7CisgICAgICAg
ICAgdHlwZSA9IGFyZ3VtZW50c1sxXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAkZWxl
bWVudCA9IHRoaXMuJG5vZGU7CisgICAgICAgICAgdHlwZSA9IGFyZ3VtZW50c1swXTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICh0eXBlb2Ygb3JpZ2luYWxDYiAhPSAnZnVuY3Rpb24nICYmIHR5
cGVvZiBvcmlnaW5hbENiICE9ICdvYmplY3QnKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCdVbmFibGUgdG8gYmluZCB0byAiJyArIHR5cGUgKyAnIiBiZWNhdXNlIHRoZSBnaXZlbiBjYWxs
YmFjayBpcyBub3QgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QnKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhbGxiYWNrID0gb3JpZ2luYWxDYi5iaW5kKHRoaXMpOworICAgICAgICBjYWxsYmFjay50
YXJnZXQgPSBvcmlnaW5hbENiOworCisgICAgICAgIC8vIGlmIHRoZSBvcmlnaW5hbCBjYWxsYmFj
ayBpcyBhbHJlYWR5IGJyYW5kZWQgYnkgalF1ZXJ5J3MgZ3VpZCwgY29weSBpdCB0byB0aGUgY29u
dGV4dC1ib3VuZCB2ZXJzaW9uCisgICAgICAgIGlmIChvcmlnaW5hbENiLmd1aWQpIHsKKyAgICAg
ICAgICBjYWxsYmFjay5ndWlkID0gb3JpZ2luYWxDYi5ndWlkOworICAgICAgICB9CisKKyAgICAg
ICAgJGVsZW1lbnQub24odHlwZSwgY2FsbGJhY2spOworCisgICAgICAgIC8vIGdldCBqcXVlcnkn
cyBndWlkIGZyb20gb3VyIGJvdW5kIGZuLCBzbyB1bmJpbmRpbmcgd2lsbCB3b3JrCisgICAgICAg
IG9yaWdpbmFsQ2IuZ3VpZCA9IGNhbGxiYWNrLmd1aWQ7CisKKyAgICAgICAgcmV0dXJuIGNhbGxi
YWNrOworICAgICAgfTsKKworICAgICAgdGhpcy5vZmYgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
dmFyICRlbGVtZW50LCB0eXBlLCBjYWxsYmFjazsKKyAgICAgICAgdmFyIGxhc3RJbmRleCA9IGFy
Z3VtZW50cy5sZW5ndGggLSAxOworCisgICAgICAgIGlmICh0eXBlb2YgYXJndW1lbnRzW2xhc3RJ
bmRleF0gPT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAgIGNhbGxiYWNrID0gYXJndW1lbnRzW2xh
c3RJbmRleF07CisgICAgICAgICAgbGFzdEluZGV4IC09IDE7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobGFzdEluZGV4ID09IDEpIHsKKyAgICAgICAgICAkZWxlbWVudCA9ICQoYXJndW1lbnRz
WzBdKTsKKyAgICAgICAgICB0eXBlID0gYXJndW1lbnRzWzFdOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICRlbGVtZW50ID0gdGhpcy4kbm9kZTsKKyAgICAgICAgICB0eXBlID0gYXJndW1l
bnRzWzBdOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICRlbGVtZW50Lm9mZih0eXBlLCBj
YWxsYmFjayk7CisgICAgICB9OworCisgICAgICB0aGlzLnJlc29sdmVEZWxlZ2F0ZVJ1bGVzID0g
ZnVuY3Rpb24ocnVsZUluZm8pIHsKKyAgICAgICAgdmFyIHJ1bGVzID0ge307CisKKyAgICAgICAg
T2JqZWN0LmtleXMocnVsZUluZm8pLmZvckVhY2goZnVuY3Rpb24ocikgeworICAgICAgICAgIGlm
ICghKHIgaW4gdGhpcy5hdHRyKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21w
b25lbnQgIicgKyB0aGlzLnRvU3RyaW5nKCkgKyAnIiB3YW50cyB0byBsaXN0ZW4gb24gIicgKyBy
ICsgJyIgYnV0IG5vIHN1Y2ggYXR0cmlidXRlIHdhcyBkZWZpbmVkLicpOworICAgICAgICAgIH0K
KyAgICAgICAgICBydWxlc1t0aGlzLmF0dHJbcl1dID0gcnVsZUluZm9bcl07CisgICAgICAgIH0s
IHRoaXMpOworCisgICAgICAgIHJldHVybiBydWxlczsKKyAgICAgIH07CisKKyAgICAgIHRoaXMu
ZGVmYXVsdEF0dHJzID0gZnVuY3Rpb24oZGVmYXVsdHMpIHsKKyAgICAgICAgdXRpbHMucHVzaCh0
aGlzLmRlZmF1bHRzLCBkZWZhdWx0cywgdHJ1ZSkgfHwgKHRoaXMuZGVmYXVsdHMgPSBkZWZhdWx0
cyk7CisgICAgICB9OworCisgICAgICB0aGlzLnNlbGVjdCA9IGZ1bmN0aW9uKGF0dHJpYnV0ZUtl
eSkgeworICAgICAgICByZXR1cm4gdGhpcy4kbm9kZS5maW5kKHRoaXMuYXR0clthdHRyaWJ1dGVL
ZXldKTsKKyAgICAgIH07CisKKyAgICAgIHRoaXMuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKG5vZGUs
IGF0dHJzKSB7CisgICAgICAgIGF0dHJzIHx8IChhdHRycyA9IHt9KTsKKyAgICAgICAgLy9vbmx5
IGFzc2lnbiBpZGVudGl0eSBpZiB0aGVyZSBpc24ndCBvbmUgKGluaXRpYWxpemUgY2FuIGJlIGNh
bGxlZCBtdWx0aXBsZSB0aW1lcykKKyAgICAgICAgdGhpcy5pZGVudGl0eSB8fCAodGhpcy5pZGVu
dGl0eSA9IGNvbXBvbmVudElkKyspOworCisgICAgICAgIGlmICghbm9kZSkgeworICAgICAgICAg
IHRocm93IG5ldyBFcnJvcignQ29tcG9uZW50IG5lZWRzIGEgbm9kZScpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKG5vZGUuanF1ZXJ5KSB7CisgICAgICAgICAgdGhpcy5ub2RlID0gbm9kZVsw
XTsKKyAgICAgICAgICB0aGlzLiRub2RlID0gbm9kZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICB0aGlzLm5vZGUgPSBub2RlOworICAgICAgICAgIHRoaXMuJG5vZGUgPSAkKG5vZGUpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gbWVyZ2UgZGVmYXVsdHMgd2l0aCBzdXBwbGllZCBvcHRp
b25zCisgICAgICAgIC8vIHB1dCBvcHRpb25zIGluIGF0dHIuX19wcm90b19fIHRvIGF2b2lkIG1l
cmdlIG92ZXJoZWFkCisgICAgICAgIHZhciBhdHRyID0gT2JqZWN0LmNyZWF0ZShhdHRycyk7Cisg
ICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmRlZmF1bHRzKSB7CisgICAgICAgICAgaWYgKCFh
dHRycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAgICAgICBhdHRyW2tleV0gPSB0aGlz
LmRlZmF1bHRzW2tleV07CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdGhpcy5h
dHRyID0gYXR0cjsKKworICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmRlZmF1bHRzIHx8IHt9KS5m
b3JFYWNoKGZ1bmN0aW9uKGtleSkgeworICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHRzW2tleV0g
PT09IG51bGwgJiYgdGhpcy5hdHRyW2tleV0gPT09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcignUmVxdWlyZWQgYXR0cmlidXRlICInICsga2V5ICsgJyIgbm90IHNwZWNpZmll
ZCBpbiBhdHRhY2hUbyBmb3IgY29tcG9uZW50ICInICsgdGhpcy50b1N0cmluZygpICsgJyIuJyk7
CisgICAgICAgICAgfQorICAgICAgICB9LCB0aGlzKTsKKworICAgICAgICByZXR1cm4gdGhpczsK
KyAgICAgIH07CisKKyAgICAgIHRoaXMudGVhcmRvd24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
dGVhcmRvd25JbnN0YW5jZShyZWdpc3RyeS5maW5kSW5zdGFuY2VJbmZvKHRoaXMpKTsKKyAgICAg
IH07CisgICAgfQorCisgICAgcmV0dXJuIHdpdGhCYXNlOworICB9CispOwpJbmRleDogUGVyZm9y
bWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9saWIvY29tcG9uZW50LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3Rv
ZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQv
bGliL2NvbXBvbmVudC5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VF
dmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93
ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2NvbXBvbmVudC5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEyMCBAQAorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CisvLyBDb3B5cmlnaHQgMjAxMyBUd2l0dGVyLCBJbmMKKy8vIExpY2Vuc2VkIHVuZGVyIFRo
ZSBNSVQgTGljZW5zZQorLy8gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVAorLy8g
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2RlZmluZSgKKwor
ICBbCisgICAgJy4vYWR2aWNlJywKKyAgICAnLi91dGlscycsCisgICAgJy4vY29tcG9zZScsCisg
ICAgJy4vYmFzZScsCisgICAgJy4vcmVnaXN0cnknLAorICAgICcuL2xvZ2dlcicsCisgICAgJy4v
ZGVidWcnCisgIF0sCisKKyAgZnVuY3Rpb24oYWR2aWNlLCB1dGlscywgY29tcG9zZSwgd2l0aEJh
c2UsIHJlZ2lzdHJ5LCB3aXRoTG9nZ2luZywgZGVidWcpIHsKKyAgICAndXNlIHN0cmljdCc7CisK
KyAgICB2YXIgZnVuY3Rpb25OYW1lUmVnRXggPSAvZnVuY3Rpb24gKC4qPylccz9cKC87CisKKyAg
ICAvLyB0ZWFyZG93biBmb3IgYWxsIGluc3RhbmNlcyBvZiB0aGlzIGNvbnN0cnVjdG9yCisgICAg
ZnVuY3Rpb24gdGVhcmRvd25BbGwoKSB7CisgICAgICB2YXIgY29tcG9uZW50SW5mbyA9IHJlZ2lz
dHJ5LmZpbmRDb21wb25lbnRJbmZvKHRoaXMpOworCisgICAgICBjb21wb25lbnRJbmZvICYmIE9i
amVjdC5rZXlzKGNvbXBvbmVudEluZm8uaW5zdGFuY2VzKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHsK
KyAgICAgICAgdmFyIGluZm8gPSBjb21wb25lbnRJbmZvLmluc3RhbmNlc1trXTsKKyAgICAgICAg
aW5mby5pbnN0YW5jZS50ZWFyZG93bigpOworICAgICAgfSk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gY2hlY2tTZXJpYWxpemFibGUodHlwZSwgZGF0YSkgeworICAgICAgdHJ5IHsKKyAgICAgICAg
d2luZG93LnBvc3RNZXNzYWdlKGRhdGEsICcqJyk7CisgICAgICB9IGNhdGNoKGUpIHsKKyAgICAg
ICAgY29uc29sZS5sb2coJ3Vuc2VyaWFsaXphYmxlIGRhdGEgZm9yIGV2ZW50Jyx0eXBlLCc6Jyxk
YXRhKTsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKAorICAgICAgICAgIFsnVGhlIGV2ZW50Jywg
dHlwZSwgJ29uIGNvbXBvbmVudCcsIHRoaXMudG9TdHJpbmcoKSwgJ3dhcyB0cmlnZ2VyZWQgd2l0
aCBub24tc2VyaWFsaXphYmxlIGRhdGEnXS5qb2luKCcgJykKKyAgICAgICAgKTsKKyAgICAgIH0K
KyAgICB9CisKKyAgICBmdW5jdGlvbiBhdHRhY2hUbyhzZWxlY3Rvci8qLCBvcHRpb25zIGFyZ3Mg
Ki8pIHsKKyAgICAgIC8vIHVucGFja2luZyBhcmd1bWVudHMgYnkgaGFuZCBiZW5jaG1hcmtlZCBm
YXN0ZXIKKyAgICAgIHZhciBsID0gYXJndW1lbnRzLmxlbmd0aDsKKyAgICAgIHZhciBhcmdzID0g
bmV3IEFycmF5KGwgLSAxKTsKKyAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbDsgaSsrKSBhcmdz
W2kgLSAxXSA9IGFyZ3VtZW50c1tpXTsKKworICAgICAgaWYgKCFzZWxlY3RvcikgeworICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBvbmVudCBuZWVkcyB0byBiZSBhdHRhY2hUb1wnZCBhIGpR
dWVyeSBvYmplY3QsIG5hdGl2ZSBub2RlIG9yIHNlbGVjdG9yIHN0cmluZycpOworICAgICAgfQor
CisgICAgICB2YXIgb3B0aW9ucyA9IHV0aWxzLm1lcmdlLmFwcGx5KHV0aWxzLCBhcmdzKTsKKyAg
ICAgIHZhciBjb21wb25lbnRJbmZvID0gcmVnaXN0cnkuZmluZENvbXBvbmVudEluZm8odGhpcyk7
CisKKyAgICAgICQoc2VsZWN0b3IpLmVhY2goZnVuY3Rpb24oaSwgbm9kZSkgeworICAgICAgICBp
ZiAoY29tcG9uZW50SW5mbyAmJiBjb21wb25lbnRJbmZvLmlzQXR0YWNoZWRUbyhub2RlKSkgewor
ICAgICAgICAgIC8vIGFscmVhZHkgYXR0YWNoZWQKKyAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICAobmV3IHRoaXMpLmluaXRpYWxpemUobm9kZSwgb3B0aW9ucyk7CisgICAg
ICB9LmJpbmQodGhpcykpOworICAgIH0KKworICAgIC8vIGRlZmluZSB0aGUgY29uc3RydWN0b3Ig
Zm9yIGEgY3VzdG9tIGNvbXBvbmVudCB0eXBlCisgICAgLy8gdGFrZXMgYW4gdW5saW1pdGVkIG51
bWJlciBvZiBtaXhpbiBmdW5jdGlvbnMgYXMgYXJndW1lbnRzCisgICAgLy8gdHlwaWNhbCBhcGkg
Y2FsbCB3aXRoIDMgbWl4aW5zOiBkZWZpbmUodGltZWxpbmUsIHdpdGhUd2VldENhcGFiaWxpdHks
IHdpdGhTY3JvbGxDYXBhYmlsaXR5KTsKKyAgICBmdW5jdGlvbiBkZWZpbmUoLyptaXhpbnMqLykg
eworICAgICAgLy8gdW5wYWNraW5nIGFyZ3VtZW50cyBieSBoYW5kIGJlbmNobWFya2VkIGZhc3Rl
cgorICAgICAgdmFyIGwgPSBhcmd1bWVudHMubGVuZ3RoOworICAgICAgLy8gYWRkIHRocmVlIGZv
ciBjb21tb24gbWl4aW5zCisgICAgICB2YXIgbWl4aW5zID0gbmV3IEFycmF5KGwgKyAzKTsKKyAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSBtaXhpbnNbaV0gPSBhcmd1bWVudHNbaV07
CisKKyAgICAgIHZhciBDb21wb25lbnQgPSBmdW5jdGlvbigpIHt9OworCisgICAgICBDb21wb25l
bnQudG9TdHJpbmcgPSBDb21wb25lbnQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHZhciBwcmV0dHlQcmludE1peGlucyA9IG1peGlucy5tYXAoZnVuY3Rpb24obWl4
aW4pIHsKKyAgICAgICAgICBpZiAobWl4aW4ubmFtZSA9PSBudWxsKSB7CisgICAgICAgICAgICAv
LyBmdW5jdGlvbiBuYW1lIHByb3BlcnR5IG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLCB1
c2UgcmVnZXgKKyAgICAgICAgICAgIHZhciBtID0gbWl4aW4udG9TdHJpbmcoKS5tYXRjaChmdW5j
dGlvbk5hbWVSZWdFeCk7CisgICAgICAgICAgICByZXR1cm4gKG0gJiYgbVsxXSkgPyBtWzFdIDog
Jyc7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAobWl4aW4ubmFtZSAh
PSAnd2l0aEJhc2UnKSA/IG1peGluLm5hbWUgOiAnJzsKKyAgICAgICAgICB9CisgICAgICAgIH0p
LmZpbHRlcihCb29sZWFuKS5qb2luKCcsICcpOworICAgICAgICByZXR1cm4gcHJldHR5UHJpbnRN
aXhpbnM7CisgICAgICB9OworCisgICAgICBpZiAoZGVidWcuZW5hYmxlZCkgeworICAgICAgICBD
b21wb25lbnQuZGVzY3JpYmUgPSBDb21wb25lbnQucHJvdG90eXBlLmRlc2NyaWJlID0gQ29tcG9u
ZW50LnRvU3RyaW5nKCk7CisgICAgICB9CisKKyAgICAgIC8vICdvcHRpb25zJyBpcyBvcHRpb25h
bCBoYXNoIHRvIGJlIG1lcmdlZCB3aXRoICdkZWZhdWx0cycgaW4gdGhlIGNvbXBvbmVudCBkZWZp
bml0aW9uCisgICAgICBDb21wb25lbnQuYXR0YWNoVG8gPSBhdHRhY2hUbzsKKyAgICAgIENvbXBv
bmVudC50ZWFyZG93bkFsbCA9IHRlYXJkb3duQWxsOworCisgICAgICAvLyBwcmVwZW5kIGNvbW1v
biBtaXhpbnMgdG8gc3VwcGxpZWQgbGlzdCwgdGhlbiBtaXhpbiBhbGwgZmxhdm9ycworICAgICAg
aWYgKGRlYnVnLmVuYWJsZWQpIHsKKyAgICAgICAgbWl4aW5zLnVuc2hpZnQod2l0aExvZ2dpbmcp
OworICAgICAgfQorICAgICAgbWl4aW5zLnVuc2hpZnQod2l0aEJhc2UsIGFkdmljZS53aXRoQWR2
aWNlLCByZWdpc3RyeS53aXRoUmVnaXN0cmF0aW9uKTsKKyAgICAgIGNvbXBvc2UubWl4aW4oQ29t
cG9uZW50LnByb3RvdHlwZSwgbWl4aW5zKTsKKworICAgICAgcmV0dXJuIENvbXBvbmVudDsKKyAg
ICB9CisKKyAgICBkZWZpbmUudGVhcmRvd25BbGwgPSBmdW5jdGlvbigpIHsKKyAgICAgIHJlZ2lz
dHJ5LmNvbXBvbmVudHMuc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uKGMpIHsKKyAgICAgICAgYy5j
b21wb25lbnQudGVhcmRvd25BbGwoKTsKKyAgICAgIH0pOworICAgICAgcmVnaXN0cnkucmVzZXQo
KTsKKyAgICB9OworCisgICAgcmV0dXJuIGRlZmluZTsKKyAgfQorKTsKSW5kZXg6IFBlcmZvcm1h
bmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2NvbXBvc2UuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9saWIv
Y29tcG9zZS5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVu
Y2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29t
cG9uZW50cy9mbGlnaHQvbGliL2NvbXBvc2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4
NSBAQAorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBD
b3B5cmlnaHQgMjAxMyBUd2l0dGVyLCBJbmMKKy8vIExpY2Vuc2VkIHVuZGVyIFRoZSBNSVQgTGlj
ZW5zZQorLy8gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVAorLy8gPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2RlZmluZSgKKworICBbCisgICAg
Jy4vdXRpbHMnLAorICAgICcuL2RlYnVnJworICBdLAorCisgIGZ1bmN0aW9uKHV0aWxzLCBkZWJ1
ZykgeworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIC8vZW51bWVyYWJsZXMgYXJlIHNoaW1zIC0g
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIHNoaW0gZG9lc24ndCB3b3JrCisgICAgdmFyIGNhbldy
aXRlUHJvdGVjdCA9IGRlYnVnLmVuYWJsZWQgJiYgIXV0aWxzLmlzRW51bWVyYWJsZShPYmplY3Qs
ICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InKTsKKyAgICAvL3doaXRlbGlzdCBvZiB1bmxvY2th
YmxlIHByb3BlcnR5IG5hbWVzCisgICAgdmFyIGRvbnRMb2NrID0gWydtaXhlZEluJ107CisKKyAg
ICBpZiAoY2FuV3JpdGVQcm90ZWN0KSB7CisgICAgICAvL0lFOCBnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IgaXMgYnVpbHQtaW4gYnV0IHRocm93cyBleGVwdGlvbiBvbiBub24gRE9NIG9iamVjdHMK
KyAgICAgIHRyeSB7CisgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2Jq
ZWN0LCAna2V5cycpOworICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgIGNhbldyaXRlUHJvdGVj
dCA9IGZhbHNlOworICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIHNldFByb3BlcnR5V3Jp
dGFiaWxpdHkob2JqLCBpc1dyaXRhYmxlKSB7CisgICAgICBpZiAoIWNhbldyaXRlUHJvdGVjdCkg
eworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIHZhciBwcm9wcyA9IE9iamVjdC5j
cmVhdGUobnVsbCk7CisKKyAgICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaCgKKyAgICAgICAg
ZnVuY3Rpb24gKGtleSkgeworICAgICAgICAgIGlmIChkb250TG9jay5pbmRleE9mKGtleSkgPCAw
KSB7CisgICAgICAgICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3Iob2JqLCBrZXkpOworICAgICAgICAgICAgZGVzYy53cml0YWJsZSA9IGlzV3JpdGFibGU7Cisg
ICAgICAgICAgICBwcm9wc1trZXldID0gZGVzYzsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICk7CisKKyAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9iaiwgcHJvcHMpOworICAg
IH0KKworICAgIGZ1bmN0aW9uIHVubG9ja1Byb3BlcnR5KG9iaiwgcHJvcCwgb3ApIHsKKyAgICAg
IHZhciB3cml0YWJsZTsKKworICAgICAgaWYgKCFjYW5Xcml0ZVByb3RlY3QgfHwgIW9iai5oYXNP
d25Qcm9wZXJ0eShwcm9wKSkgeworICAgICAgICBvcC5jYWxsKG9iaik7CisgICAgICAgIHJldHVy
bjsKKyAgICAgIH0KKworICAgICAgd3JpdGFibGUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKG9iaiwgcHJvcCkud3JpdGFibGU7CisgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
b2JqLCBwcm9wLCB7IHdyaXRhYmxlOiB0cnVlIH0pOworICAgICAgb3AuY2FsbChvYmopOworICAg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcCwgeyB3cml0YWJsZTogd3JpdGFibGUg
fSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gbWl4aW4oYmFzZSwgbWl4aW5zKSB7CisgICAgICBi
YXNlLm1peGVkSW4gPSBiYXNlLmhhc093blByb3BlcnR5KCdtaXhlZEluJykgPyBiYXNlLm1peGVk
SW4gOiBbXTsKKworICAgICAgbWl4aW5zLmZvckVhY2goZnVuY3Rpb24obWl4aW4pIHsKKyAgICAg
ICAgaWYgKGJhc2UubWl4ZWRJbi5pbmRleE9mKG1peGluKSA9PSAtMSkgeworICAgICAgICAgIHNl
dFByb3BlcnR5V3JpdGFiaWxpdHkoYmFzZSwgZmFsc2UpOworICAgICAgICAgIG1peGluLmNhbGwo
YmFzZSk7CisgICAgICAgICAgYmFzZS5taXhlZEluLnB1c2gobWl4aW4pOworICAgICAgICB9Cisg
ICAgICB9KTsKKworICAgICAgc2V0UHJvcGVydHlXcml0YWJpbGl0eShiYXNlLCB0cnVlKTsKKyAg
ICB9CisKKyAgICByZXR1cm4geworICAgICAgbWl4aW46IG1peGluLAorICAgICAgdW5sb2NrUHJv
cGVydHk6IHVubG9ja1Byb3BlcnR5CisgICAgfTsKKworICB9CispOwpJbmRleDogUGVyZm9ybWFu
Y2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1w
bGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9saWIvZGVidWcuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9saWIvZGVi
dWcuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jl
c291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVu
dHMvZmxpZ2h0L2xpYi9kZWJ1Zy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NyBAQAor
Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBDb3B5cmln
aHQgMjAxMyBUd2l0dGVyLCBJbmMKKy8vIExpY2Vuc2VkIHVuZGVyIFRoZSBNSVQgTGljZW5zZQor
Ly8gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVAorLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2RlZmluZSgKKworICBbXSwKKworICBmdW5j
dGlvbigpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICAvLyoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKgorICAgIC8vIFNlYXJjaCBvYmplY3QgbW9kZWwKKyAgICAvLyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgZnVuY3Rpb24gdHJhdmVyc2UodXRpbCwg
c2VhcmNoVGVybSwgb3B0aW9ucykgeworICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307Cisg
ICAgICB2YXIgb2JqID0gb3B0aW9ucy5vYmogfHwgd2luZG93OworICAgICAgdmFyIHBhdGggPSBv
cHRpb25zLnBhdGggfHwgKChvYmo9PXdpbmRvdykgPyAnd2luZG93JyA6ICcnKTsKKyAgICAgIHZh
ciBwcm9wcyA9IE9iamVjdC5rZXlzKG9iaik7CisgICAgICBwcm9wcy5mb3JFYWNoKGZ1bmN0aW9u
KHByb3ApIHsKKyAgICAgICAgaWYgKCh0ZXN0c1t1dGlsXSB8fCB1dGlsKShzZWFyY2hUZXJtLCBv
YmosIHByb3ApKXsKKyAgICAgICAgICBjb25zb2xlLmxvZyhbcGF0aCwgJy4nLCBwcm9wXS5qb2lu
KCcnKSwgJy0+JywgWycoJywgdHlwZW9mIG9ialtwcm9wXSwgJyknXS5qb2luKCcnKSwgb2JqW3By
b3BdKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5j
YWxsKG9ialtwcm9wXSkgPT0gJ1tvYmplY3QgT2JqZWN0XScgJiYgKG9ialtwcm9wXSAhPSBvYmop
ICYmIHBhdGguc3BsaXQoJy4nKS5pbmRleE9mKHByb3ApID09IC0xKSB7CisgICAgICAgICAgdHJh
dmVyc2UodXRpbCwgc2VhcmNoVGVybSwge29iajogb2JqW3Byb3BdLCBwYXRoOiBbcGF0aCxwcm9w
XS5qb2luKCcuJyl9KTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gc2VhcmNoKHV0aWwsIGV4cGVjdGVkLCBzZWFyY2hUZXJtLCBvcHRpb25zKSB7CisgICAgICBp
ZiAoIWV4cGVjdGVkIHx8IHR5cGVvZiBzZWFyY2hUZXJtID09IGV4cGVjdGVkKSB7CisgICAgICAg
IHRyYXZlcnNlKHV0aWwsIHNlYXJjaFRlcm0sIG9wdGlvbnMpOworICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgY29uc29sZS5lcnJvcihbc2VhcmNoVGVybSwgJ211c3QgYmUnLCBleHBlY3RlZF0uam9p
bignICcpKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICB2YXIgdGVzdHMgPSB7CisgICAgICAnbmFt
ZSc6IGZ1bmN0aW9uKHNlYXJjaFRlcm0sIG9iaiwgcHJvcCkge3JldHVybiBzZWFyY2hUZXJtID09
IHByb3A7fSwKKyAgICAgICduYW1lQ29udGFpbnMnOiBmdW5jdGlvbihzZWFyY2hUZXJtLCBvYmos
IHByb3ApIHtyZXR1cm4gcHJvcC5pbmRleE9mKHNlYXJjaFRlcm0pID4gLTE7fSwKKyAgICAgICd0
eXBlJzogZnVuY3Rpb24oc2VhcmNoVGVybSwgb2JqLCBwcm9wKSB7cmV0dXJuIG9ialtwcm9wXSBp
bnN0YW5jZW9mIHNlYXJjaFRlcm07fSwKKyAgICAgICd2YWx1ZSc6IGZ1bmN0aW9uKHNlYXJjaFRl
cm0sIG9iaiwgcHJvcCkge3JldHVybiBvYmpbcHJvcF0gPT09IHNlYXJjaFRlcm07fSwKKyAgICAg
ICd2YWx1ZUNvZXJjZWQnOiBmdW5jdGlvbihzZWFyY2hUZXJtLCBvYmosIHByb3ApIHtyZXR1cm4g
b2JqW3Byb3BdID09IHNlYXJjaFRlcm07fQorICAgIH07CisKKyAgICBmdW5jdGlvbiBieU5hbWUo
c2VhcmNoVGVybSwgb3B0aW9ucykge3NlYXJjaCgnbmFtZScsICdzdHJpbmcnLCBzZWFyY2hUZXJt
LCBvcHRpb25zKTt9CisgICAgZnVuY3Rpb24gYnlOYW1lQ29udGFpbnMoc2VhcmNoVGVybSwgb3B0
aW9ucykge3NlYXJjaCgnbmFtZUNvbnRhaW5zJywgJ3N0cmluZycsIHNlYXJjaFRlcm0sIG9wdGlv
bnMpO30KKyAgICBmdW5jdGlvbiBieVR5cGUoc2VhcmNoVGVybSwgb3B0aW9ucykge3NlYXJjaCgn
dHlwZScsICdmdW5jdGlvbicsIHNlYXJjaFRlcm0sIG9wdGlvbnMpO30KKyAgICBmdW5jdGlvbiBi
eVZhbHVlKHNlYXJjaFRlcm0sIG9wdGlvbnMpIHtzZWFyY2goJ3ZhbHVlJywgbnVsbCwgc2VhcmNo
VGVybSwgb3B0aW9ucyk7fQorICAgIGZ1bmN0aW9uIGJ5VmFsdWVDb2VyY2VkKHNlYXJjaFRlcm0s
IG9wdGlvbnMpIHtzZWFyY2goJ3ZhbHVlQ29lcmNlZCcsIG51bGwsIHNlYXJjaFRlcm0sIG9wdGlv
bnMpO30KKyAgICBmdW5jdGlvbiBjdXN0b20oZm4sIG9wdGlvbnMpIHt0cmF2ZXJzZShmbiwgbnVs
bCwgb3B0aW9ucyk7fQorCisgICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK
KyAgICAvLyBFdmVudCBsb2dnaW5nCisgICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioKKworICAgIHZhciBBTEwgPSAnYWxsJzsgLy9ubyBmaWx0ZXIKKworICAgIC8vbm8gbG9n
Z2luZyBieSBkZWZhdWx0CisgICAgdmFyIGRlZmF1bHRFdmVudE5hbWVzRmlsdGVyID0gW107Cisg
ICAgdmFyIGRlZmF1bHRBY3Rpb25zRmlsdGVyID0gW107CisKKyAgICB2YXIgbG9nRmlsdGVyID0g
cmV0cmlldmVMb2dGaWx0ZXIoKTsKKworICAgIGZ1bmN0aW9uIGZpbHRlckV2ZW50TG9nc0J5QWN0
aW9uKC8qYWN0aW9ucyovKSB7CisgICAgICB2YXIgYWN0aW9ucyA9IFtdLnNsaWNlLmNhbGwoYXJn
dW1lbnRzKTsKKworICAgICAgbG9nRmlsdGVyLmV2ZW50TmFtZXMubGVuZ3RoIHx8IChsb2dGaWx0
ZXIuZXZlbnROYW1lcyA9IEFMTCk7CisgICAgICBsb2dGaWx0ZXIuYWN0aW9ucyA9IGFjdGlvbnMu
bGVuZ3RoID8gYWN0aW9ucyA6IEFMTDsKKyAgICAgIHNhdmVMb2dGaWx0ZXIoKTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBmaWx0ZXJFdmVudExvZ3NCeU5hbWUoLypldmVudE5hbWVzKi8pIHsKKyAg
ICAgIHZhciBldmVudE5hbWVzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpOworCisgICAgICBs
b2dGaWx0ZXIuYWN0aW9ucy5sZW5ndGggfHwgKGxvZ0ZpbHRlci5hY3Rpb25zID0gQUxMKTsKKyAg
ICAgIGxvZ0ZpbHRlci5ldmVudE5hbWVzID0gZXZlbnROYW1lcy5sZW5ndGggPyBldmVudE5hbWVz
IDogQUxMOworICAgICAgc2F2ZUxvZ0ZpbHRlcigpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGhp
ZGVBbGxFdmVudExvZ3MoKSB7CisgICAgICBsb2dGaWx0ZXIuYWN0aW9ucyA9IFtdOworICAgICAg
bG9nRmlsdGVyLmV2ZW50TmFtZXMgPSBbXTsKKyAgICAgIHNhdmVMb2dGaWx0ZXIoKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBzaG93QWxsRXZlbnRMb2dzKCkgeworICAgICAgbG9nRmlsdGVyLmFj
dGlvbnMgPSBBTEw7CisgICAgICBsb2dGaWx0ZXIuZXZlbnROYW1lcyA9IEFMTDsKKyAgICAgIHNh
dmVMb2dGaWx0ZXIoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzYXZlTG9nRmlsdGVyKCkgewor
ICAgICAgaWYgKHdpbmRvdy5sb2NhbFN0b3JhZ2UpIHsKKyAgICAgICAgbG9jYWxTdG9yYWdlLnNl
dEl0ZW0oJ2xvZ0ZpbHRlcl9ldmVudE5hbWVzJywgbG9nRmlsdGVyLmV2ZW50TmFtZXMpOworICAg
ICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbG9nRmlsdGVyX2FjdGlvbnMnLCBsb2dGaWx0ZXIu
YWN0aW9ucyk7CisgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gcmV0cmlldmVMb2dGaWx0
ZXIoKSB7CisgICAgICB2YXIgcmVzdWx0ID0geworICAgICAgICBldmVudE5hbWVzOiAod2luZG93
LmxvY2FsU3RvcmFnZSAmJiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbG9nRmlsdGVyX2V2ZW50TmFt
ZXMnKSkgfHwgZGVmYXVsdEV2ZW50TmFtZXNGaWx0ZXIsCisgICAgICAgIGFjdGlvbnM6ICh3aW5k
b3cubG9jYWxTdG9yYWdlICYmIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsb2dGaWx0ZXJfYWN0aW9u
cycpKSB8fCBkZWZhdWx0QWN0aW9uc0ZpbHRlcgorICAgICAgfTsKKworICAgICAgLy8gcmVjb25z
dGl0dXRlIGFycmF5cworICAgICAgT2JqZWN0LmtleXMocmVzdWx0KS5mb3JFYWNoKGZ1bmN0aW9u
KGspIHsKKyAgICAgICAgdmFyIHRoaXNQcm9wID0gcmVzdWx0W2tdOworICAgICAgICBpZiAodHlw
ZW9mIHRoaXNQcm9wID09ICdzdHJpbmcnICYmIHRoaXNQcm9wICE9PSBBTEwpIHsKKyAgICAgICAg
ICByZXN1bHRba10gPSB0aGlzUHJvcC5zcGxpdCgnLCcpOworICAgICAgICB9CisgICAgICB9KTsK
KyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcmV0dXJuIHsKKworICAgICAgZW5h
YmxlOiBmdW5jdGlvbihlbmFibGUpIHsKKyAgICAgICAgdGhpcy5lbmFibGVkID0gISFlbmFibGU7
CisKKyAgICAgICAgaWYgKGVuYWJsZSAmJiB3aW5kb3cuY29uc29sZSkgeworICAgICAgICAgIGNv
bnNvbGUuaW5mbygnQm9vdGluZyBpbiBERUJVRyBtb2RlJyk7CisgICAgICAgICAgY29uc29sZS5p
bmZvKCdZb3UgY2FuIGNvbmZpZ3VyZSBldmVudCBsb2dnaW5nIHdpdGggREVCVUcuZXZlbnRzLmxv
Z0FsbCgpL2xvZ05vbmUoKS9sb2dCeU5hbWUoKS9sb2dCeUFjdGlvbigpJyk7CisgICAgICAgIH0K
KworICAgICAgICB3aW5kb3cuREVCVUcgPSB0aGlzOworICAgICAgfSwKKworICAgICAgZmluZDog
eworICAgICAgICBieU5hbWU6IGJ5TmFtZSwKKyAgICAgICAgYnlOYW1lQ29udGFpbnM6IGJ5TmFt
ZUNvbnRhaW5zLAorICAgICAgICBieVR5cGU6IGJ5VHlwZSwKKyAgICAgICAgYnlWYWx1ZTogYnlW
YWx1ZSwKKyAgICAgICAgYnlWYWx1ZUNvZXJjZWQ6IGJ5VmFsdWVDb2VyY2VkLAorICAgICAgICBj
dXN0b206IGN1c3RvbQorICAgICAgfSwKKworICAgICAgZXZlbnRzOiB7CisgICAgICAgIGxvZ0Zp
bHRlcjogbG9nRmlsdGVyLAorCisgICAgICAgIC8vIEFjY2VwdHMgYW55IG51bWJlciBvZiBhY3Rp
b24gYXJncworICAgICAgICAvLyBlLmcuIERFQlVHLmV2ZW50cy5sb2dCeUFjdGlvbigib24iLCAi
b2ZmIikKKyAgICAgICAgbG9nQnlBY3Rpb246IGZpbHRlckV2ZW50TG9nc0J5QWN0aW9uLAorCisg
ICAgICAgIC8vIEFjY2VwdHMgYW55IG51bWJlciBvZiBldmVudCBuYW1lIGFyZ3MgKGluYy4gcmVn
ZXggb3Igd2lsZGNhcmRzKQorICAgICAgICAvLyBlLmcuIERFQlVHLmV2ZW50cy5sb2dCeU5hbWUo
L3VpLiovLCAiKlRocmVhZCoiKTsKKyAgICAgICAgbG9nQnlOYW1lOiBmaWx0ZXJFdmVudExvZ3NC
eU5hbWUsCisKKyAgICAgICAgbG9nQWxsOiBzaG93QWxsRXZlbnRMb2dzLAorICAgICAgICBsb2dO
b25lOiBoaWRlQWxsRXZlbnRMb2dzCisgICAgICB9CisgICAgfTsKKyAgfQorKTsKSW5kZXg6IFBl
cmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2luZGV4LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3Rv
ZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQv
bGliL2luZGV4LmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5C
ZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9j
b21wb25lbnRzL2ZsaWdodC9saWIvaW5kZXguanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MSBAQAorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBD
b3B5cmlnaHQgMjAxMyBUd2l0dGVyLCBJbmMKKy8vIExpY2Vuc2VkIHVuZGVyIFRoZSBNSVQgTGlj
ZW5zZQorLy8gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVAorLy8gPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2RlZmluZSgKKworICBbCisgICAg
Jy4vYWR2aWNlJywKKyAgICAnLi9jb21wb25lbnQnLAorICAgICcuL2NvbXBvc2UnLAorICAgICcu
L2xvZ2dlcicsCisgICAgJy4vcmVnaXN0cnknLAorICAgICcuL3V0aWxzJworICBdLAorCisgIGZ1
bmN0aW9uKGFkdmljZSwgY29tcG9uZW50LCBjb21wb3NlLCBsb2dnZXIsIHJlZ2lzdHJ5LCB1dGls
cykgeworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHJldHVybiB7CisgICAgICBhZHZpY2U6IGFk
dmljZSwKKyAgICAgIGNvbXBvbmVudDogY29tcG9uZW50LAorICAgICAgY29tcG9zZTogY29tcG9z
ZSwKKyAgICAgIGxvZ2dlcjogbG9nZ2VyLAorICAgICAgcmVnaXN0cnk6IHJlZ2lzdHJ5LAorICAg
ICAgdXRpbHM6IHV0aWxzCisgICAgfTsKKworICB9CispOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0
cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9saWIvbG9nZ2VyLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2xvZ2dlci5q
cwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9m
bGlnaHQvbGliL2xvZ2dlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg4IEBACisvLyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIENvcHlyaWdodCAy
MDEzIFR3aXR0ZXIsIEluYworLy8gTGljZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlCisvLyBo
dHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUCisvLyA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KKworZGVmaW5lKAorCisgIFsKKyAgICAnLi91dGlscycK
KyAgXSwKKworICBmdW5jdGlvbih1dGlscykgeworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHZh
ciBhY3Rpb25TeW1ib2xzID0geworICAgICAgb246ICc8LScsCisgICAgICB0cmlnZ2VyOiAnLT4n
LAorICAgICAgb2ZmOiAneCAnCisgICAgfTsKKworICAgIGZ1bmN0aW9uIGVsZW1Ub1N0cmluZyhl
bGVtKSB7CisgICAgICB2YXIgdGFnU3RyID0gZWxlbS50YWdOYW1lID8gZWxlbS50YWdOYW1lLnRv
TG93ZXJDYXNlKCkgOiBlbGVtLnRvU3RyaW5nKCk7CisgICAgICB2YXIgY2xhc3NTdHIgPSBlbGVt
LmNsYXNzTmFtZSA/ICcuJyArIChlbGVtLmNsYXNzTmFtZSkgOiAnJzsKKyAgICAgIHZhciByZXN1
bHQgPSB0YWdTdHIgKyBjbGFzc1N0cjsKKyAgICAgIHJldHVybiBlbGVtLnRhZ05hbWUgPyBbJ1wn
JywgJ1wnJ10uam9pbihyZXN1bHQpIDogcmVzdWx0OworICAgIH0KKworICAgIGZ1bmN0aW9uIGxv
ZyhhY3Rpb24sIGNvbXBvbmVudCwgZXZlbnRBcmdzKSB7CisgICAgICB2YXIgbmFtZSwgZWxlbSwg
Zm4sIGxvZ0ZpbHRlciwgdG9SZWdFeHAsIGFjdGlvbkxvZ2dhYmxlLCBuYW1lTG9nZ2FibGU7CisK
KyAgICAgIGlmICh0eXBlb2YgZXZlbnRBcmdzW2V2ZW50QXJncy5sZW5ndGgtMV0gPT0gJ2Z1bmN0
aW9uJykgeworICAgICAgICBmbiA9IGV2ZW50QXJncy5wb3AoKTsKKyAgICAgICAgZm4gPSBmbi51
bmJvdW5kIHx8IGZuOyAvLyB1c2UgdW5ib3VuZCB2ZXJzaW9uIGlmIGFueSAoYmV0dGVyIGluZm8p
CisgICAgICB9CisKKyAgICAgIGlmICh0eXBlb2YgZXZlbnRBcmdzW2V2ZW50QXJncy5sZW5ndGgg
LSAxXSA9PSAnb2JqZWN0JykgeworICAgICAgICBldmVudEFyZ3MucG9wKCk7IC8vIHRyaWdnZXIg
ZGF0YSBhcmcgLSBub3QgbG9nZ2VkIHJpZ2h0IG5vdworICAgICAgfQorCisgICAgICBpZiAoZXZl
bnRBcmdzLmxlbmd0aCA9PSAyKSB7CisgICAgICAgIGVsZW0gPSBldmVudEFyZ3NbMF07CisgICAg
ICAgIG5hbWUgPSBldmVudEFyZ3NbMV07CisgICAgICB9IGVsc2UgeworICAgICAgICBlbGVtID0g
Y29tcG9uZW50LiRub2RlWzBdOworICAgICAgICBuYW1lID0gZXZlbnRBcmdzWzBdOworICAgICAg
fQorCisgICAgICBpZiAod2luZG93LkRFQlVHICYmIHdpbmRvdy5ERUJVRy5lbmFibGVkKSB7Cisg
ICAgICAgIGxvZ0ZpbHRlciA9IERFQlVHLmV2ZW50cy5sb2dGaWx0ZXI7CisKKyAgICAgICAgLy8g
bm8gcmVnZXggZm9yIHlvdSwgYWN0aW9ucy4uLgorICAgICAgICBhY3Rpb25Mb2dnYWJsZSA9IGxv
Z0ZpbHRlci5hY3Rpb25zID09ICdhbGwnIHx8IChsb2dGaWx0ZXIuYWN0aW9ucy5pbmRleE9mKGFj
dGlvbikgPiAtMSk7CisgICAgICAgIC8vIGV2ZW50IG5hbWUgZmlsdGVyIGFsbG93IHdpbGRjYXJk
cyBvciByZWdleC4uLgorICAgICAgICB0b1JlZ0V4cCA9IGZ1bmN0aW9uKGV4cHIpIHsKKyAgICAg
ICAgICByZXR1cm4gZXhwci50ZXN0ID8gZXhwciA6IG5ldyBSZWdFeHAoJ14nICsgZXhwci5yZXBs
YWNlKC9cKi9nLCAnLionKSArICckJyk7CisgICAgICAgIH07CisgICAgICAgIG5hbWVMb2dnYWJs
ZSA9CisgICAgICAgICAgbG9nRmlsdGVyLmV2ZW50TmFtZXMgPT0gJ2FsbCcgfHwKKyAgICAgICAg
ICBsb2dGaWx0ZXIuZXZlbnROYW1lcy5zb21lKGZ1bmN0aW9uKGUpIHtyZXR1cm4gdG9SZWdFeHAo
ZSkudGVzdChuYW1lKTt9KTsKKworICAgICAgICBpZiAoYWN0aW9uTG9nZ2FibGUgJiYgbmFtZUxv
Z2dhYmxlKSB7CisgICAgICAgICAgY29uc29sZS5pbmZvKAorICAgICAgICAgICAgYWN0aW9uU3lt
Ym9sc1thY3Rpb25dLAorICAgICAgICAgICAgYWN0aW9uLAorICAgICAgICAgICAgJ1snICsgbmFt
ZSArICddJywKKyAgICAgICAgICAgIGVsZW1Ub1N0cmluZyhlbGVtKSwKKyAgICAgICAgICAgIGNv
bXBvbmVudC5jb25zdHJ1Y3Rvci5kZXNjcmliZS5zcGxpdCgnICcpLnNsaWNlKDAsMykuam9pbign
ICcpIC8vIHR3byBtaXhpbnMgb25seQorICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICAgIH0K
KyAgICB9CisKKyAgICBmdW5jdGlvbiB3aXRoTG9nZ2luZygpIHsKKyAgICAgIHRoaXMuYmVmb3Jl
KCd0cmlnZ2VyJywgZnVuY3Rpb24oKSB7CisgICAgICAgIGxvZygndHJpZ2dlcicsIHRoaXMsIHV0
aWxzLnRvQXJyYXkoYXJndW1lbnRzKSk7CisgICAgICB9KTsKKyAgICAgIHRoaXMuYmVmb3JlKCdv
bicsIGZ1bmN0aW9uKCkgeworICAgICAgICBsb2coJ29uJywgdGhpcywgdXRpbHMudG9BcnJheShh
cmd1bWVudHMpKTsKKyAgICAgIH0pOworICAgICAgdGhpcy5iZWZvcmUoJ29mZicsIGZ1bmN0aW9u
KCkgeworICAgICAgICBsb2coJ29mZicsIHRoaXMsIHV0aWxzLnRvQXJyYXkoYXJndW1lbnRzKSk7
CisgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gd2l0aExvZ2dpbmc7CisgIH0KKyk7Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2Rl
cGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9yZWdp
c3RyeS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jl
c291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVu
dHMvZmxpZ2h0L2xpYi9yZWdpc3RyeS5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVz
dHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9m
bGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL3JlZ2lzdHJ5LmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjIyIEBACisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KKy8vIENvcHlyaWdodCAyMDEzIFR3aXR0ZXIsIEluYworLy8gTGljZW5zZWQg
dW5kZXIgVGhlIE1JVCBMaWNlbnNlCisvLyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMv
TUlUCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworZGVm
aW5lKAorCisgIFtdLAorCisgIGZ1bmN0aW9uKCkgeworICAgICd1c2Ugc3RyaWN0JzsKKworICAg
IGZ1bmN0aW9uIHBhcnNlRXZlbnRBcmdzKGluc3RhbmNlLCBhcmdzKSB7CisgICAgICB2YXIgZWxl
bWVudCwgdHlwZSwgY2FsbGJhY2s7CisgICAgICB2YXIgZW5kID0gYXJncy5sZW5ndGg7CisKKyAg
ICAgIGlmICh0eXBlb2YgYXJnc1tlbmQgLSAxXSA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICBl
bmQgLT0gMTsKKyAgICAgICAgY2FsbGJhY2sgPSBhcmdzW2VuZF07CisgICAgICB9CisKKyAgICAg
IGlmICh0eXBlb2YgYXJnc1tlbmQgLSAxXSA9PT0gJ29iamVjdCcpIHsKKyAgICAgICAgZW5kIC09
IDE7CisgICAgICB9CisKKyAgICAgIGlmIChlbmQgPT0gMikgeworICAgICAgICBlbGVtZW50ID0g
YXJnc1swXTsKKyAgICAgICAgdHlwZSA9IGFyZ3NbMV07CisgICAgICB9IGVsc2UgeworICAgICAg
ICBlbGVtZW50ID0gaW5zdGFuY2Uubm9kZTsKKyAgICAgICAgdHlwZSA9IGFyZ3NbMF07CisgICAg
ICB9CisKKyAgICAgIHJldHVybiB7CisgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsCisgICAgICAg
IHR5cGU6IHR5cGUsCisgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjaworICAgICAgfTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBtYXRjaEV2ZW50KGEsIGIpIHsKKyAgICAgIHJldHVybiAoCisgICAg
ICAgIChhLmVsZW1lbnQgPT0gYi5lbGVtZW50KSAmJgorICAgICAgICAoYS50eXBlID09IGIudHlw
ZSkgJiYKKyAgICAgICAgKGIuY2FsbGJhY2sgPT0gbnVsbCB8fCAoYS5jYWxsYmFjayA9PSBiLmNh
bGxiYWNrKSkKKyAgICAgICk7CisgICAgfQorCisgICAgZnVuY3Rpb24gUmVnaXN0cnkoKSB7CisK
KyAgICAgIHZhciByZWdpc3RyeSA9IHRoaXM7CisKKyAgICAgICh0aGlzLnJlc2V0ID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHRoaXMuY29tcG9uZW50cyA9IFtdOworICAgICAgICB0aGlzLmFsbElu
c3RhbmNlcyA9IHt9OworICAgICAgICB0aGlzLmV2ZW50cyA9IFtdOworICAgICAgfSkuY2FsbCh0
aGlzKTsKKworICAgICAgZnVuY3Rpb24gQ29tcG9uZW50SW5mbyhjb21wb25lbnQpIHsKKyAgICAg
ICAgdGhpcy5jb21wb25lbnQgPSBjb21wb25lbnQ7CisgICAgICAgIHRoaXMuYXR0YWNoZWRUbyA9
IFtdOworICAgICAgICB0aGlzLmluc3RhbmNlcyA9IHt9OworCisgICAgICAgIHRoaXMuYWRkSW5z
dGFuY2UgPSBmdW5jdGlvbihpbnN0YW5jZSkgeworICAgICAgICAgIHZhciBpbnN0YW5jZUluZm8g
PSBuZXcgSW5zdGFuY2VJbmZvKGluc3RhbmNlKTsKKyAgICAgICAgICB0aGlzLmluc3RhbmNlc1tp
bnN0YW5jZS5pZGVudGl0eV0gPSBpbnN0YW5jZUluZm87CisgICAgICAgICAgdGhpcy5hdHRhY2hl
ZFRvLnB1c2goaW5zdGFuY2Uubm9kZSk7CisKKyAgICAgICAgICByZXR1cm4gaW5zdGFuY2VJbmZv
OworICAgICAgICB9OworCisgICAgICAgIHRoaXMucmVtb3ZlSW5zdGFuY2UgPSBmdW5jdGlvbihp
bnN0YW5jZSkgeworICAgICAgICAgIGRlbGV0ZSB0aGlzLmluc3RhbmNlc1tpbnN0YW5jZS5pZGVu
dGl0eV07CisgICAgICAgICAgdmFyIGluZGV4T2ZOb2RlID0gdGhpcy5hdHRhY2hlZFRvLmluZGV4
T2YoaW5zdGFuY2Uubm9kZSk7CisgICAgICAgICAgKGluZGV4T2ZOb2RlID4gLTEpICYmIHRoaXMu
YXR0YWNoZWRUby5zcGxpY2UoaW5kZXhPZk5vZGUsIDEpOworCisgICAgICAgICAgaWYgKCFPYmpl
Y3Qua2V5cyh0aGlzLmluc3RhbmNlcykubGVuZ3RoKSB7CisgICAgICAgICAgICAvL2lmIEkgaG9s
ZCBubyBtb3JlIGluc3RhbmNlcyByZW1vdmUgbWUgZnJvbSByZWdpc3RyeQorICAgICAgICAgICAg
cmVnaXN0cnkucmVtb3ZlQ29tcG9uZW50SW5mbyh0aGlzKTsKKyAgICAgICAgICB9CisgICAgICAg
IH07CisKKyAgICAgICAgdGhpcy5pc0F0dGFjaGVkVG8gPSBmdW5jdGlvbihub2RlKSB7CisgICAg
ICAgICAgcmV0dXJuIHRoaXMuYXR0YWNoZWRUby5pbmRleE9mKG5vZGUpID4gLTE7CisgICAgICAg
IH07CisgICAgICB9CisKKyAgICAgIGZ1bmN0aW9uIEluc3RhbmNlSW5mbyhpbnN0YW5jZSkgewor
ICAgICAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7CisgICAgICAgIHRoaXMuZXZlbnRzID0g
W107CisKKyAgICAgICAgdGhpcy5hZGRCaW5kID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAg
ICB0aGlzLmV2ZW50cy5wdXNoKGV2ZW50KTsKKyAgICAgICAgICByZWdpc3RyeS5ldmVudHMucHVz
aChldmVudCk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5yZW1vdmVCaW5kID0gZnVuY3Rp
b24oZXZlbnQpIHsKKyAgICAgICAgICBmb3IgKHZhciBpID0gMCwgZTsgZSA9IHRoaXMuZXZlbnRz
W2ldOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChtYXRjaEV2ZW50KGUsIGV2ZW50KSkgeworICAg
ICAgICAgICAgICB0aGlzLmV2ZW50cy5zcGxpY2UoaSwgMSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgfQorICAgICAgICB9OworICAgICAgfQorCisgICAgICB0aGlzLmFkZEluc3RhbmNlID0g
ZnVuY3Rpb24oaW5zdGFuY2UpIHsKKyAgICAgICAgdmFyIGNvbXBvbmVudCA9IHRoaXMuZmluZENv
bXBvbmVudEluZm8oaW5zdGFuY2UpOworCisgICAgICAgIGlmICghY29tcG9uZW50KSB7CisgICAg
ICAgICAgY29tcG9uZW50ID0gbmV3IENvbXBvbmVudEluZm8oaW5zdGFuY2UuY29uc3RydWN0b3Ip
OworICAgICAgICAgIHRoaXMuY29tcG9uZW50cy5wdXNoKGNvbXBvbmVudCk7CisgICAgICAgIH0K
KworICAgICAgICB2YXIgaW5zdCA9IGNvbXBvbmVudC5hZGRJbnN0YW5jZShpbnN0YW5jZSk7CisK
KyAgICAgICAgdGhpcy5hbGxJbnN0YW5jZXNbaW5zdGFuY2UuaWRlbnRpdHldID0gaW5zdDsKKwor
ICAgICAgICByZXR1cm4gY29tcG9uZW50OworICAgICAgfTsKKworICAgICAgdGhpcy5yZW1vdmVJ
bnN0YW5jZSA9IGZ1bmN0aW9uKGluc3RhbmNlKSB7CisgICAgICAgIHZhciBpbmRleCwgaW5zdElu
Zm8gPSB0aGlzLmZpbmRJbnN0YW5jZUluZm8oaW5zdGFuY2UpOworCisgICAgICAgIC8vcmVtb3Zl
IGZyb20gY29tcG9uZW50IGluZm8KKyAgICAgICAgdmFyIGNvbXBvbmVudEluZm8gPSB0aGlzLmZp
bmRDb21wb25lbnRJbmZvKGluc3RhbmNlKTsKKyAgICAgICAgY29tcG9uZW50SW5mbyAmJiBjb21w
b25lbnRJbmZvLnJlbW92ZUluc3RhbmNlKGluc3RhbmNlKTsKKworICAgICAgICAvL3JlbW92ZSBm
cm9tIHJlZ2lzdHJ5CisgICAgICAgIGRlbGV0ZSB0aGlzLmFsbEluc3RhbmNlc1tpbnN0YW5jZS5p
ZGVudGl0eV07CisgICAgICB9OworCisgICAgICB0aGlzLnJlbW92ZUNvbXBvbmVudEluZm8gPSBm
dW5jdGlvbihjb21wb25lbnRJbmZvKSB7CisgICAgICAgIHZhciBpbmRleCA9IHRoaXMuY29tcG9u
ZW50cy5pbmRleE9mKGNvbXBvbmVudEluZm8pOworICAgICAgICAoaW5kZXggPiAtMSkgJiYgdGhp
cy5jb21wb25lbnRzLnNwbGljZShpbmRleCwgMSk7CisgICAgICB9OworCisgICAgICB0aGlzLmZp
bmRDb21wb25lbnRJbmZvID0gZnVuY3Rpb24od2hpY2gpIHsKKyAgICAgICAgdmFyIGNvbXBvbmVu
dCA9IHdoaWNoLmF0dGFjaFRvID8gd2hpY2ggOiB3aGljaC5jb25zdHJ1Y3RvcjsKKworICAgICAg
ICBmb3IgKHZhciBpID0gMCwgYzsgYyA9IHRoaXMuY29tcG9uZW50c1tpXTsgaSsrKSB7CisgICAg
ICAgICAgaWYgKGMuY29tcG9uZW50ID09PSBjb21wb25lbnQpIHsKKyAgICAgICAgICAgIHJldHVy
biBjOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBudWxsOworICAg
ICAgfTsKKworICAgICAgdGhpcy5maW5kSW5zdGFuY2VJbmZvID0gZnVuY3Rpb24oaW5zdGFuY2Up
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuYWxsSW5zdGFuY2VzW2luc3RhbmNlLmlkZW50aXR5XSB8
fCBudWxsOworICAgICAgfTsKKworICAgICAgdGhpcy5maW5kSW5zdGFuY2VJbmZvQnlOb2RlID0g
ZnVuY3Rpb24obm9kZSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gW107CisgICAgICAgIE9iamVj
dC5rZXlzKHRoaXMuYWxsSW5zdGFuY2VzKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHsKKyAgICAgICAg
ICB2YXIgdGhpc0luc3RhbmNlSW5mbyA9IHRoaXMuYWxsSW5zdGFuY2VzW2tdOworICAgICAgICAg
IGlmICh0aGlzSW5zdGFuY2VJbmZvLmluc3RhbmNlLm5vZGUgPT09IG5vZGUpIHsKKyAgICAgICAg
ICAgIHJlc3VsdC5wdXNoKHRoaXNJbnN0YW5jZUluZm8pOworICAgICAgICAgIH0KKyAgICAgICAg
fSwgdGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICB9OworCisgICAgICB0aGlz
Lm9uID0gZnVuY3Rpb24oY29tcG9uZW50T24pIHsKKyAgICAgICAgdmFyIGluc3RhbmNlID0gcmVn
aXN0cnkuZmluZEluc3RhbmNlSW5mbyh0aGlzKSwgYm91bmRDYWxsYmFjazsKKworICAgICAgICAv
LyB1bnBhY2tpbmcgYXJndW1lbnRzIGJ5IGhhbmQgYmVuY2htYXJrZWQgZmFzdGVyCisgICAgICAg
IHZhciBsID0gYXJndW1lbnRzLmxlbmd0aCwgaSA9IDE7CisgICAgICAgIHZhciBvdGhlckFyZ3Mg
PSBuZXcgQXJyYXkobCAtIDEpOworICAgICAgICBmb3IgKDsgaSA8IGw7IGkrKykgb3RoZXJBcmdz
W2kgLSAxXSA9IGFyZ3VtZW50c1tpXTsKKworICAgICAgICBpZiAoaW5zdGFuY2UpIHsKKyAgICAg
ICAgICBib3VuZENhbGxiYWNrID0gY29tcG9uZW50T24uYXBwbHkobnVsbCwgb3RoZXJBcmdzKTsK
KyAgICAgICAgICBpZiAoYm91bmRDYWxsYmFjaykgeworICAgICAgICAgICAgb3RoZXJBcmdzW290
aGVyQXJncy5sZW5ndGgtMV0gPSBib3VuZENhbGxiYWNrOworICAgICAgICAgIH0KKyAgICAgICAg
ICB2YXIgZXZlbnQgPSBwYXJzZUV2ZW50QXJncyh0aGlzLCBvdGhlckFyZ3MpOworICAgICAgICAg
IGluc3RhbmNlLmFkZEJpbmQoZXZlbnQpOworICAgICAgICB9CisgICAgICB9OworCisgICAgICB0
aGlzLm9mZiA9IGZ1bmN0aW9uKC8qZWwsIHR5cGUsIGNhbGxiYWNrKi8pIHsKKyAgICAgICAgdmFy
IGV2ZW50ID0gcGFyc2VFdmVudEFyZ3ModGhpcywgYXJndW1lbnRzKSwKKyAgICAgICAgICAgIGlu
c3RhbmNlID0gcmVnaXN0cnkuZmluZEluc3RhbmNlSW5mbyh0aGlzKTsKKworICAgICAgICBpZiAo
aW5zdGFuY2UpIHsKKyAgICAgICAgICBpbnN0YW5jZS5yZW1vdmVCaW5kKGV2ZW50KTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vcmVtb3ZlIGZyb20gZ2xvYmFsIGV2ZW50IHJlZ2lzdHJ5CisgICAg
ICAgIGZvciAodmFyIGkgPSAwLCBlOyBlID0gcmVnaXN0cnkuZXZlbnRzW2ldOyBpKyspIHsKKyAg
ICAgICAgICBpZiAobWF0Y2hFdmVudChlLCBldmVudCkpIHsKKyAgICAgICAgICAgIHJlZ2lzdHJ5
LmV2ZW50cy5zcGxpY2UoaSwgMSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9Owor
CisgICAgICAvLyBkZWJ1ZyB0b29scyBtYXkgd2FudCB0byBhZGQgYWR2aWNlIHRvIHRyaWdnZXIK
KyAgICAgIHJlZ2lzdHJ5LnRyaWdnZXIgPSBmdW5jdGlvbigpIHt9OworCisgICAgICB0aGlzLnRl
YXJkb3duID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJlZ2lzdHJ5LnJlbW92ZUluc3RhbmNlKHRo
aXMpOworICAgICAgfTsKKworICAgICAgdGhpcy53aXRoUmVnaXN0cmF0aW9uID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHRoaXMuYWZ0ZXIoJ2luaXRpYWxpemUnLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICByZWdpc3RyeS5hZGRJbnN0YW5jZSh0aGlzKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg
dGhpcy5hcm91bmQoJ29uJywgcmVnaXN0cnkub24pOworICAgICAgICB0aGlzLmFmdGVyKCdvZmYn
LCByZWdpc3RyeS5vZmYpOworICAgICAgICAvL2RlYnVnIHRvb2xzIG1heSB3YW50IHRvIGFkZCBh
ZHZpY2UgdG8gdHJpZ2dlcgorICAgICAgICB3aW5kb3cuREVCVUcgJiYgREVCVUcuZW5hYmxlZCAm
JiB0aGlzLmFmdGVyKCd0cmlnZ2VyJywgcmVnaXN0cnkudHJpZ2dlcik7CisgICAgICAgIHRoaXMu
YWZ0ZXIoJ3RlYXJkb3duJywge29iajogcmVnaXN0cnksIGZuTmFtZTogJ3RlYXJkb3duJ30pOwor
ICAgICAgfTsKKworICAgIH0KKworICAgIHJldHVybiBuZXcgUmVnaXN0cnk7CisgIH0KKyk7Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2Rl
cGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xpYi91dGls
cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291
cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMv
ZmxpZ2h0L2xpYi91dGlscy5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Z
b3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
Ym93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL3V0aWxzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjM1IEBACisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KKy8vIENvcHlyaWdodCAyMDEzIFR3aXR0ZXIsIEluYworLy8gTGljZW5zZWQgdW5kZXIgVGhl
IE1JVCBMaWNlbnNlCisvLyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUCisvLyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworZGVmaW5lKAorCisg
IFtdLAorCisgIGZ1bmN0aW9uKCkgeworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHZhciBhcnJ5
ID0gW107CisgICAgdmFyIERFRkFVTFRfSU5URVJWQUwgPSAxMDA7CisKKyAgICB2YXIgdXRpbHMg
PSB7CisKKyAgICAgIGlzRG9tT2JqOiBmdW5jdGlvbihvYmopIHsKKyAgICAgICAgcmV0dXJuICEh
KG9iai5ub2RlVHlwZSB8fCAob2JqID09PSB3aW5kb3cpKTsKKyAgICAgIH0sCisKKyAgICAgIHRv
QXJyYXk6IGZ1bmN0aW9uKG9iaiwgZnJvbSkgeworICAgICAgICByZXR1cm4gYXJyeS5zbGljZS5j
YWxsKG9iaiwgZnJvbSk7CisgICAgICB9LAorCisgICAgICAvLyByZXR1cm5zIG5ldyBvYmplY3Qg
cmVwcmVzZW50aW5nIG11bHRpcGxlIG9iamVjdHMgbWVyZ2VkIHRvZ2V0aGVyCisgICAgICAvLyBv
cHRpb25hbCBmaW5hbCBhcmd1bWVudCBpcyBib29sZWFuIHdoaWNoIHNwZWNpZmllcyBpZiBtZXJn
ZSBpcyByZWN1cnNpdmUKKyAgICAgIC8vIG9yaWdpbmFsIG9iamVjdHMgYXJlIHVubW9kaWZpZWQK
KyAgICAgIC8vCisgICAgICAvLyB1c2FnZToKKyAgICAgIC8vICAgdmFyIGJhc2UgPSB7YToyLCBi
OjZ9OworICAgICAgLy8gICB2YXIgZXh0cmEgPSB7YjozLCBjOjR9OworICAgICAgLy8gICBtZXJn
ZShiYXNlLCBleHRyYSk7IC8ve2E6MiwgYjozLCBjOjR9CisgICAgICAvLyAgIGJhc2U7IC8ve2E6
MiwgYjo2fQorICAgICAgLy8KKyAgICAgIC8vICAgdmFyIGJhc2UgPSB7YToyLCBiOjZ9OworICAg
ICAgLy8gICB2YXIgZXh0cmEgPSB7YjozLCBjOjR9OworICAgICAgLy8gICB2YXIgZXh0cmFFeHRy
YSA9IHthOjQsIGQ6OX07CisgICAgICAvLyAgIG1lcmdlKGJhc2UsIGV4dHJhLCBleHRyYUV4dHJh
KTsgLy97YTo0LCBiOjMsIGM6NC4gZDogOX0KKyAgICAgIC8vICAgYmFzZTsgLy97YToyLCBiOjZ9
CisgICAgICAvLworICAgICAgLy8gICB2YXIgYmFzZSA9IHthOjIsIGI6e2JiOjQsIGNjOjV9fTsK
KyAgICAgIC8vICAgdmFyIGV4dHJhID0ge2E6NCwgYjp7Y2M6NywgZGQ6MX19OworICAgICAgLy8g
ICBtZXJnZShiYXNlLCBleHRyYSwgdHJ1ZSk7IC8ve2E6NCwgYjp7YmI6NCwgY2M6NywgZGQ6MX19
CisgICAgICAvLyAgIGJhc2U7IC8ve2E6MiwgYjo2fQorCisgICAgICBtZXJnZTogZnVuY3Rpb24o
LypvYmoxLCBvYmoyLC4uLi5kZWVwQ29weSovKSB7CisgICAgICAgIC8vIHVucGFja2luZyBhcmd1
bWVudHMgYnkgaGFuZCBiZW5jaG1hcmtlZCBmYXN0ZXIKKyAgICAgICAgdmFyIGwgPSBhcmd1bWVu
dHMubGVuZ3RoLAorICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICBhcmdzID0gbmV3IEFy
cmF5KGwgKyAxKTsKKyAgICAgICAgZm9yICg7IGkgPCBsOyBpKyspIGFyZ3NbaSArIDFdID0gYXJn
dW1lbnRzW2ldOworCisgICAgICAgIGlmIChsID09PSAwKSB7CisgICAgICAgICAgcmV0dXJuIHt9
OworICAgICAgICB9CisKKyAgICAgICAgLy9zdGFydCB3aXRoIGVtcHR5IG9iamVjdCBzbyBhIGNv
cHkgaXMgY3JlYXRlZAorICAgICAgICBhcmdzWzBdID0ge307CisKKyAgICAgICAgaWYgKGFyZ3Nb
YXJncy5sZW5ndGggLSAxXSA9PT0gdHJ1ZSkgeworICAgICAgICAgIC8vanF1ZXJ5IGV4dGVuZCBy
ZXF1aXJlcyBkZWVwIGNvcHkgYXMgZmlyc3QgYXJnCisgICAgICAgICAgYXJncy5wb3AoKTsKKyAg
ICAgICAgICBhcmdzLnVuc2hpZnQodHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
JC5leHRlbmQuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTsKKyAgICAgIH0sCisKKyAgICAgIC8vIHVw
ZGF0ZXMgYmFzZSBpbiBwbGFjZSBieSBjb3B5aW5nIHByb3BlcnRpZXMgb2YgZXh0cmEgdG8gaXQK
KyAgICAgIC8vIG9wdGlvbmFsbHkgY2xvYmJlciBwcm90ZWN0ZWQKKyAgICAgIC8vIHVzYWdlOgor
ICAgICAgLy8gICB2YXIgYmFzZSA9IHthOjIsIGI6Nn07CisgICAgICAvLyAgIHZhciBleHRyYSA9
IHtjOjR9OworICAgICAgLy8gICBwdXNoKGJhc2UsIGV4dHJhKTsgLy97YToyLCBiOjYsIGM6NH0K
KyAgICAgIC8vICAgYmFzZTsgLy97YToyLCBiOjYsIGM6NH0KKyAgICAgIC8vCisgICAgICAvLyAg
IHZhciBiYXNlID0ge2E6MiwgYjo2fTsKKyAgICAgIC8vICAgdmFyIGV4dHJhID0ge2I6IDQgYzo0
fTsKKyAgICAgIC8vICAgcHVzaChiYXNlLCBleHRyYSwgdHJ1ZSk7IC8vRXJyb3IgKCJ1dGlscy5w
dXNoIGF0dGVtcHRlZCB0byBvdmVyd3JpdGUgJ2InIHdoaWxlIHJ1bm5pbmcgaW4gcHJvdGVjdGVk
IG1vZGUiKQorICAgICAgLy8gICBiYXNlOyAvL3thOjIsIGI6Nn0KKyAgICAgIC8vCisgICAgICAv
LyBvYmplY3RzIHdpdGggdGhlIHNhbWUga2V5IHdpbGwgbWVyZ2UgcmVjdXJzaXZlbHkgd2hlbiBw
cm90ZWN0IGlzIGZhbHNlCisgICAgICAvLyBlZzoKKyAgICAgIC8vIHZhciBiYXNlID0ge2E6MTYs
IGI6e2JiOjQsIGNjOjEwfX07CisgICAgICAvLyB2YXIgZXh0cmEgPSB7Yjp7Y2M6MjUsIGRkOjE5
fSwgYzo1fTsKKyAgICAgIC8vIHB1c2goYmFzZSwgZXh0cmEpOyAvL3thOjE2LCB7YmI6NCwgY2M6
MjUsIGRkOjE5fSwgYzo1fQorICAgICAgLy8KKyAgICAgIHB1c2g6IGZ1bmN0aW9uKGJhc2UsIGV4
dHJhLCBwcm90ZWN0KSB7CisgICAgICAgIGlmIChiYXNlKSB7CisgICAgICAgICAgT2JqZWN0Lmtl
eXMoZXh0cmEgfHwge30pLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7CisgICAgICAgICAgICBpZiAo
YmFzZVtrZXldICYmIHByb3RlY3QpIHsKKyAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1
dGlscy5wdXNoIGF0dGVtcHRlZCB0byBvdmVyd3JpdGUgIicgKyBrZXkgKyAnIiB3aGlsZSBydW5u
aW5nIGluIHByb3RlY3RlZCBtb2RlJyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICh0eXBlb2YgYmFzZVtrZXldID09ICdvYmplY3QnICYmIHR5cGVvZiBleHRyYVtrZXldID09ICdv
YmplY3QnKSB7CisgICAgICAgICAgICAgIC8vIHJlY3Vyc2UKKyAgICAgICAgICAgICAgdGhpcy5w
dXNoKGJhc2Vba2V5XSwgZXh0cmFba2V5XSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAvLyBubyBwcm90ZWN0LCBzbyBleHRyYSB3aW5zCisgICAgICAgICAgICAgIGJhc2Vb
a2V5XSA9IGV4dHJhW2tleV07CisgICAgICAgICAgICB9CisgICAgICAgICAgfSwgdGhpcyk7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gYmFzZTsKKyAgICAgIH0sCisKKyAgICAgIGlzRW51
bWVyYWJsZTogZnVuY3Rpb24ob2JqLCBwcm9wZXJ0eSkgeworICAgICAgICByZXR1cm4gT2JqZWN0
LmtleXMob2JqKS5pbmRleE9mKHByb3BlcnR5KSA+IC0xOworICAgICAgfSwKKworICAgICAgLy8g
YnVpbGQgYSBmdW5jdGlvbiBmcm9tIG90aGVyIGZ1bmN0aW9uKHMpCisgICAgICAvLyB1dGlscy5j
b21wb3NlKGEsYixjKSAtPiBhKGIoYygpKSk7CisgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBsaWZ0
ZWQgZnJvbSB1bmRlcnNjb3JlLmpzIChjKSAyMDA5LTIwMTIgSmVyZW15IEFzaGtlbmFzCisgICAg
ICBjb21wb3NlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGZ1bmNzID0gYXJndW1lbnRzOwor
CisgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICB2YXIgYXJncyA9IGFyZ3Vt
ZW50czsKKworICAgICAgICAgIGZvciAodmFyIGkgPSBmdW5jcy5sZW5ndGgtMTsgaSA+PSAwOyBp
LS0pIHsKKyAgICAgICAgICAgIGFyZ3MgPSBbZnVuY3NbaV0uYXBwbHkodGhpcywgYXJncyldOwor
ICAgICAgICAgIH0KKworICAgICAgICAgIHJldHVybiBhcmdzWzBdOworICAgICAgICB9OworICAg
ICAgfSwKKworICAgICAgLy8gQ2FuIG9ubHkgdW5pcXVlIGFycmF5cyBvZiBob21vZ2VuZW91cyBw
cmltaXRpdmVzLCBlLmcuIGFuIGFycmF5IG9mIG9ubHkgc3RyaW5ncywgYW4gYXJyYXkgb2Ygb25s
eSBib29sZWFucywgb3IgYW4gYXJyYXkgb2Ygb25seSBudW1lcmljcworICAgICAgdW5pcXVlQXJy
YXk6IGZ1bmN0aW9uKGFycmF5KSB7CisgICAgICAgIHZhciB1ID0ge30sIGEgPSBbXTsKKworICAg
ICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7ICsraSkgeworICAg
ICAgICAgIGlmICh1Lmhhc093blByb3BlcnR5KGFycmF5W2ldKSkgeworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgfQorCisgICAgICAgICAgYS5wdXNoKGFycmF5W2ldKTsKKyAgICAg
ICAgICB1W2FycmF5W2ldXSA9IDE7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gYTsKKyAg
ICAgIH0sCisKKyAgICAgIGRlYm91bmNlOiBmdW5jdGlvbihmdW5jLCB3YWl0LCBpbW1lZGlhdGUp
IHsKKyAgICAgICAgaWYgKHR5cGVvZiB3YWl0ICE9ICdudW1iZXInKSB7CisgICAgICAgICAgd2Fp
dCA9IERFRkFVTFRfSU5URVJWQUw7CisgICAgICAgIH0KKworICAgICAgICB2YXIgdGltZW91dCwg
cmVzdWx0OworCisgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICB2YXIgY29u
dGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7CisgICAgICAgICAgdmFyIGxhdGVyID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICB0aW1lb3V0ID0gbnVsbDsKKyAgICAgICAgICAgIGlmICgh
aW1tZWRpYXRlKSB7CisgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwg
YXJncyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfTsKKyAgICAgICAgICB2YXIgY2FsbE5v
dyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDsKKworICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1l
b3V0KTsKKyAgICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7CisKKyAg
ICAgICAgICBpZiAoY2FsbE5vdykgeworICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShj
b250ZXh0LCBhcmdzKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICB9OworICAgICAgfSwKKworICAgICAgdGhyb3R0bGU6IGZ1bmN0aW9uKGZ1bmMsIHdh
aXQpIHsKKyAgICAgICAgaWYgKHR5cGVvZiB3YWl0ICE9ICdudW1iZXInKSB7CisgICAgICAgICAg
d2FpdCA9IERFRkFVTFRfSU5URVJWQUw7CisgICAgICAgIH0KKworICAgICAgICB2YXIgY29udGV4
dCwgYXJncywgdGltZW91dCwgdGhyb3R0bGluZywgbW9yZSwgcmVzdWx0OworICAgICAgICB2YXIg
d2hlbkRvbmUgPSB0aGlzLmRlYm91bmNlKGZ1bmN0aW9uKCl7CisgICAgICAgICAgbW9yZSA9IHRo
cm90dGxpbmcgPSBmYWxzZTsKKyAgICAgICAgfSwgd2FpdCk7CisKKyAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uKCkgeworICAgICAgICAgIGNvbnRleHQgPSB0aGlzOyBhcmdzID0gYXJndW1lbnRzOwor
ICAgICAgICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdGltZW91dCA9
IG51bGw7CisgICAgICAgICAgICBpZiAobW9yZSkgeworICAgICAgICAgICAgICByZXN1bHQgPSBm
dW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hl
bkRvbmUoKTsKKyAgICAgICAgICB9OworCisgICAgICAgICAgaWYgKCF0aW1lb3V0KSB7CisgICAg
ICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7CisgICAgICAgICAgfQor
CisgICAgICAgICAgaWYgKHRocm90dGxpbmcpIHsKKyAgICAgICAgICAgIG1vcmUgPSB0cnVlOwor
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdHRsaW5nID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7CisgICAgICAgICAgfQor
CisgICAgICAgICAgd2hlbkRvbmUoKTsKKyAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICB9OworICAgICAgfSwKKworICAgICAgY291bnRUaGVuOiBmdW5jdGlvbihudW0sIGJhc2UpIHsK
KyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgIGlmICghLS1udW0pIHsgcmV0
dXJuIGJhc2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfQorICAgICAgICB9OworICAgICAgfSwK
KworICAgICAgZGVsZWdhdGU6IGZ1bmN0aW9uKHJ1bGVzKSB7CisgICAgICAgIHJldHVybiBmdW5j
dGlvbihlLCBkYXRhKSB7CisgICAgICAgICAgdmFyIHRhcmdldCA9ICQoZS50YXJnZXQpLCBwYXJl
bnQ7CisKKyAgICAgICAgICBPYmplY3Qua2V5cyhydWxlcykuZm9yRWFjaChmdW5jdGlvbihzZWxl
Y3RvcikgeworICAgICAgICAgICAgaWYgKChwYXJlbnQgPSB0YXJnZXQuY2xvc2VzdChzZWxlY3Rv
cikpLmxlbmd0aCkgeworICAgICAgICAgICAgICBkYXRhID0gZGF0YSB8fCB7fTsKKyAgICAgICAg
ICAgICAgZGF0YS5lbCA9IHBhcmVudFswXTsKKyAgICAgICAgICAgICAgcmV0dXJuIHJ1bGVzW3Nl
bGVjdG9yXS5hcHBseSh0aGlzLCBbZSwgZGF0YV0pOworICAgICAgICAgICAgfQorICAgICAgICAg
IH0sIHRoaXMpOworICAgICAgICB9OworICAgICAgfQorCisgICAgfTsKKworICAgIHJldHVybiB1
dGlsczsKKyAgfQorKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVz
b3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50
cy9qcXVlcnkvanF1ZXJ5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VF
dmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93
ZXJfY29tcG9uZW50cy9qcXVlcnkvanF1ZXJ5LmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFu
Y2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1w
bGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2pxdWVyeS9qcXVlcnkuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw5NDcyIEBACisvKiEKKyAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkg
djEuOC4zCisgKiBodHRwOi8vanF1ZXJ5LmNvbS8KKyAqCisgKiBJbmNsdWRlcyBTaXp6bGUuanMK
KyAqIGh0dHA6Ly9zaXp6bGVqcy5jb20vCisgKgorICogQ29weXJpZ2h0IDIwMTIgalF1ZXJ5IEZv
dW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycworICogUmVsZWFzZWQgdW5kZXIgdGhlIE1J
VCBsaWNlbnNlCisgKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlCisgKgorICogRGF0ZTogVHVl
IE5vdiAxMyAyMDEyIDA4OjIwOjMzIEdNVC0wNTAwIChFYXN0ZXJuIFN0YW5kYXJkIFRpbWUpCisg
Ki8KKyhmdW5jdGlvbiggd2luZG93LCB1bmRlZmluZWQgKSB7Cit2YXIKKyAgICAgICAgLy8gQSBj
ZW50cmFsIHJlZmVyZW5jZSB0byB0aGUgcm9vdCBqUXVlcnkoZG9jdW1lbnQpCisgICAgICAgIHJv
b3RqUXVlcnksCisKKyAgICAgICAgLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5Cisg
ICAgICAgIHJlYWR5TGlzdCwKKworICAgICAgICAvLyBVc2UgdGhlIGNvcnJlY3QgZG9jdW1lbnQg
YWNjb3JkaW5nbHkgd2l0aCB3aW5kb3cgYXJndW1lbnQgKHNhbmRib3gpCisgICAgICAgIGRvY3Vt
ZW50ID0gd2luZG93LmRvY3VtZW50LAorICAgICAgICBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlv
biwKKyAgICAgICAgbmF2aWdhdG9yID0gd2luZG93Lm5hdmlnYXRvciwKKworICAgICAgICAvLyBN
YXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGUKKyAgICAgICAgX2pRdWVyeSA9IHdp
bmRvdy5qUXVlcnksCisKKyAgICAgICAgLy8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVy
d3JpdGUKKyAgICAgICAgXyQgPSB3aW5kb3cuJCwKKworICAgICAgICAvLyBTYXZlIGEgcmVmZXJl
bmNlIHRvIHNvbWUgY29yZSBtZXRob2RzCisgICAgICAgIGNvcmVfcHVzaCA9IEFycmF5LnByb3Rv
dHlwZS5wdXNoLAorICAgICAgICBjb3JlX3NsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLAor
ICAgICAgICBjb3JlX2luZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZiwKKyAgICAgICAg
Y29yZV90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsCisgICAgICAgIGNvcmVf
aGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSwKKyAgICAgICAgY29yZV90
cmltID0gU3RyaW5nLnByb3RvdHlwZS50cmltLAorCisgICAgICAgIC8vIERlZmluZSBhIGxvY2Fs
IGNvcHkgb2YgalF1ZXJ5CisgICAgICAgIGpRdWVyeSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29u
dGV4dCApIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxs
eSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCcKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbmV3IGpRdWVyeS5mbi5pbml0KCBzZWxlY3RvciwgY29udGV4dCwgcm9vdGpRdWVyeSAp
OworICAgICAgICB9LAorCisgICAgICAgIC8vIFVzZWQgZm9yIG1hdGNoaW5nIG51bWJlcnMKKyAg
ICAgICAgY29yZV9wbnVtID0gL1tcLStdPyg/OlxkKlwufClcZCsoPzpbZUVdW1wtK10/XGQrfCkv
LnNvdXJjZSwKKworICAgICAgICAvLyBVc2VkIGZvciBkZXRlY3RpbmcgYW5kIHRyaW1taW5nIHdo
aXRlc3BhY2UKKyAgICAgICAgY29yZV9ybm90d2hpdGUgPSAvXFMvLAorICAgICAgICBjb3JlX3Jz
cGFjZSA9IC9ccysvLAorCisgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSB0cmltIEJPTSBhbmQgTkJT
UCAoaGVyZSdzIGxvb2tpbmcgYXQgeW91LCBTYWZhcmkgNS4wIGFuZCBJRSkKKyAgICAgICAgcnRy
aW0gPSAvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csCisKKyAgICAgICAgLy8g
QSBzaW1wbGUgd2F5IHRvIGNoZWNrIGZvciBIVE1MIHN0cmluZ3MKKyAgICAgICAgLy8gUHJpb3Jp
dGl6ZSAjaWQgb3ZlciA8dGFnPiB0byBhdm9pZCBYU1MgdmlhIGxvY2F0aW9uLmhhc2ggKCM5NTIx
KQorICAgICAgICBycXVpY2tFeHByID0gL14oPzpbXiM8XSooPFtcd1xXXSs+KVtePl0qJHwjKFtc
d1wtXSopJCkvLAorCisgICAgICAgIC8vIE1hdGNoIGEgc3RhbmRhbG9uZSB0YWcKKyAgICAgICAg
cnNpbmdsZVRhZyA9IC9ePChcdyspXHMqXC8/Pig/OjxcL1wxPnwpJC8sCisKKyAgICAgICAgLy8g
SlNPTiBSZWdFeHAKKyAgICAgICAgcnZhbGlkY2hhcnMgPSAvXltcXSw6e31cc10qJC8sCisgICAg
ICAgIHJ2YWxpZGJyYWNlcyA9IC8oPzpefDp8LCkoPzpccypcWykrL2csCisgICAgICAgIHJ2YWxp
ZGVzY2FwZSA9IC9cXCg/OlsiXFxcL2JmbnJ0XXx1W1xkYS1mQS1GXXs0fSkvZywKKyAgICAgICAg
cnZhbGlkdG9rZW5zID0gLyJbXiJcXFxyXG5dKiJ8dHJ1ZXxmYWxzZXxudWxsfC0/KD86XGRcZCpc
LnwpXGQrKD86W2VFXVtcLStdP1xkK3wpL2csCisKKyAgICAgICAgLy8gTWF0Y2hlcyBkYXNoZWQg
c3RyaW5nIGZvciBjYW1lbGl6aW5nCisgICAgICAgIHJtc1ByZWZpeCA9IC9eLW1zLS8sCisgICAg
ICAgIHJkYXNoQWxwaGEgPSAvLShbXGRhLXpdKS9naSwKKworICAgICAgICAvLyBVc2VkIGJ5IGpR
dWVyeS5jYW1lbENhc2UgYXMgY2FsbGJhY2sgdG8gcmVwbGFjZSgpCisgICAgICAgIGZjYW1lbENh
c2UgPSBmdW5jdGlvbiggYWxsLCBsZXR0ZXIgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICgg
bGV0dGVyICsgIiIgKS50b1VwcGVyQ2FzZSgpOworICAgICAgICB9LAorCisgICAgICAgIC8vIFRo
ZSByZWFkeSBldmVudCBoYW5kbGVyIGFuZCBzZWxmIGNsZWFudXAgbWV0aG9kCisgICAgICAgIERP
TUNvbnRlbnRMb2FkZWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoIGRvY3Vt
ZW50LmFkZEV2ZW50TGlzdGVuZXIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVu
dC5yZW1vdmVFdmVudExpc3RlbmVyKCAiRE9NQ29udGVudExvYWRlZCIsIERPTUNvbnRlbnRMb2Fk
ZWQsIGZhbHNlICk7CisgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVhZHkoKTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxl
dGUiICkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UncmUgaGVyZSBiZWNhdXNlIHJl
YWR5U3RhdGUgPT09ICJjb21wbGV0ZSIgaW4gb2xkSUUKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHdoaWNoIGlzIGdvb2QgZW5vdWdoIGZvciB1cyB0byBjYWxsIHRoZSBkb20gcmVhZHkhCisg
ICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCggIm9ucmVhZHlzdGF0
ZWNoYW5nZSIsIERPTUNvbnRlbnRMb2FkZWQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5yZWFkeSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICAv
LyBbW0NsYXNzXV0gLT4gdHlwZSBwYWlycworICAgICAgICBjbGFzczJ0eXBlID0ge307CisKK2pR
dWVyeS5mbiA9IGpRdWVyeS5wcm90b3R5cGUgPSB7CisgICAgICAgIGNvbnN0cnVjdG9yOiBqUXVl
cnksCisgICAgICAgIGluaXQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcm9vdGpRdWVy
eSApIHsKKyAgICAgICAgICAgICAgICB2YXIgbWF0Y2gsIGVsZW0sIHJldCwgZG9jOworCisgICAg
ICAgICAgICAgICAgLy8gSGFuZGxlICQoIiIpLCAkKG51bGwpLCAkKHVuZGVmaW5lZCksICQoZmFs
c2UpCisgICAgICAgICAgICAgICAgaWYgKCAhc2VsZWN0b3IgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAvLyBIYW5kbGUgJChET01FbGVtZW50KQorICAgICAgICAgICAgICAgIGlmICggc2VsZWN0b3Iu
bm9kZVR5cGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSB0aGlz
WzBdID0gc2VsZWN0b3I7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IDE7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAvLyBIYW5kbGUgSFRNTCBzdHJpbmdzCisgICAgICAgICAgICAg
ICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBzZWxlY3Rvci5jaGFyQXQoMCkgPT09ICI8IiAmJiBzZWxlY3Rvci5jaGFy
QXQoIHNlbGVjdG9yLmxlbmd0aCAtIDEgKSA9PT0gIj4iICYmIHNlbGVjdG9yLmxlbmd0aCA+PSAz
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBc3N1bWUgdGhhdCBzdHJp
bmdzIHRoYXQgc3RhcnQgYW5kIGVuZCB3aXRoIDw+IGFyZSBIVE1MIGFuZCBza2lwIHRoZSByZWdl
eCBjaGVjaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IFsgbnVsbCwg
c2VsZWN0b3IsIG51bGwgXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNl
bGVjdG9yICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIE1hdGNoIGh0bWwgb3IgbWFrZSBzdXJlIG5vIGNvbnRleHQgaXMgc3BlY2lmaWVk
IGZvciAjaWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2ggJiYgKG1hdGNoWzFd
IHx8ICFjb250ZXh0KSApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBI
QU5ETEU6ICQoaHRtbCkgLT4gJChhcnJheSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBtYXRjaFsxXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0ID0gY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSA/IGNvbnRleHRbMF0gOiBj
b250ZXh0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvYyA9ICgg
Y29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNv
bnRleHQgOiBkb2N1bWVudCApOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gc2NyaXB0cyBpcyB0cnVlIGZvciBiYWNrLWNvbXBhdAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yID0galF1ZXJ5LnBhcnNlSFRNTCggbWF0
Y2hbMV0sIGRvYywgdHJ1ZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggcnNpbmdsZVRhZy50ZXN0KCBtYXRjaFsxXSApICYmIGpRdWVyeS5pc1BsYWluT2Jq
ZWN0KCBjb250ZXh0ICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLmF0dHIuY2FsbCggc2VsZWN0b3IsIGNvbnRleHQsIHRydWUgKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5Lm1lcmdlKCB0aGlzLCBzZWxl
Y3RvciApOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhBTkRMRTogJCgj
aWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCBtYXRjaFsyXSApOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQ2hlY2sgcGFyZW50Tm9kZSB0byBjYXRjaCB3aGVuIEJsYWNrYmVycnkgNC42IHJldHVy
bnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub2RlcyB0aGF0
IGFyZSBubyBsb25nZXIgaW4gdGhlIGRvY3VtZW50ICM2OTYzCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtICYmIGVsZW0ucGFyZW50Tm9kZSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0
aGUgY2FzZSB3aGVyZSBJRSBhbmQgT3BlcmEgcmV0dXJuIGl0ZW1zCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBuYW1lIGluc3RlYWQgb2YgSUQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxl
bS5pZCAhPT0gbWF0Y2hbMl0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb290alF1ZXJ5LmZpbmQoIHNlbGVjdG9yICk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lz
ZSwgd2UgaW5qZWN0IHRoZSBlbGVtZW50IGRpcmVjdGx5IGludG8gdGhlIGpRdWVyeSBvYmplY3QK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGVu
Z3RoID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXNbMF0gPSBlbGVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4
dCA9IGRvY3VtZW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuc2VsZWN0b3IgPSBzZWxlY3RvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBIQU5ETEU6ICQoZXhwciwgJCguLi4pKQorICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggIWNvbnRleHQgfHwgY29udGV4dC5qcXVl
cnkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoIGNvbnRleHQg
fHwgcm9vdGpRdWVyeSApLmZpbmQoIHNlbGVjdG9yICk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEhBTkRMRTogJChleHByLCBjb250ZXh0KQorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gKHdoaWNoIGlzIGp1c3QgZXF1aXZhbGVudCB0bzogJChjb250ZXh0KS5maW5kKGV4cHIpCisg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3RvciggY29udGV4dCApLmZpbmQoIHNlbGVjdG9y
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBIQU5E
TEU6ICQoZnVuY3Rpb24pCisgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXQgZm9yIGRvY3VtZW50
IHJlYWR5CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHNl
bGVjdG9yICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm9vdGpRdWVyeS5y
ZWFkeSggc2VsZWN0b3IgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAoIHNlbGVjdG9yLnNlbGVjdG9yICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3Iuc2VsZWN0b3I7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBzZWxlY3Rvci5jb250ZXh0OworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkubWFrZUFycmF5KCBzZWxlY3Rv
ciwgdGhpcyApOworICAgICAgICB9LAorCisgICAgICAgIC8vIFN0YXJ0IHdpdGggYW4gZW1wdHkg
c2VsZWN0b3IKKyAgICAgICAgc2VsZWN0b3I6ICIiLAorCisgICAgICAgIC8vIFRoZSBjdXJyZW50
IHZlcnNpb24gb2YgalF1ZXJ5IGJlaW5nIHVzZWQKKyAgICAgICAganF1ZXJ5OiAiMS44LjMiLAor
CisgICAgICAgIC8vIFRoZSBkZWZhdWx0IGxlbmd0aCBvZiBhIGpRdWVyeSBvYmplY3QgaXMgMAor
ICAgICAgICBsZW5ndGg6IDAsCisKKyAgICAgICAgLy8gVGhlIG51bWJlciBvZiBlbGVtZW50cyBj
b250YWluZWQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQKKyAgICAgICAgc2l6ZTogZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoOworICAgICAgICB9LAor
CisgICAgICAgIHRvQXJyYXk6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBj
b3JlX3NsaWNlLmNhbGwoIHRoaXMgKTsKKyAgICAgICAgfSwKKworICAgICAgICAvLyBHZXQgdGhl
IE50aCBlbGVtZW50IGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0IE9SCisgICAgICAgIC8vIEdl
dCB0aGUgd2hvbGUgbWF0Y2hlZCBlbGVtZW50IHNldCBhcyBhIGNsZWFuIGFycmF5CisgICAgICAg
IGdldDogZnVuY3Rpb24oIG51bSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVtID09IG51
bGwgPworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gYSAnY2xlYW4nIGFycmF5
CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvQXJyYXkoKSA6CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFJldHVybiBqdXN0IHRoZSBvYmplY3QKKyAgICAgICAgICAgICAgICAg
ICAgICAgICggbnVtIDwgMCA/IHRoaXNbIHRoaXMubGVuZ3RoICsgbnVtIF0gOiB0aGlzWyBudW0g
XSApOworICAgICAgICB9LAorCisgICAgICAgIC8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVudHMg
YW5kIHB1c2ggaXQgb250byB0aGUgc3RhY2sKKyAgICAgICAgLy8gKHJldHVybmluZyB0aGUgbmV3
IG1hdGNoZWQgZWxlbWVudCBzZXQpCisgICAgICAgIHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1z
LCBuYW1lLCBzZWxlY3RvciApIHsKKworICAgICAgICAgICAgICAgIC8vIEJ1aWxkIGEgbmV3IGpR
dWVyeSBtYXRjaGVkIGVsZW1lbnQgc2V0CisgICAgICAgICAgICAgICAgdmFyIHJldCA9IGpRdWVy
eS5tZXJnZSggdGhpcy5jb25zdHJ1Y3RvcigpLCBlbGVtcyApOworCisgICAgICAgICAgICAgICAg
Ly8gQWRkIHRoZSBvbGQgb2JqZWN0IG9udG8gdGhlIHN0YWNrIChhcyBhIHJlZmVyZW5jZSkKKyAg
ICAgICAgICAgICAgICByZXQucHJldk9iamVjdCA9IHRoaXM7CisKKyAgICAgICAgICAgICAgICBy
ZXQuY29udGV4dCA9IHRoaXMuY29udGV4dDsKKworICAgICAgICAgICAgICAgIGlmICggbmFtZSA9
PT0gImZpbmQiICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnNlbGVjdG9yID0gdGhp
cy5zZWxlY3RvciArICggdGhpcy5zZWxlY3RvciA/ICIgIiA6ICIiICkgKyBzZWxlY3RvcjsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBuYW1lICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0LnNlbGVjdG9yID0gdGhpcy5zZWxlY3RvciArICIuIiArIG5hbWUgKyAiKCIgKyBzZWxl
Y3RvciArICIpIjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBSZXR1
cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVtZW50IHNldAorICAgICAgICAgICAgICAgIHJldHVybiBy
ZXQ7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8gRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBldmVy
eSBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNldC4KKyAgICAgICAgLy8gKFlvdSBjYW4gc2VlZCB0
aGUgYXJndW1lbnRzIHdpdGggYW4gYXJyYXkgb2YgYXJncywgYnV0IHRoaXMgaXMKKyAgICAgICAg
Ly8gb25seSB1c2VkIGludGVybmFsbHkuKQorICAgICAgICBlYWNoOiBmdW5jdGlvbiggY2FsbGJh
Y2ssIGFyZ3MgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5lYWNoKCB0aGlzLCBj
YWxsYmFjaywgYXJncyApOworICAgICAgICB9LAorCisgICAgICAgIHJlYWR5OiBmdW5jdGlvbigg
Zm4gKSB7CisgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBjYWxsYmFjaworICAgICAgICAgICAg
ICAgIGpRdWVyeS5yZWFkeS5wcm9taXNlKCkuZG9uZSggZm4gKTsKKworICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzOworICAgICAgICB9LAorCisgICAgICAgIGVxOiBmdW5jdGlvbiggaSApIHsK
KyAgICAgICAgICAgICAgICBpID0gK2k7CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPT09IC0x
ID8KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2xpY2UoIGkgKSA6CisgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLnNsaWNlKCBpLCBpICsgMSApOworICAgICAgICB9LAorCisgICAg
ICAgIGZpcnN0OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcSgg
MCApOworICAgICAgICB9LAorCisgICAgICAgIGxhc3Q6IGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLmVxKCAtMSApOworICAgICAgICB9LAorCisgICAgICAgIHNsaWNl
OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIGNv
cmVfc2xpY2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApLAorICAgICAgICAgICAgICAgICAgICAg
ICAgInNsaWNlIiwgY29yZV9zbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbigiLCIpICk7CisgICAg
ICAgIH0sCisKKyAgICAgICAgbWFwOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFwKHRoaXMsIGZ1bmN0aW9uKCBl
bGVtLCBpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmNhbGwo
IGVsZW0sIGksIGVsZW0gKTsKKyAgICAgICAgICAgICAgICB9KSk7CisgICAgICAgIH0sCisKKyAg
ICAgICAgZW5kOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcmV2
T2JqZWN0IHx8IHRoaXMuY29uc3RydWN0b3IobnVsbCk7CisgICAgICAgIH0sCisKKyAgICAgICAg
Ly8gRm9yIGludGVybmFsIHVzZSBvbmx5LgorICAgICAgICAvLyBCZWhhdmVzIGxpa2UgYW4gQXJy
YXkncyBtZXRob2QsIG5vdCBsaWtlIGEgalF1ZXJ5IG1ldGhvZC4KKyAgICAgICAgcHVzaDogY29y
ZV9wdXNoLAorICAgICAgICBzb3J0OiBbXS5zb3J0LAorICAgICAgICBzcGxpY2U6IFtdLnNwbGlj
ZQorfTsKKworLy8gR2l2ZSB0aGUgaW5pdCBmdW5jdGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlwZSBm
b3IgbGF0ZXIgaW5zdGFudGlhdGlvbgoralF1ZXJ5LmZuLmluaXQucHJvdG90eXBlID0galF1ZXJ5
LmZuOworCitqUXVlcnkuZXh0ZW5kID0galF1ZXJ5LmZuLmV4dGVuZCA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICB2YXIgb3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmUs
CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gYXJndW1lbnRzWzBdIHx8IHt9LAorICAgICAgICAg
ICAgICAgIGkgPSAxLAorICAgICAgICAgICAgICAgIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgs
CisgICAgICAgICAgICAgICAgZGVlcCA9IGZhbHNlOworCisgICAgICAgIC8vIEhhbmRsZSBhIGRl
ZXAgY29weSBzaXR1YXRpb24KKyAgICAgICAgaWYgKCB0eXBlb2YgdGFyZ2V0ID09PSAiYm9vbGVh
biIgKSB7CisgICAgICAgICAgICAgICAgZGVlcCA9IHRhcmdldDsKKyAgICAgICAgICAgICAgICB0
YXJnZXQgPSBhcmd1bWVudHNbMV0gfHwge307CisgICAgICAgICAgICAgICAgLy8gc2tpcCB0aGUg
Ym9vbGVhbiBhbmQgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgIGkgPSAyOworICAgICAgICB9
CisKKyAgICAgICAgLy8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29t
ZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpCisgICAgICAgIGlmICggdHlwZW9mIHRhcmdl
dCAhPT0gIm9iamVjdCIgJiYgIWpRdWVyeS5pc0Z1bmN0aW9uKHRhcmdldCkgKSB7CisgICAgICAg
ICAgICAgICAgdGFyZ2V0ID0ge307CisgICAgICAgIH0KKworICAgICAgICAvLyBleHRlbmQgalF1
ZXJ5IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwYXNzZWQKKyAgICAgICAgaWYgKCBs
ZW5ndGggPT09IGkgKSB7CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGhpczsKKyAgICAgICAg
ICAgICAgICAtLWk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkr
KyApIHsKKyAgICAgICAgICAgICAgICAvLyBPbmx5IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmlu
ZWQgdmFsdWVzCisgICAgICAgICAgICAgICAgaWYgKCAob3B0aW9ucyA9IGFyZ3VtZW50c1sgaSBd
KSAhPSBudWxsICkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXh0ZW5kIHRoZSBiYXNl
IG9iamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggbmFtZSBpbiBvcHRpb25zICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMgPSB0YXJnZXRbIG5hbWUgXTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weSA9IG9wdGlvbnNbIG5hbWUgXTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IG5ldmVyLWVuZGlu
ZyBsb29wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSBj
b3B5ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJnaW5nIHBsYWluIG9iamVjdHMg
b3IgYXJyYXlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGVlcCAmJiBj
b3B5ICYmICggalF1ZXJ5LmlzUGxhaW5PYmplY3QoY29weSkgfHwgKGNvcHlJc0FycmF5ID0galF1
ZXJ5LmlzQXJyYXkoY29weSkpICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBjb3B5SXNBcnJheSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvcHlJc0FycmF5ID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9uZSA9IHNyYyAmJiBqUXVlcnku
aXNBcnJheShzcmMpID8gc3JjIDogW107CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2xvbmUgPSBzcmMgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3Qoc3JjKSA/IHNy
YyA6IHt9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldmVyIG1vdmUgb3JpZ2lu
YWwgb2JqZWN0cywgY2xvbmUgdGhlbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkg
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBicmluZyBpbiB1
bmRlZmluZWQgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0YXJnZXRbIG5hbWUgXSA9IGNvcHk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICAvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdAorICAg
ICAgICByZXR1cm4gdGFyZ2V0OworfTsKKworalF1ZXJ5LmV4dGVuZCh7CisgICAgICAgIG5vQ29u
ZmxpY3Q6IGZ1bmN0aW9uKCBkZWVwICkgeworICAgICAgICAgICAgICAgIGlmICggd2luZG93LiQg
PT09IGpRdWVyeSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy4kID0gXyQ7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCBkZWVwICYmIHdpbmRvdy5q
UXVlcnkgPT09IGpRdWVyeSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5qUXVl
cnkgPSBfalF1ZXJ5OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVy
biBqUXVlcnk7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8gSXMgdGhlIERPTSByZWFkeSB0byBi
ZSB1c2VkPyBTZXQgdG8gdHJ1ZSBvbmNlIGl0IG9jY3Vycy4KKyAgICAgICAgaXNSZWFkeTogZmFs
c2UsCisKKyAgICAgICAgLy8gQSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdh
aXQgZm9yIGJlZm9yZQorICAgICAgICAvLyB0aGUgcmVhZHkgZXZlbnQgZmlyZXMuIFNlZSAjNjc4
MQorICAgICAgICByZWFkeVdhaXQ6IDEsCisKKyAgICAgICAgLy8gSG9sZCAob3IgcmVsZWFzZSkg
dGhlIHJlYWR5IGV2ZW50CisgICAgICAgIGhvbGRSZWFkeTogZnVuY3Rpb24oIGhvbGQgKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCBob2xkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LnJlYWR5V2FpdCsrOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkucmVhZHkoIHRydWUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgIH0sCisKKyAgICAgICAgLy8gSGFuZGxlIHdoZW4gdGhlIERPTSBpcyByZWFkeQorICAgICAg
ICByZWFkeTogZnVuY3Rpb24oIHdhaXQgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBBYm9ydCBp
ZiB0aGVyZSBhcmUgcGVuZGluZyBob2xkcyBvciB3ZSdyZSBhbHJlYWR5IHJlYWR5CisgICAgICAg
ICAgICAgICAgaWYgKCB3YWl0ID09PSB0cnVlID8gLS1qUXVlcnkucmVhZHlXYWl0IDogalF1ZXJ5
LmlzUmVhZHkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIGJvZHkgZXhpc3RzLCBhdCBs
ZWFzdCwgaW4gY2FzZSBJRSBnZXRzIGEgbGl0dGxlIG92ZXJ6ZWFsb3VzICh0aWNrZXQgIzU0NDMp
LgorICAgICAgICAgICAgICAgIGlmICggIWRvY3VtZW50LmJvZHkgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5LCAxICk7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhhdCB0aGUgRE9NIGlz
IHJlYWR5CisgICAgICAgICAgICAgICAgalF1ZXJ5LmlzUmVhZHkgPSB0cnVlOworCisgICAgICAg
ICAgICAgICAgLy8gSWYgYSBub3JtYWwgRE9NIFJlYWR5IGV2ZW50IGZpcmVkLCBkZWNyZW1lbnQs
IGFuZCB3YWl0IGlmIG5lZWQgYmUKKyAgICAgICAgICAgICAgICBpZiAoIHdhaXQgIT09IHRydWUg
JiYgLS1qUXVlcnkucmVhZHlXYWl0ID4gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBh
cmUgZnVuY3Rpb25zIGJvdW5kLCB0byBleGVjdXRlCisgICAgICAgICAgICAgICAgcmVhZHlMaXN0
LnJlc29sdmVXaXRoKCBkb2N1bWVudCwgWyBqUXVlcnkgXSApOworCisgICAgICAgICAgICAgICAg
Ly8gVHJpZ2dlciBhbnkgYm91bmQgcmVhZHkgZXZlbnRzCisgICAgICAgICAgICAgICAgaWYgKCBq
UXVlcnkuZm4udHJpZ2dlciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggZG9j
dW1lbnQgKS50cmlnZ2VyKCJyZWFkeSIpLm9mZigicmVhZHkiKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgIH0sCisKKyAgICAgICAgLy8gU2VlIHRlc3QvdW5pdC9jb3JlLmpzIGZvciBkZXRh
aWxzIGNvbmNlcm5pbmcgaXNGdW5jdGlvbi4KKyAgICAgICAgLy8gU2luY2UgdmVyc2lvbiAxLjMs
IERPTSBtZXRob2RzIGFuZCBmdW5jdGlvbnMgbGlrZSBhbGVydAorICAgICAgICAvLyBhcmVuJ3Qg
c3VwcG9ydGVkLiBUaGV5IHJldHVybiBmYWxzZSBvbiBJRSAoIzI5NjgpLgorICAgICAgICBpc0Z1
bmN0aW9uOiBmdW5jdGlvbiggb2JqICkgeworICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnku
dHlwZShvYmopID09PSAiZnVuY3Rpb24iOworICAgICAgICB9LAorCisgICAgICAgIGlzQXJyYXk6
IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24oIG9iaiApIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4galF1ZXJ5LnR5cGUob2JqKSA9PT0gImFycmF5IjsKKyAgICAgICAgfSwKKworICAgICAgICBp
c1dpbmRvdzogZnVuY3Rpb24oIG9iaiApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqICE9
IG51bGwgJiYgb2JqID09IG9iai53aW5kb3c7CisgICAgICAgIH0sCisKKyAgICAgICAgaXNOdW1l
cmljOiBmdW5jdGlvbiggb2JqICkgeworICAgICAgICAgICAgICAgIHJldHVybiAhaXNOYU4oIHBh
cnNlRmxvYXQob2JqKSApICYmIGlzRmluaXRlKCBvYmogKTsKKyAgICAgICAgfSwKKworICAgICAg
ICB0eXBlOiBmdW5jdGlvbiggb2JqICkgeworICAgICAgICAgICAgICAgIHJldHVybiBvYmogPT0g
bnVsbCA/CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcoIG9iaiApIDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNsYXNzMnR5cGVbIGNvcmVfdG9TdHJpbmcuY2FsbChvYmopIF0gfHwg
Im9iamVjdCI7CisgICAgICAgIH0sCisKKyAgICAgICAgaXNQbGFpbk9iamVjdDogZnVuY3Rpb24o
IG9iaiApIHsKKyAgICAgICAgICAgICAgICAvLyBNdXN0IGJlIGFuIE9iamVjdC4KKyAgICAgICAg
ICAgICAgICAvLyBCZWNhdXNlIG9mIElFLCB3ZSBhbHNvIGhhdmUgdG8gY2hlY2sgdGhlIHByZXNl
bmNlIG9mIHRoZSBjb25zdHJ1Y3RvciBwcm9wZXJ0eS4KKyAgICAgICAgICAgICAgICAvLyBNYWtl
IHN1cmUgdGhhdCBET00gbm9kZXMgYW5kIHdpbmRvdyBvYmplY3RzIGRvbid0IHBhc3MgdGhyb3Vn
aCwgYXMgd2VsbAorICAgICAgICAgICAgICAgIGlmICggIW9iaiB8fCBqUXVlcnkudHlwZShvYmop
ICE9PSAib2JqZWN0IiB8fCBvYmoubm9kZVR5cGUgfHwgalF1ZXJ5LmlzV2luZG93KCBvYmogKSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Tm90IG93biBjb25zdHJ1Y3RvciBwcm9wZXJ0eSBtdXN0IGJlIE9iamVjdAorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBvYmouY29uc3RydWN0b3IgJiYKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIWNvcmVfaGFzT3duLmNhbGwob2JqLCAiY29uc3RydWN0b3IiKSAmJgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY29yZV9oYXNPd24uY2FsbChvYmouY29uc3Ry
dWN0b3IucHJvdG90eXBlLCAiaXNQcm90b3R5cGVPZiIpICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfSBjYXRjaCAoIGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBJRTgsOSBXaWxsIHRocm93IGV4Y2VwdGlvbnMgb24gY2VydGFpbiBob3N0IG9iamVjdHMgIzk4
OTcKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAvLyBPd24gcHJvcGVydGllcyBhcmUgZW51bWVyYXRlZCBm
aXJzdGx5LCBzbyB0byBzcGVlZCB1cCwKKyAgICAgICAgICAgICAgICAvLyBpZiBsYXN0IG9uZSBp
cyBvd24sIHRoZW4gYWxsIHByb3BlcnRpZXMgYXJlIG93bi4KKworICAgICAgICAgICAgICAgIHZh
ciBrZXk7CisgICAgICAgICAgICAgICAgZm9yICgga2V5IGluIG9iaiApIHt9CisKKyAgICAgICAg
ICAgICAgICByZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgfHwgY29yZV9oYXNPd24uY2FsbCggb2Jq
LCBrZXkgKTsKKyAgICAgICAgfSwKKworICAgICAgICBpc0VtcHR5T2JqZWN0OiBmdW5jdGlvbigg
b2JqICkgeworICAgICAgICAgICAgICAgIHZhciBuYW1lOworICAgICAgICAgICAgICAgIGZvciAo
IG5hbWUgaW4gb2JqICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fSwKKworICAgICAgICBlcnJvcjogZnVuY3Rpb24oIG1zZyApIHsKKyAgICAgICAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoIG1zZyApOworICAgICAgICB9LAorCisgICAgICAgIC8vIGRhdGE6IHN0
cmluZyBvZiBodG1sCisgICAgICAgIC8vIGNvbnRleHQgKG9wdGlvbmFsKTogSWYgc3BlY2lmaWVk
LCB0aGUgZnJhZ21lbnQgd2lsbCBiZSBjcmVhdGVkIGluIHRoaXMgY29udGV4dCwgZGVmYXVsdHMg
dG8gZG9jdW1lbnQKKyAgICAgICAgLy8gc2NyaXB0cyAob3B0aW9uYWwpOiBJZiB0cnVlLCB3aWxs
IGluY2x1ZGUgc2NyaXB0cyBwYXNzZWQgaW4gdGhlIGh0bWwgc3RyaW5nCisgICAgICAgIHBhcnNl
SFRNTDogZnVuY3Rpb24oIGRhdGEsIGNvbnRleHQsIHNjcmlwdHMgKSB7CisgICAgICAgICAgICAg
ICAgdmFyIHBhcnNlZDsKKyAgICAgICAgICAgICAgICBpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRh
ICE9PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0ID09
PSAiYm9vbGVhbiIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRzID0gY29udGV4
dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSAwOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDsKKworICAg
ICAgICAgICAgICAgIC8vIFNpbmdsZSB0YWcKKyAgICAgICAgICAgICAgICBpZiAoIChwYXJzZWQg
PSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEgKSkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gWyBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIHBhcnNlZFsxXSApIF07CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgcGFyc2VkID0galF1ZXJ5LmJ1aWxkRnJhZ21lbnQo
IFsgZGF0YSBdLCBjb250ZXh0LCBzY3JpcHRzID8gbnVsbCA6IFtdICk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGpRdWVyeS5tZXJnZSggW10sCisgICAgICAgICAgICAgICAgICAgICAgICAocGFy
c2VkLmNhY2hlYWJsZSA/IGpRdWVyeS5jbG9uZSggcGFyc2VkLmZyYWdtZW50ICkgOiBwYXJzZWQu
ZnJhZ21lbnQpLmNoaWxkTm9kZXMgKTsKKyAgICAgICAgfSwKKworICAgICAgICBwYXJzZUpTT046
IGZ1bmN0aW9uKCBkYXRhICkgeworICAgICAgICAgICAgICAgIGlmICggIWRhdGEgfHwgdHlwZW9m
IGRhdGEgIT09ICJzdHJpbmciKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgbGVh
ZGluZy90cmFpbGluZyB3aGl0ZXNwYWNlIGlzIHJlbW92ZWQgKElFIGNhbid0IGhhbmRsZSBpdCkK
KyAgICAgICAgICAgICAgICBkYXRhID0galF1ZXJ5LnRyaW0oIGRhdGEgKTsKKworICAgICAgICAg
ICAgICAgIC8vIEF0dGVtcHQgdG8gcGFyc2UgdXNpbmcgdGhlIG5hdGl2ZSBKU09OIHBhcnNlciBm
aXJzdAorICAgICAgICAgICAgICAgIGlmICggd2luZG93LkpTT04gJiYgd2luZG93LkpTT04ucGFy
c2UgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LkpTT04ucGFyc2Uo
IGRhdGEgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1
cmUgdGhlIGluY29taW5nIGRhdGEgaXMgYWN0dWFsIEpTT04KKyAgICAgICAgICAgICAgICAvLyBM
b2dpYyBib3Jyb3dlZCBmcm9tIGh0dHA6Ly9qc29uLm9yZy9qc29uMi5qcworICAgICAgICAgICAg
ICAgIGlmICggcnZhbGlkY2hhcnMudGVzdCggZGF0YS5yZXBsYWNlKCBydmFsaWRlc2NhcGUsICJA
IiApCisgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSggcnZhbGlkdG9rZW5zLCAiXSIg
KQorICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoIHJ2YWxpZGJyYWNlcywgIiIpKSAp
IHsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICggbmV3IEZ1bmN0aW9uKCAicmV0
dXJuICIgKyBkYXRhICkgKSgpOworCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGpRdWVyeS5lcnJvciggIkludmFsaWQgSlNPTjogIiArIGRhdGEgKTsKKyAgICAgICAgfSwKKwor
ICAgICAgICAvLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nCisgICAgICAgIHBhcnNlWE1MOiBm
dW5jdGlvbiggZGF0YSApIHsKKyAgICAgICAgICAgICAgICB2YXIgeG1sLCB0bXA7CisgICAgICAg
ICAgICAgICAgaWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gInN0cmluZyIgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggd2luZG93LkRP
TVBhcnNlciApIHsgLy8gU3RhbmRhcmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG1wID0gbmV3IERPTVBhcnNlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4
bWwgPSB0bXAucGFyc2VGcm9tU3RyaW5nKCBkYXRhICwgInRleHQveG1sIiApOworICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gSUUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeG1sID0gbmV3IEFjdGl2ZVhPYmplY3QoICJNaWNyb3NvZnQuWE1MRE9NIiApOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWwuYXN5bmMgPSAiZmFsc2UiOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB4bWwubG9hZFhNTCggZGF0YSApOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gY2F0Y2goIGUgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB4bWwgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmICggIXhtbCB8fCAheG1sLmRvY3VtZW50RWxlbWVudCB8fCB4bWwuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoICJwYXJzZXJlcnJvciIgKS5sZW5ndGggKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuZXJyb3IoICJJbnZhbGlkIFhNTDogIiArIGRhdGEgKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHhtbDsKKyAgICAgICAgfSwK
KworICAgICAgICBub29wOiBmdW5jdGlvbigpIHt9LAorCisgICAgICAgIC8vIEV2YWx1YXRlcyBh
IHNjcmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0CisgICAgICAgIC8vIFdvcmthcm91bmRzIGJhc2Vk
IG9uIGZpbmRpbmdzIGJ5IEppbSBEcmlzY29sbAorICAgICAgICAvLyBodHRwOi8vd2VibG9ncy5q
YXZhLm5ldC9ibG9nL2RyaXNjb2xsL2FyY2hpdmUvMjAwOS8wOS8wOC9ldmFsLWphdmFzY3JpcHQt
Z2xvYmFsLWNvbnRleHQKKyAgICAgICAgZ2xvYmFsRXZhbDogZnVuY3Rpb24oIGRhdGEgKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCBkYXRhICYmIGNvcmVfcm5vdHdoaXRlLnRlc3QoIGRhdGEgKSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHVzZSBleGVjU2NyaXB0IG9uIEludGVy
bmV0IEV4cGxvcmVyCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB1c2UgYW4gYW5vbnlt
b3VzIGZ1bmN0aW9uIHNvIHRoYXQgY29udGV4dCBpcyB3aW5kb3cKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHJhdGhlciB0aGFuIGpRdWVyeSBpbiBGaXJlZm94CisgICAgICAgICAgICAgICAg
ICAgICAgICAoIHdpbmRvdy5leGVjU2NyaXB0IHx8IGZ1bmN0aW9uKCBkYXRhICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dbICJldmFsIiBdLmNhbGwoIHdpbmRvdywg
ZGF0YSApOworICAgICAgICAgICAgICAgICAgICAgICAgfSApKCBkYXRhICk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIC8vIENvbnZlcnQgZGFzaGVkIHRvIGNhbWVs
Q2FzZTsgdXNlZCBieSB0aGUgY3NzIGFuZCBkYXRhIG1vZHVsZXMKKyAgICAgICAgLy8gTWljcm9z
b2Z0IGZvcmdvdCB0byBodW1wIHRoZWlyIHZlbmRvciBwcmVmaXggKCM5NTcyKQorICAgICAgICBj
YW1lbENhc2U6IGZ1bmN0aW9uKCBzdHJpbmcgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0
cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsICJtcy0iICkucmVwbGFjZSggcmRhc2hBbHBoYSwgZmNh
bWVsQ2FzZSApOworICAgICAgICB9LAorCisgICAgICAgIG5vZGVOYW1lOiBmdW5jdGlvbiggZWxl
bSwgbmFtZSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVt
Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKTsKKyAgICAgICAg
fSwKKworICAgICAgICAvLyBhcmdzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5CisgICAgICAg
IGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrLCBhcmdzICkgeworICAgICAgICAgICAgICAg
IHZhciBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICBsZW5ndGggPSBvYmoubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAg
aXNPYmogPSBsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBqUXVlcnkuaXNGdW5jdGlvbiggb2JqICk7
CisKKyAgICAgICAgICAgICAgICBpZiAoIGFyZ3MgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGlzT2JqICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBu
YW1lIGluIG9iaiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGNhbGxiYWNrLmFwcGx5KCBvYmpbIG5hbWUgXSwgYXJncyApID09PSBmYWxzZSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrLmFwcGx5KCBv
YmpbIGkrKyBdLCBhcmdzICkgPT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBBIHNwZWNpYWwsIGZh
c3QsIGNhc2UgZm9yIHRoZSBtb3N0IGNvbW1vbiB1c2Ugb2YgZWFjaAorICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlzT2JqICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBuYW1lIGluIG9iaiApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsg
bmFtZSBdLCBuYW1lLCBvYmpbIG5hbWUgXSApID09PSBmYWxzZSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBv
YmpbIGkrKyBdICkgPT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0
dXJuIG9iajsKKyAgICAgICAgfSwKKworICAgICAgICAvLyBVc2UgbmF0aXZlIFN0cmluZy50cmlt
IGZ1bmN0aW9uIHdoZXJldmVyIHBvc3NpYmxlCisgICAgICAgIHRyaW06IGNvcmVfdHJpbSAmJiAh
Y29yZV90cmltLmNhbGwoIlx1RkVGRlx4QTAiKSA/CisgICAgICAgICAgICAgICAgZnVuY3Rpb24o
IHRleHQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dCA9PSBudWxsID8K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIgOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb3JlX3RyaW0uY2FsbCggdGV4dCApOworICAgICAgICAgICAgICAgIH0g
OgorCisgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHVzZSBvdXIgb3duIHRyaW1taW5nIGZ1
bmN0aW9uYWxpdHkKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiggdGV4dCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0ID09IG51bGwgPworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiIiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggdGV4
dCArICIiICkucmVwbGFjZSggcnRyaW0sICIiICk7CisgICAgICAgICAgICAgICAgfSwKKworICAg
ICAgICAvLyByZXN1bHRzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5CisgICAgICAgIG1ha2VB
cnJheTogZnVuY3Rpb24oIGFyciwgcmVzdWx0cyApIHsKKyAgICAgICAgICAgICAgICB2YXIgdHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHJlc3VsdHMgfHwgW107CisKKyAgICAg
ICAgICAgICAgICBpZiAoIGFyciAhPSBudWxsICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gVGhlIHdpbmRvdywgc3RyaW5ncyAoYW5kIGZ1bmN0aW9ucykgYWxzbyBoYXZlICdsZW5ndGgn
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUd2Vha2VkIGxvZ2ljIHNsaWdodGx5IHRvIGhh
bmRsZSBCbGFja2JlcnJ5IDQuNyBSZWdFeHAgaXNzdWVzICM2OTMwCisgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlID0galF1ZXJ5LnR5cGUoIGFyciApOworCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGFyci5sZW5ndGggPT0gbnVsbCB8fCB0eXBlID09PSAic3RyaW5nIiB8fCB0eXBl
ID09PSAiZnVuY3Rpb24iIHx8IHR5cGUgPT09ICJyZWdleHAiIHx8IGpRdWVyeS5pc1dpbmRvdygg
YXJyICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfcHVzaC5jYWxs
KCByZXQsIGFyciApOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCByZXQsIGFyciApOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IHJldHVybiByZXQ7CisgICAgICAgIH0sCisKKyAgICAgICAgaW5BcnJheTogZnVuY3Rpb24oIGVs
ZW0sIGFyciwgaSApIHsKKyAgICAgICAgICAgICAgICB2YXIgbGVuOworCisgICAgICAgICAgICAg
ICAgaWYgKCBhcnIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvcmVfaW5kZXhP
ZiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvcmVfaW5kZXhP
Zi5jYWxsKCBhcnIsIGVsZW0sIGkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgbGVuID0gYXJyLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGkgPSBpID8gaSA8IDAgPyBNYXRoLm1heCggMCwgbGVuICsgaSApIDogaSA6IDA7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTa2lwIGFjY2Vzc2luZyBpbiBzcGFyc2UgYXJy
YXlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaSBpbiBhcnIgJiYgYXJy
WyBpIF0gPT09IGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gLTE7CisgICAgICAgIH0sCisKKyAgICAgICAgbWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwg
c2Vjb25kICkgeworICAgICAgICAgICAgICAgIHZhciBsID0gc2Vjb25kLmxlbmd0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGkgPSBmaXJzdC5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICBqID0gMDsKKworICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGwgPT09ICJudW1iZXIi
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggOyBqIDwgbDsgaisrICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFsgaSsrIF0gPSBzZWNvbmRbIGogXTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIHNlY29uZFtqXSAhPT0gdW5kZWZpbmVkICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFsgaSsrIF0gPSBzZWNvbmRb
IGorKyBdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGZpcnN0Lmxlbmd0aCA9IGk7CisKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmlyc3Q7CisgICAgICAgIH0sCisKKyAgICAgICAgZ3JlcDogZnVuY3Rpb24oIGVsZW1zLCBj
YWxsYmFjaywgaW52ICkgeworICAgICAgICAgICAgICAgIHZhciByZXRWYWwsCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXQgPSBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gZWxlbXMubGVuZ3RoOworICAgICAgICAg
ICAgICAgIGludiA9ICEhaW52OworCisgICAgICAgICAgICAgICAgLy8gR28gdGhyb3VnaCB0aGUg
YXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtcworICAgICAgICAgICAgICAgIC8vIHRoYXQgcGFz
cyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgZm9yICggOyBpIDwgbGVu
Z3RoOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwgPSAhIWNhbGxiYWNr
KCBlbGVtc1sgaSBdLCBpICk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGludiAhPT0g
cmV0VmFsICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQucHVzaCggZWxl
bXNbIGkgXSApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8g
YXJnIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5CisgICAgICAgIG1hcDogZnVuY3Rpb24oIGVs
ZW1zLCBjYWxsYmFjaywgYXJnICkgeworICAgICAgICAgICAgICAgIHZhciB2YWx1ZSwga2V5LAor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gW10sCisgICAgICAgICAgICAgICAgICAgICAg
ICBpID0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IGVsZW1zLmxlbmd0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGpxdWVyeSBvYmplY3RzIGFyZSB0cmVhdGVkIGFz
IGFycmF5cworICAgICAgICAgICAgICAgICAgICAgICAgaXNBcnJheSA9IGVsZW1zIGluc3RhbmNl
b2YgalF1ZXJ5IHx8IGxlbmd0aCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBsZW5ndGggPT09ICJu
dW1iZXIiICYmICggKCBsZW5ndGggPiAwICYmIGVsZW1zWyAwIF0gJiYgZWxlbXNbIGxlbmd0aCAt
MSBdICkgfHwgbGVuZ3RoID09PSAwIHx8IGpRdWVyeS5pc0FycmF5KCBlbGVtcyApICkgOworCisg
ICAgICAgICAgICAgICAgLy8gR28gdGhyb3VnaCB0aGUgYXJyYXksIHRyYW5zbGF0aW5nIGVhY2gg
b2YgdGhlIGl0ZW1zIHRvIHRoZWlyCisgICAgICAgICAgICAgICAgaWYgKCBpc0FycmF5ICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0s
IGksIGFyZyApOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUg
IT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRb
IHJldC5sZW5ndGggXSA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBHbyB0aHJv
dWdoIGV2ZXJ5IGtleSBvbiB0aGUgb2JqZWN0LAorICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBrZXkgaW4gZWxlbXMgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBrZXkgXSwga2V5
LCBhcmcgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlICE9
IG51bGwgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0WyBy
ZXQubGVuZ3RoIF0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXMKKyAgICAgICAgICAgICAgICByZXR1
cm4gcmV0LmNvbmNhdC5hcHBseSggW10sIHJldCApOworICAgICAgICB9LAorCisgICAgICAgIC8v
IEEgZ2xvYmFsIEdVSUQgY291bnRlciBmb3Igb2JqZWN0cworICAgICAgICBndWlkOiAxLAorCisg
ICAgICAgIC8vIEJpbmQgYSBmdW5jdGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlh
bGx5IGFwcGx5aW5nIGFueQorICAgICAgICAvLyBhcmd1bWVudHMuCisgICAgICAgIHByb3h5OiBm
dW5jdGlvbiggZm4sIGNvbnRleHQgKSB7CisgICAgICAgICAgICAgICAgdmFyIHRtcCwgYXJncywg
cHJveHk7CisKKyAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0ID09PSAic3RyaW5n
IiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IGZuWyBjb250ZXh0IF07CisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0gZm47CisgICAgICAgICAgICAgICAgICAgICAg
ICBmbiA9IHRtcDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBRdWlj
ayBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGFyZ2V0IGlzIGNhbGxhYmxlLCBpbiB0aGUgc3BlYwor
ICAgICAgICAgICAgICAgIC8vIHRoaXMgdGhyb3dzIGEgVHlwZUVycm9yLCBidXQgd2Ugd2lsbCBq
dXN0IHJldHVybiB1bmRlZmluZWQuCisgICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LmlzRnVu
Y3Rpb24oIGZuICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVk
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFNpbXVsYXRlZCBiaW5k
CisgICAgICAgICAgICAgICAgYXJncyA9IGNvcmVfc2xpY2UuY2FsbCggYXJndW1lbnRzLCAyICk7
CisgICAgICAgICAgICAgICAgcHJveHkgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmbi5hcHBseSggY29udGV4dCwgYXJncy5jb25jYXQoIGNvcmVfc2xpY2Uu
Y2FsbCggYXJndW1lbnRzICkgKSApOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAg
ICAgICAvLyBTZXQgdGhlIGd1aWQgb2YgdW5pcXVlIGhhbmRsZXIgdG8gdGhlIHNhbWUgb2Ygb3Jp
Z2luYWwgaGFuZGxlciwgc28gaXQgY2FuIGJlIHJlbW92ZWQKKyAgICAgICAgICAgICAgICBwcm94
eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKzsKKworICAgICAgICAg
ICAgICAgIHJldHVybiBwcm94eTsKKyAgICAgICAgfSwKKworICAgICAgICAvLyBNdWx0aWZ1bmN0
aW9uYWwgbWV0aG9kIHRvIGdldCBhbmQgc2V0IHZhbHVlcyBvZiBhIGNvbGxlY3Rpb24KKyAgICAg
ICAgLy8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkgYmUgZXhlY3V0ZWQgaWYgaXQncyBhIGZ1
bmN0aW9uCisgICAgICAgIGFjY2VzczogZnVuY3Rpb24oIGVsZW1zLCBmbiwga2V5LCB2YWx1ZSwg
Y2hhaW5hYmxlLCBlbXB0eUdldCwgcGFzcyApIHsKKyAgICAgICAgICAgICAgICB2YXIgZXhlYywK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJ1bGsgPSBrZXkgPT0gbnVsbCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gZWxl
bXMubGVuZ3RoOworCisgICAgICAgICAgICAgICAgLy8gU2V0cyBtYW55IHZhbHVlcworICAgICAg
ICAgICAgICAgIGlmICgga2V5ICYmIHR5cGVvZiBrZXkgPT09ICJvYmplY3QiICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICggaSBpbiBrZXkgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeS5hY2Nlc3MoIGVsZW1zLCBmbiwgaSwga2V5W2ldLCAxLCBlbXB0
eUdldCwgdmFsdWUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYWluYWJsZSA9IDE7CisKKyAgICAgICAgICAgICAgICAvLyBTZXRzIG9uZSB2
YWx1ZQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBmdW5jdGlvbiB2YWx1ZXMg
Z2V0IGV4ZWN1dGVkIGlmIGV4ZWMgaXMgdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgZXhl
YyA9IHBhc3MgPT09IHVuZGVmaW5lZCAmJiBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBidWxrICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBCdWxrIG9wZXJhdGlvbnMgb25seSBpdGVyYXRlIHdoZW4gZXhlY3V0
aW5nIGZ1bmN0aW9uIHZhbHVlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGV4ZWMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlYyA9
IGZuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gZnVuY3Rp
b24oIGVsZW0sIGtleSwgdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXhlYy5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdmFsdWUg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB0aGV5IHJ1biBhZ2FpbnN0IHRo
ZSBlbnRpcmUgc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4uY2FsbCggZWxlbXMsIHZh
bHVlICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBudWxs
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZm4gKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyBpKysgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4oIGVsZW1zW2ldLCBrZXksIGV4ZWMg
PyB2YWx1ZS5jYWxsKCBlbGVtc1tpXSwgaSwgZm4oIGVsZW1zW2ldLCBrZXkgKSApIDogdmFsdWUs
IHBhc3MgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFpbmFibGUgPSAxOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBjaGFpbmFibGUgPwor
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbXMgOgorCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBHZXRzCisgICAgICAgICAgICAgICAgICAgICAgICBidWxrID8KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm4uY2FsbCggZWxlbXMgKSA6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxlbmd0aCA/IGZuKCBlbGVtc1swXSwga2V5ICkgOiBlbXB0eUdldDsKKyAg
ICAgICAgfSwKKworICAgICAgICBub3c6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHJl
dHVybiAoIG5ldyBEYXRlKCkgKS5nZXRUaW1lKCk7CisgICAgICAgIH0KK30pOworCitqUXVlcnku
cmVhZHkucHJvbWlzZSA9IGZ1bmN0aW9uKCBvYmogKSB7CisgICAgICAgIGlmICggIXJlYWR5TGlz
dCApIHsKKworICAgICAgICAgICAgICAgIHJlYWR5TGlzdCA9IGpRdWVyeS5EZWZlcnJlZCgpOwor
CisgICAgICAgICAgICAgICAgLy8gQ2F0Y2ggY2FzZXMgd2hlcmUgJChkb2N1bWVudCkucmVhZHko
KSBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGJyb3dzZXIgZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJyZWQu
CisgICAgICAgICAgICAgICAgLy8gd2Ugb25jZSB0cmllZCB0byB1c2UgcmVhZHlTdGF0ZSAiaW50
ZXJhY3RpdmUiIGhlcmUsIGJ1dCBpdCBjYXVzZWQgaXNzdWVzIGxpa2UgdGhlIG9uZQorICAgICAg
ICAgICAgICAgIC8vIGRpc2NvdmVyZWQgYnkgQ2hyaXNTIGhlcmU6IGh0dHA6Ly9idWdzLmpxdWVy
eS5jb20vdGlja2V0LzEyMjgyI2NvbW1lbnQ6MTUKKyAgICAgICAgICAgICAgICBpZiAoIGRvY3Vt
ZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBIYW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cgc2NyaXB0cyB0aGUgb3Bwb3J0
dW5pdHkgdG8gZGVsYXkgcmVhZHkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQo
IGpRdWVyeS5yZWFkeSwgMSApOworCisgICAgICAgICAgICAgICAgLy8gU3RhbmRhcmRzLWJhc2Vk
IGJyb3dzZXJzIHN1cHBvcnQgRE9NQ29udGVudExvYWRlZAorICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBVc2UgdGhlIGhhbmR5IGV2ZW50IGNhbGxiYWNrCisgICAgICAgICAgICAgICAgICAg
ICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAiRE9NQ29udGVudExvYWRlZCIsIERPTUNv
bnRlbnRMb2FkZWQsIGZhbHNlICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgZmFs
bGJhY2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3JrCisgICAgICAgICAg
ICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggImxvYWQiLCBqUXVlcnkucmVh
ZHksIGZhbHNlICk7CisKKyAgICAgICAgICAgICAgICAvLyBJZiBJRSBldmVudCBtb2RlbCBpcyB1
c2VkCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEVuc3VyZSBmaXJpbmcgYmVmb3JlIG9ubG9hZCwgbWF5YmUgbGF0ZSBidXQgc2FmZSBhbHNvIGZv
ciBpZnJhbWVzCisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hdHRhY2hFdmVudCgg
Im9ucmVhZHlzdGF0ZWNoYW5nZSIsIERPTUNvbnRlbnRMb2FkZWQgKTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3
YXlzIHdvcmsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5hdHRhY2hFdmVudCggIm9u
bG9hZCIsIGpRdWVyeS5yZWFkeSApOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBJ
RSBhbmQgbm90IGEgZnJhbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRpbnVhbGx5
IGNoZWNrIHRvIHNlZSBpZiB0aGUgZG9jdW1lbnQgaXMgcmVhZHkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciB0b3AgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wID0gd2luZG93LmZyYW1lRWxlbWVu
dCA9PSBudWxsICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0gY2F0Y2goZSkge30KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0b3Ag
JiYgdG9wLmRvU2Nyb2xsICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnVu
Y3Rpb24gZG9TY3JvbGxDaGVjaygpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoICFqUXVlcnkuaXNSZWFkeSApIHsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSB0cmljayBieSBEaWVn
byBQZXJpbmkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gaHR0cDovL2phdmFzY3JpcHQubndib3guY29tL0lFQ29udGVudExvYWRlZC8K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9wLmRvU2Nyb2xsKCJsZWZ0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoIGRvU2Nyb2xsQ2hl
Y2ssIDUwICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGFuZCBleGVjdXRlIGFueSB3YWl0aW5nIGZ1bmN0aW9ucworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlYWR5KCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9KSgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVhZHlMaXN0LnByb21pc2UoIG9iaiApOworfTsK
KworLy8gUG9wdWxhdGUgdGhlIGNsYXNzMnR5cGUgbWFwCitqUXVlcnkuZWFjaCgiQm9vbGVhbiBO
dW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCIuc3BsaXQoIiAi
KSwgZnVuY3Rpb24oaSwgbmFtZSkgeworICAgICAgICBjbGFzczJ0eXBlWyAiW29iamVjdCAiICsg
bmFtZSArICJdIiBdID0gbmFtZS50b0xvd2VyQ2FzZSgpOworfSk7CisKKy8vIEFsbCBqUXVlcnkg
b2JqZWN0cyBzaG91bGQgcG9pbnQgYmFjayB0byB0aGVzZQorcm9vdGpRdWVyeSA9IGpRdWVyeShk
b2N1bWVudCk7CisvLyBTdHJpbmcgdG8gT2JqZWN0IG9wdGlvbnMgZm9ybWF0IGNhY2hlCit2YXIg
b3B0aW9uc0NhY2hlID0ge307CisKKy8vIENvbnZlcnQgU3RyaW5nLWZvcm1hdHRlZCBvcHRpb25z
IGludG8gT2JqZWN0LWZvcm1hdHRlZCBvbmVzIGFuZCBzdG9yZSBpbiBjYWNoZQorZnVuY3Rpb24g
Y3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIHsKKyAgICAgICAgdmFyIG9iamVjdCA9IG9wdGlvbnND
YWNoZVsgb3B0aW9ucyBdID0ge307CisgICAgICAgIGpRdWVyeS5lYWNoKCBvcHRpb25zLnNwbGl0
KCBjb3JlX3JzcGFjZSApLCBmdW5jdGlvbiggXywgZmxhZyApIHsKKyAgICAgICAgICAgICAgICBv
YmplY3RbIGZsYWcgXSA9IHRydWU7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gb2JqZWN0
OworfQorCisvKgorICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5n
IHBhcmFtZXRlcnM6CisgKgorICogICAgICBvcHRpb25zOiBhbiBvcHRpb25hbCBsaXN0IG9mIHNw
YWNlLXNlcGFyYXRlZCBvcHRpb25zIHRoYXQgd2lsbCBjaGFuZ2UgaG93CisgKiAgICAgICAgICAg
ICAgICAgICAgICB0aGUgY2FsbGJhY2sgbGlzdCBiZWhhdmVzIG9yIGEgbW9yZSB0cmFkaXRpb25h
bCBvcHRpb24gb2JqZWN0CisgKgorICogQnkgZGVmYXVsdCBhIGNhbGxiYWNrIGxpc3Qgd2lsbCBh
Y3QgbGlrZSBhbiBldmVudCBjYWxsYmFjayBsaXN0IGFuZCBjYW4gYmUKKyAqICJmaXJlZCIgbXVs
dGlwbGUgdGltZXMuCisgKgorICogUG9zc2libGUgb3B0aW9uczoKKyAqCisgKiAgICAgIG9uY2U6
ICAgICAgICAgICAgICAgICAgIHdpbGwgZW5zdXJlIHRoZSBjYWxsYmFjayBsaXN0IGNhbiBvbmx5
IGJlIGZpcmVkIG9uY2UgKGxpa2UgYSBEZWZlcnJlZCkKKyAqCisgKiAgICAgIG1lbW9yeTogICAg
ICAgICAgICAgICAgIHdpbGwga2VlcCB0cmFjayBvZiBwcmV2aW91cyB2YWx1ZXMgYW5kIHdpbGwg
Y2FsbCBhbnkgY2FsbGJhY2sgYWRkZWQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBhd2F5IHdpdGggdGhl
IGxhdGVzdCAibWVtb3JpemVkIgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbHVlcyAobGlrZSBhIERlZmVycmVkKQorICoKKyAqICAgICAgdW5pcXVlOiAgICAgICAg
ICAgICAgICAgd2lsbCBlbnN1cmUgYSBjYWxsYmFjayBjYW4gb25seSBiZSBhZGRlZCBvbmNlIChu
byBkdXBsaWNhdGUgaW4gdGhlIGxpc3QpCisgKgorICogICAgICBzdG9wT25GYWxzZTogICAgaW50
ZXJydXB0IGNhbGxpbmdzIHdoZW4gYSBjYWxsYmFjayByZXR1cm5zIGZhbHNlCisgKgorICovCitq
UXVlcnkuQ2FsbGJhY2tzID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7CisKKyAgICAgICAgLy8gQ29u
dmVydCBvcHRpb25zIGZyb20gU3RyaW5nLWZvcm1hdHRlZCB0byBPYmplY3QtZm9ybWF0dGVkIGlm
IG5lZWRlZAorICAgICAgICAvLyAod2UgY2hlY2sgaW4gY2FjaGUgZmlyc3QpCisgICAgICAgIG9w
dGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gInN0cmluZyIgPworICAgICAgICAgICAgICAgICgg
b3B0aW9uc0NhY2hlWyBvcHRpb25zIF0gfHwgY3JlYXRlT3B0aW9ucyggb3B0aW9ucyApICkgOgor
ICAgICAgICAgICAgICAgIGpRdWVyeS5leHRlbmQoIHt9LCBvcHRpb25zICk7CisKKyAgICAgICAg
dmFyIC8vIExhc3QgZmlyZSB2YWx1ZSAoZm9yIG5vbi1mb3JnZXR0YWJsZSBsaXN0cykKKyAgICAg
ICAgICAgICAgICBtZW1vcnksCisgICAgICAgICAgICAgICAgLy8gRmxhZyB0byBrbm93IGlmIGxp
c3Qgd2FzIGFscmVhZHkgZmlyZWQKKyAgICAgICAgICAgICAgICBmaXJlZCwKKyAgICAgICAgICAg
ICAgICAvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCBpcyBjdXJyZW50bHkgZmlyaW5nCisgICAgICAg
ICAgICAgICAgZmlyaW5nLAorICAgICAgICAgICAgICAgIC8vIEZpcnN0IGNhbGxiYWNrIHRvIGZp
cmUgKHVzZWQgaW50ZXJuYWxseSBieSBhZGQgYW5kIGZpcmVXaXRoKQorICAgICAgICAgICAgICAg
IGZpcmluZ1N0YXJ0LAorICAgICAgICAgICAgICAgIC8vIEVuZCBvZiB0aGUgbG9vcCB3aGVuIGZp
cmluZworICAgICAgICAgICAgICAgIGZpcmluZ0xlbmd0aCwKKyAgICAgICAgICAgICAgICAvLyBJ
bmRleCBvZiBjdXJyZW50bHkgZmlyaW5nIGNhbGxiYWNrIChtb2RpZmllZCBieSByZW1vdmUgaWYg
bmVlZGVkKQorICAgICAgICAgICAgICAgIGZpcmluZ0luZGV4LAorICAgICAgICAgICAgICAgIC8v
IEFjdHVhbCBjYWxsYmFjayBsaXN0CisgICAgICAgICAgICAgICAgbGlzdCA9IFtdLAorICAgICAg
ICAgICAgICAgIC8vIFN0YWNrIG9mIGZpcmUgY2FsbHMgZm9yIHJlcGVhdGFibGUgbGlzdHMKKyAg
ICAgICAgICAgICAgICBzdGFjayA9ICFvcHRpb25zLm9uY2UgJiYgW10sCisgICAgICAgICAgICAg
ICAgLy8gRmlyZSBjYWxsYmFja3MKKyAgICAgICAgICAgICAgICBmaXJlID0gZnVuY3Rpb24oIGRh
dGEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgPSBvcHRpb25zLm1lbW9yeSAm
JiBkYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgZmlyZWQgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgZmlyaW5nSW5kZXggPSBmaXJpbmdTdGFydCB8fCAwOworICAgICAgICAg
ICAgICAgICAgICAgICAgZmlyaW5nU3RhcnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAg
ZmlyaW5nTGVuZ3RoID0gbGlzdC5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICBmaXJp
bmcgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggOyBsaXN0ICYmIGZpcmlu
Z0luZGV4IDwgZmlyaW5nTGVuZ3RoOyBmaXJpbmdJbmRleCsrICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGxpc3RbIGZpcmluZ0luZGV4IF0uYXBwbHkoIGRhdGFbIDAg
XSwgZGF0YVsgMSBdICkgPT09IGZhbHNlICYmIG9wdGlvbnMuc3RvcE9uRmFsc2UgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5ID0gZmFsc2U7IC8vIFRv
IHByZXZlbnQgZnVydGhlciBjYWxscyB1c2luZyBhZGQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZmly
aW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGxpc3QgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3RhY2sgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGFjay5sZW5ndGggKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJlKCBzdGFjay5zaGlm
dCgpICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBtZW1vcnkgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IFtdOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuZGlzYWJsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICAvLyBBY3R1YWwgQ2FsbGJhY2tzIG9iamVjdAorICAgICAgICAgICAgICAg
IHNlbGYgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgYSBjYWxsYmFjayBvciBh
IGNvbGxlY3Rpb24gb2YgY2FsbGJhY2tzIHRvIHRoZSBsaXN0CisgICAgICAgICAgICAgICAgICAg
ICAgICBhZGQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGxpc3QgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Rmlyc3QsIHdlIHNhdmUgdGhlIGN1cnJlbnQgbGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gbGlzdC5sZW5ndGg7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGFkZCggYXJncyApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCBh
cmdzLCBmdW5jdGlvbiggXywgYXJnICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBhcmcgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCB0eXBlID09PSAiZnVuY3Rpb24iICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIW9wdGlvbnMudW5pcXVl
IHx8ICFzZWxmLmhhcyggYXJnICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0LnB1c2goIGFyZyAp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICggYXJnICYmIGFyZy5sZW5ndGggJiYgdHlwZSAhPT0gInN0
cmluZyIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSW5zcGVjdCByZWN1cnNpdmVseQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZCggYXJn
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCBhcmd1bWVudHMg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEbyB3ZSBuZWVk
IHRvIGFkZCB0aGUgY2FsbGJhY2tzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGN1cnJlbnQgZmlyaW5nIGJhdGNoPworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggZmlyaW5nICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyaW5nTGVuZ3RoID0gbGlzdC5sZW5ndGg7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2l0aCBtZW1vcnks
IGlmIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHdlIHNob3VsZCBjYWxsIHJpZ2h0IGF3YXkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBtZW1vcnkgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmdTdGFydCA9IHN0YXJ0
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyZSgg
bWVtb3J5ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBhIGNhbGxiYWNrIGZyb20gdGhlIGxpc3QKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlbW92ZTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggbGlzdCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuZWFjaCggYXJndW1lbnRzLCBmdW5jdGlvbiggXywgYXJnICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlu
ZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hp
bGUoICggaW5kZXggPSBqUXVlcnkuaW5BcnJheSggYXJnLCBsaXN0LCBpbmRleCApICkgPiAtMSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlzdC5zcGxpY2UoIGluZGV4LCAxICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlcworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGZpcmluZyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGluZGV4IDw9IGZpcmluZ0xlbmd0aCApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZpcmluZ0xlbmd0aC0tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGluZGV4IDw9
IGZpcmluZ0luZGV4ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyaW5nSW5kZXgtLTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBDb250cm9sIGlmIGEgZ2l2ZW4gY2FsbGJhY2sgaXMgaW4gdGhlIGxpc3QKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGhhczogZnVuY3Rpb24oIGZuICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBS
ZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0CisgICAgICAgICAgICAgICAgICAgICAg
ICBlbXB0eTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp
c3QgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGF2
ZSB0aGUgbGlzdCBkbyBub3RoaW5nIGFueW1vcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRp
c2FibGU6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0
ID0gc3RhY2sgPSBtZW1vcnkgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIElzIGl0IGRpc2FibGVkPworICAgICAgICAgICAgICAgICAgICAg
ICAgZGlzYWJsZWQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gIWxpc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gTG9jayB0aGUgbGlzdCBpbiBpdHMgY3VycmVudCBzdGF0ZQorICAgICAg
ICAgICAgICAgICAgICAgICAgbG9jazogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YWNrID0gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoICFtZW1vcnkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5kaXNhYmxlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXMgaXQgbG9j
a2VkPworICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VkOiBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFzdGFjazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsIGFsbCBjYWxsYmFj
a3Mgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgYXJndW1lbnRzCisgICAgICAgICAgICAgICAg
ICAgICAgICBmaXJlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzIHx8IFtdOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcmdzID0gWyBjb250ZXh0LCBhcmdzLnNsaWNlID8gYXJncy5zbGlj
ZSgpIDogYXJncyBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGxpc3Qg
JiYgKCAhZmlyZWQgfHwgc3RhY2sgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGZpcmluZyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goIGFyZ3MgKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmlyZSggYXJncyApOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsIGFsbCB0
aGUgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cworICAgICAgICAgICAgICAgICAg
ICAgICAgZmlyZTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuZmlyZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBUbyBrbm93IGlmIHRoZSBjYWxsYmFja3MgaGF2ZSBhbHJl
YWR5IGJlZW4gY2FsbGVkIGF0IGxlYXN0IG9uY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGZp
cmVkOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICEhZmlyZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfTsK
KworICAgICAgICByZXR1cm4gc2VsZjsKK307CitqUXVlcnkuZXh0ZW5kKHsKKworICAgICAgICBE
ZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7CisgICAgICAgICAgICAgICAgdmFyIHR1cGxlcyA9
IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWN0aW9uLCBhZGQgbGlzdGVu
ZXIsIGxpc3RlbmVyIGxpc3QsIGZpbmFsIHN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFsgInJlc29sdmUiLCAiZG9uZSIsIGpRdWVyeS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5
IiksICJyZXNvbHZlZCIgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyAicmVq
ZWN0IiwgImZhaWwiLCBqUXVlcnkuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCAicmVqZWN0ZWQi
IF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsgIm5vdGlmeSIsICJwcm9ncmVz
cyIsIGpRdWVyeS5DYWxsYmFja3MoIm1lbW9yeSIpIF0KKyAgICAgICAgICAgICAgICAgICAgICAg
IF0sCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICJwZW5kaW5nIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHByb21pc2UgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gc3RhdGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsd2F5czogZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQuZG9uZSggYXJn
dW1lbnRzICkuZmFpbCggYXJndW1lbnRzICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW46IGZ1bmN0aW9uKCAvKiBm
bkRvbmUsIGZuRmFpbCwgZm5Qcm9ncmVzcyAqLyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgZm5zID0gYXJndW1lbnRzOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuRGVmZXJyZWQoZnVuY3Rpb24oIG5l
d0RlZmVyICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWN0aW9u
ID0gdHVwbGVbIDAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmbiA9IGZuc1sgaSBdOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWZlcnJlZFsgZG9uZSB8
IGZhaWwgfCBwcm9ncmVzcyBdIGZvciBmb3J3YXJkaW5nIGFjdGlvbnMgdG8gbmV3RGVmZXIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
ZXJyZWRbIHR1cGxlWzFdIF0oIGpRdWVyeS5pc0Z1bmN0aW9uKCBmbiApID8KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXR1cm5lZCA9IGZuLmFwcGx5KCB0aGlzLCBh
cmd1bWVudHMgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0dXJuZWQgJiYgalF1ZXJ5LmlzRnVu
Y3Rpb24oIHJldHVybmVkLnByb21pc2UgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuZWQucHJvbWlzZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmRvbmUoIG5l
d0RlZmVyLnJlc29sdmUgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mYWlsKCBu
ZXdEZWZlci5yZWplY3QgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wcm9ncmVz
cyggbmV3RGVmZXIubm90aWZ5ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuZXdEZWZlclsgYWN0aW9uICsgIldpdGgiIF0oIHRoaXMgPT09IGRlZmVy
cmVkID8gbmV3RGVmZXIgOiB0aGlzLCBbIHJldHVybmVkIF0gKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuZXdEZWZlclsgYWN0aW9uIF0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm5zID0gbnVsbDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5wcm9taXNlKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdl
dCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSWYgb2JqIGlzIHByb3ZpZGVkLCB0aGUgcHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQg
dG8gdGhlIG9iamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlOiBm
dW5jdGlvbiggb2JqICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBvYmogIT0gbnVsbCA/IGpRdWVyeS5leHRlbmQoIG9iaiwgcHJvbWlzZSApIDogcHJv
bWlzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkID0ge307CisKKyAg
ICAgICAgICAgICAgICAvLyBLZWVwIHBpcGUgZm9yIGJhY2stY29tcGF0CisgICAgICAgICAgICAg
ICAgcHJvbWlzZS5waXBlID0gcHJvbWlzZS50aGVuOworCisgICAgICAgICAgICAgICAgLy8gQWRk
IGxpc3Qtc3BlY2lmaWMgbWV0aG9kcworICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCB0dXBs
ZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBs
aXN0ID0gdHVwbGVbIDIgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVT
dHJpbmcgPSB0dXBsZVsgMyBdOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9taXNl
WyBkb25lIHwgZmFpbCB8IHByb2dyZXNzIF0gPSBsaXN0LmFkZAorICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvbWlzZVsgdHVwbGVbMV0gXSA9IGxpc3QuYWRkOworCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBIYW5kbGUgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3Rh
dGVTdHJpbmcgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QuYWRkKGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0
YXRlID0gWyByZXNvbHZlZCB8IHJlamVjdGVkIF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlU3RyaW5nOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFsgcmVqZWN0X2xpc3QgfCByZXNvbHZlX2xpc3QgXS5kaXNhYmxlOyBw
cm9ncmVzc19saXN0LmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdHVw
bGVzWyBpIF4gMSBdWyAyIF0uZGlzYWJsZSwgdHVwbGVzWyAyIF1bIDIgXS5sb2NrICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmVy
cmVkWyByZXNvbHZlIHwgcmVqZWN0IHwgbm90aWZ5IF0gPSBsaXN0LmZpcmUKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmVycmVkWyB0dXBsZVswXSBdID0gbGlzdC5maXJlOworICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmZXJyZWRbIHR1cGxlWzBdICsgIldpdGgiIF0gPSBsaXN0LmZpcmVX
aXRoOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgLy8gTWFrZSB0aGUg
ZGVmZXJyZWQgYSBwcm9taXNlCisgICAgICAgICAgICAgICAgcHJvbWlzZS5wcm9taXNlKCBkZWZl
cnJlZCApOworCisgICAgICAgICAgICAgICAgLy8gQ2FsbCBnaXZlbiBmdW5jIGlmIGFueQorICAg
ICAgICAgICAgICAgIGlmICggZnVuYyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMu
Y2FsbCggZGVmZXJyZWQsIGRlZmVycmVkICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgLy8gQWxsIGRvbmUhCisgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkOwor
ICAgICAgICB9LAorCisgICAgICAgIC8vIERlZmVycmVkIGhlbHBlcgorICAgICAgICB3aGVuOiBm
dW5jdGlvbiggc3Vib3JkaW5hdGUgLyogLCAuLi4sIHN1Ym9yZGluYXRlTiAqLyApIHsKKyAgICAg
ICAgICAgICAgICB2YXIgaSA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlVmFs
dWVzID0gY29yZV9zbGljZS5jYWxsKCBhcmd1bWVudHMgKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxlbmd0aCA9IHJlc29sdmVWYWx1ZXMubGVuZ3RoLAorCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0aGUgY291bnQgb2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVzCisgICAgICAgICAg
ICAgICAgICAgICAgICByZW1haW5pbmcgPSBsZW5ndGggIT09IDEgfHwgKCBzdWJvcmRpbmF0ZSAm
JiBqUXVlcnkuaXNGdW5jdGlvbiggc3Vib3JkaW5hdGUucHJvbWlzZSApICkgPyBsZW5ndGggOiAw
LAorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbWFzdGVyIERlZmVycmVkLiBJZiBy
ZXNvbHZlVmFsdWVzIGNvbnNpc3Qgb2Ygb25seSBhIHNpbmdsZSBEZWZlcnJlZCwganVzdCB1c2Ug
dGhhdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkID0gcmVtYWluaW5nID09PSAx
ID8gc3Vib3JkaW5hdGUgOiBqUXVlcnkuRGVmZXJyZWQoKSwKKworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gVXBkYXRlIGZ1bmN0aW9uIGZvciBib3RoIHJlc29sdmUgYW5kIHByb2dyZXNzIHZh
bHVlcworICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlRnVuYyA9IGZ1bmN0aW9uKCBpLCBj
b250ZXh0cywgdmFsdWVzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHRzWyBpIF0gPSB0aGlzOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlc1sgaSBdID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBjb3JlX3Ns
aWNlLmNhbGwoIGFyZ3VtZW50cyApIDogdmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYoIHZhbHVlcyA9PT0gcHJvZ3Jlc3NWYWx1ZXMgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5ub3RpZnlX
aXRoKCBjb250ZXh0cywgdmFsdWVzICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICggISggLS1yZW1haW5pbmcgKSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBj
b250ZXh0cywgdmFsdWVzICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NWYWx1ZXMsIHBy
b2dyZXNzQ29udGV4dHMsIHJlc29sdmVDb250ZXh0czsKKworICAgICAgICAgICAgICAgIC8vIGFk
ZCBsaXN0ZW5lcnMgdG8gRGVmZXJyZWQgc3Vib3JkaW5hdGVzOyB0cmVhdCBvdGhlcnMgYXMgcmVz
b2x2ZWQKKyAgICAgICAgICAgICAgICBpZiAoIGxlbmd0aCA+IDEgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBwcm9ncmVzc1ZhbHVlcyA9IG5ldyBBcnJheSggbGVuZ3RoICk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwcm9ncmVzc0NvbnRleHRzID0gbmV3IEFycmF5KCBsZW5ndGggKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVDb250ZXh0cyA9IG5ldyBBcnJheSggbGVu
Z3RoICk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXNvbHZlVmFsdWVzWyBp
IF0gJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHJlc29sdmVWYWx1ZXNbIGkgXS5wcm9taXNlICkgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZVZhbHVlc1sg
aSBdLnByb21pc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLmRvbmUoIHVwZGF0ZUZ1bmMoIGksIHJlc29sdmVDb250ZXh0cywgcmVzb2x2ZVZhbHVl
cyApICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5m
YWlsKCBkZWZlcnJlZC5yZWplY3QgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLnByb2dyZXNzKCB1cGRhdGVGdW5jKCBpLCBwcm9ncmVzc0NvbnRleHRz
LCBwcm9ncmVzc1ZhbHVlcyApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1yZW1haW5p
bmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBpZiB3ZSdy
ZSBub3Qgd2FpdGluZyBvbiBhbnl0aGluZywgcmVzb2x2ZSB0aGUgbWFzdGVyCisgICAgICAgICAg
ICAgICAgaWYgKCAhcmVtYWluaW5nICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJy
ZWQucmVzb2x2ZVdpdGgoIHJlc29sdmVDb250ZXh0cywgcmVzb2x2ZVZhbHVlcyApOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZC5wcm9taXNlKCk7
CisgICAgICAgIH0KK30pOworalF1ZXJ5LnN1cHBvcnQgPSAoZnVuY3Rpb24oKSB7CisKKyAgICAg
ICAgdmFyIHN1cHBvcnQsCisgICAgICAgICAgICAgICAgYWxsLAorICAgICAgICAgICAgICAgIGEs
CisgICAgICAgICAgICAgICAgc2VsZWN0LAorICAgICAgICAgICAgICAgIG9wdCwKKyAgICAgICAg
ICAgICAgICBpbnB1dCwKKyAgICAgICAgICAgICAgICBmcmFnbWVudCwKKyAgICAgICAgICAgICAg
ICBldmVudE5hbWUsCisgICAgICAgICAgICAgICAgaSwKKyAgICAgICAgICAgICAgICBpc1N1cHBv
cnRlZCwKKyAgICAgICAgICAgICAgICBjbGlja0ZuLAorICAgICAgICAgICAgICAgIGRpdiA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworCisgICAgICAgIC8vIFNldHVwCisgICAgICAg
IGRpdi5zZXRBdHRyaWJ1dGUoICJjbGFzc05hbWUiLCAidCIgKTsKKyAgICAgICAgZGl2LmlubmVy
SFRNTCA9ICIgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPScvYSc+YTwvYT48aW5wdXQg
dHlwZT0nY2hlY2tib3gnLz4iOworCisgICAgICAgIC8vIFN1cHBvcnQgdGVzdHMgd29uJ3QgcnVu
IGluIHNvbWUgbGltaXRlZCBvciBub24tYnJvd3NlciBlbnZpcm9ubWVudHMKKyAgICAgICAgYWxs
ID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7CisgICAgICAgIGEgPSBkaXYuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoImEiKVsgMCBdOworICAgICAgICBpZiAoICFhbGwgfHwgIWEgfHwgIWFs
bC5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHt9OworICAgICAgICB9CisKKyAg
ICAgICAgLy8gRmlyc3QgYmF0Y2ggb2YgdGVzdHMKKyAgICAgICAgc2VsZWN0ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgic2VsZWN0Iik7CisgICAgICAgIG9wdCA9IHNlbGVjdC5hcHBlbmRDaGls
ZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIikgKTsKKyAgICAgICAgaW5wdXQgPSBk
aXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbIDAgXTsKKworICAgICAgICBhLnN0eWxl
LmNzc1RleHQgPSAidG9wOjFweDtmbG9hdDpsZWZ0O29wYWNpdHk6LjUiOworICAgICAgICBzdXBw
b3J0ID0geworICAgICAgICAgICAgICAgIC8vIElFIHN0cmlwcyBsZWFkaW5nIHdoaXRlc3BhY2Ug
d2hlbiAuaW5uZXJIVE1MIGlzIHVzZWQKKyAgICAgICAgICAgICAgICBsZWFkaW5nV2hpdGVzcGFj
ZTogKCBkaXYuZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gMyApLAorCisgICAgICAgICAgICAgICAg
Ly8gTWFrZSBzdXJlIHRoYXQgdGJvZHkgZWxlbWVudHMgYXJlbid0IGF1dG9tYXRpY2FsbHkgaW5z
ZXJ0ZWQKKyAgICAgICAgICAgICAgICAvLyBJRSB3aWxsIGluc2VydCB0aGVtIGludG8gZW1wdHkg
dGFibGVzCisgICAgICAgICAgICAgICAgdGJvZHk6ICFkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
InRib2R5IikubGVuZ3RoLAorCisgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbGlu
ayBlbGVtZW50cyBnZXQgc2VyaWFsaXplZCBjb3JyZWN0bHkgYnkgaW5uZXJIVE1MCisgICAgICAg
ICAgICAgICAgLy8gVGhpcyByZXF1aXJlcyBhIHdyYXBwZXIgZWxlbWVudCBpbiBJRQorICAgICAg
ICAgICAgICAgIGh0bWxTZXJpYWxpemU6ICEhZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsaW5r
IikubGVuZ3RoLAorCisgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBzdHlsZSBpbmZvcm1hdGlv
biBmcm9tIGdldEF0dHJpYnV0ZQorICAgICAgICAgICAgICAgIC8vIChJRSB1c2VzIC5jc3NUZXh0
IGluc3RlYWQpCisgICAgICAgICAgICAgICAgc3R5bGU6IC90b3AvLnRlc3QoIGEuZ2V0QXR0cmli
dXRlKCJzdHlsZSIpICksCisKKyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBVUkxz
IGFyZW4ndCBtYW5pcHVsYXRlZAorICAgICAgICAgICAgICAgIC8vIChJRSBub3JtYWxpemVzIGl0
IGJ5IGRlZmF1bHQpCisgICAgICAgICAgICAgICAgaHJlZk5vcm1hbGl6ZWQ6ICggYS5nZXRBdHRy
aWJ1dGUoImhyZWYiKSA9PT0gIi9hIiApLAorCisgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJl
IHRoYXQgZWxlbWVudCBvcGFjaXR5IGV4aXN0cworICAgICAgICAgICAgICAgIC8vIChJRSB1c2Vz
IGZpbHRlciBpbnN0ZWFkKQorICAgICAgICAgICAgICAgIC8vIFVzZSBhIHJlZ2V4IHRvIHdvcmsg
YXJvdW5kIGEgV2ViS2l0IGlzc3VlLiBTZWUgIzUxNDUKKyAgICAgICAgICAgICAgICBvcGFjaXR5
OiAvXjAuNS8udGVzdCggYS5zdHlsZS5vcGFjaXR5ICksCisKKyAgICAgICAgICAgICAgICAvLyBW
ZXJpZnkgc3R5bGUgZmxvYXQgZXhpc3RlbmNlCisgICAgICAgICAgICAgICAgLy8gKElFIHVzZXMg
c3R5bGVGbG9hdCBpbnN0ZWFkIG9mIGNzc0Zsb2F0KQorICAgICAgICAgICAgICAgIGNzc0Zsb2F0
OiAhIWEuc3R5bGUuY3NzRmxvYXQsCisKKyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhh
dCBpZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQgZm9yIGEgY2hlY2tib3gKKyAgICAgICAgICAgICAg
ICAvLyB0aGF0IGl0IGRlZmF1bHRzIHRvICJvbiIuCisgICAgICAgICAgICAgICAgLy8gKFdlYktp
dCBkZWZhdWx0cyB0byAiIiBpbnN0ZWFkKQorICAgICAgICAgICAgICAgIGNoZWNrT246ICggaW5w
dXQudmFsdWUgPT09ICJvbiIgKSwKKworICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IGEgc2VsZWN0ZWQtYnktZGVmYXVsdCBvcHRpb24gaGFzIGEgd29ya2luZyBzZWxlY3RlZCBwcm9w
ZXJ0eS4KKyAgICAgICAgICAgICAgICAvLyAoV2ViS2l0IGRlZmF1bHRzIHRvIGZhbHNlIGluc3Rl
YWQgb2YgdHJ1ZSwgSUUgdG9vLCBpZiBpdCdzIGluIGFuIG9wdGdyb3VwKQorICAgICAgICAgICAg
ICAgIG9wdFNlbGVjdGVkOiBvcHQuc2VsZWN0ZWQsCisKKyAgICAgICAgICAgICAgICAvLyBUZXN0
IHNldEF0dHJpYnV0ZSBvbiBjYW1lbENhc2UgY2xhc3MuIElmIGl0IHdvcmtzLCB3ZSBuZWVkIGF0
dHJGaXhlcyB3aGVuIGRvaW5nIGdldC9zZXRBdHRyaWJ1dGUgKGllNi83KQorICAgICAgICAgICAg
ICAgIGdldFNldEF0dHJpYnV0ZTogZGl2LmNsYXNzTmFtZSAhPT0gInQiLAorCisgICAgICAgICAg
ICAgICAgLy8gVGVzdHMgZm9yIGVuY3R5cGUgc3VwcG9ydCBvbiBhIGZvcm0gKCM2NzQzKQorICAg
ICAgICAgICAgICAgIGVuY3R5cGU6ICEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZm9ybSIpLmVu
Y3R5cGUsCisKKyAgICAgICAgICAgICAgICAvLyBNYWtlcyBzdXJlIGNsb25pbmcgYW4gaHRtbDUg
ZWxlbWVudCBkb2VzIG5vdCBjYXVzZSBwcm9ibGVtcworICAgICAgICAgICAgICAgIC8vIFdoZXJl
IG91dGVySFRNTCBpcyB1bmRlZmluZWQsIHRoaXMgc3RpbGwgd29ya3MKKyAgICAgICAgICAgICAg
ICBodG1sNUNsb25lOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJuYXYiKS5jbG9uZU5vZGUoIHRy
dWUgKS5vdXRlckhUTUwgIT09ICI8Om5hdj48LzpuYXY+IiwKKworICAgICAgICAgICAgICAgIC8v
IGpRdWVyeS5zdXBwb3J0LmJveE1vZGVsIERFUFJFQ0FURUQgaW4gMS44IHNpbmNlIHdlIGRvbid0
IHN1cHBvcnQgUXVpcmtzIE1vZGUKKyAgICAgICAgICAgICAgICBib3hNb2RlbDogKCBkb2N1bWVu
dC5jb21wYXRNb2RlID09PSAiQ1NTMUNvbXBhdCIgKSwKKworICAgICAgICAgICAgICAgIC8vIFdp
bGwgYmUgZGVmaW5lZCBsYXRlcgorICAgICAgICAgICAgICAgIHN1Ym1pdEJ1YmJsZXM6IHRydWUs
CisgICAgICAgICAgICAgICAgY2hhbmdlQnViYmxlczogdHJ1ZSwKKyAgICAgICAgICAgICAgICBm
b2N1c2luQnViYmxlczogZmFsc2UsCisgICAgICAgICAgICAgICAgZGVsZXRlRXhwYW5kbzogdHJ1
ZSwKKyAgICAgICAgICAgICAgICBub0Nsb25lRXZlbnQ6IHRydWUsCisgICAgICAgICAgICAgICAg
aW5saW5lQmxvY2tOZWVkc0xheW91dDogZmFsc2UsCisgICAgICAgICAgICAgICAgc2hyaW5rV3Jh
cEJsb2NrczogZmFsc2UsCisgICAgICAgICAgICAgICAgcmVsaWFibGVNYXJnaW5SaWdodDogdHJ1
ZSwKKyAgICAgICAgICAgICAgICBib3hTaXppbmdSZWxpYWJsZTogdHJ1ZSwKKyAgICAgICAgICAg
ICAgICBwaXhlbFBvc2l0aW9uOiBmYWxzZQorICAgICAgICB9OworCisgICAgICAgIC8vIE1ha2Ug
c3VyZSBjaGVja2VkIHN0YXR1cyBpcyBwcm9wZXJseSBjbG9uZWQKKyAgICAgICAgaW5wdXQuY2hl
Y2tlZCA9IHRydWU7CisgICAgICAgIHN1cHBvcnQubm9DbG9uZUNoZWNrZWQgPSBpbnB1dC5jbG9u
ZU5vZGUoIHRydWUgKS5jaGVja2VkOworCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBv
cHRpb25zIGluc2lkZSBkaXNhYmxlZCBzZWxlY3RzIGFyZW4ndCBtYXJrZWQgYXMgZGlzYWJsZWQK
KyAgICAgICAgLy8gKFdlYktpdCBtYXJrcyB0aGVtIGFzIGRpc2FibGVkKQorICAgICAgICBzZWxl
Y3QuZGlzYWJsZWQgPSB0cnVlOworICAgICAgICBzdXBwb3J0Lm9wdERpc2FibGVkID0gIW9wdC5k
aXNhYmxlZDsKKworICAgICAgICAvLyBUZXN0IHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGRl
bGV0ZSBhbiBleHBhbmRvIGZyb20gYW4gZWxlbWVudAorICAgICAgICAvLyBGYWlscyBpbiBJbnRl
cm5ldCBFeHBsb3JlcgorICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBkaXYu
dGVzdDsKKyAgICAgICAgfSBjYXRjaCggZSApIHsKKyAgICAgICAgICAgICAgICBzdXBwb3J0LmRl
bGV0ZUV4cGFuZG8gPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggIWRpdi5hZGRF
dmVudExpc3RlbmVyICYmIGRpdi5hdHRhY2hFdmVudCAmJiBkaXYuZmlyZUV2ZW50ICkgeworICAg
ICAgICAgICAgICAgIGRpdi5hdHRhY2hFdmVudCggIm9uY2xpY2siLCBjbGlja0ZuID0gZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDbG9uaW5nIGEgbm9kZSBzaG91bGRu
J3QgY29weSBvdmVyIGFueQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYm91bmQgZXZlbnQg
aGFuZGxlcnMgKElFIGRvZXMgdGhpcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQu
bm9DbG9uZUV2ZW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgZGl2LmNsb25lTm9kZSggdHJ1ZSApLmZpcmVFdmVudCgib25jbGljayIpOworICAgICAgICAg
ICAgICAgIGRpdi5kZXRhY2hFdmVudCggIm9uY2xpY2siLCBjbGlja0ZuICk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBDaGVjayBpZiBhIHJhZGlvIG1haW50YWlucyBpdHMgdmFsdWUKKyAgICAg
ICAgLy8gYWZ0ZXIgYmVpbmcgYXBwZW5kZWQgdG8gdGhlIERPTQorICAgICAgICBpbnB1dCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CisgICAgICAgIGlucHV0LnZhbHVlID0gInQi
OworICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoICJ0eXBlIiwgInJhZGlvIiApOworICAgICAg
ICBzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gInQiOworCisgICAgICAgIGlu
cHV0LnNldEF0dHJpYnV0ZSggImNoZWNrZWQiLCAiY2hlY2tlZCIgKTsKKworICAgICAgICAvLyAj
MTEyMTcgLSBXZWJLaXQgbG9zZXMgY2hlY2sgd2hlbiB0aGUgbmFtZSBpcyBhZnRlciB0aGUgY2hl
Y2tlZCBhdHRyaWJ1dGUKKyAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCAibmFtZSIsICJ0IiAp
OworCisgICAgICAgIGRpdi5hcHBlbmRDaGlsZCggaW5wdXQgKTsKKyAgICAgICAgZnJhZ21lbnQg
PSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgICAgICAgIGZyYWdtZW50LmFw
cGVuZENoaWxkKCBkaXYubGFzdENoaWxkICk7CisKKyAgICAgICAgLy8gV2ViS2l0IGRvZXNuJ3Qg
Y2xvbmUgY2hlY2tlZCBzdGF0ZSBjb3JyZWN0bHkgaW4gZnJhZ21lbnRzCisgICAgICAgIHN1cHBv
cnQuY2hlY2tDbG9uZSA9IGZyYWdtZW50LmNsb25lTm9kZSggdHJ1ZSApLmNsb25lTm9kZSggdHJ1
ZSApLmxhc3RDaGlsZC5jaGVja2VkOworCisgICAgICAgIC8vIENoZWNrIGlmIGEgZGlzY29ubmVj
dGVkIGNoZWNrYm94IHdpbGwgcmV0YWluIGl0cyBjaGVja2VkCisgICAgICAgIC8vIHZhbHVlIG9m
IHRydWUgYWZ0ZXIgYXBwZW5kZWQgdG8gdGhlIERPTSAoSUU2LzcpCisgICAgICAgIHN1cHBvcnQu
YXBwZW5kQ2hlY2tlZCA9IGlucHV0LmNoZWNrZWQ7CisKKyAgICAgICAgZnJhZ21lbnQucmVtb3Zl
Q2hpbGQoIGlucHV0ICk7CisgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKCBkaXYgKTsKKwor
ICAgICAgICAvLyBUZWNobmlxdWUgZnJvbSBKdXJpeSBaYXl0c2V2CisgICAgICAgIC8vIGh0dHA6
Ly9wZXJmZWN0aW9ua2lsbHMuY29tL2RldGVjdGluZy1ldmVudC1zdXBwb3J0LXdpdGhvdXQtYnJv
d3Nlci1zbmlmZmluZy8KKyAgICAgICAgLy8gV2Ugb25seSBjYXJlIGFib3V0IHRoZSBjYXNlIHdo
ZXJlIG5vbi1zdGFuZGFyZCBldmVudCBzeXN0ZW1zCisgICAgICAgIC8vIGFyZSB1c2VkLCBuYW1l
bHkgaW4gSUUuIFNob3J0LWNpcmN1aXRpbmcgaGVyZSBoZWxwcyB1cyB0bworICAgICAgICAvLyBh
dm9pZCBhbiBldmFsIGNhbGwgKGluIHNldEF0dHJpYnV0ZSkgd2hpY2ggY2FuIGNhdXNlIENTUAor
ICAgICAgICAvLyB0byBnbyBoYXl3aXJlLiBTZWU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEu
b3JnL2VuL1NlY3VyaXR5L0NTUAorICAgICAgICBpZiAoIGRpdi5hdHRhY2hFdmVudCApIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKCBpIGluIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1p
dDogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogdHJ1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZvY3VzaW46IHRydWUKKyAgICAgICAgICAgICAgICB9KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBldmVudE5hbWUgPSAib24iICsgaTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlzU3VwcG9ydGVkID0gKCBldmVudE5hbWUgaW4gZGl2ICk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoICFpc1N1cHBvcnRlZCApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSggZXZlbnROYW1lLCAicmV0dXJuOyIgKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTdXBwb3J0ZWQgPSAoIHR5cGVvZiBkaXZb
IGV2ZW50TmFtZSBdID09PSAiZnVuY3Rpb24iICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0WyBpICsgIkJ1YmJsZXMiIF0gPSBpc1N1
cHBvcnRlZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBSdW4g
dGVzdHMgdGhhdCBuZWVkIGEgYm9keSBhdCBkb2MgcmVhZHkKKyAgICAgICAgalF1ZXJ5KGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIsIGRpdiwgdGRzLCBtYXJnaW5E
aXYsCisgICAgICAgICAgICAgICAgICAgICAgICBkaXZSZXNldCA9ICJwYWRkaW5nOjA7bWFyZ2lu
OjA7Ym9yZGVyOjA7ZGlzcGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW47IiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIp
WzBdOworCisgICAgICAgICAgICAgICAgaWYgKCAhYm9keSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFJldHVybiBmb3IgZnJhbWVzZXQgZG9jcyB0aGF0IGRvbid0IGhhdmUgYSBib2R5
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7
CisgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSAidmlzaWJpbGl0eTpo
aWRkZW47Ym9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDtwb3NpdGlvbjpzdGF0aWM7dG9wOjA7bWFy
Z2luLXRvcDoxcHgiOworICAgICAgICAgICAgICAgIGJvZHkuaW5zZXJ0QmVmb3JlKCBjb250YWlu
ZXIsIGJvZHkuZmlyc3RDaGlsZCApOworCisgICAgICAgICAgICAgICAgLy8gQ29uc3RydWN0IHRo
ZSB0ZXN0IGVsZW1lbnQKKyAgICAgICAgICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKKyAgICAgICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoIGRpdiAp
OworCisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGFibGUgY2VsbHMgc3RpbGwgaGF2ZSBv
ZmZzZXRXaWR0aC9IZWlnaHQgd2hlbiB0aGV5IGFyZSBzZXQKKyAgICAgICAgICAgICAgICAvLyB0
byBkaXNwbGF5Om5vbmUgYW5kIHRoZXJlIGFyZSBzdGlsbCBvdGhlciB2aXNpYmxlIHRhYmxlIGNl
bGxzIGluIGEKKyAgICAgICAgICAgICAgICAvLyB0YWJsZSByb3c7IGlmIHNvLCBvZmZzZXRXaWR0
aC9IZWlnaHQgYXJlIG5vdCByZWxpYWJsZSBmb3IgdXNlIHdoZW4KKyAgICAgICAgICAgICAgICAv
LyBkZXRlcm1pbmluZyBpZiBhbiBlbGVtZW50IGhhcyBiZWVuIGhpZGRlbiBkaXJlY3RseSB1c2lu
ZworICAgICAgICAgICAgICAgIC8vIGRpc3BsYXk6bm9uZSAoaXQgaXMgc3RpbGwgc2FmZSB0byB1
c2Ugb2Zmc2V0cyBpZiBhIHBhcmVudCBlbGVtZW50IGlzCisgICAgICAgICAgICAgICAgLy8gaGlk
ZGVuOyBkb24gc2FmZXR5IGdvZ2dsZXMgYW5kIHNlZSBidWcgIzQ1MTIgZm9yIG1vcmUgaW5mb3Jt
YXRpb24pLgorICAgICAgICAgICAgICAgIC8vIChvbmx5IElFIDggZmFpbHMgdGhpcyB0ZXN0KQor
ICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPHRhYmxlPjx0cj48dGQ+PC90ZD48dGQ+
dDwvdGQ+PC90cj48L3RhYmxlPiI7CisgICAgICAgICAgICAgICAgdGRzID0gZGl2LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCJ0ZCIpOworICAgICAgICAgICAgICAgIHRkc1sgMCBdLnN0eWxlLmNzc1Rl
eHQgPSAicGFkZGluZzowO21hcmdpbjowO2JvcmRlcjowO2Rpc3BsYXk6bm9uZSI7CisgICAgICAg
ICAgICAgICAgaXNTdXBwb3J0ZWQgPSAoIHRkc1sgMCBdLm9mZnNldEhlaWdodCA9PT0gMCApOwor
CisgICAgICAgICAgICAgICAgdGRzWyAwIF0uc3R5bGUuZGlzcGxheSA9ICIiOworICAgICAgICAg
ICAgICAgIHRkc1sgMSBdLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisKKyAgICAgICAgICAgICAg
ICAvLyBDaGVjayBpZiBlbXB0eSB0YWJsZSBjZWxscyBzdGlsbCBoYXZlIG9mZnNldFdpZHRoL0hl
aWdodAorICAgICAgICAgICAgICAgIC8vIChJRSA8PSA4IGZhaWwgdGhpcyB0ZXN0KQorICAgICAg
ICAgICAgICAgIHN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzID0gaXNTdXBwb3J0ZWQgJiYg
KCB0ZHNbIDAgXS5vZmZzZXRIZWlnaHQgPT09IDAgKTsKKworICAgICAgICAgICAgICAgIC8vIENo
ZWNrIGJveC1zaXppbmcgYW5kIG1hcmdpbiBiZWhhdmlvcgorICAgICAgICAgICAgICAgIGRpdi5p
bm5lckhUTUwgPSAiIjsKKyAgICAgICAgICAgICAgICBkaXYuc3R5bGUuY3NzVGV4dCA9ICJib3gt
c2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtpdC1ib3gt
c2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoxcHg7Ym9yZGVyOjFweDtkaXNwbGF5OmJsb2NrO3dp
ZHRoOjRweDttYXJnaW4tdG9wOjElO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxJTsiOworICAgICAg
ICAgICAgICAgIHN1cHBvcnQuYm94U2l6aW5nID0gKCBkaXYub2Zmc2V0V2lkdGggPT09IDQgKTsK
KyAgICAgICAgICAgICAgICBzdXBwb3J0LmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0
ID0gKCBib2R5Lm9mZnNldFRvcCAhPT0gMSApOworCisgICAgICAgICAgICAgICAgLy8gTk9URTog
VG8gYW55IGZ1dHVyZSBtYWludGFpbmVyLCB3ZSd2ZSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZQor
ICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UganNkb20gb24gbm9kZS5qcyB3aWxsIGJyZWFrIHdp
dGhvdXQgaXQuCisgICAgICAgICAgICAgICAgaWYgKCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQucGl4ZWxQb3NpdGlvbiA9ICggd2lu
ZG93LmdldENvbXB1dGVkU3R5bGUoIGRpdiwgbnVsbCApIHx8IHt9ICkudG9wICE9PSAiMSUiOwor
ICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSA9ICggd2lu
ZG93LmdldENvbXB1dGVkU3R5bGUoIGRpdiwgbnVsbCApIHx8IHsgd2lkdGg6ICI0cHgiIH0gKS53
aWR0aCA9PT0gIjRweCI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGRp
diB3aXRoIGV4cGxpY2l0IHdpZHRoIGFuZCBubyBtYXJnaW4tcmlnaHQgaW5jb3JyZWN0bHkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGdldHMgY29tcHV0ZWQgbWFyZ2luLXJpZ2h0IGJhc2Vk
IG9uIHdpZHRoIG9mIGNvbnRhaW5lci4gRm9yIG1vcmUKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGluZm8gc2VlIGJ1ZyAjMzMzMworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmFpbHMg
aW4gV2ViS2l0IGJlZm9yZSBGZWIgMjAxMSBuaWdodGxpZXMKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFdlYktpdCBCdWcgMTMzNDMgLSBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgd3Jvbmcg
dmFsdWUgZm9yIG1hcmdpbi1yaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luRGl2
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtYXJnaW5EaXYuc3R5bGUuY3NzVGV4dCA9IGRpdi5zdHlsZS5jc3NUZXh0ID0gZGl2UmVzZXQ7
CisgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5EaXYuc3R5bGUubWFyZ2luUmlnaHQgPSBt
YXJnaW5EaXYuc3R5bGUud2lkdGggPSAiMCI7CisgICAgICAgICAgICAgICAgICAgICAgICBkaXYu
c3R5bGUud2lkdGggPSAiMXB4IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5hcHBlbmRD
aGlsZCggbWFyZ2luRGl2ICk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LnJlbGlh
YmxlTWFyZ2luUmlnaHQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcGFyc2VG
bG9hdCggKCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggbWFyZ2luRGl2LCBudWxsICkgfHwge30g
KS5tYXJnaW5SaWdodCApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlm
ICggdHlwZW9mIGRpdi5zdHlsZS56b29tICE9PSAidW5kZWZpbmVkIiApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIENoZWNrIGlmIG5hdGl2ZWx5IGJsb2NrLWxldmVsIGVsZW1lbnRzIGFj
dCBsaWtlIGlubGluZS1ibG9jaworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxlbWVudHMg
d2hlbiBzZXR0aW5nIHRoZWlyIGRpc3BsYXkgdG8gJ2lubGluZScgYW5kIGdpdmluZworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdGhlbSBsYXlvdXQKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIChJRSA8IDggZG9lcyB0aGlzKQorICAgICAgICAgICAgICAgICAgICAgICAgZGl2LmlubmVy
SFRNTCA9ICIiOworICAgICAgICAgICAgICAgICAgICAgICAgZGl2LnN0eWxlLmNzc1RleHQgPSBk
aXZSZXNldCArICJ3aWR0aDoxcHg7cGFkZGluZzoxcHg7ZGlzcGxheTppbmxpbmU7em9vbToxIjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dCA9
ICggZGl2Lm9mZnNldFdpZHRoID09PSAzICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IENoZWNrIGlmIGVsZW1lbnRzIHdpdGggbGF5b3V0IHNocmluay13cmFwIHRoZWlyIGNoaWxkcmVu
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAoSUUgNiBkb2VzIHRoaXMpCisgICAgICAgICAg
ICAgICAgICAgICAgICBkaXYuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkaXYuc3R5bGUub3ZlcmZsb3cgPSAidmlzaWJsZSI7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjxkaXY+PC9kaXY+IjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRpdi5maXJzdENoaWxkLnN0eWxlLndpZHRoID0gIjVweCI7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzdXBwb3J0LnNocmlua1dyYXBCbG9ja3MgPSAoIGRpdi5vZmZzZXRXaWR0
aCAhPT0gMyApOworCisgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUuem9v
bSA9IDE7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gTnVsbCBlbGVt
ZW50cyB0byBhdm9pZCBsZWFrcyBpbiBJRQorICAgICAgICAgICAgICAgIGJvZHkucmVtb3ZlQ2hp
bGQoIGNvbnRhaW5lciApOworICAgICAgICAgICAgICAgIGNvbnRhaW5lciA9IGRpdiA9IHRkcyA9
IG1hcmdpbkRpdiA9IG51bGw7CisgICAgICAgIH0pOworCisgICAgICAgIC8vIE51bGwgZWxlbWVu
dHMgdG8gYXZvaWQgbGVha3MgaW4gSUUKKyAgICAgICAgZnJhZ21lbnQucmVtb3ZlQ2hpbGQoIGRp
diApOworICAgICAgICBhbGwgPSBhID0gc2VsZWN0ID0gb3B0ID0gaW5wdXQgPSBmcmFnbWVudCA9
IGRpdiA9IG51bGw7CisKKyAgICAgICAgcmV0dXJuIHN1cHBvcnQ7Cit9KSgpOwordmFyIHJicmFj
ZSA9IC8oPzpce1tcc1xTXSpcfXxcW1tcc1xTXSpcXSkkLywKKyAgICAgICAgcm11bHRpRGFzaCA9
IC8oW0EtWl0pL2c7CisKK2pRdWVyeS5leHRlbmQoeworICAgICAgICBjYWNoZToge30sCisKKyAg
ICAgICAgZGVsZXRlZElkczogW10sCisKKyAgICAgICAgLy8gUmVtb3ZlIGF0IG5leHQgbWFqb3Ig
cmVsZWFzZSAoMS45LzIuMCkKKyAgICAgICAgdXVpZDogMCwKKworICAgICAgICAvLyBVbmlxdWUg
Zm9yIGVhY2ggY29weSBvZiBqUXVlcnkgb24gdGhlIHBhZ2UKKyAgICAgICAgLy8gTm9uLWRpZ2l0
cyByZW1vdmVkIHRvIG1hdGNoIHJpbmxpbmVqUXVlcnkKKyAgICAgICAgZXhwYW5kbzogImpRdWVy
eSIgKyAoIGpRdWVyeS5mbi5qcXVlcnkgKyBNYXRoLnJhbmRvbSgpICkucmVwbGFjZSggL1xEL2cs
ICIiICksCisKKyAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBlbGVtZW50cyB0aHJvdyB1bmNhdGNo
YWJsZSBleGNlcHRpb25zIGlmIHlvdQorICAgICAgICAvLyBhdHRlbXB0IHRvIGFkZCBleHBhbmRv
IHByb3BlcnRpZXMgdG8gdGhlbS4KKyAgICAgICAgbm9EYXRhOiB7CisgICAgICAgICAgICAgICAg
ImVtYmVkIjogdHJ1ZSwKKyAgICAgICAgICAgICAgICAvLyBCYW4gYWxsIG9iamVjdHMgZXhjZXB0
IGZvciBGbGFzaCAod2hpY2ggaGFuZGxlIGV4cGFuZG9zKQorICAgICAgICAgICAgICAgICJvYmpl
Y3QiOiAiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIiwKKyAgICAg
ICAgICAgICAgICAiYXBwbGV0IjogdHJ1ZQorICAgICAgICB9LAorCisgICAgICAgIGhhc0RhdGE6
IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtLm5vZGVUeXBl
ID8galF1ZXJ5LmNhY2hlWyBlbGVtW2pRdWVyeS5leHBhbmRvXSBdIDogZWxlbVsgalF1ZXJ5LmV4
cGFuZG8gXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gISFlbGVtICYmICFpc0VtcHR5RGF0YU9i
amVjdCggZWxlbSApOworICAgICAgICB9LAorCisgICAgICAgIGRhdGE6IGZ1bmN0aW9uKCBlbGVt
LCBuYW1lLCBkYXRhLCBwdnQgLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCAhalF1ZXJ5LmFjY2VwdERhdGEoIGVsZW0gKSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2
YXIgdGhpc0NhY2hlLCByZXQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbEtleSA9
IGpRdWVyeS5leHBhbmRvLAorICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QnlOYW1lID0gdHlw
ZW9mIG5hbWUgPT09ICJzdHJpbmciLAorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBo
YXZlIHRvIGhhbmRsZSBET00gbm9kZXMgYW5kIEpTIG9iamVjdHMgZGlmZmVyZW50bHkgYmVjYXVz
ZSBJRTYtNworICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuJ3QgR0Mgb2JqZWN0IHJlZmVy
ZW5jZXMgcHJvcGVybHkgYWNyb3NzIHRoZSBET00tSlMgYm91bmRhcnkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlzTm9kZSA9IGVsZW0ubm9kZVR5cGUsCisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIE9ubHkgRE9NIG5vZGVzIG5lZWQgdGhlIGdsb2JhbCBqUXVlcnkgY2FjaGU7IEpTIG9i
amVjdCBkYXRhIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdHRhY2hlZCBkaXJlY3Rs
eSB0byB0aGUgb2JqZWN0IHNvIEdDIGNhbiBvY2N1ciBhdXRvbWF0aWNhbGx5CisgICAgICAgICAg
ICAgICAgICAgICAgICBjYWNoZSA9IGlzTm9kZSA/IGpRdWVyeS5jYWNoZSA6IGVsZW0sCisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgZGVmaW5pbmcgYW4gSUQgZm9yIEpTIG9iamVj
dHMgaWYgaXRzIGNhY2hlIGFscmVhZHkgZXhpc3RzIGFsbG93cworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gdGhlIGNvZGUgdG8gc2hvcnRjdXQgb24gdGhlIHNhbWUgcGF0aCBhcyBhIERPTSBu
b2RlIHdpdGggbm8gY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gaXNOb2RlID8g
ZWxlbVsgaW50ZXJuYWxLZXkgXSA6IGVsZW1bIGludGVybmFsS2V5IF0gJiYgaW50ZXJuYWxLZXk7
CisKKyAgICAgICAgICAgICAgICAvLyBBdm9pZCBkb2luZyBhbnkgbW9yZSB3b3JrIHRoYW4gd2Ug
bmVlZCB0byB3aGVuIHRyeWluZyB0byBnZXQgZGF0YSBvbiBhbgorICAgICAgICAgICAgICAgIC8v
IG9iamVjdCB0aGF0IGhhcyBubyBkYXRhIGF0IGFsbAorICAgICAgICAgICAgICAgIGlmICggKCFp
ZCB8fCAhY2FjaGVbaWRdIHx8ICghcHZ0ICYmICFjYWNoZVtpZF0uZGF0YSkpICYmIGdldEJ5TmFt
ZSAmJiBkYXRhID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCAhaWQgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IERPTSBub2RlcyBuZWVkIGEgbmV3IHVuaXF1
ZSBJRCBmb3IgZWFjaCBlbGVtZW50IHNpbmNlIHRoZWlyIGRhdGEKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGVuZHMgdXAgaW4gdGhlIGdsb2JhbCBjYWNoZQorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBpc05vZGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
ZW1bIGludGVybmFsS2V5IF0gPSBpZCA9IGpRdWVyeS5kZWxldGVkSWRzLnBvcCgpIHx8IGpRdWVy
eS5ndWlkKys7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZCA9IGludGVybmFsS2V5OworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICggIWNhY2hl
WyBpZCBdICkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVbIGlkIF0gPSB7fTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXZvaWRzIGV4cG9zaW5nIGpRdWVyeSBtZXRhZGF0
YSBvbiBwbGFpbiBKUyBvYmplY3RzIHdoZW4gdGhlIG9iamVjdAorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gaXMgc2VyaWFsaXplZCB1c2luZyBKU09OLnN0cmluZ2lmeQorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCAhaXNOb2RlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYWNoZVsgaWQgXS50b0pTT04gPSBqUXVlcnkubm9vcDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBBbiBvYmpl
Y3QgY2FuIGJlIHBhc3NlZCB0byBqUXVlcnkuZGF0YSBpbnN0ZWFkIG9mIGEga2V5L3ZhbHVlIHBh
aXI7IHRoaXMgZ2V0cworICAgICAgICAgICAgICAgIC8vIHNoYWxsb3cgY29waWVkIG92ZXIgb250
byB0aGUgZXhpc3RpbmcgY2FjaGUKKyAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBuYW1lID09
PSAib2JqZWN0IiB8fCB0eXBlb2YgbmFtZSA9PT0gImZ1bmN0aW9uIiApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggcHZ0ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYWNoZVsgaWQgXSA9IGpRdWVyeS5leHRlbmQoIGNhY2hlWyBpZCBdLCBuYW1lICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYWNoZVsgaWQgXS5kYXRhID0galF1ZXJ5LmV4dGVuZCggY2FjaGVbIGlkIF0uZGF0YSwg
bmFtZSApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIHRoaXNDYWNoZSA9IGNhY2hlWyBpZCBdOworCisgICAgICAgICAgICAg
ICAgLy8galF1ZXJ5IGRhdGEoKSBpcyBzdG9yZWQgaW4gYSBzZXBhcmF0ZSBvYmplY3QgaW5zaWRl
IHRoZSBvYmplY3QncyBpbnRlcm5hbCBkYXRhCisgICAgICAgICAgICAgICAgLy8gY2FjaGUgaW4g
b3JkZXIgdG8gYXZvaWQga2V5IGNvbGxpc2lvbnMgYmV0d2VlbiBpbnRlcm5hbCBkYXRhIGFuZCB1
c2VyLWRlZmluZWQKKyAgICAgICAgICAgICAgICAvLyBkYXRhLgorICAgICAgICAgICAgICAgIGlm
ICggIXB2dCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXRoaXNDYWNoZS5kYXRh
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzQ2FjaGUuZGF0YSA9IHt9
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzQ2FjaGUgPSB0aGlzQ2FjaGUuZGF0YTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXNDYWNoZVsgalF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApIF0gPSBkYXRhOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciBib3RoIGNvbnZlcnRl
ZC10by1jYW1lbCBhbmQgbm9uLWNvbnZlcnRlZCBkYXRhIHByb3BlcnR5IG5hbWVzCisgICAgICAg
ICAgICAgICAgLy8gSWYgYSBkYXRhIHByb3BlcnR5IHdhcyBzcGVjaWZpZWQKKyAgICAgICAgICAg
ICAgICBpZiAoIGdldEJ5TmFtZSApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmly
c3QgVHJ5IHRvIGZpbmQgYXMtaXMgcHJvcGVydHkgZGF0YQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0ID0gdGhpc0NhY2hlWyBuYW1lIF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFRlc3QgZm9yIG51bGx8dW5kZWZpbmVkIHByb3BlcnR5IGRhdGEKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggcmV0ID09IG51bGwgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gVHJ5IHRvIGZpbmQgdGhlIGNhbWVsQ2FzZWQgcHJvcGVydHkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0ID0gdGhpc0NhY2hlWyBqUXVlcnkuY2FtZWxDYXNlKCBu
YW1lICkgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gdGhpc0NhY2hlOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0sCisKKyAg
ICAgICAgcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHB2dCAvKiBJbnRlcm5hbCBV
c2UgT25seSAqLyApIHsKKyAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuYWNjZXB0RGF0YSgg
ZWxlbSApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIHZhciB0aGlzQ2FjaGUsIGksIGwsCisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlzTm9kZSA9IGVsZW0ubm9kZVR5cGUsCisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFNlZSBqUXVlcnkuZGF0YSBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICAgICAg
ICAgICAgICAgICAgICAgICAgY2FjaGUgPSBpc05vZGUgPyBqUXVlcnkuY2FjaGUgOiBlbGVtLAor
ICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBpc05vZGUgPyBlbGVtWyBqUXVlcnkuZXhwYW5k
byBdIDogalF1ZXJ5LmV4cGFuZG87CisKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBh
bHJlYWR5IG5vIGNhY2hlIGVudHJ5IGZvciB0aGlzIG9iamVjdCwgdGhlcmUgaXMgbm8KKyAgICAg
ICAgICAgICAgICAvLyBwdXJwb3NlIGluIGNvbnRpbnVpbmcKKyAgICAgICAgICAgICAgICBpZiAo
ICFjYWNoZVsgaWQgXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIG5hbWUgKSB7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXNDYWNoZSA9IHB2dCA/IGNhY2hlWyBpZCBdIDogY2FjaGVbIGlk
IF0uZGF0YTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzQ2FjaGUgKSB7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBhcnJheSBvciBzcGFj
ZSBzZXBhcmF0ZWQgc3RyaW5nIG5hbWVzIGZvciBkYXRhIGtleXMKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LmlzQXJyYXkoIG5hbWUgKSApIHsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyeSB0aGUgc3RyaW5nIGFzIGEg
a2V5IGJlZm9yZSBhbnkgbWFuaXB1bGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBuYW1lIGluIHRoaXNDYWNoZSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBbIG5hbWUgXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzcGxpdCB0aGUgY2FtZWwgY2Fz
ZWQgdmVyc2lvbiBieSBzcGFjZXMgdW5sZXNzIGEga2V5IHdpdGggdGhlIHNwYWNlcyBleGlzdHMK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBq
UXVlcnkuY2FtZWxDYXNlKCBuYW1lICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIG5hbWUgaW4gdGhpc0NhY2hlICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gWyBuYW1l
IF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuYW1lID0gbmFtZS5zcGxpdCgiICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0gbmFtZS5sZW5ndGg7IGkgPCBs
OyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRl
IHRoaXNDYWNoZVsgbmFtZVtpXSBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGF0
YSBsZWZ0IGluIHRoZSBjYWNoZSwgd2Ugd2FudCB0byBjb250aW51ZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBhbmQgbGV0IHRoZSBjYWNoZSBvYmplY3QgaXRzZWxmIGdldCBk
ZXN0cm95ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhKCBwdnQgPyBp
c0VtcHR5RGF0YU9iamVjdCA6IGpRdWVyeS5pc0VtcHR5T2JqZWN0ICkoIHRoaXNDYWNoZSApICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFNlZSBqUXVlcnkuZGF0YSBm
b3IgbW9yZSBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgIGlmICggIXB2dCApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjYWNoZVsgaWQgXS5kYXRhOworCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBEb24ndCBkZXN0cm95IHRoZSBwYXJlbnQgY2FjaGUgdW5sZXNzIHRo
ZSBpbnRlcm5hbCBkYXRhIG9iamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFkIGJl
ZW4gdGhlIG9ubHkgdGhpbmcgbGVmdCBpbiBpdAorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAhaXNFbXB0eURhdGFPYmplY3QoIGNhY2hlWyBpZCBdICkgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBEZXN0cm95IHRoZSBjYWNoZQorICAg
ICAgICAgICAgICAgIGlmICggaXNOb2RlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LmNsZWFuRGF0YSggWyBlbGVtIF0sIHRydWUgKTsKKworICAgICAgICAgICAgICAgIC8vIFVz
ZSBkZWxldGUgd2hlbiBzdXBwb3J0ZWQgZm9yIGV4cGFuZG9zIG9yIGBjYWNoZWAgaXMgbm90IGEg
d2luZG93IHBlciBpc1dpbmRvdyAoIzEwMDgwKQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
IGpRdWVyeS5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8gfHwgY2FjaGUgIT0gY2FjaGUud2luZG93ICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNhY2hlWyBpZCBdOworCisgICAgICAg
ICAgICAgICAgLy8gV2hlbiBhbGwgZWxzZSBmYWlscywgbnVsbAorICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVsgaWQgXSA9IG51bGw7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIC8vIEZvciBpbnRlcm5hbCB1c2Ug
b25seS4KKyAgICAgICAgX2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZGF0YSggZWxlbSwgbmFtZSwgZGF0YSwgdHJ1ZSAp
OworICAgICAgICB9LAorCisgICAgICAgIC8vIEEgbWV0aG9kIGZvciBkZXRlcm1pbmluZyBpZiBh
IERPTSBub2RlIGNhbiBoYW5kbGUgdGhlIGRhdGEgZXhwYW5kbworICAgICAgICBhY2NlcHREYXRh
OiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICB2YXIgbm9EYXRhID0gZWxlbS5u
b2RlTmFtZSAmJiBqUXVlcnkubm9EYXRhWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTsK
KworICAgICAgICAgICAgICAgIC8vIG5vZGVzIGFjY2VwdCBkYXRhIHVubGVzcyBvdGhlcndpc2Ug
c3BlY2lmaWVkOyByZWplY3Rpb24gY2FuIGJlIGNvbmRpdGlvbmFsCisgICAgICAgICAgICAgICAg
cmV0dXJuICFub0RhdGEgfHwgbm9EYXRhICE9PSB0cnVlICYmIGVsZW0uZ2V0QXR0cmlidXRlKCJj
bGFzc2lkIikgPT09IG5vRGF0YTsKKyAgICAgICAgfQorfSk7CisKK2pRdWVyeS5mbi5leHRlbmQo
eworICAgICAgICBkYXRhOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAg
ICB2YXIgcGFydHMsIHBhcnQsIGF0dHIsIG5hbWUsIGwsCisgICAgICAgICAgICAgICAgICAgICAg
ICBlbGVtID0gdGhpc1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YSA9IG51bGw7CisKKyAgICAgICAgICAgICAgICAvLyBHZXRz
IGFsbCB2YWx1ZXMKKyAgICAgICAgICAgICAgICBpZiAoIGtleSA9PT0gdW5kZWZpbmVkICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLmxlbmd0aCApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGpRdWVyeS5kYXRhKCBlbGVtICk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFq
UXVlcnkuX2RhdGEoIGVsZW0sICJwYXJzZWRBdHRycyIgKSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhdHRyID0gZWxlbS5hdHRyaWJ1dGVzOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGwgPSBhdHRyLmxlbmd0aDsgaSA8
IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5hbWUgPSBhdHRyW2ldLm5hbWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggIW5hbWUuaW5kZXhPZiggImRhdGEtIiApICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1l
ID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZS5zdWJzdHJpbmcoNSkgKTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhQXR0ciggZWxl
bSwgbmFtZSwgZGF0YVsgbmFtZSBdICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5fZGF0
YSggZWxlbSwgInBhcnNlZEF0dHJzIiwgdHJ1ZSApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBkYXRhOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IC8vIFNldHMgbXVsdGlwbGUgdmFsdWVzCisgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2Yga2V5
ID09PSAib2JqZWN0IiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVh
Y2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5k
YXRhKCB0aGlzLCBrZXkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIHBhcnRzID0ga2V5LnNwbGl0KCAiLiIsIDIgKTsK
KyAgICAgICAgICAgICAgICBwYXJ0c1sxXSA9IHBhcnRzWzFdID8gIi4iICsgcGFydHNbMV0gOiAi
IjsKKyAgICAgICAgICAgICAgICBwYXJ0ID0gcGFydHNbMV0gKyAiISI7CisKKyAgICAgICAgICAg
ICAgICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkgeworCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB0aGlzLnRyaWdnZXJIYW5kbGVyKCAi
Z2V0RGF0YSIgKyBwYXJ0LCBbIHBhcnRzWzBdIF0gKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBUcnkgdG8gZmV0Y2ggYW55IGludGVybmFsbHkgc3RvcmVkIGRhdGEgZmly
c3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRhID09PSB1bmRlZmlu
ZWQgJiYgZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhID0galF1ZXJ5LmRhdGEoIGVsZW0sIGtleSApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkICYmIHBhcnRzWzFdID8KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEoIHBhcnRzWzBdICkgOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzWzFdID0gdmFs
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0galF1ZXJ5KCB0aGlzICk7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VySGFuZGxlciggInNl
dERhdGEiICsgcGFydCwgcGFydHMgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5LmRhdGEoIHRoaXMsIGtleSwgdmFsdWUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi50cmlnZ2VySGFuZGxlciggImNoYW5nZURhdGEiICsgcGFydCwgcGFydHMg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0sIG51bGws
IHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgZmFsc2UgKTsKKyAgICAgICAgfSwK
KworICAgICAgICByZW1vdmVEYXRhOiBmdW5jdGlvbigga2V5ICkgeworICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkucmVtb3ZlRGF0YSggdGhpcywga2V5ICk7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0KK30pOworCitmdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkgeworICAg
ICAgICAvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5hbGx5LCB0cnkgdG8gZmV0Y2ggYW55
CisgICAgICAgIC8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZQorICAgICAg
ICBpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkgeworCisg
ICAgICAgICAgICAgICAgdmFyIG5hbWUgPSAiZGF0YS0iICsga2V5LnJlcGxhY2UoIHJtdWx0aURh
c2gsICItJDEiICkudG9Mb3dlckNhc2UoKTsKKworICAgICAgICAgICAgICAgIGRhdGEgPSBlbGVt
LmdldEF0dHJpYnV0ZSggbmFtZSApOworCisgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgZGF0
YSA9PT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YSA9PT0gInRydWUiID8gdHJ1ZSA6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPT09ICJmYWxzZSIgPyBmYWxz
ZSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPT09ICJudWxsIiA/IG51
bGwgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGNvbnZlcnQgdG8g
YSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICArZGF0YSArICIiID09PSBkYXRhID8gK2RhdGEgOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByYnJhY2UudGVzdCggZGF0YSApID8galF1ZXJ5LnBhcnNl
SlNPTiggZGF0YSApIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhOworICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCggZSApIHt9CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGRhdGEgc28gaXQgaXNuJ3Qg
Y2hhbmdlZCBsYXRlcgorICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRhdGEoIGVsZW0s
IGtleSwgZGF0YSApOworCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGEgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIGRhdGE7Cit9CisKKy8vIGNoZWNrcyBhIGNhY2hlIG9iamVjdCBm
b3IgZW1wdGluZXNzCitmdW5jdGlvbiBpc0VtcHR5RGF0YU9iamVjdCggb2JqICkgeworICAgICAg
ICB2YXIgbmFtZTsKKyAgICAgICAgZm9yICggbmFtZSBpbiBvYmogKSB7CisKKyAgICAgICAgICAg
ICAgICAvLyBpZiB0aGUgcHVibGljIGRhdGEgb2JqZWN0IGlzIGVtcHR5LCB0aGUgcHJpdmF0ZSBp
cyBzdGlsbCBlbXB0eQorICAgICAgICAgICAgICAgIGlmICggbmFtZSA9PT0gImRhdGEiICYmIGpR
dWVyeS5pc0VtcHR5T2JqZWN0KCBvYmpbbmFtZV0gKSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIG5h
bWUgIT09ICJ0b0pTT04iICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOwor
fQoralF1ZXJ5LmV4dGVuZCh7CisgICAgICAgIHF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSwg
ZGF0YSApIHsKKyAgICAgICAgICAgICAgICB2YXIgcXVldWU7CisKKyAgICAgICAgICAgICAgICBp
ZiAoIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gKCB0eXBlIHx8ICJm
eCIgKSArICJxdWV1ZSI7CisgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZSA9IGpRdWVyeS5f
ZGF0YSggZWxlbSwgdHlwZSApOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGVlZCB1
cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3Vw
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggIXF1ZXVlIHx8IGpRdWVyeS5pc0FycmF5KGRhdGEpICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlID0galF1ZXJ5Ll9k
YXRhKCBlbGVtLCB0eXBlLCBqUXVlcnkubWFrZUFycmF5KGRhdGEpICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcXVldWUucHVzaCggZGF0YSApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcXVldWUgfHwgW107CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9LAor
CisgICAgICAgIGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkgeworICAgICAgICAgICAg
ICAgIHR5cGUgPSB0eXBlIHx8ICJmeCI7CisKKyAgICAgICAgICAgICAgICB2YXIgcXVldWUgPSBq
UXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0
TGVuZ3RoID0gcXVldWUubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBxdWV1
ZS5zaGlmdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkuX3F1ZXVl
SG9va3MoIGVsZW0sIHR5cGUgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRlcXVldWUo
IGVsZW0sIHR5cGUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAg
ICAgICAvLyBJZiB0aGUgZnggcXVldWUgaXMgZGVxdWV1ZWQsIGFsd2F5cyByZW1vdmUgdGhlIHBy
b2dyZXNzIHNlbnRpbmVsCisgICAgICAgICAgICAgICAgaWYgKCBmbiA9PT0gImlucHJvZ3Jlc3Mi
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBxdWV1ZS5zaGlmdCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhcnRMZW5ndGgtLTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBpZiAoIGZuICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBB
ZGQgYSBwcm9ncmVzcyBzZW50aW5lbCB0byBwcmV2ZW50IHRoZSBmeCBxdWV1ZSBmcm9tIGJlaW5n
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdXRvbWF0aWNhbGx5IGRlcXVldWVkCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJmeCIgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHF1ZXVlLnVuc2hpZnQoICJpbnByb2dyZXNzIiApOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbGVhciB1
cCB0aGUgbGFzdCBxdWV1ZSBzdG9wIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBk
ZWxldGUgaG9va3Muc3RvcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZuLmNhbGwoIGVsZW0s
IG5leHQsIGhvb2tzICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYg
KCAhc3RhcnRMZW5ndGggJiYgaG9va3MgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBob29r
cy5lbXB0eS5maXJlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAg
IC8vIG5vdCBpbnRlbmRlZCBmb3IgcHVibGljIGNvbnN1bXB0aW9uIC0gZ2VuZXJhdGVzIGEgcXVl
dWVIb29rcyBvYmplY3QsIG9yIHJldHVybnMgdGhlIGN1cnJlbnQgb25lCisgICAgICAgIF9xdWV1
ZUhvb2tzOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHsKKyAgICAgICAgICAgICAgICB2YXIga2V5
ID0gdHlwZSArICJxdWV1ZUhvb2tzIjsKKyAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5Ll9k
YXRhKCBlbGVtLCBrZXkgKSB8fCBqUXVlcnkuX2RhdGEoIGVsZW0sIGtleSwgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZW1wdHk6IGpRdWVyeS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRk
KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVt
b3ZlRGF0YSggZWxlbSwgdHlwZSArICJxdWV1ZSIsIHRydWUgKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZURhdGEoIGVsZW0sIGtleSwgdHJ1ZSApOworICAg
ICAgICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQor
fSk7CisKK2pRdWVyeS5mbi5leHRlbmQoeworICAgICAgICBxdWV1ZTogZnVuY3Rpb24oIHR5cGUs
IGRhdGEgKSB7CisgICAgICAgICAgICAgICAgdmFyIHNldHRlciA9IDI7CisKKyAgICAgICAgICAg
ICAgICBpZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGEgPSB0eXBlOworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICJmeCI7
CisgICAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXItLTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWzBdLCB0eXBlICk7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEgPT09IHVu
ZGVmaW5lZCA/CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5zdXJlIGEgaG9va3MgZm9yIHRo
aXMgcXVldWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9xdWV1ZUhv
b2tzKCB0aGlzLCB0eXBlICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCB0eXBlID09PSAiZngiICYmIHF1ZXVlWzBdICE9PSAiaW5wcm9ncmVzcyIgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5
cGUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0sCisgICAgICAgIGRlcXVldWU6IGZ1bmN0aW9uKCB0eXBl
ICkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICB9LAorICAgICAgICAvLyBCYXNlZCBvZmYgb2YgdGhlIHBs
dWdpbiBieSBDbGludCBIZWxmZXJzLCB3aXRoIHBlcm1pc3Npb24uCisgICAgICAgIC8vIGh0dHA6
Ly9ibGluZHNpZ25hbHMuY29tL2luZGV4LnBocC8yMDA5LzA3L2pxdWVyeS1kZWxheS8KKyAgICAg
ICAgZGVsYXk6IGZ1bmN0aW9uKCB0aW1lLCB0eXBlICkgeworICAgICAgICAgICAgICAgIHRpbWUg
PSBqUXVlcnkuZnggPyBqUXVlcnkuZnguc3BlZWRzWyB0aW1lIF0gfHwgdGltZSA6IHRpbWU7Cisg
ICAgICAgICAgICAgICAgdHlwZSA9IHR5cGUgfHwgImZ4IjsKKworICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLnF1ZXVlKCB0eXBlLCBmdW5jdGlvbiggbmV4dCwgaG9va3MgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoIG5leHQsIHRpbWUgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGhvb2tzLnN0b3AgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9LAor
ICAgICAgICBjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCAiZngiLCBbXSApOworICAgICAgICB9LAorICAgICAg
ICAvLyBHZXQgYSBwcm9taXNlIHJlc29sdmVkIHdoZW4gcXVldWVzIG9mIGEgY2VydGFpbiB0eXBl
CisgICAgICAgIC8vIGFyZSBlbXB0aWVkIChmeCBpcyB0aGUgdHlwZSBieSBkZWZhdWx0KQorICAg
ICAgICBwcm9taXNlOiBmdW5jdGlvbiggdHlwZSwgb2JqICkgeworICAgICAgICAgICAgICAgIHZh
ciB0bXAsCisgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IDEsCisgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZlciA9IGpRdWVyeS5EZWZlcnJlZCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbWVudHMgPSB0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHRoaXMu
bGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEoIC0tY291bnQgKSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlci5yZXNvbHZlV2l0aCgg
ZWxlbWVudHMsIFsgZWxlbWVudHMgXSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgaWYgKCB0
eXBlb2YgdHlwZSAhPT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvYmog
PSB0eXBlOworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHVuZGVmaW5lZDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdHlwZSA9IHR5cGUgfHwgImZ4IjsKKworICAg
ICAgICAgICAgICAgIHdoaWxlKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0bXAg
PSBqUXVlcnkuX2RhdGEoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyAicXVldWVIb29rcyIgKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggdG1wICYmIHRtcC5lbXB0eSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG1wLmVtcHR5LmFkZCggcmVzb2x2ZSApOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXNvbHZlKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGRlZmVyLnByb21pc2UoIG9iaiApOworICAgICAgICB9Cit9KTsK
K3ZhciBub2RlSG9vaywgYm9vbEhvb2ssIGZpeFNwZWNpZmllZCwKKyAgICAgICAgcmNsYXNzID0g
L1tcdFxyXG5dL2csCisgICAgICAgIHJyZXR1cm4gPSAvXHIvZywKKyAgICAgICAgcnR5cGUgPSAv
Xig/OmJ1dHRvbnxpbnB1dCkkL2ksCisgICAgICAgIHJmb2N1c2FibGUgPSAvXig/OmJ1dHRvbnxp
bnB1dHxvYmplY3R8c2VsZWN0fHRleHRhcmVhKSQvaSwKKyAgICAgICAgcmNsaWNrYWJsZSA9IC9e
YSg/OnJlYXwpJC9pLAorICAgICAgICByYm9vbGVhbiA9IC9eKD86YXV0b2ZvY3VzfGF1dG9wbGF5
fGFzeW5jfGNoZWNrZWR8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGxvb3B8bXVsdGlw
bGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWR8c2VsZWN0ZWQpJC9pLAorICAgICAgICBn
ZXRTZXRBdHRyaWJ1dGUgPSBqUXVlcnkuc3VwcG9ydC5nZXRTZXRBdHRyaWJ1dGU7CisKK2pRdWVy
eS5mbi5leHRlbmQoeworICAgICAgICBhdHRyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIGpRdWVyeS5hdHRyLCBu
YW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTsKKyAgICAgICAgfSwKKworICAgICAg
ICByZW1vdmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJl
bW92ZUF0dHIoIHRoaXMsIG5hbWUgKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwK
KworICAgICAgICBwcm9wOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIGpRdWVyeS5wcm9wLCBuYW1lLCB2YWx1ZSwg
YXJndW1lbnRzLmxlbmd0aCA+IDEgKTsKKyAgICAgICAgfSwKKworICAgICAgICByZW1vdmVQcm9w
OiBmdW5jdGlvbiggbmFtZSApIHsKKyAgICAgICAgICAgICAgICBuYW1lID0galF1ZXJ5LnByb3BG
aXhbIG5hbWUgXSB8fCBuYW1lOworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cnkvY2F0Y2ggaGFuZGxlcyBj
YXNlcyB3aGVyZSBJRSBiYWxrcyAoc3VjaCBhcyByZW1vdmluZyBhIHByb3BlcnR5IG9uIHdpbmRv
dykKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXNbIG5hbWUgXSA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVsZXRlIHRoaXNbIG5hbWUgXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0gY2F0Y2goIGUgKSB7fQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9LAorCisgICAg
ICAgIGFkZENsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgdmFyIGNs
YXNzTmFtZXMsIGksIGwsIGVsZW0sCisgICAgICAgICAgICAgICAgICAgICAgICBzZXRDbGFzcywg
YywgY2w7CisKKyAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSAp
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigg
aiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkuYWRk
Q2xhc3MoIHZhbHVlLmNhbGwodGhpcywgaiwgdGhpcy5jbGFzc05hbWUpICk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAoIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjbGFzc05hbWVzID0gdmFsdWUuc3BsaXQoIGNvcmVfcnNwYWNlICk7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBs
OyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlzWyBp
IF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBl
ID09PSAxICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
IWVsZW0uY2xhc3NOYW1lICYmIGNsYXNzTmFtZXMubGVuZ3RoID09PSAxICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc05hbWUgPSB2
YWx1ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDbGFz
cyA9ICIgIiArIGVsZW0uY2xhc3NOYW1lICsgIiAiOworCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBjID0gMCwgY2wgPSBjbGFzc05hbWVzLmxl
bmd0aDsgYyA8IGNsOyBjKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggc2V0Q2xhc3MuaW5kZXhPZiggIiAiICsgY2xhc3NO
YW1lc1sgYyBdICsgIiAiICkgPCAwICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENsYXNzICs9IGNsYXNzTmFtZXNb
IGMgXSArICIgIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbS5jbGFzc05hbWUgPSBqUXVlcnkudHJpbSggc2V0Q2xhc3MgKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSwKKworICAgICAgICByZW1vdmVD
bGFzczogZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICAgICAgICAgIHZhciByZW1vdmVzLCBj
bGFzc05hbWUsIGVsZW0sIGMsIGNsLCBpLCBsOworCisgICAgICAgICAgICAgICAgaWYgKCBqUXVl
cnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLmVhY2goZnVuY3Rpb24oIGogKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeSggdGhpcyApLnJlbW92ZUNsYXNzKCB2YWx1ZS5jYWxsKHRoaXMsIGosIHRoaXMu
Y2xhc3NOYW1lKSApOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmICggKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gInN0
cmluZyIpIHx8IHZhbHVlID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZW1vdmVzID0gKCB2YWx1ZSB8fCAiIiApLnNwbGl0KCBjb3JlX3JzcGFjZSApOworCisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsg
aSsrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gdGhpc1sgaSBd
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09
IDEgJiYgZWxlbS5jbGFzc05hbWUgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjbGFzc05hbWUgPSAoIiAiICsgZWxlbS5jbGFzc05hbWUgKyAiICIpLnJlcGxh
Y2UoIHJjbGFzcywgIiAiICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBsb29wIG92ZXIgZWFjaCBpdGVtIGluIHRoZSByZW1vdmFsIGxpc3QKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBjID0gMCwgY2wgPSByZW1vdmVz
Lmxlbmd0aDsgYyA8IGNsOyBjKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdW50aWwgdGhlcmUgaXMgbm90aGluZyB0byByZW1v
dmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGls
ZSAoIGNsYXNzTmFtZS5pbmRleE9mKCIgIiArIHJlbW92ZXNbIGMgXSArICIgIikgPj0gMCApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2xhc3NOYW1lID0gY2xhc3NOYW1lLnJlcGxhY2UoICIgIiArIHJlbW92ZXNbIGMgXSArICIgIiAs
ICIgIiApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZSA9IHZhbHVlID8galF1
ZXJ5LnRyaW0oIGNsYXNzTmFtZSApIDogIiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSwKKworICAgICAgICB0b2dnbGVD
bGFzczogZnVuY3Rpb24oIHZhbHVlLCBzdGF0ZVZhbCApIHsKKyAgICAgICAgICAgICAgICB2YXIg
dHlwZSA9IHR5cGVvZiB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzQm9vbCA9IHR5
cGVvZiBzdGF0ZVZhbCA9PT0gImJvb2xlYW4iOworCisgICAgICAgICAgICAgICAgaWYgKCBqUXVl
cnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKCB2YWx1ZS5jYWxsKHRoaXMsIGksIHRoaXMu
Y2xhc3NOYW1lLCBzdGF0ZVZhbCksIHN0YXRlVmFsICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5l
YWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAi
c3RyaW5nIiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG9nZ2xlIGlu
ZGl2aWR1YWwgY2xhc3MgbmFtZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGNsYXNzTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0g
MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmID0galF1ZXJ5
KCB0aGlzICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUg
PSBzdGF0ZVZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFz
c05hbWVzID0gdmFsdWUuc3BsaXQoIGNvcmVfcnNwYWNlICk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2hpbGUgKCAoY2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSsrIF0pICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGVhY2gg
Y2xhc3NOYW1lIGdpdmVuLCBzcGFjZSBzZXBhcmF0ZWQgbGlzdAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gaXNCb29sID8gc3RhdGUgOiAhc2VsZi5oYXND
bGFzcyggY2xhc3NOYW1lICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZlsgc3RhdGUgPyAiYWRkQ2xhc3MiIDogInJlbW92ZUNsYXNzIiBdKCBjbGFzc05hbWUg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKCB0eXBlID09PSAidW5kZWZpbmVkIiB8fCB0eXBlID09PSAiYm9v
bGVhbiIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGhpcy5jbGFz
c05hbWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3Rv
cmUgY2xhc3NOYW1lIGlmIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5fZGF0YSggdGhpcywgIl9fY2xhc3NOYW1lX18iLCB0aGlzLmNsYXNzTmFtZSAp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gdG9nZ2xlIHdob2xlIGNsYXNzTmFtZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLmNsYXNzTmFtZSA9IHRoaXMuY2xhc3NOYW1lIHx8IHZhbHVl
ID09PSBmYWxzZSA/ICIiIDogalF1ZXJ5Ll9kYXRhKCB0aGlzLCAiX19jbGFzc05hbWVfXyIgKSB8
fCAiIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfSwKKworICAgICAgICBoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAg
ICAgICAgICAgICAgIHZhciBjbGFzc05hbWUgPSAiICIgKyBzZWxlY3RvciArICIgIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbCA9IHRo
aXMubGVuZ3RoOworICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IGw7IGkrKyApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggdGhpc1tpXS5ub2RlVHlwZSA9PT0gMSAmJiAoIiAiICsg
dGhpc1tpXS5jbGFzc05hbWUgKyAiICIpLnJlcGxhY2UocmNsYXNzLCAiICIpLmluZGV4T2YoIGNs
YXNzTmFtZSApID49IDAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSwKKworICAgICAgICB2YWw6
IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICB2YXIgaG9va3MsIHJldCwgaXNG
dW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlzWzBdOworCisgICAg
ICAgICAgICAgICAgaWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9v
a3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0udHlwZSBdIHx8IGpRdWVyeS52YWxIb29rc1sgZWxl
bS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJiAocmV0ID0gaG9va3MuZ2V0KCBl
bGVtLCAidmFsdWUiICkpICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGVsZW0udmFs
dWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiByZXQg
PT09ICJzdHJpbmciID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBoYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0LnJlcGxhY2UocnJldHVybiwgIiIpIDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUg
aXMgbnVsbC91bmRlZiBvciBudW1iZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXQgPT0gbnVsbCA/ICIiIDogcmV0OworICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgaXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSAp
OworCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYgPSBqUXVlcnkodGhpcyk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGlzRnVuY3Rpb24gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbCA9IHZhbHVlLmNhbGwoIHRoaXMsIGksIHNlbGYudmFsKCkgKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bCA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyAiIjsgY29udmVydCBudW1iZXJzIHRv
IHN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWwgPT0gbnVsbCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gIiI7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgdmFsID09PSAibnVtYmVyIiApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsICs9ICIiOworICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbCApICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWwgPSBqUXVlcnkubWFwKHZhbCwgZnVuY3Rpb24gKCB2YWx1ZSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUg
PT0gbnVsbCA/ICIiIDogdmFsdWUgKyAiIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyB0aGlzLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9v
a3NbIHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJZiBzZXQgcmV0dXJucyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBub3JtYWwgc2V0
dGluZworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaG9va3MgfHwgISgic2V0IiBpbiBo
b29rcykgfHwgaG9va3Muc2V0KCB0aGlzLCB2YWwsICJ2YWx1ZSIgKSA9PT0gdW5kZWZpbmVkICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9Cit9
KTsKKworalF1ZXJ5LmV4dGVuZCh7CisgICAgICAgIHZhbEhvb2tzOiB7CisgICAgICAgICAgICAg
ICAgb3B0aW9uOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVt
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdHRyaWJ1dGVzLnZhbHVl
IGlzIHVuZGVmaW5lZCBpbiBCbGFja2JlcnJ5IDQuNyBidXQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gdXNlcyAudmFsdWUuIFNlZSAjNjkzMgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgdmFsID0gZWxlbS5hdHRyaWJ1dGVzLnZhbHVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXZhbCB8fCB2YWwuc3BlY2lmaWVkID8gZWxl
bS52YWx1ZSA6IGVsZW0udGV4dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgICAgIHNlbGVjdDogeworICAgICAgICAgICAgICAgICAg
ICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHZhbHVlLCBvcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3B0aW9ucyA9IGVsZW0ub3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmUgPSBlbGVtLnR5cGUgPT09ICJzZWxlY3Qt
b25lIiB8fCBpbmRleCA8IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWVzID0gb25lID8gbnVsbCA6IFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1heCA9IG9uZSA/IGluZGV4ICsgMSA6IG9wdGlvbnMubGVuZ3RoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpbmRleCA8IDAgPworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4IDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZSA/IGluZGV4IDog
MDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb29wIHRocm91Z2ggYWxs
IHRoZSBzZWxlY3RlZCBvcHRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoIDsgaSA8IG1heDsgaSsrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9wdGlvbiA9IG9wdGlvbnNbIGkgXTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIG9sZElFIGRvZXNuJ3QgdXBkYXRlIHNlbGVjdGVkIGFmdGVyIGZv
cm0gcmVzZXQgKCMyNTUxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggKCBvcHRpb24uc2VsZWN0ZWQgfHwgaSA9PT0gaW5kZXggKSAmJgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCByZXR1
cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgg
alF1ZXJ5LnN1cHBvcnQub3B0RGlzYWJsZWQgPyAhb3B0aW9uLmRpc2FibGVkIDogb3B0aW9uLmdl
dEF0dHJpYnV0ZSgiZGlzYWJsZWQiKSA9PT0gbnVsbCApICYmCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggIW9wdGlvbi5wYXJlbnROb2Rl
LmRpc2FibGVkIHx8ICFqUXVlcnkubm9kZU5hbWUoIG9wdGlvbi5wYXJlbnROb2RlLCAib3B0Z3Jv
dXAiICkgKSApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gR2V0IHRoZSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhlIG9wdGlvbgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBqUXVlcnkoIG9w
dGlvbiApLnZhbCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBXZSBkb24ndCBuZWVkIGFuIGFycmF5IGZvciBvbmUgc2VsZWN0cworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvbmUgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKCB2YWx1ZSApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1
ZXM7CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgICAg
ICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHZhbHVlcyA9IGpRdWVyeS5tYWtlQXJyYXkoIHZhbHVlICk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KGVsZW0pLmZpbmQoIm9wdGlvbiIpLmVh
Y2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5zZWxlY3RlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkodGhpcykudmFsKCksIHZhbHVl
cyApID49IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXZhbHVlcy5sZW5ndGggKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlczsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgLy8gVW51c2VkIGluIDEuOCwg
bGVmdCBpbiBzbyBhdHRyRm4tc3RhYmJlcnMgd29uJ3QgZGllOyByZW1vdmUgaW4gMS45CisgICAg
ICAgIGF0dHJGbjoge30sCisKKyAgICAgICAgYXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZh
bHVlLCBwYXNzICkgeworICAgICAgICAgICAgICAgIHZhciByZXQsIGhvb2tzLCBub3R4bWwsCisg
ICAgICAgICAgICAgICAgICAgICAgICBuVHlwZSA9IGVsZW0ubm9kZVR5cGU7CisKKyAgICAgICAg
ICAgICAgICAvLyBkb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQg
YXR0cmlidXRlIG5vZGVzCisgICAgICAgICAgICAgICAgaWYgKCAhZWxlbSB8fCBuVHlwZSA9PT0g
MyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIHBh
c3MgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIGpRdWVyeS5mblsgbmFtZSBdICkgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5KCBlbGVtIClbIG5hbWUgXSggdmFsdWUgKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBGYWxsYmFjayB0byBwcm9w
IHdoZW4gYXR0cmlidXRlcyBhcmUgbm90IHN1cHBvcnRlZAorICAgICAgICAgICAgICAgIGlmICgg
dHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlID09PSAidW5kZWZpbmVkIiApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBqUXVlcnkucHJvcCggZWxlbSwgbmFtZSwgdmFsdWUgKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBub3R4bWwgPSBuVHlwZSAhPT0gMSB8
fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICk7CisKKyAgICAgICAgICAgICAgICAvLyBBbGwgYXR0
cmlidXRlcyBhcmUgbG93ZXJjYXNlCisgICAgICAgICAgICAgICAgLy8gR3JhYiBuZWNlc3Nhcnkg
aG9vayBpZiBvbmUgaXMgZGVmaW5lZAorICAgICAgICAgICAgICAgIGlmICggbm90eG1sICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdIHx8ICgg
cmJvb2xlYW4udGVzdCggbmFtZSApID8gYm9vbEhvb2sgOiBub2RlSG9vayApOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsK
KworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gbnVsbCApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBob29rcyAmJiAic2V0IiBpbiBob29rcyAmJiBub3R4
bWwgJiYgKHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSkgIT09IHVuZGVmaW5l
ZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIHZhbHVlICsgIiIgKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggaG9va3MgJiYgImdldCIgaW4gaG9v
a3MgJiYgbm90eG1sICYmIChyZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSkgIT09IG51bGwg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworCisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gZWxlbS5nZXRBdHRy
aWJ1dGUoIG5hbWUgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9uLWV4aXN0ZW50
IGF0dHJpYnV0ZXMgcmV0dXJuIG51bGwsIHdlIG5vcm1hbGl6ZSB0byB1bmRlZmluZWQKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQgPT09IG51bGwgPworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bmRlZmluZWQgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIHJlbW92
ZUF0dHI6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICB2YXIgcHJv
cE5hbWUsIGF0dHJOYW1lcywgbmFtZSwgaXNCb29sLAorICAgICAgICAgICAgICAgICAgICAgICAg
aSA9IDA7CisKKyAgICAgICAgICAgICAgICBpZiAoIHZhbHVlICYmIGVsZW0ubm9kZVR5cGUgPT09
IDEgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJOYW1lcyA9IHZhbHVlLnNwbGl0
KCBjb3JlX3JzcGFjZSApOworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBh
dHRyTmFtZXMubGVuZ3RoOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5hbWUgPSBhdHRyTmFtZXNbIGkgXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIG5hbWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJvcE5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNCb29sID0gcmJvb2xlYW4udGVzdCggbmFtZSAp
OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2VlICM5Njk5
IGZvciBleHBsYW5hdGlvbiBvZiB0aGlzIGFwcHJvYWNoIChzZXR0aW5nIGZpcnN0LCB0aGVuIHJl
bW92YWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90
IGRvIHRoaXMgZm9yIGJvb2xlYW4gYXR0cmlidXRlcyAoc2VlICMxMDg3MCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpc0Jvb2wgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuYXR0ciggZWxlbSwg
bmFtZSwgIiIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5yZW1vdmVBdHRyaWJ1
dGUoIGdldFNldEF0dHJpYnV0ZSA/IG5hbWUgOiBwcm9wTmFtZSApOworCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGNvcnJlc3BvbmRpbmcgcHJvcGVydHkg
dG8gZmFsc2UgZm9yIGJvb2xlYW4gYXR0cmlidXRlcworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggaXNCb29sICYmIHByb3BOYW1lIGluIGVsZW0gKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBwcm9wTmFt
ZSBdID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIGF0dHJIb29rczog
eworICAgICAgICAgICAgICAgIHR5cGU6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldDog
ZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBXZSBjYW4ndCBhbGxvdyB0aGUgdHlwZSBwcm9wZXJ0eSB0byBiZSBjaGFuZ2VkIChzaW5j
ZSBpdCBjYXVzZXMgcHJvYmxlbXMgaW4gSUUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggcnR5cGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmIGVsZW0ucGFyZW50Tm9kZSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXJyb3Io
ICJ0eXBlIHByb3BlcnR5IGNhbid0IGJlIGNoYW5nZWQiICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoICFqUXVlcnkuc3VwcG9ydC5yYWRpb1ZhbHVlICYmIHZh
bHVlID09PSAicmFkaW8iICYmIGpRdWVyeS5ub2RlTmFtZShlbGVtLCAiaW5wdXQiKSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXR0aW5nIHRoZSB0eXBl
IG9uIGEgcmFkaW8gYnV0dG9uIGFmdGVyIHRoZSB2YWx1ZSByZXNldHMgdGhlIHZhbHVlIGluIElF
Ni05CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgdmFs
dWUgdG8gaXQncyBkZWZhdWx0IGluIGNhc2UgdHlwZSBpcyBzZXQgYWZ0ZXIgdmFsdWUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGZvciBlbGVtZW50
IGNyZWF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZh
bCA9IGVsZW0udmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbS5zZXRBdHRyaWJ1dGUoICJ0eXBlIiwgdmFsdWUgKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0udmFsdWUgPSB2YWw7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgLy8gVXNlIHRoZSB2YWx1ZSBwcm9wZXJ0eSBmb3IgYmFjayBjb21wYXQKKyAg
ICAgICAgICAgICAgICAvLyBVc2UgdGhlIG5vZGVIb29rIGZvciBidXR0b24gZWxlbWVudHMgaW4g
SUU2LzcgKCMxOTU0KQorICAgICAgICAgICAgICAgIHZhbHVlOiB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIG5vZGVIb29rICYmIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImJ1
dHRvbiIgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZUhvb2suZ2V0KCBlbGVtLCBuYW1lICk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5hbWUgaW4g
ZWxlbSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS52YWx1
ZSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0
aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBub2RlSG9vayAmJiBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJidXR0b24iICkgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVIb29r
LnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb2VzIG5vdCByZXR1cm4g
c28gdGhhdCBzZXRBdHRyaWJ1dGUgaXMgYWxzbyB1c2VkCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsZW0udmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgcHJvcEZpeDogeworICAg
ICAgICAgICAgICAgIHRhYmluZGV4OiAidGFiSW5kZXgiLAorICAgICAgICAgICAgICAgIHJlYWRv
bmx5OiAicmVhZE9ubHkiLAorICAgICAgICAgICAgICAgICJmb3IiOiAiaHRtbEZvciIsCisgICAg
ICAgICAgICAgICAgImNsYXNzIjogImNsYXNzTmFtZSIsCisgICAgICAgICAgICAgICAgbWF4bGVu
Z3RoOiAibWF4TGVuZ3RoIiwKKyAgICAgICAgICAgICAgICBjZWxsc3BhY2luZzogImNlbGxTcGFj
aW5nIiwKKyAgICAgICAgICAgICAgICBjZWxscGFkZGluZzogImNlbGxQYWRkaW5nIiwKKyAgICAg
ICAgICAgICAgICByb3dzcGFuOiAicm93U3BhbiIsCisgICAgICAgICAgICAgICAgY29sc3Bhbjog
ImNvbFNwYW4iLAorICAgICAgICAgICAgICAgIHVzZW1hcDogInVzZU1hcCIsCisgICAgICAgICAg
ICAgICAgZnJhbWVib3JkZXI6ICJmcmFtZUJvcmRlciIsCisgICAgICAgICAgICAgICAgY29udGVu
dGVkaXRhYmxlOiAiY29udGVudEVkaXRhYmxlIgorICAgICAgICB9LAorCisgICAgICAgIHByb3A6
IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICB2YXIgcmV0
LCBob29rcywgbm90eG1sLAorICAgICAgICAgICAgICAgICAgICAgICAgblR5cGUgPSBlbGVtLm5v
ZGVUeXBlOworCisgICAgICAgICAgICAgICAgLy8gZG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9u
IHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2RlcworICAgICAgICAgICAgICAgIGlmICgg
IWVsZW0gfHwgblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgbm90eG1sID0gblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxl
bSApOworCisgICAgICAgICAgICAgICAgaWYgKCBub3R4bWwgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGaXggbmFtZSBhbmQgYXR0YWNoIGhvb2tzCisgICAgICAgICAgICAgICAgICAg
ICAgICBuYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lOworICAgICAgICAgICAg
ICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkucHJvcEhvb2tzWyBuYW1lIF07CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBob29rcyAmJiAic2V0IiBpbiBob29rcyAmJiAo
cmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApKSAhPT0gdW5kZWZpbmVkICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworCisgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gKCBlbGVtWyBuYW1lIF0gPSB2YWx1ZSApOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFt
ZSApKSAhPT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJldDsKKworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1bIG5hbWUgXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgcHJvcEhv
b2tzOiB7CisgICAgICAgICAgICAgICAgdGFiSW5kZXg6IHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGVsZW0udGFiSW5kZXggZG9lc24ndCBhbHdheXMgcmV0dXJuIHRoZSBjb3JyZWN0IHZh
bHVlIHdoZW4gaXQgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvYmxvZy8yMDA4LzAxLzA5
L2dldHRpbmctc2V0dGluZy1hbmQtcmVtb3ZpbmctdGFiaW5kZXgtdmFsdWVzLXdpdGgtamF2YXNj
cmlwdC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZU5vZGUg
PSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoInRhYmluZGV4Iik7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZU5vZGUgJiYgYXR0cmlidXRlTm9kZS5zcGVj
aWZpZWQgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50
KCBhdHRyaWJ1dGVOb2RlLnZhbHVlLCAxMCApIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZm9jdXNhYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSB8fCByY2xpY2th
YmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJiBlbGVtLmhyZWYgPworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9Cit9KTsKKworLy8gSG9vayBm
b3IgYm9vbGVhbiBhdHRyaWJ1dGVzCitib29sSG9vayA9IHsKKyAgICAgICAgZ2V0OiBmdW5jdGlv
biggZWxlbSwgbmFtZSApIHsKKyAgICAgICAgICAgICAgICAvLyBBbGlnbiBib29sZWFuIGF0dHJp
YnV0ZXMgd2l0aCBjb3JyZXNwb25kaW5nIHByb3BlcnRpZXMKKyAgICAgICAgICAgICAgICAvLyBG
YWxsIGJhY2sgdG8gYXR0cmlidXRlIHByZXNlbmNlIHdoZXJlIHNvbWUgYm9vbGVhbnMgYXJlIG5v
dCBzdXBwb3J0ZWQKKyAgICAgICAgICAgICAgICB2YXIgYXR0ck5vZGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eSA9IGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lICk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHByb3BlcnR5ID09PSB0cnVlIHx8IHR5cGVvZiBwcm9wZXJ0eSAhPT0g
ImJvb2xlYW4iICYmICggYXR0ck5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUobmFtZSkgKSAm
JiBhdHRyTm9kZS5ub2RlVmFsdWUgIT09IGZhbHNlID8KKyAgICAgICAgICAgICAgICAgICAgICAg
IG5hbWUudG9Mb3dlckNhc2UoKSA6CisgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQ7
CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkg
eworICAgICAgICAgICAgICAgIHZhciBwcm9wTmFtZTsKKyAgICAgICAgICAgICAgICBpZiAoIHZh
bHVlID09PSBmYWxzZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBib29s
ZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlIGlzIHRydWUgc2luY2Ugd2Uga25v
dyBhdCB0aGlzIHBvaW50IGl0J3MgdHlwZSBib29sZWFuIGFuZCBub3QgZmFsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFNldCBib29sZWFuIGF0dHJpYnV0ZXMgdG8gdGhlIHNhbWUgbmFt
ZSBhbmQgc2V0IHRoZSBET00gcHJvcGVydHkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3BO
YW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBwcm9wTmFtZSBpbiBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBPbmx5IHNldCB0aGUgSURMIHNwZWNpZmljYWxseSBpZiBpdCBhbHJlYWR5IGV4
aXN0cyBvbiB0aGUgZWxlbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVt
WyBwcm9wTmFtZSBdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUudG9Mb3dlckNh
c2UoKSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gbmFtZTsK
KyAgICAgICAgfQorfTsKKworLy8gSUU2LzcgZG8gbm90IHN1cHBvcnQgZ2V0dGluZy9zZXR0aW5n
IHNvbWUgYXR0cmlidXRlcyB3aXRoIGdldC9zZXRBdHRyaWJ1dGUKK2lmICggIWdldFNldEF0dHJp
YnV0ZSApIHsKKworICAgICAgICBmaXhTcGVjaWZpZWQgPSB7CisgICAgICAgICAgICAgICAgbmFt
ZTogdHJ1ZSwKKyAgICAgICAgICAgICAgICBpZDogdHJ1ZSwKKyAgICAgICAgICAgICAgICBjb29y
ZHM6IHRydWUKKyAgICAgICAgfTsKKworICAgICAgICAvLyBVc2UgdGhpcyBmb3IgYW55IGF0dHJp
YnV0ZSBpbiBJRTYvNworICAgICAgICAvLyBUaGlzIGZpeGVzIGFsbW9zdCBldmVyeSBJRTYvNyBp
c3N1ZQorICAgICAgICBub2RlSG9vayA9IGpRdWVyeS52YWxIb29rcy5idXR0b24gPSB7CisgICAg
ICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciByZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBlbGVtLmdl
dEF0dHJpYnV0ZU5vZGUoIG5hbWUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZXQgJiYgKCBmaXhTcGVjaWZpZWRbIG5hbWUgXSA/IHJldC52YWx1ZSAhPT0gIiIgOiByZXQuc3Bl
Y2lmaWVkICkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQudmFsdWUgOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQ7CisgICAgICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgZXhpc3Rpbmcgb3IgY3JlYXRl
IGEgbmV3IGF0dHJpYnV0ZSBub2RlCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0g
ZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoICFyZXQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGRvY3Vt
ZW50LmNyZWF0ZUF0dHJpYnV0ZSggbmFtZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtLnNldEF0dHJpYnV0ZU5vZGUoIHJldCApOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICggcmV0LnZhbHVlID0gdmFsdWUg
KyAiIiApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICAvLyBTZXQg
d2lkdGggYW5kIGhlaWdodCB0byBhdXRvIGluc3RlYWQgb2YgMCBvbiBlbXB0eSBzdHJpbmcoIEJ1
ZyAjODE1MCApCisgICAgICAgIC8vIFRoaXMgaXMgZm9yIHJlbW92YWxzCisgICAgICAgIGpRdWVy
eS5lYWNoKFsgIndpZHRoIiwgImhlaWdodCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CisgICAg
ICAgICAgICAgICAgalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggalF1
ZXJ5LmF0dHJIb29rc1sgbmFtZSBdLCB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1
bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCB2YWx1ZSA9PT0gIiIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsICJhdXRvIiApOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICB9KTsKKworICAgICAgICAvLyBTZXQgY29udGVudGVkaXRhYmxlIHRv
IGZhbHNlIG9uIHJlbW92YWxzKCMxMDQyOSkKKyAgICAgICAgLy8gU2V0dGluZyB0byBlbXB0eSBz
dHJpbmcgdGhyb3dzIGFuIGVycm9yIGFzIGFuIGludmFsaWQgdmFsdWUKKyAgICAgICAgalF1ZXJ5
LmF0dHJIb29rcy5jb250ZW50ZWRpdGFibGUgPSB7CisgICAgICAgICAgICAgICAgZ2V0OiBub2Rl
SG9vay5nZXQsCisgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5h
bWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlID09PSAiIiApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAiZmFsc2UiOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUhvb2suc2V0KCBl
bGVtLCB2YWx1ZSwgbmFtZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfTsKK30KKwor
CisvLyBTb21lIGF0dHJpYnV0ZXMgcmVxdWlyZSBhIHNwZWNpYWwgY2FsbCBvbiBJRQoraWYgKCAh
alF1ZXJ5LnN1cHBvcnQuaHJlZk5vcm1hbGl6ZWQgKSB7CisgICAgICAgIGpRdWVyeS5lYWNoKFsg
ImhyZWYiLCAic3JjIiwgIndpZHRoIiwgImhlaWdodCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7
CisgICAgICAgICAgICAgICAgalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV4dGVu
ZCggalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdLCB7CisgICAgICAgICAgICAgICAgICAgICAgICBn
ZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUsIDIgKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJldCA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJldDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7
Cit9CisKK2lmICggIWpRdWVyeS5zdXBwb3J0LnN0eWxlICkgeworICAgICAgICBqUXVlcnkuYXR0
ckhvb2tzLnN0eWxlID0geworICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gdW5kZWZpbmVkIGluIHRoZSBjYXNl
IG9mIGVtcHR5IHN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9ybWFsaXplIHRv
IGxvd2VyY2FzZSBzaW5jZSBJRSB1cHBlcmNhc2VzIGNzcyBwcm9wZXJ0eSBuYW1lcworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uc3R5bGUuY3NzVGV4dC50b0xvd2VyQ2FzZSgp
IHx8IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHNldDog
ZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICggZWxlbS5zdHlsZS5jc3NUZXh0ID0gdmFsdWUgKyAiIiApOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKK30KKworLy8gU2FmYXJpIG1pcy1yZXBvcnRzIHRoZSBkZWZhdWx0IHNlbGVj
dGVkIHByb3BlcnR5IG9mIGFuIG9wdGlvbgorLy8gQWNjZXNzaW5nIHRoZSBwYXJlbnQncyBzZWxl
Y3RlZEluZGV4IHByb3BlcnR5IGZpeGVzIGl0CitpZiAoICFqUXVlcnkuc3VwcG9ydC5vcHRTZWxl
Y3RlZCApIHsKKyAgICAgICAgalF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCA9IGpRdWVyeS5leHRl
bmQoIGpRdWVyeS5wcm9wSG9va3Muc2VsZWN0ZWQsIHsKKyAgICAgICAgICAgICAgICBnZXQ6IGZ1
bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IGVs
ZW0ucGFyZW50Tm9kZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwYXJlbnQgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5zZWxlY3RlZEluZGV4Owor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGl0IGFs
c28gd29ya3Mgd2l0aCBvcHRncm91cHMsIHNlZSAjNTcwMQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHBhcmVudC5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgfSk7Cit9CisKKy8vIElFNi83IGNhbGwgZW5jdHlwZSBlbmNvZGluZworaWYg
KCAhalF1ZXJ5LnN1cHBvcnQuZW5jdHlwZSApIHsKKyAgICAgICAgalF1ZXJ5LnByb3BGaXguZW5j
dHlwZSA9ICJlbmNvZGluZyI7Cit9CisKKy8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIv
c2V0dGVyCitpZiAoICFqUXVlcnkuc3VwcG9ydC5jaGVja09uICkgeworICAgICAgICBqUXVlcnku
ZWFjaChbICJyYWRpbyIsICJjaGVja2JveCIgXSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICBn
ZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgaW4gV2Via2l0ICIiIGlzIHJldHVybmVkIGluc3RlYWQg
b2YgIm9uIiBpZiBhIHZhbHVlIGlzbid0IHNwZWNpZmllZAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoInZhbHVlIikgPT09IG51bGwgPyAi
b24iIDogZWxlbS52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9OworICAgICAgICB9KTsKK30KK2pRdWVyeS5lYWNoKFsgInJhZGlvIiwgImNoZWNrYm94
IiBdLCBmdW5jdGlvbigpIHsKKyAgICAgICAgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSBqUXVl
cnkuZXh0ZW5kKCBqUXVlcnkudmFsSG9va3NbIHRoaXMgXSwgeworICAgICAgICAgICAgICAgIHNl
dDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBqUXVlcnkuaXNBcnJheSggdmFsdWUgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICggZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeShlbGVt
KS52YWwoKSwgdmFsdWUgKSA+PSAwICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICB9KTsKK30pOwordmFyIHJmb3JtRWxlbXMgPSAvXig/OnRl
eHRhcmVhfGlucHV0fHNlbGVjdCkkL2ksCisgICAgICAgIHJ0eXBlbmFtZXNwYWNlID0gL14oW15c
Ll0qfCkoPzpcLiguKyl8KSQvLAorICAgICAgICByaG92ZXJIYWNrID0gLyg/Ol58XHMpaG92ZXIo
XC5cUyt8KVxiLywKKyAgICAgICAgcmtleUV2ZW50ID0gL15rZXkvLAorICAgICAgICBybW91c2VF
dmVudCA9IC9eKD86bW91c2V8Y29udGV4dG1lbnUpfGNsaWNrLywKKyAgICAgICAgcmZvY3VzTW9y
cGggPSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sCisgICAgICAgIGhvdmVySGFj
ayA9IGZ1bmN0aW9uKCBldmVudHMgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5l
dmVudC5zcGVjaWFsLmhvdmVyID8gZXZlbnRzIDogZXZlbnRzLnJlcGxhY2UoIHJob3ZlckhhY2ss
ICJtb3VzZWVudGVyJDEgbW91c2VsZWF2ZSQxIiApOworICAgICAgICB9OworCisvKgorICogSGVs
cGVyIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgZXZlbnRzIC0tIG5vdCBwYXJ0IG9mIHRoZSBwdWJs
aWMgaW50ZXJmYWNlLgorICogUHJvcHMgdG8gRGVhbiBFZHdhcmRzJyBhZGRFdmVudCBsaWJyYXJ5
IGZvciBtYW55IG9mIHRoZSBpZGVhcy4KKyAqLworalF1ZXJ5LmV2ZW50ID0geworCisgICAgICAg
IGFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHsK
KworICAgICAgICAgICAgICAgIHZhciBlbGVtRGF0YSwgZXZlbnRIYW5kbGUsIGV2ZW50cywKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHQsIHRucywgdHlwZSwgbmFtZXNwYWNlcywgaGFuZGxlT2Jq
LAorICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqSW4sIGhhbmRsZXJzLCBzcGVjaWFs
OworCisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgYXR0YWNoIGV2ZW50cyB0byBub0RhdGEgb3Ig
dGV4dC9jb21tZW50IG5vZGVzIChhbGxvdyBwbGFpbiBvYmplY3RzIHRobykKKyAgICAgICAgICAg
ICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAh
dHlwZXMgfHwgIWhhbmRsZXIgfHwgIShlbGVtRGF0YSA9IGpRdWVyeS5fZGF0YSggZWxlbSApKSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYW4gb2JqZWN0IG9mIGN1c3Rv
bSBkYXRhIGluIGxpZXUgb2YgdGhlIGhhbmRsZXIKKyAgICAgICAgICAgICAgICBpZiAoIGhhbmRs
ZXIuaGFuZGxlciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iakluID0gaGFu
ZGxlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBoYW5kbGVPYmpJbi5oYW5k
bGVyOworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBoYW5kbGVPYmpJbi5zZWxl
Y3RvcjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUg
dGhhdCB0aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQg
bGF0ZXIKKyAgICAgICAgICAgICAgICBpZiAoICFoYW5kbGVyLmd1aWQgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBoYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1
Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmlyc3QKKyAgICAgICAgICAg
ICAgICBldmVudHMgPSBlbGVtRGF0YS5ldmVudHM7CisgICAgICAgICAgICAgICAgaWYgKCAhZXZl
bnRzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbURhdGEuZXZlbnRzID0gZXZlbnRz
ID0ge307CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxlID0g
ZWxlbURhdGEuaGFuZGxlOworICAgICAgICAgICAgICAgIGlmICggIWV2ZW50SGFuZGxlICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbURhdGEuaGFuZGxlID0gZXZlbnRIYW5kbGUgPSBm
dW5jdGlvbiggZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGlzY2Fy
ZCB0aGUgc2Vjb25kIGV2ZW50IG9mIGEgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoKSBhbmQKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBhbiBldmVudCBpcyBjYWxsZWQgYWZ0
ZXIgYSBwYWdlIGhhcyB1bmxvYWRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0gInVuZGVmaW5lZCIgJiYgKCFlIHx8IGpRdWVyeS5ldmVu
dC50cmlnZ2VyZWQgIT09IGUudHlwZSkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS5ldmVudC5kaXNwYXRjaC5hcHBseSggZXZlbnRIYW5kbGUuZWxlbSwg
YXJndW1lbnRzICkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
ZGVmaW5lZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBBZGQgZWxlbSBhcyBhIHByb3BlcnR5IG9mIHRoZSBoYW5kbGUgZm4gdG8gcHJldmVu
dCBhIG1lbW9yeSBsZWFrIHdpdGggSUUgbm9uLW5hdGl2ZSBldmVudHMKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGV2ZW50SGFuZGxlLmVsZW0gPSBlbGVtOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEg
c3BhY2UKKyAgICAgICAgICAgICAgICAvLyBqUXVlcnkoLi4uKS5iaW5kKCJtb3VzZW92ZXIgbW91
c2VvdXQiLCBmbik7CisgICAgICAgICAgICAgICAgdHlwZXMgPSBqUXVlcnkudHJpbSggaG92ZXJI
YWNrKHR5cGVzKSApLnNwbGl0KCAiICIgKTsKKyAgICAgICAgICAgICAgICBmb3IgKCB0ID0gMDsg
dCA8IHR5cGVzLmxlbmd0aDsgdCsrICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICB0bnMg
PSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1t0XSApIHx8IFtdOworICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZSA9IHRuc1sxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFj
ZXMgPSAoIHRuc1syXSB8fCAiIiApLnNwbGl0KCAiLiIgKS5zb3J0KCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIElmIGV2ZW50IGNoYW5nZXMgaXRzIHR5cGUsIHVzZSB0aGUgc3BlY2lh
bCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5nZWQgdHlwZQorICAgICAgICAgICAgICAgICAg
ICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBz
cGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZQorICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNw
ZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBV
cGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBuZXdseSByZXNldCB0eXBlCisgICAgICAgICAgICAgICAg
ICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0byBhbGwgZXZl
bnQgaGFuZGxlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9IGpRdWVyeS5l
eHRlbmQoeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnVHlwZTogdG5zWzFdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoYW5kbGVyOiBoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBndWlkOiBoYW5kbGVyLmd1aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGVjdG9yOiBzZWxlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVl
ZHNDb250ZXh0OiBzZWxlY3RvciAmJiBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVz
dCggc2VsZWN0b3IgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNl
OiBuYW1lc3BhY2VzLmpvaW4oIi4iKQorICAgICAgICAgICAgICAgICAgICAgICAgfSwgaGFuZGxl
T2JqSW4gKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5pdCB0aGUgZXZlbnQgaGFu
ZGxlciBxdWV1ZSBpZiB3ZSdyZSB0aGUgZmlyc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGhh
bmRsZXJzID0gZXZlbnRzWyB0eXBlIF07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFo
YW5kbGVycyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnMgPSBl
dmVudHNbIHR5cGUgXSA9IFtdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5k
bGVycy5kZWxlZ2F0ZUNvdW50ID0gMDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBPbmx5IHVzZSBhZGRFdmVudExpc3RlbmVyL2F0dGFjaEV2ZW50IGlmIHRoZSBzcGVjaWFs
IGV2ZW50cyBoYW5kbGVyIHJldHVybnMgZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCAhc3BlY2lhbC5zZXR1cCB8fCBzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRh
dGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJpbmQgdGhlIGdsb2JhbCBldmVudCBoYW5k
bGVyIHRvIHRoZSBlbGVtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBlbGVtLmFkZEV2ZW50TGlzdGVuZXIgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGV2
ZW50SGFuZGxlLCBmYWxzZSApOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICggZWxlbS5hdHRhY2hFdmVudCApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uYXR0YWNoRXZlbnQoICJvbiIgKyB0
eXBlLCBldmVudEhhbmRsZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNwZWNpYWwuYWRkICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsLmFkZC5jYWxsKCBlbGVt
LCBoYW5kbGVPYmogKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFo
YW5kbGVPYmouaGFuZGxlci5ndWlkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhhbmRsZU9iai5oYW5kbGVyLmd1aWQgPSBoYW5kbGVyLmd1aWQ7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRvIHRoZSBlbGVtZW50J3MgaGFuZGxlciBs
aXN0LCBkZWxlZ2F0ZXMgaW4gZnJvbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc2Vs
ZWN0b3IgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzLnNwbGlj
ZSggaGFuZGxlcnMuZGVsZWdhdGVDb3VudCsrLCAwLCBoYW5kbGVPYmogKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhh
bmRsZXJzLnB1c2goIGhhbmRsZU9iaiApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBLZWVwIHRyYWNrIG9mIHdoaWNoIGV2ZW50cyBoYXZl
IGV2ZXIgYmVlbiB1c2VkLCBmb3IgZXZlbnQgb3B0aW1pemF0aW9uCisgICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gPSB0cnVlOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIC8vIE51bGxpZnkgZWxlbSB0byBwcmV2ZW50IG1lbW9y
eSBsZWFrcyBpbiBJRQorICAgICAgICAgICAgICAgIGVsZW0gPSBudWxsOworICAgICAgICB9LAor
CisgICAgICAgIGdsb2JhbDoge30sCisKKyAgICAgICAgLy8gRGV0YWNoIGFuIGV2ZW50IG9yIHNl
dCBvZiBldmVudHMgZnJvbSBhbiBlbGVtZW50CisgICAgICAgIHJlbW92ZTogZnVuY3Rpb24oIGVs
ZW0sIHR5cGVzLCBoYW5kbGVyLCBzZWxlY3RvciwgbWFwcGVkVHlwZXMgKSB7CisKKyAgICAgICAg
ICAgICAgICB2YXIgdCwgdG5zLCB0eXBlLCBvcmlnVHlwZSwgbmFtZXNwYWNlcywgb3JpZ0NvdW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgaiwgZXZlbnRzLCBzcGVjaWFsLCBldmVudFR5cGUs
IGhhbmRsZU9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1EYXRhID0galF1ZXJ5Lmhh
c0RhdGEoIGVsZW0gKSAmJiBqUXVlcnkuX2RhdGEoIGVsZW0gKTsKKworICAgICAgICAgICAgICAg
IGlmICggIWVsZW1EYXRhIHx8ICEoZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAvLyBPbmNlIGZvciBlYWNoIHR5cGUubmFtZXNwYWNlIGluIHR5cGVzOyB0eXBlIG1h
eSBiZSBvbWl0dGVkCisgICAgICAgICAgICAgICAgdHlwZXMgPSBqUXVlcnkudHJpbSggaG92ZXJI
YWNrKCB0eXBlcyB8fCAiIiApICkuc3BsaXQoIiAiKTsKKyAgICAgICAgICAgICAgICBmb3IgKCB0
ID0gMDsgdCA8IHR5cGVzLmxlbmd0aDsgdCsrICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
dG5zID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbdF0gKSB8fCBbXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGUgPSBvcmlnVHlwZSA9IHRuc1sxXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5hbWVzcGFjZXMgPSB0bnNbMl07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFVuYmluZCBhbGwgZXZlbnRzIChvbiB0aGlzIG5hbWVzcGFjZSwgaWYgcHJvdmlkZWQpIGZvciB0
aGUgZWxlbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhdHlwZSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdHlwZSBpbiBldmVudHMgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSgg
ZWxlbSwgdHlwZSArIHR5cGVzWyB0IF0sIGhhbmRsZXIsIHNlbGVjdG9yLCB0cnVlICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9
OworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICggc2VsZWN0b3I/IHNwZWNpYWwuZGVs
ZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7CisgICAgICAgICAgICAgICAg
ICAgICAgICBldmVudFR5cGUgPSBldmVudHNbIHR5cGUgXSB8fCBbXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG9yaWdDb3VudCA9IGV2ZW50VHlwZS5sZW5ndGg7CisgICAgICAgICAgICAgICAg
ICAgICAgICBuYW1lc3BhY2VzID0gbmFtZXNwYWNlcyA/IG5ldyBSZWdFeHAoIihefFxcLikiICsg
bmFtZXNwYWNlcy5zcGxpdCgiLiIpLnNvcnQoKS5qb2luKCJcXC4oPzouKlxcLnwpIikgKyAiKFxc
LnwkKSIpIDogbnVsbDsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIG1hdGNo
aW5nIGV2ZW50cworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaiA9IDA7IGogPCBldmVu
dFR5cGUubGVuZ3RoOyBqKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhh
bmRsZU9iaiA9IGV2ZW50VHlwZVsgaiBdOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBl
ICkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAhaGFuZGxl
ciB8fCBoYW5kbGVyLmd1aWQgPT09IGhhbmRsZU9iai5ndWlkICkgJiYKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAhbmFtZXNwYWNlcyB8fCBuYW1lc3BhY2VzLnRl
c3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApICYmCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICggIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBoYW5kbGVPYmouc2Vs
ZWN0b3IgfHwgc2VsZWN0b3IgPT09ICIqKiIgJiYgaGFuZGxlT2JqLnNlbGVjdG9yICkgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlLnNwbGljZSgg
ai0tLCAxICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGhhbmRsZU9iai5zZWxlY3RvciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV2ZW50VHlwZS5kZWxlZ2F0ZUNvdW50LS07CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggc3BlY2lhbC5yZW1vdmUgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBo
YW5kbGVPYmogKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGdlbmVyaWMgZXZlbnQgaGFu
ZGxlciBpZiB3ZSByZW1vdmVkIHNvbWV0aGluZyBhbmQgbm8gbW9yZSBoYW5kbGVycyBleGlzdAor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gKGF2b2lkcyBwb3RlbnRpYWwgZm9yIGVuZGxlc3Mg
cmVjdXJzaW9uIGR1cmluZyByZW1vdmFsIG9mIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMpCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGV2ZW50VHlwZS5sZW5ndGggPT09IDAgJiYgb3JpZ0Nv
dW50ICE9PSBldmVudFR5cGUubGVuZ3RoICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoICFzcGVjaWFsLnRlYXJkb3duIHx8IHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxl
bSwgbmFtZXNwYWNlcywgZWxlbURhdGEuaGFuZGxlICkgPT09IGZhbHNlICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwg
dHlwZSwgZWxlbURhdGEuaGFuZGxlICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZXZlbnRzWyB0eXBl
IF07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBleHBhbmRvIGlmIGl0J3Mgbm8gbG9uZ2VyIHVzZWQK
KyAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBldmVudHMgKSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlbGVtRGF0YS5oYW5kbGU7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZURhdGEgYWxzbyBjaGVja3MgZm9yIGVtcHRpbmVz
cyBhbmQgY2xlYXJzIHRoZSBleHBhbmRvIGlmIGVtcHR5CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBzbyB1c2UgaXQgaW5zdGVhZCBvZiBkZWxldGUKKyAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5yZW1vdmVEYXRhKCBlbGVtLCAiZXZlbnRzIiwgdHJ1ZSApOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICAvLyBFdmVudHMgdGhhdCBhcmUgc2FmZSB0byBz
aG9ydC1jaXJjdWl0IGlmIG5vIGhhbmRsZXJzIGFyZSBhdHRhY2hlZC4KKyAgICAgICAgLy8gTmF0
aXZlIERPTSBldmVudHMgc2hvdWxkIG5vdCBiZSBhZGRlZCwgdGhleSBtYXkgaGF2ZSBpbmxpbmUg
aGFuZGxlcnMuCisgICAgICAgIGN1c3RvbUV2ZW50OiB7CisgICAgICAgICAgICAgICAgImdldERh
dGEiOiB0cnVlLAorICAgICAgICAgICAgICAgICJzZXREYXRhIjogdHJ1ZSwKKyAgICAgICAgICAg
ICAgICAiY2hhbmdlRGF0YSI6IHRydWUKKyAgICAgICAgfSwKKworICAgICAgICB0cmlnZ2VyOiBm
dW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyApIHsKKyAgICAgICAgICAg
ICAgICAvLyBEb24ndCBkbyBldmVudHMgb24gdGV4dCBhbmQgY29tbWVudCBub2RlcworICAgICAg
ICAgICAgICAgIGlmICggZWxlbSAmJiAoZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVU
eXBlID09PSA4KSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBFdmVudCBvYmplY3Qgb3IgZXZlbnQgdHlw
ZQorICAgICAgICAgICAgICAgIHZhciBjYWNoZSwgZXhjbHVzaXZlLCBpLCBjdXIsIG9sZCwgb250
eXBlLCBzcGVjaWFsLCBoYW5kbGUsIGV2ZW50UGF0aCwgYnViYmxlVHlwZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGUgPSBldmVudC50eXBlIHx8IGV2ZW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZXNwYWNlcyA9IFtdOworCisgICAgICAgICAgICAgICAgLy8gZm9jdXMvYmx1
ciBtb3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3QgZmlyaW5nIHRoZW0gcmln
aHQgbm93CisgICAgICAgICAgICAgICAgaWYgKCByZm9jdXNNb3JwaC50ZXN0KCB0eXBlICsgalF1
ZXJ5LmV2ZW50LnRyaWdnZXJlZCApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICggdHlwZS5pbmRleE9m
KCAiISIgKSA+PSAwICkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXhjbHVzaXZlIGV2
ZW50cyB0cmlnZ2VyIG9ubHkgZm9yIHRoZSBleGFjdCBldmVudCAobm8gbmFtZXNwYWNlcykKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlLnNsaWNlKDAsIC0xKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGV4Y2x1c2l2ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgaWYgKCB0eXBlLmluZGV4T2YoICIuIiApID49IDAgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBOYW1lc3BhY2VkIHRyaWdnZXI7IGNyZWF0ZSBhIHJlZ2V4cCB0
byBtYXRjaCBldmVudCB0eXBlIGluIGhhbmRsZSgpCisgICAgICAgICAgICAgICAgICAgICAgICBu
YW1lc3BhY2VzID0gdHlwZS5zcGxpdCgiLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFj
ZXMuc29ydCgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICggKCFl
bGVtIHx8IGpRdWVyeS5ldmVudC5jdXN0b21FdmVudFsgdHlwZSBdKSAmJiAhalF1ZXJ5LmV2ZW50
Lmdsb2JhbFsgdHlwZSBdICkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8galF1ZXJ5
IGhhbmRsZXJzIGZvciB0aGlzIGV2ZW50IHR5cGUsIGFuZCBpdCBjYW4ndCBoYXZlIGlubGluZSBo
YW5kbGVycworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIC8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBFdmVudCwgT2Jq
ZWN0LCBvciBqdXN0IGFuIGV2ZW50IHR5cGUgc3RyaW5nCisgICAgICAgICAgICAgICAgZXZlbnQg
PSB0eXBlb2YgZXZlbnQgPT09ICJvYmplY3QiID8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGpRdWVyeS5FdmVudCBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50WyBqUXVl
cnkuZXhwYW5kbyBdID8gZXZlbnQgOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gT2JqZWN0
IGxpdGVyYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUs
IGV2ZW50ICkgOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gSnVzdCB0aGUgZXZlbnQgdHlw
ZSAoc3RyaW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGpRdWVyeS5FdmVudCggdHlw
ZSApOworCisgICAgICAgICAgICAgICAgZXZlbnQudHlwZSA9IHR5cGU7CisgICAgICAgICAgICAg
ICAgZXZlbnQuaXNUcmlnZ2VyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBldmVudC5leGNsdXNp
dmUgPSBleGNsdXNpdmU7CisgICAgICAgICAgICAgICAgZXZlbnQubmFtZXNwYWNlID0gbmFtZXNw
YWNlcy5qb2luKCAiLiIgKTsKKyAgICAgICAgICAgICAgICBldmVudC5uYW1lc3BhY2VfcmUgPSBl
dmVudC5uYW1lc3BhY2U/IG5ldyBSZWdFeHAoIihefFxcLikiICsgbmFtZXNwYWNlcy5qb2luKCJc
XC4oPzouKlxcLnwpIikgKyAiKFxcLnwkKSIpIDogbnVsbDsKKyAgICAgICAgICAgICAgICBvbnR5
cGUgPSB0eXBlLmluZGV4T2YoICI6IiApIDwgMCA/ICJvbiIgKyB0eXBlIDogIiI7CisKKyAgICAg
ICAgICAgICAgICAvLyBIYW5kbGUgYSBnbG9iYWwgdHJpZ2dlcgorICAgICAgICAgICAgICAgIGlm
ICggIWVsZW0gKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFN0b3AgdGF1
bnRpbmcgdGhlIGRhdGEgY2FjaGU7IHJlbW92ZSBnbG9iYWwgZXZlbnRzIGFuZCBhbHdheXMgYXR0
YWNoIHRvIGRvY3VtZW50CisgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZSA9IGpRdWVyeS5j
YWNoZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgaW4gY2FjaGUgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FjaGVbIGkgXS5ldmVudHMgJiYgY2Fj
aGVbIGkgXS5ldmVudHNbIHR5cGUgXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggZXZlbnQsIGRhdGEsIGNhY2hlWyBpIF0u
aGFuZGxlLmVsZW0sIHRydWUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIENsZWFuIHVwIHRoZSBl
dmVudCBpbiBjYXNlIGl0IGlzIGJlaW5nIHJldXNlZAorICAgICAgICAgICAgICAgIGV2ZW50LnJl
c3VsdCA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICBpZiAoICFldmVudC50YXJnZXQgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBldmVudC50YXJnZXQgPSBlbGVtOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIENsb25lIGFueSBpbmNvbWluZyBkYXRhIGFu
ZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRpbmcgdGhlIGhhbmRsZXIgYXJnIGxpc3QKKyAgICAg
ICAgICAgICAgICBkYXRhID0gZGF0YSAhPSBudWxsID8galF1ZXJ5Lm1ha2VBcnJheSggZGF0YSAp
IDogW107CisgICAgICAgICAgICAgICAgZGF0YS51bnNoaWZ0KCBldmVudCApOworCisgICAgICAg
ICAgICAgICAgLy8gQWxsb3cgc3BlY2lhbCBldmVudHMgdG8gZHJhdyBvdXRzaWRlIHRoZSBsaW5l
cworICAgICAgICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBd
IHx8IHt9OworICAgICAgICAgICAgICAgIGlmICggc3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwu
dHJpZ2dlci5hcHBseSggZWxlbSwgZGF0YSApID09PSBmYWxzZSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAv
LyBEZXRlcm1pbmUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2
ZW50cyBzcGVjICgjOTk1MSkKKyAgICAgICAgICAgICAgICAvLyBCdWJibGUgdXAgdG8gZG9jdW1l
bnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwgb3duZXJEb2N1bWVudCB2YXIg
KCM5NzI0KQorICAgICAgICAgICAgICAgIGV2ZW50UGF0aCA9IFtbIGVsZW0sIHNwZWNpYWwuYmlu
ZFR5cGUgfHwgdHlwZSBdXTsKKyAgICAgICAgICAgICAgICBpZiAoICFvbmx5SGFuZGxlcnMgJiYg
IXNwZWNpYWwubm9CdWJibGUgJiYgIWpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkgeworCisgICAg
ICAgICAgICAgICAgICAgICAgICBidWJibGVUeXBlID0gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgfHwg
dHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IHJmb2N1c01vcnBoLnRlc3QoIGJ1
YmJsZVR5cGUgKyB0eXBlICkgPyBlbGVtIDogZWxlbS5wYXJlbnROb2RlOworICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICggb2xkID0gZWxlbTsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRQYXRoLnB1c2goWyBjdXIs
IGJ1YmJsZVR5cGUgXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZCA9IGN1
cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gT25seSBhZGQgd2luZG93IGlmIHdlIGdvdCB0byBkb2N1bWVudCAoZS5nLiwgbm90IHBsYWlu
IG9iaiBvciBkZXRhY2hlZCBET00pCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9sZCA9
PT0gKGVsZW0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCkgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV2ZW50UGF0aC5wdXNoKFsgb2xkLmRlZmF1bHRWaWV3IHx8IG9sZC5w
YXJlbnRXaW5kb3cgfHwgd2luZG93LCBidWJibGVUeXBlIF0pOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEZpcmUgaGFu
ZGxlcnMgb24gdGhlIGV2ZW50IHBhdGgKKyAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8
IGV2ZW50UGF0aC5sZW5ndGggJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7IGkrKyAp
IHsKKworICAgICAgICAgICAgICAgICAgICAgICAgY3VyID0gZXZlbnRQYXRoW2ldWzBdOworICAg
ICAgICAgICAgICAgICAgICAgICAgZXZlbnQudHlwZSA9IGV2ZW50UGF0aFtpXVsxXTsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgaGFuZGxlID0gKCBqUXVlcnkuX2RhdGEoIGN1ciwgImV2ZW50
cyIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gJiYgalF1ZXJ5Ll9kYXRhKCBjdXIsICJoYW5kbGUi
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhhbmRsZSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0
aGlzIGlzIGEgYmFyZSBKUyBmdW5jdGlvbiBhbmQgbm90IGEgalF1ZXJ5IGhhbmRsZXIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGhhbmRsZSA9IG9udHlwZSAmJiBjdXJbIG9udHlwZSBdOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBoYW5kbGUgJiYgalF1ZXJ5LmFjY2VwdERhdGEoIGN1
ciApICYmIGhhbmRsZS5hcHBseSAmJiBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApID09PSBmYWxz
ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1
bHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZXZlbnQudHlwZSA9IHR5cGU7CisKKyAgICAgICAgICAgICAgICAvLyBJZiBu
b2JvZHkgcHJldmVudGVkIHRoZSBkZWZhdWx0IGFjdGlvbiwgZG8gaXQgbm93CisgICAgICAgICAg
ICAgICAgaWYgKCAhb25seUhhbmRsZXJzICYmICFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSAp
IHsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoIXNwZWNpYWwuX2RlZmF1bHQgfHwg
c3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZWxlbS5vd25lckRvY3VtZW50LCBkYXRhICkgPT09IGZh
bHNlKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKHR5cGUgPT09ICJjbGlj
ayIgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiYSIgKSkgJiYgalF1ZXJ5LmFjY2VwdERhdGEo
IGVsZW0gKSApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsIGEg
bmF0aXZlIERPTSBtZXRob2Qgb24gdGhlIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgbmFtZSBh
cyB0aGUgZXZlbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbid0IHVz
ZSBhbiAuaXNGdW5jdGlvbigpIGNoZWNrIGhlcmUgYmVjYXVzZSBJRTYvNyBmYWlscyB0aGF0IHRl
c3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGRvIGRlZmF1bHQg
YWN0aW9ucyBvbiB3aW5kb3csIHRoYXQncyB3aGVyZSBnbG9iYWwgdmFyaWFibGVzIGJlICgjNjE3
MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUU8OSBkaWVzIG9uIGZvY3Vz
L2JsdXIgdG8gaGlkZGVuIGVsZW1lbnQgKCMxNDg2KQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIG9udHlwZSAmJiBlbGVtWyB0eXBlIF0gJiYgKCh0eXBlICE9PSAiZm9jdXMi
ICYmIHR5cGUgIT09ICJibHVyIikgfHwgZXZlbnQudGFyZ2V0Lm9mZnNldFdpZHRoICE9PSAwKSAm
JiAhalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBEb24ndCByZS10cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4g
d2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb2xkID0gZWxlbVsgb250eXBlIF07CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIG9sZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsZW1bIG9udHlwZSBdID0gbnVsbDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IHJlLXRyaWdnZXJpbmcgb2YgdGhlIHNhbWUgZXZl
bnQsIHNpbmNlIHdlIGFscmVhZHkgYnViYmxlZCBpdCBhYm92ZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bIHR5cGUgXSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC50cmlnZ2Vy
ZWQgPSB1bmRlZmluZWQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIG9sZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW1bIG9udHlwZSBdID0gb2xkOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IHJldHVybiBldmVudC5yZXN1bHQ7CisgICAgICAgIH0sCisKKyAgICAgICAgZGlzcGF0Y2g6IGZ1
bmN0aW9uKCBldmVudCApIHsKKworICAgICAgICAgICAgICAgIC8vIE1ha2UgYSB3cml0YWJsZSBq
UXVlcnkuRXZlbnQgZnJvbSB0aGUgbmF0aXZlIGV2ZW50IG9iamVjdAorICAgICAgICAgICAgICAg
IGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgfHwgd2luZG93LmV2ZW50ICk7CisKKyAg
ICAgICAgICAgICAgICB2YXIgaSwgaiwgY3VyLCByZXQsIHNlbE1hdGNoLCBtYXRjaGVkLCBtYXRj
aGVzLCBoYW5kbGVPYmosIHNlbCwgcmVsYXRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhh
bmRsZXJzID0gKCAoalF1ZXJ5Ll9kYXRhKCB0aGlzLCAiZXZlbnRzIiApIHx8IHt9IClbIGV2ZW50
LnR5cGUgXSB8fCBbXSksCisgICAgICAgICAgICAgICAgICAgICAgICBkZWxlZ2F0ZUNvdW50ID0g
aGFuZGxlcnMuZGVsZWdhdGVDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBj
b3JlX3NsaWNlLmNhbGwoIGFyZ3VtZW50cyApLAorICAgICAgICAgICAgICAgICAgICAgICAgcnVu
X2FsbCA9ICFldmVudC5leGNsdXNpdmUgJiYgIWV2ZW50Lm5hbWVzcGFjZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZXZlbnQudHlwZSBd
IHx8IHt9LAorICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlclF1ZXVlID0gW107CisKKyAg
ICAgICAgICAgICAgICAvLyBVc2UgdGhlIGZpeC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVyIHRoYW4g
dGhlIChyZWFkLW9ubHkpIG5hdGl2ZSBldmVudAorICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSBl
dmVudDsKKyAgICAgICAgICAgICAgICBldmVudC5kZWxlZ2F0ZVRhcmdldCA9IHRoaXM7CisKKyAg
ICAgICAgICAgICAgICAvLyBDYWxsIHRoZSBwcmVEaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVk
IHR5cGUsIGFuZCBsZXQgaXQgYmFpbCBpZiBkZXNpcmVkCisgICAgICAgICAgICAgICAgaWYgKCBz
cGVjaWFsLnByZURpc3BhdGNoICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZl
bnQgKSA9PT0gZmFsc2UgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIGhhbmRsZXJzIHRo
YXQgc2hvdWxkIHJ1biBpZiB0aGVyZSBhcmUgZGVsZWdhdGVkIGV2ZW50cworICAgICAgICAgICAg
ICAgIC8vIEF2b2lkIG5vbi1sZWZ0LWNsaWNrIGJ1YmJsaW5nIGluIEZpcmVmb3ggKCMzODYxKQor
ICAgICAgICAgICAgICAgIGlmICggZGVsZWdhdGVDb3VudCAmJiAhKGV2ZW50LmJ1dHRvbiAmJiBl
dmVudC50eXBlID09PSAiY2xpY2siKSApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICggY3VyID0gZXZlbnQudGFyZ2V0OyBjdXIgIT0gdGhpczsgY3VyID0gY3VyLnBhcmVudE5vZGUg
fHwgdGhpcyApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBw
cm9jZXNzIGNsaWNrcyAoT05MWSkgb24gZGlzYWJsZWQgZWxlbWVudHMgKCM2OTExLCAjODE2NSwg
IzExMzgyLCAjMTE3NjQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY3Vy
LmRpc2FibGVkICE9PSB0cnVlIHx8IGV2ZW50LnR5cGUgIT09ICJjbGljayIgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsTWF0Y2ggPSB7fTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzID0gW107CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBkZWxlZ2F0ZUNv
dW50OyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoYW5kbGVPYmogPSBoYW5kbGVyc1sgaSBdOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsID0gaGFuZGxlT2JqLnNlbGVjdG9yOworCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNlbE1hdGNo
WyBzZWwgXSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxNYXRjaFsgc2VsIF0gPSBoYW5kbGVPYmoubmVl
ZHNDb250ZXh0ID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHNlbCwgdGhpcyApLmluZGV4KCBjdXIgKSA+PSAw
IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuZmluZCggc2VsLCB0aGlzLCBudWxsLCBbIGN1ciBdICkubGVuZ3Ro
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzZWxNYXRj
aFsgc2VsIF0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1hdGNoZXMucHVzaCggaGFuZGxlT2JqICk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggbWF0Y2hlcy5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoYW5kbGVyUXVldWUucHVzaCh7IGVsZW06IGN1ciwgbWF0Y2hl
czogbWF0Y2hlcyB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIHJl
bWFpbmluZyAoZGlyZWN0bHktYm91bmQpIGhhbmRsZXJzCisgICAgICAgICAgICAgICAgaWYgKCBo
YW5kbGVycy5sZW5ndGggPiBkZWxlZ2F0ZUNvdW50ICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaGFuZGxlclF1ZXVlLnB1c2goeyBlbGVtOiB0aGlzLCBtYXRjaGVzOiBoYW5kbGVycy5zbGlj
ZSggZGVsZWdhdGVDb3VudCApIH0pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIC8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdh
dGlvbiBiZW5lYXRoIHVzCisgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBoYW5kbGVy
UXVldWUubGVuZ3RoICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpOyBpKysgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkID0gaGFuZGxlclF1ZXVlWyBpIF07CisgICAg
ICAgICAgICAgICAgICAgICAgICBldmVudC5jdXJyZW50VGFyZ2V0ID0gbWF0Y2hlZC5lbGVtOwor
CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBqID0gMDsgaiA8IG1hdGNoZWQubWF0Y2hl
cy5sZW5ndGggJiYgIWV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCk7IGorKyAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqID0gbWF0Y2hlZC5t
YXRjaGVzWyBqIF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJpZ2dl
cmVkIGV2ZW50IG11c3QgZWl0aGVyIDEpIGJlIG5vbi1leGNsdXNpdmUgYW5kIGhhdmUgbm8gbmFt
ZXNwYWNlLCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAyKSBoYXZlIG5h
bWVzcGFjZShzKSBhIHN1YnNldCBvciBlcXVhbCB0byB0aG9zZSBpbiB0aGUgYm91bmQgZXZlbnQg
KGJvdGggY2FuIGhhdmUgbm8gbmFtZXNwYWNlKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBydW5fYWxsIHx8ICghZXZlbnQubmFtZXNwYWNlICYmICFoYW5kbGVPYmoubmFt
ZXNwYWNlKSB8fCBldmVudC5uYW1lc3BhY2VfcmUgJiYgZXZlbnQubmFtZXNwYWNlX3JlLnRlc3Qo
IGhhbmRsZU9iai5uYW1lc3BhY2UgKSApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV2ZW50LmRhdGEgPSBoYW5kbGVPYmouZGF0YTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5oYW5kbGVPYmogPSBoYW5kbGVPYmo7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAoIChqUXVlcnku
ZXZlbnQuc3BlY2lhbFsgaGFuZGxlT2JqLm9yaWdUeXBlIF0gfHwge30pLmhhbmRsZSB8fCBoYW5k
bGVPYmouaGFuZGxlciApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC5hcHBseSggbWF0Y2hlZC5lbGVtLCBhcmdzICk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJldCAhPT0gdW5kZWZpbmVkICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQu
cmVzdWx0ID0gcmV0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCByZXQgPT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVu
dC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBDYWxsIHRoZSBw
b3N0RGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlCisgICAgICAgICAgICAgICAgaWYg
KCBzcGVjaWFsLnBvc3REaXNwYXRjaCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNp
YWwucG9zdERpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICk7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnJlc3VsdDsKKyAgICAgICAgfSwKKworICAg
ICAgICAvLyBJbmNsdWRlcyBzb21lIGV2ZW50IHByb3BzIHNoYXJlZCBieSBLZXlFdmVudCBhbmQg
TW91c2VFdmVudAorICAgICAgICAvLyAqKiogYXR0ckNoYW5nZSBhdHRyTmFtZSByZWxhdGVkTm9k
ZSBzcmNFbGVtZW50ICBhcmUgbm90IG5vcm1hbGl6ZWQsIG5vbi1XM0MsIGRlcHJlY2F0ZWQsIHdp
bGwgYmUgcmVtb3ZlZCBpbiAxLjggKioqCisgICAgICAgIHByb3BzOiAiYXR0ckNoYW5nZSBhdHRy
TmFtZSByZWxhdGVkTm9kZSBzcmNFbGVtZW50IGFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3Ry
bEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0
S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSwKKworICAgICAgICBm
aXhIb29rczoge30sCisKKyAgICAgICAga2V5SG9va3M6IHsKKyAgICAgICAgICAgICAgICBwcm9w
czogImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksCisgICAgICAgICAgICAg
ICAgZmlsdGVyOiBmdW5jdGlvbiggZXZlbnQsIG9yaWdpbmFsICkgeworCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBBZGQgd2hpY2ggZm9yIGtleSBldmVudHMKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggZXZlbnQud2hpY2ggPT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXZlbnQud2hpY2ggPSBvcmlnaW5hbC5jaGFyQ29kZSAhPSBudWxsID8gb3Jp
Z2luYWwuY2hhckNvZGUgOiBvcmlnaW5hbC5rZXlDb2RlOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIG1vdXNlSG9va3M6IHsKKyAgICAgICAgICAg
ICAgICBwcm9wczogImJ1dHRvbiBidXR0b25zIGNsaWVudFggY2xpZW50WSBmcm9tRWxlbWVudCBv
ZmZzZXRYIG9mZnNldFkgcGFnZVggcGFnZVkgc2NyZWVuWCBzY3JlZW5ZIHRvRWxlbWVudCIuc3Bs
aXQoIiAiKSwKKyAgICAgICAgICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uKCBldmVudCwgb3JpZ2lu
YWwgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXZlbnREb2MsIGRvYywgYm9keSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uID0gb3JpZ2luYWwuYnV0dG9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tRWxlbWVudCA9IG9yaWdpbmFs
LmZyb21FbGVtZW50OworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgcGFn
ZVgvWSBpZiBtaXNzaW5nIGFuZCBjbGllbnRYL1kgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGV2ZW50LnBhZ2VYID09IG51bGwgJiYgb3JpZ2luYWwuY2xpZW50WCAhPSBu
dWxsICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudERvYyA9IGV2ZW50
LnRhcmdldC5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50OworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkb2MgPSBldmVudERvYy5kb2N1bWVudEVsZW1lbnQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvZHkgPSBldmVudERvYy5ib2R5OworCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV2ZW50LnBhZ2VYID0gb3JpZ2luYWwuY2xpZW50WCArICggZG9j
ICYmIGRvYy5zY3JvbGxMZWZ0IHx8IGJvZHkgJiYgYm9keS5zY3JvbGxMZWZ0IHx8IDAgKSAtICgg
ZG9jICYmIGRvYy5jbGllbnRMZWZ0IHx8IGJvZHkgJiYgYm9keS5jbGllbnRMZWZ0IHx8IDAgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucGFnZVkgPSBvcmlnaW5hbC5j
bGllbnRZICsgKCBkb2MgJiYgZG9jLnNjcm9sbFRvcCAgfHwgYm9keSAmJiBib2R5LnNjcm9sbFRv
cCAgfHwgMCApIC0gKCBkb2MgJiYgZG9jLmNsaWVudFRvcCAgfHwgYm9keSAmJiBib2R5LmNsaWVu
dFRvcCAgfHwgMCApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBBZGQgcmVsYXRlZFRhcmdldCwgaWYgbmVjZXNzYXJ5CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoICFldmVudC5yZWxhdGVkVGFyZ2V0ICYmIGZyb21FbGVtZW50ICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5yZWxhdGVkVGFyZ2V0ID0g
ZnJvbUVsZW1lbnQgPT09IGV2ZW50LnRhcmdldCA/IG9yaWdpbmFsLnRvRWxlbWVudCA6IGZyb21F
bGVtZW50OworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBBZGQgd2hpY2ggZm9yIGNsaWNrOiAxID09PSBsZWZ0OyAyID09PSBtaWRkbGU7IDMg
PT09IHJpZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlOiBidXR0b24gaXMgbm90
IG5vcm1hbGl6ZWQsIHNvIGRvbid0IHVzZSBpdAorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAhZXZlbnQud2hpY2ggJiYgYnV0dG9uICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV2ZW50LndoaWNoID0gKCBidXR0b24gJiAxID8gMSA6ICggYnV0
dG9uICYgMiA/IDMgOiAoIGJ1dHRvbiAmIDQgPyAyIDogMCApICkgKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50OworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICBmaXg6IGZ1bmN0aW9uKCBldmVu
dCApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50OworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIHdyaXRhYmxlIGNvcHkgb2YgdGhlIGV2ZW50
IG9iamVjdCBhbmQgbm9ybWFsaXplIHNvbWUgcHJvcGVydGllcworICAgICAgICAgICAgICAgIHZh
ciBpLCBwcm9wLAorICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudCA9IGV2ZW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgZml4SG9vayA9IGpRdWVyeS5ldmVudC5maXhIb29r
c1sgZXZlbnQudHlwZSBdIHx8IHt9LAorICAgICAgICAgICAgICAgICAgICAgICAgY29weSA9IGZp
eEhvb2sucHJvcHMgPyB0aGlzLnByb3BzLmNvbmNhdCggZml4SG9vay5wcm9wcyApIDogdGhpcy5w
cm9wczsKKworICAgICAgICAgICAgICAgIGV2ZW50ID0galF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2
ZW50ICk7CisKKyAgICAgICAgICAgICAgICBmb3IgKCBpID0gY29weS5sZW5ndGg7IGk7ICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvcCA9IGNvcHlbIC0taSBdOworICAgICAgICAgICAg
ICAgICAgICAgICAgZXZlbnRbIHByb3AgXSA9IG9yaWdpbmFsRXZlbnRbIHByb3AgXTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBGaXggdGFyZ2V0IHByb3BlcnR5LCBp
ZiBuZWNlc3NhcnkgKCMxOTI1LCBJRSA2LzcvOCAmIFNhZmFyaTIpCisgICAgICAgICAgICAgICAg
aWYgKCAhZXZlbnQudGFyZ2V0ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQudGFy
Z2V0ID0gb3JpZ2luYWxFdmVudC5zcmNFbGVtZW50IHx8IGRvY3VtZW50OworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFRhcmdldCBzaG91bGQgbm90IGJlIGEgdGV4dCBu
b2RlICgjNTA0LCBTYWZhcmkpCisgICAgICAgICAgICAgICAgaWYgKCBldmVudC50YXJnZXQubm9k
ZVR5cGUgPT09IDMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBldmVudC50YXJnZXQgPSBl
dmVudC50YXJnZXQucGFyZW50Tm9kZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAvLyBGb3IgbW91c2Uva2V5IGV2ZW50cywgbWV0YUtleT09ZmFsc2UgaWYgaXQncyB1bmRl
ZmluZWQgKCMzMzY4LCAjMTEzMjg7IElFNi83LzgpCisgICAgICAgICAgICAgICAgZXZlbnQubWV0
YUtleSA9ICEhZXZlbnQubWV0YUtleTsKKworICAgICAgICAgICAgICAgIHJldHVybiBmaXhIb29r
LmZpbHRlcj8gZml4SG9vay5maWx0ZXIoIGV2ZW50LCBvcmlnaW5hbEV2ZW50ICkgOiBldmVudDsK
KyAgICAgICAgfSwKKworICAgICAgICBzcGVjaWFsOiB7CisgICAgICAgICAgICAgICAgbG9hZDog
eworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJldmVudCB0cmlnZ2VyZWQgaW1hZ2UubG9h
ZCBldmVudHMgZnJvbSBidWJibGluZyB0byB3aW5kb3cubG9hZAorICAgICAgICAgICAgICAgICAg
ICAgICAgbm9CdWJibGU6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAg
ICAgZm9jdXM6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGVnYXRlVHlwZTogImZvY3Vz
aW4iCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBibHVyOiB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBkZWxlZ2F0ZVR5cGU6ICJmb2N1c291dCIKKyAgICAgICAgICAgICAg
ICB9LAorCisgICAgICAgICAgICAgICAgYmVmb3JldW5sb2FkOiB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzZXR1cDogZnVuY3Rpb24oIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gZG8g
dGhpcyBzcGVjaWFsIGNhc2Ugb24gd2luZG93cworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGpRdWVyeS5pc1dpbmRvdyggdGhpcyApICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25iZWZvcmV1bmxvYWQgPSBldmVudEhhbmRsZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgfSwKKworICAgICAgICAgICAgICAgICAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCBuYW1l
c3BhY2VzLCBldmVudEhhbmRsZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCB0aGlzLm9uYmVmb3JldW5sb2FkID09PSBldmVudEhhbmRsZSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uYmVmb3JldW5sb2FkID0gbnVsbDsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICBzaW11bGF0ZTog
ZnVuY3Rpb24oIHR5cGUsIGVsZW0sIGV2ZW50LCBidWJibGUgKSB7CisgICAgICAgICAgICAgICAg
Ly8gUGlnZ3liYWNrIG9uIGEgZG9ub3IgZXZlbnQgdG8gc2ltdWxhdGUgYSBkaWZmZXJlbnQgb25l
LgorICAgICAgICAgICAgICAgIC8vIEZha2Ugb3JpZ2luYWxFdmVudCB0byBhdm9pZCBkb25vcidz
IHN0b3BQcm9wYWdhdGlvbiwgYnV0IGlmIHRoZQorICAgICAgICAgICAgICAgIC8vIHNpbXVsYXRl
ZCBldmVudCBwcmV2ZW50cyBkZWZhdWx0IHRoZW4gd2UgZG8gdGhlIHNhbWUgb24gdGhlIGRvbm9y
LgorICAgICAgICAgICAgICAgIHZhciBlID0galF1ZXJ5LmV4dGVuZCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG5ldyBqUXVlcnkuRXZlbnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2
ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiB0eXBlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpc1NpbXVsYXRlZDogdHJ1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDoge30KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIGlmICggYnViYmxlICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGUsIG51bGwsIGVs
ZW0gKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmNhbGwoIGVsZW0sIGUgKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKCBlLmlzRGVmYXVsdFByZXZlbnRlZCgpICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgIH0KK307CisKKy8vIFNvbWUgcGx1Z2lucyBhcmUgdXNpbmcsIGJ1dCBpdCdz
IHVuZG9jdW1lbnRlZC9kZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQuCisvLyBUaGUgMS43
IHNwZWNpYWwgZXZlbnQgaW50ZXJmYWNlIHNob3VsZCBwcm92aWRlIGFsbCB0aGUgaG9va3MgbmVl
ZGVkIG5vdy4KK2pRdWVyeS5ldmVudC5oYW5kbGUgPSBqUXVlcnkuZXZlbnQuZGlzcGF0Y2g7CisK
K2pRdWVyeS5yZW1vdmVFdmVudCA9IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIgPworICAg
ICAgICBmdW5jdGlvbiggZWxlbSwgdHlwZSwgaGFuZGxlICkgeworICAgICAgICAgICAgICAgIGlm
ICggZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGUsIGZhbHNlICk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICB9IDoKKyAgICAgICAgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhh
bmRsZSApIHsKKyAgICAgICAgICAgICAgICB2YXIgbmFtZSA9ICJvbiIgKyB0eXBlOworCisgICAg
ICAgICAgICAgICAgaWYgKCBlbGVtLmRldGFjaEV2ZW50ICkgeworCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAjODU0NSwgIzcwNTQsIHByZXZlbnRpbmcgbWVtb3J5IGxlYWtzIGZvciBjdXN0
b20gZXZlbnRzIGluIElFNi04CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZXRhY2hFdmVu
dCBuZWVkZWQgcHJvcGVydHkgb24gZWxlbWVudCwgYnkgbmFtZSBvZiB0aGF0IGV2ZW50LCB0byBw
cm9wZXJseSBleHBvc2UgaXQgdG8gR0MKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlw
ZW9mIGVsZW1bIG5hbWUgXSA9PT0gInVuZGVmaW5lZCIgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsZW1bIG5hbWUgXSA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uZGV0YWNoRXZlbnQoIG5hbWUsIGhh
bmRsZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworalF1ZXJ5LkV2ZW50ID0g
ZnVuY3Rpb24oIHNyYywgcHJvcHMgKSB7CisgICAgICAgIC8vIEFsbG93IGluc3RhbnRpYXRpb24g
d2l0aG91dCB0aGUgJ25ldycga2V5d29yZAorICAgICAgICBpZiAoICEodGhpcyBpbnN0YW5jZW9m
IGpRdWVyeS5FdmVudCkgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBqUXVlcnkuRXZl
bnQoIHNyYywgcHJvcHMgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEV2ZW50IG9iamVjdAor
ICAgICAgICBpZiAoIHNyYyAmJiBzcmMudHlwZSApIHsKKyAgICAgICAgICAgICAgICB0aGlzLm9y
aWdpbmFsRXZlbnQgPSBzcmM7CisgICAgICAgICAgICAgICAgdGhpcy50eXBlID0gc3JjLnR5cGU7
CisKKyAgICAgICAgICAgICAgICAvLyBFdmVudHMgYnViYmxpbmcgdXAgdGhlIGRvY3VtZW50IG1h
eSBoYXZlIGJlZW4gbWFya2VkIGFzIHByZXZlbnRlZAorICAgICAgICAgICAgICAgIC8vIGJ5IGEg
aGFuZGxlciBsb3dlciBkb3duIHRoZSB0cmVlOyByZWZsZWN0IHRoZSBjb3JyZWN0IHZhbHVlLgor
ICAgICAgICAgICAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gKCBzcmMuZGVmYXVsdFBy
ZXZlbnRlZCB8fCBzcmMucmV0dXJuVmFsdWUgPT09IGZhbHNlIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgICBzcmMuZ2V0UHJldmVudERlZmF1bHQgJiYgc3JjLmdldFByZXZlbnREZWZhdWx0KCkg
KSA/IHJldHVyblRydWUgOiByZXR1cm5GYWxzZTsKKworICAgICAgICAvLyBFdmVudCB0eXBlCisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy50eXBlID0gc3JjOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gUHV0IGV4cGxpY2l0bHkgcHJvdmlkZWQgcHJvcGVydGllcyBvbnRv
IHRoZSBldmVudCBvYmplY3QKKyAgICAgICAgaWYgKCBwcm9wcyApIHsKKyAgICAgICAgICAgICAg
ICBqUXVlcnkuZXh0ZW5kKCB0aGlzLCBwcm9wcyApOworICAgICAgICB9CisKKyAgICAgICAgLy8g
Q3JlYXRlIGEgdGltZXN0YW1wIGlmIGluY29taW5nIGV2ZW50IGRvZXNuJ3QgaGF2ZSBvbmUKKyAg
ICAgICAgdGhpcy50aW1lU3RhbXAgPSBzcmMgJiYgc3JjLnRpbWVTdGFtcCB8fCBqUXVlcnkubm93
KCk7CisKKyAgICAgICAgLy8gTWFyayBpdCBhcyBmaXhlZAorICAgICAgICB0aGlzWyBqUXVlcnku
ZXhwYW5kbyBdID0gdHJ1ZTsKK307CisKK2Z1bmN0aW9uIHJldHVybkZhbHNlKCkgeworICAgICAg
ICByZXR1cm4gZmFsc2U7Cit9CitmdW5jdGlvbiByZXR1cm5UcnVlKCkgeworICAgICAgICByZXR1
cm4gdHJ1ZTsKK30KKworLy8galF1ZXJ5LkV2ZW50IGlzIGJhc2VkIG9uIERPTTMgRXZlbnRzIGFz
IHNwZWNpZmllZCBieSB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBCaW5kaW5nCisvLyBodHRwOi8v
d3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDAzMDMzMS9lY21hLXNj
cmlwdC1iaW5kaW5nLmh0bWwKK2pRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7CisgICAgICAgIHBy
ZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmlzRGVmYXVs
dFByZXZlbnRlZCA9IHJldHVyblRydWU7CisKKyAgICAgICAgICAgICAgICB2YXIgZSA9IHRoaXMu
b3JpZ2luYWxFdmVudDsKKyAgICAgICAgICAgICAgICBpZiAoICFlICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IC8vIGlmIHByZXZlbnREZWZhdWx0IGV4aXN0cyBydW4gaXQgb24gdGhlIG9yaWdpbmFsIGV2ZW50
CisgICAgICAgICAgICAgICAgaWYgKCBlLnByZXZlbnREZWZhdWx0ICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworCisgICAgICAgICAgICAgICAgLy8gb3Ro
ZXJ3aXNlIHNldCB0aGUgcmV0dXJuVmFsdWUgcHJvcGVydHkgb2YgdGhlIG9yaWdpbmFsIGV2ZW50
IHRvIGZhbHNlIChJRSkKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgfSwKKyAgICAgICAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTsKKworICAgICAgICAg
ICAgICAgIHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50OworICAgICAgICAgICAgICAgIGlmICgg
IWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIC8vIGlmIHN0b3BQcm9wYWdhdGlvbiBleGlzdHMgcnVuIGl0IG9u
IHRoZSBvcmlnaW5hbCBldmVudAorICAgICAgICAgICAgICAgIGlmICggZS5zdG9wUHJvcGFnYXRp
b24gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2Ugc2V0IHRoZSBjYW5j
ZWxCdWJibGUgcHJvcGVydHkgb2YgdGhlIG9yaWdpbmFsIGV2ZW50IHRvIHRydWUgKElFKQorICAg
ICAgICAgICAgICAgIGUuY2FuY2VsQnViYmxlID0gdHJ1ZTsKKyAgICAgICAgfSwKKyAgICAgICAg
c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTsKKyAgICAgICAg
ICAgICAgICB0aGlzLnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICB9LAorICAgICAgICBpc0Rl
ZmF1bHRQcmV2ZW50ZWQ6IHJldHVybkZhbHNlLAorICAgICAgICBpc1Byb3BhZ2F0aW9uU3RvcHBl
ZDogcmV0dXJuRmFsc2UsCisgICAgICAgIGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiBy
ZXR1cm5GYWxzZQorfTsKKworLy8gQ3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUgZXZlbnRzIHVzaW5n
IG1vdXNlb3Zlci9vdXQgYW5kIGV2ZW50LXRpbWUgY2hlY2tzCitqUXVlcnkuZWFjaCh7CisgICAg
ICAgIG1vdXNlZW50ZXI6ICJtb3VzZW92ZXIiLAorICAgICAgICBtb3VzZWxlYXZlOiAibW91c2Vv
dXQiCit9LCBmdW5jdGlvbiggb3JpZywgZml4ICkgeworICAgICAgICBqUXVlcnkuZXZlbnQuc3Bl
Y2lhbFsgb3JpZyBdID0geworICAgICAgICAgICAgICAgIGRlbGVnYXRlVHlwZTogZml4LAorICAg
ICAgICAgICAgICAgIGJpbmRUeXBlOiBmaXgsCisKKyAgICAgICAgICAgICAgICBoYW5kbGU6IGZ1
bmN0aW9uKCBldmVudCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHRoaXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmogPSBldmVudC5oYW5kbGVPYmosCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gaGFuZGxlT2JqLnNlbGVj
dG9yOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3IgbW91c2VudGVyL2xlYXZlIGNh
bGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJnZXQuCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVm
dC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvdworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAhcmVsYXRlZCB8fCAocmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRh
cmdldCwgcmVsYXRlZCApKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZl
bnQudHlwZSA9IGhhbmRsZU9iai5vcmlnVHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0ID0gaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC50eXBlID0gZml4OworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgIH07Cit9KTsKKworLy8gSUUgc3VibWl0IGRlbGVn
YXRpb24KK2lmICggIWpRdWVyeS5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXMgKSB7CisKKyAgICAgICAg
alF1ZXJ5LmV2ZW50LnNwZWNpYWwuc3VibWl0ID0geworICAgICAgICAgICAgICAgIHNldHVwOiBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgbmVlZCB0aGlzIGZv
ciBkZWxlZ2F0ZWQgZm9ybSBzdWJtaXQgZXZlbnRzCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGpRdWVyeS5ub2RlTmFtZSggdGhpcywgImZvcm0iICkgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGF6eS1hZGQgYSBzdWJtaXQgaGFuZGxlciB3
aGVuIGEgZGVzY2VuZGFudCBmb3JtIG1heSBwb3RlbnRpYWxseSBiZSBzdWJtaXR0ZWQKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsICJjbGljay5fc3VibWl0
IGtleXByZXNzLl9zdWJtaXQiLCBmdW5jdGlvbiggZSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gTm9kZSBuYW1lIGNoZWNrIGF2b2lkcyBhIFZNTC1yZWxhdGVkIGNyYXNo
IGluIElFICgjOTgwNykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0g
PSBlLnRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Jt
ID0galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaW5wdXQiICkgfHwgalF1ZXJ5Lm5vZGVOYW1lKCBl
bGVtLCAiYnV0dG9uIiApID8gZWxlbS5mb3JtIDogdW5kZWZpbmVkOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGZvcm0gJiYgIWpRdWVyeS5fZGF0YSggZm9ybSwgIl9zdWJt
aXRfYXR0YWNoZWQiICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmV2ZW50LmFkZCggZm9ybSwgInN1Ym1pdC5fc3VibWl0IiwgZnVuY3Rpb24oIGV2
ZW50ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXZlbnQuX3N1Ym1pdF9idWJibGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5fZGF0YSggZm9ybSwgIl9zdWJtaXRfYXR0YWNoZWQiLCB0cnVlICk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHVuZGVmaW5lZCBzaW5jZSB3ZSBkb24n
dCBuZWVkIGFuIGV2ZW50IGxpc3RlbmVyCisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAg
ICAgICAgIHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSWYgZm9ybSB3YXMgc3VibWl0dGVkIGJ5IHRoZSB1c2VyLCBidWJibGUgdGhl
IGV2ZW50IHVwIHRoZSB0cmVlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGV2ZW50Ll9z
dWJtaXRfYnViYmxlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUg
ZXZlbnQuX3N1Ym1pdF9idWJibGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggdGhpcy5wYXJlbnROb2RlICYmICFldmVudC5pc1RyaWdnZXIgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCAic3VibWl0
IiwgdGhpcy5wYXJlbnROb2RlLCBldmVudCwgdHJ1ZSApOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fSwKKworICAgICAgICAgICAgICAgIHRlYXJkb3duOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIE9ubHkgbmVlZCB0aGlzIGZvciBkZWxlZ2F0ZWQgZm9ybSBzdWJtaXQg
ZXZlbnRzCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5ub2RlTmFtZSggdGhp
cywgImZvcm0iICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gUmVtb3ZlIGRlbGVnYXRlZCBoYW5kbGVyczsgY2xlYW5EYXRhIGV2ZW50dWFsbHkgcmVh
cHMgc3VibWl0IGhhbmRsZXJzIGF0dGFjaGVkIGFib3ZlCisgICAgICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCAiLl9zdWJtaXQiICk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICB9OworfQorCisvLyBJRSBjaGFuZ2UgZGVsZWdhdGlvbiBhbmQgY2hlY2ti
b3gvcmFkaW8gZml4CitpZiAoICFqUXVlcnkuc3VwcG9ydC5jaGFuZ2VCdWJibGVzICkgeworCisg
ICAgICAgIGpRdWVyeS5ldmVudC5zcGVjaWFsLmNoYW5nZSA9IHsKKworICAgICAgICAgICAgICAg
IHNldHVwOiBmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZm9y
bUVsZW1zLnRlc3QoIHRoaXMubm9kZU5hbWUgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSUUgZG9lc24ndCBmaXJlIGNoYW5nZSBvbiBhIGNoZWNrL3JhZGlvIHVudGls
IGJsdXI7IHRyaWdnZXIgaXQgb24gY2xpY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gYWZ0ZXIgYSBwcm9wZXJ0eWNoYW5nZS4gRWF0IHRoZSBibHVyLWNoYW5nZSBpbiBzcGVj
aWFsLmNoYW5nZS5oYW5kbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRo
aXMgc3RpbGwgZmlyZXMgb25jaGFuZ2UgYSBzZWNvbmQgdGltZSBmb3IgY2hlY2svcmFkaW8gYWZ0
ZXIgYmx1ci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLnR5cGUg
PT09ICJjaGVja2JveCIgfHwgdGhpcy50eXBlID09PSAicmFkaW8iICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsICJwcm9w
ZXJ0eWNoYW5nZS5fY2hhbmdlIiwgZnVuY3Rpb24oIGV2ZW50ICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBldmVudC5vcmlnaW5hbEV2ZW50
LnByb3BlcnR5TmFtZSA9PT0gImNoZWNrZWQiICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9qdXN0X2NoYW5nZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsICJjbGljay5f
Y2hhbmdlIiwgZnVuY3Rpb24oIGV2ZW50ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLl9qdXN0X2NoYW5nZWQgJiYgIWV2ZW50Lmlz
VHJpZ2dlciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fanVzdF9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbGxvdyB0cmlnZ2VyZWQsIHNpbXVsYXRlZCBj
aGFuZ2UgZXZlbnRzICgjMTE1MDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuc2ltdWxhdGUoICJjaGFuZ2UiLCB0aGlzLCBldmVu
dCwgdHJ1ZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIERlbGVnYXRlZCBldmVudDsgbGF6eS1hZGQgYSBjaGFuZ2Ug
aGFuZGxlciBvbiBkZXNjZW5kYW50IGlucHV0cworICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LmV2ZW50LmFkZCggdGhpcywgImJlZm9yZWFjdGl2YXRlLl9jaGFuZ2UiLCBmdW5jdGlvbigg
ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSBlLnRhcmdl
dDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJmb3JtRWxlbXMudGVz
dCggZWxlbS5ub2RlTmFtZSApICYmICFqUXVlcnkuX2RhdGEoIGVsZW0sICJfY2hhbmdlX2F0dGFj
aGVkIiApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5ldmVudC5hZGQoIGVsZW0sICJjaGFuZ2UuX2NoYW5nZSIsIGZ1bmN0aW9uKCBldmVudCApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGhp
cy5wYXJlbnROb2RlICYmICFldmVudC5pc1NpbXVsYXRlZCAmJiAhZXZlbnQuaXNUcmlnZ2VyICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuZXZlbnQuc2ltdWxhdGUoICJjaGFuZ2UiLCB0aGlzLnBhcmVudE5vZGUsIGV2ZW50
LCB0cnVlICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9kYXRhKCBlbGVtLCAiX2No
YW5nZV9hdHRhY2hlZCIsIHRydWUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfSwKKworICAg
ICAgICAgICAgICAgIGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGVsZW0gPSBldmVudC50YXJnZXQ7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFN3YWxsb3cgbmF0aXZlIGNoYW5nZSBldmVudHMgZnJvbSBjaGVja2JveC9yYWRpbywg
d2UgYWxyZWFkeSB0cmlnZ2VyZWQgdGhlbSBhYm92ZQorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCB0aGlzICE9PSBlbGVtIHx8IGV2ZW50LmlzU2ltdWxhdGVkIHx8IGV2ZW50LmlzVHJpZ2dl
ciB8fCAoZWxlbS50eXBlICE9PSAicmFkaW8iICYmIGVsZW0udHlwZSAhPT0gImNoZWNrYm94Iikg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5oYW5kbGVP
YmouaGFuZGxlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIHRlYXJkb3duOiBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5yZW1vdmUo
IHRoaXMsICIuX2NoYW5nZSIgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFy
Zm9ybUVsZW1zLnRlc3QoIHRoaXMubm9kZU5hbWUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgIH07Cit9CisKKy8vIENyZWF0ZSAiYnViYmxpbmciIGZvY3VzIGFuZCBibHVyIGV2ZW50cwor
aWYgKCAhalF1ZXJ5LnN1cHBvcnQuZm9jdXNpbkJ1YmJsZXMgKSB7CisgICAgICAgIGpRdWVyeS5l
YWNoKHsgZm9jdXM6ICJmb2N1c2luIiwgYmx1cjogImZvY3Vzb3V0IiB9LCBmdW5jdGlvbiggb3Jp
ZywgZml4ICkgeworCisgICAgICAgICAgICAgICAgLy8gQXR0YWNoIGEgc2luZ2xlIGNhcHR1cmlu
ZyBoYW5kbGVyIHdoaWxlIHNvbWVvbmUgd2FudHMgZm9jdXNpbi9mb2N1c291dAorICAgICAgICAg
ICAgICAgIHZhciBhdHRhY2hlcyA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVy
ID0gZnVuY3Rpb24oIGV2ZW50ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkuZXZlbnQuc2ltdWxhdGUoIGZpeCwgZXZlbnQudGFyZ2V0LCBqUXVlcnkuZXZlbnQuZml4
KCBldmVudCApLCB0cnVlICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAg
ICAgICAgICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGZpeCBdID0geworICAgICAgICAgICAgICAg
ICAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGF0dGFjaGVzKysgPT09IDAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwg
dHJ1ZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIC0tYXR0YWNoZXMgPT09
IDAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQu
cmVtb3ZlRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgfSk7Cit9CisKK2pRdWVyeS5mbi5leHRlbmQoeworCisgICAg
ICAgIG9uOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgLypJTlRFUk5BTCov
IG9uZSApIHsKKyAgICAgICAgICAgICAgICB2YXIgb3JpZ0ZuLCB0eXBlOworCisgICAgICAgICAg
ICAgICAgLy8gVHlwZXMgY2FuIGJlIGEgbWFwIG9mIHR5cGVzL2hhbmRsZXJzCisgICAgICAgICAg
ICAgICAgaWYgKCB0eXBlb2YgdHlwZXMgPT09ICJvYmplY3QiICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gKCB0eXBlcy1PYmplY3QsIHNlbGVjdG9yLCBkYXRhICkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSAic3RyaW5nIiApIHsgLy8gJiYg
c2VsZWN0b3IgIT0gbnVsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoIHR5
cGVzLU9iamVjdCwgZGF0YSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEg
PSBkYXRhIHx8IHNlbGVjdG9yOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxl
Y3RvciA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMub24oIHR5cGUsIHNlbGVjdG9yLCBkYXRhLCB0eXBlc1sgdHlwZSBd
LCBvbmUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlm
ICggZGF0YSA9PSBudWxsICYmIGZuID09IG51bGwgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAoIHR5cGVzLCBmbiApCisgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IHNlbGVjdG9y
OworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGVjdG9yID0gdW5kZWZpbmVkOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGZuID09IG51bGwgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gZGF0YTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YSA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICggdHlwZXMsIGRh
dGEsIGZuICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBkYXRhOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gc2VsZWN0b3I7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gdW5kZWZpbmVkOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIGZu
ID09PSBmYWxzZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gcmV0dXJuRmFsc2U7
CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggIWZuICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKCBvbmUgPT09IDEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvcmlnRm4gPSBmbjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gZnVuY3Rpb24oIGV2ZW50ICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYW4gdXNlIGFuIGVtcHR5IHNldCwgc2luY2Ug
ZXZlbnQgY29udGFpbnMgdGhlIGluZm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5KCkub2ZmKCBldmVudCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2Ugc2FtZSBndWlkIHNvIGNh
bGxlciBjYW4gcmVtb3ZlIHVzaW5nIG9yaWdGbgorICAgICAgICAgICAgICAgICAgICAgICAgZm4u
Z3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywg
dHlwZXMsIGZuLCBkYXRhLCBzZWxlY3RvciApOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICB9LAorICAgICAgICBvbmU6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkg
eworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEs
IGZuLCAxICk7CisgICAgICAgIH0sCisgICAgICAgIG9mZjogZnVuY3Rpb24oIHR5cGVzLCBzZWxl
Y3RvciwgZm4gKSB7CisgICAgICAgICAgICAgICAgdmFyIGhhbmRsZU9iaiwgdHlwZTsKKyAgICAg
ICAgICAgICAgICBpZiAoIHR5cGVzICYmIHR5cGVzLnByZXZlbnREZWZhdWx0ICYmIHR5cGVzLmhh
bmRsZU9iaiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICggZXZlbnQgKSAgZGlzcGF0
Y2hlZCBqUXVlcnkuRXZlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9IHR5
cGVzLmhhbmRsZU9iajsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggdHlwZXMuZGVs
ZWdhdGVUYXJnZXQgKS5vZmYoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRs
ZU9iai5uYW1lc3BhY2UgPyBoYW5kbGVPYmoub3JpZ1R5cGUgKyAiLiIgKyBoYW5kbGVPYmoubmFt
ZXNwYWNlIDogaGFuZGxlT2JqLm9yaWdUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoYW5kbGVPYmouc2VsZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhhbmRsZU9iai5oYW5kbGVyCisgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmICggdHlwZW9mIHR5cGVzID09PSAib2JqZWN0IiApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vICggdHlwZXMtb2JqZWN0IFssIHNlbGVjdG9yXSApCisgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKCB0eXBlIGluIHR5cGVzICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLm9mZiggdHlwZSwgc2VsZWN0b3IsIHR5cGVzWyB0eXBlIF0gKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIHNlbGVjdG9yID09
PSBmYWxzZSB8fCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJmdW5jdGlvbiIgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyAoIHR5cGVzIFssIGZuXSApCisgICAgICAgICAgICAgICAgICAgICAg
ICBmbiA9IHNlbGVjdG9yOworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSB1bmRl
ZmluZWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICggZm4gPT09IGZh
bHNlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSByZXR1cm5GYWxzZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsIHR5
cGVzLCBmbiwgc2VsZWN0b3IgKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwKKwor
ICAgICAgICBiaW5kOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkgeworICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLm9uKCB0eXBlcywgbnVsbCwgZGF0YSwgZm4gKTsKKyAgICAgICAgfSwK
KyAgICAgICAgdW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZuICkgeworICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLm9mZiggdHlwZXMsIG51bGwsIGZuICk7CisgICAgICAgIH0sCisKKyAgICAg
ICAgbGl2ZTogZnVuY3Rpb24oIHR5cGVzLCBkYXRhLCBmbiApIHsKKyAgICAgICAgICAgICAgICBq
UXVlcnkoIHRoaXMuY29udGV4dCApLm9uKCB0eXBlcywgdGhpcy5zZWxlY3RvciwgZGF0YSwgZm4g
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSwKKyAgICAgICAgZGll
OiBmdW5jdGlvbiggdHlwZXMsIGZuICkgeworICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcy5j
b250ZXh0ICkub2ZmKCB0eXBlcywgdGhpcy5zZWxlY3RvciB8fCAiKioiLCBmbiApOworICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9LAorCisgICAgICAgIGRlbGVnYXRlOiBm
dW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBkYXRhLCBmbiApIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApOworICAgICAgICB9LAor
ICAgICAgICB1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHsKKyAg
ICAgICAgICAgICAgICAvLyAoIG5hbWVzcGFjZSApIG9yICggc2VsZWN0b3IsIHR5cGVzIFssIGZu
XSApCisgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyB0aGlz
Lm9mZiggc2VsZWN0b3IsICIqKiIgKSA6IHRoaXMub2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwgIioq
IiwgZm4gKTsKKyAgICAgICAgfSwKKworICAgICAgICB0cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwg
ZGF0YSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEs
IHRoaXMgKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwKKyAgICAgICAgdHJpZ2dl
ckhhbmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkgeworICAgICAgICAgICAgICAgIGlmICgg
dGhpc1swXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZXZlbnQu
dHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpc1swXSwgdHJ1ZSApOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgfSwKKworICAgICAgICB0b2dnbGU6IGZ1bmN0aW9uKCBmbiApIHsKKyAgICAgICAg
ICAgICAgICAvLyBTYXZlIHJlZmVyZW5jZSB0byBhcmd1bWVudHMgZm9yIGFjY2VzcyBpbiBjbG9z
dXJlCisgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsCisgICAgICAgICAgICAg
ICAgICAgICAgICBndWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrLAorICAgICAgICAgICAg
ICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVyID0gZnVu
Y3Rpb24oIGV2ZW50ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaWd1
cmUgb3V0IHdoaWNoIGZ1bmN0aW9uIHRvIGV4ZWN1dGUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGxhc3RUb2dnbGUgPSAoIGpRdWVyeS5fZGF0YSggdGhpcywgImxhc3RUb2dn
bGUiICsgZm4uZ3VpZCApIHx8IDAgKSAlIGk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5fZGF0YSggdGhpcywgImxhc3RUb2dnbGUiICsgZm4uZ3VpZCwgbGFzdFRvZ2ds
ZSArIDEgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUg
dGhhdCBjbGlja3Mgc3RvcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5w
cmV2ZW50RGVmYXVsdCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFu
ZCBleGVjdXRlIHRoZSBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gYXJnc1sgbGFzdFRvZ2dsZSBdLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSB8fCBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAvLyBsaW5r
IGFsbCB0aGUgZnVuY3Rpb25zLCBzbyBhbnkgb2YgdGhlbSBjYW4gdW5iaW5kIHRoaXMgY2xpY2sg
aGFuZGxlcgorICAgICAgICAgICAgICAgIHRvZ2dsZXIuZ3VpZCA9IGd1aWQ7CisgICAgICAgICAg
ICAgICAgd2hpbGUgKCBpIDwgYXJncy5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhcmdzWyBpKysgXS5ndWlkID0gZ3VpZDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5jbGljayggdG9nZ2xlciApOworICAgICAgICB9LAorCisgICAg
ICAgIGhvdmVyOiBmdW5jdGlvbiggZm5PdmVyLCBmbk91dCApIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92
ZXIgKTsKKyAgICAgICAgfQorfSk7CisKK2pRdWVyeS5lYWNoKCAoImJsdXIgZm9jdXMgZm9jdXNp
biBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrICIgKwor
ICAgICAgICAibW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBt
b3VzZWVudGVyIG1vdXNlbGVhdmUgIiArCisgICAgICAgICJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBr
ZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIGNvbnRleHRtZW51Iikuc3BsaXQoIiAiKSwgZnVu
Y3Rpb24oIGksIG5hbWUgKSB7CisKKyAgICAgICAgLy8gSGFuZGxlIGV2ZW50IGJpbmRpbmcKKyAg
ICAgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggZGF0YSwgZm4gKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCBmbiA9PSBudWxsICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm4g
PSBkYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG51bGw7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID8K
KyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub24oIG5hbWUsIG51bGwsIGRhdGEsIGZuICkg
OgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCBuYW1lICk7CisgICAgICAg
IH07CisKKyAgICAgICAgaWYgKCBya2V5RXZlbnQudGVzdCggbmFtZSApICkgeworICAgICAgICAg
ICAgICAgIGpRdWVyeS5ldmVudC5maXhIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV2ZW50LmtleUhv
b2tzOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBybW91c2VFdmVudC50ZXN0KCBuYW1lICkg
KSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmZpeEhvb2tzWyBuYW1lIF0gPSBqUXVl
cnkuZXZlbnQubW91c2VIb29rczsKKyAgICAgICAgfQorfSk7CisvKiEKKyAqIFNpenpsZSBDU1Mg
U2VsZWN0b3IgRW5naW5lCisgKiBDb3B5cmlnaHQgMjAxMiBqUXVlcnkgRm91bmRhdGlvbiBhbmQg
b3RoZXIgY29udHJpYnV0b3JzCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UKKyAq
IGh0dHA6Ly9zaXp6bGVqcy5jb20vCisgKi8KKyhmdW5jdGlvbiggd2luZG93LCB1bmRlZmluZWQg
KSB7CisKK3ZhciBjYWNoZWRydW5zLAorICAgICAgICBhc3NlcnRHZXRJZE5vdE5hbWUsCisgICAg
ICAgIEV4cHIsCisgICAgICAgIGdldFRleHQsCisgICAgICAgIGlzWE1MLAorICAgICAgICBjb250
YWlucywKKyAgICAgICAgY29tcGlsZSwKKyAgICAgICAgc29ydE9yZGVyLAorICAgICAgICBoYXNE
dXBsaWNhdGUsCisgICAgICAgIG91dGVybW9zdENvbnRleHQsCisKKyAgICAgICAgYmFzZUhhc0R1
cGxpY2F0ZSA9IHRydWUsCisgICAgICAgIHN0cnVuZGVmaW5lZCA9ICJ1bmRlZmluZWQiLAorCisg
ICAgICAgIGV4cGFuZG8gPSAoICJzaXpjYWNoZSIgKyBNYXRoLnJhbmRvbSgpICkucmVwbGFjZSgg
Ii4iLCAiIiApLAorCisgICAgICAgIFRva2VuID0gU3RyaW5nLAorICAgICAgICBkb2N1bWVudCA9
IHdpbmRvdy5kb2N1bWVudCwKKyAgICAgICAgZG9jRWxlbSA9IGRvY3VtZW50LmRvY3VtZW50RWxl
bWVudCwKKyAgICAgICAgZGlycnVucyA9IDAsCisgICAgICAgIGRvbmUgPSAwLAorICAgICAgICBw
b3AgPSBbXS5wb3AsCisgICAgICAgIHB1c2ggPSBbXS5wdXNoLAorICAgICAgICBzbGljZSA9IFtd
LnNsaWNlLAorICAgICAgICAvLyBVc2UgYSBzdHJpcHBlZC1kb3duIGluZGV4T2YgaWYgYSBuYXRp
dmUgb25lIGlzIHVuYXZhaWxhYmxlCisgICAgICAgIGluZGV4T2YgPSBbXS5pbmRleE9mIHx8IGZ1
bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgIHZhciBpID0gMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxlbiA9IHRoaXMubGVuZ3RoOworICAgICAgICAgICAgICAgIGZvciAoIDsg
aSA8IGxlbjsgaSsrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzW2ldID09
PSBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgcmV0dXJuIC0xOworICAgICAgICB9LAorCisgICAgICAgIC8vIEF1Z21lbnQgYSBmdW5jdGlv
biBmb3Igc3BlY2lhbCB1c2UgYnkgU2l6emxlCisgICAgICAgIG1hcmtGdW5jdGlvbiA9IGZ1bmN0
aW9uKCBmbiwgdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgZm5bIGV4cGFuZG8gXSA9IHZhbHVl
ID09IG51bGwgfHwgdmFsdWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZuOworICAgICAgICB9
LAorCisgICAgICAgIGNyZWF0ZUNhY2hlID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
dmFyIGNhY2hlID0ge30sCisgICAgICAgICAgICAgICAgICAgICAgICBrZXlzID0gW107CisKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBrZXksIHZhbHVlICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25seSBrZWVwIHRoZSBtb3N0IHJlY2VudCBl
bnRyaWVzCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGtleXMucHVzaCgga2V5ICkgPiBF
eHByLmNhY2hlTGVuZ3RoICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxl
dGUgY2FjaGVbIGtleXMuc2hpZnQoKSBdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXRyaWV2ZSB3aXRoIChrZXkgKyAiICIpIHRvIGF2
b2lkIGNvbGxpc2lvbiB3aXRoIG5hdGl2ZSBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKHNl
ZSBJc3N1ZSAjMTU3KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjYWNoZVsga2V5
ICsgIiAiIF0gPSB2YWx1ZSk7CisgICAgICAgICAgICAgICAgfSwgY2FjaGUgKTsKKyAgICAgICAg
fSwKKworICAgICAgICBjbGFzc0NhY2hlID0gY3JlYXRlQ2FjaGUoKSwKKyAgICAgICAgdG9rZW5D
YWNoZSA9IGNyZWF0ZUNhY2hlKCksCisgICAgICAgIGNvbXBpbGVyQ2FjaGUgPSBjcmVhdGVDYWNo
ZSgpLAorCisgICAgICAgIC8vIFJlZ2V4CisKKyAgICAgICAgLy8gV2hpdGVzcGFjZSBjaGFyYWN0
ZXJzIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc2VsZWN0b3JzLyN3aGl0ZXNwYWNlCisgICAg
ICAgIHdoaXRlc3BhY2UgPSAiW1xceDIwXFx0XFxyXFxuXFxmXSIsCisgICAgICAgIC8vIGh0dHA6
Ly93d3cudzMub3JnL1RSL2NzczMtc3ludGF4LyNjaGFyYWN0ZXJzCisgICAgICAgIGNoYXJhY3Rl
ckVuY29kaW5nID0gIig/OlxcXFwufFstXFx3XXxbXlxceDAwLVxceGEwXSkrIiwKKworICAgICAg
ICAvLyBMb29zZWx5IG1vZGVsZWQgb24gQ1NTIGlkZW50aWZpZXIgY2hhcmFjdGVycworICAgICAg
ICAvLyBBbiB1bnF1b3RlZCB2YWx1ZSBzaG91bGQgYmUgYSBDU1MgaWRlbnRpZmllciAoaHR0cDov
L3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI2F0dHJpYnV0ZS1zZWxlY3RvcnMpCisgICAg
ICAgIC8vIFByb3BlciBzeW50YXg6IGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEu
aHRtbCN2YWx1ZS1kZWYtaWRlbnRpZmllcgorICAgICAgICBpZGVudGlmaWVyID0gY2hhcmFjdGVy
RW5jb2RpbmcucmVwbGFjZSggInciLCAidyMiICksCisKKyAgICAgICAgLy8gQWNjZXB0YWJsZSBv
cGVyYXRvcnMgaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1dGUtc2VsZWN0
b3JzCisgICAgICAgIG9wZXJhdG9ycyA9ICIoWypeJHwhfl0/PSkiLAorICAgICAgICBhdHRyaWJ1
dGVzID0gIlxcWyIgKyB3aGl0ZXNwYWNlICsgIiooIiArIGNoYXJhY3RlckVuY29kaW5nICsgIiki
ICsgd2hpdGVzcGFjZSArCisgICAgICAgICAgICAgICAgIiooPzoiICsgb3BlcmF0b3JzICsgd2hp
dGVzcGFjZSArICIqKD86KFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcM3woIiArIGlkZW50
aWZpZXIgKyAiKXwpfCkiICsgd2hpdGVzcGFjZSArICIqXFxdIiwKKworICAgICAgICAvLyBQcmVm
ZXIgYXJndW1lbnRzIG5vdCBpbiBwYXJlbnMvYnJhY2tldHMsCisgICAgICAgIC8vICAgdGhlbiBh
dHRyaWJ1dGUgc2VsZWN0b3JzIGFuZCBub24tcHNldWRvcyAoZGVub3RlZCBieSA6KSwKKyAgICAg
ICAgLy8gICB0aGVuIGFueXRoaW5nIGVsc2UKKyAgICAgICAgLy8gVGhlc2UgcHJlZmVyZW5jZXMg
YXJlIGhlcmUgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzCisgICAgICAgIC8vICAg
bmVlZGluZyB0b2tlbml6ZSBpbiB0aGUgUFNFVURPIHByZUZpbHRlcgorICAgICAgICBwc2V1ZG9z
ID0gIjooIiArIGNoYXJhY3RlckVuY29kaW5nICsgIikoPzpcXCgoPzooWydcIl0pKCg/OlxcXFwu
fFteXFxcXF0pKj8pXFwyfChbXigpW1xcXV0qfCg/Oig/OiIgKyBhdHRyaWJ1dGVzICsgIil8W146
XXxcXFxcLikqfC4qKSlcXCl8KSIsCisKKyAgICAgICAgLy8gRm9yIG1hdGNoRXhwci5QT1MgYW5k
IG1hdGNoRXhwci5uZWVkc0NvbnRleHQKKyAgICAgICAgcG9zID0gIjooZXZlbnxvZGR8ZXF8Z3R8
bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIiArIHdoaXRlc3BhY2UgKworICAgICAgICAgICAgICAg
ICIqKCg/Oi1cXGQpP1xcZCopIiArIHdoaXRlc3BhY2UgKyAiKlxcKXwpKD89W14tXXwkKSIsCisK
KyAgICAgICAgLy8gTGVhZGluZyBhbmQgbm9uLWVzY2FwZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSwg
Y2FwdHVyaW5nIHNvbWUgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycyBwcmVjZWRpbmcgdGhlIGxh
dHRlcgorICAgICAgICBydHJpbSA9IG5ldyBSZWdFeHAoICJeIiArIHdoaXRlc3BhY2UgKyAiK3wo
KD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIiArIHdoaXRlc3BhY2UgKyAiKyQiLCAiZyIgKSwKKwor
ICAgICAgICByY29tbWEgPSBuZXcgUmVnRXhwKCAiXiIgKyB3aGl0ZXNwYWNlICsgIiosIiArIHdo
aXRlc3BhY2UgKyAiKiIgKSwKKyAgICAgICAgcmNvbWJpbmF0b3JzID0gbmV3IFJlZ0V4cCggIl4i
ICsgd2hpdGVzcGFjZSArICIqKFtcXHgyMFxcdFxcclxcblxcZj4rfl0pIiArIHdoaXRlc3BhY2Ug
KyAiKiIgKSwKKyAgICAgICAgcnBzZXVkbyA9IG5ldyBSZWdFeHAoIHBzZXVkb3MgKSwKKworICAg
ICAgICAvLyBFYXNpbHktcGFyc2VhYmxlL3JldHJpZXZhYmxlIElEIG9yIFRBRyBvciBDTEFTUyBz
ZWxlY3RvcnMKKyAgICAgICAgcnF1aWNrRXhwciA9IC9eKD86IyhbXHdcLV0rKXwoXHcrKXxcLihb
XHdcLV0rKSkkLywKKworICAgICAgICBybm90ID0gL146bm90LywKKyAgICAgICAgcnNpYmxpbmcg
PSAvW1x4MjBcdFxyXG5cZl0qWyt+XS8sCisgICAgICAgIHJlbmRzV2l0aE5vdCA9IC86bm90XCgk
LywKKworICAgICAgICByaGVhZGVyID0gL2hcZC9pLAorICAgICAgICByaW5wdXRzID0gL2lucHV0
fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24vaSwKKworICAgICAgICByYmFja3NsYXNoID0gL1xcKD8h
XFwpL2csCisKKyAgICAgICAgbWF0Y2hFeHByID0geworICAgICAgICAgICAgICAgICJJRCI6IG5l
dyBSZWdFeHAoICJeIygiICsgY2hhcmFjdGVyRW5jb2RpbmcgKyAiKSIgKSwKKyAgICAgICAgICAg
ICAgICAiQ0xBU1MiOiBuZXcgUmVnRXhwKCAiXlxcLigiICsgY2hhcmFjdGVyRW5jb2RpbmcgKyAi
KSIgKSwKKyAgICAgICAgICAgICAgICAiTkFNRSI6IG5ldyBSZWdFeHAoICJeXFxbbmFtZT1bJ1wi
XT8oIiArIGNoYXJhY3RlckVuY29kaW5nICsgIilbJ1wiXT9cXF0iICksCisgICAgICAgICAgICAg
ICAgIlRBRyI6IG5ldyBSZWdFeHAoICJeKCIgKyBjaGFyYWN0ZXJFbmNvZGluZy5yZXBsYWNlKCAi
dyIsICJ3KiIgKSArICIpIiApLAorICAgICAgICAgICAgICAgICJBVFRSIjogbmV3IFJlZ0V4cCgg
Il4iICsgYXR0cmlidXRlcyApLAorICAgICAgICAgICAgICAgICJQU0VVRE8iOiBuZXcgUmVnRXhw
KCAiXiIgKyBwc2V1ZG9zICksCisgICAgICAgICAgICAgICAgIlBPUyI6IG5ldyBSZWdFeHAoIHBv
cywgImkiICksCisgICAgICAgICAgICAgICAgIkNISUxEIjogbmV3IFJlZ0V4cCggIl46KG9ubHl8
bnRofGZpcnN0fGxhc3QpLWNoaWxkKD86XFwoIiArIHdoaXRlc3BhY2UgKworICAgICAgICAgICAg
ICAgICAgICAgICAgIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiICsgd2hpdGVzcGFjZSAr
ICIqKD86KFsrLV18KSIgKyB3aGl0ZXNwYWNlICsKKyAgICAgICAgICAgICAgICAgICAgICAgICIq
KFxcZCspfCkpIiArIHdoaXRlc3BhY2UgKyAiKlxcKXwpIiwgImkiICksCisgICAgICAgICAgICAg
ICAgLy8gRm9yIHVzZSBpbiBsaWJyYXJpZXMgaW1wbGVtZW50aW5nIC5pcygpCisgICAgICAgICAg
ICAgICAgIm5lZWRzQ29udGV4dCI6IG5ldyBSZWdFeHAoICJeIiArIHdoaXRlc3BhY2UgKyAiKls+
K35dfCIgKyBwb3MsICJpIiApCisgICAgICAgIH0sCisKKyAgICAgICAgLy8gU3VwcG9ydAorCisg
ICAgICAgIC8vIFVzZWQgZm9yIHRlc3Rpbmcgc29tZXRoaW5nIG9uIGFuIGVsZW1lbnQKKyAgICAg
ICAgYXNzZXJ0ID0gZnVuY3Rpb24oIGZuICkgeworICAgICAgICAgICAgICAgIHZhciBkaXYgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKworICAgICAgICAgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4oIGRpdiApOworICAgICAgICAgICAgICAg
IH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVs
ZWFzZSBtZW1vcnkgaW4gSUUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpdiA9IG51bGw7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIC8vIENoZWNrIGlmIGdldEVs
ZW1lbnRzQnlUYWdOYW1lKCIqIikgcmV0dXJucyBvbmx5IGVsZW1lbnRzCisgICAgICAgIGFzc2Vy
dFRhZ05hbWVOb0NvbW1lbnRzID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7CisgICAgICAgICAg
ICAgICAgZGl2LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVDb21tZW50KCIiKSApOworICAg
ICAgICAgICAgICAgIHJldHVybiAhZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3Ro
OworICAgICAgICB9KSwKKworICAgICAgICAvLyBDaGVjayBpZiBnZXRBdHRyaWJ1dGUgcmV0dXJu
cyBub3JtYWxpemVkIGhyZWYgYXR0cmlidXRlcworICAgICAgICBhc3NlcnRIcmVmTm90Tm9ybWFs
aXplZCA9IGFzc2VydChmdW5jdGlvbiggZGl2ICkgeworICAgICAgICAgICAgICAgIGRpdi5pbm5l
ckhUTUwgPSAiPGEgaHJlZj0nIyc+PC9hPiI7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRpdi5m
aXJzdENoaWxkICYmIHR5cGVvZiBkaXYuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUgIT09IHN0cnVu
ZGVmaW5lZCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0
cmlidXRlKCJocmVmIikgPT09ICIjIjsKKyAgICAgICAgfSksCisKKyAgICAgICAgLy8gQ2hlY2sg
aWYgYXR0cmlidXRlcyBzaG91bGQgYmUgcmV0cmlldmVkIGJ5IGF0dHJpYnV0ZSBub2RlcworICAg
ICAgICBhc3NlcnRBdHRyaWJ1dGVzID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7CisgICAgICAg
ICAgICAgICAgZGl2LmlubmVySFRNTCA9ICI8c2VsZWN0Pjwvc2VsZWN0PiI7CisgICAgICAgICAg
ICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgZGl2Lmxhc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIm11bHRp
cGxlIik7CisgICAgICAgICAgICAgICAgLy8gSUU4IHJldHVybnMgYSBzdHJpbmcgZm9yIHNvbWUg
YXR0cmlidXRlcyBldmVuIHdoZW4gbm90IHByZXNlbnQKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHlwZSAhPT0gImJvb2xlYW4iICYmIHR5cGUgIT09ICJzdHJpbmciOworICAgICAgICB9KSwKKwor
ICAgICAgICAvLyBDaGVjayBpZiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIGNhbiBiZSB0cnVzdGVk
CisgICAgICAgIGFzc2VydFVzYWJsZUNsYXNzTmFtZSA9IGFzc2VydChmdW5jdGlvbiggZGl2ICkg
eworICAgICAgICAgICAgICAgIC8vIE9wZXJhIGNhbid0IGZpbmQgYSBzZWNvbmQgY2xhc3NuYW1l
IChpbiA5LjYpCisgICAgICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9ICI8ZGl2IGNsYXNzPSdo
aWRkZW4gZSc+PC9kaXY+PGRpdiBjbGFzcz0naGlkZGVuJz48L2Rpdj4iOworICAgICAgICAgICAg
ICAgIGlmICggIWRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8ICFkaXYuZ2V0RWxlbWVudHNC
eUNsYXNzTmFtZSgiZSIpLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBTYWZhcmkg
My4yIGNhY2hlcyBjbGFzcyBhdHRyaWJ1dGVzIGFuZCBkb2Vzbid0IGNhdGNoIGNoYW5nZXMKKyAg
ICAgICAgICAgICAgICBkaXYubGFzdENoaWxkLmNsYXNzTmFtZSA9ICJlIjsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGggPT09IDI7
CisgICAgICAgIH0pLAorCisgICAgICAgIC8vIENoZWNrIGlmIGdldEVsZW1lbnRCeUlkIHJldHVy
bnMgZWxlbWVudHMgYnkgbmFtZQorICAgICAgICAvLyBDaGVjayBpZiBnZXRFbGVtZW50c0J5TmFt
ZSBwcml2aWxlZ2VzIGZvcm0gY29udHJvbHMgb3IgcmV0dXJucyBlbGVtZW50cyBieSBJRAorICAg
ICAgICBhc3NlcnRVc2FibGVOYW1lID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7CisgICAgICAg
ICAgICAgICAgLy8gSW5qZWN0IGNvbnRlbnQKKyAgICAgICAgICAgICAgICBkaXYuaWQgPSBleHBh
bmRvICsgMDsKKyAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjxhIG5hbWU9JyIgKyBl
eHBhbmRvICsgIic+PC9hPjxkaXYgbmFtZT0nIiArIGV4cGFuZG8gKyAiJz48L2Rpdj4iOworICAg
ICAgICAgICAgICAgIGRvY0VsZW0uaW5zZXJ0QmVmb3JlKCBkaXYsIGRvY0VsZW0uZmlyc3RDaGls
ZCApOworCisgICAgICAgICAgICAgICAgLy8gVGVzdAorICAgICAgICAgICAgICAgIHZhciBwYXNz
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGJ1Z2d5IGJyb3dzZXJzIHdpbGwgcmV0dXJuIGZld2VyIHRoYW4gdGhlIGNvcnJlY3QgMgor
ICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIGV4cGFu
ZG8gKS5sZW5ndGggPT09IDIgKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnVnZ3kgYnJv
d3NlcnMgd2lsbCByZXR1cm4gbW9yZSB0aGFuIHRoZSBjb3JyZWN0IDAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRvICsgMCApLmxlbmd0
aDsKKyAgICAgICAgICAgICAgICBhc3NlcnRHZXRJZE5vdE5hbWUgPSAhZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoIGV4cGFuZG8gKTsKKworICAgICAgICAgICAgICAgIC8vIENsZWFudXAKKyAgICAg
ICAgICAgICAgICBkb2NFbGVtLnJlbW92ZUNoaWxkKCBkaXYgKTsKKworICAgICAgICAgICAgICAg
IHJldHVybiBwYXNzOworICAgICAgICB9KTsKKworLy8gSWYgc2xpY2UgaXMgbm90IGF2YWlsYWJs
ZSwgcHJvdmlkZSBhIGJhY2t1cAordHJ5IHsKKyAgICAgICAgc2xpY2UuY2FsbCggZG9jRWxlbS5j
aGlsZE5vZGVzLCAwIClbMF0ubm9kZVR5cGU7Cit9IGNhdGNoICggZSApIHsKKyAgICAgICAgc2xp
Y2UgPSBmdW5jdGlvbiggaSApIHsKKyAgICAgICAgICAgICAgICB2YXIgZWxlbSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBbXTsKKyAgICAgICAgICAgICAgICBmb3IgKCA7IChl
bGVtID0gdGhpc1tpXSk7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMu
cHVzaCggZWxlbSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0czsKKyAgICAgICAgfTsKK30KKworZnVuY3Rpb24gU2l6emxlKCBzZWxlY3RvciwgY29u
dGV4dCwgcmVzdWx0cywgc2VlZCApIHsKKyAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMgfHwgW107
CisgICAgICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50OworICAgICAgICB2YXIgbWF0
Y2gsIGVsZW0sIHhtbCwgbSwKKyAgICAgICAgICAgICAgICBub2RlVHlwZSA9IGNvbnRleHQubm9k
ZVR5cGU7CisKKyAgICAgICAgaWYgKCAhc2VsZWN0b3IgfHwgdHlwZW9mIHNlbGVjdG9yICE9PSAi
c3RyaW5nIiApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICggbm9kZVR5cGUgIT09IDEgJiYgbm9kZVR5cGUgIT09IDkgKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIFtdOworICAgICAgICB9CisKKyAgICAgICAgeG1sID0gaXNYTUwo
IGNvbnRleHQgKTsKKworICAgICAgICBpZiAoICF4bWwgJiYgIXNlZWQgKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCAobWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICkpICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gU3BlZWQtdXA6IFNpenpsZSgiI0lEIikKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggKG0gPSBtYXRjaFsxXSkgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggbm9kZVR5cGUgPT09IDkgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0g
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBwYXJl
bnROb2RlIHRvIGNhdGNoIHdoZW4gQmxhY2tiZXJyeSA0LjYgcmV0dXJucworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vZGVzIHRoYXQgYXJlIG5vIGxvbmdlciBp
biB0aGUgZG9jdW1lbnQgIzY5NjMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGVsZW0gJiYgZWxlbS5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIElF
LCBPcGVyYSwgYW5kIFdlYmtpdCByZXR1cm4gaXRlbXMKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLmlkID09
PSBtICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHRzLnB1c2goIGVsZW0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBD
b250ZXh0IGlzIG5vdCBhIGRvY3VtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBjb250ZXh0Lm93bmVyRG9jdW1lbnQgJiYgKGVsZW0gPSBjb250ZXh0Lm93
bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkgJiYKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiYg
ZWxlbS5pZCA9PT0gbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdHMucHVzaCggZWxlbSApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNwZWVkLXVwOiBTaXp6bGUoIlRBRyIp
CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBtYXRjaFsyXSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywgc2xpY2UuY2Fs
bChjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBzZWxlY3RvciApLCAwKSApOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gU3BlZWQtdXA6IFNpenpsZSgiLkNMQVNTIikKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIChtID0gbWF0Y2hbM10pICYmIGFzc2VydFVzYWJsZUNsYXNz
TmFtZSAmJiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIHNsaWNlLmNhbGwoY29udGV4
dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBtICksIDApICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEFsbCBvdGhlcnMKKyAg
ICAgICAgcmV0dXJuIHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sICIkMSIgKSwgY29u
dGV4dCwgcmVzdWx0cywgc2VlZCwgeG1sICk7Cit9CisKK1NpenpsZS5tYXRjaGVzID0gZnVuY3Rp
b24oIGV4cHIsIGVsZW1lbnRzICkgeworICAgICAgICByZXR1cm4gU2l6emxlKCBleHByLCBudWxs
LCBudWxsLCBlbGVtZW50cyApOworfTsKKworU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0
aW9uKCBlbGVtLCBleHByICkgeworICAgICAgICByZXR1cm4gU2l6emxlKCBleHByLCBudWxsLCBu
dWxsLCBbIGVsZW0gXSApLmxlbmd0aCA+IDA7Cit9OworCisvLyBSZXR1cm5zIGEgZnVuY3Rpb24g
dG8gdXNlIGluIHBzZXVkb3MgZm9yIGlucHV0IHR5cGVzCitmdW5jdGlvbiBjcmVhdGVJbnB1dFBz
ZXVkbyggdHlwZSApIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAg
ICAgICAgICAgIHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAg
ICAgICAgICAgIHJldHVybiBuYW1lID09PSAiaW5wdXQiICYmIGVsZW0udHlwZSA9PT0gdHlwZTsK
KyAgICAgICAgfTsKK30KKworLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9z
IGZvciBidXR0b25zCitmdW5jdGlvbiBjcmVhdGVCdXR0b25Qc2V1ZG8oIHR5cGUgKSB7CisgICAg
ICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICB2YXIgbmFtZSA9
IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKG5h
bWUgPT09ICJpbnB1dCIgfHwgbmFtZSA9PT0gImJ1dHRvbiIpICYmIGVsZW0udHlwZSA9PT0gdHlw
ZTsKKyAgICAgICAgfTsKK30KKworLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1
ZG9zIGZvciBwb3NpdGlvbmFscworZnVuY3Rpb24gY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZm4g
KSB7CisgICAgICAgIHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIGFyZ3VtZW50ICkgewor
ICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gK2FyZ3VtZW50OworICAgICAgICAgICAgICAgIHJl
dHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0
Y2hJbmRleGVzID0gZm4oIFtdLCBzZWVkLmxlbmd0aCwgYXJndW1lbnQgKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaSA9IG1hdGNoSW5kZXhlcy5sZW5ndGg7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIE1hdGNoIGVsZW1lbnRzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQg
aW5kZXhlcworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc2VlZFsgKGogPSBtYXRjaEluZGV4ZXNbaV0p
IF0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlZFtqXSA9
ICEobWF0Y2hlc1tqXSA9IHNlZWRbal0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0pOworfQorCisvKioKKyAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhl
IHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzCisgKiBAcGFyYW0ge0FycmF5fEVs
ZW1lbnR9IGVsZW0KKyAqLworZ2V0VGV4dCA9IFNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVs
ZW0gKSB7CisgICAgICAgIHZhciBub2RlLAorICAgICAgICAgICAgICAgIHJldCA9ICIiLAorICAg
ICAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgICAgIG5vZGVUeXBlID0gZWxlbS5ub2Rl
VHlwZTsKKworICAgICAgICBpZiAoIG5vZGVUeXBlICkgeworICAgICAgICAgICAgICAgIGlmICgg
bm9kZVR5cGUgPT09IDEgfHwgbm9kZVR5cGUgPT09IDkgfHwgbm9kZVR5cGUgPT09IDExICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRleHRDb250ZW50IGZvciBlbGVtZW50cwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5uZXJUZXh0IHVzYWdlIHJlbW92ZWQgZm9yIGNv
bnNpc3RlbmN5IG9mIG5ldyBsaW5lcyAoc2VlICMxMTE1MykKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggdHlwZW9mIGVsZW0udGV4dENvbnRlbnQgPT09ICJzdHJpbmciICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS50ZXh0Q29udGVudDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFRyYXZlcnNlIGl0cyBjaGlsZHJlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0
U2libGluZyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQg
Kz0gZ2V0VGV4dCggZWxlbSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbm9k
ZVR5cGUgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZWxlbS5ub2RlVmFsdWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIC8vIERvIG5vdCBpbmNsdWRlIGNvbW1lbnQgb3IgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBu
b2RlcworICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgLy8gSWYgbm8gbm9kZVR5
cGUsIHRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXkKKyAgICAgICAgICAgICAgICBmb3Ig
KCA7IChub2RlID0gZWxlbVtpXSk7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IERvIG5vdCB0cmF2ZXJzZSBjb21tZW50IG5vZGVzCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXQgKz0gZ2V0VGV4dCggbm9kZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gcmV0OworfTsKKworaXNYTUwgPSBTaXp6bGUuaXNYTUwgPSBmdW5jdGlvbigg
ZWxlbSApIHsKKyAgICAgICAgLy8gZG9jdW1lbnRFbGVtZW50IGlzIHZlcmlmaWVkIGZvciBjYXNl
cyB3aGVyZSBpdCBkb2Vzbid0IHlldCBleGlzdAorICAgICAgICAvLyAoc3VjaCBhcyBsb2FkaW5n
IGlmcmFtZXMgaW4gSUUgLSAjNDgzMykKKyAgICAgICAgdmFyIGRvY3VtZW50RWxlbWVudCA9IGVs
ZW0gJiYgKGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtKS5kb2N1bWVudEVsZW1lbnQ7CisgICAg
ICAgIHJldHVybiBkb2N1bWVudEVsZW1lbnQgPyBkb2N1bWVudEVsZW1lbnQubm9kZU5hbWUgIT09
ICJIVE1MIiA6IGZhbHNlOworfTsKKworLy8gRWxlbWVudCBjb250YWlucyBhbm90aGVyCitjb250
YWlucyA9IFNpenpsZS5jb250YWlucyA9IGRvY0VsZW0uY29udGFpbnMgPworICAgICAgICBmdW5j
dGlvbiggYSwgYiApIHsKKyAgICAgICAgICAgICAgICB2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09
PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQgOiBhLAorICAgICAgICAgICAgICAgICAgICAgICAgYnVw
ID0gYiAmJiBiLnBhcmVudE5vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGEgPT09IGJ1cCB8
fCAhISggYnVwICYmIGJ1cC5ub2RlVHlwZSA9PT0gMSAmJiBhZG93bi5jb250YWlucyAmJiBhZG93
bi5jb250YWlucyhidXApICk7CisgICAgICAgIH0gOgorICAgICAgICBkb2NFbGVtLmNvbXBhcmVE
b2N1bWVudFBvc2l0aW9uID8KKyAgICAgICAgZnVuY3Rpb24oIGEsIGIgKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGIgJiYgISEoIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGIgKSAmIDE2
ICk7CisgICAgICAgIH0gOgorICAgICAgICBmdW5jdGlvbiggYSwgYiApIHsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAoIChiID0gYi5wYXJlbnROb2RlKSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggYiA9PT0gYSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfTsKKworU2l6emxlLmF0dHIg
PSBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKKyAgICAgICAgdmFyIHZhbCwKKyAgICAgICAgICAg
ICAgICB4bWwgPSBpc1hNTCggZWxlbSApOworCisgICAgICAgIGlmICggIXhtbCApIHsKKyAgICAg
ICAgICAgICAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICB9CisgICAgICAg
IGlmICggKHZhbCA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZSBdKSApIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdmFsKCBlbGVtICk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCB4bWwgfHwgYXNz
ZXJ0QXR0cmlidXRlcyApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1
dGUoIG5hbWUgKTsKKyAgICAgICAgfQorICAgICAgICB2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5v
ZGUoIG5hbWUgKTsKKyAgICAgICAgcmV0dXJuIHZhbCA/CisgICAgICAgICAgICAgICAgdHlwZW9m
IGVsZW1bIG5hbWUgXSA9PT0gImJvb2xlYW4iID8KKyAgICAgICAgICAgICAgICAgICAgICAgIGVs
ZW1bIG5hbWUgXSA/IG5hbWUgOiBudWxsIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbC5z
cGVjaWZpZWQgPyB2YWwudmFsdWUgOiBudWxsIDoKKyAgICAgICAgICAgICAgICBudWxsOworfTsK
KworRXhwciA9IFNpenpsZS5zZWxlY3RvcnMgPSB7CisKKyAgICAgICAgLy8gQ2FuIGJlIGFkanVz
dGVkIGJ5IHRoZSB1c2VyCisgICAgICAgIGNhY2hlTGVuZ3RoOiA1MCwKKworICAgICAgICBjcmVh
dGVQc2V1ZG86IG1hcmtGdW5jdGlvbiwKKworICAgICAgICBtYXRjaDogbWF0Y2hFeHByLAorCisg
ICAgICAgIC8vIElFNi83IHJldHVybiBhIG1vZGlmaWVkIGhyZWYKKyAgICAgICAgYXR0ckhhbmRs
ZTogYXNzZXJ0SHJlZk5vdE5vcm1hbGl6ZWQgPworICAgICAgICAgICAgICAgIHt9IDoKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAiaHJlZiI6IGZ1bmN0aW9uKCBl
bGVtICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRB
dHRyaWJ1dGUoICJocmVmIiwgMiApOworICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICJ0eXBlIjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSgidHlwZSIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAg
ZmluZDogeworICAgICAgICAgICAgICAgICJJRCI6IGFzc2VydEdldElkTm90TmFtZSA/CisgICAg
ICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiggaWQsIGNvbnRleHQsIHhtbCApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50
QnlJZCAhPT0gc3RydW5kZWZpbmVkICYmICF4bWwgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIG0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHBhcmVudE5v
ZGUgdG8gY2F0Y2ggd2hlbiBCbGFja2JlcnJ5IDQuNiByZXR1cm5zCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9kZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRo
ZSBkb2N1bWVudCAjNjk2MworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBtICYmIG0ucGFyZW50Tm9kZSA/IFttXSA6IFtdOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZ1bmN0aW9uKCBpZCwgY29udGV4dCwgeG1sICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9
PSBzdHJ1bmRlZmluZWQgJiYgIXhtbCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbSA/CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLmlkID09PSBpZCB8fCB0eXBl
b2YgbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBzdHJ1bmRlZmluZWQgJiYgbS5nZXRBdHRyaWJ1dGVO
b2RlKCJpZCIpLnZhbHVlID09PSBpZCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFttXSA6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCA6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAg
ICAgICAgICJUQUciOiBhc3NlcnRUYWdOYW1lTm9Db21tZW50cyA/CisgICAgICAgICAgICAgICAg
ICAgICAgICBmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBz
dHJ1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5
VGFnTmFtZSggdGFnICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmls
dGVyIG91dCBwb3NzaWJsZSBjb21tZW50cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIHRhZyA9PT0gIioiICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBlbGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG1wID0gW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpID0gMDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoIDsgKGVsZW0gPSByZXN1bHRzW2ldKTsgaSsrICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAx
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0bXAucHVzaCggZWxlbSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0bXA7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgICAgICAgICAgICAgICAgICB9LAor
CisgICAgICAgICAgICAgICAgIk5BTUUiOiBhc3NlcnRVc2FibGVOYW1lICYmIGZ1bmN0aW9uKCB0
YWcsIGNvbnRleHQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250
ZXh0LmdldEVsZW1lbnRzQnlOYW1lICE9PSBzdHJ1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlOYW1lKCBuYW1l
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSwKKworICAg
ICAgICAgICAgICAgICJDTEFTUyI6IGFzc2VydFVzYWJsZUNsYXNzTmFtZSAmJiBmdW5jdGlvbigg
Y2xhc3NOYW1lLCBjb250ZXh0LCB4bWwgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09IHN0cnVuZGVmaW5lZCAm
JiAheG1sICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4
dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBjbGFzc05hbWUgKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgcmVsYXRp
dmU6IHsKKyAgICAgICAgICAgICAgICAiPiI6IHsgZGlyOiAicGFyZW50Tm9kZSIsIGZpcnN0OiB0
cnVlIH0sCisgICAgICAgICAgICAgICAgIiAiOiB7IGRpcjogInBhcmVudE5vZGUiIH0sCisgICAg
ICAgICAgICAgICAgIisiOiB7IGRpcjogInByZXZpb3VzU2libGluZyIsIGZpcnN0OiB0cnVlIH0s
CisgICAgICAgICAgICAgICAgIn4iOiB7IGRpcjogInByZXZpb3VzU2libGluZyIgfQorICAgICAg
ICB9LAorCisgICAgICAgIHByZUZpbHRlcjogeworICAgICAgICAgICAgICAgICJBVFRSIjogZnVu
Y3Rpb24oIG1hdGNoICkgeworICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbMV0gPSBtYXRj
aFsxXS5yZXBsYWNlKCByYmFja3NsYXNoLCAiIiApOworCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3RlZCBvciB1
bnF1b3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbM10gPSAoIG1hdGNoWzRdIHx8
IG1hdGNoWzVdIHx8ICIiICkucmVwbGFjZSggcmJhY2tzbGFzaCwgIiIgKTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBtYXRjaFsyXSA9PT0gIn49IiApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWF0Y2hbM10gPSAiICIgKyBtYXRjaFszXSArICIgIjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1h
dGNoLnNsaWNlKCAwLCA0ICk7CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAg
ICJDSElMRCI6IGZ1bmN0aW9uKCBtYXRjaCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8q
IG1hdGNoZXMgZnJvbSBtYXRjaEV4cHJbIkNISUxEIl0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMSB0eXBlIChvbmx5fG50aHwuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDIgYXJndW1lbnQgKGV2ZW58b2RkfFxkKnxcZCpuKFsrLV1cZCspP3wuLi4pCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgeG4tY29tcG9uZW50IG9mIHhuK3kgYXJndW1l
bnQgKFsrLV0/XGQqbnwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgc2lnbiBv
ZiB4bi1jb21wb25lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNSB4IG9mIHhu
LWNvbXBvbmVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2IHNpZ24gb2YgeS1j
b21wb25lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNyB5IG9mIHktY29tcG9u
ZW50CisgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAg
bWF0Y2hbMV0gPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpOworCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIG1hdGNoWzFdID09PSAibnRoIiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gbnRoLWNoaWxkIHJlcXVpcmVzIGFyZ3VtZW50CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggIW1hdGNoWzJdICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZvciBFeHByLmZpbHRlci5DSElMRAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1lbWJlciB0aGF0IGZhbHNlL3RydWUg
Y2FzdCByZXNwZWN0aXZlbHkgdG8gMC8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1hdGNoWzNdID0gKyggbWF0Y2hbM10gPyBtYXRjaFs0XSArIChtYXRjaFs1XSB8fCAxKSA6IDIg
KiAoIG1hdGNoWzJdID09PSAiZXZlbiIgfHwgbWF0Y2hbMl0gPT09ICJvZGQiICkgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbNF0gPSArKCAoIG1hdGNoWzZdICsgbWF0
Y2hbN10gKSB8fCBtYXRjaFsyXSA9PT0gIm9kZCIgKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gb3RoZXIgdHlwZXMgcHJvaGliaXQgYXJndW1lbnRzCisgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKCBtYXRjaFsyXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU2l6emxlLmVycm9yKCBtYXRjaFswXSApOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CisgICAgICAgICAgICAg
ICAgfSwKKworICAgICAgICAgICAgICAgICJQU0VVRE8iOiBmdW5jdGlvbiggbWF0Y2ggKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgdW5xdW90ZWQsIGV4Y2VzczsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggbWF0Y2hFeHByWyJDSElMRCJdLnRlc3QoIG1hdGNoWzBdICkgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoWzNd
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFsyXSA9IG1hdGNoWzNd
OworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggKHVucXVvdGVkID0gbWF0Y2hb
NF0pICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGNoZWNrIGFy
Z3VtZW50cyB0aGF0IGNvbnRhaW4gYSBwc2V1ZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBycHNldWRvLnRlc3QodW5xdW90ZWQpICYmCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNp
dmVseSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXhjZXNzID0g
dG9rZW5pemUoIHVucXVvdGVkLCB0cnVlICkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lz
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4Y2VzcyA9IHVucXVv
dGVkLmluZGV4T2YoICIpIiwgdW5xdW90ZWQubGVuZ3RoIC0gZXhjZXNzICkgLSB1bnF1b3RlZC5s
ZW5ndGgpICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
ZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnF1b3RlZCA9IHVucXVvdGVkLnNsaWNlKCAwLCBleGNlc3MgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFswXSA9IG1hdGNoWzBdLnNs
aWNlKCAwLCBleGNlc3MgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFsyXSA9IHVucXVvdGVkOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4g
b25seSBjYXB0dXJlcyBuZWVkZWQgYnkgdGhlIHBzZXVkbyBmaWx0ZXIgbWV0aG9kICh0eXBlIGFu
ZCBhcmd1bWVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaC5zbGljZSgg
MCwgMyApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICBmaWx0ZXI6
IHsKKyAgICAgICAgICAgICAgICAiSUQiOiBhc3NlcnRHZXRJZE5vdE5hbWUgPworICAgICAgICAg
ICAgICAgICAgICAgICAgZnVuY3Rpb24oIGlkICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZCA9IGlkLnJlcGxhY2UoIHJiYWNrc2xhc2gsICIiICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoImlk
IikgPT09IGlkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAg
ICAgICAgICAgICAgICAgfSA6CisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiggaWQg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gaWQucmVwbGFjZSggcmJh
Y2tzbGFzaCwgIiIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gc3RydW5kZWZpbmVk
ICYmIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0s
CisKKyAgICAgICAgICAgICAgICAiVEFHIjogZnVuY3Rpb24oIG5vZGVOYW1lICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBub2RlTmFtZSA9PT0gIioiICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9Owor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZU5h
bWUgPSBub2RlTmFtZS5yZXBsYWNlKCByYmFja3NsYXNoLCAiIiApLnRvTG93ZXJDYXNlKCk7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5u
b2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBub2RlTmFtZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICJDTEFTUyI6IGZ1
bmN0aW9uKCBjbGFzc05hbWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGF0dGVy
biA9IGNsYXNzQ2FjaGVbIGV4cGFuZG8gXVsgY2xhc3NOYW1lICsgIiAiIF07CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBwYXR0ZXJuIHx8CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChwYXR0ZXJuID0gbmV3IFJlZ0V4cCggIihefCIgKyB3aGl0ZXNwYWNlICsgIiki
ICsgY2xhc3NOYW1lICsgIigiICsgd2hpdGVzcGFjZSArICJ8JCkiICkpICYmCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNsYXNzQ2FjaGUoIGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVs
ZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBh
dHRlcm4udGVzdCggZWxlbS5jbGFzc05hbWUgfHwgKHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSAh
PT0gc3RydW5kZWZpbmVkICYmIGVsZW0uZ2V0QXR0cmlidXRlKCJjbGFzcyIpKSB8fCAiIiApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9LAor
CisgICAgICAgICAgICAgICAgIkFUVFIiOiBmdW5jdGlvbiggbmFtZSwgb3BlcmF0b3IsIGNoZWNr
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtLCBjb250
ZXh0ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gU2l6
emxlLmF0dHIoIGVsZW0sIG5hbWUgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIHJlc3VsdCA9PSBudWxsICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBvcGVyYXRvciA9PT0gIiE9IjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFvcGVy
YXRvciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiIjsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gb3BlcmF0b3IgPT09ICI9IiA/IHJlc3VsdCA9PT0gY2hlY2sgOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSAiIT0i
ID8gcmVzdWx0ICE9PSBjaGVjayA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3BlcmF0b3IgPT09ICJePSIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sg
KSA9PT0gMCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0
b3IgPT09ICIqPSIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9PT0gIiQ9IiA/
IGNoZWNrICYmIHJlc3VsdC5zdWJzdHIoIHJlc3VsdC5sZW5ndGggLSBjaGVjay5sZW5ndGggKSA9
PT0gY2hlY2sgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJh
dG9yID09PSAifj0iID8gKCAiICIgKyByZXN1bHQgKyAiICIgKS5pbmRleE9mKCBjaGVjayApID4g
LTEgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09
PSAifD0iID8gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc3Vic3RyKCAwLCBjaGVjay5sZW5n
dGggKyAxICkgPT09IGNoZWNrICsgIi0iIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgICAgfSwKKworICAgICAgICAgICAgICAgICJDSElMRCI6IGZ1bmN0aW9uKCB0eXBlLCBhcmd1
bWVudCwgZmlyc3QsIGxhc3QgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlw
ZSA9PT0gIm50aCIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
dW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgbm9kZSwgZGlmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggZmlyc3QgPT09IDEgJiYgbGFzdCA9PT0gMCApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcGFyZW50ICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZiA9IDA7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBub2RlID0g
cGFyZW50LmZpcnN0Q2hpbGQ7IG5vZGU7IG5vZGUgPSBub2RlLm5leHRTaWJsaW5nICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IG5vZGUubm9kZVR5cGUgPT09IDEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZisrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxl
bSA9PT0gbm9kZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEluY29ycG9yYXRlIHRoZSBvZmZzZXQgKG9yIGNhc3QgdG8gTmFO
KSwgdGhlbiBjaGVjayBhZ2FpbnN0IGN5Y2xlIHNpemUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkaWZmIC09IGxhc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGRpZmYgPT09IGZpcnN0IHx8ICggZGlmZiAlIGZpcnN0ID09
PSAwICYmIGRpZmYgLyBmaXJzdCA+PSAwICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIG5vZGUgPSBlbGVtOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCAoIHR5cGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAib25seSI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAiZmlyc3QiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2hpbGUgKCAobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBub2Rl
Lm5vZGVUeXBlID09PSAxICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJmaXJzdCIgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlID0gZWxlbTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgImxhc3QiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2hpbGUgKCAobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAiUFNFVURPIjogZnVuY3Rp
b24oIHBzZXVkbywgYXJndW1lbnQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBwc2V1
ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXMKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFByaW9yaXRpemUgYnkgY2FzZSBzZW5zaXRpdml0eSBp
biBjYXNlIGN1c3RvbSBwc2V1ZG9zIGFyZSBhZGRlZCB3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5oZXJp
dHMgZnJvbSBwc2V1ZG9zCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8
IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpenpsZS5lcnJvciggInVuc3VwcG9ydGVkIHBz
ZXVkbzogIiArIHBzZXVkbyApOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgdXNl
ciBtYXkgdXNlIGNyZWF0ZVBzZXVkbyB0byBpbmRpY2F0ZSB0aGF0CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBhcmd1bWVudHMgYXJlIG5lZWRlZCB0byBjcmVhdGUgdGhlIGZpbHRlciBmdW5j
dGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBhcyBTaXp6bGUgZG9lcworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBmblsgZXhwYW5kbyBdICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4oIGFyZ3VtZW50ICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1dCBtYWludGFpbiBz
dXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlcworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBm
bi5sZW5ndGggPiAxICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0g
WyBwc2V1ZG8sIHBzZXVkbywgIiIsIGFyZ3VtZW50IF07CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBFeHByLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoIHBzZXVkby50
b0xvd2VyQ2FzZSgpICkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpZHgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBmbigg
c2VlZCwgYXJndW1lbnQgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaSA9IG1hdGNoZWQubGVuZ3RoOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeCA9IGluZGV4
T2YuY2FsbCggc2VlZCwgbWF0Y2hlZFtpXSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVkWyBpZHggXSA9ICEoIG1hdGNoZXNbIGlk
eCBdID0gbWF0Y2hlZFtpXSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0p
IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiggZWxl
bSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmbiggZWxlbSwgMCwgYXJncyApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAg
ICAgICAgcHNldWRvczogeworICAgICAgICAgICAgICAgICJub3QiOiBtYXJrRnVuY3Rpb24oZnVu
Y3Rpb24oIHNlbGVjdG9yICkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJpbSB0aGUg
c2VsZWN0b3IgcGFzc2VkIHRvIGNvbXBpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRv
IGF2b2lkIHRyZWF0aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBzcGFjZXMgYXMgY29tYmluYXRvcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBpbnB1dCA9IFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0g
W10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXIgPSBjb21waWxlKCBz
ZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgIiQxIiApICk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBtYXRjaGVyWyBleHBhbmRvIF0gPworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIGNvbnRleHQsIHht
bCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVubWF0Y2hl
ZCA9IG1hdGNoZXIoIHNlZWQsIG51bGwsIHhtbCwgW10gKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBzZWVkLmxlbmd0aDsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1hdGNoIGVsZW1lbnRzIHVubWF0Y2hl
ZCBieSBgbWF0Y2hlcmAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
aGlsZSAoIGktLSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVkW2ldID0gIShtYXRjaGVz
W2ldID0gZWxlbSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9KSA6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRbMF0gPSBlbGVtOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3Vs
dHMgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXJl
c3VsdHMucG9wKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICAgICAgfSksCisKKyAgICAgICAgICAgICAgICAiaGFzIjogbWFya0Z1bmN0aW9uKGZ1bmN0
aW9uKCBzZWxlY3RvciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlv
biggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNpenps
ZSggc2VsZWN0b3IsIGVsZW0gKS5sZW5ndGggPiAwOworICAgICAgICAgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgICAgICB9KSwKKworICAgICAgICAgICAgICAgICJjb250YWlucyI6IG1h
cmtGdW5jdGlvbihmdW5jdGlvbiggdGV4dCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICggZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlubmVyVGV4dCB8fCBnZXRUZXh0KCBl
bGVtICkgKS5pbmRleE9mKCB0ZXh0ICkgPiAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAgfSksCisKKyAgICAgICAgICAgICAgICAiZW5hYmxlZCI6IGZ1bmN0
aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uZGlzYWJs
ZWQgPT09IGZhbHNlOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAiZGlz
YWJsZWQiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlbGVtLmRpc2FibGVkID09PSB0cnVlOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAg
ICAgICAgICAiY2hlY2tlZCI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSW4gQ1NTMywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5k
IHNlbGVjdGVkIGVsZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwOi8vd3d3
LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZAorICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2Vy
Q2FzZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChub2RlTmFtZSA9PT0gImlu
cHV0IiAmJiAhIWVsZW0uY2hlY2tlZCkgfHwgKG5vZGVOYW1lID09PSAib3B0aW9uIiAmJiAhIWVs
ZW0uc2VsZWN0ZWQpOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAic2Vs
ZWN0ZWQiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFj
Y2Vzc2luZyB0aGlzIHByb3BlcnR5IG1ha2VzIHNlbGVjdGVkLWJ5LWRlZmF1bHQKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIG9wdGlvbnMgaW4gU2FmYXJpIHdvcmsgcHJvcGVybHkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5wYXJlbnROb2RlICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbGVtLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVs
ZW0uc2VsZWN0ZWQgPT09IHRydWU7CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAg
ICAgICJwYXJlbnQiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAhRXhwci5wc2V1ZG9zWyJlbXB0eSJdKCBlbGVtICk7CisgICAgICAgICAgICAgICAg
fSwKKworICAgICAgICAgICAgICAgICJlbXB0eSI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNlbXB0
eS1wc2V1ZG8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIDplbXB0eSBpcyBvbmx5IGFmZmVj
dGVkIGJ5IGVsZW1lbnQgbm9kZXMgYW5kIGNvbnRlbnQgbm9kZXMoaW5jbHVkaW5nIHRleHQoMyks
IGNkYXRhKDQpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgbm90IGNvbW1lbnQsIHBy
b2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zLCBvciBvdGhlcnMKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFRoYW5rcyB0byBEaWVnbyBQZXJpbmkgZm9yIHRoZSBub2RlTmFtZSBzaG9ydGN1dAorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gICBHcmVhdGVyIHRoYW4gIkAiIG1lYW5zIGFscGhhIGNo
YXJhY3RlcnMgKHNwZWNpZmljYWxseSBub3Qgc3RhcnRpbmcgd2l0aCAiIyIgb3IgIj8iKQorICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGVUeXBlOworICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxl
ICggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5v
ZGVOYW1lID4gIkAiIHx8IChub2RlVHlwZSA9IGVsZW0ubm9kZVR5cGUpID09PSAzIHx8IG5vZGVU
eXBlID09PSA0ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gZWxlbS5uZXh0U2libGluZzsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAiaGVhZGVyIjogZnVuY3Rpb24o
IGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmhlYWRlci50ZXN0KCBl
bGVtLm5vZGVOYW1lICk7CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICJ0
ZXh0IjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlw
ZSwgYXR0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFNiBhbmQgNyB3aWxsIG1hcCBl
bGVtLnR5cGUgdG8gJ3RleHQnIGZvciBuZXcgSFRNTDUgdHlwZXMgKHNlYXJjaCwgZXRjKQorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gdXNlIGdldEF0dHJpYnV0ZSBpbnN0ZWFkIHRvIHRlc3Qg
dGhpcyBjYXNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlTmFtZS50
b0xvd2VyQ2FzZSgpID09PSAiaW5wdXQiICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICh0eXBlID0gZWxlbS50eXBlKSA9PT0gInRleHQiICYmCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICggKGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZSgidHlwZSIpKSA9PSBudWxs
IHx8IGF0dHIudG9Mb3dlckNhc2UoKSA9PT0gdHlwZSApOworICAgICAgICAgICAgICAgIH0sCisK
KyAgICAgICAgICAgICAgICAvLyBJbnB1dCB0eXBlcworICAgICAgICAgICAgICAgICJyYWRpbyI6
IGNyZWF0ZUlucHV0UHNldWRvKCJyYWRpbyIpLAorICAgICAgICAgICAgICAgICJjaGVja2JveCI6
IGNyZWF0ZUlucHV0UHNldWRvKCJjaGVja2JveCIpLAorICAgICAgICAgICAgICAgICJmaWxlIjog
Y3JlYXRlSW5wdXRQc2V1ZG8oImZpbGUiKSwKKyAgICAgICAgICAgICAgICAicGFzc3dvcmQiOiBj
cmVhdGVJbnB1dFBzZXVkbygicGFzc3dvcmQiKSwKKyAgICAgICAgICAgICAgICAiaW1hZ2UiOiBj
cmVhdGVJbnB1dFBzZXVkbygiaW1hZ2UiKSwKKworICAgICAgICAgICAgICAgICJzdWJtaXQiOiBj
cmVhdGVCdXR0b25Qc2V1ZG8oInN1Ym1pdCIpLAorICAgICAgICAgICAgICAgICJyZXNldCI6IGNy
ZWF0ZUJ1dHRvblBzZXVkbygicmVzZXQiKSwKKworICAgICAgICAgICAgICAgICJidXR0b24iOiBm
dW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gZWxl
bS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG5hbWUgPT09ICJpbnB1dCIgJiYgZWxlbS50eXBlID09PSAiYnV0dG9uIiB8fCBuYW1lID09PSAi
YnV0dG9uIjsKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgImlucHV0Ijog
ZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmlucHV0
cy50ZXN0KCBlbGVtLm5vZGVOYW1lICk7CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAg
ICAgICAgICJmb2N1cyI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlbGVtID09PSBkb2MuYWN0aXZlRWxlbWVudCAmJiAoIWRvYy5oYXNGb2N1cyB8fCBk
b2MuaGFzRm9jdXMoKSkgJiYgISEoZWxlbS50eXBlIHx8IGVsZW0uaHJlZiB8fCB+ZWxlbS50YWJJ
bmRleCk7CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICJhY3RpdmUiOiBm
dW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtID09
PSBlbGVtLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudDsKKyAgICAgICAgICAgICAgICB9LAor
CisgICAgICAgICAgICAgICAgLy8gUG9zaXRpb25hbCB0eXBlcworICAgICAgICAgICAgICAgICJm
aXJzdCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gWyAwIF07CisgICAgICAgICAgICAgICAgfSksCisKKyAgICAgICAg
ICAgICAgICAibGFzdCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5k
ZXhlcywgbGVuZ3RoICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsgbGVuZ3Ro
IC0gMSBdOworICAgICAgICAgICAgICAgIH0pLAorCisgICAgICAgICAgICAgICAgImVxIjogY3Jl
YXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3Vt
ZW50ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsgYXJndW1lbnQgPCAwID8g
YXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudCBdOworICAgICAgICAgICAgICAgIH0pLAorCisg
ICAgICAgICAgICAgICAgImV2ZW4iOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBt
YXRjaEluZGV4ZXMsIGxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZh
ciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAyICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYXRjaEluZGV4ZXMucHVzaCggaSApOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoSW5kZXhlczsKKyAgICAgICAg
ICAgICAgICB9KSwKKworICAgICAgICAgICAgICAgICJvZGQiOiBjcmVhdGVQb3NpdGlvbmFsUHNl
dWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoIHZhciBpID0gMTsgaSA8IGxlbmd0aDsgaSArPSAyICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYXRjaEluZGV4ZXMucHVzaCggaSApOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoSW5k
ZXhlczsKKyAgICAgICAgICAgICAgICB9KSwKKworICAgICAgICAgICAgICAgICJsdCI6IGNyZWF0
ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVu
dCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gYXJndW1lbnQgPCAw
ID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDsgLS1pID49IDA7ICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYXRjaEluZGV4ZXMucHVzaCggaSApOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoSW5k
ZXhlczsKKyAgICAgICAgICAgICAgICB9KSwKKworICAgICAgICAgICAgICAgICJndCI6IGNyZWF0
ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVu
dCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gYXJndW1lbnQgPCAw
ID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDsgKytpIDwgbGVuZ3RoOyApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hJbmRleGVzLnB1c2goIGkgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRj
aEluZGV4ZXM7CisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgfQorfTsKKworZnVuY3Rpb24g
c2libGluZ0NoZWNrKCBhLCBiLCByZXQgKSB7CisgICAgICAgIGlmICggYSA9PT0gYiApIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisKKyAgICAgICAgdmFyIGN1ciA9
IGEubmV4dFNpYmxpbmc7CisKKyAgICAgICAgd2hpbGUgKCBjdXIgKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCBjdXIgPT09IGIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY3VyID0gY3VyLm5leHRTaWJs
aW5nOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK3NvcnRPcmRlciA9IGRv
Y0VsZW0uY29tcGFyZURvY3VtZW50UG9zaXRpb24gPworICAgICAgICBmdW5jdGlvbiggYSwgYiAp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIGEgPT09IGIgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBoYXNEdXBsaWNhdGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuICggIWEuY29t
cGFyZURvY3VtZW50UG9zaXRpb24gfHwgIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb24gPworICAg
ICAgICAgICAgICAgICAgICAgICAgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiA6CisgICAgICAg
ICAgICAgICAgICAgICAgICBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpICYgNAorICAgICAg
ICAgICAgICAgICkgPyAtMSA6IDE7CisgICAgICAgIH0gOgorICAgICAgICBmdW5jdGlvbiggYSwg
YiApIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgbm9kZXMgYXJlIGlkZW50aWNhbCwgd2UgY2Fu
IGV4aXQgZWFybHkKKyAgICAgICAgICAgICAgICBpZiAoIGEgPT09IGIgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBoYXNEdXBsaWNhdGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgICAgICAvLyBGYWxsYmFjayB0byB1c2luZyBzb3Vy
Y2VJbmRleCAoaW4gSUUpIGlmIGl0J3MgYXZhaWxhYmxlIG9uIGJvdGggbm9kZXMKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKCBhLnNvdXJjZUluZGV4ICYmIGIuc291cmNlSW5kZXggKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5k
ZXg7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFyIGFsLCBibCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGFwID0gW10sCisgICAgICAgICAgICAgICAgICAgICAgICBi
cCA9IFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgYXVwID0gYS5wYXJlbnROb2RlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgYnVwID0gYi5wYXJlbnROb2RlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgY3VyID0gYXVwOworCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5vZGVzIGFy
ZSBzaWJsaW5ncyAob3IgaWRlbnRpY2FsKSB3ZSBjYW4gZG8gYSBxdWljayBjaGVjaworICAgICAg
ICAgICAgICAgIGlmICggYXVwID09PSBidXAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gc2libGluZ0NoZWNrKCBhLCBiICk7CisKKyAgICAgICAgICAgICAgICAvLyBJZiBubyBw
YXJlbnRzIHdlcmUgZm91bmQgdGhlbiB0aGUgbm9kZXMgYXJlIGRpc2Nvbm5lY3RlZAorICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoICFhdXAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gLTE7CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAhYnVwICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZXkncmUgc29tZXdoZXJlIGVsc2UgaW4gdGhlIHRyZWUg
c28gd2UgbmVlZAorICAgICAgICAgICAgICAgIC8vIHRvIGJ1aWxkIHVwIGEgZnVsbCBsaXN0IG9m
IHRoZSBwYXJlbnROb2RlcyBmb3IgY29tcGFyaXNvbgorICAgICAgICAgICAgICAgIHdoaWxlICgg
Y3VyICkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXAudW5zaGlmdCggY3VyICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjdXIgPSBjdXIucGFyZW50Tm9kZTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBjdXIgPSBidXA7CisKKyAgICAgICAgICAgICAgICB3aGls
ZSAoIGN1ciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJwLnVuc2hpZnQoIGN1ciApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY3VyID0gY3VyLnBhcmVudE5vZGU7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgYWwgPSBhcC5sZW5ndGg7CisgICAgICAgICAgICAg
ICAgYmwgPSBicC5sZW5ndGg7CisKKyAgICAgICAgICAgICAgICAvLyBTdGFydCB3YWxraW5nIGRv
d24gdGhlIHRyZWUgbG9va2luZyBmb3IgYSBkaXNjcmVwYW5jeQorICAgICAgICAgICAgICAgIGZv
ciAoIHZhciBpID0gMDsgaSA8IGFsICYmIGkgPCBibDsgaSsrICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBhcFtpXSAhPT0gYnBbaV0gKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBzaWJsaW5nQ2hlY2soIGFwW2ldLCBicFtpXSApOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8v
IFdlIGVuZGVkIHNvbWVwbGFjZSB1cCB0aGUgdHJlZSBzbyBkbyBhIHNpYmxpbmcgY2hlY2sKKyAg
ICAgICAgICAgICAgICByZXR1cm4gaSA9PT0gYWwgPworICAgICAgICAgICAgICAgICAgICAgICAg
c2libGluZ0NoZWNrKCBhLCBicFtpXSwgLTEgKSA6CisgICAgICAgICAgICAgICAgICAgICAgICBz
aWJsaW5nQ2hlY2soIGFwW2ldLCBiLCAxICk7CisgICAgICAgIH07CisKKy8vIEFsd2F5cyBhc3N1
bWUgdGhlIHByZXNlbmNlIG9mIGR1cGxpY2F0ZXMgaWYgc29ydCBkb2Vzbid0CisvLyBwYXNzIHRo
ZW0gdG8gb3VyIGNvbXBhcmlzb24gZnVuY3Rpb24gKGFzIGluIEdvb2dsZSBDaHJvbWUpLgorWzAs
IDBdLnNvcnQoIHNvcnRPcmRlciApOworYmFzZUhhc0R1cGxpY2F0ZSA9ICFoYXNEdXBsaWNhdGU7
CisKKy8vIERvY3VtZW50IHNvcnRpbmcgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXMKK1NpenpsZS51
bmlxdWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7CisgICAgICAgIHZhciBlbGVtLAorICAg
ICAgICAgICAgICAgIGR1cGxpY2F0ZXMgPSBbXSwKKyAgICAgICAgICAgICAgICBpID0gMSwKKyAg
ICAgICAgICAgICAgICBqID0gMDsKKworICAgICAgICBoYXNEdXBsaWNhdGUgPSBiYXNlSGFzRHVw
bGljYXRlOworICAgICAgICByZXN1bHRzLnNvcnQoIHNvcnRPcmRlciApOworCisgICAgICAgIGlm
ICggaGFzRHVwbGljYXRlICkgeworICAgICAgICAgICAgICAgIGZvciAoIDsgKGVsZW0gPSByZXN1
bHRzW2ldKTsgaSsrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtID09PSBy
ZXN1bHRzWyBpIC0gMSBdICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0g
ZHVwbGljYXRlcy5wdXNoKCBpICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdoaWxlICggai0tICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0cy5zcGxpY2UoIGR1cGxpY2F0ZXNbIGogXSwgMSApOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHRzOworfTsKKwor
U2l6emxlLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCAiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIiArIG1zZyApOworfTsK
KworZnVuY3Rpb24gdG9rZW5pemUoIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7CisgICAgICAgIHZh
ciBtYXRjaGVkLCBtYXRjaCwgdG9rZW5zLCB0eXBlLAorICAgICAgICAgICAgICAgIHNvRmFyLCBn
cm91cHMsIHByZUZpbHRlcnMsCisgICAgICAgICAgICAgICAgY2FjaGVkID0gdG9rZW5DYWNoZVsg
ZXhwYW5kbyBdWyBzZWxlY3RvciArICIgIiBdOworCisgICAgICAgIGlmICggY2FjaGVkICkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZU9ubHkgPyAwIDogY2FjaGVkLnNsaWNlKCAwICk7
CisgICAgICAgIH0KKworICAgICAgICBzb0ZhciA9IHNlbGVjdG9yOworICAgICAgICBncm91cHMg
PSBbXTsKKyAgICAgICAgcHJlRmlsdGVycyA9IEV4cHIucHJlRmlsdGVyOworCisgICAgICAgIHdo
aWxlICggc29GYXIgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBDb21tYSBhbmQgZmlyc3QgcnVu
CisgICAgICAgICAgICAgICAgaWYgKCAhbWF0Y2hlZCB8fCAobWF0Y2ggPSByY29tbWEuZXhlYygg
c29GYXIgKSkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBjb25zdW1lIHRyYWlsaW5nIGNv
bW1hcyBhcyB2YWxpZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb0ZhciA9IHNv
RmFyLnNsaWNlKCBtYXRjaFswXS5sZW5ndGggKSB8fCBzb0ZhcjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3Vwcy5wdXNoKCB0b2tlbnMgPSBb
XSApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBmYWxz
ZTsKKworICAgICAgICAgICAgICAgIC8vIENvbWJpbmF0b3JzCisgICAgICAgICAgICAgICAgaWYg
KCAobWF0Y2ggPSByY29tYmluYXRvcnMuZXhlYyggc29GYXIgKSkgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbnMucHVzaCggbWF0Y2hlZCA9IG5ldyBUb2tlbiggbWF0Y2guc2hpZnQo
KSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICBzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRj
aGVkLmxlbmd0aCApOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXN0IGRlc2NlbmRh
bnQgY29tYmluYXRvcnMgdG8gc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQu
dHlwZSA9IG1hdGNoWzBdLnJlcGxhY2UoIHJ0cmltLCAiICIgKTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAvLyBGaWx0ZXJzCisgICAgICAgICAgICAgICAgZm9yICggdHlw
ZSBpbiBFeHByLmZpbHRlciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKG1hdGNo
ID0gbWF0Y2hFeHByWyB0eXBlIF0uZXhlYyggc29GYXIgKSkgJiYgKCFwcmVGaWx0ZXJzWyB0eXBl
IF0gfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoID0gcHJlRmlsdGVy
c1sgdHlwZSBdKCBtYXRjaCApKSkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW5zLnB1c2goIG1hdGNoZWQgPSBuZXcgVG9rZW4oIG1hdGNoLnNoaWZ0KCkgKSApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRj
aGVkLmxlbmd0aCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLnR5
cGUgPSB0eXBlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLm1hdGNo
ZXMgPSBtYXRjaDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAoICFtYXRjaGVkICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8g
UmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGludmFsaWQgZXhjZXNzCisgICAgICAgIC8vIGlmIHdl
J3JlIGp1c3QgcGFyc2luZworICAgICAgICAvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9y
IHJldHVybiB0b2tlbnMKKyAgICAgICAgcmV0dXJuIHBhcnNlT25seSA/CisgICAgICAgICAgICAg
ICAgc29GYXIubGVuZ3RoIDoKKyAgICAgICAgICAgICAgICBzb0ZhciA/CisgICAgICAgICAgICAg
ICAgICAgICAgICBTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOgorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gQ2FjaGUgdGhlIHRva2VucworICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5D
YWNoZSggc2VsZWN0b3IsIGdyb3VwcyApLnNsaWNlKCAwICk7Cit9CisKK2Z1bmN0aW9uIGFkZENv
bWJpbmF0b3IoIG1hdGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7CisgICAgICAgIHZhciBkaXIg
PSBjb21iaW5hdG9yLmRpciwKKyAgICAgICAgICAgICAgICBjaGVja05vbkVsZW1lbnRzID0gYmFz
ZSAmJiBjb21iaW5hdG9yLmRpciA9PT0gInBhcmVudE5vZGUiLAorICAgICAgICAgICAgICAgIGRv
bmVOYW1lID0gZG9uZSsrOworCisgICAgICAgIHJldHVybiBjb21iaW5hdG9yLmZpcnN0ID8KKyAg
ICAgICAgICAgICAgICAvLyBDaGVjayBhZ2FpbnN0IGNsb3Nlc3QgYW5jZXN0b3IvcHJlY2VkaW5n
IGVsZW1lbnQKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjaGVja05vbkVsZW1lbnRz
IHx8IGVsZW0ubm9kZVR5cGUgPT09IDEgICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0gOgorCisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgYWdhaW5zdCBh
bGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzCisgICAgICAgICAgICAgICAgZnVuY3Rpb24o
IGVsZW0sIGNvbnRleHQsIHhtbCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNh
bid0IHNldCBhcmJpdHJhcnkgZGF0YSBvbiBYTUwgbm9kZXMsIHNvIHRoZXkgZG9uJ3QgYmVuZWZp
dCBmcm9tIGRpciBjYWNoaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICF4bWwgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWNoZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJrZXkgPSBkaXJydW5zICsgIiAiICsgZG9u
ZU5hbWUgKyAiICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fj
aGVka2V5ID0gZGlya2V5ICsgY2FjaGVkcnVuczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNoZWNrTm9uRWxlbWVudHMgfHwgZWxlbS5ub2Rl
VHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggKGNhY2hlID0gZWxlbVsgZXhwYW5kbyBdKSA9PT0gY2FjaGVka2V5ICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZWxlbS5zaXpzZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgY2FjaGUgPT09ICJzdHJpbmciICYmIGNhY2hl
LmluZGV4T2YoZGlya2V5KSA9PT0gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLnNpenNldCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZWxlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxlbVsgZXhwYW5kbyBdID0gY2FjaGVka2V5OworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoZXIo
IGVsZW0sIGNvbnRleHQsIHhtbCApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc2l6c2V0ID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZWxlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbGVtLnNpenNldCA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNoZWNrTm9uRWxlbWVudHMgfHwgZWxlbS5u
b2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
bGVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH07Cit9CisKK2Z1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHsKKyAg
ICAgICAgcmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgPworICAgICAgICAgICAgICAgIGZ1bmN0
aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
aSA9IG1hdGNoZXJzLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggaS0t
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFtYXRjaGVyc1tpXSgg
ZWxlbSwgY29udGV4dCwgeG1sICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IDoKKyAgICAgICAgICAgICAgICBtYXRjaGVyc1sw
XTsKK30KKworZnVuY3Rpb24gY29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRl
eHQsIHhtbCApIHsKKyAgICAgICAgdmFyIGVsZW0sCisgICAgICAgICAgICAgICAgbmV3VW5tYXRj
aGVkID0gW10sCisgICAgICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICAgICAgbGVuID0g
dW5tYXRjaGVkLmxlbmd0aCwKKyAgICAgICAgICAgICAgICBtYXBwZWQgPSBtYXAgIT0gbnVsbDsK
KworICAgICAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKKyAgICAgICAgICAgICAgICBpZiAo
IChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
IWZpbHRlciB8fCBmaWx0ZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuZXdVbm1hdGNoZWQucHVzaCggZWxlbSApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hcHBlZCApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYXAucHVzaCggaSApOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ld1VubWF0Y2hlZDsKK30KKworZnVu
Y3Rpb24gc2V0TWF0Y2hlciggcHJlRmlsdGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRl
ciwgcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICkgeworICAgICAgICBpZiAoIHBvc3RGaWx0ZXIg
JiYgIXBvc3RGaWx0ZXJbIGV4cGFuZG8gXSApIHsKKyAgICAgICAgICAgICAgICBwb3N0RmlsdGVy
ID0gc2V0TWF0Y2hlciggcG9zdEZpbHRlciApOworICAgICAgICB9CisgICAgICAgIGlmICggcG9z
dEZpbmRlciAmJiAhcG9zdEZpbmRlclsgZXhwYW5kbyBdICkgeworICAgICAgICAgICAgICAgIHBv
c3RGaW5kZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCByZXN1bHRz
LCBjb250ZXh0LCB4bWwgKSB7CisgICAgICAgICAgICAgICAgdmFyIHRlbXAsIGksIGVsZW0sCisg
ICAgICAgICAgICAgICAgICAgICAgICBwcmVNYXAgPSBbXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHBvc3RNYXAgPSBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWV4aXN0aW5nID0g
cmVzdWx0cy5sZW5ndGgsCisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCBpbml0aWFs
IGVsZW1lbnRzIGZyb20gc2VlZCBvciBjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICBl
bGVtcyA9IHNlZWQgfHwgbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IgfHwgIioiLCBjb250ZXh0
Lm5vZGVUeXBlID8gWyBjb250ZXh0IF0gOiBjb250ZXh0LCBbXSApLAorCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBQcmVmaWx0ZXIgdG8gZ2V0IG1hdGNoZXIgaW5wdXQsIHByZXNlcnZpbmcg
YSBtYXAgZm9yIHNlZWQtcmVzdWx0cyBzeW5jaHJvbml6YXRpb24KKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1hdGNoZXJJbiA9IHByZUZpbHRlciAmJiAoIHNlZWQgfHwgIXNlbGVjdG9yICkgPwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kZW5zZSggZWxlbXMsIHByZU1hcCwg
cHJlRmlsdGVyLCBjb250ZXh0LCB4bWwgKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW1zLAorCisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVyT3V0ID0gbWF0Y2hl
ciA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBwb3N0
RmluZGVyLCBvciBmaWx0ZXJlZCBzZWVkLCBvciBub24tc2VlZCBwb3N0RmlsdGVyIG9yIHByZWV4
aXN0aW5nIHJlc3VsdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RGaW5k
ZXIgfHwgKCBzZWVkID8gcHJlRmlsdGVyIDogcHJlZXhpc3RpbmcgfHwgcG9zdEZpbHRlciApID8K
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC4uLmludGVybWVk
aWF0ZSBwcm9jZXNzaW5nIGlzIG5lY2Vzc2FyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFtdIDoKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIC4uLm90aGVyd2lzZSB1c2UgcmVzdWx0cyBkaXJlY3RseQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXRjaGVySW47CisKKyAgICAgICAgICAgICAgICAvLyBGaW5kIHByaW1hcnkg
bWF0Y2hlcworICAgICAgICAgICAgICAgIGlmICggbWF0Y2hlciApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1hdGNoZXIoIG1hdGNoZXJJbiwgbWF0Y2hlck91dCwgY29udGV4dCwgeG1sICk7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQXBwbHkgcG9zdEZpbHRl
cgorICAgICAgICAgICAgICAgIGlmICggcG9zdEZpbHRlciApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRlbXAgPSBjb25kZW5zZSggbWF0Y2hlck91dCwgcG9zdE1hcCApOworICAgICAgICAg
ICAgICAgICAgICAgICAgcG9zdEZpbHRlciggdGVtcCwgW10sIGNvbnRleHQsIHhtbCApOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBVbi1tYXRjaCBmYWlsaW5nIGVsZW1lbnRzIGJ5IG1v
dmluZyB0aGVtIGJhY2sgdG8gbWF0Y2hlckluCisgICAgICAgICAgICAgICAgICAgICAgICBpID0g
dGVtcC5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9IHRlbXBbaV0pICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXJPdXRbIHBvc3RN
YXBbaV0gXSA9ICEobWF0Y2hlckluWyBwb3N0TWFwW2ldIF0gPSBlbGVtKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICggc2VlZCApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggcG9zdEZpbmRlciB8fCBwcmVGaWx0ZXIgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggcG9zdEZpbmRlciApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkg
Y29uZGVuc2luZyB0aGlzIGludGVybWVkaWF0ZSBpbnRvIHBvc3RGaW5kZXIgY29udGV4dHMKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gW107CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IG1hdGNoZXJPdXQubGVuZ3RoOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoZWxl
bSA9IG1hdGNoZXJPdXRbaV0pICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXN0b3JlIG1hdGNoZXJJbiBzaW5jZSBlbGVtIGlz
IG5vdCB5ZXQgYSBmaW5hbCBtYXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnB1c2goIChtYXRjaGVySW5baV0gPSBlbGVtKSAp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwb3N0RmluZGVyKCBudWxsLCAobWF0Y2hlck91dCA9IFtd
KSwgdGVtcCwgeG1sICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNb3ZlIG1hdGNoZWQgZWxlbWVudHMgZnJv
bSBzZWVkIHRvIHJlc3VsdHMgdG8ga2VlcCB0aGVtIHN5bmNocm9uaXplZAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpID0gbWF0Y2hlck91dC5sZW5ndGg7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSAmJgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRlbXAgPSBwb3N0Rmlu
ZGVyID8gaW5kZXhPZi5jYWxsKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbaV0pID4gLTEgKSB7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWRbdGVt
cF0gPSAhKHJlc3VsdHNbdGVtcF0gPSBlbGVtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEFkZCBlbGVtZW50cyB0
byByZXN1bHRzLCB0aHJvdWdoIHBvc3RGaW5kZXIgaWYgZGVmaW5lZAorICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVyT3V0ID0gY29uZGVuc2Uo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXJPdXQgPT09IHJlc3VsdHMg
PworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXJPdXQuc3Bs
aWNlKCBwcmVleGlzdGluZywgbWF0Y2hlck91dC5sZW5ndGggKSA6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlck91dAorICAgICAgICAgICAgICAgICAgICAg
ICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcG9zdEZpbmRlciApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdEZpbmRlciggbnVsbCwgcmVzdWx0cywgbWF0
Y2hlck91dCwgeG1sICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoLmFwcGx5KCByZXN1bHRzLCBtYXRjaGVyT3V0
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICB9KTsKK30KKworZnVuY3Rpb24gbWF0Y2hlckZyb21Ub2tlbnMoIHRva2VucyApIHsKKyAgICAg
ICAgdmFyIGNoZWNrQ29udGV4dCwgbWF0Y2hlciwgaiwKKyAgICAgICAgICAgICAgICBsZW4gPSB0
b2tlbnMubGVuZ3RoLAorICAgICAgICAgICAgICAgIGxlYWRpbmdSZWxhdGl2ZSA9IEV4cHIucmVs
YXRpdmVbIHRva2Vuc1swXS50eXBlIF0sCisgICAgICAgICAgICAgICAgaW1wbGljaXRSZWxhdGl2
ZSA9IGxlYWRpbmdSZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZlWyIgIl0sCisgICAgICAgICAgICAg
ICAgaSA9IGxlYWRpbmdSZWxhdGl2ZSA/IDEgOiAwLAorCisgICAgICAgICAgICAgICAgLy8gVGhl
IGZvdW5kYXRpb25hbCBtYXRjaGVyIGVuc3VyZXMgdGhhdCBlbGVtZW50cyBhcmUgcmVhY2hhYmxl
IGZyb20gdG9wLWxldmVsIGNvbnRleHQocykKKyAgICAgICAgICAgICAgICBtYXRjaENvbnRleHQg
PSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlbGVtID09PSBjaGVja0NvbnRleHQ7CisgICAgICAgICAgICAgICAgfSwgaW1w
bGljaXRSZWxhdGl2ZSwgdHJ1ZSApLAorICAgICAgICAgICAgICAgIG1hdGNoQW55Q29udGV4dCA9
IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGluZGV4T2YuY2FsbCggY2hlY2tDb250ZXh0LCBlbGVtICkgPiAtMTsKKyAgICAg
ICAgICAgICAgICB9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksCisgICAgICAgICAgICAgICAg
bWF0Y2hlcnMgPSBbIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gKCAhbGVhZGluZ1JlbGF0aXZlICYmICggeG1sIHx8IGNvbnRl
eHQgIT09IG91dGVybW9zdENvbnRleHQgKSApIHx8ICgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGNoZWNrQ29udGV4dCA9IGNvbnRleHQpLm5vZGVUeXBlID8KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaENvbnRleHQoIGVsZW0sIGNvbnRleHQs
IHhtbCApIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaEFu
eUNvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApICk7CisgICAgICAgICAgICAgICAgfSBdOwor
CisgICAgICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworICAgICAgICAgICAgICAgIGlmICgg
KG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbaV0udHlwZSBdKSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1hdGNoZXJzID0gWyBhZGRDb21iaW5hdG9yKCBlbGVtZW50TWF0Y2hl
ciggbWF0Y2hlcnMgKSwgbWF0Y2hlciApIF07CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXIgPSBFeHByLmZpbHRlclsgdG9rZW5zW2ldLnR5
cGUgXS5hcHBseSggbnVsbCwgdG9rZW5zW2ldLm1hdGNoZXMgKTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gUmV0dXJuIHNwZWNpYWwgdXBvbiBzZWVpbmcgYSBwb3NpdGlvbmFsIG1hdGNo
ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2hlclsgZXhwYW5kbyBdICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBuZXh0IHJlbGF0aXZl
IG9wZXJhdG9yIChpZiBhbnkpIGZvciBwcm9wZXIgaGFuZGxpbmcKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaiA9ICsraTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICggOyBqIDwgbGVuOyBqKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBFeHByLnJlbGF0aXZlWyB0b2tlbnNbal0udHlwZSBdICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRN
YXRjaGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPiAxICYm
IGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGkgPiAxICYmIHRva2Vucy5zbGljZSggMCwgaSAtIDEgKS5qb2luKCIiKS5y
ZXBsYWNlKCBydHJpbSwgIiQxIiApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1hdGNoZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aSA8IGogJiYgbWF0Y2hlckZyb21Ub2tlbnMoIHRva2Vucy5zbGljZSggaSwgaiApICksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA8IGxlbiAmJiBtYXRjaGVyRnJv
bVRva2VucyggKHRva2VucyA9IHRva2Vucy5zbGljZSggaiApKSApLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGogPCBsZW4gJiYgdG9rZW5zLmpvaW4oIiIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVycy5wdXNoKCBtYXRjaGVyICk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGVsZW1lbnRNYXRjaGVy
KCBtYXRjaGVycyApOworfQorCitmdW5jdGlvbiBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVs
ZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSB7CisgICAgICAgIHZhciBieVNldCA9IHNldE1h
dGNoZXJzLmxlbmd0aCA+IDAsCisgICAgICAgICAgICAgICAgYnlFbGVtZW50ID0gZWxlbWVudE1h
dGNoZXJzLmxlbmd0aCA+IDAsCisgICAgICAgICAgICAgICAgc3VwZXJNYXRjaGVyID0gZnVuY3Rp
b24oIHNlZWQsIGNvbnRleHQsIHhtbCwgcmVzdWx0cywgZXhwYW5kQ29udGV4dCApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBlbGVtLCBqLCBtYXRjaGVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZXRNYXRjaGVkID0gW10sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1hdGNoZWRDb3VudCA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGkgPSAiMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVubWF0Y2hlZCA9
IHNlZWQgJiYgW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGVybW9zdCA9
IGV4cGFuZENvbnRleHQgIT0gbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFdlIG11c3QgYWx3YXlzIGhhdmUgZWl0aGVyIHNlZWQgZWxlbWVudHMgb3Ig
Y29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtcyA9IHNlZWQgfHwg
YnlFbGVtZW50ICYmIEV4cHIuZmluZFsiVEFHIl0oICIqIiwgZXhwYW5kQ29udGV4dCAmJiBjb250
ZXh0LnBhcmVudE5vZGUgfHwgY29udGV4dCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBOZXN0ZWQgbWF0Y2hlcnMgc2hvdWxkIHVzZSBub24taW50ZWdlciBkaXJydW5zCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcnJ1bnNVbmlxdWUgPSAoZGlycnVucyAr
PSBjb250ZXh0QmFja3VwID09IG51bGwgPyAxIDogTWF0aC5FKTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBvdXRlcm1vc3QgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ICE9PSBkb2N1bWVudCAmJiBjb250ZXh0Owor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRydW5zID0gc3VwZXJNYXRjaGVy
LmVsOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBBZGQgZWxlbWVudHMgcGFzc2luZyBlbGVtZW50TWF0Y2hlcnMgZGlyZWN0bHkgdG8gcmVz
dWx0cworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggOyAoZWxlbSA9IGVsZW1zW2ldKSAh
PSBudWxsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYnlF
bGVtZW50ICYmIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggaiA9IDA7IChtYXRjaGVyID0gZWxlbWVudE1hdGNoZXJzW2pdKTsgaisrICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRj
aGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKCBlbGVtICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG91dGVybW9zdCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVk
cnVucyA9ICsrc3VwZXJNYXRjaGVyLmVsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Ig
c2V0IGZpbHRlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBieVNldCAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGV5IHdpbGwg
aGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJzCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0pICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hl
ZENvdW50LS07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGVuZ3RoZW4gdGhlIGFy
cmF5IGZvciBldmVyeSBlbGVtZW50LCBtYXRjaGVkIG9yIG5vdAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggc2VlZCApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVubWF0Y2hlZC5wdXNoKCBlbGVtICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50cwor
ICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZENvdW50ICs9IGk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGJ5U2V0ICYmIGkgIT09IG1hdGNoZWRDb3VudCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaiA9IDA7IChtYXRjaGVyID0gc2V0TWF0Y2hl
cnNbal0pOyBqKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWF0Y2hlciggdW5tYXRjaGVkLCBzZXRNYXRjaGVkLCBjb250ZXh0LCB4bWwgKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggc2VlZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBSZWludGVncmF0ZSBlbGVtZW50IG1hdGNoZXMgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZv
ciBzb3J0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBt
YXRjaGVkQ291bnQgPiAwICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISh1bm1hdGNoZWRbaV0gfHwgc2V0TWF0
Y2hlZFtpXSkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hlZFtpXSA9IHBvcC5jYWxsKCByZXN1bHRzICk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGluZGV4IHBsYWNlaG9sZGVyIHZh
bHVlcyB0byBnZXQgb25seSBhY3R1YWwgbWF0Y2hlcworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldE1hdGNoZWQgPSBjb25kZW5zZSggc2V0TWF0Y2hlZCApOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gQWRkIG1hdGNoZXMgdG8gcmVzdWx0cworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoLmFwcGx5KCByZXN1bHRzLCBzZXRNYXRjaGVkICk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2VlZGxlc3Mgc2V0IG1hdGNoZXMgc3VjY2VlZGlu
ZyBtdWx0aXBsZSBzdWNjZXNzZnVsIG1hdGNoZXJzIHN0aXB1bGF0ZSBzb3J0aW5nCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb3V0ZXJtb3N0ICYmICFzZWVkICYmIHNldE1h
dGNoZWQubGVuZ3RoID4gMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICggbWF0Y2hlZENvdW50ICsgc2V0TWF0Y2hlcnMubGVuZ3RoICkgPiAxICkgeworCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2l6emxlLnVuaXF1ZVNvcnQoIHJl
c3VsdHMgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBPdmVycmlkZSBtYW5p
cHVsYXRpb24gb2YgZ2xvYmFscyBieSBuZXN0ZWQgbWF0Y2hlcnMKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggb3V0ZXJtb3N0ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkaXJydW5zID0gZGlycnVuc1VuaXF1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHRCYWNrdXA7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bm1hdGNoZWQ7CisgICAg
ICAgICAgICAgICAgfTsKKworICAgICAgICBzdXBlck1hdGNoZXIuZWwgPSAwOworICAgICAgICBy
ZXR1cm4gYnlTZXQgPworICAgICAgICAgICAgICAgIG1hcmtGdW5jdGlvbiggc3VwZXJNYXRjaGVy
ICkgOgorICAgICAgICAgICAgICAgIHN1cGVyTWF0Y2hlcjsKK30KKworY29tcGlsZSA9IFNpenps
ZS5jb21waWxlID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBncm91cCAvKiBJbnRlcm5hbCBVc2UgT25s
eSAqLyApIHsKKyAgICAgICAgdmFyIGksCisgICAgICAgICAgICAgICAgc2V0TWF0Y2hlcnMgPSBb
XSwKKyAgICAgICAgICAgICAgICBlbGVtZW50TWF0Y2hlcnMgPSBbXSwKKyAgICAgICAgICAgICAg
ICBjYWNoZWQgPSBjb21waWxlckNhY2hlWyBleHBhbmRvIF1bIHNlbGVjdG9yICsgIiAiIF07CisK
KyAgICAgICAgaWYgKCAhY2FjaGVkICkgeworICAgICAgICAgICAgICAgIC8vIEdlbmVyYXRlIGEg
ZnVuY3Rpb24gb2YgcmVjdXJzaXZlIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNoZWNr
IGVhY2ggZWxlbWVudAorICAgICAgICAgICAgICAgIGlmICggIWdyb3VwICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZ3JvdXAgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaSA9IGdyb3VwLmxlbmd0aDsKKyAgICAgICAgICAgICAg
ICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZCA9IG1hdGNo
ZXJGcm9tVG9rZW5zKCBncm91cFtpXSApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBj
YWNoZWRbIGV4cGFuZG8gXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0
TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50TWF0Y2hlcnMucHVzaCgg
Y2FjaGVkICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgLy8gQ2FjaGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uCisgICAgICAg
ICAgICAgICAgY2FjaGVkID0gY29tcGlsZXJDYWNoZSggc2VsZWN0b3IsIG1hdGNoZXJGcm9tR3Jv
dXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApICk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGNhY2hlZDsKK307CisKK2Z1bmN0aW9uIG11bHRpcGxlQ29udGV4dHMo
IHNlbGVjdG9yLCBjb250ZXh0cywgcmVzdWx0cyApIHsKKyAgICAgICAgdmFyIGkgPSAwLAorICAg
ICAgICAgICAgICAgIGxlbiA9IGNvbnRleHRzLmxlbmd0aDsKKyAgICAgICAgZm9yICggOyBpIDwg
bGVuOyBpKysgKSB7CisgICAgICAgICAgICAgICAgU2l6emxlKCBzZWxlY3RvciwgY29udGV4dHNb
aV0sIHJlc3VsdHMgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0czsKK30KKwor
ZnVuY3Rpb24gc2VsZWN0KCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCwgeG1sICkg
eworICAgICAgICB2YXIgaSwgdG9rZW5zLCB0b2tlbiwgdHlwZSwgZmluZCwKKyAgICAgICAgICAg
ICAgICBtYXRjaCA9IHRva2VuaXplKCBzZWxlY3RvciApLAorICAgICAgICAgICAgICAgIGogPSBt
YXRjaC5sZW5ndGg7CisKKyAgICAgICAgaWYgKCAhc2VlZCApIHsKKyAgICAgICAgICAgICAgICAv
LyBUcnkgdG8gbWluaW1pemUgb3BlcmF0aW9ucyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBncm91cAor
ICAgICAgICAgICAgICAgIGlmICggbWF0Y2gubGVuZ3RoID09PSAxICkgeworCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBUYWtlIGEgc2hvcnRjdXQgYW5kIHNldCB0aGUgY29udGV4dCBpZiB0
aGUgcm9vdCBzZWxlY3RvciBpcyBhbiBJRAorICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5z
ID0gbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCApOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCB0b2tlbnMubGVuZ3RoID4gMiAmJiAodG9rZW4gPSB0b2tlbnNbMF0pLnR5cGUgPT09
ICJJRCIgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
Lm5vZGVUeXBlID09PSA5ICYmICF4bWwgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBFeHByLnJlbGF0aXZlWyB0b2tlbnNbMV0udHlwZSBdICkgeworCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSBFeHByLmZpbmRbIklEIl0oIHRva2Vu
Lm1hdGNoZXNbMF0ucmVwbGFjZSggcmJhY2tzbGFzaCwgIiIgKSwgY29udGV4dCwgeG1sIClbMF07
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWNvbnRleHQgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yLnNsaWNlKCB0b2tlbnMuc2hpZnQoKS5sZW5ndGgg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRmV0Y2ggYSBzZWVkIHNldCBmb3IgcmlnaHQtdG8tbGVmdCBtYXRjaGluZworICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICggaSA9IG1hdGNoRXhwclsiUE9TIl0udGVzdCggc2VsZWN0b3Ig
KSA/IC0xIDogdG9rZW5zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBBYm9ydCBpZiB3ZSBoaXQgYSBjb21iaW5hdG9yCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggRXhwci5yZWxhdGl2ZVsgKHR5cGUgPSB0b2tl
bi50eXBlKSBdICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggKGZpbmQgPSBFeHByLmZpbmRbIHR5cGUgXSkgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2VhcmNoLCBleHBhbmRpbmcg
Y29udGV4dCBmb3IgbGVhZGluZyBzaWJsaW5nIGNvbWJpbmF0b3JzCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoc2VlZCA9IGZpbmQoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi5tYXRjaGVzWzBdLnJlcGxh
Y2UoIHJiYWNrc2xhc2gsICIiICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByc2libGluZy50ZXN0KCB0b2tlbnNbMF0udHlwZSApICYmIGNvbnRleHQu
cGFyZW50Tm9kZSB8fCBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeG1sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKSkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIElmIHNlZWQgaXMgZW1wdHkgb3Igbm8gdG9rZW5zIHJlbWFpbiwgd2UgY2FuIHJldHVy
biBlYXJseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW5zLnNwbGljZSggaSwgMSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWVkLmxlbmd0aCAmJiB0b2tlbnMuam9pbigiIik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFz
ZWxlY3RvciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywgc2xpY2UuY2FsbCggc2VlZCwgMCApICk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBDb21waWxlIGFu
ZCBleGVjdXRlIGEgZmlsdGVyaW5nIGZ1bmN0aW9uCisgICAgICAgIC8vIFByb3ZpZGUgYG1hdGNo
YCB0byBhdm9pZCByZXRva2VuaXphdGlvbiBpZiB3ZSBtb2RpZmllZCB0aGUgc2VsZWN0b3IgYWJv
dmUKKyAgICAgICAgY29tcGlsZSggc2VsZWN0b3IsIG1hdGNoICkoCisgICAgICAgICAgICAgICAg
c2VlZCwKKyAgICAgICAgICAgICAgICBjb250ZXh0LAorICAgICAgICAgICAgICAgIHhtbCwKKyAg
ICAgICAgICAgICAgICByZXN1bHRzLAorICAgICAgICAgICAgICAgIHJzaWJsaW5nLnRlc3QoIHNl
bGVjdG9yICkKKyAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK2lmICgg
ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCApIHsKKyAgICAgICAgKGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgICAgIHZhciBkaXNjb25uZWN0ZWRNYXRjaCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG9sZFNlbGVjdCA9IHNlbGVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc2NhcGUg
PSAvJ3xcXC9nLAorICAgICAgICAgICAgICAgICAgICAgICAgcmF0dHJpYnV0ZVF1b3RlcyA9IC9c
PVtceDIwXHRcclxuXGZdKihbXiciXF1dKilbXHgyMFx0XHJcblxmXSpcXS9nLAorCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBxU2EoOmZvY3VzKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAo
Q2hyb21lIDIxKSwgbm8gbmVlZCB0byBhbHNvIGFkZCB0byBidWdneU1hdGNoZXMgc2luY2UgbWF0
Y2hlcyBjaGVja3MgYnVnZ3lRU0EKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgc3VwcG9y
dCB0ZXN0IHdvdWxkIHJlcXVpcmUgdG9vIG11Y2ggY29kZSAod291bGQgaW5jbHVkZSBkb2N1bWVu
dCByZWFkeSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJidWdneVFTQSA9IFsgIjpmb2N1cyIg
XSwKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2hlc1NlbGVjdG9yKDphY3RpdmUp
IHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChJRTkvT3BlcmEgMTEuNSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEEgc3VwcG9ydCB0ZXN0IHdvdWxkIHJlcXVpcmUgdG9vIG11Y2ggY29kZSAo
d291bGQgaW5jbHVkZSBkb2N1bWVudCByZWFkeSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGp1c3Qgc2tpcCBtYXRjaGVzU2VsZWN0b3IgZm9yIDphY3RpdmUKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJidWdneU1hdGNoZXMgPSBbICI6YWN0aXZlIiBdLAorICAgICAgICAgICAgICAgICAg
ICAgICAgbWF0Y2hlcyA9IGRvY0VsZW0ubWF0Y2hlc1NlbGVjdG9yIHx8CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRvY0VsZW0ubW96TWF0Y2hlc1NlbGVjdG9yIHx8CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRvY0VsZW0ud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY0VsZW0ub01hdGNoZXNTZWxlY3Rv
ciB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2NFbGVtLm1zTWF0Y2hlc1Nl
bGVjdG9yOworCisgICAgICAgICAgICAgICAgLy8gQnVpbGQgUVNBIHJlZ2V4CisgICAgICAgICAg
ICAgICAgLy8gUmVnZXggc3RyYXRlZ3kgYWRvcHRlZCBmcm9tIERpZWdvIFBlcmluaQorICAgICAg
ICAgICAgICAgIGFzc2VydChmdW5jdGlvbiggZGl2ICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gU2VsZWN0IGlzIHNldCB0byBlbXB0eSBzdHJpbmcgb24gcHVycG9zZQorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0byB0ZXN0IElFJ3MgdHJlYXRtZW50IG9mIG5vdCBl
eHBsaWN0bHkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNldHRpbmcgYSBib29sZWFuIGNv
bnRlbnQgYXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2luY2UgaXRzIHBy
ZXNlbmNlIHNob3VsZCBiZSBlbm91Z2gKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6
Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEyMzU5CisgICAgICAgICAgICAgICAgICAgICAgICBk
aXYuaW5uZXJIVE1MID0gIjxzZWxlY3Q+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3Nl
bGVjdD4iOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJRTggLSBTb21lIGJvb2xlYW4g
YXR0cmlidXRlcyBhcmUgbm90IHRyZWF0ZWQgY29ycmVjdGx5CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aCApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmJ1Z2d5UVNBLnB1c2goICJcXFsiICsg
d2hpdGVzcGFjZSArICIqKD86Y2hlY2tlZHxkaXNhYmxlZHxpc21hcHxtdWx0aXBsZXxyZWFkb25s
eXxzZWxlY3RlZHx2YWx1ZSkiICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFdlYmtpdC9PcGVyYSAtIDpjaGVja2VkIHNob3VsZCByZXR1
cm4gc2VsZWN0ZWQgb3B0aW9uIGVsZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBo
dHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hl
Y2tlZAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUU4IHRocm93cyBlcnJvciBoZXJlIChk
byBub3QgcHV0IHRlc3RzIGFmdGVyIHRoaXMgb25lKQorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RoICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCgiOmNoZWNrZWQiKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgICAgIGFzc2VydChmdW5jdGlvbiggZGl2ICkgeworCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBPcGVyYSAxMC0xMi9JRTkgLSBePSAkPSAqPSBhbmQgZW1wdHkgdmFsdWVzCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBTaG91bGQgbm90IHNlbGVjdCBhbnl0aGluZworICAgICAgICAg
ICAgICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9ICI8cCB0ZXN0PScnPjwvcD4iOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBkaXYucXVlcnlTZWxlY3RvckFsbCgiW3Rlc3RePScnXSIp
Lmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmJ1Z2d5UVNBLnB1
c2goICJbKl4kXT0iICsgd2hpdGVzcGFjZSArICIqKD86XCJcInwnJykiICk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZGIDMuNSAtIDpl
bmFibGVkLzpkaXNhYmxlZCBhbmQgaGlkZGVuIGVsZW1lbnRzIChoaWRkZW4gZWxlbWVudHMgYXJl
IHN0aWxsIGVuYWJsZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJRTggdGhyb3dzIGVy
cm9yIGhlcmUgKGRvIG5vdCBwdXQgdGVzdHMgYWZ0ZXIgdGhpcyBvbmUpCisgICAgICAgICAgICAg
ICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjxpbnB1dCB0eXBlPSdoaWRkZW4nLz4iOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVk
IikubGVuZ3RoICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYnVnZ3lRU0Eu
cHVzaCgiOmVuYWJsZWQiLCAiOmRpc2FibGVkIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAvLyByYnVnZ3lRU0EgYWx3
YXlzIGNvbnRhaW5zIDpmb2N1cywgc28gbm8gbmVlZCBmb3IgYSBsZW5ndGggY2hlY2sKKyAgICAg
ICAgICAgICAgICByYnVnZ3lRU0EgPSAvKiByYnVnZ3lRU0EubGVuZ3RoICYmICovIG5ldyBSZWdF
eHAoIHJidWdneVFTQS5qb2luKCJ8IikgKTsKKworICAgICAgICAgICAgICAgIHNlbGVjdCA9IGZ1
bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCwgeG1sICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gT25seSB1c2UgcXVlcnlTZWxlY3RvckFsbCB3aGVuIG5vdCBm
aWx0ZXJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHRoaXMgaXMgbm90IHht
bCwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCB3aGVuIG5vIFFTQSBidWdzIGFwcGx5
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFzZWVkICYmICF4bWwgJiYgIXJidWdneVFT
QS50ZXN0KCBzZWxlY3RvciApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgZ3JvdXBzLCBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9s
ZCA9IHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlkID0g
ZXhwYW5kbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDb250
ZXh0ID0gY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
ZXdTZWxlY3RvciA9IGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgc2VsZWN0b3I7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcVNBIHdvcmtzIHN0cmFuZ2VseSBvbiBFbGVt
ZW50LXJvb3RlZCBxdWVyaWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdl
IGNhbiB3b3JrIGFyb3VuZCB0aGlzIGJ5IHNwZWNpZnlpbmcgYW4gZXh0cmEgSUQgb24gdGhlIHJv
b3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHdvcmtpbmcgdXAgZnJv
bSB0aGVyZSAoVGhhbmtzIHRvIEFuZHJldyBEdXBvbnQgZm9yIHRoZSB0ZWNobmlxdWUpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFIDggZG9lc24ndCB3b3JrIG9uIG9iamVj
dCBlbGVtZW50cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbnRleHQu
bm9kZVR5cGUgPT09IDEgJiYgY29udGV4dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAib2Jq
ZWN0IiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cHMg
PSB0b2tlbml6ZSggc2VsZWN0b3IgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggKG9sZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKCJpZCIpKSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pZCA9IG9sZC5y
ZXBsYWNlKCByZXNjYXBlLCAiXFwkJiIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC5zZXRBdHRyaWJ1dGUoICJpZCIsIG5pZCApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuaWQgPSAiW2lkPSciICsgbmlkICsgIiddICI7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gZ3JvdXBzLmxlbmd0aDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3Vwc1tpXSA9IG5p
ZCArIGdyb3Vwc1tpXS5qb2luKCIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29u
dGV4dCA9IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgY29udGV4dC5wYXJlbnROb2RlIHx8
IGNvbnRleHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2Vs
ZWN0b3IgPSBncm91cHMuam9pbigiLCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBuZXdTZWxlY3RvciAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaC5hcHBseSggcmVz
dWx0cywgc2xpY2UuY2FsbCggbmV3Q29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3Rv
cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwgMCAp
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNh
dGNoKHFzYUVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggIW9sZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoImlkIik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBvbGRTZWxlY3QoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkLCB4
bWwgKTsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVz
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiBpdCdzIHBv
c3NpYmxlIHRvIGRvIG1hdGNoZXNTZWxlY3RvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkaXNjb25uZWN0ZWRNYXRjaCA9IG1hdGNoZXMuY2FsbCggZGl2LCAiZGl2
IiApOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGZh
aWwgd2l0aCBhbiBleGNlcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
R2Vja28gZG9lcyBub3QgZXJyb3IsIHJldHVybnMgZmFsc2UgaW5zdGVhZAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1hdGNoZXMuY2FsbCggZGl2LCAiW3Rlc3QhPScnXTpzaXp6bGUiICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmJ1Z2d5TWF0Y2hlcy5wdXNoKCAi
IT0iLCBwc2V1ZG9zICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gg
KCBlICkge30KKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyByYnVnZ3lNYXRjaGVzIGFsd2F5cyBjb250YWlucyA6YWN0aXZlIGFuZCA6Zm9j
dXMsIHNvIG5vIG5lZWQgZm9yIGEgbGVuZ3RoIGNoZWNrCisgICAgICAgICAgICAgICAgICAgICAg
ICByYnVnZ3lNYXRjaGVzID0gLyogcmJ1Z2d5TWF0Y2hlcy5sZW5ndGggJiYgKi8gbmV3IFJlZ0V4
cCggcmJ1Z2d5TWF0Y2hlcy5qb2luKCJ8IikgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
U2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBlbGVtLCBleHByICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhdHRyaWJ1dGUgc2Vs
ZWN0b3JzIGFyZSBxdW90ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9
IGV4cHIucmVwbGFjZSggcmF0dHJpYnV0ZVF1b3RlcywgIj0nJDEnXSIgKTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyByYnVnZ3lNYXRjaGVzIGFsd2F5cyBjb250YWlucyA6
YWN0aXZlLCBzbyBubyBuZWVkIGZvciBhbiBleGlzdGVuY2UgY2hlY2sKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCAhaXNYTUwoIGVsZW0gKSAmJiAhcmJ1Z2d5TWF0Y2hlcy50
ZXN0KCBleHByICkgJiYgIXJidWdneVFTQS50ZXN0KCBleHByICkgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBtYXRjaGVzLmNhbGwoIGVsZW0sIGV4
cHIgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSUUgOSdzIG1hdGNoZXNTZWxlY3RvciByZXR1cm5zIGZhbHNlIG9uIGRpc2Nvbm5lY3RlZCBu
b2RlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCByZXQgfHwgZGlzY29ubmVjdGVkTWF0Y2ggfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBcyB3ZWxsLCBkaXNjb25u
ZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZyYWdt
ZW50IGluIElFIDkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5
cGUgIT09IDExICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0gY2F0Y2goZSkge30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaXp6bGUoIGV4cHIsIG51bGws
IG51bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9KSgpOworfQorCisvLyBEZXByZWNhdGVkCitF
eHByLnBzZXVkb3NbIm50aCJdID0gRXhwci5wc2V1ZG9zWyJlcSJdOworCisvLyBCYWNrLWNvbXBh
dAorZnVuY3Rpb24gc2V0RmlsdGVycygpIHt9CitFeHByLmZpbHRlcnMgPSBzZXRGaWx0ZXJzLnBy
b3RvdHlwZSA9IEV4cHIucHNldWRvczsKK0V4cHIuc2V0RmlsdGVycyA9IG5ldyBzZXRGaWx0ZXJz
KCk7CisKKy8vIE92ZXJyaWRlIHNpenpsZSBhdHRyaWJ1dGUgcmV0cmlldmFsCitTaXp6bGUuYXR0
ciA9IGpRdWVyeS5hdHRyOworalF1ZXJ5LmZpbmQgPSBTaXp6bGU7CitqUXVlcnkuZXhwciA9IFNp
enpsZS5zZWxlY3RvcnM7CitqUXVlcnkuZXhwclsiOiJdID0galF1ZXJ5LmV4cHIucHNldWRvczsK
K2pRdWVyeS51bmlxdWUgPSBTaXp6bGUudW5pcXVlU29ydDsKK2pRdWVyeS50ZXh0ID0gU2l6emxl
LmdldFRleHQ7CitqUXVlcnkuaXNYTUxEb2MgPSBTaXp6bGUuaXNYTUw7CitqUXVlcnkuY29udGFp
bnMgPSBTaXp6bGUuY29udGFpbnM7CisKKworfSkoIHdpbmRvdyApOwordmFyIHJ1bnRpbCA9IC9V
bnRpbCQvLAorICAgICAgICBycGFyZW50c3ByZXYgPSAvXig/OnBhcmVudHN8cHJldig/OlVudGls
fEFsbCkpLywKKyAgICAgICAgaXNTaW1wbGUgPSAvXi5bXjojXFtcLixdKiQvLAorICAgICAgICBy
bmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LAorICAgICAgICAv
LyBtZXRob2RzIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBhIHVuaXF1ZSBzZXQgd2hlbiBzdGFydGlu
ZyBmcm9tIGEgdW5pcXVlIHNldAorICAgICAgICBndWFyYW50ZWVkVW5pcXVlID0geworICAgICAg
ICAgICAgICAgIGNoaWxkcmVuOiB0cnVlLAorICAgICAgICAgICAgICAgIGNvbnRlbnRzOiB0cnVl
LAorICAgICAgICAgICAgICAgIG5leHQ6IHRydWUsCisgICAgICAgICAgICAgICAgcHJldjogdHJ1
ZQorICAgICAgICB9OworCitqUXVlcnkuZm4uZXh0ZW5kKHsKKyAgICAgICAgZmluZDogZnVuY3Rp
b24oIHNlbGVjdG9yICkgeworICAgICAgICAgICAgICAgIHZhciBpLCBsLCBsZW5ndGgsIG4sIHIs
IHJldCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYgPSB0aGlzOworCisgICAgICAgICAg
ICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGpRdWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0gc2VsZi5s
ZW5ndGg7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkgXSwgdGhpcyApICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXQgPSB0aGlzLnB1c2hTdGFjayggIiIsICJm
aW5kIiwgc2VsZWN0b3IgKTsKKworICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0gdGhp
cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgg
PSByZXQubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmZpbmQoIHNlbGVj
dG9yLCB0aGlzW2ldLCByZXQgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpID4g
MCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQg
dGhlIHJlc3VsdHMgYXJlIHVuaXF1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKCBuID0gbGVuZ3RoOyBuIDwgcmV0Lmxlbmd0aDsgbisrICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHIgPSAwOyByIDwgbGVuZ3RoOyByKysgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJl
dFtyXSA9PT0gcmV0W25dICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXQuc3BsaWNlKG4tLSwgMSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0sCisKKyAgICAgICAgaGFzOiBmdW5j
dGlvbiggdGFyZ2V0ICkgeworICAgICAgICAgICAgICAgIHZhciBpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdGFyZ2V0cyA9IGpRdWVyeSggdGFyZ2V0LCB0aGlzICksCisgICAgICAgICAgICAg
ICAgICAgICAgICBsZW4gPSB0YXJnZXRzLmxlbmd0aDsKKworICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLmZpbHRlcihmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
IGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzW2ldICkgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfSwKKworICAgICAgICBub3Q6IGZ1bmN0aW9uKCBzZWxlY3Rv
ciApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyh0aGlz
LCBzZWxlY3RvciwgZmFsc2UpLCAibm90Iiwgc2VsZWN0b3IpOworICAgICAgICB9LAorCisgICAg
ICAgIGZpbHRlcjogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLnB1c2hTdGFjayggd2lubm93KHRoaXMsIHNlbGVjdG9yLCB0cnVlKSwgImZpbHRlciIs
IHNlbGVjdG9yICk7CisgICAgICAgIH0sCisKKyAgICAgICAgaXM6IGZ1bmN0aW9uKCBzZWxlY3Rv
ciApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISFzZWxlY3RvciAmJiAoCisgICAgICAgICAg
ICAgICAgICAgICAgICB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciID8KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHBvc2l0aW9uYWwvcmVsYXRpdmUg
c2VsZWN0b3IsIGNoZWNrIG1lbWJlcnNoaXAgaW4gdGhlIHJldHVybmVkIHNldAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyAkKCJwOmZpcnN0IikuaXMoInA6bGFzdCIpIHdv
bid0IHJldHVybiB0cnVlIGZvciBhIGRvYyB3aXRoIHR3byAicCIuCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSA/CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCBzZWxlY3RvciwgdGhpcy5j
b250ZXh0ICkuaW5kZXgoIHRoaXNbMF0gKSA+PSAwIDoKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgdGhpcyApLmxlbmd0aCA+
IDAgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlciggc2VsZWN0
b3IgKS5sZW5ndGggPiAwICk7CisgICAgICAgIH0sCisKKyAgICAgICAgY2xvc2VzdDogZnVuY3Rp
b24oIHNlbGVjdG9ycywgY29udGV4dCApIHsKKyAgICAgICAgICAgICAgICB2YXIgY3VyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICBsID0g
dGhpcy5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBbXSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHBvcyA9IHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3JzICkgfHwg
dHlwZW9mIHNlbGVjdG9ycyAhPT0gInN0cmluZyIgPworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkoIHNlbGVjdG9ycywgY29udGV4dCB8fCB0aGlzLmNvbnRleHQgKSA6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA7CisKKyAgICAgICAgICAgICAgICBmb3Ig
KCA7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXIgPSB0aGlzW2ld
OworCisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGN1ciAmJiBjdXIub3duZXJEb2N1
bWVudCAmJiBjdXIgIT09IGNvbnRleHQgJiYgY3VyLm5vZGVUeXBlICE9PSAxMSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwb3MgPyBwb3MuaW5kZXgoY3VyKSA+IC0x
IDogalF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKGN1ciwgc2VsZWN0b3JzKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQucHVzaCggY3VyICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
ID0gY3VyLnBhcmVudE5vZGU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0ID0gcmV0Lmxlbmd0aCA+IDEgPyBqUXVlcnku
dW5pcXVlKCByZXQgKSA6IHJldDsKKworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hT
dGFjayggcmV0LCAiY2xvc2VzdCIsIHNlbGVjdG9ycyApOworICAgICAgICB9LAorCisgICAgICAg
IC8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4KKyAgICAgICAg
Ly8gdGhlIG1hdGNoZWQgc2V0IG9mIGVsZW1lbnRzCisgICAgICAgIGluZGV4OiBmdW5jdGlvbigg
ZWxlbSApIHsKKworICAgICAgICAgICAgICAgIC8vIE5vIGFyZ3VtZW50LCByZXR1cm4gaW5kZXgg
aW4gcGFyZW50CisgICAgICAgICAgICAgICAgaWYgKCAhZWxlbSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAoIHRoaXNbMF0gJiYgdGhpc1swXS5wYXJlbnROb2RlICkgPyB0aGlz
LnByZXZBbGwoKS5sZW5ndGggOiAtMTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAvLyBpbmRleCBpbiBzZWxlY3RvcgorICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGVs
ZW0gPT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVy
eS5pbkFycmF5KCB0aGlzWzBdLCBqUXVlcnkoIGVsZW0gKSApOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQg
ZWxlbWVudAorICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuaW5BcnJheSgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZp
cnN0IGVsZW1lbnQgaXMgdXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5qcXVlcnkg
PyBlbGVtWzBdIDogZWxlbSwgdGhpcyApOworICAgICAgICB9LAorCisgICAgICAgIGFkZDogZnVu
Y3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkgeworICAgICAgICAgICAgICAgIHZhciBzZXQgPSB0
eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5KCBzZWxlY3RvciwgY29udGV4dCApIDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IgJiYgc2VsZWN0b3Iubm9kZVR5
cGUgPyBbIHNlbGVjdG9yIF0gOiBzZWxlY3RvciApLAorICAgICAgICAgICAgICAgICAgICAgICAg
YWxsID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBzZXQgKTsKKworICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLnB1c2hTdGFjayggaXNEaXNjb25uZWN0ZWQoIHNldFswXSApIHx8IGlzRGlz
Y29ubmVjdGVkKCBhbGxbMF0gKSA/CisgICAgICAgICAgICAgICAgICAgICAgICBhbGwgOgorICAg
ICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnVuaXF1ZSggYWxsICkgKTsKKyAgICAgICAgfSwK
KworICAgICAgICBhZGRCYWNrOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuYWRkKCBzZWxlY3RvciA9PSBudWxsID8KKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMucHJldk9iamVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoc2VsZWN0b3Ip
CisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorfSk7CisKK2pRdWVyeS5mbi5hbmRTZWxm
ID0galF1ZXJ5LmZuLmFkZEJhY2s7CisKKy8vIEEgcGFpbmZ1bGx5IHNpbXBsZSBjaGVjayB0byBz
ZWUgaWYgYW4gZWxlbWVudCBpcyBkaXNjb25uZWN0ZWQKKy8vIGZyb20gYSBkb2N1bWVudCAoc2hv
dWxkIGJlIGltcHJvdmVkLCB3aGVyZSBmZWFzaWJsZSkuCitmdW5jdGlvbiBpc0Rpc2Nvbm5lY3Rl
ZCggbm9kZSApIHsKKyAgICAgICAgcmV0dXJuICFub2RlIHx8ICFub2RlLnBhcmVudE5vZGUgfHwg
bm9kZS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSAxMTsKK30KKworZnVuY3Rpb24gc2libGluZygg
Y3VyLCBkaXIgKSB7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBjdXIgPSBjdXJbIGRp
ciBdOworICAgICAgICB9IHdoaWxlICggY3VyICYmIGN1ci5ub2RlVHlwZSAhPT0gMSApOworCisg
ICAgICAgIHJldHVybiBjdXI7Cit9CisKK2pRdWVyeS5lYWNoKHsKKyAgICAgICAgcGFyZW50OiBm
dW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gZWxlbS5wYXJl
bnROb2RlOworICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBl
ICE9PSAxMSA/IHBhcmVudCA6IG51bGw7CisgICAgICAgIH0sCisgICAgICAgIHBhcmVudHM6IGZ1
bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVt
LCAicGFyZW50Tm9kZSIgKTsKKyAgICAgICAgfSwKKyAgICAgICAgcGFyZW50c1VudGlsOiBmdW5j
dGlvbiggZWxlbSwgaSwgdW50aWwgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5k
aXIoIGVsZW0sICJwYXJlbnROb2RlIiwgdW50aWwgKTsKKyAgICAgICAgfSwKKyAgICAgICAgbmV4
dDogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNpYmxpbmcoIGVs
ZW0sICJuZXh0U2libGluZyIgKTsKKyAgICAgICAgfSwKKyAgICAgICAgcHJldjogZnVuY3Rpb24o
IGVsZW0gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNpYmxpbmcoIGVsZW0sICJwcmV2aW91
c1NpYmxpbmciICk7CisgICAgICAgIH0sCisgICAgICAgIG5leHRBbGw6IGZ1bmN0aW9uKCBlbGVt
ICkgeworICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAibmV4dFNpYmxp
bmciICk7CisgICAgICAgIH0sCisgICAgICAgIHByZXZBbGw6IGZ1bmN0aW9uKCBlbGVtICkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAicHJldmlvdXNTaWJsaW5n
IiApOworICAgICAgICB9LAorICAgICAgICBuZXh0VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1
bnRpbCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgIm5leHRT
aWJsaW5nIiwgdW50aWwgKTsKKyAgICAgICAgfSwKKyAgICAgICAgcHJldlVudGlsOiBmdW5jdGlv
biggZWxlbSwgaSwgdW50aWwgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIo
IGVsZW0sICJwcmV2aW91c1NpYmxpbmciLCB1bnRpbCApOworICAgICAgICB9LAorICAgICAgICBz
aWJsaW5nczogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVy
eS5zaWJsaW5nKCAoIGVsZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZpcnN0Q2hpbGQsIGVsZW0gKTsK
KyAgICAgICAgfSwKKyAgICAgICAgY2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBqUXVlcnkuc2libGluZyggZWxlbS5maXJzdENoaWxkICk7CisgICAg
ICAgIH0sCisgICAgICAgIGNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaWZyYW1lIiApID8KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW0uY29udGVudERvY3VtZW50IHx8IGVsZW0uY29udGVudFdpbmRv
dy5kb2N1bWVudCA6CisgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkubWVyZ2UoIFtdLCBl
bGVtLmNoaWxkTm9kZXMgKTsKKyAgICAgICAgfQorfSwgZnVuY3Rpb24oIG5hbWUsIGZuICkgewor
ICAgICAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2VsZWN0b3IgKSB7
CisgICAgICAgICAgICAgICAgdmFyIHJldCA9IGpRdWVyeS5tYXAoIHRoaXMsIGZuLCB1bnRpbCAp
OworCisgICAgICAgICAgICAgICAgaWYgKCAhcnVudGlsLnRlc3QoIG5hbWUgKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gdW50aWw7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgaWYgKCBzZWxlY3RvciAmJiB0eXBlb2Ygc2VsZWN0b3IgPT09ICJz
dHJpbmciICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0galF1ZXJ5LmZpbHRlcigg
c2VsZWN0b3IsIHJldCApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJl
dCA9IHRoaXMubGVuZ3RoID4gMSAmJiAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdID8galF1ZXJ5
LnVuaXF1ZSggcmV0ICkgOiByZXQ7CisKKyAgICAgICAgICAgICAgICBpZiAoIHRoaXMubGVuZ3Ro
ID4gMSAmJiBycGFyZW50c3ByZXYudGVzdCggbmFtZSApICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0ID0gcmV0LnJldmVyc2UoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCwgbmFtZSwgY29yZV9zbGljZS5jYWxs
KCBhcmd1bWVudHMgKS5qb2luKCIsIikgKTsKKyAgICAgICAgfTsKK30pOworCitqUXVlcnkuZXh0
ZW5kKHsKKyAgICAgICAgZmlsdGVyOiBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIG5vdCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIg
PSAiOm5vdCgiICsgZXhwciArICIpIjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZWxlbXMubGVuZ3RoID09PSAxID8KKyAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvcihlbGVtc1swXSwgZXhwcikgPyBbIGVsZW1zWzBd
IF0gOiBbXSA6CisgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZmluZC5tYXRjaGVzKGV4
cHIsIGVsZW1zKTsKKyAgICAgICAgfSwKKworICAgICAgICBkaXI6IGZ1bmN0aW9uKCBlbGVtLCBk
aXIsIHVudGlsICkgeworICAgICAgICAgICAgICAgIHZhciBtYXRjaGVkID0gW10sCisgICAgICAg
ICAgICAgICAgICAgICAgICBjdXIgPSBlbGVtWyBkaXIgXTsKKworICAgICAgICAgICAgICAgIHdo
aWxlICggY3VyICYmIGN1ci5ub2RlVHlwZSAhPT0gOSAmJiAodW50aWwgPT09IHVuZGVmaW5lZCB8
fCBjdXIubm9kZVR5cGUgIT09IDEgfHwgIWpRdWVyeSggY3VyICkuaXMoIHVudGlsICkpICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjdXIubm9kZVR5cGUgPT09IDEgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQucHVzaCggY3VyICk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjdXIgPSBjdXJbZGly
XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZWQ7Cisg
ICAgICAgIH0sCisKKyAgICAgICAgc2libGluZzogZnVuY3Rpb24oIG4sIGVsZW0gKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHIgPSBbXTsKKworICAgICAgICAgICAgICAgIGZvciAoIDsgbjsgbiA9
IG4ubmV4dFNpYmxpbmcgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG4ubm9kZVR5
cGUgPT09IDEgJiYgbiAhPT0gZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgci5wdXNoKCBuICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHI7CisgICAgICAgIH0KK30pOworCisvLyBJ
bXBsZW1lbnQgdGhlIGlkZW50aWNhbCBmdW5jdGlvbmFsaXR5IGZvciBmaWx0ZXIgYW5kIG5vdAor
ZnVuY3Rpb24gd2lubm93KCBlbGVtZW50cywgcXVhbGlmaWVyLCBrZWVwICkgeworCisgICAgICAg
IC8vIENhbid0IHBhc3MgbnVsbCBvciB1bmRlZmluZWQgdG8gaW5kZXhPZiBpbiBGaXJlZm94IDQK
KyAgICAgICAgLy8gU2V0IHRvIDAgdG8gc2tpcCBzdHJpbmcgY2hlY2sKKyAgICAgICAgcXVhbGlm
aWVyID0gcXVhbGlmaWVyIHx8IDA7CisKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbigg
cXVhbGlmaWVyICkgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5ncmVwKGVsZW1l
bnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBy
ZXRWYWwgPSAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVtICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcmV0VmFsID09PSBrZWVwOworICAgICAgICAgICAgICAgIH0pOwor
CisgICAgICAgIH0gZWxzZSBpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4galF1ZXJ5LmdyZXAoZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtLCBpICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICggZWxlbSA9PT0gcXVhbGlmaWVyICkgPT09
IGtlZXA7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgfSBlbHNlIGlmICggdHlwZW9m
IHF1YWxpZmllciA9PT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICAgICAgdmFyIGZpbHRlcmVk
ID0galF1ZXJ5LmdyZXAoZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDE7CisgICAgICAgICAgICAgICAg
fSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIGlzU2ltcGxlLnRlc3QoIHF1YWxpZmllciApICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5maWx0ZXIocXVhbGlmaWVy
LCBmaWx0ZXJlZCwgIWtlZXApOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBxdWFsaWZpZXIgPSBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGZpbHRl
cmVkICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGpR
dWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gKCBqUXVlcnkuaW5BcnJheSggZWxlbSwgcXVhbGlmaWVyICkgPj0gMCApID09PSBr
ZWVwOworICAgICAgICB9KTsKK30KK2Z1bmN0aW9uIGNyZWF0ZVNhZmVGcmFnbWVudCggZG9jdW1l
bnQgKSB7CisgICAgICAgIHZhciBsaXN0ID0gbm9kZU5hbWVzLnNwbGl0KCAifCIgKSwKKyAgICAg
ICAgc2FmZUZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisKKyAgICAg
ICAgaWYgKCBzYWZlRnJhZy5jcmVhdGVFbGVtZW50ICkgeworICAgICAgICAgICAgICAgIHdoaWxl
ICggbGlzdC5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzYWZlRnJhZy5jcmVh
dGVFbGVtZW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0LnBvcCgpCisg
ICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gc2FmZUZyYWc7Cit9CisKK3ZhciBub2RlTmFtZXMgPSAiYWJicnxhcnRp
Y2xlfGFzaWRlfGF1ZGlvfGJkaXxjYW52YXN8ZGF0YXxkYXRhbGlzdHxkZXRhaWxzfGZpZ2NhcHRp
b258ZmlndXJlfGZvb3RlcnwiICsKKyAgICAgICAgICAgICAgICAiaGVhZGVyfGhncm91cHxtYXJr
fG1ldGVyfG5hdnxvdXRwdXR8cHJvZ3Jlc3N8c2VjdGlvbnxzdW1tYXJ5fHRpbWV8dmlkZW8iLAor
ICAgICAgICByaW5saW5lalF1ZXJ5ID0gLyBqUXVlcnlcZCs9Iig/Om51bGx8XGQrKSIvZywKKyAg
ICAgICAgcmxlYWRpbmdXaGl0ZXNwYWNlID0gL15ccysvLAorICAgICAgICByeGh0bWxUYWcgPSAv
PCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6
XSspW14+XSopXC8+L2dpLAorICAgICAgICBydGFnTmFtZSA9IC88KFtcdzpdKykvLAorICAgICAg
ICBydGJvZHkgPSAvPHRib2R5L2ksCisgICAgICAgIHJodG1sID0gLzx8JiM/XHcrOy8sCisgICAg
ICAgIHJub0lubmVyaHRtbCA9IC88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksCisgICAgICAgIHJu
b2NhY2hlID0gLzwoPzpzY3JpcHR8b2JqZWN0fGVtYmVkfG9wdGlvbnxzdHlsZSkvaSwKKyAgICAg
ICAgcm5vc2hpbWNhY2hlID0gbmV3IFJlZ0V4cCgiPCg/OiIgKyBub2RlTmFtZXMgKyAiKVtcXHMv
Pl0iLCAiaSIpLAorICAgICAgICByY2hlY2thYmxlVHlwZSA9IC9eKD86Y2hlY2tib3h8cmFkaW8p
JC8sCisgICAgICAgIC8vIGNoZWNrZWQ9ImNoZWNrZWQiIG9yIGNoZWNrZWQKKyAgICAgICAgcmNo
ZWNrZWQgPSAvY2hlY2tlZFxzKig/OltePV18PVxzKi5jaGVja2VkLikvaSwKKyAgICAgICAgcnNj
cmlwdFR5cGUgPSAvXC8oamF2YXxlY21hKXNjcmlwdC9pLAorICAgICAgICByY2xlYW5TY3JpcHQg
PSAvXlxzKjwhKD86XFtDREFUQVxbfFwtXC0pfFtcXVwtXXsyfT5ccyokL2csCisgICAgICAgIHdy
YXBNYXAgPSB7CisgICAgICAgICAgICAgICAgb3B0aW9uOiBbIDEsICI8c2VsZWN0IG11bHRpcGxl
PSdtdWx0aXBsZSc+IiwgIjwvc2VsZWN0PiIgXSwKKyAgICAgICAgICAgICAgICBsZWdlbmQ6IFsg
MSwgIjxmaWVsZHNldD4iLCAiPC9maWVsZHNldD4iIF0sCisgICAgICAgICAgICAgICAgdGhlYWQ6
IFsgMSwgIjx0YWJsZT4iLCAiPC90YWJsZT4iIF0sCisgICAgICAgICAgICAgICAgdHI6IFsgMiwg
Ijx0YWJsZT48dGJvZHk+IiwgIjwvdGJvZHk+PC90YWJsZT4iIF0sCisgICAgICAgICAgICAgICAg
dGQ6IFsgMywgIjx0YWJsZT48dGJvZHk+PHRyPiIsICI8L3RyPjwvdGJvZHk+PC90YWJsZT4iIF0s
CisgICAgICAgICAgICAgICAgY29sOiBbIDIsICI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdy
b3VwPiIsICI8L2NvbGdyb3VwPjwvdGFibGU+IiBdLAorICAgICAgICAgICAgICAgIGFyZWE6IFsg
MSwgIjxtYXA+IiwgIjwvbWFwPiIgXSwKKyAgICAgICAgICAgICAgICBfZGVmYXVsdDogWyAwLCAi
IiwgIiIgXQorICAgICAgICB9LAorICAgICAgICBzYWZlRnJhZ21lbnQgPSBjcmVhdGVTYWZlRnJh
Z21lbnQoIGRvY3VtZW50ICksCisgICAgICAgIGZyYWdtZW50RGl2ID0gc2FmZUZyYWdtZW50LmFw
cGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSApOworCit3cmFwTWFwLm9w
dGdyb3VwID0gd3JhcE1hcC5vcHRpb247Cit3cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9
IHdyYXBNYXAuY29sZ3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkOword3Jh
cE1hcC50aCA9IHdyYXBNYXAudGQ7CisKKy8vIElFNi04IGNhbid0IHNlcmlhbGl6ZSBsaW5rLCBz
Y3JpcHQsIHN0eWxlLCBvciBhbnkgaHRtbDUgKE5vU2NvcGUpIHRhZ3MsCisvLyB1bmxlc3Mgd3Jh
cHBlZCBpbiBhIGRpdiB3aXRoIG5vbi1icmVha2luZyBjaGFyYWN0ZXJzIGluIGZyb250IG9mIGl0
LgoraWYgKCAhalF1ZXJ5LnN1cHBvcnQuaHRtbFNlcmlhbGl6ZSApIHsKKyAgICAgICAgd3JhcE1h
cC5fZGVmYXVsdCA9IFsgMSwgIlg8ZGl2PiIsICI8L2Rpdj4iIF07Cit9CisKK2pRdWVyeS5mbi5l
eHRlbmQoeworICAgICAgICB0ZXh0OiBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnRleHQoIHRoaXMgKSA6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1wdHkoKS5hcHBlbmQoICggdGhpc1swXSAmJiB0
aGlzWzBdLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQgKS5jcmVhdGVUZXh0Tm9kZSggdmFsdWUg
KSApOworICAgICAgICAgICAgICAgIH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7
CisgICAgICAgIH0sCisKKyAgICAgICAgd3JhcEFsbDogZnVuY3Rpb24oIGh0bWwgKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSh0aGlzKS53cmFwQWxsKCBodG1sLmNhbGwodGhp
cywgaSkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGlmICggdGhpc1swXSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFRoZSBlbGVtZW50cyB0byB3cmFwIHRoZSB0YXJnZXQgYXJvdW5kCisgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgd3JhcCA9IGpRdWVyeSggaHRtbCwgdGhpc1swXS5vd25lckRvY3Vt
ZW50ICkuZXEoMCkuY2xvbmUodHJ1ZSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
dGhpc1swXS5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
cmFwLmluc2VydEJlZm9yZSggdGhpc1swXSApOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgICAgICB3cmFwLm1hcChmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSB0aGlzOworCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdoaWxlICggZWxlbS5maXJzdENoaWxkICYmIGVsZW0uZmlyc3RD
aGlsZC5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbGVtID0gZWxlbS5maXJzdENoaWxkOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW07
CisgICAgICAgICAgICAgICAgICAgICAgICB9KS5hcHBlbmQoIHRoaXMgKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSwKKworICAg
ICAgICB3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkgeworICAgICAgICAgICAgICAgIGlmICgg
alF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkodGhpcykud3JhcElubmVyKCBodG1sLmNhbGwodGhpcywgaSkgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZW50cyA9IHNlbGYuY29udGVudHMoKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBjb250ZW50cy5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRlbnRzLndyYXBBbGwoIGh0bWwgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hcHBlbmQoIGh0
bWwgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfSwKKworICAgICAgICB3cmFwOiBmdW5jdGlvbiggaHRtbCApIHsKKyAgICAgICAgICAg
ICAgICB2YXIgaXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICk7CisKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGlzRnVuY3Rpb24gPyBodG1sLmNhbGwo
dGhpcywgaSkgOiBodG1sICk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0sCisKKyAg
ICAgICAgdW53cmFwOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5w
YXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAh
alF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCAiYm9keSIgKSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyAp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pLmVuZCgpOwor
ICAgICAgICB9LAorCisgICAgICAgIGFwcGVuZDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCB0cnVlLCBmdW5jdGlvbiggZWxlbSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0
aGlzLm5vZGVUeXBlID09PSAxMSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5hcHBlbmRDaGlsZCggZWxlbSApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICB9LAorCisgICAgICAgIHByZXBlbmQ6IGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgdHJ1
ZSwgZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMu
bm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLmZpcnN0Q2hp
bGQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfSwKKworICAgICAgICBiZWZvcmU6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
IGlmICggIWlzRGlzY29ubmVjdGVkKCB0aGlzWzBdICkgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsIGZhbHNlLCBmdW5jdGlvbiggZWxl
bSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnROb2RlLmlu
c2VydEJlZm9yZSggZWxlbSwgdGhpcyApOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCBhcmd1bWVudHMubGVuZ3Ro
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNldCA9IGpRdWVyeS5jbGVhbiggYXJn
dW1lbnRzICk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2so
IGpRdWVyeS5tZXJnZSggc2V0LCB0aGlzICksICJiZWZvcmUiLCB0aGlzLnNlbGVjdG9yICk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIGFmdGVyOiBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICBpZiAoICFpc0Rpc2Nvbm5lY3RlZCggdGhpc1swXSApICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCBm
YWxzZSwgZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBzZXQgPSBqUXVlcnkuY2xlYW4oIGFyZ3VtZW50cyApOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWVyZ2UoIHRoaXMsIHNldCAp
LCAiYWZ0ZXIiLCB0aGlzLnNlbGVjdG9yICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9
LAorCisgICAgICAgIC8vIGtlZXBEYXRhIGlzIGZvciBpbnRlcm5hbCB1c2Ugb25seS0tZG8gbm90
IGRvY3VtZW50CisgICAgICAgIHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCBrZWVwRGF0YSAp
IHsKKyAgICAgICAgICAgICAgICB2YXIgZWxlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGkg
PSAwOworCisgICAgICAgICAgICAgICAgZm9yICggOyAoZWxlbSA9IHRoaXNbaV0pICE9IG51bGw7
IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXNlbGVjdG9yIHx8IGpRdWVy
eS5maWx0ZXIoIHNlbGVjdG9yLCBbIGVsZW0gXSApLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCAha2VlcERhdGEgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xlYW5E
YXRhKCBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikgKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xlYW5EYXRhKCBbIGVsZW0gXSApOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbGVtICk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgfSwKKworICAgICAgICBlbXB0eTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
dmFyIGVsZW0sCisgICAgICAgICAgICAgICAgICAgICAgICBpID0gMDsKKworICAgICAgICAgICAg
ICAgIGZvciAoIDsgKGVsZW0gPSB0aGlzW2ldKSAhPSBudWxsOyBpKysgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVudCBtZW1vcnkg
bGVha3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmNsZWFuRGF0YSggZWxl
bS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBhbnkgcmVtYWluaW5nIG5vZGVz
CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGVsZW0uZmlyc3RDaGlsZCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5yZW1vdmVDaGlsZCggZWxlbS5maXJz
dENoaWxkICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0sCisKKyAgICAgICAgY2xv
bmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHsKKyAgICAg
ICAgICAgICAgICBkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFsc2Ug
OiBkYXRhQW5kRXZlbnRzOworICAgICAgICAgICAgICAgIGRlZXBEYXRhQW5kRXZlbnRzID0gZGVl
cERhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGRhdGFBbmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2ZW50
czsKKworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5jbG9uZSggdGhpcywgZGF0YUFuZEV2
ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
fSwKKworICAgICAgICBodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBlbGVtID0gdGhpc1swXSB8fCB7fSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGwgPSB0aGlzLmxlbmd0aDsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSA9
PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZWxlbS5ub2RlVHlwZSA9PT0gMSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbS5pbm5lckhUTUwucmVwbGFjZSggcmlubGluZWpRdWVyeSwgIiIgKSA6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZWUgaWYgd2Ug
Y2FuIHRha2UgYSBzaG9ydGN1dCBhbmQganVzdCB1c2UgaW5uZXJIVE1MCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgJiYgIXJub0lubmVyaHRt
bC50ZXN0KCB2YWx1ZSApICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggalF1
ZXJ5LnN1cHBvcnQuaHRtbFNlcmlhbGl6ZSB8fCAhcm5vc2hpbWNhY2hlLnRlc3QoIHZhbHVlICkg
ICkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBqUXVlcnkuc3VwcG9ydC5s
ZWFkaW5nV2hpdGVzcGFjZSB8fCAhcmxlYWRpbmdXaGl0ZXNwYWNlLnRlc3QoIHZhbHVlICkgKSAm
JgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhd3JhcE1hcFsgKCBydGFnTmFtZS5l
eGVjKCB2YWx1ZSApIHx8IFsiIiwgIiJdIClbMV0udG9Mb3dlckNhc2UoKSBdICkgeworCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSggcnhodG1s
VGFnLCAiPCQxPjwvJDI+IiApOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRy
eSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBs
OyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3MKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlzW2ld
IHx8IHt9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xlYW5EYXRhKCBlbGVtLmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCAiKiIgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmlubmVySFRNTCA9IHZhbHVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW0gPSAwOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZh
bGxiYWNrIG1ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGUp
IHt9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbXB0
eSgpLmFwcGVuZCggdmFsdWUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApOworICAgICAgICB9LAor
CisgICAgICAgIHJlcGxhY2VXaXRoOiBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCAhaXNEaXNjb25uZWN0ZWQoIHRoaXNbMF0gKSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBlbGVtZW50cyBhcmUgcmVtb3ZlZCBmcm9tIHRo
ZSBET00gYmVmb3JlIHRoZXkgYXJlIGluc2VydGVkCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyB0aGlzIGNhbiBoZWxwIGZpeCByZXBsYWNpbmcgYSBwYXJlbnQgd2l0aCBjaGlsZCBlbGVtZW50
cworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUg
KSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChm
dW5jdGlvbihpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHNlbGYgPSBqUXVlcnkodGhpcyksIG9sZCA9IHNlbGYuaHRtbCgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVwbGFjZVdpdGgoIHZhbHVlLmNhbGwoIHRo
aXMsIGksIG9sZCApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5
cGVvZiB2YWx1ZSAhPT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbHVlID0galF1ZXJ5KCB2YWx1ZSApLmRldGFjaCgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IHRoaXMu
bmV4dFNpYmxpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFy
ZW50ID0gdGhpcy5wYXJlbnROb2RlOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeSggdGhpcyApLnJlbW92ZSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggbmV4dCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkobmV4dCkuYmVmb3JlKCB2YWx1ZSApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeShwYXJlbnQpLmFwcGVuZCggdmFsdWUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoID8KKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkoalF1ZXJ5LmlzRnVuY3Rpb24odmFsdWUp
ID8gdmFsdWUoKSA6IHZhbHVlKSwgInJlcGxhY2VXaXRoIiwgdmFsdWUgKSA6CisgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzOworICAgICAgICB9LAorCisgICAgICAgIGRldGFjaDogZnVuY3Rp
b24oIHNlbGVjdG9yICkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbW92ZSggc2Vs
ZWN0b3IsIHRydWUgKTsKKyAgICAgICAgfSwKKworICAgICAgICBkb21NYW5pcDogZnVuY3Rpb24o
IGFyZ3MsIHRhYmxlLCBjYWxsYmFjayApIHsKKworICAgICAgICAgICAgICAgIC8vIEZsYXR0ZW4g
YW55IG5lc3RlZCBhcnJheXMKKyAgICAgICAgICAgICAgICBhcmdzID0gW10uY29uY2F0LmFwcGx5
KCBbXSwgYXJncyApOworCisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdHMsIGZpcnN0LCBmcmFn
bWVudCwgaU5vQ2xvbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBpID0gMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlID0gYXJnc1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNjcmlwdHMgPSBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGwgPSB0aGlzLmxlbmd0aDsK
KworICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBj
b250YWluIGNoZWNrZWQsIGluIFdlYktpdAorICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5z
dXBwb3J0LmNoZWNrQ2xvbmUgJiYgbCA+IDEgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAm
JiByY2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5KHRoaXMpLmRvbU1hbmlwKCBhcmdzLCB0YWJsZSwgY2FsbGJhY2sgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24odmFsdWUpICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBzZWxmID0galF1ZXJ5KHRoaXMpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcmdzWzBdID0gdmFsdWUuY2FsbCggdGhpcywgaSwgdGFibGUgPyBzZWxm
Lmh0bWwoKSA6IHVuZGVmaW5lZCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLmRvbU1hbmlwKCBhcmdzLCB0YWJsZSwgY2FsbGJhY2sgKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICggdGhp
c1swXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBqUXVlcnkuYnVpbGRG
cmFnbWVudCggYXJncywgdGhpcywgc2NyaXB0cyApOworICAgICAgICAgICAgICAgICAgICAgICAg
ZnJhZ21lbnQgPSByZXN1bHRzLmZyYWdtZW50OworICAgICAgICAgICAgICAgICAgICAgICAgZmly
c3QgPSBmcmFnbWVudC5maXJzdENoaWxkOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmcmFnbWVudCA9IGZpcnN0OworICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZpcnN0ICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0YWJsZSA9IHRhYmxlICYmIGpRdWVyeS5ub2RlTmFtZSggZmly
c3QsICJ0ciIgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgdGhl
IG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtIGluc3RlYWQgb2YgdGhlIGZpcnN0
IGJlY2F1c2UgaXQgY2FuIGVuZCB1cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBiZWluZyBlbXB0aWVkIGluY29ycmVjdGx5IGluIGNlcnRhaW4gc2l0dWF0aW9ucyAoIzgwNzAp
LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGcmFnbWVudHMgZnJvbSB0aGUg
ZnJhZ21lbnQgY2FjaGUgbXVzdCBhbHdheXMgYmUgY2xvbmVkIGFuZCBuZXZlciB1c2VkIGluIHBs
YWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpTm9DbG9uZSA9IHJl
c3VsdHMuY2FjaGVhYmxlIHx8IGwgLSAxOyBpIDwgbDsgaSsrICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSAmJiBqUXVlcnkubm9kZU5hbWUo
IHRoaXNbaV0sICJ0YWJsZSIgKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpbmRPckFwcGVuZCggdGhpc1tpXSwgInRib2R5IiApIDoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpc1tpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGkgPT09IGlOb0Nsb25lID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZnJhZ21lbnQgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xvbmUoIGZyYWdtZW50LCB0cnVl
LCB0cnVlICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpeCAjMTE4MDk6IEF2b2lkIGxlYWtpbmcg
bWVtb3J5CisgICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudCA9IGZpcnN0ID0gbnVsbDsK
KworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzY3JpcHRzLmxlbmd0aCApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIHNjcmlwdHMsIGZ1bmN0aW9u
KCBpLCBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggZWxlbS5zcmMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGpRdWVyeS5hamF4ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuYWpheCh7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBl
bGVtLnNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlOiAiR0VUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogInNjcmlwdCIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXN5bmM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbDogZmFsc2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRo
cm93cyI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkuZXJyb3IoIm5vIGFqYXgiKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lmdsb2JhbEV2YWwoICggZWxlbS50ZXh0IHx8IGVs
ZW0udGV4dENvbnRlbnQgfHwgZWxlbS5pbm5lckhUTUwgfHwgIiIgKS5yZXBsYWNlKCByY2xlYW5T
Y3JpcHQsICIiICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ucGFy
ZW50Tm9kZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZWxlbSApOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KK30pOworCitmdW5jdGlvbiBm
aW5kT3JBcHBlbmQoIGVsZW0sIHRhZyApIHsKKyAgICAgICAgcmV0dXJuIGVsZW0uZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoIHRhZyApWzBdIHx8IGVsZW0uYXBwZW5kQ2hpbGQoIGVsZW0ub3duZXJEb2N1
bWVudC5jcmVhdGVFbGVtZW50KCB0YWcgKSApOworfQorCitmdW5jdGlvbiBjbG9uZUNvcHlFdmVu
dCggc3JjLCBkZXN0ICkgeworCisgICAgICAgIGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSB8fCAh
alF1ZXJ5Lmhhc0RhdGEoIHNyYyApICkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIHZhciB0eXBlLCBpLCBsLAorICAgICAgICAgICAgICAgIG9sZERhdGEg
PSBqUXVlcnkuX2RhdGEoIHNyYyApLAorICAgICAgICAgICAgICAgIGN1ckRhdGEgPSBqUXVlcnku
X2RhdGEoIGRlc3QsIG9sZERhdGEgKSwKKyAgICAgICAgICAgICAgICBldmVudHMgPSBvbGREYXRh
LmV2ZW50czsKKworICAgICAgICBpZiAoIGV2ZW50cyApIHsKKyAgICAgICAgICAgICAgICBkZWxl
dGUgY3VyRGF0YS5oYW5kbGU7CisgICAgICAgICAgICAgICAgY3VyRGF0YS5ldmVudHMgPSB7fTsK
KworICAgICAgICAgICAgICAgIGZvciAoIHR5cGUgaW4gZXZlbnRzICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBldmVudHNbIHR5cGUgXS5sZW5ndGg7IGkgPCBs
OyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5h
ZGQoIGRlc3QsIHR5cGUsIGV2ZW50c1sgdHlwZSBdWyBpIF0gKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBtYWtl
IHRoZSBjbG9uZWQgcHVibGljIGRhdGEgb2JqZWN0IGEgY29weSBmcm9tIHRoZSBvcmlnaW5hbAor
ICAgICAgICBpZiAoIGN1ckRhdGEuZGF0YSApIHsKKyAgICAgICAgICAgICAgICBjdXJEYXRhLmRh
dGEgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgY3VyRGF0YS5kYXRhICk7CisgICAgICAgIH0KK30KKwor
ZnVuY3Rpb24gY2xvbmVGaXhBdHRyaWJ1dGVzKCBzcmMsIGRlc3QgKSB7CisgICAgICAgIHZhciBu
b2RlTmFtZTsKKworICAgICAgICAvLyBXZSBkbyBub3QgbmVlZCB0byBkbyBhbnl0aGluZyBmb3Ig
bm9uLUVsZW1lbnRzCisgICAgICAgIGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBjbGVhckF0dHJpYnV0
ZXMgcmVtb3ZlcyB0aGUgYXR0cmlidXRlcywgd2hpY2ggd2UgZG9uJ3Qgd2FudCwKKyAgICAgICAg
Ly8gYnV0IGFsc28gcmVtb3ZlcyB0aGUgYXR0YWNoRXZlbnQgZXZlbnRzLCB3aGljaCB3ZSAqZG8q
IHdhbnQKKyAgICAgICAgaWYgKCBkZXN0LmNsZWFyQXR0cmlidXRlcyApIHsKKyAgICAgICAgICAg
ICAgICBkZXN0LmNsZWFyQXR0cmlidXRlcygpOworICAgICAgICB9CisKKyAgICAgICAgLy8gbWVy
Z2VBdHRyaWJ1dGVzLCBpbiBjb250cmFzdCwgb25seSBtZXJnZXMgYmFjayBvbiB0aGUKKyAgICAg
ICAgLy8gb3JpZ2luYWwgYXR0cmlidXRlcywgbm90IHRoZSBldmVudHMKKyAgICAgICAgaWYgKCBk
ZXN0Lm1lcmdlQXR0cmlidXRlcyApIHsKKyAgICAgICAgICAgICAgICBkZXN0Lm1lcmdlQXR0cmli
dXRlcyggc3JjICk7CisgICAgICAgIH0KKworICAgICAgICBub2RlTmFtZSA9IGRlc3Qubm9kZU5h
bWUudG9Mb3dlckNhc2UoKTsKKworICAgICAgICBpZiAoIG5vZGVOYW1lID09PSAib2JqZWN0IiAp
IHsKKyAgICAgICAgICAgICAgICAvLyBJRTYtMTAgaW1wcm9wZXJseSBjbG9uZXMgY2hpbGRyZW4g
b2Ygb2JqZWN0IGVsZW1lbnRzIHVzaW5nIGNsYXNzaWQuCisgICAgICAgICAgICAgICAgLy8gSUUx
MCB0aHJvd3MgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3IgaWYgcGFyZW50IGlzIG51bGwsICMx
MjEzMi4KKyAgICAgICAgICAgICAgICBpZiAoIGRlc3QucGFyZW50Tm9kZSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3Qub3V0ZXJIVE1MID0gc3JjLm91dGVySFRNTDsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBUaGlzIHBhdGggYXBwZWFycyB1bmF2b2lk
YWJsZSBmb3IgSUU5LiBXaGVuIGNsb25pbmcgYW4gb2JqZWN0CisgICAgICAgICAgICAgICAgLy8g
ZWxlbWVudCBpbiBJRTksIHRoZSBvdXRlckhUTUwgc3RyYXRlZ3kgYWJvdmUgaXMgbm90IHN1ZmZp
Y2llbnQuCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHNyYyBoYXMgaW5uZXJIVE1MIGFuZCB0
aGUgZGVzdGluYXRpb24gZG9lcyBub3QsCisgICAgICAgICAgICAgICAgLy8gY29weSB0aGUgc3Jj
LmlubmVySFRNTCBpbnRvIHRoZSBkZXN0LmlubmVySFRNTC4gIzEwMzI0CisgICAgICAgICAgICAg
ICAgaWYgKCBqUXVlcnkuc3VwcG9ydC5odG1sNUNsb25lICYmIChzcmMuaW5uZXJIVE1MICYmICFq
UXVlcnkudHJpbShkZXN0LmlubmVySFRNTCkpICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdC5pbm5lckhUTUwgPSBzcmMuaW5uZXJIVE1MOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICB9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gImlucHV0IiAmJiByY2hlY2thYmxlVHlwZS50
ZXN0KCBzcmMudHlwZSApICkgeworICAgICAgICAgICAgICAgIC8vIElFNi04IGZhaWxzIHRvIHBl
cnNpc3QgdGhlIGNoZWNrZWQgc3RhdGUgb2YgYSBjbG9uZWQgY2hlY2tib3gKKyAgICAgICAgICAg
ICAgICAvLyBvciByYWRpbyBidXR0b24uIFdvcnNlLCBJRTYtNyBmYWlsIHRvIGdpdmUgdGhlIGNs
b25lZCBlbGVtZW50CisgICAgICAgICAgICAgICAgLy8gYSBjaGVja2VkIGFwcGVhcmFuY2UgaWYg
dGhlIGRlZmF1bHRDaGVja2VkIHZhbHVlIGlzbid0IGFsc28gc2V0CisKKyAgICAgICAgICAgICAg
ICBkZXN0LmRlZmF1bHRDaGVja2VkID0gZGVzdC5jaGVja2VkID0gc3JjLmNoZWNrZWQ7CisKKyAg
ICAgICAgICAgICAgICAvLyBJRTYtNyBnZXQgY29uZnVzZWQgYW5kIGVuZCB1cCBzZXR0aW5nIHRo
ZSB2YWx1ZSBvZiBhIGNsb25lZAorICAgICAgICAgICAgICAgIC8vIGNoZWNrYm94L3JhZGlvIGJ1
dHRvbiB0byBhbiBlbXB0eSBzdHJpbmcgaW5zdGVhZCBvZiAib24iCisgICAgICAgICAgICAgICAg
aWYgKCBkZXN0LnZhbHVlICE9PSBzcmMudmFsdWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0LnZhbHVlID0gc3JjLnZhbHVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAv
LyBJRTYtOCBmYWlscyB0byByZXR1cm4gdGhlIHNlbGVjdGVkIG9wdGlvbiB0byB0aGUgZGVmYXVs
dCBzZWxlY3RlZAorICAgICAgICAvLyBzdGF0ZSB3aGVuIGNsb25pbmcgb3B0aW9ucworICAgICAg
ICB9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gIm9wdGlvbiIgKSB7CisgICAgICAgICAgICAgICAg
ZGVzdC5zZWxlY3RlZCA9IHNyYy5kZWZhdWx0U2VsZWN0ZWQ7CisKKyAgICAgICAgLy8gSUU2LTgg
ZmFpbHMgdG8gc2V0IHRoZSBkZWZhdWx0VmFsdWUgdG8gdGhlIGNvcnJlY3QgdmFsdWUgd2hlbgor
ICAgICAgICAvLyBjbG9uaW5nIG90aGVyIHR5cGVzIG9mIGlucHV0IGZpZWxkcworICAgICAgICB9
IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gImlucHV0IiB8fCBub2RlTmFtZSA9PT0gInRleHRhcmVh
IiApIHsKKyAgICAgICAgICAgICAgICBkZXN0LmRlZmF1bHRWYWx1ZSA9IHNyYy5kZWZhdWx0VmFs
dWU7CisKKyAgICAgICAgLy8gSUUgYmxhbmtzIGNvbnRlbnRzIHdoZW4gY2xvbmluZyBzY3JpcHRz
CisgICAgICAgIH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSAic2NyaXB0IiAmJiBkZXN0LnRleHQg
IT09IHNyYy50ZXh0ICkgeworICAgICAgICAgICAgICAgIGRlc3QudGV4dCA9IHNyYy50ZXh0Owor
ICAgICAgICB9CisKKyAgICAgICAgLy8gRXZlbnQgZGF0YSBnZXRzIHJlZmVyZW5jZWQgaW5zdGVh
ZCBvZiBjb3BpZWQgaWYgdGhlIGV4cGFuZG8KKyAgICAgICAgLy8gZ2V0cyBjb3BpZWQgdG9vCisg
ICAgICAgIGRlc3QucmVtb3ZlQXR0cmlidXRlKCBqUXVlcnkuZXhwYW5kbyApOworfQorCitqUXVl
cnkuYnVpbGRGcmFnbWVudCA9IGZ1bmN0aW9uKCBhcmdzLCBjb250ZXh0LCBzY3JpcHRzICkgewor
ICAgICAgICB2YXIgZnJhZ21lbnQsIGNhY2hlYWJsZSwgY2FjaGVoaXQsCisgICAgICAgICAgICAg
ICAgZmlyc3QgPSBhcmdzWyAwIF07CisKKyAgICAgICAgLy8gU2V0IGNvbnRleHQgZnJvbSB3aGF0
IG1heSBjb21lIGluIGFzIHVuZGVmaW5lZCBvciBhIGpRdWVyeSBjb2xsZWN0aW9uIG9yIGEgbm9k
ZQorICAgICAgICAvLyBVcGRhdGVkIHRvIGZpeCAjMTIyNjYgd2hlcmUgYWNjZXNzaW5nIGNvbnRl
eHRbMF0gY291bGQgdGhyb3cgYW4gZXhjZXB0aW9uIGluIElFOS8xMCAmCisgICAgICAgIC8vIGFs
c28gZG91YmxlcyBhcyBmaXggZm9yICM4OTUwIHdoZXJlIHBsYWluIG9iamVjdHMgY2F1c2VkIGNy
ZWF0ZURvY3VtZW50RnJhZ21lbnQgZXhjZXB0aW9uCisgICAgICAgIGNvbnRleHQgPSBjb250ZXh0
IHx8IGRvY3VtZW50OworICAgICAgICBjb250ZXh0ID0gIWNvbnRleHQubm9kZVR5cGUgJiYgY29u
dGV4dFswXSB8fCBjb250ZXh0OworICAgICAgICBjb250ZXh0ID0gY29udGV4dC5vd25lckRvY3Vt
ZW50IHx8IGNvbnRleHQ7CisKKyAgICAgICAgLy8gT25seSBjYWNoZSAic21hbGwiICgxLzIgS0Ip
IEhUTUwgc3RyaW5ncyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIG1haW4gZG9jdW1lbnQK
KyAgICAgICAgLy8gQ2xvbmluZyBvcHRpb25zIGxvc2VzIHRoZSBzZWxlY3RlZCBzdGF0ZSwgc28g
ZG9uJ3QgY2FjaGUgdGhlbQorICAgICAgICAvLyBJRSA2IGRvZXNuJ3QgbGlrZSBpdCB3aGVuIHlv
dSBwdXQgPG9iamVjdD4gb3IgPGVtYmVkPiBlbGVtZW50cyBpbiBhIGZyYWdtZW50CisgICAgICAg
IC8vIEFsc28sIFdlYktpdCBkb2VzIG5vdCBjbG9uZSAnY2hlY2tlZCcgYXR0cmlidXRlcyBvbiBj
bG9uZU5vZGUsIHNvIGRvbid0IGNhY2hlCisgICAgICAgIC8vIExhc3RseSwgSUU2LDcsOCB3aWxs
IG5vdCBjb3JyZWN0bHkgcmV1c2UgY2FjaGVkIGZyYWdtZW50cyB0aGF0IHdlcmUgY3JlYXRlZCBm
cm9tIHVua25vd24gZWxlbXMgIzEwNTAxCisgICAgICAgIGlmICggYXJncy5sZW5ndGggPT09IDEg
JiYgdHlwZW9mIGZpcnN0ID09PSAic3RyaW5nIiAmJiBmaXJzdC5sZW5ndGggPCA1MTIgJiYgY29u
dGV4dCA9PT0gZG9jdW1lbnQgJiYKKyAgICAgICAgICAgICAgICBmaXJzdC5jaGFyQXQoMCkgPT09
ICI8IiAmJiAhcm5vY2FjaGUudGVzdCggZmlyc3QgKSAmJgorICAgICAgICAgICAgICAgIChqUXVl
cnkuc3VwcG9ydC5jaGVja0Nsb25lIHx8ICFyY2hlY2tlZC50ZXN0KCBmaXJzdCApKSAmJgorICAg
ICAgICAgICAgICAgIChqUXVlcnkuc3VwcG9ydC5odG1sNUNsb25lIHx8ICFybm9zaGltY2FjaGUu
dGVzdCggZmlyc3QgKSkgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBNYXJrIGNhY2hlYWJsZSBh
bmQgbG9vayBmb3IgYSBoaXQKKyAgICAgICAgICAgICAgICBjYWNoZWFibGUgPSB0cnVlOworICAg
ICAgICAgICAgICAgIGZyYWdtZW50ID0galF1ZXJ5LmZyYWdtZW50c1sgZmlyc3QgXTsKKyAgICAg
ICAgICAgICAgICBjYWNoZWhpdCA9IGZyYWdtZW50ICE9PSB1bmRlZmluZWQ7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoICFmcmFnbWVudCApIHsKKyAgICAgICAgICAgICAgICBmcmFnbWVudCA9
IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworICAgICAgICAgICAgICAgIGpRdWVy
eS5jbGVhbiggYXJncywgY29udGV4dCwgZnJhZ21lbnQsIHNjcmlwdHMgKTsKKworICAgICAgICAg
ICAgICAgIC8vIFVwZGF0ZSB0aGUgY2FjaGUsIGJ1dCBvbmx5IHN0b3JlIGZhbHNlCisgICAgICAg
ICAgICAgICAgLy8gdW5sZXNzIHRoaXMgaXMgYSBzZWNvbmQgcGFyc2luZyBvZiB0aGUgc2FtZSBj
b250ZW50CisgICAgICAgICAgICAgICAgaWYgKCBjYWNoZWFibGUgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuZnJhZ21lbnRzWyBmaXJzdCBdID0gY2FjaGVoaXQgJiYgZnJhZ21l
bnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsgZnJh
Z21lbnQ6IGZyYWdtZW50LCBjYWNoZWFibGU6IGNhY2hlYWJsZSB9OworfTsKKworalF1ZXJ5LmZy
YWdtZW50cyA9IHt9OworCitqUXVlcnkuZWFjaCh7CisgICAgICAgIGFwcGVuZFRvOiAiYXBwZW5k
IiwKKyAgICAgICAgcHJlcGVuZFRvOiAicHJlcGVuZCIsCisgICAgICAgIGluc2VydEJlZm9yZTog
ImJlZm9yZSIsCisgICAgICAgIGluc2VydEFmdGVyOiAiYWZ0ZXIiLAorICAgICAgICByZXBsYWNl
QWxsOiAicmVwbGFjZVdpdGgiCit9LCBmdW5jdGlvbiggbmFtZSwgb3JpZ2luYWwgKSB7CisgICAg
ICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAgICAg
ICAgICAgIHZhciBlbGVtcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0ID0gW10sCisgICAgICAgICAgICAgICAgICAgICAgICBpbnNl
cnQgPSBqUXVlcnkoIHNlbGVjdG9yICksCisgICAgICAgICAgICAgICAgICAgICAgICBsID0gaW5z
ZXJ0Lmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHRoaXMubGVuZ3Ro
ID09PSAxICYmIHRoaXNbMF0ucGFyZW50Tm9kZTsKKworICAgICAgICAgICAgICAgIGlmICggKHBh
cmVudCA9PSBudWxsIHx8IHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgPT09IDExICYmIHBhcmVu
dC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSkgJiYgbCA9PT0gMSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGluc2VydFsgb3JpZ2luYWwgXSggdGhpc1swXSApOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxlbXMgPSAoIGkgPiAwID8gdGhpcy5jbG9uZSh0cnVlKSA6IHRoaXMg
KS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCBpbnNlcnRb
aV0gKVsgb3JpZ2luYWwgXSggZWxlbXMgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0ID0gcmV0LmNvbmNhdCggZWxlbXMgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQsIG5h
bWUsIGluc2VydC5zZWxlY3RvciApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfTsKK30p
OworCitmdW5jdGlvbiBnZXRBbGwoIGVsZW0gKSB7CisgICAgICAgIGlmICggdHlwZW9mIGVsZW0u
Z2V0RWxlbWVudHNCeVRhZ05hbWUgIT09ICJ1bmRlZmluZWQiICkgeworICAgICAgICAgICAgICAg
IHJldHVybiBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCAiKiIgKTsKKworICAgICAgICB9IGVs
c2UgaWYgKCB0eXBlb2YgZWxlbS5xdWVyeVNlbGVjdG9yQWxsICE9PSAidW5kZWZpbmVkIiApIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5xdWVyeVNlbGVjdG9yQWxsKCAiKiIgKTsKKwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgfQor
fQorCisvLyBVc2VkIGluIGNsZWFuLCBmaXhlcyB0aGUgZGVmYXVsdENoZWNrZWQgcHJvcGVydHkK
K2Z1bmN0aW9uIGZpeERlZmF1bHRDaGVja2VkKCBlbGVtICkgeworICAgICAgICBpZiAoIHJjaGVj
a2FibGVUeXBlLnRlc3QoIGVsZW0udHlwZSApICkgeworICAgICAgICAgICAgICAgIGVsZW0uZGVm
YXVsdENoZWNrZWQgPSBlbGVtLmNoZWNrZWQ7CisgICAgICAgIH0KK30KKworalF1ZXJ5LmV4dGVu
ZCh7CisgICAgICAgIGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERh
dGFBbmRFdmVudHMgKSB7CisgICAgICAgICAgICAgICAgdmFyIHNyY0VsZW1lbnRzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdEVsZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAg
aSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lOworCisgICAgICAgICAgICAgICAgaWYg
KCBqUXVlcnkuc3VwcG9ydC5odG1sNUNsb25lIHx8IGpRdWVyeS5pc1hNTERvYyhlbGVtKSB8fCAh
cm5vc2hpbWNhY2hlLnRlc3QoICI8IiArIGVsZW0ubm9kZU5hbWUgKyAiPiIgKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNsb25lID0gZWxlbS5jbG9uZU5vZGUoIHRydWUgKTsKKworICAg
ICAgICAgICAgICAgIC8vIElFPD04IGRvZXMgbm90IHByb3Blcmx5IGNsb25lIGRldGFjaGVkLCB1
bmtub3duIGVsZW1lbnQgbm9kZXMKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZnJhZ21lbnREaXYuaW5uZXJIVE1MID0gZWxlbS5vdXRlckhUTUw7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudERpdi5yZW1vdmVDaGlsZCggY2xvbmUgPSBm
cmFnbWVudERpdi5maXJzdENoaWxkICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgaWYgKCAoIWpRdWVyeS5zdXBwb3J0Lm5vQ2xvbmVFdmVudCB8fCAhalF1ZXJ5LnN1cHBv
cnQubm9DbG9uZUNoZWNrZWQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChl
bGVtLm5vZGVUeXBlID09PSAxIHx8IGVsZW0ubm9kZVR5cGUgPT09IDExKSAmJiAhalF1ZXJ5Lmlz
WE1MRG9jKGVsZW0pICkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUUgY29waWVzIGV2
ZW50cyBib3VuZCB2aWEgYXR0YWNoRXZlbnQgd2hlbiB1c2luZyBjbG9uZU5vZGUuCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBDYWxsaW5nIGRldGFjaEV2ZW50IG9uIHRoZSBjbG9uZSB3aWxs
IGFsc28gcmVtb3ZlIHRoZSBldmVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZyb20g
dGhlIG9yaWdpbmFsLiBJbiBvcmRlciB0byBnZXQgYXJvdW5kIHRoaXMsIHdlIHVzZSBzb21lCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9wcmlldGFyeSBtZXRob2RzIHRvIGNsZWFyIHRo
ZSBldmVudHMuIFRoYW5rcyB0byBNb29Ub29scworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Z3V5cyBmb3IgdGhpcyBob3RuZXNzLgorCisgICAgICAgICAgICAgICAgICAgICAgICBjbG9uZUZp
eEF0dHJpYnV0ZXMoIGVsZW0sIGNsb25lICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFVzaW5nIFNpenpsZSBoZXJlIGlzIGNyYXp5IHNsb3csIHNvIHdlIHVzZSBnZXRFbGVtZW50c0J5
VGFnTmFtZSBpbnN0ZWFkCisgICAgICAgICAgICAgICAgICAgICAgICBzcmNFbGVtZW50cyA9IGdl
dEFsbCggZWxlbSApOworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdEVsZW1lbnRzID0gZ2V0
QWxsKCBjbG9uZSApOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZWlyZCBpdGVyYXRp
b24gYmVjYXVzZSBJRSB3aWxsIHJlcGxhY2UgdGhlIGxlbmd0aCBwcm9wZXJ0eQorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gd2l0aCBhbiBlbGVtZW50IGlmIHlvdSBhcmUgY2xvbmluZyB0aGUg
Ym9keSBhbmQgb25lIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxlbWVudHMg
b24gdGhlIHBhZ2UgaGFzIGEgbmFtZSBvciBpZCBvZiAibGVuZ3RoIgorICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICggaSA9IDA7IHNyY0VsZW1lbnRzW2ldOyArK2kgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBub2Rl
IGlzIG5vdCBudWxsOyBGaXhlcyAjOTU4NworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGRlc3RFbGVtZW50c1tpXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjbG9uZUZpeEF0dHJpYnV0ZXMoIHNyY0VsZW1lbnRzW2ldLCBkZXN0RWxlbWVu
dHNbaV0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIENv
cHkgdGhlIGV2ZW50cyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUgY2xvbmUKKyAgICAgICAgICAg
ICAgICBpZiAoIGRhdGFBbmRFdmVudHMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjbG9u
ZUNvcHlFdmVudCggZWxlbSwgY2xvbmUgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBkZWVwRGF0YUFuZEV2ZW50cyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSApOworCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBzcmNFbGVtZW50c1tpXTsgKytpICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lQ29weUV2ZW50KCBzcmNF
bGVtZW50c1tpXSwgZGVzdEVsZW1lbnRzW2ldICk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBzcmNFbGVtZW50cyA9IGRlc3RFbGVtZW50cyA9IG51bGw7CisKKyAg
ICAgICAgICAgICAgICAvLyBSZXR1cm4gdGhlIGNsb25lZCBzZXQKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY2xvbmU7CisgICAgICAgIH0sCisKKyAgICAgICAgY2xlYW46IGZ1bmN0aW9uKCBlbGVt
cywgY29udGV4dCwgZnJhZ21lbnQsIHNjcmlwdHMgKSB7CisgICAgICAgICAgICAgICAgdmFyIGks
IGosIGVsZW0sIHRhZywgd3JhcCwgZGVwdGgsIGRpdiwgaGFzQm9keSwgdGJvZHksIGxlbiwgaGFu
ZGxlU2NyaXB0LCBqc1RhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICBzYWZlID0gY29udGV4
dCA9PT0gZG9jdW1lbnQgJiYgc2FmZUZyYWdtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0ID0gW107CisKKyAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhhdCBjb250ZXh0IGlzIGEg
ZG9jdW1lbnQKKyAgICAgICAgICAgICAgICBpZiAoICFjb250ZXh0IHx8IHR5cGVvZiBjb250ZXh0
LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQgPT09ICJ1bmRlZmluZWQiICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dCA9IGRvY3VtZW50OworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIC8vIFVzZSB0aGUgYWxyZWFkeS1jcmVhdGVkIHNhZmUgZnJhZ21lbnQgaWYg
Y29udGV4dCBwZXJtaXRzCisgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IChlbGVtID0gZWxl
bXNbaV0pICE9IG51bGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlw
ZW9mIGVsZW0gPT09ICJudW1iZXIiICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbGVtICs9ICIiOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoICFlbGVtICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gQ29udmVydCBodG1sIHN0cmluZyBpbnRvIERPTSBub2RlcworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgZWxlbSA9PT0gInN0cmluZyIgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXJodG1sLnRlc3QoIGVsZW0gKSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gY29udGV4dC5jcmVh
dGVUZXh0Tm9kZSggZWxlbSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSBh
IHNhZmUgY29udGFpbmVyIGluIHdoaWNoIHRvIHJlbmRlciB0aGUgaHRtbAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmUgPSBzYWZlIHx8IGNyZWF0ZVNhZmVGcmFn
bWVudCggY29udGV4dCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRpdiA9IGNvbnRleHQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2FmZS5hcHBlbmRDaGlsZCggZGl2ICk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXggIlhIVE1MIi1zdHlsZSB0YWdz
IGluIGFsbCBicm93c2VycworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW0gPSBlbGVtLnJlcGxhY2UocnhodG1sVGFnLCAiPCQxPjwvJDI+Iik7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHbyB0byBodG1sIGFuZCBiYWNrLCB0
aGVuIHBlZWwgb2ZmIGV4dHJhIHdyYXBwZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGFnID0gKCBydGFnTmFtZS5leGVjKCBlbGVtICkgfHwgWyIiLCAiIl0gKVsx
XS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0OworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoID0gd3JhcFswXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gd3JhcFsxXSArIGVs
ZW0gKyB3cmFwWzJdOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gTW92ZSB0byB0aGUgcmlnaHQgZGVwdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAoIGRlcHRoLS0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkaXYgPSBkaXYubGFzdENoaWxkOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBJRSdzIGF1dG9pbnNlcnRlZCA8dGJvZHk+IGZyb20g
dGFibGUgZnJhZ21lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCAhalF1ZXJ5LnN1cHBvcnQudGJvZHkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZyB3YXMgYSA8dGFibGU+LCAqbWF5KiBo
YXZlIHNwdXJpb3VzIDx0Ym9keT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhhc0JvZHkgPSBydGJvZHkudGVzdChlbGVtKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJvZHkgPSB0YWcgPT09
ICJ0YWJsZSIgJiYgIWhhc0JvZHkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5maXJzdENoaWxkICYmIGRpdi5maXJz
dENoaWxkLmNoaWxkTm9kZXMgOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nIHdhcyBhIGJhcmUgPHRoZWFk
PiBvciA8dGZvb3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JhcFsxXSA9PT0gIjx0YWJsZT4iICYmICFoYXNCb2R5ID8K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRpdi5jaGlsZE5vZGVzIDoKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBqID0g
dGJvZHkubGVuZ3RoIC0gMTsgaiA+PSAwIDsgLS1qICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5ub2RlTmFtZSgg
dGJvZHlbIGogXSwgInRib2R5IiApICYmICF0Ym9keVsgaiBdLmNoaWxkTm9kZXMubGVuZ3RoICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRib2R5WyBqIF0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggdGJvZHlbIGogXSAp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUUgY29tcGxldGVseSBraWxscyBsZWFkaW5n
IHdoaXRlc3BhY2Ugd2hlbiBpbm5lckhUTUwgaXMgdXNlZAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNl
ICYmIHJsZWFkaW5nV2hpdGVzcGFjZS50ZXN0KCBlbGVtICkgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXYuaW5zZXJ0QmVmb3JlKCBjb250ZXh0
LmNyZWF0ZVRleHROb2RlKCBybGVhZGluZ1doaXRlc3BhY2UuZXhlYyhlbGVtKVswXSApLCBkaXYu
Zmlyc3RDaGlsZCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBkaXYuY2hp
bGROb2RlczsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRh
a2Ugb3V0IG9mIGZyYWdtZW50IGNvbnRhaW5lciAod2UgbmVlZCBhIGZyZXNoIGRpdiBlYWNoIHRp
bWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2LnBhcmVudE5v
ZGUucmVtb3ZlQ2hpbGQoIGRpdiApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggZWxlbS5ub2RlVHlwZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
LnB1c2goIGVsZW0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5tZXJnZSggcmV0LCBlbGVtICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgLy8gRml4ICMxMTM1NjogQ2xlYXIgZWxlbWVudHMgZnJvbSBzYWZlRnJhZ21lbnQKKyAgICAg
ICAgICAgICAgICBpZiAoIGRpdiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBk
aXYgPSBzYWZlID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAv
LyBSZXNldCBkZWZhdWx0Q2hlY2tlZCBmb3IgYW55IHJhZGlvcyBhbmQgY2hlY2tib3hlcworICAg
ICAgICAgICAgICAgIC8vIGFib3V0IHRvIGJlIGFwcGVuZGVkIHRvIHRoZSBET00gaW4gSUUgNi83
ICgjODA2MCkKKyAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5hcHBlbmRDaGVj
a2VkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IChlbGVtID0gcmV0
W2ldKSAhPSBudWxsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaW5wdXQiICkgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZml4RGVmYXVsdENoZWNrZWQoIGVsZW0gKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGVsZW0uZ2V0RWxl
bWVudHNCeVRhZ05hbWUgIT09ICJ1bmRlZmluZWQiICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ncmVwKCBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1l
KCJpbnB1dCIpLCBmaXhEZWZhdWx0Q2hlY2tlZCApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgLy8gQXBwZW5kIGVsZW1lbnRzIHRvIGEgcHJvdmlkZWQgZG9jdW1l
bnQgZnJhZ21lbnQKKyAgICAgICAgICAgICAgICBpZiAoIGZyYWdtZW50ICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBvZiBlYWNoIHNjcmlwdCBlbGVtZW50
CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTY3JpcHQgPSBmdW5jdGlvbiggZWxlbSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgY29uc2lk
ZXIgaXQgZXhlY3V0YWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFl
bGVtLnR5cGUgfHwgcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlICkgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGV0YWNoIHRoZSBzY3JpcHQgYW5kIHN0
b3JlIGl0IGluIHRoZSBzY3JpcHRzIGFycmF5IChpZiBwcm92aWRlZCkgb3IgdGhlIGZyYWdtZW50
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIHRydXRo
eSB0byBpbmRpY2F0ZSB0aGF0IGl0IGhhcyBiZWVuIGhhbmRsZWQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NyaXB0cyA/CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRzLnB1c2goIGVsZW0ucGFyZW50
Tm9kZSA/IGVsZW0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZWxlbSApIDogZWxlbSApIDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50LmFw
cGVuZENoaWxkKCBlbGVtICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
IGkgPSAwOyAoZWxlbSA9IHJldFtpXSkgIT0gbnVsbDsgaSsrICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBkb25lIGFmdGVyIGhhbmRsaW5nIGFu
IGV4ZWN1dGFibGUgc2NyaXB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
ISggalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAic2NyaXB0IiApICYmIGhhbmRsZVNjcmlwdCggZWxl
bSApICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBw
ZW5kIHRvIGZyYWdtZW50IGFuZCBoYW5kbGUgZW1iZWRkZWQgc2NyaXB0cworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgZWxl
bS5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGVTY3JpcHQgYWx0ZXJz
IHRoZSBET00sIHNvIHVzZSBqUXVlcnkubWVyZ2UgdG8gZW5zdXJlIHNuYXBzaG90IGl0ZXJhdGlv
bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNUYWdz
ID0galF1ZXJ5LmdyZXAoIGpRdWVyeS5tZXJnZSggW10sIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05h
bWUoInNjcmlwdCIpICksIGhhbmRsZVNjcmlwdCApOworCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGxpY2UgdGhlIHNjcmlwdHMgaW50byByZXQg
YWZ0ZXIgdGhlaXIgZm9ybWVyIGFuY2VzdG9yIGFuZCBhZHZhbmNlIG91ciBpbmRleCBiZXlvbmQg
dGhlbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
LnNwbGljZS5hcHBseSggcmV0LCBbaSArIDEsIDBdLmNvbmNhdCgganNUYWdzICkgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0ganNUYWdzLmxl
bmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9
LAorCisgICAgICAgIGNsZWFuRGF0YTogZnVuY3Rpb24oIGVsZW1zLCAvKiBpbnRlcm5hbCAqLyBh
Y2NlcHREYXRhICkgeworICAgICAgICAgICAgICAgIHZhciBkYXRhLCBpZCwgZWxlbSwgdHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
aW50ZXJuYWxLZXkgPSBqUXVlcnkuZXhwYW5kbywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
Y2hlID0galF1ZXJ5LmNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlRXhwYW5k
byA9IGpRdWVyeS5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8sCisgICAgICAgICAgICAgICAgICAgICAg
ICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWw7CisKKyAgICAgICAgICAgICAgICBmb3Ig
KCA7IChlbGVtID0gZWxlbXNbaV0pICE9IG51bGw7IGkrKyApIHsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBhY2NlcHREYXRhIHx8IGpRdWVyeS5hY2NlcHREYXRhKCBlbGVtICkgKSB7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBlbGVtWyBpbnRlcm5hbEtl
eSBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gaWQgJiYgY2FjaGVb
IGlkIF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRhICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGF0YS5ldmVudHMg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KCB0eXBlIGluIGRhdGEuZXZlbnRzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNwZWNpYWxbIHR5cGUgXSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHNob3J0
Y3V0IHRvIGF2b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZGF0YS5oYW5kbGUgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBjYWNoZSBvbmx5IGlmIGl0IHdhcyBub3QgYWxy
ZWFkeSByZW1vdmVkIGJ5IGpRdWVyeS5ldmVudC5yZW1vdmUKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGNhY2hlWyBpZCBdICkgeworCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgY2FjaGVbIGlkIF07CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFIGRv
ZXMgbm90IGFsbG93IHVzIHRvIGRlbGV0ZSBleHBhbmRvIHByb3BlcnRpZXMgZnJvbSBub2RlcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vciBk
b2VzIGl0IGhhdmUgYSByZW1vdmVBdHRyaWJ1dGUgZnVuY3Rpb24gb24gRG9jdW1lbnQgbm9kZXM7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBt
dXN0IGhhbmRsZSBhbGwgb2YgdGhlc2UgY2FzZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggZGVsZXRlRXhwYW5kbyApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGVsZW1b
IGludGVybmFsS2V5IF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIGVsZW0ucmVtb3ZlQXR0cmlidXRlICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnJlbW92
ZUF0dHJpYnV0ZSggaW50ZXJuYWxLZXkgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsgaW50ZXJuYWxLZXkgXSA9IG51bGw7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5kZWxl
dGVkSWRzLnB1c2goIGlkICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9Cit9KTsKKy8vIExpbWl0IHNj
b3BlIHBvbGx1dGlvbiBmcm9tIGFueSBkZXByZWNhdGVkIEFQSQorKGZ1bmN0aW9uKCkgeworCit2
YXIgbWF0Y2hlZCwgYnJvd3NlcjsKKworLy8gVXNlIG9mIGpRdWVyeS5icm93c2VyIGlzIGZyb3du
ZWQgdXBvbi4KKy8vIE1vcmUgZGV0YWlsczogaHR0cDovL2FwaS5qcXVlcnkuY29tL2pRdWVyeS5i
cm93c2VyCisvLyBqUXVlcnkudWFNYXRjaCBtYWludGFpbmVkIGZvciBiYWNrLWNvbXBhdAoralF1
ZXJ5LnVhTWF0Y2ggPSBmdW5jdGlvbiggdWEgKSB7CisgICAgICAgIHVhID0gdWEudG9Mb3dlckNh
c2UoKTsKKworICAgICAgICB2YXIgbWF0Y2ggPSAvKGNocm9tZSlbIFwvXShbXHcuXSspLy5leGVj
KCB1YSApIHx8CisgICAgICAgICAgICAgICAgLyh3ZWJraXQpWyBcL10oW1x3Ll0rKS8uZXhlYygg
dWEgKSB8fAorICAgICAgICAgICAgICAgIC8ob3BlcmEpKD86Lip2ZXJzaW9ufClbIFwvXShbXHcu
XSspLy5leGVjKCB1YSApIHx8CisgICAgICAgICAgICAgICAgLyhtc2llKSAoW1x3Ll0rKS8uZXhl
YyggdWEgKSB8fAorICAgICAgICAgICAgICAgIHVhLmluZGV4T2YoImNvbXBhdGlibGUiKSA8IDAg
JiYgLyhtb3ppbGxhKSg/Oi4qPyBydjooW1x3Ll0rKXwpLy5leGVjKCB1YSApIHx8CisgICAgICAg
ICAgICAgICAgW107CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICBicm93c2Vy
OiBtYXRjaFsgMSBdIHx8ICIiLAorICAgICAgICAgICAgICAgIHZlcnNpb246IG1hdGNoWyAyIF0g
fHwgIjAiCisgICAgICAgIH07Cit9OworCittYXRjaGVkID0galF1ZXJ5LnVhTWF0Y2goIG5hdmln
YXRvci51c2VyQWdlbnQgKTsKK2Jyb3dzZXIgPSB7fTsKKworaWYgKCBtYXRjaGVkLmJyb3dzZXIg
KSB7CisgICAgICAgIGJyb3dzZXJbIG1hdGNoZWQuYnJvd3NlciBdID0gdHJ1ZTsKKyAgICAgICAg
YnJvd3Nlci52ZXJzaW9uID0gbWF0Y2hlZC52ZXJzaW9uOworfQorCisvLyBDaHJvbWUgaXMgV2Vi
a2l0LCBidXQgV2Via2l0IGlzIGFsc28gU2FmYXJpLgoraWYgKCBicm93c2VyLmNocm9tZSApIHsK
KyAgICAgICAgYnJvd3Nlci53ZWJraXQgPSB0cnVlOworfSBlbHNlIGlmICggYnJvd3Nlci53ZWJr
aXQgKSB7CisgICAgICAgIGJyb3dzZXIuc2FmYXJpID0gdHJ1ZTsKK30KKworalF1ZXJ5LmJyb3dz
ZXIgPSBicm93c2VyOworCitqUXVlcnkuc3ViID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGZ1bmN0
aW9uIGpRdWVyeVN1Yiggc2VsZWN0b3IsIGNvbnRleHQgKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG5ldyBqUXVlcnlTdWIuZm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKTsKKyAgICAgICAg
fQorICAgICAgICBqUXVlcnkuZXh0ZW5kKCB0cnVlLCBqUXVlcnlTdWIsIHRoaXMgKTsKKyAgICAg
ICAgalF1ZXJ5U3ViLnN1cGVyY2xhc3MgPSB0aGlzOworICAgICAgICBqUXVlcnlTdWIuZm4gPSBq
UXVlcnlTdWIucHJvdG90eXBlID0gdGhpcygpOworICAgICAgICBqUXVlcnlTdWIuZm4uY29uc3Ry
dWN0b3IgPSBqUXVlcnlTdWI7CisgICAgICAgIGpRdWVyeVN1Yi5zdWIgPSB0aGlzLnN1YjsKKyAg
ICAgICAgalF1ZXJ5U3ViLmZuLmluaXQgPSBmdW5jdGlvbiBpbml0KCBzZWxlY3RvciwgY29udGV4
dCApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGNvbnRleHQgJiYgY29udGV4dCBpbnN0YW5jZW9m
IGpRdWVyeSAmJiAhKGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnlTdWIpICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dCA9IGpRdWVyeVN1YiggY29udGV4dCApOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZm4uaW5pdC5jYWxsKCB0
aGlzLCBzZWxlY3RvciwgY29udGV4dCwgcm9vdGpRdWVyeVN1YiApOworICAgICAgICB9OworICAg
ICAgICBqUXVlcnlTdWIuZm4uaW5pdC5wcm90b3R5cGUgPSBqUXVlcnlTdWIuZm47CisgICAgICAg
IHZhciByb290alF1ZXJ5U3ViID0galF1ZXJ5U3ViKGRvY3VtZW50KTsKKyAgICAgICAgcmV0dXJu
IGpRdWVyeVN1YjsKK307CisKK30pKCk7Cit2YXIgY3VyQ1NTLCBpZnJhbWUsIGlmcmFtZURvYywK
KyAgICAgICAgcmFscGhhID0gL2FscGhhXChbXildKlwpL2ksCisgICAgICAgIHJvcGFjaXR5ID0g
L29wYWNpdHk9KFteKV0qKS8sCisgICAgICAgIHJwb3NpdGlvbiA9IC9eKHRvcHxyaWdodHxib3R0
b218bGVmdCkkLywKKyAgICAgICAgLy8gc3dhcHBhYmxlIGlmIGRpc3BsYXkgaXMgbm9uZSBvciBz
dGFydHMgd2l0aCB0YWJsZSBleGNlcHQgInRhYmxlIiwgInRhYmxlLWNlbGwiLCBvciAidGFibGUt
Y2FwdGlvbiIKKyAgICAgICAgLy8gc2VlIGhlcmUgZm9yIGRpc3BsYXkgdmFsdWVzOiBodHRwczov
L2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9kaXNwbGF5CisgICAgICAgIHJk
aXNwbGF5c3dhcCA9IC9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLywKKyAgICAgICAgcm1hcmdp
biA9IC9ebWFyZ2luLywKKyAgICAgICAgcm51bXNwbGl0ID0gbmV3IFJlZ0V4cCggIl4oIiArIGNv
cmVfcG51bSArICIpKC4qKSQiLCAiaSIgKSwKKyAgICAgICAgcm51bW5vbnB4ID0gbmV3IFJlZ0V4
cCggIl4oIiArIGNvcmVfcG51bSArICIpKD8hcHgpW2EteiVdKyQiLCAiaSIgKSwKKyAgICAgICAg
cnJlbE51bSA9IG5ldyBSZWdFeHAoICJeKFstK10pPSgiICsgY29yZV9wbnVtICsgIikiLCAiaSIg
KSwKKyAgICAgICAgZWxlbWRpc3BsYXkgPSB7IEJPRFk6ICJibG9jayIgfSwKKworICAgICAgICBj
c3NTaG93ID0geyBwb3NpdGlvbjogImFic29sdXRlIiwgdmlzaWJpbGl0eTogImhpZGRlbiIsIGRp
c3BsYXk6ICJibG9jayIgfSwKKyAgICAgICAgY3NzTm9ybWFsVHJhbnNmb3JtID0geworICAgICAg
ICAgICAgICAgIGxldHRlclNwYWNpbmc6IDAsCisgICAgICAgICAgICAgICAgZm9udFdlaWdodDog
NDAwCisgICAgICAgIH0sCisKKyAgICAgICAgY3NzRXhwYW5kID0gWyAiVG9wIiwgIlJpZ2h0Iiwg
IkJvdHRvbSIsICJMZWZ0IiBdLAorICAgICAgICBjc3NQcmVmaXhlcyA9IFsgIldlYmtpdCIsICJP
IiwgIk1veiIsICJtcyIgXSwKKworICAgICAgICBldmVudHNUb2dnbGUgPSBqUXVlcnkuZm4udG9n
Z2xlOworCisvLyByZXR1cm4gYSBjc3MgcHJvcGVydHkgbWFwcGVkIHRvIGEgcG90ZW50aWFsbHkg
dmVuZG9yIHByZWZpeGVkIHByb3BlcnR5CitmdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggc3R5bGUs
IG5hbWUgKSB7CisKKyAgICAgICAgLy8gc2hvcnRjdXQgZm9yIG5hbWVzIHRoYXQgYXJlIG5vdCB2
ZW5kb3IgcHJlZml4ZWQKKyAgICAgICAgaWYgKCBuYW1lIGluIHN0eWxlICkgeworICAgICAgICAg
ICAgICAgIHJldHVybiBuYW1lOworICAgICAgICB9CisKKyAgICAgICAgLy8gY2hlY2sgZm9yIHZl
bmRvciBwcmVmaXhlZCBuYW1lcworICAgICAgICB2YXIgY2FwTmFtZSA9IG5hbWUuY2hhckF0KDAp
LnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKDEpLAorICAgICAgICAgICAgICAgIG9yaWdOYW1l
ID0gbmFtZSwKKyAgICAgICAgICAgICAgICBpID0gY3NzUHJlZml4ZXMubGVuZ3RoOworCisgICAg
ICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgICAgIG5hbWUgPSBjc3NQcmVmaXhlc1sg
aSBdICsgY2FwTmFtZTsKKyAgICAgICAgICAgICAgICBpZiAoIG5hbWUgaW4gc3R5bGUgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmFtZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gb3JpZ05hbWU7Cit9CisKK2Z1bmN0aW9uIGlzSGlk
ZGVuKCBlbGVtLCBlbCApIHsKKyAgICAgICAgZWxlbSA9IGVsIHx8IGVsZW07CisgICAgICAgIHJl
dHVybiBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKSA9PT0gIm5vbmUiIHx8ICFqUXVlcnku
Y29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApOworfQorCitmdW5jdGlvbiBzaG93
SGlkZSggZWxlbWVudHMsIHNob3cgKSB7CisgICAgICAgIHZhciBlbGVtLCBkaXNwbGF5LAorICAg
ICAgICAgICAgICAgIHZhbHVlcyA9IFtdLAorICAgICAgICAgICAgICAgIGluZGV4ID0gMCwKKyAg
ICAgICAgICAgICAgICBsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7CisKKyAgICAgICAgZm9yICgg
OyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHsKKyAgICAgICAgICAgICAgICBlbGVtID0gZWxl
bWVudHNbIGluZGV4IF07CisgICAgICAgICAgICAgICAgaWYgKCAhZWxlbS5zdHlsZSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB2YWx1ZXNbIGluZGV4IF0gPSBqUXVlcnkuX2RhdGEoIGVsZW0sICJvbGRkaXNw
bGF5IiApOworICAgICAgICAgICAgICAgIGlmICggc2hvdyApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFJlc2V0IHRoZSBpbmxpbmUgZGlzcGxheSBvZiB0aGlzIGVsZW1lbnQgdG8gbGVh
cm4gaWYgaXQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlaW5nIGhpZGRlbiBieSBj
YXNjYWRlZCBydWxlcyBvciBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXZhbHVl
c1sgaW5kZXggXSAmJiBlbGVtLnN0eWxlLmRpc3BsYXkgPT09ICJub25lIiApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zdHlsZS5kaXNwbGF5ID0gIiI7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCBlbGVt
ZW50cyB3aGljaCBoYXZlIGJlZW4gb3ZlcnJpZGRlbiB3aXRoIGRpc3BsYXk6IG5vbmUKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGluIGEgc3R5bGVzaGVldCB0byB3aGF0ZXZlciB0aGUgZGVm
YXVsdCBicm93c2VyIHN0eWxlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3Igc3Vj
aCBhbiBlbGVtZW50CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0uc3R5bGUuZGlz
cGxheSA9PT0gIiIgJiYgaXNIaWRkZW4oIGVsZW0gKSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWVzWyBpbmRleCBdID0galF1ZXJ5Ll9kYXRhKCBlbGVtLCAib2xkZGlz
cGxheSIsIGNzc19kZWZhdWx0RGlzcGxheShlbGVtLm5vZGVOYW1lKSApOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkaXNwbGF5ID0gY3VyQ1NTKCBlbGVtLCAiZGlzcGxheSIgKTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhdmFsdWVzWyBpbmRleCBdICYmIGRpc3BsYXkgIT09ICJub25l
IiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9kYXRhKCBlbGVt
LCAib2xkZGlzcGxheSIsIGRpc3BsYXkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBTZXQgdGhlIGRpc3BsYXkg
b2YgbW9zdCBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcAorICAgICAgICAvLyB0byBh
dm9pZCB0aGUgY29uc3RhbnQgcmVmbG93CisgICAgICAgIGZvciAoIGluZGV4ID0gMDsgaW5kZXgg
PCBsZW5ndGg7IGluZGV4KysgKSB7CisgICAgICAgICAgICAgICAgZWxlbSA9IGVsZW1lbnRzWyBp
bmRleCBdOworICAgICAgICAgICAgICAgIGlmICggIWVsZW0uc3R5bGUgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKCAhc2hvdyB8fCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09ICJub25lIiB8fCBlbGVtLnN0
eWxlLmRpc3BsYXkgPT09ICIiICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zdHls
ZS5kaXNwbGF5ID0gc2hvdyA/IHZhbHVlc1sgaW5kZXggXSB8fCAiIiA6ICJub25lIjsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZWxlbWVudHM7Cit9CisK
K2pRdWVyeS5mbi5leHRlbmQoeworICAgICAgICBjc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSAp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgZnVuY3Rpb24o
IGVsZW0sIG5hbWUsIHZhbHVlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZh
bHVlICE9PSB1bmRlZmluZWQgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVl
cnkuc3R5bGUoIGVsZW0sIG5hbWUsIHZhbHVlICkgOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICk7CisgICAgICAgICAgICAgICAgfSwgbmFt
ZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7CisgICAgICAgIH0sCisgICAgICAgIHNo
b3c6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBzaG93SGlkZSggdGhpcywg
dHJ1ZSApOworICAgICAgICB9LAorICAgICAgICBoaWRlOiBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gc2hvd0hpZGUoIHRoaXMgKTsKKyAgICAgICAgfSwKKyAgICAgICAgdG9n
Z2xlOiBmdW5jdGlvbiggc3RhdGUsIGZuMiApIHsKKyAgICAgICAgICAgICAgICB2YXIgYm9vbCA9
IHR5cGVvZiBzdGF0ZSA9PT0gImJvb2xlYW4iOworCisgICAgICAgICAgICAgICAgaWYgKCBqUXVl
cnkuaXNGdW5jdGlvbiggc3RhdGUgKSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggZm4yICkgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnRzVG9nZ2xlLmFwcGx5KCB0aGlzLCBh
cmd1bWVudHMgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBib29s
ID8gc3RhdGUgOiBpc0hpZGRlbiggdGhpcyApICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkoIHRoaXMgKS5zaG93KCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5o
aWRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KK30pOworCitqUXVlcnkuZXh0ZW5kKHsKKyAgICAgICAgLy8gQWRkIGluIHN0eWxl
IHByb3BlcnR5IGhvb2tzIGZvciBvdmVycmlkaW5nIHRoZSBkZWZhdWx0CisgICAgICAgIC8vIGJl
aGF2aW9yIG9mIGdldHRpbmcgYW5kIHNldHRpbmcgYSBzdHlsZSBwcm9wZXJ0eQorICAgICAgICBj
c3NIb29rczogeworICAgICAgICAgICAgICAgIG9wYWNpdHk6IHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGNvbXB1dGVkICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBhbHdheXMgZ2V0IGEgbnVtYmVyIGJhY2sg
ZnJvbSBvcGFjaXR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHJldCA9IGN1ckNTUyggZWxlbSwgIm9wYWNpdHkiICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldCA9PT0gIiIgPyAiMSIgOiByZXQ7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICAvLyBFeGNsdWRlIHRoZSBm
b2xsb3dpbmcgY3NzIHByb3BlcnRpZXMgdG8gYWRkIHB4CisgICAgICAgIGNzc051bWJlcjogewor
ICAgICAgICAgICAgICAgICJmaWxsT3BhY2l0eSI6IHRydWUsCisgICAgICAgICAgICAgICAgImZv
bnRXZWlnaHQiOiB0cnVlLAorICAgICAgICAgICAgICAgICJsaW5lSGVpZ2h0IjogdHJ1ZSwKKyAg
ICAgICAgICAgICAgICAib3BhY2l0eSI6IHRydWUsCisgICAgICAgICAgICAgICAgIm9ycGhhbnMi
OiB0cnVlLAorICAgICAgICAgICAgICAgICJ3aWRvd3MiOiB0cnVlLAorICAgICAgICAgICAgICAg
ICJ6SW5kZXgiOiB0cnVlLAorICAgICAgICAgICAgICAgICJ6b29tIjogdHJ1ZQorICAgICAgICB9
LAorCisgICAgICAgIC8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5hbWVzIHlvdSB3aXNoIHRv
IGZpeCBiZWZvcmUKKyAgICAgICAgLy8gc2V0dGluZyBvciBnZXR0aW5nIHRoZSB2YWx1ZQorICAg
ICAgICBjc3NQcm9wczogeworICAgICAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSBmbG9hdCBjc3Mg
cHJvcGVydHkKKyAgICAgICAgICAgICAgICAiZmxvYXQiOiBqUXVlcnkuc3VwcG9ydC5jc3NGbG9h
dCA/ICJjc3NGbG9hdCIgOiAic3R5bGVGbG9hdCIKKyAgICAgICAgfSwKKworICAgICAgICAvLyBH
ZXQgYW5kIHNldCB0aGUgc3R5bGUgcHJvcGVydHkgb24gYSBET00gTm9kZQorICAgICAgICBzdHls
ZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlLCBleHRyYSApIHsKKyAgICAgICAgICAgICAg
ICAvLyBEb24ndCBzZXQgc3R5bGVzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXMKKyAgICAgICAg
ICAgICAgICBpZiAoICFlbGVtIHx8IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlw
ZSA9PT0gOCB8fCAhZWxlbS5zdHlsZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhh
dCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUKKyAgICAgICAgICAgICAgICB2YXIg
cmV0LCB0eXBlLCBob29rcywKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdOYW1lID0galF1
ZXJ5LmNhbWVsQ2FzZSggbmFtZSApLAorICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSBl
bGVtLnN0eWxlOworCisgICAgICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5jc3NQcm9wc1sgb3Jp
Z05hbWUgXSB8fCAoIGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSA9IHZlbmRvclByb3BOYW1l
KCBzdHlsZSwgb3JpZ05hbWUgKSApOworCisgICAgICAgICAgICAgICAgLy8gZ2V0cyBob29rIGZv
ciB0aGUgcHJlZml4ZWQgdmVyc2lvbgorICAgICAgICAgICAgICAgIC8vIGZvbGxvd2VkIGJ5IHRo
ZSB1bnByZWZpeGVkIHZlcnNpb24KKyAgICAgICAgICAgICAgICBob29rcyA9IGpRdWVyeS5jc3NI
b29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTsKKworICAgICAgICAg
ICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHNldHRpbmcgYSB2YWx1ZQorICAgICAgICAgICAgICAg
IGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGUgPSB0eXBlb2YgdmFsdWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQg
cmVsYXRpdmUgbnVtYmVyIHN0cmluZ3MgKCs9IG9yIC09KSB0byByZWxhdGl2ZSBudW1iZXJzLiAj
NzM0NQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAic3RyaW5nIiAmJiAo
cmV0ID0gcnJlbE51bS5leGVjKCB2YWx1ZSApKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsdWUgPSAoIHJldFsxXSArIDEgKSAqIHJldFsyXSArIHBhcnNlRmxvYXQoIGpR
dWVyeS5jc3MoIGVsZW0sIG5hbWUgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBGaXhlcyBidWcgIzkyMzcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZSA9ICJudW1iZXIiOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBOYU4gYW5kIG51bGwgdmFsdWVzIGFyZW4ndCBz
ZXQuIFNlZTogIzcxMTYKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUgPT0gbnVs
bCB8fCB0eXBlID09PSAibnVtYmVyIiAmJiBpc05hTiggdmFsdWUgKSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIG51bWJlciB3YXMgcGFzc2VkIGluLCBh
ZGQgJ3B4JyB0byB0aGUgKGV4Y2VwdCBmb3IgY2VydGFpbiBDU1MgcHJvcGVydGllcykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggdHlwZSA9PT0gIm51bWJlciIgJiYgIWpRdWVyeS5jc3NO
dW1iZXJbIG9yaWdOYW1lIF0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlICs9ICJweCI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhl
cndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCAhaG9va3MgfHwgISgic2V0IiBpbiBob29rcykgfHwgKHZhbHVlID0gaG9va3Muc2V0
KCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSkgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gV3JhcHBlZCB0byBwcmV2ZW50IElFIGZyb20gdGhyb3dpbmcg
ZXJyb3JzIHdoZW4gJ2ludmFsaWQnIHZhbHVlcyBhcmUgcHJvdmlkZWQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gRml4ZXMgYnVnICM1NTA5CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3R5bGVbIG5hbWUgXSA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGNhdGNoKGUpIHt9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSBob29rIHdhcyBw
cm92aWRlZCBnZXQgdGhlIG5vbi1jb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29r
cy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApKSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UganVzdCBnZXQgdGhl
IHZhbHVlIGZyb20gdGhlIHN0eWxlIG9iamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHN0eWxlWyBuYW1lIF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAg
ICAgIGNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIG51bWVyaWMsIGV4dHJhICkgeworICAgICAg
ICAgICAgICAgIHZhciB2YWwsIG51bSwgaG9va3MsCisgICAgICAgICAgICAgICAgICAgICAgICBv
cmlnTmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKTsKKworICAgICAgICAgICAgICAgIC8v
IE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZQorICAgICAg
ICAgICAgICAgIG5hbWUgPSBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gfHwgKCBqUXVlcnku
Y3NzUHJvcHNbIG9yaWdOYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggZWxlbS5zdHlsZSwgb3JpZ05h
bWUgKSApOworCisgICAgICAgICAgICAgICAgLy8gZ2V0cyBob29rIGZvciB0aGUgcHJlZml4ZWQg
dmVyc2lvbgorICAgICAgICAgICAgICAgIC8vIGZvbGxvd2VkIGJ5IHRoZSB1bnByZWZpeGVkIHZl
cnNpb24KKyAgICAgICAgICAgICAgICBob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8
IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTsKKworICAgICAgICAgICAgICAgIC8vIElmIGEg
aG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlCisgICAg
ICAgICAgICAgICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbCA9IGhvb2tzLmdldCggZWxlbSwgdHJ1ZSwgZXh0cmEgKTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGlmIGEgd2F5IHRv
IGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3RzLCB1c2UgdGhhdAorICAgICAgICAgICAgICAg
IGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YWwg
PSBjdXJDU1MoIGVsZW0sIG5hbWUgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAvL2NvbnZlcnQgIm5vcm1hbCIgdG8gY29tcHV0ZWQgdmFsdWUKKyAgICAgICAgICAgICAg
ICBpZiAoIHZhbCA9PT0gIm5vcm1hbCIgJiYgbmFtZSBpbiBjc3NOb3JtYWxUcmFuc2Zvcm0gKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBjc3NOb3JtYWxUcmFuc2Zvcm1bIG5hbWUg
XTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBSZXR1cm4sIGNvbnZl
cnRpbmcgdG8gbnVtYmVyIGlmIGZvcmNlZCBvciBhIHF1YWxpZmllciB3YXMgcHJvdmlkZWQgYW5k
IHZhbCBsb29rcyBudW1lcmljCisgICAgICAgICAgICAgICAgaWYgKCBudW1lcmljIHx8IGV4dHJh
ICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBudW0gPSBwYXJzZUZs
b2F0KCB2YWwgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1lcmljIHx8IGpR
dWVyeS5pc051bWVyaWMoIG51bSApID8gbnVtIHx8IDAgOiB2YWw7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiB2YWw7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8g
QSBtZXRob2QgZm9yIHF1aWNrbHkgc3dhcHBpbmcgaW4vb3V0IENTUyBwcm9wZXJ0aWVzIHRvIGdl
dCBjb3JyZWN0IGNhbGN1bGF0aW9ucworICAgICAgICBzd2FwOiBmdW5jdGlvbiggZWxlbSwgb3B0
aW9ucywgY2FsbGJhY2sgKSB7CisgICAgICAgICAgICAgICAgdmFyIHJldCwgbmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG9sZCA9IHt9OworCisgICAgICAgICAgICAgICAgLy8gUmVtZW1i
ZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzCisgICAgICAgICAgICAg
ICAgZm9yICggbmFtZSBpbiBvcHRpb25zICkgeworICAgICAgICAgICAgICAgICAgICAgICAgb2xk
WyBuYW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07CisgICAgICAgICAgICAgICAgICAgICAgICBl
bGVtLnN0eWxlWyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgcmV0ID0gY2FsbGJhY2suY2FsbCggZWxlbSApOworCisgICAgICAg
ICAgICAgICAgLy8gUmV2ZXJ0IHRoZSBvbGQgdmFsdWVzCisgICAgICAgICAgICAgICAgZm9yICgg
bmFtZSBpbiBvcHRpb25zICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zdHlsZVsg
bmFtZSBdID0gb2xkWyBuYW1lIF07CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorfSk7CisKKy8vIE5PVEU6IFRvIGFueSBmdXR1cmUg
bWFpbnRhaW5lciwgd2UndmUgd2luZG93LmdldENvbXB1dGVkU3R5bGUKKy8vIGJlY2F1c2UganNk
b20gb24gbm9kZS5qcyB3aWxsIGJyZWFrIHdpdGhvdXQgaXQuCitpZiAoIHdpbmRvdy5nZXRDb21w
dXRlZFN0eWxlICkgeworICAgICAgICBjdXJDU1MgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsK
KyAgICAgICAgICAgICAgICB2YXIgcmV0LCB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSgg
ZWxlbSwgbnVsbCApLAorICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSBlbGVtLnN0eWxl
OworCisgICAgICAgICAgICAgICAgaWYgKCBjb21wdXRlZCApIHsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gZ2V0UHJvcGVydHlWYWx1ZSBpcyBvbmx5IG5lZWRlZCBmb3IgLmNzcygnZmls
dGVyJykgaW4gSUU5LCBzZWUgIzEyNTM3CisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBj
b21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICkgfHwgY29tcHV0ZWRbIG5hbWUgXTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXQgPT09ICIiICYmICFqUXVlcnkuY29udGFp
bnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUgKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSB0cmlidXRlIHRv
IHRoZSAiYXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkcyIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIENocm9tZSA8IDE3IGFuZCBTYWZhcmkgNS4wIHVzZXMgImNvbXB1dGVkIHZhbHVlIiBp
bnN0ZWFkIG9mICJ1c2VkIHZhbHVlIiBmb3IgbWFyZ2luLXJpZ2h0CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBTYWZhcmkgNS4xLjcgKGF0IGxlYXN0KSByZXR1cm5zIHBlcmNlbnRhZ2UgZm9y
IGEgbGFyZ2VyIHNldCBvZiB2YWx1ZXMsIGJ1dCB3aWR0aCBzZWVtcyB0byBiZSByZWxpYWJseSBw
aXhlbHMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYWdhaW5zdCB0aGUgQ1NT
T00gZHJhZnQgc3BlYzogaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nzb20vI3Jlc29sdmVkLXZh
bHVlcworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBybnVtbm9ucHgudGVzdCggcmV0ICkg
JiYgcm1hcmdpbi50ZXN0KCBuYW1lICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdpZHRoID0gc3R5bGUud2lkdGg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1pbldpZHRoID0gc3R5bGUubWluV2lkdGg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1heFdpZHRoID0gc3R5bGUubWF4V2lkdGg7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3R5bGUubWluV2lkdGggPSBzdHlsZS5tYXhXaWR0aCA9IHN0eWxlLndpZHRoID0g
cmV0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBjb21wdXRlZC53aWR0
aDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS53aWR0aCA9IHdpZHRo
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5taW5XaWR0aCA9IG1pbldp
ZHRoOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5tYXhXaWR0aCA9IG1h
eFdpZHRoOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH07Cit9IGVsc2UgaWYgKCBkb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQuY3VycmVudFN0eWxlICkgeworICAgICAgICBjdXJDU1MgPSBm
dW5jdGlvbiggZWxlbSwgbmFtZSApIHsKKyAgICAgICAgICAgICAgICB2YXIgbGVmdCwgcnNMZWZ0
LAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gZWxlbS5jdXJyZW50U3R5bGUgJiYgZWxl
bS5jdXJyZW50U3R5bGVbIG5hbWUgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlID0g
ZWxlbS5zdHlsZTsKKworICAgICAgICAgICAgICAgIC8vIEF2b2lkIHNldHRpbmcgcmV0IHRvIGVt
cHR5IHN0cmluZyBoZXJlCisgICAgICAgICAgICAgICAgLy8gc28gd2UgZG9uJ3QgZGVmYXVsdCB0
byBhdXRvCisgICAgICAgICAgICAgICAgaWYgKCByZXQgPT0gbnVsbCAmJiBzdHlsZSAmJiBzdHls
ZVsgbmFtZSBdICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gc3R5bGVbIG5hbWUg
XTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBGcm9tIHRoZSBhd2Vz
b21lIGhhY2sgYnkgRGVhbiBFZHdhcmRzCisgICAgICAgICAgICAgICAgLy8gaHR0cDovL2VyaWsu
ZWFlLm5ldC9hcmNoaXZlcy8yMDA3LzA3LzI3LzE4LjU0LjE1LyNjb21tZW50LTEwMjI5MQorCisg
ICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgbm90IGRlYWxpbmcgd2l0aCBhIHJlZ3VsYXIgcGl4
ZWwgbnVtYmVyCisgICAgICAgICAgICAgICAgLy8gYnV0IGEgbnVtYmVyIHRoYXQgaGFzIGEgd2Vp
cmQgZW5kaW5nLCB3ZSBuZWVkIHRvIGNvbnZlcnQgaXQgdG8gcGl4ZWxzCisgICAgICAgICAgICAg
ICAgLy8gYnV0IG5vdCBwb3NpdGlvbiBjc3MgYXR0cmlidXRlcywgYXMgdGhvc2UgYXJlIHByb3Bv
cnRpb25hbCB0byB0aGUgcGFyZW50IGVsZW1lbnQgaW5zdGVhZAorICAgICAgICAgICAgICAgIC8v
IGFuZCB3ZSBjYW4ndCBtZWFzdXJlIHRoZSBwYXJlbnQgaW5zdGVhZCBiZWNhdXNlIGl0IG1pZ2h0
IHRyaWdnZXIgYSAic3RhY2tpbmcgZG9sbHMiIHByb2JsZW0KKyAgICAgICAgICAgICAgICBpZiAo
IHJudW1ub25weC50ZXN0KCByZXQgKSAmJiAhcnBvc2l0aW9uLnRlc3QoIG5hbWUgKSApIHsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhlIG9yaWdpbmFsIHZhbHVlcwor
ICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IHN0eWxlLmxlZnQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICByc0xlZnQgPSBlbGVtLnJ1bnRpbWVTdHlsZSAmJiBlbGVtLnJ1bnRpbWVTdHls
ZS5sZWZ0OworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBQdXQgaW4gdGhlIG5ldyB2YWx1
ZXMgdG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHJzTGVmdCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5ydW50
aW1lU3R5bGUubGVmdCA9IGVsZW0uY3VycmVudFN0eWxlLmxlZnQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5sZWZ0ID0gbmFtZSA9PT0g
ImZvbnRTaXplIiA/ICIxZW0iIDogcmV0OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0g
c3R5bGUucGl4ZWxMZWZ0ICsgInB4IjsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV2
ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVlcworICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUubGVm
dCA9IGxlZnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJzTGVmdCApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5ydW50aW1lU3R5bGUubGVmdCA9IHJzTGVm
dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcmV0ID09PSAiIiA/ICJhdXRvIiA6IHJldDsKKyAgICAgICAgfTsK
K30KKworZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCAp
IHsKKyAgICAgICAgdmFyIG1hdGNoZXMgPSBybnVtc3BsaXQuZXhlYyggdmFsdWUgKTsKKyAgICAg
ICAgcmV0dXJuIG1hdGNoZXMgPworICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoIDAs
IG1hdGNoZXNbIDEgXSAtICggc3VidHJhY3QgfHwgMCApICkgKyAoIG1hdGNoZXNbIDIgXSB8fCAi
cHgiICkgOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU7Cit9CisKK2Z1bmN0aW9uIGF1
Z21lbnRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSwgaXNCb3JkZXJCb3ggKSB7Cisg
ICAgICAgIHZhciBpID0gZXh0cmEgPT09ICggaXNCb3JkZXJCb3ggPyAiYm9yZGVyIiA6ICJjb250
ZW50IiApID8KKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJpZ2h0
IG1lYXN1cmVtZW50LCBhdm9pZCBhdWdtZW50YXRpb24KKyAgICAgICAgICAgICAgICA0IDoKKyAg
ICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgaW5pdGlhbGl6ZSBmb3IgaG9yaXpvbnRhbCBvciB2
ZXJ0aWNhbCBwcm9wZXJ0aWVzCisgICAgICAgICAgICAgICAgbmFtZSA9PT0gIndpZHRoIiA/IDEg
OiAwLAorCisgICAgICAgICAgICAgICAgdmFsID0gMDsKKworICAgICAgICBmb3IgKCA7IGkgPCA0
OyBpICs9IDIgKSB7CisgICAgICAgICAgICAgICAgLy8gYm90aCBib3ggbW9kZWxzIGV4Y2x1ZGUg
bWFyZ2luLCBzbyBhZGQgaXQgaWYgd2Ugd2FudCBpdAorICAgICAgICAgICAgICAgIGlmICggZXh0
cmEgPT09ICJtYXJnaW4iICkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgdXNlIGpR
dWVyeS5jc3MgaW5zdGVhZCBvZiBjdXJDU1MgaGVyZQorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gYmVjYXVzZSBvZiB0aGUgcmVsaWFibGVNYXJnaW5SaWdodCBDU1MgaG9vayEKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbCArPSBqUXVlcnkuY3NzKCBlbGVtLCBleHRyYSArIGNzc0V4cGFu
ZFsgaSBdLCB0cnVlICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8g
RnJvbSB0aGlzIHBvaW50IG9uIHdlIHVzZSBjdXJDU1MgZm9yIG1heGltdW0gcGVyZm9ybWFuY2Ug
KHJlbGV2YW50IGluIGFuaW1hdGlvbnMpCisgICAgICAgICAgICAgICAgaWYgKCBpc0JvcmRlckJv
eCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJvcmRlci1ib3ggaW5jbHVkZXMgcGFk
ZGluZywgc28gcmVtb3ZlIGl0IGlmIHdlIHdhbnQgY29udGVudAorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBleHRyYSA9PT0gImNvbnRlbnQiICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWwgLT0gcGFyc2VGbG9hdCggY3VyQ1NTKCBlbGVtLCAicGFkZGluZyIgKyBj
c3NFeHBhbmRbIGkgXSApICkgfHwgMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwgZXh0cmEgaXNuJ3QgYm9yZGVy
IG5vciBtYXJnaW4sIHNvIHJlbW92ZSBib3JkZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggZXh0cmEgIT09ICJtYXJnaW4iICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWwgLT0gcGFyc2VGbG9hdCggY3VyQ1NTKCBlbGVtLCAiYm9yZGVyIiArIGNzc0V4cGFuZFsg
aSBdICsgIldpZHRoIiApICkgfHwgMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXQgdGhpcyBw
b2ludCwgZXh0cmEgaXNuJ3QgY29udGVudCwgc28gYWRkIHBhZGRpbmcKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbCArPSBwYXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sICJwYWRkaW5nIiArIGNz
c0V4cGFuZFsgaSBdICkgKSB8fCAwOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdCB0
aGlzIHBvaW50LCBleHRyYSBpc24ndCBjb250ZW50IG5vciBwYWRkaW5nLCBzbyBhZGQgYm9yZGVy
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGV4dHJhICE9PSAicGFkZGluZyIgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCArPSBwYXJzZUZsb2F0KCBjdXJDU1Mo
IGVsZW0sICJib3JkZXIiICsgY3NzRXhwYW5kWyBpIF0gKyAiV2lkdGgiICkgKSB8fCAwOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiB2YWw7Cit9CisKK2Z1bmN0aW9uIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0s
IG5hbWUsIGV4dHJhICkgeworCisgICAgICAgIC8vIFN0YXJ0IHdpdGggb2Zmc2V0IHByb3BlcnR5
LCB3aGljaCBpcyBlcXVpdmFsZW50IHRvIHRoZSBib3JkZXItYm94IHZhbHVlCisgICAgICAgIHZh
ciB2YWwgPSBuYW1lID09PSAid2lkdGgiID8gZWxlbS5vZmZzZXRXaWR0aCA6IGVsZW0ub2Zmc2V0
SGVpZ2h0LAorICAgICAgICAgICAgICAgIHZhbHVlSXNCb3JkZXJCb3ggPSB0cnVlLAorICAgICAg
ICAgICAgICAgIGlzQm9yZGVyQm94ID0galF1ZXJ5LnN1cHBvcnQuYm94U2l6aW5nICYmIGpRdWVy
eS5jc3MoIGVsZW0sICJib3hTaXppbmciICkgPT09ICJib3JkZXItYm94IjsKKworICAgICAgICAv
LyBzb21lIG5vbi1odG1sIGVsZW1lbnRzIHJldHVybiB1bmRlZmluZWQgZm9yIG9mZnNldFdpZHRo
LCBzbyBjaGVjayBmb3IgbnVsbC91bmRlZmluZWQKKyAgICAgICAgLy8gc3ZnIC0gaHR0cHM6Ly9i
dWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ5Mjg1CisgICAgICAgIC8vIE1h
dGhNTCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MTY2
OAorICAgICAgICBpZiAoIHZhbCA8PSAwIHx8IHZhbCA9PSBudWxsICkgeworICAgICAgICAgICAg
ICAgIC8vIEZhbGwgYmFjayB0byBjb21wdXRlZCB0aGVuIHVuY29tcHV0ZWQgY3NzIGlmIG5lY2Vz
c2FyeQorICAgICAgICAgICAgICAgIHZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSApOworICAgICAg
ICAgICAgICAgIGlmICggdmFsIDwgMCB8fCB2YWwgPT0gbnVsbCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbCA9IGVsZW0uc3R5bGVbIG5hbWUgXTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAvLyBDb21wdXRlZCB1bml0IGlzIG5vdCBwaXhlbHMuIFN0b3AgaGVy
ZSBhbmQgcmV0dXJuLgorICAgICAgICAgICAgICAgIGlmICggcm51bW5vbnB4LnRlc3QodmFsKSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWw7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGUgY2hlY2sgZm9yIHN0eWxlIGluIGNh
c2UgYSBicm93c2VyIHdoaWNoIHJldHVybnMgdW5yZWxpYWJsZSB2YWx1ZXMKKyAgICAgICAgICAg
ICAgICAvLyBmb3IgZ2V0Q29tcHV0ZWRTdHlsZSBzaWxlbnRseSBmYWxscyBiYWNrIHRvIHRoZSBy
ZWxpYWJsZSBlbGVtLnN0eWxlCisgICAgICAgICAgICAgICAgdmFsdWVJc0JvcmRlckJveCA9IGlz
Qm9yZGVyQm94ICYmICggalF1ZXJ5LnN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUgfHwgdmFsID09
PSBlbGVtLnN0eWxlWyBuYW1lIF0gKTsKKworICAgICAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSAi
IiwgYXV0bywgYW5kIHByZXBhcmUgZm9yIGV4dHJhCisgICAgICAgICAgICAgICAgdmFsID0gcGFy
c2VGbG9hdCggdmFsICkgfHwgMDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHVzZSB0aGUgYWN0
aXZlIGJveC1zaXppbmcgbW9kZWwgdG8gYWRkL3N1YnRyYWN0IGlycmVsZXZhbnQgc3R5bGVzCisg
ICAgICAgIHJldHVybiAoIHZhbCArCisgICAgICAgICAgICAgICAgYXVnbWVudFdpZHRoT3JIZWln
aHQoCisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLAorICAgICAgICAgICAgICAgICAgICAg
ICAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhIHx8ICggaXNCb3JkZXJCb3gg
PyAiYm9yZGVyIiA6ICJjb250ZW50IiApLAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVJ
c0JvcmRlckJveAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgKSArICJweCI7Cit9CisKKwor
Ly8gVHJ5IHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCBkaXNwbGF5IHZhbHVlIG9mIGFuIGVsZW1l
bnQKK2Z1bmN0aW9uIGNzc19kZWZhdWx0RGlzcGxheSggbm9kZU5hbWUgKSB7CisgICAgICAgIGlm
ICggZWxlbWRpc3BsYXlbIG5vZGVOYW1lIF0gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVs
ZW1kaXNwbGF5WyBub2RlTmFtZSBdOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGVsZW0gPSBq
UXVlcnkoICI8IiArIG5vZGVOYW1lICsgIj4iICkuYXBwZW5kVG8oIGRvY3VtZW50LmJvZHkgKSwK
KyAgICAgICAgICAgICAgICBkaXNwbGF5ID0gZWxlbS5jc3MoImRpc3BsYXkiKTsKKyAgICAgICAg
ZWxlbS5yZW1vdmUoKTsKKworICAgICAgICAvLyBJZiB0aGUgc2ltcGxlIHdheSBmYWlscywKKyAg
ICAgICAgLy8gZ2V0IGVsZW1lbnQncyByZWFsIGRlZmF1bHQgZGlzcGxheSBieSBhdHRhY2hpbmcg
aXQgdG8gYSB0ZW1wIGlmcmFtZQorICAgICAgICBpZiAoIGRpc3BsYXkgPT09ICJub25lIiB8fCBk
aXNwbGF5ID09PSAiIiApIHsKKyAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIGFscmVhZHktY3Jl
YXRlZCBpZnJhbWUgaWYgcG9zc2libGUKKyAgICAgICAgICAgICAgICBpZnJhbWUgPSBkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKAorICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lIHx8IGpR
dWVyeS5leHRlbmQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpLCB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lQm9yZGVyOiAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aWR0aDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGVpZ2h0OiAwCisgICAgICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAg
ICk7CisKKyAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBjYWNoZWFibGUgY29weSBvZiB0aGUg
aWZyYW1lIGRvY3VtZW50IG9uIGZpcnN0IGNhbGwuCisgICAgICAgICAgICAgICAgLy8gSUUgYW5k
IE9wZXJhIHdpbGwgYWxsb3cgdXMgdG8gcmV1c2UgdGhlIGlmcmFtZURvYyB3aXRob3V0IHJlLXdy
aXRpbmcgdGhlIGZha2UgSFRNTAorICAgICAgICAgICAgICAgIC8vIGRvY3VtZW50IHRvIGl0OyBX
ZWJLaXQgJiBGaXJlZm94IHdvbid0IGFsbG93IHJldXNpbmcgdGhlIGlmcmFtZSBkb2N1bWVudC4K
KyAgICAgICAgICAgICAgICBpZiAoICFpZnJhbWVEb2MgfHwgIWlmcmFtZS5jcmVhdGVFbGVtZW50
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lRG9jID0gKCBpZnJhbWUuY29udGVu
dFdpbmRvdyB8fCBpZnJhbWUuY29udGVudERvY3VtZW50ICkuZG9jdW1lbnQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZnJhbWVEb2Mud3JpdGUoIjwhZG9jdHlwZSBodG1sPjxodG1sPjxib2R5
PiIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lRG9jLmNsb3NlKCk7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZWxlbSA9IGlmcmFtZURvYy5ib2R5LmFwcGVu
ZENoaWxkKCBpZnJhbWVEb2MuY3JlYXRlRWxlbWVudChub2RlTmFtZSkgKTsKKworICAgICAgICAg
ICAgICAgIGRpc3BsYXkgPSBjdXJDU1MoIGVsZW0sICJkaXNwbGF5IiApOworICAgICAgICAgICAg
ICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoIGlmcmFtZSApOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gU3RvcmUgdGhlIGNvcnJlY3QgZGVmYXVsdCBkaXNwbGF5CisgICAgICAgIGVsZW1k
aXNwbGF5WyBub2RlTmFtZSBdID0gZGlzcGxheTsKKworICAgICAgICByZXR1cm4gZGlzcGxheTsK
K30KKworalF1ZXJ5LmVhY2goWyAiaGVpZ2h0IiwgIndpZHRoIiBdLCBmdW5jdGlvbiggaSwgbmFt
ZSApIHsKKyAgICAgICAgalF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gPSB7CisgICAgICAgICAgICAg
ICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQsIGV4dHJhICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBjb21wdXRlZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gY2VydGFpbiBlbGVtZW50cyBjYW4gaGF2ZSBkaW1lbnNpb24gaW5mbyBpZiB3ZSBp
bnZpc2libHkgc2hvdyB0aGVtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhv
d2V2ZXIsIGl0IG11c3QgaGF2ZSBhIGN1cnJlbnQgZGlzcGxheSBzdHlsZSB0aGF0IHdvdWxkIGJl
bmVmaXQgZnJvbSB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxl
bS5vZmZzZXRXaWR0aCA9PT0gMCAmJiByZGlzcGxheXN3YXAudGVzdCggY3VyQ1NTKCBlbGVtLCAi
ZGlzcGxheSIgKSApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBqUXVlcnkuc3dhcCggZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0V2lkdGhP
ckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0V2lk
dGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0s
CisKKyAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0s
IHZhbHVlLCBleHRyYSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1Z21lbnRX
aWR0aE9ySGVpZ2h0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
ZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuc3VwcG9ydC5ib3hTaXppbmcgJiYgalF1
ZXJ5LmNzcyggZWxlbSwgImJveFNpemluZyIgKSA9PT0gImJvcmRlci1ib3giCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICkgOiAwCisgICAgICAgICAgICAgICAgICAgICAgICApOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfTsKK30pOworCitpZiAoICFqUXVlcnkuc3VwcG9y
dC5vcGFjaXR5ICkgeworICAgICAgICBqUXVlcnkuY3NzSG9va3Mub3BhY2l0eSA9IHsKKyAgICAg
ICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIElFIHVzZXMgZmlsdGVycyBmb3Igb3BhY2l0eQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJvcGFjaXR5LnRlc3QoIChjb21wdXRlZCAmJiBlbGVtLmN1cnJl
bnRTdHlsZSA/IGVsZW0uY3VycmVudFN0eWxlLmZpbHRlciA6IGVsZW0uc3R5bGUuZmlsdGVyKSB8
fCAiIiApID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAwLjAxICogcGFyc2VG
bG9hdCggUmVnRXhwLiQxICkgKSArICIiIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29tcHV0ZWQgPyAiMSIgOiAiIjsKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAg
ICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgc3R5bGUgPSBlbGVtLnN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50U3R5bGUgPSBlbGVtLmN1cnJlbnRTdHlsZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3BhY2l0eSA9IGpRdWVyeS5pc051bWVyaWMoIHZhbHVlICkgPyAiYWxw
aGEob3BhY2l0eT0iICsgdmFsdWUgKiAxMDAgKyAiKSIgOiAiIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmlsdGVyID0gY3VycmVudFN0eWxlICYmIGN1cnJlbnRTdHlsZS5maWx0
ZXIgfHwgc3R5bGUuZmlsdGVyIHx8ICIiOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
RSBoYXMgdHJvdWJsZSB3aXRoIG9wYWNpdHkgaWYgaXQgZG9lcyBub3QgaGF2ZSBsYXlvdXQKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIGl0IGJ5IHNldHRpbmcgdGhlIHpvb20gbGV2
ZWwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLnpvb20gPSAxOworCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBpZiBzZXR0aW5nIG9wYWNpdHkgdG8gMSwgYW5kIG5vIG90aGVyIGZp
bHRlcnMgZXhpc3QgLSBhdHRlbXB0IHRvIHJlbW92ZSBmaWx0ZXIgYXR0cmlidXRlICM2NjUyCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlID49IDEgJiYgalF1ZXJ5LnRyaW0oIGZp
bHRlci5yZXBsYWNlKCByYWxwaGEsICIiICkgKSA9PT0gIiIgJiYKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3R5bGUucmVtb3ZlQXR0cmlidXRlICkgeworCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFNldHRpbmcgc3R5bGUuZmlsdGVyIHRvIG51bGwsICIiICYg
IiAiIHN0aWxsIGxlYXZlICJmaWx0ZXI6IiBpbiB0aGUgY3NzVGV4dAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBpZiAiZmlsdGVyOiIgaXMgcHJlc2VudCBhdCBhbGwsIGNsZWFy
VHlwZSBpcyBkaXNhYmxlZCwgd2Ugd2FudCB0byBhdm9pZCB0aGlzCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSBpcyBJRSBPbmx5LCBidXQg
c28gYXBwYXJlbnRseSBpcyB0aGlzIGNvZGUgcGF0aC4uLgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUoICJmaWx0ZXIiICk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgdGhlcmUgaXMgbm8gZmlsdGVyIHN0
eWxlIGFwcGxpZWQgaW4gYSBjc3MgcnVsZSwgd2UgYXJlIGRvbmUKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBjdXJyZW50U3R5bGUgJiYgIWN1cnJlbnRTdHlsZS5maWx0ZXIg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSwgc2V0IG5ldyBmaWx0ZXIg
dmFsdWVzCisgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5maWx0ZXIgPSByYWxwaGEudGVz
dCggZmlsdGVyICkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIucmVw
bGFjZSggcmFscGhhLCBvcGFjaXR5ICkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaWx0ZXIgKyAiICIgKyBvcGFjaXR5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfTsK
K30KKworLy8gVGhlc2UgaG9va3MgY2Fubm90IGJlIGFkZGVkIHVudGlsIERPTSByZWFkeSBiZWNh
dXNlIHRoZSBzdXBwb3J0IHRlc3QKKy8vIGZvciBpdCBpcyBub3QgcnVuIHVudGlsIGFmdGVyIERP
TSByZWFkeQoralF1ZXJ5KGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoICFqUXVlcnkuc3VwcG9y
dC5yZWxpYWJsZU1hcmdpblJpZ2h0ICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5jc3NIb29r
cy5tYXJnaW5SaWdodCA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24o
IGVsZW0sIGNvbXB1dGVkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBX
ZWJLaXQgQnVnIDEzMzQzIC0gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHdyb25nIHZhbHVlIGZv
ciBtYXJnaW4tcmlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV29yayBh
cm91bmQgYnkgdGVtcG9yYXJpbHkgc2V0dGluZyBlbGVtZW50IGRpc3BsYXkgdG8gaW5saW5lLWJs
b2NrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuc3dhcCgg
ZWxlbSwgeyAiZGlzcGxheSI6ICJpbmxpbmUtYmxvY2siIH0sIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29tcHV0ZWQgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VyQ1NT
KCBlbGVtLCAibWFyZ2luUmlnaHQiICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAg
ICAgLy8gV2Via2l0IGJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI5MDg0CisgICAgICAgIC8vIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyBwZXJjZW50IHdoZW4g
c3BlY2lmaWVkIGZvciB0b3AvbGVmdC9ib3R0b20vcmlnaHQKKyAgICAgICAgLy8gcmF0aGVyIHRo
YW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIHdlIGp1
c3QgY2hlY2sgZm9yIGl0IGhlcmUKKyAgICAgICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQucGl4ZWxQ
b3NpdGlvbiAmJiBqUXVlcnkuZm4ucG9zaXRpb24gKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5
LmVhY2goIFsgInRvcCIsICJsZWZ0IiBdLCBmdW5jdGlvbiggaSwgcHJvcCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5jc3NIb29rc1sgcHJvcCBdID0geworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbXB1dGVkICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9
IGN1ckNTUyggZWxlbSwgcHJvcCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaWYgY3VyQ1NTIHJldHVybnMgcGVyY2VudGFnZSwgZmFsbGJhY2sg
dG8gb2Zmc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcm51bW5vbnB4LnRlc3QoIHJldCApID8galF1ZXJ5KCBlbGVtICkucG9zaXRpb24o
KVsgcHJvcCBdICsgInB4IiA6IHJldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworfSk7CisK
K2lmICggalF1ZXJ5LmV4cHIgJiYgalF1ZXJ5LmV4cHIuZmlsdGVycyApIHsKKyAgICAgICAgalF1
ZXJ5LmV4cHIuZmlsdGVycy5oaWRkZW4gPSBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gKCBlbGVtLm9mZnNldFdpZHRoID09PSAwICYmIGVsZW0ub2Zmc2V0SGVpZ2h0
ID09PSAwICkgfHwgKCFqUXVlcnkuc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHMgJiYgKChl
bGVtLnN0eWxlICYmIGVsZW0uc3R5bGUuZGlzcGxheSkgfHwgY3VyQ1NTKCBlbGVtLCAiZGlzcGxh
eSIgKSkgPT09ICJub25lIik7CisgICAgICAgIH07CisKKyAgICAgICAgalF1ZXJ5LmV4cHIuZmls
dGVycy52aXNpYmxlID0gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICFqUXVlcnkuZXhwci5maWx0ZXJzLmhpZGRlbiggZWxlbSApOworICAgICAgICB9OworfQorCisv
LyBUaGVzZSBob29rcyBhcmUgdXNlZCBieSBhbmltYXRlIHRvIGV4cGFuZCBwcm9wZXJ0aWVzCitq
UXVlcnkuZWFjaCh7CisgICAgICAgIG1hcmdpbjogIiIsCisgICAgICAgIHBhZGRpbmc6ICIiLAor
ICAgICAgICBib3JkZXI6ICJXaWR0aCIKK30sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHsK
KyAgICAgICAgalF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHsKKyAgICAgICAg
ICAgICAgICBleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBpLAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc3VtZXMg
YSBzaW5nbGUgbnVtYmVyIGlmIG5vdCBhIHN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJ0cyA9IHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgPyB2YWx1ZS5zcGxpdCgi
ICIpIDogWyB2YWx1ZSBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRl
ZCA9IHt9OworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IDQ7IGkr
KyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWRbIHByZWZpeCAr
IGNzc0V4cGFuZFsgaSBdICsgc3VmZml4IF0gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcnRzWyBpIF0gfHwgcGFydHNbIGkgLSAyIF0gfHwgcGFydHNbIDAgXTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGV4cGFuZGVkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBp
ZiAoICFybWFyZ2luLnRlc3QoIHByZWZpeCApICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5j
c3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7CisgICAg
ICAgIH0KK30pOwordmFyIHIyMCA9IC8lMjAvZywKKyAgICAgICAgcmJyYWNrZXQgPSAvXFtcXSQv
LAorICAgICAgICByQ1JMRiA9IC9ccj9cbi9nLAorICAgICAgICByaW5wdXQgPSAvXig/OmNvbG9y
fGRhdGV8ZGF0ZXRpbWV8ZGF0ZXRpbWUtbG9jYWx8ZW1haWx8aGlkZGVufG1vbnRofG51bWJlcnxw
YXNzd29yZHxyYW5nZXxzZWFyY2h8dGVsfHRleHR8dGltZXx1cmx8d2VlaykkL2ksCisgICAgICAg
IHJzZWxlY3RUZXh0YXJlYSA9IC9eKD86c2VsZWN0fHRleHRhcmVhKS9pOworCitqUXVlcnkuZm4u
ZXh0ZW5kKHsKKyAgICAgICAgc2VyaWFsaXplOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4galF1ZXJ5LnBhcmFtKCB0aGlzLnNlcmlhbGl6ZUFycmF5KCkgKTsKKyAgICAgICAg
fSwKKyAgICAgICAgc2VyaWFsaXplQXJyYXk6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLm1hcChmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCB0aGlzLmVsZW1lbnRzICkgOiB0
aGlzOworICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlv
bigpeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmFtZSAmJiAhdGhpcy5k
aXNhYmxlZCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHRoaXMuY2hlY2tl
ZCB8fCByc2VsZWN0VGV4dGFyZWEudGVzdCggdGhpcy5ub2RlTmFtZSApIHx8CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlucHV0LnRlc3QoIHRoaXMudHlwZSApICk7
CisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uKCBpLCBl
bGVtICl7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0galF1ZXJ5KCB0aGlzICku
dmFsKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWwgPT0gbnVsbCA/Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuaXNBcnJheSggdmFsICkgPworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbCwgaSAp
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCAiXHJcbiIgKSB9
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pIDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6
IHZhbC5yZXBsYWNlKCByQ1JMRiwgIlxyXG4iICkgfTsKKyAgICAgICAgICAgICAgICB9KS5nZXQo
KTsKKyAgICAgICAgfQorfSk7CisKKy8vU2VyaWFsaXplIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVu
dHMgb3IgYSBzZXQgb2YKKy8va2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3RyaW5nCitqUXVlcnku
cGFyYW0gPSBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7CisgICAgICAgIHZhciBwcmVmaXgs
CisgICAgICAgICAgICAgICAgcyA9IFtdLAorICAgICAgICAgICAgICAgIGFkZCA9IGZ1bmN0aW9u
KCBrZXksIHZhbHVlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdmFsdWUgaXMg
YSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCByZXR1cm4gaXRzIHZhbHVlCisgICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZSA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApID8gdmFsdWUoKSA6
ICggdmFsdWUgPT0gbnVsbCA/ICIiIDogdmFsdWUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNbIHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgIj0iICsgZW5jb2Rl
VVJJQ29tcG9uZW50KCB2YWx1ZSApOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgLy8g
U2V0IHRyYWRpdGlvbmFsIHRvIHRydWUgZm9yIGpRdWVyeSA8PSAxLjMuMiBiZWhhdmlvci4KKyAg
ICAgICAgaWYgKCB0cmFkaXRpb25hbCA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAg
IHRyYWRpdGlvbmFsID0galF1ZXJ5LmFqYXhTZXR0aW5ncyAmJiBqUXVlcnkuYWpheFNldHRpbmdz
LnRyYWRpdGlvbmFsOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgYW4gYXJyYXkgd2FzIHBh
c3NlZCBpbiwgYXNzdW1lIHRoYXQgaXQgaXMgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cy4KKyAg
ICAgICAgaWYgKCBqUXVlcnkuaXNBcnJheSggYSApIHx8ICggYS5qcXVlcnkgJiYgIWpRdWVyeS5p
c1BsYWluT2JqZWN0KCBhICkgKSApIHsKKyAgICAgICAgICAgICAgICAvLyBTZXJpYWxpemUgdGhl
IGZvcm0gZWxlbWVudHMKKyAgICAgICAgICAgICAgICBqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGQoIHRoaXMubmFtZSwgdGhpcy52YWx1ZSAp
OworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgLy8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgIm9sZCIgd2F5ICh0aGUgd2F5IDEuMy4y
IG9yIG9sZGVyCisgICAgICAgICAgICAgICAgLy8gZGlkIGl0KSwgb3RoZXJ3aXNlIGVuY29kZSBw
YXJhbXMgcmVjdXJzaXZlbHkuCisgICAgICAgICAgICAgICAgZm9yICggcHJlZml4IGluIGEgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZFBhcmFtcyggcHJlZml4LCBhWyBwcmVmaXgg
XSwgdHJhZGl0aW9uYWwsIGFkZCApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0aW5nIHNlcmlhbGl6YXRpb24KKyAgICAgICAgcmV0
dXJuIHMuam9pbiggIiYiICkucmVwbGFjZSggcjIwLCAiKyIgKTsKK307CisKK2Z1bmN0aW9uIGJ1
aWxkUGFyYW1zKCBwcmVmaXgsIG9iaiwgdHJhZGl0aW9uYWwsIGFkZCApIHsKKyAgICAgICAgdmFy
IG5hbWU7CisKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNBcnJheSggb2JqICkgKSB7CisgICAgICAg
ICAgICAgICAgLy8gU2VyaWFsaXplIGFycmF5IGl0ZW0uCisgICAgICAgICAgICAgICAgalF1ZXJ5
LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmVhdCBlYWNoIGFycmF5IGl0ZW0gYXMgYSBzY2Fs
YXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZCggcHJlZml4LCB2ICk7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIElmIGFycmF5IGl0ZW0gaXMgbm9uLXNjYWxhciAoYXJyYXkgb3Igb2JqZWN0
KSwgZW5jb2RlIGl0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBudW1lcmlj
IGluZGV4IHRvIHJlc29sdmUgZGVzZXJpYWxpemF0aW9uIGFtYmlndWl0eSBpc3N1ZXMuCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCByYWNrIChhcyBvZiAxLjAu
MCkgY2FuJ3QgY3VycmVudGx5IGRlc2VyaWFsaXplCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIG5lc3RlZCBhcnJheXMgcHJvcGVybHksIGFuZCBhdHRlbXB0aW5nIHRvIGRvIHNv
IG1heSBjYXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhIHNlcnZlciBl
cnJvci4gUG9zc2libGUgZml4ZXMgYXJlIHRvIG1vZGlmeSByYWNrJ3MKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gZGVzZXJpYWxpemF0aW9uIGFsZ29yaXRobSBvciB0byBwcm92
aWRlIGFuIG9wdGlvbiBvciBmbGFnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHRvIGZvcmNlIGFycmF5IHNlcmlhbGl6YXRpb24gdG8gYmUgc2hhbGxvdy4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnVpbGRQYXJhbXMoIHByZWZpeCArICJbIiArICggdHlwZW9m
IHYgPT09ICJvYmplY3QiID8gaSA6ICIiICkgKyAiXSIsIHYsIHRyYWRpdGlvbmFsLCBhZGQgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAg
ICB9IGVsc2UgaWYgKCAhdHJhZGl0aW9uYWwgJiYgalF1ZXJ5LnR5cGUoIG9iaiApID09PSAib2Jq
ZWN0IiApIHsKKyAgICAgICAgICAgICAgICAvLyBTZXJpYWxpemUgb2JqZWN0IGl0ZW0uCisgICAg
ICAgICAgICAgICAgZm9yICggbmFtZSBpbiBvYmogKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBidWlsZFBhcmFtcyggcHJlZml4ICsgIlsiICsgbmFtZSArICJdIiwgb2JqWyBuYW1lIF0sIHRy
YWRpdGlvbmFsLCBhZGQgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAvLyBTZXJpYWxpemUgc2NhbGFyIGl0ZW0uCisgICAgICAgICAgICAg
ICAgYWRkKCBwcmVmaXgsIG9iaiApOworICAgICAgICB9Cit9Cit2YXIKKyAgICAgICAgLy8gRG9j
dW1lbnQgbG9jYXRpb24KKyAgICAgICAgYWpheExvY1BhcnRzLAorICAgICAgICBhamF4TG9jYXRp
b24sCisKKyAgICAgICAgcmhhc2ggPSAvIy4qJC8sCisgICAgICAgIHJoZWFkZXJzID0gL14oLio/
KTpbIFx0XSooW15cclxuXSopXHI/JC9tZywgLy8gSUUgbGVhdmVzIGFuIFxyIGNoYXJhY3RlciBh
dCBFT0wKKyAgICAgICAgLy8gIzc2NTMsICM4MTI1LCAjODE1MjogbG9jYWwgcHJvdG9jb2wgZGV0
ZWN0aW9uCisgICAgICAgIHJsb2NhbFByb3RvY29sID0gL14oPzphYm91dHxhcHB8YXBwXC1zdG9y
YWdlfC4rXC1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLywKKyAgICAgICAgcm5vQ29udGVu
dCA9IC9eKD86R0VUfEhFQUQpJC8sCisgICAgICAgIHJwcm90b2NvbCA9IC9eXC9cLy8sCisgICAg
ICAgIHJxdWVyeSA9IC9cPy8sCisgICAgICAgIHJzY3JpcHQgPSAvPHNjcmlwdFxiW148XSooPzoo
PyE8XC9zY3JpcHQ+KTxbXjxdKikqPFwvc2NyaXB0Pi9naSwKKyAgICAgICAgcnRzID0gLyhbPyZd
KV89W14mXSovLAorICAgICAgICBydXJsID0gL14oW1x3XCtcLlwtXSs6KSg/OlwvXC8oW15cLz8j
Ol0qKSg/OjooXGQrKXwpfCkvLAorCisgICAgICAgIC8vIEtlZXAgYSBjb3B5IG9mIHRoZSBvbGQg
bG9hZCBtZXRob2QKKyAgICAgICAgX2xvYWQgPSBqUXVlcnkuZm4ubG9hZCwKKworICAgICAgICAv
KiBQcmVmaWx0ZXJzCisgICAgICAgICAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0byBpbnRyb2R1Y2Ug
Y3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4YW1wbGUpCisgICAg
ICAgICAqIDIpIFRoZXNlIGFyZSBjYWxsZWQ6CisgICAgICAgICAqICAgIC0gQkVGT1JFIGFza2lu
ZyBmb3IgYSB0cmFuc3BvcnQKKyAgICAgICAgICogICAgLSBBRlRFUiBwYXJhbSBzZXJpYWxpemF0
aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKQorICAgICAg
ICAgKiAzKSBrZXkgaXMgdGhlIGRhdGFUeXBlCisgICAgICAgICAqIDQpIHRoZSBjYXRjaGFsbCBz
eW1ib2wgIioiIGNhbiBiZSB1c2VkCisgICAgICAgICAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0
IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gIioiIGlm
IG5lZWRlZAorICAgICAgICAgKi8KKyAgICAgICAgcHJlZmlsdGVycyA9IHt9LAorCisgICAgICAg
IC8qIFRyYW5zcG9ydHMgYmluZGluZ3MKKyAgICAgICAgICogMSkga2V5IGlzIHRoZSBkYXRhVHlw
ZQorICAgICAgICAgKiAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sICIqIiBjYW4gYmUgdXNlZAorICAg
ICAgICAgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBh
bmQgVEhFTiBnbyB0byAiKiIgaWYgbmVlZGVkCisgICAgICAgICAqLworICAgICAgICB0cmFuc3Bv
cnRzID0ge30sCisKKyAgICAgICAgLy8gQXZvaWQgY29tbWVudC1wcm9sb2cgY2hhciBzZXF1ZW5j
ZSAoIzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXByZXNzaW9uCisgICAg
ICAgIGFsbFR5cGVzID0gWyIqLyJdICsgWyIqIl07CisKKy8vICM4MTM4LCBJRSBtYXkgdGhyb3cg
YW4gZXhjZXB0aW9uIHdoZW4gYWNjZXNzaW5nCisvLyBhIGZpZWxkIGZyb20gd2luZG93LmxvY2F0
aW9uIGlmIGRvY3VtZW50LmRvbWFpbiBoYXMgYmVlbiBzZXQKK3RyeSB7CisgICAgICAgIGFqYXhM
b2NhdGlvbiA9IGxvY2F0aW9uLmhyZWY7Cit9IGNhdGNoKCBlICkgeworICAgICAgICAvLyBVc2Ug
dGhlIGhyZWYgYXR0cmlidXRlIG9mIGFuIEEgZWxlbWVudAorICAgICAgICAvLyBzaW5jZSBJRSB3
aWxsIG1vZGlmeSBpdCBnaXZlbiBkb2N1bWVudC5sb2NhdGlvbgorICAgICAgICBhamF4TG9jYXRp
b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiYSIgKTsKKyAgICAgICAgYWpheExvY2F0aW9u
LmhyZWYgPSAiIjsKKyAgICAgICAgYWpheExvY2F0aW9uID0gYWpheExvY2F0aW9uLmhyZWY7Cit9
CisKKy8vIFNlZ21lbnQgbG9jYXRpb24gaW50byBwYXJ0cworYWpheExvY1BhcnRzID0gcnVybC5l
eGVjKCBhamF4TG9jYXRpb24udG9Mb3dlckNhc2UoKSApIHx8IFtdOworCisvLyBCYXNlICJjb25z
dHJ1Y3RvciIgZm9yIGpRdWVyeS5hamF4UHJlZmlsdGVyIGFuZCBqUXVlcnkuYWpheFRyYW5zcG9y
dAorZnVuY3Rpb24gYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUgKSB7CisK
KyAgICAgICAgLy8gZGF0YVR5cGVFeHByZXNzaW9uIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0
byAiKiIKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMg
KSB7CisKKyAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09
ICJzdHJpbmciICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZnVuYyA9IGRhdGFUeXBlRXhw
cmVzc2lvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlRXhwcmVzc2lvbiA9ICIq
IjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXIgZGF0YVR5cGUsIGxp
c3QsIHBsYWNlQmVmb3JlLAorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGVzID0gZGF0
YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJDYXNlKCkuc3BsaXQoIGNvcmVfcnNwYWNlICksCisgICAg
ICAgICAgICAgICAgICAgICAgICBpID0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0
aCA9IGRhdGFUeXBlcy5sZW5ndGg7CisKKyAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1
bmN0aW9uKCBmdW5jICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3IgZWFjaCBk
YXRhVHlwZSBpbiB0aGUgZGF0YVR5cGVFeHByZXNzaW9uCisgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YVR5cGUgPSBkYXRhVHlwZXNbIGkgXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gV2UgY29udHJvbCBpZiB3ZSdyZSBhc2tlZCB0byBhZGQgYmVmb3JlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFueSBleGlzdGluZyBlbGVtZW50CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlQmVmb3JlID0gL15cKy8udGVzdCggZGF0
YVR5cGUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwbGFjZUJlZm9y
ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZSA9
IGRhdGFUeXBlLnN1YnN0ciggMSApIHx8ICIqIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gc3RydWN0dXJl
WyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIHdlIGFkZCB0byB0aGUgc3RydWN0dXJlIGFjY29y
ZGluZ2x5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RbIHBsYWNlQmVmb3Jl
ID8gInVuc2hpZnQiIDogInB1c2giIF0oIGZ1bmMgKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH07Cit9CisKKy8vIEJhc2UgaW5zcGVjdGlv
biBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0cworZnVuY3Rpb24gaW5zcGVj
dFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRp
b25zLCBqcVhIUiwKKyAgICAgICAgICAgICAgICBkYXRhVHlwZSAvKiBpbnRlcm5hbCAqLywgaW5z
cGVjdGVkIC8qIGludGVybmFsICovICkgeworCisgICAgICAgIGRhdGFUeXBlID0gZGF0YVR5cGUg
fHwgb3B0aW9ucy5kYXRhVHlwZXNbIDAgXTsKKyAgICAgICAgaW5zcGVjdGVkID0gaW5zcGVjdGVk
IHx8IHt9OworCisgICAgICAgIGluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7CisKKyAgICAg
ICAgdmFyIHNlbGVjdGlvbiwKKyAgICAgICAgICAgICAgICBsaXN0ID0gc3RydWN0dXJlWyBkYXRh
VHlwZSBdLAorICAgICAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgICAgIGxlbmd0aCA9
IGxpc3QgPyBsaXN0Lmxlbmd0aCA6IDAsCisgICAgICAgICAgICAgICAgZXhlY3V0ZU9ubHkgPSAo
IHN0cnVjdHVyZSA9PT0gcHJlZmlsdGVycyApOworCisgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0
aCAmJiAoIGV4ZWN1dGVPbmx5IHx8ICFzZWxlY3Rpb24gKTsgaSsrICkgeworICAgICAgICAgICAg
ICAgIHNlbGVjdGlvbiA9IGxpc3RbIGkgXSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhI
UiApOworICAgICAgICAgICAgICAgIC8vIElmIHdlIGdvdCByZWRpcmVjdGVkIHRvIGFub3RoZXIg
ZGF0YVR5cGUKKyAgICAgICAgICAgICAgICAvLyB3ZSB0cnkgdGhlcmUgaWYgZXhlY3V0aW5nIG9u
bHkgYW5kIG5vdCBkb25lIGFscmVhZHkKKyAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBzZWxl
Y3Rpb24gPT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhZXhl
Y3V0ZU9ubHkgfHwgaW5zcGVjdGVkWyBzZWxlY3Rpb24gXSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZWN0aW9uID0gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5k
YXRhVHlwZXMudW5zaGlmdCggc2VsZWN0aW9uICk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGVjdGlvbiA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvcHRp
b25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSLCBzZWxlY3Rpb24sIGluc3BlY3RlZCApOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAvLyBJZiB3ZSdyZSBvbmx5IGV4ZWN1dGluZyBvciBub3RoaW5nIHdhcyBzZWxlY3RlZAor
ICAgICAgICAvLyB3ZSB0cnkgdGhlIGNhdGNoYWxsIGRhdGFUeXBlIGlmIG5vdCBkb25lIGFscmVh
ZHkKKyAgICAgICAgaWYgKCAoIGV4ZWN1dGVPbmx5IHx8ICFzZWxlY3Rpb24gKSAmJiAhaW5zcGVj
dGVkWyAiKiIgXSApIHsKKyAgICAgICAgICAgICAgICBzZWxlY3Rpb24gPSBpbnNwZWN0UHJlZmls
dGVyc09yVHJhbnNwb3J0cygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0
dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSLCAiKiIsIGluc3BlY3RlZCApOwor
ICAgICAgICB9CisgICAgICAgIC8vIHVubmVjZXNzYXJ5IHdoZW4gb25seSBleGVjdXRpbmcgKHBy
ZWZpbHRlcnMpCisgICAgICAgIC8vIGJ1dCBpdCdsbCBiZSBpZ25vcmVkIGJ5IHRoZSBjYWxsZXIg
aW4gdGhhdCBjYXNlCisgICAgICAgIHJldHVybiBzZWxlY3Rpb247Cit9CisKKy8vIEEgc3BlY2lh
bCBleHRlbmQgZm9yIGFqYXggb3B0aW9ucworLy8gdGhhdCB0YWtlcyAiZmxhdCIgb3B0aW9ucyAo
bm90IHRvIGJlIGRlZXAgZXh0ZW5kZWQpCisvLyBGaXhlcyAjOTg4NworZnVuY3Rpb24gYWpheEV4
dGVuZCggdGFyZ2V0LCBzcmMgKSB7CisgICAgICAgIHZhciBrZXksIGRlZXAsCisgICAgICAgICAg
ICAgICAgZmxhdE9wdGlvbnMgPSBqUXVlcnkuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zIHx8IHt9
OworICAgICAgICBmb3IgKCBrZXkgaW4gc3JjICkgeworICAgICAgICAgICAgICAgIGlmICggc3Jj
WyBrZXkgXSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgKCBmbGF0
T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwgKCBkZWVwID0ge30gKSApIClbIGtl
eSBdID0gc3JjWyBrZXkgXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCBkZWVwICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5leHRlbmQoIHRydWUsIHRhcmdl
dCwgZGVlcCApOworICAgICAgICB9Cit9CisKK2pRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVy
bCwgcGFyYW1zLCBjYWxsYmFjayApIHsKKyAgICAgICAgaWYgKCB0eXBlb2YgdXJsICE9PSAic3Ry
aW5nIiAmJiBfbG9hZCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX2xvYWQuYXBwbHkoIHRo
aXMsIGFyZ3VtZW50cyApOworICAgICAgICB9CisKKyAgICAgICAgLy8gRG9uJ3QgZG8gYSByZXF1
ZXN0IGlmIG5vIGVsZW1lbnRzIGFyZSBiZWluZyByZXF1ZXN0ZWQKKyAgICAgICAgaWYgKCAhdGhp
cy5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKwor
ICAgICAgICB2YXIgc2VsZWN0b3IsIHR5cGUsIHJlc3BvbnNlLAorICAgICAgICAgICAgICAgIHNl
bGYgPSB0aGlzLAorICAgICAgICAgICAgICAgIG9mZiA9IHVybC5pbmRleE9mKCIgIik7CisKKyAg
ICAgICAgaWYgKCBvZmYgPj0gMCApIHsKKyAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHVybC5z
bGljZSggb2ZmLCB1cmwubGVuZ3RoICk7CisgICAgICAgICAgICAgICAgdXJsID0gdXJsLnNsaWNl
KCAwLCBvZmYgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIGl0J3MgYSBmdW5jdGlvbgor
ICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHsKKworICAgICAgICAg
ICAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNrCisgICAgICAgICAgICAg
ICAgY2FsbGJhY2sgPSBwYXJhbXM7CisgICAgICAgICAgICAgICAgcGFyYW1zID0gdW5kZWZpbmVk
OworCisgICAgICAgIC8vIE90aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmcKKyAgICAgICAg
fSBlbHNlIGlmICggcGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09ICJvYmplY3QiICkgeworICAg
ICAgICAgICAgICAgIHR5cGUgPSAiUE9TVCI7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZXF1
ZXN0IHRoZSByZW1vdGUgZG9jdW1lbnQKKyAgICAgICAgalF1ZXJ5LmFqYXgoeworICAgICAgICAg
ICAgICAgIHVybDogdXJsLAorCisgICAgICAgICAgICAgICAgLy8gaWYgInR5cGUiIHZhcmlhYmxl
IGlzIHVuZGVmaW5lZCwgdGhlbiAiR0VUIiBtZXRob2Qgd2lsbCBiZSB1c2VkCisgICAgICAgICAg
ICAgICAgdHlwZTogdHlwZSwKKyAgICAgICAgICAgICAgICBkYXRhVHlwZTogImh0bWwiLAorICAg
ICAgICAgICAgICAgIGRhdGE6IHBhcmFtcywKKyAgICAgICAgICAgICAgICBjb21wbGV0ZTogZnVu
Y3Rpb24oIGpxWEhSLCBzdGF0dXMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNh
bGxiYWNrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVhY2goIGNh
bGxiYWNrLCByZXNwb25zZSB8fCBbIGpxWEhSLnJlc3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhIUiBd
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICB9KS5kb25lKGZ1bmN0aW9uKCByZXNwb25zZVRleHQgKSB7CisKKyAgICAgICAgICAgICAgICAv
LyBTYXZlIHJlc3BvbnNlIGZvciB1c2UgaW4gY29tcGxldGUgY2FsbGJhY2sKKyAgICAgICAgICAg
ICAgICByZXNwb25zZSA9IGFyZ3VtZW50czsKKworICAgICAgICAgICAgICAgIC8vIFNlZSBpZiBh
IHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICBzZWxmLmh0bWwoIHNlbGVj
dG9yID8KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgZHVtbXkgZGl2IHRv
IGhvbGQgdGhlIHJlc3VsdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgiPGRpdj4i
KQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluamVjdCB0aGUgY29udGVu
dHMgb2YgdGhlIGRvY3VtZW50IGluLCByZW1vdmluZyB0aGUgc2NyaXB0cworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCBhbnkgJ1Blcm1pc3Npb24gRGVuaWVkJyBl
cnJvcnMgaW4gSUUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZCggcmVz
cG9uc2VUZXh0LnJlcGxhY2UoIHJzY3JpcHQsICIiICkgKQorCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIExvY2F0ZSB0aGUgc3BlY2lmaWVkIGVsZW1lbnRzCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC5maW5kKCBzZWxlY3RvciApIDoKKworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgbm90LCBqdXN0IGluamVjdCB0aGUgZnVsbCByZXN1bHQKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVGV4dCApOworCisgICAgICAgIH0pOworCisgICAg
ICAgIHJldHVybiB0aGlzOworfTsKKworLy8gQXR0YWNoIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGZv
ciBoYW5kbGluZyBjb21tb24gQUpBWCBldmVudHMKK2pRdWVyeS5lYWNoKCAiYWpheFN0YXJ0IGFq
YXhTdG9wIGFqYXhDb21wbGV0ZSBhamF4RXJyb3IgYWpheFN1Y2Nlc3MgYWpheFNlbmQiLnNwbGl0
KCAiICIgKSwgZnVuY3Rpb24oIGksIG8gKXsKKyAgICAgICAgalF1ZXJ5LmZuWyBvIF0gPSBmdW5j
dGlvbiggZiApeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9uKCBvLCBmICk7CisgICAg
ICAgIH07Cit9KTsKKworalF1ZXJ5LmVhY2goIFsgImdldCIsICJwb3N0IiBdLCBmdW5jdGlvbigg
aSwgbWV0aG9kICkgeworICAgICAgICBqUXVlcnlbIG1ldGhvZCBdID0gZnVuY3Rpb24oIHVybCwg
ZGF0YSwgY2FsbGJhY2ssIHR5cGUgKSB7CisgICAgICAgICAgICAgICAgLy8gc2hpZnQgYXJndW1l
bnRzIGlmIGRhdGEgYXJndW1lbnQgd2FzIG9taXR0ZWQKKyAgICAgICAgICAgICAgICBpZiAoIGpR
dWVyeS5pc0Z1bmN0aW9uKCBkYXRhICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBl
ID0gdHlwZSB8fCBjYWxsYmFjazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0g
ZGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB1bmRlZmluZWQ7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5hamF4KHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGU6IG1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHVybDogdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YVR5cGU6IHR5cGUKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfTsKK30pOwor
CitqUXVlcnkuZXh0ZW5kKHsKKworICAgICAgICBnZXRTY3JpcHQ6IGZ1bmN0aW9uKCB1cmwsIGNh
bGxiYWNrICkgeworICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVm
aW5lZCwgY2FsbGJhY2ssICJzY3JpcHQiICk7CisgICAgICAgIH0sCisKKyAgICAgICAgZ2V0SlNP
TjogZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2sgKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGpRdWVyeS5nZXQoIHVybCwgZGF0YSwgY2FsbGJhY2ssICJqc29uIiApOworICAgICAgICB9
LAorCisgICAgICAgIC8vIENyZWF0ZXMgYSBmdWxsIGZsZWRnZWQgc2V0dGluZ3Mgb2JqZWN0IGlu
dG8gdGFyZ2V0CisgICAgICAgIC8vIHdpdGggYm90aCBhamF4U2V0dGluZ3MgYW5kIHNldHRpbmdz
IGZpZWxkcy4KKyAgICAgICAgLy8gSWYgdGFyZ2V0IGlzIG9taXR0ZWQsIHdyaXRlcyBpbnRvIGFq
YXhTZXR0aW5ncy4KKyAgICAgICAgYWpheFNldHVwOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0aW5n
cyApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHNldHRpbmdzICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gQnVpbGRpbmcgYSBzZXR0aW5ncyBvYmplY3QKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGFqYXhFeHRlbmQoIHRhcmdldCwgalF1ZXJ5LmFqYXhTZXR0aW5ncyApOworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBFeHRlbmRpbmcg
YWpheFNldHRpbmdzCisgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncyA9IHRhcmdldDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IGpRdWVyeS5hamF4U2V0dGluZ3M7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFqYXhFeHRlbmQoIHRhcmdldCwgc2V0
dGluZ3MgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgICAgICB9LAorCisg
ICAgICAgIGFqYXhTZXR0aW5nczogeworICAgICAgICAgICAgICAgIHVybDogYWpheExvY2F0aW9u
LAorICAgICAgICAgICAgICAgIGlzTG9jYWw6IHJsb2NhbFByb3RvY29sLnRlc3QoIGFqYXhMb2NQ
YXJ0c1sgMSBdICksCisgICAgICAgICAgICAgICAgZ2xvYmFsOiB0cnVlLAorICAgICAgICAgICAg
ICAgIHR5cGU6ICJHRVQiLAorICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiAiYXBwbGljYXRp
b24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IiwKKyAgICAgICAgICAgICAg
ICBwcm9jZXNzRGF0YTogdHJ1ZSwKKyAgICAgICAgICAgICAgICBhc3luYzogdHJ1ZSwKKyAgICAg
ICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDAsCisgICAgICAgICAgICAg
ICAgZGF0YTogbnVsbCwKKyAgICAgICAgICAgICAgICBkYXRhVHlwZTogbnVsbCwKKyAgICAgICAg
ICAgICAgICB1c2VybmFtZTogbnVsbCwKKyAgICAgICAgICAgICAgICBwYXNzd29yZDogbnVsbCwK
KyAgICAgICAgICAgICAgICBjYWNoZTogbnVsbCwKKyAgICAgICAgICAgICAgICB0aHJvd3M6IGZh
bHNlLAorICAgICAgICAgICAgICAgIHRyYWRpdGlvbmFsOiBmYWxzZSwKKyAgICAgICAgICAgICAg
ICBoZWFkZXJzOiB7fSwKKyAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICAgICAgYWNj
ZXB0czogeworICAgICAgICAgICAgICAgICAgICAgICAgeG1sOiAiYXBwbGljYXRpb24veG1sLCB0
ZXh0L3htbCIsCisgICAgICAgICAgICAgICAgICAgICAgICBodG1sOiAidGV4dC9odG1sIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICJ0ZXh0L3BsYWluIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGpzb246ICJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIioiOiBhbGxUeXBlcworICAgICAgICAgICAgICAgIH0sCisK
KyAgICAgICAgICAgICAgICBjb250ZW50czogeworICAgICAgICAgICAgICAgICAgICAgICAgeG1s
OiAveG1sLywKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0bWw6IC9odG1sLywKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGpzb246IC9qc29uLworICAgICAgICAgICAgICAgIH0sCisKKyAgICAg
ICAgICAgICAgICByZXNwb25zZUZpZWxkczogeworICAgICAgICAgICAgICAgICAgICAgICAgeG1s
OiAicmVzcG9uc2VYTUwiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogInJlc3BvbnNl
VGV4dCIKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgLy8gTGlzdCBvZiBk
YXRhIGNvbnZlcnRlcnMKKyAgICAgICAgICAgICAgICAvLyAxKSBrZXkgZm9ybWF0IGlzICJzb3Vy
Y2VfdHlwZSBkZXN0aW5hdGlvbl90eXBlIiAoYSBzaW5nbGUgc3BhY2UgaW4tYmV0d2VlbikKKyAg
ICAgICAgICAgICAgICAvLyAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sICIqIiBjYW4gYmUgdXNlZCBm
b3Igc291cmNlX3R5cGUKKyAgICAgICAgICAgICAgICBjb252ZXJ0ZXJzOiB7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgYW55dGhpbmcgdG8gdGV4dAorICAgICAgICAgICAg
ICAgICAgICAgICAgIiogdGV4dCI6IHdpbmRvdy5TdHJpbmcsCisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFRleHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKQorICAgICAg
ICAgICAgICAgICAgICAgICAgInRleHQgaHRtbCI6IHRydWUsCisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEV2YWx1YXRlIHRleHQgYXMgYSBqc29uIGV4cHJlc3Npb24KKyAgICAgICAgICAg
ICAgICAgICAgICAgICJ0ZXh0IGpzb24iOiBqUXVlcnkucGFyc2VKU09OLAorCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBQYXJzZSB0ZXh0IGFzIHhtbAorICAgICAgICAgICAgICAgICAgICAg
ICAgInRleHQgeG1sIjogalF1ZXJ5LnBhcnNlWE1MCisgICAgICAgICAgICAgICAgfSwKKworICAg
ICAgICAgICAgICAgIC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5k
ZWQ6CisgICAgICAgICAgICAgICAgLy8geW91IGNhbiBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlv
bnMgaGVyZSBpZgorICAgICAgICAgICAgICAgIC8vIGFuZCB3aGVuIHlvdSBjcmVhdGUgb25lIHRo
YXQgc2hvdWxkbid0IGJlCisgICAgICAgICAgICAgICAgLy8gZGVlcCBleHRlbmRlZCAoc2VlIGFq
YXhFeHRlbmQpCisgICAgICAgICAgICAgICAgZmxhdE9wdGlvbnM6IHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQ6IHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHRy
dWUKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgYWpheFByZWZpbHRl
cjogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzICksCisgICAgICAgIGFq
YXhUcmFuc3BvcnQ6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cyApLAor
CisgICAgICAgIC8vIE1haW4gbWV0aG9kCisgICAgICAgIGFqYXg6IGZ1bmN0aW9uKCB1cmwsIG9w
dGlvbnMgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB1cmwgaXMgYW4gb2JqZWN0LCBzaW11
bGF0ZSBwcmUtMS41IHNpZ25hdHVyZQorICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHVybCA9
PT0gIm9iamVjdCIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0gdXJsOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gdW5kZWZpbmVkOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0Cisg
ICAgICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CisKKyAgICAgICAgICAgICAg
ICB2YXIgLy8gaWZNb2RpZmllZCBrZXkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmTW9kaWZp
ZWRLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNwb25zZSBoZWFkZXJzCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnNTdHJpbmcsCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXNwb25zZUhlYWRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0
cmFuc3BvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHRpbWVvdXQgaGFuZGxlCisgICAgICAgICAgICAgICAgICAgICAgICB0
aW1lb3V0VGltZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDcm9zcy1kb21haW4gZGV0
ZWN0aW9uIHZhcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRj
aGVkCisgICAgICAgICAgICAgICAgICAgICAgICBmaXJlR2xvYmFscywKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIExvb3AgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGksCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0
CisgICAgICAgICAgICAgICAgICAgICAgICBzID0galF1ZXJ5LmFqYXhTZXR1cCgge30sIG9wdGlv
bnMgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGxiYWNrcyBjb250ZXh0CisgICAg
ICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRleHQgZm9yIGdsb2JhbCBldmVudHMKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEl0J3MgdGhlIGNhbGxiYWNrQ29udGV4dCBpZiBvbmUgd2Fz
IHByb3ZpZGVkIGluIHRoZSBvcHRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQg
aWYgaXQncyBhIERPTSBub2RlIG9yIGEgalF1ZXJ5IGNvbGxlY3Rpb24KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dCA9IGNhbGxiYWNrQ29udGV4dCAhPT0gcyAmJgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIGNhbGxiYWNrQ29udGV4dC5ub2RlVHlw
ZSB8fCBjYWxsYmFja0NvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgKSA/CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIGNhbGxiYWNrQ29udGV4
dCApIDogalF1ZXJ5LmV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmZXJyZWRz
CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVEZWZlcnJlZCA9IGpRdWVyeS5DYWxsYmFj
a3MoICJvbmNlIG1lbW9yeSIgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0YXR1cy1k
ZXBlbmRlbnQgY2FsbGJhY2tzCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlID0g
cy5zdGF0dXNDb2RlIHx8IHt9LAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGVhZGVycyAo
dGhleSBhcmUgc2VudCBhbGwgYXQgb25jZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVl
c3RIZWFkZXJzID0ge30sCisgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyc05h
bWVzID0ge30sCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUganFYSFIgc3RhdGUKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIERlZmF1bHQgYWJvcnQgbWVzc2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgc3RyQWJv
cnQgPSAiY2FuY2VsZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmFrZSB4aHIKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGpxWEhSID0geworCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlYWR5U3RhdGU6IDAsCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQ2FjaGVzIHRoZSBoZWFkZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXN0YXRlICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxuYW1lID0gbmFtZS50b0xv
d2VyQ2FzZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmFtZSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIGxuYW1lIF0gPSByZXF1ZXN0SGVhZGVyc05h
bWVzWyBsbmFtZSBdIHx8IG5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyc1sgbmFtZSBdID0gdmFsdWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJhdyBzdHJpbmcK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc3RhdGUgPT09IDIgPyByZXNwb25zZUhlYWRlcnNTdHJpbmcgOiBudWxsOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEJ1aWxkcyBoZWFkZXJzIGhhc2h0YWJsZSBpZiBuZWVkZWQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3RhdGUgPT09IDIgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFyZXNw
b25zZUhlYWRlcnMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVycyA9IHt9OworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSggKCBtYXRjaCA9IHJo
ZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVhZGVyc1N0cmluZyApICkgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9u
c2VIZWFkZXJzWyBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpIF0gPSBtYXRjaFsgMiBdOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IHJlc3BvbnNlSGVh
ZGVyc1sga2V5LnRvTG93ZXJDYXNlKCkgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG1hdGNoID09PSB1bmRlZmluZWQgPyBudWxsIDogbWF0Y2g7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
T3ZlcnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQtdHlwZSBoZWFkZXIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhc3RhdGUgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLm1pbWVUeXBlID0g
dHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQ2FuY2VsIHRoZSByZXF1ZXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFib3J0OiBmdW5jdGlvbiggc3RhdHVzVGV4dCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gc3RhdHVzVGV4dCB8fCBzdHJBYm9ydDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRyYW5zcG9ydCApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9y
dC5hYm9ydCggc3RhdHVzVGV4dCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lKCAw
LCBzdGF0dXNUZXh0ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAvLyBDYWxsYmFjayBmb3Igd2hl
biBldmVyeXRoaW5nIGlzIGRvbmUKKyAgICAgICAgICAgICAgICAvLyBJdCBpcyBkZWZpbmVkIGhl
cmUgYmVjYXVzZSBqc2xpbnQgY29tcGxhaW5zIGlmIGl0IGlzIGRlY2xhcmVkCisgICAgICAgICAg
ICAgICAgLy8gYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24gKHdoaWNoIHdvdWxkIGJlIG1vcmUg
bG9naWNhbCBhbmQgcmVhZGFibGUpCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSggc3Rh
dHVzLCBuYXRpdmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgaXNTdWNjZXNzLCBzdWNjZXNzLCBlcnJvciwgcmVzcG9uc2UsIG1v
ZGlmaWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gbmF0
aXZlU3RhdHVzVGV4dDsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbGVkIG9uY2UK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3RhdGUgPT09IDIgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RhdGUgaXMgImRvbmUiIG5vdworICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGUgPSAyOworCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBDbGVhciB0aW1lb3V0IGlmIGl0IGV4aXN0cworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCB0aW1lb3V0VGltZXIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFy
VGltZW91dCggdGltZW91dFRpbWVyICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIERlcmVmZXJlbmNlIHRyYW5zcG9ydCBmb3IgZWFybHkg
Z2FyYmFnZSBjb2xsZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAobm8gbWF0dGVy
IGhvdyBsb25nIHRoZSBqcVhIUiBvYmplY3Qgd2lsbCBiZSB1c2VkKQorICAgICAgICAgICAgICAg
ICAgICAgICAgdHJhbnNwb3J0ID0gdW5kZWZpbmVkOworCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBDYWNoZSByZXNwb25zZSBoZWFkZXJzCisgICAgICAgICAgICAgICAgICAgICAgICByZXNw
b25zZUhlYWRlcnNTdHJpbmcgPSBoZWFkZXJzIHx8ICIiOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBTZXQgcmVhZHlTdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAganFYSFIucmVh
ZHlTdGF0ZSA9IHN0YXR1cyA+IDAgPyA0IDogMDsKKworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gR2V0IHJlc3BvbnNlIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzcG9u
c2VzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IGFqYXhI
YW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgc3VjY2Vzc2Z1bCwgaGFu
ZGxlIHR5cGUgY2hhaW5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3RhdHVzID49
IDIwMCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAzMDQgKSB7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3Ig
SWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBzLmlmTW9kaWZpZWQgKSB7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNl
SGVhZGVyKCJMYXN0LU1vZGlmaWVkIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBtb2RpZmllZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGlmTW9kaWZpZWRLZXkgXSA9
IG1vZGlmaWVkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllZCA9IGpxWEhSLmdl
dFJlc3BvbnNlSGVhZGVyKCJFdGFnIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBtb2RpZmllZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldGFnWyBpZk1vZGlmaWVkS2V5IF0gPSBtb2RpZmll
ZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBJZiBub3QgbW9kaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBzdGF0dXMgPT09IDMwNCApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXR1c1RleHQgPSAibm90bW9kaWZpZWQiOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlzU3VjY2VzcyA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBkYXRhCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpc1N1Y2Nlc3MgPSBhamF4Q29udmVydCggcywgcmVzcG9uc2UgKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gaXNTdWNjZXNzLnN0YXRl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBpc1N1
Y2Nlc3MuZGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJv
ciA9IGlzU3VjY2Vzcy5lcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpc1N1Y2Nlc3MgPSAhZXJyb3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFdlIGV4dHJhY3QgZXJyb3IgZnJvbSBzdGF0dXNUZXh0CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gbm9ybWFsaXplIHN0YXR1c1RleHQgYW5k
IHN0YXR1cyBmb3Igbm9uLWFib3J0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
cnJvciA9IHN0YXR1c1RleHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
IXN0YXR1c1RleHQgfHwgc3RhdHVzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXR1c1RleHQgPSAiZXJyb3IiOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggc3RhdHVzIDwgMCApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IDA7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFNldCBkYXRhIGZvciB0aGUgZmFrZSB4aHIgb2JqZWN0CisgICAgICAgICAgICAgICAgICAg
ICAgICBqcVhIUi5zdGF0dXMgPSBzdGF0dXM7CisgICAgICAgICAgICAgICAgICAgICAgICBqcVhI
Ui5zdGF0dXNUZXh0ID0gKCBuYXRpdmVTdGF0dXNUZXh0IHx8IHN0YXR1c1RleHQgKSArICIiOwor
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdWNjZXNzL0Vycm9yCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGlzU3VjY2VzcyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBzdWNjZXNzLCBz
dGF0dXNUZXh0LCBqcVhIUiBdICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZWplY3RXaXRoKCBjYWxs
YmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQsIGVycm9yIF0gKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RhdHVzLWRlcGVu
ZGVudCBjYWxsYmFja3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLnN0YXR1c0NvZGUo
IHN0YXR1c0NvZGUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0NvZGUgPSB1bmRl
ZmluZWQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZmlyZUdsb2JhbHMgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2Vy
KCAiYWpheCIgKyAoIGlzU3VjY2VzcyA/ICJTdWNjZXNzIiA6ICJFcnJvciIgKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsganFYSFIsIHMsIGlzU3Vj
Y2VzcyA/IHN1Y2Nlc3MgOiBlcnJvciBdICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbXBsZXRlCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb21wbGV0ZURlZmVycmVkLmZpcmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIs
IHN0YXR1c1RleHQgXSApOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZpcmVHbG9i
YWxzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxFdmVudENvbnRl
eHQudHJpZ2dlciggImFqYXhDb21wbGV0ZSIsIFsganFYSFIsIHMgXSApOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGdsb2JhbCBBSkFYIGNvdW50ZXIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQu
dHJpZ2dlciggImFqYXhTdG9wIiApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgLy8gQXR0YWNoIGRlZmVycmVkcworICAgICAgICAgICAgICAgIGRlZmVycmVkLnBy
b21pc2UoIGpxWEhSICk7CisgICAgICAgICAgICAgICAganFYSFIuc3VjY2VzcyA9IGpxWEhSLmRv
bmU7CisgICAgICAgICAgICAgICAganFYSFIuZXJyb3IgPSBqcVhIUi5mYWlsOworICAgICAgICAg
ICAgICAgIGpxWEhSLmNvbXBsZXRlID0gY29tcGxldGVEZWZlcnJlZC5hZGQ7CisKKyAgICAgICAg
ICAgICAgICAvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrcworICAgICAgICAgICAgICAgIGpx
WEhSLnN0YXR1c0NvZGUgPSBmdW5jdGlvbiggbWFwICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBtYXAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0bXA7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3RhdGUgPCAyICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHRtcCBpbiBtYXAgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXND
b2RlWyB0bXAgXSA9IFsgc3RhdHVzQ29kZVt0bXBdLCBtYXBbdG1wXSBdOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
bXAgPSBtYXBbIGpxWEhSLnN0YXR1cyBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpxWEhSLmFsd2F5cyggdG1wICk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAv
LyBSZW1vdmUgaGFzaCBjaGFyYWN0ZXIgKCM3NTMxOiBhbmQgc3RyaW5nIHByb21vdGlvbikKKyAg
ICAgICAgICAgICAgICAvLyBBZGQgcHJvdG9jb2wgaWYgbm90IHByb3ZpZGVkICgjNTg2NjogSUU3
IGlzc3VlIHdpdGggcHJvdG9jb2wtbGVzcyB1cmxzKQorICAgICAgICAgICAgICAgIC8vIFdlIGFs
c28gdXNlIHRoZSB1cmwgcGFyYW1ldGVyIGlmIGF2YWlsYWJsZQorICAgICAgICAgICAgICAgIHMu
dXJsID0gKCAoIHVybCB8fCBzLnVybCApICsgIiIgKS5yZXBsYWNlKCByaGFzaCwgIiIgKS5yZXBs
YWNlKCBycHJvdG9jb2wsIGFqYXhMb2NQYXJ0c1sgMSBdICsgIi8vIiApOworCisgICAgICAgICAg
ICAgICAgLy8gRXh0cmFjdCBkYXRhVHlwZXMgbGlzdAorICAgICAgICAgICAgICAgIHMuZGF0YVR5
cGVzID0galF1ZXJ5LnRyaW0oIHMuZGF0YVR5cGUgfHwgIioiICkudG9Mb3dlckNhc2UoKS5zcGxp
dCggY29yZV9yc3BhY2UgKTsKKworICAgICAgICAgICAgICAgIC8vIEEgY3Jvc3MtZG9tYWluIHJl
cXVlc3QgaXMgaW4gb3JkZXIgd2hlbiB3ZSBoYXZlIGEgcHJvdG9jb2w6aG9zdDpwb3J0IG1pc21h
dGNoCisgICAgICAgICAgICAgICAgaWYgKCBzLmNyb3NzRG9tYWluID09IG51bGwgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJ0cyA9IHJ1cmwuZXhlYyggcy51cmwudG9Mb3dlckNhc2Uo
KSApOworICAgICAgICAgICAgICAgICAgICAgICAgcy5jcm9zc0RvbWFpbiA9ICEhKCBwYXJ0cyAm
JgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHBhcnRzWyAxIF0gIT09IGFqYXhM
b2NQYXJ0c1sgMSBdIHx8IHBhcnRzWyAyIF0gIT09IGFqYXhMb2NQYXJ0c1sgMiBdIHx8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBwYXJ0c1sgMyBdIHx8ICggcGFy
dHNbIDEgXSA9PT0gImh0dHA6IiA/IDgwIDogNDQzICkgKSAhPQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBhamF4TG9jUGFydHNbIDMgXSB8fCAoIGFq
YXhMb2NQYXJ0c1sgMSBdID09PSAiaHR0cDoiID8gODAgOiA0NDMgKSApICkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8g
Q29udmVydCBkYXRhIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nCisgICAgICAgICAgICAgICAgaWYg
KCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJiB0eXBlb2Ygcy5kYXRhICE9PSAic3RyaW5nIiAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMuZGF0YSA9IGpRdWVyeS5wYXJhbSggcy5kYXRh
LCBzLnRyYWRpdGlvbmFsICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
Ly8gQXBwbHkgcHJlZmlsdGVycworICAgICAgICAgICAgICAgIGluc3BlY3RQcmVmaWx0ZXJzT3JU
cmFuc3BvcnRzKCBwcmVmaWx0ZXJzLCBzLCBvcHRpb25zLCBqcVhIUiApOworCisgICAgICAgICAg
ICAgICAgLy8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWx0ZXIsIHN0b3Ag
dGhlcmUKKyAgICAgICAgICAgICAgICBpZiAoIHN0YXRlID09PSAyICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGpxWEhSOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIC8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRv
CisgICAgICAgICAgICAgICAgZmlyZUdsb2JhbHMgPSBzLmdsb2JhbDsKKworICAgICAgICAgICAg
ICAgIC8vIFVwcGVyY2FzZSB0aGUgdHlwZQorICAgICAgICAgICAgICAgIHMudHlwZSA9IHMudHlw
ZS50b1VwcGVyQ2FzZSgpOworCisgICAgICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIHJlcXVl
c3QgaGFzIGNvbnRlbnQKKyAgICAgICAgICAgICAgICBzLmhhc0NvbnRlbnQgPSAhcm5vQ29udGVu
dC50ZXN0KCBzLnR5cGUgKTsKKworICAgICAgICAgICAgICAgIC8vIFdhdGNoIGZvciBhIG5ldyBz
ZXQgb2YgcmVxdWVzdHMKKyAgICAgICAgICAgICAgICBpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVy
eS5hY3RpdmUrKyA9PT0gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVu
dC50cmlnZ2VyKCAiYWpheFN0YXJ0IiApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIC8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBjb250
ZW50CisgICAgICAgICAgICAgICAgaWYgKCAhcy5oYXNDb250ZW50ICkgeworCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJZiBkYXRhIGlzIGF2YWlsYWJsZSwgYXBwZW5kIGRhdGEgdG8gdXJs
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHMuZGF0YSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/ICImIiA6
ICI/IiApICsgcy5kYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAjOTY4
MjogcmVtb3ZlIGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1c2VkIGluIGFuIGV2ZW50dWFsIHJldHJ5
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzLmRhdGE7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCBpZk1v
ZGlmaWVkS2V5IGJlZm9yZSBhZGRpbmcgdGhlIGFudGktY2FjaGUgcGFyYW1ldGVyCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZk1vZGlmaWVkS2V5ID0gcy51cmw7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEFkZCBhbnRpLWNhY2hlIGluIHVybCBpZiBuZWVkZWQKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggcy5jYWNoZSA9PT0gZmFsc2UgKSB7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIHRzID0galF1ZXJ5Lm5vdygpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyeSByZXBsYWNpbmcgXz0gaWYgaXQgaXMgdGhl
cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBzLnVybC5y
ZXBsYWNlKCBydHMsICIkMV89IiArIHRzICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gaWYgbm90aGluZyB3YXMgcmVwbGFjZWQsIGFkZCB0aW1lc3RhbXAgdG8gdGhlIGVu
ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnVybCA9IHJldCArICggKCByZXQg
PT09IHMudXJsICkgPyAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gIiYiIDogIj8iICkgKyAiXz0i
ICsgdHMgOiAiIiApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEg
aXMgYmVpbmcgc2VudAorICAgICAgICAgICAgICAgIGlmICggcy5kYXRhICYmIHMuaGFzQ29udGVu
dCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBvcHRpb25zLmNvbnRlbnRUeXBlICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRlciggIkNvbnRlbnQt
VHlwZSIsIHMuY29udGVudFR5cGUgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhl
YWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLgorICAgICAgICAgICAgICAgIGlmICggcy5pZk1v
ZGlmaWVkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWZNb2RpZmllZEtleSA9IGlmTW9k
aWZpZWRLZXkgfHwgcy51cmw7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5s
YXN0TW9kaWZpZWRbIGlmTW9kaWZpZWRLZXkgXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRlciggIklmLU1vZGlmaWVkLVNpbmNlIiwgalF1
ZXJ5Lmxhc3RNb2RpZmllZFsgaWZNb2RpZmllZEtleSBdICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5ldGFnWyBpZk1vZGlm
aWVkS2V5IF0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLnNldFJl
cXVlc3RIZWFkZXIoICJJZi1Ob25lLU1hdGNoIiwgalF1ZXJ5LmV0YWdbIGlmTW9kaWZpZWRLZXkg
XSApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIC8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRl
cGVuZGluZyBvbiB0aGUgZGF0YVR5cGUKKyAgICAgICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0
SGVhZGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgIkFjY2VwdCIsCisgICAgICAgICAgICAg
ICAgICAgICAgICBzLmRhdGFUeXBlc1sgMCBdICYmIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbMF0g
XSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuYWNjZXB0c1sgcy5kYXRhVHlw
ZXNbMF0gXSArICggcy5kYXRhVHlwZXNbIDAgXSAhPT0gIioiID8gIiwgIiArIGFsbFR5cGVzICsg
IjsgcT0wLjAxIiA6ICIiICkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmFj
Y2VwdHNbICIqIiBdCisgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgICAgIC8vIENo
ZWNrIGZvciBoZWFkZXJzIG9wdGlvbgorICAgICAgICAgICAgICAgIGZvciAoIGkgaW4gcy5oZWFk
ZXJzICkgeworICAgICAgICAgICAgICAgICAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRlcigg
aSwgcy5oZWFkZXJzWyBpIF0gKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0CisgICAg
ICAgICAgICAgICAgaWYgKCBzLmJlZm9yZVNlbmQgJiYgKCBzLmJlZm9yZVNlbmQuY2FsbCggY2Fs
bGJhY2tDb250ZXh0LCBqcVhIUiwgcyApID09PSBmYWxzZSB8fCBzdGF0ZSA9PT0gMiApICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBYm9ydCBpZiBub3QgZG9uZSBhbHJl
YWR5IGFuZCByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpx
WEhSLmFib3J0KCk7CisKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBh
Ym9ydGluZyBpcyBubyBsb25nZXIgYSBjYW5jZWxsYXRpb24KKyAgICAgICAgICAgICAgICBzdHJB
Ym9ydCA9ICJhYm9ydCI7CisKKyAgICAgICAgICAgICAgICAvLyBJbnN0YWxsIGNhbGxiYWNrcyBv
biBkZWZlcnJlZHMKKyAgICAgICAgICAgICAgICBmb3IgKCBpIGluIHsgc3VjY2VzczogMSwgZXJy
b3I6IDEsIGNvbXBsZXRlOiAxIH0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqcVhIUlsg
aSBdKCBzWyBpIF0gKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBH
ZXQgdHJhbnNwb3J0CisgICAgICAgICAgICAgICAgdHJhbnNwb3J0ID0gaW5zcGVjdFByZWZpbHRl
cnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMsIHMsIG9wdGlvbnMsIGpxWEhSICk7CisKKyAgICAg
ICAgICAgICAgICAvLyBJZiBubyB0cmFuc3BvcnQsIHdlIGF1dG8tYWJvcnQKKyAgICAgICAgICAg
ICAgICBpZiAoICF0cmFuc3BvcnQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkb25lKCAt
MSwgIk5vIFRyYW5zcG9ydCIgKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAganFYSFIucmVhZHlTdGF0ZSA9IDE7CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBTZW5kIGdsb2JhbCBldmVudAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBm
aXJlR2xvYmFscyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsRXZl
bnRDb250ZXh0LnRyaWdnZXIoICJhamF4U2VuZCIsIFsganFYSFIsIHMgXSApOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGltZW91dAorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBzLmFzeW5jICYmIHMudGltZW91dCA+IDAgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXRUaW1lciA9IHNldFRpbWVvdXQo
IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganFY
SFIuYWJvcnQoICJ0aW1lb3V0IiApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
LCBzLnRpbWVvdXQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUg
PSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQuc2VuZCggcmVx
dWVzdEhlYWRlcnMsIGRvbmUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJvcGFnYXRlIGV4Y2VwdGlv
biBhcyBlcnJvciBpZiBub3QgZG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHN0YXRlIDwgMiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkb25lKCAtMSwgZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaW1w
bHkgcmV0aHJvdyBvdGhlcndpc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGpxWEhSOwor
ICAgICAgICB9LAorCisgICAgICAgIC8vIENvdW50ZXIgZm9yIGhvbGRpbmcgdGhlIG51bWJlciBv
ZiBhY3RpdmUgcXVlcmllcworICAgICAgICBhY3RpdmU6IDAsCisKKyAgICAgICAgLy8gTGFzdC1N
b2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdAorICAgICAgICBsYXN0TW9kaWZp
ZWQ6IHt9LAorICAgICAgICBldGFnOiB7fQorCit9KTsKKworLyogSGFuZGxlcyByZXNwb25zZXMg
dG8gYW4gYWpheCByZXF1ZXN0OgorICogLSBzZXRzIGFsbCByZXNwb25zZVhYWCBmaWVsZHMgYWNj
b3JkaW5nbHkKKyAqIC0gZmluZHMgdGhlIHJpZ2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVu
IGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQgZGF0YVR5cGUpCisgKiAtIHJldHVybnMgdGhlIGNv
cnJlc3BvbmRpbmcgcmVzcG9uc2UKKyAqLworZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcygg
cywganFYSFIsIHJlc3BvbnNlcyApIHsKKworICAgICAgICB2YXIgY3QsIHR5cGUsIGZpbmFsRGF0
YVR5cGUsIGZpcnN0RGF0YVR5cGUsCisgICAgICAgICAgICAgICAgY29udGVudHMgPSBzLmNvbnRl
bnRzLAorICAgICAgICAgICAgICAgIGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLAorICAgICAgICAg
ICAgICAgIHJlc3BvbnNlRmllbGRzID0gcy5yZXNwb25zZUZpZWxkczsKKworICAgICAgICAvLyBG
aWxsIHJlc3BvbnNlWFhYIGZpZWxkcworICAgICAgICBmb3IgKCB0eXBlIGluIHJlc3BvbnNlRmll
bGRzICkgeworICAgICAgICAgICAgICAgIGlmICggdHlwZSBpbiByZXNwb25zZXMgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBqcVhIUlsgcmVzcG9uc2VGaWVsZHNbdHlwZV0gXSA9IHJlc3Bv
bnNlc1sgdHlwZSBdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8v
IFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNz
CisgICAgICAgIHdoaWxlKCBkYXRhVHlwZXNbIDAgXSA9PT0gIioiICkgeworICAgICAgICAgICAg
ICAgIGRhdGFUeXBlcy5zaGlmdCgpOworICAgICAgICAgICAgICAgIGlmICggY3QgPT09IHVuZGVm
aW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0ID0gcy5taW1lVHlwZSB8fCBqcVhI
Ui5nZXRSZXNwb25zZUhlYWRlciggImNvbnRlbnQtdHlwZSIgKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBr
bm93biBjb250ZW50LXR5cGUKKyAgICAgICAgaWYgKCBjdCApIHsKKyAgICAgICAgICAgICAgICBm
b3IgKCB0eXBlIGluIGNvbnRlbnRzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBj
b250ZW50c1sgdHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0udGVzdCggY3QgKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGVzLnVuc2hpZnQoIHR5cGUgKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ2hlY2sg
dG8gc2VlIGlmIHdlIGhhdmUgYSByZXNwb25zZSBmb3IgdGhlIGV4cGVjdGVkIGRhdGFUeXBlCisg
ICAgICAgIGlmICggZGF0YVR5cGVzWyAwIF0gaW4gcmVzcG9uc2VzICkgeworICAgICAgICAgICAg
ICAgIGZpbmFsRGF0YVR5cGUgPSBkYXRhVHlwZXNbIDAgXTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAvLyBUcnkgY29udmVydGlibGUgZGF0YVR5cGVzCisgICAgICAgICAgICAg
ICAgZm9yICggdHlwZSBpbiByZXNwb25zZXMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoICFkYXRhVHlwZXNbIDAgXSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyAiICIgKyBkYXRhVHlw
ZXNbMF0gXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxEYXRhVHlw
ZSA9IHR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhZmlyc3RE
YXRhVHlwZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3REYXRhVHlw
ZSA9IHR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIC8vIE9yIGp1c3QgdXNlIGZpcnN0IG9uZQorICAgICAgICAgICAgICAg
IGZpbmFsRGF0YVR5cGUgPSBmaW5hbERhdGFUeXBlIHx8IGZpcnN0RGF0YVR5cGU7CisgICAgICAg
IH0KKworICAgICAgICAvLyBJZiB3ZSBmb3VuZCBhIGRhdGFUeXBlCisgICAgICAgIC8vIFdlIGFk
ZCB0aGUgZGF0YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVkCisgICAgICAgIC8vIGFuZCByZXR1
cm4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2UKKyAgICAgICAgaWYgKCBmaW5hbERhdGFUeXBl
ICkgeworICAgICAgICAgICAgICAgIGlmICggZmluYWxEYXRhVHlwZSAhPT0gZGF0YVR5cGVzWyAw
IF0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZXMudW5zaGlmdCggZmluYWxE
YXRhVHlwZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVz
cG9uc2VzWyBmaW5hbERhdGFUeXBlIF07CisgICAgICAgIH0KK30KKworLy8gQ2hhaW4gY29udmVy
c2lvbnMgZ2l2ZW4gdGhlIHJlcXVlc3QgYW5kIHRoZSBvcmlnaW5hbCByZXNwb25zZQorZnVuY3Rp
b24gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlICkgeworCisgICAgICAgIHZhciBjb252LCBjb252
MiwgY3VycmVudCwgdG1wLAorICAgICAgICAgICAgICAgIC8vIFdvcmsgd2l0aCBhIGNvcHkgb2Yg
ZGF0YVR5cGVzIGluIGNhc2Ugd2UgbmVlZCB0byBtb2RpZnkgaXQgZm9yIGNvbnZlcnNpb24KKyAg
ICAgICAgICAgICAgICBkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcy5zbGljZSgpLAorICAgICAgICAg
ICAgICAgIHByZXYgPSBkYXRhVHlwZXNbIDAgXSwKKyAgICAgICAgICAgICAgICBjb252ZXJ0ZXJz
ID0ge30sCisgICAgICAgICAgICAgICAgaSA9IDA7CisKKyAgICAgICAgLy8gQXBwbHkgdGhlIGRh
dGFGaWx0ZXIgaWYgcHJvdmlkZWQKKyAgICAgICAgaWYgKCBzLmRhdGFGaWx0ZXIgKSB7CisgICAg
ICAgICAgICAgICAgcmVzcG9uc2UgPSBzLmRhdGFGaWx0ZXIoIHJlc3BvbnNlLCBzLmRhdGFUeXBl
ICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBDcmVhdGUgY29udmVydGVycyBtYXAgd2l0aCBs
b3dlcmNhc2VkIGtleXMKKyAgICAgICAgaWYgKCBkYXRhVHlwZXNbIDEgXSApIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKCBjb252IGluIHMuY29udmVydGVycyApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnZlcnRlcnNbIGNvbnYudG9Mb3dlckNhc2UoKSBdID0gcy5jb252ZXJ0ZXJzWyBj
b252IF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ29udmVy
dCB0byBlYWNoIHNlcXVlbnRpYWwgZGF0YVR5cGUsIHRvbGVyYXRpbmcgbGlzdCBtb2RpZmljYXRp
b24KKyAgICAgICAgZm9yICggOyAoY3VycmVudCA9IGRhdGFUeXBlc1srK2ldKTsgKSB7CisKKyAg
ICAgICAgICAgICAgICAvLyBUaGVyZSdzIG9ubHkgd29yayB0byBkbyBpZiBjdXJyZW50IGRhdGFU
eXBlIGlzIG5vbi1hdXRvCisgICAgICAgICAgICAgICAgaWYgKCBjdXJyZW50ICE9PSAiKiIgKSB7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgcmVzcG9uc2UgaWYgcHJldiBk
YXRhVHlwZSBpcyBub24tYXV0byBhbmQgZGlmZmVycyBmcm9tIGN1cnJlbnQKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggcHJldiAhPT0gIioiICYmIHByZXYgIT09IGN1cnJlbnQgKSB7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2VlayBhIGRpcmVjdCBjb252ZXJ0
ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udiA9IGNvbnZlcnRlcnNbIHBy
ZXYgKyAiICIgKyBjdXJyZW50IF0gfHwgY29udmVydGVyc1sgIiogIiArIGN1cnJlbnQgXTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBub25lIGZvdW5kLCBzZWVrIGEg
cGFpcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFjb252ICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGNvbnYyIGluIGNvbnZl
cnRlcnMgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIElmIGNvbnYyIG91dHB1dHMgY3VycmVudAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gY29udjIuc3BsaXQoIiAiKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdG1wWyAxIF0gPT09
IGN1cnJlbnQgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgcHJldiBjYW4gYmUgY29udmVydGVkIHRvIGFjY2VwdGVkIGlu
cHV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgIiAiICsgdG1wWyAwIF0gXSB8fAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnZlcnRlcnNbICIqICIgKyB0bXBbIDAgXSBdOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbnYgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Q29uZGVuc2UgZXF1aXZhbGVuY2UgY29udmVydGVycworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29udiA9PT0gdHJ1
ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnYgPSBjb252ZXJ0ZXJzWyBjb252MiBdOworCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGludGVybWVkaWF0ZSBkYXRhVHlwZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoIGNvbnZlcnRlcnNbIGNvbnYyIF0gIT09IHRydWUgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50ID0gdG1wWyAwIF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZXMuc3BsaWNl
KCBpLS0sIDAsIGN1cnJlbnQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFwcGx5IGNvbnZl
cnRlciAoaWYgbm90IGFuIGVxdWl2YWxlbmNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGNvbnYgIT09IHRydWUgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBVbmxlc3MgZXJyb3JzIGFyZSBhbGxvd2VkIHRvIGJ1YmJsZSwgY2F0
Y2ggYW5kIHJldHVybiB0aGVtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBjb252ICYmIHNbInRocm93cyJdICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IGNv
bnYoIHJlc3BvbnNlICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGNhdGNoICggZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgc3RhdGU6ICJwYXJzZXJlcnJvciIsIGVy
cm9yOiBjb252ID8gZSA6ICJObyBjb252ZXJzaW9uIGZyb20gIiArIHByZXYgKyAiIHRvICIgKyBj
dXJyZW50IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBwcmV2IGZvciBuZXh0IGl0ZXJhdGlvbgor
ICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9IGN1cnJlbnQ7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsgc3RhdGU6ICJzdWNjZXNzIiwgZGF0YTog
cmVzcG9uc2UgfTsKK30KK3ZhciBvbGRDYWxsYmFja3MgPSBbXSwKKyAgICAgICAgcnF1ZXN0aW9u
ID0gL1w/LywKKyAgICAgICAgcmpzb25wID0gLyg9KVw/KD89JnwkKXxcP1w/LywKKyAgICAgICAg
bm9uY2UgPSBqUXVlcnkubm93KCk7CisKKy8vIERlZmF1bHQganNvbnAgc2V0dGluZ3MKK2pRdWVy
eS5hamF4U2V0dXAoeworICAgICAgICBqc29ucDogImNhbGxiYWNrIiwKKyAgICAgICAganNvbnBD
YWxsYmFjazogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gb2xk
Q2FsbGJhY2tzLnBvcCgpIHx8ICggalF1ZXJ5LmV4cGFuZG8gKyAiXyIgKyAoIG5vbmNlKysgKSAp
OworICAgICAgICAgICAgICAgIHRoaXNbIGNhbGxiYWNrIF0gPSB0cnVlOworICAgICAgICAgICAg
ICAgIHJldHVybiBjYWxsYmFjazsKKyAgICAgICAgfQorfSk7CisKKy8vIERldGVjdCwgbm9ybWFs
aXplIG9wdGlvbnMgYW5kIGluc3RhbGwgY2FsbGJhY2tzIGZvciBqc29ucCByZXF1ZXN0cworalF1
ZXJ5LmFqYXhQcmVmaWx0ZXIoICJqc29uIGpzb25wIiwgZnVuY3Rpb24oIHMsIG9yaWdpbmFsU2V0
dGluZ3MsIGpxWEhSICkgeworCisgICAgICAgIHZhciBjYWxsYmFja05hbWUsIG92ZXJ3cml0dGVu
LCByZXNwb25zZUNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICBkYXRhID0gcy5kYXRhLAorICAg
ICAgICAgICAgICAgIHVybCA9IHMudXJsLAorICAgICAgICAgICAgICAgIGhhc0NhbGxiYWNrID0g
cy5qc29ucCAhPT0gZmFsc2UsCisgICAgICAgICAgICAgICAgcmVwbGFjZUluVXJsID0gaGFzQ2Fs
bGJhY2sgJiYgcmpzb25wLnRlc3QoIHVybCApLAorICAgICAgICAgICAgICAgIHJlcGxhY2VJbkRh
dGEgPSBoYXNDYWxsYmFjayAmJiAhcmVwbGFjZUluVXJsICYmIHR5cGVvZiBkYXRhID09PSAic3Ry
aW5nIiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgISggcy5jb250ZW50VHlwZSB8fCAiIiAp
LmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpICYmCisgICAgICAg
ICAgICAgICAgICAgICAgICByanNvbnAudGVzdCggZGF0YSApOworCisgICAgICAgIC8vIEhhbmRs
ZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyAianNvbnAiIG9yIHdlIGhhdmUgYSBwYXJh
bWV0ZXIgdG8gc2V0CisgICAgICAgIGlmICggcy5kYXRhVHlwZXNbIDAgXSA9PT0gImpzb25wIiB8
fCByZXBsYWNlSW5VcmwgfHwgcmVwbGFjZUluRGF0YSApIHsKKworICAgICAgICAgICAgICAgIC8v
IEdldCBjYWxsYmFjayBuYW1lLCByZW1lbWJlcmluZyBwcmVleGlzdGluZyB2YWx1ZSBhc3NvY2lh
dGVkIHdpdGggaXQKKyAgICAgICAgICAgICAgICBjYWxsYmFja05hbWUgPSBzLmpzb25wQ2FsbGJh
Y2sgPSBqUXVlcnkuaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgPworICAgICAgICAgICAg
ICAgICAgICAgICAgcy5qc29ucENhbGxiYWNrKCkgOgorICAgICAgICAgICAgICAgICAgICAgICAg
cy5qc29ucENhbGxiYWNrOworICAgICAgICAgICAgICAgIG92ZXJ3cml0dGVuID0gd2luZG93WyBj
YWxsYmFja05hbWUgXTsKKworICAgICAgICAgICAgICAgIC8vIEluc2VydCBjYWxsYmFjayBpbnRv
IHVybCBvciBmb3JtIGRhdGEKKyAgICAgICAgICAgICAgICBpZiAoIHJlcGxhY2VJblVybCApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHMudXJsID0gdXJsLnJlcGxhY2UoIHJqc29ucCwgIiQx
IiArIGNhbGxiYWNrTmFtZSApOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHJlcGxhY2VJ
bkRhdGEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzLmRhdGEgPSBkYXRhLnJlcGxhY2Uo
IHJqc29ucCwgIiQxIiArIGNhbGxiYWNrTmFtZSApOworICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIGhhc0NhbGxiYWNrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcy51cmwgKz0gKCBy
cXVlc3Rpb24udGVzdCggdXJsICkgPyAiJiIgOiAiPyIgKSArIHMuanNvbnAgKyAiPSIgKyBjYWxs
YmFja05hbWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gVXNlIGRh
dGEgY29udmVydGVyIHRvIHJldHJpZXZlIGpzb24gYWZ0ZXIgc2NyaXB0IGV4ZWN1dGlvbgorICAg
ICAgICAgICAgICAgIHMuY29udmVydGVyc1sic2NyaXB0IGpzb24iXSA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhcmVzcG9uc2VDb250YWluZXIgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1lICsg
IiB3YXMgbm90IGNhbGxlZCIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZUNvbnRhaW5lclsgMCBdOworICAgICAgICAg
ICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAvLyBmb3JjZSBqc29uIGRhdGFUeXBlCisgICAg
ICAgICAgICAgICAgcy5kYXRhVHlwZXNbIDAgXSA9ICJqc29uIjsKKworICAgICAgICAgICAgICAg
IC8vIEluc3RhbGwgY2FsbGJhY2sKKyAgICAgICAgICAgICAgICB3aW5kb3dbIGNhbGxiYWNrTmFt
ZSBdID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUNvbnRh
aW5lciA9IGFyZ3VtZW50czsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAg
Ly8gQ2xlYW4tdXAgZnVuY3Rpb24gKGZpcmVzIGFmdGVyIGNvbnZlcnRlcnMpCisgICAgICAgICAg
ICAgICAganFYSFIuYWx3YXlzKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gUmVzdG9yZSBwcmVleGlzdGluZyB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgd2lu
ZG93WyBjYWxsYmFja05hbWUgXSA9IG92ZXJ3cml0dGVuOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBTYXZlIGJhY2sgYXMgZnJlZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBz
WyBjYWxsYmFja05hbWUgXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
bWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0aGluZ3Mg
YXJvdW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuanNvbnBDYWxsYmFjayA9
IG9yaWdpbmFsU2V0dGluZ3MuanNvbnBDYWxsYmFjazsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBzYXZlIHRoZSBjYWxsYmFjayBuYW1lIGZvciBmdXR1cmUgdXNlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05h
bWUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGpRdWVyeS5p
c0Z1bmN0aW9uKCBvdmVyd3JpdHRlbiApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvdmVyd3JpdHRlbiggcmVzcG9uc2VDb250YWluZXJbIDAgXSApOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUNvbnRhaW5l
ciA9IG92ZXJ3cml0dGVuID0gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgIH0pOworCisgICAg
ICAgICAgICAgICAgLy8gRGVsZWdhdGUgdG8gc2NyaXB0CisgICAgICAgICAgICAgICAgcmV0dXJu
ICJzY3JpcHQiOworICAgICAgICB9Cit9KTsKKy8vIEluc3RhbGwgc2NyaXB0IGRhdGFUeXBlCitq
UXVlcnkuYWpheFNldHVwKHsKKyAgICAgICAgYWNjZXB0czogeworICAgICAgICAgICAgICAgIHNj
cmlwdDogInRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRp
b24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0IgorICAgICAgICB9LAorICAg
ICAgICBjb250ZW50czogeworICAgICAgICAgICAgICAgIHNjcmlwdDogL2phdmFzY3JpcHR8ZWNt
YXNjcmlwdC8KKyAgICAgICAgfSwKKyAgICAgICAgY29udmVydGVyczogeworICAgICAgICAgICAg
ICAgICJ0ZXh0IHNjcmlwdCI6IGZ1bmN0aW9uKCB0ZXh0ICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5Lmdsb2JhbEV2YWwoIHRleHQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0ZXh0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorfSk7CisKKy8vIEhh
bmRsZSBjYWNoZSdzIHNwZWNpYWwgY2FzZSBhbmQgZ2xvYmFsCitqUXVlcnkuYWpheFByZWZpbHRl
ciggInNjcmlwdCIsIGZ1bmN0aW9uKCBzICkgeworICAgICAgICBpZiAoIHMuY2FjaGUgPT09IHVu
ZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICBzLmNhY2hlID0gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCBzLmNyb3NzRG9tYWluICkgeworICAgICAgICAgICAgICAgIHMudHlwZSA9
ICJHRVQiOworICAgICAgICAgICAgICAgIHMuZ2xvYmFsID0gZmFsc2U7CisgICAgICAgIH0KK30p
OworCisvLyBCaW5kIHNjcmlwdCB0YWcgaGFjayB0cmFuc3BvcnQKK2pRdWVyeS5hamF4VHJhbnNw
b3J0KCAic2NyaXB0IiwgZnVuY3Rpb24ocykgeworCisgICAgICAgIC8vIFRoaXMgdHJhbnNwb3J0
IG9ubHkgZGVhbHMgd2l0aCBjcm9zcyBkb21haW4gcmVxdWVzdHMKKyAgICAgICAgaWYgKCBzLmNy
b3NzRG9tYWluICkgeworCisgICAgICAgICAgICAgICAgdmFyIHNjcmlwdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCAiaGVhZCIgKVswXSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CisKKyAg
ICAgICAgICAgICAgICByZXR1cm4geworCisgICAgICAgICAgICAgICAgICAgICAgICBzZW5kOiBm
dW5jdGlvbiggXywgY2FsbGJhY2sgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggInNjcmlwdCIgKTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXN5bmMgPSAiYXN5bmMiOworCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcy5zY3JpcHRDaGFyc2V0ICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5jaGFyc2V0ID0gcy5z
Y3JpcHRDaGFyc2V0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LnNyYyA9IHMudXJsOworCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0dGFjaCBoYW5kbGVycyBmb3IgYWxsIGJyb3dz
ZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5vbmxvYWQgPSBzY3Jp
cHQub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oIF8sIGlzQWJvcnQgKSB7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlzQWJvcnQgfHwgIXNjcmlw
dC5yZWFkeVN0YXRlIHx8IC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoIHNjcmlwdC5yZWFkeVN0YXRl
ICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEhhbmRsZSBtZW1vcnkgbGVhayBpbiBJRQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IHNjcmlwdC5vbnJlYWR5c3RhdGVj
aGFuZ2UgPSBudWxsOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBSZW1vdmUgdGhlIHNjcmlwdAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBoZWFkICYmIHNjcmlwdC5wYXJlbnROb2RlICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWFkLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRGVyZWZlcmVuY2UgdGhlIHNjcmlwdAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0ID0gdW5kZWZpbmVkOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsYmFj
ayBpZiBub3QgYWJvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggIWlzQWJvcnQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCAyMDAsICJzdWNjZXNzIiApOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGluc2Vy
dEJlZm9yZSBpbnN0ZWFkIG9mIGFwcGVuZENoaWxkICB0byBjaXJjdW12ZW50IGFuIElFNiBidWcu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgYXJpc2VzIHdoZW4gYSBi
YXNlIG5vZGUgaXMgdXNlZCAoIzI3MDkgYW5kICM0Mzc4KS4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoIHNjcmlwdCwgaGVhZC5maXJzdENoaWxkICk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgICAgICBh
Ym9ydDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
c2NyaXB0ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlw
dC5vbmxvYWQoIDAsIDEgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisgICAgICAgIH0KK30p
OwordmFyIHhockNhbGxiYWNrcywKKyAgICAgICAgLy8gIzUyODA6IEludGVybmV0IEV4cGxvcmVy
IHdpbGwga2VlcCBjb25uZWN0aW9ucyBhbGl2ZSBpZiB3ZSBkb24ndCBhYm9ydCBvbiB1bmxvYWQK
KyAgICAgICAgeGhyT25VbmxvYWRBYm9ydCA9IHdpbmRvdy5BY3RpdmVYT2JqZWN0ID8gZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgLy8gQWJvcnQgYWxsIHBlbmRpbmcgcmVxdWVzdHMKKyAg
ICAgICAgICAgICAgICBmb3IgKCB2YXIga2V5IGluIHhockNhbGxiYWNrcyApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHhockNhbGxiYWNrc1sga2V5IF0oIDAsIDEgKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgIH0gOiBmYWxzZSwKKyAgICAgICAgeGhySWQgPSAwOworCisvLyBGdW5j
dGlvbnMgdG8gY3JlYXRlIHhocnMKK2Z1bmN0aW9uIGNyZWF0ZVN0YW5kYXJkWEhSKCkgeworICAg
ICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgd2luZG93LlhNTEh0dHBSZXF1
ZXN0KCk7CisgICAgICAgIH0gY2F0Y2goIGUgKSB7fQorfQorCitmdW5jdGlvbiBjcmVhdGVBY3Rp
dmVYSFIoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5k
b3cuQWN0aXZlWE9iamVjdCggIk1pY3Jvc29mdC5YTUxIVFRQIiApOworICAgICAgICB9IGNhdGNo
KCBlICkge30KK30KKworLy8gQ3JlYXRlIHRoZSByZXF1ZXN0IG9iamVjdAorLy8gKFRoaXMgaXMg
c3RpbGwgYXR0YWNoZWQgdG8gYWpheFNldHRpbmdzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5
KQoralF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIgPSB3aW5kb3cuQWN0aXZlWE9iamVjdCA/CisgICAg
ICAgIC8qIE1pY3Jvc29mdCBmYWlsZWQgdG8gcHJvcGVybHkKKyAgICAgICAgICogaW1wbGVtZW50
IHRoZSBYTUxIdHRwUmVxdWVzdCBpbiBJRTcgKGNhbid0IHJlcXVlc3QgbG9jYWwgZmlsZXMpLAor
ICAgICAgICAgKiBzbyB3ZSB1c2UgdGhlIEFjdGl2ZVhPYmplY3Qgd2hlbiBpdCBpcyBhdmFpbGFi
bGUKKyAgICAgICAgICogQWRkaXRpb25hbGx5IFhNTEh0dHBSZXF1ZXN0IGNhbiBiZSBkaXNhYmxl
ZCBpbiBJRTcvSUU4IHNvCisgICAgICAgICAqIHdlIG5lZWQgYSBmYWxsYmFjay4KKyAgICAgICAg
ICovCisgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5p
c0xvY2FsICYmIGNyZWF0ZVN0YW5kYXJkWEhSKCkgfHwgY3JlYXRlQWN0aXZlWEhSKCk7CisgICAg
ICAgIH0gOgorICAgICAgICAvLyBGb3IgYWxsIG90aGVyIGJyb3dzZXJzLCB1c2UgdGhlIHN0YW5k
YXJkIFhNTEh0dHBSZXF1ZXN0IG9iamVjdAorICAgICAgICBjcmVhdGVTdGFuZGFyZFhIUjsKKwor
Ly8gRGV0ZXJtaW5lIHN1cHBvcnQgcHJvcGVydGllcworKGZ1bmN0aW9uKCB4aHIgKSB7CisgICAg
ICAgIGpRdWVyeS5leHRlbmQoIGpRdWVyeS5zdXBwb3J0LCB7CisgICAgICAgICAgICAgICAgYWph
eDogISF4aHIsCisgICAgICAgICAgICAgICAgY29yczogISF4aHIgJiYgKCAid2l0aENyZWRlbnRp
YWxzIiBpbiB4aHIgKQorICAgICAgICB9KTsKK30pKCBqUXVlcnkuYWpheFNldHRpbmdzLnhocigp
ICk7CisKKy8vIENyZWF0ZSB0cmFuc3BvcnQgaWYgdGhlIGJyb3dzZXIgY2FuIHByb3ZpZGUgYW4g
eGhyCitpZiAoIGpRdWVyeS5zdXBwb3J0LmFqYXggKSB7CisKKyAgICAgICAgalF1ZXJ5LmFqYXhU
cmFuc3BvcnQoZnVuY3Rpb24oIHMgKSB7CisgICAgICAgICAgICAgICAgLy8gQ3Jvc3MgZG9tYWlu
IG9ubHkgYWxsb3dlZCBpZiBzdXBwb3J0ZWQgdGhyb3VnaCBYTUxIdHRwUmVxdWVzdAorICAgICAg
ICAgICAgICAgIGlmICggIXMuY3Jvc3NEb21haW4gfHwgalF1ZXJ5LnN1cHBvcnQuY29ycyApIHsK
KworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrOworCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5k
OiBmdW5jdGlvbiggaGVhZGVycywgY29tcGxldGUgKSB7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBHZXQgYSBuZXcgeGhyCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGhhbmRsZSwgaSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhociA9IHMueGhyKCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcGVuIHRoZSBzb2NrZXQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQYXNzaW5nIG51bGwgdXNlcm5hbWUs
IGdlbmVyYXRlcyBhIGxvZ2luIHBvcHVwIG9uIE9wZXJhICgjMjg2NSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHMudXNlcm5hbWUgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIub3Blbiggcy50eXBlLCBz
LnVybCwgcy5hc3luYywgcy51c2VybmFtZSwgcy5wYXNzd29yZCApOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIub3Blbiggcy50eXBlLCBzLnVybCwgcy5hc3lu
YyApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFwcGx5IGN1c3RvbSBmaWVsZHMg
aWYgcHJvdmlkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IHMueGhyRmllbGRzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICggaSBpbiBzLnhockZpZWxkcyApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyWyBpIF0gPSBzLnhockZpZWxk
c1sgaSBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE92ZXJyaWRlIG1pbWUgdHlwZSBpZiBu
ZWVkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHMubWlt
ZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIub3ZlcnJpZGVNaW1lVHlwZSggcy5taW1lVHlw
ZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFgtUmVxdWVzdGVkLVdpdGggaGVh
ZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGNyb3Nz
LWRvbWFpbiByZXF1ZXN0cywgc2VlaW5nIGFzIGNvbmRpdGlvbnMgZm9yIGEgcHJlZmxpZ2h0IGFy
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFraW4gdG8gYSBq
aWdzYXcgcHV6emxlLCB3ZSBzaW1wbHkgbmV2ZXIgc2V0IGl0IHRvIGJlIHN1cmUuCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKGl0IGNhbiBhbHdheXMgYmUgc2V0
IG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgb3IgZXZlbiB1c2luZyBhamF4U2V0dXApCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIHNhbWUtZG9tYWluIHJlcXVl
c3RzLCB3b24ndCBjaGFuZ2UgaGVhZGVyIGlmIGFscmVhZHkgcHJvdmlkZWQuCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhcy5jcm9zc0RvbWFpbiAmJiAhaGVh
ZGVyc1siWC1SZXF1ZXN0ZWQtV2l0aCJdICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1sgIlgtUmVxdWVzdGVkLVdpdGgiIF0gPSAiWE1M
SHR0cFJlcXVlc3QiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5lZWQgYW4gZXh0
cmEgdHJ5L2NhdGNoIGZvciBjcm9zcyBkb21haW4gcmVxdWVzdHMgaW4gRmlyZWZveCAzCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgaW4gaGVhZGVycyApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eGhyLnNldFJlcXVlc3RIZWFkZXIoIGksIGhlYWRlcnNbIGkgXSApOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goIF8gKSB7fQorCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRG8gc2VuZCB0aGUgcmVxdWVzdAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbWF5IHJhaXNlIGFuIGV4Y2VwdGlv
biB3aGljaCBpcyBhY3R1YWxseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGhhbmRsZWQgaW4galF1ZXJ5LmFqYXggKHNvIG5vIHRyeS9jYXRjaCBoZXJlKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5zZW5kKCAoIHMuaGFzQ29u
dGVudCAmJiBzLmRhdGEgKSB8fCBudWxsICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBMaXN0ZW5lcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24oIF8sIGlzQWJvcnQgKSB7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0dXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1
c1RleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3BvbnNlSGVhZGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWw7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpcmVmb3ggdGhyb3dzIGV4Y2Vw
dGlvbnMgd2hlbiBhY2Nlc3NpbmcgcHJvcGVydGllcworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2YgYW4geGhyIHdoZW4gYSBuZXR3b3JrIGVycm9y
IG9jY3VycmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBodHRwOi8vaGVscGZ1bC5rbm9icy1kaWFscy5jb20vaW5kZXgucGhwL0NvbXBvbmVudF9y
ZXR1cm5lZF9mYWlsdXJlX2NvZGU6XzB4ODAwNDAxMTFfKE5TX0VSUk9SX05PVF9BVkFJTEFCTEUp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFdhcyBuZXZlciBjYWxsZWQgYW5kIGlzIGFib3J0ZWQgb3IgY29tcGxldGUKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxs
YmFjayAmJiAoIGlzQWJvcnQgfHwgeGhyLnJlYWR5U3RhdGUgPT09IDQgKSApIHsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIE9ubHkgY2FsbGVkIG9uY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHVuZGVmaW5lZDsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIERvIG5vdCBrZWVwIGFzIGFjdGl2ZSBhbnltb3JlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBoYW5kbGUg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0galF1ZXJ5Lm5vb3A7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHhock9uVW5sb2FkQWJvcnQgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlbGV0ZSB4aHJDYWxsYmFja3NbIGhhbmRsZSBdOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgYW4gYWJvcnQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlz
QWJvcnQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBYm9ydCBpdCBtYW51YWxseSBpZiBuZWVkZWQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggeGhyLnJlYWR5U3RhdGUgIT09IDQgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHhoci5hYm9ydCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzcG9uc2VIZWFkZXJzID0geGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzcG9uc2VzID0ge307CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWwgPSB4aHIucmVzcG9uc2VY
TUw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnN0cnVjdCByZXNwb25zZSBsaXN0CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHhtbCAmJiB4bWwuZG9jdW1lbnRFbGVtZW50IC8qICM0OTU4ICovICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZXMueG1sID0geG1sOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHJlcXVlc3RpbmcgYmluYXJ5IGRhdGEsIElF
Ni05IHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbiBhbnkgYXR0
ZW1wdCB0byBhY2Nlc3MgcmVzcG9uc2VUZXh0ICgjMTE0MjYpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZXMudGV4dCA9IHhoci5yZXNwb25zZVRl
eHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKCBlICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBGaXJlZm94IHRocm93cyBhbiBleGNlcHRpb24gd2hlbiBhY2Nlc3Np
bmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHN0YXR1c1RleHQgZm9yIGZhdWx0eSBjcm9zcy1kb21haW4g
cmVxdWVzdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXR1c1RleHQgPSB4aHIuc3RhdHVzVGV4dDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goIGUgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5vcm1hbGl6ZSB3aXRoIFdlYmtpdCBnaXZp
bmcgYW4gZW1wdHkgc3RhdHVzVGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0
ID0gIiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbHRlciBzdGF0
dXMgZm9yIG5vbiBzdGFuZGFyZCBiZWhhdmlvcnMKKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhl
IHJlcXVlc3QgaXMgbG9jYWwgYW5kIHdlIGhhdmUgZGF0YTogYXNzdW1lIGEgc3VjY2VzcworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gKHN1Y2Nlc3Mgd2l0aCBubyBkYXRhIHdvbid0IGdldCBub3RpZmllZCwg
dGhhdCdzIHRoZSBiZXN0IHdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4gZG8gZ2l2ZW4gY3VycmVu
dCBpbXBsZW1lbnRhdGlvbnMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFzdGF0dXMgJiYgcy5pc0xv
Y2FsICYmICFzLmNyb3NzRG9tYWluICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMg
PSByZXNwb25zZXMudGV4dCA/IDIwMCA6IDQwNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFIC0gIzE0
NTA6IHNvbWV0aW1lcyByZXR1cm5zIDEyMjMgd2hlbiBpdCBzaG91bGQgYmUgMjA0CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDEyMjMgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXR1cyA9IDIwNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goIGZpcmVm
b3hBY2Nlc3NFeGNlcHRpb24gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlzQWJvcnQgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGUo
IC0xLCBmaXJlZm94QWNjZXNzRXhjZXB0aW9uICk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbCBjb21wbGV0ZSBpZiBuZWVkZWQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzcG9uc2VzICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb21wbGV0ZSggc3RhdHVzLCBzdGF0dXNUZXh0LCByZXNwb25zZXMsIHJlc3BvbnNlSGVhZGVy
cyApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFzLmFzeW5jICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UncmUgaW4gc3lu
YyBtb2RlIHdlIGZpcmUgdGhlIGNhbGxiYWNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHhoci5yZWFkeVN0YXRlID09PSA0ICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKElFNiAmIElF
NykgaWYgaXQncyBpbiBjYWNoZSBhbmQgaGFzIGJlZW4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHJpZXZlZCBkaXJlY3RseSB3ZSBuZWVkIHRv
IGZpcmUgdGhlIGNhbGxiYWNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZXRUaW1lb3V0KCBjYWxsYmFjaywgMCApOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUgPSArK3hocklkOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB4aHJPblVubG9hZEFib3J0ICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBDcmVhdGUgdGhlIGFjdGl2ZSB4aHJzIGNhbGxiYWNrcyBsaXN0IGlmIG5lZWRlZAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBh
bmQgYXR0YWNoIHRoZSB1bmxvYWQgaGFuZGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICF4aHJDYWxsYmFja3MgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeGhyQ2FsbGJhY2tzID0ge307CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCB3aW5kb3cgKS51bmxvYWQoIHho
ck9uVW5sb2FkQWJvcnQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdG8gbGlzdCBvZiBhY3RpdmUgeGhycyBjYWxsYmFj
a3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeGhyQ2FsbGJhY2tzWyBoYW5kbGUgXSA9IGNhbGxiYWNrOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGNhbGxiYWNr
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhYm9ydDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBjYWxsYmFjayApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbGxiYWNrKDAsMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSk7Cit9
Cit2YXIgZnhOb3csIHRpbWVySWQsCisgICAgICAgIHJmeHR5cGVzID0gL14oPzp0b2dnbGV8c2hv
d3xoaWRlKSQvLAorICAgICAgICByZnhudW0gPSBuZXcgUmVnRXhwKCAiXig/OihbLStdKT18KSgi
ICsgY29yZV9wbnVtICsgIikoW2EteiVdKikkIiwgImkiICksCisgICAgICAgIHJydW4gPSAvcXVl
dWVIb29rcyQvLAorICAgICAgICBhbmltYXRpb25QcmVmaWx0ZXJzID0gWyBkZWZhdWx0UHJlZmls
dGVyIF0sCisgICAgICAgIHR3ZWVuZXJzID0geworICAgICAgICAgICAgICAgICIqIjogW2Z1bmN0
aW9uKCBwcm9wLCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQsIHVu
aXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR3ZWVuID0gdGhpcy5jcmVhdGVU
d2VlbiggcHJvcCwgdmFsdWUgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFy
dHMgPSByZnhudW0uZXhlYyggdmFsdWUgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGFyZ2V0ID0gdHdlZW4uY3VyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXJ0ID0gK3RhcmdldCB8fCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
Y2FsZSA9IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEl0ZXJhdGlvbnMg
PSAyMDsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwYXJ0cyApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gK3BhcnRzWzJdOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bml0ID0gcGFydHNbM10gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBw
cm9wIF0gPyAiIiA6ICJweCIgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBXZSBuZWVkIHRvIGNvbXB1dGUgc3RhcnRpbmcgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCB1bml0ICE9PSAicHgiICYmIHN0YXJ0ICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0ZXJhdGl2ZWx5IGFwcHJveGltYXRlIGZy
b20gYSBub256ZXJvIHN0YXJ0aW5nIHBvaW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gUHJlZmVyIHRoZSBjdXJyZW50IHByb3BlcnR5LCBiZWNhdXNlIHRoaXMg
cHJvY2VzcyB3aWxsIGJlIHRyaXZpYWwgaWYgaXQgdXNlcyB0aGUgc2FtZSB1bml0cworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIGVuZCBvciBh
IHNpbXBsZSBjb25zdGFudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXJ0ID0galF1ZXJ5LmNzcyggdHdlZW4uZWxlbSwgcHJvcCwgdHJ1ZSApIHx8IGVuZCB8fCAx
OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8geworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgcHJldmlvdXMg
aXRlcmF0aW9uIHplcm9lZCBvdXQsIGRvdWJsZSB1bnRpbCB3ZSBnZXQgKnNvbWV0aGluZyoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBhIHN0
cmluZyBmb3IgZG91YmxpbmcgZmFjdG9yIHNvIHdlIGRvbid0IGFjY2lkZW50YWxseSBzZWUgc2Nh
bGUgYXMgdW5jaGFuZ2VkIGJlbG93CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzY2FsZSA9IHNjYWxlIHx8ICIuNSI7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkanVzdCBhbmQgYXBwbHkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gc3RhcnQg
LyBzY2FsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5zdHlsZSggdHdlZW4uZWxlbSwgcHJvcCwgc3RhcnQgKyB1bml0ICk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgc2NhbGUsIHRvbGVy
YXRpbmcgemVybyBvciBOYU4gZnJvbSB0d2Vlbi5jdXIoKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEFuZCBicmVha2luZyB0aGUgbG9vcCBpZiBzY2FsZSBpcyB1
bmNoYW5nZWQgb3IgcGVyZmVjdCwgb3IgaWYgd2UndmUganVzdCBoYWQgZW5vdWdoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoIHNjYWxlICE9PSAoc2Nh
bGUgPSB0d2Vlbi5jdXIoKSAvIHRhcmdldCkgJiYgc2NhbGUgIT09IDEgJiYgLS1tYXhJdGVyYXRp
b25zICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0d2Vlbi51bml0ID0gdW5pdDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHdlZW4uc3RhcnQgPSBzdGFydDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgYSArPS8tPSB0b2tlbiB3YXMgcHJvdmlkZWQsIHdlJ3JlIGRvaW5n
IGEgcmVsYXRpdmUgYW5pbWF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR3
ZWVuLmVuZCA9IHBhcnRzWzFdID8gc3RhcnQgKyAoIHBhcnRzWzFdICsgMSApICogZW5kIDogZW5k
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHR3ZWVuOworICAgICAgICAgICAgICAgIH1dCisgICAgICAgIH07CisKKy8vIEFuaW1hdGlv
bnMgY3JlYXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNocm9ub3VzbHkKK2Z1bmN0aW9u
IGNyZWF0ZUZ4Tm93KCkgeworICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgIGZ4Tm93ID0gdW5kZWZpbmVkOworICAgICAgICB9LCAwICk7CisgICAgICAgIHJl
dHVybiAoIGZ4Tm93ID0galF1ZXJ5Lm5vdygpICk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVR3ZWVu
cyggYW5pbWF0aW9uLCBwcm9wcyApIHsKKyAgICAgICAgalF1ZXJ5LmVhY2goIHByb3BzLCBmdW5j
dGlvbiggcHJvcCwgdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSAo
IHR3ZWVuZXJzWyBwcm9wIF0gfHwgW10gKS5jb25jYXQoIHR3ZWVuZXJzWyAiKiIgXSApLAorICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
bGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7CisgICAgICAgICAgICAgICAgZm9yICggOyBpbmRl
eCA8IGxlbmd0aDsgaW5kZXgrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29s
bGVjdGlvblsgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIHByb3AsIHZhbHVlICkgKSB7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UncmUgZG9uZSB3aXRoIHRoaXMgcHJv
cGVydHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSk7Cit9CisKK2Z1
bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHsKKyAgICAgICAg
dmFyIHJlc3VsdCwKKyAgICAgICAgICAgICAgICBpbmRleCA9IDAsCisgICAgICAgICAgICAgICAg
dHdlZW5lckluZGV4ID0gMCwKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBhbmltYXRpb25QcmVm
aWx0ZXJzLmxlbmd0aCwKKyAgICAgICAgICAgICAgICBkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJl
ZCgpLmFsd2F5cyggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBkb24n
dCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3IKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZSB0aWNrLmVsZW07CisgICAgICAgICAgICAgICAgfSksCisgICAgICAgICAg
ICAgICAgdGljayA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1
cnJlbnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVtYWluaW5nID0gTWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUg
KyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSApLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBhcmNoYWljIGNyYXNoIGJ1ZyB3b24ndCBhbGxvdyB1cyB0byB1c2Ug
MSAtICggMC41IHx8IDAgKSAoIzEyNDk3KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZW1wID0gcmVtYWluaW5nIC8gYW5pbWF0aW9uLmR1cmF0aW9uIHx8IDAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnQgPSAxIC0gdGVtcCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kZXggPSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsZW5ndGggPSBhbmltYXRpb24udHdlZW5zLmxlbmd0aDsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICggOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCBwZXJj
ZW50ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBwZXJjZW50LCByZW1h
aW5pbmcgXSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcGVyY2VudCA8IDEgJiYg
bGVuZ3RoICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVtYWlu
aW5nOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uIF0g
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg
YW5pbWF0aW9uID0gZGVmZXJyZWQucHJvbWlzZSh7CisgICAgICAgICAgICAgICAgICAgICAgICBl
bGVtOiBlbGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGpRdWVyeS5leHRlbmQo
IHt9LCBwcm9wZXJ0aWVzICksCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRzOiBqUXVlcnku
ZXh0ZW5kKCB0cnVlLCB7IHNwZWNpYWxFYXNpbmc6IHt9IH0sIG9wdGlvbnMgKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG9yaWdpbmFsT3B0aW9uczogb3B0aW9ucywKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXJ0VGltZTogZnhOb3cgfHwgY3JlYXRlRnhOb3coKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdHdlZW5zOiBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVR3ZWVu
OiBmdW5jdGlvbiggcHJvcCwgZW5kLCBlYXNpbmcgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMs
IHByb3AsIGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmdbIHByb3AgXSB8fCBhbmltYXRpb24ub3B0
cy5lYXNpbmcgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLnR3
ZWVucy5wdXNoKCB0d2VlbiApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHdlZW47CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAg
ICAgICAgc3RvcDogZnVuY3Rpb24oIGdvdG9FbmQgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBpbmRleCA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gaWYgd2UgYXJlIGdvaW5nIHRvIHRoZSBlbmQsIHdlIHdhbnQgdG8gcnVuIGFs
bCB0aGUgdHdlZW5zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
b3RoZXJ3aXNlIHdlIHNraXAgdGhpcyBwYXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGVuZ3RoID0gZ290b0VuZCA/IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoIDog
MDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IGluZGV4IDwgbGVu
Z3RoIDsgaW5kZXgrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggMSApOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVz
b2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFzdCBmcmFtZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBvdGhlcndpc2UsIHJlamVjdAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGdvdG9FbmQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5k
IF0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZWplY3RXaXRoKCBlbGVt
LCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSksCisgICAgICAgICAgICAg
ICAgcHJvcHMgPSBhbmltYXRpb24ucHJvcHM7CisKKyAgICAgICAgcHJvcEZpbHRlciggcHJvcHMs
IGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmcgKTsKKworICAgICAgICBmb3IgKCA7IGluZGV4
IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBhbmltYXRp
b25QcmVmaWx0ZXJzWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgZWxlbSwgcHJvcHMsIGFuaW1h
dGlvbi5vcHRzICk7CisgICAgICAgICAgICAgICAgaWYgKCByZXN1bHQgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGNyZWF0ZVR3ZWVucyggYW5pbWF0aW9uLCBwcm9wcyApOworCisgICAgICAg
IGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGFuaW1hdGlvbi5vcHRzLnN0YXJ0ICkgKSB7CisgICAg
ICAgICAgICAgICAgYW5pbWF0aW9uLm9wdHMuc3RhcnQuY2FsbCggZWxlbSwgYW5pbWF0aW9uICk7
CisgICAgICAgIH0KKworICAgICAgICBqUXVlcnkuZngudGltZXIoCisgICAgICAgICAgICAgICAg
alF1ZXJ5LmV4dGVuZCggdGljaywgeworICAgICAgICAgICAgICAgICAgICAgICAgYW5pbTogYW5p
bWF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgcXVldWU6IGFuaW1hdGlvbi5vcHRzLnF1
ZXVlLAorICAgICAgICAgICAgICAgICAgICAgICAgZWxlbTogZWxlbQorICAgICAgICAgICAgICAg
IH0pCisgICAgICAgICk7CisKKyAgICAgICAgLy8gYXR0YWNoIGNhbGxiYWNrcyBmcm9tIG9wdGlv
bnMKKyAgICAgICAgcmV0dXJuIGFuaW1hdGlvbi5wcm9ncmVzcyggYW5pbWF0aW9uLm9wdHMucHJv
Z3Jlc3MgKQorICAgICAgICAgICAgICAgIC5kb25lKCBhbmltYXRpb24ub3B0cy5kb25lLCBhbmlt
YXRpb24ub3B0cy5jb21wbGV0ZSApCisgICAgICAgICAgICAgICAgLmZhaWwoIGFuaW1hdGlvbi5v
cHRzLmZhaWwgKQorICAgICAgICAgICAgICAgIC5hbHdheXMoIGFuaW1hdGlvbi5vcHRzLmFsd2F5
cyApOworfQorCitmdW5jdGlvbiBwcm9wRmlsdGVyKCBwcm9wcywgc3BlY2lhbEVhc2luZyApIHsK
KyAgICAgICAgdmFyIGluZGV4LCBuYW1lLCBlYXNpbmcsIHZhbHVlLCBob29rczsKKworICAgICAg
ICAvLyBjYW1lbENhc2UsIHNwZWNpYWxFYXNpbmcgYW5kIGV4cGFuZCBjc3NIb29rIHBhc3MKKyAg
ICAgICAgZm9yICggaW5kZXggaW4gcHJvcHMgKSB7CisgICAgICAgICAgICAgICAgbmFtZSA9IGpR
dWVyeS5jYW1lbENhc2UoIGluZGV4ICk7CisgICAgICAgICAgICAgICAgZWFzaW5nID0gc3BlY2lh
bEVhc2luZ1sgbmFtZSBdOworICAgICAgICAgICAgICAgIHZhbHVlID0gcHJvcHNbIGluZGV4IF07
CisgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNBcnJheSggdmFsdWUgKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVhc2luZyA9IHZhbHVlWyAxIF07CisgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZSA9IHByb3BzWyBpbmRleCBdID0gdmFsdWVbIDAgXTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIGluZGV4ICE9PSBuYW1lICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvcHNbIG5hbWUgXSA9IHZhbHVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgZGVsZXRlIHByb3BzWyBpbmRleCBdOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF07CisgICAgICAgICAg
ICAgICAgaWYgKCBob29rcyAmJiAiZXhwYW5kIiBpbiBob29rcyApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlID0gaG9va3MuZXhwYW5kKCB2YWx1ZSApOworICAgICAgICAgICAgICAg
ICAgICAgICAgZGVsZXRlIHByb3BzWyBuYW1lIF07CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG5vdCBxdWl0ZSAkLmV4dGVuZCwgdGhpcyB3b250IG92ZXJ3cml0ZSBrZXlzIGFscmVhZHkg
cHJlc2VudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsc28gLSByZXVzaW5nICdpbmRl
eCcgZnJvbSBhYm92ZSBiZWNhdXNlIHdlIGhhdmUgdGhlIGNvcnJlY3QgIm5hbWUiCisgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCAhKCBpbmRleCBpbiBwcm9wcyApICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzWyBpbmRleCBdID0gdmFsdWVbIGlu
ZGV4IF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbEVh
c2luZ1sgaW5kZXggXSA9IGVhc2luZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICB9Cit9CisKK2pRdWVyeS5BbmltYXRpb24gPSBqUXVl
cnkuZXh0ZW5kKCBBbmltYXRpb24sIHsKKworICAgICAgICB0d2VlbmVyOiBmdW5jdGlvbiggcHJv
cHMsIGNhbGxiYWNrICkgeworICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24o
IHByb3BzICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHByb3BzOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMgPSBbICIqIiBdOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcyA9IHByb3BzLnNwbGl0KCIg
Iik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFyIHByb3AsCisgICAg
ICAgICAgICAgICAgICAgICAgICBpbmRleCA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICBs
ZW5ndGggPSBwcm9wcy5sZW5ndGg7CisKKyAgICAgICAgICAgICAgICBmb3IgKCA7IGluZGV4IDwg
bGVuZ3RoIDsgaW5kZXgrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3AgPSBwcm9w
c1sgaW5kZXggXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR3ZWVuZXJzWyBwcm9wIF0gPSB0
d2VlbmVyc1sgcHJvcCBdIHx8IFtdOworICAgICAgICAgICAgICAgICAgICAgICAgdHdlZW5lcnNb
IHByb3AgXS51bnNoaWZ0KCBjYWxsYmFjayApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
fSwKKworICAgICAgICBwcmVmaWx0ZXI6IGZ1bmN0aW9uKCBjYWxsYmFjaywgcHJlcGVuZCApIHsK
KyAgICAgICAgICAgICAgICBpZiAoIHByZXBlbmQgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhbmltYXRpb25QcmVmaWx0ZXJzLnVuc2hpZnQoIGNhbGxiYWNrICk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblByZWZpbHRlcnMu
cHVzaCggY2FsbGJhY2sgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KK30pOworCitm
dW5jdGlvbiBkZWZhdWx0UHJlZmlsdGVyKCBlbGVtLCBwcm9wcywgb3B0cyApIHsKKyAgICAgICAg
dmFyIGluZGV4LCBwcm9wLCB2YWx1ZSwgbGVuZ3RoLCBkYXRhU2hvdywgdG9nZ2xlLCB0d2Vlbiwg
aG9va3MsIG9sZGZpcmUsCisgICAgICAgICAgICAgICAgYW5pbSA9IHRoaXMsCisgICAgICAgICAg
ICAgICAgc3R5bGUgPSBlbGVtLnN0eWxlLAorICAgICAgICAgICAgICAgIG9yaWcgPSB7fSwKKyAg
ICAgICAgICAgICAgICBoYW5kbGVkID0gW10sCisgICAgICAgICAgICAgICAgaGlkZGVuID0gZWxl
bS5ub2RlVHlwZSAmJiBpc0hpZGRlbiggZWxlbSApOworCisgICAgICAgIC8vIGhhbmRsZSBxdWV1
ZTogZmFsc2UgcHJvbWlzZXMKKyAgICAgICAgaWYgKCAhb3B0cy5xdWV1ZSApIHsKKyAgICAgICAg
ICAgICAgICBob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgImZ4IiApOworICAgICAg
ICAgICAgICAgIGlmICggaG9va3MudW5xdWV1ZWQgPT0gbnVsbCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGhvb2tzLnVucXVldWVkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9s
ZGZpcmUgPSBob29rcy5lbXB0eS5maXJlOworICAgICAgICAgICAgICAgICAgICAgICAgaG9va3Mu
ZW1wdHkuZmlyZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoICFob29rcy51bnF1ZXVlZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvbGRmaXJlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGhvb2tzLnVucXVldWVkKys7CisKKyAgICAgICAgICAgICAgICBhbmltLmFsd2F5cyhm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvaW5nIHRoaXMgbWFrZXMg
c3VyZSB0aGF0IHRoZSBjb21wbGV0ZSBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBiZWZvcmUgdGhpcyBjb21wbGV0ZXMKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGFuaW0uYWx3YXlzKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBob29rcy51bnF1ZXVlZC0tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoICFqUXVlcnkucXVldWUoIGVsZW0sICJmeCIgKS5sZW5ndGggKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9va3MuZW1wdHkuZmlyZSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGhlaWdodC93aWR0
aCBvdmVyZmxvdyBwYXNzCisgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoICJo
ZWlnaHQiIGluIHByb3BzIHx8ICJ3aWR0aCIgaW4gcHJvcHMgKSApIHsKKyAgICAgICAgICAgICAg
ICAvLyBNYWtlIHN1cmUgdGhhdCBub3RoaW5nIHNuZWFrcyBvdXQKKyAgICAgICAgICAgICAgICAv
LyBSZWNvcmQgYWxsIDMgb3ZlcmZsb3cgYXR0cmlidXRlcyBiZWNhdXNlIElFIGRvZXMgbm90Cisg
ICAgICAgICAgICAgICAgLy8gY2hhbmdlIHRoZSBvdmVyZmxvdyBhdHRyaWJ1dGUgd2hlbiBvdmVy
Zmxvd1ggYW5kCisgICAgICAgICAgICAgICAgLy8gb3ZlcmZsb3dZIGFyZSBzZXQgdG8gdGhlIHNh
bWUgdmFsdWUKKyAgICAgICAgICAgICAgICBvcHRzLm92ZXJmbG93ID0gWyBzdHlsZS5vdmVyZmxv
dywgc3R5bGUub3ZlcmZsb3dYLCBzdHlsZS5vdmVyZmxvd1kgXTsKKworICAgICAgICAgICAgICAg
IC8vIFNldCBkaXNwbGF5IHByb3BlcnR5IHRvIGlubGluZS1ibG9jayBmb3IgaGVpZ2h0L3dpZHRo
CisgICAgICAgICAgICAgICAgLy8gYW5pbWF0aW9ucyBvbiBpbmxpbmUgZWxlbWVudHMgdGhhdCBh
cmUgaGF2aW5nIHdpZHRoL2hlaWdodCBhbmltYXRlZAorICAgICAgICAgICAgICAgIGlmICggalF1
ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXkiICkgPT09ICJpbmxpbmUiICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jc3MoIGVsZW0sICJmbG9hdCIgKSA9PT0gIm5vbmUi
ICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmxpbmUtbGV2ZWwgZWxlbWVudHMg
YWNjZXB0IGlubGluZS1ibG9jazsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrLWxl
dmVsIGVsZW1lbnRzIG5lZWQgdG8gYmUgaW5saW5lIHdpdGggbGF5b3V0CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0IHx8
IGNzc19kZWZhdWx0RGlzcGxheSggZWxlbS5ub2RlTmFtZSApID09PSAiaW5saW5lIiApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUuZGlzcGxheSA9ICJpbmxpbmUtYmxv
Y2siOworCisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHlsZS56b29tID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIG9wdHMub3Zl
cmZsb3cgKSB7CisgICAgICAgICAgICAgICAgc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKKyAg
ICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5zaHJpbmtXcmFwQmxvY2tzICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgYW5pbS5kb25lKGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5vdmVyZmxvdyA9IG9wdHMub3ZlcmZsb3dbIDAg
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUub3ZlcmZsb3dYID0gb3B0
cy5vdmVyZmxvd1sgMSBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5v
dmVyZmxvd1kgPSBvcHRzLm92ZXJmbG93WyAyIF07CisgICAgICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworCisgICAgICAgIC8vIHNob3cvaGlk
ZSBwYXNzCisgICAgICAgIGZvciAoIGluZGV4IGluIHByb3BzICkgeworICAgICAgICAgICAgICAg
IHZhbHVlID0gcHJvcHNbIGluZGV4IF07CisgICAgICAgICAgICAgICAgaWYgKCByZnh0eXBlcy5l
eGVjKCB2YWx1ZSApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHByb3BzWyBp
bmRleCBdOworICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlID0gdG9nZ2xlIHx8IHZhbHVl
ID09PSAidG9nZ2xlIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUgPT09ICgg
aGlkZGVuID8gImhpZGUiIDogInNob3ciICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgaGFuZGxlZC5wdXNoKCBpbmRleCApOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGxlbmd0aCA9IGhhbmRsZWQubGVuZ3RoOworICAgICAgICBpZiAo
IGxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICBkYXRhU2hvdyA9IGpRdWVyeS5fZGF0YSggZWxl
bSwgImZ4c2hvdyIgKSB8fCBqUXVlcnkuX2RhdGEoIGVsZW0sICJmeHNob3ciLCB7fSApOworICAg
ICAgICAgICAgICAgIGlmICggImhpZGRlbiIgaW4gZGF0YVNob3cgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBoaWRkZW4gPSBkYXRhU2hvdy5oaWRkZW47CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgLy8gc3RvcmUgc3RhdGUgaWYgaXRzIHRvZ2dsZSAtIGVuYWJsZXMg
LnN0b3AoKS50b2dnbGUoKSB0byAicmV2ZXJzZSIKKyAgICAgICAgICAgICAgICBpZiAoIHRvZ2ds
ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTaG93LmhpZGRlbiA9ICFoaWRkZW47
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICggaGlkZGVuICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCBlbGVtICkuc2hvdygpOworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhbmltLmRvbmUoZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggZWxlbSApLmhpZGUo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBhbmltLmRvbmUoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgcHJvcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVEYXRhKCBl
bGVtLCAiZnhzaG93IiwgdHJ1ZSApOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggcHJv
cCBpbiBvcmlnICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuc3R5
bGUoIGVsZW0sIHByb3AsIG9yaWdbIHByb3AgXSApOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGZvciAoIGluZGV4ID0gMCA7
IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBy
b3AgPSBoYW5kbGVkWyBpbmRleCBdOworICAgICAgICAgICAgICAgICAgICAgICAgdHdlZW4gPSBh
bmltLmNyZWF0ZVR3ZWVuKCBwcm9wLCBoaWRkZW4gPyBkYXRhU2hvd1sgcHJvcCBdIDogMCApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ1sgcHJvcCBdID0gZGF0YVNob3dbIHByb3AgXSB8
fCBqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCAhKCBwcm9wIGluIGRhdGFTaG93ICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFTaG93WyBwcm9wIF0gPSB0d2Vlbi5zdGFydDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBoaWRkZW4gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHdlZW4uZW5kID0gdHdlZW4uc3RhcnQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHdlZW4uc3RhcnQgPSBwcm9wID09PSAid2lkdGgiIHx8
IHByb3AgPT09ICJoZWlnaHQiID8gMSA6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgIH0KK30KKworZnVuY3Rpb24gVHdlZW4oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFz
aW5nICkgeworICAgICAgICByZXR1cm4gbmV3IFR3ZWVuLnByb3RvdHlwZS5pbml0KCBlbGVtLCBv
cHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApOworfQoralF1ZXJ5LlR3ZWVuID0gVHdlZW47CisK
K1R3ZWVuLnByb3RvdHlwZSA9IHsKKyAgICAgICAgY29uc3RydWN0b3I6IFR3ZWVuLAorICAgICAg
ICBpbml0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcsIHVuaXQg
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5lbGVtID0gZWxlbTsKKyAgICAgICAgICAgICAgICB0
aGlzLnByb3AgPSBwcm9wOworICAgICAgICAgICAgICAgIHRoaXMuZWFzaW5nID0gZWFzaW5nIHx8
ICJzd2luZyI7CisgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKKyAgICAg
ICAgICAgICAgICB0aGlzLnN0YXJ0ID0gdGhpcy5ub3cgPSB0aGlzLmN1cigpOworICAgICAgICAg
ICAgICAgIHRoaXMuZW5kID0gZW5kOworICAgICAgICAgICAgICAgIHRoaXMudW5pdCA9IHVuaXQg
fHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyAiIiA6ICJweCIgKTsKKyAgICAgICAgfSwK
KyAgICAgICAgY3VyOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgaG9va3MgPSBU
d2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdOworCisgICAgICAgICAgICAgICAgcmV0dXJuIGhv
b2tzICYmIGhvb2tzLmdldCA/CisgICAgICAgICAgICAgICAgICAgICAgICBob29rcy5nZXQoIHRo
aXMgKSA6CisgICAgICAgICAgICAgICAgICAgICAgICBUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQu
Z2V0KCB0aGlzICk7CisgICAgICAgIH0sCisgICAgICAgIHJ1bjogZnVuY3Rpb24oIHBlcmNlbnQg
KSB7CisgICAgICAgICAgICAgICAgdmFyIGVhc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAg
aG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdOworCisgICAgICAgICAgICAgICAg
aWYgKCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLnBvcyA9IGVhc2VkID0galF1ZXJ5LmVhc2luZ1sgdGhpcy5lYXNpbmcgXSgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudCwgdGhpcy5vcHRpb25zLmR1cmF0aW9uICog
cGVyY2VudCwgMCwgMSwgdGhpcy5vcHRpb25zLmR1cmF0aW9uCisgICAgICAgICAgICAgICAgICAg
ICAgICApOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLnBvcyA9IGVhc2VkID0gcGVyY2VudDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgdGhpcy5ub3cgPSAoIHRoaXMuZW5kIC0gdGhpcy5zdGFydCApICogZWFzZWQgKyB0
aGlzLnN0YXJ0OworCisgICAgICAgICAgICAgICAgaWYgKCB0aGlzLm9wdGlvbnMuc3RlcCApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGVwLmNhbGwoIHRoaXMuZWxl
bSwgdGhpcy5ub3csIHRoaXMgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBpZiAoIGhvb2tzICYmIGhvb2tzLnNldCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhv
b2tzLnNldCggdGhpcyApOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KCB0aGlzICk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9Cit9Owor
CitUd2Vlbi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGUgPSBUd2Vlbi5wcm90b3R5cGU7CisKK1R3
ZWVuLnByb3BIb29rcyA9IHsKKyAgICAgICAgX2RlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICBn
ZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1
bHQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHdlZW4uZWxlbVsgdHdlZW4ucHJv
cCBdICE9IG51bGwgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCF0d2Vlbi5l
bGVtLnN0eWxlIHx8IHR3ZWVuLmVsZW0uc3R5bGVbIHR3ZWVuLnByb3AgXSA9PSBudWxsKSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR3ZWVuLmVsZW1bIHR3ZWVu
LnByb3AgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gcGFzc2luZyBhbnkgdmFsdWUgYXMgYSA0dGggcGFyYW1ldGVyIHRvIC5jc3Mgd2ls
bCBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdHRlbXB0IGEgcGFy
c2VGbG9hdCBhbmQgZmFsbGJhY2sgdG8gYSBzdHJpbmcgaWYgdGhlIHBhcnNlIGZhaWxzCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBzbywgc2ltcGxlIHZhbHVlcyBzdWNoIGFzICIxMHB4IiBh
cmUgcGFyc2VkIHRvIEZsb2F0LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29tcGxleCB2
YWx1ZXMgc3VjaCBhcyAicm90YXRlKDFyYWQpIiBhcmUgcmV0dXJuZWQgYXMgaXMuCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPSBqUXVlcnkuY3NzKCB0d2Vlbi5lbGVtLCB0d2Vlbi5w
cm9wLCBmYWxzZSwgIiIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVtcHR5IHN0cmlu
Z3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgImF1dG8iIGFyZSBjb252ZXJ0ZWQgdG8gMC4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAhcmVzdWx0IHx8IHJlc3VsdCA9PT0gImF1dG8iID8g
MCA6IHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHNldDogZnVu
Y3Rpb24oIHR3ZWVuICkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNlIHN0ZXAgaG9v
ayBmb3IgYmFjayBjb21wYXQgLSB1c2UgY3NzSG9vayBpZiBpdHMgdGhlcmUgLSB1c2UgLnN0eWxl
IGlmIGl0cworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXZhaWxhYmxlIGFuZCB1c2UgcGxh
aW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggalF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSggdHdlZW4gKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR3ZWVuLmVsZW0uc3R5bGUgJiYgKCB0d2Vl
bi5lbGVtLnN0eWxlWyBqUXVlcnkuY3NzUHJvcHNbIHR3ZWVuLnByb3AgXSBdICE9IG51bGwgfHwg
alF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5wcm9wIF0gKSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCB0d2Vlbi5u
b3cgKyB0d2Vlbi51bml0ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0
d2Vlbi5ub3c7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICB9Cit9OworCisvLyBSZW1vdmUgaW4gMi4wIC0gdGhpcyBzdXBwb3J0cyBJRTgncyBw
YW5pYyBiYXNlZCBhcHByb2FjaAorLy8gdG8gc2V0dGluZyB0aGluZ3Mgb24gZGlzY29ubmVjdGVk
IG5vZGVzCisKK1R3ZWVuLnByb3BIb29rcy5zY3JvbGxUb3AgPSBUd2Vlbi5wcm9wSG9va3Muc2Ny
b2xsTGVmdCA9IHsKKyAgICAgICAgc2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICYmIHR3ZWVuLmVsZW0ucGFyZW50Tm9kZSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3
ZWVuLm5vdzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KK307CisKK2pRdWVyeS5lYWNo
KFsgInRvZ2dsZSIsICJzaG93IiwgImhpZGUiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgeworICAg
ICAgICB2YXIgY3NzRm4gPSBqUXVlcnkuZm5bIG5hbWUgXTsKKyAgICAgICAgalF1ZXJ5LmZuWyBu
YW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHNwZWVkID09IG51bGwgfHwgdHlwZW9mIHNwZWVkID09PSAiYm9vbGVhbiIg
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2hlY2sgZm9yIC50b2dnbGUo
IGhhbmRsZXIsIGhhbmRsZXIsIC4uLiApCisgICAgICAgICAgICAgICAgICAgICAgICAoICFpICYm
IGpRdWVyeS5pc0Z1bmN0aW9uKCBzcGVlZCApICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBlYXNpbmcg
KSApID8KKyAgICAgICAgICAgICAgICAgICAgICAgIGNzc0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVu
dHMgKSA6CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdGUoIGdlbkZ4KCBuYW1l
LCB0cnVlICksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7CisgICAgICAgIH07Cit9KTsKKwor
alF1ZXJ5LmZuLmV4dGVuZCh7CisgICAgICAgIGZhZGVUbzogZnVuY3Rpb24oIHNwZWVkLCB0bywg
ZWFzaW5nLCBjYWxsYmFjayApIHsKKworICAgICAgICAgICAgICAgIC8vIHNob3cgYW55IGhpZGRl
biBlbGVtZW50cyBhZnRlciBzZXR0aW5nIG9wYWNpdHkgdG8gMAorICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLmZpbHRlciggaXNIaWRkZW4gKS5jc3MoICJvcGFjaXR5IiwgMCApLnNob3coKQor
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmltYXRlIHRvIHRoZSB2YWx1ZSBzcGVjaWZp
ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIC5lbmQoKS5hbmltYXRlKHsgb3BhY2l0eTogdG8g
fSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKKyAgICAgICAgfSwKKyAgICAgICAgYW5pbWF0
ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkgeworICAgICAgICAg
ICAgICAgIHZhciBlbXB0eSA9IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wICksCisgICAgICAg
ICAgICAgICAgICAgICAgICBvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVkLCBlYXNpbmcsIGNh
bGxiYWNrICksCisgICAgICAgICAgICAgICAgICAgICAgICBkb0FuaW1hdGlvbiA9IGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcGVyYXRlIG9uIGEgY29w
eSBvZiBwcm9wIHNvIHBlci1wcm9wZXJ0eSBlYXNpbmcgd29uJ3QgYmUgbG9zdAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgYW5pbSA9IEFuaW1hdGlvbiggdGhpcywgalF1ZXJ5
LmV4dGVuZCgge30sIHByb3AgKSwgb3B0YWxsICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gRW1wdHkgYW5pbWF0aW9ucyByZXNvbHZlIGltbWVkaWF0ZWx5CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZW1wdHkgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYW5pbS5zdG9wKCB0cnVlICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZW1wdHkgfHwgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLmVhY2goIGRvQW5pbWF0aW9uICkgOgorICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5xdWV1ZSggb3B0YWxsLnF1ZXVlLCBkb0FuaW1hdGlvbiApOwor
ICAgICAgICB9LAorICAgICAgICBzdG9wOiBmdW5jdGlvbiggdHlwZSwgY2xlYXJRdWV1ZSwgZ290
b0VuZCApIHsKKyAgICAgICAgICAgICAgICB2YXIgc3RvcFF1ZXVlID0gZnVuY3Rpb24oIGhvb2tz
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3AgPSBob29rcy5zdG9wOworICAg
ICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGhvb2tzLnN0b3A7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzdG9wKCBnb3RvRW5kICk7CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAg
ICAgICAgIGlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZ290b0VuZCA9IGNsZWFyUXVldWU7CisgICAgICAgICAgICAgICAgICAgICAgICBj
bGVhclF1ZXVlID0gdHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSB1bmRlZmlu
ZWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICggY2xlYXJRdWV1ZSAm
JiB0eXBlICE9PSBmYWxzZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVldWUo
IHR5cGUgfHwgImZ4IiwgW10gKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIGRlcXVldWUgPSB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRl
eCA9IHR5cGUgIT0gbnVsbCAmJiB0eXBlICsgInF1ZXVlSG9va3MiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aW1lcnMgPSBqUXVlcnkudGltZXJzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhID0galF1ZXJ5Ll9kYXRhKCB0aGlzICk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggaW5kZXggKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFF1ZXVlKCBkYXRhWyBpbmRl
eCBdICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
IGluZGV4IGluIGRhdGEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCAmJiBycnVuLnRlc3Qo
IGluZGV4ICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgg
aW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJiAodHlwZSA9
PSBudWxsIHx8IHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSkgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCgg
Z290b0VuZCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcXVl
dWUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1l
cnMuc3BsaWNlKCBpbmRleCwgMSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHN0YXJ0IHRoZSBuZXh0IGluIHRoZSBxdWV1ZSBpZiB0aGUgbGFzdCBzdGVwIHdhc24ndCBmb3Jj
ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRpbWVycyBjdXJyZW50bHkgd2lsbCBjYWxs
IHRoZWlyIGNvbXBsZXRlIGNhbGxiYWNrcywgd2hpY2ggd2lsbCBkZXF1ZXVlCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBidXQgb25seSBpZiB0aGV5IHdlcmUgZ290b0VuZAorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBkZXF1ZXVlIHx8ICFnb3RvRW5kICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9Cit9KTsK
KworLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb24K
K2Z1bmN0aW9uIGdlbkZ4KCB0eXBlLCBpbmNsdWRlV2lkdGggKSB7CisgICAgICAgIHZhciB3aGlj
aCwKKyAgICAgICAgICAgICAgICBhdHRycyA9IHsgaGVpZ2h0OiB0eXBlIH0sCisgICAgICAgICAg
ICAgICAgaSA9IDA7CisKKyAgICAgICAgLy8gaWYgd2UgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1
ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLAorICAgICAgICAvLyBpZiB3ZSBkb24n
dCBpbmNsdWRlIHdpZHRoLCBzdGVwIHZhbHVlIGlzIDIgdG8gc2tpcCBvdmVyIExlZnQgYW5kIFJp
Z2h0CisgICAgICAgIGluY2x1ZGVXaWR0aCA9IGluY2x1ZGVXaWR0aD8gMSA6IDA7CisgICAgICAg
IGZvciggOyBpIDwgNCA7IGkgKz0gMiAtIGluY2x1ZGVXaWR0aCApIHsKKyAgICAgICAgICAgICAg
ICB3aGljaCA9IGNzc0V4cGFuZFsgaSBdOworICAgICAgICAgICAgICAgIGF0dHJzWyAibWFyZ2lu
IiArIHdoaWNoIF0gPSBhdHRyc1sgInBhZGRpbmciICsgd2hpY2ggXSA9IHR5cGU7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIGluY2x1ZGVXaWR0aCApIHsKKyAgICAgICAgICAgICAgICBhdHRy
cy5vcGFjaXR5ID0gYXR0cnMud2lkdGggPSB0eXBlOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIGF0dHJzOworfQorCisvLyBHZW5lcmF0ZSBzaG9ydGN1dHMgZm9yIGN1c3RvbSBhbmltYXRp
b25zCitqUXVlcnkuZWFjaCh7CisgICAgICAgIHNsaWRlRG93bjogZ2VuRngoInNob3ciKSwKKyAg
ICAgICAgc2xpZGVVcDogZ2VuRngoImhpZGUiKSwKKyAgICAgICAgc2xpZGVUb2dnbGU6IGdlbkZ4
KCJ0b2dnbGUiKSwKKyAgICAgICAgZmFkZUluOiB7IG9wYWNpdHk6ICJzaG93IiB9LAorICAgICAg
ICBmYWRlT3V0OiB7IG9wYWNpdHk6ICJoaWRlIiB9LAorICAgICAgICBmYWRlVG9nZ2xlOiB7IG9w
YWNpdHk6ICJ0b2dnbGUiIH0KK30sIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyApIHsKKyAgICAgICAg
alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNp
bmcsIGNhbGxiYWNrICk7CisgICAgICAgIH07Cit9KTsKKworalF1ZXJ5LnNwZWVkID0gZnVuY3Rp
b24oIHNwZWVkLCBlYXNpbmcsIGZuICkgeworICAgICAgICB2YXIgb3B0ID0gc3BlZWQgJiYgdHlw
ZW9mIHNwZWVkID09PSAib2JqZWN0IiA/IGpRdWVyeS5leHRlbmQoIHt9LCBzcGVlZCApIDogewor
ICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8CisgICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkuaXNGdW5jdGlvbiggc3BlZWQgKSAmJiBzcGVlZCwKKyAg
ICAgICAgICAgICAgICBkdXJhdGlvbjogc3BlZWQsCisgICAgICAgICAgICAgICAgZWFzaW5nOiBm
biAmJiBlYXNpbmcgfHwgZWFzaW5nICYmICFqUXVlcnkuaXNGdW5jdGlvbiggZWFzaW5nICkgJiYg
ZWFzaW5nCisgICAgICAgIH07CisKKyAgICAgICAgb3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4Lm9m
ZiA/IDAgOiB0eXBlb2Ygb3B0LmR1cmF0aW9uID09PSAibnVtYmVyIiA/IG9wdC5kdXJhdGlvbiA6
CisgICAgICAgICAgICAgICAgb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgPyBqUXVl
cnkuZnguc3BlZWRzWyBvcHQuZHVyYXRpb24gXSA6IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7
CisKKyAgICAgICAgLy8gbm9ybWFsaXplIG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwg
LT4gImZ4IgorICAgICAgICBpZiAoIG9wdC5xdWV1ZSA9PSBudWxsIHx8IG9wdC5xdWV1ZSA9PT0g
dHJ1ZSApIHsKKyAgICAgICAgICAgICAgICBvcHQucXVldWUgPSAiZngiOworICAgICAgICB9CisK
KyAgICAgICAgLy8gUXVldWVpbmcKKyAgICAgICAgb3B0Lm9sZCA9IG9wdC5jb21wbGV0ZTsKKwor
ICAgICAgICBvcHQuY29tcGxldGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAo
IGpRdWVyeS5pc0Z1bmN0aW9uKCBvcHQub2xkICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBvcHQub2xkLmNhbGwoIHRoaXMgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAoIG9wdC5xdWV1ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5k
ZXF1ZXVlKCB0aGlzLCBvcHQucXVldWUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH07
CisKKyAgICAgICAgcmV0dXJuIG9wdDsKK307CisKK2pRdWVyeS5lYXNpbmcgPSB7CisgICAgICAg
IGxpbmVhcjogZnVuY3Rpb24oIHAgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHA7CisgICAg
ICAgIH0sCisgICAgICAgIHN3aW5nOiBmdW5jdGlvbiggcCApIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMC41IC0gTWF0aC5jb3MoIHAqTWF0aC5QSSApIC8gMjsKKyAgICAgICAgfQorfTsKKwor
alF1ZXJ5LnRpbWVycyA9IFtdOworalF1ZXJ5LmZ4ID0gVHdlZW4ucHJvdG90eXBlLmluaXQ7Citq
UXVlcnkuZngudGljayA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgdGltZXIsCisgICAgICAg
ICAgICAgICAgdGltZXJzID0galF1ZXJ5LnRpbWVycywKKyAgICAgICAgICAgICAgICBpID0gMDsK
KworICAgICAgICBmeE5vdyA9IGpRdWVyeS5ub3coKTsKKworICAgICAgICBmb3IgKCA7IGkgPCB0
aW1lcnMubGVuZ3RoOyBpKysgKSB7CisgICAgICAgICAgICAgICAgdGltZXIgPSB0aW1lcnNbIGkg
XTsKKyAgICAgICAgICAgICAgICAvLyBDaGVja3MgdGhlIHRpbWVyIGhhcyBub3QgYWxyZWFkeSBi
ZWVuIHJlbW92ZWQKKyAgICAgICAgICAgICAgICBpZiAoICF0aW1lcigpICYmIHRpbWVyc1sgaSBd
ID09PSB0aW1lciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVycy5zcGxpY2UoIGkt
LSwgMSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICggIXRp
bWVycy5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmZ4LnN0b3AoKTsKKyAgICAg
ICAgfQorICAgICAgICBmeE5vdyA9IHVuZGVmaW5lZDsKK307CisKK2pRdWVyeS5meC50aW1lciA9
IGZ1bmN0aW9uKCB0aW1lciApIHsKKyAgICAgICAgaWYgKCB0aW1lcigpICYmIGpRdWVyeS50aW1l
cnMucHVzaCggdGltZXIgKSAmJiAhdGltZXJJZCApIHsKKyAgICAgICAgICAgICAgICB0aW1lcklk
ID0gc2V0SW50ZXJ2YWwoIGpRdWVyeS5meC50aWNrLCBqUXVlcnkuZnguaW50ZXJ2YWwgKTsKKyAg
ICAgICAgfQorfTsKKworalF1ZXJ5LmZ4LmludGVydmFsID0gMTM7CisKK2pRdWVyeS5meC5zdG9w
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGNsZWFySW50ZXJ2YWwoIHRpbWVySWQgKTsKKyAgICAg
ICAgdGltZXJJZCA9IG51bGw7Cit9OworCitqUXVlcnkuZnguc3BlZWRzID0geworICAgICAgICBz
bG93OiA2MDAsCisgICAgICAgIGZhc3Q6IDIwMCwKKyAgICAgICAgLy8gRGVmYXVsdCBzcGVlZAor
ICAgICAgICBfZGVmYXVsdDogNDAwCit9OworCisvLyBCYWNrIENvbXBhdCA8MS44IGV4dGVuc2lv
biBwb2ludAoralF1ZXJ5LmZ4LnN0ZXAgPSB7fTsKKworaWYgKCBqUXVlcnkuZXhwciAmJiBqUXVl
cnkuZXhwci5maWx0ZXJzICkgeworICAgICAgICBqUXVlcnkuZXhwci5maWx0ZXJzLmFuaW1hdGVk
ID0gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5ncmVw
KGpRdWVyeS50aW1lcnMsIGZ1bmN0aW9uKCBmbiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlbGVtID09PSBmbi5lbGVtOworICAgICAgICAgICAgICAgIH0pLmxlbmd0aDsKKyAg
ICAgICAgfTsKK30KK3ZhciBycm9vdCA9IC9eKD86Ym9keXxodG1sKSQvaTsKKworalF1ZXJ5LmZu
Lm9mZnNldCA9IGZ1bmN0aW9uKCBvcHRpb25zICkgeworICAgICAgICBpZiAoIGFyZ3VtZW50cy5s
ZW5ndGggKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/
CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIDoKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGRvY0VsZW0sIGJv
ZHksIHdpbiwgY2xpZW50VG9wLCBjbGllbnRMZWZ0LCBzY3JvbGxUb3AsIHNjcm9sbExlZnQsCisg
ICAgICAgICAgICAgICAgYm94ID0geyB0b3A6IDAsIGxlZnQ6IDAgfSwKKyAgICAgICAgICAgICAg
ICBlbGVtID0gdGhpc1sgMCBdLAorICAgICAgICAgICAgICAgIGRvYyA9IGVsZW0gJiYgZWxlbS5v
d25lckRvY3VtZW50OworCisgICAgICAgIGlmICggIWRvYyApIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIChib2R5ID0gZG9jLmJvZHkpID09PSBl
bGVtICkgeworICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkub2Zmc2V0LmJvZHlPZmZzZXQo
IGVsZW0gKTsKKyAgICAgICAgfQorCisgICAgICAgIGRvY0VsZW0gPSBkb2MuZG9jdW1lbnRFbGVt
ZW50OworCisgICAgICAgIC8vIE1ha2Ugc3VyZSBpdCdzIG5vdCBhIGRpc2Nvbm5lY3RlZCBET00g
bm9kZQorICAgICAgICBpZiAoICFqUXVlcnkuY29udGFpbnMoIGRvY0VsZW0sIGVsZW0gKSApIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gYm94OworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYg
d2UgZG9uJ3QgaGF2ZSBnQkNSLCBqdXN0IHVzZSAwLDAgcmF0aGVyIHRoYW4gZXJyb3IKKyAgICAg
ICAgLy8gQmxhY2tCZXJyeSA1LCBpT1MgMyAob3JpZ2luYWwgaVBob25lKQorICAgICAgICBpZiAo
IHR5cGVvZiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCAhPT0gInVuZGVmaW5lZCIgKSB7Cisg
ICAgICAgICAgICAgICAgYm94ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAg
ICAgfQorICAgICAgICB3aW4gPSBnZXRXaW5kb3coIGRvYyApOworICAgICAgICBjbGllbnRUb3Ag
ID0gZG9jRWxlbS5jbGllbnRUb3AgIHx8IGJvZHkuY2xpZW50VG9wICB8fCAwOworICAgICAgICBj
bGllbnRMZWZ0ID0gZG9jRWxlbS5jbGllbnRMZWZ0IHx8IGJvZHkuY2xpZW50TGVmdCB8fCAwOwor
ICAgICAgICBzY3JvbGxUb3AgID0gd2luLnBhZ2VZT2Zmc2V0IHx8IGRvY0VsZW0uc2Nyb2xsVG9w
OworICAgICAgICBzY3JvbGxMZWZ0ID0gd2luLnBhZ2VYT2Zmc2V0IHx8IGRvY0VsZW0uc2Nyb2xs
TGVmdDsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0b3A6IGJveC50b3AgICsg
c2Nyb2xsVG9wICAtIGNsaWVudFRvcCwKKyAgICAgICAgICAgICAgICBsZWZ0OiBib3gubGVmdCAr
IHNjcm9sbExlZnQgLSBjbGllbnRMZWZ0CisgICAgICAgIH07Cit9OworCitqUXVlcnkub2Zmc2V0
ID0geworCisgICAgICAgIGJvZHlPZmZzZXQ6IGZ1bmN0aW9uKCBib2R5ICkgeworICAgICAgICAg
ICAgICAgIHZhciB0b3AgPSBib2R5Lm9mZnNldFRvcCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxlZnQgPSBib2R5Lm9mZnNldExlZnQ7CisKKyAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5z
dXBwb3J0LmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0ICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdG9wICArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKGJvZHksICJtYXJnaW5U
b3AiKSApIHx8IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ICs9IHBhcnNlRmxvYXQo
IGpRdWVyeS5jc3MoYm9keSwgIm1hcmdpbkxlZnQiKSApIHx8IDA7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgdG9wOiB0b3AsIGxlZnQ6IGxlZnQgfTsKKyAg
ICAgICAgfSwKKworICAgICAgICBzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBp
ICkgeworICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0sICJw
b3NpdGlvbiIgKTsKKworICAgICAgICAgICAgICAgIC8vIHNldCBwb3NpdGlvbiBmaXJzdCwgaW4t
Y2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW0KKyAgICAgICAgICAgICAg
ICBpZiAoIHBvc2l0aW9uID09PSAic3RhdGljIiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW0uc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIHZhciBjdXJFbGVtID0galF1ZXJ5KCBlbGVtICksCisgICAgICAgICAg
ICAgICAgICAgICAgICBjdXJPZmZzZXQgPSBjdXJFbGVtLm9mZnNldCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgY3VyQ1NTVG9wID0galF1ZXJ5LmNzcyggZWxlbSwgInRvcCIgKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGN1ckNTU0xlZnQgPSBqUXVlcnkuY3NzKCBlbGVtLCAibGVmdCIg
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBvc2l0aW9uID0gKCBwb3NpdGlv
biA9PT0gImFic29sdXRlIiB8fCBwb3NpdGlvbiA9PT0gImZpeGVkIiApICYmIGpRdWVyeS5pbkFy
cmF5KCJhdXRvIiwgW2N1ckNTU1RvcCwgY3VyQ1NTTGVmdF0pID4gLTEsCisgICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wcyA9IHt9LCBjdXJQb3NpdGlvbiA9IHt9LCBjdXJUb3AsIGN1ckxlZnQ7
CisKKyAgICAgICAgICAgICAgICAvLyBuZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0
aW9uIGlmIGVpdGhlciB0b3Agb3IgbGVmdCBpcyBhdXRvIGFuZCBwb3NpdGlvbiBpcyBlaXRoZXIg
YWJzb2x1dGUgb3IgZml4ZWQKKyAgICAgICAgICAgICAgICBpZiAoIGNhbGN1bGF0ZVBvc2l0aW9u
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgY3VyUG9zaXRpb24gPSBjdXJFbGVtLnBvc2l0
aW9uKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJUb3AgPSBjdXJQb3NpdGlvbi50b3A7
CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJMZWZ0ID0gY3VyUG9zaXRpb24ubGVmdDsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY3VyVG9wID0g
cGFyc2VGbG9hdCggY3VyQ1NTVG9wICkgfHwgMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1
ckxlZnQgPSBwYXJzZUZsb2F0KCBjdXJDU1NMZWZ0ICkgfHwgMDsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5jYWxsKCBlbGVtLCBp
LCBjdXJPZmZzZXQgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAo
IG9wdGlvbnMudG9wICE9IG51bGwgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy50
b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIG9wdGlvbnMubGVmdCAhPSBudWxsICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0IC0gY3Vy
T2Zmc2V0LmxlZnQgKSArIGN1ckxlZnQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgaWYgKCAidXNpbmciIGluIG9wdGlvbnMgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBvcHRpb25zLnVzaW5nLmNhbGwoIGVsZW0sIHByb3BzICk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1ckVsZW0uY3NzKCBwcm9wcyApOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgfQorfTsKKworCitqUXVlcnkuZm4uZXh0ZW5kKHsKKwor
ICAgICAgICBwb3NpdGlvbjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYgKCAhdGhp
c1swXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IHRoaXNbMF0sCisKKyAgICAgICAgICAg
ICAgICAvLyBHZXQgKnJlYWwqIG9mZnNldFBhcmVudAorICAgICAgICAgICAgICAgIG9mZnNldFBh
cmVudCA9IHRoaXMub2Zmc2V0UGFyZW50KCksCisKKyAgICAgICAgICAgICAgICAvLyBHZXQgY29y
cmVjdCBvZmZzZXRzCisgICAgICAgICAgICAgICAgb2Zmc2V0ICAgICAgID0gdGhpcy5vZmZzZXQo
KSwKKyAgICAgICAgICAgICAgICBwYXJlbnRPZmZzZXQgPSBycm9vdC50ZXN0KG9mZnNldFBhcmVu
dFswXS5ub2RlTmFtZSkgPyB7IHRvcDogMCwgbGVmdDogMCB9IDogb2Zmc2V0UGFyZW50Lm9mZnNl
dCgpOworCisgICAgICAgICAgICAgICAgLy8gU3VidHJhY3QgZWxlbWVudCBtYXJnaW5zCisgICAg
ICAgICAgICAgICAgLy8gbm90ZTogd2hlbiBhbiBlbGVtZW50IGhhcyBtYXJnaW46IGF1dG8gdGhl
IG9mZnNldExlZnQgYW5kIG1hcmdpbkxlZnQKKyAgICAgICAgICAgICAgICAvLyBhcmUgdGhlIHNh
bWUgaW4gU2FmYXJpIGNhdXNpbmcgb2Zmc2V0LmxlZnQgdG8gaW5jb3JyZWN0bHkgYmUgMAorICAg
ICAgICAgICAgICAgIG9mZnNldC50b3AgIC09IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoZWxlbSwg
Im1hcmdpblRvcCIpICkgfHwgMDsKKyAgICAgICAgICAgICAgICBvZmZzZXQubGVmdCAtPSBwYXJz
ZUZsb2F0KCBqUXVlcnkuY3NzKGVsZW0sICJtYXJnaW5MZWZ0IikgKSB8fCAwOworCisgICAgICAg
ICAgICAgICAgLy8gQWRkIG9mZnNldFBhcmVudCBib3JkZXJzCisgICAgICAgICAgICAgICAgcGFy
ZW50T2Zmc2V0LnRvcCAgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhvZmZzZXRQYXJlbnRbMF0s
ICJib3JkZXJUb3BXaWR0aCIpICkgfHwgMDsKKyAgICAgICAgICAgICAgICBwYXJlbnRPZmZzZXQu
bGVmdCArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKG9mZnNldFBhcmVudFswXSwgImJvcmRlckxl
ZnRXaWR0aCIpICkgfHwgMDsKKworICAgICAgICAgICAgICAgIC8vIFN1YnRyYWN0IHRoZSB0d28g
b2Zmc2V0cworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0b3A6ICBvZmZzZXQudG9wICAtIHBhcmVudE9mZnNldC50b3AsCisgICAgICAgICAgICAgICAg
ICAgICAgICBsZWZ0OiBvZmZzZXQubGVmdCAtIHBhcmVudE9mZnNldC5sZWZ0CisgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudCB8fCBk
b2N1bWVudC5ib2R5OworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBvZmZzZXRQYXJl
bnQgJiYgKCFycm9vdC50ZXN0KG9mZnNldFBhcmVudC5ub2RlTmFtZSkgJiYgalF1ZXJ5LmNzcyhv
ZmZzZXRQYXJlbnQsICJwb3NpdGlvbiIpID09PSAic3RhdGljIikgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJl
bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50LmJvZHk7CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KK30pOworCisKKy8vIENyZWF0ZSBzY3JvbGxMZWZ0IGFuZCBzY3JvbGxUb3Ag
bWV0aG9kcworalF1ZXJ5LmVhY2goIHtzY3JvbGxMZWZ0OiAicGFnZVhPZmZzZXQiLCBzY3JvbGxU
b3A6ICJwYWdlWU9mZnNldCJ9LCBmdW5jdGlvbiggbWV0aG9kLCBwcm9wICkgeworICAgICAgICB2
YXIgdG9wID0gL1kvLnRlc3QoIHByb3AgKTsKKworICAgICAgICBqUXVlcnkuZm5bIG1ldGhvZCBd
ID0gZnVuY3Rpb24oIHZhbCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmFjY2Vz
cyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG1ldGhvZCwgdmFsICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHdpbiA9IGdldFdpbmRvdyggZWxlbSApOworCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gd2luID8gKHByb3AgaW4gd2luKSA/IHdpblsgcHJvcCBdIDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW4uZG9jdW1lbnQuZG9jdW1l
bnRFbGVtZW50WyBtZXRob2QgXSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbVsgbWV0aG9kIF07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggd2luICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3aW4uc2Nyb2xsVG8oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIXRvcCA/IHZhbCA6IGpRdWVyeSggd2luICkuc2Nyb2xsTGVmdCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AgPyB2YWwgOiBqUXVlcnkoIHdpbiAp
LnNjcm9sbFRvcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW1bIG1ldGhvZCBdID0gdmFsOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMubGVuZ3RoLCBudWxsICk7Cisg
ICAgICAgIH07Cit9KTsKKworZnVuY3Rpb24gZ2V0V2luZG93KCBlbGVtICkgeworICAgICAgICBy
ZXR1cm4galF1ZXJ5LmlzV2luZG93KCBlbGVtICkgPworICAgICAgICAgICAgICAgIGVsZW0gOgor
ICAgICAgICAgICAgICAgIGVsZW0ubm9kZVR5cGUgPT09IDkgPworICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbS5kZWZhdWx0VmlldyB8fCBlbGVtLnBhcmVudFdpbmRvdyA6CisgICAgICAgICAg
ICAgICAgICAgICAgICBmYWxzZTsKK30KKy8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0
aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kcworalF1
ZXJ5LmVhY2goIHsgSGVpZ2h0OiAiaGVpZ2h0IiwgV2lkdGg6ICJ3aWR0aCIgfSwgZnVuY3Rpb24o
IG5hbWUsIHR5cGUgKSB7CisgICAgICAgIGpRdWVyeS5lYWNoKCB7IHBhZGRpbmc6ICJpbm5lciIg
KyBuYW1lLCBjb250ZW50OiB0eXBlLCAiIjogIm91dGVyIiArIG5hbWUgfSwgZnVuY3Rpb24oIGRl
ZmF1bHRFeHRyYSwgZnVuY05hbWUgKSB7CisgICAgICAgICAgICAgICAgLy8gbWFyZ2luIGlzIG9u
bHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoCisgICAgICAgICAgICAgICAgalF1ZXJ5LmZu
WyBmdW5jTmFtZSBdID0gZnVuY3Rpb24oIG1hcmdpbiwgdmFsdWUgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgY2hhaW5hYmxlID0gYXJndW1lbnRzLmxlbmd0aCAmJiAoIGRlZmF1bHRF
eHRyYSB8fCB0eXBlb2YgbWFyZ2luICE9PSAiYm9vbGVhbiIgKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXh0cmEgPSBkZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUg
fHwgdmFsdWUgPT09IHRydWUgPyAibWFyZ2luIiA6ICJib3JkZXIiICk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwg
dHlwZSwgdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb2M7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNXaW5kb3co
IGVsZW0gKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBB
cyBvZiA1LzgvMjAxMiB0aGlzIHdpbGwgeWllbGQgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIE1vYmls
ZSBTYWZhcmksIGJ1dCB0aGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGlzbid0IGEgd2hvbGUgbG90IHdlIGNhbiBkby4gU2VlIHB1bGwgcmVxdWVzdCBhdCB0
aGlzIFVSTCBmb3IgZGlzY3Vzc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9wdWxsLzc2NAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmRvY3VtZW50
LmRvY3VtZW50RWxlbWVudFsgImNsaWVudCIgKyBuYW1lIF07CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQg
ZG9jdW1lbnQgd2lkdGggb3IgaGVpZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkb2MgPSBlbGVtLmRvY3VtZW50RWxlbWVudDsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVpdGhlciBzY3JvbGxbV2lkdGgvSGVpZ2h0
XSBvciBvZmZzZXRbV2lkdGgvSGVpZ2h0XSBvciBjbGllbnRbV2lkdGgvSGVpZ2h0XSwgd2hpY2hl
dmVyIGlzIGdyZWF0ZXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdW5mb3J0dW5hdGVseSwgdGhpcyBjYXVzZXMgYnVnICMzODM4IGluIElFNi84IG9ubHksIGJ1
dCB0aGVyZSBpcyBjdXJyZW50bHkgbm8gZ29vZCwgc21hbGwgd2F5IHRvIGZpeCBpdC4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmJvZHlbICJz
Y3JvbGwiICsgbmFtZSBdLCBkb2NbICJzY3JvbGwiICsgbmFtZSBdLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5ib2R5WyAib2Zmc2V0IiArIG5h
bWUgXSwgZG9jWyAib2Zmc2V0IiArIG5hbWUgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRvY1sgImNsaWVudCIgKyBuYW1lIF0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVl
ID09PSB1bmRlZmluZWQgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEdldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnQsIHJlcXVlc3RpbmcgYnV0IG5v
dCBmb3JjaW5nIHBhcnNlRmxvYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkuY3NzKCBlbGVtLCB0eXBlLCB2YWx1ZSwgZXh0cmEgKSA6CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgd2lkdGggb3IgaGVpZ2h0IG9u
IHRoZSBlbGVtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LnN0eWxlKCBlbGVtLCB0eXBlLCB2YWx1ZSwgZXh0cmEgKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0sIHR5cGUsIGNoYWluYWJsZSA/IG1hcmdpbiA6IHVuZGVmaW5lZCwgY2hhaW5hYmxl
LCBudWxsICk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgfSk7Cit9KTsKKy8vIEV4cG9z
ZSBqUXVlcnkgdG8gdGhlIGdsb2JhbCBvYmplY3QKK3dpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9
IGpRdWVyeTsKKworLy8gRXhwb3NlIGpRdWVyeSBhcyBhbiBBTUQgbW9kdWxlLCBidXQgb25seSBm
b3IgQU1EIGxvYWRlcnMgdGhhdAorLy8gdW5kZXJzdGFuZCB0aGUgaXNzdWVzIHdpdGggbG9hZGlu
ZyBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBqUXVlcnkKKy8vIGluIGEgcGFnZSB0aGF0IGFsbCBtaWdo
dCBjYWxsIGRlZmluZSgpLiBUaGUgbG9hZGVyIHdpbGwgaW5kaWNhdGUKKy8vIHRoZXkgaGF2ZSBz
cGVjaWFsIGFsbG93YW5jZXMgZm9yIG11bHRpcGxlIGpRdWVyeSB2ZXJzaW9ucyBieQorLy8gc3Bl
Y2lmeWluZyBkZWZpbmUuYW1kLmpRdWVyeSA9IHRydWUuIFJlZ2lzdGVyIGFzIGEgbmFtZWQgbW9k
dWxlLAorLy8gc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBvdGhlciBmaWxl
cyB0aGF0IG1heSB1c2UgZGVmaW5lLAorLy8gYnV0IG5vdCB1c2UgYSBwcm9wZXIgY29uY2F0ZW5h
dGlvbiBzY3JpcHQgdGhhdCB1bmRlcnN0YW5kcyBhbm9ueW1vdXMKKy8vIEFNRCBtb2R1bGVzLiBB
IG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0IHdheSB0byByZWdpc3Rlci4KKy8v
IExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFtZXMgYXJlIGRl
cml2ZWQgZnJvbQorLy8gZmlsZSBuYW1lcywgYW5kIGpRdWVyeSBpcyBub3JtYWxseSBkZWxpdmVy
ZWQgaW4gYSBsb3dlcmNhc2UgZmlsZSBuYW1lLgorLy8gRG8gdGhpcyBhZnRlciBjcmVhdGluZyB0
aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50cyB0byBjYWxsCisvLyBub0Nv
bmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3b3JrLgoraWYg
KCB0eXBlb2YgZGVmaW5lID09PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQgJiYgZGVmaW5lLmFt
ZC5qUXVlcnkgKSB7CisgICAgICAgIGRlZmluZSggImpxdWVyeSIsIFtdLCBmdW5jdGlvbiAoKSB7
IHJldHVybiBqUXVlcnk7IH0gKTsKK30KKworfSkoIHdpbmRvdyApOwpJbmRleDogUGVyZm9ybWFu
Y2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1w
bGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL3JlcXVpcmVqcy10ZXh0L3RleHQuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL3JlcXVpcmVqcy10
ZXh0L3RleHQuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJl
bmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2Nv
bXBvbmVudHMvcmVxdWlyZWpzLXRleHQvdGV4dC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDM4NiBAQAorLyoqCisgKiBAbGljZW5zZSBSZXF1aXJlSlMgdGV4dCAyLjAuMTAgQ29weXJpZ2h0
IChjKSAyMDEwLTIwMTIsIFRoZSBEb2pvIEZvdW5kYXRpb24gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqIEF2YWlsYWJsZSB2aWEgdGhlIE1JVCBvciBuZXcgQlNEIGxpY2Vuc2UuCisgKiBzZWU6IGh0
dHA6Ly9naXRodWIuY29tL3JlcXVpcmVqcy90ZXh0IGZvciBkZXRhaWxzCisgKi8KKy8qanNsaW50
IHJlZ2V4cDogdHJ1ZSAqLworLypnbG9iYWwgcmVxdWlyZSwgWE1MSHR0cFJlcXVlc3QsIEFjdGl2
ZVhPYmplY3QsCisgIGRlZmluZSwgd2luZG93LCBwcm9jZXNzLCBQYWNrYWdlcywKKyAgamF2YSwg
bG9jYXRpb24sIENvbXBvbmVudHMsIEZpbGVVdGlscyAqLworCitkZWZpbmUoWydtb2R1bGUnXSwg
ZnVuY3Rpb24gKG1vZHVsZSkgeworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHZhciB0ZXh0LCBm
cywgQ2MsIENpLCB4cGNJc1dpbmRvd3MsCisgICAgICAgIHByb2dJZHMgPSBbJ01zeG1sMi5YTUxI
VFRQJywgJ01pY3Jvc29mdC5YTUxIVFRQJywgJ01zeG1sMi5YTUxIVFRQLjQuMCddLAorICAgICAg
ICB4bWxSZWdFeHAgPSAvXlxzKjxcP3htbChccykrdmVyc2lvbj1bXCdcIl0oXGQpKi4oXGQpKltc
J1wiXShccykqXD8+L2ltLAorICAgICAgICBib2R5UmVnRXhwID0gLzxib2R5W14+XSo+XHMqKFtc
c1xTXSspXHMqPFwvYm9keT4vaW0sCisgICAgICAgIGhhc0xvY2F0aW9uID0gdHlwZW9mIGxvY2F0
aW9uICE9PSAndW5kZWZpbmVkJyAmJiBsb2NhdGlvbi5ocmVmLAorICAgICAgICBkZWZhdWx0UHJv
dG9jb2wgPSBoYXNMb2NhdGlvbiAmJiBsb2NhdGlvbi5wcm90b2NvbCAmJiBsb2NhdGlvbi5wcm90
b2NvbC5yZXBsYWNlKC9cOi8sICcnKSwKKyAgICAgICAgZGVmYXVsdEhvc3ROYW1lID0gaGFzTG9j
YXRpb24gJiYgbG9jYXRpb24uaG9zdG5hbWUsCisgICAgICAgIGRlZmF1bHRQb3J0ID0gaGFzTG9j
YXRpb24gJiYgKGxvY2F0aW9uLnBvcnQgfHwgdW5kZWZpbmVkKSwKKyAgICAgICAgYnVpbGRNYXAg
PSB7fSwKKyAgICAgICAgbWFzdGVyQ29uZmlnID0gKG1vZHVsZS5jb25maWcgJiYgbW9kdWxlLmNv
bmZpZygpKSB8fCB7fTsKKworICAgIHRleHQgPSB7CisgICAgICAgIHZlcnNpb246ICcyLjAuMTAn
LAorCisgICAgICAgIHN0cmlwOiBmdW5jdGlvbiAoY29udGVudCkgeworICAgICAgICAgICAgLy9T
dHJpcHMgPD94bWwgLi4uPz4gZGVjbGFyYXRpb25zIHNvIHRoYXQgZXh0ZXJuYWwgU1ZHIGFuZCBY
TUwKKyAgICAgICAgICAgIC8vZG9jdW1lbnRzIGNhbiBiZSBhZGRlZCB0byBhIGRvY3VtZW50IHdp
dGhvdXQgd29ycnkuIEFsc28sIGlmIHRoZSBzdHJpbmcKKyAgICAgICAgICAgIC8vaXMgYW4gSFRN
TCBkb2N1bWVudCwgb25seSB0aGUgcGFydCBpbnNpZGUgdGhlIGJvZHkgdGFnIGlzIHJldHVybmVk
LgorICAgICAgICAgICAgaWYgKGNvbnRlbnQpIHsKKyAgICAgICAgICAgICAgICBjb250ZW50ID0g
Y29udGVudC5yZXBsYWNlKHhtbFJlZ0V4cCwgIiIpOworICAgICAgICAgICAgICAgIHZhciBtYXRj
aGVzID0gY29udGVudC5tYXRjaChib2R5UmVnRXhwKTsKKyAgICAgICAgICAgICAgICBpZiAobWF0
Y2hlcykgeworICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gbWF0Y2hlc1sxXTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnRl
bnQgPSAiIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBjb250ZW50OworICAg
ICAgICB9LAorCisgICAgICAgIGpzRXNjYXBlOiBmdW5jdGlvbiAoY29udGVudCkgeworICAgICAg
ICAgICAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZSgvKFsnXFxdKS9nLCAnXFwkMScpCisgICAgICAg
ICAgICAgICAgLnJlcGxhY2UoL1tcZl0vZywgIlxcZiIpCisgICAgICAgICAgICAgICAgLnJlcGxh
Y2UoL1tcYl0vZywgIlxcYiIpCisgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcbl0vZywgIlxc
biIpCisgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcdF0vZywgIlxcdCIpCisgICAgICAgICAg
ICAgICAgLnJlcGxhY2UoL1tccl0vZywgIlxcciIpCisgICAgICAgICAgICAgICAgLnJlcGxhY2Uo
L1tcdTIwMjhdL2csICJcXHUyMDI4IikKKyAgICAgICAgICAgICAgICAucmVwbGFjZSgvW1x1MjAy
OV0vZywgIlxcdTIwMjkiKTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVYaHI6IG1hc3Rl
ckNvbmZpZy5jcmVhdGVYaHIgfHwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgLy9Xb3VsZCBs
b3ZlIHRvIGR1bXAgdGhlIEFjdGl2ZVggY3JhcCBpbiBoZXJlLiBOZWVkIElFIDYgdG8gZGllIGZp
cnN0LgorICAgICAgICAgICAgdmFyIHhociwgaSwgcHJvZ0lkOworICAgICAgICAgICAgaWYgKHR5
cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gInVuZGVmaW5lZCIpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVv
ZiBBY3RpdmVYT2JqZWN0ICE9PSAidW5kZWZpbmVkIikgeworICAgICAgICAgICAgICAgIGZvciAo
aSA9IDA7IGkgPCAzOyBpICs9IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvZ0lkID0gcHJv
Z0lkc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHhociA9IG5ldyBBY3RpdmVYT2JqZWN0KHByb2dJZCk7CisgICAgICAgICAgICAgICAgICAg
IH0gY2F0Y2ggKGUpIHt9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHhocikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvZ0lkcyA9IFtwcm9nSWRdOyAgLy8gc28gZmFzdGVyIG5leHQg
dGltZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVy
biB4aHI7CisgICAgICAgIH0sCisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFBhcnNlcyBhIHJl
c291cmNlIG5hbWUgaW50byBpdHMgY29tcG9uZW50IHBhcnRzLiBSZXNvdXJjZSBuYW1lcworICAg
ICAgICAgKiBsb29rIGxpa2U6IG1vZHVsZS9uYW1lLmV4dCFzdHJpcCwgd2hlcmUgdGhlICFzdHJp
cCBwYXJ0IGlzCisgICAgICAgICAqIG9wdGlvbmFsLgorICAgICAgICAgKiBAcGFyYW0ge1N0cmlu
Z30gbmFtZSB0aGUgcmVzb3VyY2UgbmFtZQorICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSB3
aXRoIHByb3BlcnRpZXMgIm1vZHVsZU5hbWUiLCAiZXh0IiBhbmQgInN0cmlwIgorICAgICAgICAg
KiB3aGVyZSBzdHJpcCBpcyBhIGJvb2xlYW4uCisgICAgICAgICAqLworICAgICAgICBwYXJzZU5h
bWU6IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgICAgICB2YXIgbW9kTmFtZSwgZXh0LCB0ZW1w
LAorICAgICAgICAgICAgICAgIHN0cmlwID0gZmFsc2UsCisgICAgICAgICAgICAgICAgaW5kZXgg
PSBuYW1lLmluZGV4T2YoIi4iKSwKKyAgICAgICAgICAgICAgICBpc1JlbGF0aXZlID0gbmFtZS5p
bmRleE9mKCcuLycpID09PSAwIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUu
aW5kZXhPZignLi4vJykgPT09IDA7CisKKyAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEgJiYg
KCFpc1JlbGF0aXZlIHx8IGluZGV4ID4gMSkpIHsKKyAgICAgICAgICAgICAgICBtb2ROYW1lID0g
bmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOworICAgICAgICAgICAgICAgIGV4dCA9IG5hbWUuc3Vi
c3RyaW5nKGluZGV4ICsgMSwgbmFtZS5sZW5ndGgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBtb2ROYW1lID0gbmFtZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgdGVtcCA9IGV4dCB8fCBtb2ROYW1lOworICAgICAgICAgICAgaW5kZXggPSB0ZW1wLmluZGV4
T2YoIiEiKTsKKyAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHsKKyAgICAgICAgICAgICAg
ICAvL1B1bGwgb2ZmIHRoZSBzdHJpcCBhcmcuCisgICAgICAgICAgICAgICAgc3RyaXAgPSB0ZW1w
LnN1YnN0cmluZyhpbmRleCArIDEpID09PSAic3RyaXAiOworICAgICAgICAgICAgICAgIHRlbXAg
PSB0ZW1wLnN1YnN0cmluZygwLCBpbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKGV4dCkgewor
ICAgICAgICAgICAgICAgICAgICBleHQgPSB0ZW1wOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIG1vZE5hbWUgPSB0ZW1wOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICBt
b2R1bGVOYW1lOiBtb2ROYW1lLAorICAgICAgICAgICAgICAgIGV4dDogZXh0LAorICAgICAgICAg
ICAgICAgIHN0cmlwOiBzdHJpcAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAg
ICB4ZFJlZ0V4cDogL14oKFx3KylcOik/XC9cLyhbXlwvXFxdKykvLAorCisgICAgICAgIC8qKgor
ICAgICAgICAgKiBJcyBhbiBVUkwgb24gYW5vdGhlciBkb21haW4uIE9ubHkgd29ya3MgZm9yIGJy
b3dzZXIgdXNlLCByZXR1cm5zCisgICAgICAgICAqIGZhbHNlIGluIG5vbi1icm93c2VyIGVudmly
b25tZW50cy4gT25seSB1c2VkIHRvIGtub3cgaWYgYW4KKyAgICAgICAgICogb3B0aW1pemVkIC5q
cyB2ZXJzaW9uIG9mIGEgdGV4dCByZXNvdXJjZSBzaG91bGQgYmUgbG9hZGVkCisgICAgICAgICAq
IGluc3RlYWQuCisgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwKKyAgICAgICAgICogQHJl
dHVybnMgQm9vbGVhbgorICAgICAgICAgKi8KKyAgICAgICAgdXNlWGhyOiBmdW5jdGlvbiAodXJs
LCBwcm90b2NvbCwgaG9zdG5hbWUsIHBvcnQpIHsKKyAgICAgICAgICAgIHZhciB1UHJvdG9jb2ws
IHVIb3N0TmFtZSwgdVBvcnQsCisgICAgICAgICAgICAgICAgbWF0Y2ggPSB0ZXh0LnhkUmVnRXhw
LmV4ZWModXJsKTsKKyAgICAgICAgICAgIGlmICghbWF0Y2gpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVQcm90b2NvbCA9IG1hdGNo
WzJdOworICAgICAgICAgICAgdUhvc3ROYW1lID0gbWF0Y2hbM107CisKKyAgICAgICAgICAgIHVI
b3N0TmFtZSA9IHVIb3N0TmFtZS5zcGxpdCgnOicpOworICAgICAgICAgICAgdVBvcnQgPSB1SG9z
dE5hbWVbMV07CisgICAgICAgICAgICB1SG9zdE5hbWUgPSB1SG9zdE5hbWVbMF07CisKKyAgICAg
ICAgICAgIHJldHVybiAoIXVQcm90b2NvbCB8fCB1UHJvdG9jb2wgPT09IHByb3RvY29sKSAmJgor
ICAgICAgICAgICAgICAgICAgICghdUhvc3ROYW1lIHx8IHVIb3N0TmFtZS50b0xvd2VyQ2FzZSgp
ID09PSBob3N0bmFtZS50b0xvd2VyQ2FzZSgpKSAmJgorICAgICAgICAgICAgICAgICAgICgoIXVQ
b3J0ICYmICF1SG9zdE5hbWUpIHx8IHVQb3J0ID09PSBwb3J0KTsKKyAgICAgICAgfSwKKworICAg
ICAgICBmaW5pc2hMb2FkOiBmdW5jdGlvbiAobmFtZSwgc3RyaXAsIGNvbnRlbnQsIG9uTG9hZCkg
eworICAgICAgICAgICAgY29udGVudCA9IHN0cmlwID8gdGV4dC5zdHJpcChjb250ZW50KSA6IGNv
bnRlbnQ7CisgICAgICAgICAgICBpZiAobWFzdGVyQ29uZmlnLmlzQnVpbGQpIHsKKyAgICAgICAg
ICAgICAgICBidWlsZE1hcFtuYW1lXSA9IGNvbnRlbnQ7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBvbkxvYWQoY29udGVudCk7CisgICAgICAgIH0sCisKKyAgICAgICAgbG9hZDogZnVuY3Rp
b24gKG5hbWUsIHJlcSwgb25Mb2FkLCBjb25maWcpIHsKKyAgICAgICAgICAgIC8vTmFtZSBoYXMg
Zm9ybWF0OiBzb21lLm1vZHVsZS5maWxleHQhc3RyaXAKKyAgICAgICAgICAgIC8vVGhlIHN0cmlw
IHBhcnQgaXMgb3B0aW9uYWwuCisgICAgICAgICAgICAvL2lmIHN0cmlwIGlzIHByZXNlbnQsIHRo
ZW4gdGhhdCBtZWFucyBvbmx5IGdldCB0aGUgc3RyaW5nIGNvbnRlbnRzCisgICAgICAgICAgICAv
L2luc2lkZSBhIGJvZHkgdGFnIGluIGFuIEhUTUwgc3RyaW5nLiBGb3IgWE1ML1NWRyBjb250ZW50
IGl0IG1lYW5zCisgICAgICAgICAgICAvL3JlbW92aW5nIHRoZSA8P3htbCAuLi4/PiBkZWNsYXJh
dGlvbnMgc28gdGhlIGNvbnRlbnQgY2FuIGJlIGluc2VydGVkCisgICAgICAgICAgICAvL2ludG8g
dGhlIGN1cnJlbnQgZG9jIHdpdGhvdXQgcHJvYmxlbXMuCisKKyAgICAgICAgICAgIC8vIERvIG5v
dCBib3RoZXIgd2l0aCB0aGUgd29yayBpZiBhIGJ1aWxkIGFuZCB0ZXh0IHdpbGwKKyAgICAgICAg
ICAgIC8vIG5vdCBiZSBpbmxpbmVkLgorICAgICAgICAgICAgaWYgKGNvbmZpZy5pc0J1aWxkICYm
ICFjb25maWcuaW5saW5lVGV4dCkgeworICAgICAgICAgICAgICAgIG9uTG9hZCgpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWFzdGVyQ29u
ZmlnLmlzQnVpbGQgPSBjb25maWcuaXNCdWlsZDsKKworICAgICAgICAgICAgdmFyIHBhcnNlZCA9
IHRleHQucGFyc2VOYW1lKG5hbWUpLAorICAgICAgICAgICAgICAgIG5vblN0cmlwTmFtZSA9IHBh
cnNlZC5tb2R1bGVOYW1lICsKKyAgICAgICAgICAgICAgICAgICAgKHBhcnNlZC5leHQgPyAnLicg
KyBwYXJzZWQuZXh0IDogJycpLAorICAgICAgICAgICAgICAgIHVybCA9IHJlcS50b1VybChub25T
dHJpcE5hbWUpLAorICAgICAgICAgICAgICAgIHVzZVhociA9IChtYXN0ZXJDb25maWcudXNlWGhy
KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQudXNlWGhyOworCisgICAgICAgICAg
ICAvLyBEbyBub3QgbG9hZCBpZiBpdCBpcyBhbiBlbXB0eTogdXJsCisgICAgICAgICAgICBpZiAo
dXJsLmluZGV4T2YoJ2VtcHR5OicpID09PSAwKSB7CisgICAgICAgICAgICAgICAgb25Mb2FkKCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
L0xvYWQgdGhlIHRleHQuIFVzZSBYSFIgaWYgcG9zc2libGUgYW5kIGluIGEgYnJvd3Nlci4KKyAg
ICAgICAgICAgIGlmICghaGFzTG9jYXRpb24gfHwgdXNlWGhyKHVybCwgZGVmYXVsdFByb3RvY29s
LCBkZWZhdWx0SG9zdE5hbWUsIGRlZmF1bHRQb3J0KSkgeworICAgICAgICAgICAgICAgIHRleHQu
Z2V0KHVybCwgZnVuY3Rpb24gKGNvbnRlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dC5m
aW5pc2hMb2FkKG5hbWUsIHBhcnNlZC5zdHJpcCwgY29udGVudCwgb25Mb2FkKTsKKyAgICAgICAg
ICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChvbkxv
YWQuZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uTG9hZC5lcnJvcihlcnIpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIC8vTmVlZCB0byBmZXRjaCB0aGUgcmVzb3VyY2UgYWNy
b3NzIGRvbWFpbnMuIEFzc3VtZQorICAgICAgICAgICAgICAgIC8vdGhlIHJlc291cmNlIGhhcyBi
ZWVuIG9wdGltaXplZCBpbnRvIGEgSlMgbW9kdWxlLiBGZXRjaAorICAgICAgICAgICAgICAgIC8v
YnkgdGhlIG1vZHVsZSBuYW1lICsgZXh0ZW5zaW9uLCBidXQgZG8gbm90IGluY2x1ZGUgdGhlCisg
ICAgICAgICAgICAgICAgLy8hc3RyaXAgcGFydCB0byBhdm9pZCBmaWxlIHN5c3RlbSBpc3N1ZXMu
CisgICAgICAgICAgICAgICAgcmVxKFtub25TdHJpcE5hbWVdLCBmdW5jdGlvbiAoY29udGVudCkg
eworICAgICAgICAgICAgICAgICAgICB0ZXh0LmZpbmlzaExvYWQocGFyc2VkLm1vZHVsZU5hbWUg
KyAnLicgKyBwYXJzZWQuZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyc2VkLnN0cmlwLCBjb250ZW50LCBvbkxvYWQpOworICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIHdyaXRlOiBmdW5jdGlvbiAocGx1Z2lu
TmFtZSwgbW9kdWxlTmFtZSwgd3JpdGUsIGNvbmZpZykgeworICAgICAgICAgICAgaWYgKGJ1aWxk
TWFwLmhhc093blByb3BlcnR5KG1vZHVsZU5hbWUpKSB7CisgICAgICAgICAgICAgICAgdmFyIGNv
bnRlbnQgPSB0ZXh0LmpzRXNjYXBlKGJ1aWxkTWFwW21vZHVsZU5hbWVdKTsKKyAgICAgICAgICAg
ICAgICB3cml0ZS5hc01vZHVsZShwbHVnaW5OYW1lICsgIiEiICsgbW9kdWxlTmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVmaW5lKGZ1bmN0aW9uICgpIHsgcmV0dXJuICci
ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCArCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIic7fSk7XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSwKKworICAgICAgICB3cml0ZUZpbGU6IGZ1bmN0aW9uIChwbHVnaW5OYW1lLCBtb2R1bGVO
YW1lLCByZXEsIHdyaXRlLCBjb25maWcpIHsKKyAgICAgICAgICAgIHZhciBwYXJzZWQgPSB0ZXh0
LnBhcnNlTmFtZShtb2R1bGVOYW1lKSwKKyAgICAgICAgICAgICAgICBleHRQYXJ0ID0gcGFyc2Vk
LmV4dCA/ICcuJyArIHBhcnNlZC5leHQgOiAnJywKKyAgICAgICAgICAgICAgICBub25TdHJpcE5h
bWUgPSBwYXJzZWQubW9kdWxlTmFtZSArIGV4dFBhcnQsCisgICAgICAgICAgICAgICAgLy9Vc2Ug
YSAnLmpzJyBmaWxlIG5hbWUgc28gdGhhdCBpdCBpbmRpY2F0ZXMgaXQgaXMgYQorICAgICAgICAg
ICAgICAgIC8vc2NyaXB0IHRoYXQgY2FuIGJlIGxvYWRlZCBhY3Jvc3MgZG9tYWlucy4KKyAgICAg
ICAgICAgICAgICBmaWxlTmFtZSA9IHJlcS50b1VybChwYXJzZWQubW9kdWxlTmFtZSArIGV4dFBh
cnQpICsgJy5qcyc7CisKKyAgICAgICAgICAgIC8vTGV2ZXJhZ2Ugb3duIGxvYWQoKSBtZXRob2Qg
dG8gbG9hZCBwbHVnaW4gdmFsdWUsIGJ1dCBvbmx5CisgICAgICAgICAgICAvL3dyaXRlIG91dCB2
YWx1ZXMgdGhhdCBkbyBub3QgaGF2ZSB0aGUgc3RyaXAgYXJndW1lbnQsCisgICAgICAgICAgICAv
L3RvIGF2b2lkIGFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggISBpbiBmaWxlIG5hbWVzLgorICAg
ICAgICAgICAgdGV4dC5sb2FkKG5vblN0cmlwTmFtZSwgcmVxLCBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgICAgICAgICAgICAvL1VzZSBvd24gd3JpdGUoKSBtZXRob2QgdG8gY29uc3RydWN0IGZ1
bGwgbW9kdWxlIHZhbHVlLgorICAgICAgICAgICAgICAgIC8vQnV0IG5lZWQgdG8gY3JlYXRlIHNo
ZWxsIHRoYXQgdHJhbnNsYXRlcyB3cml0ZUZpbGUncworICAgICAgICAgICAgICAgIC8vd3JpdGUo
KSB0byB0aGUgcmlnaHQgaW50ZXJmYWNlLgorICAgICAgICAgICAgICAgIHZhciB0ZXh0V3JpdGUg
PSBmdW5jdGlvbiAoY29udGVudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRl
KGZpbGVOYW1lLCBjb250ZW50cyk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAg
ICB0ZXh0V3JpdGUuYXNNb2R1bGUgPSBmdW5jdGlvbiAobW9kdWxlTmFtZSwgY29udGVudHMpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlLmFzTW9kdWxlKG1vZHVsZU5hbWUsIGZp
bGVOYW1lLCBjb250ZW50cyk7CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAg
IHRleHQud3JpdGUocGx1Z2luTmFtZSwgbm9uU3RyaXBOYW1lLCB0ZXh0V3JpdGUsIGNvbmZpZyk7
CisgICAgICAgICAgICB9LCBjb25maWcpOworICAgICAgICB9CisgICAgfTsKKworICAgIGlmICht
YXN0ZXJDb25maWcuZW52ID09PSAnbm9kZScgfHwgKCFtYXN0ZXJDb25maWcuZW52ICYmCisgICAg
ICAgICAgICB0eXBlb2YgcHJvY2VzcyAhPT0gInVuZGVmaW5lZCIgJiYKKyAgICAgICAgICAgIHBy
b2Nlc3MudmVyc2lvbnMgJiYKKyAgICAgICAgICAgICEhcHJvY2Vzcy52ZXJzaW9ucy5ub2RlICYm
CisgICAgICAgICAgICAhcHJvY2Vzcy52ZXJzaW9uc1snbm9kZS13ZWJraXQnXSkpIHsKKyAgICAg
ICAgLy9Vc2luZyBzcGVjaWFsIHJlcXVpcmUubm9kZVJlcXVpcmUsIHNvbWV0aGluZyBhZGRlZCBi
eSByLmpzLgorICAgICAgICBmcyA9IHJlcXVpcmUubm9kZVJlcXVpcmUoJ2ZzJyk7CisKKyAgICAg
ICAgdGV4dC5nZXQgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaywgZXJyYmFjaykgeworICAgICAg
ICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB2YXIgZmlsZSA9IGZzLnJlYWRGaWxlU3luYyh1
cmwsICd1dGY4Jyk7CisgICAgICAgICAgICAgICAgLy9SZW1vdmUgQk9NIChCeXRlIE1hcmsgT3Jk
ZXIpIGZyb20gdXRmOCBmaWxlcyBpZiBpdCBpcyB0aGVyZS4KKyAgICAgICAgICAgICAgICBpZiAo
ZmlsZS5pbmRleE9mKCdcdUZFRkYnKSA9PT0gMCkgeworICAgICAgICAgICAgICAgICAgICBmaWxl
ID0gZmlsZS5zdWJzdHJpbmcoMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGNhbGxiYWNrKGZpbGUpOworICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAg
ICAgIGVycmJhY2soZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfSBlbHNlIGlm
IChtYXN0ZXJDb25maWcuZW52ID09PSAneGhyJyB8fCAoIW1hc3RlckNvbmZpZy5lbnYgJiYKKyAg
ICAgICAgICAgIHRleHQuY3JlYXRlWGhyKCkpKSB7CisgICAgICAgIHRleHQuZ2V0ID0gZnVuY3Rp
b24gKHVybCwgY2FsbGJhY2ssIGVycmJhY2ssIGhlYWRlcnMpIHsKKyAgICAgICAgICAgIHZhciB4
aHIgPSB0ZXh0LmNyZWF0ZVhocigpLCBoZWFkZXI7CisgICAgICAgICAgICB4aHIub3BlbignR0VU
JywgdXJsLCB0cnVlKTsKKworICAgICAgICAgICAgLy9BbGxvdyBwbHVnaW5zIGRpcmVjdCBhY2Nl
c3MgdG8geGhyIGhlYWRlcnMKKyAgICAgICAgICAgIGlmIChoZWFkZXJzKSB7CisgICAgICAgICAg
ICAgICAgZm9yIChoZWFkZXIgaW4gaGVhZGVycykgeworICAgICAgICAgICAgICAgICAgICBpZiAo
aGVhZGVycy5oYXNPd25Qcm9wZXJ0eShoZWFkZXIpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB4aHIuc2V0UmVxdWVzdEhlYWRlcihoZWFkZXIudG9Mb3dlckNhc2UoKSwgaGVhZGVyc1toZWFk
ZXJdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy9BbGxvdyBvdmVycmlkZXMgc3BlY2lmaWVkIGluIGNvbmZp
ZworICAgICAgICAgICAgaWYgKG1hc3RlckNvbmZpZy5vblhocikgeworICAgICAgICAgICAgICAg
IG1hc3RlckNvbmZpZy5vblhocih4aHIsIHVybCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICAgICAg
ICAgICAgdmFyIHN0YXR1cywgZXJyOworICAgICAgICAgICAgICAgIC8vRG8gbm90IGV4cGxpY2l0
bHkgaGFuZGxlIGVycm9ycywgdGhvc2Ugc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgLy92aXNp
YmxlIHZpYSBjb25zb2xlIG91dHB1dCBpbiB0aGUgYnJvd3Nlci4KKyAgICAgICAgICAgICAgICBp
ZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0g
eGhyLnN0YXR1czsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA+IDM5OSAmJiBzdGF0
dXMgPCA2MDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vQW4gaHR0cCA0eHggb3IgNXh4
IGVycm9yLiBTaWduYWwgYW4gZXJyb3IuCisgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBu
ZXcgRXJyb3IodXJsICsgJyBIVFRQIHN0YXR1czogJyArIHN0YXR1cyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBlcnIueGhyID0geGhyOworICAgICAgICAgICAgICAgICAgICAgICAgZXJyYmFj
ayhlcnIpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY2FsbGJhY2soeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICBpZiAobWFzdGVyQ29uZmlnLm9uWGhyQ29tcGxldGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlckNvbmZpZy5vblhockNvbXBsZXRlKHhociwg
dXJsKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH07CisgICAgICAgICAgICB4aHIuc2VuZChudWxsKTsKKyAgICAgICAgfTsKKyAgICB9IGVs
c2UgaWYgKG1hc3RlckNvbmZpZy5lbnYgPT09ICdyaGlubycgfHwgKCFtYXN0ZXJDb25maWcuZW52
ICYmCisgICAgICAgICAgICB0eXBlb2YgUGFja2FnZXMgIT09ICd1bmRlZmluZWQnICYmIHR5cGVv
ZiBqYXZhICE9PSAndW5kZWZpbmVkJykpIHsKKyAgICAgICAgLy9XaHkgSmF2YSwgd2h5IGlzIHRo
aXMgc28gYXdrd2FyZD8KKyAgICAgICAgdGV4dC5nZXQgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFj
aykgeworICAgICAgICAgICAgdmFyIHN0cmluZ0J1ZmZlciwgbGluZSwKKyAgICAgICAgICAgICAg
ICBlbmNvZGluZyA9ICJ1dGYtOCIsCisgICAgICAgICAgICAgICAgZmlsZSA9IG5ldyBqYXZhLmlv
LkZpbGUodXJsKSwKKyAgICAgICAgICAgICAgICBsaW5lU2VwYXJhdG9yID0gamF2YS5sYW5nLlN5
c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSwKKyAgICAgICAgICAgICAgICBpbnB1
dCA9IG5ldyBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyKG5ldyBqYXZhLmlvLklucHV0U3RyZWFtUmVh
ZGVyKG5ldyBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbShmaWxlKSwgZW5jb2RpbmcpKSwKKyAgICAg
ICAgICAgICAgICBjb250ZW50ID0gJyc7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAg
ICAgIHN0cmluZ0J1ZmZlciA9IG5ldyBqYXZhLmxhbmcuU3RyaW5nQnVmZmVyKCk7CisgICAgICAg
ICAgICAgICAgbGluZSA9IGlucHV0LnJlYWRMaW5lKCk7CisKKyAgICAgICAgICAgICAgICAvLyBC
eXRlIE9yZGVyIE1hcmsgKEJPTSkgLSBUaGUgVW5pY29kZSBTdGFuZGFyZCwgdmVyc2lvbiAzLjAs
IHBhZ2UgMzI0CisgICAgICAgICAgICAgICAgLy8gaHR0cDovL3d3dy51bmljb2RlLm9yZy9mYXEv
dXRmX2JvbS5odG1sCisKKyAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2hlbiB3ZSB1c2Ug
dXRmLTgsIHRoZSBCT00gc2hvdWxkIGFwcGVhciBhcyAiRUYgQkIgQkYiLCBidXQgaXQgZG9lc24n
dCBkdWUgdG8gdGhpcyBidWcgaW4gdGhlIEpESzoKKyAgICAgICAgICAgICAgICAvLyBodHRwOi8v
YnVncy5zdW4uY29tL2J1Z2RhdGFiYXNlL3ZpZXdfYnVnLmRvP2J1Z19pZD00NTA4MDU4CisgICAg
ICAgICAgICAgICAgaWYgKGxpbmUgJiYgbGluZS5sZW5ndGgoKSAmJiBsaW5lLmNoYXJBdCgwKSA9
PT0gMHhmZWZmKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEVhdCB0aGUgQk9NLCBzaW5jZSB3
ZSd2ZSBhbHJlYWR5IGZvdW5kIHRoZSBlbmNvZGluZyBvbiB0aGlzIGZpbGUsCisgICAgICAgICAg
ICAgICAgICAgIC8vIGFuZCB3ZSBwbGFuIHRvIGNvbmNhdGVuYXRpbmcgdGhpcyBidWZmZXIgd2l0
aCBvdGhlcnM7IHRoZSBCT00gc2hvdWxkCisgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgYXBw
ZWFyIGF0IHRoZSB0b3Agb2YgYSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGlu
ZS5zdWJzdHJpbmcoMSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYg
KGxpbmUgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nQnVmZmVyLmFwcGVu
ZChsaW5lKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoKGxp
bmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBz
dHJpbmdCdWZmZXIuYXBwZW5kKGxpbmVTZXBhcmF0b3IpOworICAgICAgICAgICAgICAgICAgICBz
dHJpbmdCdWZmZXIuYXBwZW5kKGxpbmUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAvL01ha2Ugc3VyZSB3ZSByZXR1cm4gYSBKYXZhU2NyaXB0IHN0cmluZyBhbmQgbm90IGEg
SmF2YSBzdHJpbmcuCisgICAgICAgICAgICAgICAgY29udGVudCA9IFN0cmluZyhzdHJpbmdCdWZm
ZXIudG9TdHJpbmcoKSk7IC8vU3RyaW5nCisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAg
ICAgICAgICAgIGlucHV0LmNsb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYWxs
YmFjayhjb250ZW50KTsKKyAgICAgICAgfTsKKyAgICB9IGVsc2UgaWYgKG1hc3RlckNvbmZpZy5l
bnYgPT09ICd4cGNvbm5lY3QnIHx8ICghbWFzdGVyQ29uZmlnLmVudiAmJgorICAgICAgICAgICAg
dHlwZW9mIENvbXBvbmVudHMgIT09ICd1bmRlZmluZWQnICYmIENvbXBvbmVudHMuY2xhc3NlcyAm
JgorICAgICAgICAgICAgQ29tcG9uZW50cy5pbnRlcmZhY2VzKSkgeworICAgICAgICAvL0F2ZXJ0
IHlvdXIgZ2F6ZSEKKyAgICAgICAgQ2MgPSBDb21wb25lbnRzLmNsYXNzZXMsCisgICAgICAgIENp
ID0gQ29tcG9uZW50cy5pbnRlcmZhY2VzOworICAgICAgICBDb21wb25lbnRzLnV0aWxzWydpbXBv
cnQnXSgncmVzb3VyY2U6Ly9ncmUvbW9kdWxlcy9GaWxlVXRpbHMuanNtJyk7CisgICAgICAgIHhw
Y0lzV2luZG93cyA9ICgnQG1vemlsbGEub3JnL3dpbmRvd3MtcmVnaXN0cnkta2V5OzEnIGluIENj
KTsKKworICAgICAgICB0ZXh0LmdldCA9IGZ1bmN0aW9uICh1cmwsIGNhbGxiYWNrKSB7CisgICAg
ICAgICAgICB2YXIgaW5TdHJlYW0sIGNvbnZlcnRTdHJlYW0sIGZpbGVPYmosCisgICAgICAgICAg
ICAgICAgcmVhZERhdGEgPSB7fTsKKworICAgICAgICAgICAgaWYgKHhwY0lzV2luZG93cykgewor
ICAgICAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKC9cLy9nLCAnXFwnKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgZmlsZU9iaiA9IG5ldyBGaWxlVXRpbHMuRmlsZSh1cmwpOwor
CisgICAgICAgICAgICAvL1hQQ09NLCB5b3Ugc28gY3JhenkKKyAgICAgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICAgICAgaW5TdHJlYW0gPSBDY1snQG1vemlsbGEub3JnL25ldHdvcmsvZmlsZS1p
bnB1dC1zdHJlYW07MSddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3JlYXRlSW5zdGFu
Y2UoQ2kubnNJRmlsZUlucHV0U3RyZWFtKTsKKyAgICAgICAgICAgICAgICBpblN0cmVhbS5pbml0
KGZpbGVPYmosIDEsIDAsIGZhbHNlKTsKKworICAgICAgICAgICAgICAgIGNvbnZlcnRTdHJlYW0g
PSBDY1snQG1vemlsbGEub3JnL2ludGwvY29udmVydGVyLWlucHV0LXN0cmVhbTsxJ10KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZUluc3RhbmNlKENpLm5zSUNvbnZlcnRl
cklucHV0U3RyZWFtKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0U3RyZWFtLmluaXQoaW5TdHJl
YW0sICJ1dGYtOCIsIGluU3RyZWFtLmF2YWlsYWJsZSgpLAorICAgICAgICAgICAgICAgIENpLm5z
SUNvbnZlcnRlcklucHV0U3RyZWFtLkRFRkFVTFRfUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTsKKwor
ICAgICAgICAgICAgICAgIGNvbnZlcnRTdHJlYW0ucmVhZFN0cmluZyhpblN0cmVhbS5hdmFpbGFi
bGUoKSwgcmVhZERhdGEpOworICAgICAgICAgICAgICAgIGNvbnZlcnRTdHJlYW0uY2xvc2UoKTsK
KyAgICAgICAgICAgICAgICBpblN0cmVhbS5jbG9zZSgpOworICAgICAgICAgICAgICAgIGNhbGxi
YWNrKHJlYWREYXRhLnZhbHVlKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKGZpbGVPYmogJiYgZmlsZU9iai5wYXRoIHx8ICcnKSAr
ICc6ICcgKyBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisgICAgcmV0dXJu
IHRleHQ7Cit9KTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9y
ZXF1aXJlanMvcmVxdWlyZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91
RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jv
d2VyX2NvbXBvbmVudHMvcmVxdWlyZWpzL3JlcXVpcmUuanMJKHJldmlzaW9uIDApCisrKyBQZXJm
b3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvcmVxdWlyZWpzL3JlcXVpcmUuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDU0IEBACisvKiogdmltOiBldDp0cz00OnN3PTQ6c3Rz
PTQKKyAqIEBsaWNlbnNlIFJlcXVpcmVKUyAyLjEuOSBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMiwg
VGhlIERvam8gRm91bmRhdGlvbiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQXZhaWxhYmxlIHZp
YSB0aGUgTUlUIG9yIG5ldyBCU0QgbGljZW5zZS4KKyAqIHNlZTogaHR0cDovL2dpdGh1Yi5jb20v
anJidXJrZS9yZXF1aXJlanMgZm9yIGRldGFpbHMKKyAqLworLy9Ob3QgdXNpbmcgc3RyaWN0OiB1
bmV2ZW4gc3RyaWN0IHN1cHBvcnQgaW4gYnJvd3NlcnMsICMzOTIsIGFuZCBjYXVzZXMKKy8vcHJv
YmxlbXMgd2l0aCByZXF1aXJlanMuZXhlYygpL3RyYW5zcGlsZXIgcGx1Z2lucyB0aGF0IG1heSBu
b3QgYmUgc3RyaWN0LgorLypqc2xpbnQgcmVnZXhwOiB0cnVlLCBub21lbjogdHJ1ZSwgc2xvcHB5
OiB0cnVlICovCisvKmdsb2JhbCB3aW5kb3csIG5hdmlnYXRvciwgZG9jdW1lbnQsIGltcG9ydFNj
cmlwdHMsIHNldFRpbWVvdXQsIG9wZXJhICovCisKK3ZhciByZXF1aXJlanMsIHJlcXVpcmUsIGRl
ZmluZTsKKyhmdW5jdGlvbiAoZ2xvYmFsKSB7CisgICAgdmFyIHJlcSwgcywgaGVhZCwgYmFzZUVs
ZW1lbnQsIGRhdGFNYWluLCBzcmMsCisgICAgICAgIGludGVyYWN0aXZlU2NyaXB0LCBjdXJyZW50
bHlBZGRpbmdTY3JpcHQsIG1haW5TY3JpcHQsIHN1YlBhdGgsCisgICAgICAgIHZlcnNpb24gPSAn
Mi4xLjknLAorICAgICAgICBjb21tZW50UmVnRXhwID0gLyhcL1wqKFtcc1xTXSo/KVwqXC98KFte
Ol18XilcL1wvKC4qKSQpL21nLAorICAgICAgICBjanNSZXF1aXJlUmVnRXhwID0gL1teLl1ccypy
ZXF1aXJlXHMqXChccypbIiddKFteJyJcc10rKVsiJ11ccypcKS9nLAorICAgICAgICBqc1N1ZmZp
eFJlZ0V4cCA9IC9cLmpzJC8sCisgICAgICAgIGN1cnJEaXJSZWdFeHAgPSAvXlwuXC8vLAorICAg
ICAgICBvcCA9IE9iamVjdC5wcm90b3R5cGUsCisgICAgICAgIG9zdHJpbmcgPSBvcC50b1N0cmlu
ZywKKyAgICAgICAgaGFzT3duID0gb3AuaGFzT3duUHJvcGVydHksCisgICAgICAgIGFwID0gQXJy
YXkucHJvdG90eXBlLAorICAgICAgICBhcHNwID0gYXAuc3BsaWNlLAorICAgICAgICBpc0Jyb3dz
ZXIgPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgbmF2aWdhdG9y
ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQpLAorICAgICAgICBpc1dlYldvcmtl
ciA9ICFpc0Jyb3dzZXIgJiYgdHlwZW9mIGltcG9ydFNjcmlwdHMgIT09ICd1bmRlZmluZWQnLAor
ICAgICAgICAvL1BTMyBpbmRpY2F0ZXMgbG9hZGVkIGFuZCBjb21wbGV0ZSwgYnV0IG5lZWQgdG8g
d2FpdCBmb3IgY29tcGxldGUKKyAgICAgICAgLy9zcGVjaWZpY2FsbHkuIFNlcXVlbmNlIGlzICds
b2FkaW5nJywgJ2xvYWRlZCcsIGV4ZWN1dGlvbiwKKyAgICAgICAgLy8gdGhlbiAnY29tcGxldGUn
LiBUaGUgVUEgY2hlY2sgaXMgdW5mb3J0dW5hdGUsIGJ1dCBub3Qgc3VyZSBob3cKKyAgICAgICAg
Ly90byBmZWF0dXJlIHRlc3Qgdy9vIGNhdXNpbmcgcGVyZiBpc3N1ZXMuCisgICAgICAgIHJlYWR5
UmVnRXhwID0gaXNCcm93c2VyICYmIG5hdmlnYXRvci5wbGF0Zm9ybSA9PT0gJ1BMQVlTVEFUSU9O
IDMnID8KKyAgICAgICAgICAgICAgICAgICAgICAvXmNvbXBsZXRlJC8gOiAvXihjb21wbGV0ZXxs
b2FkZWQpJC8sCisgICAgICAgIGRlZkNvbnRleHROYW1lID0gJ18nLAorICAgICAgICAvL09oIHRo
ZSB0cmFnZWR5LCBkZXRlY3Rpbmcgb3BlcmEuIFNlZSB0aGUgdXNhZ2Ugb2YgaXNPcGVyYSBmb3Ig
cmVhc29uLgorICAgICAgICBpc09wZXJhID0gdHlwZW9mIG9wZXJhICE9PSAndW5kZWZpbmVkJyAm
JiBvcGVyYS50b1N0cmluZygpID09PSAnW29iamVjdCBPcGVyYV0nLAorICAgICAgICBjb250ZXh0
cyA9IHt9LAorICAgICAgICBjZmcgPSB7fSwKKyAgICAgICAgZ2xvYmFsRGVmUXVldWUgPSBbXSwK
KyAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSBmYWxzZTsKKworICAgIGZ1bmN0aW9uIGlzRnVuY3Rp
b24oaXQpIHsKKyAgICAgICAgcmV0dXJuIG9zdHJpbmcuY2FsbChpdCkgPT09ICdbb2JqZWN0IEZ1
bmN0aW9uXSc7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNBcnJheShpdCkgeworICAgICAgICBy
ZXR1cm4gb3N0cmluZy5jYWxsKGl0KSA9PT0gJ1tvYmplY3QgQXJyYXldJzsKKyAgICB9CisKKyAg
ICAvKioKKyAgICAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGl0ZXJhdGluZyBvdmVyIGFuIGFycmF5
LiBJZiB0aGUgZnVuYyByZXR1cm5zCisgICAgICogYSB0cnVlIHZhbHVlLCBpdCB3aWxsIGJyZWFr
IG91dCBvZiB0aGUgbG9vcC4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBlYWNoKGFyeSwgZnVuYykg
eworICAgICAgICBpZiAoYXJ5KSB7CisgICAgICAgICAgICB2YXIgaTsKKyAgICAgICAgICAgIGZv
ciAoaSA9IDA7IGkgPCBhcnkubGVuZ3RoOyBpICs9IDEpIHsKKyAgICAgICAgICAgICAgICBpZiAo
YXJ5W2ldICYmIGZ1bmMoYXJ5W2ldLCBpLCBhcnkpKSB7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIC8qKgorICAgICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgaXRlcmF0aW5nIG92ZXIgYW4g
YXJyYXkgYmFja3dhcmRzLiBJZiB0aGUgZnVuYworICAgICAqIHJldHVybnMgYSB0cnVlIHZhbHVl
LCBpdCB3aWxsIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBl
YWNoUmV2ZXJzZShhcnksIGZ1bmMpIHsKKyAgICAgICAgaWYgKGFyeSkgeworICAgICAgICAgICAg
dmFyIGk7CisgICAgICAgICAgICBmb3IgKGkgPSBhcnkubGVuZ3RoIC0gMTsgaSA+IC0xOyBpIC09
IDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJ5W2ldICYmIGZ1bmMoYXJ5W2ldLCBpLCBhcnkp
KSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGhhc1Byb3Aob2JqLCBw
cm9wKSB7CisgICAgICAgIHJldHVybiBoYXNPd24uY2FsbChvYmosIHByb3ApOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGdldE93bihvYmosIHByb3ApIHsKKyAgICAgICAgcmV0dXJuIGhhc1Byb3Ao
b2JqLCBwcm9wKSAmJiBvYmpbcHJvcF07CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3ljbGVz
IG92ZXIgcHJvcGVydGllcyBpbiBhbiBvYmplY3QgYW5kIGNhbGxzIGEgZnVuY3Rpb24gZm9yIGVh
Y2gKKyAgICAgKiBwcm9wZXJ0eSB2YWx1ZS4gSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSB0cnV0
aHkgdmFsdWUsIHRoZW4gdGhlCisgICAgICogaXRlcmF0aW9uIGlzIHN0b3BwZWQuCisgICAgICov
CisgICAgZnVuY3Rpb24gZWFjaFByb3Aob2JqLCBmdW5jKSB7CisgICAgICAgIHZhciBwcm9wOwor
ICAgICAgICBmb3IgKHByb3AgaW4gb2JqKSB7CisgICAgICAgICAgICBpZiAoaGFzUHJvcChvYmos
IHByb3ApKSB7CisgICAgICAgICAgICAgICAgaWYgKGZ1bmMob2JqW3Byb3BdLCBwcm9wKSkgewor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTaW1wbGUgZnVuY3Rpb24g
dG8gbWl4IGluIHByb3BlcnRpZXMgZnJvbSBzb3VyY2UgaW50byB0YXJnZXQsCisgICAgICogYnV0
IG9ubHkgaWYgdGFyZ2V0IGRvZXMgbm90IGFscmVhZHkgaGF2ZSBhIHByb3BlcnR5IG9mIHRoZSBz
YW1lIG5hbWUuCisgICAgICovCisgICAgZnVuY3Rpb24gbWl4aW4odGFyZ2V0LCBzb3VyY2UsIGZv
cmNlLCBkZWVwU3RyaW5nTWl4aW4pIHsKKyAgICAgICAgaWYgKHNvdXJjZSkgeworICAgICAgICAg
ICAgZWFjaFByb3Aoc291cmNlLCBmdW5jdGlvbiAodmFsdWUsIHByb3ApIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZm9yY2UgfHwgIWhhc1Byb3AodGFyZ2V0LCBwcm9wKSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoZGVlcFN0cmluZ01peGluICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0W3Byb3BdKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0ge307CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBtaXhpbih0YXJnZXRbcHJvcF0sIHZh
bHVlLCBmb3JjZSwgZGVlcFN0cmluZ01peGluKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wXSA9IHZhbHVlOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHRhcmdldDsKKyAgICB9CisKKyAgICAvL1NpbWlsYXIgdG8g
RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsIGJ1dCB0aGUgJ3RoaXMnIG9iamVjdCBpcyBzcGVjaWZp
ZWQKKyAgICAvL2ZpcnN0LCBzaW5jZSBpdCBpcyBlYXNpZXIgdG8gcmVhZC9maWd1cmUgb3V0IHdo
YXQgJ3RoaXMnIHdpbGwgYmUuCisgICAgZnVuY3Rpb24gYmluZChvYmosIGZuKSB7CisgICAgICAg
IHJldHVybiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkob2JqLCBh
cmd1bWVudHMpOworICAgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHNjcmlwdHMoKSB7
CisgICAgICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7
CisgICAgfQorCisgICAgZnVuY3Rpb24gZGVmYXVsdE9uRXJyb3IoZXJyKSB7CisgICAgICAgIHRo
cm93IGVycjsKKyAgICB9CisKKyAgICAvL0FsbG93IGdldHRpbmcgYSBnbG9iYWwgdGhhdCBleHBy
ZXNzZWQgaW4KKyAgICAvL2RvdCBub3RhdGlvbiwgbGlrZSAnYS5iLmMnLgorICAgIGZ1bmN0aW9u
IGdldEdsb2JhbCh2YWx1ZSkgeworICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGcgPSBnbG9iYWw7CisgICAgICAg
IGVhY2godmFsdWUuc3BsaXQoJy4nKSwgZnVuY3Rpb24gKHBhcnQpIHsKKyAgICAgICAgICAgIGcg
PSBnW3BhcnRdOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGc7CisgICAgfQorCisgICAg
LyoqCisgICAgICogQ29uc3RydWN0cyBhbiBlcnJvciB3aXRoIGEgcG9pbnRlciB0byBhbiBVUkwg
d2l0aCBtb3JlIGluZm9ybWF0aW9uLgorICAgICAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZXJy
b3IgSUQgdGhhdCBtYXBzIHRvIGFuIElEIG9uIGEgd2ViIHBhZ2UuCisgICAgICogQHBhcmFtIHtT
dHJpbmd9IG1lc3NhZ2UgaHVtYW4gcmVhZGFibGUgZXJyb3IuCisgICAgICogQHBhcmFtIHtFcnJv
cn0gW2Vycl0gdGhlIG9yaWdpbmFsIGVycm9yLCBpZiB0aGVyZSBpcyBvbmUuCisgICAgICoKKyAg
ICAgKiBAcmV0dXJucyB7RXJyb3J9CisgICAgICovCisgICAgZnVuY3Rpb24gbWFrZUVycm9yKGlk
LCBtc2csIGVyciwgcmVxdWlyZU1vZHVsZXMpIHsKKyAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3Io
bXNnICsgJ1xuaHR0cDovL3JlcXVpcmVqcy5vcmcvZG9jcy9lcnJvcnMuaHRtbCMnICsgaWQpOwor
ICAgICAgICBlLnJlcXVpcmVUeXBlID0gaWQ7CisgICAgICAgIGUucmVxdWlyZU1vZHVsZXMgPSBy
ZXF1aXJlTW9kdWxlczsKKyAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgZS5vcmlnaW5h
bEVycm9yID0gZXJyOworICAgICAgICB9CisgICAgICAgIHJldHVybiBlOworICAgIH0KKworICAg
IGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAvL0lmIGEgZGVm
aW5lIGlzIGFscmVhZHkgaW4gcGxheSB2aWEgYW5vdGhlciBBTUQgbG9hZGVyLAorICAgICAgICAv
L2RvIG5vdCBvdmVyd3JpdGUuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodHlw
ZW9mIHJlcXVpcmVqcyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgaWYgKGlzRnVuY3Rpb24o
cmVxdWlyZWpzKSkgeworICAgICAgICAgICAgLy9EbyBub3Qgb3ZlcndyaXRlIGFuZCBleGlzdGlu
ZyByZXF1aXJlanMgaW5zdGFuY2UuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgY2ZnID0gcmVxdWlyZWpzOworICAgICAgICByZXF1aXJlanMgPSB1bmRlZmluZWQ7Cisg
ICAgfQorCisgICAgLy9BbGxvdyBmb3IgYSByZXF1aXJlIGNvbmZpZyBvYmplY3QKKyAgICBpZiAo
dHlwZW9mIHJlcXVpcmUgIT09ICd1bmRlZmluZWQnICYmICFpc0Z1bmN0aW9uKHJlcXVpcmUpKSB7
CisgICAgICAgIC8vYXNzdW1lIGl0IGlzIGEgY29uZmlnIG9iamVjdC4KKyAgICAgICAgY2ZnID0g
cmVxdWlyZTsKKyAgICAgICAgcmVxdWlyZSA9IHVuZGVmaW5lZDsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBuZXdDb250ZXh0KGNvbnRleHROYW1lKSB7CisgICAgICAgIHZhciBpbkNoZWNrTG9hZGVk
LCBNb2R1bGUsIGNvbnRleHQsIGhhbmRsZXJzLAorICAgICAgICAgICAgY2hlY2tMb2FkZWRUaW1l
b3V0SWQsCisgICAgICAgICAgICBjb25maWcgPSB7CisgICAgICAgICAgICAgICAgLy9EZWZhdWx0
cy4gRG8gbm90IHNldCBhIGRlZmF1bHQgZm9yIG1hcAorICAgICAgICAgICAgICAgIC8vY29uZmln
IHRvIHNwZWVkIHVwIG5vcm1hbGl6ZSgpLCB3aGljaAorICAgICAgICAgICAgICAgIC8vd2lsbCBy
dW4gZmFzdGVyIGlmIHRoZXJlIGlzIG5vIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgd2FpdFNl
Y29uZHM6IDcsCisgICAgICAgICAgICAgICAgYmFzZVVybDogJy4vJywKKyAgICAgICAgICAgICAg
ICBwYXRoczoge30sCisgICAgICAgICAgICAgICAgcGtnczoge30sCisgICAgICAgICAgICAgICAg
c2hpbToge30sCisgICAgICAgICAgICAgICAgY29uZmlnOiB7fQorICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgIHJlZ2lzdHJ5ID0ge30sCisgICAgICAgICAgICAvL3JlZ2lzdHJ5IG9mIGp1c3Qg
ZW5hYmxlZCBtb2R1bGVzLCB0byBzcGVlZAorICAgICAgICAgICAgLy9jeWNsZSBicmVha2luZyBj
b2RlIHdoZW4gbG90cyBvZiBtb2R1bGVzCisgICAgICAgICAgICAvL2FyZSByZWdpc3RlcmVkLCBi
dXQgbm90IGFjdGl2YXRlZC4KKyAgICAgICAgICAgIGVuYWJsZWRSZWdpc3RyeSA9IHt9LAorICAg
ICAgICAgICAgdW5kZWZFdmVudHMgPSB7fSwKKyAgICAgICAgICAgIGRlZlF1ZXVlID0gW10sCisg
ICAgICAgICAgICBkZWZpbmVkID0ge30sCisgICAgICAgICAgICB1cmxGZXRjaGVkID0ge30sCisg
ICAgICAgICAgICByZXF1aXJlQ291bnRlciA9IDEsCisgICAgICAgICAgICB1bm5vcm1hbGl6ZWRD
b3VudGVyID0gMTsKKworICAgICAgICAvKioKKyAgICAgICAgICogVHJpbXMgdGhlIC4gYW5kIC4u
IGZyb20gYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50cy4KKyAgICAgICAgICogSXQgd2lsbCBrZWVw
IGEgbGVhZGluZyBwYXRoIHNlZ21lbnQgaWYgYSAuLiB3aWxsIGJlY29tZQorICAgICAgICAgKiB0
aGUgZmlyc3QgcGF0aCBzZWdtZW50LCB0byBoZWxwIHdpdGggbW9kdWxlIG5hbWUgbG9va3VwcywK
KyAgICAgICAgICogd2hpY2ggYWN0IGxpa2UgcGF0aHMsIGJ1dCBjYW4gYmUgcmVtYXBwZWQuIEJ1
dCB0aGUgZW5kIHJlc3VsdCwKKyAgICAgICAgICogYWxsIHBhdGhzIHRoYXQgdXNlIHRoaXMgZnVu
Y3Rpb24gc2hvdWxkIGxvb2sgbm9ybWFsaXplZC4KKyAgICAgICAgICogTk9URTogdGhpcyBtZXRo
b2QgTU9ESUZJRVMgdGhlIGlucHV0IGFycmF5LgorICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBh
cnkgdGhlIGFycmF5IG9mIHBhdGggc2VnbWVudHMuCisgICAgICAgICAqLworICAgICAgICBmdW5j
dGlvbiB0cmltRG90cyhhcnkpIHsKKyAgICAgICAgICAgIHZhciBpLCBwYXJ0OworICAgICAgICAg
ICAgZm9yIChpID0gMDsgYXJ5W2ldOyBpICs9IDEpIHsKKyAgICAgICAgICAgICAgICBwYXJ0ID0g
YXJ5W2ldOworICAgICAgICAgICAgICAgIGlmIChwYXJ0ID09PSAnLicpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYXJ5LnNwbGljZShpLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgaSAtPSAxOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoaSA9PT0gMSAmJiAoYXJ5WzJdID09PSAnLi4nIHx8IGFyeVswXSA9PT0gJy4u
JykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vRW5kIG9mIHRoZSBsaW5lLiBLZWVwIGF0
IGxlYXN0IG9uZSBub24tZG90CisgICAgICAgICAgICAgICAgICAgICAgICAvL3BhdGggc2VnbWVu
dCBhdCB0aGUgZnJvbnQgc28gaXQgY2FuIGJlIG1hcHBlZAorICAgICAgICAgICAgICAgICAgICAg
ICAgLy9jb3JyZWN0bHkgdG8gZGlzay4gT3RoZXJ3aXNlLCB0aGVyZSBpcyBsaWtlbHkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vbm8gcGF0aCBtYXBwaW5nIGZvciBhIHBhdGggc3RhcnRpbmcg
d2l0aCAnLi4nLgorICAgICAgICAgICAgICAgICAgICAgICAgLy9UaGlzIGNhbiBzdGlsbCBmYWls
LCBidXQgY2F0Y2hlcyB0aGUgbW9zdCByZWFzb25hYmxlCisgICAgICAgICAgICAgICAgICAgICAg
ICAvL3VzZXMgb2YgLi4KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBh
cnkuc3BsaWNlKGkgLSAxLCAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgLT0gMjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBHaXZlbiBhIHJlbGF0aXZlIG1vZHVs
ZSBuYW1lLCBsaWtlIC4vc29tZXRoaW5nLCBub3JtYWxpemUgaXQgdG8KKyAgICAgICAgICogYSBy
ZWFsIG5hbWUgdGhhdCBjYW4gYmUgbWFwcGVkIHRvIGEgcGF0aC4KKyAgICAgICAgICogQHBhcmFt
IHtTdHJpbmd9IG5hbWUgdGhlIHJlbGF0aXZlIG5hbWUKKyAgICAgICAgICogQHBhcmFtIHtTdHJp
bmd9IGJhc2VOYW1lIGEgcmVhbCBuYW1lIHRoYXQgdGhlIG5hbWUgYXJnIGlzIHJlbGF0aXZlCisg
ICAgICAgICAqIHRvLgorICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGFwcGx5TWFwIGFwcGx5
IHRoZSBtYXAgY29uZmlnIHRvIHRoZSB2YWx1ZS4gU2hvdWxkCisgICAgICAgICAqIG9ubHkgYmUg
ZG9uZSBpZiB0aGlzIG5vcm1hbGl6YXRpb24gaXMgZm9yIGEgZGVwZW5kZW5jeSBJRC4KKyAgICAg
ICAgICogQHJldHVybnMge1N0cmluZ30gbm9ybWFsaXplZCBuYW1lCisgICAgICAgICAqLworICAg
ICAgICBmdW5jdGlvbiBub3JtYWxpemUobmFtZSwgYmFzZU5hbWUsIGFwcGx5TWFwKSB7CisgICAg
ICAgICAgICB2YXIgcGtnTmFtZSwgcGtnQ29uZmlnLCBtYXBWYWx1ZSwgbmFtZVBhcnRzLCBpLCBq
LCBuYW1lU2VnbWVudCwKKyAgICAgICAgICAgICAgICBmb3VuZE1hcCwgZm91bmRJLCBmb3VuZFN0
YXJNYXAsIHN0YXJJLAorICAgICAgICAgICAgICAgIGJhc2VQYXJ0cyA9IGJhc2VOYW1lICYmIGJh
c2VOYW1lLnNwbGl0KCcvJyksCisgICAgICAgICAgICAgICAgbm9ybWFsaXplZEJhc2VQYXJ0cyA9
IGJhc2VQYXJ0cywKKyAgICAgICAgICAgICAgICBtYXAgPSBjb25maWcubWFwLAorICAgICAgICAg
ICAgICAgIHN0YXJNYXAgPSBtYXAgJiYgbWFwWycqJ107CisKKyAgICAgICAgICAgIC8vQWRqdXN0
IGFueSByZWxhdGl2ZSBwYXRocy4KKyAgICAgICAgICAgIGlmIChuYW1lICYmIG5hbWUuY2hhckF0
KDApID09PSAnLicpIHsKKyAgICAgICAgICAgICAgICAvL0lmIGhhdmUgYSBiYXNlIG5hbWUsIHRy
eSB0byBub3JtYWxpemUgYWdhaW5zdCBpdCwKKyAgICAgICAgICAgICAgICAvL290aGVyd2lzZSwg
YXNzdW1lIGl0IGlzIGEgdG9wLWxldmVsIHJlcXVpcmUgdGhhdCB3aWxsCisgICAgICAgICAgICAg
ICAgLy9iZSByZWxhdGl2ZSB0byBiYXNlVXJsIGluIHRoZSBlbmQuCisgICAgICAgICAgICAgICAg
aWYgKGJhc2VOYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChnZXRPd24oY29uZmlnLnBr
Z3MsIGJhc2VOYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiB0aGUgYmFzZU5h
bWUgaXMgYSBwYWNrYWdlIG5hbWUsIHRoZW4ganVzdCB0cmVhdCBpdCBhcyBvbmUKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vbmFtZSB0byBjb25jYXQgdGhlIG5hbWUgd2l0aC4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRCYXNlUGFydHMgPSBiYXNlUGFydHMgPSBbYmFzZU5h
bWVdOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgLy9Db252ZXJ0IGJhc2VOYW1lIHRvIGFycmF5LCBhbmQgbG9wIG9mZiB0aGUgbGFzdCBwYXJ0
LAorICAgICAgICAgICAgICAgICAgICAgICAgLy9zbyB0aGF0IC4gbWF0Y2hlcyB0aGF0ICdkaXJl
Y3RvcnknIGFuZCBub3QgbmFtZSBvZiB0aGUgYmFzZU5hbWUncworICAgICAgICAgICAgICAgICAg
ICAgICAgLy9tb2R1bGUuIEZvciBpbnN0YW5jZSwgYmFzZU5hbWUgb2YgJ29uZS90d28vdGhyZWUn
LCBtYXBzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAvLydvbmUvdHdvL3RocmVlLmpzJywg
YnV0IHdlIHdhbnQgdGhlIGRpcmVjdG9yeSwgJ29uZS90d28nIGZvcgorICAgICAgICAgICAgICAg
ICAgICAgICAgLy90aGlzIG5vcm1hbGl6YXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBu
b3JtYWxpemVkQmFzZVBhcnRzID0gYmFzZVBhcnRzLnNsaWNlKDAsIGJhc2VQYXJ0cy5sZW5ndGgg
LSAxKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIG5hbWUg
PSBub3JtYWxpemVkQmFzZVBhcnRzLmNvbmNhdChuYW1lLnNwbGl0KCcvJykpOworICAgICAgICAg
ICAgICAgICAgICB0cmltRG90cyhuYW1lKTsKKworICAgICAgICAgICAgICAgICAgICAvL1NvbWUg
dXNlIG9mIHBhY2thZ2VzIG1heSB1c2UgYSAuIHBhdGggdG8gcmVmZXJlbmNlIHRoZQorICAgICAg
ICAgICAgICAgICAgICAvLydtYWluJyBtb2R1bGUgbmFtZSwgc28gbm9ybWFsaXplIGZvciB0aGF0
LgorICAgICAgICAgICAgICAgICAgICBwa2dDb25maWcgPSBnZXRPd24oY29uZmlnLnBrZ3MsIChw
a2dOYW1lID0gbmFtZVswXSkpOworICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5qb2lu
KCcvJyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwa2dDb25maWcgJiYgbmFtZSA9PT0gcGtn
TmFtZSArICcvJyArIHBrZ0NvbmZpZy5tYWluKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBu
YW1lID0gcGtnTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAobmFtZS5pbmRleE9mKCcuLycpID09PSAwKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIE5vIGJhc2VOYW1lLCBzbyB0aGlzIGlzIElEIGlzIHJlc29sdmVkIHJlbGF0aXZlCisgICAg
ICAgICAgICAgICAgICAgIC8vIHRvIGJhc2VVcmwsIHB1bGwgb2ZmIHRoZSBsZWFkaW5nIGRvdC4K
KyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKDIpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy9BcHBseSBtYXAgY29uZmln
IGlmIGF2YWlsYWJsZS4KKyAgICAgICAgICAgIGlmIChhcHBseU1hcCAmJiBtYXAgJiYgKGJhc2VQ
YXJ0cyB8fCBzdGFyTWFwKSkgeworICAgICAgICAgICAgICAgIG5hbWVQYXJ0cyA9IG5hbWUuc3Bs
aXQoJy8nKTsKKworICAgICAgICAgICAgICAgIGZvciAoaSA9IG5hbWVQYXJ0cy5sZW5ndGg7IGkg
PiAwOyBpIC09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgbmFtZVNlZ21lbnQgPSBuYW1lUGFy
dHMuc2xpY2UoMCwgaSkuam9pbignLycpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChiYXNl
UGFydHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vRmluZCB0aGUgbG9uZ2VzdCBiYXNl
TmFtZSBzZWdtZW50IG1hdGNoIGluIHRoZSBjb25maWcuCisgICAgICAgICAgICAgICAgICAgICAg
ICAvL1NvLCBkbyBqb2lucyBvbiB0aGUgYmlnZ2VzdCB0byBzbWFsbGVzdCBsZW5ndGhzIG9mIGJh
c2VQYXJ0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IGJhc2VQYXJ0cy5sZW5n
dGg7IGogPiAwOyBqIC09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBWYWx1
ZSA9IGdldE93bihtYXAsIGJhc2VQYXJ0cy5zbGljZSgwLCBqKS5qb2luKCcvJykpOworCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy9iYXNlTmFtZSBzZWdtZW50IGhhcyBjb25maWcsIGZp
bmQgaWYgaXQgaGFzIG9uZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMg
bmFtZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwVmFsdWUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwVmFsdWUgPSBnZXRPd24obWFwVmFsdWUsIG5h
bWVTZWdtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcFZhbHVl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL01hdGNoLCB1cGRhdGUg
bmFtZSB0byB0aGUgbmV3IHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm91bmRNYXAgPSBtYXBWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvdW5kSSA9IGk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZE1hcCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAvL0NoZWNrIGZvciBhIHN0YXIgbWFwIG1hdGNoLCBidXQganVzdCBob2xkIG9uIHRv
IGl0LAorICAgICAgICAgICAgICAgICAgICAvL2lmIHRoZXJlIGlzIGEgc2hvcnRlciBzZWdtZW50
IG1hdGNoIGxhdGVyIGluIGEgbWF0Y2hpbmcKKyAgICAgICAgICAgICAgICAgICAgLy9jb25maWcs
IHRoZW4gZmF2b3Igb3ZlciB0aGlzIHN0YXIgbWFwLgorICAgICAgICAgICAgICAgICAgICBpZiAo
IWZvdW5kU3Rhck1hcCAmJiBzdGFyTWFwICYmIGdldE93bihzdGFyTWFwLCBuYW1lU2VnbWVudCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kU3Rhck1hcCA9IGdldE93bihzdGFyTWFw
LCBuYW1lU2VnbWVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFySSA9IGk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAoIWZvdW5kTWFwICYmIGZvdW5kU3Rhck1hcCkgeworICAgICAgICAgICAgICAgICAgICBmb3Vu
ZE1hcCA9IGZvdW5kU3Rhck1hcDsKKyAgICAgICAgICAgICAgICAgICAgZm91bmRJID0gc3Rhckk7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGZvdW5kTWFwKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG5hbWVQYXJ0cy5zcGxpY2UoMCwgZm91bmRJLCBmb3VuZE1hcCk7
CisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lUGFydHMuam9pbignLycpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG5hbWU7Cisg
ICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiByZW1vdmVTY3JpcHQobmFtZSkgeworICAgICAg
ICAgICAgaWYgKGlzQnJvd3NlcikgeworICAgICAgICAgICAgICAgIGVhY2goc2NyaXB0cygpLCBm
dW5jdGlvbiAoc2NyaXB0Tm9kZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2NyaXB0Tm9k
ZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScpID09PSBuYW1lICYmCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWly
ZWNvbnRleHQnKSA9PT0gY29udGV4dC5jb250ZXh0TmFtZSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgc2NyaXB0Tm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdE5vZGUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGZ1bmN0aW9uIGhhc1BhdGhGYWxsYmFjayhpZCkgeworICAgICAgICAgICAgdmFyIHBhdGhDb25m
aWcgPSBnZXRPd24oY29uZmlnLnBhdGhzLCBpZCk7CisgICAgICAgICAgICBpZiAocGF0aENvbmZp
ZyAmJiBpc0FycmF5KHBhdGhDb25maWcpICYmIHBhdGhDb25maWcubGVuZ3RoID4gMSkgeworICAg
ICAgICAgICAgICAgIC8vUG9wIG9mZiB0aGUgZmlyc3QgYXJyYXkgdmFsdWUsIHNpbmNlIGl0IGZh
aWxlZCwgYW5kCisgICAgICAgICAgICAgICAgLy9yZXRyeQorICAgICAgICAgICAgICAgIHBhdGhD
b25maWcuc2hpZnQoKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcXVpcmUudW5kZWYoaWQp
OworICAgICAgICAgICAgICAgIGNvbnRleHQucmVxdWlyZShbaWRdKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vVHVy
bnMgYSBwbHVnaW4hcmVzb3VyY2UgdG8gW3BsdWdpbiwgcmVzb3VyY2VdCisgICAgICAgIC8vd2l0
aCB0aGUgcGx1Z2luIGJlaW5nIHVuZGVmaW5lZCBpZiB0aGUgbmFtZQorICAgICAgICAvL2RpZCBu
b3QgaGF2ZSBhIHBsdWdpbiBwcmVmaXguCisgICAgICAgIGZ1bmN0aW9uIHNwbGl0UHJlZml4KG5h
bWUpIHsKKyAgICAgICAgICAgIHZhciBwcmVmaXgsCisgICAgICAgICAgICAgICAgaW5kZXggPSBu
YW1lID8gbmFtZS5pbmRleE9mKCchJykgOiAtMTsKKyAgICAgICAgICAgIGlmIChpbmRleCA+IC0x
KSB7CisgICAgICAgICAgICAgICAgcHJlZml4ID0gbmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwor
ICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cmluZyhpbmRleCArIDEsIG5hbWUubGVu
Z3RoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBbcHJlZml4LCBuYW1lXTsK
KyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDcmVhdGVzIGEgbW9kdWxlIG1h
cHBpbmcgdGhhdCBpbmNsdWRlcyBwbHVnaW4gcHJlZml4LCBtb2R1bGUKKyAgICAgICAgICogbmFt
ZSwgYW5kIHBhdGguIElmIHBhcmVudE1vZHVsZU1hcCBpcyBwcm92aWRlZCBpdCB3aWxsCisgICAg
ICAgICAqIGFsc28gbm9ybWFsaXplIHRoZSBuYW1lIHZpYSByZXF1aXJlLm5vcm1hbGl6ZSgpCisg
ICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBtb2R1bGUgbmFt
ZQorICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gW3BhcmVudE1vZHVsZU1hcF0gcGFyZW50IG1v
ZHVsZSBtYXAKKyAgICAgICAgICogZm9yIHRoZSBtb2R1bGUgbmFtZSwgdXNlZCB0byByZXNvbHZl
IHJlbGF0aXZlIG5hbWVzLgorICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzTm9ybWFsaXpl
ZDogaXMgdGhlIElEIGFscmVhZHkgbm9ybWFsaXplZC4KKyAgICAgICAgICogVGhpcyBpcyB0cnVl
IGlmIHRoaXMgY2FsbCBpcyBkb25lIGZvciBhIGRlZmluZSgpIG1vZHVsZSBJRC4KKyAgICAgICAg
ICogQHBhcmFtIHtCb29sZWFufSBhcHBseU1hcDogYXBwbHkgdGhlIG1hcCBjb25maWcgdG8gdGhl
IElELgorICAgICAgICAgKiBTaG91bGQgb25seSBiZSB0cnVlIGlmIHRoaXMgbWFwIGlzIGZvciBh
IGRlcGVuZGVuY3kuCisgICAgICAgICAqCisgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9Cisg
ICAgICAgICAqLworICAgICAgICBmdW5jdGlvbiBtYWtlTW9kdWxlTWFwKG5hbWUsIHBhcmVudE1v
ZHVsZU1hcCwgaXNOb3JtYWxpemVkLCBhcHBseU1hcCkgeworICAgICAgICAgICAgdmFyIHVybCwg
cGx1Z2luTW9kdWxlLCBzdWZmaXgsIG5hbWVQYXJ0cywKKyAgICAgICAgICAgICAgICBwcmVmaXgg
PSBudWxsLAorICAgICAgICAgICAgICAgIHBhcmVudE5hbWUgPSBwYXJlbnRNb2R1bGVNYXAgPyBw
YXJlbnRNb2R1bGVNYXAubmFtZSA6IG51bGwsCisgICAgICAgICAgICAgICAgb3JpZ2luYWxOYW1l
ID0gbmFtZSwKKyAgICAgICAgICAgICAgICBpc0RlZmluZSA9IHRydWUsCisgICAgICAgICAgICAg
ICAgbm9ybWFsaXplZE5hbWUgPSAnJzsKKworICAgICAgICAgICAgLy9JZiBubyBuYW1lLCB0aGVu
IGl0IG1lYW5zIGl0IGlzIGEgcmVxdWlyZSBjYWxsLCBnZW5lcmF0ZSBhbgorICAgICAgICAgICAg
Ly9pbnRlcm5hbCBuYW1lLgorICAgICAgICAgICAgaWYgKCFuYW1lKSB7CisgICAgICAgICAgICAg
ICAgaXNEZWZpbmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBuYW1lID0gJ19AcicgKyAocmVx
dWlyZUNvdW50ZXIgKz0gMSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5hbWVQYXJ0
cyA9IHNwbGl0UHJlZml4KG5hbWUpOworICAgICAgICAgICAgcHJlZml4ID0gbmFtZVBhcnRzWzBd
OworICAgICAgICAgICAgbmFtZSA9IG5hbWVQYXJ0c1sxXTsKKworICAgICAgICAgICAgaWYgKHBy
ZWZpeCkgeworICAgICAgICAgICAgICAgIHByZWZpeCA9IG5vcm1hbGl6ZShwcmVmaXgsIHBhcmVu
dE5hbWUsIGFwcGx5TWFwKTsKKyAgICAgICAgICAgICAgICBwbHVnaW5Nb2R1bGUgPSBnZXRPd24o
ZGVmaW5lZCwgcHJlZml4KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy9BY2NvdW50
IGZvciByZWxhdGl2ZSBwYXRocyBpZiB0aGVyZSBpcyBhIGJhc2UgbmFtZS4KKyAgICAgICAgICAg
IGlmIChuYW1lKSB7CisgICAgICAgICAgICAgICAgaWYgKHByZWZpeCkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAocGx1Z2luTW9kdWxlICYmIHBsdWdpbk1vZHVsZS5ub3JtYWxpemUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vUGx1Z2luIGlzIGxvYWRlZCwgdXNlIGl0cyBub3JtYWxp
emUgbWV0aG9kLgorICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBwbHVn
aW5Nb2R1bGUubm9ybWFsaXplKG5hbWUsIGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCBhcHBseU1h
cCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXpl
KG5hbWUsIHBhcmVudE5hbWUsIGFwcGx5TWFwKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vQSByZWd1bGFyIG1v
ZHVsZS4KKyAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemUobmFt
ZSwgcGFyZW50TmFtZSwgYXBwbHlNYXApOworCisgICAgICAgICAgICAgICAgICAgIC8vTm9ybWFs
aXplZCBuYW1lIG1heSBiZSBhIHBsdWdpbiBJRCBkdWUgdG8gbWFwIGNvbmZpZworICAgICAgICAg
ICAgICAgICAgICAvL2FwcGxpY2F0aW9uIGluIG5vcm1hbGl6ZS4gVGhlIG1hcCBjb25maWcgdmFs
dWVzIG11c3QKKyAgICAgICAgICAgICAgICAgICAgLy9hbHJlYWR5IGJlIG5vcm1hbGl6ZWQsIHNv
IGRvIG5vdCBuZWVkIHRvIHJlZG8gdGhhdCBwYXJ0LgorICAgICAgICAgICAgICAgICAgICBuYW1l
UGFydHMgPSBzcGxpdFByZWZpeChub3JtYWxpemVkTmFtZSk7CisgICAgICAgICAgICAgICAgICAg
IHByZWZpeCA9IG5hbWVQYXJ0c1swXTsKKyAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5h
bWUgPSBuYW1lUGFydHNbMV07CisgICAgICAgICAgICAgICAgICAgIGlzTm9ybWFsaXplZCA9IHRy
dWU7CisKKyAgICAgICAgICAgICAgICAgICAgdXJsID0gY29udGV4dC5uYW1lVG9Vcmwobm9ybWFs
aXplZE5hbWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy9JZiB0aGUgaWQgaXMgYSBwbHVnaW4gaWQgdGhhdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBp
ZiBpdCBuZWVkcworICAgICAgICAgICAgLy9ub3JtYWxpemF0aW9uLCBzdGFtcCBpdCB3aXRoIGEg
dW5pcXVlIElEIHNvIHR3byBtYXRjaGluZyByZWxhdGl2ZQorICAgICAgICAgICAgLy9pZHMgdGhh
dCBtYXkgY29uZmxpY3QgY2FuIGJlIHNlcGFyYXRlLgorICAgICAgICAgICAgc3VmZml4ID0gcHJl
Zml4ICYmICFwbHVnaW5Nb2R1bGUgJiYgIWlzTm9ybWFsaXplZCA/CisgICAgICAgICAgICAgICAg
ICAgICAnX3Vubm9ybWFsaXplZCcgKyAodW5ub3JtYWxpemVkQ291bnRlciArPSAxKSA6CisgICAg
ICAgICAgICAgICAgICAgICAnJzsKKworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgICBwcmVmaXg6IHByZWZpeCwKKyAgICAgICAgICAgICAgICBuYW1lOiBub3JtYWxpemVkTmFt
ZSwKKyAgICAgICAgICAgICAgICBwYXJlbnRNYXA6IHBhcmVudE1vZHVsZU1hcCwKKyAgICAgICAg
ICAgICAgICB1bm5vcm1hbGl6ZWQ6ICEhc3VmZml4LAorICAgICAgICAgICAgICAgIHVybDogdXJs
LAorICAgICAgICAgICAgICAgIG9yaWdpbmFsTmFtZTogb3JpZ2luYWxOYW1lLAorICAgICAgICAg
ICAgICAgIGlzRGVmaW5lOiBpc0RlZmluZSwKKyAgICAgICAgICAgICAgICBpZDogKHByZWZpeCA/
CisgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggKyAnIScgKyBub3JtYWxpemVkTmFtZSA6
CisgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSkgKyBzdWZmaXgKKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBnZXRNb2R1bGUoZGVwTWFw
KSB7CisgICAgICAgICAgICB2YXIgaWQgPSBkZXBNYXAuaWQsCisgICAgICAgICAgICAgICAgbW9k
ID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7CisKKyAgICAgICAgICAgIGlmICghbW9kKSB7CisgICAg
ICAgICAgICAgICAgbW9kID0gcmVnaXN0cnlbaWRdID0gbmV3IGNvbnRleHQuTW9kdWxlKGRlcE1h
cCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBtb2Q7CisgICAgICAgIH0K
KworICAgICAgICBmdW5jdGlvbiBvbihkZXBNYXAsIG5hbWUsIGZuKSB7CisgICAgICAgICAgICB2
YXIgaWQgPSBkZXBNYXAuaWQsCisgICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5
LCBpZCk7CisKKyAgICAgICAgICAgIGlmIChoYXNQcm9wKGRlZmluZWQsIGlkKSAmJgorICAgICAg
ICAgICAgICAgICAgICAoIW1vZCB8fCBtb2QuZGVmaW5lRW1pdENvbXBsZXRlKSkgeworICAgICAg
ICAgICAgICAgIGlmIChuYW1lID09PSAnZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICAgICAg
Zm4oZGVmaW5lZFtpZF0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgbW9kID0gZ2V0TW9kdWxlKGRlcE1hcCk7CisgICAgICAgICAgICAg
ICAgaWYgKG1vZC5lcnJvciAmJiBuYW1lID09PSAnZXJyb3InKSB7CisgICAgICAgICAgICAgICAg
ICAgIGZuKG1vZC5lcnJvcik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgbW9kLm9uKG5hbWUsIGZuKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBvbkVycm9yKGVyciwgZXJyYmFjaykg
eworICAgICAgICAgICAgdmFyIGlkcyA9IGVyci5yZXF1aXJlTW9kdWxlcywKKyAgICAgICAgICAg
ICAgICBub3RpZmllZCA9IGZhbHNlOworCisgICAgICAgICAgICBpZiAoZXJyYmFjaykgeworICAg
ICAgICAgICAgICAgIGVycmJhY2soZXJyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgZWFjaChpZHMsIGZ1bmN0aW9uIChpZCkgeworICAgICAgICAgICAgICAgICAgICB2
YXIgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7CisgICAgICAgICAgICAgICAgICAgIGlmICht
b2QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vU2V0IGVycm9yIG9uIG1vZHVsZSwgc28g
aXQgc2tpcHMgdGltZW91dCBjaGVja3MuCisgICAgICAgICAgICAgICAgICAgICAgICBtb2QuZXJy
b3IgPSBlcnI7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kLmV2ZW50cy5lcnJvcikg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtb2QuZW1pdCgnZXJyb3InLCBlcnIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7
CisKKyAgICAgICAgICAgICAgICBpZiAoIW5vdGlmaWVkKSB7CisgICAgICAgICAgICAgICAgICAg
IHJlcS5vbkVycm9yKGVycik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEludGVybmFsIG1ldGhvZCB0byB0cmFu
c2ZlciBnbG9iYWxRdWV1ZSBpdGVtcyB0byB0aGlzIGNvbnRleHQncworICAgICAgICAgKiBkZWZR
dWV1ZS4KKyAgICAgICAgICovCisgICAgICAgIGZ1bmN0aW9uIHRha2VHbG9iYWxRdWV1ZSgpIHsK
KyAgICAgICAgICAgIC8vUHVzaCBhbGwgdGhlIGdsb2JhbERlZlF1ZXVlIGl0ZW1zIGludG8gdGhl
IGNvbnRleHQncyBkZWZRdWV1ZQorICAgICAgICAgICAgaWYgKGdsb2JhbERlZlF1ZXVlLmxlbmd0
aCkgeworICAgICAgICAgICAgICAgIC8vQXJyYXkgc3BsaWNlIGluIHRoZSB2YWx1ZXMgc2luY2Ug
dGhlIGNvbnRleHQgY29kZSBoYXMgYQorICAgICAgICAgICAgICAgIC8vbG9jYWwgdmFyIHJlZiB0
byBkZWZRdWV1ZSwgc28gY2Fubm90IGp1c3QgcmVhc3NpZ24gdGhlIG9uZQorICAgICAgICAgICAg
ICAgIC8vb24gY29udGV4dC4KKyAgICAgICAgICAgICAgICBhcHNwLmFwcGx5KGRlZlF1ZXVlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlZlF1ZXVlLmxlbmd0aCAtIDEsIDBdLmNvbmNh
dChnbG9iYWxEZWZRdWV1ZSkpOworICAgICAgICAgICAgICAgIGdsb2JhbERlZlF1ZXVlID0gW107
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBoYW5kbGVycyA9IHsKKyAgICAg
ICAgICAgICdyZXF1aXJlJzogZnVuY3Rpb24gKG1vZCkgeworICAgICAgICAgICAgICAgIGlmICht
b2QucmVxdWlyZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kLnJlcXVpcmU7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtb2Qu
cmVxdWlyZSA9IGNvbnRleHQubWFrZVJlcXVpcmUobW9kLm1hcCkpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAnZXhwb3J0cyc6IGZ1bmN0aW9uIChtb2Qp
IHsKKyAgICAgICAgICAgICAgICBtb2QudXNpbmdFeHBvcnRzID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBpZiAobW9kLm1hcC5pc0RlZmluZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobW9k
LmV4cG9ydHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2QuZXhwb3J0czsK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAobW9kLmV4cG9ydHMgPSBkZWZpbmVkW21vZC5tYXAuaWRdID0ge30pOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgICdtb2R1bGUnOiBmdW5jdGlvbiAobW9kKSB7CisgICAgICAgICAgICAgICAgaWYgKG1vZC5t
b2R1bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZC5tb2R1bGU7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtb2QubW9kdWxl
ID0geworICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG1vZC5tYXAuaWQsCisgICAgICAgICAg
ICAgICAgICAgICAgICB1cmk6IG1vZC5tYXAudXJsLAorICAgICAgICAgICAgICAgICAgICAgICAg
Y29uZmlnOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZyA9IGdldE93bihjb25maWcucGtn
cywgbW9kLm1hcC5pZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIHBhY2th
Z2VzLCBvbmx5IHN1cHBvcnQgY29uZmlnIHRhcmdldGVkCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYXQgdGhlIG1haW4gbW9kdWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGMgPSBwa2cgPyBnZXRPd24oY29uZmlnLmNvbmZpZywgbW9kLm1hcC5pZCArICcvJyArIHBrZy5t
YWluKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldE93bihjb25m
aWcuY29uZmlnLCBtb2QubWFwLmlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gIGMgfHwge307CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAg
ICAgICAgICAgZXhwb3J0czogZGVmaW5lZFttb2QubWFwLmlkXQorICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAg
ICAgICAgZnVuY3Rpb24gY2xlYW5SZWdpc3RyeShpZCkgeworICAgICAgICAgICAgLy9DbGVhbiB1
cCBtYWNoaW5lcnkgdXNlZCBmb3Igd2FpdGluZyBtb2R1bGVzLgorICAgICAgICAgICAgZGVsZXRl
IHJlZ2lzdHJ5W2lkXTsKKyAgICAgICAgICAgIGRlbGV0ZSBlbmFibGVkUmVnaXN0cnlbaWRdOwor
ICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gYnJlYWtDeWNsZShtb2QsIHRyYWNlZCwgcHJv
Y2Vzc2VkKSB7CisgICAgICAgICAgICB2YXIgaWQgPSBtb2QubWFwLmlkOworCisgICAgICAgICAg
ICBpZiAobW9kLmVycm9yKSB7CisgICAgICAgICAgICAgICAgbW9kLmVtaXQoJ2Vycm9yJywgbW9k
LmVycm9yKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdHJhY2VkW2lk
XSA9IHRydWU7CisgICAgICAgICAgICAgICAgZWFjaChtb2QuZGVwTWFwcywgZnVuY3Rpb24gKGRl
cE1hcCwgaSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgZGVwSWQgPSBkZXBNYXAuaWQsCisg
ICAgICAgICAgICAgICAgICAgICAgICBkZXAgPSBnZXRPd24ocmVnaXN0cnksIGRlcElkKTsKKwor
ICAgICAgICAgICAgICAgICAgICAvL09ubHkgZm9yY2UgdGhpbmdzIHRoYXQgaGF2ZSBub3QgY29t
cGxldGVkCisgICAgICAgICAgICAgICAgICAgIC8vYmVpbmcgZGVmaW5lZCwgc28gc3RpbGwgaW4g
dGhlIHJlZ2lzdHJ5LAorICAgICAgICAgICAgICAgICAgICAvL2FuZCBvbmx5IGlmIGl0IGhhcyBu
b3QgYmVlbiBtYXRjaGVkIHVwCisgICAgICAgICAgICAgICAgICAgIC8vaW4gdGhlIG1vZHVsZSBh
bHJlYWR5LgorICAgICAgICAgICAgICAgICAgICBpZiAoZGVwICYmICFtb2QuZGVwTWF0Y2hlZFtp
XSAmJiAhcHJvY2Vzc2VkW2RlcElkXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdl
dE93bih0cmFjZWQsIGRlcElkKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5k
ZWZpbmVEZXAoaSwgZGVmaW5lZFtkZXBJZF0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1vZC5jaGVjaygpOyAvL3Bhc3MgZmFsc2U/CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrQ3ljbGUoZGVwLCB0cmFjZWQs
IHByb2Nlc3NlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBwcm9jZXNzZWRbaWRd
ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGNo
ZWNrTG9hZGVkKCkgeworICAgICAgICAgICAgdmFyIG1hcCwgbW9kSWQsIGVyciwgdXNpbmdQYXRo
RmFsbGJhY2ssCisgICAgICAgICAgICAgICAgd2FpdEludGVydmFsID0gY29uZmlnLndhaXRTZWNv
bmRzICogMTAwMCwKKyAgICAgICAgICAgICAgICAvL0l0IGlzIHBvc3NpYmxlIHRvIGRpc2FibGUg
dGhlIHdhaXQgaW50ZXJ2YWwgYnkgdXNpbmcgd2FpdFNlY29uZHMgb2YgMC4KKyAgICAgICAgICAg
ICAgICBleHBpcmVkID0gd2FpdEludGVydmFsICYmIChjb250ZXh0LnN0YXJ0VGltZSArIHdhaXRJ
bnRlcnZhbCkgPCBuZXcgRGF0ZSgpLmdldFRpbWUoKSwKKyAgICAgICAgICAgICAgICBub0xvYWRz
ID0gW10sCisgICAgICAgICAgICAgICAgcmVxQ2FsbHMgPSBbXSwKKyAgICAgICAgICAgICAgICBz
dGlsbExvYWRpbmcgPSBmYWxzZSwKKyAgICAgICAgICAgICAgICBuZWVkQ3ljbGVDaGVjayA9IHRy
dWU7CisKKyAgICAgICAgICAgIC8vRG8gbm90IGJvdGhlciBpZiB0aGlzIGNhbGwgd2FzIGEgcmVz
dWx0IG9mIGEgY3ljbGUgYnJlYWsuCisgICAgICAgICAgICBpZiAoaW5DaGVja0xvYWRlZCkgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5D
aGVja0xvYWRlZCA9IHRydWU7CisKKyAgICAgICAgICAgIC8vRmlndXJlIG91dCB0aGUgc3RhdGUg
b2YgYWxsIHRoZSBtb2R1bGVzLgorICAgICAgICAgICAgZWFjaFByb3AoZW5hYmxlZFJlZ2lzdHJ5
LCBmdW5jdGlvbiAobW9kKSB7CisgICAgICAgICAgICAgICAgbWFwID0gbW9kLm1hcDsKKyAgICAg
ICAgICAgICAgICBtb2RJZCA9IG1hcC5pZDsKKworICAgICAgICAgICAgICAgIC8vU2tpcCB0aGlu
Z3MgdGhhdCBhcmUgbm90IGVuYWJsZWQgb3IgaW4gZXJyb3Igc3RhdGUuCisgICAgICAgICAgICAg
ICAgaWYgKCFtb2QuZW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFtYXAuaXNEZWZpbmUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmVxQ2FsbHMucHVzaChtb2QpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGlmICghbW9kLmVycm9yKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vSWYgdGhlIG1vZHVsZSBzaG91bGQgYmUgZXhlY3V0ZWQsIGFuZCBpdCBoYXMgbm90CisgICAg
ICAgICAgICAgICAgICAgIC8vYmVlbiBpbml0ZWQgYW5kIHRpbWUgaXMgdXAsIHJlbWVtYmVyIGl0
LgorICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZC5pbml0ZWQgJiYgZXhwaXJlZCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1BhdGhGYWxsYmFjayhtb2RJZCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1c2luZ1BhdGhGYWxsYmFjayA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9Mb2Fkcy5w
dXNoKG1vZElkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTY3JpcHQobW9k
SWQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCFtb2QuaW5pdGVkICYmIG1vZC5mZXRjaGVkICYmIG1hcC5pc0RlZmluZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghbWFwLnByZWZpeCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vTm8gcmVhc29uIHRvIGtlZXAgbG9va2luZyBmb3IgdW5maW5pc2hlZAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vbG9hZGluZy4gSWYgdGhlIG9ubHkgc3RpbGxMb2FkaW5nIGlzIGEK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3BsdWdpbiByZXNvdXJjZSB0aG91Z2gsIGtl
ZXAgZ29pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9iZWNhdXNlIGl0IG1heSBi
ZSB0aGF0IGEgcGx1Z2luIHJlc291cmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9p
cyB3YWl0aW5nIG9uIGEgbm9uLXBsdWdpbiBjeWNsZS4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gKG5lZWRDeWNsZUNoZWNrID0gZmFsc2UpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgICAgIGlmIChleHBpcmVkICYmIG5vTG9hZHMubGVuZ3RoKSB7
CisgICAgICAgICAgICAgICAgLy9JZiB3YWl0IHRpbWUgZXhwaXJlZCwgdGhyb3cgZXJyb3Igb2Yg
dW5sb2FkZWQgbW9kdWxlcy4KKyAgICAgICAgICAgICAgICBlcnIgPSBtYWtlRXJyb3IoJ3RpbWVv
dXQnLCAnTG9hZCB0aW1lb3V0IGZvciBtb2R1bGVzOiAnICsgbm9Mb2FkcywgbnVsbCwgbm9Mb2Fk
cyk7CisgICAgICAgICAgICAgICAgZXJyLmNvbnRleHROYW1lID0gY29udGV4dC5jb250ZXh0TmFt
ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihlcnIpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvL05vdCBleHBpcmVkLCBjaGVjayBmb3IgYSBjeWNsZS4KKyAgICAgICAg
ICAgIGlmIChuZWVkQ3ljbGVDaGVjaykgeworICAgICAgICAgICAgICAgIGVhY2gocmVxQ2FsbHMs
IGZ1bmN0aW9uIChtb2QpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWtDeWNsZShtb2QsIHt9
LCB7fSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vSWYgc3RpbGwgd2FpdGluZyBvbiBsb2FkcywgYW5kIHRoZSB3YWl0aW5nIGxvYWQgaXMgc29t
ZXRoaW5nCisgICAgICAgICAgICAvL290aGVyIHRoYW4gYSBwbHVnaW4gcmVzb3VyY2UsIG9yIHRo
ZXJlIGFyZSBzdGlsbCBvdXRzdGFuZGluZworICAgICAgICAgICAgLy9zY3JpcHRzLCB0aGVuIGp1
c3QgdHJ5IGJhY2sgbGF0ZXIuCisgICAgICAgICAgICBpZiAoKCFleHBpcmVkIHx8IHVzaW5nUGF0
aEZhbGxiYWNrKSAmJiBzdGlsbExvYWRpbmcpIHsKKyAgICAgICAgICAgICAgICAvL1NvbWV0aGlu
ZyBpcyBzdGlsbCB3YWl0aW5nIHRvIGxvYWQuIFdhaXQgZm9yIGl0LCBidXQgb25seQorICAgICAg
ICAgICAgICAgIC8vaWYgYSB0aW1lb3V0IGlzIG5vdCBhbHJlYWR5IGluIGVmZmVjdC4KKyAgICAg
ICAgICAgICAgICBpZiAoKGlzQnJvd3NlciB8fCBpc1dlYldvcmtlcikgJiYgIWNoZWNrTG9hZGVk
VGltZW91dElkKSB7CisgICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkVGltZW91dElkID0g
c2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0xv
YWRlZFRpbWVvdXRJZCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZCgp
OworICAgICAgICAgICAgICAgICAgICB9LCA1MCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpbkNoZWNrTG9hZGVkID0gZmFsc2U7CisgICAgICAgIH0K
KworICAgICAgICBNb2R1bGUgPSBmdW5jdGlvbiAobWFwKSB7CisgICAgICAgICAgICB0aGlzLmV2
ZW50cyA9IGdldE93bih1bmRlZkV2ZW50cywgbWFwLmlkKSB8fCB7fTsKKyAgICAgICAgICAgIHRo
aXMubWFwID0gbWFwOworICAgICAgICAgICAgdGhpcy5zaGltID0gZ2V0T3duKGNvbmZpZy5zaGlt
LCBtYXAuaWQpOworICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzID0gW107CisgICAgICAgICAg
ICB0aGlzLmRlcE1hcHMgPSBbXTsKKyAgICAgICAgICAgIHRoaXMuZGVwTWF0Y2hlZCA9IFtdOwor
ICAgICAgICAgICAgdGhpcy5wbHVnaW5NYXBzID0ge307CisgICAgICAgICAgICB0aGlzLmRlcENv
dW50ID0gMDsKKworICAgICAgICAgICAgLyogdGhpcy5leHBvcnRzIHRoaXMuZmFjdG9yeQorICAg
ICAgICAgICAgICAgdGhpcy5kZXBNYXBzID0gW10sCisgICAgICAgICAgICAgICB0aGlzLmVuYWJs
ZWQsIHRoaXMuZmV0Y2hlZAorICAgICAgICAgICAgKi8KKyAgICAgICAgfTsKKworICAgICAgICBN
b2R1bGUucHJvdG90eXBlID0geworICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24gKGRlcE1hcHMs
IGZhY3RvcnksIGVycmJhY2ssIG9wdGlvbnMpIHsKKyAgICAgICAgICAgICAgICBvcHRpb25zID0g
b3B0aW9ucyB8fCB7fTsKKworICAgICAgICAgICAgICAgIC8vRG8gbm90IGRvIG1vcmUgaW5pdHMg
aWYgYWxyZWFkeSBkb25lLiBDYW4gaGFwcGVuIGlmIHRoZXJlCisgICAgICAgICAgICAgICAgLy9h
cmUgbXVsdGlwbGUgZGVmaW5lIGNhbGxzIGZvciB0aGUgc2FtZSBtb2R1bGUuIFRoYXQgaXMgbm90
CisgICAgICAgICAgICAgICAgLy9hIG5vcm1hbCwgY29tbW9uIGNhc2UsIGJ1dCBpdCBpcyBhbHNv
IG5vdCB1bmV4cGVjdGVkLgorICAgICAgICAgICAgICAgIGlmICh0aGlzLmluaXRlZCkgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTsKKworICAgICAgICAgICAgICAgIGlmIChlcnJi
YWNrKSB7CisgICAgICAgICAgICAgICAgICAgIC8vUmVnaXN0ZXIgZm9yIGVycm9ycyBvbiB0aGlz
IG1vZHVsZS4KKyAgICAgICAgICAgICAgICAgICAgdGhpcy5vbignZXJyb3InLCBlcnJiYWNrKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXZlbnRzLmVycm9yKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vSWYgbm8gZXJyYmFjayBhbHJlYWR5LCBidXQgdGhlcmUgYXJlIGVycm9y
IGxpc3RlbmVycworICAgICAgICAgICAgICAgICAgICAvL29uIHRoaXMgbW9kdWxlLCBzZXQgdXAg
YW4gZXJyYmFjayB0byBwYXNzIHRvIHRoZSBkZXBzLgorICAgICAgICAgICAgICAgICAgICBlcnJi
YWNrID0gYmluZCh0aGlzLCBmdW5jdGlvbiAoZXJyKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy9EbyBhIGNvcHkgb2YgdGhlIGRlcGVu
ZGVuY3kgYXJyYXksIHNvIHRoYXQKKyAgICAgICAgICAgICAgICAvL3NvdXJjZSBpbnB1dHMgYXJl
IG5vdCBtb2RpZmllZC4gRm9yIGV4YW1wbGUKKyAgICAgICAgICAgICAgICAvLyJzaGltIiBkZXBz
IGFyZSBwYXNzZWQgaW4gaGVyZSBkaXJlY3RseSwgYW5kCisgICAgICAgICAgICAgICAgLy9kb2lu
ZyBhIGRpcmVjdCBtb2RpZmljYXRpb24gb2YgdGhlIGRlcE1hcHMgYXJyYXkKKyAgICAgICAgICAg
ICAgICAvL3dvdWxkIGFmZmVjdCB0aGF0IGNvbmZpZy4KKyAgICAgICAgICAgICAgICB0aGlzLmRl
cE1hcHMgPSBkZXBNYXBzICYmIGRlcE1hcHMuc2xpY2UoMCk7CisKKyAgICAgICAgICAgICAgICB0
aGlzLmVycmJhY2sgPSBlcnJiYWNrOworCisgICAgICAgICAgICAgICAgLy9JbmRpY2F0ZSB0aGlz
IG1vZHVsZSBoYXMgYmUgaW5pdGlhbGl6ZWQKKyAgICAgICAgICAgICAgICB0aGlzLmluaXRlZCA9
IHRydWU7CisKKyAgICAgICAgICAgICAgICB0aGlzLmlnbm9yZSA9IG9wdGlvbnMuaWdub3JlOwor
CisgICAgICAgICAgICAgICAgLy9Db3VsZCBoYXZlIG9wdGlvbiB0byBpbml0IHRoaXMgbW9kdWxl
IGluIGVuYWJsZWQgbW9kZSwKKyAgICAgICAgICAgICAgICAvL29yIGNvdWxkIGhhdmUgYmVlbiBw
cmV2aW91c2x5IG1hcmtlZCBhcyBlbmFibGVkLiBIb3dldmVyLAorICAgICAgICAgICAgICAgIC8v
dGhlIGRlcGVuZGVuY2llcyBhcmUgbm90IGtub3duIHVudGlsIGluaXQgaXMgY2FsbGVkLiBTbwor
ICAgICAgICAgICAgICAgIC8vaWYgZW5hYmxlZCBwcmV2aW91c2x5LCBub3cgdHJpZ2dlciBkZXBl
bmRlbmNpZXMgYXMgZW5hYmxlZC4KKyAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVk
IHx8IHRoaXMuZW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICAvL0VuYWJsZSB0aGlzIG1v
ZHVsZSBhbmQgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICAvL1dpbGwgY2FsbCB0
aGlzLmNoZWNrKCkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGUoKTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgZGVmaW5lRGVwOiBm
dW5jdGlvbiAoaSwgZGVwRXhwb3J0cykgeworICAgICAgICAgICAgICAgIC8vQmVjYXVzZSBvZiBj
eWNsZXMsIGRlZmluZWQgY2FsbGJhY2sgZm9yIGEgZ2l2ZW4KKyAgICAgICAgICAgICAgICAvL2V4
cG9ydCBjYW4gYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlLgorICAgICAgICAgICAgICAgIGlmICgh
dGhpcy5kZXBNYXRjaGVkW2ldKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwTWF0Y2hl
ZFtpXSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwQ291bnQgLT0gMTsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzW2ldID0gZGVwRXhwb3J0czsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICBmZXRjaDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLmZldGNoZWQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlz
LmZldGNoZWQgPSB0cnVlOworCisgICAgICAgICAgICAgICAgY29udGV4dC5zdGFydFRpbWUgPSAo
bmV3IERhdGUoKSkuZ2V0VGltZSgpOworCisgICAgICAgICAgICAgICAgdmFyIG1hcCA9IHRoaXMu
bWFwOworCisgICAgICAgICAgICAgICAgLy9JZiB0aGUgbWFuYWdlciBpcyBmb3IgYSBwbHVnaW4g
bWFuYWdlZCByZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAvL2FzayB0aGUgcGx1Z2luIHRvIGxv
YWQgaXQgbm93LgorICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoaW0pIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5tYWtlUmVxdWlyZSh0aGlzLm1hcCwgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZW5hYmxlQnVpbGRDYWxsYmFjazogdHJ1ZQorICAgICAgICAgICAgICAgICAgICB9
KSh0aGlzLnNoaW0uZGVwcyB8fCBbXSwgYmluZCh0aGlzLCBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbWFwLnByZWZpeCA/IHRoaXMuY2FsbFBsdWdpbigpIDog
dGhpcy5sb2FkKCk7CisgICAgICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvL1JlZ3VsYXIgZGVwZW5kZW5jeS4KKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1hcC5wcmVmaXggPyB0aGlzLmNhbGxQbHVnaW4oKSA6IHRo
aXMubG9hZCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisKKyAgICAgICAg
ICAgIGxvYWQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICB2YXIgdXJsID0gdGhpcy5t
YXAudXJsOworCisgICAgICAgICAgICAgICAgLy9SZWd1bGFyIGRlcGVuZGVuY3kuCisgICAgICAg
ICAgICAgICAgaWYgKCF1cmxGZXRjaGVkW3VybF0pIHsKKyAgICAgICAgICAgICAgICAgICAgdXJs
RmV0Y2hlZFt1cmxdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5sb2FkKHRo
aXMubWFwLmlkLCB1cmwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisKKyAg
ICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogQ2hlY2tzIGlmIHRoZSBtb2R1bGUgaXMgcmVh
ZHkgdG8gZGVmaW5lIGl0c2VsZiwgYW5kIGlmIHNvLAorICAgICAgICAgICAgICogZGVmaW5lIGl0
LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBjaGVjazogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgICAgIGlmICghdGhpcy5lbmFibGVkIHx8IHRoaXMuZW5hYmxpbmcpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIHZhciBlcnIsIGNqc01vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgaWQgPSB0aGlzLm1h
cC5pZCwKKyAgICAgICAgICAgICAgICAgICAgZGVwRXhwb3J0cyA9IHRoaXMuZGVwRXhwb3J0cywK
KyAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IHRoaXMuZXhwb3J0cywKKyAgICAgICAgICAg
ICAgICAgICAgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTsKKworICAgICAgICAgICAgICAgIGlmICgh
dGhpcy5pbml0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaCgpOworICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5lcnJvcikgeworICAgICAgICAgICAgICAgICAgICB0
aGlzLmVtaXQoJ2Vycm9yJywgdGhpcy5lcnJvcik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICghdGhpcy5kZWZpbmluZykgeworICAgICAgICAgICAgICAgICAgICAvL1RoZSBmYWN0b3J5IGNv
dWxkIHRyaWdnZXIgYW5vdGhlciByZXF1aXJlIGNhbGwKKyAgICAgICAgICAgICAgICAgICAgLy90
aGF0IHdvdWxkIHJlc3VsdCBpbiBjaGVja2luZyB0aGlzIG1vZHVsZSB0bworICAgICAgICAgICAg
ICAgICAgICAvL2RlZmluZSBpdHNlbGYgYWdhaW4uIElmIGFscmVhZHkgaW4gdGhlIHByb2Nlc3MK
KyAgICAgICAgICAgICAgICAgICAgLy9vZiBkb2luZyB0aGF0LCBza2lwIHRoaXMgd29yay4KKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmluZyA9IHRydWU7CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHRoaXMuZGVwQ291bnQgPCAxICYmICF0aGlzLmRlZmluZWQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGZhY3RvcnkpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy9JZiB0aGVyZSBpcyBhbiBlcnJvciBsaXN0ZW5lciwgZmF2b3IgcGFz
c2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdG8gdGhhdCBpbnN0ZWFkIG9mIHRo
cm93aW5nIGFuIGVycm9yLiBIb3dldmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
b25seSBkbyBpdCBmb3IgZGVmaW5lKCknZCAgbW9kdWxlcy4gcmVxdWlyZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vZXJyYmFja3Mgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZm9yIGZhaWx1
cmVzIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90aGVpciBjYWxsYmFja3MgKCM2
OTkpLiBIb3dldmVyIGlmIGEgZ2xvYmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9v
bkVycm9yIGlzIHNldCwgdXNlIHRoYXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCh0aGlzLmV2ZW50cy5lcnJvciAmJiB0aGlzLm1hcC5pc0RlZmluZSkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVxLm9uRXJyb3IgIT09IGRlZmF1bHRPbkVycm9yKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBleHBvcnRzID0gY29udGV4dC5leGVjQ2IoaWQsIGZhY3RvcnksIGRl
cEV4cG9ydHMsIGV4cG9ydHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNh
dGNoIChlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9
IGNvbnRleHQuZXhlY0NiKGlkLCBmYWN0b3J5LCBkZXBFeHBvcnRzLCBleHBvcnRzKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodGhpcy5tYXAuaXNEZWZpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly9JZiBzZXR0aW5nIGV4cG9ydHMgdmlhICdtb2R1bGUnIGlzIGluIHBsYXksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vZmF2b3IgdGhhdCBvdmVyIHJldHVybiB2YWx1ZSBhbmQg
ZXhwb3J0cy4gQWZ0ZXIgdGhhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9m
YXZvciBhIG5vbi11bmRlZmluZWQgcmV0dXJuIHZhbHVlIG92ZXIgZXhwb3J0cyB1c2UuCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNqc01vZHVsZSA9IHRoaXMubW9kdWxlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2pzTW9kdWxlICYmCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2pzTW9kdWxlLmV4cG9ydHMgIT09IHVuZGVm
aW5lZCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vTWFrZSBz
dXJlIGl0IGlzIG5vdCBhbHJlYWR5IHRoZSBleHBvcnRzIHZhbHVlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2pzTW9kdWxlLmV4cG9ydHMgIT09IHRoaXMuZXhwb3J0
cykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IGNqc01v
ZHVsZS5leHBvcnRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KGV4cG9ydHMgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnVzaW5nRXhwb3J0cykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9leHBvcnRzIGFscmVhZHkgc2V0IHRoZSBkZWZp
bmVkIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9
IHRoaXMuZXhwb3J0czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChlcnIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVNYXAg
PSB0aGlzLm1hcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVN
b2R1bGVzID0gdGhpcy5tYXAuaXNEZWZpbmUgPyBbdGhpcy5tYXAuaWRdIDogbnVsbDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVUeXBlID0gdGhpcy5tYXAuaXNE
ZWZpbmUgPyAnZGVmaW5lJyA6ICdyZXF1aXJlJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG9uRXJyb3IoKHRoaXMuZXJyb3IgPSBlcnIpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy9KdXN0IGEgbGl0ZXJhbCB2YWx1ZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBmYWN0b3J5OworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cG9ydHMgPSBleHBvcnRz
OworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAuaXNEZWZpbmUgJiYgIXRo
aXMuaWdub3JlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZFtpZF0gPSBl
eHBvcnRzOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5vblJlc291cmNl
TG9hZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEub25SZXNvdXJjZUxv
YWQoY29udGV4dCwgdGhpcy5tYXAsIHRoaXMuZGVwTWFwcyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgICAgICAvL0NsZWFuIHVwCisgICAgICAgICAgICAgICAgICAgICAgICBjbGVhblJlZ2lzdHJ5
KGlkKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vRmluaXNoZWQgdGhl
IGRlZmluZSBzdGFnZS4gQWxsb3cgY2FsbGluZyBjaGVjayBhZ2FpbgorICAgICAgICAgICAgICAg
ICAgICAvL3RvIGFsbG93IGRlZmluZSBub3RpZmljYXRpb25zIGJlbG93IGluIHRoZSBjYXNlIG9m
IGEKKyAgICAgICAgICAgICAgICAgICAgLy9jeWNsZS4KKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5kZWZpbmluZyA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlZmlu
ZWQgJiYgIXRoaXMuZGVmaW5lRW1pdHRlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5kZWZpbmVFbWl0dGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1p
dCgnZGVmaW5lZCcsIHRoaXMuZXhwb3J0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LmRlZmluZUVtaXRDb21wbGV0ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIGNhbGxQbHVnaW46
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICB2YXIgbWFwID0gdGhpcy5tYXAsCisgICAg
ICAgICAgICAgICAgICAgIGlkID0gbWFwLmlkLAorICAgICAgICAgICAgICAgICAgICAvL01hcCBh
bHJlYWR5IG5vcm1hbGl6ZWQgdGhlIHByZWZpeC4KKyAgICAgICAgICAgICAgICAgICAgcGx1Z2lu
TWFwID0gbWFrZU1vZHVsZU1hcChtYXAucHJlZml4KTsKKworICAgICAgICAgICAgICAgIC8vTWFy
ayB0aGlzIGFzIGEgZGVwZW5kZW5jeSBmb3IgdGhpcyBwbHVnaW4sIHNvIGl0CisgICAgICAgICAg
ICAgICAgLy9jYW4gYmUgdHJhY2VkIGZvciBjeWNsZXMuCisgICAgICAgICAgICAgICAgdGhpcy5k
ZXBNYXBzLnB1c2gocGx1Z2luTWFwKTsKKworICAgICAgICAgICAgICAgIG9uKHBsdWdpbk1hcCwg
J2RlZmluZWQnLCBiaW5kKHRoaXMsIGZ1bmN0aW9uIChwbHVnaW4pIHsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIGxvYWQsIG5vcm1hbGl6ZWRNYXAsIG5vcm1hbGl6ZWRNb2QsCisgICAgICAgICAg
ICAgICAgICAgICAgICBuYW1lID0gdGhpcy5tYXAubmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmVudE5hbWUgPSB0aGlzLm1hcC5wYXJlbnRNYXAgPyB0aGlzLm1hcC5wYXJlbnRNYXAu
bmFtZSA6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFJlcXVpcmUgPSBjb250
ZXh0Lm1ha2VSZXF1aXJlKG1hcC5wYXJlbnRNYXAsIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbmFibGVCdWlsZENhbGxiYWNrOiB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICB9
KTsKKworICAgICAgICAgICAgICAgICAgICAvL0lmIGN1cnJlbnQgbWFwIGlzIG5vdCBub3JtYWxp
emVkLCB3YWl0IGZvciB0aGF0CisgICAgICAgICAgICAgICAgICAgIC8vbm9ybWFsaXplZCBuYW1l
IHRvIGxvYWQgaW5zdGVhZCBvZiBjb250aW51aW5nLgorICAgICAgICAgICAgICAgICAgICBpZiAo
dGhpcy5tYXAudW5ub3JtYWxpemVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL05vcm1h
bGl6ZSB0aGUgSUQgaWYgdGhlIHBsdWdpbiBhbGxvd3MgaXQuCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocGx1Z2luLm5vcm1hbGl6ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5hbWUgPSBwbHVnaW4ubm9ybWFsaXplKG5hbWUsIGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemUobmFtZSwgcGFyZW50TmFt
ZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgfHwgJyc7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJlZml4IGFu
ZCBuYW1lIHNob3VsZCBhbHJlYWR5IGJlIG5vcm1hbGl6ZWQsIG5vIG5lZWQKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vZm9yIGFwcGx5aW5nIG1hcCBjb25maWcgYWdhaW4gZWl0aGVyLgorICAg
ICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE1hcCA9IG1ha2VNb2R1bGVNYXAobWFwLnBy
ZWZpeCArICchJyArIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLm1hcC5wYXJlbnRNYXApOworICAgICAgICAgICAgICAgICAg
ICAgICAgb24obm9ybWFsaXplZE1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVm
aW5lZCcsIGJpbmQodGhpcywgZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuaW5pdChbXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWU7IH0s
IG51bGwsIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRy
dWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmU6IHRydWUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTW9kID0gZ2V0
T3duKHJlZ2lzdHJ5LCBub3JtYWxpemVkTWFwLmlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChub3JtYWxpemVkTW9kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9NYXJr
IHRoaXMgYXMgYSBkZXBlbmRlbmN5IGZvciB0aGlzIHBsdWdpbiwgc28gaXQKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvL2NhbiBiZSB0cmFjZWQgZm9yIGN5Y2xlcy4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMucHVzaChub3JtYWxpemVkTWFwKTsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmV2ZW50cy5lcnJvcikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTW9kLm9uKCdlcnJvcicsIGJpbmQo
dGhpcywgZnVuY3Rpb24gKGVycikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9ybWFsaXplZE1vZC5lbmFibGUoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgbG9hZCA9IGJpbmQodGhpcywgZnVuY3Rpb24g
KHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXQoW10sIGZ1bmN0aW9u
ICgpIHsgcmV0dXJuIHZhbHVlOyB9LCBudWxsLCB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZW5hYmxlZDogdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgICAgIGxvYWQuZXJyb3IgPSBiaW5kKHRo
aXMsIGZ1bmN0aW9uIChlcnIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBlcnI7CisgICAg
ICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZU1vZHVsZXMgPSBbaWRdOworCisgICAgICAg
ICAgICAgICAgICAgICAgICAvL1JlbW92ZSB0ZW1wIHVubm9ybWFsaXplZCBtb2R1bGVzIGZvciB0
aGlzIG1vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vc2luY2UgdGhleSB3aWxsIG5l
dmVyIGJlIHJlc29sdmVkIG90aGVyd2lzZSBub3cuCisgICAgICAgICAgICAgICAgICAgICAgICBl
YWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24gKG1vZCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChtb2QubWFwLmlkLmluZGV4T2YoaWQgKyAnX3Vubm9ybWFsaXplZCcpID09PSAw
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUmVnaXN0cnkobW9kLm1h
cC5pZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy9BbGxvdyBwbHVnaW5z
IHRvIGxvYWQgb3RoZXIgY29kZSB3aXRob3V0IGhhdmluZyB0byBrbm93IHRoZQorICAgICAgICAg
ICAgICAgICAgICAvL2NvbnRleHQgb3IgaG93IHRvICdjb21wbGV0ZScgdGhlIGxvYWQuCisgICAg
ICAgICAgICAgICAgICAgIGxvYWQuZnJvbVRleHQgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uICh0ZXh0
LCB0ZXh0QWx0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKmpzbGludCBldmlsOiB0cnVl
ICovCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kdWxlTmFtZSA9IG1hcC5uYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU1hcCA9IG1ha2VNb2R1bGVNYXAobW9k
dWxlTmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzSW50ZXJhY3RpdmUgPSB1
c2VJbnRlcmFjdGl2ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy9BcyBvZiAyLjEuMCwg
c3VwcG9ydCBqdXN0IHBhc3NpbmcgdGhlIHRleHQsIHRvIHJlaW5mb3JjZQorICAgICAgICAgICAg
ICAgICAgICAgICAgLy9mcm9tVGV4dCBvbmx5IGJlaW5nIGNhbGxlZCBvbmNlIHBlciByZXNvdXJj
ZS4gU3RpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vc3VwcG9ydCBvbGQgc3R5bGUgb2Yg
cGFzc2luZyBtb2R1bGVOYW1lIGJ1dCBkaXNjYXJkCisgICAgICAgICAgICAgICAgICAgICAgICAv
L3RoYXQgbW9kdWxlTmFtZSBpbiBmYXZvciBvZiB0aGUgaW50ZXJuYWwgcmVmLgorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHRleHRBbHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0ID0gdGV4dEFsdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAgICAgLy9UdXJuIG9mZiBpbnRlcmFjdGl2ZSBzY3JpcHQgbWF0Y2hpbmcgZm9y
IElFIGZvciBhbnkgZGVmaW5lCisgICAgICAgICAgICAgICAgICAgICAgICAvL2NhbGxzIGluIHRo
ZSB0ZXh0LCB0aGVuIHR1cm4gaXQgYmFjayBvbiBhdCB0aGUgZW5kLgorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGhhc0ludGVyYWN0aXZlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXNlSW50ZXJhY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy9QcmltZSB0aGUgc3lzdGVtIGJ5IGNyZWF0aW5nIGEg
bW9kdWxlIGluc3RhbmNlIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgLy9pdC4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGdldE1vZHVsZShtb2R1bGVNYXApOworCisgICAgICAgICAgICAg
ICAgICAgICAgICAvL1RyYW5zZmVyIGFueSBjb25maWcgdG8gdGhpcyBvdGhlciBtb2R1bGUuCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUHJvcChjb25maWcuY29uZmlnLCBpZCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuY29uZmlnW21vZHVsZU5hbWVdID0g
Y29uZmlnLmNvbmZpZ1tpZF07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLmV4
ZWModGV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdmcm9tdGV4dGV2
YWwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zyb21U
ZXh0IGV2YWwgZm9yICcgKyBpZCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICcgZmFpbGVkOiAnICsgZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBbaWRdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChoYXNJbnRlcmFjdGl2ZSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVzZUludGVyYWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgLy9NYXJrIHRoaXMgYXMgYSBkZXBlbmRlbmN5IGZv
ciB0aGUgcGx1Z2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL3Jlc291cmNlCisgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMucHVzaChtb2R1bGVNYXApOworCisgICAgICAg
ICAgICAgICAgICAgICAgICAvL1N1cHBvcnQgYW5vbnltb3VzIG1vZHVsZXMuCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LmNvbXBsZXRlTG9hZChtb2R1bGVOYW1lKTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgLy9CaW5kIHRoZSB2YWx1ZSBvZiB0aGF0IG1vZHVsZSB0byB0aGUg
dmFsdWUgZm9yIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVzb3VyY2UgSUQuCisg
ICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFJlcXVpcmUoW21vZHVsZU5hbWVdLCBsb2FkKTsK
KyAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy9Vc2UgcGFy
ZW50TmFtZSBoZXJlIHNpbmNlIHRoZSBwbHVnaW4ncyBuYW1lIGlzIG5vdCByZWxpYWJsZSwKKyAg
ICAgICAgICAgICAgICAgICAgLy9jb3VsZCBiZSBzb21lIHdlaXJkIHN0cmluZyB3aXRoIG5vIHBh
dGggdGhhdCBhY3R1YWxseSB3YW50cyB0bworICAgICAgICAgICAgICAgICAgICAvL3JlZmVyZW5j
ZSB0aGUgcGFyZW50TmFtZSdzIHBhdGguCisgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5sb2Fk
KG1hcC5uYW1lLCBsb2NhbFJlcXVpcmUsIGxvYWQsIGNvbmZpZyk7CisgICAgICAgICAgICAgICAg
fSkpOworCisgICAgICAgICAgICAgICAgY29udGV4dC5lbmFibGUocGx1Z2luTWFwLCB0aGlzKTsK
KyAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbk1hcHNbcGx1Z2luTWFwLmlkXSA9IHBsdWdpbk1h
cDsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIGVuYWJsZTogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgICAgIGVuYWJsZWRSZWdpc3RyeVt0aGlzLm1hcC5pZF0gPSB0aGlzOworICAg
ICAgICAgICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAvL1Nl
dCBmbGFnIG1lbnRpb25pbmcgdGhhdCB0aGUgbW9kdWxlIGlzIGVuYWJsaW5nLAorICAgICAgICAg
ICAgICAgIC8vc28gdGhhdCBpbW1lZGlhdGUgY2FsbHMgdG8gdGhlIGRlZmluZWQgY2FsbGJhY2tz
CisgICAgICAgICAgICAgICAgLy9mb3IgZGVwZW5kZW5jaWVzIGRvIG5vdCB0cmlnZ2VyIGluYWR2
ZXJ0ZW50IGxvYWQKKyAgICAgICAgICAgICAgICAvL3dpdGggdGhlIGRlcENvdW50IHN0aWxsIGJl
aW5nIHplcm8uCisgICAgICAgICAgICAgICAgdGhpcy5lbmFibGluZyA9IHRydWU7CisKKyAgICAg
ICAgICAgICAgICAvL0VuYWJsZSBlYWNoIGRlcGVuZGVuY3kKKyAgICAgICAgICAgICAgICBlYWNo
KHRoaXMuZGVwTWFwcywgYmluZCh0aGlzLCBmdW5jdGlvbiAoZGVwTWFwLCBpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHZhciBpZCwgbW9kLCBoYW5kbGVyOworCisgICAgICAgICAgICAgICAgICAg
IGlmICh0eXBlb2YgZGVwTWFwID09PSAnc3RyaW5nJykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgLy9EZXBlbmRlbmN5IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBhIGRlcE1hcAorICAgICAg
ICAgICAgICAgICAgICAgICAgLy9hbmQgd2lyZWQgdXAgdG8gdGhpcyBtb2R1bGUuCisgICAgICAg
ICAgICAgICAgICAgICAgICBkZXBNYXAgPSBtYWtlTW9kdWxlTWFwKGRlcE1hcCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMubWFwLmlzRGVmaW5l
ID8gdGhpcy5tYXAgOiB0aGlzLm1hcC5wYXJlbnRNYXApLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuc2tpcE1hcCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLmRlcE1hcHNbaV0gPSBkZXBNYXA7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGhhbmRsZXIgPSBnZXRPd24oaGFuZGxlcnMsIGRlcE1hcC5pZCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChoYW5kbGVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5kZXBFeHBvcnRzW2ldID0gaGFuZGxlcih0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuZGVwQ291bnQgKz0gMTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgb24oZGVwTWFwLCAnZGVmaW5lZCcsIGJpbmQodGhpcywgZnVuY3Rpb24gKGRlcEV4cG9ydHMp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZURlcChpLCBkZXBFeHBv
cnRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9KSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlz
LmVycmJhY2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbihkZXBNYXAsICdlcnJv
cicsIGJpbmQodGhpcywgdGhpcy5lcnJiYWNrKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZCA9IGRlcE1h
cC5pZDsKKyAgICAgICAgICAgICAgICAgICAgbW9kID0gcmVnaXN0cnlbaWRdOworCisgICAgICAg
ICAgICAgICAgICAgIC8vU2tpcCBzcGVjaWFsIG1vZHVsZXMgbGlrZSAncmVxdWlyZScsICdleHBv
cnRzJywgJ21vZHVsZScKKyAgICAgICAgICAgICAgICAgICAgLy9BbHNvLCBkb24ndCBjYWxsIGVu
YWJsZSBpZiBpdCBpcyBhbHJlYWR5IGVuYWJsZWQsCisgICAgICAgICAgICAgICAgICAgIC8vaW1w
b3J0YW50IGluIGNpcmN1bGFyIGRlcGVuZGVuY3kgY2FzZXMuCisgICAgICAgICAgICAgICAgICAg
IGlmICghaGFzUHJvcChoYW5kbGVycywgaWQpICYmIG1vZCAmJiAhbW9kLmVuYWJsZWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZW5hYmxlKGRlcE1hcCwgdGhpcyk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KSk7CisKKyAgICAgICAgICAgICAg
ICAvL0VuYWJsZSBlYWNoIHBsdWdpbiB0aGF0IGlzIHVzZWQgaW4KKyAgICAgICAgICAgICAgICAv
L2EgZGVwZW5kZW5jeQorICAgICAgICAgICAgICAgIGVhY2hQcm9wKHRoaXMucGx1Z2luTWFwcywg
YmluZCh0aGlzLCBmdW5jdGlvbiAocGx1Z2luTWFwKSB7CisgICAgICAgICAgICAgICAgICAgIHZh
ciBtb2QgPSBnZXRPd24ocmVnaXN0cnksIHBsdWdpbk1hcC5pZCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChtb2QgJiYgIW1vZC5lbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LmVuYWJsZShwbHVnaW5NYXAsIHRoaXMpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfSkpOworCisgICAgICAgICAgICAgICAgdGhpcy5lbmFibGluZyA9IGZh
bHNlOworCisgICAgICAgICAgICAgICAgdGhpcy5jaGVjaygpOworICAgICAgICAgICAgfSwKKwor
ICAgICAgICAgICAgb246IGZ1bmN0aW9uIChuYW1lLCBjYikgeworICAgICAgICAgICAgICAgIHZh
ciBjYnMgPSB0aGlzLmV2ZW50c1tuYW1lXTsKKyAgICAgICAgICAgICAgICBpZiAoIWNicykgewor
ICAgICAgICAgICAgICAgICAgICBjYnMgPSB0aGlzLmV2ZW50c1tuYW1lXSA9IFtdOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYnMucHVzaChjYik7CisgICAgICAgICAgICB9
LAorCisgICAgICAgICAgICBlbWl0OiBmdW5jdGlvbiAobmFtZSwgZXZ0KSB7CisgICAgICAgICAg
ICAgICAgZWFjaCh0aGlzLmV2ZW50c1tuYW1lXSwgZnVuY3Rpb24gKGNiKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNiKGV2dCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
aWYgKG5hbWUgPT09ICdlcnJvcicpIHsKKyAgICAgICAgICAgICAgICAgICAgLy9Ob3cgdGhhdCB0
aGUgZXJyb3IgaGFuZGxlciB3YXMgdHJpZ2dlcmVkLCByZW1vdmUKKyAgICAgICAgICAgICAgICAg
ICAgLy90aGUgbGlzdGVuZXJzLCBzaW5jZSB0aGlzIGJyb2tlbiBNb2R1bGUgaW5zdGFuY2UKKyAg
ICAgICAgICAgICAgICAgICAgLy9jYW4gc3RheSBhcm91bmQgZm9yIGEgd2hpbGUgaW4gdGhlIHJl
Z2lzdHJ5LgorICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5ldmVudHNbbmFtZV07Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGZ1
bmN0aW9uIGNhbGxHZXRNb2R1bGUoYXJncykgeworICAgICAgICAgICAgLy9Ta2lwIG1vZHVsZXMg
YWxyZWFkeSBkZWZpbmVkLgorICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGRlZmluZWQsIGFyZ3Nb
MF0pKSB7CisgICAgICAgICAgICAgICAgZ2V0TW9kdWxlKG1ha2VNb2R1bGVNYXAoYXJnc1swXSwg
bnVsbCwgdHJ1ZSkpLmluaXQoYXJnc1sxXSwgYXJnc1syXSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihub2RlLCBmdW5jLCBuYW1l
LCBpZU5hbWUpIHsKKyAgICAgICAgICAgIC8vRmF2b3IgZGV0YWNoRXZlbnQgYmVjYXVzZSBvZiBJ
RTkKKyAgICAgICAgICAgIC8vaXNzdWUsIHNlZSBhdHRhY2hFdmVudC9hZGRFdmVudExpc3RlbmVy
IGNvbW1lbnQgZWxzZXdoZXJlCisgICAgICAgICAgICAvL2luIHRoaXMgZmlsZS4KKyAgICAgICAg
ICAgIGlmIChub2RlLmRldGFjaEV2ZW50ICYmICFpc09wZXJhKSB7CisgICAgICAgICAgICAgICAg
Ly9Qcm9iYWJseSBJRS4gSWYgbm90IGl0IHdpbGwgdGhyb3cgYW4gZXJyb3IsIHdoaWNoIHdpbGwg
YmUKKyAgICAgICAgICAgICAgICAvL3VzZWZ1bCB0byBrbm93LgorICAgICAgICAgICAgICAgIGlm
IChpZU5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5kZXRhY2hFdmVudChpZU5hbWUs
IGZ1bmMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmMsIGZhbHNlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBHaXZlbiBh
biBldmVudCBmcm9tIGEgc2NyaXB0IG5vZGUsIGdldCB0aGUgcmVxdWlyZWpzIGluZm8gZnJvbSBp
dCwKKyAgICAgICAgICogYW5kIHRoZW4gcmVtb3ZlcyB0aGUgZXZlbnQgbGlzdGVuZXJzIG9uIHRo
ZSBub2RlLgorICAgICAgICAgKiBAcGFyYW0ge0V2ZW50fSBldnQKKyAgICAgICAgICogQHJldHVy
bnMge09iamVjdH0KKyAgICAgICAgICovCisgICAgICAgIGZ1bmN0aW9uIGdldFNjcmlwdERhdGEo
ZXZ0KSB7CisgICAgICAgICAgICAvL1VzaW5nIGN1cnJlbnRUYXJnZXQgaW5zdGVhZCBvZiB0YXJn
ZXQgZm9yIEZpcmVmb3ggMi4wJ3Mgc2FrZS4gTm90CisgICAgICAgICAgICAvL2FsbCBvbGQgYnJv
d3NlcnMgd2lsbCBiZSBzdXBwb3J0ZWQsIGJ1dCB0aGlzIG9uZSB3YXMgZWFzeSBlbm91Z2gKKyAg
ICAgICAgICAgIC8vdG8gc3VwcG9ydCBhbmQgc3RpbGwgbWFrZXMgc2Vuc2UuCisgICAgICAgICAg
ICB2YXIgbm9kZSA9IGV2dC5jdXJyZW50VGFyZ2V0IHx8IGV2dC5zcmNFbGVtZW50OworCisgICAg
ICAgICAgICAvL1JlbW92ZSB0aGUgbGlzdGVuZXJzIG9uY2UgaGVyZS4KKyAgICAgICAgICAgIHJl
bW92ZUxpc3RlbmVyKG5vZGUsIGNvbnRleHQub25TY3JpcHRMb2FkLCAnbG9hZCcsICdvbnJlYWR5
c3RhdGVjaGFuZ2UnKTsKKyAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKG5vZGUsIGNvbnRleHQu
b25TY3JpcHRFcnJvciwgJ2Vycm9yJyk7CisKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgbm9kZTogbm9kZSwKKyAgICAgICAgICAgICAgICBpZDogbm9kZSAmJiBub2RlLmdl
dEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlbW9kdWxlJykKKyAgICAgICAgICAgIH07CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiBpbnRha2VEZWZpbmVzKCkgeworICAgICAgICAgICAgdmFy
IGFyZ3M7CisKKyAgICAgICAgICAgIC8vQW55IGRlZmluZWQgbW9kdWxlcyBpbiB0aGUgZ2xvYmFs
IHF1ZXVlLCBpbnRha2UgdGhlbSBub3cuCisgICAgICAgICAgICB0YWtlR2xvYmFsUXVldWUoKTsK
KworICAgICAgICAgICAgLy9NYWtlIHN1cmUgYW55IHJlbWFpbmluZyBkZWZRdWV1ZSBpdGVtcyBn
ZXQgcHJvcGVybHkgcHJvY2Vzc2VkLgorICAgICAgICAgICAgd2hpbGUgKGRlZlF1ZXVlLmxlbmd0
aCkgeworICAgICAgICAgICAgICAgIGFyZ3MgPSBkZWZRdWV1ZS5zaGlmdCgpOworICAgICAgICAg
ICAgICAgIGlmIChhcmdzWzBdID09PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBvbkVycm9yKG1ha2VFcnJvcignbWlzbWF0Y2gnLCAnTWlzbWF0Y2hlZCBhbm9ueW1vdXMgZGVm
aW5lKCkgbW9kdWxlOiAnICsgYXJnc1thcmdzLmxlbmd0aCAtIDFdKSk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy9hcmdzIGFyZSBpZCwgZGVwcywgZmFj
dG9yeS4gU2hvdWxkIGJlIG5vcm1hbGl6ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIC8v
ZGVmaW5lKCkgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoYXJn
cyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgY29udGV4dCA9IHsKKyAgICAgICAgICAgIGNvbmZpZzogY29uZmlnLAorICAgICAgICAgICAg
Y29udGV4dE5hbWU6IGNvbnRleHROYW1lLAorICAgICAgICAgICAgcmVnaXN0cnk6IHJlZ2lzdHJ5
LAorICAgICAgICAgICAgZGVmaW5lZDogZGVmaW5lZCwKKyAgICAgICAgICAgIHVybEZldGNoZWQ6
IHVybEZldGNoZWQsCisgICAgICAgICAgICBkZWZRdWV1ZTogZGVmUXVldWUsCisgICAgICAgICAg
ICBNb2R1bGU6IE1vZHVsZSwKKyAgICAgICAgICAgIG1ha2VNb2R1bGVNYXA6IG1ha2VNb2R1bGVN
YXAsCisgICAgICAgICAgICBuZXh0VGljazogcmVxLm5leHRUaWNrLAorICAgICAgICAgICAgb25F
cnJvcjogb25FcnJvciwKKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBTZXQgYSBj
b25maWd1cmF0aW9uIGZvciB0aGUgY29udGV4dC4KKyAgICAgICAgICAgICAqIEBwYXJhbSB7T2Jq
ZWN0fSBjZmcgY29uZmlnIG9iamVjdCB0byBpbnRlZ3JhdGUuCisgICAgICAgICAgICAgKi8KKyAg
ICAgICAgICAgIGNvbmZpZ3VyZTogZnVuY3Rpb24gKGNmZykgeworICAgICAgICAgICAgICAgIC8v
TWFrZSBzdXJlIHRoZSBiYXNlVXJsIGVuZHMgaW4gYSBzbGFzaC4KKyAgICAgICAgICAgICAgICBp
ZiAoY2ZnLmJhc2VVcmwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNmZy5iYXNlVXJsLmNo
YXJBdChjZmcuYmFzZVVybC5sZW5ndGggLSAxKSAhPT0gJy8nKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjZmcuYmFzZVVybCArPSAnLyc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvL1NhdmUgb2ZmIHRoZSBwYXRocyBhbmQg
cGFja2FnZXMgc2luY2UgdGhleSByZXF1aXJlIHNwZWNpYWwgcHJvY2Vzc2luZywKKyAgICAgICAg
ICAgICAgICAvL3RoZXkgYXJlIGFkZGl0aXZlLgorICAgICAgICAgICAgICAgIHZhciBwa2dzID0g
Y29uZmlnLnBrZ3MsCisgICAgICAgICAgICAgICAgICAgIHNoaW0gPSBjb25maWcuc2hpbSwKKyAg
ICAgICAgICAgICAgICAgICAgb2JqcyA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhz
OiB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiB0cnVlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgbWFwOiB0cnVlCisgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAg
ICAgICAgICAgICBlYWNoUHJvcChjZmcsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAob2Jqc1twcm9wXSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHByb3AgPT09ICdtYXAnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFj
b25maWcubWFwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5tYXAg
PSB7fTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWl4aW4oY29uZmlnW3Byb3BdLCB2YWx1ZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1p
eGluKGNvbmZpZ1twcm9wXSwgdmFsdWUsIHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
Y29uZmlnW3Byb3BdID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9KTsKKworICAgICAgICAgICAgICAgIC8vTWVyZ2Ugc2hpbQorICAgICAgICAgICAgICAg
IGlmIChjZmcuc2hpbSkgeworICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChjZmcuc2hpbSwg
ZnVuY3Rpb24gKHZhbHVlLCBpZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxp
emUgdGhlIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFs
dWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlcHM6IHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICgodmFsdWUuZXhwb3J0cyB8fCB2YWx1ZS5pbml0KSAmJiAhdmFsdWUuZXhwb3J0c0Zu
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuZXhwb3J0c0ZuID0gY29udGV4
dC5tYWtlU2hpbUV4cG9ydHModmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgc2hpbVtpZF0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zaGltID0gc2hpbTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvL0FkanVzdCBwYWNrYWdlcyBpZiBuZWNlc3Nh
cnkuCisgICAgICAgICAgICAgICAgaWYgKGNmZy5wYWNrYWdlcykgeworICAgICAgICAgICAgICAg
ICAgICBlYWNoKGNmZy5wYWNrYWdlcywgZnVuY3Rpb24gKHBrZ09iaikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIGxvY2F0aW9uOworCisgICAgICAgICAgICAgICAgICAgICAgICBwa2dP
YmogPSB0eXBlb2YgcGtnT2JqID09PSAnc3RyaW5nJyA/IHsgbmFtZTogcGtnT2JqIH0gOiBwa2dP
Ymo7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHBrZ09iai5sb2NhdGlvbjsK
KworICAgICAgICAgICAgICAgICAgICAgICAgLy9DcmVhdGUgYSBicmFuZCBuZXcgb2JqZWN0IG9u
IHBrZ3MsIHNpbmNlIGN1cnJlbnRQYWNrYWdlcyBjYW4KKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vYmUgcGFzc2VkIGluIGFnYWluLCBhbmQgY29uZmlnLnBrZ3MgaXMgdGhlIGludGVybmFsIHRy
YW5zZm9ybWVkCisgICAgICAgICAgICAgICAgICAgICAgICAvL3N0YXRlIGZvciBhbGwgcGFja2Fn
ZSBjb25maWdzLgorICAgICAgICAgICAgICAgICAgICAgICAgcGtnc1twa2dPYmoubmFtZV0gPSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogcGtnT2JqLm5hbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uIHx8IHBrZ09iai5uYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVtb3ZlIGxlYWRpbmcgZG90IGluIG1haW4s
IHNvIG1haW4gcGF0aHMgYXJlIG5vcm1hbGl6ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy9hbmQgcmVtb3ZlIGFueSB0cmFpbGluZyAuanMsIHNpbmNlIGRpZmZlcmVudCBwYWNrYWdl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9lbnZzIGhhdmUgZGlmZmVyZW50IGNvbnZl
bnRpb25zOiBzb21lIHVzZSBhIG1vZHVsZSBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vc29tZSB1c2UgYSBmaWxlIG5hbWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWFpbjogKHBrZ09iai5tYWluIHx8ICdtYWluJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAucmVwbGFjZShjdXJyRGlyUmVnRXhwLCAnJykKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAucmVwbGFjZShqc1N1ZmZpeFJlZ0V4cCwgJycpCisgICAgICAgICAgICAg
ICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAg
ICAgICAvL0RvbmUgd2l0aCBtb2RpZmljYXRpb25zLCBhc3NpbmcgcGFja2FnZXMgYmFjayB0byBj
b250ZXh0IGNvbmZpZworICAgICAgICAgICAgICAgICAgICBjb25maWcucGtncyA9IHBrZ3M7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy9JZiB0aGVyZSBhcmUgYW55ICJ3
YWl0aW5nIHRvIGV4ZWN1dGUiIG1vZHVsZXMgaW4gdGhlIHJlZ2lzdHJ5LAorICAgICAgICAgICAg
ICAgIC8vdXBkYXRlIHRoZSBtYXBzIGZvciB0aGVtLCBzaW5jZSB0aGVpciBpbmZvLCBsaWtlIFVS
THMgdG8gbG9hZCwKKyAgICAgICAgICAgICAgICAvL21heSBoYXZlIGNoYW5nZWQuCisgICAgICAg
ICAgICAgICAgZWFjaFByb3AocmVnaXN0cnksIGZ1bmN0aW9uIChtb2QsIGlkKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vSWYgbW9kdWxlIGFscmVhZHkgaGFzIGluaXQgY2FsbGVkLCBzaW5jZSBp
dCBpcyB0b28KKyAgICAgICAgICAgICAgICAgICAgLy9sYXRlIHRvIG1vZGlmeSB0aGVtLCBhbmQg
aWdub3JlIHVubm9ybWFsaXplZCBvbmVzCisgICAgICAgICAgICAgICAgICAgIC8vc2luY2UgdGhl
eSBhcmUgdHJhbnNpZW50LgorICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZC5pbml0ZWQgJiYg
IW1vZC5tYXAudW5ub3JtYWxpemVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtb2QubWFw
ID0gbWFrZU1vZHVsZU1hcChpZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9KTsKKworICAgICAgICAgICAgICAgIC8vSWYgYSBkZXBzIGFycmF5IG9yIGEgY29uZmln
IGNhbGxiYWNrIGlzIHNwZWNpZmllZCwgdGhlbiBjYWxsCisgICAgICAgICAgICAgICAgLy9yZXF1
aXJlIHdpdGggdGhvc2UgYXJncy4gVGhpcyBpcyB1c2VmdWwgd2hlbiByZXF1aXJlIGlzIGRlZmlu
ZWQgYXMgYQorICAgICAgICAgICAgICAgIC8vY29uZmlnIG9iamVjdCBiZWZvcmUgcmVxdWlyZS5q
cyBpcyBsb2FkZWQuCisgICAgICAgICAgICAgICAgaWYgKGNmZy5kZXBzIHx8IGNmZy5jYWxsYmFj
aykgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcXVpcmUoY2ZnLmRlcHMgfHwgW10s
IGNmZy5jYWxsYmFjayk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKworICAg
ICAgICAgICAgbWFrZVNoaW1FeHBvcnRzOiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAg
ICAgICBmdW5jdGlvbiBmbigpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJldDsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhbHVlLmluaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldCA9IHZhbHVlLmluaXQuYXBwbHkoZ2xvYmFsLCBhcmd1bWVudHMpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQgfHwgKHZhbHVlLmV4cG9y
dHMgJiYgZ2V0R2xvYmFsKHZhbHVlLmV4cG9ydHMpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZuOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgbWFr
ZVJlcXVpcmU6IGZ1bmN0aW9uIChyZWxNYXAsIG9wdGlvbnMpIHsKKyAgICAgICAgICAgICAgICBv
cHRpb25zID0gb3B0aW9ucyB8fCB7fTsKKworICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGxvY2Fs
UmVxdWlyZShkZXBzLCBjYWxsYmFjaywgZXJyYmFjaykgeworICAgICAgICAgICAgICAgICAgICB2
YXIgaWQsIG1hcCwgcmVxdWlyZU1vZDsKKworICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9u
cy5lbmFibGVCdWlsZENhbGxiYWNrICYmIGNhbGxiYWNrICYmIGlzRnVuY3Rpb24oY2FsbGJhY2sp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5fX3JlcXVpcmVKc0J1aWxkID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICh0
eXBlb2YgZGVwcyA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp
c0Z1bmN0aW9uKGNhbGxiYWNrKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSW52
YWxpZCBjYWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFr
ZUVycm9yKCdyZXF1aXJlYXJncycsICdJbnZhbGlkIHJlcXVpcmUgY2FsbCcpLCBlcnJiYWNrKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy9J
ZiByZXF1aXJlfGV4cG9ydHN8bW9kdWxlIGFyZSByZXF1ZXN0ZWQsIGdldCB0aGUKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vdmFsdWUgZm9yIHRoZW0gZnJvbSB0aGUgc3BlY2lhbCBoYW5kbGVy
cy4gQ2F2ZWF0OgorICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzIG9ubHkgd29ya3Mgd2hp
bGUgbW9kdWxlIGlzIGJlaW5nIGRlZmluZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cmVsTWFwICYmIGhhc1Byb3AoaGFuZGxlcnMsIGRlcHMpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGhhbmRsZXJzW2RlcHNdKHJlZ2lzdHJ5W3JlbE1hcC5pZF0pOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvL1N5bmNo
cm9ub3VzIGFjY2VzcyB0byBvbmUgbW9kdWxlLiBJZiByZXF1aXJlLmdldCBpcworICAgICAgICAg
ICAgICAgICAgICAgICAgLy9hdmFpbGFibGUgKGFzIGluIHRoZSBOb2RlIGFkYXB0ZXIpLCBwcmVm
ZXIgdGhhdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEuZ2V0KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcS5nZXQoY29udGV4dCwgZGVwcywgcmVsTWFw
LCBsb2NhbFJlcXVpcmUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICAvL05vcm1hbGl6ZSBtb2R1bGUgbmFtZSwgaWYgaXQgY29udGFpbnMgLiBv
ciAuLgorICAgICAgICAgICAgICAgICAgICAgICAgbWFwID0gbWFrZU1vZHVsZU1hcChkZXBzLCBy
ZWxNYXAsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gbWFwLmlk
OworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AoZGVmaW5lZCwgaWQpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdu
b3Rsb2FkZWQnLCAnTW9kdWxlIG5hbWUgIicgKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlkICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnIiBoYXMgbm90IGJlZW4gbG9hZGVkIHlldCBmb3IgY29udGV4dDogJyArCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dE5hbWUgKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWxNYXAgPyAnJyA6ICcuIFVzZSByZXF1aXJl
KFtdKScpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZGVmaW5lZFtpZF07CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAvL0dyYWIgZGVmaW5lcyB3YWl0aW5nIGluIHRoZSBnbG9iYWwgcXVldWUu
CisgICAgICAgICAgICAgICAgICAgIGludGFrZURlZmluZXMoKTsKKworICAgICAgICAgICAgICAg
ICAgICAvL01hcmsgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYXMgbmVlZGluZyB0byBiZSBsb2FkZWQu
CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubmV4dFRpY2soZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgLy9Tb21lIGRlZmluZXMgY291bGQgaGF2ZSBiZWVuIGFkZGVk
IHNpbmNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXF1aXJlIGNhbGwsIGNvbGxl
Y3QgdGhlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGludGFrZURlZmluZXMoKTsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZU1vZCA9IGdldE1vZHVsZShtYWtlTW9kdWxlTWFw
KG51bGwsIHJlbE1hcCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvL1N0b3JlIGlmIG1h
cCBjb25maWcgc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhpcyByZXF1aXJlCisgICAgICAgICAgICAg
ICAgICAgICAgICAvL2NhbGwgZm9yIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlcXVpcmVNb2Quc2tpcE1hcCA9IG9wdGlvbnMuc2tpcE1hcDsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgcmVxdWlyZU1vZC5pbml0KGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrLCB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZQorICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkKCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2Nh
bFJlcXVpcmU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbWl4aW4obG9j
YWxSZXF1aXJlLCB7CisgICAgICAgICAgICAgICAgICAgIGlzQnJvd3NlcjogaXNCcm93c2VyLAor
CisgICAgICAgICAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0
cyBhIG1vZHVsZSBuYW1lICsgLmV4dGVuc2lvbiBpbnRvIGFuIFVSTCBwYXRoLgorICAgICAgICAg
ICAgICAgICAgICAgKiAqUmVxdWlyZXMqIHRoZSB1c2Ugb2YgYSBtb2R1bGUgbmFtZS4gSXQgZG9l
cyBub3Qgc3VwcG9ydCB1c2luZworICAgICAgICAgICAgICAgICAgICAgKiBwbGFpbiBVUkxzIGxp
a2UgbmFtZVRvVXJsLgorICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAg
ICAgdG9Vcmw6IGZ1bmN0aW9uIChtb2R1bGVOYW1lUGx1c0V4dCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IG1v
ZHVsZU5hbWVQbHVzRXh0Lmxhc3RJbmRleE9mKCcuJyksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VnbWVudCA9IG1vZHVsZU5hbWVQbHVzRXh0LnNwbGl0KCcvJylbMF0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaXNSZWxhdGl2ZSA9IHNlZ21lbnQgPT09ICcuJyB8fCBzZWdt
ZW50ID09PSAnLi4nOworCisgICAgICAgICAgICAgICAgICAgICAgICAvL0hhdmUgYSBmaWxlIGV4
dGVuc2lvbiBhbGlhcywgYW5kIGl0IGlzIG5vdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vZG90cyBmcm9tIGEgcmVsYXRpdmUgcGF0aC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChpbmRleCAhPT0gLTEgJiYgKCFpc1JlbGF0aXZlIHx8IGluZGV4ID4gMSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBleHQgPSBtb2R1bGVOYW1lUGx1c0V4dC5zdWJzdHJpbmcoaW5k
ZXgsIG1vZHVsZU5hbWVQbHVzRXh0Lmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbW9kdWxlTmFtZVBsdXNFeHQgPSBtb2R1bGVOYW1lUGx1c0V4dC5zdWJzdHJpbmcoMCwgaW5k
ZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gY29udGV4dC5uYW1lVG9Vcmwobm9ybWFsaXplKG1vZHVsZU5hbWVQbHVzRXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsTWFwICYm
IHJlbE1hcC5pZCwgdHJ1ZSksIGV4dCwgIHRydWUpOworICAgICAgICAgICAgICAgICAgICB9LAor
CisgICAgICAgICAgICAgICAgICAgIGRlZmluZWQ6IGZ1bmN0aW9uIChpZCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGhhc1Byb3AoZGVmaW5lZCwgbWFrZU1vZHVsZU1hcChpZCwg
cmVsTWFwLCBmYWxzZSwgdHJ1ZSkuaWQpOworICAgICAgICAgICAgICAgICAgICB9LAorCisgICAg
ICAgICAgICAgICAgICAgIHNwZWNpZmllZDogZnVuY3Rpb24gKGlkKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZCA9IG1ha2VNb2R1bGVNYXAoaWQsIHJlbE1hcCwgZmFsc2UsIHRydWUpLmlk
OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1Byb3AoZGVmaW5lZCwgaWQpIHx8
IGhhc1Byb3AocmVnaXN0cnksIGlkKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgLy9Pbmx5IGFsbG93IHVuZGVmIG9uIHRvcCBs
ZXZlbCByZXF1aXJlIGNhbGxzCisgICAgICAgICAgICAgICAgaWYgKCFyZWxNYXApIHsKKyAgICAg
ICAgICAgICAgICAgICAgbG9jYWxSZXF1aXJlLnVuZGVmID0gZnVuY3Rpb24gKGlkKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvL0JpbmQgYW55IHdhaXRpbmcgZGVmaW5lKCkgY2FsbHMgdG8g
dGhpcyBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgLy9maXggZm9yICM0MDgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRha2VHbG9iYWxRdWV1ZSgpOworCisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgbWFwID0gbWFrZU1vZHVsZU1hcChpZCwgcmVsTWFwLCB0cnVlKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU2NyaXB0KGlkKTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgZGVsZXRlIGRlZmluZWRbaWRdOworICAgICAgICAgICAgICAgICAgICAgICAg
ZGVsZXRlIHVybEZldGNoZWRbbWFwLnVybF07CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxl
dGUgdW5kZWZFdmVudHNbaWRdOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9Ib2xkIG9uIHRvIGxpc3RlbmVycyBpbiBj
YXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbW9kdWxlIHdpbGwgYmUgYXR0
ZW1wdGVkIHRvIGJlIHJlbG9hZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy91c2lu
ZyBhIGRpZmZlcmVudCBjb25maWcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1v
ZC5ldmVudHMuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRl
ZkV2ZW50c1tpZF0gPSBtb2QuZXZlbnRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUmVnaXN0cnkoaWQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbFJlcXVpcmU7CisgICAgICAgICAg
ICB9LAorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIENhbGxlZCB0byBlbmFibGUg
YSBtb2R1bGUgaWYgaXQgaXMgc3RpbGwgaW4gdGhlIHJlZ2lzdHJ5CisgICAgICAgICAgICAgKiBh
d2FpdGluZyBlbmFibGVtZW50LiBBIHNlY29uZCBhcmcsIHBhcmVudCwgdGhlIHBhcmVudCBtb2R1
bGUsCisgICAgICAgICAgICAgKiBpcyBwYXNzZWQgaW4gZm9yIGNvbnRleHQsIHdoZW4gdGhpcyBt
ZXRob2QgaXMgb3ZlcnJpZGVuIGJ5CisgICAgICAgICAgICAgKiB0aGUgb3B0aW1pemVyLiBOb3Qg
c2hvd24gaGVyZSB0byBrZWVwIGNvZGUgY29tcGFjdC4KKyAgICAgICAgICAgICAqLworICAgICAg
ICAgICAgZW5hYmxlOiBmdW5jdGlvbiAoZGVwTWFwKSB7CisgICAgICAgICAgICAgICAgdmFyIG1v
ZCA9IGdldE93bihyZWdpc3RyeSwgZGVwTWFwLmlkKTsKKyAgICAgICAgICAgICAgICBpZiAobW9k
KSB7CisgICAgICAgICAgICAgICAgICAgIGdldE1vZHVsZShkZXBNYXApLmVuYWJsZSgpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8qKgorICAgICAg
ICAgICAgICogSW50ZXJuYWwgbWV0aG9kIHVzZWQgYnkgZW52aXJvbm1lbnQgYWRhcHRlcnMgdG8g
Y29tcGxldGUgYSBsb2FkIGV2ZW50LgorICAgICAgICAgICAgICogQSBsb2FkIGV2ZW50IGNvdWxk
IGJlIGEgc2NyaXB0IGxvYWQgb3IganVzdCBhIGxvYWQgcGFzcyBmcm9tIGEgc3luY2hyb25vdXMK
KyAgICAgICAgICAgICAqIGxvYWQgY2FsbC4KKyAgICAgICAgICAgICAqIEBwYXJhbSB7U3RyaW5n
fSBtb2R1bGVOYW1lIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdG8gcG90ZW50aWFsbHkgY29tcGxl
dGUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGNvbXBsZXRlTG9hZDogZnVuY3Rpb24g
KG1vZHVsZU5hbWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgZm91bmQsIGFyZ3MsIG1vZCwKKyAg
ICAgICAgICAgICAgICAgICAgc2hpbSA9IGdldE93bihjb25maWcuc2hpbSwgbW9kdWxlTmFtZSkg
fHwge30sCisgICAgICAgICAgICAgICAgICAgIHNoRXhwb3J0cyA9IHNoaW0uZXhwb3J0czsKKwor
ICAgICAgICAgICAgICAgIHRha2VHbG9iYWxRdWV1ZSgpOworCisgICAgICAgICAgICAgICAgd2hp
bGUgKGRlZlF1ZXVlLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICBhcmdzID0gZGVmUXVl
dWUuc2hpZnQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0gPT09IG51bGwpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSBtb2R1bGVOYW1lOworICAgICAgICAg
ICAgICAgICAgICAgICAgLy9JZiBhbHJlYWR5IGZvdW5kIGFuIGFub255bW91cyBtb2R1bGUgYW5k
IGJvdW5kIGl0CisgICAgICAgICAgICAgICAgICAgICAgICAvL3RvIHRoaXMgbmFtZSwgdGhlbiB0
aGlzIGlzIHNvbWUgb3RoZXIgYW5vbiBtb2R1bGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
d2FpdGluZyBmb3IgaXRzIGNvbXBsZXRlTG9hZCB0byBmaXJlLgorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGZvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnc1swXSA9PT0gbW9kdWxl
TmFtZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy9Gb3VuZCBtYXRjaGluZyBkZWZpbmUg
Y2FsbCBmb3IgdGhpcyBzY3JpcHQhCisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjYWxsR2V0
TW9kdWxlKGFyZ3MpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vRG8g
dGhpcyBhZnRlciB0aGUgY3ljbGUgb2YgY2FsbEdldE1vZHVsZSBpbiBjYXNlIHRoZSByZXN1bHQK
KyAgICAgICAgICAgICAgICAvL29mIHRob3NlIGNhbGxzL2luaXQgY2FsbHMgY2hhbmdlcyB0aGUg
cmVnaXN0cnkuCisgICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBtb2R1bGVO
YW1lKTsKKworICAgICAgICAgICAgICAgIGlmICghZm91bmQgJiYgIWhhc1Byb3AoZGVmaW5lZCwg
bW9kdWxlTmFtZSkgJiYgbW9kICYmICFtb2QuaW5pdGVkKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChjb25maWcuZW5mb3JjZURlZmluZSAmJiAoIXNoRXhwb3J0cyB8fCAhZ2V0R2xvYmFsKHNo
RXhwb3J0cykpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUGF0aEZhbGxiYWNr
KG1vZHVsZU5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ25vZGVmaW5lJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdObyBkZWZpbmUgY2FsbCBmb3IgJyArIG1vZHVs
ZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxs
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZHVsZU5h
bWVdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL0Egc2NyaXB0IHRoYXQgZG9lcyBub3Qg
Y2FsbCBkZWZpbmUoKSwgc28ganVzdCBzaW11bGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAg
Ly90aGUgY2FsbCBmb3IgaXQuCisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsR2V0TW9kdWxl
KFttb2R1bGVOYW1lLCAoc2hpbS5kZXBzIHx8IFtdKSwgc2hpbS5leHBvcnRzRm5dKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNo
ZWNrTG9hZGVkKCk7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAvKioKKyAgICAgICAg
ICAgICAqIENvbnZlcnRzIGEgbW9kdWxlIG5hbWUgdG8gYSBmaWxlIHBhdGguIFN1cHBvcnRzIGNh
c2VzIHdoZXJlCisgICAgICAgICAgICAgKiBtb2R1bGVOYW1lIG1heSBhY3R1YWxseSBiZSBqdXN0
IGFuIFVSTC4KKyAgICAgICAgICAgICAqIE5vdGUgdGhhdCBpdCAqKmRvZXMgbm90KiogY2FsbCBu
b3JtYWxpemUgb24gdGhlIG1vZHVsZU5hbWUsCisgICAgICAgICAgICAgKiBpdCBpcyBhc3N1bWVk
IHRvIGhhdmUgYWxyZWFkeSBiZWVuIG5vcm1hbGl6ZWQuIFRoaXMgaXMgYW4KKyAgICAgICAgICAg
ICAqIGludGVybmFsIEFQSSwgbm90IGEgcHVibGljIG9uZS4gVXNlIHRvVXJsIGZvciB0aGUgcHVi
bGljIEFQSS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgbmFtZVRvVXJsOiBmdW5jdGlv
biAobW9kdWxlTmFtZSwgZXh0LCBza2lwRXh0KSB7CisgICAgICAgICAgICAgICAgdmFyIHBhdGhz
LCBwa2dzLCBwa2csIHBrZ1BhdGgsIHN5bXMsIGksIHBhcmVudE1vZHVsZSwgdXJsLAorICAgICAg
ICAgICAgICAgICAgICBwYXJlbnRQYXRoOworCisgICAgICAgICAgICAgICAgLy9JZiBhIGNvbG9u
IGlzIGluIHRoZSBVUkwsIGl0IGluZGljYXRlcyBhIHByb3RvY29sIGlzIHVzZWQgYW5kIGl0IGlz
IGp1c3QKKyAgICAgICAgICAgICAgICAvL2FuIFVSTCB0byBhIGZpbGUsIG9yIGlmIGl0IHN0YXJ0
cyB3aXRoIGEgc2xhc2gsIGNvbnRhaW5zIGEgcXVlcnkgYXJnIChpLmUuID8pCisgICAgICAgICAg
ICAgICAgLy9vciBlbmRzIHdpdGggLmpzLCB0aGVuIGFzc3VtZSB0aGUgdXNlciBtZWFudCB0byB1
c2UgYW4gdXJsIGFuZCBub3QgYSBtb2R1bGUgaWQuCisgICAgICAgICAgICAgICAgLy9UaGUgc2xh
c2ggaXMgaW1wb3J0YW50IGZvciBwcm90b2NvbC1sZXNzIFVSTHMgYXMgd2VsbCBhcyBmdWxsIHBh
dGhzLgorICAgICAgICAgICAgICAgIGlmIChyZXEuanNFeHRSZWdFeHAudGVzdChtb2R1bGVOYW1l
KSkgeworICAgICAgICAgICAgICAgICAgICAvL0p1c3QgYSBwbGFpbiBwYXRoLCBub3QgbW9kdWxl
IG5hbWUgbG9va3VwLCBzbyBqdXN0IHJldHVybiBpdC4KKyAgICAgICAgICAgICAgICAgICAgLy9B
ZGQgZXh0ZW5zaW9uIGlmIGl0IGlzIGluY2x1ZGVkLiBUaGlzIGlzIGEgYml0IHdvbmt5LCBvbmx5
IG5vbi0uanMgdGhpbmdzIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgLy9hbiBleHRlbnNpb24s
IHRoaXMgbWV0aG9kIHByb2JhYmx5IG5lZWRzIHRvIGJlIHJld29ya2VkLgorICAgICAgICAgICAg
ICAgICAgICB1cmwgPSBtb2R1bGVOYW1lICsgKGV4dCB8fCAnJyk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy9BIG1vZHVsZSB0aGF0IG5lZWRzIHRvIGJl
IGNvbnZlcnRlZCB0byBhIHBhdGguCisgICAgICAgICAgICAgICAgICAgIHBhdGhzID0gY29uZmln
LnBhdGhzOworICAgICAgICAgICAgICAgICAgICBwa2dzID0gY29uZmlnLnBrZ3M7CisKKyAgICAg
ICAgICAgICAgICAgICAgc3ltcyA9IG1vZHVsZU5hbWUuc3BsaXQoJy8nKTsKKyAgICAgICAgICAg
ICAgICAgICAgLy9Gb3IgZWFjaCBtb2R1bGUgbmFtZSBzZWdtZW50LCBzZWUgaWYgdGhlcmUgaXMg
YSBwYXRoCisgICAgICAgICAgICAgICAgICAgIC8vcmVnaXN0ZXJlZCBmb3IgaXQuIFN0YXJ0IHdp
dGggbW9zdCBzcGVjaWZpYyBuYW1lCisgICAgICAgICAgICAgICAgICAgIC8vYW5kIHdvcmsgdXAg
ZnJvbSBpdC4KKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gc3ltcy5sZW5ndGg7IGkgPiAw
OyBpIC09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE1vZHVsZSA9IHN5bXMu
c2xpY2UoMCwgaSkuam9pbignLycpOworICAgICAgICAgICAgICAgICAgICAgICAgcGtnID0gZ2V0
T3duKHBrZ3MsIHBhcmVudE1vZHVsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRQ
YXRoID0gZ2V0T3duKHBhdGhzLCBwYXJlbnRNb2R1bGUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHBhcmVudFBhdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lmIGFu
IGFycmF5LCBpdCBtZWFucyB0aGVyZSBhcmUgYSBmZXcgY2hvaWNlcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvL0Nob29zZSB0aGUgb25lIHRoYXQgaXMgZGVzaXJlZAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHBhcmVudFBhdGgpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGggPSBwYXJlbnRQYXRoWzBdOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1z
LnNwbGljZSgwLCBpLCBwYXJlbnRQYXRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGtnKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy9JZiBtb2R1bGUgbmFtZSBpcyBqdXN0IHRoZSBwYWNrYWdl
IG5hbWUsIHRoZW4gbG9va2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZm9yIHRo
ZSBtYWluIG1vZHVsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kdWxlTmFt
ZSA9PT0gcGtnLm5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnUGF0
aCA9IHBrZy5sb2NhdGlvbiArICcvJyArIHBrZy5tYWluOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ1BhdGgg
PSBwa2cubG9jYXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN5bXMuc3BsaWNlKDAsIGksIHBrZ1BhdGgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy9Kb2luIHRoZSBwYXRo
IHBhcnRzIHRvZ2V0aGVyLCB0aGVuIGZpZ3VyZSBvdXQgaWYgYmFzZVVybCBpcyBuZWVkZWQuCisg
ICAgICAgICAgICAgICAgICAgIHVybCA9IHN5bXMuam9pbignLycpOworICAgICAgICAgICAgICAg
ICAgICB1cmwgKz0gKGV4dCB8fCAoL15kYXRhXDp8XD8vLnRlc3QodXJsKSB8fCBza2lwRXh0ID8g
JycgOiAnLmpzJykpOworICAgICAgICAgICAgICAgICAgICB1cmwgPSAodXJsLmNoYXJBdCgwKSA9
PT0gJy8nIHx8IHVybC5tYXRjaCgvXltcd1wrXC5cLV0rOi8pID8gJycgOiBjb25maWcuYmFzZVVy
bCkgKyB1cmw7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGNv
bmZpZy51cmxBcmdzID8gdXJsICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy51cmxBcmdzKSA6IHVybDsKKyAg
ICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8vRGVsZWdhdGVzIHRvIHJlcS5sb2FkLiBCcm9r
ZW4gb3V0IGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8KKyAgICAgICAgICAgIC8vYWxsb3cgb3Zl
cnJpZGluZyBpbiB0aGUgb3B0aW1pemVyLgorICAgICAgICAgICAgbG9hZDogZnVuY3Rpb24gKGlk
LCB1cmwpIHsKKyAgICAgICAgICAgICAgICByZXEubG9hZChjb250ZXh0LCBpZCwgdXJsKTsKKyAg
ICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogRXhlY3V0ZXMg
YSBtb2R1bGUgY2FsbGJhY2sgZnVuY3Rpb24uIEJyb2tlbiBvdXQgYXMgYSBzZXBhcmF0ZSBmdW5j
dGlvbgorICAgICAgICAgICAgICogc29sZWx5IHRvIGFsbG93IHRoZSBidWlsZCBzeXN0ZW0gdG8g
c2VxdWVuY2UgdGhlIGZpbGVzIGluIHRoZSBidWlsdAorICAgICAgICAgICAgICogbGF5ZXIgaW4g
dGhlIHJpZ2h0IHNlcXVlbmNlLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIEBwcml2
YXRlCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGV4ZWNDYjogZnVuY3Rpb24gKG5hbWUs
IGNhbGxiYWNrLCBhcmdzLCBleHBvcnRzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxi
YWNrLmFwcGx5KGV4cG9ydHMsIGFyZ3MpOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAg
LyoqCisgICAgICAgICAgICAgKiBjYWxsYmFjayBmb3Igc2NyaXB0IGxvYWRzLCB1c2VkIHRvIGNo
ZWNrIHN0YXR1cyBvZiBsb2FkaW5nLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIEBw
YXJhbSB7RXZlbnR9IGV2dCB0aGUgZXZlbnQgZnJvbSB0aGUgYnJvd3NlciBmb3IgdGhlIHNjcmlw
dAorICAgICAgICAgICAgICogdGhhdCB3YXMgbG9hZGVkLgorICAgICAgICAgICAgICovCisgICAg
ICAgICAgICBvblNjcmlwdExvYWQ6IGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgICAgICAgICAv
L1VzaW5nIGN1cnJlbnRUYXJnZXQgaW5zdGVhZCBvZiB0YXJnZXQgZm9yIEZpcmVmb3ggMi4wJ3Mg
c2FrZS4gTm90CisgICAgICAgICAgICAgICAgLy9hbGwgb2xkIGJyb3dzZXJzIHdpbGwgYmUgc3Vw
cG9ydGVkLCBidXQgdGhpcyBvbmUgd2FzIGVhc3kgZW5vdWdoCisgICAgICAgICAgICAgICAgLy90
byBzdXBwb3J0IGFuZCBzdGlsbCBtYWtlcyBzZW5zZS4KKyAgICAgICAgICAgICAgICBpZiAoZXZ0
LnR5cGUgPT09ICdsb2FkJyB8fAorICAgICAgICAgICAgICAgICAgICAgICAgKHJlYWR5UmVnRXhw
LnRlc3QoKGV2dC5jdXJyZW50VGFyZ2V0IHx8IGV2dC5zcmNFbGVtZW50KS5yZWFkeVN0YXRlKSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy9SZXNldCBpbnRlcmFjdGl2ZSBzY3JpcHQgc28gYSBz
Y3JpcHQgbm9kZSBpcyBub3QgaGVsZCBvbnRvIGZvcgorICAgICAgICAgICAgICAgICAgICAvL3Rv
IGxvbmcuCisgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlU2NyaXB0ID0gbnVsbDsKKwor
ICAgICAgICAgICAgICAgICAgICAvL1B1bGwgb3V0IHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgYW5k
IHRoZSBjb250ZXh0LgorICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGdldFNjcmlwdERh
dGEoZXZ0KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jb21wbGV0ZUxvYWQoZGF0YS5p
ZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgLyoq
CisgICAgICAgICAgICAgKiBDYWxsYmFjayBmb3Igc2NyaXB0IGVycm9ycy4KKyAgICAgICAgICAg
ICAqLworICAgICAgICAgICAgb25TY3JpcHRFcnJvcjogZnVuY3Rpb24gKGV2dCkgeworICAgICAg
ICAgICAgICAgIHZhciBkYXRhID0gZ2V0U2NyaXB0RGF0YShldnQpOworICAgICAgICAgICAgICAg
IGlmICghaGFzUGF0aEZhbGxiYWNrKGRhdGEuaWQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBvbkVycm9yKG1ha2VFcnJvcignc2NyaXB0ZXJyb3InLCAnU2NyaXB0IGVycm9yIGZvcjog
JyArIGRhdGEuaWQsIGV2dCwgW2RhdGEuaWRdKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGNvbnRleHQucmVxdWlyZSA9IGNvbnRleHQu
bWFrZVJlcXVpcmUoKTsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQ7CisgICAgfQorCisgICAgLyoq
CisgICAgICogTWFpbiBlbnRyeSBwb2ludC4KKyAgICAgKgorICAgICAqIElmIHRoZSBvbmx5IGFy
Z3VtZW50IHRvIHJlcXVpcmUgaXMgYSBzdHJpbmcsIHRoZW4gdGhlIG1vZHVsZSB0aGF0CisgICAg
ICogaXMgcmVwcmVzZW50ZWQgYnkgdGhhdCBzdHJpbmcgaXMgZmV0Y2hlZCBmb3IgdGhlIGFwcHJv
cHJpYXRlIGNvbnRleHQuCisgICAgICoKKyAgICAgKiBJZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMg
YW4gYXJyYXksIHRoZW4gaXQgd2lsbCBiZSB0cmVhdGVkIGFzIGFuIGFycmF5CisgICAgICogb2Yg
ZGVwZW5kZW5jeSBzdHJpbmcgbmFtZXMgdG8gZmV0Y2guIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIGNh
bGxiYWNrIGNhbgorICAgICAqIGJlIHNwZWNpZmllZCB0byBleGVjdXRlIHdoZW4gYWxsIG9mIHRo
b3NlIGRlcGVuZGVuY2llcyBhcmUgYXZhaWxhYmxlLgorICAgICAqCisgICAgICogTWFrZSBhIGxv
Y2FsIHJlcSB2YXJpYWJsZSB0byBoZWxwIENhamEgY29tcGxpYW5jZSAoaXQgYXNzdW1lcyB0aGlu
Z3MKKyAgICAgKiBvbiBhIHJlcXVpcmUgdGhhdCBhcmUgbm90IHN0YW5kYXJkaXplZCksIGFuZCB0
byBnaXZlIGEgc2hvcnQKKyAgICAgKiBuYW1lIGZvciBtaW5pZmljYXRpb24vbG9jYWwgc2NvcGUg
dXNlLgorICAgICAqLworICAgIHJlcSA9IHJlcXVpcmVqcyA9IGZ1bmN0aW9uIChkZXBzLCBjYWxs
YmFjaywgZXJyYmFjaywgb3B0aW9uYWwpIHsKKworICAgICAgICAvL0ZpbmQgdGhlIHJpZ2h0IGNv
bnRleHQsIHVzZSBkZWZhdWx0CisgICAgICAgIHZhciBjb250ZXh0LCBjb25maWcsCisgICAgICAg
ICAgICBjb250ZXh0TmFtZSA9IGRlZkNvbnRleHROYW1lOworCisgICAgICAgIC8vIERldGVybWlu
ZSBpZiBoYXZlIGNvbmZpZyBvYmplY3QgaW4gdGhlIGNhbGwuCisgICAgICAgIGlmICghaXNBcnJh
eShkZXBzKSAmJiB0eXBlb2YgZGVwcyAhPT0gJ3N0cmluZycpIHsKKyAgICAgICAgICAgIC8vIGRl
cHMgaXMgYSBjb25maWcgb2JqZWN0CisgICAgICAgICAgICBjb25maWcgPSBkZXBzOworICAgICAg
ICAgICAgaWYgKGlzQXJyYXkoY2FsbGJhY2spKSB7CisgICAgICAgICAgICAgICAgLy8gQWRqdXN0
IGFyZ3MgaWYgdGhlcmUgYXJlIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgIGRlcHMgPSBj
YWxsYmFjazsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGVycmJhY2s7CisgICAgICAgICAg
ICAgICAgZXJyYmFjayA9IG9wdGlvbmFsOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBkZXBzID0gW107CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoY29uZmlnICYmIGNvbmZpZy5jb250ZXh0KSB7CisgICAgICAgICAgICBjb250ZXh0TmFtZSA9
IGNvbmZpZy5jb250ZXh0OworICAgICAgICB9CisKKyAgICAgICAgY29udGV4dCA9IGdldE93bihj
b250ZXh0cywgY29udGV4dE5hbWUpOworICAgICAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAg
ICAgIGNvbnRleHQgPSBjb250ZXh0c1tjb250ZXh0TmFtZV0gPSByZXEucy5uZXdDb250ZXh0KGNv
bnRleHROYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25maWcpIHsKKyAgICAgICAg
ICAgIGNvbnRleHQuY29uZmlndXJlKGNvbmZpZyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gY29udGV4dC5yZXF1aXJlKGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrKTsKKyAgICB9OworCisg
ICAgLyoqCisgICAgICogU3VwcG9ydCByZXF1aXJlLmNvbmZpZygpIHRvIG1ha2UgaXQgZWFzaWVy
IHRvIGNvb3BlcmF0ZSB3aXRoIG90aGVyCisgICAgICogQU1EIGxvYWRlcnMgb24gZ2xvYmFsbHkg
YWdyZWVkIG5hbWVzLgorICAgICAqLworICAgIHJlcS5jb25maWcgPSBmdW5jdGlvbiAoY29uZmln
KSB7CisgICAgICAgIHJldHVybiByZXEoY29uZmlnKTsKKyAgICB9OworCisgICAgLyoqCisgICAg
ICogRXhlY3V0ZSBzb21ldGhpbmcgYWZ0ZXIgdGhlIGN1cnJlbnQgdGljaworICAgICAqIG9mIHRo
ZSBldmVudCBsb29wLiBPdmVycmlkZSBmb3Igb3RoZXIgZW52cworICAgICAqIHRoYXQgaGF2ZSBh
IGJldHRlciBzb2x1dGlvbiB0aGFuIHNldFRpbWVvdXQuCisgICAgICogQHBhcmFtICB7RnVuY3Rp
b259IGZuIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgbGF0ZXIuCisgICAgICovCisgICAgcmVxLm5leHRU
aWNrID0gdHlwZW9mIHNldFRpbWVvdXQgIT09ICd1bmRlZmluZWQnID8gZnVuY3Rpb24gKGZuKSB7
CisgICAgICAgIHNldFRpbWVvdXQoZm4sIDQpOworICAgIH0gOiBmdW5jdGlvbiAoZm4pIHsgZm4o
KTsgfTsKKworICAgIC8qKgorICAgICAqIEV4cG9ydCByZXF1aXJlIGFzIGEgZ2xvYmFsLCBidXQg
b25seSBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgorICAgICAqLworICAgIGlmICghcmVx
dWlyZSkgeworICAgICAgICByZXF1aXJlID0gcmVxOworICAgIH0KKworICAgIHJlcS52ZXJzaW9u
ID0gdmVyc2lvbjsKKworICAgIC8vVXNlZCB0byBmaWx0ZXIgb3V0IGRlcGVuZGVuY2llcyB0aGF0
IGFyZSBhbHJlYWR5IHBhdGhzLgorICAgIHJlcS5qc0V4dFJlZ0V4cCA9IC9eXC98OnxcP3xcLmpz
JC87CisgICAgcmVxLmlzQnJvd3NlciA9IGlzQnJvd3NlcjsKKyAgICBzID0gcmVxLnMgPSB7Cisg
ICAgICAgIGNvbnRleHRzOiBjb250ZXh0cywKKyAgICAgICAgbmV3Q29udGV4dDogbmV3Q29udGV4
dAorICAgIH07CisKKyAgICAvL0NyZWF0ZSBkZWZhdWx0IGNvbnRleHQuCisgICAgcmVxKHt9KTsK
KworICAgIC8vRXhwb3J0cyBzb21lIGNvbnRleHQtc2Vuc2l0aXZlIG1ldGhvZHMgb24gZ2xvYmFs
IHJlcXVpcmUuCisgICAgZWFjaChbCisgICAgICAgICd0b1VybCcsCisgICAgICAgICd1bmRlZics
CisgICAgICAgICdkZWZpbmVkJywKKyAgICAgICAgJ3NwZWNpZmllZCcKKyAgICBdLCBmdW5jdGlv
biAocHJvcCkgeworICAgICAgICAvL1JlZmVyZW5jZSBmcm9tIGNvbnRleHRzIGluc3RlYWQgb2Yg
ZWFybHkgYmluZGluZyB0byBkZWZhdWx0IGNvbnRleHQsCisgICAgICAgIC8vc28gdGhhdCBkdXJp
bmcgYnVpbGRzLCB0aGUgbGF0ZXN0IGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IGNvbnRleHQKKyAg
ICAgICAgLy93aXRoIGl0cyBjb25maWcgZ2V0cyB1c2VkLgorICAgICAgICByZXFbcHJvcF0gPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgY3R4ID0gY29udGV4dHNbZGVmQ29udGV4dE5h
bWVdOworICAgICAgICAgICAgcmV0dXJuIGN0eC5yZXF1aXJlW3Byb3BdLmFwcGx5KGN0eCwgYXJn
dW1lbnRzKTsKKyAgICAgICAgfTsKKyAgICB9KTsKKworICAgIGlmIChpc0Jyb3dzZXIpIHsKKyAg
ICAgICAgaGVhZCA9IHMuaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFk
JylbMF07CisgICAgICAgIC8vSWYgQkFTRSB0YWcgaXMgaW4gcGxheSwgdXNpbmcgYXBwZW5kQ2hp
bGQgaXMgYSBwcm9ibGVtIGZvciBJRTYuCisgICAgICAgIC8vV2hlbiB0aGF0IGJyb3dzZXIgZGll
cywgdGhpcyBjYW4gYmUgcmVtb3ZlZC4gRGV0YWlscyBpbiB0aGlzIGpRdWVyeSBidWc6CisgICAg
ICAgIC8vaHR0cDovL2Rldi5qcXVlcnkuY29tL3RpY2tldC8yNzA5CisgICAgICAgIGJhc2VFbGVt
ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Jhc2UnKVswXTsKKyAgICAgICAg
aWYgKGJhc2VFbGVtZW50KSB7CisgICAgICAgICAgICBoZWFkID0gcy5oZWFkID0gYmFzZUVsZW1l
bnQucGFyZW50Tm9kZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEFueSBl
cnJvcnMgdGhhdCByZXF1aXJlIGV4cGxpY2l0bHkgZ2VuZXJhdGVzIHdpbGwgYmUgcGFzc2VkIHRv
IHRoaXMKKyAgICAgKiBmdW5jdGlvbi4gSW50ZXJjZXB0L292ZXJyaWRlIGl0IGlmIHlvdSB3YW50
IGN1c3RvbSBlcnJvciBoYW5kbGluZy4KKyAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnIgdGhlIGVy
cm9yIG9iamVjdC4KKyAgICAgKi8KKyAgICByZXEub25FcnJvciA9IGRlZmF1bHRPbkVycm9yOwor
CisgICAgLyoqCisgICAgICogQ3JlYXRlcyB0aGUgbm9kZSBmb3IgdGhlIGxvYWQgY29tbWFuZC4g
T25seSB1c2VkIGluIGJyb3dzZXIgZW52cy4KKyAgICAgKi8KKyAgICByZXEuY3JlYXRlTm9kZSA9
IGZ1bmN0aW9uIChjb25maWcsIG1vZHVsZU5hbWUsIHVybCkgeworICAgICAgICB2YXIgbm9kZSA9
IGNvbmZpZy54aHRtbCA/CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5T
KCdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJywgJ2h0bWw6c2NyaXB0JykgOgorICAgICAg
ICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOworICAgICAgICBub2Rl
LnR5cGUgPSBjb25maWcuc2NyaXB0VHlwZSB8fCAndGV4dC9qYXZhc2NyaXB0JzsKKyAgICAgICAg
bm9kZS5jaGFyc2V0ID0gJ3V0Zi04JzsKKyAgICAgICAgbm9kZS5hc3luYyA9IHRydWU7CisgICAg
ICAgIHJldHVybiBub2RlOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBEb2VzIHRoZSByZXF1
ZXN0IHRvIGxvYWQgYSBtb2R1bGUgZm9yIHRoZSBicm93c2VyIGNhc2UuCisgICAgICogTWFrZSB0
aGlzIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8gYWxsb3cgb3RoZXIgZW52aXJvbm1lbnRzCisgICAg
ICogdG8gb3ZlcnJpZGUgaXQuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4
dCB0aGUgcmVxdWlyZSBjb250ZXh0IHRvIGZpbmQgc3RhdGUuCisgICAgICogQHBhcmFtIHtTdHJp
bmd9IG1vZHVsZU5hbWUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4KKyAgICAgKiBAcGFyYW0ge09i
amVjdH0gdXJsIHRoZSBVUkwgdG8gdGhlIG1vZHVsZS4KKyAgICAgKi8KKyAgICByZXEubG9hZCA9
IGZ1bmN0aW9uIChjb250ZXh0LCBtb2R1bGVOYW1lLCB1cmwpIHsKKyAgICAgICAgdmFyIGNvbmZp
ZyA9IChjb250ZXh0ICYmIGNvbnRleHQuY29uZmlnKSB8fCB7fSwKKyAgICAgICAgICAgIG5vZGU7
CisgICAgICAgIGlmIChpc0Jyb3dzZXIpIHsKKyAgICAgICAgICAgIC8vSW4gdGhlIGJyb3dzZXIg
c28gdXNlIGEgc2NyaXB0IHRhZworICAgICAgICAgICAgbm9kZSA9IHJlcS5jcmVhdGVOb2RlKGNv
bmZpZywgbW9kdWxlTmFtZSwgdXJsKTsKKworICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUo
J2RhdGEtcmVxdWlyZWNvbnRleHQnLCBjb250ZXh0LmNvbnRleHROYW1lKTsKKyAgICAgICAgICAg
IG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnLCBtb2R1bGVOYW1lKTsKKwor
ICAgICAgICAgICAgLy9TZXQgdXAgbG9hZCBsaXN0ZW5lci4gVGVzdCBhdHRhY2hFdmVudCBmaXJz
dCBiZWNhdXNlIElFOSBoYXMKKyAgICAgICAgICAgIC8vYSBzdWJ0bGUgaXNzdWUgaW4gaXRzIGFk
ZEV2ZW50TGlzdGVuZXIgYW5kIHNjcmlwdCBvbmxvYWQgZmlyaW5ncworICAgICAgICAgICAgLy90
aGF0IGRvIG5vdCBtYXRjaCB0aGUgYmVoYXZpb3Igb2YgYWxsIG90aGVyIGJyb3dzZXJzIHdpdGgK
KyAgICAgICAgICAgIC8vYWRkRXZlbnRMaXN0ZW5lciBzdXBwb3J0LCB3aGljaCBmaXJlIHRoZSBv
bmxvYWQgZXZlbnQgZm9yIGEKKyAgICAgICAgICAgIC8vc2NyaXB0IHJpZ2h0IGFmdGVyIHRoZSBz
Y3JpcHQgZXhlY3V0aW9uLiBTZWU6CisgICAgICAgICAgICAvL2h0dHBzOi8vY29ubmVjdC5taWNy
b3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvNjQ4MDU3L3NjcmlwdC1vbmxvYWQtZXZlbnQt
aXMtbm90LWZpcmVkLWltbWVkaWF0ZWx5LWFmdGVyLXNjcmlwdC1leGVjdXRpb24KKyAgICAgICAg
ICAgIC8vVU5GT1JUVU5BVEVMWSBPcGVyYSBpbXBsZW1lbnRzIGF0dGFjaEV2ZW50IGJ1dCBkb2Vz
IG5vdCBmb2xsb3cgdGhlIHNjcmlwdAorICAgICAgICAgICAgLy9zY3JpcHQgZXhlY3V0aW9uIG1v
ZGUuCisgICAgICAgICAgICBpZiAobm9kZS5hdHRhY2hFdmVudCAmJgorICAgICAgICAgICAgICAg
ICAgICAvL0NoZWNrIGlmIG5vZGUuYXR0YWNoRXZlbnQgaXMgYXJ0aWZpY2lhbGx5IGFkZGVkIGJ5
IGN1c3RvbSBzY3JpcHQgb3IKKyAgICAgICAgICAgICAgICAgICAgLy9uYXRpdmVseSBzdXBwb3J0
ZWQgYnkgYnJvd3NlcgorICAgICAgICAgICAgICAgICAgICAvL3JlYWQgaHR0cHM6Ly9naXRodWIu
Y29tL2pyYnVya2UvcmVxdWlyZWpzL2lzc3Vlcy8xODcKKyAgICAgICAgICAgICAgICAgICAgLy9p
ZiB3ZSBjYW4gTk9UIGZpbmQgW25hdGl2ZSBjb2RlXSB0aGVuIGl0IG11c3QgTk9UIG5hdGl2ZWx5
IHN1cHBvcnRlZC4KKyAgICAgICAgICAgICAgICAgICAgLy9pbiBJRTgsIG5vZGUuYXR0YWNoRXZl
bnQgZG9lcyBub3QgaGF2ZSB0b1N0cmluZygpCisgICAgICAgICAgICAgICAgICAgIC8vTm90ZSB0
aGUgdGVzdCBmb3IgIltuYXRpdmUgY29kZSIgd2l0aCBubyBjbG9zaW5nIGJyYWNlLCBzZWU6Cisg
ICAgICAgICAgICAgICAgICAgIC8vaHR0cHM6Ly9naXRodWIuY29tL2pyYnVya2UvcmVxdWlyZWpz
L2lzc3Vlcy8yNzMKKyAgICAgICAgICAgICAgICAgICAgIShub2RlLmF0dGFjaEV2ZW50LnRvU3Ry
aW5nICYmIG5vZGUuYXR0YWNoRXZlbnQudG9TdHJpbmcoKS5pbmRleE9mKCdbbmF0aXZlIGNvZGUn
KSA8IDApICYmCisgICAgICAgICAgICAgICAgICAgICFpc09wZXJhKSB7CisgICAgICAgICAgICAg
ICAgLy9Qcm9iYWJseSBJRS4gSUUgKGF0IGxlYXN0IDYtOCkgZG8gbm90IGZpcmUKKyAgICAgICAg
ICAgICAgICAvL3NjcmlwdCBvbmxvYWQgcmlnaHQgYWZ0ZXIgZXhlY3V0aW5nIHRoZSBzY3JpcHQs
IHNvCisgICAgICAgICAgICAgICAgLy93ZSBjYW5ub3QgdGllIHRoZSBhbm9ueW1vdXMgZGVmaW5l
IGNhbGwgdG8gYSBuYW1lLgorICAgICAgICAgICAgICAgIC8vSG93ZXZlciwgSUUgcmVwb3J0cyB0
aGUgc2NyaXB0IGFzIGJlaW5nIGluICdpbnRlcmFjdGl2ZScKKyAgICAgICAgICAgICAgICAvL3Jl
YWR5U3RhdGUgYXQgdGhlIHRpbWUgb2YgdGhlIGRlZmluZSBjYWxsLgorICAgICAgICAgICAgICAg
IHVzZUludGVyYWN0aXZlID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIG5vZGUuYXR0YWNoRXZl
bnQoJ29ucmVhZHlzdGF0ZWNoYW5nZScsIGNvbnRleHQub25TY3JpcHRMb2FkKTsKKyAgICAgICAg
ICAgICAgICAvL0l0IHdvdWxkIGJlIGdyZWF0IHRvIGFkZCBhbiBlcnJvciBoYW5kbGVyIGhlcmUg
dG8gY2F0Y2gKKyAgICAgICAgICAgICAgICAvLzQwNHMgaW4gSUU5Ky4gSG93ZXZlciwgb25yZWFk
eXN0YXRlY2hhbmdlIHdpbGwgZmlyZSBiZWZvcmUKKyAgICAgICAgICAgICAgICAvL3RoZSBlcnJv
ciBoYW5kbGVyLCBzbyB0aGF0IGRvZXMgbm90IGhlbHAuIElmIGFkZEV2ZW50TGlzdGVuZXIKKyAg
ICAgICAgICAgICAgICAvL2lzIHVzZWQsIHRoZW4gSUUgd2lsbCBmaXJlIGVycm9yIGJlZm9yZSBs
b2FkLCBidXQgd2UgY2Fubm90CisgICAgICAgICAgICAgICAgLy91c2UgdGhhdCBwYXRod2F5IGdp
dmVuIHRoZSBjb25uZWN0Lm1pY3Jvc29mdC5jb20gaXNzdWUKKyAgICAgICAgICAgICAgICAvL21l
bnRpb25lZCBhYm92ZSBhYm91dCBub3QgZG9pbmcgdGhlICdzY3JpcHQgZXhlY3V0ZSwKKyAgICAg
ICAgICAgICAgICAvL3RoZW4gZmlyZSB0aGUgc2NyaXB0IGxvYWQgZXZlbnQgbGlzdGVuZXIgYmVm
b3JlIGV4ZWN1dGUKKyAgICAgICAgICAgICAgICAvL25leHQgc2NyaXB0JyB0aGF0IG90aGVyIGJy
b3dzZXJzIGRvLgorICAgICAgICAgICAgICAgIC8vQmVzdCBob3BlOiBJRTEwIGZpeGVzIHRoZSBp
c3N1ZXMsCisgICAgICAgICAgICAgICAgLy9hbmQgdGhlbiBkZXN0cm95cyBhbGwgaW5zdGFsbHMg
b2YgSUUgNi05LgorICAgICAgICAgICAgICAgIC8vbm9kZS5hdHRhY2hFdmVudCgnb25lcnJvcics
IGNvbnRleHQub25TY3JpcHRFcnJvcik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGNvbnRleHQub25TY3JpcHRMb2Fk
LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcics
IGNvbnRleHQub25TY3JpcHRFcnJvciwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbm9kZS5zcmMgPSB1cmw7CisKKyAgICAgICAgICAgIC8vRm9yIHNvbWUgY2FjaGUgY2FzZXMg
aW4gSUUgNi04LCB0aGUgc2NyaXB0IGV4ZWN1dGVzIGJlZm9yZSB0aGUgZW5kCisgICAgICAgICAg
ICAvL29mIHRoZSBhcHBlbmRDaGlsZCBleGVjdXRpb24sIHNvIHRvIHRpZSBhbiBhbm9ueW1vdXMg
ZGVmaW5lCisgICAgICAgICAgICAvL2NhbGwgdG8gdGhlIG1vZHVsZSBuYW1lICh3aGljaCBpcyBz
dG9yZWQgb24gdGhlIG5vZGUpLCBob2xkIG9uCisgICAgICAgICAgICAvL3RvIGEgcmVmZXJlbmNl
IHRvIHRoaXMgbm9kZSwgYnV0IGNsZWFyIGFmdGVyIHRoZSBET00gaW5zZXJ0aW9uLgorICAgICAg
ICAgICAgY3VycmVudGx5QWRkaW5nU2NyaXB0ID0gbm9kZTsKKyAgICAgICAgICAgIGlmIChiYXNl
RWxlbWVudCkgeworICAgICAgICAgICAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKG5vZGUsIGJhc2VF
bGVtZW50KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaGVhZC5hcHBl
bmRDaGlsZChub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN1cnJlbnRseUFkZGlu
Z1NjcmlwdCA9IG51bGw7CisKKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICB9IGVs
c2UgaWYgKGlzV2ViV29ya2VyKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAg
IC8vSW4gYSB3ZWIgd29ya2VyLCB1c2UgaW1wb3J0U2NyaXB0cy4gVGhpcyBpcyBub3QgYSB2ZXJ5
CisgICAgICAgICAgICAgICAgLy9lZmZpY2llbnQgdXNlIG9mIGltcG9ydFNjcmlwdHMsIGltcG9y
dFNjcmlwdHMgd2lsbCBibG9jayB1bnRpbAorICAgICAgICAgICAgICAgIC8vaXRzIHNjcmlwdCBp
cyBkb3dubG9hZGVkIGFuZCBldmFsdWF0ZWQuIEhvd2V2ZXIsIGlmIHdlYiB3b3JrZXJzCisgICAg
ICAgICAgICAgICAgLy9hcmUgaW4gcGxheSwgdGhlIGV4cGVjdGF0aW9uIHRoYXQgYSBidWlsZCBo
YXMgYmVlbiBkb25lIHNvIHRoYXQKKyAgICAgICAgICAgICAgICAvL29ubHkgb25lIHNjcmlwdCBu
ZWVkcyB0byBiZSBsb2FkZWQgYW55d2F5LiBUaGlzIG1heSBuZWVkIHRvIGJlCisgICAgICAgICAg
ICAgICAgLy9yZWV2YWx1YXRlZCBpZiBvdGhlciB1c2UgY2FzZXMgYmVjb21lIGNvbW1vbi4KKyAg
ICAgICAgICAgICAgICBpbXBvcnRTY3JpcHRzKHVybCk7CisKKyAgICAgICAgICAgICAgICAvL0Fj
Y291bnQgZm9yIGFub255bW91cyBtb2R1bGVzCisgICAgICAgICAgICAgICAgY29udGV4dC5jb21w
bGV0ZUxvYWQobW9kdWxlTmFtZSk7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
ICAgICAgICAgY29udGV4dC5vbkVycm9yKG1ha2VFcnJvcignaW1wb3J0c2NyaXB0cycsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnRTY3JpcHRzIGZhaWxlZCBmb3IgJyAr
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1lICsgJyBhdCAn
ICsgdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBbbW9kdWxlTmFtZV0pKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBmdW5jdGlvbiBnZXRJbnRlcmFjdGl2ZVNjcmlwdCgpIHsKKyAg
ICAgICAgaWYgKGludGVyYWN0aXZlU2NyaXB0ICYmIGludGVyYWN0aXZlU2NyaXB0LnJlYWR5U3Rh
dGUgPT09ICdpbnRlcmFjdGl2ZScpIHsKKyAgICAgICAgICAgIHJldHVybiBpbnRlcmFjdGl2ZVNj
cmlwdDsKKyAgICAgICAgfQorCisgICAgICAgIGVhY2hSZXZlcnNlKHNjcmlwdHMoKSwgZnVuY3Rp
b24gKHNjcmlwdCkgeworICAgICAgICAgICAgaWYgKHNjcmlwdC5yZWFkeVN0YXRlID09PSAnaW50
ZXJhY3RpdmUnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChpbnRlcmFjdGl2ZVNjcmlwdCA9
IHNjcmlwdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW50
ZXJhY3RpdmVTY3JpcHQ7CisgICAgfQorCisgICAgLy9Mb29rIGZvciBhIGRhdGEtbWFpbiBzY3Jp
cHQgYXR0cmlidXRlLCB3aGljaCBjb3VsZCBhbHNvIGFkanVzdCB0aGUgYmFzZVVybC4KKyAgICBp
ZiAoaXNCcm93c2VyICYmICFjZmcuc2tpcERhdGFNYWluKSB7CisgICAgICAgIC8vRmlndXJlIG91
dCBiYXNlVXJsLiBHZXQgaXQgZnJvbSB0aGUgc2NyaXB0IHRhZyB3aXRoIHJlcXVpcmUuanMgaW4g
aXQuCisgICAgICAgIGVhY2hSZXZlcnNlKHNjcmlwdHMoKSwgZnVuY3Rpb24gKHNjcmlwdCkgewor
ICAgICAgICAgICAgLy9TZXQgdGhlICdoZWFkJyB3aGVyZSB3ZSBjYW4gYXBwZW5kIGNoaWxkcmVu
IGJ5CisgICAgICAgICAgICAvL3VzaW5nIHRoZSBzY3JpcHQncyBwYXJlbnQuCisgICAgICAgICAg
ICBpZiAoIWhlYWQpIHsKKyAgICAgICAgICAgICAgICBoZWFkID0gc2NyaXB0LnBhcmVudE5vZGU7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vTG9vayBmb3IgYSBkYXRhLW1haW4gYXR0
cmlidXRlIHRvIHNldCBtYWluIHNjcmlwdCBmb3IgdGhlIHBhZ2UKKyAgICAgICAgICAgIC8vdG8g
bG9hZC4gSWYgaXQgaXMgdGhlcmUsIHRoZSBwYXRoIHRvIGRhdGEgbWFpbiBiZWNvbWVzIHRoZQor
ICAgICAgICAgICAgLy9iYXNlVXJsLCBpZiBpdCBpcyBub3QgYWxyZWFkeSBzZXQuCisgICAgICAg
ICAgICBkYXRhTWFpbiA9IHNjcmlwdC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWFpbicpOworICAgICAg
ICAgICAgaWYgKGRhdGFNYWluKSB7CisgICAgICAgICAgICAgICAgLy9QcmVzZXJ2ZSBkYXRhTWFp
biBpbiBjYXNlIGl0IGlzIGEgcGF0aCAoaS5lLiBjb250YWlucyAnPycpCisgICAgICAgICAgICAg
ICAgbWFpblNjcmlwdCA9IGRhdGFNYWluOworCisgICAgICAgICAgICAgICAgLy9TZXQgZmluYWwg
YmFzZVVybCBpZiB0aGVyZSBpcyBub3QgYWxyZWFkeSBhbiBleHBsaWNpdCBvbmUuCisgICAgICAg
ICAgICAgICAgaWYgKCFjZmcuYmFzZVVybCkgeworICAgICAgICAgICAgICAgICAgICAvL1B1bGwg
b2ZmIHRoZSBkaXJlY3Rvcnkgb2YgZGF0YS1tYWluIGZvciB1c2UgYXMgdGhlCisgICAgICAgICAg
ICAgICAgICAgIC8vYmFzZVVybC4KKyAgICAgICAgICAgICAgICAgICAgc3JjID0gbWFpblNjcmlw
dC5zcGxpdCgnLycpOworICAgICAgICAgICAgICAgICAgICBtYWluU2NyaXB0ID0gc3JjLnBvcCgp
OworICAgICAgICAgICAgICAgICAgICBzdWJQYXRoID0gc3JjLmxlbmd0aCA/IHNyYy5qb2luKCcv
JykgICsgJy8nIDogJy4vJzsKKworICAgICAgICAgICAgICAgICAgICBjZmcuYmFzZVVybCA9IHN1
YlBhdGg7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy9TdHJpcCBvZmYg
YW55IHRyYWlsaW5nIC5qcyBzaW5jZSBtYWluU2NyaXB0IGlzIG5vdworICAgICAgICAgICAgICAg
IC8vbGlrZSBhIG1vZHVsZSBuYW1lLgorICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBtYWlu
U2NyaXB0LnJlcGxhY2UoanNTdWZmaXhSZWdFeHAsICcnKTsKKworICAgICAgICAgICAgICAgICAv
L0lmIG1haW5TY3JpcHQgaXMgc3RpbGwgYSBwYXRoLCBmYWxsIGJhY2sgdG8gZGF0YU1haW4KKyAg
ICAgICAgICAgICAgICBpZiAocmVxLmpzRXh0UmVnRXhwLnRlc3QobWFpblNjcmlwdCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbWFpblNjcmlwdCA9IGRhdGFNYWluOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIC8vUHV0IHRoZSBkYXRhLW1haW4gc2NyaXB0IGluIHRoZSBm
aWxlcyB0byBsb2FkLgorICAgICAgICAgICAgICAgIGNmZy5kZXBzID0gY2ZnLmRlcHMgPyBjZmcu
ZGVwcy5jb25jYXQobWFpblNjcmlwdCkgOiBbbWFpblNjcmlwdF07CisKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAg
LyoqCisgICAgICogVGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBkZWZpbml0aW9ucyBvZiBtb2R1
bGVzLiBEaWZmZXJzIGZyb20KKyAgICAgKiByZXF1aXJlKCkgaW4gdGhhdCBhIHN0cmluZyBmb3Ig
dGhlIG1vZHVsZSBzaG91bGQgYmUgdGhlIGZpcnN0IGFyZ3VtZW50LAorICAgICAqIGFuZCB0aGUg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSBhZnRlciBkZXBlbmRlbmNpZXMgYXJlIGxvYWRlZCBzaG91bGQK
KyAgICAgKiByZXR1cm4gYSB2YWx1ZSB0byBkZWZpbmUgdGhlIG1vZHVsZSBjb3JyZXNwb25kaW5n
IHRvIHRoZSBmaXJzdCBhcmd1bWVudCdzCisgICAgICogbmFtZS4KKyAgICAgKi8KKyAgICBkZWZp
bmUgPSBmdW5jdGlvbiAobmFtZSwgZGVwcywgY2FsbGJhY2spIHsKKyAgICAgICAgdmFyIG5vZGUs
IGNvbnRleHQ7CisKKyAgICAgICAgLy9BbGxvdyBmb3IgYW5vbnltb3VzIG1vZHVsZXMKKyAgICAg
ICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykgeworICAgICAgICAgICAgLy9BZGp1c3Qg
YXJncyBhcHByb3ByaWF0ZWx5CisgICAgICAgICAgICBjYWxsYmFjayA9IGRlcHM7CisgICAgICAg
ICAgICBkZXBzID0gbmFtZTsKKyAgICAgICAgICAgIG5hbWUgPSBudWxsOworICAgICAgICB9CisK
KyAgICAgICAgLy9UaGlzIG1vZHVsZSBtYXkgbm90IGhhdmUgZGVwZW5kZW5jaWVzCisgICAgICAg
IGlmICghaXNBcnJheShkZXBzKSkgeworICAgICAgICAgICAgY2FsbGJhY2sgPSBkZXBzOworICAg
ICAgICAgICAgZGVwcyA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICAvL0lmIG5vIG5hbWUs
IGFuZCBjYWxsYmFjayBpcyBhIGZ1bmN0aW9uLCB0aGVuIGZpZ3VyZSBvdXQgaWYgaXQgYQorICAg
ICAgICAvL0NvbW1vbkpTIHRoaW5nIHdpdGggZGVwZW5kZW5jaWVzLgorICAgICAgICBpZiAoIWRl
cHMgJiYgaXNGdW5jdGlvbihjYWxsYmFjaykpIHsKKyAgICAgICAgICAgIGRlcHMgPSBbXTsKKyAg
ICAgICAgICAgIC8vUmVtb3ZlIGNvbW1lbnRzIGZyb20gdGhlIGNhbGxiYWNrIHN0cmluZywKKyAg
ICAgICAgICAgIC8vbG9vayBmb3IgcmVxdWlyZSBjYWxscywgYW5kIHB1bGwgdGhlbSBpbnRvIHRo
ZSBkZXBlbmRlbmNpZXMsCisgICAgICAgICAgICAvL2J1dCBvbmx5IGlmIHRoZXJlIGFyZSBmdW5j
dGlvbiBhcmdzLgorICAgICAgICAgICAgaWYgKGNhbGxiYWNrLmxlbmd0aCkgeworICAgICAgICAg
ICAgICAgIGNhbGxiYWNrCisgICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpCisgICAgICAg
ICAgICAgICAgICAgIC5yZXBsYWNlKGNvbW1lbnRSZWdFeHAsICcnKQorICAgICAgICAgICAgICAg
ICAgICAucmVwbGFjZShjanNSZXF1aXJlUmVnRXhwLCBmdW5jdGlvbiAobWF0Y2gsIGRlcCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVwcy5wdXNoKGRlcCk7CisgICAgICAgICAgICAgICAg
ICAgIH0pOworCisgICAgICAgICAgICAgICAgLy9NYXkgYmUgYSBDb21tb25KUyB0aGluZyBldmVu
IHdpdGhvdXQgcmVxdWlyZSBjYWxscywgYnV0IHN0aWxsCisgICAgICAgICAgICAgICAgLy9jb3Vs
ZCB1c2UgZXhwb3J0cywgYW5kIG1vZHVsZS4gQXZvaWQgZG9pbmcgZXhwb3J0cyBhbmQgbW9kdWxl
CisgICAgICAgICAgICAgICAgLy93b3JrIHRob3VnaCBpZiBpdCBqdXN0IG5lZWRzIHJlcXVpcmUu
CisgICAgICAgICAgICAgICAgLy9SRVFVSVJFUyB0aGUgZnVuY3Rpb24gdG8gZXhwZWN0IHRoZSBD
b21tb25KUyB2YXJpYWJsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgLy9vcmRlciBsaXN0ZWQg
YmVsb3cuCisgICAgICAgICAgICAgICAgZGVwcyA9IChjYWxsYmFjay5sZW5ndGggPT09IDEgPyBb
J3JlcXVpcmUnXSA6IFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZSddKS5jb25jYXQoZGVw
cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvL0lmIGluIElFIDYtOCBh
bmQgaGl0IGFuIGFub255bW91cyBkZWZpbmUoKSBjYWxsLCBkbyB0aGUgaW50ZXJhY3RpdmUKKyAg
ICAgICAgLy93b3JrLgorICAgICAgICBpZiAodXNlSW50ZXJhY3RpdmUpIHsKKyAgICAgICAgICAg
IG5vZGUgPSBjdXJyZW50bHlBZGRpbmdTY3JpcHQgfHwgZ2V0SW50ZXJhY3RpdmVTY3JpcHQoKTsK
KyAgICAgICAgICAgIGlmIChub2RlKSB7CisgICAgICAgICAgICAgICAgaWYgKCFuYW1lKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG5hbWUgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJl
bW9kdWxlJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRleHQgPSBj
b250ZXh0c1tub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlY29udGV4dCcpXTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vQWx3YXlzIHNhdmUgb2ZmIGV2YWx1YXRp
bmcgdGhlIGRlZiBjYWxsIHVudGlsIHRoZSBzY3JpcHQgb25sb2FkIGhhbmRsZXIuCisgICAgICAg
IC8vVGhpcyBhbGxvd3MgbXVsdGlwbGUgbW9kdWxlcyB0byBiZSBpbiBhIGZpbGUgd2l0aG91dCBw
cmVtYXR1cmVseQorICAgICAgICAvL3RyYWNpbmcgZGVwZW5kZW5jaWVzLCBhbmQgYWxsb3dzIGZv
ciBhbm9ueW1vdXMgbW9kdWxlIHN1cHBvcnQsCisgICAgICAgIC8vd2hlcmUgdGhlIG1vZHVsZSBu
YW1lIGlzIG5vdCBrbm93biB1bnRpbCB0aGUgc2NyaXB0IG9ubG9hZCBldmVudAorICAgICAgICAv
L29jY3Vycy4gSWYgbm8gY29udGV4dCwgdXNlIHRoZSBnbG9iYWwgcXVldWUsIGFuZCBnZXQgaXQg
cHJvY2Vzc2VkCisgICAgICAgIC8vaW4gdGhlIG9uc2NyaXB0IGxvYWQgY2FsbGJhY2suCisgICAg
ICAgIChjb250ZXh0ID8gY29udGV4dC5kZWZRdWV1ZSA6IGdsb2JhbERlZlF1ZXVlKS5wdXNoKFtu
YW1lLCBkZXBzLCBjYWxsYmFja10pOworICAgIH07CisKKyAgICBkZWZpbmUuYW1kID0geworICAg
ICAgICBqUXVlcnk6IHRydWUKKyAgICB9OworCisKKyAgICAvKioKKyAgICAgKiBFeGVjdXRlcyB0
aGUgdGV4dC4gTm9ybWFsbHkganVzdCB1c2VzIGV2YWwsIGJ1dCBjYW4gYmUgbW9kaWZpZWQKKyAg
ICAgKiB0byB1c2UgYSBiZXR0ZXIsIGVudmlyb25tZW50LXNwZWNpZmljIGNhbGwuIE9ubHkgdXNl
ZCBmb3IgdHJhbnNwaWxpbmcKKyAgICAgKiBsb2FkZXIgcGx1Z2lucywgbm90IGZvciBwbGFpbiBK
UyBtb2R1bGVzLgorICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IHRoZSB0ZXh0IHRvIGV4ZWN1
dGUvZXZhbHVhdGUuCisgICAgICovCisgICAgcmVxLmV4ZWMgPSBmdW5jdGlvbiAodGV4dCkgewor
ICAgICAgICAvKmpzbGludCBldmlsOiB0cnVlICovCisgICAgICAgIHJldHVybiBldmFsKHRleHQp
OworICAgIH07CisKKyAgICAvL1NldCB1cCB3aXRoIGNvbmZpZyBpbmZvLgorICAgIHJlcShjZmcp
OworfSh0aGlzKSk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291
cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMv
dG9kb212Yy1jb21tb24vYmFzZS5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9E
b1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdo
dC9ib3dlcl9jb21wb25lbnRzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzCShyZXZpc2lvbiAwKQor
KysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBl
bmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL3RvZG9tdmMtY29tbW9uL2Jh
c2UuY3NzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTU2IEBACitodG1sLAorYm9keSB7Cisg
ICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7Cit9CisKK2J1dHRvbiB7CisgICAgbWFyZ2lu
OiAwOworICAgIHBhZGRpbmc6IDA7CisgICAgYm9yZGVyOiAwOworICAgIGJhY2tncm91bmQ6IG5v
bmU7CisgICAgZm9udC1zaXplOiAxMDAlOworICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsK
KyAgICBmb250LWZhbWlseTogaW5oZXJpdDsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICAtd2Vi
a2l0LWFwcGVhcmFuY2U6IG5vbmU7CisgICAgLW1zLWFwcGVhcmFuY2U6IG5vbmU7CisgICAgLW8t
YXBwZWFyYW5jZTogbm9uZTsKKyAgICBhcHBlYXJhbmNlOiBub25lOworfQorCitib2R5IHsKKyAg
ICBmb250OiAxNHB4ICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2Vy
aWY7CisgICAgbGluZS1oZWlnaHQ6IDEuNGVtOworICAgIGJhY2tncm91bmQ6ICNlYWVhZWEgdXJs
KCdiZy5wbmcnKTsKKyAgICBjb2xvcjogIzRkNGQ0ZDsKKyAgICB3aWR0aDogNTUwcHg7CisgICAg
bWFyZ2luOiAwIGF1dG87CisgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7
CisgICAgLW1vei1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW1zLWZvbnQtc21v
b3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICAtby1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7
CisgICAgZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworfQorCitidXR0b24sCitpbnB1dFt0
eXBlPSJjaGVja2JveCJdIHsKKyAgb3V0bGluZTogbm9uZTsKK30KKworI3RvZG9hcHAgeworICAg
IGJhY2tncm91bmQ6ICNmZmY7CisgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAw
LjkpOworICAgIG1hcmdpbjogMTMwcHggMCA0MHB4IDA7CisgICAgYm9yZGVyOiAxcHggc29saWQg
I2NjYzsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1
czogMnB4OworICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAycHg7CisgICAgYm94LXNoYWRv
dzogMCAycHggNnB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpLAorICAgICAgICAgICAgICAgIDAgMjVw
eCA1MHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE1KTsKK30KKworI3RvZG9hcHA6YmVmb3JlIHsKKyAg
ICBjb250ZW50OiAnJzsKKyAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNmNWQ2ZDY7CisgICAg
Ym9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2Y1ZDZkNjsKKyAgICB3aWR0aDogMnB4OworICAgIHBv
c2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgbGVmdDogNDBweDsKKyAgICBoZWln
aHQ6IDEwMCU7Cit9CisKKyN0b2RvYXBwIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVy
IHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKyN0b2RvYXBwIGlucHV0OjotbW96LXBs
YWNlaG9sZGVyIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7CisgICAgY29sb3I6ICNhOWE5YTk7
Cit9CisKKyN0b2RvYXBwIGgxIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAt
MTIwcHg7CisgICAgd2lkdGg6IDEwMCU7CisgICAgZm9udC1zaXplOiA3MHB4OworICAgIGZvbnQt
d2VpZ2h0OiBib2xkOworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBjb2xvcjogI2IzYjNi
MzsKKyAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpOworICAgIHRleHQtc2hhZG93
OiAtMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpOworICAgIC13ZWJraXQtdGV4dC1yZW5kZXJp
bmc6IG9wdGltaXplTGVnaWJpbGl0eTsKKyAgICAtbW96LXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6
ZUxlZ2liaWxpdHk7CisgICAgLW1zLXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7
CisgICAgLW8tdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKKyAgICB0ZXh0LXJl
bmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OworfQorCisjaGVhZGVyIHsKKyAgICBwYWRkaW5n
LXRvcDogMTVweDsKKyAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0OworfQorCisjaGVhZGVyOmJl
Zm9yZSB7CisgICAgY29udGVudDogJyc7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRv
cDogMDsKKyAgICByaWdodDogMDsKKyAgICBsZWZ0OiAwOworICAgIGhlaWdodDogMTVweDsKKyAg
ICB6LWluZGV4OiAyOworICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNmM2MTVjOworICAg
IGJhY2tncm91bmQ6ICM4ZDdkNzc7CisgICAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChs
aW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbShyZ2JhKDEzMiwgMTEwLCAxMDAsIDAu
OCkpLHRvKHJnYmEoMTAxLCA4NCwgNzYsIDAuOCkpKTsKKyAgICBiYWNrZ3JvdW5kOiAtd2Via2l0
LWxpbmVhci1ncmFkaWVudCh0b3AsIHJnYmEoMTMyLCAxMTAsIDEwMCwgMC44KSwgcmdiYSgxMDEs
IDg0LCA3NiwgMC44KSk7CisgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvcCwgcmdi
YSgxMzIsIDExMCwgMTAwLCAwLjgpLCByZ2JhKDEwMSwgODQsIDc2LCAwLjgpKTsKKyAgICBmaWx0
ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChHcmFkaWVudFR5
cGU9MCxTdGFydENvbG9yU3RyPScjOWQ4YjgzJywgRW5kQ29sb3JTdHI9JyM4NDc2NzAnKTsKKyAg
ICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAxcHg7CisgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRp
dXM6IDFweDsKK30KKworI25ldy10b2RvLAorLmVkaXQgeworICAgIHBvc2l0aW9uOiByZWxhdGl2
ZTsKKyAgICBtYXJnaW46IDA7CisgICAgd2lkdGg6IDEwMCU7CisgICAgZm9udC1zaXplOiAyNHB4
OworICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OworICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKKyAg
ICBib3JkZXI6IDA7CisgICAgb3V0bGluZTogbm9uZTsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAg
ICBwYWRkaW5nOiA2cHg7CisgICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKKyAgICBib3gtc2hh
ZG93OiBpbnNldCAwIC0xcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpOworICAgIC1tb3otYm94
LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAtbXMtYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAg
ICAtby1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7
CisgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW1vei1mb250
LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW1zLWZvbnQtc21vb3RoaW5nOiBhbnRpYWxp
YXNlZDsKKyAgICAtby1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgZm9udC1zbW9v
dGhpbmc6IGFudGlhbGlhc2VkOworfQorCisjbmV3LXRvZG8geworICAgIHBhZGRpbmc6IDE2cHgg
MTZweCAxNnB4IDYwcHg7CisgICAgYm9yZGVyOiBub25lOworICAgIGJhY2tncm91bmQ6IHJnYmEo
MCwgMCwgMCwgMC4wMik7CisgICAgei1pbmRleDogMjsKKyAgICBib3gtc2hhZG93OiBub25lOwor
fQorCisjbWFpbiB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIHotaW5kZXg6IDI7Cisg
ICAgYm9yZGVyLXRvcDogMXB4IGRvdHRlZCAjYWRhZGFkOworfQorCitsYWJlbFtmb3I9J3RvZ2ds
ZS1hbGwnXSB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworI3RvZ2dsZS1hbGwgeworICAgIHBv
c2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC00MnB4OworICAgIGxlZnQ6IC00cHg7CisgICAg
d2lkdGg6IDQwcHg7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIC8qIE1vYmlsZSBTYWZh
cmkgKi8KKyAgICBib3JkZXI6IG5vbmU7Cit9CisKKyN0b2dnbGUtYWxsOmJlZm9yZSB7CisgICAg
Y29udGVudDogJ8K7JzsKKyAgICBmb250LXNpemU6IDI4cHg7CisgICAgY29sb3I6ICNkOWQ5ZDk7
CisgICAgcGFkZGluZzogMCAyNXB4IDdweDsKK30KKworI3RvZ2dsZS1hbGw6Y2hlY2tlZDpiZWZv
cmUgeworICAgIGNvbG9yOiAjNzM3MzczOworfQorCisjdG9kby1saXN0IHsKKyAgICBtYXJnaW46
IDA7CisgICAgcGFkZGluZzogMDsKKyAgICBsaXN0LXN0eWxlOiBub25lOworfQorCisjdG9kby1s
aXN0IGxpIHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgZm9udC1zaXplOiAyNHB4Owor
ICAgIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQgI2NjYzsKK30KKworI3RvZG8tbGlzdCBsaTps
YXN0LWNoaWxkIHsKKyAgICBib3JkZXItYm90dG9tOiBub25lOworfQorCisjdG9kby1saXN0IGxp
LmVkaXRpbmcgeworICAgIGJvcmRlci1ib3R0b206IG5vbmU7CisgICAgcGFkZGluZzogMDsKK30K
KworI3RvZG8tbGlzdCBsaS5lZGl0aW5nIC5lZGl0IHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAg
ICB3aWR0aDogNTA2cHg7CisgICAgcGFkZGluZzogMTNweCAxN3B4IDEycHggMTdweDsKKyAgICBt
YXJnaW46IDAgMCAwIDQzcHg7Cit9CisKKyN0b2RvLWxpc3QgbGkuZWRpdGluZyAudmlldyB7Cisg
ICAgZGlzcGxheTogbm9uZTsKK30KKworI3RvZG8tbGlzdCBsaSAudG9nZ2xlIHsKKyAgICB0ZXh0
LWFsaWduOiBjZW50ZXI7CisgICAgd2lkdGg6IDQwcHg7CisgICAgLyogYXV0bywgc2luY2Ugbm9u
LVdlYktpdCBicm93c2VycyBkb2Vzbid0IHN1cHBvcnQgaW5wdXQgc3R5bGluZyAqLworICAgIGhl
aWdodDogYXV0bzsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAwOworICAgIGJv
dHRvbTogMDsKKyAgICBtYXJnaW46IGF1dG8gMDsKKyAgICAvKiBNb2JpbGUgU2FmYXJpICovCisg
ICAgYm9yZGVyOiBub25lOworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKKyAgICAtbXMt
YXBwZWFyYW5jZTogbm9uZTsKKyAgICAtby1hcHBlYXJhbmNlOiBub25lOworICAgIGFwcGVhcmFu
Y2U6IG5vbmU7Cit9CisKKyN0b2RvLWxpc3QgbGkgLnRvZ2dsZTphZnRlciB7CisgICAgY29udGVu
dDogJ+KclCc7CisgICAgLyogNDAgKyBhIGNvdXBsZSBvZiBwaXhlbHMgdmlzdWFsIGFkanVzdG1l
bnQgKi8KKyAgICBsaW5lLWhlaWdodDogNDNweDsKKyAgICBmb250LXNpemU6IDIwcHg7CisgICAg
Y29sb3I6ICNkOWQ5ZDk7CisgICAgdGV4dC1zaGFkb3c6IDAgLTFweCAwICNiZmJmYmY7Cit9CisK
KyN0b2RvLWxpc3QgbGkgLnRvZ2dsZTpjaGVja2VkOmFmdGVyIHsKKyAgICBjb2xvcjogIzg1YWRh
NzsKKyAgICB0ZXh0LXNoYWRvdzogMCAxcHggMCAjNjY5OTkxOworICAgIGJvdHRvbTogMXB4Owor
ICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKK30KKworI3RvZG8tbGlzdCBsaSBsYWJlbCB7CisgICAg
d2hpdGUtc3BhY2U6IHByZTsKKyAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOworICAgIHBhZGRp
bmc6IDE1cHggNjBweCAxNXB4IDE1cHg7CisgICAgbWFyZ2luLWxlZnQ6IDQ1cHg7CisgICAgZGlz
cGxheTogYmxvY2s7CisgICAgbGluZS1oZWlnaHQ6IDEuMjsKKyAgICAtd2Via2l0LXRyYW5zaXRp
b246IGNvbG9yIDAuNHM7CisgICAgdHJhbnNpdGlvbjogY29sb3IgMC40czsKK30KKworI3RvZG8t
bGlzdCBsaS5jb21wbGV0ZWQgbGFiZWwgeworICAgIGNvbG9yOiAjYTlhOWE5OworICAgIHRleHQt
ZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOworfQorCisjdG9kby1saXN0IGxpIC5kZXN0cm95IHsK
KyAgICBkaXNwbGF5OiBub25lOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7
CisgICAgcmlnaHQ6IDEwcHg7CisgICAgYm90dG9tOiAwOworICAgIHdpZHRoOiA0MHB4OworICAg
IGhlaWdodDogNDBweDsKKyAgICBtYXJnaW46IGF1dG8gMDsKKyAgICBmb250LXNpemU6IDIycHg7
CisgICAgY29sb3I6ICNhODhhOGE7CisgICAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMC4yczsK
KyAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKK30KKworI3RvZG8tbGlzdCBsaSAuZGVzdHJveTpo
b3ZlciB7CisgICAgdGV4dC1zaGFkb3c6IDAgMCAxcHggIzAwMCwKKyAgICAgICAgICAgICAgICAg
MCAwIDEwcHggcmdiYSgxOTksIDEwNywgMTA3LCAwLjgpOworICAgIC13ZWJraXQtdHJhbnNmb3Jt
OiBzY2FsZSgxLjMpOworICAgIC1tcy10cmFuc2Zvcm06IHNjYWxlKDEuMyk7CisgICAgdHJhbnNm
b3JtOiBzY2FsZSgxLjMpOworfQorCisjdG9kby1saXN0IGxpIC5kZXN0cm95OmFmdGVyIHsKKyAg
ICBjb250ZW50OiAn4pyWJzsKK30KKworI3RvZG8tbGlzdCBsaTpob3ZlciAuZGVzdHJveSB7Cisg
ICAgZGlzcGxheTogYmxvY2s7Cit9CisKKyN0b2RvLWxpc3QgbGkgLmVkaXQgeworICAgIGRpc3Bs
YXk6IG5vbmU7Cit9CisKKyN0b2RvLWxpc3QgbGkuZWRpdGluZzpsYXN0LWNoaWxkIHsKKyAgICBt
YXJnaW4tYm90dG9tOiAtMXB4OworfQorCisjZm9vdGVyIHsKKyAgICBjb2xvcjogIzc3NzsKKyAg
ICBwYWRkaW5nOiAwIDE1cHg7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHJpZ2h0OiAw
OworICAgIGJvdHRvbTogLTMxcHg7CisgICAgbGVmdDogMDsKKyAgICBoZWlnaHQ6IDIwcHg7Cisg
ICAgei1pbmRleDogMTsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKKyNmb290ZXI6YmVm
b3JlIHsKKyAgICBjb250ZW50OiAnJzsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgcmln
aHQ6IDA7CisgICAgYm90dG9tOiAzMXB4OworICAgIGxlZnQ6IDA7CisgICAgaGVpZ2h0OiA1MHB4
OworICAgIHotaW5kZXg6IC0xOworICAgIGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAs
IDAsIDAuMyksCisgICAgICAgICAgICAgICAgMCA2cHggMCAtM3B4IHJnYmEoMjU1LCAyNTUsIDI1
NSwgMC44KSwKKyAgICAgICAgICAgICAgICAwIDdweCAxcHggLTNweCByZ2JhKDAsIDAsIDAsIDAu
MyksCisgICAgICAgICAgICAgICAgMCA0M3B4IDAgLTZweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAu
OCksCisgICAgICAgICAgICAgICAgMCA0NHB4IDJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKTsK
K30KKworI3RvZG8tY291bnQgeworICAgIGZsb2F0OiBsZWZ0OworICAgIHRleHQtYWxpZ246IGxl
ZnQ7Cit9CisKKyNmaWx0ZXJzIHsKKyAgICBtYXJnaW46IDA7CisgICAgcGFkZGluZzogMDsKKyAg
ICBsaXN0LXN0eWxlOiBub25lOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICByaWdodDog
MDsKKyAgICBsZWZ0OiAwOworfQorCisjZmlsdGVycyBsaSB7CisgICAgZGlzcGxheTogaW5saW5l
OworfQorCisjZmlsdGVycyBsaSBhIHsKKyAgICBjb2xvcjogIzgzNzU2ZjsKKyAgICBtYXJnaW46
IDJweDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKKyNmaWx0ZXJzIGxpIGEuc2Vs
ZWN0ZWQgeworICAgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisjY2xlYXItY29tcGxldGVkIHsK
KyAgICBmbG9hdDogcmlnaHQ7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIGxpbmUtaGVp
Z2h0OiAyMHB4OworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBiYWNrZ3JvdW5kOiBy
Z2JhKDAsIDAsIDAsIDAuMSk7CisgICAgZm9udC1zaXplOiAxMXB4OworICAgIHBhZGRpbmc6IDAg
MTBweDsKKyAgICBib3JkZXItcmFkaXVzOiAzcHg7CisgICAgYm94LXNoYWRvdzogMCAtMXB4IDAg
MCByZ2JhKDAsIDAsIDAsIDAuMik7Cit9CisKKyNjbGVhci1jb21wbGV0ZWQ6aG92ZXIgeworICAg
IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4xNSk7CisgICAgYm94LXNoYWRvdzogMCAtMXB4
IDAgMCByZ2JhKDAsIDAsIDAsIDAuMyk7Cit9CisKKyNpbmZvIHsKKyAgICBtYXJnaW46IDY1cHgg
YXV0byAwOworICAgIGNvbG9yOiAjYTZhNmE2OworICAgIGZvbnQtc2l6ZTogMTJweDsKKyAgICB0
ZXh0LXNoYWRvdzogMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7CisgICAgdGV4dC1h
bGlnbjogY2VudGVyOworfQorCisjaW5mbyBhIHsKKyAgICBjb2xvcjogaW5oZXJpdDsKK30KKwor
LyoKKyAgICBIYWNrIHRvIHJlbW92ZSBiYWNrZ3JvdW5kIGZyb20gTW9iaWxlIFNhZmFyaS4KKyAg
ICBDYW4ndCB1c2UgaXQgZ2xvYmFsbHkgc2luY2UgaXQgZGVzdHJveXMgY2hlY2tib3hlcyBpbiBG
aXJlZm94IGFuZCBPcGVyYQorKi8KKworQG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRl
dmljZS1waXhlbC1yYXRpbzowKSB7CisgICAgI3RvZ2dsZS1hbGwsCisgICAgI3RvZG8tbGlzdCBs
aSAudG9nZ2xlIHsKKyAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKKyAgICB9CisKKyAgICAjdG9k
by1saXN0IGxpIC50b2dnbGUgeworICAgICAgICBoZWlnaHQ6IDQwcHg7CisgICAgfQorCisgICAg
I3RvZ2dsZS1hbGwgeworICAgICAgICB0b3A6IC01NnB4OworICAgICAgICBsZWZ0OiAtMTVweDsK
KyAgICAgICAgd2lkdGg6IDY1cHg7CisgICAgICAgIGhlaWdodDogNDFweDsKKyAgICAgICAgLXdl
YmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7CisgICAgICAgIC1tcy10cmFuc2Zvcm06IHJv
dGF0ZSg5MGRlZyk7CisgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKKyAgICAgICAg
LXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAgICAgICBhcHBlYXJhbmNlOiBub25lOworICAg
IH0KK30KKworLmhpZGRlbiB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworaHIgeworICAgIG1h
cmdpbjogMjBweCAwOworICAgIGJvcmRlcjogMDsKKyAgICBib3JkZXItdG9wOiAxcHggZGFzaGVk
ICNDNUM1QzU7CisgICAgYm9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZCAjRjdGN0Y3OworfQorCisu
bGVhcm4gYSB7CisgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgICB0ZXh0LWRlY29yYXRpb246
IG5vbmU7CisgICAgY29sb3I6ICNiODNmNDU7Cit9CisKKy5sZWFybiBhOmhvdmVyIHsKKyAgICB0
ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgICBjb2xvcjogIzc4N2U3ZTsKK30KKworLmxl
YXJuIGgzLAorLmxlYXJuIGg0LAorLmxlYXJuIGg1IHsKKyAgICBtYXJnaW46IDEwcHggMDsKKyAg
ICBmb250LXdlaWdodDogNTAwOworICAgIGxpbmUtaGVpZ2h0OiAxLjI7CisgICAgY29sb3I6ICMw
MDA7Cit9CisKKy5sZWFybiBoMyB7CisgICAgZm9udC1zaXplOiAyNHB4OworfQorCisubGVhcm4g
aDQgeworICAgIGZvbnQtc2l6ZTogMThweDsKK30KKworLmxlYXJuIGg1IHsKKyAgICBtYXJnaW4t
Ym90dG9tOiAwOworICAgIGZvbnQtc2l6ZTogMTRweDsKK30KKworLmxlYXJuIHVsIHsKKyAgICBw
YWRkaW5nOiAwOworICAgIG1hcmdpbjogMCAwIDMwcHggMjVweDsKK30KKworLmxlYXJuIGxpIHsK
KyAgICBsaW5lLWhlaWdodDogMjBweDsKK30KKworLmxlYXJuIHAgeworICAgIGZvbnQtc2l6ZTog
MTVweDsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGxpbmUtaGVpZ2h0OiAxLjM7CisgICAg
bWFyZ2luLXRvcDogMDsKKyAgICBtYXJnaW4tYm90dG9tOiAwOworfQorCisucXVvdGUgeworICAg
IGJvcmRlcjogbm9uZTsKKyAgICBtYXJnaW46IDIwcHggMCA2MHB4IDA7Cit9CisKKy5xdW90ZSBw
IHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy5xdW90ZSBwOmJlZm9yZSB7CisgICAg
Y29udGVudDogJ+KAnCc7CisgICAgZm9udC1zaXplOiA1MHB4OworICAgIG9wYWNpdHk6IC4xNTsK
KyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAtMjBweDsKKyAgICBsZWZ0OiAzcHg7
Cit9CisKKy5xdW90ZSBwOmFmdGVyIHsKKyAgICBjb250ZW50OiAn4oCdJzsKKyAgICBmb250LXNp
emU6IDUwcHg7CisgICAgb3BhY2l0eTogLjE1OworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAg
ICBib3R0b206IC00MnB4OworICAgIHJpZ2h0OiAzcHg7Cit9CisKKy5xdW90ZSBmb290ZXIgewor
ICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBib3R0b206IC00MHB4OworICAgIHJpZ2h0OiAw
OworfQorCisucXVvdGUgZm9vdGVyIGltZyB7CisgICAgYm9yZGVyLXJhZGl1czogM3B4OworfQor
CisucXVvdGUgZm9vdGVyIGEgeworICAgIG1hcmdpbi1sZWZ0OiA1cHg7CisgICAgdmVydGljYWwt
YWxpZ246IG1pZGRsZTsKK30KKworLnNwZWVjaC1idWJibGUgeworICAgIHBvc2l0aW9uOiByZWxh
dGl2ZTsKKyAgICBwYWRkaW5nOiAxMHB4OworICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwg
LjA0KTsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7Cit9CisKKy5zcGVlY2gtYnViYmxlOmFmdGVy
IHsKKyAgICBjb250ZW50OiAnJzsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAx
MDAlOworICAgIHJpZ2h0OiAzMHB4OworICAgIGJvcmRlcjogMTNweCBzb2xpZCB0cmFuc3BhcmVu
dDsKKyAgICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDAsIDAsIDAsIC4wNCk7Cit9CisKKy5sZWFy
bi1iYXIgPiAubGVhcm4geworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB3aWR0aDogMjcy
cHg7CisgICAgdG9wOiA4cHg7CisgICAgbGVmdDogLTMwMHB4OworICAgIHBhZGRpbmc6IDEwcHg7
CisgICAgYm9yZGVyLXJhZGl1czogNXB4OworICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1
LCAyNTUsIDI1NSwgLjYpOworICAgIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogbGVmdDsK
KyAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiBsZWZ0OworICAgIC13ZWJraXQtdHJhbnNpdGlvbi1k
dXJhdGlvbjogNTAwbXM7CisgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNTAwbXM7Cit9CisKK0Bt
ZWRpYSAobWluLXdpZHRoOiA4OTlweCkgeworICAgIC5sZWFybi1iYXIgeworICAgICAgICB3aWR0
aDogYXV0bzsKKyAgICAgICAgbWFyZ2luOiAwIDAgMCAzMDBweDsKKyAgICB9CisKKyAgICAubGVh
cm4tYmFyID4gLmxlYXJuIHsKKyAgICAgICAgbGVmdDogOHB4OworICAgIH0KKworICAgIC5sZWFy
bi1iYXIgI3RvZG9hcHAgeworICAgICAgICB3aWR0aDogNTUwcHg7CisgICAgICAgIG1hcmdpbjog
MTMwcHggYXV0byA0MHB4IGF1dG87CisgICAgfQorfQpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9E
b1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdo
dC9ib3dlcl9jb21wb25lbnRzL3RvZG9tdmMtY29tbW9uL2Jhc2UuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
UGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL3RvZG9tdmMtY29tbW9uL2Jhc2Uu
anMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291
cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMv
dG9kb212Yy1jb21tb24vYmFzZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwOSBAQAor
KGZ1bmN0aW9uICgpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICAvLyBVbmRlcnNjb3JlJ3Mg
VGVtcGxhdGUgTW9kdWxlCisgICAgLy8gQ291cnRlc3kgb2YgdW5kZXJzY29yZWpzLm9yZworICAg
IHZhciBfID0gKGZ1bmN0aW9uIChfKSB7CisgICAgICAgIF8uZGVmYXVsdHMgPSBmdW5jdGlvbiAo
b2JqZWN0KSB7CisgICAgICAgICAgICBpZiAoIW9iamVjdCkgeworICAgICAgICAgICAgICAgIHJl
dHVybiBvYmplY3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHZhciBhcmdzSW5k
ZXggPSAxLCBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgYXJnc0luZGV4IDwgYXJnc0xl
bmd0aDsgYXJnc0luZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgaXRlcmFibGUgPSBhcmd1
bWVudHNbYXJnc0luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGl0ZXJhYmxlKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAob2JqZWN0W2tleV0gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9iamVjdFtrZXldID0gaXRlcmFibGVba2V5XTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGlt
aXRlcnMsIGNoYW5nZSB0aGUKKyAgICAgICAgLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdz
IHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLgorICAgICAgICBfLnRlbXBsYXRlU2V0dGlu
Z3MgPSB7CisgICAgICAgICAgICBldmFsdWF0ZSAgICA6IC88JShbXHNcU10rPyklPi9nLAorICAg
ICAgICAgICAgaW50ZXJwb2xhdGUgOiAvPCU9KFtcc1xTXSs/KSU+L2csCisgICAgICAgICAgICBl
c2NhcGUgICAgICA6IC88JS0oW1xzXFNdKz8pJT4vZworICAgICAgICB9OworCisgICAgICAgIC8v
IFdoZW4gY3VzdG9taXppbmcgYHRlbXBsYXRlU2V0dGluZ3NgLCBpZiB5b3UgZG9uJ3Qgd2FudCB0
byBkZWZpbmUgYW4KKyAgICAgICAgLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVhdGlvbiBvciBlc2Nh
cGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpcworICAgICAgICAvLyBndWFyYW50ZWVkIG5v
dCB0byBtYXRjaC4KKyAgICAgICAgdmFyIG5vTWF0Y2ggPSAvKC4pXi87CisKKyAgICAgICAgLy8g
Q2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJl
IHB1dCBpbnRvIGEKKyAgICAgICAgLy8gc3RyaW5nIGxpdGVyYWwuCisgICAgICAgIHZhciBlc2Nh
cGVzID0geworICAgICAgICAgICAgIiciOiAgICAgICInIiwKKyAgICAgICAgICAgICdcXCc6ICAg
ICAnXFwnLAorICAgICAgICAgICAgJ1xyJzogICAgICdyJywKKyAgICAgICAgICAgICdcbic6ICAg
ICAnbicsCisgICAgICAgICAgICAnXHQnOiAgICAgJ3QnLAorICAgICAgICAgICAgJ1x1MjAyOCc6
ICd1MjAyOCcsCisgICAgICAgICAgICAnXHUyMDI5JzogJ3UyMDI5JworICAgICAgICB9OworCisg
ICAgICAgIHZhciBlc2NhcGVyID0gL1xcfCd8XHJ8XG58XHR8XHUyMDI4fFx1MjAyOS9nOworCisg
ICAgICAgIC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxhciB0byBKb2huIFJl
c2lnJ3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIC8vIFVuZGVyc2NvcmUgdGVtcGxhdGluZyBo
YW5kbGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMgd2hpdGVzcGFjZSwKKyAgICAg
ICAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVkIGNv
ZGUuCisgICAgICAgIF8udGVtcGxhdGUgPSBmdW5jdGlvbih0ZXh0LCBkYXRhLCBzZXR0aW5ncykg
eworICAgICAgICAgICAgdmFyIHJlbmRlcjsKKyAgICAgICAgICAgIHNldHRpbmdzID0gXy5kZWZh
dWx0cyh7fSwgc2V0dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5ncyk7CisKKyAgICAgICAgICAgIC8v
IENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9uZSByZWd1bGFyIGV4cHJlc3Npb24gdmlhIGFsdGVy
bmF0aW9uLgorICAgICAgICAgICAgdmFyIG1hdGNoZXIgPSBuZXcgUmVnRXhwKFsKKyAgICAgICAg
ICAgICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJjZSwKKyAgICAgICAgICAg
ICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLAorICAgICAgICAg
ICAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2UKKyAgICAgICAgICAg
IF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTsKKworICAgICAgICAgICAgLy8gQ29tcGlsZSB0aGUg
dGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS4K
KyAgICAgICAgICAgIHZhciBpbmRleCA9IDA7CisgICAgICAgICAgICB2YXIgc291cmNlID0gIl9f
cCs9JyI7CisgICAgICAgICAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gs
IGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHsKKyAgICAgICAgICAgICAg
ICBzb3VyY2UgKz0gdGV4dC5zbGljZShpbmRleCwgb2Zmc2V0KQorICAgICAgICAgICAgICAgICAg
ICAucmVwbGFjZShlc2NhcGVyLCBmdW5jdGlvbihtYXRjaCkgeyByZXR1cm4gJ1xcJyArIGVzY2Fw
ZXNbbWF0Y2hdOyB9KTsKKworICAgICAgICAgICAgICAgIGlmIChlc2NhcGUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIgKyBlc2NhcGUgKyAiKSk9PW51bGw/
Jyc6Xy5lc2NhcGUoX190KSkrXG4nIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKGludGVycG9sYXRlKSB7CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSAiJytc
bigoX190PSgiICsgaW50ZXJwb2xhdGUgKyAiKSk9PW51bGw/Jyc6X190KStcbiciOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZXZhbHVhdGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgc291cmNlICs9ICInO1xuIiArIGV2YWx1YXRlICsgIlxuX19wKz0nIjsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5n
dGg7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICBzb3VyY2UgKz0gIic7XG4iOworCisgICAgICAgICAgICAvLyBJZiBhIHZhcmlhYmxl
IGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2FsIHNjb3BlLgorICAg
ICAgICAgICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291cmNlID0gJ3dpdGgob2JqfHx7fSl7
XG4nICsgc291cmNlICsgJ31cbic7CisKKyAgICAgICAgICAgIHNvdXJjZSA9ICJ2YXIgX190LF9f
cD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4sIiArCisgICAgICAgICAgICAgICAgInByaW50
PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307XG4iICsKKyAgICAgICAg
ICAgICAgICBzb3VyY2UgKyAicmV0dXJuIF9fcDtcbiI7CisKKyAgICAgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICAgICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdzLnZhcmlhYmxlIHx8
ICdvYmonLCAnXycsIHNvdXJjZSk7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
ICAgICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7CisgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRhdGEpIHJldHVybiByZW5kZXIoZGF0YSwg
Xyk7CisgICAgICAgICAgICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlvbihkYXRhKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlbmRlci5jYWxsKHRoaXMsIGRhdGEsIF8pOworICAgICAgICAgICAg
fTsKKworICAgICAgICAgICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgZnVuY3Rpb24gc291cmNl
IGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLgorICAgICAgICAgICAgdGVtcGxh
dGUuc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAoc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaicpICsg
Jyl7XG4nICsgc291cmNlICsgJ30nOworCisgICAgICAgICAgICByZXR1cm4gdGVtcGxhdGU7Cisg
ICAgICAgIH07CisKKyAgICAgICAgcmV0dXJuIF87CisgICAgfSkoe30pOworCisgICAgaWYgKGxv
Y2F0aW9uLmhvc3RuYW1lID09PSAndG9kb212Yy5jb20nKSB7CisgICAgICAgIHdpbmRvdy5fZ2Fx
ID0gW1snX3NldEFjY291bnQnLCdVQS0zMTA4MTA2Mi0xJ10sWydfdHJhY2tQYWdldmlldyddXTso
ZnVuY3Rpb24oZCx0KXt2YXIgZz1kLmNyZWF0ZUVsZW1lbnQodCkscz1kLmdldEVsZW1lbnRzQnlU
YWdOYW1lKHQpWzBdO2cuc3JjPScvL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9nYS5qcyc7cy5w
YXJlbnROb2RlLmluc2VydEJlZm9yZShnLHMpfShkb2N1bWVudCwnc2NyaXB0JykpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIHJlZGlyZWN0KCkgeworICAgICAgICBpZiAobG9jYXRpb24uaG9zdG5h
bWUgPT09ICd0YXN0ZWpzLmdpdGh1Yi5pbycpIHsKKyAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYg
PSBsb2NhdGlvbi5ocmVmLnJlcGxhY2UoJ3Rhc3RlanMuZ2l0aHViLmlvL3RvZG9tdmMnLCAndG9k
b212Yy5jb20nKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmRSb290KCkg
eworICAgICAgICB2YXIgYmFzZTsKKworICAgICAgICBbL2xhYnMvLCAvXHcqLWV4YW1wbGVzL10u
Zm9yRWFjaChmdW5jdGlvbiAoaHJlZikgeworICAgICAgICAgICAgdmFyIG1hdGNoID0gbG9jYXRp
b24uaHJlZi5tYXRjaChocmVmKTsKKworICAgICAgICAgICAgaWYgKCFiYXNlICYmIG1hdGNoKSB7
CisgICAgICAgICAgICAgICAgYmFzZSA9IGxvY2F0aW9uLmhyZWYuaW5kZXhPZihtYXRjaCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiBsb2NhdGlvbi5ocmVm
LnN1YnN0cigwLCBiYXNlKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBnZXRGaWxlKGZpbGUsIGNh
bGxiYWNrKSB7CisgICAgICAgIGlmICghbG9jYXRpb24uaG9zdCkgeworICAgICAgICAgICAgcmV0
dXJuIGNvbnNvbGUuaW5mbygnTWlzcyB0aGUgaW5mbyBiYXI/IFJ1biBUb2RvTVZDIGZyb20gYSBz
ZXJ2ZXIgdG8gYXZvaWQgYSBjcm9zcy1vcmlnaW4gZXJyb3IuJyk7CisgICAgICAgIH0KKworICAg
ICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisKKyAgICAgICAgeGhyLm9wZW4o
J0dFVCcsIGZpbmRSb290KCkgKyBmaWxlLCB0cnVlKTsKKyAgICAgICAgeGhyLnNlbmQoKTsKKwor
ICAgICAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKHhoci5z
dGF0dXMgPT09IDIwMCAmJiBjYWxsYmFjaykgeworICAgICAgICAgICAgICAgIGNhbGxiYWNrKHho
ci5yZXNwb25zZVRleHQpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAg
IGZ1bmN0aW9uIExlYXJuKGxlYXJuSlNPTiwgY29uZmlnKSB7CisgICAgICAgIGlmICghKHRoaXMg
aW5zdGFuY2VvZiBMZWFybikpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgTGVhcm4obGVhcm5K
U09OLCBjb25maWcpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHRlbXBsYXRlLCBmcmFtZXdv
cms7CisKKyAgICAgICAgaWYgKHR5cGVvZiBsZWFybkpTT04gIT09ICdvYmplY3QnKSB7CisgICAg
ICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGxlYXJuSlNPTiA9IEpTT04ucGFyc2UobGVh
cm5KU09OKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZmlnKSB7Cisg
ICAgICAgICAgICB0ZW1wbGF0ZSA9IGNvbmZpZy50ZW1wbGF0ZTsKKyAgICAgICAgICAgIGZyYW1l
d29yayA9IGNvbmZpZy5mcmFtZXdvcms7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXRlbXBs
YXRlICYmIGxlYXJuSlNPTi50ZW1wbGF0ZXMpIHsKKyAgICAgICAgICAgIHRlbXBsYXRlID0gbGVh
cm5KU09OLnRlbXBsYXRlcy50b2RvbXZjOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmcmFt
ZXdvcmsgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZnJhbWV3b3JrXScpKSB7Cisg
ICAgICAgICAgICBmcmFtZXdvcmsgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1mcmFt
ZXdvcmtdJykuZ2V0QXR0cmlidXRlKCdkYXRhLWZyYW1ld29yaycpOworICAgICAgICB9CisKKwor
ICAgICAgICBpZiAodGVtcGxhdGUgJiYgbGVhcm5KU09OW2ZyYW1ld29ya10pIHsKKyAgICAgICAg
ICAgIHRoaXMuZnJhbWV3b3JrSlNPTiA9IGxlYXJuSlNPTltmcmFtZXdvcmtdOworICAgICAgICAg
ICAgdGhpcy50ZW1wbGF0ZSA9IHRlbXBsYXRlOworCisgICAgICAgICAgICB0aGlzLmFwcGVuZCgp
OworICAgICAgICB9CisgICAgfQorCisgICAgTGVhcm4ucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgdmFyIGFzaWRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXNp
ZGUnKTsKKyAgICAgICAgYXNpZGUuaW5uZXJIVE1MID0gXy50ZW1wbGF0ZSh0aGlzLnRlbXBsYXRl
LCB0aGlzLmZyYW1ld29ya0pTT04pOworICAgICAgICBhc2lkZS5jbGFzc05hbWUgPSAnbGVhcm4n
OworCisgICAgICAgIC8vIExvY2FsaXplIGRlbW8gbGlua3MKKyAgICAgICAgdmFyIGRlbW9MaW5r
cyA9IGFzaWRlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5kZW1vLWxpbmsnKTsKKyAgICAgICAgQXJyYXku
cHJvdG90eXBlLmZvckVhY2guY2FsbChkZW1vTGlua3MsIGZ1bmN0aW9uIChkZW1vTGluaykgewor
ICAgICAgICAgICAgZGVtb0xpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgZmluZFJvb3QoKSArIGRl
bW9MaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZG9j
dW1lbnQuYm9keS5jbGFzc05hbWUgPSAoZG9jdW1lbnQuYm9keS5jbGFzc05hbWUgKyAnIGxlYXJu
LWJhcicpLnRyaW0oKTsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEhUTUwo
J2FmdGVyQmVnaW4nLCBhc2lkZS5vdXRlckhUTUwpOworICAgIH07CisKKyAgICByZWRpcmVjdCgp
OworICAgIGdldEZpbGUoJ2xlYXJuLmpzb24nLCBMZWFybik7Cit9KSgpOwpJbmRleDogUGVyZm9y
bWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodC90ZXN0Ly5qc2hpbnRyYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRl
c3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMv
ZmxpZ2h0L3Rlc3QvLmpzaGludHJjCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9E
b1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdo
dC90ZXN0Ly5qc2hpbnRyYwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACit7CisJIm5v
ZGUiOiB0cnVlLAorCSJicm93c2VyIjogdHJ1ZSwKKwkiZXNuZXh0IjogdHJ1ZSwKKwkiYml0d2lz
ZSI6IHRydWUsCisJImNhbWVsY2FzZSI6IHRydWUsCisJImN1cmx5IjogdHJ1ZSwKKwkiZXFlcWVx
IjogdHJ1ZSwKKwkiaW1tZWQiOiB0cnVlLAorCSJpbmRlbnQiOiA0LAorCSJsYXRlZGVmIjogdHJ1
ZSwKKwkibmV3Y2FwIjogdHJ1ZSwKKwkibm9hcmciOiB0cnVlLAorCSJxdW90bWFyayI6ICJzaW5n
bGUiLAorCSJyZWdleHAiOiB0cnVlLAorCSJ1bmRlZiI6IHRydWUsCisJInVudXNlZCI6IHRydWUs
CisJInN0cmljdCI6IHRydWUsCisJInRyYWlsaW5nIjogdHJ1ZSwKKwkic21hcnR0YWJzIjogdHJ1
ZSwKKwkid2hpdGUiOiB0cnVlLAorCSJqcXVlcnkiOiB0cnVlLAorCSJnbG9iYWxzIjogeworCQki
cmVxdWlyZWpzIjogZmFsc2UsCisJCSJkZXNjcmliZSI6IGZhbHNlLAorCQkiZGVzY3JpYmVDb21w
b25lbnQiOiBmYWxzZSwKKwkJInNldHVwQ29tcG9uZW50IjogZmFsc2UsCisJCSJpdCI6IGZhbHNl
LAorCQkiZXhwZWN0IjogZmFsc2UsCisJCSJiZWZvcmVFYWNoIjogZmFsc2UsCisJCSJhZnRlckVh
Y2giOiBmYWxzZSwKKwkJInNweU9uRXZlbnQiOiBmYWxzZSwKKwkJIm1vY2tzIjogZmFsc2UsCisJ
CSJyZWFkRml4dHVyZXMiOiBmYWxzZSwKKwkJInNweU9uIjogZmFsc2UKKwl9Cit9CisKSW5kZXg6
IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC90ZXN0LW1haW4uanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVy
Zm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3Rlc3QtbWFpbi5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZv
cm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvdGVzdC90ZXN0LW1haW4uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyOCBAQAorLypqc2hpbnQgY2FtZWxjYXNlOmZhbHNlKi8KKy8qZ2xvYmFsIGphc21pbmUqLwor
J3VzZSBzdHJpY3QnOworCit2YXIgdGVzdHMgPSBPYmplY3Qua2V5cyh3aW5kb3cuX19rYXJtYV9f
LmZpbGVzKS5maWx0ZXIoZnVuY3Rpb24gKGZpbGUpIHsKKyAgICByZXR1cm4gKC9fc3BlY1wuanMk
Ly50ZXN0KGZpbGUpKTsKK30pOworCit3aW5kb3cubW9ja3MgPSB7fTsKKworcmVxdWlyZWpzLmNv
bmZpZyh7CisgICAgLy8gS2FybWEgc2VydmVzIGZpbGVzIGZyb20gJy9iYXNlJworICAgIGJhc2VV
cmw6ICcvYmFzZScsCisKKyAgICBwYXRoczogeworICAgICAgICBmbGlnaHQ6ICdib3dlcl9jb21w
b25lbnRzL2ZsaWdodCcsCisgICAgICAgIGRlcG90OiAnYm93ZXJfY29tcG9uZW50cy9kZXBvdC9k
ZXBvdCcsCisgICAgICAgIHRleHQ6ICdib3dlcl9jb21wb25lbnRzL3JlcXVpcmVqcy10ZXh0L3Rl
eHQnCisgICAgfSwKKworICAgIC8vIGFzayBSZXF1aXJlLmpzIHRvIGxvYWQgdGhlc2UgZmlsZXMg
KGFsbCBvdXIgdGVzdHMpCisgICAgZGVwczogdGVzdHMsCisKKyAgICAvLyBzdGFydCB0ZXN0IHJ1
biwgb25jZSBSZXF1aXJlLmpzIGlzIGRvbmUKKyAgICBjYWxsYmFjazogd2luZG93Ll9fa2FybWFf
Xy5zdGFydAorfSk7CisKK2phc21pbmUuZ2V0Rml4dHVyZXMoKS5maXh0dXJlc1BhdGggPSAnL2Jh
c2UvdGVzdC9maXh0dXJlJzsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gv
cmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9maXh0dXJl
L2Zvb3Rlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVu
Y2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9maXh0
dXJlL2Zvb3Rlci5odG1sCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2
ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0
L2ZpeHR1cmUvZm9vdGVyLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSBAQAorPGZvb3Rl
ciBpZD0iZm9vdGVyIj48L2Zvb3Rlcj4KSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVu
QmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9m
aXh0dXJlL25ld190b2RvLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lv
dUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90
ZXN0L2ZpeHR1cmUvbmV3X3RvZG8uaHRtbAkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVz
dHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9m
bGlnaHQvdGVzdC9maXh0dXJlL25ld190b2RvLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSBAQAorPGlucHV0IGlkPSJuZXctdG9kbyIgcGxhY2Vob2xkZXI9IldoYXQgbmVlZHMgdG8gYmUg
ZG9uZT8iIGF1dG9mb2N1cz4KSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gv
cmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9maXh0dXJl
L3RvZ2dsZV9hbGwuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZl
bkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3Rlc3Qv
Zml4dHVyZS90b2dnbGVfYWxsLmh0bWwJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxp
Z2h0L3Rlc3QvZml4dHVyZS90b2dnbGVfYWxsLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSBAQAorPGlucHV0IGlkPSJ0b2dnbGUtYWxsIiB0eXBlPSJjaGVja2JveCI+CkluZGV4OiBQZXJm
b3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L3Rlc3QvbW9jay9kYXRhc3RvcmUuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVy
Zm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC90ZXN0L21vY2svZGF0YXN0b3JlLmpzCShyZXZpc2lvbiAwKQorKysg
UGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L21vY2svZGF0YXN0b3JlLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjUgQEAKKyhmdW5jdGlvbiAoKSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisg
ICAgZnVuY3Rpb24gRmFrZURhdGFTdG9yZShkYXRhKSB7CisgICAgICAgIHRoaXMuZGF0YSA9IGRh
dGEgfHwgWworICAgICAgICAgICAge3RpdGxlOiAnYnV5IHNvbWUgdW5pY29ybnMnLCBjb21wbGV0
ZWQ6IGZhbHNlLCBpZDogJzEwOGU4YzUxLWJiM2YtNjA4ZC0xNWUyLTYxMWNmYzdlNTgzOCd9LAor
ICAgICAgICAgICAge3RpdGxlOiAnZ2V0IGEgYmFndWV0dGUgbXVzdGFjaGUnLCBjb21wbGV0ZWQ6
IGZhbHNlLCBpZDogJzZjZGQwYTFmLWI2ZjgtMjFlMS1mMzViLWFhMThhZjk5YWQ5MSd9LAorICAg
ICAgICAgICAge3RpdGxlOiAnc2hhdmUgeWFrcycsIGNvbXBsZXRlZDogdHJ1ZSwgaWQ6ICdhYmU2
NzhkZC0zMDg3LTE5OGMtZWVmYS0xODAyNDhjYjNkOGInfQorICAgICAgICBdOworICAgIH0KKwor
ICAgIEZha2VEYXRhU3RvcmUucHJvdG90eXBlLmFsbCA9IGZ1bmN0aW9uIGFsbCgpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuZGF0YTsKKyAgICB9OworCisgICAgRmFrZURhdGFTdG9yZS5wcm90b3R5
cGUuc2F2ZSA9IGZ1bmN0aW9uIHNhdmUoZGF0YSkgeworICAgICAgICB0aGlzLmRhdGEucHVzaChk
YXRhKTsKKyAgICB9OworCisgICAgRmFrZURhdGFTdG9yZS5wcm90b3R5cGUuZGVzdHJveUFsbCA9
IGZ1bmN0aW9uIGRlc3Ryb3lBbGwoKSB7CisgICAgICAgIC8vIFN0dWIKKyAgICB9OworCisgICAg
d2luZG93Lm1vY2tzLkRhdGFTdG9yZSA9IEZha2VEYXRhU3RvcmU7Cit9KCkpOwpJbmRleDogUGVy
Zm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3NwZWMvZGF0YS9zdGF0c19zcGVjLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9zcGVjL2RhdGEvc3RhdHNfc3BlYy5qcwkocmV2
aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3Rv
ZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9zcGVjL2RhdGEvc3RhdHNfc3Bl
Yy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACitkZXNjcmliZUNvbXBvbmVudCgn
YXBwL2pzL2RhdGEvc3RhdHMnLCBmdW5jdGlvbiAoKSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisg
ICAgZGVzY3JpYmUoJ3JlY291bnQgd2l0aG91dCBkYXRhc3RvcmUnLCBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgc2V0dXBDb21wb25l
bnQoeworICAgICAgICAgICAgICAgIGRhdGFTdG9yZTogbmV3IG1vY2tzLkRhdGFTdG9yZShbXSkK
KyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKworICAgICAgICBhZnRlckVhY2goZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmNsZWFyKCk7CisgICAgICAgIH0pOwor
CisgICAgICAgIGl0KCdzaG91bGQgdHJpZ2dlciBhIGRhdGFTdGF0c0NvdW50ZWQgZXZlbnQnLCBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICBzcHlPbkV2ZW50KGRvY3VtZW50LCAnZGF0YVN0YXRz
Q291bnRlZCcpOworICAgICAgICAgICAgdGhpcy5jb21wb25lbnQucmVjb3VudCgpOworICAgICAg
ICAgICAgZXhwZWN0KCdkYXRhU3RhdHNDb3VudGVkJykudG9IYXZlQmVlblRyaWdnZXJlZE9uKGRv
Y3VtZW50KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCB0cmlnZ2VyIGRhdGFT
dGF0c0NvdW50ZWQgd2hlbiB0b2RvcyBhcmUgbG9hZGVkJywgZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgc3B5T25FdmVudChkb2N1bWVudCwgJ2RhdGFTdGF0c0NvdW50ZWQnKTsKKyAgICAgICAg
ICAgICQoZG9jdW1lbnQpLnRyaWdnZXIoJ2RhdGFUb2Rvc0xvYWRlZCcpOworICAgICAgICAgICAg
ZXhwZWN0KCdkYXRhU3RhdHNDb3VudGVkJykudG9IYXZlQmVlblRyaWdnZXJlZE9uKGRvY3VtZW50
KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCBwcm92aWRlIGVtcHR5IHN0YXRz
JywgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgc3B5T25FdmVudChkb2N1bWVudCwgJ2RhdGFT
dGF0c0NvdW50ZWQnKTsKKyAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LnJlY291bnQoKTsKKyAg
ICAgICAgICAgIGV4cGVjdCgnZGF0YVN0YXRzQ291bnRlZCcpLnRvSGF2ZUJlZW5UcmlnZ2VyZWRP
bkFuZFdpdGgoZG9jdW1lbnQsIHsKKyAgICAgICAgICAgICAgICBhbGw6IDAsCisgICAgICAgICAg
ICAgICAgcmVtYWluaW5nOiAwLAorICAgICAgICAgICAgICAgIGNvbXBsZXRlZDogMCwKKyAgICAg
ICAgICAgICAgICBmaWx0ZXI6ICcnCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAg
fSk7CisKKyAgICBkZXNjcmliZSgncmVjb3VudCB3aXRoIGRhdGFzdG9yZScsIGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBzZXR1cENv
bXBvbmVudCh7CisgICAgICAgICAgICAgICAgZGF0YVN0b3JlOiBuZXcgbW9ja3MuRGF0YVN0b3Jl
KCkKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIHBy
b3ZpZGUgZnVsbCBzdGF0cycsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHNweU9uRXZlbnQo
ZG9jdW1lbnQsICdkYXRhU3RhdHNDb3VudGVkJyk7CisgICAgICAgICAgICB0aGlzLmNvbXBvbmVu
dC5yZWNvdW50KCk7CisgICAgICAgICAgICBleHBlY3QoJ2RhdGFTdGF0c0NvdW50ZWQnKS50b0hh
dmVCZWVuVHJpZ2dlcmVkT25BbmRXaXRoKGRvY3VtZW50LCB7CisgICAgICAgICAgICAgICAgYWxs
OiAzLAorICAgICAgICAgICAgICAgIHJlbWFpbmluZzogMiwKKyAgICAgICAgICAgICAgICBjb21w
bGV0ZWQ6IDEsCisgICAgICAgICAgICAgICAgZmlsdGVyOiAnJworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0pOworICAgIH0pOworfSk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZl
bkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3Rlc3Qv
c3BlYy9kYXRhL3RvZG9zX3NwZWMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9E
b1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdo
dC90ZXN0L3NwZWMvZGF0YS90b2Rvc19zcGVjLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFu
Y2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1w
bGVzL2ZsaWdodC90ZXN0L3NwZWMvZGF0YS90b2Rvc19zcGVjLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDEgQEAKK2Rlc2NyaWJlQ29tcG9uZW50KCdhcHAvanMvZGF0YS90b2RvcycsIGZ1
bmN0aW9uICgpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICBkZXNjcmliZSgnd2l0aG91dCBk
YXRhc3RvcmUnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgdGhpcy5kYXRhU3RvcmUgPSBuZXcgbW9ja3MuRGF0YVN0b3JlKFtdKTsK
KyAgICAgICAgICAgIHNldHVwQ29tcG9uZW50KHsKKyAgICAgICAgICAgICAgICBkYXRhU3RvcmU6
IHRoaXMuZGF0YVN0b3JlCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg
aXQoJ3Nob3VsZCBhZGQgYSBuZXcgZW50cnknLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2
YXIgdGl0bGUgPSAnYnV5IHNvbWUgdW5pY29ybnMnOworCisgICAgICAgICAgICBzcHlPbkV2ZW50
KGRvY3VtZW50LCAnZGF0YVRvZG9BZGRlZCcpOworICAgICAgICAgICAgdGhpcy5jb21wb25lbnQu
dHJpZ2dlcigndWlBZGRSZXF1ZXN0ZWQnLCB7CisgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxl
CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgZXhwZWN0KCdkYXRhVG9kb0FkZGVkJyku
dG9IYXZlQmVlblRyaWdnZXJlZE9uKGRvY3VtZW50KTsKKyAgICAgICAgICAgIGV4cGVjdCh0aGlz
LmRhdGFTdG9yZS5kYXRhLmxlbmd0aCkudG9CZSgxKTsKKyAgICAgICAgICAgIGV4cGVjdCh0aGlz
LmRhdGFTdG9yZS5hbGwoKVswXS50aXRsZSkudG9CZSh0aXRsZSk7CisgICAgICAgIH0pOworICAg
IH0pOworCisgICAgZGVzY3JpYmUoJ3dpdGggZGF0YXN0b3JlJywgZnVuY3Rpb24gKCkgeworICAg
ICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMuZGF0YVN0b3Jl
ID0gbmV3IG1vY2tzLkRhdGFTdG9yZSgpOworICAgICAgICAgICAgc2V0dXBDb21wb25lbnQoewor
ICAgICAgICAgICAgICAgIGRhdGFTdG9yZTogdGhpcy5kYXRhU3RvcmUKKyAgICAgICAgICAgIH0p
OworICAgICAgICB9KTsKKworICAgICAgICBpdCgncmVtb3ZlcyBjb21wbGV0ZWQnLCBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICBzcHlPbih0aGlzLmRhdGFTdG9yZSwgJ2Rlc3Ryb3lBbGwnKTsK
KyAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LnRyaWdnZXIoJ3VpQ2xlYXJSZXF1ZXN0ZWQnKTsK
KyAgICAgICAgICAgIGV4cGVjdCh0aGlzLmRhdGFTdG9yZS5kZXN0cm95QWxsKS50b0hhdmVCZWVu
Q2FsbGVkV2l0aCh7IGNvbXBsZXRlZDogdHJ1ZSB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9
KTsKKwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9k
b212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3NwZWMvdWkvbmV3X2l0ZW1fc3Bl
Yy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291
cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3Rlc3Qvc3BlYy91aS9uZXdf
aXRlbV9zcGVjLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5C
ZW5jaC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3Nw
ZWMvdWkvbmV3X2l0ZW1fc3BlYy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACitk
ZXNjcmliZUNvbXBvbmVudCgnYXBwL2pzL3VpL25ld19pdGVtJywgZnVuY3Rpb24gKCkgeworICAg
ICd1c2Ugc3RyaWN0JzsKKworICAgIHZhciBFTlRFUl9LRVkgPSAxMzsKKworICAgIGJlZm9yZUVh
Y2goZnVuY3Rpb24gKCkgeworICAgICAgICBzZXR1cENvbXBvbmVudChyZWFkRml4dHVyZXMoJ25l
d190b2RvLmh0bWwnKSk7CisgICAgfSk7CisKKyAgICBpdCgndHJpZ2dlcnMgdWlBZGRSZXF1ZXN0
ZWQgb24gZW50ZXInLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBldmVudCA9ICQuRXZlbnQo
J2tleWRvd24nKTsKKyAgICAgICAgZXZlbnQud2hpY2ggPSBFTlRFUl9LRVk7CisKKyAgICAgICAg
c3B5T25FdmVudChkb2N1bWVudCwgJ3VpQWRkUmVxdWVzdGVkJyk7CisgICAgICAgIHRoaXMuY29t
cG9uZW50LiRub2RlLnZhbCgnc2hhdmUgbW9hciB5YWtzJyk7CisKKyAgICAgICAgdGhpcy5jb21w
b25lbnQudHJpZ2dlcihldmVudCk7CisKKyAgICAgICAgZXhwZWN0KCd1aUFkZFJlcXVlc3RlZCcp
LnRvSGF2ZUJlZW5UcmlnZ2VyZWRPbkFuZFdpdGgoZG9jdW1lbnQsIHsKKyAgICAgICAgICAgIHRp
dGxlOiAnc2hhdmUgbW9hciB5YWtzJworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIGl0KCd0
cmltcyB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBldmVudCA9ICQuRXZlbnQo
J2tleWRvd24nKTsKKyAgICAgICAgZXZlbnQud2hpY2ggPSBFTlRFUl9LRVk7CisKKyAgICAgICAg
c3B5T25FdmVudChkb2N1bWVudCwgJ3VpQWRkUmVxdWVzdGVkJyk7CisgICAgICAgIHRoaXMuY29t
cG9uZW50LiRub2RlLnZhbCgnICB0cmltIGlucHV0cyAnKTsKKworICAgICAgICB0aGlzLmNvbXBv
bmVudC50cmlnZ2VyKGV2ZW50KTsKKworICAgICAgICBleHBlY3QoJ3VpQWRkUmVxdWVzdGVkJyku
dG9IYXZlQmVlblRyaWdnZXJlZE9uQW5kV2l0aChkb2N1bWVudCwgeworICAgICAgICAgICAgdGl0
bGU6ICd0cmltIGlucHV0cycKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBpdCgnaWdub3Jl
IGVtcHR5IHZhbHVlcycsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGV2ZW50ID0gJC5FdmVu
dCgna2V5ZG93bicpOworICAgICAgICBldmVudC53aGljaCA9IEVOVEVSX0tFWTsKKworICAgICAg
ICBzcHlPbkV2ZW50KGRvY3VtZW50LCAndWlBZGRSZXF1ZXN0ZWQnKTsKKworICAgICAgICB0aGlz
LmNvbXBvbmVudC50cmlnZ2VyKGV2ZW50KTsKKworICAgICAgICBleHBlY3QoJ3VpQWRkUmVxdWVz
dGVkJykubm90LnRvSGF2ZUJlZW5UcmlnZ2VyZWRPbihkb2N1bWVudCk7CisgICAgfSk7Cit9KTsK
KwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3NwZWMvdWkvc3RhdHNfc3BlYy5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90
b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3Rlc3Qvc3BlYy91aS9zdGF0c19zcGVj
LmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3NwZWMvdWkvc3Rh
dHNfc3BlYy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACitkZXNjcmliZUNvbXBv
bmVudCgnYXBwL2pzL3VpL3N0YXRzJywgZnVuY3Rpb24gKCkgeworICAgICd1c2Ugc3RyaWN0JzsK
KworICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkgeworICAgICAgICBzZXR1cENvbXBvbmVudChy
ZWFkRml4dHVyZXMoJ2Zvb3Rlci5odG1sJykpOworICAgIH0pOworCisgICAgaXQoJ3JlbmRlcnMg
d2hlbiBzdGF0cyBjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBkYXRhID0gewor
ICAgICAgICAgICAgYWxsOiAzLAorICAgICAgICAgICAgcmVtYWluaW5nOiAyLAorICAgICAgICAg
ICAgY29tcGxldGVkOiAxLAorICAgICAgICAgICAgZmlsdGVyOiAnJworICAgICAgICB9OworICAg
ICAgICBleHBlY3QodGhpcy5jb21wb25lbnQuJG5vZGUpLnRvQmVFbXB0eSgpOworICAgICAgICAk
KGRvY3VtZW50KS50cmlnZ2VyKCdkYXRhU3RhdHNDb3VudGVkJywgZGF0YSk7CisgICAgICAgIGV4
cGVjdCh0aGlzLmNvbXBvbmVudC4kbm9kZSkubm90LnRvQmVFbXB0eSgpOworICAgICAgICBleHBl
Y3QodGhpcy5jb21wb25lbnQuJG5vZGUpLnRvQmVWaXNpYmxlKCk7CisgICAgfSk7CisKKyAgICBp
dCgnaXMgaGlkZGVuIHdoZW4gZGF0YSBpcyBlbXB0eScsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
dmFyIGRhdGEgPSB7CisgICAgICAgICAgICBhbGw6IDAsCisgICAgICAgICAgICByZW1haW5pbmc6
IDAsCisgICAgICAgICAgICBjb21wbGV0ZWQ6IDAsCisgICAgICAgICAgICBmaWx0ZXI6ICcnCisg
ICAgICAgIH07CisgICAgICAgICQoZG9jdW1lbnQpLnRyaWdnZXIoJ2RhdGFTdGF0c0NvdW50ZWQn
LCBkYXRhKTsKKyAgICAgICAgZXhwZWN0KHRoaXMuY29tcG9uZW50LiRub2RlKS50b0JlSGlkZGVu
KCk7CisgICAgfSk7CisKKyAgICBpdCgnaGlkZXMgY2xlYXItY29tcGxldGVkIHdpdGggbm8gY29t
cGxldGVkIGl0ZW1zJywgZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgZGF0YSA9IHsKKyAgICAg
ICAgICAgIGFsbDogMiwKKyAgICAgICAgICAgIHJlbWFpbmluZzogMiwKKyAgICAgICAgICAgIGNv
bXBsZXRlZDogMCwKKyAgICAgICAgICAgIGZpbHRlcjogJycKKyAgICAgICAgfTsKKyAgICAgICAg
dGhpcy5jb21wb25lbnQucmVuZGVyKG51bGwsIGRhdGEpOworICAgICAgICBleHBlY3QodGhpcy5j
b21wb25lbnQuc2VsZWN0KCdjbGVhckNvbXBsZXRlZFNlbGVjdG9yJykubGVuZ3RoKS50b0JlKDAp
OworICAgIH0pOworCisgICAgaXQoJ3Nob3dzIGNsZWFyLWNvbXBsZXRlZCB3aXRoIGNvbXBsZXRl
ZCBpdGVtcycsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGRhdGEgPSB7CisgICAgICAgICAg
ICBhbGw6IDIsCisgICAgICAgICAgICByZW1haW5pbmc6IDEsCisgICAgICAgICAgICBjb21wbGV0
ZWQ6IDEsCisgICAgICAgICAgICBmaWx0ZXI6ICcnCisgICAgICAgIH07CisgICAgICAgIHRoaXMu
Y29tcG9uZW50LnJlbmRlcihudWxsLCBkYXRhKTsKKyAgICAgICAgZXhwZWN0KHRoaXMuY29tcG9u
ZW50LnNlbGVjdCgnY2xlYXJDb21wbGV0ZWRTZWxlY3RvcicpLmxlbmd0aCkudG9CZSgxKTsKKyAg
ICB9KTsKKworICAgIGl0KCd0cmlnZ2VycyB1aUNsZWFyUmVxdWVzdGVkIG9uIGNsaWNrJywgZnVu
Y3Rpb24gKCkgeworICAgICAgICB2YXIgZGF0YSA9IHsKKyAgICAgICAgICAgIGFsbDogMiwKKyAg
ICAgICAgICAgIHJlbWFpbmluZzogMSwKKyAgICAgICAgICAgIGNvbXBsZXRlZDogMSwKKyAgICAg
ICAgICAgIGZpbHRlcjogJycKKyAgICAgICAgfTsKKyAgICAgICAgc3B5T25FdmVudChkb2N1bWVu
dCwgJ3VpQ2xlYXJSZXF1ZXN0ZWQnKTsKKyAgICAgICAgdGhpcy5jb21wb25lbnQucmVuZGVyKG51
bGwsIGRhdGEpOworICAgICAgICB0aGlzLmNvbXBvbmVudC50cmlnZ2VyKHRoaXMuY29tcG9uZW50
LmF0dHIuY2xlYXJDb21wbGV0ZWRTZWxlY3RvciwgJ2NsaWNrJyk7CisgICAgICAgIGV4cGVjdCgn
dWlDbGVhclJlcXVlc3RlZCcpLnRvSGF2ZUJlZW5UcmlnZ2VyZWRPbih0aGlzLmNvbXBvbmVudCk7
CisgICAgfSk7Cit9KTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVz
b3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9zcGVjL3VpL3Rv
Z2dsZV9hbGxfc3BlYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZl
bkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3Rlc3Qv
c3BlYy91aS90b2dnbGVfYWxsX3NwZWMuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRl
c3RzL0RvWW91RXZlbkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMv
ZmxpZ2h0L3Rlc3Qvc3BlYy91aS90b2dnbGVfYWxsX3NwZWMuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzMCBAQAorZGVzY3JpYmVDb21wb25lbnQoJ2FwcC9qcy91aS90b2dnbGVfYWxsJywg
ZnVuY3Rpb24gKCkgeworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIGJlZm9yZUVhY2goZnVuY3Rp
b24gKCkgeworICAgICAgICBzZXR1cENvbXBvbmVudChyZWFkRml4dHVyZXMoJ3RvZ2dsZV9hbGwu
aHRtbCcpKTsKKyAgICB9KTsKKworICAgIGl0KCdjaGVjayB0aGUgY2hlY2tib3ggdy9vIHJlbWFp
bmluZycsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGRhdGEgPSB7CisgICAgICAgICAgICBh
bGw6IDIsCisgICAgICAgICAgICByZW1haW5pbmc6IDAsCisgICAgICAgICAgICBjb21wbGV0ZWQ6
IDIsCisgICAgICAgICAgICBmaWx0ZXI6ICcnCisgICAgICAgIH07CisgICAgICAgICQoZG9jdW1l
bnQpLnRyaWdnZXIoJ2RhdGFTdGF0c0NvdW50ZWQnLCBkYXRhKTsKKyAgICAgICAgZXhwZWN0KHRo
aXMuY29tcG9uZW50LiRub2RlKS50b0JlQ2hlY2tlZCgpOworICAgIH0pOworCisgICAgaXQoJ3Vu
Y2hlY2sgdGhlIGNoZWNrYm94IHcvIHJlbWFpbmluZycsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
dmFyIGRhdGEgPSB7CisgICAgICAgICAgICBhbGw6IDIsCisgICAgICAgICAgICByZW1haW5pbmc6
IDEsCisgICAgICAgICAgICBjb21wbGV0ZWQ6IDEsCisgICAgICAgICAgICBmaWx0ZXI6ICcnCisg
ICAgICAgIH07CisgICAgICAgICQoZG9jdW1lbnQpLnRyaWdnZXIoJ2RhdGFTdGF0c0NvdW50ZWQn
LCBkYXRhKTsKKyAgICAgICAgZXhwZWN0KHRoaXMuY29tcG9uZW50LiRub2RlKS5ub3QudG9CZUNo
ZWNrZWQoKTsKKyAgICB9KTsKK30pOworCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZl
bkJlbmNoL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2Vy
X2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmcucG5nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3Bs
YXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBpbWFnZS9w
bmcKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNv
bW1vbi9iZy5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5j
aC9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21w
b25lbnRzL3RvZG9tdmMtY29tbW9uL2JnLnBuZwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNl
VGVzdHMvRG9Zb3VFdmVuQmVuY2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxl
cy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iZy5wbmcJKHdvcmtpbmcg
Y29weSkKClByb3BlcnR5IGNoYW5nZXMgb246IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVu
Y2gvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29t
cG9uZW50cy90b2RvbXZjLWNvbW1vbi9iZy5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUt
dHlwZQojIyAtMCwwICsxICMjCitpbWFnZS9wbmcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9w
ZXJ0eQoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUdRQUFBQmtBZ01BQUFBTmpIM0hBQUFBREZC
TVZFWHU3dTdyNit2bTV1YmYzOSt0M3paegpBQUFIL1VsRVFWUjRYbldXMFdyaWloYUdsMEhGU0tj
a1FTVUpyWmhnSkFuV1oyaThtajFVcWJuYVU2b1k3NlpVbjBFRFo1Z09VekZoCnpqQVdsU1RNR2Rx
aWVZWTZ0S1gxU3NWSzlhb1ZsY2FuT0o2NzJYdjNQTUhQNHYvV3R4YjBwcGZkOFdMeGRQT3YyNnY1
ckR1WlB6dk8KaS9OcldnZGE4SEEra2ZjaWJzNkZvU0VSUi9BWWhubDVHdDd1Wk8yOWpiM211N2Zo
eStOT1l5T3gxMm1USjgzNkliQ1lxMUNURENYUApZSGtKWThxVnZKSTNkS3VNd08xb2VEMi9udXFy
L3MzRDRGNTdudDJYVjR2Vjg1TUZubGdBQ0lGblVTOUh1OGlBbXhVRUY4U0VhQkQrClBOcUpiemJi
NU1XWDFzVlpyblhjYVZLNVJHS3pFd2Fyb3VWTnhjd3JTUmxuSlZtUjhWbytZMm82QVhQbnZqeTcv
bTQrZkYybi9MenUKamN5SGRmTGo0eEFBNXowK21tWXBvR2pCUjNJY1I5RUIzaHVLd1lidFMrOGtT
bS9qRjVzYnhWUTh2WmU2U0hRMnN0a3QwQ1VzbzlRdwpDVkZ3cHFJd2VVTTFvS0JiRVFTVzA3dEJm
enh5RnViMWJESDhkVDI1bVk3clo5OVhINEgzYzJJSURib0lUcVI1MFJNVEk0RVk1eFVpCk1lZ2Ni
WitSelVUSlRxUjNOc1BGUC9ZMjl3NGF1UzlmTGtEWGpFaEdTeWJMdXVyS1Ezay9yOGhNemJXcjVt
RTV1aG82TDdPVDI4VzAKK3ppNnRoeW5lN1YwNWc5TEVHSXhudmZFb25USWpSTXNRbU0wSHZNVGpP
aUhONm5Mc0ZBc1ZVdG9zZFFXanBxdFpySDAvaktjYlVCTgoxUXZKbXE3SkdzT3FtU1NMU0xxa0VV
WUZnYnVIeit0K1ZzL3oxWEk2bUEyMTN2RG5ZTHhjT1hPSXN0RUk3UlZSa2NLaUFrRkNEQ1dEClVk
SkRDZEQ2OFA0OGZsYnRwT3VIeFd5cGthUGVOY0xON0dhcUE3SnNhZVdNYk1MK3VxV01YTXV2Y3lO
SnhKV0IzdDN6OHV5emN6bGQKVHA5dTY3ZXpxOVg0cXJ0NnV2NEdSQ3lLK0xHSU4wQzRvMjZhRURG
UEVFZHhoa1ZocjlFK3Z1eHNOZG9uQjgzV2R2dHo2L3l5dlpOSQoyU1hBd0NvYnJNU3EwdTV1MmFV
UkNtTVVqRWhTMHVEVldSYmZIbGRBb3k2ZVJyd0NncEdZS0JLeFdJU000SUNMSEJ4dnhEZDM3UEJw
CkZzM3RKTUp4TzVWSThJZDJzVm9FcXlCTGpNSHFtWUtSckZWMnkwWVpWS3RRUXpDNFdZM05pWGt5
WEs1bTgxbi9lVG42ZWpXL3ViaDUKdVFNcTVGN1RqQVRRS0NlSW9rQjVRalFkQytGOEZQN0Nzbi83
NEdJbnZKSElkdjZ3UVpKVmsxSDJOVmFXcFlJbVdZYWk3ak00VWFqQgphcUpON2hjLzZyV3ZvOTVn
M0Y4K2psNU81ak5uTUFmR3hYbG9IMC96S0k1SGlRaU4wREVCamFDSUQ4TGg4T2FyYk1QclMycG9G
aXhmCnpwMlQrK0ZxMm5PZUI0L0Q4WFM1bUJoTGN6RUYxT2NXZkxTWHBzVVlIcUFZUVJRRUd2RlFn
U2pZaC9aMisxUDhvSEZ1SHpWUHlWUkwKUEV6UVo1UmRoZGVRVmxWRGowQi9OUjdYRjg1NDVTeHZK
dFp0ci84d2NSN05icmNQQk9yRlBiUVk4QVRaZ0lBS0hwR0wwVXlJd3R6UQoyanArMDBsazl6N0Vt
NGVOZXZoOXJsTk5WeE9uOWlIVURMYWNCeVZacnVXeFNzRkVURVhSWmExZzZkQjl2QjJ2ZXYzeHcz
VHluNSs5CndhM1Z1eDkySC9UNURmalJ3TnBxcENmcTVsQmE4R09veTB0aGhBc1B3TGJkT0V1UjJX
S0RURzBXdDRXVEQ4Snh1OXJlT0RxRGdweVIKa0YwWHd4cUtnVnM0Z1VnUmExL0IxUXc4akFiZnZ2
M29mMXdPbDFQMWR6bEExT05sb21nbzlvODlndGJCTy9Ma3FOUzUrTlR5Yi9wUApTNmVYMmJlSHAr
bHFGUmpDVUJCTkwrL1h5bXZlRE1XMExBV1hkRUtIdjdqVG1kL1VLMDV2UFB6ZSt3bGtLQ2l1NTJG
NXR4aGxlUy9oCkNaSWhZR2lNaFdLNmRiQ1ZUbVRqOFZRajIvbFF2NmllbDFvN3g2Y3RVTUNxV1Js
RnJSQXl6ckpxaEYySDVyR0Nwa0M5Tyt4OVhBeHYKbG92bnhjbkwvSDR4dWJrYmQ3dkxNUWhNTU9Z
UHhTZ1JFeW1jUXJrb2hRVUNmanlFUWRXMjM2QXR1NW43bjNDcUhidloyVHJPcGR2WgpGQmhKUWl2
VUtsQ1J6WEo1MzJWSmhHYldhb3FKd1dLOHZMK2ZqUVozdjRiei91TGFNYnVQanJXWTNIOEhuZ3VG
V0Q1Q28wVElBeHdsCnVuMXVDZ0dhNWFIK3RsbnFmTW50dlR0czJvM09SbU9yMkh6RGIxUHBENURV
a3htMW5FbnVBNkhLaU11SzdGb1ZYVkZOR1I1ZnRJVTUKdE00dDFYQW15OHJ0eGJmUkQrdDIrTENB
ZFVpUTVXTC8xQ2trTGt2Tm8zYk8zcWluano0M3E2WDRIK0hEMHovYjZUMWc5UnFHRkhSSgpMbVJN
aTdBczJjaVlHVVJUTVBnMUg1Ny8rSHA5ZHpVWkxJZG5IMWZxOVh3eWV2bDJOUVljeFdOdWY0QUpy
Z1ZIa2dUUWxKL2tmYlRBCndOL1BhUFpMcXAzYUxva25VSzVZT3BaM21XeG1WNGxvK3pXTldFdFZU
YW9zREMrY1pXL2d6QzU3M2FmQnhkTklmWmpPcjY3dlJ6L2cKYi9JVU9aR0pzRUxVUTBHOEtqUk9p
cm50VC9GY1krczBqZHFsamZoUnZIM2NoSWh1eU15K2E3ZG01QzBUcXhrVldkTnhROVVOR0Q4UAov
OTEvbWl3R1k3MTdOWGk1dVp0T1o1T3J5ZFFCbGtjRlArbHhzeVFQckc4TkhVOXhpRjhrL0dESGJT
SGNlU1VOTW1YSmtQQUNXNUZaCnVhQVhDbXBaTGtobVhzSmg5UFgvRUFlaUdNRW9VUWdLUWlqRWk3
UkE0MTVQVlBRRUNPaDhKZysvMi9aWndqNXZuUDhPQmVBNnByRUYKaTAweUNLRkl1OGl1WEpQTFpU
T1RoTE9ybXgrajgxOVB5N3V2ZnoxRkVCTVJ6a3R6THAvWFRaQWhuNXVoL0pTSEZZSUVWTW5qNm1G
dQpMNzdYQ2lmK1BNMW1VOVNIbzVTdlZFeUFTY2lHZ2pPZ2w1T3lvaWk3K1YzRTNNKzRwQXo4MWto
bDliTTN1Zm8xNzAyN24rb1RFSEEyCnhQQmkwTThHQ0k0T3NReUVCRGZ0RFNGd0dtKythV1ZURzkv
dDl3ZGJ2OHNiQ3ZteUtlM3FjdDZ5UUROVmc1RVlKR0l3bGdzV3Q1UHAKdzNUbFBJL3ZubWZydDJB
NnZ1djM1eDk3NStBRm11QUNYZ0lOb2lqT0JVVXl5ck04emZsb0tINHV0aHF2U1E2SVN1VjFKZndY
YjdiOQo0QzY1cDVBQUFBQUFTVVZPUks1Q1lJST0KCg==
</data>
<flag name="review"
          id="255554"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>