<?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>122379</bug_id>
          
          <creation_ts>2013-10-05 02:28:51 -0700</creation_ts>
          <short_desc>DoYouEvenBench: Add Facebook&apos;s React TodoMVC test case</short_desc>
          <delta_ts>2013-10-05 02:39:52 -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>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>slewis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>936546</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-05 02:28:51 -0700</bug_when>
    <thetext>DoYouEvenBench: Add Facebook&apos;s React TodoMVC test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936547</commentid>
    <comment_count>1</comment_count>
      <attachid>213447</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-05 02:31:50 -0700</bug_when>
    <thetext>Created attachment 213447
Adds a test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936548</commentid>
    <comment_count>2</comment_count>
      <attachid>213447</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-10-05 02:35:37 -0700</bug_when>
    <thetext>Comment on attachment 213447
Adds a test case

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936549</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-05 02:39:52 -0700</bug_when>
    <thetext>Committed r156951: &lt;http://trac.webkit.org/changeset/156951&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213447</attachid>
            <date>2013-10-05 02:31:50 -0700</date>
            <delta_ts>2013-10-05 02:35:37 -0700</delta_ts>
            <desc>Adds a test case</desc>
            <filename>bug-122379-20131005023151.patch</filename>
            <type>text/plain</type>
            <size>893585</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTY5NTApCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDEzLTEwLTA1ICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIERvWW91RXZlbkJlbmNo
OiBBZGQgRmFjZWJvb2sncyBSZWFjdCBUb2RvTVZDIHRlc3QgY2FzZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyMzc5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFJlYWN0L1RvZG9NVkMgYXMgYSBu
ZXcgdGVzdCBjYXNlLiBTb21laG93IHdlIGJlYXQgRmlyZWZveCBvbiB0aGlzIG9uZSBhcyB3ZWxs
LgorCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvYmVuY2htYXJrLmh0bWw6CisgICAgICAgICog
RG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9sYWJzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5C
ZW5jaC90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzOiBBZGRlZC4KKyAgICAgICAg
KiBEb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0
OiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL3JlYWN0L2Jvd2VyLmpzb246IEFkZGVkLgorICAgICAgICAqIERvWW91RXZl
bkJlbmNoL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93ZXJfY29t
cG9uZW50czogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9sYWJzL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ib3dlcl9jb21wb25lbnRzL2RpcmVjdG9yOiBBZGRl
ZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL3JlYWN0L2Jvd2VyX2NvbXBvbmVudHMvZGlyZWN0b3IvLmJvd2VyLmpzb246IEFkZGVk
LgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvcmVhY3QvYm93ZXJfY29tcG9uZW50cy9kaXJlY3Rvci8uZ2l0aWdub3JlOiBBZGRlZC4K
KyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL3JlYWN0L2Jvd2VyX2NvbXBvbmVudHMvZGlyZWN0b3IvLnRyYXZpcy55bWw6IEFkZGVkLgor
ICAgICAgICAqIERvWW91RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvcmVhY3QvYm93ZXJfY29tcG9uZW50cy9kaXJlY3Rvci9MSUNFTlNFOiBBZGRlZC4KKyAgICAg
ICAgKiBEb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Jl
YWN0L2Jvd2VyX2NvbXBvbmVudHMvZGlyZWN0b3IvUkVBRE1FLm1kOiBBZGRlZC4KKyAgICAgICAg
KiBEb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0
L2Jvd2VyX2NvbXBvbmVudHMvZGlyZWN0b3IvYnVpbGQ6IEFkZGVkLgorICAgICAgICAqIERvWW91
RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93ZXJf
Y29tcG9uZW50cy9kaXJlY3Rvci9idWlsZC9kaXJlY3Rvci5qczogQWRkZWQuCisgICAgICAgICog
RG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9sYWJzL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9i
b3dlcl9jb21wb25lbnRzL2RpcmVjdG9yL2J1aWxkL2RpcmVjdG9yLm1pbi5qczogQWRkZWQuCisg
ICAgICAgICogRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9sYWJzL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9yZWFjdC9ib3dlcl9jb21wb25lbnRzL2RpcmVjdG9yL2J1aWxkL2VuZGVyLmpzOiBBZGRlZC4K
KyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL3JlYWN0L2Jvd2VyX2NvbXBvbmVudHMvcmVhY3Q6IEFkZGVkLgorICAgICAgICAqIERvWW91
RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93ZXJf
Y29tcG9uZW50cy9yZWFjdC8uYm93ZXIuanNvbjogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVu
QmVuY2gvdG9kb212Yy9sYWJzL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ib3dlcl9jb21w
b25lbnRzL3JlYWN0L0pTWFRyYW5zZm9ybWVyLmpzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2
ZW5CZW5jaC90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2Jvd2VyX2Nv
bXBvbmVudHMvcmVhY3QvYm93ZXIuanNvbjogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVu
Y2gvdG9kb212Yy9sYWJzL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ib3dlcl9jb21wb25l
bnRzL3JlYWN0L3JlYWN0LmpzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC90b2Rv
bXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2Jvd2VyX2NvbXBvbmVudHMvcmVh
Y3QvcmVhY3QubWluLmpzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC90b2RvbXZj
L2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2Jvd2VyX2NvbXBvbmVudHMvdG9kb212
Yy1jb21tb246IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1v
bi9iYXNlLmNzczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9sYWJz
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ib3dlcl9jb21wb25lbnRzL3RvZG9tdmMtY29t
bW9uL2Jhc2UuanM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL3RvZG9tdmMvbGFi
cy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNv
bW1vbi9iZy5wbmc6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL3RvZG9tdmMvbGFi
cy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvaW5kZXguaHRtbDogQWRkZWQuCisgICAgICAg
ICogRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9sYWJzL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFj
dC9qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9sYWJzL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9yZWFjdC9qcy9hcHAuanN4OiBBZGRlZC4KKyAgICAgICAgKiBEb1lv
dUV2ZW5CZW5jaC90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2pzL2Zv
b3Rlci5qc3g6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvanMvdG9kb0l0ZW0uanN4OiBBZGRlZC4KKyAgICAg
ICAgKiBEb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Jl
YWN0L2pzL3V0aWxzLmpzeDogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvdG9kb212
Yy9sYWJzL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9yZWFkbWUubWQ6IEFkZGVkLgorCiAy
MDEzLTA5LTI1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIERv
WW91RXZlbkJlbmNoOiBBZGQgYSB0ZXN0IGNhc2UgZm9yIEZsaWdodEpTCkluZGV4OiBQZXJmb3Jt
YW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2JlbmNobWFyay5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBl
cmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvYmVuY2htYXJrLmh0bWwJKHJldmlzaW9uIDE1
Njk1MCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvYmVuY2htYXJrLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTE3Nyw2ICsxNzcsNDEgQEAgQmVuY2htYXJrUnVubmVyLnN1aXRl
KHsKICAgICBdCiB9KTsKIAorQmVuY2htYXJrUnVubmVyLnN1aXRlKHsKKyAgICBuYW1lOiAnUmVh
Y3QvVG9kb01WQycsCisgICAgdXJsOiAndG9kb212Yy9sYWJzL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9yZWFjdC9pbmRleC5odG1sJywKKyAgICBwcmVwYXJlOiBmdW5jdGlvbiAoY29udGVudFdpbmRv
dywgY29udGVudERvY3VtZW50KSB7CisgICAgICAgIGNvbnRlbnRXaW5kb3cuVXRpbHMuc3RvcmUg
PSBmdW5jdGlvbiAoKSB7fQorICAgICAgICByZXR1cm4gQmVuY2htYXJrUnVubmVyLndhaXRGb3JF
bGVtZW50KCcjbmV3LXRvZG8nKS50aGVuKGZ1bmN0aW9uIChlbGVtZW50KSB7CisgICAgICAgICAg
ICBlbGVtZW50LmZvY3VzKCk7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICAgICAg
fSk7CisgICAgfSwKKyAgICB0ZXN0czogWworICAgICAgICBbJ0FkZGluZycgKyBudW1iZXJPZkl0
ZW1zVG9BZGQgKyAnSXRlbXMnLCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29u
dGVudERvY3VtZW50KSB7CisgICAgICAgICAgICB2YXIgdG9kb212YyA9IGNvbnRlbnRXaW5kb3cu
dG9kb212YzsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZJdGVtc1Rv
QWRkOyBpKyspIHsKKyAgICAgICAgICAgICAgICBuZXdUb2RvLnZhbHVlID0gJ1NvbWV0aGluZyB0
byBkbyAnICsgaTsKKworICAgICAgICAgICAgICAgIHZhciBrZXlkb3duRXZlbnQgPSBkb2N1bWVu
dC5jcmVhdGVFdmVudCgnRXZlbnQnKTsKKyAgICAgICAgICAgICAgICBrZXlkb3duRXZlbnQuaW5p
dEV2ZW50KCdrZXlkb3duJywgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAga2V5ZG93bkV2
ZW50LndoaWNoID0gMTM7IC8vIFZLX0VOVEVSCisgICAgICAgICAgICAgICAgbmV3VG9kby5kaXNw
YXRjaEV2ZW50KGtleWRvd25FdmVudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH1dLAorICAg
ICAgICBbJ0NvbXBsZXRpbmdBbGxJdGVtcycsIGZ1bmN0aW9uIChuZXdUb2RvLCBjb250ZW50V2lu
ZG93LCBjb250ZW50RG9jdW1lbnQpIHsKKyAgICAgICAgICAgIHZhciBjaGVja2JveGVzID0gY29u
dGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50b2dnbGUnKTsKKyAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgY2hlY2tib3hlcy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAg
ICBjaGVja2JveGVzW2ldLmNsaWNrKCk7CisgICAgICAgIH1dLAorICAgICAgICBbJ0RlbGV0aW5n
QWxsSXRlbXMnLCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywgY29udGVudERvY3Vt
ZW50KSB7CisgICAgICAgICAgICB2YXIgZGVsZXRlQnV0dG9ucyA9IGNvbnRlbnREb2N1bWVudC5x
dWVyeVNlbGVjdG9yQWxsKCcuZGVzdHJveScpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBkZWxldGVCdXR0b25zLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIGRlbGV0ZUJ1
dHRvbnNbaV0uY2xpY2soKTsKKyAgICAgICAgfV0sCisgICAgXQorfSk7CisKIHZhciBhY3Rpb25D
b3VudCA9IDUwOwogQmVuY2htYXJrUnVubmVyLnN1aXRlKHsKICAgICBuYW1lOiAnRmxpZ2h0SlMv
TWFpbENsaWVudCcsCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3RvZG9t
dmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93ZXIuanNvbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93ZXIuanNvbgkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1h
bmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9sYWJzL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9yZWFjdC9ib3dlci5qc29uCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKK3sKKyAgIm5h
bWUiOiAidG9kb212Yy1yZWFjdCIsCisgICJ2ZXJzaW9uIjogIjAuMC4wIiwKKyAgImRlcGVuZGVu
Y2llcyI6IHsKKyAgICAidG9kb212Yy1jb21tb24iOiAifjAuMS43IiwKKyAgICAicmVhY3QiOiAi
fjAuNC4wIiwKKyAgICAiZGlyZWN0b3IiOiAifjEuMi4wIgorICB9Cit9CkluZGV4OiBQZXJmb3Jt
YW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvcmVhY3QvaW5kZXguaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91
RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvaW5kZXgu
aHRtbAkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9k
b212Yy9sYWJzL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9pbmRleC5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDI0IEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sIGxhbmc9ImVuIiBk
YXRhLWZyYW1ld29yaz0icmVhY3QiPgorICAgIDxoZWFkPgorICAgICAgICA8bWV0YSBjaGFyc2V0
PSJ1dGYtOCI+CisgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29u
dGVudD0iSUU9ZWRnZSI+CisgICAgICAgIDx0aXRsZT5SZWFjdCDigKIgVG9kb01WQzwvdGl0bGU+
CisgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iYm93ZXJfY29tcG9uZW50cy90
b2RvbXZjLWNvbW1vbi9iYXNlLmNzcyI+CisgICAgPC9oZWFkPgorICAgIDxib2R5PgorICAgICAg
ICA8c2VjdGlvbiBpZD0idG9kb2FwcCI+PC9zZWN0aW9uPgorICAgICAgICA8Zm9vdGVyIGlkPSJp
bmZvIj48L2Zvb3Rlcj4KKyAgICAgICAgPGRpdiBpZD0iYmVuY2htYXJrIj48L2Rpdj4KKworICAg
ICAgICA8c2NyaXB0IHNyYz0iYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iYXNlLmpz
Ij48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9ImJvd2VyX2NvbXBvbmVudHMvcmVhY3Qv
cmVhY3QuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0iYm93ZXJfY29tcG9uZW50
cy9yZWFjdC9KU1hUcmFuc2Zvcm1lci5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3Jj
PSJib3dlcl9jb21wb25lbnRzL2RpcmVjdG9yL2J1aWxkL2RpcmVjdG9yLm1pbi5qcyI+PC9zY3Jp
cHQ+CisKKyAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzeCIgc3JjPSJqcy91dGlscy5qc3gi
Pjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvanN4IiBzcmM9ImpzL3RvZG9J
dGVtLmpzeCI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qc3giIHNyYz0i
anMvZm9vdGVyLmpzeCI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qc3gi
IHNyYz0ianMvYXBwLmpzeCI+PC9zY3JpcHQ+CisgICAgPC9ib2R5PgorPC9odG1sPgpJbmRleDog
UGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL3JlYWN0L3JlYWRtZS5tZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3Rz
L0RvWW91RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qv
cmVhZG1lLm1kCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5j
aC90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L3JlYWRtZS5tZAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAorIyBSZWFjdCBUb2RvTVZDIEV4YW1wbGUKKworPiBS
ZWFjdCBpcyBhIEphdmFTY3JpcHQgbGlicmFyeSBmb3IgY3JlYXRpbmcgdXNlciBpbnRlcmZhY2Vz
LiBJdHMgY29yZSBwcmluY2lwbGVzIGFyZSBkZWNsYXJhdGl2ZSBjb2RlLCBlZmZpY2llbmN5LCBh
bmQgZmxleGliaWxpdHkuIFNpbXBseSBzcGVjaWZ5IHdoYXQgeW91ciBjb21wb25lbnQgbG9va3Mg
bGlrZSBhbmQgUmVhY3Qgd2lsbCBrZWVwIGl0IHVwLXRvLWRhdGUgd2hlbiB0aGUgdW5kZXJseWlu
ZyBkYXRhIGNoYW5nZXMuCisKKz4gX1tSZWFjdCAtIGZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdF0o
aHR0cDovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdClfCisKKworIyMgTGVhcm5pbmcgUmVhY3QK
KworVGhlIFtSZWFjdCBnZXR0aW5nIHN0YXJ0ZWQgZG9jdW1lbnRhdGlvbl0oaHR0cDovL2ZhY2Vi
b29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL2dldHRpbmctc3RhcnRlZC5odG1sKSBpcyBhIGdyZWF0
IHdheSB0byBnZXQgc3RhcnRlZC4KKworSGVyZSBhcmUgc29tZSBsaW5rcyB5b3UgbWF5IGZpbmQg
aGVscGZ1bDoKKworKiBbRG9jdW1lbnRhdGlvbl0oaHR0cDovL2ZhY2Vib29rLmdpdGh1Yi5pby9y
ZWFjdC9kb2NzL2dldHRpbmctc3RhcnRlZC5odG1sKQorKiBbQVBJIFJlZmVyZW5jZV0oaHR0cDov
L2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3JlZmVyZW5jZS5odG1sKQorKiBbQmxvZ10o
aHR0cDovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9ibG9nLykKKyogW1JlYWN0IG9uIEdpdEh1
Yl0oaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0KQorKiBbU3VwcG9ydF0oaHR0cDov
L2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9zdXBwb3J0Lmh0bWwpCisKK0FydGljbGVzIGFuZCBn
dWlkZXMgZnJvbSB0aGUgY29tbXVuaXR5OgorCisqIFtQaGlsb3NvcGh5XShodHRwOi8vd3d3LnF1
b3JhLmNvbS9QZXRlLUh1bnQvUG9zdHMvUmVhY3QtVW5kZXItdGhlLUhvb2QpCisqIFtIb3cgaXMg
RmFjZWJvb2sncyBSZWFjdCBKYXZhU2NyaXB0IGxpYnJhcnldKGh0dHA6Ly93d3cucXVvcmEuY29t
L1JlYWN0LUpTLUxpYnJhcnkvSG93LWlzLUZhY2Vib29rcy1SZWFjdC1KYXZhU2NyaXB0LWxpYnJh
cnkpCisqIFtSZWFjdDogVW5kZXIgdGhlIGhvb2RdKGh0dHA6Ly93d3cucXVvcmEuY29tL1BldGUt
SHVudC9Qb3N0cy9SZWFjdC1VbmRlci10aGUtSG9vZCkKKworR2V0IGhlbHAgZnJvbSBvdGhlciBS
ZWFjdCB1c2VyczoKKworKiBbUmVhY3Qgb24gU3RhY2tPdmVyZmxvd10oaHR0cDovL3N0YWNrb3Zl
cmZsb3cuY29tL3F1ZXN0aW9ucy90YWdnZWQvcmVhY3RqcykKKyogW01haWxpbmcgbGlzdCBvbiBH
b29nbGUgR3JvdXBzXShodHRwczovL2dyb3Vwcy5nb29nbGUuY29tL2ZvcnVtLyMhZm9ydW0vcmVh
Y3RqcykKKyogCitfSWYgeW91IGhhdmUgb3RoZXIgaGVscGZ1bCBsaW5rcyB0byBzaGFyZSwgb3Ig
ZmluZCBhbnkgb2YgdGhlIGxpbmtzIGFib3ZlIG5vIGxvbmdlciB3b3JrLCBwbGVhc2UgW2xldCB1
cyBrbm93XShodHRwczovL2dpdGh1Yi5jb20vdGFzdGVqcy90b2RvbXZjL2lzc3VlcykuXworCisK
KyMjIFJ1bm5pbmcKKworVGhlIGFwcCBpcyBidWlsdCB3aXRoIFtKU1hdKGh0dHA6Ly9mYWNlYm9v
ay5naXRodWIuaW8vcmVhY3QvZG9jcy9qc3gtaW4tZGVwdGguaHRtbCkgYW5kIGNvbXBpbGVkIGF0
IHJ1bnRpbWUgZm9yIGEgbGlnaHRlciBhbmQgbW9yZSBmdW4gY29kZSByZWFkaW5nIGV4cGVyaWVu
Y2UuIEFzIHN0YXRlZCBpbiB0aGUgbGluaywgSlNYIGlzIG5vdCBtYW5kYXRvcnkuCisKK1RvIHJ1
biB0aGUgYXBwLCBzcGluIHVwIGFuIEhUVFAgc2VydmVyIChlLmcuIGBweXRob24gLW0gU2ltcGxl
SFRUUFNlcnZlcmApIGFuZCB2aXNpdCBodHRwOi8vbG9jYWxob3N0Ly4uLi9teWV4YW1wbGUvLgpJ
bmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2xhYnMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2Jvd2VyX2NvbXBvbmVudHMvZGlyZWN0b3IvLmJvd2VyLmpz
b24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC90b2RvbXZj
L2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2Jvd2VyX2NvbXBvbmVudHMvZGlyZWN0
b3IvLmJvd2VyLmpzb24JKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZl
bkJlbmNoL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93ZXJfY29t
cG9uZW50cy9kaXJlY3Rvci8uYm93ZXIuanNvbgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBA
QAoreworICAibmFtZSI6ICJkaXJlY3RvciIsCisgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1
Yi5jb20vZmxhdGlyb24vZGlyZWN0b3IiLAorICAidmVyc2lvbiI6ICIxLjIuMCIsCisgICJfcmVs
ZWFzZSI6ICIxLjIuMCIsCisgICJfcmVzb2x1dGlvbiI6IHsKKyAgICAidHlwZSI6ICJ2ZXJzaW9u
IiwKKyAgICAidGFnIjogInYxLjIuMCIsCisgICAgImNvbW1pdCI6ICI1MzhkZWU5N2IwZDU3MTYz
ZDY4MmEzOTdkZTY3NGYzNmFmNGQxNmExIgorICB9LAorICAiX3NvdXJjZSI6ICJnaXQ6Ly9naXRo
dWIuY29tL2ZsYXRpcm9uL2RpcmVjdG9yLmdpdCIsCisgICJfdGFyZ2V0IjogIn4xLjIuMCIKK30K
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91
RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93ZXJf
Y29tcG9uZW50cy9kaXJlY3Rvci8uZ2l0aWdub3JlCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNl
VGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9sYWJzL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9y
ZWFjdC9ib3dlcl9jb21wb25lbnRzL2RpcmVjdG9yLy5naXRpZ25vcmUJKHJldmlzaW9uIDApCisr
KyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvcmVhY3QvYm93ZXJfY29tcG9uZW50cy9kaXJlY3Rvci8uZ2l0aWdub3JlCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKKy8uaWRlYS8KK25vZGVfbW9kdWxlcworbnBtLWRl
YnVnLmxvZworLkRTX1N0b3JlCisKKy90ZXN0L2Jyb3dzZXIvYnJvd3NlcmlmaWVkLWJ1bmRsZS5q
cwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2xhYnMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2Jvd2VyX2NvbXBvbmVudHMvZGlyZWN0b3IvLnRyYXZp
cy55bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC90b2Rv
bXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2Jvd2VyX2NvbXBvbmVudHMvZGly
ZWN0b3IvLnRyYXZpcy55bWwJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91
RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93ZXJf
Y29tcG9uZW50cy9kaXJlY3Rvci8udHJhdmlzLnltbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MiBAQAorbGFuZ3VhZ2U6IG5vZGVfanMKKworbm9kZV9qczoKKyAgLSAwLjYKKyAgLSAwLjgKKyAg
LSAiMC4xMCIKKworbm90aWZpY2F0aW9uczoKKyAgZW1haWw6CisgICAgLSB0cmF2aXNAbm9kZWpp
dHN1LmNvbQorICBpcmM6ICJpcmMuZnJlZW5vZGUub3JnI25vZGVqaXRzdSIKKwpJbmRleDogUGVy
Zm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL3JlYWN0L2Jvd2VyX2NvbXBvbmVudHMvZGlyZWN0b3IvTElDRU5TRQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93ZXJfY29tcG9uZW50cy9kaXJlY3Rvci9MSUNFTlNFCShy
ZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2xh
YnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2Jvd2VyX2NvbXBvbmVudHMvZGlyZWN0b3Iv
TElDRU5TRQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOSBAQAorQ29weXJpZ2h0IChjKSAyMDEx
IE5vZGVqaXRzdSBJbmMuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2Yg
Y2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUg
YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBk
ZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhv
dXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1
Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhl
IFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMK
K2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6
CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl
IHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z
IG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ
VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElO
RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAor
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJM
RSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4g
QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAor
T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBP
VEhFUiBERUFMSU5HUyBJTgorVEhFIFNPRlRXQVJFLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9sYWJzL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ib3dlcl9jb21wb25lbnRzL2RpcmVjdG9yL1JFQURN
RS5tZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3RvZG9t
dmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93ZXJfY29tcG9uZW50cy9kaXJl
Y3Rvci9SRUFETUUubWQJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZl
bkJlbmNoL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93ZXJfY29t
cG9uZW50cy9kaXJlY3Rvci9SRUFETUUubWQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODIyIEBA
Cis8aW1nIHNyYz0iaHR0cHM6Ly9naXRodWIuY29tL2ZsYXRpcm9uL2RpcmVjdG9yL3Jhdy9tYXN0
ZXIvaW1nL2RpcmVjdG9yLnBuZyIgLz4KKworIyBTeW5vcHNpcworRGlyZWN0b3IgaXMgYSByb3V0
ZXIuIFJvdXRpbmcgaXMgdGhlIHByb2Nlc3Mgb2YgZGV0ZXJtaW5pbmcgd2hhdCBjb2RlIHRvIHJ1
biB3aGVuIGEgVVJMIGlzIHJlcXVlc3RlZC4KKworIyBNb3RpdmF0aW9uCitBIHJvdXRpbmcgbGli
cmFyeSB0aGF0IHdvcmtzIGluIGJvdGggdGhlIGJyb3dzZXIgYW5kIG5vZGUuanMgZW52aXJvbm1l
bnRzIHdpdGggYXMgZmV3IGRpZmZlcmVuY2VzIGFzIHBvc3NpYmxlLiBTaW1wbGlmaWVzIHRoZSBk
ZXZlbG9wbWVudCBvZiBTaW5nbGUgUGFnZSBBcHBzIGFuZCBOb2RlLmpzIGFwcGxpY2F0aW9ucy4g
RGVwZW5kZW5jeSBmcmVlIChkb2Vzbid0IHJlcXVpcmUgalF1ZXJ5IG9yIEV4cHJlc3MsIGV0Yyku
CisKKyMgU3RhdHVzCitbIVtCdWlsZCBTdGF0dXNdKGh0dHBzOi8vc2VjdXJlLnRyYXZpcy1jaS5v
cmcvZmxhdGlyb24vZGlyZWN0b3IucG5nP2JyYW5jaD1tYXN0ZXIpXShodHRwOi8vdHJhdmlzLWNp
Lm9yZy9mbGF0aXJvbi9kaXJlY3RvcikKKworIyBGZWF0dXJlcworKiBbQ2xpZW50LVNpZGUgUm91
dGluZ10oI2NsaWVudC1zaWRlKQorKiBbU2VydmVyLVNpZGUgSFRUUCBSb3V0aW5nXSgjaHR0cC1y
b3V0aW5nKQorKiBbU2VydmVyLVNpZGUgQ0xJIFJvdXRpbmddKCNjbGktcm91dGluZykKKworCisj
IFVzYWdlCisqIFtBUEkgRG9jdW1lbnRhdGlvbl0oI2FwaS1kb2N1bWVudGF0aW9uKQorKiBbRnJl
cXVlbnRseSBBc2tlZCBRdWVzdGlvbnNdKCNmYXEpCisKKzxhIG5hbWU9ImNsaWVudC1zaWRlIj48
L2E+CisjIyBDbGllbnQtc2lkZSBSb3V0aW5nCitJdCBzaW1wbHkgd2F0Y2hlcyB0aGUgaGFzaCBv
ZiB0aGUgVVJMIHRvIGRldGVybWluZSB3aGF0IHRvIGRvLCBmb3IgZXhhbXBsZToKKworYGBgCito
dHRwOi8vZm9vLmNvbS8jL2JhcgorYGBgCisKK0NsaWVudC1zaWRlIHJvdXRpbmcgKGFrYSBoYXNo
LXJvdXRpbmcpIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRo
ZSBzdGF0ZSBvZiB0aGUgYXBwbGljYXRpb24gdXNpbmcgdGhlIFVSTC4gU28gdGhhdCB3aGVuIHRo
ZSB1c2VyIHZpc2l0cyBhIHNwZWNpZmljIFVSTCwgdGhlIGFwcGxpY2F0aW9uIGNhbiBiZSB0cmFu
c2Zvcm1lZCBhY2NvcmRpbmdseS4KKworPGltZyBzcmM9Imh0dHBzOi8vZ2l0aHViLmNvbS9mbGF0
aXJvbi9kaXJlY3Rvci9yYXcvbWFzdGVyL2ltZy9oYXNoUm91dGUucG5nIiAvPgorCitIZXJlIGlz
IGEgc2ltcGxlIGV4YW1wbGU6CisKK2BgYGh0bWwKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cisg
IDxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICA8dGl0bGU+QSBHZW50bGUg
SW50cm9kdWN0aW9uPC90aXRsZT4KKyAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9yYXcuZ2l0aHVi
LmNvbS9mbGF0aXJvbi9kaXJlY3Rvci9tYXN0ZXIvYnVpbGQvZGlyZWN0b3IubWluLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0PgorCisgICAgICB2YXIgYXV0aG9yID0gZnVuY3Rpb24gKCkgeyBj
b25zb2xlLmxvZygiYXV0aG9yIik7IH0sCisgICAgICAgICAgYm9va3MgPSBmdW5jdGlvbiAoKSB7
IGNvbnNvbGUubG9nKCJib29rcyIpOyB9LAorICAgICAgICAgIHZpZXdCb29rID0gZnVuY3Rpb24o
Ym9va0lkKSB7IGNvbnNvbGUubG9nKCJ2aWV3Qm9vazogYm9va0lkIGlzIHBvcHVsYXRlZDogIiAr
IGJvb2tJZCk7IH07CisKKyAgICAgIHZhciByb3V0ZXMgPSB7CisgICAgICAgICcvYXV0aG9yJzog
YXV0aG9yLAorICAgICAgICAnL2Jvb2tzJzogW2Jvb2tzLCBmdW5jdGlvbigpIHsgY29uc29sZS5s
b2coIkFuIGlubGluZSByb3V0ZSBoYW5kbGVyLiIpOyB9XSwKKyAgICAgICAgJy9ib29rcy92aWV3
Lzpib29rSWQnOiB2aWV3Qm9vaworICAgICAgfTsKKworICAgICAgdmFyIHJvdXRlciA9IFJvdXRl
cihyb3V0ZXMpOworICAgICAgcm91dGVyLmluaXQoKTsKKworICAgIDwvc2NyaXB0PgorICA8L2hl
YWQ+CisgIDxib2R5PgorICAgIDx1bD4KKyAgICAgIDxsaT48YSBocmVmPSIjL2F1dGhvciI+Iy9h
dXRob3I8L2E+PC9saT4KKyAgICAgIDxsaT48YSBocmVmPSIjL2Jvb2tzIj4jL2Jvb2tzPC9hPjwv
bGk+CisgICAgICA8bGk+PGEgaHJlZj0iIy9ib29rcy92aWV3LzEiPiMvYm9va3Mvdmlldy8xPC9h
PjwvbGk+CisgICAgPC91bD4KKyAgPC9ib2R5PgorPC9odG1sPgorYGBgCisKK0RpcmVjdG9yIHdv
cmtzIGdyZWF0IHdpdGggeW91ciBmYXZvcml0ZSBET00gbGlicmFyeSwgc3VjaCBhcyBqUXVlcnku
CisKK2BgYGh0bWwKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisgIDxoZWFkPgorICAgIDxtZXRh
IGNoYXJzZXQ9InV0Zi04Ij4KKyAgICA8dGl0bGU+QSBHZW50bGUgSW50cm9kdWN0aW9uIDI8L3Rp
dGxlPgorICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9s
aWJzL2pxdWVyeS8xLjcuMS9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNy
Yz0iaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9mbGF0aXJvbi9kaXJlY3Rvci9tYXN0ZXIvYnVpbGQv
ZGlyZWN0b3IubWluLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgICQoJ2RvY3VtZW50
JykucmVhZHkoZnVuY3Rpb24oKXsKKyAgICAgIC8vCisgICAgICAvLyBjcmVhdGUgc29tZSBmdW5j
dGlvbnMgdG8gYmUgZXhlY3V0ZWQgd2hlbgorICAgICAgLy8gdGhlIGNvcnJlY3Qgcm91dGUgaXMg
aXNzdWVkIGJ5IHRoZSB1c2VyLgorICAgICAgLy8KKyAgICAgIHZhciBzaG93QXV0aG9ySW5mbyA9
IGZ1bmN0aW9uICgpIHsgY29uc29sZS5sb2coInNob3dBdXRob3JJbmZvIik7IH0sCisgICAgICAg
ICAgbGlzdEJvb2tzID0gZnVuY3Rpb24gKCkgeyBjb25zb2xlLmxvZygibGlzdEJvb2tzIik7IH0s
CisgICAgICAgICAgYWxscm91dGVzID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgcm91
dGUgPSB3aW5kb3cubG9jYXRpb24uaGFzaC5zbGljZSgyKSwKKyAgICAgICAgICAgICAgICBzZWN0
aW9ucyA9ICQoJ3NlY3Rpb24nKSwKKyAgICAgICAgICAgICAgICBzZWN0aW9uOworICAgICAgICAg
ICAgaWYgKChzZWN0aW9uID0gc2VjdGlvbnMuZmlsdGVyKCdbZGF0YS1yb3V0ZT0nICsgcm91dGUg
KyAnXScpKS5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgc2VjdGlvbnMuaGlkZSgyNTApOworICAg
ICAgICAgICAgICBzZWN0aW9uLnNob3coMjUwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9
OworCisgICAgICAvLworICAgICAgLy8gZGVmaW5lIHRoZSByb3V0aW5nIHRhYmxlLgorICAgICAg
Ly8KKyAgICAgIHZhciByb3V0ZXMgPSB7CisgICAgICAgICcvYXV0aG9yJzogc2hvd0F1dGhvcklu
Zm8sCisgICAgICAgICcvYm9va3MnOiBsaXN0Qm9va3MKKyAgICAgIH07CisKKyAgICAgIC8vCisg
ICAgICAvLyBpbnN0YW50aWF0ZSB0aGUgcm91dGVyLgorICAgICAgLy8KKyAgICAgIHZhciByb3V0
ZXIgPSBSb3V0ZXIocm91dGVzKTsKKworICAgICAgLy8KKyAgICAgIC8vIGEgZ2xvYmFsIGNvbmZp
Z3VyYXRpb24gc2V0dGluZy4KKyAgICAgIC8vCisgICAgICByb3V0ZXIuY29uZmlndXJlKHsKKyAg
ICAgICAgb246IGFsbHJvdXRlcworICAgICAgfSk7CisgICAgICByb3V0ZXIuaW5pdCgpOworICAg
IH0pOworICAgIDwvc2NyaXB0PgorICA8L2hlYWQ+CisgIDxib2R5PgorICAgIDxzZWN0aW9uIGRh
dGEtcm91dGU9ImF1dGhvciI+QXV0aG9yIE5hbWU8L3NlY3Rpb24+CisgICAgPHNlY3Rpb24gZGF0
YS1yb3V0ZT0iYm9va3MiPkJvb2sxLCBCb29rMiwgQm9vazM8L3NlY3Rpb24+CisgICAgPHVsPgor
ICAgICAgPGxpPjxhIGhyZWY9IiMvYXV0aG9yIj4jL2F1dGhvcjwvYT48L2xpPgorICAgICAgPGxp
PjxhIGhyZWY9IiMvYm9va3MiPiMvYm9va3M8L2E+PC9saT4KKyAgICA8L3VsPgorICA8L2JvZHk+
Cis8L2h0bWw+CitgYGAKKworWW91IGNhbiBmaW5kIGEgYnJvd3Nlci1zcGVjaWZpYyBidWlsZCBv
ZiBgZGlyZWN0b3JgIFtoZXJlXVsxXSB3aGljaCBoYXMgYWxsIG9mIHRoZSBzZXJ2ZXIgY29kZSBz
dHJpcHBlZCBhd2F5LgorCis8YSBuYW1lPSJodHRwLXJvdXRpbmciPjwvYT4KKyMjIFNlcnZlci1T
aWRlIEhUVFAgUm91dGluZworCitEaXJlY3RvciBoYW5kbGVzIHJvdXRpbmcgZm9yIEhUVFAgcmVx
dWVzdHMgc2ltaWxhciB0byBgam91cm5leWAgb3IgYGV4cHJlc3NgOgorCitgYGBqcworICAvLwor
ICAvLyByZXF1aXJlIHRoZSBuYXRpdmUgaHR0cCBtb2R1bGUsIGFzIHdlbGwgYXMgZGlyZWN0b3Iu
CisgIC8vCisgIHZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpLAorICAgICAgZGlyZWN0b3IgPSBy
ZXF1aXJlKCdkaXJlY3RvcicpOworCisgIC8vCisgIC8vIGNyZWF0ZSBzb21lIGxvZ2ljIHRvIGJl
IHJvdXRlZCB0by4KKyAgLy8KKyAgZnVuY3Rpb24gaGVsbG9Xb3JsZCgpIHsKKyAgICB0aGlzLnJl
cy53cml0ZUhlYWQoMjAwLCB7ICdDb250ZW50LVR5cGUnOiAndGV4dC9wbGFpbicgfSkKKyAgICB0
aGlzLnJlcy5lbmQoJ2hlbGxvIHdvcmxkJyk7CisgIH0KKworICAvLworICAvLyBkZWZpbmUgYSBy
b3V0aW5nIHRhYmxlLgorICAvLworICB2YXIgcm91dGVyID0gbmV3IGRpcmVjdG9yLmh0dHAuUm91
dGVyKHsKKyAgICAnL2hlbGxvJzogeworICAgICAgZ2V0OiBoZWxsb1dvcmxkCisgICAgfQorICB9
KTsKKworICAvLworICAvLyBzZXR1cCBhIHNlcnZlciBhbmQgd2hlbiB0aGVyZSBpcyBhIHJlcXVl
c3QsIGRpc3BhdGNoIHRoZQorICAvLyByb3V0ZSB0aGF0IHdhcyByZXF1ZXN0ZWQgaW4gdGhlIHJl
cXVlc3Qgb2JqZWN0LgorICAvLworICB2YXIgc2VydmVyID0gaHR0cC5jcmVhdGVTZXJ2ZXIoZnVu
Y3Rpb24gKHJlcSwgcmVzKSB7CisgICAgcm91dGVyLmRpc3BhdGNoKHJlcSwgcmVzLCBmdW5jdGlv
biAoZXJyKSB7CisgICAgICBpZiAoZXJyKSB7CisgICAgICAgIHJlcy53cml0ZUhlYWQoNDA0KTsK
KyAgICAgICAgcmVzLmVuZCgpOworICAgICAgfQorICAgIH0pOworICB9KTsKKworICAvLworICAv
LyBZb3UgY2FuIGFsc28gZG8gYWQtaG9jIHJvdXRpbmcsIHNpbWlsYXIgdG8gYGpvdXJuZXlgIG9y
IGBleHByZXNzYC4KKyAgLy8gVGhpcyBjYW4gYmUgZG9uZSB3aXRoIGEgc3RyaW5nIG9yIGEgcmVn
ZXhwLgorICAvLworICByb3V0ZXIuZ2V0KCcvYm9uam91cicsIGhlbGxvV29ybGQpOworICByb3V0
ZXIuZ2V0KC9ob2xhLywgaGVsbG9Xb3JsZCk7CisKKyAgLy8KKyAgLy8gc2V0IHRoZSBzZXJ2ZXIg
dG8gbGlzdGVuIG9uIHBvcnQgYDgwODBgLgorICAvLworICBzZXJ2ZXIubGlzdGVuKDgwODApOwor
YGBgCisKKyMjIyBTZWUgQWxzbzoKKworIC0gQXV0by1nZW5lcmF0ZWQgTm9kZS5qcyBBUEkgQ2xp
ZW50cyBmb3Igcm91dGVycyB1c2luZyBbRGlyZWN0b3ItUmVmbGVjdG9yXShodHRwOi8vZ2l0aHVi
LmNvbS9mbGF0aXJvbi9kaXJlY3Rvci1yZWZsZWN0b3IpCisgLSBSRVNUZnVsIFJlc291cmNlIHJv
dXRpbmcgdXNpbmcgW3Jlc3RmdWxdKGh0dHA6Ly9naXRodWIuY29tL2ZsYXRpcm9uL3Jlc3RmdWwp
CisgLSBIVE1MIC8gUGxhaW4gVGV4dCB2aWV3cyBvZiByb3V0ZXJzIHVzaW5nIFtEaXJlY3Rvci1F
eHBsb3Jlcl0oaHR0cDovL2dpdGh1Yi5jb20vZmxhdGlyb24vZGlyZWN0b3ItZXhwbG9yZXIpCisK
KzxhIG5hbWU9ImNsaS1yb3V0aW5nIj48L2E+CisjIyBDTEkgUm91dGluZworCitEaXJlY3RvciBz
dXBwb3J0cyBDb21tYW5kIExpbmUgSW50ZXJmYWNlIHJvdXRpbmcuIFJvdXRlcyBmb3IgY2xpIG9w
dGlvbnMgYXJlIGJhc2VkIG9uIGNvbW1hbmQgbGluZSBpbnB1dCAoaS5lLiBgcHJvY2Vzcy5hcmd2
YCkgaW5zdGVhZCBvZiBhIFVSTC4KKworYGBgIGpzCisgIHZhciBkaXJlY3RvciA9IHJlcXVpcmUo
J2RpcmVjdG9yJyk7CisKKyAgdmFyIHJvdXRlciA9IG5ldyBkaXJlY3Rvci5jbGkuUm91dGVyKCk7
CisKKyAgcm91dGVyLm9uKCdjcmVhdGUnLCBmdW5jdGlvbiAoKSB7CisgICAgY29uc29sZS5sb2co
J2NyZWF0ZSBzb21ldGhpbmcnKTsKKyAgfSk7CisKKyAgcm91dGVyLm9uKC9kZXN0cm95LywgZnVu
Y3Rpb24gKCkgeworICAgIGNvbnNvbGUubG9nKCdkZXN0cm95IHNvbWV0aGluZycpOworICB9KTsK
KworICAvLyBZb3Ugd2lsbCBuZWVkIHRvIGRpc3BhdGNoIHRoZSBjbGkgYXJndW1lbnRzIHlvdXJz
ZWxmCisgIHJvdXRlci5kaXNwYXRjaCgnb24nLCBwcm9jZXNzLmFyZ3Yuc2xpY2UoMikuam9pbign
ICcpKTsKK2BgYAorCitVc2luZyB0aGUgY2xpIHJvdXRlciwgeW91IGNhbiBkaXNwYXRjaCBjb21t
YW5kcyBieSBwYXNzaW5nIHRoZW0gYXMgYSBzdHJpbmcuIEZvciBleGFtcGxlLCBpZiB0aGlzIGV4
YW1wbGUgaXMgaW4gYSBmaWxlIGNhbGxlZCBgZm9vLmpzYDoKKworYGBgIGJhc2gKKyQgbm9kZSBm
b28uanMgY3JlYXRlCitjcmVhdGUgc29tZXRoaW5nCiskIG5vZGUgZm9vLmpzIGRlc3Ryb3kKK2Rl
c3Ryb3kgc29tZXRoaW5nCitgYGAKKworPGEgbmFtZT0iYXBpLWRvY3VtZW50YXRpb24iPjwvYT4K
KyMgQVBJIERvY3VtZW50YXRpb24KKworKiBbQ29uc3RydWN0b3JdKCNjb25zdHJ1Y3RvcikKKyog
W1JvdXRpbmcgVGFibGVdKCNyb3V0aW5nLXRhYmxlKQorKiBbQWRob2MgUm91dGluZ10oI2FkaG9j
LXJvdXRpbmcpCisqIFtTY29wZWQgUm91dGluZ10oI3Njb3BlZC1yb3V0aW5nKQorKiBbUm91dGlu
ZyBFdmVudHNdKCNyb3V0aW5nLWV2ZW50cykKKyogW0NvbmZpZ3VyYXRpb25dKCNjb25maWd1cmF0
aW9uKQorKiBbVVJMIE1hdGNoaW5nXSgjdXJsLW1hdGNoaW5nKQorKiBbVVJMIFBhcmFtc10oI3Vy
bC1wYXJhbXMpCisqIFtSb3V0ZSBSZWN1cnNpb25dKCNyb3V0ZS1yZWN1cnNpb24pCisqIFtBc3lu
YyBSb3V0aW5nXSgjYXN5bmMtcm91dGluZykKKyogW1Jlc291cmNlc10oI3Jlc291cmNlcykKKyog
W0hpc3RvcnkgQVBJXSgjaGlzdG9yeS1hcGkpCisqIFtJbnN0YW5jZSBNZXRob2RzXSgjaW5zdGFu
Y2UtbWV0aG9kcykKKyogW0F0dGFjaCBQcm9wZXJ0aWVzIHRvIGB0aGlzYF0oI2F0dGFjaC10by10
aGlzKQorKiBbSFRUUCBTdHJlYW1pbmcgYW5kIEJvZHkgUGFyc2luZ10oI2h0dHAtc3RyZWFtaW5n
LWJvZHktcGFyc2luZykKKworPGEgbmFtZT0iY29uc3RydWN0b3IiPjwvYT4KKyMjIENvbnN0cnVj
dG9yCisKK2BgYCBqcworICB2YXIgcm91dGVyID0gUm91dGVyKHJvdXRlcyk7CitgYGAKKworPGEg
bmFtZT0icm91dGluZy10YWJsZSI+PC9hPgorIyMgUm91dGluZyBUYWJsZQorCitBbiBvYmplY3Qg
bGl0ZXJhbCB0aGF0IGNvbnRhaW5zIG5lc3RlZCByb3V0ZSBkZWZpbml0aW9ucy4gQSBwb3RlbnRp
YWxseSBuZXN0ZWQgc2V0IG9mIGtleS92YWx1ZSBwYWlycy4gVGhlIGtleXMgaW4gdGhlIG9iamVj
dCBsaXRlcmFsIHJlcHJlc2VudCBlYWNoIHBvdGVudGlhbCBwYXJ0IG9mIHRoZSBVUkwuIFRoZSB2
YWx1ZXMgaW4gdGhlIG9iamVjdCBsaXRlcmFsIGNvbnRhaW4gcmVmZXJlbmNlcyB0byB0aGUgZnVu
Y3Rpb25zIHRoYXQgc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGVtLiAqYmFyayogYW5kICpt
ZW93KiBhcmUgdHdvIGZ1bmN0aW9ucyB0aGF0IHlvdSBoYXZlIGRlZmluZWQgaW4geW91ciBjb2Rl
LgorCitgYGAganMKKyAgLy8KKyAgLy8gQXNzaWduIHJvdXRlcyB0byBhbiBvYmplY3QgbGl0ZXJh
bC4KKyAgLy8KKyAgdmFyIHJvdXRlcyA9IHsKKyAgICAvLworICAgIC8vIGEgcm91dGUgd2hpY2gg
YXNzaWducyB0aGUgZnVuY3Rpb24gYGJhcmtgLgorICAgIC8vCisgICAgJy9kb2cnOiBiYXJrLAor
ICAgIC8vCisgICAgLy8gYSByb3V0ZSB3aGljaCBhc3NpZ25zIHRoZSBmdW5jdGlvbnMgYG1lb3dg
IGFuZCBgc2NyYXRjaGAuCisgICAgLy8KKyAgICAnL2NhdCc6IFttZW93LCBzY3JhdGNoXQorICB9
OworCisgIC8vCisgIC8vIEluc3RhbnRpYXRlIHRoZSByb3V0ZXIuCisgIC8vCisgIHZhciByb3V0
ZXIgPSBSb3V0ZXIocm91dGVzKTsKK2BgYAorCis8YSBuYW1lPSJhZGhvYy1yb3V0aW5nIj48L2E+
CisjIyBBZGhvYyBSb3V0aW5nCisKK1doZW4gZGV2ZWxvcGluZyBsYXJnZSBjbGllbnQtc2lkZSBv
ciBzZXJ2ZXItc2lkZSBhcHBsaWNhdGlvbnMgaXQgaXMgbm90IGFsd2F5cyBwb3NzaWJsZSB0byBk
ZWZpbmUgcm91dGVzIGluIG9uZSBsb2NhdGlvbi4gVXN1YWxseSBpbmRpdmlkdWFsIGRlY291cGxl
ZCBjb21wb25lbnRzIHJlZ2lzdGVyIHRoZWlyIG93biByb3V0ZXMgd2l0aCB0aGUgYXBwbGljYXRp
b24gcm91dGVyLiBXZSByZWZlciB0byB0aGlzIGFzIF9BZGhvYyBSb3V0aW5nLl8gTGV0cyB0YWtl
IGEgbG9vayBhdCB0aGUgQVBJIGBkaXJlY3RvcmAgZXhwb3NlcyBmb3IgYWRob2Mgcm91dGluZzoK
KworKipDbGllbnQtc2lkZSBSb3V0aW5nKioKKworYGBgIGpzCisgIHZhciByb3V0ZXIgPSBuZXcg
Um91dGVyKCkuaW5pdCgpOworCisgIHJvdXRlci5vbignL3NvbWUvcmVzb3VyY2UnLCBmdW5jdGlv
biAoKSB7CisgICAgLy8KKyAgICAvLyBEbyBzb21ldGhpbmcgb24gYC8jL3NvbWUvcmVzb3VyY2Vg
CisgICAgLy8KKyAgfSk7CitgYGAKKworKipIVFRQIFJvdXRpbmcqKgorCitgYGAganMKKyAgdmFy
IHJvdXRlciA9IG5ldyBkaXJlY3Rvci5odHRwLlJvdXRlcigpOworCisgIHJvdXRlci5nZXQoL1wv
c29tZVwvcmVzb3VyY2UvLCBmdW5jdGlvbiAoKSB7CisgICAgLy8KKyAgICAvLyBEbyBzb21ldGhp
bmcgb24gYW4gR0VUIHRvIGAvc29tZS9yZXNvdXJjZWAKKyAgICAvLworICB9KTsKK2BgYAorCis8
YSBuYW1lPSJzY29wZWQtcm91dGluZyI+PC9hPgorIyMgU2NvcGVkIFJvdXRpbmcKKworSW4gbGFy
Z2Ugd2ViIGFwcGxpYXRpb25zLCBib3RoIFtDbGllbnQtc2lkZV0oI2NsaWVudC1zaWRlKSBhbmQg
W1NlcnZlci1zaWRlXSgjaHR0cC1yb3V0aW5nKSwgcm91dGVzIGFyZSBvZnRlbiBzY29wZWQgd2l0
aGluIGEgZmV3IGluZGl2aWR1YWwgcmVzb3VyY2VzLiBEaXJlY3RvciBleHBvc2VzIGEgc2ltcGxl
IHdheSB0byBkbyB0aGlzIGZvciBbQWRob2MgUm91dGluZ10oI2FkaG9jLXJvdXRpbmcpIHNjZW5h
cmlvczoKKworYGBgIGpzCisgIHZhciByb3V0ZXIgPSBuZXcgZGlyZWN0b3IuaHR0cC5Sb3V0ZXIo
KTsKKworICAvLworICAvLyBDcmVhdGUgcm91dGVzIGluc2lkZSB0aGUgYC91c2Vyc2Agc2NvcGUu
CisgIC8vCisgIHJvdXRlci5wYXRoKC9cL3VzZXJzXC8oXHcrKS8sIGZ1bmN0aW9uICgpIHsKKyAg
ICAvLworICAgIC8vIFRoZSBgdGhpc2AgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24gcGFzc2VkIHRv
IGAucGF0aCgpYAorICAgIC8vIGlzIHRoZSBSb3V0ZXIgaXRzZWxmLgorICAgIC8vCisKKyAgICB0
aGlzLnBvc3QoZnVuY3Rpb24gKGlkKSB7CisgICAgICAvLworICAgICAgLy8gQ3JlYXRlIHRoZSB1
c2VyIHdpdGggdGhlIHNwZWNpZmllZCBgaWRgLgorICAgICAgLy8KKyAgICB9KTsKKworICAgIHRo
aXMuZ2V0KGZ1bmN0aW9uIChpZCkgeworICAgICAgLy8KKyAgICAgIC8vIFJldHJlaXZlIHRoZSB1
c2VyIHdpdGggdGhlIHNwZWNpZmllZCBgaWRgLgorICAgICAgLy8KKyAgICB9KTsKKworICAgIHRo
aXMuZ2V0KC9cL2ZyaWVuZHMvLCBmdW5jdGlvbiAoaWQpIHsKKyAgICAgIC8vCisgICAgICAvLyBH
ZXQgdGhlIGZyaWVuZHMgZm9yIHRoZSB1c2VyIHdpdGggdGhlIHNwZWNpZmllZCBgaWRgLgorICAg
ICAgLy8KKyAgICB9KTsKKyAgfSk7CitgYGAKKworPGEgbmFtZT0icm91dGluZy1ldmVudHMiPjwv
YT4KKyMjIFJvdXRpbmcgRXZlbnRzCisKK0luIGBkaXJlY3RvcmAsIGEgInJvdXRpbmcgZXZlbnQi
IGlzIGEgbmFtZWQgcHJvcGVydHkgaW4gdGhlIFtSb3V0aW5nIFRhYmxlXSgjcm91dGluZy10YWJs
ZSkgd2hpY2ggY2FuIGJlIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gb3IgYW4gQXJyYXkgb2YgZnVu
Y3Rpb25zIHRvIGJlIGNhbGxlZCB3aGVuIGEgcm91dGUgaXMgbWF0Y2hlZCBpbiBhIGNhbGwgdG8g
YHJvdXRlci5kaXNwYXRjaCgpYC4KKworKiAqKm9uOioqIEEgZnVuY3Rpb24gb3IgQXJyYXkgb2Yg
ZnVuY3Rpb25zIHRvIGV4ZWN1dGUgd2hlbiB0aGUgcm91dGUgaXMgbWF0Y2hlZC4KKyogKipiZWZv
cmU6KiogQSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnMgdG8gZXhlY3V0ZSBiZWZvcmUg
Y2FsbGluZyB0aGUgYG9uYCBtZXRob2QocykuCisKKyoqQ2xpZW50LXNpZGUgb25seSoqCisKKyog
KiphZnRlcjoqKiBBIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9ucyB0byBleGVjdXRlIHdo
ZW4gbGVhdmluZyBhIHBhcnRpY3VsYXIgcm91dGUuCisqICoqb25jZToqKiBBIGZ1bmN0aW9uIG9y
IEFycmF5IG9mIGZ1bmN0aW9ucyB0byBleGVjdXRlIG9ubHkgb25jZSBmb3IgYSBwYXJ0aWN1bGFy
IHJvdXRlLgorCis8YSBuYW1lPSJjb25maWd1cmF0aW9uIj48L2E+CisjIyBDb25maWd1cmF0aW9u
CisKK0dpdmVuIHRoZSBmbGV4aWJsZSBuYXR1cmUgb2YgYGRpcmVjdG9yYCB0aGVyZSBhcmUgc2V2
ZXJhbCBvcHRpb25zIGF2YWlsYWJsZSBmb3IgYm90aCB0aGUgW0NsaWVudC1zaWRlXSgjY2xpZW50
LXNpZGUpIGFuZCBbU2VydmVyLXNpZGVdKCNodHRwLXJvdXRpbmcpLiBUaGVzZSBvcHRpb25zIGNh
biBiZSBzZXQgdXNpbmcgdGhlIGAuY29uZmlndXJlKClgIG1ldGhvZDoKKworYGBgIGpzCisgIHZh
ciByb3V0ZXIgPSBuZXcgZGlyZWN0b3IuUm91dGVyKHJvdXRlcykuY29uZmlndXJlKG9wdGlvbnMp
OworYGBgCisKK1RoZSBgb3B0aW9uc2AgYXJlOgorCisqICoqcmVjdXJzZToqKiBDb250cm9scyBb
cm91dGUgcmVjdXJzaW9uXSgjcm91dGUtcmVjdXJzaW9uKS4gVXNlIGBmb3J3YXJkYCwgYGJhY2t3
YXJkYCwgb3IgYGZhbHNlYC4gRGVmYXVsdCBpcyBgZmFsc2VgIENsaWVudC1zaWRlLCBhbmQgYGJh
Y2t3YXJkYCBTZXJ2ZXItc2lkZS4KKyogKipzdHJpY3Q6KiogSWYgc2V0IHRvIGBmYWxzZWAsIHRo
ZW4gdHJhaWxpbmcgc2xhc2hlcyAob3Igb3RoZXIgZGVsaW1pdGVycykgYXJlIGFsbG93ZWQgaW4g
cm91dGVzLiBEZWZhdWx0IGlzIGB0cnVlYC4KKyogKiphc3luYzoqKiBDb250cm9scyBbYXN5bmMg
cm91dGluZ10oI2FzeW5jLXJvdXRpbmcpLiBVc2UgYHRydWVgIG9yIGBmYWxzZWAuIERlZmF1bHQg
aXMgYGZhbHNlYC4KKyogKipkZWxpbWl0ZXI6KiogQ2hhcmFjdGVyIHNlcGFyYXRvciBiZXR3ZWVu
IHJvdXRlIGZyYWdtZW50cy4gRGVmYXVsdCBpcyBgL2AuCisqICoqbm90Zm91bmQ6KiogQSBmdW5j
dGlvbiB0byBjYWxsIGlmIG5vIHJvdXRlIGlzIGZvdW5kIG9uIGEgY2FsbCB0byBgcm91dGVyLmRp
c3BhdGNoKClgLgorKiAqKm9uOioqIEEgZnVuY3Rpb24gKG9yIGxpc3Qgb2YgZnVuY3Rpb25zKSB0
byBjYWxsIG9uIGV2ZXJ5IGNhbGwgdG8gYHJvdXRlci5kaXNwYXRjaCgpYCB3aGVuIGEgcm91dGUg
aXMgZm91bmQuCisqICoqYmVmb3JlOioqIEEgZnVuY3Rpb24gKG9yIGxpc3Qgb2YgZnVuY3Rpb25z
KSB0byBjYWxsIGJlZm9yZSBldmVyeSBjYWxsIHRvIGByb3V0ZXIuZGlzcGF0Y2goKWAgd2hlbiBh
IHJvdXRlIGlzIGZvdW5kLgorCisqKkNsaWVudC1zaWRlIG9ubHkqKgorCisqICoqcmVzb3VyY2U6
KiogQW4gb2JqZWN0IHRvIHdoaWNoIHN0cmluZy1iYXNlZCByb3V0ZXMgd2lsbCBiZSBib3VuZC4g
VGhpcyBjYW4gYmUgZXNwZWNpYWxseSB1c2VmdWwgZm9yIGxhdGUtYmluZGluZyB0byByb3V0ZSBm
dW5jdGlvbnMgKHN1Y2ggYXMgYXN5bmMgY2xpZW50LXNpZGUgcmVxdWlyZXMpLgorKiAqKmFmdGVy
OioqIEEgZnVuY3Rpb24gKG9yIGxpc3Qgb2YgZnVuY3Rpb25zKSB0byBjYWxsIHdoZW4gYSBnaXZl
biByb3V0ZSBpcyBubyBsb25nZXIgdGhlIGFjdGl2ZSByb3V0ZS4KKyogKipodG1sNWhpc3Rvcnk6
KiogSWYgc2V0IHRvIGB0cnVlYCBhbmQgY2xpZW50IHN1cHBvcnRzIGBwdXNoU3RhdGUoKWAsIHRo
ZW4gdXNlcyBIVE1MNSBIaXN0b3J5IEFQSSBpbnN0ZWFkIG9mIGhhc2ggZnJhZ21lbnRzLiBTZWUg
W0hpc3RvcnkgQVBJXSgjaGlzdG9yeS1hcGkpIGZvciBtb3JlIGluZm9ybWF0aW9uLgorKiAqKnJ1
bl9oYW5kbGVyX2luX2luaXQ6KiogSWYgYGh0bWw1aGlzdG9yeWAgaXMgZW5hYmxlZCwgdGhlIHJv
dXRlIGhhbmRsZXIgYnkgZGVmYXVsdCBpcyBleGVjdXRlZCB1cG9uIGBSb3V0ZXIuaW5pdCgpYCBz
aW5jZSB3aXRoIHJlYWwgVVJJcyB0aGUgcm91dGVyIGNhbiBub3Qga25vdyBpZiBpdCBzaG91bGQg
Y2FsbCBhIHJvdXRlIGhhbmRsZXIgb3Igbm90LiBTZXR0aW5nIHRoaXMgdG8gYGZhbHNlYCBkaXNh
YmxlcyB0aGUgcm91dGUgaGFuZGxlciBpbml0aWFsIGV4ZWN1dGlvbi4KKworPGEgbmFtZT0idXJs
LW1hdGNoaW5nIj48L2E+CisjIyBVUkwgTWF0Y2hpbmcKKworYGBgIGpzCisgIHZhciByb3V0ZXIg
PSBSb3V0ZXIoeworICAgIC8vCisgICAgLy8gZ2l2ZW4gdGhlIHJvdXRlICcvZG9nL3llbGxhJy4K
KyAgICAvLworICAgICcvZG9nJzogeworICAgICAgJy86Y29sb3InOiB7CisgICAgICAgIC8vCisg
ICAgICAgIC8vIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIHZhbHVlICd5ZWxsYScuCisg
ICAgICAgIC8vCisgICAgICAgIG9uOiBmdW5jdGlvbiAoY29sb3IpIHsgY29uc29sZS5sb2coY29s
b3IpIH0KKyAgICAgIH0KKyAgICB9CisgIH0pOworYGBgCisKK1JvdXRlcyBjYW4gc29tZXRpbWVz
IGJlY29tZSB2ZXJ5IGNvbXBsZXgsIGBzaW1wbGUvOnRva2Vuc2AgZG9uJ3QgYWx3YXlzIHN1ZmZp
Y2UuIERpcmVjdG9yIHN1cHBvcnRzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW5zaWRlIHRoZSByb3V0
ZSBuYW1lcy4gVGhlIHZhbHVlcyBjYXB0dXJlZCBmcm9tIHRoZSByZWd1bGFyIGV4cHJlc3Npb25z
IGFyZSBwYXNzZWQgdG8geW91ciBsaXN0ZW5lciBmdW5jdGlvbi4KKworYGBgIGpzCisgIHZhciBy
b3V0ZXIgPSBSb3V0ZXIoeworICAgIC8vCisgICAgLy8gZ2l2ZW4gdGhlIHJvdXRlICcvaGVsbG8v
d29ybGQnLgorICAgIC8vCisgICAgJy9oZWxsbyc6IHsKKyAgICAgICcvKFxcdyspJzogeworICAg
ICAgICAvLworICAgICAgICAvLyB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSB2YWx1ZSAn
d29ybGQnLgorICAgICAgICAvLworICAgICAgICBvbjogZnVuY3Rpb24gKHdobykgeyBjb25zb2xl
LmxvZyh3aG8pIH0KKyAgICAgIH0KKyAgICB9CisgIH0pOworYGBgCisKK2BgYCBqcworICB2YXIg
cm91dGVyID0gUm91dGVyKHsKKyAgICAvLworICAgIC8vIGdpdmVuIHRoZSByb3V0ZSAnL2hlbGxv
L3dvcmxkL2pvaG55L2FwcGxlc2VlZCcuCisgICAgLy8KKyAgICAnL2hlbGxvJzogeworICAgICAg
Jy93b3JsZC8/KFteXC9dKilcLyhbXlwvXSopLz8nOiBmdW5jdGlvbiAoYSwgYikgeworICAgICAg
ICBjb25zb2xlLmxvZyhhLCBiKTsKKyAgICAgIH0KKyAgICB9CisgIH0pOworYGBgCisKKzxhIG5h
bWU9InVybC1wYXJhbXMiPjwvYT4KKyMjIFVSTCBQYXJhbWV0ZXJzCisKK1doZW4geW91IGFyZSB1
c2luZyB0aGUgc2FtZSByb3V0ZSBmcmFnbWVudHMgaXQgaXMgbW9yZSBkZXNjcmlwdGl2ZSB0byBk
ZWZpbmUgdGhlc2UgZnJhZ21lbnRzIGJ5IG5hbWUgYW5kIHRoZW4gdXNlIHRoZW0gaW4geW91ciBb
Um91dGluZyBUYWJsZV0oI3JvdXRpbmctdGFibGUpIG9yIFtBZGhvYyBSb3V0ZXNdKCNhZGhvYy1y
b3V0aW5nKS4gQ29uc2lkZXIgYSBzaW1wbGUgZXhhbXBsZSB3aGVyZSBhIGB1c2VySWRgIGlzIHVz
ZWQgcmVwZWF0ZWRseS4KKworYGBgIGpzCisgIC8vCisgIC8vIENyZWF0ZSBhIHJvdXRlci4gVGhp
cyBjb3VsZCBhbHNvIGJlIGRpcmVjdG9yLmNsaS5Sb3V0ZXIoKSBvcgorICAvLyBkaXJlY3Rvci5o
dHRwLlJvdXRlcigpLgorICAvLworICB2YXIgcm91dGVyID0gbmV3IGRpcmVjdG9yLlJvdXRlcigp
OworCisgIC8vCisgIC8vIEEgcm91dGUgY291bGQgYmUgZGVmaW5lZCB1c2luZyB0aGUgYHVzZXJJ
ZGAgZXhwbGljaXRseS4KKyAgLy8KKyAgcm91dGVyLm9uKC8oW1x3LV9dKykvLCBmdW5jdGlvbiAo
dXNlcklkKSB7IH0pOworCisgIC8vCisgIC8vIERlZmluZSBhIHNob3J0aGFuZCBmb3IgdGhpcyBm
cmFnbWVudCBjYWxsZWQgYHVzZXJJZGAuCisgIC8vCisgIHJvdXRlci5wYXJhbSgndXNlcklkJywg
LyhbXFx3XFwtXSspLyk7CisKKyAgLy8KKyAgLy8gTm93IG11bHRpcGxlIHJvdXRlcyBjYW4gYmUg
ZGVmaW5lZCB3aXRoIHRoZSBzYW1lCisgIC8vIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgLy8KKyAg
cm91dGVyLm9uKCcvYW55dGhpbmcvOnVzZXJJZCcsIGZ1bmN0aW9uICh1c2VySWQpIHsgfSk7Cisg
IHJvdXRlci5vbignL3NvbWV0aGluZy1lbHNlLzp1c2VySWQnLCBmdW5jdGlvbiAodXNlcklkKSB7
IH0pOworYGBgCisKKzxhIG5hbWU9InJvdXRlLXJlY3Vyc2lvbiI+PC9hPgorIyMgUm91dGUgUmVj
dXJzaW9uCisKK0NhbiBiZSBhc3NpZ25lZCB0aGUgdmFsdWUgb2YgYGZvcndhcmRgIG9yIGBiYWNr
d2FyZGAuIFRoZSByZWN1cnNlIG9wdGlvbiB3aWxsIGRldGVybWluZSB0aGUgb3JkZXIgaW4gd2hp
Y2ggdG8gZmlyZSB0aGUgbGlzdGVuZXJzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB5b3VyIHJv
dXRlcy4gSWYgdGhpcyBvcHRpb24gaXMgTk9UIHNwZWNpZmllZCBvciBzZXQgdG8gbnVsbCwgdGhl
biBvbmx5IHRoZSBsaXN0ZW5lcnMgYXNzb2NpYXRlZCB3aXRoIGFuIGV4YWN0IG1hdGNoIHdpbGwg
YmUgZmlyZWQuCisKKyMjIyBObyByZWN1cnNpb24sIHdpdGggdGhlIFVSTCAvZG9nL2FuZ3J5CisK
K2BgYCBqcworICB2YXIgcm91dGVzID0geworICAgICcvZG9nJzogeworICAgICAgJy9hbmdyeSc6
IHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gT25seSB0aGlzIG1ldGhvZCB3aWxsIGJlIGZpcmVk
LgorICAgICAgICAvLworICAgICAgICBvbjogZ3Jvd2wKKyAgICAgIH0sCisgICAgICBvbjogYmFy
aworICAgIH0KKyAgfTsKKworICB2YXIgcm91dGVyID0gUm91dGVyKHJvdXRlcyk7CitgYGAKKwor
IyMjIFJlY3Vyc2lvbiBzZXQgdG8gYGJhY2t3YXJkYCwgd2l0aCB0aGUgVVJMIC9kb2cvYW5ncnkK
KworYGBgIGpzCisgIHZhciByb3V0ZXMgPSB7CisgICAgJy9kb2cnOiB7CisgICAgICAnL2FuZ3J5
JzogeworICAgICAgICAvLworICAgICAgICAvLyBUaGlzIG1ldGhvZCB3aWxsIGJlIGZpcmVkIGZp
cnN0LgorICAgICAgICAvLworICAgICAgICBvbjogZ3Jvd2wKKyAgICAgIH0sCisgICAgICAvLwor
ICAgICAgLy8gVGhpcyBtZXRob2Qgd2lsbCBiZSBmaXJlZCBzZWNvbmQuCisgICAgICAvLworICAg
ICAgb246IGJhcmsKKyAgICB9CisgIH07CisKKyAgdmFyIHJvdXRlciA9IFJvdXRlcihyb3V0ZXMp
LmNvbmZpZ3VyZSh7IHJlY3Vyc2U6ICdiYWNrd2FyZCcgfSk7CitgYGAKKworIyMjIFJlY3Vyc2lv
biBzZXQgdG8gYGZvcndhcmRgLCB3aXRoIHRoZSBVUkwgL2RvZy9hbmdyeQorCitgYGAganMKKyAg
dmFyIHJvdXRlcyA9IHsKKyAgICAnL2RvZyc6IHsKKyAgICAgICcvYW5ncnknOiB7CisgICAgICAg
IC8vCisgICAgICAgIC8vIFRoaXMgbWV0aG9kIHdpbGwgYmUgZmlyZWQgc2Vjb25kLgorICAgICAg
ICAvLworICAgICAgICBvbjogZ3Jvd2wKKyAgICAgIH0sCisgICAgICAvLworICAgICAgLy8gVGhp
cyBtZXRob2Qgd2lsbCBiZSBmaXJlZCBmaXJzdC4KKyAgICAgIC8vCisgICAgICBvbjogYmFyawor
ICAgIH0KKyAgfTsKKworICB2YXIgcm91dGVyID0gUm91dGVyKHJvdXRlcykuY29uZmlndXJlKHsg
cmVjdXJzZTogJ2ZvcndhcmQnIH0pOworYGBgCisKKyMjIyBCcmVha2luZyBvdXQgb2YgcmVjdXJz
aW9uLCB3aXRoIHRoZSBVUkwgL2RvZy9hbmdyeQorCitgYGAganMKKyAgdmFyIHJvdXRlcyA9IHsK
KyAgICAnL2RvZyc6IHsKKyAgICAgICcvYW5ncnknOiB7CisgICAgICAgIC8vCisgICAgICAgIC8v
IFRoaXMgbWV0aG9kIHdpbGwgYmUgZmlyZWQgZmlyc3QuCisgICAgICAgIC8vCisgICAgICAgIG9u
OiBmdW5jdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICB9LAorICAgICAgLy8KKyAgICAg
IC8vIFRoaXMgbWV0aG9kIHdpbGwgbm90IGJlIGZpcmVkLgorICAgICAgLy8KKyAgICAgIG9uOiBi
YXJrCisgICAgfQorICB9OworCisgIC8vCisgIC8vIFRoaXMgZmVhdHVyZSB3b3JrcyBpbiByZXZl
cnNlIHdpdGggcmVjdXJzaW9uIHNldCB0byB0cnVlLgorICAvLworICB2YXIgcm91dGVyID0gUm91
dGVyKHJvdXRlcykuY29uZmlndXJlKHsgcmVjdXJzZTogJ2JhY2t3YXJkJyB9KTsKK2BgYAorCis8
YSBuYW1lPSJhc3luYy1yb3V0aW5nIj48L2E+CisjIyBBc3luYyBSb3V0aW5nCisKK0JlZm9yZSBk
aXZpbmcgaW50byBob3cgRGlyZWN0b3IgZXhwb3NlcyBhc3luYyByb3V0aW5nLCB5b3Ugc2hvdWxk
IHVuZGVyc3RhbmQgW1JvdXRlIFJlY3Vyc2lvbl0oI3JvdXRlLXJlY3Vyc2lvbikuIEF0IGl0J3Mg
Y29yZSByb3V0ZSByZWN1cnNpb24gaXMgYWJvdXQgZXZhbHVhdGluZyBhIHNlcmllcyBvZiBmdW5j
dGlvbnMgZ2F0aGVyZWQgd2hlbiB0cmF2ZXJzaW5nIHRoZSBbUm91dGluZyBUYWJsZV0oI3JvdXRp
bmctdGFibGUpLgorCitOb3JtYWxseSB0aGlzIHNlcmllcyBvZiBmdW5jdGlvbnMgaXMgZXZhbHVh
dGVkIHN5bmNocm9ub3VzbHkuIEluIGFzeW5jIHJvdXRpbmcsIHRoZXNlIGZ1bmN0aW9ucyBhcmUg
ZXZhbHVhdGVkIGFzeW5jaHJvbm91c2x5LiBBc3luYyByb3V0aW5nIGNhbiBiZSBleHRyZW1lbHkg
dXNlZnVsIGJvdGggb24gdGhlIGNsaWVudC1zaWRlIGFuZCB0aGUgc2VydmVyLXNpZGU6CisKKyog
KipDbGllbnQtc2lkZToqKiBUbyBlbnN1cmUgYW4gYW5pbWF0aW9uIG9yIG90aGVyIGFzeW5jIG9w
ZXJhdGlvbnMgKHN1Y2ggYXMgSFRUUCByZXF1ZXN0cyBmb3IgYXV0aGVudGljYXRpb24pIGhhdmUg
Y29tcGxldGVkIGJlZm9yZSBjb250aW51aW5nIGV2YWx1YXRpb24gb2YgYSByb3V0ZS4KKyogKipT
ZXJ2ZXItc2lkZToqKiBUbyBlbnN1cmUgYXJiaXRyYXJ5IGFzeW5jIG9wZXJhdGlvbnMgKHN1Y2gg
YXMgcGVyZm9ybWluZyBhdXRoZW50aWNhdGlvbikgaGF2ZSBjb21wbGV0ZWQgYmVmb3JlIGNvbnRp
bnVpbmcgdGhlIGV2YWx1YXRpb24gb2YgYSByb3V0ZS4KKworVGhlIG1ldGhvZCBzaWduYXR1cmVz
IGZvciByb3V0ZSBmdW5jdGlvbnMgaW4gc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cyBldmFs
dWF0aW9uIGFyZSBkaWZmZXJlbnQ6IGFzeW5jIHJvdXRlIGZ1bmN0aW9ucyB0YWtlIGFuIGFkZGl0
aW9uYWwgYG5leHQoKWAgY2FsbGJhY2suCisKKyMjIyBTeW5jaHJvbm91cyByb3V0ZSBmdW5jdGlv
bnMKKworYGBgIGpzCisgIHZhciByb3V0ZXIgPSBuZXcgZGlyZWN0b3IuUm91dGVyKCk7CisKKyAg
cm91dGVyLm9uKCcvOmZvby86YmFyLzpiYXp6JywgZnVuY3Rpb24gKGZvbywgYmFyLCBiYXp6KSB7
CisgICAgLy8KKyAgICAvLyBEbyBzb21ldGhpbmcgYXN5bmNocm9ub3VzIHdpdGggYGZvb2AsIGBi
YXJgLCBhbmQgYGJhenpgLgorICAgIC8vCisgIH0pOworYGBgCisKKyMjIyBBc3luY2hyb25vdXMg
cm91dGUgZnVuY3Rpb25zCisKK2BgYCBqcworICB2YXIgcm91dGVyID0gbmV3IGRpcmVjdG9yLmh0
dHAuUm91dGVyKCkuY29uZmlndXJlKHsgYXN5bmM6IHRydWUgfSk7CisKKyAgcm91dGVyLm9uKCcv
OmZvby86YmFyLzpiYXp6JywgZnVuY3Rpb24gKGZvbywgYmFyLCBiYXp6LCBuZXh0KSB7CisgICAg
Ly8KKyAgICAvLyBHbyBkbyBzb21ldGhpbmcgYXN5bmMsIGFuZCBkZXRlcm1pbmUgdGhhdCByb3V0
aW5nIHNob3VsZCBzdG9wCisgICAgLy8KKyAgICBuZXh0KGZhbHNlKTsKKyAgfSk7CitgYGAKKwor
PGEgbmFtZT0icmVzb3VyY2VzIj48L2E+CisjIyBSZXNvdXJjZXMKKworKipBdmFpbGFibGUgb24g
dGhlIENsaWVudC1zaWRlIG9ubHkuKiogQW4gb2JqZWN0IGxpdGVyYWwgY29udGFpbmluZyBmdW5j
dGlvbnMuIElmIGEgaG9zdCBvYmplY3QgaXMgc3BlY2lmaWVkLCB5b3VyIHJvdXRlIGRlZmluaXRp
b25zIGNhbiBwcm92aWRlIHN0cmluZyBsaXRlcmFscyB0aGF0IHJlcHJlc2VudCB0aGUgZnVuY3Rp
b24gbmFtZXMgaW5zaWRlIHRoZSBob3N0IG9iamVjdC4gQSBob3N0IG9iamVjdCBjYW4gcHJvdmlk
ZSB0aGUgbWVhbnMgZm9yIGJldHRlciBlbmNhcHN1bGF0aW9uIGFuZCBkZXNpZ24uCisKK2BgYCBq
cworCisgIHZhciByb3V0ZXIgPSBSb3V0ZXIoeworCisgICAgJy9oZWxsbyc6IHsKKyAgICAgICcv
dXNhJzogJ2FtZXJpY2FzJywKKyAgICAgICcvY2hpbmEnOiAnYXNpYScKKyAgICB9CisKKyAgfSku
Y29uZmlndXJlKHsgcmVzb3VyY2U6IGNvbnRhaW5lciB9KS5pbml0KCk7CisKKyAgdmFyIGNvbnRh
aW5lciA9IHsKKyAgICBhbWVyaWNhczogZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9LAorICAg
IGNoaW5hOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH0KKyAgfTsKKworYGBgCisKKzxhIG5h
bWU9Imhpc3RvcnktYXBpIj48L2E+CisjIyBIaXN0b3J5IEFQSQorCisqKkF2YWlsYWJsZSBvbiB0
aGUgQ2xpZW50LXNpZGUgb25seS4qKiBEaXJlY3RvciBzdXBwb3J0cyB1c2luZyBIVE1MNSBIaXN0
b3J5IEFQSSBpbnN0ZWFkIG9mIGhhc2ggZnJhZ21lbnRzIGZvciBuYXZpZ2F0aW9uLiBUbyB1c2Ug
dGhlIEFQSSwgcGFzcyBge2h0bWw1aGlzdG9yeTogdHJ1ZX1gIHRvIGBjb25maWd1cmUoKWAuIFVz
ZSBvZiB0aGUgQVBJIGlzIGVuYWJsZWQgb25seSBpZiB0aGUgY2xpZW50IHN1cHBvcnRzIGBwdXNo
U3RhdGUoKWAuCisKK1VzaW5nIHRoZSBBUEkgZ2l2ZXMgeW91IGNsZWFuZXIgVVJJcyBidXQgdGhl
eSBjb21lIHdpdGggYSBjb3N0LiBVbmxpa2Ugd2l0aCBoYXNoIGZyYWdtZW50cyB5b3VyIHJvdXRl
IFVSSXMgbXVzdCBleGlzdC4gV2hlbiB0aGUgY2xpZW50IGVudGVycyBhIHBhZ2UsIHNheSBodHRw
Oi8vZm9vLmNvbS9iYXIvYmF6LCB0aGUgd2ViIHNlcnZlciBtdXN0IHJlc3BvbmQgd2l0aCBzb21l
dGhpbmcgbWVhbmluZ2Z1bC4gVXN1YWxseSB0aGlzIG1lYW5zIHRoYXQgeW91ciB3ZWIgc2VydmVy
IGNoZWNrcyB0aGUgVVJJIHBvaW50cyB0byBzb21ldGhpbmcgdGhhdCwgaW4gYSBzZW5zZSwgZXhp
c3RzLCBhbmQgdGhlbiBzZXJ2ZXMgdGhlIGNsaWVudCB0aGUgSmF2YVNjcmlwdCBhcHBsaWNhdGlv
bi4KKworSWYgeW91J3JlIGFmdGVyIGEgc2luZ2xlLXBhZ2UgYXBwbGljYXRpb24geW91IGNhbiBu
b3QgdXNlIHBsYWluIG9sZCBgPGEgaHJlZj0iL2Jhci9iYXoiPmAgdGFncyBmb3IgbmF2aWdhdGlv
biBhbnltb3JlLiBXaGVuIHN1Y2ggbGluayBpcyBjbGlja2VkLCB3ZWIgYnJvd3NlcnMgdHJ5IHRv
IGFzayBmb3IgdGhlIHJlc291cmNlIGZyb20gc2VydmVyIHdoaWNoIGlzIG5vdCBvZiBjb3Vyc2Ug
ZGVzaXJlZCBmb3IgYSBzaW5nbGUtcGFnZSBhcHBsaWNhdGlvbi4gSW5zdGVhZCB5b3UgbmVlZCB0
byB1c2UgZS5nLiBjbGljayBoYW5kbGVycyBhbmQgY2FsbCB0aGUgYHNldFJvdXRlKClgIG1ldGhv
ZCB5b3Vyc2VsZi4KKworPGEgbmFtZT0iYXR0YWNoLXRvLXRoaXMiPjwvYT4KKyMjIEF0dGFjaCBQ
cm9wZXJ0aWVzIFRvIGB0aGlzYAorCitHZW5lcmFsbHksIHRoZSBgdGhpc2Agb2JqZWN0IGJvdW5k
IHRvIHJvdXRlIGhhbmRsZXJzLCB3aWxsIGNvbnRhaW4gdGhlIHJlcXVlc3QgaW4gYHRoaXMucmVx
YCBhbmQgdGhlIHJlc3BvbnNlIGluIGB0aGlzLnJlc2AuIE9uZSBtYXkgYXR0YWNoIGFkZGl0aW9u
YWwgcHJvcGVydGllcyB0byBgdGhpc2Agd2l0aCB0aGUgYHJvdXRlci5hdHRhY2hgIG1ldGhvZDoK
KworYGBganMKKyAgdmFyIGRpcmVjdG9yID0gcmVxdWlyZSgnZGlyZWN0b3InKTsKKworICB2YXIg
cm91dGVyID0gbmV3IGRpcmVjdG9yLmh0dHAuUm91dGVyKCkuY29uZmlndXJlKG9wdGlvbnMpOwor
CisgIC8vCisgIC8vIEF0dGFjaCBwcm9wZXJ0aWVzIHRvIGB0aGlzYAorICAvLworICByb3V0ZXIu
YXR0YWNoKGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLmRhdGEgPSBbMSwyLDNdOworICB9KTsKKwor
ICAvLworICAvLyBBY2Nlc3MgcHJvcGVydGllcyBhdHRhY2hlZCB0byBgdGhpc2AgaW4geW91ciBy
b3V0ZXMhCisgIC8vCisgIHJvdXRlci5nZXQoJy9oZWxsbycsIGZ1bmN0aW9uICgpIHsKKyAgICB0
aGlzLnJlcy53cml0ZUhlYWQoMjAwLCB7ICdjb250ZW50LXR5cGUnOiAndGV4dC9wbGFpbicgfSk7
CisKKyAgICAvLworICAgIC8vIFJlc3BvbnNlIHdpbGwgYmUgYFsxLDIsM11gIQorICAgIC8vCisg
ICAgdGhpcy5yZXMuZW5kKHRoaXMuZGF0YSk7CisgIH0pOworYGBgCisKK1RoaXMgQVBJIG1heSBi
ZSB1c2VkIHRvIGF0dGFjaCBjb252ZW5pZW5jZSBtZXRob2RzIHRvIHRoZSBgdGhpc2AgY29udGV4
dCBvZiByb3V0ZSBoYW5kbGVycy4KKworPGEgbmFtZT0iaHR0cC1zdHJlYW1pbmctYm9keS1wYXJz
aW5nIj4KKyMjIEhUVFAgU3RyZWFtaW5nIGFuZCBCb2R5IFBhcnNpbmcKKworV2hlbiB5b3UgYXJl
IHBlcmZvcm1pbmcgSFRUUCByb3V0aW5nIHRoZXJlIGFyZSB0d28gY29tbW9uIHNjZW5hcmlvczoK
KworKiBCdWZmZXIgdGhlIHJlcXVlc3QgYm9keSBhbmQgcGFyc2UgaXQgYWNjb3JkaW5nIHRvIHRo
ZSBgQ29udGVudC1UeXBlYCBoZWFkZXIgKHVzdWFsbHkgYGFwcGxpY2F0aW9uL2pzb25gIG9yIGBh
cHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRgKS4KKyogU3RyZWFtIHRoZSByZXF1ZXN0
IGJvZHkgYnkgbWFudWFsbHkgY2FsbGluZyBgLnBpcGVgIG9yIGxpc3RlbmluZyB0byB0aGUgYGRh
dGFgIGFuZCBgZW5kYCBldmVudHMuCisKK0J5IGRlZmF1bHQgYGRpcmVjdG9yLmh0dHAuUm91dGVy
KClgIHdpbGwgYXR0ZW1wdCB0byBwYXJzZSBlaXRoZXIgdGhlIGAuY2h1bmtzYCBvciBgLmJvZHlg
IHByb3BlcnRpZXMgc2V0IG9uIHRoZSByZXF1ZXN0IHBhcmFtZXRlciBwYXNzZWQgdG8gYHJvdXRl
ci5kaXNwYXRjaChyZXF1ZXN0LCByZXNwb25zZSwgY2FsbGJhY2spYC4gVGhlIHJvdXRlciBpbnN0
YW5jZSB3aWxsIGFsc28gd2FpdCBmb3IgdGhlIGBlbmRgIGV2ZW50IGJlZm9yZSBmaXJpbmcgYW55
IHJvdXRlcy4KKworKipEZWZhdWx0IEJlaGF2aW9yKioKKworYGBgIGpzCisgIHZhciBkaXJlY3Rv
ciA9IHJlcXVpcmUoJ2RpcmVjdG9yJyk7CisKKyAgdmFyIHJvdXRlciA9IG5ldyBkaXJlY3Rvci5o
dHRwLlJvdXRlcigpOworCisgIHJvdXRlci5nZXQoJy8nLCBmdW5jdGlvbiAoKSB7CisgICAgLy8K
KyAgICAvLyBUaGlzIHdpbGwgbm90IHdvcmssIGJlY2F1c2UgYWxsIG9mIHRoZSBkYXRhCisgICAg
Ly8gZXZlbnRzIGFuZCB0aGUgZW5kIGV2ZW50IGhhdmUgYWxyZWFkeSBmaXJlZC4KKyAgICAvLwor
ICAgIHRoaXMucmVxLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7CisgICAgICBjb25zb2xl
LmxvZyhjaHVuaykKKyAgICB9KTsKKyAgfSk7CitgYGAKKworSW4gW2ZsYXRpcm9uXVsyXSwgYGRp
cmVjdG9yYCBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggW3VuaW9uXVszXSB3aGljaCB1c2Vz
IGEgYEJ1ZmZlcmVkU3RyZWFtYCBwcm94eSB0byB0aGUgcmF3IGBodHRwLlJlcXVlc3RgIGluc3Rh
bmNlLiBbdW5pb25dWzNdIHdpbGwgc2V0IHRoZSBgcmVxLmNodW5rc2AgcHJvcGVydHkgZm9yIHlv
dSBhbmQgZGlyZWN0b3Igd2lsbCBhdXRvbWF0aWNhbGx5IHBhcnNlIHRoZSBib2R5LiBJZiB5b3Ug
d2lzaCB0byBwZXJmb3JtIHRoaXMgYnVmZmVyaW5nIHlvdXJzZWxmIGRpcmVjdGx5IHdpdGggYGRp
cmVjdG9yYCB5b3UgY2FuIHVzZSBhIHNpbXBsZSByZXF1ZXN0IGhhbmRsZXIgaW4geW91ciBodHRw
IHNlcnZlcjoKKworYGBgIGpzCisgIHZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpLAorICAgICAg
ZGlyZWN0b3IgPSByZXF1aXJlKCdkaXJlY3RvcicpOworCisgIHZhciByb3V0ZXIgPSBuZXcgZGly
ZWN0b3IuaHR0cC5Sb3V0ZXIoKTsKKworICB2YXIgc2VydmVyID0gaHR0cC5jcmVhdGVTZXJ2ZXIo
ZnVuY3Rpb24gKHJlcSwgcmVzKSB7CisgICAgcmVxLmNodW5rcyA9IFtdOworICAgIHJlcS5vbign
ZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeworICAgICAgcmVxLmNodW5rcy5wdXNoKGNodW5rLnRv
U3RyaW5nKCkpOworICAgIH0pOworCisgICAgcm91dGVyLmRpc3BhdGNoKHJlcSwgcmVzLCBmdW5j
dGlvbiAoZXJyKSB7CisgICAgICBpZiAoZXJyKSB7CisgICAgICAgIHJlcy53cml0ZUhlYWQoNDA0
KTsKKyAgICAgICAgcmVzLmVuZCgpOworICAgICAgfQorCisgICAgICBjb25zb2xlLmxvZygnU2Vy
dmVkICcgKyByZXEudXJsKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgcm91dGVyLnBvc3QoJy8nLCBm
dW5jdGlvbiAoKSB7CisgICAgdGhpcy5yZXMud3JpdGVIZWFkKDIwMCwgeyAnQ29udGVudC1UeXBl
JzogJ2FwcGxpY2F0aW9uL2pzb24nIH0pCisgICAgdGhpcy5yZXMuZW5kKEpTT04uc3RyaW5naWZ5
KHRoaXMucmVxLmJvZHkpKTsKKyAgfSk7CitgYGAKKworKipTdHJlYW1pbmcgU3VwcG9ydCoqCisK
K0lmIHlvdSB3aXNoIHRvIGdldCBhY2Nlc3MgdG8gdGhlIHJlcXVlc3Qgc3RyZWFtIGJlZm9yZSB0
aGUgYGVuZGAgZXZlbnQgaXMgZmlyZWQsIHlvdSBjYW4gcGFzcyB0aGUgYHsgc3RyZWFtOiB0cnVl
IH1gIG9wdGlvbnMgdG8gdGhlIHJvdXRlLgorCitgYGAganMKKyAgdmFyIGRpcmVjdG9yID0gcmVx
dWlyZSgnZGlyZWN0b3InKTsKKworICB2YXIgcm91dGVyID0gbmV3IGRpcmVjdG9yLmh0dHAuUm91
dGVyKCk7CisKKyAgcm91dGVyLmdldCgnLycsIHsgc3RyZWFtOiB0cnVlIH0sIGZ1bmN0aW9uICgp
IHsKKyAgICAvLworICAgIC8vIFRoaXMgd2lsbCB3b3JrIGJlY2F1c2UgdGhlIHJvdXRlIGhhbmRs
ZXIgaXMgaW52b2tlZAorICAgIC8vIGltbWVkaWF0ZWx5IHdpdGhvdXQgd2FpdGluZyBmb3IgdGhl
IGBlbmRgIGV2ZW50LgorICAgIC8vCisgICAgdGhpcy5yZXEub24oJ2RhdGEnLCBmdW5jdGlvbiAo
Y2h1bmspIHsKKyAgICAgIGNvbnNvbGUubG9nKGNodW5rKTsKKyAgICB9KTsKKyAgfSk7CitgYGAK
KworPGEgbmFtZT0iaW5zdGFuY2UtbWV0aG9kcyI+PC9hPgorIyMgSW5zdGFuY2UgbWV0aG9kcwor
CisjIyMgY29uZmlndXJlKG9wdGlvbnMpCisqIGBvcHRpb25zYCB7T2JqZWN0fTogT3B0aW9ucyB0
byBjb25maWd1cmUgdGhpcyBpbnN0YW5jZSB3aXRoLgorCitDb25maWd1cmVzIHRoZSBSb3V0ZXIg
aW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGBvcHRpb25zYC4gU2VlIFtDb25maWd1cmF0aW9u
XSgjY29uZmlndXJhdGlvbikgZm9yIG1vcmUgZG9jdW1lbnRhdGlvbi4KKworIyMjIHBhcmFtKHRv
a2VuLCBtYXRjaGVyKQorKiB0b2tlbiB7c3RyaW5nfTogTmFtZWQgcGFyYW1ldGVyIHRva2VuIHRv
IHNldCB0byB0aGUgc3BlY2lmaWVkIGBtYXRjaGVyYAorKiBtYXRjaGVyIHtzdHJpbmd8UmVnZXhw
fTogTWF0Y2hlciBmb3IgdGhlIHNwZWNpZmllZCBgdG9rZW5gLgorCitBZGRzIGEgcm91dGUgZnJh
Z21lbnQgZm9yIHRoZSBnaXZlbiBzdHJpbmcgYHRva2VuYCB0byB0aGUgc3BlY2lmaWVkIHJlZ2V4
IGBtYXRjaGVyYCB0byB0aGlzIFJvdXRlciBpbnN0YW5jZS4gU2VlIFtVUkwgUGFyYW1ldGVyc10o
I3VybC1wYXJhbXMpIGZvciBtb3JlIGRvY3VtZW50YXRpb24uCisKKyMjIyBvbihtZXRob2QsIHBh
dGgsIHJvdXRlKQorKiBgbWV0aG9kYCB7c3RyaW5nfTogTWV0aG9kIHRvIGluc2VydCB3aXRoaW4g
dGhlIFJvdXRpbmcgVGFibGUgKGUuZy4gYG9uYCwgYGdldGAsIGV0Yy4pLgorKiBgcGF0aGAge3N0
cmluZ306IFBhdGggd2l0aGluIHRoZSBSb3V0aW5nIFRhYmxlIHRvIHNldCB0aGUgYHJvdXRlYCB0
by4KKyogYHJvdXRlYCB7ZnVuY3Rpb258QXJyYXl9OiBSb3V0ZSBoYW5kbGVyIHRvIGludm9rZSBm
b3IgdGhlIGBtZXRob2RgIGFuZCBgcGF0aGAuCisKK0FkZHMgdGhlIGByb3V0ZWAgaGFuZGxlciBm
b3IgdGhlIHNwZWNpZmllZCBgbWV0aG9kYCBhbmQgYHBhdGhgIHdpdGhpbiB0aGUgW1JvdXRpbmcg
VGFibGVdKCNyb3V0aW5nLXRhYmxlKS4KKworIyMjIHBhdGgocGF0aCwgcm91dGVzRm4pCisqIGBw
YXRoYCB7c3RyaW5nfFJlZ2V4cH06IFNjb3BlIHdpdGhpbiB0aGUgUm91dGluZyBUYWJsZSB0byBp
bnZva2UgdGhlIGByb3V0ZXNGbmAgd2l0aGluLgorKiBgcm91dGVzRm5gIHtmdW5jdGlvbn06IEFk
aG9jIFJvdXRpbmcgZnVuY3Rpb24gd2l0aCBjYWxscyB0byBgdGhpcy5vbigpYCwgYHRoaXMuZ2V0
KClgIGV0Yy4KKworSW52b2tlcyB0aGUgYHJvdXRlc0ZuYCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRo
ZSBzcGVjaWZpZWQgYHBhdGhgIGZvciB0aGlzIFJvdXRlciBpbnN0YW5jZS4KKworIyMjIGRpc3Bh
dGNoKG1ldGhvZCwgcGF0aFssIGNhbGxiYWNrXSkKKyogbWV0aG9kIHtzdHJpbmd9OiBNZXRob2Qg
dG8gaW52b2tlIGhhbmRsZXJzIGZvciB3aXRoaW4gdGhlIFJvdXRpbmcgVGFibGUKKyogcGF0aCB7
c3RyaW5nfTogUGF0aCB3aXRoaW4gdGhlIFJvdXRpbmcgVGFibGUgdG8gbWF0Y2gKKyogY2FsbGJh
Y2sge2Z1bmN0aW9ufTogSW52b2tlZCBvbmNlIGFsbCByb3V0ZSBoYW5kbGVycyBoYXZlIGJlZW4g
Y2FsbGVkLgorCitEaXNwYXRjaGVzIHRoZSByb3V0ZSBoYW5kbGVycyBtYXRjaGVkIHdpdGhpbiB0
aGUgW1JvdXRpbmcgVGFibGVdKCNyb3V0aW5nLXRhYmxlKSBmb3IgdGhpcyBpbnN0YW5jZSBmb3Ig
dGhlIHNwZWNpZmllZCBgbWV0aG9kYCBhbmQgYHBhdGhgLgorCisjIyMgbW91bnQocm91dGVzLCBw
YXRoKQorKiByb3V0ZXMge29iamVjdH06IFBhcnRpYWwgcm91dGluZyB0YWJsZSB0byBpbnNlcnQg
aW50byB0aGlzIGluc3RhbmNlLgorKiBwYXRoIHtzdHJpbmd8UmVnZXhwfTogUGF0aCB3aXRoaW4g
dGhlIFJvdXRpbmcgVGFibGUgdG8gaW5zZXJ0IHRoZSBgcm91dGVzYCBpbnRvLgorCitJbnNlcnRz
IHRoZSBwYXJ0aWFsIFtSb3V0aW5nIFRhYmxlXSgjcm91dGluZy10YWJsZSksIGByb3V0ZXNgLCBp
bnRvIHRoZSBSb3V0aW5nIFRhYmxlIGZvciB0aGlzIFJvdXRlciBpbnN0YW5jZSBhdCB0aGUgc3Bl
Y2lmaWVkIGBwYXRoYC4KKworIyMgSW5zdGFuY2UgbWV0aG9kcyAoQ2xpZW50LXNpZGUgb25seSkK
KworIyMjIGluaXQoW3JlZGlyZWN0XSkKKyogYHJlZGlyZWN0YCB7U3RyaW5nfTogVGhpcyB2YWx1
ZSB3aWxsIGJlIHVzZWQgaWYgJy8jLycgaXMgbm90IGZvdW5kIGluIHRoZSBVUkwuIChlLmcuLCBp
bml0KCcvJykgd2lsbCByZXNvbHZlIHRvICcvIy8nLCBpbml0KCdmb28nKSB3aWxsIHJlc29sdmUg
dG8gJy8jZm9vJykuCisKK0luaXRpYWxpemUgdGhlIHJvdXRlciwgc3RhcnQgbGlzdGVuaW5nIGZv
ciBjaGFuZ2VzIHRvIHRoZSBVUkwuCisKKyMjIyBnZXRSb3V0ZShbaW5kZXhdKQorKiBgaW5kZXhg
IHtOdW1iZXJ9OiBUaGUgaGFzaCB2YWx1ZSBpcyBkaXZpZGVkIGJ5IGZvcndhcmQgc2xhc2hlcywg
ZWFjaCBzZWN0aW9uIHRoZW4gaGFzIGFuIGluZGV4LCBpZiB0aGlzIGlzIHByb3ZpZGVkLCBvbmx5
IHRoYXQgc2VjdGlvbiBvZiB0aGUgcm91dGUgd2lsbCBiZSByZXR1cm5lZC4KKworUmV0dXJucyB0
aGUgZW50aXJlIHJvdXRlIG9yIGp1c3QgYSBzZWN0aW9uIG9mIGl0LgorCisjIyMgc2V0Um91dGUo
cm91dGUpCisqIGByb3V0ZWAge1N0cmluZ306IFN1cHBseSBhIHJvdXRlIHZhbHVlLCBzdWNoIGFz
IGBob21lL3N0YXRzYC4KKworU2V0IHRoZSBjdXJyZW50IHJvdXRlLgorCisjIyMgc2V0Um91dGUo
c3RhcnQsIGxlbmd0aCkKKyogYHN0YXJ0YCB7TnVtYmVyfSAtIFRoZSBwb3NpdGlvbiBhdCB3aGlj
aCB0byBzdGFydCByZW1vdmluZyBpdGVtcy4KKyogYGxlbmd0aGAge051bWJlcn0gLSBUaGUgbnVt
YmVyIG9mIGl0ZW1zIHRvIHJlbW92ZSBmcm9tIHRoZSByb3V0ZS4KKworUmVtb3ZlIGEgc2VnbWVu
dCBmcm9tIHRoZSBjdXJyZW50IHJvdXRlLgorCisjIyMgc2V0Um91dGUoaW5kZXgsIHZhbHVlKQor
KiBgaW5kZXhgIHtOdW1iZXJ9IC0gVGhlIGhhc2ggdmFsdWUgaXMgZGl2aWRlZCBieSBmb3J3YXJk
IHNsYXNoZXMsIGVhY2ggc2VjdGlvbiB0aGVuIGhhcyBhbiBpbmRleC4KKyogYHZhbHVlYCB7U3Ry
aW5nfSAtIFRoZSBuZXcgdmFsdWUgdG8gYXNzaWduIHRoZSB0aGUgcG9zaXRpb24gaW5kaWNhdGVk
IGJ5IHRoZSBmaXJzdCBwYXJhbWV0ZXIuCisKK1NldCBhIHNlZ21lbnQgb2YgdGhlIGN1cnJlbnQg
cm91dGUuCisKKzxhIG5hbWU9ImZhcSI+PC9hPgorIyBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9u
cworCisjIyBXaGF0IEFib3V0IFNFTz8KKworSXMgdXNpbmcgYSBDbGllbnQtc2lkZSByb3V0ZXIg
YSBwcm9ibGVtIGZvciBTRU8/IFllcy4gSWYgYWR2ZXJ0aXNpbmcgaXMgYSByZXF1aXJlbWVudCwg
eW91IGFyZSBwcm9iYWJseSBidWlsZGluZyBhICJXZWIgUGFnZSIgYW5kIG5vdCBhICJXZWIgQXBw
bGljYXRpb24iLiBEaXJlY3RvciBvbiB0aGUgY2xpZW50IGlzIG1lYW50IGZvciBzY3JpcHQtaGVh
dnkgV2ViIEFwcGxpY2F0aW9ucy4KKworIyBMaWNlbmNlCisKKyhUaGUgTUlUIExpY2Vuc2UpCisK
K0NvcHlyaWdodCAoYykgMjAxMCBOb2Rlaml0c3UgSW5jLiA8aHR0cDovL3d3dy50d2l0dGVyLmNv
bS9ub2Rlaml0c3U+CisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh
cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQg
YXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgJ1NvZnR3YXJlJyksIHRvIGRlYWwg
aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxp
bWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs
IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdh
cmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNo
ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUg
YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBi
ZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBT
b2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FS
UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg
TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM
QUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg
Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBD
T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1Mg
SU4gVEhFIFNPRlRXQVJFLgorCitbMF06IGh0dHA6Ly9naXRodWIuY29tL2ZsYXRpcm9uL2RpcmVj
dG9yCitbMV06IGh0dHBzOi8vZ2l0aHViLmNvbS9mbGF0aXJvbi9kaXJlY3Rvci9ibG9iL21hc3Rl
ci9idWlsZC9kaXJlY3Rvci5taW4uanMKK1syXTogaHR0cDovL2dpdGh1Yi5jb20vZmxhdGlyb24v
ZmxhdGlyb24KK1szXTogaHR0cDovL2dpdGh1Yi5jb20vZmxhdGlyb24vdW5pb24KSW5kZXg6IFBl
cmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9sYWJzL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9yZWFjdC9ib3dlcl9jb21wb25lbnRzL2RpcmVjdG9yL2J1aWxkL2RpcmVjdG9yLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9s
YWJzL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ib3dlcl9jb21wb25lbnRzL2RpcmVjdG9y
L2J1aWxkL2RpcmVjdG9yLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lv
dUV2ZW5CZW5jaC90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2Jvd2Vy
X2NvbXBvbmVudHMvZGlyZWN0b3IvYnVpbGQvZGlyZWN0b3IuanMJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNzEyIEBACisKKworLy8KKy8vIEdlbmVyYXRlZCBvbiBTdW4gRGVjIDE2IDIwMTIgMjI6
NDc6MDUgR01ULTA1MDAgKEVTVCkgYnkgTm9kZWppdHN1LCBJbmMgKFVzaW5nIENvZGVzdXJnZW9u
KS4KKy8vIFZlcnNpb24gMS4xLjkKKy8vCisKKyhmdW5jdGlvbiAoZXhwb3J0cykgeworCisKKy8q
CisgKiBicm93c2VyLmpzOiBCcm93c2VyIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgZm9yIGRpcmVj
dG9yLgorICoKKyAqIChDKSAyMDExLCBOb2Rlaml0c3UgSW5jLgorICogTUlUIExJQ0VOU0UKKyAq
CisgKi8KKworaWYgKCFBcnJheS5wcm90b3R5cGUuZmlsdGVyKSB7CisgIEFycmF5LnByb3RvdHlw
ZS5maWx0ZXIgPSBmdW5jdGlvbihmaWx0ZXIsIHRoYXQpIHsKKyAgICB2YXIgb3RoZXIgPSBbXSwg
djsKKyAgICBmb3IgKHZhciBpID0gMCwgbiA9IHRoaXMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7Cisg
ICAgICBpZiAoaSBpbiB0aGlzICYmIGZpbHRlci5jYWxsKHRoYXQsIHYgPSB0aGlzW2ldLCBpLCB0
aGlzKSkgeworICAgICAgICBvdGhlci5wdXNoKHYpOworICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gb3RoZXI7CisgIH07Cit9CisKK2lmICghQXJyYXkuaXNBcnJheSl7CisgIEFycmF5LmlzQXJy
YXkgPSBmdW5jdGlvbihvYmopIHsKKyAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmlu
Zy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7CisgIH07Cit9CisKK3ZhciBkbG9jID0g
ZG9jdW1lbnQubG9jYXRpb247CisKK2Z1bmN0aW9uIGRsb2NIYXNoRW1wdHkoKSB7CisgIC8vIE5v
bi1JRSBicm93c2VycyByZXR1cm4gJycgd2hlbiB0aGUgYWRkcmVzcyBiYXIgc2hvd3MgJyMnOyBE
aXJlY3RvcidzIGxvZ2ljCisgIC8vIGFzc3VtZXMgYm90aCBtZWFuIGVtcHR5LgorICByZXR1cm4g
ZGxvYy5oYXNoID09PSAnJyB8fCBkbG9jLmhhc2ggPT09ICcjJzsKK30KKwordmFyIGxpc3RlbmVy
ID0geworICBtb2RlOiAnbW9kZXJuJywKKyAgaGFzaDogZGxvYy5oYXNoLAorICBoaXN0b3J5OiBm
YWxzZSwKKworICBjaGVjazogZnVuY3Rpb24gKCkgeworICAgIHZhciBoID0gZGxvYy5oYXNoOwor
ICAgIGlmIChoICE9IHRoaXMuaGFzaCkgeworICAgICAgdGhpcy5oYXNoID0gaDsKKyAgICAgIHRo
aXMub25IYXNoQ2hhbmdlZCgpOworICAgIH0KKyAgfSwKKworICBmaXJlOiBmdW5jdGlvbiAoKSB7
CisgICAgaWYgKHRoaXMubW9kZSA9PT0gJ21vZGVybicpIHsKKyAgICAgIHRoaXMuaGlzdG9yeSA9
PT0gdHJ1ZSA/IHdpbmRvdy5vbnBvcHN0YXRlKCkgOiB3aW5kb3cub25oYXNoY2hhbmdlKCk7Cisg
ICAgfQorICAgIGVsc2UgeworICAgICAgdGhpcy5vbkhhc2hDaGFuZ2VkKCk7CisgICAgfQorICB9
LAorCisgIGluaXQ6IGZ1bmN0aW9uIChmbiwgaGlzdG9yeSkgeworICAgIHZhciBzZWxmID0gdGhp
czsKKyAgICB0aGlzLmhpc3RvcnkgPSBoaXN0b3J5OworCisgICAgaWYgKCFSb3V0ZXIubGlzdGVu
ZXJzKSB7CisgICAgICBSb3V0ZXIubGlzdGVuZXJzID0gW107CisgICAgfQorCisgICAgZnVuY3Rp
b24gb25jaGFuZ2Uob25DaGFuZ2VFdmVudCkgeworICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBS
b3V0ZXIubGlzdGVuZXJzLmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgICBSb3V0ZXIubGlz
dGVuZXJzW2ldKG9uQ2hhbmdlRXZlbnQpOworICAgICAgfQorICAgIH0KKworICAgIC8vbm90ZSBJ
RTggaXMgYmVpbmcgY291bnRlZCBhcyAnbW9kZXJuJyBiZWNhdXNlIGl0IGhhcyB0aGUgaGFzaGNo
YW5nZSBldmVudAorICAgIGlmICgnb25oYXNoY2hhbmdlJyBpbiB3aW5kb3cgJiYgKGRvY3VtZW50
LmRvY3VtZW50TW9kZSA9PT0gdW5kZWZpbmVkCisgICAgICB8fCBkb2N1bWVudC5kb2N1bWVudE1v
ZGUgPiA3KSkgeworICAgICAgLy8gQXQgbGVhc3QgZm9yIG5vdyBIVE1MNSBoaXN0b3J5IGlzIGF2
YWlsYWJsZSBmb3IgJ21vZGVybicgYnJvd3NlcnMgb25seQorICAgICAgaWYgKHRoaXMuaGlzdG9y
eSA9PT0gdHJ1ZSkgeworICAgICAgICAvLyBUaGVyZSBpcyBhbiBvbGQgYnVnIGluIENocm9tZSB0
aGF0IGNhdXNlcyBvbnBvcHN0YXRlIHRvIGZpcmUgZXZlbgorICAgICAgICAvLyB1cG9uIGluaXRp
YWwgcGFnZSBsb2FkLiBTaW5jZSB0aGUgaGFuZGxlciBpcyBydW4gbWFudWFsbHkgaW4gaW5pdCgp
LAorICAgICAgICAvLyB0aGlzIHdvdWxkIGNhdXNlIENocm9tZSB0byBydW4gaXQgdHdpc2UuIEN1
cnJlbnRseSB0aGUgb25seQorICAgICAgICAvLyB3b3JrYXJvdW5kIHNlZW1zIHRvIGJlIHRvIHNl
dCB0aGUgaGFuZGxlciBhZnRlciB0aGUgaW5pdGlhbCBwYWdlIGxvYWQKKyAgICAgICAgLy8gaHR0
cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NjMwNDAKKyAg
ICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICB3aW5kb3cub25wb3BzdGF0
ZSA9IG9uY2hhbmdlOworICAgICAgICB9LCA1MDApOworICAgICAgfQorICAgICAgZWxzZSB7Cisg
ICAgICAgIHdpbmRvdy5vbmhhc2hjaGFuZ2UgPSBvbmNoYW5nZTsKKyAgICAgIH0KKyAgICAgIHRo
aXMubW9kZSA9ICdtb2Rlcm4nOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8vCisgICAgICAv
LyBJRSBzdXBwb3J0LCBiYXNlZCBvbiBhIGNvbmNlcHQgYnkgRXJpayBBcnZpZHNvbiAuLi4KKyAg
ICAgIC8vCisgICAgICB2YXIgZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUn
KTsKKyAgICAgIGZyYW1lLmlkID0gJ3N0YXRlLWZyYW1lJzsKKyAgICAgIGZyYW1lLnN0eWxlLmRp
c3BsYXkgPSAnbm9uZSc7CisgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZyYW1lKTsK
KyAgICAgIHRoaXMud3JpdGVGcmFtZSgnJyk7CisKKyAgICAgIGlmICgnb25wcm9wZXJ0eWNoYW5n
ZScgaW4gZG9jdW1lbnQgJiYgJ2F0dGFjaEV2ZW50JyBpbiBkb2N1bWVudCkgeworICAgICAgICBk
b2N1bWVudC5hdHRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICBpZiAoZXZlbnQucHJvcGVydHlOYW1lID09PSAnbG9jYXRpb24nKSB7CisgICAgICAg
ICAgICBzZWxmLmNoZWNrKCk7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0KKwor
ICAgICAgd2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uICgpIHsgc2VsZi5jaGVjaygpOyB9LCA1
MCk7CisKKyAgICAgIHRoaXMub25IYXNoQ2hhbmdlZCA9IG9uY2hhbmdlOworICAgICAgdGhpcy5t
b2RlID0gJ2xlZ2FjeSc7CisgICAgfQorCisgICAgUm91dGVyLmxpc3RlbmVycy5wdXNoKGZuKTsK
KworICAgIHJldHVybiB0aGlzLm1vZGU7CisgIH0sCisKKyAgZGVzdHJveTogZnVuY3Rpb24gKGZu
KSB7CisgICAgaWYgKCFSb3V0ZXIgfHwgIVJvdXRlci5saXN0ZW5lcnMpIHsKKyAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICB2YXIgbGlzdGVuZXJzID0gUm91dGVyLmxpc3RlbmVyczsKKworICAg
IGZvciAodmFyIGkgPSBsaXN0ZW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAg
IGlmIChsaXN0ZW5lcnNbaV0gPT09IGZuKSB7CisgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwg
MSk7CisgICAgICB9CisgICAgfQorICB9LAorCisgIHNldEhhc2g6IGZ1bmN0aW9uIChzKSB7Cisg
ICAgLy8gTW96aWxsYSBhbHdheXMgYWRkcyBhbiBlbnRyeSB0byB0aGUgaGlzdG9yeQorICAgIGlm
ICh0aGlzLm1vZGUgPT09ICdsZWdhY3knKSB7CisgICAgICB0aGlzLndyaXRlRnJhbWUocyk7Cisg
ICAgfQorCisgICAgaWYgKHRoaXMuaGlzdG9yeSA9PT0gdHJ1ZSkgeworICAgICAgd2luZG93Lmhp
c3RvcnkucHVzaFN0YXRlKHt9LCBkb2N1bWVudC50aXRsZSwgcyk7CisgICAgICAvLyBGaXJlIGFu
IG9ucG9wc3RhdGUgZXZlbnQgbWFudWFsbHkgc2luY2UgcHVzaGluZyBkb2VzIG5vdCBvYnZpb3Vz
bHkKKyAgICAgIC8vIHRyaWdnZXIgdGhlIHBvcCBldmVudC4KKyAgICAgIHRoaXMuZmlyZSgpOwor
ICAgIH0gZWxzZSB7CisgICAgICBkbG9jLmhhc2ggPSAoc1swXSA9PT0gJy8nKSA/IHMgOiAnLycg
KyBzOworICAgIH0KKyAgICByZXR1cm4gdGhpczsKKyAgfSwKKworICB3cml0ZUZyYW1lOiBmdW5j
dGlvbiAocykgeworICAgIC8vIElFIHN1cHBvcnQuLi4KKyAgICB2YXIgZiA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdzdGF0ZS1mcmFtZScpOworICAgIHZhciBkID0gZi5jb250ZW50RG9jdW1l
bnQgfHwgZi5jb250ZW50V2luZG93LmRvY3VtZW50OworICAgIGQub3BlbigpOworICAgIGQud3Jp
dGUoIjxzY3JpcHQ+X2hhc2ggPSAnIiArIHMgKyAiJzsgb25sb2FkID0gcGFyZW50Lmxpc3RlbmVy
LnN5bmNIYXNoOzxzY3JpcHQ+Iik7CisgICAgZC5jbG9zZSgpOworICB9LAorCisgIHN5bmNIYXNo
OiBmdW5jdGlvbiAoKSB7CisgICAgLy8gSUUgc3VwcG9ydC4uLgorICAgIHZhciBzID0gdGhpcy5f
aGFzaDsKKyAgICBpZiAocyAhPSBkbG9jLmhhc2gpIHsKKyAgICAgIGRsb2MuaGFzaCA9IHM7Cisg
ICAgfQorICAgIHJldHVybiB0aGlzOworICB9LAorCisgIG9uSGFzaENoYW5nZWQ6IGZ1bmN0aW9u
ICgpIHt9Cit9OworCit2YXIgUm91dGVyID0gZXhwb3J0cy5Sb3V0ZXIgPSBmdW5jdGlvbiAocm91
dGVzKSB7CisgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSb3V0ZXIpKSByZXR1cm4gbmV3IFJvdXRl
cihyb3V0ZXMpOworCisgIHRoaXMucGFyYW1zICAgPSB7fTsKKyAgdGhpcy5yb3V0ZXMgICA9IHt9
OworICB0aGlzLm1ldGhvZHMgID0gWydvbicsICdvbmNlJywgJ2FmdGVyJywgJ2JlZm9yZSddOwor
ICB0aGlzLnNjb3BlICAgID0gW107CisgIHRoaXMuX21ldGhvZHMgPSB7fTsKKworICB0aGlzLl9p
bnNlcnQgPSB0aGlzLmluc2VydDsKKyAgdGhpcy5pbnNlcnQgPSB0aGlzLmluc2VydEV4OworCisg
IHRoaXMuaGlzdG9yeVN1cHBvcnQgPSAod2luZG93Lmhpc3RvcnkgIT0gbnVsbCA/IHdpbmRvdy5o
aXN0b3J5LnB1c2hTdGF0ZSA6IG51bGwpICE9IG51bGwKKworICB0aGlzLmNvbmZpZ3VyZSgpOwor
ICB0aGlzLm1vdW50KHJvdXRlcyB8fCB7fSk7Cit9OworCitSb3V0ZXIucHJvdG90eXBlLmluaXQg
PSBmdW5jdGlvbiAocikgeworICB2YXIgc2VsZiA9IHRoaXM7CisgIHRoaXMuaGFuZGxlciA9IGZ1
bmN0aW9uKG9uQ2hhbmdlRXZlbnQpIHsKKyAgICB2YXIgbmV3VVJMID0gb25DaGFuZ2VFdmVudCAm
JiBvbkNoYW5nZUV2ZW50Lm5ld1VSTCB8fCB3aW5kb3cubG9jYXRpb24uaGFzaDsKKyAgICB2YXIg
dXJsID0gc2VsZi5oaXN0b3J5ID09PSB0cnVlID8gc2VsZi5nZXRQYXRoKCkgOiBuZXdVUkwucmVw
bGFjZSgvLiojLywgJycpOworICAgIHNlbGYuZGlzcGF0Y2goJ29uJywgdXJsKTsKKyAgfTsKKwor
ICBsaXN0ZW5lci5pbml0KHRoaXMuaGFuZGxlciwgdGhpcy5oaXN0b3J5KTsKKworICBpZiAodGhp
cy5oaXN0b3J5ID09PSBmYWxzZSkgeworICAgIGlmIChkbG9jSGFzaEVtcHR5KCkgJiYgcikgewor
ICAgICAgZGxvYy5oYXNoID0gcjsKKyAgICB9IGVsc2UgaWYgKCFkbG9jSGFzaEVtcHR5KCkpIHsK
KyAgICAgIHNlbGYuZGlzcGF0Y2goJ29uJywgZGxvYy5oYXNoLnJlcGxhY2UoL14jLywgJycpKTsK
KyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgdmFyIHJvdXRlVG8gPSBkbG9jSGFzaEVtcHR5KCkg
JiYgciA/IHIgOiAhZGxvY0hhc2hFbXB0eSgpID8gZGxvYy5oYXNoLnJlcGxhY2UoL14jLywgJycp
IDogbnVsbDsKKyAgICBpZiAocm91dGVUbykgeworICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFj
ZVN0YXRlKHt9LCBkb2N1bWVudC50aXRsZSwgcm91dGVUbyk7CisgICAgfQorCisgICAgLy8gUm91
dGVyIGhhcyBiZWVuIGluaXRpYWxpemVkLCBidXQgZHVlIHRvIHRoZSBjaHJvbWUgYnVnIGl0IHdp
bGwgbm90CisgICAgLy8geWV0IGFjdHVhbGx5IHJvdXRlIEhUTUw1IGhpc3Rvcnkgc3RhdGUgY2hh
bmdlcy4gVGh1cywgZGVjaWRlIGlmIHNob3VsZCByb3V0ZS4KKyAgICBpZiAocm91dGVUbyB8fCB0
aGlzLnJ1bl9pbl9pbml0ID09PSB0cnVlKSB7CisgICAgICB0aGlzLmhhbmRsZXIoKTsKKyAgICB9
CisgIH0KKworICByZXR1cm4gdGhpczsKK307CisKK1JvdXRlci5wcm90b3R5cGUuZXhwbG9kZSA9
IGZ1bmN0aW9uICgpIHsKKyAgdmFyIHYgPSB0aGlzLmhpc3RvcnkgPT09IHRydWUgPyB0aGlzLmdl
dFBhdGgoKSA6IGRsb2MuaGFzaDsKKyAgaWYgKHYuY2hhckF0KDEpID09PSAnLycpIHsgdj12LnNs
aWNlKDEpIH0KKyAgcmV0dXJuIHYuc2xpY2UoMSwgdi5sZW5ndGgpLnNwbGl0KCIvIik7Cit9Owor
CitSb3V0ZXIucHJvdG90eXBlLnNldFJvdXRlID0gZnVuY3Rpb24gKGksIHYsIHZhbCkgeworICB2
YXIgdXJsID0gdGhpcy5leHBsb2RlKCk7CisKKyAgaWYgKHR5cGVvZiBpID09PSAnbnVtYmVyJyAm
JiB0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHsKKyAgICB1cmxbaV0gPSB2OworICB9CisgIGVsc2Ug
aWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7CisgICAgdXJsLnNwbGljZShpLCB2LCBzKTsK
KyAgfQorICBlbHNlIHsKKyAgICB1cmwgPSBbaV07CisgIH0KKworICBsaXN0ZW5lci5zZXRIYXNo
KHVybC5qb2luKCcvJykpOworICByZXR1cm4gdXJsOworfTsKKworLy8KKy8vICMjIyBmdW5jdGlv
biBpbnNlcnRFeChtZXRob2QsIHBhdGgsIHJvdXRlLCBwYXJlbnQpCisvLyAjIyMjIEBtZXRob2Qg
e3N0cmluZ30gTWV0aG9kIHRvIGluc2VydCB0aGUgc3BlY2lmaWMgYHJvdXRlYC4KKy8vICMjIyMg
QHBhdGgge0FycmF5fSBQYXJzZWQgcGF0aCB0byBpbnNlcnQgdGhlIGByb3V0ZWAgYXQuCisvLyAj
IyMjIEByb3V0ZSB7QXJyYXl8ZnVuY3Rpb259IFJvdXRlIGhhbmRsZXJzIHRvIGluc2VydC4KKy8v
ICMjIyMgQHBhcmVudCB7T2JqZWN0fSAqKk9wdGlvbmFsKiogUGFyZW50ICJyb3V0ZXMiIHRvIGlu
c2VydCBpbnRvLgorLy8gaW5zZXJ0IGEgY2FsbGJhY2sgdGhhdCB3aWxsIG9ubHkgb2NjdXIgb25j
ZSBwZXIgdGhlIG1hdGNoZWQgcm91dGUuCisvLworUm91dGVyLnByb3RvdHlwZS5pbnNlcnRFeCA9
IGZ1bmN0aW9uKG1ldGhvZCwgcGF0aCwgcm91dGUsIHBhcmVudCkgeworICBpZiAobWV0aG9kID09
PSAib25jZSIpIHsKKyAgICBtZXRob2QgPSAib24iOworICAgIHJvdXRlID0gZnVuY3Rpb24ocm91
dGUpIHsKKyAgICAgIHZhciBvbmNlID0gZmFsc2U7CisgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7
CisgICAgICAgIGlmIChvbmNlKSByZXR1cm47CisgICAgICAgIG9uY2UgPSB0cnVlOworICAgICAg
ICByZXR1cm4gcm91dGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICAgIH07CisgICAgfShy
b3V0ZSk7CisgIH0KKyAgcmV0dXJuIHRoaXMuX2luc2VydChtZXRob2QsIHBhdGgsIHJvdXRlLCBw
YXJlbnQpOworfTsKKworUm91dGVyLnByb3RvdHlwZS5nZXRSb3V0ZSA9IGZ1bmN0aW9uICh2KSB7
CisgIHZhciByZXQgPSB2OworCisgIGlmICh0eXBlb2YgdiA9PT0gIm51bWJlciIpIHsKKyAgICBy
ZXQgPSB0aGlzLmV4cGxvZGUoKVt2XTsKKyAgfQorICBlbHNlIGlmICh0eXBlb2YgdiA9PT0gInN0
cmluZyIpeworICAgIHZhciBoID0gdGhpcy5leHBsb2RlKCk7CisgICAgcmV0ID0gaC5pbmRleE9m
KHYpOworICB9CisgIGVsc2UgeworICAgIHJldCA9IHRoaXMuZXhwbG9kZSgpOworICB9CisKKyAg
cmV0dXJuIHJldDsKK307CisKK1JvdXRlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgp
IHsKKyAgbGlzdGVuZXIuZGVzdHJveSh0aGlzLmhhbmRsZXIpOworICByZXR1cm4gdGhpczsKK307
CisKK1JvdXRlci5wcm90b3R5cGUuZ2V0UGF0aCA9IGZ1bmN0aW9uICgpIHsKKyAgdmFyIHBhdGgg
PSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7CisgIGlmIChwYXRoLnN1YnN0cigwLCAxKSAhPT0g
Jy8nKSB7CisgICAgcGF0aCA9ICcvJyArIHBhdGg7CisgIH0KKyAgcmV0dXJuIHBhdGg7Cit9Owor
ZnVuY3Rpb24gX2V2ZXJ5KGFyciwgaXRlcmF0b3IpIHsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBh
cnIubGVuZ3RoOyBpICs9IDEpIHsKKyAgICBpZiAoaXRlcmF0b3IoYXJyW2ldLCBpLCBhcnIpID09
PSBmYWxzZSkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorfQorCitmdW5jdGlvbiBfZmxh
dHRlbihhcnIpIHsKKyAgdmFyIGZsYXQgPSBbXTsKKyAgZm9yICh2YXIgaSA9IDAsIG4gPSBhcnIu
bGVuZ3RoOyBpIDwgbjsgaSsrKSB7CisgICAgZmxhdCA9IGZsYXQuY29uY2F0KGFycltpXSk7Cisg
IH0KKyAgcmV0dXJuIGZsYXQ7Cit9CisKK2Z1bmN0aW9uIF9hc3luY0V2ZXJ5U2VyaWVzKGFyciwg
aXRlcmF0b3IsIGNhbGxiYWNrKSB7CisgIGlmICghYXJyLmxlbmd0aCkgeworICAgIHJldHVybiBj
YWxsYmFjaygpOworICB9CisgIHZhciBjb21wbGV0ZWQgPSAwOworICAoZnVuY3Rpb24gaXRlcmF0
ZSgpIHsKKyAgICBpdGVyYXRvcihhcnJbY29tcGxldGVkXSwgZnVuY3Rpb24oZXJyKSB7CisgICAg
ICBpZiAoZXJyIHx8IGVyciA9PT0gZmFsc2UpIHsKKyAgICAgICAgY2FsbGJhY2soZXJyKTsKKyAg
ICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHt9OworICAgICAgfSBlbHNlIHsKKyAgICAgICAg
Y29tcGxldGVkICs9IDE7CisgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IGFyci5sZW5ndGgpIHsK
KyAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGl0ZXJh
dGUoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0pOworICB9KSgpOworfQorCitmdW5jdGlv
biBwYXJhbWlmeVN0cmluZyhzdHIsIHBhcmFtcywgbW9kKSB7CisgIG1vZCA9IHN0cjsKKyAgZm9y
ICh2YXIgcGFyYW0gaW4gcGFyYW1zKSB7CisgICAgaWYgKHBhcmFtcy5oYXNPd25Qcm9wZXJ0eShw
YXJhbSkpIHsKKyAgICAgIG1vZCA9IHBhcmFtc1twYXJhbV0oc3RyKTsKKyAgICAgIGlmIChtb2Qg
IT09IHN0cikgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJu
IG1vZCA9PT0gc3RyID8gIihbLl9hLXpBLVowLTktXSspIiA6IG1vZDsKK30KKworZnVuY3Rpb24g
cmVnaWZ5U3RyaW5nKHN0ciwgcGFyYW1zKSB7CisgIHZhciBtYXRjaGVzLCBsYXN0ID0gMCwgb3V0
ID0gIiI7CisgIHdoaWxlIChtYXRjaGVzID0gc3RyLnN1YnN0cihsYXN0KS5tYXRjaCgvW15cd1xk
XC0gJUAmXSpcKlteXHdcZFwtICVAJl0qLykpIHsKKyAgICBsYXN0ID0gbWF0Y2hlcy5pbmRleCAr
IG1hdGNoZXNbMF0ubGVuZ3RoOworICAgIG1hdGNoZXNbMF0gPSBtYXRjaGVzWzBdLnJlcGxhY2Uo
L15cKi8sICIoW18uKCkhXFwgJUAmYS16QS1aMC05LV0rKSIpOworICAgIG91dCArPSBzdHIuc3Vi
c3RyKDAsIG1hdGNoZXMuaW5kZXgpICsgbWF0Y2hlc1swXTsKKyAgfQorICBzdHIgPSBvdXQgKz0g
c3RyLnN1YnN0cihsYXN0KTsKKyAgdmFyIGNhcHR1cmVzID0gc3RyLm1hdGNoKC86KFteXC9dKykv
aWcpLCBsZW5ndGg7CisgIGlmIChjYXB0dXJlcykgeworICAgIGxlbmd0aCA9IGNhcHR1cmVzLmxl
bmd0aDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICBzdHIg
PSBzdHIucmVwbGFjZShjYXB0dXJlc1tpXSwgcGFyYW1pZnlTdHJpbmcoY2FwdHVyZXNbaV0sIHBh
cmFtcykpOworICAgIH0KKyAgfQorICByZXR1cm4gc3RyOworfQorCitmdW5jdGlvbiB0ZXJtaW5h
dG9yKHJvdXRlcywgZGVsaW1pdGVyLCBzdGFydCwgc3RvcCkgeworICB2YXIgbGFzdCA9IDAsIGxl
ZnQgPSAwLCByaWdodCA9IDAsIHN0YXJ0ID0gKHN0YXJ0IHx8ICIoIikudG9TdHJpbmcoKSwgc3Rv
cCA9IChzdG9wIHx8ICIpIikudG9TdHJpbmcoKSwgaTsKKyAgZm9yIChpID0gMDsgaSA8IHJvdXRl
cy5sZW5ndGg7IGkrKykgeworICAgIHZhciBjaHVuayA9IHJvdXRlc1tpXTsKKyAgICBpZiAoY2h1
bmsuaW5kZXhPZihzdGFydCwgbGFzdCkgPiBjaHVuay5pbmRleE9mKHN0b3AsIGxhc3QpIHx8IH5j
aHVuay5pbmRleE9mKHN0YXJ0LCBsYXN0KSAmJiAhfmNodW5rLmluZGV4T2Yoc3RvcCwgbGFzdCkg
fHwgIX5jaHVuay5pbmRleE9mKHN0YXJ0LCBsYXN0KSAmJiB+Y2h1bmsuaW5kZXhPZihzdG9wLCBs
YXN0KSkgeworICAgICAgbGVmdCA9IGNodW5rLmluZGV4T2Yoc3RhcnQsIGxhc3QpOworICAgICAg
cmlnaHQgPSBjaHVuay5pbmRleE9mKHN0b3AsIGxhc3QpOworICAgICAgaWYgKH5sZWZ0ICYmICF+
cmlnaHQgfHwgIX5sZWZ0ICYmIH5yaWdodCkgeworICAgICAgICB2YXIgdG1wID0gcm91dGVzLnNs
aWNlKDAsIChpIHx8IDEpICsgMSkuam9pbihkZWxpbWl0ZXIpOworICAgICAgICByb3V0ZXMgPSBb
IHRtcCBdLmNvbmNhdChyb3V0ZXMuc2xpY2UoKGkgfHwgMSkgKyAxKSk7CisgICAgICB9CisgICAg
ICBsYXN0ID0gKHJpZ2h0ID4gbGVmdCA/IHJpZ2h0IDogbGVmdCkgKyAxOworICAgICAgaSA9IDA7
CisgICAgfSBlbHNlIHsKKyAgICAgIGxhc3QgPSAwOworICAgIH0KKyAgfQorICByZXR1cm4gcm91
dGVzOworfQorCitSb3V0ZXIucHJvdG90eXBlLmNvbmZpZ3VyZSA9IGZ1bmN0aW9uKG9wdGlvbnMp
IHsKKyAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CisgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhp
cy5tZXRob2RzLmxlbmd0aDsgaSsrKSB7CisgICAgdGhpcy5fbWV0aG9kc1t0aGlzLm1ldGhvZHNb
aV1dID0gdHJ1ZTsKKyAgfQorICB0aGlzLnJlY3Vyc2UgPSBvcHRpb25zLnJlY3Vyc2UgfHwgdGhp
cy5yZWN1cnNlIHx8IGZhbHNlOworICB0aGlzLmFzeW5jID0gb3B0aW9ucy5hc3luYyB8fCBmYWxz
ZTsKKyAgdGhpcy5kZWxpbWl0ZXIgPSBvcHRpb25zLmRlbGltaXRlciB8fCAiLyI7CisgIHRoaXMu
c3RyaWN0ID0gdHlwZW9mIG9wdGlvbnMuc3RyaWN0ID09PSAidW5kZWZpbmVkIiA/IHRydWUgOiBv
cHRpb25zLnN0cmljdDsKKyAgdGhpcy5ub3Rmb3VuZCA9IG9wdGlvbnMubm90Zm91bmQ7CisgIHRo
aXMucmVzb3VyY2UgPSBvcHRpb25zLnJlc291cmNlOworICB0aGlzLmhpc3RvcnkgPSBvcHRpb25z
Lmh0bWw1aGlzdG9yeSAmJiB0aGlzLmhpc3RvcnlTdXBwb3J0IHx8IGZhbHNlOworICB0aGlzLnJ1
bl9pbl9pbml0ID0gdGhpcy5oaXN0b3J5ID09PSB0cnVlICYmIG9wdGlvbnMucnVuX2hhbmRsZXJf
aW5faW5pdCAhPT0gZmFsc2U7CisgIHRoaXMuZXZlcnkgPSB7CisgICAgYWZ0ZXI6IG9wdGlvbnMu
YWZ0ZXIgfHwgbnVsbCwKKyAgICBiZWZvcmU6IG9wdGlvbnMuYmVmb3JlIHx8IG51bGwsCisgICAg
b246IG9wdGlvbnMub24gfHwgbnVsbAorICB9OworICByZXR1cm4gdGhpczsKK307CisKK1JvdXRl
ci5wcm90b3R5cGUucGFyYW0gPSBmdW5jdGlvbih0b2tlbiwgbWF0Y2hlcikgeworICBpZiAodG9r
ZW5bMF0gIT09ICI6IikgeworICAgIHRva2VuID0gIjoiICsgdG9rZW47CisgIH0KKyAgdmFyIGNv
bXBpbGVkID0gbmV3IFJlZ0V4cCh0b2tlbiwgImciKTsKKyAgdGhpcy5wYXJhbXNbdG9rZW5dID0g
ZnVuY3Rpb24oc3RyKSB7CisgICAgcmV0dXJuIHN0ci5yZXBsYWNlKGNvbXBpbGVkLCBtYXRjaGVy
LnNvdXJjZSB8fCBtYXRjaGVyKTsKKyAgfTsKK307CisKK1JvdXRlci5wcm90b3R5cGUub24gPSBS
b3V0ZXIucHJvdG90eXBlLnJvdXRlID0gZnVuY3Rpb24obWV0aG9kLCBwYXRoLCByb3V0ZSkgewor
ICB2YXIgc2VsZiA9IHRoaXM7CisgIGlmICghcm91dGUgJiYgdHlwZW9mIHBhdGggPT0gImZ1bmN0
aW9uIikgeworICAgIHJvdXRlID0gcGF0aDsKKyAgICBwYXRoID0gbWV0aG9kOworICAgIG1ldGhv
ZCA9ICJvbiI7CisgIH0KKyAgaWYgKEFycmF5LmlzQXJyYXkocGF0aCkpIHsKKyAgICByZXR1cm4g
cGF0aC5mb3JFYWNoKGZ1bmN0aW9uKHApIHsKKyAgICAgIHNlbGYub24obWV0aG9kLCBwLCByb3V0
ZSk7CisgICAgfSk7CisgIH0KKyAgaWYgKHBhdGguc291cmNlKSB7CisgICAgcGF0aCA9IHBhdGgu
c291cmNlLnJlcGxhY2UoL1xcXC8vaWcsICIvIik7CisgIH0KKyAgaWYgKEFycmF5LmlzQXJyYXko
bWV0aG9kKSkgeworICAgIHJldHVybiBtZXRob2QuZm9yRWFjaChmdW5jdGlvbihtKSB7CisgICAg
ICBzZWxmLm9uKG0udG9Mb3dlckNhc2UoKSwgcGF0aCwgcm91dGUpOworICAgIH0pOworICB9Cisg
IHBhdGggPSBwYXRoLnNwbGl0KG5ldyBSZWdFeHAodGhpcy5kZWxpbWl0ZXIpKTsKKyAgcGF0aCA9
IHRlcm1pbmF0b3IocGF0aCwgdGhpcy5kZWxpbWl0ZXIpOworICB0aGlzLmluc2VydChtZXRob2Qs
IHRoaXMuc2NvcGUuY29uY2F0KHBhdGgpLCByb3V0ZSk7Cit9OworCitSb3V0ZXIucHJvdG90eXBl
LmRpc3BhdGNoID0gZnVuY3Rpb24obWV0aG9kLCBwYXRoLCBjYWxsYmFjaykgeworICB2YXIgc2Vs
ZiA9IHRoaXMsIGZucyA9IHRoaXMudHJhdmVyc2UobWV0aG9kLCBwYXRoLCB0aGlzLnJvdXRlcywg
IiIpLCBpbnZva2VkID0gdGhpcy5faW52b2tlZCwgYWZ0ZXI7CisgIHRoaXMuX2ludm9rZWQgPSB0
cnVlOworICBpZiAoIWZucyB8fCBmbnMubGVuZ3RoID09PSAwKSB7CisgICAgdGhpcy5sYXN0ID0g
W107CisgICAgaWYgKHR5cGVvZiB0aGlzLm5vdGZvdW5kID09PSAiZnVuY3Rpb24iKSB7CisgICAg
ICB0aGlzLmludm9rZShbIHRoaXMubm90Zm91bmQgXSwgeworICAgICAgICBtZXRob2Q6IG1ldGhv
ZCwKKyAgICAgICAgcGF0aDogcGF0aAorICAgICAgfSwgY2FsbGJhY2spOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7CisgIH0KKyAgaWYgKHRoaXMucmVjdXJzZSA9PT0gImZvcndhcmQiKSB7Cisg
ICAgZm5zID0gZm5zLnJldmVyc2UoKTsKKyAgfQorICBmdW5jdGlvbiB1cGRhdGVBbmRJbnZva2Uo
KSB7CisgICAgc2VsZi5sYXN0ID0gZm5zLmFmdGVyOworICAgIHNlbGYuaW52b2tlKHNlbGYucnVu
bGlzdChmbnMpLCBzZWxmLCBjYWxsYmFjayk7CisgIH0KKyAgYWZ0ZXIgPSB0aGlzLmV2ZXJ5ICYm
IHRoaXMuZXZlcnkuYWZ0ZXIgPyBbIHRoaXMuZXZlcnkuYWZ0ZXIgXS5jb25jYXQodGhpcy5sYXN0
KSA6IFsgdGhpcy5sYXN0IF07CisgIGlmIChhZnRlciAmJiBhZnRlci5sZW5ndGggPiAwICYmIGlu
dm9rZWQpIHsKKyAgICBpZiAodGhpcy5hc3luYykgeworICAgICAgdGhpcy5pbnZva2UoYWZ0ZXIs
IHRoaXMsIHVwZGF0ZUFuZEludm9rZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMuaW52b2tl
KGFmdGVyLCB0aGlzKTsKKyAgICAgIHVwZGF0ZUFuZEludm9rZSgpOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKKyAgfQorICB1cGRhdGVBbmRJbnZva2UoKTsKKyAgcmV0dXJuIHRydWU7Cit9Owor
CitSb3V0ZXIucHJvdG90eXBlLmludm9rZSA9IGZ1bmN0aW9uKGZucywgdGhpc0FyZywgY2FsbGJh
Y2spIHsKKyAgdmFyIHNlbGYgPSB0aGlzOworICBpZiAodGhpcy5hc3luYykgeworICAgIF9hc3lu
Y0V2ZXJ5U2VyaWVzKGZucywgZnVuY3Rpb24gYXBwbHkoZm4sIG5leHQpIHsKKyAgICAgIGlmIChB
cnJheS5pc0FycmF5KGZuKSkgeworICAgICAgICByZXR1cm4gX2FzeW5jRXZlcnlTZXJpZXMoZm4s
IGFwcGx5LCBuZXh0KTsKKyAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZuID09ICJmdW5jdGlvbiIp
IHsKKyAgICAgICAgZm4uYXBwbHkodGhpc0FyZywgZm5zLmNhcHR1cmVzLmNvbmNhdChuZXh0KSk7
CisgICAgICB9CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICBpZiAoY2FsbGJhY2spIHsKKyAg
ICAgICAgY2FsbGJhY2suYXBwbHkodGhpc0FyZywgYXJndW1lbnRzKTsKKyAgICAgIH0KKyAgICB9
KTsKKyAgfSBlbHNlIHsKKyAgICBfZXZlcnkoZm5zLCBmdW5jdGlvbiBhcHBseShmbikgeworICAg
ICAgaWYgKEFycmF5LmlzQXJyYXkoZm4pKSB7CisgICAgICAgIHJldHVybiBfZXZlcnkoZm4sIGFw
cGx5KTsKKyAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZuID09PSAiZnVuY3Rpb24iKSB7CisgICAg
ICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBmbnMuY2FwdHVyZXMgfHwgW10pOworICAgICAg
fSBlbHNlIGlmICh0eXBlb2YgZm4gPT09ICJzdHJpbmciICYmIHNlbGYucmVzb3VyY2UpIHsKKyAg
ICAgICAgc2VsZi5yZXNvdXJjZVtmbl0uYXBwbHkodGhpc0FyZywgZm5zLmNhcHR1cmVzIHx8IFtd
KTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorfTsKKworUm91dGVyLnByb3RvdHlwZS50cmF2ZXJz
ZSA9IGZ1bmN0aW9uKG1ldGhvZCwgcGF0aCwgcm91dGVzLCByZWdleHAsIGZpbHRlcikgeworICB2
YXIgZm5zID0gW10sIGN1cnJlbnQsIGV4YWN0LCBtYXRjaCwgbmV4dCwgdGhhdDsKKyAgZnVuY3Rp
b24gZmlsdGVyUm91dGVzKHJvdXRlcykgeworICAgIGlmICghZmlsdGVyKSB7CisgICAgICByZXR1
cm4gcm91dGVzOworICAgIH0KKyAgICBmdW5jdGlvbiBkZWVwQ29weShzb3VyY2UpIHsKKyAgICAg
IHZhciByZXN1bHQgPSBbXTsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc291cmNlLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgIHJlc3VsdFtpXSA9IEFycmF5LmlzQXJyYXkoc291cmNlW2ldKSA/
IGRlZXBDb3B5KHNvdXJjZVtpXSkgOiBzb3VyY2VbaV07CisgICAgICB9CisgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICBmdW5jdGlvbiBhcHBseUZpbHRlcihmbnMpIHsKKyAgICAgIGZv
ciAodmFyIGkgPSBmbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgaWYgKEFy
cmF5LmlzQXJyYXkoZm5zW2ldKSkgeworICAgICAgICAgIGFwcGx5RmlsdGVyKGZuc1tpXSk7Cisg
ICAgICAgICAgaWYgKGZuc1tpXS5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgIGZucy5zcGxp
Y2UoaSwgMSk7CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGlmICgh
ZmlsdGVyKGZuc1tpXSkpIHsKKyAgICAgICAgICAgIGZucy5zcGxpY2UoaSwgMSk7CisgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIHZhciBuZXdSb3V0ZXMgPSBkZWVw
Q29weShyb3V0ZXMpOworICAgIG5ld1JvdXRlcy5tYXRjaGVkID0gcm91dGVzLm1hdGNoZWQ7Cisg
ICAgbmV3Um91dGVzLmNhcHR1cmVzID0gcm91dGVzLmNhcHR1cmVzOworICAgIG5ld1JvdXRlcy5h
ZnRlciA9IHJvdXRlcy5hZnRlci5maWx0ZXIoZmlsdGVyKTsKKyAgICBhcHBseUZpbHRlcihuZXdS
b3V0ZXMpOworICAgIHJldHVybiBuZXdSb3V0ZXM7CisgIH0KKyAgaWYgKHBhdGggPT09IHRoaXMu
ZGVsaW1pdGVyICYmIHJvdXRlc1ttZXRob2RdKSB7CisgICAgbmV4dCA9IFsgWyByb3V0ZXMuYmVm
b3JlLCByb3V0ZXNbbWV0aG9kXSBdLmZpbHRlcihCb29sZWFuKSBdOworICAgIG5leHQuYWZ0ZXIg
PSBbIHJvdXRlcy5hZnRlciBdLmZpbHRlcihCb29sZWFuKTsKKyAgICBuZXh0Lm1hdGNoZWQgPSB0
cnVlOworICAgIG5leHQuY2FwdHVyZXMgPSBbXTsKKyAgICByZXR1cm4gZmlsdGVyUm91dGVzKG5l
eHQpOworICB9CisgIGZvciAodmFyIHIgaW4gcm91dGVzKSB7CisgICAgaWYgKHJvdXRlcy5oYXNP
d25Qcm9wZXJ0eShyKSAmJiAoIXRoaXMuX21ldGhvZHNbcl0gfHwgdGhpcy5fbWV0aG9kc1tyXSAm
JiB0eXBlb2Ygcm91dGVzW3JdID09PSAib2JqZWN0IiAmJiAhQXJyYXkuaXNBcnJheShyb3V0ZXNb
cl0pKSkgeworICAgICAgY3VycmVudCA9IGV4YWN0ID0gcmVnZXhwICsgdGhpcy5kZWxpbWl0ZXIg
KyByOworICAgICAgaWYgKCF0aGlzLnN0cmljdCkgeworICAgICAgICBleGFjdCArPSAiWyIgKyB0
aGlzLmRlbGltaXRlciArICJdPyI7CisgICAgICB9CisgICAgICBtYXRjaCA9IHBhdGgubWF0Y2go
bmV3IFJlZ0V4cCgiXiIgKyBleGFjdCkpOworICAgICAgaWYgKCFtYXRjaCkgeworICAgICAgICBj
b250aW51ZTsKKyAgICAgIH0KKyAgICAgIGlmIChtYXRjaFswXSAmJiBtYXRjaFswXSA9PSBwYXRo
ICYmIHJvdXRlc1tyXVttZXRob2RdKSB7CisgICAgICAgIG5leHQgPSBbIFsgcm91dGVzW3JdLmJl
Zm9yZSwgcm91dGVzW3JdW21ldGhvZF0gXS5maWx0ZXIoQm9vbGVhbikgXTsKKyAgICAgICAgbmV4
dC5hZnRlciA9IFsgcm91dGVzW3JdLmFmdGVyIF0uZmlsdGVyKEJvb2xlYW4pOworICAgICAgICBu
ZXh0Lm1hdGNoZWQgPSB0cnVlOworICAgICAgICBuZXh0LmNhcHR1cmVzID0gbWF0Y2guc2xpY2Uo
MSk7CisgICAgICAgIGlmICh0aGlzLnJlY3Vyc2UgJiYgcm91dGVzID09PSB0aGlzLnJvdXRlcykg
eworICAgICAgICAgIG5leHQucHVzaChbIHJvdXRlcy5iZWZvcmUsIHJvdXRlcy5vbiBdLmZpbHRl
cihCb29sZWFuKSk7CisgICAgICAgICAgbmV4dC5hZnRlciA9IG5leHQuYWZ0ZXIuY29uY2F0KFsg
cm91dGVzLmFmdGVyIF0uZmlsdGVyKEJvb2xlYW4pKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gZmlsdGVyUm91dGVzKG5leHQpOworICAgICAgfQorICAgICAgbmV4dCA9IHRoaXMudHJhdmVy
c2UobWV0aG9kLCBwYXRoLCByb3V0ZXNbcl0sIGN1cnJlbnQpOworICAgICAgaWYgKG5leHQubWF0
Y2hlZCkgeworICAgICAgICBpZiAobmV4dC5sZW5ndGggPiAwKSB7CisgICAgICAgICAgZm5zID0g
Zm5zLmNvbmNhdChuZXh0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5yZWN1cnNlKSB7
CisgICAgICAgICAgZm5zLnB1c2goWyByb3V0ZXNbcl0uYmVmb3JlLCByb3V0ZXNbcl0ub24gXS5m
aWx0ZXIoQm9vbGVhbikpOworICAgICAgICAgIG5leHQuYWZ0ZXIgPSBuZXh0LmFmdGVyLmNvbmNh
dChbIHJvdXRlc1tyXS5hZnRlciBdLmZpbHRlcihCb29sZWFuKSk7CisgICAgICAgICAgaWYgKHJv
dXRlcyA9PT0gdGhpcy5yb3V0ZXMpIHsKKyAgICAgICAgICAgIGZucy5wdXNoKFsgcm91dGVzWyJi
ZWZvcmUiXSwgcm91dGVzWyJvbiJdIF0uZmlsdGVyKEJvb2xlYW4pKTsKKyAgICAgICAgICAgIG5l
eHQuYWZ0ZXIgPSBuZXh0LmFmdGVyLmNvbmNhdChbIHJvdXRlc1siYWZ0ZXIiXSBdLmZpbHRlcihC
b29sZWFuKSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZucy5tYXRjaGVkID0g
dHJ1ZTsKKyAgICAgICAgZm5zLmNhcHR1cmVzID0gbmV4dC5jYXB0dXJlczsKKyAgICAgICAgZm5z
LmFmdGVyID0gbmV4dC5hZnRlcjsKKyAgICAgICAgcmV0dXJuIGZpbHRlclJvdXRlcyhmbnMpOwor
ICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gZmFsc2U7Cit9OworCitSb3V0ZXIucHJvdG90
eXBlLmluc2VydCA9IGZ1bmN0aW9uKG1ldGhvZCwgcGF0aCwgcm91dGUsIHBhcmVudCkgeworICB2
YXIgbWV0aG9kVHlwZSwgcGFyZW50VHlwZSwgaXNBcnJheSwgbmVzdGVkLCBwYXJ0OworICBwYXRo
ID0gcGF0aC5maWx0ZXIoZnVuY3Rpb24ocCkgeworICAgIHJldHVybiBwICYmIHAubGVuZ3RoID4g
MDsKKyAgfSk7CisgIHBhcmVudCA9IHBhcmVudCB8fCB0aGlzLnJvdXRlczsKKyAgcGFydCA9IHBh
dGguc2hpZnQoKTsKKyAgaWYgKC9cOnxcKi8udGVzdChwYXJ0KSAmJiAhL1xcZHxcXHcvLnRlc3Qo
cGFydCkpIHsKKyAgICBwYXJ0ID0gcmVnaWZ5U3RyaW5nKHBhcnQsIHRoaXMucGFyYW1zKTsKKyAg
fQorICBpZiAocGF0aC5sZW5ndGggPiAwKSB7CisgICAgcGFyZW50W3BhcnRdID0gcGFyZW50W3Bh
cnRdIHx8IHt9OworICAgIHJldHVybiB0aGlzLmluc2VydChtZXRob2QsIHBhdGgsIHJvdXRlLCBw
YXJlbnRbcGFydF0pOworICB9CisgIGlmICghcGFydCAmJiAhcGF0aC5sZW5ndGggJiYgcGFyZW50
ID09PSB0aGlzLnJvdXRlcykgeworICAgIG1ldGhvZFR5cGUgPSB0eXBlb2YgcGFyZW50W21ldGhv
ZF07CisgICAgc3dpdGNoIChtZXRob2RUeXBlKSB7CisgICAgIGNhc2UgImZ1bmN0aW9uIjoKKyAg
ICAgIHBhcmVudFttZXRob2RdID0gWyBwYXJlbnRbbWV0aG9kXSwgcm91dGUgXTsKKyAgICAgIHJl
dHVybjsKKyAgICAgY2FzZSAib2JqZWN0IjoKKyAgICAgIHBhcmVudFttZXRob2RdLnB1c2gocm91
dGUpOworICAgICAgcmV0dXJuOworICAgICBjYXNlICJ1bmRlZmluZWQiOgorICAgICAgcGFyZW50
W21ldGhvZF0gPSByb3V0ZTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmV0dXJuOworICB9
CisgIHBhcmVudFR5cGUgPSB0eXBlb2YgcGFyZW50W3BhcnRdOworICBpc0FycmF5ID0gQXJyYXku
aXNBcnJheShwYXJlbnRbcGFydF0pOworICBpZiAocGFyZW50W3BhcnRdICYmICFpc0FycmF5ICYm
IHBhcmVudFR5cGUgPT0gIm9iamVjdCIpIHsKKyAgICBtZXRob2RUeXBlID0gdHlwZW9mIHBhcmVu
dFtwYXJ0XVttZXRob2RdOworICAgIHN3aXRjaCAobWV0aG9kVHlwZSkgeworICAgICBjYXNlICJm
dW5jdGlvbiI6CisgICAgICBwYXJlbnRbcGFydF1bbWV0aG9kXSA9IFsgcGFyZW50W3BhcnRdW21l
dGhvZF0sIHJvdXRlIF07CisgICAgICByZXR1cm47CisgICAgIGNhc2UgIm9iamVjdCI6CisgICAg
ICBwYXJlbnRbcGFydF1bbWV0aG9kXS5wdXNoKHJvdXRlKTsKKyAgICAgIHJldHVybjsKKyAgICAg
Y2FzZSAidW5kZWZpbmVkIjoKKyAgICAgIHBhcmVudFtwYXJ0XVttZXRob2RdID0gcm91dGU7Cisg
ICAgICByZXR1cm47CisgICAgfQorICB9IGVsc2UgaWYgKHBhcmVudFR5cGUgPT0gInVuZGVmaW5l
ZCIpIHsKKyAgICBuZXN0ZWQgPSB7fTsKKyAgICBuZXN0ZWRbbWV0aG9kXSA9IHJvdXRlOworICAg
IHBhcmVudFtwYXJ0XSA9IG5lc3RlZDsKKyAgICByZXR1cm47CisgIH0KKyAgdGhyb3cgbmV3IEVy
cm9yKCJJbnZhbGlkIHJvdXRlIGNvbnRleHQ6ICIgKyBwYXJlbnRUeXBlKTsKK307CisKKworCitS
b3V0ZXIucHJvdG90eXBlLmV4dGVuZCA9IGZ1bmN0aW9uKG1ldGhvZHMpIHsKKyAgdmFyIHNlbGYg
PSB0aGlzLCBsZW4gPSBtZXRob2RzLmxlbmd0aCwgaTsKKyAgZnVuY3Rpb24gZXh0ZW5kKG1ldGhv
ZCkgeworICAgIHNlbGYuX21ldGhvZHNbbWV0aG9kXSA9IHRydWU7CisgICAgc2VsZlttZXRob2Rd
ID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgZXh0cmEgPSBhcmd1bWVudHMubGVuZ3RoID09PSAx
ID8gWyBtZXRob2QsICIiIF0gOiBbIG1ldGhvZCBdOworICAgICAgc2VsZi5vbi5hcHBseShzZWxm
LCBleHRyYS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkpOwor
ICAgIH07CisgIH0KKyAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgZXh0ZW5kKG1l
dGhvZHNbaV0pOworICB9Cit9OworCitSb3V0ZXIucHJvdG90eXBlLnJ1bmxpc3QgPSBmdW5jdGlv
bihmbnMpIHsKKyAgdmFyIHJ1bmxpc3QgPSB0aGlzLmV2ZXJ5ICYmIHRoaXMuZXZlcnkuYmVmb3Jl
ID8gWyB0aGlzLmV2ZXJ5LmJlZm9yZSBdLmNvbmNhdChfZmxhdHRlbihmbnMpKSA6IF9mbGF0dGVu
KGZucyk7CisgIGlmICh0aGlzLmV2ZXJ5ICYmIHRoaXMuZXZlcnkub24pIHsKKyAgICBydW5saXN0
LnB1c2godGhpcy5ldmVyeS5vbik7CisgIH0KKyAgcnVubGlzdC5jYXB0dXJlcyA9IGZucy5jYXB0
dXJlczsKKyAgcnVubGlzdC5zb3VyY2UgPSBmbnMuc291cmNlOworICByZXR1cm4gcnVubGlzdDsK
K307CisKK1JvdXRlci5wcm90b3R5cGUubW91bnQgPSBmdW5jdGlvbihyb3V0ZXMsIHBhdGgpIHsK
KyAgaWYgKCFyb3V0ZXMgfHwgdHlwZW9mIHJvdXRlcyAhPT0gIm9iamVjdCIgfHwgQXJyYXkuaXNB
cnJheShyb3V0ZXMpKSB7CisgICAgcmV0dXJuOworICB9CisgIHZhciBzZWxmID0gdGhpczsKKyAg
cGF0aCA9IHBhdGggfHwgW107CisgIGlmICghQXJyYXkuaXNBcnJheShwYXRoKSkgeworICAgIHBh
dGggPSBwYXRoLnNwbGl0KHNlbGYuZGVsaW1pdGVyKTsKKyAgfQorICBmdW5jdGlvbiBpbnNlcnRP
ck1vdW50KHJvdXRlLCBsb2NhbCkgeworICAgIHZhciByZW5hbWUgPSByb3V0ZSwgcGFydHMgPSBy
b3V0ZS5zcGxpdChzZWxmLmRlbGltaXRlciksIHJvdXRlVHlwZSA9IHR5cGVvZiByb3V0ZXNbcm91
dGVdLCBpc1JvdXRlID0gcGFydHNbMF0gPT09ICIiIHx8ICFzZWxmLl9tZXRob2RzW3BhcnRzWzBd
XSwgZXZlbnQgPSBpc1JvdXRlID8gIm9uIiA6IHJlbmFtZTsKKyAgICBpZiAoaXNSb3V0ZSkgewor
ICAgICAgcmVuYW1lID0gcmVuYW1lLnNsaWNlKChyZW5hbWUubWF0Y2gobmV3IFJlZ0V4cChzZWxm
LmRlbGltaXRlcikpIHx8IFsgIiIgXSlbMF0ubGVuZ3RoKTsKKyAgICAgIHBhcnRzLnNoaWZ0KCk7
CisgICAgfQorICAgIGlmIChpc1JvdXRlICYmIHJvdXRlVHlwZSA9PT0gIm9iamVjdCIgJiYgIUFy
cmF5LmlzQXJyYXkocm91dGVzW3JvdXRlXSkpIHsKKyAgICAgIGxvY2FsID0gbG9jYWwuY29uY2F0
KHBhcnRzKTsKKyAgICAgIHNlbGYubW91bnQocm91dGVzW3JvdXRlXSwgbG9jYWwpOworICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAoaXNSb3V0ZSkgeworICAgICAgbG9jYWwgPSBsb2NhbC5j
b25jYXQocmVuYW1lLnNwbGl0KHNlbGYuZGVsaW1pdGVyKSk7CisgICAgICBsb2NhbCA9IHRlcm1p
bmF0b3IobG9jYWwsIHNlbGYuZGVsaW1pdGVyKTsKKyAgICB9CisgICAgc2VsZi5pbnNlcnQoZXZl
bnQsIGxvY2FsLCByb3V0ZXNbcm91dGVdKTsKKyAgfQorICBmb3IgKHZhciByb3V0ZSBpbiByb3V0
ZXMpIHsKKyAgICBpZiAocm91dGVzLmhhc093blByb3BlcnR5KHJvdXRlKSkgeworICAgICAgaW5z
ZXJ0T3JNb3VudChyb3V0ZSwgcGF0aC5zbGljZSgwKSk7CisgICAgfQorICB9Cit9OworCisKKwor
fSh0eXBlb2YgZXhwb3J0cyA9PT0gIm9iamVjdCIgPyBleHBvcnRzIDogd2luZG93KSk7ClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5C
ZW5jaC90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2Jvd2VyX2NvbXBv
bmVudHMvZGlyZWN0b3IvYnVpbGQvZGlyZWN0b3IubWluLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZv
cm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9sYWJzL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9yZWFjdC9ib3dlcl9jb21wb25lbnRzL2RpcmVjdG9yL2J1aWxkL2RpcmVjdG9yLm1pbi5q
cwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212
Yy9sYWJzL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ib3dlcl9jb21wb25lbnRzL2RpcmVj
dG9yL2J1aWxkL2RpcmVjdG9yLm1pbi5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACisK
KworLy8KKy8vIEdlbmVyYXRlZCBvbiBTdW4gRGVjIDE2IDIwMTIgMjI6NDc6MDUgR01ULTA1MDAg
KEVTVCkgYnkgTm9kZWppdHN1LCBJbmMgKFVzaW5nIENvZGVzdXJnZW9uKS4KKy8vIFZlcnNpb24g
MS4xLjkKKy8vCisoZnVuY3Rpb24oYSl7ZnVuY3Rpb24gayhhLGIsYyxkKXt2YXIgZT0wLGY9MCxn
PTAsYz0oY3x8IigiKS50b1N0cmluZygpLGQ9KGR8fCIpIikudG9TdHJpbmcoKSxoO2ZvcihoPTA7
aDxhLmxlbmd0aDtoKyspe3ZhciBpPWFbaF07aWYoaS5pbmRleE9mKGMsZSk+aS5pbmRleE9mKGQs
ZSl8fH5pLmluZGV4T2YoYyxlKSYmIX5pLmluZGV4T2YoZCxlKXx8IX5pLmluZGV4T2YoYyxlKSYm
fmkuaW5kZXhPZihkLGUpKXtmPWkuaW5kZXhPZihjLGUpLGc9aS5pbmRleE9mKGQsZSk7aWYofmYm
JiF+Z3x8IX5mJiZ+Zyl7dmFyIGo9YS5zbGljZSgwLChofHwxKSsxKS5qb2luKGIpO2E9W2pdLmNv
bmNhdChhLnNsaWNlKChofHwxKSsxKSl9ZT0oZz5mP2c6ZikrMSxoPTB9ZWxzZSBlPTB9cmV0dXJu
IGF9ZnVuY3Rpb24gaihhLGIpe3ZhciBjLGQ9MCxlPSIiO3doaWxlKGM9YS5zdWJzdHIoZCkubWF0
Y2goL1teXHdcZFwtICVAJl0qXCpbXlx3XGRcLSAlQCZdKi8pKWQ9Yy5pbmRleCtjWzBdLmxlbmd0
aCxjWzBdPWNbMF0ucmVwbGFjZSgvXlwqLywiKFtfLigpIVxcICVAJmEtekEtWjAtOS1dKykiKSxl
Kz1hLnN1YnN0cigwLGMuaW5kZXgpK2NbMF07YT1lKz1hLnN1YnN0cihkKTt2YXIgZj1hLm1hdGNo
KC86KFteXC9dKykvaWcpLGc7aWYoZil7Zz1mLmxlbmd0aDtmb3IodmFyIGg9MDtoPGc7aCsrKWE9
YS5yZXBsYWNlKGZbaF0saShmW2hdLGIpKX1yZXR1cm4gYX1mdW5jdGlvbiBpKGEsYixjKXtjPWE7
Zm9yKHZhciBkIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShkKSl7Yz1iW2RdKGEpO2lmKGMhPT1h
KWJyZWFrfXJldHVybiBjPT09YT8iKFsuX2EtekEtWjAtOS1dKykiOmN9ZnVuY3Rpb24gaChhLGIs
Yyl7aWYoIWEubGVuZ3RoKXJldHVybiBjKCk7dmFyIGQ9MDsoZnVuY3Rpb24gZSgpe2IoYVtkXSxm
dW5jdGlvbihiKXtifHxiPT09ITE/KGMoYiksYz1mdW5jdGlvbigpe30pOihkKz0xLGQ9PT1hLmxl
bmd0aD9jKCk6ZSgpKX0pfSkoKX1mdW5jdGlvbiBnKGEpe3ZhciBiPVtdO2Zvcih2YXIgYz0wLGQ9
YS5sZW5ndGg7YzxkO2MrKyliPWIuY29uY2F0KGFbY10pO3JldHVybiBifWZ1bmN0aW9uIGYoYSxi
KXtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrPTEpaWYoYihhW2NdLGMsYSk9PT0hMSlyZXR1cm59
ZnVuY3Rpb24gYygpe3JldHVybiBiLmhhc2g9PT0iInx8Yi5oYXNoPT09IiMifUFycmF5LnByb3Rv
dHlwZS5maWx0ZXJ8fChBcnJheS5wcm90b3R5cGUuZmlsdGVyPWZ1bmN0aW9uKGEsYil7dmFyIGM9
W10sZDtmb3IodmFyIGU9MCxmPXRoaXMubGVuZ3RoO2U8ZjtlKyspZSBpbiB0aGlzJiZhLmNhbGwo
YixkPXRoaXNbZV0sZSx0aGlzKSYmYy5wdXNoKGQpO3JldHVybiBjfSksQXJyYXkuaXNBcnJheXx8
KEFycmF5LmlzQXJyYXk9ZnVuY3Rpb24oYSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJp
bmcuY2FsbChhKT09PSJbb2JqZWN0IEFycmF5XSJ9KTt2YXIgYj1kb2N1bWVudC5sb2NhdGlvbixk
PXttb2RlOiJtb2Rlcm4iLGhhc2g6Yi5oYXNoLGhpc3Rvcnk6ITEsY2hlY2s6ZnVuY3Rpb24oKXt2
YXIgYT1iLmhhc2g7YSE9dGhpcy5oYXNoJiYodGhpcy5oYXNoPWEsdGhpcy5vbkhhc2hDaGFuZ2Vk
KCkpfSxmaXJlOmZ1bmN0aW9uKCl7dGhpcy5tb2RlPT09Im1vZGVybiI/dGhpcy5oaXN0b3J5PT09
ITA/d2luZG93Lm9ucG9wc3RhdGUoKTp3aW5kb3cub25oYXNoY2hhbmdlKCk6dGhpcy5vbkhhc2hD
aGFuZ2VkKCl9LGluaXQ6ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBkKGEpe2Zvcih2YXIgYj0wLGM9
ZS5saXN0ZW5lcnMubGVuZ3RoO2I8YztiKyspZS5saXN0ZW5lcnNbYl0oYSl9dmFyIGM9dGhpczt0
aGlzLmhpc3Rvcnk9YixlLmxpc3RlbmVyc3x8KGUubGlzdGVuZXJzPVtdKTtpZigib25oYXNoY2hh
bmdlImluIHdpbmRvdyYmKGRvY3VtZW50LmRvY3VtZW50TW9kZT09PXVuZGVmaW5lZHx8ZG9jdW1l
bnQuZG9jdW1lbnRNb2RlPjcpKXRoaXMuaGlzdG9yeT09PSEwP3NldFRpbWVvdXQoZnVuY3Rpb24o
KXt3aW5kb3cub25wb3BzdGF0ZT1kfSw1MDApOndpbmRvdy5vbmhhc2hjaGFuZ2U9ZCx0aGlzLm1v
ZGU9Im1vZGVybiI7ZWxzZXt2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTtm
LmlkPSJzdGF0ZS1mcmFtZSIsZi5zdHlsZS5kaXNwbGF5PSJub25lIixkb2N1bWVudC5ib2R5LmFw
cGVuZENoaWxkKGYpLHRoaXMud3JpdGVGcmFtZSgiIiksIm9ucHJvcGVydHljaGFuZ2UiaW4gZG9j
dW1lbnQmJiJhdHRhY2hFdmVudCJpbiBkb2N1bWVudCYmZG9jdW1lbnQuYXR0YWNoRXZlbnQoIm9u
cHJvcGVydHljaGFuZ2UiLGZ1bmN0aW9uKCl7ZXZlbnQucHJvcGVydHlOYW1lPT09ImxvY2F0aW9u
IiYmYy5jaGVjaygpfSksd2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uKCl7Yy5jaGVjaygpfSw1
MCksdGhpcy5vbkhhc2hDaGFuZ2VkPWQsdGhpcy5tb2RlPSJsZWdhY3kifWUubGlzdGVuZXJzLnB1
c2goYSk7cmV0dXJuIHRoaXMubW9kZX0sZGVzdHJveTpmdW5jdGlvbihhKXtpZighIWUmJiEhZS5s
aXN0ZW5lcnMpe3ZhciBiPWUubGlzdGVuZXJzO2Zvcih2YXIgYz1iLmxlbmd0aC0xO2M+PTA7Yy0t
KWJbY109PT1hJiZiLnNwbGljZShjLDEpfX0sc2V0SGFzaDpmdW5jdGlvbihhKXt0aGlzLm1vZGU9
PT0ibGVnYWN5IiYmdGhpcy53cml0ZUZyYW1lKGEpLHRoaXMuaGlzdG9yeT09PSEwPyh3aW5kb3cu
aGlzdG9yeS5wdXNoU3RhdGUoe30sZG9jdW1lbnQudGl0bGUsYSksdGhpcy5maXJlKCkpOmIuaGFz
aD1hWzBdPT09Ii8iP2E6Ii8iK2E7cmV0dXJuIHRoaXN9LHdyaXRlRnJhbWU6ZnVuY3Rpb24oYSl7
dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXRlLWZyYW1lIiksYz1iLmNvbnRlbnRE
b2N1bWVudHx8Yi5jb250ZW50V2luZG93LmRvY3VtZW50O2Mub3BlbigpLGMud3JpdGUoIjxzY3Jp
cHQ+X2hhc2ggPSAnIithKyInOyBvbmxvYWQgPSBwYXJlbnQubGlzdGVuZXIuc3luY0hhc2g7PHNj
cmlwdD4iKSxjLmNsb3NlKCl9LHN5bmNIYXNoOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5faGFzaDth
IT1iLmhhc2gmJihiLmhhc2g9YSk7cmV0dXJuIHRoaXN9LG9uSGFzaENoYW5nZWQ6ZnVuY3Rpb24o
KXt9fSxlPWEuUm91dGVyPWZ1bmN0aW9uKGEpe2lmKHRoaXMgaW5zdGFuY2VvZiBlKXRoaXMucGFy
YW1zPXt9LHRoaXMucm91dGVzPXt9LHRoaXMubWV0aG9kcz1bIm9uIiwib25jZSIsImFmdGVyIiwi
YmVmb3JlIl0sdGhpcy5zY29wZT1bXSx0aGlzLl9tZXRob2RzPXt9LHRoaXMuX2luc2VydD10aGlz
Lmluc2VydCx0aGlzLmluc2VydD10aGlzLmluc2VydEV4LHRoaXMuaGlzdG9yeVN1cHBvcnQ9KHdp
bmRvdy5oaXN0b3J5IT1udWxsP3dpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZTpudWxsKSE9bnVsbCx0
aGlzLmNvbmZpZ3VyZSgpLHRoaXMubW91bnQoYXx8e30pO2Vsc2UgcmV0dXJuIG5ldyBlKGEpfTtl
LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGEpe3ZhciBlPXRoaXM7dGhpcy5oYW5kbGVyPWZ1bmN0
aW9uKGEpe3ZhciBiPWEmJmEubmV3VVJMfHx3aW5kb3cubG9jYXRpb24uaGFzaCxjPWUuaGlzdG9y
eT09PSEwP2UuZ2V0UGF0aCgpOmIucmVwbGFjZSgvLiojLywiIik7ZS5kaXNwYXRjaCgib24iLGMp
fSxkLmluaXQodGhpcy5oYW5kbGVyLHRoaXMuaGlzdG9yeSk7aWYodGhpcy5oaXN0b3J5PT09ITEp
YygpJiZhP2IuaGFzaD1hOmMoKXx8ZS5kaXNwYXRjaCgib24iLGIuaGFzaC5yZXBsYWNlKC9eIy8s
IiIpKTtlbHNle3ZhciBmPWMoKSYmYT9hOmMoKT9udWxsOmIuaGFzaC5yZXBsYWNlKC9eIy8sIiIp
O2YmJndpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxmKSwoZnx8
dGhpcy5ydW5faW5faW5pdD09PSEwKSYmdGhpcy5oYW5kbGVyKCl9cmV0dXJuIHRoaXN9LGUucHJv
dG90eXBlLmV4cGxvZGU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmhpc3Rvcnk9PT0hMD90aGlzLmdl
dFBhdGgoKTpiLmhhc2g7YS5jaGFyQXQoMSk9PT0iLyImJihhPWEuc2xpY2UoMSkpO3JldHVybiBh
LnNsaWNlKDEsYS5sZW5ndGgpLnNwbGl0KCIvIil9LGUucHJvdG90eXBlLnNldFJvdXRlPWZ1bmN0
aW9uKGEsYixjKXt2YXIgZT10aGlzLmV4cGxvZGUoKTt0eXBlb2YgYT09Im51bWJlciImJnR5cGVv
ZiBiPT0ic3RyaW5nIj9lW2FdPWI6dHlwZW9mIGM9PSJzdHJpbmciP2Uuc3BsaWNlKGEsYixzKTpl
PVthXSxkLnNldEhhc2goZS5qb2luKCIvIikpO3JldHVybiBlfSxlLnByb3RvdHlwZS5pbnNlcnRF
eD1mdW5jdGlvbihhLGIsYyxkKXthPT09Im9uY2UiJiYoYT0ib24iLGM9ZnVuY3Rpb24oYSl7dmFy
IGI9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIWIpe2I9ITA7cmV0dXJuIGEuYXBwbHkodGhpcyxh
cmd1bWVudHMpfX19KGMpKTtyZXR1cm4gdGhpcy5faW5zZXJ0KGEsYixjLGQpfSxlLnByb3RvdHlw
ZS5nZXRSb3V0ZT1mdW5jdGlvbihhKXt2YXIgYj1hO2lmKHR5cGVvZiBhPT0ibnVtYmVyIiliPXRo
aXMuZXhwbG9kZSgpW2FdO2Vsc2UgaWYodHlwZW9mIGE9PSJzdHJpbmciKXt2YXIgYz10aGlzLmV4
cGxvZGUoKTtiPWMuaW5kZXhPZihhKX1lbHNlIGI9dGhpcy5leHBsb2RlKCk7cmV0dXJuIGJ9LGUu
cHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtkLmRlc3Ryb3kodGhpcy5oYW5kbGVyKTtyZXR1
cm4gdGhpc30sZS5wcm90b3R5cGUuZ2V0UGF0aD1mdW5jdGlvbigpe3ZhciBhPXdpbmRvdy5sb2Nh
dGlvbi5wYXRobmFtZTthLnN1YnN0cigwLDEpIT09Ii8iJiYoYT0iLyIrYSk7cmV0dXJuIGF9LGUu
cHJvdG90eXBlLmNvbmZpZ3VyZT1mdW5jdGlvbihhKXthPWF8fHt9O2Zvcih2YXIgYj0wO2I8dGhp
cy5tZXRob2RzLmxlbmd0aDtiKyspdGhpcy5fbWV0aG9kc1t0aGlzLm1ldGhvZHNbYl1dPSEwO3Ro
aXMucmVjdXJzZT1hLnJlY3Vyc2V8fHRoaXMucmVjdXJzZXx8ITEsdGhpcy5hc3luYz1hLmFzeW5j
fHwhMSx0aGlzLmRlbGltaXRlcj1hLmRlbGltaXRlcnx8Ii8iLHRoaXMuc3RyaWN0PXR5cGVvZiBh
LnN0cmljdD09InVuZGVmaW5lZCI/ITA6YS5zdHJpY3QsdGhpcy5ub3Rmb3VuZD1hLm5vdGZvdW5k
LHRoaXMucmVzb3VyY2U9YS5yZXNvdXJjZSx0aGlzLmhpc3Rvcnk9YS5odG1sNWhpc3RvcnkmJnRo
aXMuaGlzdG9yeVN1cHBvcnR8fCExLHRoaXMucnVuX2luX2luaXQ9dGhpcy5oaXN0b3J5PT09ITAm
JmEucnVuX2hhbmRsZXJfaW5faW5pdCE9PSExLHRoaXMuZXZlcnk9e2FmdGVyOmEuYWZ0ZXJ8fG51
bGwsYmVmb3JlOmEuYmVmb3JlfHxudWxsLG9uOmEub258fG51bGx9O3JldHVybiB0aGlzfSxlLnBy
b3RvdHlwZS5wYXJhbT1mdW5jdGlvbihhLGIpe2FbMF0hPT0iOiImJihhPSI6IithKTt2YXIgYz1u
ZXcgUmVnRXhwKGEsImciKTt0aGlzLnBhcmFtc1thXT1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBs
YWNlKGMsYi5zb3VyY2V8fGIpfX0sZS5wcm90b3R5cGUub249ZS5wcm90b3R5cGUucm91dGU9ZnVu
Y3Rpb24oYSxiLGMpe3ZhciBkPXRoaXM7IWMmJnR5cGVvZiBiPT0iZnVuY3Rpb24iJiYoYz1iLGI9
YSxhPSJvbiIpO2lmKEFycmF5LmlzQXJyYXkoYikpcmV0dXJuIGIuZm9yRWFjaChmdW5jdGlvbihi
KXtkLm9uKGEsYixjKX0pO2Iuc291cmNlJiYoYj1iLnNvdXJjZS5yZXBsYWNlKC9cXFwvL2lnLCIv
IikpO2lmKEFycmF5LmlzQXJyYXkoYSkpcmV0dXJuIGEuZm9yRWFjaChmdW5jdGlvbihhKXtkLm9u
KGEudG9Mb3dlckNhc2UoKSxiLGMpfSk7Yj1iLnNwbGl0KG5ldyBSZWdFeHAodGhpcy5kZWxpbWl0
ZXIpKSxiPWsoYix0aGlzLmRlbGltaXRlciksdGhpcy5pbnNlcnQoYSx0aGlzLnNjb3BlLmNvbmNh
dChiKSxjKX0sZS5wcm90b3R5cGUuZGlzcGF0Y2g9ZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGgo
KXtkLmxhc3Q9ZS5hZnRlcixkLmludm9rZShkLnJ1bmxpc3QoZSksZCxjKX12YXIgZD10aGlzLGU9
dGhpcy50cmF2ZXJzZShhLGIsdGhpcy5yb3V0ZXMsIiIpLGY9dGhpcy5faW52b2tlZCxnO3RoaXMu
X2ludm9rZWQ9ITA7aWYoIWV8fGUubGVuZ3RoPT09MCl7dGhpcy5sYXN0PVtdLHR5cGVvZiB0aGlz
Lm5vdGZvdW5kPT0iZnVuY3Rpb24iJiZ0aGlzLmludm9rZShbdGhpcy5ub3Rmb3VuZF0se21ldGhv
ZDphLHBhdGg6Yn0sYyk7cmV0dXJuITF9dGhpcy5yZWN1cnNlPT09ImZvcndhcmQiJiYoZT1lLnJl
dmVyc2UoKSksZz10aGlzLmV2ZXJ5JiZ0aGlzLmV2ZXJ5LmFmdGVyP1t0aGlzLmV2ZXJ5LmFmdGVy
XS5jb25jYXQodGhpcy5sYXN0KTpbdGhpcy5sYXN0XTtpZihnJiZnLmxlbmd0aD4wJiZmKXt0aGlz
LmFzeW5jP3RoaXMuaW52b2tlKGcsdGhpcyxoKToodGhpcy5pbnZva2UoZyx0aGlzKSxoKCkpO3Jl
dHVybiEwfWgoKTtyZXR1cm4hMH0sZS5wcm90b3R5cGUuaW52b2tlPWZ1bmN0aW9uKGEsYixjKXt2
YXIgZD10aGlzO3RoaXMuYXN5bmM/aChhLGZ1bmN0aW9uIGUoYyxkKXtpZihBcnJheS5pc0FycmF5
KGMpKXJldHVybiBoKGMsZSxkKTt0eXBlb2YgYz09ImZ1bmN0aW9uIiYmYy5hcHBseShiLGEuY2Fw
dHVyZXMuY29uY2F0KGQpKX0sZnVuY3Rpb24oKXtjJiZjLmFwcGx5KGIsYXJndW1lbnRzKX0pOmYo
YSxmdW5jdGlvbiBnKGMpe2lmKEFycmF5LmlzQXJyYXkoYykpcmV0dXJuIGYoYyxnKTtpZih0eXBl
b2YgYz09ImZ1bmN0aW9uIilyZXR1cm4gYy5hcHBseShiLGEuY2FwdHVyZXN8fFtdKTt0eXBlb2Yg
Yz09InN0cmluZyImJmQucmVzb3VyY2UmJmQucmVzb3VyY2VbY10uYXBwbHkoYixhLmNhcHR1cmVz
fHxbXSl9KX0sZS5wcm90b3R5cGUudHJhdmVyc2U9ZnVuY3Rpb24oYSxiLGMsZCxlKXtmdW5jdGlv
biBsKGEpe2Z1bmN0aW9uIGMoYSl7Zm9yKHZhciBiPWEubGVuZ3RoLTE7Yj49MDtiLS0pQXJyYXku
aXNBcnJheShhW2JdKT8oYyhhW2JdKSxhW2JdLmxlbmd0aD09PTAmJmEuc3BsaWNlKGIsMSkpOmUo
YVtiXSl8fGEuc3BsaWNlKGIsMSl9ZnVuY3Rpb24gYihhKXt2YXIgYz1bXTtmb3IodmFyIGQ9MDtk
PGEubGVuZ3RoO2QrKyljW2RdPUFycmF5LmlzQXJyYXkoYVtkXSk/YihhW2RdKTphW2RdO3JldHVy
biBjfWlmKCFlKXJldHVybiBhO3ZhciBkPWIoYSk7ZC5tYXRjaGVkPWEubWF0Y2hlZCxkLmNhcHR1
cmVzPWEuY2FwdHVyZXMsZC5hZnRlcj1hLmFmdGVyLmZpbHRlcihlKSxjKGQpO3JldHVybiBkfXZh
ciBmPVtdLGcsaCxpLGosaztpZihiPT09dGhpcy5kZWxpbWl0ZXImJmNbYV0pe2o9W1tjLmJlZm9y
ZSxjW2FdXS5maWx0ZXIoQm9vbGVhbildLGouYWZ0ZXI9W2MuYWZ0ZXJdLmZpbHRlcihCb29sZWFu
KSxqLm1hdGNoZWQ9ITAsai5jYXB0dXJlcz1bXTtyZXR1cm4gbChqKX1mb3IodmFyIG0gaW4gYylp
ZihjLmhhc093blByb3BlcnR5KG0pJiYoIXRoaXMuX21ldGhvZHNbbV18fHRoaXMuX21ldGhvZHNb
bV0mJnR5cGVvZiBjW21dPT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkoY1ttXSkpKXtnPWg9ZCt0
aGlzLmRlbGltaXRlcittLHRoaXMuc3RyaWN0fHwoaCs9IlsiK3RoaXMuZGVsaW1pdGVyKyJdPyIp
LGk9Yi5tYXRjaChuZXcgUmVnRXhwKCJeIitoKSk7aWYoIWkpY29udGludWU7aWYoaVswXSYmaVsw
XT09YiYmY1ttXVthXSl7aj1bW2NbbV0uYmVmb3JlLGNbbV1bYV1dLmZpbHRlcihCb29sZWFuKV0s
ai5hZnRlcj1bY1ttXS5hZnRlcl0uZmlsdGVyKEJvb2xlYW4pLGoubWF0Y2hlZD0hMCxqLmNhcHR1
cmVzPWkuc2xpY2UoMSksdGhpcy5yZWN1cnNlJiZjPT09dGhpcy5yb3V0ZXMmJihqLnB1c2goW2Mu
YmVmb3JlLGMub25dLmZpbHRlcihCb29sZWFuKSksai5hZnRlcj1qLmFmdGVyLmNvbmNhdChbYy5h
ZnRlcl0uZmlsdGVyKEJvb2xlYW4pKSk7cmV0dXJuIGwoail9aj10aGlzLnRyYXZlcnNlKGEsYixj
W21dLGcpO2lmKGoubWF0Y2hlZCl7ai5sZW5ndGg+MCYmKGY9Zi5jb25jYXQoaikpLHRoaXMucmVj
dXJzZSYmKGYucHVzaChbY1ttXS5iZWZvcmUsY1ttXS5vbl0uZmlsdGVyKEJvb2xlYW4pKSxqLmFm
dGVyPWouYWZ0ZXIuY29uY2F0KFtjW21dLmFmdGVyXS5maWx0ZXIoQm9vbGVhbikpLGM9PT10aGlz
LnJvdXRlcyYmKGYucHVzaChbYy5iZWZvcmUsYy5vbl0uZmlsdGVyKEJvb2xlYW4pKSxqLmFmdGVy
PWouYWZ0ZXIuY29uY2F0KFtjLmFmdGVyXS5maWx0ZXIoQm9vbGVhbikpKSksZi5tYXRjaGVkPSEw
LGYuY2FwdHVyZXM9ai5jYXB0dXJlcyxmLmFmdGVyPWouYWZ0ZXI7cmV0dXJuIGwoZil9fXJldHVy
biExfSxlLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnLGgsaTti
PWIuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhJiZhLmxlbmd0aD4wfSksZD1kfHx0aGlzLnJv
dXRlcyxpPWIuc2hpZnQoKSwvXDp8XCovLnRlc3QoaSkmJiEvXFxkfFxcdy8udGVzdChpKSYmKGk9
aihpLHRoaXMucGFyYW1zKSk7aWYoYi5sZW5ndGg+MCl7ZFtpXT1kW2ldfHx7fTtyZXR1cm4gdGhp
cy5pbnNlcnQoYSxiLGMsZFtpXSl9e2lmKCEhaXx8ISFiLmxlbmd0aHx8ZCE9PXRoaXMucm91dGVz
KXtmPXR5cGVvZiBkW2ldLGc9QXJyYXkuaXNBcnJheShkW2ldKTtpZihkW2ldJiYhZyYmZj09Im9i
amVjdCIpe2U9dHlwZW9mIGRbaV1bYV07c3dpdGNoKGUpe2Nhc2UiZnVuY3Rpb24iOmRbaV1bYV09
W2RbaV1bYV0sY107cmV0dXJuO2Nhc2Uib2JqZWN0IjpkW2ldW2FdLnB1c2goYyk7cmV0dXJuO2Nh
c2UidW5kZWZpbmVkIjpkW2ldW2FdPWM7cmV0dXJufX1lbHNlIGlmKGY9PSJ1bmRlZmluZWQiKXto
PXt9LGhbYV09YyxkW2ldPWg7cmV0dXJufXRocm93IG5ldyBFcnJvcigiSW52YWxpZCByb3V0ZSBj
b250ZXh0OiAiK2YpfWU9dHlwZW9mIGRbYV07c3dpdGNoKGUpe2Nhc2UiZnVuY3Rpb24iOmRbYV09
W2RbYV0sY107cmV0dXJuO2Nhc2Uib2JqZWN0IjpkW2FdLnB1c2goYyk7cmV0dXJuO2Nhc2UidW5k
ZWZpbmVkIjpkW2FdPWM7cmV0dXJufX19LGUucHJvdG90eXBlLmV4dGVuZD1mdW5jdGlvbihhKXtm
dW5jdGlvbiBlKGEpe2IuX21ldGhvZHNbYV09ITAsYlthXT1mdW5jdGlvbigpe3ZhciBjPWFyZ3Vt
ZW50cy5sZW5ndGg9PT0xP1thLCIiXTpbYV07Yi5vbi5hcHBseShiLGMuY29uY2F0KEFycmF5LnBy
b3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpKX19dmFyIGI9dGhpcyxjPWEubGVuZ3RoLGQ7
Zm9yKGQ9MDtkPGM7ZCsrKWUoYVtkXSl9LGUucHJvdG90eXBlLnJ1bmxpc3Q9ZnVuY3Rpb24oYSl7
dmFyIGI9dGhpcy5ldmVyeSYmdGhpcy5ldmVyeS5iZWZvcmU/W3RoaXMuZXZlcnkuYmVmb3JlXS5j
b25jYXQoZyhhKSk6ZyhhKTt0aGlzLmV2ZXJ5JiZ0aGlzLmV2ZXJ5Lm9uJiZiLnB1c2godGhpcy5l
dmVyeS5vbiksYi5jYXB0dXJlcz1hLmNhcHR1cmVzLGIuc291cmNlPWEuc291cmNlO3JldHVybiBi
fSxlLnByb3RvdHlwZS5tb3VudD1mdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGQoYixkKXt2YXIgZT1i
LGY9Yi5zcGxpdChjLmRlbGltaXRlciksZz10eXBlb2YgYVtiXSxoPWZbMF09PT0iInx8IWMuX21l
dGhvZHNbZlswXV0saT1oPyJvbiI6ZTtoJiYoZT1lLnNsaWNlKChlLm1hdGNoKG5ldyBSZWdFeHAo
Yy5kZWxpbWl0ZXIpKXx8WyIiXSlbMF0ubGVuZ3RoKSxmLnNoaWZ0KCkpO2gmJmc9PT0ib2JqZWN0
IiYmIUFycmF5LmlzQXJyYXkoYVtiXSk/KGQ9ZC5jb25jYXQoZiksYy5tb3VudChhW2JdLGQpKToo
aCYmKGQ9ZC5jb25jYXQoZS5zcGxpdChjLmRlbGltaXRlcikpLGQ9ayhkLGMuZGVsaW1pdGVyKSks
Yy5pbnNlcnQoaSxkLGFbYl0pKX1pZighIWEmJnR5cGVvZiBhPT0ib2JqZWN0IiYmIUFycmF5Lmlz
QXJyYXkoYSkpe3ZhciBjPXRoaXM7Yj1ifHxbXSxBcnJheS5pc0FycmF5KGIpfHwoYj1iLnNwbGl0
KGMuZGVsaW1pdGVyKSk7Zm9yKHZhciBlIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShlKSYmZChlLGIu
c2xpY2UoMCkpfX19KSh0eXBlb2YgZXhwb3J0cz09Im9iamVjdCI/ZXhwb3J0czp3aW5kb3cpClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2
ZW5CZW5jaC90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2Jvd2VyX2Nv
bXBvbmVudHMvZGlyZWN0b3IvYnVpbGQvZW5kZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFu
Y2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L3JlYWN0L2Jvd2VyX2NvbXBvbmVudHMvZGlyZWN0b3IvYnVpbGQvZW5kZXIuanMJKHJldmlzaW9u
IDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93ZXJfY29tcG9uZW50cy9kaXJlY3Rvci9idWlsZC9l
bmRlci5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACiskLmVuZGVyKHsKKyAgcm91dGVy
OiBSb3V0ZXIKK30pOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC90b2Rv
bXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2Jvd2VyX2NvbXBvbmVudHMvcmVh
Y3QvLmJvd2VyLmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5C
ZW5jaC90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2Jvd2VyX2NvbXBv
bmVudHMvcmVhY3QvLmJvd2VyLmpzb24JKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0RvWW91RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qv
Ym93ZXJfY29tcG9uZW50cy9yZWFjdC8uYm93ZXIuanNvbgkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxNCBAQAoreworICAibmFtZSI6ICJyZWFjdCIsCisgICJ2ZXJzaW9uIjogIjAuNC4wIiwKKyAg
Im1haW4iOiAicmVhY3QuanMiLAorICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL2Zh
Y2Vib29rL3JlYWN0LWJvd2VyIiwKKyAgIl9yZWxlYXNlIjogIjAuNC4wIiwKKyAgIl9yZXNvbHV0
aW9uIjogeworICAgICJ0eXBlIjogInZlcnNpb24iLAorICAgICJ0YWciOiAidjAuNC4wIiwKKyAg
ICAiY29tbWl0IjogIjU0MzM0YWQ2MjZkMjZkZmY0YzIxNGQzMDhjZWZkMzBhZDgwZmI4ZTkiCisg
IH0sCisgICJfc291cmNlIjogImdpdDovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QtYm93ZXIu
Z2l0IiwKKyAgIl90YXJnZXQiOiAifjAuNC4wIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9sYWJzL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ib3dlcl9jb21wb25lbnRzL3JlYWN0L0pTWFRyYW5z
Zm9ybWVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gv
dG9kb212Yy9sYWJzL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ib3dlcl9jb21wb25lbnRz
L3JlYWN0L0pTWFRyYW5zZm9ybWVyLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0
cy9Eb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0
L2Jvd2VyX2NvbXBvbmVudHMvcmVhY3QvSlNYVHJhbnNmb3JtZXIuanMJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTAxOTYgQEAKKy8qKgorICogSlNYVHJhbnNmb3JtZXIgdjAuNC4wCisgKi8KKyhm
dW5jdGlvbihlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYm9vdHN0cmFwKWJvb3RzdHJhcCgianN4
dHJhbnNmb3JtZXIiLGUpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzKW1vZHVsZS5l
eHBvcnRzPWUoKTtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQp
ZGVmaW5lKGUpO2Vsc2UgaWYoInVuZGVmaW5lZCIhPXR5cGVvZiBzZXMpe2lmKCFzZXMub2soKSly
ZXR1cm47c2VzLm1ha2VKU1hUcmFuc2Zvcm1lcj1lfWVsc2UidW5kZWZpbmVkIiE9dHlwZW9mIHdp
bmRvdz93aW5kb3cuSlNYVHJhbnNmb3JtZXI9ZSgpOmdsb2JhbC5KU1hUcmFuc2Zvcm1lcj1lKCl9
KShmdW5jdGlvbigpe3ZhciBkZWZpbmUsc2VzLGJvb3RzdHJhcCxtb2R1bGUsZXhwb3J0czsKK3Jl
dHVybiAoZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIGkobixzKXtpZighdFtuXSl7aWYoIWVbbl0p
e3ZhciBvPXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1aXJlO2lmKCFzJiZvKXJldHVy
biBvKG4sITApO2lmKHIpcmV0dXJuIHIobiwhMCk7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmlu
ZCBtb2R1bGUgJyIrbisiJyIpfXZhciB1PXRbbl09e2V4cG9ydHM6e319O2Vbbl1bMF0uY2FsbCh1
LmV4cG9ydHMsZnVuY3Rpb24odCl7dmFyIHI9ZVtuXVsxXVt0XTtyZXR1cm4gaShyP3I6dCl9LHUs
dS5leHBvcnRzKX1yZXR1cm4gdFtuXS5leHBvcnRzfXZhciByPXR5cGVvZiByZXF1aXJlPT0iZnVu
Y3Rpb24iJiZyZXF1aXJlO2Zvcih2YXIgcz0wO3M8bi5sZW5ndGg7cysrKWkobltzXSk7cmV0dXJu
IGl9KSh7MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cit2YXIgQmFzZTYyID0g
KGZ1bmN0aW9uIChteSkgeworICBteS5jaGFycyA9IFsiMCIsICIxIiwgIjIiLCAiMyIsICI0Iiwg
IjUiLCAiNiIsICI3IiwgIjgiLCAiOSIsICJhIiwgImIiLCAiYyIsICJkIiwgImUiLCAiZiIsICJn
IiwgImgiLCAiaSIsICJqIiwgImsiLCAibCIsICJtIiwgIm4iLCAibyIsICJwIiwgInEiLCAiciIs
ICJzIiwgInQiLCAidSIsICJ2IiwgInciLCAieCIsICJ5IiwgInoiLCAiQSIsICJCIiwgIkMiLCAi
RCIsICJFIiwgIkYiLCAiRyIsICJIIiwgIkkiLCAiSiIsICJLIiwgIkwiLCAiTSIsICJOIiwgIk8i
LCAiUCIsICJRIiwgIlIiLCAiUyIsICJUIiwgIlUiLCAiViIsICJXIiwgIlgiLCAiWSIsICJaIl0K
KworICBteS5lbmNvZGUgPSBmdW5jdGlvbihpKXsKKyAgICBpZiAoaSA9PT0gMCkge3JldHVybiAn
MCd9CisgICAgdmFyIHMgPSAnJworICAgIHdoaWxlIChpID4gMCkgeworICAgICAgcyA9IHRoaXMu
Y2hhcnNbaSAlIDYyXSArIHMKKyAgICAgIGkgPSBNYXRoLmZsb29yKGkvNjIpCisgICAgfQorICAg
IHJldHVybiBzCisgIH07CisgIG15LmRlY29kZSA9IGZ1bmN0aW9uKGEsYixjLGQpeworICAgIGZv
ciAoCisgICAgICBiID0gYyA9ICgKKyAgICAgICAgYSA9PT0gKC9cV3xffF4kLy50ZXN0KGEgKz0g
IiIpIHx8IGEpCisgICAgICApIC0gMTsKKyAgICAgIGQgPSBhLmNoYXJDb2RlQXQoYysrKTsKKyAg
ICApCisgICAgYiA9IGIgKiA2MiArIGQgLSBbLCA0OCwgMjksIDg3XVtkID4+IDVdOworICAgIHJl
dHVybiBiCisgIH07CisKKyAgcmV0dXJuIG15OworfSh7fSkpOworCittb2R1bGUuZXhwb3J0cyA9
IEJhc2U2MgorfSx7fV0sMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisoZnVu
Y3Rpb24ocHJvY2Vzcyl7ZnVuY3Rpb24gZmlsdGVyICh4cywgZm4pIHsKKyAgICB2YXIgcmVzID0g
W107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykgeworICAgICAgICBp
ZiAoZm4oeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pOworICAgIH0KKyAgICByZXR1cm4g
cmVzOworfQorCisvLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkg
d2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmUKKy8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkg
ZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcKSBpbiB0aGUgYXJyYXkKKy8vIChzbyBhbHNv
IG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlz
aAorLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKQorZnVuY3Rpb24gbm9ybWFsaXplQXJy
YXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7CisgIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdv
IGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwCisgIHZhciB1cCA9IDA7CisgIGZvciAo
dmFyIGkgPSBwYXJ0cy5sZW5ndGg7IGkgPj0gMDsgaS0tKSB7CisgICAgdmFyIGxhc3QgPSBwYXJ0
c1tpXTsKKyAgICBpZiAobGFzdCA9PSAnLicpIHsKKyAgICAgIHBhcnRzLnNwbGljZShpLCAxKTsK
KyAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHsKKyAgICAgIHBhcnRzLnNwbGljZShpLCAx
KTsKKyAgICAgIHVwKys7CisgICAgfSBlbHNlIGlmICh1cCkgeworICAgICAgcGFydHMuc3BsaWNl
KGksIDEpOworICAgICAgdXAtLTsKKyAgICB9CisgIH0KKworICAvLyBpZiB0aGUgcGF0aCBpcyBh
bGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zCisgIGlmIChh
bGxvd0Fib3ZlUm9vdCkgeworICAgIGZvciAoOyB1cC0tOyB1cCkgeworICAgICAgcGFydHMudW5z
aGlmdCgnLi4nKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gcGFydHM7Cit9CisKKy8vIFJlZ2V4
IHRvIHNwbGl0IGEgZmlsZW5hbWUgaW50byBbKiwgZGlyLCBiYXNlbmFtZSwgZXh0XQorLy8gcG9z
aXggdmVyc2lvbgordmFyIHNwbGl0UGF0aFJlID0gL14oLitcLyg/ISQpfFwvKT8oKD86Lis/KT8o
XC5bXi5dKik/KSQvOworCisvLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pCisvLyBwb3Np
eCB2ZXJzaW9uCitleHBvcnRzLnJlc29sdmUgPSBmdW5jdGlvbigpIHsKK3ZhciByZXNvbHZlZFBh
dGggPSAnJywKKyAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7CisKK2ZvciAodmFyIGkgPSBh
cmd1bWVudHMubGVuZ3RoOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHsKKyAg
dmFyIHBhdGggPSAoaSA+PSAwKQorICAgICAgPyBhcmd1bWVudHNbaV0KKyAgICAgIDogcHJvY2Vz
cy5jd2QoKTsKKworICAvLyBTa2lwIGVtcHR5IGFuZCBpbnZhbGlkIGVudHJpZXMKKyAgaWYgKHR5
cGVvZiBwYXRoICE9PSAnc3RyaW5nJyB8fCAhcGF0aCkgeworICAgIGNvbnRpbnVlOworICB9CisK
KyAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDsKKyAgcmVzb2x2ZWRB
YnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7Cit9CisKKy8vIEF0IHRoaXMgcG9pbnQg
dGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXQK
Ky8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBw
cm9jZXNzLmN3ZCgpIGZhaWxzKQorCisvLyBOb3JtYWxpemUgdGhlIHBhdGgKK3Jlc29sdmVkUGF0
aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rp
b24ocCkgeworICAgIHJldHVybiAhIXA7CisgIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbign
LycpOworCisgIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZl
ZFBhdGgpIHx8ICcuJzsKK307CisKKy8vIHBhdGgubm9ybWFsaXplKHBhdGgpCisvLyBwb3NpeCB2
ZXJzaW9uCitleHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHsKK3ZhciBpc0Fic29s
dXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJywKKyAgICB0cmFpbGluZ1NsYXNoID0gcGF0aC5z
bGljZSgtMSkgPT09ICcvJzsKKworLy8gTm9ybWFsaXplIHRoZSBwYXRoCitwYXRoID0gbm9ybWFs
aXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkgeworICAgIHJldHVy
biAhIXA7CisgIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpOworCisgIGlmICghcGF0aCAmJiAh
aXNBYnNvbHV0ZSkgeworICAgIHBhdGggPSAnLic7CisgIH0KKyAgaWYgKHBhdGggJiYgdHJhaWxp
bmdTbGFzaCkgeworICAgIHBhdGggKz0gJy8nOworICB9CisgIAorICByZXR1cm4gKGlzQWJzb2x1
dGUgPyAnLycgOiAnJykgKyBwYXRoOworfTsKKworCisvLyBwb3NpeCB2ZXJzaW9uCitleHBvcnRz
LmpvaW4gPSBmdW5jdGlvbigpIHsKKyAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNl
LmNhbGwoYXJndW1lbnRzLCAwKTsKKyAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihw
YXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHsKKyAgICByZXR1cm4gcCAmJiB0eXBlb2YgcCA9PT0g
J3N0cmluZyc7CisgIH0pLmpvaW4oJy8nKSk7Cit9OworCisKK2V4cG9ydHMuZGlybmFtZSA9IGZ1
bmN0aW9uKHBhdGgpIHsKKyAgdmFyIGRpciA9IHNwbGl0UGF0aFJlLmV4ZWMocGF0aClbMV0gfHwg
Jyc7CisgIHZhciBpc1dpbmRvd3MgPSBmYWxzZTsKKyAgaWYgKCFkaXIpIHsKKyAgICAvLyBObyBk
aXJuYW1lCisgICAgcmV0dXJuICcuJzsKKyAgfSBlbHNlIGlmIChkaXIubGVuZ3RoID09PSAxIHx8
CisgICAgICAoaXNXaW5kb3dzICYmIGRpci5sZW5ndGggPD0gMyAmJiBkaXIuY2hhckF0KDEpID09
PSAnOicpKSB7CisgICAgLy8gSXQgaXMganVzdCBhIHNsYXNoIG9yIGEgZHJpdmUgbGV0dGVyIHdp
dGggYSBzbGFzaAorICAgIHJldHVybiBkaXI7CisgIH0gZWxzZSB7CisgICAgLy8gSXQgaXMgYSBm
dWxsIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoCisgICAgcmV0dXJuIGRpci5zdWJzdHJp
bmcoMCwgZGlyLmxlbmd0aCAtIDEpOworICB9Cit9OworCisKK2V4cG9ydHMuYmFzZW5hbWUgPSBm
dW5jdGlvbihwYXRoLCBleHQpIHsKKyAgdmFyIGYgPSBzcGxpdFBhdGhSZS5leGVjKHBhdGgpWzJd
IHx8ICcnOworICAvLyBUT0RPOiBtYWtlIHRoaXMgY29tcGFyaXNvbiBjYXNlLWluc2Vuc2l0aXZl
IG9uIHdpbmRvd3M/CisgIGlmIChleHQgJiYgZi5zdWJzdHIoLTEgKiBleHQubGVuZ3RoKSA9PT0g
ZXh0KSB7CisgICAgZiA9IGYuc3Vic3RyKDAsIGYubGVuZ3RoIC0gZXh0Lmxlbmd0aCk7CisgIH0K
KyAgcmV0dXJuIGY7Cit9OworCisKK2V4cG9ydHMuZXh0bmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHsK
KyAgcmV0dXJuIHNwbGl0UGF0aFJlLmV4ZWMocGF0aClbM10gfHwgJyc7Cit9OworCitleHBvcnRz
LnJlbGF0aXZlID0gZnVuY3Rpb24oZnJvbSwgdG8pIHsKKyAgZnJvbSA9IGV4cG9ydHMucmVzb2x2
ZShmcm9tKS5zdWJzdHIoMSk7CisgIHRvID0gZXhwb3J0cy5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7
CisKKyAgZnVuY3Rpb24gdHJpbShhcnIpIHsKKyAgICB2YXIgc3RhcnQgPSAwOworICAgIGZvciAo
OyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHsKKyAgICAgIGlmIChhcnJbc3RhcnRdICE9
PSAnJykgYnJlYWs7CisgICAgfQorCisgICAgdmFyIGVuZCA9IGFyci5sZW5ndGggLSAxOworICAg
IGZvciAoOyBlbmQgPj0gMDsgZW5kLS0pIHsKKyAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJy
ZWFrOworICAgIH0KKworICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIFtdOworICAgIHJldHVy
biBhcnIuc2xpY2Uoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7CisgIH0KKworICB2YXIgZnJvbVBh
cnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpOworICB2YXIgdG9QYXJ0cyA9IHRyaW0odG8uc3Bs
aXQoJy8nKSk7CisKKyAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGZyb21QYXJ0cy5sZW5ndGgsIHRv
UGFydHMubGVuZ3RoKTsKKyAgdmFyIHNhbWVQYXJ0c0xlbmd0aCA9IGxlbmd0aDsKKyAgZm9yICh2
YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRv
UGFydHNbaV0pIHsKKyAgICAgIHNhbWVQYXJ0c0xlbmd0aCA9IGk7CisgICAgICBicmVhazsKKyAg
ICB9CisgIH0KKworICB2YXIgb3V0cHV0UGFydHMgPSBbXTsKKyAgZm9yICh2YXIgaSA9IHNhbWVQ
YXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykgeworICAgIG91dHB1dFBhcnRz
LnB1c2goJy4uJyk7CisgIH0KKworICBvdXRwdXRQYXJ0cyA9IG91dHB1dFBhcnRzLmNvbmNhdCh0
b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpOworCisgIHJldHVybiBvdXRwdXRQYXJ0cy5q
b2luKCcvJyk7Cit9OworCit9KShyZXF1aXJlKCJfX2Jyb3dzZXJpZnlfcHJvY2VzcyIpKQorfSx7
Il9fYnJvd3NlcmlmeV9wcm9jZXNzIjozfV0sMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhw
b3J0cyl7CisvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXIKKwordmFyIHByb2Nl
c3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9OworCitwcm9jZXNzLm5leHRUaWNrID0gKGZ1bmN0aW9u
ICgpIHsKKyAgICB2YXIgY2FuU2V0SW1tZWRpYXRlID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVm
aW5lZCcKKyAgICAmJiB3aW5kb3cuc2V0SW1tZWRpYXRlOworICAgIHZhciBjYW5Qb3N0ID0gdHlw
ZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcKKyAgICAmJiB3aW5kb3cucG9zdE1lc3NhZ2UgJiYg
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIKKyAgICA7CisKKyAgICBpZiAoY2FuU2V0SW1tZWRpYXRl
KSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZikgeyByZXR1cm4gd2luZG93LnNldEltbWVk
aWF0ZShmKSB9OworICAgIH0KKworICAgIGlmIChjYW5Qb3N0KSB7CisgICAgICAgIHZhciBxdWV1
ZSA9IFtdOworICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0
aW9uIChldikgeworICAgICAgICAgICAgaWYgKGV2LnNvdXJjZSA9PT0gd2luZG93ICYmIGV2LmRh
dGEgPT09ICdwcm9jZXNzLXRpY2snKSB7CisgICAgICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0
aW9uKCk7CisgICAgICAgICAgICAgICAgaWYgKHF1ZXVlLmxlbmd0aCA+IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIGZuID0gcXVldWUuc2hpZnQoKTsKKyAgICAgICAgICAgICAgICAgICAg
Zm4oKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0sIHRydWUp
OworCisgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZXh0VGljayhmbikgeworICAgICAgICAgICAg
cXVldWUucHVzaChmbik7CisgICAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoJ3Byb2Nlc3Mt
dGljaycsICcqJyk7CisgICAgICAgIH07CisgICAgfQorCisgICAgcmV0dXJuIGZ1bmN0aW9uIG5l
eHRUaWNrKGZuKSB7CisgICAgICAgIHNldFRpbWVvdXQoZm4sIDApOworICAgIH07Cit9KSgpOwor
Citwcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInOworcHJvY2Vzcy5icm93c2VyID0gdHJ1ZTsKK3By
b2Nlc3MuZW52ID0ge307Citwcm9jZXNzLmFyZ3YgPSBbXTsKKworcHJvY2Vzcy5iaW5kaW5nID0g
ZnVuY3Rpb24gKG5hbWUpIHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBp
cyBub3Qgc3VwcG9ydGVkJyk7Cit9CisKKy8vIFRPRE8oc2h0eWxtYW4pCitwcm9jZXNzLmN3ZCA9
IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9OworcHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChk
aXIpIHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRl
ZCcpOworfTsKKworfSx7fV0sNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ciso
ZnVuY3Rpb24oKXsvKgorICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhhZGRlZSBUeWwgPHRoYWRkZWUu
dHlsQGdtYWlsLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEyIEFyaXlhIEhpZGF5YXQgPGFyaXlh
LmhpZGF5YXRAZ21haWwuY29tPgorICBDb3B5cmlnaHQgKEMpIDIwMTIgTWF0aGlhcyBCeW5lbnMg
PG1hdGhpYXNAcWl3aS5iZT4KKyAgQ29weXJpZ2h0IChDKSAyMDEyIEpvb3N0LVdpbSBCb2VrZXN0
ZWlqbiA8am9vc3Qtd2ltQGJvZWtlc3RlaWpuLm5sPgorICBDb3B5cmlnaHQgKEMpIDIwMTIgS3Jp
cyBLb3dhbCA8a3Jpcy5rb3dhbEBjaXhhci5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMiBZdXN1
a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMiBB
cnBhZCBCb3Jzb3MgPGFycGFkLmJvcnNvc0Bnb29nbGVtYWlsLmNvbT4KKyAgQ29weXJpZ2h0IChD
KSAyMDExIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPgorCisgIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMgIkFTIElTIgorICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
CisgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4g
QkUgTElBQkxFIEZPUiBBTlkKKyAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisvKmpzbGludCBiaXR3aXNlOnRydWUgcGx1c3Bs
dXM6dHJ1ZSAqLworLypnbG9iYWwgZXNwcmltYTp0cnVlLCBkZWZpbmU6dHJ1ZSwgZXhwb3J0czp0
cnVlLCB3aW5kb3c6IHRydWUsCit0aHJvd0Vycm9yOiB0cnVlLCBnZW5lcmF0ZVN0YXRlbWVudDog
dHJ1ZSwgcGVlazogdHJ1ZSwKK3BhcnNlQXNzaWdubWVudEV4cHJlc3Npb246IHRydWUsIHBhcnNl
QmxvY2s6IHRydWUsCitwYXJzZUNsYXNzRXhwcmVzc2lvbjogdHJ1ZSwgcGFyc2VDbGFzc0RlY2xh
cmF0aW9uOiB0cnVlLCBwYXJzZUV4cHJlc3Npb246IHRydWUsCitwYXJzZUZvclN0YXRlbWVudDog
dHJ1ZSwKK3BhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbjogdHJ1ZSwgcGFyc2VGdW5jdGlvbkV4cHJl
c3Npb246IHRydWUsCitwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHM6IHRydWUsIHBhcnNlVmFy
aWFibGVJZGVudGlmaWVyOiB0cnVlLAorcGFyc2VJbXBvcnRTcGVjaWZpZXI6IHRydWUsCitwYXJz
ZUxlZnRIYW5kU2lkZUV4cHJlc3Npb246IHRydWUsIHBhcnNlUGFyYW1zOiB0cnVlLCB2YWxpZGF0
ZVBhcmFtOiB0cnVlLAorcGFyc2VTcHJlYWRPckFzc2lnbm1lbnRFeHByZXNzaW9uOiB0cnVlLAor
cGFyc2VTdGF0ZW1lbnQ6IHRydWUsIHBhcnNlU291cmNlRWxlbWVudDogdHJ1ZSwgcGFyc2VNb2R1
bGVCbG9jazogdHJ1ZSwgcGFyc2VDb25jaXNlQm9keTogdHJ1ZSwKK2FkdmFuY2VYSlNDaGlsZDog
dHJ1ZSwgaXNYSlNJZGVudGlmaWVyU3RhcnQ6IHRydWUsIGlzWEpTSWRlbnRpZmllclBhcnQ6IHRy
dWUsCitzY2FuWEpTU3RyaW5nTGl0ZXJhbDogdHJ1ZSwgc2NhblhKU0lkZW50aWZpZXI6IHRydWUs
CitwYXJzZVhKU0F0dHJpYnV0ZVZhbHVlOiB0cnVlLCBwYXJzZVhKU0NoaWxkOiB0cnVlLCBwYXJz
ZVhKU0VsZW1lbnQ6IHRydWUsIHBhcnNlWEpTRXhwcmVzc2lvbkNvbnRhaW5lcjogdHJ1ZSwgcGFy
c2VYSlNFbXB0eUV4cHJlc3Npb246IHRydWUsCitwYXJzZVlpZWxkRXhwcmVzc2lvbjogdHJ1ZQor
Ki8KKworKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisg
ICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBD
b21tb25KUy9Ob2RlLmpzLAorICAgIC8vIFJoaW5vLCBhbmQgcGxhaW4gYnJvd3NlciBsb2FkaW5n
LgorICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHsK
KyAgICAgICAgZGVmaW5lKFsnZXhwb3J0cyddLCBmYWN0b3J5KTsKKyAgICB9IGVsc2UgaWYgKHR5
cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICBmYWN0b3J5KGV4cG9ydHMp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGZhY3RvcnkoKHJvb3QuZXNwcmltYSA9IHt9KSk7Cisg
ICAgfQorfSh0aGlzLCBmdW5jdGlvbiAoZXhwb3J0cykgeworICAgICd1c2Ugc3RyaWN0JzsKKwor
ICAgIHZhciBUb2tlbiwKKyAgICAgICAgVG9rZW5OYW1lLAorICAgICAgICBGbkV4cHJUb2tlbnMs
CisgICAgICAgIFN5bnRheCwKKyAgICAgICAgUHJvcGVydHlLaW5kLAorICAgICAgICBNZXNzYWdl
cywKKyAgICAgICAgUmVnZXgsCisgICAgICAgIFN5bnRheFRyZWVEZWxlZ2F0ZSwKKyAgICAgICAg
WEhUTUxFbnRpdGllcywKKyAgICAgICAgQ2xhc3NQcm9wZXJ0eVR5cGUsCisgICAgICAgIHNvdXJj
ZSwKKyAgICAgICAgc3RyaWN0LAorICAgICAgICBpbmRleCwKKyAgICAgICAgbGluZU51bWJlciwK
KyAgICAgICAgbGluZVN0YXJ0LAorICAgICAgICBsZW5ndGgsCisgICAgICAgIGRlbGVnYXRlLAor
ICAgICAgICBsb29rYWhlYWQsCisgICAgICAgIHN0YXRlLAorICAgICAgICBleHRyYTsKKworICAg
IFRva2VuID0geworICAgICAgICBCb29sZWFuTGl0ZXJhbDogMSwKKyAgICAgICAgRU9GOiAyLAor
ICAgICAgICBJZGVudGlmaWVyOiAzLAorICAgICAgICBLZXl3b3JkOiA0LAorICAgICAgICBOdWxs
TGl0ZXJhbDogNSwKKyAgICAgICAgTnVtZXJpY0xpdGVyYWw6IDYsCisgICAgICAgIFB1bmN0dWF0
b3I6IDcsCisgICAgICAgIFN0cmluZ0xpdGVyYWw6IDgsCisgICAgICAgIFJlZ3VsYXJFeHByZXNz
aW9uOiA5LAorICAgICAgICBUZW1wbGF0ZTogMTAsCisgICAgICAgIFhKU0lkZW50aWZpZXI6IDEx
LAorICAgICAgICBYSlNUZXh0OiAxMgorICAgIH07CisKKyAgICBUb2tlbk5hbWUgPSB7fTsKKyAg
ICBUb2tlbk5hbWVbVG9rZW4uQm9vbGVhbkxpdGVyYWxdID0gJ0Jvb2xlYW4nOworICAgIFRva2Vu
TmFtZVtUb2tlbi5FT0ZdID0gJzxlbmQ+JzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uSWRlbnRpZmll
cl0gPSAnSWRlbnRpZmllcic7CisgICAgVG9rZW5OYW1lW1Rva2VuLktleXdvcmRdID0gJ0tleXdv
cmQnOworICAgIFRva2VuTmFtZVtUb2tlbi5OdWxsTGl0ZXJhbF0gPSAnTnVsbCc7CisgICAgVG9r
ZW5OYW1lW1Rva2VuLk51bWVyaWNMaXRlcmFsXSA9ICdOdW1lcmljJzsKKyAgICBUb2tlbk5hbWVb
VG9rZW4uUHVuY3R1YXRvcl0gPSAnUHVuY3R1YXRvcic7CisgICAgVG9rZW5OYW1lW1Rva2VuLlN0
cmluZ0xpdGVyYWxdID0gJ1N0cmluZyc7CisgICAgVG9rZW5OYW1lW1Rva2VuLlhKU0lkZW50aWZp
ZXJdID0gJ1hKU0lkZW50aWZpZXInOworICAgIFRva2VuTmFtZVtUb2tlbi5YSlNUZXh0XSA9ICdY
SlNUZXh0JzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uUmVndWxhckV4cHJlc3Npb25dID0gJ1JlZ3Vs
YXJFeHByZXNzaW9uJzsKKworICAgIC8vIEEgZnVuY3Rpb24gZm9sbG93aW5nIG9uZSBvZiB0aG9z
ZSB0b2tlbnMgaXMgYW4gZXhwcmVzc2lvbi4KKyAgICBGbkV4cHJUb2tlbnMgPSBbIigiLCAieyIs
ICJbIiwgImluIiwgInR5cGVvZiIsICJpbnN0YW5jZW9mIiwgIm5ldyIsCisgICAgICAgICAgICAg
ICAgICAgICJyZXR1cm4iLCAiY2FzZSIsICJkZWxldGUiLCAidGhyb3ciLCAidm9pZCIsCisgICAg
ICAgICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnQgb3BlcmF0b3JzCisgICAgICAgICAgICAgICAg
ICAgICI9IiwgIis9IiwgIi09IiwgIio9IiwgIi89IiwgIiU9IiwgIjw8PSIsICI+Pj0iLCAiPj4+
PSIsCisgICAgICAgICAgICAgICAgICAgICImPSIsICJ8PSIsICJePSIsICIsIiwKKyAgICAgICAg
ICAgICAgICAgICAgLy8gYmluYXJ5L3VuYXJ5IG9wZXJhdG9ycworICAgICAgICAgICAgICAgICAg
ICAiKyIsICItIiwgIioiLCAiLyIsICIlIiwgIisrIiwgIi0tIiwgIjw8IiwgIj4+IiwgIj4+PiIs
ICImIiwKKyAgICAgICAgICAgICAgICAgICAgInwiLCAiXiIsICIhIiwgIn4iLCAiJiYiLCAifHwi
LCAiPyIsICI6IiwgIj09PSIsICI9PSIsICI+PSIsCisgICAgICAgICAgICAgICAgICAgICI8PSIs
ICI8IiwgIj4iLCAiIT0iLCAiIT09Il07CisKKyAgICBTeW50YXggPSB7CisgICAgICAgIEFycmF5
RXhwcmVzc2lvbjogJ0FycmF5RXhwcmVzc2lvbicsCisgICAgICAgIEFycmF5UGF0dGVybjogJ0Fy
cmF5UGF0dGVybicsCisgICAgICAgIEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiAnQXJyb3dGdW5j
dGlvbkV4cHJlc3Npb24nLAorICAgICAgICBBc3NpZ25tZW50RXhwcmVzc2lvbjogJ0Fzc2lnbm1l
bnRFeHByZXNzaW9uJywKKyAgICAgICAgQmluYXJ5RXhwcmVzc2lvbjogJ0JpbmFyeUV4cHJlc3Np
b24nLAorICAgICAgICBCbG9ja1N0YXRlbWVudDogJ0Jsb2NrU3RhdGVtZW50JywKKyAgICAgICAg
QnJlYWtTdGF0ZW1lbnQ6ICdCcmVha1N0YXRlbWVudCcsCisgICAgICAgIENhbGxFeHByZXNzaW9u
OiAnQ2FsbEV4cHJlc3Npb24nLAorICAgICAgICBDYXRjaENsYXVzZTogJ0NhdGNoQ2xhdXNlJywK
KyAgICAgICAgQ2xhc3NCb2R5OiAnQ2xhc3NCb2R5JywKKyAgICAgICAgQ2xhc3NEZWNsYXJhdGlv
bjogJ0NsYXNzRGVjbGFyYXRpb24nLAorICAgICAgICBDbGFzc0V4cHJlc3Npb246ICdDbGFzc0V4
cHJlc3Npb24nLAorICAgICAgICBDbGFzc0hlcml0YWdlOiAnQ2xhc3NIZXJpdGFnZScsCisgICAg
ICAgIENvbXByZWhlbnNpb25CbG9jazogJ0NvbXByZWhlbnNpb25CbG9jaycsCisgICAgICAgIENv
bXByZWhlbnNpb25FeHByZXNzaW9uOiAnQ29tcHJlaGVuc2lvbkV4cHJlc3Npb24nLAorICAgICAg
ICBDb25kaXRpb25hbEV4cHJlc3Npb246ICdDb25kaXRpb25hbEV4cHJlc3Npb24nLAorICAgICAg
ICBDb250aW51ZVN0YXRlbWVudDogJ0NvbnRpbnVlU3RhdGVtZW50JywKKyAgICAgICAgRGVidWdn
ZXJTdGF0ZW1lbnQ6ICdEZWJ1Z2dlclN0YXRlbWVudCcsCisgICAgICAgIERvV2hpbGVTdGF0ZW1l
bnQ6ICdEb1doaWxlU3RhdGVtZW50JywKKyAgICAgICAgRW1wdHlTdGF0ZW1lbnQ6ICdFbXB0eVN0
YXRlbWVudCcsCisgICAgICAgIEV4cG9ydERlY2xhcmF0aW9uOiAnRXhwb3J0RGVjbGFyYXRpb24n
LAorICAgICAgICBFeHBvcnRTcGVjaWZpZXI6ICdFeHBvcnRTcGVjaWZpZXInLAorICAgICAgICBF
eHBvcnRTcGVjaWZpZXJTZXQ6ICdFeHBvcnRTcGVjaWZpZXJTZXQnLAorICAgICAgICBFeHByZXNz
aW9uU3RhdGVtZW50OiAnRXhwcmVzc2lvblN0YXRlbWVudCcsCisgICAgICAgIEZvckluU3RhdGVt
ZW50OiAnRm9ySW5TdGF0ZW1lbnQnLAorICAgICAgICBGb3JPZlN0YXRlbWVudDogJ0Zvck9mU3Rh
dGVtZW50JywKKyAgICAgICAgRm9yU3RhdGVtZW50OiAnRm9yU3RhdGVtZW50JywKKyAgICAgICAg
RnVuY3Rpb25EZWNsYXJhdGlvbjogJ0Z1bmN0aW9uRGVjbGFyYXRpb24nLAorICAgICAgICBGdW5j
dGlvbkV4cHJlc3Npb246ICdGdW5jdGlvbkV4cHJlc3Npb24nLAorICAgICAgICBHbG9iOiAnR2xv
YicsCisgICAgICAgIElkZW50aWZpZXI6ICdJZGVudGlmaWVyJywKKyAgICAgICAgSWZTdGF0ZW1l
bnQ6ICdJZlN0YXRlbWVudCcsCisgICAgICAgIEltcG9ydERlY2xhcmF0aW9uOiAnSW1wb3J0RGVj
bGFyYXRpb24nLAorICAgICAgICBJbXBvcnRTcGVjaWZpZXI6ICdJbXBvcnRTcGVjaWZpZXInLAor
ICAgICAgICBMYWJlbGVkU3RhdGVtZW50OiAnTGFiZWxlZFN0YXRlbWVudCcsCisgICAgICAgIExp
dGVyYWw6ICdMaXRlcmFsJywKKyAgICAgICAgTG9naWNhbEV4cHJlc3Npb246ICdMb2dpY2FsRXhw
cmVzc2lvbicsCisgICAgICAgIE1lbWJlckV4cHJlc3Npb246ICdNZW1iZXJFeHByZXNzaW9uJywK
KyAgICAgICAgTWV0aG9kRGVmaW5pdGlvbjogJ01ldGhvZERlZmluaXRpb24nLAorICAgICAgICBN
b2R1bGVEZWNsYXJhdGlvbjogJ01vZHVsZURlY2xhcmF0aW9uJywKKyAgICAgICAgTmV3RXhwcmVz
c2lvbjogJ05ld0V4cHJlc3Npb24nLAorICAgICAgICBPYmplY3RFeHByZXNzaW9uOiAnT2JqZWN0
RXhwcmVzc2lvbicsCisgICAgICAgIE9iamVjdFBhdHRlcm46ICdPYmplY3RQYXR0ZXJuJywKKyAg
ICAgICAgUGF0aDogICdQYXRoJywKKyAgICAgICAgUHJvZ3JhbTogJ1Byb2dyYW0nLAorICAgICAg
ICBQcm9wZXJ0eTogJ1Byb3BlcnR5JywKKyAgICAgICAgUmV0dXJuU3RhdGVtZW50OiAnUmV0dXJu
U3RhdGVtZW50JywKKyAgICAgICAgU2VxdWVuY2VFeHByZXNzaW9uOiAnU2VxdWVuY2VFeHByZXNz
aW9uJywKKyAgICAgICAgU3ByZWFkRWxlbWVudDogJ1NwcmVhZEVsZW1lbnQnLAorICAgICAgICBT
d2l0Y2hDYXNlOiAnU3dpdGNoQ2FzZScsCisgICAgICAgIFN3aXRjaFN0YXRlbWVudDogJ1N3aXRj
aFN0YXRlbWVudCcsCisgICAgICAgIFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjogJ1RhZ2dlZFRl
bXBsYXRlRXhwcmVzc2lvbicsCisgICAgICAgIFRlbXBsYXRlRWxlbWVudDogJ1RlbXBsYXRlRWxl
bWVudCcsCisgICAgICAgIFRlbXBsYXRlTGl0ZXJhbDogJ1RlbXBsYXRlTGl0ZXJhbCcsCisgICAg
ICAgIFRoaXNFeHByZXNzaW9uOiAnVGhpc0V4cHJlc3Npb24nLAorICAgICAgICBUaHJvd1N0YXRl
bWVudDogJ1Rocm93U3RhdGVtZW50JywKKyAgICAgICAgVHJ5U3RhdGVtZW50OiAnVHJ5U3RhdGVt
ZW50JywKKyAgICAgICAgVW5hcnlFeHByZXNzaW9uOiAnVW5hcnlFeHByZXNzaW9uJywKKyAgICAg
ICAgVXBkYXRlRXhwcmVzc2lvbjogJ1VwZGF0ZUV4cHJlc3Npb24nLAorICAgICAgICBWYXJpYWJs
ZURlY2xhcmF0aW9uOiAnVmFyaWFibGVEZWNsYXJhdGlvbicsCisgICAgICAgIFZhcmlhYmxlRGVj
bGFyYXRvcjogJ1ZhcmlhYmxlRGVjbGFyYXRvcicsCisgICAgICAgIFdoaWxlU3RhdGVtZW50OiAn
V2hpbGVTdGF0ZW1lbnQnLAorICAgICAgICBXaXRoU3RhdGVtZW50OiAnV2l0aFN0YXRlbWVudCcs
CisgICAgICAgIFhKU0lkZW50aWZpZXI6ICdYSlNJZGVudGlmaWVyJywKKyAgICAgICAgWEpTRW1w
dHlFeHByZXNzaW9uOiAnWEpTRW1wdHlFeHByZXNzaW9uJywKKyAgICAgICAgWEpTRXhwcmVzc2lv
bkNvbnRhaW5lcjogJ1hKU0V4cHJlc3Npb25Db250YWluZXInLAorICAgICAgICBYSlNFbGVtZW50
OiAnWEpTRWxlbWVudCcsCisgICAgICAgIFhKU0Nsb3NpbmdFbGVtZW50OiAnWEpTQ2xvc2luZ0Vs
ZW1lbnQnLAorICAgICAgICBYSlNPcGVuaW5nRWxlbWVudDogJ1hKU09wZW5pbmdFbGVtZW50JywK
KyAgICAgICAgWEpTQXR0cmlidXRlOiAnWEpTQXR0cmlidXRlJywKKyAgICAgICAgWEpTVGV4dDog
J1hKU1RleHQnLAorICAgICAgICBZaWVsZEV4cHJlc3Npb246ICdZaWVsZEV4cHJlc3Npb24nCisg
ICAgfTsKKworICAgIFByb3BlcnR5S2luZCA9IHsKKyAgICAgICAgRGF0YTogMSwKKyAgICAgICAg
R2V0OiAyLAorICAgICAgICBTZXQ6IDQKKyAgICB9OworCisgICAgQ2xhc3NQcm9wZXJ0eVR5cGUg
PSB7CisgICAgICAgIHN0YXRpYzogJ3N0YXRpYycsCisgICAgICAgIHByb3RvdHlwZTogJ3Byb3Rv
dHlwZScKKyAgICB9OworCisgICAgLy8gRXJyb3IgbWVzc2FnZXMgc2hvdWxkIGJlIGlkZW50aWNh
bCB0byBWOC4KKyAgICBNZXNzYWdlcyA9IHsKKyAgICAgICAgVW5leHBlY3RlZFRva2VuOiAgJ1Vu
ZXhwZWN0ZWQgdG9rZW4gJTAnLAorICAgICAgICBVbmV4cGVjdGVkTnVtYmVyOiAgJ1VuZXhwZWN0
ZWQgbnVtYmVyJywKKyAgICAgICAgVW5leHBlY3RlZFN0cmluZzogICdVbmV4cGVjdGVkIHN0cmlu
ZycsCisgICAgICAgIFVuZXhwZWN0ZWRJZGVudGlmaWVyOiAgJ1VuZXhwZWN0ZWQgaWRlbnRpZmll
cicsCisgICAgICAgIFVuZXhwZWN0ZWRSZXNlcnZlZDogICdVbmV4cGVjdGVkIHJlc2VydmVkIHdv
cmQnLAorICAgICAgICBVbmV4cGVjdGVkVGVtcGxhdGU6ICAnVW5leHBlY3RlZCBxdWFzaSAlMCcs
CisgICAgICAgIFVuZXhwZWN0ZWRFT1M6ICAnVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQnLAorICAg
ICAgICBOZXdsaW5lQWZ0ZXJUaHJvdzogICdJbGxlZ2FsIG5ld2xpbmUgYWZ0ZXIgdGhyb3cnLAor
ICAgICAgICBJbnZhbGlkUmVnRXhwOiAnSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24nLAorICAg
ICAgICBVbnRlcm1pbmF0ZWRSZWdFeHA6ICAnSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246IG1p
c3NpbmcgLycsCisgICAgICAgIEludmFsaWRMSFNJbkFzc2lnbm1lbnQ6ICAnSW52YWxpZCBsZWZ0
LWhhbmQgc2lkZSBpbiBhc3NpZ25tZW50JywKKyAgICAgICAgSW52YWxpZExIU0luRm9ybWFsc0xp
c3Q6ICAnSW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiBmb3JtYWxzIGxpc3QnLAorICAgICAgICBJ
bnZhbGlkTEhTSW5Gb3JJbjogICdJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGZvci1pbicsCisg
ICAgICAgIE11bHRpcGxlRGVmYXVsdHNJblN3aXRjaDogJ01vcmUgdGhhbiBvbmUgZGVmYXVsdCBj
bGF1c2UgaW4gc3dpdGNoIHN0YXRlbWVudCcsCisgICAgICAgIE5vQ2F0Y2hPckZpbmFsbHk6ICAn
TWlzc2luZyBjYXRjaCBvciBmaW5hbGx5IGFmdGVyIHRyeScsCisgICAgICAgIFVua25vd25MYWJl
bDogJ1VuZGVmaW5lZCBsYWJlbCBcJyUwXCcnLAorICAgICAgICBSZWRlY2xhcmF0aW9uOiAnJTAg
XCclMVwnIGhhcyBhbHJlYWR5IGJlZW4gZGVjbGFyZWQnLAorICAgICAgICBJbGxlZ2FsQ29udGlu
dWU6ICdJbGxlZ2FsIGNvbnRpbnVlIHN0YXRlbWVudCcsCisgICAgICAgIElsbGVnYWxCcmVhazog
J0lsbGVnYWwgYnJlYWsgc3RhdGVtZW50JywKKyAgICAgICAgSWxsZWdhbER1cGxpY2F0ZUNsYXNz
UHJvcGVydHk6ICdJbGxlZ2FsIGR1cGxpY2F0ZSBwcm9wZXJ0eSBpbiBjbGFzcyBkZWZpbml0aW9u
JywKKyAgICAgICAgSWxsZWdhbFJldHVybjogJ0lsbGVnYWwgcmV0dXJuIHN0YXRlbWVudCcsCisg
ICAgICAgIElsbGVnYWxZaWVsZDogJ0lsbGVnYWwgeWllbGQgZXhwcmVzc2lvbicsCisgICAgICAg
IElsbGVnYWxTcHJlYWQ6ICdJbGxlZ2FsIHNwcmVhZCBlbGVtZW50JywKKyAgICAgICAgU3RyaWN0
TW9kZVdpdGg6ICAnU3RyaWN0IG1vZGUgY29kZSBtYXkgbm90IGluY2x1ZGUgYSB3aXRoIHN0YXRl
bWVudCcsCisgICAgICAgIFN0cmljdENhdGNoVmFyaWFibGU6ICAnQ2F0Y2ggdmFyaWFibGUgbWF5
IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZScsCisgICAgICAgIFN0cmlj
dFZhck5hbWU6ICAnVmFyaWFibGUgbmFtZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGlu
IHN0cmljdCBtb2RlJywKKyAgICAgICAgU3RyaWN0UGFyYW1OYW1lOiAgJ1BhcmFtZXRlciBuYW1l
IGV2YWwgb3IgYXJndW1lbnRzIGlzIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlJywKKyAgICAg
ICAgU3RyaWN0UGFyYW1EdXBlOiAnU3RyaWN0IG1vZGUgZnVuY3Rpb24gbWF5IG5vdCBoYXZlIGR1
cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMnLAorICAgICAgICBQYXJhbWV0ZXJBZnRlclJlc3RQYXJh
bWV0ZXI6ICdSZXN0IHBhcmFtZXRlciBtdXN0IGJlIGZpbmFsIHBhcmFtZXRlciBvZiBhbiBhcmd1
bWVudCBsaXN0JywKKyAgICAgICAgRWxlbWVudEFmdGVyU3ByZWFkRWxlbWVudDogJ1NwcmVhZCBt
dXN0IGJlIHRoZSBmaW5hbCBlbGVtZW50IG9mIGFuIGVsZW1lbnQgbGlzdCcsCisgICAgICAgIE9i
amVjdFBhdHRlcm5Bc1Jlc3RQYXJhbWV0ZXI6ICdJbnZhbGlkIHJlc3QgcGFyYW1ldGVyJywKKyAg
ICAgICAgT2JqZWN0UGF0dGVybkFzU3ByZWFkOiAnSW52YWxpZCBzcHJlYWQgYXJndW1lbnQnLAor
ICAgICAgICBTdHJpY3RGdW5jdGlvbk5hbWU6ICAnRnVuY3Rpb24gbmFtZSBtYXkgbm90IGJlIGV2
YWwgb3IgYXJndW1lbnRzIGluIHN0cmljdCBtb2RlJywKKyAgICAgICAgU3RyaWN0T2N0YWxMaXRl
cmFsOiAgJ09jdGFsIGxpdGVyYWxzIGFyZSBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZS4nLAor
ICAgICAgICBTdHJpY3REZWxldGU6ICAnRGVsZXRlIG9mIGFuIHVucXVhbGlmaWVkIGlkZW50aWZp
ZXIgaW4gc3RyaWN0IG1vZGUuJywKKyAgICAgICAgU3RyaWN0RHVwbGljYXRlUHJvcGVydHk6ICAn
RHVwbGljYXRlIGRhdGEgcHJvcGVydHkgaW4gb2JqZWN0IGxpdGVyYWwgbm90IGFsbG93ZWQgaW4g
c3RyaWN0IG1vZGUnLAorICAgICAgICBBY2Nlc3NvckRhdGFQcm9wZXJ0eTogICdPYmplY3QgbGl0
ZXJhbCBtYXkgbm90IGhhdmUgZGF0YSBhbmQgYWNjZXNzb3IgcHJvcGVydHkgd2l0aCB0aGUgc2Ft
ZSBuYW1lJywKKyAgICAgICAgQWNjZXNzb3JHZXRTZXQ6ICAnT2JqZWN0IGxpdGVyYWwgbWF5IG5v
dCBoYXZlIG11bHRpcGxlIGdldC9zZXQgYWNjZXNzb3JzIHdpdGggdGhlIHNhbWUgbmFtZScsCisg
ICAgICAgIFN0cmljdExIU0Fzc2lnbm1lbnQ6ICAnQXNzaWdubWVudCB0byBldmFsIG9yIGFyZ3Vt
ZW50cyBpcyBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZScsCisgICAgICAgIFN0cmljdExIU1Bv
c3RmaXg6ICAnUG9zdGZpeCBpbmNyZW1lbnQvZGVjcmVtZW50IG1heSBub3QgaGF2ZSBldmFsIG9y
IGFyZ3VtZW50cyBvcGVyYW5kIGluIHN0cmljdCBtb2RlJywKKyAgICAgICAgU3RyaWN0TEhTUHJl
Zml4OiAgJ1ByZWZpeCBpbmNyZW1lbnQvZGVjcmVtZW50IG1heSBub3QgaGF2ZSBldmFsIG9yIGFy
Z3VtZW50cyBvcGVyYW5kIGluIHN0cmljdCBtb2RlJywKKyAgICAgICAgU3RyaWN0UmVzZXJ2ZWRX
b3JkOiAgJ1VzZSBvZiBmdXR1cmUgcmVzZXJ2ZWQgd29yZCBpbiBzdHJpY3QgbW9kZScsCisgICAg
ICAgIE5vRnJvbUFmdGVySW1wb3J0OiAnTWlzc2luZyBmcm9tIGFmdGVyIGltcG9ydCcsCisgICAg
ICAgIE5vWWllbGRJbkdlbmVyYXRvcjogJ01pc3NpbmcgeWllbGQgaW4gZ2VuZXJhdG9yJywKKyAg
ICAgICAgTm9VbmludGlhbGl6ZWRDb25zdDogJ0NvbnN0IG11c3QgYmUgaW5pdGlhbGl6ZWQnLAor
ICAgICAgICBDb21wcmVoZW5zaW9uUmVxdWlyZXNCbG9jazogJ0NvbXByZWhlbnNpb24gbXVzdCBo
YXZlIGF0IGxlYXN0IG9uZSBibG9jaycsCisgICAgICAgIENvbXByZWhlbnNpb25FcnJvcjogICdD
b21wcmVoZW5zaW9uIEVycm9yJywKKyAgICAgICAgRWFjaE5vdEFsbG93ZWQ6ICAnRWFjaCBpcyBu
b3Qgc3VwcG9ydGVkJywKKyAgICAgICAgSW52YWxpZFhKU1RhZ05hbWU6ICdYSlMgdGFnIG5hbWUg
Y2FuIG5vdCBiZSBlbXB0eScsCisgICAgICAgIEludmFsaWRYSlNBdHRyaWJ1dGVWYWx1ZTogJ1hK
UyB2YWx1ZSBzaG91bGQgYmUgZWl0aGVyIGFuIGV4cHJlc3Npb24gb3IgYSBxdW90ZWQgWEpTIHRl
eHQnLAorICAgICAgICBFeHBlY3RlZFhKU0Nsb3NpbmdUYWc6ICdFeHBlY3RlZCBjb3JyZXNwb25k
aW5nIFhKUyBjbG9zaW5nIHRhZyBmb3IgJTAnCisgICAgfTsKKworICAgIC8vIFNlZSBhbHNvIHRv
b2xzL2dlbmVyYXRlLXVuaWNvZGUtcmVnZXgucHkuCisgICAgUmVnZXggPSB7CisgICAgICAgIE5v
bkFzY2lpSWRlbnRpZmllclN0YXJ0OiBuZXcgUmVnRXhwKCdbXHhhYVx4YjVceGJhXHhjMC1ceGQ2
XHhkOC1ceGY2XHhmOC1cdTAyYzFcdTAyYzYtXHUwMmQxXHUwMmUwLVx1MDJlNFx1MDJlY1x1MDJl
ZVx1MDM3MC1cdTAzNzRcdTAzNzZcdTAzNzdcdTAzN2EtXHUwMzdkXHUwMzg2XHUwMzg4LVx1MDM4
YVx1MDM4Y1x1MDM4ZS1cdTAzYTFcdTAzYTMtXHUwM2Y1XHUwM2Y3LVx1MDQ4MVx1MDQ4YS1cdTA1
MjdcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDVkMC1cdTA1ZWFcdTA1ZjAtXHUw
NWYyXHUwNjIwLVx1MDY0YVx1MDY2ZVx1MDY2Zlx1MDY3MS1cdTA2ZDNcdTA2ZDVcdTA2ZTVcdTA2
ZTZcdTA2ZWVcdTA2ZWZcdTA2ZmEtXHUwNmZjXHUwNmZmXHUwNzEwXHUwNzEyLVx1MDcyZlx1MDc0
ZC1cdTA3YTVcdTA3YjFcdTA3Y2EtXHUwN2VhXHUwN2Y0XHUwN2Y1XHUwN2ZhXHUwODAwLVx1MDgx
NVx1MDgxYVx1MDgyNFx1MDgyOFx1MDg0MC1cdTA4NThcdTA4YTBcdTA4YTItXHUwOGFjXHUwOTA0
LVx1MDkzOVx1MDkzZFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTc3XHUwOTc5LVx1MDk3
Zlx1MDk4NS1cdTA5OGNcdTA5OGZcdTA5OTBcdTA5OTMtXHUwOWE4XHUwOWFhLVx1MDliMFx1MDli
Mlx1MDliNi1cdTA5YjlcdTA5YmRcdTA5Y2VcdTA5ZGNcdTA5ZGRcdTA5ZGYtXHUwOWUxXHUwOWYw
XHUwOWYxXHUwYTA1LVx1MGEwYVx1MGEwZlx1MGExMFx1MGExMy1cdTBhMjhcdTBhMmEtXHUwYTMw
XHUwYTMyXHUwYTMzXHUwYTM1XHUwYTM2XHUwYTM4XHUwYTM5XHUwYTU5LVx1MGE1Y1x1MGE1ZVx1
MGE3Mi1cdTBhNzRcdTBhODUtXHUwYThkXHUwYThmLVx1MGE5MVx1MGE5My1cdTBhYThcdTBhYWEt
XHUwYWIwXHUwYWIyXHUwYWIzXHUwYWI1LVx1MGFiOVx1MGFiZFx1MGFkMFx1MGFlMFx1MGFlMVx1
MGIwNS1cdTBiMGNcdTBiMGZcdTBiMTBcdTBiMTMtXHUwYjI4XHUwYjJhLVx1MGIzMFx1MGIzMlx1
MGIzM1x1MGIzNS1cdTBiMzlcdTBiM2RcdTBiNWNcdTBiNWRcdTBiNWYtXHUwYjYxXHUwYjcxXHUw
YjgzXHUwYjg1LVx1MGI4YVx1MGI4ZS1cdTBiOTBcdTBiOTItXHUwYjk1XHUwYjk5XHUwYjlhXHUw
YjljXHUwYjllXHUwYjlmXHUwYmEzXHUwYmE0XHUwYmE4LVx1MGJhYVx1MGJhZS1cdTBiYjlcdTBi
ZDBcdTBjMDUtXHUwYzBjXHUwYzBlLVx1MGMxMFx1MGMxMi1cdTBjMjhcdTBjMmEtXHUwYzMzXHUw
YzM1LVx1MGMzOVx1MGMzZFx1MGM1OFx1MGM1OVx1MGM2MFx1MGM2MVx1MGM4NS1cdTBjOGNcdTBj
OGUtXHUwYzkwXHUwYzkyLVx1MGNhOFx1MGNhYS1cdTBjYjNcdTBjYjUtXHUwY2I5XHUwY2JkXHUw
Y2RlXHUwY2UwXHUwY2UxXHUwY2YxXHUwY2YyXHUwZDA1LVx1MGQwY1x1MGQwZS1cdTBkMTBcdTBk
MTItXHUwZDNhXHUwZDNkXHUwZDRlXHUwZDYwXHUwZDYxXHUwZDdhLVx1MGQ3Zlx1MGQ4NS1cdTBk
OTZcdTBkOWEtXHUwZGIxXHUwZGIzLVx1MGRiYlx1MGRiZFx1MGRjMC1cdTBkYzZcdTBlMDEtXHUw
ZTMwXHUwZTMyXHUwZTMzXHUwZTQwLVx1MGU0Nlx1MGU4MVx1MGU4Mlx1MGU4NFx1MGU4N1x1MGU4
OFx1MGU4YVx1MGU4ZFx1MGU5NC1cdTBlOTdcdTBlOTktXHUwZTlmXHUwZWExLVx1MGVhM1x1MGVh
NVx1MGVhN1x1MGVhYVx1MGVhYlx1MGVhZC1cdTBlYjBcdTBlYjJcdTBlYjNcdTBlYmRcdTBlYzAt
XHUwZWM0XHUwZWM2XHUwZWRjLVx1MGVkZlx1MGYwMFx1MGY0MC1cdTBmNDdcdTBmNDktXHUwZjZj
XHUwZjg4LVx1MGY4Y1x1MTAwMC1cdTEwMmFcdTEwM2ZcdTEwNTAtXHUxMDU1XHUxMDVhLVx1MTA1
ZFx1MTA2MVx1MTA2NVx1MTA2Nlx1MTA2ZS1cdTEwNzBcdTEwNzUtXHUxMDgxXHUxMDhlXHUxMGEw
LVx1MTBjNVx1MTBjN1x1MTBjZFx1MTBkMC1cdTEwZmFcdTEwZmMtXHUxMjQ4XHUxMjRhLVx1MTI0
ZFx1MTI1MC1cdTEyNTZcdTEyNThcdTEyNWEtXHUxMjVkXHUxMjYwLVx1MTI4OFx1MTI4YS1cdTEy
OGRcdTEyOTAtXHUxMmIwXHUxMmIyLVx1MTJiNVx1MTJiOC1cdTEyYmVcdTEyYzBcdTEyYzItXHUx
MmM1XHUxMmM4LVx1MTJkNlx1MTJkOC1cdTEzMTBcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1YVx1
MTM4MC1cdTEzOGZcdTEzYTAtXHUxM2Y0XHUxNDAxLVx1MTY2Y1x1MTY2Zi1cdTE2N2ZcdTE2ODEt
XHUxNjlhXHUxNmEwLVx1MTZlYVx1MTZlZS1cdTE2ZjBcdTE3MDAtXHUxNzBjXHUxNzBlLVx1MTcx
MVx1MTcyMC1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Y1x1MTc2ZS1cdTE3NzBcdTE3
ODAtXHUxN2IzXHUxN2Q3XHUxN2RjXHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4YThcdTE4YWFcdTE4
YjAtXHUxOGY1XHUxOTAwLVx1MTkxY1x1MTk1MC1cdTE5NmRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1
MTlhYlx1MTljMS1cdTE5YzdcdTFhMDAtXHUxYTE2XHUxYTIwLVx1MWE1NFx1MWFhN1x1MWIwNS1c
dTFiMzNcdTFiNDUtXHUxYjRiXHUxYjgzLVx1MWJhMFx1MWJhZVx1MWJhZlx1MWJiYS1cdTFiZTVc
dTFjMDAtXHUxYzIzXHUxYzRkLVx1MWM0Zlx1MWM1YS1cdTFjN2RcdTFjZTktXHUxY2VjXHUxY2Vl
LVx1MWNmMVx1MWNmNVx1MWNmNlx1MWQwMC1cdTFkYmZcdTFlMDAtXHUxZjE1XHUxZjE4LVx1MWYx
ZFx1MWYyMC1cdTFmNDVcdTFmNDgtXHUxZjRkXHUxZjUwLVx1MWY1N1x1MWY1OVx1MWY1Ylx1MWY1
ZFx1MWY1Zi1cdTFmN2RcdTFmODAtXHUxZmI0XHUxZmI2LVx1MWZiY1x1MWZiZVx1MWZjMi1cdTFm
YzRcdTFmYzYtXHUxZmNjXHUxZmQwLVx1MWZkM1x1MWZkNi1cdTFmZGJcdTFmZTAtXHUxZmVjXHUx
ZmYyLVx1MWZmNFx1MWZmNi1cdTFmZmNcdTIwNzFcdTIwN2ZcdTIwOTAtXHUyMDljXHUyMTAyXHUy
MTA3XHUyMTBhLVx1MjExM1x1MjExNVx1MjExOS1cdTIxMWRcdTIxMjRcdTIxMjZcdTIxMjhcdTIx
MmEtXHUyMTJkXHUyMTJmLVx1MjEzOVx1MjEzYy1cdTIxM2ZcdTIxNDUtXHUyMTQ5XHUyMTRlXHUy
MTYwLVx1MjE4OFx1MmMwMC1cdTJjMmVcdTJjMzAtXHUyYzVlXHUyYzYwLVx1MmNlNFx1MmNlYi1c
dTJjZWVcdTJjZjJcdTJjZjNcdTJkMDAtXHUyZDI1XHUyZDI3XHUyZDJkXHUyZDMwLVx1MmQ2N1x1
MmQ2Zlx1MmQ4MC1cdTJkOTZcdTJkYTAtXHUyZGE2XHUyZGE4LVx1MmRhZVx1MmRiMC1cdTJkYjZc
dTJkYjgtXHUyZGJlXHUyZGMwLVx1MmRjNlx1MmRjOC1cdTJkY2VcdTJkZDAtXHUyZGQ2XHUyZGQ4
LVx1MmRkZVx1MmUyZlx1MzAwNS1cdTMwMDdcdTMwMjEtXHUzMDI5XHUzMDMxLVx1MzAzNVx1MzAz
OC1cdTMwM2NcdTMwNDEtXHUzMDk2XHUzMDlkLVx1MzA5Zlx1MzBhMS1cdTMwZmFcdTMwZmMtXHUz
MGZmXHUzMTA1LVx1MzEyZFx1MzEzMS1cdTMxOGVcdTMxYTAtXHUzMWJhXHUzMWYwLVx1MzFmZlx1
MzQwMC1cdTRkYjVcdTRlMDAtXHU5ZmNjXHVhMDAwLVx1YTQ4Y1x1YTRkMC1cdWE0ZmRcdWE1MDAt
XHVhNjBjXHVhNjEwLVx1YTYxZlx1YTYyYVx1YTYyYlx1YTY0MC1cdWE2NmVcdWE2N2YtXHVhNjk3
XHVhNmEwLVx1YTZlZlx1YTcxNy1cdWE3MWZcdWE3MjItXHVhNzg4XHVhNzhiLVx1YTc4ZVx1YTc5
MC1cdWE3OTNcdWE3YTAtXHVhN2FhXHVhN2Y4LVx1YTgwMVx1YTgwMy1cdWE4MDVcdWE4MDctXHVh
ODBhXHVhODBjLVx1YTgyMlx1YTg0MC1cdWE4NzNcdWE4ODItXHVhOGIzXHVhOGYyLVx1YThmN1x1
YThmYlx1YTkwYS1cdWE5MjVcdWE5MzAtXHVhOTQ2XHVhOTYwLVx1YTk3Y1x1YTk4NC1cdWE5YjJc
dWE5Y2ZcdWFhMDAtXHVhYTI4XHVhYTQwLVx1YWE0Mlx1YWE0NC1cdWFhNGJcdWFhNjAtXHVhYTc2
XHVhYTdhXHVhYTgwLVx1YWFhZlx1YWFiMVx1YWFiNVx1YWFiNlx1YWFiOS1cdWFhYmRcdWFhYzBc
dWFhYzJcdWFhZGItXHVhYWRkXHVhYWUwLVx1YWFlYVx1YWFmMi1cdWFhZjRcdWFiMDEtXHVhYjA2
XHVhYjA5LVx1YWIwZVx1YWIxMS1cdWFiMTZcdWFiMjAtXHVhYjI2XHVhYjI4LVx1YWIyZVx1YWJj
MC1cdWFiZTJcdWFjMDAtXHVkN2EzXHVkN2IwLVx1ZDdjNlx1ZDdjYi1cdWQ3ZmJcdWY5MDAtXHVm
YTZkXHVmYTcwLVx1ZmFkOVx1ZmIwMC1cdWZiMDZcdWZiMTMtXHVmYjE3XHVmYjFkXHVmYjFmLVx1
ZmIyOFx1ZmIyYS1cdWZiMzZcdWZiMzgtXHVmYjNjXHVmYjNlXHVmYjQwXHVmYjQxXHVmYjQzXHVm
YjQ0XHVmYjQ2LVx1ZmJiMVx1ZmJkMy1cdWZkM2RcdWZkNTAtXHVmZDhmXHVmZDkyLVx1ZmRjN1x1
ZmRmMC1cdWZkZmJcdWZlNzAtXHVmZTc0XHVmZTc2LVx1ZmVmY1x1ZmYyMS1cdWZmM2FcdWZmNDEt
XHVmZjVhXHVmZjY2LVx1ZmZiZVx1ZmZjMi1cdWZmYzdcdWZmY2EtXHVmZmNmXHVmZmQyLVx1ZmZk
N1x1ZmZkYS1cdWZmZGNdJyksCisgICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6IG5ldyBS
ZWdFeHAoJ1tceGFhXHhiNVx4YmFceGMwLVx4ZDZceGQ4LVx4ZjZceGY4LVx1MDJjMVx1MDJjNi1c
dTAyZDFcdTAyZTAtXHUwMmU0XHUwMmVjXHUwMmVlXHUwMzAwLVx1MDM3NFx1MDM3Nlx1MDM3N1x1
MDM3YS1cdTAzN2RcdTAzODZcdTAzODgtXHUwMzhhXHUwMzhjXHUwMzhlLVx1MDNhMVx1MDNhMy1c
dTAzZjVcdTAzZjctXHUwNDgxXHUwNDgzLVx1MDQ4N1x1MDQ4YS1cdTA1MjdcdTA1MzEtXHUwNTU2
XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDU5MS1cdTA1YmRcdTA1YmZcdTA1YzFcdTA1YzJcdTA1YzRc
dTA1YzVcdTA1YzdcdTA1ZDAtXHUwNWVhXHUwNWYwLVx1MDVmMlx1MDYxMC1cdTA2MWFcdTA2MjAt
XHUwNjY5XHUwNjZlLVx1MDZkM1x1MDZkNS1cdTA2ZGNcdTA2ZGYtXHUwNmU4XHUwNmVhLVx1MDZm
Y1x1MDZmZlx1MDcxMC1cdTA3NGFcdTA3NGQtXHUwN2IxXHUwN2MwLVx1MDdmNVx1MDdmYVx1MDgw
MC1cdTA4MmRcdTA4NDAtXHUwODViXHUwOGEwXHUwOGEyLVx1MDhhY1x1MDhlNC1cdTA4ZmVcdTA5
MDAtXHUwOTYzXHUwOTY2LVx1MDk2Zlx1MDk3MS1cdTA5NzdcdTA5NzktXHUwOTdmXHUwOTgxLVx1
MDk4M1x1MDk4NS1cdTA5OGNcdTA5OGZcdTA5OTBcdTA5OTMtXHUwOWE4XHUwOWFhLVx1MDliMFx1
MDliMlx1MDliNi1cdTA5YjlcdTA5YmMtXHUwOWM0XHUwOWM3XHUwOWM4XHUwOWNiLVx1MDljZVx1
MDlkN1x1MDlkY1x1MDlkZFx1MDlkZi1cdTA5ZTNcdTA5ZTYtXHUwOWYxXHUwYTAxLVx1MGEwM1x1
MGEwNS1cdTBhMGFcdTBhMGZcdTBhMTBcdTBhMTMtXHUwYTI4XHUwYTJhLVx1MGEzMFx1MGEzMlx1
MGEzM1x1MGEzNVx1MGEzNlx1MGEzOFx1MGEzOVx1MGEzY1x1MGEzZS1cdTBhNDJcdTBhNDdcdTBh
NDhcdTBhNGItXHUwYTRkXHUwYTUxXHUwYTU5LVx1MGE1Y1x1MGE1ZVx1MGE2Ni1cdTBhNzVcdTBh
ODEtXHUwYTgzXHUwYTg1LVx1MGE4ZFx1MGE4Zi1cdTBhOTFcdTBhOTMtXHUwYWE4XHUwYWFhLVx1
MGFiMFx1MGFiMlx1MGFiM1x1MGFiNS1cdTBhYjlcdTBhYmMtXHUwYWM1XHUwYWM3LVx1MGFjOVx1
MGFjYi1cdTBhY2RcdTBhZDBcdTBhZTAtXHUwYWUzXHUwYWU2LVx1MGFlZlx1MGIwMS1cdTBiMDNc
dTBiMDUtXHUwYjBjXHUwYjBmXHUwYjEwXHUwYjEzLVx1MGIyOFx1MGIyYS1cdTBiMzBcdTBiMzJc
dTBiMzNcdTBiMzUtXHUwYjM5XHUwYjNjLVx1MGI0NFx1MGI0N1x1MGI0OFx1MGI0Yi1cdTBiNGRc
dTBiNTZcdTBiNTdcdTBiNWNcdTBiNWRcdTBiNWYtXHUwYjYzXHUwYjY2LVx1MGI2Zlx1MGI3MVx1
MGI4Mlx1MGI4M1x1MGI4NS1cdTBiOGFcdTBiOGUtXHUwYjkwXHUwYjkyLVx1MGI5NVx1MGI5OVx1
MGI5YVx1MGI5Y1x1MGI5ZVx1MGI5Zlx1MGJhM1x1MGJhNFx1MGJhOC1cdTBiYWFcdTBiYWUtXHUw
YmI5XHUwYmJlLVx1MGJjMlx1MGJjNi1cdTBiYzhcdTBiY2EtXHUwYmNkXHUwYmQwXHUwYmQ3XHUw
YmU2LVx1MGJlZlx1MGMwMS1cdTBjMDNcdTBjMDUtXHUwYzBjXHUwYzBlLVx1MGMxMFx1MGMxMi1c
dTBjMjhcdTBjMmEtXHUwYzMzXHUwYzM1LVx1MGMzOVx1MGMzZC1cdTBjNDRcdTBjNDYtXHUwYzQ4
XHUwYzRhLVx1MGM0ZFx1MGM1NVx1MGM1Nlx1MGM1OFx1MGM1OVx1MGM2MC1cdTBjNjNcdTBjNjYt
XHUwYzZmXHUwYzgyXHUwYzgzXHUwYzg1LVx1MGM4Y1x1MGM4ZS1cdTBjOTBcdTBjOTItXHUwY2E4
XHUwY2FhLVx1MGNiM1x1MGNiNS1cdTBjYjlcdTBjYmMtXHUwY2M0XHUwY2M2LVx1MGNjOFx1MGNj
YS1cdTBjY2RcdTBjZDVcdTBjZDZcdTBjZGVcdTBjZTAtXHUwY2UzXHUwY2U2LVx1MGNlZlx1MGNm
MVx1MGNmMlx1MGQwMlx1MGQwM1x1MGQwNS1cdTBkMGNcdTBkMGUtXHUwZDEwXHUwZDEyLVx1MGQz
YVx1MGQzZC1cdTBkNDRcdTBkNDYtXHUwZDQ4XHUwZDRhLVx1MGQ0ZVx1MGQ1N1x1MGQ2MC1cdTBk
NjNcdTBkNjYtXHUwZDZmXHUwZDdhLVx1MGQ3Zlx1MGQ4Mlx1MGQ4M1x1MGQ4NS1cdTBkOTZcdTBk
OWEtXHUwZGIxXHUwZGIzLVx1MGRiYlx1MGRiZFx1MGRjMC1cdTBkYzZcdTBkY2FcdTBkY2YtXHUw
ZGQ0XHUwZGQ2XHUwZGQ4LVx1MGRkZlx1MGRmMlx1MGRmM1x1MGUwMS1cdTBlM2FcdTBlNDAtXHUw
ZTRlXHUwZTUwLVx1MGU1OVx1MGU4MVx1MGU4Mlx1MGU4NFx1MGU4N1x1MGU4OFx1MGU4YVx1MGU4
ZFx1MGU5NC1cdTBlOTdcdTBlOTktXHUwZTlmXHUwZWExLVx1MGVhM1x1MGVhNVx1MGVhN1x1MGVh
YVx1MGVhYlx1MGVhZC1cdTBlYjlcdTBlYmItXHUwZWJkXHUwZWMwLVx1MGVjNFx1MGVjNlx1MGVj
OC1cdTBlY2RcdTBlZDAtXHUwZWQ5XHUwZWRjLVx1MGVkZlx1MGYwMFx1MGYxOFx1MGYxOVx1MGYy
MC1cdTBmMjlcdTBmMzVcdTBmMzdcdTBmMzlcdTBmM2UtXHUwZjQ3XHUwZjQ5LVx1MGY2Y1x1MGY3
MS1cdTBmODRcdTBmODYtXHUwZjk3XHUwZjk5LVx1MGZiY1x1MGZjNlx1MTAwMC1cdTEwNDlcdTEw
NTAtXHUxMDlkXHUxMGEwLVx1MTBjNVx1MTBjN1x1MTBjZFx1MTBkMC1cdTEwZmFcdTEwZmMtXHUx
MjQ4XHUxMjRhLVx1MTI0ZFx1MTI1MC1cdTEyNTZcdTEyNThcdTEyNWEtXHUxMjVkXHUxMjYwLVx1
MTI4OFx1MTI4YS1cdTEyOGRcdTEyOTAtXHUxMmIwXHUxMmIyLVx1MTJiNVx1MTJiOC1cdTEyYmVc
dTEyYzBcdTEyYzItXHUxMmM1XHUxMmM4LVx1MTJkNlx1MTJkOC1cdTEzMTBcdTEzMTItXHUxMzE1
XHUxMzE4LVx1MTM1YVx1MTM1ZC1cdTEzNWZcdTEzODAtXHUxMzhmXHUxM2EwLVx1MTNmNFx1MTQw
MS1cdTE2NmNcdTE2NmYtXHUxNjdmXHUxNjgxLVx1MTY5YVx1MTZhMC1cdTE2ZWFcdTE2ZWUtXHUx
NmYwXHUxNzAwLVx1MTcwY1x1MTcwZS1cdTE3MTRcdTE3MjAtXHUxNzM0XHUxNzQwLVx1MTc1M1x1
MTc2MC1cdTE3NmNcdTE3NmUtXHUxNzcwXHUxNzcyXHUxNzczXHUxNzgwLVx1MTdkM1x1MTdkN1x1
MTdkY1x1MTdkZFx1MTdlMC1cdTE3ZTlcdTE4MGItXHUxODBkXHUxODEwLVx1MTgxOVx1MTgyMC1c
dTE4NzdcdTE4ODAtXHUxOGFhXHUxOGIwLVx1MThmNVx1MTkwMC1cdTE5MWNcdTE5MjAtXHUxOTJi
XHUxOTMwLVx1MTkzYlx1MTk0Ni1cdTE5NmRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlhYlx1MTli
MC1cdTE5YzlcdTE5ZDAtXHUxOWQ5XHUxYTAwLVx1MWExYlx1MWEyMC1cdTFhNWVcdTFhNjAtXHUx
YTdjXHUxYTdmLVx1MWE4OVx1MWE5MC1cdTFhOTlcdTFhYTdcdTFiMDAtXHUxYjRiXHUxYjUwLVx1
MWI1OVx1MWI2Yi1cdTFiNzNcdTFiODAtXHUxYmYzXHUxYzAwLVx1MWMzN1x1MWM0MC1cdTFjNDlc
dTFjNGQtXHUxYzdkXHUxY2QwLVx1MWNkMlx1MWNkNC1cdTFjZjZcdTFkMDAtXHUxZGU2XHUxZGZj
LVx1MWYxNVx1MWYxOC1cdTFmMWRcdTFmMjAtXHUxZjQ1XHUxZjQ4LVx1MWY0ZFx1MWY1MC1cdTFm
NTdcdTFmNTlcdTFmNWJcdTFmNWRcdTFmNWYtXHUxZjdkXHUxZjgwLVx1MWZiNFx1MWZiNi1cdTFm
YmNcdTFmYmVcdTFmYzItXHUxZmM0XHUxZmM2LVx1MWZjY1x1MWZkMC1cdTFmZDNcdTFmZDYtXHUx
ZmRiXHUxZmUwLVx1MWZlY1x1MWZmMi1cdTFmZjRcdTFmZjYtXHUxZmZjXHUyMDBjXHUyMDBkXHUy
MDNmXHUyMDQwXHUyMDU0XHUyMDcxXHUyMDdmXHUyMDkwLVx1MjA5Y1x1MjBkMC1cdTIwZGNcdTIw
ZTFcdTIwZTUtXHUyMGYwXHUyMTAyXHUyMTA3XHUyMTBhLVx1MjExM1x1MjExNVx1MjExOS1cdTIx
MWRcdTIxMjRcdTIxMjZcdTIxMjhcdTIxMmEtXHUyMTJkXHUyMTJmLVx1MjEzOVx1MjEzYy1cdTIx
M2ZcdTIxNDUtXHUyMTQ5XHUyMTRlXHUyMTYwLVx1MjE4OFx1MmMwMC1cdTJjMmVcdTJjMzAtXHUy
YzVlXHUyYzYwLVx1MmNlNFx1MmNlYi1cdTJjZjNcdTJkMDAtXHUyZDI1XHUyZDI3XHUyZDJkXHUy
ZDMwLVx1MmQ2N1x1MmQ2Zlx1MmQ3Zi1cdTJkOTZcdTJkYTAtXHUyZGE2XHUyZGE4LVx1MmRhZVx1
MmRiMC1cdTJkYjZcdTJkYjgtXHUyZGJlXHUyZGMwLVx1MmRjNlx1MmRjOC1cdTJkY2VcdTJkZDAt
XHUyZGQ2XHUyZGQ4LVx1MmRkZVx1MmRlMC1cdTJkZmZcdTJlMmZcdTMwMDUtXHUzMDA3XHUzMDIx
LVx1MzAyZlx1MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNjXHUzMDQxLVx1MzA5Nlx1MzA5OVx1MzA5
YVx1MzA5ZC1cdTMwOWZcdTMwYTEtXHUzMGZhXHUzMGZjLVx1MzBmZlx1MzEwNS1cdTMxMmRcdTMx
MzEtXHUzMThlXHUzMWEwLVx1MzFiYVx1MzFmMC1cdTMxZmZcdTM0MDAtXHU0ZGI1XHU0ZTAwLVx1
OWZjY1x1YTAwMC1cdWE0OGNcdWE0ZDAtXHVhNGZkXHVhNTAwLVx1YTYwY1x1YTYxMC1cdWE2MmJc
dWE2NDAtXHVhNjZmXHVhNjc0LVx1YTY3ZFx1YTY3Zi1cdWE2OTdcdWE2OWYtXHVhNmYxXHVhNzE3
LVx1YTcxZlx1YTcyMi1cdWE3ODhcdWE3OGItXHVhNzhlXHVhNzkwLVx1YTc5M1x1YTdhMC1cdWE3
YWFcdWE3ZjgtXHVhODI3XHVhODQwLVx1YTg3M1x1YTg4MC1cdWE4YzRcdWE4ZDAtXHVhOGQ5XHVh
OGUwLVx1YThmN1x1YThmYlx1YTkwMC1cdWE5MmRcdWE5MzAtXHVhOTUzXHVhOTYwLVx1YTk3Y1x1
YTk4MC1cdWE5YzBcdWE5Y2YtXHVhOWQ5XHVhYTAwLVx1YWEzNlx1YWE0MC1cdWFhNGRcdWFhNTAt
XHVhYTU5XHVhYTYwLVx1YWE3Nlx1YWE3YVx1YWE3Ylx1YWE4MC1cdWFhYzJcdWFhZGItXHVhYWRk
XHVhYWUwLVx1YWFlZlx1YWFmMi1cdWFhZjZcdWFiMDEtXHVhYjA2XHVhYjA5LVx1YWIwZVx1YWIx
MS1cdWFiMTZcdWFiMjAtXHVhYjI2XHVhYjI4LVx1YWIyZVx1YWJjMC1cdWFiZWFcdWFiZWNcdWFi
ZWRcdWFiZjAtXHVhYmY5XHVhYzAwLVx1ZDdhM1x1ZDdiMC1cdWQ3YzZcdWQ3Y2ItXHVkN2ZiXHVm
OTAwLVx1ZmE2ZFx1ZmE3MC1cdWZhZDlcdWZiMDAtXHVmYjA2XHVmYjEzLVx1ZmIxN1x1ZmIxZC1c
dWZiMjhcdWZiMmEtXHVmYjM2XHVmYjM4LVx1ZmIzY1x1ZmIzZVx1ZmI0MFx1ZmI0MVx1ZmI0M1x1
ZmI0NFx1ZmI0Ni1cdWZiYjFcdWZiZDMtXHVmZDNkXHVmZDUwLVx1ZmQ4Zlx1ZmQ5Mi1cdWZkYzdc
dWZkZjAtXHVmZGZiXHVmZTAwLVx1ZmUwZlx1ZmUyMC1cdWZlMjZcdWZlMzNcdWZlMzRcdWZlNGQt
XHVmZTRmXHVmZTcwLVx1ZmU3NFx1ZmU3Ni1cdWZlZmNcdWZmMTAtXHVmZjE5XHVmZjIxLVx1ZmYz
YVx1ZmYzZlx1ZmY0MS1cdWZmNWFcdWZmNjYtXHVmZmJlXHVmZmMyLVx1ZmZjN1x1ZmZjYS1cdWZm
Y2ZcdWZmZDItXHVmZmQ3XHVmZmRhLVx1ZmZkY10nKQorICAgIH07CisKKyAgICAvLyBFbnN1cmUg
dGhlIGNvbmRpdGlvbiBpcyB0cnVlLCBvdGhlcndpc2UgdGhyb3cgYW4gZXJyb3IuCisgICAgLy8g
VGhpcyBpcyBvbmx5IHRvIGhhdmUgYSBiZXR0ZXIgY29udHJhY3Qgc2VtYW50aWMsIGkuZS4gYW5v
dGhlciBzYWZldHkgbmV0CisgICAgLy8gdG8gY2F0Y2ggYSBsb2dpYyBlcnJvci4gVGhlIGNvbmRp
dGlvbiBzaGFsbCBiZSBmdWxmaWxsZWQgaW4gbm9ybWFsIGNhc2UuCisgICAgLy8gRG8gTk9UIHVz
ZSB0aGlzIHRvIGVuZm9yY2UgYSBjZXJ0YWluIGNvbmRpdGlvbiBvbiBhbnkgdXNlciBpbnB1dC4K
KworICAgIGZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24sIG1lc3NhZ2UpIHsKKyAgICAgICAgaWYg
KCFjb25kaXRpb24pIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQVNTRVJUOiAnICsg
bWVzc2FnZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0RlY2ltYWxEaWdp
dChjaCkgeworICAgICAgICByZXR1cm4gKGNoID49IDQ4ICYmIGNoIDw9IDU3KTsgICAvLyAwLi45
CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNIZXhEaWdpdChjaCkgeworICAgICAgICByZXR1cm4g
JzAxMjM0NTY3ODlhYmNkZWZBQkNERUYnLmluZGV4T2YoY2gpID49IDA7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gaXNPY3RhbERpZ2l0KGNoKSB7CisgICAgICAgIHJldHVybiAnMDEyMzQ1NjcnLmlu
ZGV4T2YoY2gpID49IDA7CisgICAgfQorCisKKyAgICAvLyA3LjIgV2hpdGUgU3BhY2UKKworICAg
IGZ1bmN0aW9uIGlzV2hpdGVTcGFjZShjaCkgeworICAgICAgICByZXR1cm4gKGNoID09PSAzMikg
fHwgIC8vIHNwYWNlCisgICAgICAgICAgICAoY2ggPT09IDkpIHx8ICAgICAgLy8gdGFiCisgICAg
ICAgICAgICAoY2ggPT09IDB4QikgfHwKKyAgICAgICAgICAgIChjaCA9PT0gMHhDKSB8fAorICAg
ICAgICAgICAgKGNoID09PSAweEEwKSB8fAorICAgICAgICAgICAgKGNoID49IDB4MTY4MCAmJiAn
XHUxNjgwXHUxODBFXHUyMDAwXHUyMDAxXHUyMDAyXHUyMDAzXHUyMDA0XHUyMDA1XHUyMDA2XHUy
MDA3XHUyMDA4XHUyMDA5XHUyMDBBXHUyMDJGXHUyMDVGXHUzMDAwXHVGRUZGJy5pbmRleE9mKFN0
cmluZy5mcm9tQ2hhckNvZGUoY2gpKSA+IDApOworICAgIH0KKworICAgIC8vIDcuMyBMaW5lIFRl
cm1pbmF0b3JzCisKKyAgICBmdW5jdGlvbiBpc0xpbmVUZXJtaW5hdG9yKGNoKSB7CisgICAgICAg
IHJldHVybiAoY2ggPT09IDEwKSB8fCAoY2ggPT09IDEzKSB8fCAoY2ggPT09IDB4MjAyOCkgfHwg
KGNoID09PSAweDIwMjkpOworICAgIH0KKworICAgIC8vIDcuNiBJZGVudGlmaWVyIE5hbWVzIGFu
ZCBJZGVudGlmaWVycworCisgICAgZnVuY3Rpb24gaXNJZGVudGlmaWVyU3RhcnQoY2gpIHsKKyAg
ICAgICAgcmV0dXJuIChjaCA9PT0gMzYpIHx8IChjaCA9PT0gOTUpIHx8ICAvLyAkIChkb2xsYXIp
IGFuZCBfICh1bmRlcnNjb3JlKQorICAgICAgICAgICAgKGNoID49IDY1ICYmIGNoIDw9IDkwKSB8
fCAgICAgICAgIC8vIEEuLloKKyAgICAgICAgICAgIChjaCA+PSA5NyAmJiBjaCA8PSAxMjIpIHx8
ICAgICAgICAvLyBhLi56CisgICAgICAgICAgICAoY2ggPT09IDkyKSB8fCAgICAgICAgICAgICAg
ICAgICAgLy8gXCAoYmFja3NsYXNoKQorICAgICAgICAgICAgKChjaCA+PSAweDgwKSAmJiBSZWdl
eC5Ob25Bc2NpaUlkZW50aWZpZXJTdGFydC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKSk7
CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNJZGVudGlmaWVyUGFydChjaCkgeworICAgICAgICBy
ZXR1cm4gKGNoID09PSAzNikgfHwgKGNoID09PSA5NSkgfHwgIC8vICQgKGRvbGxhcikgYW5kIF8g
KHVuZGVyc2NvcmUpCisgICAgICAgICAgICAoY2ggPj0gNjUgJiYgY2ggPD0gOTApIHx8ICAgICAg
ICAgLy8gQS4uWgorICAgICAgICAgICAgKGNoID49IDk3ICYmIGNoIDw9IDEyMikgfHwgICAgICAg
IC8vIGEuLnoKKyAgICAgICAgICAgIChjaCA+PSA0OCAmJiBjaCA8PSA1NykgfHwgICAgICAgICAv
LyAwLi45CisgICAgICAgICAgICAoY2ggPT09IDkyKSB8fCAgICAgICAgICAgICAgICAgICAgLy8g
XCAoYmFja3NsYXNoKQorICAgICAgICAgICAgKChjaCA+PSAweDgwKSAmJiBSZWdleC5Ob25Bc2Np
aUlkZW50aWZpZXJQYXJ0LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpKTsKKyAgICB9CisK
KyAgICAvLyA3LjYuMS4yIEZ1dHVyZSBSZXNlcnZlZCBXb3JkcworCisgICAgZnVuY3Rpb24gaXNG
dXR1cmVSZXNlcnZlZFdvcmQoaWQpIHsKKyAgICAgICAgc3dpdGNoIChpZCkgeworICAgICAgICBj
YXNlICdjbGFzcyc6CisgICAgICAgIGNhc2UgJ2VudW0nOgorICAgICAgICBjYXNlICdleHBvcnQn
OgorICAgICAgICBjYXNlICdleHRlbmRzJzoKKyAgICAgICAgY2FzZSAnaW1wb3J0JzoKKyAgICAg
ICAgY2FzZSAnc3VwZXInOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
dW5jdGlvbiBpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQoaWQpIHsKKyAgICAgICAgc3dpdGNoIChp
ZCkgeworICAgICAgICBjYXNlICdpbXBsZW1lbnRzJzoKKyAgICAgICAgY2FzZSAnaW50ZXJmYWNl
JzoKKyAgICAgICAgY2FzZSAncGFja2FnZSc6CisgICAgICAgIGNhc2UgJ3ByaXZhdGUnOgorICAg
ICAgICBjYXNlICdwcm90ZWN0ZWQnOgorICAgICAgICBjYXNlICdwdWJsaWMnOgorICAgICAgICBj
YXNlICdzdGF0aWMnOgorICAgICAgICBjYXNlICd5aWVsZCc6CisgICAgICAgIGNhc2UgJ2xldCc6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGlzUmVzdHJp
Y3RlZFdvcmQoaWQpIHsKKyAgICAgICAgcmV0dXJuIGlkID09PSAnZXZhbCcgfHwgaWQgPT09ICdh
cmd1bWVudHMnOworICAgIH0KKworICAgIC8vIDcuNi4xLjEgS2V5d29yZHMKKworICAgIGZ1bmN0
aW9uIGlzS2V5d29yZChpZCkgeworICAgICAgICBpZiAoc3RyaWN0ICYmIGlzU3RyaWN0TW9kZVJl
c2VydmVkV29yZChpZCkpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisK
KyAgICAgICAgLy8gJ2NvbnN0JyBpcyBzcGVjaWFsaXplZCBhcyBLZXl3b3JkIGluIFY4LgorICAg
ICAgICAvLyAneWllbGQnIGFuZCAnbGV0JyBhcmUgZm9yIGNvbXBhdGlibGl0eSB3aXRoIFNwaWRl
ck1vbmtleSBhbmQgRVMubmV4dC4KKyAgICAgICAgLy8gU29tZSBvdGhlcnMgYXJlIGZyb20gZnV0
dXJlIHJlc2VydmVkIHdvcmRzLgorCisgICAgICAgIHN3aXRjaCAoaWQubGVuZ3RoKSB7CisgICAg
ICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdpZicpIHx8IChpZCA9PT0g
J2luJykgfHwgKGlkID09PSAnZG8nKTsKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgcmV0
dXJuIChpZCA9PT0gJ3ZhcicpIHx8IChpZCA9PT0gJ2ZvcicpIHx8IChpZCA9PT0gJ25ldycpIHx8
CisgICAgICAgICAgICAgICAgKGlkID09PSAndHJ5JykgfHwgKGlkID09PSAnbGV0Jyk7CisgICAg
ICAgIGNhc2UgNDoKKyAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICd0aGlzJykgfHwgKGlkID09
PSAnZWxzZScpIHx8IChpZCA9PT0gJ2Nhc2UnKSB8fAorICAgICAgICAgICAgICAgIChpZCA9PT0g
J3ZvaWQnKSB8fCAoaWQgPT09ICd3aXRoJykgfHwgKGlkID09PSAnZW51bScpOworICAgICAgICBj
YXNlIDU6CisgICAgICAgICAgICByZXR1cm4gKGlkID09PSAnd2hpbGUnKSB8fCAoaWQgPT09ICdi
cmVhaycpIHx8IChpZCA9PT0gJ2NhdGNoJykgfHwKKyAgICAgICAgICAgICAgICAoaWQgPT09ICd0
aHJvdycpIHx8IChpZCA9PT0gJ2NvbnN0JykgfHwgKGlkID09PSAneWllbGQnKSB8fAorICAgICAg
ICAgICAgICAgIChpZCA9PT0gJ2NsYXNzJykgfHwgKGlkID09PSAnc3VwZXInKTsKKyAgICAgICAg
Y2FzZSA2OgorICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3JldHVybicpIHx8IChpZCA9PT0g
J3R5cGVvZicpIHx8IChpZCA9PT0gJ2RlbGV0ZScpIHx8CisgICAgICAgICAgICAgICAgKGlkID09
PSAnc3dpdGNoJykgfHwgKGlkID09PSAnZXhwb3J0JykgfHwgKGlkID09PSAnaW1wb3J0Jyk7Cisg
ICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdkZWZhdWx0JykgfHwg
KGlkID09PSAnZmluYWxseScpIHx8IChpZCA9PT0gJ2V4dGVuZHMnKTsKKyAgICAgICAgY2FzZSA4
OgorICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2Z1bmN0aW9uJykgfHwgKGlkID09PSAnY29u
dGludWUnKSB8fCAoaWQgPT09ICdkZWJ1Z2dlcicpOworICAgICAgICBjYXNlIDEwOgorICAgICAg
ICAgICAgcmV0dXJuIChpZCA9PT0gJ2luc3RhbmNlb2YnKTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIDcuNCBD
b21tZW50cworCisgICAgZnVuY3Rpb24gc2tpcENvbW1lbnQoKSB7CisgICAgICAgIHZhciBjaCwg
YmxvY2tDb21tZW50LCBsaW5lQ29tbWVudDsKKworICAgICAgICBibG9ja0NvbW1lbnQgPSBmYWxz
ZTsKKyAgICAgICAgbGluZUNvbW1lbnQgPSBmYWxzZTsKKworICAgICAgICB3aGlsZSAoaW5kZXgg
PCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpOwor
CisgICAgICAgICAgICBpZiAobGluZUNvbW1lbnQpIHsKKyAgICAgICAgICAgICAgICArK2luZGV4
OworICAgICAgICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoKSkgeworICAgICAgICAg
ICAgICAgICAgICBsaW5lQ29tbWVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAo
Y2ggPT09IDEzICYmIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMTApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgKytsaW5lTnVtYmVyOworICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQg
PSBpbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGJsb2Nr
Q29tbWVudCkgeworICAgICAgICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoKSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDEzICYmIHNvdXJjZS5jaGFyQ29kZUF0KGlu
ZGV4ICsgMSkgPT09IDEwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICArK2luZGV4OworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICsrbGluZU51bWJlcjsKKyAg
ICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0
ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRU
b2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5k
ZXgrKyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tl
biwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAvLyBCbG9jayBjb21tZW50IGVuZHMgd2l0aCAnKi8nIChjaGFyICM0MiwgY2hhciAjNDcpLgor
ICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDQyKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChjaCA9PT0gNDcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2luZGV4
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrQ29tbWVudCA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gNDcpIHsKKyAgICAgICAgICAg
ICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSk7CisgICAgICAgICAgICAgICAg
Ly8gTGluZSBjb21tZW50IHN0YXJ0cyB3aXRoICcvLycgKGNoYXIgIzQ3LCBjaGFyICM0NykuCisg
ICAgICAgICAgICAgICAgaWYgKGNoID09PSA0NykgeworICAgICAgICAgICAgICAgICAgICBpbmRl
eCArPSAyOworICAgICAgICAgICAgICAgICAgICBsaW5lQ29tbWVudCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gNDIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
QmxvY2sgY29tbWVudCBzdGFydHMgd2l0aCAnLyonIChjaGFyICM0NywgY2hhciAjNDIpLgorICAg
ICAgICAgICAgICAgICAgICBpbmRleCArPSAyOworICAgICAgICAgICAgICAgICAgICBibG9ja0Nv
bW1lbnQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVj
dGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzV2hpdGVTcGFjZShjaCkpIHsKKyAgICAgICAg
ICAgICAgICArK2luZGV4OworICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xpbmVUZXJtaW5hdG9y
KGNoKSkgeworICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKGNo
ID09PSAxMyAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDEwKSB7CisgICAgICAgICAg
ICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICsr
bGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBzY2FuSGV4RXNjYXBlKHByZWZpeCkgeworICAg
ICAgICB2YXIgaSwgbGVuLCBjaCwgY29kZSA9IDA7CisKKyAgICAgICAgbGVuID0gKHByZWZpeCA9
PT0gJ3UnKSA/IDQgOiAyOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAg
ICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBpc0hleERpZ2l0KHNvdXJjZVtpbmRleF0p
KSB7CisgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgICAgICAg
ICAgY29kZSA9IGNvZGUgKiAxNiArICcwMTIzNDU2Nzg5YWJjZGVmJy5pbmRleE9mKGNoLnRvTG93
ZXJDYXNlKCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Jyc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9t
Q2hhckNvZGUoY29kZSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gc2NhblVuaWNvZGVDb2RlUG9p
bnRFc2NhcGUoKSB7CisgICAgICAgIHZhciBjaCwgY29kZSwgY3UxLCBjdTI7CisKKyAgICAgICAg
Y2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICBjb2RlID0gMDsKKworICAgICAgICAvLyBBdCBs
ZWFzdCwgb25lIGhleCBkaWdpdCBpcyByZXF1aXJlZC4KKyAgICAgICAgaWYgKGNoID09PSAnfScp
IHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwg
J0lMTEVHQUwnKTsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkg
eworICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgICAgICBpZiAoIWlz
SGV4RGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjb2RlID0gY29kZSAqIDE2ICsgJzAxMjM0NTY3ODlhYmNkZWYnLmluZGV4T2Yo
Y2gudG9Mb3dlckNhc2UoKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29kZSA+IDB4MTBG
RkZGIHx8IGNoICE9PSAnfScpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2Vz
LlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFVU
Ri0xNiBFbmNvZGluZworICAgICAgICBpZiAoY29kZSA8PSAweEZGRkYpIHsKKyAgICAgICAgICAg
IHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpOworICAgICAgICB9CisgICAgICAgIGN1
MSA9ICgoY29kZSAtIDB4MTAwMDApID4+IDEwKSArIDB4RDgwMDsKKyAgICAgICAgY3UyID0gKChj
b2RlIC0gMHgxMDAwMCkgJiAxMDIzKSArIDB4REMwMDsKKyAgICAgICAgcmV0dXJuIFN0cmluZy5m
cm9tQ2hhckNvZGUoY3UxLCBjdTIpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGdldEVzY2FwZWRJ
ZGVudGlmaWVyKCkgeworICAgICAgICB2YXIgY2gsIGlkOworCisgICAgICAgIGNoID0gc291cmNl
LmNoYXJDb2RlQXQoaW5kZXgrKyk7CisgICAgICAgIGlkID0gU3RyaW5nLmZyb21DaGFyQ29kZShj
aCk7CisKKyAgICAgICAgLy8gJ1x1JyAoY2hhciAjOTIsIGNoYXIgIzExNykgZGVub3RlcyBhbiBl
c2NhcGVkIGNoYXJhY3Rlci4KKyAgICAgICAgaWYgKGNoID09PSA5MikgeworICAgICAgICAgICAg
aWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSAhPT0gMTE3KSB7CisgICAgICAgICAgICAgICAg
dGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIGNoID0gc2Nhbkhl
eEVzY2FwZSgndScpOworICAgICAgICAgICAgaWYgKCFjaCB8fCBjaCA9PT0gJ1xcJyB8fCAhaXNJ
ZGVudGlmaWVyU3RhcnQoY2guY2hhckNvZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAgICB0aHJv
d0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZCA9IGNoOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUg
KGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGlu
ZGV4KTsKKyAgICAgICAgICAgIGlmICghaXNJZGVudGlmaWVyUGFydChjaCkpIHsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsraW5kZXg7CisgICAg
ICAgICAgICBpZCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTsKKworICAgICAgICAgICAgLy8g
J1x1JyAoY2hhciAjOTIsIGNoYXIgIzExNykgZGVub3RlcyBhbiBlc2NhcGVkIGNoYXJhY3Rlci4K
KyAgICAgICAgICAgIGlmIChjaCA9PT0gOTIpIHsKKyAgICAgICAgICAgICAgICBpZCA9IGlkLnN1
YnN0cigwLCBpZC5sZW5ndGggLSAxKTsKKyAgICAgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJD
b2RlQXQoaW5kZXgpICE9PSAxMTcpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7
fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgIGNoID0gc2Nhbkhl
eEVzY2FwZSgndScpOworICAgICAgICAgICAgICAgIGlmICghY2ggfHwgY2ggPT09ICdcXCcgfHwg
IWlzSWRlbnRpZmllclBhcnQoY2guY2hhckNvZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZCArPSBjaDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBpZDsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBnZXRJZGVudGlmaWVyKCkgeworICAgICAgICB2YXIgc3RhcnQsIGNoOworCisgICAgICAgIHN0
YXJ0ID0gaW5kZXgrKzsKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAg
ICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKKyAgICAgICAgICAgIGlmIChjaCA9
PT0gOTIpIHsKKyAgICAgICAgICAgICAgICAvLyBCbGFja3NsYXNoIChjaGFyICM5MikgbWFya3Mg
VW5pY29kZSBlc2NhcGUgc2VxdWVuY2UuCisgICAgICAgICAgICAgICAgaW5kZXggPSBzdGFydDsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2V0RXNjYXBlZElkZW50aWZpZXIoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChpc0lkZW50aWZpZXJQYXJ0KGNoKSkgeworICAgICAgICAg
ICAgICAgICsraW5kZXg7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNvdXJjZS5z
bGljZShzdGFydCwgaW5kZXgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNjYW5JZGVudGlmaWVy
KCkgeworICAgICAgICB2YXIgc3RhcnQsIGlkLCB0eXBlOworCisgICAgICAgIHN0YXJ0ID0gaW5k
ZXg7CisKKyAgICAgICAgLy8gQmFja3NsYXNoIChjaGFyICM5Mikgc3RhcnRzIGFuIGVzY2FwZWQg
Y2hhcmFjdGVyLgorICAgICAgICBpZCA9IChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDky
KSA/IGdldEVzY2FwZWRJZGVudGlmaWVyKCkgOiBnZXRJZGVudGlmaWVyKCk7CisKKyAgICAgICAg
Ly8gVGhlcmUgaXMgbm8ga2V5d29yZCBvciBsaXRlcmFsIHdpdGggb25seSBvbmUgY2hhcmFjdGVy
LgorICAgICAgICAvLyBUaHVzLCBpdCBtdXN0IGJlIGFuIGlkZW50aWZpZXIuCisgICAgICAgIGlm
IChpZC5sZW5ndGggPT09IDEpIHsKKyAgICAgICAgICAgIHR5cGUgPSBUb2tlbi5JZGVudGlmaWVy
OworICAgICAgICB9IGVsc2UgaWYgKGlzS2V5d29yZChpZCkpIHsKKyAgICAgICAgICAgIHR5cGUg
PSBUb2tlbi5LZXl3b3JkOworICAgICAgICB9IGVsc2UgaWYgKGlkID09PSAnbnVsbCcpIHsKKyAg
ICAgICAgICAgIHR5cGUgPSBUb2tlbi5OdWxsTGl0ZXJhbDsKKyAgICAgICAgfSBlbHNlIGlmIChp
ZCA9PT0gJ3RydWUnIHx8IGlkID09PSAnZmFsc2UnKSB7CisgICAgICAgICAgICB0eXBlID0gVG9r
ZW4uQm9vbGVhbkxpdGVyYWw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0eXBlID0g
VG9rZW4uSWRlbnRpZmllcjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICB0eXBlOiB0eXBlLAorICAgICAgICAgICAgdmFsdWU6IGlkLAorICAgICAgICAgICAgbGlu
ZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAor
ICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdCisgICAgICAgIH07CisgICAgfQorCisK
KyAgICAvLyA3LjcgUHVuY3R1YXRvcnMKKworICAgIGZ1bmN0aW9uIHNjYW5QdW5jdHVhdG9yKCkg
eworICAgICAgICB2YXIgc3RhcnQgPSBpbmRleCwKKyAgICAgICAgICAgIGNvZGUgPSBzb3VyY2Uu
Y2hhckNvZGVBdChpbmRleCksCisgICAgICAgICAgICBjb2RlMiwKKyAgICAgICAgICAgIGNoMSA9
IHNvdXJjZVtpbmRleF0sCisgICAgICAgICAgICBjaDIsCisgICAgICAgICAgICBjaDMsCisgICAg
ICAgICAgICBjaDQ7CisKKyAgICAgICAgc3dpdGNoIChjb2RlKSB7CisgICAgICAgIC8vIENoZWNr
IGZvciBtb3N0IGNvbW1vbiBzaW5nbGUtY2hhcmFjdGVyIHB1bmN0dWF0b3JzLgorICAgICAgICBj
YXNlIDQwOiAgIC8vICggb3BlbiBicmFja2V0CisgICAgICAgIGNhc2UgNDE6ICAgLy8gKSBjbG9z
ZSBicmFja2V0CisgICAgICAgIGNhc2UgNTk6ICAgLy8gOyBzZW1pY29sb24KKyAgICAgICAgY2Fz
ZSA0NDogICAvLyAsIGNvbW1hCisgICAgICAgIGNhc2UgMTIzOiAgLy8geyBvcGVuIGN1cmx5IGJy
YWNlCisgICAgICAgIGNhc2UgMTI1OiAgLy8gfSBjbG9zZSBjdXJseSBicmFjZQorICAgICAgICBj
YXNlIDkxOiAgIC8vIFsKKyAgICAgICAgY2FzZSA5MzogICAvLyBdCisgICAgICAgIGNhc2UgNTg6
ICAgLy8gOgorICAgICAgICBjYXNlIDYzOiAgIC8vID8KKyAgICAgICAgY2FzZSAxMjY6ICAvLyB+
CisgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgaWYgKGV4dHJhLnRva2VuaXplKSB7
CisgICAgICAgICAgICAgICAgaWYgKGNvZGUgPT09IDQwKSB7CisgICAgICAgICAgICAgICAgICAg
IGV4dHJhLm9wZW5QYXJlblRva2VuID0gZXh0cmEudG9rZW5zLmxlbmd0aDsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDEyMykgeworICAgICAgICAgICAgICAgICAgICBleHRy
YS5vcGVuQ3VybHlUb2tlbiA9IGV4dHJhLnRva2Vucy5sZW5ndGg7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAorICAgICAgICAgICAgICAgIHZhbHVlOiBTdHJpbmcuZnJv
bUNoYXJDb2RlKGNvZGUpLAorICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIs
CisgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICAgICAg
cmFuZ2U6IFtzdGFydCwgaW5kZXhdCisgICAgICAgICAgICB9OworCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBjb2RlMiA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSk7CisKKyAg
ICAgICAgICAgIC8vICc9JyAoY2hhciAjNjEpIG1hcmtzIGFuIGFzc2lnbm1lbnQgb3IgY29tcGFy
aXNvbiBvcGVyYXRvci4KKyAgICAgICAgICAgIGlmIChjb2RlMiA9PT0gNjEpIHsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKGNvZGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDM3OiAgLy8gJQor
ICAgICAgICAgICAgICAgIGNhc2UgMzg6ICAvLyAmCisgICAgICAgICAgICAgICAgY2FzZSA0Mjog
IC8vICo6CisgICAgICAgICAgICAgICAgY2FzZSA0MzogIC8vICsKKyAgICAgICAgICAgICAgICBj
YXNlIDQ1OiAgLy8gLQorICAgICAgICAgICAgICAgIGNhc2UgNDc6ICAvLyAvCisgICAgICAgICAg
ICAgICAgY2FzZSA2MDogIC8vIDwKKyAgICAgICAgICAgICAgICBjYXNlIDYyOiAgLy8gPgorICAg
ICAgICAgICAgICAgIGNhc2UgOTQ6ICAvLyBeCisgICAgICAgICAgICAgICAgY2FzZSAxMjQ6IC8v
IHwKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMjsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3Is
CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogU3RyaW5nLmZyb21DaGFyQ29kZShjb2Rl
KSArIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZTIpLAorICAgICAgICAgICAgICAgICAgICAgICAg
bGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVTdGFy
dDogbGluZVN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5k
ZXhdCisgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBjYXNlIDMzOiAv
LyAhCisgICAgICAgICAgICAgICAgY2FzZSA2MTogLy8gPQorICAgICAgICAgICAgICAgICAgICBp
bmRleCArPSAyOworCisgICAgICAgICAgICAgICAgICAgIC8vICE9PSBhbmQgPT09CisgICAgICAg
ICAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDYxKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBU
b2tlbi5QdW5jdHVhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNvdXJjZS5z
bGljZShzdGFydCwgaW5kZXgpLAorICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjog
bGluZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0
LAorICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdCisgICAgICAg
ICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBQZWVrIG1vcmUgY2hhcmFjdGVycy4K
KworICAgICAgICBjaDIgPSBzb3VyY2VbaW5kZXggKyAxXTsKKyAgICAgICAgY2gzID0gc291cmNl
W2luZGV4ICsgMl07CisgICAgICAgIGNoNCA9IHNvdXJjZVtpbmRleCArIDNdOworCisgICAgICAg
IC8vIDQtY2hhcmFjdGVyIHB1bmN0dWF0b3I6ID4+Pj0KKworICAgICAgICBpZiAoY2gxID09PSAn
PicgJiYgY2gyID09PSAnPicgJiYgY2gzID09PSAnPicpIHsKKyAgICAgICAgICAgIGlmIChjaDQg
PT09ICc9JykgeworICAgICAgICAgICAgICAgIGluZGV4ICs9IDQ7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKKyAg
ICAgICAgICAgICAgICAgICAgdmFsdWU6ICc+Pj49JywKKyAgICAgICAgICAgICAgICAgICAgbGlu
ZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5l
U3RhcnQsCisgICAgICAgICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XQorICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyAzLWNo
YXJhY3RlciBwdW5jdHVhdG9yczogPT09ICE9PSA+Pj4gPDw9ID4+PQorCisgICAgICAgIGlmIChj
aDEgPT09ICc+JyAmJiBjaDIgPT09ICc+JyAmJiBjaDMgPT09ICc+JykgeworICAgICAgICAgICAg
aW5kZXggKz0gMzsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTog
VG9rZW4uUHVuY3R1YXRvciwKKyAgICAgICAgICAgICAgICB2YWx1ZTogJz4+PicsCisgICAgICAg
ICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5lU3Rh
cnQ6IGxpbmVTdGFydCwKKyAgICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF0KKyAg
ICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2gxID09PSAnPCcgJiYgY2gy
ID09PSAnPCcgJiYgY2gzID09PSAnPScpIHsKKyAgICAgICAgICAgIGluZGV4ICs9IDM7CisgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3Is
CisgICAgICAgICAgICAgICAgdmFsdWU6ICc8PD0nLAorICAgICAgICAgICAgICAgIGxpbmVOdW1i
ZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisg
ICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdCisgICAgICAgICAgICB9OworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGNoMSA9PT0gJz4nICYmIGNoMiA9PT0gJz4nICYmIGNoMyA9
PT0gJz0nKSB7CisgICAgICAgICAgICBpbmRleCArPSAzOworICAgICAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAorICAgICAgICAgICAgICAg
IHZhbHVlOiAnPj49JywKKyAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAor
ICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAgICAgIHJh
bmdlOiBbc3RhcnQsIGluZGV4XQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChjaDEgPT09ICcuJyAmJiBjaDIgPT09ICcuJyAmJiBjaDMgPT09ICcuJykgeworICAgICAg
ICAgICAgaW5kZXggKz0gMzsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
dHlwZTogVG9rZW4uUHVuY3R1YXRvciwKKyAgICAgICAgICAgICAgICB2YWx1ZTogJy4uLicsCisg
ICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBs
aW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRl
eF0KKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICAvLyBPdGhlciAyLWNoYXJh
Y3RlciBwdW5jdHVhdG9yczogKysgLS0gPDwgPj4gJiYgfHwKKworICAgICAgICBpZiAoY2gxID09
PSBjaDIgJiYgKCcrLTw+JnwnLmluZGV4T2YoY2gxKSA+PSAwKSkgeworICAgICAgICAgICAgaW5k
ZXggKz0gMjsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogVG9r
ZW4uUHVuY3R1YXRvciwKKyAgICAgICAgICAgICAgICB2YWx1ZTogY2gxICsgY2gyLAorICAgICAg
ICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgbGluZVN0
YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdCisg
ICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNoMSA9PT0gJz0nICYmIGNo
MiA9PT0gJz4nKSB7CisgICAgICAgICAgICBpbmRleCArPSAyOworICAgICAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAorICAgICAgICAgICAg
ICAgIHZhbHVlOiAnPT4nLAorICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIs
CisgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICAgICAg
cmFuZ2U6IFtzdGFydCwgaW5kZXhdCisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCc8Pj0hKy0qJSZ8Xi8nLmluZGV4T2YoY2gxKSA+PSAwKSB7CisgICAgICAgICAgICAr
K2luZGV4OworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBUb2tl
bi5QdW5jdHVhdG9yLAorICAgICAgICAgICAgICAgIHZhbHVlOiBjaDEsCisgICAgICAgICAgICAg
ICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxp
bmVTdGFydCwKKyAgICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF0KKyAgICAgICAg
ICAgIH07CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2gxID09PSAnLicpIHsKKyAgICAgICAg
ICAgICsraW5kZXg7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6
IFRva2VuLlB1bmN0dWF0b3IsCisgICAgICAgICAgICAgICAgdmFsdWU6IGNoMSwKKyAgICAgICAg
ICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFy
dDogbGluZVN0YXJ0LAorICAgICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XQorICAg
ICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2Vz
LlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICB9CisKKyAgICAvLyA3LjguMyBOdW1l
cmljIExpdGVyYWxzCisKKyAgICBmdW5jdGlvbiBzY2FuSGV4TGl0ZXJhbChzdGFydCkgeworICAg
ICAgICB2YXIgbnVtYmVyID0gJyc7CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7
CisgICAgICAgICAgICBpZiAoIWlzSGV4RGlnaXQoc291cmNlW2luZGV4XSkpIHsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG51bWJlciArPSBzb3Vy
Y2VbaW5kZXgrK107CisgICAgICAgIH0KKworICAgICAgICBpZiAobnVtYmVyLmxlbmd0aCA9PT0g
MCkgeworICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2Vu
LCAnSUxMRUdBTCcpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0
KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30s
IE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJhbCwKKyAg
ICAgICAgICAgIHZhbHVlOiBwYXJzZUludCgnMHgnICsgbnVtYmVyLCAxNiksCisgICAgICAgICAg
ICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3Rh
cnQsCisgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF0KKyAgICAgICAgfTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBzY2FuT2N0YWxMaXRlcmFsKHByZWZpeCwgc3RhcnQpIHsKKyAgICAg
ICAgdmFyIG51bWJlciwgb2N0YWw7CisKKyAgICAgICAgaWYgKGlzT2N0YWxEaWdpdChwcmVmaXgp
KSB7CisgICAgICAgICAgICBvY3RhbCA9IHRydWU7CisgICAgICAgICAgICBudW1iZXIgPSAnMCcg
KyBzb3VyY2VbaW5kZXgrK107CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvY3RhbCA9
IGZhbHNlOworICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIG51bWJlciA9ICcnOwor
ICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAg
ICBpZiAoIWlzT2N0YWxEaWdpdChzb3VyY2VbaW5kZXhdKSkgeworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsr
XTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghb2N0YWwgJiYgbnVtYmVyLmxlbmd0aCA9PT0g
MCkgeworICAgICAgICAgICAgLy8gb25seSAwbyBvciAwTworICAgICAgICAgICAgdGhyb3dFcnJv
cih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkg
fHwgaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkgeworICAgICAgICAg
ICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHR5cGU6IFRva2VuLk51
bWVyaWNMaXRlcmFsLAorICAgICAgICAgICAgdmFsdWU6IHBhcnNlSW50KG51bWJlciwgOCksCisg
ICAgICAgICAgICBvY3RhbDogb2N0YWwsCisgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVt
YmVyLAorICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICByYW5n
ZTogW3N0YXJ0LCBpbmRleF0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzY2Fu
TnVtZXJpY0xpdGVyYWwoKSB7CisgICAgICAgIHZhciBudW1iZXIsIHN0YXJ0LCBjaCwgb2N0YWw7
CisKKyAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICBhc3NlcnQoaXNEZWNpbWFs
RGlnaXQoY2guY2hhckNvZGVBdCgwKSkgfHwgKGNoID09PSAnLicpLAorICAgICAgICAgICAgJ051
bWVyaWMgbGl0ZXJhbCBtdXN0IHN0YXJ0IHdpdGggYSBkZWNpbWFsIGRpZ2l0IG9yIGEgZGVjaW1h
bCBwb2ludCcpOworCisgICAgICAgIHN0YXJ0ID0gaW5kZXg7CisgICAgICAgIG51bWJlciA9ICcn
OworICAgICAgICBpZiAoY2ggIT09ICcuJykgeworICAgICAgICAgICAgbnVtYmVyID0gc291cmNl
W2luZGV4KytdOworICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworCisgICAgICAgICAg
ICAvLyBIZXggbnVtYmVyIHN0YXJ0cyB3aXRoICcweCcuCisgICAgICAgICAgICAvLyBPY3RhbCBu
dW1iZXIgc3RhcnRzIHdpdGggJzAnLgorICAgICAgICAgICAgLy8gT2N0YWwgbnVtYmVyIGluIEVT
NiBzdGFydHMgd2l0aCAnMG8nLgorICAgICAgICAgICAgLy8gQmluYXJ5IG51bWJlciBpbiBFUzYg
c3RhcnRzIHdpdGggJzBiJy4KKyAgICAgICAgICAgIGlmIChudW1iZXIgPT09ICcwJykgeworICAg
ICAgICAgICAgICAgIGlmIChjaCA9PT0gJ3gnIHx8IGNoID09PSAnWCcpIHsKKyAgICAgICAgICAg
ICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5IZXhMaXRl
cmFsKHN0YXJ0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNoID09
PSAnYicgfHwgY2ggPT09ICdCJykgeworICAgICAgICAgICAgICAgICAgICArK2luZGV4OworICAg
ICAgICAgICAgICAgICAgICBudW1iZXIgPSAnJzsKKworICAgICAgICAgICAgICAgICAgICB3aGls
ZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gc291cmNl
W2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCAhPT0gJzAnICYmIGNoICE9
PSAnMScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2Vb
aW5kZXgrK107CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBp
ZiAobnVtYmVyLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25s
eSAwYiBvciAwQgorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2Fn
ZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChjaCkgfHwgaXNEZWNpbWFsRGlnaXQoY2gp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMu
VW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJhbCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlOiBwYXJzZUludChudW1iZXIsIDIpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2U6
IFtzdGFydCwgaW5kZXhdCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ28nIHx8IGNoID09PSAnTycgfHwgaXNPY3Rh
bERpZ2l0KGNoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2Nhbk9jdGFsTGl0ZXJh
bChjaCwgc3RhcnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBkZWNp
bWFsIG51bWJlciBzdGFydHMgd2l0aCAnMCcgc3VjaCBhcyAnMDknIGlzIGlsbGVnYWwuCisgICAg
ICAgICAgICAgICAgaWYgKGNoICYmIGlzRGVjaW1hbERpZ2l0KGNoLmNoYXJDb2RlQXQoMCkpKSB7
CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRU
b2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHdoaWxlIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkp
KSB7CisgICAgICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChjaCA9PT0gJy4nKSB7CisgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4
KytdOworICAgICAgICAgICAgd2hpbGUgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0
KGluZGV4KSkpIHsKKyAgICAgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGNoID09PSAnZScgfHwgY2ggPT09ICdFJykgeworICAgICAgICAgICAg
bnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKKworICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5k
ZXhdOworICAgICAgICAgICAgaWYgKGNoID09PSAnKycgfHwgY2ggPT09ICctJykgeworICAgICAg
ICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkgewor
ICAgICAgICAgICAgICAgIHdoaWxlIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChp
bmRleCkpKSB7CisgICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQo
c291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkgeworICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwg
TWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHR5cGU6IFRva2VuLk51bWVyaWNMaXRlcmFsLAorICAg
ICAgICAgICAgdmFsdWU6IHBhcnNlRmxvYXQobnVtYmVyKSwKKyAgICAgICAgICAgIGxpbmVOdW1i
ZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAg
ICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XQorICAgICAgICB9OworICAgIH0KKworICAgIC8v
IDcuOC40IFN0cmluZyBMaXRlcmFscworCisgICAgZnVuY3Rpb24gc2NhblN0cmluZ0xpdGVyYWwo
KSB7CisgICAgICAgIHZhciBzdHIgPSAnJywgcXVvdGUsIHN0YXJ0LCBjaCwgY29kZSwgdW5lc2Nh
cGVkLCByZXN0b3JlLCBvY3RhbCA9IGZhbHNlOworCisgICAgICAgIHF1b3RlID0gc291cmNlW2lu
ZGV4XTsKKyAgICAgICAgYXNzZXJ0KChxdW90ZSA9PT0gJ1wnJyB8fCBxdW90ZSA9PT0gJyInKSwK
KyAgICAgICAgICAgICdTdHJpbmcgbGl0ZXJhbCBtdXN0IHN0YXJ0cyB3aXRoIGEgcXVvdGUnKTsK
KworICAgICAgICBzdGFydCA9IGluZGV4OworICAgICAgICArK2luZGV4OworCisgICAgICAgIHdo
aWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107
CisKKyAgICAgICAgICAgIGlmIChjaCA9PT0gcXVvdGUpIHsKKyAgICAgICAgICAgICAgICBxdW90
ZSA9ICcnOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIGlmIChj
aCA9PT0gJ1xcJykgeworICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdOworICAg
ICAgICAgICAgICAgIGlmICghY2ggfHwgIWlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgw
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjaCkgeworICAgICAgICAgICAgICAg
ICAgICBjYXNlICduJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXG4nOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3In
OgorICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdccic7CisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6CisgICAgICAgICAg
ICAgICAgICAgICAgICBzdHIgKz0gJ1x0JzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAneCc6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlW2luZGV4XSA9PT0gJ3sn
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHIgKz0gc2NhblVuaWNvZGVDb2RlUG9pbnRFc2NhcGUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdG9yZSA9IGluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZXNjYXBlZCA9
IHNjYW5IZXhFc2NhcGUoY2gpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmVz
Y2FwZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IHVuZXNjYXBl
ZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleCA9IHJlc3RvcmU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSAnYic6CisgICAgICAgICAgICAgICAgICAgICAgICBzdHIg
Kz0gJ1xiJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBjYXNlICdmJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXGYnOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3Yn
OgorICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdceDBCJzsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNPY3RhbERpZ2l0KGNoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvZGUgPSAnMDEyMzQ1NjcnLmluZGV4T2YoY2gpOworCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gXDAgaXMgbm90IG9jdGFsIGVzY2FwZSBzZXF1ZW5jZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlICE9PSAwKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9jdGFsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGgg
JiYgaXNPY3RhbERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9jdGFsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29kZSA9IGNvZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKHNvdXJjZVtpbmRleCsrXSk7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMyBkaWdpdHMgYXJlIG9ubHkgYWxs
b3dlZCB3aGVuIHN0cmluZyBzdGFydHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gd2l0aCAwLCAxLCAyLCAzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgn
MDEyMycuaW5kZXhPZihjaCkgPj0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4IDwgbGVuZ3RoICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaXNPY3RhbERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDggKyAnMDEyMzQ1NjcnLmluZGV4
T2Yoc291cmNlW2luZGV4KytdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IGNoOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICArK2xpbmVOdW1iZXI7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0g
ICdccicgJiYgc291cmNlW2luZGV4XSA9PT0gJ1xuJykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkg
eworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBzdHIgKz0gY2g7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
ZiAocXVvdGUgIT09ICcnKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5V
bmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgdHlwZTogVG9rZW4uU3RyaW5nTGl0ZXJhbCwKKyAgICAgICAgICAgIHZh
bHVlOiBzdHIsCisgICAgICAgICAgICBvY3RhbDogb2N0YWwsCisgICAgICAgICAgICBsaW5lTnVt
YmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAg
ICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBzY2FuVGVtcGxhdGUoKSB7CisgICAgICAgIHZhciBjb29rZWQgPSAnJywgY2gsIHN0
YXJ0LCB0ZXJtaW5hdGVkLCB0YWlsLCByZXN0b3JlLCB1bmVzY2FwZWQsIGNvZGUsIG9jdGFsOwor
CisgICAgICAgIHRlcm1pbmF0ZWQgPSBmYWxzZTsKKyAgICAgICAgdGFpbCA9IGZhbHNlOworICAg
ICAgICBzdGFydCA9IGluZGV4OworCisgICAgICAgICsraW5kZXg7CisKKyAgICAgICAgd2hpbGUg
KGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTsKKyAg
ICAgICAgICAgIGlmIChjaCA9PT0gJ2AnKSB7CisgICAgICAgICAgICAgICAgdGFpbCA9IHRydWU7
CisgICAgICAgICAgICAgICAgdGVybWluYXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnJCcpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoc291cmNlW2luZGV4XSA9PT0gJ3snKSB7CisgICAgICAgICAgICAgICAgICAgICsraW5k
ZXg7CisgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29va2Vk
ICs9IGNoOworICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gJ1xcJykgeworICAgICAgICAg
ICAgICAgIGNoID0gc291cmNlW2luZGV4KytdOworICAgICAgICAgICAgICAgIGlmICghaXNMaW5l
VGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkgeworICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKGNoKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOgorICAgICAgICAgICAgICAg
ICAgICAgICAgY29va2VkICs9ICdcbic7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSAncic6CisgICAgICAgICAgICAgICAgICAgICAgICBj
b29rZWQgKz0gJ1xyJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSAn
XHQnOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgJ3UnOgorICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChzb3VyY2VbaW5kZXhdID09PSAneycpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCAr
PSBzY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0b3JlID0gaW5kZXg7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5lc2NhcGVkID0gc2NhbkhleEVzY2FwZShjaCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuZXNjYXBlZCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gdW5lc2NhcGVkOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluZGV4ID0gcmVzdG9yZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2Vk
ICs9IGNoOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBjYXNlICdiJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXGInOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J2YnOgorICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkICs9ICdcZic7CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAndic6CisgICAg
ICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gJ1x2JzsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNPY3RhbERpZ2l0KGNoKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvZGUgPSAnMDEyMzQ1NjcnLmluZGV4T2YoY2gpOworCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gXDAgaXMgbm90IG9jdGFsIGVzY2FwZSBzZXF1ZW5jZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChjb2RlICE9PSAwKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9jdGFsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYgaXNP
Y3RhbERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9jdGFsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9
IGNvZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKHNvdXJjZVtpbmRleCsrXSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMyBkaWdpdHMgYXJlIG9ubHkgYWxsb3dlZCB3
aGVuIHN0cmluZyBzdGFydHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2l0
aCAwLCAxLCAyLCAzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgnMDEyMycu
aW5kZXhPZihjaCkgPj0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluZGV4IDwgbGVuZ3RoICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXNPY3RhbERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDggKyAnMDEyMzQ1NjcnLmluZGV4T2Yoc291
cmNlW2luZGV4KytdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29r
ZWQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkICs9IGNoOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICArK2xpbmVOdW1iZXI7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0g
ICdccicgJiYgc291cmNlW2luZGV4XSA9PT0gJ1xuJykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkg
eworICAgICAgICAgICAgICAgICsrbGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICBpZiAoY2gg
PT09ICAnXHInICYmIHNvdXJjZVtpbmRleF0gPT09ICdcbicpIHsKKyAgICAgICAgICAgICAgICAg
ICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGNvb2tlZCArPSBjaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghdGVybWluYXRlZCkgeworICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVz
c2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgIHR5cGU6IFRva2VuLlRlbXBsYXRlLAorICAgICAgICAgICAg
dmFsdWU6IHsKKyAgICAgICAgICAgICAgICBjb29rZWQ6IGNvb2tlZCwKKyAgICAgICAgICAgICAg
ICByYXc6IHNvdXJjZS5zbGljZShzdGFydCArIDEsIGluZGV4IC0gKCh0YWlsKSA/IDEgOiAyKSkK
KyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB0YWlsOiB0YWlsLAorICAgICAgICAgICAgb2N0
YWw6IG9jdGFsLAorICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAg
ICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5k
ZXhdCisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gc2NhblRlbXBsYXRlRWxlbWVu
dChvcHRpb24pIHsKKyAgICAgICAgdmFyIHN0YXJ0c1dpdGgsIHRlbXBsYXRlOworCisgICAgICAg
IGxvb2thaGVhZCA9IG51bGw7CisgICAgICAgIHNraXBDb21tZW50KCk7CisKKyAgICAgICAgc3Rh
cnRzV2l0aCA9IChvcHRpb24uaGVhZCkgPyAnYCcgOiAnfSc7CisKKyAgICAgICAgaWYgKHNvdXJj
ZVtpbmRleF0gIT09IHN0YXJ0c1dpdGgpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1l
c3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgfQorCisgICAgICAg
IHRlbXBsYXRlID0gc2NhblRlbXBsYXRlKCk7CisKKyAgICAgICAgcGVlaygpOworCisgICAgICAg
IHJldHVybiB0ZW1wbGF0ZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzY2FuUmVnRXhwKCkgewor
ICAgICAgICB2YXIgc3RyLCBjaCwgc3RhcnQsIHBhdHRlcm4sIGZsYWdzLCB2YWx1ZSwgY2xhc3NN
YXJrZXIgPSBmYWxzZSwgcmVzdG9yZSwgdGVybWluYXRlZCA9IGZhbHNlOworCisgICAgICAgIGxv
b2thaGVhZCA9IG51bGw7CisgICAgICAgIHNraXBDb21tZW50KCk7CisKKyAgICAgICAgc3RhcnQg
PSBpbmRleDsKKyAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICBhc3NlcnQoY2gg
PT09ICcvJywgJ1JlZ3VsYXIgZXhwcmVzc2lvbiBsaXRlcmFsIG11c3Qgc3RhcnQgd2l0aCBhIHNs
YXNoJyk7CisgICAgICAgIHN0ciA9IHNvdXJjZVtpbmRleCsrXTsKKworICAgICAgICB3aGlsZSAo
aW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdOworICAg
ICAgICAgICAgc3RyICs9IGNoOworICAgICAgICAgICAgaWYgKGNsYXNzTWFya2VyKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGNoID09PSAnXScpIHsKKyAgICAgICAgICAgICAgICAgICAgY2xhc3NN
YXJrZXIgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xcJykgeworICAgICAgICAgICAgICAgICAgICBj
aCA9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRUNNQS0yNjIgNy44
LjUKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVB
dCgwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2Vz
LlVudGVybWluYXRlZFJlZ0V4cCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgc3RyICs9IGNoOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICcv
JykgeworICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gJ1snKSB7
CisgICAgICAgICAgICAgICAgICAgIGNsYXNzTWFya2VyID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhw
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIXRlcm1pbmF0ZWQpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2Vz
LlVudGVybWluYXRlZFJlZ0V4cCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBFeGNsdWRlIGxl
YWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoLgorICAgICAgICBwYXR0ZXJuID0gc3RyLnN1YnN0cigx
LCBzdHIubGVuZ3RoIC0gMik7CisKKyAgICAgICAgZmxhZ3MgPSAnJzsKKyAgICAgICAgd2hpbGUg
KGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAg
ICAgICAgICBpZiAoIWlzSWRlbnRpZmllclBhcnQoY2guY2hhckNvZGVBdCgwKSkpIHsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKytpbmRleDsK
KyAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xcJyAmJiBpbmRleCA8IGxlbmd0aCkgeworICAgICAg
ICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT09
ICd1JykgeworICAgICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAg
ICByZXN0b3JlID0gaW5kZXg7CisgICAgICAgICAgICAgICAgICAgIGNoID0gc2NhbkhleEVzY2Fw
ZSgndScpOworICAgICAgICAgICAgICAgICAgICBpZiAoY2gpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZsYWdzICs9IGNoOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzdHIgKz0g
J1xcdSc7IHJlc3RvcmUgPCBpbmRleDsgKytyZXN0b3JlKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RyICs9IHNvdXJjZVtyZXN0b3JlXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGluZGV4ID0gcmVzdG9yZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICs9ICd1JzsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFx1JzsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN0ciAr
PSAnXFwnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgZmxhZ3MgKz0gY2g7CisgICAgICAgICAgICAgICAgc3RyICs9IGNoOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHZhbHVlID0g
bmV3IFJlZ0V4cChwYXR0ZXJuLCBmbGFncyk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
ICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkludmFsaWRSZWdFeHApOworICAgICAgICB9
CisKKyAgICAgICAgcGVlaygpOworCisKKyAgICAgICAgaWYgKGV4dHJhLnRva2VuaXplKSB7Cisg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlJlZ3VsYXJF
eHByZXNzaW9uLAorICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAgICAgICAgICAg
ICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGlu
ZVN0YXJ0LAorICAgICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XQorICAgICAgICAg
ICAgfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgbGl0ZXJhbDog
c3RyLAorICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAorICAgICAgICAgICAgcmFuZ2U6IFtzdGFy
dCwgaW5kZXhdCisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNJZGVudGlmaWVy
TmFtZSh0b2tlbikgeworICAgICAgICByZXR1cm4gdG9rZW4udHlwZSA9PT0gVG9rZW4uSWRlbnRp
ZmllciB8fAorICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uS2V5d29yZCB8fAorICAg
ICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uQm9vbGVhbkxpdGVyYWwgfHwKKyAgICAgICAg
ICAgIHRva2VuLnR5cGUgPT09IFRva2VuLk51bGxMaXRlcmFsOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGFkdmFuY2VTbGFzaCgpIHsKKyAgICAgICAgdmFyIHByZXZUb2tlbiwKKyAgICAgICAgICAg
IGNoZWNrVG9rZW47CisgICAgICAgIC8vIFVzaW5nIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOgor
ICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zd2VldC5qcy93aWtpL2Rlc2ln
bgorICAgICAgICBwcmV2VG9rZW4gPSBleHRyYS50b2tlbnNbZXh0cmEudG9rZW5zLmxlbmd0aCAt
IDFdOworICAgICAgICBpZiAoIXByZXZUb2tlbikgeworICAgICAgICAgICAgLy8gTm90aGluZyBi
ZWZvcmUgdGhhdDogaXQgY2Fubm90IGJlIGEgZGl2aXNpb24uCisgICAgICAgICAgICByZXR1cm4g
c2NhblJlZ0V4cCgpOworICAgICAgICB9CisgICAgICAgIGlmIChwcmV2VG9rZW4udHlwZSA9PT0g
IlB1bmN0dWF0b3IiKSB7CisgICAgICAgICAgICBpZiAocHJldlRva2VuLnZhbHVlID09PSAiKSIp
IHsKKyAgICAgICAgICAgICAgICBjaGVja1Rva2VuID0gZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5Q
YXJlblRva2VuIC0gMV07CisgICAgICAgICAgICAgICAgaWYgKGNoZWNrVG9rZW4gJiYKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4udHlwZSA9PT0gIktleXdvcmQiICYmCisgICAg
ICAgICAgICAgICAgICAgICAgICAoY2hlY2tUb2tlbi52YWx1ZSA9PT0gImlmIiB8fAorICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4udmFsdWUgPT09ICJ3aGlsZSIgfHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGVja1Rva2VuLnZhbHVlID09PSAiZm9yIiB8fAorICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4udmFsdWUgPT09ICJ3aXRoIikpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5SZWdFeHAoKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAocHJldlRva2VuLnZhbHVlID09PSAifSIpIHsKKyAgICAgICAgICAgICAg
ICAvLyBEaXZpZGluZyBhIGZ1bmN0aW9uIGJ5IGFueXRoaW5nIG1ha2VzIGxpdHRsZSBzZW5zZSwK
KyAgICAgICAgICAgICAgICAvLyBidXQgd2UgaGF2ZSB0byBjaGVjayBmb3IgdGhhdC4KKyAgICAg
ICAgICAgICAgICBpZiAoZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gM10gJiYK
KyAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tl
biAtIDNdLnR5cGUgPT09ICJLZXl3b3JkIikgeworICAgICAgICAgICAgICAgICAgICAvLyBBbm9u
eW1vdXMgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4gPSBleHRyYS50
b2tlbnNbZXh0cmEub3BlbkN1cmx5VG9rZW4gLSA0XTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFjaGVja1Rva2VuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0
dWF0b3IoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNF0gJiYKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDRdLnR5cGUg
PT09ICJLZXl3b3JkIikgeworICAgICAgICAgICAgICAgICAgICAvLyBOYW1lZCBmdW5jdGlvbi4K
KyAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS5vcGVu
Q3VybHlUb2tlbiAtIDVdOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNoZWNrVG9rZW4pIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2FuUmVnRXhwKCk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgLy8gY2hlY2tUb2tlbiBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGlzCisg
ICAgICAgICAgICAgICAgLy8gYSBkZWNsYXJhdGlvbiBvciBhbiBleHByZXNzaW9uLgorICAgICAg
ICAgICAgICAgIGlmIChGbkV4cHJUb2tlbnMuaW5kZXhPZihjaGVja1Rva2VuLnZhbHVlKSA+PSAw
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEl0IGlzIGFuIGV4cHJlc3Npb24uCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAvLyBJdCBpcyBhIGRlY2xhcmF0aW9uLgorICAgICAgICAgICAgICAg
IHJldHVybiBzY2FuUmVnRXhwKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
c2NhblJlZ0V4cCgpOworICAgICAgICB9CisgICAgICAgIGlmIChwcmV2VG9rZW4udHlwZSA9PT0g
IktleXdvcmQiKSB7CisgICAgICAgICAgICByZXR1cm4gc2NhblJlZ0V4cCgpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOworICAgIH0KKworICAgIGZ1bmN0aW9u
IGFkdmFuY2UoKSB7CisgICAgICAgIHZhciBjaDsKKworICAgICAgICBpZiAoc3RhdGUuaW5YSlND
aGlsZCkgeworICAgICAgICAgICAgcmV0dXJuIGFkdmFuY2VYSlNDaGlsZCgpOworICAgICAgICB9
CisKKyAgICAgICAgc2tpcENvbW1lbnQoKTsKKworICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3Ro
KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLkVP
RiwKKyAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAg
ICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAgICAgIHJhbmdlOiBbaW5kZXgs
IGluZGV4XQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIGNoID0gc291cmNl
LmNoYXJDb2RlQXQoaW5kZXgpOworCisgICAgICAgIC8vIFZlcnkgY29tbW9uOiAoIGFuZCApIGFu
ZCA7CisgICAgICAgIGlmIChjaCA9PT0gNDAgfHwgY2ggPT09IDQxIHx8IGNoID09PSA1OCkgewor
ICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBTdHJpbmcgbGl0ZXJhbCBzdGFydHMgd2l0aCBzaW5nbGUgcXVvdGUgKCMzOSkgb3IgZG91
YmxlIHF1b3RlICgjMzQpLgorICAgICAgICBpZiAoY2ggPT09IDM5IHx8IGNoID09PSAzNCkgewor
ICAgICAgICAgICAgaWYgKHN0YXRlLmluWEpTVGFnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHNjYW5YSlNTdHJpbmdMaXRlcmFsKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gc2NhblN0cmluZ0xpdGVyYWwoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdGF0ZS5p
blhKU1RhZyAmJiBpc1hKU0lkZW50aWZpZXJTdGFydChjaCkpIHsKKyAgICAgICAgICAgIHJldHVy
biBzY2FuWEpTSWRlbnRpZmllcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNoID09PSA5
NikgeworICAgICAgICAgICAgcmV0dXJuIHNjYW5UZW1wbGF0ZSgpOworICAgICAgICB9CisgICAg
ICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChjaCkpIHsKKyAgICAgICAgICAgIHJldHVybiBzY2Fu
SWRlbnRpZmllcigpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRG90ICguKSBjaGFyICM0NiBj
YW4gYWxzbyBzdGFydCBhIGZsb2F0aW5nLXBvaW50IG51bWJlciwgaGVuY2UgdGhlIG5lZWQKKyAg
ICAgICAgLy8gdG8gY2hlY2sgdGhlIG5leHQgY2hhcmFjdGVyLgorICAgICAgICBpZiAoY2ggPT09
IDQ2KSB7CisgICAgICAgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQo
aW5kZXggKyAxKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2Nhbk51bWVyaWNMaXRlcmFs
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0RlY2ltYWxEaWdpdChjaCkpIHsKKyAgICAgICAg
ICAgIHJldHVybiBzY2FuTnVtZXJpY0xpdGVyYWwoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IFNsYXNoICgvKSBjaGFyICM0NyBjYW4gYWxzbyBzdGFydCBhIHJlZ2V4LgorICAgICAgICBpZiAo
ZXh0cmEudG9rZW5pemUgJiYgY2ggPT09IDQ3KSB7CisgICAgICAgICAgICByZXR1cm4gYWR2YW5j
ZVNsYXNoKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBsZXgoKSB7CisgICAgICAgIHZhciB0b2tlbjsKKworICAg
ICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgaW5kZXggPSB0b2tlbi5yYW5nZVsxXTsK
KyAgICAgICAgbGluZU51bWJlciA9IHRva2VuLmxpbmVOdW1iZXI7CisgICAgICAgIGxpbmVTdGFy
dCA9IHRva2VuLmxpbmVTdGFydDsKKworICAgICAgICBsb29rYWhlYWQgPSBhZHZhbmNlKCk7CisK
KyAgICAgICAgaW5kZXggPSB0b2tlbi5yYW5nZVsxXTsKKyAgICAgICAgbGluZU51bWJlciA9IHRv
a2VuLmxpbmVOdW1iZXI7CisgICAgICAgIGxpbmVTdGFydCA9IHRva2VuLmxpbmVTdGFydDsKKwor
ICAgICAgICByZXR1cm4gdG9rZW47CisgICAgfQorCisgICAgZnVuY3Rpb24gcGVlaygpIHsKKyAg
ICAgICAgdmFyIHBvcywgbGluZSwgc3RhcnQ7CisKKyAgICAgICAgcG9zID0gaW5kZXg7CisgICAg
ICAgIGxpbmUgPSBsaW5lTnVtYmVyOworICAgICAgICBzdGFydCA9IGxpbmVTdGFydDsKKyAgICAg
ICAgbG9va2FoZWFkID0gYWR2YW5jZSgpOworICAgICAgICBpbmRleCA9IHBvczsKKyAgICAgICAg
bGluZU51bWJlciA9IGxpbmU7CisgICAgICAgIGxpbmVTdGFydCA9IHN0YXJ0OworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGxvb2thaGVhZDIoKSB7CisgICAgICAgIHZhciBhZHYsIHBvcywgbGluZSwg
c3RhcnQsIHJlc3VsdDsKKworICAgICAgICAvLyBJZiB3ZSBhcmUgY29sbGVjdGluZyB0aGUgdG9r
ZW5zLCBkb24ndCBncmFiIHRoZSBuZXh0IG9uZSB5ZXQuCisgICAgICAgIGFkdiA9ICh0eXBlb2Yg
ZXh0cmEuYWR2YW5jZSA9PT0gJ2Z1bmN0aW9uJykgPyBleHRyYS5hZHZhbmNlIDogYWR2YW5jZTsK
KworICAgICAgICBwb3MgPSBpbmRleDsKKyAgICAgICAgbGluZSA9IGxpbmVOdW1iZXI7CisgICAg
ICAgIHN0YXJ0ID0gbGluZVN0YXJ0OworCisgICAgICAgIC8vIFNjYW4gZm9yIHRoZSBuZXh0IGlt
bWVkaWF0ZSB0b2tlbi4KKyAgICAgICAgaWYgKGxvb2thaGVhZCA9PT0gbnVsbCkgeworICAgICAg
ICAgICAgbG9va2FoZWFkID0gYWR2KCk7CisgICAgICAgIH0KKyAgICAgICAgaW5kZXggPSBsb29r
YWhlYWQucmFuZ2VbMV07CisgICAgICAgIGxpbmVOdW1iZXIgPSBsb29rYWhlYWQubGluZU51bWJl
cjsKKyAgICAgICAgbGluZVN0YXJ0ID0gbG9va2FoZWFkLmxpbmVTdGFydDsKKworICAgICAgICAv
LyBHcmFiIHRoZSB0b2tlbiByaWdodCBhZnRlci4KKyAgICAgICAgcmVzdWx0ID0gYWR2KCk7Cisg
ICAgICAgIGluZGV4ID0gcG9zOworICAgICAgICBsaW5lTnVtYmVyID0gbGluZTsKKyAgICAgICAg
bGluZVN0YXJ0ID0gc3RhcnQ7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICBTeW50YXhUcmVlRGVsZWdhdGUgPSB7CisKKyAgICAgICAgbmFtZTogJ1N5bnRheFRyZWUnLAor
CisgICAgICAgIHBvc3RQcm9jZXNzOiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgcmV0
dXJuIG5vZGU7CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlQXJyYXlFeHByZXNzaW9uOiBm
dW5jdGlvbiAoZWxlbWVudHMpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAg
ICAgdHlwZTogU3ludGF4LkFycmF5RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBlbGVtZW50
czogZWxlbWVudHMKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRl
QXNzaWdubWVudEV4cHJlc3Npb246IGZ1bmN0aW9uIChvcGVyYXRvciwgbGVmdCwgcmlnaHQpIHsK
KyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkFzc2ln
bm1lbnRFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvciwKKyAg
ICAgICAgICAgICAgICBsZWZ0OiBsZWZ0LAorICAgICAgICAgICAgICAgIHJpZ2h0OiByaWdodAor
ICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVCaW5hcnlFeHByZXNz
aW9uOiBmdW5jdGlvbiAob3BlcmF0b3IsIGxlZnQsIHJpZ2h0KSB7CisgICAgICAgICAgICB2YXIg
dHlwZSA9IChvcGVyYXRvciA9PT0gJ3x8JyB8fCBvcGVyYXRvciA9PT0gJyYmJykgPyBTeW50YXgu
TG9naWNhbEV4cHJlc3Npb24gOgorICAgICAgICAgICAgICAgICAgICAgICAgU3ludGF4LkJpbmFy
eUV4cHJlc3Npb247CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6
IHR5cGUsCisgICAgICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLAorICAgICAgICAgICAg
ICAgIGxlZnQ6IGxlZnQsCisgICAgICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0CisgICAgICAgICAg
ICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUJsb2NrU3RhdGVtZW50OiBmdW5jdGlv
biAoYm9keSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBT
eW50YXguQmxvY2tTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgYm9keTogYm9keQorICAgICAg
ICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVCcmVha1N0YXRlbWVudDogZnVu
Y3Rpb24gKGxhYmVsKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5
cGU6IFN5bnRheC5CcmVha1N0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBsYWJlbDogbGFiZWwK
KyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlQ2FsbEV4cHJlc3Np
b246IGZ1bmN0aW9uIChjYWxsZWUsIGFyZ3MpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICAgICAgdHlwZTogU3ludGF4LkNhbGxFeHByZXNzaW9uLAorICAgICAgICAgICAgICAg
IGNhbGxlZTogY2FsbGVlLAorICAgICAgICAgICAgICAgICdhcmd1bWVudHMnOiBhcmdzCisgICAg
ICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUNhdGNoQ2xhdXNlOiBmdW5j
dGlvbiAocGFyYW0sIGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAg
ICAgdHlwZTogU3ludGF4LkNhdGNoQ2xhdXNlLAorICAgICAgICAgICAgICAgIHBhcmFtOiBwYXJh
bSwKKyAgICAgICAgICAgICAgICBib2R5OiBib2R5CisgICAgICAgICAgICB9OworICAgICAgICB9
LAorCisgICAgICAgIGNyZWF0ZUNvbmRpdGlvbmFsRXhwcmVzc2lvbjogZnVuY3Rpb24gKHRlc3Qs
IGNvbnNlcXVlbnQsIGFsdGVybmF0ZSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBTeW50YXguQ29uZGl0aW9uYWxFeHByZXNzaW9uLAorICAgICAgICAgICAg
ICAgIHRlc3Q6IHRlc3QsCisgICAgICAgICAgICAgICAgY29uc2VxdWVudDogY29uc2VxdWVudCwK
KyAgICAgICAgICAgICAgICBhbHRlcm5hdGU6IGFsdGVybmF0ZQorICAgICAgICAgICAgfTsKKyAg
ICAgICAgfSwKKworICAgICAgICBjcmVhdGVDb250aW51ZVN0YXRlbWVudDogZnVuY3Rpb24gKGxh
YmVsKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRh
eC5Db250aW51ZVN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBsYWJlbDogbGFiZWwKKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlRGVidWdnZXJTdGF0ZW1lbnQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlw
ZTogU3ludGF4LkRlYnVnZ2VyU3RhdGVtZW50CisgICAgICAgICAgICB9OworICAgICAgICB9LAor
CisgICAgICAgIGNyZWF0ZURvV2hpbGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChib2R5LCB0ZXN0KSB7
CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Eb1do
aWxlU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksCisgICAgICAgICAgICAg
ICAgdGVzdDogdGVzdAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVh
dGVFbXB0eVN0YXRlbWVudDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRW1wdHlTdGF0ZW1lbnQKKyAgICAgICAgICAgIH07
CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudDogZnVuY3Rp
b24gKGV4cHJlc3Npb24pIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
dHlwZTogU3ludGF4LkV4cHJlc3Npb25TdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgZXhwcmVz
c2lvbjogZXhwcmVzc2lvbgorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBj
cmVhdGVGb3JTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChpbml0LCB0ZXN0LCB1cGRhdGUsIGJvZHkpIHsK
KyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkZvclN0
YXRlbWVudCwKKyAgICAgICAgICAgICAgICBpbml0OiBpbml0LAorICAgICAgICAgICAgICAgIHRl
c3Q6IHRlc3QsCisgICAgICAgICAgICAgICAgdXBkYXRlOiB1cGRhdGUsCisgICAgICAgICAgICAg
ICAgYm9keTogYm9keQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVh
dGVGb3JJblN0YXRlbWVudDogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0LCBib2R5KSB7CisgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Gb3JJblN0YXRlbWVu
dCwKKyAgICAgICAgICAgICAgICBsZWZ0OiBsZWZ0LAorICAgICAgICAgICAgICAgIHJpZ2h0OiBy
aWdodCwKKyAgICAgICAgICAgICAgICBib2R5OiBib2R5LAorICAgICAgICAgICAgICAgIGVhY2g6
IGZhbHNlCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUZvck9m
U3RhdGVtZW50OiBmdW5jdGlvbiAobGVmdCwgcmlnaHQsIGJvZHkpIHsKKyAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkZvck9mU3RhdGVtZW50LAorICAg
ICAgICAgICAgICAgIGxlZnQ6IGxlZnQsCisgICAgICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0LAor
ICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksCisgICAgICAgICAgICB9OworICAgICAgICB9LAor
CisgICAgICAgIGNyZWF0ZUZ1bmN0aW9uRGVjbGFyYXRpb246IGZ1bmN0aW9uIChpZCwgcGFyYW1z
LCBkZWZhdWx0cywgYm9keSwgcmVzdCwgZ2VuZXJhdG9yLCBleHByZXNzaW9uKSB7CisgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5GdW5jdGlvbkRlY2xh
cmF0aW9uLAorICAgICAgICAgICAgICAgIGlkOiBpZCwKKyAgICAgICAgICAgICAgICBwYXJhbXM6
IHBhcmFtcywKKyAgICAgICAgICAgICAgICBkZWZhdWx0czogZGVmYXVsdHMsCisgICAgICAgICAg
ICAgICAgYm9keTogYm9keSwKKyAgICAgICAgICAgICAgICByZXN0OiByZXN0LAorICAgICAgICAg
ICAgICAgIGdlbmVyYXRvcjogZ2VuZXJhdG9yLAorICAgICAgICAgICAgICAgIGV4cHJlc3Npb246
IGV4cHJlc3Npb24KKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRl
RnVuY3Rpb25FeHByZXNzaW9uOiBmdW5jdGlvbiAoaWQsIHBhcmFtcywgZGVmYXVsdHMsIGJvZHks
IHJlc3QsIGdlbmVyYXRvciwgZXhwcmVzc2lvbikgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRnVuY3Rpb25FeHByZXNzaW9uLAorICAgICAgICAg
ICAgICAgIGlkOiBpZCwKKyAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcywKKyAgICAgICAg
ICAgICAgICBkZWZhdWx0czogZGVmYXVsdHMsCisgICAgICAgICAgICAgICAgYm9keTogYm9keSwK
KyAgICAgICAgICAgICAgICByZXN0OiByZXN0LAorICAgICAgICAgICAgICAgIGdlbmVyYXRvcjog
Z2VuZXJhdG9yLAorICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb24KKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlSWRlbnRpZmllcjogZnVuY3Rp
b24gKG5hbWUpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTog
U3ludGF4LklkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgbmFtZTogbmFtZQorICAgICAgICAg
ICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVYSlNBdHRyaWJ1dGU6IGZ1bmN0aW9u
IChuYW1lLCB2YWx1ZSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBTeW50YXguWEpTQXR0cmlidXRlLAorICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCisg
ICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlCisgICAgICAgICAgICB9OworICAgICAgICB9LAor
CisgICAgICAgIGNyZWF0ZVhKU0lkZW50aWZpZXI6IGZ1bmN0aW9uIChuYW1lLCBuYW1lc3BhY2Up
IHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlhK
U0lkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgbmFtZTogbmFtZSwKKyAgICAgICAgICAgICAg
ICBuYW1lc3BhY2U6IG5hbWVzcGFjZQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAg
ICAgICBjcmVhdGVYSlNFbGVtZW50OiBmdW5jdGlvbiAob3BlbmluZ0VsZW1lbnQsIGNsb3NpbmdF
bGVtZW50LCBjaGlsZHJlbikgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAg
ICB0eXBlOiBTeW50YXguWEpTRWxlbWVudCwKKyAgICAgICAgICAgICAgICBuYW1lOiBvcGVuaW5n
RWxlbWVudC5uYW1lLAorICAgICAgICAgICAgICAgIHNlbGZDbG9zaW5nOiBvcGVuaW5nRWxlbWVu
dC5zZWxmQ2xvc2luZywKKyAgICAgICAgICAgICAgICBvcGVuaW5nRWxlbWVudDogb3BlbmluZ0Vs
ZW1lbnQsCisgICAgICAgICAgICAgICAgY2xvc2luZ0VsZW1lbnQ6IGNsb3NpbmdFbGVtZW50LAor
ICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IG9wZW5pbmdFbGVtZW50LmF0dHJpYnV0ZXMsCisg
ICAgICAgICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuCisgICAgICAgICAgICB9OworICAgICAg
ICB9LAorCisgICAgICAgIGNyZWF0ZVhKU0VtcHR5RXhwcmVzc2lvbjogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguWEpTRW1w
dHlFeHByZXNzaW9uCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0
ZVhKU0V4cHJlc3Npb25Db250YWluZXI6IGZ1bmN0aW9uIChleHByZXNzaW9uKSB7CisgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5YSlNFeHByZXNzaW9u
Q29udGFpbmVyLAorICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb24KKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlWEpTT3BlbmluZ0VsZW1lbnQ6
IGZ1bmN0aW9uIChuYW1lLCBhdHRyaWJ1dGVzLCBzZWxmQ2xvc2luZykgeworICAgICAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguWEpTT3BlbmluZ0VsZW1lbnQs
CisgICAgICAgICAgICAgICAgbmFtZTogbmFtZSwKKyAgICAgICAgICAgICAgICBzZWxmQ2xvc2lu
Zzogc2VsZkNsb3NpbmcsCisgICAgICAgICAgICAgICAgYXR0cmlidXRlczogYXR0cmlidXRlcwor
ICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVYSlNDbG9zaW5nRWxl
bWVudDogZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgdHlwZTogU3ludGF4LlhKU0Nsb3NpbmdFbGVtZW50LAorICAgICAgICAgICAgICAgIG5h
bWU6IG5hbWUKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlSWZT
dGF0ZW1lbnQ6IGZ1bmN0aW9uICh0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpIHsKKyAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LklmU3RhdGVtZW50
LAorICAgICAgICAgICAgICAgIHRlc3Q6IHRlc3QsCisgICAgICAgICAgICAgICAgY29uc2VxdWVu
dDogY29uc2VxdWVudCwKKyAgICAgICAgICAgICAgICBhbHRlcm5hdGU6IGFsdGVybmF0ZQorICAg
ICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVMYWJlbGVkU3RhdGVtZW50
OiBmdW5jdGlvbiAobGFiZWwsIGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgdHlwZTogU3ludGF4LkxhYmVsZWRTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAg
bGFiZWw6IGxhYmVsLAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHkKKyAgICAgICAgICAgIH07
CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlTGl0ZXJhbDogZnVuY3Rpb24gKHRva2VuKSB7
CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5MaXRl
cmFsLAorICAgICAgICAgICAgICAgIHZhbHVlOiB0b2tlbi52YWx1ZSwKKyAgICAgICAgICAgICAg
ICByYXc6IHNvdXJjZS5zbGljZSh0b2tlbi5yYW5nZVswXSwgdG9rZW4ucmFuZ2VbMV0pCisgICAg
ICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZU1lbWJlckV4cHJlc3Npb246
IGZ1bmN0aW9uIChhY2Nlc3Nvciwgb2JqZWN0LCBwcm9wZXJ0eSkgeworICAgICAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTWVtYmVyRXhwcmVzc2lvbiwKKyAg
ICAgICAgICAgICAgICBjb21wdXRlZDogYWNjZXNzb3IgPT09ICdbJywKKyAgICAgICAgICAgICAg
ICBvYmplY3Q6IG9iamVjdCwKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eTogcHJvcGVydHkKKyAg
ICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlTmV3RXhwcmVzc2lvbjog
ZnVuY3Rpb24gKGNhbGxlZSwgYXJncykgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBTeW50YXguTmV3RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBjYWxs
ZWU6IGNhbGxlZSwKKyAgICAgICAgICAgICAgICAnYXJndW1lbnRzJzogYXJncworICAgICAgICAg
ICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVPYmplY3RFeHByZXNzaW9uOiBmdW5j
dGlvbiAocHJvcGVydGllcykgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAg
ICB0eXBlOiBTeW50YXguT2JqZWN0RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBwcm9wZXJ0
aWVzOiBwcm9wZXJ0aWVzCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNy
ZWF0ZVBvc3RmaXhFeHByZXNzaW9uOiBmdW5jdGlvbiAob3BlcmF0b3IsIGFyZ3VtZW50KSB7Cisg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5VcGRhdGVF
eHByZXNzaW9uLAorICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvciwKKyAgICAgICAg
ICAgICAgICBhcmd1bWVudDogYXJndW1lbnQsCisgICAgICAgICAgICAgICAgcHJlZml4OiBmYWxz
ZQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVQcm9ncmFtOiBm
dW5jdGlvbiAoYm9keSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBTeW50YXguUHJvZ3JhbSwKKyAgICAgICAgICAgICAgICBib2R5OiBib2R5CisgICAgICAg
ICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVByb3BlcnR5OiBmdW5jdGlvbiAo
a2luZCwga2V5LCB2YWx1ZSwgbWV0aG9kLCBzaG9ydGhhbmQpIHsKKyAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlByb3BlcnR5LAorICAgICAgICAgICAg
ICAgIGtleToga2V5LAorICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAgICAgICAg
ICAgICBraW5kOiBraW5kLAorICAgICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLAorICAgICAg
ICAgICAgICAgIHNob3J0aGFuZDogc2hvcnRoYW5kCisgICAgICAgICAgICB9OworICAgICAgICB9
LAorCisgICAgICAgIGNyZWF0ZVJldHVyblN0YXRlbWVudDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7
CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5SZXR1
cm5TdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50CisgICAgICAg
ICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVNlcXVlbmNlRXhwcmVzc2lvbjog
ZnVuY3Rpb24gKGV4cHJlc3Npb25zKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgICAgIHR5cGU6IFN5bnRheC5TZXF1ZW5jZUV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAg
ZXhwcmVzc2lvbnM6IGV4cHJlc3Npb25zCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisg
ICAgICAgIGNyZWF0ZVN3aXRjaENhc2U6IGZ1bmN0aW9uICh0ZXN0LCBjb25zZXF1ZW50KSB7Cisg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Td2l0Y2hD
YXNlLAorICAgICAgICAgICAgICAgIHRlc3Q6IHRlc3QsCisgICAgICAgICAgICAgICAgY29uc2Vx
dWVudDogY29uc2VxdWVudAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBj
cmVhdGVTd2l0Y2hTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChkaXNjcmltaW5hbnQsIGNhc2VzKSB7Cisg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Td2l0Y2hT
dGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgZGlzY3JpbWluYW50OiBkaXNjcmltaW5hbnQsCisg
ICAgICAgICAgICAgICAgY2FzZXM6IGNhc2VzCisgICAgICAgICAgICB9OworICAgICAgICB9LAor
CisgICAgICAgIGNyZWF0ZVRoaXNFeHByZXNzaW9uOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5UaGlzRXhwcmVzc2lvbgor
ICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVUaHJvd1N0YXRlbWVu
dDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgICAgIHR5cGU6IFN5bnRheC5UaHJvd1N0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBhcmd1
bWVudDogYXJndW1lbnQKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3Jl
YXRlVHJ5U3RhdGVtZW50OiBmdW5jdGlvbiAoYmxvY2ssIGd1YXJkZWRIYW5kbGVycywgaGFuZGxl
cnMsIGZpbmFsaXplcikgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBTeW50YXguVHJ5U3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGJsb2NrOiBibG9jaywK
KyAgICAgICAgICAgICAgICBndWFyZGVkSGFuZGxlcnM6IGd1YXJkZWRIYW5kbGVycywKKyAgICAg
ICAgICAgICAgICBoYW5kbGVyczogaGFuZGxlcnMsCisgICAgICAgICAgICAgICAgZmluYWxpemVy
OiBmaW5hbGl6ZXIKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRl
VW5hcnlFeHByZXNzaW9uOiBmdW5jdGlvbiAob3BlcmF0b3IsIGFyZ3VtZW50KSB7CisgICAgICAg
ICAgICBpZiAob3BlcmF0b3IgPT09ICcrKycgfHwgb3BlcmF0b3IgPT09ICctLScpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVXBk
YXRlRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLAor
ICAgICAgICAgICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnQsCisgICAgICAgICAgICAgICAg
ICAgIHByZWZpeDogdHJ1ZQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5VbmFyeUV4cHJl
c3Npb24sCisgICAgICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLAorICAgICAgICAgICAg
ICAgIGFyZ3VtZW50OiBhcmd1bWVudAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAg
ICAgICBjcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uOiBmdW5jdGlvbiAoZGVjbGFyYXRpb25zLCBr
aW5kKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRh
eC5WYXJpYWJsZURlY2xhcmF0aW9uLAorICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogZGVj
bGFyYXRpb25zLAorICAgICAgICAgICAgICAgIGtpbmQ6IGtpbmQKKyAgICAgICAgICAgIH07Cisg
ICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlVmFyaWFibGVEZWNsYXJhdG9yOiBmdW5jdGlvbiAo
aWQsIGluaXQpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTog
U3ludGF4LlZhcmlhYmxlRGVjbGFyYXRvciwKKyAgICAgICAgICAgICAgICBpZDogaWQsCisgICAg
ICAgICAgICAgICAgaW5pdDogaW5pdAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAg
ICAgICBjcmVhdGVXaGlsZVN0YXRlbWVudDogZnVuY3Rpb24gKHRlc3QsIGJvZHkpIHsKKyAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LldoaWxlU3RhdGVt
ZW50LAorICAgICAgICAgICAgICAgIHRlc3Q6IHRlc3QsCisgICAgICAgICAgICAgICAgYm9keTog
Ym9keQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVXaXRoU3Rh
dGVtZW50OiBmdW5jdGlvbiAob2JqZWN0LCBib2R5KSB7CisgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5XaXRoU3RhdGVtZW50LAorICAgICAgICAgICAg
ICAgIG9iamVjdDogb2JqZWN0LAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHkKKyAgICAgICAg
ICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlVGVtcGxhdGVFbGVtZW50OiBmdW5j
dGlvbiAodmFsdWUsIHRhaWwpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAg
ICAgdHlwZTogU3ludGF4LlRlbXBsYXRlRWxlbWVudCwKKyAgICAgICAgICAgICAgICB2YWx1ZTog
dmFsdWUsCisgICAgICAgICAgICAgICAgdGFpbDogdGFpbAorICAgICAgICAgICAgfTsKKyAgICAg
ICAgfSwKKworICAgICAgICBjcmVhdGVUZW1wbGF0ZUxpdGVyYWw6IGZ1bmN0aW9uIChxdWFzaXMs
IGV4cHJlc3Npb25zKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5
cGU6IFN5bnRheC5UZW1wbGF0ZUxpdGVyYWwsCisgICAgICAgICAgICAgICAgcXVhc2lzOiBxdWFz
aXMsCisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnM6IGV4cHJlc3Npb25zCisgICAgICAgICAg
ICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVNwcmVhZEVsZW1lbnQ6IGZ1bmN0aW9u
IChhcmd1bWVudCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBl
OiBTeW50YXguU3ByZWFkRWxlbWVudCwKKyAgICAgICAgICAgICAgICBhcmd1bWVudDogYXJndW1l
bnQKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlVGFnZ2VkVGVt
cGxhdGVFeHByZXNzaW9uOiBmdW5jdGlvbiAodGFnLCBxdWFzaSkgeworICAgICAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVGFnZ2VkVGVtcGxhdGVFeHByZXNz
aW9uLAorICAgICAgICAgICAgICAgIHRhZzogdGFnLAorICAgICAgICAgICAgICAgIHF1YXNpOiBx
dWFzaQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVBcnJvd0Z1
bmN0aW9uRXhwcmVzc2lvbjogZnVuY3Rpb24gKHBhcmFtcywgZGVmYXVsdHMsIGJvZHksIHJlc3Qs
IGV4cHJlc3Npb24pIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlw
ZTogU3ludGF4LkFycm93RnVuY3Rpb25FeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGlkOiBu
dWxsLAorICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLAorICAgICAgICAgICAgICAgIGRl
ZmF1bHRzOiBkZWZhdWx0cywKKyAgICAgICAgICAgICAgICBib2R5OiBib2R5LAorICAgICAgICAg
ICAgICAgIHJlc3Q6IHJlc3QsCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiBmYWxzZSwKKyAg
ICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByZXNzaW9uCisgICAgICAgICAgICB9OworICAg
ICAgICB9LAorCisgICAgICAgIGNyZWF0ZU1ldGhvZERlZmluaXRpb246IGZ1bmN0aW9uIChwcm9w
ZXJ0eVR5cGUsIGtpbmQsIGtleSwgdmFsdWUpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICAgICAgdHlwZTogU3ludGF4Lk1ldGhvZERlZmluaXRpb24sCisgICAgICAgICAgICAg
ICAga2V5OiBrZXksCisgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAorICAgICAgICAgICAg
ICAgIGtpbmQ6IGtpbmQsCisgICAgICAgICAgICAgICAgJ3N0YXRpYyc6IHByb3BlcnR5VHlwZSA9
PT0gQ2xhc3NQcm9wZXJ0eVR5cGUuc3RhdGljCisgICAgICAgICAgICB9OworICAgICAgICB9LAor
CisgICAgICAgIGNyZWF0ZUNsYXNzQm9keTogZnVuY3Rpb24gKGJvZHkpIHsKKyAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkNsYXNzQm9keSwKKyAgICAg
ICAgICAgICAgICBib2R5OiBib2R5CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAg
ICAgIGNyZWF0ZUNsYXNzRXhwcmVzc2lvbjogZnVuY3Rpb24gKGlkLCBzdXBlckNsYXNzLCBib2R5
KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5D
bGFzc0V4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgaWQ6IGlkLAorICAgICAgICAgICAgICAg
IHN1cGVyQ2xhc3M6IHN1cGVyQ2xhc3MsCisgICAgICAgICAgICAgICAgYm9keTogYm9keQorICAg
ICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVDbGFzc0RlY2xhcmF0aW9u
OiBmdW5jdGlvbiAoaWQsIHN1cGVyQ2xhc3MsIGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkNsYXNzRGVjbGFyYXRpb24sCisgICAgICAg
ICAgICAgICAgaWQ6IGlkLAorICAgICAgICAgICAgICAgIHN1cGVyQ2xhc3M6IHN1cGVyQ2xhc3Ms
CisgICAgICAgICAgICAgICAgYm9keTogYm9keQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwK
KworICAgICAgICBjcmVhdGVQYXRoOiBmdW5jdGlvbiAoYm9keSkgeworICAgICAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguUGF0aCwKKyAgICAgICAgICAgICAg
ICBib2R5OiBib2R5CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0
ZUdsb2I6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAg
ICAgdHlwZTogU3ludGF4Lkdsb2IKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAg
ICAgY3JlYXRlRXhwb3J0U3BlY2lmaWVyOiBmdW5jdGlvbiAoaWQsIGZyb20pIHsKKyAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkV4cG9ydFNwZWNpZmll
ciwKKyAgICAgICAgICAgICAgICBpZDogaWQsCisgICAgICAgICAgICAgICAgZnJvbTogZnJvbQor
ICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVFeHBvcnRTcGVjaWZp
ZXJTZXQ6IGZ1bmN0aW9uIChzcGVjaWZpZXJzKSB7CisgICAgICAgICAgICByZXR1cm4geworICAg
ICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5FeHBvcnRTcGVjaWZpZXJTZXQsCisgICAgICAgICAg
ICAgICAgc3BlY2lmaWVyczogc3BlY2lmaWVycworICAgICAgICAgICAgfTsKKyAgICAgICAgfSwK
KworICAgICAgICBjcmVhdGVFeHBvcnREZWNsYXJhdGlvbjogZnVuY3Rpb24gKGRlY2xhcmF0aW9u
LCBzcGVjaWZpZXJzKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5
cGU6IFN5bnRheC5FeHBvcnREZWNsYXJhdGlvbiwKKyAgICAgICAgICAgICAgICBkZWNsYXJhdGlv
bjogZGVjbGFyYXRpb24sCisgICAgICAgICAgICAgICAgc3BlY2lmaWVyczogc3BlY2lmaWVycwor
ICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVJbXBvcnRTcGVjaWZp
ZXI6IGZ1bmN0aW9uIChpZCwgZnJvbSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBTeW50YXguSW1wb3J0U3BlY2lmaWVyLAorICAgICAgICAgICAgICAgIGlk
OiBpZCwKKyAgICAgICAgICAgICAgICBmcm9tOiBmcm9tCisgICAgICAgICAgICB9OworICAgICAg
ICB9LAorCisgICAgICAgIGNyZWF0ZUltcG9ydERlY2xhcmF0aW9uOiBmdW5jdGlvbiAoc3BlY2lm
aWVycywgZnJvbSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBl
OiBTeW50YXguSW1wb3J0RGVjbGFyYXRpb24sCisgICAgICAgICAgICAgICAgc3BlY2lmaWVyczog
c3BlY2lmaWVycywKKyAgICAgICAgICAgICAgICBmcm9tOiBmcm9tCisgICAgICAgICAgICB9Owor
ICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVlpZWxkRXhwcmVzc2lvbjogZnVuY3Rpb24gKGFy
Z3VtZW50LCBkZWxlZ2F0ZSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAg
ICB0eXBlOiBTeW50YXguWWllbGRFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50
OiBhcmd1bWVudCwKKyAgICAgICAgICAgICAgICBkZWxlZ2F0ZTogZGVsZWdhdGUKKyAgICAgICAg
ICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlTW9kdWxlRGVjbGFyYXRpb246IGZ1
bmN0aW9uIChpZCwgZnJvbSwgYm9keSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBTeW50YXguTW9kdWxlRGVjbGFyYXRpb24sCisgICAgICAgICAgICAgICAg
aWQ6IGlkLAorICAgICAgICAgICAgICAgIGZyb206IGZyb20sCisgICAgICAgICAgICAgICAgYm9k
eTogYm9keQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisKKyAgICB9OworCisgICAgLy8g
UmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBsaW5lIHRlcm1pbmF0b3IgYmVmb3JlIHRoZSBuZXh0
IHRva2VuLgorCisgICAgZnVuY3Rpb24gcGVla0xpbmVUZXJtaW5hdG9yKCkgeworICAgICAgICB2
YXIgcG9zLCBsaW5lLCBzdGFydCwgZm91bmQ7CisKKyAgICAgICAgcG9zID0gaW5kZXg7CisgICAg
ICAgIGxpbmUgPSBsaW5lTnVtYmVyOworICAgICAgICBzdGFydCA9IGxpbmVTdGFydDsKKyAgICAg
ICAgc2tpcENvbW1lbnQoKTsKKyAgICAgICAgZm91bmQgPSBsaW5lTnVtYmVyICE9PSBsaW5lOwor
ICAgICAgICBpbmRleCA9IHBvczsKKyAgICAgICAgbGluZU51bWJlciA9IGxpbmU7CisgICAgICAg
IGxpbmVTdGFydCA9IHN0YXJ0OworCisgICAgICAgIHJldHVybiBmb3VuZDsKKyAgICB9CisKKyAg
ICAvLyBUaHJvdyBhbiBleGNlcHRpb24KKworICAgIGZ1bmN0aW9uIHRocm93RXJyb3IodG9rZW4s
IG1lc3NhZ2VGb3JtYXQpIHsKKyAgICAgICAgdmFyIGVycm9yLAorICAgICAgICAgICAgYXJncyA9
IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMiksCisgICAgICAgICAgICBt
c2cgPSBtZXNzYWdlRm9ybWF0LnJlcGxhY2UoCisgICAgICAgICAgICAgICAgLyUoXGQpL2csCisg
ICAgICAgICAgICAgICAgZnVuY3Rpb24gKHdob2xlLCBpbmRleCkgeworICAgICAgICAgICAgICAg
ICAgICBhc3NlcnQoaW5kZXggPCBhcmdzLmxlbmd0aCwgJ01lc3NhZ2UgcmVmZXJlbmNlIG11c3Qg
YmUgaW4gcmFuZ2UnKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3NbaW5kZXhdOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICk7CisKKyAgICAgICAgaWYgKHR5cGVvZiB0
b2tlbi5saW5lTnVtYmVyID09PSAnbnVtYmVyJykgeworICAgICAgICAgICAgZXJyb3IgPSBuZXcg
RXJyb3IoJ0xpbmUgJyArIHRva2VuLmxpbmVOdW1iZXIgKyAnOiAnICsgbXNnKTsKKyAgICAgICAg
ICAgIGVycm9yLmluZGV4ID0gdG9rZW4ucmFuZ2VbMF07CisgICAgICAgICAgICBlcnJvci5saW5l
TnVtYmVyID0gdG9rZW4ubGluZU51bWJlcjsKKyAgICAgICAgICAgIGVycm9yLmNvbHVtbiA9IHRv
a2VuLnJhbmdlWzBdIC0gbGluZVN0YXJ0ICsgMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGVycm9yID0gbmV3IEVycm9yKCdMaW5lICcgKyBsaW5lTnVtYmVyICsgJzogJyArIG1zZyk7
CisgICAgICAgICAgICBlcnJvci5pbmRleCA9IGluZGV4OworICAgICAgICAgICAgZXJyb3IubGlu
ZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAgICAgICAgICBlcnJvci5jb2x1bW4gPSBpbmRleCAt
IGxpbmVTdGFydCArIDE7CisgICAgICAgIH0KKworICAgICAgICBlcnJvci5kZXNjcmlwdGlvbiA9
IG1zZzsKKyAgICAgICAgdGhyb3cgZXJyb3I7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGhyb3dF
cnJvclRvbGVyYW50KCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgdGhyb3dFcnJvci5h
cHBseShudWxsLCBhcmd1bWVudHMpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAg
ICBpZiAoZXh0cmEuZXJyb3JzKSB7CisgICAgICAgICAgICAgICAgZXh0cmEuZXJyb3JzLnB1c2go
ZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8vIFRocm93IGFuIGV4Y2VwdGlv
biBiZWNhdXNlIG9mIHRoZSB0b2tlbi4KKworICAgIGZ1bmN0aW9uIHRocm93VW5leHBlY3RlZCh0
b2tlbikgeworICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uRU9GKSB7CisgICAgICAg
ICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkRU9TKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5OdW1lcmljTGl0ZXJhbCkgewor
ICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZE51bWJlcik7
CisgICAgICAgIH0KKworICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uU3RyaW5nTGl0
ZXJhbCkgeworICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3Rl
ZFN0cmluZyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4u
SWRlbnRpZmllcikgeworICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5l
eHBlY3RlZElkZW50aWZpZXIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUg
PT09IFRva2VuLktleXdvcmQpIHsKKyAgICAgICAgICAgIGlmIChpc0Z1dHVyZVJlc2VydmVkV29y
ZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNz
YWdlcy5VbmV4cGVjdGVkUmVzZXJ2ZWQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJpY3Qg
JiYgaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAg
ICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3Jk
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0
aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIHRva2VuLnZhbHVlKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5UZW1wbGF0ZSkg
eworICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZFRlbXBs
YXRlLCB0b2tlbi52YWx1ZS5yYXcpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQm9vbGVhbkxp
dGVyYWwsIE51bGxMaXRlcmFsLCBvciBQdW5jdHVhdG9yLgorICAgICAgICB0aHJvd0Vycm9yKHRv
a2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIHRva2VuLnZhbHVlKTsKKyAgICB9CisKKyAg
ICAvLyBFeHBlY3QgdGhlIG5leHQgdG9rZW4gdG8gbWF0Y2ggdGhlIHNwZWNpZmllZCBwdW5jdHVh
dG9yLgorICAgIC8vIElmIG5vdCwgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgorCisgICAg
ZnVuY3Rpb24gZXhwZWN0KHZhbHVlKSB7CisgICAgICAgIHZhciB0b2tlbiA9IGxleCgpOworICAg
ICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uUHVuY3R1YXRvciB8fCB0b2tlbi52YWx1ZSAh
PT0gdmFsdWUpIHsKKyAgICAgICAgICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBFeHBlY3QgdGhlIG5leHQgdG9rZW4gdG8gbWF0Y2ggdGhlIHNw
ZWNpZmllZCBrZXl3b3JkLgorICAgIC8vIElmIG5vdCwgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhy
b3duLgorCisgICAgZnVuY3Rpb24gZXhwZWN0S2V5d29yZChrZXl3b3JkKSB7CisgICAgICAgIHZh
ciB0b2tlbiA9IGxleCgpOworICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uS2V5d29y
ZCB8fCB0b2tlbi52YWx1ZSAhPT0ga2V5d29yZCkgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVj
dGVkKHRva2VuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJldHVybiB0cnVlIGlmIHRo
ZSBuZXh0IHRva2VuIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBwdW5jdHVhdG9yLgorCisgICAgZnVu
Y3Rpb24gbWF0Y2godmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBU
b2tlbi5QdW5jdHVhdG9yICYmIGxvb2thaGVhZC52YWx1ZSA9PT0gdmFsdWU7CisgICAgfQorCisg
ICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVk
IGtleXdvcmQKKworICAgIGZ1bmN0aW9uIG1hdGNoS2V5d29yZChrZXl3b3JkKSB7CisgICAgICAg
IHJldHVybiBsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uS2V5d29yZCAmJiBsb29rYWhlYWQudmFs
dWUgPT09IGtleXdvcmQ7CisgICAgfQorCisKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4
dCB0b2tlbiBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgY29udGV4dHVhbCBrZXl3b3JkCisKKyAgICBm
dW5jdGlvbiBtYXRjaENvbnRleHR1YWxLZXl3b3JkKGtleXdvcmQpIHsKKyAgICAgICAgcmV0dXJu
IGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyICYmIGxvb2thaGVhZC52YWx1ZSA9
PT0ga2V5d29yZDsKKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCB0b2tl
biBpcyBhbiBhc3NpZ25tZW50IG9wZXJhdG9yCisKKyAgICBmdW5jdGlvbiBtYXRjaEFzc2lnbigp
IHsKKyAgICAgICAgdmFyIG9wOworCisgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9r
ZW4uUHVuY3R1YXRvcikgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIG9wID0gbG9va2FoZWFkLnZhbHVlOworICAgICAgICByZXR1cm4gb3AgPT09ICc9JyB8
fAorICAgICAgICAgICAgb3AgPT09ICcqPScgfHwKKyAgICAgICAgICAgIG9wID09PSAnLz0nIHx8
CisgICAgICAgICAgICBvcCA9PT0gJyU9JyB8fAorICAgICAgICAgICAgb3AgPT09ICcrPScgfHwK
KyAgICAgICAgICAgIG9wID09PSAnLT0nIHx8CisgICAgICAgICAgICBvcCA9PT0gJzw8PScgfHwK
KyAgICAgICAgICAgIG9wID09PSAnPj49JyB8fAorICAgICAgICAgICAgb3AgPT09ICc+Pj49JyB8
fAorICAgICAgICAgICAgb3AgPT09ICcmPScgfHwKKyAgICAgICAgICAgIG9wID09PSAnXj0nIHx8
CisgICAgICAgICAgICBvcCA9PT0gJ3w9JzsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjb25zdW1l
U2VtaWNvbG9uKCkgeworICAgICAgICB2YXIgbGluZTsKKworICAgICAgICAvLyBDYXRjaCB0aGUg
dmVyeSBjb21tb24gY2FzZSBmaXJzdDogaW1tZWRpYXRlbHkgYSBzZW1pY29sb24gKGNoYXIgIzU5
KS4KKyAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gNTkpIHsKKyAgICAg
ICAgICAgIGxleCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
bGluZSA9IGxpbmVOdW1iZXI7CisgICAgICAgIHNraXBDb21tZW50KCk7CisgICAgICAgIGlmIChs
aW5lTnVtYmVyICE9PSBsaW5lKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAobWF0Y2goJzsnKSkgeworICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRv
a2VuLkVPRiAmJiAhbWF0Y2goJ30nKSkgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxv
b2thaGVhZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBwcm92
aWRlZCBleHByZXNzaW9uIGlzIExlZnRIYW5kU2lkZUV4cHJlc3Npb24KKworICAgIGZ1bmN0aW9u
IGlzTGVmdEhhbmRTaWRlKGV4cHIpIHsKKyAgICAgICAgcmV0dXJuIGV4cHIudHlwZSA9PT0gU3lu
dGF4LklkZW50aWZpZXIgfHwgZXhwci50eXBlID09PSBTeW50YXguTWVtYmVyRXhwcmVzc2lvbjsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0Fzc2lnbmFibGVMZWZ0SGFuZFNpZGUoZXhwcikgewor
ICAgICAgICByZXR1cm4gaXNMZWZ0SGFuZFNpZGUoZXhwcikgfHwgZXhwci50eXBlID09PSBTeW50
YXguT2JqZWN0UGF0dGVybiB8fCBleHByLnR5cGUgPT09IFN5bnRheC5BcnJheVBhdHRlcm47Cisg
ICAgfQorCisgICAgLy8gMTEuMS40IEFycmF5IEluaXRpYWxpc2VyCisKKyAgICBmdW5jdGlvbiBw
YXJzZUFycmF5SW5pdGlhbGlzZXIoKSB7CisgICAgICAgIHZhciBlbGVtZW50cyA9IFtdLCBibG9j
a3MgPSBbXSwgZmlsdGVyID0gbnVsbCwgdG1wLCBwb3NzaWJsZWNvbXByZWhlbnNpb24gPSB0cnVl
LCBib2R5OworCisgICAgICAgIGV4cGVjdCgnWycpOworICAgICAgICB3aGlsZSAoIW1hdGNoKCdd
JykpIHsKKyAgICAgICAgICAgIGlmIChsb29rYWhlYWQudmFsdWUgPT09ICdmb3InICYmCisgICAg
ICAgICAgICAgICAgICAgIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFwb3NzaWJsZWNvbXByZWhlbnNpb24pIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuQ29tcHJlaGVuc2lvbkVycm9yKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbWF0Y2hLZXl3b3JkKCdmb3InKTsKKyAgICAg
ICAgICAgICAgICB0bXAgPSBwYXJzZUZvclN0YXRlbWVudCh7aWdub3JlX2JvZHk6IHRydWV9KTsK
KyAgICAgICAgICAgICAgICB0bXAub2YgPSB0bXAudHlwZSA9PT0gU3ludGF4LkZvck9mU3RhdGVt
ZW50OworICAgICAgICAgICAgICAgIHRtcC50eXBlID0gU3ludGF4LkNvbXByZWhlbnNpb25CbG9j
azsKKyAgICAgICAgICAgICAgICBpZiAodG1wLmxlZnQua2luZCkgeyAvLyBjYW4ndCBiZSBsZXQg
b3IgY29uc3QKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuQ29t
cHJlaGVuc2lvbkVycm9yKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYmxv
Y2tzLnB1c2godG1wKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobG9va2FoZWFkLnZhbHVlID09
PSAnaWYnICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQudHlwZSA9PT0g
VG9rZW4uS2V5d29yZCkgeworICAgICAgICAgICAgICAgIGlmICghcG9zc2libGVjb21wcmVoZW5z
aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkNvbXBy
ZWhlbnNpb25FcnJvcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGV4cGVj
dEtleXdvcmQoJ2lmJyk7CisgICAgICAgICAgICAgICAgZXhwZWN0KCcoJyk7CisgICAgICAgICAg
ICAgICAgZmlsdGVyID0gcGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgICAgICAgICAgZXhwZWN0
KCcpJyk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxvb2thaGVhZC52YWx1ZSA9PT0gJywnICYm
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uUHVu
Y3R1YXRvcikgeworICAgICAgICAgICAgICAgIHBvc3NpYmxlY29tcHJlaGVuc2lvbiA9IGZhbHNl
OyAvLyBubyBsb25nZXIgYWxsb3dlZC4KKyAgICAgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAg
ICAgICAgICBlbGVtZW50cy5wdXNoKG51bGwpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICB0bXAgPSBwYXJzZVNwcmVhZE9yQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKyAg
ICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKHRtcCk7CisgICAgICAgICAgICAgICAgaWYgKHRt
cCAmJiB0bXAudHlwZSA9PT0gU3ludGF4LlNwcmVhZEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtYXRjaCgnXScpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vy
cm9yKHt9LCBNZXNzYWdlcy5FbGVtZW50QWZ0ZXJTcHJlYWRFbGVtZW50KTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIShtYXRjaCgnXScpIHx8IG1h
dGNoS2V5d29yZCgnZm9yJykgfHwgbWF0Y2hLZXl3b3JkKCdpZicpKSkgeworICAgICAgICAgICAg
ICAgICAgICBleHBlY3QoJywnKTsgLy8gdGhpcyBsZXhlcy4KKyAgICAgICAgICAgICAgICAgICAg
cG9zc2libGVjb21wcmVoZW5zaW9uID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZXhwZWN0KCddJyk7CisKKyAgICAgICAgaWYg
KGZpbHRlciAmJiAhYmxvY2tzLmxlbmd0aCkgeworICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwg
TWVzc2FnZXMuQ29tcHJlaGVuc2lvblJlcXVpcmVzQmxvY2spOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGJsb2Nrcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGgg
IT09IDEpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Db21wcmVo
ZW5zaW9uRXJyb3IpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgICAgICB0eXBlOiAgU3ludGF4LkNvbXByZWhlbnNpb25FeHByZXNzaW9uLAorICAgICAg
ICAgICAgICAgIGZpbHRlcjogZmlsdGVyLAorICAgICAgICAgICAgICAgIGJsb2NrczogYmxvY2tz
LAorICAgICAgICAgICAgICAgIGJvZHk6IGVsZW1lbnRzWzBdCisgICAgICAgICAgICB9OworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVBcnJheUV4cHJlc3Npb24oZWxl
bWVudHMpOworICAgIH0KKworICAgIC8vIDExLjEuNSBPYmplY3QgSW5pdGlhbGlzZXIKKworICAg
IGZ1bmN0aW9uIHBhcnNlUHJvcGVydHlGdW5jdGlvbihvcHRpb25zKSB7CisgICAgICAgIHZhciBw
cmV2aW91c1N0cmljdCwgcHJldmlvdXNZaWVsZEFsbG93ZWQsIHBhcmFtcywgYm9keTsKKworICAg
ICAgICBwcmV2aW91c1N0cmljdCA9IHN0cmljdDsKKyAgICAgICAgcHJldmlvdXNZaWVsZEFsbG93
ZWQgPSBzdGF0ZS55aWVsZEFsbG93ZWQ7CisgICAgICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IG9w
dGlvbnMuZ2VuZXJhdG9yOworICAgICAgICBwYXJhbXMgPSBvcHRpb25zLnBhcmFtcyB8fCBbXTsK
KworICAgICAgICBib2R5ID0gcGFyc2VDb25jaXNlQm9keSgpOworICAgICAgICBpZiAob3B0aW9u
cy5uYW1lICYmIHN0cmljdCAmJiBpc1Jlc3RyaWN0ZWRXb3JkKHBhcmFtc1swXS5uYW1lKSkgewor
ICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KG9wdGlvbnMubmFtZSwgTWVzc2FnZXMuU3Ry
aWN0UGFyYW1OYW1lKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RhdGUueWllbGRBbGxvd2Vk
ICYmICFzdGF0ZS55aWVsZEZvdW5kKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNz
YWdlcy5Ob1lpZWxkSW5HZW5lcmF0b3IpOworICAgICAgICB9CisgICAgICAgIHN0cmljdCA9IHBy
ZXZpb3VzU3RyaWN0OworICAgICAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBwcmV2aW91c1lpZWxk
QWxsb3dlZDsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlRnVuY3Rpb25FeHByZXNz
aW9uKG51bGwsIHBhcmFtcywgW10sIGJvZHksIG9wdGlvbnMucmVzdCB8fCBudWxsLCBvcHRpb25z
LmdlbmVyYXRvciwgYm9keS50eXBlICE9PSBTeW50YXguQmxvY2tTdGF0ZW1lbnQpOworICAgIH0K
KworCisgICAgZnVuY3Rpb24gcGFyc2VQcm9wZXJ0eU1ldGhvZEZ1bmN0aW9uKG9wdGlvbnMpIHsK
KyAgICAgICAgdmFyIHByZXZpb3VzU3RyaWN0LCB0bXAsIG1ldGhvZDsKKworICAgICAgICBwcmV2
aW91c1N0cmljdCA9IHN0cmljdDsKKyAgICAgICAgc3RyaWN0ID0gdHJ1ZTsKKworICAgICAgICB0
bXAgPSBwYXJzZVBhcmFtcygpOworCisgICAgICAgIGlmICh0bXAuc3RyaWN0ZWQpIHsKKyAgICAg
ICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0bXAuc3RyaWN0ZWQsIHRtcC5tZXNzYWdlKTsKKyAg
ICAgICAgfQorCisKKyAgICAgICAgbWV0aG9kID0gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKHsKKyAg
ICAgICAgICAgIHBhcmFtczogdG1wLnBhcmFtcywKKyAgICAgICAgICAgIHJlc3Q6IHRtcC5yZXN0
LAorICAgICAgICAgICAgZ2VuZXJhdG9yOiBvcHRpb25zLmdlbmVyYXRvcgorICAgICAgICB9KTsK
KworICAgICAgICBzdHJpY3QgPSBwcmV2aW91c1N0cmljdDsKKworICAgICAgICByZXR1cm4gbWV0
aG9kOworICAgIH0KKworCisgICAgZnVuY3Rpb24gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpIHsK
KyAgICAgICAgdmFyIHRva2VuID0gbGV4KCk7CisKKyAgICAgICAgLy8gTm90ZTogVGhpcyBmdW5j
dGlvbiBpcyBjYWxsZWQgb25seSBmcm9tIHBhcnNlT2JqZWN0UHJvcGVydHkoKSwgd2hlcmUKKyAg
ICAgICAgLy8gRU9GIGFuZCBQdW5jdHVhdG9yIHRva2VucyBhcmUgYWxyZWFkeSBmaWx0ZXJlZCBv
dXQuCisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLlN0cmluZ0xpdGVyYWwgfHwg
dG9rZW4udHlwZSA9PT0gVG9rZW4uTnVtZXJpY0xpdGVyYWwpIHsKKyAgICAgICAgICAgIGlmIChz
dHJpY3QgJiYgdG9rZW4ub2N0YWwpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJh
bnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlTGl0ZXJhbCh0b2tlbik7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlSWRlbnRpZmllcih0b2tlbi52YWx1
ZSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VPYmplY3RQcm9wZXJ0eSgpIHsKKyAgICAg
ICAgdmFyIHRva2VuLCBrZXksIGlkLCB2YWx1ZSwgcGFyYW07CisKKyAgICAgICAgdG9rZW4gPSBs
b29rYWhlYWQ7CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIp
IHsKKworICAgICAgICAgICAgaWQgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7CisKKyAgICAg
ICAgICAgIC8vIFByb3BlcnR5IEFzc2lnbm1lbnQ6IEdldHRlciBhbmQgU2V0dGVyLgorCisgICAg
ICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICdnZXQnICYmICEobWF0Y2goJzonKSB8fCBtYXRj
aCgnKCcpKSkgeworICAgICAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXko
KTsKKyAgICAgICAgICAgICAgICBleHBlY3QoJygnKTsKKyAgICAgICAgICAgICAgICBleHBlY3Qo
JyknKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlUHJvcGVydHkoJ2dl
dCcsIGtleSwgcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKHsgZ2VuZXJhdG9yOiBmYWxzZSB9KSwgZmFs
c2UsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9
PT0gJ3NldCcgJiYgIShtYXRjaCgnOicpIHx8IG1hdGNoKCcoJykpKSB7CisgICAgICAgICAgICAg
ICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOworICAgICAgICAgICAgICAgIGV4cGVj
dCgnKCcpOworICAgICAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworICAgICAgICAgICAg
ICAgIHBhcmFtID0gWyBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpIF07CisgICAgICAgICAgICAg
ICAgZXhwZWN0KCcpJyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVBy
b3BlcnR5KCdzZXQnLCBrZXksIHBhcnNlUHJvcGVydHlGdW5jdGlvbih7IHBhcmFtczogcGFyYW0s
IGdlbmVyYXRvcjogZmFsc2UsIG5hbWU6IHRva2VuIH0pLCBmYWxzZSwgZmFsc2UpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKG1hdGNoKCc6JykpIHsKKyAgICAgICAgICAgICAgICBs
ZXgoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlUHJvcGVydHkoJ2lu
aXQnLCBpZCwgcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpLCBmYWxzZSwgZmFsc2UpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1hdGNoKCcoJykpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlUHJvcGVydHkoJ2luaXQnLCBpZCwgcGFyc2VQcm9wZXJ0
eU1ldGhvZEZ1bmN0aW9uKHsgZ2VuZXJhdG9yOiBmYWxzZSB9KSwgdHJ1ZSwgZmFsc2UpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVByb3BlcnR5KCdp
bml0JywgaWQsIGlkLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRva2Vu
LnR5cGUgPT09IFRva2VuLkVPRiB8fCB0b2tlbi50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yKSB7
CisgICAgICAgICAgICBpZiAoIW1hdGNoKCcqJykpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1Vu
ZXhwZWN0ZWQodG9rZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGV4KCk7CisKKyAg
ICAgICAgICAgIGlkID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOworCisgICAgICAgICAgICBp
ZiAoIW1hdGNoKCcoJykpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlUHJv
cGVydHkoJ2luaXQnLCBpZCwgcGFyc2VQcm9wZXJ0eU1ldGhvZEZ1bmN0aW9uKHsgZ2VuZXJhdG9y
OiB0cnVlIH0pLCB0cnVlLCBmYWxzZSk7CisgICAgICAgIH0KKyAgICAgICAga2V5ID0gcGFyc2VP
YmplY3RQcm9wZXJ0eUtleSgpOworICAgICAgICBpZiAobWF0Y2goJzonKSkgeworICAgICAgICAg
ICAgbGV4KCk7CisgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlUHJvcGVydHkoJ2lu
aXQnLCBrZXksIHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSwgZmFsc2UsIGZhbHNlKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAobWF0Y2goJygnKSkgeworICAgICAgICAgICAgcmV0dXJuIGRl
bGVnYXRlLmNyZWF0ZVByb3BlcnR5KCdpbml0Jywga2V5LCBwYXJzZVByb3BlcnR5TWV0aG9kRnVu
Y3Rpb24oeyBnZW5lcmF0b3I6IGZhbHNlIH0pLCB0cnVlLCBmYWxzZSk7CisgICAgICAgIH0KKyAg
ICAgICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJz
ZU9iamVjdEluaXRpYWxpc2VyKCkgeworICAgICAgICB2YXIgcHJvcGVydGllcyA9IFtdLCBwcm9w
ZXJ0eSwgbmFtZSwga2V5LCBraW5kLCBtYXAgPSB7fSwgdG9TdHJpbmcgPSBTdHJpbmc7CisKKyAg
ICAgICAgZXhwZWN0KCd7Jyk7CisKKyAgICAgICAgd2hpbGUgKCFtYXRjaCgnfScpKSB7CisgICAg
ICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlT2JqZWN0UHJvcGVydHkoKTsKKworICAgICAgICAgICAg
aWYgKHByb3BlcnR5LmtleS50eXBlID09PSBTeW50YXguSWRlbnRpZmllcikgeworICAgICAgICAg
ICAgICAgIG5hbWUgPSBwcm9wZXJ0eS5rZXkubmFtZTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgbmFtZSA9IHRvU3RyaW5nKHByb3BlcnR5LmtleS52YWx1ZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBraW5kID0gKHByb3BlcnR5LmtpbmQgPT09ICdpbml0Jykg
PyBQcm9wZXJ0eUtpbmQuRGF0YSA6IChwcm9wZXJ0eS5raW5kID09PSAnZ2V0JykgPyBQcm9wZXJ0
eUtpbmQuR2V0IDogUHJvcGVydHlLaW5kLlNldDsKKworICAgICAgICAgICAga2V5ID0gJyQnICsg
bmFtZTsKKyAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNh
bGwobWFwLCBrZXkpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1hcFtrZXldID09PSBQcm9wZXJ0
eUtpbmQuRGF0YSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGtpbmQgPT09
IFByb3BlcnR5S2luZC5EYXRhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
VG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdER1cGxpY2F0ZVByb3BlcnR5KTsKKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChraW5kICE9PSBQcm9wZXJ0eUtpbmQuRGF0YSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5BY2Nl
c3NvckRhdGFQcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gUHJvcGVydHlLaW5k
LkRhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwg
TWVzc2FnZXMuQWNjZXNzb3JEYXRhUHJvcGVydHkpOworICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKG1hcFtrZXldICYga2luZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dF
cnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5BY2Nlc3NvckdldFNldCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbWFwW2tleV0gfD0g
a2luZDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbWFwW2tleV0gPSBr
aW5kOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2gocHJvcGVy
dHkpOworCisgICAgICAgICAgICBpZiAoIW1hdGNoKCd9JykpIHsKKyAgICAgICAgICAgICAgICBl
eHBlY3QoJywnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGV4cGVjdCgn
fScpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVPYmplY3RFeHByZXNzaW9uKHBy
b3BlcnRpZXMpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlVGVtcGxhdGVFbGVtZW50KG9w
dGlvbikgeworICAgICAgICB2YXIgdG9rZW4gPSBzY2FuVGVtcGxhdGVFbGVtZW50KG9wdGlvbik7
CisgICAgICAgIGlmIChzdHJpY3QgJiYgdG9rZW4ub2N0YWwpIHsKKyAgICAgICAgICAgIHRocm93
RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVRlbXBsYXRlRWxlbWVudCh7IHJhdzogdG9rZW4u
dmFsdWUucmF3LCBjb29rZWQ6IHRva2VuLnZhbHVlLmNvb2tlZCB9LCB0b2tlbi50YWlsKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZVRlbXBsYXRlTGl0ZXJhbCgpIHsKKyAgICAgICAgdmFy
IHF1YXNpLCBxdWFzaXMsIGV4cHJlc3Npb25zOworCisgICAgICAgIHF1YXNpID0gcGFyc2VUZW1w
bGF0ZUVsZW1lbnQoeyBoZWFkOiB0cnVlIH0pOworICAgICAgICBxdWFzaXMgPSBbIHF1YXNpIF07
CisgICAgICAgIGV4cHJlc3Npb25zID0gW107CisKKyAgICAgICAgd2hpbGUgKCFxdWFzaS50YWls
KSB7CisgICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKHBhcnNlRXhwcmVzc2lvbigpKTsKKyAg
ICAgICAgICAgIHF1YXNpID0gcGFyc2VUZW1wbGF0ZUVsZW1lbnQoeyBoZWFkOiBmYWxzZSB9KTsK
KyAgICAgICAgICAgIHF1YXNpcy5wdXNoKHF1YXNpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBkZWxlZ2F0ZS5jcmVhdGVUZW1wbGF0ZUxpdGVyYWwocXVhc2lzLCBleHByZXNzaW9ucyk7
CisgICAgfQorCisgICAgLy8gMTEuMS42IFRoZSBHcm91cGluZyBPcGVyYXRvcgorCisgICAgZnVu
Y3Rpb24gcGFyc2VHcm91cEV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciBleHByOworCisgICAg
ICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgICsrc3RhdGUucGFyZW50aGVzaXplZENvdW50Owor
CisgICAgICAgIHN0YXRlLmFsbG93QXJyb3dGdW5jdGlvbiA9ICFzdGF0ZS5hbGxvd0Fycm93RnVu
Y3Rpb247CisgICAgICAgIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAgc3RhdGUu
YWxsb3dBcnJvd0Z1bmN0aW9uID0gZmFsc2U7CisKKyAgICAgICAgaWYgKGV4cHIudHlwZSAhPT0g
U3ludGF4LkFycm93RnVuY3Rpb25FeHByZXNzaW9uKSB7CisgICAgICAgICAgICBleHBlY3QoJykn
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBleHByOworICAgIH0KKworCisgICAgLy8g
MTEuMSBQcmltYXJ5IEV4cHJlc3Npb25zCisKKyAgICBmdW5jdGlvbiBwYXJzZVByaW1hcnlFeHBy
ZXNzaW9uKCkgeworICAgICAgICB2YXIgdHlwZSwgdG9rZW47CisKKyAgICAgICAgdG9rZW4gPSBs
b29rYWhlYWQ7CisgICAgICAgIHR5cGUgPSBsb29rYWhlYWQudHlwZTsKKworICAgICAgICBpZiAo
dHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgeworICAgICAgICAgICAgbGV4KCk7CisgICAgICAg
ICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlSWRlbnRpZmllcih0b2tlbi52YWx1ZSk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCB8fCB0eXBl
ID09PSBUb2tlbi5OdW1lcmljTGl0ZXJhbCkgeworICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBs
b29rYWhlYWQub2N0YWwpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQobG9v
a2FoZWFkLCBNZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUxpdGVyYWwobGV4KCkpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHR5cGUgPT09IFRva2VuLktleXdvcmQpIHsKKyAgICAgICAgICAgIGlm
IChtYXRjaEtleXdvcmQoJ3RoaXMnKSkgeworICAgICAgICAgICAgICAgIGxleCgpOworICAgICAg
ICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVUaGlzRXhwcmVzc2lvbigpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdmdW5jdGlvbicpKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2NsYXNzJykpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcGFyc2VDbGFzc0V4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnc3VwZXInKSkgeworICAgICAgICAgICAg
ICAgIGxleCgpOworICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVJZGVudGlm
aWVyKCdzdXBlcicpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5
cGUgPT09IFRva2VuLkJvb2xlYW5MaXRlcmFsKSB7CisgICAgICAgICAgICB0b2tlbiA9IGxleCgp
OworICAgICAgICAgICAgdG9rZW4udmFsdWUgPSAodG9rZW4udmFsdWUgPT09ICd0cnVlJyk7Cisg
ICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlTGl0ZXJhbCh0b2tlbik7CisgICAgICAg
IH0KKworICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4uTnVsbExpdGVyYWwpIHsKKyAgICAgICAg
ICAgIHRva2VuID0gbGV4KCk7CisgICAgICAgICAgICB0b2tlbi52YWx1ZSA9IG51bGw7CisgICAg
ICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlTGl0ZXJhbCh0b2tlbik7CisgICAgICAgIH0K
KworICAgICAgICBpZiAobWF0Y2goJ1snKSkgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNlQXJy
YXlJbml0aWFsaXNlcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1hdGNoKCd7JykpIHsK
KyAgICAgICAgICAgIHJldHVybiBwYXJzZU9iamVjdEluaXRpYWxpc2VyKCk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAobWF0Y2goJygnKSkgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNlR3Jv
dXBFeHByZXNzaW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobWF0Y2goJy8nKSB8fCBt
YXRjaCgnLz0nKSkgeworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUxpdGVyYWwo
c2NhblJlZ0V4cCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlID09PSBUb2tlbi5U
ZW1wbGF0ZSkgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGVtcGxhdGVMaXRlcmFsKCk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobWF0Y2goJzwnKSkgeworICAgICAgICAgICAgcmV0dXJu
IHBhcnNlWEpTRWxlbWVudCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRocm93VW5l
eHBlY3RlZChsZXgoKSk7CisgICAgfQorCisgICAgLy8gMTEuMiBMZWZ0LUhhbmQtU2lkZSBFeHBy
ZXNzaW9ucworCisgICAgZnVuY3Rpb24gcGFyc2VBcmd1bWVudHMoKSB7CisgICAgICAgIHZhciBh
cmdzID0gW10sIGFyZzsKKworICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAgICBpZiAoIW1h
dGNoKCcpJykpIHsKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAg
ICAgICAgICAgIGFyZyA9IHBhcnNlU3ByZWFkT3JBc3NpZ25tZW50RXhwcmVzc2lvbigpOworICAg
ICAgICAgICAgICAgIGFyZ3MucHVzaChhcmcpOworCisgICAgICAgICAgICAgICAgaWYgKG1hdGNo
KCcpJykpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChhcmcudHlwZSA9PT0gU3ludGF4LlNwcmVhZEVsZW1lbnQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuRWxlbWVudEFmdGVyU3ByZWFkRWxlbWVu
dCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZXhwZWN0KCcsJyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBleHBlY3QoJyknKTsKKworICAgICAg
ICByZXR1cm4gYXJnczsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZVNwcmVhZE9yQXNzaWdu
bWVudEV4cHJlc3Npb24oKSB7CisgICAgICAgIGlmIChtYXRjaCgnLi4uJykpIHsKKyAgICAgICAg
ICAgIGxleCgpOworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVNwcmVhZEVsZW1l
bnQocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBh
cnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpIHsKKyAgICAgICAgdmFyIHRva2VuID0gbGV4KCk7CisK
KyAgICAgICAgaWYgKCFpc0lkZW50aWZpZXJOYW1lKHRva2VuKSkgeworICAgICAgICAgICAgdGhy
b3dVbmV4cGVjdGVkKHRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0
ZS5jcmVhdGVJZGVudGlmaWVyKHRva2VuLnZhbHVlKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBw
YXJzZU5vbkNvbXB1dGVkTWVtYmVyKCkgeworICAgICAgICBleHBlY3QoJy4nKTsKKworICAgICAg
ICByZXR1cm4gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gcGFyc2VDb21wdXRlZE1lbWJlcigpIHsKKyAgICAgICAgdmFyIGV4cHI7CisKKyAgICAgICAg
ZXhwZWN0KCdbJyk7CisKKyAgICAgICAgZXhwciA9IHBhcnNlRXhwcmVzc2lvbigpOworCisgICAg
ICAgIGV4cGVjdCgnXScpOworCisgICAgICAgIHJldHVybiBleHByOworICAgIH0KKworICAgIGZ1
bmN0aW9uIHBhcnNlTmV3RXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFyIGNhbGxlZSwgYXJnczsK
KworICAgICAgICBleHBlY3RLZXl3b3JkKCduZXcnKTsKKyAgICAgICAgY2FsbGVlID0gcGFyc2VM
ZWZ0SGFuZFNpZGVFeHByZXNzaW9uKCk7CisgICAgICAgIGFyZ3MgPSBtYXRjaCgnKCcpID8gcGFy
c2VBcmd1bWVudHMoKSA6IFtdOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVOZXdF
eHByZXNzaW9uKGNhbGxlZSwgYXJncyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VMZWZ0
SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKCkgeworICAgICAgICB2YXIgZXhwciwgYXJncywg
cHJvcGVydHk7CisKKyAgICAgICAgZXhwciA9IG1hdGNoS2V5d29yZCgnbmV3JykgPyBwYXJzZU5l
d0V4cHJlc3Npb24oKSA6IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oKTsKKworICAgICAgICB3aGls
ZSAobWF0Y2goJy4nKSB8fCBtYXRjaCgnWycpIHx8IG1hdGNoKCcoJykgfHwgbG9va2FoZWFkLnR5
cGUgPT09IFRva2VuLlRlbXBsYXRlKSB7CisgICAgICAgICAgICBpZiAobWF0Y2goJygnKSkgewor
ICAgICAgICAgICAgICAgIGFyZ3MgPSBwYXJzZUFyZ3VtZW50cygpOworICAgICAgICAgICAgICAg
IGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVDYWxsRXhwcmVzc2lvbihleHByLCBhcmdzKTsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJ1snKSkgeworICAgICAgICAgICAgICAgIGV4cHIgPSBk
ZWxlZ2F0ZS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKCdbJywgZXhwciwgcGFyc2VDb21wdXRlZE1l
bWJlcigpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJy4nKSkgeworICAgICAgICAg
ICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKCcuJywgZXhwciwg
cGFyc2VOb25Db21wdXRlZE1lbWJlcigpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZVRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbihl
eHByLCBwYXJzZVRlbXBsYXRlTGl0ZXJhbCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBleHByOworICAgIH0KKworCisgICAgZnVuY3Rpb24gcGFyc2VMZWZ0
SGFuZFNpZGVFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIgZXhwciwgcHJvcGVydHk7CisKKyAg
ICAgICAgZXhwciA9IG1hdGNoS2V5d29yZCgnbmV3JykgPyBwYXJzZU5ld0V4cHJlc3Npb24oKSA6
IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oKTsKKworICAgICAgICB3aGlsZSAobWF0Y2goJy4nKSB8
fCBtYXRjaCgnWycpIHx8IGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5UZW1wbGF0ZSkgeworICAg
ICAgICAgICAgaWYgKG1hdGNoKCdbJykpIHsKKyAgICAgICAgICAgICAgICBleHByID0gZGVsZWdh
dGUuY3JlYXRlTWVtYmVyRXhwcmVzc2lvbignWycsIGV4cHIsIHBhcnNlQ29tcHV0ZWRNZW1iZXIo
KSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCcuJykpIHsKKyAgICAgICAgICAgICAg
ICBleHByID0gZGVsZWdhdGUuY3JlYXRlTWVtYmVyRXhwcmVzc2lvbignLicsIGV4cHIsIHBhcnNl
Tm9uQ29tcHV0ZWRNZW1iZXIoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24oZXhwciwg
cGFyc2VUZW1wbGF0ZUxpdGVyYWwoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gZXhwcjsKKyAgICB9CisKKyAgICAvLyAxMS4zIFBvc3RmaXggRXhwcmVzc2lv
bnMKKworICAgIGZ1bmN0aW9uIHBhcnNlUG9zdGZpeEV4cHJlc3Npb24oKSB7CisgICAgICAgIHZh
ciBleHByID0gcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKCksCisgICAgICAg
ICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09
IFRva2VuLlB1bmN0dWF0b3IpIHsKKyAgICAgICAgICAgIHJldHVybiBleHByOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKChtYXRjaCgnKysnKSB8fCBtYXRjaCgnLS0nKSkgJiYgIXBlZWtMaW5l
VGVybWluYXRvcigpKSB7CisgICAgICAgICAgICAvLyAxMS4zLjEsIDExLjMuMgorICAgICAgICAg
ICAgaWYgKHN0cmljdCAmJiBleHByLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyICYmIGlzUmVz
dHJpY3RlZFdvcmQoZXhwci5uYW1lKSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xl
cmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0TEhTUG9zdGZpeCk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghaXNMZWZ0SGFuZFNpZGUoZXhwcikpIHsKKyAgICAgICAgICAgICAgICB0
aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgIGV4cHIgPSBk
ZWxlZ2F0ZS5jcmVhdGVQb3N0Zml4RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwcik7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gZXhwcjsKKyAgICB9CisKKyAgICAvLyAxMS40IFVuYXJ5
IE9wZXJhdG9ycworCisgICAgZnVuY3Rpb24gcGFyc2VVbmFyeUV4cHJlc3Npb24oKSB7CisgICAg
ICAgIHZhciB0b2tlbiwgZXhwcjsKKworICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRv
a2VuLlB1bmN0dWF0b3IgJiYgbG9va2FoZWFkLnR5cGUgIT09IFRva2VuLktleXdvcmQpIHsKKyAg
ICAgICAgICAgIHJldHVybiBwYXJzZVBvc3RmaXhFeHByZXNzaW9uKCk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAobWF0Y2goJysrJykgfHwgbWF0Y2goJy0tJykpIHsKKyAgICAgICAgICAgIHRv
a2VuID0gbGV4KCk7CisgICAgICAgICAgICBleHByID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTsK
KyAgICAgICAgICAgIC8vIDExLjQuNCwgMTEuNC41CisgICAgICAgICAgICBpZiAoc3RyaWN0ICYm
IGV4cHIudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIgJiYgaXNSZXN0cmljdGVkV29yZChleHBy
Lm5hbWUpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdl
cy5TdHJpY3RMSFNQcmVmaXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWlz
TGVmdEhhbmRTaWRlKGV4cHIpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVz
c2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVVbmFyeUV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4
cHIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1hdGNoKCcrJykgfHwgbWF0Y2goJy0nKSB8
fCBtYXRjaCgnficpIHx8IG1hdGNoKCchJykpIHsKKyAgICAgICAgICAgIHRva2VuID0gbGV4KCk7
CisgICAgICAgICAgICBleHByID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAg
IHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVVbmFyeUV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZGVsZXRlJykgfHwgbWF0
Y2hLZXl3b3JkKCd2b2lkJykgfHwgbWF0Y2hLZXl3b3JkKCd0eXBlb2YnKSkgeworICAgICAgICAg
ICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lv
bigpOworICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZVVuYXJ5RXhwcmVzc2lvbih0
b2tlbi52YWx1ZSwgZXhwcik7CisgICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGV4cHIub3BlcmF0
b3IgPT09ICdkZWxldGUnICYmIGV4cHIuYXJndW1lbnQudHlwZSA9PT0gU3ludGF4LklkZW50aWZp
ZXIpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0
cmljdERlbGV0ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZXhwcjsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBwYXJzZVBvc3RmaXhFeHByZXNzaW9uKCk7CisgICAg
fQorCisgICAgZnVuY3Rpb24gYmluYXJ5UHJlY2VkZW5jZSh0b2tlbiwgYWxsb3dJbikgeworICAg
ICAgICB2YXIgcHJlYyA9IDA7CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLlB1
bmN0dWF0b3IgJiYgdG9rZW4udHlwZSAhPT0gVG9rZW4uS2V5d29yZCkgeworICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHRva2VuLnZhbHVlKSB7Cisg
ICAgICAgIGNhc2UgJ3x8JzoKKyAgICAgICAgICAgIHByZWMgPSAxOworICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgY2FzZSAnJiYnOgorICAgICAgICAgICAgcHJlYyA9IDI7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlICd8JzoKKyAgICAgICAgICAgIHByZWMgPSAzOwor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnXic6CisgICAgICAgICAgICBwcmVj
ID0gNDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJyYnOgorICAgICAgICAg
ICAgcHJlYyA9IDU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICc9PSc6Cisg
ICAgICAgIGNhc2UgJyE9JzoKKyAgICAgICAgY2FzZSAnPT09JzoKKyAgICAgICAgY2FzZSAnIT09
JzoKKyAgICAgICAgICAgIHByZWMgPSA2OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSAnPCc6CisgICAgICAgIGNhc2UgJz4nOgorICAgICAgICBjYXNlICc8PSc6CisgICAgICAg
IGNhc2UgJz49JzoKKyAgICAgICAgY2FzZSAnaW5zdGFuY2VvZic6CisgICAgICAgICAgICBwcmVj
ID0gNzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJ2luJzoKKyAgICAgICAg
ICAgIHByZWMgPSBhbGxvd0luID8gNyA6IDA7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBjYXNlICc8PCc6CisgICAgICAgIGNhc2UgJz4+JzoKKyAgICAgICAgY2FzZSAnPj4+JzoKKyAg
ICAgICAgICAgIHByZWMgPSA4OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAn
Kyc6CisgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgcHJlYyA9IDk7CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlICcqJzoKKyAgICAgICAgY2FzZSAnLyc6CisgICAgICAg
IGNhc2UgJyUnOgorICAgICAgICAgICAgcHJlYyA9IDExOworICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHByZWM7CisgICAgfQorCisgICAgLy8gMTEuNSBNdWx0aXBsaWNhdGl2ZSBPcGVy
YXRvcnMKKyAgICAvLyAxMS42IEFkZGl0aXZlIE9wZXJhdG9ycworICAgIC8vIDExLjcgQml0d2lz
ZSBTaGlmdCBPcGVyYXRvcnMKKyAgICAvLyAxMS44IFJlbGF0aW9uYWwgT3BlcmF0b3JzCisgICAg
Ly8gMTEuOSBFcXVhbGl0eSBPcGVyYXRvcnMKKyAgICAvLyAxMS4xMCBCaW5hcnkgQml0d2lzZSBP
cGVyYXRvcnMKKyAgICAvLyAxMS4xMSBCaW5hcnkgTG9naWNhbCBPcGVyYXRvcnMKKworICAgIGZ1
bmN0aW9uIHBhcnNlQmluYXJ5RXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFyIGV4cHIsIHRva2Vu
LCBwcmVjLCBwcmV2aW91c0FsbG93SW4sIHN0YWNrLCByaWdodCwgb3BlcmF0b3IsIGxlZnQsIGk7
CisKKyAgICAgICAgcHJldmlvdXNBbGxvd0luID0gc3RhdGUuYWxsb3dJbjsKKyAgICAgICAgc3Rh
dGUuYWxsb3dJbiA9IHRydWU7CisKKyAgICAgICAgZXhwciA9IHBhcnNlVW5hcnlFeHByZXNzaW9u
KCk7CisKKyAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIHByZWMgPSBiaW5hcnlQ
cmVjZWRlbmNlKHRva2VuLCBwcmV2aW91c0FsbG93SW4pOworICAgICAgICBpZiAocHJlYyA9PT0g
MCkgeworICAgICAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgICAgIH0KKyAgICAgICAgdG9rZW4u
cHJlYyA9IHByZWM7CisgICAgICAgIGxleCgpOworCisgICAgICAgIHN0YWNrID0gW2V4cHIsIHRv
a2VuLCBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpXTsKKworICAgICAgICB3aGlsZSAoKHByZWMgPSBi
aW5hcnlQcmVjZWRlbmNlKGxvb2thaGVhZCwgcHJldmlvdXNBbGxvd0luKSkgPiAwKSB7CisKKyAg
ICAgICAgICAgIC8vIFJlZHVjZTogbWFrZSBhIGJpbmFyeSBleHByZXNzaW9uIGZyb20gdGhlIHRo
cmVlIHRvcG1vc3QgZW50cmllcy4KKyAgICAgICAgICAgIHdoaWxlICgoc3RhY2subGVuZ3RoID4g
MikgJiYgKHByZWMgPD0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMl0ucHJlYykpIHsKKyAgICAgICAg
ICAgICAgICByaWdodCA9IHN0YWNrLnBvcCgpOworICAgICAgICAgICAgICAgIG9wZXJhdG9yID0g
c3RhY2sucG9wKCkudmFsdWU7CisgICAgICAgICAgICAgICAgbGVmdCA9IHN0YWNrLnBvcCgpOwor
ICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goZGVsZWdhdGUuY3JlYXRlQmluYXJ5RXhwcmVzc2lv
bihvcGVyYXRvciwgbGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gU2hpZnQuCisgICAgICAgICAgICB0b2tlbiA9IGxleCgpOworICAgICAgICAgICAgdG9rZW4u
cHJlYyA9IHByZWM7CisgICAgICAgICAgICBzdGFjay5wdXNoKHRva2VuKTsKKyAgICAgICAgICAg
IHN0YWNrLnB1c2gocGFyc2VVbmFyeUV4cHJlc3Npb24oKSk7CisgICAgICAgIH0KKworICAgICAg
ICBzdGF0ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luOworCisgICAgICAgIC8vIEZpbmFsIHJl
ZHVjZSB0byBjbGVhbi11cCB0aGUgc3RhY2suCisgICAgICAgIGkgPSBzdGFjay5sZW5ndGggLSAx
OworICAgICAgICBleHByID0gc3RhY2tbaV07CisgICAgICAgIHdoaWxlIChpID4gMSkgeworICAg
ICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZUJpbmFyeUV4cHJlc3Npb24oc3RhY2tbaSAt
IDFdLnZhbHVlLCBzdGFja1tpIC0gMl0sIGV4cHIpOworICAgICAgICAgICAgaSAtPSAyOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBleHByOworICAgIH0KKworCisgICAgLy8gMTEuMTIgQ29u
ZGl0aW9uYWwgT3BlcmF0b3IKKworICAgIGZ1bmN0aW9uIHBhcnNlQ29uZGl0aW9uYWxFeHByZXNz
aW9uKCkgeworICAgICAgICB2YXIgZXhwciwgcHJldmlvdXNBbGxvd0luLCBjb25zZXF1ZW50LCBh
bHRlcm5hdGU7CisKKyAgICAgICAgZXhwciA9IHBhcnNlQmluYXJ5RXhwcmVzc2lvbigpOworCisg
ICAgICAgIGlmIChtYXRjaCgnPycpKSB7CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAg
IHByZXZpb3VzQWxsb3dJbiA9IHN0YXRlLmFsbG93SW47CisgICAgICAgICAgICBzdGF0ZS5hbGxv
d0luID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnNlcXVlbnQgPSBwYXJzZUFzc2lnbm1lbnRFeHBy
ZXNzaW9uKCk7CisgICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luOwor
ICAgICAgICAgICAgZXhwZWN0KCc6Jyk7CisgICAgICAgICAgICBhbHRlcm5hdGUgPSBwYXJzZUFz
c2lnbm1lbnRFeHByZXNzaW9uKCk7CisKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVh
dGVDb25kaXRpb25hbEV4cHJlc3Npb24oZXhwciwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBleHByOworICAgIH0KKworICAgIC8vIDExLjEzIEFz
c2lnbm1lbnQgT3BlcmF0b3JzCisKKyAgICBmdW5jdGlvbiByZWludGVycHJldEFzQXNzaWdubWVu
dEJpbmRpbmdQYXR0ZXJuKGV4cHIpIHsKKyAgICAgICAgdmFyIGksIGxlbiwgcHJvcGVydHksIGVs
ZW1lbnQ7CisKKyAgICAgICAgaWYgKGV4cHIudHlwZSA9PT0gU3ludGF4Lk9iamVjdEV4cHJlc3Np
b24pIHsKKyAgICAgICAgICAgIGV4cHIudHlwZSA9IFN5bnRheC5PYmplY3RQYXR0ZXJuOworICAg
ICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gZXhwci5wcm9wZXJ0aWVzLmxlbmd0aDsgaSA8IGxl
bjsgaSArPSAxKSB7CisgICAgICAgICAgICAgICAgcHJvcGVydHkgPSBleHByLnByb3BlcnRpZXNb
aV07CisgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5LmtpbmQgIT09ICdpbml0JykgeworICAg
ICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3Np
Z25tZW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRB
c0Fzc2lnbm1lbnRCaW5kaW5nUGF0dGVybihwcm9wZXJ0eS52YWx1ZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSBpZiAoZXhwci50eXBlID09PSBTeW50YXguQXJyYXlFeHByZXNzaW9u
KSB7CisgICAgICAgICAgICBleHByLnR5cGUgPSBTeW50YXguQXJyYXlQYXR0ZXJuOworICAgICAg
ICAgICAgZm9yIChpID0gMCwgbGVuID0gZXhwci5lbGVtZW50cy5sZW5ndGg7IGkgPCBsZW47IGkg
Kz0gMSkgeworICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBleHByLmVsZW1lbnRzW2ldOworICAg
ICAgICAgICAgICAgIGlmIChlbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJw
cmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4oZWxlbWVudCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGV4cHIudHlwZSA9PT0gU3ludGF4
LklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFt
ZSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhT
SW5Bc3NpZ25tZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChleHByLnR5
cGUgPT09IFN5bnRheC5TcHJlYWRFbGVtZW50KSB7CisgICAgICAgICAgICByZWludGVycHJldEFz
QXNzaWdubWVudEJpbmRpbmdQYXR0ZXJuKGV4cHIuYXJndW1lbnQpOworICAgICAgICAgICAgaWYg
KGV4cHIuYXJndW1lbnQudHlwZSA9PT0gU3ludGF4Lk9iamVjdFBhdHRlcm4pIHsKKyAgICAgICAg
ICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5PYmplY3RQYXR0ZXJuQXNTcHJlYWQpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGV4cHIudHlw
ZSAhPT0gU3ludGF4Lk1lbWJlckV4cHJlc3Npb24gJiYgZXhwci50eXBlICE9PSBTeW50YXguQ2Fs
bEV4cHJlc3Npb24gJiYgZXhwci50eXBlICE9PSBTeW50YXguTmV3RXhwcmVzc2lvbikgeworICAg
ICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1l
bnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisKKyAgICBmdW5jdGlvbiBy
ZWludGVycHJldEFzRGVzdHJ1Y3R1cmVkUGFyYW1ldGVyKG9wdGlvbnMsIGV4cHIpIHsKKyAgICAg
ICAgdmFyIGksIGxlbiwgcHJvcGVydHksIGVsZW1lbnQ7CisKKyAgICAgICAgaWYgKGV4cHIudHlw
ZSA9PT0gU3ludGF4Lk9iamVjdEV4cHJlc3Npb24pIHsKKyAgICAgICAgICAgIGV4cHIudHlwZSA9
IFN5bnRheC5PYmplY3RQYXR0ZXJuOworICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gZXhw
ci5wcm9wZXJ0aWVzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7CisgICAgICAgICAgICAgICAg
cHJvcGVydHkgPSBleHByLnByb3BlcnRpZXNbaV07CisgICAgICAgICAgICAgICAgaWYgKHByb3Bl
cnR5LmtpbmQgIT09ICdpbml0JykgeworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9
LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Gb3JtYWxzTGlzdCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0QXNEZXN0cnVjdHVyZWRQYXJhbWV0ZXIob3B0aW9u
cywgcHJvcGVydHkudmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGV4
cHIudHlwZSA9PT0gU3ludGF4LkFycmF5RXhwcmVzc2lvbikgeworICAgICAgICAgICAgZXhwci50
eXBlID0gU3ludGF4LkFycmF5UGF0dGVybjsKKyAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9
IGV4cHIuZWxlbWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHsKKyAgICAgICAgICAgICAg
ICBlbGVtZW50ID0gZXhwci5lbGVtZW50c1tpXTsKKyAgICAgICAgICAgICAgICBpZiAoZWxlbWVu
dCkgeworICAgICAgICAgICAgICAgICAgICByZWludGVycHJldEFzRGVzdHJ1Y3R1cmVkUGFyYW1l
dGVyKG9wdGlvbnMsIGVsZW1lbnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIGlmIChleHByLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyKSB7Cisg
ICAgICAgICAgICB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIGV4cHIsIGV4cHIubmFtZSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoZXhwci50eXBlICE9PSBTeW50YXguTWVtYmVy
RXhwcmVzc2lvbikgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklu
dmFsaWRMSFNJbkZvcm1hbHNMaXN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIGZ1bmN0aW9uIHJlaW50ZXJwcmV0QXNDb3ZlckZvcm1hbHNMaXN0KGV4cHJlc3Npb25z
KSB7CisgICAgICAgIHZhciBpLCBsZW4sIHBhcmFtLCBwYXJhbXMsIG9wdGlvbnMsIHJlc3Q7CisK
KyAgICAgICAgcGFyYW1zID0gW107CisgICAgICAgIHJlc3QgPSBudWxsOworICAgICAgICBvcHRp
b25zID0geworICAgICAgICAgICAgcGFyYW1TZXQ6IHt9CisgICAgICAgIH07CisKKyAgICAgICAg
Zm9yIChpID0gMCwgbGVuID0gZXhwcmVzc2lvbnMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHsK
KyAgICAgICAgICAgIHBhcmFtID0gZXhwcmVzc2lvbnNbaV07CisgICAgICAgICAgICBpZiAocGFy
YW0udHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgICAgICBwYXJhbXMu
cHVzaChwYXJhbSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVQYXJhbShvcHRpb25zLCBwYXJh
bSwgcGFyYW0ubmFtZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09IFN5
bnRheC5PYmplY3RFeHByZXNzaW9uIHx8IHBhcmFtLnR5cGUgPT09IFN5bnRheC5BcnJheUV4cHJl
c3Npb24pIHsKKyAgICAgICAgICAgICAgICByZWludGVycHJldEFzRGVzdHJ1Y3R1cmVkUGFyYW1l
dGVyKG9wdGlvbnMsIHBhcmFtKTsKKyAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChwYXJhbSk7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09IFN5bnRheC5TcHJlYWRFbGVt
ZW50KSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0KGkgPT09IGxlbiAtIDEsICJJdCBpcyBndWFy
YW50ZWVkIHRoYXQgU3ByZWFkRWxlbWVudCBpcyBsYXN0IGVsZW1lbnQgYnkgcGFyc2VFeHByZXNz
aW9uIik7CisgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRBc0Rlc3RydWN0dXJlZFBhcmFtZXRl
cihvcHRpb25zLCBwYXJhbS5hcmd1bWVudCk7CisgICAgICAgICAgICAgICAgcmVzdCA9IHBhcmFt
LmFyZ3VtZW50OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChvcHRpb25zLmZp
cnN0UmVzdHJpY3RlZCkgeworICAgICAgICAgICAgdGhyb3dFcnJvcihvcHRpb25zLmZpcnN0UmVz
dHJpY3RlZCwgb3B0aW9ucy5tZXNzYWdlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3B0aW9u
cy5zdHJpY3RlZCkgeworICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KG9wdGlvbnMuc3Ry
aWN0ZWQsIG9wdGlvbnMubWVzc2FnZSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4geyBw
YXJhbXM6IHBhcmFtcywgcmVzdDogcmVzdCB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNl
QXJyb3dGdW5jdGlvbkV4cHJlc3Npb24ob3B0aW9ucykgeworICAgICAgICB2YXIgcHJldmlvdXNT
dHJpY3QsIHByZXZpb3VzWWllbGRBbGxvd2VkLCBib2R5OworCisgICAgICAgIGV4cGVjdCgnPT4n
KTsKKworICAgICAgICBwcmV2aW91c1N0cmljdCA9IHN0cmljdDsKKyAgICAgICAgcHJldmlvdXNZ
aWVsZEFsbG93ZWQgPSBzdGF0ZS55aWVsZEFsbG93ZWQ7CisgICAgICAgIHN0cmljdCA9IHRydWU7
CisgICAgICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IGZhbHNlOworICAgICAgICBib2R5ID0gcGFy
c2VDb25jaXNlQm9keSgpOworICAgICAgICBzdHJpY3QgPSBwcmV2aW91c1N0cmljdDsKKyAgICAg
ICAgc3RhdGUueWllbGRBbGxvd2VkID0gcHJldmlvdXNZaWVsZEFsbG93ZWQ7CisKKyAgICAgICAg
cmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUFycm93RnVuY3Rpb25FeHByZXNzaW9uKG9wdGlvbnMucGFy
YW1zLCBbXSwgYm9keSwgb3B0aW9ucy5yZXN0LCBib2R5LnR5cGUgIT09IFN5bnRheC5CbG9ja1N0
YXRlbWVudCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lv
bigpIHsKKyAgICAgICAgdmFyIGV4cHIsIHRva2VuLCBwYXJhbXMsIG9sZFBhcmVudGhlc2l6ZWRD
b3VudDsKKworICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCd5aWVsZCcpKSB7CisgICAgICAgICAg
ICByZXR1cm4gcGFyc2VZaWVsZEV4cHJlc3Npb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIG9s
ZFBhcmVudGhlc2l6ZWRDb3VudCA9IHN0YXRlLnBhcmVudGhlc2l6ZWRDb3VudDsKKworICAgICAg
ICBpZiAobWF0Y2goJygnKSkgeworICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQyKCk7Cisg
ICAgICAgICAgICBpZiAoKHRva2VuLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IgJiYgdG9rZW4u
dmFsdWUgPT09ICcpJykgfHwgdG9rZW4udmFsdWUgPT09ICcuLi4nKSB7CisgICAgICAgICAgICAg
ICAgcGFyYW1zID0gcGFyc2VQYXJhbXMoKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1hdGNoKCc9
PicpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsZXgoKSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUFycm93RnVuY3Rpb25F
eHByZXNzaW9uKHBhcmFtcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0
b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgZXhwciA9IHBhcnNlQ29uZGl0aW9uYWxFeHByZXNz
aW9uKCk7CisKKyAgICAgICAgaWYgKG1hdGNoKCc9PicpICYmIGV4cHIudHlwZSA9PT0gU3ludGF4
LklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5wYXJlbnRoZXNpemVkQ291bnQg
PT09IG9sZFBhcmVudGhlc2l6ZWRDb3VudCB8fCBzdGF0ZS5wYXJlbnRoZXNpemVkQ291bnQgPT09
IChvbGRQYXJlbnRoZXNpemVkQ291bnQgKyAxKSkgeworICAgICAgICAgICAgICAgIGlmIChpc1Jl
c3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJv
cih7fSwgTWVzc2FnZXMuU3RyaWN0UGFyYW1OYW1lKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24oeyBwYXJhbXM6
IFsgZXhwciBdLCByZXN0OiBudWxsIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKG1hdGNoQXNzaWduKCkpIHsKKyAgICAgICAgICAgIC8vIDExLjEzLjEKKyAgICAg
ICAgICAgIGlmIChzdHJpY3QgJiYgZXhwci50eXBlID09PSBTeW50YXguSWRlbnRpZmllciAmJiBp
c1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
VG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdExIU0Fzc2lnbm1lbnQpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBFUy5uZXh0IGRyYWYgMTEuMTMgUnVudGltZSBTZW1hbnRp
Y3Mgc3RlcCAxCisgICAgICAgICAgICBpZiAobWF0Y2goJz0nKSAmJiAoZXhwci50eXBlID09PSBT
eW50YXguT2JqZWN0RXhwcmVzc2lvbiB8fCBleHByLnR5cGUgPT09IFN5bnRheC5BcnJheUV4cHJl
c3Npb24pKSB7CisgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRBc0Fzc2lnbm1lbnRCaW5kaW5n
UGF0dGVybihleHByKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzTGVmdEhhbmRTaWRlKGV4
cHIpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxpZExI
U0luQXNzaWdubWVudCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGV4cHIgPSBkZWxl
Z2F0ZS5jcmVhdGVBc3NpZ25tZW50RXhwcmVzc2lvbihsZXgoKS52YWx1ZSwgZXhwciwgcGFyc2VB
c3NpZ25tZW50RXhwcmVzc2lvbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBleHBy
OworICAgIH0KKworICAgIC8vIDExLjE0IENvbW1hIE9wZXJhdG9yCisKKyAgICBmdW5jdGlvbiBw
YXJzZUV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciBleHByLCBleHByZXNzaW9ucywgc2VxdWVu
Y2UsIGNvdmVyRm9ybWFsc0xpc3QsIHNwcmVhZEZvdW5kLCB0b2tlbjsKKworICAgICAgICBleHBy
ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworICAgICAgICBleHByZXNzaW9ucyA9IFsg
ZXhwciBdOworCisgICAgICAgIGlmIChtYXRjaCgnLCcpKSB7CisgICAgICAgICAgICB3aGlsZSAo
aW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1hdGNoKCcsJykpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgbGV4KCk7CisgICAgICAgICAgICAgICAgZXhwciA9IHBhcnNlU3ByZWFkT3JBc3NpZ25t
ZW50RXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2goZXhwcik7
CisKKyAgICAgICAgICAgICAgICBpZiAoZXhwci50eXBlID09PSBTeW50YXguU3ByZWFkRWxlbWVu
dCkgeworICAgICAgICAgICAgICAgICAgICBzcHJlYWRGb3VuZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghbWF0Y2goJyknKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhy
b3dFcnJvcih7fSwgTWVzc2FnZXMuRWxlbWVudEFmdGVyU3ByZWFkRWxlbWVudCk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXF1ZW5jZSA9IGRlbGVnYXRlLmNy
ZWF0ZVNlcXVlbmNlRXhwcmVzc2lvbihleHByZXNzaW9ucyk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoc3RhdGUuYWxsb3dBcnJvd0Z1bmN0aW9uICYmIG1hdGNoKCcpJykpIHsKKyAgICAgICAg
ICAgIHRva2VuID0gbG9va2FoZWFkMigpOworICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09
PSAnPT4nKSB7CisgICAgICAgICAgICAgICAgbGV4KCk7CisKKyAgICAgICAgICAgICAgICBzdGF0
ZS5hbGxvd0Fycm93RnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBleHByID0gZXhw
cmVzc2lvbnM7CisgICAgICAgICAgICAgICAgY292ZXJGb3JtYWxzTGlzdCA9IHJlaW50ZXJwcmV0
QXNDb3ZlckZvcm1hbHNMaXN0KGV4cHIpOworICAgICAgICAgICAgICAgIGlmIChjb3ZlckZvcm1h
bHNMaXN0KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUFycm93RnVuY3Rpb25F
eHByZXNzaW9uKGNvdmVyRm9ybWFsc0xpc3QpOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBpZiAoc3ByZWFkRm91bmQpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Io
e30sIE1lc3NhZ2VzLklsbGVnYWxTcHJlYWQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IHNlcXVlbmNlIHx8IGV4cHI7CisgICAgfQorCisgICAgLy8gMTIuMSBCbG9jaworCisgICAgZnVu
Y3Rpb24gcGFyc2VTdGF0ZW1lbnRMaXN0KCkgeworICAgICAgICB2YXIgbGlzdCA9IFtdLAorICAg
ICAgICAgICAgc3RhdGVtZW50OworCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewor
ICAgICAgICAgICAgaWYgKG1hdGNoKCd9JykpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgp
OworICAgICAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZW1lbnQgPT09ICd1bmRlZmluZWQnKSB7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsaXN0LnB1
c2goc3RhdGVtZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBsaXN0OworICAgIH0K
KworICAgIGZ1bmN0aW9uIHBhcnNlQmxvY2soKSB7CisgICAgICAgIHZhciBibG9jazsKKworICAg
ICAgICBleHBlY3QoJ3snKTsKKworICAgICAgICBibG9jayA9IHBhcnNlU3RhdGVtZW50TGlzdCgp
OworCisgICAgICAgIGV4cGVjdCgnfScpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVh
dGVCbG9ja1N0YXRlbWVudChibG9jayk7CisgICAgfQorCisgICAgLy8gMTIuMiBWYXJpYWJsZSBT
dGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCkgeworICAg
ICAgICB2YXIgdG9rZW4gPSBsZXgoKTsKKworICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9r
ZW4uSWRlbnRpZmllcikgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVJZGVudGlmaWVyKHRva2Vu
LnZhbHVlKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24o
a2luZCkgeworICAgICAgICB2YXIgaWQsCisgICAgICAgICAgICBpbml0ID0gbnVsbDsKKyAgICAg
ICAgaWYgKG1hdGNoKCd7JykpIHsKKyAgICAgICAgICAgIGlkID0gcGFyc2VPYmplY3RJbml0aWFs
aXNlcigpOworICAgICAgICAgICAgcmVpbnRlcnByZXRBc0Fzc2lnbm1lbnRCaW5kaW5nUGF0dGVy
bihpZCk7CisgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJ1snKSkgeworICAgICAgICAgICAgaWQg
PSBwYXJzZUFycmF5SW5pdGlhbGlzZXIoKTsKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0QXNBc3Np
Z25tZW50QmluZGluZ1BhdHRlcm4oaWQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aWQgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworICAgICAgICAgICAgLy8gMTIuMi4xCisg
ICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGlzUmVzdHJpY3RlZFdvcmQoaWQubmFtZSkpIHsKKyAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdFZhck5h
bWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGtpbmQgPT09ICdj
b25zdCcpIHsKKyAgICAgICAgICAgIGlmICghbWF0Y2goJz0nKSkgeworICAgICAgICAgICAgICAg
IHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLk5vVW5pbnRpYWxpemVkQ29uc3QpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZXhwZWN0KCc9Jyk7CisgICAgICAgICAgICBpbml0ID0gcGFyc2VB
c3NpZ25tZW50RXhwcmVzc2lvbigpOworICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCc9JykpIHsK
KyAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgaW5pdCA9IHBhcnNlQXNzaWdubWVudEV4
cHJlc3Npb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVW
YXJpYWJsZURlY2xhcmF0b3IoaWQsIGluaXQpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNl
VmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qoa2luZCkgeworICAgICAgICB2YXIgbGlzdCA9IFtdOwor
CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGxpc3QucHVzaChwYXJzZVZhcmlhYmxlRGVjbGFy
YXRpb24oa2luZCkpOworICAgICAgICAgICAgaWYgKCFtYXRjaCgnLCcpKSB7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAg
fSB3aGlsZSAoaW5kZXggPCBsZW5ndGgpOworCisgICAgICAgIHJldHVybiBsaXN0OworICAgIH0K
KworICAgIGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBk
ZWNsYXJhdGlvbnM7CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgndmFyJyk7CisKKyAgICAgICAg
ZGVjbGFyYXRpb25zID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpOworCisgICAgICAg
IGNvbnN1bWVTZW1pY29sb24oKTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlVmFy
aWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsICd2YXInKTsKKyAgICB9CisKKyAgICAvLyBr
aW5kIG1heSBiZSBgY29uc3RgIG9yIGBsZXRgCisgICAgLy8gQm90aCBhcmUgZXhwZXJpbWVudGFs
IGFuZCBub3QgaW4gdGhlIHNwZWNpZmljYXRpb24geWV0LgorICAgIC8vIHNlZSBodHRwOi8vd2lr
aS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJtb255OmNvbnN0CisgICAgLy8gYW5kIGh0
dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6bGV0CisgICAgZnVu
Y3Rpb24gcGFyc2VDb25zdExldERlY2xhcmF0aW9uKGtpbmQpIHsKKyAgICAgICAgdmFyIGRlY2xh
cmF0aW9uczsKKworICAgICAgICBleHBlY3RLZXl3b3JkKGtpbmQpOworCisgICAgICAgIGRlY2xh
cmF0aW9ucyA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qoa2luZCk7CisKKyAgICAgICAg
Y29uc3VtZVNlbWljb2xvbigpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVWYXJp
YWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywga2luZCk7CisgICAgfQorCisgICAgLy8gaHR0
cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTptb2R1bGVzCisKKyAg
ICBmdW5jdGlvbiBwYXJzZVBhdGgoKSB7CisgICAgICAgIHZhciBib2R5ID0gW107CisKKyAgICAg
ICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGJvZHkucHVzaChwYXJzZVZhcmlhYmxlSWRl
bnRpZmllcigpKTsKKyAgICAgICAgICAgIGlmICghbWF0Y2goJy4nKSkgeworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGV4KCk7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlUGF0aChib2R5KTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBwYXJzZUdsb2IoKSB7CisgICAgICAgIGV4cGVjdCgnKicpOworICAgICAgICBy
ZXR1cm4gZGVsZWdhdGUuY3JlYXRlR2xvYigpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNl
TW9kdWxlRGVjbGFyYXRpb24oKSB7CisgICAgICAgIHZhciBpZCwgdG9rZW4sIGZyb20gPSBudWxs
OworCisgICAgICAgIGxleCgpOworCisgICAgICAgIGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZp
ZXIoKTsKKworICAgICAgICBpZiAobWF0Y2goJ3snKSkgeworICAgICAgICAgICAgcmV0dXJuIGRl
bGVnYXRlLmNyZWF0ZU1vZHVsZURlY2xhcmF0aW9uKGlkLCBmcm9tLCBwYXJzZU1vZHVsZUJsb2Nr
KCkpOworICAgICAgICB9CisKKyAgICAgICAgZXhwZWN0KCc9Jyk7CisKKyAgICAgICAgdG9rZW4g
PSBsb29rYWhlYWQ7CisgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5TdHJpbmdMaXRl
cmFsKSB7CisgICAgICAgICAgICBmcm9tID0gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgZnJvbSA9IHBhcnNlUGF0aCgpOworICAgICAgICB9
CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0
ZS5jcmVhdGVNb2R1bGVEZWNsYXJhdGlvbihpZCwgZnJvbSwgbnVsbCk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gcGFyc2VFeHBvcnRTcGVjaWZpZXJTZXRQcm9wZXJ0eSgpIHsKKyAgICAgICAgdmFy
IGlkLCBmcm9tID0gbnVsbDsKKworICAgICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVy
KCk7CisKKyAgICAgICAgaWYgKG1hdGNoKCc6JykpIHsKKyAgICAgICAgICAgIGxleCgpOworICAg
ICAgICAgICAgZnJvbSA9IHBhcnNlUGF0aCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IGRlbGVnYXRlLmNyZWF0ZUV4cG9ydFNwZWNpZmllcihpZCwgZnJvbSk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gcGFyc2VFeHBvcnRTcGVjaWZpZXIoKSB7CisgICAgICAgIHZhciBzcGVjaWZpZXJz
LCBpZCwgZnJvbTsKKworICAgICAgICBpZiAobWF0Y2goJ3snKSkgeworICAgICAgICAgICAgbGV4
KCk7CisgICAgICAgICAgICBzcGVjaWZpZXJzID0gW107CisKKyAgICAgICAgICAgIGRvIHsKKyAg
ICAgICAgICAgICAgICBzcGVjaWZpZXJzLnB1c2gocGFyc2VFeHBvcnRTcGVjaWZpZXJTZXRQcm9w
ZXJ0eSgpKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKG1hdGNoKCcsJykgJiYgbGV4KCkpOworCisg
ICAgICAgICAgICBleHBlY3QoJ30nKTsKKworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNy
ZWF0ZUV4cG9ydFNwZWNpZmllclNldChzcGVjaWZpZXJzKTsKKyAgICAgICAgfQorCisgICAgICAg
IGZyb20gPSBudWxsOworCisgICAgICAgIGlmIChtYXRjaCgnKicpKSB7CisgICAgICAgICAgICBp
ZCA9IHBhcnNlR2xvYigpOworICAgICAgICAgICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQo
J2Zyb20nKSkgeworICAgICAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgICAgIGZyb20g
PSBwYXJzZVBhdGgoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gZGVsZWdhdGUuY3JlYXRlRXhwb3J0U3BlY2lmaWVyKGlkLCBmcm9tKTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBwYXJzZUV4cG9ydERlY2xhcmF0aW9uKCkgeworICAgICAgICB2YXIgdG9r
ZW4sIHNwZWNpZmllcnM7CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnZXhwb3J0Jyk7CisKKyAg
ICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRv
a2VuLktleXdvcmQgfHwgKHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIgJiYgdG9rZW4u
dmFsdWUgPT09ICdtb2R1bGUnKSkgeworICAgICAgICAgICAgc3dpdGNoICh0b2tlbi52YWx1ZSkg
eworICAgICAgICAgICAgY2FzZSAnZnVuY3Rpb24nOgorICAgICAgICAgICAgICAgIHJldHVybiBk
ZWxlZ2F0ZS5jcmVhdGVFeHBvcnREZWNsYXJhdGlvbihwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24o
KSwgbnVsbCk7CisgICAgICAgICAgICBjYXNlICdtb2R1bGUnOgorICAgICAgICAgICAgICAgIHJl
dHVybiBkZWxlZ2F0ZS5jcmVhdGVFeHBvcnREZWNsYXJhdGlvbihwYXJzZU1vZHVsZURlY2xhcmF0
aW9uKCksIG51bGwpOworICAgICAgICAgICAgY2FzZSAnbGV0JzoKKyAgICAgICAgICAgIGNhc2Ug
J2NvbnN0JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlRXhwb3J0RGVj
bGFyYXRpb24ocGFyc2VDb25zdExldERlY2xhcmF0aW9uKHRva2VuLnZhbHVlKSwgbnVsbCk7Cisg
ICAgICAgICAgICBjYXNlICd2YXInOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5j
cmVhdGVFeHBvcnREZWNsYXJhdGlvbihwYXJzZVN0YXRlbWVudCgpLCBudWxsKTsKKyAgICAgICAg
ICAgIGNhc2UgJ2NsYXNzJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRl
RXhwb3J0RGVjbGFyYXRpb24ocGFyc2VDbGFzc0RlY2xhcmF0aW9uKCksIG51bGwpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTsKKyAgICAgICAgfQor
CisgICAgICAgIHNwZWNpZmllcnMgPSBbIHBhcnNlRXhwb3J0U3BlY2lmaWVyKCkgXTsKKyAgICAg
ICAgaWYgKG1hdGNoKCcsJykpIHsKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkg
eworICAgICAgICAgICAgICAgIGlmICghbWF0Y2goJywnKSkgeworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGV4KCk7CisgICAg
ICAgICAgICAgICAgc3BlY2lmaWVycy5wdXNoKHBhcnNlRXhwb3J0U3BlY2lmaWVyKCkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisg
ICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVFeHBvcnREZWNsYXJhdGlvbihudWxsLCBzcGVj
aWZpZXJzKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUltcG9ydERlY2xhcmF0aW9uKCkg
eworICAgICAgICB2YXIgc3BlY2lmaWVycywgZnJvbTsKKworICAgICAgICBleHBlY3RLZXl3b3Jk
KCdpbXBvcnQnKTsKKworICAgICAgICBpZiAobWF0Y2goJyonKSkgeworICAgICAgICAgICAgc3Bl
Y2lmaWVycyA9IFtwYXJzZUdsb2IoKV07CisgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJ3snKSkg
eworICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICBzcGVjaWZpZXJzID0gW107CisKKyAg
ICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBzcGVjaWZpZXJzLnB1c2gocGFyc2VJbXBv
cnRTcGVjaWZpZXIoKSk7CisgICAgICAgICAgICB9IHdoaWxlIChtYXRjaCgnLCcpICYmIGxleCgp
KTsKKworICAgICAgICAgICAgZXhwZWN0KCd9Jyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBzcGVjaWZpZXJzID0gW3BhcnNlVmFyaWFibGVJZGVudGlmaWVyKCldOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKCFtYXRjaENvbnRleHR1YWxLZXl3b3JkKCdmcm9tJykpIHsKKyAgICAg
ICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLk5vRnJvbUFmdGVySW1wb3J0KTsKKyAgICAg
ICAgfQorCisgICAgICAgIGxleCgpOworCisgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0g
VG9rZW4uU3RyaW5nTGl0ZXJhbCkgeworICAgICAgICAgICAgZnJvbSA9IHBhcnNlUHJpbWFyeUV4
cHJlc3Npb24oKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZyb20gPSBwYXJzZVBh
dGgoKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKKworICAgICAg
ICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlSW1wb3J0RGVjbGFyYXRpb24oc3BlY2lmaWVycywgZnJv
bSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VJbXBvcnRTcGVjaWZpZXIoKSB7CisgICAg
ICAgIHZhciBpZCwgZnJvbTsKKworICAgICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVy
KCk7CisgICAgICAgIGZyb20gPSBudWxsOworCisgICAgICAgIGlmIChtYXRjaCgnOicpKSB7Cisg
ICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIGZyb20gPSBwYXJzZVBhdGgoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVJbXBvcnRTcGVjaWZpZXIoaWQs
IGZyb20pOworICAgIH0KKworICAgIC8vIDEyLjMgRW1wdHkgU3RhdGVtZW50CisKKyAgICBmdW5j
dGlvbiBwYXJzZUVtcHR5U3RhdGVtZW50KCkgeworICAgICAgICBleHBlY3QoJzsnKTsKKyAgICAg
ICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUVtcHR5U3RhdGVtZW50KCk7CisgICAgfQorCisgICAg
Ly8gMTIuNCBFeHByZXNzaW9uIFN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VFeHByZXNz
aW9uU3RhdGVtZW50KCkgeworICAgICAgICB2YXIgZXhwciA9IHBhcnNlRXhwcmVzc2lvbigpOwor
ICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVh
dGVFeHByZXNzaW9uU3RhdGVtZW50KGV4cHIpOworICAgIH0KKworICAgIC8vIDEyLjUgSWYgc3Rh
dGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZUlmU3RhdGVtZW50KCkgeworICAgICAgICB2YXIg
dGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlOworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ2lm
Jyk7CisKKyAgICAgICAgZXhwZWN0KCcoJyk7CisKKyAgICAgICAgdGVzdCA9IHBhcnNlRXhwcmVz
c2lvbigpOworCisgICAgICAgIGV4cGVjdCgnKScpOworCisgICAgICAgIGNvbnNlcXVlbnQgPSBw
YXJzZVN0YXRlbWVudCgpOworCisgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2Vsc2UnKSkgewor
ICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICBhbHRlcm5hdGUgPSBwYXJzZVN0YXRlbWVu
dCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWx0ZXJuYXRlID0gbnVsbDsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVJZlN0YXRlbWVudCh0ZXN0
LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpOworICAgIH0KKworICAgIC8vIDEyLjYgSXRlcmF0aW9u
IFN0YXRlbWVudHMKKworICAgIGZ1bmN0aW9uIHBhcnNlRG9XaGlsZVN0YXRlbWVudCgpIHsKKyAg
ICAgICAgdmFyIGJvZHksIHRlc3QsIG9sZEluSXRlcmF0aW9uOworCisgICAgICAgIGV4cGVjdEtl
eXdvcmQoJ2RvJyk7CisKKyAgICAgICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlv
bjsKKyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSB0cnVlOworCisgICAgICAgIGJvZHkgPSBw
YXJzZVN0YXRlbWVudCgpOworCisgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xkSW5JdGVy
YXRpb247CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnd2hpbGUnKTsKKworICAgICAgICBleHBl
Y3QoJygnKTsKKworICAgICAgICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7CisKKyAgICAgICAg
ZXhwZWN0KCcpJyk7CisKKyAgICAgICAgaWYgKG1hdGNoKCc7JykpIHsKKyAgICAgICAgICAgIGxl
eCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZURvV2hpbGVT
dGF0ZW1lbnQoYm9keSwgdGVzdCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VXaGlsZVN0
YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIHRlc3QsIGJvZHksIG9sZEluSXRlcmF0aW9uOworCisg
ICAgICAgIGV4cGVjdEtleXdvcmQoJ3doaWxlJyk7CisKKyAgICAgICAgZXhwZWN0KCcoJyk7CisK
KyAgICAgICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpOworCisgICAgICAgIGV4cGVjdCgnKScp
OworCisgICAgICAgIG9sZEluSXRlcmF0aW9uID0gc3RhdGUuaW5JdGVyYXRpb247CisgICAgICAg
IHN0YXRlLmluSXRlcmF0aW9uID0gdHJ1ZTsKKworICAgICAgICBib2R5ID0gcGFyc2VTdGF0ZW1l
bnQoKTsKKworICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IG9sZEluSXRlcmF0aW9uOworCisg
ICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVXaGlsZVN0YXRlbWVudCh0ZXN0LCBib2R5KTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUZvclZhcmlhYmxlRGVjbGFyYXRpb24oKSB7Cisg
ICAgICAgIHZhciB0b2tlbiA9IGxleCgpLAorICAgICAgICAgICAgZGVjbGFyYXRpb25zID0gcGFy
c2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5j
cmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywgdG9rZW4udmFsdWUpOworICAg
IH0KKworICAgIGZ1bmN0aW9uIHBhcnNlRm9yU3RhdGVtZW50KG9wdHMpIHsKKyAgICAgICAgdmFy
IGluaXQsIHRlc3QsIHVwZGF0ZSwgbGVmdCwgcmlnaHQsIGJvZHksIG9wZXJhdG9yLCBvbGRJbkl0
ZXJhdGlvbjsKKyAgICAgICAgaW5pdCA9IHRlc3QgPSB1cGRhdGUgPSBudWxsOworICAgICAgICBl
eHBlY3RLZXl3b3JkKCdmb3InKTsKKworICAgICAgICAvLyBodHRwOi8vd2lraS5lY21hc2NyaXB0
Lm9yZy9kb2t1LnBocD9pZD1wcm9wb3NhbHM6aXRlcmF0b3JzX2FuZF9nZW5lcmF0b3JzJnM9ZWFj
aAorICAgICAgICBpZiAobWF0Y2hDb250ZXh0dWFsS2V5d29yZCgiZWFjaCIpKSB7CisgICAgICAg
ICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5FYWNoTm90QWxsb3dlZCk7CisgICAgICAgIH0K
KworICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAgICBpZiAobWF0Y2goJzsnKSkgeworICAg
ICAgICAgICAgbGV4KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobWF0Y2hL
ZXl3b3JkKCd2YXInKSB8fCBtYXRjaEtleXdvcmQoJ2xldCcpIHx8IG1hdGNoS2V5d29yZCgnY29u
c3QnKSkgeworICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICBpbml0ID0gcGFyc2VGb3JWYXJpYWJsZURlY2xhcmF0aW9uKCk7CisgICAgICAgICAg
ICAgICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBpZiAoaW5pdC5k
ZWNsYXJhdGlvbnMubGVuZ3RoID09PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXRj
aEtleXdvcmQoJ2luJykgfHwgbWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnb2YnKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBsb29rYWhlYWQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoISgob3BlcmF0b3IudmFsdWUgPT09ICdpbicgfHwgaW5pdC5raW5kICE9PSAn
dmFyJykgJiYgaW5pdC5kZWNsYXJhdGlvbnNbMF0uaW5pdCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5p
dDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodCA9IHBhcnNlRXhwcmVzc2lvbigp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgaW5pdCA9IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICAg
ICAgICAgIHN0YXRlLmFsbG93SW4gPSB0cnVlOworCisgICAgICAgICAgICAgICAgaWYgKG1hdGNo
Q29udGV4dHVhbEtleXdvcmQoJ29mJykpIHsKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3Ig
PSBsZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7CisgICAgICAgICAgICAg
ICAgICAgIHJpZ2h0ID0gcGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgICAgICAgICAgICAgIGlu
aXQgPSBudWxsOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2hLZXl3b3JkKCdpbicp
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIExlZnRIYW5kU2lkZUV4cHJlc3Npb24KKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFpc0Fzc2lnbmFibGVMZWZ0SGFuZFNpZGUoaW5pdCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJ
bkZvckluKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBvcGVy
YXRvciA9IGxleCgpOworICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDsKKyAgICAgICAg
ICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgICAgICAg
ICAgaW5pdCA9IG51bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAodHlwZW9mIGxlZnQgPT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAg
ICAgZXhwZWN0KCc7Jyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAo
dHlwZW9mIGxlZnQgPT09ICd1bmRlZmluZWQnKSB7CisKKyAgICAgICAgICAgIGlmICghbWF0Y2go
JzsnKSkgeworICAgICAgICAgICAgICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGV4cGVjdCgnOycpOworCisgICAgICAgICAgICBpZiAoIW1h
dGNoKCcpJykpIHsKKyAgICAgICAgICAgICAgICB1cGRhdGUgPSBwYXJzZUV4cHJlc3Npb24oKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGV4cGVjdCgnKScpOworCisgICAg
ICAgIG9sZEluSXRlcmF0aW9uID0gc3RhdGUuaW5JdGVyYXRpb247CisgICAgICAgIHN0YXRlLmlu
SXRlcmF0aW9uID0gdHJ1ZTsKKworICAgICAgICBpZiAoIShvcHRzICE9PSB1bmRlZmluZWQgJiYg
b3B0cy5pZ25vcmVfYm9keSkpIHsKKyAgICAgICAgICAgIGJvZHkgPSBwYXJzZVN0YXRlbWVudCgp
OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlv
bjsKKworICAgICAgICBpZiAodHlwZW9mIGxlZnQgPT09ICd1bmRlZmluZWQnKSB7CisgICAgICAg
ICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlRm9yU3RhdGVtZW50KGluaXQsIHRlc3QsIHVwZGF0
ZSwgYm9keSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAob3BlcmF0b3IudmFsdWUgPT09ICdp
bicpIHsKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVGb3JJblN0YXRlbWVudChs
ZWZ0LCByaWdodCwgYm9keSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNy
ZWF0ZUZvck9mU3RhdGVtZW50KGxlZnQsIHJpZ2h0LCBib2R5KTsKKyAgICB9CisKKyAgICAvLyAx
Mi43IFRoZSBjb250aW51ZSBzdGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNlQ29udGludWVT
dGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBsYWJlbCA9IG51bGwsIGtleTsKKworICAgICAgICBl
eHBlY3RLZXl3b3JkKCdjb250aW51ZScpOworCisgICAgICAgIC8vIE9wdGltaXplIHRoZSBtb3N0
IGNvbW1vbiBmb3JtOiAnY29udGludWU7Jy4KKyAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0
KGluZGV4KSA9PT0gNTkpIHsKKyAgICAgICAgICAgIGxleCgpOworCisgICAgICAgICAgICBpZiAo
IXN0YXRlLmluSXRlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVz
c2FnZXMuSWxsZWdhbENvbnRpbnVlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0
dXJuIGRlbGVnYXRlLmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KG51bGwpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHBlZWtMaW5lVGVybWluYXRvcigpKSB7CisgICAgICAgICAgICBpZiAoIXN0
YXRlLmluSXRlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2Fn
ZXMuSWxsZWdhbENvbnRpbnVlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJu
IGRlbGVnYXRlLmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KG51bGwpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7CisgICAgICAg
ICAgICBsYWJlbCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisKKyAgICAgICAgICAgIGtl
eSA9ICckJyArIGxhYmVsLm5hbWU7CisgICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUu
aGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS5sYWJlbFNldCwga2V5KSkgeworICAgICAgICAgICAg
ICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVua25vd25MYWJlbCwgbGFiZWwubmFtZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisK
KyAgICAgICAgaWYgKGxhYmVsID09PSBudWxsICYmICFzdGF0ZS5pbkl0ZXJhdGlvbikgeworICAg
ICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbENvbnRpbnVlKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVDb250aW51ZVN0YXRlbWVudChs
YWJlbCk7CisgICAgfQorCisgICAgLy8gMTIuOCBUaGUgYnJlYWsgc3RhdGVtZW50CisKKyAgICBm
dW5jdGlvbiBwYXJzZUJyZWFrU3RhdGVtZW50KCkgeworICAgICAgICB2YXIgbGFiZWwgPSBudWxs
LCBrZXk7CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnYnJlYWsnKTsKKworICAgICAgICAvLyBD
YXRjaCB0aGUgdmVyeSBjb21tb24gY2FzZSBmaXJzdDogaW1tZWRpYXRlbHkgYSBzZW1pY29sb24g
KGNoYXIgIzU5KS4KKyAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gNTkp
IHsKKyAgICAgICAgICAgIGxleCgpOworCisgICAgICAgICAgICBpZiAoIShzdGF0ZS5pbkl0ZXJh
dGlvbiB8fCBzdGF0ZS5pblN3aXRjaCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9
LCBNZXNzYWdlcy5JbGxlZ2FsQnJlYWspOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBy
ZXR1cm4gZGVsZWdhdGUuY3JlYXRlQnJlYWtTdGF0ZW1lbnQobnVsbCk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAocGVla0xpbmVUZXJtaW5hdG9yKCkpIHsKKyAgICAgICAgICAgIGlmICghKHN0
YXRlLmluSXRlcmF0aW9uIHx8IHN0YXRlLmluU3dpdGNoKSkgeworICAgICAgICAgICAgICAgIHRo
cm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxCcmVhayk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVCcmVha1N0YXRlbWVudChudWxsKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmll
cikgeworICAgICAgICAgICAgbGFiZWwgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworCisg
ICAgICAgICAgICBrZXkgPSAnJCcgKyBsYWJlbC5uYW1lOworICAgICAgICAgICAgaWYgKCFPYmpl
Y3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhdGUubGFiZWxTZXQsIGtleSkpIHsK
KyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Vbmtub3duTGFiZWwsIGxh
YmVsLm5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3VtZVNl
bWljb2xvbigpOworCisgICAgICAgIGlmIChsYWJlbCA9PT0gbnVsbCAmJiAhKHN0YXRlLmluSXRl
cmF0aW9uIHx8IHN0YXRlLmluU3dpdGNoKSkgeworICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwg
TWVzc2FnZXMuSWxsZWdhbEJyZWFrKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxl
Z2F0ZS5jcmVhdGVCcmVha1N0YXRlbWVudChsYWJlbCk7CisgICAgfQorCisgICAgLy8gMTIuOSBU
aGUgcmV0dXJuIHN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VSZXR1cm5TdGF0ZW1lbnQo
KSB7CisgICAgICAgIHZhciBhcmd1bWVudCA9IG51bGw7CisKKyAgICAgICAgZXhwZWN0S2V5d29y
ZCgncmV0dXJuJyk7CisKKyAgICAgICAgaWYgKCFzdGF0ZS5pbkZ1bmN0aW9uQm9keSkgeworICAg
ICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbGxlZ2FsUmV0dXJuKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vICdyZXR1cm4nIGZvbGxvd2VkIGJ5IGEgc3BhY2UgYW5k
IGFuIGlkZW50aWZpZXIgaXMgdmVyeSBjb21tb24uCisgICAgICAgIGlmIChzb3VyY2UuY2hhckNv
ZGVBdChpbmRleCkgPT09IDMyKSB7CisgICAgICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQo
c291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSkpIHsKKyAgICAgICAgICAgICAgICBhcmd1bWVu
dCA9IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAgIGNvbnN1bWVTZW1pY29sb24o
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlUmV0dXJuU3RhdGVtZW50
KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChwZWVr
TGluZVRlcm1pbmF0b3IoKSkgeworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVJl
dHVyblN0YXRlbWVudChudWxsKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbWF0Y2goJzsn
KSkgeworICAgICAgICAgICAgaWYgKCFtYXRjaCgnfScpICYmIGxvb2thaGVhZC50eXBlICE9PSBU
b2tlbi5FT0YpIHsKKyAgICAgICAgICAgICAgICBhcmd1bWVudCA9IHBhcnNlRXhwcmVzc2lvbigp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigp
OworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVSZXR1cm5TdGF0ZW1lbnQoYXJndW1l
bnQpOworICAgIH0KKworICAgIC8vIDEyLjEwIFRoZSB3aXRoIHN0YXRlbWVudAorCisgICAgZnVu
Y3Rpb24gcGFyc2VXaXRoU3RhdGVtZW50KCkgeworICAgICAgICB2YXIgb2JqZWN0LCBib2R5Owor
CisgICAgICAgIGlmIChzdHJpY3QpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7
fSwgTWVzc2FnZXMuU3RyaWN0TW9kZVdpdGgpOworICAgICAgICB9CisKKyAgICAgICAgZXhwZWN0
S2V5d29yZCgnd2l0aCcpOworCisgICAgICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIG9iamVj
dCA9IHBhcnNlRXhwcmVzc2lvbigpOworCisgICAgICAgIGV4cGVjdCgnKScpOworCisgICAgICAg
IGJvZHkgPSBwYXJzZVN0YXRlbWVudCgpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVh
dGVXaXRoU3RhdGVtZW50KG9iamVjdCwgYm9keSk7CisgICAgfQorCisgICAgLy8gMTIuMTAgVGhl
IHN3aXRoIHN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VTd2l0Y2hDYXNlKCkgeworICAg
ICAgICB2YXIgdGVzdCwKKyAgICAgICAgICAgIGNvbnNlcXVlbnQgPSBbXSwKKyAgICAgICAgICAg
IHNvdXJjZUVsZW1lbnQ7CisKKyAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZGVmYXVsdCcpKSB7
CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIHRlc3QgPSBudWxsOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgZXhwZWN0S2V5d29yZCgnY2FzZScpOworICAgICAgICAgICAg
dGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICB9CisgICAgICAgIGV4cGVjdCgnOicp
OworCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgaWYgKG1h
dGNoKCd9JykgfHwgbWF0Y2hLZXl3b3JkKCdkZWZhdWx0JykgfHwgbWF0Y2hLZXl3b3JkKCdjYXNl
JykpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHNvdXJjZUVsZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmICh0
eXBlb2Ygc291cmNlRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnNlcXVlbnQucHVzaChzb3VyY2VF
bGVtZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVTd2l0
Y2hDYXNlKHRlc3QsIGNvbnNlcXVlbnQpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlU3dp
dGNoU3RhdGVtZW50KCkgeworICAgICAgICB2YXIgZGlzY3JpbWluYW50LCBjYXNlcywgY2xhdXNl
LCBvbGRJblN3aXRjaCwgZGVmYXVsdEZvdW5kOworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ3N3
aXRjaCcpOworCisgICAgICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIGRpc2NyaW1pbmFudCA9
IHBhcnNlRXhwcmVzc2lvbigpOworCisgICAgICAgIGV4cGVjdCgnKScpOworCisgICAgICAgIGV4
cGVjdCgneycpOworCisgICAgICAgIGlmIChtYXRjaCgnfScpKSB7CisgICAgICAgICAgICBsZXgo
KTsKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVTd2l0Y2hTdGF0ZW1lbnQoZGlz
Y3JpbWluYW50KTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2VzID0gW107CisKKyAgICAgICAg
b2xkSW5Td2l0Y2ggPSBzdGF0ZS5pblN3aXRjaDsKKyAgICAgICAgc3RhdGUuaW5Td2l0Y2ggPSB0
cnVlOworICAgICAgICBkZWZhdWx0Rm91bmQgPSBmYWxzZTsKKworICAgICAgICB3aGlsZSAoaW5k
ZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChtYXRjaCgnfScpKSB7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjbGF1c2UgPSBwYXJzZVN3
aXRjaENhc2UoKTsKKyAgICAgICAgICAgIGlmIChjbGF1c2UudGVzdCA9PT0gbnVsbCkgeworICAg
ICAgICAgICAgICAgIGlmIChkZWZhdWx0Rm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhy
b3dFcnJvcih7fSwgTWVzc2FnZXMuTXVsdGlwbGVEZWZhdWx0c0luU3dpdGNoKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVmYXVsdEZvdW5kID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGNhc2VzLnB1c2goY2xhdXNlKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHN0YXRlLmluU3dpdGNoID0gb2xkSW5Td2l0Y2g7CisKKyAgICAgICAgZXhwZWN0KCd9Jyk7
CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVN3aXRjaFN0YXRlbWVudChkaXNjcmlt
aW5hbnQsIGNhc2VzKTsKKyAgICB9CisKKyAgICAvLyAxMi4xMyBUaGUgdGhyb3cgc3RhdGVtZW50
CisKKyAgICBmdW5jdGlvbiBwYXJzZVRocm93U3RhdGVtZW50KCkgeworICAgICAgICB2YXIgYXJn
dW1lbnQ7CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgndGhyb3cnKTsKKworICAgICAgICBpZiAo
cGVla0xpbmVUZXJtaW5hdG9yKCkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3Nh
Z2VzLk5ld2xpbmVBZnRlclRocm93KTsKKyAgICAgICAgfQorCisgICAgICAgIGFyZ3VtZW50ID0g
cGFyc2VFeHByZXNzaW9uKCk7CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAg
ICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVUaHJvd1N0YXRlbWVudChhcmd1bWVudCk7CisgICAg
fQorCisgICAgLy8gMTIuMTQgVGhlIHRyeSBzdGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNl
Q2F0Y2hDbGF1c2UoKSB7CisgICAgICAgIHZhciBwYXJhbSwgYm9keTsKKworICAgICAgICBleHBl
Y3RLZXl3b3JkKCdjYXRjaCcpOworCisgICAgICAgIGV4cGVjdCgnKCcpOworICAgICAgICBpZiAo
bWF0Y2goJyknKSkgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7Cisg
ICAgICAgIH0KKworICAgICAgICBwYXJhbSA9IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICAv
LyAxMi4xNC4xCisgICAgICAgIGlmIChzdHJpY3QgJiYgcGFyYW0udHlwZSA9PT0gU3ludGF4Lklk
ZW50aWZpZXIgJiYgaXNSZXN0cmljdGVkV29yZChwYXJhbS5uYW1lKSkgeworICAgICAgICAgICAg
dGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RDYXRjaFZhcmlhYmxlKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGV4cGVjdCgnKScpOworICAgICAgICBib2R5ID0gcGFyc2VCbG9j
aygpOworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlQ2F0Y2hDbGF1c2UocGFyYW0sIGJv
ZHkpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlVHJ5U3RhdGVtZW50KCkgeworICAgICAg
ICB2YXIgYmxvY2ssIGhhbmRsZXJzID0gW10sIGZpbmFsaXplciA9IG51bGw7CisKKyAgICAgICAg
ZXhwZWN0S2V5d29yZCgndHJ5Jyk7CisKKyAgICAgICAgYmxvY2sgPSBwYXJzZUJsb2NrKCk7CisK
KyAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnY2F0Y2gnKSkgeworICAgICAgICAgICAgaGFuZGxl
cnMucHVzaChwYXJzZUNhdGNoQ2xhdXNlKCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1h
dGNoS2V5d29yZCgnZmluYWxseScpKSB7CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAg
IGZpbmFsaXplciA9IHBhcnNlQmxvY2soKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChoYW5k
bGVycy5sZW5ndGggPT09IDAgJiYgIWZpbmFsaXplcikgeworICAgICAgICAgICAgdGhyb3dFcnJv
cih7fSwgTWVzc2FnZXMuTm9DYXRjaE9yRmluYWxseSk7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gZGVsZWdhdGUuY3JlYXRlVHJ5U3RhdGVtZW50KGJsb2NrLCBbXSwgaGFuZGxlcnMsIGZp
bmFsaXplcik7CisgICAgfQorCisgICAgLy8gMTIuMTUgVGhlIGRlYnVnZ2VyIHN0YXRlbWVudAor
CisgICAgZnVuY3Rpb24gcGFyc2VEZWJ1Z2dlclN0YXRlbWVudCgpIHsKKyAgICAgICAgZXhwZWN0
S2V5d29yZCgnZGVidWdnZXInKTsKKworICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisKKyAg
ICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZURlYnVnZ2VyU3RhdGVtZW50KCk7CisgICAgfQor
CisgICAgLy8gMTIgU3RhdGVtZW50cworCisgICAgZnVuY3Rpb24gcGFyc2VTdGF0ZW1lbnQoKSB7
CisgICAgICAgIHZhciB0eXBlID0gbG9va2FoZWFkLnR5cGUsCisgICAgICAgICAgICBleHByLAor
ICAgICAgICAgICAgbGFiZWxlZEJvZHksCisgICAgICAgICAgICBrZXk7CisKKyAgICAgICAgaWYg
KHR5cGUgPT09IFRva2VuLkVPRikgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2th
aGVhZCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRv
cikgeworICAgICAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFsdWUpIHsKKyAgICAgICAgICAg
IGNhc2UgJzsnOgorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUVtcHR5U3RhdGVtZW50KCk7
CisgICAgICAgICAgICBjYXNlICd7JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VCbG9j
aygpOworICAgICAgICAgICAgY2FzZSAnKCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNl
RXhwcmVzc2lvblN0YXRlbWVudCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBl
ID09PSBUb2tlbi5LZXl3b3JkKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGxvb2thaGVhZC52YWx1
ZSkgeworICAgICAgICAgICAgY2FzZSAnYnJlYWsnOgorICAgICAgICAgICAgICAgIHJldHVybiBw
YXJzZUJyZWFrU3RhdGVtZW50KCk7CisgICAgICAgICAgICBjYXNlICdjb250aW51ZSc6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ29udGludWVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAg
IGNhc2UgJ2RlYnVnZ2VyJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VEZWJ1Z2dlclN0
YXRlbWVudCgpOworICAgICAgICAgICAgY2FzZSAnZG8nOgorICAgICAgICAgICAgICAgIHJldHVy
biBwYXJzZURvV2hpbGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIGNhc2UgJ2Zvcic6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlRm9yU3RhdGVtZW50KCk7CisgICAgICAgICAgICBjYXNl
ICdmdW5jdGlvbic6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25EZWNsYXJh
dGlvbigpOworICAgICAgICAgICAgY2FzZSAnY2xhc3MnOgorICAgICAgICAgICAgICAgIHJldHVy
biBwYXJzZUNsYXNzRGVjbGFyYXRpb24oKTsKKyAgICAgICAgICAgIGNhc2UgJ2lmJzoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcGFyc2VJZlN0YXRlbWVudCgpOworICAgICAgICAgICAgY2FzZSAn
cmV0dXJuJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VSZXR1cm5TdGF0ZW1lbnQoKTsK
KyAgICAgICAgICAgIGNhc2UgJ3N3aXRjaCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNl
U3dpdGNoU3RhdGVtZW50KCk7CisgICAgICAgICAgICBjYXNlICd0aHJvdyc6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlVGhyb3dTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIGNhc2UgJ3Ry
eSc6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlVHJ5U3RhdGVtZW50KCk7CisgICAgICAg
ICAgICBjYXNlICd2YXInOgorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVZhcmlhYmxlU3Rh
dGVtZW50KCk7CisgICAgICAgICAgICBjYXNlICd3aGlsZSc6CisgICAgICAgICAgICAgICAgcmV0
dXJuIHBhcnNlV2hpbGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIGNhc2UgJ3dpdGgnOgorICAg
ICAgICAgICAgICAgIHJldHVybiBwYXJzZVdpdGhTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7CisKKyAgICAgICAgLy8gMTIuMTIg
TGFiZWxsZWQgU3RhdGVtZW50cworICAgICAgICBpZiAoKGV4cHIudHlwZSA9PT0gU3ludGF4Lklk
ZW50aWZpZXIpICYmIG1hdGNoKCc6JykpIHsKKyAgICAgICAgICAgIGxleCgpOworCisgICAgICAg
ICAgICBrZXkgPSAnJCcgKyBleHByLm5hbWU7CisgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3Rv
dHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlLmxhYmVsU2V0LCBrZXkpKSB7CisgICAgICAg
ICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuUmVkZWNsYXJhdGlvbiwgJ0xhYmVsJywg
ZXhwci5uYW1lKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RhdGUubGFiZWxTZXRb
a2V5XSA9IHRydWU7CisgICAgICAgICAgICBsYWJlbGVkQm9keSA9IHBhcnNlU3RhdGVtZW50KCk7
CisgICAgICAgICAgICBkZWxldGUgc3RhdGUubGFiZWxTZXRba2V5XTsKKyAgICAgICAgICAgIHJl
dHVybiBkZWxlZ2F0ZS5jcmVhdGVMYWJlbGVkU3RhdGVtZW50KGV4cHIsIGxhYmVsZWRCb2R5KTsK
KyAgICAgICAgfQorCisgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKKworICAgICAgICByZXR1
cm4gZGVsZWdhdGUuY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudChleHByKTsKKyAgICB9CisKKyAg
ICAvLyAxMyBGdW5jdGlvbiBEZWZpbml0aW9uCisKKyAgICBmdW5jdGlvbiBwYXJzZUNvbmNpc2VC
b2R5KCkgeworICAgICAgICBpZiAobWF0Y2goJ3snKSkgeworICAgICAgICAgICAgcmV0dXJuIHBh
cnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBw
YXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VG
dW5jdGlvblNvdXJjZUVsZW1lbnRzKCkgeworICAgICAgICB2YXIgc291cmNlRWxlbWVudCwgc291
cmNlRWxlbWVudHMgPSBbXSwgdG9rZW4sIGRpcmVjdGl2ZSwgZmlyc3RSZXN0cmljdGVkLAorICAg
ICAgICAgICAgb2xkTGFiZWxTZXQsIG9sZEluSXRlcmF0aW9uLCBvbGRJblN3aXRjaCwgb2xkSW5G
dW5jdGlvbkJvZHksIG9sZFBhcmVudGhlc2l6ZWRDb3VudDsKKworICAgICAgICBleHBlY3QoJ3sn
KTsKKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChs
b29rYWhlYWQudHlwZSAhPT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkgeworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisK
KyAgICAgICAgICAgIHNvdXJjZUVsZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTsKKyAgICAg
ICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2goc291cmNlRWxlbWVudCk7CisgICAgICAgICAgICBp
ZiAoc291cmNlRWxlbWVudC5leHByZXNzaW9uLnR5cGUgIT09IFN5bnRheC5MaXRlcmFsKSB7Cisg
ICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBub3QgZGlyZWN0aXZlCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkaXJlY3RpdmUgPSBzb3VyY2Uuc2xp
Y2UodG9rZW4ucmFuZ2VbMF0gKyAxLCB0b2tlbi5yYW5nZVsxXSAtIDEpOworICAgICAgICAgICAg
aWYgKGRpcmVjdGl2ZSA9PT0gJ3VzZSBzdHJpY3QnKSB7CisgICAgICAgICAgICAgICAgc3RyaWN0
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3RSZXN0cmljdGVkKSB7CisgICAgICAg
ICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChmaXJzdFJlc3RyaWN0ZWQsIE1lc3NhZ2Vz
LlN0cmljdE9jdGFsTGl0ZXJhbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoIWZpcnN0UmVzdHJpY3RlZCAmJiB0b2tlbi5vY3Rh
bCkgeworICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBvbGRMYWJl
bFNldCA9IHN0YXRlLmxhYmVsU2V0OworICAgICAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmlu
SXRlcmF0aW9uOworICAgICAgICBvbGRJblN3aXRjaCA9IHN0YXRlLmluU3dpdGNoOworICAgICAg
ICBvbGRJbkZ1bmN0aW9uQm9keSA9IHN0YXRlLmluRnVuY3Rpb25Cb2R5OworICAgICAgICBvbGRQ
YXJlbnRoZXNpemVkQ291bnQgPSBzdGF0ZS5wYXJlbnRoZXNpemVkQ291bnQ7CisKKyAgICAgICAg
c3RhdGUubGFiZWxTZXQgPSB7fTsKKyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSBmYWxzZTsK
KyAgICAgICAgc3RhdGUuaW5Td2l0Y2ggPSBmYWxzZTsKKyAgICAgICAgc3RhdGUuaW5GdW5jdGlv
bkJvZHkgPSB0cnVlOworICAgICAgICBzdGF0ZS5wYXJlbnRoZXNpemVkQ291bnQgPSAwOworCisg
ICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgaWYgKG1hdGNoKCd9
JykpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHNvdXJjZUVsZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmICh0
eXBlb2Ygc291cmNlRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2goc291
cmNlRWxlbWVudCk7CisgICAgICAgIH0KKworICAgICAgICBleHBlY3QoJ30nKTsKKworICAgICAg
ICBzdGF0ZS5sYWJlbFNldCA9IG9sZExhYmVsU2V0OworICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlv
biA9IG9sZEluSXRlcmF0aW9uOworICAgICAgICBzdGF0ZS5pblN3aXRjaCA9IG9sZEluU3dpdGNo
OworICAgICAgICBzdGF0ZS5pbkZ1bmN0aW9uQm9keSA9IG9sZEluRnVuY3Rpb25Cb2R5OworICAg
ICAgICBzdGF0ZS5wYXJlbnRoZXNpemVkQ291bnQgPSBvbGRQYXJlbnRoZXNpemVkQ291bnQ7CisK
KyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUJsb2NrU3RhdGVtZW50KHNvdXJjZUVsZW1l
bnRzKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFt
LCBuYW1lKSB7CisgICAgICAgIHZhciBrZXkgPSAnJCcgKyBuYW1lOworICAgICAgICBpZiAoc3Ry
aWN0KSB7CisgICAgICAgICAgICBpZiAoaXNSZXN0cmljdGVkV29yZChuYW1lKSkgeworICAgICAg
ICAgICAgICAgIG9wdGlvbnMuc3RyaWN0ZWQgPSBwYXJhbTsKKyAgICAgICAgICAgICAgICBvcHRp
b25zLm1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlv
bnMucGFyYW1TZXQsIGtleSkpIHsKKyAgICAgICAgICAgICAgICBvcHRpb25zLnN0cmljdGVkID0g
cGFyYW07CisgICAgICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0
UGFyYW1EdXBlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmZp
cnN0UmVzdHJpY3RlZCkgeworICAgICAgICAgICAgaWYgKGlzUmVzdHJpY3RlZFdvcmQobmFtZSkp
IHsKKyAgICAgICAgICAgICAgICBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCA9IHBhcmFtOworICAg
ICAgICAgICAgICAgIG9wdGlvbnMubWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFBhcmFtTmFtZTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKG5hbWUpKSB7
CisgICAgICAgICAgICAgICAgb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQgPSBwYXJhbTsKKyAgICAg
ICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQ7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku
Y2FsbChvcHRpb25zLnBhcmFtU2V0LCBrZXkpKSB7CisgICAgICAgICAgICAgICAgb3B0aW9ucy5m
aXJzdFJlc3RyaWN0ZWQgPSBwYXJhbTsKKyAgICAgICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2Ug
PSBNZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgb3B0aW9ucy5wYXJhbVNldFtrZXldID0gdHJ1ZTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBwYXJzZVBhcmFtKG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIHRva2VuLCByZXN0LCBwYXJhbTsK
KworICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgaWYgKHRva2VuLnZhbHVlID09
PSAnLi4uJykgeworICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgIHJlc3Qg
PSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1hdGNoKCdbJykpIHsKKyAgICAgICAg
ICAgIHBhcmFtID0gcGFyc2VBcnJheUluaXRpYWxpc2VyKCk7CisgICAgICAgICAgICByZWludGVy
cHJldEFzRGVzdHJ1Y3R1cmVkUGFyYW1ldGVyKG9wdGlvbnMsIHBhcmFtKTsKKyAgICAgICAgfSBl
bHNlIGlmIChtYXRjaCgneycpKSB7CisgICAgICAgICAgICBpZiAocmVzdCkgeworICAgICAgICAg
ICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLk9iamVjdFBhdHRlcm5Bc1Jlc3RQYXJhbWV0
ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFyYW0gPSBwYXJzZU9iamVjdEluaXRp
YWxpc2VyKCk7CisgICAgICAgICAgICByZWludGVycHJldEFzRGVzdHJ1Y3R1cmVkUGFyYW1ldGVy
KG9wdGlvbnMsIHBhcmFtKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBhcmFtID0g
cGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKyAgICAgICAgICAgIHZhbGlkYXRlUGFyYW0ob3B0
aW9ucywgdG9rZW4sIHRva2VuLnZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXN0
KSB7CisgICAgICAgICAgICBpZiAoIW1hdGNoKCcpJykpIHsKKyAgICAgICAgICAgICAgICB0aHJv
d0Vycm9yKHt9LCBNZXNzYWdlcy5QYXJhbWV0ZXJBZnRlclJlc3RQYXJhbWV0ZXIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgb3B0aW9ucy5yZXN0ID0gcGFyYW07CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBvcHRpb25zLnBhcmFtcy5wdXNoKHBh
cmFtKTsKKyAgICAgICAgcmV0dXJuICFtYXRjaCgnKScpOworICAgIH0KKworICAgIGZ1bmN0aW9u
IHBhcnNlUGFyYW1zKGZpcnN0UmVzdHJpY3RlZCkgeworICAgICAgICB2YXIgb3B0aW9uczsKKwor
ICAgICAgICBvcHRpb25zID0geworICAgICAgICAgICAgcGFyYW1zOiBbXSwKKyAgICAgICAgICAg
IHJlc3Q6IG51bGwsCisgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IGZpcnN0UmVzdHJpY3Rl
ZAorICAgICAgICB9OworCisgICAgICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIGlmICghbWF0
Y2goJyknKSkgeworICAgICAgICAgICAgb3B0aW9ucy5wYXJhbVNldCA9IHt9OworICAgICAgICAg
ICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgaWYgKCFwYXJzZVBh
cmFtKG9wdGlvbnMpKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBleHBlY3QoJywnKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGV4cGVjdCgnKScpOworCisgICAgICAgIHJldHVybiBvcHRpb25zOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpIHsKKyAgICAg
ICAgdmFyIGlkLCBib2R5LCB0b2tlbiwgdG1wLCBmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UsIHBy
ZXZpb3VzU3RyaWN0LCBwcmV2aW91c1lpZWxkQWxsb3dlZCwgZ2VuZXJhdG9yLCBleHByZXNzaW9u
OworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ2Z1bmN0aW9uJyk7CisKKyAgICAgICAgZ2VuZXJh
dG9yID0gZmFsc2U7CisgICAgICAgIGlmIChtYXRjaCgnKicpKSB7CisgICAgICAgICAgICBsZXgo
KTsKKyAgICAgICAgICAgIGdlbmVyYXRvciA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICB0
b2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVy
KCk7CisgICAgICAgIGlmIChzdHJpY3QpIHsKKyAgICAgICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRX
b3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0
b2tlbiwgTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVl
KSkgeworICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAg
ICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWU7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKGlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAg
ICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICBt
ZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgdG1wID0gcGFyc2VQYXJhbXMoZmlyc3RSZXN0cmljdGVkKTsKKyAg
ICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG1wLmZpcnN0UmVzdHJpY3RlZDsKKyAgICAgICAgaWYg
KHRtcC5tZXNzYWdlKSB7CisgICAgICAgICAgICBtZXNzYWdlID0gdG1wLm1lc3NhZ2U7CisgICAg
ICAgIH0KKworICAgICAgICBwcmV2aW91c1N0cmljdCA9IHN0cmljdDsKKyAgICAgICAgcHJldmlv
dXNZaWVsZEFsbG93ZWQgPSBzdGF0ZS55aWVsZEFsbG93ZWQ7CisgICAgICAgIHN0YXRlLnlpZWxk
QWxsb3dlZCA9IGdlbmVyYXRvcjsKKworICAgICAgICAvLyBoZXJlIHdlIHJlZG8gc29tZSB3b3Jr
IGluIG9yZGVyIHRvIHNldCAnZXhwcmVzc2lvbicKKyAgICAgICAgZXhwcmVzc2lvbiA9ICFtYXRj
aCgneycpOworICAgICAgICBib2R5ID0gcGFyc2VDb25jaXNlQm9keSgpOworCisgICAgICAgIGlm
IChzdHJpY3QgJiYgZmlyc3RSZXN0cmljdGVkKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKGZp
cnN0UmVzdHJpY3RlZCwgbWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0cmljdCAm
JiB0bXAuc3RyaWN0ZWQpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0bXAuc3Ry
aWN0ZWQsIG1lc3NhZ2UpOworICAgICAgICB9CisgICAgICAgIGlmIChzdGF0ZS55aWVsZEFsbG93
ZWQgJiYgIXN0YXRlLnlpZWxkRm91bmQpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1l
c3NhZ2VzLk5vWWllbGRJbkdlbmVyYXRvcik7CisgICAgICAgIH0KKyAgICAgICAgc3RyaWN0ID0g
cHJldmlvdXNTdHJpY3Q7CisgICAgICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IHByZXZpb3VzWWll
bGRBbGxvd2VkOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVGdW5jdGlvbkRlY2xh
cmF0aW9uKGlkLCB0bXAucGFyYW1zLCBbXSwgYm9keSwgdG1wLnJlc3QsIGdlbmVyYXRvciwgZXhw
cmVzc2lvbik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VGdW5jdGlvbkV4cHJlc3Npb24o
KSB7CisgICAgICAgIHZhciB0b2tlbiwgaWQgPSBudWxsLCBmaXJzdFJlc3RyaWN0ZWQsIG1lc3Nh
Z2UsIHRtcCwgYm9keSwgcHJldmlvdXNTdHJpY3QsIHByZXZpb3VzWWllbGRBbGxvd2VkLCBnZW5l
cmF0b3IsIGV4cHJlc3Npb247CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnZnVuY3Rpb24nKTsK
KworICAgICAgICBnZW5lcmF0b3IgPSBmYWxzZTsKKworICAgICAgICBpZiAobWF0Y2goJyonKSkg
eworICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICBnZW5lcmF0b3IgPSB0cnVlOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCFtYXRjaCgnKCcpKSB7CisgICAgICAgICAgICB0b2tlbiA9
IGxvb2thaGVhZDsKKyAgICAgICAgICAgIGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsK
KyAgICAgICAgICAgIGlmIChzdHJpY3QpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNSZXN0cmlj
dGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRv
bGVyYW50KHRva2VuLCBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWUpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGlzUmVzdHJp
Y3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJp
Y3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3Ry
aWN0RnVuY3Rpb25OYW1lOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3RNb2Rl
UmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICBmaXJzdFJl
c3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2Vz
LlN0cmljdFJlc2VydmVkV29yZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICB0bXAgPSBwYXJzZVBhcmFtcyhmaXJzdFJlc3RyaWN0ZWQpOwor
ICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0bXAuZmlyc3RSZXN0cmljdGVkOworICAgICAgICBp
ZiAodG1wLm1lc3NhZ2UpIHsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSB0bXAubWVzc2FnZTsKKyAg
ICAgICAgfQorCisgICAgICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0OworICAgICAgICBwcmV2
aW91c1lpZWxkQWxsb3dlZCA9IHN0YXRlLnlpZWxkQWxsb3dlZDsKKyAgICAgICAgc3RhdGUueWll
bGRBbGxvd2VkID0gZ2VuZXJhdG9yOworCisgICAgICAgIC8vIGhlcmUgd2UgcmVkbyBzb21lIHdv
cmsgaW4gb3JkZXIgdG8gc2V0ICdleHByZXNzaW9uJworICAgICAgICBleHByZXNzaW9uID0gIW1h
dGNoKCd7Jyk7CisgICAgICAgIGJvZHkgPSBwYXJzZUNvbmNpc2VCb2R5KCk7CisKKyAgICAgICAg
aWYgKHN0cmljdCAmJiBmaXJzdFJlc3RyaWN0ZWQpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Io
Zmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RyaWN0
ICYmIHRtcC5zdHJpY3RlZCkgeworICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRtcC5z
dHJpY3RlZCwgbWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXRlLnlpZWxkQWxs
b3dlZCAmJiAhc3RhdGUueWllbGRGb3VuZCkgeworICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwg
TWVzc2FnZXMuTm9ZaWVsZEluR2VuZXJhdG9yKTsKKyAgICAgICAgfQorICAgICAgICBzdHJpY3Qg
PSBwcmV2aW91c1N0cmljdDsKKyAgICAgICAgc3RhdGUueWllbGRBbGxvd2VkID0gcHJldmlvdXNZ
aWVsZEFsbG93ZWQ7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUZ1bmN0aW9uRXhw
cmVzc2lvbihpZCwgdG1wLnBhcmFtcywgW10sIGJvZHksIHRtcC5yZXN0LCBnZW5lcmF0b3IsIGV4
cHJlc3Npb24pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlWWllbGRFeHByZXNzaW9uKCkg
eworICAgICAgICB2YXIgZGVsZWdhdGVGbGFnLCBleHByLCBwcmV2aW91c1lpZWxkQWxsb3dlZDsK
KworICAgICAgICBleHBlY3RLZXl3b3JkKCd5aWVsZCcpOworCisgICAgICAgIGlmICghc3RhdGUu
eWllbGRBbGxvd2VkKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3Nh
Z2VzLklsbGVnYWxZaWVsZCk7CisgICAgICAgIH0KKworICAgICAgICBkZWxlZ2F0ZUZsYWcgPSBm
YWxzZTsKKyAgICAgICAgaWYgKG1hdGNoKCcqJykpIHsKKyAgICAgICAgICAgIGxleCgpOworICAg
ICAgICAgICAgZGVsZWdhdGVGbGFnID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEl0
IGlzIGEgU3ludGF4IEVycm9yIGlmIGFueSBBc3NpZ25tZW50RXhwcmVzc2lvbiBDb250YWlucyBZ
aWVsZEV4cHJlc3Npb24uCisgICAgICAgIHByZXZpb3VzWWllbGRBbGxvd2VkID0gc3RhdGUueWll
bGRBbGxvd2VkOworICAgICAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBmYWxzZTsKKyAgICAgICAg
ZXhwciA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKyAgICAgICAgc3RhdGUueWllbGRB
bGxvd2VkID0gcHJldmlvdXNZaWVsZEFsbG93ZWQ7CisgICAgICAgIHN0YXRlLnlpZWxkRm91bmQg
PSB0cnVlOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVZaWVsZEV4cHJlc3Npb24o
ZXhwciwgZGVsZWdhdGVGbGFnKTsKKyAgICB9CisKKyAgICAvLyAxNCBDbGFzc2VzCisKKyAgICBm
dW5jdGlvbiBwYXJzZU1ldGhvZERlZmluaXRpb24oZXhpc3RpbmdQcm9wTmFtZXMpIHsKKyAgICAg
ICAgdmFyIHRva2VuLCBrZXksIHBhcmFtLCBwcm9wVHlwZSwgaXNWYWxpZER1cGxpY2F0ZVByb3Ag
PSBmYWxzZTsKKworICAgICAgICBpZiAobG9va2FoZWFkLnZhbHVlID09PSAnc3RhdGljJykgewor
ICAgICAgICAgICAgcHJvcFR5cGUgPSBDbGFzc1Byb3BlcnR5VHlwZS5zdGF0aWM7CisgICAgICAg
ICAgICBsZXgoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByb3BUeXBlID0gQ2xh
c3NQcm9wZXJ0eVR5cGUucHJvdG90eXBlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1hdGNo
KCcqJykpIHsKKyAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRl
LmNyZWF0ZU1ldGhvZERlZmluaXRpb24oCisgICAgICAgICAgICAgICAgcHJvcFR5cGUsCisgICAg
ICAgICAgICAgICAgJycsCisgICAgICAgICAgICAgICAgcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgp
LAorICAgICAgICAgICAgICAgIHBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbih7IGdlbmVyYXRv
cjogdHJ1ZSB9KQorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorCisgICAgICAgIHRva2VuID0g
bG9va2FoZWFkOworICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7CisKKyAg
ICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnZ2V0JyAmJiAhbWF0Y2goJygnKSkgeworICAgICAg
ICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOworCisgICAgICAgICAgICAvLyBJ
dCBpcyBhIHN5bnRheCBlcnJvciBpZiBhbnkgb3RoZXIgcHJvcGVydGllcyBoYXZlIGEgbmFtZQor
ICAgICAgICAgICAgLy8gZHVwbGljYXRpbmcgdGhpcyBvbmUgdW5sZXNzIHRoZXkgYXJlIGEgc2V0
dGVyCisgICAgICAgICAgICBpZiAoZXhpc3RpbmdQcm9wTmFtZXNbcHJvcFR5cGVdLmhhc093blBy
b3BlcnR5KGtleS5uYW1lKSkgeworICAgICAgICAgICAgICAgIGlzVmFsaWREdXBsaWNhdGVQcm9w
ID0KKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXNuJ3QgYWxyZWFkeSBhIGdldHRlciBm
b3IgdGhpcyBwcm9wCisgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nUHJvcE5hbWVzW3Byb3BU
eXBlXVtrZXkubmFtZV0uZ2V0ID09PSB1bmRlZmluZWQKKyAgICAgICAgICAgICAgICAgICAgLy8g
VGhlcmUgaXNuJ3QgYWxyZWFkeSBhIGRhdGEgcHJvcCBieSB0aGlzIG5hbWUKKyAgICAgICAgICAg
ICAgICAgICAgJiYgZXhpc3RpbmdQcm9wTmFtZXNbcHJvcFR5cGVdW2tleS5uYW1lXS5kYXRhID09
PSB1bmRlZmluZWQKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIG9ubHkgZXhpc3RpbmcgcHJv
cCBieSB0aGlzIG5hbWUgaXMgYSBzZXR0ZXIKKyAgICAgICAgICAgICAgICAgICAgJiYgZXhpc3Rp
bmdQcm9wTmFtZXNbcHJvcFR5cGVdW2tleS5uYW1lXS5zZXQgIT09IHVuZGVmaW5lZDsKKyAgICAg
ICAgICAgICAgICBpZiAoIWlzVmFsaWREdXBsaWNhdGVQcm9wKSB7CisgICAgICAgICAgICAgICAg
ICAgIHRocm93RXJyb3Ioa2V5LCBNZXNzYWdlcy5JbGxlZ2FsRHVwbGljYXRlQ2xhc3NQcm9wZXJ0
eSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBleGlzdGluZ1Byb3BOYW1lc1twcm9wVHlwZV1ba2V5Lm5hbWVdID0ge307CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBleGlzdGluZ1Byb3BOYW1lc1twcm9wVHlwZV1ba2V5Lm5hbWVd
LmdldCA9IHRydWU7CisKKyAgICAgICAgICAgIGV4cGVjdCgnKCcpOworICAgICAgICAgICAgZXhw
ZWN0KCcpJyk7CisgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlTWV0aG9kRGVmaW5p
dGlvbigKKyAgICAgICAgICAgICAgICBwcm9wVHlwZSwKKyAgICAgICAgICAgICAgICAnZ2V0JywK
KyAgICAgICAgICAgICAgICBrZXksCisgICAgICAgICAgICAgICAgcGFyc2VQcm9wZXJ0eUZ1bmN0
aW9uKHsgZ2VuZXJhdG9yOiBmYWxzZSB9KQorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAodG9rZW4udmFsdWUgPT09ICdzZXQnICYmICFtYXRjaCgnKCcpKSB7CisgICAgICAg
ICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7CisKKyAgICAgICAgICAgIC8vIEl0
IGlzIGEgc3ludGF4IGVycm9yIGlmIGFueSBvdGhlciBwcm9wZXJ0aWVzIGhhdmUgYSBuYW1lCisg
ICAgICAgICAgICAvLyBkdXBsaWNhdGluZyB0aGlzIG9uZSB1bmxlc3MgdGhleSBhcmUgYSBnZXR0
ZXIKKyAgICAgICAgICAgIGlmIChleGlzdGluZ1Byb3BOYW1lc1twcm9wVHlwZV0uaGFzT3duUHJv
cGVydHkoa2V5Lm5hbWUpKSB7CisgICAgICAgICAgICAgICAgaXNWYWxpZER1cGxpY2F0ZVByb3Ag
PQorICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSBpc24ndCBhbHJlYWR5IGEgc2V0dGVyIGZv
ciB0aGlzIHByb3AKKyAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdQcm9wTmFtZXNbcHJvcFR5
cGVdW2tleS5uYW1lXS5zZXQgPT09IHVuZGVmaW5lZAorICAgICAgICAgICAgICAgICAgICAvLyBU
aGVyZSBpc24ndCBhbHJlYWR5IGEgZGF0YSBwcm9wIGJ5IHRoaXMgbmFtZQorICAgICAgICAgICAg
ICAgICAgICAmJiBleGlzdGluZ1Byb3BOYW1lc1twcm9wVHlwZV1ba2V5Lm5hbWVdLmRhdGEgPT09
IHVuZGVmaW5lZAorICAgICAgICAgICAgICAgICAgICAvLyBUaGUgb25seSBleGlzdGluZyBwcm9w
IGJ5IHRoaXMgbmFtZSBpcyBhIGdldHRlcgorICAgICAgICAgICAgICAgICAgICAmJiBleGlzdGlu
Z1Byb3BOYW1lc1twcm9wVHlwZV1ba2V5Lm5hbWVdLmdldCAhPT0gdW5kZWZpbmVkOworICAgICAg
ICAgICAgICAgIGlmICghaXNWYWxpZER1cGxpY2F0ZVByb3ApIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGhyb3dFcnJvcihrZXksIE1lc3NhZ2VzLklsbGVnYWxEdXBsaWNhdGVDbGFzc1Byb3BlcnR5
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGV4aXN0aW5nUHJvcE5hbWVzW3Byb3BUeXBlXVtrZXkubmFtZV0gPSB7fTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGV4aXN0aW5nUHJvcE5hbWVzW3Byb3BUeXBlXVtrZXkubmFtZV0u
c2V0ID0gdHJ1ZTsKKworICAgICAgICAgICAgZXhwZWN0KCcoJyk7CisgICAgICAgICAgICB0b2tl
biA9IGxvb2thaGVhZDsKKyAgICAgICAgICAgIHBhcmFtID0gWyBwYXJzZVZhcmlhYmxlSWRlbnRp
ZmllcigpIF07CisgICAgICAgICAgICBleHBlY3QoJyknKTsKKyAgICAgICAgICAgIHJldHVybiBk
ZWxlZ2F0ZS5jcmVhdGVNZXRob2REZWZpbml0aW9uKAorICAgICAgICAgICAgICAgIHByb3BUeXBl
LAorICAgICAgICAgICAgICAgICdzZXQnLAorICAgICAgICAgICAgICAgIGtleSwKKyAgICAgICAg
ICAgICAgICBwYXJzZVByb3BlcnR5RnVuY3Rpb24oeyBwYXJhbXM6IHBhcmFtLCBnZW5lcmF0b3I6
IGZhbHNlLCBuYW1lOiB0b2tlbiB9KQorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIEl0IGlzIGEgc3ludGF4IGVycm9yIGlmIGFueSBvdGhlciBwcm9wZXJ0aWVzIGhhdmUg
dGhlIHNhbWUgbmFtZSBhcyBhCisgICAgICAgIC8vIG5vbi1nZXR0ZXIsIG5vbi1zZXR0ZXIgbWV0
aG9kCisgICAgICAgIGlmIChleGlzdGluZ1Byb3BOYW1lc1twcm9wVHlwZV0uaGFzT3duUHJvcGVy
dHkoa2V5Lm5hbWUpKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKGtleSwgTWVzc2FnZXMuSWxs
ZWdhbER1cGxpY2F0ZUNsYXNzUHJvcGVydHkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgZXhpc3RpbmdQcm9wTmFtZXNbcHJvcFR5cGVdW2tleS5uYW1lXSA9IHt9OworICAgICAgICB9
CisgICAgICAgIGV4aXN0aW5nUHJvcE5hbWVzW3Byb3BUeXBlXVtrZXkubmFtZV0uZGF0YSA9IHRy
dWU7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZU1ldGhvZERlZmluaXRpb24oCisg
ICAgICAgICAgICBwcm9wVHlwZSwKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAga2V5LAor
ICAgICAgICAgICAgcGFyc2VQcm9wZXJ0eU1ldGhvZEZ1bmN0aW9uKHsgZ2VuZXJhdG9yOiBmYWxz
ZSB9KQorICAgICAgICApOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlQ2xhc3NFbGVtZW50
KGV4aXN0aW5nUHJvcHMpIHsKKyAgICAgICAgaWYgKG1hdGNoKCc7JykpIHsKKyAgICAgICAgICAg
IGxleCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJldHVybiBw
YXJzZU1ldGhvZERlZmluaXRpb24oZXhpc3RpbmdQcm9wcyk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gcGFyc2VDbGFzc0JvZHkoKSB7CisgICAgICAgIHZhciBjbGFzc0VsZW1lbnQsIGNsYXNzRWxl
bWVudHMgPSBbXSwgZXhpc3RpbmdQcm9wcyA9IHt9OworCisgICAgICAgIGV4aXN0aW5nUHJvcHNb
Q2xhc3NQcm9wZXJ0eVR5cGUuc3RhdGljXSA9IHt9OworICAgICAgICBleGlzdGluZ1Byb3BzW0Ns
YXNzUHJvcGVydHlUeXBlLnByb3RvdHlwZV0gPSB7fTsKKworICAgICAgICBleHBlY3QoJ3snKTsK
KworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChtYXRj
aCgnfScpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjbGFzc0VsZW1lbnQgPSBwYXJzZUNsYXNzRWxlbWVudChleGlzdGluZ1Byb3BzKTsKKwor
ICAgICAgICAgICAgaWYgKHR5cGVvZiBjbGFzc0VsZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7Cisg
ICAgICAgICAgICAgICAgY2xhc3NFbGVtZW50cy5wdXNoKGNsYXNzRWxlbWVudCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBleHBlY3QoJ30nKTsKKworICAgICAgICByZXR1
cm4gZGVsZWdhdGUuY3JlYXRlQ2xhc3NCb2R5KGNsYXNzRWxlbWVudHMpOworICAgIH0KKworICAg
IGZ1bmN0aW9uIHBhcnNlQ2xhc3NFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIgaWQsIHByZXZp
b3VzWWllbGRBbGxvd2VkLCBzdXBlckNsYXNzID0gbnVsbDsKKworICAgICAgICBleHBlY3RLZXl3
b3JkKCdjbGFzcycpOworCisgICAgICAgIGlmICghbWF0Y2hLZXl3b3JkKCdleHRlbmRzJykgJiYg
IW1hdGNoKCd7JykpIHsKKyAgICAgICAgICAgIGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIo
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2V4dGVuZHMnKSkgewor
ICAgICAgICAgICAgZXhwZWN0S2V5d29yZCgnZXh0ZW5kcycpOworICAgICAgICAgICAgcHJldmlv
dXNZaWVsZEFsbG93ZWQgPSBzdGF0ZS55aWVsZEFsbG93ZWQ7CisgICAgICAgICAgICBzdGF0ZS55
aWVsZEFsbG93ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHN1cGVyQ2xhc3MgPSBwYXJzZUFzc2ln
bm1lbnRFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBwcmV2
aW91c1lpZWxkQWxsb3dlZDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5j
cmVhdGVDbGFzc0V4cHJlc3Npb24oaWQsIHN1cGVyQ2xhc3MsIHBhcnNlQ2xhc3NCb2R5KCkpOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlQ2xhc3NEZWNsYXJhdGlvbigpIHsKKyAgICAgICAg
dmFyIHRva2VuLCBpZCwgcHJldmlvdXNZaWVsZEFsbG93ZWQsIHN1cGVyQ2xhc3MgPSBudWxsOwor
CisgICAgICAgIGV4cGVjdEtleXdvcmQoJ2NsYXNzJyk7CisKKyAgICAgICAgdG9rZW4gPSBsb29r
YWhlYWQ7CisgICAgICAgIGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKworICAgICAg
ICBpZiAobWF0Y2hLZXl3b3JkKCdleHRlbmRzJykpIHsKKyAgICAgICAgICAgIGV4cGVjdEtleXdv
cmQoJ2V4dGVuZHMnKTsKKyAgICAgICAgICAgIHByZXZpb3VzWWllbGRBbGxvd2VkID0gc3RhdGUu
eWllbGRBbGxvd2VkOworICAgICAgICAgICAgc3RhdGUueWllbGRBbGxvd2VkID0gZmFsc2U7Cisg
ICAgICAgICAgICBzdXBlckNsYXNzID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworICAg
ICAgICAgICAgc3RhdGUueWllbGRBbGxvd2VkID0gcHJldmlvdXNZaWVsZEFsbG93ZWQ7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlQ2xhc3NEZWNsYXJhdGlvbihp
ZCwgc3VwZXJDbGFzcywgcGFyc2VDbGFzc0JvZHkoKSk7CisgICAgfQorCisgICAgLy8gMTUgUHJv
Z3JhbQorCisgICAgZnVuY3Rpb24gcGFyc2VTb3VyY2VFbGVtZW50KCkgeworICAgICAgICBpZiAo
bG9va2FoZWFkLnR5cGUgPT09IFRva2VuLktleXdvcmQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
bG9va2FoZWFkLnZhbHVlKSB7CisgICAgICAgICAgICBjYXNlICdjb25zdCc6CisgICAgICAgICAg
ICBjYXNlICdsZXQnOgorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUNvbnN0TGV0RGVjbGFy
YXRpb24obG9va2FoZWFkLnZhbHVlKTsKKyAgICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCk7CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVN0YXRlbWVudCgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlICE9
PSBUb2tlbi5FT0YpIHsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZVN0YXRlbWVudCgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VQcm9ncmFtRWxlbWVudCgpIHsKKyAg
ICAgICAgdmFyIGxpbmVOdW1iZXIsIHRva2VuOworCisgICAgICAgIGlmIChsb29rYWhlYWQudHlw
ZSA9PT0gVG9rZW4uS2V5d29yZCkgeworICAgICAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFs
dWUpIHsKKyAgICAgICAgICAgIGNhc2UgJ2V4cG9ydCc6CisgICAgICAgICAgICAgICAgcmV0dXJu
IHBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKTsKKyAgICAgICAgICAgIGNhc2UgJ2ltcG9ydCc6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW1wb3J0RGVjbGFyYXRpb24oKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb29rYWhlYWQudmFsdWUgPT09ICdtb2R1
bGUnICYmIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7CisgICAgICAgICAg
ICBsaW5lTnVtYmVyID0gbG9va2FoZWFkLmxpbmVOdW1iZXI7CisgICAgICAgICAgICB0b2tlbiA9
IGxvb2thaGVhZDIoKTsKKyAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5JZGVu
dGlmaWVyICYmIHRva2VuLmxpbmVOdW1iZXIgPT09IGxpbmVOdW1iZXIpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcGFyc2VNb2R1bGVEZWNsYXJhdGlvbigpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHBhcnNlU291cmNlRWxlbWVudCgpOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHBhcnNlUHJvZ3JhbUVsZW1lbnRzKCkgeworICAgICAgICB2YXIgc291cmNl
RWxlbWVudCwgc291cmNlRWxlbWVudHMgPSBbXSwgdG9rZW4sIGRpcmVjdGl2ZSwgZmlyc3RSZXN0
cmljdGVkOworCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAg
dG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4u
U3RyaW5nTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBzb3VyY2VFbGVtZW50ID0gcGFyc2VQcm9ncmFtRWxlbWVudCgpOworICAg
ICAgICAgICAgc291cmNlRWxlbWVudHMucHVzaChzb3VyY2VFbGVtZW50KTsKKyAgICAgICAgICAg
IGlmIChzb3VyY2VFbGVtZW50LmV4cHJlc3Npb24udHlwZSAhPT0gU3ludGF4LkxpdGVyYWwpIHsK
KyAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCBkaXJlY3RpdmUKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRpcmVjdGl2ZSA9IHNvdXJjZS5z
bGljZSh0b2tlbi5yYW5nZVswXSArIDEsIHRva2VuLnJhbmdlWzFdIC0gMSk7CisgICAgICAgICAg
ICBpZiAoZGlyZWN0aXZlID09PSAndXNlIHN0cmljdCcpIHsKKyAgICAgICAgICAgICAgICBzdHJp
Y3QgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmIChmaXJzdFJlc3RyaWN0ZWQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KGZpcnN0UmVzdHJpY3RlZCwgTWVzc2Fn
ZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghZmlyc3RSZXN0cmljdGVkICYmIHRva2VuLm9j
dGFsKSB7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHdoaWxl
IChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlUHJv
Z3JhbUVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlRWxlbWVudCA9PT0g
J3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2goc291cmNlRWxlbWVudCk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHNvdXJjZUVsZW1lbnRzOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBh
cnNlTW9kdWxlRWxlbWVudCgpIHsKKyAgICAgICAgcmV0dXJuIHBhcnNlUHJvZ3JhbUVsZW1lbnQo
KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZU1vZHVsZUVsZW1lbnRzKCkgeworICAgICAg
ICB2YXIgbGlzdCA9IFtdLAorICAgICAgICAgICAgc3RhdGVtZW50OworCisgICAgICAgIHdoaWxl
IChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgaWYgKG1hdGNoKCd9JykpIHsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlbWVudCA9
IHBhcnNlTW9kdWxlRWxlbWVudCgpOworICAgICAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZW1lbnQg
PT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBsaXN0LnB1c2goc3RhdGVtZW50KTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBsaXN0OworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlTW9kdWxlQmxvY2soKSB7
CisgICAgICAgIHZhciBibG9jazsKKworICAgICAgICBleHBlY3QoJ3snKTsKKworICAgICAgICBi
bG9jayA9IHBhcnNlTW9kdWxlRWxlbWVudHMoKTsKKworICAgICAgICBleHBlY3QoJ30nKTsKKwor
ICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlQmxvY2tTdGF0ZW1lbnQoYmxvY2spOworICAg
IH0KKworICAgIGZ1bmN0aW9uIHBhcnNlUHJvZ3JhbSgpIHsKKyAgICAgICAgdmFyIGJvZHk7Cisg
ICAgICAgIHN0cmljdCA9IGZhbHNlOworICAgICAgICBwZWVrKCk7CisgICAgICAgIGJvZHkgPSBw
YXJzZVByb2dyYW1FbGVtZW50cygpOworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlUHJv
Z3JhbShib2R5KTsKKyAgICB9CisKKyAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUg
bmVlZGVkIG9ubHkgd2hlbiB0aGUgb3B0aW9uIHRvIHByZXNlcnZlCisgICAgLy8gdGhlIGNvbW1l
bnRzIGlzIGFjdGl2ZS4KKworICAgIGZ1bmN0aW9uIGFkZENvbW1lbnQodHlwZSwgdmFsdWUsIHN0
YXJ0LCBlbmQsIGxvYykgeworICAgICAgICBhc3NlcnQodHlwZW9mIHN0YXJ0ID09PSAnbnVtYmVy
JywgJ0NvbW1lbnQgbXVzdCBoYXZlIHZhbGlkIHBvc2l0aW9uJyk7CisKKyAgICAgICAgLy8gQmVj
YXVzZSB0aGUgd2F5IHRoZSBhY3R1YWwgdG9rZW4gaXMgc2Nhbm5lZCwgb2Z0ZW4gdGhlIGNvbW1l
bnRzCisgICAgICAgIC8vIChpZiBhbnkpIGFyZSBza2lwcGVkIHR3aWNlIGR1cmluZyB0aGUgbGV4
aWNhbCBhbmFseXNpcy4KKyAgICAgICAgLy8gVGh1cywgd2UgbmVlZCB0byBza2lwIGFkZGluZyBh
IGNvbW1lbnQgaWYgdGhlIGNvbW1lbnQgYXJyYXkgYWxyZWFkeQorICAgICAgICAvLyBoYW5kbGVk
IGl0LgorICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMubGVuZ3RoID4gMCkgeworICAgICAgICAg
ICAgaWYgKGV4dHJhLmNvbW1lbnRzW2V4dHJhLmNvbW1lbnRzLmxlbmd0aCAtIDFdLnJhbmdlWzFd
ID4gc3RhcnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBleHRyYS5jb21tZW50cy5wdXNoKHsKKyAgICAgICAgICAgIHR5cGU6
IHR5cGUsCisgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCisgICAgICAgICAgICByYW5nZTogW3N0
YXJ0LCBlbmRdLAorICAgICAgICAgICAgbG9jOiBsb2MKKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gc2NhbkNvbW1lbnQoKSB7CisgICAgICAgIHZhciBjb21tZW50LCBjaCwgbG9j
LCBzdGFydCwgYmxvY2tDb21tZW50LCBsaW5lQ29tbWVudDsKKworICAgICAgICBjb21tZW50ID0g
Jyc7CisgICAgICAgIGJsb2NrQ29tbWVudCA9IGZhbHNlOworICAgICAgICBsaW5lQ29tbWVudCA9
IGZhbHNlOworCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAg
Y2ggPSBzb3VyY2VbaW5kZXhdOworCisgICAgICAgICAgICBpZiAobGluZUNvbW1lbnQpIHsKKyAg
ICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgICAgICAgICBpZiAo
aXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkgeworICAgICAgICAgICAgICAgICAg
ICBsb2MuZW5kID0geworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQgLSAxCisg
ICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIGxpbmVDb21tZW50ID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGFkZENvbW1lbnQoJ0xpbmUnLCBjb21tZW50LCBz
dGFydCwgaW5kZXggLSAxLCBsb2MpOworICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdc
cicgJiYgc291cmNlW2luZGV4XSA9PT0gJ1xuJykgeworICAgICAgICAgICAgICAgICAgICAgICAg
KytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICArK2xp
bmVOdW1iZXI7CisgICAgICAgICAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4OworICAgICAg
ICAgICAgICAgICAgICBjb21tZW50ID0gJyc7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChp
bmRleCA+PSBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgbGluZUNvbW1lbnQgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgY29tbWVudCArPSBjaDsKKyAgICAgICAgICAgICAgICAg
ICAgbG9jLmVuZCA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGxlbmd0aCAtIGxpbmVTdGFydAorICAg
ICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICBhZGRDb21tZW50KCdMaW5l
JywgY29tbWVudCwgc3RhcnQsIGxlbmd0aCwgbG9jKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBjb21tZW50ICs9IGNoOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gZWxzZSBpZiAoYmxvY2tDb21tZW50KSB7CisgICAgICAgICAgICAgICAg
aWYgKGlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGNoID09PSAnXHInICYmIHNvdXJjZVtpbmRleCArIDFdID09PSAnXG4nKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICAgICAg
Y29tbWVudCArPSAnXHJcbic7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjb21tZW50ICs9IGNoOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICsrbGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgKytp
bmRleDsKKyAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdOworICAgICAgICAgICAgICAgICAgICBpZiAo
aW5kZXggPj0gbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9
LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY29tbWVudCArPSBjaDsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGNoID09PSAnKicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gc291
cmNlW2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJy8nKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGNvbW1lbnQuc3Vic3RyKDAsIGNv
bW1lbnQubGVuZ3RoIC0gMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tDb21t
ZW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb2MuZW5kID0geworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRDb21tZW50KCdCbG9jaycsIGNv
bW1lbnQsIHN0YXJ0LCBpbmRleCwgbG9jKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b21tZW50ID0gJyc7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAn
LycpIHsKKyAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCArIDFdOworICAgICAgICAg
ICAgICAgIGlmIChjaCA9PT0gJy8nKSB7CisgICAgICAgICAgICAgICAgICAgIGxvYyA9IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGluZTogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46
IGluZGV4IC0gbGluZVN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gaW5kZXg7CisgICAgICAg
ICAgICAgICAgICAgIGluZGV4ICs9IDI7CisgICAgICAgICAgICAgICAgICAgIGxpbmVDb21tZW50
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGxlbmd0aCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgbG9jLmVuZCA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5lOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVt
bjogaW5kZXggLSBsaW5lU3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5lQ29tbWVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICAgICAgYWRkQ29tbWVudCgnTGluZScsIGNvbW1lbnQsIHN0YXJ0LCBpbmRleCwgbG9jKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICcq
JykgeworICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGluZGV4OworICAgICAgICAgICAgICAg
ICAgICBpbmRleCArPSAyOworICAgICAgICAgICAgICAgICAgICBibG9ja0NvbW1lbnQgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICBsb2MgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICBz
dGFydDogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydCAtIDIK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGxlbmd0aCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl
bHNlIGlmIChpc1doaXRlU3BhY2UoY2guY2hhckNvZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAg
ICArK2luZGV4OworICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoLmNo
YXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAg
ICBpZiAoY2ggPT09ICAnXHInICYmIHNvdXJjZVtpbmRleF0gPT09ICdcbicpIHsKKyAgICAgICAg
ICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
KytsaW5lTnVtYmVyOworICAgICAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4OworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbHRlckNvbW1lbnRMb2NhdGlvbigpIHsK
KyAgICAgICAgdmFyIGksIGVudHJ5LCBjb21tZW50LCBjb21tZW50cyA9IFtdOworCisgICAgICAg
IGZvciAoaSA9IDA7IGkgPCBleHRyYS5jb21tZW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICAg
ICAgZW50cnkgPSBleHRyYS5jb21tZW50c1tpXTsKKyAgICAgICAgICAgIGNvbW1lbnQgPSB7Cisg
ICAgICAgICAgICAgICAgdHlwZTogZW50cnkudHlwZSwKKyAgICAgICAgICAgICAgICB2YWx1ZTog
ZW50cnkudmFsdWUKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAoZXh0cmEucmFuZ2Up
IHsKKyAgICAgICAgICAgICAgICBjb21tZW50LnJhbmdlID0gZW50cnkucmFuZ2U7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoZXh0cmEubG9jKSB7CisgICAgICAgICAgICAgICAgY29t
bWVudC5sb2MgPSBlbnRyeS5sb2M7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb21tZW50
cy5wdXNoKGNvbW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgZXh0cmEuY29tbWVudHMgPSBj
b21tZW50czsKKyAgICB9CisKKyAgICAvLyAxNiBYSlMKKworICAgIFhIVE1MRW50aXRpZXMgPSB7
CisgICAgICAgIHF1b3Q6ICdcdTAwMjInLAorICAgICAgICBhbXA6ICcmJywKKyAgICAgICAgYXBv
czogIlx1MDAyNyIsCisgICAgICAgIGx0OiAiPCIsCisgICAgICAgIGd0OiAiPiIsCisgICAgICAg
IG5ic3A6ICJcdTAwQTAiLAorICAgICAgICBpZXhjbDogIlx1MDBBMSIsCisgICAgICAgIGNlbnQ6
ICJcdTAwQTIiLAorICAgICAgICBwb3VuZDogIlx1MDBBMyIsCisgICAgICAgIGN1cnJlbjogIlx1
MDBBNCIsCisgICAgICAgIHllbjogIlx1MDBBNSIsCisgICAgICAgIGJydmJhcjogIlx1MDBBNiIs
CisgICAgICAgIHNlY3Q6ICJcdTAwQTciLAorICAgICAgICB1bWw6ICJcdTAwQTgiLAorICAgICAg
ICBjb3B5OiAiXHUwMEE5IiwKKyAgICAgICAgb3JkZjogIlx1MDBBQSIsCisgICAgICAgIGxhcXVv
OiAiXHUwMEFCIiwKKyAgICAgICAgbm90OiAiXHUwMEFDIiwKKyAgICAgICAgc2h5OiAiXHUwMEFE
IiwKKyAgICAgICAgcmVnOiAiXHUwMEFFIiwKKyAgICAgICAgbWFjcjogIlx1MDBBRiIsCisgICAg
ICAgIGRlZzogIlx1MDBCMCIsCisgICAgICAgIHBsdXNtbjogIlx1MDBCMSIsCisgICAgICAgIHN1
cDI6ICJcdTAwQjIiLAorICAgICAgICBzdXAzOiAiXHUwMEIzIiwKKyAgICAgICAgYWN1dGU6ICJc
dTAwQjQiLAorICAgICAgICBtaWNybzogIlx1MDBCNSIsCisgICAgICAgIHBhcmE6ICJcdTAwQjYi
LAorICAgICAgICBtaWRkb3Q6ICJcdTAwQjciLAorICAgICAgICBjZWRpbDogIlx1MDBCOCIsCisg
ICAgICAgIHN1cDE6ICJcdTAwQjkiLAorICAgICAgICBvcmRtOiAiXHUwMEJBIiwKKyAgICAgICAg
cmFxdW86ICJcdTAwQkIiLAorICAgICAgICBmcmFjMTQ6ICJcdTAwQkMiLAorICAgICAgICBmcmFj
MTI6ICJcdTAwQkQiLAorICAgICAgICBmcmFjMzQ6ICJcdTAwQkUiLAorICAgICAgICBpcXVlc3Q6
ICJcdTAwQkYiLAorICAgICAgICBBZ3JhdmU6ICJcdTAwQzAiLAorICAgICAgICBBYWN1dGU6ICJc
dTAwQzEiLAorICAgICAgICBBY2lyYzogIlx1MDBDMiIsCisgICAgICAgIEF0aWxkZTogIlx1MDBD
MyIsCisgICAgICAgIEF1bWw6ICJcdTAwQzQiLAorICAgICAgICBBcmluZzogIlx1MDBDNSIsCisg
ICAgICAgIEFFbGlnOiAiXHUwMEM2IiwKKyAgICAgICAgQ2NlZGlsOiAiXHUwMEM3IiwKKyAgICAg
ICAgRWdyYXZlOiAiXHUwMEM4IiwKKyAgICAgICAgRWFjdXRlOiAiXHUwMEM5IiwKKyAgICAgICAg
RWNpcmM6ICJcdTAwQ0EiLAorICAgICAgICBFdW1sOiAiXHUwMENCIiwKKyAgICAgICAgSWdyYXZl
OiAiXHUwMENDIiwKKyAgICAgICAgSWFjdXRlOiAiXHUwMENEIiwKKyAgICAgICAgSWNpcmM6ICJc
dTAwQ0UiLAorICAgICAgICBJdW1sOiAiXHUwMENGIiwKKyAgICAgICAgRVRIOiAiXHUwMEQwIiwK
KyAgICAgICAgTnRpbGRlOiAiXHUwMEQxIiwKKyAgICAgICAgT2dyYXZlOiAiXHUwMEQyIiwKKyAg
ICAgICAgT2FjdXRlOiAiXHUwMEQzIiwKKyAgICAgICAgT2NpcmM6ICJcdTAwRDQiLAorICAgICAg
ICBPdGlsZGU6ICJcdTAwRDUiLAorICAgICAgICBPdW1sOiAiXHUwMEQ2IiwKKyAgICAgICAgdGlt
ZXM6ICJcdTAwRDciLAorICAgICAgICBPc2xhc2g6ICJcdTAwRDgiLAorICAgICAgICBVZ3JhdmU6
ICJcdTAwRDkiLAorICAgICAgICBVYWN1dGU6ICJcdTAwREEiLAorICAgICAgICBVY2lyYzogIlx1
MDBEQiIsCisgICAgICAgIFV1bWw6ICJcdTAwREMiLAorICAgICAgICBZYWN1dGU6ICJcdTAwREQi
LAorICAgICAgICBUSE9STjogIlx1MDBERSIsCisgICAgICAgIHN6bGlnOiAiXHUwMERGIiwKKyAg
ICAgICAgYWdyYXZlOiAiXHUwMEUwIiwKKyAgICAgICAgYWFjdXRlOiAiXHUwMEUxIiwKKyAgICAg
ICAgYWNpcmM6ICJcdTAwRTIiLAorICAgICAgICBhdGlsZGU6ICJcdTAwRTMiLAorICAgICAgICBh
dW1sOiAiXHUwMEU0IiwKKyAgICAgICAgYXJpbmc6ICJcdTAwRTUiLAorICAgICAgICBhZWxpZzog
Ilx1MDBFNiIsCisgICAgICAgIGNjZWRpbDogIlx1MDBFNyIsCisgICAgICAgIGVncmF2ZTogIlx1
MDBFOCIsCisgICAgICAgIGVhY3V0ZTogIlx1MDBFOSIsCisgICAgICAgIGVjaXJjOiAiXHUwMEVB
IiwKKyAgICAgICAgZXVtbDogIlx1MDBFQiIsCisgICAgICAgIGlncmF2ZTogIlx1MDBFQyIsCisg
ICAgICAgIGlhY3V0ZTogIlx1MDBFRCIsCisgICAgICAgIGljaXJjOiAiXHUwMEVFIiwKKyAgICAg
ICAgaXVtbDogIlx1MDBFRiIsCisgICAgICAgIGV0aDogIlx1MDBGMCIsCisgICAgICAgIG50aWxk
ZTogIlx1MDBGMSIsCisgICAgICAgIG9ncmF2ZTogIlx1MDBGMiIsCisgICAgICAgIG9hY3V0ZTog
Ilx1MDBGMyIsCisgICAgICAgIG9jaXJjOiAiXHUwMEY0IiwKKyAgICAgICAgb3RpbGRlOiAiXHUw
MEY1IiwKKyAgICAgICAgb3VtbDogIlx1MDBGNiIsCisgICAgICAgIGRpdmlkZTogIlx1MDBGNyIs
CisgICAgICAgIG9zbGFzaDogIlx1MDBGOCIsCisgICAgICAgIHVncmF2ZTogIlx1MDBGOSIsCisg
ICAgICAgIHVhY3V0ZTogIlx1MDBGQSIsCisgICAgICAgIHVjaXJjOiAiXHUwMEZCIiwKKyAgICAg
ICAgdXVtbDogIlx1MDBGQyIsCisgICAgICAgIHlhY3V0ZTogIlx1MDBGRCIsCisgICAgICAgIHRo
b3JuOiAiXHUwMEZFIiwKKyAgICAgICAgeXVtbDogIlx1MDBGRiIsCisgICAgICAgIE9FbGlnOiAi
XHUwMTUyIiwKKyAgICAgICAgb2VsaWc6ICJcdTAxNTMiLAorICAgICAgICBTY2Fyb246ICJcdTAx
NjAiLAorICAgICAgICBzY2Fyb246ICJcdTAxNjEiLAorICAgICAgICBZdW1sOiAiXHUwMTc4IiwK
KyAgICAgICAgZm5vZjogIlx1MDE5MiIsCisgICAgICAgIGNpcmM6ICJcdTAyQzYiLAorICAgICAg
ICB0aWxkZTogIlx1MDJEQyIsCisgICAgICAgIEFscGhhOiAiXHUwMzkxIiwKKyAgICAgICAgQmV0
YTogIlx1MDM5MiIsCisgICAgICAgIEdhbW1hOiAiXHUwMzkzIiwKKyAgICAgICAgRGVsdGE6ICJc
dTAzOTQiLAorICAgICAgICBFcHNpbG9uOiAiXHUwMzk1IiwKKyAgICAgICAgWmV0YTogIlx1MDM5
NiIsCisgICAgICAgIEV0YTogIlx1MDM5NyIsCisgICAgICAgIFRoZXRhOiAiXHUwMzk4IiwKKyAg
ICAgICAgSW90YTogIlx1MDM5OSIsCisgICAgICAgIEthcHBhOiAiXHUwMzlBIiwKKyAgICAgICAg
TGFtYmRhOiAiXHUwMzlCIiwKKyAgICAgICAgTXU6ICJcdTAzOUMiLAorICAgICAgICBOdTogIlx1
MDM5RCIsCisgICAgICAgIFhpOiAiXHUwMzlFIiwKKyAgICAgICAgT21pY3JvbjogIlx1MDM5RiIs
CisgICAgICAgIFBpOiAiXHUwM0EwIiwKKyAgICAgICAgUmhvOiAiXHUwM0ExIiwKKyAgICAgICAg
U2lnbWE6ICJcdTAzQTMiLAorICAgICAgICBUYXU6ICJcdTAzQTQiLAorICAgICAgICBVcHNpbG9u
OiAiXHUwM0E1IiwKKyAgICAgICAgUGhpOiAiXHUwM0E2IiwKKyAgICAgICAgQ2hpOiAiXHUwM0E3
IiwKKyAgICAgICAgUHNpOiAiXHUwM0E4IiwKKyAgICAgICAgT21lZ2E6ICJcdTAzQTkiLAorICAg
ICAgICBhbHBoYTogIlx1MDNCMSIsCisgICAgICAgIGJldGE6ICJcdTAzQjIiLAorICAgICAgICBn
YW1tYTogIlx1MDNCMyIsCisgICAgICAgIGRlbHRhOiAiXHUwM0I0IiwKKyAgICAgICAgZXBzaWxv
bjogIlx1MDNCNSIsCisgICAgICAgIHpldGE6ICJcdTAzQjYiLAorICAgICAgICBldGE6ICJcdTAz
QjciLAorICAgICAgICB0aGV0YTogIlx1MDNCOCIsCisgICAgICAgIGlvdGE6ICJcdTAzQjkiLAor
ICAgICAgICBrYXBwYTogIlx1MDNCQSIsCisgICAgICAgIGxhbWJkYTogIlx1MDNCQiIsCisgICAg
ICAgIG11OiAiXHUwM0JDIiwKKyAgICAgICAgbnU6ICJcdTAzQkQiLAorICAgICAgICB4aTogIlx1
MDNCRSIsCisgICAgICAgIG9taWNyb246ICJcdTAzQkYiLAorICAgICAgICBwaTogIlx1MDNDMCIs
CisgICAgICAgIHJobzogIlx1MDNDMSIsCisgICAgICAgIHNpZ21hZjogIlx1MDNDMiIsCisgICAg
ICAgIHNpZ21hOiAiXHUwM0MzIiwKKyAgICAgICAgdGF1OiAiXHUwM0M0IiwKKyAgICAgICAgdXBz
aWxvbjogIlx1MDNDNSIsCisgICAgICAgIHBoaTogIlx1MDNDNiIsCisgICAgICAgIGNoaTogIlx1
MDNDNyIsCisgICAgICAgIHBzaTogIlx1MDNDOCIsCisgICAgICAgIG9tZWdhOiAiXHUwM0M5IiwK
KyAgICAgICAgdGhldGFzeW06ICJcdTAzRDEiLAorICAgICAgICB1cHNpaDogIlx1MDNEMiIsCisg
ICAgICAgIHBpdjogIlx1MDNENiIsCisgICAgICAgIGVuc3A6ICJcdTIwMDIiLAorICAgICAgICBl
bXNwOiAiXHUyMDAzIiwKKyAgICAgICAgdGhpbnNwOiAiXHUyMDA5IiwKKyAgICAgICAgenduajog
Ilx1MjAwQyIsCisgICAgICAgIHp3ajogIlx1MjAwRCIsCisgICAgICAgIGxybTogIlx1MjAwRSIs
CisgICAgICAgIHJsbTogIlx1MjAwRiIsCisgICAgICAgIG5kYXNoOiAiXHUyMDEzIiwKKyAgICAg
ICAgbWRhc2g6ICJcdTIwMTQiLAorICAgICAgICBsc3F1bzogIlx1MjAxOCIsCisgICAgICAgIHJz
cXVvOiAiXHUyMDE5IiwKKyAgICAgICAgc2JxdW86ICJcdTIwMUEiLAorICAgICAgICBsZHF1bzog
Ilx1MjAxQyIsCisgICAgICAgIHJkcXVvOiAiXHUyMDFEIiwKKyAgICAgICAgYmRxdW86ICJcdTIw
MUUiLAorICAgICAgICBkYWdnZXI6ICJcdTIwMjAiLAorICAgICAgICBEYWdnZXI6ICJcdTIwMjEi
LAorICAgICAgICBidWxsOiAiXHUyMDIyIiwKKyAgICAgICAgaGVsbGlwOiAiXHUyMDI2IiwKKyAg
ICAgICAgcGVybWlsOiAiXHUyMDMwIiwKKyAgICAgICAgcHJpbWU6ICJcdTIwMzIiLAorICAgICAg
ICBQcmltZTogIlx1MjAzMyIsCisgICAgICAgIGxzYXF1bzogIlx1MjAzOSIsCisgICAgICAgIHJz
YXF1bzogIlx1MjAzQSIsCisgICAgICAgIG9saW5lOiAiXHUyMDNFIiwKKyAgICAgICAgZnJhc2w6
ICJcdTIwNDQiLAorICAgICAgICBldXJvOiAiXHUyMEFDIiwKKyAgICAgICAgaW1hZ2U6ICJcdTIx
MTEiLAorICAgICAgICB3ZWllcnA6ICJcdTIxMTgiLAorICAgICAgICByZWFsOiAiXHUyMTFDIiwK
KyAgICAgICAgdHJhZGU6ICJcdTIxMjIiLAorICAgICAgICBhbGVmc3ltOiAiXHUyMTM1IiwKKyAg
ICAgICAgbGFycjogIlx1MjE5MCIsCisgICAgICAgIHVhcnI6ICJcdTIxOTEiLAorICAgICAgICBy
YXJyOiAiXHUyMTkyIiwKKyAgICAgICAgZGFycjogIlx1MjE5MyIsCisgICAgICAgIGhhcnI6ICJc
dTIxOTQiLAorICAgICAgICBjcmFycjogIlx1MjFCNSIsCisgICAgICAgIGxBcnI6ICJcdTIxRDAi
LAorICAgICAgICB1QXJyOiAiXHUyMUQxIiwKKyAgICAgICAgckFycjogIlx1MjFEMiIsCisgICAg
ICAgIGRBcnI6ICJcdTIxRDMiLAorICAgICAgICBoQXJyOiAiXHUyMUQ0IiwKKyAgICAgICAgZm9y
YWxsOiAiXHUyMjAwIiwKKyAgICAgICAgcGFydDogIlx1MjIwMiIsCisgICAgICAgIGV4aXN0OiAi
XHUyMjAzIiwKKyAgICAgICAgZW1wdHk6ICJcdTIyMDUiLAorICAgICAgICBuYWJsYTogIlx1MjIw
NyIsCisgICAgICAgIGlzaW46ICJcdTIyMDgiLAorICAgICAgICBub3RpbjogIlx1MjIwOSIsCisg
ICAgICAgIG5pOiAiXHUyMjBCIiwKKyAgICAgICAgcHJvZDogIlx1MjIwRiIsCisgICAgICAgIHN1
bTogIlx1MjIxMSIsCisgICAgICAgIG1pbnVzOiAiXHUyMjEyIiwKKyAgICAgICAgbG93YXN0OiAi
XHUyMjE3IiwKKyAgICAgICAgcmFkaWM6ICJcdTIyMUEiLAorICAgICAgICBwcm9wOiAiXHUyMjFE
IiwKKyAgICAgICAgaW5maW46ICJcdTIyMUUiLAorICAgICAgICBhbmc6ICJcdTIyMjAiLAorICAg
ICAgICBhbmQ6ICJcdTIyMjciLAorICAgICAgICBvcjogIlx1MjIyOCIsCisgICAgICAgIGNhcDog
Ilx1MjIyOSIsCisgICAgICAgIGN1cDogIlx1MjIyQSIsCisgICAgICAgICJpbnQiOiAiXHUyMjJC
IiwKKyAgICAgICAgdGhlcmU0OiAiXHUyMjM0IiwKKyAgICAgICAgc2ltOiAiXHUyMjNDIiwKKyAg
ICAgICAgY29uZzogIlx1MjI0NSIsCisgICAgICAgIGFzeW1wOiAiXHUyMjQ4IiwKKyAgICAgICAg
bmU6ICJcdTIyNjAiLAorICAgICAgICBlcXVpdjogIlx1MjI2MSIsCisgICAgICAgIGxlOiAiXHUy
MjY0IiwKKyAgICAgICAgZ2U6ICJcdTIyNjUiLAorICAgICAgICBzdWI6ICJcdTIyODIiLAorICAg
ICAgICBzdXA6ICJcdTIyODMiLAorICAgICAgICBuc3ViOiAiXHUyMjg0IiwKKyAgICAgICAgc3Vi
ZTogIlx1MjI4NiIsCisgICAgICAgIHN1cGU6ICJcdTIyODciLAorICAgICAgICBvcGx1czogIlx1
MjI5NSIsCisgICAgICAgIG90aW1lczogIlx1MjI5NyIsCisgICAgICAgIHBlcnA6ICJcdTIyQTUi
LAorICAgICAgICBzZG90OiAiXHUyMkM1IiwKKyAgICAgICAgbGNlaWw6ICJcdTIzMDgiLAorICAg
ICAgICByY2VpbDogIlx1MjMwOSIsCisgICAgICAgIGxmbG9vcjogIlx1MjMwQSIsCisgICAgICAg
IHJmbG9vcjogIlx1MjMwQiIsCisgICAgICAgIGxhbmc6ICJcdTIzMjkiLAorICAgICAgICByYW5n
OiAiXHUyMzJBIiwKKyAgICAgICAgbG96OiAiXHUyNUNBIiwKKyAgICAgICAgc3BhZGVzOiAiXHUy
NjYwIiwKKyAgICAgICAgY2x1YnM6ICJcdTI2NjMiLAorICAgICAgICBoZWFydHM6ICJcdTI2NjUi
LAorICAgICAgICBkaWFtczogIlx1MjY2NiIKKyAgICB9OworCisgICAgZnVuY3Rpb24gaXNYSlNJ
ZGVudGlmaWVyU3RhcnQoY2gpIHsKKyAgICAgICAgLy8gZXhjbHVkZSBiYWNrc2xhc2ggKFwpCisg
ICAgICAgIHJldHVybiAoY2ggIT09IDkyKSAmJiBpc0lkZW50aWZpZXJTdGFydChjaCk7CisgICAg
fQorCisgICAgZnVuY3Rpb24gaXNYSlNJZGVudGlmaWVyUGFydChjaCkgeworICAgICAgICAvLyBl
eGNsdWRlIGJhY2tzbGFzaCAoXCkgYW5kIGFkZCBoeXBoZW4gKC0pCisgICAgICAgIHJldHVybiAo
Y2ggIT09IDkyKSAmJiAoY2ggPT09IDQ1IHx8IGlzSWRlbnRpZmllclBhcnQoY2gpKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBzY2FuWEpTSWRlbnRpZmllcigpIHsKKyAgICAgICAgdmFyIGNoLCBz
dGFydCwgaWQgPSAnJywgbmFtZXNwYWNlOworCisgICAgICAgIHN0YXJ0ID0gaW5kZXg7CisgICAg
ICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hh
ckNvZGVBdChpbmRleCk7CisgICAgICAgICAgICBpZiAoIWlzWEpTSWRlbnRpZmllclBhcnQoY2gp
KSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZCArPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2ggPT09IDU4
KSB7IC8vIDoKKyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICBuYW1lc3BhY2UgPSBp
ZDsKKyAgICAgICAgICAgIGlkID0gJyc7CisKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxl
bmd0aCkgeworICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpOwor
ICAgICAgICAgICAgICAgIGlmICghaXNYSlNJZGVudGlmaWVyUGFydChjaCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlk
ICs9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGlmICghaWQpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkludmFsaWRY
SlNUYWdOYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICB0
eXBlOiBUb2tlbi5YSlNJZGVudGlmaWVyLAorICAgICAgICAgICAgdmFsdWU6IGlkLAorICAgICAg
ICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2UsCisgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5l
TnVtYmVyLAorICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICBy
YW5nZTogW3N0YXJ0LCBpbmRleF0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBz
Y2FuWEpTRW50aXR5KCkgeworICAgICAgICB2YXIgY2gsIHN0ciA9ICcnLCBjb3VudCA9IDAsIGVu
dGl0eTsKKyAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICBhc3NlcnQoY2ggPT09
ICcmJywgJ0VudGl0eSBtdXN0IHN0YXJ0IHdpdGggYW4gYW1wZXJzYW5kJyk7CisgICAgICAgIGlu
ZGV4Kys7CisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCAmJiBjb3VudCsrIDwgMTApIHsK
KyAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdOworICAgICAgICAgICAgaWYgKGNoID09
PSAnOycpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHN0ciArPSBjaDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdHJbMF0gPT09ICcjJyAm
JiBzdHJbMV0gPT09ICd4JykgeworICAgICAgICAgICAgZW50aXR5ID0gU3RyaW5nLmZyb21DaGFy
Q29kZShwYXJzZUludChzdHIuc3Vic3RyKDIpLCAxNikpOworICAgICAgICB9IGVsc2UgaWYgKHN0
clswXSA9PT0gJyMnKSB7CisgICAgICAgICAgICBlbnRpdHkgPSBTdHJpbmcuZnJvbUNoYXJDb2Rl
KHBhcnNlSW50KHN0ci5zdWJzdHIoMSksIDEwKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBlbnRpdHkgPSBYSFRNTEVudGl0aWVzW3N0cl07CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGVudGl0eTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzY2FuWEpTVGV4dChzdG9wQ2hhcnMp
IHsKKyAgICAgICAgdmFyIGNoLCBzdHIgPSAnJywgc3RhcnQ7CisgICAgICAgIHN0YXJ0ID0gaW5k
ZXg7CisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBz
b3VyY2VbaW5kZXhdOworICAgICAgICAgICAgaWYgKHN0b3BDaGFycy5pbmRleE9mKGNoKSAhPT0g
LTEpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChjaCA9PT0gJyYnKSB7CisgICAgICAgICAgICAgICAgc3RyICs9IHNjYW5YSlNFbnRpdHko
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5k
ZXgrK107CisgICAgICAgICAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVB
dCgwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgKytsaW5lTnVtYmVyOworICAgICAgICAgICAg
ICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgc3RyICs9IGNoOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICB0eXBlOiBUb2tlbi5YSlNUZXh0LAorICAgICAgICAgICAgdmFsdWU6
IHN0ciwKKyAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICBs
aW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XQor
ICAgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHNjYW5YSlNTdHJpbmdMaXRlcmFsKCkg
eworICAgICAgICB2YXIgaW5uZXJUb2tlbiwgcXVvdGUsIHN0YXJ0OworCisgICAgICAgIHF1b3Rl
ID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgYXNzZXJ0KChxdW90ZSA9PT0gJ1wnJyB8fCBxdW90
ZSA9PT0gJyInKSwKKyAgICAgICAgICAgICdTdHJpbmcgbGl0ZXJhbCBtdXN0IHN0YXJ0cyB3aXRo
IGEgcXVvdGUnKTsKKworICAgICAgICBzdGFydCA9IGluZGV4OworICAgICAgICArK2luZGV4Owor
CisgICAgICAgIGlubmVyVG9rZW4gPSBzY2FuWEpTVGV4dChbcXVvdGVdKTsKKworICAgICAgICBp
ZiAocXVvdGUgIT09IHNvdXJjZVtpbmRleF0pIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30s
IE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgfQorCisgICAg
ICAgICsraW5kZXg7CisKKyAgICAgICAgaW5uZXJUb2tlbi5yYW5nZSA9IFtzdGFydCwgaW5kZXhd
OworCisgICAgICAgIHJldHVybiBpbm5lclRva2VuOworICAgIH0KKworICAgIC8qKgorICAgICAq
IEJldHdlZW4gWEpTIG9wZW5pbmcgYW5kIGNsb3NpbmcgdGFncyAoZS5nLiA8Zm9vPkhFUkU8L2Zv
bz4pLCBhbnl0aGluZyB0aGF0CisgICAgICogaXMgbm90IGFub3RoZXIgWEpTIHRhZyBhbmQgaXMg
bm90IGFuIGV4cHJlc3Npb24gd3JhcHBlZCBieSB7fSBpcyB0ZXh0LgorICAgICAqLworICAgIGZ1
bmN0aW9uIGFkdmFuY2VYSlNDaGlsZCgpIHsKKyAgICAgICAgdmFyIGNoID0gc291cmNlLmNoYXJD
b2RlQXQoaW5kZXgpOworCisgICAgICAgIC8vIHsgKDEyMykgYW5kIDwgKDYwKQorICAgICAgICBp
ZiAoY2ggIT09IDEyMyAmJiBjaCAhPT0gNjApIHsKKyAgICAgICAgICAgIHJldHVybiBzY2FuWEpT
VGV4dChbJzwnLCAneyddKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzY2FuUHVuY3R1
YXRvcigpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlWEpTSWRlbnRpZmllcigpIHsKKyAg
ICAgICAgdmFyIHRva2VuOworCisgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4u
WEpTSWRlbnRpZmllcikgeworICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52
YWxpZFhKU1RhZ05hbWUpOworICAgICAgICB9CisKKyAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAg
ICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVhKU0lkZW50aWZpZXIodG9rZW4udmFsdWUsIHRv
a2VuLm5hbWVzcGFjZSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VYSlNBdHRyaWJ1dGVW
YWx1ZSgpIHsKKyAgICAgICAgdmFyIHZhbHVlOworICAgICAgICBpZiAobWF0Y2goJ3snKSkgewor
ICAgICAgICAgICAgdmFsdWUgPSBwYXJzZVhKU0V4cHJlc3Npb25Db250YWluZXIoKTsKKyAgICAg
ICAgICAgIGlmICh2YWx1ZS5leHByZXNzaW9uLnR5cGUgPT09IFN5bnRheC5YSlNFbXB0eUV4cHJl
c3Npb24pIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKAorICAgICAgICAgICAgICAgICAg
ICB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgJ1hKUyBhdHRyaWJ1dGVzIG11c3Qgb25seSBi
ZSBhc3NpZ25lZCBhIG5vbi1lbXB0eSAnICsKKyAgICAgICAgICAgICAgICAgICAgICAgICdleHBy
ZXNzaW9uJworICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlhKU1RleHQpIHsKKyAgICAgICAgICAgIHZh
bHVlID0gZGVsZWdhdGUuY3JlYXRlTGl0ZXJhbChsZXgoKSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkWEpTQXR0cmlidXRlVmFs
dWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBwYXJzZVhKU0VtcHR5RXhwcmVzc2lvbigpIHsKKyAgICAgICAgd2hpbGUgKHNvdXJjZS5j
aGFyQXQoaW5kZXgpICE9PSAnfScpIHsKKyAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVhKU0VtcHR5RXhwcmVzc2lvbigpOworICAg
IH0KKworICAgIGZ1bmN0aW9uIHBhcnNlWEpTRXhwcmVzc2lvbkNvbnRhaW5lcigpIHsKKyAgICAg
ICAgdmFyIGV4cHJlc3Npb24sIG9yaWdJblhKU0NoaWxkLCBvcmlnSW5YSlNUYWc7CisKKyAgICAg
ICAgb3JpZ0luWEpTQ2hpbGQgPSBzdGF0ZS5pblhKU0NoaWxkOworICAgICAgICBvcmlnSW5YSlNU
YWcgPSBzdGF0ZS5pblhKU1RhZzsKKyAgICAgICAgc3RhdGUuaW5YSlNDaGlsZCA9IGZhbHNlOwor
ICAgICAgICBzdGF0ZS5pblhKU1RhZyA9IGZhbHNlOworCisgICAgICAgIGV4cGVjdCgneycpOwor
CisgICAgICAgIGlmIChtYXRjaCgnfScpKSB7CisgICAgICAgICAgICBleHByZXNzaW9uID0gcGFy
c2VYSlNFbXB0eUV4cHJlc3Npb24oKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGV4
cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRl
LmluWEpTQ2hpbGQgPSBvcmlnSW5YSlNDaGlsZDsKKyAgICAgICAgc3RhdGUuaW5YSlNUYWcgPSBv
cmlnSW5YSlNUYWc7CisKKyAgICAgICAgZXhwZWN0KCd9Jyk7CisKKyAgICAgICAgcmV0dXJuIGRl
bGVnYXRlLmNyZWF0ZVhKU0V4cHJlc3Npb25Db250YWluZXIoZXhwcmVzc2lvbik7CisgICAgfQor
CisgICAgZnVuY3Rpb24gcGFyc2VYSlNBdHRyaWJ1dGUoKSB7CisgICAgICAgIHZhciB0b2tlbiwg
bmFtZSwgdmFsdWU7CisKKyAgICAgICAgbmFtZSA9IHBhcnNlWEpTSWRlbnRpZmllcigpOworCisg
ICAgICAgIC8vIEhUTUwgZW1wdHkgYXR0cmlidXRlCisgICAgICAgIGlmIChtYXRjaCgnPScpKSB7
CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVY
SlNBdHRyaWJ1dGUobmFtZSwgcGFyc2VYSlNBdHRyaWJ1dGVWYWx1ZSgpKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVYSlNBdHRyaWJ1dGUobmFtZSk7CisgICAg
fQorCisgICAgZnVuY3Rpb24gcGFyc2VYSlNDaGlsZCgpIHsKKyAgICAgICAgdmFyIHRva2VuOwor
ICAgICAgICBpZiAobWF0Y2goJ3snKSkgeworICAgICAgICAgICAgdG9rZW4gPSBwYXJzZVhKU0V4
cHJlc3Npb25Db250YWluZXIoKTsKKyAgICAgICAgfSBlbHNlIGlmIChsb29rYWhlYWQudHlwZSA9
PT0gVG9rZW4uWEpTVGV4dCkgeworICAgICAgICAgICAgdG9rZW4gPSBkZWxlZ2F0ZS5jcmVhdGVM
aXRlcmFsKGxleCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0YXRlLmluWEpT
Q2hpbGQgPSBmYWxzZTsKKyAgICAgICAgICAgIHRva2VuID0gcGFyc2VYSlNFbGVtZW50KCk7Cisg
ICAgICAgICAgICBzdGF0ZS5pblhKU0NoaWxkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdG9rZW47CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VYSlNDbG9zaW5nRWxlbWVu
dCgpIHsKKyAgICAgICAgdmFyIG5hbWUsIG9yaWdJblhKU1RhZzsKKyAgICAgICAgb3JpZ0luWEpT
VGFnID0gc3RhdGUuaW5YSlNUYWc7CisgICAgICAgIHN0YXRlLmluWEpTVGFnID0gdHJ1ZTsKKyAg
ICAgICAgc3RhdGUuaW5YSlNDaGlsZCA9IGZhbHNlOworICAgICAgICBleHBlY3QoJzwnKTsKKyAg
ICAgICAgZXhwZWN0KCcvJyk7CisgICAgICAgIG5hbWUgPSBwYXJzZVhKU0lkZW50aWZpZXIoKTsK
KyAgICAgICAgc3RhdGUuaW5YSlNUYWcgPSBvcmlnSW5YSlNUYWc7CisgICAgICAgIGV4cGVjdCgn
PicpOworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlWEpTQ2xvc2luZ0VsZW1lbnQobmFt
ZSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VYSlNPcGVuaW5nRWxlbWVudCgpIHsKKyAg
ICAgICAgdmFyIG5hbWUsIGF0dHJpYnV0ZSwgYXR0cmlidXRlcyA9IFtdLCBzZWxmQ2xvc2luZyA9
IGZhbHNlLCBvcmlnSW5YSlNUYWc7CisKKyAgICAgICAgb3JpZ0luWEpTVGFnID0gc3RhdGUuaW5Y
SlNUYWc7CisgICAgICAgIHN0YXRlLmluWEpTVGFnID0gdHJ1ZTsKKworICAgICAgICBleHBlY3Qo
JzwnKTsKKworICAgICAgICBuYW1lID0gcGFyc2VYSlNJZGVudGlmaWVyKCk7CisKKyAgICAgICAg
d2hpbGUgKGluZGV4IDwgbGVuZ3RoICYmCisgICAgICAgICAgICAgICAgbG9va2FoZWFkLnZhbHVl
ICE9PSAnLycgJiYKKyAgICAgICAgICAgICAgICBsb29rYWhlYWQudmFsdWUgIT09ICc+Jykgewor
ICAgICAgICAgICAgYXR0cmlidXRlcy5wdXNoKHBhcnNlWEpTQXR0cmlidXRlKCkpOworICAgICAg
ICB9CisKKyAgICAgICAgc3RhdGUuaW5YSlNUYWcgPSBvcmlnSW5YSlNUYWc7CisKKyAgICAgICAg
aWYgKGxvb2thaGVhZC52YWx1ZSA9PT0gJy8nKSB7CisgICAgICAgICAgICBleHBlY3QoJy8nKTsK
KyAgICAgICAgICAgIGV4cGVjdCgnPicpOworICAgICAgICAgICAgc2VsZkNsb3NpbmcgPSB0cnVl
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RhdGUuaW5YSlNDaGlsZCA9IHRydWU7
CisgICAgICAgICAgICBleHBlY3QoJz4nKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZGVs
ZWdhdGUuY3JlYXRlWEpTT3BlbmluZ0VsZW1lbnQobmFtZSwgYXR0cmlidXRlcywgc2VsZkNsb3Np
bmcpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlWEpTRWxlbWVudCgpIHsKKyAgICAgICAg
dmFyIG9wZW5pbmdFbGVtZW50LCBjbG9zaW5nRWxlbWVudCwgY2hpbGRyZW4gPSBbXSwgb3JpZ0lu
WEpTQ2hpbGQ7CisKKyAgICAgICAgb3BlbmluZ0VsZW1lbnQgPSBwYXJzZVhKU09wZW5pbmdFbGVt
ZW50KCk7CisKKyAgICAgICAgaWYgKCFvcGVuaW5nRWxlbWVudC5zZWxmQ2xvc2luZykgeworICAg
ICAgICAgICAgb3JpZ0luWEpTQ2hpbGQgPSBzdGF0ZS5pblhKU0NoaWxkOworICAgICAgICAgICAg
d2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgc3RhdGUuaW5YSlNDaGls
ZCA9IGZhbHNlOyAvLyA8LyBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgaW4gdGhlIGNoaWxkCisg
ICAgICAgICAgICAgICAgaWYgKGxvb2thaGVhZC52YWx1ZSA9PT0gJzwnICYmIGxvb2thaGVhZDIo
KS52YWx1ZSA9PT0gJy8nKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdGF0ZS5pblhKU0NoaWxkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBwZWVrKCk7IC8vIHJlc2V0IGxvb2thaGVhZCB0b2tlbgorICAgICAgICAgICAg
ICAgIGNoaWxkcmVuLnB1c2gocGFyc2VYSlNDaGlsZCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHN0YXRlLmluWEpTQ2hpbGQgPSBvcmlnSW5YSlNDaGlsZDsKKyAgICAgICAgICAgIGNs
b3NpbmdFbGVtZW50ID0gcGFyc2VYSlNDbG9zaW5nRWxlbWVudCgpOworICAgICAgICAgICAgaWYg
KGNsb3NpbmdFbGVtZW50Lm5hbWUubmFtZXNwYWNlICE9PSBvcGVuaW5nRWxlbWVudC5uYW1lLm5h
bWVzcGFjZSB8fCBjbG9zaW5nRWxlbWVudC5uYW1lLm5hbWUgIT09IG9wZW5pbmdFbGVtZW50Lm5h
bWUubmFtZSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkV4cGVj
dGVkWEpTQ2xvc2luZ1RhZywgb3BlbmluZ0VsZW1lbnQubmFtZS5uYW1lc3BhY2UgPyBvcGVuaW5n
RWxlbWVudC5uYW1lLm5hbWVzcGFjZSArICc6JyArIG9wZW5pbmdFbGVtZW50Lm5hbWUubmFtZSA6
IG9wZW5pbmdFbGVtZW50Lm5hbWUubmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlWEpTRWxlbWVudChvcGVuaW5nRWxlbWVudCwg
Y2xvc2luZ0VsZW1lbnQsIGNoaWxkcmVuKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjb2xsZWN0
VG9rZW4oKSB7CisgICAgICAgIHZhciBzdGFydCwgbG9jLCB0b2tlbiwgcmFuZ2UsIHZhbHVlOwor
CisgICAgICAgIHNraXBDb21tZW50KCk7CisgICAgICAgIHN0YXJ0ID0gaW5kZXg7CisgICAgICAg
IGxvYyA9IHsKKyAgICAgICAgICAgIHN0YXJ0OiB7CisgICAgICAgICAgICAgICAgbGluZTogbGlu
ZU51bWJlciwKKyAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0CisgICAg
ICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgdG9rZW4gPSBleHRyYS5hZHZhbmNlKCk7
CisgICAgICAgIGxvYy5lbmQgPSB7CisgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAorICAg
ICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAorICAgICAgICB9OworCisgICAgICAg
IGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5FT0YpIHsKKyAgICAgICAgICAgIHJhbmdlID0gW3Rv
a2VuLnJhbmdlWzBdLCB0b2tlbi5yYW5nZVsxXV07CisgICAgICAgICAgICB2YWx1ZSA9IHNvdXJj
ZS5zbGljZSh0b2tlbi5yYW5nZVswXSwgdG9rZW4ucmFuZ2VbMV0pOworICAgICAgICAgICAgZXh0
cmEudG9rZW5zLnB1c2goeworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuTmFtZVt0b2tlbi50
eXBlXSwKKyAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCisgICAgICAgICAgICAgICAgcmFu
Z2U6IHJhbmdlLAorICAgICAgICAgICAgICAgIGxvYzogbG9jCisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBj
b2xsZWN0UmVnZXgoKSB7CisgICAgICAgIHZhciBwb3MsIGxvYywgcmVnZXgsIHRva2VuOworCisg
ICAgICAgIHNraXBDb21tZW50KCk7CisKKyAgICAgICAgcG9zID0gaW5kZXg7CisgICAgICAgIGxv
YyA9IHsKKyAgICAgICAgICAgIHN0YXJ0OiB7CisgICAgICAgICAgICAgICAgbGluZTogbGluZU51
bWJlciwKKyAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0CisgICAgICAg
ICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgcmVnZXggPSBleHRyYS5zY2FuUmVnRXhwKCk7
CisgICAgICAgIGxvYy5lbmQgPSB7CisgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAorICAg
ICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAorICAgICAgICB9OworCisgICAgICAg
IGlmICghZXh0cmEudG9rZW5pemUpIHsKKyAgICAgICAgICAgIC8vIFBvcCB0aGUgcHJldmlvdXMg
dG9rZW4sIHdoaWNoIGlzIGxpa2VseSAnLycgb3IgJy89JworICAgICAgICAgICAgaWYgKGV4dHJh
LnRva2Vucy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBleHRyYS50b2tl
bnNbZXh0cmEudG9rZW5zLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgICAgIGlmICh0b2tlbi5y
YW5nZVswXSA9PT0gcG9zICYmIHRva2VuLnR5cGUgPT09ICdQdW5jdHVhdG9yJykgeworICAgICAg
ICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICcvJyB8fCB0b2tlbi52YWx1ZSA9PT0g
Jy89JykgeworICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEudG9rZW5zLnBvcCgpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBleHRyYS50b2tlbnMucHVzaCh7CisgICAgICAgICAgICAgICAgdHlwZTogJ1Jl
Z3VsYXJFeHByZXNzaW9uJywKKyAgICAgICAgICAgICAgICB2YWx1ZTogcmVnZXgubGl0ZXJhbCwK
KyAgICAgICAgICAgICAgICByYW5nZTogW3BvcywgaW5kZXhdLAorICAgICAgICAgICAgICAgIGxv
YzogbG9jCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZWdl
eDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaWx0ZXJUb2tlbkxvY2F0aW9uKCkgeworICAgICAg
ICB2YXIgaSwgZW50cnksIHRva2VuLCB0b2tlbnMgPSBbXTsKKworICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgZXh0cmEudG9rZW5zLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBlbnRyeSA9IGV4
dHJhLnRva2Vuc1tpXTsKKyAgICAgICAgICAgIHRva2VuID0geworICAgICAgICAgICAgICAgIHR5
cGU6IGVudHJ5LnR5cGUsCisgICAgICAgICAgICAgICAgdmFsdWU6IGVudHJ5LnZhbHVlCisgICAg
ICAgICAgICB9OworICAgICAgICAgICAgaWYgKGV4dHJhLnJhbmdlKSB7CisgICAgICAgICAgICAg
ICAgdG9rZW4ucmFuZ2UgPSBlbnRyeS5yYW5nZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChleHRyYS5sb2MpIHsKKyAgICAgICAgICAgICAgICB0b2tlbi5sb2MgPSBlbnRyeS5sb2M7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7CisgICAgICAg
IH0KKworICAgICAgICBleHRyYS50b2tlbnMgPSB0b2tlbnM7CisgICAgfQorCisgICAgZnVuY3Rp
b24gY3JlYXRlTG9jYXRpb25NYXJrZXIoKSB7CisgICAgICAgIHZhciBtYXJrZXIgPSB7fTsKKwor
ICAgICAgICBtYXJrZXIucmFuZ2UgPSBbaW5kZXgsIGluZGV4XTsKKyAgICAgICAgbWFya2VyLmxv
YyA9IHsKKyAgICAgICAgICAgIHN0YXJ0OiB7CisgICAgICAgICAgICAgICAgbGluZTogbGluZU51
bWJlciwKKyAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0CisgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgZW5kOiB7CisgICAgICAgICAgICAgICAgbGluZTogbGluZU51
bWJlciwKKyAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0CisgICAgICAg
ICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgbWFya2VyLmVuZCA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHRoaXMucmFuZ2VbMV0gPSBpbmRleDsKKyAgICAgICAgICAgIHRoaXMubG9j
LmVuZC5saW5lID0gbGluZU51bWJlcjsKKyAgICAgICAgICAgIHRoaXMubG9jLmVuZC5jb2x1bW4g
PSBpbmRleCAtIGxpbmVTdGFydDsKKyAgICAgICAgfTsKKworICAgICAgICBtYXJrZXIuYXBwbHlH
cm91cCA9IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgICAgICBpZiAoZXh0cmEucmFuZ2UpIHsK
KyAgICAgICAgICAgICAgICBub2RlLmdyb3VwUmFuZ2UgPSBbdGhpcy5yYW5nZVswXSwgdGhpcy5y
YW5nZVsxXV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZXh0cmEubG9jKSB7Cisg
ICAgICAgICAgICAgICAgbm9kZS5ncm91cExvYyA9IHsKKyAgICAgICAgICAgICAgICAgICAgc3Rh
cnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMubG9jLnN0YXJ0LmxpbmUs
CisgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMubG9jLnN0YXJ0LmNvbHVtbgor
ICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICBlbmQ6IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMubG9jLmVuZC5saW5lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgY29sdW1uOiB0aGlzLmxvYy5lbmQuY29sdW1uCisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIG5vZGUgPSBkZWxlZ2F0
ZS5wb3N0UHJvY2Vzcyhub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAg
ICBtYXJrZXIuYXBwbHkgPSBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgdmFyIG5vZGVU
eXBlID0gdHlwZW9mIG5vZGU7CisgICAgICAgICAgICBhc3NlcnQobm9kZVR5cGUgPT09ICJvYmpl
Y3QiLAorICAgICAgICAgICAgICAgICJBcHBseWluZyBsb2NhdGlvbiBtYXJrZXIgdG8gYW4gdW5l
eHBlY3RlZCBub2RlIHR5cGU6ICIgKworICAgICAgICAgICAgICAgICAgICBub2RlVHlwZSk7CisK
KyAgICAgICAgICAgIGlmIChleHRyYS5yYW5nZSkgeworICAgICAgICAgICAgICAgIG5vZGUucmFu
Z2UgPSBbdGhpcy5yYW5nZVswXSwgdGhpcy5yYW5nZVsxXV07CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoZXh0cmEubG9jKSB7CisgICAgICAgICAgICAgICAgbm9kZS5sb2MgPSB7Cisg
ICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5l
OiB0aGlzLmxvYy5zdGFydC5saW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB0
aGlzLmxvYy5zdGFydC5jb2x1bW4KKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
ICAgICAgICAgZW5kOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLmxvYy5l
bmQubGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5sb2MuZW5kLmNv
bHVtbgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgICAgICBub2RlID0gZGVsZWdhdGUucG9zdFByb2Nlc3Mobm9kZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH07CisKKyAgICAgICAgcmV0dXJuIG1hcmtlcjsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiB0cmFja0dyb3VwRXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFyIG1hcmtlciwgZXhwcjsK
KworICAgICAgICBza2lwQ29tbWVudCgpOworICAgICAgICBtYXJrZXIgPSBjcmVhdGVMb2NhdGlv
bk1hcmtlcigpOworICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAgICArK3N0YXRlLnBhcmVu
dGhlc2l6ZWRDb3VudDsKKworICAgICAgICBzdGF0ZS5hbGxvd0Fycm93RnVuY3Rpb24gPSAhc3Rh
dGUuYWxsb3dBcnJvd0Z1bmN0aW9uOworICAgICAgICBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7
CisgICAgICAgIHN0YXRlLmFsbG93QXJyb3dGdW5jdGlvbiA9IGZhbHNlOworCisgICAgICAgIGlm
IChleHByLnR5cGUgPT09ICdBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbicpIHsKKyAgICAgICAgICAg
IG1hcmtlci5lbmQoKTsKKyAgICAgICAgICAgIG1hcmtlci5hcHBseShleHByKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGV4cGVjdCgnKScpOworICAgICAgICAgICAgbWFya2VyLmVu
ZCgpOworICAgICAgICAgICAgbWFya2VyLmFwcGx5R3JvdXAoZXhwcik7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gZXhwcjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0cmFja0xlZnRIYW5k
U2lkZUV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciBtYXJrZXIsIGV4cHI7CisKKyAgICAgICAg
c2tpcENvbW1lbnQoKTsKKyAgICAgICAgbWFya2VyID0gY3JlYXRlTG9jYXRpb25NYXJrZXIoKTsK
KworICAgICAgICBleHByID0gbWF0Y2hLZXl3b3JkKCduZXcnKSA/IHBhcnNlTmV3RXhwcmVzc2lv
bigpIDogcGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpOworCisgICAgICAgIHdoaWxlIChtYXRjaCgn
LicpIHx8IG1hdGNoKCdbJykgfHwgbG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlRlbXBsYXRlKSB7
CisgICAgICAgICAgICBpZiAobWF0Y2goJ1snKSkgeworICAgICAgICAgICAgICAgIGV4cHIgPSBk
ZWxlZ2F0ZS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKCdbJywgZXhwciwgcGFyc2VDb21wdXRlZE1l
bWJlcigpKTsKKyAgICAgICAgICAgICAgICBtYXJrZXIuZW5kKCk7CisgICAgICAgICAgICAgICAg
bWFya2VyLmFwcGx5KGV4cHIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnLicpKSB7
CisgICAgICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZU1lbWJlckV4cHJlc3Npb24o
Jy4nLCBleHByLCBwYXJzZU5vbkNvbXB1dGVkTWVtYmVyKCkpOworICAgICAgICAgICAgICAgIG1h
cmtlci5lbmQoKTsKKyAgICAgICAgICAgICAgICBtYXJrZXIuYXBwbHkoZXhwcik7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVUYWdn
ZWRUZW1wbGF0ZUV4cHJlc3Npb24oZXhwciwgcGFyc2VUZW1wbGF0ZUxpdGVyYWwoKSk7CisgICAg
ICAgICAgICAgICAgbWFya2VyLmVuZCgpOworICAgICAgICAgICAgICAgIG1hcmtlci5hcHBseShl
eHByKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBleHByOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIHRyYWNrTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2Fs
bCgpIHsKKyAgICAgICAgdmFyIG1hcmtlciwgZXhwciwgYXJnczsKKworICAgICAgICBza2lwQ29t
bWVudCgpOworICAgICAgICBtYXJrZXIgPSBjcmVhdGVMb2NhdGlvbk1hcmtlcigpOworCisgICAg
ICAgIGV4cHIgPSBtYXRjaEtleXdvcmQoJ25ldycpID8gcGFyc2VOZXdFeHByZXNzaW9uKCkgOiBw
YXJzZVByaW1hcnlFeHByZXNzaW9uKCk7CisKKyAgICAgICAgd2hpbGUgKG1hdGNoKCcuJykgfHwg
bWF0Y2goJ1snKSB8fCBtYXRjaCgnKCcpIHx8IGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5UZW1w
bGF0ZSkgeworICAgICAgICAgICAgaWYgKG1hdGNoKCcoJykpIHsKKyAgICAgICAgICAgICAgICBh
cmdzID0gcGFyc2VBcmd1bWVudHMoKTsKKyAgICAgICAgICAgICAgICBleHByID0gZGVsZWdhdGUu
Y3JlYXRlQ2FsbEV4cHJlc3Npb24oZXhwciwgYXJncyk7CisgICAgICAgICAgICAgICAgbWFya2Vy
LmVuZCgpOworICAgICAgICAgICAgICAgIG1hcmtlci5hcHBseShleHByKTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAobWF0Y2goJ1snKSkgeworICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0
ZS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKCdbJywgZXhwciwgcGFyc2VDb21wdXRlZE1lbWJlcigp
KTsKKyAgICAgICAgICAgICAgICBtYXJrZXIuZW5kKCk7CisgICAgICAgICAgICAgICAgbWFya2Vy
LmFwcGx5KGV4cHIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnLicpKSB7CisgICAg
ICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZU1lbWJlckV4cHJlc3Npb24oJy4nLCBl
eHByLCBwYXJzZU5vbkNvbXB1dGVkTWVtYmVyKCkpOworICAgICAgICAgICAgICAgIG1hcmtlci5l
bmQoKTsKKyAgICAgICAgICAgICAgICBtYXJrZXIuYXBwbHkoZXhwcik7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVUYWdnZWRUZW1w
bGF0ZUV4cHJlc3Npb24oZXhwciwgcGFyc2VUZW1wbGF0ZUxpdGVyYWwoKSk7CisgICAgICAgICAg
ICAgICAgbWFya2VyLmVuZCgpOworICAgICAgICAgICAgICAgIG1hcmtlci5hcHBseShleHByKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBleHByOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGZpbHRlckdyb3VwKG5vZGUpIHsKKyAgICAgICAgdmFyIG4sIGksIGVu
dHJ5OworCisgICAgICAgIG4gPSAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseShub2Rl
KSA9PT0gJ1tvYmplY3QgQXJyYXldJykgPyBbXSA6IHt9OworICAgICAgICBmb3IgKGkgaW4gbm9k
ZSkgeworICAgICAgICAgICAgaWYgKG5vZGUuaGFzT3duUHJvcGVydHkoaSkgJiYgaSAhPT0gJ2dy
b3VwUmFuZ2UnICYmIGkgIT09ICdncm91cExvYycpIHsKKyAgICAgICAgICAgICAgICBlbnRyeSA9
IG5vZGVbaV07CisgICAgICAgICAgICAgICAgaWYgKGVudHJ5ID09PSBudWxsIHx8IHR5cGVvZiBl
bnRyeSAhPT0gJ29iamVjdCcgfHwgZW50cnkgaW5zdGFuY2VvZiBSZWdFeHApIHsKKyAgICAgICAg
ICAgICAgICAgICAgbltpXSA9IGVudHJ5OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIG5baV0gPSBmaWx0ZXJHcm91cChlbnRyeSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBuOworICAgIH0K
KworICAgIGZ1bmN0aW9uIHdyYXBUcmFja2luZ0Z1bmN0aW9uKHJhbmdlLCBsb2MsIHByZXNlcnZl
V2hpdGVzcGFjZSkgeworCisgICAgICAgIHJldHVybiBmdW5jdGlvbiAocGFyc2VGdW5jdGlvbikg
eworCisgICAgICAgICAgICBmdW5jdGlvbiBpc0JpbmFyeShub2RlKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gU3ludGF4LkxvZ2ljYWxFeHByZXNzaW9uIHx8CisgICAg
ICAgICAgICAgICAgICAgIG5vZGUudHlwZSA9PT0gU3ludGF4LkJpbmFyeUV4cHJlc3Npb247Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIHZpc2l0KG5vZGUpIHsKKyAgICAg
ICAgICAgICAgICB2YXIgc3RhcnQsIGVuZDsKKworICAgICAgICAgICAgICAgIGlmIChpc0JpbmFy
eShub2RlLmxlZnQpKSB7CisgICAgICAgICAgICAgICAgICAgIHZpc2l0KG5vZGUubGVmdCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpc0JpbmFyeShub2RlLnJpZ2h0
KSkgeworICAgICAgICAgICAgICAgICAgICB2aXNpdChub2RlLnJpZ2h0KTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAocmFuZ2UpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUubGVmdC5ncm91cFJhbmdlIHx8IG5vZGUucmlnaHQuZ3JvdXBSYW5nZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBub2RlLmxlZnQuZ3JvdXBSYW5nZSA/IG5v
ZGUubGVmdC5ncm91cFJhbmdlWzBdIDogbm9kZS5sZWZ0LnJhbmdlWzBdOworICAgICAgICAgICAg
ICAgICAgICAgICAgZW5kID0gbm9kZS5yaWdodC5ncm91cFJhbmdlID8gbm9kZS5yaWdodC5ncm91
cFJhbmdlWzFdIDogbm9kZS5yaWdodC5yYW5nZVsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGUucmFuZ2UgPSBbc3RhcnQsIGVuZF07CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAodHlwZW9mIG5vZGUucmFuZ2UgPT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzdGFydCA9IG5vZGUubGVmdC5yYW5nZVswXTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVuZCA9IG5vZGUucmlnaHQucmFuZ2VbMV07CisgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLnJhbmdlID0gW3N0YXJ0LCBlbmRdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChsb2MpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUubGVmdC5ncm91cExvYyB8fCBub2RlLnJpZ2h0Lmdyb3VwTG9jKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBzdGFydCA9IG5vZGUubGVmdC5ncm91cExvYyA/IG5vZGUubGVm
dC5ncm91cExvYy5zdGFydCA6IG5vZGUubGVmdC5sb2Muc3RhcnQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICBlbmQgPSBub2RlLnJpZ2h0Lmdyb3VwTG9jID8gbm9kZS5yaWdodC5ncm91cExvYy5l
bmQgOiBub2RlLnJpZ2h0LmxvYy5lbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmxv
YyA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZW5kOiBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gZGVsZWdhdGUucG9zdFByb2Nlc3Mobm9k
ZSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5vZGUubG9jID09PSAn
dW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5sb2MgPSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG5vZGUubGVmdC5sb2Muc3RhcnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBub2RlLnJpZ2h0LmxvYy5lbmQKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gZGVsZWdh
dGUucG9zdFByb2Nlc3Mobm9kZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICAgICAgdmFyIG1hcmtlciwgbm9kZTsKKworICAgICAgICAgICAgICAgIGlm
ICghcHJlc2VydmVXaGl0ZXNwYWNlKSB7CisgICAgICAgICAgICAgICAgICAgIHNraXBDb21tZW50
KCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbWFya2VyID0gY3JlYXRl
TG9jYXRpb25NYXJrZXIoKTsKKyAgICAgICAgICAgICAgICBub2RlID0gcGFyc2VGdW5jdGlvbi5h
cHBseShudWxsLCBhcmd1bWVudHMpOworICAgICAgICAgICAgICAgIG1hcmtlci5lbmQoKTsKKwor
ICAgICAgICAgICAgICAgIGlmIChyYW5nZSAmJiB0eXBlb2Ygbm9kZS5yYW5nZSA9PT0gJ3VuZGVm
aW5lZCcpIHsKKyAgICAgICAgICAgICAgICAgICAgbWFya2VyLmFwcGx5KG5vZGUpOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChsb2MgJiYgdHlwZW9mIG5vZGUubG9j
ID09PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgICAgICBtYXJrZXIuYXBwbHkobm9k
ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGlzQmluYXJ5KG5v
ZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHZpc2l0KG5vZGUpOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICAgICAgfTsKKyAgICAg
ICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXRjaCgpIHsKKworICAgICAgICB2YXIgd3Jh
cFRyYWNraW5nLCB3cmFwVHJhY2tpbmdQcmVzZXJ2ZVdoaXRlc3BhY2U7CisKKyAgICAgICAgaWYg
KGV4dHJhLmNvbW1lbnRzKSB7CisgICAgICAgICAgICBleHRyYS5za2lwQ29tbWVudCA9IHNraXBD
b21tZW50OworICAgICAgICAgICAgc2tpcENvbW1lbnQgPSBzY2FuQ29tbWVudDsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChleHRyYS5yYW5nZSB8fCBleHRyYS5sb2MpIHsKKworICAgICAgICAg
ICAgZXh0cmEucGFyc2VHcm91cEV4cHJlc3Npb24gPSBwYXJzZUdyb3VwRXhwcmVzc2lvbjsKKyAg
ICAgICAgICAgIGV4dHJhLnBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbiA9IHBhcnNlTGVmdEhh
bmRTaWRlRXhwcmVzc2lvbjsKKyAgICAgICAgICAgIGV4dHJhLnBhcnNlTGVmdEhhbmRTaWRlRXhw
cmVzc2lvbkFsbG93Q2FsbCA9IHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbDsK
KyAgICAgICAgICAgIHBhcnNlR3JvdXBFeHByZXNzaW9uID0gdHJhY2tHcm91cEV4cHJlc3Npb247
CisgICAgICAgICAgICBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb24gPSB0cmFja0xlZnRIYW5k
U2lkZUV4cHJlc3Npb247CisgICAgICAgICAgICBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25B
bGxvd0NhbGwgPSB0cmFja0xlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGw7CisKKyAgICAg
ICAgICAgIHdyYXBUcmFja2luZyA9IHdyYXBUcmFja2luZ0Z1bmN0aW9uKGV4dHJhLnJhbmdlLCBl
eHRyYS5sb2MpOworICAgICAgICAgICAgd3JhcFRyYWNraW5nUHJlc2VydmVXaGl0ZXNwYWNlID0K
KyAgICAgICAgICAgICAgICB3cmFwVHJhY2tpbmdGdW5jdGlvbihleHRyYS5yYW5nZSwgZXh0cmEu
bG9jLCB0cnVlKTsKKworICAgICAgICAgICAgZXh0cmEucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lv
biA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb247CisgICAgICAgICAgICBleHRyYS5wYXJzZUJp
bmFyeUV4cHJlc3Npb24gPSBwYXJzZUJpbmFyeUV4cHJlc3Npb247CisgICAgICAgICAgICBleHRy
YS5wYXJzZUJsb2NrID0gcGFyc2VCbG9jazsKKyAgICAgICAgICAgIGV4dHJhLnBhcnNlRnVuY3Rp
b25Tb3VyY2VFbGVtZW50cyA9IHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50czsKKyAgICAgICAg
ICAgIGV4dHJhLnBhcnNlQ2F0Y2hDbGF1c2UgPSBwYXJzZUNhdGNoQ2xhdXNlOworICAgICAgICAg
ICAgZXh0cmEucGFyc2VDb21wdXRlZE1lbWJlciA9IHBhcnNlQ29tcHV0ZWRNZW1iZXI7CisgICAg
ICAgICAgICBleHRyYS5wYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbiA9IHBhcnNlQ29uZGl0aW9u
YWxFeHByZXNzaW9uOworICAgICAgICAgICAgZXh0cmEucGFyc2VDb25zdExldERlY2xhcmF0aW9u
ID0gcGFyc2VDb25zdExldERlY2xhcmF0aW9uOworICAgICAgICAgICAgZXh0cmEucGFyc2VFeHBv
cnREZWNsYXJhdGlvbiA9IHBhcnNlRXhwb3J0RGVjbGFyYXRpb247CisgICAgICAgICAgICBleHRy
YS5wYXJzZUV4cG9ydFNwZWNpZmllciA9IHBhcnNlRXhwb3J0U3BlY2lmaWVyOworICAgICAgICAg
ICAgZXh0cmEucGFyc2VFeHBvcnRTcGVjaWZpZXJTZXRQcm9wZXJ0eSA9IHBhcnNlRXhwb3J0U3Bl
Y2lmaWVyU2V0UHJvcGVydHk7CisgICAgICAgICAgICBleHRyYS5wYXJzZUV4cHJlc3Npb24gPSBw
YXJzZUV4cHJlc3Npb247CisgICAgICAgICAgICBleHRyYS5wYXJzZUZvclZhcmlhYmxlRGVjbGFy
YXRpb24gPSBwYXJzZUZvclZhcmlhYmxlRGVjbGFyYXRpb247CisgICAgICAgICAgICBleHRyYS5w
YXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24gPSBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb247CisgICAg
ICAgICAgICBleHRyYS5wYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbiA9IHBhcnNlRnVuY3Rpb25FeHBy
ZXNzaW9uOworICAgICAgICAgICAgZXh0cmEucGFyc2VQYXJhbXMgPSBwYXJzZVBhcmFtczsKKyAg
ICAgICAgICAgIGV4dHJhLnBhcnNlR2xvYiA9IHBhcnNlR2xvYjsKKyAgICAgICAgICAgIGV4dHJh
LnBhcnNlSW1wb3J0RGVjbGFyYXRpb24gPSBwYXJzZUltcG9ydERlY2xhcmF0aW9uOworICAgICAg
ICAgICAgZXh0cmEucGFyc2VJbXBvcnRTcGVjaWZpZXIgPSBwYXJzZUltcG9ydFNwZWNpZmllcjsK
KyAgICAgICAgICAgIGV4dHJhLnBhcnNlTW9kdWxlRGVjbGFyYXRpb24gPSBwYXJzZU1vZHVsZURl
Y2xhcmF0aW9uOworICAgICAgICAgICAgZXh0cmEucGFyc2VNb2R1bGVCbG9jayA9IHBhcnNlTW9k
dWxlQmxvY2s7CisgICAgICAgICAgICBleHRyYS5wYXJzZU5ld0V4cHJlc3Npb24gPSBwYXJzZU5l
d0V4cHJlc3Npb247CisgICAgICAgICAgICBleHRyYS5wYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkg
PSBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHk7CisgICAgICAgICAgICBleHRyYS5wYXJzZU9iamVj
dFByb3BlcnR5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eTsKKyAgICAgICAgICAgIGV4dHJhLnBhcnNl
T2JqZWN0UHJvcGVydHlLZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5OworICAgICAgICAgICAg
ZXh0cmEucGFyc2VQYXRoID0gcGFyc2VQYXRoOworICAgICAgICAgICAgZXh0cmEucGFyc2VQb3N0
Zml4RXhwcmVzc2lvbiA9IHBhcnNlUG9zdGZpeEV4cHJlc3Npb247CisgICAgICAgICAgICBleHRy
YS5wYXJzZVByaW1hcnlFeHByZXNzaW9uID0gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbjsKKyAgICAg
ICAgICAgIGV4dHJhLnBhcnNlUHJvZ3JhbSA9IHBhcnNlUHJvZ3JhbTsKKyAgICAgICAgICAgIGV4
dHJhLnBhcnNlUHJvcGVydHlGdW5jdGlvbiA9IHBhcnNlUHJvcGVydHlGdW5jdGlvbjsKKyAgICAg
ICAgICAgIGV4dHJhLnBhcnNlU3ByZWFkT3JBc3NpZ25tZW50RXhwcmVzc2lvbiA9IHBhcnNlU3By
ZWFkT3JBc3NpZ25tZW50RXhwcmVzc2lvbjsKKyAgICAgICAgICAgIGV4dHJhLnBhcnNlVGVtcGxh
dGVFbGVtZW50ID0gcGFyc2VUZW1wbGF0ZUVsZW1lbnQ7CisgICAgICAgICAgICBleHRyYS5wYXJz
ZVRlbXBsYXRlTGl0ZXJhbCA9IHBhcnNlVGVtcGxhdGVMaXRlcmFsOworICAgICAgICAgICAgZXh0
cmEucGFyc2VTdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudDsKKyAgICAgICAgICAgIGV4dHJhLnBh
cnNlU3dpdGNoQ2FzZSA9IHBhcnNlU3dpdGNoQ2FzZTsKKyAgICAgICAgICAgIGV4dHJhLnBhcnNl
VW5hcnlFeHByZXNzaW9uID0gcGFyc2VVbmFyeUV4cHJlc3Npb247CisgICAgICAgICAgICBleHRy
YS5wYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24gPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb247Cisg
ICAgICAgICAgICBleHRyYS5wYXJzZVZhcmlhYmxlSWRlbnRpZmllciA9IHBhcnNlVmFyaWFibGVJ
ZGVudGlmaWVyOworICAgICAgICAgICAgZXh0cmEucGFyc2VNZXRob2REZWZpbml0aW9uID0gcGFy
c2VNZXRob2REZWZpbml0aW9uOworICAgICAgICAgICAgZXh0cmEucGFyc2VDbGFzc0RlY2xhcmF0
aW9uID0gcGFyc2VDbGFzc0RlY2xhcmF0aW9uOworICAgICAgICAgICAgZXh0cmEucGFyc2VDbGFz
c0V4cHJlc3Npb24gPSBwYXJzZUNsYXNzRXhwcmVzc2lvbjsKKyAgICAgICAgICAgIGV4dHJhLnBh
cnNlQ2xhc3NCb2R5ID0gcGFyc2VDbGFzc0JvZHk7CisgICAgICAgICAgICBleHRyYS5wYXJzZVhK
U0lkZW50aWZpZXIgPSBwYXJzZVhKU0lkZW50aWZpZXI7CisgICAgICAgICAgICBleHRyYS5wYXJz
ZVhKU0NoaWxkID0gcGFyc2VYSlNDaGlsZDsKKyAgICAgICAgICAgIGV4dHJhLnBhcnNlWEpTQXR0
cmlidXRlID0gcGFyc2VYSlNBdHRyaWJ1dGU7CisgICAgICAgICAgICBleHRyYS5wYXJzZVhKU0F0
dHJpYnV0ZVZhbHVlID0gcGFyc2VYSlNBdHRyaWJ1dGVWYWx1ZTsKKyAgICAgICAgICAgIGV4dHJh
LnBhcnNlWEpTRXhwcmVzc2lvbkNvbnRhaW5lciA9IHBhcnNlWEpTRXhwcmVzc2lvbkNvbnRhaW5l
cjsKKyAgICAgICAgICAgIGV4dHJhLnBhcnNlWEpTRW1wdHlFeHByZXNzaW9uID0gcGFyc2VYSlNF
bXB0eUV4cHJlc3Npb247CisgICAgICAgICAgICBleHRyYS5wYXJzZVhKU0VsZW1lbnQgPSBwYXJz
ZVhKU0VsZW1lbnQ7CisgICAgICAgICAgICBleHRyYS5wYXJzZVhKU0Nsb3NpbmdFbGVtZW50ID0g
cGFyc2VYSlNDbG9zaW5nRWxlbWVudDsKKyAgICAgICAgICAgIGV4dHJhLnBhcnNlWEpTT3Blbmlu
Z0VsZW1lbnQgPSBwYXJzZVhKU09wZW5pbmdFbGVtZW50OworCisgICAgICAgICAgICBwYXJzZUFz
c2lnbm1lbnRFeHByZXNzaW9uID0gd3JhcFRyYWNraW5nKGV4dHJhLnBhcnNlQXNzaWdubWVudEV4
cHJlc3Npb24pOworICAgICAgICAgICAgcGFyc2VCaW5hcnlFeHByZXNzaW9uID0gd3JhcFRyYWNr
aW5nKGV4dHJhLnBhcnNlQmluYXJ5RXhwcmVzc2lvbik7CisgICAgICAgICAgICBwYXJzZUJsb2Nr
ID0gd3JhcFRyYWNraW5nKGV4dHJhLnBhcnNlQmxvY2spOworICAgICAgICAgICAgcGFyc2VGdW5j
dGlvblNvdXJjZUVsZW1lbnRzID0gd3JhcFRyYWNraW5nKGV4dHJhLnBhcnNlRnVuY3Rpb25Tb3Vy
Y2VFbGVtZW50cyk7CisgICAgICAgICAgICBwYXJzZUNhdGNoQ2xhdXNlID0gd3JhcFRyYWNraW5n
KGV4dHJhLnBhcnNlQ2F0Y2hDbGF1c2UpOworICAgICAgICAgICAgcGFyc2VDb21wdXRlZE1lbWJl
ciA9IHdyYXBUcmFja2luZyhleHRyYS5wYXJzZUNvbXB1dGVkTWVtYmVyKTsKKyAgICAgICAgICAg
IHBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uID0gd3JhcFRyYWNraW5nKGV4dHJhLnBhcnNlQ29u
ZGl0aW9uYWxFeHByZXNzaW9uKTsKKyAgICAgICAgICAgIHBhcnNlQ29uc3RMZXREZWNsYXJhdGlv
biA9IHdyYXBUcmFja2luZyhleHRyYS5wYXJzZUNvbnN0TGV0RGVjbGFyYXRpb24pOworICAgICAg
ICAgICAgcGFyc2VFeHBvcnREZWNsYXJhdGlvbiA9IHdyYXBUcmFja2luZyhwYXJzZUV4cG9ydERl
Y2xhcmF0aW9uKTsKKyAgICAgICAgICAgIHBhcnNlRXhwb3J0U3BlY2lmaWVyID0gd3JhcFRyYWNr
aW5nKHBhcnNlRXhwb3J0U3BlY2lmaWVyKTsKKyAgICAgICAgICAgIHBhcnNlRXhwb3J0U3BlY2lm
aWVyU2V0UHJvcGVydHkgPSB3cmFwVHJhY2tpbmcocGFyc2VFeHBvcnRTcGVjaWZpZXJTZXRQcm9w
ZXJ0eSk7CisgICAgICAgICAgICBwYXJzZUV4cHJlc3Npb24gPSB3cmFwVHJhY2tpbmcoZXh0cmEu
cGFyc2VFeHByZXNzaW9uKTsKKyAgICAgICAgICAgIHBhcnNlRm9yVmFyaWFibGVEZWNsYXJhdGlv
biA9IHdyYXBUcmFja2luZyhleHRyYS5wYXJzZUZvclZhcmlhYmxlRGVjbGFyYXRpb24pOworICAg
ICAgICAgICAgcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uID0gd3JhcFRyYWNraW5nKGV4dHJhLnBh
cnNlRnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgICAgICAgICBwYXJzZUZ1bmN0aW9uRXhwcmVz
c2lvbiA9IHdyYXBUcmFja2luZyhleHRyYS5wYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbik7CisgICAg
ICAgICAgICBwYXJzZVBhcmFtcyA9IHdyYXBUcmFja2luZyhleHRyYS5wYXJzZVBhcmFtcyk7Cisg
ICAgICAgICAgICBwYXJzZUdsb2IgPSB3cmFwVHJhY2tpbmcoZXh0cmEucGFyc2VHbG9iKTsKKyAg
ICAgICAgICAgIHBhcnNlSW1wb3J0RGVjbGFyYXRpb24gPSB3cmFwVHJhY2tpbmcoZXh0cmEucGFy
c2VJbXBvcnREZWNsYXJhdGlvbik7CisgICAgICAgICAgICBwYXJzZUltcG9ydFNwZWNpZmllciA9
IHdyYXBUcmFja2luZyhleHRyYS5wYXJzZUltcG9ydFNwZWNpZmllcik7CisgICAgICAgICAgICBw
YXJzZU1vZHVsZURlY2xhcmF0aW9uID0gd3JhcFRyYWNraW5nKGV4dHJhLnBhcnNlTW9kdWxlRGVj
bGFyYXRpb24pOworICAgICAgICAgICAgcGFyc2VNb2R1bGVCbG9jayA9IHdyYXBUcmFja2luZyhl
eHRyYS5wYXJzZU1vZHVsZUJsb2NrKTsKKyAgICAgICAgICAgIHBhcnNlTGVmdEhhbmRTaWRlRXhw
cmVzc2lvbiA9IHdyYXBUcmFja2luZyhwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb24pOworICAg
ICAgICAgICAgcGFyc2VOZXdFeHByZXNzaW9uID0gd3JhcFRyYWNraW5nKGV4dHJhLnBhcnNlTmV3
RXhwcmVzc2lvbik7CisgICAgICAgICAgICBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkgPSB3cmFw
VHJhY2tpbmcoZXh0cmEucGFyc2VOb25Db21wdXRlZFByb3BlcnR5KTsKKyAgICAgICAgICAgIHBh
cnNlT2JqZWN0UHJvcGVydHkgPSB3cmFwVHJhY2tpbmcoZXh0cmEucGFyc2VPYmplY3RQcm9wZXJ0
eSk7CisgICAgICAgICAgICBwYXJzZU9iamVjdFByb3BlcnR5S2V5ID0gd3JhcFRyYWNraW5nKGV4
dHJhLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkpOworICAgICAgICAgICAgcGFyc2VQYXRoID0gd3Jh
cFRyYWNraW5nKGV4dHJhLnBhcnNlUGF0aCk7CisgICAgICAgICAgICBwYXJzZVBvc3RmaXhFeHBy
ZXNzaW9uID0gd3JhcFRyYWNraW5nKGV4dHJhLnBhcnNlUG9zdGZpeEV4cHJlc3Npb24pOworICAg
ICAgICAgICAgcGFyc2VQcmltYXJ5RXhwcmVzc2lvbiA9IHdyYXBUcmFja2luZyhleHRyYS5wYXJz
ZVByaW1hcnlFeHByZXNzaW9uKTsKKyAgICAgICAgICAgIHBhcnNlUHJvZ3JhbSA9IHdyYXBUcmFj
a2luZyhleHRyYS5wYXJzZVByb2dyYW0pOworICAgICAgICAgICAgcGFyc2VQcm9wZXJ0eUZ1bmN0
aW9uID0gd3JhcFRyYWNraW5nKGV4dHJhLnBhcnNlUHJvcGVydHlGdW5jdGlvbik7CisgICAgICAg
ICAgICBwYXJzZVRlbXBsYXRlRWxlbWVudCA9IHdyYXBUcmFja2luZyhleHRyYS5wYXJzZVRlbXBs
YXRlRWxlbWVudCk7CisgICAgICAgICAgICBwYXJzZVRlbXBsYXRlTGl0ZXJhbCA9IHdyYXBUcmFj
a2luZyhleHRyYS5wYXJzZVRlbXBsYXRlTGl0ZXJhbCk7CisgICAgICAgICAgICBwYXJzZVNwcmVh
ZE9yQXNzaWdubWVudEV4cHJlc3Npb24gPSB3cmFwVHJhY2tpbmcoZXh0cmEucGFyc2VTcHJlYWRP
ckFzc2lnbm1lbnRFeHByZXNzaW9uKTsKKyAgICAgICAgICAgIHBhcnNlU3RhdGVtZW50ID0gd3Jh
cFRyYWNraW5nKGV4dHJhLnBhcnNlU3RhdGVtZW50KTsKKyAgICAgICAgICAgIHBhcnNlU3dpdGNo
Q2FzZSA9IHdyYXBUcmFja2luZyhleHRyYS5wYXJzZVN3aXRjaENhc2UpOworICAgICAgICAgICAg
cGFyc2VVbmFyeUV4cHJlc3Npb24gPSB3cmFwVHJhY2tpbmcoZXh0cmEucGFyc2VVbmFyeUV4cHJl
c3Npb24pOworICAgICAgICAgICAgcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uID0gd3JhcFRyYWNr
aW5nKGV4dHJhLnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbik7CisgICAgICAgICAgICBwYXJzZVZh
cmlhYmxlSWRlbnRpZmllciA9IHdyYXBUcmFja2luZyhleHRyYS5wYXJzZVZhcmlhYmxlSWRlbnRp
Zmllcik7CisgICAgICAgICAgICBwYXJzZU1ldGhvZERlZmluaXRpb24gPSB3cmFwVHJhY2tpbmco
ZXh0cmEucGFyc2VNZXRob2REZWZpbml0aW9uKTsKKyAgICAgICAgICAgIHBhcnNlQ2xhc3NEZWNs
YXJhdGlvbiA9IHdyYXBUcmFja2luZyhleHRyYS5wYXJzZUNsYXNzRGVjbGFyYXRpb24pOworICAg
ICAgICAgICAgcGFyc2VDbGFzc0V4cHJlc3Npb24gPSB3cmFwVHJhY2tpbmcoZXh0cmEucGFyc2VD
bGFzc0V4cHJlc3Npb24pOworICAgICAgICAgICAgcGFyc2VDbGFzc0JvZHkgPSB3cmFwVHJhY2tp
bmcoZXh0cmEucGFyc2VDbGFzc0JvZHkpOworICAgICAgICAgICAgcGFyc2VYSlNJZGVudGlmaWVy
ID0gd3JhcFRyYWNraW5nKGV4dHJhLnBhcnNlWEpTSWRlbnRpZmllcik7CisgICAgICAgICAgICBw
YXJzZVhKU0NoaWxkID0gd3JhcFRyYWNraW5nUHJlc2VydmVXaGl0ZXNwYWNlKGV4dHJhLnBhcnNl
WEpTQ2hpbGQpOworICAgICAgICAgICAgcGFyc2VYSlNBdHRyaWJ1dGUgPSB3cmFwVHJhY2tpbmco
ZXh0cmEucGFyc2VYSlNBdHRyaWJ1dGUpOworICAgICAgICAgICAgcGFyc2VYSlNBdHRyaWJ1dGVW
YWx1ZSA9IHdyYXBUcmFja2luZyhleHRyYS5wYXJzZVhKU0F0dHJpYnV0ZVZhbHVlKTsKKyAgICAg
ICAgICAgIHBhcnNlWEpTRXhwcmVzc2lvbkNvbnRhaW5lciA9IHdyYXBUcmFja2luZyhleHRyYS5w
YXJzZVhKU0V4cHJlc3Npb25Db250YWluZXIpOworICAgICAgICAgICAgcGFyc2VYSlNFbXB0eUV4
cHJlc3Npb24gPSB3cmFwVHJhY2tpbmdQcmVzZXJ2ZVdoaXRlc3BhY2UoZXh0cmEucGFyc2VYSlNF
bXB0eUV4cHJlc3Npb24pOworICAgICAgICAgICAgcGFyc2VYSlNFbGVtZW50ID0gd3JhcFRyYWNr
aW5nKGV4dHJhLnBhcnNlWEpTRWxlbWVudCk7CisgICAgICAgICAgICBwYXJzZVhKU0Nsb3NpbmdF
bGVtZW50ID0gd3JhcFRyYWNraW5nKGV4dHJhLnBhcnNlWEpTQ2xvc2luZ0VsZW1lbnQpOworICAg
ICAgICAgICAgcGFyc2VYSlNPcGVuaW5nRWxlbWVudCA9IHdyYXBUcmFja2luZyhleHRyYS5wYXJz
ZVhKU09wZW5pbmdFbGVtZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlb2YgZXh0
cmEudG9rZW5zICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgZXh0cmEuYWR2YW5jZSA9
IGFkdmFuY2U7CisgICAgICAgICAgICBleHRyYS5zY2FuUmVnRXhwID0gc2NhblJlZ0V4cDsKKwor
ICAgICAgICAgICAgYWR2YW5jZSA9IGNvbGxlY3RUb2tlbjsKKyAgICAgICAgICAgIHNjYW5SZWdF
eHAgPSBjb2xsZWN0UmVnZXg7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiB1bnBh
dGNoKCkgeworICAgICAgICBpZiAodHlwZW9mIGV4dHJhLnNraXBDb21tZW50ID09PSAnZnVuY3Rp
b24nKSB7CisgICAgICAgICAgICBza2lwQ29tbWVudCA9IGV4dHJhLnNraXBDb21tZW50OworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGV4dHJhLnJhbmdlIHx8IGV4dHJhLmxvYykgeworICAgICAg
ICAgICAgcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbiA9IGV4dHJhLnBhcnNlQXNzaWdubWVudEV4
cHJlc3Npb247CisgICAgICAgICAgICBwYXJzZUJpbmFyeUV4cHJlc3Npb24gPSBleHRyYS5wYXJz
ZUJpbmFyeUV4cHJlc3Npb247CisgICAgICAgICAgICBwYXJzZUJsb2NrID0gZXh0cmEucGFyc2VC
bG9jazsKKyAgICAgICAgICAgIHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cyA9IGV4dHJhLnBh
cnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50czsKKyAgICAgICAgICAgIHBhcnNlQ2F0Y2hDbGF1c2Ug
PSBleHRyYS5wYXJzZUNhdGNoQ2xhdXNlOworICAgICAgICAgICAgcGFyc2VDb21wdXRlZE1lbWJl
ciA9IGV4dHJhLnBhcnNlQ29tcHV0ZWRNZW1iZXI7CisgICAgICAgICAgICBwYXJzZUNvbmRpdGlv
bmFsRXhwcmVzc2lvbiA9IGV4dHJhLnBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uOworICAgICAg
ICAgICAgcGFyc2VDb25zdExldERlY2xhcmF0aW9uID0gZXh0cmEucGFyc2VDb25zdExldERlY2xh
cmF0aW9uOworICAgICAgICAgICAgcGFyc2VFeHBvcnREZWNsYXJhdGlvbiA9IGV4dHJhLnBhcnNl
RXhwb3J0RGVjbGFyYXRpb247CisgICAgICAgICAgICBwYXJzZUV4cG9ydFNwZWNpZmllciA9IGV4
dHJhLnBhcnNlRXhwb3J0U3BlY2lmaWVyOworICAgICAgICAgICAgcGFyc2VFeHBvcnRTcGVjaWZp
ZXJTZXRQcm9wZXJ0eSA9IGV4dHJhLnBhcnNlRXhwb3J0U3BlY2lmaWVyU2V0UHJvcGVydHk7Cisg
ICAgICAgICAgICBwYXJzZUV4cHJlc3Npb24gPSBleHRyYS5wYXJzZUV4cHJlc3Npb247CisgICAg
ICAgICAgICBwYXJzZUZvclZhcmlhYmxlRGVjbGFyYXRpb24gPSBleHRyYS5wYXJzZUZvclZhcmlh
YmxlRGVjbGFyYXRpb247CisgICAgICAgICAgICBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24gPSBl
eHRyYS5wYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb247CisgICAgICAgICAgICBwYXJzZUZ1bmN0aW9u
RXhwcmVzc2lvbiA9IGV4dHJhLnBhcnNlRnVuY3Rpb25FeHByZXNzaW9uOworICAgICAgICAgICAg
cGFyc2VHbG9iID0gZXh0cmEucGFyc2VHbG9iOworICAgICAgICAgICAgcGFyc2VJbXBvcnREZWNs
YXJhdGlvbiA9IGV4dHJhLnBhcnNlSW1wb3J0RGVjbGFyYXRpb247CisgICAgICAgICAgICBwYXJz
ZUltcG9ydFNwZWNpZmllciA9IGV4dHJhLnBhcnNlSW1wb3J0U3BlY2lmaWVyOworICAgICAgICAg
ICAgcGFyc2VHcm91cEV4cHJlc3Npb24gPSBleHRyYS5wYXJzZUdyb3VwRXhwcmVzc2lvbjsKKyAg
ICAgICAgICAgIHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbiA9IGV4dHJhLnBhcnNlTGVmdEhh
bmRTaWRlRXhwcmVzc2lvbjsKKyAgICAgICAgICAgIHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lv
bkFsbG93Q2FsbCA9IGV4dHJhLnBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbDsK
KyAgICAgICAgICAgIHBhcnNlTW9kdWxlRGVjbGFyYXRpb24gPSBleHRyYS5wYXJzZU1vZHVsZURl
Y2xhcmF0aW9uOworICAgICAgICAgICAgcGFyc2VNb2R1bGVCbG9jayA9IGV4dHJhLnBhcnNlTW9k
dWxlQmxvY2s7CisgICAgICAgICAgICBwYXJzZU5ld0V4cHJlc3Npb24gPSBleHRyYS5wYXJzZU5l
d0V4cHJlc3Npb247CisgICAgICAgICAgICBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkgPSBleHRy
YS5wYXJzZU5vbkNvbXB1dGVkUHJvcGVydHk7CisgICAgICAgICAgICBwYXJzZU9iamVjdFByb3Bl
cnR5ID0gZXh0cmEucGFyc2VPYmplY3RQcm9wZXJ0eTsKKyAgICAgICAgICAgIHBhcnNlT2JqZWN0
UHJvcGVydHlLZXkgPSBleHRyYS5wYXJzZU9iamVjdFByb3BlcnR5S2V5OworICAgICAgICAgICAg
cGFyc2VQYXRoID0gZXh0cmEucGFyc2VQYXRoOworICAgICAgICAgICAgcGFyc2VQb3N0Zml4RXhw
cmVzc2lvbiA9IGV4dHJhLnBhcnNlUG9zdGZpeEV4cHJlc3Npb247CisgICAgICAgICAgICBwYXJz
ZVByaW1hcnlFeHByZXNzaW9uID0gZXh0cmEucGFyc2VQcmltYXJ5RXhwcmVzc2lvbjsKKyAgICAg
ICAgICAgIHBhcnNlUHJvZ3JhbSA9IGV4dHJhLnBhcnNlUHJvZ3JhbTsKKyAgICAgICAgICAgIHBh
cnNlUHJvcGVydHlGdW5jdGlvbiA9IGV4dHJhLnBhcnNlUHJvcGVydHlGdW5jdGlvbjsKKyAgICAg
ICAgICAgIHBhcnNlVGVtcGxhdGVFbGVtZW50ID0gZXh0cmEucGFyc2VUZW1wbGF0ZUVsZW1lbnQ7
CisgICAgICAgICAgICBwYXJzZVRlbXBsYXRlTGl0ZXJhbCA9IGV4dHJhLnBhcnNlVGVtcGxhdGVM
aXRlcmFsOworICAgICAgICAgICAgcGFyc2VTcHJlYWRPckFzc2lnbm1lbnRFeHByZXNzaW9uID0g
ZXh0cmEucGFyc2VTcHJlYWRPckFzc2lnbm1lbnRFeHByZXNzaW9uOworICAgICAgICAgICAgcGFy
c2VTdGF0ZW1lbnQgPSBleHRyYS5wYXJzZVN0YXRlbWVudDsKKyAgICAgICAgICAgIHBhcnNlU3dp
dGNoQ2FzZSA9IGV4dHJhLnBhcnNlU3dpdGNoQ2FzZTsKKyAgICAgICAgICAgIHBhcnNlVW5hcnlF
eHByZXNzaW9uID0gZXh0cmEucGFyc2VVbmFyeUV4cHJlc3Npb247CisgICAgICAgICAgICBwYXJz
ZVZhcmlhYmxlRGVjbGFyYXRpb24gPSBleHRyYS5wYXJzZVZhcmlhYmxlRGVjbGFyYXRpb247Cisg
ICAgICAgICAgICBwYXJzZVZhcmlhYmxlSWRlbnRpZmllciA9IGV4dHJhLnBhcnNlVmFyaWFibGVJ
ZGVudGlmaWVyOworICAgICAgICAgICAgcGFyc2VNZXRob2REZWZpbml0aW9uID0gZXh0cmEucGFy
c2VNZXRob2REZWZpbml0aW9uOworICAgICAgICAgICAgcGFyc2VDbGFzc0RlY2xhcmF0aW9uID0g
ZXh0cmEucGFyc2VDbGFzc0RlY2xhcmF0aW9uOworICAgICAgICAgICAgcGFyc2VDbGFzc0V4cHJl
c3Npb24gPSBleHRyYS5wYXJzZUNsYXNzRXhwcmVzc2lvbjsKKyAgICAgICAgICAgIHBhcnNlQ2xh
c3NCb2R5ID0gZXh0cmEucGFyc2VDbGFzc0JvZHk7CisgICAgICAgICAgICBwYXJzZVhKU0lkZW50
aWZpZXIgPSBleHRyYS5wYXJzZVhKU0lkZW50aWZpZXI7CisgICAgICAgICAgICBwYXJzZVhKU0No
aWxkID0gZXh0cmEucGFyc2VYSlNDaGlsZDsKKyAgICAgICAgICAgIHBhcnNlWEpTQXR0cmlidXRl
ID0gZXh0cmEucGFyc2VYSlNBdHRyaWJ1dGU7CisgICAgICAgICAgICBwYXJzZVhKU0F0dHJpYnV0
ZVZhbHVlID0gZXh0cmEucGFyc2VYSlNBdHRyaWJ1dGVWYWx1ZTsKKyAgICAgICAgICAgIHBhcnNl
WEpTRXhwcmVzc2lvbkNvbnRhaW5lciA9IGV4dHJhLnBhcnNlWEpTRXhwcmVzc2lvbkNvbnRhaW5l
cjsKKyAgICAgICAgICAgIHBhcnNlWEpTRW1wdHlFeHByZXNzaW9uID0gZXh0cmEucGFyc2VYSlNF
bXB0eUV4cHJlc3Npb247CisgICAgICAgICAgICBwYXJzZVhKU0VsZW1lbnQgPSBleHRyYS5wYXJz
ZVhKU0VsZW1lbnQ7CisgICAgICAgICAgICBwYXJzZVhKU0Nsb3NpbmdFbGVtZW50ID0gZXh0cmEu
cGFyc2VYSlNDbG9zaW5nRWxlbWVudDsKKyAgICAgICAgICAgIHBhcnNlWEpTT3BlbmluZ0VsZW1l
bnQgPSBleHRyYS5wYXJzZVhKU09wZW5pbmdFbGVtZW50OworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHR5cGVvZiBleHRyYS5zY2FuUmVnRXhwID09PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAg
ICBhZHZhbmNlID0gZXh0cmEuYWR2YW5jZTsKKyAgICAgICAgICAgIHNjYW5SZWdFeHAgPSBleHRy
YS5zY2FuUmVnRXhwOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhpcyBpcyB1c2VkIHRv
IG1vZGlmeSB0aGUgZGVsZWdhdGUuCisKKyAgICBmdW5jdGlvbiBleHRlbmQob2JqZWN0LCBwcm9w
ZXJ0aWVzKSB7CisgICAgICAgIHZhciBlbnRyeSwgcmVzdWx0ID0ge307CisKKyAgICAgICAgZm9y
IChlbnRyeSBpbiBvYmplY3QpIHsKKyAgICAgICAgICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVy
dHkoZW50cnkpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0W2VudHJ5XSA9IG9iamVjdFtlbnRy
eV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGVudHJ5IGluIHBy
b3BlcnRpZXMpIHsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KGVu
dHJ5KSkgeworICAgICAgICAgICAgICAgIHJlc3VsdFtlbnRyeV0gPSBwcm9wZXJ0aWVzW2VudHJ5
XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gdG9rZW5pemUoY29kZSwgb3B0aW9ucykgeworICAgICAgICB2
YXIgdG9TdHJpbmcsCisgICAgICAgICAgICB0b2tlbiwKKyAgICAgICAgICAgIHRva2VuczsKKwor
ICAgICAgICB0b1N0cmluZyA9IFN0cmluZzsKKyAgICAgICAgaWYgKHR5cGVvZiBjb2RlICE9PSAn
c3RyaW5nJyAmJiAhKGNvZGUgaW5zdGFuY2VvZiBTdHJpbmcpKSB7CisgICAgICAgICAgICBjb2Rl
ID0gdG9TdHJpbmcoY29kZSk7CisgICAgICAgIH0KKworICAgICAgICBkZWxlZ2F0ZSA9IFN5bnRh
eFRyZWVEZWxlZ2F0ZTsKKyAgICAgICAgc291cmNlID0gY29kZTsKKyAgICAgICAgaW5kZXggPSAw
OworICAgICAgICBsaW5lTnVtYmVyID0gKHNvdXJjZS5sZW5ndGggPiAwKSA/IDEgOiAwOworICAg
ICAgICBsaW5lU3RhcnQgPSAwOworICAgICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoOworICAg
ICAgICBsb29rYWhlYWQgPSBudWxsOworICAgICAgICBzdGF0ZSA9IHsKKyAgICAgICAgICAgIGFs
bG93SW46IHRydWUsCisgICAgICAgICAgICBsYWJlbFNldDoge30sCisgICAgICAgICAgICBpbkZ1
bmN0aW9uQm9keTogZmFsc2UsCisgICAgICAgICAgICBpbkl0ZXJhdGlvbjogZmFsc2UsCisgICAg
ICAgICAgICBpblN3aXRjaDogZmFsc2UKKyAgICAgICAgfTsKKworICAgICAgICBleHRyYSA9IHt9
OworCisgICAgICAgIC8vIE9wdGlvbnMgbWF0Y2hpbmcuCisgICAgICAgIG9wdGlvbnMgPSBvcHRp
b25zIHx8IHt9OworCisgICAgICAgIC8vIE9mIGNvdXJzZSB3ZSBjb2xsZWN0IHRva2VucyBoZXJl
LgorICAgICAgICBvcHRpb25zLnRva2VucyA9IHRydWU7CisgICAgICAgIGV4dHJhLnRva2VucyA9
IFtdOworICAgICAgICBleHRyYS50b2tlbml6ZSA9IHRydWU7CisgICAgICAgIC8vIFRoZSBmb2xs
b3dpbmcgdHdvIGZpZWxkcyBhcmUgbmVjZXNzYXJ5IHRvIGNvbXB1dGUgdGhlIFJlZ2V4IHRva2Vu
cy4KKyAgICAgICAgZXh0cmEub3BlblBhcmVuVG9rZW4gPSAtMTsKKyAgICAgICAgZXh0cmEub3Bl
bkN1cmx5VG9rZW4gPSAtMTsKKworICAgICAgICBleHRyYS5yYW5nZSA9ICh0eXBlb2Ygb3B0aW9u
cy5yYW5nZSA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLnJhbmdlOworICAgICAgICBleHRyYS5s
b2MgPSAodHlwZW9mIG9wdGlvbnMubG9jID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMubG9jOwor
CisgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb21tZW50ID09PSAnYm9vbGVhbicgJiYgb3B0
aW9ucy5jb21tZW50KSB7CisgICAgICAgICAgICBleHRyYS5jb21tZW50cyA9IFtdOworICAgICAg
ICB9CisgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50b2xlcmFudCA9PT0gJ2Jvb2xlYW4nICYm
IG9wdGlvbnMudG9sZXJhbnQpIHsKKyAgICAgICAgICAgIGV4dHJhLmVycm9ycyA9IFtdOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIGlmICh0eXBl
b2Ygc291cmNlWzBdID09PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIC8vIFRyeSBm
aXJzdCB0byBjb252ZXJ0IHRvIGEgc3RyaW5nLiBUaGlzIGlzIGdvb2QgYXMgZmFzdCBwYXRoCisg
ICAgICAgICAgICAgICAgLy8gZm9yIG9sZCBJRSB3aGljaCB1bmRlcnN0YW5kcyBzdHJpbmcgaW5k
ZXhpbmcgZm9yIHN0cmluZworICAgICAgICAgICAgICAgIC8vIGxpdGVyYWxzIG9ubHkgYW5kIG5v
dCBmb3Igc3RyaW5nIG9iamVjdC4KKyAgICAgICAgICAgICAgICBpZiAoY29kZSBpbnN0YW5jZW9m
IFN0cmluZykgeworICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSBjb2RlLnZhbHVlT2YoKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBw
YXRjaCgpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBwZWVrKCk7CisgICAgICAgICAg
ICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLkVPRikgeworICAgICAgICAgICAgICAgIHJl
dHVybiBleHRyYS50b2tlbnM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRva2VuID0g
bGV4KCk7CisgICAgICAgICAgICB3aGlsZSAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLkVPRikg
eworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHRva2VuID0gbGV4
KCk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAobGV4RXJyb3IpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgICAgICAgICAgICAgIGlmIChleHRyYS5l
cnJvcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLmVycm9ycy5wdXNoKGxleEVy
cm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gYnJlYWsgb24gdGhl
IGZpcnN0IGVycm9yCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCBpbmZpbml0
ZSBsb29wcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbGV4RXJyb3I7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGZpbHRlclRva2VuTG9jYXRpb24oKTsKKyAgICAgICAgICAgIHRva2VucyA9
IGV4dHJhLnRva2VuczsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmEuY29tbWVudHMgIT09
ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAgZmlsdGVyQ29tbWVudExvY2F0aW9uKCk7
CisgICAgICAgICAgICAgICAgdG9rZW5zLmNvbW1lbnRzID0gZXh0cmEuY29tbWVudHM7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhLmVycm9ycyAhPT0gJ3VuZGVm
aW5lZCcpIHsKKyAgICAgICAgICAgICAgICB0b2tlbnMuZXJyb3JzID0gZXh0cmEuZXJyb3JzOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICB0aHJvdyBl
OworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgdW5wYXRjaCgpOworICAgICAgICAg
ICAgZXh0cmEgPSB7fTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9rZW5zOworICAgIH0K
KworICAgIGZ1bmN0aW9uIHBhcnNlKGNvZGUsIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIHByb2dy
YW0sIHRvU3RyaW5nOworCisgICAgICAgIHRvU3RyaW5nID0gU3RyaW5nOworICAgICAgICBpZiAo
dHlwZW9mIGNvZGUgIT09ICdzdHJpbmcnICYmICEoY29kZSBpbnN0YW5jZW9mIFN0cmluZykpIHsK
KyAgICAgICAgICAgIGNvZGUgPSB0b1N0cmluZyhjb2RlKTsKKyAgICAgICAgfQorCisgICAgICAg
IGRlbGVnYXRlID0gU3ludGF4VHJlZURlbGVnYXRlOworICAgICAgICBzb3VyY2UgPSBjb2RlOwor
ICAgICAgICBpbmRleCA9IDA7CisgICAgICAgIGxpbmVOdW1iZXIgPSAoc291cmNlLmxlbmd0aCA+
IDApID8gMSA6IDA7CisgICAgICAgIGxpbmVTdGFydCA9IDA7CisgICAgICAgIGxlbmd0aCA9IHNv
dXJjZS5sZW5ndGg7CisgICAgICAgIGxvb2thaGVhZCA9IG51bGw7CisgICAgICAgIHN0YXRlID0g
eworICAgICAgICAgICAgYWxsb3dJbjogdHJ1ZSwKKyAgICAgICAgICAgIGxhYmVsU2V0OiB7fSwK
KyAgICAgICAgICAgIHBhcmVudGhlc2l6ZWRDb3VudDogMCwKKyAgICAgICAgICAgIGluRnVuY3Rp
b25Cb2R5OiBmYWxzZSwKKyAgICAgICAgICAgIGluSXRlcmF0aW9uOiBmYWxzZSwKKyAgICAgICAg
ICAgIGluU3dpdGNoOiBmYWxzZSwKKyAgICAgICAgICAgIHlpZWxkQWxsb3dlZDogZmFsc2UsCisg
ICAgICAgICAgICB5aWVsZEZvdW5kOiBmYWxzZQorICAgICAgICB9OworCisgICAgICAgIGV4dHJh
ID0ge307CisgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAg
ICAgICAgICAgIGV4dHJhLnJhbmdlID0gKHR5cGVvZiBvcHRpb25zLnJhbmdlID09PSAnYm9vbGVh
bicpICYmIG9wdGlvbnMucmFuZ2U7CisgICAgICAgICAgICBleHRyYS5sb2MgPSAodHlwZW9mIG9w
dGlvbnMubG9jID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMubG9jOworCisgICAgICAgICAgICBp
ZiAoZXh0cmEubG9jICYmIG9wdGlvbnMuc291cmNlICE9PSBudWxsICYmIG9wdGlvbnMuc291cmNl
ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICBkZWxlZ2F0ZSA9IGV4dGVuZChkZWxl
Z2F0ZSwgeworICAgICAgICAgICAgICAgICAgICAncG9zdFByb2Nlc3MnOiBmdW5jdGlvbiAobm9k
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5sb2Muc291cmNlID0gdG9TdHJpbmco
b3B0aW9ucy5zb3VyY2UpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRva2VucyA9PT0gJ2Jvb2xlYW4nICYm
IG9wdGlvbnMudG9rZW5zKSB7CisgICAgICAgICAgICAgICAgZXh0cmEudG9rZW5zID0gW107Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuY29tbWVudCA9PT0g
J2Jvb2xlYW4nICYmIG9wdGlvbnMuY29tbWVudCkgeworICAgICAgICAgICAgICAgIGV4dHJhLmNv
bW1lbnRzID0gW107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlv
bnMudG9sZXJhbnQgPT09ICdib29sZWFuJyAmJiBvcHRpb25zLnRvbGVyYW50KSB7CisgICAgICAg
ICAgICAgICAgZXh0cmEuZXJyb3JzID0gW107CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAobGVuZ3RoID4gMCkgeworICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2Vb
MF0gPT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAgLy8gVHJ5IGZpcnN0IHRvIGNv
bnZlcnQgdG8gYSBzdHJpbmcuIFRoaXMgaXMgZ29vZCBhcyBmYXN0IHBhdGgKKyAgICAgICAgICAg
ICAgICAvLyBmb3Igb2xkIElFIHdoaWNoIHVuZGVyc3RhbmRzIHN0cmluZyBpbmRleGluZyBmb3Ig
c3RyaW5nCisgICAgICAgICAgICAgICAgLy8gbGl0ZXJhbHMgb25seSBhbmQgbm90IGZvciBzdHJp
bmcgb2JqZWN0LgorICAgICAgICAgICAgICAgIGlmIChjb2RlIGluc3RhbmNlb2YgU3RyaW5nKSB7
CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IGNvZGUudmFsdWVPZigpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHBhdGNoKCk7Cisg
ICAgICAgIHRyeSB7CisgICAgICAgICAgICBwcm9ncmFtID0gcGFyc2VQcm9ncmFtKCk7CisgICAg
ICAgICAgICBpZiAodHlwZW9mIGV4dHJhLmNvbW1lbnRzICE9PSAndW5kZWZpbmVkJykgeworICAg
ICAgICAgICAgICAgIGZpbHRlckNvbW1lbnRMb2NhdGlvbigpOworICAgICAgICAgICAgICAgIHBy
b2dyYW0uY29tbWVudHMgPSBleHRyYS5jb21tZW50czsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAg
ICAgICAgIGZpbHRlclRva2VuTG9jYXRpb24oKTsKKyAgICAgICAgICAgICAgICBwcm9ncmFtLnRv
a2VucyA9IGV4dHJhLnRva2VuczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0eXBl
b2YgZXh0cmEuZXJyb3JzICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIHByb2dy
YW0uZXJyb3JzID0gZXh0cmEuZXJyb3JzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGV4dHJhLnJhbmdlIHx8IGV4dHJhLmxvYykgeworICAgICAgICAgICAgICAgIHByb2dyYW0uYm9k
eSA9IGZpbHRlckdyb3VwKHByb2dyYW0uYm9keSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
Y2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgIH0gZmluYWxseSB7Cisg
ICAgICAgICAgICB1bnBhdGNoKCk7CisgICAgICAgICAgICBleHRyYSA9IHt9OworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHByb2dyYW07CisgICAgfQorCisgICAgLy8gU3luYyB3aXRoIHBh
Y2thZ2UuanNvbiBhbmQgY29tcG9uZW50Lmpzb24uCisgICAgZXhwb3J0cy52ZXJzaW9uID0gJzEu
MS4wLWRldi1oYXJtb255JzsKKworICAgIGV4cG9ydHMudG9rZW5pemUgPSB0b2tlbml6ZTsKKwor
ICAgIGV4cG9ydHMucGFyc2UgPSBwYXJzZTsKKworICAgIC8vIERlZXAgY29weS4KKyAgICBleHBv
cnRzLlN5bnRheCA9IChmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBuYW1lLCB0eXBlcyA9IHt9
OworCisgICAgICAgIGlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykgewor
ICAgICAgICAgICAgdHlwZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpOworICAgICAgICB9CisKKyAg
ICAgICAgZm9yIChuYW1lIGluIFN5bnRheCkgeworICAgICAgICAgICAgaWYgKFN5bnRheC5oYXNP
d25Qcm9wZXJ0eShuYW1lKSkgeworICAgICAgICAgICAgICAgIHR5cGVzW25hbWVdID0gU3ludGF4
W25hbWVdOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGVvZiBP
YmplY3QuZnJlZXplID09PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICBPYmplY3QuZnJlZXpl
KHR5cGVzKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0eXBlczsKKyAgICB9KCkpOwor
Cit9KSk7CisvKiB2aW06IHNldCBzdz00IHRzPTQgZXQgdHc9ODAgOiAqLworCit9KSgpCit9LHt9
XSw1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qCisgKiBDb3B5cmlnaHQg
MjAwOS0yMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzCisgKiBMaWNlbnNl
ZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRS50eHQgb3I6CisgKiBodHRw
Oi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlCisgKi8KK2V4cG9ydHMuU291
cmNlTWFwR2VuZXJhdG9yID0gcmVxdWlyZSgnLi9zb3VyY2UtbWFwL3NvdXJjZS1tYXAtZ2VuZXJh
dG9yJykuU291cmNlTWFwR2VuZXJhdG9yOworZXhwb3J0cy5Tb3VyY2VNYXBDb25zdW1lciA9IHJl
cXVpcmUoJy4vc291cmNlLW1hcC9zb3VyY2UtbWFwLWNvbnN1bWVyJykuU291cmNlTWFwQ29uc3Vt
ZXI7CitleHBvcnRzLlNvdXJjZU5vZGUgPSByZXF1aXJlKCcuL3NvdXJjZS1tYXAvc291cmNlLW5v
ZGUnKS5Tb3VyY2VOb2RlOworCit9LHsiLi9zb3VyY2UtbWFwL3NvdXJjZS1tYXAtY29uc3VtZXIi
OjEwLCIuL3NvdXJjZS1tYXAvc291cmNlLW1hcC1nZW5lcmF0b3IiOjExLCIuL3NvdXJjZS1tYXAv
c291cmNlLW5vZGUiOjEyfV0sNjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cisv
KiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovCisvKgorICogQ29weXJp
Z2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnMKKyAqIExpY2Vuc2Vk
IHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOgorICogaHR0cDovL29w
ZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZQorICovCitpZiAodHlwZW9mIGRlZmlu
ZSAhPT0gJ2Z1bmN0aW9uJykgeworICAgIHZhciBkZWZpbmUgPSByZXF1aXJlKCdhbWRlZmluZScp
KG1vZHVsZSwgcmVxdWlyZSk7Cit9CitkZWZpbmUoZnVuY3Rpb24gKHJlcXVpcmUsIGV4cG9ydHMs
IG1vZHVsZSkgeworCisgIHZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7CisKKyAgLyoqCisg
ICAqIEEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggaXMgYSBjb21iaW5hdGlvbiBvZiBhbiBhcnJheSBh
bmQgYSBzZXQuIEFkZGluZyBhIG5ldworICAgKiBtZW1iZXIgaXMgTygxKSwgdGVzdGluZyBmb3Ig
bWVtYmVyc2hpcCBpcyBPKDEpLCBhbmQgZmluZGluZyB0aGUgaW5kZXggb2YgYW4KKyAgICogZWxl
bWVudCBpcyBPKDEpLiBSZW1vdmluZyBlbGVtZW50cyBmcm9tIHRoZSBzZXQgaXMgbm90IHN1cHBv
cnRlZC4gT25seQorICAgKiBzdHJpbmdzIGFyZSBzdXBwb3J0ZWQgZm9yIG1lbWJlcnNoaXAuCisg
ICAqLworICBmdW5jdGlvbiBBcnJheVNldCgpIHsKKyAgICB0aGlzLl9hcnJheSA9IFtdOworICAg
IHRoaXMuX3NldCA9IHt9OworICB9CisKKyAgLyoqCisgICAqIFN0YXRpYyBtZXRob2QgZm9yIGNy
ZWF0aW5nIEFycmF5U2V0IGluc3RhbmNlcyBmcm9tIGFuIGV4aXN0aW5nIGFycmF5LgorICAgKi8K
KyAgQXJyYXlTZXQuZnJvbUFycmF5ID0gZnVuY3Rpb24gQXJyYXlTZXRfZnJvbUFycmF5KGFBcnJh
eSkgeworICAgIHZhciBzZXQgPSBuZXcgQXJyYXlTZXQoKTsKKyAgICBmb3IgKHZhciBpID0gMCwg
bGVuID0gYUFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICBzZXQuYWRkKGFBcnJh
eVtpXSk7CisgICAgfQorICAgIHJldHVybiBzZXQ7CisgIH07CisKKyAgLyoqCisgICAqIEFkZCB0
aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoaXMgc2V0LgorICAgKgorICAgKiBAcGFyYW0gU3RyaW5nIGFT
dHIKKyAgICovCisgIEFycmF5U2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBBcnJheVNldF9h
ZGQoYVN0cikgeworICAgIGlmICh0aGlzLmhhcyhhU3RyKSkgeworICAgICAgLy8gQWxyZWFkeSBh
IG1lbWJlcjsgbm90aGluZyB0byBkby4KKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgdmFyIGlk
eCA9IHRoaXMuX2FycmF5Lmxlbmd0aDsKKyAgICB0aGlzLl9hcnJheS5wdXNoKGFTdHIpOworICAg
IHRoaXMuX3NldFt1dGlsLnRvU2V0U3RyaW5nKGFTdHIpXSA9IGlkeDsKKyAgfTsKKworICAvKioK
KyAgICogSXMgdGhlIGdpdmVuIHN0cmluZyBhIG1lbWJlciBvZiB0aGlzIHNldD8KKyAgICoKKyAg
ICogQHBhcmFtIFN0cmluZyBhU3RyCisgICAqLworICBBcnJheVNldC5wcm90b3R5cGUuaGFzID0g
ZnVuY3Rpb24gQXJyYXlTZXRfaGFzKGFTdHIpIHsKKyAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlw
ZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX3NldCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwudG9TZXRTdHJpbmcoYVN0cikpOworICB9Owor
CisgIC8qKgorICAgKiBXaGF0IGlzIHRoZSBpbmRleCBvZiB0aGUgZ2l2ZW4gc3RyaW5nIGluIHRo
ZSBhcnJheT8KKyAgICoKKyAgICogQHBhcmFtIFN0cmluZyBhU3RyCisgICAqLworICBBcnJheVNl
dC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIEFycmF5U2V0X2luZGV4T2YoYVN0cikgewor
ICAgIGlmICh0aGlzLmhhcyhhU3RyKSkgeworICAgICAgcmV0dXJuIHRoaXMuX3NldFt1dGlsLnRv
U2V0U3RyaW5nKGFTdHIpXTsKKyAgICB9CisgICAgdGhyb3cgbmV3IEVycm9yKCciJyArIGFTdHIg
KyAnIiBpcyBub3QgaW4gdGhlIHNldC4nKTsKKyAgfTsKKworICAvKioKKyAgICogV2hhdCBpcyB0
aGUgZWxlbWVudCBhdCB0aGUgZ2l2ZW4gaW5kZXg/CisgICAqCisgICAqIEBwYXJhbSBOdW1iZXIg
YUlkeAorICAgKi8KKyAgQXJyYXlTZXQucHJvdG90eXBlLmF0ID0gZnVuY3Rpb24gQXJyYXlTZXRf
YXQoYUlkeCkgeworICAgIGlmIChhSWR4ID49IDAgJiYgYUlkeCA8IHRoaXMuX2FycmF5Lmxlbmd0
aCkgeworICAgICAgcmV0dXJuIHRoaXMuX2FycmF5W2FJZHhdOworICAgIH0KKyAgICB0aHJvdyBu
ZXcgRXJyb3IoJ05vIGVsZW1lbnQgaW5kZXhlZCBieSAnICsgYUlkeCk7CisgIH07CisKKyAgLyoq
CisgICAqIFJldHVybnMgdGhlIGFycmF5IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc2V0ICh3aGlj
aCBoYXMgdGhlIHByb3BlciBpbmRpY2VzCisgICAqIGluZGljYXRlZCBieSBpbmRleE9mKS4gTm90
ZSB0aGF0IHRoaXMgaXMgYSBjb3B5IG9mIHRoZSBpbnRlcm5hbCBhcnJheSB1c2VkCisgICAqIGZv
ciBzdG9yaW5nIHRoZSBtZW1iZXJzIHNvIHRoYXQgbm8gb25lIGNhbiBtZXNzIHdpdGggaW50ZXJu
YWwgc3RhdGUuCisgICAqLworICBBcnJheVNldC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9u
IEFycmF5U2V0X3RvQXJyYXkoKSB7CisgICAgcmV0dXJuIHRoaXMuX2FycmF5LnNsaWNlKCk7Cisg
IH07CisKKyAgZXhwb3J0cy5BcnJheVNldCA9IEFycmF5U2V0OworCit9KTsKKworfSx7Ii4vdXRp
bCI6MTMsImFtZGVmaW5lIjoxNH1dLDc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
eworLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqLworLyoKKyAqIENv
cHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzCisgKiBMaWNl
bnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjoKKyAqIGh0dHA6
Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UKKyAqCisgKiBCYXNlZCBvbiB0
aGUgQmFzZSA2NCBWTFEgaW1wbGVtZW50YXRpb24gaW4gQ2xvc3VyZSBDb21waWxlcjoKKyAqIGh0
dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2xvc3VyZS1jb21waWxlci9zb3VyY2UvYnJvd3NlL3Ry
dW5rL3NyYy9jb20vZ29vZ2xlL2RlYnVnZ2luZy9zb3VyY2VtYXAvQmFzZTY0VkxRLmphdmEKKyAq
CisgKiBDb3B5cmlnaHQgMjAxMSBUaGUgQ2xvc3VyZSBDb21waWxlciBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFp
bWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQK
KyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KK2lmICh0eXBlb2YgZGVmaW5lICE9PSAnZnVuY3Rpb24nKSB7CisgICAgdmFy
IGRlZmluZSA9IHJlcXVpcmUoJ2FtZGVmaW5lJykobW9kdWxlLCByZXF1aXJlKTsKK30KK2RlZmlu
ZShmdW5jdGlvbiAocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKyAgdmFyIGJhc2U2NCA9
IHJlcXVpcmUoJy4vYmFzZTY0Jyk7CisKKyAgLy8gQSBzaW5nbGUgYmFzZSA2NCBkaWdpdCBjYW4g
Y29udGFpbiA2IGJpdHMgb2YgZGF0YS4gRm9yIHRoZSBiYXNlIDY0IHZhcmlhYmxlCisgIC8vIGxl
bmd0aCBxdWFudGl0aWVzIHdlIHVzZSBpbiB0aGUgc291cmNlIG1hcCBzcGVjLCB0aGUgZmlyc3Qg
Yml0IGlzIHRoZSBzaWduLAorICAvLyB0aGUgbmV4dCBmb3VyIGJpdHMgYXJlIHRoZSBhY3R1YWwg
dmFsdWUsIGFuZCB0aGUgNnRoIGJpdCBpcyB0aGUKKyAgLy8gY29udGludWF0aW9uIGJpdC4gVGhl
IGNvbnRpbnVhdGlvbiBiaXQgdGVsbHMgdXMgd2hldGhlciB0aGVyZSBhcmUgbW9yZQorICAvLyBk
aWdpdHMgaW4gdGhpcyB2YWx1ZSBmb2xsb3dpbmcgdGhpcyBkaWdpdC4KKyAgLy8KKyAgLy8gICBD
b250aW51YXRpb24KKyAgLy8gICB8ICAgIFNpZ24KKyAgLy8gICB8ICAgIHwKKyAgLy8gICBWICAg
IFYKKyAgLy8gICAxMDEwMTEKKworICB2YXIgVkxRX0JBU0VfU0hJRlQgPSA1OworCisgIC8vIGJp
bmFyeTogMTAwMDAwCisgIHZhciBWTFFfQkFTRSA9IDEgPDwgVkxRX0JBU0VfU0hJRlQ7CisKKyAg
Ly8gYmluYXJ5OiAwMTExMTEKKyAgdmFyIFZMUV9CQVNFX01BU0sgPSBWTFFfQkFTRSAtIDE7CisK
KyAgLy8gYmluYXJ5OiAxMDAwMDAKKyAgdmFyIFZMUV9DT05USU5VQVRJT05fQklUID0gVkxRX0JB
U0U7CisKKyAgLyoqCisgICAqIENvbnZlcnRzIGZyb20gYSB0d28tY29tcGxlbWVudCB2YWx1ZSB0
byBhIHZhbHVlIHdoZXJlIHRoZSBzaWduIGJpdCBpcworICAgKiBpcyBwbGFjZWQgaW4gdGhlIGxl
YXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczoKKyAgICogICAx
IGJlY29tZXMgMiAoMTAgYmluYXJ5KSwgLTEgYmVjb21lcyAzICgxMSBiaW5hcnkpCisgICAqICAg
MiBiZWNvbWVzIDQgKDEwMCBiaW5hcnkpLCAtMiBiZWNvbWVzIDUgKDEwMSBiaW5hcnkpCisgICAq
LworICBmdW5jdGlvbiB0b1ZMUVNpZ25lZChhVmFsdWUpIHsKKyAgICByZXR1cm4gYVZhbHVlIDwg
MAorICAgICAgPyAoKC1hVmFsdWUpIDw8IDEpICsgMQorICAgICAgOiAoYVZhbHVlIDw8IDEpICsg
MDsKKyAgfQorCisgIC8qKgorICAgKiBDb252ZXJ0cyB0byBhIHR3by1jb21wbGVtZW50IHZhbHVl
IGZyb20gYSB2YWx1ZSB3aGVyZSB0aGUgc2lnbiBiaXQgaXMKKyAgICogaXMgcGxhY2VkIGluIHRo
ZSBsZWFzdCBzaWduaWZpY2FudCBiaXQuICBGb3IgZXhhbXBsZSwgYXMgZGVjaW1hbHM6CisgICAq
ICAgMiAoMTAgYmluYXJ5KSBiZWNvbWVzIDEsIDMgKDExIGJpbmFyeSkgYmVjb21lcyAtMQorICAg
KiAgIDQgKDEwMCBiaW5hcnkpIGJlY29tZXMgMiwgNSAoMTAxIGJpbmFyeSkgYmVjb21lcyAtMgor
ICAgKi8KKyAgZnVuY3Rpb24gZnJvbVZMUVNpZ25lZChhVmFsdWUpIHsKKyAgICB2YXIgaXNOZWdh
dGl2ZSA9IChhVmFsdWUgJiAxKSA9PT0gMTsKKyAgICB2YXIgc2hpZnRlZCA9IGFWYWx1ZSA+PiAx
OworICAgIHJldHVybiBpc05lZ2F0aXZlCisgICAgICA/IC1zaGlmdGVkCisgICAgICA6IHNoaWZ0
ZWQ7CisgIH0KKworICAvKioKKyAgICogUmV0dXJucyB0aGUgYmFzZSA2NCBWTFEgZW5jb2RlZCB2
YWx1ZS4KKyAgICovCisgIGV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gYmFzZTY0VkxRX2VuY29k
ZShhVmFsdWUpIHsKKyAgICB2YXIgZW5jb2RlZCA9ICIiOworICAgIHZhciBkaWdpdDsKKworICAg
IHZhciB2bHEgPSB0b1ZMUVNpZ25lZChhVmFsdWUpOworCisgICAgZG8geworICAgICAgZGlnaXQg
PSB2bHEgJiBWTFFfQkFTRV9NQVNLOworICAgICAgdmxxID4+Pj0gVkxRX0JBU0VfU0hJRlQ7Cisg
ICAgICBpZiAodmxxID4gMCkgeworICAgICAgICAvLyBUaGVyZSBhcmUgc3RpbGwgbW9yZSBkaWdp
dHMgaW4gdGhpcyB2YWx1ZSwgc28gd2UgbXVzdCBtYWtlIHN1cmUgdGhlCisgICAgICAgIC8vIGNv
bnRpbnVhdGlvbiBiaXQgaXMgbWFya2VkLgorICAgICAgICBkaWdpdCB8PSBWTFFfQ09OVElOVUFU
SU9OX0JJVDsKKyAgICAgIH0KKyAgICAgIGVuY29kZWQgKz0gYmFzZTY0LmVuY29kZShkaWdpdCk7
CisgICAgfSB3aGlsZSAodmxxID4gMCk7CisKKyAgICByZXR1cm4gZW5jb2RlZDsKKyAgfTsKKwor
ICAvKioKKyAgICogRGVjb2RlcyB0aGUgbmV4dCBiYXNlIDY0IFZMUSB2YWx1ZSBmcm9tIHRoZSBn
aXZlbiBzdHJpbmcgYW5kIHJldHVybnMgdGhlCisgICAqIHZhbHVlIGFuZCB0aGUgcmVzdCBvZiB0
aGUgc3RyaW5nLgorICAgKi8KKyAgZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFf
ZGVjb2RlKGFTdHIpIHsKKyAgICB2YXIgaSA9IDA7CisgICAgdmFyIHN0ckxlbiA9IGFTdHIubGVu
Z3RoOworICAgIHZhciByZXN1bHQgPSAwOworICAgIHZhciBzaGlmdCA9IDA7CisgICAgdmFyIGNv
bnRpbnVhdGlvbiwgZGlnaXQ7CisKKyAgICBkbyB7CisgICAgICBpZiAoaSA+PSBzdHJMZW4pIHsK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBtb3JlIGRpZ2l0cyBpbiBiYXNlIDY0
IFZMUSB2YWx1ZS4iKTsKKyAgICAgIH0KKyAgICAgIGRpZ2l0ID0gYmFzZTY0LmRlY29kZShhU3Ry
LmNoYXJBdChpKyspKTsKKyAgICAgIGNvbnRpbnVhdGlvbiA9ICEhKGRpZ2l0ICYgVkxRX0NPTlRJ
TlVBVElPTl9CSVQpOworICAgICAgZGlnaXQgJj0gVkxRX0JBU0VfTUFTSzsKKyAgICAgIHJlc3Vs
dCA9IHJlc3VsdCArIChkaWdpdCA8PCBzaGlmdCk7CisgICAgICBzaGlmdCArPSBWTFFfQkFTRV9T
SElGVDsKKyAgICB9IHdoaWxlIChjb250aW51YXRpb24pOworCisgICAgcmV0dXJuIHsKKyAgICAg
IHZhbHVlOiBmcm9tVkxRU2lnbmVkKHJlc3VsdCksCisgICAgICByZXN0OiBhU3RyLnNsaWNlKGkp
CisgICAgfTsKKyAgfTsKKworfSk7CisKK30seyIuL2Jhc2U2NCI6OCwiYW1kZWZpbmUiOjE0fV0s
ODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKiAtKi0gTW9kZToganM7IGpz
LWluZGVudC1sZXZlbDogMjsgLSotICovCisvKgorICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBG
b3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnMKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNE
IGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOgorICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vu
c2VzL0JTRC0zLUNsYXVzZQorICovCitpZiAodHlwZW9mIGRlZmluZSAhPT0gJ2Z1bmN0aW9uJykg
eworICAgIHZhciBkZWZpbmUgPSByZXF1aXJlKCdhbWRlZmluZScpKG1vZHVsZSwgcmVxdWlyZSk7
Cit9CitkZWZpbmUoZnVuY3Rpb24gKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworCisgIHZh
ciBjaGFyVG9JbnRNYXAgPSB7fTsKKyAgdmFyIGludFRvQ2hhck1hcCA9IHt9OworCisgICdBQkNE
RUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4
OSsvJworICAgIC5zcGxpdCgnJykKKyAgICAuZm9yRWFjaChmdW5jdGlvbiAoY2gsIGluZGV4KSB7
CisgICAgICBjaGFyVG9JbnRNYXBbY2hdID0gaW5kZXg7CisgICAgICBpbnRUb0NoYXJNYXBbaW5k
ZXhdID0gY2g7CisgICAgfSk7CisKKyAgLyoqCisgICAqIEVuY29kZSBhbiBpbnRlZ2VyIGluIHRo
ZSByYW5nZSBvZiAwIHRvIDYzIHRvIGEgc2luZ2xlIGJhc2UgNjQgZGlnaXQuCisgICAqLworICBl
eHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIGJhc2U2NF9lbmNvZGUoYU51bWJlcikgeworICAgIGlm
IChhTnVtYmVyIGluIGludFRvQ2hhck1hcCkgeworICAgICAgcmV0dXJuIGludFRvQ2hhck1hcFth
TnVtYmVyXTsKKyAgICB9CisgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiTXVzdCBiZSBiZXR3ZWVu
IDAgYW5kIDYzOiAiICsgYU51bWJlcik7CisgIH07CisKKyAgLyoqCisgICAqIERlY29kZSBhIHNp
bmdsZSBiYXNlIDY0IGRpZ2l0IHRvIGFuIGludGVnZXIuCisgICAqLworICBleHBvcnRzLmRlY29k
ZSA9IGZ1bmN0aW9uIGJhc2U2NF9kZWNvZGUoYUNoYXIpIHsKKyAgICBpZiAoYUNoYXIgaW4gY2hh
clRvSW50TWFwKSB7CisgICAgICByZXR1cm4gY2hhclRvSW50TWFwW2FDaGFyXTsKKyAgICB9Cisg
ICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiTm90IGEgdmFsaWQgYmFzZSA2NCBkaWdpdDogIiArIGFD
aGFyKTsKKyAgfTsKKworfSk7CisKK30seyJhbWRlZmluZSI6MTR9XSw5OltmdW5jdGlvbihyZXF1
aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAy
OyAtKi0gKi8KKy8qCisgKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNv
bnRyaWJ1dG9ycworICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJ
Q0VOU0Ugb3I6CisgKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNl
CisgKi8KK2lmICh0eXBlb2YgZGVmaW5lICE9PSAnZnVuY3Rpb24nKSB7CisgICAgdmFyIGRlZmlu
ZSA9IHJlcXVpcmUoJ2FtZGVmaW5lJykobW9kdWxlLCByZXF1aXJlKTsKK30KK2RlZmluZShmdW5j
dGlvbiAocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKyAgLyoqCisgICAqIFJlY3Vyc2l2
ZSBpbXBsZW1lbnRhdGlvbiBvZiBiaW5hcnkgc2VhcmNoLgorICAgKgorICAgKiBAcGFyYW0gYUxv
dyBJbmRpY2VzIGhlcmUgYW5kIGxvd2VyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuCisgICAq
IEBwYXJhbSBhSGlnaCBJbmRpY2VzIGhlcmUgYW5kIGhpZ2hlciBkbyBub3QgY29udGFpbiB0aGUg
bmVlZGxlLgorICAgKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCBiZWluZyBzZWFyY2hlZCBm
b3IuCisgICAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIG5vbi1lbXB0eSBhcnJheSBiZWluZyBzZWFy
Y2hlZC4KKyAgICogQHBhcmFtIGFDb21wYXJlIEZ1bmN0aW9uIHdoaWNoIHRha2VzIHR3byBlbGVt
ZW50cyBhbmQgcmV0dXJucyAtMSwgMCwgb3IgMS4KKyAgICovCisgIGZ1bmN0aW9uIHJlY3Vyc2l2
ZVNlYXJjaChhTG93LCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSkgeworICAg
IC8vIFRoaXMgZnVuY3Rpb24gdGVybWluYXRlcyB3aGVuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlz
IHRydWU6CisgICAgLy8KKyAgICAvLyAgIDEuIFdlIGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQgd2Ug
YXJlIGxvb2tpbmcgZm9yLgorICAgIC8vCisgICAgLy8gICAyLiBXZSBkaWQgbm90IGZpbmQgdGhl
IGV4YWN0IGVsZW1lbnQsIGJ1dCB3ZSBjYW4gcmV0dXJuIHRoZSBuZXh0CisgICAgLy8gICAgICBj
bG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBsZXNzIHRoYW4gdGhhdCBlbGVtZW50LgorICAgIC8vCisg
ICAgLy8gICAzLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGFuZCB0aGVyZSBp
cyBubyBuZXh0LWNsb3Nlc3QKKyAgICAvLyAgICAgIGVsZW1lbnQgd2hpY2ggaXMgbGVzcyB0aGFu
IHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IsIHNvIHdlCisgICAgLy8gICAgICByZXR1cm4g
bnVsbC4KKyAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigoYUhpZ2ggLSBhTG93KSAvIDIpICsgYUxv
dzsKKyAgICB2YXIgY21wID0gYUNvbXBhcmUoYU5lZWRsZSwgYUhheXN0YWNrW21pZF0pOworICAg
IGlmIChjbXAgPT09IDApIHsKKyAgICAgIC8vIEZvdW5kIHRoZSBlbGVtZW50IHdlIGFyZSBsb29r
aW5nIGZvci4KKyAgICAgIHJldHVybiBhSGF5c3RhY2tbbWlkXTsKKyAgICB9CisgICAgZWxzZSBp
ZiAoY21wID4gMCkgeworICAgICAgLy8gYUhheXN0YWNrW21pZF0gaXMgZ3JlYXRlciB0aGFuIG91
ciBuZWVkbGUuCisgICAgICBpZiAoYUhpZ2ggLSBtaWQgPiAxKSB7CisgICAgICAgIC8vIFRoZSBl
bGVtZW50IGlzIGluIHRoZSB1cHBlciBoYWxmLgorICAgICAgICByZXR1cm4gcmVjdXJzaXZlU2Vh
cmNoKG1pZCwgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUpOworICAgICAgfQor
ICAgICAgLy8gV2UgZGlkIG5vdCBmaW5kIGFuIGV4YWN0IG1hdGNoLCByZXR1cm4gdGhlIG5leHQg
Y2xvc2VzdCBvbmUKKyAgICAgIC8vICh0ZXJtaW5hdGlvbiBjYXNlIDIpLgorICAgICAgcmV0dXJu
IGFIYXlzdGFja1ttaWRdOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8vIGFIYXlzdGFja1tt
aWRdIGlzIGxlc3MgdGhhbiBvdXIgbmVlZGxlLgorICAgICAgaWYgKG1pZCAtIGFMb3cgPiAxKSB7
CisgICAgICAgIC8vIFRoZSBlbGVtZW50IGlzIGluIHRoZSBsb3dlciBoYWxmLgorICAgICAgICBy
ZXR1cm4gcmVjdXJzaXZlU2VhcmNoKGFMb3csIG1pZCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29t
cGFyZSk7CisgICAgICB9CisgICAgICAvLyBUaGUgZXhhY3QgbmVlZGxlIGVsZW1lbnQgd2FzIG5v
dCBmb3VuZCBpbiB0aGlzIGhheXN0YWNrLiBEZXRlcm1pbmUgaWYKKyAgICAgIC8vIHdlIGFyZSBp
biB0ZXJtaW5hdGlvbiBjYXNlICgyKSBvciAoMykgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUg
dGhpbmcuCisgICAgICByZXR1cm4gYUxvdyA8IDAKKyAgICAgICAgPyBudWxsCisgICAgICAgIDog
YUhheXN0YWNrW2FMb3ddOworICAgIH0KKyAgfQorCisgIC8qKgorICAgKiBUaGlzIGlzIGFuIGlt
cGxlbWVudGF0aW9uIG9mIGJpbmFyeSBzZWFyY2ggd2hpY2ggd2lsbCBhbHdheXMgdHJ5IGFuZCBy
ZXR1cm4KKyAgICogdGhlIG5leHQgbG93ZXN0IHZhbHVlIGNoZWNrZWQgaWYgdGhlcmUgaXMgbm8g
ZXhhY3QgaGl0LiBUaGlzIGlzIGJlY2F1c2UKKyAgICogbWFwcGluZ3MgYmV0d2VlbiBvcmlnaW5h
bCBhbmQgZ2VuZXJhdGVkIGxpbmUvY29sIHBhaXJzIGFyZSBzaW5nbGUgcG9pbnRzLAorICAgKiBh
bmQgdGhlcmUgaXMgYW4gaW1wbGljaXQgcmVnaW9uIGJldHdlZW4gZWFjaCBvZiB0aGVtLCBzbyBh
IG1pc3MganVzdCBtZWFucworICAgKiB0aGF0IHlvdSBhcmVuJ3Qgb24gdGhlIHZlcnkgc3RhcnQg
b2YgYSByZWdpb24uCisgICAqCisgICAqIEBwYXJhbSBhTmVlZGxlIFRoZSBlbGVtZW50IHlvdSBh
cmUgbG9va2luZyBmb3IuCisgICAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIGFycmF5IHRoYXQgaXMg
YmVpbmcgc2VhcmNoZWQuCisgICAqIEBwYXJhbSBhQ29tcGFyZSBBIGZ1bmN0aW9uIHdoaWNoIHRh
a2VzIHRoZSBuZWVkbGUgYW5kIGFuIGVsZW1lbnQgaW4gdGhlCisgICAqICAgICBhcnJheSBhbmQg
cmV0dXJucyAtMSwgMCwgb3IgMSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgbmVlZGxlIGlzIGxl
c3MKKyAgICogICAgIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4gdGhlIGVsZW1lbnQs
IHJlc3BlY3RpdmVseS4KKyAgICovCisgIGV4cG9ydHMuc2VhcmNoID0gZnVuY3Rpb24gc2VhcmNo
KGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUpIHsKKyAgICByZXR1cm4gYUhheXN0YWNrLmxl
bmd0aCA+IDAKKyAgICAgID8gcmVjdXJzaXZlU2VhcmNoKC0xLCBhSGF5c3RhY2subGVuZ3RoLCBh
TmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlKQorICAgICAgOiBudWxsOworICB9OworCit9KTsK
KworfSx7ImFtZGVmaW5lIjoxNH1dLDEwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRz
KXsKKy8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi8KKy8qCisgKiBD
b3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9ycworICogTGlj
ZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6CisgKiBodHRw
Oi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlCisgKi8KK2lmICh0eXBlb2Yg
ZGVmaW5lICE9PSAnZnVuY3Rpb24nKSB7CisgICAgdmFyIGRlZmluZSA9IHJlcXVpcmUoJ2FtZGVm
aW5lJykobW9kdWxlLCByZXF1aXJlKTsKK30KK2RlZmluZShmdW5jdGlvbiAocmVxdWlyZSwgZXhw
b3J0cywgbW9kdWxlKSB7CisKKyAgdmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTsKKyAgdmFy
IGJpbmFyeVNlYXJjaCA9IHJlcXVpcmUoJy4vYmluYXJ5LXNlYXJjaCcpOworICB2YXIgQXJyYXlT
ZXQgPSByZXF1aXJlKCcuL2FycmF5LXNldCcpLkFycmF5U2V0OworICB2YXIgYmFzZTY0VkxRID0g
cmVxdWlyZSgnLi9iYXNlNjQtdmxxJyk7CisKKyAgLyoqCisgICAqIEEgU291cmNlTWFwQ29uc3Vt
ZXIgaW5zdGFuY2UgcmVwcmVzZW50cyBhIHBhcnNlZCBzb3VyY2UgbWFwIHdoaWNoIHdlIGNhbgor
ICAgKiBxdWVyeSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIGZpbGUgcG9zaXRp
b25zIGJ5IGdpdmluZyBpdCBhIGZpbGUKKyAgICogcG9zaXRpb24gaW4gdGhlIGdlbmVyYXRlZCBz
b3VyY2UuCisgICAqCisgICAqIFRoZSBvbmx5IHBhcmFtZXRlciBpcyB0aGUgcmF3IHNvdXJjZSBt
YXAgKGVpdGhlciBhcyBhIEpTT04gc3RyaW5nLCBvcgorICAgKiBhbHJlYWR5IHBhcnNlZCB0byBh
biBvYmplY3QpLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNvdXJjZSBtYXBzIGhhdmUgdGhlCisg
ICAqIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgorICAgKgorICAgKiAgIC0gdmVyc2lvbjogV2hpY2gg
dmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy4KKyAg
ICogICAtIHNvdXJjZXM6IEFuIGFycmF5IG9mIFVSTHMgdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBm
aWxlcy4KKyAgICogICAtIG5hbWVzOiBBbiBhcnJheSBvZiBpZGVudGlmaWVycyB3aGljaCBjYW4g
YmUgcmVmZXJyZW5jZWQgYnkgaW5kaXZpZHVhbCBtYXBwaW5ncy4KKyAgICogICAtIHNvdXJjZVJv
b3Q6IE9wdGlvbmFsLiBUaGUgVVJMIHJvb3QgZnJvbSB3aGljaCBhbGwgc291cmNlcyBhcmUgcmVs
YXRpdmUuCisgICAqICAgLSBzb3VyY2VzQ29udGVudDogT3B0aW9uYWwuIEFuIGFycmF5IG9mIGNv
bnRlbnRzIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuCisgICAqICAgLSBtYXBwaW5nczog
QSBzdHJpbmcgb2YgYmFzZTY0IFZMUXMgd2hpY2ggY29udGFpbiB0aGUgYWN0dWFsIG1hcHBpbmdz
LgorICAgKiAgIC0gZmlsZTogVGhlIGdlbmVyYXRlZCBmaWxlIHRoaXMgc291cmNlIG1hcCBpcyBh
c3NvY2lhdGVkIHdpdGguCisgICAqCisgICAqIEhlcmUgaXMgYW4gZXhhbXBsZSBzb3VyY2UgbWFw
LCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF06CisgICAqCisgICAqICAgICB7Cisg
ICAqICAgICAgIHZlcnNpb24gOiAzLAorICAgKiAgICAgICBmaWxlOiAib3V0LmpzIiwKKyAgICog
ICAgICAgc291cmNlUm9vdCA6ICIiLAorICAgKiAgICAgICBzb3VyY2VzOiBbImZvby5qcyIsICJi
YXIuanMiXSwKKyAgICogICAgICAgbmFtZXM6IFsic3JjIiwgIm1hcHMiLCAiYXJlIiwgImZ1biJd
LAorICAgKiAgICAgICBtYXBwaW5nczogIkFBLEFCOztBQkNERTsiCisgICAqICAgICB9CisgICAq
CisgICAqIFswXTogaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xVTFSR0FlaFF3
UnlwVVRvdkYxS1JscGlPRnplMGItXzJnYzZmQUgwS1kway9lZGl0P3BsaT0xIworICAgKi8KKyAg
ZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkgeworICAgIHZhciBzb3VyY2VN
YXAgPSBhU291cmNlTWFwOworICAgIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycp
IHsKKyAgICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXClc
XVx9Jy8sICcnKSk7CisgICAgfQorCisgICAgdmFyIHZlcnNpb24gPSB1dGlsLmdldEFyZyhzb3Vy
Y2VNYXAsICd2ZXJzaW9uJyk7CisgICAgdmFyIHNvdXJjZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VN
YXAsICdzb3VyY2VzJyk7CisgICAgdmFyIG5hbWVzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAn
bmFtZXMnKTsKKyAgICB2YXIgc291cmNlUm9vdCA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3Nv
dXJjZVJvb3QnLCBudWxsKTsKKyAgICB2YXIgc291cmNlc0NvbnRlbnQgPSB1dGlsLmdldEFyZyhz
b3VyY2VNYXAsICdzb3VyY2VzQ29udGVudCcsIG51bGwpOworICAgIHZhciBtYXBwaW5ncyA9IHV0
aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ21hcHBpbmdzJyk7CisgICAgdmFyIGZpbGUgPSB1dGlsLmdl
dEFyZyhzb3VyY2VNYXAsICdmaWxlJyk7CisKKyAgICBpZiAodmVyc2lvbiAhPT0gdGhpcy5fdmVy
c2lvbikgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsg
dmVyc2lvbik7CisgICAgfQorCisgICAgdGhpcy5fbmFtZXMgPSBBcnJheVNldC5mcm9tQXJyYXko
bmFtZXMpOworICAgIHRoaXMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoc291cmNlcyk7
CisgICAgdGhpcy5zb3VyY2VSb290ID0gc291cmNlUm9vdDsKKyAgICB0aGlzLnNvdXJjZXNDb250
ZW50ID0gc291cmNlc0NvbnRlbnQ7CisgICAgdGhpcy5maWxlID0gZmlsZTsKKworICAgIC8vIGB0
aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kIGB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzYCBob2xk
IHRoZSBwYXJzZWQKKyAgICAvLyBtYXBwaW5nIGNvb3JkaW5hdGVzIGZyb20gdGhlIHNvdXJjZSBt
YXAncyAibWFwcGluZ3MiIGF0dHJpYnV0ZS4gRWFjaAorICAgIC8vIG9iamVjdCBpbiB0aGUgYXJy
YXkgaXMgb2YgdGhlIGZvcm0KKyAgICAvLworICAgIC8vICAgICB7CisgICAgLy8gICAgICAgZ2Vu
ZXJhdGVkTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSwKKyAgICAv
LyAgICAgICBnZW5lcmF0ZWRDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0
ZWQgY29kZSwKKyAgICAvLyAgICAgICBzb3VyY2U6IFRoZSBwYXRoIHRvIHRoZSBvcmlnaW5hbCBz
b3VyY2UgZmlsZSB0aGF0IGdlbmVyYXRlZCB0aGlzCisgICAgLy8gICAgICAgICAgICAgICBjaHVu
ayBvZiBjb2RlLAorICAgIC8vICAgICAgIG9yaWdpbmFsTGluZTogVGhlIGxpbmUgbnVtYmVyIGlu
IHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdAorICAgIC8vICAgICAgICAgICAgICAgICAgICAgY29y
cmVzcG9uZHMgdG8gdGhpcyBjaHVuayBvZiBnZW5lcmF0ZWQgY29kZSwKKyAgICAvLyAgICAgICBv
cmlnaW5hbENvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSB0
aGF0CisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1
bmsgb2YgZ2VuZXJhdGVkIGNvZGUsCisgICAgLy8gICAgICAgbmFtZTogVGhlIG5hbWUgb2YgdGhl
IG9yaWdpbmFsIHN5bWJvbCB3aGljaCBnZW5lcmF0ZWQgdGhpcyBjaHVuayBvZgorICAgIC8vICAg
ICAgICAgICAgIGNvZGUuCisgICAgLy8gICAgIH0KKyAgICAvLworICAgIC8vIEFsbCBwcm9wZXJ0
aWVzIGV4Y2VwdCBmb3IgYGdlbmVyYXRlZExpbmVgIGFuZCBgZ2VuZXJhdGVkQ29sdW1uYCBjYW4g
YmUKKyAgICAvLyBgbnVsbGAuCisgICAgLy8KKyAgICAvLyBgdGhpcy5fZ2VuZXJhdGVkTWFwcGlu
Z3NgIGlzIG9yZGVyZWQgYnkgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbnMuCisgICAgLy8KKyAgICAv
LyBgdGhpcy5fb3JpZ2luYWxNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgb3JpZ2luYWwgcG9z
aXRpb25zLgorICAgIHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzID0gW107CisgICAgdGhpcy5fb3Jp
Z2luYWxNYXBwaW5ncyA9IFtdOworICAgIHRoaXMuX3BhcnNlTWFwcGluZ3MobWFwcGluZ3MsIHNv
dXJjZVJvb3QpOworICB9CisKKyAgLyoqCisgICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2Ug
bWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy4KKyAgICovCisgIFNvdXJjZU1hcENv
bnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7CisKKyAgLyoqCisgICAqIFRoZSBsaXN0IG9m
IG9yaWdpbmFsIHNvdXJjZXMuCisgICAqLworICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU291cmNl
TWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHsKKyAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VzLnRvQXJyYXkoKS5tYXAoZnVuY3Rpb24gKHMp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlUm9vdCA/IHV0aWwuam9pbih0aGlzLnNvdXJj
ZVJvb3QsIHMpIDogczsKKyAgICAgIH0sIHRoaXMpOworICAgIH0KKyAgfSk7CisKKyAgLyoqCisg
ICAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJl
IHdoaWNoIHdlIGNhbiBlYXNpbHkKKyAgICogcXVlcnkgKGFuIG9yZGVyZWQgbGlzdCBpbiB0aGlz
Ll9nZW5lcmF0ZWRNYXBwaW5ncykuCisgICAqLworICBTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5
cGUuX3BhcnNlTWFwcGluZ3MgPQorICAgIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3BhcnNl
TWFwcGluZ3MoYVN0ciwgYVNvdXJjZVJvb3QpIHsKKyAgICAgIHZhciBnZW5lcmF0ZWRMaW5lID0g
MTsKKyAgICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7CisgICAgICB2YXIgcHJl
dmlvdXNPcmlnaW5hbExpbmUgPSAwOworICAgICAgdmFyIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4g
PSAwOworICAgICAgdmFyIHByZXZpb3VzU291cmNlID0gMDsKKyAgICAgIHZhciBwcmV2aW91c05h
bWUgPSAwOworICAgICAgdmFyIG1hcHBpbmdTZXBhcmF0b3IgPSAvXlssO10vOworICAgICAgdmFy
IHN0ciA9IGFTdHI7CisgICAgICB2YXIgbWFwcGluZzsKKyAgICAgIHZhciB0ZW1wOworCisgICAg
ICB3aGlsZSAoc3RyLmxlbmd0aCA+IDApIHsKKyAgICAgICAgaWYgKHN0ci5jaGFyQXQoMCkgPT09
ICc7JykgeworICAgICAgICAgIGdlbmVyYXRlZExpbmUrKzsKKyAgICAgICAgICBzdHIgPSBzdHIu
c2xpY2UoMSk7CisgICAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKHN0ci5jaGFyQXQoMCkgPT09ICcsJykgeworICAgICAgICAg
IHN0ciA9IHN0ci5zbGljZSgxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICBtYXBwaW5nID0ge307CisgICAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gZ2VuZXJh
dGVkTGluZTsKKworICAgICAgICAgIC8vIEdlbmVyYXRlZCBjb2x1bW4uCisgICAgICAgICAgdGVt
cCA9IGJhc2U2NFZMUS5kZWNvZGUoc3RyKTsKKyAgICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZENv
bHVtbiA9IHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uICsgdGVtcC52YWx1ZTsKKyAgICAgICAgICBw
cmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uOworICAgICAg
ICAgIHN0ciA9IHRlbXAucmVzdDsKKworICAgICAgICAgIGlmIChzdHIubGVuZ3RoID4gMCAmJiAh
bWFwcGluZ1NlcGFyYXRvci50ZXN0KHN0ci5jaGFyQXQoMCkpKSB7CisgICAgICAgICAgICAvLyBP
cmlnaW5hbCBzb3VyY2UuCisgICAgICAgICAgICB0ZW1wID0gYmFzZTY0VkxRLmRlY29kZShzdHIp
OworICAgICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmF0KHByZXZpb3Vz
U291cmNlICsgdGVtcC52YWx1ZSk7CisgICAgICAgICAgICBwcmV2aW91c1NvdXJjZSArPSB0ZW1w
LnZhbHVlOworICAgICAgICAgICAgc3RyID0gdGVtcC5yZXN0OworICAgICAgICAgICAgaWYgKHN0
ci5sZW5ndGggPT09IDAgfHwgbWFwcGluZ1NlcGFyYXRvci50ZXN0KHN0ci5jaGFyQXQoMCkpKSB7
CisgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm91bmQgYSBzb3VyY2UsIGJ1dCBubyBs
aW5lIGFuZCBjb2x1bW4nKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gT3JpZ2lu
YWwgbGluZS4KKyAgICAgICAgICAgIHRlbXAgPSBiYXNlNjRWTFEuZGVjb2RlKHN0cik7CisgICAg
ICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSA9IHByZXZpb3VzT3JpZ2luYWxMaW5lICsgdGVt
cC52YWx1ZTsKKyAgICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmln
aW5hbExpbmU7CisgICAgICAgICAgICAvLyBMaW5lcyBhcmUgc3RvcmVkIDAtYmFzZWQKKyAgICAg
ICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lICs9IDE7CisgICAgICAgICAgICBzdHIgPSB0ZW1w
LnJlc3Q7CisgICAgICAgICAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCB8fCBtYXBwaW5nU2VwYXJh
dG9yLnRlc3Qoc3RyLmNoYXJBdCgwKSkpIHsKKyAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCdGb3VuZCBhIHNvdXJjZSBhbmQgbGluZSwgYnV0IG5vIGNvbHVtbicpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBPcmlnaW5hbCBjb2x1bW4uCisgICAgICAgICAgICB0ZW1wID0g
YmFzZTY0VkxRLmRlY29kZShzdHIpOworICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVt
biA9IHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gKyB0ZW1wLnZhbHVlOworICAgICAgICAgICAgcHJl
dmlvdXNPcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47CisgICAgICAgICAg
ICBzdHIgPSB0ZW1wLnJlc3Q7CisKKyAgICAgICAgICAgIGlmIChzdHIubGVuZ3RoID4gMCAmJiAh
bWFwcGluZ1NlcGFyYXRvci50ZXN0KHN0ci5jaGFyQXQoMCkpKSB7CisgICAgICAgICAgICAgIC8v
IE9yaWdpbmFsIG5hbWUuCisgICAgICAgICAgICAgIHRlbXAgPSBiYXNlNjRWTFEuZGVjb2RlKHN0
cik7CisgICAgICAgICAgICAgIG1hcHBpbmcubmFtZSA9IHRoaXMuX25hbWVzLmF0KHByZXZpb3Vz
TmFtZSArIHRlbXAudmFsdWUpOworICAgICAgICAgICAgICBwcmV2aW91c05hbWUgKz0gdGVtcC52
YWx1ZTsKKyAgICAgICAgICAgICAgc3RyID0gdGVtcC5yZXN0OworICAgICAgICAgICAgfQorICAg
ICAgICAgIH0KKworICAgICAgICAgIHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2gobWFwcGlu
Zyk7CisgICAgICAgICAgaWYgKHR5cGVvZiBtYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gJ251bWJl
cicpIHsKKyAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MucHVzaChtYXBwaW5nKTsK
KyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgdGhpcy5fb3JpZ2luYWxN
YXBwaW5ncy5zb3J0KHRoaXMuX2NvbXBhcmVPcmlnaW5hbFBvc2l0aW9ucyk7CisgICAgfTsKKwor
ICAvKioKKyAgICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aGVyZSB0aGUgb3Jp
Z2luYWwgcG9zaXRpb25zIGFyZSBjb21wYXJlZC4KKyAgICovCisgIFNvdXJjZU1hcENvbnN1bWVy
LnByb3RvdHlwZS5fY29tcGFyZU9yaWdpbmFsUG9zaXRpb25zID0KKyAgICBmdW5jdGlvbiBTb3Vy
Y2VNYXBDb25zdW1lcl9jb21wYXJlT3JpZ2luYWxQb3NpdGlvbnMobWFwcGluZ0EsIG1hcHBpbmdC
KSB7CisgICAgICBpZiAobWFwcGluZ0Euc291cmNlID4gbWFwcGluZ0Iuc291cmNlKSB7CisgICAg
ICAgIHJldHVybiAxOworICAgICAgfQorICAgICAgZWxzZSBpZiAobWFwcGluZ0Euc291cmNlIDwg
bWFwcGluZ0Iuc291cmNlKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIH0KKyAgICAgIGVs
c2UgeworICAgICAgICB2YXIgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iu
b3JpZ2luYWxMaW5lOworICAgICAgICByZXR1cm4gY21wID09PSAwCisgICAgICAgICAgPyBtYXBw
aW5nQS5vcmlnaW5hbENvbHVtbiAtIG1hcHBpbmdCLm9yaWdpbmFsQ29sdW1uCisgICAgICAgICAg
OiBjbXA7CisgICAgICB9CisgICAgfTsKKworICAvKioKKyAgICogQ29tcGFyYXRvciBiZXR3ZWVu
IHR3byBtYXBwaW5ncyB3aGVyZSB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQu
CisgICAqLworICBTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2NvbXBhcmVHZW5lcmF0ZWRQ
b3NpdGlvbnMgPQorICAgIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NvbXBhcmVHZW5lcmF0
ZWRQb3NpdGlvbnMobWFwcGluZ0EsIG1hcHBpbmdCKSB7CisgICAgICB2YXIgY21wID0gbWFwcGlu
Z0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7CisgICAgICByZXR1cm4g
Y21wID09PSAwCisgICAgICAgID8gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0Iu
Z2VuZXJhdGVkQ29sdW1uCisgICAgICAgIDogY21wOworICAgIH07CisKKyAgLyoqCisgICAqIEZp
bmQgdGhlIG1hcHBpbmcgdGhhdCBiZXN0IG1hdGNoZXMgdGhlIGh5cG90aGV0aWNhbCAibmVlZGxl
IiBtYXBwaW5nIHRoYXQKKyAgICogd2UgYXJlIHNlYXJjaGluZyBmb3IgaW4gdGhlIGdpdmVuICJo
YXlzdGFjayIgb2YgbWFwcGluZ3MuCisgICAqLworICBTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5
cGUuX2ZpbmRNYXBwaW5nID0KKyAgICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9maW5kTWFw
cGluZyhhTmVlZGxlLCBhTWFwcGluZ3MsIGFMaW5lTmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhQ29sdW1uTmFtZSwgYUNvbXBhcmF0b3IpIHsKKyAgICAg
IC8vIFRvIHJldHVybiB0aGUgcG9zaXRpb24gd2UgYXJlIHNlYXJjaGluZyBmb3IsIHdlIG11c3Qg
Zmlyc3QgZmluZCB0aGUKKyAgICAgIC8vIG1hcHBpbmcgZm9yIHRoZSBnaXZlbiBwb3NpdGlvbiBh
bmQgdGhlbiByZXR1cm4gdGhlIG9wcG9zaXRlIHBvc2l0aW9uIGl0CisgICAgICAvLyBwb2ludHMg
dG8uIEJlY2F1c2UgdGhlIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHdlIGNhbiB1c2UgYmluYXJ5IHNl
YXJjaCB0bworICAgICAgLy8gZmluZCB0aGUgYmVzdCBtYXBwaW5nLgorCisgICAgICBpZiAoYU5l
ZWRsZVthTGluZU5hbWVdIDw9IDApIHsKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTGlu
ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxLCBnb3QgJworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICsgYU5lZWRsZVthTGluZU5hbWVdKTsKKyAgICAgIH0KKyAgICAgIGlm
IChhTmVlZGxlW2FDb2x1bW5OYW1lXSA8IDApIHsKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJv
cignQ29sdW1uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGdvdCAnCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKyBhTmVlZGxlW2FDb2x1bW5OYW1lXSk7CisgICAgICB9
CisKKyAgICAgIHJldHVybiBiaW5hcnlTZWFyY2guc2VhcmNoKGFOZWVkbGUsIGFNYXBwaW5ncywg
YUNvbXBhcmF0b3IpOworICAgIH07CisKKyAgLyoqCisgICAqIFJldHVybnMgdGhlIG9yaWdpbmFs
IHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZAor
ICAgKiBzb3VyY2UncyBsaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25s
eSBhcmd1bWVudCBpcyBhbiBvYmplY3QKKyAgICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRp
ZXM6CisgICAqCisgICAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRl
ZCBzb3VyY2UuCisgICAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5l
cmF0ZWQgc291cmNlLgorICAgKgorICAgKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGgg
dGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorICAgKgorICAgKiAgIC0gc291cmNlOiBUaGUgb3Jp
Z2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuCisgICAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1i
ZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC4KKyAgICogICAtIGNvbHVtbjogVGhl
IGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC4KKyAgICogICAt
IG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLgorICAgKi8KKyAgU291cmNl
TWFwQ29uc3VtZXIucHJvdG90eXBlLm9yaWdpbmFsUG9zaXRpb25Gb3IgPQorICAgIGZ1bmN0aW9u
IFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHsKKyAgICAgIHZh
ciBuZWVkbGUgPSB7CisgICAgICAgIGdlbmVyYXRlZExpbmU6IHV0aWwuZ2V0QXJnKGFBcmdzLCAn
bGluZScpLAorICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29s
dW1uJykKKyAgICAgIH07CisKKyAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fZmluZE1hcHBpbmco
bmVlZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZW5l
cmF0ZWRNYXBwaW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdl
bmVyYXRlZExpbmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2Vu
ZXJhdGVkQ29sdW1uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5fY29tcGFyZUdlbmVyYXRlZFBvc2l0aW9ucyk7CisKKyAgICAgIGlmIChtYXBwaW5nKSB7Cisg
ICAgICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnc291cmNlJywgbnVsbCk7
CisgICAgICAgIGlmIChzb3VyY2UgJiYgdGhpcy5zb3VyY2VSb290KSB7CisgICAgICAgICAgc291
cmNlID0gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgc291cmNlKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4geworICAgICAgICAgIHNvdXJjZTogc291cmNlLAorICAgICAgICAgIGxpbmU6
IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdvcmlnaW5hbExpbmUnLCBudWxsKSwKKyAgICAgICAgICBj
b2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdvcmlnaW5hbENvbHVtbicsIG51bGwpLAorICAg
ICAgICAgIG5hbWU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICduYW1lJywgbnVsbCkKKyAgICAgICAg
fTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHsKKyAgICAgICAgc291cmNlOiBudWxsLAorICAg
ICAgICBsaW5lOiBudWxsLAorICAgICAgICBjb2x1bW46IG51bGwsCisgICAgICAgIG5hbWU6IG51
bGwKKyAgICAgIH07CisgICAgfTsKKworICAvKioKKyAgICogUmV0dXJucyB0aGUgb3JpZ2luYWwg
c291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlCisgICAq
IG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNl
IGNvbnRlbnQgaXMKKyAgICogYXZhaWxpYmxlLgorICAgKi8KKyAgU291cmNlTWFwQ29uc3VtZXIu
cHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IgPQorICAgIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1
bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSkgeworICAgICAgaWYgKCF0aGlzLnNvdXJjZXND
b250ZW50KSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfQorCisgICAgICBpZiAodGhp
cy5zb3VyY2VSb290KSB7CisgICAgICAgIGFTb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291
cmNlUm9vdCwgYVNvdXJjZSk7CisgICAgICB9CisKKyAgICAgIGlmICh0aGlzLl9zb3VyY2VzLmhh
cyhhU291cmNlKSkgeworICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9z
b3VyY2VzLmluZGV4T2YoYVNvdXJjZSldOworICAgICAgfQorCisgICAgICB2YXIgdXJsOworICAg
ICAgaWYgKHRoaXMuc291cmNlUm9vdAorICAgICAgICAgICYmICh1cmwgPSB1dGlsLnVybFBhcnNl
KHRoaXMuc291cmNlUm9vdCkpKSB7CisgICAgICAgIC8vIFhYWDogZmlsZTovLyBVUklzIGFuZCBh
YnNvbHV0ZSBwYXRocyBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZm9yCisgICAgICAgIC8v
IG1hbnkgdXNlcnMuIFdlIGNhbiBoZWxwIHRoZW0gb3V0IHdoZW4gdGhleSBleHBlY3QgZmlsZTov
LyBVUklzIHRvCisgICAgICAgIC8vIGJlaGF2ZSBsaWtlIGl0IHdvdWxkIGlmIHRoZXkgd2VyZSBy
dW5uaW5nIGEgbG9jYWwgSFRUUCBzZXJ2ZXIuIFNlZQorICAgICAgICAvLyBodHRwczovL2J1Z3pp
bGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD04ODU1OTcuCisgICAgICAgIHZhciBmaWxl
VXJpQWJzUGF0aCA9IGFTb3VyY2UucmVwbGFjZSgvXmZpbGU6XC9cLy8sICIiKTsKKyAgICAgICAg
aWYgKHVybC5zY2hlbWUgPT0gImZpbGUiCisgICAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhh
cyhmaWxlVXJpQWJzUGF0aCkpIHsKKyAgICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVu
dFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoZmlsZVVyaUFic1BhdGgpXQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCghdXJsLnBhdGggfHwgdXJsLnBhdGggPT0gIi8iKQorICAgICAgICAgICAgJiYg
dGhpcy5fc291cmNlcy5oYXMoIi8iICsgYVNvdXJjZSkpIHsKKyAgICAgICAgICByZXR1cm4gdGhp
cy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoIi8iICsgYVNvdXJjZSldOwor
ICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHRocm93IG5ldyBFcnJvcignIicgKyBhU291cmNl
ICsgJyIgaXMgbm90IGluIHRoZSBTb3VyY2VNYXAuJyk7CisgICAgfTsKKworICAvKioKKyAgICog
UmV0dXJucyB0aGUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhl
IG9yaWdpbmFsIHNvdXJjZSwKKyAgICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlk
ZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoCisgICAqIHRoZSBmb2xsb3dp
bmcgcHJvcGVydGllczoKKyAgICoKKyAgICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRo
ZSBvcmlnaW5hbCBzb3VyY2UuCisgICAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhl
IG9yaWdpbmFsIHNvdXJjZS4KKyAgICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4g
dGhlIG9yaWdpbmFsIHNvdXJjZS4KKyAgICoKKyAgICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5l
ZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKKyAgICoKKyAgICogICAtIGxpbmU6IFRo
ZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC4KKyAgICogICAt
IGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51
bGwuCisgICAqLworICBTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuZ2VuZXJhdGVkUG9zaXRp
b25Gb3IgPQorICAgIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9u
Rm9yKGFBcmdzKSB7CisgICAgICB2YXIgbmVlZGxlID0geworICAgICAgICBzb3VyY2U6IHV0aWwu
Z2V0QXJnKGFBcmdzLCAnc291cmNlJyksCisgICAgICAgIG9yaWdpbmFsTGluZTogdXRpbC5nZXRB
cmcoYUFyZ3MsICdsaW5lJyksCisgICAgICAgIG9yaWdpbmFsQ29sdW1uOiB1dGlsLmdldEFyZyhh
QXJncywgJ2NvbHVtbicpCisgICAgICB9OworCisgICAgICBpZiAodGhpcy5zb3VyY2VSb290KSB7
CisgICAgICAgIG5lZWRsZS5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwg
bmVlZGxlLnNvdXJjZSk7CisgICAgICB9CisKKyAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fZmlu
ZE1hcHBpbmcobmVlZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLl9vcmlnaW5hbE1hcHBpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAib3JpZ2luYWxMaW5lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIm9yaWdpbmFsQ29sdW1uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5fY29tcGFyZU9yaWdpbmFsUG9zaXRpb25zKTsKKworICAgICAgaWYgKG1hcHBpbmcp
IHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5n
LCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLAorICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmco
bWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpCisgICAgICAgIH07CisgICAgICB9CisK
KyAgICAgIHJldHVybiB7CisgICAgICAgIGxpbmU6IG51bGwsCisgICAgICAgIGNvbHVtbjogbnVs
bAorICAgICAgfTsKKyAgICB9OworCisgIFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRF
UiA9IDE7CisgIFNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSID0gMjsKKworICAvKioK
KyAgICogSXRlcmF0ZSBvdmVyIGVhY2ggbWFwcGluZyBiZXR3ZWVuIGFuIG9yaWdpbmFsIHNvdXJj
ZS9saW5lL2NvbHVtbiBhbmQgYQorICAgKiBnZW5lcmF0ZWQgbGluZS9jb2x1bW4gaW4gdGhpcyBz
b3VyY2UgbWFwLgorICAgKgorICAgKiBAcGFyYW0gRnVuY3Rpb24gYUNhbGxiYWNrCisgICAqICAg
ICAgICBUaGUgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBlYWNoIG1hcHBpbmcuCisgICAq
IEBwYXJhbSBPYmplY3QgYUNvbnRleHQKKyAgICogICAgICAgIE9wdGlvbmFsLiBJZiBzcGVjaWZp
ZWQsIHRoaXMgb2JqZWN0IHdpbGwgYmUgdGhlIHZhbHVlIG9mIGB0aGlzYCBldmVyeQorICAgKiAg
ICAgICAgdGltZSB0aGF0IGBhQ2FsbGJhY2tgIGlzIGNhbGxlZC4KKyAgICogQHBhcmFtIGFPcmRl
cgorICAgKiAgICAgICAgRWl0aGVyIGBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVJg
IG9yCisgICAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVJgLiBTcGVj
aWZpZXMgd2hldGhlciB5b3Ugd2FudCB0bworICAgKiAgICAgICAgaXRlcmF0ZSBvdmVyIHRoZSBt
YXBwaW5ncyBzb3J0ZWQgYnkgdGhlIGdlbmVyYXRlZCBmaWxlJ3MgbGluZS9jb2x1bW4KKyAgICog
ICAgICAgIG9yZGVyIG9yIHRoZSBvcmlnaW5hbCdzIHNvdXJjZS9saW5lL2NvbHVtbiBvcmRlciwg
cmVzcGVjdGl2ZWx5LiBEZWZhdWx0cyB0bworICAgKiAgICAgICAgYFNvdXJjZU1hcENvbnN1bWVy
LkdFTkVSQVRFRF9PUkRFUmAuCisgICAqLworICBTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUu
ZWFjaE1hcHBpbmcgPQorICAgIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2VhY2hNYXBwaW5n
KGFDYWxsYmFjaywgYUNvbnRleHQsIGFPcmRlcikgeworICAgICAgdmFyIGNvbnRleHQgPSBhQ29u
dGV4dCB8fCBudWxsOworICAgICAgdmFyIG9yZGVyID0gYU9yZGVyIHx8IFNvdXJjZU1hcENvbnN1
bWVyLkdFTkVSQVRFRF9PUkRFUjsKKworICAgICAgdmFyIG1hcHBpbmdzOworICAgICAgc3dpdGNo
IChvcmRlcikgeworICAgICAgY2FzZSBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI6
CisgICAgICAgIG1hcHBpbmdzID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3M7CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUjoKKyAgICAg
ICAgbWFwcGluZ3MgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzOworICAgICAgICBicmVhazsKKyAg
ICAgIGRlZmF1bHQ6CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBvcmRlciBvZiBp
dGVyYXRpb24uIik7CisgICAgICB9CisKKyAgICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5zb3Vy
Y2VSb290OworICAgICAgbWFwcGluZ3MubWFwKGZ1bmN0aW9uIChtYXBwaW5nKSB7CisgICAgICAg
IHZhciBzb3VyY2UgPSBtYXBwaW5nLnNvdXJjZTsKKyAgICAgICAgaWYgKHNvdXJjZSAmJiBzb3Vy
Y2VSb290KSB7CisgICAgICAgICAgc291cmNlID0gdXRpbC5qb2luKHNvdXJjZVJvb3QsIHNvdXJj
ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICBzb3VyY2U6IHNvdXJj
ZSwKKyAgICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsCisgICAg
ICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiwKKyAgICAgICAg
ICBvcmlnaW5hbExpbmU6IG1hcHBpbmcub3JpZ2luYWxMaW5lLAorICAgICAgICAgIG9yaWdpbmFs
Q29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLAorICAgICAgICAgIG5hbWU6IG1hcHBpbmcu
bmFtZQorICAgICAgICB9OworICAgICAgfSkuZm9yRWFjaChhQ2FsbGJhY2ssIGNvbnRleHQpOwor
ICAgIH07CisKKyAgZXhwb3J0cy5Tb3VyY2VNYXBDb25zdW1lciA9IFNvdXJjZU1hcENvbnN1bWVy
OworCit9KTsKKworfSx7Ii4vYXJyYXktc2V0Ijo2LCIuL2Jhc2U2NC12bHEiOjcsIi4vYmluYXJ5
LXNlYXJjaCI6OSwiLi91dGlsIjoxMywiYW1kZWZpbmUiOjE0fV0sMTE6W2Z1bmN0aW9uKHJlcXVp
cmUsbW9kdWxlLGV4cG9ydHMpeworLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7
IC0qLSAqLworLyoKKyAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29u
dHJpYnV0b3JzCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElD
RU5TRSBvcjoKKyAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UK
KyAqLworaWYgKHR5cGVvZiBkZWZpbmUgIT09ICdmdW5jdGlvbicpIHsKKyAgICB2YXIgZGVmaW5l
ID0gcmVxdWlyZSgnYW1kZWZpbmUnKShtb2R1bGUsIHJlcXVpcmUpOworfQorZGVmaW5lKGZ1bmN0
aW9uIChyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworICB2YXIgYmFzZTY0VkxRID0gcmVx
dWlyZSgnLi9iYXNlNjQtdmxxJyk7CisgIHZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7Cisg
IHZhciBBcnJheVNldCA9IHJlcXVpcmUoJy4vYXJyYXktc2V0JykuQXJyYXlTZXQ7CisKKyAgLyoq
CisgICAqIEFuIGluc3RhbmNlIG9mIHRoZSBTb3VyY2VNYXBHZW5lcmF0b3IgcmVwcmVzZW50cyBh
IHNvdXJjZSBtYXAgd2hpY2ggaXMKKyAgICogYmVpbmcgYnVpbHQgaW5jcmVtZW50YWxseS4gVG8g
Y3JlYXRlIGEgbmV3IG9uZSwgeW91IG11c3QgcGFzcyBhbiBvYmplY3QKKyAgICogd2l0aCB0aGUg
Zm9sbG93aW5nIHByb3BlcnRpZXM6CisgICAqCisgICAqICAgLSBmaWxlOiBUaGUgZmlsZW5hbWUg
b2YgdGhlIGdlbmVyYXRlZCBzb3VyY2UuCisgICAqICAgLSBzb3VyY2VSb290OiBBbiBvcHRpb25h
bCByb290IGZvciBhbGwgVVJMcyBpbiB0aGlzIHNvdXJjZSBtYXAuCisgICAqLworICBmdW5jdGlv
biBTb3VyY2VNYXBHZW5lcmF0b3IoYUFyZ3MpIHsKKyAgICB0aGlzLl9maWxlID0gdXRpbC5nZXRB
cmcoYUFyZ3MsICdmaWxlJyk7CisgICAgdGhpcy5fc291cmNlUm9vdCA9IHV0aWwuZ2V0QXJnKGFB
cmdzLCAnc291cmNlUm9vdCcsIG51bGwpOworICAgIHRoaXMuX3NvdXJjZXMgPSBuZXcgQXJyYXlT
ZXQoKTsKKyAgICB0aGlzLl9uYW1lcyA9IG5ldyBBcnJheVNldCgpOworICAgIHRoaXMuX21hcHBp
bmdzID0gW107CisgICAgdGhpcy5fc291cmNlc0NvbnRlbnRzID0gbnVsbDsKKyAgfQorCisgIFNv
dXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzOworCisgIC8qKgorICAgKiBD
cmVhdGVzIGEgbmV3IFNvdXJjZU1hcEdlbmVyYXRvciBiYXNlZCBvbiBhIFNvdXJjZU1hcENvbnN1
bWVyCisgICAqCisgICAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIFNvdXJjZU1hcC4K
KyAgICovCisgIFNvdXJjZU1hcEdlbmVyYXRvci5mcm9tU291cmNlTWFwID0KKyAgICBmdW5jdGlv
biBTb3VyY2VNYXBHZW5lcmF0b3JfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwQ29uc3VtZXIpIHsK
KyAgICAgIHZhciBzb3VyY2VSb290ID0gYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZVJvb3Q7Cisg
ICAgICB2YXIgZ2VuZXJhdG9yID0gbmV3IFNvdXJjZU1hcEdlbmVyYXRvcih7CisgICAgICAgIGZp
bGU6IGFTb3VyY2VNYXBDb25zdW1lci5maWxlLAorICAgICAgICBzb3VyY2VSb290OiBzb3VyY2VS
b290CisgICAgICB9KTsKKyAgICAgIGFTb3VyY2VNYXBDb25zdW1lci5lYWNoTWFwcGluZyhmdW5j
dGlvbiAobWFwcGluZykgeworICAgICAgICB2YXIgbmV3TWFwcGluZyA9IHsKKyAgICAgICAgICBn
ZW5lcmF0ZWQ6IHsKKyAgICAgICAgICAgIGxpbmU6IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSwKKyAg
ICAgICAgICAgIGNvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4KKyAgICAgICAgICB9Cisg
ICAgICAgIH07CisKKyAgICAgICAgaWYgKG1hcHBpbmcuc291cmNlKSB7CisgICAgICAgICAgbmV3
TWFwcGluZy5zb3VyY2UgPSBtYXBwaW5nLnNvdXJjZTsKKyAgICAgICAgICBpZiAoc291cmNlUm9v
dCkgeworICAgICAgICAgICAgbmV3TWFwcGluZy5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHNvdXJj
ZVJvb3QsIG5ld01hcHBpbmcuc291cmNlKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBuZXdN
YXBwaW5nLm9yaWdpbmFsID0geworICAgICAgICAgICAgbGluZTogbWFwcGluZy5vcmlnaW5hbExp
bmUsCisgICAgICAgICAgICBjb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW4KKyAgICAgICAg
ICB9OworCisgICAgICAgICAgaWYgKG1hcHBpbmcubmFtZSkgeworICAgICAgICAgICAgbmV3TWFw
cGluZy5uYW1lID0gbWFwcGluZy5uYW1lOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGdlbmVyYXRvci5hZGRNYXBwaW5nKG5ld01hcHBpbmcpOworICAgICAgfSk7CisgICAgICBh
U291cmNlTWFwQ29uc3VtZXIuc291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2VGaWxlKSB7
CisgICAgICAgIHZhciBjb250ZW50ID0gYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZUNvbnRlbnRG
b3Ioc291cmNlRmlsZSk7CisgICAgICAgIGlmIChjb250ZW50KSB7CisgICAgICAgICAgZ2VuZXJh
dG9yLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7CisgICAgICAgIH0KKyAg
ICAgIH0pOworICAgICAgcmV0dXJuIGdlbmVyYXRvcjsKKyAgICB9OworCisgIC8qKgorICAgKiBB
ZGQgYSBzaW5nbGUgbWFwcGluZyBmcm9tIG9yaWdpbmFsIHNvdXJjZSBsaW5lIGFuZCBjb2x1bW4g
dG8gdGhlIGdlbmVyYXRlZAorICAgKiBzb3VyY2UncyBsaW5lIGFuZCBjb2x1bW4gZm9yIHRoaXMg
c291cmNlIG1hcCBiZWluZyBjcmVhdGVkLiBUaGUgbWFwcGluZworICAgKiBvYmplY3Qgc2hvdWxk
IGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorICAgKgorICAgKiAgIC0gZ2VuZXJhdGVk
OiBBbiBvYmplY3Qgd2l0aCB0aGUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMu
CisgICAqICAgLSBvcmlnaW5hbDogQW4gb2JqZWN0IHdpdGggdGhlIG9yaWdpbmFsIGxpbmUgYW5k
IGNvbHVtbiBwb3NpdGlvbnMuCisgICAqICAgLSBzb3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2Ug
ZmlsZSAocmVsYXRpdmUgdG8gdGhlIHNvdXJjZVJvb3QpLgorICAgKiAgIC0gbmFtZTogQW4gb3B0
aW9uYWwgb3JpZ2luYWwgdG9rZW4gbmFtZSBmb3IgdGhpcyBtYXBwaW5nLgorICAgKi8KKyAgU291
cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hZGRNYXBwaW5nID0KKyAgICBmdW5jdGlvbiBTb3Vy
Y2VNYXBHZW5lcmF0b3JfYWRkTWFwcGluZyhhQXJncykgeworICAgICAgdmFyIGdlbmVyYXRlZCA9
IHV0aWwuZ2V0QXJnKGFBcmdzLCAnZ2VuZXJhdGVkJyk7CisgICAgICB2YXIgb3JpZ2luYWwgPSB1
dGlsLmdldEFyZyhhQXJncywgJ29yaWdpbmFsJywgbnVsbCk7CisgICAgICB2YXIgc291cmNlID0g
dXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnLCBudWxsKTsKKyAgICAgIHZhciBuYW1lID0gdXRp
bC5nZXRBcmcoYUFyZ3MsICduYW1lJywgbnVsbCk7CisKKyAgICAgIHRoaXMuX3ZhbGlkYXRlTWFw
cGluZyhnZW5lcmF0ZWQsIG9yaWdpbmFsLCBzb3VyY2UsIG5hbWUpOworCisgICAgICBpZiAoc291
cmNlICYmICF0aGlzLl9zb3VyY2VzLmhhcyhzb3VyY2UpKSB7CisgICAgICAgIHRoaXMuX3NvdXJj
ZXMuYWRkKHNvdXJjZSk7CisgICAgICB9CisKKyAgICAgIGlmIChuYW1lICYmICF0aGlzLl9uYW1l
cy5oYXMobmFtZSkpIHsKKyAgICAgICAgdGhpcy5fbmFtZXMuYWRkKG5hbWUpOworICAgICAgfQor
CisgICAgICB0aGlzLl9tYXBwaW5ncy5wdXNoKHsKKyAgICAgICAgZ2VuZXJhdGVkOiBnZW5lcmF0
ZWQsCisgICAgICAgIG9yaWdpbmFsOiBvcmlnaW5hbCwKKyAgICAgICAgc291cmNlOiBzb3VyY2Us
CisgICAgICAgIG5hbWU6IG5hbWUKKyAgICAgIH0pOworICAgIH07CisKKyAgLyoqCisgICAqIFNl
dCB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGEgc291cmNlIGZpbGUuCisgICAqLworICBTb3VyY2VN
YXBHZW5lcmF0b3IucHJvdG90eXBlLnNldFNvdXJjZUNvbnRlbnQgPQorICAgIGZ1bmN0aW9uIFNv
dXJjZU1hcEdlbmVyYXRvcl9zZXRTb3VyY2VDb250ZW50KGFTb3VyY2VGaWxlLCBhU291cmNlQ29u
dGVudCkgeworICAgICAgdmFyIHNvdXJjZSA9IGFTb3VyY2VGaWxlOworICAgICAgaWYgKHRoaXMu
X3NvdXJjZVJvb3QpIHsKKyAgICAgICAgc291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLl9zb3Vy
Y2VSb290LCBzb3VyY2UpOworICAgICAgfQorCisgICAgICBpZiAoYVNvdXJjZUNvbnRlbnQgIT09
IG51bGwpIHsKKyAgICAgICAgLy8gQWRkIHRoZSBzb3VyY2UgY29udGVudCB0byB0aGUgX3NvdXJj
ZXNDb250ZW50cyBtYXAuCisgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBfc291cmNlc0NvbnRlbnRz
IG1hcCBpZiB0aGUgcHJvcGVydHkgaXMgbnVsbC4KKyAgICAgICAgaWYgKCF0aGlzLl9zb3VyY2Vz
Q29udGVudHMpIHsKKyAgICAgICAgICB0aGlzLl9zb3VyY2VzQ29udGVudHMgPSB7fTsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLl9zb3VyY2VzQ29udGVudHNbdXRpbC50b1NldFN0cmluZyhzb3Vy
Y2UpXSA9IGFTb3VyY2VDb250ZW50OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gUmVtb3Zl
IHRoZSBzb3VyY2UgZmlsZSBmcm9tIHRoZSBfc291cmNlc0NvbnRlbnRzIG1hcC4KKyAgICAgICAg
Ly8gSWYgdGhlIF9zb3VyY2VzQ29udGVudHMgbWFwIGlzIGVtcHR5LCBzZXQgdGhlIHByb3BlcnR5
IHRvIG51bGwuCisgICAgICAgIGRlbGV0ZSB0aGlzLl9zb3VyY2VzQ29udGVudHNbdXRpbC50b1Nl
dFN0cmluZyhzb3VyY2UpXTsKKyAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuX3NvdXJjZXND
b250ZW50cykubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgdGhpcy5fc291cmNlc0NvbnRlbnRz
ID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07CisKKyAgLyoqCisgICAqIEFwcGxp
ZXMgdGhlIG1hcHBpbmdzIG9mIGEgc3ViLXNvdXJjZS1tYXAgZm9yIGEgc3BlY2lmaWMgc291cmNl
IGZpbGUgdG8gdGhlCisgICAqIHNvdXJjZSBtYXAgYmVpbmcgZ2VuZXJhdGVkLiBFYWNoIG1hcHBp
bmcgdG8gdGhlIHN1cHBsaWVkIHNvdXJjZSBmaWxlIGlzCisgICAqIHJld3JpdHRlbiB1c2luZyB0
aGUgc3VwcGxpZWQgc291cmNlIG1hcC4gTm90ZTogVGhlIHJlc29sdXRpb24gZm9yIHRoZQorICAg
KiByZXN1bHRpbmcgbWFwcGluZ3MgaXMgdGhlIG1pbmltaXVtIG9mIHRoaXMgbWFwIGFuZCB0aGUg
c3VwcGxpZWQgbWFwLgorICAgKgorICAgKiBAcGFyYW0gYVNvdXJjZU1hcENvbnN1bWVyIFRoZSBz
b3VyY2UgbWFwIHRvIGJlIGFwcGxpZWQuCisgICAqIEBwYXJhbSBhU291cmNlRmlsZSBPcHRpb25h
bC4gVGhlIGZpbGVuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZS4KKyAgICogICAgICAgIElmIG9taXR0
ZWQsIFNvdXJjZU1hcENvbnN1bWVyJ3MgZmlsZSBwcm9wZXJ0eSB3aWxsIGJlIHVzZWQuCisgICAq
LworICBTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLmFwcGx5U291cmNlTWFwID0KKyAgICBm
dW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfYXBwbHlTb3VyY2VNYXAoYVNvdXJjZU1hcENvbnN1
bWVyLCBhU291cmNlRmlsZSkgeworICAgICAgLy8gSWYgYVNvdXJjZUZpbGUgaXMgb21pdHRlZCwg
d2Ugd2lsbCB1c2UgdGhlIGZpbGUgcHJvcGVydHkgb2YgdGhlIFNvdXJjZU1hcAorICAgICAgaWYg
KCFhU291cmNlRmlsZSkgeworICAgICAgICBhU291cmNlRmlsZSA9IGFTb3VyY2VNYXBDb25zdW1l
ci5maWxlOworICAgICAgfQorICAgICAgdmFyIHNvdXJjZVJvb3QgPSB0aGlzLl9zb3VyY2VSb290
OworICAgICAgLy8gTWFrZSAiYVNvdXJjZUZpbGUiIHJlbGF0aXZlIGlmIGFuIGFic29sdXRlIFVy
bCBpcyBwYXNzZWQuCisgICAgICBpZiAoc291cmNlUm9vdCkgeworICAgICAgICBhU291cmNlRmls
ZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgYVNvdXJjZUZpbGUpOworICAgICAgfQorICAg
ICAgLy8gQXBwbHlpbmcgdGhlIFNvdXJjZU1hcCBjYW4gYWRkIGFuZCByZW1vdmUgaXRlbXMgZnJv
bSB0aGUgc291cmNlcyBhbmQKKyAgICAgIC8vIHRoZSBuYW1lcyBhcnJheS4KKyAgICAgIHZhciBu
ZXdTb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7CisgICAgICB2YXIgbmV3TmFtZXMgPSBuZXcgQXJy
YXlTZXQoKTsKKworICAgICAgLy8gRmluZCBtYXBwaW5ncyBmb3IgdGhlICJhU291cmNlRmlsZSIK
KyAgICAgIHRoaXMuX21hcHBpbmdzLmZvckVhY2goZnVuY3Rpb24gKG1hcHBpbmcpIHsKKyAgICAg
ICAgaWYgKG1hcHBpbmcuc291cmNlID09PSBhU291cmNlRmlsZSAmJiBtYXBwaW5nLm9yaWdpbmFs
KSB7CisgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQgY2FuIGJlIG1hcHBlZCBieSB0aGUgc291cmNl
IG1hcCwgdGhlbiB1cGRhdGUgdGhlIG1hcHBpbmcuCisgICAgICAgICAgdmFyIG9yaWdpbmFsID0g
YVNvdXJjZU1hcENvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3IoeworICAgICAgICAgICAgbGlu
ZTogbWFwcGluZy5vcmlnaW5hbC5saW5lLAorICAgICAgICAgICAgY29sdW1uOiBtYXBwaW5nLm9y
aWdpbmFsLmNvbHVtbgorICAgICAgICAgIH0pOworICAgICAgICAgIGlmIChvcmlnaW5hbC5zb3Vy
Y2UgIT09IG51bGwpIHsKKyAgICAgICAgICAgIC8vIENvcHkgbWFwcGluZworICAgICAgICAgICAg
aWYgKHNvdXJjZVJvb3QpIHsKKyAgICAgICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSB1dGlsLnJl
bGF0aXZlKHNvdXJjZVJvb3QsIG9yaWdpbmFsLnNvdXJjZSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IG9yaWdpbmFsLnNvdXJjZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWwubGluZSA9IG9yaWdpbmFsLmxp
bmU7CisgICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsLmNvbHVtbiA9IG9yaWdpbmFsLmNvbHVt
bjsKKyAgICAgICAgICAgIGlmIChvcmlnaW5hbC5uYW1lICE9PSBudWxsICYmIG1hcHBpbmcubmFt
ZSAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAvLyBPbmx5IHVzZSB0aGUgaWRlbnRpZmllciBu
YW1lIGlmIGl0J3MgYW4gaWRlbnRpZmllcgorICAgICAgICAgICAgICAvLyBpbiBib3RoIFNvdXJj
ZU1hcHMKKyAgICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gb3JpZ2luYWwubmFtZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2YXIgc291cmNlID0g
bWFwcGluZy5zb3VyY2U7CisgICAgICAgIGlmIChzb3VyY2UgJiYgIW5ld1NvdXJjZXMuaGFzKHNv
dXJjZSkpIHsKKyAgICAgICAgICBuZXdTb3VyY2VzLmFkZChzb3VyY2UpOworICAgICAgICB9CisK
KyAgICAgICAgdmFyIG5hbWUgPSBtYXBwaW5nLm5hbWU7CisgICAgICAgIGlmIChuYW1lICYmICFu
ZXdOYW1lcy5oYXMobmFtZSkpIHsKKyAgICAgICAgICBuZXdOYW1lcy5hZGQobmFtZSk7CisgICAg
ICAgIH0KKworICAgICAgfSwgdGhpcyk7CisgICAgICB0aGlzLl9zb3VyY2VzID0gbmV3U291cmNl
czsKKyAgICAgIHRoaXMuX25hbWVzID0gbmV3TmFtZXM7CisKKyAgICAgIC8vIENvcHkgc291cmNl
c0NvbnRlbnRzIG9mIGFwcGxpZWQgbWFwLgorICAgICAgYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJj
ZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlRmlsZSkgeworICAgICAgICB2YXIgY29udGVudCA9
IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKHNvdXJjZUZpbGUpOworICAgICAg
ICBpZiAoY29udGVudCkgeworICAgICAgICAgIGlmIChzb3VyY2VSb290KSB7CisgICAgICAgICAg
ICBzb3VyY2VGaWxlID0gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBzb3VyY2VGaWxlKTsKKyAg
ICAgICAgICB9CisgICAgICAgICAgdGhpcy5zZXRTb3VyY2VDb250ZW50KHNvdXJjZUZpbGUsIGNv
bnRlbnQpOworICAgICAgICB9CisgICAgICB9LCB0aGlzKTsKKyAgICB9OworCisgIC8qKgorICAg
KiBBIG1hcHBpbmcgY2FuIGhhdmUgb25lIG9mIHRoZSB0aHJlZSBsZXZlbHMgb2YgZGF0YToKKyAg
ICoKKyAgICogICAxLiBKdXN0IHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24uCisgICAqICAgMi4gVGhl
IEdlbmVyYXRlZCBwb3NpdGlvbiwgb3JpZ2luYWwgcG9zaXRpb24sIGFuZCBvcmlnaW5hbCBzb3Vy
Y2UuCisgICAqICAgMy4gR2VuZXJhdGVkIGFuZCBvcmlnaW5hbCBwb3NpdGlvbiwgb3JpZ2luYWwg
c291cmNlLCBhcyB3ZWxsIGFzIGEgbmFtZQorICAgKiAgICAgIHRva2VuLgorICAgKgorICAgKiBU
byBtYWludGFpbiBjb25zaXN0ZW5jeSwgd2UgdmFsaWRhdGUgdGhhdCBhbnkgbmV3IG1hcHBpbmcg
YmVpbmcgYWRkZWQgZmFsbHMKKyAgICogaW4gdG8gb25lIG9mIHRoZXNlIGNhdGVnb3JpZXMuCisg
ICAqLworICBTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLl92YWxpZGF0ZU1hcHBpbmcgPQor
ICAgIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl92YWxpZGF0ZU1hcHBpbmcoYUdlbmVyYXRl
ZCwgYU9yaWdpbmFsLCBhU291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYU5hbWUpIHsKKyAgICAgIGlmIChhR2VuZXJhdGVkICYmICdsaW5lJyBp
biBhR2VuZXJhdGVkICYmICdjb2x1bW4nIGluIGFHZW5lcmF0ZWQKKyAgICAgICAgICAmJiBhR2Vu
ZXJhdGVkLmxpbmUgPiAwICYmIGFHZW5lcmF0ZWQuY29sdW1uID49IDAKKyAgICAgICAgICAmJiAh
YU9yaWdpbmFsICYmICFhU291cmNlICYmICFhTmFtZSkgeworICAgICAgICAvLyBDYXNlIDEuCisg
ICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGFHZW5lcmF0ZWQgJiYgJ2xp
bmUnIGluIGFHZW5lcmF0ZWQgJiYgJ2NvbHVtbicgaW4gYUdlbmVyYXRlZAorICAgICAgICAgICAg
ICAgJiYgYU9yaWdpbmFsICYmICdsaW5lJyBpbiBhT3JpZ2luYWwgJiYgJ2NvbHVtbicgaW4gYU9y
aWdpbmFsCisgICAgICAgICAgICAgICAmJiBhR2VuZXJhdGVkLmxpbmUgPiAwICYmIGFHZW5lcmF0
ZWQuY29sdW1uID49IDAKKyAgICAgICAgICAgICAgICYmIGFPcmlnaW5hbC5saW5lID4gMCAmJiBh
T3JpZ2luYWwuY29sdW1uID49IDAKKyAgICAgICAgICAgICAgICYmIGFTb3VyY2UpIHsKKyAgICAg
ICAgLy8gQ2FzZXMgMiBhbmQgMy4KKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgZWxz
ZSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtYXBwaW5nLicpOworICAgICAg
fQorICAgIH07CisKKyAgZnVuY3Rpb24gY21wTG9jYXRpb24obG9jMSwgbG9jMikgeworICAgIHZh
ciBjbXAgPSAobG9jMSAmJiBsb2MxLmxpbmUpIC0gKGxvYzIgJiYgbG9jMi5saW5lKTsKKyAgICBy
ZXR1cm4gY21wID8gY21wIDogKGxvYzEgJiYgbG9jMS5jb2x1bW4pIC0gKGxvYzIgJiYgbG9jMi5j
b2x1bW4pOworICB9CisKKyAgZnVuY3Rpb24gc3RyY21wKHN0cjEsIHN0cjIpIHsKKyAgICBzdHIx
ID0gc3RyMSB8fCAnJzsKKyAgICBzdHIyID0gc3RyMiB8fCAnJzsKKyAgICByZXR1cm4gKHN0cjEg
PiBzdHIyKSAtIChzdHIxIDwgc3RyMik7CisgIH0KKworICBmdW5jdGlvbiBjbXBNYXBwaW5nKG1h
cHBpbmdBLCBtYXBwaW5nQikgeworICAgIHJldHVybiBjbXBMb2NhdGlvbihtYXBwaW5nQS5nZW5l
cmF0ZWQsIG1hcHBpbmdCLmdlbmVyYXRlZCkgfHwKKyAgICAgIGNtcExvY2F0aW9uKG1hcHBpbmdB
Lm9yaWdpbmFsLCBtYXBwaW5nQi5vcmlnaW5hbCkgfHwKKyAgICAgIHN0cmNtcChtYXBwaW5nQS5z
b3VyY2UsIG1hcHBpbmdCLnNvdXJjZSkgfHwKKyAgICAgIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBt
YXBwaW5nQi5uYW1lKTsKKyAgfQorCisgIC8qKgorICAgKiBTZXJpYWxpemUgdGhlIGFjY3VtdWxh
dGVkIG1hcHBpbmdzIGluIHRvIHRoZSBzdHJlYW0gb2YgYmFzZSA2NCBWTFFzCisgICAqIHNwZWNp
ZmllZCBieSB0aGUgc291cmNlIG1hcCBmb3JtYXQuCisgICAqLworICBTb3VyY2VNYXBHZW5lcmF0
b3IucHJvdG90eXBlLl9zZXJpYWxpemVNYXBwaW5ncyA9CisgICAgZnVuY3Rpb24gU291cmNlTWFw
R2VuZXJhdG9yX3NlcmlhbGl6ZU1hcHBpbmdzKCkgeworICAgICAgdmFyIHByZXZpb3VzR2VuZXJh
dGVkQ29sdW1uID0gMDsKKyAgICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZExpbmUgPSAxOworICAg
ICAgdmFyIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gPSAwOworICAgICAgdmFyIHByZXZpb3VzT3Jp
Z2luYWxMaW5lID0gMDsKKyAgICAgIHZhciBwcmV2aW91c05hbWUgPSAwOworICAgICAgdmFyIHBy
ZXZpb3VzU291cmNlID0gMDsKKyAgICAgIHZhciByZXN1bHQgPSAnJzsKKyAgICAgIHZhciBtYXBw
aW5nOworCisgICAgICAvLyBUaGUgbWFwcGluZ3MgbXVzdCBiZSBndWFyYW50ZWVkIHRvIGJlIGlu
IHNvcnRlZCBvcmRlciBiZWZvcmUgd2Ugc3RhcnQKKyAgICAgIC8vIHNlcmlhbGl6aW5nIHRoZW0g
b3IgZWxzZSB0aGUgZ2VuZXJhdGVkIGxpbmUgbnVtYmVycyAod2hpY2ggYXJlIGRlZmluZWQKKyAg
ICAgIC8vIHZpYSB0aGUgJzsnIHNlcGFyYXRvcnMpIHdpbGwgYmUgYWxsIG1lc3NlZCB1cC4gTm90
ZTogaXQgbWlnaHQgYmUgbW9yZQorICAgICAgLy8gcGVyZm9ybWFudCB0byBtYWludGFpbiB0aGUg
c29ydGluZyBhcyB3ZSBpbnNlcnQgdGhlbSwgcmF0aGVyIHRoYW4gYXMgd2UKKyAgICAgIC8vIHNl
cmlhbGl6ZSB0aGVtLCBidXQgdGhlIGJpZyBPIGlzIHRoZSBzYW1lIGVpdGhlciB3YXkuCisgICAg
ICB0aGlzLl9tYXBwaW5ncy5zb3J0KGNtcE1hcHBpbmcpOworCisgICAgICBmb3IgKHZhciBpID0g
MCwgbGVuID0gdGhpcy5fbWFwcGluZ3MubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAg
bWFwcGluZyA9IHRoaXMuX21hcHBpbmdzW2ldOworCisgICAgICAgIGlmIChtYXBwaW5nLmdlbmVy
YXRlZC5saW5lICE9PSBwcmV2aW91c0dlbmVyYXRlZExpbmUpIHsKKyAgICAgICAgICBwcmV2aW91
c0dlbmVyYXRlZENvbHVtbiA9IDA7CisgICAgICAgICAgd2hpbGUgKG1hcHBpbmcuZ2VuZXJhdGVk
LmxpbmUgIT09IHByZXZpb3VzR2VuZXJhdGVkTGluZSkgeworICAgICAgICAgICAgcmVzdWx0ICs9
ICc7JzsKKyAgICAgICAgICAgIHByZXZpb3VzR2VuZXJhdGVkTGluZSsrOworICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBpZiAoaSA+IDApIHsKKyAgICAg
ICAgICAgIGlmICghY21wTWFwcGluZyhtYXBwaW5nLCB0aGlzLl9tYXBwaW5nc1tpIC0gMV0pKSB7
CisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVz
dWx0ICs9ICcsJzsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQgKz0g
YmFzZTY0VkxRLmVuY29kZShtYXBwaW5nLmdlbmVyYXRlZC5jb2x1bW4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLSBwcmV2aW91c0dlbmVyYXRlZENvbHVtbik7CisgICAgICAg
IHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWQuY29sdW1uOworCisg
ICAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSAmJiBtYXBwaW5nLm9yaWdpbmFsKSB7CisgICAgICAg
ICAgcmVzdWx0ICs9IGJhc2U2NFZMUS5lbmNvZGUodGhpcy5fc291cmNlcy5pbmRleE9mKG1hcHBp
bmcuc291cmNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcHJldmlv
dXNTb3VyY2UpOworICAgICAgICAgIHByZXZpb3VzU291cmNlID0gdGhpcy5fc291cmNlcy5pbmRl
eE9mKG1hcHBpbmcuc291cmNlKTsKKworICAgICAgICAgIC8vIGxpbmVzIGFyZSBzdG9yZWQgMC1i
YXNlZCBpbiBTb3VyY2VNYXAgc3BlYyB2ZXJzaW9uIDMKKyAgICAgICAgICByZXN1bHQgKz0gYmFz
ZTY0VkxRLmVuY29kZShtYXBwaW5nLm9yaWdpbmFsLmxpbmUgLSAxCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLSBwcmV2aW91c09yaWdpbmFsTGluZSk7CisgICAgICAgICAg
cHJldmlvdXNPcmlnaW5hbExpbmUgPSBtYXBwaW5nLm9yaWdpbmFsLmxpbmUgLSAxOworCisgICAg
ICAgICAgcmVzdWx0ICs9IGJhc2U2NFZMUS5lbmNvZGUobWFwcGluZy5vcmlnaW5hbC5jb2x1bW4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHByZXZpb3VzT3JpZ2luYWxD
b2x1bW4pOworICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdp
bmFsLmNvbHVtbjsKKworICAgICAgICAgIGlmIChtYXBwaW5nLm5hbWUpIHsKKyAgICAgICAgICAg
IHJlc3VsdCArPSBiYXNlNjRWTFEuZW5jb2RlKHRoaXMuX25hbWVzLmluZGV4T2YobWFwcGluZy5u
YW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwcmV2aW91c05h
bWUpOworICAgICAgICAgICAgcHJldmlvdXNOYW1lID0gdGhpcy5fbmFtZXMuaW5kZXhPZihtYXBw
aW5nLm5hbWUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH07CisKKyAgLyoqCisgICAqIEV4dGVybmFsaXplIHRoZSBzb3VyY2Ug
bWFwLgorICAgKi8KKyAgU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS50b0pTT04gPQorICAg
IGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl90b0pTT04oKSB7CisgICAgICB2YXIgbWFwID0g
eworICAgICAgICB2ZXJzaW9uOiB0aGlzLl92ZXJzaW9uLAorICAgICAgICBmaWxlOiB0aGlzLl9m
aWxlLAorICAgICAgICBzb3VyY2VzOiB0aGlzLl9zb3VyY2VzLnRvQXJyYXkoKSwKKyAgICAgICAg
bmFtZXM6IHRoaXMuX25hbWVzLnRvQXJyYXkoKSwKKyAgICAgICAgbWFwcGluZ3M6IHRoaXMuX3Nl
cmlhbGl6ZU1hcHBpbmdzKCkKKyAgICAgIH07CisgICAgICBpZiAodGhpcy5fc291cmNlUm9vdCkg
eworICAgICAgICBtYXAuc291cmNlUm9vdCA9IHRoaXMuX3NvdXJjZVJvb3Q7CisgICAgICB9Cisg
ICAgICBpZiAodGhpcy5fc291cmNlc0NvbnRlbnRzKSB7CisgICAgICAgIG1hcC5zb3VyY2VzQ29u
dGVudCA9IG1hcC5zb3VyY2VzLm1hcChmdW5jdGlvbiAoc291cmNlKSB7CisgICAgICAgICAgaWYg
KG1hcC5zb3VyY2VSb290KSB7CisgICAgICAgICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKG1h
cC5zb3VyY2VSb290LCBzb3VyY2UpOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gT2Jq
ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKAorICAgICAgICAgICAgdGhpcy5fc291
cmNlc0NvbnRlbnRzLCB1dGlsLnRvU2V0U3RyaW5nKHNvdXJjZSkpCisgICAgICAgICAgICA/IHRo
aXMuX3NvdXJjZXNDb250ZW50c1t1dGlsLnRvU2V0U3RyaW5nKHNvdXJjZSldCisgICAgICAgICAg
ICA6IG51bGw7CisgICAgICAgIH0sIHRoaXMpOworICAgICAgfQorICAgICAgcmV0dXJuIG1hcDsK
KyAgICB9OworCisgIC8qKgorICAgKiBSZW5kZXIgdGhlIHNvdXJjZSBtYXAgYmVpbmcgZ2VuZXJh
dGVkIHRvIGEgc3RyaW5nLgorICAgKi8KKyAgU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS50
b1N0cmluZyA9CisgICAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3RvU3RyaW5nKCkgewor
ICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMpOworICAgIH07CisKKyAgZXhwb3J0cy5T
b3VyY2VNYXBHZW5lcmF0b3IgPSBTb3VyY2VNYXBHZW5lcmF0b3I7CisKK30pOworCit9LHsiLi9h
cnJheS1zZXQiOjYsIi4vYmFzZTY0LXZscSI6NywiLi91dGlsIjoxMywiYW1kZWZpbmUiOjE0fV0s
MTI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyogLSotIE1vZGU6IGpzOyBq
cy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqLworLyoKKyAqIENvcHlyaWdodCAyMDExIE1vemlsbGEg
Rm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJT
RCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjoKKyAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNl
bnNlcy9CU0QtMy1DbGF1c2UKKyAqLworaWYgKHR5cGVvZiBkZWZpbmUgIT09ICdmdW5jdGlvbicp
IHsKKyAgICB2YXIgZGVmaW5lID0gcmVxdWlyZSgnYW1kZWZpbmUnKShtb2R1bGUsIHJlcXVpcmUp
OworfQorZGVmaW5lKGZ1bmN0aW9uIChyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworICB2
YXIgU291cmNlTWFwR2VuZXJhdG9yID0gcmVxdWlyZSgnLi9zb3VyY2UtbWFwLWdlbmVyYXRvcicp
LlNvdXJjZU1hcEdlbmVyYXRvcjsKKyAgdmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTsKKwor
ICAvKioKKyAgICogU291cmNlTm9kZXMgcHJvdmlkZSBhIHdheSB0byBhYnN0cmFjdCBvdmVyIGlu
dGVycG9sYXRpbmcvY29uY2F0ZW5hdGluZworICAgKiBzbmlwcGV0cyBvZiBnZW5lcmF0ZWQgSmF2
YVNjcmlwdCBzb3VyY2UgY29kZSB3aGlsZSBtYWludGFpbmluZyB0aGUgbGluZSBhbmQKKyAgICog
Y29sdW1uIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JpZ2luYWwgc291cmNlIGNv
ZGUuCisgICAqCisgICAqIEBwYXJhbSBhTGluZSBUaGUgb3JpZ2luYWwgbGluZSBudW1iZXIuCisg
ICAqIEBwYXJhbSBhQ29sdW1uIFRoZSBvcmlnaW5hbCBjb2x1bW4gbnVtYmVyLgorICAgKiBAcGFy
YW0gYVNvdXJjZSBUaGUgb3JpZ2luYWwgc291cmNlJ3MgZmlsZW5hbWUuCisgICAqIEBwYXJhbSBh
Q2h1bmtzIE9wdGlvbmFsLiBBbiBhcnJheSBvZiBzdHJpbmdzIHdoaWNoIGFyZSBzbmlwcGV0cyBv
ZgorICAgKiAgICAgICAgZ2VuZXJhdGVkIEpTLCBvciBvdGhlciBTb3VyY2VOb2Rlcy4KKyAgICog
QHBhcmFtIGFOYW1lIFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLgorICAgKi8KKyAgZnVuY3Rpb24g
U291cmNlTm9kZShhTGluZSwgYUNvbHVtbiwgYVNvdXJjZSwgYUNodW5rcywgYU5hbWUpIHsKKyAg
ICB0aGlzLmNoaWxkcmVuID0gW107CisgICAgdGhpcy5zb3VyY2VDb250ZW50cyA9IHt9OworICAg
IHRoaXMubGluZSA9IGFMaW5lID09PSB1bmRlZmluZWQgPyBudWxsIDogYUxpbmU7CisgICAgdGhp
cy5jb2x1bW4gPSBhQ29sdW1uID09PSB1bmRlZmluZWQgPyBudWxsIDogYUNvbHVtbjsKKyAgICB0
aGlzLnNvdXJjZSA9IGFTb3VyY2UgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBhU291cmNlOworICAg
IHRoaXMubmFtZSA9IGFOYW1lID09PSB1bmRlZmluZWQgPyBudWxsIDogYU5hbWU7CisgICAgaWYg
KGFDaHVua3MgIT0gbnVsbCkgdGhpcy5hZGQoYUNodW5rcyk7CisgIH0KKworICAvKioKKyAgICog
Q3JlYXRlcyBhIFNvdXJjZU5vZGUgZnJvbSBnZW5lcmF0ZWQgY29kZSBhbmQgYSBTb3VyY2VNYXBD
b25zdW1lci4KKyAgICoKKyAgICogQHBhcmFtIGFHZW5lcmF0ZWRDb2RlIFRoZSBnZW5lcmF0ZWQg
Y29kZQorICAgKiBAcGFyYW0gYVNvdXJjZU1hcENvbnN1bWVyIFRoZSBTb3VyY2VNYXAgZm9yIHRo
ZSBnZW5lcmF0ZWQgY29kZQorICAgKi8KKyAgU291cmNlTm9kZS5mcm9tU3RyaW5nV2l0aFNvdXJj
ZU1hcCA9CisgICAgZnVuY3Rpb24gU291cmNlTm9kZV9mcm9tU3RyaW5nV2l0aFNvdXJjZU1hcChh
R2VuZXJhdGVkQ29kZSwgYVNvdXJjZU1hcENvbnN1bWVyKSB7CisgICAgICAvLyBUaGUgU291cmNl
Tm9kZSB3ZSB3YW50IHRvIGZpbGwgd2l0aCB0aGUgZ2VuZXJhdGVkIGNvZGUKKyAgICAgIC8vIGFu
ZCB0aGUgU291cmNlTWFwCisgICAgICB2YXIgbm9kZSA9IG5ldyBTb3VyY2VOb2RlKCk7CisKKyAg
ICAgIC8vIFRoZSBnZW5lcmF0ZWQgY29kZQorICAgICAgLy8gUHJvY2Vzc2VkIGZyYWdtZW50cyBh
cmUgcmVtb3ZlZCBmcm9tIHRoaXMgYXJyYXkuCisgICAgICB2YXIgcmVtYWluaW5nTGluZXMgPSBh
R2VuZXJhdGVkQ29kZS5zcGxpdCgnXG4nKTsKKworICAgICAgLy8gV2UgbmVlZCB0byByZW1lbWJl
ciB0aGUgcG9zaXRpb24gb2YgInJlbWFpbmluZ0xpbmVzIgorICAgICAgdmFyIGxhc3RHZW5lcmF0
ZWRMaW5lID0gMSwgbGFzdEdlbmVyYXRlZENvbHVtbiA9IDA7CisKKyAgICAgIC8vIFRoZSBnZW5l
cmF0ZSBTb3VyY2VOb2RlcyB3ZSBuZWVkIGEgY29kZSByYW5nZS4KKyAgICAgIC8vIFRvIGV4dHJh
Y3QgaXQgY3VycmVudCBhbmQgbGFzdCBtYXBwaW5nIGlzIHVzZWQuCisgICAgICAvLyBIZXJlIHdl
IHN0b3JlIHRoZSBsYXN0IG1hcHBpbmcuCisgICAgICB2YXIgbGFzdE1hcHBpbmcgPSBudWxsOwor
CisgICAgICBhU291cmNlTWFwQ29uc3VtZXIuZWFjaE1hcHBpbmcoZnVuY3Rpb24gKG1hcHBpbmcp
IHsKKyAgICAgICAgaWYgKGxhc3RNYXBwaW5nID09PSBudWxsKSB7CisgICAgICAgICAgLy8gV2Ug
YWRkIHRoZSBnZW5lcmF0ZWQgY29kZSB1bnRpbCB0aGUgZmlyc3QgbWFwcGluZworICAgICAgICAg
IC8vIHRvIHRoZSBTb3VyY2VOb2RlIHdpdGhvdXQgYW55IG1hcHBpbmcuCisgICAgICAgICAgLy8g
RWFjaCBsaW5lIGlzIGFkZGVkIGFzIHNlcGFyYXRlIHN0cmluZy4KKyAgICAgICAgICB3aGlsZSAo
bGFzdEdlbmVyYXRlZExpbmUgPCBtYXBwaW5nLmdlbmVyYXRlZExpbmUpIHsKKyAgICAgICAgICAg
IG5vZGUuYWRkKHJlbWFpbmluZ0xpbmVzLnNoaWZ0KCkgKyAiXG4iKTsKKyAgICAgICAgICAgIGxh
c3RHZW5lcmF0ZWRMaW5lKys7CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChsYXN0R2VuZXJh
dGVkQ29sdW1uIDwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pIHsKKyAgICAgICAgICAgIHZhciBu
ZXh0TGluZSA9IHJlbWFpbmluZ0xpbmVzWzBdOworICAgICAgICAgICAgbm9kZS5hZGQobmV4dExp
bmUuc3Vic3RyKDAsIG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uKSk7CisgICAgICAgICAgICByZW1h
aW5pbmdMaW5lc1swXSA9IG5leHRMaW5lLnN1YnN0cihtYXBwaW5nLmdlbmVyYXRlZENvbHVtbik7
CisgICAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1
bW47CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8vIFdlIGFkZCB0
aGUgY29kZSBmcm9tICJsYXN0TWFwcGluZyIgdG8gIm1hcHBpbmciOgorICAgICAgICAgIC8vIEZp
cnN0IGNoZWNrIGlmIHRoZXJlIGlzIGEgbmV3IGxpbmUgaW4gYmV0d2Vlbi4KKyAgICAgICAgICBp
ZiAobGFzdEdlbmVyYXRlZExpbmUgPCBtYXBwaW5nLmdlbmVyYXRlZExpbmUpIHsKKyAgICAgICAg
ICAgIHZhciBjb2RlID0gIiI7CisgICAgICAgICAgICAvLyBBc3NvY2lhdGUgZnVsbCBsaW5lcyB3
aXRoICJsYXN0TWFwcGluZyIKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgY29kZSAr
PSByZW1haW5pbmdMaW5lcy5zaGlmdCgpICsgIlxuIjsKKyAgICAgICAgICAgICAgbGFzdEdlbmVy
YXRlZExpbmUrKzsKKyAgICAgICAgICAgICAgbGFzdEdlbmVyYXRlZENvbHVtbiA9IDA7CisgICAg
ICAgICAgICB9IHdoaWxlIChsYXN0R2VuZXJhdGVkTGluZSA8IG1hcHBpbmcuZ2VuZXJhdGVkTGlu
ZSk7CisgICAgICAgICAgICAvLyBXaGVuIHdlIHJlYWNoZWQgdGhlIGNvcnJlY3QgbGluZSwgd2Ug
YWRkIGNvZGUgdW50aWwgd2UKKyAgICAgICAgICAgIC8vIHJlYWNoIHRoZSBjb3JyZWN0IGNvbHVt
biB0b28uCisgICAgICAgICAgICBpZiAobGFzdEdlbmVyYXRlZENvbHVtbiA8IG1hcHBpbmcuZ2Vu
ZXJhdGVkQ29sdW1uKSB7CisgICAgICAgICAgICAgIHZhciBuZXh0TGluZSA9IHJlbWFpbmluZ0xp
bmVzWzBdOworICAgICAgICAgICAgICBjb2RlICs9IG5leHRMaW5lLnN1YnN0cigwLCBtYXBwaW5n
LmdlbmVyYXRlZENvbHVtbik7CisgICAgICAgICAgICAgIHJlbWFpbmluZ0xpbmVzWzBdID0gbmV4
dExpbmUuc3Vic3RyKG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uKTsKKyAgICAgICAgICAgICAgbGFz
dEdlbmVyYXRlZENvbHVtbiA9IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBTb3VyY2VOb2RlLgorICAgICAgICAgICAgYWRk
TWFwcGluZ1dpdGhDb2RlKGxhc3RNYXBwaW5nLCBjb2RlKTsKKyAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm8gbmV3IGxpbmUgaW4gYmV0d2Vlbi4KKyAgICAgICAg
ICAgIC8vIEFzc29jaWF0ZSB0aGUgY29kZSBiZXR3ZWVuICJsYXN0R2VuZXJhdGVkQ29sdW1uIiBh
bmQKKyAgICAgICAgICAgIC8vICJtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiIgd2l0aCAibGFzdE1h
cHBpbmciCisgICAgICAgICAgICB2YXIgbmV4dExpbmUgPSByZW1haW5pbmdMaW5lc1swXTsKKyAg
ICAgICAgICAgIHZhciBjb2RlID0gbmV4dExpbmUuc3Vic3RyKDAsIG1hcHBpbmcuZ2VuZXJhdGVk
Q29sdW1uIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RH
ZW5lcmF0ZWRDb2x1bW4pOworICAgICAgICAgICAgcmVtYWluaW5nTGluZXNbMF0gPSBuZXh0TGlu
ZS5zdWJzdHIobWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gLQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEdlbmVyYXRlZENvbHVtbik7CisgICAgICAg
ICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47CisgICAg
ICAgICAgICBhZGRNYXBwaW5nV2l0aENvZGUobGFzdE1hcHBpbmcsIGNvZGUpOworICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBsYXN0TWFwcGluZyA9IG1hcHBpbmc7CisgICAgICB9LCB0
aGlzKTsKKyAgICAgIC8vIFdlIGhhdmUgcHJvY2Vzc2VkIGFsbCBtYXBwaW5ncy4KKyAgICAgIC8v
IEFzc29jaWF0ZSB0aGUgcmVtYWluaW5nIGNvZGUgaW4gdGhlIGN1cnJlbnQgbGluZSB3aXRoICJs
YXN0TWFwcGluZyIKKyAgICAgIC8vIGFuZCBhZGQgdGhlIHJlbWFpbmluZyBsaW5lcyB3aXRob3V0
IGFueSBtYXBwaW5nCisgICAgICBhZGRNYXBwaW5nV2l0aENvZGUobGFzdE1hcHBpbmcsIHJlbWFp
bmluZ0xpbmVzLmpvaW4oIlxuIikpOworCisgICAgICAvLyBDb3B5IHNvdXJjZXNDb250ZW50IGlu
dG8gU291cmNlTm9kZQorICAgICAgYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZXMuZm9yRWFjaChm
dW5jdGlvbiAoc291cmNlRmlsZSkgeworICAgICAgICB2YXIgY29udGVudCA9IGFTb3VyY2VNYXBD
b25zdW1lci5zb3VyY2VDb250ZW50Rm9yKHNvdXJjZUZpbGUpOworICAgICAgICBpZiAoY29udGVu
dCkgeworICAgICAgICAgIG5vZGUuc2V0U291cmNlQ29udGVudChzb3VyY2VGaWxlLCBjb250ZW50
KTsKKyAgICAgICAgfQorICAgICAgfSk7CisKKyAgICAgIHJldHVybiBub2RlOworCisgICAgICBm
dW5jdGlvbiBhZGRNYXBwaW5nV2l0aENvZGUobWFwcGluZywgY29kZSkgeworICAgICAgICBpZiAo
bWFwcGluZyA9PT0gbnVsbCB8fCBtYXBwaW5nLnNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7CisgICAg
ICAgICAgbm9kZS5hZGQoY29kZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbm9kZS5h
ZGQobmV3IFNvdXJjZU5vZGUobWFwcGluZy5vcmlnaW5hbExpbmUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLnNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
cHBpbmcubmFtZSkpOworICAgICAgICB9CisgICAgICB9CisgICAgfTsKKworICAvKioKKyAgICog
QWRkIGEgY2h1bmsgb2YgZ2VuZXJhdGVkIEpTIHRvIHRoaXMgc291cmNlIG5vZGUuCisgICAqCisg
ICAqIEBwYXJhbSBhQ2h1bmsgQSBzdHJpbmcgc25pcHBldCBvZiBnZW5lcmF0ZWQgSlMgY29kZSwg
YW5vdGhlciBpbnN0YW5jZSBvZgorICAgKiAgICAgICAgU291cmNlTm9kZSwgb3IgYW4gYXJyYXkg
d2hlcmUgZWFjaCBtZW1iZXIgaXMgb25lIG9mIHRob3NlIHRoaW5ncy4KKyAgICovCisgIFNvdXJj
ZU5vZGUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfYWRkKGFDaHVuaykgewor
ICAgIGlmIChBcnJheS5pc0FycmF5KGFDaHVuaykpIHsKKyAgICAgIGFDaHVuay5mb3JFYWNoKGZ1
bmN0aW9uIChjaHVuaykgeworICAgICAgICB0aGlzLmFkZChjaHVuayk7CisgICAgICB9LCB0aGlz
KTsKKyAgICB9CisgICAgZWxzZSBpZiAoYUNodW5rIGluc3RhbmNlb2YgU291cmNlTm9kZSB8fCB0
eXBlb2YgYUNodW5rID09PSAic3RyaW5nIikgeworICAgICAgaWYgKGFDaHVuaykgeworICAgICAg
ICB0aGlzLmNoaWxkcmVuLnB1c2goYUNodW5rKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7
CisgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKAorICAgICAgICAiRXhwZWN0ZWQgYSBTb3VyY2VO
b2RlLCBzdHJpbmcsIG9yIGFuIGFycmF5IG9mIFNvdXJjZU5vZGVzIGFuZCBzdHJpbmdzLiBHb3Qg
IiArIGFDaHVuaworICAgICAgKTsKKyAgICB9CisgICAgcmV0dXJuIHRoaXM7CisgIH07CisKKyAg
LyoqCisgICAqIEFkZCBhIGNodW5rIG9mIGdlbmVyYXRlZCBKUyB0byB0aGUgYmVnaW5uaW5nIG9m
IHRoaXMgc291cmNlIG5vZGUuCisgICAqCisgICAqIEBwYXJhbSBhQ2h1bmsgQSBzdHJpbmcgc25p
cHBldCBvZiBnZW5lcmF0ZWQgSlMgY29kZSwgYW5vdGhlciBpbnN0YW5jZSBvZgorICAgKiAgICAg
ICAgU291cmNlTm9kZSwgb3IgYW4gYXJyYXkgd2hlcmUgZWFjaCBtZW1iZXIgaXMgb25lIG9mIHRo
b3NlIHRoaW5ncy4KKyAgICovCisgIFNvdXJjZU5vZGUucHJvdG90eXBlLnByZXBlbmQgPSBmdW5j
dGlvbiBTb3VyY2VOb2RlX3ByZXBlbmQoYUNodW5rKSB7CisgICAgaWYgKEFycmF5LmlzQXJyYXko
YUNodW5rKSkgeworICAgICAgZm9yICh2YXIgaSA9IGFDaHVuay5sZW5ndGgtMTsgaSA+PSAwOyBp
LS0pIHsKKyAgICAgICAgdGhpcy5wcmVwZW5kKGFDaHVua1tpXSk7CisgICAgICB9CisgICAgfQor
ICAgIGVsc2UgaWYgKGFDaHVuayBpbnN0YW5jZW9mIFNvdXJjZU5vZGUgfHwgdHlwZW9mIGFDaHVu
ayA9PT0gInN0cmluZyIpIHsKKyAgICAgIHRoaXMuY2hpbGRyZW4udW5zaGlmdChhQ2h1bmspOwor
ICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoCisgICAgICAgICJF
eHBlY3RlZCBhIFNvdXJjZU5vZGUsIHN0cmluZywgb3IgYW4gYXJyYXkgb2YgU291cmNlTm9kZXMg
YW5kIHN0cmluZ3MuIEdvdCAiICsgYUNodW5rCisgICAgICApOworICAgIH0KKyAgICByZXR1cm4g
dGhpczsKKyAgfTsKKworICAvKioKKyAgICogV2FsayBvdmVyIHRoZSB0cmVlIG9mIEpTIHNuaXBw
ZXRzIGluIHRoaXMgbm9kZSBhbmQgaXRzIGNoaWxkcmVuLiBUaGUKKyAgICogd2Fsa2luZyBmdW5j
dGlvbiBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCBzbmlwcGV0IG9mIEpTIGFuZCBpcyBwYXNzZWQg
dGhhdAorICAgKiBzbmlwcGV0IGFuZCB0aGUgaXRzIG9yaWdpbmFsIGFzc29jaWF0ZWQgc291cmNl
J3MgbGluZS9jb2x1bW4gbG9jYXRpb24uCisgICAqCisgICAqIEBwYXJhbSBhRm4gVGhlIHRyYXZl
cnNhbCBmdW5jdGlvbi4KKyAgICovCisgIFNvdXJjZU5vZGUucHJvdG90eXBlLndhbGsgPSBmdW5j
dGlvbiBTb3VyY2VOb2RlX3dhbGsoYUZuKSB7CisgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGZ1
bmN0aW9uIChjaHVuaykgeworICAgICAgaWYgKGNodW5rIGluc3RhbmNlb2YgU291cmNlTm9kZSkg
eworICAgICAgICBjaHVuay53YWxrKGFGbik7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAg
ICAgaWYgKGNodW5rICE9PSAnJykgeworICAgICAgICAgIGFGbihjaHVuaywgeyBzb3VyY2U6IHRo
aXMuc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmUsCisgICAg
ICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4sCisgICAgICAgICAgICAgICAg
ICAgICAgIG5hbWU6IHRoaXMubmFtZSB9KTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sIHRo
aXMpOworICB9OworCisgIC8qKgorICAgKiBMaWtlIGBTdHJpbmcucHJvdG90eXBlLmpvaW5gIGV4
Y2VwdCBmb3IgU291cmNlTm9kZXMuIEluc2VydHMgYGFTdHJgIGJldHdlZW4KKyAgICogZWFjaCBv
ZiBgdGhpcy5jaGlsZHJlbmAuCisgICAqCisgICAqIEBwYXJhbSBhU2VwIFRoZSBzZXBhcmF0b3Iu
CisgICAqLworICBTb3VyY2VOb2RlLnByb3RvdHlwZS5qb2luID0gZnVuY3Rpb24gU291cmNlTm9k
ZV9qb2luKGFTZXApIHsKKyAgICB2YXIgbmV3Q2hpbGRyZW47CisgICAgdmFyIGk7CisgICAgdmFy
IGxlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOworICAgIGlmIChsZW4gPiAwKSB7CisgICAgICBu
ZXdDaGlsZHJlbiA9IFtdOworICAgICAgZm9yIChpID0gMDsgaSA8IGxlbi0xOyBpKyspIHsKKyAg
ICAgICAgbmV3Q2hpbGRyZW4ucHVzaCh0aGlzLmNoaWxkcmVuW2ldKTsKKyAgICAgICAgbmV3Q2hp
bGRyZW4ucHVzaChhU2VwKTsKKyAgICAgIH0KKyAgICAgIG5ld0NoaWxkcmVuLnB1c2godGhpcy5j
aGlsZHJlbltpXSk7CisgICAgICB0aGlzLmNoaWxkcmVuID0gbmV3Q2hpbGRyZW47CisgICAgfQor
ICAgIHJldHVybiB0aGlzOworICB9OworCisgIC8qKgorICAgKiBDYWxsIFN0cmluZy5wcm90b3R5
cGUucmVwbGFjZSBvbiB0aGUgdmVyeSByaWdodC1tb3N0IHNvdXJjZSBzbmlwcGV0LiBVc2VmdWwK
KyAgICogZm9yIHRyaW1taW5nIHdoaXRlc3BhY2UgZnJvbSB0aGUgZW5kIG9mIGEgc291cmNlIG5v
ZGUsIGV0Yy4KKyAgICoKKyAgICogQHBhcmFtIGFQYXR0ZXJuIFRoZSBwYXR0ZXJuIHRvIHJlcGxh
Y2UuCisgICAqIEBwYXJhbSBhUmVwbGFjZW1lbnQgVGhlIHRoaW5nIHRvIHJlcGxhY2UgdGhlIHBh
dHRlcm4gd2l0aC4KKyAgICovCisgIFNvdXJjZU5vZGUucHJvdG90eXBlLnJlcGxhY2VSaWdodCA9
IGZ1bmN0aW9uIFNvdXJjZU5vZGVfcmVwbGFjZVJpZ2h0KGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQp
IHsKKyAgICB2YXIgbGFzdENoaWxkID0gdGhpcy5jaGlsZHJlblt0aGlzLmNoaWxkcmVuLmxlbmd0
aCAtIDFdOworICAgIGlmIChsYXN0Q2hpbGQgaW5zdGFuY2VvZiBTb3VyY2VOb2RlKSB7CisgICAg
ICBsYXN0Q2hpbGQucmVwbGFjZVJpZ2h0KGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpOworICAgIH0K
KyAgICBlbHNlIGlmICh0eXBlb2YgbGFzdENoaWxkID09PSAnc3RyaW5nJykgeworICAgICAgdGhp
cy5jaGlsZHJlblt0aGlzLmNoaWxkcmVuLmxlbmd0aCAtIDFdID0gbGFzdENoaWxkLnJlcGxhY2Uo
YVBhdHRlcm4sIGFSZXBsYWNlbWVudCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgdGhpcy5j
aGlsZHJlbi5wdXNoKCcnLnJlcGxhY2UoYVBhdHRlcm4sIGFSZXBsYWNlbWVudCkpOworICAgIH0K
KyAgICByZXR1cm4gdGhpczsKKyAgfTsKKworICAvKioKKyAgICogU2V0IHRoZSBzb3VyY2UgY29u
dGVudCBmb3IgYSBzb3VyY2UgZmlsZS4gVGhpcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBTb3VyY2VN
YXBHZW5lcmF0b3IKKyAgICogaW4gdGhlIHNvdXJjZXNDb250ZW50IGZpZWxkLgorICAgKgorICAg
KiBAcGFyYW0gYVNvdXJjZUZpbGUgVGhlIGZpbGVuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZQorICAg
KiBAcGFyYW0gYVNvdXJjZUNvbnRlbnQgVGhlIGNvbnRlbnQgb2YgdGhlIHNvdXJjZSBmaWxlCisg
ICAqLworICBTb3VyY2VOb2RlLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50ID0KKyAgICBmdW5j
dGlvbiBTb3VyY2VOb2RlX3NldFNvdXJjZUNvbnRlbnQoYVNvdXJjZUZpbGUsIGFTb3VyY2VDb250
ZW50KSB7CisgICAgICB0aGlzLnNvdXJjZUNvbnRlbnRzW3V0aWwudG9TZXRTdHJpbmcoYVNvdXJj
ZUZpbGUpXSA9IGFTb3VyY2VDb250ZW50OworICAgIH07CisKKyAgLyoqCisgICAqIFdhbGsgb3Zl
ciB0aGUgdHJlZSBvZiBTb3VyY2VOb2Rlcy4gVGhlIHdhbGtpbmcgZnVuY3Rpb24gaXMgY2FsbGVk
IGZvciBlYWNoCisgICAqIHNvdXJjZSBmaWxlIGNvbnRlbnQgYW5kIGlzIHBhc3NlZCB0aGUgZmls
ZW5hbWUgYW5kIHNvdXJjZSBjb250ZW50LgorICAgKgorICAgKiBAcGFyYW0gYUZuIFRoZSB0cmF2
ZXJzYWwgZnVuY3Rpb24uCisgICAqLworICBTb3VyY2VOb2RlLnByb3RvdHlwZS53YWxrU291cmNl
Q29udGVudHMgPQorICAgIGZ1bmN0aW9uIFNvdXJjZU5vZGVfd2Fsa1NvdXJjZUNvbnRlbnRzKGFG
bikgeworICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaHVuaykgeworICAg
ICAgICBpZiAoY2h1bmsgaW5zdGFuY2VvZiBTb3VyY2VOb2RlKSB7CisgICAgICAgICAgY2h1bmsu
d2Fsa1NvdXJjZUNvbnRlbnRzKGFGbik7CisgICAgICAgIH0KKyAgICAgIH0sIHRoaXMpOworICAg
ICAgT2JqZWN0LmtleXModGhpcy5zb3VyY2VDb250ZW50cykuZm9yRWFjaChmdW5jdGlvbiAoc291
cmNlRmlsZUtleSkgeworICAgICAgICBhRm4odXRpbC5mcm9tU2V0U3RyaW5nKHNvdXJjZUZpbGVL
ZXkpLCB0aGlzLnNvdXJjZUNvbnRlbnRzW3NvdXJjZUZpbGVLZXldKTsKKyAgICAgIH0sIHRoaXMp
OworICAgIH07CisKKyAgLyoqCisgICAqIFJldHVybiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9u
IG9mIHRoaXMgc291cmNlIG5vZGUuIFdhbGtzIG92ZXIgdGhlIHRyZWUKKyAgICogYW5kIGNvbmNh
dGVuYXRlcyBhbGwgdGhlIHZhcmlvdXMgc25pcHBldHMgdG9nZXRoZXIgdG8gb25lIHN0cmluZy4K
KyAgICovCisgIFNvdXJjZU5vZGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gU291cmNl
Tm9kZV90b1N0cmluZygpIHsKKyAgICB2YXIgc3RyID0gIiI7CisgICAgdGhpcy53YWxrKGZ1bmN0
aW9uIChjaHVuaykgeworICAgICAgc3RyICs9IGNodW5rOworICAgIH0pOworICAgIHJldHVybiBz
dHI7CisgIH07CisKKyAgLyoqCisgICAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlv
biBvZiB0aGlzIHNvdXJjZSBub2RlIGFsb25nIHdpdGggYSBzb3VyY2UKKyAgICogbWFwLgorICAg
Ki8KKyAgU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmdXaXRoU291cmNlTWFwID0gZnVuY3Rp
b24gU291cmNlTm9kZV90b1N0cmluZ1dpdGhTb3VyY2VNYXAoYUFyZ3MpIHsKKyAgICB2YXIgZ2Vu
ZXJhdGVkID0geworICAgICAgY29kZTogIiIsCisgICAgICBsaW5lOiAxLAorICAgICAgY29sdW1u
OiAwCisgICAgfTsKKyAgICB2YXIgbWFwID0gbmV3IFNvdXJjZU1hcEdlbmVyYXRvcihhQXJncyk7
CisgICAgdmFyIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTsKKyAgICB0aGlzLndhbGsoZnVu
Y3Rpb24gKGNodW5rLCBvcmlnaW5hbCkgeworICAgICAgZ2VuZXJhdGVkLmNvZGUgKz0gY2h1bms7
CisgICAgICBpZiAob3JpZ2luYWwuc291cmNlICE9PSBudWxsCisgICAgICAgICAgJiYgb3JpZ2lu
YWwubGluZSAhPT0gbnVsbAorICAgICAgICAgICYmIG9yaWdpbmFsLmNvbHVtbiAhPT0gbnVsbCkg
eworICAgICAgICBtYXAuYWRkTWFwcGluZyh7CisgICAgICAgICAgc291cmNlOiBvcmlnaW5hbC5z
b3VyY2UsCisgICAgICAgICAgb3JpZ2luYWw6IHsKKyAgICAgICAgICAgIGxpbmU6IG9yaWdpbmFs
LmxpbmUsCisgICAgICAgICAgICBjb2x1bW46IG9yaWdpbmFsLmNvbHVtbgorICAgICAgICAgIH0s
CisgICAgICAgICAgZ2VuZXJhdGVkOiB7CisgICAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWQubGlu
ZSwKKyAgICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkLmNvbHVtbgorICAgICAgICAgIH0sCisg
ICAgICAgICAgbmFtZTogb3JpZ2luYWwubmFtZQorICAgICAgICB9KTsKKyAgICAgICAgc291cmNl
TWFwcGluZ0FjdGl2ZSA9IHRydWU7CisgICAgICB9IGVsc2UgaWYgKHNvdXJjZU1hcHBpbmdBY3Rp
dmUpIHsKKyAgICAgICAgbWFwLmFkZE1hcHBpbmcoeworICAgICAgICAgIGdlbmVyYXRlZDogewor
ICAgICAgICAgICAgbGluZTogZ2VuZXJhdGVkLmxpbmUsCisgICAgICAgICAgICBjb2x1bW46IGdl
bmVyYXRlZC5jb2x1bW4KKyAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBzb3VyY2VN
YXBwaW5nQWN0aXZlID0gZmFsc2U7CisgICAgICB9CisgICAgICBjaHVuay5zcGxpdCgnJykuZm9y
RWFjaChmdW5jdGlvbiAoY2gpIHsKKyAgICAgICAgaWYgKGNoID09PSAnXG4nKSB7CisgICAgICAg
ICAgZ2VuZXJhdGVkLmxpbmUrKzsKKyAgICAgICAgICBnZW5lcmF0ZWQuY29sdW1uID0gMDsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBnZW5lcmF0ZWQuY29sdW1uKys7CisgICAgICAgIH0K
KyAgICAgIH0pOworICAgIH0pOworICAgIHRoaXMud2Fsa1NvdXJjZUNvbnRlbnRzKGZ1bmN0aW9u
IChzb3VyY2VGaWxlLCBzb3VyY2VDb250ZW50KSB7CisgICAgICBtYXAuc2V0U291cmNlQ29udGVu
dChzb3VyY2VGaWxlLCBzb3VyY2VDb250ZW50KTsKKyAgICB9KTsKKworICAgIHJldHVybiB7IGNv
ZGU6IGdlbmVyYXRlZC5jb2RlLCBtYXA6IG1hcCB9OworICB9OworCisgIGV4cG9ydHMuU291cmNl
Tm9kZSA9IFNvdXJjZU5vZGU7CisKK30pOworCit9LHsiLi9zb3VyY2UtbWFwLWdlbmVyYXRvciI6
MTEsIi4vdXRpbCI6MTMsImFtZGVmaW5lIjoxNH1dLDEzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKKy8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi8K
Ky8qCisgKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9y
cworICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6
CisgKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlCisgKi8KK2lm
ICh0eXBlb2YgZGVmaW5lICE9PSAnZnVuY3Rpb24nKSB7CisgICAgdmFyIGRlZmluZSA9IHJlcXVp
cmUoJ2FtZGVmaW5lJykobW9kdWxlLCByZXF1aXJlKTsKK30KK2RlZmluZShmdW5jdGlvbiAocmVx
dWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisKKyAgLyoqCisgICAqIFRoaXMgaXMgYSBoZWxwZXIg
ZnVuY3Rpb24gZm9yIGdldHRpbmcgdmFsdWVzIGZyb20gcGFyYW1ldGVyL29wdGlvbnMKKyAgICog
b2JqZWN0cy4KKyAgICoKKyAgICogQHBhcmFtIGFyZ3MgVGhlIG9iamVjdCB3ZSBhcmUgZXh0cmFj
dGluZyB2YWx1ZXMgZnJvbQorICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVy
dHkgd2UgYXJlIGdldHRpbmcuCisgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgQW4gb3B0aW9uYWwg
dmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nCisgICAqIGZyb20gdGhl
IG9iamVjdC4gSWYgdGhpcyBpcyBub3Qgc3BlY2lmaWVkIGFuZCB0aGUgcHJvcGVydHkgaXMgbWlz
c2luZywgYW4KKyAgICogZXJyb3Igd2lsbCBiZSB0aHJvd24uCisgICAqLworICBmdW5jdGlvbiBn
ZXRBcmcoYUFyZ3MsIGFOYW1lLCBhRGVmYXVsdFZhbHVlKSB7CisgICAgaWYgKGFOYW1lIGluIGFB
cmdzKSB7CisgICAgICByZXR1cm4gYUFyZ3NbYU5hbWVdOworICAgIH0gZWxzZSBpZiAoYXJndW1l
bnRzLmxlbmd0aCA9PT0gMykgeworICAgICAgcmV0dXJuIGFEZWZhdWx0VmFsdWU7CisgICAgfSBl
bHNlIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcignIicgKyBhTmFtZSArICciIGlzIGEgcmVxdWly
ZWQgYXJndW1lbnQuJyk7CisgICAgfQorICB9CisgIGV4cG9ydHMuZ2V0QXJnID0gZ2V0QXJnOwor
CisgIHZhciB1cmxSZWdleHAgPSAvKFtcdytcLS5dKyk6XC9cLygoXHcrOlx3KylAKT8oW1x3Ll0r
KT8oOihcZCspKT8oXFMrKT8vOworCisgIGZ1bmN0aW9uIHVybFBhcnNlKGFVcmwpIHsKKyAgICB2
YXIgbWF0Y2ggPSBhVXJsLm1hdGNoKHVybFJlZ2V4cCk7CisgICAgaWYgKCFtYXRjaCkgeworICAg
ICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiB7CisgICAgICBzY2hlbWU6IG1hdGNo
WzFdLAorICAgICAgYXV0aDogbWF0Y2hbM10sCisgICAgICBob3N0OiBtYXRjaFs0XSwKKyAgICAg
IHBvcnQ6IG1hdGNoWzZdLAorICAgICAgcGF0aDogbWF0Y2hbN10KKyAgICB9OworICB9CisgIGV4
cG9ydHMudXJsUGFyc2UgPSB1cmxQYXJzZTsKKworICBmdW5jdGlvbiB1cmxHZW5lcmF0ZShhUGFy
c2VkVXJsKSB7CisgICAgdmFyIHVybCA9IGFQYXJzZWRVcmwuc2NoZW1lICsgIjovLyI7CisgICAg
aWYgKGFQYXJzZWRVcmwuYXV0aCkgeworICAgICAgdXJsICs9IGFQYXJzZWRVcmwuYXV0aCArICJA
IgorICAgIH0KKyAgICBpZiAoYVBhcnNlZFVybC5ob3N0KSB7CisgICAgICB1cmwgKz0gYVBhcnNl
ZFVybC5ob3N0OworICAgIH0KKyAgICBpZiAoYVBhcnNlZFVybC5wb3J0KSB7CisgICAgICB1cmwg
Kz0gIjoiICsgYVBhcnNlZFVybC5wb3J0CisgICAgfQorICAgIGlmIChhUGFyc2VkVXJsLnBhdGgp
IHsKKyAgICAgIHVybCArPSBhUGFyc2VkVXJsLnBhdGg7CisgICAgfQorICAgIHJldHVybiB1cmw7
CisgIH0KKyAgZXhwb3J0cy51cmxHZW5lcmF0ZSA9IHVybEdlbmVyYXRlOworCisgIGZ1bmN0aW9u
IGpvaW4oYVJvb3QsIGFQYXRoKSB7CisgICAgdmFyIHVybDsKKworICAgIGlmIChhUGF0aC5tYXRj
aCh1cmxSZWdleHApKSB7CisgICAgICByZXR1cm4gYVBhdGg7CisgICAgfQorCisgICAgaWYgKGFQ
YXRoLmNoYXJBdCgwKSA9PT0gJy8nICYmICh1cmwgPSB1cmxQYXJzZShhUm9vdCkpKSB7CisgICAg
ICB1cmwucGF0aCA9IGFQYXRoOworICAgICAgcmV0dXJuIHVybEdlbmVyYXRlKHVybCk7CisgICAg
fQorCisgICAgcmV0dXJuIGFSb290LnJlcGxhY2UoL1wvJC8sICcnKSArICcvJyArIGFQYXRoOwor
ICB9CisgIGV4cG9ydHMuam9pbiA9IGpvaW47CisKKyAgLyoqCisgICAqIEJlY2F1c2UgYmVoYXZp
b3IgZ29lcyB3YWNreSB3aGVuIHlvdSBzZXQgYF9fcHJvdG9fX2Agb24gb2JqZWN0cywgd2UKKyAg
ICogaGF2ZSB0byBwcmVmaXggYWxsIHRoZSBzdHJpbmdzIGluIG91ciBzZXQgd2l0aCBhbiBhcmJp
dHJhcnkgY2hhcmFjdGVyLgorICAgKgorICAgKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemls
bGEvc291cmNlLW1hcC9wdWxsLzMxIGFuZAorICAgKiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxs
YS9zb3VyY2UtbWFwL2lzc3Vlcy8zMAorICAgKgorICAgKiBAcGFyYW0gU3RyaW5nIGFTdHIKKyAg
ICovCisgIGZ1bmN0aW9uIHRvU2V0U3RyaW5nKGFTdHIpIHsKKyAgICByZXR1cm4gJyQnICsgYVN0
cjsKKyAgfQorICBleHBvcnRzLnRvU2V0U3RyaW5nID0gdG9TZXRTdHJpbmc7CisKKyAgZnVuY3Rp
b24gZnJvbVNldFN0cmluZyhhU3RyKSB7CisgICAgcmV0dXJuIGFTdHIuc3Vic3RyKDEpOworICB9
CisgIGV4cG9ydHMuZnJvbVNldFN0cmluZyA9IGZyb21TZXRTdHJpbmc7CisKKyAgZnVuY3Rpb24g
cmVsYXRpdmUoYVJvb3QsIGFQYXRoKSB7CisgICAgYVJvb3QgPSBhUm9vdC5yZXBsYWNlKC9cLyQv
LCAnJyk7CisKKyAgICB2YXIgdXJsID0gdXJsUGFyc2UoYVJvb3QpOworICAgIGlmIChhUGF0aC5j
aGFyQXQoMCkgPT0gIi8iICYmIHVybCAmJiB1cmwucGF0aCA9PSAiLyIpIHsKKyAgICAgIHJldHVy
biBhUGF0aC5zbGljZSgxKTsKKyAgICB9CisKKyAgICByZXR1cm4gYVBhdGguaW5kZXhPZihhUm9v
dCArICcvJykgPT09IDAKKyAgICAgID8gYVBhdGguc3Vic3RyKGFSb290Lmxlbmd0aCArIDEpCisg
ICAgICA6IGFQYXRoOworICB9CisgIGV4cG9ydHMucmVsYXRpdmUgPSByZWxhdGl2ZTsKKworfSk7
CisKK30seyJhbWRlZmluZSI6MTR9XSwxNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7CisoZnVuY3Rpb24ocHJvY2VzcyxfX2ZpbGVuYW1lKXsvKiogdmltOiBldDp0cz00OnN3PTQ6
c3RzPTQKKyAqIEBsaWNlbnNlIGFtZGVmaW5lIDAuMC41IENvcHlyaWdodCAoYykgMjAxMSwgVGhl
IERvam8gRm91bmRhdGlvbiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQXZhaWxhYmxlIHZpYSB0
aGUgTUlUIG9yIG5ldyBCU0QgbGljZW5zZS4KKyAqIHNlZTogaHR0cDovL2dpdGh1Yi5jb20vanJi
dXJrZS9hbWRlZmluZSBmb3IgZGV0YWlscworICovCisKKy8qanNsaW50IG5vZGU6IHRydWUgKi8K
Ky8qZ2xvYmFsIG1vZHVsZSwgcHJvY2VzcyAqLworJ3VzZSBzdHJpY3QnOworCit2YXIgcGF0aCA9
IHJlcXVpcmUoJ3BhdGgnKTsKKworLyoqCisgKiBDcmVhdGVzIGEgZGVmaW5lIGZvciBub2RlLgor
ICogQHBhcmFtIHtPYmplY3R9IG1vZHVsZSB0aGUgIm1vZHVsZSIgb2JqZWN0IHRoYXQgaXMgZGVm
aW5lZCBieSBOb2RlIGZvciB0aGUKKyAqIGN1cnJlbnQgbW9kdWxlLgorICogQHBhcmFtIHtGdW5j
dGlvbn0gW3JlcXVpcmVdLiBOb2RlJ3MgcmVxdWlyZSBmdW5jdGlvbiBmb3IgdGhlIGN1cnJlbnQg
bW9kdWxlLgorICogSXQgb25seSBuZWVkcyB0byBiZSBwYXNzZWQgaW4gTm9kZSB2ZXJzaW9ucyBi
ZWZvcmUgMC41LCB3aGVuIG1vZHVsZS5yZXF1aXJlCisgKiBkaWQgbm90IGV4aXN0LgorICogQHJl
dHVybnMge0Z1bmN0aW9ufSBhIGRlZmluZSBmdW5jdGlvbiB0aGF0IGlzIHVzYWJsZSBmb3IgdGhl
IGN1cnJlbnQgbm9kZQorICogbW9kdWxlLgorICovCitmdW5jdGlvbiBhbWRlZmluZShtb2R1bGUs
IHJlcXVpcmUpIHsKKyAgICB2YXIgZGVmaW5lQ2FjaGUgPSB7fSwKKyAgICAgICAgbG9hZGVyQ2Fj
aGUgPSB7fSwKKyAgICAgICAgYWxyZWFkeUNhbGxlZCA9IGZhbHNlLAorICAgICAgICBtYWtlUmVx
dWlyZSwgc3RyaW5nUmVxdWlyZTsKKworICAgIC8qKgorICAgICAqIFRyaW1zIHRoZSAuIGFuZCAu
LiBmcm9tIGFuIGFycmF5IG9mIHBhdGggc2VnbWVudHMuCisgICAgICogSXQgd2lsbCBrZWVwIGEg
bGVhZGluZyBwYXRoIHNlZ21lbnQgaWYgYSAuLiB3aWxsIGJlY29tZQorICAgICAqIHRoZSBmaXJz
dCBwYXRoIHNlZ21lbnQsIHRvIGhlbHAgd2l0aCBtb2R1bGUgbmFtZSBsb29rdXBzLAorICAgICAq
IHdoaWNoIGFjdCBsaWtlIHBhdGhzLCBidXQgY2FuIGJlIHJlbWFwcGVkLiBCdXQgdGhlIGVuZCBy
ZXN1bHQsCisgICAgICogYWxsIHBhdGhzIHRoYXQgdXNlIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGxv
b2sgbm9ybWFsaXplZC4KKyAgICAgKiBOT1RFOiB0aGlzIG1ldGhvZCBNT0RJRklFUyB0aGUgaW5w
dXQgYXJyYXkuCisgICAgICogQHBhcmFtIHtBcnJheX0gYXJ5IHRoZSBhcnJheSBvZiBwYXRoIHNl
Z21lbnRzLgorICAgICAqLworICAgIGZ1bmN0aW9uIHRyaW1Eb3RzKGFyeSkgeworICAgICAgICB2
YXIgaSwgcGFydDsKKyAgICAgICAgZm9yIChpID0gMDsgYXJ5W2ldOyBpKz0gMSkgeworICAgICAg
ICAgICAgcGFydCA9IGFyeVtpXTsKKyAgICAgICAgICAgIGlmIChwYXJ0ID09PSAnLicpIHsKKyAg
ICAgICAgICAgICAgICBhcnkuc3BsaWNlKGksIDEpOworICAgICAgICAgICAgICAgIGkgLT0gMTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykgeworICAgICAgICAgICAgICAg
IGlmIChpID09PSAxICYmIChhcnlbMl0gPT09ICcuLicgfHwgYXJ5WzBdID09PSAnLi4nKSkgewor
ICAgICAgICAgICAgICAgICAgICAvL0VuZCBvZiB0aGUgbGluZS4gS2VlcCBhdCBsZWFzdCBvbmUg
bm9uLWRvdAorICAgICAgICAgICAgICAgICAgICAvL3BhdGggc2VnbWVudCBhdCB0aGUgZnJvbnQg
c28gaXQgY2FuIGJlIG1hcHBlZAorICAgICAgICAgICAgICAgICAgICAvL2NvcnJlY3RseSB0byBk
aXNrLiBPdGhlcndpc2UsIHRoZXJlIGlzIGxpa2VseQorICAgICAgICAgICAgICAgICAgICAvL25v
IHBhdGggbWFwcGluZyBmb3IgYSBwYXRoIHN0YXJ0aW5nIHdpdGggJy4uJy4KKyAgICAgICAgICAg
ICAgICAgICAgLy9UaGlzIGNhbiBzdGlsbCBmYWlsLCBidXQgY2F0Y2hlcyB0aGUgbW9zdCByZWFz
b25hYmxlCisgICAgICAgICAgICAgICAgICAgIC8vdXNlcyBvZiAuLgorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPiAwKSB7CisgICAgICAg
ICAgICAgICAgICAgIGFyeS5zcGxpY2UoaSAtIDEsIDIpOworICAgICAgICAgICAgICAgICAgICBp
IC09IDI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgZnVuY3Rpb24gbm9ybWFsaXplKG5hbWUsIGJhc2VOYW1lKSB7CisgICAgICAgIHZh
ciBiYXNlUGFydHM7CisKKyAgICAgICAgLy9BZGp1c3QgYW55IHJlbGF0aXZlIHBhdGhzLgorICAg
ICAgICBpZiAobmFtZSAmJiBuYW1lLmNoYXJBdCgwKSA9PT0gJy4nKSB7CisgICAgICAgICAgICAv
L0lmIGhhdmUgYSBiYXNlIG5hbWUsIHRyeSB0byBub3JtYWxpemUgYWdhaW5zdCBpdCwKKyAgICAg
ICAgICAgIC8vb3RoZXJ3aXNlLCBhc3N1bWUgaXQgaXMgYSB0b3AtbGV2ZWwgcmVxdWlyZSB0aGF0
IHdpbGwKKyAgICAgICAgICAgIC8vYmUgcmVsYXRpdmUgdG8gYmFzZVVybCBpbiB0aGUgZW5kLgor
ICAgICAgICAgICAgaWYgKGJhc2VOYW1lKSB7CisgICAgICAgICAgICAgICAgYmFzZVBhcnRzID0g
YmFzZU5hbWUuc3BsaXQoJy8nKTsKKyAgICAgICAgICAgICAgICBiYXNlUGFydHMgPSBiYXNlUGFy
dHMuc2xpY2UoMCwgYmFzZVBhcnRzLmxlbmd0aCAtIDEpOworICAgICAgICAgICAgICAgIGJhc2VQ
YXJ0cyA9IGJhc2VQYXJ0cy5jb25jYXQobmFtZS5zcGxpdCgnLycpKTsKKyAgICAgICAgICAgICAg
ICB0cmltRG90cyhiYXNlUGFydHMpOworICAgICAgICAgICAgICAgIG5hbWUgPSBiYXNlUGFydHMu
am9pbignLycpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5h
bWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIHRoZSBub3JtYWxpemUoKSBmdW5j
dGlvbiBwYXNzZWQgdG8gYSBsb2FkZXIgcGx1Z2luJ3MKKyAgICAgKiBub3JtYWxpemUgbWV0aG9k
LgorICAgICAqLworICAgIGZ1bmN0aW9uIG1ha2VOb3JtYWxpemUocmVsTmFtZSkgeworICAgICAg
ICByZXR1cm4gZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgICAgIHJldHVybiBub3JtYWxpemUo
bmFtZSwgcmVsTmFtZSk7CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gbWFrZUxv
YWQoaWQpIHsKKyAgICAgICAgZnVuY3Rpb24gbG9hZCh2YWx1ZSkgeworICAgICAgICAgICAgbG9h
ZGVyQ2FjaGVbaWRdID0gdmFsdWU7CisgICAgICAgIH0KKworICAgICAgICBsb2FkLmZyb21UZXh0
ID0gZnVuY3Rpb24gKGlkLCB0ZXh0KSB7CisgICAgICAgICAgICAvL1RoaXMgb25lIGlzIGRpZmZp
Y3VsdCBiZWNhdXNlIHRoZSB0ZXh0IGNhbi9wcm9iYWJseSB1c2VzCisgICAgICAgICAgICAvL2Rl
ZmluZSwgYW5kIGFueSByZWxhdGl2ZSBwYXRocyBhbmQgcmVxdWlyZXMgc2hvdWxkIGJlIHJlbGF0
aXZlCisgICAgICAgICAgICAvL3RvIHRoYXQgaWQgd2FzIGl0IHdvdWxkIGJlIGZvdW5kIG9uIGRp
c2suIEJ1dCB0aGlzIHdvdWxkIHJlcXVpcmUKKyAgICAgICAgICAgIC8vYm9vdHN0cmFwcGluZyBh
IG1vZHVsZS9yZXF1aXJlIGZhaXJseSBkZWVwbHkgZnJvbSBub2RlIGNvcmUuCisgICAgICAgICAg
ICAvL05vdCBzdXJlIGhvdyBiZXN0IHRvIGdvIGFib3V0IHRoYXQgeWV0LgorICAgICAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCdhbWRlZmluZSBkb2VzIG5vdCBpbXBsZW1lbnQgbG9hZC5mcm9tVGV4
dCcpOworICAgICAgICB9OworCisgICAgICAgIHJldHVybiBsb2FkOworICAgIH0KKworICAgIG1h
a2VSZXF1aXJlID0gZnVuY3Rpb24gKHN5c3RlbVJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSwgcmVs
SWQpIHsKKyAgICAgICAgZnVuY3Rpb24gYW1kUmVxdWlyZShkZXBzLCBjYWxsYmFjaykgeworICAg
ICAgICAgICAgaWYgKHR5cGVvZiBkZXBzID09PSAnc3RyaW5nJykgeworICAgICAgICAgICAgICAg
IC8vU3luY2hyb25vdXMsIHNpbmdsZSBtb2R1bGUgcmVxdWlyZSgnJykKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc3RyaW5nUmVxdWlyZShzeXN0ZW1SZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUsIGRl
cHMsIHJlbElkKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy9BcnJh
eSBvZiBkZXBlbmRlbmNpZXMgd2l0aCBhIGNhbGxiYWNrLgorCisgICAgICAgICAgICAgICAgLy9D
b252ZXJ0IHRoZSBkZXBlbmRlbmNpZXMgdG8gbW9kdWxlcy4KKyAgICAgICAgICAgICAgICBkZXBz
ID0gZGVwcy5tYXAoZnVuY3Rpb24gKGRlcE5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHN0cmluZ1JlcXVpcmUoc3lzdGVtUmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlLCBkZXBOYW1l
LCByZWxJZCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAvL1dhaXQg
Zm9yIG5leHQgdGljayB0byBjYWxsIGJhY2sgdGhlIHJlcXVpcmUgY2FsbC4KKyAgICAgICAgICAg
ICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y2FsbGJhY2suYXBwbHkobnVsbCwgZGVwcyk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhbWRSZXF1aXJlLnRvVXJsID0gZnVuY3Rpb24g
KGZpbGVQYXRoKSB7CisgICAgICAgICAgICBpZiAoZmlsZVBhdGguaW5kZXhPZignLicpID09PSAw
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZShmaWxlUGF0aCwgcGF0aC5kaXJu
YW1lKG1vZHVsZS5maWxlbmFtZSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmlsZVBhdGg7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAg
ICAgcmV0dXJuIGFtZFJlcXVpcmU7CisgICAgfTsKKworICAgIC8vRmF2b3IgZXhwbGljaXQgdmFs
dWUsIHBhc3NlZCBpbiBpZiB0aGUgbW9kdWxlIHdhbnRzIHRvIHN1cHBvcnQgTm9kZSAwLjQuCisg
ICAgcmVxdWlyZSA9IHJlcXVpcmUgfHwgZnVuY3Rpb24gcmVxKCkgeworICAgICAgICByZXR1cm4g
bW9kdWxlLnJlcXVpcmUuYXBwbHkobW9kdWxlLCBhcmd1bWVudHMpOworICAgIH07CisKKyAgICBm
dW5jdGlvbiBydW5GYWN0b3J5KGlkLCBkZXBzLCBmYWN0b3J5KSB7CisgICAgICAgIHZhciByLCBl
LCBtLCByZXN1bHQ7CisKKyAgICAgICAgaWYgKGlkKSB7CisgICAgICAgICAgICBlID0gbG9hZGVy
Q2FjaGVbaWRdID0ge307CisgICAgICAgICAgICBtID0geworICAgICAgICAgICAgICAgIGlkOiBp
ZCwKKyAgICAgICAgICAgICAgICB1cmk6IF9fZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgZXhw
b3J0czogZQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHIgPSBtYWtlUmVxdWlyZShyZXF1
aXJlLCBlLCBtLCBpZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvL09ubHkgc3Vw
cG9ydCBvbmUgZGVmaW5lIGNhbGwgcGVyIGZpbGUKKyAgICAgICAgICAgIGlmIChhbHJlYWR5Q2Fs
bGVkKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhbWRlZmluZSB3aXRoIG5v
IG1vZHVsZSBJRCBjYW5ub3QgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIHBlciBmaWxlLicpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7CisKKyAgICAg
ICAgICAgIC8vVXNlIHRoZSByZWFsIHZhcmlhYmxlcyBmcm9tIG5vZGUKKyAgICAgICAgICAgIC8v
VXNlIG1vZHVsZS5leHBvcnRzIGZvciBleHBvcnRzLCBzaW5jZQorICAgICAgICAgICAgLy90aGUg
ZXhwb3J0cyBpbiBoZXJlIGlzIGFtZGVmaW5lIGV4cG9ydHMuCisgICAgICAgICAgICBlID0gbW9k
dWxlLmV4cG9ydHM7CisgICAgICAgICAgICBtID0gbW9kdWxlOworICAgICAgICAgICAgciA9IG1h
a2VSZXF1aXJlKHJlcXVpcmUsIGUsIG0sIG1vZHVsZS5pZCk7CisgICAgICAgIH0KKworICAgICAg
ICAvL0lmIHRoZXJlIGFyZSBkZXBlbmRlbmNpZXMsIHRoZXkgYXJlIHN0cmluZ3MsIHNvIG5lZWQK
KyAgICAgICAgLy90byBjb252ZXJ0IHRoZW0gdG8gZGVwZW5kZW5jeSB2YWx1ZXMuCisgICAgICAg
IGlmIChkZXBzKSB7CisgICAgICAgICAgICBkZXBzID0gZGVwcy5tYXAoZnVuY3Rpb24gKGRlcE5h
bWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcihkZXBOYW1lKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICB9CisKKyAgICAgICAgLy9DYWxsIHRoZSBmYWN0b3J5IHdpdGggdGhlIHJpZ2h0
IGRlcGVuZGVuY2llcy4KKyAgICAgICAgaWYgKHR5cGVvZiBmYWN0b3J5ID09PSAnZnVuY3Rpb24n
KSB7CisgICAgICAgICAgICByZXN1bHQgPSBmYWN0b3J5LmFwcGx5KG1vZHVsZS5leHBvcnRzLCBk
ZXBzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZhY3Rvcnk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAg
ICAgIG0uZXhwb3J0cyA9IHJlc3VsdDsKKyAgICAgICAgICAgIGlmIChpZCkgeworICAgICAgICAg
ICAgICAgIGxvYWRlckNhY2hlW2lkXSA9IG0uZXhwb3J0czsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIHN0cmluZ1JlcXVpcmUgPSBmdW5jdGlvbiAoc3lzdGVtUmVxdWly
ZSwgZXhwb3J0cywgbW9kdWxlLCBpZCwgcmVsSWQpIHsKKyAgICAgICAgLy9TcGxpdCB0aGUgSUQg
YnkgYSAhIHNvIHRoYXQKKyAgICAgICAgdmFyIGluZGV4ID0gaWQuaW5kZXhPZignIScpLAorICAg
ICAgICAgICAgb3JpZ2luYWxJZCA9IGlkLAorICAgICAgICAgICAgcHJlZml4LCBwbHVnaW47CisK
KyAgICAgICAgaWYgKGluZGV4ID09PSAtMSkgeworICAgICAgICAgICAgaWQgPSBub3JtYWxpemUo
aWQsIHJlbElkKTsKKworICAgICAgICAgICAgLy9TdHJhaWdodCBtb2R1bGUgbG9va3VwLiBJZiBp
dCBpcyBvbmUgb2YgdGhlIHNwZWNpYWwgZGVwZW5kZW5jaWVzLAorICAgICAgICAgICAgLy9kZWFs
IHdpdGggaXQsIG90aGVyd2lzZSwgZGVsZWdhdGUgdG8gbm9kZS4KKyAgICAgICAgICAgIGlmIChp
ZCA9PT0gJ3JlcXVpcmUnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VSZXF1aXJlKHN5
c3RlbVJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSwgcmVsSWQpOworICAgICAgICAgICAgfSBlbHNl
IGlmIChpZCA9PT0gJ2V4cG9ydHMnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGV4cG9ydHM7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlkID09PSAnbW9kdWxlJykgeworICAgICAgICAgICAg
ICAgIHJldHVybiBtb2R1bGU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxvYWRlckNhY2hlLmhh
c093blByb3BlcnR5KGlkKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBsb2FkZXJDYWNoZVtp
ZF07CisgICAgICAgICAgICB9IGVsc2UgaWYgKGRlZmluZUNhY2hlW2lkXSkgeworICAgICAgICAg
ICAgICAgIHJ1bkZhY3RvcnkuYXBwbHkobnVsbCwgZGVmaW5lQ2FjaGVbaWRdKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbG9hZGVyQ2FjaGVbaWRdOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBpZihzeXN0ZW1SZXF1aXJlKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzeXN0ZW1SZXF1aXJlKG9yaWdpbmFsSWQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gbW9kdWxlIHdpdGggSUQ6
ICcgKyBpZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLy9UaGVyZSBpcyBhIHBsdWdpbiBpbiBwbGF5LgorICAgICAgICAg
ICAgcHJlZml4ID0gaWQuc3Vic3RyaW5nKDAsIGluZGV4KTsKKyAgICAgICAgICAgIGlkID0gaWQu
c3Vic3RyaW5nKGluZGV4ICsgMSwgaWQubGVuZ3RoKTsKKworICAgICAgICAgICAgcGx1Z2luID0g
c3RyaW5nUmVxdWlyZShzeXN0ZW1SZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUsIHByZWZpeCwgcmVs
SWQpOworCisgICAgICAgICAgICBpZiAocGx1Z2luLm5vcm1hbGl6ZSkgeworICAgICAgICAgICAg
ICAgIGlkID0gcGx1Z2luLm5vcm1hbGl6ZShpZCwgbWFrZU5vcm1hbGl6ZShyZWxJZCkpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZSB0aGUgSUQgbm9y
bWFsbHkuCisgICAgICAgICAgICAgICAgaWQgPSBub3JtYWxpemUoaWQsIHJlbElkKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxvYWRlckNhY2hlW2lkXSkgeworICAgICAgICAg
ICAgICAgIHJldHVybiBsb2FkZXJDYWNoZVtpZF07CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHBsdWdpbi5sb2FkKGlkLCBtYWtlUmVxdWlyZShzeXN0ZW1SZXF1aXJlLCBl
eHBvcnRzLCBtb2R1bGUsIHJlbElkKSwgbWFrZUxvYWQoaWQpLCB7fSk7CisKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbG9hZGVyQ2FjaGVbaWRdOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfTsKKworICAgIC8vQ3JlYXRlIGEgZGVmaW5lIGZ1bmN0aW9uIHNwZWNpZmljIHRvIHRoZSBt
b2R1bGUgYXNraW5nIGZvciBhbWRlZmluZS4KKyAgICBmdW5jdGlvbiBkZWZpbmUoaWQsIGRlcHMs
IGZhY3RvcnkpIHsKKyAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaWQpKSB7CisgICAgICAgICAg
ICBmYWN0b3J5ID0gZGVwczsKKyAgICAgICAgICAgIGRlcHMgPSBpZDsKKyAgICAgICAgICAgIGlk
ID0gdW5kZWZpbmVkOworICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpZCAhPT0gJ3N0cmluZycp
IHsKKyAgICAgICAgICAgIGZhY3RvcnkgPSBpZDsKKyAgICAgICAgICAgIGlkID0gZGVwcyA9IHVu
ZGVmaW5lZDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkZXBzICYmICFBcnJheS5pc0FycmF5
KGRlcHMpKSB7CisgICAgICAgICAgICBmYWN0b3J5ID0gZGVwczsKKyAgICAgICAgICAgIGRlcHMg
PSB1bmRlZmluZWQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWRlcHMpIHsKKyAgICAgICAg
ICAgIGRlcHMgPSBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnXTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vU2V0IHVwIHByb3BlcnRpZXMgZm9yIHRoaXMgbW9kdWxlLiBJZiBhbiBJRCwg
dGhlbiB1c2UKKyAgICAgICAgLy9pbnRlcm5hbCBjYWNoZS4gSWYgbm8gSUQsIHRoZW4gdXNlIHRo
ZSBleHRlcm5hbCB2YXJpYWJsZXMKKyAgICAgICAgLy9mb3IgdGhpcyBub2RlIG1vZHVsZS4KKyAg
ICAgICAgaWYgKGlkKSB7CisgICAgICAgICAgICAvL1B1dCB0aGUgbW9kdWxlIGluIGRlZXAgZnJl
ZXplIHVudGlsIHRoZXJlIGlzIGEKKyAgICAgICAgICAgIC8vcmVxdWlyZSBjYWxsIGZvciBpdC4K
KyAgICAgICAgICAgIGRlZmluZUNhY2hlW2lkXSA9IFtpZCwgZGVwcywgZmFjdG9yeV07CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBydW5GYWN0b3J5KGlkLCBkZXBzLCBmYWN0b3J5KTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vZGVmaW5lLnJlcXVpcmUsIHdoaWNoIGhhcyBhY2Nl
c3MgdG8gYWxsIHRoZSB2YWx1ZXMgaW4gdGhlCisgICAgLy9jYWNoZS4gVXNlZnVsIGZvciBBTUQg
bW9kdWxlcyB0aGF0IGFsbCBoYXZlIElEcyBpbiB0aGUgZmlsZSwKKyAgICAvL2J1dCBuZWVkIHRv
IGZpbmFsbHkgZXhwb3J0IGEgdmFsdWUgdG8gbm9kZSBiYXNlZCBvbiBvbmUgb2YgdGhvc2UKKyAg
ICAvL0lEcy4KKyAgICBkZWZpbmUucmVxdWlyZSA9IGZ1bmN0aW9uIChpZCkgeworICAgICAgICBp
ZiAobG9hZGVyQ2FjaGVbaWRdKSB7CisgICAgICAgICAgICByZXR1cm4gbG9hZGVyQ2FjaGVbaWRd
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRlZmluZUNhY2hlW2lkXSkgeworICAgICAgICAg
ICAgcnVuRmFjdG9yeS5hcHBseShudWxsLCBkZWZpbmVDYWNoZVtpZF0pOworICAgICAgICAgICAg
cmV0dXJuIGxvYWRlckNhY2hlW2lkXTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBkZWZpbmUu
YW1kID0ge307CisKKyAgICByZXR1cm4gZGVmaW5lOworfQorCittb2R1bGUuZXhwb3J0cyA9IGFt
ZGVmaW5lOworCit9KShyZXF1aXJlKCJfX2Jyb3dzZXJpZnlfcHJvY2VzcyIpLCIvLi4vbm9kZV9t
b2R1bGVzL3NvdXJjZS1tYXAvbm9kZV9tb2R1bGVzL2FtZGVmaW5lL2FtZGVmaW5lLmpzIikKK30s
eyJfX2Jyb3dzZXJpZnlfcHJvY2VzcyI6MywicGF0aCI6Mn1dLDE1OltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4K
KyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0
aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNv
bXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0
aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNF
TlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3Jl
ZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNl
bnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJB
TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGll
ZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmlu
ZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICov
CisvKiBqc2hpbnQgYnJvd3NlcjogdHJ1ZSAqLworLyoganNsaW50IGV2aWw6IHRydWUgKi8KKwor
J3VzZSBzdHJpY3QnOwordmFyIHJ1blNjcmlwdHM7CisKK3ZhciB0cmFuc2Zvcm0gPSByZXF1aXJl
KCcuL2ZidHJhbnNmb3JtL2xpYi90cmFuc2Zvcm0nKS50cmFuc2Zvcm07Cit2YXIgdmlzaXRvcnMg
PSByZXF1aXJlKCcuL2ZidHJhbnNmb3JtL3Zpc2l0b3JzJykudHJhbnNmb3JtVmlzaXRvcnM7Cit2
YXIgdHJhbnNmb3JtID0gdHJhbnNmb3JtLmJpbmQobnVsbCwgdmlzaXRvcnMucmVhY3QpOwordmFy
IGRvY2Jsb2NrID0gcmVxdWlyZSgnLi9mYnRyYW5zZm9ybS9saWIvZG9jYmxvY2snKTsKKwordmFy
IGhlYWRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07CisKK2V4
cG9ydHMudHJhbnNmb3JtID0gdHJhbnNmb3JtOworCitleHBvcnRzLmV4ZWMgPSBmdW5jdGlvbihj
b2RlKSB7CisgIHJldHVybiBldmFsKHRyYW5zZm9ybShjb2RlKSk7Cit9OworCit2YXIgcnVuID0g
ZXhwb3J0cy5ydW4gPSBmdW5jdGlvbihjb2RlKSB7CisgIHZhciBqc3ggPSBkb2NibG9jay5wYXJz
ZUFzT2JqZWN0KGRvY2Jsb2NrLmV4dHJhY3QoY29kZSkpLmpzeDsKKworICB2YXIgZnVuY3Rpb25C
b2R5ID0ganN4ID8gdHJhbnNmb3JtKGNvZGUpLmNvZGUgOiBjb2RlOworICB2YXIgc2NyaXB0RWwg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKKworICBzY3JpcHRFbC5pbm5lckhU
TUwgPSBmdW5jdGlvbkJvZHk7CisgIGhlYWRFbC5hcHBlbmRDaGlsZChzY3JpcHRFbCk7Cit9Owor
CitpZiAodHlwZW9mIHdpbmRvdyA9PT0gInVuZGVmaW5lZCIgfHwgd2luZG93ID09PSBudWxsKSB7
CisgIHJldHVybjsKK30KKwordmFyIGxvYWQgPSBleHBvcnRzLmxvYWQgPSBmdW5jdGlvbih1cmws
IGNhbGxiYWNrKSB7CisgIHZhciB4aHI7CisgIHhociA9IHdpbmRvdy5BY3RpdmVYT2JqZWN0ID8g
bmV3IHdpbmRvdy5BY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MSFRUUCcpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDogbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgIC8vIERpc2FibGUg
YXN5bmMgc2luY2Ugd2UgbmVlZCB0byBleGVjdXRlIHNjcmlwdHMgaW4gdGhlIG9yZGVyIHRoZXkg
YXJlIGluIHRoZQorICAvLyBET00gdG8gbWlycm9yIG5vcm1hbCBzY3JpcHQgbG9hZGluZy4KKyAg
eGhyLm9wZW4oJ0dFVCcsIHVybCwgZmFsc2UpOworICBpZiAoJ292ZXJyaWRlTWltZVR5cGUnIGlu
IHhocikgeworICAgIHhoci5vdmVycmlkZU1pbWVUeXBlKCd0ZXh0L3BsYWluJyk7CisgIH0KKyAg
eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICh4aHIucmVhZHlT
dGF0ZSA9PT0gNCkgeworICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDAgfHwgeGhyLnN0YXR1cyA9
PT0gMjAwKSB7CisgICAgICAgIHJ1bih4aHIucmVzcG9uc2VUZXh0KTsKKyAgICAgIH0gZWxzZSB7
CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGxvYWQgIiArIHVybCk7CisgICAg
ICB9CisgICAgICBpZiAoY2FsbGJhY2spIHsKKyAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7Cisg
ICAgICB9CisgICAgfQorICB9OworICByZXR1cm4geGhyLnNlbmQobnVsbCk7Cit9OworCitydW5T
Y3JpcHRzID0gZnVuY3Rpb24oKSB7CisgIHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJ3NjcmlwdCcpOworICBzY3JpcHRzID0gQXJyYXkucHJvdG90eXBlLnNsaWNl
LmNhbGwoc2NyaXB0cyk7CisgIHZhciBqc3hTY3JpcHRzID0gc2NyaXB0cy5maWx0ZXIoZnVuY3Rp
b24oc2NyaXB0KSB7CisgICAgcmV0dXJuIHNjcmlwdC50eXBlID09PSAndGV4dC9qc3gnOworICB9
KTsKKworICBqc3hTY3JpcHRzLmZvckVhY2goZnVuY3Rpb24oc2NyaXB0KSB7CisgICAgaWYgKHNj
cmlwdC5zcmMpIHsKKyAgICAgIGxvYWQoc2NyaXB0LnNyYyk7CisgICAgfSBlbHNlIHsKKyAgICAg
IHJ1bihzY3JpcHQuaW5uZXJIVE1MKTsKKyAgICB9CisgIH0pOworfTsKKworaWYgKHdpbmRvdy5h
ZGRFdmVudExpc3RlbmVyKSB7CisgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50
TG9hZGVkJywgcnVuU2NyaXB0cywgZmFsc2UpOworfSBlbHNlIHsKKyAgd2luZG93LmF0dGFjaEV2
ZW50KCdvbmxvYWQnLCBydW5TY3JpcHRzKTsKK30KKworfSx7Ii4vZmJ0cmFuc2Zvcm0vbGliL2Rv
Y2Jsb2NrIjoxNiwiLi9mYnRyYW5zZm9ybS9saWIvdHJhbnNmb3JtIjoxNywiLi9mYnRyYW5zZm9y
bS92aXNpdG9ycyI6MjN9XSwxNjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5k
ZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5
b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExp
Y2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisg
KiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxl
c3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNv
ZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBv
biBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMg
T0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vu
c2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisg
KiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCit2YXIgZG9jYmxvY2tSZSA9
IC9eXHMqKFwvXCpcKigufFxuKSo/XCpcLykvOwordmFyIGx0cmltUmUgPSAvXlxzKi87CisvKioK
KyAqIEBwYXJhbSB7U3RyaW5nfSBjb250ZW50cworICogQHJldHVybiB7U3RyaW5nfQorICovCitm
dW5jdGlvbiBleHRyYWN0KGNvbnRlbnRzKSB7CisgIHZhciBtYXRjaCA9IGNvbnRlbnRzLm1hdGNo
KGRvY2Jsb2NrUmUpOworICBpZiAobWF0Y2gpIHsKKyAgICByZXR1cm4gbWF0Y2hbMF0ucmVwbGFj
ZShsdHJpbVJlLCAnJykgfHwgJyc7CisgIH0KKyAgcmV0dXJuICcnOworfQorCisKK3ZhciBjb21t
ZW50U3RhcnRSZSA9IC9eXC9cKlwqPy87Cit2YXIgY29tbWVudEVuZFJlID0gL1wqXC8kLzsKK3Zh
ciB3c1JlID0gL1tcdCBdKy9nOwordmFyIHN0cmluZ1N0YXJ0UmUgPSAvKFxufF4pICpcKi9nOwor
dmFyIG11bHRpbGluZVJlID0gLyg/Ol58XG4pICooQFteXG5dKj8pICpcbiAqKFteQFxuXHNdW15A
XG5dKz8pICpcbi9nOwordmFyIHByb3BlcnR5UmUgPSAvKD86XnxcbikgKkAoXFMrKSAqKFteXG5d
KikvZzsKKworLyoqCisgKiBAcGFyYW0ge1N0cmluZ30gY29udGVudHMKKyAqIEByZXR1cm4ge0Fy
cmF5fQorICovCitmdW5jdGlvbiBwYXJzZShkb2NibG9jaykgeworICBkb2NibG9jayA9IGRvY2Js
b2NrCisgICAgLnJlcGxhY2UoY29tbWVudFN0YXJ0UmUsICcnKQorICAgIC5yZXBsYWNlKGNvbW1l
bnRFbmRSZSwgJycpCisgICAgLnJlcGxhY2Uod3NSZSwgJyAnKQorICAgIC5yZXBsYWNlKHN0cmlu
Z1N0YXJ0UmUsICckMScpOworCisgIC8vIE5vcm1hbGl6ZSBtdWx0aS1saW5lIGRpcmVjdGl2ZXMK
KyAgdmFyIHByZXYgPSAnJzsKKyAgd2hpbGUgKHByZXYgIT0gZG9jYmxvY2spIHsKKyAgICBwcmV2
ID0gZG9jYmxvY2s7CisgICAgZG9jYmxvY2sgPSBkb2NibG9jay5yZXBsYWNlKG11bHRpbGluZVJl
LCAiXG4kMSAkMlxuIik7CisgIH0KKyAgZG9jYmxvY2sgPSBkb2NibG9jay50cmltKCk7CisKKyAg
dmFyIHJlc3VsdCA9IFtdOworICB2YXIgbWF0Y2g7CisgIHdoaWxlIChtYXRjaCA9IHByb3BlcnR5
UmUuZXhlYyhkb2NibG9jaykpIHsKKyAgICByZXN1bHQucHVzaChbbWF0Y2hbMV0sIG1hdGNoWzJd
XSk7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIFNhbWUgYXMgcGFyc2Ug
YnV0IHJldHVybnMgYW4gb2JqZWN0IG9mIHByb3A6IHZhbHVlIGluc3RlYWQgb2YgYXJyYXkgb2Yg
cGFyaXMKKyAqIElmIGEgcHJvcGVydHkgYXBwZXJzIG1vcmUgdGhhbiBvbmNlIHRoZSBsYXN0IG9u
ZSB3aWxsIGJlIHJldHVybmVkCisgKgorICogQHBhcmFtIHtTdHJpbmd9IGNvbnRlbnRzCisgKiBA
cmV0dXJuIHtPYmplY3R9CisgKi8KK2Z1bmN0aW9uIHBhcnNlQXNPYmplY3QoZG9jYmxvY2spIHsK
KyAgdmFyIHBhaXJzID0gcGFyc2UoZG9jYmxvY2spOworICB2YXIgcmVzdWx0ID0ge307CisgIGZv
ciAodmFyIGkgPSAwOyBpIDwgcGFpcnMubGVuZ3RoOyBpKyspIHsKKyAgICByZXN1bHRbcGFpcnNb
aV1bMF1dID0gcGFpcnNbaV1bMV07CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCitleHBv
cnRzLmV4dHJhY3QgPSBleHRyYWN0OworZXhwb3J0cy5wYXJzZSA9IHBhcnNlOworZXhwb3J0cy5w
YXJzZUFzT2JqZWN0ID0gcGFyc2VBc09iamVjdDsKKworfSx7fV0sMTc6W2Z1bmN0aW9uKHJlcXVp
cmUsbW9kdWxlLGV4cG9ydHMpeworKGZ1bmN0aW9uKCl7LyoqCisgKiBDb3B5cmlnaHQgMjAxMyBG
YWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwg
VmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmls
ZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRh
aW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3Jn
L2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2Fi
bGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAq
IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhw
cmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFu
Z3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhl
IExpY2Vuc2UuCisgKi8KKy8qZ2xvYmFsIGV4cG9ydHM6dHJ1ZSovCisvKmpzbGludCBub2RlOiB0
cnVlKi8KKyJ1c2Ugc3RyaWN0IjsKKworLyoqCisgKiBTeW50YXggdHJhbnNmb21lciBmb3IgamF2
YXNjcmlwdC4gVGFrZXMgdGhlIHNvdXJjZSBpbiwgc3BpdHMgdGhlIHNvdXJjZQorICogb3V0LiBU
cmllcyB0byBtYWludGFpbiByZWFkYWJpbGl0eSBhbmQgcHJlc2VydmUgd2hpdGVzcGFjZSBhbmQg
bGluZSBudW1iZXJzCisgKiB3aGVyZSBwb3Nzc2libGUuCisgKgorICogU3VwcG9ydAorICogLSBF
UzYgY2xhc3MgdHJhbnNmb3JtYXRpb24gKyBwcml2YXRlIHByb3BlcnR5IG11bmdpbmcsIHNlZSAu
L2NsYXNzZXMuanMKKyAqIC0gUmVhY3QgWEhQIHN0eWxlIHN5bnRheCB0cmFuc2Zvcm1hdGlvbnMs
IHNlZSAuL3JlYWN0LmpzCisgKiAtIEJvbHQgWEhQIHN0eWxlIHN5bnRheCB0cmFuc2Zvcm1hdGlv
bnMsIHNlZSAuL2JvbHQuanMKKyAqCisgKiBUaGUgZ2VuZXJhbCBmbG93IGlzIHRoZSBmb2xsb3dp
bmc6CisgKiAtIFBhcnNlIHRoZSBzb3VyY2Ugd2l0aCBvdXIgY3VzdG9taXplZCBlc3ByaW1hLXBh
cnNlcgorICogICBodHRwczovL2dpdGh1Yi5jb20vdm9sb2tvL2VzcHJpbWEuIFdlIGhhdmUgdG8g
Y3VzdG9taXplIHRoZSBwYXJzZXIgdG8KKyAqICAgc3VwcG9ydCBub24tc3RhbmRhcmQgWEhQLXN0
eWxlIHN5bnRheC4gV2UgcGFyc2UgdGhlIHNvdXJjZSByYW5nZTogdHJ1ZQorICogICBvcHRpb24g
dGhhdCBmb3JjZXMgZXNwcmltYSB0byByZXR1cm4gcG9zaXRpb25zIGluIHRoZSBzb3VyY2Ugd2l0
aGluCisgKiAgIHJlc3VsdGluZyBwYXJzZSB0cmVlLgorICoKKyAqIC0gVHJhdmVyc2UgcmVzdWx0
aW5nIHN5bnRheCB0cmVlLCB0cnlpbmcgdG8gYXBwbHkgYSBzZXQgb2YgdmlzaXRvcnMgdG8gZWFj
aAorICogICBub2RlLiBFYWNoIHZpc2l0b3Igc2hvdWxkIHByb3ZpZGUgYSAudGVzdCgpIGZ1bmN0
aW9uIHRoYXQgdGVzdHMgaWYgdGhlCisgKiAgIHZpc2l0b3IgY2FuIHByb2Nlc3MgYSBnaXZlbiBu
b2RlLgorICoKKyAqIC0gVmlzaXRvciBpcyByZXNwb25zaWJsZSBmb3IgY29kZSBnZW5lcmF0aW9u
IGZvciBhIGdpdmVuIHN5bnRheCBub2RlLgorICogICBHZW5lcmF0ZWQgY29kZSBpcyBzdG9yZWQg
aW4gc3RhdGUuZy5idWZmZXIgdGhhdCBpcyBwYXNzZWQgdG8gZXZlcnkKKyAqICAgdmlzaXRvci4g
SXQncyB1cCB0byB0aGUgdmlzaXRvciB0byBwcm9jZXNzIHRoZSBjb2RlIHRoZSB3YXkgaXQgc2Vl
cyBmaXQuCisgKiAgIEFsbCBvZiB0aGUgY3VycmVudCB2aXNpdG9ycyBob3dldmVyIHVzZSBib3Ro
IHRoZSBub2RlIGFuZCB0aGUgb3JpZ2luYWwKKyAqICAgc291cmNlIHRvIGdlbmVyYXRlIHRyYW5z
Zm9ybWVkIGNvZGUuIFRoZXkgdXNlIG5vZGVzIHRvIGdlbmVyYXRlIG5ldworICogICBjb2RlIGFu
ZCB0aGV5IGNvcHkgdGhlIG9yaWdpbmFsIHNvdXJjZSwgcHJlc2VydmluZyB3aGl0ZXNwYWNlIGFu
ZCBjb21tZW50cywKKyAqICAgZm9yIHRoZSBwYXJ0cyB0aGV5IGRvbid0IGNhcmUgYWJvdXQuCisg
Ki8KK3ZhciBlc3ByaW1hID0gcmVxdWlyZSgnZXNwcmltYScpOworCit2YXIgY3JlYXRlU3RhdGUg
PSByZXF1aXJlKCcuL3V0aWxzJykuY3JlYXRlU3RhdGU7Cit2YXIgY2F0Y2h1cCA9IHJlcXVpcmUo
Jy4vdXRpbHMnKS5jYXRjaHVwOworCisvKioKKyAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3QKKyAq
IEBwYXJhbSB7ZnVuY3Rpb259IHZpc2l0b3IKKyAqIEBwYXJhbSB7YXJyYXl9IHBhdGgKKyAqIEBw
YXJhbSB7b2JqZWN0fSBzdGF0ZQorICovCitmdW5jdGlvbiB0cmF2ZXJzZShvYmplY3QsIHBhdGgs
IHN0YXRlKSB7CisgIHZhciBrZXksIGNoaWxkOworCisgIGlmICh3YWxrZXIodHJhdmVyc2UsIG9i
amVjdCwgcGF0aCwgc3RhdGUpID09PSBmYWxzZSkgeworICAgIHJldHVybjsKKyAgfQorICBwYXRo
LnVuc2hpZnQob2JqZWN0KTsKKyAgZm9yIChrZXkgaW4gb2JqZWN0KSB7CisgICAgLy8gc2tpcCBv
YnZpb3VzbHkgd3JvbmcgYXR0cmlidXRlcworICAgIGlmIChrZXkgPT09ICdyYW5nZScgfHwga2V5
ID09PSAnbG9jJykgeworICAgICAgY29udGludWU7CisgICAgfQorICAgIGlmIChvYmplY3QuaGFz
T3duUHJvcGVydHkoa2V5KSkgeworICAgICAgY2hpbGQgPSBvYmplY3Rba2V5XTsKKyAgICAgIGlm
ICh0eXBlb2YgY2hpbGQgPT09ICdvYmplY3QnICYmIGNoaWxkICE9PSBudWxsKSB7CisgICAgICAg
IGNoaWxkLnJhbmdlICYmIGNhdGNodXAoY2hpbGQucmFuZ2VbMF0sIHN0YXRlKTsKKyAgICAgICAg
dHJhdmVyc2UoY2hpbGQsIHBhdGgsIHN0YXRlKTsKKyAgICAgICAgY2hpbGQucmFuZ2UgJiYgY2F0
Y2h1cChjaGlsZC5yYW5nZVsxXSwgc3RhdGUpOworICAgICAgfQorICAgIH0KKyAgfQorICBwYXRo
LnNoaWZ0KCk7Cit9CisKK2Z1bmN0aW9uIHdhbGtlcih0cmF2ZXJzZSwgb2JqZWN0LCBwYXRoLCBz
dGF0ZSkgeworICB2YXIgdmlzaXRvcnMgPSBzdGF0ZS5nLnZpc2l0b3JzOworICBmb3IgKHZhciBp
ID0gMDsgaSA8IHZpc2l0b3JzLmxlbmd0aDsgaSsrKSB7CisgICAgaWYgKHZpc2l0b3JzW2ldLnRl
c3Qob2JqZWN0LCBwYXRoLCBzdGF0ZSkpIHsKKyAgICAgIHJldHVybiB2aXNpdG9yc1tpXSh0cmF2
ZXJzZSwgb2JqZWN0LCBwYXRoLCBzdGF0ZSk7CisgICAgfQorICB9Cit9CisKK2Z1bmN0aW9uIHJ1
blBhc3Moc291cmNlLCB2aXNpdG9ycywgb3B0aW9ucykgeworICB2YXIgYXN0OworICB0cnkgewor
ICAgIGFzdCA9IGVzcHJpbWEucGFyc2Uoc291cmNlLCB7IGNvbW1lbnQ6IHRydWUsIGxvYzogdHJ1
ZSwgcmFuZ2U6IHRydWUgfSk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBlLm1lc3NhZ2UgPSAnUGFy
c2UgRXJyb3I6ICcgKyBlLm1lc3NhZ2U7CisgICAgdGhyb3cgZTsKKyAgfQorICB2YXIgc3RhdGUg
PSBjcmVhdGVTdGF0ZShzb3VyY2UsIG9wdGlvbnMpOworICBzdGF0ZS5nLm9yaWdpbmFsUHJvZ3Jh
bUFTVCA9IGFzdDsKKyAgc3RhdGUuZy52aXNpdG9ycyA9IHZpc2l0b3JzOworCisgIGlmIChvcHRp
b25zLnNvdXJjZU1hcCkgeworICAgIHZhciBTb3VyY2VNYXBHZW5lcmF0b3IgPSByZXF1aXJlKCdz
b3VyY2UtbWFwJykuU291cmNlTWFwR2VuZXJhdG9yOworICAgIHN0YXRlLmcuc291cmNlTWFwID0g
bmV3IFNvdXJjZU1hcEdlbmVyYXRvcih7IGZpbGU6ICd0cmFuc2Zvcm1lZC5qcycgfSk7CisgIH0K
KyAgdHJhdmVyc2UoYXN0LCBbXSwgc3RhdGUpOworICBjYXRjaHVwKHNvdXJjZS5sZW5ndGgsIHN0
YXRlKTsKKyAgcmV0dXJuIHN0YXRlOworfQorCisvKioKKyAqIEFwcGxpZXMgYWxsIGF2YWlsYWJs
ZSB0cmFuc2Zvcm1hdGlvbnMgdG8gdGhlIHNvdXJjZQorICogQHBhcmFtIHthcnJheX0gdmlzaXRv
cnMKKyAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UKKyAqIEBwYXJhbSB7P29iamVjdH0gb3B0aW9u
cworICogQHJldHVybiB7b2JqZWN0fQorICovCitmdW5jdGlvbiB0cmFuc2Zvcm0odmlzaXRvcnMs
IHNvdXJjZSwgb3B0aW9ucykgeworICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKKworICB2YXIg
c3RhdGUgPSBydW5QYXNzKHNvdXJjZSwgdmlzaXRvcnMsIG9wdGlvbnMpOworICB2YXIgc291cmNl
TWFwID0gc3RhdGUuZy5zb3VyY2VNYXA7CisKKyAgaWYgKHNvdXJjZU1hcCkgeworICAgIHJldHVy
biB7CisgICAgICBzb3VyY2VNYXA6IHNvdXJjZU1hcCwKKyAgICAgIHNvdXJjZU1hcEZpbGVuYW1l
OiBvcHRpb25zLmZpbGVuYW1lIHx8ICdzb3VyY2UuanMnLAorICAgICAgY29kZTogc3RhdGUuZy5i
dWZmZXIKKyAgICB9OworICB9IGVsc2UgeworICAgIHJldHVybiB7CisgICAgICBjb2RlOiBzdGF0
ZS5nLmJ1ZmZlcgorICAgIH07CisgIH0KK30KKworCitleHBvcnRzLnRyYW5zZm9ybSA9IHRyYW5z
Zm9ybTsKKworfSkoKQorfSx7Ii4vdXRpbHMiOjE4LCJlc3ByaW1hIjo0LCJzb3VyY2UtbWFwIjo1
fV0sMTg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworKGZ1bmN0aW9uKCl7Lyoq
CisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVy
IHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91
IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNl
bnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICog
aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNz
IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0
d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g
YW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNl
IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICog
bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKy8qZ2xvYmFsIGV4cG9ydHM6dHJ1
ZSovCisKKy8qKgorICogU3RhdGUgcmVwcmVzZW50cyB0aGUgZ2l2ZW4gcGFyc2VyIHN0YXRlLiBJ
dCBoYXMgYSBsb2NhbCBhbmQgZ2xvYmFsIHBhcnRzLgorICogR2xvYmFsIGNvbnRhaW5zIHBhcnNl
ciBwb3NpdGlvbiwgc291cmNlLCBldGMuIExvY2FsIGNvbnRhaW5zIHNjb3BlIGJhc2VkCisgKiBw
cm9wZXJ0aWVzLCBsaWtlIGN1cnJlbnQgY2xhc3MgbmFtZS4gU3RhdGUgc2hvdWxkIGNvbnRhaW4g
YWxsIHRoZSBpbmZvCisgKiByZXF1aXJlZCBmb3IgdHJhbnNmb3JtYXRpb24uIEl0J3MgdGhlIG9u
bHkgbWFuZGF0b3J5IG9iamVjdCB0aGF0IGlzIGJlaW5nCisgKiBwYXNzZWQgdG8gZXZlcnkgZnVu
Y3Rpb24gaW4gdHJhbnNmb3JtIGNoYWluLgorICoKKyAqIEBwYXJhbSAge1N0cmluZ30gc291cmNl
CisgKiBAcGFyYW0gIHtPYmplY3R9IHRyYW5zZm9ybU9wdGlvbnMKKyAqIEByZXR1cm4ge09iamVj
dH0KKyAqLworZnVuY3Rpb24gY3JlYXRlU3RhdGUoc291cmNlLCB0cmFuc2Zvcm1PcHRpb25zKSB7
CisgIHJldHVybiB7CisgICAgLyoqCisgICAgICogTmFtZSBvZiB0aGUgc3VwZXIgY2xhc3MgdmFy
aWFibGUKKyAgICAgKiBAdHlwZSB7U3RyaW5nfQorICAgICAqLworICAgIHN1cGVyVmFyOiAnJywK
KyAgICAvKioKKyAgICAgKiBOYW1lIG9mIHRoZSBlbmNsb3NpbmcgY2xhc3Mgc2NvcGUKKyAgICAg
KiBAdHlwZSB7U3RyaW5nfQorICAgICAqLworICAgIHNjb3BlTmFtZTogJycsCisgICAgLyoqCisg
ICAgICogR2xvYmFsIHN0YXRlIChub3QgYWZmZWN0ZWQgYnkgdXBkYXRlU3RhdGUpCisgICAgICog
QHR5cGUge09iamVjdH0KKyAgICAgKi8KKyAgICBnOiB7CisgICAgICAvKioKKyAgICAgICAqIEEg
c2V0IG9mIGdlbmVyYWwgb3B0aW9ucyB0aGF0IHRyYW5zZm9ybWF0aW9ucyBjYW4gY29uc2lkZXIg
d2hpbGUgZG9pbmcKKyAgICAgICAqIGEgdHJhbnNmb3JtYXRpb246CisgICAgICAgKgorICAgICAg
ICogLSBtaW5pZnkKKyAgICAgICAqICAgU3BlY2lmaWVzIHRoYXQgdHJhbnNmb3JtYXRpb24gc3Rl
cHMgc2hvdWxkIGRvIHRoZWlyIGJlc3QgdG8gbWluaWZ5CisgICAgICAgKiAgIHRoZSBvdXRwdXQg
c291cmNlIHdoZW4gcG9zc2libGUuIFRoaXMgaXMgdXNlZnVsIGZvciBwbGFjZXMgd2hlcmUKKyAg
ICAgICAqICAgbWluaWZpY2F0aW9uIG9wdGltaXphdGlvbnMgYXJlIHBvc3NpYmxlIHdpdGggaGln
aGVyLWxldmVsIGNvbnRleHQKKyAgICAgICAqICAgaW5mbyB0aGFuIHdoYXQganN4bWluIGNhbiBw
cm92aWRlLgorICAgICAgICoKKyAgICAgICAqICAgRm9yIGV4YW1wbGUsIHRoZSBFUzYgY2xhc3Mg
dHJhbnNmb3JtIHdpbGwgbWluaWZ5IG11bmdlZCBwcml2YXRlCisgICAgICAgKiAgIHZhcmlhYmxl
cyBpZiB0aGlzIGZsYWcgaXMgc2V0LgorICAgICAgICovCisgICAgICBvcHRzOiB0cmFuc2Zvcm1P
cHRpb25zLAorICAgICAgLyoqCisgICAgICAgKiBDdXJyZW50IHBvc2l0aW9uIGluIHRoZSBzb3Vy
Y2UgY29kZQorICAgICAgICogQHR5cGUge051bWJlcn0KKyAgICAgICAqLworICAgICAgcG9zaXRp
b246IDAsCisgICAgICAvKioKKyAgICAgICAqIEJ1ZmZlciBjb250YWluaW5nIHRoZSByZXN1bHQK
KyAgICAgICAqIEB0eXBlIHtTdHJpbmd9CisgICAgICAgKi8KKyAgICAgIGJ1ZmZlcjogJycsCisg
ICAgICAvKioKKyAgICAgICAqIEluZGVudGF0aW9uIG9mZnNldCAob25seSBuZWdhdGl2ZSBvZmZz
ZXQgaXMgc3VwcG9ydGVkIG5vdykKKyAgICAgICAqIEB0eXBlIHtOdW1iZXJ9CisgICAgICAgKi8K
KyAgICAgIGluZGVudEJ5OiAwLAorICAgICAgLyoqCisgICAgICAgKiBTb3VyY2UgdGhhdCBpcyBi
ZWluZyB0cmFuc2Zvcm1lZAorICAgICAgICogQHR5cGUge1N0cmluZ30KKyAgICAgICAqLworICAg
ICAgc291cmNlOiBzb3VyY2UsCisKKyAgICAgIC8qKgorICAgICAgICogQ2FjaGVkIHBhcnNlZCBk
b2NibG9jayAoc2VlIGdldERvY2Jsb2NrKQorICAgICAgICogQHR5cGUge29iamVjdH0KKyAgICAg
ICAqLworICAgICAgZG9jYmxvY2s6IG51bGwsCisKKyAgICAgIC8qKgorICAgICAgICogV2hldGhl
ciB0aGUgdGhpbmcgd2FzIHVzZWQKKyAgICAgICAqIEB0eXBlIHtCb29sZWFufQorICAgICAgICov
CisgICAgICB0YWdOYW1lc3BhY2VVc2VkOiBmYWxzZSwKKworICAgICAgLyoqCisgICAgICAgKiBJ
ZiB1c2luZyBib2x0IHhqcyB0cmFuc2Zvcm1hdGlvbgorICAgICAgICogQHR5cGUge0Jvb2xlYW59
CisgICAgICAgKi8KKyAgICAgIGlzQm9sdDogdW5kZWZpbmVkLAorCisgICAgICAvKioKKyAgICAg
ICAqIFdoZXRoZXIgdG8gcmVjb3JkIHNvdXJjZSBtYXAgKGV4cGVuc2l2ZSkgb3Igbm90CisgICAg
ICAgKiBAdHlwZSB7U291cmNlTWFwR2VuZXJhdG9yfG51bGx9CisgICAgICAgKi8KKyAgICAgIHNv
dXJjZU1hcDogbnVsbCwKKworICAgICAgLyoqCisgICAgICAgKiBGaWxlbmFtZSBvZiB0aGUgZmls
ZSBiZWluZyBwcm9jZXNzZWQuIFdpbGwgYmUgcmV0dXJuZWQgYXMgYSBzb3VyY2UKKyAgICAgICAq
IGF0dHJpYnV0ZSBpbiB0aGUgc291cmNlIG1hcAorICAgICAgICovCisgICAgICBzb3VyY2VNYXBG
aWxlbmFtZTogJ3NvdXJjZS5qcycsCisKKyAgICAgIC8qKgorICAgICAgICogT25seSB3aGVuIHNv
dXJjZSBtYXAgaXMgdXNlZDogbGFzdCBsaW5lIGluIHRoZSBzb3VyY2UgZm9yIHdoaWNoCisgICAg
ICAgKiBzb3VyY2UgbWFwIHdhcyBnZW5lcmF0ZWQKKyAgICAgICAqIEB0eXBlIHtOdW1iZXJ9Cisg
ICAgICAgKi8KKyAgICAgIHNvdXJjZUxpbmU6IDEsCisKKyAgICAgIC8qKgorICAgICAgICogT25s
eSB3aGVuIHNvdXJjZSBtYXAgaXMgdXNlZDogbGFzdCBsaW5lIGluIHRoZSBidWZmZXIgZm9yIHdo
aWNoCisgICAgICAgKiBzb3VyY2UgbWFwIHdhcyBnZW5lcmF0ZWQKKyAgICAgICAqIEB0eXBlIHtO
dW1iZXJ9CisgICAgICAgKi8KKyAgICAgIGJ1ZmZlckxpbmU6IDEsCisKKyAgICAgIC8qKgorICAg
ICAgICogVGhlIHRvcC1sZXZlbCBQcm9ncmFtIEFTVCBmb3IgdGhlIG9yaWdpbmFsIGZpbGUuCisg
ICAgICAgKi8KKyAgICAgIG9yaWdpbmFsUHJvZ3JhbUFTVDogbnVsbCwKKworICAgICAgc291cmNl
Q29sdW1uOiAwLAorICAgICAgYnVmZmVyQ29sdW1uOiAwCisgICAgfQorICB9OworfQorCisvKioK
KyAqIFVwZGF0ZXMgYSBjb3B5IG9mIGEgZ2l2ZW4gc3RhdGUgd2l0aCAidXBkYXRlIiBhbmQgcmV0
dXJucyBhbiB1cGRhdGVkIHN0YXRlLgorICoKKyAqIEBwYXJhbSAge09iamVjdH0gc3RhdGUKKyAq
IEBwYXJhbSAge09iamVjdH0gdXBkYXRlCisgKiBAcmV0dXJuIHtPYmplY3R9CisgKi8KK2Z1bmN0
aW9uIHVwZGF0ZVN0YXRlKHN0YXRlLCB1cGRhdGUpIHsKKyAgcmV0dXJuIHsKKyAgICBnOiBzdGF0
ZS5nLAorICAgIHN1cGVyVmFyOiB1cGRhdGUuc3VwZXJWYXIgfHwgc3RhdGUuc3VwZXJWYXIsCisg
ICAgc2NvcGVOYW1lOiB1cGRhdGUuc2NvcGVOYW1lIHx8IHN0YXRlLnNjb3BlTmFtZQorICB9Owor
fQorCisvKioKKyAqIEdpdmVuIGEgc3RhdGUgZmlsbCB0aGUgcmVzdWx0aW5nIGJ1ZmZlciBmcm9t
IHRoZSBvcmlnaW5hbCBzb3VyY2UgdXAgdG8KKyAqIHRoZSBlbmQKKyAqIEBwYXJhbSAge051bWJl
cn0gZW5kCisgKiBAcGFyYW0gIHtPYmplY3R9IHN0YXRlCisgKiBAcGFyYW0ge0Z1bmN0aW9uP30g
Y29udGVudFRyYW5zZm9ybWVyIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHRyYW5zZm9ybSBuZXdseQor
ICogYWRkZWQgY29udGVudC4KKyAqLworZnVuY3Rpb24gY2F0Y2h1cChlbmQsIHN0YXRlLCBjb250
ZW50VHJhbnNmb3JtZXIpIHsKKyAgaWYgKGVuZCA8IHN0YXRlLmcucG9zaXRpb24pIHsKKyAgICAv
LyBjYW5ub3QgbW92ZSBiYWNrd2FyZHMKKyAgICByZXR1cm47CisgIH0KKyAgdmFyIHNvdXJjZSA9
IHN0YXRlLmcuc291cmNlLnN1YnN0cmluZyhzdGF0ZS5nLnBvc2l0aW9uLCBlbmQpOworICB2YXIg
dHJhbnNmb3JtZWQgPSB1cGRhdGVJbmRlbnQoc291cmNlLCBzdGF0ZSk7CisgIGlmIChzdGF0ZS5n
LnNvdXJjZU1hcCAmJiB0cmFuc2Zvcm1lZCkgeworICAgIC8vIHJlY29yZCB3aGVyZSB3ZSBhcmUK
KyAgICBzdGF0ZS5nLnNvdXJjZU1hcC5hZGRNYXBwaW5nKHsKKyAgICAgIGdlbmVyYXRlZDogeyBs
aW5lOiBzdGF0ZS5nLmJ1ZmZlckxpbmUsIGNvbHVtbjogc3RhdGUuZy5idWZmZXJDb2x1bW4gfSwK
KyAgICAgIG9yaWdpbmFsOiB7IGxpbmU6IHN0YXRlLmcuc291cmNlTGluZSwgY29sdW1uOiBzdGF0
ZS5nLnNvdXJjZUNvbHVtbiB9LAorICAgICAgc291cmNlOiBzdGF0ZS5nLnNvdXJjZU1hcEZpbGVu
YW1lCisgICAgfSk7CisKKyAgICAvLyByZWNvcmQgbGluZSBicmVha3MgaW4gdHJhbnNmb3JtZWQg
c291cmNlCisgICAgdmFyIHNvdXJjZUxpbmVzID0gc291cmNlLnNwbGl0KCdcbicpOworICAgIHZh
ciB0cmFuc2Zvcm1lZExpbmVzID0gdHJhbnNmb3JtZWQuc3BsaXQoJ1xuJyk7CisgICAgLy8gQWRk
IGxpbmUgYnJlYWsgbWFwcGluZ3MgYmV0d2VlbiBsYXN0IGtub3duIG1hcHBpbmcgYW5kIHRoZSBl
bmQgb2YgdGhlCisgICAgLy8gYWRkZWQgcGllY2UuIFNvIGZvciB0aGUgY29kZSBwaWVjZQorICAg
IC8vICAoZm9vLCBiYXIpOworICAgIC8vID4gdmFyIHggPSAyOworICAgIC8vID4gdmFyIGIgPSAz
OworICAgIC8vICAgdmFyIGMgPQorICAgIC8vIG9ubHkgYWRkIGxpbmVzIG1hcmtlZCB3aXRoICI+
IjogMiwgMy4KKyAgICBmb3IgKHZhciBpID0gMTsgaSA8IHNvdXJjZUxpbmVzLmxlbmd0aCAtIDE7
IGkrKykgeworICAgICAgc3RhdGUuZy5zb3VyY2VNYXAuYWRkTWFwcGluZyh7CisgICAgICAgIGdl
bmVyYXRlZDogeyBsaW5lOiBzdGF0ZS5nLmJ1ZmZlckxpbmUsIGNvbHVtbjogMCB9LAorICAgICAg
ICBvcmlnaW5hbDogeyBsaW5lOiBzdGF0ZS5nLnNvdXJjZUxpbmUsIGNvbHVtbjogMCB9LAorICAg
ICAgICBzb3VyY2U6IHN0YXRlLmcuc291cmNlTWFwRmlsZW5hbWUKKyAgICAgIH0pOworICAgICAg
c3RhdGUuZy5zb3VyY2VMaW5lKys7CisgICAgICBzdGF0ZS5nLmJ1ZmZlckxpbmUrKzsKKyAgICB9
CisgICAgLy8gb2Zmc2V0IGZvciB0aGUgbGFzdCBwaWVjZQorICAgIGlmIChzb3VyY2VMaW5lcy5s
ZW5ndGggPiAxKSB7CisgICAgICBzdGF0ZS5nLnNvdXJjZUxpbmUrKzsKKyAgICAgIHN0YXRlLmcu
YnVmZmVyTGluZSsrOworICAgICAgc3RhdGUuZy5zb3VyY2VDb2x1bW4gPSAwOworICAgICAgc3Rh
dGUuZy5idWZmZXJDb2x1bW4gPSAwOworICAgIH0KKyAgICBzdGF0ZS5nLnNvdXJjZUNvbHVtbiAr
PSBzb3VyY2VMaW5lc1tzb3VyY2VMaW5lcy5sZW5ndGggLSAxXS5sZW5ndGg7CisgICAgc3RhdGUu
Zy5idWZmZXJDb2x1bW4gKz0KKyAgICAgIHRyYW5zZm9ybWVkTGluZXNbdHJhbnNmb3JtZWRMaW5l
cy5sZW5ndGggLSAxXS5sZW5ndGg7CisgIH0KKyAgc3RhdGUuZy5idWZmZXIgKz0KKyAgICBjb250
ZW50VHJhbnNmb3JtZXIgPyBjb250ZW50VHJhbnNmb3JtZXIodHJhbnNmb3JtZWQpIDogdHJhbnNm
b3JtZWQ7CisgIHN0YXRlLmcucG9zaXRpb24gPSBlbmQ7Cit9CisKKy8qKgorICogQXBwbGllcyBg
Y2F0Y2h1cGAgYnV0IHBhc3NpbmcgaW4gYSBmdW5jdGlvbiB0aGF0IHJlbW92ZXMgYW55IG5vbi13
aGl0ZXNwYWNlCisgKiBjaGFyYWN0ZXJzLgorICovCit2YXIgcmUgPSAvKFxTKS9nOworZnVuY3Rp
b24gc3RyaXBOb25XaGl0ZSh2YWx1ZSkgeworICByZXR1cm4gdmFsdWUucmVwbGFjZShyZSwgZnVu
Y3Rpb24oKSB7CisgICAgcmV0dXJuICcnOworICB9KTsKK30KKy8qKgorICogQ2F0Y2hlcyB1cCBh
cyBgY2F0Y2h1cGAgYnV0IHR1cm5zIGVhY2ggbm9uLXdoaXRlIGNoYXJhY3RlciBpbnRvIGEgc3Bh
Y2UuCisgKi8KK2Z1bmN0aW9uIGNhdGNodXBXaGl0ZVNwYWNlKGVuZCwgc3RhdGUpIHsKKyAgY2F0
Y2h1cChlbmQsIHN0YXRlLCBzdHJpcE5vbldoaXRlKTsKK30KKworLyoqCisgKiBTYW1lIGFzIGNh
dGNodXAgYnV0IGRvZXMgbm90IHRvdWNoIHRoZSBidWZmZXIKKyAqIEBwYXJhbSAge051bWJlcn0g
ZW5kCisgKiBAcGFyYW0gIHtPYmplY3R9IHN0YXRlCisgKi8KK2Z1bmN0aW9uIG1vdmUoZW5kLCBz
dGF0ZSkgeworICAvLyBtb3ZlIHRoZSBpbnRlcm5hbCBjdXJzb3JzCisgIGlmIChzdGF0ZS5nLnNv
dXJjZU1hcCkgeworICAgIGlmIChlbmQgPCBzdGF0ZS5nLnBvc2l0aW9uKSB7CisgICAgICBzdGF0
ZS5nLnBvc2l0aW9uID0gMDsKKyAgICAgIHN0YXRlLmcuc291cmNlTGluZSA9IDE7CisgICAgICBz
dGF0ZS5nLnNvdXJjZUNvbHVtbiA9IDA7CisgICAgfQorCisgICAgdmFyIHNvdXJjZSA9IHN0YXRl
Lmcuc291cmNlLnN1YnN0cmluZyhzdGF0ZS5nLnBvc2l0aW9uLCBlbmQpOworICAgIHZhciBzb3Vy
Y2VMaW5lcyA9IHNvdXJjZS5zcGxpdCgnXG4nKTsKKyAgICBpZiAoc291cmNlTGluZXMubGVuZ3Ro
ID4gMSkgeworICAgICAgc3RhdGUuZy5zb3VyY2VMaW5lICs9IHNvdXJjZUxpbmVzLmxlbmd0aCAt
IDE7CisgICAgICBzdGF0ZS5nLnNvdXJjZUNvbHVtbiA9IDA7CisgICAgfQorICAgIHN0YXRlLmcu
c291cmNlQ29sdW1uICs9IHNvdXJjZUxpbmVzW3NvdXJjZUxpbmVzLmxlbmd0aCAtIDFdLmxlbmd0
aDsKKyAgfQorICBzdGF0ZS5nLnBvc2l0aW9uID0gZW5kOworfQorCisvKioKKyAqIEFwcGVuZHMg
YSBzdHJpbmcgb2YgdGV4dCB0byB0aGUgYnVmZmVyCisgKiBAcGFyYW0gIHtTdHJpbmd9IHN0cmlu
ZworICogQHBhcmFtICB7T2JqZWN0fSBzdGF0ZQorICovCitmdW5jdGlvbiBhcHBlbmQoc3RyaW5n
LCBzdGF0ZSkgeworICBpZiAoc3RhdGUuZy5zb3VyY2VNYXAgJiYgc3RyaW5nKSB7CisgICAgc3Rh
dGUuZy5zb3VyY2VNYXAuYWRkTWFwcGluZyh7CisgICAgICBnZW5lcmF0ZWQ6IHsgbGluZTogc3Rh
dGUuZy5idWZmZXJMaW5lLCBjb2x1bW46IHN0YXRlLmcuYnVmZmVyQ29sdW1uIH0sCisgICAgICBv
cmlnaW5hbDogeyBsaW5lOiBzdGF0ZS5nLnNvdXJjZUxpbmUsIGNvbHVtbjogc3RhdGUuZy5zb3Vy
Y2VDb2x1bW4gfSwKKyAgICAgIHNvdXJjZTogc3RhdGUuZy5zb3VyY2VNYXBGaWxlbmFtZQorICAg
IH0pOworICAgIHZhciB0cmFuc2Zvcm1lZExpbmVzID0gc3RyaW5nLnNwbGl0KCdcbicpOworICAg
IGlmICh0cmFuc2Zvcm1lZExpbmVzLmxlbmd0aCA+IDEpIHsKKyAgICAgIHN0YXRlLmcuYnVmZmVy
TGluZSArPSB0cmFuc2Zvcm1lZExpbmVzLmxlbmd0aCAtIDE7CisgICAgICBzdGF0ZS5nLmJ1ZmZl
ckNvbHVtbiA9IDA7CisgICAgfQorICAgIHN0YXRlLmcuYnVmZmVyQ29sdW1uICs9CisgICAgICB0
cmFuc2Zvcm1lZExpbmVzW3RyYW5zZm9ybWVkTGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoOworICB9
CisgIHN0YXRlLmcuYnVmZmVyICs9IHN0cmluZzsKK30KKworLyoqCisgKiBVcGRhdGUgaW5kZW50
IHVzaW5nIHN0YXRlLmluZGVudEJ5IHByb3BlcnR5LiBJbmRlbnQgaXMgbWVhc3VyZWQgaW4KKyAq
IGRvdWJsZSBzcGFjZXMuIFVwZGF0ZXMgYSBzaW5nbGUgbGluZSBvbmx5LgorICoKKyAqIEBwYXJh
bSAge1N0cmluZ30gc3RyCisgKiBAcGFyYW0gIHtPYmplY3R9IHN0YXRlCisgKiBAcmV0dXJuIHtT
dHJpbmd9CisgKi8KK2Z1bmN0aW9uIHVwZGF0ZUluZGVudChzdHIsIHN0YXRlKSB7CisgIGZvciAo
dmFyIGkgPSAwOyBpIDwgLXN0YXRlLmcuaW5kZW50Qnk7IGkrKykgeworICAgIHN0ciA9IHN0ci5y
ZXBsYWNlKC8oXnxcbikoIHsyfXxcdCkvZywgJyQxJyk7CisgIH0KKyAgcmV0dXJuIHN0cjsKK30K
KworLyoqCisgKiBDYWxjdWxhdGVzIGluZGVudCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxp
bmUgdW50aWwgInN0YXJ0IiBvciB0aGUgZmlyc3QKKyAqIGNoYXJhY3RlciBiZWZvcmUgc3RhcnQu
CisgKiBAZXhhbXBsZQorICogICAiICBmb28uYmFyKCkiCisgKiAgICAgICAgIF4KKyAqICAgICAg
IHN0YXJ0CisgKiAgIGluZGVudCB3aWxsIGJlIDIKKyAqCisgKiBAcGFyYW0gIHtOdW1iZXJ9IHN0
YXJ0CisgKiBAcGFyYW0gIHtPYmplY3R9IHN0YXRlCisgKiBAcmV0dXJuIHtOdW1iZXJ9CisgKi8K
K2Z1bmN0aW9uIGluZGVudEJlZm9yZShzdGFydCwgc3RhdGUpIHsKKyAgdmFyIGVuZCA9IHN0YXJ0
OworICBzdGFydCA9IHN0YXJ0IC0gMTsKKworICB3aGlsZSAoc3RhcnQgPiAwICYmIHN0YXRlLmcu
c291cmNlW3N0YXJ0XSAhPSAnXG4nKSB7CisgICAgaWYgKCFzdGF0ZS5nLnNvdXJjZVtzdGFydF0u
bWF0Y2goL1sgXHRdLykpIHsKKyAgICAgIGVuZCA9IHN0YXJ0OworICAgIH0KKyAgICBzdGFydC0t
OworICB9CisgIHJldHVybiBzdGF0ZS5nLnNvdXJjZS5zdWJzdHJpbmcoc3RhcnQgKyAxLCBlbmQp
OworfQorCitmdW5jdGlvbiBnZXREb2NibG9jayhzdGF0ZSkgeworICBpZiAoIXN0YXRlLmcuZG9j
YmxvY2spIHsKKyAgICB2YXIgZG9jYmxvY2sgPSByZXF1aXJlKCcuL2RvY2Jsb2NrJyk7CisgICAg
c3RhdGUuZy5kb2NibG9jayA9CisgICAgICBkb2NibG9jay5wYXJzZUFzT2JqZWN0KGRvY2Jsb2Nr
LmV4dHJhY3Qoc3RhdGUuZy5zb3VyY2UpKTsKKyAgfQorICByZXR1cm4gc3RhdGUuZy5kb2NibG9j
azsKK30KKworZXhwb3J0cy5jYXRjaHVwID0gY2F0Y2h1cDsKK2V4cG9ydHMuY2F0Y2h1cFdoaXRl
U3BhY2UgPSBjYXRjaHVwV2hpdGVTcGFjZTsKK2V4cG9ydHMuYXBwZW5kID0gYXBwZW5kOworZXhw
b3J0cy5tb3ZlID0gbW92ZTsKK2V4cG9ydHMudXBkYXRlSW5kZW50ID0gdXBkYXRlSW5kZW50Owor
ZXhwb3J0cy5pbmRlbnRCZWZvcmUgPSBpbmRlbnRCZWZvcmU7CitleHBvcnRzLnVwZGF0ZVN0YXRl
ID0gdXBkYXRlU3RhdGU7CitleHBvcnRzLmNyZWF0ZVN0YXRlID0gY3JlYXRlU3RhdGU7CitleHBv
cnRzLmdldERvY2Jsb2NrID0gZ2V0RG9jYmxvY2s7CisKK30pKCkKK30seyIuL2RvY2Jsb2NrIjox
Nn1dLDE5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKyhmdW5jdGlvbigpey8q
KgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRl
ciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlv
dSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGlj
ZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAq
IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVz
cyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29m
dHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9u
IGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP
RiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5z
ZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAq
IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisvKmdsb2JhbCBleHBvcnRzOnRy
dWUqLworInVzZSBzdHJpY3QiOworCisvKioKKyAqIERlc3VnYXJpemVyIGZvciBFUzYgbWluaW1h
bCBjbGFzcyBwcm9wb3NhbC4gU2VlCisgKiBodHRwOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1
LnBocD9pZD1oYXJtb255OnByb3Bvc2FscworICoKKyAqIERvZXMgbm90IHJlcXVpcmUgYW55IHJ1
bnRpbWUuIFByZXNlcnZlcyB3aGl0ZXNwYWNlIGFuZCBjb21tZW50cy4KKyAqIFN1cHBvcnRzIGEg
Y2xhc3MgZGVjbGFyYXRpb24gd2l0aCBtZXRob2RzLCBzdXBlciBjYWxscyBhbmQgaW5oZXJpdGFu
Y2UuCisgKiBDdXJyZW50bHkgZG9lcyBub3Qgc3VwcG9ydCBmb3IgZ2V0dGVycyBhbmQgc2V0dGVy
cywgc2luY2UgdGhlcmUncyBhIHZlcnkKKyAqIGxvdyBwcm9iYWJpbGl0eSB3ZSdyZSBnb2luZyB0
byB1c2UgdGhlbSBhbnl0aW1lIHNvb24uCisgKgorICogQWRkaXRpb25hbCBmZWF0dXJlczoKKyAq
IC0gQW55IG1lbWJlciB3aXRoIHByaXZhdGUgbmFtZSAodGhlIG5hbWUgd2l0aCBwcmVmaXggXywg
c3VjaCBfbmFtZSkgaW5zaWRlCisgKiAgIHRoZSBjbGFzcydzIHNjb3BlIHdpbGwgYmUgbXVuZ2Vk
LiBUaGlzIHdvdWxkIHdpbGwgdG8gZWxpbWluYXRlIHRoZSBjYXNlCisgKiAgIG9mIHN1Yi1jbGFz
cyBhY2NpZGVudGFsbHkgb3ZlcnJpZGluZyB0aGUgc3VwZXItY2xhc3MncyBwcm92YXRlIHByb3Bl
cnRpZXMKKyAqICAgYWxzbyBkaXNjb3VhZ2UgcGVvcGxlIGZyb20gYWNjZXNzaW5nIHByaXZhdGUg
bWVtYmVycyB0aGF0IHRoZXkgc2hvdWxkIG5vdAorICogICBhY2Nlc3MuIEhvd2V2ZXIsIHF1b3Rl
ZCBwcm9wZXJ0eSBuYW1lcyBkb24ndCBnZXQgbXVuZ2VkLgorICoKKyAqIGNsYXNzIFNraW5uZWRN
ZXNoIGV4dGVuZHMgcmVxdWlyZSgnVEhSRUUnKS5NZXNoIHsKKyAqCisgKiAgIHVwZGF0ZShjYW1l
cmEpIHsKKyAqICAgICBjYW1lcmEuY29kZSA9ICdpcGhvbmUnCisgKiAgICAgc3VwZXIudXBkYXRl
KGNhbWVyYSk7CisgKiAgIH0KKyAqCisgKiAgIC8KKyAqICAgICogQGNvbnN0cnVjdG9yCisgKiAg
ICAvCisgKiAgIGNvbnN0cnVjdG9yKGdlb21ldHJ5LCBtYXRlcmlhbHMpIHsKKyAqICAgICBzdXBl
cihnZW9tZXRyeSwgbWF0ZXJpYWxzKTsKKyAqCisgKiAgICAgc3VwZXIudXBkYXRlKDEpOworICoK
KyAqICAgICB0aGlzLmlkZW50aXR5TWF0cml4ID0gbmV3IFRIUkVFLk1hdHJpeDQoKTsKKyAqICAg
ICB0aGlzLmJvbmVzID0gW107CisgKiAgICAgdGhpcy5ib25lTWF0cmljZXMgPSBbXTsKKyAqICAg
ICB0aGlzLl9uYW1lID0gJ2Zvbyc7CisgKiAgIH0KKyAqCisgKiAgIC8KKyAqICAgICogc29tZSBv
dGhlciBjb2RlCisgKiAgICAvCisgKiAgIHJlYWRNb3JlKCkgeworICoKKyAqICAgfQorICoKKyAq
ICAgX2RvU29tZXRoaW5nKCkgeworICoKKyAqICAgfQorICogfQorICoKKyAqIHNob3VsZCBiZSBj
b252ZXJ0ZWQgdG8KKyAqCisgKiB2YXIgU2tpbm5lZE1lc2ggPSAoZnVuY3Rpb24oKSB7CisgKiAg
IHZhciBfX3N1cGVyID0gcmVxdWlyZSgncGFyZW50JykuTWVzaDsKKyAqCisgKiAgIC8KKyAqICAg
ICogQGNvbnN0cnVjdG9yCisgKiAgICAvCisgKiAgIGZ1bmN0aW9uIFNraW5uZWRNZXNoKGdlb21l
dHJ5LCBtYXRlcmlhbHMpIHsKKyAqICAgICBfX3N1cGVyLmNhbGwodGhpcywgZ2VvbWV0cnksIG1h
dGVyaWFscyk7CisgKgorICogICAgIF9fc3VwZXIucHJvdG90eXBlLnVwZGF0ZS5jYWxsKHRoaXMs
IDEpOworICoKKyAqICAgICB0aGlzLmlkZW50aXR5TWF0cml4ID0gbmV3IFRIUkVFLk1hdHJpeDQo
KTsKKyAqICAgICB0aGlzLmJvbmVzID0gW107CisgKiAgICAgdGhpcy5ib25lTWF0cmljZXMgPSBb
XTsKKyAqICAgICB0aGlzLiRTa2lubmVkTWVzaF9uYW1lID0gJ2Zvbyc7CisgKiAgIH0KKyAqICAg
U2tpbm5lZE1lc2gucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShfX3N1cGVyLnByb3RvdHlwZSk7
CisgKiAgIFNraW5uZWRNZXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNraW5uZWRNZXNoOwor
ICoKKyAqICAgLworICogICAgKiBAcGFyYW0gY2FtZXJhCisgKiAgICAvCisgKiAgIFNraW5uZWRN
ZXNoLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbihjYW1lcmEpIHsKKyAqICAgICBjYW1lcmEu
Y29kZSA9ICdpcGhvbmUnCisgKiAgICAgX19zdXBlci5wcm90b3R5cGUudXBkYXRlLmNhbGwodGhp
cywgY2FtZXJhKTsKKyAqICAgfTsKKyAqCisgKiAgIFNraW5uZWRNZXNoLnByb3RvdHlwZS5yZWFk
TW9yZSA9IGZ1bmN0aW9uKCkgeworICoKKyAqICAgfTsKKyAqCisgKiAgIFNraW5uZWRNZXNoLnBy
b3RvdHlwZS4kU2tpbm5lZE1lc2hfZG9Tb21ldGhpbmcgPSBmdW5jdGlvbigpIHsKKyAqCisgKiAg
IH07CisgKgorICogICByZXR1cm4gU2tpbm5lZE1lc2g7CisgKiB9KSgpOworICoKKyAqLwordmFy
IFN5bnRheCA9IHJlcXVpcmUoJ2VzcHJpbWEnKS5TeW50YXg7Cit2YXIgYmFzZTYyID0gcmVxdWly
ZSgnYmFzZTYyJyk7CisKK3ZhciBjYXRjaHVwID0gcmVxdWlyZSgnLi4vbGliL3V0aWxzJykuY2F0
Y2h1cDsKK3ZhciBhcHBlbmQgPSByZXF1aXJlKCcuLi9saWIvdXRpbHMnKS5hcHBlbmQ7Cit2YXIg
bW92ZSA9IHJlcXVpcmUoJy4uL2xpYi91dGlscycpLm1vdmU7Cit2YXIgaW5kZW50QmVmb3JlID0g
cmVxdWlyZSgnLi4vbGliL3V0aWxzJykuaW5kZW50QmVmb3JlOwordmFyIHVwZGF0ZUluZGVudCA9
IHJlcXVpcmUoJy4uL2xpYi91dGlscycpLnVwZGF0ZUluZGVudDsKK3ZhciB1cGRhdGVTdGF0ZSA9
IHJlcXVpcmUoJy4uL2xpYi91dGlscycpLnVwZGF0ZVN0YXRlOworCitmdW5jdGlvbiBmaW5kQ29u
c3RydWN0b3JJbmRleChvYmplY3QpIHsKKyAgdmFyIGNsYXNzRWxlbWVudHMgPSBvYmplY3QuYm9k
eSAmJiBvYmplY3QuYm9keS5ib2R5IHx8IFtdOworICBmb3IgKHZhciBpID0gMDsgaSA8IGNsYXNz
RWxlbWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICBpZiAoY2xhc3NFbGVtZW50c1tpXS50eXBlID09
PSBTeW50YXguTWV0aG9kRGVmaW5pdGlvbiAmJgorICAgICAgY2xhc3NFbGVtZW50c1tpXS5rZXku
bmFtZSA9PT0gJ2NvbnN0cnVjdG9yJykgeworICAgICAgcmV0dXJuIGk7CisgICAgfQorICB9Cisg
IHJldHVybiAtMTsKK30KKwordmFyIF9tdW5nZWRTeW1ib2xNYXBzID0ge307CitmdW5jdGlvbiBn
ZXRNdW5nZWROYW1lKHNjb3BlTmFtZSwgbmFtZSwgbWluaWZ5KSB7CisgIGlmIChtaW5pZnkpIHsK
KyAgICBpZiAoIV9tdW5nZWRTeW1ib2xNYXBzW3Njb3BlTmFtZV0pIHsKKyAgICAgIF9tdW5nZWRT
eW1ib2xNYXBzW3Njb3BlTmFtZV0gPSB7CisgICAgICAgIHN5bWJvbE1hcDoge30sCisgICAgICAg
IGlkZW50aWZpZXJVVUlEQ291bnRlcjogMAorICAgICAgfTsKKyAgICB9CisKKyAgICB2YXIgc3lt
Ym9sTWFwID0gX211bmdlZFN5bWJvbE1hcHNbc2NvcGVOYW1lXS5zeW1ib2xNYXA7CisgICAgaWYg
KCFzeW1ib2xNYXBbbmFtZV0pIHsKKyAgICAgIHN5bWJvbE1hcFtuYW1lXSA9CisgICAgICAgIGJh
c2U2Mi5lbmNvZGUoX211bmdlZFN5bWJvbE1hcHNbc2NvcGVOYW1lXS5pZGVudGlmaWVyVVVJRENv
dW50ZXIpOworICAgICAgX211bmdlZFN5bWJvbE1hcHNbc2NvcGVOYW1lXS5pZGVudGlmaWVyVVVJ
RENvdW50ZXIrKzsKKyAgICB9CisgICAgbmFtZSA9IHN5bWJvbE1hcFtuYW1lXTsKKyAgfQorICBy
ZXR1cm4gJyQnICsgc2NvcGVOYW1lICsgbmFtZTsKK30KKworZnVuY3Rpb24gc2hvdWxkTXVuZ2VO
YW1lKHNjb3BlTmFtZSwgbmFtZSwgc3RhdGUpIHsKKyAgLy8gb25seSBydW4gd2hlbiBAcHJldmVu
dE11bmdlIGlzIG5vdCBwcmVzZW50IGluIHRoZSBkb2NibG9jaworICBpZiAoc3RhdGUuZy5wcmV2
ZW50TXVuZ2UgPT09IHVuZGVmaW5lZCkgeworICAgIHZhciBkb2NibG9jayA9IHJlcXVpcmUoJy4u
L2xpYi9kb2NibG9jaycpOworICAgIHN0YXRlLmcucHJldmVudE11bmdlID0gZG9jYmxvY2sucGFy
c2VBc09iamVjdCgKKyAgICAgIGRvY2Jsb2NrLmV4dHJhY3Qoc3RhdGUuZy5zb3VyY2UpKS5wcmV2
ZW50TXVuZ2UgIT09IHVuZGVmaW5lZDsKKyAgfQorICAvLyBTdGFydHMgd2l0aCBvbmx5IGEgc2lu
Z2xlIHVuZGVyc2NvcmUgKGkuZS4gZG9uJ3QgY291bnQgZG91YmxlLXVuZGVyc2NvcmVzKQorICBy
ZXR1cm4gIXN0YXRlLmcucHJldmVudE11bmdlICYmIHNjb3BlTmFtZSA/IC9eXyg/IV8pLy50ZXN0
KG5hbWUpIDogZmFsc2U7Cit9CisKKworZnVuY3Rpb24gZ2V0UHJvdG9PZlByb3RvdHlwZVZhcmlh
YmxlTmFtZShzdXBlclZhcikgeworICByZXR1cm4gc3VwZXJWYXIgKyAnUHJvdG9PZlByb3RvdHlw
ZSc7Cit9CisKK2Z1bmN0aW9uIGdldFN1cGVyS2V5TmFtZShzdXBlclZhcikgeworICByZXR1cm4g
c3VwZXJWYXIgKyAnS2V5JzsKK30KKworZnVuY3Rpb24gZ2V0U3VwZXJQcm90b09mUHJvdG90eXBl
VmFyaWFibGUoc3VwZXJWYXJpYWJsZU5hbWUsIGluZGVudCkgeworICB2YXIgc3RyaW5nID0gKGlu
ZGVudCArCisgICAgJ3ZhciAkcHJvdG8gPSAkc3VwZXJOYW1lICYmICRzdXBlck5hbWUucHJvdG90
eXBlID8gJyArCisgICAgJyRzdXBlck5hbWUucHJvdG90eXBlIDogJHN1cGVyTmFtZTtcbicKKyAg
KS5yZXBsYWNlKC9cJHByb3RvL2csIGdldFByb3RvT2ZQcm90b3R5cGVWYXJpYWJsZU5hbWUoc3Vw
ZXJWYXJpYWJsZU5hbWUpKQorICAgLnJlcGxhY2UoL1wkc3VwZXJOYW1lL2csIHN1cGVyVmFyaWFi
bGVOYW1lKTsKKyAgIHJldHVybiBzdHJpbmc7Cit9CisKKworZnVuY3Rpb24gZ2V0SW5oZXJpdGFu
Y2VTZXR1cChzdXBlckNsYXNzVG9rZW4sIGNsYXNzTmFtZSwgaW5kZW50LCBzdXBlck5hbWUpIHsK
KyAgdmFyIHN0cmluZyA9ICcnOworICBpZiAoc3VwZXJDbGFzc1Rva2VuKSB7CisgICAgc3RyaW5n
ICs9IGdldFN0YXRpY01ldGhvZHNPbkNvbnN0cnVjdG9yU2V0dXAoY2xhc3NOYW1lLCBpbmRlbnQs
IHN1cGVyTmFtZSk7CisgICAgc3RyaW5nICs9IGdldFByb3RvdHlwZU9uQ29uc3RydWN0b3JTZXR1
cChjbGFzc05hbWUsIGluZGVudCwgc3VwZXJOYW1lKTsKKyAgICBzdHJpbmcgKz0gZ2V0Q29uc3Ry
dWN0b3JQcm9wZXJ0eVNldHVwKGNsYXNzTmFtZSwgaW5kZW50KTsKKyAgfQorICByZXR1cm4gc3Ry
aW5nOworfQorCitmdW5jdGlvbiBnZXRTdGF0aWNNZXRob2RzT25Db25zdHJ1Y3RvclNldHVwKGNs
YXNzTmFtZSwgaW5kZW50LCBzdXBlck5hbWUpIHsKKyAgdmFyIHN0cmluZyA9ICggaW5kZW50ICsK
KyAgICAnZm9yICh2YXIgJGtleU5hbWUgaW4gJHN1cGVyTmFtZSkge1xuJyArIGluZGVudCArCisg
ICAgJyAgaWYgKCRzdXBlck5hbWUuaGFzT3duUHJvcGVydHkoJGtleU5hbWUpKSB7XG4nICsgaW5k
ZW50ICsKKyAgICAnICAgICRjbGFzc05hbWVbJGtleU5hbWVdID0gJHN1cGVyTmFtZVska2V5TmFt
ZV07XG4nICsgaW5kZW50ICsKKyAgICAnICB9XG4nICsgaW5kZW50ICsKKyAgICAnfVxuJykKKyAg
ICAucmVwbGFjZSgvXCRjbGFzc05hbWUvZywgY2xhc3NOYW1lKQorICAgIC5yZXBsYWNlKC9cJGtl
eU5hbWUvZywgZ2V0U3VwZXJLZXlOYW1lKHN1cGVyTmFtZSkpCisgICAgLnJlcGxhY2UoL1wkc3Vw
ZXJOYW1lL2csIHN1cGVyTmFtZSk7CisgIHJldHVybiBzdHJpbmc7Cit9CisKK2Z1bmN0aW9uIGdl
dFByb3RvdHlwZU9uQ29uc3RydWN0b3JTZXR1cChjbGFzc05hbWUsIGluZGVudCwgc3VwZXJOYW1l
KSB7CisgIHZhciBzdHJpbmcgPSAoIGluZGVudCArCisgICAgJyRjbGFzc05hbWUucHJvdG90eXBl
ID0gT2JqZWN0LmNyZWF0ZSgkcHJvdG9Qcm90b3R5cGUpO1xuJykKKyAgICAucmVwbGFjZSgvXCRw
cm90b1Byb3RvdHlwZS9nLCBnZXRQcm90b09mUHJvdG90eXBlVmFyaWFibGVOYW1lKHN1cGVyTmFt
ZSkpCisgICAgLnJlcGxhY2UoL1wkY2xhc3NOYW1lL2csIGNsYXNzTmFtZSk7CisgIHJldHVybiBz
dHJpbmc7Cit9CisKK2Z1bmN0aW9uIGdldENvbnN0cnVjdG9yUHJvcGVydHlTZXR1cChjbGFzc05h
bWUsIGluZGVudCkgeworICB2YXIgc3RyaW5nID0gKCBpbmRlbnQgKworICAgICckY2xhc3NOYW1l
LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9ICRjbGFzc05hbWU7XG4nKQorICAgIC5yZXBsYWNlKC9c
JGNsYXNzTmFtZS9nLCBjbGFzc05hbWUpOworCisgIHJldHVybiBzdHJpbmc7Cit9CisKK2Z1bmN0
aW9uIGdldFN1cGVyQ29uc3RydWN0b3JTZXR1cChzdXBlckNsYXNzVG9rZW4sIGluZGVudCwgc3Vw
ZXJOYW1lKSB7CisgIGlmICghc3VwZXJDbGFzc1Rva2VuKSByZXR1cm4gJyc7CisgIHZhciBzdHJp
bmcgPSAoICdcbicgKyBpbmRlbnQgKworICAgICcgIGlmICgkc3VwZXJOYW1lICYmICRzdXBlck5h
bWUucHJvdG90eXBlKSB7XG4nICsgaW5kZW50ICsKKyAgICAnICAgICRzdXBlck5hbWUuYXBwbHko
dGhpcywgYXJndW1lbnRzKTtcbicgKyBpbmRlbnQgKworICAgICcgIH1cbicgKyBpbmRlbnQpCisg
ICAgLnJlcGxhY2UoL1wkc3VwZXJOYW1lL2csIHN1cGVyTmFtZSk7CisgIHJldHVybiBzdHJpbmc7
Cit9CisKK2Z1bmN0aW9uIGdldE1lbWJlckZ1bmN0aW9uQ2FsbChzdXBlclZhciwgcHJvcGVydHlO
YW1lLCBzdXBlckFyZ3MpIHsKKyAgdmFyIHN0cmluZyA9ICgKKyAgICAnJHN1cGVyUHJvdG90eXBl
LiRwcm9wZXJ0eU5hbWUuY2FsbCgkc3VwZXJBcmd1bWVudHMpJykKKyAgLnJlcGxhY2UoL1wkc3Vw
ZXJQcm90b3R5cGUvZywgZ2V0UHJvdG9PZlByb3RvdHlwZVZhcmlhYmxlTmFtZShzdXBlclZhcikp
CisgIC5yZXBsYWNlKC9cJHByb3BlcnR5TmFtZS9nLCBwcm9wZXJ0eU5hbWUpCisgIC5yZXBsYWNl
KC9cJHN1cGVyQXJndW1lbnRzL2csIHN1cGVyQXJncyk7CisgIHJldHVybiBzdHJpbmc7Cit9CisK
K2Z1bmN0aW9uIGdldENhbGxQYXJhbXMoY2xhc3NFbGVtZW50LCBzdGF0ZSkgeworICB2YXIgcGFy
YW1zID0gY2xhc3NFbGVtZW50LnZhbHVlLnBhcmFtczsKKyAgaWYgKCFwYXJhbXMubGVuZ3RoKSB7
CisgICAgcmV0dXJuICcnOworICB9CisgIHJldHVybiBzdGF0ZS5nLnNvdXJjZS5zdWJzdHJpbmco
CisgICAgcGFyYW1zWzBdLnJhbmdlWzBdLAorICAgIHBhcmFtc1twYXJhbXMubGVuZ3RoIC0gMV0u
cmFuZ2VbMV0pOworfQorCitmdW5jdGlvbiBnZXRTdXBlckFyZ3VtZW50cyhjYWxsRXhwcmVzc2lv
biwgc3RhdGUpIHsKKyAgdmFyIGFyZ3MgPSBjYWxsRXhwcmVzc2lvbi5hcmd1bWVudHM7CisgIGlm
ICghYXJncy5sZW5ndGgpIHsKKyAgICByZXR1cm4gJ3RoaXMnOworICB9CisgIHJldHVybiAndGhp
cywgJyArIHN0YXRlLmcuc291cmNlLnN1YnN0cmluZygKKyAgICBhcmdzWzBdLnJhbmdlWzBdLAor
ICAgIGFyZ3NbYXJncy5sZW5ndGggLSAxXS5yYW5nZVsxXSk7Cit9CisKKy8vIFRoZSBzZWVkIGlz
IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIG5hbWUgZm9yIGFuIGFub255bW91cyBjbGFzcywKKy8vIGFu
ZCB0aGlzIHNlZWQgc2hvdWxkIGJlIHVuaXF1ZSBwZXIgYnJvd3NlcidzIHNlc3Npb24uCisvLyBU
aGUgdmFsdWUgb2YgdGhlIHNlZWQgbG9va3MgbGlrZSB0aGlzOiAxMjI5NTg4NTA1LjI5NjkwMTIu
Cit2YXIgY2xhc3NJRFNlZWQgPSBEYXRlLm5vdygpICUgKDYwICogNjAgKiAxMDAwKSArIE1hdGgu
cmFuZG9tKCk7CisKKy8qKgorICogR2VuZXJhdGVzIGEgbmFtZSBmb3IgYW4gYW5vbnltb3VzIGNs
YXNzLiBUaGUgZ2VuZXJhdGVkIHZhbHVlIGxvb2tzIGxpa2UKKyAqIHRoaXM6ICJDbGFzc2tjNnBj
bl9tbml6YTF5dmkiCisgKiBAcGFyYW0ge1N0cmluZ30gc2NvcGVOYW1lCisgKiBAcmV0dXJuIHtz
dHJpbmd9IHRoZSBzY29wZSBuYW1lIGZvciBBbm9ueW1vdXMgQ2xhc3MKKyAqLworZnVuY3Rpb24g
Z2VuZXJhdGVBbm9ueW1vdXNDbGFzc05hbWUoc2NvcGVOYW1lKSB7CisgIGNsYXNzSURTZWVkKys7
CisgIHJldHVybiAnQ2xhc3MnICsKKyAgICAoY2xhc3NJRFNlZWQpLnRvU3RyaW5nKDM2KS5yZXBs
YWNlKCcuJywgJ18nKSArCisgICAgKHNjb3BlTmFtZSB8fCAnJyk7Cit9CisKK2Z1bmN0aW9uIHJl
bmRlck1ldGhvZHModHJhdmVyc2UsIG9iamVjdCwgbmFtZSwgcGF0aCwgc3RhdGUpIHsKKyAgdmFy
IGNsYXNzRWxlbWVudHMgPSBvYmplY3QuYm9keSAmJiBvYmplY3QuYm9keS5ib2R5IHx8IFtdOwor
CisgIG1vdmUob2JqZWN0LmJvZHkucmFuZ2VbMF0gKyAxLCBzdGF0ZSk7CisgIGZvciAodmFyIGkg
PSAwOyBpIDwgY2xhc3NFbGVtZW50cy5sZW5ndGg7IGkrKykgeworICAgIGlmIChjbGFzc0VsZW1l
bnRzW2ldLmtleS5uYW1lICE9PSAnY29uc3RydWN0b3InKSB7CisgICAgICBjYXRjaHVwKGNsYXNz
RWxlbWVudHNbaV0ucmFuZ2VbMF0sIHN0YXRlKTsKKworICAgICAgdmFyIG1lbWJlck5hbWUgPSBj
bGFzc0VsZW1lbnRzW2ldLmtleS5uYW1lOworICAgICAgaWYgKHNob3VsZE11bmdlTmFtZShzdGF0
ZS5zY29wZU5hbWUsIG1lbWJlck5hbWUsIHN0YXRlKSkgeworICAgICAgICBtZW1iZXJOYW1lID0g
Z2V0TXVuZ2VkTmFtZSgKKyAgICAgICAgICBzdGF0ZS5zY29wZU5hbWUsCisgICAgICAgICAgbWVt
YmVyTmFtZSwKKyAgICAgICAgICBzdGF0ZS5nLm9wdHMubWluaWZ5CisgICAgICAgICk7CisgICAg
ICB9CisKKyAgICAgIHZhciBwcm90b3R5cGVPclN0YXRpYzsKKyAgICAgIGlmIChjbGFzc0VsZW1l
bnRzW2ldWydzdGF0aWMnXSkgeworICAgICAgICBwcm90b3R5cGVPclN0YXRpYyA9ICcnOworICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgcHJvdG90eXBlT3JTdGF0aWMgPSAncHJvdG90eXBlLic7Cisg
ICAgICB9CisKKyAgICAgIGFwcGVuZChuYW1lICsgJy4nICsgcHJvdG90eXBlT3JTdGF0aWMgKyBt
ZW1iZXJOYW1lICsgJyA9ICcsIHN0YXRlKTsKKyAgICAgIHJlbmRlck1ldGhvZCh0cmF2ZXJzZSwg
Y2xhc3NFbGVtZW50c1tpXSwgbnVsbCwgcGF0aCwgc3RhdGUpOworICAgICAgYXBwZW5kKCc7Jywg
c3RhdGUpOworICAgIH0KKyAgICBtb3ZlKGNsYXNzRWxlbWVudHNbaV0ucmFuZ2VbMV0sIHN0YXRl
KTsKKyAgfQorICBpZiAoY2xhc3NFbGVtZW50cy5sZW5ndGgpIHsKKyAgICBhcHBlbmQoJ1xuJywg
c3RhdGUpOworICB9CisgIG1vdmUob2JqZWN0LnJhbmdlWzFdLCBzdGF0ZSk7Cit9CisKK2Z1bmN0
aW9uIHJlbmRlck1ldGhvZCh0cmF2ZXJzZSwgbWV0aG9kLCBuYW1lLCBwYXRoLCBzdGF0ZSkgewor
ICBhcHBlbmQobmFtZSA/ICdmdW5jdGlvbiAnICsgbmFtZSArICcoJyA6ICdmdW5jdGlvbignLCBz
dGF0ZSk7CisgIGFwcGVuZChnZXRDYWxsUGFyYW1zKG1ldGhvZCwgc3RhdGUpICsgJykgeycsIHN0
YXRlKTsKKyAgbW92ZShtZXRob2QudmFsdWUuYm9keS5yYW5nZVswXSArIDEsIHN0YXRlKTsKKyAg
dHJhdmVyc2UobWV0aG9kLnZhbHVlLmJvZHksIHBhdGgsIHN0YXRlKTsKKyAgY2F0Y2h1cChtZXRo
b2QudmFsdWUuYm9keS5yYW5nZVsxXSAtIDEsIHN0YXRlKTsKKyAgYXBwZW5kKCd9Jywgc3RhdGUp
OworfQorCitmdW5jdGlvbiByZW5kZXJTdXBlckNsYXNzKHRyYXZlcnNlLCBzdXBlckNsYXNzLCBw
YXRoLCBzdGF0ZSkgeworICBhcHBlbmQoJ3ZhciAnICsgc3RhdGUuc3VwZXJWYXIgKyAnID0gJywg
c3RhdGUpOworICBtb3ZlKHN1cGVyQ2xhc3MucmFuZ2VbMF0sIHN0YXRlKTsKKyAgdHJhdmVyc2Uo
c3VwZXJDbGFzcywgcGF0aCwgc3RhdGUpOworICBjYXRjaHVwKHN1cGVyQ2xhc3MucmFuZ2VbMV0s
IHN0YXRlKTsKKyAgYXBwZW5kKCc7XG4nLCBzdGF0ZSk7Cit9CisKK2Z1bmN0aW9uIHJlbmRlckNv
bnN0cnVjdG9yKHRyYXZlcnNlLCBvYmplY3QsIG5hbWUsIGluZGVudCwgcGF0aCwgc3RhdGUpIHsK
KyAgdmFyIGNsYXNzRWxlbWVudHMgPSBvYmplY3QuYm9keSAmJiBvYmplY3QuYm9keS5ib2R5IHx8
IFtdOworICB2YXIgY29uc3RydWN0b3JJbmRleCA9IGZpbmRDb25zdHJ1Y3RvckluZGV4KG9iamVj
dCk7CisgIHZhciBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9ySW5kZXggPT09IC0xID8KKyAgICBu
dWxsIDoKKyAgICBjbGFzc0VsZW1lbnRzW2NvbnN0cnVjdG9ySW5kZXhdOworICBpZiAoY29uc3Ry
dWN0b3IpIHsKKyAgICBtb3ZlKGNvbnN0cnVjdG9ySW5kZXggPT09IDAgPworICAgICAgb2JqZWN0
LmJvZHkucmFuZ2VbMF0gKyAxIDoKKyAgICAgIGNsYXNzRWxlbWVudHNbY29uc3RydWN0b3JJbmRl
eCAtIDFdLnJhbmdlWzFdLCBzdGF0ZSk7CisgICAgY2F0Y2h1cChjb25zdHJ1Y3Rvci5yYW5nZVsw
XSwgc3RhdGUpOworICAgIHJlbmRlck1ldGhvZCh0cmF2ZXJzZSwgY29uc3RydWN0b3IsIG5hbWUs
IHBhdGgsIHN0YXRlKTsKKyAgICBhcHBlbmQoJ1xuJywgc3RhdGUpOworICB9IGVsc2UgeworICAg
IGlmIChvYmplY3Quc3VwZXJDbGFzcykgeworICAgICAgYXBwZW5kKCdcbicgKyBpbmRlbnQsIHN0
YXRlKTsKKyAgICB9CisgICAgYXBwZW5kKCdmdW5jdGlvbiAnLCBzdGF0ZSk7CisgICAgaWYgKG9i
amVjdC5pZCkgeworICAgICAgbW92ZShvYmplY3QuaWQucmFuZ2VbMF0sIHN0YXRlKTsKKyAgICB9
CisgICAgYXBwZW5kKG5hbWUsIHN0YXRlKTsKKyAgICBpZiAob2JqZWN0LmlkKSB7CisgICAgICBt
b3ZlKG9iamVjdC5pZC5yYW5nZVsxXSwgc3RhdGUpOworICAgIH0KKyAgICBhcHBlbmQoJygpeyAn
LCBzdGF0ZSk7CisgICAgaWYgKG9iamVjdC5ib2R5KSB7CisgICAgICBtb3ZlKG9iamVjdC5ib2R5
LnJhbmdlWzBdLCBzdGF0ZSk7CisgICAgfQorICAgIGFwcGVuZChnZXRTdXBlckNvbnN0cnVjdG9y
U2V0dXAoCisgICAgICBvYmplY3Quc3VwZXJDbGFzcywKKyAgICAgIGluZGVudCwKKyAgICAgIHN0
YXRlLnN1cGVyVmFyKSwgc3RhdGUpOworICAgIGFwcGVuZCgnfVxuJywgc3RhdGUpOworICB9Cit9
CisKK3ZhciBzdXBlcklkID0gMDsKK2Z1bmN0aW9uIHJlbmRlckNsYXNzQm9keSh0cmF2ZXJzZSwg
b2JqZWN0LCBwYXRoLCBzdGF0ZSkgeworICB2YXIgbmFtZSA9IG9iamVjdC5pZCA/IG9iamVjdC5p
ZC5uYW1lIDogJ2NvbnN0cnVjdG9yJzsKKyAgdmFyIHN1cGVyQ2xhc3MgPSBvYmplY3Quc3VwZXJD
bGFzczsKKyAgdmFyIGluZGVudCA9IHVwZGF0ZUluZGVudCgKKyAgICBpbmRlbnRCZWZvcmUob2Jq
ZWN0LnJhbmdlWzBdLCBzdGF0ZSkgKyAnICAnLAorICAgIHN0YXRlKTsKKworICBzdGF0ZSA9IHVw
ZGF0ZVN0YXRlKAorICAgIHN0YXRlLAorICAgIHsKKyAgICAgIHNjb3BlTmFtZTogb2JqZWN0Lmlk
ID8gb2JqZWN0LmlkLm5hbWUgOgorICAgICAgICBnZW5lcmF0ZUFub255bW91c0NsYXNzTmFtZShz
dGF0ZS5zY29wZU5hbWUpLAorICAgICAgc3VwZXJWYXI6IHN1cGVyQ2xhc3MgPyAnX19zdXBlcicg
KyBzdXBlcklkKysgOiAnJworICAgIH0pOworCisgIC8vIHN1cGVyIGNsYXNzCisgIGlmIChzdXBl
ckNsYXNzKSB7CisgICAgYXBwZW5kKGluZGVudCwgc3RhdGUpOworICAgIHJlbmRlclN1cGVyQ2xh
c3ModHJhdmVyc2UsIHN1cGVyQ2xhc3MsIHBhdGgsIHN0YXRlKTsKKyAgICBhcHBlbmQoZ2V0U3Vw
ZXJQcm90b09mUHJvdG90eXBlVmFyaWFibGUoc3RhdGUuc3VwZXJWYXIsIGluZGVudCksIHN0YXRl
KTsKKyAgfQorCisgIHJlbmRlckNvbnN0cnVjdG9yKHRyYXZlcnNlLCBvYmplY3QsIG5hbWUsIGlu
ZGVudCwgcGF0aCwgc3RhdGUpOworICBhcHBlbmQoZ2V0SW5oZXJpdGFuY2VTZXR1cChzdXBlckNs
YXNzLCBuYW1lLCBpbmRlbnQsIHN0YXRlLnN1cGVyVmFyKSwgc3RhdGUpOworICByZW5kZXJNZXRo
b2RzKHRyYXZlcnNlLCBvYmplY3QsIG5hbWUsIHBhdGgsIHN0YXRlKTsKK30KKworCisvKioKKyAq
IEBwdWJsaWMKKyAqLworZnVuY3Rpb24gdmlzaXRDbGFzc0V4cHJlc3Npb24odHJhdmVyc2UsIG9i
amVjdCwgcGF0aCwgc3RhdGUpIHsKKyAgdmFyIGluZGVudCA9IHVwZGF0ZUluZGVudCgKKyAgICBp
bmRlbnRCZWZvcmUob2JqZWN0LnJhbmdlWzBdLCBzdGF0ZSkgKyAnICAnLAorICAgIHN0YXRlKTsK
KyAgdmFyIG5hbWUgPSBvYmplY3QuaWQgPyBvYmplY3QuaWQubmFtZSA6ICdjb25zdHJ1Y3Rvcic7
CisKKyAgYXBwZW5kKCcoZnVuY3Rpb24oKSB7XG4nLCBzdGF0ZSk7CisgIHJlbmRlckNsYXNzQm9k
eSh0cmF2ZXJzZSwgb2JqZWN0LCBwYXRoLCBzdGF0ZSk7CisgIGFwcGVuZChpbmRlbnQgKyAncmV0
dXJuICcgKyBuYW1lICsgJztcbicsIHN0YXRlKTsKKyAgYXBwZW5kKGluZGVudC5zdWJzdHJpbmco
MCwgaW5kZW50Lmxlbmd0aCAtIDIpICsgJ30pKCknLCBzdGF0ZSk7CisgIHJldHVybiBmYWxzZQor
fQorCit2aXNpdENsYXNzRXhwcmVzc2lvbi50ZXN0ID0gZnVuY3Rpb24ob2JqZWN0LCBwYXRoLCBz
dGF0ZSkgeworICByZXR1cm4gb2JqZWN0LnR5cGUgPT09IFN5bnRheC5DbGFzc0V4cHJlc3Npb247
Cit9OworCisvKioKKyAqIEBwdWJsaWMKKyAqLworZnVuY3Rpb24gdmlzaXRDbGFzc0RlY2xhcmF0
aW9uKHRyYXZlcnNlLCBvYmplY3QsIHBhdGgsIHN0YXRlKSB7CisgIHN0YXRlLmcuaW5kZW50Qnkt
LTsKKyAgcmVuZGVyQ2xhc3NCb2R5KHRyYXZlcnNlLCBvYmplY3QsIHBhdGgsIHN0YXRlKTsKKyAg
c3RhdGUuZy5pbmRlbnRCeSsrOworICByZXR1cm4gZmFsc2U7Cit9CisKK3Zpc2l0Q2xhc3NEZWNs
YXJhdGlvbi50ZXN0ID0gZnVuY3Rpb24ob2JqZWN0LCBwYXRoLCBzdGF0ZSkgeworICByZXR1cm4g
b2JqZWN0LnR5cGUgPT09IFN5bnRheC5DbGFzc0RlY2xhcmF0aW9uOworfTsKKworCisvKioKKyAq
IEBwdWJsaWMKKyAqLworZnVuY3Rpb24gdmlzaXRTdXBlckNhbGwodHJhdmVyc2UsIG9iamVjdCwg
cGF0aCwgc3RhdGUpIHsKKyAgaWYgKHBhdGhbMF0udHlwZSA9PT0gU3ludGF4LkNhbGxFeHByZXNz
aW9uKSB7CisgICAgYXBwZW5kKHN0YXRlLnN1cGVyVmFyICsKKyAgICAgICcuY2FsbCgnICsgZ2V0
U3VwZXJBcmd1bWVudHMocGF0aFswXSwgc3RhdGUpICsgJyknLCBzdGF0ZSk7CisgICAgbW92ZShw
YXRoWzBdLnJhbmdlWzFdLCBzdGF0ZSk7CisgIH0gZWxzZSBpZiAocGF0aFswXS50eXBlID09PSBT
eW50YXguTWVtYmVyRXhwcmVzc2lvbikgeworICAgIGFwcGVuZChnZXRNZW1iZXJGdW5jdGlvbkNh
bGwoCisgICAgICBzdGF0ZS5zdXBlclZhciwKKyAgICAgIHBhdGhbMF0ucHJvcGVydHkubmFtZSwK
KyAgICAgIGdldFN1cGVyQXJndW1lbnRzKHBhdGhbMV0sIHN0YXRlKSksIHN0YXRlKTsKKyAgICBt
b3ZlKHBhdGhbMV0ucmFuZ2VbMV0sIHN0YXRlKTsKKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisK
K3Zpc2l0U3VwZXJDYWxsLnRlc3QgPSBmdW5jdGlvbihvYmplY3QsIHBhdGgsIHN0YXRlKSB7Cisg
IHJldHVybiBzdGF0ZS5zdXBlclZhciAmJiBvYmplY3QudHlwZSA9PT0gU3ludGF4LklkZW50aWZp
ZXIgJiYKKyAgICBvYmplY3QubmFtZSA9PT0gJ3N1cGVyJzsKK307CisKKy8qKgorICogQHB1Ymxp
YworICovCitmdW5jdGlvbiB2aXNpdFByaXZhdGVQcm9wZXJ0eSh0cmF2ZXJzZSwgb2JqZWN0LCBw
YXRoLCBzdGF0ZSkgeworICB2YXIgdHlwZSA9IHBhdGhbMF0gPyBwYXRoWzBdLnR5cGUgOiBudWxs
OworICBpZiAodHlwZSAhPT0gU3ludGF4LlByb3BlcnR5KSB7CisgICAgaWYgKHR5cGUgPT09IFN5
bnRheC5NZW1iZXJFeHByZXNzaW9uKSB7CisgICAgICB0eXBlID0gcGF0aFswXS5vYmplY3QgPyBw
YXRoWzBdLm9iamVjdC50eXBlIDogbnVsbDsKKyAgICAgIGlmICh0eXBlID09PSBTeW50YXguSWRl
bnRpZmllciAmJgorICAgICAgICBwYXRoWzBdLm9iamVjdC5yYW5nZVswXSA9PT0gb2JqZWN0LnJh
bmdlWzBdKSB7CisgICAgICAgIC8vIElkZW50aWZpZXIgaXMgYSB2YXJpYWJsZSB0aGF0IGFwcGVh
cnMgInByaXZhdGUiLgorICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgIC8vIE90aGVyIHN5bnRheCB0aGF0IGFyZSBuZWl0aGVyIFByb3BlcnR5IG5vciBNZW1iZXJF
eHByZXNzaW9uLgorICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorCisgIHZhciBvbGROYW1lID0g
b2JqZWN0Lm5hbWU7CisgIHZhciBuZXdOYW1lID0gZ2V0TXVuZ2VkTmFtZSgKKyAgICBzdGF0ZS5z
Y29wZU5hbWUsCisgICAgb2xkTmFtZSwKKyAgICBzdGF0ZS5nLm9wdHMubWluaWZ5CisgICk7Cisg
IGFwcGVuZChuZXdOYW1lLCBzdGF0ZSk7CisgIG1vdmUob2JqZWN0LnJhbmdlWzFdLCBzdGF0ZSk7
Cit9CisKK3Zpc2l0UHJpdmF0ZVByb3BlcnR5LnRlc3QgPSBmdW5jdGlvbihvYmplY3QsIHBhdGgs
IHN0YXRlKSB7CisgIHJldHVybiBvYmplY3QudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIgJiYK
KyAgICBzaG91bGRNdW5nZU5hbWUoc3RhdGUuc2NvcGVOYW1lLCBvYmplY3QubmFtZSwgc3RhdGUp
OworfTsKKworCitleHBvcnRzLnZpc2l0Q2xhc3NEZWNsYXJhdGlvbiA9IHZpc2l0Q2xhc3NEZWNs
YXJhdGlvbjsKK2V4cG9ydHMudmlzaXRDbGFzc0V4cHJlc3Npb24gPSB2aXNpdENsYXNzRXhwcmVz
c2lvbjsKK2V4cG9ydHMudmlzaXRTdXBlckNhbGwgPSB2aXNpdFN1cGVyQ2FsbDsKK2V4cG9ydHMu
dmlzaXRQcml2YXRlUHJvcGVydHkgPSB2aXNpdFByaXZhdGVQcm9wZXJ0eTsKKworfSkoKQorfSx7
Ii4uL2xpYi9kb2NibG9jayI6MTYsIi4uL2xpYi91dGlscyI6MTgsImJhc2U2MiI6MSwiZXNwcmlt
YSI6NH1dLDIwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKyhmdW5jdGlvbigp
ey8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1
bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAq
IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUg
TGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoK
KyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVu
bGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywg
c29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVk
IG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9O
UyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGlj
ZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQK
KyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisvKmdsb2JhbCBleHBvcnRz
OnRydWUqLworInVzZSBzdHJpY3QiOworCit2YXIgU3ludGF4ID0gcmVxdWlyZSgnZXNwcmltYScp
LlN5bnRheDsKKwordmFyIGNhdGNodXAgPSByZXF1aXJlKCcuLi9saWIvdXRpbHMnKS5jYXRjaHVw
OwordmFyIGFwcGVuZCA9IHJlcXVpcmUoJy4uL2xpYi91dGlscycpLmFwcGVuZDsKK3ZhciBtb3Zl
ID0gcmVxdWlyZSgnLi4vbGliL3V0aWxzJykubW92ZTsKK3ZhciBnZXREb2NibG9jayA9IHJlcXVp
cmUoJy4uL2xpYi91dGlscycpLmdldERvY2Jsb2NrOworCit2YXIgRkFMTEJBQ0tfVEFHUyA9IHJl
cXVpcmUoJy4veGpzJykua25vd25UYWdzOwordmFyIHJlbmRlclhKU0V4cHJlc3Npb25Db250YWlu
ZXIgPQorICByZXF1aXJlKCcuL3hqcycpLnJlbmRlclhKU0V4cHJlc3Npb25Db250YWluZXI7Cit2
YXIgcmVuZGVyWEpTTGl0ZXJhbCA9IHJlcXVpcmUoJy4veGpzJykucmVuZGVyWEpTTGl0ZXJhbDsK
K3ZhciBxdW90ZUF0dHJOYW1lID0gcmVxdWlyZSgnLi94anMnKS5xdW90ZUF0dHJOYW1lOworCisv
KioKKyAqIEN1c3RvbWl6ZWQgZGVzdWdhciBwcm9jZXNzb3IuCisgKgorICogQ3VycmVudGx5OiAo
U29tZXdoYXQgdGFpbG9yZWQgdG8gUmVhY3QpCisgKiA8WD4gPC9YPiA9PiBYKG51bGwsIG51bGwp
CisgKiA8WCBwcm9wPSIxIiAvPiA9PiBYKHtwcm9wOiAnMSd9LCBudWxsKQorICogPFggcHJvcD0i
MiI+PFkgLz48L1g+ID0+IFgoe3Byb3A6JzInfSwgWShudWxsLCBudWxsKSkKKyAqIDxYIHByb3A9
IjIiPjxZIC8+PFogLz48L1g+ID0+IFgoe3Byb3A6JzInfSwgW1kobnVsbCwgbnVsbCksIFoobnVs
bCwgbnVsbCldKQorICoKKyAqIEV4Y2VwdGlvbnMgdG8gdGhlIHNpbXBsZSBydWxlcyBhYm92ZToK
KyAqIGlmIGEgcHJvcGVydHkgaXMgbmFtZWQgImNsYXNzIiBpdCB3aWxsIGJlIGNoYW5nZWQgdG8g
ImNsYXNzTmFtZSIgaW4gdGhlCisgKiBqYXZhc2NyaXB0IHNpbmNlICJjbGFzcyIgaXMgbm90IGEg
dmFsaWQgb2JqZWN0IGtleSBpbiBqYXZhc2NyaXB0LgorICovCisKK3ZhciBKU1hfQVRUUklCVVRF
X1JFTkFNRVMgPSB7CisgICdjbGFzcyc6ICdjbGFzc05hbWUnLAorICBjeE5hbWU6ICdjbGFzc05h
bWUnCit9OworCit2YXIgSlNYX0FUVFJJQlVURV9UUkFOU0ZPUk1TID0geworICBjeE5hbWU6IGZ1
bmN0aW9uKGF0dHIpIHsKKyAgICBpZiAoYXR0ci52YWx1ZS50eXBlICE9PSBTeW50YXguTGl0ZXJh
bCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJjeCBvbmx5IGFjY2VwdHMgYSBzdHJpbmcgbGl0
ZXJhbCIpOworICAgIH0gZWxzZSB7CisgICAgICB2YXIgY2xhc3NOYW1lcyA9IGF0dHIudmFsdWUu
dmFsdWUuc3BsaXQoL1xzKy9nKTsKKyAgICAgIHJldHVybiAnY3goJyArIGNsYXNzTmFtZXMubWFw
KEpTT04uc3RyaW5naWZ5KS5qb2luKCcsJykgKyAnKSc7CisgICAgfQorICB9Cit9OworCitmdW5j
dGlvbiB2aXNpdFJlYWN0VGFnKHRyYXZlcnNlLCBvYmplY3QsIHBhdGgsIHN0YXRlKSB7CisgIHZh
ciBqc3hPYmpJZGVudCA9IGdldERvY2Jsb2NrKHN0YXRlKS5qc3g7CisKKyAgY2F0Y2h1cChvYmpl
Y3Qub3BlbmluZ0VsZW1lbnQucmFuZ2VbMF0sIHN0YXRlKTsKKworICBpZiAob2JqZWN0Lm5hbWUu
bmFtZXNwYWNlKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKAorICAgICAgICdOYW1lc3BhY2UgdGFn
cyBhcmUgbm90IHN1cHBvcnRlZC4gUmVhY3RKU1ggaXMgbm90IFhNTC4nKTsKKyAgfQorCisgIHZh
ciBpc0ZhbGxiYWNrVGFnID0gRkFMTEJBQ0tfVEFHU1tvYmplY3QubmFtZS5uYW1lXTsKKyAgYXBw
ZW5kKAorICAgIChpc0ZhbGxiYWNrVGFnID8ganN4T2JqSWRlbnQgKyAnLicgOiAnJykgKyAob2Jq
ZWN0Lm5hbWUubmFtZSkgKyAnKCcsCisgICAgc3RhdGUKKyAgKTsKKworICBtb3ZlKG9iamVjdC5u
YW1lLnJhbmdlWzFdLCBzdGF0ZSk7CisKKyAgdmFyIGNoaWxkcmVuVG9SZW5kZXIgPSBvYmplY3Qu
Y2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGNoaWxkKSB7CisgICAgcmV0dXJuICEoY2hpbGQudHlw
ZSA9PT0gU3ludGF4LkxpdGVyYWwgJiYgIWNoaWxkLnZhbHVlLm1hdGNoKC9cUy8pKTsKKyAgfSk7
CisKKyAgLy8gaWYgd2UgZG9uJ3QgaGF2ZSBhbnkgYXR0cmlidXRlcywgcGFzcyBpbiBudWxsCisg
IGlmIChvYmplY3QuYXR0cmlidXRlcy5sZW5ndGggPT09IDApIHsKKyAgICBhcHBlbmQoJ251bGwn
LCBzdGF0ZSk7CisgIH0KKworICAvLyB3cml0ZSBhdHRyaWJ1dGVzCisgIG9iamVjdC5hdHRyaWJ1
dGVzLmZvckVhY2goZnVuY3Rpb24oYXR0ciwgaW5kZXgpIHsKKyAgICBjYXRjaHVwKGF0dHIucmFu
Z2VbMF0sIHN0YXRlKTsKKyAgICBpZiAoYXR0ci5uYW1lLm5hbWVzcGFjZSkgeworICAgICAgdGhy
b3cgbmV3IEVycm9yKAorICAgICAgICAgJ05hbWVzcGFjZSBhdHRyaWJ1dGVzIGFyZSBub3Qgc3Vw
cG9ydGVkLiBSZWFjdEpTWCBpcyBub3QgWE1MLicpOworICAgIH0KKyAgICB2YXIgbmFtZSA9IEpT
WF9BVFRSSUJVVEVfUkVOQU1FU1thdHRyLm5hbWUubmFtZV0gfHwgYXR0ci5uYW1lLm5hbWU7Cisg
ICAgdmFyIGlzRmlyc3QgPSBpbmRleCA9PT0gMDsKKyAgICB2YXIgaXNMYXN0ID0gaW5kZXggPT09
IG9iamVjdC5hdHRyaWJ1dGVzLmxlbmd0aCAtIDE7CisKKyAgICBpZiAoaXNGaXJzdCkgeworICAg
ICAgYXBwZW5kKCd7Jywgc3RhdGUpOworICAgIH0KKworICAgIGFwcGVuZChxdW90ZUF0dHJOYW1l
KG5hbWUpLCBzdGF0ZSk7CisgICAgYXBwZW5kKCc6Jywgc3RhdGUpOworCisgICAgaWYgKCFhdHRy
LnZhbHVlKSB7CisgICAgICBzdGF0ZS5nLmJ1ZmZlciArPSAndHJ1ZSc7CisgICAgICBzdGF0ZS5n
LnBvc2l0aW9uID0gYXR0ci5uYW1lLnJhbmdlWzFdOworICAgICAgaWYgKCFpc0xhc3QpIHsKKyAg
ICAgICAgYXBwZW5kKCcsJywgc3RhdGUpOworICAgICAgfQorICAgIH0gZWxzZSBpZiAoSlNYX0FU
VFJJQlVURV9UUkFOU0ZPUk1TW2F0dHIubmFtZS5uYW1lXSkgeworICAgICAgbW92ZShhdHRyLnZh
bHVlLnJhbmdlWzBdLCBzdGF0ZSk7CisgICAgICBhcHBlbmQoSlNYX0FUVFJJQlVURV9UUkFOU0ZP
Uk1TW2F0dHIubmFtZS5uYW1lXShhdHRyKSwgc3RhdGUpOworICAgICAgbW92ZShhdHRyLnZhbHVl
LnJhbmdlWzFdLCBzdGF0ZSk7CisgICAgICBpZiAoIWlzTGFzdCkgeworICAgICAgICBhcHBlbmQo
JywnLCBzdGF0ZSk7CisgICAgICB9CisgICAgfSBlbHNlIGlmIChhdHRyLnZhbHVlLnR5cGUgPT09
IFN5bnRheC5MaXRlcmFsKSB7CisgICAgICBtb3ZlKGF0dHIudmFsdWUucmFuZ2VbMF0sIHN0YXRl
KTsKKyAgICAgIHJlbmRlclhKU0xpdGVyYWwoYXR0ci52YWx1ZSwgaXNMYXN0LCBzdGF0ZSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgIG1vdmUoYXR0ci52YWx1ZS5yYW5nZVswXSwgc3RhdGUpOworICAg
ICAgcmVuZGVyWEpTRXhwcmVzc2lvbkNvbnRhaW5lcih0cmF2ZXJzZSwgYXR0ci52YWx1ZSwgaXNM
YXN0LCBwYXRoLCBzdGF0ZSk7CisgICAgfQorCisgICAgaWYgKGlzTGFzdCkgeworICAgICAgYXBw
ZW5kKCd9Jywgc3RhdGUpOworICAgIH0KKworICAgIGNhdGNodXAoYXR0ci5yYW5nZVsxXSwgc3Rh
dGUpOworICB9KTsKKworICBpZiAoIW9iamVjdC5zZWxmQ2xvc2luZykgeworICAgIGNhdGNodXAo
b2JqZWN0Lm9wZW5pbmdFbGVtZW50LnJhbmdlWzFdIC0gMSwgc3RhdGUpOworICAgIG1vdmUob2Jq
ZWN0Lm9wZW5pbmdFbGVtZW50LnJhbmdlWzFdLCBzdGF0ZSk7CisgIH0KKworICAvLyBmaWx0ZXIg
b3V0IHdoaXRlc3BhY2UKKyAgaWYgKGNoaWxkcmVuVG9SZW5kZXIubGVuZ3RoID4gMCkgeworICAg
IGFwcGVuZCgnLCAnLCBzdGF0ZSk7CisKKyAgICBvYmplY3QuY2hpbGRyZW4uZm9yRWFjaChmdW5j
dGlvbihjaGlsZCkgeworICAgICAgaWYgKGNoaWxkLnR5cGUgPT09IFN5bnRheC5MaXRlcmFsICYm
ICFjaGlsZC52YWx1ZS5tYXRjaCgvXFMvKSkgeworICAgICAgICByZXR1cm47CisgICAgICB9Cisg
ICAgICBjYXRjaHVwKGNoaWxkLnJhbmdlWzBdLCBzdGF0ZSk7CisKKyAgICAgIHZhciBpc0xhc3Qg
PSBjaGlsZCA9PT0gY2hpbGRyZW5Ub1JlbmRlcltjaGlsZHJlblRvUmVuZGVyLmxlbmd0aCAtIDFd
OworCisgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gU3ludGF4LkxpdGVyYWwpIHsKKyAgICAgICAg
cmVuZGVyWEpTTGl0ZXJhbChjaGlsZCwgaXNMYXN0LCBzdGF0ZSk7CisgICAgICB9IGVsc2UgaWYg
KGNoaWxkLnR5cGUgPT09IFN5bnRheC5YSlNFeHByZXNzaW9uQ29udGFpbmVyKSB7CisgICAgICAg
IHJlbmRlclhKU0V4cHJlc3Npb25Db250YWluZXIodHJhdmVyc2UsIGNoaWxkLCBpc0xhc3QsIHBh
dGgsIHN0YXRlKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRyYXZlcnNlKGNoaWxkLCBwYXRo
LCBzdGF0ZSk7CisgICAgICAgIGlmICghaXNMYXN0KSB7CisgICAgICAgICAgYXBwZW5kKCcsJywg
c3RhdGUpOworICAgICAgICAgIHN0YXRlLmcuYnVmZmVyID0gc3RhdGUuZy5idWZmZXIucmVwbGFj
ZSgvKFxzKiksJC8sICcsJDEnKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBjYXRjaHVw
KGNoaWxkLnJhbmdlWzFdLCBzdGF0ZSk7CisgICAgfSk7CisgIH0KKworICBpZiAob2JqZWN0LnNl
bGZDbG9zaW5nKSB7CisgICAgLy8gZXZlcnl0aGluZyB1cCB0byAvPgorICAgIGNhdGNodXAob2Jq
ZWN0Lm9wZW5pbmdFbGVtZW50LnJhbmdlWzFdIC0gMiwgc3RhdGUpOworICAgIG1vdmUob2JqZWN0
Lm9wZW5pbmdFbGVtZW50LnJhbmdlWzFdLCBzdGF0ZSk7CisgIH0gZWxzZSB7CisgICAgLy8gZXZl
cnl0aGluZyB1cCB0byA8LyBzZGZsa3NqZmQ+CisgICAgY2F0Y2h1cChvYmplY3QuY2xvc2luZ0Vs
ZW1lbnQucmFuZ2VbMF0sIHN0YXRlKTsKKyAgICBtb3ZlKG9iamVjdC5jbG9zaW5nRWxlbWVudC5y
YW5nZVsxXSwgc3RhdGUpOworICB9CisKKyAgYXBwZW5kKCcpJywgc3RhdGUpOworICByZXR1cm4g
ZmFsc2U7Cit9CisKK3Zpc2l0UmVhY3RUYWcudGVzdCA9IGZ1bmN0aW9uKG9iamVjdCwgcGF0aCwg
c3RhdGUpIHsKKyAgLy8gb25seSBydW4gcmVhY3Qgd2hlbiByZWFjdCBAanN4IG5hbWVzcGFjZSBp
cyBzcGVjaWZpZWQgaW4gZG9jYmxvY2sKKyAgdmFyIGpzeCA9IGdldERvY2Jsb2NrKHN0YXRlKS5q
c3g7CisgIHJldHVybiBvYmplY3QudHlwZSA9PT0gU3ludGF4LlhKU0VsZW1lbnQgJiYganN4ICYm
IGpzeC5sZW5ndGg7Cit9OworCitleHBvcnRzLnZpc2l0UmVhY3RUYWcgPSB2aXNpdFJlYWN0VGFn
OworCit9KSgpCit9LHsiLi4vbGliL3V0aWxzIjoxOCwiLi94anMiOjIyLCJlc3ByaW1hIjo0fV0s
MjE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworKGZ1bmN0aW9uKCl7LyoqCisg
KiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRo
ZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1h
eSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNl
LgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0
cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJl
cXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2Fy
ZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4g
IkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFO
WSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZv
ciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGlt
aXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKy8qZ2xvYmFsIGV4cG9ydHM6dHJ1ZSov
CisidXNlIHN0cmljdCI7CisKK3ZhciBTeW50YXggPSByZXF1aXJlKCdlc3ByaW1hJykuU3ludGF4
OwordmFyIGNhdGNodXAgPSByZXF1aXJlKCcuLi9saWIvdXRpbHMnKS5jYXRjaHVwOwordmFyIGFw
cGVuZCA9IHJlcXVpcmUoJy4uL2xpYi91dGlscycpLmFwcGVuZDsKK3ZhciBnZXREb2NibG9jayA9
IHJlcXVpcmUoJy4uL2xpYi91dGlscycpLmdldERvY2Jsb2NrOworCisvKioKKyAqIFRyYW5zZm9y
bXMgdGhlIGZvbGxvd2luZzoKKyAqCisgKiB2YXIgTXlDb21wb25lbnQgPSBSZWFjdC5jcmVhdGVD
bGFzcyh7CisgKiAgICByZW5kZXI6IC4uLgorICogfSk7CisgKgorICogaW50bzoKKyAqCisgKiB2
YXIgTXlDb21wb25lbnQgPSBSZWFjdC5jcmVhdGVDbGFzcyh7CisgKiAgICBkaXNwbGF5TmFtZTog
J015Q29tcG9uZW50JywKKyAqICAgIHJlbmRlcjogLi4uCisgKiB9KTsKKyAqLworZnVuY3Rpb24g
dmlzaXRSZWFjdERpc3BsYXlOYW1lKHRyYXZlcnNlLCBvYmplY3QsIHBhdGgsIHN0YXRlKSB7Cisg
IGlmIChvYmplY3QuaWQudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIgJiYKKyAgICAgIG9iamVj
dC5pbml0ICYmCisgICAgICBvYmplY3QuaW5pdC50eXBlID09PSBTeW50YXguQ2FsbEV4cHJlc3Np
b24gJiYKKyAgICAgIG9iamVjdC5pbml0LmNhbGxlZS50eXBlID09PSBTeW50YXguTWVtYmVyRXhw
cmVzc2lvbiAmJgorICAgICAgb2JqZWN0LmluaXQuY2FsbGVlLm9iamVjdC50eXBlID09PSBTeW50
YXguSWRlbnRpZmllciAmJgorICAgICAgb2JqZWN0LmluaXQuY2FsbGVlLm9iamVjdC5uYW1lID09
PSAnUmVhY3QnICYmCisgICAgICBvYmplY3QuaW5pdC5jYWxsZWUucHJvcGVydHkudHlwZSA9PT0g
U3ludGF4LklkZW50aWZpZXIgJiYKKyAgICAgIG9iamVjdC5pbml0LmNhbGxlZS5wcm9wZXJ0eS5u
YW1lID09PSAnY3JlYXRlQ2xhc3MnICYmCisgICAgICBvYmplY3QuaW5pdFsnYXJndW1lbnRzJ10u
bGVuZ3RoID09PSAxICYmCisgICAgICBvYmplY3QuaW5pdFsnYXJndW1lbnRzJ11bMF0udHlwZSA9
PT0gU3ludGF4Lk9iamVjdEV4cHJlc3Npb24pIHsKKworICAgIHZhciBkaXNwbGF5TmFtZSA9IG9i
amVjdC5pZC5uYW1lOworICAgIGNhdGNodXAob2JqZWN0LmluaXRbJ2FyZ3VtZW50cyddWzBdLnJh
bmdlWzBdICsgMSwgc3RhdGUpOworICAgIGFwcGVuZCgiZGlzcGxheU5hbWU6ICciICsgZGlzcGxh
eU5hbWUgKyAiJywiLCBzdGF0ZSk7CisgIH0KK30KKworLyoqCisgKiBXaWxsIG9ubHkgcnVuIG9u
IEBqc3ggZmlsZXMgZm9yIG5vdy4KKyAqLwordmlzaXRSZWFjdERpc3BsYXlOYW1lLnRlc3QgPSBm
dW5jdGlvbihvYmplY3QsIHBhdGgsIHN0YXRlKSB7CisgIHJldHVybiBvYmplY3QudHlwZSA9PT0g
U3ludGF4LlZhcmlhYmxlRGVjbGFyYXRvciAmJiAhIWdldERvY2Jsb2NrKHN0YXRlKS5qc3g7Cit9
OworCitleHBvcnRzLnZpc2l0UmVhY3REaXNwbGF5TmFtZSA9IHZpc2l0UmVhY3REaXNwbGF5TmFt
ZTsKKworfSkoKQorfSx7Ii4uL2xpYi91dGlscyI6MTgsImVzcHJpbWEiOjR9XSwyMjpbZnVuY3Rp
b24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisoZnVuY3Rpb24oKXsvKioKKyAqIENvcHlyaWdo
dCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBM
aWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2Ug
dGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3Ug
bWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFw
YWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkg
YXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0
cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJB
U0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVp
dGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVj
aWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1
bmRlciB0aGUgTGljZW5zZS4KKyAqLworLypnbG9iYWwgZXhwb3J0czp0cnVlKi8KKyJ1c2Ugc3Ry
aWN0IjsKK3ZhciBhcHBlbmQgPSByZXF1aXJlKCcuLi9saWIvdXRpbHMnKS5hcHBlbmQ7Cit2YXIg
Y2F0Y2h1cCA9IHJlcXVpcmUoJy4uL2xpYi91dGlscycpLmNhdGNodXA7Cit2YXIgbW92ZSA9IHJl
cXVpcmUoJy4uL2xpYi91dGlscycpLm1vdmU7Cit2YXIgU3ludGF4ID0gcmVxdWlyZSgnZXNwcmlt
YScpLlN5bnRheDsKKwordmFyIGtub3duVGFncyA9IHsKKyAgYTogdHJ1ZSwKKyAgYWJicjogdHJ1
ZSwKKyAgYWRkcmVzczogdHJ1ZSwKKyAgYXBwbGV0OiB0cnVlLAorICBhcmVhOiB0cnVlLAorICBh
cnRpY2xlOiB0cnVlLAorICBhc2lkZTogdHJ1ZSwKKyAgYXVkaW86IHRydWUsCisgIGI6IHRydWUs
CisgIGJhc2U6IHRydWUsCisgIGJkaTogdHJ1ZSwKKyAgYmRvOiB0cnVlLAorICBiaWc6IHRydWUs
CisgIGJsb2NrcXVvdGU6IHRydWUsCisgIGJvZHk6IHRydWUsCisgIGJyOiB0cnVlLAorICBidXR0
b246IHRydWUsCisgIGNhbnZhczogdHJ1ZSwKKyAgY2FwdGlvbjogdHJ1ZSwKKyAgY2lyY2xlOiB0
cnVlLAorICBjaXRlOiB0cnVlLAorICBjb2RlOiB0cnVlLAorICBjb2w6IHRydWUsCisgIGNvbGdy
b3VwOiB0cnVlLAorICBjb21tYW5kOiB0cnVlLAorICBkYXRhOiB0cnVlLAorICBkYXRhbGlzdDog
dHJ1ZSwKKyAgZGQ6IHRydWUsCisgIGRlbDogdHJ1ZSwKKyAgZGV0YWlsczogdHJ1ZSwKKyAgZGZu
OiB0cnVlLAorICBkaWFsb2c6IHRydWUsCisgIGRpdjogdHJ1ZSwKKyAgZGw6IHRydWUsCisgIGR0
OiB0cnVlLAorICBlbGxpcHNlOiB0cnVlLAorICBlbTogdHJ1ZSwKKyAgZW1iZWQ6IHRydWUsCisg
IGZpZWxkc2V0OiB0cnVlLAorICBmaWdjYXB0aW9uOiB0cnVlLAorICBmaWd1cmU6IHRydWUsCisg
IGZvb3RlcjogdHJ1ZSwKKyAgZm9ybTogdHJ1ZSwKKyAgZzogdHJ1ZSwKKyAgaDE6IHRydWUsCisg
IGgyOiB0cnVlLAorICBoMzogdHJ1ZSwKKyAgaDQ6IHRydWUsCisgIGg1OiB0cnVlLAorICBoNjog
dHJ1ZSwKKyAgaGVhZDogdHJ1ZSwKKyAgaGVhZGVyOiB0cnVlLAorICBoZ3JvdXA6IHRydWUsCisg
IGhyOiB0cnVlLAorICBodG1sOiB0cnVlLAorICBpOiB0cnVlLAorICBpZnJhbWU6IHRydWUsCisg
IGltZzogdHJ1ZSwKKyAgaW5wdXQ6IHRydWUsCisgIGluczogdHJ1ZSwKKyAga2JkOiB0cnVlLAor
ICBrZXlnZW46IHRydWUsCisgIGxhYmVsOiB0cnVlLAorICBsZWdlbmQ6IHRydWUsCisgIGxpOiB0
cnVlLAorICBsaW5lOiB0cnVlLAorICBsaW5rOiB0cnVlLAorICBtYWluOiB0cnVlLAorICBtYXA6
IHRydWUsCisgIG1hcms6IHRydWUsCisgIG1hcnF1ZWU6IHRydWUsCisgIG1lbnU6IHRydWUsCisg
IG1lbnVpdGVtOiB0cnVlLAorICBtZXRhOiB0cnVlLAorICBtZXRlcjogdHJ1ZSwKKyAgbmF2OiB0
cnVlLAorICBub3NjcmlwdDogdHJ1ZSwKKyAgb2JqZWN0OiB0cnVlLAorICBvbDogdHJ1ZSwKKyAg
b3B0Z3JvdXA6IHRydWUsCisgIG9wdGlvbjogdHJ1ZSwKKyAgb3V0cHV0OiB0cnVlLAorICBwOiB0
cnVlLAorICBwYXJhbTogdHJ1ZSwKKyAgcGF0aDogdHJ1ZSwKKyAgcG9seWxpbmU6IHRydWUsCisg
IHByZTogdHJ1ZSwKKyAgcHJvZ3Jlc3M6IHRydWUsCisgIHE6IHRydWUsCisgIHJlY3Q6IHRydWUs
CisgIHJwOiB0cnVlLAorICBydDogdHJ1ZSwKKyAgcnVieTogdHJ1ZSwKKyAgczogdHJ1ZSwKKyAg
c2FtcDogdHJ1ZSwKKyAgc2NyaXB0OiB0cnVlLAorICBzZWN0aW9uOiB0cnVlLAorICBzZWxlY3Q6
IHRydWUsCisgIHNtYWxsOiB0cnVlLAorICBzb3VyY2U6IHRydWUsCisgIHNwYW46IHRydWUsCisg
IHN0cm9uZzogdHJ1ZSwKKyAgc3R5bGU6IHRydWUsCisgIHN1YjogdHJ1ZSwKKyAgc3VtbWFyeTog
dHJ1ZSwKKyAgc3VwOiB0cnVlLAorICBzdmc6IHRydWUsCisgIHRhYmxlOiB0cnVlLAorICB0Ym9k
eTogdHJ1ZSwKKyAgdGQ6IHRydWUsCisgIHRleHQ6IHRydWUsCisgIHRleHRhcmVhOiB0cnVlLAor
ICB0Zm9vdDogdHJ1ZSwKKyAgdGg6IHRydWUsCisgIHRoZWFkOiB0cnVlLAorICB0aW1lOiB0cnVl
LAorICB0aXRsZTogdHJ1ZSwKKyAgdHI6IHRydWUsCisgIHRyYWNrOiB0cnVlLAorICB1OiB0cnVl
LAorICB1bDogdHJ1ZSwKKyAgJ3Zhcic6IHRydWUsCisgIHZpZGVvOiB0cnVlLAorICB3YnI6IHRy
dWUKK307CisKK2Z1bmN0aW9uIHNhZmVUcmltKHN0cmluZykgeworICByZXR1cm4gc3RyaW5nLnJl
cGxhY2UoL15bIFx0XSsvLCAnJykucmVwbGFjZSgvWyBcdF0rJC8sICcnKTsKK30KKworLy8gUmVw
bGFjZSBhbGwgdHJhaWxpbmcgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHdpdGggYSBzaW5nbGUgc3Bh
Y2UgY2hhcmFjdGVyCitmdW5jdGlvbiB0cmltV2l0aFNpbmdsZVNwYWNlKHN0cmluZykgeworICBy
ZXR1cm4gc3RyaW5nLnJlcGxhY2UoL15bIFx0XHhBMF17Mix9LywgJyAnKS4KKyAgICByZXBsYWNl
KC9bIFx0XHhBMF17Mix9JC8sICcgJykucmVwbGFjZSgvXlxzKyQvLCAnJyk7Cit9CisKKy8qKgor
ICogU3BlY2lhbCBoYW5kbGluZyBmb3IgbXVsdGlsaW5lIHN0cmluZyBsaXRlcmFscworICogcHJp
bnQgbGluZXM6CisgKgorICogICBsaW5lCisgKiAgIGxpbmUKKyAqCisgKiBhczoKKyAqCisgKiAg
ICJsaW5lICIrCisgKiAgICJsaW5lIgorICovCitmdW5jdGlvbiByZW5kZXJYSlNMaXRlcmFsKG9i
amVjdCwgaXNMYXN0LCBzdGF0ZSwgc3RhcnQsIGVuZCkgeworICAvKiogQWRkZWQgYmxhbmsgY2hl
Y2sgZmlsdGVyaW5nIGFuZCB0cmltaW5nKi8KKyAgdmFyIHRyaW1tZWRDaGlsZFZhbHVlID0gc2Fm
ZVRyaW0ob2JqZWN0LnZhbHVlKTsKKworICBpZiAodHJpbW1lZENoaWxkVmFsdWUpIHsKKyAgICAv
LyBoZWFkIHdoaXRlc3BhY2UKKyAgICBhcHBlbmQob2JqZWN0LnZhbHVlLm1hdGNoKC9eW1x0IF0q
LylbMF0sIHN0YXRlKTsKKyAgICBpZiAoc3RhcnQpIHsKKyAgICAgIGFwcGVuZChzdGFydCwgc3Rh
dGUpOworICAgIH0KKworICAgIHZhciB0cmltbWVkQ2hpbGRWYWx1ZVdpdGhTcGFjZSA9IHRyaW1X
aXRoU2luZ2xlU3BhY2Uob2JqZWN0LnZhbHVlKTsKKworICAgIC8qKgorICAgICAqLworICAgIHZh
ciBpbml0aWFsTGluZXMgPSB0cmltbWVkQ2hpbGRWYWx1ZS5zcGxpdCgvXHJcbnxcbnxcci8pOwor
CisgICAgdmFyIGxpbmVzID0gaW5pdGlhbExpbmVzLmZpbHRlcihmdW5jdGlvbihsaW5lKSB7Cisg
ICAgICByZXR1cm4gc2FmZVRyaW0obGluZSkubGVuZ3RoID4gMDsKKyAgICB9KTsKKworICAgIHZh
ciBoYXNJbml0aWFsTmV3TGluZSA9IGluaXRpYWxMaW5lc1swXSAhPT0gbGluZXNbMF07CisgICAg
dmFyIGhhc0ZpbmFsTmV3TGluZSA9CisgICAgICBpbml0aWFsTGluZXNbaW5pdGlhbExpbmVzLmxl
bmd0aCAtIDFdICE9PSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXTsKKworICAgIHZhciBudW1MaW5l
cyA9IGxpbmVzLmxlbmd0aDsKKyAgICBsaW5lcy5mb3JFYWNoKGZ1bmN0aW9uIChsaW5lLCBpaSkg
eworICAgICAgdmFyIGxhc3RMaW5lID0gaWkgPT09IG51bUxpbmVzIC0gMTsKKyAgICAgIHZhciB0
cmltbWVkTGluZSA9IHNhZmVUcmltKGxpbmUpOworICAgICAgaWYgKHRyaW1tZWRMaW5lID09PSAn
JyAmJiAhbGFzdExpbmUpIHsKKyAgICAgICAgYXBwZW5kKGxpbmUsIHN0YXRlKTsKKyAgICAgIH0g
ZWxzZSB7CisgICAgICAgIHZhciBwcmVTdHJpbmcgPSAnJzsKKyAgICAgICAgdmFyIHBvc3RTdHJp
bmcgPSAnJzsKKyAgICAgICAgdmFyIGxlYWRpbmcgPSAnJzsKKworICAgICAgICBpZiAoaWkgPT09
IDApIHsKKyAgICAgICAgICBpZiAoaGFzSW5pdGlhbE5ld0xpbmUpIHsKKyAgICAgICAgICAgIHBy
ZVN0cmluZyA9ICcgJzsKKyAgICAgICAgICAgIGxlYWRpbmcgPSAnXG4nOworICAgICAgICAgIH0K
KyAgICAgICAgICBpZiAodHJpbW1lZENoaWxkVmFsdWVXaXRoU3BhY2Uuc3Vic3RyaW5nKDAsIDEp
ID09PSAnICcpIHsKKyAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGZpcnN0IGxpbmUsIGFu
ZCB0aGUgb3JpZ2luYWwgY29udGVudCBzdGFydHMgd2l0aAorICAgICAgICAgICAgLy8gd2hpdGVz
cGFjZSwgcGxhY2UgYSBzaW5nbGUgc3BhY2UgYXQgdGhlIGJlZ2lubmluZy4KKyAgICAgICAgICAg
IHByZVN0cmluZyA9ICcgJzsKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgbGVhZGluZyA9IGxpbmUubWF0Y2goL15bIFx0XSovKVswXTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoIWxhc3RMaW5lIHx8IHRyaW1tZWRDaGlsZFZhbHVlV2l0aFNwYWNlLnN1YnN0cigKKyAg
ICAgICAgICAgICB0cmltbWVkQ2hpbGRWYWx1ZVdpdGhTcGFjZS5sZW5ndGggLSAxLCAxKSA9PT0g
JyAnIHx8CisgICAgICAgICAgICAgaGFzRmluYWxOZXdMaW5lCisgICAgICAgICAgICAgKSB7Cisg
ICAgICAgICAgLy8gSWYgZWl0aGVyIG5vdCBvbiB0aGUgbGFzdCBsaW5lLCBvciB0aGUgb3JpZ2lu
YWwgY29udGVudCBlbmRzIHdpdGgKKyAgICAgICAgICAvLyB3aGl0ZXNwYWNlLCBwbGFjZSBhIHNp
bmdsZSBjaGFyYWN0ZXIgYXQgdGhlIGVuZC4KKyAgICAgICAgICBwb3N0U3RyaW5nID0gJyAnOwor
ICAgICAgICB9CisKKyAgICAgICAgYXBwZW5kKAorICAgICAgICAgIGxlYWRpbmcgKworICAgICAg
ICAgIEpTT04uc3RyaW5naWZ5KAorICAgICAgICAgICAgcHJlU3RyaW5nICsgdHJpbW1lZExpbmUg
KyBwb3N0U3RyaW5nCisgICAgICAgICAgKSArCisgICAgICAgICAgKGxhc3RMaW5lID8gJycgOiAn
KycpICsKKyAgICAgICAgICBsaW5lLm1hdGNoKC9bIFx0XSokLylbMF0sCisgICAgICAgICAgc3Rh
dGUpOworICAgICAgfQorICAgICAgaWYgKCFsYXN0TGluZSkgeworICAgICAgICBhcHBlbmQoJ1xu
Jywgc3RhdGUpOworICAgICAgfQorICAgIH0pOworICB9IGVsc2UgeworICAgIGlmIChzdGFydCkg
eworICAgICAgYXBwZW5kKHN0YXJ0LCBzdGF0ZSk7CisgICAgfQorICAgIGFwcGVuZCgnIiInLCBz
dGF0ZSk7CisgIH0KKyAgaWYgKGVuZCkgeworICAgIGFwcGVuZChlbmQsIHN0YXRlKTsKKyAgfQor
CisgIC8vIGFkZCBjb21tYSBiZWZvcmUgdHJhaWxpbmcgd2hpdGVzcGFjZQorICBpZiAoIWlzTGFz
dCkgeworICAgIGFwcGVuZCgnLCcsIHN0YXRlKTsKKyAgfQorCisgIC8vIHRhaWwgd2hpdGVzcGFj
ZQorICBhcHBlbmQob2JqZWN0LnZhbHVlLm1hdGNoKC9bIFx0XSokLylbMF0sIHN0YXRlKTsKKyAg
bW92ZShvYmplY3QucmFuZ2VbMV0sIHN0YXRlKTsKK30KKworZnVuY3Rpb24gcmVuZGVyWEpTRXhw
cmVzc2lvbkNvbnRhaW5lcih0cmF2ZXJzZSwgb2JqZWN0LCBpc0xhc3QsIHBhdGgsIHN0YXRlKSB7
CisgIC8vIFBsdXMgMSB0byBza2lwIGB7YC4KKyAgbW92ZShvYmplY3QucmFuZ2VbMF0gKyAxLCBz
dGF0ZSk7CisgIHRyYXZlcnNlKG9iamVjdC5leHByZXNzaW9uLCBwYXRoLCBzdGF0ZSk7CisgIGlm
ICghaXNMYXN0ICYmIG9iamVjdC5leHByZXNzaW9uLnR5cGUgIT09IFN5bnRheC5YSlNFbXB0eUV4
cHJlc3Npb24pIHsKKyAgICAvLyBJZiB3ZSBuZWVkIHRvIGFwcGVuZCBhIGNvbW1hLCBtYWtlIHN1
cmUgdG8gZG8gc28gYWZ0ZXIgdGhlIGV4cHJlc3Npb24uCisgICAgY2F0Y2h1cChvYmplY3QuZXhw
cmVzc2lvbi5yYW5nZVsxXSwgc3RhdGUpOworICAgIGFwcGVuZCgnLCcsIHN0YXRlKTsKKyAgfQor
CisgIC8vIE1pbnVzIDEgdG8gc2tpcCBgfWAuCisgIGNhdGNodXAob2JqZWN0LnJhbmdlWzFdIC0g
MSwgc3RhdGUpOworICBtb3ZlKG9iamVjdC5yYW5nZVsxXSwgc3RhdGUpOworICByZXR1cm4gZmFs
c2U7Cit9CisKK2Z1bmN0aW9uIHF1b3RlQXR0ck5hbWUoYXR0cikgeworICAvLyBRdW90ZSBpbnZh
bGlkIEpTIGlkZW50aWZpZXJzLgorICBpZiAoIS9eW2Etel8kXVthLXpcZF8kXSokL2kudGVzdChh
dHRyKSkgeworICAgIHJldHVybiAiJyIgKyBhdHRyICsgIiciOworICB9CisgIHJldHVybiBhdHRy
OworfQorCitleHBvcnRzLmtub3duVGFncyA9IGtub3duVGFnczsKK2V4cG9ydHMucmVuZGVyWEpT
RXhwcmVzc2lvbkNvbnRhaW5lciA9IHJlbmRlclhKU0V4cHJlc3Npb25Db250YWluZXI7CitleHBv
cnRzLnJlbmRlclhKU0xpdGVyYWwgPSByZW5kZXJYSlNMaXRlcmFsOworZXhwb3J0cy5xdW90ZUF0
dHJOYW1lID0gcXVvdGVBdHRyTmFtZTsKKworfSkoKQorfSx7Ii4uL2xpYi91dGlscyI6MTgsImVz
cHJpbWEiOjR9XSwyMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisoZnVuY3Rp
b24oKXsvKmdsb2JhbCBleHBvcnRzOnRydWUqLwordmFyIGNsYXNzZXMgPSByZXF1aXJlKCcuL3Ry
YW5zZm9ybXMvY2xhc3NlcycpOwordmFyIHJlYWN0ID0gcmVxdWlyZSgnLi90cmFuc2Zvcm1zL3Jl
YWN0Jyk7Cit2YXIgcmVhY3REaXNwbGF5TmFtZSA9IHJlcXVpcmUoJy4vdHJhbnNmb3Jtcy9yZWFj
dERpc3BsYXlOYW1lJyk7CisKKy8qKgorICogTWFwIGZyb20gdHJhbnNmb3JtTmFtZSA9PiBvcmRl
cmVkTGlzdE9mVmlzaXRvcnMuCisgKi8KK3ZhciB0cmFuc2Zvcm1WaXNpdG9ycyA9IHsKKyAgJ2Vz
Ni1jbGFzc2VzJzogWworICAgIGNsYXNzZXMudmlzaXRDbGFzc0V4cHJlc3Npb24sCisgICAgY2xh
c3Nlcy52aXNpdENsYXNzRGVjbGFyYXRpb24sCisgICAgY2xhc3Nlcy52aXNpdFN1cGVyQ2FsbCwK
KyAgICBjbGFzc2VzLnZpc2l0UHJpdmF0ZVByb3BlcnR5CisgIF0KK307CisKK3RyYW5zZm9ybVZp
c2l0b3JzLnJlYWN0ID0gdHJhbnNmb3JtVmlzaXRvcnNbCisgICJlczYtY2xhc3NlcyIKK10uY29u
Y2F0KFsKKyAgcmVhY3QudmlzaXRSZWFjdFRhZywKKyAgcmVhY3REaXNwbGF5TmFtZS52aXNpdFJl
YWN0RGlzcGxheU5hbWUKK10pOworCisvKioKKyAqIFNwZWNpZmllcyB0aGUgb3JkZXIgaW4gd2hp
Y2ggZWFjaCB0cmFuc2Zvcm0gc2hvdWxkIHJ1bi4KKyAqLwordmFyIHRyYW5zZm9ybVJ1bk9yZGVy
ID0gWworICAnZXM2LWNsYXNzZXMnLAorICAncmVhY3QnCitdOworCisvKioKKyAqIEdpdmVuIGEg
bGlzdCBvZiB0cmFuc2Zvcm0gbmFtZXMsIHJldHVybiB0aGUgb3JkZXJlZCBsaXN0IG9mIHZpc2l0
b3JzIHRvIGJlCisgKiBwYXNzZWQgdG8gdGhlIHRyYW5zZm9ybSgpIGZ1bmN0aW9uLgorICoKKyAq
IEBwYXJhbSB7YXJyYXk/fSBleGNsdWRlcworICogQHJldHVybiB7YXJyYXl9CisgKi8KK2Z1bmN0
aW9uIGdldFZpc2l0b3JzTGlzdChleGNsdWRlcykgeworICB2YXIgcmV0ID0gW107CisgIGZvciAo
dmFyIGkgPSAwLCBpbCA9IHRyYW5zZm9ybVJ1bk9yZGVyLmxlbmd0aDsgaSA8IGlsOyBpKyspIHsK
KyAgICBpZiAoIWV4Y2x1ZGVzIHx8IGV4Y2x1ZGVzLmluZGV4T2YodHJhbnNmb3JtUnVuT3JkZXJb
aV0pID09PSAtMSkgeworICAgICAgcmV0ID0gcmV0LmNvbmNhdCh0cmFuc2Zvcm1WaXNpdG9yc1t0
cmFuc2Zvcm1SdW5PcmRlcltpXV0pOworICAgIH0KKyAgfQorICByZXR1cm4gcmV0OworfQorCitl
eHBvcnRzLmdldFZpc2l0b3JzTGlzdCA9IGdldFZpc2l0b3JzTGlzdDsKK2V4cG9ydHMudHJhbnNm
b3JtVmlzaXRvcnMgPSB0cmFuc2Zvcm1WaXNpdG9yczsKKworfSkoKQorfSx7Ii4vdHJhbnNmb3Jt
cy9jbGFzc2VzIjoxOSwiLi90cmFuc2Zvcm1zL3JlYWN0IjoyMCwiLi90cmFuc2Zvcm1zL3JlYWN0
RGlzcGxheU5hbWUiOjIxfV19LHt9LFsxNV0pKDE1KQorfSk7Cis7ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC90b2RvbXZj
L2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2Jvd2VyX2NvbXBvbmVudHMvcmVhY3Qv
Ym93ZXIuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNo
L3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93ZXJfY29tcG9uZW50
cy9yZWFjdC9ib3dlci5qc29uCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lv
dUV2ZW5CZW5jaC90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2Jvd2Vy
X2NvbXBvbmVudHMvcmVhY3QvYm93ZXIuanNvbgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1IEBA
Cit7CisgICJuYW1lIjogInJlYWN0IiwKKyAgInZlcnNpb24iOiAiMC40LjAiLAorICAibWFpbiI6
ICJyZWFjdC5qcyIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBQZXJmb3Jt
YW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvcmVhY3QvYm93ZXJfY29tcG9uZW50cy9yZWFjdC9yZWFjdC5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQ
ZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvcmVhY3QvYm93ZXJfY29tcG9uZW50cy9yZWFjdC9yZWFjdC5qcwkocmV2aXNpb24g
MCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9sYWJzL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ib3dlcl9jb21wb25lbnRzL3JlYWN0L3JlYWN0LmpzCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMzI4IEBACisvKioKKyAqIFJlYWN0IHYwLjQuMAorICov
CisoZnVuY3Rpb24oZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGJvb3RzdHJhcClib290c3RyYXAo
InJlYWN0IixlKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyltb2R1bGUuZXhwb3J0
cz1lKCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmlu
ZShlKTtlbHNlIGlmKCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VzKXtpZighc2VzLm9rKCkpcmV0dXJu
O3Nlcy5tYWtlUmVhY3Q9ZX1lbHNlInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93LlJl
YWN0PWUoKTpnbG9iYWwuUmVhY3Q9ZSgpfSkoZnVuY3Rpb24oKXt2YXIgZGVmaW5lLHNlcyxib290
c3RyYXAsbW9kdWxlLGV4cG9ydHM7CityZXR1cm4gKGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiBp
KG4scyl7aWYoIXRbbl0pe2lmKCFlW25dKXt2YXIgbz10eXBlb2YgcmVxdWlyZT09ImZ1bmN0aW9u
IiYmcmVxdWlyZTtpZighcyYmbylyZXR1cm4gbyhuLCEwKTtpZihyKXJldHVybiByKG4sITApO3Ro
cm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK24rIiciKX12YXIgdT10W25dPXtl
eHBvcnRzOnt9fTtlW25dWzBdLmNhbGwodS5leHBvcnRzLGZ1bmN0aW9uKHQpe3ZhciByPWVbbl1b
MV1bdF07cmV0dXJuIGkocj9yOnQpfSx1LHUuZXhwb3J0cyl9cmV0dXJuIHRbbl0uZXhwb3J0c312
YXIgcj10eXBlb2YgcmVxdWlyZT09ImZ1bmN0aW9uIiYmcmVxdWlyZTtmb3IodmFyIHM9MDtzPG4u
bGVuZ3RoO3MrKylpKG5bc10pO3JldHVybiBpfSkoezE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxl
LGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAq
IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGlj
ZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5j
ZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNl
bnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4w
CisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBp
biB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMg
ZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBP
UiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICog
U2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1p
c3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHBy
b3ZpZGVzTW9kdWxlICQKKyAqIEB0eXBlY2hlY2tzCisgKi8KKwordmFyIGdlID0gcmVxdWlyZSgi
Li9nZSIpOwordmFyIGV4ID0gcmVxdWlyZSgiLi9leCIpOworCisvKioKKyAqIEBwYXJhbSB7c3Ry
aW5nfERPTURvY3VtZW50fERPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IGlkCisgKiBAcmV0dXJuIHtE
T01Eb2N1bWVudHxET01FbGVtZW50fERPTVRleHROb2RlfQorICoKKyAqIEZpbmQgYSBub2RlIGJ5
IElELgorICoKKyAqIElmIHlvdXIgYXBwbGljYXRpb24gY29kZSBkZXBlbmRzIG9uIHRoZSBleGlz
dGVuY2Ugb2YgdGhlIGVsZW1lbnQsIHVzZSAkLAorICogd2hpY2ggd2lsbCB0aHJvdyBpZiB0aGUg
ZWxlbWVudCBkb2Vzbid0IGV4aXN0LgorICoKKyAqIElmIHlvdSdyZSBub3Qgc3VyZSB3aGV0aGVy
IG9yIG5vdCB0aGUgZWxlbWVudCBleGlzdHMsIHVzZSBnZSBpbnN0ZWFkLCBhbmQKKyAqIG1hbnVh
bGx5IGNoZWNrIGZvciB0aGUgZWxlbWVudCdzIGV4aXN0ZW5jZSBpbiB5b3VyIGFwcGxpY2F0aW9u
IGNvZGUuCisgKi8KK2Z1bmN0aW9uICQoaWQpIHsKKyAgdmFyIGVsZW1lbnQgPSBnZShpZCk7Cisg
IGlmICghZWxlbWVudCkgeworICAgIHRocm93IG5ldyBFcnJvcihleCgKKyAgICAgICdUcmllZCB0
byBnZXQgZWxlbWVudCB3aXRoIGlkIG9mICIlcyIgYnV0IGl0IGlzIG5vdCBwcmVzZW50IG9uIHRo
ZSBwYWdlLicsCisgICAgICBpZAorICAgICkpOworICB9CisgIHJldHVybiBlbGVtZW50OworfQor
Cittb2R1bGUuZXhwb3J0cyA9ICQ7CisKK30seyIuL2V4Ijo2NiwiLi9nZSI6Njl9XSwyOltmdW5j
dGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFj
ZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZl
cnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUg
ZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWlu
IGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9s
aWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxl
IGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVu
ZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBX
SVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJl
c3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1
YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBM
aWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBDU1NQcm9wZXJ0eQorICovCisKKyJ1c2Ug
c3RyaWN0IjsKKworLyoqCisgKiBDU1MgcHJvcGVydGllcyB3aGljaCBhY2NlcHQgbnVtYmVycyBi
dXQgYXJlIG5vdCBpbiB1bml0cyBvZiAicHgiLgorICovCit2YXIgaXNVbml0bGVzc051bWJlciA9
IHsKKyAgZmlsbE9wYWNpdHk6IHRydWUsCisgIGZvbnRXZWlnaHQ6IHRydWUsCisgIG9wYWNpdHk6
IHRydWUsCisgIG9ycGhhbnM6IHRydWUsCisgIHpJbmRleDogdHJ1ZSwKKyAgem9vbTogdHJ1ZQor
fTsKKworLyoqCisgKiBNb3N0IHN0eWxlIHByb3BlcnRpZXMgY2FuIGJlIHVuc2V0IGJ5IGRvaW5n
IC5zdHlsZVtwcm9wXSA9ICcnIGJ1dCBJRTgKKyAqIGRvZXNuJ3QgbGlrZSBkb2luZyB0aGF0IHdp
dGggc2hvcnRoYW5kIHByb3BlcnRpZXMgc28gZm9yIHRoZSBwcm9wZXJ0aWVzIHRoYXQKKyAqIElF
OCBicmVha3Mgb24sIHdoaWNoIGFyZSBsaXN0ZWQgaGVyZSwgd2UgaW5zdGVhZCB1bnNldCBlYWNo
IG9mIHRoZQorICogaW5kaXZpZHVhbCBwcm9wZXJ0aWVzLiBTZWUgaHR0cDovL2J1Z3MuanF1ZXJ5
LmNvbS90aWNrZXQvMTIzODUuCisgKiBUaGUgNC12YWx1ZSAnY2xvY2snIHByb3BlcnRpZXMgbGlr
ZSBtYXJnaW4sIHBhZGRpbmcsIGJvcmRlci13aWR0aCBzZWVtIHRvCisgKiBiZWhhdmUgd2l0aG91
dCBhbnkgcHJvYmxlbXMuIEN1cmlvdXNseSwgbGlzdC1zdHlsZSB3b3JrcyB0b28gd2l0aG91dCBh
bnkKKyAqIHNwZWNpYWwgcHJvZGRpbmcuCisgKi8KK3ZhciBzaG9ydGhhbmRQcm9wZXJ0eUV4cGFu
c2lvbnMgPSB7CisgIGJhY2tncm91bmQ6IHsKKyAgICBiYWNrZ3JvdW5kSW1hZ2U6IHRydWUsCisg
ICAgYmFja2dyb3VuZFBvc2l0aW9uOiB0cnVlLAorICAgIGJhY2tncm91bmRSZXBlYXQ6IHRydWUs
CisgICAgYmFja2dyb3VuZENvbG9yOiB0cnVlCisgIH0sCisgIGJvcmRlcjogeworICAgIGJvcmRl
cldpZHRoOiB0cnVlLAorICAgIGJvcmRlclN0eWxlOiB0cnVlLAorICAgIGJvcmRlckNvbG9yOiB0
cnVlCisgIH0sCisgIGJvcmRlckJvdHRvbTogeworICAgIGJvcmRlckJvdHRvbVdpZHRoOiB0cnVl
LAorICAgIGJvcmRlckJvdHRvbVN0eWxlOiB0cnVlLAorICAgIGJvcmRlckJvdHRvbUNvbG9yOiB0
cnVlCisgIH0sCisgIGJvcmRlckxlZnQ6IHsKKyAgICBib3JkZXJMZWZ0V2lkdGg6IHRydWUsCisg
ICAgYm9yZGVyTGVmdFN0eWxlOiB0cnVlLAorICAgIGJvcmRlckxlZnRDb2xvcjogdHJ1ZQorICB9
LAorICBib3JkZXJSaWdodDogeworICAgIGJvcmRlclJpZ2h0V2lkdGg6IHRydWUsCisgICAgYm9y
ZGVyUmlnaHRTdHlsZTogdHJ1ZSwKKyAgICBib3JkZXJSaWdodENvbG9yOiB0cnVlCisgIH0sCisg
IGJvcmRlclRvcDogeworICAgIGJvcmRlclRvcFdpZHRoOiB0cnVlLAorICAgIGJvcmRlclRvcFN0
eWxlOiB0cnVlLAorICAgIGJvcmRlclRvcENvbG9yOiB0cnVlCisgIH0sCisgIGZvbnQ6IHsKKyAg
ICBmb250U3R5bGU6IHRydWUsCisgICAgZm9udFZhcmlhbnQ6IHRydWUsCisgICAgZm9udFdlaWdo
dDogdHJ1ZSwKKyAgICBmb250U2l6ZTogdHJ1ZSwKKyAgICBsaW5lSGVpZ2h0OiB0cnVlLAorICAg
IGZvbnRGYW1pbHk6IHRydWUKKyAgfQorfTsKKwordmFyIENTU1Byb3BlcnR5ID0geworICBpc1Vu
aXRsZXNzTnVtYmVyOiBpc1VuaXRsZXNzTnVtYmVyLAorICBzaG9ydGhhbmRQcm9wZXJ0eUV4cGFu
c2lvbnM6IHNob3J0aGFuZFByb3BlcnR5RXhwYW5zaW9ucworfTsKKworbW9kdWxlLmV4cG9ydHMg
PSBDU1NQcm9wZXJ0eTsKKworfSx7fV0sMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5z
ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7
CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgg
dGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK
KyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisg
KiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRp
bmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmli
dXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJ
VElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhl
IExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMg
YW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNN
b2R1bGUgQ1NTUHJvcGVydHlPcGVyYXRpb25zCisgKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seQor
ICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIENTU1Byb3BlcnR5ID0gcmVxdWlyZSgiLi9DU1NQ
cm9wZXJ0eSIpOworCit2YXIgZGFuZ2Vyb3VzU3R5bGVWYWx1ZSA9IHJlcXVpcmUoIi4vZGFuZ2Vy
b3VzU3R5bGVWYWx1ZSIpOwordmFyIGVzY2FwZVRleHRGb3JCcm93c2VyID0gcmVxdWlyZSgiLi9l
c2NhcGVUZXh0Rm9yQnJvd3NlciIpOwordmFyIGh5cGhlbmF0ZSA9IHJlcXVpcmUoIi4vaHlwaGVu
YXRlIik7Cit2YXIgbWVtb2l6ZVN0cmluZ09ubHkgPSByZXF1aXJlKCIuL21lbW9pemVTdHJpbmdP
bmx5Iik7CisKK3ZhciBwcm9jZXNzU3R5bGVOYW1lID0gbWVtb2l6ZVN0cmluZ09ubHkoZnVuY3Rp
b24oc3R5bGVOYW1lKSB7CisgIHJldHVybiBlc2NhcGVUZXh0Rm9yQnJvd3NlcihoeXBoZW5hdGUo
c3R5bGVOYW1lKSk7Cit9KTsKKworLyoqCisgKiBPcGVyYXRpb25zIGZvciBkZWFsaW5nIHdpdGgg
Q1NTIHByb3BlcnRpZXMuCisgKi8KK3ZhciBDU1NQcm9wZXJ0eU9wZXJhdGlvbnMgPSB7CisKKyAg
LyoqCisgICAqIFNlcmlhbGl6ZXMgYSBtYXBwaW5nIG9mIHN0eWxlIHByb3BlcnRpZXMgZm9yIHVz
ZSBhcyBpbmxpbmUgc3R5bGVzOgorICAgKgorICAgKiAgID4gY3JlYXRlTWFya3VwRm9yU3R5bGVz
KHt3aWR0aDogJzIwMHB4JywgaGVpZ2h0OiAwfSkKKyAgICogICAid2lkdGg6MjAwcHg7aGVpZ2h0
OjA7IgorICAgKgorICAgKiBVbmRlZmluZWQgdmFsdWVzIGFyZSBpZ25vcmVkIHNvIHRoYXQgZGVj
bGFyYXRpdmUgcHJvZ3JhbW1pbmcgaXMgZWFzaWVyLgorICAgKgorICAgKiBAcGFyYW0ge29iamVj
dH0gc3R5bGVzCisgICAqIEByZXR1cm4gez9zdHJpbmd9CisgICAqLworICBjcmVhdGVNYXJrdXBG
b3JTdHlsZXM6IGZ1bmN0aW9uKHN0eWxlcykgeworICAgIHZhciBzZXJpYWxpemVkID0gJyc7Cisg
ICAgZm9yICh2YXIgc3R5bGVOYW1lIGluIHN0eWxlcykgeworICAgICAgaWYgKCFzdHlsZXMuaGFz
T3duUHJvcGVydHkoc3R5bGVOYW1lKSkgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAg
ICAgIHZhciBzdHlsZVZhbHVlID0gc3R5bGVzW3N0eWxlTmFtZV07CisgICAgICBpZiAoc3R5bGVW
YWx1ZSAhPSBudWxsKSB7CisgICAgICAgIHNlcmlhbGl6ZWQgKz0gcHJvY2Vzc1N0eWxlTmFtZShz
dHlsZU5hbWUpICsgJzonOworICAgICAgICBzZXJpYWxpemVkICs9IGRhbmdlcm91c1N0eWxlVmFs
dWUoc3R5bGVOYW1lLCBzdHlsZVZhbHVlKSArICc7JzsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIHNlcmlhbGl6ZWQgfHwgbnVsbDsKKyAgfSwKKworICAvKioKKyAgICogU2V0cyB0aGUgdmFs
dWUgZm9yIG11bHRpcGxlIHN0eWxlcyBvbiBhIG5vZGUuICBJZiBhIHZhbHVlIGlzIHNwZWNpZmll
ZCBhcworICAgKiAnJyAoZW1wdHkgc3RyaW5nKSwgdGhlIGNvcnJlc3BvbmRpbmcgc3R5bGUgcHJv
cGVydHkgd2lsbCBiZSB1bnNldC4KKyAgICoKKyAgICogQHBhcmFtIHtET01FbGVtZW50fSBub2Rl
CisgICAqIEBwYXJhbSB7b2JqZWN0fSBzdHlsZXMKKyAgICovCisgIHNldFZhbHVlRm9yU3R5bGVz
OiBmdW5jdGlvbihub2RlLCBzdHlsZXMpIHsKKyAgICB2YXIgc3R5bGUgPSBub2RlLnN0eWxlOwor
ICAgIGZvciAodmFyIHN0eWxlTmFtZSBpbiBzdHlsZXMpIHsKKyAgICAgIGlmICghc3R5bGVzLmhh
c093blByb3BlcnR5KHN0eWxlTmFtZSkpIHsKKyAgICAgICAgY29udGludWU7CisgICAgICB9Cisg
ICAgICB2YXIgc3R5bGVWYWx1ZSA9IGRhbmdlcm91c1N0eWxlVmFsdWUoc3R5bGVOYW1lLCBzdHls
ZXNbc3R5bGVOYW1lXSk7CisgICAgICBpZiAoc3R5bGVWYWx1ZSkgeworICAgICAgICBzdHlsZVtz
dHlsZU5hbWVdID0gc3R5bGVWYWx1ZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHZhciBleHBh
bnNpb24gPSBDU1NQcm9wZXJ0eS5zaG9ydGhhbmRQcm9wZXJ0eUV4cGFuc2lvbnNbc3R5bGVOYW1l
XTsKKyAgICAgICAgaWYgKGV4cGFuc2lvbikgeworICAgICAgICAgIC8vIFNob3J0aGFuZCBwcm9w
ZXJ0eSB0aGF0IElFOCB3b24ndCBsaWtlIHVuc2V0dGluZywgc28gdW5zZXQgZWFjaAorICAgICAg
ICAgIC8vIGNvbXBvbmVudCB0byBwbGFjYXRlIGl0CisgICAgICAgICAgZm9yICh2YXIgaW5kaXZp
ZHVhbFN0eWxlTmFtZSBpbiBleHBhbnNpb24pIHsKKyAgICAgICAgICAgIHN0eWxlW2luZGl2aWR1
YWxTdHlsZU5hbWVdID0gJyc7CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgIHN0eWxlW3N0eWxlTmFtZV0gPSAnJzsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAg
fQorCit9OworCittb2R1bGUuZXhwb3J0cyA9IENTU1Byb3BlcnR5T3BlcmF0aW9uczsKKworfSx7
Ii4vQ1NTUHJvcGVydHkiOjIsIi4vZGFuZ2Vyb3VzU3R5bGVWYWx1ZSI6NjMsIi4vZXNjYXBlVGV4
dEZvckJyb3dzZXIiOjY1LCIuL2h5cGhlbmF0ZSI6NzMsIi4vbWVtb2l6ZVN0cmluZ09ubHkiOjgw
fV0sNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdo
dCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBM
aWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2Ug
dGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3Ug
bWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFw
YWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkg
YXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0
cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJB
U0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVp
dGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVj
aWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1
bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUgQ2FsbGJhY2tSZWdpc3Ry
eQorICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHkKKyAqLworCisidXNlIHN0cmljdCI7CisKK3Zh
ciBsaXN0ZW5lckJhbmsgPSB7fTsKKworLyoqCisgKiBTdG9yZXMgImxpc3RlbmVycyIgYnkgYHJl
Z2lzdHJhdGlvbk5hbWVgL2BpZGAuIFRoZXJlIHNob3VsZCBiZSBhdCBtb3N0IG9uZQorICogImxp
c3RlbmVyIiBwZXIgYHJlZ2lzdHJhdGlvbk5hbWVgL2BpZGAgaW4gdGhlIGBsaXN0ZW5lckJhbmtg
LgorICoKKyAqIEFjY2VzcyBsaXN0ZW5lcnMgdmlhIGBsaXN0ZW5lckJhbmtbcmVnaXN0cmF0aW9u
TmFtZV1baWRdYC4KKyAqCisgKiBAY2xhc3MgQ2FsbGJhY2tSZWdpc3RyeQorICogQGludGVybmFs
CisgKi8KK3ZhciBDYWxsYmFja1JlZ2lzdHJ5ID0geworCisgIC8qKgorICAgKiBTdG9yZXMgYGxp
c3RlbmVyYCBhdCBgbGlzdGVuZXJCYW5rW3JlZ2lzdHJhdGlvbk5hbWVdW2lkXWAuIElzIGlkZW1w
b3RlbnQuCisgICAqCisgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBvZiB0aGUgRE9NIGVsZW1l
bnQuCisgICAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIE5hbWUgb2YgbGlzdGVu
ZXIgKGUuZy4gYG9uQ2xpY2tgKS4KKyAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGxpc3RlbmVyIFRo
ZSBjYWxsYmFjayB0byBzdG9yZS4KKyAgICovCisgIHB1dExpc3RlbmVyOiBmdW5jdGlvbihpZCwg
cmVnaXN0cmF0aW9uTmFtZSwgbGlzdGVuZXIpIHsKKyAgICB2YXIgYmFua0ZvclJlZ2lzdHJhdGlv
bk5hbWUgPQorICAgICAgbGlzdGVuZXJCYW5rW3JlZ2lzdHJhdGlvbk5hbWVdIHx8IChsaXN0ZW5l
ckJhbmtbcmVnaXN0cmF0aW9uTmFtZV0gPSB7fSk7CisgICAgYmFua0ZvclJlZ2lzdHJhdGlvbk5h
bWVbaWRdID0gbGlzdGVuZXI7CisgIH0sCisKKyAgLyoqCisgICAqIEBwYXJhbSB7c3RyaW5nfSBp
ZCBJRCBvZiB0aGUgRE9NIGVsZW1lbnQuCisgICAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRp
b25OYW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS4KKyAgICogQHJldHVybiB7
P2Z1bmN0aW9ufSBUaGUgc3RvcmVkIGNhbGxiYWNrLgorICAgKi8KKyAgZ2V0TGlzdGVuZXI6IGZ1
bmN0aW9uKGlkLCByZWdpc3RyYXRpb25OYW1lKSB7CisgICAgdmFyIGJhbmtGb3JSZWdpc3RyYXRp
b25OYW1lID0gbGlzdGVuZXJCYW5rW3JlZ2lzdHJhdGlvbk5hbWVdOworICAgIHJldHVybiBiYW5r
Rm9yUmVnaXN0cmF0aW9uTmFtZSAmJiBiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZVtpZF07CisgIH0s
CisKKyAgLyoqCisgICAqIERlbGV0ZXMgYSBsaXN0ZW5lciBmcm9tIHRoZSByZWdpc3RyYXRpb24g
YmFuay4KKyAgICoKKyAgICogQHBhcmFtIHtzdHJpbmd9IGlkIElEIG9mIHRoZSBET00gZWxlbWVu
dC4KKyAgICogQHBhcmFtIHtzdHJpbmd9IHJlZ2lzdHJhdGlvbk5hbWUgTmFtZSBvZiBsaXN0ZW5l
ciAoZS5nLiBgb25DbGlja2ApLgorICAgKi8KKyAgZGVsZXRlTGlzdGVuZXI6IGZ1bmN0aW9uKGlk
LCByZWdpc3RyYXRpb25OYW1lKSB7CisgICAgdmFyIGJhbmtGb3JSZWdpc3RyYXRpb25OYW1lID0g
bGlzdGVuZXJCYW5rW3JlZ2lzdHJhdGlvbk5hbWVdOworICAgIGlmIChiYW5rRm9yUmVnaXN0cmF0
aW9uTmFtZSkgeworICAgICAgZGVsZXRlIGJhbmtGb3JSZWdpc3RyYXRpb25OYW1lW2lkXTsKKyAg
ICB9CisgIH0sCisKKyAgLyoqCisgICAqIERlbGV0ZXMgYWxsIGxpc3RlbmVycyBmb3IgdGhlIERP
TSBlbGVtZW50IHdpdGggdGhlIHN1cHBsaWVkIElELgorICAgKgorICAgKiBAcGFyYW0ge3N0cmlu
Z30gaWQgSUQgb2YgdGhlIERPTSBlbGVtZW50LgorICAgKi8KKyAgZGVsZXRlQWxsTGlzdGVuZXJz
OiBmdW5jdGlvbihpZCkgeworICAgIGZvciAodmFyIHJlZ2lzdHJhdGlvbk5hbWUgaW4gbGlzdGVu
ZXJCYW5rKSB7CisgICAgICBkZWxldGUgbGlzdGVuZXJCYW5rW3JlZ2lzdHJhdGlvbk5hbWVdW2lk
XTsKKyAgICB9CisgIH0sCisKKyAgLyoqCisgICAqIFRoaXMgaXMgbmVlZGVkIGZvciB0ZXN0cyBv
bmx5LiBEbyBub3QgdXNlIQorICAgKi8KKyAgX19wdXJnZTogZnVuY3Rpb24oKSB7CisgICAgbGlz
dGVuZXJCYW5rID0ge307CisgIH0KKworfTsKKworbW9kdWxlLmV4cG9ydHMgPSBDYWxsYmFja1Jl
Z2lzdHJ5OworCit9LHt9XSw1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKyhm
dW5jdGlvbigpey8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBM
aWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vu
c2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ug
d2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5z
ZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAor
ICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4g
d3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRp
c3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1Ig
Q09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNl
ZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNz
aW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92
aWRlc01vZHVsZSBDaGFuZ2VFdmVudFBsdWdpbgorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFy
IEV2ZW50Q29uc3RhbnRzID0gcmVxdWlyZSgiLi9FdmVudENvbnN0YW50cyIpOwordmFyIEV2ZW50
UGx1Z2luSHViID0gcmVxdWlyZSgiLi9FdmVudFBsdWdpbkh1YiIpOwordmFyIEV2ZW50UHJvcGFn
YXRvcnMgPSByZXF1aXJlKCIuL0V2ZW50UHJvcGFnYXRvcnMiKTsKK3ZhciBFeGVjdXRpb25FbnZp
cm9ubWVudCA9IHJlcXVpcmUoIi4vRXhlY3V0aW9uRW52aXJvbm1lbnQiKTsKK3ZhciBTeW50aGV0
aWNFdmVudCA9IHJlcXVpcmUoIi4vU3ludGhldGljRXZlbnQiKTsKKwordmFyIGlzRXZlbnRTdXBw
b3J0ZWQgPSByZXF1aXJlKCIuL2lzRXZlbnRTdXBwb3J0ZWQiKTsKK3ZhciBrZXlPZiA9IHJlcXVp
cmUoIi4va2V5T2YiKTsKKwordmFyIHRvcExldmVsVHlwZXMgPSBFdmVudENvbnN0YW50cy50b3BM
ZXZlbFR5cGVzOworCit2YXIgZXZlbnRUeXBlcyA9IHsKKyAgY2hhbmdlOiB7CisgICAgcGhhc2Vk
UmVnaXN0cmF0aW9uTmFtZXM6IHsKKyAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkNoYW5nZTogbnVs
bH0pLAorICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkNoYW5nZUNhcHR1cmU6IG51bGx9KQorICAg
IH0KKyAgfQorfTsKKworLyoqCisgKiBGb3IgSUUgc2hpbXMKKyAqLwordmFyIGFjdGl2ZUVsZW1l
bnQgPSBudWxsOwordmFyIGFjdGl2ZUVsZW1lbnRJRCA9IG51bGw7Cit2YXIgYWN0aXZlRWxlbWVu
dFZhbHVlID0gbnVsbDsKK3ZhciBhY3RpdmVFbGVtZW50VmFsdWVQcm9wID0gbnVsbDsKKworCisv
KioKKyAqIFNFQ1RJT046IGhhbmRsZSBgY2hhbmdlYCBldmVudAorICovCitmdW5jdGlvbiBzaG91
bGRVc2VDaGFuZ2VFdmVudChlbGVtKSB7CisgIHJldHVybiAoCisgICAgZWxlbS5ub2RlTmFtZSA9
PT0gJ1NFTEVDVCcgfHwKKyAgICAoZWxlbS5ub2RlTmFtZSA9PT0gJ0lOUFVUJyAmJiBlbGVtLnR5
cGUgPT09ICdmaWxlJykKKyAgKTsKK30KKwordmFyIGRvZXNDaGFuZ2VFdmVudEJ1YmJsZSA9IGZh
bHNlOworaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkgeworICAvLyBTZWUgYGhh
bmRsZUNoYW5nZWAgY29tbWVudCBiZWxvdworICBkb2VzQ2hhbmdlRXZlbnRCdWJibGUgPSBpc0V2
ZW50U3VwcG9ydGVkKCdjaGFuZ2UnKSAmJiAoCisgICAgISgnZG9jdW1lbnRNb2RlJyBpbiBkb2N1
bWVudCkgfHwgZG9jdW1lbnQuZG9jdW1lbnRNb2RlID4gOAorICApOworfQorCitmdW5jdGlvbiBt
YW51YWxEaXNwYXRjaENoYW5nZUV2ZW50KG5hdGl2ZUV2ZW50KSB7CisgIHZhciBldmVudCA9IFN5
bnRoZXRpY0V2ZW50LmdldFBvb2xlZCgKKyAgICBldmVudFR5cGVzLmNoYW5nZSwKKyAgICBhY3Rp
dmVFbGVtZW50SUQsCisgICAgbmF0aXZlRXZlbnQKKyAgKTsKKyAgRXZlbnRQcm9wYWdhdG9ycy5h
Y2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGV2ZW50KTsKKworICAvLyBJZiBjaGFuZ2UgYnVi
YmxlZCwgd2UnZCBqdXN0IGJpbmQgdG8gaXQgbGlrZSBhbGwgdGhlIG90aGVyIGV2ZW50cworICAv
LyBhbmQgaGF2ZSBpdCBnbyB0aHJvdWdoIFJlYWN0RXZlbnRUb3BMZXZlbENhbGxiYWNrLiBTaW5j
ZSBpdCBkb2Vzbid0LCB3ZQorICAvLyBtYW51YWxseSBsaXN0ZW4gZm9yIHRoZSBjaGFuZ2UgZXZl
bnQgYW5kIHNvIHdlIGhhdmUgdG8gZW5xdWV1ZSBhbmQKKyAgLy8gcHJvY2VzcyB0aGUgYWJzdHJh
Y3QgZXZlbnQgbWFudWFsbHkuCisgIEV2ZW50UGx1Z2luSHViLmVucXVldWVFdmVudHMoZXZlbnQp
OworICBFdmVudFBsdWdpbkh1Yi5wcm9jZXNzRXZlbnRRdWV1ZSgpOworfQorCitmdW5jdGlvbiBz
dGFydFdhdGNoaW5nRm9yQ2hhbmdlRXZlbnRJRTgodGFyZ2V0LCB0YXJnZXRJRCkgeworICBhY3Rp
dmVFbGVtZW50ID0gdGFyZ2V0OworICBhY3RpdmVFbGVtZW50SUQgPSB0YXJnZXRJRDsKKyAgYWN0
aXZlRWxlbWVudC5hdHRhY2hFdmVudCgnb25jaGFuZ2UnLCBtYW51YWxEaXNwYXRjaENoYW5nZUV2
ZW50KTsKK30KKworZnVuY3Rpb24gc3RvcFdhdGNoaW5nRm9yQ2hhbmdlRXZlbnRJRTgoKSB7Cisg
IGlmICghYWN0aXZlRWxlbWVudCkgeworICAgIHJldHVybjsKKyAgfQorICBhY3RpdmVFbGVtZW50
LmRldGFjaEV2ZW50KCdvbmNoYW5nZScsIG1hbnVhbERpc3BhdGNoQ2hhbmdlRXZlbnQpOworICBh
Y3RpdmVFbGVtZW50ID0gbnVsbDsKKyAgYWN0aXZlRWxlbWVudElEID0gbnVsbDsKK30KKworZnVu
Y3Rpb24gZ2V0VGFyZ2V0SURGb3JDaGFuZ2VFdmVudCgKKyAgICB0b3BMZXZlbFR5cGUsCisgICAg
dG9wTGV2ZWxUYXJnZXQsCisgICAgdG9wTGV2ZWxUYXJnZXRJRCkgeworICBpZiAodG9wTGV2ZWxU
eXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcENoYW5nZSkgeworICAgIHJldHVybiB0b3BMZXZlbFRh
cmdldElEOworICB9Cit9CitmdW5jdGlvbiBoYW5kbGVFdmVudHNGb3JDaGFuZ2VFdmVudElFOCgK
KyAgICB0b3BMZXZlbFR5cGUsCisgICAgdG9wTGV2ZWxUYXJnZXQsCisgICAgdG9wTGV2ZWxUYXJn
ZXRJRCkgeworICBpZiAodG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcEZvY3VzKSB7
CisgICAgLy8gc3RvcFdhdGNoaW5nKCkgc2hvdWxkIGJlIGEgbm9vcCBoZXJlIGJ1dCB3ZSBjYWxs
IGl0IGp1c3QgaW4gY2FzZSB3ZQorICAgIC8vIG1pc3NlZCBhIGJsdXIgZXZlbnQgc29tZWhvdy4K
KyAgICBzdG9wV2F0Y2hpbmdGb3JDaGFuZ2VFdmVudElFOCgpOworICAgIHN0YXJ0V2F0Y2hpbmdG
b3JDaGFuZ2VFdmVudElFOCh0b3BMZXZlbFRhcmdldCwgdG9wTGV2ZWxUYXJnZXRJRCk7CisgIH0g
ZWxzZSBpZiAodG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcEJsdXIpIHsKKyAgICBz
dG9wV2F0Y2hpbmdGb3JDaGFuZ2VFdmVudElFOCgpOworICB9Cit9CisKKworLyoqCisgKiBTRUNU
SU9OOiBoYW5kbGUgYGlucHV0YCBldmVudAorICovCit2YXIgaXNJbnB1dEV2ZW50U3VwcG9ydGVk
ID0gZmFsc2U7CitpZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7CisgIC8vIElF
OSBjbGFpbXMgdG8gc3VwcG9ydCB0aGUgaW5wdXQgZXZlbnQgYnV0IGZhaWxzIHRvIHRyaWdnZXIg
aXQgd2hlbgorICAvLyBkZWxldGluZyB0ZXh0LCBzbyB3ZSBpZ25vcmUgaXRzIGlucHV0IGV2ZW50
cworICBpc0lucHV0RXZlbnRTdXBwb3J0ZWQgPSBpc0V2ZW50U3VwcG9ydGVkKCdpbnB1dCcpICYm
ICgKKyAgICAhKCdkb2N1bWVudE1vZGUnIGluIGRvY3VtZW50KSB8fCBkb2N1bWVudC5kb2N1bWVu
dE1vZGUgPiA5CisgICk7Cit9CisKKworLyoqCisgKiBAc2VlIGh0dHA6Ly93d3cud2hhdHdnLm9y
Zy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RoZS1pbnB1dC1lbGVtZW50
Lmh0bWwjaW5wdXQtdHlwZS1hdHRyLXN1bW1hcnkKKyAqLwordmFyIHN1cHBvcnRlZElucHV0VHlw
ZXMgPSB7CisgICdjb2xvcic6IHRydWUsCisgICdkYXRlJzogdHJ1ZSwKKyAgJ2RhdGV0aW1lJzog
dHJ1ZSwKKyAgJ2RhdGV0aW1lLWxvY2FsJzogdHJ1ZSwKKyAgJ2VtYWlsJzogdHJ1ZSwKKyAgJ21v
bnRoJzogdHJ1ZSwKKyAgJ251bWJlcic6IHRydWUsCisgICdwYXNzd29yZCc6IHRydWUsCisgICdy
YW5nZSc6IHRydWUsCisgICdzZWFyY2gnOiB0cnVlLAorICAndGVsJzogdHJ1ZSwKKyAgJ3RleHQn
OiB0cnVlLAorICAndGltZSc6IHRydWUsCisgICd1cmwnOiB0cnVlLAorICAnd2Vlayc6IHRydWUK
K307CisKK2Z1bmN0aW9uIHNob3VsZFVzZUlucHV0RXZlbnQoZWxlbSkgeworICByZXR1cm4gKAor
ICAgIChlbGVtLm5vZGVOYW1lID09PSAnSU5QVVQnICYmIHN1cHBvcnRlZElucHV0VHlwZXNbZWxl
bS50eXBlXSkgfHwKKyAgICBlbGVtLm5vZGVOYW1lID09PSAnVEVYVEFSRUEnCisgICk7Cit9CisK
Ky8qKgorICogKEZvciBvbGQgSUUuKSBSZXBsYWNlbWVudCBnZXR0ZXIvc2V0dGVyIGZvciB0aGUg
YHZhbHVlYCBwcm9wZXJ0eSB0aGF0IGdldHMKKyAqIHNldCBvbiB0aGUgYWN0aXZlIGVsZW1lbnQu
CisgKi8KK3ZhciBuZXdWYWx1ZVByb3AgPSAgeworICBnZXQ6IGZ1bmN0aW9uKCkgeworICAgIHJl
dHVybiBhY3RpdmVFbGVtZW50VmFsdWVQcm9wLmdldC5jYWxsKHRoaXMpOworICB9LAorICBzZXQ6
IGZ1bmN0aW9uKHZhbCkgeworICAgIC8vIENhc3QgdG8gYSBzdHJpbmcgc28gd2UgY2FuIGRvIGVx
dWFsaXR5IGNoZWNrcy4KKyAgICBhY3RpdmVFbGVtZW50VmFsdWUgPSAnJyArIHZhbDsKKyAgICBh
Y3RpdmVFbGVtZW50VmFsdWVQcm9wLnNldC5jYWxsKHRoaXMsIHZhbCk7CisgIH0KK307CisKKy8q
KgorICogKEZvciBvbGQgSUUuKSBTdGFydHMgdHJhY2tpbmcgcHJvcGVydHljaGFuZ2UgZXZlbnRz
IG9uIHRoZSBwYXNzZWQtaW4gZWxlbWVudAorICogYW5kIG92ZXJyaWRlIHRoZSB2YWx1ZSBwcm9w
ZXJ0eSBzbyB0aGF0IHdlIGNhbiBkaXN0aW5ndWlzaCB1c2VyIGV2ZW50cyBmcm9tCisgKiB2YWx1
ZSBjaGFuZ2VzIGluIEpTLgorICovCitmdW5jdGlvbiBzdGFydFdhdGNoaW5nRm9yVmFsdWVDaGFu
Z2UodGFyZ2V0LCB0YXJnZXRJRCkgeworICBhY3RpdmVFbGVtZW50ID0gdGFyZ2V0OworICBhY3Rp
dmVFbGVtZW50SUQgPSB0YXJnZXRJRDsKKyAgYWN0aXZlRWxlbWVudFZhbHVlID0gdGFyZ2V0LnZh
bHVlOworICBhY3RpdmVFbGVtZW50VmFsdWVQcm9wID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcigKKyAgICB0YXJnZXQuY29uc3RydWN0b3IucHJvdG90eXBlLAorICAgICd2YWx1ZScK
KyAgKTsKKworICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYWN0aXZlRWxlbWVudCwgJ3ZhbHVlJywg
bmV3VmFsdWVQcm9wKTsKKyAgYWN0aXZlRWxlbWVudC5hdHRhY2hFdmVudCgnb25wcm9wZXJ0eWNo
YW5nZScsIGhhbmRsZVByb3BlcnR5Q2hhbmdlKTsKK30KKworLyoqCisgKiAoRm9yIG9sZCBJRS4p
IFJlbW92ZXMgdGhlIGV2ZW50IGxpc3RlbmVycyBmcm9tIHRoZSBjdXJyZW50bHktdHJhY2tlZCBl
bGVtZW50LAorICogaWYgYW55IGV4aXN0cy4KKyAqLworZnVuY3Rpb24gc3RvcFdhdGNoaW5nRm9y
VmFsdWVDaGFuZ2UoKSB7CisgIGlmICghYWN0aXZlRWxlbWVudCkgeworICAgIHJldHVybjsKKyAg
fQorCisgIC8vIGRlbGV0ZSByZXN0b3JlcyB0aGUgb3JpZ2luYWwgcHJvcGVydHkgZGVmaW5pdGlv
bgorICBkZWxldGUgYWN0aXZlRWxlbWVudC52YWx1ZTsKKyAgYWN0aXZlRWxlbWVudC5kZXRhY2hF
dmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIGhhbmRsZVByb3BlcnR5Q2hhbmdlKTsKKworICBhY3Rp
dmVFbGVtZW50ID0gbnVsbDsKKyAgYWN0aXZlRWxlbWVudElEID0gbnVsbDsKKyAgYWN0aXZlRWxl
bWVudFZhbHVlID0gbnVsbDsKKyAgYWN0aXZlRWxlbWVudFZhbHVlUHJvcCA9IG51bGw7Cit9CisK
Ky8qKgorICogKEZvciBvbGQgSUUuKSBIYW5kbGVzIGEgcHJvcGVydHljaGFuZ2UgZXZlbnQsIHNl
bmRpbmcgYSBgY2hhbmdlYCBldmVudCBpZgorICogdGhlIHZhbHVlIG9mIHRoZSBhY3RpdmUgZWxl
bWVudCBoYXMgY2hhbmdlZC4KKyAqLworZnVuY3Rpb24gaGFuZGxlUHJvcGVydHlDaGFuZ2UobmF0
aXZlRXZlbnQpIHsKKyAgaWYgKG5hdGl2ZUV2ZW50LnByb3BlcnR5TmFtZSAhPT0gJ3ZhbHVlJykg
eworICAgIHJldHVybjsKKyAgfQorICB2YXIgdmFsdWUgPSBuYXRpdmVFdmVudC5zcmNFbGVtZW50
LnZhbHVlOworICBpZiAodmFsdWUgPT09IGFjdGl2ZUVsZW1lbnRWYWx1ZSkgeworICAgIHJldHVy
bjsKKyAgfQorICBhY3RpdmVFbGVtZW50VmFsdWUgPSB2YWx1ZTsKKworICBtYW51YWxEaXNwYXRj
aENoYW5nZUV2ZW50KG5hdGl2ZUV2ZW50KTsKK30KKworLyoqCisgKiBJZiBhIGBjaGFuZ2VgIGV2
ZW50IHNob3VsZCBiZSBmaXJlZCwgcmV0dXJucyB0aGUgdGFyZ2V0J3MgSUQuCisgKi8KK2Z1bmN0
aW9uIGdldFRhcmdldElERm9ySW5wdXRFdmVudCgKKyAgICB0b3BMZXZlbFR5cGUsCisgICAgdG9w
TGV2ZWxUYXJnZXQsCisgICAgdG9wTGV2ZWxUYXJnZXRJRCkgeworICBpZiAodG9wTGV2ZWxUeXBl
ID09PSB0b3BMZXZlbFR5cGVzLnRvcElucHV0KSB7CisgICAgLy8gSW4gbW9kZXJuIGJyb3dzZXJz
IChpLmUuLCBub3QgSUU4IG9yIElFOSksIHRoZSBpbnB1dCBldmVudCBpcyBleGFjdGx5CisgICAg
Ly8gd2hhdCB3ZSB3YW50IHNvIGZhbGwgdGhyb3VnaCBoZXJlIGFuZCB0cmlnZ2VyIGFuIGFic3Ry
YWN0IGV2ZW50CisgICAgcmV0dXJuIHRvcExldmVsVGFyZ2V0SUQ7CisgIH0KK30KKworLy8gRm9y
IElFOCBhbmQgSUU5LgorZnVuY3Rpb24gaGFuZGxlRXZlbnRzRm9ySW5wdXRFdmVudElFKAorICAg
IHRvcExldmVsVHlwZSwKKyAgICB0b3BMZXZlbFRhcmdldCwKKyAgICB0b3BMZXZlbFRhcmdldElE
KSB7CisgIGlmICh0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wRm9jdXMpIHsKKyAg
ICAvLyBJbiBJRTgsIHdlIGNhbiBjYXB0dXJlIGFsbW9zdCBhbGwgLnZhbHVlIGNoYW5nZXMgYnkg
YWRkaW5nIGEKKyAgICAvLyBwcm9wZXJ0eWNoYW5nZSBoYW5kbGVyIGFuZCBsb29raW5nIGZvciBl
dmVudHMgd2l0aCBwcm9wZXJ0eU5hbWUKKyAgICAvLyBlcXVhbCB0byAndmFsdWUnCisgICAgLy8g
SW4gSUU5LCBwcm9wZXJ0eWNoYW5nZSBmaXJlcyBmb3IgbW9zdCBpbnB1dCBldmVudHMgYnV0IGlz
IGJ1Z2d5IGFuZAorICAgIC8vIGRvZXNuJ3QgZmlyZSB3aGVuIHRleHQgaXMgZGVsZXRlZCwgYnV0
IGNvbnZlbmllbnRseSwgc2VsZWN0aW9uY2hhbmdlCisgICAgLy8gYXBwZWFycyB0byBmaXJlIGlu
IGFsbCBvZiB0aGUgcmVtYWluaW5nIGNhc2VzIHNvIHdlIGNhdGNoIHRob3NlIGFuZAorICAgIC8v
IGZvcndhcmQgdGhlIGV2ZW50IGlmIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZAorICAgIC8vIEluIGVp
dGhlciBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIGNhbGwgdGhlIGV2ZW50IGhhbmRsZXIgaWYgdGhl
IHZhbHVlCisgICAgLy8gaXMgY2hhbmdlZCBmcm9tIEpTIHNvIHdlIHJlZGVmaW5lIGEgc2V0dGVy
IGZvciBgLnZhbHVlYCB0aGF0IHVwZGF0ZXMKKyAgICAvLyBvdXIgYWN0aXZlRWxlbWVudFZhbHVl
IHZhcmlhYmxlLCBhbGxvd2luZyB1cyB0byBpZ25vcmUgdGhvc2UgY2hhbmdlcworICAgIC8vCisg
ICAgLy8gc3RvcFdhdGNoaW5nKCkgc2hvdWxkIGJlIGEgbm9vcCBoZXJlIGJ1dCB3ZSBjYWxsIGl0
IGp1c3QgaW4gY2FzZSB3ZQorICAgIC8vIG1pc3NlZCBhIGJsdXIgZXZlbnQgc29tZWhvdy4KKyAg
ICBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpOworICAgIHN0YXJ0V2F0Y2hpbmdGb3JWYWx1
ZUNoYW5nZSh0b3BMZXZlbFRhcmdldCwgdG9wTGV2ZWxUYXJnZXRJRCk7CisgIH0gZWxzZSBpZiAo
dG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcEJsdXIpIHsKKyAgICBzdG9wV2F0Y2hp
bmdGb3JWYWx1ZUNoYW5nZSgpOworICB9Cit9CisKKy8vIEZvciBJRTggYW5kIElFOS4KK2Z1bmN0
aW9uIGdldFRhcmdldElERm9ySW5wdXRFdmVudElFKAorICAgIHRvcExldmVsVHlwZSwKKyAgICB0
b3BMZXZlbFRhcmdldCwKKyAgICB0b3BMZXZlbFRhcmdldElEKSB7CisgIGlmICh0b3BMZXZlbFR5
cGUgPT09IHRvcExldmVsVHlwZXMudG9wU2VsZWN0aW9uQ2hhbmdlIHx8CisgICAgICB0b3BMZXZl
bFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wS2V5VXAgfHwKKyAgICAgIHRvcExldmVsVHlwZSA9
PT0gdG9wTGV2ZWxUeXBlcy50b3BLZXlEb3duKSB7CisgICAgLy8gT24gdGhlIHNlbGVjdGlvbmNo
YW5nZSBldmVudCwgdGhlIHRhcmdldCBpcyBqdXN0IGRvY3VtZW50IHdoaWNoIGlzbid0CisgICAg
Ly8gaGVscGZ1bCBmb3IgdXMgc28ganVzdCBjaGVjayBhY3RpdmVFbGVtZW50IGluc3RlYWQuCisg
ICAgLy8KKyAgICAvLyA5OSUgb2YgdGhlIHRpbWUsIGtleWRvd24gYW5kIGtleXVwIGFyZW4ndCBu
ZWNlc3NhcnkuIElFOCBmYWlscyB0byBmaXJlCisgICAgLy8gcHJvcGVydHljaGFuZ2Ugb24gdGhl
IGZpcnN0IGlucHV0IGV2ZW50IGFmdGVyIHNldHRpbmcgYHZhbHVlYCBmcm9tIGEKKyAgICAvLyBz
Y3JpcHQgYW5kIGZpcmVzIG9ubHkga2V5ZG93biwga2V5cHJlc3MsIGtleXVwLiBDYXRjaGluZyBr
ZXl1cCB1c3VhbGx5CisgICAgLy8gZ2V0cyBpdCBhbmQgY2F0Y2hpbmcga2V5ZG93biBsZXRzIHVz
IGZpcmUgYW4gZXZlbnQgZm9yIHRoZSBmaXJzdAorICAgIC8vIGtleXN0cm9rZSBpZiB1c2VyIGRv
ZXMgYSBrZXkgcmVwZWF0IChpdCdsbCBiZSBhIGxpdHRsZSBkZWxheWVkOiByaWdodAorICAgIC8v
IGJlZm9yZSB0aGUgc2Vjb25kIGtleXN0cm9rZSkuIE90aGVyIGlucHV0IG1ldGhvZHMgKGUuZy4s
IHBhc3RlKSBzZWVtIHRvCisgICAgLy8gZmlyZSBzZWxlY3Rpb25jaGFuZ2Ugbm9ybWFsbHkuCisg
ICAgaWYgKGFjdGl2ZUVsZW1lbnQgJiYgYWN0aXZlRWxlbWVudC52YWx1ZSAhPT0gYWN0aXZlRWxl
bWVudFZhbHVlKSB7CisgICAgICBhY3RpdmVFbGVtZW50VmFsdWUgPSBhY3RpdmVFbGVtZW50LnZh
bHVlOworICAgICAgcmV0dXJuIGFjdGl2ZUVsZW1lbnRJRDsKKyAgICB9CisgIH0KK30KKworCisv
KioKKyAqIFNFQ1RJT046IGhhbmRsZSBgY2xpY2tgIGV2ZW50CisgKi8KK2Z1bmN0aW9uIHNob3Vs
ZFVzZUNsaWNrRXZlbnQoZWxlbSkgeworICAvLyBVc2UgdGhlIGBjbGlja2AgZXZlbnQgdG8gZGV0
ZWN0IGNoYW5nZXMgdG8gY2hlY2tib3ggYW5kIHJhZGlvIGlucHV0cy4KKyAgLy8gVGhpcyBhcHBy
b2FjaCB3b3JrcyBhY3Jvc3MgYWxsIGJyb3dzZXJzLCB3aGVyZWFzIGBjaGFuZ2VgIGRvZXMgbm90
IGZpcmUKKyAgLy8gdW50aWwgYGJsdXJgIGluIElFOC4KKyAgcmV0dXJuICgKKyAgICBlbGVtLm5v
ZGVOYW1lID09PSAnSU5QVVQnICYmCisgICAgKGVsZW0udHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBl
bGVtLnR5cGUgPT09ICdyYWRpbycpCisgICk7Cit9CisKK2Z1bmN0aW9uIGdldFRhcmdldElERm9y
Q2xpY2tFdmVudCgKKyAgICB0b3BMZXZlbFR5cGUsCisgICAgdG9wTGV2ZWxUYXJnZXQsCisgICAg
dG9wTGV2ZWxUYXJnZXRJRCkgeworICBpZiAodG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVz
LnRvcENsaWNrKSB7CisgICAgcmV0dXJuIHRvcExldmVsVGFyZ2V0SUQ7CisgIH0KK30KKworLyoq
CisgKiBUaGlzIHBsdWdpbiBjcmVhdGVzIGFuIGBvbkNoYW5nZWAgZXZlbnQgdGhhdCBub3JtYWxp
emVzIGNoYW5nZSBldmVudHMKKyAqIGFjcm9zcyBmb3JtIGVsZW1lbnRzLiBUaGlzIGV2ZW50IGZp
cmVzIGF0IGEgdGltZSB3aGVuIGl0J3MgcG9zc2libGUgdG8KKyAqIGNoYW5nZSB0aGUgZWxlbWVu
dCdzIHZhbHVlIHdpdGhvdXQgc2VlaW5nIGEgZmxpY2tlci4KKyAqCisgKiBTdXBwb3J0ZWQgZWxl
bWVudHMgYXJlOgorICogLSBpbnB1dCAoc2VlIGBzdXBwb3J0ZWRJbnB1dFR5cGVzYCkKKyAqIC0g
dGV4dGFyZWEKKyAqIC0gc2VsZWN0CisgKi8KK3ZhciBDaGFuZ2VFdmVudFBsdWdpbiA9IHsKKwor
ICBldmVudFR5cGVzOiBldmVudFR5cGVzLAorCisgIC8qKgorICAgKiBAcGFyYW0ge3N0cmluZ30g
dG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENvbnN0YW50c2AuCisgICAqIEBwYXJhbSB7
RE9NRXZlbnRUYXJnZXR9IHRvcExldmVsVGFyZ2V0IFRoZSBsaXN0ZW5pbmcgY29tcG9uZW50IHJv
b3Qgbm9kZS4KKyAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVGFyZ2V0SUQgSUQgb2YgYHRv
cExldmVsVGFyZ2V0YC4KKyAgICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBi
cm93c2VyIGV2ZW50LgorICAgKiBAcmV0dXJuIHsqfSBBbiBhY2N1bXVsYXRpb24gb2Ygc3ludGhl
dGljIGV2ZW50cy4KKyAgICogQHNlZSB7RXZlbnRQbHVnaW5IdWIuZXh0cmFjdEV2ZW50c30KKyAg
ICovCisgIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uKAorICAgICAgdG9wTGV2ZWxUeXBlLAorICAg
ICAgdG9wTGV2ZWxUYXJnZXQsCisgICAgICB0b3BMZXZlbFRhcmdldElELAorICAgICAgbmF0aXZl
RXZlbnQpIHsKKworICAgIHZhciBnZXRUYXJnZXRJREZ1bmMsIGhhbmRsZUV2ZW50RnVuYzsKKyAg
ICBpZiAoc2hvdWxkVXNlQ2hhbmdlRXZlbnQodG9wTGV2ZWxUYXJnZXQpKSB7CisgICAgICBpZiAo
ZG9lc0NoYW5nZUV2ZW50QnViYmxlKSB7CisgICAgICAgIGdldFRhcmdldElERnVuYyA9IGdldFRh
cmdldElERm9yQ2hhbmdlRXZlbnQ7CisgICAgICB9IGVsc2UgeworICAgICAgICBoYW5kbGVFdmVu
dEZ1bmMgPSBoYW5kbGVFdmVudHNGb3JDaGFuZ2VFdmVudElFODsKKyAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKHNob3VsZFVzZUlucHV0RXZlbnQodG9wTGV2ZWxUYXJnZXQpKSB7CisgICAgICBpZiAo
aXNJbnB1dEV2ZW50U3VwcG9ydGVkKSB7CisgICAgICAgIGdldFRhcmdldElERnVuYyA9IGdldFRh
cmdldElERm9ySW5wdXRFdmVudDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGdldFRhcmdldElE
RnVuYyA9IGdldFRhcmdldElERm9ySW5wdXRFdmVudElFOworICAgICAgICBoYW5kbGVFdmVudEZ1
bmMgPSBoYW5kbGVFdmVudHNGb3JJbnB1dEV2ZW50SUU7CisgICAgICB9CisgICAgfSBlbHNlIGlm
IChzaG91bGRVc2VDbGlja0V2ZW50KHRvcExldmVsVGFyZ2V0KSkgeworICAgICAgZ2V0VGFyZ2V0
SURGdW5jID0gZ2V0VGFyZ2V0SURGb3JDbGlja0V2ZW50OworICAgIH0KKworICAgIGlmIChnZXRU
YXJnZXRJREZ1bmMpIHsKKyAgICAgIHZhciB0YXJnZXRJRCA9IGdldFRhcmdldElERnVuYygKKyAg
ICAgICAgdG9wTGV2ZWxUeXBlLAorICAgICAgICB0b3BMZXZlbFRhcmdldCwKKyAgICAgICAgdG9w
TGV2ZWxUYXJnZXRJRAorICAgICAgKTsKKyAgICAgIGlmICh0YXJnZXRJRCkgeworICAgICAgICB2
YXIgZXZlbnQgPSBTeW50aGV0aWNFdmVudC5nZXRQb29sZWQoCisgICAgICAgICAgZXZlbnRUeXBl
cy5jaGFuZ2UsCisgICAgICAgICAgdGFyZ2V0SUQsCisgICAgICAgICAgbmF0aXZlRXZlbnQKKyAg
ICAgICAgKTsKKyAgICAgICAgRXZlbnRQcm9wYWdhdG9ycy5hY2N1bXVsYXRlVHdvUGhhc2VEaXNw
YXRjaGVzKGV2ZW50KTsKKyAgICAgICAgcmV0dXJuIGV2ZW50OworICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChoYW5kbGVFdmVudEZ1bmMpIHsKKyAgICAgIGhhbmRsZUV2ZW50RnVuYygKKyAgICAg
ICAgdG9wTGV2ZWxUeXBlLAorICAgICAgICB0b3BMZXZlbFRhcmdldCwKKyAgICAgICAgdG9wTGV2
ZWxUYXJnZXRJRAorICAgICAgKTsKKyAgICB9CisgIH0KKworfTsKKworbW9kdWxlLmV4cG9ydHMg
PSBDaGFuZ2VFdmVudFBsdWdpbjsKKworfSkoKQorfSx7Ii4vRXZlbnRDb25zdGFudHMiOjEzLCIu
L0V2ZW50UGx1Z2luSHViIjoxNSwiLi9FdmVudFByb3BhZ2F0b3JzIjoxOCwiLi9FeGVjdXRpb25F
bnZpcm9ubWVudCI6MTksIi4vU3ludGhldGljRXZlbnQiOjUwLCIuL2lzRXZlbnRTdXBwb3J0ZWQi
Ojc2LCIuL2tleU9mIjo3OX1dLDY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewor
KGZ1bmN0aW9uKCl7LyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAq
IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGlj
ZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5j
ZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNl
bnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4w
CisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBp
biB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMg
ZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBP
UiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICog
U2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1p
c3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHBy
b3ZpZGVzTW9kdWxlIERPTUNoaWxkcmVuT3BlcmF0aW9ucworICovCisKKy8vIEVtcHR5IGJsb2Nr
cyBpbXByb3ZlIHJlYWRhYmlsaXR5IHNvIGRpc2FibGUgdGhhdCB3YXJuaW5nCisvLyBqc2hpbnQg
LVcwMzUKKworInVzZSBzdHJpY3QiOworCit2YXIgRGFuZ2VyID0gcmVxdWlyZSgiLi9EYW5nZXIi
KTsKKwordmFyIGluc2VydE5vZGVBdCA9IHJlcXVpcmUoIi4vaW5zZXJ0Tm9kZUF0Iik7Cit2YXIg
a2V5T2YgPSByZXF1aXJlKCIuL2tleU9mIik7Cit2YXIgdGhyb3dJZiA9IHJlcXVpcmUoIi4vdGhy
b3dJZiIpOworCit2YXIgTk9OX0lOQ1JFQVNJTkdfT1BFUkFUSU9OUzsKK2lmICh0cnVlKSB7Cisg
IE5PTl9JTkNSRUFTSU5HX09QRVJBVElPTlMgPQorICAgICdET00gY2hpbGQgbWFuYWdlbWVudCBv
cGVyYXRpb25zIG11c3QgYmUgcHJvdmlkZWQgaW4gb3JkZXIgJyArCisgICAgJ29mIGluY3JlYXNp
bmcgZGVzdGluYXRpb24gaW5kZXguIFRoaXMgaXMgbGlrZWx5IGFuIGlzc3VlIHdpdGggJyArCisg
ICAgJ3RoZSBjb3JlIGZyYW1ld29yay4nOworfQorCit2YXIgTU9WRV9OT0RFX0FUX09SSUdfSU5E
RVggPSBrZXlPZih7bW92ZUZyb206IG51bGx9KTsKK3ZhciBJTlNFUlRfTUFSS1VQID0ga2V5T2Yo
e2luc2VydE1hcmt1cDogbnVsbH0pOwordmFyIFJFTU9WRV9BVCA9IGtleU9mKHtyZW1vdmVBdDog
bnVsbH0pOworCisvKioKKyAqIEluIG9yZGVyIHRvIGNhcnJ5IG91dCBtb3ZlbWVudCBvZiBET00g
bm9kZXMgd2l0aG91dCBrbm93aW5nIHRoZWlyIElEcywgd2UKKyAqIGhhdmUgdG8gZmlyc3Qgc3Rv
cmUga25vd2xlZGdlIGFib3V0IG5vZGVzJyBvcmlnaW5hbCBpbmRpY2VzIGJlZm9yZSBiZWdpbm5p
bmcKKyAqIHRvIGNhcnJ5IG91dCB0aGUgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucy4gT25jZSB3ZSBi
ZWdpbiB0aGUgc2VxdWVuY2UsIHRoZSBET00KKyAqIGluZGljZXMgaW4gZnV0dXJlIGluc3RydWN0
aW9ucyBhcmUgbm8gbG9uZ2VyIHZhbGlkLgorICoKKyAqIEBwYXJhbSB7RWxlbWVudH0gcGFyZW50
IFBhcmVudCBET00gbm9kZS4KKyAqIEBwYXJhbSB7T2JqZWN0fSBjaGlsZE9wZXJhdGlvbnMgRGVz
Y3JpcHRpb24gb2YgY2hpbGQgb3BlcmF0aW9ucy4KKyAqIEByZXR1cm4ge0FycmF5P30gU3BhcnNl
IGFycmF5IGNvbnRhaW5pbmcgZWxlbWVudHMgYnkgdGhlaXIgY3VycmVudCBpbmRleCBpbgorICog
dGhlIERPTS4KKyAqLwordmFyIF9nZXROb2Rlc0J5T3JpZ2luYWxJbmRleCA9IGZ1bmN0aW9uKHBh
cmVudCwgY2hpbGRPcGVyYXRpb25zKSB7CisgIHZhciBub2Rlc0J5T3JpZ2luYWxJbmRleDsgLy8g
U3BhcnNlIGFycmF5LgorICB2YXIgY2hpbGRPcGVyYXRpb247CisgIHZhciBvcmlnSW5kZXg7Cisg
IGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRPcGVyYXRpb25zLmxlbmd0aDsgaSsrKSB7CisgICAg
Y2hpbGRPcGVyYXRpb24gPSBjaGlsZE9wZXJhdGlvbnNbaV07CisgICAgaWYgKE1PVkVfTk9ERV9B
VF9PUklHX0lOREVYIGluIGNoaWxkT3BlcmF0aW9uKSB7CisgICAgICBub2Rlc0J5T3JpZ2luYWxJ
bmRleCA9IG5vZGVzQnlPcmlnaW5hbEluZGV4IHx8IFtdOworICAgICAgb3JpZ0luZGV4ID0gY2hp
bGRPcGVyYXRpb24ubW92ZUZyb207CisgICAgICBub2Rlc0J5T3JpZ2luYWxJbmRleFtvcmlnSW5k
ZXhdID0gcGFyZW50LmNoaWxkTm9kZXNbb3JpZ0luZGV4XTsKKyAgICB9IGVsc2UgaWYgKFJFTU9W
RV9BVCBpbiBjaGlsZE9wZXJhdGlvbikgeworICAgICAgbm9kZXNCeU9yaWdpbmFsSW5kZXggPSBu
b2Rlc0J5T3JpZ2luYWxJbmRleCB8fCBbXTsKKyAgICAgIG9yaWdJbmRleCA9IGNoaWxkT3BlcmF0
aW9uLnJlbW92ZUF0OworICAgICAgbm9kZXNCeU9yaWdpbmFsSW5kZXhbb3JpZ0luZGV4XSA9IHBh
cmVudC5jaGlsZE5vZGVzW29yaWdJbmRleF07CisgICAgfQorICB9CisgIHJldHVybiBub2Rlc0J5
T3JpZ2luYWxJbmRleDsKK307CisKKy8qKgorICogUmVtb3ZlcyBET00gZWxlbWVudHMgZnJvbSB0
aGVpciBwYXJlbnQsIG9yIG1vdmVkLgorICogQHBhcmFtIHtFbGVtZW50fSBwYXJlbnQgUGFyZW50
IERPTSBub2RlLgorICogQHBhcmFtIHtBcnJheX0gbm9kZXNCeU9yaWdpbmFsSW5kZXggQ2hpbGQg
bm9kZXMgYnkgdGhlaXIgb3JpZ2luYWwgaW5kZXgKKyAqIChwb3RlbnRpYWxseSBzcGFyc2UuKQor
ICovCit2YXIgX3JlbW92ZUNoaWxkcmVuQnlPcmlnaW5hbEluZGV4ID0gZnVuY3Rpb24ocGFyZW50
LCBub2Rlc0J5T3JpZ2luYWxJbmRleCkgeworICBmb3IgKHZhciBqID0gMDsgaiA8IG5vZGVzQnlP
cmlnaW5hbEluZGV4Lmxlbmd0aDsgaisrKSB7CisgICAgdmFyIG5vZGVUb1JlbW92ZSA9IG5vZGVz
QnlPcmlnaW5hbEluZGV4W2pdOworICAgIGlmIChub2RlVG9SZW1vdmUpIHsgICAgIC8vIFdlIHVz
ZWQgYSBzcGFyc2UgYXJyYXkuCisgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQobm9kZXNCeU9yaWdp
bmFsSW5kZXhbal0pOworICAgIH0KKyAgfQorfTsKKworLyoqCisgKiBPbmNlIGFsbCBub2RlcyB0
aGF0IHdpbGwgYmUgcmVtb3ZlZCBvciBtb3ZlZCAtIGFyZSByZW1vdmVkIGZyb20gdGhlIHBhcmVu
dAorICogbm9kZSwgd2UgY2FuIGJlZ2luIHRoZSBwcm9jZXNzIG9mIHBsYWNpbmcgbm9kZXMgaW50
byB0aGVpciBmaW5hbCBsb2NhdGlvbnMuCisgKiBXZSBtdXN0IHBlcmZvcm0gYWxsIG9wZXJhdGlv
bnMgaW4gdGhlIG9yZGVyIG9mIHRoZSBmaW5hbCBET00gaW5kZXggLQorICogb3RoZXJ3aXNlLCB3
ZSBjb3VsZG4ndCBjb3VudCBvbiB0aGUgZmFjdCB0aGF0IGFuIGluc2VydGlvbiBhdCBpbmRleCBY
LCB3aWxsCisgKiByZW1haW4gYXQgaW5kZXggWC4gVGhpcyB3aWxsIGl0ZXJhdGUgdGhyb3VnaCB0
aGUgY2hpbGQgb3BlcmF0aW9ucywgYWRkaW5nCisgKiBjb250ZW50IHdoZXJlIG5lZWRlZCwgc2tp
cCBvdmVyIHJlbW92YWxzICh0aGV5J3ZlIGFscmVhZHkgYmVlbiByZW1vdmVkKSBhbmQKKyAqIGlu
c2VydCAibW92ZWQiIEVsZW1lbnRzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHJlbW92ZWQuIFRoZSAi
bW92ZWQiIGVsZW1lbnRzCisgKiBhcmUgb25seSB0ZW1wb3JhcmlseSByZW1vdmVkIGZyb20gdGhl
IHBhcmVudCwgc28gdGhhdCBpbmRleCBjYWxjdWxhdGlvbnMgY2FuCisgKiBiZSBtYW5hZ2VhYmxl
IGFuZCBwZXJmb3JtIHdlbGwgaW4gdGhlIGNhc2VzIHRoYXQgbWF0dGVyLgorICovCit2YXIgX3Bs
YWNlTm9kZXNBdERlc3RpbmF0aW9uID0KKyAgZnVuY3Rpb24ocGFyZW50LCBjaGlsZE9wZXJhdGlv
bnMsIG5vZGVzQnlPcmlnaW5hbEluZGV4KSB7CisgICAgdmFyIG9yaWdOb2RlOworICAgIHZhciBm
aW5hbEluZGV4OworICAgIHZhciBsYXN0RmluYWxJbmRleCA9IC0xOworICAgIHZhciBjaGlsZE9w
ZXJhdGlvbjsKKyAgICBmb3IgKHZhciBrID0gMDsgayA8IGNoaWxkT3BlcmF0aW9ucy5sZW5ndGg7
IGsrKykgeworICAgICAgY2hpbGRPcGVyYXRpb24gPSBjaGlsZE9wZXJhdGlvbnNba107CisgICAg
ICBpZiAoTU9WRV9OT0RFX0FUX09SSUdfSU5ERVggaW4gY2hpbGRPcGVyYXRpb24pIHsKKyAgICAg
ICAgb3JpZ05vZGUgPSBub2Rlc0J5T3JpZ2luYWxJbmRleFtjaGlsZE9wZXJhdGlvbi5tb3ZlRnJv
bV07CisgICAgICAgIGZpbmFsSW5kZXggPSBjaGlsZE9wZXJhdGlvbi5maW5hbEluZGV4OworICAg
ICAgICBpbnNlcnROb2RlQXQocGFyZW50LCBvcmlnTm9kZSwgZmluYWxJbmRleCk7CisgICAgICAg
IGlmICh0cnVlKSB7CisgICAgICAgICAgdGhyb3dJZihmaW5hbEluZGV4IDw9IGxhc3RGaW5hbElu
ZGV4LCBOT05fSU5DUkVBU0lOR19PUEVSQVRJT05TKTsKKyAgICAgICAgICBsYXN0RmluYWxJbmRl
eCA9IGZpbmFsSW5kZXg7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSBpZiAoUkVNT1ZFX0FUIGlu
IGNoaWxkT3BlcmF0aW9uKSB7CisgICAgICB9IGVsc2UgaWYgKElOU0VSVF9NQVJLVVAgaW4gY2hp
bGRPcGVyYXRpb24pIHsKKyAgICAgICAgZmluYWxJbmRleCA9IGNoaWxkT3BlcmF0aW9uLmZpbmFs
SW5kZXg7CisgICAgICAgIHZhciBtYXJrdXAgPSBjaGlsZE9wZXJhdGlvbi5pbnNlcnRNYXJrdXA7
CisgICAgICAgIERhbmdlci5kYW5nZXJvdXNseUluc2VydE1hcmt1cEF0KHBhcmVudCwgbWFya3Vw
LCBmaW5hbEluZGV4KTsKKyAgICAgICAgaWYgKHRydWUpIHsKKyAgICAgICAgICB0aHJvd0lmKGZp
bmFsSW5kZXggPD0gbGFzdEZpbmFsSW5kZXgsIE5PTl9JTkNSRUFTSU5HX09QRVJBVElPTlMpOwor
ICAgICAgICAgIGxhc3RGaW5hbEluZGV4ID0gZmluYWxJbmRleDsKKyAgICAgICAgfQorICAgICAg
fQorICAgIH0KKyAgfTsKKwordmFyIG1hbmFnZUNoaWxkcmVuID0gZnVuY3Rpb24ocGFyZW50LCBj
aGlsZE9wZXJhdGlvbnMpIHsKKyAgdmFyIG5vZGVzQnlPcmlnaW5hbEluZGV4ID0gX2dldE5vZGVz
QnlPcmlnaW5hbEluZGV4KHBhcmVudCwgY2hpbGRPcGVyYXRpb25zKTsKKyAgaWYgKG5vZGVzQnlP
cmlnaW5hbEluZGV4KSB7CisgICAgX3JlbW92ZUNoaWxkcmVuQnlPcmlnaW5hbEluZGV4KHBhcmVu
dCwgbm9kZXNCeU9yaWdpbmFsSW5kZXgpOworICB9CisgIF9wbGFjZU5vZGVzQXREZXN0aW5hdGlv
bihwYXJlbnQsIGNoaWxkT3BlcmF0aW9ucywgbm9kZXNCeU9yaWdpbmFsSW5kZXgpOworfTsKKwor
LyoqCisgKiBBbHNvIHJlZXhwb3J0IGFsbCBvZiB0aGUgZGFuZ2Vyb3VzIGZ1bmN0aW9ucy4gSXQg
aGVscHMgdG8gaGF2ZSBhbGwgZGFuZ2Vyb3VzCisgKiBmdW5jdGlvbnMgbG9jYXRlZCBpbiBhIHNp
bmdsZSBtb2R1bGUgYERhbmdlcmAuCisgKi8KK3ZhciBET01DaGlsZHJlbk9wZXJhdGlvbnMgPSB7
CisgIGRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwOiBEYW5nZXIuZGFuZ2Vyb3VzbHlS
ZXBsYWNlTm9kZVdpdGhNYXJrdXAsCisgIG1hbmFnZUNoaWxkcmVuOiBtYW5hZ2VDaGlsZHJlbgor
fTsKKworbW9kdWxlLmV4cG9ydHMgPSBET01DaGlsZHJlbk9wZXJhdGlvbnM7CisKK30pKCkKK30s
eyIuL0RhbmdlciI6OSwiLi9pbnNlcnROb2RlQXQiOjc0LCIuL2tleU9mIjo3OSwiLi90aHJvd0lm
Ijo4Nn1dLDc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5
cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFj
aGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3Qg
dXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICog
WW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3
dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVk
IGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICog
ZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElT
IiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5E
LCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUg
c3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlv
bnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxlIERPTVByb3BlcnR5
CisgKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seQorICovCisKKy8qanNsaW50IGJpdHdpc2U6IHRy
dWUgKi8KKworInVzZSBzdHJpY3QiOworCit2YXIgaW52YXJpYW50ID0gcmVxdWlyZSgiLi9pbnZh
cmlhbnQiKTsKKwordmFyIERPTVByb3BlcnR5SW5qZWN0aW9uID0geworICAvKioKKyAgICogTWFw
cGluZyBmcm9tIG5vcm1hbGl6ZWQsIGNhbWVsY2FzZWQgcHJvcGVydHkgbmFtZXMgdG8gYSBjb25m
aWd1cmF0aW9uIHRoYXQKKyAgICogc3BlY2lmaWVzIGhvdyB0aGUgYXNzb2NpYXRlZCBET00gcHJv
cGVydHkgc2hvdWxkIGJlIGFjY2Vzc2VkIG9yIHJlbmRlcmVkLgorICAgKi8KKyAgTVVTVF9VU0Vf
QVRUUklCVVRFOiAweDEsCisgIE1VU1RfVVNFX1BST1BFUlRZOiAgMHgyLAorICBIQVNfQk9PTEVB
Tl9WQUxVRTogIDB4NCwKKyAgSEFTX1NJREVfRUZGRUNUUzogICAweDgsCisKKyAgLyoqCisgICAq
IEluamVjdCBzb21lIHNwZWNpYWxpemVkIGtub3dsZWRnZSBhYm91dCB0aGUgRE9NLiBUaGlzIHRh
a2VzIGEgY29uZmlnIG9iamVjdAorICAgKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoK
KyAgICoKKyAgICogaXNDdXN0b21BdHRyaWJ1dGU6IGZ1bmN0aW9uIHRoYXQgZ2l2ZW4gYW4gYXR0
cmlidXRlIG5hbWUgd2lsbCByZXR1cm4gdHJ1ZQorICAgKiBpZiBpdCBjYW4gYmUgaW5zZXJ0ZWQg
aW50byB0aGUgRE9NIHZlcmJhdGltLiBVc2VmdWwgZm9yIGRhdGEtKiBvciBhcmlhLSoKKyAgICog
YXR0cmlidXRlcyB3aGVyZSBpdCdzIGltcG9zc2libGUgdG8gZW51bWVyYXRlIGFsbCBvZiB0aGUg
cG9zc2libGUKKyAgICogYXR0cmlidXRlIG5hbWVzLAorICAgKgorICAgKiBQcm9wZXJ0aWVzOiBv
YmplY3QgbWFwcGluZyBET00gcHJvcGVydHkgbmFtZSB0byBvbmUgb2YgdGhlCisgICAqIERPTVBy
b3BlcnR5SW5qZWN0aW9uIGNvbnN0YW50cyBvciBudWxsLiBJZiB5b3VyIGF0dHJpYnV0ZSBpc24n
dCBpbiBoZXJlLAorICAgKiBpdCB3b24ndCBnZXQgd3JpdHRlbiB0byB0aGUgRE9NLgorICAgKgor
ICAgKiBET01BdHRyaWJ1dGVOYW1lczogb2JqZWN0IG1hcHBpbmcgUmVhY3QgYXR0cmlidXRlIG5h
bWUgdG8gdGhlIERPTQorICAgKiBhdHRyaWJ1dGUgbmFtZS4gQXR0cmlidXRlIG5hbWVzIG5vdCBz
cGVjaWZpZWQgdXNlIHRoZSAqKmxvd2VyY2FzZSoqCisgICAqIG5vcm1hbGl6ZWQgbmFtZS4KKyAg
ICoKKyAgICogRE9NUHJvcGVydHlOYW1lczogc2ltaWxhciB0byBET01BdHRyaWJ1dGVOYW1lcyBi
dXQgZm9yIERPTSBwcm9wZXJ0aWVzLgorICAgKiBQcm9wZXJ0eSBuYW1lcyBub3Qgc3BlY2lmaWVk
IHVzZSB0aGUgbm9ybWFsaXplZCBuYW1lLgorICAgKgorICAgKiBET01NdXRhdGlvbk1ldGhvZHM6
IFByb3BlcnRpZXMgdGhhdCByZXF1aXJlIHNwZWNpYWwgbXV0YXRpb24gbWV0aG9kcy4gSWYKKyAg
ICogYHZhbHVlYCBpcyB1bmRlZmluZWQsIHRoZSBtdXRhdGlvbiBtZXRob2Qgc2hvdWxkIHVuc2V0
IHRoZSBwcm9wZXJ0eS4KKyAgICoKKyAgICogQHBhcmFtIHtvYmplY3R9IGRvbVByb3BlcnR5Q29u
ZmlnIHRoZSBjb25maWcgYXMgZGVzY3JpYmVkIGFib3ZlLgorICAgKi8KKyAgaW5qZWN0RE9NUHJv
cGVydHlDb25maWc6IGZ1bmN0aW9uKGRvbVByb3BlcnR5Q29uZmlnKSB7CisgICAgdmFyIFByb3Bl
cnRpZXMgPSBkb21Qcm9wZXJ0eUNvbmZpZy5Qcm9wZXJ0aWVzIHx8IHt9OworICAgIHZhciBET01B
dHRyaWJ1dGVOYW1lcyA9IGRvbVByb3BlcnR5Q29uZmlnLkRPTUF0dHJpYnV0ZU5hbWVzIHx8IHt9
OworICAgIHZhciBET01Qcm9wZXJ0eU5hbWVzID0gZG9tUHJvcGVydHlDb25maWcuRE9NUHJvcGVy
dHlOYW1lcyB8fCB7fTsKKyAgICB2YXIgRE9NTXV0YXRpb25NZXRob2RzID0gZG9tUHJvcGVydHlD
b25maWcuRE9NTXV0YXRpb25NZXRob2RzIHx8IHt9OworCisgICAgaWYgKGRvbVByb3BlcnR5Q29u
ZmlnLmlzQ3VzdG9tQXR0cmlidXRlKSB7CisgICAgICBET01Qcm9wZXJ0eS5faXNDdXN0b21BdHRy
aWJ1dGVGdW5jdGlvbnMucHVzaCgKKyAgICAgICAgZG9tUHJvcGVydHlDb25maWcuaXNDdXN0b21B
dHRyaWJ1dGUKKyAgICAgICk7CisgICAgfQorCisgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gUHJv
cGVydGllcykgeworICAgICAgaW52YXJpYW50KAorICAgICAgICAhRE9NUHJvcGVydHkuaXNTdGFu
ZGFyZE5hbWVbcHJvcE5hbWVdLAorICAgICAgICAnaW5qZWN0RE9NUHJvcGVydHlDb25maWcoLi4u
KTogWW91XCdyZSB0cnlpbmcgdG8gaW5qZWN0IERPTSBwcm9wZXJ0eSAnICsKKyAgICAgICAgJ1wn
JXNcJyB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIGluamVjdGVkLiBZb3UgbWF5IGJlIGFjY2lkZW50
YWxseSAnICsKKyAgICAgICAgJ2luamVjdGluZyB0aGUgc2FtZSBET00gcHJvcGVydHkgY29uZmln
IHR3aWNlLCBvciB5b3UgbWF5IGJlICcgKworICAgICAgICAnaW5qZWN0aW5nIHR3byBjb25maWdz
IHRoYXQgaGF2ZSBjb25mbGljdGluZyBwcm9wZXJ0eSBuYW1lcy4nLAorICAgICAgICBwcm9wTmFt
ZQorICAgICAgKTsKKworICAgICAgRE9NUHJvcGVydHkuaXNTdGFuZGFyZE5hbWVbcHJvcE5hbWVd
ID0gdHJ1ZTsKKworICAgICAgRE9NUHJvcGVydHkuZ2V0QXR0cmlidXRlTmFtZVtwcm9wTmFtZV0g
PQorICAgICAgICBET01BdHRyaWJ1dGVOYW1lc1twcm9wTmFtZV0gfHwgcHJvcE5hbWUudG9Mb3dl
ckNhc2UoKTsKKworICAgICAgRE9NUHJvcGVydHkuZ2V0UHJvcGVydHlOYW1lW3Byb3BOYW1lXSA9
CisgICAgICAgIERPTVByb3BlcnR5TmFtZXNbcHJvcE5hbWVdIHx8IHByb3BOYW1lOworCisgICAg
ICB2YXIgbXV0YXRpb25NZXRob2QgPSBET01NdXRhdGlvbk1ldGhvZHNbcHJvcE5hbWVdOworICAg
ICAgaWYgKG11dGF0aW9uTWV0aG9kKSB7CisgICAgICAgIERPTVByb3BlcnR5LmdldE11dGF0aW9u
TWV0aG9kW3Byb3BOYW1lXSA9IG11dGF0aW9uTWV0aG9kOworICAgICAgfQorCisgICAgICB2YXIg
cHJvcENvbmZpZyA9IFByb3BlcnRpZXNbcHJvcE5hbWVdOworICAgICAgRE9NUHJvcGVydHkubXVz
dFVzZUF0dHJpYnV0ZVtwcm9wTmFtZV0gPQorICAgICAgICBwcm9wQ29uZmlnICYgRE9NUHJvcGVy
dHlJbmplY3Rpb24uTVVTVF9VU0VfQVRUUklCVVRFOworICAgICAgRE9NUHJvcGVydHkubXVzdFVz
ZVByb3BlcnR5W3Byb3BOYW1lXSA9CisgICAgICAgIHByb3BDb25maWcgJiBET01Qcm9wZXJ0eUlu
amVjdGlvbi5NVVNUX1VTRV9QUk9QRVJUWTsKKyAgICAgIERPTVByb3BlcnR5Lmhhc0Jvb2xlYW5W
YWx1ZVtwcm9wTmFtZV0gPQorICAgICAgICBwcm9wQ29uZmlnICYgRE9NUHJvcGVydHlJbmplY3Rp
b24uSEFTX0JPT0xFQU5fVkFMVUU7CisgICAgICBET01Qcm9wZXJ0eS5oYXNTaWRlRWZmZWN0c1tw
cm9wTmFtZV0gPQorICAgICAgICBwcm9wQ29uZmlnICYgRE9NUHJvcGVydHlJbmplY3Rpb24uSEFT
X1NJREVfRUZGRUNUUzsKKworICAgICAgaW52YXJpYW50KAorICAgICAgICAhRE9NUHJvcGVydHku
bXVzdFVzZUF0dHJpYnV0ZVtwcm9wTmFtZV0gfHwKKyAgICAgICAgICAhRE9NUHJvcGVydHkubXVz
dFVzZVByb3BlcnR5W3Byb3BOYW1lXSwKKyAgICAgICAgJ0RPTVByb3BlcnR5OiBDYW5ub3QgdXNl
IHJlcXVpcmUgdXNpbmcgYm90aCBhdHRyaWJ1dGUgYW5kIHByb3BlcnR5OiAlcycsCisgICAgICAg
IHByb3BOYW1lCisgICAgICApOworICAgICAgaW52YXJpYW50KAorICAgICAgICBET01Qcm9wZXJ0
eS5tdXN0VXNlUHJvcGVydHlbcHJvcE5hbWVdIHx8CisgICAgICAgICAgIURPTVByb3BlcnR5Lmhh
c1NpZGVFZmZlY3RzW3Byb3BOYW1lXSwKKyAgICAgICAgJ0RPTVByb3BlcnR5OiBQcm9wZXJ0aWVz
IHRoYXQgaGF2ZSBzaWRlIGVmZmVjdHMgbXVzdCB1c2UgcHJvcGVydHk6ICVzJywKKyAgICAgICAg
cHJvcE5hbWUKKyAgICAgICk7CisgICAgfQorICB9Cit9OwordmFyIGRlZmF1bHRWYWx1ZUNhY2hl
ID0ge307CisKKy8qKgorICogRE9NUHJvcGVydHkgZXhwb3J0cyBsb29rdXAgb2JqZWN0cyB0aGF0
IGNhbiBiZSB1c2VkIGxpa2UgZnVuY3Rpb25zOgorICoKKyAqICAgPiBET01Qcm9wZXJ0eS5pc1Zh
bGlkWydpZCddCisgKiAgIHRydWUKKyAqICAgPiBET01Qcm9wZXJ0eS5pc1ZhbGlkWydmb29iYXIn
XQorICogICB1bmRlZmluZWQKKyAqCisgKiBBbHRob3VnaCB0aGlzIG1heSBiZSBjb25mdXNpbmcs
IGl0IHBlcmZvcm1zIGJldHRlciBpbiBnZW5lcmFsLgorICoKKyAqIEBzZWUgaHR0cDovL2pzcGVy
Zi5jb20va2V5LWV4aXN0cworICogQHNlZSBodHRwOi8vanNwZXJmLmNvbS9rZXktbWlzc2luZwor
ICovCit2YXIgRE9NUHJvcGVydHkgPSB7CisKKyAgLyoqCisgICAqIENoZWNrcyB3aGV0aGVyIGEg
cHJvcGVydHkgbmFtZSBpcyBhIHN0YW5kYXJkIHByb3BlcnR5LgorICAgKiBAdHlwZSB7T2JqZWN0
fQorICAgKi8KKyAgaXNTdGFuZGFyZE5hbWU6IHt9LAorCisgIC8qKgorICAgKiBNYXBwaW5nIGZy
b20gbm9ybWFsaXplZCBuYW1lcyB0byBhdHRyaWJ1dGUgbmFtZXMgdGhhdCBkaWZmZXIuIEF0dHJp
YnV0ZQorICAgKiBuYW1lcyBhcmUgdXNlZCB3aGVuIHJlbmRlcmluZyBtYXJrdXAgb3Igd2l0aCBg
KkF0dHJpYnV0ZSgpYC4KKyAgICogQHR5cGUge09iamVjdH0KKyAgICovCisgIGdldEF0dHJpYnV0
ZU5hbWU6IHt9LAorCisgIC8qKgorICAgKiBNYXBwaW5nIGZyb20gbm9ybWFsaXplZCBuYW1lcyB0
byBwcm9wZXJ0aWVzIG9uIERPTSBub2RlIGluc3RhbmNlcy4KKyAgICogKFRoaXMgaW5jbHVkZXMg
cHJvcGVydGllcyB0aGF0IG11dGF0ZSBkdWUgdG8gZXh0ZXJuYWwgZmFjdG9ycy4pCisgICAqIEB0
eXBlIHtPYmplY3R9CisgICAqLworICBnZXRQcm9wZXJ0eU5hbWU6IHt9LAorCisgIC8qKgorICAg
KiBNYXBwaW5nIGZyb20gbm9ybWFsaXplZCBuYW1lcyB0byBtdXRhdGlvbiBtZXRob2RzLiBUaGlz
IHdpbGwgb25seSBleGlzdCBpZgorICAgKiBtdXRhdGlvbiBjYW5ub3QgYmUgc2V0IHNpbXBseSBi
eSB0aGUgcHJvcGVydHkgb3IgYHNldEF0dHJpYnV0ZSgpYC4KKyAgICogQHR5cGUge09iamVjdH0K
KyAgICovCisgIGdldE11dGF0aW9uTWV0aG9kOiB7fSwKKworICAvKioKKyAgICogV2hldGhlciB0
aGUgcHJvcGVydHkgbXVzdCBiZSBhY2Nlc3NlZCBhbmQgbXV0YXRlZCBhcyBhbiBvYmplY3QgcHJv
cGVydHkuCisgICAqIEB0eXBlIHtPYmplY3R9CisgICAqLworICBtdXN0VXNlQXR0cmlidXRlOiB7
fSwKKworICAvKioKKyAgICogV2hldGhlciB0aGUgcHJvcGVydHkgbXVzdCBiZSBhY2Nlc3NlZCBh
bmQgbXV0YXRlZCB1c2luZyBgKkF0dHJpYnV0ZSgpYC4KKyAgICogKFRoaXMgaW5jbHVkZXMgYW55
dGhpbmcgdGhhdCBmYWlscyBgPHByb3BOYW1lPiBpbiA8ZWxlbWVudD5gLikKKyAgICogQHR5cGUg
e09iamVjdH0KKyAgICovCisgIG11c3RVc2VQcm9wZXJ0eToge30sCisKKyAgLyoqCisgICAqIFdo
ZXRoZXIgdGhlIHByb3BlcnR5IHNob3VsZCBiZSByZW1vdmVkIHdoZW4gc2V0IHRvIGEgZmFsc2V5
IHZhbHVlLgorICAgKiBAdHlwZSB7T2JqZWN0fQorICAgKi8KKyAgaGFzQm9vbGVhblZhbHVlOiB7
fSwKKworICAvKioKKyAgICogV2hldGhlciBvciBub3Qgc2V0dGluZyBhIHZhbHVlIGNhdXNlcyBz
aWRlIGVmZmVjdHMgc3VjaCBhcyB0cmlnZ2VyaW5nCisgICAqIHJlc291cmNlcyB0byBiZSBsb2Fk
ZWQgb3IgdGV4dCBzZWxlY3Rpb24gY2hhbmdlcy4gV2UgbXVzdCBlbnN1cmUgdGhhdAorICAgKiB0
aGUgdmFsdWUgaXMgb25seSBzZXQgaWYgaXQgaGFzIGNoYW5nZWQuCisgICAqIEB0eXBlIHtPYmpl
Y3R9CisgICAqLworICBoYXNTaWRlRWZmZWN0czoge30sCisKKyAgLyoqCisgICAqIEFsbCBvZiB0
aGUgaXNDdXN0b21BdHRyaWJ1dGUoKSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gaW5qZWN0ZWQu
CisgICAqLworICBfaXNDdXN0b21BdHRyaWJ1dGVGdW5jdGlvbnM6IFtdLAorCisgIC8qKgorICAg
KiBDaGVja3Mgd2hldGhlciBhIHByb3BlcnR5IG5hbWUgaXMgYSBjdXN0b20gYXR0cmlidXRlLgor
ICAgKiBAbWV0aG9kCisgICAqLworICBpc0N1c3RvbUF0dHJpYnV0ZTogZnVuY3Rpb24oYXR0cmli
dXRlTmFtZSkgeworICAgIHJldHVybiBET01Qcm9wZXJ0eS5faXNDdXN0b21BdHRyaWJ1dGVGdW5j
dGlvbnMuc29tZSgKKyAgICAgIGZ1bmN0aW9uKGlzQ3VzdG9tQXR0cmlidXRlRm4pIHsKKyAgICAg
ICAgcmV0dXJuIGlzQ3VzdG9tQXR0cmlidXRlRm4uY2FsbChudWxsLCBhdHRyaWJ1dGVOYW1lKTsK
KyAgICAgIH0KKyAgICApOworICB9LAorCisgIC8qKgorICAgKiBSZXR1cm5zIHRoZSBkZWZhdWx0
IHByb3BlcnR5IHZhbHVlIGZvciBhIERPTSBwcm9wZXJ0eSAoaS5lLiwgbm90IGFuCisgICAqIGF0
dHJpYnV0ZSkuIE1vc3QgZGVmYXVsdCB2YWx1ZXMgYXJlICcnIG9yIGZhbHNlLCBidXQgbm90IGFs
bC4gV29yc2UgeWV0LAorICAgKiBzb21lIChpbiBwYXJ0aWN1bGFyLCBgdHlwZWApIHZhcnkgZGVw
ZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGVsZW1lbnQuCisgICAqCisgICAqIFRPRE86IElzIGl0IGJl
dHRlciB0byBncmFiIGFsbCB0aGUgcG9zc2libGUgcHJvcGVydGllcyB3aGVuIGNyZWF0aW5nIGFu
CisgICAqIGVsZW1lbnQgdG8gYXZvaWQgaGF2aW5nIHRvIGNyZWF0ZSB0aGUgc2FtZSBlbGVtZW50
IHR3aWNlPworICAgKi8KKyAgZ2V0RGVmYXVsdFZhbHVlRm9yUHJvcGVydHk6IGZ1bmN0aW9uKG5v
ZGVOYW1lLCBwcm9wKSB7CisgICAgdmFyIG5vZGVEZWZhdWx0cyA9IGRlZmF1bHRWYWx1ZUNhY2hl
W25vZGVOYW1lXTsKKyAgICB2YXIgdGVzdEVsZW1lbnQ7CisgICAgaWYgKCFub2RlRGVmYXVsdHMp
IHsKKyAgICAgIGRlZmF1bHRWYWx1ZUNhY2hlW25vZGVOYW1lXSA9IG5vZGVEZWZhdWx0cyA9IHt9
OworICAgIH0KKyAgICBpZiAoIShwcm9wIGluIG5vZGVEZWZhdWx0cykpIHsKKyAgICAgIHRlc3RF
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChub2RlTmFtZSk7CisgICAgICBub2RlRGVm
YXVsdHNbcHJvcF0gPSB0ZXN0RWxlbWVudFtwcm9wXTsKKyAgICB9CisgICAgcmV0dXJuIG5vZGVE
ZWZhdWx0c1twcm9wXTsKKyAgfSwKKworICBpbmplY3Rpb246IERPTVByb3BlcnR5SW5qZWN0aW9u
Cit9OworCittb2R1bGUuZXhwb3J0cyA9IERPTVByb3BlcnR5OworCit9LHsiLi9pbnZhcmlhbnQi
Ojc1fV0sODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHly
aWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNo
ZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1
c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZ
b3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3
LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQg
YnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBk
aXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMi
IEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQs
IGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBz
cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9u
cyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUgRE9NUHJvcGVydHlP
cGVyYXRpb25zCisgKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seQorICovCisKKyJ1c2Ugc3RyaWN0
IjsKKwordmFyIERPTVByb3BlcnR5ID0gcmVxdWlyZSgiLi9ET01Qcm9wZXJ0eSIpOworCit2YXIg
ZXNjYXBlVGV4dEZvckJyb3dzZXIgPSByZXF1aXJlKCIuL2VzY2FwZVRleHRGb3JCcm93c2VyIik7
Cit2YXIgbWVtb2l6ZVN0cmluZ09ubHkgPSByZXF1aXJlKCIuL21lbW9pemVTdHJpbmdPbmx5Iik7
CisKK3ZhciBwcm9jZXNzQXR0cmlidXRlTmFtZUFuZFByZWZpeCA9IG1lbW9pemVTdHJpbmdPbmx5
KGZ1bmN0aW9uKG5hbWUpIHsKKyAgcmV0dXJuIGVzY2FwZVRleHRGb3JCcm93c2VyKG5hbWUpICsg
Jz0iJzsKK30pOworCisvKioKKyAqIE9wZXJhdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCBET00gcHJv
cGVydGllcy4KKyAqLwordmFyIERPTVByb3BlcnR5T3BlcmF0aW9ucyA9IHsKKworICAvKioKKyAg
ICogQ3JlYXRlcyBtYXJrdXAgZm9yIGEgcHJvcGVydHkuCisgICAqCisgICAqIEBwYXJhbSB7c3Ry
aW5nfSBuYW1lCisgICAqIEBwYXJhbSB7Kn0gdmFsdWUKKyAgICogQHJldHVybiB7P3N0cmluZ30g
TWFya3VwIHN0cmluZywgb3IgbnVsbCBpZiB0aGUgcHJvcGVydHkgd2FzIGludmFsaWQuCisgICAq
LworICBjcmVhdGVNYXJrdXBGb3JQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSwgdmFsdWUpIHsKKyAg
ICBpZiAoRE9NUHJvcGVydHkuaXNTdGFuZGFyZE5hbWVbbmFtZV0pIHsKKyAgICAgIGlmICh2YWx1
ZSA9PSBudWxsIHx8IERPTVByb3BlcnR5Lmhhc0Jvb2xlYW5WYWx1ZVtuYW1lXSAmJiAhdmFsdWUp
IHsKKyAgICAgICAgcmV0dXJuICcnOworICAgICAgfQorICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUg
PSBET01Qcm9wZXJ0eS5nZXRBdHRyaWJ1dGVOYW1lW25hbWVdOworICAgICAgcmV0dXJuIHByb2Nl
c3NBdHRyaWJ1dGVOYW1lQW5kUHJlZml4KGF0dHJpYnV0ZU5hbWUpICsKKyAgICAgICAgZXNjYXBl
VGV4dEZvckJyb3dzZXIodmFsdWUpICsgJyInOworICAgIH0gZWxzZSBpZiAoRE9NUHJvcGVydHku
aXNDdXN0b21BdHRyaWJ1dGUobmFtZSkpIHsKKyAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7Cisg
ICAgICAgIHJldHVybiAnJzsKKyAgICAgIH0KKyAgICAgIHJldHVybiBwcm9jZXNzQXR0cmlidXRl
TmFtZUFuZFByZWZpeChuYW1lKSArCisgICAgICAgIGVzY2FwZVRleHRGb3JCcm93c2VyKHZhbHVl
KSArICciJzsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICB9LAor
CisgIC8qKgorICAgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBwcm9wZXJ0eSBvbiBhIG5vZGUuCisg
ICAqCisgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZQorICAgKiBAcGFyYW0ge3N0cmluZ30g
bmFtZQorICAgKiBAcGFyYW0geyp9IHZhbHVlCisgICAqLworICBzZXRWYWx1ZUZvclByb3BlcnR5
OiBmdW5jdGlvbihub2RlLCBuYW1lLCB2YWx1ZSkgeworICAgIGlmIChET01Qcm9wZXJ0eS5pc1N0
YW5kYXJkTmFtZVtuYW1lXSkgeworICAgICAgdmFyIG11dGF0aW9uTWV0aG9kID0gRE9NUHJvcGVy
dHkuZ2V0TXV0YXRpb25NZXRob2RbbmFtZV07CisgICAgICBpZiAobXV0YXRpb25NZXRob2QpIHsK
KyAgICAgICAgbXV0YXRpb25NZXRob2Qobm9kZSwgdmFsdWUpOworICAgICAgfSBlbHNlIGlmIChE
T01Qcm9wZXJ0eS5tdXN0VXNlQXR0cmlidXRlW25hbWVdKSB7CisgICAgICAgIGlmIChET01Qcm9w
ZXJ0eS5oYXNCb29sZWFuVmFsdWVbbmFtZV0gJiYgIXZhbHVlKSB7CisgICAgICAgICAgbm9kZS5y
ZW1vdmVBdHRyaWJ1dGUoRE9NUHJvcGVydHkuZ2V0QXR0cmlidXRlTmFtZVtuYW1lXSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoRE9NUHJvcGVydHkuZ2V0
QXR0cmlidXRlTmFtZVtuYW1lXSwgdmFsdWUpOworICAgICAgICB9CisgICAgICB9IGVsc2Ugewor
ICAgICAgICB2YXIgcHJvcE5hbWUgPSBET01Qcm9wZXJ0eS5nZXRQcm9wZXJ0eU5hbWVbbmFtZV07
CisgICAgICAgIGlmICghRE9NUHJvcGVydHkuaGFzU2lkZUVmZmVjdHNbbmFtZV0gfHwgbm9kZVtw
cm9wTmFtZV0gIT09IHZhbHVlKSB7CisgICAgICAgICAgbm9kZVtwcm9wTmFtZV0gPSB2YWx1ZTsK
KyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSBpZiAoRE9NUHJvcGVydHkuaXNDdXN0b21B
dHRyaWJ1dGUobmFtZSkpIHsKKyAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTsK
KyAgICB9CisgIH0sCisKKyAgLyoqCisgICAqIERlbGV0ZXMgdGhlIHZhbHVlIGZvciBhIHByb3Bl
cnR5IG9uIGEgbm9kZS4KKyAgICoKKyAgICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlCisgICAq
IEBwYXJhbSB7c3RyaW5nfSBuYW1lCisgICAqLworICBkZWxldGVWYWx1ZUZvclByb3BlcnR5OiBm
dW5jdGlvbihub2RlLCBuYW1lKSB7CisgICAgaWYgKERPTVByb3BlcnR5LmlzU3RhbmRhcmROYW1l
W25hbWVdKSB7CisgICAgICB2YXIgbXV0YXRpb25NZXRob2QgPSBET01Qcm9wZXJ0eS5nZXRNdXRh
dGlvbk1ldGhvZFtuYW1lXTsKKyAgICAgIGlmIChtdXRhdGlvbk1ldGhvZCkgeworICAgICAgICBt
dXRhdGlvbk1ldGhvZChub2RlLCB1bmRlZmluZWQpOworICAgICAgfSBlbHNlIGlmIChET01Qcm9w
ZXJ0eS5tdXN0VXNlQXR0cmlidXRlW25hbWVdKSB7CisgICAgICAgIG5vZGUucmVtb3ZlQXR0cmli
dXRlKERPTVByb3BlcnR5LmdldEF0dHJpYnV0ZU5hbWVbbmFtZV0pOworICAgICAgfSBlbHNlIHsK
KyAgICAgICAgdmFyIHByb3BOYW1lID0gRE9NUHJvcGVydHkuZ2V0UHJvcGVydHlOYW1lW25hbWVd
OworICAgICAgICBub2RlW3Byb3BOYW1lXSA9IERPTVByb3BlcnR5LmdldERlZmF1bHRWYWx1ZUZv
clByb3BlcnR5KAorICAgICAgICAgIG5vZGUubm9kZU5hbWUsCisgICAgICAgICAgbmFtZQorICAg
ICAgICApOworICAgICAgfQorICAgIH0gZWxzZSBpZiAoRE9NUHJvcGVydHkuaXNDdXN0b21BdHRy
aWJ1dGUobmFtZSkpIHsKKyAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpOworICAgIH0K
KyAgfQorCit9OworCittb2R1bGUuZXhwb3J0cyA9IERPTVByb3BlcnR5T3BlcmF0aW9uczsKKwor
fSx7Ii4vRE9NUHJvcGVydHkiOjcsIi4vZXNjYXBlVGV4dEZvckJyb3dzZXIiOjY1LCIuL21lbW9p
emVTdHJpbmdPbmx5Ijo4MH1dLDk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewor
LyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVu
ZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICog
eW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBM
aWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgor
ICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5s
ZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBz
b2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQg
b24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05T
IE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNl
bnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAor
ICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxl
IERhbmdlcgorICovCisKKy8qanNsaW50IGV2aWw6IHRydWUsIHN1YjogdHJ1ZSAqLworCisidXNl
IHN0cmljdCI7CisKK3ZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoIi4vRXhlY3V0
aW9uRW52aXJvbm1lbnQiKTsKKwordmFyIHRocm93SWYgPSByZXF1aXJlKCIuL3Rocm93SWYiKTsK
KwordmFyIERPTV9VTlNVUFBPUlRFRDsKK3ZhciBOT19NQVJLVVBfUEFSRU5UOwordmFyIE5PX01V
TFRJX01BUktVUDsKK2lmICh0cnVlKSB7CisgIERPTV9VTlNVUFBPUlRFRCA9CisgICAgJ1lvdSBt
YXkgbm90IGluc2VydCBtYXJrdXAgaW50byB0aGUgZG9jdW1lbnQgd2hpbGUgeW91IGFyZSBpbiBh
IHdvcmtlciAnICsKKyAgICAndGhyZWFkLiBJdFwncyBub3QgeW91LCBpdFwncyBtZS4gVGhpcyBp
cyBsaWtlbHkgdGhlIGZhdWx0IG9mIHRoZSAnICsKKyAgICAnZnJhbWV3b3JrLiBQbGVhc2UgcmVw
b3J0IHRoaXMgaW1tZWRpYXRlbHkuJzsKKyAgTk9fTUFSS1VQX1BBUkVOVCA9CisgICAgJ1lvdSBo
YXZlIGF0dGVtcHRlZCB0byBpbmplY3QgbWFya3VwIHdpdGhvdXQgYSBzdWl0YWJsZSBwYXJlbnQu
IFRoaXMgaXMgJyArCisgICAgJ2xpa2VseSB0aGUgZmF1bHQgb2YgdGhlIGZyYW1ld29yayAtIHBs
ZWFzZSByZXBvcnQgaW1tZWRpYXRlbHkuJzsKKyAgTk9fTVVMVElfTUFSS1VQID0KKyAgICAnVGhl
IGZyYW1ld29yayBoYXMgYXR0ZW1wdGVkIHRvIGVpdGhlciBpbnNlcnQgemVybyBvciBtdWx0aXBs
ZSBtYXJrdXAgJyArCisgICAgJ3Jvb3RzIGludG8gYSBzaW5nbGUgbG9jYXRpb24gd2hlbiBpdCBz
aG91bGQgbm90LiBUaGlzIGlzIGEgc2VyaW91cyAnICsKKyAgICAnZXJyb3IgLSBhIGZhdWx0IG9m
IHRoZSBmcmFtZXdvcmsgLSBwbGVhc2UgcmVwb3J0IGltbWVkaWF0ZWx5Lic7Cit9CisKK3ZhciB2
YWxpZGF0ZU1hcmt1cFBhcmFtczsKK2lmICh0cnVlKSB7CisgIHZhbGlkYXRlTWFya3VwUGFyYW1z
ID0gZnVuY3Rpb24ocGFyZW50Tm9kZSwgbWFya3VwKSB7CisgICAgdGhyb3dJZighRXhlY3V0aW9u
RW52aXJvbm1lbnQuY2FuVXNlRE9NLCBET01fVU5TVVBQT1JURUQpOworICAgIHRocm93SWYoIXBh
cmVudE5vZGUgfHwgIXBhcmVudE5vZGUudGFnTmFtZSwgTk9fTUFSS1VQX1BBUkVOVCk7CisgICAg
dGhyb3dJZighbWFya3VwLCBOT19NVUxUSV9NQVJLVVApOworICB9OworfQorCisvKioKKyAqIER1
bW15IGNvbnRhaW5lciB1c2VkIHRvIHJlbmRlciBhbGwgbWFya3VwLgorICovCit2YXIgZHVtbXlO
b2RlID0gRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NID8KKyAgZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2JykgOgorICBudWxsOworCisvKioKKyAqIFNvbWUgYnJvd3NlcnMgY2Fubm90
IHVzZSBgaW5uZXJIVE1MYCB0byByZW5kZXIgY2VydGFpbiBlbGVtZW50cyBzdGFuZGFsb25lLAor
ICogc28gd2Ugd3JhcCB0aGVtLCByZW5kZXIgdGhlIHdyYXBwZWQgbm9kZXMsIHRoZW4gZXh0cmFj
dCB0aGUgZGVzaXJlZCBub2RlLgorICovCit2YXIgbWFya3VwV3JhcCA9IHsKKyAgJ29wdGlvbic6
IFsxLCAnPHNlbGVjdCBtdWx0aXBsZT0idHJ1ZSI+JywgJzwvc2VsZWN0PiddLAorICAnbGVnZW5k
JzogWzEsICc8ZmllbGRzZXQ+JywgJzwvZmllbGRzZXQ+J10sCisgICdhcmVhJzogWzEsICc8bWFw
PicsICc8L21hcD4nXSwKKyAgJ3BhcmFtJzogWzEsICc8b2JqZWN0PicsICc8L29iamVjdD4nXSwK
KyAgJ3RoZWFkJzogWzEsICc8dGFibGU+JywgJzwvdGFibGU+J10sCisgICd0cic6IFsyLCAnPHRh
YmxlPjx0Ym9keT4nLCAnPC90Ym9keT48L3RhYmxlPiddLAorICAnY29sJzogWzIsICc8dGFibGU+
PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPicsICc8L2NvbGdyb3VwPjwvdGFibGU+J10sCisgICd0
ZCc6IFszLCAnPHRhYmxlPjx0Ym9keT48dHI+JywgJzwvdHI+PC90Ym9keT48L3RhYmxlPiddCit9
OworbWFya3VwV3JhcFsnb3B0Z3JvdXAnXSA9IG1hcmt1cFdyYXBbJ29wdGlvbiddOworbWFya3Vw
V3JhcFsndGJvZHknXSA9IG1hcmt1cFdyYXBbJ3RoZWFkJ107CittYXJrdXBXcmFwWyd0Zm9vdCdd
ID0gbWFya3VwV3JhcFsndGhlYWQnXTsKK21hcmt1cFdyYXBbJ2NvbGdyb3VwJ10gPSBtYXJrdXBX
cmFwWyd0aGVhZCddOworbWFya3VwV3JhcFsnY2FwdGlvbiddID0gbWFya3VwV3JhcFsndGhlYWQn
XTsKK21hcmt1cFdyYXBbJ3RoJ10gPSBtYXJrdXBXcmFwWyd0ZCddOworCisvKioKKyAqIEluIElF
OCwgY2VydGFpbiBlbGVtZW50cyBjYW5ub3QgcmVuZGVyIGFsb25lLCBzbyB3cmFwIGFsbCBlbGVt
ZW50cy4KKyAqLwordmFyIGRlZmF1bHRXcmFwID0gWzEsICc/PGRpdj4nLCAnPC9kaXY+J107CisK
Ky8qKgorICogRmVhdHVyZSBkZXRlY3Rpb24sIHJlbW92ZSB3cmFwcyB0aGF0IGFyZSB1bm5lY2Vz
c2FyeSBmb3IgdGhlIGN1cnJlbnQgYnJvd3Nlci4KKyAqLworaWYgKGR1bW15Tm9kZSkgeworICBm
b3IgKHZhciBub2RlTmFtZSBpbiBtYXJrdXBXcmFwKSB7CisgICAgaWYgKCFtYXJrdXBXcmFwLmhh
c093blByb3BlcnR5KG5vZGVOYW1lKSkgeworICAgICAgY29udGludWU7CisgICAgfQorICAgIGR1
bW15Tm9kZS5pbm5lckhUTUwgPSAnPCcgKyBub2RlTmFtZSArICc+PC8nICsgbm9kZU5hbWUgKyAn
Pic7CisgICAgaWYgKGR1bW15Tm9kZS5maXJzdENoaWxkKSB7CisgICAgICBtYXJrdXBXcmFwW25v
ZGVOYW1lXSA9IG51bGw7CisgICAgfQorICB9CisgIGR1bW15Tm9kZS5pbm5lckhUTUwgPSAnPGxp
bmsgLz4nOworICBpZiAoZHVtbXlOb2RlLmZpcnN0Q2hpbGQpIHsKKyAgICBkZWZhdWx0V3JhcCA9
IG51bGw7CisgIH0KK30KKworLyoqCisgKiBSZW5kZXJzIG1hcmt1cCBpbnRvIG5vZGVzLiBUaGUg
cmV0dXJuZWQgSFRNTENvbGxlY3Rpb24gaXMgbGl2ZSBhbmQgc2hvdWxkIGJlCisgKiB1c2VkIGlt
bWVkaWF0ZWx5IChvciBhdCBsZWFzdCBiZWZvcmUgdGhlIG5leHQgaW52b2NhdGlvbiB0byBgcmVu
ZGVyTWFya3VwYCkuCisgKgorICogTk9URTogRXh0cmFjdGluZyB0aGUgYG5vZGVOYW1lYCBkb2Vz
IG5vdCByZXF1aXJlIGEgcmVndWxhciBleHByZXNzaW9uIG1hdGNoCisgKiBiZWNhdXNlIHdlIG1h
a2UgYXNzdW1wdGlvbnMgYWJvdXQgUmVhY3QtZ2VuZXJhdGVkIG1hcmt1cCAoaS5lLiB0aGVyZSBh
cmUgbm8KKyAqIHNwYWNlcyBzdXJyb3VuZGluZyB0aGUgb3BlbmluZyB0YWcgYW5kIHRoZXJlIGlz
IGF0IGxlYXN0IG9uZSBhdHRyaWJ1dGUpLgorICogQHNlZSBodHRwOi8vanNwZXJmLmNvbS9leHRy
YWN0LW5vZGVuYW1lCisgKgorICogQHBhcmFtIHtzdHJpbmd9IG1hcmt1cAorICogQHJldHVybiB7
Kn0gQW4gSFRNTENvbGxlY3Rpb24uCisgKi8KK2Z1bmN0aW9uIHJlbmRlck1hcmt1cChtYXJrdXAp
IHsKKyAgdmFyIG5vZGUgPSBkdW1teU5vZGU7CisgIHZhciBub2RlTmFtZSA9IG1hcmt1cC5zdWJz
dHJpbmcoMSwgbWFya3VwLmluZGV4T2YoJyAnKSk7CisKKyAgdmFyIHdyYXAgPSBtYXJrdXBXcmFw
W25vZGVOYW1lLnRvTG93ZXJDYXNlKCldIHx8IGRlZmF1bHRXcmFwOworICBpZiAod3JhcCkgewor
ICAgIG5vZGUuaW5uZXJIVE1MID0gd3JhcFsxXSArIG1hcmt1cCArIHdyYXBbMl07CisKKyAgICB2
YXIgd3JhcERlcHRoID0gd3JhcFswXTsKKyAgICB3aGlsZSAod3JhcERlcHRoLS0pIHsKKyAgICAg
IG5vZGUgPSBub2RlLmxhc3RDaGlsZDsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgbm9kZS5pbm5l
ckhUTUwgPSBtYXJrdXA7CisgIH0KKyAgcmV0dXJuIG5vZGUuY2hpbGROb2RlczsKK30KKworLyoq
CisgKiBJbnNlcnRzIG5vZGUgYWZ0ZXIgJ2FmdGVyJy4gSWYgJ2FmdGVyJyBpcyBudWxsLCBpbnNl
cnRzIGl0IGFmdGVyIG5vdGhpbmcsCisgKiB3aGljaCBpcyBpbnNlcnRpbmcgaXQgYXQgdGhlIGJl
Z2lubmluZy4KKyAqCisgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW0gUGFyZW50IGVsZW1lbnQuCisg
KiBAcGFyYW0ge0VsZW1lbnR9IGluc2VydCBFbGVtZW50IHRvIGluc2VydC4KKyAqIEBwYXJhbSB7
RWxlbWVudH0gYWZ0ZXIgRWxlbWVudCB0byBpbnNlcnQgYWZ0ZXIuCisgKiBAcmV0dXJuIHtFbGVt
ZW50fSBFbGVtZW50IHRoYXQgd2FzIGluc2VydGVkLgorICovCitmdW5jdGlvbiBpbnNlcnROb2Rl
QWZ0ZXJOb2RlKGVsZW0sIGluc2VydCwgYWZ0ZXIpIHsKKyAgaWYgKHRydWUpIHsKKyAgICB0aHJv
d0lmKCFFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00sIERPTV9VTlNVUFBPUlRFRCk7Cisg
IH0KKyAgaWYgKGFmdGVyKSB7CisgICAgaWYgKGFmdGVyLm5leHRTaWJsaW5nKSB7CisgICAgICBy
ZXR1cm4gZWxlbS5pbnNlcnRCZWZvcmUoaW5zZXJ0LCBhZnRlci5uZXh0U2libGluZyk7CisgICAg
fSBlbHNlIHsKKyAgICAgIHJldHVybiBlbGVtLmFwcGVuZENoaWxkKGluc2VydCk7CisgICAgfQor
ICB9IGVsc2UgeworICAgIHJldHVybiBlbGVtLmluc2VydEJlZm9yZShpbnNlcnQsIGVsZW0uZmly
c3RDaGlsZCk7CisgIH0KK30KKworLyoqCisgKiBTbG93OiBTaG91bGQgb25seSBiZSB1c2VkIHdo
ZW4gaXQgaXMga25vd24gdGhlcmUgYXJlIGEgZmV3IChvciBvbmUpIGVsZW1lbnQKKyAqIGluIHRo
ZSBub2RlIGxpc3QuCisgKiBAcGFyYW0ge0VsZW1lbnR9IHBhcmVudFJvb3REb21Ob2RlIFBhcmVu
dCBlbGVtZW50LgorICogQHBhcmFtIHtIVE1MQ29sbGVjdGlvbn0gaHRtbENvbGxlY3Rpb24gSFRN
TENvbGxlY3Rpb24gdG8gaW5zZXJ0LgorICogQHBhcmFtIHtFbGVtZW50fSBhZnRlciBFbGVtZW50
IHRvIGluc2VydCB0aGUgbm9kZSBsaXN0IGFmdGVyLgorICovCitmdW5jdGlvbiBpbmVmZmljaWVu
dGx5SW5zZXJ0SFRNTENvbGxlY3Rpb25BZnRlcigKKyAgICBwYXJlbnRSb290RG9tTm9kZSwKKyAg
ICBodG1sQ29sbGVjdGlvbiwKKyAgICBhZnRlcikgeworCisgIGlmICh0cnVlKSB7CisgICAgdGhy
b3dJZighRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NLCBET01fVU5TVVBQT1JURUQpOwor
ICB9CisgIHZhciByZXQ7CisgIHZhciBvcmlnaW5hbExlbmd0aCA9IGh0bWxDb2xsZWN0aW9uLmxl
bmd0aDsKKyAgLy8gQWNjZXNzIGh0bWxDb2xsZWN0aW9uWzBdIGJlY2F1c2UgaHRtbENvbGxlY3Rp
b24gc2hyaW5rcyBhcyB3ZSByZW1vdmUgaXRlbXMuCisgIC8vIGBpbnNlcnROb2RlQWZ0ZXJOb2Rl
YCB3aWxsIHJlbW92ZSBpdGVtcyBmcm9tIHRoZSBodG1sQ29sbGVjdGlvbi4KKyAgZm9yICh2YXIg
aSA9IDA7IGkgPCBvcmlnaW5hbExlbmd0aDsgaSsrKSB7CisgICAgcmV0ID0KKyAgICAgIGluc2Vy
dE5vZGVBZnRlck5vZGUocGFyZW50Um9vdERvbU5vZGUsIGh0bWxDb2xsZWN0aW9uWzBdLCByZXQg
fHwgYWZ0ZXIpOworICB9Cit9CisKKy8qKgorICogU3VwZXItZGFuZ2Vyb3VzbHkgaW5zZXJ0cyBt
YXJrdXAgaW50byBleGlzdGluZyBET00gc3RydWN0dXJlLiBTZXJpb3VzbHksIHlvdQorICogZG9u
J3Qgd2FudCB0byB1c2UgdGhpcyBtb2R1bGUgdW5sZXNzIHlvdSBhcmUgYnVpbGRpbmcgYSBmcmFt
ZXdvcmsuIFRoaXMKKyAqIHJlcXVpcmVzIHRoYXQgdGhlIG1hcmt1cCB0aGF0IHlvdSBhcmUgaW5z
ZXJ0aW5nIHJlcHJlc2VudHMgdGhlIHJvb3Qgb2YgYQorICogdHJlZS4gV2UgZG8gbm90IHN1cHBv
cnQgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgYG1hcmt1cGAgcmVwcmVzZW50cyBzZXZlcmFsCisgKiBy
b290cy4KKyAqCisgKiBAcGFyYW0ge0VsZW1lbnR9IHBhcmVudE5vZGUgUGFyZW50IERPTSBlbGVt
ZW50LgorICogQHBhcmFtIHtzdHJpbmd9IG1hcmt1cCBNYXJrdXAgdG8gZGFuZ2Vyb3VzbHkgaW5z
ZXJ0LgorICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFBvc2l0aW9uIHRvIGluc2VydCBtYXJrdXAg
YXQuCisgKi8KK2Z1bmN0aW9uIGRhbmdlcm91c2x5SW5zZXJ0TWFya3VwQXQocGFyZW50Tm9kZSwg
bWFya3VwLCBpbmRleCkgeworICBpZiAodHJ1ZSkgeworICAgIHZhbGlkYXRlTWFya3VwUGFyYW1z
KHBhcmVudE5vZGUsIG1hcmt1cCk7CisgIH0KKyAgdmFyIGh0bWxDb2xsZWN0aW9uID0gcmVuZGVy
TWFya3VwKG1hcmt1cCk7CisgIHZhciBhZnRlck5vZGUgPSBpbmRleCA/IHBhcmVudE5vZGUuY2hp
bGROb2Rlc1tpbmRleCAtIDFdIDogbnVsbDsKKyAgaW5lZmZpY2llbnRseUluc2VydEhUTUxDb2xs
ZWN0aW9uQWZ0ZXIocGFyZW50Tm9kZSwgaHRtbENvbGxlY3Rpb24sIGFmdGVyTm9kZSk7Cit9CisK
Ky8qKgorICogUmVwbGFjZXMgYSBub2RlIHdpdGggYSBzdHJpbmcgb2YgbWFya3VwIGF0IGl0cyBj
dXJyZW50IHBvc2l0aW9uIHdpdGhpbiBpdHMKKyAqIHBhcmVudC4gYGNoaWxkTm9kZWAgbXVzdCBi
ZSBpbiB0aGUgZG9jdW1lbnQgKG9yIGF0IGxlYXN0IHdpdGhpbiBhIHBhcmVudAorICogbm9kZSku
IFRoZSBzdHJpbmcgb2YgbWFya3VwIG11c3QgcmVwcmVzZW50IGEgdHJlZSBvZiBtYXJrdXAgd2l0
aCBhIHNpbmdsZQorICogcm9vdC4KKyAqCisgKiBAcGFyYW0ge0VsZW1lbnR9IGNoaWxkTm9kZSBD
aGlsZCBub2RlIHRvIHJlcGxhY2UuCisgKiBAcGFyYW0ge3N0cmluZ30gbWFya3VwIE1hcmt1cCB0
byBkYW5nZXJvdXNseSByZXBsYWNlIGNoaWxkIHdpdGguCisgKi8KK2Z1bmN0aW9uIGRhbmdlcm91
c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwKGNoaWxkTm9kZSwgbWFya3VwKSB7CisgIHZhciBwYXJl
bnROb2RlID0gY2hpbGROb2RlLnBhcmVudE5vZGU7CisgIGlmICh0cnVlKSB7CisgICAgdmFsaWRh
dGVNYXJrdXBQYXJhbXMocGFyZW50Tm9kZSwgbWFya3VwKTsKKyAgfQorICB2YXIgaHRtbENvbGxl
Y3Rpb24gPSByZW5kZXJNYXJrdXAobWFya3VwKTsKKyAgaWYgKHRydWUpIHsKKyAgICB0aHJvd0lm
KGh0bWxDb2xsZWN0aW9uLmxlbmd0aCAhPT0gMSwgTk9fTVVMVElfTUFSS1VQKTsKKyAgfQorICBw
YXJlbnROb2RlLnJlcGxhY2VDaGlsZChodG1sQ29sbGVjdGlvblswXSwgY2hpbGROb2RlKTsKK30K
KwordmFyIERhbmdlciA9IHsKKyAgZGFuZ2Vyb3VzbHlJbnNlcnRNYXJrdXBBdDogZGFuZ2Vyb3Vz
bHlJbnNlcnRNYXJrdXBBdCwKKyAgZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXA6IGRh
bmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwCit9OworCittb2R1bGUuZXhwb3J0cyA9IERh
bmdlcjsKKworfSx7Ii4vRXhlY3V0aW9uRW52aXJvbm1lbnQiOjE5LCIuL3Rocm93SWYiOjg2fV0s
MTA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQg
MjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGlj
ZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRo
aXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1h
eSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFj
aGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFw
cGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJp
YnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJ
UywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRo
ZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lm
aWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5k
ZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxlIERlZmF1bHRET01Qcm9wZXJ0
eUNvbmZpZworICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIERPTVByb3BlcnR5ID0gcmVxdWly
ZSgiLi9ET01Qcm9wZXJ0eSIpOworCit2YXIgTVVTVF9VU0VfQVRUUklCVVRFID0gRE9NUHJvcGVy
dHkuaW5qZWN0aW9uLk1VU1RfVVNFX0FUVFJJQlVURTsKK3ZhciBNVVNUX1VTRV9QUk9QRVJUWSA9
IERPTVByb3BlcnR5LmluamVjdGlvbi5NVVNUX1VTRV9QUk9QRVJUWTsKK3ZhciBIQVNfQk9PTEVB
Tl9WQUxVRSA9IERPTVByb3BlcnR5LmluamVjdGlvbi5IQVNfQk9PTEVBTl9WQUxVRTsKK3ZhciBI
QVNfU0lERV9FRkZFQ1RTID0gRE9NUHJvcGVydHkuaW5qZWN0aW9uLkhBU19TSURFX0VGRkVDVFM7
CisKK3ZhciBEZWZhdWx0RE9NUHJvcGVydHlDb25maWcgPSB7CisgIGlzQ3VzdG9tQXR0cmlidXRl
OiBSZWdFeHAucHJvdG90eXBlLnRlc3QuYmluZCgKKyAgICAvXihkYXRhfGFyaWEpLVthLXpfXVth
LXpcZF8uXC1dKiQvCisgICksCisgIFByb3BlcnRpZXM6IHsKKyAgICAvKioKKyAgICAgKiBTdGFu
ZGFyZCBQcm9wZXJ0aWVzCisgICAgICovCisgICAgYWNjZXNzS2V5OiBudWxsLAorICAgIGFjY2Vw
dDogbnVsbCwKKyAgICBhY3Rpb246IG51bGwsCisgICAgYWpheGlmeTogTVVTVF9VU0VfQVRUUklC
VVRFLAorICAgIGFsbG93RnVsbFNjcmVlbjogTVVTVF9VU0VfQVRUUklCVVRFIHwgSEFTX0JPT0xF
QU5fVkFMVUUsCisgICAgYWx0OiBudWxsLAorICAgIGF1dG9Db21wbGV0ZTogbnVsbCwKKyAgICBh
dXRvRm9jdXM6IEhBU19CT09MRUFOX1ZBTFVFLAorICAgIGF1dG9QbGF5OiBIQVNfQk9PTEVBTl9W
QUxVRSwKKyAgICBjZWxsUGFkZGluZzogbnVsbCwKKyAgICBjZWxsU3BhY2luZzogbnVsbCwKKyAg
ICBjaGVja2VkOiBNVVNUX1VTRV9QUk9QRVJUWSB8IEhBU19CT09MRUFOX1ZBTFVFLAorICAgIGNs
YXNzTmFtZTogTVVTVF9VU0VfUFJPUEVSVFksCisgICAgY29sU3BhbjogbnVsbCwKKyAgICBjb250
ZW50RWRpdGFibGU6IG51bGwsCisgICAgY29udGV4dE1lbnU6IE1VU1RfVVNFX0FUVFJJQlVURSwK
KyAgICBjb250cm9sczogTVVTVF9VU0VfUFJPUEVSVFkgfCBIQVNfQk9PTEVBTl9WQUxVRSwKKyAg
ICBkYXRhOiBudWxsLCAvLyBGb3IgYDxvYmplY3QgLz5gIGFjdHMgYXMgYHNyY2AuCisgICAgZGF0
ZVRpbWU6IE1VU1RfVVNFX0FUVFJJQlVURSwKKyAgICBkaXI6IG51bGwsCisgICAgZGlzYWJsZWQ6
IE1VU1RfVVNFX1BST1BFUlRZIHwgSEFTX0JPT0xFQU5fVkFMVUUsCisgICAgZHJhZ2dhYmxlOiBu
dWxsLAorICAgIGVuY1R5cGU6IG51bGwsCisgICAgaGVpZ2h0OiBNVVNUX1VTRV9BVFRSSUJVVEUs
CisgICAgaGlkZGVuOiBNVVNUX1VTRV9BVFRSSUJVVEUgfCBIQVNfQk9PTEVBTl9WQUxVRSwKKyAg
ICBocmVmOiBudWxsLAorICAgIGh0bWxGb3I6IG51bGwsCisgICAgaWNvbjogbnVsbCwKKyAgICBp
ZDogTVVTVF9VU0VfUFJPUEVSVFksCisgICAgbGFiZWw6IG51bGwsCisgICAgbGFuZzogbnVsbCwK
KyAgICBsaXN0OiBudWxsLAorICAgIG1heDogbnVsbCwKKyAgICBtYXhMZW5ndGg6IE1VU1RfVVNF
X0FUVFJJQlVURSwKKyAgICBtZXRob2Q6IG51bGwsCisgICAgbWluOiBudWxsLAorICAgIG11bHRp
cGxlOiBNVVNUX1VTRV9QUk9QRVJUWSB8IEhBU19CT09MRUFOX1ZBTFVFLAorICAgIG5hbWU6IG51
bGwsCisgICAgcGF0dGVybjogbnVsbCwKKyAgICBwb3N0ZXI6IG51bGwsCisgICAgcHJlbG9hZDog
bnVsbCwKKyAgICBwbGFjZWhvbGRlcjogbnVsbCwKKyAgICByYWRpb0dyb3VwOiBudWxsLAorICAg
IHJlbDogbnVsbCwKKyAgICByZWFkT25seTogTVVTVF9VU0VfUFJPUEVSVFkgfCBIQVNfQk9PTEVB
Tl9WQUxVRSwKKyAgICByZXF1aXJlZDogSEFTX0JPT0xFQU5fVkFMVUUsCisgICAgcm9sZTogTVVT
VF9VU0VfQVRUUklCVVRFLAorICAgIHNjcm9sbExlZnQ6IE1VU1RfVVNFX1BST1BFUlRZLAorICAg
IHNjcm9sbFRvcDogTVVTVF9VU0VfUFJPUEVSVFksCisgICAgc2VsZWN0ZWQ6IE1VU1RfVVNFX1BS
T1BFUlRZIHwgSEFTX0JPT0xFQU5fVkFMVUUsCisgICAgc2l6ZTogbnVsbCwKKyAgICBzcGVsbENo
ZWNrOiBudWxsLAorICAgIHNyYzogbnVsbCwKKyAgICBzdGVwOiBudWxsLAorICAgIHN0eWxlOiBu
dWxsLAorICAgIHRhYkluZGV4OiBudWxsLAorICAgIHRhcmdldDogbnVsbCwKKyAgICB0aXRsZTog
bnVsbCwKKyAgICB0eXBlOiBudWxsLAorICAgIHZhbHVlOiBNVVNUX1VTRV9QUk9QRVJUWSB8IEhB
U19TSURFX0VGRkVDVFMsCisgICAgd2lkdGg6IE1VU1RfVVNFX0FUVFJJQlVURSwKKyAgICB3bW9k
ZTogTVVTVF9VU0VfQVRUUklCVVRFLAorICAgIC8qKgorICAgICAqIFNWRyBQcm9wZXJ0aWVzCisg
ICAgICovCisgICAgY3g6IE1VU1RfVVNFX1BST1BFUlRZLAorICAgIGN5OiBNVVNUX1VTRV9QUk9Q
RVJUWSwKKyAgICBkOiBNVVNUX1VTRV9QUk9QRVJUWSwKKyAgICBmaWxsOiBNVVNUX1VTRV9QUk9Q
RVJUWSwKKyAgICBmeDogTVVTVF9VU0VfUFJPUEVSVFksCisgICAgZnk6IE1VU1RfVVNFX1BST1BF
UlRZLAorICAgIHBvaW50czogTVVTVF9VU0VfUFJPUEVSVFksCisgICAgcjogTVVTVF9VU0VfUFJP
UEVSVFksCisgICAgc3Ryb2tlOiBNVVNUX1VTRV9QUk9QRVJUWSwKKyAgICBzdHJva2VMaW5lY2Fw
OiBNVVNUX1VTRV9QUk9QRVJUWSwKKyAgICBzdHJva2VXaWR0aDogTVVTVF9VU0VfUFJPUEVSVFks
CisgICAgdHJhbnNmb3JtOiBNVVNUX1VTRV9QUk9QRVJUWSwKKyAgICB4OiBNVVNUX1VTRV9QUk9Q
RVJUWSwKKyAgICB4MTogTVVTVF9VU0VfUFJPUEVSVFksCisgICAgeDI6IE1VU1RfVVNFX1BST1BF
UlRZLAorICAgIHZlcnNpb246IE1VU1RfVVNFX1BST1BFUlRZLAorICAgIHZpZXdCb3g6IE1VU1Rf
VVNFX1BST1BFUlRZLAorICAgIHk6IE1VU1RfVVNFX1BST1BFUlRZLAorICAgIHkxOiBNVVNUX1VT
RV9QUk9QRVJUWSwKKyAgICB5MjogTVVTVF9VU0VfUFJPUEVSVFksCisgICAgc3ByZWFkTWV0aG9k
OiBNVVNUX1VTRV9QUk9QRVJUWSwKKyAgICBvZmZzZXQ6IE1VU1RfVVNFX1BST1BFUlRZLAorICAg
IHN0b3BDb2xvcjogTVVTVF9VU0VfUFJPUEVSVFksCisgICAgc3RvcE9wYWNpdHk6IE1VU1RfVVNF
X1BST1BFUlRZLAorICAgIGdyYWRpZW50VW5pdHM6IE1VU1RfVVNFX1BST1BFUlRZLAorICAgIGdy
YWRpZW50VHJhbnNmb3JtOiBNVVNUX1VTRV9QUk9QRVJUWQorICB9LAorICBET01BdHRyaWJ1dGVO
YW1lczogeworICAgIGNsYXNzTmFtZTogJ2NsYXNzJywKKyAgICBodG1sRm9yOiAnZm9yJywKKyAg
ICBzdHJva2VMaW5lY2FwOiAnc3Ryb2tlLWxpbmVjYXAnLAorICAgIHN0cm9rZVdpZHRoOiAnc3Ry
b2tlLXdpZHRoJywKKyAgICBzdG9wQ29sb3I6ICdzdG9wLWNvbG9yJywKKyAgICBzdG9wT3BhY2l0
eTogJ3N0b3Atb3BhY2l0eScKKyAgfSwKKyAgRE9NUHJvcGVydHlOYW1lczogeworICAgIGF1dG9D
b21wbGV0ZTogJ2F1dG9jb21wbGV0ZScsCisgICAgYXV0b0ZvY3VzOiAnYXV0b2ZvY3VzJywKKyAg
ICBhdXRvUGxheTogJ2F1dG9wbGF5JywKKyAgICBlbmNUeXBlOiAnZW5jdHlwZScsCisgICAgcmFk
aW9Hcm91cDogJ3JhZGlvZ3JvdXAnLAorICAgIHNwZWxsQ2hlY2s6ICdzcGVsbGNoZWNrJworICB9
LAorICBET01NdXRhdGlvbk1ldGhvZHM6IHsKKyAgICAvKioKKyAgICAgKiBTZXR0aW5nIGBjbGFz
c05hbWVgIHRvIG51bGwgbWF5IGNhdXNlIGl0IHRvIGJlIHNldCB0byB0aGUgc3RyaW5nICJudWxs
Ii4KKyAgICAgKgorICAgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZQorICAgICAqIEBwYXJh
bSB7Kn0gdmFsdWUKKyAgICAgKi8KKyAgICBjbGFzc05hbWU6IGZ1bmN0aW9uKG5vZGUsIHZhbHVl
KSB7CisgICAgICBub2RlLmNsYXNzTmFtZSA9IHZhbHVlIHx8ICcnOworICAgIH0KKyAgfQorfTsK
KworbW9kdWxlLmV4cG9ydHMgPSBEZWZhdWx0RE9NUHJvcGVydHlDb25maWc7CisKK30seyIuL0RP
TVByb3BlcnR5Ijo3fV0sMTE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoq
CisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVy
IHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91
IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNl
bnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICog
aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNz
IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0
d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g
YW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNl
IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICog
bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxlIERl
ZmF1bHRFdmVudFBsdWdpbk9yZGVyCisgKi8KKworInVzZSBzdHJpY3QiOworCisgdmFyIGtleU9m
ID0gcmVxdWlyZSgiLi9rZXlPZiIpOworCisvKioKKyAqIE1vZHVsZSB0aGF0IGlzIGluamVjdGFi
bGUgaW50byBgRXZlbnRQbHVnaW5IdWJgLCB0aGF0IHNwZWNpZmllcyBhCisgKiBkZXRlcm1pbmlz
dGljIG9yZGVyaW5nIG9mIGBFdmVudFBsdWdpbmBzLiBBIGNvbnZlbmllbnQgd2F5IHRvIHJlYXNv
biBhYm91dAorICogcGx1Z2lucywgd2l0aG91dCBoYXZpbmcgdG8gcGFja2FnZSBldmVyeSBvbmUg
b2YgdGhlbS4gVGhpcyBpcyBiZXR0ZXIgdGhhbgorICogaGF2aW5nIHBsdWdpbnMgYmUgb3JkZXJl
ZCBpbiB0aGUgc2FtZSBvcmRlciB0aGF0IHRoZXkgYXJlIGluamVjdGVkIGJlY2F1c2UKKyAqIHRo
YXQgb3JkZXJpbmcgd291bGQgYmUgaW5mbHVlbmNlZCBieSB0aGUgcGFja2FnaW5nIG9yZGVyLgor
ICogYFJlc3BvbmRlckV2ZW50UGx1Z2luYCBtdXN0IG9jY3VyIGJlZm9yZSBgU2ltcGxlRXZlbnRQ
bHVnaW5gIHNvIHRoYXQKKyAqIHByZXZlbnRpbmcgZGVmYXVsdCBvbiBldmVudHMgaXMgY29udmVu
aWVudCBpbiBgU2ltcGxlRXZlbnRQbHVnaW5gIGhhbmRsZXJzLgorICovCit2YXIgRGVmYXVsdEV2
ZW50UGx1Z2luT3JkZXIgPSBbCisgIGtleU9mKHtSZXNwb25kZXJFdmVudFBsdWdpbjogbnVsbH0p
LAorICBrZXlPZih7U2ltcGxlRXZlbnRQbHVnaW46IG51bGx9KSwKKyAga2V5T2Yoe1RhcEV2ZW50
UGx1Z2luOiBudWxsfSksCisgIGtleU9mKHtFbnRlckxlYXZlRXZlbnRQbHVnaW46IG51bGx9KSwK
KyAga2V5T2Yoe0NoYW5nZUV2ZW50UGx1Z2luOiBudWxsfSksCisgIGtleU9mKHtBbmFseXRpY3NF
dmVudFBsdWdpbjogbnVsbH0pCitdOworCittb2R1bGUuZXhwb3J0cyA9IERlZmF1bHRFdmVudFBs
dWdpbk9yZGVyOworCit9LHsiLi9rZXlPZiI6Nzl9XSwxMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7CisoZnVuY3Rpb24oKXsvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29r
LCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9u
IDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2Vw
dCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNv
cHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5z
ZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcg
b3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0
aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9V
VCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9y
IGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBn
b3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5z
ZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUgRW50ZXJMZWF2ZUV2ZW50UGx1Z2luCisgKiBAdHlw
ZWNoZWNrcyBzdGF0aWMtb25seQorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIEV2ZW50Q29u
c3RhbnRzID0gcmVxdWlyZSgiLi9FdmVudENvbnN0YW50cyIpOwordmFyIEV2ZW50UHJvcGFnYXRv
cnMgPSByZXF1aXJlKCIuL0V2ZW50UHJvcGFnYXRvcnMiKTsKK3ZhciBFeGVjdXRpb25FbnZpcm9u
bWVudCA9IHJlcXVpcmUoIi4vRXhlY3V0aW9uRW52aXJvbm1lbnQiKTsKK3ZhciBSZWFjdEluc3Rh
bmNlSGFuZGxlcyA9IHJlcXVpcmUoIi4vUmVhY3RJbnN0YW5jZUhhbmRsZXMiKTsKK3ZhciBTeW50
aGV0aWNNb3VzZUV2ZW50ID0gcmVxdWlyZSgiLi9TeW50aGV0aWNNb3VzZUV2ZW50Iik7CisKK3Zh
ciBSZWFjdElEID0gcmVxdWlyZSgiLi9SZWFjdElEIik7Cit2YXIga2V5T2YgPSByZXF1aXJlKCIu
L2tleU9mIik7CisKK3ZhciB0b3BMZXZlbFR5cGVzID0gRXZlbnRDb25zdGFudHMudG9wTGV2ZWxU
eXBlczsKK3ZhciBnZXRGaXJzdFJlYWN0RE9NID0gUmVhY3RJbnN0YW5jZUhhbmRsZXMuZ2V0Rmly
c3RSZWFjdERPTTsKKwordmFyIGV2ZW50VHlwZXMgPSB7CisgIG1vdXNlRW50ZXI6IHtyZWdpc3Ry
YXRpb25OYW1lOiBrZXlPZih7b25Nb3VzZUVudGVyOiBudWxsfSl9LAorICBtb3VzZUxlYXZlOiB7
cmVnaXN0cmF0aW9uTmFtZToga2V5T2Yoe29uTW91c2VMZWF2ZTogbnVsbH0pfQorfTsKKwordmFy
IEVudGVyTGVhdmVFdmVudFBsdWdpbiA9IHsKKworICBldmVudFR5cGVzOiBldmVudFR5cGVzLAor
CisgIC8qKgorICAgKiBGb3IgYWxtb3N0IGV2ZXJ5IGludGVyYWN0aW9uIHdlIGNhcmUgYWJvdXQs
IHRoZXJlIHdpbGwgYmUgYm90aCBhIHRvcC1sZXZlbAorICAgKiBgbW91c2VvdmVyYCBhbmQgYG1v
dXNlb3V0YCBldmVudCB0aGF0IG9jY3Vycy4gT25seSB1c2UgYG1vdXNlb3V0YCBzbyB0aGF0Cisg
ICAqIHdlIGRvIG5vdCBleHRyYWN0IGR1cGxpY2F0ZSBldmVudHMuIEhvd2V2ZXIsIG1vdmluZyB0
aGUgbW91c2UgaW50byB0aGUKKyAgICogYnJvd3NlciBmcm9tIG91dHNpZGUgd2lsbCBub3QgZmly
ZSBhIGBtb3VzZW91dGAgZXZlbnQuIEluIHRoaXMgY2FzZSwgd2UgdXNlCisgICAqIHRoZSBgbW91
c2VvdmVyYCB0b3AtbGV2ZWwgZXZlbnQuCisgICAqCisgICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BM
ZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC4KKyAgICogQHBhcmFtIHtET01F
dmVudFRhcmdldH0gdG9wTGV2ZWxUYXJnZXQgVGhlIGxpc3RlbmluZyBjb21wb25lbnQgcm9vdCBu
b2RlLgorICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUYXJnZXRJRCBJRCBvZiBgdG9wTGV2
ZWxUYXJnZXRgLgorICAgKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dz
ZXIgZXZlbnQuCisgICAqIEByZXR1cm4geyp9IEFuIGFjY3VtdWxhdGlvbiBvZiBzeW50aGV0aWMg
ZXZlbnRzLgorICAgKiBAc2VlIHtFdmVudFBsdWdpbkh1Yi5leHRyYWN0RXZlbnRzfQorICAgKi8K
KyAgZXh0cmFjdEV2ZW50czogZnVuY3Rpb24oCisgICAgICB0b3BMZXZlbFR5cGUsCisgICAgICB0
b3BMZXZlbFRhcmdldCwKKyAgICAgIHRvcExldmVsVGFyZ2V0SUQsCisgICAgICBuYXRpdmVFdmVu
dCkgeworICAgIGlmICh0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wTW91c2VPdmVy
ICYmCisgICAgICAgIChuYXRpdmVFdmVudC5yZWxhdGVkVGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LmZy
b21FbGVtZW50KSkgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIGlmICh0b3BMZXZl
bFR5cGUgIT09IHRvcExldmVsVHlwZXMudG9wTW91c2VPdXQgJiYKKyAgICAgICAgdG9wTGV2ZWxU
eXBlICE9PSB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlT3ZlcikgeworICAgICAgLy8gTXVzdCBub3Qg
YmUgYSBtb3VzZSBpbiBvciBtb3VzZSBvdXQgLSBpZ25vcmluZy4KKyAgICAgIHJldHVybiBudWxs
OworICAgIH0KKworICAgIHZhciBmcm9tLCB0bzsKKyAgICBpZiAodG9wTGV2ZWxUeXBlID09PSB0
b3BMZXZlbFR5cGVzLnRvcE1vdXNlT3V0KSB7CisgICAgICBmcm9tID0gdG9wTGV2ZWxUYXJnZXQ7
CisgICAgICB0byA9CisgICAgICAgIGdldEZpcnN0UmVhY3RET00obmF0aXZlRXZlbnQucmVsYXRl
ZFRhcmdldCB8fCBuYXRpdmVFdmVudC50b0VsZW1lbnQpIHx8CisgICAgICAgIEV4ZWN1dGlvbkVu
dmlyb25tZW50Lmdsb2JhbDsKKyAgICB9IGVsc2UgeworICAgICAgZnJvbSA9IEV4ZWN1dGlvbkVu
dmlyb25tZW50Lmdsb2JhbDsKKyAgICAgIHRvID0gdG9wTGV2ZWxUYXJnZXQ7CisgICAgfQorCisg
ICAgaWYgKGZyb20gPT09IHRvKSB7CisgICAgICAvLyBOb3RoaW5nIHBlcnRhaW5zIHRvIG91ciBt
YW5hZ2VkIGNvbXBvbmVudHMuCisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICB2YXIg
ZnJvbUlEID0gZnJvbSA/IFJlYWN0SUQuZ2V0SUQoZnJvbSkgOiAnJzsKKyAgICB2YXIgdG9JRCA9
IHRvID8gUmVhY3RJRC5nZXRJRCh0bykgOiAnJzsKKworICAgIHZhciBsZWF2ZSA9IFN5bnRoZXRp
Y01vdXNlRXZlbnQuZ2V0UG9vbGVkKAorICAgICAgZXZlbnRUeXBlcy5tb3VzZUxlYXZlLAorICAg
ICAgZnJvbUlELAorICAgICAgbmF0aXZlRXZlbnQKKyAgICApOworICAgIHZhciBlbnRlciA9IFN5
bnRoZXRpY01vdXNlRXZlbnQuZ2V0UG9vbGVkKAorICAgICAgZXZlbnRUeXBlcy5tb3VzZUVudGVy
LAorICAgICAgdG9JRCwKKyAgICAgIG5hdGl2ZUV2ZW50CisgICAgKTsKKworICAgIEV2ZW50UHJv
cGFnYXRvcnMuYWNjdW11bGF0ZUVudGVyTGVhdmVEaXNwYXRjaGVzKGxlYXZlLCBlbnRlciwgZnJv
bUlELCB0b0lEKTsKKyAgICByZXR1cm4gW2xlYXZlLCBlbnRlcl07CisgIH0KKworfTsKKworbW9k
dWxlLmV4cG9ydHMgPSBFbnRlckxlYXZlRXZlbnRQbHVnaW47CisKK30pKCkKK30seyIuL0V2ZW50
Q29uc3RhbnRzIjoxMywiLi9FdmVudFByb3BhZ2F0b3JzIjoxOCwiLi9FeGVjdXRpb25FbnZpcm9u
bWVudCI6MTksIi4vUmVhY3RJRCI6MzUsIi4vUmVhY3RJbnN0YW5jZUhhbmRsZXMiOjM3LCIuL1N5
bnRoZXRpY01vdXNlRXZlbnQiOjUzLCIuL2tleU9mIjo3OX1dLDEzOltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4K
KyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0
aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNv
bXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0
aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNF
TlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3Jl
ZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNl
bnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJB
TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGll
ZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmlu
ZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoK
KyAqIEBwcm92aWRlc01vZHVsZSBFdmVudENvbnN0YW50cworICovCisKKyJ1c2Ugc3RyaWN0IjsK
KwordmFyIGtleU1pcnJvciA9IHJlcXVpcmUoIi4va2V5TWlycm9yIik7CisKK3ZhciBQcm9wYWdh
dGlvblBoYXNlcyA9IGtleU1pcnJvcih7YnViYmxlZDogbnVsbCwgY2FwdHVyZWQ6IG51bGx9KTsK
KworLyoqCisgKiBUeXBlcyBvZiByYXcgc2lnbmFscyBmcm9tIHRoZSBicm93c2VyIGNhdWdodCBh
dCB0aGUgdG9wIGxldmVsLgorICovCit2YXIgdG9wTGV2ZWxUeXBlcyA9IGtleU1pcnJvcih7Cisg
IHRvcEJsdXI6IG51bGwsCisgIHRvcENoYW5nZTogbnVsbCwKKyAgdG9wQ2xpY2s6IG51bGwsCisg
IHRvcERPTUNoYXJhY3RlckRhdGFNb2RpZmllZDogbnVsbCwKKyAgdG9wRG91YmxlQ2xpY2s6IG51
bGwsCisgIHRvcERyYWc6IG51bGwsCisgIHRvcERyYWdFbmQ6IG51bGwsCisgIHRvcERyYWdFbnRl
cjogbnVsbCwKKyAgdG9wRHJhZ0V4aXQ6IG51bGwsCisgIHRvcERyYWdMZWF2ZTogbnVsbCwKKyAg
dG9wRHJhZ092ZXI6IG51bGwsCisgIHRvcERyYWdTdGFydDogbnVsbCwKKyAgdG9wRHJvcDogbnVs
bCwKKyAgdG9wRm9jdXM6IG51bGwsCisgIHRvcElucHV0OiBudWxsLAorICB0b3BLZXlEb3duOiBu
dWxsLAorICB0b3BLZXlQcmVzczogbnVsbCwKKyAgdG9wS2V5VXA6IG51bGwsCisgIHRvcE1vdXNl
RG93bjogbnVsbCwKKyAgdG9wTW91c2VNb3ZlOiBudWxsLAorICB0b3BNb3VzZU91dDogbnVsbCwK
KyAgdG9wTW91c2VPdmVyOiBudWxsLAorICB0b3BNb3VzZVVwOiBudWxsLAorICB0b3BTY3JvbGw6
IG51bGwsCisgIHRvcFNlbGVjdGlvbkNoYW5nZTogbnVsbCwKKyAgdG9wU3VibWl0OiBudWxsLAor
ICB0b3BUb3VjaENhbmNlbDogbnVsbCwKKyAgdG9wVG91Y2hFbmQ6IG51bGwsCisgIHRvcFRvdWNo
TW92ZTogbnVsbCwKKyAgdG9wVG91Y2hTdGFydDogbnVsbCwKKyAgdG9wV2hlZWw6IG51bGwKK30p
OworCit2YXIgRXZlbnRDb25zdGFudHMgPSB7CisgIHRvcExldmVsVHlwZXM6IHRvcExldmVsVHlw
ZXMsCisgIFByb3BhZ2F0aW9uUGhhc2VzOiBQcm9wYWdhdGlvblBoYXNlcworfTsKKworbW9kdWxl
LmV4cG9ydHMgPSBFdmVudENvbnN0YW50czsKKworfSx7Ii4va2V5TWlycm9yIjo3OH1dLDE0Oltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMg
RmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2Us
IFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZp
bGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0
YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9y
Zy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNh
YmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisg
KiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4
cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxh
bmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRo
ZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBFdmVudExpc3RlbmVyCisgKi8KKwor
LyoqCisgKiBVcHN0cmVhbSB2ZXJzaW9uIG9mIGV2ZW50IGxpc3RlbmVyLiBEb2VzIG5vdCB0YWtl
IGludG8gYWNjb3VudCBzcGVjaWZpYworICogbmF0dXJlIG9mIHBsYXRmb3JtLgorICovCit2YXIg
RXZlbnRMaXN0ZW5lciA9IHsKKyAgLyoqCisgICAqIExpc3RlbnMgdG8gYnViYmxlZCBldmVudHMg
b24gYSBET00gbm9kZS4KKyAgICoKKyAgICogQHBhcmFtIHtFbGVtZW50fSBlbCBET00gZWxlbWVu
dCB0byByZWdpc3RlciBsaXN0ZW5lciBvbi4KKyAgICogQHBhcmFtIHtzdHJpbmd9IGhhbmRsZXJC
YXNlTmFtZSAnY2xpY2snLydtb3VzZW92ZXInCisgICAqIEBwYXJhbSB7RnVuY3Rpb24hfSBjYiBD
YWxsYmFjayBmdW5jdGlvbgorICAgKi8KKyAgbGlzdGVuOiBmdW5jdGlvbihlbCwgaGFuZGxlckJh
c2VOYW1lLCBjYikgeworICAgIGlmIChlbC5hZGRFdmVudExpc3RlbmVyKSB7CisgICAgICBlbC5h
ZGRFdmVudExpc3RlbmVyKGhhbmRsZXJCYXNlTmFtZSwgY2IsIGZhbHNlKTsKKyAgICB9IGVsc2Ug
aWYgKGVsLmF0dGFjaEV2ZW50KSB7CisgICAgICBlbC5hdHRhY2hFdmVudCgnb24nICsgaGFuZGxl
ckJhc2VOYW1lLCBjYik7CisgICAgfQorICB9LAorCisgIC8qKgorICAgKiBMaXN0ZW5zIHRvIGNh
cHR1cmVkIGV2ZW50cyBvbiBhIERPTSBub2RlLgorICAgKgorICAgKiBAc2VlIGBFdmVudExpc3Rl
bmVyLmxpc3RlbmAgZm9yIHBhcmFtcy4KKyAgICogQHRocm93cyBFeGNlcHRpb24gaWYgYWRkRXZl
bnRMaXN0ZW5lciBpcyBub3Qgc3VwcG9ydGVkLgorICAgKi8KKyAgY2FwdHVyZTogZnVuY3Rpb24o
ZWwsIGhhbmRsZXJCYXNlTmFtZSwgY2IpIHsKKyAgICBpZiAoIWVsLmFkZEV2ZW50TGlzdGVuZXIp
IHsKKyAgICAgIGlmICh0cnVlKSB7CisgICAgICAgIGNvbnNvbGUuZXJyb3IoCisgICAgICAgICAg
J1lvdSBhcmUgYXR0ZW1wdGluZyB0byB1c2UgYWRkRXZlbnRsaXN0ZW5lciAnICsKKyAgICAgICAg
ICAnaW4gYSBicm93c2VyIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBpdCBzdXBwb3J0IGl0LicgKwor
ICAgICAgICAgICdUaGlzIGxpa2VseSBtZWFucyB0aGF0IHlvdSB3aWxsIG5vdCByZWNlaXZlIGV2
ZW50cyB0aGF0ICcgKworICAgICAgICAgICd5b3VyIGFwcGxpY2F0aW9uIHJlbGllcyBvbiAoc3Vj
aCBhcyBzY3JvbGwpLicpOworICAgICAgfQorICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7Cisg
ICAgICBlbC5hZGRFdmVudExpc3RlbmVyKGhhbmRsZXJCYXNlTmFtZSwgY2IsIHRydWUpOworICAg
IH0KKyAgfQorfTsKKworbW9kdWxlLmV4cG9ydHMgPSBFdmVudExpc3RlbmVyOworCit9LHt9XSwx
NTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAy
MDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNl
bnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhp
cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5
IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNo
ZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBw
bGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmli
dXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lT
LAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhl
ciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZp
YyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRl
ciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUgRXZlbnRQbHVnaW5IdWIKKyAq
LworCisidXNlIHN0cmljdCI7CisKK3ZhciBDYWxsYmFja1JlZ2lzdHJ5ID0gcmVxdWlyZSgiLi9D
YWxsYmFja1JlZ2lzdHJ5Iik7Cit2YXIgRXZlbnRQbHVnaW5SZWdpc3RyeSA9IHJlcXVpcmUoIi4v
RXZlbnRQbHVnaW5SZWdpc3RyeSIpOwordmFyIEV2ZW50UGx1Z2luVXRpbHMgPSByZXF1aXJlKCIu
L0V2ZW50UGx1Z2luVXRpbHMiKTsKK3ZhciBFdmVudFByb3BhZ2F0b3JzID0gcmVxdWlyZSgiLi9F
dmVudFByb3BhZ2F0b3JzIik7Cit2YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKCIu
L0V4ZWN1dGlvbkVudmlyb25tZW50Iik7CisKK3ZhciBhY2N1bXVsYXRlID0gcmVxdWlyZSgiLi9h
Y2N1bXVsYXRlIik7Cit2YXIgZm9yRWFjaEFjY3VtdWxhdGVkID0gcmVxdWlyZSgiLi9mb3JFYWNo
QWNjdW11bGF0ZWQiKTsKK3ZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCIuL2ludmFyaWFudCIpOwor
CisvKioKKyAqIEludGVybmFsIHF1ZXVlIG9mIGV2ZW50cyB0aGF0IGhhdmUgYWNjdW11bGF0ZWQg
dGhlaXIgZGlzcGF0Y2hlcyBhbmQgYXJlCisgKiB3YWl0aW5nIHRvIGhhdmUgdGhlaXIgZGlzcGF0
Y2hlcyBleGVjdXRlZC4KKyAqLwordmFyIGV2ZW50UXVldWUgPSBudWxsOworCisvKioKKyAqIERp
c3BhdGNoZXMgYW4gZXZlbnQgYW5kIHJlbGVhc2VzIGl0IGJhY2sgaW50byB0aGUgcG9vbCwgdW5s
ZXNzIHBlcnNpc3RlbnQuCisgKgorICogQHBhcmFtIHs/b2JqZWN0fSBldmVudCBTeW50aGV0aWMg
ZXZlbnQgdG8gYmUgZGlzcGF0Y2hlZC4KKyAqIEBwcml2YXRlCisgKi8KK3ZhciBleGVjdXRlRGlz
cGF0Y2hlc0FuZFJlbGVhc2UgPSBmdW5jdGlvbihldmVudCkgeworICBpZiAoZXZlbnQpIHsKKyAg
ICB2YXIgZXhlY3V0ZURpc3BhdGNoID0gRXZlbnRQbHVnaW5VdGlscy5leGVjdXRlRGlzcGF0Y2g7
CisgICAgLy8gUGx1Z2lucyBjYW4gcHJvdmlkZSBjdXN0b20gYmVoYXZpb3Igd2hlbiBkaXNwYXRj
aGluZyBldmVudHMuCisgICAgdmFyIFBsdWdpbk1vZHVsZSA9IEV2ZW50UGx1Z2luUmVnaXN0cnku
Z2V0UGx1Z2luTW9kdWxlRm9yRXZlbnQoZXZlbnQpOworICAgIGlmIChQbHVnaW5Nb2R1bGUgJiYg
UGx1Z2luTW9kdWxlLmV4ZWN1dGVEaXNwYXRjaCkgeworICAgICAgZXhlY3V0ZURpc3BhdGNoID0g
UGx1Z2luTW9kdWxlLmV4ZWN1dGVEaXNwYXRjaDsKKyAgICB9CisgICAgRXZlbnRQbHVnaW5VdGls
cy5leGVjdXRlRGlzcGF0Y2hlc0luT3JkZXIoZXZlbnQsIGV4ZWN1dGVEaXNwYXRjaCk7CisKKyAg
ICBpZiAoIWV2ZW50LmlzUGVyc2lzdGVudCgpKSB7CisgICAgICBldmVudC5jb25zdHJ1Y3Rvci5y
ZWxlYXNlKGV2ZW50KTsKKyAgICB9CisgIH0KK307CisKKy8qKgorICogVGhpcyBpcyBhIHVuaWZp
ZWQgaW50ZXJmYWNlIGZvciBldmVudCBwbHVnaW5zIHRvIGJlIGluc3RhbGxlZCBhbmQgY29uZmln
dXJlZC4KKyAqCisgKiBFdmVudCBwbHVnaW5zIGNhbiBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBw
cm9wZXJ0aWVzOgorICoKKyAqICAgYGV4dHJhY3RFdmVudHNgIHtmdW5jdGlvbihzdHJpbmcsIERP
TUV2ZW50VGFyZ2V0LCBzdHJpbmcsIG9iamVjdCk6ICp9CisgKiAgICAgUmVxdWlyZWQuIFdoZW4g
YSB0b3AtbGV2ZWwgZXZlbnQgaXMgZmlyZWQsIHRoaXMgbWV0aG9kIGlzIGV4cGVjdGVkIHRvCisg
KiAgICAgZXh0cmFjdCBzeW50aGV0aWMgZXZlbnRzIHRoYXQgd2lsbCBpbiB0dXJuIGJlIHF1ZXVl
ZCBhbmQgZGlzcGF0Y2hlZC4KKyAqCisgKiAgIGBldmVudFR5cGVzYCB7b2JqZWN0fQorICogICAg
IE9wdGlvbmFsLCBwbHVnaW5zIHRoYXQgZmlyZSBldmVudHMgbXVzdCBwdWJsaXNoIGEgbWFwcGlu
ZyBvZiByZWdpc3RyYXRpb24KKyAqICAgICBuYW1lcyB0aGF0IGFyZSB1c2VkIHRvIHJlZ2lzdGVy
IGxpc3RlbmVycy4gVmFsdWVzIG9mIHRoaXMgbWFwcGluZyBtdXN0CisgKiAgICAgYmUgb2JqZWN0
cyB0aGF0IGNvbnRhaW4gYHJlZ2lzdHJhdGlvbk5hbWVgIG9yIGBwaGFzZWRSZWdpc3RyYXRpb25O
YW1lc2AuCisgKgorICogICBgZXhlY3V0ZURpc3BhdGNoYCB7ZnVuY3Rpb24ob2JqZWN0LCBmdW5j
dGlvbiwgc3RyaW5nKX0KKyAqICAgICBPcHRpb25hbCwgYWxsb3dzIHBsdWdpbnMgdG8gb3ZlcnJp
ZGUgaG93IGFuIGV2ZW50IGdldHMgZGlzcGF0Y2hlZC4gQnkKKyAqICAgICBkZWZhdWx0LCB0aGUg
bGlzdGVuZXIgaXMgc2ltcGx5IGludm9rZWQuCisgKgorICogRWFjaCBwbHVnaW4gdGhhdCBpcyBp
bmplY3RlZCBpbnRvIGBFdmVudHNQbHVnaW5IdWJgIGlzIGltbWVkaWF0ZWx5IG9wZXJhYmxlLgor
ICoKKyAqIEBwdWJsaWMKKyAqLwordmFyIEV2ZW50UGx1Z2luSHViID0geworCisgIC8qKgorICAg
KiBNZXRob2RzIGZvciBpbmplY3RpbmcgZGVwZW5kZW5jaWVzLgorICAgKi8KKyAgaW5qZWN0aW9u
OiB7CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge29iamVjdH0gSW5qZWN0ZWRJbnN0YW5jZUhh
bmRsZQorICAgICAqIEBwdWJsaWMKKyAgICAgKi8KKyAgICBpbmplY3RJbnN0YW5jZUhhbmRsZTog
RXZlbnRQcm9wYWdhdG9ycy5pbmplY3Rpb24uaW5qZWN0SW5zdGFuY2VIYW5kbGUsCisKKyAgICAv
KioKKyAgICAgKiBAcGFyYW0ge2FycmF5fSBJbmplY3RlZEV2ZW50UGx1Z2luT3JkZXIKKyAgICAg
KiBAcHVibGljCisgICAgICovCisgICAgaW5qZWN0RXZlbnRQbHVnaW5PcmRlcjogRXZlbnRQbHVn
aW5SZWdpc3RyeS5pbmplY3RFdmVudFBsdWdpbk9yZGVyLAorCisgICAgLyoqCisgICAgICogQHBh
cmFtIHtvYmplY3R9IGluamVjdGVkTmFtZXNUb1BsdWdpbnMgTWFwIGZyb20gbmFtZXMgdG8gcGx1
Z2luIG1vZHVsZXMuCisgICAgICovCisgICAgaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lOiBFdmVu
dFBsdWdpblJlZ2lzdHJ5LmluamVjdEV2ZW50UGx1Z2luc0J5TmFtZQorCisgIH0sCisKKyAgcmVn
aXN0cmF0aW9uTmFtZXM6IEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZXMsCisK
KyAgcHV0TGlzdGVuZXI6IENhbGxiYWNrUmVnaXN0cnkucHV0TGlzdGVuZXIsCisKKyAgZ2V0TGlz
dGVuZXI6IENhbGxiYWNrUmVnaXN0cnkuZ2V0TGlzdGVuZXIsCisKKyAgZGVsZXRlTGlzdGVuZXI6
IENhbGxiYWNrUmVnaXN0cnkuZGVsZXRlTGlzdGVuZXIsCisKKyAgZGVsZXRlQWxsTGlzdGVuZXJz
OiBDYWxsYmFja1JlZ2lzdHJ5LmRlbGV0ZUFsbExpc3RlbmVycywKKworICAvKioKKyAgICogQWxs
b3dzIHJlZ2lzdGVyZWQgcGx1Z2lucyBhbiBvcHBvcnR1bml0eSB0byBleHRyYWN0IGV2ZW50cyBm
cm9tIHRvcC1sZXZlbAorICAgKiBuYXRpdmUgYnJvd3NlciBldmVudHMuCisgICAqCisgICAqIEBw
YXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC4K
KyAgICogQHBhcmFtIHtET01FdmVudFRhcmdldH0gdG9wTGV2ZWxUYXJnZXQgVGhlIGxpc3Rlbmlu
ZyBjb21wb25lbnQgcm9vdCBub2RlLgorICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUYXJn
ZXRJRCBJRCBvZiBgdG9wTGV2ZWxUYXJnZXRgLgorICAgKiBAcGFyYW0ge29iamVjdH0gbmF0aXZl
RXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuCisgICAqIEByZXR1cm4geyp9IEFuIGFjY3VtdWxh
dGlvbiBvZiBzeW50aGV0aWMgZXZlbnRzLgorICAgKiBAaW50ZXJuYWwKKyAgICovCisgIGV4dHJh
Y3RFdmVudHM6IGZ1bmN0aW9uKAorICAgICAgdG9wTGV2ZWxUeXBlLAorICAgICAgdG9wTGV2ZWxU
YXJnZXQsCisgICAgICB0b3BMZXZlbFRhcmdldElELAorICAgICAgbmF0aXZlRXZlbnQpIHsKKyAg
ICB2YXIgZXZlbnRzOworICAgIHZhciBwbHVnaW5zID0gRXZlbnRQbHVnaW5SZWdpc3RyeS5wbHVn
aW5zOworICAgIGZvciAodmFyIGkgPSAwLCBsID0gcGx1Z2lucy5sZW5ndGg7IGkgPCBsOyBpKysp
IHsKKyAgICAgIC8vIE5vdCBldmVyeSBwbHVnaW4gaW4gdGhlIG9yZGVyaW5nIG1heSBiZSBsb2Fk
ZWQgYXQgcnVudGltZS4KKyAgICAgIHZhciBwb3NzaWJsZVBsdWdpbiA9IHBsdWdpbnNbaV07Cisg
ICAgICBpZiAocG9zc2libGVQbHVnaW4pIHsKKyAgICAgICAgdmFyIGV4dHJhY3RlZEV2ZW50cyA9
IHBvc3NpYmxlUGx1Z2luLmV4dHJhY3RFdmVudHMoCisgICAgICAgICAgdG9wTGV2ZWxUeXBlLAor
ICAgICAgICAgIHRvcExldmVsVGFyZ2V0LAorICAgICAgICAgIHRvcExldmVsVGFyZ2V0SUQsCisg
ICAgICAgICAgbmF0aXZlRXZlbnQKKyAgICAgICAgKTsKKyAgICAgICAgaWYgKGV4dHJhY3RlZEV2
ZW50cykgeworICAgICAgICAgIGV2ZW50cyA9IGFjY3VtdWxhdGUoZXZlbnRzLCBleHRyYWN0ZWRF
dmVudHMpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBldmVudHM7Cisg
IH0sCisKKyAgLyoqCisgICAqIEVucXVldWVzIGEgc3ludGhldGljIGV2ZW50IHRoYXQgc2hvdWxk
IGJlIGRpc3BhdGNoZWQgd2hlbgorICAgKiBgcHJvY2Vzc0V2ZW50UXVldWVgIGlzIGludm9rZWQu
CisgICAqCisgICAqIEBwYXJhbSB7Kn0gZXZlbnRzIEFuIGFjY3VtdWxhdGlvbiBvZiBzeW50aGV0
aWMgZXZlbnRzLgorICAgKiBAaW50ZXJuYWwKKyAgICovCisgIGVucXVldWVFdmVudHM6IGZ1bmN0
aW9uKGV2ZW50cykgeworICAgIGlmIChldmVudHMpIHsKKyAgICAgIGV2ZW50UXVldWUgPSBhY2N1
bXVsYXRlKGV2ZW50UXVldWUsIGV2ZW50cyk7CisgICAgfQorICB9LAorCisgIC8qKgorICAgKiBE
aXNwYXRjaGVzIGFsbCBzeW50aGV0aWMgZXZlbnRzIG9uIHRoZSBldmVudCBxdWV1ZS4KKyAgICoK
KyAgICogQGludGVybmFsCisgICAqLworICBwcm9jZXNzRXZlbnRRdWV1ZTogZnVuY3Rpb24oKSB7
CisgICAgLy8gU2V0IGBldmVudFF1ZXVlYCB0byBudWxsIGJlZm9yZSBwcm9jZXNzaW5nIGl0IHNv
IHRoYXQgd2UgY2FuIHRlbGwgaWYgbW9yZQorICAgIC8vIGV2ZW50cyBnZXQgZW5xdWV1ZWQgd2hp
bGUgcHJvY2Vzc2luZy4KKyAgICB2YXIgcHJvY2Vzc2luZ0V2ZW50UXVldWUgPSBldmVudFF1ZXVl
OworICAgIGV2ZW50UXVldWUgPSBudWxsOworICAgIGZvckVhY2hBY2N1bXVsYXRlZChwcm9jZXNz
aW5nRXZlbnRRdWV1ZSwgZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlKTsKKyAgICBpbnZhcmlh
bnQoCisgICAgICAhZXZlbnRRdWV1ZSwKKyAgICAgICdwcm9jZXNzRXZlbnRRdWV1ZSgpOiBBZGRp
dGlvbmFsIGV2ZW50cyB3ZXJlIGVucXVldWVkIHdoaWxlIHByb2Nlc3NpbmcgJyArCisgICAgICAn
YW4gZXZlbnQgcXVldWUuIFN1cHBvcnQgZm9yIHRoaXMgaGFzIG5vdCB5ZXQgYmVlbiBpbXBsZW1l
bnRlZC4nCisgICAgKTsKKyAgfQorCit9OworCitpZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2Fu
VXNlRE9NKSB7CisgIHdpbmRvdy5FdmVudFBsdWdpbkh1YiA9IEV2ZW50UGx1Z2luSHViOworfQor
Cittb2R1bGUuZXhwb3J0cyA9IEV2ZW50UGx1Z2luSHViOworCit9LHsiLi9DYWxsYmFja1JlZ2lz
dHJ5Ijo0LCIuL0V2ZW50UGx1Z2luUmVnaXN0cnkiOjE2LCIuL0V2ZW50UGx1Z2luVXRpbHMiOjE3
LCIuL0V2ZW50UHJvcGFnYXRvcnMiOjE4LCIuL0V4ZWN1dGlvbkVudmlyb25tZW50IjoxOSwiLi9h
Y2N1bXVsYXRlIjo2MCwiLi9mb3JFYWNoQWNjdW11bGF0ZWQiOjY4LCIuL2ludmFyaWFudCI6NzV9
XSwxNjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdo
dCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBM
aWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2Ug
dGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3Ug
bWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFw
YWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkg
YXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0
cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJB
U0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVp
dGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVj
aWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1
bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUgRXZlbnRQbHVnaW5SZWdp
c3RyeQorICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHkKKyAqLworCisidXNlIHN0cmljdCI7CisK
K3ZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCIuL2ludmFyaWFudCIpOworCisvKioKKyAqIEluamVj
dGFibGUgb3JkZXJpbmcgb2YgZXZlbnQgcGx1Z2lucy4KKyAqLwordmFyIEV2ZW50UGx1Z2luT3Jk
ZXIgPSBudWxsOworCisvKioKKyAqIEluamVjdGFibGUgbWFwcGluZyBmcm9tIG5hbWVzIHRvIGV2
ZW50IHBsdWdpbiBtb2R1bGVzLgorICovCit2YXIgbmFtZXNUb1BsdWdpbnMgPSB7fTsKKworLyoq
CisgKiBSZWNvbXB1dGVzIHRoZSBwbHVnaW4gbGlzdCB1c2luZyB0aGUgaW5qZWN0ZWQgcGx1Z2lu
cyBhbmQgcGx1Z2luIG9yZGVyaW5nLgorICoKKyAqIEBwcml2YXRlCisgKi8KK2Z1bmN0aW9uIHJl
Y29tcHV0ZVBsdWdpbk9yZGVyaW5nKCkgeworICBpZiAoIUV2ZW50UGx1Z2luT3JkZXIpIHsKKyAg
ICAvLyBXYWl0IHVudGlsIGFuIGBFdmVudFBsdWdpbk9yZGVyYCBpcyBpbmplY3RlZC4KKyAgICBy
ZXR1cm47CisgIH0KKyAgZm9yICh2YXIgcGx1Z2luTmFtZSBpbiBuYW1lc1RvUGx1Z2lucykgewor
ICAgIHZhciBQbHVnaW5Nb2R1bGUgPSBuYW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lXTsKKyAgICB2
YXIgcGx1Z2luSW5kZXggPSBFdmVudFBsdWdpbk9yZGVyLmluZGV4T2YocGx1Z2luTmFtZSk7Cisg
ICAgaW52YXJpYW50KAorICAgICAgcGx1Z2luSW5kZXggPiAtMSwKKyAgICAgICdFdmVudFBsdWdp
blJlZ2lzdHJ5OiBDYW5ub3QgaW5qZWN0IGV2ZW50IHBsdWdpbnMgdGhhdCBkbyBub3QgZXhpc3Qg
aW4gJyArCisgICAgICAndGhlIHBsdWdpbiBvcmRlcmluZywgYCVzYC4nLAorICAgICAgcGx1Z2lu
TmFtZQorICAgICk7CisgICAgaWYgKEV2ZW50UGx1Z2luUmVnaXN0cnkucGx1Z2luc1twbHVnaW5J
bmRleF0pIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBpbnZhcmlhbnQoCisgICAgICBQ
bHVnaW5Nb2R1bGUuZXh0cmFjdEV2ZW50cywKKyAgICAgICdFdmVudFBsdWdpblJlZ2lzdHJ5OiBF
dmVudCBwbHVnaW5zIG11c3QgaW1wbGVtZW50IGFuIGBleHRyYWN0RXZlbnRzYCAnICsKKyAgICAg
ICdtZXRob2QsIGJ1dCBgJXNgIGRvZXMgbm90LicsCisgICAgICBwbHVnaW5OYW1lCisgICAgKTsK
KyAgICBFdmVudFBsdWdpblJlZ2lzdHJ5LnBsdWdpbnNbcGx1Z2luSW5kZXhdID0gUGx1Z2luTW9k
dWxlOworICAgIHZhciBwdWJsaXNoZWRFdmVudHMgPSBQbHVnaW5Nb2R1bGUuZXZlbnRUeXBlczsK
KyAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gcHVibGlzaGVkRXZlbnRzKSB7CisgICAgICBpbnZh
cmlhbnQoCisgICAgICAgIHB1Ymxpc2hFdmVudEZvclBsdWdpbihwdWJsaXNoZWRFdmVudHNbZXZl
bnROYW1lXSwgUGx1Z2luTW9kdWxlKSwKKyAgICAgICAgJ0V2ZW50UGx1Z2luUmVnaXN0cnk6IEZh
aWxlZCB0byBwdWJsaXNoIGV2ZW50IGAlc2AgZm9yIHBsdWdpbiBgJXNgLicsCisgICAgICAgIGV2
ZW50TmFtZSwKKyAgICAgICAgcGx1Z2luTmFtZQorICAgICAgKTsKKyAgICB9CisgIH0KK30KKwor
LyoqCisgKiBQdWJsaXNoZXMgYW4gZXZlbnQgc28gdGhhdCBpdCBjYW4gYmUgZGlzcGF0Y2hlZCBi
eSB0aGUgc3VwcGxpZWQgcGx1Z2luLgorICoKKyAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENv
bmZpZyBEaXNwYXRjaCBjb25maWd1cmF0aW9uIGZvciB0aGUgZXZlbnQuCisgKiBAcGFyYW0ge29i
amVjdH0gUGx1Z2luTW9kdWxlIFBsdWdpbiBwdWJsaXNoaW5nIHRoZSBldmVudC4KKyAqIEByZXR1
cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGV2ZW50IHdhcyBzdWNjZXNzZnVsbHkgcHVibGlzaGVk
LgorICogQHByaXZhdGUKKyAqLworZnVuY3Rpb24gcHVibGlzaEV2ZW50Rm9yUGx1Z2luKGRpc3Bh
dGNoQ29uZmlnLCBQbHVnaW5Nb2R1bGUpIHsKKyAgdmFyIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVz
ID0gZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM7CisgIGlmIChwaGFzZWRS
ZWdpc3RyYXRpb25OYW1lcykgeworICAgIGZvciAodmFyIHBoYXNlTmFtZSBpbiBwaGFzZWRSZWdp
c3RyYXRpb25OYW1lcykgeworICAgICAgaWYgKHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzLmhhc093
blByb3BlcnR5KHBoYXNlTmFtZSkpIHsKKyAgICAgICAgdmFyIHBoYXNlZFJlZ2lzdHJhdGlvbk5h
bWUgPSBwaGFzZWRSZWdpc3RyYXRpb25OYW1lc1twaGFzZU5hbWVdOworICAgICAgICBwdWJsaXNo
UmVnaXN0cmF0aW9uTmFtZShwaGFzZWRSZWdpc3RyYXRpb25OYW1lLCBQbHVnaW5Nb2R1bGUpOwor
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfSBlbHNlIGlmIChkaXNwYXRjaENv
bmZpZy5yZWdpc3RyYXRpb25OYW1lKSB7CisgICAgcHVibGlzaFJlZ2lzdHJhdGlvbk5hbWUoZGlz
cGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSwgUGx1Z2luTW9kdWxlKTsKKyAgICByZXR1cm4g
dHJ1ZTsKKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKKy8qKgorICogUHVibGlzaGVzIGEgcmVn
aXN0cmF0aW9uIG5hbWUgdGhhdCBpcyB1c2VkIHRvIGlkZW50aWZ5IGRpc3BhdGNoZWQgZXZlbnRz
IGFuZAorICogY2FuIGJlIHVzZWQgd2l0aCBgRXZlbnRQbHVnaW5IdWIucHV0TGlzdGVuZXJgIHRv
IHJlZ2lzdGVyIGxpc3RlbmVycy4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gcmVnaXN0cmF0aW9u
TmFtZSBSZWdpc3RyYXRpb24gbmFtZSB0byBhZGQuCisgKiBAcGFyYW0ge29iamVjdH0gUGx1Z2lu
TW9kdWxlIFBsdWdpbiBwdWJsaXNoaW5nIHRoZSBldmVudC4KKyAqIEBwcml2YXRlCisgKi8KK2Z1
bmN0aW9uIHB1Ymxpc2hSZWdpc3RyYXRpb25OYW1lKHJlZ2lzdHJhdGlvbk5hbWUsIFBsdWdpbk1v
ZHVsZSkgeworICBpbnZhcmlhbnQoCisgICAgIUV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0
aW9uTmFtZXNbcmVnaXN0cmF0aW9uTmFtZV0sCisgICAgJ0V2ZW50UGx1Z2luSHViOiBNb3JlIHRo
YW4gb25lIHBsdWdpbiBhdHRlbXB0ZWQgdG8gcHVibGlzaCB0aGUgc2FtZSAnICsKKyAgICAncmVn
aXN0cmF0aW9uIG5hbWUsIGAlc2AuJywKKyAgICByZWdpc3RyYXRpb25OYW1lCisgICk7CisgIEV2
ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZXNbcmVnaXN0cmF0aW9uTmFtZV0gPSBQ
bHVnaW5Nb2R1bGU7CisgIEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZXNLZXlz
LnB1c2gocmVnaXN0cmF0aW9uTmFtZSk7Cit9CisKKy8qKgorICogUmVnaXN0ZXJzIHBsdWdpbnMg
c28gdGhhdCB0aGV5IGNhbiBleHRyYWN0IGFuZCBkaXNwYXRjaCBldmVudHMuCisgKgorICogQHNl
ZSB7RXZlbnRQbHVnaW5IdWJ9CisgKi8KK3ZhciBFdmVudFBsdWdpblJlZ2lzdHJ5ID0geworCisg
IC8qKgorICAgKiBPcmRlcmVkIGxpc3Qgb2YgaW5qZWN0ZWQgcGx1Z2lucy4KKyAgICovCisgIHBs
dWdpbnM6IFtdLAorCisgIC8qKgorICAgKiBNYXBwaW5nIGZyb20gcmVnaXN0cmF0aW9uIG5hbWVz
IHRvIHBsdWdpbiBtb2R1bGVzLgorICAgKi8KKyAgcmVnaXN0cmF0aW9uTmFtZXM6IHt9LAorCisg
IC8qKgorICAgKiBUaGUga2V5cyBvZiBgcmVnaXN0cmF0aW9uTmFtZXNgLgorICAgKi8KKyAgcmVn
aXN0cmF0aW9uTmFtZXNLZXlzOiBbXSwKKworICAvKioKKyAgICogSW5qZWN0cyBhbiBvcmRlcmlu
ZyBvZiBwbHVnaW5zIChieSBwbHVnaW4gbmFtZSkuIFRoaXMgYWxsb3dzIHRoZSBvcmRlcmluZwor
ICAgKiB0byBiZSBkZWNvdXBsZWQgZnJvbSBpbmplY3Rpb24gb2YgdGhlIGFjdHVhbCBwbHVnaW5z
IHNvIHRoYXQgb3JkZXJpbmcgaXMKKyAgICogYWx3YXlzIGRldGVybWluaXN0aWMgcmVnYXJkbGVz
cyBvZiBwYWNrYWdpbmcsIG9uLXRoZS1mbHkgaW5qZWN0aW9uLCBldGMuCisgICAqCisgICAqIEBw
YXJhbSB7YXJyYXl9IEluamVjdGVkRXZlbnRQbHVnaW5PcmRlcgorICAgKiBAaW50ZXJuYWwKKyAg
ICogQHNlZSB7RXZlbnRQbHVnaW5IdWIuaW5qZWN0aW9uLmluamVjdEV2ZW50UGx1Z2luT3JkZXJ9
CisgICAqLworICBpbmplY3RFdmVudFBsdWdpbk9yZGVyOiBmdW5jdGlvbihJbmplY3RlZEV2ZW50
UGx1Z2luT3JkZXIpIHsKKyAgICBpbnZhcmlhbnQoCisgICAgICAhRXZlbnRQbHVnaW5PcmRlciwK
KyAgICAgICdFdmVudFBsdWdpblJlZ2lzdHJ5OiBDYW5ub3QgaW5qZWN0IGV2ZW50IHBsdWdpbiBv
cmRlcmluZyBtb3JlIHRoYW4gb25jZS4nCisgICAgKTsKKyAgICAvLyBDbG9uZSB0aGUgb3JkZXJp
bmcgc28gaXQgY2Fubm90IGJlIGR5bmFtaWNhbGx5IG11dGF0ZWQuCisgICAgRXZlbnRQbHVnaW5P
cmRlciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKEluamVjdGVkRXZlbnRQbHVnaW5PcmRl
cik7CisgICAgcmVjb21wdXRlUGx1Z2luT3JkZXJpbmcoKTsKKyAgfSwKKworICAvKioKKyAgICog
SW5qZWN0cyBwbHVnaW5zIHRvIGJlIHVzZWQgYnkgYEV2ZW50UGx1Z2luSHViYC4gVGhlIHBsdWdp
biBuYW1lcyBtdXN0IGJlCisgICAqIGluIHRoZSBvcmRlcmluZyBpbmplY3RlZCBieSBgaW5qZWN0
RXZlbnRQbHVnaW5PcmRlcmAuCisgICAqCisgICAqIFBsdWdpbnMgY2FuIGJlIGluamVjdGVkIGFz
IHBhcnQgb2YgcGFnZSBpbml0aWFsaXphdGlvbiBvciBvbi10aGUtZmx5LgorICAgKgorICAgKiBA
cGFyYW0ge29iamVjdH0gaW5qZWN0ZWROYW1lc1RvUGx1Z2lucyBNYXAgZnJvbSBuYW1lcyB0byBw
bHVnaW4gbW9kdWxlcy4KKyAgICogQGludGVybmFsCisgICAqIEBzZWUge0V2ZW50UGx1Z2luSHVi
LmluamVjdGlvbi5pbmplY3RFdmVudFBsdWdpbnNCeU5hbWV9CisgICAqLworICBpbmplY3RFdmVu
dFBsdWdpbnNCeU5hbWU6IGZ1bmN0aW9uKGluamVjdGVkTmFtZXNUb1BsdWdpbnMpIHsKKyAgICB2
YXIgaXNPcmRlcmluZ0RpcnR5ID0gZmFsc2U7CisgICAgZm9yICh2YXIgcGx1Z2luTmFtZSBpbiBp
bmplY3RlZE5hbWVzVG9QbHVnaW5zKSB7CisgICAgICBpZiAoIWluamVjdGVkTmFtZXNUb1BsdWdp
bnMuaGFzT3duUHJvcGVydHkocGx1Z2luTmFtZSkpIHsKKyAgICAgICAgY29udGludWU7CisgICAg
ICB9CisgICAgICB2YXIgUGx1Z2luTW9kdWxlID0gaW5qZWN0ZWROYW1lc1RvUGx1Z2luc1twbHVn
aW5OYW1lXTsKKyAgICAgIGlmIChuYW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lXSAhPT0gUGx1Z2lu
TW9kdWxlKSB7CisgICAgICAgIGludmFyaWFudCgKKyAgICAgICAgICAhbmFtZXNUb1BsdWdpbnNb
cGx1Z2luTmFtZV0sCisgICAgICAgICAgJ0V2ZW50UGx1Z2luUmVnaXN0cnk6IENhbm5vdCBpbmpl
Y3QgdHdvIGRpZmZlcmVudCBldmVudCBwbHVnaW5zICcgKworICAgICAgICAgICd1c2luZyB0aGUg
c2FtZSBuYW1lLCBgJXNgLicsCisgICAgICAgICAgcGx1Z2luTmFtZQorICAgICAgICApOworICAg
ICAgICBuYW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lXSA9IFBsdWdpbk1vZHVsZTsKKyAgICAgICAg
aXNPcmRlcmluZ0RpcnR5ID0gdHJ1ZTsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKGlzT3JkZXJp
bmdEaXJ0eSkgeworICAgICAgcmVjb21wdXRlUGx1Z2luT3JkZXJpbmcoKTsKKyAgICB9CisgIH0s
CisKKyAgLyoqCisgICAqIExvb2tzIHVwIHRoZSBwbHVnaW4gZm9yIHRoZSBzdXBwbGllZCBldmVu
dC4KKyAgICoKKyAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEEgc3ludGhldGljIGV2ZW50Lgor
ICAgKiBAcmV0dXJuIHs/b2JqZWN0fSBUaGUgcGx1Z2luIHRoYXQgY3JlYXRlZCB0aGUgc3VwcGxp
ZWQgZXZlbnQuCisgICAqIEBpbnRlcm5hbAorICAgKi8KKyAgZ2V0UGx1Z2luTW9kdWxlRm9yRXZl
bnQ6IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgdmFyIGRpc3BhdGNoQ29uZmlnID0gZXZlbnQuZGlz
cGF0Y2hDb25maWc7CisgICAgaWYgKGRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUpIHsK
KyAgICAgIHJldHVybiBFdmVudFBsdWdpblJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVzWworICAg
ICAgICBkaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lCisgICAgICBdIHx8IG51bGw7Cisg
ICAgfQorICAgIGZvciAodmFyIHBoYXNlIGluIGRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJh
dGlvbk5hbWVzKSB7CisgICAgICBpZiAoIWRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlv
bk5hbWVzLmhhc093blByb3BlcnR5KHBoYXNlKSkgeworICAgICAgICBjb250aW51ZTsKKyAgICAg
IH0KKyAgICAgIHZhciBQbHVnaW5Nb2R1bGUgPSBFdmVudFBsdWdpblJlZ2lzdHJ5LnJlZ2lzdHJh
dGlvbk5hbWVzWworICAgICAgICBkaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1l
c1twaGFzZV0KKyAgICAgIF07CisgICAgICBpZiAoUGx1Z2luTW9kdWxlKSB7CisgICAgICAgIHJl
dHVybiBQbHVnaW5Nb2R1bGU7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBudWxsOworICB9
LAorCisgIC8qKgorICAgKiBFeHBvc2VkIGZvciB1bml0IHRlc3RpbmcuCisgICAqIEBwcml2YXRl
CisgICAqLworICBfcmVzZXRFdmVudFBsdWdpbnM6IGZ1bmN0aW9uKCkgeworICAgIEV2ZW50UGx1
Z2luT3JkZXIgPSBudWxsOworICAgIGZvciAodmFyIHBsdWdpbk5hbWUgaW4gbmFtZXNUb1BsdWdp
bnMpIHsKKyAgICAgIGlmIChuYW1lc1RvUGx1Z2lucy5oYXNPd25Qcm9wZXJ0eShwbHVnaW5OYW1l
KSkgeworICAgICAgICBkZWxldGUgbmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZV07CisgICAgICB9
CisgICAgfQorICAgIEV2ZW50UGx1Z2luUmVnaXN0cnkucGx1Z2lucy5sZW5ndGggPSAwOworICAg
IHZhciByZWdpc3RyYXRpb25OYW1lcyA9IEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9u
TmFtZXM7CisgICAgZm9yICh2YXIgcmVnaXN0cmF0aW9uTmFtZSBpbiByZWdpc3RyYXRpb25OYW1l
cykgeworICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVzLmhhc093blByb3BlcnR5KHJlZ2lzdHJh
dGlvbk5hbWUpKSB7CisgICAgICAgIGRlbGV0ZSByZWdpc3RyYXRpb25OYW1lc1tyZWdpc3RyYXRp
b25OYW1lXTsKKyAgICAgIH0KKyAgICB9CisgICAgRXZlbnRQbHVnaW5SZWdpc3RyeS5yZWdpc3Ry
YXRpb25OYW1lc0tleXMubGVuZ3RoID0gMDsKKyAgfQorCit9OworCittb2R1bGUuZXhwb3J0cyA9
IEV2ZW50UGx1Z2luUmVnaXN0cnk7CisKK30seyIuL2ludmFyaWFudCI6NzV9XSwxNzpbZnVuY3Rp
b24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vi
b29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJz
aW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4
Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBh
IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGlj
ZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBs
YXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRl
ciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lU
SE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNz
IG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFn
ZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGlj
ZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUgRXZlbnRQbHVnaW5VdGlscworICovCisKKyJ1
c2Ugc3RyaWN0IjsKKwordmFyIEV2ZW50Q29uc3RhbnRzID0gcmVxdWlyZSgiLi9FdmVudENvbnN0
YW50cyIpOworCit2YXIgaW52YXJpYW50ID0gcmVxdWlyZSgiLi9pbnZhcmlhbnQiKTsKKwordmFy
IHRvcExldmVsVHlwZXMgPSBFdmVudENvbnN0YW50cy50b3BMZXZlbFR5cGVzOworCitmdW5jdGlv
biBpc0VuZGlzaCh0b3BMZXZlbFR5cGUpIHsKKyAgcmV0dXJuIHRvcExldmVsVHlwZSA9PT0gdG9w
TGV2ZWxUeXBlcy50b3BNb3VzZVVwIHx8CisgICAgICAgICB0b3BMZXZlbFR5cGUgPT09IHRvcExl
dmVsVHlwZXMudG9wVG91Y2hFbmQgfHwKKyAgICAgICAgIHRvcExldmVsVHlwZSA9PT0gdG9wTGV2
ZWxUeXBlcy50b3BUb3VjaENhbmNlbDsKK30KKworZnVuY3Rpb24gaXNNb3ZlaXNoKHRvcExldmVs
VHlwZSkgeworICByZXR1cm4gdG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcE1vdXNl
TW92ZSB8fAorICAgICAgICAgdG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcFRvdWNo
TW92ZTsKK30KK2Z1bmN0aW9uIGlzU3RhcnRpc2godG9wTGV2ZWxUeXBlKSB7CisgIHJldHVybiB0
b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wTW91c2VEb3duIHx8CisgICAgICAgICB0
b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wVG91Y2hTdGFydDsKK30KKwordmFyIHZh
bGlkYXRlRXZlbnREaXNwYXRjaGVzOworaWYgKHRydWUpIHsKKyAgdmFsaWRhdGVFdmVudERpc3Bh
dGNoZXMgPSBmdW5jdGlvbihldmVudCkgeworICAgIHZhciBkaXNwYXRjaExpc3RlbmVycyA9IGV2
ZW50Ll9kaXNwYXRjaExpc3RlbmVyczsKKyAgICB2YXIgZGlzcGF0Y2hJRHMgPSBldmVudC5fZGlz
cGF0Y2hJRHM7CisKKyAgICB2YXIgbGlzdGVuZXJzSXNBcnIgPSBBcnJheS5pc0FycmF5KGRpc3Bh
dGNoTGlzdGVuZXJzKTsKKyAgICB2YXIgaWRzSXNBcnIgPSBBcnJheS5pc0FycmF5KGRpc3BhdGNo
SURzKTsKKyAgICB2YXIgSURzTGVuID0gaWRzSXNBcnIgPyBkaXNwYXRjaElEcy5sZW5ndGggOiBk
aXNwYXRjaElEcyA/IDEgOiAwOworICAgIHZhciBsaXN0ZW5lcnNMZW4gPSBsaXN0ZW5lcnNJc0Fy
ciA/CisgICAgICBkaXNwYXRjaExpc3RlbmVycy5sZW5ndGggOgorICAgICAgZGlzcGF0Y2hMaXN0
ZW5lcnMgPyAxIDogMDsKKworICAgIGludmFyaWFudCgKKyAgICAgIGlkc0lzQXJyID09PSBsaXN0
ZW5lcnNJc0FyciAmJiBJRHNMZW4gPT09IGxpc3RlbmVyc0xlbiwKKyAgICAgICdFdmVudFBsdWdp
blV0aWxzOiBJbnZhbGlkIGBldmVudGAuJworICAgICk7CisgIH07Cit9CisKKy8qKgorICogSW52
b2tlcyBgY2IoZXZlbnQsIGxpc3RlbmVyLCBpZClgLiBBdm9pZHMgdXNpbmcgY2FsbCBpZiBubyBz
Y29wZSBpcworICogcHJvdmlkZWQuIFRoZSBgKGxpc3RlbmVyLGlkKWAgcGFpciBlZmZlY3RpdmVs
eSBmb3JtcyB0aGUgImRpc3BhdGNoIiBidXQgYXJlCisgKiBrZXB0IHNlcGFyYXRlIHRvIGNvbnNl
cnZlIG1lbW9yeS4KKyAqLworZnVuY3Rpb24gZm9yRWFjaEV2ZW50RGlzcGF0Y2goZXZlbnQsIGNi
KSB7CisgIHZhciBkaXNwYXRjaExpc3RlbmVycyA9IGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVyczsK
KyAgdmFyIGRpc3BhdGNoSURzID0gZXZlbnQuX2Rpc3BhdGNoSURzOworICBpZiAodHJ1ZSkgewor
ICAgIHZhbGlkYXRlRXZlbnREaXNwYXRjaGVzKGV2ZW50KTsKKyAgfQorICBpZiAoQXJyYXkuaXNB
cnJheShkaXNwYXRjaExpc3RlbmVycykpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc3Bh
dGNoTGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7CisgICAgICBpZiAoZXZlbnQuaXNQcm9wYWdhdGlv
blN0b3BwZWQoKSkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIC8vIExpc3RlbmVy
cyBhbmQgSURzIGFyZSB0d28gcGFyYWxsZWwgYXJyYXlzIHRoYXQgYXJlIGFsd2F5cyBpbiBzeW5j
LgorICAgICAgY2IoZXZlbnQsIGRpc3BhdGNoTGlzdGVuZXJzW2ldLCBkaXNwYXRjaElEc1tpXSk7
CisgICAgfQorICB9IGVsc2UgaWYgKGRpc3BhdGNoTGlzdGVuZXJzKSB7CisgICAgY2IoZXZlbnQs
IGRpc3BhdGNoTGlzdGVuZXJzLCBkaXNwYXRjaElEcyk7CisgIH0KK30KKworLyoqCisgKiBEZWZh
dWx0IGltcGxlbWVudGF0aW9uIG9mIFBsdWdpbk1vZHVsZS5leGVjdXRlRGlzcGF0Y2goKS4KKyAq
IEBwYXJhbSB7U3ludGhldGljRXZlbnR9IFN5bnRoZXRpY0V2ZW50IHRvIGhhbmRsZQorICogQHBh
cmFtIHtmdW5jdGlvbn0gQXBwbGljYXRpb24tbGV2ZWwgY2FsbGJhY2sKKyAqIEBwYXJhbSB7c3Ry
aW5nfSBkb21JRCBET00gaWQgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2suCisgKi8KK2Z1bmN0aW9u
IGV4ZWN1dGVEaXNwYXRjaChldmVudCwgbGlzdGVuZXIsIGRvbUlEKSB7CisgIGxpc3RlbmVyKGV2
ZW50LCBkb21JRCk7Cit9CisKKy8qKgorICogU3RhbmRhcmQvc2ltcGxlIGl0ZXJhdGlvbiB0aHJv
dWdoIGFuIGV2ZW50J3MgY29sbGVjdGVkIGRpc3BhdGNoZXMuCisgKi8KK2Z1bmN0aW9uIGV4ZWN1
dGVEaXNwYXRjaGVzSW5PcmRlcihldmVudCwgZXhlY3V0ZURpc3BhdGNoKSB7CisgIGZvckVhY2hF
dmVudERpc3BhdGNoKGV2ZW50LCBleGVjdXRlRGlzcGF0Y2gpOworICBldmVudC5fZGlzcGF0Y2hM
aXN0ZW5lcnMgPSBudWxsOworICBldmVudC5fZGlzcGF0Y2hJRHMgPSBudWxsOworfQorCisvKioK
KyAqIFN0YW5kYXJkL3NpbXBsZSBpdGVyYXRpb24gdGhyb3VnaCBhbiBldmVudCdzIGNvbGxlY3Rl
ZCBkaXNwYXRjaGVzLCBidXQgc3RvcHMKKyAqIGF0IHRoZSBmaXJzdCBkaXNwYXRjaCBleGVjdXRp
b24gcmV0dXJuaW5nIHRydWUsIGFuZCByZXR1cm5zIHRoYXQgaWQuCisgKgorICogQHJldHVybiBp
ZCBvZiB0aGUgZmlyc3QgZGlzcGF0Y2ggZXhlY3V0aW9uIHdobydzIGxpc3RlbmVyIHJldHVybnMg
dHJ1ZSwgb3IKKyAqIG51bGwgaWYgbm8gbGlzdGVuZXIgcmV0dXJuZWQgdHJ1ZS4KKyAqLworZnVu
Y3Rpb24gZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyU3RvcEF0VHJ1ZShldmVudCkgeworICB2YXIg
ZGlzcGF0Y2hMaXN0ZW5lcnMgPSBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnM7CisgIHZhciBkaXNw
YXRjaElEcyA9IGV2ZW50Ll9kaXNwYXRjaElEczsKKyAgaWYgKHRydWUpIHsKKyAgICB2YWxpZGF0
ZUV2ZW50RGlzcGF0Y2hlcyhldmVudCk7CisgIH0KKyAgaWYgKEFycmF5LmlzQXJyYXkoZGlzcGF0
Y2hMaXN0ZW5lcnMpKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXNwYXRjaExpc3RlbmVy
cy5sZW5ndGg7IGkrKykgeworICAgICAgaWYgKGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkp
IHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICAvLyBMaXN0ZW5lcnMgYW5kIElEcyBh
cmUgdHdvIHBhcmFsbGVsIGFycmF5cyB0aGF0IGFyZSBhbHdheXMgaW4gc3luYy4KKyAgICAgIGlm
IChkaXNwYXRjaExpc3RlbmVyc1tpXShldmVudCwgZGlzcGF0Y2hJRHNbaV0pKSB7CisgICAgICAg
IHJldHVybiBkaXNwYXRjaElEc1tpXTsKKyAgICAgIH0KKyAgICB9CisgIH0gZWxzZSBpZiAoZGlz
cGF0Y2hMaXN0ZW5lcnMpIHsKKyAgICBpZiAoZGlzcGF0Y2hMaXN0ZW5lcnMoZXZlbnQsIGRpc3Bh
dGNoSURzKSkgeworICAgICAgcmV0dXJuIGRpc3BhdGNoSURzOworICAgIH0KKyAgfQorICByZXR1
cm4gbnVsbDsKK30KKworLyoqCisgKiBFeGVjdXRpb24gb2YgYSAiZGlyZWN0IiBkaXNwYXRjaCAt
IHRoZXJlIG11c3QgYmUgYXQgbW9zdCBvbmUgZGlzcGF0Y2gKKyAqIGFjY3VtdWxhdGVkIG9uIHRo
ZSBldmVudCBvciBpdCBpcyBjb25zaWRlcmVkIGFuIGVycm9yLiBJdCBkb2Vzbid0IHJlYWxseSBt
YWtlCisgKiBzZW5zZSBmb3IgYW4gZXZlbnQgd2l0aCBtdWx0aXBsZSBkaXNwYXRjaGVzIChidWJi
bGVkKSB0byBrZWVwIHRyYWNrIG9mIHRoZQorICogcmV0dXJuIHZhbHVlcyBhdCBlYWNoIGRpc3Bh
dGNoIGV4ZWN1dGlvbiwgYnV0IGl0IGRvZXMgdGVuZCB0byBtYWtlIHNlbnNlIHdoZW4KKyAqIGRl
YWxpbmcgd2l0aCAiZGlyZWN0IiBkaXNwYXRjaGVzLgorICoKKyAqIEByZXR1cm4gVGhlIHJldHVy
biB2YWx1ZSBvZiBleGVjdXRpbmcgdGhlIHNpbmdsZSBkaXNwYXRjaC4KKyAqLworZnVuY3Rpb24g
ZXhlY3V0ZURpcmVjdERpc3BhdGNoKGV2ZW50KSB7CisgIGlmICh0cnVlKSB7CisgICAgdmFsaWRh
dGVFdmVudERpc3BhdGNoZXMoZXZlbnQpOworICB9CisgIHZhciBkaXNwYXRjaExpc3RlbmVyID0g
ZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzOworICB2YXIgZGlzcGF0Y2hJRCA9IGV2ZW50Ll9kaXNw
YXRjaElEczsKKyAgaW52YXJpYW50KAorICAgICFBcnJheS5pc0FycmF5KGRpc3BhdGNoTGlzdGVu
ZXIpLAorICAgICdleGVjdXRlRGlyZWN0RGlzcGF0Y2goLi4uKTogSW52YWxpZCBgZXZlbnRgLicK
KyAgKTsKKyAgdmFyIHJlcyA9IGRpc3BhdGNoTGlzdGVuZXIgPworICAgIGRpc3BhdGNoTGlzdGVu
ZXIoZXZlbnQsIGRpc3BhdGNoSUQpIDoKKyAgICBudWxsOworICBldmVudC5fZGlzcGF0Y2hMaXN0
ZW5lcnMgPSBudWxsOworICBldmVudC5fZGlzcGF0Y2hJRHMgPSBudWxsOworICByZXR1cm4gcmVz
OworfQorCisvKioKKyAqIEBwYXJhbSB7U3ludGhldGljRXZlbnR9IGV2ZW50CisgKiBAcmV0dXJu
IHtib29sfSBUcnVlIGlmZiBudW1iZXIgb2YgZGlzcGF0Y2hlcyBhY2N1bXVsYXRlZCBpcyBncmVh
dGVyIHRoYW4gMC4KKyAqLworZnVuY3Rpb24gaGFzRGlzcGF0Y2hlcyhldmVudCkgeworICByZXR1
cm4gISFldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnM7Cit9CisKKy8qKgorICogR2VuZXJhbCB1dGls
aXRpZXMgdGhhdCBhcmUgdXNlZnVsIGluIGNyZWF0aW5nIGN1c3RvbSBFdmVudCBQbHVnaW5zLgor
ICovCit2YXIgRXZlbnRQbHVnaW5VdGlscyA9IHsKKyAgaXNFbmRpc2g6IGlzRW5kaXNoLAorICBp
c01vdmVpc2g6IGlzTW92ZWlzaCwKKyAgaXNTdGFydGlzaDogaXNTdGFydGlzaCwKKyAgZXhlY3V0
ZURpc3BhdGNoZXNJbk9yZGVyOiBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXIsCisgIGV4ZWN1dGVE
aXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWU6IGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BB
dFRydWUsCisgIGV4ZWN1dGVEaXJlY3REaXNwYXRjaDogZXhlY3V0ZURpcmVjdERpc3BhdGNoLAor
ICBoYXNEaXNwYXRjaGVzOiBoYXNEaXNwYXRjaGVzLAorICBleGVjdXRlRGlzcGF0Y2g6IGV4ZWN1
dGVEaXNwYXRjaAorfTsKKworbW9kdWxlLmV4cG9ydHMgPSBFdmVudFBsdWdpblV0aWxzOworCit9
LHsiLi9FdmVudENvbnN0YW50cyI6MTMsIi4vaW52YXJpYW50Ijo3NX1dLDE4OltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ss
IEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24g
Mi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0
IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29w
eSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNl
cy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBv
ciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VU
IFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3Ig
aW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdv
dmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNl
LgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBFdmVudFByb3BhZ2F0b3JzCisgKi8KKworInVzZSBz
dHJpY3QiOworCit2YXIgQ2FsbGJhY2tSZWdpc3RyeSA9IHJlcXVpcmUoIi4vQ2FsbGJhY2tSZWdp
c3RyeSIpOwordmFyIEV2ZW50Q29uc3RhbnRzID0gcmVxdWlyZSgiLi9FdmVudENvbnN0YW50cyIp
OworCit2YXIgYWNjdW11bGF0ZSA9IHJlcXVpcmUoIi4vYWNjdW11bGF0ZSIpOwordmFyIGZvckVh
Y2hBY2N1bXVsYXRlZCA9IHJlcXVpcmUoIi4vZm9yRWFjaEFjY3VtdWxhdGVkIik7Cit2YXIgZ2V0
TGlzdGVuZXIgPSBDYWxsYmFja1JlZ2lzdHJ5LmdldExpc3RlbmVyOwordmFyIFByb3BhZ2F0aW9u
UGhhc2VzID0gRXZlbnRDb25zdGFudHMuUHJvcGFnYXRpb25QaGFzZXM7CisKKy8qKgorICogSW5q
ZWN0ZWQgZGVwZW5kZW5jaWVzOgorICovCisKKy8qKgorICogLSBgSW5zdGFuY2VIYW5kbGVgOiBb
cmVxdWlyZWRdIE1vZHVsZSB0aGF0IHBlcmZvcm1zIGxvZ2ljYWwgdHJhdmVyc2FscyBvZiBET00K
KyAqICAgaGllcmFyY2h5IGdpdmVuIGlkcyBvZiB0aGUgbG9naWNhbCBET00gZWxlbWVudHMgaW52
b2x2ZWQuCisgKi8KK3ZhciBpbmplY3Rpb24gPSB7CisgIEluc3RhbmNlSGFuZGxlOiBudWxsLAor
ICBpbmplY3RJbnN0YW5jZUhhbmRsZTogZnVuY3Rpb24oSW5qZWN0ZWRJbnN0YW5jZUhhbmRsZSkg
eworICAgIGluamVjdGlvbi5JbnN0YW5jZUhhbmRsZSA9IEluamVjdGVkSW5zdGFuY2VIYW5kbGU7
CisgICAgaWYgKHRydWUpIHsKKyAgICAgIGluamVjdGlvbi52YWxpZGF0ZSgpOworICAgIH0KKyAg
fSwKKyAgdmFsaWRhdGU6IGZ1bmN0aW9uKCkgeworICAgIHZhciBpbnZhbGlkID0gIWluamVjdGlv
bi5JbnN0YW5jZUhhbmRsZXx8CisgICAgICAhaW5qZWN0aW9uLkluc3RhbmNlSGFuZGxlLnRyYXZl
cnNlVHdvUGhhc2UgfHwKKyAgICAgICFpbmplY3Rpb24uSW5zdGFuY2VIYW5kbGUudHJhdmVyc2VF
bnRlckxlYXZlOworICAgIGlmIChpbnZhbGlkKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lu
c3RhbmNlSGFuZGxlIG5vdCBpbmplY3RlZCBiZWZvcmUgdXNlIScpOworICAgIH0KKyAgfQorfTsK
KworLyoqCisgKiBTb21lIGV2ZW50IHR5cGVzIGhhdmUgYSBub3Rpb24gb2YgZGlmZmVyZW50IHJl
Z2lzdHJhdGlvbiBuYW1lcyBmb3IgZGlmZmVyZW50CisgKiAicGhhc2VzIiBvZiBwcm9wYWdhdGlv
bi4gVGhpcyBmaW5kcyBsaXN0ZW5lcnMgYnkgYSBnaXZlbiBwaGFzZS4KKyAqLworZnVuY3Rpb24g
bGlzdGVuZXJBdFBoYXNlKGlkLCBldmVudCwgcHJvcGFnYXRpb25QaGFzZSkgeworICB2YXIgcmVn
aXN0cmF0aW9uTmFtZSA9CisgICAgZXZlbnQuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0
aW9uTmFtZXNbcHJvcGFnYXRpb25QaGFzZV07CisgIHJldHVybiBnZXRMaXN0ZW5lcihpZCwgcmVn
aXN0cmF0aW9uTmFtZSk7Cit9CisKKy8qKgorICogVGFncyBhIGBTeW50aGV0aWNFdmVudGAgd2l0
aCBkaXNwYXRjaGVkIGxpc3RlbmVycy4gQ3JlYXRpbmcgdGhpcyBmdW5jdGlvbgorICogaGVyZSwg
YWxsb3dzIHVzIHRvIG5vdCBoYXZlIHRvIGJpbmQgb3IgY3JlYXRlIGZ1bmN0aW9ucyBmb3IgZWFj
aCBldmVudC4KKyAqIE11dGF0aW5nIHRoZSBldmVudCdzIG1lbWJlcnMgYWxsb3dzIHVzIHRvIG5v
dCBoYXZlIHRvIGNyZWF0ZSBhIHdyYXBwaW5nCisgKiAiZGlzcGF0Y2giIG9iamVjdCB0aGF0IHBh
aXJzIHRoZSBldmVudCB3aXRoIHRoZSBsaXN0ZW5lci4KKyAqLworZnVuY3Rpb24gYWNjdW11bGF0
ZURpcmVjdGlvbmFsRGlzcGF0Y2hlcyhkb21JRCwgdXB3YXJkcywgZXZlbnQpIHsKKyAgaWYgKHRy
dWUpIHsKKyAgICBpZiAoIWRvbUlEKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc3BhdGNo
aW5nIGlkIG11c3Qgbm90IGJlIG51bGwnKTsKKyAgICB9CisgICAgaW5qZWN0aW9uLnZhbGlkYXRl
KCk7CisgIH0KKyAgdmFyIHBoYXNlID0gdXB3YXJkcyA/IFByb3BhZ2F0aW9uUGhhc2VzLmJ1YmJs
ZWQgOiBQcm9wYWdhdGlvblBoYXNlcy5jYXB0dXJlZDsKKyAgdmFyIGxpc3RlbmVyID0gbGlzdGVu
ZXJBdFBoYXNlKGRvbUlELCBldmVudCwgcGhhc2UpOworICBpZiAobGlzdGVuZXIpIHsKKyAgICBl
dmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMgPSBhY2N1bXVsYXRlKGV2ZW50Ll9kaXNwYXRjaExpc3Rl
bmVycywgbGlzdGVuZXIpOworICAgIGV2ZW50Ll9kaXNwYXRjaElEcyA9IGFjY3VtdWxhdGUoZXZl
bnQuX2Rpc3BhdGNoSURzLCBkb21JRCk7CisgIH0KK30KKworLyoqCisgKiBDb2xsZWN0IGRpc3Bh
dGNoZXMgKG11c3QgYmUgZW50aXJlbHkgY29sbGVjdGVkIGJlZm9yZSBkaXNwYXRjaGluZyAtIHNl
ZSB1bml0CisgKiB0ZXN0cykuIExhemlseSBhbGxvY2F0ZSB0aGUgYXJyYXkgdG8gY29uc2VydmUg
bWVtb3J5LiAgV2UgbXVzdCBsb29wIHRocm91Z2gKKyAqIGVhY2ggZXZlbnQgYW5kIHBlcmZvcm0g
dGhlIHRyYXZlcnNhbCBmb3IgZWFjaCBvbmUuIFdlIGNhbiBub3QgcGVyZm9ybSBhCisgKiBzaW5n
bGUgdHJhdmVyc2FsIGZvciB0aGUgZW50aXJlIGNvbGxlY3Rpb24gb2YgZXZlbnRzIGJlY2F1c2Ug
ZWFjaCBldmVudCBtYXkKKyAqIGhhdmUgYSBkaWZmZXJlbnQgdGFyZ2V0LgorICovCitmdW5jdGlv
biBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2luZ2xlKGV2ZW50KSB7CisgIGlmIChldmVu
dCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lcykgeworICAg
IGluamVjdGlvbi5JbnN0YW5jZUhhbmRsZS50cmF2ZXJzZVR3b1BoYXNlKAorICAgICAgZXZlbnQu
ZGlzcGF0Y2hNYXJrZXIsCisgICAgICBhY2N1bXVsYXRlRGlyZWN0aW9uYWxEaXNwYXRjaGVzLAor
ICAgICAgZXZlbnQKKyAgICApOworICB9Cit9CisKKworLyoqCisgKiBBY2N1bXVsYXRlcyB3aXRo
b3V0IHJlZ2FyZCB0byBkaXJlY3Rpb24sIGRvZXMgbm90IGxvb2sgZm9yIHBoYXNlZAorICogcmVn
aXN0cmF0aW9uIG5hbWVzLiBTYW1lIGFzIGBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1Npbmds
ZWAgYnV0IHdpdGhvdXQKKyAqIHJlcXVpcmluZyB0aGF0IHRoZSBgZGlzcGF0Y2hNYXJrZXJgIGJl
IHRoZSBzYW1lIGFzIHRoZSBkaXNwYXRjaGVkIElELgorICovCitmdW5jdGlvbiBhY2N1bXVsYXRl
RGlzcGF0Y2hlcyhpZCwgaWdub3JlZERpcmVjdGlvbiwgZXZlbnQpIHsKKyAgaWYgKGV2ZW50ICYm
IGV2ZW50LmRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUpIHsKKyAgICB2YXIgcmVnaXN0
cmF0aW9uTmFtZSA9IGV2ZW50LmRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWU7CisgICAg
dmFyIGxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaWQsIHJlZ2lzdHJhdGlvbk5hbWUpOworICAgIGlm
IChsaXN0ZW5lcikgeworICAgICAgZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID0gYWNjdW11bGF0
ZShldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMsIGxpc3RlbmVyKTsKKyAgICAgIGV2ZW50Ll9kaXNw
YXRjaElEcyA9IGFjY3VtdWxhdGUoZXZlbnQuX2Rpc3BhdGNoSURzLCBpZCk7CisgICAgfQorICB9
Cit9CisKKy8qKgorICogQWNjdW11bGF0ZXMgZGlzcGF0Y2hlcyBvbiBhbiBgU3ludGhldGljRXZl
bnRgLCBidXQgb25seSBmb3IgdGhlCisgKiBgZGlzcGF0Y2hNYXJrZXJgLgorICogQHBhcmFtIHtT
eW50aGV0aWNFdmVudH0gZXZlbnQKKyAqLworZnVuY3Rpb24gYWNjdW11bGF0ZURpcmVjdERpc3Bh
dGNoZXNTaW5nbGUoZXZlbnQpIHsKKyAgaWYgKGV2ZW50ICYmIGV2ZW50LmRpc3BhdGNoQ29uZmln
LnJlZ2lzdHJhdGlvbk5hbWUpIHsKKyAgICBhY2N1bXVsYXRlRGlzcGF0Y2hlcyhldmVudC5kaXNw
YXRjaE1hcmtlciwgbnVsbCwgZXZlbnQpOworICB9Cit9CisKK2Z1bmN0aW9uIGFjY3VtdWxhdGVU
d29QaGFzZURpc3BhdGNoZXMoZXZlbnRzKSB7CisgIGlmICh0cnVlKSB7CisgICAgaW5qZWN0aW9u
LnZhbGlkYXRlKCk7CisgIH0KKyAgZm9yRWFjaEFjY3VtdWxhdGVkKGV2ZW50cywgYWNjdW11bGF0
ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZSk7Cit9CisKK2Z1bmN0aW9uIGFjY3VtdWxhdGVFbnRl
ckxlYXZlRGlzcGF0Y2hlcyhsZWF2ZSwgZW50ZXIsIGZyb21JRCwgdG9JRCkgeworICBpZiAodHJ1
ZSkgeworICAgIGluamVjdGlvbi52YWxpZGF0ZSgpOworICB9CisgIGluamVjdGlvbi5JbnN0YW5j
ZUhhbmRsZS50cmF2ZXJzZUVudGVyTGVhdmUoCisgICAgZnJvbUlELAorICAgIHRvSUQsCisgICAg
YWNjdW11bGF0ZURpc3BhdGNoZXMsCisgICAgbGVhdmUsCisgICAgZW50ZXIKKyAgKTsKK30KKwor
CitmdW5jdGlvbiBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlcyhldmVudHMpIHsKKyAgaWYgKHRy
dWUpIHsKKyAgICBpbmplY3Rpb24udmFsaWRhdGUoKTsKKyAgfQorICBmb3JFYWNoQWNjdW11bGF0
ZWQoZXZlbnRzLCBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1NpbmdsZSk7Cit9CisKKworCisv
KioKKyAqIEEgc21hbGwgc2V0IG9mIHByb3BhZ2F0aW9uIHBhdHRlcm5zLCBlYWNoIG9mIHdoaWNo
IHdpbGwgYWNjZXB0IGEgc21hbGwgYW1vdW50CisgKiBvZiBpbmZvcm1hdGlvbiwgYW5kIGdlbmVy
YXRlIGEgc2V0IG9mICJkaXNwYXRjaCByZWFkeSBldmVudCBvYmplY3RzIiAtIHdoaWNoCisgKiBh
cmUgc2V0cyBvZiBldmVudHMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBhbm5vdGF0ZWQgd2l0aCBh
IHNldCBvZiBkaXNwYXRjaGVkCisgKiBsaXN0ZW5lciBmdW5jdGlvbnMvaWRzLiBUaGUgQVBJIGlz
IGRlc2lnbmVkIHRoaXMgd2F5IHRvIGRpc2NvdXJhZ2UgdGhlc2UKKyAqIHByb3BhZ2F0aW9uIHN0
cmF0ZWdpZXMgZnJvbSBhY3R1YWxseSBleGVjdXRpbmcgdGhlIGRpc3BhdGNoZXMsIHNpbmNlIHdl
CisgKiBhbHdheXMgd2FudCB0byBjb2xsZWN0IHRoZSBlbnRpcmUgc2V0IG9mIGRpc3BhdGNoZXMg
YmVmb3JlIGV4ZWN1dGluZyBldmVudCBhCisgKiBzaW5nbGUgb25lLgorICoKKyAqIEBjb25zdHJ1
Y3RvciBFdmVudFByb3BhZ2F0b3JzCisgKi8KK3ZhciBFdmVudFByb3BhZ2F0b3JzID0geworICBh
Y2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzOiBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVz
LAorICBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlczogYWNjdW11bGF0ZURpcmVjdERpc3BhdGNo
ZXMsCisgIGFjY3VtdWxhdGVFbnRlckxlYXZlRGlzcGF0Y2hlczogYWNjdW11bGF0ZUVudGVyTGVh
dmVEaXNwYXRjaGVzLAorICBpbmplY3Rpb246IGluamVjdGlvbgorfTsKKworbW9kdWxlLmV4cG9y
dHMgPSBFdmVudFByb3BhZ2F0b3JzOworCit9LHsiLi9DYWxsYmFja1JlZ2lzdHJ5Ijo0LCIuL0V2
ZW50Q29uc3RhbnRzIjoxMywiLi9hY2N1bXVsYXRlIjo2MCwiLi9mb3JFYWNoQWNjdW11bGF0ZWQi
OjY4fV0sMTk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworKGZ1bmN0aW9uKCl7
LyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVu
ZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICog
eW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBM
aWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgor
ICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5s
ZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBz
b2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQg
b24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05T
IE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNl
bnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAor
ICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxl
IEV4ZWN1dGlvbkVudmlyb25tZW50CisgKi8KKworLypqc2xpbnQgZXZpbDogdHJ1ZSAqLworCisi
dXNlIHN0cmljdCI7CisKK3ZhciBjYW5Vc2VET00gPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZp
bmVkJzsKKworLyoqCisgKiBTaW1wbGUsIGxpZ2h0d2VpZ2h0IG1vZHVsZSBhc3Npc3Rpbmcgd2l0
aCB0aGUgZGV0ZWN0aW9uIGFuZCBjb250ZXh0IG9mCisgKiBXb3JrZXIuIEhlbHBzIGF2b2lkIGNp
cmN1bGFyIGRlcGVuZGVuY2llcyBhbmQgYWxsb3dzIGNvZGUgdG8gcmVhc29uIGFib3V0CisgKiB3
aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBpbiBhIFdvcmtlciwgZXZlbiBpZiB0aGV5IG5ldmVyIGlu
Y2x1ZGUgdGhlIG1haW4KKyAqIGBSZWFjdFdvcmtlcmAgZGVwZW5kZW5jeS4KKyAqLwordmFyIEV4
ZWN1dGlvbkVudmlyb25tZW50ID0geworCisgIGNhblVzZURPTTogY2FuVXNlRE9NLAorCisgIGNh
blVzZVdvcmtlcnM6IHR5cGVvZiBXb3JrZXIgIT09ICd1bmRlZmluZWQnLAorCisgIGlzSW5Xb3Jr
ZXI6ICFjYW5Vc2VET00sIC8vIEZvciBub3csIHRoaXMgaXMgdHJ1ZSAtIG1pZ2h0IGNoYW5nZSBp
biB0aGUgZnV0dXJlLgorCisgIGdsb2JhbDogbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpczsnKSgp
CisKK307CisKK21vZHVsZS5leHBvcnRzID0gRXhlY3V0aW9uRW52aXJvbm1lbnQ7CisKK30pKCkK
K30se31dLDIwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29w
eXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBh
Y2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90
IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAq
IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93
d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJl
ZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAq
IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJ
UyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lO
RCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhl
IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRp
b25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBQb29sZWRDbGFz
cworICovCisKKyJ1c2Ugc3RyaWN0IjsKKworLyoqCisgKiBTdGF0aWMgcG9vbGVycy4gU2V2ZXJh
bCBjdXN0b20gdmVyc2lvbnMgZm9yIGVhY2ggcG90ZW50aWFsIG51bWJlciBvZgorICogYXJndW1l
bnRzLiBBIGNvbXBsZXRlbHkgZ2VuZXJpYyBwb29sZXIgaXMgZWFzeSB0byBpbXBsZW1lbnQsIGJ1
dCB3b3VsZAorICogcmVxdWlyZSBhY2Nlc3NpbmcgdGhlIGBhcmd1bWVudHNgIG9iamVjdC4gSW4g
ZWFjaCBvZiB0aGVzZSwgYHRoaXNgIHJlZmVycyB0bworICogdGhlIENsYXNzIGl0c2VsZiwgbm90
IGFuIGluc3RhbmNlLiBJZiBhbnkgb3RoZXJzIGFyZSBuZWVkZWQsIHNpbXBseSBhZGQgdGhlbQor
ICogaGVyZSwgb3IgaW4gdGhlaXIgb3duIGZpbGVzLgorICovCit2YXIgb25lQXJndW1lbnRQb29s
ZXIgPSBmdW5jdGlvbihjb3B5RmllbGRzRnJvbSkgeworICB2YXIgS2xhc3MgPSB0aGlzOworICBp
ZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCkgeworICAgIHZhciBpbnN0YW5jZSA9IEtsYXNz
Lmluc3RhbmNlUG9vbC5wb3AoKTsKKyAgICBLbGFzcy5jYWxsKGluc3RhbmNlLCBjb3B5RmllbGRz
RnJvbSk7CisgICAgcmV0dXJuIGluc3RhbmNlOworICB9IGVsc2UgeworICAgIHJldHVybiBuZXcg
S2xhc3MoY29weUZpZWxkc0Zyb20pOworICB9Cit9OworCit2YXIgdHdvQXJndW1lbnRQb29sZXIg
PSBmdW5jdGlvbihhMSwgYTIpIHsKKyAgdmFyIEtsYXNzID0gdGhpczsKKyAgaWYgKEtsYXNzLmlu
c3RhbmNlUG9vbC5sZW5ndGgpIHsKKyAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBv
b2wucG9wKCk7CisgICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgYTEsIGEyKTsKKyAgICByZXR1cm4g
aW5zdGFuY2U7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIG5ldyBLbGFzcyhhMSwgYTIpOworICB9
Cit9OworCit2YXIgdGhyZWVBcmd1bWVudFBvb2xlciA9IGZ1bmN0aW9uKGExLCBhMiwgYTMpIHsK
KyAgdmFyIEtsYXNzID0gdGhpczsKKyAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGgpIHsK
KyAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7CisgICAgS2xhc3Mu
Y2FsbChpbnN0YW5jZSwgYTEsIGEyLCBhMyk7CisgICAgcmV0dXJuIGluc3RhbmNlOworICB9IGVs
c2UgeworICAgIHJldHVybiBuZXcgS2xhc3MoYTEsIGEyLCBhMyk7CisgIH0KK307CisKK3ZhciBm
aXZlQXJndW1lbnRQb29sZXIgPSBmdW5jdGlvbihhMSwgYTIsIGEzLCBhNCwgYTUpIHsKKyAgdmFy
IEtsYXNzID0gdGhpczsKKyAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGgpIHsKKyAgICB2
YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7CisgICAgS2xhc3MuY2FsbChp
bnN0YW5jZSwgYTEsIGEyLCBhMywgYTQsIGE1KTsKKyAgICByZXR1cm4gaW5zdGFuY2U7CisgIH0g
ZWxzZSB7CisgICAgcmV0dXJuIG5ldyBLbGFzcyhhMSwgYTIsIGEzLCBhNCwgYTUpOworICB9Cit9
OworCit2YXIgc3RhbmRhcmRSZWxlYXNlciA9IGZ1bmN0aW9uKGluc3RhbmNlKSB7CisgIHZhciBL
bGFzcyA9IHRoaXM7CisgIGlmIChpbnN0YW5jZS5kZXN0cnVjdG9yKSB7CisgICAgaW5zdGFuY2Uu
ZGVzdHJ1Y3RvcigpOworICB9CisgIGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3RoIDwgS2xh
c3MucG9vbFNpemUpIHsKKyAgICBLbGFzcy5pbnN0YW5jZVBvb2wucHVzaChpbnN0YW5jZSk7Cisg
IH0KK307CisKK3ZhciBERUZBVUxUX1BPT0xfU0laRSA9IDEwOwordmFyIERFRkFVTFRfUE9PTEVS
ID0gb25lQXJndW1lbnRQb29sZXI7CisKKy8qKgorICogQXVnbWVudHMgYENvcHlDb25zdHJ1Y3Rv
cmAgdG8gYmUgYSBwb29sYWJsZSBjbGFzcywgYXVnbWVudGluZyBvbmx5IHRoZSBjbGFzcworICog
aXRzZWxmIChzdGF0aWNhbGx5KSBub3QgYWRkaW5nIGFueSBwcm90b3R5cGljYWwgZmllbGRzLiBB
bnkgQ29weUNvbnN0cnVjdG9yCisgKiB5b3UgZ2l2ZSB0aGlzIG1heSBoYXZlIGEgYHBvb2xTaXpl
YCBwcm9wZXJ0eSwgYW5kIHdpbGwgbG9vayBmb3IgYQorICogcHJvdG90eXBpY2FsIGBkZXN0cnVj
dG9yYCBvbiBpbnN0YW5jZXMgKG9wdGlvbmFsKS4KKyAqCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBD
b3B5Q29uc3RydWN0b3IgQ29uc3RydWN0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byByZXNldC4KKyAq
IEBwYXJhbSB7RnVuY3Rpb259IHBvb2xlciBDdXN0b21pemFibGUgcG9vbGVyLgorICovCit2YXIg
YWRkUG9vbGluZ1RvID0gZnVuY3Rpb24oQ29weUNvbnN0cnVjdG9yLCBwb29sZXIpIHsKKyAgdmFy
IE5ld0tsYXNzID0gQ29weUNvbnN0cnVjdG9yOworICBOZXdLbGFzcy5pbnN0YW5jZVBvb2wgPSBb
XTsKKyAgTmV3S2xhc3MuZ2V0UG9vbGVkID0gcG9vbGVyIHx8IERFRkFVTFRfUE9PTEVSOworICBp
ZiAoIU5ld0tsYXNzLnBvb2xTaXplKSB7CisgICAgTmV3S2xhc3MucG9vbFNpemUgPSBERUZBVUxU
X1BPT0xfU0laRTsKKyAgfQorICBOZXdLbGFzcy5yZWxlYXNlID0gc3RhbmRhcmRSZWxlYXNlcjsK
KyAgcmV0dXJuIE5ld0tsYXNzOworfTsKKwordmFyIFBvb2xlZENsYXNzID0geworICBhZGRQb29s
aW5nVG86IGFkZFBvb2xpbmdUbywKKyAgb25lQXJndW1lbnRQb29sZXI6IG9uZUFyZ3VtZW50UG9v
bGVyLAorICB0d29Bcmd1bWVudFBvb2xlcjogdHdvQXJndW1lbnRQb29sZXIsCisgIHRocmVlQXJn
dW1lbnRQb29sZXI6IHRocmVlQXJndW1lbnRQb29sZXIsCisgIGZpdmVBcmd1bWVudFBvb2xlcjog
Zml2ZUFyZ3VtZW50UG9vbGVyCit9OworCittb2R1bGUuZXhwb3J0cyA9IFBvb2xlZENsYXNzOwor
Cit9LHt9XSwyMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENv
cHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFw
YWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5v
dCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisg
KiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8v
d3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWly
ZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisg
KiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
SVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJ
TkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRo
ZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0
aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3QKKyAq
LworCisidXNlIHN0cmljdCI7CisKK3ZhciBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCA9IHJlcXVp
cmUoIi4vUmVhY3RDb21wb3NpdGVDb21wb25lbnQiKTsKK3ZhciBSZWFjdENvbXBvbmVudCA9IHJl
cXVpcmUoIi4vUmVhY3RDb21wb25lbnQiKTsKK3ZhciBSZWFjdERPTSA9IHJlcXVpcmUoIi4vUmVh
Y3RET00iKTsKK3ZhciBSZWFjdE1vdW50ID0gcmVxdWlyZSgiLi9SZWFjdE1vdW50Iik7Cit2YXIg
UmVhY3RQcm9wVHlwZXMgPSByZXF1aXJlKCIuL1JlYWN0UHJvcFR5cGVzIik7Cit2YXIgUmVhY3RT
ZXJ2ZXJSZW5kZXJpbmcgPSByZXF1aXJlKCIuL1JlYWN0U2VydmVyUmVuZGVyaW5nIik7CisKK3Zh
ciBSZWFjdERlZmF1bHRJbmplY3Rpb24gPSByZXF1aXJlKCIuL1JlYWN0RGVmYXVsdEluamVjdGlv
biIpOworCitSZWFjdERlZmF1bHRJbmplY3Rpb24uaW5qZWN0KCk7CisKK3ZhciBSZWFjdCA9IHsK
KyAgRE9NOiBSZWFjdERPTSwKKyAgUHJvcFR5cGVzOiBSZWFjdFByb3BUeXBlcywKKyAgaW5pdGlh
bGl6ZVRvdWNoRXZlbnRzOiBmdW5jdGlvbihzaG91bGRVc2VUb3VjaCkgeworICAgIFJlYWN0TW91
bnQudXNlVG91Y2hFdmVudHMgPSBzaG91bGRVc2VUb3VjaDsKKyAgfSwKKyAgYXV0b0JpbmQ6IFJl
YWN0Q29tcG9zaXRlQ29tcG9uZW50LmF1dG9CaW5kLAorICBjcmVhdGVDbGFzczogUmVhY3RDb21w
b3NpdGVDb21wb25lbnQuY3JlYXRlQ2xhc3MsCisgIGNvbnN0cnVjdEFuZFJlbmRlckNvbXBvbmVu
dDogUmVhY3RNb3VudC5jb25zdHJ1Y3RBbmRSZW5kZXJDb21wb25lbnQsCisgIGNvbnN0cnVjdEFu
ZFJlbmRlckNvbXBvbmVudEJ5SUQ6IFJlYWN0TW91bnQuY29uc3RydWN0QW5kUmVuZGVyQ29tcG9u
ZW50QnlJRCwKKyAgcmVuZGVyQ29tcG9uZW50OiBSZWFjdE1vdW50LnJlbmRlckNvbXBvbmVudCwK
KyAgcmVuZGVyQ29tcG9uZW50VG9TdHJpbmc6IFJlYWN0U2VydmVyUmVuZGVyaW5nLnJlbmRlckNv
bXBvbmVudFRvU3RyaW5nLAorICB1bm1vdW50QW5kUmVsZWFzZVJlYWN0Um9vdE5vZGU6IFJlYWN0
TW91bnQudW5tb3VudEFuZFJlbGVhc2VSZWFjdFJvb3ROb2RlLAorICBpc1ZhbGlkQ29tcG9uZW50
OiBSZWFjdENvbXBvbmVudC5pc1ZhbGlkQ29tcG9uZW50Cit9OworCittb2R1bGUuZXhwb3J0cyA9
IFJlYWN0OworCit9LHsiLi9SZWFjdENvbXBvbmVudCI6MjIsIi4vUmVhY3RDb21wb3NpdGVDb21w
b25lbnQiOjIzLCIuL1JlYWN0RE9NIjoyNSwiLi9SZWFjdERlZmF1bHRJbmplY3Rpb24iOjMyLCIu
L1JlYWN0TW91bnQiOjM4LCIuL1JlYWN0UHJvcFR5cGVzIjo0NCwiLi9SZWFjdFNlcnZlclJlbmRl
cmluZyI6NDZ9XSwyMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAq
IENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhl
IEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5
IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2Uu
CisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRw
Oi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVx
dWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJl
CisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAi
QVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5Z
IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9y
IHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1p
dGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RD
b21wb25lbnQKKyAqLworCisvKmpzbGludCBldmlsOiB0cnVlICovCisKKyJ1c2Ugc3RyaWN0IjsK
KwordmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZSgiLi9SZWFjdEN1cnJlbnRPd25lciIp
OwordmFyIFJlYWN0RE9NSURPcGVyYXRpb25zID0gcmVxdWlyZSgiLi9SZWFjdERPTUlET3BlcmF0
aW9ucyIpOwordmFyIFJlYWN0SUQgPSByZXF1aXJlKCIuL1JlYWN0SUQiKTsKK3ZhciBSZWFjdE1v
dW50ID0gcmVxdWlyZSgiLi9SZWFjdE1vdW50Iik7Cit2YXIgUmVhY3RPd25lciA9IHJlcXVpcmUo
Ii4vUmVhY3RPd25lciIpOwordmFyIFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24gPSByZXF1aXJl
KCIuL1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24iKTsKK3ZhciBSZWFjdFVwZGF0ZXMgPSByZXF1
aXJlKCIuL1JlYWN0VXBkYXRlcyIpOworCit2YXIgaW52YXJpYW50ID0gcmVxdWlyZSgiLi9pbnZh
cmlhbnQiKTsKK3ZhciBrZXlNaXJyb3IgPSByZXF1aXJlKCIuL2tleU1pcnJvciIpOwordmFyIG1l
cmdlID0gcmVxdWlyZSgiLi9tZXJnZSIpOworCisvKioKKyAqIFByb3Aga2V5IHRoYXQgcmVmZXJl
bmNlcyBhIGNvbXBvbmVudCdzIG93bmVyLgorICogQHByaXZhdGUKKyAqLwordmFyIE9XTkVSID0g
J3tvd25lcn0nOworCisvKioKKyAqIFByb3BzIGtleSB0aGF0IGRldGVybWluZXMgaWYgYSBjb21w
b25lbnQncyBrZXkgd2FzIGFscmVhZHkgdmFsaWRhdGVkLgorICogQHByaXZhdGUKKyAqLwordmFy
IElTX0tFWV9WQUxJREFURUQgPSAne2lzLmtleS52YWxpZGF0ZWR9JzsKKworLyoqCisgKiBFdmVy
eSBSZWFjdCBjb21wb25lbnQgaXMgaW4gb25lIG9mIHRoZXNlIGxpZmUgY3ljbGVzLgorICovCit2
YXIgQ29tcG9uZW50TGlmZUN5Y2xlID0ga2V5TWlycm9yKHsKKyAgLyoqCisgICAqIE1vdW50ZWQg
Y29tcG9uZW50cyBoYXZlIGEgRE9NIG5vZGUgcmVwcmVzZW50YXRpb24gYW5kIGFyZSBjYXBhYmxl
IG9mCisgICAqIHJlY2VpdmluZyBuZXcgcHJvcHMuCisgICAqLworICBNT1VOVEVEOiBudWxsLAor
ICAvKioKKyAgICogVW5tb3VudGVkIGNvbXBvbmVudHMgYXJlIGluYWN0aXZlIGFuZCBjYW5ub3Qg
cmVjZWl2ZSBuZXcgcHJvcHMuCisgICAqLworICBVTk1PVU5URUQ6IG51bGwKK30pOworCisvKioK
KyAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJh
eXMgb2YgY2hpbGRyZW4uCisgKiBUaGlzIGFsbG93cyB1cyB0byBrZWVwIHRyYWNrIG9mIGNoaWxk
cmVuIGJldHdlZW4gdXBkYXRlcy4KKyAqLworCit2YXIgb3duZXJIYXNXYXJuZWQgPSB7fTsKKwor
LyoqCisgKiBXYXJuIGlmIHRoZSBjb21wb25lbnQgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGtl
eSBhc3NpZ25lZCB0byBpdC4KKyAqIFRoaXMgY29tcG9uZW50IGlzIGluIGFuIGFycmF5LiBUaGUg
YXJyYXkgY291bGQgZ3JvdyBhbmQgc2hyaW5rIG9yIGJlCisgKiByZW9yZGVyZWQuIEFsbCBjaGls
ZHJlbiwgdGhhdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCwgYXJlIHJlcXVpcmVkIHRv
CisgKiBoYXZlIGEgImtleSIgcHJvcGVydHkgYXNzaWduZWQgdG8gaXQuCisgKgorICogQGludGVy
bmFsCisgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBjb21wb25lbnQgQ29tcG9uZW50IHRoYXQg
cmVxdWlyZXMgYSBrZXkuCisgKi8KK2Z1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoY29tcG9u
ZW50KSB7CisgIGlmIChjb21wb25lbnRbSVNfS0VZX1ZBTElEQVRFRF0gfHwgY29tcG9uZW50LnBy
b3BzLmtleSAhPSBudWxsKSB7CisgICAgcmV0dXJuOworICB9CisgIGNvbXBvbmVudFtJU19LRVlf
VkFMSURBVEVEXSA9IHRydWU7CisKKyAgLy8gV2UgY2FuJ3QgcHJvdmlkZSBmcmllbmRseSB3YXJu
aW5ncyBmb3IgdG9wIGxldmVsIGNvbXBvbmVudHMuCisgIGlmICghUmVhY3RDdXJyZW50T3duZXIu
Y3VycmVudCkgeworICAgIHJldHVybjsKKyAgfQorCisgIC8vIE5hbWUgb2YgdGhlIGNvbXBvbmVu
dCB3aG9zZSByZW5kZXIgbWV0aG9kIHRyaWVkIHRvIHBhc3MgY2hpbGRyZW4uCisgIHZhciBjdXJy
ZW50TmFtZSA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQuY29uc3RydWN0b3IuZGlzcGxheU5h
bWU7CisgIGlmIChvd25lckhhc1dhcm5lZC5oYXNPd25Qcm9wZXJ0eShjdXJyZW50TmFtZSkpIHsK
KyAgICByZXR1cm47CisgIH0KKyAgb3duZXJIYXNXYXJuZWRbY3VycmVudE5hbWVdID0gdHJ1ZTsK
KworICB2YXIgbWVzc2FnZSA9ICdFYWNoIGNoaWxkIGluIGFuIGFycmF5IHNob3VsZCBoYXZlIGEg
dW5pcXVlICJrZXkiIHByb3AuICcgKworICAgICAgICAgICAgICAgICdDaGVjayB0aGUgcmVuZGVy
IG1ldGhvZCBvZiAnICsgY3VycmVudE5hbWUgKyAnLic7CisgIGlmICghY29tcG9uZW50LmlzT3du
ZWRCeShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSkgeworICAgIC8vIE5hbWUgb2YgdGhlIGNv
bXBvbmVudCB0aGF0IG9yaWdpbmFsbHkgY3JlYXRlZCB0aGlzIGNoaWxkLgorICAgIHZhciBjaGls
ZE93bmVyTmFtZSA9CisgICAgICBjb21wb25lbnQucHJvcHNbT1dORVJdICYmIGNvbXBvbmVudC5w
cm9wc1tPV05FUl0uY29uc3RydWN0b3IuZGlzcGxheU5hbWU7CisKKyAgICAvLyBVc3VhbGx5IHRo
ZSBjdXJyZW50IG93bmVyIGlzIHRoZSBvZmZlbmRlciwgYnV0IGlmIGl0IGFjY2VwdHMKKyAgICAv
LyBjaGlsZHJlbiBhcyBhIHByb3BlcnR5LCBpdCBtYXkgYmUgdGhlIGNyZWF0b3Igb2YgdGhlIGNo
aWxkIHRoYXQncworICAgIC8vIHJlc3BvbnNpYmxlIGZvciBhc3NpZ25pbmcgaXQgYSBrZXkuCisg
ICAgbWVzc2FnZSArPSAnIEl0IHdhcyBwYXNzZWQgYSBjaGlsZCBmcm9tICcgKyBjaGlsZE93bmVy
TmFtZSArICcuJzsKKyAgfQorCisgIGNvbnNvbGUud2FybihtZXNzYWdlKTsKK30KKworLyoqCisg
KiBFbnN1cmUgdGhhdCBldmVyeSBjb21wb25lbnQgZWl0aGVyIGlzIHBhc3NlZCBpbiBhIHN0YXRp
YyBsb2NhdGlvbiBvciwgaWYKKyAqIGlmIGl0J3MgcGFzc2VkIGluIGFuIGFycmF5LCBoYXMgYW4g
ZXhwbGljaXQga2V5IHByb3BlcnR5IGRlZmluZWQuCisgKgorICogQGludGVybmFsCisgKiBAcGFy
YW0geyp9IGNvbXBvbmVudCBTdGF0aWNhbGx5IHBhc3NlZCBjaGlsZCBvZiBhbnkgdHlwZS4KKyAq
IEByZXR1cm4ge2Jvb2xlYW59CisgKi8KK2Z1bmN0aW9uIHZhbGlkYXRlQ2hpbGRLZXlzKGNvbXBv
bmVudCkgeworICBpZiAoQXJyYXkuaXNBcnJheShjb21wb25lbnQpKSB7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBjb21wb25lbnQubGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciBjaGlsZCA9IGNv
bXBvbmVudFtpXTsKKyAgICAgIGlmIChSZWFjdENvbXBvbmVudC5pc1ZhbGlkQ29tcG9uZW50KGNo
aWxkKSkgeworICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KGNoaWxkKTsKKyAgICAgIH0KKyAg
ICB9CisgIH0gZWxzZSBpZiAoUmVhY3RDb21wb25lbnQuaXNWYWxpZENvbXBvbmVudChjb21wb25l
bnQpKSB7CisgICAgLy8gVGhpcyBjb21wb25lbnQgd2FzIHBhc3NlZCBpbiBhIHZhbGlkIGxvY2F0
aW9uLgorICAgIGNvbXBvbmVudFtJU19LRVlfVkFMSURBVEVEXSA9IHRydWU7CisgIH0KK30KKwor
LyoqCisgKiBDb21wb25lbnRzIGFyZSB0aGUgYmFzaWMgdW5pdHMgb2YgY29tcG9zaXRpb24gaW4g
UmVhY3QuCisgKgorICogRXZlcnkgY29tcG9uZW50IGFjY2VwdHMgYSBzZXQgb2Yga2V5ZWQgaW5w
dXQgcGFyYW1ldGVycyBrbm93biBhcyAicHJvcHMiIHRoYXQKKyAqIGFyZSBpbml0aWFsaXplZCBi
eSB0aGUgY29uc3RydWN0b3IuIE9uY2UgYSBjb21wb25lbnQgaXMgbW91bnRlZCwgdGhlIHByb3Bz
CisgKiBjYW4gYmUgbXV0YXRlZCB1c2luZyBgc2V0UHJvcHNgIG9yIGByZXBsYWNlUHJvcHNgLgor
ICoKKyAqIEV2ZXJ5IGNvbXBvbmVudCBpcyBjYXBhYmxlIG9mIHRoZSBmb2xsb3dpbmcgb3BlcmF0
aW9uczoKKyAqCisgKiAgIGBtb3VudENvbXBvbmVudGAKKyAqICAgICBJbml0aWFsaXplcyB0aGUg
Y29tcG9uZW50LCByZW5kZXJzIG1hcmt1cCwgYW5kIHJlZ2lzdGVycyBldmVudCBsaXN0ZW5lcnMu
CisgKgorICogICBgcmVjZWl2ZVByb3BzYAorICogICAgIFVwZGF0ZXMgdGhlIHJlbmRlcmVkIERP
TSBub2RlcyBnaXZlbiBhIG5ldyBzZXQgb2YgcHJvcHMuCisgKgorICogICBgdW5tb3VudENvbXBv
bmVudGAKKyAqICAgICBSZWxlYXNlcyBhbnkgcmVzb3VyY2VzIGFsbG9jYXRlZCBieSB0aGlzIGNv
bXBvbmVudC4KKyAqCisgKiBDb21wb25lbnRzIGNhbiBhbHNvIGJlICJvd25lZCIgYnkgb3RoZXIg
Y29tcG9uZW50cy4gQmVpbmcgb3duZWQgYnkgYW5vdGhlcgorICogY29tcG9uZW50IG1lYW5zIGJl
aW5nIGNvbnN0cnVjdGVkIGJ5IHRoYXQgY29tcG9uZW50LiBUaGlzIGlzIGRpZmZlcmVudCBmcm9t
CisgKiBiZWluZyB0aGUgY2hpbGQgb2YgYSBjb21wb25lbnQsIHdoaWNoIG1lYW5zIGhhdmluZyBh
IERPTSByZXByZXNlbnRhdGlvbiB0aGF0CisgKiBpcyBhIGNoaWxkIG9mIHRoZSBET00gcmVwcmVz
ZW50YXRpb24gb2YgdGhhdCBjb21wb25lbnQuCisgKgorICogQGNsYXNzIFJlYWN0Q29tcG9uZW50
CisgKi8KK3ZhciBSZWFjdENvbXBvbmVudCA9IHsKKworICAvKioKKyAgICogQHBhcmFtIHs/b2Jq
ZWN0fSBvYmplY3QKKyAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb2JqZWN0YCBpcyBh
IHZhbGlkIGNvbXBvbmVudC4KKyAgICogQGZpbmFsCisgICAqLworICBpc1ZhbGlkQ29tcG9uZW50
OiBmdW5jdGlvbihvYmplY3QpIHsKKyAgICByZXR1cm4gISEoCisgICAgICBvYmplY3QgJiYKKyAg
ICAgIHR5cGVvZiBvYmplY3QubW91bnRDb21wb25lbnRJbnRvTm9kZSA9PT0gJ2Z1bmN0aW9uJyAm
JgorICAgICAgdHlwZW9mIG9iamVjdC5yZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicKKyAgICAp
OworICB9LAorCisgIC8qKgorICAgKiBHZW5lcmF0ZSBhIGtleSBzdHJpbmcgdGhhdCBpZGVudGlm
aWVzIGEgY29tcG9uZW50IHdpdGhpbiBhIHNldC4KKyAgICoKKyAgICogQHBhcmFtIHsqfSBjb21w
b25lbnQgQSBjb21wb25lbnQgdGhhdCBjb3VsZCBjb250YWluIGEgbWFudWFsIGtleS4KKyAgICog
QHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IHRoYXQgaXMgdXNlZCBpZiBhIG1hbnVhbCBrZXkg
aXMgbm90IHByb3ZpZGVkLgorICAgKiBAcmV0dXJuIHtzdHJpbmd9CisgICAqIEBpbnRlcm5hbAor
ICAgKi8KKyAgZ2V0S2V5OiBmdW5jdGlvbihjb21wb25lbnQsIGluZGV4KSB7CisgICAgaWYgKGNv
bXBvbmVudCAmJiBjb21wb25lbnQucHJvcHMgJiYgY29tcG9uZW50LnByb3BzLmtleSAhPSBudWxs
KSB7CisgICAgICAvLyBFeHBsaWNpdCBrZXkKKyAgICAgIHJldHVybiAnJyArIGNvbXBvbmVudC5w
cm9wcy5rZXk7CisgICAgfQorICAgIC8vIEltcGxpY2l0IGtleSBkZXRlcm1pbmVkIGJ5IHRoZSBp
bmRleCBpbiB0aGUgc2V0CisgICAgcmV0dXJuICcnICsgaW5kZXg7CisgIH0sCisKKyAgLyoqCisg
ICAqIEBpbnRlcm5hbAorICAgKi8KKyAgTGlmZUN5Y2xlOiBDb21wb25lbnRMaWZlQ3ljbGUsCisK
KyAgLyoqCisgICAqIFJlYWN0IHJlZmVyZW5jZXMgYFJlYWN0RE9NSURPcGVyYXRpb25zYCB1c2lu
ZyB0aGlzIHByb3BlcnR5IGluIG9yZGVyIHRvCisgICAqIGFsbG93IGRlcGVuZGVuY3kgaW5qZWN0
aW9uLgorICAgKgorICAgKiBAaW50ZXJuYWwKKyAgICovCisgIERPTUlET3BlcmF0aW9uczogUmVh
Y3RET01JRE9wZXJhdGlvbnMsCisKKyAgLyoqCisgICAqIFJlYWN0IHJlZmVyZW5jZXMgYFJlYWN0
UmVjb25jaWxlVHJhbnNhY3Rpb25gIHVzaW5nIHRoaXMgcHJvcGVydHkgaW4gb3JkZXIKKyAgICog
dG8gYWxsb3cgZGVwZW5kZW5jeSBpbmplY3Rpb24uCisgICAqCisgICAqIEBpbnRlcm5hbAorICAg
Ki8KKyAgUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbjogUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlv
biwKKworICAvKioKKyAgICogQHBhcmFtIHtvYmplY3R9IERPTUlET3BlcmF0aW9ucworICAgKiBA
ZmluYWwKKyAgICovCisgIHNldERPTU9wZXJhdGlvbnM6IGZ1bmN0aW9uKERPTUlET3BlcmF0aW9u
cykgeworICAgIFJlYWN0Q29tcG9uZW50LkRPTUlET3BlcmF0aW9ucyA9IERPTUlET3BlcmF0aW9u
czsKKyAgfSwKKworICAvKioKKyAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gUmVhY3RSZWNvbmNp
bGVUcmFuc2FjdGlvbgorICAgKiBAZmluYWwKKyAgICovCisgIHNldFJlYWN0UmVjb25jaWxlVHJh
bnNhY3Rpb246IGZ1bmN0aW9uKFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24pIHsKKyAgICBSZWFj
dENvbXBvbmVudC5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uID0gUmVhY3RSZWNvbmNpbGVUcmFu
c2FjdGlvbjsKKyAgfSwKKworICAvKioKKyAgICogQmFzZSBmdW5jdGlvbmFsaXR5IGZvciBldmVy
eSBSZWFjdENvbXBvbmVudCBjb25zdHJ1Y3Rvci4KKyAgICoKKyAgICogQGxlbmRzIHtSZWFjdENv
bXBvbmVudC5wcm90b3R5cGV9CisgICAqLworICBNaXhpbjogeworCisgICAgLyoqCisgICAgICog
Q2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoaXMgY29tcG9uZW50IGlzIG1vdW50ZWQuCisgICAgICoK
KyAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIG1vdW50ZWQsIGZhbHNlIG90aGVyd2lz
ZS4KKyAgICAgKiBAZmluYWwKKyAgICAgKiBAcHJvdGVjdGVkCisgICAgICovCisgICAgaXNNb3Vu
dGVkOiBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiB0aGlzLl9saWZlQ3ljbGVTdGF0ZSA9PT0g
Q29tcG9uZW50TGlmZUN5Y2xlLk1PVU5URUQ7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIFJl
dHVybnMgdGhlIERPTSBub2RlIHJlbmRlcmVkIGJ5IHRoaXMgY29tcG9uZW50LgorICAgICAqCisg
ICAgICogQHJldHVybiB7RE9NRWxlbWVudH0gVGhlIHJvb3Qgbm9kZSBvZiB0aGlzIGNvbXBvbmVu
dC4KKyAgICAgKiBAZmluYWwKKyAgICAgKiBAcHJvdGVjdGVkCisgICAgICovCisgICAgZ2V0RE9N
Tm9kZTogZnVuY3Rpb24oKSB7CisgICAgICBpbnZhcmlhbnQoCisgICAgICAgIHRoaXMuaXNNb3Vu
dGVkKCksCisgICAgICAgICdnZXRET01Ob2RlKCk6IEEgY29tcG9uZW50IG11c3QgYmUgbW91bnRl
ZCB0byBoYXZlIGEgRE9NIG5vZGUuJworICAgICAgKTsKKyAgICAgIHJldHVybiBSZWFjdElELmdl
dE5vZGUodGhpcy5fcm9vdE5vZGVJRCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIFNldHMg
YSBzdWJzZXQgb2YgdGhlIHByb3BzLgorICAgICAqCisgICAgICogQHBhcmFtIHtvYmplY3R9IHBh
cnRpYWxQcm9wcyBTdWJzZXQgb2YgdGhlIG5leHQgcHJvcHMuCisgICAgICogQHBhcmFtIHs/ZnVu
Y3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBwcm9wcyBhcmUgdXBkYXRlZC4KKyAgICAgKiBA
ZmluYWwKKyAgICAgKiBAcHVibGljCisgICAgICovCisgICAgc2V0UHJvcHM6IGZ1bmN0aW9uKHBh
cnRpYWxQcm9wcywgY2FsbGJhY2spIHsKKyAgICAgIC8vIE1lcmdlIHdpdGggYF9wZW5kaW5nUHJv
cHNgIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIHdpdGggZXhpc3RpbmcgcHJvcHMuCisgICAgICB0
aGlzLnJlcGxhY2VQcm9wcygKKyAgICAgICAgbWVyZ2UodGhpcy5fcGVuZGluZ1Byb3BzIHx8IHRo
aXMucHJvcHMsIHBhcnRpYWxQcm9wcyksCisgICAgICAgIGNhbGxiYWNrCisgICAgICApOworICAg
IH0sCisKKyAgICAvKioKKyAgICAgKiBSZXBsYWNlcyBhbGwgb2YgdGhlIHByb3BzLgorICAgICAq
CisgICAgICogQHBhcmFtIHtvYmplY3R9IHByb3BzIE5ldyBwcm9wcy4KKyAgICAgKiBAcGFyYW0g
ez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHByb3BzIGFyZSB1cGRhdGVkLgorICAg
ICAqIEBmaW5hbAorICAgICAqIEBwdWJsaWMKKyAgICAgKi8KKyAgICByZXBsYWNlUHJvcHM6IGZ1
bmN0aW9uKHByb3BzLCBjYWxsYmFjaykgeworICAgICAgaW52YXJpYW50KAorICAgICAgICAhdGhp
cy5wcm9wc1tPV05FUl0sCisgICAgICAgICdyZXBsYWNlUHJvcHMoLi4uKTogWW91IGNhbGxlZCBg
c2V0UHJvcHNgIG9yIGByZXBsYWNlUHJvcHNgIG9uIGEgJyArCisgICAgICAgICdjb21wb25lbnQg
d2l0aCBhbiBvd25lci4gVGhpcyBpcyBhbiBhbnRpLXBhdHRlcm4gc2luY2UgcHJvcHMgd2lsbCAn
ICsKKyAgICAgICAgJ2dldCByZWFjdGl2ZWx5IHVwZGF0ZWQgd2hlbiByZW5kZXJlZC4gSW5zdGVh
ZCwgY2hhbmdlIHRoZSBvd25lclwncyAnICsKKyAgICAgICAgJ2ByZW5kZXJgIG1ldGhvZCB0byBw
YXNzIHRoZSBjb3JyZWN0IHZhbHVlIGFzIHByb3BzIHRvIHRoZSBjb21wb25lbnQgJyArCisgICAg
ICAgICd3aGVyZSBpdCBpcyBjcmVhdGVkLicKKyAgICAgICk7CisgICAgICB0aGlzLl9wZW5kaW5n
UHJvcHMgPSBwcm9wczsKKyAgICAgIFJlYWN0VXBkYXRlcy5lbnF1ZXVlVXBkYXRlKHRoaXMsIGNh
bGxiYWNrKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQmFzZSBjb25zdHJ1Y3RvciBmb3Ig
YWxsIFJlYWN0IGNvbXBvbmVudC4KKyAgICAgKgorICAgICAqIFN1YmNsYXNzZXMgdGhhdCBvdmVy
cmlkZSB0aGlzIG1ldGhvZCBzaG91bGQgbWFrZSBzdXJlIHRvIGludm9rZQorICAgICAqIGBSZWFj
dENvbXBvbmVudC5NaXhpbi5jb25zdHJ1Y3QuY2FsbCh0aGlzLCAuLi4pYC4KKyAgICAgKgorICAg
ICAqIEBwYXJhbSB7P29iamVjdH0gaW5pdGlhbFByb3BzCisgICAgICogQHBhcmFtIHsqfSBjaGls
ZHJlbgorICAgICAqIEBpbnRlcm5hbAorICAgICAqLworICAgIGNvbnN0cnVjdDogZnVuY3Rpb24o
aW5pdGlhbFByb3BzLCBjaGlsZHJlbikgeworICAgICAgdGhpcy5wcm9wcyA9IGluaXRpYWxQcm9w
cyB8fCB7fTsKKyAgICAgIC8vIFJlY29yZCB0aGUgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciBj
cmVhdGluZyB0aGlzIGNvbXBvbmVudC4KKyAgICAgIHRoaXMucHJvcHNbT1dORVJdID0gUmVhY3RD
dXJyZW50T3duZXIuY3VycmVudDsKKyAgICAgIC8vIEFsbCBjb21wb25lbnRzIHN0YXJ0IHVubW91
bnRlZC4KKyAgICAgIHRoaXMuX2xpZmVDeWNsZVN0YXRlID0gQ29tcG9uZW50TGlmZUN5Y2xlLlVO
TU9VTlRFRDsKKworICAgICAgdGhpcy5fcGVuZGluZ1Byb3BzID0gbnVsbDsKKyAgICAgIHRoaXMu
X3BlbmRpbmdDYWxsYmFja3MgPSBudWxsOworCisgICAgICAvLyBDaGlsZHJlbiBjYW4gYmUgbW9y
ZSB0aGFuIG9uZSBhcmd1bWVudAorICAgICAgdmFyIGNoaWxkcmVuTGVuZ3RoID0gYXJndW1lbnRz
Lmxlbmd0aCAtIDE7CisgICAgICBpZiAoY2hpbGRyZW5MZW5ndGggPT09IDEpIHsKKyAgICAgICAg
aWYgKHRydWUpIHsKKyAgICAgICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhjaGlsZHJlbik7CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5wcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuOworICAgICAgfSBl
bHNlIGlmIChjaGlsZHJlbkxlbmd0aCA+IDEpIHsKKyAgICAgICAgdmFyIGNoaWxkQXJyYXkgPSBB
cnJheShjaGlsZHJlbkxlbmd0aCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRy
ZW5MZW5ndGg7IGkrKykgeworICAgICAgICAgIGlmICh0cnVlKSB7CisgICAgICAgICAgICB2YWxp
ZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNbaSArIDFdKTsKKyAgICAgICAgICB9CisgICAgICAgICAg
Y2hpbGRBcnJheVtpXSA9IGFyZ3VtZW50c1tpICsgMV07CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5wcm9wcy5jaGlsZHJlbiA9IGNoaWxkQXJyYXk7CisgICAgICB9CisgICAgfSwKKworICAgIC8q
KgorICAgICAqIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQsIHJlbmRlcnMgbWFya3VwLCBhbmQg
cmVnaXN0ZXJzIGV2ZW50IGxpc3RlbmVycy4KKyAgICAgKgorICAgICAqIE5PVEU6IFRoaXMgZG9l
cyBub3QgaW5zZXJ0IGFueSBub2RlcyBpbnRvIHRoZSBET00uCisgICAgICoKKyAgICAgKiBTdWJj
bGFzc2VzIHRoYXQgb3ZlcnJpZGUgdGhpcyBtZXRob2Qgc2hvdWxkIG1ha2Ugc3VyZSB0byBpbnZv
a2UKKyAgICAgKiBgUmVhY3RDb21wb25lbnQuTWl4aW4ubW91bnRDb21wb25lbnQuY2FsbCh0aGlz
LCAuLi4pYC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSByb290SUQgRE9NIElEIG9m
IHRoZSByb290IG5vZGUuCisgICAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9u
fSB0cmFuc2FjdGlvbgorICAgICAqIEByZXR1cm4gez9zdHJpbmd9IFJlbmRlcmVkIG1hcmt1cCB0
byBiZSBpbnNlcnRlZCBpbnRvIHRoZSBET00uCisgICAgICogQGludGVybmFsCisgICAgICovCisg
ICAgbW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uKHJvb3RJRCwgdHJhbnNhY3Rpb24pIHsKKyAgICAg
IGludmFyaWFudCgKKyAgICAgICAgIXRoaXMuaXNNb3VudGVkKCksCisgICAgICAgICdtb3VudENv
bXBvbmVudCglcywgLi4uKTogQ2FuIG9ubHkgbW91bnQgYW4gdW5tb3VudGVkIGNvbXBvbmVudC4n
LAorICAgICAgICByb290SUQKKyAgICAgICk7CisgICAgICB2YXIgcHJvcHMgPSB0aGlzLnByb3Bz
OworICAgICAgaWYgKHByb3BzLnJlZiAhPSBudWxsKSB7CisgICAgICAgIFJlYWN0T3duZXIuYWRk
Q29tcG9uZW50QXNSZWZUbyh0aGlzLCBwcm9wcy5yZWYsIHByb3BzW09XTkVSXSk7CisgICAgICB9
CisgICAgICB0aGlzLl9yb290Tm9kZUlEID0gcm9vdElEOworICAgICAgdGhpcy5fbGlmZUN5Y2xl
U3RhdGUgPSBDb21wb25lbnRMaWZlQ3ljbGUuTU9VTlRFRDsKKyAgICAgIC8vIEVmZmVjdGl2ZWx5
OiByZXR1cm4gJyc7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIFJlbGVhc2VzIGFueSByZXNv
dXJjZXMgYWxsb2NhdGVkIGJ5IGBtb3VudENvbXBvbmVudGAuCisgICAgICoKKyAgICAgKiBOT1RF
OiBUaGlzIGRvZXMgbm90IHJlbW92ZSBhbnkgbm9kZXMgZnJvbSB0aGUgRE9NLgorICAgICAqCisg
ICAgICogU3ViY2xhc3NlcyB0aGF0IG92ZXJyaWRlIHRoaXMgbWV0aG9kIHNob3VsZCBtYWtlIHN1
cmUgdG8gaW52b2tlCisgICAgICogYFJlYWN0Q29tcG9uZW50Lk1peGluLnVubW91bnRDb21wb25l
bnQuY2FsbCh0aGlzKWAuCisgICAgICoKKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICB1
bm1vdW50Q29tcG9uZW50OiBmdW5jdGlvbigpIHsKKyAgICAgIGludmFyaWFudCgKKyAgICAgICAg
dGhpcy5pc01vdW50ZWQoKSwKKyAgICAgICAgJ3VubW91bnRDb21wb25lbnQoKTogQ2FuIG9ubHkg
dW5tb3VudCBhIG1vdW50ZWQgY29tcG9uZW50LicKKyAgICAgICk7CisgICAgICB2YXIgcHJvcHMg
PSB0aGlzLnByb3BzOworICAgICAgaWYgKHByb3BzLnJlZiAhPSBudWxsKSB7CisgICAgICAgIFJl
YWN0T3duZXIucmVtb3ZlQ29tcG9uZW50QXNSZWZGcm9tKHRoaXMsIHByb3BzLnJlZiwgcHJvcHNb
T1dORVJdKTsKKyAgICAgIH0KKyAgICAgIFJlYWN0SUQucHVyZ2VJRCh0aGlzLl9yb290Tm9kZUlE
KTsKKyAgICAgIHRoaXMuX3Jvb3ROb2RlSUQgPSBudWxsOworICAgICAgdGhpcy5fbGlmZUN5Y2xl
U3RhdGUgPSBDb21wb25lbnRMaWZlQ3ljbGUuVU5NT1VOVEVEOworICAgIH0sCisKKyAgICAvKioK
KyAgICAgKiBVcGRhdGVzIHRoZSByZW5kZXJlZCBET00gbm9kZXMgZ2l2ZW4gYSBuZXcgc2V0IG9m
IHByb3BzLgorICAgICAqCisgICAgICogU3ViY2xhc3NlcyB0aGF0IG92ZXJyaWRlIHRoaXMgbWV0
aG9kIHNob3VsZCBtYWtlIHN1cmUgdG8gaW52b2tlCisgICAgICogYFJlYWN0Q29tcG9uZW50Lk1p
eGluLnJlY2VpdmVQcm9wcy5jYWxsKHRoaXMsIC4uLilgLgorICAgICAqCisgICAgICogQHBhcmFt
IHtvYmplY3R9IG5leHRQcm9wcyBOZXh0IHNldCBvZiBwcm9wZXJ0aWVzLgorICAgICAqIEBwYXJh
bSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb24KKyAgICAgKiBAaW50ZXJu
YWwKKyAgICAgKi8KKyAgICByZWNlaXZlUHJvcHM6IGZ1bmN0aW9uKG5leHRQcm9wcywgdHJhbnNh
Y3Rpb24pIHsKKyAgICAgIGludmFyaWFudCgKKyAgICAgICAgdGhpcy5pc01vdW50ZWQoKSwKKyAg
ICAgICAgJ3JlY2VpdmVQcm9wcyguLi4pOiBDYW4gb25seSB1cGRhdGUgYSBtb3VudGVkIGNvbXBv
bmVudC4nCisgICAgICApOworICAgICAgdGhpcy5fcGVuZGluZ1Byb3BzID0gbmV4dFByb3BzOwor
ICAgICAgdGhpcy5fcGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5KHRyYW5zYWN0aW9uKTsKKyAgICB9
LAorCisgICAgLyoqCisgICAgICogQ2FsbCBgX3BlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeWAgd2l0
aGluIGEgbmV3IHRyYW5zYWN0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIHtSZWFjdFJlY29u
Y2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvbgorICAgICAqIEBpbnRlcm5hbAorICAgICAqLwor
ICAgIHBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeTogZnVuY3Rpb24oKSB7CisgICAgICB2YXIgdHJh
bnNhY3Rpb24gPSBSZWFjdENvbXBvbmVudC5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uLmdldFBv
b2xlZCgpOworICAgICAgdHJhbnNhY3Rpb24ucGVyZm9ybSh0aGlzLl9wZXJmb3JtVXBkYXRlSWZO
ZWNlc3NhcnksIHRoaXMsIHRyYW5zYWN0aW9uKTsKKyAgICAgIFJlYWN0Q29tcG9uZW50LlJlYWN0
UmVjb25jaWxlVHJhbnNhY3Rpb24ucmVsZWFzZSh0cmFuc2FjdGlvbik7CisgICAgfSwKKworICAg
IC8qKgorICAgICAqIElmIGBfcGVuZGluZ1Byb3BzYCBpcyBzZXQsIHVwZGF0ZSB0aGUgY29tcG9u
ZW50LgorICAgICAqCisgICAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0
cmFuc2FjdGlvbgorICAgICAqIEBpbnRlcm5hbAorICAgICAqLworICAgIF9wZXJmb3JtVXBkYXRl
SWZOZWNlc3Nhcnk6IGZ1bmN0aW9uKHRyYW5zYWN0aW9uKSB7CisgICAgICBpZiAodGhpcy5fcGVu
ZGluZ1Byb3BzID09IG51bGwpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgdmFy
IHByZXZQcm9wcyA9IHRoaXMucHJvcHM7CisgICAgICB0aGlzLnByb3BzID0gdGhpcy5fcGVuZGlu
Z1Byb3BzOworICAgICAgdGhpcy5fcGVuZGluZ1Byb3BzID0gbnVsbDsKKyAgICAgIHRoaXMudXBk
YXRlQ29tcG9uZW50KHRyYW5zYWN0aW9uLCBwcmV2UHJvcHMpOworICAgIH0sCisKKyAgICAvKioK
KyAgICAgKiBVcGRhdGVzIHRoZSBjb21wb25lbnQncyBjdXJyZW50bHkgbW91bnRlZCByZXByZXNl
bnRhdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlv
bn0gdHJhbnNhY3Rpb24KKyAgICAgKiBAcGFyYW0ge29iamVjdH0gcHJldlByb3BzCisgICAgICog
QGludGVybmFsCisgICAgICovCisgICAgdXBkYXRlQ29tcG9uZW50OiBmdW5jdGlvbih0cmFuc2Fj
dGlvbiwgcHJldlByb3BzKSB7CisgICAgICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzOworICAgICAg
Ly8gSWYgZWl0aGVyIHRoZSBvd25lciBvciBhIGByZWZgIGhhcyBjaGFuZ2VkLCBtYWtlIHN1cmUg
dGhlIG5ld2VzdCBvd25lcgorICAgICAgLy8gaGFzIHN0b3JlZCBhIHJlZmVyZW5jZSB0byBgdGhp
c2AsIGFuZCB0aGUgcHJldmlvdXMgb3duZXIgKGlmIGRpZmZlcmVudCkKKyAgICAgIC8vIGhhcyBm
b3Jnb3R0ZW4gdGhlIHJlZmVyZW5jZSB0byBgdGhpc2AuCisgICAgICBpZiAocHJvcHNbT1dORVJd
ICE9PSBwcmV2UHJvcHNbT1dORVJdIHx8IHByb3BzLnJlZiAhPT0gcHJldlByb3BzLnJlZikgewor
ICAgICAgICBpZiAocHJldlByb3BzLnJlZiAhPSBudWxsKSB7CisgICAgICAgICAgUmVhY3RPd25l
ci5yZW1vdmVDb21wb25lbnRBc1JlZkZyb20oCisgICAgICAgICAgICB0aGlzLCBwcmV2UHJvcHMu
cmVmLCBwcmV2UHJvcHNbT1dORVJdCisgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICAv
LyBDb3JyZWN0LCBldmVuIGlmIHRoZSBvd25lciBpcyB0aGUgc2FtZSwgYW5kIG9ubHkgdGhlIHJl
ZiBoYXMgY2hhbmdlZC4KKyAgICAgICAgaWYgKHByb3BzLnJlZiAhPSBudWxsKSB7CisgICAgICAg
ICAgUmVhY3RPd25lci5hZGRDb21wb25lbnRBc1JlZlRvKHRoaXMsIHByb3BzLnJlZiwgcHJvcHNb
T1dORVJdKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBN
b3VudHMgdGhpcyBjb21wb25lbnQgYW5kIGluc2VydHMgaXQgaW50byB0aGUgRE9NLgorICAgICAq
CisgICAgICogQHBhcmFtIHtzdHJpbmd9IHJvb3RJRCBET00gSUQgb2YgdGhlIHJvb3Qgbm9kZS4K
KyAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNvbnRhaW5lciBET00gZWxlbWVudCB0byBtb3Vu
dCBpbnRvLgorICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvdWxkUmV1c2VNYXJrdXAgSWYgdHJ1
ZSwgZG8gbm90IGluc2VydCBtYXJrdXAKKyAgICAgKiBAZmluYWwKKyAgICAgKiBAaW50ZXJuYWwK
KyAgICAgKiBAc2VlIHtSZWFjdE1vdW50LnJlbmRlckNvbXBvbmVudH0KKyAgICAgKi8KKyAgICBt
b3VudENvbXBvbmVudEludG9Ob2RlOiBmdW5jdGlvbihyb290SUQsIGNvbnRhaW5lciwgc2hvdWxk
UmV1c2VNYXJrdXApIHsKKyAgICAgIHZhciB0cmFuc2FjdGlvbiA9IFJlYWN0Q29tcG9uZW50LlJl
YWN0UmVjb25jaWxlVHJhbnNhY3Rpb24uZ2V0UG9vbGVkKCk7CisgICAgICB0cmFuc2FjdGlvbi5w
ZXJmb3JtKAorICAgICAgICB0aGlzLl9tb3VudENvbXBvbmVudEludG9Ob2RlLAorICAgICAgICB0
aGlzLAorICAgICAgICByb290SUQsCisgICAgICAgIGNvbnRhaW5lciwKKyAgICAgICAgdHJhbnNh
Y3Rpb24sCisgICAgICAgIHNob3VsZFJldXNlTWFya3VwCisgICAgICApOworICAgICAgUmVhY3RD
b21wb25lbnQuUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5yZWxlYXNlKHRyYW5zYWN0aW9uKTsK
KyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHJvb3RJRCBET00gSUQg
b2YgdGhlIHJvb3Qgbm9kZS4KKyAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNvbnRhaW5lciBE
T00gZWxlbWVudCB0byBtb3VudCBpbnRvLgorICAgICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVU
cmFuc2FjdGlvbn0gdHJhbnNhY3Rpb24KKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNob3VsZFJl
dXNlTWFya3VwIElmIHRydWUsIGRvIG5vdCBpbnNlcnQgbWFya3VwCisgICAgICogQGZpbmFsCisg
ICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBfbW91bnRDb21wb25lbnRJbnRvTm9kZTogZnVu
Y3Rpb24oCisgICAgICAgIHJvb3RJRCwKKyAgICAgICAgY29udGFpbmVyLAorICAgICAgICB0cmFu
c2FjdGlvbiwKKyAgICAgICAgc2hvdWxkUmV1c2VNYXJrdXApIHsKKyAgICAgIGludmFyaWFudCgK
KyAgICAgICAgY29udGFpbmVyICYmIGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gMSwKKyAgICAgICAg
J21vdW50Q29tcG9uZW50SW50b05vZGUoLi4uKTogVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBE
T00gZWxlbWVudC4nCisgICAgICApOworICAgICAgdmFyIHJlbmRlclN0YXJ0ID0gRGF0ZS5ub3co
KTsKKyAgICAgIHZhciBtYXJrdXAgPSB0aGlzLm1vdW50Q29tcG9uZW50KHJvb3RJRCwgdHJhbnNh
Y3Rpb24pOworICAgICAgUmVhY3RNb3VudC50b3RhbEluc3RhbnRpYXRpb25UaW1lICs9IChEYXRl
Lm5vdygpIC0gcmVuZGVyU3RhcnQpOworCisgICAgICBpZiAoc2hvdWxkUmV1c2VNYXJrdXApIHsK
KyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICB2YXIgaW5qZWN0aW9uU3RhcnQgPSBE
YXRlLm5vdygpOworICAgICAgLy8gQXN5bmNocm9ub3VzbHkgaW5qZWN0IG1hcmt1cCBieSBlbnN1
cmluZyB0aGF0IHRoZSBjb250YWluZXIgaXMgbm90IGluCisgICAgICAvLyB0aGUgZG9jdW1lbnQg
d2hlbiBzZXR0aW5ncyBpdHMgYGlubmVySFRNTGAuCisgICAgICB2YXIgcGFyZW50ID0gY29udGFp
bmVyLnBhcmVudE5vZGU7CisgICAgICBpZiAocGFyZW50KSB7CisgICAgICAgIHZhciBuZXh0ID0g
Y29udGFpbmVyLm5leHRTaWJsaW5nOworICAgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoY29udGFp
bmVyKTsKKyAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IG1hcmt1cDsKKyAgICAgICAgaWYg
KG5leHQpIHsKKyAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNvbnRhaW5lciwgbmV4dCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcGFyZW50LmFwcGVuZENoaWxkKGNvbnRhaW5l
cik7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnRhaW5lci5pbm5lckhU
TUwgPSBtYXJrdXA7CisgICAgICB9CisgICAgICBSZWFjdE1vdW50LnRvdGFsSW5qZWN0aW9uVGlt
ZSArPSAoRGF0ZS5ub3coKSAtIGluamVjdGlvblN0YXJ0KTsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgICogVW5tb3VudHMgdGhpcyBjb21wb25lbnQgYW5kIHJlbW92ZXMgaXQgZnJvbSB0aGUgRE9N
LgorICAgICAqCisgICAgICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWluZXIgRE9NIGVsZW1l
bnQgdG8gdW5tb3VudCBmcm9tLgorICAgICAqIEBmaW5hbAorICAgICAqIEBpbnRlcm5hbAorICAg
ICAqIEBzZWUge1JlYWN0TW91bnQudW5tb3VudEFuZFJlbGVhc2VSZWFjdFJvb3ROb2RlfQorICAg
ICAqLworICAgIHVubW91bnRDb21wb25lbnRGcm9tTm9kZTogZnVuY3Rpb24oY29udGFpbmVyKSB7
CisgICAgICB0aGlzLnVubW91bnRDb21wb25lbnQoKTsKKyAgICAgIC8vIGh0dHA6Ly9qc3BlcmYu
Y29tL2VtcHR5aW5nLWEtbm9kZQorICAgICAgd2hpbGUgKGNvbnRhaW5lci5sYXN0Q2hpbGQpIHsK
KyAgICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGNvbnRhaW5lci5sYXN0Q2hpbGQpOworICAg
ICAgfQorICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgdGhpcyBjb21wb25lbnQg
aXMgb3duZWQgYnkgdGhlIHN1cHBsaWVkIGBvd25lcmAgY29tcG9uZW50LgorICAgICAqCisgICAg
ICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gb3duZXIgQ29tcG9uZW50IHRvIGNoZWNrLgorICAg
ICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYG93bmVyc2Agb3ducyB0aGlzIGNvbXBvbmVu
dC4KKyAgICAgKiBAZmluYWwKKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICBpc093bmVk
Qnk6IGZ1bmN0aW9uKG93bmVyKSB7CisgICAgICByZXR1cm4gdGhpcy5wcm9wc1tPV05FUl0gPT09
IG93bmVyOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBHZXRzIGFub3RoZXIgY29tcG9uZW50
LCB0aGF0IHNoYXJlcyB0aGUgc2FtZSBvd25lciBhcyB0aGlzIG9uZSwgYnkgcmVmLgorICAgICAq
CisgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlZiBvZiBhIHNpYmxpbmcgQ29tcG9uZW50LgorICAg
ICAqIEByZXR1cm4gez9SZWFjdENvbXBvbmVudH0gdGhlIGFjdHVhbCBzaWJsaW5nIENvbXBvbmVu
dC4KKyAgICAgKiBAZmluYWwKKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICBnZXRTaWJs
aW5nQnlSZWY6IGZ1bmN0aW9uKHJlZikgeworICAgICAgdmFyIG93bmVyID0gdGhpcy5wcm9wc1tP
V05FUl07CisgICAgICBpZiAoIW93bmVyIHx8ICFvd25lci5yZWZzKSB7CisgICAgICAgIHJldHVy
biBudWxsOworICAgICAgfQorICAgICAgcmV0dXJuIG93bmVyLnJlZnNbcmVmXTsKKyAgICB9CisK
KyAgfQorCit9OworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q29tcG9uZW50OworCit9LHsiLi9S
ZWFjdEN1cnJlbnRPd25lciI6MjQsIi4vUmVhY3RET01JRE9wZXJhdGlvbnMiOjI3LCIuL1JlYWN0
SUQiOjM1LCIuL1JlYWN0TW91bnQiOjM4LCIuL1JlYWN0T3duZXIiOjQyLCIuL1JlYWN0UmVjb25j
aWxlVHJhbnNhY3Rpb24iOjQ1LCIuL1JlYWN0VXBkYXRlcyI6NDgsIi4vaW52YXJpYW50Ijo3NSwi
Li9rZXlNaXJyb3IiOjc4LCIuL21lcmdlIjo4MX1dLDIzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKKyhmdW5jdGlvbigpey8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ss
IEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24g
Mi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0
IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29w
eSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNl
cy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBv
ciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VU
IFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3Ig
aW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdv
dmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNl
LgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudAorICovCisK
KyJ1c2Ugc3RyaWN0IjsKKwordmFyIFJlYWN0Q29tcG9uZW50ID0gcmVxdWlyZSgiLi9SZWFjdENv
bXBvbmVudCIpOwordmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZSgiLi9SZWFjdEN1cnJl
bnRPd25lciIpOwordmFyIFJlYWN0T3duZXIgPSByZXF1aXJlKCIuL1JlYWN0T3duZXIiKTsKK3Zh
ciBSZWFjdFByb3BUcmFuc2ZlcmVyID0gcmVxdWlyZSgiLi9SZWFjdFByb3BUcmFuc2ZlcmVyIik7
Cit2YXIgUmVhY3RVcGRhdGVzID0gcmVxdWlyZSgiLi9SZWFjdFVwZGF0ZXMiKTsKKwordmFyIGlu
dmFyaWFudCA9IHJlcXVpcmUoIi4vaW52YXJpYW50Iik7Cit2YXIga2V5TWlycm9yID0gcmVxdWly
ZSgiLi9rZXlNaXJyb3IiKTsKK3ZhciBtZXJnZSA9IHJlcXVpcmUoIi4vbWVyZ2UiKTsKK3ZhciBt
aXhJbnRvID0gcmVxdWlyZSgiLi9taXhJbnRvIik7CisKKy8qKgorICogUG9saWNpZXMgdGhhdCBk
ZXNjcmliZSBtZXRob2RzIGluIGBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudEludGVyZmFjZWAuCisg
Ki8KK3ZhciBTcGVjUG9saWN5ID0ga2V5TWlycm9yKHsKKyAgLyoqCisgICAqIFRoZXNlIG1ldGhv
ZHMgbWF5IGJlIGRlZmluZWQgb25seSBvbmNlIGJ5IHRoZSBjbGFzcyBzcGVjaWZpY2F0aW9uIG9y
IG1peGluLgorICAgKi8KKyAgREVGSU5FX09OQ0U6IG51bGwsCisgIC8qKgorICAgKiBUaGVzZSBt
ZXRob2RzIG1heSBiZSBkZWZpbmVkIGJ5IGJvdGggdGhlIGNsYXNzIHNwZWNpZmljYXRpb24gYW5k
IG1peGlucy4KKyAgICogU3Vic2VxdWVudCBkZWZpbml0aW9ucyB3aWxsIGJlIGNoYWluZWQuIFRo
ZXNlIG1ldGhvZHMgbXVzdCByZXR1cm4gdm9pZC4KKyAgICovCisgIERFRklORV9NQU5ZOiBudWxs
LAorICAvKioKKyAgICogVGhlc2UgbWV0aG9kcyBhcmUgb3ZlcnJpZGluZyB0aGUgYmFzZSBSZWFj
dENvbXBvc2l0ZUNvbXBvbmVudCBjbGFzcy4KKyAgICovCisgIE9WRVJSSURFX0JBU0U6IG51bGwK
K30pOworCisvKioKKyAqIENvbXBvc2l0ZSBjb21wb25lbnRzIGFyZSBoaWdoZXItbGV2ZWwgY29t
cG9uZW50cyB0aGF0IGNvbXBvc2Ugb3RoZXIgY29tcG9zaXRlCisgKiBvciBuYXRpdmUgY29tcG9u
ZW50cy4KKyAqCisgKiBUbyBjcmVhdGUgYSBuZXcgdHlwZSBvZiBgUmVhY3RDb21wb3NpdGVDb21w
b25lbnRgLCBwYXNzIGEgc3BlY2lmaWNhdGlvbiBvZgorICogeW91ciBuZXcgY2xhc3MgdG8gYFJl
YWN0LmNyZWF0ZUNsYXNzYC4gVGhlIG9ubHkgcmVxdWlyZW1lbnQgb2YgeW91ciBjbGFzcworICog
c3BlY2lmaWNhdGlvbiBpcyB0aGF0IHlvdSBpbXBsZW1lbnQgYSBgcmVuZGVyYCBtZXRob2QuCisg
KgorICogICB2YXIgTXlDb21wb25lbnQgPSBSZWFjdC5jcmVhdGVDbGFzcyh7CisgKiAgICAgcmVu
ZGVyOiBmdW5jdGlvbigpIHsKKyAqICAgICAgIHJldHVybiA8ZGl2PkhlbGxvIFdvcmxkPC9kaXY+
OworICogICAgIH0KKyAqICAgfSk7CisgKgorICogVGhlIGNsYXNzIHNwZWNpZmljYXRpb24gc3Vw
cG9ydHMgYSBzcGVjaWZpYyBwcm90b2NvbCBvZiBtZXRob2RzIHRoYXQgaGF2ZQorICogc3BlY2lh
bCBtZWFuaW5nIChlLmcuIGByZW5kZXJgKS4gU2VlIGBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudElu
dGVyZmFjZWAgZm9yCisgKiBtb3JlIHRoZSBjb21wcmVoZW5zaXZlIHByb3RvY29sLiBBbnkgb3Ro
ZXIgcHJvcGVydGllcyBhbmQgbWV0aG9kcyBpbiB0aGUKKyAqIGNsYXNzIHNwZWNpZmljYXRpb24g
d2lsbCBhdmFpbGFibGUgb24gdGhlIHByb3RvdHlwZS4KKyAqCisgKiBAaW50ZXJmYWNlIFJlYWN0
Q29tcG9zaXRlQ29tcG9uZW50SW50ZXJmYWNlCisgKiBAaW50ZXJuYWwKKyAqLwordmFyIFJlYWN0
Q29tcG9zaXRlQ29tcG9uZW50SW50ZXJmYWNlID0geworCisgIC8qKgorICAgKiBBbiBhcnJheSBv
ZiBNaXhpbiBvYmplY3RzIHRvIGluY2x1ZGUgd2hlbiBkZWZpbmluZyB5b3VyIGNvbXBvbmVudC4K
KyAgICoKKyAgICogQHR5cGUge2FycmF5fQorICAgKiBAb3B0aW9uYWwKKyAgICovCisgIG1peGlu
czogU3BlY1BvbGljeS5ERUZJTkVfTUFOWSwKKworICAvKioKKyAgICogRGVmaW5pdGlvbiBvZiBw
cm9wIHR5cGVzIGZvciB0aGlzIGNvbXBvbmVudC4KKyAgICoKKyAgICogQHR5cGUge29iamVjdH0K
KyAgICogQG9wdGlvbmFsCisgICAqLworICBwcm9wVHlwZXM6IFNwZWNQb2xpY3kuREVGSU5FX09O
Q0UsCisKKworCisgIC8vID09PT0gRGVmaW5pdGlvbiBtZXRob2RzID09PT0KKworICAvKioKKyAg
ICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbW91bnRlZC4gVmFsdWVzIGluIHRoZSBt
YXBwaW5nIHdpbGwgYmUgc2V0IG9uCisgICAqIGB0aGlzLnByb3BzYCBpZiB0aGF0IHByb3AgaXMg
bm90IHNwZWNpZmllZCAoaS5lLiB1c2luZyBhbiBgaW5gIGNoZWNrKS4KKyAgICoKKyAgICogVGhp
cyBtZXRob2QgaXMgaW52b2tlZCBiZWZvcmUgYGdldEluaXRpYWxTdGF0ZWAgYW5kIHRoZXJlZm9y
ZSBjYW5ub3QgcmVseQorICAgKiBvbiBgdGhpcy5zdGF0ZWAgb3IgdXNlIGB0aGlzLnNldFN0YXRl
YC4KKyAgICoKKyAgICogQHJldHVybiB7b2JqZWN0fQorICAgKiBAb3B0aW9uYWwKKyAgICovCisg
IGdldERlZmF1bHRQcm9wczogU3BlY1BvbGljeS5ERUZJTkVfT05DRSwKKworICAvKioKKyAgICog
SW52b2tlZCBvbmNlIGJlZm9yZSB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQuIFRoZSByZXR1cm4g
dmFsdWUgd2lsbCBiZSB1c2VkCisgICAqIGFzIHRoZSBpbml0aWFsIHZhbHVlIG9mIGB0aGlzLnN0
YXRlYC4KKyAgICoKKyAgICogICBnZXRJbml0aWFsU3RhdGU6IGZ1bmN0aW9uKCkgeworICAgKiAg
ICAgcmV0dXJuIHsKKyAgICogICAgICAgaXNPbjogZmFsc2UsCisgICAqICAgICAgIGZvb0Jhejog
bmV3IEJhekZvbygpCisgICAqICAgICB9CisgICAqICAgfQorICAgKgorICAgKiBAcmV0dXJuIHtv
YmplY3R9CisgICAqIEBvcHRpb25hbAorICAgKi8KKyAgZ2V0SW5pdGlhbFN0YXRlOiBTcGVjUG9s
aWN5LkRFRklORV9PTkNFLAorCisgIC8qKgorICAgKiBVc2VzIHByb3BzIGZyb20gYHRoaXMucHJv
cHNgIGFuZCBzdGF0ZSBmcm9tIGB0aGlzLnN0YXRlYCB0byByZW5kZXIgdGhlCisgICAqIHN0cnVj
dHVyZSBvZiB0aGUgY29tcG9uZW50LgorICAgKgorICAgKiBObyBndWFyYW50ZWVzIGFyZSBtYWRl
IGFib3V0IHdoZW4gb3IgaG93IG9mdGVuIHRoaXMgbWV0aG9kIGlzIGludm9rZWQsIHNvCisgICAq
IGl0IG11c3Qgbm90IGhhdmUgc2lkZSBlZmZlY3RzLgorICAgKgorICAgKiAgIHJlbmRlcjogZnVu
Y3Rpb24oKSB7CisgICAqICAgICB2YXIgbmFtZSA9IHRoaXMucHJvcHMubmFtZTsKKyAgICogICAg
IHJldHVybiA8ZGl2PkhlbGxvLCB7bmFtZX0hPC9kaXY+OworICAgKiAgIH0KKyAgICoKKyAgICog
QHJldHVybiB7UmVhY3RDb21wb25lbnR9CisgICAqIEBub3NpZGVlZmZlY3RzCisgICAqIEByZXF1
aXJlZAorICAgKi8KKyAgcmVuZGVyOiBTcGVjUG9saWN5LkRFRklORV9PTkNFLAorCisKKworICAv
LyA9PT09IERlbGVnYXRlIG1ldGhvZHMgPT09PQorCisgIC8qKgorICAgKiBJbnZva2VkIHdoZW4g
dGhlIGNvbXBvbmVudCBpcyBpbml0aWFsbHkgY3JlYXRlZCBhbmQgYWJvdXQgdG8gYmUgbW91bnRl
ZC4KKyAgICogVGhpcyBtYXkgaGF2ZSBzaWRlIGVmZmVjdHMsIGJ1dCBhbnkgZXh0ZXJuYWwgc3Vi
c2NyaXB0aW9ucyBvciBkYXRhIGNyZWF0ZWQKKyAgICogYnkgdGhpcyBtZXRob2QgbXVzdCBiZSBj
bGVhbmVkIHVwIGluIGBjb21wb25lbnRXaWxsVW5tb3VudGAuCisgICAqCisgICAqIEBvcHRpb25h
bAorICAgKi8KKyAgY29tcG9uZW50V2lsbE1vdW50OiBTcGVjUG9saWN5LkRFRklORV9NQU5ZLAor
CisgIC8qKgorICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgYmVlbiBtb3VudGVk
IGFuZCBoYXMgYSBET00gcmVwcmVzZW50YXRpb24uCisgICAqIEhvd2V2ZXIsIHRoZXJlIGlzIG5v
IGd1YXJhbnRlZSB0aGF0IHRoZSBET00gbm9kZSBpcyBpbiB0aGUgZG9jdW1lbnQuCisgICAqCisg
ICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIG9wZXJhdGUgb24gdGhlIERPTSB3aGVu
IHRoZSBjb21wb25lbnQgaGFzCisgICAqIGJlZW4gbW91bnRlZCAoaW5pdGlhbGl6ZWQgYW5kIHJl
bmRlcmVkKSBmb3IgdGhlIGZpcnN0IHRpbWUuCisgICAqCisgICAqIEBwYXJhbSB7RE9NRWxlbWVu
dH0gcm9vdE5vZGUgRE9NIGVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSBjb21wb25lbnQuCisgICAq
IEBvcHRpb25hbAorICAgKi8KKyAgY29tcG9uZW50RGlkTW91bnQ6IFNwZWNQb2xpY3kuREVGSU5F
X01BTlksCisKKyAgLyoqCisgICAqIEludm9rZWQgYmVmb3JlIHRoZSBjb21wb25lbnQgcmVjZWl2
ZXMgbmV3IHByb3BzLgorICAgKgorICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBy
ZWFjdCB0byBhIHByb3AgdHJhbnNpdGlvbiBieSB1cGRhdGluZyB0aGUKKyAgICogc3RhdGUgdXNp
bmcgYHRoaXMuc2V0U3RhdGVgLiBDdXJyZW50IHByb3BzIGFyZSBhY2Nlc3NlZCB2aWEgYHRoaXMu
cHJvcHNgLgorICAgKgorICAgKiAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM6IGZ1bmN0aW9u
KG5leHRQcm9wcykgeworICAgKiAgICAgdGhpcy5zZXRTdGF0ZSh7CisgICAqICAgICAgIGxpa2Vz
SW5jcmVhc2luZzogbmV4dFByb3BzLmxpa2VDb3VudCA+IHRoaXMucHJvcHMubGlrZUNvdW50Cisg
ICAqICAgICB9KTsKKyAgICogICB9CisgICAqCisgICAqIE5PVEU6IFRoZXJlIGlzIG5vIGVxdWl2
YWxlbnQgYGNvbXBvbmVudFdpbGxSZWNlaXZlU3RhdGVgLiBBbiBpbmNvbWluZyBwcm9wCisgICAq
IHRyYW5zaXRpb24gbWF5IGNhdXNlIGEgc3RhdGUgY2hhbmdlLCBidXQgdGhlIG9wcG9zaXRlIGlz
IG5vdCB0cnVlLiBJZiB5b3UKKyAgICogbmVlZCBpdCwgeW91IGFyZSBwcm9iYWJseSBsb29raW5n
IGZvciBgY29tcG9uZW50V2lsbFVwZGF0ZWAuCisgICAqCisgICAqIEBwYXJhbSB7b2JqZWN0fSBu
ZXh0UHJvcHMKKyAgICogQG9wdGlvbmFsCisgICAqLworICBjb21wb25lbnRXaWxsUmVjZWl2ZVBy
b3BzOiBTcGVjUG9saWN5LkRFRklORV9NQU5ZLAorCisgIC8qKgorICAgKiBJbnZva2VkIHdoaWxl
IGRlY2lkaW5nIGlmIHRoZSBjb21wb25lbnQgc2hvdWxkIGJlIHVwZGF0ZWQgYXMgYSByZXN1bHQg
b2YKKyAgICogcmVjZWl2aW5nIG5ldyBwcm9wcyBhbmQgc3RhdGUuCisgICAqCisgICAqIFVzZSB0
aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIGByZXR1cm4gZmFsc2VgIHdoZW4geW91J3JlIGNlcnRh
aW4gdGhhdCB0aGUKKyAgICogdHJhbnNpdGlvbiB0byB0aGUgbmV3IHByb3BzIGFuZCBzdGF0ZSB3
aWxsIG5vdCByZXF1aXJlIGEgY29tcG9uZW50IHVwZGF0ZS4KKyAgICoKKyAgICogICBzaG91bGRD
b21wb25lbnRVcGRhdGU6IGZ1bmN0aW9uKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7CisgICAqICAg
ICByZXR1cm4gIWVxdWFsKG5leHRQcm9wcywgdGhpcy5wcm9wcykgfHwgIWVxdWFsKG5leHRTdGF0
ZSwgdGhpcy5zdGF0ZSk7CisgICAqICAgfQorICAgKgorICAgKiBAcGFyYW0ge29iamVjdH0gbmV4
dFByb3BzCisgICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dFN0YXRlCisgICAqIEByZXR1cm4ge2Jv
b2xlYW59IFRydWUgaWYgdGhlIGNvbXBvbmVudCBzaG91bGQgdXBkYXRlLgorICAgKiBAb3B0aW9u
YWwKKyAgICovCisgIHNob3VsZENvbXBvbmVudFVwZGF0ZTogU3BlY1BvbGljeS5ERUZJTkVfT05D
RSwKKworICAvKioKKyAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgYWJvdXQgdG8g
dXBkYXRlIGR1ZSB0byBhIHRyYW5zaXRpb24gZnJvbQorICAgKiBgdGhpcy5wcm9wc2AgYW5kIGB0
aGlzLnN0YXRlYCB0byBgbmV4dFByb3BzYCBhbmQgYG5leHRTdGF0ZWAuCisgICAqCisgICAqIFVz
ZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIHBlcmZvcm0gcHJlcGFyYXRpb24gYmVmb3JlIGFu
IHVwZGF0ZSBvY2N1cnMuCisgICAqCisgICAqIE5PVEU6IFlvdSAqKmNhbm5vdCoqIHVzZSBgdGhp
cy5zZXRTdGF0ZSgpYCBpbiB0aGlzIG1ldGhvZC4KKyAgICoKKyAgICogQHBhcmFtIHtvYmplY3R9
IG5leHRQcm9wcworICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRTdGF0ZQorICAgKiBAcGFyYW0g
e1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uCisgICAqIEBvcHRpb25hbAor
ICAgKi8KKyAgY29tcG9uZW50V2lsbFVwZGF0ZTogU3BlY1BvbGljeS5ERUZJTkVfTUFOWSwKKwor
ICAvKioKKyAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQncyBET00gcmVwcmVzZW50YXRp
b24gaGFzIGJlZW4gdXBkYXRlZC4KKyAgICoKKyAgICogVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5p
dHkgdG8gb3BlcmF0ZSBvbiB0aGUgRE9NIHdoZW4gdGhlIGNvbXBvbmVudCBoYXMKKyAgICogYmVl
biB1cGRhdGVkLgorICAgKgorICAgKiBAcGFyYW0ge29iamVjdH0gcHJldlByb3BzCisgICAqIEBw
YXJhbSB7P29iamVjdH0gcHJldlN0YXRlCisgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gcm9vdE5v
ZGUgRE9NIGVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSBjb21wb25lbnQuCisgICAqIEBvcHRpb25h
bAorICAgKi8KKyAgY29tcG9uZW50RGlkVXBkYXRlOiBTcGVjUG9saWN5LkRFRklORV9NQU5ZLAor
CisgIC8qKgorICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBhYm91dCB0byBiZSBy
ZW1vdmVkIGZyb20gaXRzIHBhcmVudCBhbmQgaGF2ZQorICAgKiBpdHMgRE9NIHJlcHJlc2VudGF0
aW9uIGRlc3Ryb3llZC4KKyAgICoKKyAgICogVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8g
ZGVhbGxvY2F0ZSBhbnkgZXh0ZXJuYWwgcmVzb3VyY2VzLgorICAgKgorICAgKiBOT1RFOiBUaGVy
ZSBpcyBubyBgY29tcG9uZW50RGlkVW5tb3VudGAgc2luY2UgeW91ciBjb21wb25lbnQgd2lsbCBo
YXZlIGJlZW4KKyAgICogZGVzdHJveWVkIGJ5IHRoYXQgcG9pbnQuCisgICAqCisgICAqIEBvcHRp
b25hbAorICAgKi8KKyAgY29tcG9uZW50V2lsbFVubW91bnQ6IFNwZWNQb2xpY3kuREVGSU5FX01B
TlksCisKKworCisgIC8vID09PT0gQWR2YW5jZWQgbWV0aG9kcyA9PT09CisKKyAgLyoqCisgICAq
IFVwZGF0ZXMgdGhlIGNvbXBvbmVudCdzIGN1cnJlbnRseSBtb3VudGVkIERPTSByZXByZXNlbnRh
dGlvbi4KKyAgICoKKyAgICogQnkgZGVmYXVsdCwgdGhpcyBpbXBsZW1lbnRzIFJlYWN0J3MgcmVu
ZGVyaW5nIGFuZCByZWNvbmNpbGlhdGlvbiBhbGdvcml0aG0uCisgICAqIFNvcGhpc3RpY2F0ZWQg
Y2xpZW50cyBtYXkgd2lzaCB0byBvdmVycmlkZSB0aGlzLgorICAgKgorICAgKiBAcGFyYW0ge1Jl
YWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uCisgICAqIEBpbnRlcm5hbAorICAg
KiBAb3ZlcnJpZGFibGUKKyAgICovCisgIHVwZGF0ZUNvbXBvbmVudDogU3BlY1BvbGljeS5PVkVS
UklERV9CQVNFCisKK307CisKKy8qKgorICogTWFwcGluZyBmcm9tIGNsYXNzIHNwZWNpZmljYXRp
b24ga2V5cyB0byBzcGVjaWFsIHByb2Nlc3NpbmcgZnVuY3Rpb25zLgorICoKKyAqIEFsdGhvdWdo
IHRoZXNlIGFyZSBkZWNsYXJlZCBpbiB0aGUgc3BlY2lmaWNhdGlvbiB3aGVuIGRlZmluaW5nIGNs
YXNzZXMKKyAqIHVzaW5nIGBSZWFjdC5jcmVhdGVDbGFzc2AsIHRoZXkgd2lsbCBub3QgYmUgb24g
dGhlIGNvbXBvbmVudCdzIHByb3RvdHlwZS4KKyAqLwordmFyIFJFU0VSVkVEX1NQRUNfS0VZUyA9
IHsKKyAgZGlzcGxheU5hbWU6IGZ1bmN0aW9uKENvbnN0cnVjdG9yLCBkaXNwbGF5TmFtZSkgewor
ICAgIENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7CisgIH0sCisgIG1peGlu
czogZnVuY3Rpb24oQ29uc3RydWN0b3IsIG1peGlucykgeworICAgIGlmIChtaXhpbnMpIHsKKyAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWl4aW5zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIG1p
eFNwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBtaXhpbnNbaV0pOworICAgICAgfQorICAg
IH0KKyAgfSwKKyAgcHJvcFR5cGVzOiBmdW5jdGlvbihDb25zdHJ1Y3RvciwgcHJvcFR5cGVzKSB7
CisgICAgQ29uc3RydWN0b3IucHJvcFR5cGVzID0gcHJvcFR5cGVzOworICB9Cit9OworCitmdW5j
dGlvbiB2YWxpZGF0ZU1ldGhvZE92ZXJyaWRlKHByb3RvLCBuYW1lKSB7CisgIHZhciBzcGVjUG9s
aWN5ID0gUmVhY3RDb21wb3NpdGVDb21wb25lbnRJbnRlcmZhY2VbbmFtZV07CisKKyAgLy8gRGlz
YWxsb3cgb3ZlcnJpZGluZyBvZiBiYXNlIGNsYXNzIG1ldGhvZHMgdW5sZXNzIGV4cGxpY2l0bHkg
YWxsb3dlZC4KKyAgaWYgKFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50TWl4aW4uaGFzT3duUHJvcGVy
dHkobmFtZSkpIHsKKyAgICBpbnZhcmlhbnQoCisgICAgICBzcGVjUG9saWN5ID09PSBTcGVjUG9s
aWN5Lk9WRVJSSURFX0JBU0UsCisgICAgICAnUmVhY3RDb21wb3NpdGVDb21wb25lbnRJbnRlcmZh
Y2U6IFlvdSBhcmUgYXR0ZW1wdGluZyB0byBvdmVycmlkZSAnICsKKyAgICAgICdgJXNgIGZyb20g
eW91ciBjbGFzcyBzcGVjaWZpY2F0aW9uLiBFbnN1cmUgdGhhdCB5b3VyIG1ldGhvZCBuYW1lcyAn
ICsKKyAgICAgICdkbyBub3Qgb3ZlcmxhcCB3aXRoIFJlYWN0IG1ldGhvZHMuJywKKyAgICAgIG5h
bWUKKyAgICApOworICB9CisKKyAgLy8gRGlzYWxsb3cgZGVmaW5pbmcgbWV0aG9kcyBtb3JlIHRo
YW4gb25jZSB1bmxlc3MgZXhwbGljaXRseSBhbGxvd2VkLgorICBpZiAocHJvdG8uaGFzT3duUHJv
cGVydHkobmFtZSkpIHsKKyAgICBpbnZhcmlhbnQoCisgICAgICBzcGVjUG9saWN5ID09PSBTcGVj
UG9saWN5LkRFRklORV9NQU5ZLAorICAgICAgJ1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50SW50ZXJm
YWNlOiBZb3UgYXJlIGF0dGVtcHRpbmcgdG8gZGVmaW5lICcgKworICAgICAgJ2Alc2Agb24geW91
ciBjb21wb25lbnQgbW9yZSB0aGFuIG9uY2UuIFRoaXMgY29uZmxpY3QgbWF5IGJlIGR1ZSAnICsK
KyAgICAgICd0byBhIG1peGluLicsCisgICAgICBuYW1lCisgICAgKTsKKyAgfQorfQorCisKK2Z1
bmN0aW9uIHZhbGlkYXRlTGlmZUN5Y2xlT25SZXBsYWNlU3RhdGUoaW5zdGFuY2UpIHsKKyAgdmFy
IGNvbXBvc2l0ZUxpZmVDeWNsZVN0YXRlID0gaW5zdGFuY2UuX2NvbXBvc2l0ZUxpZmVDeWNsZVN0
YXRlOworICBpbnZhcmlhbnQoCisgICAgaW5zdGFuY2UuaXNNb3VudGVkKCkgfHwKKyAgICAgIGNv
bXBvc2l0ZUxpZmVDeWNsZVN0YXRlID09PSBDb21wb3NpdGVMaWZlQ3ljbGUuTU9VTlRJTkcsCisg
ICAgJ3JlcGxhY2VTdGF0ZSguLi4pOiBDYW4gb25seSB1cGRhdGUgYSBtb3VudGVkIG9yIG1vdW50
aW5nIGNvbXBvbmVudC4nCisgICk7CisgIGludmFyaWFudCgKKyAgICBjb21wb3NpdGVMaWZlQ3lj
bGVTdGF0ZSAhPT0gQ29tcG9zaXRlTGlmZUN5Y2xlLlJFQ0VJVklOR19TVEFURSAmJgorICAgIGNv
bXBvc2l0ZUxpZmVDeWNsZVN0YXRlICE9PSBDb21wb3NpdGVMaWZlQ3ljbGUuVU5NT1VOVElORywK
KyAgICAncmVwbGFjZVN0YXRlKC4uLik6IENhbm5vdCB1cGRhdGUgd2hpbGUgdW5tb3VudGluZyBj
b21wb25lbnQgb3IgZHVyaW5nICcgKworICAgICdhbiBleGlzdGluZyBzdGF0ZSB0cmFuc2l0aW9u
IChzdWNoIGFzIHdpdGhpbiBgcmVuZGVyYCkuJworICApOworfQorCisvKioKKyAqIEN1c3RvbSB2
ZXJzaW9uIG9mIGBtaXhJbnRvYCB3aGljaCBoYW5kbGVzIHBvbGljeSB2YWxpZGF0aW9uIGFuZCBy
ZXNlcnZlZAorICogc3BlY2lmaWNhdGlvbiBrZXlzIHdoZW4gYnVpbGRpbmcgYFJlYWN0Q29tcG9z
aXRlQ29tcG9uZW50YCBjbGFzc3Nlcy4KKyAqLworZnVuY3Rpb24gbWl4U3BlY0ludG9Db21wb25l
bnQoQ29uc3RydWN0b3IsIHNwZWMpIHsKKyAgdmFyIHByb3RvID0gQ29uc3RydWN0b3IucHJvdG90
eXBlOworICBmb3IgKHZhciBuYW1lIGluIHNwZWMpIHsKKyAgICB2YXIgcHJvcGVydHkgPSBzcGVj
W25hbWVdOworICAgIGlmICghc3BlYy5oYXNPd25Qcm9wZXJ0eShuYW1lKSB8fCAhcHJvcGVydHkp
IHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICB2YWxpZGF0ZU1ldGhvZE92ZXJyaWRlKHBy
b3RvLCBuYW1lKTsKKworICAgIGlmIChSRVNFUlZFRF9TUEVDX0tFWVMuaGFzT3duUHJvcGVydHko
bmFtZSkpIHsKKyAgICAgIFJFU0VSVkVEX1NQRUNfS0VZU1tuYW1lXShDb25zdHJ1Y3RvciwgcHJv
cGVydHkpOworICAgIH0gZWxzZSB7CisgICAgICAvLyBTZXR1cCBtZXRob2RzIG9uIHByb3RvdHlw
ZToKKyAgICAgIC8vIFRoZSBmb2xsb3dpbmcgbWVtYmVyIG1ldGhvZHMgc2hvdWxkIG5vdCBiZSBh
dXRvbWF0aWNhbGx5IGJvdW5kOgorICAgICAgLy8gMS4gRXhwZWN0ZWQgUmVhY3RDb21wb3NpdGVD
b21wb25lbnQgbWV0aG9kcyAoaW4gdGhlICJpbnRlcmZhY2UiKS4KKyAgICAgIC8vIDIuIE92ZXJy
aWRkZW4gbWV0aG9kcyAodGhhdCB3ZXJlIG1peGVkIGluKS4KKyAgICAgIHZhciBpc0NvbXBvc2l0
ZUNvbXBvbmVudE1ldGhvZCA9IG5hbWUgaW4gUmVhY3RDb21wb3NpdGVDb21wb25lbnRJbnRlcmZh
Y2U7CisgICAgICB2YXIgaXNJbmhlcml0ZWQgPSBuYW1lIGluIHByb3RvOworICAgICAgdmFyIG1h
cmtlZERvbnRCaW5kID0gcHJvcGVydHkuX19yZWFjdERvbnRCaW5kOworICAgICAgdmFyIGlzRnVu
Y3Rpb24gPSB0eXBlb2YgcHJvcGVydHkgPT09ICdmdW5jdGlvbic7CisgICAgICB2YXIgc2hvdWxk
QXV0b0JpbmQgPQorICAgICAgICBpc0Z1bmN0aW9uICYmCisgICAgICAgICFpc0NvbXBvc2l0ZUNv
bXBvbmVudE1ldGhvZCAmJgorICAgICAgICAhaXNJbmhlcml0ZWQgJiYKKyAgICAgICAgIW1hcmtl
ZERvbnRCaW5kOworCisgICAgICBpZiAoc2hvdWxkQXV0b0JpbmQpIHsKKyAgICAgICAgaWYgKCFw
cm90by5fX3JlYWN0QXV0b0JpbmRNYXApIHsKKyAgICAgICAgICBwcm90by5fX3JlYWN0QXV0b0Jp
bmRNYXAgPSB7fTsKKyAgICAgICAgfQorICAgICAgICBwcm90by5fX3JlYWN0QXV0b0JpbmRNYXBb
bmFtZV0gPSBwcm9wZXJ0eTsKKyAgICAgICAgcHJvdG9bbmFtZV0gPSBwcm9wZXJ0eTsKKyAgICAg
IH0gZWxzZSB7CisgICAgICAgIGlmIChpc0luaGVyaXRlZCkgeworICAgICAgICAgIC8vIEZvciBt
ZXRob2RzIHdoaWNoIGFyZSBkZWZpbmVkIG1vcmUgdGhhbiBvbmNlLCBjYWxsIHRoZSBleGlzdGlu
ZworICAgICAgICAgIC8vIG1ldGhvZHMgYmVmb3JlIGNhbGxpbmcgdGhlIG5ldyBwcm9wZXJ0eS4K
KyAgICAgICAgICBwcm90b1tuYW1lXSA9IGNyZWF0ZUNoYWluZWRGdW5jdGlvbihwcm90b1tuYW1l
XSwgcHJvcGVydHkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHByb3RvW25hbWVdID0g
cHJvcGVydHk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworLyoqCisgKiBD
cmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIHR3byBmdW5jdGlvbnMgYW5kIGlnbm9yZXMg
dGhlaXIgcmV0dXJuIHZhbGVzLgorICoKKyAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uZSBGdW5jdGlv
biB0byBpbnZva2UgZmlyc3QuCisgKiBAcGFyYW0ge2Z1bmN0aW9ufSB0d28gRnVuY3Rpb24gdG8g
aW52b2tlIHNlY29uZC4KKyAqIEByZXR1cm4ge2Z1bmN0aW9ufSBGdW5jdGlvbiB0aGF0IGludm9r
ZXMgdGhlIHR3byBhcmd1bWVudCBmdW5jdGlvbnMuCisgKiBAcHJpdmF0ZQorICovCitmdW5jdGlv
biBjcmVhdGVDaGFpbmVkRnVuY3Rpb24ob25lLCB0d28pIHsKKyAgcmV0dXJuIGZ1bmN0aW9uIGNo
YWluZWRGdW5jdGlvbigpIHsKKyAgICBvbmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICB0
d28uYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgfTsKK30KKworLyoqCisgKiBgUmVhY3RDb21w
b3NpdGVDb21wb25lbnRgIG1haW50YWlucyBhbiBhdXhpbGlhcnkgbGlmZSBjeWNsZSBzdGF0ZSBp
bgorICogYHRoaXMuX2NvbXBvc2l0ZUxpZmVDeWNsZVN0YXRlYCAod2hpY2ggY2FuIGJlIG51bGwp
LgorICoKKyAqIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGxpZmUgY3ljbGUgc3RhdGUgbWFp
bnRhaW5lZCBieSBgUmVhY3RDb21wb25lbnRgIGluCisgKiBgdGhpcy5fbGlmZUN5Y2xlU3RhdGVg
LiBUaGUgZm9sbG93aW5nIGRpYWdyYW0gc2hvd3MgaG93IHRoZSBzdGF0ZXMgb3ZlcmxhcCBpbgor
ICogdGltZS4gVGhlcmUgYXJlIHRpbWVzIHdoZW4gdGhlIENvbXBvc2l0ZUxpZmVDeWNsZSBpcyBu
dWxsIC0gYXQgdGhvc2UgdGltZXMgaXQKKyAqIGlzIG9ubHkgbWVhbmluZ2Z1bCB0byBsb29rIGF0
IENvbXBvbmVudExpZmVDeWNsZSBhbG9uZS4KKyAqCisgKiBUb3AgUm93OiBSZWFjdENvbXBvbmVu
dC5Db21wb25lbnRMaWZlQ3ljbGUKKyAqIExvdyBSb3c6IFJlYWN0Q29tcG9uZW50LkNvbXBvc2l0
ZUxpZmVDeWNsZQorICoKKyAqICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSsKKyAqIHwgIFVOICAgfCAgICAgICAg
ICAgICAgICAgICAgTU9VTlRFRCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBVTiAgIHwK
KyAqIHxNT1VOVEVEfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgTU9VTlRFRHwKKyAqICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSsKKyAqIHwgICAgICAgXi0t
LS0tLS0tKyAgICstLS0tLS0rICAgKy0tLS0tLSsgICArLS0tLS0tKyAgICstLS0tLS0tLV4gICAg
ICAgIHwKKyAqIHwgICAgICAgfCAgICAgICAgfCAgIHwgICAgICB8ICAgfCAgICAgIHwgICB8ICAg
ICAgfCAgIHwgICAgICAgIHwgICAgICAgIHwKKyAqIHwgICAgMC0tfE1PVU5USU5HfC0wLXxSRUNF
SVZ8LTAtfFJFQ0VJVnwtMC18UkVDRUlWfC0wLXwgICBVTiAgIHwtLS0+MCAgIHwKKyAqIHwgICAg
ICAgfCAgICAgICAgfCAgIHxQUk9QUyB8ICAgfCBQUk9QU3wgICB8IFNUQVRFfCAgIHxNT1VOVElO
R3wgICAgICAgIHwKKyAqIHwgICAgICAgfCAgICAgICAgfCAgIHwgICAgICB8ICAgfCAgICAgIHwg
ICB8ICAgICAgfCAgIHwgICAgICAgIHwgICAgICAgIHwKKyAqIHwgICAgICAgfCAgICAgICAgfCAg
IHwgICAgICB8ICAgfCAgICAgIHwgICB8ICAgICAgfCAgIHwgICAgICAgIHwgICAgICAgIHwKKyAq
IHwgICAgICAgKy0tLS0tLS0tKyAgICstLS0tLS0rICAgKy0tLS0tLSsgICArLS0tLS0tKyAgICst
LS0tLS0tLSsgICAgICAgIHwKKyAqIHwgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgIHwKKyAqICstLS0tLS0tKy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t
LSsKKyAqLwordmFyIENvbXBvc2l0ZUxpZmVDeWNsZSA9IGtleU1pcnJvcih7CisgIC8qKgorICAg
KiBDb21wb25lbnRzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIG1vdW50ZWQgcmVzcG9uZCB0byBz
dGF0ZSBjaGFuZ2VzCisgICAqIGRpZmZlcmVudGx5LgorICAgKi8KKyAgTU9VTlRJTkc6IG51bGws
CisgIC8qKgorICAgKiBDb21wb25lbnRzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHVubW91bnRl
ZCBhcmUgZ3VhcmRlZCBhZ2FpbnN0IHN0YXRlCisgICAqIGNoYW5nZXMuCisgICAqLworICBVTk1P
VU5USU5HOiBudWxsLAorICAvKioKKyAgICogQ29tcG9uZW50cyB0aGF0IGFyZSBtb3VudGVkIGFu
ZCByZWNlaXZpbmcgbmV3IHByb3BzIHJlc3BvbmQgdG8gc3RhdGUKKyAgICogY2hhbmdlcyBkaWZm
ZXJlbnRseS4KKyAgICovCisgIFJFQ0VJVklOR19QUk9QUzogbnVsbCwKKyAgLyoqCisgICAqIENv
bXBvbmVudHMgdGhhdCBhcmUgbW91bnRlZCBhbmQgcmVjZWl2aW5nIG5ldyBzdGF0ZSBhcmUgZ3Vh
cmRlZCBhZ2FpbnN0CisgICAqIGFkZGl0aW9uYWwgc3RhdGUgY2hhbmdlcy4KKyAgICovCisgIFJF
Q0VJVklOR19TVEFURTogbnVsbAorfSk7CisKKy8qKgorICogQGxlbmRzIHtSZWFjdENvbXBvc2l0
ZUNvbXBvbmVudC5wcm90b3R5cGV9CisgKi8KK3ZhciBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudE1p
eGluID0geworCisgIC8qKgorICAgKiBCYXNlIGNvbnN0cnVjdG9yIGZvciBhbGwgY29tcG9zaXRl
IGNvbXBvbmVudC4KKyAgICoKKyAgICogQHBhcmFtIHs/b2JqZWN0fSBpbml0aWFsUHJvcHMKKyAg
ICogQHBhcmFtIHsqfSBjaGlsZHJlbgorICAgKiBAZmluYWwKKyAgICogQGludGVybmFsCisgICAq
LworICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uKGluaXRpYWxQcm9wcywgY2hpbGRyZW4pIHsKKyAgICAv
LyBDaGlsZHJlbiBjYW4gYmUgZWl0aGVyIGFuIGFycmF5IG9yIG1vcmUgdGhhbiBvbmUgYXJndW1l
bnQKKyAgICBSZWFjdENvbXBvbmVudC5NaXhpbi5jb25zdHJ1Y3QuYXBwbHkodGhpcywgYXJndW1l
bnRzKTsKKyAgICB0aGlzLnN0YXRlID0gbnVsbDsKKyAgICB0aGlzLl9wZW5kaW5nU3RhdGUgPSBu
dWxsOworICAgIHRoaXMuX2NvbXBvc2l0ZUxpZmVDeWNsZVN0YXRlID0gbnVsbDsKKyAgfSwKKwor
ICAvKioKKyAgICogQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoaXMgY29tcG9zaXRlIGNvbXBvbmVu
dCBpcyBtb3VudGVkLgorICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIG1vdW50ZWQsIGZh
bHNlIG90aGVyd2lzZS4KKyAgICogQHByb3RlY3RlZAorICAgKiBAZmluYWwKKyAgICovCisgIGlz
TW91bnRlZDogZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFJlYWN0Q29tcG9uZW50Lk1peGluLmlz
TW91bnRlZC5jYWxsKHRoaXMpICYmCisgICAgICB0aGlzLl9jb21wb3NpdGVMaWZlQ3ljbGVTdGF0
ZSAhPT0gQ29tcG9zaXRlTGlmZUN5Y2xlLk1PVU5USU5HOworICB9LAorCisgIC8qKgorICAgKiBJ
bml0aWFsaXplcyB0aGUgY29tcG9uZW50LCByZW5kZXJzIG1hcmt1cCwgYW5kIHJlZ2lzdGVycyBl
dmVudCBsaXN0ZW5lcnMuCisgICAqCisgICAqIEBwYXJhbSB7c3RyaW5nfSByb290SUQgRE9NIElE
IG9mIHRoZSByb290IG5vZGUuCisgICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlv
bn0gdHJhbnNhY3Rpb24KKyAgICogQHJldHVybiB7P3N0cmluZ30gUmVuZGVyZWQgbWFya3VwIHRv
IGJlIGluc2VydGVkIGludG8gdGhlIERPTS4KKyAgICogQGZpbmFsCisgICAqIEBpbnRlcm5hbAor
ICAgKi8KKyAgbW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uKHJvb3RJRCwgdHJhbnNhY3Rpb24pIHsK
KyAgICBSZWFjdENvbXBvbmVudC5NaXhpbi5tb3VudENvbXBvbmVudC5jYWxsKHRoaXMsIHJvb3RJ
RCwgdHJhbnNhY3Rpb24pOworICAgIHRoaXMuX2NvbXBvc2l0ZUxpZmVDeWNsZVN0YXRlID0gQ29t
cG9zaXRlTGlmZUN5Y2xlLk1PVU5USU5HOworCisgICAgdGhpcy5fZGVmYXVsdFByb3BzID0gdGhp
cy5nZXREZWZhdWx0UHJvcHMgPyB0aGlzLmdldERlZmF1bHRQcm9wcygpIDogbnVsbDsKKyAgICB0
aGlzLl9wcm9jZXNzUHJvcHModGhpcy5wcm9wcyk7CisKKyAgICBpZiAodGhpcy5fX3JlYWN0QXV0
b0JpbmRNYXApIHsKKyAgICAgIHRoaXMuX2JpbmRBdXRvQmluZE1ldGhvZHMoKTsKKyAgICB9CisK
KyAgICB0aGlzLnN0YXRlID0gdGhpcy5nZXRJbml0aWFsU3RhdGUgPyB0aGlzLmdldEluaXRpYWxT
dGF0ZSgpIDogbnVsbDsKKyAgICB0aGlzLl9wZW5kaW5nU3RhdGUgPSBudWxsOworICAgIHRoaXMu
X3BlbmRpbmdGb3JjZVVwZGF0ZSA9IGZhbHNlOworCisgICAgaWYgKHRoaXMuY29tcG9uZW50V2ls
bE1vdW50KSB7CisgICAgICB0aGlzLmNvbXBvbmVudFdpbGxNb3VudCgpOworICAgICAgLy8gV2hl
biBtb3VudGluZywgY2FsbHMgdG8gYHNldFN0YXRlYCBieSBgY29tcG9uZW50V2lsbE1vdW50YCB3
aWxsIHNldAorICAgICAgLy8gYHRoaXMuX3BlbmRpbmdTdGF0ZWAgd2l0aG91dCB0cmlnZ2VyaW5n
IGEgcmUtcmVuZGVyLgorICAgICAgaWYgKHRoaXMuX3BlbmRpbmdTdGF0ZSkgeworICAgICAgICB0
aGlzLnN0YXRlID0gdGhpcy5fcGVuZGluZ1N0YXRlOworICAgICAgICB0aGlzLl9wZW5kaW5nU3Rh
dGUgPSBudWxsOworICAgICAgfQorICAgIH0KKworICAgIHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50
ID0gdGhpcy5fcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50KCk7CisKKyAgICAvLyBEb25lIHdpdGgg
bW91bnRpbmcsIGBzZXRTdGF0ZWAgd2lsbCBub3cgdHJpZ2dlciBVSSBjaGFuZ2VzLgorICAgIHRo
aXMuX2NvbXBvc2l0ZUxpZmVDeWNsZVN0YXRlID0gbnVsbDsKKyAgICB2YXIgbWFya3VwID0gdGhp
cy5fcmVuZGVyZWRDb21wb25lbnQubW91bnRDb21wb25lbnQocm9vdElELCB0cmFuc2FjdGlvbik7
CisgICAgaWYgKHRoaXMuY29tcG9uZW50RGlkTW91bnQpIHsKKyAgICAgIHRyYW5zYWN0aW9uLmdl
dFJlYWN0T25ET01SZWFkeSgpLmVucXVldWUodGhpcywgdGhpcy5jb21wb25lbnREaWRNb3VudCk7
CisgICAgfQorICAgIHJldHVybiBtYXJrdXA7CisgIH0sCisKKyAgLyoqCisgICAqIFJlbGVhc2Vz
IGFueSByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IGBtb3VudENvbXBvbmVudGAuCisgICAqCisgICAq
IEBmaW5hbAorICAgKiBAaW50ZXJuYWwKKyAgICovCisgIHVubW91bnRDb21wb25lbnQ6IGZ1bmN0
aW9uKCkgeworICAgIHRoaXMuX2NvbXBvc2l0ZUxpZmVDeWNsZVN0YXRlID0gQ29tcG9zaXRlTGlm
ZUN5Y2xlLlVOTU9VTlRJTkc7CisgICAgaWYgKHRoaXMuY29tcG9uZW50V2lsbFVubW91bnQpIHsK
KyAgICAgIHRoaXMuY29tcG9uZW50V2lsbFVubW91bnQoKTsKKyAgICB9CisgICAgdGhpcy5fY29t
cG9zaXRlTGlmZUN5Y2xlU3RhdGUgPSBudWxsOworCisgICAgdGhpcy5fZGVmYXVsdFByb3BzID0g
bnVsbDsKKworICAgIFJlYWN0Q29tcG9uZW50Lk1peGluLnVubW91bnRDb21wb25lbnQuY2FsbCh0
aGlzKTsKKyAgICB0aGlzLl9yZW5kZXJlZENvbXBvbmVudC51bm1vdW50Q29tcG9uZW50KCk7Cisg
ICAgdGhpcy5fcmVuZGVyZWRDb21wb25lbnQgPSBudWxsOworCisgICAgaWYgKHRoaXMucmVmcykg
eworICAgICAgdGhpcy5yZWZzID0gbnVsbDsKKyAgICB9CisKKyAgICAvLyBTb21lIGV4aXN0aW5n
IGNvbXBvbmVudHMgcmVseSBvbiB0aGlzLnByb3BzIGV2ZW4gYWZ0ZXIgdGhleSd2ZSBiZWVuCisg
ICAgLy8gZGVzdHJveWVkIChpbiBldmVudCBoYW5kbGVycykuCisgICAgLy8gVE9ETzogdGhpcy5w
cm9wcyA9IG51bGw7CisgICAgLy8gVE9ETzogdGhpcy5zdGF0ZSA9IG51bGw7CisgIH0sCisKKyAg
LyoqCisgICAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHN0YXRlLiBBbHdheXMgdXNlIHRoaXMgb3Ig
YHJlcGxhY2VTdGF0ZWAgdG8gbXV0YXRlCisgICAqIHN0YXRlLiBZb3Ugc2hvdWxkIHRyZWF0IGB0
aGlzLnN0YXRlYCBhcyBpbW11dGFibGUuCisgICAqCisgICAqIFRoZXJlIGlzIG5vIGd1YXJhbnRl
ZSB0aGF0IGB0aGlzLnN0YXRlYCB3aWxsIGJlIGltbWVkaWF0ZWx5IHVwZGF0ZWQsIHNvCisgICAq
IGFjY2Vzc2luZyBgdGhpcy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0
dXJuIHRoZSBvbGQgdmFsdWUuCisgICAqCisgICAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0
IGNhbGxzIHRvIGBzZXRTdGF0ZWAgd2lsbCBydW4gc3luY2hyb25vdXNseSwKKyAgICogYXMgdGhl
eSBtYXkgZXZlbnR1YWxseSBiZSBiYXRjaGVkIHRvZ2V0aGVyLiAgWW91IGNhbiBwcm92aWRlIGFu
IG9wdGlvbmFsCisgICAqIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZSBj
YWxsIHRvIHNldFN0YXRlIGlzIGFjdHVhbGx5CisgICAqIGNvbXBsZXRlZC4KKyAgICoKKyAgICog
QHBhcmFtIHtvYmplY3R9IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVy
Z2VkIHdpdGggc3RhdGUuCisgICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQg
YWZ0ZXIgc3RhdGUgaXMgdXBkYXRlZC4KKyAgICogQGZpbmFsCisgICAqIEBwcm90ZWN0ZWQKKyAg
ICovCisgIHNldFN0YXRlOiBmdW5jdGlvbihwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrKSB7CisgICAg
Ly8gTWVyZ2Ugd2l0aCBgX3BlbmRpbmdTdGF0ZWAgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2Ugd2l0
aCBleGlzdGluZyBzdGF0ZS4KKyAgICB0aGlzLnJlcGxhY2VTdGF0ZSgKKyAgICAgIG1lcmdlKHRo
aXMuX3BlbmRpbmdTdGF0ZSB8fCB0aGlzLnN0YXRlLCBwYXJ0aWFsU3RhdGUpLAorICAgICAgY2Fs
bGJhY2sKKyAgICApOworICB9LAorCisgIC8qKgorICAgKiBSZXBsYWNlcyBhbGwgb2YgdGhlIHN0
YXRlLiBBbHdheXMgdXNlIHRoaXMgb3IgYHNldFN0YXRlYCB0byBtdXRhdGUgc3RhdGUuCisgICAq
IFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS4KKyAgICoKKyAgICog
VGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRl
bHkgdXBkYXRlZCwgc28KKyAgICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5n
IHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS4KKyAgICoKKyAgICogQHBhcmFt
IHtvYmplY3R9IGNvbXBsZXRlU3RhdGUgTmV4dCBzdGF0ZS4KKyAgICogQHBhcmFtIHs/ZnVuY3Rp
b259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBzdGF0ZSBpcyB1cGRhdGVkLgorICAgKiBAZmluYWwK
KyAgICogQHByb3RlY3RlZAorICAgKi8KKyAgcmVwbGFjZVN0YXRlOiBmdW5jdGlvbihjb21wbGV0
ZVN0YXRlLCBjYWxsYmFjaykgeworICAgIHZhbGlkYXRlTGlmZUN5Y2xlT25SZXBsYWNlU3RhdGUo
dGhpcyk7CisgICAgdGhpcy5fcGVuZGluZ1N0YXRlID0gY29tcGxldGVTdGF0ZTsKKyAgICBSZWFj
dFVwZGF0ZXMuZW5xdWV1ZVVwZGF0ZSh0aGlzLCBjYWxsYmFjayk7CisgIH0sCisKKyAgLyoqCisg
ICAqIFByb2Nlc3NlcyBwcm9wcyBieSBzZXR0aW5nIGRlZmF1bHQgdmFsdWVzIGZvciB1bnNwZWNp
ZmllZCBwcm9wcyBhbmQKKyAgICogYXNzZXJ0aW5nIHRoYXQgdGhlIHByb3BzIGFyZSB2YWxpZC4K
KyAgICoKKyAgICogQHBhcmFtIHtvYmplY3R9IHByb3BzCisgICAqIEBwcml2YXRlCisgICAqLwor
ICBfcHJvY2Vzc1Byb3BzOiBmdW5jdGlvbihwcm9wcykgeworICAgIHZhciBwcm9wTmFtZTsKKyAg
ICB2YXIgZGVmYXVsdFByb3BzID0gdGhpcy5fZGVmYXVsdFByb3BzOworICAgIGZvciAocHJvcE5h
bWUgaW4gZGVmYXVsdFByb3BzKSB7CisgICAgICBpZiAoIShwcm9wTmFtZSBpbiBwcm9wcykpIHsK
KyAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTsKKyAgICAg
IH0KKyAgICB9CisgICAgdmFyIHByb3BUeXBlcyA9IHRoaXMuY29uc3RydWN0b3IucHJvcFR5cGVz
OworICAgIGlmIChwcm9wVHlwZXMpIHsKKyAgICAgIHZhciBjb21wb25lbnROYW1lID0gdGhpcy5j
b25zdHJ1Y3Rvci5kaXNwbGF5TmFtZTsKKyAgICAgIGZvciAocHJvcE5hbWUgaW4gcHJvcFR5cGVz
KSB7CisgICAgICAgIHZhciBjaGVja1Byb3AgPSBwcm9wVHlwZXNbcHJvcE5hbWVdOworICAgICAg
ICBpZiAoY2hlY2tQcm9wKSB7CisgICAgICAgICAgY2hlY2tQcm9wKHByb3BzLCBwcm9wTmFtZSwg
Y29tcG9uZW50TmFtZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0sCisKKyAgcGVy
Zm9ybVVwZGF0ZUlmTmVjZXNzYXJ5OiBmdW5jdGlvbigpIHsKKyAgICB2YXIgY29tcG9zaXRlTGlm
ZUN5Y2xlU3RhdGUgPSB0aGlzLl9jb21wb3NpdGVMaWZlQ3ljbGVTdGF0ZTsKKyAgICAvLyBEbyBu
b3QgdHJpZ2dlciBhIHN0YXRlIHRyYW5zaXRpb24gaWYgd2UgYXJlIGluIHRoZSBtaWRkbGUgb2Yg
bW91bnRpbmcgb3IKKyAgICAvLyByZWNlaXZpbmcgcHJvcHMgYmVjYXVzZSBib3RoIG9mIHRob3Nl
IHdpbGwgYWxyZWFkeSBiZSBkb2luZyB0aGlzLgorICAgIGlmIChjb21wb3NpdGVMaWZlQ3ljbGVT
dGF0ZSA9PT0gQ29tcG9zaXRlTGlmZUN5Y2xlLk1PVU5USU5HIHx8CisgICAgICAgIGNvbXBvc2l0
ZUxpZmVDeWNsZVN0YXRlID09PSBDb21wb3NpdGVMaWZlQ3ljbGUuUkVDRUlWSU5HX1BST1BTKSB7
CisgICAgICByZXR1cm47CisgICAgfQorICAgIFJlYWN0Q29tcG9uZW50Lk1peGluLnBlcmZvcm1V
cGRhdGVJZk5lY2Vzc2FyeS5jYWxsKHRoaXMpOworICB9LAorCisgIC8qKgorICAgKiBJZiBhbnkg
b2YgYF9wZW5kaW5nUHJvcHNgLCBgX3BlbmRpbmdTdGF0ZWAsIG9yIGBfcGVuZGluZ0ZvcmNlVXBk
YXRlYCBpcworICAgKiBzZXQsIHVwZGF0ZSB0aGUgY29tcG9uZW50LgorICAgKgorICAgKiBAcGFy
YW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uCisgICAqIEBpbnRlcm5h
bAorICAgKi8KKyAgX3BlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeTogZnVuY3Rpb24odHJhbnNhY3Rp
b24pIHsKKyAgICBpZiAodGhpcy5fcGVuZGluZ1Byb3BzID09IG51bGwgJiYKKyAgICAgICAgdGhp
cy5fcGVuZGluZ1N0YXRlID09IG51bGwgJiYKKyAgICAgICAgIXRoaXMuX3BlbmRpbmdGb3JjZVVw
ZGF0ZSkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciBuZXh0UHJvcHMgPSB0aGlz
LnByb3BzOworICAgIGlmICh0aGlzLl9wZW5kaW5nUHJvcHMgIT0gbnVsbCkgeworICAgICAgbmV4
dFByb3BzID0gdGhpcy5fcGVuZGluZ1Byb3BzOworICAgICAgdGhpcy5fcHJvY2Vzc1Byb3BzKG5l
eHRQcm9wcyk7CisgICAgICB0aGlzLl9wZW5kaW5nUHJvcHMgPSBudWxsOworCisgICAgICB0aGlz
Ll9jb21wb3NpdGVMaWZlQ3ljbGVTdGF0ZSA9IENvbXBvc2l0ZUxpZmVDeWNsZS5SRUNFSVZJTkdf
UFJPUFM7CisgICAgICBpZiAodGhpcy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKSB7CisgICAg
ICAgIHRoaXMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMsIHRyYW5zYWN0aW9u
KTsKKyAgICAgIH0KKyAgICB9CisKKyAgICB0aGlzLl9jb21wb3NpdGVMaWZlQ3ljbGVTdGF0ZSA9
IENvbXBvc2l0ZUxpZmVDeWNsZS5SRUNFSVZJTkdfU1RBVEU7CisKKyAgICB2YXIgbmV4dFN0YXRl
ID0gdGhpcy5fcGVuZGluZ1N0YXRlIHx8IHRoaXMuc3RhdGU7CisgICAgdGhpcy5fcGVuZGluZ1N0
YXRlID0gbnVsbDsKKworICAgIGlmICh0aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGUgfHwKKyAgICAg
ICAgIXRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlIHx8CisgICAgICAgIHRoaXMuc2hvdWxkQ29t
cG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSkgeworICAgICAgdGhpcy5fcGVuZGlu
Z0ZvcmNlVXBkYXRlID0gZmFsc2U7CisgICAgICAvLyBXaWxsIHNldCBgdGhpcy5wcm9wc2AgYW5k
IGB0aGlzLnN0YXRlYC4KKyAgICAgIHRoaXMuX3BlcmZvcm1Db21wb25lbnRVcGRhdGUobmV4dFBy
b3BzLCBuZXh0U3RhdGUsIHRyYW5zYWN0aW9uKTsKKyAgICB9IGVsc2UgeworICAgICAgLy8gSWYg
aXQncyBkZXRlcm1pbmVkIHRoYXQgYSBjb21wb25lbnQgc2hvdWxkIG5vdCB1cGRhdGUsIHdlIHN0
aWxsIHdhbnQKKyAgICAgIC8vIHRvIHNldCBwcm9wcyBhbmQgc3RhdGUuCisgICAgICB0aGlzLnBy
b3BzID0gbmV4dFByb3BzOworICAgICAgdGhpcy5zdGF0ZSA9IG5leHRTdGF0ZTsKKyAgICB9CisK
KyAgICB0aGlzLl9jb21wb3NpdGVMaWZlQ3ljbGVTdGF0ZSA9IG51bGw7CisgIH0sCisKKyAgLyoq
CisgICAqIE1lcmdlcyBuZXcgcHJvcHMgYW5kIHN0YXRlLCBub3RpZmllcyBkZWxlZ2F0ZSBtZXRo
b2RzIG9mIHVwZGF0ZSBhbmQKKyAgICogcGVyZm9ybXMgdXBkYXRlLgorICAgKgorICAgKiBAcGFy
YW0ge29iamVjdH0gbmV4dFByb3BzIE5leHQgb2JqZWN0IHRvIHNldCBhcyBwcm9wZXJ0aWVzLgor
ICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRTdGF0ZSBOZXh0IG9iamVjdCB0byBzZXQgYXMgc3Rh
dGUuCisgICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb24K
KyAgICogQHByaXZhdGUKKyAgICovCisgIF9wZXJmb3JtQ29tcG9uZW50VXBkYXRlOiBmdW5jdGlv
bihuZXh0UHJvcHMsIG5leHRTdGF0ZSwgdHJhbnNhY3Rpb24pIHsKKyAgICB2YXIgcHJldlByb3Bz
ID0gdGhpcy5wcm9wczsKKyAgICB2YXIgcHJldlN0YXRlID0gdGhpcy5zdGF0ZTsKKworICAgIGlm
ICh0aGlzLmNvbXBvbmVudFdpbGxVcGRhdGUpIHsKKyAgICAgIHRoaXMuY29tcG9uZW50V2lsbFVw
ZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSwgdHJhbnNhY3Rpb24pOworICAgIH0KKworICAgIHRo
aXMucHJvcHMgPSBuZXh0UHJvcHM7CisgICAgdGhpcy5zdGF0ZSA9IG5leHRTdGF0ZTsKKworICAg
IHRoaXMudXBkYXRlQ29tcG9uZW50KHRyYW5zYWN0aW9uLCBwcmV2UHJvcHMsIHByZXZTdGF0ZSk7
CisKKyAgICBpZiAodGhpcy5jb21wb25lbnREaWRVcGRhdGUpIHsKKyAgICAgIHRyYW5zYWN0aW9u
LmdldFJlYWN0T25ET01SZWFkeSgpLmVucXVldWUoCisgICAgICAgIHRoaXMsCisgICAgICAgIHRo
aXMuY29tcG9uZW50RGlkVXBkYXRlLmJpbmQodGhpcywgcHJldlByb3BzLCBwcmV2U3RhdGUpCisg
ICAgICApOworICAgIH0KKyAgfSwKKworICAvKioKKyAgICogVXBkYXRlcyB0aGUgY29tcG9uZW50
J3MgY3VycmVudGx5IG1vdW50ZWQgRE9NIHJlcHJlc2VudGF0aW9uLgorICAgKgorICAgKiBCeSBk
ZWZhdWx0LCB0aGlzIGltcGxlbWVudHMgUmVhY3QncyByZW5kZXJpbmcgYW5kIHJlY29uY2lsaWF0
aW9uIGFsZ29yaXRobS4KKyAgICogU29waGlzdGljYXRlZCBjbGllbnRzIG1heSB3aXNoIHRvIG92
ZXJyaWRlIHRoaXMuCisgICAqCisgICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlv
bn0gdHJhbnNhY3Rpb24KKyAgICogQHBhcmFtIHtvYmplY3R9IHByZXZQcm9wcworICAgKiBAcGFy
YW0gez9vYmplY3R9IHByZXZTdGF0ZQorICAgKiBAaW50ZXJuYWwKKyAgICogQG92ZXJyaWRhYmxl
CisgICAqLworICB1cGRhdGVDb21wb25lbnQ6IGZ1bmN0aW9uKHRyYW5zYWN0aW9uLCBwcmV2UHJv
cHMsIHByZXZTdGF0ZSkgeworICAgIFJlYWN0Q29tcG9uZW50Lk1peGluLnVwZGF0ZUNvbXBvbmVu
dC5jYWxsKHRoaXMsIHRyYW5zYWN0aW9uLCBwcmV2UHJvcHMpOworICAgIHZhciBjdXJyZW50Q29t
cG9uZW50ID0gdGhpcy5fcmVuZGVyZWRDb21wb25lbnQ7CisgICAgdmFyIG5leHRDb21wb25lbnQg
PSB0aGlzLl9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQoKTsKKyAgICBpZiAoY3VycmVudENvbXBv
bmVudC5jb25zdHJ1Y3RvciA9PT0gbmV4dENvbXBvbmVudC5jb25zdHJ1Y3RvcikgeworICAgICAg
Y3VycmVudENvbXBvbmVudC5yZWNlaXZlUHJvcHMobmV4dENvbXBvbmVudC5wcm9wcywgdHJhbnNh
Y3Rpb24pOworICAgIH0gZWxzZSB7CisgICAgICAvLyBUaGVzZSB0d28gSURzIGFyZSBhY3R1YWxs
eSB0aGUgc2FtZSEgQnV0IG5vdGhpbmcgc2hvdWxkIHJlbHkgb24gdGhhdC4KKyAgICAgIHZhciB0
aGlzSUQgPSB0aGlzLl9yb290Tm9kZUlEOworICAgICAgdmFyIGN1cnJlbnRDb21wb25lbnRJRCA9
IGN1cnJlbnRDb21wb25lbnQuX3Jvb3ROb2RlSUQ7CisgICAgICBjdXJyZW50Q29tcG9uZW50LnVu
bW91bnRDb21wb25lbnQoKTsKKyAgICAgIHZhciBuZXh0TWFya3VwID0gbmV4dENvbXBvbmVudC5t
b3VudENvbXBvbmVudCh0aGlzSUQsIHRyYW5zYWN0aW9uKTsKKyAgICAgIFJlYWN0Q29tcG9uZW50
LkRPTUlET3BlcmF0aW9ucy5kYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cEJ5SUQoCisg
ICAgICAgIGN1cnJlbnRDb21wb25lbnRJRCwKKyAgICAgICAgbmV4dE1hcmt1cAorICAgICAgKTsK
KyAgICAgIHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50ID0gbmV4dENvbXBvbmVudDsKKyAgICB9Cisg
IH0sCisKKyAgLyoqCisgICAqIEZvcmNlcyBhbiB1cGRhdGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUg
aW52b2tlZCB3aGVuIGl0IGlzIGtub3duIHdpdGgKKyAgICogY2VydGFpbnR5IHRoYXQgd2UgYXJl
ICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uCisgICAqCisgICAqIFlvdSBtYXkgd2FudCB0
byBjYWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNvbWUgZGVlcGVyIGFzcGVjdCBvZiB0aGUK
KyAgICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5v
dCBjYWxsZWQuCisgICAqCisgICAqIFRoaXMgd2lsbCBub3QgaW52b2tlIGBzaG91bGRVcGRhdGVD
b21wb25lbnRgLCBidXQgaXQgd2lsbCBpbnZva2UKKyAgICogYGNvbXBvbmVudFdpbGxVcGRhdGVg
IGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC4KKyAgICoKKyAgICogQHBhcmFtIHs/ZnVuY3Rpb259
IGNhbGxiYWNrIENhbGxlZCBhZnRlciB1cGRhdGUgaXMgY29tcGxldGUuCisgICAqIEBmaW5hbAor
ICAgKiBAcHJvdGVjdGVkCisgICAqLworICBmb3JjZVVwZGF0ZTogZnVuY3Rpb24oY2FsbGJhY2sp
IHsKKyAgICB2YXIgY29tcG9zaXRlTGlmZUN5Y2xlU3RhdGUgPSB0aGlzLl9jb21wb3NpdGVMaWZl
Q3ljbGVTdGF0ZTsKKyAgICBpbnZhcmlhbnQoCisgICAgICB0aGlzLmlzTW91bnRlZCgpIHx8Cisg
ICAgICAgIGNvbXBvc2l0ZUxpZmVDeWNsZVN0YXRlID09PSBDb21wb3NpdGVMaWZlQ3ljbGUuTU9V
TlRJTkcsCisgICAgICAnZm9yY2VVcGRhdGUoLi4uKTogQ2FuIG9ubHkgZm9yY2UgYW4gdXBkYXRl
IG9uIG1vdW50ZWQgb3IgbW91bnRpbmcgJyArCisgICAgICAgICdjb21wb25lbnRzLicKKyAgICAp
OworICAgIGludmFyaWFudCgKKyAgICAgIGNvbXBvc2l0ZUxpZmVDeWNsZVN0YXRlICE9PSBDb21w
b3NpdGVMaWZlQ3ljbGUuUkVDRUlWSU5HX1NUQVRFICYmCisgICAgICBjb21wb3NpdGVMaWZlQ3lj
bGVTdGF0ZSAhPT0gQ29tcG9zaXRlTGlmZUN5Y2xlLlVOTU9VTlRJTkcsCisgICAgICAnZm9yY2VV
cGRhdGUoLi4uKTogQ2Fubm90IGZvcmNlIGFuIHVwZGF0ZSB3aGlsZSB1bm1vdW50aW5nIGNvbXBv
bmVudCAnICsKKyAgICAgICdvciBkdXJpbmcgYW4gZXhpc3Rpbmcgc3RhdGUgdHJhbnNpdGlvbiAo
c3VjaCBhcyB3aXRoaW4gYHJlbmRlcmApLicKKyAgICApOworICAgIHRoaXMuX3BlbmRpbmdGb3Jj
ZVVwZGF0ZSA9IHRydWU7CisgICAgUmVhY3RVcGRhdGVzLmVucXVldWVVcGRhdGUodGhpcywgY2Fs
bGJhY2spOworICB9LAorCisgIC8qKgorICAgKiBAcHJpdmF0ZQorICAgKi8KKyAgX3JlbmRlclZh
bGlkYXRlZENvbXBvbmVudDogZnVuY3Rpb24oKSB7CisgICAgdmFyIHJlbmRlcmVkQ29tcG9uZW50
OworICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPSB0aGlzOworICAgIHRyeSB7CisgICAg
ICByZW5kZXJlZENvbXBvbmVudCA9IHRoaXMucmVuZGVyKCk7CisgICAgfSBjYXRjaCAoZXJyb3Ip
IHsKKyAgICAgIC8vIElFOCByZXF1aXJlcyBgY2F0Y2hgIGluIG9yZGVyIHRvIHVzZSBgZmluYWxs
eWAuCisgICAgICB0aHJvdyBlcnJvcjsKKyAgICB9IGZpbmFsbHkgeworICAgICAgUmVhY3RDdXJy
ZW50T3duZXIuY3VycmVudCA9IG51bGw7CisgICAgfQorICAgIGludmFyaWFudCgKKyAgICAgIFJl
YWN0Q29tcG9uZW50LmlzVmFsaWRDb21wb25lbnQocmVuZGVyZWRDb21wb25lbnQpLAorICAgICAg
JyVzLnJlbmRlcigpOiBBIHZhbGlkIFJlYWN0Q29tcG9uZW50IG11c3QgYmUgcmV0dXJuZWQuJywK
KyAgICAgIHRoaXMuY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgJ1JlYWN0Q29tcG9zaXRlQ29t
cG9uZW50JworICAgICk7CisgICAgcmV0dXJuIHJlbmRlcmVkQ29tcG9uZW50OworICB9LAorCisg
IC8qKgorICAgKiBAcHJpdmF0ZQorICAgKi8KKyAgX2JpbmRBdXRvQmluZE1ldGhvZHM6IGZ1bmN0
aW9uKCkgeworICAgIGZvciAodmFyIGF1dG9CaW5kS2V5IGluIHRoaXMuX19yZWFjdEF1dG9CaW5k
TWFwKSB7CisgICAgICBpZiAoIXRoaXMuX19yZWFjdEF1dG9CaW5kTWFwLmhhc093blByb3BlcnR5
KGF1dG9CaW5kS2V5KSkgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIHZhciBt
ZXRob2QgPSB0aGlzLl9fcmVhY3RBdXRvQmluZE1hcFthdXRvQmluZEtleV07CisgICAgICB0aGlz
W2F1dG9CaW5kS2V5XSA9IHRoaXMuX2JpbmRBdXRvQmluZE1ldGhvZChtZXRob2QpOworICAgIH0K
KyAgfSwKKworICAvKioKKyAgICogQmluZHMgYSBtZXRob2QgdG8gdGhlIGNvbXBvbmVudC4KKyAg
ICoKKyAgICogQHBhcmFtIHtmdW5jdGlvbn0gbWV0aG9kIE1ldGhvZCB0byBiZSBib3VuZC4KKyAg
ICogQHByaXZhdGUKKyAgICovCisgIF9iaW5kQXV0b0JpbmRNZXRob2Q6IGZ1bmN0aW9uKG1ldGhv
ZCkgeworICAgIHZhciBjb21wb25lbnQgPSB0aGlzOworICAgIHZhciBib3VuZE1ldGhvZCA9IGZ1
bmN0aW9uKCkgeworICAgICAgcmV0dXJuIG1ldGhvZC5hcHBseShjb21wb25lbnQsIGFyZ3VtZW50
cyk7CisgICAgfTsKKyAgICBpZiAodHJ1ZSkgeworICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBj
b21wb25lbnQuY29uc3RydWN0b3IuZGlzcGxheU5hbWU7CisgICAgICB2YXIgX2JpbmQgPSBib3Vu
ZE1ldGhvZC5iaW5kOworICAgICAgYm91bmRNZXRob2QuYmluZCA9IGZ1bmN0aW9uKG5ld1RoaXMp
IHsKKyAgICAgICAgLy8gVXNlciBpcyB0cnlpbmcgdG8gYmluZCgpIGFuIGF1dG9ib3VuZCBtZXRo
b2Q7IHdlIGVmZmVjdGl2ZWx5IHdpbGwKKyAgICAgICAgLy8gaWdub3JlIHRoZSB2YWx1ZSBvZiAi
dGhpcyIgdGhhdCB0aGUgdXNlciBpcyB0cnlpbmcgdG8gdXNlLCBzbworICAgICAgICAvLyBsZXQn
cyB3YXJuLgorICAgICAgICBpZiAobmV3VGhpcyAhPT0gY29tcG9uZW50KSB7CisgICAgICAgICAg
Y29uc29sZS53YXJuKAorICAgICAgICAgICAgJ2JpbmQoKTogUmVhY3QgY29tcG9uZW50IG1ldGhv
ZHMgbWF5IG9ubHkgYmUgYm91bmQgdG8gdGhlICcgKworICAgICAgICAgICAgJ2NvbXBvbmVudCBp
bnN0YW5jZS4gU2VlICcgKyBjb21wb25lbnROYW1lCisgICAgICAgICAgKTsKKyAgICAgICAgfSBl
bHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7CisgICAgICAgICAgY29uc29sZS53YXJu
KAorICAgICAgICAgICAgJ2JpbmQoKTogWW91IGFyZSBiaW5kaW5nIGEgY29tcG9uZW50IG1ldGhv
ZCB0byB0aGUgY29tcG9uZW50LiAnICsKKyAgICAgICAgICAgICdSZWFjdCBkb2VzIHRoaXMgZm9y
IHlvdSBhdXRvbWF0aWNhbGx5IGluIGEgaGlnaC1wZXJmb3JtYW5jZSAnICsKKyAgICAgICAgICAg
ICd3YXksIHNvIHlvdSBjYW4gc2FmZWx5IHJlbW92ZSB0aGlzIGNhbGwuIFNlZSAnICsgY29tcG9u
ZW50TmFtZQorICAgICAgICAgICk7CisgICAgICAgICAgcmV0dXJuIGJvdW5kTWV0aG9kOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBfYmluZC5hcHBseShib3VuZE1ldGhvZCwgYXJndW1lbnRz
KTsKKyAgICAgIH07CisgICAgfQorICAgIHJldHVybiBib3VuZE1ldGhvZDsKKyAgfQorfTsKKwor
dmFyIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50QmFzZSA9IGZ1bmN0aW9uKCkge307CittaXhJbnRv
KFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50QmFzZSwgUmVhY3RDb21wb25lbnQuTWl4aW4pOworbWl4
SW50byhSZWFjdENvbXBvc2l0ZUNvbXBvbmVudEJhc2UsIFJlYWN0T3duZXIuTWl4aW4pOworbWl4
SW50byhSZWFjdENvbXBvc2l0ZUNvbXBvbmVudEJhc2UsIFJlYWN0UHJvcFRyYW5zZmVyZXIuTWl4
aW4pOworbWl4SW50byhSZWFjdENvbXBvc2l0ZUNvbXBvbmVudEJhc2UsIFJlYWN0Q29tcG9zaXRl
Q29tcG9uZW50TWl4aW4pOworCisvKioKKyAqIE1vZHVsZSBmb3IgY3JlYXRpbmcgY29tcG9zaXRl
IGNvbXBvbmVudHMuCisgKgorICogQGNsYXNzIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50CisgKiBA
ZXh0ZW5kcyBSZWFjdENvbXBvbmVudAorICogQGV4dGVuZHMgUmVhY3RPd25lcgorICogQGV4dGVu
ZHMgUmVhY3RQcm9wVHJhbnNmZXJlcgorICovCit2YXIgUmVhY3RDb21wb3NpdGVDb21wb25lbnQg
PSB7CisKKyAgTGlmZUN5Y2xlOiBDb21wb3NpdGVMaWZlQ3ljbGUsCisKKyAgQmFzZTogUmVhY3RD
b21wb3NpdGVDb21wb25lbnRCYXNlLAorCisgIC8qKgorICAgKiBDcmVhdGVzIGEgY29tcG9zaXRl
IGNvbXBvbmVudCBjbGFzcyBnaXZlbiBhIGNsYXNzIHNwZWNpZmljYXRpb24uCisgICAqCisgICAq
IEBwYXJhbSB7b2JqZWN0fSBzcGVjIENsYXNzIHNwZWNpZmljYXRpb24gKHdoaWNoIG11c3QgZGVm
aW5lIGByZW5kZXJgKS4KKyAgICogQHJldHVybiB7ZnVuY3Rpb259IENvbXBvbmVudCBjb25zdHJ1
Y3RvciBmdW5jdGlvbi4KKyAgICogQHB1YmxpYworICAgKi8KKyAgY3JlYXRlQ2xhc3M6IGZ1bmN0
aW9uKHNwZWMpIHsKKyAgICB2YXIgQ29uc3RydWN0b3IgPSBmdW5jdGlvbigpIHt9OworICAgIENv
bnN0cnVjdG9yLnByb3RvdHlwZSA9IG5ldyBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudEJhc2UoKTsK
KyAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcjsKKyAg
ICBtaXhTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3Rvciwgc3BlYyk7CisgICAgaW52YXJpYW50
KAorICAgICAgQ29uc3RydWN0b3IucHJvdG90eXBlLnJlbmRlciwKKyAgICAgICdjcmVhdGVDbGFz
cyguLi4pOiBDbGFzcyBzcGVjaWZpY2F0aW9uIG11c3QgaW1wbGVtZW50IGEgYHJlbmRlcmAgbWV0
aG9kLicKKyAgICApOworICAgIC8vIFJlZHVjZSB0aW1lIHNwZW50IGRvaW5nIGxvb2t1cHMgYnkg
c2V0dGluZyB0aGVzZSBvbiB0aGUgcHJvdG90eXBlLgorICAgIGZvciAodmFyIG1ldGhvZE5hbWUg
aW4gUmVhY3RDb21wb3NpdGVDb21wb25lbnRJbnRlcmZhY2UpIHsKKyAgICAgIGlmICghQ29uc3Ry
dWN0b3IucHJvdG90eXBlW21ldGhvZE5hbWVdKSB7CisgICAgICAgIENvbnN0cnVjdG9yLnByb3Rv
dHlwZVttZXRob2ROYW1lXSA9IG51bGw7CisgICAgICB9CisgICAgfQorCisgICAgdmFyIENvbnZl
bmllbmNlQ29uc3RydWN0b3IgPSBmdW5jdGlvbihwcm9wcywgY2hpbGRyZW4pIHsKKyAgICAgIHZh
ciBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpOworICAgICAgaW5zdGFuY2UuY29uc3RydWN0
LmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpOworICAgICAgcmV0dXJuIGluc3RhbmNlOworICAg
IH07CisgICAgQ29udmVuaWVuY2VDb25zdHJ1Y3Rvci5jb21wb25lbnRDb25zdHJ1Y3RvciA9IENv
bnN0cnVjdG9yOworICAgIENvbnZlbmllbmNlQ29uc3RydWN0b3Iub3JpZ2luYWxTcGVjID0gc3Bl
YzsKKyAgICByZXR1cm4gQ29udmVuaWVuY2VDb25zdHJ1Y3RvcjsKKyAgfSwKKworICAvKioKKyAg
ICogVE9ETzogRGVsZXRlIHRoaXMgd2hlbiBhbGwgY2FsbGVycyBoYXZlIGJlZW4gdXBkYXRlZCB0
byByZWx5IG9uIHRoaXMKKyAgICogYmVoYXZpb3IgYmVpbmcgdGhlIGRlZmF1bHQuCisgICAqCisg
ICAqIEJhY2t3YXJkcyBjb21wYXRpYmxlIHN0dWIgZm9yIHdoYXQgaXMgbm93IHRoZSBkZWZhdWx0
IGJlaGF2aW9yLgorICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXRob2QgTWV0aG9kIHRvIGJlIGJv
dW5kLgorICAgKiBAcHVibGljCisgICAqLworICBhdXRvQmluZDogZnVuY3Rpb24obWV0aG9kKSB7
CisgICAgaWYgKHRydWUpIHsKKyAgICAgIGNvbnNvbGUud2FybigKKyAgICAgICAgJ1JlYWN0LmF1
dG9CaW5kKCkgaXMgbm93IGRlcHJlY2F0ZWQuIEFsbCBSZWFjdCBjb21wb25lbnQgbWV0aG9kcyAn
ICsKKyAgICAgICAgJ2FyZSBhdXRvIGJvdW5kIGJ5IGRlZmF1bHQsIHNvIFJlYWN0LmF1dG9CaW5k
KCkgaXMgYSBuby1vcC4gSXQgJyArCisgICAgICAgICd3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5l
eHQgdmVyc2lvbiBvZiBSZWFjdCcKKyAgICAgICk7CisgICAgfQorICAgIHJldHVybiBtZXRob2Q7
CisgIH0KK307CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RDb21wb3NpdGVDb21wb25lbnQ7CisK
K30pKCkKK30seyIuL1JlYWN0Q29tcG9uZW50IjoyMiwiLi9SZWFjdEN1cnJlbnRPd25lciI6MjQs
Ii4vUmVhY3RPd25lciI6NDIsIi4vUmVhY3RQcm9wVHJhbnNmZXJlciI6NDMsIi4vUmVhY3RVcGRh
dGVzIjo0OCwiLi9pbnZhcmlhbnQiOjc1LCIuL2tleU1pcnJvciI6NzgsIi4vbWVyZ2UiOjgxLCIu
L21peEludG8iOjg0fV0sMjQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoq
CisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVy
IHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91
IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNl
bnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICog
aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNz
IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0
d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g
YW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNl
IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICog
bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxlIFJl
YWN0Q3VycmVudE93bmVyCisgKi8KKworInVzZSBzdHJpY3QiOworCisvKioKKyAqIEtlZXBzIHRy
YWNrIG9mIHRoZSBjdXJyZW50IG93bmVyLgorICoKKyAqIFRoZSBjdXJyZW50IG93bmVyIGlzIHRo
ZSBjb21wb25lbnQgd2hvIHNob3VsZCBvd24gYW55IGNvbXBvbmVudHMgdGhhdCBhcmUKKyAqIGN1
cnJlbnRseSBiZWluZyBjb25zdHJ1Y3RlZC4KKyAqCisgKiBUaGUgZGVwdGggaW5kaWNhdGUgaG93
IG1hbnkgY29tcG9zaXRlIGNvbXBvbmVudHMgYXJlIGFib3ZlIHRoaXMgcmVuZGVyIGxldmVsLgor
ICovCit2YXIgUmVhY3RDdXJyZW50T3duZXIgPSB7CisKKyAgLyoqCisgICAqIEBpbnRlcm5hbAor
ICAgKiBAdHlwZSB7UmVhY3RDb21wb25lbnR9CisgICAqLworICBjdXJyZW50OiBudWxsCisKK307
CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RDdXJyZW50T3duZXI7CisKK30se31dLDI1OltmdW5j
dGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFj
ZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZl
cnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUg
ZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWlu
IGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9s
aWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxl
IGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVu
ZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBX
SVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJl
c3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1
YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBM
aWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERPTQorICogQHR5cGVjaGVja3Mg
c3RhdGljLW9ubHkKKyAqLworCisidXNlIHN0cmljdCI7CisKK3ZhciBSZWFjdE5hdGl2ZUNvbXBv
bmVudCA9IHJlcXVpcmUoIi4vUmVhY3ROYXRpdmVDb21wb25lbnQiKTsKKwordmFyIG1lcmdlSW50
byA9IHJlcXVpcmUoIi4vbWVyZ2VJbnRvIik7Cit2YXIgb2JqTWFwS2V5VmFsID0gcmVxdWlyZSgi
Li9vYmpNYXBLZXlWYWwiKTsKKworLyoqCisgKiBDcmVhdGVzIGEgbmV3IFJlYWN0IGNsYXNzIHRo
YXQgaXMgaWRlbXBvdGVudCBhbmQgY2FwYWJsZSBvZiBjb250YWluaW5nIG90aGVyCisgKiBSZWFj
dCBjb21wb25lbnRzLiBJdCBhY2NlcHRzIGV2ZW50IGxpc3RlbmVycyBhbmQgRE9NIHByb3BlcnRp
ZXMgdGhhdCBhcmUKKyAqIHZhbGlkIGFjY29yZGluZyB0byBgRE9NUHJvcGVydHlgLgorICoKKyAq
ICAtIEV2ZW50IGxpc3RlbmVyczogYG9uQ2xpY2tgLCBgb25Nb3VzZURvd25gLCBldGMuCisgKiAg
LSBET00gcHJvcGVydGllczogYGNsYXNzTmFtZWAsIGBuYW1lYCwgYHRpdGxlYCwgZXRjLgorICoK
KyAqIFRoZSBgc3R5bGVgIHByb3BlcnR5IGZ1bmN0aW9ucyBkaWZmZXJlbnRseSBmcm9tIHRoZSBE
T00gQVBJLiBJdCBhY2NlcHRzIGFuCisgKiBvYmplY3QgbWFwcGluZyBvZiBzdHlsZSBwcm9wZXJ0
aWVzIHRvIHZhbHVlcy4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRhZyBuYW1lIChlLmcu
IGBkaXZgKS4KKyAqIEBwYXJhbSB7Ym9vbGVhbn0gb21pdENsb3NlIFRydWUgaWYgdGhlIGNsb3Nl
IHRhZyBzaG91bGQgYmUgb21pdHRlZC4KKyAqIEBwcml2YXRlCisgKi8KK2Z1bmN0aW9uIGNyZWF0
ZURPTUNvbXBvbmVudENsYXNzKHRhZywgb21pdENsb3NlKSB7CisgIHZhciBDb25zdHJ1Y3RvciA9
IGZ1bmN0aW9uKCkge307CisgIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IG5ldyBSZWFjdE5hdGl2
ZUNvbXBvbmVudCh0YWcsIG9taXRDbG9zZSk7CisgIENvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25z
dHJ1Y3RvciA9IENvbnN0cnVjdG9yOworCisgIHZhciBDb252ZW5pZW5jZUNvbnN0cnVjdG9yID0g
ZnVuY3Rpb24ocHJvcHMsIGNoaWxkcmVuKSB7CisgICAgdmFyIGluc3RhbmNlID0gbmV3IENvbnN0
cnVjdG9yKCk7CisgICAgaW5zdGFuY2UuY29uc3RydWN0LmFwcGx5KGluc3RhbmNlLCBhcmd1bWVu
dHMpOworICAgIHJldHVybiBpbnN0YW5jZTsKKyAgfTsKKyAgQ29udmVuaWVuY2VDb25zdHJ1Y3Rv
ci5jb21wb25lbnRDb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yOworICByZXR1cm4gQ29udmVuaWVu
Y2VDb25zdHJ1Y3RvcjsKK30KKworLyoqCisgKiBDcmVhdGVzIGEgbWFwcGluZyBmcm9tIHN1cHBv
cnRlZCBIVE1MIHRhZ3MgdG8gYFJlYWN0TmF0aXZlQ29tcG9uZW50YCBjbGFzc2VzLgorICogVGhp
cyBpcyBhbHNvIGFjY2Vzc2libGUgdmlhIGBSZWFjdC5ET01gLgorICoKKyAqIEBwdWJsaWMKKyAq
LwordmFyIFJlYWN0RE9NID0gb2JqTWFwS2V5VmFsKHsKKyAgYTogZmFsc2UsCisgIGFiYnI6IGZh
bHNlLAorICBhZGRyZXNzOiBmYWxzZSwKKyAgYXJlYTogZmFsc2UsCisgIGFydGljbGU6IGZhbHNl
LAorICBhc2lkZTogZmFsc2UsCisgIGF1ZGlvOiBmYWxzZSwKKyAgYjogZmFsc2UsCisgIGJhc2U6
IGZhbHNlLAorICBiZGk6IGZhbHNlLAorICBiZG86IGZhbHNlLAorICBiaWc6IGZhbHNlLAorICBi
bG9ja3F1b3RlOiBmYWxzZSwKKyAgYm9keTogZmFsc2UsCisgIGJyOiB0cnVlLAorICBidXR0b246
IGZhbHNlLAorICBjYW52YXM6IGZhbHNlLAorICBjYXB0aW9uOiBmYWxzZSwKKyAgY2l0ZTogZmFs
c2UsCisgIGNvZGU6IGZhbHNlLAorICBjb2w6IHRydWUsCisgIGNvbGdyb3VwOiBmYWxzZSwKKyAg
ZGF0YTogZmFsc2UsCisgIGRhdGFsaXN0OiBmYWxzZSwKKyAgZGQ6IGZhbHNlLAorICBkZWw6IGZh
bHNlLAorICBkZXRhaWxzOiBmYWxzZSwKKyAgZGZuOiBmYWxzZSwKKyAgZGl2OiBmYWxzZSwKKyAg
ZGw6IGZhbHNlLAorICBkdDogZmFsc2UsCisgIGVtOiBmYWxzZSwKKyAgZW1iZWQ6IHRydWUsCisg
IGZpZWxkc2V0OiBmYWxzZSwKKyAgZmlnY2FwdGlvbjogZmFsc2UsCisgIGZpZ3VyZTogZmFsc2Us
CisgIGZvb3RlcjogZmFsc2UsCisgIGZvcm06IGZhbHNlLCAvLyBOT1RFOiBJbmplY3RlZCwgc2Vl
IGBSZWFjdERPTUZvcm1gLgorICBoMTogZmFsc2UsCisgIGgyOiBmYWxzZSwKKyAgaDM6IGZhbHNl
LAorICBoNDogZmFsc2UsCisgIGg1OiBmYWxzZSwKKyAgaDY6IGZhbHNlLAorICBoZWFkOiBmYWxz
ZSwKKyAgaGVhZGVyOiBmYWxzZSwKKyAgaHI6IHRydWUsCisgIGh0bWw6IGZhbHNlLAorICBpOiBm
YWxzZSwKKyAgaWZyYW1lOiBmYWxzZSwKKyAgaW1nOiB0cnVlLAorICBpbnB1dDogdHJ1ZSwKKyAg
aW5zOiBmYWxzZSwKKyAga2JkOiBmYWxzZSwKKyAga2V5Z2VuOiB0cnVlLAorICBsYWJlbDogZmFs
c2UsCisgIGxlZ2VuZDogZmFsc2UsCisgIGxpOiBmYWxzZSwKKyAgbGluazogZmFsc2UsCisgIG1h
aW46IGZhbHNlLAorICBtYXA6IGZhbHNlLAorICBtYXJrOiBmYWxzZSwKKyAgbWVudTogZmFsc2Us
CisgIG1lbnVpdGVtOiBmYWxzZSwgLy8gTk9URTogQ2xvc2UgdGFnIHNob3VsZCBiZSBvbWl0dGVk
LCBidXQgY2F1c2VzIHByb2JsZW1zLgorICBtZXRhOiB0cnVlLAorICBtZXRlcjogZmFsc2UsCisg
IG5hdjogZmFsc2UsCisgIG5vc2NyaXB0OiBmYWxzZSwKKyAgb2JqZWN0OiBmYWxzZSwKKyAgb2w6
IGZhbHNlLAorICBvcHRncm91cDogZmFsc2UsCisgIG9wdGlvbjogZmFsc2UsCisgIG91dHB1dDog
ZmFsc2UsCisgIHA6IGZhbHNlLAorICBwYXJhbTogdHJ1ZSwKKyAgcHJlOiBmYWxzZSwKKyAgcHJv
Z3Jlc3M6IGZhbHNlLAorICBxOiBmYWxzZSwKKyAgcnA6IGZhbHNlLAorICBydDogZmFsc2UsCisg
IHJ1Ynk6IGZhbHNlLAorICBzOiBmYWxzZSwKKyAgc2FtcDogZmFsc2UsCisgIHNjcmlwdDogZmFs
c2UsCisgIHNlY3Rpb246IGZhbHNlLAorICBzZWxlY3Q6IGZhbHNlLAorICBzbWFsbDogZmFsc2Us
CisgIHNvdXJjZTogZmFsc2UsCisgIHNwYW46IGZhbHNlLAorICBzdHJvbmc6IGZhbHNlLAorICBz
dHlsZTogZmFsc2UsCisgIHN1YjogZmFsc2UsCisgIHN1bW1hcnk6IGZhbHNlLAorICBzdXA6IGZh
bHNlLAorICB0YWJsZTogZmFsc2UsCisgIHRib2R5OiBmYWxzZSwKKyAgdGQ6IGZhbHNlLAorICB0
ZXh0YXJlYTogZmFsc2UsIC8vIE5PVEU6IEluamVjdGVkLCBzZWUgYFJlYWN0RE9NVGV4dGFyZWFg
LgorICB0Zm9vdDogZmFsc2UsCisgIHRoOiBmYWxzZSwKKyAgdGhlYWQ6IGZhbHNlLAorICB0aW1l
OiBmYWxzZSwKKyAgdGl0bGU6IGZhbHNlLAorICB0cjogZmFsc2UsCisgIHRyYWNrOiB0cnVlLAor
ICB1OiBmYWxzZSwKKyAgdWw6IGZhbHNlLAorICAndmFyJzogZmFsc2UsCisgIHZpZGVvOiBmYWxz
ZSwKKyAgd2JyOiBmYWxzZSwKKworICAvLyBTVkcKKyAgY2lyY2xlOiBmYWxzZSwKKyAgZzogZmFs
c2UsCisgIGxpbmU6IGZhbHNlLAorICBwYXRoOiBmYWxzZSwKKyAgcG9seWxpbmU6IGZhbHNlLAor
ICByZWN0OiBmYWxzZSwKKyAgc3ZnOiBmYWxzZSwKKyAgdGV4dDogZmFsc2UKK30sIGNyZWF0ZURP
TUNvbXBvbmVudENsYXNzKTsKKwordmFyIGluamVjdGlvbiA9IHsKKyAgaW5qZWN0Q29tcG9uZW50
Q2xhc3NlczogZnVuY3Rpb24oY29tcG9uZW50Q2xhc3NlcykgeworICAgIG1lcmdlSW50byhSZWFj
dERPTSwgY29tcG9uZW50Q2xhc3Nlcyk7CisgIH0KK307CisKK1JlYWN0RE9NLmluamVjdGlvbiA9
IGluamVjdGlvbjsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTTsKKworfSx7Ii4vUmVhY3RO
YXRpdmVDb21wb25lbnQiOjQwLCIuL21lcmdlSW50byI6ODMsIi4vb2JqTWFwS2V5VmFsIjo4NX1d
LDI2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0
IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExp
Y2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0
aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBt
YXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBh
Y2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBh
cHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFT
SVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0
aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNp
ZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVu
ZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERPTUZvcm0KKyAq
LworCisidXNlIHN0cmljdCI7CisKK3ZhciBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCA9IHJlcXVp
cmUoIi4vUmVhY3RDb21wb3NpdGVDb21wb25lbnQiKTsKK3ZhciBSZWFjdERPTSA9IHJlcXVpcmUo
Ii4vUmVhY3RET00iKTsKK3ZhciBSZWFjdEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vUmVhY3RF
dmVudEVtaXR0ZXIiKTsKK3ZhciBFdmVudENvbnN0YW50cyA9IHJlcXVpcmUoIi4vRXZlbnRDb25z
dGFudHMiKTsKKworLy8gU3RvcmUgYSByZWZlcmVuY2UgdG8gdGhlIDxmb3JtPiBgUmVhY3ROYXRp
dmVDb21wb25lbnRgLgordmFyIGZvcm0gPSBSZWFjdERPTS5mb3JtOworCisvKioKKyAqIFNpbmNl
IG9uU3VibWl0IGRvZXNuJ3QgYnViYmxlIE9SIGNhcHR1cmUgb24gdGhlIHRvcCBsZXZlbCBpbiBJ
RTgsIHdlIG5lZWQKKyAqIHRvIGNhcHR1cmUgaXQgb24gdGhlIDxmb3JtPiBlbGVtZW50IGl0c2Vs
Zi4gVGhlcmUgYXJlIGxvdHMgb2YgaGFja3Mgd2UgY291bGQKKyAqIGRvIHRvIGFjY29tcGxpc2gg
dGhpcywgYnV0IHRoZSBtb3N0IHJlbGlhYmxlIGlzIHRvIG1ha2UgPGZvcm0+IGEKKyAqIGNvbXBv
c2l0ZSBjb21wb25lbnQgYW5kIHVzZSBgY29tcG9uZW50RGlkTW91bnRgIHRvIGF0dGFjaCB0aGUg
ZXZlbnQgaGFuZGxlcnMuCisgKi8KK3ZhciBSZWFjdERPTUZvcm0gPSBSZWFjdENvbXBvc2l0ZUNv
bXBvbmVudC5jcmVhdGVDbGFzcyh7CisgIHJlbmRlcjogZnVuY3Rpb24oKSB7CisgICAgLy8gVE9E
TzogSW5zdGVhZCBvZiB1c2luZyBgUmVhY3RET01gIGRpcmVjdGx5LCB3ZSBzaG91bGQgdXNlIEpT
WC4gSG93ZXZlciwKKyAgICAvLyBganNoaW50YCBmYWlscyB0byBwYXJzZSBKU1ggc28gaW4gb3Jk
ZXIgZm9yIGxpbnRpbmcgdG8gd29yayBpbiB0aGUgb3BlbgorICAgIC8vIHNvdXJjZSByZXBvLCB3
ZSBuZWVkIHRvIGp1c3QgdXNlIGBSZWFjdERPTS5mb3JtYC4KKyAgICByZXR1cm4gdGhpcy50cmFu
c2ZlclByb3BzVG8oZm9ybShudWxsLCB0aGlzLnByb3BzLmNoaWxkcmVuKSk7CisgIH0sCisKKyAg
Y29tcG9uZW50RGlkTW91bnQ6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICBSZWFjdEV2ZW50RW1pdHRl
ci50cmFwQnViYmxlZEV2ZW50KAorICAgICAgRXZlbnRDb25zdGFudHMudG9wTGV2ZWxUeXBlcy50
b3BTdWJtaXQsCisgICAgICAnc3VibWl0JywKKyAgICAgIG5vZGUKKyAgICApOworICB9Cit9KTsK
KworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTUZvcm07CisKK30seyIuL0V2ZW50Q29uc3RhbnRz
IjoxMywiLi9SZWFjdENvbXBvc2l0ZUNvbXBvbmVudCI6MjMsIi4vUmVhY3RET00iOjI1LCIuL1Jl
YWN0RXZlbnRFbWl0dGVyIjozM31dLDI3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRz
KXsKKyhmdW5jdGlvbigpey8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAq
CisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUg
IkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs
aWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUg
TGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNF
LTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQg
dG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNl
IGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJ
RVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4K
KyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBw
ZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAq
IEBwcm92aWRlc01vZHVsZSBSZWFjdERPTUlET3BlcmF0aW9ucworICogQHR5cGVjaGVja3Mgc3Rh
dGljLW9ubHkKKyAqLworCisvKmpzbGludCBldmlsOiB0cnVlICovCisKKyJ1c2Ugc3RyaWN0IjsK
KwordmFyIENTU1Byb3BlcnR5T3BlcmF0aW9ucyA9IHJlcXVpcmUoIi4vQ1NTUHJvcGVydHlPcGVy
YXRpb25zIik7Cit2YXIgRE9NQ2hpbGRyZW5PcGVyYXRpb25zID0gcmVxdWlyZSgiLi9ET01DaGls
ZHJlbk9wZXJhdGlvbnMiKTsKK3ZhciBET01Qcm9wZXJ0eU9wZXJhdGlvbnMgPSByZXF1aXJlKCIu
L0RPTVByb3BlcnR5T3BlcmF0aW9ucyIpOwordmFyIFJlYWN0SUQgPSByZXF1aXJlKCIuL1JlYWN0
SUQiKTsKKwordmFyIGdldFRleHRDb250ZW50QWNjZXNzb3IgPSByZXF1aXJlKCIuL2dldFRleHRD
b250ZW50QWNjZXNzb3IiKTsKK3ZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCIuL2ludmFyaWFudCIp
OworCisvKioKKyAqIEVycm9ycyBmb3IgcHJvcGVydGllcyB0aGF0IHNob3VsZCBub3QgYmUgdXBk
YXRlZCB3aXRoIGB1cGRhdGVQcm9wZXJ0eUJ5SWQoKWAuCisgKgorICogQHR5cGUge29iamVjdH0K
KyAqIEBwcml2YXRlCisgKi8KK3ZhciBJTlZBTElEX1BST1BFUlRZX0VSUk9SUyA9IHsKKyAgZGFu
Z2Vyb3VzbHlTZXRJbm5lckhUTUw6CisgICAgJ2BkYW5nZXJvdXNseVNldElubmVySFRNTGAgbXVz
dCBiZSBzZXQgdXNpbmcgYHVwZGF0ZUlubmVySFRNTEJ5SUQoKWAuJywKKyAgc3R5bGU6ICdgc3R5
bGVgIG11c3QgYmUgc2V0IHVzaW5nIGB1cGRhdGVTdHlsZXNCeUlEKClgLicKK307CisKKy8qKgor
ICogVGhlIERPTSBwcm9wZXJ0eSB0byB1c2Ugd2hlbiBzZXR0aW5nIHRleHQgY29udGVudC4KKyAq
CisgKiBAdHlwZSB7c3RyaW5nfQorICogQHByaXZhdGUKKyAqLwordmFyIHRleHRDb250ZW50QWNj
ZXNzb3IgPSBnZXRUZXh0Q29udGVudEFjY2Vzc29yKCkgfHwgJ05BJzsKKworLyoqCisgKiBPcGVy
YXRpb25zIHVzZWQgdG8gcHJvY2VzcyB1cGRhdGVzIHRvIERPTSBub2Rlcy4gVGhpcyBpcyBtYWRl
IGluamVjdGFibGUgdmlhCisgKiBgUmVhY3RDb21wb25lbnQuRE9NSURPcGVyYXRpb25zYC4KKyAq
LwordmFyIFJlYWN0RE9NSURPcGVyYXRpb25zID0geworCisgIC8qKgorICAgKiBVcGRhdGVzIGEg
RE9NIG5vZGUgd2l0aCBuZXcgcHJvcGVydHkgdmFsdWVzLiBUaGlzIHNob3VsZCBvbmx5IGJlIHVz
ZWQgdG8KKyAgICogdXBkYXRlIERPTSBwcm9wZXJ0aWVzIGluIGBET01Qcm9wZXJ0eWAuCisgICAq
CisgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBvZiB0aGUgbm9kZSB0byB1cGRhdGUuCisgICAq
IEBwYXJhbSB7c3RyaW5nfSBuYW1lIEEgdmFsaWQgcHJvcGVydHkgbmFtZSwgc2VlIGBET01Qcm9w
ZXJ0eWAuCisgICAqIEBwYXJhbSB7Kn0gdmFsdWUgTmV3IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4K
KyAgICogQGludGVybmFsCisgICAqLworICB1cGRhdGVQcm9wZXJ0eUJ5SUQ6IGZ1bmN0aW9uKGlk
LCBuYW1lLCB2YWx1ZSkgeworICAgIHZhciBub2RlID0gUmVhY3RJRC5nZXROb2RlKGlkKTsKKyAg
ICBpbnZhcmlhbnQoCisgICAgICAhSU5WQUxJRF9QUk9QRVJUWV9FUlJPUlMuaGFzT3duUHJvcGVy
dHkobmFtZSksCisgICAgICAndXBkYXRlUHJvcGVydHlCeUlEKC4uLik6ICVzJywKKyAgICAgIElO
VkFMSURfUFJPUEVSVFlfRVJST1JTW25hbWVdCisgICAgKTsKKyAgICBET01Qcm9wZXJ0eU9wZXJh
dGlvbnMuc2V0VmFsdWVGb3JQcm9wZXJ0eShub2RlLCBuYW1lLCB2YWx1ZSk7CisgIH0sCisKKyAg
LyoqCisgICAqIFVwZGF0ZXMgYSBET00gbm9kZSB0byByZW1vdmUgYSBwcm9wZXJ0eS4gVGhpcyBz
aG91bGQgb25seSBiZSB1c2VkIHRvIHJlbW92ZQorICAgKiBET00gcHJvcGVydGllcyBpbiBgRE9N
UHJvcGVydHlgLgorICAgKgorICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgSUQgb2YgdGhlIG5vZGUg
dG8gdXBkYXRlLgorICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBBIHByb3BlcnR5IG5hbWUgdG8g
cmVtb3ZlLCBzZWUgYERPTVByb3BlcnR5YC4KKyAgICogQGludGVybmFsCisgICAqLworICBkZWxl
dGVQcm9wZXJ0eUJ5SUQ6IGZ1bmN0aW9uKGlkLCBuYW1lLCB2YWx1ZSkgeworICAgIHZhciBub2Rl
ID0gUmVhY3RJRC5nZXROb2RlKGlkKTsKKyAgICBpbnZhcmlhbnQoCisgICAgICAhSU5WQUxJRF9Q
Uk9QRVJUWV9FUlJPUlMuaGFzT3duUHJvcGVydHkobmFtZSksCisgICAgICAndXBkYXRlUHJvcGVy
dHlCeUlEKC4uLik6ICVzJywKKyAgICAgIElOVkFMSURfUFJPUEVSVFlfRVJST1JTW25hbWVdCisg
ICAgKTsKKyAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuZGVsZXRlVmFsdWVGb3JQcm9wZXJ0eShu
b2RlLCBuYW1lLCB2YWx1ZSk7CisgIH0sCisKKyAgLyoqCisgICAqIFRoaXMgc2hvdWxkIGFsbW9z
dCBuZXZlciBiZSB1c2VkIGluc3RlYWQgb2YgYHVwZGF0ZVByb3BlcnR5QnlJRCgpYCBkdWUgdG8K
KyAgICogdGhlIGV4dHJhIG9iamVjdCBhbGxvY2F0aW9uIHJlcXVpcmVkIGJ5IHRoZSBBUEkuIFRo
YXQgc2FpZCwgdGhpcyBpcyB1c2VmdWwKKyAgICogZm9yIGJhdGNoaW5nIHVwIHNldmVyYWwgb3Bl
cmF0aW9ucyBhY3Jvc3Mgd29ya2VyIHRocmVhZCBib3VuZGFyaWVzLgorICAgKgorICAgKiBAcGFy
YW0ge3N0cmluZ30gaWQgSUQgb2YgdGhlIG5vZGUgdG8gdXBkYXRlLgorICAgKiBAcGFyYW0ge29i
amVjdH0gcHJvcGVydGllcyBBIG1hcHBpbmcgb2YgdmFsaWQgcHJvcGVydHkgbmFtZXMuCisgICAq
IEBpbnRlcm5hbAorICAgKiBAc2VlIHtSZWFjdERPTUlET3BlcmF0aW9ucy51cGRhdGVQcm9wZXJ0
eUJ5SUR9CisgICAqLworICB1cGRhdGVQcm9wZXJ0aWVzQnlJRDogZnVuY3Rpb24oaWQsIHByb3Bl
cnRpZXMpIHsKKyAgICBmb3IgKHZhciBuYW1lIGluIHByb3BlcnRpZXMpIHsKKyAgICAgIGlmICgh
cHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgeworICAgICAgICBjb250aW51ZTsKKyAg
ICAgIH0KKyAgICAgIFJlYWN0RE9NSURPcGVyYXRpb25zLnVwZGF0ZVByb3BlcnRpZXNCeUlEKGlk
LCBuYW1lLCBwcm9wZXJ0aWVzW25hbWVdKTsKKyAgICB9CisgIH0sCisKKyAgLyoqCisgICAqIFVw
ZGF0ZXMgYSBET00gbm9kZSB3aXRoIG5ldyBzdHlsZSB2YWx1ZXMuIElmIGEgdmFsdWUgaXMgc3Bl
Y2lmaWVkIGFzICcnLAorICAgKiB0aGUgY29ycmVzcG9uZGluZyBzdHlsZSBwcm9wZXJ0eSB3aWxs
IGJlIHVuc2V0LgorICAgKgorICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgSUQgb2YgdGhlIG5vZGUg
dG8gdXBkYXRlLgorICAgKiBAcGFyYW0ge29iamVjdH0gc3R5bGVzIE1hcHBpbmcgZnJvbSBzdHls
ZXMgdG8gdmFsdWVzLgorICAgKiBAaW50ZXJuYWwKKyAgICovCisgIHVwZGF0ZVN0eWxlc0J5SUQ6
IGZ1bmN0aW9uKGlkLCBzdHlsZXMpIHsKKyAgICB2YXIgbm9kZSA9IFJlYWN0SUQuZ2V0Tm9kZShp
ZCk7CisgICAgQ1NTUHJvcGVydHlPcGVyYXRpb25zLnNldFZhbHVlRm9yU3R5bGVzKG5vZGUsIHN0
eWxlcyk7CisgIH0sCisKKyAgLyoqCisgICAqIFVwZGF0ZXMgYSBET00gbm9kZSdzIGlubmVySFRN
TCBzZXQgYnkgYHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC4KKyAgICoKKyAgICogQHBh
cmFtIHtzdHJpbmd9IGlkIElEIG9mIHRoZSBub2RlIHRvIHVwZGF0ZS4KKyAgICogQHBhcmFtIHtv
YmplY3R9IGh0bWwgQW4gSFRNTCBvYmplY3Qgd2l0aCB0aGUgYF9faHRtbGAgcHJvcGVydHkuCisg
ICAqIEBpbnRlcm5hbAorICAgKi8KKyAgdXBkYXRlSW5uZXJIVE1MQnlJRDogZnVuY3Rpb24oaWQs
IGh0bWwpIHsKKyAgICB2YXIgbm9kZSA9IFJlYWN0SUQuZ2V0Tm9kZShpZCk7CisgICAgLy8gSEFD
SzogSUU4LSBub3JtYWxpemUgd2hpdGVzcGFjZSBpbiBpbm5lckhUTUwsIHJlbW92aW5nIGxlYWRp
bmcgc3BhY2VzLgorICAgIC8vIEBzZWUgcXVpcmtzbW9kZS5vcmcvYnVncmVwb3J0cy9hcmNoaXZl
cy8yMDA0LzExL2lubmVyaHRtbF9hbmRfdC5odG1sCisgICAgbm9kZS5pbm5lckhUTUwgPSAoaHRt
bCAmJiBodG1sLl9faHRtbCB8fCAnJykucmVwbGFjZSgvXiAvZywgJyZuYnNwOycpOworICB9LAor
CisgIC8qKgorICAgKiBVcGRhdGVzIGEgRE9NIG5vZGUncyB0ZXh0IGNvbnRlbnQgc2V0IGJ5IGBw
cm9wcy5jb250ZW50YC4KKyAgICoKKyAgICogQHBhcmFtIHtzdHJpbmd9IGlkIElEIG9mIHRoZSBu
b2RlIHRvIHVwZGF0ZS4KKyAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgVGV4dCBjb250ZW50
LgorICAgKiBAaW50ZXJuYWwKKyAgICovCisgIHVwZGF0ZVRleHRDb250ZW50QnlJRDogZnVuY3Rp
b24oaWQsIGNvbnRlbnQpIHsKKyAgICB2YXIgbm9kZSA9IFJlYWN0SUQuZ2V0Tm9kZShpZCk7Cisg
ICAgbm9kZVt0ZXh0Q29udGVudEFjY2Vzc29yXSA9IGNvbnRlbnQ7CisgIH0sCisKKyAgLyoqCisg
ICAqIFJlcGxhY2VzIGEgRE9NIG5vZGUgdGhhdCBleGlzdHMgaW4gdGhlIGRvY3VtZW50IHdpdGgg
bWFya3VwLgorICAgKgorICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgSUQgb2YgY2hpbGQgdG8gYmUg
cmVwbGFjZWQuCisgICAqIEBwYXJhbSB7c3RyaW5nfSBtYXJrdXAgRGFuZ2Vyb3VzIG1hcmt1cCB0
byBpbmplY3QgaW4gcGxhY2Ugb2YgY2hpbGQuCisgICAqIEBpbnRlcm5hbAorICAgKiBAc2VlIHtE
YW5nZXIuZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXB9CisgICAqLworICBkYW5nZXJv
dXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cEJ5SUQ6IGZ1bmN0aW9uKGlkLCBtYXJrdXApIHsKKyAg
ICB2YXIgbm9kZSA9IFJlYWN0SUQuZ2V0Tm9kZShpZCk7CisgICAgRE9NQ2hpbGRyZW5PcGVyYXRp
b25zLmRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwKG5vZGUsIG1hcmt1cCk7CisgIH0s
CisKKyAgLyoqCisgICAqIFRPRE86IFdlIG9ubHkgYWN0dWFsbHkgKm5lZWQqIHRvIHB1cmdlIHRo
ZSBjYWNoZSB3aGVuIHdlIHJlbW92ZSBlbGVtZW50cy4KKyAgICogICAgICAgRGV0ZWN0IGlmIGFu
eSBlbGVtZW50cyB3ZXJlIHJlbW92ZWQgaW5zdGVhZCBvZiBibGluZGx5IHB1cmdpbmcuCisgICAq
LworICBtYW5hZ2VDaGlsZHJlbkJ5UGFyZW50SUQ6IGZ1bmN0aW9uKHBhcmVudElELCBkb21PcGVy
YXRpb25zKSB7CisgICAgdmFyIHBhcmVudCA9IFJlYWN0SUQuZ2V0Tm9kZShwYXJlbnRJRCk7Cisg
ICAgRE9NQ2hpbGRyZW5PcGVyYXRpb25zLm1hbmFnZUNoaWxkcmVuKHBhcmVudCwgZG9tT3BlcmF0
aW9ucyk7CisgIH0KKworfTsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTUlET3BlcmF0aW9u
czsKKworfSkoKQorfSx7Ii4vQ1NTUHJvcGVydHlPcGVyYXRpb25zIjozLCIuL0RPTUNoaWxkcmVu
T3BlcmF0aW9ucyI6NiwiLi9ET01Qcm9wZXJ0eU9wZXJhdGlvbnMiOjgsIi4vUmVhY3RJRCI6MzUs
Ii4vZ2V0VGV4dENvbnRlbnRBY2Nlc3NvciI6NzEsIi4vaW52YXJpYW50Ijo3NX1dLDI4OltmdW5j
dGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFj
ZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZl
cnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUg
ZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWlu
IGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9s
aWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxl
IGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVu
ZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBX
SVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJl
c3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1
YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBM
aWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERPTUlucHV0CisgKi8KKworInVz
ZSBzdHJpY3QiOworCit2YXIgRE9NUHJvcGVydHlPcGVyYXRpb25zID0gcmVxdWlyZSgiLi9ET01Q
cm9wZXJ0eU9wZXJhdGlvbnMiKTsKK3ZhciBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCA9IHJlcXVp
cmUoIi4vUmVhY3RDb21wb3NpdGVDb21wb25lbnQiKTsKK3ZhciBSZWFjdERPTSA9IHJlcXVpcmUo
Ii4vUmVhY3RET00iKTsKKwordmFyIG1lcmdlID0gcmVxdWlyZSgiLi9tZXJnZSIpOworCisvLyBT
dG9yZSBhIHJlZmVyZW5jZSB0byB0aGUgPGlucHV0PiBgUmVhY3ROYXRpdmVDb21wb25lbnRgLgor
dmFyIGlucHV0ID0gUmVhY3RET00uaW5wdXQ7CisKKy8qKgorICogSW1wbGVtZW50cyBhbiA8aW5w
dXQ+IG5hdGl2ZSBjb21wb25lbnQgdGhhdCBhbGxvd3Mgc2V0dGluZyB0aGVzZSBvcHRpb25hbAor
ICogcHJvcHM6IGBjaGVja2VkYCwgYHZhbHVlYCwgYGRlZmF1bHRDaGVja2VkYCwgYW5kIGBkZWZh
dWx0VmFsdWVgLgorICoKKyAqIElmIGBjaGVja2VkYCBvciBgdmFsdWVgIGFyZSBub3Qgc3VwcGxp
ZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zCisgKiB0aGF0IGFmZmVjdCB0aGUg
Y2hlY2tlZCBzdGF0ZSBvciB2YWx1ZSB3aWxsIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVu
dC4KKyAqCisgKiBJZiB0aGV5IGFyZSBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCks
IHRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgbm90CisgKiB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhl
IGVsZW1lbnQuIEluc3RlYWQsIHRoZSBwcm9wcyBtdXN0IGNoYW5nZSBpbiBvcmRlciBmb3IKKyAq
IHRoZSByZW5kZXJlZCBlbGVtZW50IHRvIGJlIHVwZGF0ZWQuCisgKgorICogVGhlIHJlbmRlcmVk
IGVsZW1lbnQgd2lsbCBiZSBpbml0aWFsaXplZCBhcyB1bmNoZWNrZWQgKG9yIGBkZWZhdWx0Q2hl
Y2tlZGApCisgKiB3aXRoIGFuIGVtcHR5IHZhbHVlIChvciBgZGVmYXVsdFZhbHVlYCkuCisgKgor
ICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIxMDI1L3RoZS1p
bnB1dC1lbGVtZW50Lmh0bWwKKyAqLwordmFyIFJlYWN0RE9NSW5wdXQgPSBSZWFjdENvbXBvc2l0
ZUNvbXBvbmVudC5jcmVhdGVDbGFzcyh7CisKKyAgZ2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbigp
IHsKKyAgICByZXR1cm4geworICAgICAgY2hlY2tlZDogdGhpcy5wcm9wcy5kZWZhdWx0Q2hlY2tl
ZCB8fCBmYWxzZSwKKyAgICAgIHZhbHVlOiB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSB8fCAnJwor
ICAgIH07CisgIH0sCisKKyAgc2hvdWxkQ29tcG9uZW50VXBkYXRlOiBmdW5jdGlvbigpIHsKKyAg
ICAvLyBEZWZlciBhbnkgdXBkYXRlcyB0byB0aGlzIGNvbXBvbmVudCBkdXJpbmcgdGhlIGBvbkNo
YW5nZWAgaGFuZGxlci4KKyAgICByZXR1cm4gIXRoaXMuX2lzQ2hhbmdpbmc7CisgIH0sCisKKyAg
Z2V0Q2hlY2tlZDogZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hlY2tlZCAh
PSBudWxsID8gdGhpcy5wcm9wcy5jaGVja2VkIDogdGhpcy5zdGF0ZS5jaGVja2VkOworICB9LAor
CisgIGdldFZhbHVlOiBmdW5jdGlvbigpIHsKKyAgICAvLyBDYXN0IGB0aGlzLnByb3BzLnZhbHVl
YCB0byBhIHN0cmluZyBzbyBlcXVhbGl0eSBjaGVja3MgcGFzcy4KKyAgICByZXR1cm4gdGhpcy5w
cm9wcy52YWx1ZSAhPSBudWxsID8gJycgKyB0aGlzLnByb3BzLnZhbHVlIDogdGhpcy5zdGF0ZS52
YWx1ZTsKKyAgfSwKKworICByZW5kZXI6IGZ1bmN0aW9uKCkgeworICAgIC8vIENsb25lIGB0aGlz
LnByb3BzYCBzbyB3ZSBkb24ndCBtdXRhdGUgdGhlIGlucHV0LgorICAgIHZhciBwcm9wcyA9IG1l
cmdlKHRoaXMucHJvcHMpOworCisgICAgcHJvcHMuY2hlY2tlZCA9IHRoaXMuZ2V0Q2hlY2tlZCgp
OworICAgIHByb3BzLnZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpOworICAgIHByb3BzLm9uQ2hhbmdl
ID0gdGhpcy5oYW5kbGVDaGFuZ2U7CisKKyAgICByZXR1cm4gaW5wdXQocHJvcHMsIHRoaXMucHJv
cHMuY2hpbGRyZW4pOworICB9LAorCisgIGNvbXBvbmVudERpZFVwZGF0ZTogZnVuY3Rpb24ocHJl
dlByb3BzLCBwcmV2U3RhdGUsIHJvb3ROb2RlKSB7CisgICAgaWYgKHRoaXMucHJvcHMuY2hlY2tl
ZCAhPSBudWxsKSB7CisgICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuc2V0VmFsdWVGb3JQcm9w
ZXJ0eSgKKyAgICAgICAgcm9vdE5vZGUsCisgICAgICAgICdjaGVja2VkJywKKyAgICAgICAgdGhp
cy5wcm9wcy5jaGVja2VkIHx8IGZhbHNlCisgICAgICApOworICAgIH0KKyAgICBpZiAodGhpcy5w
cm9wcy52YWx1ZSAhPSBudWxsKSB7CisgICAgICAvLyBDYXN0IGB0aGlzLnByb3BzLnZhbHVlYCB0
byBhIHN0cmluZyBzbyBmYWxzZXkgdmFsdWVzIHRoYXQgY2FzdCB0bworICAgICAgLy8gdHJ1dGh5
IHN0cmluZ3MgYXJlIG5vdCBpZ25vcmVkLgorICAgICAgRE9NUHJvcGVydHlPcGVyYXRpb25zLnNl
dFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgIHJvb3ROb2RlLAorICAgICAgICAndmFsdWUnLAor
ICAgICAgICAnJyArIHRoaXMucHJvcHMudmFsdWUgfHwgJycKKyAgICAgICk7CisgICAgfQorICB9
LAorCisgIGhhbmRsZUNoYW5nZTogZnVuY3Rpb24oZXZlbnQpIHsKKyAgICB2YXIgcmV0dXJuVmFs
dWU7CisgICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHsKKyAgICAgIHRoaXMuX2lzQ2hhbmdp
bmcgPSB0cnVlOworICAgICAgcmV0dXJuVmFsdWUgPSB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2ZW50
KTsKKyAgICAgIHRoaXMuX2lzQ2hhbmdpbmcgPSBmYWxzZTsKKyAgICB9CisgICAgdGhpcy5zZXRT
dGF0ZSh7CisgICAgICBjaGVja2VkOiBldmVudC50YXJnZXQuY2hlY2tlZCwKKyAgICAgIHZhbHVl
OiBldmVudC50YXJnZXQudmFsdWUKKyAgICB9KTsKKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7Cisg
IH0KKworfSk7CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RET01JbnB1dDsKKworfSx7Ii4vRE9N
UHJvcGVydHlPcGVyYXRpb25zIjo4LCIuL1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50IjoyMywiLi9S
ZWFjdERPTSI6MjUsIi4vbWVyZ2UiOjgxfV0sMjk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4
cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExp
Y2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5z
ZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3
aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNl
IGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisg
KgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3
cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlz
dHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBD
T05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2Vl
IHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Np
b25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHByb3Zp
ZGVzTW9kdWxlIFJlYWN0RE9NT3B0aW9uCisgKi8KKworInVzZSBzdHJpY3QiOworCit2YXIgUmVh
Y3RDb21wb3NpdGVDb21wb25lbnQgPSByZXF1aXJlKCIuL1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50
Iik7Cit2YXIgUmVhY3RET00gPSByZXF1aXJlKCIuL1JlYWN0RE9NIik7CisKKy8vIFN0b3JlIGEg
cmVmZXJlbmNlIHRvIHRoZSA8b3B0aW9uPiBgUmVhY3ROYXRpdmVDb21wb25lbnRgLgordmFyIG9w
dGlvbiA9IFJlYWN0RE9NLm9wdGlvbjsKKworLyoqCisgKiBJbXBsZW1lbnRzIGFuIDxvcHRpb24+
IG5hdGl2ZSBjb21wb25lbnQgdGhhdCB3YXJucyB3aGVuIGBzZWxlY3RlZGAgaXMgc2V0LgorICov
Cit2YXIgUmVhY3RET01PcHRpb24gPSBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudC5jcmVhdGVDbGFz
cyh7CisKKyAgY29tcG9uZW50V2lsbE1vdW50OiBmdW5jdGlvbigpIHsKKyAgICAvLyBUT0RPICh5
dW5nc3RlcnMpOiBSZW1vdmUgc3VwcG9ydCBmb3IgYHNlbGVjdGVkYCBpbiA8b3B0aW9uPi4KKyAg
ICBpZiAodGhpcy5wcm9wcy5zZWxlY3RlZCAhPSBudWxsKSB7CisgICAgICBpZiAodHJ1ZSkgewor
ICAgICAgICBjb25zb2xlLndhcm4oCisgICAgICAgICAgJ1VzZSB0aGUgYGRlZmF1bHRWYWx1ZWAg
b3IgYHZhbHVlYCBwcm9wcyBvbiA8c2VsZWN0PiBpbnN0ZWFkIG9mICcgKworICAgICAgICAgICdz
ZXR0aW5nIGBzZWxlY3RlZGAgb24gPG9wdGlvbj4uJworICAgICAgICApOworICAgICAgfQorICAg
IH0KKyAgfSwKKworICByZW5kZXI6IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBvcHRpb24odGhp
cy5wcm9wcywgdGhpcy5wcm9wcy5jaGlsZHJlbik7CisgIH0KKworfSk7CisKK21vZHVsZS5leHBv
cnRzID0gUmVhY3RET01PcHRpb247CisKK30seyIuL1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50Ijoy
MywiLi9SZWFjdERPTSI6MjV9XSwzMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQg
dW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cisg
KiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhl
IExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAq
CisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBV
bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcs
IHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRl
ZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExp
Y2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5k
CisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1
bGUgUmVhY3RET01TZWxlY3QKKyAqLworCisidXNlIHN0cmljdCI7CisKK3ZhciBSZWFjdENvbXBv
c2l0ZUNvbXBvbmVudCA9IHJlcXVpcmUoIi4vUmVhY3RDb21wb3NpdGVDb21wb25lbnQiKTsKK3Zh
ciBSZWFjdERPTSA9IHJlcXVpcmUoIi4vUmVhY3RET00iKTsKKwordmFyIGludmFyaWFudCA9IHJl
cXVpcmUoIi4vaW52YXJpYW50Iik7Cit2YXIgbWVyZ2UgPSByZXF1aXJlKCIuL21lcmdlIik7CisK
Ky8vIFN0b3JlIGEgcmVmZXJlbmNlIHRvIHRoZSA8c2VsZWN0PiBgUmVhY3ROYXRpdmVDb21wb25l
bnRgLgordmFyIHNlbGVjdCA9IFJlYWN0RE9NLnNlbGVjdDsKKworLyoqCisgKiBWYWxpZGF0aW9u
IGZ1bmN0aW9uIGZvciBgdmFsdWVgIGFuZCBgZGVmYXVsdFZhbHVlYC4KKyAqIEBwcml2YXRlCisg
Ki8KK2Z1bmN0aW9uIHNlbGVjdFZhbHVlVHlwZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5h
bWUpIHsKKyAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7CisgICAgcmV0dXJuOworICB9
CisgIGlmIChwcm9wcy5tdWx0aXBsZSkgeworICAgIGludmFyaWFudCgKKyAgICAgIEFycmF5Lmlz
QXJyYXkocHJvcHNbcHJvcE5hbWVdKSwKKyAgICAgICdUaGUgYCVzYCBwcm9wIHN1cHBsaWVkIHRv
IDxzZWxlY3Q+IG11c3QgYmUgYW4gYXJyYXkgaWYgYG11bHRpcGxlYCBpcyAnICsKKyAgICAgICd0
cnVlLicsCisgICAgICBwcm9wTmFtZQorICAgICk7CisgIH0gZWxzZSB7CisgICAgaW52YXJpYW50
KAorICAgICAgIUFycmF5LmlzQXJyYXkocHJvcHNbcHJvcE5hbWVdKSwKKyAgICAgICdUaGUgYCVz
YCBwcm9wIHN1cHBsaWVkIHRvIDxzZWxlY3Q+IG11c3QgYmUgYSBzY2FsYXIgdmFsdWUgaWYgJyAr
CisgICAgICAnYG11bHRpcGxlYCBpcyBmYWxzZS4nLAorICAgICAgcHJvcE5hbWUKKyAgICApOwor
ICB9Cit9CisKKy8qKgorICogSWYgYHZhbHVlYCBpcyBzdXBwbGllZCwgdXBkYXRlcyA8b3B0aW9u
PiBlbGVtZW50cyBvbiBtb3VudCBhbmQgdXBkYXRlLgorICogQHByaXZhdGUKKyAqLworZnVuY3Rp
b24gdXBkYXRlT3B0aW9ucygpIHsKKyAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi8KKyAgaWYg
KHRoaXMucHJvcHMudmFsdWUgPT0gbnVsbCkgeworICAgIHJldHVybjsKKyAgfQorICB2YXIgb3B0
aW9ucyA9IHRoaXMuZ2V0RE9NTm9kZSgpLm9wdGlvbnM7CisgIHZhciBzZWxlY3RlZFZhbHVlID0g
JycgKyB0aGlzLnByb3BzLnZhbHVlOworCisgIGZvciAodmFyIGkgPSAwLCBsID0gb3B0aW9ucy5s
ZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICB2YXIgc2VsZWN0ZWQgPSB0aGlzLnByb3BzLm11bHRp
cGxlID8KKyAgICAgIHNlbGVjdGVkVmFsdWUuaW5kZXhPZihvcHRpb25zW2ldLnZhbHVlKSA+PSAw
IDoKKyAgICAgIHNlbGVjdGVkID0gb3B0aW9uc1tpXS52YWx1ZSA9PT0gc2VsZWN0ZWRWYWx1ZTsK
KworICAgIGlmIChzZWxlY3RlZCAhPT0gb3B0aW9uc1tpXS5zZWxlY3RlZCkgeworICAgICAgb3B0
aW9uc1tpXS5zZWxlY3RlZCA9IHNlbGVjdGVkOworICAgIH0KKyAgfQorfQorCisvKioKKyAqIElt
cGxlbWVudHMgYSA8c2VsZWN0PiBuYXRpdmUgY29tcG9uZW50IHRoYXQgYWxsb3dzIG9wdGlvbmFs
bHkgc2V0dGluZyB0aGUKKyAqIHByb3BzIGB2YWx1ZWAgYW5kIGBkZWZhdWx0VmFsdWVgLiBJZiBg
bXVsdGlwbGVgIGlzIGZhbHNlLCB0aGUgcHJvcCBtdXN0IGJlIGEKKyAqIHN0cmluZy4gSWYgYG11
bHRpcGxlYCBpcyB0cnVlLCB0aGUgcHJvcCBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MuCisg
KgorICogSWYgYHZhbHVlYCBpcyBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNl
ciBhY3Rpb25zIHRoYXQgY2hhbmdlIHRoZQorICogc2VsZWN0ZWQgb3B0aW9uIHdpbGwgdHJpZ2dl
ciB1cGRhdGVzIHRvIHRoZSByZW5kZXJlZCBvcHRpb25zLgorICoKKyAqIElmIGl0IGlzIHN1cHBs
aWVkIChhbmQgbm90IG51bGwvdW5kZWZpbmVkKSwgdGhlIHJlbmRlcmVkIG9wdGlvbnMgd2lsbCBu
b3QKKyAqIHVwZGF0ZSBpbiByZXNwb25zZSB0byB1c2VyIGFjdGlvbnMuIEluc3RlYWQsIHRoZSBg
dmFsdWVgIHByb3AgbXVzdCBjaGFuZ2UgaW4KKyAqIG9yZGVyIGZvciB0aGUgcmVuZGVyZWQgb3B0
aW9ucyB0byB1cGRhdGUuCisgKgorICogSWYgYGRlZmF1bHRWYWx1ZWAgaXMgcHJvdmlkZWQsIGFu
eSBvcHRpb25zIHdpdGggdGhlIHN1cHBsaWVkIHZhbHVlcyB3aWxsIGJlCisgKiBzZWxlY3RlZC4K
KyAqLwordmFyIFJlYWN0RE9NU2VsZWN0ID0gUmVhY3RDb21wb3NpdGVDb21wb25lbnQuY3JlYXRl
Q2xhc3MoeworCisgIHByb3BUeXBlczogeworICAgIGRlZmF1bHRWYWx1ZTogc2VsZWN0VmFsdWVU
eXBlLAorICAgIHZhbHVlOiBzZWxlY3RWYWx1ZVR5cGUKKyAgfSwKKworICBnZXRJbml0aWFsU3Rh
dGU6IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB7dmFsdWU6IHRoaXMucHJvcHMuZGVmYXVsdFZh
bHVlIHx8ICh0aGlzLnByb3BzLm11bHRpcGxlID8gW10gOiAnJyl9OworICB9LAorCisgIGNvbXBv
bmVudFdpbGxSZWNlaXZlUHJvcHM6IGZ1bmN0aW9uKG5leHRQcm9wcykgeworICAgIGlmICghdGhp
cy5wcm9wcy5tdWx0aXBsZSAmJiBuZXh0UHJvcHMubXVsdGlwbGUpIHsKKyAgICAgIHRoaXMuc2V0
U3RhdGUoe3ZhbHVlOiBbdGhpcy5zdGF0ZS52YWx1ZV19KTsKKyAgICB9IGVsc2UgaWYgKHRoaXMu
cHJvcHMubXVsdGlwbGUgJiYgIW5leHRQcm9wcy5tdWx0aXBsZSkgeworICAgICAgdGhpcy5zZXRT
dGF0ZSh7dmFsdWU6IHRoaXMuc3RhdGUudmFsdWVbMF19KTsKKyAgICB9CisgIH0sCisKKyAgc2hv
dWxkQ29tcG9uZW50VXBkYXRlOiBmdW5jdGlvbigpIHsKKyAgICAvLyBEZWZlciBhbnkgdXBkYXRl
cyB0byB0aGlzIGNvbXBvbmVudCBkdXJpbmcgdGhlIGBvbkNoYW5nZWAgaGFuZGxlci4KKyAgICBy
ZXR1cm4gIXRoaXMuX2lzQ2hhbmdpbmc7CisgIH0sCisKKyAgcmVuZGVyOiBmdW5jdGlvbigpIHsK
KyAgICAvLyBDbG9uZSBgdGhpcy5wcm9wc2Agc28gd2UgZG9uJ3QgbXV0YXRlIHRoZSBpbnB1dC4K
KyAgICB2YXIgcHJvcHMgPSBtZXJnZSh0aGlzLnByb3BzKTsKKworICAgIHByb3BzLm9uQ2hhbmdl
ID0gdGhpcy5oYW5kbGVDaGFuZ2U7CisgICAgcHJvcHMudmFsdWUgPSBudWxsOworCisgICAgcmV0
dXJuIHNlbGVjdChwcm9wcywgdGhpcy5wcm9wcy5jaGlsZHJlbik7CisgIH0sCisKKyAgY29tcG9u
ZW50RGlkTW91bnQ6IHVwZGF0ZU9wdGlvbnMsCisKKyAgY29tcG9uZW50RGlkVXBkYXRlOiB1cGRh
dGVPcHRpb25zLAorCisgIGhhbmRsZUNoYW5nZTogZnVuY3Rpb24oZXZlbnQpIHsKKyAgICB2YXIg
cmV0dXJuVmFsdWU7CisgICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHsKKyAgICAgIHRoaXMu
X2lzQ2hhbmdpbmcgPSB0cnVlOworICAgICAgcmV0dXJuVmFsdWUgPSB0aGlzLnByb3BzLm9uQ2hh
bmdlKGV2ZW50KTsKKyAgICAgIHRoaXMuX2lzQ2hhbmdpbmcgPSBmYWxzZTsKKyAgICB9CisKKyAg
ICB2YXIgc2VsZWN0ZWRWYWx1ZTsKKyAgICBpZiAodGhpcy5wcm9wcy5tdWx0aXBsZSkgeworICAg
ICAgc2VsZWN0ZWRWYWx1ZSA9IFtdOworICAgICAgdmFyIG9wdGlvbnMgPSBldmVudC50YXJnZXQu
b3B0aW9uczsKKyAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gb3B0aW9ucy5sZW5ndGg7IGkgPCBs
OyBpKyspIHsKKyAgICAgICAgaWYgKG9wdGlvbnNbaV0uc2VsZWN0ZWQpIHsKKyAgICAgICAgICBz
ZWxlY3RlZFZhbHVlLnB1c2gob3B0aW9uc1tpXS52YWx1ZSk7CisgICAgICAgIH0KKyAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgc2VsZWN0ZWRWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTsK
KyAgICB9CisKKyAgICB0aGlzLnNldFN0YXRlKHt2YWx1ZTogc2VsZWN0ZWRWYWx1ZX0pOworICAg
IHJldHVybiByZXR1cm5WYWx1ZTsKKyAgfQorCit9KTsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFj
dERPTVNlbGVjdDsKKworfSx7Ii4vUmVhY3RDb21wb3NpdGVDb21wb25lbnQiOjIzLCIuL1JlYWN0
RE9NIjoyNSwiLi9pbnZhcmlhbnQiOjc1LCIuL21lcmdlIjo4MX1dLDMxOltmdW5jdGlvbihyZXF1
aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIElu
Yy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4w
ICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGlu
IGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBv
ZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9M
SUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBh
Z3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBM
aWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdB
UlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1w
bGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVy
bmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgor
ICoKKyAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERPTVRleHRhcmVhCisgKi8KKworInVzZSBzdHJp
Y3QiOworCit2YXIgRE9NUHJvcGVydHlPcGVyYXRpb25zID0gcmVxdWlyZSgiLi9ET01Qcm9wZXJ0
eU9wZXJhdGlvbnMiKTsKK3ZhciBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCA9IHJlcXVpcmUoIi4v
UmVhY3RDb21wb3NpdGVDb21wb25lbnQiKTsKK3ZhciBSZWFjdERPTSA9IHJlcXVpcmUoIi4vUmVh
Y3RET00iKTsKKwordmFyIGludmFyaWFudCA9IHJlcXVpcmUoIi4vaW52YXJpYW50Iik7Cit2YXIg
bWVyZ2UgPSByZXF1aXJlKCIuL21lcmdlIik7CisKKy8vIFN0b3JlIGEgcmVmZXJlbmNlIHRvIHRo
ZSA8dGV4dGFyZWE+IGBSZWFjdE5hdGl2ZUNvbXBvbmVudGAuCit2YXIgdGV4dGFyZWEgPSBSZWFj
dERPTS50ZXh0YXJlYTsKKworLy8gRm9yIHF1aWNrbHkgbWF0Y2hpbmcgY2hpbGRyZW4gdHlwZSwg
dG8gdGVzdCBpZiBjYW4gYmUgdHJlYXRlZCBhcyBjb250ZW50LgordmFyIENPTlRFTlRfVFlQRVMg
PSB7J3N0cmluZyc6IHRydWUsICdudW1iZXInOiB0cnVlfTsKKworLyoqCisgKiBJbXBsZW1lbnRz
IGEgPHRleHRhcmVhPiBuYXRpdmUgY29tcG9uZW50IHRoYXQgYWxsb3dzIHNldHRpbmcgYHZhbHVl
YCwgYW5kCisgKiBgZGVmYXVsdFZhbHVlYC4gVGhpcyBkaWZmZXJzIGZyb20gdGhlIHRyYWRpdGlv
bmFsIERPTSBBUEkgYmVjYXVzZSB2YWx1ZSBpcworICogdXN1YWxseSBzZXQgYXMgUENEQVRBIGNo
aWxkcmVuLgorICoKKyAqIElmIGB2YWx1ZWAgaXMgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVm
aW5lZCksIHVzZXIgYWN0aW9ucyB0aGF0IGFmZmVjdCB0aGUKKyAqIHZhbHVlIHdpbGwgdHJpZ2dl
ciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LgorICoKKyAqIElmIGB2YWx1ZWAgaXMgc3VwcGxpZWQg
KGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsCisgKiBu
b3QgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LiBJbnN0ZWFkLCB0aGUgYHZhbHVlYCBw
cm9wIG11c3QgY2hhbmdlIGluCisgKiBvcmRlciBmb3IgdGhlIHJlbmRlcmVkIGVsZW1lbnQgdG8g
YmUgdXBkYXRlZC4KKyAqCisgKiBUaGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsIGJlIGluaXRpYWxp
emVkIHdpdGggYW4gZW1wdHkgdmFsdWUsIHRoZSBwcm9wCisgKiBgZGVmYXVsdFZhbHVlYCBpZiBz
cGVjaWZpZWQsIG9yIHRoZSBjaGlsZHJlbiBjb250ZW50IChkZXByZWNhdGVkKS4KKyAqLwordmFy
IFJlYWN0RE9NVGV4dGFyZWEgPSBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudC5jcmVhdGVDbGFzcyh7
CisKKyAgZ2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbigpIHsKKyAgICB2YXIgZGVmYXVsdFZhbHVl
ID0gdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWU7CisgICAgLy8gVE9ETyAoeXVuZ3N0ZXJzKTogUmVt
b3ZlIHN1cHBvcnQgZm9yIGNoaWxkcmVuIGNvbnRlbnQgaW4gPHRleHRhcmVhPi4KKyAgICB2YXIg
Y2hpbGRyZW4gPSB0aGlzLnByb3BzLmNoaWxkcmVuOworICAgIGlmIChjaGlsZHJlbiAhPSBudWxs
KSB7CisgICAgICBpZiAodHJ1ZSkgeworICAgICAgICBjb25zb2xlLndhcm4oCisgICAgICAgICAg
J1VzZSB0aGUgYGRlZmF1bHRWYWx1ZWAgb3IgYHZhbHVlYCBwcm9wcyBpbnN0ZWFkIG9mIHNldHRp
bmcgJyArCisgICAgICAgICAgJ2NoaWxkcmVuIG9uIDx0ZXh0YXJlYT4uJworICAgICAgICApOwor
ICAgICAgfQorICAgICAgaW52YXJpYW50KAorICAgICAgICBkZWZhdWx0VmFsdWUgPT0gbnVsbCwK
KyAgICAgICAgJ0lmIHlvdSBzdXBwbHkgYGRlZmF1bHRWYWx1ZWAgb24gYSA8dGV4dGFyZWE+LCBk
byBub3QgcGFzcyBjaGlsZHJlbi4nCisgICAgICApOworICAgICAgaWYgKEFycmF5LmlzQXJyYXko
Y2hpbGRyZW4pKSB7CisgICAgICAgIGludmFyaWFudCgKKyAgICAgICAgICBjaGlsZHJlbi5sZW5n
dGggPD0gMSwKKyAgICAgICAgICAnPHRleHRhcmVhPiBjYW4gb25seSBoYXZlIGF0IG1vc3Qgb25l
IGNoaWxkLicKKyAgICAgICAgKTsKKyAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlblswXTsKKyAg
ICAgIH0KKyAgICAgIGludmFyaWFudCgKKyAgICAgICAgQ09OVEVOVF9UWVBFU1t0eXBlb2YgY2hp
bGRyZW5dLAorICAgICAgICAnSWYgeW91IHNwZWNpZnkgY2hpbGRyZW4gdG8gPHRleHRhcmVhPiwg
aXQgbXVzdCBiZSBhIHNpbmdsZSBzdHJpbmcgJyArCisgICAgICAgICdvciBudW1iZXIuLCBub3Qg
YW4gYXJyYXkgb3Igb2JqZWN0LicKKyAgICAgICk7CisgICAgICBkZWZhdWx0VmFsdWUgPSAnJyAr
IGNoaWxkcmVuOworICAgIH0KKyAgICBkZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWUgfHwgJyc7
CisgICAgcmV0dXJuIHsKKyAgICAgIC8vIFdlIHNhdmUgdGhlIGluaXRpYWwgdmFsdWUgc28gdGhh
dCBgUmVhY3ROYXRpdmVDb21wb25lbnRgIGRvZXNuJ3QgdXBkYXRlCisgICAgICAvLyBgdGV4dENv
bnRlbnRgICh1bm5lY2Vzc2FyeSBzaW5jZSB3ZSB1cGRhdGUgdmFsdWUpLgorICAgICAgaW5pdGlh
bFZhbHVlOiB0aGlzLnByb3BzLnZhbHVlICE9IG51bGwgPyB0aGlzLnByb3BzLnZhbHVlIDogZGVm
YXVsdFZhbHVlLAorICAgICAgdmFsdWU6IGRlZmF1bHRWYWx1ZQorICAgIH07CisgIH0sCisKKyAg
c2hvdWxkQ29tcG9uZW50VXBkYXRlOiBmdW5jdGlvbigpIHsKKyAgICAvLyBEZWZlciBhbnkgdXBk
YXRlcyB0byB0aGlzIGNvbXBvbmVudCBkdXJpbmcgdGhlIGBvbkNoYW5nZWAgaGFuZGxlci4KKyAg
ICByZXR1cm4gIXRoaXMuX2lzQ2hhbmdpbmc7CisgIH0sCisKKyAgZ2V0VmFsdWU6IGZ1bmN0aW9u
KCkgeworICAgIHJldHVybiB0aGlzLnByb3BzLnZhbHVlICE9IG51bGwgPyB0aGlzLnByb3BzLnZh
bHVlIDogdGhpcy5zdGF0ZS52YWx1ZTsKKyAgfSwKKworICByZW5kZXI6IGZ1bmN0aW9uKCkgewor
ICAgIC8vIENsb25lIGB0aGlzLnByb3BzYCBzbyB3ZSBkb24ndCBtdXRhdGUgdGhlIGlucHV0Lgor
ICAgIHZhciBwcm9wcyA9IG1lcmdlKHRoaXMucHJvcHMpOworCisgICAgaW52YXJpYW50KAorICAg
ICAgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT0gbnVsbCwKKyAgICAgICdgZGFuZ2Vy
b3VzbHlTZXRJbm5lckhUTUxgIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugb24gPHRleHRhcmVhPi4nCisg
ICAgKTsKKworICAgIHByb3BzLnZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpOworICAgIHByb3BzLm9u
Q2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2U7CisKKyAgICAvLyBBbHdheXMgc2V0IGNoaWxkcmVu
IHRvIHRoZSBzYW1lIHRoaW5nLiBJbiBJRTksIHRoZSBzZWxlY3Rpb24gcmFuZ2Ugd2lsbAorICAg
IC8vIGdldCByZXNldCBpZiBgdGV4dENvbnRlbnRgIGlzIG11dGF0ZWQuCisgICAgcmV0dXJuIHRl
eHRhcmVhKHByb3BzLCB0aGlzLnN0YXRlLmluaXRpYWxWYWx1ZSk7CisgIH0sCisKKyAgY29tcG9u
ZW50RGlkVXBkYXRlOiBmdW5jdGlvbihwcmV2UHJvcHMsIHByZXZTdGF0ZSwgcm9vdE5vZGUpIHsK
KyAgICBpZiAodGhpcy5wcm9wcy52YWx1ZSAhPSBudWxsKSB7CisgICAgICBET01Qcm9wZXJ0eU9w
ZXJhdGlvbnMuc2V0VmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAgcm9vdE5vZGUsCisgICAgICAg
ICd2YWx1ZScsCisgICAgICAgIHRoaXMucHJvcHMudmFsdWUgfHwgJycKKyAgICAgICk7CisgICAg
fQorICB9LAorCisgIGhhbmRsZUNoYW5nZTogZnVuY3Rpb24oZXZlbnQpIHsKKyAgICB2YXIgcmV0
dXJuVmFsdWU7CisgICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHsKKyAgICAgIHRoaXMuX2lz
Q2hhbmdpbmcgPSB0cnVlOworICAgICAgcmV0dXJuVmFsdWUgPSB0aGlzLnByb3BzLm9uQ2hhbmdl
KGV2ZW50KTsKKyAgICAgIHRoaXMuX2lzQ2hhbmdpbmcgPSBmYWxzZTsKKyAgICB9CisgICAgdGhp
cy5zZXRTdGF0ZSh7dmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZX0pOworICAgIHJldHVybiByZXR1
cm5WYWx1ZTsKKyAgfQorCit9KTsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTVRleHRhcmVh
OworCit9LHsiLi9ET01Qcm9wZXJ0eU9wZXJhdGlvbnMiOjgsIi4vUmVhY3RDb21wb3NpdGVDb21w
b25lbnQiOjIzLCIuL1JlYWN0RE9NIjoyNSwiLi9pbnZhcmlhbnQiOjc1LCIuL21lcmdlIjo4MX1d
LDMyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0
IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExp
Y2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0
aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBt
YXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBh
Y2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBh
cHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFT
SVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0
aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNp
ZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVu
ZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERlZmF1bHRJbmpl
Y3Rpb24KKyAqLworCisidXNlIHN0cmljdCI7CisKK3ZhciBSZWFjdERPTSA9IHJlcXVpcmUoIi4v
UmVhY3RET00iKTsKK3ZhciBSZWFjdERPTUZvcm0gPSByZXF1aXJlKCIuL1JlYWN0RE9NRm9ybSIp
OwordmFyIFJlYWN0RE9NSW5wdXQgPSByZXF1aXJlKCIuL1JlYWN0RE9NSW5wdXQiKTsKK3ZhciBS
ZWFjdERPTU9wdGlvbiA9IHJlcXVpcmUoIi4vUmVhY3RET01PcHRpb24iKTsKK3ZhciBSZWFjdERP
TVNlbGVjdCA9IHJlcXVpcmUoIi4vUmVhY3RET01TZWxlY3QiKTsKK3ZhciBSZWFjdERPTVRleHRh
cmVhID0gcmVxdWlyZSgiLi9SZWFjdERPTVRleHRhcmVhIik7CisKK3ZhciBEZWZhdWx0RE9NUHJv
cGVydHlDb25maWcgPSByZXF1aXJlKCIuL0RlZmF1bHRET01Qcm9wZXJ0eUNvbmZpZyIpOwordmFy
IERPTVByb3BlcnR5ID0gcmVxdWlyZSgiLi9ET01Qcm9wZXJ0eSIpOworCit2YXIgRGVmYXVsdEV2
ZW50UGx1Z2luT3JkZXIgPSByZXF1aXJlKCIuL0RlZmF1bHRFdmVudFBsdWdpbk9yZGVyIik7Cit2
YXIgRW50ZXJMZWF2ZUV2ZW50UGx1Z2luID0gcmVxdWlyZSgiLi9FbnRlckxlYXZlRXZlbnRQbHVn
aW4iKTsKK3ZhciBDaGFuZ2VFdmVudFBsdWdpbiA9IHJlcXVpcmUoIi4vQ2hhbmdlRXZlbnRQbHVn
aW4iKTsKK3ZhciBFdmVudFBsdWdpbkh1YiA9IHJlcXVpcmUoIi4vRXZlbnRQbHVnaW5IdWIiKTsK
K3ZhciBSZWFjdEluc3RhbmNlSGFuZGxlcyA9IHJlcXVpcmUoIi4vUmVhY3RJbnN0YW5jZUhhbmRs
ZXMiKTsKK3ZhciBTaW1wbGVFdmVudFBsdWdpbiA9IHJlcXVpcmUoIi4vU2ltcGxlRXZlbnRQbHVn
aW4iKTsKKworZnVuY3Rpb24gaW5qZWN0KCkgeworICAvKioKKyAgICogSW5qZWN0IG1vZHVsZSBm
b3IgcmVzb2x2aW5nIERPTSBoaWVyYXJjaHkgYW5kIHBsdWdpbiBvcmRlcmluZy4KKyAgICovCisg
IEV2ZW50UGx1Z2luSHViLmluamVjdGlvbi5pbmplY3RFdmVudFBsdWdpbk9yZGVyKERlZmF1bHRF
dmVudFBsdWdpbk9yZGVyKTsKKyAgRXZlbnRQbHVnaW5IdWIuaW5qZWN0aW9uLmluamVjdEluc3Rh
bmNlSGFuZGxlKFJlYWN0SW5zdGFuY2VIYW5kbGVzKTsKKworICAvKioKKyAgICogU29tZSBpbXBv
cnRhbnQgZXZlbnQgcGx1Z2lucyBpbmNsdWRlZCBieSBkZWZhdWx0ICh3aXRob3V0IGhhdmluZyB0
byByZXF1aXJlCisgICAqIHRoZW0pLgorICAgKi8KKyAgRXZlbnRQbHVnaW5IdWIuaW5qZWN0aW9u
LmluamVjdEV2ZW50UGx1Z2luc0J5TmFtZSh7CisgICAgJ1NpbXBsZUV2ZW50UGx1Z2luJzogU2lt
cGxlRXZlbnRQbHVnaW4sCisgICAgJ0VudGVyTGVhdmVFdmVudFBsdWdpbic6IEVudGVyTGVhdmVF
dmVudFBsdWdpbiwKKyAgICAnQ2hhbmdlRXZlbnRQbHVnaW4nOiBDaGFuZ2VFdmVudFBsdWdpbgor
ICB9KTsKKworICBSZWFjdERPTS5pbmplY3Rpb24uaW5qZWN0Q29tcG9uZW50Q2xhc3Nlcyh7Cisg
ICAgZm9ybTogUmVhY3RET01Gb3JtLAorICAgIGlucHV0OiBSZWFjdERPTUlucHV0LAorICAgIG9w
dGlvbjogUmVhY3RET01PcHRpb24sCisgICAgc2VsZWN0OiBSZWFjdERPTVNlbGVjdCwKKyAgICB0
ZXh0YXJlYTogUmVhY3RET01UZXh0YXJlYQorICB9KTsKKworICBET01Qcm9wZXJ0eS5pbmplY3Rp
b24uaW5qZWN0RE9NUHJvcGVydHlDb25maWcoRGVmYXVsdERPTVByb3BlcnR5Q29uZmlnKTsKK30K
KworbW9kdWxlLmV4cG9ydHMgPSB7CisgIGluamVjdDogaW5qZWN0Cit9OworCit9LHsiLi9DaGFu
Z2VFdmVudFBsdWdpbiI6NSwiLi9ET01Qcm9wZXJ0eSI6NywiLi9EZWZhdWx0RE9NUHJvcGVydHlD
b25maWciOjEwLCIuL0RlZmF1bHRFdmVudFBsdWdpbk9yZGVyIjoxMSwiLi9FbnRlckxlYXZlRXZl
bnRQbHVnaW4iOjEyLCIuL0V2ZW50UGx1Z2luSHViIjoxNSwiLi9SZWFjdERPTSI6MjUsIi4vUmVh
Y3RET01Gb3JtIjoyNiwiLi9SZWFjdERPTUlucHV0IjoyOCwiLi9SZWFjdERPTU9wdGlvbiI6Mjks
Ii4vUmVhY3RET01TZWxlY3QiOjMwLCIuL1JlYWN0RE9NVGV4dGFyZWEiOjMxLCIuL1JlYWN0SW5z
dGFuY2VIYW5kbGVzIjozNywiLi9TaW1wbGVFdmVudFBsdWdpbiI6NDl9XSwzMzpbZnVuY3Rpb24o
cmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisoZnVuY3Rpb24oKXsvKioKKyAqIENvcHlyaWdodCAy
MDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNl
bnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhp
cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5
IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNo
ZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBw
bGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmli
dXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lT
LAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhl
ciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZp
YyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRl
ciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RFdmVudEVtaXR0ZXIK
KyAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5CisgKi8KKworInVzZSBzdHJpY3QiOworCit2YXIg
RXZlbnRDb25zdGFudHMgPSByZXF1aXJlKCIuL0V2ZW50Q29uc3RhbnRzIik7Cit2YXIgRXZlbnRM
aXN0ZW5lciA9IHJlcXVpcmUoIi4vRXZlbnRMaXN0ZW5lciIpOwordmFyIEV2ZW50UGx1Z2luSHVi
ID0gcmVxdWlyZSgiLi9FdmVudFBsdWdpbkh1YiIpOwordmFyIEV4ZWN1dGlvbkVudmlyb25tZW50
ID0gcmVxdWlyZSgiLi9FeGVjdXRpb25FbnZpcm9ubWVudCIpOwordmFyIFJlYWN0VXBkYXRlcyA9
IHJlcXVpcmUoIi4vUmVhY3RVcGRhdGVzIik7Cit2YXIgVmlld3BvcnRNZXRyaWNzID0gcmVxdWly
ZSgiLi9WaWV3cG9ydE1ldHJpY3MiKTsKKwordmFyIGludmFyaWFudCA9IHJlcXVpcmUoIi4vaW52
YXJpYW50Iik7Cit2YXIgaXNFdmVudFN1cHBvcnRlZCA9IHJlcXVpcmUoIi4vaXNFdmVudFN1cHBv
cnRlZCIpOworCisvKioKKyAqIFN1bW1hcnkgb2YgYFJlYWN0RXZlbnRFbWl0dGVyYCBldmVudCBo
YW5kbGluZzoKKyAqCisgKiAgLSBUb3AtbGV2ZWwgZGVsZWdhdGlvbiBpcyB1c2VkIHRvIHRyYXAg
bmF0aXZlIGJyb3dzZXIgZXZlbnRzLiBXZSBub3JtYWxpemUKKyAqICAgIGFuZCBkZS1kdXBsaWNh
dGUgZXZlbnRzIHRvIGFjY291bnQgZm9yIGJyb3dzZXIgcXVpcmtzLgorICoKKyAqICAtIEZvcndh
cmQgdGhlc2UgbmF0aXZlIGV2ZW50cyAod2l0aCB0aGUgYXNzb2NpYXRlZCB0b3AtbGV2ZWwgdHlw
ZSB1c2VkIHRvCisgKiAgICB0cmFwIGl0KSB0byBgRXZlbnRQbHVnaW5IdWJgLCB3aGljaCBpbiB0
dXJuIHdpbGwgYXNrIHBsdWdpbnMgaWYgdGhleSB3YW50CisgKiAgICB0byBleHRyYWN0IGFueSBz
eW50aGV0aWMgZXZlbnRzLgorICoKKyAqICAtIFRoZSBgRXZlbnRQbHVnaW5IdWJgIHdpbGwgdGhl
biBwcm9jZXNzIGVhY2ggZXZlbnQgYnkgYW5ub3RhdGluZyB0aGVtIHdpdGgKKyAqICAgICJkaXNw
YXRjaGVzIiwgYSBzZXF1ZW5jZSBvZiBsaXN0ZW5lcnMgYW5kIElEcyB0aGF0IGNhcmUgYWJvdXQg
dGhhdCBldmVudC4KKyAqCisgKiAgLSBUaGUgYEV2ZW50UGx1Z2luSHViYCB0aGVuIGRpc3BhdGNo
ZXMgdGhlIGV2ZW50cy4KKyAqCisgKiBPdmVydmlldyBvZiBSZWFjdCBhbmQgdGhlIGV2ZW50IHN5
c3RlbToKKyAqCisgKiAgICAgICAgICAgICAgICAgICAuCisgKiArLS0tLS0tLS0tLS0tKyAgICAu
CisgKiB8ICAgIERPTSAgICAgfCAgICAuCisgKiArLS0tLS0tLS0tLS0tKyAgICAuICAgICAgICAg
ICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKKyAqICAgICAgICsgICAgICAgICAgIC4gICAg
ICAgICAgICAgICArLS0tLS0tLS0rfFNpbXBsZUV2ZW50fAorICogICAgICAgfCAgICAgICAgICAg
LiAgICAgICAgICAgICAgIHwgICAgICAgICB8UGx1Z2luICAgICB8CisgKiArLS0tLS18LS0tLS0t
KyAgICAuICAgICAgICAgICAgICAgdiAgICAgICAgICstLS0tLS0tLS0tLSsKKyAqIHwgICAgIHwg
ICAgICB8ICAgIC4gICAgKy0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgKy0tLS0t
LS0tLS0tLSsKKyAqIHwgICAgICstLS0tLS0tLS0tLS4tLS0+fEV2ZW50UGx1Z2luSHVifCAgICAg
ICAgICAgICAgICAgICAgfCAgICBFdmVudCAgIHwKKyAqIHwgICAgICAgICAgICB8ICAgIC4gICAg
fCAgICAgICAgICAgICAgfCAgICAgKy0tLS0tLS0tLS0tKyAgfCBQcm9wYWdhdG9yc3wKKyAqIHwg
UmVhY3RFdmVudCB8ICAgIC4gICAgfCAgICAgICAgICAgICAgfCAgICAgfFRhcEV2ZW50ICAgfCAg
fC0tLS0tLS0tLS0tLXwKKyAqIHwgIEVtaXR0ZXIgICB8ICAgIC4gICAgfCAgICAgICAgICAgICAg
fDwtLS0rfFBsdWdpbiAgICAgfCAgfG90aGVyIHBsdWdpbnwKKyAqIHwgICAgICAgICAgICB8ICAg
IC4gICAgfCAgICAgICAgICAgICAgfCAgICAgKy0tLS0tLS0tLS0tKyAgfCAgdXRpbGl0aWVzIHwK
KyAqIHwgICAgICstLS0tLS0tLS0tLS4tLS0tLS0tLS0rICAgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgKy0tLS0tLS0tLS0tLSsKKyAqIHwgICAgIHwgICAgICB8ICAgIC4gICAgKy0tLS18LS0t
LS0tLS0tKworICogKy0tLS0tfC0tLS0tLSsgICAgLiAgICAgICAgIHwgICAgICBeICAgICAgICAr
LS0tLS0tLS0tLS0rCisgKiAgICAgICB8ICAgICAgICAgICAuICAgICAgICAgfCAgICAgIHwgICAg
ICAgIHxFbnRlci9MZWF2ZXwKKyAqICAgICAgICsgICAgICAgICAgIC4gICAgICAgICB8ICAgICAg
Ky0tLS0tLS0rfFBsdWdpbiAgICAgfAorICogKy0tLS0tLS0tLS0tLS0rICAgLiAgICAgICAgIHYg
ICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rCisgKiB8IGFwcGxpY2F0aW9uIHwgICAuICAgICst
LS0tLS0tLS0tKworICogfC0tLS0tLS0tLS0tLS18ICAgLiAgICB8IGNhbGxiYWNrIHwKKyAqIHwg
ICAgICAgICAgICAgfCAgIC4gICAgfCByZWdpc3RyeSB8CisgKiB8ICAgICAgICAgICAgIHwgICAu
ICAgICstLS0tLS0tLS0tKworICogKy0tLS0tLS0tLS0tLS0rICAgLgorICogICAgICAgICAgICAg
ICAgICAgLgorICogICAgUmVhY3QgQ29yZSAgICAgLiAgR2VuZXJhbCBQdXJwb3NlIEV2ZW50IFBs
dWdpbiBTeXN0ZW0KKyAqLworCisvKioKKyAqIFdoZXRoZXIgb3Igbm90IGBlbnN1cmVMaXN0ZW5p
bmdgIGhhcyBiZWVuIGludm9rZWQuCisgKiBAdHlwZSB7Ym9vbGVhbn0KKyAqIEBwcml2YXRlCisg
Ki8KK3ZhciBfaXNMaXN0ZW5pbmcgPSBmYWxzZTsKKworLyoqCisgKiBUcmFwcyB0b3AtbGV2ZWwg
ZXZlbnRzIGJ5IHVzaW5nIGV2ZW50IGJ1YmJsaW5nLgorICoKKyAqIEBwYXJhbSB7c3RyaW5nfSB0
b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC4KKyAqIEBwYXJhbSB7c3Ry
aW5nfSBoYW5kbGVyQmFzZU5hbWUgRXZlbnQgbmFtZSAoZS5nLiAiY2xpY2siKS4KKyAqIEBwYXJh
bSB7RE9NRXZlbnRUYXJnZXR9IGVsZW1lbnQgRWxlbWVudCBvbiB3aGljaCB0byBhdHRhY2ggbGlz
dGVuZXIuCisgKiBAaW50ZXJuYWwKKyAqLworZnVuY3Rpb24gdHJhcEJ1YmJsZWRFdmVudCh0b3BM
ZXZlbFR5cGUsIGhhbmRsZXJCYXNlTmFtZSwgZWxlbWVudCkgeworICBFdmVudExpc3RlbmVyLmxp
c3RlbigKKyAgICBlbGVtZW50LAorICAgIGhhbmRsZXJCYXNlTmFtZSwKKyAgICBSZWFjdEV2ZW50
RW1pdHRlci5Ub3BMZXZlbENhbGxiYWNrQ3JlYXRvci5jcmVhdGVUb3BMZXZlbENhbGxiYWNrKAor
ICAgICAgdG9wTGV2ZWxUeXBlCisgICAgKQorICApOworfQorCisvKioKKyAqIFRyYXBzIGEgdG9w
LWxldmVsIGV2ZW50IGJ5IHVzaW5nIGV2ZW50IGNhcHR1cmluZy4KKyAqCisgKiBAcGFyYW0ge3N0
cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENvbnN0YW50c2AuCisgKiBAcGFy
YW0ge3N0cmluZ30gaGFuZGxlckJhc2VOYW1lIEV2ZW50IG5hbWUgKGUuZy4gImNsaWNrIikuCisg
KiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSBlbGVtZW50IEVsZW1lbnQgb24gd2hpY2ggdG8gYXR0
YWNoIGxpc3RlbmVyLgorICogQGludGVybmFsCisgKi8KK2Z1bmN0aW9uIHRyYXBDYXB0dXJlZEV2
ZW50KHRvcExldmVsVHlwZSwgaGFuZGxlckJhc2VOYW1lLCBlbGVtZW50KSB7CisgIEV2ZW50TGlz
dGVuZXIuY2FwdHVyZSgKKyAgICBlbGVtZW50LAorICAgIGhhbmRsZXJCYXNlTmFtZSwKKyAgICBS
ZWFjdEV2ZW50RW1pdHRlci5Ub3BMZXZlbENhbGxiYWNrQ3JlYXRvci5jcmVhdGVUb3BMZXZlbENh
bGxiYWNrKAorICAgICAgdG9wTGV2ZWxUeXBlCisgICAgKQorICApOworfQorCisvKioKKyAqIExp
c3RlbnMgdG8gd2luZG93IHNjcm9sbCBhbmQgcmVzaXplIGV2ZW50cy4gV2UgY2FjaGUgc2Nyb2xs
IHZhbHVlcyBzbyB0aGF0CisgKiBhcHBsaWNhdGlvbiBjb2RlIGNhbiBhY2Nlc3MgdGhlbSB3aXRo
b3V0IHRyaWdnZXJpbmcgcmVmbG93cy4KKyAqCisgKiBOT1RFOiBTY3JvbGwgZXZlbnRzIGRvIG5v
dCBidWJibGUuCisgKgorICogQHByaXZhdGUKKyAqIEBzZWUgaHR0cDovL3d3dy5xdWlya3Ntb2Rl
Lm9yZy9kb20vZXZlbnRzL3Njcm9sbC5odG1sCisgKi8KK2Z1bmN0aW9uIHJlZ2lzdGVyU2Nyb2xs
VmFsdWVNb25pdG9yaW5nKCkgeworICB2YXIgcmVmcmVzaCA9IFZpZXdwb3J0TWV0cmljcy5yZWZy
ZXNoU2Nyb2xsVmFsdWVzOworICBFdmVudExpc3RlbmVyLmxpc3Rlbih3aW5kb3csICdzY3JvbGwn
LCByZWZyZXNoKTsKKyAgRXZlbnRMaXN0ZW5lci5saXN0ZW4od2luZG93LCAncmVzaXplJywgcmVm
cmVzaCk7Cit9CisKKy8qKgorICogV2UgbGlzdGVuIGZvciBidWJibGVkIHRvdWNoIGV2ZW50cyBv
biB0aGUgZG9jdW1lbnQgb2JqZWN0LgorICoKKyAqIEZpcmVmb3ggdjguMDEgKGFuZCBwb3NzaWJs
eSBvdGhlcnMpIGV4aGliaXRlZCBzdHJhbmdlIGJlaGF2aW9yIHdoZW4gbW91bnRpbmcKKyAqIGBv
bm1vdXNlbW92ZWAgZXZlbnRzIGF0IHNvbWUgbm9kZSB0aGF0IHdhcyBub3QgdGhlIGRvY3VtZW50
IGVsZW1lbnQuIFRoZQorICogc3ltcHRvbXMgd2VyZSB0aGF0IGlmIHlvdXIgbW91c2UgaXMgbm90
IG1vdmluZyBvdmVyIHNvbWV0aGluZyBjb250YWluZWQKKyAqIHdpdGhpbiB0aGF0IG1vdW50IHBv
aW50IChmb3IgZXhhbXBsZSBvbiB0aGUgYmFja2dyb3VuZCkgdGhlIHRvcC1sZXZlbAorICogbGlz
dGVuZXJzIGZvciBgb25tb3VzZW1vdmVgIHdvbid0IGJlIGNhbGxlZC4gSG93ZXZlciwgaWYgeW91
IHJlZ2lzdGVyIHRoZQorICogYG1vdXNlbW92ZWAgb24gdGhlIGRvY3VtZW50IG9iamVjdCwgdGhl
biBpdCB3aWxsIG9mIGNvdXJzZSBjYXRjaCBhbGwKKyAqIGBtb3VzZW1vdmVgcy4gVGhpcyBhbG9u
ZyB3aXRoIGlPUyBxdWlya3MsIGp1c3RpZmllcyByZXN0cmljdGluZyB0b3AtbGV2ZWwKKyAqIGxp
c3RlbmVycyB0byB0aGUgZG9jdW1lbnQgb2JqZWN0IG9ubHksIGF0IGxlYXN0IGZvciB0aGVzZSBt
b3ZlbWVudCB0eXBlcyBvZgorICogZXZlbnRzIGFuZCBwb3NzaWJseSBhbGwgZXZlbnRzLgorICoK
KyAqIEBzZWUgaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTAvMDkv
Y2xpY2tfZXZlbnRfZGVsLmh0bWwKKyAqCisgKiBBbHNvLCBga2V5dXBgL2BrZXlwcmVzc2AvYGtl
eWRvd25gIGRvIG5vdCBidWJibGUgdG8gdGhlIHdpbmRvdyBvbiBJRSwgYnV0CisgKiB0aGV5IGJ1
YmJsZSB0byBkb2N1bWVudC4KKyAqCisgKiBAcGFyYW0ge2Jvb2xlYW59IHRvdWNoTm90TW91c2Ug
TGlzdGVuIHRvIHRvdWNoIGV2ZW50cyBpbnN0ZWFkIG9mIG1vdXNlLgorICogQHByaXZhdGUKKyAq
IEBzZWUgaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9kb20vZXZlbnRzL2tleXMuaHRtbC4KKyAq
LworZnVuY3Rpb24gbGlzdGVuQXRUb3BMZXZlbCh0b3VjaE5vdE1vdXNlKSB7CisgIGludmFyaWFu
dCgKKyAgICAhX2lzTGlzdGVuaW5nLAorICAgICdsaXN0ZW5BdFRvcExldmVsKC4uLik6IENhbm5v
dCBzZXR1cCB0b3AtbGV2ZWwgbGlzdGVuZXIgbW9yZSB0aGFuIG9uY2UuJworICApOworICB2YXIg
dG9wTGV2ZWxUeXBlcyA9IEV2ZW50Q29uc3RhbnRzLnRvcExldmVsVHlwZXM7CisgIHZhciBtb3Vu
dEF0ID0gZG9jdW1lbnQ7CisKKyAgcmVnaXN0ZXJTY3JvbGxWYWx1ZU1vbml0b3JpbmcoKTsKKyAg
dHJhcEJ1YmJsZWRFdmVudCh0b3BMZXZlbFR5cGVzLnRvcE1vdXNlT3ZlciwgJ21vdXNlb3Zlcics
IG1vdW50QXQpOworICB0cmFwQnViYmxlZEV2ZW50KHRvcExldmVsVHlwZXMudG9wTW91c2VEb3du
LCAnbW91c2Vkb3duJywgbW91bnRBdCk7CisgIHRyYXBCdWJibGVkRXZlbnQodG9wTGV2ZWxUeXBl
cy50b3BNb3VzZVVwLCAnbW91c2V1cCcsIG1vdW50QXQpOworICB0cmFwQnViYmxlZEV2ZW50KHRv
cExldmVsVHlwZXMudG9wTW91c2VNb3ZlLCAnbW91c2Vtb3ZlJywgbW91bnRBdCk7CisgIHRyYXBC
dWJibGVkRXZlbnQodG9wTGV2ZWxUeXBlcy50b3BNb3VzZU91dCwgJ21vdXNlb3V0JywgbW91bnRB
dCk7CisgIHRyYXBCdWJibGVkRXZlbnQodG9wTGV2ZWxUeXBlcy50b3BDbGljaywgJ2NsaWNrJywg
bW91bnRBdCk7CisgIHRyYXBCdWJibGVkRXZlbnQodG9wTGV2ZWxUeXBlcy50b3BEb3VibGVDbGlj
aywgJ2RibGNsaWNrJywgbW91bnRBdCk7CisgIGlmICh0b3VjaE5vdE1vdXNlKSB7CisgICAgdHJh
cEJ1YmJsZWRFdmVudCh0b3BMZXZlbFR5cGVzLnRvcFRvdWNoU3RhcnQsICd0b3VjaHN0YXJ0Jywg
bW91bnRBdCk7CisgICAgdHJhcEJ1YmJsZWRFdmVudCh0b3BMZXZlbFR5cGVzLnRvcFRvdWNoRW5k
LCAndG91Y2hlbmQnLCBtb3VudEF0KTsKKyAgICB0cmFwQnViYmxlZEV2ZW50KHRvcExldmVsVHlw
ZXMudG9wVG91Y2hNb3ZlLCAndG91Y2htb3ZlJywgbW91bnRBdCk7CisgICAgdHJhcEJ1YmJsZWRF
dmVudCh0b3BMZXZlbFR5cGVzLnRvcFRvdWNoQ2FuY2VsLCAndG91Y2hjYW5jZWwnLCBtb3VudEF0
KTsKKyAgfQorICB0cmFwQnViYmxlZEV2ZW50KHRvcExldmVsVHlwZXMudG9wS2V5VXAsICdrZXl1
cCcsIG1vdW50QXQpOworICB0cmFwQnViYmxlZEV2ZW50KHRvcExldmVsVHlwZXMudG9wS2V5UHJl
c3MsICdrZXlwcmVzcycsIG1vdW50QXQpOworICB0cmFwQnViYmxlZEV2ZW50KHRvcExldmVsVHlw
ZXMudG9wS2V5RG93biwgJ2tleWRvd24nLCBtb3VudEF0KTsKKyAgdHJhcEJ1YmJsZWRFdmVudCh0
b3BMZXZlbFR5cGVzLnRvcElucHV0LCAnaW5wdXQnLCBtb3VudEF0KTsKKyAgdHJhcEJ1YmJsZWRF
dmVudCh0b3BMZXZlbFR5cGVzLnRvcENoYW5nZSwgJ2NoYW5nZScsIG1vdW50QXQpOworICB0cmFw
QnViYmxlZEV2ZW50KAorICAgIHRvcExldmVsVHlwZXMudG9wU2VsZWN0aW9uQ2hhbmdlLAorICAg
ICdzZWxlY3Rpb25jaGFuZ2UnLAorICAgIG1vdW50QXQKKyAgKTsKKyAgdHJhcEJ1YmJsZWRFdmVu
dCgKKyAgICB0b3BMZXZlbFR5cGVzLnRvcERPTUNoYXJhY3RlckRhdGFNb2RpZmllZCwKKyAgICAn
RE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkJywKKyAgICBtb3VudEF0CisgICk7CisKKyAgaWYgKGlz
RXZlbnRTdXBwb3J0ZWQoJ2RyYWcnKSkgeworICAgIHRyYXBCdWJibGVkRXZlbnQodG9wTGV2ZWxU
eXBlcy50b3BEcmFnLCAnZHJhZycsIG1vdW50QXQpOworICAgIHRyYXBCdWJibGVkRXZlbnQodG9w
TGV2ZWxUeXBlcy50b3BEcmFnRW5kLCAnZHJhZ2VuZCcsIG1vdW50QXQpOworICAgIHRyYXBCdWJi
bGVkRXZlbnQodG9wTGV2ZWxUeXBlcy50b3BEcmFnRW50ZXIsICdkcmFnZW50ZXInLCBtb3VudEF0
KTsKKyAgICB0cmFwQnViYmxlZEV2ZW50KHRvcExldmVsVHlwZXMudG9wRHJhZ0V4aXQsICdkcmFn
ZXhpdCcsIG1vdW50QXQpOworICAgIHRyYXBCdWJibGVkRXZlbnQodG9wTGV2ZWxUeXBlcy50b3BE
cmFnTGVhdmUsICdkcmFnbGVhdmUnLCBtb3VudEF0KTsKKyAgICB0cmFwQnViYmxlZEV2ZW50KHRv
cExldmVsVHlwZXMudG9wRHJhZ092ZXIsICdkcmFnb3ZlcicsIG1vdW50QXQpOworICAgIHRyYXBC
dWJibGVkRXZlbnQodG9wTGV2ZWxUeXBlcy50b3BEcmFnU3RhcnQsICdkcmFnc3RhcnQnLCBtb3Vu
dEF0KTsKKyAgICB0cmFwQnViYmxlZEV2ZW50KHRvcExldmVsVHlwZXMudG9wRHJvcCwgJ2Ryb3An
LCBtb3VudEF0KTsKKyAgfQorCisgIGlmIChpc0V2ZW50U3VwcG9ydGVkKCd3aGVlbCcpKSB7Cisg
ICAgdHJhcEJ1YmJsZWRFdmVudCh0b3BMZXZlbFR5cGVzLnRvcFdoZWVsLCAnd2hlZWwnLCBtb3Vu
dEF0KTsKKyAgfSBlbHNlIGlmIChpc0V2ZW50U3VwcG9ydGVkKCdtb3VzZXdoZWVsJykpIHsKKyAg
ICB0cmFwQnViYmxlZEV2ZW50KHRvcExldmVsVHlwZXMudG9wV2hlZWwsICdtb3VzZXdoZWVsJywg
bW91bnRBdCk7CisgIH0gZWxzZSB7CisgICAgLy8gRmlyZWZveCBuZWVkcyB0byBjYXB0dXJlIGEg
ZGlmZmVyZW50IG1vdXNlIHNjcm9sbCBldmVudC4KKyAgICAvLyBAc2VlIGh0dHA6Ly93d3cucXVp
cmtzbW9kZS5vcmcvZG9tL2V2ZW50cy90ZXN0cy9zY3JvbGwuaHRtbAorICAgIHRyYXBCdWJibGVk
RXZlbnQodG9wTGV2ZWxUeXBlcy50b3BXaGVlbCwgJ0RPTU1vdXNlU2Nyb2xsJywgbW91bnRBdCk7
CisgIH0KKworICAvLyBJRTw5IGRvZXMgbm90IHN1cHBvcnQgY2FwdHVyaW5nIHNvIGp1c3QgdHJh
cCB0aGUgYnViYmxlZCBldmVudCB0aGVyZS4KKyAgaWYgKGlzRXZlbnRTdXBwb3J0ZWQoJ3Njcm9s
bCcsIHRydWUpKSB7CisgICAgdHJhcENhcHR1cmVkRXZlbnQodG9wTGV2ZWxUeXBlcy50b3BTY3Jv
bGwsICdzY3JvbGwnLCBtb3VudEF0KTsKKyAgfSBlbHNlIHsKKyAgICB0cmFwQnViYmxlZEV2ZW50
KHRvcExldmVsVHlwZXMudG9wU2Nyb2xsLCAnc2Nyb2xsJywgd2luZG93KTsKKyAgfQorCisgIGlm
IChpc0V2ZW50U3VwcG9ydGVkKCdmb2N1cycsIHRydWUpKSB7CisgICAgdHJhcENhcHR1cmVkRXZl
bnQodG9wTGV2ZWxUeXBlcy50b3BGb2N1cywgJ2ZvY3VzJywgbW91bnRBdCk7CisgICAgdHJhcENh
cHR1cmVkRXZlbnQodG9wTGV2ZWxUeXBlcy50b3BCbHVyLCAnYmx1cicsIG1vdW50QXQpOworICB9
IGVsc2UgaWYgKGlzRXZlbnRTdXBwb3J0ZWQoJ2ZvY3VzaW4nKSkgeworICAgIC8vIElFIGhhcyBg
Zm9jdXNpbmAgYW5kIGBmb2N1c291dGAgZXZlbnRzIHdoaWNoIGJ1YmJsZS4KKyAgICAvLyBAc2Vl
IGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDA4LzA0L2RlbGVnYXRp
bmdfdGhlLmh0bWwKKyAgICB0cmFwQnViYmxlZEV2ZW50KHRvcExldmVsVHlwZXMudG9wRm9jdXMs
ICdmb2N1c2luJywgbW91bnRBdCk7CisgICAgdHJhcEJ1YmJsZWRFdmVudCh0b3BMZXZlbFR5cGVz
LnRvcEJsdXIsICdmb2N1c291dCcsIG1vdW50QXQpOworICB9Cit9CisKKy8qKgorICogYFJlYWN0
RXZlbnRFbWl0dGVyYCBpcyB1c2VkIHRvIGF0dGFjaCB0b3AtbGV2ZWwgZXZlbnQgbGlzdGVuZXJz
LiBGb3IgZXhhbXBsZToKKyAqCisgKiAgIFJlYWN0RXZlbnRFbWl0dGVyLnB1dExpc3RlbmVyKCdt
eUlEJywgJ29uQ2xpY2snLCBteUZ1bmN0aW9uKTsKKyAqCisgKiBUaGlzIHdvdWxkIGFsbG9jYXRl
IGEgInJlZ2lzdHJhdGlvbiIgb2YgYCgnb25DbGljaycsIG15RnVuY3Rpb24pYCBvbiAnbXlJRCcu
CisgKgorICogQGludGVybmFsCisgKi8KK3ZhciBSZWFjdEV2ZW50RW1pdHRlciA9IHsKKworICAv
KioKKyAgICogUmVhY3QgcmVmZXJlbmNlcyBgUmVhY3RFdmVudFRvcExldmVsQ2FsbGJhY2tgIHVz
aW5nIHRoaXMgcHJvcGVydHkgaW4gb3JkZXIKKyAgICogdG8gYWxsb3cgZGVwZW5kZW5jeSBpbmpl
Y3Rpb24gdmlhIGBlbnN1cmVMaXN0ZW5pbmdgLgorICAgKi8KKyAgVG9wTGV2ZWxDYWxsYmFja0Ny
ZWF0b3I6IG51bGwsCisKKyAgLyoqCisgICAqIEVuc3VyZXMgdGhhdCB0b3AtbGV2ZWwgZXZlbnQg
ZGVsZWdhdGlvbiBsaXN0ZW5lcnMgYXJlIGluc3RhbGxlZC4KKyAgICoKKyAgICogVGhlcmUgYXJl
IGlzc3VlcyB3aXRoIGxpc3RlbmluZyB0byBib3RoIHRvdWNoIGV2ZW50cyBhbmQgbW91c2UgZXZl
bnRzIG9uCisgICAqIHRoZSB0b3AtbGV2ZWwsIHNvIHdlIG1ha2UgdGhlIGNhbGxlciBjaG9vc2Ug
d2hpY2ggb25lIHRvIGxpc3RlbiB0by4gKElmCisgICAqIHRoZXJlJ3MgYSB0b3VjaCB0b3AtbGV2
ZWwgbGlzdGVuZXJzLCBhbmNob3JzIGRvbid0IHJlY2VpdmUgY2xpY2tzIGZvciBzb21lCisgICAq
IHJlYXNvbiwgYW5kIG9ubHkgaW4gc29tZSBjYXNlcykuCisgICAqCisgICAqIEBwYXJhbSB7Ym9v
bGVhbn0gdG91Y2hOb3RNb3VzZSBMaXN0ZW4gdG8gdG91Y2ggZXZlbnRzIGluc3RlYWQgb2YgbW91
c2UuCisgICAqIEBwYXJhbSB7b2JqZWN0fSBUb3BMZXZlbENhbGxiYWNrQ3JlYXRvcgorICAgKi8K
KyAgZW5zdXJlTGlzdGVuaW5nOiBmdW5jdGlvbih0b3VjaE5vdE1vdXNlLCBUb3BMZXZlbENhbGxi
YWNrQ3JlYXRvcikgeworICAgIGludmFyaWFudCgKKyAgICAgIEV4ZWN1dGlvbkVudmlyb25tZW50
LmNhblVzZURPTSwKKyAgICAgICdlbnN1cmVMaXN0ZW5pbmcoLi4uKTogQ2Fubm90IHRvZ2dsZSBl
dmVudCBsaXN0ZW5pbmcgaW4gYSBXb3JrZXIgJyArCisgICAgICAndGhyZWFkLiBUaGlzIGlzIGxp
a2VseSBhIGJ1ZyBpbiB0aGUgZnJhbWV3b3JrLiBQbGVhc2UgcmVwb3J0ICcgKworICAgICAgJ2lt
bWVkaWF0ZWx5LicKKyAgICApOworICAgIGlmICghX2lzTGlzdGVuaW5nKSB7CisgICAgICBSZWFj
dEV2ZW50RW1pdHRlci5Ub3BMZXZlbENhbGxiYWNrQ3JlYXRvciA9IFRvcExldmVsQ2FsbGJhY2tD
cmVhdG9yOworICAgICAgbGlzdGVuQXRUb3BMZXZlbCh0b3VjaE5vdE1vdXNlKTsKKyAgICAgIF9p
c0xpc3RlbmluZyA9IHRydWU7CisgICAgfQorICB9LAorCisgIC8qKgorICAgKiBTZXRzIHdoZXRo
ZXIgb3Igbm90IGFueSBjcmVhdGVkIGNhbGxiYWNrcyBzaG91bGQgYmUgZW5hYmxlZC4KKyAgICoK
KyAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkIFRydWUgaWYgY2FsbGJhY2tzIHNob3VsZCBi
ZSBlbmFibGVkLgorICAgKi8KKyAgc2V0RW5hYmxlZDogZnVuY3Rpb24oZW5hYmxlZCkgeworICAg
IGludmFyaWFudCgKKyAgICAgIEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSwKKyAgICAg
ICdzZXRFbmFibGVkKC4uLik6IENhbm5vdCB0b2dnbGUgZXZlbnQgbGlzdGVuaW5nIGluIGEgV29y
a2VyIHRocmVhZC4gJyArCisgICAgICAnVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gdGhlIGZyYW1l
d29yay4gUGxlYXNlIHJlcG9ydCBpbW1lZGlhdGVseS4nCisgICAgKTsKKyAgICBpZiAoUmVhY3RF
dmVudEVtaXR0ZXIuVG9wTGV2ZWxDYWxsYmFja0NyZWF0b3IpIHsKKyAgICAgIFJlYWN0RXZlbnRF
bWl0dGVyLlRvcExldmVsQ2FsbGJhY2tDcmVhdG9yLnNldEVuYWJsZWQoZW5hYmxlZCk7CisgICAg
fQorICB9LAorCisgIC8qKgorICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGNhbGxiYWNr
cyBhcmUgZW5hYmxlZC4KKyAgICovCisgIGlzRW5hYmxlZDogZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuICEhKAorICAgICAgUmVhY3RFdmVudEVtaXR0ZXIuVG9wTGV2ZWxDYWxsYmFja0NyZWF0b3Ig
JiYKKyAgICAgIFJlYWN0RXZlbnRFbWl0dGVyLlRvcExldmVsQ2FsbGJhY2tDcmVhdG9yLmlzRW5h
YmxlZCgpCisgICAgKTsKKyAgfSwKKworICAvKioKKyAgICogU3RyZWFtcyBhIGZpcmVkIHRvcC1s
ZXZlbCBldmVudCB0byBgRXZlbnRQbHVnaW5IdWJgIHdoZXJlIHBsdWdpbnMgaGF2ZSB0aGUKKyAg
ICogb3Bwb3J0dW5pdHkgdG8gY3JlYXRlIGBSZWFjdEV2ZW50YHMgdG8gYmUgZGlzcGF0Y2hlZC4K
KyAgICoKKyAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZSBSZWNvcmQgZnJvbSBgRXZl
bnRDb25zdGFudHNgLgorICAgKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSB0b3BMZXZlbFRhcmdl
dCBUaGUgbGlzdGVuaW5nIGNvbXBvbmVudCByb290IG5vZGUuCisgICAqIEBwYXJhbSB7c3RyaW5n
fSB0b3BMZXZlbFRhcmdldElEIElEIG9mIGB0b3BMZXZlbFRhcmdldGAuCisgICAqIEBwYXJhbSB7
b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC4KKyAgICovCisgIGhhbmRs
ZVRvcExldmVsOiBmdW5jdGlvbigKKyAgICAgIHRvcExldmVsVHlwZSwKKyAgICAgIHRvcExldmVs
VGFyZ2V0LAorICAgICAgdG9wTGV2ZWxUYXJnZXRJRCwKKyAgICAgIG5hdGl2ZUV2ZW50KSB7Cisg
ICAgdmFyIGV2ZW50cyA9IEV2ZW50UGx1Z2luSHViLmV4dHJhY3RFdmVudHMoCisgICAgICB0b3BM
ZXZlbFR5cGUsCisgICAgICB0b3BMZXZlbFRhcmdldCwKKyAgICAgIHRvcExldmVsVGFyZ2V0SUQs
CisgICAgICBuYXRpdmVFdmVudAorICAgICk7CisKKyAgICAvLyBFdmVudCBxdWV1ZSBiZWluZyBw
cm9jZXNzZWQgaW4gdGhlIHNhbWUgY3ljbGUgYWxsb3dzIGBwcmV2ZW50RGVmYXVsdGAuCisgICAg
UmVhY3RVcGRhdGVzLmJhdGNoZWRVcGRhdGVzKGZ1bmN0aW9uKCkgeworICAgICAgRXZlbnRQbHVn
aW5IdWIuZW5xdWV1ZUV2ZW50cyhldmVudHMpOworICAgICAgRXZlbnRQbHVnaW5IdWIucHJvY2Vz
c0V2ZW50UXVldWUoKTsKKyAgICB9KTsKKyAgfSwKKworICByZWdpc3RyYXRpb25OYW1lczogRXZl
bnRQbHVnaW5IdWIucmVnaXN0cmF0aW9uTmFtZXMsCisKKyAgcHV0TGlzdGVuZXI6IEV2ZW50UGx1
Z2luSHViLnB1dExpc3RlbmVyLAorCisgIGdldExpc3RlbmVyOiBFdmVudFBsdWdpbkh1Yi5nZXRM
aXN0ZW5lciwKKworICBkZWxldGVMaXN0ZW5lcjogRXZlbnRQbHVnaW5IdWIuZGVsZXRlTGlzdGVu
ZXIsCisKKyAgZGVsZXRlQWxsTGlzdGVuZXJzOiBFdmVudFBsdWdpbkh1Yi5kZWxldGVBbGxMaXN0
ZW5lcnMsCisKKyAgdHJhcEJ1YmJsZWRFdmVudDogdHJhcEJ1YmJsZWRFdmVudCwKKworICB0cmFw
Q2FwdHVyZWRFdmVudDogdHJhcENhcHR1cmVkRXZlbnQKKworfTsKKworbW9kdWxlLmV4cG9ydHMg
PSBSZWFjdEV2ZW50RW1pdHRlcjsKKworfSkoKQorfSx7Ii4vRXZlbnRDb25zdGFudHMiOjEzLCIu
L0V2ZW50TGlzdGVuZXIiOjE0LCIuL0V2ZW50UGx1Z2luSHViIjoxNSwiLi9FeGVjdXRpb25FbnZp
cm9ubWVudCI6MTksIi4vUmVhY3RVcGRhdGVzIjo0OCwiLi9WaWV3cG9ydE1ldHJpY3MiOjU5LCIu
L2ludmFyaWFudCI6NzUsIi4vaXNFdmVudFN1cHBvcnRlZCI6NzZ9XSwzNDpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7CisoZnVuY3Rpb24oKXsvKioKKyAqIENvcHlyaWdodCAyMDEz
IEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNl
LCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBm
aWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9i
dGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5v
cmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGlj
YWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRl
ZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAor
ICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBl
eHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBs
YW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0
aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RFdmVudFRvcExldmVsQ2Fs
bGJhY2sKKyAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5CisgKi8KKworInVzZSBzdHJpY3QiOwor
Cit2YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKCIuL0V4ZWN1dGlvbkVudmlyb25t
ZW50Iik7Cit2YXIgUmVhY3RFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL1JlYWN0RXZlbnRFbWl0
dGVyIik7Cit2YXIgUmVhY3RJRCA9IHJlcXVpcmUoIi4vUmVhY3RJRCIpOwordmFyIFJlYWN0SW5z
dGFuY2VIYW5kbGVzID0gcmVxdWlyZSgiLi9SZWFjdEluc3RhbmNlSGFuZGxlcyIpOworCit2YXIg
Z2V0RXZlbnRUYXJnZXQgPSByZXF1aXJlKCIuL2dldEV2ZW50VGFyZ2V0Iik7CisKKy8qKgorICog
QHR5cGUge2Jvb2xlYW59CisgKiBAcHJpdmF0ZQorICovCit2YXIgX3RvcExldmVsTGlzdGVuZXJz
RW5hYmxlZCA9IHRydWU7CisKKy8qKgorICogVG9wLWxldmVsIGNhbGxiYWNrIGNyZWF0b3IgdXNl
ZCB0byBpbXBsZW1lbnQgZXZlbnQgaGFuZGxpbmcgdXNpbmcgZGVsZWdhdGlvbi4KKyAqIFRoaXMg
aXMgdXNlZCB2aWEgZGVwZW5kZW5jeSBpbmplY3Rpb24gaW4gYFJlYWN0RXZlbnRFbWl0dGVyLmVu
c3VyZUxpc3RlbmluZ2AuCisgKi8KK3ZhciBSZWFjdEV2ZW50VG9wTGV2ZWxDYWxsYmFjayA9IHsK
KworICAvKioKKyAgICogU2V0cyB3aGV0aGVyIG9yIG5vdCBhbnkgY3JlYXRlZCBjYWxsYmFja3Mg
c2hvdWxkIGJlIGVuYWJsZWQuCisgICAqCisgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5hYmxlZCBU
cnVlIGlmIGNhbGxiYWNrcyBzaG91bGQgYmUgZW5hYmxlZC4KKyAgICovCisgIHNldEVuYWJsZWQ6
IGZ1bmN0aW9uKGVuYWJsZWQpIHsKKyAgICBfdG9wTGV2ZWxMaXN0ZW5lcnNFbmFibGVkID0gISFl
bmFibGVkOworICB9LAorCisgIC8qKgorICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGNh
bGxiYWNrcyBhcmUgZW5hYmxlZC4KKyAgICovCisgIGlzRW5hYmxlZDogZnVuY3Rpb24oKSB7Cisg
ICAgcmV0dXJuIF90b3BMZXZlbExpc3RlbmVyc0VuYWJsZWQ7CisgIH0sCisKKyAgLyoqCisgICAq
IENyZWF0ZXMgYSBjYWxsYmFjayBmb3IgdGhlIHN1cHBsaWVkIGB0b3BMZXZlbFR5cGVgIHRoYXQg
Y291bGQgYmUgYWRkZWQgYXMKKyAgICogYSBsaXN0ZW5lciB0byB0aGUgZG9jdW1lbnQuIFRoZSBj
YWxsYmFjayBjb21wdXRlcyBhIGB0b3BMZXZlbFRhcmdldGAgd2hpY2gKKyAgICogc2hvdWxkIGJl
IHRoZSByb290IG5vZGUgb2YgYSBtb3VudGVkIFJlYWN0IGNvbXBvbmVudCB3aGVyZSB0aGUgbGlz
dGVuZXIKKyAgICogaXMgYXR0YWNoZWQuCisgICAqCisgICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BM
ZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC4KKyAgICogQHJldHVybiB7ZnVu
Y3Rpb259IENhbGxiYWNrIGZvciBoYW5kbGluZyB0b3AtbGV2ZWwgZXZlbnRzLgorICAgKi8KKyAg
Y3JlYXRlVG9wTGV2ZWxDYWxsYmFjazogZnVuY3Rpb24odG9wTGV2ZWxUeXBlKSB7CisgICAgcmV0
dXJuIGZ1bmN0aW9uKG5hdGl2ZUV2ZW50KSB7CisgICAgICBpZiAoIV90b3BMZXZlbExpc3RlbmVy
c0VuYWJsZWQpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgLy8gVE9ETzogUmVt
b3ZlIHdoZW4gc3ludGhldGljIGV2ZW50cyBhcmUgcmVhZHksIHRoaXMgaXMgZm9yIElFPDkuCisg
ICAgICBpZiAobmF0aXZlRXZlbnQuc3JjRWxlbWVudCAmJgorICAgICAgICAgIG5hdGl2ZUV2ZW50
LnNyY0VsZW1lbnQgIT09IG5hdGl2ZUV2ZW50LnRhcmdldCkgeworICAgICAgICBuYXRpdmVFdmVu
dC50YXJnZXQgPSBuYXRpdmVFdmVudC5zcmNFbGVtZW50OworICAgICAgfQorICAgICAgdmFyIHRv
cExldmVsVGFyZ2V0ID0gUmVhY3RJbnN0YW5jZUhhbmRsZXMuZ2V0Rmlyc3RSZWFjdERPTSgKKyAg
ICAgICAgZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpCisgICAgICApIHx8IEV4ZWN1dGlvbkVu
dmlyb25tZW50Lmdsb2JhbDsKKyAgICAgIHZhciB0b3BMZXZlbFRhcmdldElEID0gUmVhY3RJRC5n
ZXRJRCh0b3BMZXZlbFRhcmdldCkgfHwgJyc7CisgICAgICBSZWFjdEV2ZW50RW1pdHRlci5oYW5k
bGVUb3BMZXZlbCgKKyAgICAgICAgdG9wTGV2ZWxUeXBlLAorICAgICAgICB0b3BMZXZlbFRhcmdl
dCwKKyAgICAgICAgdG9wTGV2ZWxUYXJnZXRJRCwKKyAgICAgICAgbmF0aXZlRXZlbnQKKyAgICAg
ICk7CisgICAgfTsKKyAgfQorCit9OworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0RXZlbnRUb3BM
ZXZlbENhbGxiYWNrOworCit9KSgpCit9LHsiLi9FeGVjdXRpb25FbnZpcm9ubWVudCI6MTksIi4v
UmVhY3RFdmVudEVtaXR0ZXIiOjMzLCIuL1JlYWN0SUQiOjM1LCIuL1JlYWN0SW5zdGFuY2VIYW5k
bGVzIjozNywiLi9nZXRFdmVudFRhcmdldCI6NzB9XSwzNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgor
ICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJM
aWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlh
bmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExp
Y2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0y
LjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRv
IGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBp
cyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVT
IE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisg
KiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVy
bWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBA
cHJvdmlkZXNNb2R1bGUgUmVhY3RJRAorICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHkKKyAqLwor
CisidXNlIHN0cmljdCI7CisKK3ZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCIuL2ludmFyaWFudCIp
OwordmFyIFJlYWN0TW91bnQgPSByZXF1aXJlKCIuL1JlYWN0TW91bnQiKTsKK3ZhciBBVFRSX05B
TUUgPSAnZGF0YS1yZWFjdGlkJzsKK3ZhciBub2RlQ2FjaGUgPSB7fTsKKworLyoqCisgKiBBY2Nl
c3Npbmcgbm9kZVtBVFRSX05BTUVdIG9yIGNhbGxpbmcgZ2V0QXR0cmlidXRlKEFUVFJfTkFNRSkg
b24gYSBmb3JtCisgKiBlbGVtZW50IGNhbiByZXR1cm4gaXRzIGNvbnRyb2wgd2hvc2UgbmFtZSBv
ciBJRCBlcXVhbHMgQVRUUl9OQU1FLiBBbGwKKyAqIERPTSBub2RlcyBzdXBwb3J0IGBnZXRBdHRy
aWJ1dGVOb2RlYCBidXQgdGhpcyBjYW4gYWxzbyBnZXQgY2FsbGVkIG9uCisgKiBvdGhlciBvYmpl
Y3RzIHNvIGp1c3QgcmV0dXJuICcnIGlmIHdlJ3JlIGdpdmVuIHNvbWV0aGluZyBvdGhlciB0aGFu
IGEKKyAqIERPTSBub2RlIChzdWNoIGFzIHdpbmRvdykuCisgKgorICogQHBhcmFtIHs/RE9NRWxl
bWVudHxET01XaW5kb3d8RE9NRG9jdW1lbnR8RE9NVGV4dE5vZGV9IG5vZGUgRE9NIG5vZGUuCisg
KiBAcmV0dXJuIHtzdHJpbmd9IElEIG9mIHRoZSBzdXBwbGllZCBgZG9tTm9kZWAuCisgKi8KK2Z1
bmN0aW9uIGdldElEKG5vZGUpIHsKKyAgdmFyIGlkID0gaW50ZXJuYWxHZXRJRChub2RlKTsKKyAg
aWYgKGlkKSB7CisgICAgaWYgKG5vZGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShpZCkpIHsKKyAgICAg
IHZhciBjYWNoZWQgPSBub2RlQ2FjaGVbaWRdOworICAgICAgaWYgKGNhY2hlZCAhPT0gbm9kZSkg
eworICAgICAgICBpbnZhcmlhbnQoCisgICAgICAgICAgIWlzVmFsaWQoY2FjaGVkLCBpZCksCisg
ICAgICAgICAgJ1JlYWN0SUQ6IFR3byB2YWxpZCBidXQgdW5lcXVhbCBub2RlcyB3aXRoIHRoZSBz
YW1lIGAlc2A6ICVzJywKKyAgICAgICAgICBBVFRSX05BTUUsIGlkCisgICAgICAgICk7CisKKyAg
ICAgICAgbm9kZUNhY2hlW2lkXSA9IG5vZGU7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
IG5vZGVDYWNoZVtpZF0gPSBub2RlOworICAgIH0KKyAgfQorCisgIHJldHVybiBpZDsKK30KKwor
ZnVuY3Rpb24gaW50ZXJuYWxHZXRJRChub2RlKSB7CisgIGlmIChub2RlICYmIG5vZGUuZ2V0QXR0
cmlidXRlTm9kZSkgeworICAgIHZhciBhdHRyaWJ1dGVOb2RlID0gbm9kZS5nZXRBdHRyaWJ1dGVO
b2RlKEFUVFJfTkFNRSk7CisgICAgaWYgKGF0dHJpYnV0ZU5vZGUpIHsKKyAgICAgIHJldHVybiBh
dHRyaWJ1dGVOb2RlLnZhbHVlIHx8ICcnOworICAgIH0KKyAgfQorICByZXR1cm4gJyc7Cit9CisK
Ky8qKgorICogU2V0cyB0aGUgUmVhY3Qtc3BlY2lmaWMgSUQgb2YgdGhlIGdpdmVuIG5vZGUuCisg
KgorICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlIFRoZSBET00gbm9kZSB3aG9zZSBJRCB3aWxs
IGJlIHNldC4KKyAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgdmFsdWUgb2YgdGhlIElEIGF0dHJp
YnV0ZS4KKyAqLworZnVuY3Rpb24gc2V0SUQobm9kZSwgaWQpIHsKKyAgdmFyIG9sZElEID0gaW50
ZXJuYWxHZXRJRChub2RlKTsKKyAgaWYgKG9sZElEICE9PSBpZCkgeworICAgIGRlbGV0ZSBub2Rl
Q2FjaGVbb2xkSURdOworICB9CisgIG5vZGUuc2V0QXR0cmlidXRlKEFUVFJfTkFNRSwgaWQpOwor
ICBub2RlQ2FjaGVbaWRdID0gbm9kZTsKK30KKworLyoqCisgKiBGaW5kcyB0aGUgbm9kZSB3aXRo
IHRoZSBzdXBwbGllZCBSZWFjdC1nZW5lcmF0ZWQgRE9NIElELgorICoKKyAqIEBwYXJhbSB7c3Ry
aW5nfSBpZCBBIFJlYWN0LWdlbmVyYXRlZCBET00gSUQuCisgKiBAcmV0dXJuIHtET01FbGVtZW50
fSBET00gbm9kZSB3aXRoIHRoZSBzdXBwbGVkIGBpZGAuCisgKiBAaW50ZXJuYWwKKyAqLworZnVu
Y3Rpb24gZ2V0Tm9kZShpZCkgeworICBpZiAoIW5vZGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShpZCkg
fHwgIWlzVmFsaWQobm9kZUNhY2hlW2lkXSwgaWQpKSB7CisgICAgbm9kZUNhY2hlW2lkXSA9IFJl
YWN0TW91bnQuZmluZFJlYWN0Tm9kZUJ5SUQoaWQpOworICB9CisgIHJldHVybiBub2RlQ2FjaGVb
aWRdOworfQorCisvKioKKyAqIEEgbm9kZSBpcyAidmFsaWQiIGlmIGl0IGlzIGNvbnRhaW5lZCBi
eSBhIGN1cnJlbnRseSBtb3VudGVkIGNvbnRhaW5lci4KKyAqCisgKiBUaGlzIG1lYW5zIHRoYXQg
dGhlIG5vZGUgZG9lcyBub3QgaGF2ZSB0byBiZSBjb250YWluZWQgYnkgYSBkb2N1bWVudCBpbgor
ICogb3JkZXIgdG8gYmUgY29uc2lkZXJlZCB2YWxpZC4KKyAqCisgKiBAcGFyYW0gez9ET01FbGVt
ZW50fSBub2RlIFRoZSBjYW5kaWRhdGUgRE9NIG5vZGUuCisgKiBAcGFyYW0ge3N0cmluZ30gaWQg
VGhlIGV4cGVjdGVkIElEIG9mIHRoZSBub2RlLgorICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhl
ciB0aGUgbm9kZSBpcyBjb250YWluZWQgYnkgYSBtb3VudGVkIGNvbnRhaW5lci4KKyAqLworZnVu
Y3Rpb24gaXNWYWxpZChub2RlLCBpZCkgeworICBpZiAobm9kZSkgeworICAgIGludmFyaWFudCgK
KyAgICAgIGludGVybmFsR2V0SUQobm9kZSkgPT09IGlkLAorICAgICAgJ1JlYWN0SUQ6IFVuZXhw
ZWN0ZWQgbW9kaWZpY2F0aW9uIG9mIGAlc2AnLAorICAgICAgQVRUUl9OQU1FCisgICAgKTsKKwor
ICAgIHZhciBjb250YWluZXIgPSBSZWFjdE1vdW50LmZpbmRSZWFjdENvbnRhaW5lckZvcklEKGlk
KTsKKyAgICBpZiAoY29udGFpbmVyICYmIGNvbnRhaW5zKGNvbnRhaW5lciwgbm9kZSkpIHsKKyAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgfQorCisgIHJldHVybiBmYWxzZTsKK30KKworZnVu
Y3Rpb24gY29udGFpbnMoYW5jZXN0b3IsIGRlc2NlbmRhbnQpIHsKKyAgaWYgKGFuY2VzdG9yLmNv
bnRhaW5zKSB7CisgICAgLy8gU3VwcG9ydGVkIG5hdGl2ZWx5IGluIHZpcnR1YWxseSBhbGwgYnJv
d3NlcnMsIGJ1dCBub3QgaW4ganNkb20uCisgICAgcmV0dXJuIGFuY2VzdG9yLmNvbnRhaW5zKGRl
c2NlbmRhbnQpOworICB9CisKKyAgaWYgKGRlc2NlbmRhbnQgPT09IGFuY2VzdG9yKSB7CisgICAg
cmV0dXJuIHRydWU7CisgIH0KKworICBpZiAoZGVzY2VuZGFudC5ub2RlVHlwZSA9PT0gMykgewor
ICAgIC8vIElmIGRlc2NlbmRhbnQgaXMgYSB0ZXh0IG5vZGUsIHN0YXJ0IGZyb20gZGVzY2VuZGFu
dC5wYXJlbnROb2RlCisgICAgLy8gaW5zdGVhZCwgc28gdGhhdCB3ZSBjYW4gYXNzdW1lIGFsbCBh
bmNlc3RvcnMgd29ydGggY29uc2lkZXJpbmcgYXJlCisgICAgLy8gZWxlbWVudCBub2RlcyB3aXRo
IG5vZGVUeXBlID09PSAxLgorICAgIGRlc2NlbmRhbnQgPSBkZXNjZW5kYW50LnBhcmVudE5vZGU7
CisgIH0KKworICB3aGlsZSAoZGVzY2VuZGFudCAmJiBkZXNjZW5kYW50Lm5vZGVUeXBlID09PSAx
KSB7CisgICAgaWYgKGRlc2NlbmRhbnQgPT09IGFuY2VzdG9yKSB7CisgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgZGVzY2VuZGFudCA9IGRlc2NlbmRhbnQucGFyZW50Tm9kZTsKKyAgfQor
CisgIHJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiBDYXVzZXMgdGhlIGNhY2hlIHRvIGZvcmdl
dCBhYm91dCBvbmUgUmVhY3Qtc3BlY2lmaWMgSUQuCisgKgorICogQHBhcmFtIHtzdHJpbmd9IGlk
IFRoZSBJRCB0byBmb3JnZXQuCisgKi8KK2Z1bmN0aW9uIHB1cmdlSUQoaWQpIHsKKyAgZGVsZXRl
IG5vZGVDYWNoZVtpZF07Cit9CisKK2V4cG9ydHMuQVRUUl9OQU1FID0gQVRUUl9OQU1FOworZXhw
b3J0cy5nZXRJRCA9IGdldElEOworZXhwb3J0cy5yYXdHZXRJRCA9IGludGVybmFsR2V0SUQ7Citl
eHBvcnRzLnNldElEID0gc2V0SUQ7CitleHBvcnRzLmdldE5vZGUgPSBnZXROb2RlOworZXhwb3J0
cy5wdXJnZUlEID0gcHVyZ2VJRDsKKworfSx7Ii4vUmVhY3RNb3VudCI6MzgsIi4vaW52YXJpYW50
Ijo3NX1dLDM2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29w
eXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBh
Y2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90
IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAq
IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93
d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJl
ZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAq
IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJ
UyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lO
RCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhl
IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRp
b25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBSZWFjdElucHV0
U2VsZWN0aW9uCisgKi8KKworInVzZSBzdHJpY3QiOworCisvLyBJdCBpcyBub3Qgc2FmZSB0byBy
ZWFkIHRoZSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IHByb3BlcnR5IGluIElFIGlmIHRoZXJlJ3MK
Ky8vIG5vdGhpbmcgZm9jdXNlZC4KK2Z1bmN0aW9uIGdldEFjdGl2ZUVsZW1lbnQoKSB7CisgIHRy
eSB7CisgICAgcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7CisgIH0gY2F0Y2ggKGUpIHsK
KyAgfQorfQorCitmdW5jdGlvbiBpc0luRG9jdW1lbnQobm9kZSkgeworICByZXR1cm4gZG9jdW1l
bnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKG5vZGUpOworfQorCisvKioKKyAqIEBSZWFjdElu
cHV0U2VsZWN0aW9uOiBSZWFjdCBpbnB1dCBzZWxlY3Rpb24gbW9kdWxlLiBCYXNlZCBvbiBTZWxl
Y3Rpb24uanMsCisgKiBidXQgbW9kaWZpZWQgdG8gYmUgc3VpdGFibGUgZm9yIHJlYWN0IGFuZCBo
YXMgYSBjb3VwbGUgb2YgYnVnIGZpeGVzIChkb2Vzbid0CisgKiBhc3N1bWUgYnV0dG9ucyBoYXZl
IHJhbmdlIHNlbGVjdGlvbnMgYWxsb3dlZCkuCisgKiBJbnB1dCBzZWxlY3Rpb24gbW9kdWxlIGZv
ciBSZWFjdC4KKyAqLwordmFyIFJlYWN0SW5wdXRTZWxlY3Rpb24gPSB7CisKKyAgaGFzU2VsZWN0
aW9uQ2FwYWJpbGl0aWVzOiBmdW5jdGlvbihlbGVtKSB7CisgICAgcmV0dXJuIGVsZW0gJiYgKAor
ICAgICAgKGVsZW0ubm9kZU5hbWUgPT09ICdJTlBVVCcgJiYgZWxlbS50eXBlID09PSAndGV4dCcp
IHx8CisgICAgICBlbGVtLm5vZGVOYW1lID09PSAnVEVYVEFSRUEnIHx8CisgICAgICBlbGVtLmNv
bnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnCisgICAgKTsKKyAgfSwKKworICBnZXRTZWxlY3Rpb25J
bmZvcm1hdGlvbjogZnVuY3Rpb24oKSB7CisgICAgdmFyIGZvY3VzZWRFbGVtID0gZ2V0QWN0aXZl
RWxlbWVudCgpOworICAgIHJldHVybiB7CisgICAgICBmb2N1c2VkRWxlbTogZm9jdXNlZEVsZW0s
CisgICAgICBzZWxlY3Rpb25SYW5nZToKKyAgICAgICAgICBSZWFjdElucHV0U2VsZWN0aW9uLmhh
c1NlbGVjdGlvbkNhcGFiaWxpdGllcyhmb2N1c2VkRWxlbSkgPworICAgICAgICAgIFJlYWN0SW5w
dXRTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uKGZvY3VzZWRFbGVtKSA6CisgICAgICAgICAgbnVsbAor
ICAgIH07CisgIH0sCisKKyAgLyoqCisgICAqIEByZXN0b3JlU2VsZWN0aW9uOiBJZiBhbnkgc2Vs
ZWN0aW9uIGluZm9ybWF0aW9uIHdhcyBwb3RlbnRpYWxseSBsb3N0LAorICAgKiByZXN0b3JlIGl0
LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHBlcmZvcm1pbmcgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIHJl
bW92ZSBkb20KKyAgICogbm9kZXMgYW5kIHBsYWNlIHRoZW0gYmFjayBpbiwgcmVzdWx0aW5nIGlu
IGZvY3VzIGJlaW5nIGxvc3QuCisgICAqLworICByZXN0b3JlU2VsZWN0aW9uOiBmdW5jdGlvbihw
cmlvclNlbGVjdGlvbkluZm9ybWF0aW9uKSB7CisgICAgdmFyIGN1ckZvY3VzZWRFbGVtID0gZ2V0
QWN0aXZlRWxlbWVudCgpOworICAgIHZhciBwcmlvckZvY3VzZWRFbGVtID0gcHJpb3JTZWxlY3Rp
b25JbmZvcm1hdGlvbi5mb2N1c2VkRWxlbTsKKyAgICB2YXIgcHJpb3JTZWxlY3Rpb25SYW5nZSA9
IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24uc2VsZWN0aW9uUmFuZ2U7CisgICAgaWYgKGN1ckZv
Y3VzZWRFbGVtICE9PSBwcmlvckZvY3VzZWRFbGVtICYmCisgICAgICAgIGlzSW5Eb2N1bWVudChw
cmlvckZvY3VzZWRFbGVtKSkgeworICAgICAgaWYgKFJlYWN0SW5wdXRTZWxlY3Rpb24uaGFzU2Vs
ZWN0aW9uQ2FwYWJpbGl0aWVzKHByaW9yRm9jdXNlZEVsZW0pKSB7CisgICAgICAgIFJlYWN0SW5w
dXRTZWxlY3Rpb24uc2V0U2VsZWN0aW9uKAorICAgICAgICAgIHByaW9yRm9jdXNlZEVsZW0sCisg
ICAgICAgICAgcHJpb3JTZWxlY3Rpb25SYW5nZQorICAgICAgICApOworICAgICAgfQorICAgICAg
cHJpb3JGb2N1c2VkRWxlbS5mb2N1cygpOworICAgIH0KKyAgfSwKKworICAvKioKKyAgICogQGdl
dFNlbGVjdGlvbjogR2V0cyB0aGUgc2VsZWN0aW9uIGJvdW5kcyBvZiBhIHRleHRhcmVhIG9yIGlu
cHV0LgorICAgKiAtQGlucHV0OiBMb29rIHVwIHNlbGVjdGlvbiBib3VuZHMgb2YgdGhpcyBpbnB1
dCBvciB0ZXh0YXJlYQorICAgKiAtQHJldHVybiB7c3RhcnQ6IHNlbGVjdGlvblN0YXJ0LCBlbmQ6
IHNlbGVjdGlvbkVuZH0KKyAgICovCisgIGdldFNlbGVjdGlvbjogZnVuY3Rpb24oaW5wdXQpIHsK
KyAgICB2YXIgcmFuZ2U7CisgICAgaWYgKGlucHV0LmNvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUn
ICYmIHdpbmRvdy5nZXRTZWxlY3Rpb24pIHsKKyAgICAgIHJhbmdlID0gd2luZG93LmdldFNlbGVj
dGlvbigpLmdldFJhbmdlQXQoMCk7CisgICAgICB2YXIgY29tbW9uQW5jZXN0b3IgPSByYW5nZS5j
b21tb25BbmNlc3RvckNvbnRhaW5lcjsKKyAgICAgIGlmIChjb21tb25BbmNlc3RvciAmJiBjb21t
b25BbmNlc3Rvci5ub2RlVHlwZSA9PT0gMykgeworICAgICAgICBjb21tb25BbmNlc3RvciA9IGNv
bW1vbkFuY2VzdG9yLnBhcmVudE5vZGU7CisgICAgICB9CisgICAgICBpZiAoY29tbW9uQW5jZXN0
b3IgIT09IGlucHV0KSB7CisgICAgICAgIHJldHVybiB7c3RhcnQ6IDAsIGVuZDogMH07CisgICAg
ICB9IGVsc2UgeworICAgICAgICByZXR1cm4ge3N0YXJ0OiByYW5nZS5zdGFydE9mZnNldCwgZW5k
OiByYW5nZS5lbmRPZmZzZXR9OworICAgICAgfQorICAgIH0KKworICAgIGlmICghZG9jdW1lbnQu
c2VsZWN0aW9uKSB7CisgICAgICAvLyBNb3ppbGxhLCBTYWZhcmksIGV0Yy4KKyAgICAgIHJldHVy
biB7c3RhcnQ6IGlucHV0LnNlbGVjdGlvblN0YXJ0LCBlbmQ6IGlucHV0LnNlbGVjdGlvbkVuZH07
CisgICAgfQorCisgICAgcmFuZ2UgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTsK
KyAgICBpZiAocmFuZ2UucGFyZW50RWxlbWVudCgpICE9PSBpbnB1dCkgeworICAgICAgLy8gVGhl
cmUgY2FuIG9ubHkgYmUgb25lIHNlbGVjdGlvbiBwZXIgZG9jdW1lbnQgaW4gSUUsIHNvIGlmIHRo
ZQorICAgICAgLy8gY29udGFpbmluZyBlbGVtZW50IG9mIHRoZSBkb2N1bWVudCdzIHNlbGVjdGlv
biBpc24ndCBvdXIgdGV4dCBmaWVsZCwKKyAgICAgIC8vIG91ciB0ZXh0IGZpZWxkIG11c3QgaGF2
ZSBubyBzZWxlY3Rpb24uCisgICAgICByZXR1cm4ge3N0YXJ0OiAwLCBlbmQ6IDB9OworICAgIH0K
KworICAgIHZhciBsZW5ndGggPSBpbnB1dC52YWx1ZS5sZW5ndGg7CisKKyAgICBpZiAoaW5wdXQu
bm9kZU5hbWUgPT09ICdJTlBVVCcpIHsKKyAgICAgIHJldHVybiB7CisgICAgICAgIHN0YXJ0OiAt
cmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCAtbGVuZ3RoKSwKKyAgICAgICAgZW5kOiAtcmFu
Z2UubW92ZUVuZCgnY2hhcmFjdGVyJywgLWxlbmd0aCkKKyAgICAgIH07CisgICAgfSBlbHNlIHsK
KyAgICAgIHZhciByYW5nZTIgPSByYW5nZS5kdXBsaWNhdGUoKTsKKyAgICAgIHJhbmdlMi5tb3Zl
VG9FbGVtZW50VGV4dChpbnB1dCk7CisgICAgICByYW5nZTIuc2V0RW5kUG9pbnQoJ1N0YXJ0VG9F
bmQnLCByYW5nZSk7CisgICAgICB2YXIgZW5kID0gbGVuZ3RoIC0gcmFuZ2UyLnRleHQubGVuZ3Ro
OworICAgICAgcmFuZ2UyLnNldEVuZFBvaW50KCdTdGFydFRvU3RhcnQnLCByYW5nZSk7CisgICAg
ICByZXR1cm4geworICAgICAgICBzdGFydDogbGVuZ3RoIC0gcmFuZ2UyLnRleHQubGVuZ3RoLAor
ICAgICAgICBlbmQ6ICAgZW5kCisgICAgICB9OworICAgIH0KKyAgfSwKKworICAvKioKKyAgICog
QHNldFNlbGVjdGlvbjogU2V0cyB0aGUgc2VsZWN0aW9uIGJvdW5kcyBvZiBhIHRleHRhcmVhIG9y
IGlucHV0IGFuZCBmb2N1c2VzCisgICAqIHRoZSBpbnB1dC4KKyAgICogLUBpbnB1dCAgICAgU2V0
IHNlbGVjdGlvbiBib3VuZHMgb2YgdGhpcyBpbnB1dCBvciB0ZXh0YXJlYQorICAgKiAtQHJhbmdl
T2JqIE9iamVjdCBvZiBzYW1lIGZvcm0gdGhhdCBpcyByZXR1cm5lZCBmcm9tIGdldCoKKyAgICov
CisgIHNldFNlbGVjdGlvbjogZnVuY3Rpb24oaW5wdXQsIHJhbmdlT2JqKSB7CisgICAgdmFyIHJh
bmdlOworICAgIHZhciBzdGFydCA9IHJhbmdlT2JqLnN0YXJ0OworICAgIHZhciBlbmQgPSByYW5n
ZU9iai5lbmQ7CisgICAgaWYgKHR5cGVvZiBlbmQgPT09ICd1bmRlZmluZWQnKSB7CisgICAgICBl
bmQgPSBzdGFydDsKKyAgICB9CisgICAgaWYgKGRvY3VtZW50LnNlbGVjdGlvbikgeworICAgICAg
Ly8gSUUgaXMgaW5jb25zaXN0ZW50IGFib3V0IGNoYXJhY3RlciBvZmZzZXRzIHdoZW4gaXQgY29t
ZXMgdG8gY2FycmlhZ2UKKyAgICAgIC8vIHJldHVybnMsIHNvIHdlIG5lZWQgdG8gbWFudWFsbHkg
dGFrZSB0aGVtIGludG8gYWNjb3VudAorICAgICAgaWYgKGlucHV0LnRhZ05hbWUgPT09ICdURVhU
QVJFQScpIHsKKyAgICAgICAgdmFyIGNyX2JlZm9yZSA9CisgICAgICAgICAgKGlucHV0LnZhbHVl
LnNsaWNlKDAsIHN0YXJ0KS5tYXRjaCgvXHIvZykgfHwgW10pLmxlbmd0aDsKKyAgICAgICAgdmFy
IGNyX2luc2lkZSA9CisgICAgICAgICAgKGlucHV0LnZhbHVlLnNsaWNlKHN0YXJ0LCBlbmQpLm1h
dGNoKC9cci9nKSB8fCBbXSkubGVuZ3RoOworICAgICAgICBzdGFydCAtPSBjcl9iZWZvcmU7Cisg
ICAgICAgIGVuZCAtPSBjcl9iZWZvcmUgKyBjcl9pbnNpZGU7CisgICAgICB9CisgICAgICByYW5n
ZSA9IGlucHV0LmNyZWF0ZVRleHRSYW5nZSgpOworICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7
CisgICAgICByYW5nZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIHN0YXJ0KTsKKyAgICAgIHJhbmdl
Lm1vdmVFbmQoJ2NoYXJhY3RlcicsIGVuZCAtIHN0YXJ0KTsKKyAgICAgIHJhbmdlLnNlbGVjdCgp
OworICAgIH0gZWxzZSB7CisgICAgICBpZiAoaW5wdXQuY29udGVudEVkaXRhYmxlID09PSAndHJ1
ZScpIHsKKyAgICAgICAgaWYgKGlucHV0LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxKSB7CisgICAg
ICAgICAgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOworICAgICAgICAgIHJhbmdlLnNl
dFN0YXJ0KGlucHV0LmNoaWxkTm9kZXNbMF0sIHN0YXJ0KTsKKyAgICAgICAgICByYW5nZS5zZXRF
bmQoaW5wdXQuY2hpbGROb2Rlc1swXSwgZW5kKTsKKyAgICAgICAgICB2YXIgc2VsID0gd2luZG93
LmdldFNlbGVjdGlvbigpOworICAgICAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKKyAgICAg
ICAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAg
ICAgICBpbnB1dC5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0OworICAgICAgICBpbnB1dC5zZWxlY3Rp
b25FbmQgPSBNYXRoLm1pbihlbmQsIGlucHV0LnZhbHVlLmxlbmd0aCk7CisgICAgICAgIGlucHV0
LmZvY3VzKCk7CisgICAgICB9CisgICAgfQorICB9CisKK307CisKK21vZHVsZS5leHBvcnRzID0g
UmVhY3RJbnB1dFNlbGVjdGlvbjsKKworfSx7fV0sMzc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxl
LGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAq
IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGlj
ZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5j
ZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNl
bnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4w
CisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBp
biB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMg
ZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBP
UiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICog
U2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1p
c3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHBy
b3ZpZGVzTW9kdWxlIFJlYWN0SW5zdGFuY2VIYW5kbGVzCisgKiBAdHlwZWNoZWNrcyBzdGF0aWMt
b25seQorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIFJlYWN0SUQgPSByZXF1aXJlKCIuL1Jl
YWN0SUQiKTsKKwordmFyIGludmFyaWFudCA9IHJlcXVpcmUoIi4vaW52YXJpYW50Iik7CisKK3Zh
ciBTRVBBUkFUT1IgPSAnLic7Cit2YXIgU0VQQVJBVE9SX0xFTkdUSCA9IFNFUEFSQVRPUi5sZW5n
dGg7CisKKy8qKgorICogTWF4aW11bSBkZXB0aCBvZiB0cmF2ZXJzYWxzIGJlZm9yZSB3ZSBjb25z
aWRlciB0aGUgcG9zc2liaWxpdHkgb2YgYSBiYWQgSUQuCisgKi8KK3ZhciBNQVhfVFJFRV9ERVBU
SCA9IDEwMDsKKworLyoqCisgKiBTaXplIG9mIHRoZSByZWFjdFJvb3QgSUQgc3BhY2UuIFdlIGdl
bmVyYXRlIHJhbmRvbSBudW1iZXJzIGZvciBSZWFjdCByb290CisgKiBJRHMgYW5kIGlmIHRoZXJl
J3MgYSBjb2xsaXNpb24gdGhlIGV2ZW50cyBhbmQgRE9NIHVwZGF0ZSBzeXN0ZW0gd2lsbAorICog
Z2V0IGNvbmZ1c2VkLiBJZiB3ZSBhc3N1bWUgMTAwIFJlYWN0IGNvbXBvbmVudHMgcGVyIHBhZ2Us
IGFuZCBhIHVzZXIKKyAqIGxvYWRzIDEgcGFnZSBwZXIgbWludXRlIDI0LzcgZm9yIDUwIHllYXJz
LCB3aXRoIGEgbW91bnQgcG9pbnQgc3BhY2Ugb2YKKyAqIDksOTk5LDk5OSB0aGUgbGlrZWxpaG9v
ZCBvZiBuZXZlciBoYXZpbmcgYSBjb2xsaXNpb24gaXMgOTkuOTk3JS4KKyAqLwordmFyIEdMT0JB
TF9NT1VOVF9QT0lOVF9NQVggPSA5OTk5OTk5OworCisvKioKKyAqIENyZWF0ZXMgYSBET00gSUQg
cHJlZml4IHRvIHVzZSB3aGVuIG1vdW50aW5nIFJlYWN0IGNvbXBvbmVudHMuCisgKgorICogQHBh
cmFtIHtudW1iZXJ9IGluZGV4IEEgdW5pcXVlIGludGVnZXIKKyAqIEByZXR1cm4ge3N0cmluZ30g
UmVhY3Qgcm9vdCBJRC4KKyAqIEBpbnRlcm5hbAorICovCitmdW5jdGlvbiBnZXRSZWFjdFJvb3RJ
RFN0cmluZyhpbmRleCkgeworICByZXR1cm4gU0VQQVJBVE9SICsgJ3JbJyArIGluZGV4LnRvU3Ry
aW5nKDM2KSArICddJzsKK30KKworLyoqCisgKiBDaGVja3MgaWYgYSBjaGFyYWN0ZXIgaW4gdGhl
IHN1cHBsaWVkIElEIGlzIGEgc2VwYXJhdG9yIG9yIHRoZSBlbmQuCisgKgorICogQHBhcmFtIHtz
dHJpbmd9IGlkIEEgUmVhY3QgRE9NIElELgorICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4
IG9mIHRoZSBjaGFyYWN0ZXIgdG8gY2hlY2suCisgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlm
IHRoZSBjaGFyYWN0ZXIgaXMgYSBzZXBhcmF0b3Igb3IgZW5kIG9mIHRoZSBJRC4KKyAqIEBwcml2
YXRlCisgKi8KK2Z1bmN0aW9uIGlzQm91bmRhcnkoaWQsIGluZGV4KSB7CisgIHJldHVybiBpZC5j
aGFyQXQoaW5kZXgpID09PSBTRVBBUkFUT1IgfHwgaW5kZXggPT09IGlkLmxlbmd0aDsKK30KKwor
LyoqCisgKiBDaGVja3MgaWYgdGhlIHN1cHBsaWVkIHN0cmluZyBpcyBhIHZhbGlkIFJlYWN0IERP
TSBJRC4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gaWQgQSBSZWFjdCBET00gSUQsIG1heWJlLgor
ICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgUmVhY3Qg
RE9NIElELgorICogQHByaXZhdGUKKyAqLworZnVuY3Rpb24gaXNWYWxpZElEKGlkKSB7CisgIHJl
dHVybiBpZCA9PT0gJycgfHwgKAorICAgIGlkLmNoYXJBdCgwKSA9PT0gU0VQQVJBVE9SICYmIGlk
LmNoYXJBdChpZC5sZW5ndGggLSAxKSAhPT0gU0VQQVJBVE9SCisgICk7Cit9CisKKy8qKgorICog
Q2hlY2tzIGlmIHRoZSBmaXJzdCBJRCBpcyBhbiBhbmNlc3RvciBvZiBvciBlcXVhbCB0byB0aGUg
c2Vjb25kIElELgorICoKKyAqIEBwYXJhbSB7c3RyaW5nfSBhbmNlc3RvcklECisgKiBAcGFyYW0g
e3N0cmluZ30gZGVzY2VuZGFudElECisgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBhbmNl
c3RvcklEYCBpcyBhbiBhbmNlc3RvciBvZiBgZGVzY2VuZGFudElEYC4KKyAqIEBpbnRlcm5hbAor
ICovCitmdW5jdGlvbiBpc0FuY2VzdG9ySURPZihhbmNlc3RvcklELCBkZXNjZW5kYW50SUQpIHsK
KyAgcmV0dXJuICgKKyAgICBkZXNjZW5kYW50SUQuaW5kZXhPZihhbmNlc3RvcklEKSA9PT0gMCAm
JgorICAgIGlzQm91bmRhcnkoZGVzY2VuZGFudElELCBhbmNlc3RvcklELmxlbmd0aCkKKyAgKTsK
K30KKworLyoqCisgKiBHZXRzIHRoZSBwYXJlbnQgSUQgb2YgdGhlIHN1cHBsaWVkIFJlYWN0IERP
TSBJRCwgYGlkYC4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gaWQgSUQgb2YgYSBjb21wb25lbnQu
CisgKiBAcmV0dXJuIHtzdHJpbmd9IElEIG9mIHRoZSBwYXJlbnQsIG9yIGFuIGVtcHR5IHN0cmlu
Zy4KKyAqIEBwcml2YXRlCisgKi8KK2Z1bmN0aW9uIGdldFBhcmVudElEKGlkKSB7CisgIHJldHVy
biBpZCA/IGlkLnN1YnN0cigwLCBpZC5sYXN0SW5kZXhPZihTRVBBUkFUT1IpKSA6ICcnOworfQor
CisvKioKKyAqIEdldHMgdGhlIG5leHQgRE9NIElEIG9uIHRoZSB0cmVlIHBhdGggZnJvbSB0aGUg
c3VwcGxpZWQgYGFuY2VzdG9ySURgIHRvIHRoZQorICogc3VwcGxpZWQgYGRlc3RpbmF0aW9uSURg
LiBJZiB0aGV5IGFyZSBlcXVhbCwgdGhlIElEIGlzIHJldHVybmVkLgorICoKKyAqIEBwYXJhbSB7
c3RyaW5nfSBhbmNlc3RvcklEIElEIG9mIGFuIGFuY2VzdG9yIG5vZGUgb2YgYGRlc3RpbmF0aW9u
SURgLgorICogQHBhcmFtIHtzdHJpbmd9IGRlc3RpbmF0aW9uSUQgSUQgb2YgdGhlIGRlc3RpbmF0
aW9uIG5vZGUuCisgKiBAcmV0dXJuIHtzdHJpbmd9IE5leHQgSUQgb24gdGhlIHBhdGggZnJvbSBg
YW5jZXN0b3JJRGAgdG8gYGRlc3RpbmF0aW9uSURgLgorICogQHByaXZhdGUKKyAqLworZnVuY3Rp
b24gZ2V0TmV4dERlc2NlbmRhbnRJRChhbmNlc3RvcklELCBkZXN0aW5hdGlvbklEKSB7CisgIGlu
dmFyaWFudCgKKyAgICBpc1ZhbGlkSUQoYW5jZXN0b3JJRCkgJiYgaXNWYWxpZElEKGRlc3RpbmF0
aW9uSUQpLAorICAgICdnZXROZXh0RGVzY2VuZGFudElEKCVzLCAlcyk6IFJlY2VpdmVkIGFuIGlu
dmFsaWQgUmVhY3QgRE9NIElELicsCisgICAgYW5jZXN0b3JJRCwKKyAgICBkZXN0aW5hdGlvbklE
CisgICk7CisgIGludmFyaWFudCgKKyAgICBpc0FuY2VzdG9ySURPZihhbmNlc3RvcklELCBkZXN0
aW5hdGlvbklEKSwKKyAgICAnZ2V0TmV4dERlc2NlbmRhbnRJRCguLi4pOiBSZWFjdCBoYXMgbWFk
ZSBhbiBpbnZhbGlkIGFzc3VtcHRpb24gYWJvdXQgJyArCisgICAgJ3RoZSBET00gaGllcmFyY2h5
LiBFeHBlY3RlZCBgJXNgIHRvIGJlIGFuIGFuY2VzdG9yIG9mIGAlc2AuJywKKyAgICBhbmNlc3Rv
cklELAorICAgIGRlc3RpbmF0aW9uSUQKKyAgKTsKKyAgaWYgKGFuY2VzdG9ySUQgPT09IGRlc3Rp
bmF0aW9uSUQpIHsKKyAgICByZXR1cm4gYW5jZXN0b3JJRDsKKyAgfQorICAvLyBTa2lwIG92ZXIg
dGhlIGFuY2VzdG9yIGFuZCB0aGUgaW1tZWRpYXRlIHNlcGFyYXRvci4gVHJhdmVyc2UgdW50aWwg
d2UgaGl0CisgIC8vIGFub3RoZXIgc2VwYXJhdG9yIG9yIHdlIHJlYWNoIHRoZSBlbmQgb2YgYGRl
c3RpbmF0aW9uSURgLgorICB2YXIgc3RhcnQgPSBhbmNlc3RvcklELmxlbmd0aCArIFNFUEFSQVRP
Ul9MRU5HVEg7CisgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGRlc3RpbmF0aW9uSUQubGVuZ3Ro
OyBpKyspIHsKKyAgICBpZiAoaXNCb3VuZGFyeShkZXN0aW5hdGlvbklELCBpKSkgeworICAgICAg
YnJlYWs7CisgICAgfQorICB9CisgIHJldHVybiBkZXN0aW5hdGlvbklELnN1YnN0cigwLCBpKTsK
K30KKworLyoqCisgKiBHZXRzIHRoZSBuZWFyZXN0IGNvbW1vbiBhbmNlc3RvciBJRCBvZiB0d28g
SURzLgorICoKKyAqIFVzaW5nIHRoaXMgSUQgc2NoZW1lLCB0aGUgbmVhcmVzdCBjb21tb24gYW5j
ZXN0b3IgSUQgaXMgdGhlIGxvbmdlc3QgY29tbW9uCisgKiBwcmVmaXggb2YgdGhlIHR3byBJRHMg
dGhhdCBpbW1lZGlhdGVseSBwcmVjZWRlZCBhICJtYXJrZXIiIGluIGJvdGggc3RyaW5ncy4KKyAq
CisgKiBAcGFyYW0ge3N0cmluZ30gb25lSUQKKyAqIEBwYXJhbSB7c3RyaW5nfSB0d29JRAorICog
QHJldHVybiB7c3RyaW5nfSBOZWFyZXN0IGNvbW1vbiBhbmNlc3RvciBJRCwgb3IgdGhlIGVtcHR5
IHN0cmluZyBpZiBub25lLgorICogQHByaXZhdGUKKyAqLworZnVuY3Rpb24gZ2V0Rmlyc3RDb21t
b25BbmNlc3RvcklEKG9uZUlELCB0d29JRCkgeworICB2YXIgbWluTGVuZ3RoID0gTWF0aC5taW4o
b25lSUQubGVuZ3RoLCB0d29JRC5sZW5ndGgpOworICBpZiAobWluTGVuZ3RoID09PSAwKSB7Cisg
ICAgcmV0dXJuICcnOworICB9CisgIHZhciBsYXN0Q29tbW9uTWFya2VySW5kZXggPSAwOworICAv
LyBVc2UgYDw9YCB0byB0cmF2ZXJzZSB1bnRpbCB0aGUgIkVPTCIgb2YgdGhlIHNob3J0ZXIgc3Ry
aW5nLgorICBmb3IgKHZhciBpID0gMDsgaSA8PSBtaW5MZW5ndGg7IGkrKykgeworICAgIGlmIChp
c0JvdW5kYXJ5KG9uZUlELCBpKSAmJiBpc0JvdW5kYXJ5KHR3b0lELCBpKSkgeworICAgICAgbGFz
dENvbW1vbk1hcmtlckluZGV4ID0gaTsKKyAgICB9IGVsc2UgaWYgKG9uZUlELmNoYXJBdChpKSAh
PT0gdHdvSUQuY2hhckF0KGkpKSB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgdmFyIGxv
bmdlc3RDb21tb25JRCA9IG9uZUlELnN1YnN0cigwLCBsYXN0Q29tbW9uTWFya2VySW5kZXgpOwor
ICBpbnZhcmlhbnQoCisgICAgaXNWYWxpZElEKGxvbmdlc3RDb21tb25JRCksCisgICAgJ2dldEZp
cnN0Q29tbW9uQW5jZXN0b3JJRCglcywgJXMpOiBFeHBlY3RlZCBhIHZhbGlkIFJlYWN0IERPTSBJ
RDogJXMnLAorICAgIG9uZUlELAorICAgIHR3b0lELAorICAgIGxvbmdlc3RDb21tb25JRAorICAp
OworICByZXR1cm4gbG9uZ2VzdENvbW1vbklEOworfQorCisvKioKKyAqIFRyYXZlcnNlcyB0aGUg
cGFyZW50IHBhdGggYmV0d2VlbiB0d28gSURzIChlaXRoZXIgdXAgb3IgZG93bikuIFRoZSBJRHMg
bXVzdAorICogbm90IGJlIHRoZSBzYW1lLCBhbmQgdGhlcmUgbXVzdCBleGlzdCBhIHBhcmVudCBw
YXRoIGJldHdlZW4gdGhlbS4KKyAqCisgKiBAcGFyYW0gez9zdHJpbmd9IHN0YXJ0IElEIGF0IHdo
aWNoIHRvIHN0YXJ0IHRyYXZlcnNhbC4KKyAqIEBwYXJhbSB7P3N0cmluZ30gc3RvcCBJRCBhdCB3
aGljaCB0byBlbmQgdHJhdmVyc2FsLgorICogQHBhcmFtIHtmdW5jdGlvbn0gY2IgQ2FsbGJhY2sg
dG8gaW52b2tlIGVhY2ggSUQgd2l0aC4KKyAqIEBwYXJhbSB7P2Jvb2xlYW59IHNraXBGaXJzdCBX
aGV0aGVyIG9yIG5vdCB0byBza2lwIHRoZSBmaXJzdCBub2RlLgorICogQHBhcmFtIHs/Ym9vbGVh
bn0gc2tpcExhc3QgV2hldGhlciBvciBub3QgdG8gc2tpcCB0aGUgbGFzdCBub2RlLgorICogQHBy
aXZhdGUKKyAqLworZnVuY3Rpb24gdHJhdmVyc2VQYXJlbnRQYXRoKHN0YXJ0LCBzdG9wLCBjYiwg
YXJnLCBza2lwRmlyc3QsIHNraXBMYXN0KSB7CisgIHN0YXJ0ID0gc3RhcnQgfHwgJyc7CisgIHN0
b3AgPSBzdG9wIHx8ICcnOworICBpbnZhcmlhbnQoCisgICAgc3RhcnQgIT09IHN0b3AsCisgICAg
J3RyYXZlcnNlUGFyZW50UGF0aCguLi4pOiBDYW5ub3QgdHJhdmVyc2UgZnJvbSBhbmQgdG8gdGhl
IHNhbWUgSUQsIGAlc2AuJywKKyAgICBzdGFydAorICApOworICB2YXIgdHJhdmVyc2VVcCA9IGlz
QW5jZXN0b3JJRE9mKHN0b3AsIHN0YXJ0KTsKKyAgaW52YXJpYW50KAorICAgIHRyYXZlcnNlVXAg
fHwgaXNBbmNlc3RvcklET2Yoc3RhcnQsIHN0b3ApLAorICAgICd0cmF2ZXJzZVBhcmVudFBhdGgo
JXMsICVzLCAuLi4pOiBDYW5ub3QgdHJhdmVyc2UgZnJvbSB0d28gSURzIHRoYXQgZG8gJyArCisg
ICAgJ25vdCBoYXZlIGEgcGFyZW50IHBhdGguJywKKyAgICBzdGFydCwKKyAgICBzdG9wCisgICk7
CisgIC8vIFRyYXZlcnNlIGZyb20gYHN0YXJ0YCB0byBgc3RvcGAgb25lIGRlcHRoIGF0IGEgdGlt
ZS4KKyAgdmFyIGRlcHRoID0gMDsKKyAgdmFyIHRyYXZlcnNlID0gdHJhdmVyc2VVcCA/IGdldFBh
cmVudElEIDogZ2V0TmV4dERlc2NlbmRhbnRJRDsKKyAgZm9yICh2YXIgaWQgPSBzdGFydDsgLyog
dW50aWwgYnJlYWsgKi87IGlkID0gdHJhdmVyc2UoaWQsIHN0b3ApKSB7CisgICAgaWYgKCghc2tp
cEZpcnN0IHx8IGlkICE9PSBzdGFydCkgJiYgKCFza2lwTGFzdCB8fCBpZCAhPT0gc3RvcCkpIHsK
KyAgICAgIGNiKGlkLCB0cmF2ZXJzZVVwLCBhcmcpOworICAgIH0KKyAgICBpZiAoaWQgPT09IHN0
b3ApIHsKKyAgICAgIC8vIE9ubHkgYnJlYWsgLy9hZnRlci8vIHZpc2l0aW5nIGBzdG9wYC4KKyAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBpbnZhcmlhbnQoCisgICAgICBkZXB0aCsrIDwgTUFYX1RS
RUVfREVQVEgsCisgICAgICAndHJhdmVyc2VQYXJlbnRQYXRoKCVzLCAlcywgLi4uKTogRGV0ZWN0
ZWQgYW4gaW5maW5pdGUgbG9vcCB3aGlsZSAnICsKKyAgICAgICd0cmF2ZXJzaW5nIHRoZSBSZWFj
dCBET00gSUQgdHJlZS4gVGhpcyBtYXkgYmUgZHVlIHRvIG1hbGZvcm1lZCBJRHM6ICVzJywKKyAg
ICAgIHN0YXJ0LCBzdG9wCisgICAgKTsKKyAgfQorfQorCisvKioKKyAqIE1hbmFnZXMgdGhlIElE
cyBhc3NpZ25lZCB0byBET00gcmVwcmVzZW50YXRpb25zIG9mIFJlYWN0IGNvbXBvbmVudHMuIFRo
aXMKKyAqIHVzZXMgYSBzcGVjaWZpYyBzY2hlbWUgaW4gb3JkZXIgdG8gdHJhdmVyc2UgdGhlIERP
TSBlZmZpY2llbnRseSAoZS5nLiBpbgorICogb3JkZXIgdG8gc2ltdWxhdGUgZXZlbnRzKS4KKyAq
CisgKiBAaW50ZXJuYWwKKyAqLwordmFyIFJlYWN0SW5zdGFuY2VIYW5kbGVzID0geworCisgIHNl
cGFyYXRvcjogU0VQQVJBVE9SLAorCisgIGNyZWF0ZVJlYWN0Um9vdElEOiBmdW5jdGlvbigpIHsK
KyAgICByZXR1cm4gZ2V0UmVhY3RSb290SURTdHJpbmcoCisgICAgICBNYXRoLmNlaWwoTWF0aC5y
YW5kb20oKSAqIEdMT0JBTF9NT1VOVF9QT0lOVF9NQVgpCisgICAgKTsKKyAgfSwKKworICAvKioK
KyAgICogVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgYG5vZGVgIGlzIHJlbmRlcmVkIGJ5IFJlYWN0Lgor
ICAgKgorICAgKiBAcGFyYW0geyp9IG5vZGUgRE9NIEVsZW1lbnQgdG8gY2hlY2suCisgICAqIEBy
ZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIERPTSBFbGVtZW50IGFwcGVhcnMgdG8gYmUgcmVu
ZGVyZWQgYnkgUmVhY3QuCisgICAqIEBpbnRlcm5hbAorICAgKi8KKyAgaXNSZW5kZXJlZEJ5UmVh
Y3Q6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gMSkgeworICAg
ICAgLy8gTm90IGEgRE9NRWxlbWVudCwgdGhlcmVmb3JlIG5vdCBhIFJlYWN0IGNvbXBvbmVudAor
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICB2YXIgaWQgPSBSZWFjdElELmdldElEKG5v
ZGUpOworICAgIHJldHVybiBpZCA/IGlkLmNoYXJBdCgwKSA9PT0gU0VQQVJBVE9SIDogZmFsc2U7
CisgIH0sCisKKyAgLyoqCisgICAqIFRyYXZlcnNlcyB1cCB0aGUgYW5jZXN0b3JzIG9mIHRoZSBz
dXBwbGllZCBub2RlIHRvIGZpbmQgYSBub2RlIHRoYXQgaXMgYQorICAgKiBET00gcmVwcmVzZW50
YXRpb24gb2YgYSBSZWFjdCBjb21wb25lbnQuCisgICAqCisgICAqIEBwYXJhbSB7Kn0gbm9kZQor
ICAgKiBAcmV0dXJuIHs/RE9NRXZlbnRUYXJnZXR9CisgICAqIEBpbnRlcm5hbAorICAgKi8KKyAg
Z2V0Rmlyc3RSZWFjdERPTTogZnVuY3Rpb24obm9kZSkgeworICAgIHZhciBjdXJyZW50ID0gbm9k
ZTsKKyAgICB3aGlsZSAoY3VycmVudCAmJiBjdXJyZW50LnBhcmVudE5vZGUgIT09IGN1cnJlbnQp
IHsKKyAgICAgIGlmIChSZWFjdEluc3RhbmNlSGFuZGxlcy5pc1JlbmRlcmVkQnlSZWFjdChjdXJy
ZW50KSkgeworICAgICAgICByZXR1cm4gY3VycmVudDsKKyAgICAgIH0KKyAgICAgIGN1cnJlbnQg
PSBjdXJyZW50LnBhcmVudE5vZGU7CisgICAgfQorICAgIHJldHVybiBudWxsOworICB9LAorCisg
IC8qKgorICAgKiBGaW5kcyBhIG5vZGUgd2l0aCB0aGUgc3VwcGxpZWQgYGlkYCBpbnNpZGUgb2Yg
dGhlIHN1cHBsaWVkIGBhbmNlc3Rvck5vZGVgLgorICAgKiBFeHBsb2l0cyB0aGUgSUQgbmFtaW5n
IHNjaGVtZSB0byBwZXJmb3JtIHRoZSBzZWFyY2ggcXVpY2tseS4KKyAgICoKKyAgICogQHBhcmFt
IHtET01FdmVudFRhcmdldH0gYW5jZXN0b3JOb2RlIFNlYXJjaCBmcm9tIHRoaXMgcm9vdC4KKyAg
ICogQHBhcmFybSB7c3RyaW5nfSBpZCBJRCBvZiB0aGUgRE9NIHJlcHJlc2VudGF0aW9uIG9mIHRo
ZSBjb21wb25lbnQuCisgICAqIEByZXR1cm4ge0RPTUV2ZW50VGFyZ2V0fSBET00gbm9kZSB3aXRo
IHRoZSBzdXBwbGllZCBgaWRgLgorICAgKiBAaW50ZXJuYWwKKyAgICovCisgIGZpbmRDb21wb25l
bnRSb290OiBmdW5jdGlvbihhbmNlc3Rvck5vZGUsIGlkKSB7CisgICAgdmFyIGZpcnN0Q2hpbGRy
ZW4gPSBbYW5jZXN0b3JOb2RlLmZpcnN0Q2hpbGRdOworICAgIHZhciBjaGlsZEluZGV4ID0gMDsK
KworICAgIHdoaWxlIChjaGlsZEluZGV4IDwgZmlyc3RDaGlsZHJlbi5sZW5ndGgpIHsKKyAgICAg
IHZhciBjaGlsZCA9IGZpcnN0Q2hpbGRyZW5bY2hpbGRJbmRleCsrXTsKKyAgICAgIHdoaWxlIChj
aGlsZCkgeworICAgICAgICB2YXIgY2hpbGRJRCA9IFJlYWN0SUQuZ2V0SUQoY2hpbGQpOworICAg
ICAgICBpZiAoY2hpbGRJRCkgeworICAgICAgICAgIGlmIChpZCA9PT0gY2hpbGRJRCkgeworICAg
ICAgICAgICAgcmV0dXJuIGNoaWxkOworICAgICAgICAgIH0gZWxzZSBpZiAoaXNBbmNlc3RvcklE
T2YoY2hpbGRJRCwgaWQpKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSBmaW5kIGEgY2hpbGQgd2hv
c2UgSUQgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIGdpdmVuIElELAorICAgICAgICAgICAgLy8gdGhl
biB3ZSBjYW4gYmUgc3VyZSB0aGF0IHdlIG9ubHkgd2FudCB0byBzZWFyY2ggdGhlIHN1YnRyZWUK
KyAgICAgICAgICAgIC8vIHJvb3RlZCBhdCB0aGlzIGNoaWxkLCBzbyB3ZSBjYW4gdGhyb3cgb3V0
IHRoZSByZXN0IG9mIHRoZQorICAgICAgICAgICAgLy8gc2VhcmNoIHN0YXRlLgorICAgICAgICAg
ICAgZmlyc3RDaGlsZHJlbi5sZW5ndGggPSBjaGlsZEluZGV4ID0gMDsKKyAgICAgICAgICAgIGZp
cnN0Q2hpbGRyZW4ucHVzaChjaGlsZC5maXJzdENoaWxkKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUT0RPIFRoaXMgc2hvdWxkIG5vdCBi
ZSBuZWNlc3NhcnkgaWYgdGhlIElEIGhpZXJhcmNoeSBpcworICAgICAgICAgICAgLy8gY29ycmVj
dCwgYnV0IGlzIG9jY2FzaW9uYWxseSBuZWNlc3NhcnkgaWYgdGhlIERPTSBoYXMgYmVlbgorICAg
ICAgICAgICAgLy8gbW9kaWZpZWQgaW4gdW5leHBlY3RlZCB3YXlzLgorICAgICAgICAgICAgZmly
c3RDaGlsZHJlbi5wdXNoKGNoaWxkLmZpcnN0Q2hpbGQpOworICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAvLyBJZiB0aGlzIGNoaWxkIGhhZCBubyBJRCwgdGhlbiB0aGVy
ZSdzIGEgY2hhbmNlIHRoYXQgaXQgd2FzCisgICAgICAgICAgLy8gaW5qZWN0ZWQgYXV0b21hdGlj
YWxseSBieSB0aGUgYnJvd3NlciwgYXMgd2hlbiBhIGA8dGFibGU+YAorICAgICAgICAgIC8vIGVs
ZW1lbnQgc3Byb3V0cyBhbiBleHRyYSBgPHRib2R5PmAgY2hpbGQgYXMgYSBzaWRlIGVmZmVjdCBv
ZgorICAgICAgICAgIC8vIGAuaW5uZXJIVE1MYCBwYXJzaW5nLiBPcHRpbWlzdGljYWxseSBjb250
aW51ZSBkb3duIHRoaXMKKyAgICAgICAgICAvLyBicmFuY2gsIGJ1dCBub3QgYmVmb3JlIGV4YW1p
bmluZyB0aGUgb3RoZXIgc2libGluZ3MuCisgICAgICAgICAgZmlyc3RDaGlsZHJlbi5wdXNoKGNo
aWxkLmZpcnN0Q2hpbGQpOworICAgICAgICB9CisgICAgICAgIGNoaWxkID0gY2hpbGQubmV4dFNp
Ymxpbmc7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHRydWUpIHsKKyAgICAgIGNvbnNvbGUu
ZXJyb3IoCisgICAgICAgICdFcnJvciB3aGlsZSBpbnZva2luZyBgZmluZENvbXBvbmVudFJvb3Rg
IHdpdGggdGhlIGZvbGxvd2luZyAnICsKKyAgICAgICAgJ2FuY2VzdG9yIG5vZGU6JywKKyAgICAg
ICAgYW5jZXN0b3JOb2RlCisgICAgICApOworICAgIH0KKyAgICBpbnZhcmlhbnQoCisgICAgICBm
YWxzZSwKKyAgICAgICdmaW5kQ29tcG9uZW50Um9vdCguLi4sICVzKTogVW5hYmxlIHRvIGZpbmQg
ZWxlbWVudC4gVGhpcyBwcm9iYWJseSAnICsKKyAgICAgICdtZWFucyB0aGUgRE9NIHdhcyB1bmV4
cGVjdGVkbHkgbXV0YXRlZCAoZS5nLiBieSB0aGUgYnJvd3NlcikuJywKKyAgICAgIGlkLAorICAg
ICAgUmVhY3RJRC5nZXRJRChhbmNlc3Rvck5vZGUpCisgICAgKTsKKyAgfSwKKworICAvKioKKyAg
ICogR2V0cyB0aGUgRE9NIElEIG9mIHRoZSBSZWFjdCBjb21wb25lbnQgdGhhdCBpcyB0aGUgcm9v
dCBvZiB0aGUgdHJlZSB0aGF0CisgICAqIGNvbnRhaW5zIHRoZSBSZWFjdCBjb21wb25lbnQgd2l0
aCB0aGUgc3VwcGxpZWQgRE9NIElELgorICAgKgorICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgRE9N
IElEIG9mIGEgUmVhY3QgY29tcG9uZW50LgorICAgKiBAcmV0dXJuIHs/c3RyaW5nfSBET00gSUQg
b2YgdGhlIFJlYWN0IGNvbXBvbmVudCB0aGF0IGlzIHRoZSByb290LgorICAgKiBAaW50ZXJuYWwK
KyAgICovCisgIGdldFJlYWN0Um9vdElERnJvbU5vZGVJRDogZnVuY3Rpb24oaWQpIHsKKyAgICB2
YXIgcmVnZXhSZXN1bHQgPSAvXC5yXFtbXlxdXStcXS8uZXhlYyhpZCk7CisgICAgcmV0dXJuIHJl
Z2V4UmVzdWx0ICYmIHJlZ2V4UmVzdWx0WzBdOworICB9LAorCisgIC8qKgorICAgKiBUcmF2ZXJz
ZXMgdGhlIElEIGhpZXJhcmNoeSBhbmQgaW52b2tlcyB0aGUgc3VwcGxpZWQgYGNiYCBvbiBhbnkg
SURzIHRoYXQKKyAgICogc2hvdWxkIHdvdWxkIHJlY2VpdmUgYSBgbW91c2VFbnRlcmAgb3IgYG1v
dXNlTGVhdmVgIGV2ZW50LgorICAgKgorICAgKiBOT1RFOiBEb2VzIG5vdCBpbnZva2UgdGhlIGNh
bGxiYWNrIG9uIHRoZSBuZWFyZXN0IGNvbW1vbiBhbmNlc3RvciBiZWNhdXNlCisgICAqIG5vdGhp
bmcgImVudGVyZWQiIG9yICJsZWZ0IiB0aGF0IGVsZW1lbnQuCisgICAqCisgICAqIEBwYXJhbSB7
c3RyaW5nfSBsZWF2ZUlEIElEIGJlaW5nIGxlZnQuCisgICAqIEBwYXJhbSB7c3RyaW5nfSBlbnRl
cklEIElEIGJlaW5nIGVudGVyZWQuCisgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNiIENhbGxiYWNr
IHRvIGludm9rZSBvbiBlYWNoIGVudGVyZWQvbGVmdCBJRC4KKyAgICogQHBhcmFtIHsqfSB1cEFy
ZyBBcmd1bWVudCB0byBpbnZva2UgdGhlIGNhbGxiYWNrIHdpdGggb24gbGVmdCBJRHMuCisgICAq
IEBwYXJhbSB7Kn0gZG93bkFyZyBBcmd1bWVudCB0byBpbnZva2UgdGhlIGNhbGxiYWNrIHdpdGgg
b24gZW50ZXJlZCBJRHMuCisgICAqIEBpbnRlcm5hbAorICAgKi8KKyAgdHJhdmVyc2VFbnRlckxl
YXZlOiBmdW5jdGlvbihsZWF2ZUlELCBlbnRlcklELCBjYiwgdXBBcmcsIGRvd25BcmcpIHsKKyAg
ICB2YXIgYW5jZXN0b3JJRCA9IGdldEZpcnN0Q29tbW9uQW5jZXN0b3JJRChsZWF2ZUlELCBlbnRl
cklEKTsKKyAgICBpZiAoYW5jZXN0b3JJRCAhPT0gbGVhdmVJRCkgeworICAgICAgdHJhdmVyc2VQ
YXJlbnRQYXRoKGxlYXZlSUQsIGFuY2VzdG9ySUQsIGNiLCB1cEFyZywgZmFsc2UsIHRydWUpOwor
ICAgIH0KKyAgICBpZiAoYW5jZXN0b3JJRCAhPT0gZW50ZXJJRCkgeworICAgICAgdHJhdmVyc2VQ
YXJlbnRQYXRoKGFuY2VzdG9ySUQsIGVudGVySUQsIGNiLCBkb3duQXJnLCB0cnVlLCBmYWxzZSk7
CisgICAgfQorICB9LAorCisgIC8qKgorICAgKiBTaW11bGF0ZXMgdGhlIHRyYXZlcnNhbCBvZiBh
IHR3by1waGFzZSwgY2FwdHVyZS9idWJibGUgZXZlbnQgZGlzcGF0Y2guCisgICAqCisgICAqIE5P
VEU6IFRoaXMgdHJhdmVyc2FsIGhhcHBlbnMgb24gSURzIHdpdGhvdXQgdG91Y2hpbmcgdGhlIERP
TS4KKyAgICoKKyAgICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldElEIElEIG9mIHRoZSB0YXJnZXQg
bm9kZS4KKyAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2IgQ2FsbGJhY2sgdG8gaW52b2tlLgorICAg
KiBAcGFyYW0geyp9IGFyZyBBcmd1bWVudCB0byBpbnZva2UgdGhlIGNhbGxiYWNrIHdpdGguCisg
ICAqIEBpbnRlcm5hbAorICAgKi8KKyAgdHJhdmVyc2VUd29QaGFzZTogZnVuY3Rpb24odGFyZ2V0
SUQsIGNiLCBhcmcpIHsKKyAgICBpZiAodGFyZ2V0SUQpIHsKKyAgICAgIHRyYXZlcnNlUGFyZW50
UGF0aCgnJywgdGFyZ2V0SUQsIGNiLCBhcmcsIHRydWUsIGZhbHNlKTsKKyAgICAgIHRyYXZlcnNl
UGFyZW50UGF0aCh0YXJnZXRJRCwgJycsIGNiLCBhcmcsIGZhbHNlLCB0cnVlKTsKKyAgICB9Cisg
IH0sCisKKyAgLyoqCisgICAqIEV4cG9zZWQgZm9yIHVuaXQgdGVzdGluZy4KKyAgICogQHByaXZh
dGUKKyAgICovCisgIF9nZXRGaXJzdENvbW1vbkFuY2VzdG9ySUQ6IGdldEZpcnN0Q29tbW9uQW5j
ZXN0b3JJRCwKKworICAvKioKKyAgICogRXhwb3NlZCBmb3IgdW5pdCB0ZXN0aW5nLgorICAgKiBA
cHJpdmF0ZQorICAgKi8KKyAgX2dldE5leHREZXNjZW5kYW50SUQ6IGdldE5leHREZXNjZW5kYW50
SUQKKworfTsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdEluc3RhbmNlSGFuZGxlczsKKworfSx7
Ii4vUmVhY3RJRCI6MzUsIi4vaW52YXJpYW50Ijo3NX1dLDM4OltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKKyhmdW5jdGlvbigpey8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJv
b2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNp
b24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhj
ZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEg
Y29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNl
bnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxh
dyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRI
T1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mg
b3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdl
IGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNl
bnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBSZWFjdE1vdW50CisgKi8KKworInVzZSBzdHJp
Y3QiOworCit2YXIgaW52YXJpYW50ID0gcmVxdWlyZSgiLi9pbnZhcmlhbnQiKTsKK3ZhciBSZWFj
dEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vUmVhY3RFdmVudEVtaXR0ZXIiKTsKK3ZhciBSZWFj
dEluc3RhbmNlSGFuZGxlcyA9IHJlcXVpcmUoIi4vUmVhY3RJbnN0YW5jZUhhbmRsZXMiKTsKK3Zh
ciBSZWFjdEV2ZW50VG9wTGV2ZWxDYWxsYmFjayA9IHJlcXVpcmUoIi4vUmVhY3RFdmVudFRvcExl
dmVsQ2FsbGJhY2siKTsKK3ZhciBSZWFjdElEID0gcmVxdWlyZSgiLi9SZWFjdElEIik7CisKK3Zh
ciAkID0gcmVxdWlyZSgiLi8kIik7CisKKy8qKiBNYXBwaW5nIGZyb20gcmVhY3RSb290SUQgdG8g
UmVhY3QgY29tcG9uZW50IGluc3RhbmNlLiAqLwordmFyIGluc3RhbmNlQnlSZWFjdFJvb3RJRCA9
IHt9OworCisvKiogTWFwcGluZyBmcm9tIHJlYWN0Um9vdElEIHRvIGBjb250YWluZXJgIG5vZGVz
LiAqLwordmFyIGNvbnRhaW5lcnNCeVJlYWN0Um9vdElEID0ge307CisKK2lmICh0cnVlKSB7Cisg
IC8qKiBfX0RFVl9fLW9ubHkgbWFwcGluZyBmcm9tIHJlYWN0Um9vdElEIHRvIHJvb3QgZWxlbWVu
dHMuICovCisgIHZhciByb290RWxlbWVudHNCeVJlYWN0Um9vdElEID0ge307Cit9CisKKy8qKgor
ICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWluZXIgRE9NIGVsZW1lbnQgdGhhdCBtYXkgY29u
dGFpbiBhIFJlYWN0IGNvbXBvbmVudAorICogQHJldHVybiB7Pyp9IERPTSBlbGVtZW50IHRoYXQg
bWF5IGhhdmUgdGhlIHJlYWN0Um9vdCBJRCwgb3IgbnVsbC4KKyAqLworZnVuY3Rpb24gZ2V0UmVh
Y3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcikgeworICByZXR1cm4gY29udGFpbmVy
ICYmIGNvbnRhaW5lci5maXJzdENoaWxkOworfQorCisvKioKKyAqIEBwYXJhbSB7RE9NRWxlbWVu
dH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRoYXQgbWF5IGNvbnRhaW4gYSBSZWFjdCBjb21wb25l
bnQuCisgKiBAcmV0dXJuIHs/c3RyaW5nfSBBICJyZWFjdFJvb3QiIElELCBpZiBhIFJlYWN0IGNv
bXBvbmVudCBpcyByZW5kZXJlZC4KKyAqLworZnVuY3Rpb24gZ2V0UmVhY3RSb290SUQoY29udGFp
bmVyKSB7CisgIHZhciByb290RWxlbWVudCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5l
cihjb250YWluZXIpOworICByZXR1cm4gcm9vdEVsZW1lbnQgJiYgUmVhY3RJRC5nZXRJRChyb290
RWxlbWVudCk7Cit9CisKKy8qKgorICogTW91bnRpbmcgaXMgdGhlIHByb2Nlc3Mgb2YgaW5pdGlh
bGl6aW5nIGEgUmVhY3QgY29tcG9uZW50IGJ5IGNyZWF0aW5ncyBpdHMKKyAqIHJlcHJlc2VudGF0
aXZlIERPTSBlbGVtZW50cyBhbmQgaW5zZXJ0aW5nIHRoZW0gaW50byBhIHN1cHBsaWVkIGBjb250
YWluZXJgLgorICogQW55IHByaW9yIGNvbnRlbnQgaW5zaWRlIGBjb250YWluZXJgIGlzIGRlc3Ry
b3llZCBpbiB0aGUgcHJvY2Vzcy4KKyAqCisgKiAgIFJlYWN0TW91bnQucmVuZGVyQ29tcG9uZW50
KGNvbXBvbmVudCwgJCgnY29udGFpbmVyJykpOworICoKKyAqICAgPGRpdiBpZD0iY29udGFpbmVy
Ij4gICAgICAgICAgICAgICAgICAgPC0tIFN1cHBsaWVkIGBjb250YWluZXJgLgorICogICAgIDxk
aXYgZGF0YS1yZWFjdGlkPSIuclszXSI+ICAgICAgICAgICA8LS0gUmVuZGVyZWQgcmVhY3RSb290
IG9mIFJlYWN0CisgKiAgICAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb21wb25lbnQuCisgKiAgICAgPC9kaXY+CisgKiAgIDwvZGl2PgorICoKKyAqIEluc2lkZSBv
ZiBgY29udGFpbmVyYCwgdGhlIGZpcnN0IGVsZW1lbnQgcmVuZGVyZWQgaXMgdGhlICJyZWFjdFJv
b3QiLgorICovCit2YXIgUmVhY3RNb3VudCA9IHsKKworICAvKiogVGltZSBzcGVudCBnZW5lcmF0
aW5nIG1hcmt1cC4gKi8KKyAgdG90YWxJbnN0YW50aWF0aW9uVGltZTogMCwKKworICAvKiogVGlt
ZSBzcGVudCBpbnNlcnRpbmcgbWFya3VwIGludG8gdGhlIERPTS4gKi8KKyAgdG90YWxJbmplY3Rp
b25UaW1lOiAwLAorCisgIC8qKiBXaGV0aGVyIHN1cHBvcnQgZm9yIHRvdWNoIGV2ZW50cyBzaG91
bGQgYmUgaW5pdGlhbGl6ZWQuICovCisgIHVzZVRvdWNoRXZlbnRzOiBmYWxzZSwKKworICAvKioK
KyAgICogVGhpcyBpcyBhIGhvb2sgcHJvdmlkZWQgdG8gc3VwcG9ydCByZW5kZXJpbmcgUmVhY3Qg
Y29tcG9uZW50cyB3aGlsZQorICAgKiBlbnN1cmluZyB0aGF0IHRoZSBhcHBhcmVudCBzY3JvbGwg
cG9zaXRpb24gb2YgaXRzIGBjb250YWluZXJgIGRvZXMgbm90CisgICAqIGNoYW5nZS4KKyAgICoK
KyAgICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWluZXIgVGhlIGBjb250YWluZXJgIGJlaW5n
IHJlbmRlcmVkIGludG8uCisgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlbmRlckNhbGxiYWNrIFRo
aXMgbXVzdCBiZSBjYWxsZWQgb25jZSB0byBkbyB0aGUgcmVuZGVyLgorICAgKi8KKyAgc2Nyb2xs
TW9uaXRvcjogZnVuY3Rpb24oY29udGFpbmVyLCByZW5kZXJDYWxsYmFjaykgeworICAgIHJlbmRl
ckNhbGxiYWNrKCk7CisgIH0sCisKKyAgLyoqCisgICAqIEVuc3VyZXMgdGhhdCB0aGUgdG9wLWxl
dmVsIGV2ZW50IGRlbGVnYXRpb24gbGlzdGVuZXIgaXMgc2V0IHVwLiBUaGlzIHdpbGwKKyAgICog
YmUgaW52b2tlZCBzb21lIHRpbWUgYmVmb3JlIHRoZSBmaXJzdCB0aW1lIGFueSBSZWFjdCBjb21w
b25lbnQgaXMgcmVuZGVyZWQuCisgICAqCisgICAqIEBwYXJhbSB7b2JqZWN0fSBUb3BMZXZlbENh
bGxiYWNrQ3JlYXRvcgorICAgKiBAcHJpdmF0ZQorICAgKi8KKyAgcHJlcGFyZVRvcExldmVsRXZl
bnRzOiBmdW5jdGlvbihUb3BMZXZlbENhbGxiYWNrQ3JlYXRvcikgeworICAgIFJlYWN0RXZlbnRF
bWl0dGVyLmVuc3VyZUxpc3RlbmluZygKKyAgICAgIFJlYWN0TW91bnQudXNlVG91Y2hFdmVudHMs
CisgICAgICBUb3BMZXZlbENhbGxiYWNrQ3JlYXRvcgorICAgICk7CisgIH0sCisKKyAgLyoqCisg
ICAqIFRha2UgYSBjb21wb25lbnQgdGhhdCdzIGFscmVhZHkgbW91bnRlZCBpbnRvIHRoZSBET00g
YW5kIHJlcGxhY2UgaXRzIHByb3BzCisgICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IHByZXZD
b21wb25lbnQgY29tcG9uZW50IGluc3RhbmNlIGFscmVhZHkgaW4gdGhlIERPTQorICAgKiBAcGFy
YW0ge1JlYWN0Q29tcG9uZW50fSBuZXh0Q29tcG9uZW50IGNvbXBvbmVudCBpbnN0YW5jZSB0byBy
ZW5kZXIKKyAgICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWluZXIgY29udGFpbmVyIHRvIHJl
bmRlciBpbnRvCisgICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBmdW5jdGlvbiB0cmln
Z2VyZWQgb24gY29tcGxldGlvbgorICAgKi8KKyAgX3VwZGF0ZVJvb3RDb21wb25lbnQ6IGZ1bmN0
aW9uKAorICAgICAgcHJldkNvbXBvbmVudCwKKyAgICAgIG5leHRDb21wb25lbnQsCisgICAgICBj
b250YWluZXIsCisgICAgICBjYWxsYmFjaykgeworICAgIHZhciBuZXh0UHJvcHMgPSBuZXh0Q29t
cG9uZW50LnByb3BzOworICAgIFJlYWN0TW91bnQuc2Nyb2xsTW9uaXRvcihjb250YWluZXIsIGZ1
bmN0aW9uKCkgeworICAgICAgcHJldkNvbXBvbmVudC5yZXBsYWNlUHJvcHMobmV4dFByb3BzLCBj
YWxsYmFjayk7CisgICAgfSk7CisKKyAgICBpZiAodHJ1ZSkgeworICAgICAgLy8gUmVjb3JkIHRo
ZSByb290IGVsZW1lbnQgaW4gY2FzZSBpdCBsYXRlciBnZXRzIHRyYW5zcGxhbnRlZC4KKyAgICAg
IHJvb3RFbGVtZW50c0J5UmVhY3RSb290SURbZ2V0UmVhY3RSb290SUQoY29udGFpbmVyKV0gPQor
ICAgICAgICBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTsKKyAgICB9
CisKKyAgICByZXR1cm4gcHJldkNvbXBvbmVudDsKKyAgfSwKKworICAvKioKKyAgICogUmVnaXN0
ZXIgYSBjb21wb25lbnQgaW50byB0aGUgaW5zdGFuY2UgbWFwIGFuZCBzdGFydCB0aGUgZXZlbnRz
IHN5c3RlbS4KKyAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gbmV4dENvbXBvbmVudCBjb21w
b25lbnQgaW5zdGFuY2UgdG8gcmVuZGVyCisgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFp
bmVyIGNvbnRhaW5lciB0byByZW5kZXIgaW50bworICAgKiBAcmV0dXJuIHtzdHJpbmd9IHJlYWN0
Um9vdCBJRCBwcmVmaXgKKyAgICovCisgIF9yZWdpc3RlckNvbXBvbmVudDogZnVuY3Rpb24obmV4
dENvbXBvbmVudCwgY29udGFpbmVyKSB7CisgICAgUmVhY3RNb3VudC5wcmVwYXJlVG9wTGV2ZWxF
dmVudHMoUmVhY3RFdmVudFRvcExldmVsQ2FsbGJhY2spOworCisgICAgdmFyIHJlYWN0Um9vdElE
ID0gUmVhY3RNb3VudC5yZWdpc3RlckNvbnRhaW5lcihjb250YWluZXIpOworICAgIGluc3RhbmNl
QnlSZWFjdFJvb3RJRFtyZWFjdFJvb3RJRF0gPSBuZXh0Q29tcG9uZW50OworICAgIHJldHVybiBy
ZWFjdFJvb3RJRDsKKyAgfSwKKworICAvKioKKyAgICogUmVuZGVyIGEgbmV3IGNvbXBvbmVudCBp
bnRvIHRoZSBET00uCisgICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IG5leHRDb21wb25lbnQg
Y29tcG9uZW50IGluc3RhbmNlIHRvIHJlbmRlcgorICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNv
bnRhaW5lciBjb250YWluZXIgdG8gcmVuZGVyIGludG8KKyAgICogQHBhcmFtIHtib29sZWFufSBz
aG91bGRSZXVzZU1hcmt1cCBpZiB3ZSBzaG91bGQgc2tpcCB0aGUgbWFya3VwIGluc2VydGlvbgor
ICAgKiBAcmV0dXJuIHtSZWFjdENvbXBvbmVudH0gbmV4dENvbXBvbmVudAorICAgKi8KKyAgX3Jl
bmRlck5ld1Jvb3RDb21wb25lbnQ6IGZ1bmN0aW9uKAorICAgICAgbmV4dENvbXBvbmVudCwKKyAg
ICAgIGNvbnRhaW5lciwKKyAgICAgIHNob3VsZFJldXNlTWFya3VwKSB7CisgICAgdmFyIHJlYWN0
Um9vdElEID0gUmVhY3RNb3VudC5fcmVnaXN0ZXJDb21wb25lbnQobmV4dENvbXBvbmVudCwgY29u
dGFpbmVyKTsKKyAgICBuZXh0Q29tcG9uZW50Lm1vdW50Q29tcG9uZW50SW50b05vZGUoCisgICAg
ICByZWFjdFJvb3RJRCwKKyAgICAgIGNvbnRhaW5lciwKKyAgICAgIHNob3VsZFJldXNlTWFya3Vw
CisgICAgKTsKKworICAgIGlmICh0cnVlKSB7CisgICAgICAvLyBSZWNvcmQgdGhlIHJvb3QgZWxl
bWVudCBpbiBjYXNlIGl0IGxhdGVyIGdldHMgdHJhbnNwbGFudGVkLgorICAgICAgcm9vdEVsZW1l
bnRzQnlSZWFjdFJvb3RJRFtyZWFjdFJvb3RJRF0gPQorICAgICAgICBnZXRSZWFjdFJvb3RFbGVt
ZW50SW5Db250YWluZXIoY29udGFpbmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gbmV4dENvbXBv
bmVudDsKKyAgfSwKKworICAvKioKKyAgICogUmVuZGVycyBhIFJlYWN0IGNvbXBvbmVudCBpbnRv
IHRoZSBET00gaW4gdGhlIHN1cHBsaWVkIGBjb250YWluZXJgLgorICAgKgorICAgKiBJZiB0aGUg
UmVhY3QgY29tcG9uZW50IHdhcyBwcmV2aW91c2x5IHJlbmRlcmVkIGludG8gYGNvbnRhaW5lcmAs
IHRoaXMgd2lsbAorICAgKiBwZXJmb3JtIGFuIHVwZGF0ZSBvbiBpdCBhbmQgb25seSBtdXRhdGUg
dGhlIERPTSBhcyBuZWNlc3NhcnkgdG8gcmVmbGVjdCB0aGUKKyAgICogbGF0ZXN0IFJlYWN0IGNv
bXBvbmVudC4KKyAgICoKKyAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gbmV4dENvbXBvbmVu
dCBDb21wb25lbnQgaW5zdGFuY2UgdG8gcmVuZGVyLgorICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9
IGNvbnRhaW5lciBET00gZWxlbWVudCB0byByZW5kZXIgaW50by4KKyAgICogQHBhcmFtIHs/ZnVu
Y3Rpb259IGNhbGxiYWNrIGZ1bmN0aW9uIHRyaWdnZXJlZCBvbiBjb21wbGV0aW9uCisgICAqIEBy
ZXR1cm4ge1JlYWN0Q29tcG9uZW50fSBDb21wb25lbnQgaW5zdGFuY2UgcmVuZGVyZWQgaW4gYGNv
bnRhaW5lcmAuCisgICAqLworICByZW5kZXJDb21wb25lbnQ6IGZ1bmN0aW9uKG5leHRDb21wb25l
bnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHsKKyAgICB2YXIgcmVnaXN0ZXJlZENvbXBvbmVudCA9
IGluc3RhbmNlQnlSZWFjdFJvb3RJRFtnZXRSZWFjdFJvb3RJRChjb250YWluZXIpXTsKKworICAg
IGlmIChyZWdpc3RlcmVkQ29tcG9uZW50KSB7CisgICAgICBpZiAocmVnaXN0ZXJlZENvbXBvbmVu
dC5jb25zdHJ1Y3RvciA9PT0gbmV4dENvbXBvbmVudC5jb25zdHJ1Y3RvcikgeworICAgICAgICBy
ZXR1cm4gUmVhY3RNb3VudC5fdXBkYXRlUm9vdENvbXBvbmVudCgKKyAgICAgICAgICByZWdpc3Rl
cmVkQ29tcG9uZW50LAorICAgICAgICAgIG5leHRDb21wb25lbnQsCisgICAgICAgICAgY29udGFp
bmVyLAorICAgICAgICAgIGNhbGxiYWNrCisgICAgICAgICk7CisgICAgICB9IGVsc2UgeworICAg
ICAgICBSZWFjdE1vdW50LnVubW91bnRBbmRSZWxlYXNlUmVhY3RSb290Tm9kZShjb250YWluZXIp
OworICAgICAgfQorICAgIH0KKworICAgIHZhciByZWFjdFJvb3RFbGVtZW50ID0gZ2V0UmVhY3RS
b290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7CisgICAgdmFyIGNvbnRhaW5lckhhc1Jl
YWN0TWFya3VwID0KKyAgICAgIHJlYWN0Um9vdEVsZW1lbnQgJiYKKyAgICAgICAgUmVhY3RJbnN0
YW5jZUhhbmRsZXMuaXNSZW5kZXJlZEJ5UmVhY3QocmVhY3RSb290RWxlbWVudCk7CisKKyAgICB2
YXIgc2hvdWxkUmV1c2VNYXJrdXAgPSBjb250YWluZXJIYXNSZWFjdE1hcmt1cCAmJiAhcmVnaXN0
ZXJlZENvbXBvbmVudDsKKworICAgIHZhciBjb21wb25lbnQgPSBSZWFjdE1vdW50Ll9yZW5kZXJO
ZXdSb290Q29tcG9uZW50KAorICAgICAgbmV4dENvbXBvbmVudCwKKyAgICAgIGNvbnRhaW5lciwK
KyAgICAgIHNob3VsZFJldXNlTWFya3VwCisgICAgKTsKKyAgICBjYWxsYmFjayAmJiBjYWxsYmFj
aygpOworICAgIHJldHVybiBjb21wb25lbnQ7CisgIH0sCisKKyAgLyoqCisgICAqIENvbnN0cnVj
dHMgYSBjb21wb25lbnQgaW5zdGFuY2Ugb2YgYGNvbnN0cnVjdG9yYCB3aXRoIGBpbml0aWFsUHJv
cHNgIGFuZAorICAgKiByZW5kZXJzIGl0IGludG8gdGhlIHN1cHBsaWVkIGBjb250YWluZXJgLgor
ICAgKgorICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb25zdHJ1Y3RvciBSZWFjdCBjb21wb25lbnQg
Y29uc3RydWN0b3IuCisgICAqIEBwYXJhbSB7P29iamVjdH0gcHJvcHMgSW5pdGlhbCBwcm9wcyBv
ZiB0aGUgY29tcG9uZW50IGluc3RhbmNlLgorICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNvbnRh
aW5lciBET00gZWxlbWVudCB0byByZW5kZXIgaW50by4KKyAgICogQHJldHVybiB7UmVhY3RDb21w
b25lbnR9IENvbXBvbmVudCBpbnN0YW5jZSByZW5kZXJlZCBpbiBgY29udGFpbmVyYC4KKyAgICov
CisgIGNvbnN0cnVjdEFuZFJlbmRlckNvbXBvbmVudDogZnVuY3Rpb24oY29uc3RydWN0b3IsIHBy
b3BzLCBjb250YWluZXIpIHsKKyAgICByZXR1cm4gUmVhY3RNb3VudC5yZW5kZXJDb21wb25lbnQo
Y29uc3RydWN0b3IocHJvcHMpLCBjb250YWluZXIpOworICB9LAorCisgIC8qKgorICAgKiBDb25z
dHJ1Y3RzIGEgY29tcG9uZW50IGluc3RhbmNlIG9mIGBjb25zdHJ1Y3RvcmAgd2l0aCBgaW5pdGlh
bFByb3BzYCBhbmQKKyAgICogcmVuZGVycyBpdCBpbnRvIGEgY29udGFpbmVyIG5vZGUgaWRlbnRp
ZmllZCBieSBzdXBwbGllZCBgaWRgLgorICAgKgorICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21w
b25lbnRDb25zdHJ1Y3RvciBSZWFjdCBjb21wb25lbnQgY29uc3RydWN0b3IKKyAgICogQHBhcmFt
IHs/b2JqZWN0fSBwcm9wcyBJbml0aWFsIHByb3BzIG9mIHRoZSBjb21wb25lbnQgaW5zdGFuY2Uu
CisgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBvZiB0aGUgRE9NIGVsZW1lbnQgdG8gcmVuZGVy
IGludG8uCisgICAqIEByZXR1cm4ge1JlYWN0Q29tcG9uZW50fSBDb21wb25lbnQgaW5zdGFuY2Ug
cmVuZGVyZWQgaW4gdGhlIGNvbnRhaW5lciBub2RlLgorICAgKi8KKyAgY29uc3RydWN0QW5kUmVu
ZGVyQ29tcG9uZW50QnlJRDogZnVuY3Rpb24oY29uc3RydWN0b3IsIHByb3BzLCBpZCkgeworICAg
IHJldHVybiBSZWFjdE1vdW50LmNvbnN0cnVjdEFuZFJlbmRlckNvbXBvbmVudChjb25zdHJ1Y3Rv
ciwgcHJvcHMsICQoaWQpKTsKKyAgfSwKKworICAvKioKKyAgICogUmVnaXN0ZXJzIGEgY29udGFp
bmVyIG5vZGUgaW50byB3aGljaCBSZWFjdCBjb21wb25lbnRzIHdpbGwgYmUgcmVuZGVyZWQuCisg
ICAqIFRoaXMgYWxzbyBjcmVhdGVzIHRoZSAicmVhdFJvb3QiIElEIHRoYXQgd2lsbCBiZSBhc3Np
Z25lZCB0byB0aGUgZWxlbWVudAorICAgKiByZW5kZXJlZCB3aXRoaW4uCisgICAqCisgICAqIEBw
YXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRvIHJlZ2lzdGVyIGFzIGEg
Y29udGFpbmVyLgorICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSAicmVhY3RSb290IiBJRCBvZiBl
bGVtZW50cyByZW5kZXJlZCB3aXRoaW4uCisgICAqLworICByZWdpc3RlckNvbnRhaW5lcjogZnVu
Y3Rpb24oY29udGFpbmVyKSB7CisgICAgdmFyIHJlYWN0Um9vdElEID0gZ2V0UmVhY3RSb290SUQo
Y29udGFpbmVyKTsKKyAgICBpZiAocmVhY3RSb290SUQpIHsKKyAgICAgIC8vIElmIG9uZSBleGlz
dHMsIG1ha2Ugc3VyZSBpdCBpcyBhIHZhbGlkICJyZWFjdFJvb3QiIElELgorICAgICAgcmVhY3RS
b290SUQgPSBSZWFjdEluc3RhbmNlSGFuZGxlcy5nZXRSZWFjdFJvb3RJREZyb21Ob2RlSUQocmVh
Y3RSb290SUQpOworICAgIH0KKyAgICBpZiAoIXJlYWN0Um9vdElEKSB7CisgICAgICAvLyBObyB2
YWxpZCAicmVhY3RSb290IiBJRCBmb3VuZCwgY3JlYXRlIG9uZS4KKyAgICAgIHJlYWN0Um9vdElE
ID0gUmVhY3RJbnN0YW5jZUhhbmRsZXMuY3JlYXRlUmVhY3RSb290SUQoKTsKKyAgICB9CisgICAg
Y29udGFpbmVyc0J5UmVhY3RSb290SURbcmVhY3RSb290SURdID0gY29udGFpbmVyOworICAgIHJl
dHVybiByZWFjdFJvb3RJRDsKKyAgfSwKKworICAvKioKKyAgICogVW5tb3VudHMgYW5kIGRlc3Ry
b3lzIHRoZSBSZWFjdCBjb21wb25lbnQgcmVuZGVyZWQgaW4gdGhlIGBjb250YWluZXJgLgorICAg
KgorICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNvbnRhaW5lciBET00gZWxlbWVudCBjb250YWlu
aW5nIGEgUmVhY3QgY29tcG9uZW50LgorICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGEg
Y29tcG9uZW50IHdhcyBmb3VuZCBpbiBhbmQgdW5tb3VudGVkIGZyb20KKyAgICogICAgICAgICAg
ICAgICAgICAgYGNvbnRhaW5lcmAKKyAgICovCisgIHVubW91bnRBbmRSZWxlYXNlUmVhY3RSb290
Tm9kZTogZnVuY3Rpb24oY29udGFpbmVyKSB7CisgICAgdmFyIHJlYWN0Um9vdElEID0gZ2V0UmVh
Y3RSb290SUQoY29udGFpbmVyKTsKKyAgICB2YXIgY29tcG9uZW50ID0gaW5zdGFuY2VCeVJlYWN0
Um9vdElEW3JlYWN0Um9vdElEXTsKKyAgICBpZiAoIWNvbXBvbmVudCkgeworICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICBjb21wb25lbnQudW5tb3VudENvbXBvbmVudEZyb21Ob2RlKGNv
bnRhaW5lcik7CisgICAgZGVsZXRlIGluc3RhbmNlQnlSZWFjdFJvb3RJRFtyZWFjdFJvb3RJRF07
CisgICAgZGVsZXRlIGNvbnRhaW5lcnNCeVJlYWN0Um9vdElEW3JlYWN0Um9vdElEXTsKKyAgICBp
ZiAodHJ1ZSkgeworICAgICAgZGVsZXRlIHJvb3RFbGVtZW50c0J5UmVhY3RSb290SURbcmVhY3RS
b290SURdOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfSwKKworICAvKioKKyAgICogRmlu
ZHMgdGhlIGNvbnRhaW5lciBET00gZWxlbWVudCB0aGF0IGNvbnRhaW5zIFJlYWN0IGNvbXBvbmVu
dCB0byB3aGljaCB0aGUKKyAgICogc3VwcGxpZWQgRE9NIGBpZGAgYmVsb25ncy4KKyAgICoKKyAg
ICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBJRCBvZiBhbiBlbGVtZW50IHJlbmRlcmVkIGJ5IGEg
UmVhY3QgY29tcG9uZW50LgorICAgKiBAcmV0dXJuIHs/RE9NRWxlbWVudH0gRE9NIGVsZW1lbnQg
dGhhdCBjb250YWlucyB0aGUgYGlkYC4KKyAgICovCisgIGZpbmRSZWFjdENvbnRhaW5lckZvcklE
OiBmdW5jdGlvbihpZCkgeworICAgIHZhciByZWFjdFJvb3RJRCA9IFJlYWN0SW5zdGFuY2VIYW5k
bGVzLmdldFJlYWN0Um9vdElERnJvbU5vZGVJRChpZCk7CisgICAgdmFyIGNvbnRhaW5lciA9IGNv
bnRhaW5lcnNCeVJlYWN0Um9vdElEW3JlYWN0Um9vdElEXTsKKworICAgIGlmICh0cnVlKSB7Cisg
ICAgICB2YXIgcm9vdEVsZW1lbnQgPSByb290RWxlbWVudHNCeVJlYWN0Um9vdElEW3JlYWN0Um9v
dElEXTsKKyAgICAgIGlmIChyb290RWxlbWVudCAmJiByb290RWxlbWVudC5wYXJlbnROb2RlICE9
PSBjb250YWluZXIpIHsKKyAgICAgICAgaW52YXJpYW50KAorICAgICAgICAgIC8vIENhbGwgcmF3
R2V0SUQgaGVyZSBiZWNhdXNlIGdldElEIGNhbGxzIGlzVmFsaWQgd2hpY2ggY2FsbHMKKyAgICAg
ICAgICAvLyBmaW5kUmVhY3RDb250YWluZXJGb3JJRCAodGhpcyBmdW5jdGlvbikuCisgICAgICAg
ICAgUmVhY3RJRC5yYXdHZXRJRChyb290RWxlbWVudCkgPT09IHJlYWN0Um9vdElELAorICAgICAg
ICAgICdSZWFjdE1vdW50OiBSb290IGVsZW1lbnQgSUQgZGlmZmVyZWQgZnJvbSByZWFjdFJvb3RJ
RC4nCisgICAgICAgICk7CisKKyAgICAgICAgdmFyIGNvbnRhaW5lckNoaWxkID0gY29udGFpbmVy
LmZpcnN0Q2hpbGQ7CisgICAgICAgIGlmIChjb250YWluZXJDaGlsZCAmJgorICAgICAgICAgICAg
cmVhY3RSb290SUQgPT09IFJlYWN0SUQucmF3R2V0SUQoY29udGFpbmVyQ2hpbGQpKSB7CisgICAg
ICAgICAgLy8gSWYgdGhlIGNvbnRhaW5lciBoYXMgYSBuZXcgY2hpbGQgd2l0aCB0aGUgc2FtZSBJ
RCBhcyB0aGUgb2xkCisgICAgICAgICAgLy8gcm9vdCBlbGVtZW50LCB0aGVuIHJvb3RFbGVtZW50
c0J5UmVhY3RSb290SURbcmVhY3RSb290SURdIGlzCisgICAgICAgICAgLy8ganVzdCBzdGFsZSBh
bmQgbmVlZHMgdG8gYmUgdXBkYXRlZC4gVGhlIGNhc2UgdGhhdCBkZXNlcnZlcyBhCisgICAgICAg
ICAgLy8gd2FybmluZyBpcyB3aGVuIHRoZSBjb250YWluZXIgaXMgZW1wdHkuCisgICAgICAgICAg
cm9vdEVsZW1lbnRzQnlSZWFjdFJvb3RJRFtyZWFjdFJvb3RJRF0gPSBjb250YWluZXJDaGlsZDsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBjb25zb2xlLndhcm4oCisgICAgICAgICAgICAn
UmVhY3RNb3VudDogUm9vdCBlbGVtZW50IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBpdHMgb3JpZ2lu
YWwgJyArCisgICAgICAgICAgICAnY29udGFpbmVyLiBOZXcgY29udGFpbmVyOicsIHJvb3RFbGVt
ZW50LnBhcmVudE5vZGUKKyAgICAgICAgICApOworICAgICAgICB9CisgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIGNvbnRhaW5lcjsKKyAgfSwKKworICAvKioKKyAgICogRmluZHMgYW4gZWxl
bWVudCByZW5kZXJlZCBieSBSZWFjdCB3aXRoIHRoZSBzdXBwbGllZCBJRC4KKyAgICoKKyAgICog
QHBhcmFtIHtzdHJpbmd9IGlkIElEIG9mIGEgRE9NIG5vZGUgaW4gdGhlIFJlYWN0IGNvbXBvbmVu
dC4KKyAgICogQHJldHVybiB7RE9NRWxlbWVudH0gUm9vdCBET00gbm9kZSBvZiB0aGUgUmVhY3Qg
Y29tcG9uZW50LgorICAgKi8KKyAgZmluZFJlYWN0Tm9kZUJ5SUQ6IGZ1bmN0aW9uKGlkKSB7Cisg
ICAgdmFyIHJlYWN0Um9vdCA9IFJlYWN0TW91bnQuZmluZFJlYWN0Q29udGFpbmVyRm9ySUQoaWQp
OworICAgIHJldHVybiBSZWFjdEluc3RhbmNlSGFuZGxlcy5maW5kQ29tcG9uZW50Um9vdChyZWFj
dFJvb3QsIGlkKTsKKyAgfQorCit9OworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0TW91bnQ7CisK
K30pKCkKK30seyIuLyQiOjEsIi4vUmVhY3RFdmVudEVtaXR0ZXIiOjMzLCIuL1JlYWN0RXZlbnRU
b3BMZXZlbENhbGxiYWNrIjozNCwiLi9SZWFjdElEIjozNSwiLi9SZWFjdEluc3RhbmNlSGFuZGxl
cyI6MzcsIi4vaW52YXJpYW50Ijo3NX1dLDM5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKKyhmdW5jdGlvbigpey8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4K
KyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0
aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNv
bXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0
aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNF
TlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3Jl
ZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNl
bnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJB
TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGll
ZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmlu
ZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoK
KyAqIEBwcm92aWRlc01vZHVsZSBSZWFjdE11bHRpQ2hpbGQKKyAqLworCisidXNlIHN0cmljdCI7
CisKK3ZhciBSZWFjdENvbXBvbmVudCA9IHJlcXVpcmUoIi4vUmVhY3RDb21wb25lbnQiKTsKKwor
LyoqCisgKiBHaXZlbiBhIGBjdXJDaGlsZGAgYW5kIGBuZXdDaGlsZGAsIGRldGVybWluZXMgaWYg
YGN1ckNoaWxkYCBzaG91bGQgYmUgbWFuYWdlZAorICogYXMgaXQgZXhpc3RzLCBhcyBvcHBvc2Vk
IHRvIGJlaW5nIGRlc3Ryb3llZCBhbmQvb3IgcmVwbGFjZWQuCisgKiBAcGFyYW0gez9SZWFjdENv
bXBvbmVudH0gY3VyQ2hpbGQKKyAqIEBwYXJhbSB7P1JlYWN0Q29tcG9uZW50fSBuZXdDaGlsZAor
ICogQHJldHVybiB7IWJvb2xlYW59IFdoZXRoZXIgb3Igbm90IGBjdXJDaGlsZGAgc2hvdWxkIGJl
IHVwZGF0ZWQgd2l0aAorICogYG5ld0NoaWxkYCdzIHByb3BzCisgKi8KK2Z1bmN0aW9uIHNob3Vs
ZE1hbmFnZUV4aXN0aW5nKGN1ckNoaWxkLCBuZXdDaGlsZCkgeworICByZXR1cm4gY3VyQ2hpbGQg
JiYgbmV3Q2hpbGQgJiYgY3VyQ2hpbGQuY29uc3RydWN0b3IgPT09IG5ld0NoaWxkLmNvbnN0cnVj
dG9yOworfQorCisvKioKKyAqIGBSZWFjdE11bHRpQ2hpbGRgIHByb3ZpZGVzIGNvbW1vbiBmdW5j
dGlvbmFsaXR5IGZvciBjb21wb25lbnRzIHRoYXQgaGF2ZQorICogbXVsdGlwbGUgY2hpbGRyZW4u
IFN0YW5kYXJkIGBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudGBzIGRvIG5vdCBjdXJyZW50bHkgaGF2
ZQorICogbXVsdGlwbGUgY2hpbGRyZW4uIGBSZWFjdE5hdGl2ZUNvbXBvbmVudGBzIGRvLCBob3dl
dmVyLiBPdGhlciBzcGVjaWFsbHkKKyAqIHJlY29uY2lsZWQgY29tcG9uZW50cyB3aWxsIGFsc28g
aGF2ZSBtdWx0aXBsZSBjaGlsZHJlbi4gQ29udGFpbnMgdGhyZWUKKyAqIGludGVybmFsbHkgdXNl
ZCBwcm9wZXJ0aWVzIHRoYXQgYXJlIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBzdGF0ZSB0aHJvdWdo
b3V0CisgKiB0aGUgYHVwZGF0ZU11bHRpQ2hpbGRgIHByb2Nlc3MuCisgKgorICogQGNsYXNzIFJl
YWN0TXVsdGlDaGlsZAorICovCisKKy8qKgorICogQGxlbmRzIGBSZWFjdE11bHRpQ2hpbGRNaXhp
bmAuCisgKi8KK3ZhciBSZWFjdE11bHRpQ2hpbGRNaXhpbiA9IHsKKworICBlbnF1ZXVlTWFya3Vw
QXQ6IGZ1bmN0aW9uKG1hcmt1cCwgaW5zZXJ0QXQpIHsKKyAgICB0aGlzLmRvbU9wZXJhdGlvbnMg
PSB0aGlzLmRvbU9wZXJhdGlvbnMgfHwgW107CisgICAgdGhpcy5kb21PcGVyYXRpb25zLnB1c2go
e2luc2VydE1hcmt1cDogbWFya3VwLCBmaW5hbEluZGV4OiBpbnNlcnRBdH0pOworICB9LAorCisg
IGVucXVldWVNb3ZlOiBmdW5jdGlvbihvcmlnaW5hbEluZGV4LCBmaW5hbEluZGV4KSB7CisgICAg
dGhpcy5kb21PcGVyYXRpb25zID0gdGhpcy5kb21PcGVyYXRpb25zIHx8IFtdOworICAgIHRoaXMu
ZG9tT3BlcmF0aW9ucy5wdXNoKHttb3ZlRnJvbTogb3JpZ2luYWxJbmRleCwgZmluYWxJbmRleDog
ZmluYWxJbmRleH0pOworICB9LAorCisgIGVucXVldWVVbm1vdW50Q2hpbGRCeU5hbWU6IGZ1bmN0
aW9uKG5hbWUsIHJlbW92ZUNoaWxkKSB7CisgICAgaWYgKFJlYWN0Q29tcG9uZW50LmlzVmFsaWRD
b21wb25lbnQocmVtb3ZlQ2hpbGQpKSB7CisgICAgICB0aGlzLmRvbU9wZXJhdGlvbnMgPSB0aGlz
LmRvbU9wZXJhdGlvbnMgfHwgW107CisgICAgICB0aGlzLmRvbU9wZXJhdGlvbnMucHVzaCh7cmVt
b3ZlQXQ6IHJlbW92ZUNoaWxkLl9kb21JbmRleH0pOworICAgICAgcmVtb3ZlQ2hpbGQudW5tb3Vu
dENvbXBvbmVudCAmJiByZW1vdmVDaGlsZC51bm1vdW50Q29tcG9uZW50KCk7CisgICAgICBkZWxl
dGUgdGhpcy5fcmVuZGVyZWRDaGlsZHJlbltuYW1lXTsKKyAgICB9CisgIH0sCisKKyAgLyoqCisg
ICAqIFByb2Nlc3MgYW55IHBlbmRpbmcgRE9NIG9wZXJhdGlvbnMgdGhhdCBoYXZlIGJlZW4gYWNj
dW11bGF0ZWQgd2hlbiB1cGRhdGluZworICAgKiB0aGUgVUkuIEJ5IGRlZmF1bHQsIHdlIGV4ZWN1
dGUgdGhlIGluamVjdGVkIGBET01JRE9wZXJhdGlvbnNgIG1vZHVsZSdzCisgICAqIGBtYW5hZ2VD
aGlsZHJlbkJ5UGFyZW50SURgIHdoaWNoIGRvZXMgZXhlY3V0ZXMgdGhlIERPTSBvcGVyYXRpb25z
IHdpdGhvdXQKKyAgICogYW55IGFuaW1hdGlvbi4gSXQgY2FuIGJlIHVzZWQgYXMgYSByZWZlcmVu
Y2UgaW1wbGVtZW50YXRpb24gZm9yIHNwZWNpYWwKKyAgICogYW5pbWF0aW9uIGJhc2VkIGltcGxl
bWVudGF0aW9ucy4KKyAgICoKKyAgICogQGFic3RyYWN0CisgICAqLworICBwcm9jZXNzQ2hpbGRE
T01PcGVyYXRpb25zUXVldWU6IGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlzLmRvbU9wZXJhdGlv
bnMpIHsKKyAgICAgIFJlYWN0Q29tcG9uZW50LkRPTUlET3BlcmF0aW9ucworICAgICAgICAubWFu
YWdlQ2hpbGRyZW5CeVBhcmVudElEKHRoaXMuX3Jvb3ROb2RlSUQsIHRoaXMuZG9tT3BlcmF0aW9u
cyk7CisgICAgICB0aGlzLmRvbU9wZXJhdGlvbnMgPSBudWxsOworICAgIH0KKyAgfSwKKworICB1
bm1vdW50TXVsdGlDaGlsZDogZnVuY3Rpb24oKSB7CisgICAgdmFyIHJlbmRlcmVkQ2hpbGRyZW4g
PSB0aGlzLl9yZW5kZXJlZENoaWxkcmVuOworICAgIGZvciAodmFyIG5hbWUgaW4gcmVuZGVyZWRD
aGlsZHJlbikgeworICAgICAgaWYgKHJlbmRlcmVkQ2hpbGRyZW4uaGFzT3duUHJvcGVydHkobmFt
ZSkgJiYgcmVuZGVyZWRDaGlsZHJlbltuYW1lXSkgeworICAgICAgICB2YXIgcmVuZGVyZWRDaGls
ZCA9IHJlbmRlcmVkQ2hpbGRyZW5bbmFtZV07CisgICAgICAgIHJlbmRlcmVkQ2hpbGQudW5tb3Vu
dENvbXBvbmVudCAmJiByZW5kZXJlZENoaWxkLnVubW91bnRDb21wb25lbnQoKTsKKyAgICAgIH0K
KyAgICB9CisgICAgdGhpcy5fcmVuZGVyZWRDaGlsZHJlbiA9IG51bGw7CisgIH0sCisKKyAgLyoq
CisgICAqIEdlbmVyYXRlcyBtYXJrdXAgZm9yIGEgY29tcG9uZW50IHRoYXQgaG9sZHMgbXVsdGlw
bGUgY2hpbGRyZW4uICN0b2RvOiBBbGxvdworICAgKiBhbGwgYFJlYWN0TXVsdGlDaGlsZE1peGlu
YHMgdG8gc3VwcG9ydCBoYXZpbmcgYXJyYXlzIG9mIGNoaWxkcmVuIHdpdGhvdXQgYQorICAgKiBj
b250YWluZXIgbm9kZS4gVGhpcyBjdXJyZW50IGltcGxlbWVudGF0aW9uIG1heSBhc3N1bWUgdGhh
dCBjaGlsZHJlbiBleGlzdAorICAgKiBhdCBkb21JbmRpY2VzIFswLCBwYXJlbnROb2RlLmxlbmd0
aF0uCisgICAqCisgICAqIEhhcyBzaWRlIGVmZmVjdHMgb2YgKGxpa2VseSkgY2F1c2luZyBldmVu
dHMgdG8gYmUgcmVnaXN0ZXJlZC4gQWxzbywgZXZlcnkKKyAgICogY29tcG9uZW50IGluc3RhbmNl
IG1heSBvbmx5IGJlIHJlbmRlcmVkIG9uY2UuCisgICAqCisgICAqIEBwYXJhbSB7P09iamVjdH0g
Y2hpbGRyZW4gRmxhdHRlbmVkIGNoaWxkcmVuIG9iamVjdC4KKyAgICogQHJldHVybiB7IVN0cmlu
Z30gVGhlIHJlbmRlcmVkIG1hcmt1cC4KKyAgICovCisgIG1vdW50TXVsdGlDaGlsZDogZnVuY3Rp
b24oY2hpbGRyZW4sIHRyYW5zYWN0aW9uKSB7CisgICAgdmFyIGFjY3VtID0gJyc7CisgICAgdmFy
IGluZGV4ID0gMDsKKyAgICBmb3IgKHZhciBuYW1lIGluIGNoaWxkcmVuKSB7CisgICAgICB2YXIg
Y2hpbGQgPSBjaGlsZHJlbltuYW1lXTsKKyAgICAgIGlmIChjaGlsZHJlbi5oYXNPd25Qcm9wZXJ0
eShuYW1lKSAmJiBjaGlsZCkgeworICAgICAgICBhY2N1bSArPSBjaGlsZC5tb3VudENvbXBvbmVu
dCgKKyAgICAgICAgICB0aGlzLl9yb290Tm9kZUlEICsgJy4nICsgbmFtZSwKKyAgICAgICAgICB0
cmFuc2FjdGlvbgorICAgICAgICApOworICAgICAgICBjaGlsZC5fZG9tSW5kZXggPSBpbmRleDsK
KyAgICAgICAgaW5kZXgrKzsKKyAgICAgIH0KKyAgICB9CisgICAgdGhpcy5fcmVuZGVyZWRDaGls
ZHJlbiA9IGNoaWxkcmVuOyAvLyBjaGlsZHJlbiBhcmUgaW4ganVzdCB0aGUgcmlnaHQgZm9ybSEK
KyAgICB0aGlzLmRvbU9wZXJhdGlvbnMgPSBudWxsOworICAgIHJldHVybiBhY2N1bTsKKyAgfSwK
KworICAvKioKKyAgICogUmVjb25jaWxlcyBuZXcgY2hpbGRyZW4gd2l0aCBvbGQgY2hpbGRyZW4g
aW4gdGhyZWUgcGhhc2VzLgorICAgKgorICAgKiAtIEFkZHMgbmV3IGNvbnRlbnQgd2hpbGUgdXBk
YXRpbmcgZXhpc3RpbmcgY2hpbGRyZW4gdGhhdCBzaG91bGQgcmVtYWluLgorICAgKiAtIFJlbW92
ZSBjaGlsZHJlbiB0aGF0IGFyZSBubyBsb25nZXIgcHJlc2VudCBpbiB0aGUgbmV4dCBjaGlsZHJl
bi4KKyAgICogLSBBcyBhIHZlcnkgbGFzdCBzdGVwLCBtb3ZlcyBleGlzdGluZyBkb20gc3RydWN0
dXJlcyBhcm91bmQuCisgICAqIC0gKENvbW1lbnQgMSkgYGN1ckNoaWxkcmVuRE9NSW5kZXhgIGlz
IHRoZSBsYXJnZXN0IGluZGV4IG9mIHRoZSBjdXJyZW50CisgICAqICAgcmVuZGVyZWQgY2hpbGRy
ZW4gdGhhdCBhcHBlYXJzIGluIHRoZSBuZXh0IGNoaWxkcmVuIGFuZCBkaWQgbm90IG5lZWQgdG8K
KyAgICogICBiZSAibW92ZWQiLgorICAgKiAtIChDb21tZW50IDIpIFRoaXMgaXMgdGhlIGtleSBp
bnNpZ2h0LiBJZiBhbnkgbm9uLXJlbW92ZWQgY2hpbGQncyBwcmV2aW91cworICAgKiAgIGluZGV4
IGlzIGxlc3MgdGhhbiBgY3VyQ2hpbGRyZW5ET01JbmRleGAgaXQgbXVzdCBiZSBtb3ZlZC4KKyAg
ICoKKyAgICogQHBhcmFtIHs/T2JqZWN0fSBjaGlsZHJlbiBGbGF0dGVuZWQgY2hpbGRyZW4gb2Jq
ZWN0LgorICAgKi8KKyAgdXBkYXRlTXVsdGlDaGlsZDogZnVuY3Rpb24obmV4dENoaWxkcmVuLCB0
cmFuc2FjdGlvbikgeworICAgIGlmICghbmV4dENoaWxkcmVuICYmICF0aGlzLl9yZW5kZXJlZENo
aWxkcmVuKSB7CisgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlmIChuZXh0Q2hpbGRyZW4gJiYg
IXRoaXMuX3JlbmRlcmVkQ2hpbGRyZW4pIHsKKyAgICAgIHRoaXMuX3JlbmRlcmVkQ2hpbGRyZW4g
PSB7fTsgLy8gbGF6aWx5IGFsbG9jYXRlIGJhY2tpbmcgc3RvcmUgd2l0aCBub3RoaW5nCisgICAg
fSBlbHNlIGlmICghbmV4dENoaWxkcmVuICYmIHRoaXMuX3JlbmRlcmVkQ2hpbGRyZW4pIHsKKyAg
ICAgIG5leHRDaGlsZHJlbiA9IHt9OworICAgIH0KKyAgICB2YXIgcm9vdERvbUlkRG90ID0gdGhp
cy5fcm9vdE5vZGVJRCArICcuJzsKKyAgICB2YXIgbWFya3VwQnVmZmVyID0gbnVsbDsgIC8vIEFj
Y3VtdWxhdGUgYWRqYWNlbnQgbmV3IGNoaWxkcmVuIG1hcmt1cC4KKyAgICB2YXIgbnVtUGVuZGlu
Z0luc2VydCA9IDA7IC8vIEhvdyBtYW55IHJvb3Qgbm9kZXMgYXJlIHdhaXRpbmcgaW4gbWFya3Vw
QnVmZmVyCisgICAgdmFyIGxvb3BEb21JbmRleCA9IDA7ICAgICAvLyBJbmRleCBvZiBsb29wIHRo
cm91Z2ggbmV3IGNoaWxkcmVuLgorICAgIHZhciBjdXJDaGlsZHJlbkRPTUluZGV4ID0gMDsgIC8v
IFNlZSAoQ29tbWVudCAxKQorICAgIGZvciAodmFyIG5hbWUgaW4gbmV4dENoaWxkcmVuKSB7Cisg
ICAgICBpZiAoIW5leHRDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge2NvbnRpbnVlO30K
KyAgICAgIHZhciBjdXJDaGlsZCA9IHRoaXMuX3JlbmRlcmVkQ2hpbGRyZW5bbmFtZV07CisgICAg
ICB2YXIgbmV4dENoaWxkID0gbmV4dENoaWxkcmVuW25hbWVdOworICAgICAgaWYgKHNob3VsZE1h
bmFnZUV4aXN0aW5nKGN1ckNoaWxkLCBuZXh0Q2hpbGQpKSB7CisgICAgICAgIGlmIChtYXJrdXBC
dWZmZXIpIHsKKyAgICAgICAgICB0aGlzLmVucXVldWVNYXJrdXBBdChtYXJrdXBCdWZmZXIsIGxv
b3BEb21JbmRleCAtIG51bVBlbmRpbmdJbnNlcnQpOworICAgICAgICAgIG1hcmt1cEJ1ZmZlciA9
IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgbnVtUGVuZGluZ0luc2VydCA9IDA7CisgICAgICAg
IGlmIChjdXJDaGlsZC5fZG9tSW5kZXggPCBjdXJDaGlsZHJlbkRPTUluZGV4KSB7IC8vIChDb21t
ZW50IDIpCisgICAgICAgICAgdGhpcy5lbnF1ZXVlTW92ZShjdXJDaGlsZC5fZG9tSW5kZXgsIGxv
b3BEb21JbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgY3VyQ2hpbGRyZW5ET01JbmRleCA9IE1h
dGgubWF4KGN1ckNoaWxkLl9kb21JbmRleCwgY3VyQ2hpbGRyZW5ET01JbmRleCk7CisgICAgICAg
IGN1ckNoaWxkLnJlY2VpdmVQcm9wcyhuZXh0Q2hpbGQucHJvcHMsIHRyYW5zYWN0aW9uKTsKKyAg
ICAgICAgY3VyQ2hpbGQuX2RvbUluZGV4ID0gbG9vcERvbUluZGV4OworICAgICAgfSBlbHNlIHsK
KyAgICAgICAgaWYgKGN1ckNoaWxkKSB7ICAgICAgICAgICAgICAgLy8gIXNob3VsZFVwZGF0ZSAm
JiBjdXJDaGlsZCA9PiBkZWxldGUKKyAgICAgICAgICB0aGlzLmVucXVldWVVbm1vdW50Q2hpbGRC
eU5hbWUobmFtZSwgY3VyQ2hpbGQpOworICAgICAgICAgIGN1ckNoaWxkcmVuRE9NSW5kZXggPQor
ICAgICAgICAgICAgTWF0aC5tYXgoY3VyQ2hpbGQuX2RvbUluZGV4LCBjdXJDaGlsZHJlbkRPTUlu
ZGV4KTsKKyAgICAgICAgfQorICAgICAgICBpZiAobmV4dENoaWxkKSB7ICAgICAgICAgICAgICAv
LyAhc2hvdWxkVXBkYXRlICYmIG5leHRDaGlsZCA9PiBpbnNlcnQKKyAgICAgICAgICB0aGlzLl9y
ZW5kZXJlZENoaWxkcmVuW25hbWVdID0gbmV4dENoaWxkOworICAgICAgICAgIHZhciBuZXh0TWFy
a3VwID0KKyAgICAgICAgICAgIG5leHRDaGlsZC5tb3VudENvbXBvbmVudChyb290RG9tSWREb3Qg
KyBuYW1lLCB0cmFuc2FjdGlvbik7CisgICAgICAgICAgbWFya3VwQnVmZmVyID0gbWFya3VwQnVm
ZmVyID8gbWFya3VwQnVmZmVyICsgbmV4dE1hcmt1cCA6IG5leHRNYXJrdXA7CisgICAgICAgICAg
bnVtUGVuZGluZ0luc2VydCsrOworICAgICAgICAgIG5leHRDaGlsZC5fZG9tSW5kZXggPSBsb29w
RG9tSW5kZXg7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGxvb3BEb21JbmRleCA9IG5leHRD
aGlsZCA/IGxvb3BEb21JbmRleCArIDEgOiBsb29wRG9tSW5kZXg7CisgICAgfQorICAgIGlmICht
YXJrdXBCdWZmZXIpIHsKKyAgICAgIHRoaXMuZW5xdWV1ZU1hcmt1cEF0KG1hcmt1cEJ1ZmZlciwg
bG9vcERvbUluZGV4IC0gbnVtUGVuZGluZ0luc2VydCk7CisgICAgfQorICAgIGZvciAodmFyIGNo
aWxkTmFtZSBpbiB0aGlzLl9yZW5kZXJlZENoaWxkcmVuKSB7IC8vIGZyb20gb3RoZXIgZGlyZWN0
aW9uCisgICAgICBpZiAoIXRoaXMuX3JlbmRlcmVkQ2hpbGRyZW4uaGFzT3duUHJvcGVydHkoY2hp
bGROYW1lKSkgeyBjb250aW51ZTsgfQorICAgICAgdmFyIGNoaWxkID0gdGhpcy5fcmVuZGVyZWRD
aGlsZHJlbltjaGlsZE5hbWVdOworICAgICAgaWYgKGNoaWxkICYmICFuZXh0Q2hpbGRyZW5bY2hp
bGROYW1lXSkgeworICAgICAgICB0aGlzLmVucXVldWVVbm1vdW50Q2hpbGRCeU5hbWUoY2hpbGRO
YW1lLCBjaGlsZCk7CisgICAgICB9CisgICAgfQorICAgIHRoaXMucHJvY2Vzc0NoaWxkRE9NT3Bl
cmF0aW9uc1F1ZXVlKCk7CisgIH0KK307CisKK3ZhciBSZWFjdE11bHRpQ2hpbGQgPSB7CisgIE1p
eGluOiBSZWFjdE11bHRpQ2hpbGRNaXhpbgorfTsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdE11
bHRpQ2hpbGQ7CisKK30pKCkKK30seyIuL1JlYWN0Q29tcG9uZW50IjoyMn1dLDQwOltmdW5jdGlv
bihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJv
b2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNp
b24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhj
ZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEg
Y29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNl
bnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxh
dyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRI
T1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mg
b3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdl
IGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNl
bnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBSZWFjdE5hdGl2ZUNvbXBvbmVudAorICogQHR5
cGVjaGVja3Mgc3RhdGljLW9ubHkKKyAqLworCisidXNlIHN0cmljdCI7CisKK3ZhciBDU1NQcm9w
ZXJ0eU9wZXJhdGlvbnMgPSByZXF1aXJlKCIuL0NTU1Byb3BlcnR5T3BlcmF0aW9ucyIpOwordmFy
IERPTVByb3BlcnR5ID0gcmVxdWlyZSgiLi9ET01Qcm9wZXJ0eSIpOwordmFyIERPTVByb3BlcnR5
T3BlcmF0aW9ucyA9IHJlcXVpcmUoIi4vRE9NUHJvcGVydHlPcGVyYXRpb25zIik7Cit2YXIgUmVh
Y3RDb21wb25lbnQgPSByZXF1aXJlKCIuL1JlYWN0Q29tcG9uZW50Iik7Cit2YXIgUmVhY3RFdmVu
dEVtaXR0ZXIgPSByZXF1aXJlKCIuL1JlYWN0RXZlbnRFbWl0dGVyIik7Cit2YXIgUmVhY3RNdWx0
aUNoaWxkID0gcmVxdWlyZSgiLi9SZWFjdE11bHRpQ2hpbGQiKTsKK3ZhciBSZWFjdElEID0gcmVx
dWlyZSgiLi9SZWFjdElEIik7CisKK3ZhciBlc2NhcGVUZXh0Rm9yQnJvd3NlciA9IHJlcXVpcmUo
Ii4vZXNjYXBlVGV4dEZvckJyb3dzZXIiKTsKK3ZhciBmbGF0dGVuQ2hpbGRyZW4gPSByZXF1aXJl
KCIuL2ZsYXR0ZW5DaGlsZHJlbiIpOwordmFyIGludmFyaWFudCA9IHJlcXVpcmUoIi4vaW52YXJp
YW50Iik7Cit2YXIga2V5T2YgPSByZXF1aXJlKCIuL2tleU9mIik7Cit2YXIgbWVyZ2UgPSByZXF1
aXJlKCIuL21lcmdlIik7Cit2YXIgbWl4SW50byA9IHJlcXVpcmUoIi4vbWl4SW50byIpOworCit2
YXIgcHV0TGlzdGVuZXIgPSBSZWFjdEV2ZW50RW1pdHRlci5wdXRMaXN0ZW5lcjsKK3ZhciBkZWxl
dGVMaXN0ZW5lciA9IFJlYWN0RXZlbnRFbWl0dGVyLmRlbGV0ZUxpc3RlbmVyOwordmFyIHJlZ2lz
dHJhdGlvbk5hbWVzID0gUmVhY3RFdmVudEVtaXR0ZXIucmVnaXN0cmF0aW9uTmFtZXM7CisKKy8v
IEZvciBxdWlja2x5IG1hdGNoaW5nIGNoaWxkcmVuIHR5cGUsIHRvIHRlc3QgaWYgY2FuIGJlIHRy
ZWF0ZWQgYXMgY29udGVudC4KK3ZhciBDT05URU5UX1RZUEVTID0geydzdHJpbmcnOiB0cnVlLCAn
bnVtYmVyJzogdHJ1ZX07CisKK3ZhciBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCA9IGtleU9m
KHtkYW5nZXJvdXNseVNldElubmVySFRNTDogbnVsbH0pOwordmFyIFNUWUxFID0ga2V5T2Yoe3N0
eWxlOiBudWxsfSk7CisKKy8qKgorICogQHBhcmFtIHs/b2JqZWN0fSBwcm9wcworICovCitmdW5j
dGlvbiBhc3NlcnRWYWxpZFByb3BzKHByb3BzKSB7CisgIGlmICghcHJvcHMpIHsKKyAgICByZXR1
cm47CisgIH0KKyAgLy8gTm90ZSB0aGUgdXNlIG9mIGA9PWAgd2hpY2ggY2hlY2tzIGZvciBudWxs
IG9yIHVuZGVmaW5lZC4KKyAgaW52YXJpYW50KAorICAgIHByb3BzLmNoaWxkcmVuID09IG51bGwg
fHwgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT0gbnVsbCwKKyAgICAnQ2FuIG9ubHkg
c2V0IG9uZSBvZiBgY2hpbGRyZW5gIG9yIGBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTGAu
JworICApOworICBpbnZhcmlhbnQoCisgICAgcHJvcHMuc3R5bGUgPT0gbnVsbCB8fCB0eXBlb2Yg
cHJvcHMuc3R5bGUgPT09ICdvYmplY3QnLAorICAgICdUaGUgYHN0eWxlYCBwcm9wIGV4cGVjdHMg
YSBtYXBwaW5nIGZyb20gc3R5bGUgcHJvcGVydGllcyB0byB2YWx1ZXMsICcgKworICAgICdub3Qg
YSBzdHJpbmcuJworICApOworfQorCisvKioKKyAqIEBjb25zdHJ1Y3RvciBSZWFjdE5hdGl2ZUNv
bXBvbmVudAorICogQGV4dGVuZHMgUmVhY3RDb21wb25lbnQKKyAqIEBleHRlbmRzIFJlYWN0TXVs
dGlDaGlsZAorICovCitmdW5jdGlvbiBSZWFjdE5hdGl2ZUNvbXBvbmVudCh0YWcsIG9taXRDbG9z
ZSkgeworICB0aGlzLl90YWdPcGVuID0gJzwnICsgdGFnOworICB0aGlzLl90YWdDbG9zZSA9IG9t
aXRDbG9zZSA/ICcnIDogJzwvJyArIHRhZyArICc+JzsKKyAgdGhpcy50YWdOYW1lID0gdGFnLnRv
VXBwZXJDYXNlKCk7Cit9CisKK1JlYWN0TmF0aXZlQ29tcG9uZW50Lk1peGluID0geworCisgIC8q
KgorICAgKiBHZW5lcmF0ZXMgcm9vdCB0YWcgbWFya3VwIHRoZW4gcmVjdXJzZXMuIFRoaXMgbWV0
aG9kIGhhcyBzaWRlIGVmZmVjdHMgYW5kCisgICAqIGlzIG5vdCBpZGVtcG90ZW50LgorICAgKgor
ICAgKiBAaW50ZXJuYWwKKyAgICogQHBhcmFtIHtzdHJpbmd9IHJvb3RJRCBUaGUgcm9vdCBET00g
SUQgZm9yIHRoaXMgbm9kZS4KKyAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9u
fSB0cmFuc2FjdGlvbgorICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjb21wdXRlZCBtYXJrdXAu
CisgICAqLworICBtb3VudENvbXBvbmVudDogZnVuY3Rpb24ocm9vdElELCB0cmFuc2FjdGlvbikg
eworICAgIFJlYWN0Q29tcG9uZW50Lk1peGluLm1vdW50Q29tcG9uZW50LmNhbGwodGhpcywgcm9v
dElELCB0cmFuc2FjdGlvbik7CisgICAgYXNzZXJ0VmFsaWRQcm9wcyh0aGlzLnByb3BzKTsKKyAg
ICByZXR1cm4gKAorICAgICAgdGhpcy5fY3JlYXRlT3BlblRhZ01hcmt1cCgpICsKKyAgICAgIHRo
aXMuX2NyZWF0ZUNvbnRlbnRNYXJrdXAodHJhbnNhY3Rpb24pICsKKyAgICAgIHRoaXMuX3RhZ0Ns
b3NlCisgICAgKTsKKyAgfSwKKworICAvKioKKyAgICogQ3JlYXRlcyBtYXJrdXAgZm9yIHRoZSBv
cGVuIHRhZyBhbmQgYWxsIGF0dHJpYnV0ZXMuCisgICAqCisgICAqIFRoaXMgbWV0aG9kIGhhcyBz
aWRlIGVmZmVjdHMgYmVjYXVzZSBldmVudHMgZ2V0IHJlZ2lzdGVyZWQuCisgICAqCisgICAqIEl0
ZXJhdGluZyBvdmVyIG9iamVjdCBwcm9wZXJ0aWVzIGlzIGZhc3RlciB0aGFuIGl0ZXJhdGluZyBv
dmVyIGFycmF5cy4KKyAgICogQHNlZSBodHRwOi8vanNwZXJmLmNvbS9vYmotdnMtYXJyLWl0ZXJh
dGlvbgorICAgKgorICAgKiBAcHJpdmF0ZQorICAgKiBAcmV0dXJuIHtzdHJpbmd9IE1hcmt1cCBv
ZiBvcGVuaW5nIHRhZy4KKyAgICovCisgIF9jcmVhdGVPcGVuVGFnTWFya3VwOiBmdW5jdGlvbigp
IHsKKyAgICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzOworICAgIHZhciByZXQgPSB0aGlzLl90YWdP
cGVuOworCisgICAgZm9yICh2YXIgcHJvcEtleSBpbiBwcm9wcykgeworICAgICAgaWYgKCFwcm9w
cy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0K
KyAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wS2V5XTsKKyAgICAgIGlmIChwcm9wVmFs
dWUgPT0gbnVsbCkgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIGlmIChyZWdp
c3RyYXRpb25OYW1lc1twcm9wS2V5XSkgeworICAgICAgICBwdXRMaXN0ZW5lcih0aGlzLl9yb290
Tm9kZUlELCBwcm9wS2V5LCBwcm9wVmFsdWUpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYg
KHByb3BLZXkgPT09IFNUWUxFKSB7CisgICAgICAgICAgaWYgKHByb3BWYWx1ZSkgeworICAgICAg
ICAgICAgcHJvcFZhbHVlID0gcHJvcHMuc3R5bGUgPSBtZXJnZShwcm9wcy5zdHlsZSk7CisgICAg
ICAgICAgfQorICAgICAgICAgIHByb3BWYWx1ZSA9IENTU1Byb3BlcnR5T3BlcmF0aW9ucy5jcmVh
dGVNYXJrdXBGb3JTdHlsZXMocHJvcFZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgbWFy
a3VwID0KKyAgICAgICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuY3JlYXRlTWFya3VwRm9yUHJv
cGVydHkocHJvcEtleSwgcHJvcFZhbHVlKTsKKyAgICAgICAgaWYgKG1hcmt1cCkgeworICAgICAg
ICAgIHJldCArPSAnICcgKyBtYXJrdXA7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAg
ICB2YXIgZXNjYXBlZElEID0gZXNjYXBlVGV4dEZvckJyb3dzZXIodGhpcy5fcm9vdE5vZGVJRCk7
CisgICAgcmV0dXJuIHJldCArICcgJyArIFJlYWN0SUQuQVRUUl9OQU1FICsgJz0iJyArIGVzY2Fw
ZWRJRCArICciPic7CisgIH0sCisKKyAgLyoqCisgICAqIENyZWF0ZXMgbWFya3VwIGZvciB0aGUg
Y29udGVudCBiZXR3ZWVuIHRoZSB0YWdzLgorICAgKgorICAgKiBAcHJpdmF0ZQorICAgKiBAcGFy
YW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uCisgICAqIEByZXR1cm4g
e3N0cmluZ30gQ29udGVudCBtYXJrdXAuCisgICAqLworICBfY3JlYXRlQ29udGVudE1hcmt1cDog
ZnVuY3Rpb24odHJhbnNhY3Rpb24pIHsKKyAgICAvLyBJbnRlbnRpb25hbCB1c2Ugb2YgIT0gdG8g
YXZvaWQgY2F0Y2hpbmcgemVyby9mYWxzZS4KKyAgICB2YXIgaW5uZXJIVE1MID0gdGhpcy5wcm9w
cy5kYW5nZXJvdXNseVNldElubmVySFRNTDsKKyAgICBpZiAoaW5uZXJIVE1MICE9IG51bGwpIHsK
KyAgICAgIGlmIChpbm5lckhUTUwuX19odG1sICE9IG51bGwpIHsKKyAgICAgICAgcmV0dXJuIGlu
bmVySFRNTC5fX2h0bWw7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHZhciBjb250ZW50
VG9Vc2UgPQorICAgICAgICBDT05URU5UX1RZUEVTW3R5cGVvZiB0aGlzLnByb3BzLmNoaWxkcmVu
XSA/IHRoaXMucHJvcHMuY2hpbGRyZW4gOiBudWxsOworICAgICAgdmFyIGNoaWxkcmVuVG9Vc2Ug
PSBjb250ZW50VG9Vc2UgIT0gbnVsbCA/IG51bGwgOiB0aGlzLnByb3BzLmNoaWxkcmVuOworICAg
ICAgaWYgKGNvbnRlbnRUb1VzZSAhPSBudWxsKSB7CisgICAgICAgIHJldHVybiBlc2NhcGVUZXh0
Rm9yQnJvd3Nlcihjb250ZW50VG9Vc2UpOworICAgICAgfSBlbHNlIGlmIChjaGlsZHJlblRvVXNl
ICE9IG51bGwpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubW91bnRNdWx0aUNoaWxkKAorICAgICAg
ICAgIGZsYXR0ZW5DaGlsZHJlbihjaGlsZHJlblRvVXNlKSwKKyAgICAgICAgICB0cmFuc2FjdGlv
bgorICAgICAgICApOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gJyc7CisgIH0sCisKKyAg
cmVjZWl2ZVByb3BzOiBmdW5jdGlvbihuZXh0UHJvcHMsIHRyYW5zYWN0aW9uKSB7CisgICAgYXNz
ZXJ0VmFsaWRQcm9wcyhuZXh0UHJvcHMpOworICAgIFJlYWN0Q29tcG9uZW50Lk1peGluLnJlY2Vp
dmVQcm9wcy5jYWxsKHRoaXMsIG5leHRQcm9wcywgdHJhbnNhY3Rpb24pOworICB9LAorCisgIC8q
KgorICAgKiBVcGRhdGVzIGEgbmF0aXZlIERPTSBjb21wb25lbnQgYWZ0ZXIgaXQgaGFzIGFscmVh
ZHkgYmVlbiBhbGxvY2F0ZWQgYW5kCisgICAqIGF0dGFjaGVkIHRvIHRoZSBET00uIFJlY29uY2ls
ZXMgdGhlIHJvb3QgRE9NIG5vZGUsIHRoZW4gcmVjdXJzZXMuCisgICAqCisgICAqIEBwYXJhbSB7
UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb24KKyAgICogQHBhcmFtIHtvYmpl
Y3R9IHByZXZQcm9wcworICAgKiBAaW50ZXJuYWwKKyAgICogQG92ZXJyaWRhYmxlCisgICAqLwor
ICB1cGRhdGVDb21wb25lbnQ6IGZ1bmN0aW9uKHRyYW5zYWN0aW9uLCBwcmV2UHJvcHMpIHsKKyAg
ICBSZWFjdENvbXBvbmVudC5NaXhpbi51cGRhdGVDb21wb25lbnQuY2FsbCh0aGlzLCB0cmFuc2Fj
dGlvbiwgcHJldlByb3BzKTsKKyAgICB0aGlzLl91cGRhdGVET01Qcm9wZXJ0aWVzKHByZXZQcm9w
cyk7CisgICAgdGhpcy5fdXBkYXRlRE9NQ2hpbGRyZW4ocHJldlByb3BzLCB0cmFuc2FjdGlvbik7
CisgIH0sCisKKyAgLyoqCisgICAqIFJlY29uY2lsZXMgdGhlIHByb3BlcnRpZXMgYnkgZGV0ZWN0
aW5nIGRpZmZlcmVuY2VzIGluIHByb3BlcnR5IHZhbHVlcyBhbmQKKyAgICogdXBkYXRpbmcgdGhl
IERPTSBhcyBuZWNlc3NhcnkuIFRoaXMgZnVuY3Rpb24gaXMgcHJvYmFibHkgdGhlIHNpbmdsZSBt
b3N0CisgICAqIGNyaXRpY2FsIHBhdGggZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4KKyAg
ICoKKyAgICogVE9ETzogQmVuY2htYXJrIHdoZXRoZXIgY2hlY2tpbmcgZm9yIGNoYW5nZWQgdmFs
dWVzIGluIG1lbW9yeSBhY3R1YWxseQorICAgKiAgICAgICBpbXByb3ZlcyBwZXJmb3JtYW5jZSAo
ZXNwZWNpYWxseSBzdGF0aWNhbGx5IHBvc2l0aW9uZWQgZWxlbWVudHMpLgorICAgKiBUT0RPOiBC
ZW5jaG1hcmsgdGhlIGVmZmVjdHMgb2YgcHV0dGluZyB0aGlzIGF0IHRoZSB0b3Agc2luY2UgOTkl
IG9mIHByb3BzCisgICAqICAgICAgIGRvIG5vdCBjaGFuZ2UgZm9yIGEgZ2l2ZW4gcmVjb25jaWxp
YXRpb24uCisgICAqIFRPRE86IEJlbmNobWFyayBhcmVhcyB0aGF0IGNhbiBiZSBpbXByb3ZlZCB3
aXRoIGNhY2hpbmcuCisgICAqCisgICAqIEBwcml2YXRlCisgICAqIEBwYXJhbSB7b2JqZWN0fSBs
YXN0UHJvcHMKKyAgICovCisgIF91cGRhdGVET01Qcm9wZXJ0aWVzOiBmdW5jdGlvbihsYXN0UHJv
cHMpIHsKKyAgICB2YXIgbmV4dFByb3BzID0gdGhpcy5wcm9wczsKKyAgICB2YXIgcHJvcEtleTsK
KyAgICB2YXIgc3R5bGVOYW1lOworICAgIHZhciBzdHlsZVVwZGF0ZXM7CisgICAgZm9yIChwcm9w
S2V5IGluIGxhc3RQcm9wcykgeworICAgICAgaWYgKG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShw
cm9wS2V5KSB8fAorICAgICAgICAgIWxhc3RQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkg
eworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIGlmIChwcm9wS2V5ID09PSBTVFlM
RSkgeworICAgICAgICB2YXIgbGFzdFN0eWxlID0gbGFzdFByb3BzW3Byb3BLZXldOworICAgICAg
ICBmb3IgKHN0eWxlTmFtZSBpbiBsYXN0U3R5bGUpIHsKKyAgICAgICAgICBpZiAobGFzdFN0eWxl
Lmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHsKKyAgICAgICAgICAgIHN0eWxlVXBkYXRlcyA9
IHN0eWxlVXBkYXRlcyB8fCB7fTsKKyAgICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVd
ID0gJyc7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKHByb3BLZXkg
PT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MKSB7CisgICAgICAgIC8vIGh0dHA6Ly9qc3Bl
cmYuY29tL2VtcHR5aW5nLXNwZWVkCisgICAgICAgIFJlYWN0Q29tcG9uZW50LkRPTUlET3BlcmF0
aW9ucy51cGRhdGVUZXh0Q29udGVudEJ5SUQoCisgICAgICAgICAgdGhpcy5fcm9vdE5vZGVJRCwK
KyAgICAgICAgICAnJworICAgICAgICApOworICAgICAgfSBlbHNlIGlmIChyZWdpc3RyYXRpb25O
YW1lc1twcm9wS2V5XSkgeworICAgICAgICBkZWxldGVMaXN0ZW5lcih0aGlzLl9yb290Tm9kZUlE
LCBwcm9wS2V5KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIFJlYWN0Q29tcG9uZW50LkRPTUlE
T3BlcmF0aW9ucy5kZWxldGVQcm9wZXJ0eUJ5SUQoCisgICAgICAgICAgdGhpcy5fcm9vdE5vZGVJ
RCwKKyAgICAgICAgICBwcm9wS2V5CisgICAgICAgICk7CisgICAgICB9CisgICAgfQorICAgIGZv
ciAocHJvcEtleSBpbiBuZXh0UHJvcHMpIHsKKyAgICAgIHZhciBuZXh0UHJvcCA9IG5leHRQcm9w
c1twcm9wS2V5XTsKKyAgICAgIHZhciBsYXN0UHJvcCA9IGxhc3RQcm9wc1twcm9wS2V5XTsKKyAg
ICAgIGlmICghbmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8IG5leHRQcm9wID09
PSBsYXN0UHJvcCkgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIGlmIChwcm9w
S2V5ID09PSBTVFlMRSkgeworICAgICAgICBpZiAobmV4dFByb3ApIHsKKyAgICAgICAgICBuZXh0
UHJvcCA9IG5leHRQcm9wcy5zdHlsZSA9IG1lcmdlKG5leHRQcm9wKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAobGFzdFByb3ApIHsKKyAgICAgICAgICAvLyBVbnNldCBzdHlsZXMgb24gYGxhc3RQ
cm9wYCBidXQgbm90IG9uIGBuZXh0UHJvcGAuCisgICAgICAgICAgZm9yIChzdHlsZU5hbWUgaW4g
bGFzdFByb3ApIHsKKyAgICAgICAgICAgIGlmIChsYXN0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHls
ZU5hbWUpICYmCisgICAgICAgICAgICAgICAgIW5leHRQcm9wLmhhc093blByb3BlcnR5KHN0eWxl
TmFtZSkpIHsKKyAgICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0gc3R5bGVVcGRhdGVzIHx8IHt9
OworICAgICAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9ICcnOworICAgICAgICAg
ICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICAvLyBVcGRhdGUgc3R5bGVzIHRoYXQgY2hhbmdl
ZCBzaW5jZSBgbGFzdFByb3BgLgorICAgICAgICAgIGZvciAoc3R5bGVOYW1lIGluIG5leHRQcm9w
KSB7CisgICAgICAgICAgICBpZiAobmV4dFByb3AuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSAm
JgorICAgICAgICAgICAgICAgIGxhc3RQcm9wW3N0eWxlTmFtZV0gIT09IG5leHRQcm9wW3N0eWxl
TmFtZV0pIHsKKyAgICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0gc3R5bGVVcGRhdGVzIHx8IHt9
OworICAgICAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9IG5leHRQcm9wW3N0eWxl
TmFtZV07CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgIC8vIFJlbGllcyBvbiBgdXBkYXRlU3R5bGVzQnlJRGAgbm90IG11dGF0aW5nIGBzdHls
ZVVwZGF0ZXNgLgorICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IG5leHRQcm9wOworICAgICAgICB9
CisgICAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1M
KSB7CisgICAgICAgIHZhciBsYXN0SHRtbCA9IGxhc3RQcm9wICYmIGxhc3RQcm9wLl9faHRtbDsK
KyAgICAgICAgdmFyIG5leHRIdG1sID0gbmV4dFByb3AgJiYgbmV4dFByb3AuX19odG1sOworICAg
ICAgICBpZiAobGFzdEh0bWwgIT09IG5leHRIdG1sKSB7CisgICAgICAgICAgUmVhY3RDb21wb25l
bnQuRE9NSURPcGVyYXRpb25zLnVwZGF0ZUlubmVySFRNTEJ5SUQoCisgICAgICAgICAgICB0aGlz
Ll9yb290Tm9kZUlELAorICAgICAgICAgICAgbmV4dFByb3AKKyAgICAgICAgICApOworICAgICAg
ICB9CisgICAgICB9IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVzW3Byb3BLZXldKSB7CisgICAg
ICAgIHB1dExpc3RlbmVyKHRoaXMuX3Jvb3ROb2RlSUQsIHByb3BLZXksIG5leHRQcm9wKTsKKyAg
ICAgIH0gZWxzZSBpZiAoCisgICAgICAgICAgRE9NUHJvcGVydHkuaXNTdGFuZGFyZE5hbWVbcHJv
cEtleV0gfHwKKyAgICAgICAgICBET01Qcm9wZXJ0eS5pc0N1c3RvbUF0dHJpYnV0ZShwcm9wS2V5
KSkgeworICAgICAgICBSZWFjdENvbXBvbmVudC5ET01JRE9wZXJhdGlvbnMudXBkYXRlUHJvcGVy
dHlCeUlEKAorICAgICAgICAgIHRoaXMuX3Jvb3ROb2RlSUQsCisgICAgICAgICAgcHJvcEtleSwK
KyAgICAgICAgICBuZXh0UHJvcAorICAgICAgICApOworICAgICAgfQorICAgIH0KKyAgICBpZiAo
c3R5bGVVcGRhdGVzKSB7CisgICAgICBSZWFjdENvbXBvbmVudC5ET01JRE9wZXJhdGlvbnMudXBk
YXRlU3R5bGVzQnlJRCgKKyAgICAgICAgdGhpcy5fcm9vdE5vZGVJRCwKKyAgICAgICAgc3R5bGVV
cGRhdGVzCisgICAgICApOworICAgIH0KKyAgfSwKKworICAvKioKKyAgICogUmVjb25jaWxlcyB0
aGUgY2hpbGRyZW4gd2l0aCB0aGUgdmFyaW91cyBwcm9wZXJ0aWVzIHRoYXQgYWZmZWN0IHRoZQor
ICAgKiBjaGlsZHJlbiBjb250ZW50LgorICAgKgorICAgKiBAcGFyYW0ge29iamVjdH0gbGFzdFBy
b3BzCisgICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb24K
KyAgICovCisgIF91cGRhdGVET01DaGlsZHJlbjogZnVuY3Rpb24obGFzdFByb3BzLCB0cmFuc2Fj
dGlvbikgeworICAgIHZhciBuZXh0UHJvcHMgPSB0aGlzLnByb3BzOworCisgICAgdmFyIGxhc3RV
c2VkQ29udGVudCA9CisgICAgICBDT05URU5UX1RZUEVTW3R5cGVvZiBsYXN0UHJvcHMuY2hpbGRy
ZW5dID8gbGFzdFByb3BzLmNoaWxkcmVuIDogbnVsbDsKKyAgICB2YXIgY29udGVudFRvVXNlID0K
KyAgICAgIENPTlRFTlRfVFlQRVNbdHlwZW9mIG5leHRQcm9wcy5jaGlsZHJlbl0gPyBuZXh0UHJv
cHMuY2hpbGRyZW4gOiBudWxsOworCisgICAgLy8gTm90ZSB0aGUgdXNlIG9mIGAhPWAgd2hpY2gg
Y2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZC4KKworICAgIHZhciBsYXN0VXNlZENoaWxkcmVu
ID0KKyAgICAgIGxhc3RVc2VkQ29udGVudCAhPSBudWxsID8gbnVsbCA6IGxhc3RQcm9wcy5jaGls
ZHJlbjsKKyAgICB2YXIgY2hpbGRyZW5Ub1VzZSA9IGNvbnRlbnRUb1VzZSAhPSBudWxsID8gbnVs
bCA6IG5leHRQcm9wcy5jaGlsZHJlbjsKKworICAgIGlmIChjb250ZW50VG9Vc2UgIT0gbnVsbCkg
eworICAgICAgdmFyIGNoaWxkcmVuUmVtb3ZlZCA9IGxhc3RVc2VkQ2hpbGRyZW4gIT0gbnVsbCAm
JiBjaGlsZHJlblRvVXNlID09IG51bGw7CisgICAgICBpZiAoY2hpbGRyZW5SZW1vdmVkKSB7Cisg
ICAgICAgIHRoaXMudXBkYXRlTXVsdGlDaGlsZChudWxsLCB0cmFuc2FjdGlvbik7CisgICAgICB9
CisgICAgICBpZiAobGFzdFVzZWRDb250ZW50ICE9PSBjb250ZW50VG9Vc2UpIHsKKyAgICAgICAg
UmVhY3RDb21wb25lbnQuRE9NSURPcGVyYXRpb25zLnVwZGF0ZVRleHRDb250ZW50QnlJRCgKKyAg
ICAgICAgICB0aGlzLl9yb290Tm9kZUlELAorICAgICAgICAgICcnICsgY29udGVudFRvVXNlCisg
ICAgICAgICk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHZhciBjb250ZW50UmVtb3Zl
ZCA9IGxhc3RVc2VkQ29udGVudCAhPSBudWxsICYmIGNvbnRlbnRUb1VzZSA9PSBudWxsOworICAg
ICAgaWYgKGNvbnRlbnRSZW1vdmVkKSB7CisgICAgICAgIFJlYWN0Q29tcG9uZW50LkRPTUlET3Bl
cmF0aW9ucy51cGRhdGVUZXh0Q29udGVudEJ5SUQoCisgICAgICAgICAgdGhpcy5fcm9vdE5vZGVJ
RCwKKyAgICAgICAgICAnJworICAgICAgICApOworICAgICAgfQorICAgICAgdGhpcy51cGRhdGVN
dWx0aUNoaWxkKGZsYXR0ZW5DaGlsZHJlbihuZXh0UHJvcHMuY2hpbGRyZW4pLCB0cmFuc2FjdGlv
bik7CisgICAgfQorICB9LAorCisgIC8qKgorICAgKiBEZXN0cm95cyBhbGwgZXZlbnQgcmVnaXN0
cmF0aW9ucyBmb3IgdGhpcyBpbnN0YW5jZS4gRG9lcyBub3QgcmVtb3ZlIGZyb20KKyAgICogdGhl
IERPTS4gVGhhdCBtdXN0IGJlIGRvbmUgYnkgdGhlIHBhcmVudC4KKyAgICoKKyAgICogQGludGVy
bmFsCisgICAqLworICB1bm1vdW50Q29tcG9uZW50OiBmdW5jdGlvbigpIHsKKyAgICBSZWFjdEV2
ZW50RW1pdHRlci5kZWxldGVBbGxMaXN0ZW5lcnModGhpcy5fcm9vdE5vZGVJRCk7CisgICAgUmVh
Y3RDb21wb25lbnQuTWl4aW4udW5tb3VudENvbXBvbmVudC5jYWxsKHRoaXMpOworICAgIHRoaXMu
dW5tb3VudE11bHRpQ2hpbGQoKTsKKyAgfQorCit9OworCittaXhJbnRvKFJlYWN0TmF0aXZlQ29t
cG9uZW50LCBSZWFjdENvbXBvbmVudC5NaXhpbik7CittaXhJbnRvKFJlYWN0TmF0aXZlQ29tcG9u
ZW50LCBSZWFjdE5hdGl2ZUNvbXBvbmVudC5NaXhpbik7CittaXhJbnRvKFJlYWN0TmF0aXZlQ29t
cG9uZW50LCBSZWFjdE11bHRpQ2hpbGQuTWl4aW4pOworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0
TmF0aXZlQ29tcG9uZW50OworCit9LHsiLi9DU1NQcm9wZXJ0eU9wZXJhdGlvbnMiOjMsIi4vRE9N
UHJvcGVydHkiOjcsIi4vRE9NUHJvcGVydHlPcGVyYXRpb25zIjo4LCIuL1JlYWN0Q29tcG9uZW50
IjoyMiwiLi9SZWFjdEV2ZW50RW1pdHRlciI6MzMsIi4vUmVhY3RJRCI6MzUsIi4vUmVhY3RNdWx0
aUNoaWxkIjozOSwiLi9lc2NhcGVUZXh0Rm9yQnJvd3NlciI6NjUsIi4vZmxhdHRlbkNoaWxkcmVu
Ijo2NywiLi9pbnZhcmlhbnQiOjc1LCIuL2tleU9mIjo3OSwiLi9tZXJnZSI6ODEsIi4vbWl4SW50
byI6ODR9XSw0MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENv
cHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFw
YWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5v
dCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisg
KiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8v
d3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWly
ZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisg
KiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
SVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJ
TkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRo
ZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0
aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RPbkRP
TVJlYWR5CisgKi8KKworInVzZSBzdHJpY3QiOworCit2YXIgUG9vbGVkQ2xhc3MgPSByZXF1aXJl
KCIuL1Bvb2xlZENsYXNzIik7CisKK3ZhciBtaXhJbnRvID0gcmVxdWlyZSgiLi9taXhJbnRvIik7
CisKKy8qKgorICogQSBzcGVjaWFsaXplZCBwc2V1ZG8tZXZlbnQgbW9kdWxlIHRvIGhlbHAga2Vl
cCB0cmFjayBvZiBjb21wb25lbnRzIHdhaXRpbmcgdG8KKyAqIGJlIG5vdGlmaWVkIHdoZW4gdGhl
aXIgRE9NIHJlcHJlc2VudGF0aW9ucyBhcmUgYXZhaWxhYmxlIGZvciB1c2UuCisgKgorICogVGhp
cyBpbXBsZW1lbnRzIGBQb29sZWRDbGFzc2AsIHNvIHlvdSBzaG91bGQgbmV2ZXIgbmVlZCB0byBp
bnN0YW50aWF0ZSB0aGlzLgorICogSW5zdGVhZCwgdXNlIGBSZWFjdE9uRE9NUmVhZHkuZ2V0UG9v
bGVkKClgLgorICoKKyAqIEBwYXJhbSB7P2FycmF5PGZ1bmN0aW9uPn0gaW5pdGlhbENvbGxlY3Rp
b24KKyAqIEBjbGFzcyBSZWFjdE9uRE9NUmVhZHkKKyAqIEBpbXBsZW1lbnRzIFBvb2xlZENsYXNz
CisgKiBAaW50ZXJuYWwKKyAqLworZnVuY3Rpb24gUmVhY3RPbkRPTVJlYWR5KGluaXRpYWxDb2xs
ZWN0aW9uKSB7CisgIHRoaXMuX3F1ZXVlID0gaW5pdGlhbENvbGxlY3Rpb24gfHwgbnVsbDsKK30K
KworbWl4SW50byhSZWFjdE9uRE9NUmVhZHksIHsKKworICAvKioKKyAgICogRW5xdWV1ZXMgYSBj
YWxsYmFjayB0byBiZSBpbnZva2VkIHdoZW4gYG5vdGlmeUFsbGAgaXMgaW52b2tlZC4gVGhpcyBp
cyB1c2VkCisgICAqIHRvIGVucXVldWUgY2FsbHMgdG8gYGNvbXBvbmVudERpZE1vdW50YCBhbmQg
YGNvbXBvbmVudERpZFVwZGF0ZWAuCisgICAqCisgICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9
IGNvbXBvbmVudCBDb21wb25lbnQgYmVpbmcgcmVuZGVyZWQuCisgICAqIEBwYXJhbSB7ZnVuY3Rp
b24oRE9NRWxlbWVudCl9IGNhbGxiYWNrIEludm9rZWQgd2hlbiBgbm90aWZ5QWxsYCBpcyBpbnZv
a2VkLgorICAgKiBAaW50ZXJuYWwKKyAgICovCisgIGVucXVldWU6IGZ1bmN0aW9uKGNvbXBvbmVu
dCwgY2FsbGJhY2spIHsKKyAgICB0aGlzLl9xdWV1ZSA9IHRoaXMuX3F1ZXVlIHx8IFtdOworICAg
IHRoaXMuX3F1ZXVlLnB1c2goe2NvbXBvbmVudDogY29tcG9uZW50LCBjYWxsYmFjazogY2FsbGJh
Y2t9KTsKKyAgfSwKKworICAvKioKKyAgICogSW52b2tlcyBhbGwgZW5xdWV1ZWQgY2FsbGJhY2tz
IGFuZCBjbGVhcnMgdGhlIHF1ZXVlLiBUaGlzIGlzIGludm9rZWQgYWZ0ZXIKKyAgICogdGhlIERP
TSByZXByZXNlbnRhdGlvbiBvZiBhIGNvbXBvbmVudCBoYXMgYmVlbiBjcmVhdGVkIG9yIHVwZGF0
ZWQuCisgICAqCisgICAqIEBpbnRlcm5hbAorICAgKi8KKyAgbm90aWZ5QWxsOiBmdW5jdGlvbigp
IHsKKyAgICB2YXIgcXVldWUgPSB0aGlzLl9xdWV1ZTsKKyAgICBpZiAocXVldWUpIHsKKyAgICAg
IHRoaXMuX3F1ZXVlID0gbnVsbDsKKyAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcXVldWUubGVu
Z3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICAgIHZhciBjb21wb25lbnQgPSBxdWV1ZVtpXS5jb21w
b25lbnQ7CisgICAgICAgIHZhciBjYWxsYmFjayA9IHF1ZXVlW2ldLmNhbGxiYWNrOworICAgICAg
ICBjYWxsYmFjay5jYWxsKGNvbXBvbmVudCwgY29tcG9uZW50LmdldERPTU5vZGUoKSk7CisgICAg
ICB9CisgICAgICBxdWV1ZS5sZW5ndGggPSAwOworICAgIH0KKyAgfSwKKworICAvKioKKyAgICog
UmVzZXRzIHRoZSBpbnRlcm5hbCBxdWV1ZS4KKyAgICoKKyAgICogQGludGVybmFsCisgICAqLwor
ICByZXNldDogZnVuY3Rpb24oKSB7CisgICAgdGhpcy5fcXVldWUgPSBudWxsOworICB9LAorCisg
IC8qKgorICAgKiBgUG9vbGVkQ2xhc3NgIGxvb2tzIGZvciB0aGlzLgorICAgKi8KKyAgZGVzdHJ1
Y3RvcjogZnVuY3Rpb24oKSB7CisgICAgdGhpcy5yZXNldCgpOworICB9CisKK30pOworCitQb29s
ZWRDbGFzcy5hZGRQb29saW5nVG8oUmVhY3RPbkRPTVJlYWR5KTsKKworbW9kdWxlLmV4cG9ydHMg
PSBSZWFjdE9uRE9NUmVhZHk7CisKK30seyIuL1Bvb2xlZENsYXNzIjoyMCwiLi9taXhJbnRvIjo4
NH1dLDQyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJp
Z2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hl
IExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVz
ZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlv
dSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cu
YXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBi
eSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIg
QkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwg
ZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNw
ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25z
IHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBSZWFjdE93bmVyCisg
Ki8KKworInVzZSBzdHJpY3QiOworCit2YXIgaW52YXJpYW50ID0gcmVxdWlyZSgiLi9pbnZhcmlh
bnQiKTsKKworLyoqCisgKiBSZWFjdE93bmVycyBhcmUgY2FwYWJsZSBvZiBzdG9yaW5nIHJlZmVy
ZW5jZXMgdG8gb3duZWQgY29tcG9uZW50cy4KKyAqCisgKiBBbGwgY29tcG9uZW50cyBhcmUgY2Fw
YWJsZSBvZiAvL2JlaW5nLy8gcmVmZXJlbmNlZCBieSBvd25lciBjb21wb25lbnRzLCBidXQKKyAq
IG9ubHkgUmVhY3RPd25lciBjb21wb25lbnRzIGFyZSBjYXBhYmxlIG9mIC8vcmVmZXJlbmNpbmcv
LyBvd25lZCBjb21wb25lbnRzLgorICogVGhlIG5hbWVkIHJlZmVyZW5jZSBpcyBrbm93biBhcyBh
ICJyZWYiLgorICoKKyAqIFJlZnMgYXJlIGF2YWlsYWJsZSB3aGVuIG1vdW50ZWQgYW5kIHVwZGF0
ZWQgZHVyaW5nIHJlY29uY2lsaWF0aW9uLgorICoKKyAqICAgdmFyIE15Q29tcG9uZW50ID0gUmVh
Y3QuY3JlYXRlQ2xhc3MoeworICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7CisgKiAgICAgICBy
ZXR1cm4gKAorICogICAgICAgICA8ZGl2IG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xpY2t9PgorICog
ICAgICAgICAgIDxDdXN0b21Db21wb25lbnQgcmVmPSJjdXN0b20iIC8+CisgKiAgICAgICAgIDwv
ZGl2PgorICogICAgICAgKTsKKyAqICAgICB9LAorICogICAgIGhhbmRsZUNsaWNrOiBmdW5jdGlv
bigpIHsKKyAqICAgICAgIHRoaXMucmVmcy5jdXN0b20uaGFuZGxlQ2xpY2soKTsKKyAqICAgICB9
LAorICogICAgIGNvbXBvbmVudERpZE1vdW50OiBmdW5jdGlvbigpIHsKKyAqICAgICAgIHRoaXMu
cmVmcy5jdXN0b20uaW5pdGlhbGl6ZSgpOworICogICAgIH0KKyAqICAgfSk7CisgKgorICogUmVm
cyBzaG91bGQgcmFyZWx5IGJlIHVzZWQuIFdoZW4gcmVmcyBhcmUgdXNlZCwgdGhleSBzaG91bGQg
b25seSBiZSBkb25lIHRvCisgKiBjb250cm9sIGRhdGEgdGhhdCBpcyBub3QgaGFuZGxlZCBieSBS
ZWFjdCdzIGRhdGEgZmxvdy4KKyAqCisgKiBAY2xhc3MgUmVhY3RPd25lcgorICovCit2YXIgUmVh
Y3RPd25lciA9IHsKKworICAvKioKKyAgICogQHBhcmFtIHs/b2JqZWN0fSBvYmplY3QKKyAgICog
QHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb2JqZWN0YCBpcyBhIHZhbGlkIG93bmVyLgorICAg
KiBAZmluYWwKKyAgICovCisgIGlzVmFsaWRPd25lcjogZnVuY3Rpb24ob2JqZWN0KSB7CisgICAg
cmV0dXJuICEhKAorICAgICAgb2JqZWN0ICYmCisgICAgICB0eXBlb2Ygb2JqZWN0LmF0dGFjaFJl
ZiA9PT0gJ2Z1bmN0aW9uJyAmJgorICAgICAgdHlwZW9mIG9iamVjdC5kZXRhY2hSZWYgPT09ICdm
dW5jdGlvbicKKyAgICApOworICB9LAorCisgIC8qKgorICAgKiBBZGRzIGEgY29tcG9uZW50IGJ5
IHJlZiB0byBhbiBvd25lciBjb21wb25lbnQuCisgICAqCisgICAqIEBwYXJhbSB7UmVhY3RDb21w
b25lbnR9IGNvbXBvbmVudCBDb21wb25lbnQgdG8gcmVmZXJlbmNlLgorICAgKiBAcGFyYW0ge3N0
cmluZ30gcmVmIE5hbWUgYnkgd2hpY2ggdG8gcmVmZXIgdG8gdGhlIGNvbXBvbmVudC4KKyAgICog
QHBhcmFtIHtSZWFjdE93bmVyfSBvd25lciBDb21wb25lbnQgb24gd2hpY2ggdG8gcmVjb3JkIHRo
ZSByZWYuCisgICAqIEBmaW5hbAorICAgKiBAaW50ZXJuYWwKKyAgICovCisgIGFkZENvbXBvbmVu
dEFzUmVmVG86IGZ1bmN0aW9uKGNvbXBvbmVudCwgcmVmLCBvd25lcikgeworICAgIGludmFyaWFu
dCgKKyAgICAgIFJlYWN0T3duZXIuaXNWYWxpZE93bmVyKG93bmVyKSwKKyAgICAgICdhZGRDb21w
b25lbnRBc1JlZlRvKC4uLik6IE9ubHkgYSBSZWFjdE93bmVyIGNhbiBoYXZlIHJlZnMuJworICAg
ICk7CisgICAgb3duZXIuYXR0YWNoUmVmKHJlZiwgY29tcG9uZW50KTsKKyAgfSwKKworICAvKioK
KyAgICogUmVtb3ZlcyBhIGNvbXBvbmVudCBieSByZWYgZnJvbSBhbiBvd25lciBjb21wb25lbnQu
CisgICAqCisgICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNvbXBvbmVudCBDb21wb25lbnQg
dG8gZGVyZWZlcmVuY2UuCisgICAqIEBwYXJhbSB7c3RyaW5nfSByZWYgTmFtZSBvZiB0aGUgcmVm
IHRvIHJlbW92ZS4KKyAgICogQHBhcmFtIHtSZWFjdE93bmVyfSBvd25lciBDb21wb25lbnQgb24g
d2hpY2ggdGhlIHJlZiBpcyByZWNvcmRlZC4KKyAgICogQGZpbmFsCisgICAqIEBpbnRlcm5hbAor
ICAgKi8KKyAgcmVtb3ZlQ29tcG9uZW50QXNSZWZGcm9tOiBmdW5jdGlvbihjb21wb25lbnQsIHJl
Ziwgb3duZXIpIHsKKyAgICBpbnZhcmlhbnQoCisgICAgICBSZWFjdE93bmVyLmlzVmFsaWRPd25l
cihvd25lciksCisgICAgICAncmVtb3ZlQ29tcG9uZW50QXNSZWZGcm9tKC4uLik6IE9ubHkgYSBS
ZWFjdE93bmVyIGNhbiBoYXZlIHJlZnMuJworICAgICk7CisgICAgLy8gQ2hlY2sgdGhhdCBgY29t
cG9uZW50YCBpcyBzdGlsbCB0aGUgY3VycmVudCByZWYgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0
bworICAgIC8vIGRldGFjaCB0aGUgcmVmIGlmIGFub3RoZXIgY29tcG9uZW50IHN0b2xlIGl0Lgor
ICAgIGlmIChvd25lci5yZWZzW3JlZl0gPT09IGNvbXBvbmVudCkgeworICAgICAgb3duZXIuZGV0
YWNoUmVmKHJlZik7CisgICAgfQorICB9LAorCisgIC8qKgorICAgKiBBIFJlYWN0Q29tcG9uZW50
IG11c3QgbWl4IHRoaXMgaW4gdG8gaGF2ZSByZWZzLgorICAgKgorICAgKiBAbGVuZHMge1JlYWN0
T3duZXIucHJvdG90eXBlfQorICAgKi8KKyAgTWl4aW46IHsKKworICAgIC8qKgorICAgICAqIExh
emlseSBhbGxvY2F0ZXMgdGhlIHJlZnMgb2JqZWN0IGFuZCBzdG9yZXMgYGNvbXBvbmVudGAgYXMg
YHJlZmAuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmIFJlZmVyZW5jZSBuYW1l
LgorICAgICAqIEBwYXJhbSB7Y29tcG9uZW50fSBjb21wb25lbnQgQ29tcG9uZW50IHRvIHN0b3Jl
IGFzIGByZWZgLgorICAgICAqIEBmaW5hbAorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAg
YXR0YWNoUmVmOiBmdW5jdGlvbihyZWYsIGNvbXBvbmVudCkgeworICAgICAgaW52YXJpYW50KAor
ICAgICAgICBjb21wb25lbnQuaXNPd25lZEJ5KHRoaXMpLAorICAgICAgICAnYXR0YWNoUmVmKCVz
LCAuLi4pOiBPbmx5IGEgY29tcG9uZW50XCdzIG93bmVyIGNhbiBzdG9yZSBhIHJlZiB0byBpdC4n
LAorICAgICAgICByZWYKKyAgICAgICk7CisgICAgICB2YXIgcmVmcyA9IHRoaXMucmVmcyB8fCAo
dGhpcy5yZWZzID0ge30pOworICAgICAgcmVmc1tyZWZdID0gY29tcG9uZW50OworICAgIH0sCisK
KyAgICAvKioKKyAgICAgKiBEZXRhY2hlcyBhIHJlZmVyZW5jZSBuYW1lLgorICAgICAqCisgICAg
ICogQHBhcmFtIHtzdHJpbmd9IHJlZiBOYW1lIHRvIGRlcmVmZXJlbmNlLgorICAgICAqIEBmaW5h
bAorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZGV0YWNoUmVmOiBmdW5jdGlvbihyZWYp
IHsKKyAgICAgIGRlbGV0ZSB0aGlzLnJlZnNbcmVmXTsKKyAgICB9CisKKyAgfQorCit9OworCitt
b2R1bGUuZXhwb3J0cyA9IFJlYWN0T3duZXI7CisKK30seyIuL2ludmFyaWFudCI6NzV9XSw0Mzpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEz
IEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNl
LCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBm
aWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9i
dGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5v
cmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGlj
YWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRl
ZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAor
ICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBl
eHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBs
YW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0
aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RQcm9wVHJhbnNmZXJlcgor
ICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKCIuL2Vt
cHR5RnVuY3Rpb24iKTsKK3ZhciBqb2luQ2xhc3NlcyA9IHJlcXVpcmUoIi4vam9pbkNsYXNzZXMi
KTsKK3ZhciBtZXJnZSA9IHJlcXVpcmUoIi4vbWVyZ2UiKTsKKworLyoqCisgKiBDcmVhdGVzIGEg
dHJhbnNmZXIgc3RyYXRlZ3kgdGhhdCB3aWxsIG1lcmdlIHByb3AgdmFsdWVzIHVzaW5nIHRoZSBz
dXBwbGllZAorICogYG1lcmdlU3RyYXRlZ3lgLiBJZiBhIHByb3Agd2FzIHByZXZpb3VzbHkgdW5z
ZXQsIHRoaXMganVzdCBzZXRzIGl0LgorICoKKyAqIEBwYXJhbSB7ZnVuY3Rpb259IG1lcmdlU3Ry
YXRlZ3kKKyAqIEByZXR1cm4ge2Z1bmN0aW9ufQorICovCitmdW5jdGlvbiBjcmVhdGVUcmFuc2Zl
clN0cmF0ZWd5KG1lcmdlU3RyYXRlZ3kpIHsKKyAgcmV0dXJuIGZ1bmN0aW9uKHByb3BzLCBrZXks
IHZhbHVlKSB7CisgICAgaWYgKCFwcm9wcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICBw
cm9wc1trZXldID0gdmFsdWU7CisgICAgfSBlbHNlIHsKKyAgICAgIHByb3BzW2tleV0gPSBtZXJn
ZVN0cmF0ZWd5KHByb3BzW2tleV0sIHZhbHVlKTsKKyAgICB9CisgIH07Cit9CisKKy8qKgorICog
VHJhbnNmZXIgc3RyYXRlZ2llcyBkaWN0YXRlIGhvdyBwcm9wcyBhcmUgdHJhbnNmZXJyZWQgYnkg
YHRyYW5zZmVyUHJvcHNUb2AuCisgKi8KK3ZhciBUcmFuc2ZlclN0cmF0ZWdpZXMgPSB7CisgIC8q
KgorICAgKiBOZXZlciB0cmFuc2ZlciBgY2hpbGRyZW5gLgorICAgKi8KKyAgY2hpbGRyZW46IGVt
cHR5RnVuY3Rpb24sCisgIC8qKgorICAgKiBUcmFuc2ZlciB0aGUgYGNsYXNzTmFtZWAgcHJvcCBi
eSBtZXJnaW5nIHRoZW0uCisgICAqLworICBjbGFzc05hbWU6IGNyZWF0ZVRyYW5zZmVyU3RyYXRl
Z3koam9pbkNsYXNzZXMpLAorICAvKioKKyAgICogTmV2ZXIgdHJhbnNmZXIgdGhlIGByZWZgIHBy
b3AuCisgICAqLworICByZWY6IGVtcHR5RnVuY3Rpb24sCisgIC8qKgorICAgKiBUcmFuc2ZlciB0
aGUgYHN0eWxlYCBwcm9wICh3aGljaCBpcyBhbiBvYmplY3QpIGJ5IG1lcmdpbmcgdGhlbS4KKyAg
ICovCisgIHN0eWxlOiBjcmVhdGVUcmFuc2ZlclN0cmF0ZWd5KG1lcmdlKQorfTsKKworLyoqCisg
KiBSZWFjdFByb3BUcmFuc2ZlcmVyIGFyZSBjYXBhYmxlIG9mIHRyYW5zZmVycmluZyBwcm9wcyB0
byBhbm90aGVyIGNvbXBvbmVudAorICogdXNpbmcgYSBgdHJhbnNmZXJQcm9wc1RvYCBtZXRob2Qu
CisgKgorICogQGNsYXNzIFJlYWN0UHJvcFRyYW5zZmVyZXIKKyAqLwordmFyIFJlYWN0UHJvcFRy
YW5zZmVyZXIgPSB7CisKKyAgVHJhbnNmZXJTdHJhdGVnaWVzOiBUcmFuc2ZlclN0cmF0ZWdpZXMs
CisKKyAgLyoqCisgICAqIEBsZW5kcyB7UmVhY3RQcm9wVHJhbnNmZXJlci5wcm90b3R5cGV9Cisg
ICAqLworICBNaXhpbjogeworCisgICAgLyoqCisgICAgICogVHJhbnNmZXIgcHJvcHMgZnJvbSB0
aGlzIGNvbXBvbmVudCB0byBhIHRhcmdldCBjb21wb25lbnQuCisgICAgICoKKyAgICAgKiBQcm9w
cyB0aGF0IGRvIG5vdCBoYXZlIGFuIGV4cGxpY2l0IHRyYW5zZmVyIHN0cmF0ZWd5IHdpbGwgYmUg
dHJhbnNmZXJyZWQKKyAgICAgKiBvbmx5IGlmIHRoZSB0YXJnZXQgY29tcG9uZW50IGRvZXMgbm90
IGFscmVhZHkgaGF2ZSB0aGUgcHJvcCBzZXQuCisgICAgICoKKyAgICAgKiBUaGlzIGlzIHVzdWFs
bHkgdXNlZCB0byBwYXNzIGRvd24gcHJvcHMgdG8gYSByZXR1cm5lZCByb290IGNvbXBvbmVudC4K
KyAgICAgKgorICAgICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNvbXBvbmVudCBDb21wb25l
bnQgcmVjZWl2aW5nIHRoZSBwcm9wZXJ0aWVzLgorICAgICAqIEByZXR1cm4ge1JlYWN0Q29tcG9u
ZW50fSBUaGUgc3VwcGxpZWQgYGNvbXBvbmVudGAuCisgICAgICogQGZpbmFsCisgICAgICogQHBy
b3RlY3RlZAorICAgICAqLworICAgIHRyYW5zZmVyUHJvcHNUbzogZnVuY3Rpb24oY29tcG9uZW50
KSB7CisgICAgICB2YXIgcHJvcHMgPSB7fTsKKyAgICAgIGZvciAodmFyIHRoYXRLZXkgaW4gY29t
cG9uZW50LnByb3BzKSB7CisgICAgICAgIGlmIChjb21wb25lbnQucHJvcHMuaGFzT3duUHJvcGVy
dHkodGhhdEtleSkpIHsKKyAgICAgICAgICBwcm9wc1t0aGF0S2V5XSA9IGNvbXBvbmVudC5wcm9w
c1t0aGF0S2V5XTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZm9yICh2YXIgdGhpc0tleSBp
biB0aGlzLnByb3BzKSB7CisgICAgICAgIGlmICghdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSh0
aGlzS2V5KSkgeworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHZhciB0
cmFuc2ZlclN0cmF0ZWd5ID0gVHJhbnNmZXJTdHJhdGVnaWVzW3RoaXNLZXldOworICAgICAgICBp
ZiAodHJhbnNmZXJTdHJhdGVneSkgeworICAgICAgICAgIHRyYW5zZmVyU3RyYXRlZ3kocHJvcHMs
IHRoaXNLZXksIHRoaXMucHJvcHNbdGhpc0tleV0pOworICAgICAgICB9IGVsc2UgaWYgKCFwcm9w
cy5oYXNPd25Qcm9wZXJ0eSh0aGlzS2V5KSkgeworICAgICAgICAgIHByb3BzW3RoaXNLZXldID0g
dGhpcy5wcm9wc1t0aGlzS2V5XTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgY29tcG9uZW50
LnByb3BzID0gcHJvcHM7CisgICAgICByZXR1cm4gY29tcG9uZW50OworICAgIH0KKworICB9CisK
K307CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHJhbnNmZXJlcjsKKworfSx7Ii4vZW1w
dHlGdW5jdGlvbiI6NjQsIi4vam9pbkNsYXNzZXMiOjc3LCIuL21lcmdlIjo4MX1dLDQ0OltmdW5j
dGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFj
ZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZl
cnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUg
ZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWlu
IGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9s
aWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxl
IGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVu
ZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBX
SVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJl
c3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1
YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBM
aWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFByb3BUeXBlcworICovCisKKyJ1
c2Ugc3RyaWN0IjsKKwordmFyIGNyZWF0ZU9iamVjdEZyb20gPSByZXF1aXJlKCIuL2NyZWF0ZU9i
amVjdEZyb20iKTsKK3ZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCIuL2ludmFyaWFudCIpOworCisv
KioKKyAqIENvbGxlY3Rpb24gb2YgbWV0aG9kcyB0aGF0IGFsbG93IGRlY2xhcmF0aW9uIGFuZCB2
YWxpZGF0aW9uIG9mIHByb3BzIHRoYXQgYXJlCisgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25l
bnRzLiBFeGFtcGxlIHVzYWdlOgorICoKKyAqICAgdmFyIFByb3BzID0gcmVxdWlyZSgnUmVhY3RQ
cm9wVHlwZXMnKTsKKyAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHsKKyAq
ICAgICBwcm9wVHlwZXM6IHsKKyAqICAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBwcm9wIG5h
bWVkICJkZXNjcmlwdGlvbiIuCisgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLAor
ICoKKyAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkICJjYXRlZ29yeSIuCisg
KiAgICAgICBjYXRlZ29yeTogUHJvcHMub25lT2YoWydOZXdzJywnUGhvdG9zJ10pLmlzUmVxdWly
ZWQsCisgKgorICogICAgICAgLy8gQSBwcm9wIG5hbWVkICJkaWFsb2ciIHRoYXQgcmVxdWlyZXMg
YW4gaW5zdGFuY2Ugb2YgRGlhbG9nLgorICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9m
KERpYWxvZykuaXNSZXF1aXJlZAorICogICAgIH0sCisgKiAgICAgcmVuZGVyOiBmdW5jdGlvbigp
IHsgLi4uIH0KKyAqICAgfSk7CisgKgorICogQSBtb3JlIGZvcm1hbCBzcGVjaWZpY2F0aW9uIG9m
IGhvdyB0aGVzZSBtZXRob2RzIGFyZSB1c2VkOgorICoKKyAqICAgdHlwZSA6PSBhcnJheXxib29s
fG9iamVjdHxudW1iZXJ8c3RyaW5nfG9uZU9mKFsuLi5dKXxpbnN0YW5jZU9mKC4uLikKKyAqICAg
ZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWlyZWQpPworICoKKyAqIEVhY2gg
YW5kIGV2ZXJ5IGRlY2xhcmF0aW9uIHByb2R1Y2VzIGEgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBz
aWduYXR1cmUuIFRoaXMKKyAqIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY3VzdG9tIHZhbGlkYXRp
b24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZToKKyAqCisgKiAgIHZhciBQcm9wcyA9IHJlcXVpcmUo
J1JlYWN0UHJvcFR5cGVzJyk7CisgKiAgIHZhciBNeUxpbmsgPSBSZWFjdC5jcmVhdGVDbGFzcyh7
CisgKiAgICAgcHJvcFR5cGVzOiB7CisgKiAgICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3Ig
VVJJIHByb3AgbmFtZWQgImhyZWYiLgorICogICAgICAgaHJlZjogZnVuY3Rpb24ocHJvcHMsIHBy
b3BOYW1lLCBjb21wb25lbnROYW1lKSB7CisgKiAgICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9w
c1twcm9wTmFtZV07CisgKiAgICAgICAgIGludmFyaWFudCgKKyAqICAgICAgICAgICBwcm9wVmFs
dWUgPT0gbnVsbCB8fAorICogICAgICAgICAgIHR5cGVvZiBwcm9wVmFsdWUgPT09IHN0cmluZyB8
fAorICogICAgICAgICAgIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVSSSwKKyAqICAgICAgICAgICAn
SW52YWxpZCBgJXNgIHN1cHBsaWVkIHRvIGAlc2AsIGV4cGVjdGVkIHN0cmluZyBvciBVUkkuJywK
KyAqICAgICAgICAgICBwcm9wTmFtZSwKKyAqICAgICAgICAgICBjb21wb25lbnROYW1lCisgKiAg
ICAgICAgICk7CisgKiAgICAgICB9CisgKiAgICAgfSwKKyAqICAgICByZW5kZXI6IGZ1bmN0aW9u
KCkgeyAuLi4gfQorICogICB9KTsKKyAqCisgKiBAaW50ZXJuYWwKKyAqLwordmFyIFByb3BzID0g
eworCisgIGFycmF5OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYXJyYXknKSwKKyAgYm9v
bDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Jvb2xlYW4nKSwKKyAgZnVuYzogY3JlYXRl
UHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Z1bmN0aW9uJyksCisgIG51bWJlcjogY3JlYXRlUHJpbWl0
aXZlVHlwZUNoZWNrZXIoJ251bWJlcicpLAorICBvYmplY3Q6IGNyZWF0ZVByaW1pdGl2ZVR5cGVD
aGVja2VyKCdvYmplY3QnKSwKKyAgc3RyaW5nOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcign
c3RyaW5nJyksCisKKyAgb25lT2Y6IGNyZWF0ZUVudW1UeXBlQ2hlY2tlciwKKworICBpbnN0YW5j
ZU9mOiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyCisKK307CisKK3ZhciBBTk9OWU1PVVMgPSAn
PDxhbm9ueW1vdXM+Pic7CisKK2Z1bmN0aW9uIGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKGV4
cGVjdGVkVHlwZSkgeworICBmdW5jdGlvbiB2YWxpZGF0ZVByaW1pdGl2ZVR5cGUocHJvcFZhbHVl
LCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkgeworICAgIHZhciBwcm9wVHlwZSA9IHR5cGVvZiBw
cm9wVmFsdWU7CisgICAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0JyAmJiBBcnJheS5pc0FycmF5
KHByb3BWYWx1ZSkpIHsKKyAgICAgIHByb3BUeXBlID0gJ2FycmF5JzsKKyAgICB9CisgICAgaW52
YXJpYW50KAorICAgICAgcHJvcFR5cGUgPT09IGV4cGVjdGVkVHlwZSwKKyAgICAgICdJbnZhbGlk
IHByb3AgYCVzYCBvZiB0eXBlIGAlc2Agc3VwcGxpZWQgdG8gYCVzYCwgZXhwZWN0ZWQgYCVzYC4n
LAorICAgICAgcHJvcE5hbWUsCisgICAgICBwcm9wVHlwZSwKKyAgICAgIGNvbXBvbmVudE5hbWUs
CisgICAgICBleHBlY3RlZFR5cGUKKyAgICApOworICB9CisgIHJldHVybiBjcmVhdGVDaGFpbmFi
bGVUeXBlQ2hlY2tlcih2YWxpZGF0ZVByaW1pdGl2ZVR5cGUpOworfQorCitmdW5jdGlvbiBjcmVh
dGVFbnVtVHlwZUNoZWNrZXIoZXhwZWN0ZWRWYWx1ZXMpIHsKKyAgdmFyIGV4cGVjdGVkRW51bSA9
IGNyZWF0ZU9iamVjdEZyb20oZXhwZWN0ZWRWYWx1ZXMpOworICBmdW5jdGlvbiB2YWxpZGF0ZUVu
dW1UeXBlKHByb3BWYWx1ZSwgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHsKKyAgICBpbnZhcmlh
bnQoCisgICAgICBleHBlY3RlZEVudW1bcHJvcFZhbHVlXSwKKyAgICAgICdJbnZhbGlkIHByb3Ag
YCVzYCBzdXBwbGllZCB0byBgJXNgLCBleHBlY3RlZCBvbmUgb2YgJXMuJywKKyAgICAgIHByb3BO
YW1lLAorICAgICAgY29tcG9uZW50TmFtZSwKKyAgICAgIEpTT04uc3RyaW5naWZ5KE9iamVjdC5r
ZXlzKGV4cGVjdGVkRW51bSkpCisgICAgKTsKKyAgfQorICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxl
VHlwZUNoZWNrZXIodmFsaWRhdGVFbnVtVHlwZSk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZUluc3Rh
bmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykgeworICBmdW5jdGlvbiB2YWxpZGF0ZUluc3Rh
bmNlVHlwZShwcm9wVmFsdWUsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7CisgICAgaW52YXJp
YW50KAorICAgICAgcHJvcFZhbHVlIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcywKKyAgICAgICdJ
bnZhbGlkIHByb3AgYCVzYCBzdXBwbGllZCB0byBgJXNgLCBleHBlY3RlZCBpbnN0YW5jZSBvZiBg
JXNgLicsCisgICAgICBwcm9wTmFtZSwKKyAgICAgIGNvbXBvbmVudE5hbWUsCisgICAgICBleHBl
Y3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTCisgICAgKTsKKyAgfQorICByZXR1cm4gY3JlYXRl
Q2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGVJbnN0YW5jZVR5cGUpOworfQorCitmdW5jdGlv
biBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkgeworICBmdW5jdGlvbiBjcmVh
dGVUeXBlQ2hlY2tlcihpc1JlcXVpcmVkKSB7CisgICAgZnVuY3Rpb24gY2hlY2tUeXBlKHByb3Bz
LCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkgeworICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3Bz
W3Byb3BOYW1lXTsKKyAgICAgIGlmIChwcm9wVmFsdWUgIT0gbnVsbCkgeworICAgICAgICAvLyBP
bmx5IHZhbGlkYXRlIGlmIHRoZXJlIGlzIGEgdmFsdWUgdG8gY2hlY2suCisgICAgICAgIHZhbGlk
YXRlKHByb3BWYWx1ZSwgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTKTsKKyAg
ICAgIH0gZWxzZSB7CisgICAgICAgIGludmFyaWFudCgKKyAgICAgICAgICAhaXNSZXF1aXJlZCwK
KyAgICAgICAgICAnUmVxdWlyZWQgcHJvcCBgJXNgIHdhcyBub3Qgc3BlY2lmaWVkIGluIGAlc2Au
JywKKyAgICAgICAgICBwcm9wTmFtZSwKKyAgICAgICAgICBjb21wb25lbnROYW1lIHx8IEFOT05Z
TU9VUworICAgICAgICApOworICAgICAgfQorICAgIH0KKyAgICBpZiAoIWlzUmVxdWlyZWQpIHsK
KyAgICAgIGNoZWNrVHlwZS5pc1JlcXVpcmVkID0gY3JlYXRlVHlwZUNoZWNrZXIodHJ1ZSk7Cisg
ICAgfQorICAgIHJldHVybiBjaGVja1R5cGU7CisgIH0KKyAgcmV0dXJuIGNyZWF0ZVR5cGVDaGVj
a2VyKGZhbHNlKTsKK30KKworbW9kdWxlLmV4cG9ydHMgPSBQcm9wczsKKworfSx7Ii4vY3JlYXRl
T2JqZWN0RnJvbSI6NjIsIi4vaW52YXJpYW50Ijo3NX1dLDQ1OltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAq
CisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUg
IkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs
aWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUg
TGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNF
LTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQg
dG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNl
IGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJ
RVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4K
KyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBw
ZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAq
IEBwcm92aWRlc01vZHVsZSBSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uCisgKiBAdHlwZWNoZWNr
cyBzdGF0aWMtb25seQorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIEV4ZWN1dGlvbkVudmly
b25tZW50ID0gcmVxdWlyZSgiLi9FeGVjdXRpb25FbnZpcm9ubWVudCIpOwordmFyIFBvb2xlZENs
YXNzID0gcmVxdWlyZSgiLi9Qb29sZWRDbGFzcyIpOwordmFyIFJlYWN0RXZlbnRFbWl0dGVyID0g
cmVxdWlyZSgiLi9SZWFjdEV2ZW50RW1pdHRlciIpOwordmFyIFJlYWN0SW5wdXRTZWxlY3Rpb24g
PSByZXF1aXJlKCIuL1JlYWN0SW5wdXRTZWxlY3Rpb24iKTsKK3ZhciBSZWFjdE9uRE9NUmVhZHkg
PSByZXF1aXJlKCIuL1JlYWN0T25ET01SZWFkeSIpOwordmFyIFRyYW5zYWN0aW9uID0gcmVxdWly
ZSgiLi9UcmFuc2FjdGlvbiIpOworCit2YXIgbWl4SW50byA9IHJlcXVpcmUoIi4vbWl4SW50byIp
OworCisvKioKKyAqIEVuc3VyZXMgdGhhdCwgd2hlbiBwb3NzaWJsZSwgdGhlIHNlbGVjdGlvbiBy
YW5nZSAoY3VycmVudGx5IHNlbGVjdGVkIHRleHQKKyAqIGlucHV0KSBpcyBub3QgZGlzdHVyYmVk
IGJ5IHBlcmZvcm1pbmcgdGhlIHRyYW5zYWN0aW9uLgorICovCit2YXIgU0VMRUNUSU9OX1JFU1RP
UkFUSU9OID0geworICAvKioKKyAgICogQHJldHVybiB7U2VsZWN0aW9ufSBTZWxlY3Rpb24gaW5m
b3JtYXRpb24uCisgICAqLworICBpbml0aWFsaXplOiBSZWFjdElucHV0U2VsZWN0aW9uLmdldFNl
bGVjdGlvbkluZm9ybWF0aW9uLAorICAvKioKKyAgICogQHBhcmFtIHtTZWxlY3Rpb259IHNlbCBT
ZWxlY3Rpb24gaW5mb3JtYXRpb24gcmV0dXJuZWQgZnJvbSBgaW5pdGlhbGl6ZWAuCisgICAqLwor
ICBjbG9zZTogUmVhY3RJbnB1dFNlbGVjdGlvbi5yZXN0b3JlU2VsZWN0aW9uCit9OworCisvKioK
KyAqIFN1cHByZXNzZXMgZXZlbnRzIChibHVyL2ZvY3VzKSB0aGF0IGNvdWxkIGJlIGluYWR2ZXJ0
ZW50bHkgZGlzcGF0Y2hlZCBkdWUgdG8KKyAqIGhpZ2ggbGV2ZWwgRE9NIG1hbmlwdWxhdGlvbnMg
KGxpa2UgdGVtcG9yYXJpbHkgcmVtb3ZpbmcgYSB0ZXh0IGlucHV0IGZyb20gdGhlCisgKiBET00p
LgorICovCit2YXIgRVZFTlRfU1VQUFJFU1NJT04gPSB7CisgIC8qKgorICAgKiBAcmV0dXJuIHti
b29sZWFufSBUaGUgZW5hYmxlZCBzdGF0dXMgb2YgYFJlYWN0RXZlbnRFbWl0dGVyYCBiZWZvcmUg
dGhlCisgICAqIHJlY29uY2lsaWF0aW9uLgorICAgKi8KKyAgaW5pdGlhbGl6ZTogZnVuY3Rpb24o
KSB7CisgICAgdmFyIGN1cnJlbnRseUVuYWJsZWQgPSBSZWFjdEV2ZW50RW1pdHRlci5pc0VuYWJs
ZWQoKTsKKyAgICBSZWFjdEV2ZW50RW1pdHRlci5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICByZXR1
cm4gY3VycmVudGx5RW5hYmxlZDsKKyAgfSwKKworICAvKioKKyAgICogQHBhcmFtIHtib29sZWFu
fSBwcmV2aW91c2x5RW5hYmxlZCBFbmFibGVkIHN0YXR1cyBvZiBgUmVhY3RFdmVudEVtaXR0ZXJg
CisgICAqICAgYmVmb3JlIHRoZSByZWNvbmNpbGlhdGlvbiBvY2N1cmVkLiBgY2xvc2VgIHJlc3Rv
cmVzIHRoZSBwcmV2aW91cyB2YWx1ZS4KKyAgICovCisgIGNsb3NlOiBmdW5jdGlvbihwcmV2aW91
c2x5RW5hYmxlZCkgeworICAgIFJlYWN0RXZlbnRFbWl0dGVyLnNldEVuYWJsZWQocHJldmlvdXNs
eUVuYWJsZWQpOworICB9Cit9OworCisvKioKKyAqIFByb3ZpZGVzIGEgYFJlYWN0T25ET01SZWFk
eWAgcXVldWUgZm9yIGNvbGxlY3RpbmcgYG9uRE9NUmVhZHlgIGNhbGxiYWNrcworICogZHVyaW5n
IHRoZSBwZXJmb3JtaW5nIG9mIHRoZSB0cmFuc2FjdGlvbi4KKyAqLwordmFyIE9OX0RPTV9SRUFE
WV9RVUVVRUlORyA9IHsKKyAgLyoqCisgICAqIEluaXRpYWxpemVzIHRoZSBpbnRlcm5hbCBgb25E
T01SZWFkeWAgcXVldWUuCisgICAqLworICBpbml0aWFsaXplOiBmdW5jdGlvbigpIHsKKyAgICB0
aGlzLnJlYWN0T25ET01SZWFkeS5yZXNldCgpOworICB9LAorCisgIC8qKgorICAgKiBBZnRlciBE
T00gaXMgZmx1c2hlZCwgaW52b2tlIGFsbCByZWdpc3RlcmVkIGBvbkRPTVJlYWR5YCBjYWxsYmFj
a3MuCisgICAqLworICBjbG9zZTogZnVuY3Rpb24oKSB7CisgICAgdGhpcy5yZWFjdE9uRE9NUmVh
ZHkubm90aWZ5QWxsKCk7CisgIH0KK307CisKKy8qKgorICogRXhlY3V0ZWQgd2l0aGluIHRoZSBz
Y29wZSBvZiB0aGUgYFRyYW5zYWN0aW9uYCBpbnN0YW5jZS4gQ29uc2lkZXIgdGhlc2UgYXMKKyAq
IGJlaW5nIG1lbWJlciBtZXRob2RzLCBidXQgd2l0aCBhbiBpbXBsaWVkIG9yZGVyaW5nIHdoaWxl
IGJlaW5nIGlzb2xhdGVkIGZyb20KKyAqIGVhY2ggb3RoZXIuCisgKi8KK3ZhciBUUkFOU0FDVElP
Tl9XUkFQUEVSUyA9IFsKKyAgU0VMRUNUSU9OX1JFU1RPUkFUSU9OLAorICBFVkVOVF9TVVBQUkVT
U0lPTiwKKyAgT05fRE9NX1JFQURZX1FVRVVFSU5HCitdOworCisvKioKKyAqIEN1cnJlbnRseToK
KyAqIC0gVGhlIG9yZGVyIHRoYXQgdGhlc2UgYXJlIGxpc3RlZCBpbiB0aGUgdHJhbnNhY3Rpb24g
aXMgY3JpdGljYWw6CisgKiAtIFN1cHByZXNzZXMgZXZlbnRzLgorICogLSBSZXN0b3JlcyBzZWxl
Y3Rpb24gcmFuZ2UuCisgKgorICogRnV0dXJlOgorICogLSBSZXN0b3JlIGRvY3VtZW50L292ZXJm
bG93IHNjcm9sbCBwb3NpdGlvbnMgdGhhdCB3ZXJlIHVuaW50ZW50aW9uYWxseQorICogICBtb2Rp
ZmllZCB2aWEgRE9NIGluc2VydGlvbnMgYWJvdmUgdGhlIHRvcCB2aWV3cG9ydCBib3VuZGFyeS4K
KyAqIC0gSW1wbGVtZW50L2ludGVncmF0ZSB3aXRoIGN1c3RvbWl6ZWQgY29uc3RyYWludCBiYXNl
ZCBsYXlvdXQgc3lzdGVtIGFuZCBrZWVwCisgKiAgIHRyYWNrIG9mIHdoaWNoIGRpbWVuc2lvbnMg
bXVzdCBiZSByZW1lYXN1cmVkLgorICoKKyAqIEBjbGFzcyBSZWFjdFJlY29uY2lsZVRyYW5zYWN0
aW9uCisgKi8KK2Z1bmN0aW9uIFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24oKSB7CisgIHRoaXMu
cmVpbml0aWFsaXplVHJhbnNhY3Rpb24oKTsKKyAgdGhpcy5yZWFjdE9uRE9NUmVhZHkgPSBSZWFj
dE9uRE9NUmVhZHkuZ2V0UG9vbGVkKG51bGwpOworfQorCit2YXIgTWl4aW4gPSB7CisgIC8qKgor
ICAgKiBAc2VlIFRyYW5zYWN0aW9uCisgICAqIEBhYnN0cmFjdAorICAgKiBAZmluYWwKKyAgICog
QHJldHVybiB7YXJyYXk8b2JqZWN0Pn0gTGlzdCBvZiBvcGVyYXRpb24gd3JhcCBwcm9jZWVkdXJl
cy4KKyAgICogICBUT0RPOiBjb252ZXJ0IHRvIGFycmF5PFRyYW5zYWN0aW9uV3JhcHBlcj4KKyAg
ICovCisgIGdldFRyYW5zYWN0aW9uV3JhcHBlcnM6IGZ1bmN0aW9uKCkgeworICAgIGlmIChFeGVj
dXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHsKKyAgICAgIHJldHVybiBUUkFOU0FDVElPTl9X
UkFQUEVSUzsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIFtdOworICAgIH0KKyAgfSwKKwor
ICAvKioKKyAgICogQHJldHVybiB7b2JqZWN0fSBUaGUgcXVldWUgdG8gY29sbGVjdCBgb25ET01S
ZWFkeWAgY2FsbGJhY2tzIHdpdGguCisgICAqICAgVE9ETzogY29udmVydCB0byBSZWFjdE9uRE9N
UmVhZHkKKyAgICovCisgIGdldFJlYWN0T25ET01SZWFkeTogZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuIHRoaXMucmVhY3RPbkRPTVJlYWR5OworICB9LAorCisgIC8qKgorICAgKiBgUG9vbGVkQ2xh
c3NgIGxvb2tzIGZvciB0aGlzLCBhbmQgd2lsbCBpbnZva2UgdGhpcyBiZWZvcmUgYWxsb3dpbmcg
dGhpcworICAgKiBpbnN0YW5jZSB0byBiZSByZXN1c2VkLgorICAgKi8KKyAgZGVzdHJ1Y3Rvcjog
ZnVuY3Rpb24oKSB7CisgICAgUmVhY3RPbkRPTVJlYWR5LnJlbGVhc2UodGhpcy5yZWFjdE9uRE9N
UmVhZHkpOworICAgIHRoaXMucmVhY3RPbkRPTVJlYWR5ID0gbnVsbDsKKyAgfQorfTsKKworCitt
aXhJbnRvKFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uLk1peGluKTsKK21p
eEludG8oUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbiwgTWl4aW4pOworCitQb29sZWRDbGFzcy5h
ZGRQb29saW5nVG8oUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbik7CisKK21vZHVsZS5leHBvcnRz
ID0gUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbjsKKworfSx7Ii4vRXhlY3V0aW9uRW52aXJvbm1l
bnQiOjE5LCIuL1Bvb2xlZENsYXNzIjoyMCwiLi9SZWFjdEV2ZW50RW1pdHRlciI6MzMsIi4vUmVh
Y3RJbnB1dFNlbGVjdGlvbiI6MzYsIi4vUmVhY3RPbkRPTVJlYWR5Ijo0MSwiLi9UcmFuc2FjdGlv
biI6NTgsIi4vbWl4SW50byI6ODR9XSw0NjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5z
ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7
CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgg
dGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK
KyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisg
KiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRp
bmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmli
dXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJ
VElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhl
IExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMg
YW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAdHlwZWNoZWNr
cyBzdGF0aWMtb25seQorICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0U2VydmVyUmVuZGVyaW5nCisg
Ki8KKyJ1c2Ugc3RyaWN0IjsKKwordmFyIFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24gPSByZXF1
aXJlKCIuL1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24iKTsKK3ZhciBSZWFjdEluc3RhbmNlSGFu
ZGxlcyA9IHJlcXVpcmUoIi4vUmVhY3RJbnN0YW5jZUhhbmRsZXMiKTsKKworLyoqCisgKiBAcGFy
YW0ge29iamVjdH0gY29tcG9uZW50CisgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjaworICov
CitmdW5jdGlvbiByZW5kZXJDb21wb25lbnRUb1N0cmluZyhjb21wb25lbnQsIGNhbGxiYWNrKSB7
CisgIC8vIFdlIHVzZSBhIGNhbGxiYWNrIEFQSSB0byBrZWVwIHRoZSBBUEkgYXN5bmMgaW4gY2Fz
ZSBpbiB0aGUgZnV0dXJlIHdlIGV2ZXIKKyAgLy8gbmVlZCBpdCwgYnV0IGluIHJlYWxpdHkgdGhp
cyBpcyBhIHN5bmNocm9ub3VzIG9wZXJhdGlvbi4KKyAgdmFyIGlkID0gUmVhY3RJbnN0YW5jZUhh
bmRsZXMuY3JlYXRlUmVhY3RSb290SUQoKTsKKyAgdmFyIHRyYW5zYWN0aW9uID0gUmVhY3RSZWNv
bmNpbGVUcmFuc2FjdGlvbi5nZXRQb29sZWQoKTsKKyAgdHJhbnNhY3Rpb24ucmVpbml0aWFsaXpl
VHJhbnNhY3Rpb24oKTsKKyAgdHJ5IHsKKyAgICB0cmFuc2FjdGlvbi5wZXJmb3JtKGZ1bmN0aW9u
KCkgeworICAgICAgY2FsbGJhY2soY29tcG9uZW50Lm1vdW50Q29tcG9uZW50KGlkLCB0cmFuc2Fj
dGlvbikpOworICAgIH0sIG51bGwpOworICB9IGZpbmFsbHkgeworICAgIFJlYWN0UmVjb25jaWxl
VHJhbnNhY3Rpb24ucmVsZWFzZSh0cmFuc2FjdGlvbik7CisgIH0KK30KKworbW9kdWxlLmV4cG9y
dHMgPSB7CisgIHJlbmRlckNvbXBvbmVudFRvU3RyaW5nOiByZW5kZXJDb21wb25lbnRUb1N0cmlu
ZworfTsKKworfSx7Ii4vUmVhY3RJbnN0YW5jZUhhbmRsZXMiOjM3LCIuL1JlYWN0UmVjb25jaWxl
VHJhbnNhY3Rpb24iOjQ1fV0sNDc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewor
LyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVu
ZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICog
eW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBM
aWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgor
ICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5s
ZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBz
b2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQg
b24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05T
IE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNl
bnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAor
ICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxl
IFJlYWN0VGV4dENvbXBvbmVudAorICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHkKKyAqLworCisi
dXNlIHN0cmljdCI7CisKK3ZhciBSZWFjdENvbXBvbmVudCA9IHJlcXVpcmUoIi4vUmVhY3RDb21w
b25lbnQiKTsKK3ZhciBSZWFjdElEID0gcmVxdWlyZSgiLi9SZWFjdElEIik7CisKK3ZhciBlc2Nh
cGVUZXh0Rm9yQnJvd3NlciA9IHJlcXVpcmUoIi4vZXNjYXBlVGV4dEZvckJyb3dzZXIiKTsKK3Zh
ciBtaXhJbnRvID0gcmVxdWlyZSgiLi9taXhJbnRvIik7CisKKy8qKgorICogVGV4dCBub2RlcyB2
aW9sYXRlIGEgY291cGxlIGFzc3VtcHRpb25zIHRoYXQgUmVhY3QgbWFrZXMgYWJvdXQgY29tcG9u
ZW50czoKKyAqCisgKiAgLSBXaGVuIG1vdW50aW5nIHRleHQgaW50byB0aGUgRE9NLCBhZGphY2Vu
dCB0ZXh0IG5vZGVzIGFyZSBtZXJnZWQuCisgKiAgLSBUZXh0IG5vZGVzIGNhbm5vdCBiZSBhc3Np
Z25lZCBhIFJlYWN0IHJvb3QgSUQuCisgKgorICogVGhpcyBjb21wb25lbnQgaXMgdXNlZCB0byB3
cmFwIHN0cmluZ3MgaW4gZWxlbWVudHMgc28gdGhhdCB0aGV5IGNhbiB1bmRlcmdvCisgKiB0aGUg
c2FtZSByZWNvbmNpbGlhdGlvbiB0aGF0IGlzIGFwcGxpZWQgdG8gZWxlbWVudHMuCisgKgorICog
VE9ETzogSW52ZXN0aWdhdGUgcmVwcmVzZW50aW5nIFJlYWN0IGNvbXBvbmVudHMgaW4gdGhlIERP
TSB3aXRoIHRleHQgbm9kZXMuCisgKgorICogQGNsYXNzIFJlYWN0VGV4dENvbXBvbmVudAorICog
QGV4dGVuZHMgUmVhY3RDb21wb25lbnQKKyAqIEBpbnRlcm5hbAorICovCit2YXIgUmVhY3RUZXh0
Q29tcG9uZW50ID0gZnVuY3Rpb24oaW5pdGlhbFRleHQpIHsKKyAgdGhpcy5jb25zdHJ1Y3Qoe3Rl
eHQ6IGluaXRpYWxUZXh0fSk7Cit9OworCittaXhJbnRvKFJlYWN0VGV4dENvbXBvbmVudCwgUmVh
Y3RDb21wb25lbnQuTWl4aW4pOworbWl4SW50byhSZWFjdFRleHRDb21wb25lbnQsIHsKKworICAv
KioKKyAgICogQ3JlYXRlcyB0aGUgbWFya3VwIGZvciB0aGlzIHRleHQgbm9kZS4gVGhpcyBub2Rl
IGlzIG5vdCBpbnRlbmRlZCB0byBoYXZlCisgICAqIGFueSBmZWF0dXJlcyBiZXNpZGVzIGNvbnRh
aW5pbmcgdGV4dCBjb250ZW50LgorICAgKgorICAgKiBAcGFyYW0ge3N0cmluZ30gcm9vdElEIERP
TSBJRCBvZiB0aGUgcm9vdCBub2RlLgorICAgKiBAcmV0dXJuIHtzdHJpbmd9IE1hcmt1cCBmb3Ig
dGhpcyB0ZXh0IG5vZGUuCisgICAqIEBpbnRlcm5hbAorICAgKi8KKyAgbW91bnRDb21wb25lbnQ6
IGZ1bmN0aW9uKHJvb3RJRCkgeworICAgIFJlYWN0Q29tcG9uZW50Lk1peGluLm1vdW50Q29tcG9u
ZW50LmNhbGwodGhpcywgcm9vdElEKTsKKyAgICByZXR1cm4gKAorICAgICAgJzxzcGFuICcgKyBS
ZWFjdElELkFUVFJfTkFNRSArICc9IicgKyByb290SUQgKyAnIj4nICsKKyAgICAgICAgZXNjYXBl
VGV4dEZvckJyb3dzZXIodGhpcy5wcm9wcy50ZXh0KSArCisgICAgICAnPC9zcGFuPicKKyAgICAp
OworICB9LAorCisgIC8qKgorICAgKiBVcGRhdGVzIHRoaXMgY29tcG9uZW50IGJ5IHVwZGF0aW5n
IHRoZSB0ZXh0IGNvbnRlbnQuCisgICAqCisgICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJvcHMg
Q29udGFpbnMgdGhlIG5leHQgdGV4dCBjb250ZW50LgorICAgKiBAcGFyYW0ge1JlYWN0UmVjb25j
aWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uCisgICAqIEBpbnRlcm5hbAorICAgKi8KKyAgcmVj
ZWl2ZVByb3BzOiBmdW5jdGlvbihuZXh0UHJvcHMsIHRyYW5zYWN0aW9uKSB7CisgICAgaWYgKG5l
eHRQcm9wcy50ZXh0ICE9PSB0aGlzLnByb3BzLnRleHQpIHsKKyAgICAgIHRoaXMucHJvcHMudGV4
dCA9IG5leHRQcm9wcy50ZXh0OworICAgICAgUmVhY3RDb21wb25lbnQuRE9NSURPcGVyYXRpb25z
LnVwZGF0ZVRleHRDb250ZW50QnlJRCgKKyAgICAgICAgdGhpcy5fcm9vdE5vZGVJRCwKKyAgICAg
ICAgbmV4dFByb3BzLnRleHQKKyAgICAgICk7CisgICAgfQorICB9CisKK30pOworCittb2R1bGUu
ZXhwb3J0cyA9IFJlYWN0VGV4dENvbXBvbmVudDsKKworfSx7Ii4vUmVhY3RDb21wb25lbnQiOjIy
LCIuL1JlYWN0SUQiOjM1LCIuL2VzY2FwZVRleHRGb3JCcm93c2VyIjo2NSwiLi9taXhJbnRvIjo4
NH1dLDQ4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJp
Z2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hl
IExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVz
ZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlv
dSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cu
YXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBi
eSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIg
QkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwg
ZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNw
ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25z
IHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFVwZGF0ZXMK
KyAqLworCisidXNlIHN0cmljdCI7CisKK3ZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCIuL2ludmFy
aWFudCIpOworCit2YXIgaXNCYXRjaGluZ1VwZGF0ZXMgPSBmYWxzZTsKKwordmFyIGRpcnR5Q29t
cG9uZW50cyA9IFtdOworCisvKioKKyAqIENhbGwgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIGluIGEg
Y29udGV4dCB3aXRoaW4gd2hpY2ggY2FsbHMgdG8gYHNldFN0YXRlYCBhbmQKKyAqIGZyaWVuZHMg
YXJlIGJhdGNoZWQgc3VjaCB0aGF0IGNvbXBvbmVudHMgYXJlbid0IHVwZGF0ZWQgdW5uZWNlc3Nh
cmlseS4KKyAqLworZnVuY3Rpb24gYmF0Y2hlZFVwZGF0ZXMoY2FsbGJhY2spIHsKKyAgaWYgKGlz
QmF0Y2hpbmdVcGRhdGVzKSB7CisgICAgLy8gV2UncmUgYWxyZWFkeSBleGVjdXRpbmcgaW4gYW4g
ZW52aXJvbm1lbnQgd2hlcmUgdXBkYXRlcyB3aWxsIGJlIGJhdGNoZWQsCisgICAgLy8gc28gdGhp
cyBpcyBhIG5vLW9wLgorICAgIGNhbGxiYWNrKCk7CisgICAgcmV0dXJuOworICB9CisKKyAgaXNC
YXRjaGluZ1VwZGF0ZXMgPSB0cnVlOworCisgIHRyeSB7CisgICAgY2FsbGJhY2soKTsKKyAgICAv
LyBUT0RPOiBTb3J0IGNvbXBvbmVudHMgYnkgZGVwdGggc3VjaCB0aGF0IHBhcmVudCBjb21wb25l
bnRzIHVwZGF0ZSBmaXJzdAorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlydHlDb21wb25lbnRz
Lmxlbmd0aDsgaSsrKSB7CisgICAgICAvLyBJZiBhIGNvbXBvbmVudCBpcyB1bm1vdW50ZWQgYmVm
b3JlIHBlbmRpbmcgY2hhbmdlcyBhcHBseSwgaWdub3JlIHRoZW0KKyAgICAgIC8vIFRPRE86IFF1
ZXVlIHVubW91bnRzIGluIHRoZSBzYW1lIGxpc3QgdG8gYXZvaWQgdGhpcyBoYXBwZW5pbmcgYXQg
YWxsCisgICAgICB2YXIgY29tcG9uZW50ID0gZGlydHlDb21wb25lbnRzW2ldOworICAgICAgaWYg
KGNvbXBvbmVudC5pc01vdW50ZWQoKSkgeworICAgICAgICAvLyBJZiBwZXJmb3JtVXBkYXRlSWZO
ZWNlc3NhcnkgaGFwcGVucyB0byBlbnF1ZXVlIGFueSBuZXcgdXBkYXRlcywgd2UKKyAgICAgICAg
Ly8gc2hvdWxkbid0IGV4ZWN1dGUgdGhlIGNhbGxiYWNrcyB1bnRpbCB0aGUgbmV4dCByZW5kZXIg
aGFwcGVucywgc28KKyAgICAgICAgLy8gc3Rhc2ggdGhlIGNhbGxiYWNrcyBmaXJzdAorICAgICAg
ICB2YXIgY2FsbGJhY2tzID0gY29tcG9uZW50Ll9wZW5kaW5nQ2FsbGJhY2tzOworICAgICAgICBj
b21wb25lbnQuX3BlbmRpbmdDYWxsYmFja3MgPSBudWxsOworICAgICAgICBjb21wb25lbnQucGVy
Zm9ybVVwZGF0ZUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIGlmIChjYWxsYmFja3MpIHsKKyAgICAg
ICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNhbGxiYWNrcy5sZW5ndGg7IGorKykgeworICAgICAg
ICAgICAgY2FsbGJhY2tzW2pdKCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9Cisg
ICAgfQorICB9IGNhdGNoIChlcnJvcikgeworICAgIC8vIElFOCByZXF1aXJlcyBgY2F0Y2hgIGlu
IG9yZGVyIHRvIHVzZSBgZmluYWxseWAuCisgICAgdGhyb3cgZXJyb3I7CisgIH0gZmluYWxseSB7
CisgICAgZGlydHlDb21wb25lbnRzLmxlbmd0aCA9IDA7CisgICAgaXNCYXRjaGluZ1VwZGF0ZXMg
PSBmYWxzZTsKKyAgfQorfQorCisvKioKKyAqIE1hcmsgYSBjb21wb25lbnQgYXMgbmVlZGluZyBh
IHJlcmVuZGVyLCBhZGRpbmcgYW4gb3B0aW9uYWwgY2FsbGJhY2sgdG8gYQorICogbGlzdCBvZiBm
dW5jdGlvbnMgd2hpY2ggd2lsbCBiZSBleGVjdXRlZCBvbmNlIHRoZSByZXJlbmRlciBvY2N1cnMu
CisgKi8KK2Z1bmN0aW9uIGVucXVldWVVcGRhdGUoY29tcG9uZW50LCBjYWxsYmFjaykgeworICBp
bnZhcmlhbnQoCisgICAgIWNhbGxiYWNrIHx8IHR5cGVvZiBjYWxsYmFjayA9PT0gImZ1bmN0aW9u
IiwKKyAgICAnZW5xdWV1ZVVwZGF0ZSguLi4pOiBZb3UgY2FsbGVkIGBzZXRQcm9wc2AsIGByZXBs
YWNlUHJvcHNgLCAnICsKKyAgICAnYHNldFN0YXRlYCwgYHJlcGxhY2VTdGF0ZWAsIG9yIGBmb3Jj
ZVVwZGF0ZWAgd2l0aCBhIGNhbGxiYWNrIHRoYXQgJyArCisgICAgJ2lzblwndCBjYWxsYWJsZS4n
CisgICk7CisKKyAgaWYgKCFpc0JhdGNoaW5nVXBkYXRlcykgeworICAgIGNvbXBvbmVudC5wZXJm
b3JtVXBkYXRlSWZOZWNlc3NhcnkoKTsKKyAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpOworICAg
IHJldHVybjsKKyAgfQorCisgIGRpcnR5Q29tcG9uZW50cy5wdXNoKGNvbXBvbmVudCk7CisKKyAg
aWYgKGNhbGxiYWNrKSB7CisgICAgaWYgKGNvbXBvbmVudC5fcGVuZGluZ0NhbGxiYWNrcykgewor
ICAgICAgY29tcG9uZW50Ll9wZW5kaW5nQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOworICAgIH0g
ZWxzZSB7CisgICAgICBjb21wb25lbnQuX3BlbmRpbmdDYWxsYmFja3MgPSBbY2FsbGJhY2tdOwor
ICAgIH0KKyAgfQorfQorCit2YXIgUmVhY3RVcGRhdGVzID0geworICBiYXRjaGVkVXBkYXRlczog
YmF0Y2hlZFVwZGF0ZXMsCisgIGVucXVldWVVcGRhdGU6IGVucXVldWVVcGRhdGUKK307CisKK21v
ZHVsZS5leHBvcnRzID0gUmVhY3RVcGRhdGVzOworCit9LHsiLi9pbnZhcmlhbnQiOjc1fV0sNDk6
W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAx
MyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5z
ZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMg
ZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBv
YnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUu
b3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxp
Y2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0
ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywK
KyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIg
ZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMg
bGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIg
dGhlIExpY2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxlIFNpbXBsZUV2ZW50UGx1Z2luCisg
Ki8KKworInVzZSBzdHJpY3QiOworCit2YXIgRXZlbnRDb25zdGFudHMgPSByZXF1aXJlKCIuL0V2
ZW50Q29uc3RhbnRzIik7Cit2YXIgRXZlbnRQcm9wYWdhdG9ycyA9IHJlcXVpcmUoIi4vRXZlbnRQ
cm9wYWdhdG9ycyIpOwordmFyIFN5bnRoZXRpY0V2ZW50ID0gcmVxdWlyZSgiLi9TeW50aGV0aWNF
dmVudCIpOwordmFyIFN5bnRoZXRpY0ZvY3VzRXZlbnQgPSByZXF1aXJlKCIuL1N5bnRoZXRpY0Zv
Y3VzRXZlbnQiKTsKK3ZhciBTeW50aGV0aWNLZXlib2FyZEV2ZW50ID0gcmVxdWlyZSgiLi9TeW50
aGV0aWNLZXlib2FyZEV2ZW50Iik7Cit2YXIgU3ludGhldGljTW91c2VFdmVudCA9IHJlcXVpcmUo
Ii4vU3ludGhldGljTW91c2VFdmVudCIpOwordmFyIFN5bnRoZXRpY011dGF0aW9uRXZlbnQgPSBy
ZXF1aXJlKCIuL1N5bnRoZXRpY011dGF0aW9uRXZlbnQiKTsKK3ZhciBTeW50aGV0aWNUb3VjaEV2
ZW50ID0gcmVxdWlyZSgiLi9TeW50aGV0aWNUb3VjaEV2ZW50Iik7Cit2YXIgU3ludGhldGljVUlF
dmVudCA9IHJlcXVpcmUoIi4vU3ludGhldGljVUlFdmVudCIpOwordmFyIFN5bnRoZXRpY1doZWVs
RXZlbnQgPSByZXF1aXJlKCIuL1N5bnRoZXRpY1doZWVsRXZlbnQiKTsKKwordmFyIGludmFyaWFu
dCA9IHJlcXVpcmUoIi4vaW52YXJpYW50Iik7Cit2YXIga2V5T2YgPSByZXF1aXJlKCIuL2tleU9m
Iik7CisKK3ZhciB0b3BMZXZlbFR5cGVzID0gRXZlbnRDb25zdGFudHMudG9wTGV2ZWxUeXBlczsK
KwordmFyIGV2ZW50VHlwZXMgPSB7CisgIGJsdXI6IHsKKyAgICBwaGFzZWRSZWdpc3RyYXRpb25O
YW1lczogeworICAgICAgYnViYmxlZDoga2V5T2Yoe29uQmx1cjogdHJ1ZX0pLAorICAgICAgY2Fw
dHVyZWQ6IGtleU9mKHtvbkJsdXJDYXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIGNsaWNr
OiB7CisgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHsKKyAgICAgIGJ1YmJsZWQ6IGtleU9m
KHtvbkNsaWNrOiB0cnVlfSksCisgICAgICBjYXB0dXJlZDoga2V5T2Yoe29uQ2xpY2tDYXB0dXJl
OiB0cnVlfSkKKyAgICB9CisgIH0sCisgIGRvdWJsZUNsaWNrOiB7CisgICAgcGhhc2VkUmVnaXN0
cmF0aW9uTmFtZXM6IHsKKyAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkRvdWJsZUNsaWNrOiB0cnVl
fSksCisgICAgICBjYXB0dXJlZDoga2V5T2Yoe29uRG91YmxlQ2xpY2tDYXB0dXJlOiB0cnVlfSkK
KyAgICB9CisgIH0sCisgIGRyYWc6IHsKKyAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczogewor
ICAgICAgYnViYmxlZDoga2V5T2Yoe29uRHJhZzogdHJ1ZX0pLAorICAgICAgY2FwdHVyZWQ6IGtl
eU9mKHtvbkRyYWdDYXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIGRyYWdFbmQ6IHsKKyAg
ICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczogeworICAgICAgYnViYmxlZDoga2V5T2Yoe29uRHJh
Z0VuZDogdHJ1ZX0pLAorICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkRyYWdFbmRDYXB0dXJlOiB0
cnVlfSkKKyAgICB9CisgIH0sCisgIGRyYWdFbnRlcjogeworICAgIHBoYXNlZFJlZ2lzdHJhdGlv
bk5hbWVzOiB7CisgICAgICBidWJibGVkOiBrZXlPZih7b25EcmFnRW50ZXI6IHRydWV9KSwKKyAg
ICAgIGNhcHR1cmVkOiBrZXlPZih7b25EcmFnRW50ZXJDYXB0dXJlOiB0cnVlfSkKKyAgICB9Cisg
IH0sCisgIGRyYWdFeGl0OiB7CisgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHsKKyAgICAg
IGJ1YmJsZWQ6IGtleU9mKHtvbkRyYWdFeGl0OiB0cnVlfSksCisgICAgICBjYXB0dXJlZDoga2V5
T2Yoe29uRHJhZ0V4aXRDYXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIGRyYWdMZWF2ZTog
eworICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7CisgICAgICBidWJibGVkOiBrZXlPZih7
b25EcmFnTGVhdmU6IHRydWV9KSwKKyAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25EcmFnTGVhdmVD
YXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIGRyYWdPdmVyOiB7CisgICAgcGhhc2VkUmVn
aXN0cmF0aW9uTmFtZXM6IHsKKyAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkRyYWdPdmVyOiB0cnVl
fSksCisgICAgICBjYXB0dXJlZDoga2V5T2Yoe29uRHJhZ092ZXJDYXB0dXJlOiB0cnVlfSkKKyAg
ICB9CisgIH0sCisgIGRyYWdTdGFydDogeworICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7
CisgICAgICBidWJibGVkOiBrZXlPZih7b25EcmFnU3RhcnQ6IHRydWV9KSwKKyAgICAgIGNhcHR1
cmVkOiBrZXlPZih7b25EcmFnU3RhcnRDYXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIGRy
b3A6IHsKKyAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczogeworICAgICAgYnViYmxlZDoga2V5
T2Yoe29uRHJvcDogdHJ1ZX0pLAorICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkRyb3BDYXB0dXJl
OiB0cnVlfSkKKyAgICB9CisgIH0sCisgIERPTUNoYXJhY3RlckRhdGFNb2RpZmllZDogeworICAg
IHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7CisgICAgICBidWJibGVkOiBrZXlPZih7b25ET01D
aGFyYWN0ZXJEYXRhTW9kaWZpZWQ6IHRydWV9KSwKKyAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25E
T01DaGFyYWN0ZXJEYXRhTW9kaWZpZWRDYXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIGZv
Y3VzOiB7CisgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHsKKyAgICAgIGJ1YmJsZWQ6IGtl
eU9mKHtvbkZvY3VzOiB0cnVlfSksCisgICAgICBjYXB0dXJlZDoga2V5T2Yoe29uRm9jdXNDYXB0
dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIGlucHV0OiB7CisgICAgcGhhc2VkUmVnaXN0cmF0
aW9uTmFtZXM6IHsKKyAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbklucHV0OiB0cnVlfSksCisgICAg
ICBjYXB0dXJlZDoga2V5T2Yoe29uSW5wdXRDYXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisg
IGtleURvd246IHsKKyAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczogeworICAgICAgYnViYmxl
ZDoga2V5T2Yoe29uS2V5RG93bjogdHJ1ZX0pLAorICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbktl
eURvd25DYXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIGtleVByZXNzOiB7CisgICAgcGhh
c2VkUmVnaXN0cmF0aW9uTmFtZXM6IHsKKyAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbktleVByZXNz
OiB0cnVlfSksCisgICAgICBjYXB0dXJlZDoga2V5T2Yoe29uS2V5UHJlc3NDYXB0dXJlOiB0cnVl
fSkKKyAgICB9CisgIH0sCisgIGtleVVwOiB7CisgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6
IHsKKyAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbktleVVwOiB0cnVlfSksCisgICAgICBjYXB0dXJl
ZDoga2V5T2Yoe29uS2V5VXBDYXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIC8vIE5vdGU6
IFdlIGRvIG5vdCBhbGxvdyBsaXN0ZW5pbmcgdG8gbW91c2VPdmVyIGV2ZW50cy4gSW5zdGVhZCwg
dXNlIHRoZQorICAvLyBvbk1vdXNlRW50ZXIvb25Nb3VzZUxlYXZlIGNyZWF0ZWQgYnkgYEVudGVy
TGVhdmVFdmVudFBsdWdpbmAuCisgIG1vdXNlRG93bjogeworICAgIHBoYXNlZFJlZ2lzdHJhdGlv
bk5hbWVzOiB7CisgICAgICBidWJibGVkOiBrZXlPZih7b25Nb3VzZURvd246IHRydWV9KSwKKyAg
ICAgIGNhcHR1cmVkOiBrZXlPZih7b25Nb3VzZURvd25DYXB0dXJlOiB0cnVlfSkKKyAgICB9Cisg
IH0sCisgIG1vdXNlTW92ZTogeworICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7CisgICAg
ICBidWJibGVkOiBrZXlPZih7b25Nb3VzZU1vdmU6IHRydWV9KSwKKyAgICAgIGNhcHR1cmVkOiBr
ZXlPZih7b25Nb3VzZU1vdmVDYXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIG1vdXNlVXA6
IHsKKyAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczogeworICAgICAgYnViYmxlZDoga2V5T2Yo
e29uTW91c2VVcDogdHJ1ZX0pLAorICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbk1vdXNlVXBDYXB0
dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIHNjcm9sbDogeworICAgIHBoYXNlZFJlZ2lzdHJh
dGlvbk5hbWVzOiB7CisgICAgICBidWJibGVkOiBrZXlPZih7b25TY3JvbGw6IHRydWV9KSwKKyAg
ICAgIGNhcHR1cmVkOiBrZXlPZih7b25TY3JvbGxDYXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0s
CisgIHN1Ym1pdDogeworICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7CisgICAgICBidWJi
bGVkOiBrZXlPZih7b25TdWJtaXQ6IHRydWV9KSwKKyAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25T
dWJtaXRDYXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIHRvdWNoQ2FuY2VsOiB7CisgICAg
cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHsKKyAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvblRvdWNo
Q2FuY2VsOiB0cnVlfSksCisgICAgICBjYXB0dXJlZDoga2V5T2Yoe29uVG91Y2hDYW5jZWxDYXB0
dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIHRvdWNoRW5kOiB7CisgICAgcGhhc2VkUmVnaXN0
cmF0aW9uTmFtZXM6IHsKKyAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvblRvdWNoRW5kOiB0cnVlfSks
CisgICAgICBjYXB0dXJlZDoga2V5T2Yoe29uVG91Y2hFbmRDYXB0dXJlOiB0cnVlfSkKKyAgICB9
CisgIH0sCisgIHRvdWNoTW92ZTogeworICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7Cisg
ICAgICBidWJibGVkOiBrZXlPZih7b25Ub3VjaE1vdmU6IHRydWV9KSwKKyAgICAgIGNhcHR1cmVk
OiBrZXlPZih7b25Ub3VjaE1vdmVDYXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIHRvdWNo
U3RhcnQ6IHsKKyAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczogeworICAgICAgYnViYmxlZDog
a2V5T2Yoe29uVG91Y2hTdGFydDogdHJ1ZX0pLAorICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvblRv
dWNoU3RhcnRDYXB0dXJlOiB0cnVlfSkKKyAgICB9CisgIH0sCisgIHdoZWVsOiB7CisgICAgcGhh
c2VkUmVnaXN0cmF0aW9uTmFtZXM6IHsKKyAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbldoZWVsOiB0
cnVlfSksCisgICAgICBjYXB0dXJlZDoga2V5T2Yoe29uV2hlZWxDYXB0dXJlOiB0cnVlfSkKKyAg
ICB9CisgIH0KK307CisKK3ZhciB0b3BMZXZlbEV2ZW50c1RvRGlzcGF0Y2hDb25maWcgPSB7Cisg
IHRvcEJsdXI6ICAgICAgICBldmVudFR5cGVzLmJsdXIsCisgIHRvcENsaWNrOiAgICAgICBldmVu
dFR5cGVzLmNsaWNrLAorICB0b3BEb3VibGVDbGljazogZXZlbnRUeXBlcy5kb3VibGVDbGljaywK
KyAgdG9wRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkOiBldmVudFR5cGVzLkRPTUNoYXJhY3RlckRh
dGFNb2RpZmllZCwKKyAgdG9wRHJhZzogICAgICAgIGV2ZW50VHlwZXMuZHJhZywKKyAgdG9wRHJh
Z0VuZDogICAgIGV2ZW50VHlwZXMuZHJhZ0VuZCwKKyAgdG9wRHJhZ0VudGVyOiAgIGV2ZW50VHlw
ZXMuZHJhZ0VudGVyLAorICB0b3BEcmFnRXhpdDogICAgZXZlbnRUeXBlcy5kcmFnRXhpdCwKKyAg
dG9wRHJhZ0xlYXZlOiAgIGV2ZW50VHlwZXMuZHJhZ0xlYXZlLAorICB0b3BEcmFnT3ZlcjogICAg
ZXZlbnRUeXBlcy5kcmFnT3ZlciwKKyAgdG9wRHJhZ1N0YXJ0OiAgIGV2ZW50VHlwZXMuZHJhZ1N0
YXJ0LAorICB0b3BEcm9wOiAgICAgICAgZXZlbnRUeXBlcy5kcm9wLAorICB0b3BGb2N1czogICAg
ICAgZXZlbnRUeXBlcy5mb2N1cywKKyAgdG9wSW5wdXQ6ICAgICAgIGV2ZW50VHlwZXMuaW5wdXQs
CisgIHRvcEtleURvd246ICAgICBldmVudFR5cGVzLmtleURvd24sCisgIHRvcEtleVByZXNzOiAg
ICBldmVudFR5cGVzLmtleVByZXNzLAorICB0b3BLZXlVcDogICAgICAgZXZlbnRUeXBlcy5rZXlV
cCwKKyAgdG9wTW91c2VEb3duOiAgIGV2ZW50VHlwZXMubW91c2VEb3duLAorICB0b3BNb3VzZU1v
dmU6ICAgZXZlbnRUeXBlcy5tb3VzZU1vdmUsCisgIHRvcE1vdXNlVXA6ICAgICBldmVudFR5cGVz
Lm1vdXNlVXAsCisgIHRvcFNjcm9sbDogICAgICBldmVudFR5cGVzLnNjcm9sbCwKKyAgdG9wU3Vi
bWl0OiAgICAgIGV2ZW50VHlwZXMuc3VibWl0LAorICB0b3BUb3VjaENhbmNlbDogZXZlbnRUeXBl
cy50b3VjaENhbmNlbCwKKyAgdG9wVG91Y2hFbmQ6ICAgIGV2ZW50VHlwZXMudG91Y2hFbmQsCisg
IHRvcFRvdWNoTW92ZTogICBldmVudFR5cGVzLnRvdWNoTW92ZSwKKyAgdG9wVG91Y2hTdGFydDog
IGV2ZW50VHlwZXMudG91Y2hTdGFydCwKKyAgdG9wV2hlZWw6ICAgICAgIGV2ZW50VHlwZXMud2hl
ZWwKK307CisKK3ZhciBTaW1wbGVFdmVudFBsdWdpbiA9IHsKKworICBldmVudFR5cGVzOiBldmVu
dFR5cGVzLAorCisgIC8qKgorICAgKiBTYW1lIGFzIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9u
LCBleGNlcHQgY2FuY2VscyB0aGUgZXZlbnQgd2hlbiByZXR1cm4KKyAgICogdmFsdWUgaXMgZmFs
c2UuCisgICAqCisgICAqIEBwYXJhbSB7b2JqZWN0fSBFdmVudCB0byBiZSBkaXNwYXRjaGVkLgor
ICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBBcHBsaWNhdGlvbi1sZXZlbCBjYWxsYmFjay4KKyAgICog
QHBhcmFtIHtzdHJpbmd9IGRvbUlEIERPTSBJRCB0byBwYXNzIHRvIHRoZSBjYWxsYmFjay4KKyAg
ICovCisgIGV4ZWN1dGVEaXNwYXRjaDogZnVuY3Rpb24oZXZlbnQsIGxpc3RlbmVyLCBkb21JRCkg
eworICAgIHZhciByZXR1cm5WYWx1ZSA9IGxpc3RlbmVyKGV2ZW50LCBkb21JRCk7CisgICAgaWYg
KHJldHVyblZhbHVlID09PSBmYWxzZSkgeworICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7
CisgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgIH0KKyAgfSwKKworICAvKioKKyAg
ICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZSBSZWNvcmQgZnJvbSBgRXZlbnRDb25zdGFu
dHNgLgorICAgKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSB0b3BMZXZlbFRhcmdldCBUaGUgbGlz
dGVuaW5nIGNvbXBvbmVudCByb290IG5vZGUuCisgICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZl
bFRhcmdldElEIElEIG9mIGB0b3BMZXZlbFRhcmdldGAuCisgICAqIEBwYXJhbSB7b2JqZWN0fSBu
YXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC4KKyAgICogQHJldHVybiB7Kn0gQW4gYWNj
dW11bGF0aW9uIG9mIHN5bnRoZXRpYyBldmVudHMuCisgICAqIEBzZWUge0V2ZW50UGx1Z2luSHVi
LmV4dHJhY3RFdmVudHN9CisgICAqLworICBleHRyYWN0RXZlbnRzOiBmdW5jdGlvbigKKyAgICAg
IHRvcExldmVsVHlwZSwKKyAgICAgIHRvcExldmVsVGFyZ2V0LAorICAgICAgdG9wTGV2ZWxUYXJn
ZXRJRCwKKyAgICAgIG5hdGl2ZUV2ZW50KSB7CisgICAgdmFyIGRpc3BhdGNoQ29uZmlnID0gdG9w
TGV2ZWxFdmVudHNUb0Rpc3BhdGNoQ29uZmlnW3RvcExldmVsVHlwZV07CisgICAgaWYgKCFkaXNw
YXRjaENvbmZpZykgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHZhciBFdmVudENv
bnN0cnVjdG9yOworICAgIHN3aXRjaCh0b3BMZXZlbFR5cGUpIHsKKyAgICAgIGNhc2UgdG9wTGV2
ZWxUeXBlcy50b3BJbnB1dDoKKyAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BTdWJtaXQ6Cisg
ICAgICAgIC8vIEhUTUwgRXZlbnRzCisgICAgICAgIC8vIEBzZWUgaHR0cDovL3d3dy53My5vcmcv
VFIvaHRtbDUvaW5kZXguaHRtbCNldmVudHMtMAorICAgICAgICBFdmVudENvbnN0cnVjdG9yID0g
U3ludGhldGljRXZlbnQ7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSB0b3BMZXZlbFR5cGVz
LnRvcEtleURvd246CisgICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wS2V5UHJlc3M6CisgICAg
ICBjYXNlIHRvcExldmVsVHlwZXMudG9wS2V5VXA6CisgICAgICAgIEV2ZW50Q29uc3RydWN0b3Ig
PSBTeW50aGV0aWNLZXlib2FyZEV2ZW50OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgdG9w
TGV2ZWxUeXBlcy50b3BCbHVyOgorICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEZvY3VzOgor
ICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljRm9jdXNFdmVudDsKKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wQ2xpY2s6CisgICAgICBjYXNlIHRv
cExldmVsVHlwZXMudG9wRG91YmxlQ2xpY2s6CisgICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9w
RHJhZzoKKyAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BEcmFnRW5kOgorICAgICAgY2FzZSB0
b3BMZXZlbFR5cGVzLnRvcERyYWdFbnRlcjoKKyAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BE
cmFnRXhpdDoKKyAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BEcmFnTGVhdmU6CisgICAgICBj
YXNlIHRvcExldmVsVHlwZXMudG9wRHJhZ092ZXI6CisgICAgICBjYXNlIHRvcExldmVsVHlwZXMu
dG9wRHJhZ1N0YXJ0OgorICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcERyb3A6CisgICAgICBj
YXNlIHRvcExldmVsVHlwZXMudG9wTW91c2VEb3duOgorICAgICAgY2FzZSB0b3BMZXZlbFR5cGVz
LnRvcE1vdXNlTW92ZToKKyAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZVVwOgorICAg
ICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljTW91c2VFdmVudDsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVk
OgorICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljTXV0YXRpb25FdmVudDsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wVG91Y2hDYW5jZWw6Cisg
ICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wVG91Y2hFbmQ6CisgICAgICBjYXNlIHRvcExldmVs
VHlwZXMudG9wVG91Y2hNb3ZlOgorICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcFRvdWNoU3Rh
cnQ6CisgICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNUb3VjaEV2ZW50OworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BTY3JvbGw6CisgICAgICAg
IEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNVSUV2ZW50OworICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BXaGVlbDoKKyAgICAgICAgRXZlbnRDb25zdHJ1Y3Rv
ciA9IFN5bnRoZXRpY1doZWVsRXZlbnQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpbnZh
cmlhbnQoCisgICAgICBFdmVudENvbnN0cnVjdG9yLAorICAgICAgJ1NpbXBsZUV2ZW50UGx1Z2lu
OiBVbmhhbmRsZWQgZXZlbnQgdHlwZSwgYCVzYC4nLAorICAgICAgdG9wTGV2ZWxUeXBlCisgICAg
KTsKKyAgICB2YXIgZXZlbnQgPSBFdmVudENvbnN0cnVjdG9yLmdldFBvb2xlZCgKKyAgICAgIGRp
c3BhdGNoQ29uZmlnLAorICAgICAgdG9wTGV2ZWxUYXJnZXRJRCwKKyAgICAgIG5hdGl2ZUV2ZW50
CisgICAgKTsKKyAgICBFdmVudFByb3BhZ2F0b3JzLmFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNo
ZXMoZXZlbnQpOworICAgIHJldHVybiBldmVudDsKKyAgfQorCit9OworCittb2R1bGUuZXhwb3J0
cyA9IFNpbXBsZUV2ZW50UGx1Z2luOworCit9LHsiLi9FdmVudENvbnN0YW50cyI6MTMsIi4vRXZl
bnRQcm9wYWdhdG9ycyI6MTgsIi4vU3ludGhldGljRXZlbnQiOjUwLCIuL1N5bnRoZXRpY0ZvY3Vz
RXZlbnQiOjUxLCIuL1N5bnRoZXRpY0tleWJvYXJkRXZlbnQiOjUyLCIuL1N5bnRoZXRpY01vdXNl
RXZlbnQiOjUzLCIuL1N5bnRoZXRpY011dGF0aW9uRXZlbnQiOjU0LCIuL1N5bnRoZXRpY1RvdWNo
RXZlbnQiOjU1LCIuL1N5bnRoZXRpY1VJRXZlbnQiOjU2LCIuL1N5bnRoZXRpY1doZWVsRXZlbnQi
OjU3LCIuL2ludmFyaWFudCI6NzUsIi4va2V5T2YiOjc5fV0sNTA6W2Z1bmN0aW9uKHJlcXVpcmUs
bW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgor
ICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRo
ZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29t
cGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRo
ZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO
U0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVl
ZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vu
c2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk
LgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n
IHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgor
ICogQHByb3ZpZGVzTW9kdWxlIFN5bnRoZXRpY0V2ZW50CisgKiBAdHlwZWNoZWNrcyBzdGF0aWMt
b25seQorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIFBvb2xlZENsYXNzID0gcmVxdWlyZSgi
Li9Qb29sZWRDbGFzcyIpOworCit2YXIgZW1wdHlGdW5jdGlvbiA9IHJlcXVpcmUoIi4vZW1wdHlG
dW5jdGlvbiIpOwordmFyIGdldEV2ZW50VGFyZ2V0ID0gcmVxdWlyZSgiLi9nZXRFdmVudFRhcmdl
dCIpOwordmFyIG1lcmdlID0gcmVxdWlyZSgiLi9tZXJnZSIpOwordmFyIG1lcmdlSW50byA9IHJl
cXVpcmUoIi4vbWVyZ2VJbnRvIik7CisKKy8qKgorICogQGludGVyZmFjZSBFdmVudAorICogQHNl
ZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvCisgKi8KK3ZhciBFdmVu
dEludGVyZmFjZSA9IHsKKyAgdHlwZTogbnVsbCwKKyAgdGFyZ2V0OiBnZXRFdmVudFRhcmdldCwK
KyAgY3VycmVudFRhcmdldDogbnVsbCwKKyAgZXZlbnRQaGFzZTogbnVsbCwKKyAgYnViYmxlczog
bnVsbCwKKyAgY2FuY2VsYWJsZTogbnVsbCwKKyAgdGltZVN0YW1wOiBmdW5jdGlvbihldmVudCkg
eworICAgIHJldHVybiBldmVudC50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKTsKKyAgfSwKKyAgZGVm
YXVsdFByZXZlbnRlZDogbnVsbCwKKyAgaXNUcnVzdGVkOiBudWxsCit9OworCisvKioKKyAqIFN5
bnRoZXRpYyBldmVudHMgYXJlIGRpc3BhdGNoZWQgYnkgZXZlbnQgcGx1Z2lucywgdHlwaWNhbGx5
IGluIHJlc3BvbnNlIHRvIGEKKyAqIHRvcC1sZXZlbCBldmVudCBkZWxlZ2F0aW9uIGhhbmRsZXIu
CisgKgorICogVGhlc2Ugc3lzdGVtcyBzaG91bGQgZ2VuZXJhbGx5IHVzZSBwb29saW5nIHRvIHJl
ZHVjZSB0aGUgZnJlcXVlbmN5IG9mIGdhcmJhZ2UKKyAqIGNvbGxlY3Rpb24uIFRoZSBzeXN0ZW0g
c2hvdWxkIGNoZWNrIGBpc1BlcnNpc3RlbnRgIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZQorICog
ZXZlbnQgc2hvdWxkIGJlIHJlbGVhc2VkIGludG8gdGhlIHBvb2wgYWZ0ZXIgYmVpbmcgZGlzcGF0
Y2hlZC4gVXNlcnMgdGhhdAorICogbmVlZCBhIHBlcnNpc3RlZCBldmVudCBzaG91bGQgaW52b2tl
IGBwZXJzaXN0YC4KKyAqCisgKiBTeW50aGV0aWMgZXZlbnRzIChhbmQgc3ViY2xhc3NlcykgaW1w
bGVtZW50IHRoZSBET00gTGV2ZWwgMyBFdmVudHMgQVBJIGJ5CisgKiBub3JtYWxpemluZyBicm93
c2VyIHF1aXJrcy4gU3ViY2xhc3NlcyBkbyBub3QgbmVjZXNzYXJpbHkgaGF2ZSB0byBpbXBsZW1l
bnQgYQorICogRE9NIGludGVyZmFjZTsgY3VzdG9tIGFwcGxpY2F0aW9uLXNwZWNpZmljIGV2ZW50
cyBjYW4gYWxzbyBzdWJjbGFzcyB0aGlzLgorICoKKyAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRj
aENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC4KKyAqIEBw
YXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50
IHRhcmdldC4KKyAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBl
dmVudC4KKyAqLworZnVuY3Rpb24gU3ludGhldGljRXZlbnQoZGlzcGF0Y2hDb25maWcsIGRpc3Bh
dGNoTWFya2VyLCBuYXRpdmVFdmVudCkgeworICB0aGlzLmRpc3BhdGNoQ29uZmlnID0gZGlzcGF0
Y2hDb25maWc7CisgIHRoaXMuZGlzcGF0Y2hNYXJrZXIgPSBkaXNwYXRjaE1hcmtlcjsKKyAgdGhp
cy5uYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50OworCisgIHZhciBJbnRlcmZhY2UgPSB0aGlzLmNv
bnN0cnVjdG9yLkludGVyZmFjZTsKKyAgZm9yICh2YXIgcHJvcE5hbWUgaW4gSW50ZXJmYWNlKSB7
CisgICAgdmFyIG5vcm1hbGl6ZSA9IEludGVyZmFjZVtwcm9wTmFtZV07CisgICAgaWYgKG5vcm1h
bGl6ZSkgeworICAgICAgdGhpc1twcm9wTmFtZV0gPSBub3JtYWxpemUobmF0aXZlRXZlbnQpOwor
ICAgIH0gZWxzZSB7CisgICAgICB0aGlzW3Byb3BOYW1lXSA9IG5hdGl2ZUV2ZW50W3Byb3BOYW1l
XTsKKyAgICB9CisgIH0KKworICBpZiAobmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCBu
YXRpdmVFdmVudC5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UpIHsKKyAgICB0aGlzLmlzRGVmYXVsdFBy
ZXZlbnRlZCA9IGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUcnVlOworICB9IGVsc2UgeworICAg
IHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0ZhbHNl
OworICB9CisgIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBlbXB0eUZ1bmN0aW9uLnRoYXRS
ZXR1cm5zRmFsc2U7Cit9CisKK21lcmdlSW50byhTeW50aGV0aWNFdmVudC5wcm90b3R5cGUsIHsK
KworICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7CisgICAgdGhpcy5kZWZhdWx0UHJldmVu
dGVkID0gdHJ1ZTsKKyAgICB2YXIgZXZlbnQgPSB0aGlzLm5hdGl2ZUV2ZW50OworICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0ID8gZXZlbnQucHJldmVudERlZmF1bHQoKSA6IGV2ZW50LnJldHVyblZh
bHVlID0gZmFsc2U7CisgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBlbXB0eUZ1bmN0aW9u
LnRoYXRSZXR1cm5zVHJ1ZTsKKyAgfSwKKworICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkg
eworICAgIHZhciBldmVudCA9IHRoaXMubmF0aXZlRXZlbnQ7CisgICAgZXZlbnQuc3RvcFByb3Bh
Z2F0aW9uID8gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkgOiBldmVudC5jYW5jZWxCdWJibGUgPSB0
cnVlOworICAgIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBlbXB0eUZ1bmN0aW9uLnRoYXRS
ZXR1cm5zVHJ1ZTsKKyAgfSwKKworICAvKioKKyAgICogV2UgcmVsZWFzZSBhbGwgZGlzcGF0Y2hl
ZCBgU3ludGhldGljRXZlbnRgcyBhZnRlciBlYWNoIGV2ZW50IGxvb3AsIGFkZGluZworICAgKiB0
aGVtIGJhY2sgaW50byB0aGUgcG9vbC4gVGhpcyBhbGxvd3MgYSB3YXkgdG8gaG9sZCBvbnRvIGEg
cmVmZXJlbmNlIHRoYXQKKyAgICogd29uJ3QgYmUgYWRkZWQgYmFjayBpbnRvIHRoZSBwb29sLgor
ICAgKi8KKyAgcGVyc2lzdDogZnVuY3Rpb24oKSB7CisgICAgdGhpcy5pc1BlcnNpc3RlbnQgPSBl
bXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVHJ1ZTsKKyAgfSwKKworICAvKioKKyAgICogQ2hlY2tz
IGlmIHRoaXMgZXZlbnQgc2hvdWxkIGJlIHJlbGVhc2VkIGJhY2sgaW50byB0aGUgcG9vbC4KKyAg
ICoKKyAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGlzIHNob3VsZCBub3QgYmUgcmVs
ZWFzZWQsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIGlzUGVyc2lzdGVudDogZW1wdHlGdW5j
dGlvbi50aGF0UmV0dXJuc0ZhbHNlLAorCisgIC8qKgorICAgKiBgUG9vbGVkQ2xhc3NgIGxvb2tz
IGZvciBgZGVzdHJ1Y3RvcmAgb24gZWFjaCBpbnN0YW5jZSBpdCByZWxlYXNlcy4KKyAgICovCisg
IGRlc3RydWN0b3I6IGZ1bmN0aW9uKCkgeworICAgIHZhciBJbnRlcmZhY2UgPSB0aGlzLmNvbnN0
cnVjdG9yLkludGVyZmFjZTsKKyAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBJbnRlcmZhY2UpIHsK
KyAgICAgIHRoaXNbcHJvcE5hbWVdID0gbnVsbDsKKyAgICB9CisgICAgdGhpcy5kaXNwYXRjaENv
bmZpZyA9IG51bGw7CisgICAgdGhpcy5kaXNwYXRjaE1hcmtlciA9IG51bGw7CisgICAgdGhpcy5u
YXRpdmVFdmVudCA9IG51bGw7CisgIH0KKworfSk7CisKK1N5bnRoZXRpY0V2ZW50LkludGVyZmFj
ZSA9IEV2ZW50SW50ZXJmYWNlOworCisvKioKKyAqIEhlbHBlciB0byByZWR1Y2UgYm9pbGVycGxh
dGUgd2hlbiBjcmVhdGluZyBzdWJjbGFzc2VzLgorICoKKyAqIEBwYXJhbSB7ZnVuY3Rpb259IENs
YXNzCisgKiBAcGFyYW0gez9vYmplY3R9IEludGVyZmFjZQorICovCitTeW50aGV0aWNFdmVudC5h
dWdtZW50Q2xhc3MgPSBmdW5jdGlvbihDbGFzcywgSW50ZXJmYWNlKSB7CisgIHZhciBTdXBlciA9
IHRoaXM7CisKKyAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3VwZXIucHJvdG90eXBl
KTsKKyAgbWVyZ2VJbnRvKHByb3RvdHlwZSwgQ2xhc3MucHJvdG90eXBlKTsKKyAgQ2xhc3MucHJv
dG90eXBlID0gcHJvdG90eXBlOworICBDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDbGFz
czsKKworICBDbGFzcy5JbnRlcmZhY2UgPSBtZXJnZShTdXBlci5JbnRlcmZhY2UsIEludGVyZmFj
ZSk7CisgIENsYXNzLmF1Z21lbnRDbGFzcyA9IFN1cGVyLmF1Z21lbnRDbGFzczsKKworICBQb29s
ZWRDbGFzcy5hZGRQb29saW5nVG8oQ2xhc3MsIFBvb2xlZENsYXNzLnRocmVlQXJndW1lbnRQb29s
ZXIpOworfTsKKworUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKFN5bnRoZXRpY0V2ZW50LCBQb29s
ZWRDbGFzcy50aHJlZUFyZ3VtZW50UG9vbGVyKTsKKworbW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0
aWNFdmVudDsKKworfSx7Ii4vUG9vbGVkQ2xhc3MiOjIwLCIuL2VtcHR5RnVuY3Rpb24iOjY0LCIu
L2dldEV2ZW50VGFyZ2V0Ijo3MCwiLi9tZXJnZSI6ODEsIi4vbWVyZ2VJbnRvIjo4M31dLDUxOltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMg
RmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2Us
IFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZp
bGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0
YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9y
Zy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNh
YmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisg
KiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4
cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxh
bmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRo
ZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBTeW50aGV0aWNGb2N1c0V2ZW50Cisg
KiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seQorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIFN5
bnRoZXRpY1VJRXZlbnQgPSByZXF1aXJlKCIuL1N5bnRoZXRpY1VJRXZlbnQiKTsKKworLyoqCisg
KiBAaW50ZXJmYWNlIEZvY3VzRXZlbnQKKyAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9N
LUxldmVsLTMtRXZlbnRzLworICovCit2YXIgRm9jdXNFdmVudEludGVyZmFjZSA9IHsKKyAgcmVs
YXRlZFRhcmdldDogbnVsbAorfTsKKworLyoqCisgKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hD
b25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuCisgKiBAcGFy
YW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0
YXJnZXQuCisgKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZl
bnQuCisgKiBAZXh0ZW5kcyB7U3ludGhldGljVUlFdmVudH0KKyAqLworZnVuY3Rpb24gU3ludGhl
dGljRm9jdXNFdmVudChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50
KSB7CisgIFN5bnRoZXRpY1VJRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0
Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KTsKK30KKworU3ludGhldGljVUlFdmVudC5hdWdtZW50Q2xh
c3MoU3ludGhldGljRm9jdXNFdmVudCwgRm9jdXNFdmVudEludGVyZmFjZSk7CisKK21vZHVsZS5l
eHBvcnRzID0gU3ludGhldGljRm9jdXNFdmVudDsKKworfSx7Ii4vU3ludGhldGljVUlFdmVudCI6
NTZ9XSw1MjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHly
aWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNo
ZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1
c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZ
b3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3
LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQg
YnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBk
aXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMi
IEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQs
IGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBz
cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9u
cyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUgU3ludGhldGljS2V5
Ym9hcmRFdmVudAorICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHkKKyAqLworCisidXNlIHN0cmlj
dCI7CisKK3ZhciBTeW50aGV0aWNVSUV2ZW50ID0gcmVxdWlyZSgiLi9TeW50aGV0aWNVSUV2ZW50
Iik7CisKKy8qKgorICogQGludGVyZmFjZSBLZXlib2FyZEV2ZW50CisgKiBAc2VlIGh0dHA6Ly93
d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8KKyAqLwordmFyIEtleWJvYXJkRXZlbnRJ
bnRlcmZhY2UgPSB7CisgICdjaGFyJzogbnVsbCwKKyAga2V5OiBudWxsLAorICBsb2NhdGlvbjog
bnVsbCwKKyAgY3RybEtleTogbnVsbCwKKyAgc2hpZnRLZXk6IG51bGwsCisgIGFsdEtleTogbnVs
bCwKKyAgbWV0YUtleTogbnVsbCwKKyAgcmVwZWF0OiBudWxsLAorICBsb2NhbGU6IG51bGwsCisg
IC8vIExlZ2FjeSBJbnRlcmZhY2UKKyAgY2hhckNvZGU6IG51bGwsCisgIGtleUNvZGU6IG51bGws
CisgIHdoaWNoOiBudWxsCit9OworCisvKioKKyAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENv
bmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC4KKyAqIEBwYXJh
bSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRh
cmdldC4KKyAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVu
dC4KKyAqIEBleHRlbmRzIHtTeW50aGV0aWNVSUV2ZW50fQorICovCitmdW5jdGlvbiBTeW50aGV0
aWNLZXlib2FyZEV2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZl
bnQpIHsKKyAgU3ludGhldGljVUlFdmVudC5jYWxsKHRoaXMsIGRpc3BhdGNoQ29uZmlnLCBkaXNw
YXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpOworfQorCitTeW50aGV0aWNVSUV2ZW50LmF1Z21lbnRD
bGFzcyhTeW50aGV0aWNLZXlib2FyZEV2ZW50LCBLZXlib2FyZEV2ZW50SW50ZXJmYWNlKTsKKwor
bW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNLZXlib2FyZEV2ZW50OworCit9LHsiLi9TeW50aGV0
aWNVSUV2ZW50Ijo1Nn1dLDUzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8q
KgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRl
ciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlv
dSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGlj
ZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAq
IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVz
cyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29m
dHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9u
IGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP
RiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5z
ZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAq
IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBT
eW50aGV0aWNNb3VzZUV2ZW50CisgKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seQorICovCisKKyJ1
c2Ugc3RyaWN0IjsKKwordmFyIFN5bnRoZXRpY1VJRXZlbnQgPSByZXF1aXJlKCIuL1N5bnRoZXRp
Y1VJRXZlbnQiKTsKK3ZhciBWaWV3cG9ydE1ldHJpY3MgPSByZXF1aXJlKCIuL1ZpZXdwb3J0TWV0
cmljcyIpOworCisvKioKKyAqIEBpbnRlcmZhY2UgTW91c2VFdmVudAorICogQHNlZSBodHRwOi8v
d3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvCisgKi8KK3ZhciBNb3VzZUV2ZW50SW50
ZXJmYWNlID0geworICBzY3JlZW5YOiBudWxsLAorICBzY3JlZW5ZOiBudWxsLAorICBjbGllbnRY
OiBudWxsLAorICBjbGllbnRZOiBudWxsLAorICBjdHJsS2V5OiBudWxsLAorICBzaGlmdEtleTog
bnVsbCwKKyAgYWx0S2V5OiBudWxsLAorICBtZXRhS2V5OiBudWxsLAorICBidXR0b246IGZ1bmN0
aW9uKGV2ZW50KSB7CisgICAgLy8gV2Via2l0LCBGaXJlZm94LCBJRTkrCisgICAgLy8gd2hpY2g6
ICAxIDIgMworICAgIC8vIGJ1dHRvbjogMCAxIDIgKHN0YW5kYXJkKQorICAgIHZhciBidXR0b24g
PSBldmVudC5idXR0b247CisgICAgaWYgKCd3aGljaCcgaW4gZXZlbnQpIHsKKyAgICAgIHJldHVy
biBidXR0b247CisgICAgfQorICAgIC8vIElFPDkKKyAgICAvLyB3aGljaDogIHVuZGVmaW5lZAor
ICAgIC8vIGJ1dHRvbjogMCAwIDAKKyAgICAvLyBidXR0b246IDEgNCAyIChvbm1vdXNldXApCisg
ICAgcmV0dXJuIGJ1dHRvbiA9PT0gMiA/IDIgOiBidXR0b24gPT09IDQgPyAxIDogMDsKKyAgfSwK
KyAgYnV0dG9uczogbnVsbCwKKyAgcmVsYXRlZFRhcmdldDogZnVuY3Rpb24oZXZlbnQpIHsKKyAg
ICByZXR1cm4gZXZlbnQucmVsYXRlZFRhcmdldCB8fCAoCisgICAgICBldmVudC5mcm9tRWxlbWVu
dCA9PT0gZXZlbnQuc3JjRWxlbWVudCA/CisgICAgICAgIGV2ZW50LnRvRWxlbWVudCA6CisgICAg
ICAgIGV2ZW50LmZyb21FbGVtZW50CisgICAgKTsKKyAgfSwKKyAgLy8gIlByb3ByaWV0YXJ5IiBJ
bnRlcmZhY2UuCisgIHBhZ2VYOiBmdW5jdGlvbihldmVudCkgeworICAgIHJldHVybiAncGFnZVgn
IGluIGV2ZW50ID8KKyAgICAgIGV2ZW50LnBhZ2VYIDoKKyAgICAgIGV2ZW50LmNsaWVudFggKyBW
aWV3cG9ydE1ldHJpY3MuY3VycmVudFNjcm9sbExlZnQ7CisgIH0sCisgIHBhZ2VZOiBmdW5jdGlv
bihldmVudCkgeworICAgIHJldHVybiAncGFnZVknIGluIGV2ZW50ID8KKyAgICAgIGV2ZW50LnBh
Z2VZIDoKKyAgICAgIGV2ZW50LmNsaWVudFkgKyBWaWV3cG9ydE1ldHJpY3MuY3VycmVudFNjcm9s
bFRvcDsKKyAgfQorfTsKKworLyoqCisgKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcg
Q29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuCisgKiBAcGFyYW0ge3N0
cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQu
CisgKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuCisg
KiBAZXh0ZW5kcyB7U3ludGhldGljVUlFdmVudH0KKyAqLworZnVuY3Rpb24gU3ludGhldGljTW91
c2VFdmVudChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KSB7Cisg
IFN5bnRoZXRpY1VJRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJr
ZXIsIG5hdGl2ZUV2ZW50KTsKK30KKworU3ludGhldGljVUlFdmVudC5hdWdtZW50Q2xhc3MoU3lu
dGhldGljTW91c2VFdmVudCwgTW91c2VFdmVudEludGVyZmFjZSk7CisKK21vZHVsZS5leHBvcnRz
ID0gU3ludGhldGljTW91c2VFdmVudDsKKworfSx7Ii4vU3ludGhldGljVUlFdmVudCI6NTYsIi4v
Vmlld3BvcnRNZXRyaWNzIjo1OX1dLDU0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRz
KXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNl
ZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsK
KyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0
aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAor
ICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAq
IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGlu
Zywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1
dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUg
TGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBh
bmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01v
ZHVsZSBTeW50aGV0aWNNdXRhdGlvbkV2ZW50CisgKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seQor
ICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIFN5bnRoZXRpY0V2ZW50ID0gcmVxdWlyZSgiLi9T
eW50aGV0aWNFdmVudCIpOworCisvKioKKyAqIEBpbnRlcmZhY2UgTXV0YXRpb25FdmVudAorICog
QHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvCisgKi8KK3ZhciBN
dXRhdGlvbkV2ZW50SW50ZXJmYWNlID0geworICByZWxhdGVkTm9kZTogbnVsbCwKKyAgcHJldlZh
bHVlOiBudWxsLAorICBuZXdWYWx1ZTogbnVsbCwKKyAgYXR0ck5hbWU6IG51bGwsCisgIGF0dHJD
aGFuZ2U6IG51bGwKK307CisKKy8qKgorICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmln
IENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LgorICogQHBhcmFtIHtz
dHJpbmd9IGRpc3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0
LgorICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50Lgor
ICogQGV4dGVuZHMge1N5bnRoZXRpY0V2ZW50fQorICovCitmdW5jdGlvbiBTeW50aGV0aWNNdXRh
dGlvbkV2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpIHsK
KyAgU3ludGhldGljRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJr
ZXIsIG5hdGl2ZUV2ZW50KTsKK30KKworU3ludGhldGljRXZlbnQuYXVnbWVudENsYXNzKFN5bnRo
ZXRpY011dGF0aW9uRXZlbnQsIE11dGF0aW9uRXZlbnRJbnRlcmZhY2UpOworCittb2R1bGUuZXhw
b3J0cyA9IFN5bnRoZXRpY011dGF0aW9uRXZlbnQ7CisKK30seyIuL1N5bnRoZXRpY0V2ZW50Ijo1
MH1dLDU1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJp
Z2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hl
IExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVz
ZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlv
dSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cu
YXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBi
eSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIg
QkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwg
ZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNw
ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25z
IHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBTeW50aGV0aWNUb3Vj
aEV2ZW50CisgKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seQorICovCisKKyJ1c2Ugc3RyaWN0IjsK
KwordmFyIFN5bnRoZXRpY1VJRXZlbnQgPSByZXF1aXJlKCIuL1N5bnRoZXRpY1VJRXZlbnQiKTsK
KworLyoqCisgKiBAaW50ZXJmYWNlIFRvdWNoRXZlbnQKKyAqIEBzZWUgaHR0cDovL3d3dy53My5v
cmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLworICovCit2YXIgVG91Y2hFdmVudEludGVyZmFjZSA9
IHsKKyAgdG91Y2hlczogbnVsbCwKKyAgdGFyZ2V0VG91Y2hlczogbnVsbCwKKyAgY2hhbmdlZFRv
dWNoZXM6IG51bGwsCisgIGFsdEtleTogbnVsbCwKKyAgbWV0YUtleTogbnVsbCwKKyAgY3RybEtl
eTogbnVsbCwKKyAgc2hpZnRLZXk6IG51bGwKK307CisKKy8qKgorICogQHBhcmFtIHtvYmplY3R9
IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50
LgorICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlmeWluZyB0
aGUgZXZlbnQgdGFyZ2V0LgorICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBi
cm93c2VyIGV2ZW50LgorICogQGV4dGVuZHMge1N5bnRoZXRpY1VJRXZlbnR9CisgKi8KK2Z1bmN0
aW9uIFN5bnRoZXRpY1RvdWNoRXZlbnQoZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBu
YXRpdmVFdmVudCkgeworICBTeW50aGV0aWNVSUV2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25m
aWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCk7Cit9CisKK1N5bnRoZXRpY1VJRXZlbnQu
YXVnbWVudENsYXNzKFN5bnRoZXRpY1RvdWNoRXZlbnQsIFRvdWNoRXZlbnRJbnRlcmZhY2UpOwor
Cittb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY1RvdWNoRXZlbnQ7CisKK30seyIuL1N5bnRoZXRp
Y1VJRXZlbnQiOjU2fV0sNTY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoq
CisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVy
IHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91
IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNl
bnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICog
aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNz
IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0
d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g
YW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNl
IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICog
bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxlIFN5
bnRoZXRpY1VJRXZlbnQKKyAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5CisgKi8KKworInVzZSBz
dHJpY3QiOworCit2YXIgU3ludGhldGljRXZlbnQgPSByZXF1aXJlKCIuL1N5bnRoZXRpY0V2ZW50
Iik7CisKKy8qKgorICogQGludGVyZmFjZSBVSUV2ZW50CisgKiBAc2VlIGh0dHA6Ly93d3cudzMu
b3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8KKyAqLwordmFyIFVJRXZlbnRJbnRlcmZhY2UgPSB7
CisgIHZpZXc6IG51bGwsCisgIGRldGFpbDogbnVsbAorfTsKKworLyoqCisgKiBAcGFyYW0ge29i
amVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMg
ZXZlbnQuCisgKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5
aW5nIHRoZSBldmVudCB0YXJnZXQuCisgKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0
aXZlIGJyb3dzZXIgZXZlbnQuCisgKiBAZXh0ZW5kcyB7U3ludGhldGljRXZlbnR9CisgKi8KK2Z1
bmN0aW9uIFN5bnRoZXRpY1VJRXZlbnQoZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBu
YXRpdmVFdmVudCkgeworICBTeW50aGV0aWNFdmVudC5jYWxsKHRoaXMsIGRpc3BhdGNoQ29uZmln
LCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpOworfQorCitTeW50aGV0aWNFdmVudC5hdWdt
ZW50Q2xhc3MoU3ludGhldGljVUlFdmVudCwgVUlFdmVudEludGVyZmFjZSk7CisKK21vZHVsZS5l
eHBvcnRzID0gU3ludGhldGljVUlFdmVudDsKKworfSx7Ii4vU3ludGhldGljRXZlbnQiOjUwfV0s
NTc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQg
MjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGlj
ZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRo
aXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1h
eSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFj
aGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFw
cGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJp
YnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJ
UywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRo
ZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lm
aWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5k
ZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxlIFN5bnRoZXRpY1doZWVsRXZl
bnQKKyAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5CisgKi8KKworInVzZSBzdHJpY3QiOworCit2
YXIgU3ludGhldGljTW91c2VFdmVudCA9IHJlcXVpcmUoIi4vU3ludGhldGljTW91c2VFdmVudCIp
OworCisvKioKKyAqIEBpbnRlcmZhY2UgV2hlZWxFdmVudAorICogQHNlZSBodHRwOi8vd3d3Lncz
Lm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvCisgKi8KK3ZhciBXaGVlbEV2ZW50SW50ZXJmYWNl
ID0geworICBkZWx0YVg6IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgLy8gTk9URTogSUU8OSBkb2Vz
IG5vdCBzdXBwb3J0IHgtYXhpcyBkZWx0YS4KKyAgICByZXR1cm4gKAorICAgICAgJ2RlbHRhWCcg
aW4gZXZlbnQgPyBldmVudC5kZWx0YVggOgorICAgICAgLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVs
dGFYYCBmb3IgV2Via2l0IGFuZCBub3JtYWxpemUgKHJpZ2h0IGlzIHBvc2l0aXZlKS4KKyAgICAg
ICd3aGVlbERlbHRhWCcgaW4gZXZlbnQgPyAtZXZlbnQud2hlZWxEZWx0YVggOiAwCisgICAgKTsK
KyAgfSwKKyAgZGVsdGFZOiBmdW5jdGlvbihldmVudCkgeworICAgIHJldHVybiAoCisgICAgICAv
LyBOb3JtYWxpemUgKHVwIGlzIHBvc2l0aXZlKS4KKyAgICAgICdkZWx0YVknIGluIGV2ZW50ID8g
LWV2ZW50LmRlbHRhWSA6CisgICAgICAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YVlgIGZvciBX
ZWJraXQuCisgICAgICAnd2hlZWxEZWx0YVknIGluIGV2ZW50ID8gZXZlbnQud2hlZWxEZWx0YVkg
OgorICAgICAgLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFgIGZvciBJRTw5LgorICAgICAgJ3do
ZWVsRGVsdGEnIGluIGV2ZW50ID8gZXZlbnQud2hlZWxEYXRhIDogMAorICAgICk7CisgIH0sCisg
IGRlbHRhWjogbnVsbCwKKyAgZGVsdGFNb2RlOiBudWxsCit9OworCisvKioKKyAqIEBwYXJhbSB7
b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhp
cyBldmVudC4KKyAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRp
ZnlpbmcgdGhlIGV2ZW50IHRhcmdldC4KKyAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBO
YXRpdmUgYnJvd3NlciBldmVudC4KKyAqIEBleHRlbmRzIHtTeW50aGV0aWNNb3VzZUV2ZW50fQor
ICovCitmdW5jdGlvbiBTeW50aGV0aWNXaGVlbEV2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRj
aE1hcmtlciwgbmF0aXZlRXZlbnQpIHsKKyAgU3ludGhldGljTW91c2VFdmVudC5jYWxsKHRoaXMs
IGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpOworfQorCitTeW50
aGV0aWNNb3VzZUV2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNXaGVlbEV2ZW50LCBXaGVlbEV2
ZW50SW50ZXJmYWNlKTsKKworbW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNXaGVlbEV2ZW50Owor
Cit9LHsiLi9TeW50aGV0aWNNb3VzZUV2ZW50Ijo1M31dLDU4OltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKKyhmdW5jdGlvbigpey8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJv
b2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNp
b24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhj
ZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEg
Y29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNl
bnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxh
dyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRI
T1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mg
b3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdl
IGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNl
bnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBUcmFuc2FjdGlvbgorICovCisKKyJ1c2Ugc3Ry
aWN0IjsKKwordmFyIHRocm93SWYgPSByZXF1aXJlKCIuL3Rocm93SWYiKTsKKwordmFyIERVQUxf
VFJBTlNBQ1RJT04gPSAnRFVBTF9UUkFOU0FDVElPTic7Cit2YXIgTUlTU0lOR19UUkFOU0FDVElP
TiA9ICdNSVNTSU5HX1RSQU5TQUNUSU9OJzsKK2lmICh0cnVlKSB7CisgIERVQUxfVFJBTlNBQ1RJ
T04gPQorICAgICdDYW5ub3QgaW5pdGlhbGl6ZSB0cmFuc2FjdGlvbiB3aGVuIHRoZXJlIGlzIGFs
cmVhZHkgYW4gb3V0c3RhbmRpbmcgJyArCisgICAgJ3RyYW5zYWN0aW9uLiBDb21tb24gY2F1c2Vz
IG9mIHRoaXMgYXJlIHRyeWluZyB0byByZW5kZXIgYSBjb21wb25lbnQgJyArCisgICAgJ3doZW4g
eW91IGFyZSBhbHJlYWR5IHJlbmRlcmluZyBhIGNvbXBvbmVudCBvciBhdHRlbXB0aW5nIGEgc3Rh
dGUgJyArCisgICAgJ3RyYW5zaXRpb24gd2hpbGUgaW4gYSByZW5kZXIgZnVuY3Rpb24uIEFub3Ro
ZXIgcG9zc2liaWxpdHkgaXMgdGhhdCAnICsKKyAgICAneW91IGFyZSByZW5kZXJpbmcgbmV3IGNv
bnRlbnQgKG9yIHN0YXRlIHRyYW5zaXRpb25pbmcpIGluIGEgJyArCisgICAgJ2NvbXBvbmVudERp
ZFJlbmRlciBjYWxsYmFjay4gSWYgdGhpcyBpcyBub3QgdGhlIGNhc2UsIHBsZWFzZSByZXBvcnQg
dGhlICcgKworICAgICdpc3N1ZSBpbW1lZGlhdGVseS4nOworCisgIE1JU1NJTkdfVFJBTlNBQ1RJ
T04gPQorICAgICdDYW5ub3QgY2xvc2UgdHJhbnNhY3Rpb24gd2hlbiB0aGVyZSBpcyBub25lIG9w
ZW4uJzsKK30KKworLyoqCisgKiBgVHJhbnNhY3Rpb25gIGNyZWF0ZXMgYSBibGFjayBib3ggdGhh
dCBpcyBhYmxlIHRvIHdyYXAgYW55IG1ldGhvZCBzdWNoIHRoYXQKKyAqIGNlcnRhaW4gaW52YXJp
YW50cyBhcmUgbWFpbnRhaW5lZCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBtZXRob2QgaXMgaW52b2tl
ZAorICogKEV2ZW4gaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biB3aGlsZSBpbnZva2luZyB0aGUg
d3JhcHBlZCBtZXRob2QpLiBXaG9ldmVyCisgKiBpbnN0YW50aWF0ZXMgYSB0cmFuc2FjdGlvbiBj
YW4gcHJvdmlkZSBlbmZvcmNlcnMgb2YgdGhlIGludmFyaWFudHMgYXQKKyAqIGNyZWF0aW9uIHRp
bWUuIFRoZSBgVHJhbnNhY3Rpb25gIGNsYXNzIGl0c2VsZiB3aWxsIHN1cHBseSBvbmUgYWRkaXRp
b25hbAorICogYXV0b21hdGljIGludmFyaWFudCBmb3IgeW91IC0gdGhlIGludmFyaWFudCB0aGF0
IGFueSB0cmFuc2FjdGlvbiBpbnN0YW5jZQorICogc2hvdWxkIG5vdCBiZSByYW4gd2hpbGUgaXQg
aXMgYWxyZWFkeSBiZWluZyByYW4uIFlvdSB3b3VsZCB0eXBpY2FsbHkgY3JlYXRlIGEKKyAqIHNp
bmdsZSBpbnN0YW5jZSBvZiBhIGBUcmFuc2FjdGlvbmAgZm9yIHJldXNlIG11bHRpcGxlIHRpbWVz
LCB0aGF0IHBvdGVudGlhbGx5CisgKiBpcyB1c2VkIHRvIHdyYXAgc2V2ZXJhbCBkaWZmZXJlbnQg
bWV0aG9kcy4gV3JhcHBlcnMgYXJlIGV4dHJlbWVseSBzaW1wbGUgLQorICogdGhleSBvbmx5IHJl
cXVpcmUgaW1wbGVtZW50aW5nIHR3byBtZXRob2RzLgorICoKKyAqIDxwcmU+CisgKiAgICAgICAg
ICAgICAgICAgICAgICAgd3JhcHBlcnMgKGluamVjdGVkIGF0IGNyZWF0aW9uIHRpbWUpCisgKiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAgICAgICAgKworICogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgIHwKKyAqICAgICAgICAgICAg
ICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS18LS0tLS0tLS0tLS0tLS0rCisgKiAg
ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgdiAgICAgICAgfCAgICAgICAgICAg
ICAgfAorICogICAgICAgICAgICAgICAgICAgIHwgICAgICArLS0tLS0tLS0tLS0tLS0tKyAgIHwg
ICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICB8ICAgKy0tfCAgICB3cmFwcGVy
MSAgIHwtLS18LS0tLSsgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgfCAgIHwgICst
LS0tLS0tLS0tLS0tLS0rICAgdiAgICB8ICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAg
IHwgICB8ICAgICAgICAgICstLS0tLS0tLS0tLS0tKyAgfCAgICAgICAgIHwKKyAqICAgICAgICAg
ICAgICAgICAgICB8ICAgfCAgICAgKy0tLS18ICAgd3JhcHBlcjIgIHwtLS0tLS0tLSsgICB8Cisg
KiAgICAgICAgICAgICAgICAgICAgfCAgIHwgICAgIHwgICAgKy0tLS0tLS0tLS0tLS0rICB8ICAg
ICB8ICAgfAorICogICAgICAgICAgICAgICAgICAgIHwgICB8ICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgfCAgICAgfCAgIHwKKyAqICAgICAgICAgICAgICAgICAgICB8ICAgdiAgICAgdiAgICAg
ICAgICAgICAgICAgICAgIHYgICAgIHYgICB8IHdyYXBwZXIKKyAqICAgICAgICAgICAgICAgICAg
ICB8ICstLS0rICstLS0rICAgKy0tLS0tLS0tLSsgICArLS0tKyArLS0tKyB8IGludmFyaWFudHMK
KyAqIHBlcmZvcm0oYW55TWV0aG9kKSB8IHwgICB8IHwgICB8ICAgfCAgICAgICAgIHwgICB8ICAg
fCB8ICAgfCB8IG1haW50YWluZWQKKyAqICstLS0tLS0tLS0tLS0tLS0tLT58LXwtLS18LXwtLS18
LS0+fGFueU1ldGhvZHwtLS18LS0tfC18LS0tfC18LS0tLS0tLS0+CisgKiAgICAgICAgICAgICAg
ICAgICAgfCB8ICAgfCB8ICAgfCAgIHwgICAgICAgICB8ICAgfCAgIHwgfCAgIHwgfAorICogICAg
ICAgICAgICAgICAgICAgIHwgfCAgIHwgfCAgIHwgICB8ICAgICAgICAgfCAgIHwgICB8IHwgICB8
IHwKKyAqICAgICAgICAgICAgICAgICAgICB8IHwgICB8IHwgICB8ICAgfCAgICAgICAgIHwgICB8
ICAgfCB8ICAgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgfCArLS0tKyArLS0tKyAgICstLS0t
LS0tLS0rICAgKy0tLSsgKy0tLSsgfAorICogICAgICAgICAgICAgICAgICAgIHwgIGluaXRpYWxp
emUgICAgICAgICAgICAgICAgICAgIGNsb3NlICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAr
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiA8L3ByZT4KKyAq
CisgKiBCb251czoKKyAqIC0gUmVwb3J0cyB0aW1pbmcgbWV0cmljcyBieSBtZXRob2QgbmFtZSBh
bmQgd3JhcHBlciBpbmRleC4KKyAqCisgKiBVc2UgY2FzZXM6CisgKiAtIFByZXNlcnZpbmcgdGhl
IGlucHV0IHNlbGVjdGlvbiByYW5nZXMgYmVmb3JlL2FmdGVyIHJlY29uY2lsaWF0aW9uLgorICog
ICBSZXN0b3Jpbmcgc2VsZWN0aW9uIGV2ZW4gaW4gdGhlIGV2ZW50IG9mIGFuIHVuZXhwZWN0ZWQg
ZXJyb3IuCisgKiAtIERlYWN0aXZhdGluZyBldmVudHMgd2hpbGUgcmVhcnJhbmdpbmcgdGhlIERP
TSwgcHJldmVudGluZyBibHVycy9mb2N1c2VzLAorICogICB3aGlsZSBndWFyYW50ZWVpbmcgdGhh
dCBhZnRlcndhcmRzLCB0aGUgZXZlbnQgc3lzdGVtIGlzIHJlYWN0aXZhdGVkLgorICogLSBGbHVz
aGluZyBhIHF1ZXVlIG9mIGNvbGxlY3RlZCBET00gbXV0YXRpb25zIHRvIHRoZSBtYWluIFVJIHRo
cmVhZCBhZnRlciBhCisgKiAgIHJlY29uY2lsaWF0aW9uIHRha2VzIHBsYWNlIGluIGEgd29ya2Vy
IHRocmVhZC4KKyAqIC0gSW52b2tpbmcgYW55IGNvbGxlY3RlZCBgY29tcG9uZW50RGlkUmVuZGVy
YCBjYWxsYmFja3MgYWZ0ZXIgcmVuZGVyaW5nIG5ldworICogICBjb250ZW50LgorICogLSAoRnV0
dXJlIHVzZSBjYXNlKTogV3JhcHBpbmcgcGFydGljdWxhciBmbHVzaGVzIG9mIHRoZSBgUmVhY3RX
b3JrZXJgIHF1ZXVlCisgKiAgIHRvIHByZXNlcnZlIHRoZSBgc2Nyb2xsVG9wYCAoYW4gYXV0b21h
dGljIHNjcm9sbCBhd2FyZSBET00pLgorICogLSAoRnV0dXJlIHVzZSBjYXNlKTogTGF5b3V0IGNh
bGN1bGF0aW9ucyBiZWZvcmUgYW5kIGFmdGVyIERPTSB1cGF0ZXMuCisgKgorICogVHJhbnNhY3Rp
b25hbCBwbHVnaW4gQVBJOgorICogLSBBIG1vZHVsZSB0aGF0IGhhcyBhbiBgaW5pdGlhbGl6ZWAg
bWV0aG9kIHRoYXQgcmV0dXJucyBhbnkgcHJlY29tcHV0YXRpb24uCisgKiAtIGFuZCBhIGBjbG9z
ZWAgbWV0aG9kIHRoYXQgYWNjZXB0cyB0aGUgcHJlY29tcHV0YXRpb24uIGBjbG9zZWAgaXMgaW52
b2tlZAorICogICB3aGVuIHRoZSB3cmFwcGVkIHByb2Nlc3MgaXMgY29tcGxldGVkLCBvciBoYXMg
ZmFpbGVkLgorICoKKyAqIEBwYXJhbSB7QXJyYXk8VHJhbnNhY3Rpb25hbFdyYXBwZXI+fSB0cmFu
c2FjdGlvbldyYXBwZXIgV3JhcHBlciBtb2R1bGVzCisgKiB0aGF0IGltcGxlbWVudCBgaW5pdGlh
bGl6ZWAgYW5kIGBjbG9zZWAuCisgKiBAcmV0dXJuIHtUcmFuc2FjdGlvbn0gU2luZ2xlIHRyYW5z
YWN0aW9uIGZvciByZXVzZSBpbiB0aHJlYWQuCisgKgorICogQGNsYXNzIFRyYW5zYWN0aW9uCisg
Ki8KK3ZhciBNaXhpbiA9IHsKKyAgLyoqCisgICAqIFNldHMgdXAgdGhpcyBpbnN0YW5jZSBzbyB0
aGF0IGl0IGlzIHByZXBhcmVkIGZvciBjb2xsZWN0aW5nIG1ldHJpY3MuIERvZXMKKyAgICogc28g
c3VjaCB0aGF0IHRoaXMgc2V0dXAgbWV0aG9kIG1heSBiZSB1c2VkIG9uIGFuIGluc3RhbmNlIHRo
YXQgaXMgYWxyZWFkeQorICAgKiBpbml0aWFsaXplZCwgaW4gYSB3YXkgdGhhdCBkb2VzIG5vdCBj
b25zdW1lIGFkZGl0aW9uYWwgbWVtb3J5IHVwb24gcmV1c2UuCisgICAqIFRoYXQgY2FuIGJlIHVz
ZWZ1bCBpZiB5b3UgZGVjaWRlIHRvIG1ha2UgeW91ciBzdWJjbGFzcyBvZiB0aGlzIG1peGluIGEK
KyAgICogIlBvb2xlZENsYXNzIi4KKyAgICovCisgIHJlaW5pdGlhbGl6ZVRyYW5zYWN0aW9uOiBm
dW5jdGlvbigpIHsKKyAgICB0aGlzLnRyYW5zYWN0aW9uV3JhcHBlcnMgPSB0aGlzLmdldFRyYW5z
YWN0aW9uV3JhcHBlcnMoKTsKKyAgICBpZiAoIXRoaXMud3JhcHBlckluaXREYXRhKSB7CisgICAg
ICB0aGlzLndyYXBwZXJJbml0RGF0YSA9IFtdOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLndy
YXBwZXJJbml0RGF0YS5sZW5ndGggPSAwOworICAgIH0KKyAgICBpZiAoIXRoaXMudGltaW5nTWV0
cmljcykgeworICAgICAgdGhpcy50aW1pbmdNZXRyaWNzID0ge307CisgICAgfQorICAgIHRoaXMu
dGltaW5nTWV0cmljcy5tZXRob2RJbnZvY2F0aW9uVGltZSA9IDA7CisgICAgaWYgKCF0aGlzLnRp
bWluZ01ldHJpY3Mud3JhcHBlckluaXRUaW1lcykgeworICAgICAgdGhpcy50aW1pbmdNZXRyaWNz
LndyYXBwZXJJbml0VGltZXMgPSBbXTsKKyAgICB9IGVsc2UgeworICAgICAgdGhpcy50aW1pbmdN
ZXRyaWNzLndyYXBwZXJJbml0VGltZXMubGVuZ3RoID0gMDsKKyAgICB9CisgICAgaWYgKCF0aGlz
LnRpbWluZ01ldHJpY3Mud3JhcHBlckNsb3NlVGltZXMpIHsKKyAgICAgIHRoaXMudGltaW5nTWV0
cmljcy53cmFwcGVyQ2xvc2VUaW1lcyA9IFtdOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLnRp
bWluZ01ldHJpY3Mud3JhcHBlckNsb3NlVGltZXMubGVuZ3RoID0gMDsKKyAgICB9CisgICAgdGhp
cy5faXNJblRyYW5zYWN0aW9uID0gZmFsc2U7CisgIH0sCisKKyAgX2lzSW5UcmFuc2FjdGlvbjog
ZmFsc2UsCisKKyAgLyoqCisgICAqIEBhYnN0cmFjdAorICAgKiBAcmV0dXJuIHtBcnJheTxUcmFu
c2FjdGlvbldyYXBwZXI+fSBBcnJheSBvZiB0cmFuc2FjdGlvbiB3cmFwcGVycy4KKyAgICovCisg
IGdldFRyYW5zYWN0aW9uV3JhcHBlcnM6IG51bGwsCisKKyAgaXNJblRyYW5zYWN0aW9uOiBmdW5j
dGlvbigpIHsKKyAgICByZXR1cm4gISF0aGlzLl9pc0luVHJhbnNhY3Rpb247CisgIH0sCisKKyAg
LyoqCisgICAqIEV4ZWN1dGVzIHRoZSBmdW5jdGlvbiB3aXRoaW4gYSBzYWZldHkgd2luZG93LiBV
c2UgdGhpcyBmb3IgdGhlIHRvcCBsZXZlbAorICAgKiBtZXRob2RzIHRoYXQgcmVzdWx0IGluIGxh
cmdlIGFtb3VudHMgb2YgY29tcHV0YXRpb24vbXV0YXRpb25zIHRoYXQgd291bGQKKyAgICogbmVl
ZCB0byBiZSBzYWZldHkgY2hlY2tlZC4KKyAgICoKKyAgICogQHBhcmFtIHtmdW5jdGlvbn0gbWV0
aG9kIE1lbWJlciBvZiBzY29wZSB0byBjYWxsLgorICAgKiBAcGFyYW0ge09iamVjdH0gc2NvcGUg
U2NvcGUgdG8gaW52b2tlIGZyb20uCisgICAqIEBwYXJhbSB7T2JqZWN0Pz19IGFyZ3MuLi4gQXJn
dW1lbnRzIHRvIHBhc3MgdG8gdGhlIG1ldGhvZCAob3B0aW9uYWwpLgorICAgKiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEhlbHBzIHByZXZlbnQgbmVlZCB0byBiaW5kIGluIG1hbnkgY2FzZXMu
CisgICAqIEByZXR1cm4gUmV0dXJuIHZhbHVlIGZyb20gYG1ldGhvZGAuCisgICAqLworICBwZXJm
b3JtOiBmdW5jdGlvbihtZXRob2QsIHNjb3BlLCBhLCBiLCBjLCBkLCBlLCBmKSB7CisgICAgdGhy
b3dJZih0aGlzLmlzSW5UcmFuc2FjdGlvbigpLCBEVUFMX1RSQU5TQUNUSU9OKTsKKyAgICB2YXIg
bWVtYmVyU3RhcnQgPSBEYXRlLm5vdygpOworICAgIHZhciBlcnIgPSBudWxsOworICAgIHZhciBy
ZXQ7CisgICAgdHJ5IHsKKyAgICAgIHRoaXMuaW5pdGlhbGl6ZUFsbCgpOworICAgICAgcmV0ID0g
bWV0aG9kLmNhbGwoc2NvcGUsIGEsIGIsIGMsIGQsIGUsIGYpOworICAgIH0gY2F0Y2ggKGllX3Jl
cXVpcmVzX2NhdGNoKSB7CisgICAgICBlcnIgPSBpZV9yZXF1aXJlc19jYXRjaDsKKyAgICB9IGZp
bmFsbHkgeworICAgICAgdmFyIG1lbWJlckVuZCA9IERhdGUubm93KCk7CisgICAgICB0aGlzLm1l
dGhvZEludm9jYXRpb25UaW1lICs9IChtZW1iZXJFbmQgLSBtZW1iZXJTdGFydCk7CisgICAgICB0
cnkgeworICAgICAgICB0aGlzLmNsb3NlQWxsKCk7CisgICAgICB9IGNhdGNoIChjbG9zZUFsbEVy
cikgeworICAgICAgICBlcnIgPSBlcnIgfHwgY2xvc2VBbGxFcnI7CisgICAgICB9CisgICAgfQor
ICAgIGlmIChlcnIpIHsKKyAgICAgIHRocm93IGVycjsKKyAgICB9CisgICAgcmV0dXJuIHJldDsK
KyAgfSwKKworICBpbml0aWFsaXplQWxsOiBmdW5jdGlvbigpIHsKKyAgICB0aGlzLl9pc0luVHJh
bnNhY3Rpb24gPSB0cnVlOworICAgIHZhciB0cmFuc2FjdGlvbldyYXBwZXJzID0gdGhpcy50cmFu
c2FjdGlvbldyYXBwZXJzOworICAgIHZhciB3cmFwcGVySW5pdFRpbWVzID0gdGhpcy50aW1pbmdN
ZXRyaWNzLndyYXBwZXJJbml0VGltZXM7CisgICAgdmFyIGVyciA9IG51bGw7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCB0cmFuc2FjdGlvbldyYXBwZXJzLmxlbmd0aDsgaSsrKSB7CisgICAgICB2
YXIgaW5pdFN0YXJ0ID0gRGF0ZS5ub3coKTsKKyAgICAgIHZhciB3cmFwcGVyID0gdHJhbnNhY3Rp
b25XcmFwcGVyc1tpXTsKKyAgICAgIHRyeSB7CisgICAgICAgIHRoaXMud3JhcHBlckluaXREYXRh
W2ldID0KKyAgICAgICAgICB3cmFwcGVyLmluaXRpYWxpemUgPyB3cmFwcGVyLmluaXRpYWxpemUu
Y2FsbCh0aGlzKSA6IG51bGw7CisgICAgICB9IGNhdGNoIChpbml0RXJyKSB7CisgICAgICAgIGVy
ciA9IGVyciB8fCBpbml0RXJyOyAgLy8gUmVtZW1iZXIgdGhlIGZpcnN0IGVycm9yLgorICAgICAg
ICB0aGlzLndyYXBwZXJJbml0RGF0YVtpXSA9IFRyYW5zYWN0aW9uLk9CU0VSVkVEX0VSUk9SOwor
ICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdmFyIGN1ckluaXRUaW1lID0gd3JhcHBlckluaXRU
aW1lc1tpXTsKKyAgICAgICAgdmFyIGluaXRFbmQgPSBEYXRlLm5vdygpOworICAgICAgICB3cmFw
cGVySW5pdFRpbWVzW2ldID0gKGN1ckluaXRUaW1lIHx8IDApICsgKGluaXRFbmQgLSBpbml0U3Rh
cnQpOworICAgICAgfQorICAgIH0KKyAgICBpZiAoZXJyKSB7CisgICAgICB0aHJvdyBlcnI7Cisg
ICAgfQorICB9LAorCisgIC8qKgorICAgKiBJbnZva2VzIGVhY2ggb2YgYHRoaXMudHJhbnNhY3Rp
b25XcmFwcGVycy5jbG9zZVtpXWAgZnVuY3Rpb25zLCBwYXNzaW5nIGludG8KKyAgICogdGhlbSB0
aGUgcmVzcGVjdGl2ZSByZXR1cm4gdmFsdWVzIG9mIGB0aGlzLnRyYW5zYWN0aW9uV3JhcHBlcnMu
aW5pdFtpXWAKKyAgICogKGBjbG9zZWBycyB0aGF0IGNvcnJlc3BvbmQgdG8gaW5pdGlhbGl6ZXJz
IHRoYXQgZmFpbGVkIHdpbGwgbm90IGJlCisgICAqIGludm9rZWQpLgorICAgKi8KKyAgY2xvc2VB
bGw6IGZ1bmN0aW9uKCkgeworICAgIHRocm93SWYoIXRoaXMuaXNJblRyYW5zYWN0aW9uKCksIE1J
U1NJTkdfVFJBTlNBQ1RJT04pOworICAgIHZhciB0cmFuc2FjdGlvbldyYXBwZXJzID0gdGhpcy50
cmFuc2FjdGlvbldyYXBwZXJzOworICAgIHZhciB3cmFwcGVyQ2xvc2VUaW1lcyA9IHRoaXMudGlt
aW5nTWV0cmljcy53cmFwcGVyQ2xvc2VUaW1lczsKKyAgICB2YXIgZXJyID0gbnVsbDsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHRyYW5zYWN0aW9uV3JhcHBlcnMubGVuZ3RoOyBpKyspIHsKKyAg
ICAgIHZhciB3cmFwcGVyID0gdHJhbnNhY3Rpb25XcmFwcGVyc1tpXTsKKyAgICAgIHZhciBjbG9z
ZVN0YXJ0ID0gRGF0ZS5ub3coKTsKKyAgICAgIHZhciBpbml0RGF0YSA9IHRoaXMud3JhcHBlcklu
aXREYXRhW2ldOworICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKGluaXREYXRhICE9PSBUcmFuc2Fj
dGlvbi5PQlNFUlZFRF9FUlJPUikgeworICAgICAgICAgIHdyYXBwZXIuY2xvc2UgJiYgd3JhcHBl
ci5jbG9zZS5jYWxsKHRoaXMsIGluaXREYXRhKTsKKyAgICAgICAgfQorICAgICAgfSBjYXRjaCAo
Y2xvc2VFcnIpIHsKKyAgICAgICAgZXJyID0gZXJyIHx8IGNsb3NlRXJyOyAgLy8gUmVtZW1iZXIg
dGhlIGZpcnN0IGVycm9yLgorICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdmFyIGNsb3NlRW5k
ID0gRGF0ZS5ub3coKTsKKyAgICAgICAgdmFyIGN1ckNsb3NlVGltZSA9IHdyYXBwZXJDbG9zZVRp
bWVzW2ldOworICAgICAgICB3cmFwcGVyQ2xvc2VUaW1lc1tpXSA9IChjdXJDbG9zZVRpbWUgfHwg
MCkgKyAoY2xvc2VFbmQgLSBjbG9zZVN0YXJ0KTsKKyAgICAgIH0KKyAgICB9CisgICAgdGhpcy53
cmFwcGVySW5pdERhdGEubGVuZ3RoID0gMDsKKyAgICB0aGlzLl9pc0luVHJhbnNhY3Rpb24gPSBm
YWxzZTsKKyAgICBpZiAoZXJyKSB7CisgICAgICB0aHJvdyBlcnI7CisgICAgfQorICB9Cit9Owor
Cit2YXIgVHJhbnNhY3Rpb24gPSB7CisgIE1peGluOiBNaXhpbiwKKyAgLyoqCisgICAqIFRva2Vu
IHRvIGxvb2sgZm9yIHRvIGRldGVybWluZSBpZiBhbiBlcnJvciBvY2N1cmVkLgorICAgKi8KKyAg
T0JTRVJWRURfRVJST1I6IHt9CisKK307CisKK21vZHVsZS5leHBvcnRzID0gVHJhbnNhY3Rpb247
CisKK30pKCkKK30seyIuL3Rocm93SWYiOjg2fV0sNTk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxl
LGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAq
IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGlj
ZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5j
ZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNl
bnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4w
CisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBp
biB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMg
ZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBP
UiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICog
U2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1p
c3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHBy
b3ZpZGVzTW9kdWxlIFZpZXdwb3J0TWV0cmljcworICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFy
IFZpZXdwb3J0TWV0cmljcyA9IHsKKworICBjdXJyZW50U2Nyb2xsTGVmdDogMCwKKworICBjdXJy
ZW50U2Nyb2xsVG9wOiAwLAorCisgIHJlZnJlc2hTY3JvbGxWYWx1ZXM6IGZ1bmN0aW9uKCkgewor
ICAgIFZpZXdwb3J0TWV0cmljcy5jdXJyZW50U2Nyb2xsTGVmdCA9CisgICAgICBkb2N1bWVudC5i
b2R5LnNjcm9sbExlZnQgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDsKKyAg
ICBWaWV3cG9ydE1ldHJpY3MuY3VycmVudFNjcm9sbFRvcCA9CisgICAgICBkb2N1bWVudC5ib2R5
LnNjcm9sbFRvcCArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7CisgIH0KKwor
fTsKKworbW9kdWxlLmV4cG9ydHMgPSBWaWV3cG9ydE1ldHJpY3M7CisKK30se31dLDYwOltmdW5j
dGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFj
ZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZl
cnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUg
ZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWlu
IGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9s
aWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxl
IGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVu
ZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBX
SVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJl
c3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1
YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBM
aWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBhY2N1bXVsYXRlCisgKi8KKworInVzZSBz
dHJpY3QiOworCit2YXIgdGhyb3dJZiA9IHJlcXVpcmUoIi4vdGhyb3dJZiIpOworCit2YXIgSU5W
QUxJRF9BUkdTID0gJ0lOVkFMSURfQUNDVU1fQVJHUyc7CisKK2lmICh0cnVlKSB7CisgIElOVkFM
SURfQVJHUyA9CisgICAgJ2FjY3VtdWxhdGUgcmVxdWlyZXMgbm9uIGVtcHR5IChub24tbnVsbCwg
ZGVmaW5lZCkgbmV4dCAnICsKKyAgICAndmFsdWVzLiBBbGwgYXJyYXlzIGFjY3VtdWxhdGVkIG11
c3Qgbm90IGNvbnRhaW4gYW55IGVtcHR5IGl0ZW1zLic7Cit9CisKKy8qKgorICogQWNjdW11bGF0
ZXMgaXRlbXMgdGhhdCBtdXN0IG5ldmVyIGJlIGVtcHR5LCBpbnRvIGEgcmVzdWx0IGluIGEgbWFu
bmVyIHRoYXQKKyAqIGNvbnNlcnZlcyBtZW1vcnkgLSBhdm9pZGluZyBhbGxvY2F0aW9uIG9mIGFy
cmF5cyB1bnRpbCB0aGV5IGFyZSBuZWVkZWQuIFRoZQorICogYWNjdW11bGF0aW9uIG1heSBzdGFy
dCBhbmQvb3IgZW5kIHVwIGJlaW5nIGEgc2luZ2xlIGVsZW1lbnQgb3IgYW4gYXJyYXkKKyAqIGRl
cGVuZGluZyBvbiB0aGUgdG90YWwgY291bnQgKGlmIGdyZWF0ZXIgdGhhbiBvbmUsIGFuIGFycmF5
IGlzIGFsbG9jYXRlZCkuCisgKiBIYW5kbGVzIG1vc3QgY29tbW9uIGNhc2UgZmlyc3QgKHN0YXJ0
aW5nIHdpdGggYW4gZW1wdHkgY3VycmVudCB2YWx1ZSBhbmQKKyAqIGFjcXVpcmluZyBvbmUpLgor
ICogQHJldHVybiB7QWNjdW11bGF0aW9ufSBBbiBhY2N1bXVsYXRpb24gd2hpY2ggaXMgZWl0aGVy
IGEgc2luZ2xlIGl0ZW0gb3IgYW4KKyAqIEFycmF5IG9mIGl0ZW1zLgorICovCitmdW5jdGlvbiBh
Y2N1bXVsYXRlKGN1ciwgbmV4dCkgeworICB2YXIgY3VyVmFsSXNFbXB0eSA9IGN1ciA9PSBudWxs
OyAgIC8vIFdpbGwgdGVzdCBmb3IgZW1wdGluZXNzIChudWxsL3VuZGVmKQorICB2YXIgbmV4dFZh
bElzRW1wdHkgPSBuZXh0ID09PSBudWxsOworICBpZiAodHJ1ZSkgeworICAgIHRocm93SWYobmV4
dFZhbElzRW1wdHksIElOVkFMSURfQVJHUyk7CisgIH0KKyAgaWYgKG5leHRWYWxJc0VtcHR5KSB7
CisgICAgcmV0dXJuIGN1cjsKKyAgfSBlbHNlIHsKKyAgICBpZiAoY3VyVmFsSXNFbXB0eSkgewor
ICAgICAgcmV0dXJuIG5leHQ7CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIEJvdGggYXJlIG5vdCBl
bXB0eS4gV2FybmluZzogTmV2ZXIgY2FsbCB4LmNvbmNhdCh5KSB3aGVuIHlvdSBhcmUgbm90Cisg
ICAgICAvLyBjZXJ0YWluIHRoYXQgeCBpcyBhbiBBcnJheSAoeCBjb3VsZCBiZSBhIHN0cmluZyB3
aXRoIGNvbmNhdCBtZXRob2QpLgorICAgICAgdmFyIGN1cklzQXJyYXkgPSBBcnJheS5pc0FycmF5
KGN1cik7CisgICAgICB2YXIgbmV4dElzQXJyYXkgPSBBcnJheS5pc0FycmF5KG5leHQpOworICAg
ICAgaWYgKGN1cklzQXJyYXkpIHsKKyAgICAgICAgcmV0dXJuIGN1ci5jb25jYXQobmV4dCk7Cisg
ICAgICB9IGVsc2UgeworICAgICAgICBpZiAobmV4dElzQXJyYXkpIHsKKyAgICAgICAgICByZXR1
cm4gW2N1cl0uY29uY2F0KG5leHQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVy
biBbY3VyLCBuZXh0XTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorfQorCittb2R1
bGUuZXhwb3J0cyA9IGFjY3VtdWxhdGU7CisKK30seyIuL3Rocm93SWYiOjg2fV0sNjE6W2Z1bmN0
aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNl
Ym9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVy
c2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBl
eGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4g
YSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xp
Y2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUg
bGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5k
ZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJ
VEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVz
cyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3Vh
Z2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExp
Y2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxlIGNvcHlQcm9wZXJ0aWVzCisgKi8KKworLyoq
CisgKiBDb3B5IHByb3BlcnRpZXMgZnJvbSBvbmUgb3IgbW9yZSBvYmplY3RzICh1cCB0byA1KSBp
bnRvIHRoZSBmaXJzdCBvYmplY3QuCisgKiBUaGlzIGlzIGEgc2hhbGxvdyBjb3B5LiBJdCBtdXRh
dGVzIHRoZSBmaXJzdCBvYmplY3QgYW5kIGFsc28gcmV0dXJucyBpdC4KKyAqCisgKiBOT1RFOiBg
YXJndW1lbnRzYCBoYXMgYSB2ZXJ5IHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIHBlbmFsdHksIHdo
aWNoIGlzIHdoeQorICogd2UgZG9uJ3Qgc3VwcG9ydCB1bmxpbWl0ZWQgYXJndW1lbnRzLgorICov
CitmdW5jdGlvbiBjb3B5UHJvcGVydGllcyhvYmosIGEsIGIsIGMsIGQsIGUsIGYpIHsKKyAgb2Jq
ID0gb2JqIHx8IHt9OworCisgIGlmICh0cnVlKSB7CisgICAgaWYgKGYpIHsKKyAgICAgIHRocm93
IG5ldyBFcnJvcignVG9vIG1hbnkgYXJndW1lbnRzIHBhc3NlZCB0byBjb3B5UHJvcGVydGllcycp
OworICAgIH0KKyAgfQorCisgIHZhciBhcmdzID0gW2EsIGIsIGMsIGQsIGVdOworICB2YXIgaWkg
PSAwLCB2OworICB3aGlsZSAoYXJnc1tpaV0pIHsKKyAgICB2ID0gYXJnc1tpaSsrXTsKKyAgICBm
b3IgKHZhciBrIGluIHYpIHsKKyAgICAgIG9ialtrXSA9IHZba107CisgICAgfQorCisgICAgLy8g
SUUgaWdub3JlcyB0b1N0cmluZyBpbiBvYmplY3QgaXRlcmF0aW9uLi4gU2VlOgorICAgIC8vIHdl
YnJlZmxlY3Rpb24uYmxvZ3Nwb3QuY29tLzIwMDcvMDcvcXVpY2stZml4LWludGVybmV0LWV4cGxv
cmVyLWFuZC5odG1sCisgICAgaWYgKHYuaGFzT3duUHJvcGVydHkgJiYgdi5oYXNPd25Qcm9wZXJ0
eSgndG9TdHJpbmcnKSAmJgorICAgICAgICAodHlwZW9mIHYudG9TdHJpbmcgIT0gJ3VuZGVmaW5l
ZCcpICYmIChvYmoudG9TdHJpbmcgIT09IHYudG9TdHJpbmcpKSB7CisgICAgICBvYmoudG9TdHJp
bmcgPSB2LnRvU3RyaW5nOworICAgIH0KKyAgfQorCisgIHJldHVybiBvYmo7Cit9CisKK21vZHVs
ZS5leHBvcnRzID0gY29weVByb3BlcnRpZXM7CisKK30se31dLDYyOltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4K
KyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0
aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNv
bXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0
aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNF
TlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3Jl
ZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNl
bnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJB
TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGll
ZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmlu
ZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoK
KyAqIEBwcm92aWRlc01vZHVsZSBjcmVhdGVPYmplY3RGcm9tCisgKi8KKwordmFyIGhhc0FycmF5
TmF0dXJlID0gcmVxdWlyZSgiLi9oYXNBcnJheU5hdHVyZSIpOworCisvKioKKyAqIENvbnN0cnVj
dCBhbiBvYmplY3QgZnJvbSBhbiBhcnJheSBvZiBrZXlzCisgKiBhbmQgb3B0aW9uYWxseSBzcGVj
aWZpZWQgdmFsdWUgb3IgbGlzdCBvZiB2YWx1ZXMuCisgKgorICogID4+PiBjcmVhdGVPYmplY3RG
cm9tKFsnYScsJ2InLCdjJ10pOworICogIHthOiB0cnVlLCBiOiB0cnVlLCBjOiB0cnVlfQorICoK
KyAqICA+Pj4gY3JlYXRlT2JqZWN0RnJvbShbJ2EnLCdiJywnYyddLCBmYWxzZSk7CisgKiAge2E6
IGZhbHNlLCBiOiBmYWxzZSwgYzogZmFsc2V9CisgKgorICogID4+PiBjcmVhdGVPYmplY3RGcm9t
KFsnYScsJ2InLCdjJ10sICdtb25rZXknKTsKKyAqICB7YzonbW9ua2V5JywgYjonbW9ua2V5JyBj
Oidtb25rZXknfQorICoKKyAqICA+Pj4gY3JlYXRlT2JqZWN0RnJvbShbJ2EnLCdiJywnYyddLCBb
MSwyLDNdKTsKKyAqICB7YTogMSwgYjogMiwgYzogM30KKyAqCisgKiAgPj4+IGNyZWF0ZU9iamVj
dEZyb20oWyd3b21lbicsICdtZW4nXSwgW3RydWUsIGZhbHNlXSk7CisgKiAge3dvbWVuOiB0cnVl
LCBtZW46IGZhbHNlfQorICoKKyAqIEBwYXJhbSAgIEFycmF5ICAgbGlzdCBvZiBrZXlzCisgKiBA
cGFyYW0gICBtaXhlZCAgIG9wdGlvbmFsIHZhbHVlIG9yIHZhbHVlIGFycmF5LiAgZGVmYXVsdHMg
dHJ1ZS4KKyAqIEByZXR1cm5zIG9iamVjdAorICovCitmdW5jdGlvbiBjcmVhdGVPYmplY3RGcm9t
KGtleXMsIHZhbHVlcyAvKiA9IHRydWUgKi8pIHsKKyAgaWYgKHRydWUpIHsKKyAgICBpZiAoIWhh
c0FycmF5TmF0dXJlKGtleXMpKSB7CisgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdNdXN0IHBh
c3MgYW4gYXJyYXkgb2Yga2V5cy4nKTsKKyAgICB9CisgIH0KKworICB2YXIgb2JqZWN0ID0ge307
CisgIHZhciBpc19hcnJheSA9IGhhc0FycmF5TmF0dXJlKHZhbHVlcyk7CisgIGlmICh0eXBlb2Yg
dmFsdWVzID09ICd1bmRlZmluZWQnKSB7CisgICAgdmFsdWVzID0gdHJ1ZTsKKyAgfQorCisgIGZv
ciAodmFyIGlpID0ga2V5cy5sZW5ndGg7IGlpLS07KSB7CisgICAgb2JqZWN0W2tleXNbaWldXSA9
IGlzX2FycmF5ID8gdmFsdWVzW2lpXSA6IHZhbHVlczsKKyAgfQorICByZXR1cm4gb2JqZWN0Owor
fQorCittb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZU9iamVjdEZyb207CisKK30seyIuL2hhc0FycmF5
TmF0dXJlIjo3Mn1dLDYzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0
aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBt
YXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5z
ZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0
dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyBy
ZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdh
cmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFu
ICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBB
TlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBm
b3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxp
bWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBkYW5n
ZXJvdXNTdHlsZVZhbHVlCisgKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seQorICovCisKKyJ1c2Ug
c3RyaWN0IjsKKwordmFyIENTU1Byb3BlcnR5ID0gcmVxdWlyZSgiLi9DU1NQcm9wZXJ0eSIpOwor
CisvKioKKyAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIHRoZSBwcm9wZXIgY3NzIHdyaXRhYmxlIHZh
bHVlLiBUaGUgYHN0eWxlTmFtZWAgbmFtZQorICogbmFtZSBzaG91bGQgYmUgbG9naWNhbCAobm8g
aHlwaGVucyksIGFzIHNwZWNpZmllZAorICogaW4gYENTU1Byb3BlcnR5LmlzVW5pdGxlc3NOdW1i
ZXJgLgorICoKKyAqIEBwYXJhbSB7c3RyaW5nfSBzdHlsZU5hbWUgQ1NTIHByb3BlcnR5IG5hbWUg
c3VjaCBhcyBgdG9wTWFyZ2luYC4KKyAqIEBwYXJhbSB7Kn0gdmFsdWUgQ1NTIHByb3BlcnR5IHZh
bHVlIHN1Y2ggYXMgYDEwcHhgLgorICogQHJldHVybiB7c3RyaW5nfSBOb3JtYWxpemVkIHN0eWxl
IHZhbHVlIHdpdGggZGltZW5zaW9ucyBhcHBsaWVkLgorICovCitmdW5jdGlvbiBkYW5nZXJvdXNT
dHlsZVZhbHVlKHN0eWxlTmFtZSwgdmFsdWUpIHsKKyAgLy8gTm90ZSB0aGF0IHdlJ3ZlIHJlbW92
ZWQgZXNjYXBlVGV4dEZvckJyb3dzZXIoKSBjYWxscyBoZXJlIHNpbmNlIHRoZQorICAvLyB3aG9s
ZSBzdHJpbmcgd2lsbCBiZSBlc2NhcGVkIHdoZW4gdGhlIGF0dHJpYnV0ZSBpcyBpbmplY3RlZCBp
bnRvCisgIC8vIHRoZSBtYXJrdXAuIElmIHlvdSBwcm92aWRlIHVuc2FmZSB1c2VyIGRhdGEgaGVy
ZSB0aGV5IGNhbiBpbmplY3QKKyAgLy8gYXJiaXRyYXJ5IENTUyB3aGljaCBtYXkgYmUgcHJvYmxl
bWF0aWMgKEkgY291bGRuJ3QgcmVwcm8gdGhpcyk6CisgIC8vIGh0dHBzOi8vd3d3Lm93YXNwLm9y
Zy9pbmRleC5waHAvWFNTX0ZpbHRlcl9FdmFzaW9uX0NoZWF0X1NoZWV0CisgIC8vIGh0dHA6Ly93
d3cudGhlc3Bhbm5lci5jby51ay8yMDA3LzExLzI2L3VsdGltYXRlLXhzcy1jc3MtaW5qZWN0aW9u
LworICAvLyBUaGlzIGlzIG5vdCBhbiBYU1MgaG9sZSBidXQgaW5zdGVhZCBhIHBvdGVudGlhbCBD
U1MgaW5qZWN0aW9uIGlzc3VlCisgIC8vIHdoaWNoIGhhcyBsZWFkIHRvIGEgZ3JlYXRlciBkaXNj
dXNzaW9uIGFib3V0IGhvdyB3ZSdyZSBnb2luZyB0bworICAvLyB0cnVzdCBVUkxzIG1vdmluZyBm
b3J3YXJkLiBTZWUgIzIxMTU5MDEKKworICB2YXIgaXNFbXB0eSA9IHZhbHVlID09IG51bGwgfHwg
dHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgdmFsdWUgPT09ICcnOworICBpZiAoaXNFbXB0
eSkgeworICAgIHJldHVybiAnJzsKKyAgfQorCisgIHZhciBpc05vbk51bWVyaWMgPSBpc05hTih2
YWx1ZSk7CisgIGlmIChpc05vbk51bWVyaWMgfHwgdmFsdWUgPT09IDAgfHwgQ1NTUHJvcGVydHku
aXNVbml0bGVzc051bWJlcltzdHlsZU5hbWVdKSB7CisgICAgcmV0dXJuICcnICsgdmFsdWU7IC8v
IGNhc3QgdG8gc3RyaW5nCisgIH0KKworICByZXR1cm4gdmFsdWUgKyAncHgnOworfQorCittb2R1
bGUuZXhwb3J0cyA9IGRhbmdlcm91c1N0eWxlVmFsdWU7CisKK30seyIuL0NTU1Byb3BlcnR5Ijoy
fV0sNjQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmln
aHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUg
TGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNl
IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91
IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5h
cGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5
IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlz
dHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBC
QVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBl
aXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3Bl
Y2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMg
dW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxlIGVtcHR5RnVuY3Rpb24K
KyAqLworCit2YXIgY29weVByb3BlcnRpZXMgPSByZXF1aXJlKCIuL2NvcHlQcm9wZXJ0aWVzIik7
CisKK2Z1bmN0aW9uIG1ha2VFbXB0eUZ1bmN0aW9uKGFyZykgeworICByZXR1cm4gZnVuY3Rpb24o
KSB7CisgICAgcmV0dXJuIGFyZzsKKyAgfTsKK30KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGFj
Y2VwdHMgYW5kIGRpc2NhcmRzIGlucHV0czsgaXQgaGFzIG5vIHNpZGUgZWZmZWN0cy4gVGhpcyBp
cworICogcHJpbWFyaWx5IHVzZWZ1bCBpZGlvbWF0aWNhbGx5IGZvciBvdmVycmlkYWJsZSBmdW5j
dGlvbiBlbmRwb2ludHMgd2hpY2gKKyAqIGFsd2F5cyBuZWVkIHRvIGJlIGNhbGxhYmxlLCBzaW5j
ZSBKUyBsYWNrcyBhIG51bGwtY2FsbCBpZGlvbSBhbGEgQ29jb2EuCisgKi8KK2Z1bmN0aW9uIGVt
cHR5RnVuY3Rpb24oKSB7fQorCitjb3B5UHJvcGVydGllcyhlbXB0eUZ1bmN0aW9uLCB7CisgIHRo
YXRSZXR1cm5zOiBtYWtlRW1wdHlGdW5jdGlvbiwKKyAgdGhhdFJldHVybnNGYWxzZTogbWFrZUVt
cHR5RnVuY3Rpb24oZmFsc2UpLAorICB0aGF0UmV0dXJuc1RydWU6IG1ha2VFbXB0eUZ1bmN0aW9u
KHRydWUpLAorICB0aGF0UmV0dXJuc051bGw6IG1ha2VFbXB0eUZ1bmN0aW9uKG51bGwpLAorICB0
aGF0UmV0dXJuc1RoaXM6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSwKKyAgdGhhdFJldHVy
bnNBcmd1bWVudDogZnVuY3Rpb24oYXJnKSB7IHJldHVybiBhcmc7IH0KK30pOworCittb2R1bGUu
ZXhwb3J0cyA9IGVtcHR5RnVuY3Rpb247CisKK30seyIuL2NvcHlQcm9wZXJ0aWVzIjo2MX1dLDY1
OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIw
MTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vu
c2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlz
IGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkg
b2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hl
Lm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBs
aWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMs
CisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVy
IGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmlj
IGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVy
IHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBlc2NhcGVUZXh0Rm9yQnJvd3Nl
cgorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIHRocm93SWYgPSByZXF1aXJlKCIuL3Rocm93
SWYiKTsKKwordmFyIEVTQ0FQRV9UWVBFX0VSUjsKKworaWYgKHRydWUpIHsKKyAgRVNDQVBFX1RZ
UEVfRVJSID0KKyAgICAnVGhlIFJlYWN0IGNvcmUgaGFzIGF0dGVtcHRlZCB0byBlc2NhcGUgY29u
dGVudCB0aGF0IGlzIG9mIGEgJyArCisgICAgJ215c3RlcmlvdXMgdHlwZSAob2JqZWN0IGV0Yykg
RXNjYXBpbmcgb25seSB3b3JrcyBvbiBudW1iZXJzIGFuZCBzdHJpbmdzJzsKK30KKwordmFyIEVT
Q0FQRV9MT09LVVAgPSB7CisgICImIjogIiZhbXA7IiwKKyAgIj4iOiAiJmd0OyIsCisgICI8Ijog
IiZsdDsiLAorICAiXCIiOiAiJnF1b3Q7IiwKKyAgIiciOiAiJiN4Mjc7IiwKKyAgIi8iOiAiJiN4
MmY7IgorfTsKKworZnVuY3Rpb24gZXNjYXBlcihtYXRjaCkgeworICByZXR1cm4gRVNDQVBFX0xP
T0tVUFttYXRjaF07Cit9CisKK3ZhciBlc2NhcGVUZXh0Rm9yQnJvd3NlciA9IGZ1bmN0aW9uICh0
ZXh0KSB7CisgIHZhciB0eXBlID0gdHlwZW9mIHRleHQ7CisgIHZhciBpbnZhbGlkID0gdHlwZSA9
PT0gJ29iamVjdCc7CisgIGlmICh0cnVlKSB7CisgICAgdGhyb3dJZihpbnZhbGlkLCBFU0NBUEVf
VFlQRV9FUlIpOworICB9CisgIGlmICh0ZXh0ID09PSAnJyB8fCBpbnZhbGlkKSB7CisgICAgcmV0
dXJuICcnOworICB9IGVsc2UgeworICAgIGlmICh0eXBlID09PSAnc3RyaW5nJykgeworICAgICAg
cmV0dXJuIHRleHQucmVwbGFjZSgvWyY+PCInXC9dL2csIGVzY2FwZXIpOworICAgIH0gZWxzZSB7
CisgICAgICByZXR1cm4gKCcnK3RleHQpLnJlcGxhY2UoL1smPjwiJ1wvXS9nLCBlc2NhcGVyKTsK
KyAgICB9CisgIH0KK307CisKK21vZHVsZS5leHBvcnRzID0gZXNjYXBlVGV4dEZvckJyb3dzZXI7
CisKK30seyIuL3Rocm93SWYiOjg2fV0sNjY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9y
dHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vu
c2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIp
OworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRo
IHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0
CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgor
ICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0
aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJp
YnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05E
SVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRo
ZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25z
IGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHByb3ZpZGVz
TW9kdWxlIGV4CisgKiBAdHlwZWNoZWNrcworICogQG5vc3RhY2t0cmFjZQorICovCisKKy8qKgor
ICogVGhpcyBmdW5jdGlvbiB0cmFuc2Zvcm1zIGVycm9yIG1lc3NhZ2Ugd2l0aCBhcmd1bWVudHMg
aW50byBwbGFpbiB0ZXh0IGVycm9yCisgKiBtZXNzYWdlLCBzbyB0aGF0IGl0IGNhbiBiZSBwYXNz
ZWQgdG8gd2luZG93Lm9uZXJyb3Igd2l0aG91dCBsb3NpbmcgYW55dGhpbmcuCisgKiBJdCBjYW4g
dGhlbiBiZSB0cmFuc2Zvcm1lZCBiYWNrIGJ5IGBlcngoKWAgZnVuY3Rpb24uCisgKgorICogVXNh
Z2U6CisgKiAgIHRocm93IG5ldyBFcnJvcihleCgnRXJyb3IgJXMgZnJvbSAlcycsIGVycm9yQ29k
ZSwgdXNlcklEKSk7CisgKgorICogQHBhcmFtIHtzdHJpbmd9IGVycm9yTWVzc2FnZQorICovCisK
K3ZhciBleCA9IGZ1bmN0aW9uKGVycm9yTWVzc2FnZS8qLCBhcmcxLCBhcmcyLCAuLi4qLykgewor
ICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykubWFwKGZ1
bmN0aW9uKGFyZykgeworICAgIHJldHVybiBTdHJpbmcoYXJnKTsKKyAgfSk7CisgIHZhciBleHBl
Y3RlZExlbmd0aCA9IGVycm9yTWVzc2FnZS5zcGxpdCgnJXMnKS5sZW5ndGggLSAxOworCisgIGlm
IChleHBlY3RlZExlbmd0aCAhPT0gYXJncy5sZW5ndGggLSAxKSB7CisgICAgLy8gc29tZXRoaW5n
IHdyb25nIHdpdGggdGhlIGZvcm1hdHRpbmcgc3RyaW5nCisgICAgcmV0dXJuIGV4KCdleCBhcmdz
IG51bWJlciBtaXNtYXRjaDogJXMnLCBKU09OLnN0cmluZ2lmeShhcmdzKSk7CisgIH0KKworICBy
ZXR1cm4gZXguX3ByZWZpeCArIEpTT04uc3RyaW5naWZ5KGFyZ3MpICsgZXguX3N1ZmZpeDsKK307
CisKK2V4Ll9wcmVmaXggPSAnPCFbRVhbJzsKK2V4Ll9zdWZmaXggPSAnXV0+JzsKKworbW9kdWxl
LmV4cG9ydHMgPSBleDsKKworfSx7fV0sNjc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9y
dHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vu
c2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIp
OworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRo
IHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0
CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgor
ICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0
aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJp
YnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05E
SVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRo
ZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25z
IGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHByb3ZpZGVz
TW9kdWxlIGZsYXR0ZW5DaGlsZHJlbgorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIHRocm93
SWYgPSByZXF1aXJlKCIuL3Rocm93SWYiKTsKK3ZhciB0cmF2ZXJzZUFsbENoaWxkcmVuID0gcmVx
dWlyZSgiLi90cmF2ZXJzZUFsbENoaWxkcmVuIik7CisKKy8qKgorICogQHBhcmFtIHtmdW5jdGlv
bn0gdHJhdmVyc2VDb250ZXh0IENvbnRleHQgcGFzc2VkIHRocm91Z2ggdHJhdmVyc2FsLgorICog
QHBhcmFtIHs/UmVhY3RDb21wb25lbnR9IGNoaWxkIFJlYWN0IGNoaWxkIGNvbXBvbmVudC4KKyAq
IEBwYXJhbSB7IXN0cmluZ30gbmFtZSBTdHJpbmcgbmFtZSBvZiBrZXkgcGF0aCB0byBjaGlsZC4K
KyAqLworZnVuY3Rpb24gZmxhdHRlblNpbmdsZUNoaWxkSW50b0NvbnRleHQodHJhdmVyc2VDb250
ZXh0LCBjaGlsZCwgbmFtZSkgeworICAvLyBXZSBmb3VuZCBhIGNvbXBvbmVudCBpbnN0YW5jZQor
ICB2YXIgcmVzdWx0ID0gdHJhdmVyc2VDb250ZXh0OworICBpZiAodHJ1ZSkgeworICAgIHRocm93
SWYoCisgICAgICByZXN1bHQuaGFzT3duUHJvcGVydHkobmFtZSksCisgICAgICB0cmF2ZXJzZUFs
bENoaWxkcmVuLkRVUExJQ0FURV9LRVlfRVJST1IKKyAgICApOworICB9CisgIHJlc3VsdFtuYW1l
XSA9IGNoaWxkOworfQorCisvKioKKyAqIEZsYXR0ZW5zIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGlj
YWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC4KKyAqIEByZXR1cm4geyFvYmplY3R9
IGZsYXR0ZW5lZCBjaGlsZHJlbiBrZXllZCBieSBuYW1lLgorICovCitmdW5jdGlvbiBmbGF0dGVu
Q2hpbGRyZW4oY2hpbGRyZW4pIHsKKyAgaWYgKGNoaWxkcmVuID09PSBudWxsIHx8IGNoaWxkcmVu
ID09PSB1bmRlZmluZWQpIHsKKyAgICByZXR1cm4gY2hpbGRyZW47CisgIH0KKyAgdmFyIHJlc3Vs
dCA9IHt9OworICB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBmbGF0dGVuU2luZ2xlQ2hp
bGRJbnRvQ29udGV4dCwgcmVzdWx0KTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworbW9kdWxlLmV4
cG9ydHMgPSBmbGF0dGVuQ2hpbGRyZW47CisKK30seyIuL3Rocm93SWYiOjg2LCIuL3RyYXZlcnNl
QWxsQ2hpbGRyZW4iOjg3fV0sNjg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewor
LyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVu
ZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICog
eW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBM
aWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgor
ICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5s
ZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBz
b2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQg
b24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05T
IE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNl
bnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAor
ICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxl
IGZvckVhY2hBY2N1bXVsYXRlZAorICovCisKKyJ1c2Ugc3RyaWN0IjsKKworLyoqCisgKiBAcGFy
YW0ge2FycmF5fSBhbiAiYWNjdW11bGF0aW9uIiBvZiBpdGVtcyB3aGljaCBpcyBlaXRoZXIgYW4g
QXJyYXkgb3IKKyAqIGEgc2luZ2xlIGl0ZW0uIFVzZWZ1bCB3aGVuIHBhaXJlZCB3aXRoIHRoZSBg
YWNjdW11bGF0ZWAgbW9kdWxlLiBUaGlzIGlzIGEKKyAqIHNpbXBsZSB1dGlsaXR5IHRoYXQgYWxs
b3dzIHVzIHRvIHJlYXNvbiBhYm91dCBhIGNvbGxlY3Rpb24gb2YgaXRlbXMsIGJ1dAorICogaGFu
ZGxpbmcgdGhlIGNhc2Ugd2hlbiB0aGVyZSBpcyBleGFjdGx5IG9uZSBpdGVtIChhbmQgd2UgZG8g
bm90IG5lZWQgdG8KKyAqIGFsbG9jYXRlIGFuIGFycmF5KS4KKyAqLwordmFyIGZvckVhY2hBY2N1
bXVsYXRlZCA9IGZ1bmN0aW9uKGFyciwgY2IsIHNjb3BlKSB7CisgIGlmIChBcnJheS5pc0FycmF5
KGFycikpIHsKKyAgICBhcnIuZm9yRWFjaChjYiwgc2NvcGUpOworICB9IGVsc2UgaWYgKGFycikg
eworICAgIGNiLmNhbGwoc2NvcGUsIGFycik7CisgIH0KK307CisKK21vZHVsZS5leHBvcnRzID0g
Zm9yRWFjaEFjY3VtdWxhdGVkOworCit9LHt9XSw2OTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUs
ZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICog
TGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNl
bnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vu
c2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAK
KyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGlu
IHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBk
aXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9S
IENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBT
ZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlz
c2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJv
dmlkZXNNb2R1bGUgZ2UKKyAqLworCisvKioKKyAqIEZpbmQgYSBub2RlIGJ5IElELiAgT3B0aW9u
YWxseSBzZWFyY2ggYSBzdWItdHJlZSBvdXRzaWRlIG9mIHRoZSBkb2N1bWVudAorICoKKyAqIFVz
ZSBnZSBpZiB5b3UncmUgbm90IHN1cmUgd2hldGhlciBvciBub3QgdGhlIGVsZW1lbnQgZXhpc3Rz
LiBZb3UgY2FuIHRlc3QKKyAqIGZvciBleGlzdGVuY2UgeW91cnNlbGYgaW4geW91ciBhcHBsaWNh
dGlvbiBjb2RlLgorICoKKyAqIElmIHlvdXIgYXBwbGljYXRpb24gY29kZSBkZXBlbmRzIG9uIHRo
ZSBleGlzdGVuY2Ugb2YgdGhlIGVsZW1lbnQsIHVzZSAkCisgKiBpbnN0ZWFkLCB3aGljaCB3aWxs
IHRocm93IGluIERFViBpZiB0aGUgZWxlbWVudCBkb2Vzbid0IGV4aXN0LgorICovCitmdW5jdGlv
biBnZShhcmcsIHJvb3QsIHRhZykgeworICByZXR1cm4gdHlwZW9mIGFyZyAhPSAnc3RyaW5nJyA/
IGFyZyA6CisgICAgIXJvb3QgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhcmcpIDoKKyAgICBf
Z2VGcm9tU3VidHJlZShhcmcsIHJvb3QsIHRhZyk7Cit9CisKK2Z1bmN0aW9uIF9nZUZyb21TdWJ0
cmVlKGlkLCByb290LCB0YWcpIHsKKyAgdmFyIGVsZW0sIGNoaWxkcmVuLCBpaTsKKworICBpZiAo
X2dldE5vZGVJRChyb290KSA9PSBpZCkgeworICAgIHJldHVybiByb290OworICB9IGVsc2UgaWYg
KHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUpIHsKKyAgICAvLyBBbGwgRWxlbWVudHMgaW1wbGVt
ZW50IHRoaXMsIHdoaWNoIGRvZXMgYW4gaXRlcmF0aXZlIERGUywgd2hpY2ggaXMKKyAgICAvLyBm
YXN0ZXIgdGhhbiByZWN1cnNpb24gYW5kIGRvZXNuJ3QgcnVuIGludG8gc3RhY2sgZGVwdGggaXNz
dWVzLgorICAgIGNoaWxkcmVuID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWcgfHwgJyon
KTsKKyAgICBmb3IgKGlpID0gMDsgaWkgPCBjaGlsZHJlbi5sZW5ndGg7IGlpKyspIHsKKyAgICAg
IGlmIChfZ2V0Tm9kZUlEKGNoaWxkcmVuW2lpXSkgPT0gaWQpIHsKKyAgICAgICAgcmV0dXJuIGNo
aWxkcmVuW2lpXTsKKyAgICAgIH0KKyAgICB9CisgIH0gZWxzZSB7CisgICAgLy8gRG9jdW1lbnRG
cmFnbWVudCBkb2VzIG5vdCBpbXBsZW1lbnQgZ2V0RWxlbWVudHNCeVRhZ05hbWUsIHNvCisgICAg
Ly8gcmVjdXJzZSBvdmVyIGl0cyBjaGlsZHJlbi4gSXRzIGNoaWxkcmVuIG11c3QgYmUgRWxlbWVu
dHMsIHNvCisgICAgLy8gZWFjaCBjaGlsZCB3aWxsIHVzZSB0aGUgZ2V0RWxlbWVudHNCeVRhZ05h
bWUgY2FzZSBpbnN0ZWFkLgorICAgIGNoaWxkcmVuID0gcm9vdC5jaGlsZE5vZGVzOworICAgIGZv
ciAoaWkgPSAwOyBpaSA8IGNoaWxkcmVuLmxlbmd0aDsgaWkrKykgeworICAgICAgZWxlbSA9IF9n
ZUZyb21TdWJ0cmVlKGlkLCBjaGlsZHJlbltpaV0pOworICAgICAgaWYgKGVsZW0pIHsKKyAgICAg
ICAgcmV0dXJuIGVsZW07CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIG51bGw7Cit9
CisKKy8qKgorICogUmV0dXJuIHRoZSBJRCB2YWx1ZSBmb3IgYSBnaXZlbiBub2RlLiBUaGlzIGFs
bG93cyB1cyB0byBhdm9pZCBpc3N1ZXMKKyAqIHdpdGggZm9ybXMgdGhhdCBjb250YWluIGlucHV0
cyB3aXRoIG5hbWU9ImlkIi4KKyAqCisgKiBAcmV0dXJuIHN0cmluZyAobnVsbCBpZiBhdHRyaWJ1
dGUgbm90IHNldCkKKyAqLworZnVuY3Rpb24gX2dldE5vZGVJRChub2RlKSB7CisgIC8vICNkb2N1
bWVudCBhbmQgI2RvY3VtZW50LWZyYWdtZW50IGRvIG5vdCBoYXZlIGdldEF0dHJpYnV0ZU5vZGUu
CisgIHZhciBpZCA9IG5vZGUuZ2V0QXR0cmlidXRlTm9kZSAmJiBub2RlLmdldEF0dHJpYnV0ZU5v
ZGUoJ2lkJyk7CisgIHJldHVybiBpZCA/IGlkLnZhbHVlIDogbnVsbDsKK30KKworbW9kdWxlLmV4
cG9ydHMgPSBnZTsKKworfSx7fV0sNzA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
eworKGZ1bmN0aW9uKCl7LyoqCisgKiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoK
KyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAi
TGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM
aWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0Ut
Mi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0
byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2Ug
aXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElF
UyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgor
ICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBl
cm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICog
QHByb3ZpZGVzTW9kdWxlIGdldEV2ZW50VGFyZ2V0CisgKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25s
eQorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVx
dWlyZSgiLi9FeGVjdXRpb25FbnZpcm9ubWVudCIpOworCisvKioKKyAqIEdldHMgdGhlIHRhcmdl
dCBub2RlIGZyb20gYSBuYXRpdmUgYnJvd3NlciBldmVudCBieSBhY2NvdW50aW5nIGZvcgorICog
aW5jb25zaXN0ZW5jaWVzIGluIGJyb3dzZXIgRE9NIEFQSXMuCisgKgorICogQHBhcmFtIHtvYmpl
Y3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LgorICogQHJldHVybiB7RE9NRXZl
bnRUYXJnZXR9IFRhcmdldCBub2RlLgorICovCitmdW5jdGlvbiBnZXRFdmVudFRhcmdldChuYXRp
dmVFdmVudCkgeworICB2YXIgdGFyZ2V0ID0KKyAgICBuYXRpdmVFdmVudC50YXJnZXQgfHwKKyAg
ICBuYXRpdmVFdmVudC5zcmNFbGVtZW50IHx8CisgICAgRXhlY3V0aW9uRW52aXJvbm1lbnQuZ2xv
YmFsOworICAvLyBTYWZhcmkgbWF5IGZpcmUgZXZlbnRzIG9uIHRleHQgbm9kZXMgKE5vZGUuVEVY
VF9OT0RFIGlzIDMpLgorICAvLyBAc2VlIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZl
bnRzX3Byb3BlcnRpZXMuaHRtbAorICByZXR1cm4gdGFyZ2V0Lm5vZGVUeXBlID09PSAzID8gdGFy
Z2V0LnBhcmVudE5vZGUgOiB0YXJnZXQ7Cit9CisKK21vZHVsZS5leHBvcnRzID0gZ2V0RXZlbnRU
YXJnZXQ7CisKK30pKCkKK30seyIuL0V4ZWN1dGlvbkVudmlyb25tZW50IjoxOX1dLDcxOltmdW5j
dGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFj
ZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZl
cnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUg
ZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWlu
IGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9s
aWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxl
IGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVu
ZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBX
SVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJl
c3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1
YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBM
aWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBnZXRUZXh0Q29udGVudEFjY2Vzc29yCisg
Ki8KKworInVzZSBzdHJpY3QiOworCit2YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJl
KCIuL0V4ZWN1dGlvbkVudmlyb25tZW50Iik7CisKK3ZhciBjb250ZW50S2V5ID0gbnVsbDsKKwor
LyoqCisgKiBHZXRzIHRoZSBrZXkgdXNlZCB0byBhY2Nlc3MgdGV4dCBjb250ZW50IG9uIGEgRE9N
IG5vZGUuCisgKgorICogQHJldHVybiB7P3N0cmluZ30gS2V5IHVzZWQgdG8gYWNjZXNzIHRleHQg
Y29udGVudC4KKyAqIEBpbnRlcm5hbAorICovCitmdW5jdGlvbiBnZXRUZXh0Q29udGVudEFjY2Vz
c29yKCkgeworICBpZiAoIWNvbnRlbnRLZXkgJiYgRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNl
RE9NKSB7CisgICAgY29udGVudEtleSA9ICdpbm5lclRleHQnIGluIGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2RpdicpID8KKyAgICAgICdpbm5lclRleHQnIDoKKyAgICAgICd0ZXh0Q29udGVudCc7
CisgIH0KKyAgcmV0dXJuIGNvbnRlbnRLZXk7Cit9CisKK21vZHVsZS5leHBvcnRzID0gZ2V0VGV4
dENvbnRlbnRBY2Nlc3NvcjsKKworfSx7Ii4vRXhlY3V0aW9uRW52aXJvbm1lbnQiOjE5fV0sNzI6
W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAx
MyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5z
ZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMg
ZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBv
YnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUu
b3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxp
Y2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0
ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywK
KyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIg
ZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMg
bGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIg
dGhlIExpY2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxlIGhhc0FycmF5TmF0dXJlCisgKi8K
KworLyoqCisgKiAgUGVyZm9ybSBhIGhldXJpc3RpYyB0ZXN0IHRvIGRldGVybWluZSBpZiBhbiBv
YmplY3QgaXMgImFycmF5LWxpa2UiLgorICoKKyAqICAgIEEgbW9uayBhc2tlZCBKb3NodSwgYSBa
ZW4gbWFzdGVyLCAiSGFzIGEgZG9nIEJ1ZGRoYSBuYXR1cmU/IgorICogICAgSm9zaHUgcmVwbGll
ZDogIk11LiIKKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIGlmIGl0cyBhcmd1bWVu
dCBoYXMgImFycmF5IG5hdHVyZSI6IGl0IHJldHVybnMKKyAqICB0cnVlIGlmIHRoZSBhcmd1bWVu
dCBpcyBhbiBhY3R1YWwgYXJyYXksIGFuIGBhcmd1bWVudHMnIG9iamVjdCwgb3IgYW4KKyAqICBI
VE1MQ29sbGVjdGlvbiAoZS5nLiBub2RlLmNoaWxkTm9kZXMgb3Igbm9kZS5nZXRFbGVtZW50c0J5
VGFnTmFtZSgpKS4KKyAqCisgKiAgQHBhcmFtICBvYmogICBBbiBvYmplY3QgdG8gdGVzdC4KKyAq
ICBAcmV0dXJuIGJvb2wgIFRydWUgaWYgdGhlIG9iamVjdCBpcyBhcnJheS1saWtlLgorICovCitm
dW5jdGlvbiBoYXNBcnJheU5hdHVyZShvYmopIHsKKyAgcmV0dXJuICgKKyAgICAvLyBub3QgbnVs
bC9mYWxzZQorICAgICEhb2JqICYmCisgICAgLy8gYXJyYXlzIGFyZSBvYmplY3RzLCBOb2RlTGlz
dHMgYXJlIGZ1bmN0aW9ucyBpbiBTYWZhcmkKKyAgICAodHlwZW9mIG9iaiA9PSAnb2JqZWN0JyB8
fCB0eXBlb2Ygb2JqID09ICdmdW5jdGlvbicpICYmCisgICAgLy8gcXVhY2tzIGxpa2UgYW4gYXJy
YXkKKyAgICAoJ2xlbmd0aCcgaW4gb2JqKSAmJgorICAgIC8vIG5vdCB3aW5kb3cKKyAgICAhKCdz
ZXRJbnRlcnZhbCcgaW4gb2JqKSAmJgorICAgIC8vIG5vIERPTSBub2RlIHNob3VsZCBiZSBjb25z
aWRlcmVkIGFuIGFycmF5LWxpa2UKKyAgICAvLyBhICdzZWxlY3QnIGVsZW1lbnQgaGFzICdsZW5n
dGgnIGFuZCAnaXRlbScgcHJvcGVydGllcworICAgICh0eXBlb2Ygb2JqLm5vZGVUeXBlICE9ICdu
dW1iZXInKSAmJgorICAgICgKKyAgICAgIC8vIGEgcmVhbCBhcnJheQorICAgICAgKEFycmF5Lmlz
QXJyYXkob2JqKSB8fAorICAgICAgLy8gYXJndW1lbnRzCisgICAgICAoJ2NhbGxlZScgaW4gb2Jq
KSB8fCAvLyBIVE1MQ29sbGVjdGlvbi9Ob2RlTGlzdAorICAgICAgJ2l0ZW0nIGluIG9iaikKKyAg
ICApCisgICk7Cit9CisKK21vZHVsZS5leHBvcnRzID0gaGFzQXJyYXlOYXR1cmU7CisKK30se31d
LDczOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0
IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExp
Y2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0
aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBt
YXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBh
Y2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBh
cHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFT
SVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0
aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNp
ZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVu
ZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBoeXBoZW5hdGUKKyAqIEB0
eXBlY2hlY2tzCisgKi8KKwordmFyIF91cHBlcmNhc2VQYXR0ZXJuID0gLyhbQS1aXSkvZzsKKwor
LyoqCisgKiBIeXBoZW5hdGVzIGEgY2FtZWxjYXNlZCBzdHJpbmcsIGZvciBleGFtcGxlOgorICoK
KyAqICAgPiBoeXBoZW5hdGUoJ2JhY2tncm91bmRDb2xvcicpCisgKiAgIDwgImJhY2tncm91bmQt
Y29sb3IiCisgKgorICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZworICogQHJldHVybiB7c3RyaW5n
fQorICovCitmdW5jdGlvbiBoeXBoZW5hdGUoc3RyaW5nKSB7CisgIHJldHVybiBzdHJpbmcucmVw
bGFjZShfdXBwZXJjYXNlUGF0dGVybiwgJy0kMScpLnRvTG93ZXJDYXNlKCk7Cit9CisKK21vZHVs
ZS5leHBvcnRzID0gaHlwaGVuYXRlOworCit9LHt9XSw3NDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgor
ICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJM
aWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlh
bmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExp
Y2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0y
LjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRv
IGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBp
cyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVT
IE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisg
KiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVy
bWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBA
cHJvdmlkZXNNb2R1bGUgaW5zZXJ0Tm9kZUF0CisgKi8KKworInVzZSBzdHJpY3QiOworCisvKioK
KyAqIEluc2VydHMgYG5vZGVgIGF0IGEgcGFydGljdWxhciBjaGlsZCBpbmRleC4gT3RoZXIgbm9k
ZXMgbW92ZSB0byBtYWtlIHJvb20uCisgKiBAcGFyYW0geyFFbGVtZW50fSByb290IFRoZSBwYXJl
bnQgcm9vdCBub2RlIHRvIGluc2VydCBpbnRvLgorICogQHBhcmFtIHshbm9kZX0gbm9kZSBUaGUg
bm9kZSB0byBpbnNlcnQuCisgKiBAcGFyYW0geyFudW1iZXJ9IGF0SW5kZXggVGhlIGluZGV4IGlu
IGByb290YCB0aGF0IGBub2RlYCBzaG91bGQgZXhpc3QgYXQuCisgKi8KK2Z1bmN0aW9uIGluc2Vy
dE5vZGVBdChyb290LCBub2RlLCBhdEluZGV4KSB7CisgIHZhciBjaGlsZE5vZGVzID0gcm9vdC5j
aGlsZE5vZGVzOworICAvLyBSZW1vdmUgZnJvbSBwYXJlbnQgc28gdGhhdCBpZiBub2RlIGlzIGFs
cmVhZHkgY2hpbGQgb2Ygcm9vdCwKKyAgLy8gYGNoaWxkTm9kZXNbYXRJbmRleF1gIGFscmVhZHkg
dGFrZXMgaW50byBhY2NvdW50IHRoZSByZW1vdmFsLgorICB2YXIgY3VyQXRJbmRleCA9IHJvb3Qu
Y2hpbGROb2Rlc1thdEluZGV4XTsKKyAgaWYgKGN1ckF0SW5kZXggPT09IG5vZGUpIHsKKyAgICBy
ZXR1cm4gbm9kZTsKKyAgfQorICBpZiAobm9kZS5wYXJlbnROb2RlKSB7CisgICAgbm9kZS5wYXJl
bnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpOworICB9CisgIGlmIChhdEluZGV4ID49IGNoaWxkTm9k
ZXMubGVuZ3RoKSB7CisgICAgcm9vdC5hcHBlbmRDaGlsZChub2RlKTsKKyAgfSBlbHNlIHsKKyAg
ICByb290Lmluc2VydEJlZm9yZShub2RlLCBjaGlsZE5vZGVzW2F0SW5kZXhdKTsKKyAgfQorICBy
ZXR1cm4gbm9kZTsKK30KKworbW9kdWxlLmV4cG9ydHMgPSBpbnNlcnROb2RlQXQ7CisKK30se31d
LDc1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0
IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExp
Y2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0
aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBt
YXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBh
Y2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBh
cHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFT
SVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0
aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNp
ZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVu
ZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBpbnZhcmlhbnQKKyAqLwor
CisvKioKKyAqIFVzZSBpbnZhcmlhbnQoKSB0byBhc3NlcnQgc3RhdGUgd2hpY2ggeW91ciBwcm9n
cmFtIGFzc3VtZXMgdG8gYmUgdHJ1ZS4KKyAqCisgKiBQcm92aWRlIHNwcmludGYgc3R5bGUgZm9y
bWF0IGFuZCBhcmd1bWVudHMgdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dAorICogd2hhdCBi
cm9rZSBhbmQgd2hhdCB5b3Ugd2VyZSBleHBlY3RpbmcuCisgKgorICogVGhlIGludmFyaWFudCBt
ZXNzYWdlIHdpbGwgYmUgc3RyaXBwZWQgaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBpbnZhcmlhbnQK
KyAqIHdpbGwgcmVtYWluIHRvIGVuc3VyZSBsb2dpYyBkb2VzIG5vdCBkaWZmZXIgaW4gcHJvZHVj
dGlvbi4KKyAqLworCitmdW5jdGlvbiBpbnZhcmlhbnQoY29uZGl0aW9uKSB7CisgIGlmICghY29u
ZGl0aW9uKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhcmlhbnQgVmlvbGF0aW9uJyk7Cisg
IH0KK30KKworbW9kdWxlLmV4cG9ydHMgPSBpbnZhcmlhbnQ7CisKK2lmICh0cnVlKSB7CisgIHZh
ciBpbnZhcmlhbnREZXYgPSBmdW5jdGlvbihjb25kaXRpb24sIGZvcm1hdCwgYSwgYiwgYywgZCwg
ZSwgZikgeworICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkgeworICAgICAgdGhyb3cgbmV3
IEVycm9yKCdpbnZhcmlhbnQgcmVxdWlyZXMgYW4gZXJyb3IgbWVzc2FnZSBhcmd1bWVudCcpOwor
ICAgIH0KKworICAgIGlmICghY29uZGl0aW9uKSB7CisgICAgICB2YXIgYXJncyA9IFthLCBiLCBj
LCBkLCBlLCBmXTsKKyAgICAgIHZhciBhcmdJbmRleCA9IDA7CisgICAgICB0aHJvdyBuZXcgRXJy
b3IoCisgICAgICAgICdJbnZhcmlhbnQgVmlvbGF0aW9uOiAnICsKKyAgICAgICAgZm9ybWF0LnJl
cGxhY2UoLyVzL2csIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJnc1thcmdJbmRleCsrXTsgfSkKKyAg
ICAgICk7CisgICAgfQorICB9OworCisgIG1vZHVsZS5leHBvcnRzID0gaW52YXJpYW50RGV2Owor
fQorCit9LHt9XSw3NjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAq
IENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhl
IEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5
IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2Uu
CisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRw
Oi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVx
dWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJl
CisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAi
QVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5Z
IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9y
IHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1p
dGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUgaXNFdmVu
dFN1cHBvcnRlZAorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIEV4ZWN1dGlvbkVudmlyb25t
ZW50ID0gcmVxdWlyZSgiLi9FeGVjdXRpb25FbnZpcm9ubWVudCIpOworCit2YXIgdGVzdE5vZGUs
IHVzZUhhc0ZlYXR1cmU7CitpZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7Cisg
IHRlc3ROb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgIHVzZUhhc0ZlYXR1
cmUgPQorICAgIGRvY3VtZW50LmltcGxlbWVudGF0aW9uICYmCisgICAgZG9jdW1lbnQuaW1wbGVt
ZW50YXRpb24uaGFzRmVhdHVyZSAmJgorICAgIC8vIGBoYXNGZWF0dXJlYCBhbHdheXMgcmV0dXJu
cyB0cnVlIGluIEZpcmVmb3ggMTkrLgorICAgIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmhhc0Zl
YXR1cmUoJycsICcnKSAhPT0gdHJ1ZTsKK30KKworLyoqCisgKiBDaGVja3MgaWYgYW4gZXZlbnQg
aXMgc3VwcG9ydGVkIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4KKyAqCisg
KiBOT1RFOiBUaGlzIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5IGZvciBub24tZ2VuZXJpYyBldmVu
dHMgc3VjaCBhcyBgY2hhbmdlYCwKKyAqIGByZXNldGAsIGBsb2FkYCwgYGVycm9yYCwgYW5kIGBz
ZWxlY3RgLgorICoKKyAqIEJvcnJvd3MgZnJvbSBNb2Rlcm5penIuCisgKgorICogQHBhcmFtIHtz
dHJpbmd9IGV2ZW50TmFtZVN1ZmZpeCBFdmVudCBuYW1lLCBlLmcuICJjbGljayIuCisgKiBAcGFy
YW0gez9ib29sZWFufSBjYXB0dXJlIENoZWNrIGlmIHRoZSBjYXB0dXJlIHBoYXNlIGlzIHN1cHBv
cnRlZC4KKyAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGV2ZW50IGlzIHN1cHBvcnRl
ZC4KKyAqIEBpbnRlcm5hbAorICogQGxpY2Vuc2UgTW9kZXJuaXpyIDMuMC4wcHJlIChDdXN0b20g
QnVpbGQpIHwgTUlUCisgKi8KK2Z1bmN0aW9uIGlzRXZlbnRTdXBwb3J0ZWQoZXZlbnROYW1lU3Vm
Zml4LCBjYXB0dXJlKSB7CisgIGlmICghdGVzdE5vZGUgfHwgKGNhcHR1cmUgJiYgIXRlc3ROb2Rl
LmFkZEV2ZW50TGlzdGVuZXIpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIHZhciBlbGVt
ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisKKyAgdmFyIGV2ZW50TmFtZSA9
ICdvbicgKyBldmVudE5hbWVTdWZmaXg7CisgIHZhciBpc1N1cHBvcnRlZCA9IGV2ZW50TmFtZSBp
biBlbGVtZW50OworCisgIGlmICghaXNTdXBwb3J0ZWQpIHsKKyAgICBlbGVtZW50LnNldEF0dHJp
YnV0ZShldmVudE5hbWUsICcnKTsKKyAgICBpc1N1cHBvcnRlZCA9IHR5cGVvZiBlbGVtZW50W2V2
ZW50TmFtZV0gPT09ICdmdW5jdGlvbic7CisgICAgaWYgKHR5cGVvZiBlbGVtZW50W2V2ZW50TmFt
ZV0gIT09ICd1bmRlZmluZWQnKSB7CisgICAgICBlbGVtZW50W2V2ZW50TmFtZV0gPSB1bmRlZmlu
ZWQ7CisgICAgfQorICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGV2ZW50TmFtZSk7CisgIH0K
KworICBpZiAoIWlzU3VwcG9ydGVkICYmIHVzZUhhc0ZlYXR1cmUgJiYgZXZlbnROYW1lU3VmZml4
ID09PSAnd2hlZWwnKSB7CisgICAgLy8gVGhpcyBpcyB0aGUgb25seSB3YXkgdG8gdGVzdCBzdXBw
b3J0IGZvciB0aGUgYHdoZWVsYCBldmVudCBpbiBJRTkrLgorICAgIGlzU3VwcG9ydGVkID0gZG9j
dW1lbnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSgnRXZlbnRzLndoZWVsJywgJzMuMCcpOwor
ICB9CisKKyAgZWxlbWVudCA9IG51bGw7CisgIHJldHVybiBpc1N1cHBvcnRlZDsKK30KKworbW9k
dWxlLmV4cG9ydHMgPSBpc0V2ZW50U3VwcG9ydGVkOworCit9LHsiLi9FeGVjdXRpb25FbnZpcm9u
bWVudCI6MTl9XSw3NzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAq
IENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhl
IEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5
IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2Uu
CisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRw
Oi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVx
dWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJl
CisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAi
QVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5Z
IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9y
IHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1p
dGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUgam9pbkNs
YXNzZXMKKyAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5CisgKi8KKworInVzZSBzdHJpY3QiOwor
CisvKioKKyAqIENvbWJpbmVzIG11bHRpcGxlIGNsYXNzTmFtZSBzdHJpbmdzIGludG8gb25lLgor
ICogaHR0cDovL2pzcGVyZi5jb20vam9pbmNsYXNzZXMtYXJncy12cy1hcnJheQorICoKKyAqIEBw
YXJhbSB7Li4uP3N0cmluZ30gY2xhc3NlcworICogQHJldHVybiB7c3RyaW5nfQorICovCitmdW5j
dGlvbiBqb2luQ2xhc3NlcyhjbGFzc05hbWUvKiwgLi4uICovKSB7CisgIGlmICghY2xhc3NOYW1l
KSB7CisgICAgY2xhc3NOYW1lID0gJyc7CisgIH0KKyAgdmFyIG5leHRDbGFzczsKKyAgdmFyIGFy
Z0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7CisgIGlmIChhcmdMZW5ndGggPiAxKSB7CisgICAg
Zm9yICh2YXIgaWkgPSAxOyBpaSA8IGFyZ0xlbmd0aDsgaWkrKykgeworICAgICAgbmV4dENsYXNz
ID0gYXJndW1lbnRzW2lpXTsKKyAgICAgIG5leHRDbGFzcyAmJiAoY2xhc3NOYW1lICs9ICcgJyAr
IG5leHRDbGFzcyk7CisgICAgfQorICB9CisgIHJldHVybiBjbGFzc05hbWU7Cit9CisKK21vZHVs
ZS5leHBvcnRzID0gam9pbkNsYXNzZXM7CisKK30se31dLDc4OltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAq
CisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUg
IkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs
aWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUg
TGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNF
LTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQg
dG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNl
IGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJ
RVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4K
KyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBw
ZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAq
IEBwcm92aWRlc01vZHVsZSBrZXlNaXJyb3IKKyAqLworCisidXNlIHN0cmljdCI7CisKK3ZhciB0
aHJvd0lmID0gcmVxdWlyZSgiLi90aHJvd0lmIik7CisKK3ZhciBOT1RfT0JKRUNUX0VSUk9SID0g
J05PVF9PQkpFQ1RfRVJST1InOworaWYgKHRydWUpIHsKKyAgTk9UX09CSkVDVF9FUlJPUiA9ICdr
ZXlNaXJyb3Igb25seSB3b3JrcyBvbiBvYmplY3RzJzsKK30KKworLyoqCisgKiBVdGlsaXR5IGZv
ciBjb25zdHJ1Y3RpbmcgZW51bXMgd2l0aCBrZXlzIGJlaW5nIGVxdWFsIHRvIHRoZSBhc3NvY2lh
dGVkCisgKiB2YWx1ZXMsIGV2ZW4gd2hlbiB1c2luZyBhZHZhbmNlZCBrZXkgY3J1c2hpbmcuIFRo
aXMgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcsCisgKiBidXQgYWxzbyBmb3IgdXNpbmcgdGhlIHZh
bHVlcyB0aGVtc2VsdmVzIGFzIGxvb2t1cHMgaW50byB0aGUgZW51bS4KKyAqIEV4YW1wbGU6Cisg
KiB2YXIgQ09MT1JTID0ga2V5TWlycm9yKHtibHVlOiBudWxsLCByZWQ6IG51bGx9KTsKKyAqIHZh
ciBteUNvbG9yID0gQ09MT1JTLmJsdWU7CisgKiB2YXIgaXNDb2xvclZhbGlkID0gISFDT0xPUlNb
bXlDb2xvcl0KKyAqIFRoZSBsYXN0IGxpbmUgY291bGQgbm90IGJlIHBlcmZvcm1lZCBpZiB0aGUg
dmFsdWVzIG9mIHRoZSBnZW5lcmF0ZWQgZW51bSB3ZXJlCisgKiBub3QgZXF1YWwgdG8gdGhlaXIg
a2V5cy4KKyAqIElucHV0OiAge2tleTE6IHZhbDEsIGtleTI6IHZhbDJ9CisgKiBPdXRwdXQ6IHtr
ZXkxOiBrZXkxLCBrZXkyOiBrZXkyfQorICovCit2YXIga2V5TWlycm9yID0gZnVuY3Rpb24ob2Jq
KSB7CisgIHZhciByZXQgPSB7fTsKKyAgdmFyIGtleTsKKworICB0aHJvd0lmKCEob2JqIGluc3Rh
bmNlb2YgT2JqZWN0KSB8fCBBcnJheS5pc0FycmF5KG9iaiksIE5PVF9PQkpFQ1RfRVJST1IpOwor
CisgIGZvciAoa2V5IGluIG9iaikgeworICAgIGlmICghb2JqLmhhc093blByb3BlcnR5KGtleSkp
IHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICByZXRba2V5XSA9IGtleTsKKyAgfQorICBy
ZXR1cm4gcmV0OworfTsKKworbW9kdWxlLmV4cG9ydHMgPSBrZXlNaXJyb3I7CisKK30seyIuL3Ro
cm93SWYiOjg2fV0sNzk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisg
KiBDb3B5cmlnaHQgMjAxMyBGYWNlYm9vaywgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRo
ZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1h
eSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNl
LgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0
cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJl
cXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2Fy
ZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4g
IkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFO
WSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZv
ciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGlt
aXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogQHByb3ZpZGVzTW9kdWxlIGtleU9m
CisgKi8KKworLyoqCisgKiBBbGxvd3MgZXh0cmFjdGlvbiBvZiBhIG1pbmlmaWVkIGtleS4gTGV0
J3MgdGhlIGJ1aWxkIHN5c3RlbSBtaW5pZnkga2V5cworICogd2l0aG91dCBsb29zaW5nIHRoZSBh
YmlsaXR5IHRvIGR5bmFtaWNhbGx5IHVzZSBrZXkgc3RyaW5ncyBhcyB2YWx1ZXMKKyAqIHRoZW1z
ZWx2ZXMuIFBhc3MgaW4gYW4gb2JqZWN0IHdpdGggYSBzaW5nbGUga2V5L3ZhbCBwYWlyIGFuZCBp
dCB3aWxsIHJldHVybgorICogeW91IHRoZSBzdHJpbmcga2V5IG9mIHRoYXQgc2luZ2xlIHJlY29y
ZC4gU3VwcG9zZSB5b3Ugd2FudCB0byBncmFiIHRoZQorICogdmFsdWUgZm9yIGEga2V5ICdjbGFz
c05hbWUnIGluc2lkZSBvZiBhbiBvYmplY3QuIEtleS92YWwgbWluaWZpY2F0aW9uIG1heQorICog
aGF2ZSBhbGlhc2VkIHRoYXQga2V5IHRvIGJlICd4YTEyJy4ga2V5T2Yoe2NsYXNzTmFtZTogbnVs
bH0pIHdpbGwgcmV0dXJuCisgKiAneGExMicgaW4gdGhhdCBjYXNlLiBSZXNvbHZlIGtleXMgeW91
IHdhbnQgdG8gdXNlIG9uY2UgYXQgc3RhcnR1cCB0aW1lLCB0aGVuCisgKiByZXVzZSB0aG9zZSBy
ZXNvbHV0aW9ucy4KKyAqLwordmFyIGtleU9mID0gZnVuY3Rpb24ob25lS2V5T2JqKSB7CisgIHZh
ciBrZXk7CisgIGZvciAoa2V5IGluIG9uZUtleU9iaikgeworICAgIGlmICghb25lS2V5T2JqLmhh
c093blByb3BlcnR5KGtleSkpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICByZXR1cm4g
a2V5OworICB9CisgIHJldHVybiBudWxsOworfTsKKworCittb2R1bGUuZXhwb3J0cyA9IGtleU9m
OworCit9LHt9XSw4MDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAq
IENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhl
IEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5
IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2Uu
CisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRw
Oi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVx
dWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJl
CisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAi
QVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5Z
IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9y
IHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1p
dGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUgbWVtb2l6
ZVN0cmluZ09ubHkKKyAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5CisgKi8KKworInVzZSBzdHJp
Y3QiOworCisvKioKKyAqIE1lbW9pemVzIHRoZSByZXR1cm4gdmFsdWUgb2YgYSBmdW5jdGlvbiB0
aGF0IGFjY2VwdHMgb25lIHN0cmluZyBhcmd1bWVudC4KKyAqCisgKiBAcGFyYW0ge2Z1bmN0aW9u
fSBjYWxsYmFjaworICogQHJldHVybiB7ZnVuY3Rpb259CisgKi8KK2Z1bmN0aW9uIG1lbW9pemVT
dHJpbmdPbmx5KGNhbGxiYWNrKSB7CisgIHZhciBjYWNoZSA9IHt9OworICByZXR1cm4gZnVuY3Rp
b24oc3RyaW5nKSB7CisgICAgaWYgKGNhY2hlLmhhc093blByb3BlcnR5KHN0cmluZykpIHsKKyAg
ICAgIHJldHVybiBjYWNoZVtzdHJpbmddOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gY2Fj
aGVbc3RyaW5nXSA9IGNhbGxiYWNrLmNhbGwodGhpcywgc3RyaW5nKTsKKyAgICB9CisgIH07Cit9
CisKK21vZHVsZS5leHBvcnRzID0gbWVtb2l6ZVN0cmluZ09ubHk7CisKK30se31dLDgxOltmdW5j
dGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMgRmFj
ZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZl
cnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUg
ZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWlu
IGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9s
aWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxl
IGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVu
ZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBX
SVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJl
c3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1
YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBM
aWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBtZXJnZQorICovCisKKyJ1c2Ugc3RyaWN0
IjsKKwordmFyIG1lcmdlSW50byA9IHJlcXVpcmUoIi4vbWVyZ2VJbnRvIik7CisKKy8qKgorICog
U2hhbGxvdyBtZXJnZXMgdHdvIHN0cnVjdHVyZXMgaW50byBhIHJldHVybiB2YWx1ZSwgd2l0aG91
dCBtdXRhdGluZyBlaXRoZXIuCisgKgorICogQHBhcmFtIHs/b2JqZWN0fSBvbmUgT3B0aW9uYWwg
b2JqZWN0IHdpdGggcHJvcGVydGllcyB0byBtZXJnZSBmcm9tLgorICogQHBhcmFtIHs/b2JqZWN0
fSB0d28gT3B0aW9uYWwgb2JqZWN0IHdpdGggcHJvcGVydGllcyB0byBtZXJnZSBmcm9tLgorICog
QHJldHVybiB7b2JqZWN0fSBUaGUgc2hhbGxvdyBleHRlbnNpb24gb2Ygb25lIGJ5IHR3by4KKyAq
LwordmFyIG1lcmdlID0gZnVuY3Rpb24ob25lLCB0d28pIHsKKyAgdmFyIHJlc3VsdCA9IHt9Owor
ICBtZXJnZUludG8ocmVzdWx0LCBvbmUpOworICBtZXJnZUludG8ocmVzdWx0LCB0d28pOworICBy
ZXR1cm4gcmVzdWx0OworfTsKKworbW9kdWxlLmV4cG9ydHMgPSBtZXJnZTsKKworfSx7Ii4vbWVy
Z2VJbnRvIjo4M31dLDgyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0
aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBt
YXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5z
ZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0
dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyBy
ZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdh
cmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFu
ICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBB
TlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBm
b3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxp
bWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBtZXJn
ZUhlbHBlcnMKKyAqCisgKiByZXF1aXJlc1BvbHlmaWxsczogQXJyYXkuaXNBcnJheQorICovCisK
KyJ1c2Ugc3RyaWN0IjsKKwordmFyIGtleU1pcnJvciA9IHJlcXVpcmUoIi4va2V5TWlycm9yIik7
Cit2YXIgdGhyb3dJZiA9IHJlcXVpcmUoIi4vdGhyb3dJZiIpOworCisvKioKKyAqIE1heGltdW0g
bnVtYmVyIG9mIGxldmVscyB0byB0cmF2ZXJzZS4gV2lsbCBjYXRjaCBjaXJjdWxhciBzdHJ1Y3R1
cmVzLgorICogQGNvbnN0CisgKi8KK3ZhciBNQVhfTUVSR0VfREVQVEggPSAzNjsKKwordmFyIEVS
Uk9SUyA9IGtleU1pcnJvcih7CisgIE1FUkdFX0FSUkFZX0ZBSUw6IG51bGwsCisgIE1FUkdFX0NP
UkVfRkFJTFVSRTogbnVsbCwKKyAgTUVSR0VfVFlQRV9VU0FHRV9GQUlMVVJFOiBudWxsLAorICBN
RVJHRV9ERUVQX01BWF9MRVZFTFM6IG51bGwsCisgIE1FUkdFX0RFRVBfTk9fQVJSX1NUUkFURUdZ
OiBudWxsCit9KTsKKworaWYgKHRydWUpIHsKKyAgRVJST1JTID0geworICAgIE1FUkdFX0FSUkFZ
X0ZBSUw6CisgICAgICAnVW5zdXBwb3J0ZWQgdHlwZSBwYXNzZWQgdG8gYSBtZXJnZSBmdW5jdGlv
bi4gWW91IG1heSBoYXZlIHBhc3NlZCBhICcgKworICAgICAgJ3N0cnVjdHVyZSB0aGF0IGNvbnRh
aW5zIGFuIGFycmF5IGFuZCB0aGUgbWVyZ2UgZnVuY3Rpb24gZG9lcyBub3Qga25vdyAnICsKKyAg
ICAgICdob3cgdG8gbWVyZ2UgYXJyYXlzLiAnLAorCisgICAgTUVSR0VfQ09SRV9GQUlMVVJFOgor
ICAgICAgJ0NyaXRpY2FsIGFzc3VtcHRpb25zIGFib3V0IHRoZSBtZXJnZSBmdW5jdGlvbnMgaGF2
ZSBiZWVuIHZpb2xhdGVkLiAnICsKKyAgICAgICdUaGlzIGlzIHRoZSBmYXVsdCBvZiB0aGUgbWVy
Z2UgZnVuY3Rpb25zIHRoZW1zZWx2ZXMsIG5vdCBuZWNlc3NhcmlseSAnICsKKyAgICAgICd0aGUg
Y2FsbGVycy4nLAorCisgICAgTUVSR0VfVFlQRV9VU0FHRV9GQUlMVVJFOgorICAgICAgJ0NhbGxp
bmcgbWVyZ2UgZnVuY3Rpb24gd2l0aCBpbnZhbGlkIHR5cGVzLiBZb3UgbWF5IGNhbGwgbWVyZ2Ug
JyArCisgICAgICAnZnVuY3Rpb25zIChub24tYXJyYXkgbm9uLXRlcm1pbmFsKSBPUiAobnVsbC91
bmRlZmluZWQpIGFyZ3VtZW50cy4gJyArCisgICAgICAnbWVyZ2VJbnRvIGZ1bmN0aW9ucyBoYXZl
IHRoZSBzYW1lIHJlcXVpcmVtZW50cyBidXQgd2l0aCBhbiBhZGRlZCAnICsKKyAgICAgICdyZXN0
cmljdGlvbiB0aGF0IHRoZSBmaXJzdCBwYXJhbWV0ZXIgbXVzdCBub3QgYmUgbnVsbC91bmRlZmlu
ZWQuJywKKworICAgIE1FUkdFX0RFRVBfTUFYX0xFVkVMUzoKKyAgICAgICdNYXhpbXVtIGRlZXAg
bWVyZ2UgZGVwdGggZXhjZWVkZWQuIFlvdSBtYXkgYXR0ZW1wdGluZyB0byBtZXJnZSAnICsKKyAg
ICAgICdjaXJjdWxhciBzdHJ1Y3R1cmVzIGluIGFuIHVuc3VwcG9ydGVkIHdheS4nLAorICAgIE1F
UkdFX0RFRVBfTk9fQVJSX1NUUkFURUdZOgorICAgICAgJ1lvdSBtdXN0IHByb3ZpZGUgYW4gYXJy
YXkgc3RyYXRlZ3kgdG8gZGVlcCBtZXJnZSBmdW5jdGlvbnMgdG8gJyArCisgICAgICAnaW5zdHJ1
Y3QgdGhlIGRlZXAgbWVyZ2UgaG93IHRvIHJlc29sdmUgbWVyZ2luZyB0d28gYXJyYXlzLicKKyAg
fTsKK30KKworLyoqCisgKiBXZSB3b24ndCB3b3JyeSBhYm91dCBlZGdlIGNhc2VzIGxpa2UgbmV3
IFN0cmluZygneCcpIG9yIG5ldyBCb29sZWFuKHRydWUpLgorICogRnVuY3Rpb25zIGFyZSBjb25z
aWRlcmVkIHRlcm1pbmFscywgYW5kIGFycmF5cyBhcmUgbm90LgorICogQHBhcmFtIHsqfSBvIFRo
ZSBpdGVtL29iamVjdC92YWx1ZSB0byB0ZXN0LgorICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBp
ZmYgdGhlIGFyZ3VtZW50IGlzIGEgdGVybWluYWwuCisgKi8KK3ZhciBpc1Rlcm1pbmFsID0gZnVu
Y3Rpb24obykgeworICByZXR1cm4gdHlwZW9mIG8gIT09ICdvYmplY3QnIHx8IG8gPT09IG51bGw7
Cit9OworCit2YXIgbWVyZ2VIZWxwZXJzID0geworCisgIE1BWF9NRVJHRV9ERVBUSDogTUFYX01F
UkdFX0RFUFRILAorCisgIGlzVGVybWluYWw6IGlzVGVybWluYWwsCisKKyAgLyoqCisgICAqIENv
bnZlcnRzIG51bGwvdW5kZWZpbmVkIHZhbHVlcyBpbnRvIGVtcHR5IG9iamVjdC4KKyAgICoKKyAg
ICogQHBhcmFtIHs/T2JqZWN0PX0gYXJnIEFyZ3VtZW50IHRvIGJlIG5vcm1hbGl6ZWQgKG51bGxh
YmxlIG9wdGlvbmFsKQorICAgKiBAcmV0dXJuIHshT2JqZWN0fQorICAgKi8KKyAgbm9ybWFsaXpl
TWVyZ2VBcmc6IGZ1bmN0aW9uKGFyZykgeworICAgIHJldHVybiBhcmcgPT09IHVuZGVmaW5lZCB8
fCBhcmcgPT09IG51bGwgPyB7fSA6IGFyZzsKKyAgfSwKKworICAvKioKKyAgICogSWYgbWVyZ2lu
ZyBBcnJheXMsIGEgbWVyZ2Ugc3RyYXRlZ3kgKm11c3QqIGJlIHN1cHBsaWVkLiBJZiBub3QsIGl0
IGlzCisgICAqIGxpa2VseSB0aGUgY2FsbGVyJ3MgZmF1bHQuIElmIHRoaXMgZnVuY3Rpb24gaXMg
ZXZlciBjYWxsZWQgd2l0aCBhbnl0aGluZworICAgKiBidXQgYG9uZWAgYW5kIGB0d29gIGJlaW5n
IGBBcnJheWBzLCBpdCBpcyB0aGUgZmF1bHQgb2YgdGhlIG1lcmdlIHV0aWxpdGllcy4KKyAgICoK
KyAgICogQHBhcmFtIHsqfSBvbmUgQXJyYXkgdG8gbWVyZ2UgaW50by4KKyAgICogQHBhcmFtIHsq
fSB0d28gQXJyYXkgdG8gbWVyZ2UgZnJvbS4KKyAgICovCisgIGNoZWNrTWVyZ2VBcnJheUFyZ3M6
IGZ1bmN0aW9uKG9uZSwgdHdvKSB7CisgICAgdGhyb3dJZigKKyAgICAgICFBcnJheS5pc0FycmF5
KG9uZSkgfHwgIUFycmF5LmlzQXJyYXkodHdvKSwKKyAgICAgIEVSUk9SUy5NRVJHRV9DT1JFX0ZB
SUxVUkUKKyAgICApOworICB9LAorCisgIC8qKgorICAgKiBAcGFyYW0geyp9IG9uZSBPYmplY3Qg
dG8gbWVyZ2UgaW50by4KKyAgICogQHBhcmFtIHsqfSB0d28gT2JqZWN0IHRvIG1lcmdlIGZyb20u
CisgICAqLworICBjaGVja01lcmdlT2JqZWN0QXJnczogZnVuY3Rpb24ob25lLCB0d28pIHsKKyAg
ICBtZXJnZUhlbHBlcnMuY2hlY2tNZXJnZU9iamVjdEFyZyhvbmUpOworICAgIG1lcmdlSGVscGVy
cy5jaGVja01lcmdlT2JqZWN0QXJnKHR3byk7CisgIH0sCisKKyAgLyoqCisgICAqIEBwYXJhbSB7
Kn0gYXJnCisgICAqLworICBjaGVja01lcmdlT2JqZWN0QXJnOiBmdW5jdGlvbihhcmcpIHsKKyAg
ICB0aHJvd0lmKGlzVGVybWluYWwoYXJnKSB8fCBBcnJheS5pc0FycmF5KGFyZyksIEVSUk9SUy5N
RVJHRV9DT1JFX0ZBSUxVUkUpOworICB9LAorCisgIC8qKgorICAgKiBDaGVja3MgdGhhdCBhIG1l
cmdlIHdhcyBub3QgZ2l2ZW4gYSBjaXJjdWxhciBvYmplY3Qgb3IgYW4gb2JqZWN0IHRoYXQgaGFk
CisgICAqIHRvbyBncmVhdCBvZiBkZXB0aC4KKyAgICoKKyAgICogQHBhcmFtIHtudW1iZXJ9IExl
dmVsIG9mIHJlY3Vyc2lvbiB0byB2YWxpZGF0ZSBhZ2FpbnN0IG1heGltdW0uCisgICAqLworICBj
aGVja01lcmdlTGV2ZWw6IGZ1bmN0aW9uKGxldmVsKSB7CisgICAgdGhyb3dJZihsZXZlbCA+PSBN
QVhfTUVSR0VfREVQVEgsIEVSUk9SUy5NRVJHRV9ERUVQX01BWF9MRVZFTFMpOworICB9LAorCisg
IC8qKgorICAgKiBDaGVja3MgdGhhdCBhIG1lcmdlIHdhcyBub3QgZ2l2ZW4gYSBjaXJjdWxhciBv
YmplY3Qgb3IgYW4gb2JqZWN0IHRoYXQgaGFkCisgICAqIHRvbyBncmVhdCBvZiBkZXB0aC4KKyAg
ICoKKyAgICogQHBhcmFtIHtudW1iZXJ9IExldmVsIG9mIHJlY3Vyc2lvbiB0byB2YWxpZGF0ZSBh
Z2FpbnN0IG1heGltdW0uCisgICAqLworICBjaGVja0FycmF5U3RyYXRlZ3k6IGZ1bmN0aW9uKHN0
cmF0ZWd5KSB7CisgICAgdGhyb3dJZigKKyAgICAgIHN0cmF0ZWd5ICE9PSB1bmRlZmluZWQgJiYg
IShzdHJhdGVneSBpbiBtZXJnZUhlbHBlcnMuQXJyYXlTdHJhdGVnaWVzKSwKKyAgICAgIEVSUk9S
Uy5NRVJHRV9ERUVQX05PX0FSUl9TVFJBVEVHWQorICAgICk7CisgIH0sCisKKyAgLyoqCisgICAq
IFNldCBvZiBwb3NzaWJsZSBiZWhhdmlvcnMgb2YgbWVyZ2UgYWxnb3JpdGhtcyB3aGVuIGVuY291
bnRlcmluZyB0d28gQXJyYXlzCisgICAqIHRoYXQgbXVzdCBiZSBtZXJnZWQgdG9nZXRoZXIuCisg
ICAqIC0gYGNsb2JiZXJgOiBUaGUgbGVmdCBgQXJyYXlgIGlzIGlnbm9yZWQuCisgICAqIC0gYGlu
ZGV4QnlJbmRleGA6IFRoZSByZXN1bHQgaXMgYWNoaWV2ZWQgYnkgcmVjdXJzaXZlbHkgZGVlcCBt
ZXJnaW5nIGF0CisgICAqICAgZWFjaCBpbmRleC4gKG5vdCB5ZXQgc3VwcG9ydGVkLikKKyAgICov
CisgIEFycmF5U3RyYXRlZ2llczoga2V5TWlycm9yKHsKKyAgICBDbG9iYmVyOiB0cnVlLAorICAg
IEluZGV4QnlJbmRleDogdHJ1ZQorICB9KSwKKworICBFUlJPUlM6IEVSUk9SUworfTsKKworbW9k
dWxlLmV4cG9ydHMgPSBtZXJnZUhlbHBlcnM7CisKK30seyIuL2tleU1pcnJvciI6NzgsIi4vdGhy
b3dJZiI6ODZ9XSw4MzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAq
IENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhl
IEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5
IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2Uu
CisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRw
Oi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVx
dWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJl
CisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAi
QVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5Z
IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9y
IHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1p
dGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUgbWVyZ2VJ
bnRvCisgKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seQorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwor
dmFyIG1lcmdlSGVscGVycyA9IHJlcXVpcmUoIi4vbWVyZ2VIZWxwZXJzIik7CisKK3ZhciBjaGVj
a01lcmdlT2JqZWN0QXJnID0gbWVyZ2VIZWxwZXJzLmNoZWNrTWVyZ2VPYmplY3RBcmc7CisKKy8q
KgorICogU2hhbGxvdyBtZXJnZXMgdHdvIHN0cnVjdHVyZXMgYnkgbXV0YXRpbmcgdGhlIGZpcnN0
IHBhcmFtZXRlci4KKyAqCisgKiBAcGFyYW0ge29iamVjdH0gb25lIE9iamVjdCB0byBiZSBtZXJn
ZWQgaW50by4KKyAqIEBwYXJhbSB7P29iamVjdH0gdHdvIE9wdGlvbmFsIG9iamVjdCB3aXRoIHBy
b3BlcnRpZXMgdG8gbWVyZ2UgZnJvbS4KKyAqLworZnVuY3Rpb24gbWVyZ2VJbnRvKG9uZSwgdHdv
KSB7CisgIGNoZWNrTWVyZ2VPYmplY3RBcmcob25lKTsKKyAgaWYgKHR3byAhPSBudWxsKSB7Cisg
ICAgY2hlY2tNZXJnZU9iamVjdEFyZyh0d28pOworICAgIGZvciAodmFyIGtleSBpbiB0d28pIHsK
KyAgICAgIGlmICghdHdvLmhhc093blByb3BlcnR5KGtleSkpIHsKKyAgICAgICAgY29udGludWU7
CisgICAgICB9CisgICAgICBvbmVba2V5XSA9IHR3b1trZXldOworICAgIH0KKyAgfQorfQorCitt
b2R1bGUuZXhwb3J0cyA9IG1lcmdlSW50bzsKKworfSx7Ii4vbWVyZ2VIZWxwZXJzIjo4Mn1dLDg0
OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIw
MTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vu
c2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlz
IGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkg
b2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hl
Lm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBs
aWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMs
CisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVy
IGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmlj
IGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVy
IHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSBtaXhJbnRvCisgKi8KKworInVz
ZSBzdHJpY3QiOworCisvKioKKyAqIFNpbXBseSBjb3BpZXMgcHJvcGVydGllcyB0byB0aGUgcHJv
dG90eXBlLgorICovCit2YXIgbWl4SW50byA9IGZ1bmN0aW9uKGNvbnN0cnVjdG9yLCBtZXRob2RC
YWcpIHsKKyAgdmFyIG1ldGhvZE5hbWU7CisgIGZvciAobWV0aG9kTmFtZSBpbiBtZXRob2RCYWcp
IHsKKyAgICBpZiAoIW1ldGhvZEJhZy5oYXNPd25Qcm9wZXJ0eShtZXRob2ROYW1lKSkgeworICAg
ICAgY29udGludWU7CisgICAgfQorICAgIGNvbnN0cnVjdG9yLnByb3RvdHlwZVttZXRob2ROYW1l
XSA9IG1ldGhvZEJhZ1ttZXRob2ROYW1lXTsKKyAgfQorfTsKKworbW9kdWxlLmV4cG9ydHMgPSBt
aXhJbnRvOworCit9LHt9XSw4NTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIENvcHlyaWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5k
ZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5
b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExp
Y2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisg
KiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxl
c3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNv
ZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBv
biBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMg
T0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vu
c2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisg
KiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUg
b2JqTWFwS2V5VmFsCisgKi8KKworInVzZSBzdHJpY3QiOworCisvKioKKyAqIEJlaGF2ZXMgdGhl
IHNhbWUgYXMgYG9iak1hcGAgYnV0IGludm9rZXMgZnVuYyB3aXRoIHRoZSBrZXkgZmlyc3QsIGFu
ZCB2YWx1ZQorICogc2Vjb25kLiBVc2UgYG9iak1hcGAgdW5sZXNzIHlvdSBuZWVkIHRoaXMgc3Bl
Y2lhbCBjYXNlLgorICogSW52b2tlcyBmdW5jIGFzOgorICoKKyAqICAgZnVuYyhrZXksIHZhbHVl
LCBpdGVyYXRpb24pCisgKgorICogQHBhcmFtIHs/b2JqZWN0fSBvYmogT2JqZWN0IHRvIG1hcCBr
ZXlzIG92ZXIKKyAqIEBwYXJhbSB7IWZ1bmN0aW9ufSBmdW5jIEludm9rZWQgZm9yIGVhY2gga2V5
L3ZhbCBwYWlyLgorICogQHBhcmFtIHs/Kn0gY29udGV4dAorICogQHJldHVybiB7P29iamVjdH0g
UmVzdWx0IG9mIG1hcHBpbmcgb3IgbnVsbCBpZiBvYmogaXMgZmFsc2V5CisgKi8KK2Z1bmN0aW9u
IG9iak1hcEtleVZhbChvYmosIGZ1bmMsIGNvbnRleHQpIHsKKyAgaWYgKCFvYmopIHsKKyAgICBy
ZXR1cm4gbnVsbDsKKyAgfQorICB2YXIgaSA9IDA7CisgIHZhciByZXQgPSB7fTsKKyAgZm9yICh2
YXIga2V5IGluIG9iaikgeworICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkgeworICAg
ICAgcmV0W2tleV0gPSBmdW5jLmNhbGwoY29udGV4dCwga2V5LCBvYmpba2V5XSwgaSsrKTsKKyAg
ICB9CisgIH0KKyAgcmV0dXJuIHJldDsKK30KKworbW9kdWxlLmV4cG9ydHMgPSBvYmpNYXBLZXlW
YWw7CisKK30se31dLDg2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0
aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBt
YXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5z
ZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0
dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyBy
ZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdh
cmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFu
ICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBB
TlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBm
b3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxp
bWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIEBwcm92aWRlc01vZHVsZSB0aHJv
d0lmCisgKi8KKworInVzZSBzdHJpY3QiOworCit2YXIgdGhyb3dJZiA9IGZ1bmN0aW9uKGNvbmRp
dGlvbiwgZXJyKSB7CisgIGlmIChjb25kaXRpb24pIHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoZXJy
KTsKKyAgfQorfTsKKworbW9kdWxlLmV4cG9ydHMgPSB0aHJvd0lmOworCit9LHt9XSw4NzpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisoZnVuY3Rpb24oKXsvKioKKyAqIENvcHly
aWdodCAyMDEzIEZhY2Vib29rLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNo
ZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1
c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZ
b3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3
LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQg
YnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBk
aXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMi
IEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQs
IGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBz
cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9u
cyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBAcHJvdmlkZXNNb2R1bGUgdHJhdmVyc2VBbGxD
aGlsZHJlbgorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIFJlYWN0Q29tcG9uZW50ID0gcmVx
dWlyZSgiLi9SZWFjdENvbXBvbmVudCIpOwordmFyIFJlYWN0VGV4dENvbXBvbmVudCA9IHJlcXVp
cmUoIi4vUmVhY3RUZXh0Q29tcG9uZW50Iik7CisKK3ZhciB0aHJvd0lmID0gcmVxdWlyZSgiLi90
aHJvd0lmIik7CisKKy8qKgorICogQHBvbHlGaWxsIEFycmF5LmlzQXJyYXkKKyAqLwordmFyIERV
UExJQ0FURV9LRVlfRVJST1IgPSAnRFVQTElDQVRFX0tFWV9FUlJPUic7Cit2YXIgSU5WQUxJRF9D
SElMRCA9ICdJTlZBTElEX0NISUxEJzsKK2lmICh0cnVlKSB7CisgIElOVkFMSURfQ0hJTEQgPQor
ICAgICdZb3UgbWF5IG5vdCBwYXNzIGEgY2hpbGQgb2YgdGhhdCB0eXBlIHRvIGEgUmVhY3QgY29t
cG9uZW50LiBJdCAnICsKKyAgICAnaXMgYSBjb21tb24gbWlzdGFrZSB0byB0cnkgdG8gcGFzcyBh
IHN0YW5kYXJkIGJyb3dzZXIgRE9NIGVsZW1lbnQgJyArCisgICAgJ2FzIGEgY2hpbGQgb2YgYSBS
ZWFjdCBjb21wb25lbnQuJzsKKyAgRFVQTElDQVRFX0tFWV9FUlJPUiA9CisgICAgJ1lvdSBoYXZl
IHR3byBjaGlsZHJlbiB3aXRoIGlkZW50aWNhbCBrZXlzLiBNYWtlIHN1cmUgdGhhdCB5b3Ugc2V0
IHRoZSAnICsKKyAgICAnImtleSIgcHJvcGVydHkgdG8gYSB1bmlxdWUgdmFsdWUgc3VjaCBhcyBh
IHJvdyBJRC4nOworfQorCisvKioKKyAqIFRPRE86IFRlc3QgdGhhdDoKKyAqIDEuIGBtYXBDaGls
ZHJlbmAgdHJhbnNmb3JtcyBzdHJpbmdzIGFuZCBudW1iZXJzIGludG8gYFJlYWN0VGV4dENvbXBv
bmVudGAuCisgKiAyLiBpdCgnc2hvdWxkIGZhaWwgd2hlbiBzdXBwbGllZCBkdXBsaWNhdGUga2V5
JywgZnVuY3Rpb24oKSB7CisgKiAzLiBUaGF0IGEgc2luZ2xlIGNoaWxkIGFuZCBhbiBhcnJheSB3
aXRoIG9uZSBpdGVtIGhhdmUgdGhlIHNhbWUga2V5IHBhdHRlcm4uCisgKiB9KTsKKyAqLworCisv
KioKKyAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLgorICog
QHBhcmFtIHshc3RyaW5nfSBuYW1lU29GYXIgTmFtZSBvZiB0aGUga2V5IHBhdGggc28gZmFyLgor
ICogQHBhcmFtIHshbnVtYmVyfSBpbmRleFNvRmFyIE51bWJlciBvZiBjaGlsZHJlbiBlbmNvdW50
ZXJlZCB1bnRpbCB0aGlzIHBvaW50LgorICogQHBhcmFtIHshZnVuY3Rpb259IGNhbGxiYWNrIENh
bGxiYWNrIHRvIGludm9rZSB3aXRoIGVhY2ggY2hpbGQgZm91bmQuCisgKiBAcGFyYW0gez8qfSB0
cmF2ZXJzZUNvbnRleHQgVXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIHRocm91Z2hvdXQgdGhlIHRy
YXZlcnNhbAorICogcHJvY2Vzcy4KKyAqIEByZXR1cm4geyFudW1iZXJ9IFRoZSBudW1iZXIgb2Yg
Y2hpbGRyZW4gaW4gdGhpcyBzdWJ0cmVlLgorICovCit2YXIgdHJhdmVyc2VBbGxDaGlsZHJlbklt
cGwgPQorICBmdW5jdGlvbihjaGlsZHJlbiwgbmFtZVNvRmFyLCBpbmRleFNvRmFyLCBjYWxsYmFj
aywgdHJhdmVyc2VDb250ZXh0KSB7CisgICAgdmFyIHN1YnRyZWVDb3VudCA9IDA7ICAvLyBDb3Vu
dCBvZiBjaGlsZHJlbiBmb3VuZCBpbiB0aGUgY3VycmVudCBzdWJ0cmVlLgorICAgIGlmIChBcnJh
eS5pc0FycmF5KGNoaWxkcmVuKSkgeworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJl
bi5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTsKKyAgICAg
ICAgdmFyIG5leHROYW1lID0gbmFtZVNvRmFyICsgJ1snICsgUmVhY3RDb21wb25lbnQuZ2V0S2V5
KGNoaWxkLCBpKSArICddJzsKKyAgICAgICAgdmFyIG5leHRJbmRleCA9IGluZGV4U29GYXIgKyBz
dWJ0cmVlQ291bnQ7CisgICAgICAgIHN1YnRyZWVDb3VudCArPSB0cmF2ZXJzZUFsbENoaWxkcmVu
SW1wbCgKKyAgICAgICAgICBjaGlsZCwKKyAgICAgICAgICBuZXh0TmFtZSwKKyAgICAgICAgICBu
ZXh0SW5kZXgsCisgICAgICAgICAgY2FsbGJhY2ssCisgICAgICAgICAgdHJhdmVyc2VDb250ZXh0
CisgICAgICAgICk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHZhciB0eXBlID0gdHlw
ZW9mIGNoaWxkcmVuOworICAgICAgdmFyIGlzT25seUNoaWxkID0gbmFtZVNvRmFyID09PSAnJzsK
KyAgICAgIC8vIElmIGl0J3MgdGhlIG9ubHkgY2hpbGQsIHRyZWF0IHRoZSBuYW1lIGFzIGlmIGl0
IHdhcyB3cmFwcGVkIGluIGFuIGFycmF5CisgICAgICAvLyBzbyB0aGF0IGl0J3MgY29uc2lzdGVu
dCBpZiB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGdyb3dzCisgICAgICB2YXIgc3RvcmFnZU5hbWUg
PSBpc09ubHlDaGlsZCA/CisgICAgICAgICdbJyArIFJlYWN0Q29tcG9uZW50LmdldEtleShjaGls
ZHJlbiwgMCkgKyAnXScgOgorICAgICAgICBuYW1lU29GYXI7CisgICAgICBpZiAoY2hpbGRyZW4g
PT09IG51bGwgfHwgY2hpbGRyZW4gPT09IHVuZGVmaW5lZCB8fCB0eXBlID09PSAnYm9vbGVhbicp
IHsKKyAgICAgICAgLy8gQWxsIG9mIHRoZSBhYm92ZSBhcmUgcGVyY2VpdmVkIGFzIG51bGwuCisg
ICAgICAgIGNhbGxiYWNrKHRyYXZlcnNlQ29udGV4dCwgbnVsbCwgc3RvcmFnZU5hbWUsIGluZGV4
U29GYXIpOworICAgICAgICBzdWJ0cmVlQ291bnQgPSAxOworICAgICAgfSBlbHNlIGlmIChjaGls
ZHJlbi5tb3VudENvbXBvbmVudEludG9Ob2RlKSB7CisgICAgICAgIGNhbGxiYWNrKHRyYXZlcnNl
Q29udGV4dCwgY2hpbGRyZW4sIHN0b3JhZ2VOYW1lLCBpbmRleFNvRmFyKTsKKyAgICAgICAgc3Vi
dHJlZUNvdW50ID0gMTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmICh0eXBlID09PSAnb2Jq
ZWN0JykgeworICAgICAgICAgIHRocm93SWYoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubm9kZVR5cGUg
PT09IDEsIElOVkFMSURfQ0hJTEQpOworICAgICAgICAgIGZvciAodmFyIGtleSBpbiBjaGlsZHJl
bikgeworICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmhhc093blByb3BlcnR5KGtleSkpIHsKKyAg
ICAgICAgICAgICAgc3VidHJlZUNvdW50ICs9IHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKAorICAg
ICAgICAgICAgICAgIGNoaWxkcmVuW2tleV0sCisgICAgICAgICAgICAgICAgbmFtZVNvRmFyICsg
J3snICsga2V5ICsgJ30nLAorICAgICAgICAgICAgICAgIGluZGV4U29GYXIgKyBzdWJ0cmVlQ291
bnQsCisgICAgICAgICAgICAgICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgdHJhdmVyc2VD
b250ZXh0CisgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB7CisgICAgICAgICAgdmFyIG5vcm1h
bGl6ZWRUZXh0ID0gbmV3IFJlYWN0VGV4dENvbXBvbmVudChjaGlsZHJlbik7CisgICAgICAgICAg
Y2FsbGJhY2sodHJhdmVyc2VDb250ZXh0LCBub3JtYWxpemVkVGV4dCwgc3RvcmFnZU5hbWUsIGlu
ZGV4U29GYXIpOworICAgICAgICAgIHN1YnRyZWVDb3VudCArPSAxOworICAgICAgICB9IGVsc2Ug
aWYgKHR5cGUgPT09ICdudW1iZXInKSB7CisgICAgICAgICAgdmFyIG5vcm1hbGl6ZWROdW1iZXIg
PSBuZXcgUmVhY3RUZXh0Q29tcG9uZW50KCcnICsgY2hpbGRyZW4pOworICAgICAgICAgIGNhbGxi
YWNrKHRyYXZlcnNlQ29udGV4dCwgbm9ybWFsaXplZE51bWJlciwgc3RvcmFnZU5hbWUsIGluZGV4
U29GYXIpOworICAgICAgICAgIHN1YnRyZWVDb3VudCArPSAxOworICAgICAgICB9CisgICAgICB9
CisgICAgfQorICAgIHJldHVybiBzdWJ0cmVlQ291bnQ7CisgIH07CisKKy8qKgorICogVHJhdmVy
c2VzIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxk
cmVuYCwgYnV0CisgKiBtaWdodCBhbHNvIGJlIHNwZWNpZmllZCB0aHJvdWdoIGF0dHJpYnV0ZXM6
CisgKgorICogLSBgdHJhdmVyc2VBbGxDaGlsZHJlbih0aGlzLnByb3BzLmNoaWxkcmVuLCAuLi4p
YAorICogLSBgdHJhdmVyc2VBbGxDaGlsZHJlbih0aGlzLnByb3BzLmxlZnRQYW5lbENoaWxkcmVu
LCAuLi4pYAorICoKKyAqIFRoZSBgdHJhdmVyc2VDb250ZXh0YCBpcyBhbiBvcHRpb25hbCBhcmd1
bWVudCB0aGF0IGlzIHBhc3NlZCB0aHJvdWdoIHRoZQorICogZW50aXJlIHRyYXZlcnNhbC4gSXQg
Y2FuIGJlIHVzZWQgdG8gc3RvcmUgYWNjdW11bGF0aW9ucyBvciBhbnl0aGluZyBlbHNlIHRoYXQK
KyAqIHRoZSBjYWxsYmFjayBtaWdodCBmaW5kIHJlbGV2YW50LgorICoKKyAqIEBwYXJhbSB7Pyp9
IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgb2JqZWN0LgorICogQHBhcmFtIHshZnVuY3Rpb259IGNh
bGxiYWNrIFRvIGludm9rZSB1cG9uIHRyYXZlcnNpbmcgZWFjaCBjaGlsZC4KKyAqIEBwYXJhbSB7
Pyp9IHRyYXZlcnNlQ29udGV4dCBDb250ZXh0IGZvciB0cmF2ZXJzYWwuCisgKi8KK2Z1bmN0aW9u
IHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRyZW4sIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQp
IHsKKyAgaWYgKGNoaWxkcmVuICE9PSBudWxsICYmIGNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHsK
KyAgICB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChjaGlsZHJlbiwgJycsIDAsIGNhbGxiYWNrLCB0
cmF2ZXJzZUNvbnRleHQpOworICB9Cit9CisKKy8qKgorICogRXhwb3J0IHRoZSBlcnJvciBjb2Rl
IGZvciB1c2UgaW4gb3RoZXIgd2Fsa2luZy9tYXBwaW5nIGNvZGUuCisgKi8KK3RyYXZlcnNlQWxs
Q2hpbGRyZW4uRFVQTElDQVRFX0tFWV9FUlJPUiA9IERVUExJQ0FURV9LRVlfRVJST1I7CisKKwor
bW9kdWxlLmV4cG9ydHMgPSB0cmF2ZXJzZUFsbENoaWxkcmVuOworCit9KSgpCit9LHsiLi9SZWFj
dENvbXBvbmVudCI6MjIsIi4vUmVhY3RUZXh0Q29tcG9uZW50Ijo0NywiLi90aHJvd0lmIjo4Nn1d
fSx7fSxbMjFdKSgyMSkKK30pOworOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6
IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9sYWJzL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9yZWFjdC9ib3dlcl9jb21wb25lbnRzL3JlYWN0L3JlYWN0Lm1pbi5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93ZXJfY29tcG9uZW50cy9yZWFjdC9yZWFjdC5t
aW4uanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3Rv
ZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93ZXJfY29tcG9uZW50cy9y
ZWFjdC9yZWFjdC5taW4uanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjAgQEAKKy8qKgorICog
UmVhY3QgdjAuNC4wCisgKgorICogQ29weXJpZ2h0IDIwMTMgRmFjZWJvb2ssIEluYy4KKyAqCisg
KiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxp
Y2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu
Y2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGlj
ZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu
MAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8g
aW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAq
IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJt
aXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCishZnVu
Y3Rpb24oZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGJvb3RzdHJhcClib290c3RyYXAoInJlYWN0
IixlKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyltb2R1bGUuZXhwb3J0cz1lKCk7
ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShlKTtl
bHNlIGlmKCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VzKXtpZighc2VzLm9rKCkpcmV0dXJuO3Nlcy5t
YWtlUmVhY3Q9ZX1lbHNlInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93LlJlYWN0PWUo
KTpnbG9iYWwuUmVhY3Q9ZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQsbil7ZnVu
Y3Rpb24gcihuLGkpe2lmKCF0W25dKXtpZighZVtuXSl7dmFyIGE9ImZ1bmN0aW9uIj09dHlwZW9m
IHJlcXVpcmUmJnJlcXVpcmU7aWYoIWkmJmEpcmV0dXJuIGEobiwhMCk7aWYobylyZXR1cm4gbyhu
LCEwKTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIituKyInIil9dmFyIHM9
dFtuXT17ZXhwb3J0czp7fX07ZVtuXVswXS5jYWxsKHMuZXhwb3J0cyxmdW5jdGlvbih0KXt2YXIg
bz1lW25dWzFdW3RdO3JldHVybiByKG8/bzp0KX0scyxzLmV4cG9ydHMpfXJldHVybiB0W25dLmV4
cG9ydHN9Zm9yKHZhciBvPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtp
PG4ubGVuZ3RoO2krKylyKG5baV0pO3JldHVybiByfSh7MTpbZnVuY3Rpb24oZSx0KXtmdW5jdGlv
biBuKGUpe3ZhciB0PXIoZSk7aWYoIXQpdGhyb3cgbmV3IEVycm9yKG8oJ1RyaWVkIHRvIGdldCBl
bGVtZW50IHdpdGggaWQgb2YgIiVzIiBidXQgaXQgaXMgbm90IHByZXNlbnQgb24gdGhlIHBhZ2Uu
JyxlKSk7cmV0dXJuIHR9dmFyIHI9ZSgiLi9nZSIpLG89ZSgiLi9leCIpO3QuZXhwb3J0cz1ufSx7
Ii4vZXgiOjY2LCIuL2dlIjo2OX1dLDI6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3ZhciBu
PXtmaWxsT3BhY2l0eTohMCxmb250V2VpZ2h0OiEwLG9wYWNpdHk6ITAsb3JwaGFuczohMCx6SW5k
ZXg6ITAsem9vbTohMH0scj17YmFja2dyb3VuZDp7YmFja2dyb3VuZEltYWdlOiEwLGJhY2tncm91
bmRQb3NpdGlvbjohMCxiYWNrZ3JvdW5kUmVwZWF0OiEwLGJhY2tncm91bmRDb2xvcjohMH0sYm9y
ZGVyOntib3JkZXJXaWR0aDohMCxib3JkZXJTdHlsZTohMCxib3JkZXJDb2xvcjohMH0sYm9yZGVy
Qm90dG9tOntib3JkZXJCb3R0b21XaWR0aDohMCxib3JkZXJCb3R0b21TdHlsZTohMCxib3JkZXJC
b3R0b21Db2xvcjohMH0sYm9yZGVyTGVmdDp7Ym9yZGVyTGVmdFdpZHRoOiEwLGJvcmRlckxlZnRT
dHlsZTohMCxib3JkZXJMZWZ0Q29sb3I6ITB9LGJvcmRlclJpZ2h0Ontib3JkZXJSaWdodFdpZHRo
OiEwLGJvcmRlclJpZ2h0U3R5bGU6ITAsYm9yZGVyUmlnaHRDb2xvcjohMH0sYm9yZGVyVG9wOnti
b3JkZXJUb3BXaWR0aDohMCxib3JkZXJUb3BTdHlsZTohMCxib3JkZXJUb3BDb2xvcjohMH0sZm9u
dDp7Zm9udFN0eWxlOiEwLGZvbnRWYXJpYW50OiEwLGZvbnRXZWlnaHQ6ITAsZm9udFNpemU6ITAs
bGluZUhlaWdodDohMCxmb250RmFtaWx5OiEwfX0sbz17aXNVbml0bGVzc051bWJlcjpuLHNob3J0
aGFuZFByb3BlcnR5RXhwYW5zaW9uczpyfTt0LmV4cG9ydHM9b30se31dLDM6W2Z1bmN0aW9uKGUs
dCl7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4vQ1NTUHJvcGVydHkiKSxyPWUoIi4vZGFuZ2Vyb3Vz
U3R5bGVWYWx1ZSIpLG89ZSgiLi9lc2NhcGVUZXh0Rm9yQnJvd3NlciIpLGk9ZSgiLi9oeXBoZW5h
dGUiKSxhPWUoIi4vbWVtb2l6ZVN0cmluZ09ubHkiKSxzPWEoZnVuY3Rpb24oZSl7cmV0dXJuIG8o
aShlKSl9KSx1PXtjcmVhdGVNYXJrdXBGb3JTdHlsZXM6ZnVuY3Rpb24oZSl7dmFyIHQ9IiI7Zm9y
KHZhciBuIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShuKSl7dmFyIG89ZVtuXTtudWxsIT1vJiYo
dCs9cyhuKSsiOiIsdCs9cihuLG8pKyI7Iil9cmV0dXJuIHR8fG51bGx9LHNldFZhbHVlRm9yU3R5
bGVzOmZ1bmN0aW9uKGUsdCl7dmFyIG89ZS5zdHlsZTtmb3IodmFyIGkgaW4gdClpZih0Lmhhc093
blByb3BlcnR5KGkpKXt2YXIgYT1yKGksdFtpXSk7aWYoYSlvW2ldPWE7ZWxzZXt2YXIgcz1uLnNo
b3J0aGFuZFByb3BlcnR5RXhwYW5zaW9uc1tpXTtpZihzKWZvcih2YXIgdSBpbiBzKW9bdV09IiI7
ZWxzZSBvW2ldPSIifX19fTt0LmV4cG9ydHM9dX0seyIuL0NTU1Byb3BlcnR5IjoyLCIuL2Rhbmdl
cm91c1N0eWxlVmFsdWUiOjYzLCIuL2VzY2FwZVRleHRGb3JCcm93c2VyIjo2NSwiLi9oeXBoZW5h
dGUiOjczLCIuL21lbW9pemVTdHJpbmdPbmx5Ijo4MH1dLDQ6W2Z1bmN0aW9uKGUsdCl7InVzZSBz
dHJpY3QiO3ZhciBuPXt9LHI9e3B1dExpc3RlbmVyOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbz1uW3Rd
fHwoblt0XT17fSk7b1tlXT1yfSxnZXRMaXN0ZW5lcjpmdW5jdGlvbihlLHQpe3ZhciByPW5bdF07
cmV0dXJuIHImJnJbZV19LGRlbGV0ZUxpc3RlbmVyOmZ1bmN0aW9uKGUsdCl7dmFyIHI9blt0XTty
JiZkZWxldGUgcltlXX0sZGVsZXRlQWxsTGlzdGVuZXJzOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBp
biBuKWRlbGV0ZSBuW3RdW2VdfSxfX3B1cmdlOmZ1bmN0aW9uKCl7bj17fX19O3QuZXhwb3J0cz1y
fSx7fV0sNTpbZnVuY3Rpb24oZSx0KXshZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24g
bihlKXtyZXR1cm4iU0VMRUNUIj09PWUubm9kZU5hbWV8fCJJTlBVVCI9PT1lLm5vZGVOYW1lJiYi
ZmlsZSI9PT1lLnR5cGV9ZnVuY3Rpb24gcihlKXt2YXIgdD1ELmdldFBvb2xlZChPLmNoYW5nZSxf
LGUpO0MuYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyh0KSx5LmVucXVldWVFdmVudHModCks
eS5wcm9jZXNzRXZlbnRRdWV1ZSgpfWZ1bmN0aW9uIG8oZSx0KXtJPWUsXz10LEkuYXR0YWNoRXZl
bnQoIm9uY2hhbmdlIixyKX1mdW5jdGlvbiBpKCl7SSYmKEkuZGV0YWNoRXZlbnQoIm9uY2hhbmdl
IixyKSxJPW51bGwsXz1udWxsKX1mdW5jdGlvbiBhKGUsdCxuKXtyZXR1cm4gZT09PWIudG9wQ2hh
bmdlP246dm9pZCAwfWZ1bmN0aW9uIHMoZSx0LG4pe2U9PT1iLnRvcEZvY3VzPyhpKCksbyh0LG4p
KTplPT09Yi50b3BCbHVyJiZpKCl9ZnVuY3Rpb24gdShlKXtyZXR1cm4iSU5QVVQiPT09ZS5ub2Rl
TmFtZSYmeFtlLnR5cGVdfHwiVEVYVEFSRUEiPT09ZS5ub2RlTmFtZX1mdW5jdGlvbiBsKGUsdCl7
ST1lLF89dCxOPWUudmFsdWUsUD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUuY29u
c3RydWN0b3IucHJvdG90eXBlLCJ2YWx1ZSIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLCJ2YWx1
ZSIsQSksSS5hdHRhY2hFdmVudCgib25wcm9wZXJ0eWNoYW5nZSIscCl9ZnVuY3Rpb24gYygpe0km
JihkZWxldGUgSS52YWx1ZSxJLmRldGFjaEV2ZW50KCJvbnByb3BlcnR5Y2hhbmdlIixwKSxJPW51
bGwsXz1udWxsLE49bnVsbCxQPW51bGwpfWZ1bmN0aW9uIHAoZSl7aWYoInZhbHVlIj09PWUucHJv
cGVydHlOYW1lKXt2YXIgdD1lLnNyY0VsZW1lbnQudmFsdWU7dCE9PU4mJihOPXQscihlKSl9fWZ1
bmN0aW9uIGQoZSx0LG4pe3JldHVybiBlPT09Yi50b3BJbnB1dD9uOnZvaWQgMH1mdW5jdGlvbiBo
KGUsdCxuKXtlPT09Yi50b3BGb2N1cz8oYygpLGwodCxuKSk6ZT09PWIudG9wQmx1ciYmYygpfWZ1
bmN0aW9uIGYoZSl7cmV0dXJuIGUhPT1iLnRvcFNlbGVjdGlvbkNoYW5nZSYmZSE9PWIudG9wS2V5
VXAmJmUhPT1iLnRvcEtleURvd258fCFJfHxJLnZhbHVlPT09Tj92b2lkIDA6KE49SS52YWx1ZSxf
KX1mdW5jdGlvbiB2KGUpe3JldHVybiJJTlBVVCI9PT1lLm5vZGVOYW1lJiYoImNoZWNrYm94Ij09
PWUudHlwZXx8InJhZGlvIj09PWUudHlwZSl9ZnVuY3Rpb24gbShlLHQsbil7cmV0dXJuIGU9PT1i
LnRvcENsaWNrP246dm9pZCAwfXZhciBnPWUoIi4vRXZlbnRDb25zdGFudHMiKSx5PWUoIi4vRXZl
bnRQbHVnaW5IdWIiKSxDPWUoIi4vRXZlbnRQcm9wYWdhdG9ycyIpLEU9ZSgiLi9FeGVjdXRpb25F
bnZpcm9ubWVudCIpLEQ9ZSgiLi9TeW50aGV0aWNFdmVudCIpLE09ZSgiLi9pc0V2ZW50U3VwcG9y
dGVkIiksUj1lKCIuL2tleU9mIiksYj1nLnRvcExldmVsVHlwZXMsTz17Y2hhbmdlOntwaGFzZWRS
ZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDpSKHtvbkNoYW5nZTpudWxsfSksY2FwdHVyZWQ6Uih7
b25DaGFuZ2VDYXB0dXJlOm51bGx9KX19fSxJPW51bGwsXz1udWxsLE49bnVsbCxQPW51bGwsVD0h
MTtFLmNhblVzZURPTSYmKFQ9TSgiY2hhbmdlIikmJighKCJkb2N1bWVudE1vZGUiaW4gZG9jdW1l
bnQpfHxkb2N1bWVudC5kb2N1bWVudE1vZGU+OCkpO3ZhciBTPSExO0UuY2FuVXNlRE9NJiYoUz1N
KCJpbnB1dCIpJiYoISgiZG9jdW1lbnRNb2RlImluIGRvY3VtZW50KXx8ZG9jdW1lbnQuZG9jdW1l
bnRNb2RlPjkpKTt2YXIgeD17Y29sb3I6ITAsZGF0ZTohMCxkYXRldGltZTohMCwiZGF0ZXRpbWUt
bG9jYWwiOiEwLGVtYWlsOiEwLG1vbnRoOiEwLG51bWJlcjohMCxwYXNzd29yZDohMCxyYW5nZToh
MCxzZWFyY2g6ITAsdGVsOiEwLHRleHQ6ITAsdGltZTohMCx1cmw6ITAsd2VlazohMH0sQT17Z2V0
OmZ1bmN0aW9uKCl7cmV0dXJuIFAuZ2V0LmNhbGwodGhpcyl9LHNldDpmdW5jdGlvbihlKXtOPSIi
K2UsUC5zZXQuY2FsbCh0aGlzLGUpfX0sdz17ZXZlbnRUeXBlczpPLGV4dHJhY3RFdmVudHM6ZnVu
Y3Rpb24oZSx0LHIsbyl7dmFyIGksbDtpZihuKHQpP1Q/aT1hOmw9czp1KHQpP1M/aT1kOihpPWYs
bD1oKTp2KHQpJiYoaT1tKSxpKXt2YXIgYz1pKGUsdCxyKTtpZihjKXt2YXIgcD1ELmdldFBvb2xl
ZChPLmNoYW5nZSxjLG8pO3JldHVybiBDLmFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMocCks
cH19bCYmbChlLHQscil9fTt0LmV4cG9ydHM9d30oKX0seyIuL0V2ZW50Q29uc3RhbnRzIjoxMywi
Li9FdmVudFBsdWdpbkh1YiI6MTUsIi4vRXZlbnRQcm9wYWdhdG9ycyI6MTgsIi4vRXhlY3V0aW9u
RW52aXJvbm1lbnQiOjE5LCIuL1N5bnRoZXRpY0V2ZW50Ijo1MCwiLi9pc0V2ZW50U3VwcG9ydGVk
Ijo3NiwiLi9rZXlPZiI6Nzl9XSw2OltmdW5jdGlvbihlLHQpeyFmdW5jdGlvbigpeyJ1c2Ugc3Ry
aWN0Ijt2YXIgbj1lKCIuL0RhbmdlciIpLHI9ZSgiLi9pbnNlcnROb2RlQXQiKSxvPWUoIi4va2V5
T2YiKTtlKCIuL3Rocm93SWYiKTt2YXIgaT1vKHttb3ZlRnJvbTpudWxsfSksYT1vKHtpbnNlcnRN
YXJrdXA6bnVsbH0pLHM9byh7cmVtb3ZlQXQ6bnVsbH0pLHU9ZnVuY3Rpb24oZSx0KXtmb3IodmFy
IG4scixvLGE9MDthPHQubGVuZ3RoO2ErKylyPXRbYV0saSBpbiByPyhuPW58fFtdLG89ci5tb3Zl
RnJvbSxuW29dPWUuY2hpbGROb2Rlc1tvXSk6cyBpbiByJiYobj1ufHxbXSxvPXIucmVtb3ZlQXQs
bltvXT1lLmNoaWxkTm9kZXNbb10pO3JldHVybiBufSxsPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBu
PTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ciYmZS5yZW1vdmVDaGlsZCh0W25dKX19LGM9
ZnVuY3Rpb24oZSx0LG8pe2Zvcih2YXIgdSxsLGMscD0wO3A8dC5sZW5ndGg7cCsrKWlmKGM9dFtw
XSxpIGluIGMpdT1vW2MubW92ZUZyb21dLGw9Yy5maW5hbEluZGV4LHIoZSx1LGwpO2Vsc2UgaWYo
cyBpbiBjKTtlbHNlIGlmKGEgaW4gYyl7bD1jLmZpbmFsSW5kZXg7dmFyIGQ9Yy5pbnNlcnRNYXJr
dXA7bi5kYW5nZXJvdXNseUluc2VydE1hcmt1cEF0KGUsZCxsKX19LHA9ZnVuY3Rpb24oZSx0KXt2
YXIgbj11KGUsdCk7biYmbChlLG4pLGMoZSx0LG4pfSxkPXtkYW5nZXJvdXNseVJlcGxhY2VOb2Rl
V2l0aE1hcmt1cDpuLmRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwLG1hbmFnZUNoaWxk
cmVuOnB9O3QuZXhwb3J0cz1kfSgpfSx7Ii4vRGFuZ2VyIjo5LCIuL2luc2VydE5vZGVBdCI6NzQs
Ii4va2V5T2YiOjc5LCIuL3Rocm93SWYiOjg2fV0sNzpbZnVuY3Rpb24oZSx0KXsidXNlIHN0cmlj
dCI7dmFyIG49ZSgiLi9pbnZhcmlhbnQiKSxyPXtNVVNUX1VTRV9BVFRSSUJVVEU6MSxNVVNUX1VT
RV9QUk9QRVJUWToyLEhBU19CT09MRUFOX1ZBTFVFOjQsSEFTX1NJREVfRUZGRUNUUzo4LGluamVj
dERPTVByb3BlcnR5Q29uZmlnOmZ1bmN0aW9uKGUpe3ZhciB0PWUuUHJvcGVydGllc3x8e30sbz1l
LkRPTUF0dHJpYnV0ZU5hbWVzfHx7fSxhPWUuRE9NUHJvcGVydHlOYW1lc3x8e30scz1lLkRPTU11
dGF0aW9uTWV0aG9kc3x8e307ZS5pc0N1c3RvbUF0dHJpYnV0ZSYmaS5faXNDdXN0b21BdHRyaWJ1
dGVGdW5jdGlvbnMucHVzaChlLmlzQ3VzdG9tQXR0cmlidXRlKTtmb3IodmFyIHUgaW4gdCl7bigh
aS5pc1N0YW5kYXJkTmFtZVt1XSksaS5pc1N0YW5kYXJkTmFtZVt1XT0hMCxpLmdldEF0dHJpYnV0
ZU5hbWVbdV09b1t1XXx8dS50b0xvd2VyQ2FzZSgpLGkuZ2V0UHJvcGVydHlOYW1lW3VdPWFbdV18
fHU7dmFyIGw9c1t1XTtsJiYoaS5nZXRNdXRhdGlvbk1ldGhvZFt1XT1sKTt2YXIgYz10W3VdO2ku
bXVzdFVzZUF0dHJpYnV0ZVt1XT1jJnIuTVVTVF9VU0VfQVRUUklCVVRFLGkubXVzdFVzZVByb3Bl
cnR5W3VdPWMmci5NVVNUX1VTRV9QUk9QRVJUWSxpLmhhc0Jvb2xlYW5WYWx1ZVt1XT1jJnIuSEFT
X0JPT0xFQU5fVkFMVUUsaS5oYXNTaWRlRWZmZWN0c1t1XT1jJnIuSEFTX1NJREVfRUZGRUNUUyxu
KCFpLm11c3RVc2VBdHRyaWJ1dGVbdV18fCFpLm11c3RVc2VQcm9wZXJ0eVt1XSksbihpLm11c3RV
c2VQcm9wZXJ0eVt1XXx8IWkuaGFzU2lkZUVmZmVjdHNbdV0pfX19LG89e30saT17aXNTdGFuZGFy
ZE5hbWU6e30sZ2V0QXR0cmlidXRlTmFtZTp7fSxnZXRQcm9wZXJ0eU5hbWU6e30sZ2V0TXV0YXRp
b25NZXRob2Q6e30sbXVzdFVzZUF0dHJpYnV0ZTp7fSxtdXN0VXNlUHJvcGVydHk6e30saGFzQm9v
bGVhblZhbHVlOnt9LGhhc1NpZGVFZmZlY3RzOnt9LF9pc0N1c3RvbUF0dHJpYnV0ZUZ1bmN0aW9u
czpbXSxpc0N1c3RvbUF0dHJpYnV0ZTpmdW5jdGlvbihlKXtyZXR1cm4gaS5faXNDdXN0b21BdHRy
aWJ1dGVGdW5jdGlvbnMuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5jYWxsKG51bGwsZSl9KX0s
Z2V0RGVmYXVsdFZhbHVlRm9yUHJvcGVydHk6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPW9bZV07cmV0
dXJuIHJ8fChvW2VdPXI9e30pLHQgaW4gcnx8KG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlKSxy
W3RdPW5bdF0pLHJbdF19LGluamVjdGlvbjpyfTt0LmV4cG9ydHM9aX0seyIuL2ludmFyaWFudCI6
NzV9XSw4OltmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuL0RPTVByb3BlcnR5
Iikscj1lKCIuL2VzY2FwZVRleHRGb3JCcm93c2VyIiksbz1lKCIuL21lbW9pemVTdHJpbmdPbmx5
IiksaT1vKGZ1bmN0aW9uKGUpe3JldHVybiByKGUpKyc9Iid9KSxhPXtjcmVhdGVNYXJrdXBGb3JQ
cm9wZXJ0eTpmdW5jdGlvbihlLHQpe2lmKG4uaXNTdGFuZGFyZE5hbWVbZV0pe2lmKG51bGw9PXR8
fG4uaGFzQm9vbGVhblZhbHVlW2VdJiYhdClyZXR1cm4iIjt2YXIgbz1uLmdldEF0dHJpYnV0ZU5h
bWVbZV07cmV0dXJuIGkobykrcih0KSsnIid9cmV0dXJuIG4uaXNDdXN0b21BdHRyaWJ1dGUoZSk/
bnVsbD09dD8iIjppKGUpK3IodCkrJyInOm51bGx9LHNldFZhbHVlRm9yUHJvcGVydHk6ZnVuY3Rp
b24oZSx0LHIpe2lmKG4uaXNTdGFuZGFyZE5hbWVbdF0pe3ZhciBvPW4uZ2V0TXV0YXRpb25NZXRo
b2RbdF07aWYobylvKGUscik7ZWxzZSBpZihuLm11c3RVc2VBdHRyaWJ1dGVbdF0pbi5oYXNCb29s
ZWFuVmFsdWVbdF0mJiFyP2UucmVtb3ZlQXR0cmlidXRlKG4uZ2V0QXR0cmlidXRlTmFtZVt0XSk6
ZS5zZXRBdHRyaWJ1dGUobi5nZXRBdHRyaWJ1dGVOYW1lW3RdLHIpO2Vsc2V7dmFyIGk9bi5nZXRQ
cm9wZXJ0eU5hbWVbdF07bi5oYXNTaWRlRWZmZWN0c1t0XSYmZVtpXT09PXJ8fChlW2ldPXIpfX1l
bHNlIG4uaXNDdXN0b21BdHRyaWJ1dGUodCkmJmUuc2V0QXR0cmlidXRlKHQscil9LGRlbGV0ZVZh
bHVlRm9yUHJvcGVydHk6ZnVuY3Rpb24oZSx0KXtpZihuLmlzU3RhbmRhcmROYW1lW3RdKXt2YXIg
cj1uLmdldE11dGF0aW9uTWV0aG9kW3RdO2lmKHIpcihlLHZvaWQgMCk7ZWxzZSBpZihuLm11c3RV
c2VBdHRyaWJ1dGVbdF0pZS5yZW1vdmVBdHRyaWJ1dGUobi5nZXRBdHRyaWJ1dGVOYW1lW3RdKTtl
bHNle3ZhciBvPW4uZ2V0UHJvcGVydHlOYW1lW3RdO2Vbb109bi5nZXREZWZhdWx0VmFsdWVGb3JQ
cm9wZXJ0eShlLm5vZGVOYW1lLHQpfX1lbHNlIG4uaXNDdXN0b21BdHRyaWJ1dGUodCkmJmUucmVt
b3ZlQXR0cmlidXRlKHQpfX07dC5leHBvcnRzPWF9LHsiLi9ET01Qcm9wZXJ0eSI6NywiLi9lc2Nh
cGVUZXh0Rm9yQnJvd3NlciI6NjUsIi4vbWVtb2l6ZVN0cmluZ09ubHkiOjgwfV0sOTpbZnVuY3Rp
b24oZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXt2YXIgdD11LG49ZS5zdWJzdHJpbmco
MSxlLmluZGV4T2YoIiAiKSkscj1sW24udG9Mb3dlckNhc2UoKV18fGM7aWYocil7dC5pbm5lckhU
TUw9clsxXStlK3JbMl07Zm9yKHZhciBvPXJbMF07by0tOyl0PXQubGFzdENoaWxkfWVsc2UgdC5p
bm5lckhUTUw9ZTtyZXR1cm4gdC5jaGlsZE5vZGVzfWZ1bmN0aW9uIHIoZSx0LG4pe3JldHVybiBu
P24ubmV4dFNpYmxpbmc/ZS5pbnNlcnRCZWZvcmUodCxuLm5leHRTaWJsaW5nKTplLmFwcGVuZENo
aWxkKHQpOmUuaW5zZXJ0QmVmb3JlKHQsZS5maXJzdENoaWxkKX1mdW5jdGlvbiBvKGUsdCxuKXtm
b3IodmFyIG8saT10Lmxlbmd0aCxhPTA7aT5hO2ErKylvPXIoZSx0WzBdLG98fG4pfWZ1bmN0aW9u
IGkoZSx0LHIpe3ZhciBpPW4odCksYT1yP2UuY2hpbGROb2Rlc1tyLTFdOm51bGw7byhlLGksYSl9
ZnVuY3Rpb24gYShlLHQpe3ZhciByPWUucGFyZW50Tm9kZSxvPW4odCk7ci5yZXBsYWNlQ2hpbGQo
b1swXSxlKX12YXIgcz1lKCIuL0V4ZWN1dGlvbkVudmlyb25tZW50Iik7ZSgiLi90aHJvd0lmIik7
dmFyIHU9cy5jYW5Vc2VET00/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik6bnVsbCxsPXtv
cHRpb246WzEsJzxzZWxlY3QgbXVsdGlwbGU9InRydWUiPicsIjwvc2VsZWN0PiJdLGxlZ2VuZDpb
MSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il0sYXJlYTpbMSwiPG1hcD4iLCI8L21hcD4iXSxw
YXJhbTpbMSwiPG9iamVjdD4iLCI8L29iamVjdD4iXSx0aGVhZDpbMSwiPHRhYmxlPiIsIjwvdGFi
bGU+Il0sdHI6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLGNvbDpbMiwi
PHRhYmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwvdGFibGU+Il0s
dGQ6WzMsIjx0YWJsZT48dGJvZHk+PHRyPiIsIjwvdHI+PC90Ym9keT48L3RhYmxlPiJdfTtsLm9w
dGdyb3VwPWwub3B0aW9uLGwudGJvZHk9bC50aGVhZCxsLnRmb290PWwudGhlYWQsbC5jb2xncm91
cD1sLnRoZWFkLGwuY2FwdGlvbj1sLnRoZWFkLGwudGg9bC50ZDt2YXIgYz1bMSwiPzxkaXY+Iiwi
PC9kaXY+Il07aWYodSl7Zm9yKHZhciBwIGluIGwpbC5oYXNPd25Qcm9wZXJ0eShwKSYmKHUuaW5u
ZXJIVE1MPSI8IitwKyI+PC8iK3ArIj4iLHUuZmlyc3RDaGlsZCYmKGxbcF09bnVsbCkpO3UuaW5u
ZXJIVE1MPSI8bGluayAvPiIsdS5maXJzdENoaWxkJiYoYz1udWxsKX12YXIgZD17ZGFuZ2Vyb3Vz
bHlJbnNlcnRNYXJrdXBBdDppLGRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwOmF9O3Qu
ZXhwb3J0cz1kfSx7Ii4vRXhlY3V0aW9uRW52aXJvbm1lbnQiOjE5LCIuL3Rocm93SWYiOjg2fV0s
MTA6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4vRE9NUHJvcGVydHkiKSxy
PW4uaW5qZWN0aW9uLk1VU1RfVVNFX0FUVFJJQlVURSxvPW4uaW5qZWN0aW9uLk1VU1RfVVNFX1BS
T1BFUlRZLGk9bi5pbmplY3Rpb24uSEFTX0JPT0xFQU5fVkFMVUUsYT1uLmluamVjdGlvbi5IQVNf
U0lERV9FRkZFQ1RTLHM9e2lzQ3VzdG9tQXR0cmlidXRlOlJlZ0V4cC5wcm90b3R5cGUudGVzdC5i
aW5kKC9eKGRhdGF8YXJpYSktW2Etel9dW2EtelxkXy5cLV0qJC8pLFByb3BlcnRpZXM6e2FjY2Vz
c0tleTpudWxsLGFjY2VwdDpudWxsLGFjdGlvbjpudWxsLGFqYXhpZnk6cixhbGxvd0Z1bGxTY3Jl
ZW46cnxpLGFsdDpudWxsLGF1dG9Db21wbGV0ZTpudWxsLGF1dG9Gb2N1czppLGF1dG9QbGF5Omks
Y2VsbFBhZGRpbmc6bnVsbCxjZWxsU3BhY2luZzpudWxsLGNoZWNrZWQ6b3xpLGNsYXNzTmFtZTpv
LGNvbFNwYW46bnVsbCxjb250ZW50RWRpdGFibGU6bnVsbCxjb250ZXh0TWVudTpyLGNvbnRyb2xz
Om98aSxkYXRhOm51bGwsZGF0ZVRpbWU6cixkaXI6bnVsbCxkaXNhYmxlZDpvfGksZHJhZ2dhYmxl
Om51bGwsZW5jVHlwZTpudWxsLGhlaWdodDpyLGhpZGRlbjpyfGksaHJlZjpudWxsLGh0bWxGb3I6
bnVsbCxpY29uOm51bGwsaWQ6byxsYWJlbDpudWxsLGxhbmc6bnVsbCxsaXN0Om51bGwsbWF4Om51
bGwsbWF4TGVuZ3RoOnIsbWV0aG9kOm51bGwsbWluOm51bGwsbXVsdGlwbGU6b3xpLG5hbWU6bnVs
bCxwYXR0ZXJuOm51bGwscG9zdGVyOm51bGwscHJlbG9hZDpudWxsLHBsYWNlaG9sZGVyOm51bGws
cmFkaW9Hcm91cDpudWxsLHJlbDpudWxsLHJlYWRPbmx5Om98aSxyZXF1aXJlZDppLHJvbGU6cixz
Y3JvbGxMZWZ0Om8sc2Nyb2xsVG9wOm8sc2VsZWN0ZWQ6b3xpLHNpemU6bnVsbCxzcGVsbENoZWNr
Om51bGwsc3JjOm51bGwsc3RlcDpudWxsLHN0eWxlOm51bGwsdGFiSW5kZXg6bnVsbCx0YXJnZXQ6
bnVsbCx0aXRsZTpudWxsLHR5cGU6bnVsbCx2YWx1ZTpvfGEsd2lkdGg6cix3bW9kZTpyLGN4Om8s
Y3k6byxkOm8sZmlsbDpvLGZ4Om8sZnk6byxwb2ludHM6byxyOm8sc3Ryb2tlOm8sc3Ryb2tlTGlu
ZWNhcDpvLHN0cm9rZVdpZHRoOm8sdHJhbnNmb3JtOm8seDpvLHgxOm8seDI6byx2ZXJzaW9uOm8s
dmlld0JveDpvLHk6byx5MTpvLHkyOm8sc3ByZWFkTWV0aG9kOm8sb2Zmc2V0Om8sc3RvcENvbG9y
Om8sc3RvcE9wYWNpdHk6byxncmFkaWVudFVuaXRzOm8sZ3JhZGllbnRUcmFuc2Zvcm06b30sRE9N
QXR0cmlidXRlTmFtZXM6e2NsYXNzTmFtZToiY2xhc3MiLGh0bWxGb3I6ImZvciIsc3Ryb2tlTGlu
ZWNhcDoic3Ryb2tlLWxpbmVjYXAiLHN0cm9rZVdpZHRoOiJzdHJva2Utd2lkdGgiLHN0b3BDb2xv
cjoic3RvcC1jb2xvciIsc3RvcE9wYWNpdHk6InN0b3Atb3BhY2l0eSJ9LERPTVByb3BlcnR5TmFt
ZXM6e2F1dG9Db21wbGV0ZToiYXV0b2NvbXBsZXRlIixhdXRvRm9jdXM6ImF1dG9mb2N1cyIsYXV0
b1BsYXk6ImF1dG9wbGF5IixlbmNUeXBlOiJlbmN0eXBlIixyYWRpb0dyb3VwOiJyYWRpb2dyb3Vw
IixzcGVsbENoZWNrOiJzcGVsbGNoZWNrIn0sRE9NTXV0YXRpb25NZXRob2RzOntjbGFzc05hbWU6
ZnVuY3Rpb24oZSx0KXtlLmNsYXNzTmFtZT10fHwiIn19fTt0LmV4cG9ydHM9c30seyIuL0RPTVBy
b3BlcnR5Ijo3fV0sMTE6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4va2V5
T2YiKSxyPVtuKHtSZXNwb25kZXJFdmVudFBsdWdpbjpudWxsfSksbih7U2ltcGxlRXZlbnRQbHVn
aW46bnVsbH0pLG4oe1RhcEV2ZW50UGx1Z2luOm51bGx9KSxuKHtFbnRlckxlYXZlRXZlbnRQbHVn
aW46bnVsbH0pLG4oe0NoYW5nZUV2ZW50UGx1Z2luOm51bGx9KSxuKHtBbmFseXRpY3NFdmVudFBs
dWdpbjpudWxsfSldO3QuZXhwb3J0cz1yfSx7Ii4va2V5T2YiOjc5fV0sMTI6W2Z1bmN0aW9uKGUs
dCl7IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4vRXZlbnRDb25zdGFudHMiKSxy
PWUoIi4vRXZlbnRQcm9wYWdhdG9ycyIpLG89ZSgiLi9FeGVjdXRpb25FbnZpcm9ubWVudCIpLGk9
ZSgiLi9SZWFjdEluc3RhbmNlSGFuZGxlcyIpLGE9ZSgiLi9TeW50aGV0aWNNb3VzZUV2ZW50Iiks
cz1lKCIuL1JlYWN0SUQiKSx1PWUoIi4va2V5T2YiKSxsPW4udG9wTGV2ZWxUeXBlcyxjPWkuZ2V0
Rmlyc3RSZWFjdERPTSxwPXttb3VzZUVudGVyOntyZWdpc3RyYXRpb25OYW1lOnUoe29uTW91c2VF
bnRlcjpudWxsfSl9LG1vdXNlTGVhdmU6e3JlZ2lzdHJhdGlvbk5hbWU6dSh7b25Nb3VzZUxlYXZl
Om51bGx9KX19LGQ9e2V2ZW50VHlwZXM6cCxleHRyYWN0RXZlbnRzOmZ1bmN0aW9uKGUsdCxuLGkp
e2lmKGU9PT1sLnRvcE1vdXNlT3ZlciYmKGkucmVsYXRlZFRhcmdldHx8aS5mcm9tRWxlbWVudCkp
cmV0dXJuIG51bGw7aWYoZSE9PWwudG9wTW91c2VPdXQmJmUhPT1sLnRvcE1vdXNlT3ZlcilyZXR1
cm4gbnVsbDt2YXIgdSxkO2lmKGU9PT1sLnRvcE1vdXNlT3V0Pyh1PXQsZD1jKGkucmVsYXRlZFRh
cmdldHx8aS50b0VsZW1lbnQpfHxvLmdsb2JhbCk6KHU9by5nbG9iYWwsZD10KSx1PT09ZClyZXR1
cm4gbnVsbDt2YXIgaD11P3MuZ2V0SUQodSk6IiIsZj1kP3MuZ2V0SUQoZCk6IiIsdj1hLmdldFBv
b2xlZChwLm1vdXNlTGVhdmUsaCxpKSxtPWEuZ2V0UG9vbGVkKHAubW91c2VFbnRlcixmLGkpO3Jl
dHVybiByLmFjY3VtdWxhdGVFbnRlckxlYXZlRGlzcGF0Y2hlcyh2LG0saCxmKSxbdixtXX19O3Qu
ZXhwb3J0cz1kfSgpfSx7Ii4vRXZlbnRDb25zdGFudHMiOjEzLCIuL0V2ZW50UHJvcGFnYXRvcnMi
OjE4LCIuL0V4ZWN1dGlvbkVudmlyb25tZW50IjoxOSwiLi9SZWFjdElEIjozNSwiLi9SZWFjdElu
c3RhbmNlSGFuZGxlcyI6MzcsIi4vU3ludGhldGljTW91c2VFdmVudCI6NTMsIi4va2V5T2YiOjc5
fV0sMTM6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4va2V5TWlycm9yIiks
cj1uKHtidWJibGVkOm51bGwsY2FwdHVyZWQ6bnVsbH0pLG89bih7dG9wQmx1cjpudWxsLHRvcENo
YW5nZTpudWxsLHRvcENsaWNrOm51bGwsdG9wRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkOm51bGws
dG9wRG91YmxlQ2xpY2s6bnVsbCx0b3BEcmFnOm51bGwsdG9wRHJhZ0VuZDpudWxsLHRvcERyYWdF
bnRlcjpudWxsLHRvcERyYWdFeGl0Om51bGwsdG9wRHJhZ0xlYXZlOm51bGwsdG9wRHJhZ092ZXI6
bnVsbCx0b3BEcmFnU3RhcnQ6bnVsbCx0b3BEcm9wOm51bGwsdG9wRm9jdXM6bnVsbCx0b3BJbnB1
dDpudWxsLHRvcEtleURvd246bnVsbCx0b3BLZXlQcmVzczpudWxsLHRvcEtleVVwOm51bGwsdG9w
TW91c2VEb3duOm51bGwsdG9wTW91c2VNb3ZlOm51bGwsdG9wTW91c2VPdXQ6bnVsbCx0b3BNb3Vz
ZU92ZXI6bnVsbCx0b3BNb3VzZVVwOm51bGwsdG9wU2Nyb2xsOm51bGwsdG9wU2VsZWN0aW9uQ2hh
bmdlOm51bGwsdG9wU3VibWl0Om51bGwsdG9wVG91Y2hDYW5jZWw6bnVsbCx0b3BUb3VjaEVuZDpu
dWxsLHRvcFRvdWNoTW92ZTpudWxsLHRvcFRvdWNoU3RhcnQ6bnVsbCx0b3BXaGVlbDpudWxsfSks
aT17dG9wTGV2ZWxUeXBlczpvLFByb3BhZ2F0aW9uUGhhc2VzOnJ9O3QuZXhwb3J0cz1pfSx7Ii4v
a2V5TWlycm9yIjo3OH1dLDE0OltmdW5jdGlvbihlLHQpe3ZhciBuPXtsaXN0ZW46ZnVuY3Rpb24o
ZSx0LG4pe2UuYWRkRXZlbnRMaXN0ZW5lcj9lLmFkZEV2ZW50TGlzdGVuZXIodCxuLCExKTplLmF0
dGFjaEV2ZW50JiZlLmF0dGFjaEV2ZW50KCJvbiIrdCxuKX0sY2FwdHVyZTpmdW5jdGlvbihlLHQs
bil7ZS5hZGRFdmVudExpc3RlbmVyJiZlLmFkZEV2ZW50TGlzdGVuZXIodCxuLCEwKX19O3QuZXhw
b3J0cz1ufSx7fV0sMTU6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4vQ2Fs
bGJhY2tSZWdpc3RyeSIpLHI9ZSgiLi9FdmVudFBsdWdpblJlZ2lzdHJ5Iiksbz1lKCIuL0V2ZW50
UGx1Z2luVXRpbHMiKSxpPWUoIi4vRXZlbnRQcm9wYWdhdG9ycyIpLGE9ZSgiLi9FeGVjdXRpb25F
bnZpcm9ubWVudCIpLHM9ZSgiLi9hY2N1bXVsYXRlIiksdT1lKCIuL2ZvckVhY2hBY2N1bXVsYXRl
ZCIpLGw9ZSgiLi9pbnZhcmlhbnQiKSxjPW51bGwscD1mdW5jdGlvbihlKXtpZihlKXt2YXIgdD1v
LmV4ZWN1dGVEaXNwYXRjaCxuPXIuZ2V0UGx1Z2luTW9kdWxlRm9yRXZlbnQoZSk7biYmbi5leGVj
dXRlRGlzcGF0Y2gmJih0PW4uZXhlY3V0ZURpc3BhdGNoKSxvLmV4ZWN1dGVEaXNwYXRjaGVzSW5P
cmRlcihlLHQpLGUuaXNQZXJzaXN0ZW50KCl8fGUuY29uc3RydWN0b3IucmVsZWFzZShlKX19LGQ9
e2luamVjdGlvbjp7aW5qZWN0SW5zdGFuY2VIYW5kbGU6aS5pbmplY3Rpb24uaW5qZWN0SW5zdGFu
Y2VIYW5kbGUsaW5qZWN0RXZlbnRQbHVnaW5PcmRlcjpyLmluamVjdEV2ZW50UGx1Z2luT3JkZXIs
aW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lOnIuaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lfSxyZWdp
c3RyYXRpb25OYW1lczpyLnJlZ2lzdHJhdGlvbk5hbWVzLHB1dExpc3RlbmVyOm4ucHV0TGlzdGVu
ZXIsZ2V0TGlzdGVuZXI6bi5nZXRMaXN0ZW5lcixkZWxldGVMaXN0ZW5lcjpuLmRlbGV0ZUxpc3Rl
bmVyLGRlbGV0ZUFsbExpc3RlbmVyczpuLmRlbGV0ZUFsbExpc3RlbmVycyxleHRyYWN0RXZlbnRz
OmZ1bmN0aW9uKGUsdCxuLG8pe2Zvcih2YXIgaSxhPXIucGx1Z2lucyx1PTAsbD1hLmxlbmd0aDts
PnU7dSsrKXt2YXIgYz1hW3VdO2lmKGMpe3ZhciBwPWMuZXh0cmFjdEV2ZW50cyhlLHQsbixvKTtw
JiYoaT1zKGkscCkpfX1yZXR1cm4gaX0sZW5xdWV1ZUV2ZW50czpmdW5jdGlvbihlKXtlJiYoYz1z
KGMsZSkpfSxwcm9jZXNzRXZlbnRRdWV1ZTpmdW5jdGlvbigpe3ZhciBlPWM7Yz1udWxsLHUoZSxw
KSxsKCFjKX19O2EuY2FuVXNlRE9NJiYod2luZG93LkV2ZW50UGx1Z2luSHViPWQpLHQuZXhwb3J0
cz1kfSx7Ii4vQ2FsbGJhY2tSZWdpc3RyeSI6NCwiLi9FdmVudFBsdWdpblJlZ2lzdHJ5IjoxNiwi
Li9FdmVudFBsdWdpblV0aWxzIjoxNywiLi9FdmVudFByb3BhZ2F0b3JzIjoxOCwiLi9FeGVjdXRp
b25FbnZpcm9ubWVudCI6MTksIi4vYWNjdW11bGF0ZSI6NjAsIi4vZm9yRWFjaEFjY3VtdWxhdGVk
Ijo2OCwiLi9pbnZhcmlhbnQiOjc1fV0sMTY6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1
bmN0aW9uIG4oKXtpZihhKWZvcih2YXIgZSBpbiBzKXt2YXIgdD1zW2VdLG49YS5pbmRleE9mKGUp
O2lmKGkobj4tMSksIXUucGx1Z2luc1tuXSl7aSh0LmV4dHJhY3RFdmVudHMpLHUucGx1Z2luc1tu
XT10O3ZhciBvPXQuZXZlbnRUeXBlcztmb3IodmFyIGwgaW4gbylpKHIob1tsXSx0KSl9fX1mdW5j
dGlvbiByKGUsdCl7dmFyIG49ZS5waGFzZWRSZWdpc3RyYXRpb25OYW1lcztpZihuKXtmb3IodmFy
IHIgaW4gbilpZihuLmhhc093blByb3BlcnR5KHIpKXt2YXIgaT1uW3JdO28oaSx0KX1yZXR1cm4h
MH1yZXR1cm4gZS5yZWdpc3RyYXRpb25OYW1lPyhvKGUucmVnaXN0cmF0aW9uTmFtZSx0KSwhMCk6
ITF9ZnVuY3Rpb24gbyhlLHQpe2koIXUucmVnaXN0cmF0aW9uTmFtZXNbZV0pLHUucmVnaXN0cmF0
aW9uTmFtZXNbZV09dCx1LnJlZ2lzdHJhdGlvbk5hbWVzS2V5cy5wdXNoKGUpfXZhciBpPWUoIi4v
aW52YXJpYW50IiksYT1udWxsLHM9e30sdT17cGx1Z2luczpbXSxyZWdpc3RyYXRpb25OYW1lczp7
fSxyZWdpc3RyYXRpb25OYW1lc0tleXM6W10saW5qZWN0RXZlbnRQbHVnaW5PcmRlcjpmdW5jdGlv
bihlKXtpKCFhKSxhPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUpLG4oKX0saW5qZWN0RXZl
bnRQbHVnaW5zQnlOYW1lOmZ1bmN0aW9uKGUpe3ZhciB0PSExO2Zvcih2YXIgciBpbiBlKWlmKGUu
aGFzT3duUHJvcGVydHkocikpe3ZhciBvPWVbcl07c1tyXSE9PW8mJihpKCFzW3JdKSxzW3JdPW8s
dD0hMCl9dCYmbigpfSxnZXRQbHVnaW5Nb2R1bGVGb3JFdmVudDpmdW5jdGlvbihlKXt2YXIgdD1l
LmRpc3BhdGNoQ29uZmlnO2lmKHQucmVnaXN0cmF0aW9uTmFtZSlyZXR1cm4gdS5yZWdpc3RyYXRp
b25OYW1lc1t0LnJlZ2lzdHJhdGlvbk5hbWVdfHxudWxsO2Zvcih2YXIgbiBpbiB0LnBoYXNlZFJl
Z2lzdHJhdGlvbk5hbWVzKWlmKHQucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMuaGFzT3duUHJvcGVy
dHkobikpe3ZhciByPXUucmVnaXN0cmF0aW9uTmFtZXNbdC5waGFzZWRSZWdpc3RyYXRpb25OYW1l
c1tuXV07aWYocilyZXR1cm4gcn1yZXR1cm4gbnVsbH0sX3Jlc2V0RXZlbnRQbHVnaW5zOmZ1bmN0
aW9uKCl7YT1udWxsO2Zvcih2YXIgZSBpbiBzKXMuaGFzT3duUHJvcGVydHkoZSkmJmRlbGV0ZSBz
W2VdO3UucGx1Z2lucy5sZW5ndGg9MDt2YXIgdD11LnJlZ2lzdHJhdGlvbk5hbWVzO2Zvcih2YXIg
biBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJmRlbGV0ZSB0W25dO3UucmVnaXN0cmF0aW9uTmFt
ZXNLZXlzLmxlbmd0aD0wfX07dC5leHBvcnRzPXV9LHsiLi9pbnZhcmlhbnQiOjc1fV0sMTc6W2Z1
bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGU9PT1oLnRvcE1v
dXNlVXB8fGU9PT1oLnRvcFRvdWNoRW5kfHxlPT09aC50b3BUb3VjaENhbmNlbH1mdW5jdGlvbiBy
KGUpe3JldHVybiBlPT09aC50b3BNb3VzZU1vdmV8fGU9PT1oLnRvcFRvdWNoTW92ZX1mdW5jdGlv
biBvKGUpe3JldHVybiBlPT09aC50b3BNb3VzZURvd258fGU9PT1oLnRvcFRvdWNoU3RhcnR9ZnVu
Y3Rpb24gaShlLHQpe3ZhciBuPWUuX2Rpc3BhdGNoTGlzdGVuZXJzLHI9ZS5fZGlzcGF0Y2hJRHM7
aWYoQXJyYXkuaXNBcnJheShuKSlmb3IodmFyIG89MDtvPG4ubGVuZ3RoJiYhZS5pc1Byb3BhZ2F0
aW9uU3RvcHBlZCgpO28rKyl0KGUsbltvXSxyW29dKTtlbHNlIG4mJnQoZSxuLHIpfWZ1bmN0aW9u
IGEoZSx0LG4pe3QoZSxuKX1mdW5jdGlvbiBzKGUsdCl7aShlLHQpLGUuX2Rpc3BhdGNoTGlzdGVu
ZXJzPW51bGwsZS5fZGlzcGF0Y2hJRHM9bnVsbH1mdW5jdGlvbiB1KGUpe3ZhciB0PWUuX2Rpc3Bh
dGNoTGlzdGVuZXJzLG49ZS5fZGlzcGF0Y2hJRHM7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZh
ciByPTA7cjx0Lmxlbmd0aCYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtyKyspaWYodFtyXShl
LG5bcl0pKXJldHVybiBuW3JdfWVsc2UgaWYodCYmdChlLG4pKXJldHVybiBuO3JldHVybiBudWxs
fWZ1bmN0aW9uIGwoZSl7dmFyIHQ9ZS5fZGlzcGF0Y2hMaXN0ZW5lcnMsbj1lLl9kaXNwYXRjaElE
cztkKCFBcnJheS5pc0FycmF5KHQpKTt2YXIgcj10P3QoZSxuKTpudWxsO3JldHVybiBlLl9kaXNw
YXRjaExpc3RlbmVycz1udWxsLGUuX2Rpc3BhdGNoSURzPW51bGwscn1mdW5jdGlvbiBjKGUpe3Jl
dHVybiEhZS5fZGlzcGF0Y2hMaXN0ZW5lcnN9dmFyIHA9ZSgiLi9FdmVudENvbnN0YW50cyIpLGQ9
ZSgiLi9pbnZhcmlhbnQiKSxoPXAudG9wTGV2ZWxUeXBlcyxmPXtpc0VuZGlzaDpuLGlzTW92ZWlz
aDpyLGlzU3RhcnRpc2g6byxleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXI6cyxleGVjdXRlRGlzcGF0
Y2hlc0luT3JkZXJTdG9wQXRUcnVlOnUsZXhlY3V0ZURpcmVjdERpc3BhdGNoOmwsaGFzRGlzcGF0
Y2hlczpjLGV4ZWN1dGVEaXNwYXRjaDphfTt0LmV4cG9ydHM9Zn0seyIuL0V2ZW50Q29uc3RhbnRz
IjoxMywiLi9pbnZhcmlhbnQiOjc1fV0sMTg6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1
bmN0aW9uIG4oZSx0LG4pe3ZhciByPXQuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9u
TmFtZXNbbl07cmV0dXJuIGYoZSxyKX1mdW5jdGlvbiByKGUsdCxyKXt2YXIgbz10P3YuYnViYmxl
ZDp2LmNhcHR1cmVkLGk9bihlLHIsbyk7aSYmKHIuX2Rpc3BhdGNoTGlzdGVuZXJzPWQoci5fZGlz
cGF0Y2hMaXN0ZW5lcnMsaSksci5fZGlzcGF0Y2hJRHM9ZChyLl9kaXNwYXRjaElEcyxlKSl9ZnVu
Y3Rpb24gbyhlKXtlJiZlLmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzJiZt
Lkluc3RhbmNlSGFuZGxlLnRyYXZlcnNlVHdvUGhhc2UoZS5kaXNwYXRjaE1hcmtlcixyLGUpfWZ1
bmN0aW9uIGkoZSx0LG4pe2lmKG4mJm4uZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSl7
dmFyIHI9bi5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lLG89ZihlLHIpO28mJihuLl9k
aXNwYXRjaExpc3RlbmVycz1kKG4uX2Rpc3BhdGNoTGlzdGVuZXJzLG8pLG4uX2Rpc3BhdGNoSURz
PWQobi5fZGlzcGF0Y2hJRHMsZSkpfX1mdW5jdGlvbiBhKGUpe2UmJmUuZGlzcGF0Y2hDb25maWcu
cmVnaXN0cmF0aW9uTmFtZSYmaShlLmRpc3BhdGNoTWFya2VyLG51bGwsZSl9ZnVuY3Rpb24gcyhl
KXtoKGUsbyl9ZnVuY3Rpb24gdShlLHQsbixyKXttLkluc3RhbmNlSGFuZGxlLnRyYXZlcnNlRW50
ZXJMZWF2ZShuLHIsaSxlLHQpfWZ1bmN0aW9uIGwoZSl7aChlLGEpfXZhciBjPWUoIi4vQ2FsbGJh
Y2tSZWdpc3RyeSIpLHA9ZSgiLi9FdmVudENvbnN0YW50cyIpLGQ9ZSgiLi9hY2N1bXVsYXRlIiks
aD1lKCIuL2ZvckVhY2hBY2N1bXVsYXRlZCIpLGY9Yy5nZXRMaXN0ZW5lcix2PXAuUHJvcGFnYXRp
b25QaGFzZXMsbT17SW5zdGFuY2VIYW5kbGU6bnVsbCxpbmplY3RJbnN0YW5jZUhhbmRsZTpmdW5j
dGlvbihlKXttLkluc3RhbmNlSGFuZGxlPWV9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGU9IW0u
SW5zdGFuY2VIYW5kbGV8fCFtLkluc3RhbmNlSGFuZGxlLnRyYXZlcnNlVHdvUGhhc2V8fCFtLklu
c3RhbmNlSGFuZGxlLnRyYXZlcnNlRW50ZXJMZWF2ZTtpZihlKXRocm93IG5ldyBFcnJvcigiSW5z
dGFuY2VIYW5kbGUgbm90IGluamVjdGVkIGJlZm9yZSB1c2UhIil9fSxnPXthY2N1bXVsYXRlVHdv
UGhhc2VEaXNwYXRjaGVzOnMsYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXM6bCxhY2N1bXVsYXRl
RW50ZXJMZWF2ZURpc3BhdGNoZXM6dSxpbmplY3Rpb246bX07dC5leHBvcnRzPWd9LHsiLi9DYWxs
YmFja1JlZ2lzdHJ5Ijo0LCIuL0V2ZW50Q29uc3RhbnRzIjoxMywiLi9hY2N1bXVsYXRlIjo2MCwi
Li9mb3JFYWNoQWNjdW11bGF0ZWQiOjY4fV0sMTk6W2Z1bmN0aW9uKGUsdCl7IWZ1bmN0aW9uKCl7
InVzZSBzdHJpY3QiO3ZhciBlPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93LG49e2NhblVzZURP
TTplLGNhblVzZVdvcmtlcnM6InVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXIsaXNJbldvcmtlcjoh
ZSxnbG9iYWw6bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpczsiKSgpfTt0LmV4cG9ydHM9bn0oKX0s
e31dLDIwOltmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbihlKXt2YXIg
dD10aGlzO2lmKHQuaW5zdGFuY2VQb29sLmxlbmd0aCl7dmFyIG49dC5pbnN0YW5jZVBvb2wucG9w
KCk7cmV0dXJuIHQuY2FsbChuLGUpLG59cmV0dXJuIG5ldyB0KGUpfSxyPWZ1bmN0aW9uKGUsdCl7
dmFyIG49dGhpcztpZihuLmluc3RhbmNlUG9vbC5sZW5ndGgpe3ZhciByPW4uaW5zdGFuY2VQb29s
LnBvcCgpO3JldHVybiBuLmNhbGwocixlLHQpLHJ9cmV0dXJuIG5ldyBuKGUsdCl9LG89ZnVuY3Rp
b24oZSx0LG4pe3ZhciByPXRoaXM7aWYoci5pbnN0YW5jZVBvb2wubGVuZ3RoKXt2YXIgbz1yLmlu
c3RhbmNlUG9vbC5wb3AoKTtyZXR1cm4gci5jYWxsKG8sZSx0LG4pLG99cmV0dXJuIG5ldyByKGUs
dCxuKX0saT1mdW5jdGlvbihlLHQsbixyLG8pe3ZhciBpPXRoaXM7aWYoaS5pbnN0YW5jZVBvb2wu
bGVuZ3RoKXt2YXIgYT1pLmluc3RhbmNlUG9vbC5wb3AoKTtyZXR1cm4gaS5jYWxsKGEsZSx0LG4s
cixvKSxhfXJldHVybiBuZXcgaShlLHQsbixyLG8pfSxhPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7
ZS5kZXN0cnVjdG9yJiZlLmRlc3RydWN0b3IoKSx0Lmluc3RhbmNlUG9vbC5sZW5ndGg8dC5wb29s
U2l6ZSYmdC5pbnN0YW5jZVBvb2wucHVzaChlKX0scz0xMCx1PW4sbD1mdW5jdGlvbihlLHQpe3Zh
ciBuPWU7cmV0dXJuIG4uaW5zdGFuY2VQb29sPVtdLG4uZ2V0UG9vbGVkPXR8fHUsbi5wb29sU2l6
ZXx8KG4ucG9vbFNpemU9cyksbi5yZWxlYXNlPWEsbn0sYz17YWRkUG9vbGluZ1RvOmwsb25lQXJn
dW1lbnRQb29sZXI6bix0d29Bcmd1bWVudFBvb2xlcjpyLHRocmVlQXJndW1lbnRQb29sZXI6byxm
aXZlQXJndW1lbnRQb29sZXI6aX07dC5leHBvcnRzPWN9LHt9XSwyMTpbZnVuY3Rpb24oZSx0KXsi
dXNlIHN0cmljdCI7dmFyIG49ZSgiLi9SZWFjdENvbXBvc2l0ZUNvbXBvbmVudCIpLHI9ZSgiLi9S
ZWFjdENvbXBvbmVudCIpLG89ZSgiLi9SZWFjdERPTSIpLGk9ZSgiLi9SZWFjdE1vdW50IiksYT1l
KCIuL1JlYWN0UHJvcFR5cGVzIikscz1lKCIuL1JlYWN0U2VydmVyUmVuZGVyaW5nIiksdT1lKCIu
L1JlYWN0RGVmYXVsdEluamVjdGlvbiIpO3UuaW5qZWN0KCk7dmFyIGw9e0RPTTpvLFByb3BUeXBl
czphLGluaXRpYWxpemVUb3VjaEV2ZW50czpmdW5jdGlvbihlKXtpLnVzZVRvdWNoRXZlbnRzPWV9
LGF1dG9CaW5kOm4uYXV0b0JpbmQsY3JlYXRlQ2xhc3M6bi5jcmVhdGVDbGFzcyxjb25zdHJ1Y3RB
bmRSZW5kZXJDb21wb25lbnQ6aS5jb25zdHJ1Y3RBbmRSZW5kZXJDb21wb25lbnQsY29uc3RydWN0
QW5kUmVuZGVyQ29tcG9uZW50QnlJRDppLmNvbnN0cnVjdEFuZFJlbmRlckNvbXBvbmVudEJ5SUQs
cmVuZGVyQ29tcG9uZW50OmkucmVuZGVyQ29tcG9uZW50LHJlbmRlckNvbXBvbmVudFRvU3RyaW5n
OnMucmVuZGVyQ29tcG9uZW50VG9TdHJpbmcsdW5tb3VudEFuZFJlbGVhc2VSZWFjdFJvb3ROb2Rl
OmkudW5tb3VudEFuZFJlbGVhc2VSZWFjdFJvb3ROb2RlLGlzVmFsaWRDb21wb25lbnQ6ci5pc1Zh
bGlkQ29tcG9uZW50fTt0LmV4cG9ydHM9bH0seyIuL1JlYWN0Q29tcG9uZW50IjoyMiwiLi9SZWFj
dENvbXBvc2l0ZUNvbXBvbmVudCI6MjMsIi4vUmVhY3RET00iOjI1LCIuL1JlYWN0RGVmYXVsdElu
amVjdGlvbiI6MzIsIi4vUmVhY3RNb3VudCI6MzgsIi4vUmVhY3RQcm9wVHlwZXMiOjQ0LCIuL1Jl
YWN0U2VydmVyUmVuZGVyaW5nIjo0Nn1dLDIyOltmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt2
YXIgbj1lKCIuL1JlYWN0Q3VycmVudE93bmVyIikscj1lKCIuL1JlYWN0RE9NSURPcGVyYXRpb25z
Iiksbz1lKCIuL1JlYWN0SUQiKSxpPWUoIi4vUmVhY3RNb3VudCIpLGE9ZSgiLi9SZWFjdE93bmVy
Iikscz1lKCIuL1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24iKSx1PWUoIi4vUmVhY3RVcGRhdGVz
IiksbD1lKCIuL2ludmFyaWFudCIpLGM9ZSgiLi9rZXlNaXJyb3IiKSxwPWUoIi4vbWVyZ2UiKSxk
PSJ7b3duZXJ9IixoPWMoe01PVU5URUQ6bnVsbCxVTk1PVU5URUQ6bnVsbH0pLGY9e2lzVmFsaWRD
b21wb25lbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuISghZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGUubW91
bnRDb21wb25lbnRJbnRvTm9kZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGUucmVjZWl2ZVByb3BzKX0s
Z2V0S2V5OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmUucHJvcHMmJm51bGwhPWUucHJvcHMua2V5
PyIiK2UucHJvcHMua2V5OiIiK3R9LExpZmVDeWNsZTpoLERPTUlET3BlcmF0aW9uczpyLFJlYWN0
UmVjb25jaWxlVHJhbnNhY3Rpb246cyxzZXRET01PcGVyYXRpb25zOmZ1bmN0aW9uKGUpe2YuRE9N
SURPcGVyYXRpb25zPWV9LHNldFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb246ZnVuY3Rpb24oZSl7
Zi5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uPWV9LE1peGluOntpc01vdW50ZWQ6ZnVuY3Rpb24o
KXtyZXR1cm4gdGhpcy5fbGlmZUN5Y2xlU3RhdGU9PT1oLk1PVU5URUR9LGdldERPTU5vZGU6ZnVu
Y3Rpb24oKXtyZXR1cm4gbCh0aGlzLmlzTW91bnRlZCgpKSxvLmdldE5vZGUodGhpcy5fcm9vdE5v
ZGVJRCl9LHNldFByb3BzOmZ1bmN0aW9uKGUsdCl7dGhpcy5yZXBsYWNlUHJvcHMocCh0aGlzLl9w
ZW5kaW5nUHJvcHN8fHRoaXMucHJvcHMsZSksdCl9LHJlcGxhY2VQcm9wczpmdW5jdGlvbihlLHQp
e2woIXRoaXMucHJvcHNbZF0pLHRoaXMuX3BlbmRpbmdQcm9wcz1lLHUuZW5xdWV1ZVVwZGF0ZSh0
aGlzLHQpfSxjb25zdHJ1Y3Q6ZnVuY3Rpb24oZSx0KXt0aGlzLnByb3BzPWV8fHt9LHRoaXMucHJv
cHNbZF09bi5jdXJyZW50LHRoaXMuX2xpZmVDeWNsZVN0YXRlPWguVU5NT1VOVEVELHRoaXMuX3Bl
bmRpbmdQcm9wcz1udWxsLHRoaXMuX3BlbmRpbmdDYWxsYmFja3M9bnVsbDt2YXIgcj1hcmd1bWVu
dHMubGVuZ3RoLTE7aWYoMT09PXIpdGhpcy5wcm9wcy5jaGlsZHJlbj10O2Vsc2UgaWYocj4xKXtm
b3IodmFyIG89QXJyYXkociksaT0wO3I+aTtpKyspb1tpXT1hcmd1bWVudHNbaSsxXTt0aGlzLnBy
b3BzLmNoaWxkcmVuPW99fSxtb3VudENvbXBvbmVudDpmdW5jdGlvbihlKXtsKCF0aGlzLmlzTW91
bnRlZCgpKTt2YXIgdD10aGlzLnByb3BzO251bGwhPXQucmVmJiZhLmFkZENvbXBvbmVudEFzUmVm
VG8odGhpcyx0LnJlZix0W2RdKSx0aGlzLl9yb290Tm9kZUlEPWUsdGhpcy5fbGlmZUN5Y2xlU3Rh
dGU9aC5NT1VOVEVEfSx1bm1vdW50Q29tcG9uZW50OmZ1bmN0aW9uKCl7bCh0aGlzLmlzTW91bnRl
ZCgpKTt2YXIgZT10aGlzLnByb3BzO251bGwhPWUucmVmJiZhLnJlbW92ZUNvbXBvbmVudEFzUmVm
RnJvbSh0aGlzLGUucmVmLGVbZF0pLG8ucHVyZ2VJRCh0aGlzLl9yb290Tm9kZUlEKSx0aGlzLl9y
b290Tm9kZUlEPW51bGwsdGhpcy5fbGlmZUN5Y2xlU3RhdGU9aC5VTk1PVU5URUR9LHJlY2VpdmVQ
cm9wczpmdW5jdGlvbihlLHQpe2wodGhpcy5pc01vdW50ZWQoKSksdGhpcy5fcGVuZGluZ1Byb3Bz
PWUsdGhpcy5fcGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5KHQpfSxwZXJmb3JtVXBkYXRlSWZOZWNl
c3Nhcnk6ZnVuY3Rpb24oKXt2YXIgZT1mLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24uZ2V0UG9v
bGVkKCk7ZS5wZXJmb3JtKHRoaXMuX3BlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeSx0aGlzLGUpLGYu
UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5yZWxlYXNlKGUpfSxfcGVyZm9ybVVwZGF0ZUlmTmVj
ZXNzYXJ5OmZ1bmN0aW9uKGUpe2lmKG51bGwhPXRoaXMuX3BlbmRpbmdQcm9wcyl7dmFyIHQ9dGhp
cy5wcm9wczt0aGlzLnByb3BzPXRoaXMuX3BlbmRpbmdQcm9wcyx0aGlzLl9wZW5kaW5nUHJvcHM9
bnVsbCx0aGlzLnVwZGF0ZUNvbXBvbmVudChlLHQpfX0sdXBkYXRlQ29tcG9uZW50OmZ1bmN0aW9u
KGUsdCl7dmFyIG49dGhpcy5wcm9wczsobltkXSE9PXRbZF18fG4ucmVmIT09dC5yZWYpJiYobnVs
bCE9dC5yZWYmJmEucmVtb3ZlQ29tcG9uZW50QXNSZWZGcm9tKHRoaXMsdC5yZWYsdFtkXSksbnVs
bCE9bi5yZWYmJmEuYWRkQ29tcG9uZW50QXNSZWZUbyh0aGlzLG4ucmVmLG5bZF0pKX0sbW91bnRD
b21wb25lbnRJbnRvTm9kZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9Zi5SZWFjdFJlY29uY2lsZVRy
YW5zYWN0aW9uLmdldFBvb2xlZCgpO3IucGVyZm9ybSh0aGlzLl9tb3VudENvbXBvbmVudEludG9O
b2RlLHRoaXMsZSx0LHIsbiksZi5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uLnJlbGVhc2Uocil9
LF9tb3VudENvbXBvbmVudEludG9Ob2RlOmZ1bmN0aW9uKGUsdCxuLHIpe2wodCYmMT09PXQubm9k
ZVR5cGUpO3ZhciBvPURhdGUubm93KCksYT10aGlzLm1vdW50Q29tcG9uZW50KGUsbik7aWYoaS50
b3RhbEluc3RhbnRpYXRpb25UaW1lKz1EYXRlLm5vdygpLW8sIXIpe3ZhciBzPURhdGUubm93KCks
dT10LnBhcmVudE5vZGU7aWYodSl7dmFyIGM9dC5uZXh0U2libGluZzt1LnJlbW92ZUNoaWxkKHQp
LHQuaW5uZXJIVE1MPWEsYz91Lmluc2VydEJlZm9yZSh0LGMpOnUuYXBwZW5kQ2hpbGQodCl9ZWxz
ZSB0LmlubmVySFRNTD1hO2kudG90YWxJbmplY3Rpb25UaW1lKz1EYXRlLm5vdygpLXN9fSx1bm1v
dW50Q29tcG9uZW50RnJvbU5vZGU6ZnVuY3Rpb24oZSl7Zm9yKHRoaXMudW5tb3VudENvbXBvbmVu
dCgpO2UubGFzdENoaWxkOyllLnJlbW92ZUNoaWxkKGUubGFzdENoaWxkKX0saXNPd25lZEJ5OmZ1
bmN0aW9uKGUpe3JldHVybiB0aGlzLnByb3BzW2RdPT09ZX0sZ2V0U2libGluZ0J5UmVmOmZ1bmN0
aW9uKGUpe3ZhciB0PXRoaXMucHJvcHNbZF07cmV0dXJuIHQmJnQucmVmcz90LnJlZnNbZV06bnVs
bH19fTt0LmV4cG9ydHM9Zn0seyIuL1JlYWN0Q3VycmVudE93bmVyIjoyNCwiLi9SZWFjdERPTUlE
T3BlcmF0aW9ucyI6MjcsIi4vUmVhY3RJRCI6MzUsIi4vUmVhY3RNb3VudCI6MzgsIi4vUmVhY3RP
d25lciI6NDIsIi4vUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbiI6NDUsIi4vUmVhY3RVcGRhdGVz
Ijo0OCwiLi9pbnZhcmlhbnQiOjc1LCIuL2tleU1pcnJvciI6NzgsIi4vbWVyZ2UiOjgxfV0sMjM6
W2Z1bmN0aW9uKGUsdCl7IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSx0KXt2
YXIgbj1tW3RdO0MuaGFzT3duUHJvcGVydHkodCkmJnAobj09PXYuT1ZFUlJJREVfQkFTRSksZS5o
YXNPd25Qcm9wZXJ0eSh0KSYmcChuPT09di5ERUZJTkVfTUFOWSl9ZnVuY3Rpb24gcihlKXt2YXIg
dD1lLl9jb21wb3NpdGVMaWZlQ3ljbGVTdGF0ZTtwKGUuaXNNb3VudGVkKCl8fHQ9PT15Lk1PVU5U
SU5HKSxwKHQhPT15LlJFQ0VJVklOR19TVEFURSYmdCE9PXkuVU5NT1VOVElORyl9ZnVuY3Rpb24g
byhlLHQpe3ZhciByPWUucHJvdG90eXBlO2Zvcih2YXIgbyBpbiB0KXt2YXIgYT10W29dO2lmKHQu
aGFzT3duUHJvcGVydHkobykmJmEpaWYobihyLG8pLGcuaGFzT3duUHJvcGVydHkobykpZ1tvXShl
LGEpO2Vsc2V7dmFyIHM9byBpbiBtLHU9byBpbiByLGw9YS5fX3JlYWN0RG9udEJpbmQsYz0iZnVu
Y3Rpb24iPT10eXBlb2YgYSxwPWMmJiFzJiYhdSYmIWw7cD8oci5fX3JlYWN0QXV0b0JpbmRNYXB8
fChyLl9fcmVhY3RBdXRvQmluZE1hcD17fSksci5fX3JlYWN0QXV0b0JpbmRNYXBbb109YSxyW29d
PWEpOnJbb109dT9pKHJbb10sYSk6YX19fWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm4gZnVuY3Rpb24o
KXtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19dmFyIGE9
ZSgiLi9SZWFjdENvbXBvbmVudCIpLHM9ZSgiLi9SZWFjdEN1cnJlbnRPd25lciIpLHU9ZSgiLi9S
ZWFjdE93bmVyIiksbD1lKCIuL1JlYWN0UHJvcFRyYW5zZmVyZXIiKSxjPWUoIi4vUmVhY3RVcGRh
dGVzIikscD1lKCIuL2ludmFyaWFudCIpLGQ9ZSgiLi9rZXlNaXJyb3IiKSxoPWUoIi4vbWVyZ2Ui
KSxmPWUoIi4vbWl4SW50byIpLHY9ZCh7REVGSU5FX09OQ0U6bnVsbCxERUZJTkVfTUFOWTpudWxs
LE9WRVJSSURFX0JBU0U6bnVsbH0pLG09e21peGluczp2LkRFRklORV9NQU5ZLHByb3BUeXBlczp2
LkRFRklORV9PTkNFLGdldERlZmF1bHRQcm9wczp2LkRFRklORV9PTkNFLGdldEluaXRpYWxTdGF0
ZTp2LkRFRklORV9PTkNFLHJlbmRlcjp2LkRFRklORV9PTkNFLGNvbXBvbmVudFdpbGxNb3VudDp2
LkRFRklORV9NQU5ZLGNvbXBvbmVudERpZE1vdW50OnYuREVGSU5FX01BTlksY29tcG9uZW50V2ls
bFJlY2VpdmVQcm9wczp2LkRFRklORV9NQU5ZLHNob3VsZENvbXBvbmVudFVwZGF0ZTp2LkRFRklO
RV9PTkNFLGNvbXBvbmVudFdpbGxVcGRhdGU6di5ERUZJTkVfTUFOWSxjb21wb25lbnREaWRVcGRh
dGU6di5ERUZJTkVfTUFOWSxjb21wb25lbnRXaWxsVW5tb3VudDp2LkRFRklORV9NQU5ZLHVwZGF0
ZUNvbXBvbmVudDp2Lk9WRVJSSURFX0JBU0V9LGc9e2Rpc3BsYXlOYW1lOmZ1bmN0aW9uKGUsdCl7
ZS5kaXNwbGF5TmFtZT10fSxtaXhpbnM6ZnVuY3Rpb24oZSx0KXtpZih0KWZvcih2YXIgbj0wO248
dC5sZW5ndGg7bisrKW8oZSx0W25dKX0scHJvcFR5cGVzOmZ1bmN0aW9uKGUsdCl7ZS5wcm9wVHlw
ZXM9dH19LHk9ZCh7TU9VTlRJTkc6bnVsbCxVTk1PVU5USU5HOm51bGwsUkVDRUlWSU5HX1BST1BT
Om51bGwsUkVDRUlWSU5HX1NUQVRFOm51bGx9KSxDPXtjb25zdHJ1Y3Q6ZnVuY3Rpb24oKXthLk1p
eGluLmNvbnN0cnVjdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5zdGF0ZT1udWxsLHRoaXMu
X3BlbmRpbmdTdGF0ZT1udWxsLHRoaXMuX2NvbXBvc2l0ZUxpZmVDeWNsZVN0YXRlPW51bGx9LGlz
TW91bnRlZDpmdW5jdGlvbigpe3JldHVybiBhLk1peGluLmlzTW91bnRlZC5jYWxsKHRoaXMpJiZ0
aGlzLl9jb21wb3NpdGVMaWZlQ3ljbGVTdGF0ZSE9PXkuTU9VTlRJTkd9LG1vdW50Q29tcG9uZW50
OmZ1bmN0aW9uKGUsdCl7YS5NaXhpbi5tb3VudENvbXBvbmVudC5jYWxsKHRoaXMsZSx0KSx0aGlz
Ll9jb21wb3NpdGVMaWZlQ3ljbGVTdGF0ZT15Lk1PVU5USU5HLHRoaXMuX2RlZmF1bHRQcm9wcz10
aGlzLmdldERlZmF1bHRQcm9wcz90aGlzLmdldERlZmF1bHRQcm9wcygpOm51bGwsdGhpcy5fcHJv
Y2Vzc1Byb3BzKHRoaXMucHJvcHMpLHRoaXMuX19yZWFjdEF1dG9CaW5kTWFwJiZ0aGlzLl9iaW5k
QXV0b0JpbmRNZXRob2RzKCksdGhpcy5zdGF0ZT10aGlzLmdldEluaXRpYWxTdGF0ZT90aGlzLmdl
dEluaXRpYWxTdGF0ZSgpOm51bGwsdGhpcy5fcGVuZGluZ1N0YXRlPW51bGwsdGhpcy5fcGVuZGlu
Z0ZvcmNlVXBkYXRlPSExLHRoaXMuY29tcG9uZW50V2lsbE1vdW50JiYodGhpcy5jb21wb25lbnRX
aWxsTW91bnQoKSx0aGlzLl9wZW5kaW5nU3RhdGUmJih0aGlzLnN0YXRlPXRoaXMuX3BlbmRpbmdT
dGF0ZSx0aGlzLl9wZW5kaW5nU3RhdGU9bnVsbCkpLHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50PXRo
aXMuX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudCgpLHRoaXMuX2NvbXBvc2l0ZUxpZmVDeWNsZVN0
YXRlPW51bGw7dmFyIG49dGhpcy5fcmVuZGVyZWRDb21wb25lbnQubW91bnRDb21wb25lbnQoZSx0
KTtyZXR1cm4gdGhpcy5jb21wb25lbnREaWRNb3VudCYmdC5nZXRSZWFjdE9uRE9NUmVhZHkoKS5l
bnF1ZXVlKHRoaXMsdGhpcy5jb21wb25lbnREaWRNb3VudCksbn0sdW5tb3VudENvbXBvbmVudDpm
dW5jdGlvbigpe3RoaXMuX2NvbXBvc2l0ZUxpZmVDeWNsZVN0YXRlPXkuVU5NT1VOVElORyx0aGlz
LmNvbXBvbmVudFdpbGxVbm1vdW50JiZ0aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50KCksdGhpcy5f
Y29tcG9zaXRlTGlmZUN5Y2xlU3RhdGU9bnVsbCx0aGlzLl9kZWZhdWx0UHJvcHM9bnVsbCxhLk1p
eGluLnVubW91bnRDb21wb25lbnQuY2FsbCh0aGlzKSx0aGlzLl9yZW5kZXJlZENvbXBvbmVudC51
bm1vdW50Q29tcG9uZW50KCksdGhpcy5fcmVuZGVyZWRDb21wb25lbnQ9bnVsbCx0aGlzLnJlZnMm
Jih0aGlzLnJlZnM9bnVsbCl9LHNldFN0YXRlOmZ1bmN0aW9uKGUsdCl7dGhpcy5yZXBsYWNlU3Rh
dGUoaCh0aGlzLl9wZW5kaW5nU3RhdGV8fHRoaXMuc3RhdGUsZSksdCl9LHJlcGxhY2VTdGF0ZTpm
dW5jdGlvbihlLHQpe3IodGhpcyksdGhpcy5fcGVuZGluZ1N0YXRlPWUsYy5lbnF1ZXVlVXBkYXRl
KHRoaXMsdCl9LF9wcm9jZXNzUHJvcHM6ZnVuY3Rpb24oZSl7dmFyIHQsbj10aGlzLl9kZWZhdWx0
UHJvcHM7Zm9yKHQgaW4gbil0IGluIGV8fChlW3RdPW5bdF0pO3ZhciByPXRoaXMuY29uc3RydWN0
b3IucHJvcFR5cGVzO2lmKHIpe3ZhciBvPXRoaXMuY29uc3RydWN0b3IuZGlzcGxheU5hbWU7Zm9y
KHQgaW4gcil7dmFyIGk9clt0XTtpJiZpKGUsdCxvKX19fSxwZXJmb3JtVXBkYXRlSWZOZWNlc3Nh
cnk6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9jb21wb3NpdGVMaWZlQ3ljbGVTdGF0ZTtlIT09eS5N
T1VOVElORyYmZSE9PXkuUkVDRUlWSU5HX1BST1BTJiZhLk1peGluLnBlcmZvcm1VcGRhdGVJZk5l
Y2Vzc2FyeS5jYWxsKHRoaXMpfSxfcGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5OmZ1bmN0aW9uKGUp
e2lmKG51bGwhPXRoaXMuX3BlbmRpbmdQcm9wc3x8bnVsbCE9dGhpcy5fcGVuZGluZ1N0YXRlfHx0
aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGUpe3ZhciB0PXRoaXMucHJvcHM7bnVsbCE9dGhpcy5fcGVu
ZGluZ1Byb3BzJiYodD10aGlzLl9wZW5kaW5nUHJvcHMsdGhpcy5fcHJvY2Vzc1Byb3BzKHQpLHRo
aXMuX3BlbmRpbmdQcm9wcz1udWxsLHRoaXMuX2NvbXBvc2l0ZUxpZmVDeWNsZVN0YXRlPXkuUkVD
RUlWSU5HX1BST1BTLHRoaXMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmdGhpcy5jb21wb25l
bnRXaWxsUmVjZWl2ZVByb3BzKHQsZSkpLHRoaXMuX2NvbXBvc2l0ZUxpZmVDeWNsZVN0YXRlPXku
UkVDRUlWSU5HX1NUQVRFO3ZhciBuPXRoaXMuX3BlbmRpbmdTdGF0ZXx8dGhpcy5zdGF0ZTt0aGlz
Ll9wZW5kaW5nU3RhdGU9bnVsbCx0aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGV8fCF0aGlzLnNob3Vs
ZENvbXBvbmVudFVwZGF0ZXx8dGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGUodCxuKT8odGhpcy5f
cGVuZGluZ0ZvcmNlVXBkYXRlPSExLHRoaXMuX3BlcmZvcm1Db21wb25lbnRVcGRhdGUodCxuLGUp
KToodGhpcy5wcm9wcz10LHRoaXMuc3RhdGU9biksdGhpcy5fY29tcG9zaXRlTGlmZUN5Y2xlU3Rh
dGU9bnVsbH19LF9wZXJmb3JtQ29tcG9uZW50VXBkYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10
aGlzLnByb3BzLG89dGhpcy5zdGF0ZTt0aGlzLmNvbXBvbmVudFdpbGxVcGRhdGUmJnRoaXMuY29t
cG9uZW50V2lsbFVwZGF0ZShlLHQsbiksdGhpcy5wcm9wcz1lLHRoaXMuc3RhdGU9dCx0aGlzLnVw
ZGF0ZUNvbXBvbmVudChuLHIsbyksdGhpcy5jb21wb25lbnREaWRVcGRhdGUmJm4uZ2V0UmVhY3RP
bkRPTVJlYWR5KCkuZW5xdWV1ZSh0aGlzLHRoaXMuY29tcG9uZW50RGlkVXBkYXRlLmJpbmQodGhp
cyxyLG8pKX0sdXBkYXRlQ29tcG9uZW50OmZ1bmN0aW9uKGUsdCl7YS5NaXhpbi51cGRhdGVDb21w
b25lbnQuY2FsbCh0aGlzLGUsdCk7dmFyIG49dGhpcy5fcmVuZGVyZWRDb21wb25lbnQscj10aGlz
Ll9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQoKTtpZihuLmNvbnN0cnVjdG9yPT09ci5jb25zdHJ1
Y3RvciluLnJlY2VpdmVQcm9wcyhyLnByb3BzLGUpO2Vsc2V7dmFyIG89dGhpcy5fcm9vdE5vZGVJ
RCxpPW4uX3Jvb3ROb2RlSUQ7bi51bm1vdW50Q29tcG9uZW50KCk7dmFyIHM9ci5tb3VudENvbXBv
bmVudChvLGUpO2EuRE9NSURPcGVyYXRpb25zLmRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFy
a3VwQnlJRChpLHMpLHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50PXJ9fSxmb3JjZVVwZGF0ZTpmdW5j
dGlvbihlKXt2YXIgdD10aGlzLl9jb21wb3NpdGVMaWZlQ3ljbGVTdGF0ZTtwKHRoaXMuaXNNb3Vu
dGVkKCl8fHQ9PT15Lk1PVU5USU5HKSxwKHQhPT15LlJFQ0VJVklOR19TVEFURSYmdCE9PXkuVU5N
T1VOVElORyksdGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlPSEwLGMuZW5xdWV1ZVVwZGF0ZSh0aGlz
LGUpfSxfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50OmZ1bmN0aW9uKCl7dmFyIGU7cy5jdXJyZW50
PXRoaXM7dHJ5e2U9dGhpcy5yZW5kZXIoKX1jYXRjaCh0KXt0aHJvdyB0fWZpbmFsbHl7cy5jdXJy
ZW50PW51bGx9cmV0dXJuIHAoYS5pc1ZhbGlkQ29tcG9uZW50KGUpKSxlfSxfYmluZEF1dG9CaW5k
TWV0aG9kczpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLl9fcmVhY3RBdXRvQmluZE1hcClp
Zih0aGlzLl9fcmVhY3RBdXRvQmluZE1hcC5oYXNPd25Qcm9wZXJ0eShlKSl7dmFyIHQ9dGhpcy5f
X3JlYWN0QXV0b0JpbmRNYXBbZV07dGhpc1tlXT10aGlzLl9iaW5kQXV0b0JpbmRNZXRob2QodCl9
fSxfYmluZEF1dG9CaW5kTWV0aG9kOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1mdW5jdGlvbigp
e3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX07cmV0dXJuIG59fSxFPWZ1bmN0aW9uKCl7fTtm
KEUsYS5NaXhpbiksZihFLHUuTWl4aW4pLGYoRSxsLk1peGluKSxmKEUsQyk7dmFyIEQ9e0xpZmVD
eWNsZTp5LEJhc2U6RSxjcmVhdGVDbGFzczpmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe307
dC5wcm90b3R5cGU9bmV3IEUsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCxvKHQsZSkscCh0LnBy
b3RvdHlwZS5yZW5kZXIpO2Zvcih2YXIgbiBpbiBtKXQucHJvdG90eXBlW25dfHwodC5wcm90b3R5
cGVbbl09bnVsbCk7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgdDtyZXR1cm4gZS5jb25zdHJ1
Y3QuYXBwbHkoZSxhcmd1bWVudHMpLGV9O3JldHVybiByLmNvbXBvbmVudENvbnN0cnVjdG9yPXQs
ci5vcmlnaW5hbFNwZWM9ZSxyfSxhdXRvQmluZDpmdW5jdGlvbihlKXtyZXR1cm4gZX19O3QuZXhw
b3J0cz1EfSgpfSx7Ii4vUmVhY3RDb21wb25lbnQiOjIyLCIuL1JlYWN0Q3VycmVudE93bmVyIjoy
NCwiLi9SZWFjdE93bmVyIjo0MiwiLi9SZWFjdFByb3BUcmFuc2ZlcmVyIjo0MywiLi9SZWFjdFVw
ZGF0ZXMiOjQ4LCIuL2ludmFyaWFudCI6NzUsIi4va2V5TWlycm9yIjo3OCwiLi9tZXJnZSI6ODEs
Ii4vbWl4SW50byI6ODR9XSwyNDpbZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dmFyIG49e2N1
cnJlbnQ6bnVsbH07dC5leHBvcnRzPW59LHt9XSwyNTpbZnVuY3Rpb24oZSx0KXsidXNlIHN0cmlj
dCI7ZnVuY3Rpb24gbihlLHQpe3ZhciBuPWZ1bmN0aW9uKCl7fTtuLnByb3RvdHlwZT1uZXcgcihl
LHQpLG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW47dmFyIG89ZnVuY3Rpb24oKXt2YXIgZT1uZXcg
bjtyZXR1cm4gZS5jb25zdHJ1Y3QuYXBwbHkoZSxhcmd1bWVudHMpLGV9O3JldHVybiBvLmNvbXBv
bmVudENvbnN0cnVjdG9yPW4sb312YXIgcj1lKCIuL1JlYWN0TmF0aXZlQ29tcG9uZW50Iiksbz1l
KCIuL21lcmdlSW50byIpLGk9ZSgiLi9vYmpNYXBLZXlWYWwiKSxhPWkoe2E6ITEsYWJicjohMSxh
ZGRyZXNzOiExLGFyZWE6ITEsYXJ0aWNsZTohMSxhc2lkZTohMSxhdWRpbzohMSxiOiExLGJhc2U6
ITEsYmRpOiExLGJkbzohMSxiaWc6ITEsYmxvY2txdW90ZTohMSxib2R5OiExLGJyOiEwLGJ1dHRv
bjohMSxjYW52YXM6ITEsY2FwdGlvbjohMSxjaXRlOiExLGNvZGU6ITEsY29sOiEwLGNvbGdyb3Vw
OiExLGRhdGE6ITEsZGF0YWxpc3Q6ITEsZGQ6ITEsZGVsOiExLGRldGFpbHM6ITEsZGZuOiExLGRp
djohMSxkbDohMSxkdDohMSxlbTohMSxlbWJlZDohMCxmaWVsZHNldDohMSxmaWdjYXB0aW9uOiEx
LGZpZ3VyZTohMSxmb290ZXI6ITEsZm9ybTohMSxoMTohMSxoMjohMSxoMzohMSxoNDohMSxoNToh
MSxoNjohMSxoZWFkOiExLGhlYWRlcjohMSxocjohMCxodG1sOiExLGk6ITEsaWZyYW1lOiExLGlt
ZzohMCxpbnB1dDohMCxpbnM6ITEsa2JkOiExLGtleWdlbjohMCxsYWJlbDohMSxsZWdlbmQ6ITEs
bGk6ITEsbGluazohMSxtYWluOiExLG1hcDohMSxtYXJrOiExLG1lbnU6ITEsbWVudWl0ZW06ITEs
bWV0YTohMCxtZXRlcjohMSxuYXY6ITEsbm9zY3JpcHQ6ITEsb2JqZWN0OiExLG9sOiExLG9wdGdy
b3VwOiExLG9wdGlvbjohMSxvdXRwdXQ6ITEscDohMSxwYXJhbTohMCxwcmU6ITEscHJvZ3Jlc3M6
ITEscTohMSxycDohMSxydDohMSxydWJ5OiExLHM6ITEsc2FtcDohMSxzY3JpcHQ6ITEsc2VjdGlv
bjohMSxzZWxlY3Q6ITEsc21hbGw6ITEsc291cmNlOiExLHNwYW46ITEsc3Ryb25nOiExLHN0eWxl
OiExLHN1YjohMSxzdW1tYXJ5OiExLHN1cDohMSx0YWJsZTohMSx0Ym9keTohMSx0ZDohMSx0ZXh0
YXJlYTohMSx0Zm9vdDohMSx0aDohMSx0aGVhZDohMSx0aW1lOiExLHRpdGxlOiExLHRyOiExLHRy
YWNrOiEwLHU6ITEsdWw6ITEsInZhciI6ITEsdmlkZW86ITEsd2JyOiExLGNpcmNsZTohMSxnOiEx
LGxpbmU6ITEscGF0aDohMSxwb2x5bGluZTohMSxyZWN0OiExLHN2ZzohMSx0ZXh0OiExfSxuKSxz
PXtpbmplY3RDb21wb25lbnRDbGFzc2VzOmZ1bmN0aW9uKGUpe28oYSxlKX19O2EuaW5qZWN0aW9u
PXMsdC5leHBvcnRzPWF9LHsiLi9SZWFjdE5hdGl2ZUNvbXBvbmVudCI6NDAsIi4vbWVyZ2VJbnRv
Ijo4MywiLi9vYmpNYXBLZXlWYWwiOjg1fV0sMjY6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3Qi
O3ZhciBuPWUoIi4vUmVhY3RDb21wb3NpdGVDb21wb25lbnQiKSxyPWUoIi4vUmVhY3RET00iKSxv
PWUoIi4vUmVhY3RFdmVudEVtaXR0ZXIiKSxpPWUoIi4vRXZlbnRDb25zdGFudHMiKSxhPXIuZm9y
bSxzPW4uY3JlYXRlQ2xhc3Moe3JlbmRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZmVy
UHJvcHNUbyhhKG51bGwsdGhpcy5wcm9wcy5jaGlsZHJlbikpfSxjb21wb25lbnREaWRNb3VudDpm
dW5jdGlvbihlKXtvLnRyYXBCdWJibGVkRXZlbnQoaS50b3BMZXZlbFR5cGVzLnRvcFN1Ym1pdCwi
c3VibWl0IixlKX19KTt0LmV4cG9ydHM9c30seyIuL0V2ZW50Q29uc3RhbnRzIjoxMywiLi9SZWFj
dENvbXBvc2l0ZUNvbXBvbmVudCI6MjMsIi4vUmVhY3RET00iOjI1LCIuL1JlYWN0RXZlbnRFbWl0
dGVyIjozM31dLDI3OltmdW5jdGlvbihlLHQpeyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIg
bj1lKCIuL0NTU1Byb3BlcnR5T3BlcmF0aW9ucyIpLHI9ZSgiLi9ET01DaGlsZHJlbk9wZXJhdGlv
bnMiKSxvPWUoIi4vRE9NUHJvcGVydHlPcGVyYXRpb25zIiksaT1lKCIuL1JlYWN0SUQiKSxhPWUo
Ii4vZ2V0VGV4dENvbnRlbnRBY2Nlc3NvciIpLHM9ZSgiLi9pbnZhcmlhbnQiKSx1PXtkYW5nZXJv
dXNseVNldElubmVySFRNTDoiYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCBtdXN0IGJlIHNldCB1
c2luZyBgdXBkYXRlSW5uZXJIVE1MQnlJRCgpYC4iLHN0eWxlOiJgc3R5bGVgIG11c3QgYmUgc2V0
IHVzaW5nIGB1cGRhdGVTdHlsZXNCeUlEKClgLiJ9LGw9YSgpfHwiTkEiLGM9e3VwZGF0ZVByb3Bl
cnR5QnlJRDpmdW5jdGlvbihlLHQsbil7dmFyIHI9aS5nZXROb2RlKGUpOworcyghdS5oYXNPd25Q
cm9wZXJ0eSh0KSksby5zZXRWYWx1ZUZvclByb3BlcnR5KHIsdCxuKX0sZGVsZXRlUHJvcGVydHlC
eUlEOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1pLmdldE5vZGUoZSk7cyghdS5oYXNPd25Qcm9wZXJ0
eSh0KSksby5kZWxldGVWYWx1ZUZvclByb3BlcnR5KHIsdCxuKX0sdXBkYXRlUHJvcGVydGllc0J5
SUQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiZjLnVw
ZGF0ZVByb3BlcnRpZXNCeUlEKGUsbix0W25dKX0sdXBkYXRlU3R5bGVzQnlJRDpmdW5jdGlvbihl
LHQpe3ZhciByPWkuZ2V0Tm9kZShlKTtuLnNldFZhbHVlRm9yU3R5bGVzKHIsdCl9LHVwZGF0ZUlu
bmVySFRNTEJ5SUQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj1pLmdldE5vZGUoZSk7bi5pbm5lckhUTUw9
KHQmJnQuX19odG1sfHwiIikucmVwbGFjZSgvXiAvZywiJm5ic3A7Iil9LHVwZGF0ZVRleHRDb250
ZW50QnlJRDpmdW5jdGlvbihlLHQpe3ZhciBuPWkuZ2V0Tm9kZShlKTtuW2xdPXR9LGRhbmdlcm91
c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwQnlJRDpmdW5jdGlvbihlLHQpe3ZhciBuPWkuZ2V0Tm9k
ZShlKTtyLmRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwKG4sdCl9LG1hbmFnZUNoaWxk
cmVuQnlQYXJlbnRJRDpmdW5jdGlvbihlLHQpe3ZhciBuPWkuZ2V0Tm9kZShlKTtyLm1hbmFnZUNo
aWxkcmVuKG4sdCl9fTt0LmV4cG9ydHM9Y30oKX0seyIuL0NTU1Byb3BlcnR5T3BlcmF0aW9ucyI6
MywiLi9ET01DaGlsZHJlbk9wZXJhdGlvbnMiOjYsIi4vRE9NUHJvcGVydHlPcGVyYXRpb25zIjo4
LCIuL1JlYWN0SUQiOjM1LCIuL2dldFRleHRDb250ZW50QWNjZXNzb3IiOjcxLCIuL2ludmFyaWFu
dCI6NzV9XSwyODpbZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi9ET01Qcm9w
ZXJ0eU9wZXJhdGlvbnMiKSxyPWUoIi4vUmVhY3RDb21wb3NpdGVDb21wb25lbnQiKSxvPWUoIi4v
UmVhY3RET00iKSxpPWUoIi4vbWVyZ2UiKSxhPW8uaW5wdXQscz1yLmNyZWF0ZUNsYXNzKHtnZXRJ
bml0aWFsU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm57Y2hlY2tlZDp0aGlzLnByb3BzLmRlZmF1bHRD
aGVja2VkfHwhMSx2YWx1ZTp0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZXx8IiJ9fSxzaG91bGRDb21w
b25lbnRVcGRhdGU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5faXNDaGFuZ2luZ30sZ2V0Q2hlY2tl
ZDpmdW5jdGlvbigpe3JldHVybiBudWxsIT10aGlzLnByb3BzLmNoZWNrZWQ/dGhpcy5wcm9wcy5j
aGVja2VkOnRoaXMuc3RhdGUuY2hlY2tlZH0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVs
bCE9dGhpcy5wcm9wcy52YWx1ZT8iIit0aGlzLnByb3BzLnZhbHVlOnRoaXMuc3RhdGUudmFsdWV9
LHJlbmRlcjpmdW5jdGlvbigpe3ZhciBlPWkodGhpcy5wcm9wcyk7cmV0dXJuIGUuY2hlY2tlZD10
aGlzLmdldENoZWNrZWQoKSxlLnZhbHVlPXRoaXMuZ2V0VmFsdWUoKSxlLm9uQ2hhbmdlPXRoaXMu
aGFuZGxlQ2hhbmdlLGEoZSx0aGlzLnByb3BzLmNoaWxkcmVuKX0sY29tcG9uZW50RGlkVXBkYXRl
OmZ1bmN0aW9uKGUsdCxyKXtudWxsIT10aGlzLnByb3BzLmNoZWNrZWQmJm4uc2V0VmFsdWVGb3JQ
cm9wZXJ0eShyLCJjaGVja2VkIix0aGlzLnByb3BzLmNoZWNrZWR8fCExKSxudWxsIT10aGlzLnBy
b3BzLnZhbHVlJiZuLnNldFZhbHVlRm9yUHJvcGVydHkociwidmFsdWUiLCIiK3RoaXMucHJvcHMu
dmFsdWV8fCIiKX0saGFuZGxlQ2hhbmdlOmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzLnBy
b3BzLm9uQ2hhbmdlJiYodGhpcy5faXNDaGFuZ2luZz0hMCx0PXRoaXMucHJvcHMub25DaGFuZ2Uo
ZSksdGhpcy5faXNDaGFuZ2luZz0hMSksdGhpcy5zZXRTdGF0ZSh7Y2hlY2tlZDplLnRhcmdldC5j
aGVja2VkLHZhbHVlOmUudGFyZ2V0LnZhbHVlfSksdH19KTt0LmV4cG9ydHM9c30seyIuL0RPTVBy
b3BlcnR5T3BlcmF0aW9ucyI6OCwiLi9SZWFjdENvbXBvc2l0ZUNvbXBvbmVudCI6MjMsIi4vUmVh
Y3RET00iOjI1LCIuL21lcmdlIjo4MX1dLDI5OltmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt2
YXIgbj1lKCIuL1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50Iikscj1lKCIuL1JlYWN0RE9NIiksbz1y
Lm9wdGlvbixpPW4uY3JlYXRlQ2xhc3Moe2NvbXBvbmVudFdpbGxNb3VudDpmdW5jdGlvbigpe251
bGwhPXRoaXMucHJvcHMuc2VsZWN0ZWR9LHJlbmRlcjpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMu
cHJvcHMsdGhpcy5wcm9wcy5jaGlsZHJlbil9fSk7dC5leHBvcnRzPWl9LHsiLi9SZWFjdENvbXBv
c2l0ZUNvbXBvbmVudCI6MjMsIi4vUmVhY3RET00iOjI1fV0sMzA6W2Z1bmN0aW9uKGUsdCl7InVz
ZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSx0KXtudWxsIT1lW3RdJiYoZS5tdWx0aXBsZT9hKEFycmF5
LmlzQXJyYXkoZVt0XSkpOmEoIUFycmF5LmlzQXJyYXkoZVt0XSkpKX1mdW5jdGlvbiByKCl7aWYo
bnVsbCE9dGhpcy5wcm9wcy52YWx1ZSlmb3IodmFyIGU9dGhpcy5nZXRET01Ob2RlKCkub3B0aW9u
cyx0PSIiK3RoaXMucHJvcHMudmFsdWUsbj0wLHI9ZS5sZW5ndGg7cj5uO24rKyl7dmFyIG89dGhp
cy5wcm9wcy5tdWx0aXBsZT90LmluZGV4T2YoZVtuXS52YWx1ZSk+PTA6bz1lW25dLnZhbHVlPT09
dDtvIT09ZVtuXS5zZWxlY3RlZCYmKGVbbl0uc2VsZWN0ZWQ9byl9fXZhciBvPWUoIi4vUmVhY3RD
b21wb3NpdGVDb21wb25lbnQiKSxpPWUoIi4vUmVhY3RET00iKSxhPWUoIi4vaW52YXJpYW50Iiks
cz1lKCIuL21lcmdlIiksdT1pLnNlbGVjdCxsPW8uY3JlYXRlQ2xhc3Moe3Byb3BUeXBlczp7ZGVm
YXVsdFZhbHVlOm4sdmFsdWU6bn0sZ2V0SW5pdGlhbFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJue3Zh
bHVlOnRoaXMucHJvcHMuZGVmYXVsdFZhbHVlfHwodGhpcy5wcm9wcy5tdWx0aXBsZT9bXToiIil9
fSxjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzOmZ1bmN0aW9uKGUpeyF0aGlzLnByb3BzLm11bHRp
cGxlJiZlLm11bHRpcGxlP3RoaXMuc2V0U3RhdGUoe3ZhbHVlOlt0aGlzLnN0YXRlLnZhbHVlXX0p
OnRoaXMucHJvcHMubXVsdGlwbGUmJiFlLm11bHRpcGxlJiZ0aGlzLnNldFN0YXRlKHt2YWx1ZTp0
aGlzLnN0YXRlLnZhbHVlWzBdfSl9LHNob3VsZENvbXBvbmVudFVwZGF0ZTpmdW5jdGlvbigpe3Jl
dHVybiF0aGlzLl9pc0NoYW5naW5nfSxyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT1zKHRoaXMucHJv
cHMpO3JldHVybiBlLm9uQ2hhbmdlPXRoaXMuaGFuZGxlQ2hhbmdlLGUudmFsdWU9bnVsbCx1KGUs
dGhpcy5wcm9wcy5jaGlsZHJlbil9LGNvbXBvbmVudERpZE1vdW50OnIsY29tcG9uZW50RGlkVXBk
YXRlOnIsaGFuZGxlQ2hhbmdlOmZ1bmN0aW9uKGUpe3ZhciB0O3RoaXMucHJvcHMub25DaGFuZ2Um
Jih0aGlzLl9pc0NoYW5naW5nPSEwLHQ9dGhpcy5wcm9wcy5vbkNoYW5nZShlKSx0aGlzLl9pc0No
YW5naW5nPSExKTt2YXIgbjtpZih0aGlzLnByb3BzLm11bHRpcGxlKXtuPVtdO2Zvcih2YXIgcj1l
LnRhcmdldC5vcHRpb25zLG89MCxpPXIubGVuZ3RoO2k+bztvKyspcltvXS5zZWxlY3RlZCYmbi5w
dXNoKHJbb10udmFsdWUpfWVsc2Ugbj1lLnRhcmdldC52YWx1ZTtyZXR1cm4gdGhpcy5zZXRTdGF0
ZSh7dmFsdWU6bn0pLHR9fSk7dC5leHBvcnRzPWx9LHsiLi9SZWFjdENvbXBvc2l0ZUNvbXBvbmVu
dCI6MjMsIi4vUmVhY3RET00iOjI1LCIuL2ludmFyaWFudCI6NzUsIi4vbWVyZ2UiOjgxfV0sMzE6
W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3ZhciBuPWUoIi4vRE9NUHJvcGVydHlPcGVyYXRp
b25zIikscj1lKCIuL1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50Iiksbz1lKCIuL1JlYWN0RE9NIiks
aT1lKCIuL2ludmFyaWFudCIpLGE9ZSgiLi9tZXJnZSIpLHM9by50ZXh0YXJlYSx1PXtzdHJpbmc6
ITAsbnVtYmVyOiEwfSxsPXIuY3JlYXRlQ2xhc3Moe2dldEluaXRpYWxTdGF0ZTpmdW5jdGlvbigp
e3ZhciBlPXRoaXMucHJvcHMuZGVmYXVsdFZhbHVlLHQ9dGhpcy5wcm9wcy5jaGlsZHJlbjtyZXR1
cm4gbnVsbCE9dCYmKGkobnVsbD09ZSksQXJyYXkuaXNBcnJheSh0KSYmKGkodC5sZW5ndGg8PTEp
LHQ9dFswXSksaSh1W3R5cGVvZiB0XSksZT0iIit0KSxlPWV8fCIiLHtpbml0aWFsVmFsdWU6bnVs
bCE9dGhpcy5wcm9wcy52YWx1ZT90aGlzLnByb3BzLnZhbHVlOmUsdmFsdWU6ZX19LHNob3VsZENv
bXBvbmVudFVwZGF0ZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLl9pc0NoYW5naW5nfSxnZXRWYWx1
ZTpmdW5jdGlvbigpe3JldHVybiBudWxsIT10aGlzLnByb3BzLnZhbHVlP3RoaXMucHJvcHMudmFs
dWU6dGhpcy5zdGF0ZS52YWx1ZX0scmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9YSh0aGlzLnByb3Bz
KTtyZXR1cm4gaShudWxsPT1lLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSxlLnZhbHVlPXRoaXMu
Z2V0VmFsdWUoKSxlLm9uQ2hhbmdlPXRoaXMuaGFuZGxlQ2hhbmdlLHMoZSx0aGlzLnN0YXRlLmlu
aXRpYWxWYWx1ZSl9LGNvbXBvbmVudERpZFVwZGF0ZTpmdW5jdGlvbihlLHQscil7bnVsbCE9dGhp
cy5wcm9wcy52YWx1ZSYmbi5zZXRWYWx1ZUZvclByb3BlcnR5KHIsInZhbHVlIix0aGlzLnByb3Bz
LnZhbHVlfHwiIil9LGhhbmRsZUNoYW5nZTpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gdGhpcy5w
cm9wcy5vbkNoYW5nZSYmKHRoaXMuX2lzQ2hhbmdpbmc9ITAsdD10aGlzLnByb3BzLm9uQ2hhbmdl
KGUpLHRoaXMuX2lzQ2hhbmdpbmc9ITEpLHRoaXMuc2V0U3RhdGUoe3ZhbHVlOmUudGFyZ2V0LnZh
bHVlfSksdH19KTt0LmV4cG9ydHM9bH0seyIuL0RPTVByb3BlcnR5T3BlcmF0aW9ucyI6OCwiLi9S
ZWFjdENvbXBvc2l0ZUNvbXBvbmVudCI6MjMsIi4vUmVhY3RET00iOjI1LCIuL2ludmFyaWFudCI6
NzUsIi4vbWVyZ2UiOjgxfV0sMzI6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9u
IG4oKXtmLmluamVjdGlvbi5pbmplY3RFdmVudFBsdWdpbk9yZGVyKHApLGYuaW5qZWN0aW9uLmlu
amVjdEluc3RhbmNlSGFuZGxlKHYpLGYuaW5qZWN0aW9uLmluamVjdEV2ZW50UGx1Z2luc0J5TmFt
ZSh7U2ltcGxlRXZlbnRQbHVnaW46bSxFbnRlckxlYXZlRXZlbnRQbHVnaW46ZCxDaGFuZ2VFdmVu
dFBsdWdpbjpofSksci5pbmplY3Rpb24uaW5qZWN0Q29tcG9uZW50Q2xhc3Nlcyh7Zm9ybTpvLGlu
cHV0Omksb3B0aW9uOmEsc2VsZWN0OnMsdGV4dGFyZWE6dX0pLGMuaW5qZWN0aW9uLmluamVjdERP
TVByb3BlcnR5Q29uZmlnKGwpfXZhciByPWUoIi4vUmVhY3RET00iKSxvPWUoIi4vUmVhY3RET01G
b3JtIiksaT1lKCIuL1JlYWN0RE9NSW5wdXQiKSxhPWUoIi4vUmVhY3RET01PcHRpb24iKSxzPWUo
Ii4vUmVhY3RET01TZWxlY3QiKSx1PWUoIi4vUmVhY3RET01UZXh0YXJlYSIpLGw9ZSgiLi9EZWZh
dWx0RE9NUHJvcGVydHlDb25maWciKSxjPWUoIi4vRE9NUHJvcGVydHkiKSxwPWUoIi4vRGVmYXVs
dEV2ZW50UGx1Z2luT3JkZXIiKSxkPWUoIi4vRW50ZXJMZWF2ZUV2ZW50UGx1Z2luIiksaD1lKCIu
L0NoYW5nZUV2ZW50UGx1Z2luIiksZj1lKCIuL0V2ZW50UGx1Z2luSHViIiksdj1lKCIuL1JlYWN0
SW5zdGFuY2VIYW5kbGVzIiksbT1lKCIuL1NpbXBsZUV2ZW50UGx1Z2luIik7dC5leHBvcnRzPXtp
bmplY3Q6bn19LHsiLi9DaGFuZ2VFdmVudFBsdWdpbiI6NSwiLi9ET01Qcm9wZXJ0eSI6NywiLi9E
ZWZhdWx0RE9NUHJvcGVydHlDb25maWciOjEwLCIuL0RlZmF1bHRFdmVudFBsdWdpbk9yZGVyIjox
MSwiLi9FbnRlckxlYXZlRXZlbnRQbHVnaW4iOjEyLCIuL0V2ZW50UGx1Z2luSHViIjoxNSwiLi9S
ZWFjdERPTSI6MjUsIi4vUmVhY3RET01Gb3JtIjoyNiwiLi9SZWFjdERPTUlucHV0IjoyOCwiLi9S
ZWFjdERPTU9wdGlvbiI6MjksIi4vUmVhY3RET01TZWxlY3QiOjMwLCIuL1JlYWN0RE9NVGV4dGFy
ZWEiOjMxLCIuL1JlYWN0SW5zdGFuY2VIYW5kbGVzIjozNywiLi9TaW1wbGVFdmVudFBsdWdpbiI6
NDl9XSwzMzpbZnVuY3Rpb24oZSx0KXshZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24g
bihlLHQsbil7cy5saXN0ZW4obix0LHYuVG9wTGV2ZWxDYWxsYmFja0NyZWF0b3IuY3JlYXRlVG9w
TGV2ZWxDYWxsYmFjayhlKSl9ZnVuY3Rpb24gcihlLHQsbil7cy5jYXB0dXJlKG4sdCx2LlRvcExl
dmVsQ2FsbGJhY2tDcmVhdG9yLmNyZWF0ZVRvcExldmVsQ2FsbGJhY2soZSkpfWZ1bmN0aW9uIG8o
KXt2YXIgZT1wLnJlZnJlc2hTY3JvbGxWYWx1ZXM7cy5saXN0ZW4od2luZG93LCJzY3JvbGwiLGUp
LHMubGlzdGVuKHdpbmRvdywicmVzaXplIixlKX1mdW5jdGlvbiBpKGUpe2QoIWYpO3ZhciB0PWEu
dG9wTGV2ZWxUeXBlcyxpPWRvY3VtZW50O28oKSxuKHQudG9wTW91c2VPdmVyLCJtb3VzZW92ZXIi
LGkpLG4odC50b3BNb3VzZURvd24sIm1vdXNlZG93biIsaSksbih0LnRvcE1vdXNlVXAsIm1vdXNl
dXAiLGkpLG4odC50b3BNb3VzZU1vdmUsIm1vdXNlbW92ZSIsaSksbih0LnRvcE1vdXNlT3V0LCJt
b3VzZW91dCIsaSksbih0LnRvcENsaWNrLCJjbGljayIsaSksbih0LnRvcERvdWJsZUNsaWNrLCJk
YmxjbGljayIsaSksZSYmKG4odC50b3BUb3VjaFN0YXJ0LCJ0b3VjaHN0YXJ0IixpKSxuKHQudG9w
VG91Y2hFbmQsInRvdWNoZW5kIixpKSxuKHQudG9wVG91Y2hNb3ZlLCJ0b3VjaG1vdmUiLGkpLG4o
dC50b3BUb3VjaENhbmNlbCwidG91Y2hjYW5jZWwiLGkpKSxuKHQudG9wS2V5VXAsImtleXVwIixp
KSxuKHQudG9wS2V5UHJlc3MsImtleXByZXNzIixpKSxuKHQudG9wS2V5RG93biwia2V5ZG93biIs
aSksbih0LnRvcElucHV0LCJpbnB1dCIsaSksbih0LnRvcENoYW5nZSwiY2hhbmdlIixpKSxuKHQu
dG9wU2VsZWN0aW9uQ2hhbmdlLCJzZWxlY3Rpb25jaGFuZ2UiLGkpLG4odC50b3BET01DaGFyYWN0
ZXJEYXRhTW9kaWZpZWQsIkRPTUNoYXJhY3RlckRhdGFNb2RpZmllZCIsaSksaCgiZHJhZyIpJiYo
bih0LnRvcERyYWcsImRyYWciLGkpLG4odC50b3BEcmFnRW5kLCJkcmFnZW5kIixpKSxuKHQudG9w
RHJhZ0VudGVyLCJkcmFnZW50ZXIiLGkpLG4odC50b3BEcmFnRXhpdCwiZHJhZ2V4aXQiLGkpLG4o
dC50b3BEcmFnTGVhdmUsImRyYWdsZWF2ZSIsaSksbih0LnRvcERyYWdPdmVyLCJkcmFnb3ZlciIs
aSksbih0LnRvcERyYWdTdGFydCwiZHJhZ3N0YXJ0IixpKSxuKHQudG9wRHJvcCwiZHJvcCIsaSkp
LGgoIndoZWVsIik/bih0LnRvcFdoZWVsLCJ3aGVlbCIsaSk6aCgibW91c2V3aGVlbCIpP24odC50
b3BXaGVlbCwibW91c2V3aGVlbCIsaSk6bih0LnRvcFdoZWVsLCJET01Nb3VzZVNjcm9sbCIsaSks
aCgic2Nyb2xsIiwhMCk/cih0LnRvcFNjcm9sbCwic2Nyb2xsIixpKTpuKHQudG9wU2Nyb2xsLCJz
Y3JvbGwiLHdpbmRvdyksaCgiZm9jdXMiLCEwKT8ocih0LnRvcEZvY3VzLCJmb2N1cyIsaSkscih0
LnRvcEJsdXIsImJsdXIiLGkpKTpoKCJmb2N1c2luIikmJihuKHQudG9wRm9jdXMsImZvY3VzaW4i
LGkpLG4odC50b3BCbHVyLCJmb2N1c291dCIsaSkpfXZhciBhPWUoIi4vRXZlbnRDb25zdGFudHMi
KSxzPWUoIi4vRXZlbnRMaXN0ZW5lciIpLHU9ZSgiLi9FdmVudFBsdWdpbkh1YiIpLGw9ZSgiLi9F
eGVjdXRpb25FbnZpcm9ubWVudCIpLGM9ZSgiLi9SZWFjdFVwZGF0ZXMiKSxwPWUoIi4vVmlld3Bv
cnRNZXRyaWNzIiksZD1lKCIuL2ludmFyaWFudCIpLGg9ZSgiLi9pc0V2ZW50U3VwcG9ydGVkIiks
Zj0hMSx2PXtUb3BMZXZlbENhbGxiYWNrQ3JlYXRvcjpudWxsLGVuc3VyZUxpc3RlbmluZzpmdW5j
dGlvbihlLHQpe2QobC5jYW5Vc2VET00pLGZ8fCh2LlRvcExldmVsQ2FsbGJhY2tDcmVhdG9yPXQs
aShlKSxmPSEwKX0sc2V0RW5hYmxlZDpmdW5jdGlvbihlKXtkKGwuY2FuVXNlRE9NKSx2LlRvcExl
dmVsQ2FsbGJhY2tDcmVhdG9yJiZ2LlRvcExldmVsQ2FsbGJhY2tDcmVhdG9yLnNldEVuYWJsZWQo
ZSl9LGlzRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiEoIXYuVG9wTGV2ZWxDYWxsYmFja0NyZWF0
b3J8fCF2LlRvcExldmVsQ2FsbGJhY2tDcmVhdG9yLmlzRW5hYmxlZCgpKX0saGFuZGxlVG9wTGV2
ZWw6ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89dS5leHRyYWN0RXZlbnRzKGUsdCxuLHIpO2MuYmF0
Y2hlZFVwZGF0ZXMoZnVuY3Rpb24oKXt1LmVucXVldWVFdmVudHMobyksdS5wcm9jZXNzRXZlbnRR
dWV1ZSgpfSl9LHJlZ2lzdHJhdGlvbk5hbWVzOnUucmVnaXN0cmF0aW9uTmFtZXMscHV0TGlzdGVu
ZXI6dS5wdXRMaXN0ZW5lcixnZXRMaXN0ZW5lcjp1LmdldExpc3RlbmVyLGRlbGV0ZUxpc3RlbmVy
OnUuZGVsZXRlTGlzdGVuZXIsZGVsZXRlQWxsTGlzdGVuZXJzOnUuZGVsZXRlQWxsTGlzdGVuZXJz
LHRyYXBCdWJibGVkRXZlbnQ6bix0cmFwQ2FwdHVyZWRFdmVudDpyfTt0LmV4cG9ydHM9dn0oKX0s
eyIuL0V2ZW50Q29uc3RhbnRzIjoxMywiLi9FdmVudExpc3RlbmVyIjoxNCwiLi9FdmVudFBsdWdp
bkh1YiI6MTUsIi4vRXhlY3V0aW9uRW52aXJvbm1lbnQiOjE5LCIuL1JlYWN0VXBkYXRlcyI6NDgs
Ii4vVmlld3BvcnRNZXRyaWNzIjo1OSwiLi9pbnZhcmlhbnQiOjc1LCIuL2lzRXZlbnRTdXBwb3J0
ZWQiOjc2fV0sMzQ6W2Z1bmN0aW9uKGUsdCl7IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBu
PWUoIi4vRXhlY3V0aW9uRW52aXJvbm1lbnQiKSxyPWUoIi4vUmVhY3RFdmVudEVtaXR0ZXIiKSxv
PWUoIi4vUmVhY3RJRCIpLGk9ZSgiLi9SZWFjdEluc3RhbmNlSGFuZGxlcyIpLGE9ZSgiLi9nZXRF
dmVudFRhcmdldCIpLHM9ITAsdT17c2V0RW5hYmxlZDpmdW5jdGlvbihlKXtzPSEhZX0saXNFbmFi
bGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHN9LGNyZWF0ZVRvcExldmVsQ2FsbGJhY2s6ZnVuY3Rpb24o
ZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHMpe3Quc3JjRWxlbWVudCYmdC5zcmNFbGVtZW50IT09
dC50YXJnZXQmJih0LnRhcmdldD10LnNyY0VsZW1lbnQpO3ZhciB1PWkuZ2V0Rmlyc3RSZWFjdERP
TShhKHQpKXx8bi5nbG9iYWwsbD1vLmdldElEKHUpfHwiIjtyLmhhbmRsZVRvcExldmVsKGUsdSxs
LHQpfX19fTt0LmV4cG9ydHM9dX0oKX0seyIuL0V4ZWN1dGlvbkVudmlyb25tZW50IjoxOSwiLi9S
ZWFjdEV2ZW50RW1pdHRlciI6MzMsIi4vUmVhY3RJRCI6MzUsIi4vUmVhY3RJbnN0YW5jZUhhbmRs
ZXMiOjM3LCIuL2dldEV2ZW50VGFyZ2V0Ijo3MH1dLDM1OltmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9byhlKTtpZih0KWlmKGguaGFzT3duUHJvcGVydHko
dCkpe3ZhciBuPWhbdF07biE9PWUmJihjKCFzKG4sdCkpLGhbdF09ZSl9ZWxzZSBoW3RdPWU7cmV0
dXJuIHR9ZnVuY3Rpb24gbyhlKXtpZihlJiZlLmdldEF0dHJpYnV0ZU5vZGUpe3ZhciB0PWUuZ2V0
QXR0cmlidXRlTm9kZShkKTtpZih0KXJldHVybiB0LnZhbHVlfHwiIn1yZXR1cm4iIn1mdW5jdGlv
biBpKGUsdCl7dmFyIG49byhlKTtuIT09dCYmZGVsZXRlIGhbbl0sZS5zZXRBdHRyaWJ1dGUoZCx0
KSxoW3RdPWV9ZnVuY3Rpb24gYShlKXtyZXR1cm4gaC5oYXNPd25Qcm9wZXJ0eShlKSYmcyhoW2Vd
LGUpfHwoaFtlXT1wLmZpbmRSZWFjdE5vZGVCeUlEKGUpKSxoW2VdfWZ1bmN0aW9uIHMoZSx0KXtp
ZihlKXtjKG8oZSk9PT10KTt2YXIgbj1wLmZpbmRSZWFjdENvbnRhaW5lckZvcklEKHQpO2lmKG4m
JnUobixlKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiB1KGUsdCl7aWYoZS5jb250YWlucyly
ZXR1cm4gZS5jb250YWlucyh0KTtpZih0PT09ZSlyZXR1cm4hMDtmb3IoMz09PXQubm9kZVR5cGUm
Jih0PXQucGFyZW50Tm9kZSk7dCYmMT09PXQubm9kZVR5cGU7KXtpZih0PT09ZSlyZXR1cm4hMDt0
PXQucGFyZW50Tm9kZX1yZXR1cm4hMX1mdW5jdGlvbiBsKGUpe2RlbGV0ZSBoW2VdfXZhciBjPWUo
Ii4vaW52YXJpYW50IikscD1lKCIuL1JlYWN0TW91bnQiKSxkPSJkYXRhLXJlYWN0aWQiLGg9e307
bi5BVFRSX05BTUU9ZCxuLmdldElEPXIsbi5yYXdHZXRJRD1vLG4uc2V0SUQ9aSxuLmdldE5vZGU9
YSxuLnB1cmdlSUQ9bH0seyIuL1JlYWN0TW91bnQiOjM4LCIuL2ludmFyaWFudCI6NzV9XSwzNjpb
ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe3RyeXtyZXR1cm4gZG9jdW1l
bnQuYWN0aXZlRWxlbWVudH1jYXRjaChlKXt9fWZ1bmN0aW9uIHIoZSl7cmV0dXJuIGRvY3VtZW50
LmRvY3VtZW50RWxlbWVudC5jb250YWlucyhlKX12YXIgbz17aGFzU2VsZWN0aW9uQ2FwYWJpbGl0
aWVzOmZ1bmN0aW9uKGUpe3JldHVybiBlJiYoIklOUFVUIj09PWUubm9kZU5hbWUmJiJ0ZXh0Ij09
PWUudHlwZXx8IlRFWFRBUkVBIj09PWUubm9kZU5hbWV8fCJ0cnVlIj09PWUuY29udGVudEVkaXRh
YmxlKX0sZ2V0U2VsZWN0aW9uSW5mb3JtYXRpb246ZnVuY3Rpb24oKXt2YXIgZT1uKCk7cmV0dXJu
e2ZvY3VzZWRFbGVtOmUsc2VsZWN0aW9uUmFuZ2U6by5oYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMo
ZSk/by5nZXRTZWxlY3Rpb24oZSk6bnVsbH19LHJlc3RvcmVTZWxlY3Rpb246ZnVuY3Rpb24oZSl7
dmFyIHQ9bigpLGk9ZS5mb2N1c2VkRWxlbSxhPWUuc2VsZWN0aW9uUmFuZ2U7dCE9PWkmJnIoaSkm
JihvLmhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhpKSYmby5zZXRTZWxlY3Rpb24oaSxhKSxpLmZv
Y3VzKCkpfSxnZXRTZWxlY3Rpb246ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoInRydWUiPT09ZS5jb250
ZW50RWRpdGFibGUmJndpbmRvdy5nZXRTZWxlY3Rpb24pe3Q9d2luZG93LmdldFNlbGVjdGlvbigp
LmdldFJhbmdlQXQoMCk7dmFyIG49dC5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtyZXR1cm4gbiYm
Mz09PW4ubm9kZVR5cGUmJihuPW4ucGFyZW50Tm9kZSksbiE9PWU/e3N0YXJ0OjAsZW5kOjB9Ontz
dGFydDp0LnN0YXJ0T2Zmc2V0LGVuZDp0LmVuZE9mZnNldH19aWYoIWRvY3VtZW50LnNlbGVjdGlv
bilyZXR1cm57c3RhcnQ6ZS5zZWxlY3Rpb25TdGFydCxlbmQ6ZS5zZWxlY3Rpb25FbmR9O2lmKHQ9
ZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCksdC5wYXJlbnRFbGVtZW50KCkhPT1lKXJl
dHVybntzdGFydDowLGVuZDowfTt2YXIgcj1lLnZhbHVlLmxlbmd0aDtpZigiSU5QVVQiPT09ZS5u
b2RlTmFtZSlyZXR1cm57c3RhcnQ6LXQubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLC1yKSxlbmQ6LXQu
bW92ZUVuZCgiY2hhcmFjdGVyIiwtcil9O3ZhciBvPXQuZHVwbGljYXRlKCk7by5tb3ZlVG9FbGVt
ZW50VGV4dChlKSxvLnNldEVuZFBvaW50KCJTdGFydFRvRW5kIix0KTt2YXIgaT1yLW8udGV4dC5s
ZW5ndGg7cmV0dXJuIG8uc2V0RW5kUG9pbnQoIlN0YXJ0VG9TdGFydCIsdCkse3N0YXJ0OnItby50
ZXh0Lmxlbmd0aCxlbmQ6aX19LHNldFNlbGVjdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBuLHI9dC5z
dGFydCxvPXQuZW5kO2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgbyYmKG89ciksZG9jdW1lbnQuc2Vs
ZWN0aW9uKXtpZigiVEVYVEFSRUEiPT09ZS50YWdOYW1lKXt2YXIgaT0oZS52YWx1ZS5zbGljZSgw
LHIpLm1hdGNoKC9cci9nKXx8W10pLmxlbmd0aCxhPShlLnZhbHVlLnNsaWNlKHIsbykubWF0Y2go
L1xyL2cpfHxbXSkubGVuZ3RoO3ItPWksby09aSthfW49ZS5jcmVhdGVUZXh0UmFuZ2UoKSxuLmNv
bGxhcHNlKCEwKSxuLm1vdmVTdGFydCgiY2hhcmFjdGVyIixyKSxuLm1vdmVFbmQoImNoYXJhY3Rl
ciIsby1yKSxuLnNlbGVjdCgpfWVsc2UgaWYoInRydWUiPT09ZS5jb250ZW50RWRpdGFibGUpe2lm
KDE9PT1lLmNoaWxkTm9kZXMubGVuZ3RoKXtuPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCksbi5zZXRT
dGFydChlLmNoaWxkTm9kZXNbMF0sciksbi5zZXRFbmQoZS5jaGlsZE5vZGVzWzBdLG8pO3ZhciBz
PXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtzLnJlbW92ZUFsbFJhbmdlcygpLHMuYWRkUmFuZ2Uobil9
fWVsc2UgZS5zZWxlY3Rpb25TdGFydD1yLGUuc2VsZWN0aW9uRW5kPU1hdGgubWluKG8sZS52YWx1
ZS5sZW5ndGgpLGUuZm9jdXMoKX19O3QuZXhwb3J0cz1vfSx7fV0sMzc6W2Z1bmN0aW9uKGUsdCl7
InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGQrInJbIitlLnRvU3RyaW5nKDM2KSsi
XSJ9ZnVuY3Rpb24gcihlLHQpe3JldHVybiBlLmNoYXJBdCh0KT09PWR8fHQ9PT1lLmxlbmd0aH1m
dW5jdGlvbiBvKGUpe3JldHVybiIiPT09ZXx8ZS5jaGFyQXQoMCk9PT1kJiZlLmNoYXJBdChlLmxl
bmd0aC0xKSE9PWR9ZnVuY3Rpb24gaShlLHQpe3JldHVybiAwPT09dC5pbmRleE9mKGUpJiZyKHQs
ZS5sZW5ndGgpfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGU/ZS5zdWJzdHIoMCxlLmxhc3RJbmRleE9m
KGQpKToiIn1mdW5jdGlvbiBzKGUsdCl7aWYocChvKGUpJiZvKHQpKSxwKGkoZSx0KSksZT09PXQp
cmV0dXJuIGU7Zm9yKHZhciBuPWUubGVuZ3RoK2gsYT1uO2E8dC5sZW5ndGgmJiFyKHQsYSk7YSsr
KTtyZXR1cm4gdC5zdWJzdHIoMCxhKX1mdW5jdGlvbiB1KGUsdCl7dmFyIG49TWF0aC5taW4oZS5s
ZW5ndGgsdC5sZW5ndGgpO2lmKDA9PT1uKXJldHVybiIiO2Zvcih2YXIgaT0wLGE9MDtuPj1hO2Er
KylpZihyKGUsYSkmJnIodCxhKSlpPWE7ZWxzZSBpZihlLmNoYXJBdChhKSE9PXQuY2hhckF0KGEp
KWJyZWFrO3ZhciBzPWUuc3Vic3RyKDAsaSk7cmV0dXJuIHAobyhzKSksc31mdW5jdGlvbiBsKGUs
dCxuLHIsbyx1KXtlPWV8fCIiLHQ9dHx8IiIscChlIT09dCk7dmFyIGw9aSh0LGUpO3AobHx8aShl
LHQpKTtmb3IodmFyIGM9MCxkPWw/YTpzLGg9ZTtvJiZoPT09ZXx8dSYmaD09PXR8fG4oaCxsLHIp
LGghPT10O2g9ZChoLHQpKXAoYysrPGYpfXZhciBjPWUoIi4vUmVhY3RJRCIpLHA9ZSgiLi9pbnZh
cmlhbnQiKSxkPSIuIixoPWQubGVuZ3RoLGY9MTAwLHY9OTk5OTk5OSxtPXtzZXBhcmF0b3I6ZCxj
cmVhdGVSZWFjdFJvb3RJRDpmdW5jdGlvbigpe3JldHVybiBuKE1hdGguY2VpbChNYXRoLnJhbmRv
bSgpKnYpKX0saXNSZW5kZXJlZEJ5UmVhY3Q6ZnVuY3Rpb24oZSl7aWYoMSE9PWUubm9kZVR5cGUp
cmV0dXJuITE7dmFyIHQ9Yy5nZXRJRChlKTtyZXR1cm4gdD90LmNoYXJBdCgwKT09PWQ6ITF9LGdl
dEZpcnN0UmVhY3RET006ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWU7dCYmdC5wYXJlbnROb2RlIT09
dDspe2lmKG0uaXNSZW5kZXJlZEJ5UmVhY3QodCkpcmV0dXJuIHQ7dD10LnBhcmVudE5vZGV9cmV0
dXJuIG51bGx9LGZpbmRDb21wb25lbnRSb290OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtlLmZp
cnN0Q2hpbGRdLHI9MDtyPG4ubGVuZ3RoOylmb3IodmFyIG89bltyKytdO287KXt2YXIgYT1jLmdl
dElEKG8pO2lmKGEpe2lmKHQ9PT1hKXJldHVybiBvO2lmKGkoYSx0KSl7bi5sZW5ndGg9cj0wLG4u
cHVzaChvLmZpcnN0Q2hpbGQpO2JyZWFrfW4ucHVzaChvLmZpcnN0Q2hpbGQpfWVsc2Ugbi5wdXNo
KG8uZmlyc3RDaGlsZCk7bz1vLm5leHRTaWJsaW5nfXAoITEpfSxnZXRSZWFjdFJvb3RJREZyb21O
b2RlSUQ6ZnVuY3Rpb24oZSl7dmFyIHQ9L1wuclxbW15cXV0rXF0vLmV4ZWMoZSk7cmV0dXJuIHQm
JnRbMF19LHRyYXZlcnNlRW50ZXJMZWF2ZTpmdW5jdGlvbihlLHQsbixyLG8pe3ZhciBpPXUoZSx0
KTtpIT09ZSYmbChlLGksbixyLCExLCEwKSxpIT09dCYmbChpLHQsbixvLCEwLCExKX0sdHJhdmVy
c2VUd29QaGFzZTpmdW5jdGlvbihlLHQsbil7ZSYmKGwoIiIsZSx0LG4sITAsITEpLGwoZSwiIix0
LG4sITEsITApKX0sX2dldEZpcnN0Q29tbW9uQW5jZXN0b3JJRDp1LF9nZXROZXh0RGVzY2VuZGFu
dElEOnN9O3QuZXhwb3J0cz1tfSx7Ii4vUmVhY3RJRCI6MzUsIi4vaW52YXJpYW50Ijo3NX1dLDM4
OltmdW5jdGlvbihlLHQpeyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3Jl
dHVybiBlJiZlLmZpcnN0Q2hpbGR9ZnVuY3Rpb24gcihlKXt2YXIgdD1uKGUpO3JldHVybiB0JiZz
LmdldElEKHQpfWUoIi4vaW52YXJpYW50Iik7dmFyIG89ZSgiLi9SZWFjdEV2ZW50RW1pdHRlciIp
LGk9ZSgiLi9SZWFjdEluc3RhbmNlSGFuZGxlcyIpLGE9ZSgiLi9SZWFjdEV2ZW50VG9wTGV2ZWxD
YWxsYmFjayIpLHM9ZSgiLi9SZWFjdElEIiksdT1lKCIuLyQiKSxsPXt9LGM9e30scD17dG90YWxJ
bnN0YW50aWF0aW9uVGltZTowLHRvdGFsSW5qZWN0aW9uVGltZTowLHVzZVRvdWNoRXZlbnRzOiEx
LHNjcm9sbE1vbml0b3I6ZnVuY3Rpb24oZSx0KXt0KCl9LHByZXBhcmVUb3BMZXZlbEV2ZW50czpm
dW5jdGlvbihlKXtvLmVuc3VyZUxpc3RlbmluZyhwLnVzZVRvdWNoRXZlbnRzLGUpfSxfdXBkYXRl
Um9vdENvbXBvbmVudDpmdW5jdGlvbihlLHQsbixyKXt2YXIgbz10LnByb3BzO3JldHVybiBwLnNj
cm9sbE1vbml0b3IobixmdW5jdGlvbigpe2UucmVwbGFjZVByb3BzKG8scil9KSxlfSxfcmVnaXN0
ZXJDb21wb25lbnQ6ZnVuY3Rpb24oZSx0KXtwLnByZXBhcmVUb3BMZXZlbEV2ZW50cyhhKTt2YXIg
bj1wLnJlZ2lzdGVyQ29udGFpbmVyKHQpO3JldHVybiBsW25dPWUsbn0sX3JlbmRlck5ld1Jvb3RD
b21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXAuX3JlZ2lzdGVyQ29tcG9uZW50KGUsdCk7
cmV0dXJuIGUubW91bnRDb21wb25lbnRJbnRvTm9kZShyLHQsbiksZX0scmVuZGVyQ29tcG9uZW50
OmZ1bmN0aW9uKGUsdCxvKXt2YXIgYT1sW3IodCldO2lmKGEpe2lmKGEuY29uc3RydWN0b3I9PT1l
LmNvbnN0cnVjdG9yKXJldHVybiBwLl91cGRhdGVSb290Q29tcG9uZW50KGEsZSx0LG8pO3AudW5t
b3VudEFuZFJlbGVhc2VSZWFjdFJvb3ROb2RlKHQpfXZhciBzPW4odCksdT1zJiZpLmlzUmVuZGVy
ZWRCeVJlYWN0KHMpLGM9dSYmIWEsZD1wLl9yZW5kZXJOZXdSb290Q29tcG9uZW50KGUsdCxjKTty
ZXR1cm4gbyYmbygpLGR9LGNvbnN0cnVjdEFuZFJlbmRlckNvbXBvbmVudDpmdW5jdGlvbihlLHQs
bil7cmV0dXJuIHAucmVuZGVyQ29tcG9uZW50KGUodCksbil9LGNvbnN0cnVjdEFuZFJlbmRlckNv
bXBvbmVudEJ5SUQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBwLmNvbnN0cnVjdEFuZFJlbmRlckNv
bXBvbmVudChlLHQsdShuKSl9LHJlZ2lzdGVyQ29udGFpbmVyOmZ1bmN0aW9uKGUpe3ZhciB0PXIo
ZSk7cmV0dXJuIHQmJih0PWkuZ2V0UmVhY3RSb290SURGcm9tTm9kZUlEKHQpKSx0fHwodD1pLmNy
ZWF0ZVJlYWN0Um9vdElEKCkpLGNbdF09ZSx0fSx1bm1vdW50QW5kUmVsZWFzZVJlYWN0Um9vdE5v
ZGU6ZnVuY3Rpb24oZSl7dmFyIHQ9cihlKSxuPWxbdF07cmV0dXJuIG4/KG4udW5tb3VudENvbXBv
bmVudEZyb21Ob2RlKGUpLGRlbGV0ZSBsW3RdLGRlbGV0ZSBjW3RdLCEwKTohMX0sZmluZFJlYWN0
Q29udGFpbmVyRm9ySUQ6ZnVuY3Rpb24oZSl7dmFyIHQ9aS5nZXRSZWFjdFJvb3RJREZyb21Ob2Rl
SUQoZSksbj1jW3RdO3JldHVybiBufSxmaW5kUmVhY3ROb2RlQnlJRDpmdW5jdGlvbihlKXt2YXIg
dD1wLmZpbmRSZWFjdENvbnRhaW5lckZvcklEKGUpO3JldHVybiBpLmZpbmRDb21wb25lbnRSb290
KHQsZSl9fTt0LmV4cG9ydHM9cH0oKX0seyIuLyQiOjEsIi4vUmVhY3RFdmVudEVtaXR0ZXIiOjMz
LCIuL1JlYWN0RXZlbnRUb3BMZXZlbENhbGxiYWNrIjozNCwiLi9SZWFjdElEIjozNSwiLi9SZWFj
dEluc3RhbmNlSGFuZGxlcyI6MzcsIi4vaW52YXJpYW50Ijo3NX1dLDM5OltmdW5jdGlvbihlLHQp
eyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUsdCl7cmV0dXJuIGUmJnQmJmUu
Y29uc3RydWN0b3I9PT10LmNvbnN0cnVjdG9yfXZhciByPWUoIi4vUmVhY3RDb21wb25lbnQiKSxv
PXtlbnF1ZXVlTWFya3VwQXQ6ZnVuY3Rpb24oZSx0KXt0aGlzLmRvbU9wZXJhdGlvbnM9dGhpcy5k
b21PcGVyYXRpb25zfHxbXSx0aGlzLmRvbU9wZXJhdGlvbnMucHVzaCh7aW5zZXJ0TWFya3VwOmUs
ZmluYWxJbmRleDp0fSl9LGVucXVldWVNb3ZlOmZ1bmN0aW9uKGUsdCl7dGhpcy5kb21PcGVyYXRp
b25zPXRoaXMuZG9tT3BlcmF0aW9uc3x8W10sdGhpcy5kb21PcGVyYXRpb25zLnB1c2goe21vdmVG
cm9tOmUsZmluYWxJbmRleDp0fSl9LGVucXVldWVVbm1vdW50Q2hpbGRCeU5hbWU6ZnVuY3Rpb24o
ZSx0KXtyLmlzVmFsaWRDb21wb25lbnQodCkmJih0aGlzLmRvbU9wZXJhdGlvbnM9dGhpcy5kb21P
cGVyYXRpb25zfHxbXSx0aGlzLmRvbU9wZXJhdGlvbnMucHVzaCh7cmVtb3ZlQXQ6dC5fZG9tSW5k
ZXh9KSx0LnVubW91bnRDb21wb25lbnQmJnQudW5tb3VudENvbXBvbmVudCgpLGRlbGV0ZSB0aGlz
Ll9yZW5kZXJlZENoaWxkcmVuW2VdKX0scHJvY2Vzc0NoaWxkRE9NT3BlcmF0aW9uc1F1ZXVlOmZ1
bmN0aW9uKCl7dGhpcy5kb21PcGVyYXRpb25zJiYoci5ET01JRE9wZXJhdGlvbnMubWFuYWdlQ2hp
bGRyZW5CeVBhcmVudElEKHRoaXMuX3Jvb3ROb2RlSUQsdGhpcy5kb21PcGVyYXRpb25zKSx0aGlz
LmRvbU9wZXJhdGlvbnM9bnVsbCl9LHVubW91bnRNdWx0aUNoaWxkOmZ1bmN0aW9uKCl7dmFyIGU9
dGhpcy5fcmVuZGVyZWRDaGlsZHJlbjtmb3IodmFyIHQgaW4gZSlpZihlLmhhc093blByb3BlcnR5
KHQpJiZlW3RdKXt2YXIgbj1lW3RdO24udW5tb3VudENvbXBvbmVudCYmbi51bm1vdW50Q29tcG9u
ZW50KCl9dGhpcy5fcmVuZGVyZWRDaGlsZHJlbj1udWxsfSxtb3VudE11bHRpQ2hpbGQ6ZnVuY3Rp
b24oZSx0KXt2YXIgbj0iIixyPTA7Zm9yKHZhciBvIGluIGUpe3ZhciBpPWVbb107ZS5oYXNPd25Q
cm9wZXJ0eShvKSYmaSYmKG4rPWkubW91bnRDb21wb25lbnQodGhpcy5fcm9vdE5vZGVJRCsiLiIr
byx0KSxpLl9kb21JbmRleD1yLHIrKyl9cmV0dXJuIHRoaXMuX3JlbmRlcmVkQ2hpbGRyZW49ZSx0
aGlzLmRvbU9wZXJhdGlvbnM9bnVsbCxufSx1cGRhdGVNdWx0aUNoaWxkOmZ1bmN0aW9uKGUsdCl7
aWYoZXx8dGhpcy5fcmVuZGVyZWRDaGlsZHJlbil7ZSYmIXRoaXMuX3JlbmRlcmVkQ2hpbGRyZW4/
dGhpcy5fcmVuZGVyZWRDaGlsZHJlbj17fTohZSYmdGhpcy5fcmVuZGVyZWRDaGlsZHJlbiYmKGU9
e30pO3ZhciByPXRoaXMuX3Jvb3ROb2RlSUQrIi4iLG89bnVsbCxpPTAsYT0wLHM9MDtmb3IodmFy
IHUgaW4gZSlpZihlLmhhc093blByb3BlcnR5KHUpKXt2YXIgbD10aGlzLl9yZW5kZXJlZENoaWxk
cmVuW3VdLGM9ZVt1XTtpZihuKGwsYykpbyYmKHRoaXMuZW5xdWV1ZU1hcmt1cEF0KG8sYS1pKSxv
PW51bGwpLGk9MCxsLl9kb21JbmRleDxzJiZ0aGlzLmVucXVldWVNb3ZlKGwuX2RvbUluZGV4LGEp
LHM9TWF0aC5tYXgobC5fZG9tSW5kZXgscyksbC5yZWNlaXZlUHJvcHMoYy5wcm9wcyx0KSxsLl9k
b21JbmRleD1hO2Vsc2UgaWYobCYmKHRoaXMuZW5xdWV1ZVVubW91bnRDaGlsZEJ5TmFtZSh1LGwp
LHM9TWF0aC5tYXgobC5fZG9tSW5kZXgscykpLGMpe3RoaXMuX3JlbmRlcmVkQ2hpbGRyZW5bdV09
Yzt2YXIgcD1jLm1vdW50Q29tcG9uZW50KHIrdSx0KTtvPW8/bytwOnAsaSsrLGMuX2RvbUluZGV4
PWF9YT1jP2ErMTphfW8mJnRoaXMuZW5xdWV1ZU1hcmt1cEF0KG8sYS1pKTtmb3IodmFyIGQgaW4g
dGhpcy5fcmVuZGVyZWRDaGlsZHJlbilpZih0aGlzLl9yZW5kZXJlZENoaWxkcmVuLmhhc093blBy
b3BlcnR5KGQpKXt2YXIgaD10aGlzLl9yZW5kZXJlZENoaWxkcmVuW2RdO2gmJiFlW2RdJiZ0aGlz
LmVucXVldWVVbm1vdW50Q2hpbGRCeU5hbWUoZCxoKX10aGlzLnByb2Nlc3NDaGlsZERPTU9wZXJh
dGlvbnNRdWV1ZSgpfX19LGk9e01peGluOm99O3QuZXhwb3J0cz1pfSgpfSx7Ii4vUmVhY3RDb21w
b25lbnQiOjIyfV0sNDA6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7
ZSYmKGgobnVsbD09ZS5jaGlsZHJlbnx8bnVsbD09ZS5kYW5nZXJvdXNseVNldElubmVySFRNTCks
aChudWxsPT1lLnN0eWxlfHwib2JqZWN0Ij09dHlwZW9mIGUuc3R5bGUpKX1mdW5jdGlvbiByKGUs
dCl7dGhpcy5fdGFnT3Blbj0iPCIrZSx0aGlzLl90YWdDbG9zZT10PyIiOiI8LyIrZSsiPiIsdGhp
cy50YWdOYW1lPWUudG9VcHBlckNhc2UoKX12YXIgbz1lKCIuL0NTU1Byb3BlcnR5T3BlcmF0aW9u
cyIpLGk9ZSgiLi9ET01Qcm9wZXJ0eSIpLGE9ZSgiLi9ET01Qcm9wZXJ0eU9wZXJhdGlvbnMiKSxz
PWUoIi4vUmVhY3RDb21wb25lbnQiKSx1PWUoIi4vUmVhY3RFdmVudEVtaXR0ZXIiKSxsPWUoIi4v
UmVhY3RNdWx0aUNoaWxkIiksYz1lKCIuL1JlYWN0SUQiKSxwPWUoIi4vZXNjYXBlVGV4dEZvckJy
b3dzZXIiKSxkPWUoIi4vZmxhdHRlbkNoaWxkcmVuIiksaD1lKCIuL2ludmFyaWFudCIpLGY9ZSgi
Li9rZXlPZiIpLHY9ZSgiLi9tZXJnZSIpLG09ZSgiLi9taXhJbnRvIiksZz11LnB1dExpc3RlbmVy
LHk9dS5kZWxldGVMaXN0ZW5lcixDPXUucmVnaXN0cmF0aW9uTmFtZXMsRT17c3RyaW5nOiEwLG51
bWJlcjohMH0sRD1mKHtkYW5nZXJvdXNseVNldElubmVySFRNTDpudWxsfSksTT1mKHtzdHlsZTpu
dWxsfSk7ci5NaXhpbj17bW91bnRDb21wb25lbnQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcy5NaXhp
bi5tb3VudENvbXBvbmVudC5jYWxsKHRoaXMsZSx0KSxuKHRoaXMucHJvcHMpLHRoaXMuX2NyZWF0
ZU9wZW5UYWdNYXJrdXAoKSt0aGlzLl9jcmVhdGVDb250ZW50TWFya3VwKHQpK3RoaXMuX3RhZ0Ns
b3NlfSxfY3JlYXRlT3BlblRhZ01hcmt1cDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD10
aGlzLl90YWdPcGVuO2Zvcih2YXIgbiBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkobikpe3ZhciBy
PWVbbl07aWYobnVsbCE9cilpZihDW25dKWcodGhpcy5fcm9vdE5vZGVJRCxuLHIpO2Vsc2V7bj09
PU0mJihyJiYocj1lLnN0eWxlPXYoZS5zdHlsZSkpLHI9by5jcmVhdGVNYXJrdXBGb3JTdHlsZXMo
cikpO3ZhciBpPWEuY3JlYXRlTWFya3VwRm9yUHJvcGVydHkobixyKTtpJiYodCs9IiAiK2kpfX12
YXIgcz1wKHRoaXMuX3Jvb3ROb2RlSUQpO3JldHVybiB0KyIgIitjLkFUVFJfTkFNRSsnPSInK3Mr
JyI+J30sX2NyZWF0ZUNvbnRlbnRNYXJrdXA6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcy5k
YW5nZXJvdXNseVNldElubmVySFRNTDtpZihudWxsIT10KXtpZihudWxsIT10Ll9faHRtbClyZXR1
cm4gdC5fX2h0bWx9ZWxzZXt2YXIgbj1FW3R5cGVvZiB0aGlzLnByb3BzLmNoaWxkcmVuXT90aGlz
LnByb3BzLmNoaWxkcmVuOm51bGwscj1udWxsIT1uP251bGw6dGhpcy5wcm9wcy5jaGlsZHJlbjtp
ZihudWxsIT1uKXJldHVybiBwKG4pO2lmKG51bGwhPXIpcmV0dXJuIHRoaXMubW91bnRNdWx0aUNo
aWxkKGQociksZSl9cmV0dXJuIiJ9LHJlY2VpdmVQcm9wczpmdW5jdGlvbihlLHQpe24oZSkscy5N
aXhpbi5yZWNlaXZlUHJvcHMuY2FsbCh0aGlzLGUsdCl9LHVwZGF0ZUNvbXBvbmVudDpmdW5jdGlv
bihlLHQpe3MuTWl4aW4udXBkYXRlQ29tcG9uZW50LmNhbGwodGhpcyxlLHQpLHRoaXMuX3VwZGF0
ZURPTVByb3BlcnRpZXModCksdGhpcy5fdXBkYXRlRE9NQ2hpbGRyZW4odCxlKX0sX3VwZGF0ZURP
TVByb3BlcnRpZXM6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLG89dGhpcy5wcm9wcztmb3IodCBpbiBl
KWlmKCFvLmhhc093blByb3BlcnR5KHQpJiZlLmhhc093blByb3BlcnR5KHQpKWlmKHQ9PT1NKXt2
YXIgYT1lW3RdO2ZvcihuIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShuKSYmKHI9cnx8e30scltuXT0i
Iil9ZWxzZSB0PT09RD9zLkRPTUlET3BlcmF0aW9ucy51cGRhdGVUZXh0Q29udGVudEJ5SUQodGhp
cy5fcm9vdE5vZGVJRCwiIik6Q1t0XT95KHRoaXMuX3Jvb3ROb2RlSUQsdCk6cy5ET01JRE9wZXJh
dGlvbnMuZGVsZXRlUHJvcGVydHlCeUlEKHRoaXMuX3Jvb3ROb2RlSUQsdCk7Zm9yKHQgaW4gbyl7
dmFyIHU9b1t0XSxsPWVbdF07aWYoby5oYXNPd25Qcm9wZXJ0eSh0KSYmdSE9PWwpaWYodD09PU0p
aWYodSYmKHU9by5zdHlsZT12KHUpKSxsKXtmb3IobiBpbiBsKWwuaGFzT3duUHJvcGVydHkobikm
JiF1Lmhhc093blByb3BlcnR5KG4pJiYocj1yfHx7fSxyW25dPSIiKTtmb3IobiBpbiB1KXUuaGFz
T3duUHJvcGVydHkobikmJmxbbl0hPT11W25dJiYocj1yfHx7fSxyW25dPXVbbl0pfWVsc2Ugcj11
O2Vsc2UgaWYodD09PUQpe3ZhciBjPWwmJmwuX19odG1sLHA9dSYmdS5fX2h0bWw7YyE9PXAmJnMu
RE9NSURPcGVyYXRpb25zLnVwZGF0ZUlubmVySFRNTEJ5SUQodGhpcy5fcm9vdE5vZGVJRCx1KX1l
bHNlIENbdF0/Zyh0aGlzLl9yb290Tm9kZUlELHQsdSk6KGkuaXNTdGFuZGFyZE5hbWVbdF18fGku
aXNDdXN0b21BdHRyaWJ1dGUodCkpJiZzLkRPTUlET3BlcmF0aW9ucy51cGRhdGVQcm9wZXJ0eUJ5
SUQodGhpcy5fcm9vdE5vZGVJRCx0LHUpfXImJnMuRE9NSURPcGVyYXRpb25zLnVwZGF0ZVN0eWxl
c0J5SUQodGhpcy5fcm9vdE5vZGVJRCxyKX0sX3VwZGF0ZURPTUNoaWxkcmVuOmZ1bmN0aW9uKGUs
dCl7dmFyIG49dGhpcy5wcm9wcyxyPUVbdHlwZW9mIGUuY2hpbGRyZW5dP2UuY2hpbGRyZW46bnVs
bCxvPUVbdHlwZW9mIG4uY2hpbGRyZW5dP24uY2hpbGRyZW46bnVsbCxpPW51bGwhPXI/bnVsbDpl
LmNoaWxkcmVuLGE9bnVsbCE9bz9udWxsOm4uY2hpbGRyZW47aWYobnVsbCE9byl7dmFyIHU9bnVs
bCE9aSYmbnVsbD09YTt1JiZ0aGlzLnVwZGF0ZU11bHRpQ2hpbGQobnVsbCx0KSxyIT09byYmcy5E
T01JRE9wZXJhdGlvbnMudXBkYXRlVGV4dENvbnRlbnRCeUlEKHRoaXMuX3Jvb3ROb2RlSUQsIiIr
byl9ZWxzZXt2YXIgbD1udWxsIT1yJiZudWxsPT1vO2wmJnMuRE9NSURPcGVyYXRpb25zLnVwZGF0
ZVRleHRDb250ZW50QnlJRCh0aGlzLl9yb290Tm9kZUlELCIiKSx0aGlzLnVwZGF0ZU11bHRpQ2hp
bGQoZChuLmNoaWxkcmVuKSx0KX19LHVubW91bnRDb21wb25lbnQ6ZnVuY3Rpb24oKXt1LmRlbGV0
ZUFsbExpc3RlbmVycyh0aGlzLl9yb290Tm9kZUlEKSxzLk1peGluLnVubW91bnRDb21wb25lbnQu
Y2FsbCh0aGlzKSx0aGlzLnVubW91bnRNdWx0aUNoaWxkKCl9fSxtKHIscy5NaXhpbiksbShyLHIu
TWl4aW4pLG0ocixsLk1peGluKSx0LmV4cG9ydHM9cn0seyIuL0NTU1Byb3BlcnR5T3BlcmF0aW9u
cyI6MywiLi9ET01Qcm9wZXJ0eSI6NywiLi9ET01Qcm9wZXJ0eU9wZXJhdGlvbnMiOjgsIi4vUmVh
Y3RDb21wb25lbnQiOjIyLCIuL1JlYWN0RXZlbnRFbWl0dGVyIjozMywiLi9SZWFjdElEIjozNSwi
Li9SZWFjdE11bHRpQ2hpbGQiOjM5LCIuL2VzY2FwZVRleHRGb3JCcm93c2VyIjo2NSwiLi9mbGF0
dGVuQ2hpbGRyZW4iOjY3LCIuL2ludmFyaWFudCI6NzUsIi4va2V5T2YiOjc5LCIuL21lcmdlIjo4
MSwiLi9taXhJbnRvIjo4NH1dLDQxOltmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlv
biBuKGUpe3RoaXMuX3F1ZXVlPWV8fG51bGx9dmFyIHI9ZSgiLi9Qb29sZWRDbGFzcyIpLG89ZSgi
Li9taXhJbnRvIik7byhuLHtlbnF1ZXVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fcXVldWU9dGhpcy5f
cXVldWV8fFtdLHRoaXMuX3F1ZXVlLnB1c2goe2NvbXBvbmVudDplLGNhbGxiYWNrOnR9KX0sbm90
aWZ5QWxsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcXVldWU7aWYoZSl7dGhpcy5fcXVldWU9bnVs
bDtmb3IodmFyIHQ9MCxuPWUubGVuZ3RoO24+dDt0Kyspe3ZhciByPWVbdF0uY29tcG9uZW50LG89
ZVt0XS5jYWxsYmFjaztvLmNhbGwocixyLmdldERPTU5vZGUoKSl9ZS5sZW5ndGg9MH19LHJlc2V0
OmZ1bmN0aW9uKCl7dGhpcy5fcXVldWU9bnVsbH0sZGVzdHJ1Y3RvcjpmdW5jdGlvbigpe3RoaXMu
cmVzZXQoKX19KSxyLmFkZFBvb2xpbmdUbyhuKSx0LmV4cG9ydHM9bn0seyIuL1Bvb2xlZENsYXNz
IjoyMCwiLi9taXhJbnRvIjo4NH1dLDQyOltmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIg
bj1lKCIuL2ludmFyaWFudCIpLHI9e2lzVmFsaWRPd25lcjpmdW5jdGlvbihlKXtyZXR1cm4hKCFl
fHwiZnVuY3Rpb24iIT10eXBlb2YgZS5hdHRhY2hSZWZ8fCJmdW5jdGlvbiIhPXR5cGVvZiBlLmRl
dGFjaFJlZil9LGFkZENvbXBvbmVudEFzUmVmVG86ZnVuY3Rpb24oZSx0LG8pe24oci5pc1ZhbGlk
T3duZXIobykpLG8uYXR0YWNoUmVmKHQsZSl9LHJlbW92ZUNvbXBvbmVudEFzUmVmRnJvbTpmdW5j
dGlvbihlLHQsbyl7bihyLmlzVmFsaWRPd25lcihvKSksby5yZWZzW3RdPT09ZSYmby5kZXRhY2hS
ZWYodCl9LE1peGluOnthdHRhY2hSZWY6ZnVuY3Rpb24oZSx0KXtuKHQuaXNPd25lZEJ5KHRoaXMp
KTt2YXIgcj10aGlzLnJlZnN8fCh0aGlzLnJlZnM9e30pO3JbZV09dH0sZGV0YWNoUmVmOmZ1bmN0
aW9uKGUpe2RlbGV0ZSB0aGlzLnJlZnNbZV19fX07dC5leHBvcnRzPXJ9LHsiLi9pbnZhcmlhbnQi
Ojc1fV0sNDM6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJu
IGZ1bmN0aW9uKHQsbixyKXt0W25dPXQuaGFzT3duUHJvcGVydHkobik/ZSh0W25dLHIpOnJ9fXZh
ciByPWUoIi4vZW1wdHlGdW5jdGlvbiIpLG89ZSgiLi9qb2luQ2xhc3NlcyIpLGk9ZSgiLi9tZXJn
ZSIpLGE9e2NoaWxkcmVuOnIsY2xhc3NOYW1lOm4obykscmVmOnIsc3R5bGU6bihpKX0scz17VHJh
bnNmZXJTdHJhdGVnaWVzOmEsTWl4aW46e3RyYW5zZmVyUHJvcHNUbzpmdW5jdGlvbihlKXt2YXIg
dD17fTtmb3IodmFyIG4gaW4gZS5wcm9wcyllLnByb3BzLmhhc093blByb3BlcnR5KG4pJiYodFtu
XT1lLnByb3BzW25dKTtmb3IodmFyIHIgaW4gdGhpcy5wcm9wcylpZih0aGlzLnByb3BzLmhhc093
blByb3BlcnR5KHIpKXt2YXIgbz1hW3JdO28/byh0LHIsdGhpcy5wcm9wc1tyXSk6dC5oYXNPd25Q
cm9wZXJ0eShyKXx8KHRbcl09dGhpcy5wcm9wc1tyXSl9cmV0dXJuIGUucHJvcHM9dCxlfX19O3Qu
ZXhwb3J0cz1zfSx7Ii4vZW1wdHlGdW5jdGlvbiI6NjQsIi4vam9pbkNsYXNzZXMiOjc3LCIuL21l
cmdlIjo4MX1dLDQ0OltmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe2Z1
bmN0aW9uIHQodCl7dmFyIG49dHlwZW9mIHQ7Im9iamVjdCI9PT1uJiZBcnJheS5pc0FycmF5KHQp
JiYobj0iYXJyYXkiKSxzKG49PT1lKX1yZXR1cm4gaSh0KX1mdW5jdGlvbiByKGUpe2Z1bmN0aW9u
IHQoZSl7cyhuW2VdKX12YXIgbj1hKGUpO3JldHVybiBpKHQpfWZ1bmN0aW9uIG8oZSl7ZnVuY3Rp
b24gdCh0KXtzKHQgaW5zdGFuY2VvZiBlKX1yZXR1cm4gaSh0KX1mdW5jdGlvbiBpKGUpe2Z1bmN0
aW9uIHQobil7ZnVuY3Rpb24gcih0LHIsbyl7dmFyIGk9dFtyXTtudWxsIT1pP2UoaSxyLG98fGwp
OnMoIW4pfXJldHVybiBufHwoci5pc1JlcXVpcmVkPXQoITApKSxyfXJldHVybiB0KCExKX12YXIg
YT1lKCIuL2NyZWF0ZU9iamVjdEZyb20iKSxzPWUoIi4vaW52YXJpYW50IiksdT17YXJyYXk6bigi
YXJyYXkiKSxib29sOm4oImJvb2xlYW4iKSxmdW5jOm4oImZ1bmN0aW9uIiksbnVtYmVyOm4oIm51
bWJlciIpLG9iamVjdDpuKCJvYmplY3QiKSxzdHJpbmc6bigic3RyaW5nIiksb25lT2Y6cixpbnN0
YW5jZU9mOm99LGw9Ijw8YW5vbnltb3VzPj4iO3QuZXhwb3J0cz11fSx7Ii4vY3JlYXRlT2JqZWN0
RnJvbSI6NjIsIi4vaW52YXJpYW50Ijo3NX1dLDQ1OltmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0
IjtmdW5jdGlvbiBuKCl7dGhpcy5yZWluaXRpYWxpemVUcmFuc2FjdGlvbigpLHRoaXMucmVhY3RP
bkRPTVJlYWR5PXMuZ2V0UG9vbGVkKG51bGwpfXZhciByPWUoIi4vRXhlY3V0aW9uRW52aXJvbm1l
bnQiKSxvPWUoIi4vUG9vbGVkQ2xhc3MiKSxpPWUoIi4vUmVhY3RFdmVudEVtaXR0ZXIiKSxhPWUo
Ii4vUmVhY3RJbnB1dFNlbGVjdGlvbiIpLHM9ZSgiLi9SZWFjdE9uRE9NUmVhZHkiKSx1PWUoIi4v
VHJhbnNhY3Rpb24iKSxsPWUoIi4vbWl4SW50byIpLGM9e2luaXRpYWxpemU6YS5nZXRTZWxlY3Rp
b25JbmZvcm1hdGlvbixjbG9zZTphLnJlc3RvcmVTZWxlY3Rpb259LHA9e2luaXRpYWxpemU6ZnVu
Y3Rpb24oKXt2YXIgZT1pLmlzRW5hYmxlZCgpO3JldHVybiBpLnNldEVuYWJsZWQoITEpLGV9LGNs
b3NlOmZ1bmN0aW9uKGUpe2kuc2V0RW5hYmxlZChlKX19LGQ9e2luaXRpYWxpemU6ZnVuY3Rpb24o
KXt0aGlzLnJlYWN0T25ET01SZWFkeS5yZXNldCgpfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMucmVh
Y3RPbkRPTVJlYWR5Lm5vdGlmeUFsbCgpfX0saD1bYyxwLGRdLGY9e2dldFRyYW5zYWN0aW9uV3Jh
cHBlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gci5jYW5Vc2VET00/aDpbXX0sZ2V0UmVhY3RPbkRPTVJl
YWR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhY3RPbkRPTVJlYWR5fSxkZXN0cnVjdG9yOmZ1
bmN0aW9uKCl7cy5yZWxlYXNlKHRoaXMucmVhY3RPbkRPTVJlYWR5KSx0aGlzLnJlYWN0T25ET01S
ZWFkeT1udWxsfX07bChuLHUuTWl4aW4pLGwobixmKSxvLmFkZFBvb2xpbmdUbyhuKSx0LmV4cG9y
dHM9bn0seyIuL0V4ZWN1dGlvbkVudmlyb25tZW50IjoxOSwiLi9Qb29sZWRDbGFzcyI6MjAsIi4v
UmVhY3RFdmVudEVtaXR0ZXIiOjMzLCIuL1JlYWN0SW5wdXRTZWxlY3Rpb24iOjM2LCIuL1JlYWN0
T25ET01SZWFkeSI6NDEsIi4vVHJhbnNhY3Rpb24iOjU4LCIuL21peEludG8iOjg0fV0sNDY6W2Z1
bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSx0KXt2YXIgbj1vLmNyZWF0ZVJl
YWN0Um9vdElEKCksaT1yLmdldFBvb2xlZCgpO2kucmVpbml0aWFsaXplVHJhbnNhY3Rpb24oKTt0
cnl7aS5wZXJmb3JtKGZ1bmN0aW9uKCl7dChlLm1vdW50Q29tcG9uZW50KG4saSkpfSxudWxsKX1m
aW5hbGx5e3IucmVsZWFzZShpKX19dmFyIHI9ZSgiLi9SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9u
Iiksbz1lKCIuL1JlYWN0SW5zdGFuY2VIYW5kbGVzIik7dC5leHBvcnRzPXtyZW5kZXJDb21wb25l
bnRUb1N0cmluZzpufX0seyIuL1JlYWN0SW5zdGFuY2VIYW5kbGVzIjozNywiLi9SZWFjdFJlY29u
Y2lsZVRyYW5zYWN0aW9uIjo0NX1dLDQ3OltmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIg
bj1lKCIuL1JlYWN0Q29tcG9uZW50Iikscj1lKCIuL1JlYWN0SUQiKSxvPWUoIi4vZXNjYXBlVGV4
dEZvckJyb3dzZXIiKSxpPWUoIi4vbWl4SW50byIpLGE9ZnVuY3Rpb24oZSl7dGhpcy5jb25zdHJ1
Y3Qoe3RleHQ6ZX0pfTtpKGEsbi5NaXhpbiksaShhLHttb3VudENvbXBvbmVudDpmdW5jdGlvbihl
KXtyZXR1cm4gbi5NaXhpbi5tb3VudENvbXBvbmVudC5jYWxsKHRoaXMsZSksIjxzcGFuICIrci5B
VFRSX05BTUUrJz0iJytlKyciPicrbyh0aGlzLnByb3BzLnRleHQpKyI8L3NwYW4+In0scmVjZWl2
ZVByb3BzOmZ1bmN0aW9uKGUpe2UudGV4dCE9PXRoaXMucHJvcHMudGV4dCYmKHRoaXMucHJvcHMu
dGV4dD1lLnRleHQsbi5ET01JRE9wZXJhdGlvbnMudXBkYXRlVGV4dENvbnRlbnRCeUlEKHRoaXMu
X3Jvb3ROb2RlSUQsZS50ZXh0KSl9fSksdC5leHBvcnRzPWF9LHsiLi9SZWFjdENvbXBvbmVudCI6
MjIsIi4vUmVhY3RJRCI6MzUsIi4vZXNjYXBlVGV4dEZvckJyb3dzZXIiOjY1LCIuL21peEludG8i
Ojg0fV0sNDg6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7aWYoaSly
ZXR1cm4gZSgpLHZvaWQgMDtpPSEwO3RyeXtlKCk7Zm9yKHZhciB0PTA7dDxhLmxlbmd0aDt0Kysp
e3ZhciBuPWFbdF07aWYobi5pc01vdW50ZWQoKSl7dmFyIHI9bi5fcGVuZGluZ0NhbGxiYWNrcztp
ZihuLl9wZW5kaW5nQ2FsbGJhY2tzPW51bGwsbi5wZXJmb3JtVXBkYXRlSWZOZWNlc3NhcnkoKSxy
KWZvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXJbb10oKX19fWNhdGNoKHMpe3Rocm93IHN9Zmlu
YWxseXthLmxlbmd0aD0wLGk9ITF9fWZ1bmN0aW9uIHIoZSx0KXtyZXR1cm4gbyghdHx8ImZ1bmN0
aW9uIj09dHlwZW9mIHQpLGk/KGEucHVzaChlKSx0JiYoZS5fcGVuZGluZ0NhbGxiYWNrcz9lLl9w
ZW5kaW5nQ2FsbGJhY2tzLnB1c2godCk6ZS5fcGVuZGluZ0NhbGxiYWNrcz1bdF0pLHZvaWQgMCk6
KGUucGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5KCksdCYmdCgpLHZvaWQgMCl9dmFyIG89ZSgiLi9p
bnZhcmlhbnQiKSxpPSExLGE9W10scz17YmF0Y2hlZFVwZGF0ZXM6bixlbnF1ZXVlVXBkYXRlOnJ9
O3QuZXhwb3J0cz1zfSx7Ii4vaW52YXJpYW50Ijo3NX1dLDQ5OltmdW5jdGlvbihlLHQpeyJ1c2Ug
c3RyaWN0Ijt2YXIgbj1lKCIuL0V2ZW50Q29uc3RhbnRzIikscj1lKCIuL0V2ZW50UHJvcGFnYXRv
cnMiKSxvPWUoIi4vU3ludGhldGljRXZlbnQiKSxpPWUoIi4vU3ludGhldGljRm9jdXNFdmVudCIp
LGE9ZSgiLi9TeW50aGV0aWNLZXlib2FyZEV2ZW50Iikscz1lKCIuL1N5bnRoZXRpY01vdXNlRXZl
bnQiKSx1PWUoIi4vU3ludGhldGljTXV0YXRpb25FdmVudCIpLGw9ZSgiLi9TeW50aGV0aWNUb3Vj
aEV2ZW50IiksYz1lKCIuL1N5bnRoZXRpY1VJRXZlbnQiKSxwPWUoIi4vU3ludGhldGljV2hlZWxF
dmVudCIpLGQ9ZSgiLi9pbnZhcmlhbnQiKSxoPWUoIi4va2V5T2YiKSxmPW4udG9wTGV2ZWxUeXBl
cyx2PXtibHVyOntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDpoKHtvbkJsdXI6ITB9
KSxjYXB0dXJlZDpoKHtvbkJsdXJDYXB0dXJlOiEwfSl9fSxjbGljazp7cGhhc2VkUmVnaXN0cmF0
aW9uTmFtZXM6e2J1YmJsZWQ6aCh7b25DbGljazohMH0pLGNhcHR1cmVkOmgoe29uQ2xpY2tDYXB0
dXJlOiEwfSl9fSxkb3VibGVDbGljazp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6
aCh7b25Eb3VibGVDbGljazohMH0pLGNhcHR1cmVkOmgoe29uRG91YmxlQ2xpY2tDYXB0dXJlOiEw
fSl9fSxkcmFnOntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDpoKHtvbkRyYWc6ITB9
KSxjYXB0dXJlZDpoKHtvbkRyYWdDYXB0dXJlOiEwfSl9fSxkcmFnRW5kOntwaGFzZWRSZWdpc3Ry
YXRpb25OYW1lczp7YnViYmxlZDpoKHtvbkRyYWdFbmQ6ITB9KSxjYXB0dXJlZDpoKHtvbkRyYWdF
bmRDYXB0dXJlOiEwfSl9fSxkcmFnRW50ZXI6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJi
bGVkOmgoe29uRHJhZ0VudGVyOiEwfSksY2FwdHVyZWQ6aCh7b25EcmFnRW50ZXJDYXB0dXJlOiEw
fSl9fSxkcmFnRXhpdDp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6aCh7b25EcmFn
RXhpdDohMH0pLGNhcHR1cmVkOmgoe29uRHJhZ0V4aXRDYXB0dXJlOiEwfSl9fSxkcmFnTGVhdmU6
e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOmgoe29uRHJhZ0xlYXZlOiEwfSksY2Fw
dHVyZWQ6aCh7b25EcmFnTGVhdmVDYXB0dXJlOiEwfSl9fSxkcmFnT3Zlcjp7cGhhc2VkUmVnaXN0
cmF0aW9uTmFtZXM6e2J1YmJsZWQ6aCh7b25EcmFnT3ZlcjohMH0pLGNhcHR1cmVkOmgoe29uRHJh
Z092ZXJDYXB0dXJlOiEwfSl9fSxkcmFnU3RhcnQ6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOnti
dWJibGVkOmgoe29uRHJhZ1N0YXJ0OiEwfSksY2FwdHVyZWQ6aCh7b25EcmFnU3RhcnRDYXB0dXJl
OiEwfSl9fSxkcm9wOntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDpoKHtvbkRyb3A6
ITB9KSxjYXB0dXJlZDpoKHtvbkRyb3BDYXB0dXJlOiEwfSl9fSxET01DaGFyYWN0ZXJEYXRhTW9k
aWZpZWQ6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOmgoe29uRE9NQ2hhcmFjdGVy
RGF0YU1vZGlmaWVkOiEwfSksY2FwdHVyZWQ6aCh7b25ET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWRD
YXB0dXJlOiEwfSl9fSxmb2N1czp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6aCh7
b25Gb2N1czohMH0pLGNhcHR1cmVkOmgoe29uRm9jdXNDYXB0dXJlOiEwfSl9fSxpbnB1dDp7cGhh
c2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6aCh7b25JbnB1dDohMH0pLGNhcHR1cmVkOmgo
e29uSW5wdXRDYXB0dXJlOiEwfSl9fSxrZXlEb3duOntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7
YnViYmxlZDpoKHtvbktleURvd246ITB9KSxjYXB0dXJlZDpoKHtvbktleURvd25DYXB0dXJlOiEw
fSl9fSxrZXlQcmVzczp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6aCh7b25LZXlQ
cmVzczohMH0pLGNhcHR1cmVkOmgoe29uS2V5UHJlc3NDYXB0dXJlOiEwfSl9fSxrZXlVcDp7cGhh
c2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6aCh7b25LZXlVcDohMH0pLGNhcHR1cmVkOmgo
e29uS2V5VXBDYXB0dXJlOiEwfSl9fSxtb3VzZURvd246e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVz
OntidWJibGVkOmgoe29uTW91c2VEb3duOiEwfSksY2FwdHVyZWQ6aCh7b25Nb3VzZURvd25DYXB0
dXJlOiEwfSl9fSxtb3VzZU1vdmU6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOmgo
e29uTW91c2VNb3ZlOiEwfSksY2FwdHVyZWQ6aCh7b25Nb3VzZU1vdmVDYXB0dXJlOiEwfSl9fSxt
b3VzZVVwOntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDpoKHtvbk1vdXNlVXA6ITB9
KSxjYXB0dXJlZDpoKHtvbk1vdXNlVXBDYXB0dXJlOiEwfSl9fSxzY3JvbGw6e3BoYXNlZFJlZ2lz
dHJhdGlvbk5hbWVzOntidWJibGVkOmgoe29uU2Nyb2xsOiEwfSksY2FwdHVyZWQ6aCh7b25TY3Jv
bGxDYXB0dXJlOiEwfSl9fSxzdWJtaXQ6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVk
Omgoe29uU3VibWl0OiEwfSksY2FwdHVyZWQ6aCh7b25TdWJtaXRDYXB0dXJlOiEwfSl9fSx0b3Vj
aENhbmNlbDp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6aCh7b25Ub3VjaENhbmNl
bDohMH0pLGNhcHR1cmVkOmgoe29uVG91Y2hDYW5jZWxDYXB0dXJlOiEwfSl9fSx0b3VjaEVuZDp7
cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6aCh7b25Ub3VjaEVuZDohMH0pLGNhcHR1
cmVkOmgoe29uVG91Y2hFbmRDYXB0dXJlOiEwfSl9fSx0b3VjaE1vdmU6e3BoYXNlZFJlZ2lzdHJh
dGlvbk5hbWVzOntidWJibGVkOmgoe29uVG91Y2hNb3ZlOiEwfSksY2FwdHVyZWQ6aCh7b25Ub3Vj
aE1vdmVDYXB0dXJlOiEwfSl9fSx0b3VjaFN0YXJ0OntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7
YnViYmxlZDpoKHtvblRvdWNoU3RhcnQ6ITB9KSxjYXB0dXJlZDpoKHtvblRvdWNoU3RhcnRDYXB0
dXJlOiEwfSl9fSx3aGVlbDp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6aCh7b25X
aGVlbDohMH0pLGNhcHR1cmVkOmgoe29uV2hlZWxDYXB0dXJlOiEwfSl9fX0sbT17dG9wQmx1cjp2
LmJsdXIsdG9wQ2xpY2s6di5jbGljayx0b3BEb3VibGVDbGljazp2LmRvdWJsZUNsaWNrLHRvcERP
TUNoYXJhY3RlckRhdGFNb2RpZmllZDp2LkRPTUNoYXJhY3RlckRhdGFNb2RpZmllZCx0b3BEcmFn
OnYuZHJhZyx0b3BEcmFnRW5kOnYuZHJhZ0VuZCx0b3BEcmFnRW50ZXI6di5kcmFnRW50ZXIsdG9w
RHJhZ0V4aXQ6di5kcmFnRXhpdCx0b3BEcmFnTGVhdmU6di5kcmFnTGVhdmUsdG9wRHJhZ092ZXI6
di5kcmFnT3Zlcix0b3BEcmFnU3RhcnQ6di5kcmFnU3RhcnQsdG9wRHJvcDp2LmRyb3AsdG9wRm9j
dXM6di5mb2N1cyx0b3BJbnB1dDp2LmlucHV0LHRvcEtleURvd246di5rZXlEb3duLHRvcEtleVBy
ZXNzOnYua2V5UHJlc3MsdG9wS2V5VXA6di5rZXlVcCx0b3BNb3VzZURvd246di5tb3VzZURvd24s
dG9wTW91c2VNb3ZlOnYubW91c2VNb3ZlLHRvcE1vdXNlVXA6di5tb3VzZVVwLHRvcFNjcm9sbDp2
LnNjcm9sbCx0b3BTdWJtaXQ6di5zdWJtaXQsdG9wVG91Y2hDYW5jZWw6di50b3VjaENhbmNlbCx0
b3BUb3VjaEVuZDp2LnRvdWNoRW5kLHRvcFRvdWNoTW92ZTp2LnRvdWNoTW92ZSx0b3BUb3VjaFN0
YXJ0OnYudG91Y2hTdGFydCx0b3BXaGVlbDp2LndoZWVsfSxnPXtldmVudFR5cGVzOnYsZXhlY3V0
ZURpc3BhdGNoOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10KGUsbik7cj09PSExJiYoZS5zdG9wUHJv
cGFnYXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCkpfSxleHRyYWN0RXZlbnRzOmZ1bmN0aW9uKGUs
dCxuLGgpe3ZhciB2PW1bZV07aWYoIXYpcmV0dXJuIG51bGw7dmFyIGc7c3dpdGNoKGUpe2Nhc2Ug
Zi50b3BJbnB1dDpjYXNlIGYudG9wU3VibWl0Omc9bzticmVhaztjYXNlIGYudG9wS2V5RG93bjpj
YXNlIGYudG9wS2V5UHJlc3M6Y2FzZSBmLnRvcEtleVVwOmc9YTticmVhaztjYXNlIGYudG9wQmx1
cjpjYXNlIGYudG9wRm9jdXM6Zz1pO2JyZWFrO2Nhc2UgZi50b3BDbGljazpjYXNlIGYudG9wRG91
YmxlQ2xpY2s6Y2FzZSBmLnRvcERyYWc6Y2FzZSBmLnRvcERyYWdFbmQ6Y2FzZSBmLnRvcERyYWdF
bnRlcjpjYXNlIGYudG9wRHJhZ0V4aXQ6Y2FzZSBmLnRvcERyYWdMZWF2ZTpjYXNlIGYudG9wRHJh
Z092ZXI6Y2FzZSBmLnRvcERyYWdTdGFydDpjYXNlIGYudG9wRHJvcDpjYXNlIGYudG9wTW91c2VE
b3duOmNhc2UgZi50b3BNb3VzZU1vdmU6Y2FzZSBmLnRvcE1vdXNlVXA6Zz1zO2JyZWFrO2Nhc2Ug
Zi50b3BET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWQ6Zz11O2JyZWFrO2Nhc2UgZi50b3BUb3VjaENh
bmNlbDpjYXNlIGYudG9wVG91Y2hFbmQ6Y2FzZSBmLnRvcFRvdWNoTW92ZTpjYXNlIGYudG9wVG91
Y2hTdGFydDpnPWw7YnJlYWs7Y2FzZSBmLnRvcFNjcm9sbDpnPWM7YnJlYWs7Y2FzZSBmLnRvcFdo
ZWVsOmc9cH1kKGcpO3ZhciB5PWcuZ2V0UG9vbGVkKHYsbixoKTtyZXR1cm4gci5hY2N1bXVsYXRl
VHdvUGhhc2VEaXNwYXRjaGVzKHkpLHl9fTt0LmV4cG9ydHM9Z30seyIuL0V2ZW50Q29uc3RhbnRz
IjoxMywiLi9FdmVudFByb3BhZ2F0b3JzIjoxOCwiLi9TeW50aGV0aWNFdmVudCI6NTAsIi4vU3lu
dGhldGljRm9jdXNFdmVudCI6NTEsIi4vU3ludGhldGljS2V5Ym9hcmRFdmVudCI6NTIsIi4vU3lu
dGhldGljTW91c2VFdmVudCI6NTMsIi4vU3ludGhldGljTXV0YXRpb25FdmVudCI6NTQsIi4vU3lu
dGhldGljVG91Y2hFdmVudCI6NTUsIi4vU3ludGhldGljVUlFdmVudCI6NTYsIi4vU3ludGhldGlj
V2hlZWxFdmVudCI6NTcsIi4vaW52YXJpYW50Ijo3NSwiLi9rZXlPZiI6Nzl9XSw1MDpbZnVuY3Rp
b24oZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQsbil7dGhpcy5kaXNwYXRjaENvbmZp
Zz1lLHRoaXMuZGlzcGF0Y2hNYXJrZXI9dCx0aGlzLm5hdGl2ZUV2ZW50PW47dmFyIHI9dGhpcy5j
b25zdHJ1Y3Rvci5JbnRlcmZhY2U7Zm9yKHZhciBpIGluIHIpe3ZhciBhPXJbaV07dGhpc1tpXT1h
P2Eobik6bltpXX10aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1uLmRlZmF1bHRQcmV2ZW50ZWR8fG4u
cmV0dXJuVmFsdWU9PT0hMT9vLnRoYXRSZXR1cm5zVHJ1ZTpvLnRoYXRSZXR1cm5zRmFsc2UsdGhp
cy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1vLnRoYXRSZXR1cm5zRmFsc2V9dmFyIHI9ZSgiLi9Qb29s
ZWRDbGFzcyIpLG89ZSgiLi9lbXB0eUZ1bmN0aW9uIiksaT1lKCIuL2dldEV2ZW50VGFyZ2V0Iiks
YT1lKCIuL21lcmdlIikscz1lKCIuL21lcmdlSW50byIpLHU9e3R5cGU6bnVsbCx0YXJnZXQ6aSxj
dXJyZW50VGFyZ2V0Om51bGwsZXZlbnRQaGFzZTpudWxsLGJ1YmJsZXM6bnVsbCxjYW5jZWxhYmxl
Om51bGwsdGltZVN0YW1wOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRpbWVTdGFtcHx8RGF0ZS5ub3co
KX0sZGVmYXVsdFByZXZlbnRlZDpudWxsLGlzVHJ1c3RlZDpudWxsfTtzKG4ucHJvdG90eXBlLHtw
cmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuZGVmYXVsdFByZXZlbnRlZD0hMDt2YXIgZT10
aGlzLm5hdGl2ZUV2ZW50O2UucHJldmVudERlZmF1bHQ/ZS5wcmV2ZW50RGVmYXVsdCgpOmUucmV0
dXJuVmFsdWU9ITEsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9by50aGF0UmV0dXJuc1RydWV9LHN0
b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMubmF0aXZlRXZlbnQ7ZS5zdG9wUHJv
cGFnYXRpb24/ZS5zdG9wUHJvcGFnYXRpb24oKTplLmNhbmNlbEJ1YmJsZT0hMCx0aGlzLmlzUHJv
cGFnYXRpb25TdG9wcGVkPW8udGhhdFJldHVybnNUcnVlfSxwZXJzaXN0OmZ1bmN0aW9uKCl7dGhp
cy5pc1BlcnNpc3RlbnQ9by50aGF0UmV0dXJuc1RydWV9LGlzUGVyc2lzdGVudDpvLnRoYXRSZXR1
cm5zRmFsc2UsZGVzdHJ1Y3RvcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY29uc3RydWN0b3IuSW50
ZXJmYWNlO2Zvcih2YXIgdCBpbiBlKXRoaXNbdF09bnVsbDt0aGlzLmRpc3BhdGNoQ29uZmlnPW51
bGwsdGhpcy5kaXNwYXRjaE1hcmtlcj1udWxsLHRoaXMubmF0aXZlRXZlbnQ9bnVsbH19KSxuLklu
dGVyZmFjZT11LG4uYXVnbWVudENsYXNzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxvPU9iamVj
dC5jcmVhdGUobi5wcm90b3R5cGUpO3MobyxlLnByb3RvdHlwZSksZS5wcm90b3R5cGU9byxlLnBy
b3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUuSW50ZXJmYWNlPWEobi5JbnRlcmZhY2UsdCksZS5hdWdt
ZW50Q2xhc3M9bi5hdWdtZW50Q2xhc3Msci5hZGRQb29saW5nVG8oZSxyLnRocmVlQXJndW1lbnRQ
b29sZXIpCit9LHIuYWRkUG9vbGluZ1RvKG4sci50aHJlZUFyZ3VtZW50UG9vbGVyKSx0LmV4cG9y
dHM9bn0seyIuL1Bvb2xlZENsYXNzIjoyMCwiLi9lbXB0eUZ1bmN0aW9uIjo2NCwiLi9nZXRFdmVu
dFRhcmdldCI6NzAsIi4vbWVyZ2UiOjgxLCIuL21lcmdlSW50byI6ODN9XSw1MTpbZnVuY3Rpb24o
ZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQsbil7ci5jYWxsKHRoaXMsZSx0LG4pfXZh
ciByPWUoIi4vU3ludGhldGljVUlFdmVudCIpLG89e3JlbGF0ZWRUYXJnZXQ6bnVsbH07ci5hdWdt
ZW50Q2xhc3MobixvKSx0LmV4cG9ydHM9bn0seyIuL1N5bnRoZXRpY1VJRXZlbnQiOjU2fV0sNTI6
W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSx0LG4pe3IuY2FsbCh0aGlz
LGUsdCxuKX12YXIgcj1lKCIuL1N5bnRoZXRpY1VJRXZlbnQiKSxvPXsiY2hhciI6bnVsbCxrZXk6
bnVsbCxsb2NhdGlvbjpudWxsLGN0cmxLZXk6bnVsbCxzaGlmdEtleTpudWxsLGFsdEtleTpudWxs
LG1ldGFLZXk6bnVsbCxyZXBlYXQ6bnVsbCxsb2NhbGU6bnVsbCxjaGFyQ29kZTpudWxsLGtleUNv
ZGU6bnVsbCx3aGljaDpudWxsfTtyLmF1Z21lbnRDbGFzcyhuLG8pLHQuZXhwb3J0cz1ufSx7Ii4v
U3ludGhldGljVUlFdmVudCI6NTZ9XSw1MzpbZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7ZnVu
Y3Rpb24gbihlLHQsbil7ci5jYWxsKHRoaXMsZSx0LG4pfXZhciByPWUoIi4vU3ludGhldGljVUlF
dmVudCIpLG89ZSgiLi9WaWV3cG9ydE1ldHJpY3MiKSxpPXtzY3JlZW5YOm51bGwsc2NyZWVuWTpu
dWxsLGNsaWVudFg6bnVsbCxjbGllbnRZOm51bGwsY3RybEtleTpudWxsLHNoaWZ0S2V5Om51bGws
YWx0S2V5Om51bGwsbWV0YUtleTpudWxsLGJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD1lLmJ1dHRv
bjtyZXR1cm4id2hpY2giaW4gZT90OjI9PT10PzI6ND09PXQ/MTowfSxidXR0b25zOm51bGwscmVs
YXRlZFRhcmdldDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZWxhdGVkVGFyZ2V0fHwoZS5mcm9tRWxl
bWVudD09PWUuc3JjRWxlbWVudD9lLnRvRWxlbWVudDplLmZyb21FbGVtZW50KX0scGFnZVg6ZnVu
Y3Rpb24oZSl7cmV0dXJuInBhZ2VYImluIGU/ZS5wYWdlWDplLmNsaWVudFgrby5jdXJyZW50U2Ny
b2xsTGVmdH0scGFnZVk6ZnVuY3Rpb24oZSl7cmV0dXJuInBhZ2VZImluIGU/ZS5wYWdlWTplLmNs
aWVudFkrby5jdXJyZW50U2Nyb2xsVG9wfX07ci5hdWdtZW50Q2xhc3MobixpKSx0LmV4cG9ydHM9
bn0seyIuL1N5bnRoZXRpY1VJRXZlbnQiOjU2LCIuL1ZpZXdwb3J0TWV0cmljcyI6NTl9XSw1NDpb
ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQsbil7ci5jYWxsKHRoaXMs
ZSx0LG4pfXZhciByPWUoIi4vU3ludGhldGljRXZlbnQiKSxvPXtyZWxhdGVkTm9kZTpudWxsLHBy
ZXZWYWx1ZTpudWxsLG5ld1ZhbHVlOm51bGwsYXR0ck5hbWU6bnVsbCxhdHRyQ2hhbmdlOm51bGx9
O3IuYXVnbWVudENsYXNzKG4sbyksdC5leHBvcnRzPW59LHsiLi9TeW50aGV0aWNFdmVudCI6NTB9
XSw1NTpbZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQsbil7ci5jYWxs
KHRoaXMsZSx0LG4pfXZhciByPWUoIi4vU3ludGhldGljVUlFdmVudCIpLG89e3RvdWNoZXM6bnVs
bCx0YXJnZXRUb3VjaGVzOm51bGwsY2hhbmdlZFRvdWNoZXM6bnVsbCxhbHRLZXk6bnVsbCxtZXRh
S2V5Om51bGwsY3RybEtleTpudWxsLHNoaWZ0S2V5Om51bGx9O3IuYXVnbWVudENsYXNzKG4sbyks
dC5leHBvcnRzPW59LHsiLi9TeW50aGV0aWNVSUV2ZW50Ijo1Nn1dLDU2OltmdW5jdGlvbihlLHQp
eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUsdCxuKXtyLmNhbGwodGhpcyxlLHQsbil9dmFyIHI9
ZSgiLi9TeW50aGV0aWNFdmVudCIpLG89e3ZpZXc6bnVsbCxkZXRhaWw6bnVsbH07ci5hdWdtZW50
Q2xhc3MobixvKSx0LmV4cG9ydHM9bn0seyIuL1N5bnRoZXRpY0V2ZW50Ijo1MH1dLDU3OltmdW5j
dGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUsdCxuKXtyLmNhbGwodGhpcyxlLHQs
bil9dmFyIHI9ZSgiLi9TeW50aGV0aWNNb3VzZUV2ZW50Iiksbz17ZGVsdGFYOmZ1bmN0aW9uKGUp
e3JldHVybiJkZWx0YVgiaW4gZT9lLmRlbHRhWDoid2hlZWxEZWx0YVgiaW4gZT8tZS53aGVlbERl
bHRhWDowfSxkZWx0YVk6ZnVuY3Rpb24oZSl7cmV0dXJuImRlbHRhWSJpbiBlPy1lLmRlbHRhWToi
d2hlZWxEZWx0YVkiaW4gZT9lLndoZWVsRGVsdGFZOiJ3aGVlbERlbHRhImluIGU/ZS53aGVlbERh
dGE6MH0sZGVsdGFaOm51bGwsZGVsdGFNb2RlOm51bGx9O3IuYXVnbWVudENsYXNzKG4sbyksdC5l
eHBvcnRzPW59LHsiLi9TeW50aGV0aWNNb3VzZUV2ZW50Ijo1M31dLDU4OltmdW5jdGlvbihlLHQp
eyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1lKCIuL3Rocm93SWYiKSxyPSJEVUFMX1RS
QU5TQUNUSU9OIixvPSJNSVNTSU5HX1RSQU5TQUNUSU9OIixpPXtyZWluaXRpYWxpemVUcmFuc2Fj
dGlvbjpmdW5jdGlvbigpe3RoaXMudHJhbnNhY3Rpb25XcmFwcGVycz10aGlzLmdldFRyYW5zYWN0
aW9uV3JhcHBlcnMoKSx0aGlzLndyYXBwZXJJbml0RGF0YT90aGlzLndyYXBwZXJJbml0RGF0YS5s
ZW5ndGg9MDp0aGlzLndyYXBwZXJJbml0RGF0YT1bXSx0aGlzLnRpbWluZ01ldHJpY3N8fCh0aGlz
LnRpbWluZ01ldHJpY3M9e30pLHRoaXMudGltaW5nTWV0cmljcy5tZXRob2RJbnZvY2F0aW9uVGlt
ZT0wLHRoaXMudGltaW5nTWV0cmljcy53cmFwcGVySW5pdFRpbWVzP3RoaXMudGltaW5nTWV0cmlj
cy53cmFwcGVySW5pdFRpbWVzLmxlbmd0aD0wOnRoaXMudGltaW5nTWV0cmljcy53cmFwcGVySW5p
dFRpbWVzPVtdLHRoaXMudGltaW5nTWV0cmljcy53cmFwcGVyQ2xvc2VUaW1lcz90aGlzLnRpbWlu
Z01ldHJpY3Mud3JhcHBlckNsb3NlVGltZXMubGVuZ3RoPTA6dGhpcy50aW1pbmdNZXRyaWNzLndy
YXBwZXJDbG9zZVRpbWVzPVtdLHRoaXMuX2lzSW5UcmFuc2FjdGlvbj0hMX0sX2lzSW5UcmFuc2Fj
dGlvbjohMSxnZXRUcmFuc2FjdGlvbldyYXBwZXJzOm51bGwsaXNJblRyYW5zYWN0aW9uOmZ1bmN0
aW9uKCl7cmV0dXJuISF0aGlzLl9pc0luVHJhbnNhY3Rpb259LHBlcmZvcm06ZnVuY3Rpb24oZSx0
LG8saSxhLHMsdSxsKXtuKHRoaXMuaXNJblRyYW5zYWN0aW9uKCkscik7dmFyIGMscD1EYXRlLm5v
dygpLGQ9bnVsbDt0cnl7dGhpcy5pbml0aWFsaXplQWxsKCksYz1lLmNhbGwodCxvLGksYSxzLHUs
bCl9Y2F0Y2goaCl7ZD1ofWZpbmFsbHl7dmFyIGY9RGF0ZS5ub3coKTt0aGlzLm1ldGhvZEludm9j
YXRpb25UaW1lKz1mLXA7dHJ5e3RoaXMuY2xvc2VBbGwoKX1jYXRjaCh2KXtkPWR8fHZ9fWlmKGQp
dGhyb3cgZDtyZXR1cm4gY30saW5pdGlhbGl6ZUFsbDpmdW5jdGlvbigpe3RoaXMuX2lzSW5UcmFu
c2FjdGlvbj0hMDtmb3IodmFyIGU9dGhpcy50cmFuc2FjdGlvbldyYXBwZXJzLHQ9dGhpcy50aW1p
bmdNZXRyaWNzLndyYXBwZXJJbml0VGltZXMsbj1udWxsLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFy
IG89RGF0ZS5ub3coKSxpPWVbcl07dHJ5e3RoaXMud3JhcHBlckluaXREYXRhW3JdPWkuaW5pdGlh
bGl6ZT9pLmluaXRpYWxpemUuY2FsbCh0aGlzKTpudWxsfWNhdGNoKHMpe249bnx8cyx0aGlzLndy
YXBwZXJJbml0RGF0YVtyXT1hLk9CU0VSVkVEX0VSUk9SfWZpbmFsbHl7dmFyIHU9dFtyXSxsPURh
dGUubm93KCk7dFtyXT0odXx8MCkrKGwtbyl9fWlmKG4pdGhyb3cgbn0sY2xvc2VBbGw6ZnVuY3Rp
b24oKXtuKCF0aGlzLmlzSW5UcmFuc2FjdGlvbigpLG8pO2Zvcih2YXIgZT10aGlzLnRyYW5zYWN0
aW9uV3JhcHBlcnMsdD10aGlzLnRpbWluZ01ldHJpY3Mud3JhcHBlckNsb3NlVGltZXMscj1udWxs
LGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIHM9ZVtpXSx1PURhdGUubm93KCksbD10aGlzLndyYXBw
ZXJJbml0RGF0YVtpXTt0cnl7bCE9PWEuT0JTRVJWRURfRVJST1ImJnMuY2xvc2UmJnMuY2xvc2Uu
Y2FsbCh0aGlzLGwpfWNhdGNoKGMpe3I9cnx8Y31maW5hbGx5e3ZhciBwPURhdGUubm93KCksZD10
W2ldO3RbaV09KGR8fDApKyhwLXUpfX1pZih0aGlzLndyYXBwZXJJbml0RGF0YS5sZW5ndGg9MCx0
aGlzLl9pc0luVHJhbnNhY3Rpb249ITEscil0aHJvdyByfX0sYT17TWl4aW46aSxPQlNFUlZFRF9F
UlJPUjp7fX07dC5leHBvcnRzPWF9KCl9LHsiLi90aHJvd0lmIjo4Nn1dLDU5OltmdW5jdGlvbihl
LHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17Y3VycmVudFNjcm9sbExlZnQ6MCxjdXJyZW50U2Nyb2xs
VG9wOjAscmVmcmVzaFNjcm9sbFZhbHVlczpmdW5jdGlvbigpe24uY3VycmVudFNjcm9sbExlZnQ9
ZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0K2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxM
ZWZ0LG4uY3VycmVudFNjcm9sbFRvcD1kb2N1bWVudC5ib2R5LnNjcm9sbFRvcCtkb2N1bWVudC5k
b2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wfX07dC5leHBvcnRzPW59LHt9XSw2MDpbZnVuY3Rpb24o
ZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQpe3ZhciBuPW51bGw9PWUscj1udWxsPT09
dDtpZihyKXJldHVybiBlO2lmKG4pcmV0dXJuIHQ7dmFyIG89QXJyYXkuaXNBcnJheShlKSxpPUFy
cmF5LmlzQXJyYXkodCk7cmV0dXJuIG8/ZS5jb25jYXQodCk6aT9bZV0uY29uY2F0KHQpOltlLHRd
fWUoIi4vdGhyb3dJZiIpLHQuZXhwb3J0cz1ufSx7Ii4vdGhyb3dJZiI6ODZ9XSw2MTpbZnVuY3Rp
b24oZSx0KXtmdW5jdGlvbiBuKGUsdCxuLHIsbyxpKXtlPWV8fHt9O2Zvcih2YXIgYSxzPVt0LG4s
cixvLGldLHU9MDtzW3VdOyl7YT1zW3UrK107Zm9yKHZhciBsIGluIGEpZVtsXT1hW2xdO2EuaGFz
T3duUHJvcGVydHkmJmEuaGFzT3duUHJvcGVydHkoInRvU3RyaW5nIikmJiJ1bmRlZmluZWQiIT10
eXBlb2YgYS50b1N0cmluZyYmZS50b1N0cmluZyE9PWEudG9TdHJpbmcmJihlLnRvU3RyaW5nPWEu
dG9TdHJpbmcpfXJldHVybiBlfXQuZXhwb3J0cz1ufSx7fV0sNjI6W2Z1bmN0aW9uKGUsdCl7ZnVu
Y3Rpb24gbihlLHQpe3ZhciBuPXt9LG89cih0KTsidW5kZWZpbmVkIj09dHlwZW9mIHQmJih0PSEw
KTtmb3IodmFyIGk9ZS5sZW5ndGg7aS0tOyluW2VbaV1dPW8/dFtpXTp0O3JldHVybiBufXZhciBy
PWUoIi4vaGFzQXJyYXlOYXR1cmUiKTt0LmV4cG9ydHM9bn0seyIuL2hhc0FycmF5TmF0dXJlIjo3
Mn1dLDYzOltmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUsdCl7dmFyIG49
bnVsbD09dHx8ImJvb2xlYW4iPT10eXBlb2YgdHx8IiI9PT10O2lmKG4pcmV0dXJuIiI7dmFyIG89
aXNOYU4odCk7cmV0dXJuIG98fDA9PT10fHxyLmlzVW5pdGxlc3NOdW1iZXJbZV0/IiIrdDp0KyJw
eCJ9dmFyIHI9ZSgiLi9DU1NQcm9wZXJ0eSIpO3QuZXhwb3J0cz1ufSx7Ii4vQ1NTUHJvcGVydHki
OjJ9XSw2NDpbZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiBmdW5jdGlvbigpe3Jl
dHVybiBlfX1mdW5jdGlvbiByKCl7fXZhciBvPWUoIi4vY29weVByb3BlcnRpZXMiKTtvKHIse3Ro
YXRSZXR1cm5zOm4sdGhhdFJldHVybnNGYWxzZTpuKCExKSx0aGF0UmV0dXJuc1RydWU6bighMCks
dGhhdFJldHVybnNOdWxsOm4obnVsbCksdGhhdFJldHVybnNUaGlzOmZ1bmN0aW9uKCl7cmV0dXJu
IHRoaXN9LHRoYXRSZXR1cm5zQXJndW1lbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSksdC5leHBv
cnRzPXJ9LHsiLi9jb3B5UHJvcGVydGllcyI6NjF9XSw2NTpbZnVuY3Rpb24oZSx0KXsidXNlIHN0
cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gcltlXX1lKCIuL3Rocm93SWYiKTt2YXIgcj17IiYi
OiImYW1wOyIsIj4iOiImZ3Q7IiwiPCI6IiZsdDsiLCciJzoiJnF1b3Q7IiwiJyI6IiYjeDI3OyIs
Ii8iOiImI3gyZjsifSxvPWZ1bmN0aW9uKGUpe3ZhciB0PXR5cGVvZiBlLHI9Im9iamVjdCI9PT10
O3JldHVybiIiPT09ZXx8cj8iIjoic3RyaW5nIj09PXQ/ZS5yZXBsYWNlKC9bJj48IidcL10vZyxu
KTooIiIrZSkucmVwbGFjZSgvWyY+PCInXC9dL2csbil9O3QuZXhwb3J0cz1vfSx7Ii4vdGhyb3dJ
ZiI6ODZ9XSw2NjpbZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbihlKXt2YXIgdD1BcnJheS5w
cm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gU3Ry
aW5nKGUpfSkscj1lLnNwbGl0KCIlcyIpLmxlbmd0aC0xO3JldHVybiByIT09dC5sZW5ndGgtMT9u
KCJleCBhcmdzIG51bWJlciBtaXNtYXRjaDogJXMiLEpTT04uc3RyaW5naWZ5KHQpKTpuLl9wcmVm
aXgrSlNPTi5zdHJpbmdpZnkodCkrbi5fc3VmZml4fTtuLl9wcmVmaXg9IjwhW0VYWyIsbi5fc3Vm
Zml4PSJdXT4iLHQuZXhwb3J0cz1ufSx7fV0sNjc6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3Qi
O2Z1bmN0aW9uIG4oZSx0LG4pe3ZhciByPWU7cltuXT10fWZ1bmN0aW9uIHIoZSl7aWYobnVsbD09
PWV8fHZvaWQgMD09PWUpcmV0dXJuIGU7dmFyIHQ9e307cmV0dXJuIG8oZSxuLHQpLHR9ZSgiLi90
aHJvd0lmIik7dmFyIG89ZSgiLi90cmF2ZXJzZUFsbENoaWxkcmVuIik7dC5leHBvcnRzPXJ9LHsi
Li90aHJvd0lmIjo4NiwiLi90cmF2ZXJzZUFsbENoaWxkcmVuIjo4N31dLDY4OltmdW5jdGlvbihl
LHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbihlLHQsbil7QXJyYXkuaXNBcnJheShlKT9l
LmZvckVhY2godCxuKTplJiZ0LmNhbGwobixlKX07dC5leHBvcnRzPW59LHt9XSw2OTpbZnVuY3Rp
b24oZSx0KXtmdW5jdGlvbiBuKGUsdCxuKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGU/ZTp0P3Io
ZSx0LG4pOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpfWZ1bmN0aW9uIHIoZSx0LG4pe3ZhciBp
LGEscztpZihvKHQpPT1lKXJldHVybiB0O2lmKHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUpe2Zvcihh
PXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUobnx8IioiKSxzPTA7czxhLmxlbmd0aDtzKyspaWYobyhh
W3NdKT09ZSlyZXR1cm4gYVtzXX1lbHNlIGZvcihhPXQuY2hpbGROb2RlcyxzPTA7czxhLmxlbmd0
aDtzKyspaWYoaT1yKGUsYVtzXSkpcmV0dXJuIGk7cmV0dXJuIG51bGx9ZnVuY3Rpb24gbyhlKXt2
YXIgdD1lLmdldEF0dHJpYnV0ZU5vZGUmJmUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4g
dD90LnZhbHVlOm51bGx9dC5leHBvcnRzPW59LHt9XSw3MDpbZnVuY3Rpb24oZSx0KXshZnVuY3Rp
b24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXt2YXIgdD1lLnRhcmdldHx8ZS5zcmNFbGVt
ZW50fHxyLmdsb2JhbDtyZXR1cm4gMz09PXQubm9kZVR5cGU/dC5wYXJlbnROb2RlOnR9dmFyIHI9
ZSgiLi9FeGVjdXRpb25FbnZpcm9ubWVudCIpO3QuZXhwb3J0cz1ufSgpfSx7Ii4vRXhlY3V0aW9u
RW52aXJvbm1lbnQiOjE5fV0sNzE6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9u
IG4oKXtyZXR1cm4hbyYmci5jYW5Vc2VET00mJihvPSJpbm5lclRleHQiaW4gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik/ImlubmVyVGV4dCI6InRleHRDb250ZW50Iiksb312YXIgcj1lKCIu
L0V4ZWN1dGlvbkVudmlyb25tZW50Iiksbz1udWxsO3QuZXhwb3J0cz1ufSx7Ii4vRXhlY3V0aW9u
RW52aXJvbm1lbnQiOjE5fV0sNzI6W2Z1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXtyZXR1cm4h
IWUmJigib2JqZWN0Ij09dHlwZW9mIGV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSYmImxlbmd0aCJp
biBlJiYhKCJzZXRJbnRlcnZhbCJpbiBlKSYmIm51bWJlciIhPXR5cGVvZiBlLm5vZGVUeXBlJiYo
QXJyYXkuaXNBcnJheShlKXx8ImNhbGxlZSJpbiBlfHwiaXRlbSJpbiBlKX10LmV4cG9ydHM9bn0s
e31dLDczOltmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIGUucmVwbGFjZShyLCIt
JDEiKS50b0xvd2VyQ2FzZSgpfXZhciByPS8oW0EtWl0pL2c7dC5leHBvcnRzPW59LHt9XSw3NDpb
ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQsbil7dmFyIHI9ZS5jaGls
ZE5vZGVzLG89ZS5jaGlsZE5vZGVzW25dO3JldHVybiBvPT09dD90Oih0LnBhcmVudE5vZGUmJnQu
cGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSxuPj1yLmxlbmd0aD9lLmFwcGVuZENoaWxkKHQpOmUu
aW5zZXJ0QmVmb3JlKHQscltuXSksdCl9dC5leHBvcnRzPW59LHt9XSw3NTpbZnVuY3Rpb24oZSx0
KXtmdW5jdGlvbiBuKGUpe2lmKCFlKXRocm93IG5ldyBFcnJvcigiSW52YXJpYW50IFZpb2xhdGlv
biIpfXQuZXhwb3J0cz1ufSx7fV0sNzY6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0
aW9uIG4oZSx0KXtpZighcnx8dCYmIXIuYWRkRXZlbnRMaXN0ZW5lcilyZXR1cm4hMTt2YXIgbj1k
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxpPSJvbiIrZSxhPWkgaW4gbjtyZXR1cm4gYXx8
KG4uc2V0QXR0cmlidXRlKGksIiIpLGE9ImZ1bmN0aW9uIj09dHlwZW9mIG5baV0sInVuZGVmaW5l
ZCIhPXR5cGVvZiBuW2ldJiYobltpXT12b2lkIDApLG4ucmVtb3ZlQXR0cmlidXRlKGkpKSwhYSYm
byYmIndoZWVsIj09PWUmJihhPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoIkV2
ZW50cy53aGVlbCIsIjMuMCIpKSxuPW51bGwsYX12YXIgcixvLGk9ZSgiLi9FeGVjdXRpb25FbnZp
cm9ubWVudCIpO2kuY2FuVXNlRE9NJiYocj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxv
PWRvY3VtZW50LmltcGxlbWVudGF0aW9uJiZkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0
dXJlJiZkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlKCIiLCIiKSE9PSEwKSx0LmV4
cG9ydHM9bn0seyIuL0V4ZWN1dGlvbkVudmlyb25tZW50IjoxOX1dLDc3OltmdW5jdGlvbihlLHQp
eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe2V8fChlPSIiKTt2YXIgdCxuPWFyZ3VtZW50cy5s
ZW5ndGg7aWYobj4xKWZvcih2YXIgcj0xO24+cjtyKyspdD1hcmd1bWVudHNbcl0sdCYmKGUrPSIg
Iit0KTtyZXR1cm4gZX10LmV4cG9ydHM9bn0se31dLDc4OltmdW5jdGlvbihlLHQpeyJ1c2Ugc3Ry
aWN0Ijt2YXIgbj1lKCIuL3Rocm93SWYiKSxyPSJOT1RfT0JKRUNUX0VSUk9SIixvPWZ1bmN0aW9u
KGUpe3ZhciB0LG89e307bighKGUgaW5zdGFuY2VvZiBPYmplY3QpfHxBcnJheS5pc0FycmF5KGUp
LHIpO2Zvcih0IGluIGUpZS5oYXNPd25Qcm9wZXJ0eSh0KSYmKG9bdF09dCk7cmV0dXJuIG99O3Qu
ZXhwb3J0cz1vfSx7Ii4vdGhyb3dJZiI6ODZ9XSw3OTpbZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5j
dGlvbihlKXt2YXIgdDtmb3IodCBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIHQ7
cmV0dXJuIG51bGx9O3QuZXhwb3J0cz1ufSx7fV0sODA6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJp
Y3QiO2Z1bmN0aW9uIG4oZSl7dmFyIHQ9e307cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0Lmhh
c093blByb3BlcnR5KG4pP3Rbbl06dFtuXT1lLmNhbGwodGhpcyxuKX19dC5leHBvcnRzPW59LHt9
XSw4MTpbZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dmFyIG49ZSgiLi9tZXJnZUludG8iKSxy
PWZ1bmN0aW9uKGUsdCl7dmFyIHI9e307cmV0dXJuIG4ocixlKSxuKHIsdCkscn07dC5leHBvcnRz
PXJ9LHsiLi9tZXJnZUludG8iOjgzfV0sODI6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3Zh
ciBuPWUoIi4va2V5TWlycm9yIikscj1lKCIuL3Rocm93SWYiKSxvPTM2LGk9bih7TUVSR0VfQVJS
QVlfRkFJTDpudWxsLE1FUkdFX0NPUkVfRkFJTFVSRTpudWxsLE1FUkdFX1RZUEVfVVNBR0VfRkFJ
TFVSRTpudWxsLE1FUkdFX0RFRVBfTUFYX0xFVkVMUzpudWxsLE1FUkdFX0RFRVBfTk9fQVJSX1NU
UkFURUdZOm51bGx9KSxhPWZ1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiIT10eXBlb2YgZXx8bnVs
bD09PWV9LHM9e01BWF9NRVJHRV9ERVBUSDpvLGlzVGVybWluYWw6YSxub3JtYWxpemVNZXJnZUFy
ZzpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZXx8bnVsbD09PWU/e306ZX0sY2hlY2tNZXJn
ZUFycmF5QXJnczpmdW5jdGlvbihlLHQpe3IoIUFycmF5LmlzQXJyYXkoZSl8fCFBcnJheS5pc0Fy
cmF5KHQpLGkuTUVSR0VfQ09SRV9GQUlMVVJFKX0sY2hlY2tNZXJnZU9iamVjdEFyZ3M6ZnVuY3Rp
b24oZSx0KXtzLmNoZWNrTWVyZ2VPYmplY3RBcmcoZSkscy5jaGVja01lcmdlT2JqZWN0QXJnKHQp
fSxjaGVja01lcmdlT2JqZWN0QXJnOmZ1bmN0aW9uKGUpe3IoYShlKXx8QXJyYXkuaXNBcnJheShl
KSxpLk1FUkdFX0NPUkVfRkFJTFVSRSl9LGNoZWNrTWVyZ2VMZXZlbDpmdW5jdGlvbihlKXtyKGU+
PW8saS5NRVJHRV9ERUVQX01BWF9MRVZFTFMpfSxjaGVja0FycmF5U3RyYXRlZ3k6ZnVuY3Rpb24o
ZSl7cih2b2lkIDAhPT1lJiYhKGUgaW4gcy5BcnJheVN0cmF0ZWdpZXMpLGkuTUVSR0VfREVFUF9O
T19BUlJfU1RSQVRFR1kpfSxBcnJheVN0cmF0ZWdpZXM6bih7Q2xvYmJlcjohMCxJbmRleEJ5SW5k
ZXg6ITB9KSxFUlJPUlM6aX07dC5leHBvcnRzPXN9LHsiLi9rZXlNaXJyb3IiOjc4LCIuL3Rocm93
SWYiOjg2fV0sODM6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSx0KXtp
ZihvKGUpLG51bGwhPXQpe28odCk7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYm
KGVbbl09dFtuXSl9fXZhciByPWUoIi4vbWVyZ2VIZWxwZXJzIiksbz1yLmNoZWNrTWVyZ2VPYmpl
Y3RBcmc7dC5leHBvcnRzPW59LHsiLi9tZXJnZUhlbHBlcnMiOjgyfV0sODQ6W2Z1bmN0aW9uKGUs
dCl7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKGUsdCl7dmFyIG47Zm9yKG4gaW4gdCl0Lmhh
c093blByb3BlcnR5KG4pJiYoZS5wcm90b3R5cGVbbl09dFtuXSl9O3QuZXhwb3J0cz1ufSx7fV0s
ODU6W2Z1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSx0LG4pe2lmKCFlKXJl
dHVybiBudWxsO3ZhciByPTAsbz17fTtmb3IodmFyIGkgaW4gZSllLmhhc093blByb3BlcnR5KGkp
JiYob1tpXT10LmNhbGwobixpLGVbaV0scisrKSk7cmV0dXJuIG99dC5leHBvcnRzPW59LHt9XSw4
NjpbZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oZSx0KXtpZihlKXRo
cm93IG5ldyBFcnJvcih0KX07dC5leHBvcnRzPW59LHt9XSw4NzpbZnVuY3Rpb24oZSx0KXshZnVu
Y3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQsbil7bnVsbCE9PWUmJnZvaWQgMCE9
PWUmJnUoZSwiIiwwLHQsbil9dmFyIHI9ZSgiLi9SZWFjdENvbXBvbmVudCIpLG89ZSgiLi9SZWFj
dFRleHRDb21wb25lbnQiKSxpPWUoIi4vdGhyb3dJZiIpLGE9IkRVUExJQ0FURV9LRVlfRVJST1Ii
LHM9IklOVkFMSURfQ0hJTEQiLHU9ZnVuY3Rpb24oZSx0LG4sYSxsKXt2YXIgYz0wO2lmKEFycmF5
LmlzQXJyYXkoZSkpZm9yKHZhciBwPTA7cDxlLmxlbmd0aDtwKyspe3ZhciBkPWVbcF0saD10KyJb
IityLmdldEtleShkLHApKyJdIixmPW4rYztjKz11KGQsaCxmLGEsbCl9ZWxzZXt2YXIgdj10eXBl
b2YgZSxtPSIiPT09dCxnPW0/IlsiK3IuZ2V0S2V5KGUsMCkrIl0iOnQ7aWYobnVsbD09PWV8fHZv
aWQgMD09PWV8fCJib29sZWFuIj09PXYpYShsLG51bGwsZyxuKSxjPTE7ZWxzZSBpZihlLm1vdW50
Q29tcG9uZW50SW50b05vZGUpYShsLGUsZyxuKSxjPTE7ZWxzZSBpZigib2JqZWN0Ij09PXYpe2ko
ZSYmMT09PWUubm9kZVR5cGUscyk7Zm9yKHZhciB5IGluIGUpZS5oYXNPd25Qcm9wZXJ0eSh5KSYm
KGMrPXUoZVt5XSx0KyJ7Iit5KyJ9IixuK2MsYSxsKSl9ZWxzZSBpZigic3RyaW5nIj09PXYpe3Zh
ciBDPW5ldyBvKGUpO2EobCxDLGcsbiksYys9MX1lbHNlIGlmKCJudW1iZXIiPT09dil7dmFyIEU9
bmV3IG8oIiIrZSk7YShsLEUsZyxuKSxjKz0xfX1yZXR1cm4gY307bi5EVVBMSUNBVEVfS0VZX0VS
Uk9SPWEsdC5leHBvcnRzPW59KCl9LHsiLi9SZWFjdENvbXBvbmVudCI6MjIsIi4vUmVhY3RUZXh0
Q29tcG9uZW50Ijo0NywiLi90aHJvd0lmIjo4Nn1dfSx7fSxbMjFdKSgyMSl9KTsKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNo
L3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93ZXJfY29tcG9uZW50
cy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3Rz
L0RvWW91RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qv
Ym93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcwkocmV2aXNpb24gMCkKKysr
IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9sYWJzL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9yZWFjdC9ib3dlcl9jb21wb25lbnRzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3Nz
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU1NSBAQAoraHRtbCwKK2JvZHkgeworICAgIG1hcmdp
bjogMDsKKyAgICBwYWRkaW5nOiAwOworfQorCitidXR0b24geworICAgIG1hcmdpbjogMDsKKyAg
ICBwYWRkaW5nOiAwOworICAgIGJvcmRlcjogMDsKKyAgICBiYWNrZ3JvdW5kOiBub25lOworICAg
IGZvbnQtc2l6ZTogMTAwJTsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgZm9u
dC1mYW1pbHk6IGluaGVyaXQ7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgLXdlYmtpdC1hcHBl
YXJhbmNlOiBub25lOworICAgIC8qLW1vei1hcHBlYXJhbmNlOiBub25lOyovCisgICAgLW1zLWFw
cGVhcmFuY2U6IG5vbmU7CisgICAgLW8tYXBwZWFyYW5jZTogbm9uZTsKKyAgICBhcHBlYXJhbmNl
OiBub25lOworfQorCitib2R5IHsKKyAgICBmb250OiAxNHB4ICdIZWx2ZXRpY2EgTmV1ZScsIEhl
bHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CisgICAgbGluZS1oZWlnaHQ6IDEuNGVtOworICAg
IGJhY2tncm91bmQ6ICNlYWVhZWEgdXJsKCdiZy5wbmcnKTsKKyAgICBjb2xvcjogIzRkNGQ0ZDsK
KyAgICB3aWR0aDogNTUwcHg7CisgICAgbWFyZ2luOiAwIGF1dG87CisgICAgLXdlYmtpdC1mb250
LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW1vei1mb250LXNtb290aGluZzogYW50aWFs
aWFzZWQ7CisgICAgLW1zLWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICAtby1mb250
LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2Vk
OworfQorCisjdG9kb2FwcCB7CisgICAgYmFja2dyb3VuZDogI2ZmZjsKKyAgICBiYWNrZ3JvdW5k
OiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CisgICAgbWFyZ2luOiAxMzBweCAwIDQwcHggMDsK
KyAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAg
ICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAycHg7CisgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRp
dXM6IDJweDsKKyAgICBib3gtc2hhZG93OiAwIDJweCA2cHggMCByZ2JhKDAsIDAsIDAsIDAuMiks
CisgICAgICAgICAgICAgICAgMCAyNXB4IDUwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTUpOworfQor
CisjdG9kb2FwcDpiZWZvcmUgeworICAgIGNvbnRlbnQ6ICcnOworICAgIGJvcmRlci1sZWZ0OiAx
cHggc29saWQgI2Y1ZDZkNjsKKyAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZjVkNmQ2Owor
ICAgIHdpZHRoOiAycHg7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogMDsKKyAg
ICBsZWZ0OiA0MHB4OworICAgIGhlaWdodDogMTAwJTsKK30KKworI3RvZG9hcHAgaW5wdXQ6Oi13
ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgeworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKwor
I3RvZG9hcHAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIgeworICAgIGZvbnQtc3R5bGU6IGl0YWxp
YzsKKyAgICBjb2xvcjogI2E5YTlhOTsKK30KKworI3RvZG9hcHAgaDEgeworICAgIHBvc2l0aW9u
OiBhYnNvbHV0ZTsKKyAgICB0b3A6IC0xMjBweDsKKyAgICB3aWR0aDogMTAwJTsKKyAgICBmb250
LXNpemU6IDcwcHg7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgdGV4dC1hbGlnbjogY2Vu
dGVyOworICAgIGNvbG9yOiAjYjNiM2IzOworICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUs
IDAuMyk7CisgICAgdGV4dC1zaGFkb3c6IC0xcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMik7Cisg
ICAgLXdlYmtpdC10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OworICAgIC1tb3ot
dGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKKyAgICAtbXMtdGV4dC1yZW5kZXJp
bmc6IG9wdGltaXplTGVnaWJpbGl0eTsKKyAgICAtby10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVM
ZWdpYmlsaXR5OworICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7Cit9CisK
KyNoZWFkZXIgeworICAgIHBhZGRpbmctdG9wOiAxNXB4OworICAgIGJvcmRlci1yYWRpdXM6IGlu
aGVyaXQ7Cit9CisKKyNoZWFkZXI6YmVmb3JlIHsKKyAgICBjb250ZW50OiAnJzsKKyAgICBwb3Np
dGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAwOworICAgIHJpZ2h0OiAwOworICAgIGxlZnQ6IDA7
CisgICAgaGVpZ2h0OiAxNXB4OworICAgIHotaW5kZXg6IDI7CisgICAgYm9yZGVyLWJvdHRvbTog
MXB4IHNvbGlkICM2YzYxNWM7CisgICAgYmFja2dyb3VuZDogIzhkN2Q3NzsKKyAgICBiYWNrZ3Jv
dW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9t
KHJnYmEoMTMyLCAxMTAsIDEwMCwgMC44KSksdG8ocmdiYSgxMDEsIDg0LCA3NiwgMC44KSkpOwor
ICAgIGJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgcmdiYSgxMzIsIDEx
MCwgMTAwLCAwLjgpLCByZ2JhKDEwMSwgODQsIDc2LCAwLjgpKTsKKyAgICBiYWNrZ3JvdW5kOiAt
bW96LWxpbmVhci1ncmFkaWVudCh0b3AsIHJnYmEoMTMyLCAxMTAsIDEwMCwgMC44KSwgcmdiYSgx
MDEsIDg0LCA3NiwgMC44KSk7CisgICAgYmFja2dyb3VuZDogLW8tbGluZWFyLWdyYWRpZW50KHRv
cCwgcmdiYSgxMzIsIDExMCwgMTAwLCAwLjgpLCByZ2JhKDEwMSwgODQsIDc2LCAwLjgpKTsKKyAg
ICBiYWNrZ3JvdW5kOiAtbXMtbGluZWFyLWdyYWRpZW50KHRvcCwgcmdiYSgxMzIsIDExMCwgMTAw
LCAwLjgpLCByZ2JhKDEwMSwgODQsIDc2LCAwLjgpKTsKKyAgICBiYWNrZ3JvdW5kOiBsaW5lYXIt
Z3JhZGllbnQodG9wLCByZ2JhKDEzMiwgMTEwLCAxMDAsIDAuOCksIHJnYmEoMTAxLCA4NCwgNzYs
IDAuOCkpOworICAgIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0Lmdy
YWRpZW50KEdyYWRpZW50VHlwZT0wLFN0YXJ0Q29sb3JTdHI9JyM5ZDhiODMnLCBFbmRDb2xvclN0
cj0nIzg0NzY3MCcpOworICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDFweDsKKyAgICBib3Jk
ZXItdG9wLXJpZ2h0LXJhZGl1czogMXB4OworfQorCisjbmV3LXRvZG8sCisuZWRpdCB7CisgICAg
cG9zaXRpb246IHJlbGF0aXZlOworICAgIG1hcmdpbjogMDsKKyAgICB3aWR0aDogMTAwJTsKKyAg
ICBmb250LXNpemU6IDI0cHg7CisgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CisgICAgbGluZS1o
ZWlnaHQ6IDEuNGVtOworICAgIGJvcmRlcjogMDsKKyAgICBvdXRsaW5lOiBub25lOworICAgIGNv
bG9yOiBpbmhlcml0OworICAgIHBhZGRpbmc6IDZweDsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAj
OTk5OworICAgIGJveC1zaGFkb3c6IGluc2V0IDAgLTFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAu
Mik7CisgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIC1tb3otYm94LXNp
emluZzogYm9yZGVyLWJveDsKKyAgICAtbXMtYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAt
by1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cisg
ICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW1vei1mb250LXNt
b290aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW1zLWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNl
ZDsKKyAgICAtby1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgZm9udC1zbW9vdGhp
bmc6IGFudGlhbGlhc2VkOworfQorCisjbmV3LXRvZG8geworICAgIHBhZGRpbmc6IDE2cHggMTZw
eCAxNnB4IDYwcHg7CisgICAgYm9yZGVyOiBub25lOworICAgIGJhY2tncm91bmQ6IHJnYmEoMCwg
MCwgMCwgMC4wMik7CisgICAgei1pbmRleDogMjsKKyAgICBib3gtc2hhZG93OiBub25lOworfQor
CisjbWFpbiB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIHotaW5kZXg6IDI7CisgICAg
Ym9yZGVyLXRvcDogMXB4IGRvdHRlZCAjYWRhZGFkOworfQorCitsYWJlbFtmb3I9J3RvZ2dsZS1h
bGwnXSB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworI3RvZ2dsZS1hbGwgeworICAgIHBvc2l0
aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC00MnB4OworICAgIGxlZnQ6IC00cHg7CisgICAgd2lk
dGg6IDQwcHg7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIGJvcmRlcjogbm9uZTsgLyog
TW9iaWxlIFNhZmFyaSAqLworfQorCisjdG9nZ2xlLWFsbDpiZWZvcmUgeworICAgIGNvbnRlbnQ6
ICfCuyc7CisgICAgZm9udC1zaXplOiAyOHB4OworICAgIGNvbG9yOiAjZDlkOWQ5OworICAgIHBh
ZGRpbmc6IDAgMjVweCA3cHg7Cit9CisKKyN0b2dnbGUtYWxsOmNoZWNrZWQ6YmVmb3JlIHsKKyAg
ICBjb2xvcjogIzczNzM3MzsKK30KKworI3RvZG8tbGlzdCB7CisgICAgbWFyZ2luOiAwOworICAg
IHBhZGRpbmc6IDA7CisgICAgbGlzdC1zdHlsZTogbm9uZTsKK30KKworI3RvZG8tbGlzdCBsaSB7
CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIGZvbnQtc2l6ZTogMjRweDsKKyAgICBib3Jk
ZXItYm90dG9tOiAxcHggZG90dGVkICNjY2M7Cit9CisKKyN0b2RvLWxpc3QgbGk6bGFzdC1jaGls
ZCB7CisgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKK30KKworI3RvZG8tbGlzdCBsaS5lZGl0aW5n
IHsKKyAgICBib3JkZXItYm90dG9tOiBub25lOworICAgIHBhZGRpbmc6IDA7Cit9CisKKyN0b2Rv
LWxpc3QgbGkuZWRpdGluZyAuZWRpdCB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgd2lkdGg6
IDUwNnB4OworICAgIHBhZGRpbmc6IDEzcHggMTdweCAxMnB4IDE3cHg7CisgICAgbWFyZ2luOiAw
IDAgMCA0M3B4OworfQorCisjdG9kby1saXN0IGxpLmVkaXRpbmcgLnZpZXcgeworICAgIGRpc3Bs
YXk6IG5vbmU7Cit9CisKKyN0b2RvLWxpc3QgbGkgLnRvZ2dsZSB7CisgICAgdGV4dC1hbGlnbjog
Y2VudGVyOworICAgIHdpZHRoOiA0MHB4OworICAgIC8qIGF1dG8sIHNpbmNlIG5vbi1XZWJLaXQg
YnJvd3NlcnMgZG9lc24ndCBzdXBwb3J0IGlucHV0IHN0eWxpbmcgKi8KKyAgICBoZWlnaHQ6IGF1
dG87CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogMDsKKyAgICBib3R0b206IDA7
CisgICAgbWFyZ2luOiBhdXRvIDA7CisgICAgYm9yZGVyOiBub25lOyAvKiBNb2JpbGUgU2FmYXJp
ICovCisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAgIC8qLW1vei1hcHBlYXJhbmNl
OiBub25lOyovCisgICAgLW1zLWFwcGVhcmFuY2U6IG5vbmU7CisgICAgLW8tYXBwZWFyYW5jZTog
bm9uZTsKKyAgICBhcHBlYXJhbmNlOiBub25lOworfQorCisjdG9kby1saXN0IGxpIC50b2dnbGU6
YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICfinJQnOworICAgIGxpbmUtaGVpZ2h0OiA0M3B4OyAvKiA0
MCArIGEgY291cGxlIG9mIHBpeGVscyB2aXN1YWwgYWRqdXN0bWVudCAqLworICAgIGZvbnQtc2l6
ZTogMjBweDsKKyAgICBjb2xvcjogI2Q5ZDlkOTsKKyAgICB0ZXh0LXNoYWRvdzogMCAtMXB4IDAg
I2JmYmZiZjsKK30KKworI3RvZG8tbGlzdCBsaSAudG9nZ2xlOmNoZWNrZWQ6YWZ0ZXIgeworICAg
IGNvbG9yOiAjODVhZGE3OworICAgIHRleHQtc2hhZG93OiAwIDFweCAwICM2Njk5OTE7CisgICAg
Ym90dG9tOiAxcHg7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworfQorCisjdG9kby1saXN0IGxp
IGxhYmVsIHsKKyAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOworICAgIHBhZGRpbmc6IDE1cHg7
CisgICAgbWFyZ2luLWxlZnQ6IDQ1cHg7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgbGluZS1o
ZWlnaHQ6IDEuMjsKKyAgICAtd2Via2l0LXRyYW5zaXRpb246IGNvbG9yIDAuNHM7CisgICAgLW1v
ei10cmFuc2l0aW9uOiBjb2xvciAwLjRzOworICAgIC1tcy10cmFuc2l0aW9uOiBjb2xvciAwLjRz
OworICAgIC1vLXRyYW5zaXRpb246IGNvbG9yIDAuNHM7CisgICAgdHJhbnNpdGlvbjogY29sb3Ig
MC40czsKK30KKworI3RvZG8tbGlzdCBsaS5jb21wbGV0ZWQgbGFiZWwgeworICAgIGNvbG9yOiAj
YTlhOWE5OworICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOworfQorCisjdG9kby1s
aXN0IGxpIC5kZXN0cm95IHsKKyAgICBkaXNwbGF5OiBub25lOworICAgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsKKyAgICB0b3A6IDA7CisgICAgcmlnaHQ6IDEwcHg7CisgICAgYm90dG9tOiAwOworICAg
IHdpZHRoOiA0MHB4OworICAgIGhlaWdodDogNDBweDsKKyAgICBtYXJnaW46IGF1dG8gMDsKKyAg
ICBmb250LXNpemU6IDIycHg7CisgICAgY29sb3I6ICNhODhhOGE7CisgICAgLXdlYmtpdC10cmFu
c2l0aW9uOiBhbGwgMC4yczsKKyAgICAtbW96LXRyYW5zaXRpb246IGFsbCAwLjJzOworICAgIC1t
cy10cmFuc2l0aW9uOiBhbGwgMC4yczsKKyAgICAtby10cmFuc2l0aW9uOiBhbGwgMC4yczsKKyAg
ICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKK30KKworI3RvZG8tbGlzdCBsaSAuZGVzdHJveTpob3Zl
ciB7CisgICAgdGV4dC1zaGFkb3c6IDAgMCAxcHggIzAwMCwKKyAgICAgICAgICAgICAgICAgMCAw
IDEwcHggcmdiYSgxOTksIDEwNywgMTA3LCAwLjgpOworICAgIC13ZWJraXQtdHJhbnNmb3JtOiBz
Y2FsZSgxLjMpOworICAgIC1tb3otdHJhbnNmb3JtOiBzY2FsZSgxLjMpOworICAgIC1tcy10cmFu
c2Zvcm06IHNjYWxlKDEuMyk7CisgICAgLW8tdHJhbnNmb3JtOiBzY2FsZSgxLjMpOworICAgIHRy
YW5zZm9ybTogc2NhbGUoMS4zKTsKK30KKworI3RvZG8tbGlzdCBsaSAuZGVzdHJveTphZnRlciB7
CisgICAgY29udGVudDogJ+Kclic7Cit9CisKKyN0b2RvLWxpc3QgbGk6aG92ZXIgLmRlc3Ryb3kg
eworICAgIGRpc3BsYXk6IGJsb2NrOworfQorCisjdG9kby1saXN0IGxpIC5lZGl0IHsKKyAgICBk
aXNwbGF5OiBub25lOworfQorCisjdG9kby1saXN0IGxpLmVkaXRpbmc6bGFzdC1jaGlsZCB7Cisg
ICAgbWFyZ2luLWJvdHRvbTogLTFweDsKK30KKworI2Zvb3RlciB7CisgICAgY29sb3I6ICM3Nzc7
CisgICAgcGFkZGluZzogMCAxNXB4OworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICByaWdo
dDogMDsKKyAgICBib3R0b206IC0zMXB4OworICAgIGxlZnQ6IDA7CisgICAgaGVpZ2h0OiAyMHB4
OworICAgIHotaW5kZXg6IDE7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCisjZm9vdGVy
OmJlZm9yZSB7CisgICAgY29udGVudDogJyc7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAg
IHJpZ2h0OiAwOworICAgIGJvdHRvbTogMzFweDsKKyAgICBsZWZ0OiAwOworICAgIGhlaWdodDog
NTBweDsKKyAgICB6LWluZGV4OiAtMTsKKyAgICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgw
LCAwLCAwLCAwLjMpLAorICAgICAgICAgICAgICAgIDAgNnB4IDAgLTNweCByZ2JhKDI1NSwgMjU1
LCAyNTUsIDAuOCksCisgICAgICAgICAgICAgICAgMCA3cHggMXB4IC0zcHggcmdiYSgwLCAwLCAw
LCAwLjMpLAorICAgICAgICAgICAgICAgIDAgNDNweCAwIC02cHggcmdiYSgyNTUsIDI1NSwgMjU1
LCAwLjgpLAorICAgICAgICAgICAgICAgIDAgNDRweCAycHggLTZweCByZ2JhKDAsIDAsIDAsIDAu
Mik7Cit9CisKKyN0b2RvLWNvdW50IHsKKyAgICBmbG9hdDogbGVmdDsKKyAgICB0ZXh0LWFsaWdu
OiBsZWZ0OworfQorCisjZmlsdGVycyB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7
CisgICAgbGlzdC1zdHlsZTogbm9uZTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgcmln
aHQ6IDA7CisgICAgbGVmdDogMDsKK30KKworI2ZpbHRlcnMgbGkgeworICAgIGRpc3BsYXk6IGlu
bGluZTsKK30KKworI2ZpbHRlcnMgbGkgYSB7CisgICAgY29sb3I6ICM4Mzc1NmY7CisgICAgbWFy
Z2luOiAycHg7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCisjZmlsdGVycyBsaSBh
LnNlbGVjdGVkIHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKK30KKworI2NsZWFyLWNvbXBsZXRl
ZCB7CisgICAgZmxvYXQ6IHJpZ2h0OworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBsaW5l
LWhlaWdodDogMjBweDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgYmFja2dyb3Vu
ZDogcmdiYSgwLCAwLCAwLCAwLjEpOworICAgIGZvbnQtc2l6ZTogMTFweDsKKyAgICBwYWRkaW5n
OiAwIDEwcHg7CisgICAgYm9yZGVyLXJhZGl1czogM3B4OworICAgIGJveC1zaGFkb3c6IDAgLTFw
eCAwIDAgcmdiYSgwLCAwLCAwLCAwLjIpOworfQorCisjY2xlYXItY29tcGxldGVkOmhvdmVyIHsK
KyAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMTUpOworICAgIGJveC1zaGFkb3c6IDAg
LTFweCAwIDAgcmdiYSgwLCAwLCAwLCAwLjMpOworfQorCisjaW5mbyB7CisgICAgbWFyZ2luOiA2
NXB4IGF1dG8gMDsKKyAgICBjb2xvcjogI2E2YTZhNjsKKyAgICBmb250LXNpemU6IDEycHg7Cisg
ICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOworICAgIHRl
eHQtYWxpZ246IGNlbnRlcjsKK30KKworI2luZm8gYSB7CisgICAgY29sb3I6IGluaGVyaXQ7Cit9
CisKKy8qCisgICAgSGFjayB0byByZW1vdmUgYmFja2dyb3VuZCBmcm9tIE1vYmlsZSBTYWZhcmku
CisgICAgQ2FuJ3QgdXNlIGl0IGdsb2JhbGx5IHNpbmNlIGl0IGRlc3Ryb3lzIGNoZWNrYm94ZXMg
aW4gRmlyZWZveCBhbmQgT3BlcmEKKyovCitAbWVkaWEgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4t
ZGV2aWNlLXBpeGVsLXJhdGlvOjApIHsKKyAgICAjdG9nZ2xlLWFsbCwKKyAgICAjdG9kby1saXN0
IGxpIC50b2dnbGUgeworICAgICAgICBiYWNrZ3JvdW5kOiBub25lOworICAgIH0KKworICAgICN0
b2RvLWxpc3QgbGkgLnRvZ2dsZSB7CisgICAgICAgIGhlaWdodDogNDBweDsKKyAgICB9CisKKyAg
ICAjdG9nZ2xlLWFsbCB7CisgICAgICAgIHRvcDogLTU2cHg7CisgICAgICAgIGxlZnQ6IC0xNXB4
OworICAgICAgICB3aWR0aDogNjVweDsKKyAgICAgICAgaGVpZ2h0OiA0MXB4OworICAgICAgICAt
d2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKKyAgICAgICAgdHJhbnNmb3JtOiByb3Rh
dGUoOTBkZWcpOworICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CisgICAgICAgIGFw
cGVhcmFuY2U6IG5vbmU7CisgICAgfQorfQorCisuaGlkZGVueworICAgIGRpc3BsYXk6bm9uZTsK
K30KKworaHIgeworICAgIG1hcmdpbjogMjBweCAwOworICAgIGJvcmRlcjogMDsKKyAgICBib3Jk
ZXItdG9wOiAxcHggZGFzaGVkICNDNUM1QzU7CisgICAgYm9yZGVyLWJvdHRvbTogMXB4IGRhc2hl
ZCAjRjdGN0Y3OworfQorCisubGVhcm4gYSB7CisgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAg
ICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgY29sb3I6ICNiODNmNDU7Cit9CisKKy5sZWFy
biBhOmhvdmVyIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgICBjb2xvcjog
Izc4N2U3ZTsKK30KKworLmxlYXJuIGgzLAorLmxlYXJuIGg0LAorLmxlYXJuIGg1IHsKKyAgICBt
YXJnaW46IDEwcHggMDsKKyAgICBmb250LXdlaWdodDogNTAwOworICAgIGxpbmUtaGVpZ2h0OiAx
LjI7CisgICAgY29sb3I6ICMwMDA7Cit9CisKKy5sZWFybiBoMyB7CisgICAgZm9udC1zaXplOiAy
NHB4OworfQorCisubGVhcm4gaDQgeworICAgIGZvbnQtc2l6ZTogMThweDsKK30KKworLmxlYXJu
IGg1IHsKKyAgICBtYXJnaW4tYm90dG9tOiAwOworICAgIGZvbnQtc2l6ZTogMTRweDsKK30KKwor
LmxlYXJuIHVsIHsKKyAgICBwYWRkaW5nOiAwOworICAgIG1hcmdpbjogMCAwIDMwcHggMjVweDsK
K30KKworLmxlYXJuIGxpIHsKKyAgICBsaW5lLWhlaWdodDogMjBweDsKK30KKworLmxlYXJuIHAg
eworICAgIGZvbnQtc2l6ZTogMTVweDsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGxpbmUt
aGVpZ2h0OiAxLjM7CisgICAgbWFyZ2luLXRvcDogMDsKKyAgICBtYXJnaW4tYm90dG9tOiAwOwor
fQorCisucXVvdGUgeworICAgIGJvcmRlcjogbm9uZTsKKyAgICBtYXJnaW46IDIwcHggMCA2MHB4
IDA7Cit9CisKKy5xdW90ZSBwIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy5xdW90
ZSBwOmJlZm9yZSB7CisgICAgY29udGVudDogJ+KAnCc7CisgICAgZm9udC1zaXplOiA1MHB4Owor
ICAgIG9wYWNpdHk6IC4xNTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAtMjBw
eDsKKyAgICBsZWZ0OiAzcHg7Cit9CisKKy5xdW90ZSBwOmFmdGVyIHsKKyAgICBjb250ZW50OiAn
4oCdJzsKKyAgICBmb250LXNpemU6IDUwcHg7CisgICAgb3BhY2l0eTogLjE1OworICAgIHBvc2l0
aW9uOiBhYnNvbHV0ZTsKKyAgICBib3R0b206IC00MnB4OworICAgIHJpZ2h0OiAzcHg7Cit9CisK
Ky5xdW90ZSBmb290ZXIgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBib3R0b206IC00
MHB4OworICAgIHJpZ2h0OiAwOworfQorCisucXVvdGUgZm9vdGVyIGltZyB7CisgICAgYm9yZGVy
LXJhZGl1czogM3B4OworfQorCisucXVvdGUgZm9vdGVyIGEgeworICAgIG1hcmdpbi1sZWZ0OiA1
cHg7CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKK30KKworLnNwZWVjaC1idWJibGUgewor
ICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBwYWRkaW5nOiAxMHB4OworICAgIGJhY2tncm91
bmQ6IHJnYmEoMCwgMCwgMCwgLjA0KTsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7Cit9CisKKy5z
cGVlY2gtYnViYmxlOmFmdGVyIHsKKyAgICBjb250ZW50OiAnJzsKKyAgICBwb3NpdGlvbjogYWJz
b2x1dGU7CisgICAgdG9wOiAxMDAlOworICAgIHJpZ2h0OiAzMHB4OworICAgIGJvcmRlcjogMTNw
eCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDAsIDAsIDAs
IC4wNCk7Cit9CisKKy8qKmJvZHkqLy5sZWFybi1iYXIgPiAubGVhcm4geworICAgIHBvc2l0aW9u
OiBhYnNvbHV0ZTsKKyAgICB3aWR0aDogMjcycHg7CisgICAgdG9wOiA4cHg7CisgICAgbGVmdDog
LTMwMHB4OworICAgIHBhZGRpbmc6IDEwcHg7CisgICAgYm9yZGVyLXJhZGl1czogNXB4OworICAg
IGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjYpOworICAgIHRyYW5zaXRp
b24tcHJvcGVydHk6IGxlZnQ7CisgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNTAwbXM7Cit9CisK
K0BtZWRpYSAobWluLXdpZHRoOiA4OTlweCkgeworICAgIC8qKmJvZHkqLy5sZWFybi1iYXIgewor
ICAgICAgICB3aWR0aDogYXV0bzsKKyAgICAgICAgbWFyZ2luOiAwIDAgMCAzMDBweDsKKyAgICB9
CisgICAgLyoqYm9keSovLmxlYXJuLWJhciA+IC5sZWFybiB7CisgICAgICAgIGxlZnQ6IDhweDsK
KyAgICB9CisgICAgLyoqYm9keSovLmxlYXJuLWJhciAjdG9kb2FwcCB7CisgICAgICAgIHdpZHRo
OiA1NTBweDsKKyAgICAgICAgbWFyZ2luOiAxMzBweCBhdXRvIDQwcHggYXV0bzsKKyAgICB9Cit9
CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9i
YXNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9k
b212Yy9sYWJzL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ib3dlcl9jb21wb25lbnRzL3Rv
ZG9tdmMtY29tbW9uL2Jhc2UuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0Rv
WW91RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93
ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDIwOSBAQAorKGZ1bmN0aW9uICgpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICAvLyBV
bmRlcnNjb3JlJ3MgVGVtcGxhdGUgTW9kdWxlCisgICAgLy8gQ291cnRlc3kgb2YgdW5kZXJzY29y
ZWpzLm9yZworICAgIHZhciBfID0gKGZ1bmN0aW9uIChfKSB7CisgICAgICAgIF8uZGVmYXVsdHMg
PSBmdW5jdGlvbiAob2JqZWN0KSB7CisgICAgICAgICAgICBpZiAoIW9iamVjdCkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3Ig
KHZhciBhcmdzSW5kZXggPSAxLCBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgYXJnc0lu
ZGV4IDwgYXJnc0xlbmd0aDsgYXJnc0luZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgaXRl
cmFibGUgPSBhcmd1bWVudHNbYXJnc0luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlcmFi
bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGl0ZXJhYmxlKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0W2tleV0gPT0gbnVsbCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFtrZXldID0gaXRlcmFibGVba2V5XTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAg
IH0KKworICAgICAgICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRl
bXBsYXRlIGRlbGltaXRlcnMsIGNoYW5nZSB0aGUKKyAgICAgICAgLy8gZm9sbG93aW5nIHRlbXBs
YXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLgorICAgICAgICBfLnRl
bXBsYXRlU2V0dGluZ3MgPSB7CisgICAgICAgICAgICBldmFsdWF0ZSAgICA6IC88JShbXHNcU10r
PyklPi9nLAorICAgICAgICAgICAgaW50ZXJwb2xhdGUgOiAvPCU9KFtcc1xTXSs/KSU+L2csCisg
ICAgICAgICAgICBlc2NhcGUgICAgICA6IC88JS0oW1xzXFNdKz8pJT4vZworICAgICAgICB9Owor
CisgICAgICAgIC8vIFdoZW4gY3VzdG9taXppbmcgYHRlbXBsYXRlU2V0dGluZ3NgLCBpZiB5b3Ug
ZG9uJ3Qgd2FudCB0byBkZWZpbmUgYW4KKyAgICAgICAgLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVh
dGlvbiBvciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpcworICAgICAgICAvLyBn
dWFyYW50ZWVkIG5vdCB0byBtYXRjaC4KKyAgICAgICAgdmFyIG5vTWF0Y2ggPSAvKC4pXi87CisK
KyAgICAgICAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0aGF0
IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGEKKyAgICAgICAgLy8gc3RyaW5nIGxpdGVyYWwuCisgICAg
ICAgIHZhciBlc2NhcGVzID0geworICAgICAgICAgICAgIiciOiAgICAgICInIiwKKyAgICAgICAg
ICAgICdcXCc6ICAgICAnXFwnLAorICAgICAgICAgICAgJ1xyJzogICAgICdyJywKKyAgICAgICAg
ICAgICdcbic6ICAgICAnbicsCisgICAgICAgICAgICAnXHQnOiAgICAgJ3QnLAorICAgICAgICAg
ICAgJ1x1MjAyOCc6ICd1MjAyOCcsCisgICAgICAgICAgICAnXHUyMDI5JzogJ3UyMDI5JworICAg
ICAgICB9OworCisgICAgICAgIHZhciBlc2NhcGVyID0gL1xcfCd8XHJ8XG58XHR8XHUyMDI4fFx1
MjAyOS9nOworCisgICAgICAgIC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxh
ciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIC8vIFVuZGVyc2NvcmUg
dGVtcGxhdGluZyBoYW5kbGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMgd2hpdGVz
cGFjZSwKKyAgICAgICAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50
ZXJwb2xhdGVkIGNvZGUuCisgICAgICAgIF8udGVtcGxhdGUgPSBmdW5jdGlvbih0ZXh0LCBkYXRh
LCBzZXR0aW5ncykgeworICAgICAgICAgICAgdmFyIHJlbmRlcjsKKyAgICAgICAgICAgIHNldHRp
bmdzID0gXy5kZWZhdWx0cyh7fSwgc2V0dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5ncyk7CisKKyAg
ICAgICAgICAgIC8vIENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9uZSByZWd1bGFyIGV4cHJlc3Np
b24gdmlhIGFsdGVybmF0aW9uLgorICAgICAgICAgICAgdmFyIG1hdGNoZXIgPSBuZXcgUmVnRXhw
KFsKKyAgICAgICAgICAgICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJjZSwK
KyAgICAgICAgICAgICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNl
LAorICAgICAgICAgICAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2UK
KyAgICAgICAgICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTsKKworICAgICAgICAgICAgLy8g
Q29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBw
cm9wcmlhdGVseS4KKyAgICAgICAgICAgIHZhciBpbmRleCA9IDA7CisgICAgICAgICAgICB2YXIg
c291cmNlID0gIl9fcCs9JyI7CisgICAgICAgICAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVu
Y3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHsKKyAg
ICAgICAgICAgICAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShpbmRleCwgb2Zmc2V0KQorICAgICAg
ICAgICAgICAgICAgICAucmVwbGFjZShlc2NhcGVyLCBmdW5jdGlvbihtYXRjaCkgeyByZXR1cm4g
J1xcJyArIGVzY2FwZXNbbWF0Y2hdOyB9KTsKKworICAgICAgICAgICAgICAgIGlmIChlc2NhcGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIgKyBlc2NhcGUg
KyAiKSk9PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXG4nIjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKGludGVycG9sYXRlKSB7CisgICAgICAgICAgICAgICAgICAgIHNv
dXJjZSArPSAiJytcbigoX190PSgiICsgaW50ZXJwb2xhdGUgKyAiKSk9PW51bGw/Jyc6X190KStc
biciOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZXZhbHVhdGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9ICInO1xuIiArIGV2YWx1YXRlICsgIlxuX19w
Kz0nIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5kZXggPSBvZmZzZXQg
KyBtYXRjaC5sZW5ndGg7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICBzb3VyY2UgKz0gIic7XG4iOworCisgICAgICAgICAgICAvLyBJ
ZiBhIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2Fs
IHNjb3BlLgorICAgICAgICAgICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291cmNlID0gJ3dp
dGgob2JqfHx7fSl7XG4nICsgc291cmNlICsgJ31cbic7CisKKyAgICAgICAgICAgIHNvdXJjZSA9
ICJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4sIiArCisgICAgICAgICAg
ICAgICAgInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307XG4i
ICsKKyAgICAgICAgICAgICAgICBzb3VyY2UgKyAicmV0dXJuIF9fcDtcbiI7CisKKyAgICAgICAg
ICAgIHRyeSB7CisgICAgICAgICAgICAgICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdz
LnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7CisgICAgICAgICAgICB9IGNhdGNoIChl
KSB7CisgICAgICAgICAgICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7CisgICAgICAgICAgICAgICAg
dGhyb3cgZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRhdGEpIHJldHVybiBy
ZW5kZXIoZGF0YSwgXyk7CisgICAgICAgICAgICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlvbihkYXRh
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlci5jYWxsKHRoaXMsIGRhdGEsIF8pOwor
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgZnVu
Y3Rpb24gc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLgorICAgICAg
ICAgICAgdGVtcGxhdGUuc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAoc2V0dGluZ3MudmFyaWFibGUg
fHwgJ29iaicpICsgJyl7XG4nICsgc291cmNlICsgJ30nOworCisgICAgICAgICAgICByZXR1cm4g
dGVtcGxhdGU7CisgICAgICAgIH07CisKKyAgICAgICAgcmV0dXJuIF87CisgICAgfSkoe30pOwor
CisgICAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lID09PSAndG9kb212Yy5jb20nKSB7CisgICAgICAg
IHdpbmRvdy5fZ2FxID0gW1snX3NldEFjY291bnQnLCdVQS0zMTA4MTA2Mi0xJ10sWydfdHJhY2tQ
YWdldmlldyddXTsoZnVuY3Rpb24oZCx0KXt2YXIgZz1kLmNyZWF0ZUVsZW1lbnQodCkscz1kLmdl
dEVsZW1lbnRzQnlUYWdOYW1lKHQpWzBdO2cuc3JjPScvL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNv
bS9nYS5qcyc7cy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShnLHMpfShkb2N1bWVudCwnc2NyaXB0
JykpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHJlZGlyZWN0KCkgeworICAgICAgICBpZiAobG9j
YXRpb24uaG9zdG5hbWUgPT09ICd0YXN0ZWpzLmdpdGh1Yi5pbycpIHsKKyAgICAgICAgICAgIGxv
Y2F0aW9uLmhyZWYgPSBsb2NhdGlvbi5ocmVmLnJlcGxhY2UoJ3Rhc3RlanMuZ2l0aHViLmlvL3Rv
ZG9tdmMnLCAndG9kb212Yy5jb20nKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9u
IGZpbmRSb290KCkgeworICAgICAgICB2YXIgYmFzZTsKKworICAgICAgICBbL2xhYnMvLCAvXHcq
LWV4YW1wbGVzL10uZm9yRWFjaChmdW5jdGlvbiAoaHJlZikgeworICAgICAgICAgICAgdmFyIG1h
dGNoID0gbG9jYXRpb24uaHJlZi5tYXRjaChocmVmKTsKKworICAgICAgICAgICAgaWYgKCFiYXNl
ICYmIG1hdGNoKSB7CisgICAgICAgICAgICAgICAgYmFzZSA9IGxvY2F0aW9uLmhyZWYuaW5kZXhP
ZihtYXRjaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiBs
b2NhdGlvbi5ocmVmLnN1YnN0cigwLCBiYXNlKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBnZXRG
aWxlKGZpbGUsIGNhbGxiYWNrKSB7CisgICAgICAgIGlmICghbG9jYXRpb24uaG9zdCkgeworICAg
ICAgICAgICAgcmV0dXJuIGNvbnNvbGUuaW5mbygnTWlzcyB0aGUgaW5mbyBiYXI/IFJ1biBUb2Rv
TVZDIGZyb20gYSBzZXJ2ZXIgdG8gYXZvaWQgYSBjcm9zcy1vcmlnaW4gZXJyb3IuJyk7CisgICAg
ICAgIH0KKworICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisKKyAgICAg
ICAgeGhyLm9wZW4oJ0dFVCcsIGZpbmRSb290KCkgKyBmaWxlLCB0cnVlKTsKKyAgICAgICAgeGhy
LnNlbmQoKTsKKworICAgICAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiBjYWxsYmFjaykgeworICAgICAgICAgICAgICAg
IGNhbGxiYWNrKHhoci5yZXNwb25zZVRleHQpOworICAgICAgICAgICAgfQorICAgICAgICB9Owor
ICAgIH0KKworICAgIGZ1bmN0aW9uIExlYXJuKGxlYXJuSlNPTiwgY29uZmlnKSB7CisgICAgICAg
IGlmICghKHRoaXMgaW5zdGFuY2VvZiBMZWFybikpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcg
TGVhcm4obGVhcm5KU09OLCBjb25maWcpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHRlbXBs
YXRlLCBmcmFtZXdvcms7CisKKyAgICAgICAgaWYgKHR5cGVvZiBsZWFybkpTT04gIT09ICdvYmpl
Y3QnKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGxlYXJuSlNPTiA9IEpT
T04ucGFyc2UobGVhcm5KU09OKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAo
Y29uZmlnKSB7CisgICAgICAgICAgICB0ZW1wbGF0ZSA9IGNvbmZpZy50ZW1wbGF0ZTsKKyAgICAg
ICAgICAgIGZyYW1ld29yayA9IGNvbmZpZy5mcmFtZXdvcms7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIXRlbXBsYXRlICYmIGxlYXJuSlNPTi50ZW1wbGF0ZXMpIHsKKyAgICAgICAgICAgIHRl
bXBsYXRlID0gbGVhcm5KU09OLnRlbXBsYXRlcy50b2RvbXZjOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCFmcmFtZXdvcmsgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZnJhbWV3
b3JrXScpKSB7CisgICAgICAgICAgICBmcmFtZXdvcmsgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9y
KCdbZGF0YS1mcmFtZXdvcmtdJykuZ2V0QXR0cmlidXRlKCdkYXRhLWZyYW1ld29yaycpOworICAg
ICAgICB9CisKKworICAgICAgICBpZiAodGVtcGxhdGUgJiYgbGVhcm5KU09OW2ZyYW1ld29ya10p
IHsKKyAgICAgICAgICAgIHRoaXMuZnJhbWV3b3JrSlNPTiA9IGxlYXJuSlNPTltmcmFtZXdvcmtd
OworICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IHRlbXBsYXRlOworCisgICAgICAgICAgICB0
aGlzLmFwcGVuZCgpOworICAgICAgICB9CisgICAgfQorCisgICAgTGVhcm4ucHJvdG90eXBlLmFw
cGVuZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGFzaWRlID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnYXNpZGUnKTsKKyAgICAgICAgYXNpZGUuaW5uZXJIVE1MID0gXy50ZW1wbGF0ZSh0
aGlzLnRlbXBsYXRlLCB0aGlzLmZyYW1ld29ya0pTT04pOworICAgICAgICBhc2lkZS5jbGFzc05h
bWUgPSAnbGVhcm4nOworCisgICAgICAgIC8vIExvY2FsaXplIGRlbW8gbGlua3MKKyAgICAgICAg
dmFyIGRlbW9MaW5rcyA9IGFzaWRlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5kZW1vLWxpbmsnKTsKKyAg
ICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChkZW1vTGlua3MsIGZ1bmN0aW9uIChk
ZW1vTGluaykgeworICAgICAgICAgICAgZGVtb0xpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgZmlu
ZFJvb3QoKSArIGRlbW9MaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpKTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc05hbWUgPSAoZG9jdW1lbnQuYm9keS5jbGFzc05h
bWUgKyAnIGxlYXJuLWJhcicpLnRyaW0oKTsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5pbnNlcnRB
ZGphY2VudEhUTUwoJ2FmdGVyQmVnaW4nLCBhc2lkZS5vdXRlckhUTUwpOworICAgIH07CisKKyAg
ICByZWRpcmVjdCgpOworICAgIGdldEZpbGUoJ2xlYXJuLmpzb24nLCBMZWFybik7Cit9KSgpOwpJ
bmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2xhYnMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2pzL2FwcC5qc3gKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFu
Y2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L3JlYWN0L2pzL2FwcC5qc3gJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91
RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvanMvYXBw
LmpzeAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDcgQEAKKy8qKgorICogQGpzeCBSZWFjdC5E
T00KKyAqLworLypqc2hpbnQgcXVvdG1hcms6ZmFsc2UgKi8KKy8qanNoaW50IHdoaXRlOmZhbHNl
ICovCisvKmpzaGludCB0cmFpbGluZzpmYWxzZSAqLworLypqc2hpbnQgbmV3Y2FwOmZhbHNlICov
CisvKmdsb2JhbCBVdGlscywgQUxMX1RPRE9TLCBBQ1RJVkVfVE9ET1MsIENPTVBMRVRFRF9UT0RP
UywKKyAgICBUb2RvSXRlbSwgVG9kb0Zvb3RlciwgUmVhY3QsIFJvdXRlciovCisKKyhmdW5jdGlv
biAod2luZG93LCBSZWFjdCkgeworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHdpbmRvdy5BTExf
VE9ET1MgPSAnYWxsJzsKKyAgICB3aW5kb3cuQUNUSVZFX1RPRE9TID0gJ2FjdGl2ZSc7CisgICAg
d2luZG93LkNPTVBMRVRFRF9UT0RPUyA9ICdjb21wbGV0ZWQnOworCisgICAgdmFyIEVOVEVSX0tF
WSA9IDEzOworCisgICAgdmFyIFRvZG9BcHAgPSBSZWFjdC5jcmVhdGVDbGFzcyh7CisgICAgICAg
IGdldEluaXRpYWxTdGF0ZTogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIHRvZG9zID0g
VXRpbHMuc3RvcmUoJ3JlYWN0LXRvZG9zJyk7CisgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgIHRvZG9zOiB0b2RvcywKKyAgICAgICAgICAgICAgICBub3dTaG93aW5nOiBBTExf
VE9ET1MsCisgICAgICAgICAgICAgICAgZWRpdGluZzogbnVsbAorICAgICAgICAgICAgfTsKKyAg
ICAgICAgfSwKKworICAgICAgICBjb21wb25lbnREaWRNb3VudDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgdmFyIHJvdXRlciA9IFJvdXRlcih7CisgICAgICAgICAgICAgICAgJy8nOiB0aGlz
LnNldFN0YXRlLmJpbmQodGhpcywge25vd1Nob3dpbmc6IEFMTF9UT0RPU30pLAorICAgICAgICAg
ICAgICAgICcvYWN0aXZlJzogdGhpcy5zZXRTdGF0ZS5iaW5kKHRoaXMsIHtub3dTaG93aW5nOiBB
Q1RJVkVfVE9ET1N9KSwKKyAgICAgICAgICAgICAgICAnL2NvbXBsZXRlZCc6IHRoaXMuc2V0U3Rh
dGUuYmluZCh0aGlzLCB7bm93U2hvd2luZzogQ09NUExFVEVEX1RPRE9TfSkKKyAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgcm91dGVyLmluaXQoKTsKKyAgICAgICAgICAgIHRoaXMucmVmcy5u
ZXdGaWVsZC5nZXRET01Ob2RlKCkuZm9jdXMoKTsKKyAgICAgICAgfSwKKworICAgICAgICBoYW5k
bGVOZXdUb2RvS2V5RG93bjogZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAgICBpZiAoZXZl
bnQud2hpY2ggIT09IEVOVEVSX0tFWSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMucmVmcy5uZXdGaWVsZC5nZXRE
T01Ob2RlKCkudmFsdWUudHJpbSgpOworICAgICAgICAgICAgdmFyIHRvZG9zOworICAgICAgICAg
ICAgdmFyIG5ld1RvZG87CisKKyAgICAgICAgICAgIGlmICh2YWwpIHsKKyAgICAgICAgICAgICAg
ICB0b2RvcyA9IHRoaXMuc3RhdGUudG9kb3M7CisgICAgICAgICAgICAgICAgbmV3VG9kbyA9IHsK
KyAgICAgICAgICAgICAgICAgICAgaWQ6IFV0aWxzLnV1aWQoKSwKKyAgICAgICAgICAgICAgICAg
ICAgdGl0bGU6IHZhbCwKKyAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkOiBmYWxzZQorICAg
ICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dG9kb3M6IHRv
ZG9zLmNvbmNhdChbbmV3VG9kb10pfSk7CisgICAgICAgICAgICAgICAgdGhpcy5yZWZzLm5ld0Zp
ZWxkLmdldERPTU5vZGUoKS52YWx1ZSA9ICcnOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0sCisKKyAgICAgICAgdG9nZ2xlQWxsOiBmdW5jdGlv
biAoZXZlbnQpIHsKKyAgICAgICAgICAgIHZhciBjaGVja2VkID0gZXZlbnQudGFyZ2V0LmNoZWNr
ZWQ7CisKKyAgICAgICAgICAgIHRoaXMuc3RhdGUudG9kb3MuZm9yRWFjaChmdW5jdGlvbiAodG9k
bykgeworICAgICAgICAgICAgICAgIHRvZG8uY29tcGxldGVkID0gY2hlY2tlZDsKKyAgICAgICAg
ICAgIH0pOworCisgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHt0b2RvczogdGhpcy5zdGF0ZS50
b2Rvc30pOworICAgICAgICB9LAorCisgICAgICAgIHRvZ2dsZTogZnVuY3Rpb24gKHRvZG8pIHsK
KyAgICAgICAgICAgIHRvZG8uY29tcGxldGVkID0gIXRvZG8uY29tcGxldGVkOworICAgICAgICAg
ICAgdGhpcy5zZXRTdGF0ZSh7dG9kb3M6IHRoaXMuc3RhdGUudG9kb3N9KTsKKyAgICAgICAgfSwK
KworICAgICAgICBkZXN0cm95OiBmdW5jdGlvbiAodG9kbykgeworICAgICAgICAgICAgdmFyIG5l
d1RvZG9zID0gdGhpcy5zdGF0ZS50b2Rvcy5maWx0ZXIoZnVuY3Rpb24gKGNhbmRpZGF0ZSkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGUuaWQgIT09IHRvZG8uaWQ7CisgICAgICAg
ICAgICB9KTsKKworICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dG9kb3M6IG5ld1RvZG9zfSk7
CisgICAgICAgIH0sCisKKyAgICAgICAgZWRpdDogZnVuY3Rpb24gKHRvZG8sIGNhbGxiYWNrKSB7
CisgICAgICAgICAgICAvLyByZWZlciB0byB0b2RvSXRlbS5qcyBgaGFuZGxlRWRpdGAgZm9yIHRo
ZSByZWFzb25pbmcgYmVoaW5kIHRoZQorICAgICAgICAgICAgLy8gY2FsbGJhY2sKKyAgICAgICAg
ICAgIHRoaXMuc2V0U3RhdGUoe2VkaXRpbmc6IHRvZG8uaWR9LCBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9LAorCisg
ICAgICAgIHNhdmU6IGZ1bmN0aW9uICh0b2RvLCB0ZXh0KSB7CisgICAgICAgICAgICB0b2RvLnRp
dGxlID0gdGV4dDsKKyAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3RvZG9zOiB0aGlzLnN0YXRl
LnRvZG9zLCBlZGl0aW5nOiBudWxsfSk7CisgICAgICAgIH0sCisKKyAgICAgICAgY2FuY2VsOiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtlZGl0aW5nOiBudWxsfSk7
CisgICAgICAgIH0sCisKKyAgICAgICAgY2xlYXJDb21wbGV0ZWQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHZhciBuZXdUb2RvcyA9IHRoaXMuc3RhdGUudG9kb3MuZmlsdGVyKGZ1bmN0aW9u
ICh0b2RvKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICF0b2RvLmNvbXBsZXRlZDsKKyAgICAg
ICAgICAgIH0pOworCisgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHt0b2RvczogbmV3VG9kb3N9
KTsKKyAgICAgICAgfSwKKworICAgICAgICBjb21wb25lbnREaWRVcGRhdGU6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIFV0aWxzLnN0b3JlKCdyZWFjdC10b2RvcycsIHRoaXMuc3RhdGUudG9k
b3MpOworICAgICAgICB9LAorCisgICAgICAgIHJlbmRlcjogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgdmFyIGZvb3RlciA9IG51bGw7CisgICAgICAgICAgICB2YXIgbWFpbiA9IG51bGw7Cisg
ICAgICAgICAgICB2YXIgdG9kb0l0ZW1zID0ge307CisgICAgICAgICAgICB2YXIgYWN0aXZlVG9k
b0NvdW50OworICAgICAgICAgICAgdmFyIGNvbXBsZXRlZENvdW50OworCisgICAgICAgICAgICB2
YXIgc2hvd25Ub2RvcyA9IHRoaXMuc3RhdGUudG9kb3MuZmlsdGVyKGZ1bmN0aW9uICh0b2RvKSB7
CisgICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLnN0YXRlLm5vd1Nob3dpbmcpIHsKKyAgICAg
ICAgICAgICAgICBjYXNlIEFDVElWRV9UT0RPUzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICF0b2RvLmNvbXBsZXRlZDsKKyAgICAgICAgICAgICAgICBjYXNlIENPTVBMRVRFRF9UT0RPUzoK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvZG8uY29tcGxldGVkOworICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7CisKKyAgICAgICAgICAgIHNob3du
VG9kb3MuZm9yRWFjaChmdW5jdGlvbiAodG9kbykgeworICAgICAgICAgICAgICAgIHRvZG9JdGVt
c1t0b2RvLmlkXSA9ICgKKyAgICAgICAgICAgICAgICAgICAgPFRvZG9JdGVtCisgICAgICAgICAg
ICAgICAgICAgICAgICB0b2RvPXt0b2RvfQorICAgICAgICAgICAgICAgICAgICAgICAgb25Ub2dn
bGU9e3RoaXMudG9nZ2xlLmJpbmQodGhpcywgdG9kbyl9CisgICAgICAgICAgICAgICAgICAgICAg
ICBvbkRlc3Ryb3k9e3RoaXMuZGVzdHJveS5iaW5kKHRoaXMsIHRvZG8pfQorICAgICAgICAgICAg
ICAgICAgICAgICAgb25FZGl0PXt0aGlzLmVkaXQuYmluZCh0aGlzLCB0b2RvKX0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVkaXRpbmc9e3RoaXMuc3RhdGUuZWRpdGluZyA9PT0gdG9kby5pZH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIG9uU2F2ZT17dGhpcy5zYXZlLmJpbmQodGhpcywgdG9k
byl9CisgICAgICAgICAgICAgICAgICAgICAgICBvbkNhbmNlbD17dGhpcy5jYW5jZWx9CisgICAg
ICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0uYmlu
ZCh0aGlzKSk7CisKKyAgICAgICAgICAgIGFjdGl2ZVRvZG9Db3VudCA9IHRoaXMuc3RhdGUudG9k
b3MuZmlsdGVyKGZ1bmN0aW9uICh0b2RvKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICF0b2Rv
LmNvbXBsZXRlZDsKKyAgICAgICAgICAgIH0pLmxlbmd0aDsKKworICAgICAgICAgICAgY29tcGxl
dGVkQ291bnQgPSB0aGlzLnN0YXRlLnRvZG9zLmxlbmd0aCAtIGFjdGl2ZVRvZG9Db3VudDsKKwor
ICAgICAgICAgICAgaWYgKGFjdGl2ZVRvZG9Db3VudCB8fCBjb21wbGV0ZWRDb3VudCkgeworICAg
ICAgICAgICAgICAgIGZvb3RlciA9CisgICAgICAgICAgICAgICAgICAgIDxUb2RvRm9vdGVyCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb3VudD17YWN0aXZlVG9kb0NvdW50fQorICAgICAgICAg
ICAgICAgICAgICAgICAgY29tcGxldGVkQ291bnQ9e2NvbXBsZXRlZENvdW50fQorICAgICAgICAg
ICAgICAgICAgICAgICAgbm93U2hvd2luZz17dGhpcy5zdGF0ZS5ub3dTaG93aW5nfQorICAgICAg
ICAgICAgICAgICAgICAgICAgb25DbGVhckNvbXBsZXRlZD17dGhpcy5jbGVhckNvbXBsZXRlZH0K
KyAgICAgICAgICAgICAgICAgICAgLz47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICh0aGlzLnN0YXRlLnRvZG9zLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIG1haW4gPSAoCisg
ICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSJtYWluIj4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIDxpbnB1dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJ0b2dnbGUtYWxs
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImNoZWNrYm94IgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLnRvZ2dsZUFsbH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGVja2VkPXthY3RpdmVUb2RvQ291bnQgPT09IDB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGlkPSJ0b2Rv
LWxpc3QiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0b2RvSXRlbXN9CisgICAgICAg
ICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+Cisg
ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuICgK
KyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgICA8aGVhZGVyIGlkPSJo
ZWFkZXIiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGgxPnRvZG9zPC9oMT4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIDxpbnB1dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZj0i
bmV3RmllbGQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9Im5ldy10b2RvIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJXaGF0IG5lZWRzIHRvIGJlIGRv
bmU/IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5oYW5kbGVO
ZXdUb2RvS2V5RG93bn0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAg
ICAgICAgIDwvaGVhZGVyPgorICAgICAgICAgICAgICAgICAgICB7bWFpbn0KKyAgICAgICAgICAg
ICAgICAgICAge2Zvb3Rlcn0KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICk7
CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIFJlYWN0LnJlbmRlckNvbXBvbmVudCg8VG9kb0Fw
cCAvPiwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvZG9hcHAnKSk7CisgICAgUmVhY3QucmVu
ZGVyQ29tcG9uZW50KAorICAgICAgICA8ZGl2PgorICAgICAgICAgICAgPHA+RG91YmxlLWNsaWNr
IHRvIGVkaXQgYSB0b2RvPC9wPgorICAgICAgICAgICAgPHA+Q3JlYXRlZCBieXsnICd9CisgICAg
ICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2dpdGh1Yi5jb20vcGV0ZWh1bnQvIj5wZXRlaHVu
dDwvYT4KKyAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgIDxwPlBhcnQgb2Z7JyAnfTxhIGhy
ZWY9Imh0dHA6Ly90b2RvbXZjLmNvbSI+VG9kb01WQzwvYT48L3A+CisgICAgICAgIDwvZGl2PiwK
KyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luZm8nKSk7Cit9KSh3aW5kb3csIFJl
YWN0KTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9sYWJz
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9qcy9mb290ZXIuanN4Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9sYWJzL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9yZWFjdC9qcy9mb290ZXIuanN4CShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFu
Y2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC90b2RvbXZjL2xhYnMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L3JlYWN0L2pzL2Zvb3Rlci5qc3gJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qKgor
ICogQGpzeCBSZWFjdC5ET00KKyAqLworLypqc2hpbnQgcXVvdG1hcms6ZmFsc2UgKi8KKy8qanNo
aW50IHdoaXRlOmZhbHNlICovCisvKmpzaGludCB0cmFpbGluZzpmYWxzZSAqLworLypqc2hpbnQg
bmV3Y2FwOmZhbHNlICovCisvKmdsb2JhbCBSZWFjdCwgQUxMX1RPRE9TLCBBQ1RJVkVfVE9ET1Ms
IFV0aWxzLCBDT01QTEVURURfVE9ET1MgKi8KKyhmdW5jdGlvbiAod2luZG93KSB7CisgICAgJ3Vz
ZSBzdHJpY3QnOworCisgICAgd2luZG93LlRvZG9Gb290ZXIgPSBSZWFjdC5jcmVhdGVDbGFzcyh7
CisgICAgICAgIHJlbmRlcjogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGFjdGl2ZVRv
ZG9Xb3JkID0gVXRpbHMucGx1cmFsaXplKHRoaXMucHJvcHMuY291bnQsICdpdGVtJyk7CisgICAg
ICAgICAgICB2YXIgY2xlYXJCdXR0b24gPSBudWxsOworCisgICAgICAgICAgICBpZiAodGhpcy5w
cm9wcy5jb21wbGV0ZWRDb3VudCA+IDApIHsKKyAgICAgICAgICAgICAgICBjbGVhckJ1dHRvbiA9
ICgKKyAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgorICAgICAgICAgICAgICAgICAgICAgICAg
aWQ9ImNsZWFyLWNvbXBsZXRlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3Ro
aXMucHJvcHMub25DbGVhckNvbXBsZXRlZH0+CisgICAgICAgICAgICAgICAgICAgICAgICB7Jyd9
Q2xlYXIgY29tcGxldGVkICh7dGhpcy5wcm9wcy5jb21wbGV0ZWRDb3VudH0peycnfQorICAgICAg
ICAgICAgICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB2YXIgc2hvdyA9IHsKKyAgICAgICAgICAgICAgICBBTExfVE9ET1M6
ICcnLAorICAgICAgICAgICAgICAgIEFDVElWRV9UT0RPUzogJycsCisgICAgICAgICAgICAgICAg
Q09NUExFVEVEX1RPRE9TOiAnJworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHNob3dbdGhp
cy5wcm9wcy5ub3dTaG93aW5nXSA9ICdzZWxlY3RlZCc7CisKKyAgICAgICAgICAgIHJldHVybiAo
CisgICAgICAgICAgICAgICAgPGZvb3RlciBpZD0iZm9vdGVyIj4KKyAgICAgICAgICAgICAgICAg
ICAgPHNwYW4gaWQ9InRvZG8tY291bnQiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9u
Zz57dGhpcy5wcm9wcy5jb3VudH08L3N0cm9uZz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHsn
ICd9e2FjdGl2ZVRvZG9Xb3JkfXsnICd9bGVmdHsnJ30KKyAgICAgICAgICAgICAgICAgICAgPC9z
cGFuPgorICAgICAgICAgICAgICAgICAgICA8dWwgaWQ9ImZpbHRlcnMiPgorICAgICAgICAgICAg
ICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMv
IiBjbGFzcz17c2hvd1tBTExfVE9ET1NdfT5BbGw8L2E+CisgICAgICAgICAgICAgICAgICAgICAg
ICA8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgeycgJ30KKyAgICAgICAgICAgICAgICAg
ICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjL2FjdGl2
ZSIgY2xhc3M9e3Nob3dbQUNUSVZFX1RPRE9TXX0+QWN0aXZlPC9hPgorICAgICAgICAgICAgICAg
ICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHsnICd9CisgICAgICAgICAg
ICAgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0i
Iy9jb21wbGV0ZWQiIGNsYXNzPXtzaG93W0NPTVBMRVRFRF9UT0RPU119PkNvbXBsZXRlZDwvYT4K
KyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgICAgIDwvdWw+
CisgICAgICAgICAgICAgICAgICAgIHtjbGVhckJ1dHRvbn0KKyAgICAgICAgICAgICAgICA8L2Zv
b3Rlcj4KKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICB9KTsKK30pKHdpbmRvdyk7Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvcmVhY3QvanMvdG9kb0l0ZW0uanN4Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZv
cm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9sYWJzL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9yZWFjdC9qcy90b2RvSXRlbS5qc3gJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRl
c3RzL0RvWW91RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVh
Y3QvanMvdG9kb0l0ZW0uanN4CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkzIEBACisvKioKKyAq
IEBqc3ggUmVhY3QuRE9NCisgKi8KKy8qanNoaW50IHF1b3RtYXJrOiBmYWxzZSAqLworLypqc2hp
bnQgd2hpdGU6IGZhbHNlICovCisvKmpzaGludCB0cmFpbGluZzogZmFsc2UgKi8KKy8qanNoaW50
IG5ld2NhcDogZmFsc2UgKi8KKy8qZ2xvYmFsIFJlYWN0LCBVdGlscyAqLworKGZ1bmN0aW9uICh3
aW5kb3cpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICB2YXIgRVNDQVBFX0tFWSA9IDI3Owor
ICAgIHZhciBFTlRFUl9LRVkgPSAxMzsKKworICAgIHdpbmRvdy5Ub2RvSXRlbSA9IFJlYWN0LmNy
ZWF0ZUNsYXNzKHsKKyAgICAgICAgaGFuZGxlU3VibWl0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICB2YXIgdmFsID0gdGhpcy5zdGF0ZS5lZGl0VGV4dC50cmltKCk7CisgICAgICAgICAgICBp
ZiAodmFsKSB7CisgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vblNhdmUodmFsKTsKKyAgICAg
ICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtlZGl0VGV4dDogdmFsfSk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25EZXN0cm95KCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0sCisgICAgICAgIGhh
bmRsZUVkaXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIC8vIHJlYWN0IG9wdGltaXplcyBy
ZW5kZXJzIGJ5IGJhdGNoaW5nIHRoZW0uIFRoaXMgbWVhbnMgeW91IGNhbid0IGNhbGwKKyAgICAg
ICAgICAgIC8vIHBhcmVudCdzIGBvbkVkaXRgICh3aGljaCBpbiB0aGlzIGNhc2UgdHJpZ2dlcmVz
IGEgcmUtcmVuZGVyKSwgYW5kCisgICAgICAgICAgICAvLyBpbW1lZGlhdGVseSBtYW5pcHVsYXRl
IHRoZSBET00gYXMgaWYgdGhlIHJlbmRlcmluZydzIG92ZXIuIFB1dCBpdCBhcyBhCisgICAgICAg
ICAgICAvLyBjYWxsYmFjay4gUmVmZXIgdG8gYXBwLmpzJyBgZWRpdGAgbWV0aG9kCisgICAgICAg
ICAgICB0aGlzLnByb3BzLm9uRWRpdChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLnJlZnMuZWRpdEZpZWxkLmdldERPTU5vZGUoKTsKKyAgICAgICAgICAgICAg
ICBub2RlLmZvY3VzKCk7CisgICAgICAgICAgICAgICAgbm9kZS5zZXRTZWxlY3Rpb25SYW5nZShu
b2RlLnZhbHVlLmxlbmd0aCwgbm9kZS52YWx1ZS5sZW5ndGgpOworICAgICAgICAgICAgfS5iaW5k
KHRoaXMpKTsKKyAgICAgICAgfSwKKworICAgICAgICBoYW5kbGVLZXlEb3duOiBmdW5jdGlvbiAo
ZXZlbnQpIHsKKyAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBFU0NBUEVfS0VZKSB7
CisgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7ZWRpdFRleHQ6IHRoaXMucHJvcHMudG9k
by50aXRsZX0pOworICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DYW5jZWwoKTsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PT0gRU5URVJfS0VZKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5oYW5kbGVTdWJtaXQoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7ZWRpdFRleHQ6IGV2ZW50LnRhcmdldC52YWx1ZX0p
OworICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIGhhbmRsZUNoYW5nZTogZnVu
Y3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtlZGl0VGV4dDogZXZl
bnQudGFyZ2V0LnZhbHVlfSk7CisgICAgICAgIH0sCisKKyAgICAgICAgZ2V0SW5pdGlhbFN0YXRl
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4ge2VkaXRUZXh0OiB0aGlzLnByb3Bz
LnRvZG8udGl0bGV9OworICAgICAgICB9LAorCisgICAgICAgIGNvbXBvbmVudFdpbGxSZWNlaXZl
UHJvcHM6IGZ1bmN0aW9uIChuZXh0UHJvcHMpIHsKKyAgICAgICAgICAgIGlmIChuZXh0UHJvcHMu
dG9kby50aXRsZSAhPT0gdGhpcy5wcm9wcy50b2RvLnRpdGxlKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5zZXRTdGF0ZSh0aGlzLmdldEluaXRpYWxTdGF0ZSgpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSwKKworICAgICAgICByZW5kZXI6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiAoCisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPXtVdGlscy5zdHJpbmdpZnlPYmpLZXlz
KHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkOiB0aGlzLnByb3BzLnRvZG8uY29tcGxl
dGVkLAorICAgICAgICAgICAgICAgICAgICBlZGl0aW5nOiB0aGlzLnByb3BzLmVkaXRpbmcKKyAg
ICAgICAgICAgICAgICB9KX0+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZpZXci
PgorICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2xhc3M9InRvZ2dsZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJj
aGVja2JveCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXt0aGlzLnByb3Bz
LnRvZG8uY29tcGxldGVkID8gJ2NoZWNrZWQnIDogbnVsbH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvbkNoYW5nZT17dGhpcy5wcm9wcy5vblRvZ2dsZX0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgb25Eb3VibGVDbGljaz17
dGhpcy5oYW5kbGVFZGl0fT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9w
cy50b2RvLnRpdGxlfQorICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9J2Rlc3Ryb3knIG9uQ2xpY2s9e3RoaXMucHJv
cHMub25EZXN0cm95fSAvPgorICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAg
ICAgICAgICAgPGlucHV0CisgICAgICAgICAgICAgICAgICAgICAgICByZWY9ImVkaXRGaWVsZCIK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJlZGl0IgorICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuZWRpdFRleHR9CisgICAgICAgICAgICAgICAgICAgICAg
ICBvbkJsdXI9e3RoaXMuaGFuZGxlU3VibWl0fQorICAgICAgICAgICAgICAgICAgICAgICAgb25D
aGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfQorICAgICAgICAgICAgICAgICAgICAgICAgb25LZXlE
b3duPXt0aGlzLmhhbmRsZUtleURvd259CisgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAg
ICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICB9KTsKK30pKHdp
bmRvdyk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL3RvZG9tdmMvbGFi
cy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvanMvdXRpbHMuanN4Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9sYWJzL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9yZWFjdC9qcy91dGlscy5qc3gJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5j
ZVRlc3RzL0RvWW91RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
cmVhY3QvanMvdXRpbHMuanN4CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisoZnVuY3Rp
b24gKHdpbmRvdykgeworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHdpbmRvdy5VdGlscyA9IHsK
KyAgICAgICAgdXVpZDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgLypqc2hpbnQgYml0d2lz
ZTpmYWxzZSAqLworICAgICAgICAgICAgdmFyIGksIHJhbmRvbTsKKyAgICAgICAgICAgIHZhciB1
dWlkID0gJyc7CisKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgcmFuZG9tID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMDsKKyAgICAgICAgICAg
ICAgICBpZiAoaSA9PT0gOCB8fCBpID09PSAxMiB8fCBpID09PSAxNiB8fCBpID09PSAyMCkgewor
ICAgICAgICAgICAgICAgICAgICB1dWlkICs9ICctJzsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgdXVpZCArPSAoaSA9PT0gMTIgPyA0IDogKGkgPT09IDE2ID8gKHJhbmRvbSAm
IDMgfCA4KSA6IHJhbmRvbSkpCisgICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygxNik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB1dWlkOworICAgICAgICB9LAorCisg
ICAgICAgIHBsdXJhbGl6ZTogZnVuY3Rpb24gKGNvdW50LCB3b3JkKSB7CisgICAgICAgICAgICBy
ZXR1cm4gY291bnQgPT09IDEgPyB3b3JkIDogd29yZCArICdzJzsKKyAgICAgICAgfSwKKworICAg
ICAgICBzdG9yZTogZnVuY3Rpb24gKG5hbWVzcGFjZSwgZGF0YSkgeworICAgICAgICAgICAgaWYg
KGRhdGEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLnNldEl0ZW0obmFt
ZXNwYWNlLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHZhciBzdG9yZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWVzcGFjZSk7CisgICAgICAg
ICAgICByZXR1cm4gKHN0b3JlICYmIEpTT04ucGFyc2Uoc3RvcmUpKSB8fCBbXTsKKyAgICAgICAg
fSwKKworICAgICAgICBzdHJpbmdpZnlPYmpLZXlzOiBmdW5jdGlvbiAob2JqKSB7CisgICAgICAg
ICAgICB2YXIgcyA9ICcnOworICAgICAgICAgICAgdmFyIGtleTsKKworICAgICAgICAgICAgZm9y
IChrZXkgaW4gb2JqKSB7CisgICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShr
ZXkpICYmIG9ialtrZXldKSB7CisgICAgICAgICAgICAgICAgICAgIHMgKz0ga2V5ICsgJyAnOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHMu
dHJpbSgpOworICAgICAgICB9CisgICAgfTsKKworfSkod2luZG93KTsKSW5kZXg6IFBlcmZvcm1h
bmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvdG9kb212Yy9sYWJzL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9yZWFjdC9ib3dlcl9jb21wb25lbnRzL3RvZG9tdmMtY29tbW9uL2JnLnBuZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10
eXBlID0gaW1hZ2UvcG5nCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBQZXJmb3JtYW5jZVRlc3RzL0Rv
WW91RXZlbkJlbmNoL3RvZG9tdmMvbGFicy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYm93
ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iZy5wbmcKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3Zu
Om1pbWUtdHlwZQogICArIGltYWdlL3BuZwoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFHUUFB
QUJrQWdNQUFBQU5qSDNIQUFBQURGQk1WRVh1N3U3cjYrdm01dWJmMzkrdDN6WnoKQUFBSC9VbEVR
VlI0WG5XVzBXcmlpaGFHbDBIRlNLY2tRU1VKclpoZ0pBbldaMmk4bWoxVXFibmFVNm9ZNzZaVW4w
RURaNWdPVXpGaAp6akFXbFNUTUdkcWllWVk2dEtYMVNzVks5YW9WbGNhbk9KNjcyWHYzUE1IUDR2
L1d0eGIwcHBmZDhXTHhkUE92MjZ2NXJEdVpQenZPCmkvTnJXZ2RhOEhBK2tmY2liczZGb1NFUlIv
QVlobmw1R3Q3dVpPMjlqYjNtdTdmaHkrTk9ZeU94MTJtVEo4MzZJYkNZcTFDVERDWFAKWUhrSlk4
cVZ2SkkzZEt1TXdPMW9lRDIvbnVxci9zM0Q0RjU3bnQyWFY0dlY4NU1GbmxnQUNJRm5VUzlIdThp
QW14VUVGOFNFYUJEKwpQTnFKYnpiYjVNV1gxc1Zacm5YY2FWSzVSR0t6RXdhcm91Vk54Y3dyU1Js
bkpWbVI4Vm8rWTJvNkFYUG52ank3L200K2ZGMm4vTHp1CmpjeUhkZkxqNHhBQTV6MCttbVlwb0dq
QlIzSWNSOUVCM2h1S3dZYnRTKzhrU20vakY1c2J4VlE4dlplNlNIUTJzdGt0MENVc285UXcKQ1ZG
d3BxSXdlVU0xb0tCYkVRU1cwN3RCZnp4eUZ1YjFiREg4ZFQyNW1ZN3JaOTlYSDRIM2MySUlEYm9J
VHFSNTBSTVRJNEVZNXhVaQpNZWdjYlorUnpVVEpUcVIzTnNQRlAvWTI5dzRhdVM5ZkxrRFhqRWhH
U3liTHV1cktRM2svcjhoTXpiV3I1bUU1dWhvNkw3T1QyOFcwCit6aTZ0aHluZTdWMDVnOUxFR0l4
bnZmRW9uVElqUk1zUW1NMEh2TVRqT2lITjZuTHNGQXNWVXRvc2RRV2pwcXRackgwL2pLY2JVQk4K
MVF2Sm1xN0pHc09xbVNTTFNMcWtFVVlGZ2J1SHordCtWcy96MVhJNm1BMjEzdkRuWUx4Y09YT0lz
dEVJN1JWUmtjS2lBa0ZDRENXRApVZEpEQ2RENjhQNDhmbGJ0cE91SHhXeXBrYVBlTmNMTjdHYXFB
N0pzYWVXTWJNTCt1cVdNWE11dmN5Tkp4SldCM3Qzejh1eXpjemxkClRwOXU2N2V6cTlYNHFydDZ1
djRHUkN5SytMR0lOMEM0bzI2YUVERlBFRWR4aGtWaHI5RSt2dXhzTmRvbkI4M1dkdnR6Ni95eXZa
TkkKMlNYQXdDb2JyTVNxMHU1dTJhVVJDbU1VakVoUzB1RFZXUmJmSGxkQW95NmVScndDZ3BHWUtC
S3hXSVNNNElDTEhCeHZ4RGQzN1BCcApGczN0Sk1KeE81Vkk4SWQyc1ZvRXF5QkxqTUhxbVlLUnJG
VjJ5MFlaVkt0UVF6QzRXWTNOaVhreVhLNW04MW4vZVRuNmVqVy91Ymg1CnVRTXE1RjdUakFUUUtD
ZUlva0I1UWpRZEMrRjhGUDdDc24vNzRHSW52SkhJZHY2d1FaSlZrMUgyTlZhV3BZSW1XWWFpN2pN
NFVhakIKYXFKTjdoYy82cld2bzk1ZzNGOCtqbDVPNWpObk1BZkd4WGxvSDAvektJNUhpUWlOMERF
QmphQ0lEOExoOE9hcmJNUHJTMnBvRml4Zgp6cDJUKytGcTJuT2VCNC9EOFhTNW1CaExjekVGMU9j
V2ZMU1hwc1VZSHFBWVFSUUVHdkZRZ1NqWWgvWjIrMVA4b0hGdUh6VlB5VlJMClBFelFaNVJkaGRl
UVZsVkRqMEIvTlI3WEY4NTQ1U3h2SnRadHIvOHdjUjdOYnJjUEJPckZQYlFZOEFUWmdJQUtIcEdM
MFV5SXd0elEKMmpwKzAwbGs5ejdFbTRlTmV2aDlybE5OVnhPbjlpSFVETGFjQnlWWnJ1V3hTc0ZF
VEVYUlphMWc2ZEI5dkIydmV2M3h3M1R5bjUrOQp3YTNWdXg5MkgvVDVEZmpSd05wcXBDZnE1bEJh
OEdPb3kwdGhoQXNQd0xiZE9FdVIyV0tEVEcwV3Q0V1REOEp4dTlyZU9EcURncHlSCmtGMFh3eHFL
Z1ZzNGdVZ1JhMS9CMVF3OGpBYmZ2djNvZjF3T2wxUDFkemxBMU9ObG9tZ285bzg5Z3RiQk8vTGtx
TlM1K05UeWIvcFAKUzZlWDJiZUhwK2xxRlJqQ1VCQk5MKy9YeW12ZURNVzBMQVdYZEVLSHY3alRt
ZC9VSzA1dlBQemUrd2xrS0NpdTUyRjV0eGhsZVMvaApDWkloWUdpTWhXSzZkYkNWVG1UajhWUWoy
L2xRdjZpZWwxbzd4NmN0VU1DcVdSbEZyUkF5enJKcWhGMkg1ckdDcGtDOU8reDlYQXh2Cmxvdm54
Y25ML0g0eHVia2JkN3ZMTVFoTU1PWVB4U2dSRXltY1Fya29oUVVDZmp5RVFkVzIzNkF0dTVuN24z
Q3FIYnZaMlRyT3BkdloKRkJoSlFpdlVLbENSelhKNTMyVkpoR2JXYW9xSndXSzh2TCtmalFaM3Y0
YnovdUxhTWJ1UGpyV1kzSDhIbmd1RldENUNvMFRJQXh3bAp1bjF1Q2dHYTVhSCt0bG5xZk1udHZU
dHMybzNPUm1PcjJIekRiMVBwRDVEVWt4bTFuRW51QTZIS2lNdUs3Rm9WWFZGTkdSNWZ0SVU1CnRN
NHQxWEFteThydHhiZlJEK3QyK0xDQWRVaVE1V0wvMUNra0xrdk5vM2JPM3Fpbmp6NDNxNlg0SCtI
RDB6L2I2VDFnOVJxR0ZIUkoKTG1STWk3QXMyY2lZR1VSVE1QZzFINTcvK0hwOWR6VVpMSWRuSDFm
cTlYd3lldmwyTlFZY3hXTnVmNEFKcmdWSGtnVFFsSi9rZmJUQQp3Ti9QYVBaTHFwM2FMb2tuVUs1
WU9wWjNtV3htVjRsbyt6V05XRXRWVGFvc0RDK2NaVy9nekM1NzNhZkJ4ZE5JZlpqT3I2N3ZSei9n
CmIvSVVPWkdKc0VMVVEwRzhLalJPaXJudFQvRmNZK3MwamRxbGpmaFJ2SDNjaElodXlNeSthN2Rt
NUMwVHF4a1ZXZE54UTlVTkdEOFAKLzkxL21pd0dZNzE3TlhpNXVadE9aNU9yeWRRQmxrY0ZQK2x4
c3lRUHJHOE5IVTl4aUY4ay9HREhiU0hjZVNVTk1tWEprUEFDVzVGWgp1YUFYQ21wWkxraG1Yc0po
OVBYL0VBZWlHTUVvVVFnS1FpakVpN1JBNDE1UFZQUUVDT2g4SmcrLzIvWlp3ajV2blA4T0JlQTZw
ckVGCmkwMHlDS0ZJdThpdVhKUExaVE9UaExPcm14K2o4MTlQeTd1dmZ6MUZFQk1Semt0ekxwL1hU
WkFobjV1aC9KU0hGWUlFVk1uajZtRnUKTDc3WENpZitQTTFtVTlTSG81U3ZWRXlBU2NpR2dqT2ds
NU95b2lpNytWM0UzTSs0cEF6ODFraGw5Yk0zdWZvMTcwMjduK29URUhBMgp4UEJpME04R0NJNE9z
UXlFQkRmdERTRndHbSsrYVdWVEc5L3Q5d2RidjhzYkN2bXlLZTNxY3Q2eVFETlZnNUVZSkdJd2xn
c1d0NVBwCnczVGxQSS92bm1mcnQyQTZ2dXYzNXg5NzUrQUZtdUFDWGdJTm9pak9CVVV5eXJNOHpm
bG9LSDR1dGhxdlNRNklTdVYxSmZ3WGI3YjkKNEM2NXA1QUFBQUFBU1VWT1JLNUNZSUk9Cgo=
</data>
<flag name="review"
          id="235813"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>