<?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>171464</bug_id>
          
          <creation_ts>2017-04-28 17:04:51 -0700</creation_ts>
          <short_desc>Speedometer: Add an Elm TodoMVC implementation</short_desc>
          <delta_ts>2017-05-11 19:50:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>170513</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Addy Osmani">addyo</reporter>
          <assigned_to name="Addy Osmani">addyo</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>lforschler</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1302877</commentid>
    <comment_count>0</comment_count>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-04-28 17:04:51 -0700</bug_when>
    <thetext>As part of Speedometer 2.0 (https://bugs.webkit.org/show_bug.cgi?id=170513), this adds an Elm (http://elm-lang.org/) implementation of TodoMVC to Speedometer. Elm is a functional programming language that compiles to JavaScript. It is popular in a subsection of the JavaScript ecosystem and demonstrates FP patterns we are likely to see more of the front-end community take on in the future. Including it in the benchmark as our current tracking of FP-like JS projects could be improved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302880</commentid>
    <comment_count>1</comment_count>
      <attachid>308622</attachid>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-04-28 17:06:59 -0700</bug_when>
    <thetext>Created attachment 308622
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302896</commentid>
    <comment_count>2</comment_count>
      <attachid>308629</attachid>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-04-28 17:26:02 -0700</bug_when>
    <thetext>Created attachment 308629
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307674</commentid>
    <comment_count>3</comment_count>
      <attachid>308629</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-05-11 19:16:50 -0700</bug_when>
    <thetext>Comment on attachment 308629
Patch

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

&gt; PerformanceTests/ChangeLog:7
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +        Speedometer: Add Elm TodoMVC implementation

Same comment about the blank line and inline comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307675</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-05-11 19:17:07 -0700</bug_when>
    <thetext>This patch also doesn&apos;t seem to apply on ToT for whatever reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307683</commentid>
    <comment_count>5</comment_count>
      <attachid>309848</attachid>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-05-11 19:32:58 -0700</bug_when>
    <thetext>Created attachment 309848
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307684</commentid>
    <comment_count>6</comment_count>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-05-11 19:33:56 -0700</bug_when>
    <thetext>I&apos;ve corrected the blank line and inline comments. Keeping fingers crossed on ToT this time :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307699</commentid>
    <comment_count>7</comment_count>
      <attachid>309848</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-05-11 19:50:20 -0700</bug_when>
    <thetext>Comment on attachment 309848
Patch

Clearing flags on attachment: 309848

Committed r216717: &lt;http://trac.webkit.org/changeset/216717&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307700</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-05-11 19:50:22 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308622</attachid>
            <date>2017-04-28 17:06:59 -0700</date>
            <delta_ts>2017-04-28 17:26:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171464-20170428170658.patch</filename>
            <type>text/plain</type>
            <size>942669</size>
            <attacher name="Addy Osmani">addyo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1OTU0CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGJmMTgxODE2ODc2
NDhkODA3YzE2NjQyOWQxM2MzMDZkMGM1NTk5NjQuLmE2Y2MzODYxNmI3Nzg1NDQwYmM0NGY4YzQz
ODY5MGM1YTQ1MGFhOGMgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjEzIEBACisyMDE3LTA0
LTI4ICBBZGR5IE9zbWFuaSAgPGFkZHlvc21hbmlAZ21haWwuY29tPgorCisgICAgICAgIFNwZWVk
b21ldGVyOiBBZGQgYW4gRWxtIFRvZG9NVkMgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTQ2NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICBBZGRzIGFuIEVsbSBUb2RvTVZDIGltcGxl
bSB0byBTcGVlZG9tZXRlcgorCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2J1aWxkLm1pbi5qczogQWRkZWQuCisgICAg
ICAgIChhcHAuVXRpbHMudXVpZCk6CisgICAgICAgIChhcHAuVXRpbHMucGx1cmFsaXplKToKKyAg
ICAgICAgKGFwcC5VdGlscy5leHRlbmQpOgorICAgICAgICAoYXBwLlRvZG9Nb2RlbCk6CisgICAg
ICAgIChhcHAuVG9kb01vZGVsLnByb3RvdHlwZS5zdWJzY3JpYmUpOgorICAgICAgICAoYXBwLlRv
ZG9Nb2RlbC5wcm90b3R5cGUuaW5mb3JtKToKKyAgICAgICAgKGFwcC5Ub2RvTW9kZWwucHJvdG90
eXBlLmFkZFRvZG8pOgorICAgICAgICAoYXBwLlRvZG9Nb2RlbC5wcm90b3R5cGUudG9nZ2xlQWxs
KToKKyAgICAgICAgKGFwcC5Ub2RvTW9kZWwucHJvdG90eXBlLnRvZ2dsZSk6CisgICAgICAgIChh
cHAuVG9kb01vZGVsLnByb3RvdHlwZS5kZXN0cm95KToKKyAgICAgICAgKGFwcC5Ub2RvTW9kZWwu
cHJvdG90eXBlLnNhdmUpOgorICAgICAgICAoYXBwLlRvZG9Nb2RlbC5wcm90b3R5cGUuY2xlYXJD
b21wbGV0ZWQpOgorICAgICAgICAoVG9kb0Zvb3Rlci5SZWFjdC5jcmVhdGVDbGFzcy5yZW5kZXIp
OgorICAgICAgICAoVG9kb0l0ZW0uUmVhY3QuY3JlYXRlQ2xhc3MuaGFuZGxlU3VibWl0KToKKyAg
ICAgICAgKFRvZG9JdGVtLlJlYWN0LmNyZWF0ZUNsYXNzLmhhbmRsZUVkaXQpOgorICAgICAgICAo
VG9kb0l0ZW0uUmVhY3QuY3JlYXRlQ2xhc3MuaGFuZGxlS2V5RG93bik6CisgICAgICAgIChUb2Rv
SXRlbS5SZWFjdC5jcmVhdGVDbGFzcy5oYW5kbGVDaGFuZ2UpOgorICAgICAgICAoVG9kb0l0ZW0u
UmVhY3QuY3JlYXRlQ2xhc3MuZ2V0SW5pdGlhbFN0YXRlKToKKyAgICAgICAgKFRvZG9JdGVtLlJl
YWN0LmNyZWF0ZUNsYXNzLnNob3VsZENvbXBvbmVudFVwZGF0ZSk6CisgICAgICAgIChUb2RvSXRl
bS5SZWFjdC5jcmVhdGVDbGFzcy5jb21wb25lbnREaWRVcGRhdGUpOgorICAgICAgICAoVG9kb0l0
ZW0uUmVhY3QuY3JlYXRlQ2xhc3MucmVuZGVyKToKKyAgICAgICAgKFRvZG9BcHAuUmVhY3QuY3Jl
YXRlQ2xhc3MuZ2V0SW5pdGlhbFN0YXRlKToKKyAgICAgICAgKFRvZG9BcHAuUmVhY3QuY3JlYXRl
Q2xhc3MuY29tcG9uZW50RGlkTW91bnQpOgorICAgICAgICAoVG9kb0FwcC5SZWFjdC5jcmVhdGVD
bGFzcy5oYW5kbGVDaGFuZ2UpOgorICAgICAgICAoVG9kb0FwcC5SZWFjdC5jcmVhdGVDbGFzcy5o
YW5kbGVOZXdUb2RvS2V5RG93bik6CisgICAgICAgIChUb2RvQXBwLlJlYWN0LmNyZWF0ZUNsYXNz
LnRvZ2dsZUFsbCk6CisgICAgICAgIChUb2RvQXBwLlJlYWN0LmNyZWF0ZUNsYXNzLnRvZ2dsZSk6
CisgICAgICAgIChUb2RvQXBwLlJlYWN0LmNyZWF0ZUNsYXNzLmRlc3Ryb3kpOgorICAgICAgICAo
VG9kb0FwcC5SZWFjdC5jcmVhdGVDbGFzcy5lZGl0KToKKyAgICAgICAgKFRvZG9BcHAuUmVhY3Qu
Y3JlYXRlQ2xhc3Muc2F2ZSk6CisgICAgICAgIChUb2RvQXBwLlJlYWN0LmNyZWF0ZUNsYXNzLmNh
bmNlbCk6CisgICAgICAgIChUb2RvQXBwLlJlYWN0LmNyZWF0ZUNsYXNzLmNsZWFyQ29tcGxldGVk
KToKKyAgICAgICAgKFRvZG9BcHAuUmVhY3QuY3JlYXRlQ2xhc3MucmVuZGVyKToKKyAgICAgICAg
KHJlbmRlcik6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2luZGV4Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIFNwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9qcy9h
cHAuanN4OiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvbGljZW5zZS5tZDogQWRkZWQuCisgICAgICAgICog
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0
L25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanM6IEFkZGVkLgorICAgICAgICAoY2xhc3NO
YW1lcyk6CisgICAgICAgIChlbHNlKToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL2NsYXNzbmFt
ZXMvZGVkdXBlLmpzOiBBZGRlZC4KKyAgICAgICAgKF9wYXJzZUFycmF5KToKKyAgICAgICAgKF9w
YXJzZU51bWJlcik6CisgICAgICAgIChfcGFyc2VPYmplY3QpOgorICAgICAgICAoX3BhcnNlU3Ry
aW5nKToKKyAgICAgICAgKF9wYXJzZSk6CisgICAgICAgIChfY2xhc3NOYW1lcyk6CisgICAgICAg
IChjbGFzc05hbWVzKToKKyAgICAgICAgKGVsc2UpOgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMv
Y2xhc3NuYW1lcy9pbmRleC5qczogQWRkZWQuCisgICAgICAgIChjbGFzc05hbWVzKToKKyAgICAg
ICAgKGVsc2UpOgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2Rpc3QvcmVhY3Qt
ZG9tLm1pbi5qczogQWRkZWQuCisgICAgICAgIChyZXR1cm4ubyk6CisgICAgICAgIChyZXR1cm4u
cmV0dXJuLmUpOgorICAgICAgICAocmV0dXJuLik6CisgICAgICAgIChyZXR1cm4pOgorICAgICAg
ICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9y
ZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QvZGlzdC9yZWFjdC13aXRoLWFkZG9ucy5qczogQWRkZWQu
CisgICAgICAgIChlbHNlKToKKyAgICAgICAgKGVsc2UuZWxzZSk6CisgICAgICAgIChzKToKKyAg
ICAgICAgKHJldHVybi5lKToKKyAgICAgICAgKG1ha2VQcmVmaXhNYXApOgorICAgICAgICAoZ2V0
VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUpOgorICAgICAgICAoMSk6CisgICAgICAgIChlc2NhcGUp
OgorICAgICAgICAodW5lc2NhcGUpOgorICAgICAgICAoMik6CisgICAgICAgIChMaW5rZWRTdGF0
ZU1peGluLmxpbmtTdGF0ZSk6CisgICAgICAgICgzKToKKyAgICAgICAgKG9uZUFyZ3VtZW50UG9v
bGVyKToKKyAgICAgICAgKHR3b0FyZ3VtZW50UG9vbGVyKToKKyAgICAgICAgKHRocmVlQXJndW1l
bnRQb29sZXIpOgorICAgICAgICAoZm91ckFyZ3VtZW50UG9vbGVyKToKKyAgICAgICAgKHN0YW5k
YXJkUmVsZWFzZXIpOgorICAgICAgICAoYWRkUG9vbGluZ1RvKToKKyAgICAgICAgKDQpOgorICAg
ICAgICAoX19zcHJlYWQpOgorICAgICAgICAoUmVhY3QuY3JlYXRlTWl4aW4pOgorICAgICAgICAo
Z2V0UmVhY3RET00pOgorICAgICAgICAoZXhwb3J0cy5nZXRSZWFjdFBlcmYpOgorICAgICAgICAo
ZXhwb3J0cy5nZXRSZWFjdFRlc3RVdGlscyk6CisgICAgICAgICg2KToKKyAgICAgICAgKF9jbGFz
c0NhbGxDaGVjayk6CisgICAgICAgIChfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybik6CisgICAg
ICAgIChfaW5oZXJpdHMpOgorICAgICAgICAoY3JlYXRlVHJhbnNpdGlvblRpbWVvdXRQcm9wVmFs
aWRhdG9yKToKKyAgICAgICAgKFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwKToKKyAgICAgICAgKFJl
YWN0Q1NTVHJhbnNpdGlvbkdyb3VwLnByb3RvdHlwZS5yZW5kZXIpOgorICAgICAgICAoNyk6Cisg
ICAgICAgIChSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkLik6CisgICAgICAgIChSZWFjdENT
U1RyYW5zaXRpb25Hcm91cENoaWxkKToKKyAgICAgICAgKFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3Vw
Q2hpbGQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxNb3VudCk6CisgICAgICAgIChSZWFjdENTU1Ry
YW5zaXRpb25Hcm91cENoaWxkLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudCk6CisgICAgICAg
IChSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5t
b3VudCk6CisgICAgICAgIChSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkLnByb3RvdHlwZS5y
ZW5kZXIpOgorICAgICAgICAoOCk6CisgICAgICAgIChlc2NhcGVVc2VyUHJvdmlkZWRLZXkpOgor
ICAgICAgICAoRm9yRWFjaEJvb2tLZWVwaW5nKToKKyAgICAgICAgKEZvckVhY2hCb29rS2VlcGlu
Zy5wcm90b3R5cGUuZGVzdHJ1Y3Rvcik6CisgICAgICAgIChmb3JFYWNoU2luZ2xlQ2hpbGQpOgor
ICAgICAgICAoZm9yRWFjaENoaWxkcmVuKToKKyAgICAgICAgKE1hcEJvb2tLZWVwaW5nKToKKyAg
ICAgICAgKE1hcEJvb2tLZWVwaW5nLnByb3RvdHlwZS5kZXN0cnVjdG9yKToKKyAgICAgICAgKG1h
cFNpbmdsZUNoaWxkSW50b0NvbnRleHQpOgorICAgICAgICAobWFwSW50b1dpdGhLZXlQcmVmaXhJ
bnRlcm5hbCk6CisgICAgICAgIChtYXBDaGlsZHJlbik6CisgICAgICAgIChmb3JFYWNoU2luZ2xl
Q2hpbGREdW1teSk6CisgICAgICAgIChjb3VudENoaWxkcmVuKToKKyAgICAgICAgKHRvQXJyYXkp
OgorICAgICAgICAoOSk6CisgICAgICAgIChpZGVudGl0eSk6CisgICAgICAgIChSRVNFUlZFRF9T
UEVDX0tFWVMuZGlzcGxheU5hbWUpOgorICAgICAgICAoUkVTRVJWRURfU1BFQ19LRVlTLm1peGlu
cyk6CisgICAgICAgIChSRVNFUlZFRF9TUEVDX0tFWVMuY2hpbGRDb250ZXh0VHlwZXMpOgorICAg
ICAgICAoUkVTRVJWRURfU1BFQ19LRVlTLmNvbnRleHRUeXBlcyk6CisgICAgICAgIChSRVNFUlZF
RF9TUEVDX0tFWVMuZ2V0RGVmYXVsdFByb3BzKToKKyAgICAgICAgKFJFU0VSVkVEX1NQRUNfS0VZ
Uy5wcm9wVHlwZXMpOgorICAgICAgICAoUkVTRVJWRURfU1BFQ19LRVlTLnN0YXRpY3MpOgorICAg
ICAgICAoUkVTRVJWRURfU1BFQ19LRVlTLmF1dG9iaW5kKToKKyAgICAgICAgKHZhbGlkYXRlTWV0
aG9kT3ZlcnJpZGUpOgorICAgICAgICAobWl4U3BlY0ludG9Db21wb25lbnQpOgorICAgICAgICAo
bWl4U3RhdGljU3BlY0ludG9Db21wb25lbnQpOgorICAgICAgICAobWVyZ2VJbnRvV2l0aE5vRHVw
bGljYXRlS2V5cyk6CisgICAgICAgIChyZXR1cm4ubWVyZ2VkUmVzdWx0KToKKyAgICAgICAgKGNy
ZWF0ZU1lcmdlZFJlc3VsdEZ1bmN0aW9uKToKKyAgICAgICAgKHJldHVybi5jaGFpbmVkRnVuY3Rp
b24pOgorICAgICAgICAoY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKToKKyAgICAgICAgKGJvdW5kTWV0
aG9kLmJpbmQpOgorICAgICAgICAoYmluZEF1dG9CaW5kTWV0aG9kKToKKyAgICAgICAgKGJpbmRB
dXRvQmluZE1ldGhvZHMpOgorICAgICAgICAoUmVhY3RDbGFzc01peGluLnJlcGxhY2VTdGF0ZSk6
CisgICAgICAgIChSZWFjdENsYXNzTWl4aW4uaXNNb3VudGVkKToKKyAgICAgICAgKFJlYWN0Q2xh
c3NDb21wb25lbnQpOgorICAgICAgICAoUmVhY3RDbGFzcy5jcmVhdGVDbGFzcyk6CisgICAgICAg
IChSZWFjdENsYXNzLmluamVjdGlvbi5pbmplY3RNaXhpbik6CisgICAgICAgICgxMCk6CisgICAg
ICAgIChSZWFjdENvbXBvbmVudCk6CisgICAgICAgIChSZWFjdENvbXBvbmVudC5wcm90b3R5cGUu
c2V0U3RhdGUpOgorICAgICAgICAoUmVhY3RDb21wb25lbnQucHJvdG90eXBlLmZvcmNlVXBkYXRl
KToKKyAgICAgICAgKGRlZmluZURlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgIChnZXQgZm9y
KToKKyAgICAgICAgKDExKToKKyAgICAgICAgKGlzTmF0aXZlKToKKyAgICAgICAgKDEyKToKKyAg
ICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0L2Rpc3QvcmVhY3Qtd2l0aC1hZGRvbnMubWluLmpz
OiBBZGRlZC4KKyAgICAgICAgKG8pOgorICAgICAgICAocmV0dXJuLmUpOgorICAgICAgICAocik6
CisgICAgICAgICgxKToKKyAgICAgICAgKDIpOgorICAgICAgICAoaS5saW5rU3RhdGUpOgorICAg
ICAgICAoMyk6CisgICAgICAgIChpKToKKyAgICAgICAgKGEpOgorICAgICAgICAocyk6CisgICAg
ICAgICh1KToKKyAgICAgICAgKHApOgorICAgICAgICAoNCk6CisgICAgICAgIChtLmNyZWF0ZU1p
eGluKToKKyAgICAgICAgKDUpOgorICAgICAgICAoNik6CisgICAgICAgICh0LmkuX3dyYXBDaGls
ZCk6CisgICAgICAgICh0LnByb3RvdHlwZS5yZW5kZXIpOgorICAgICAgICAoZCk6CisgICAgICAg
ICg3KToKKyAgICAgICAgKHQuYyk6CisgICAgICAgICh0LmkudHJhbnNpdGlvbik6CisgICAgICAg
ICh0LmkucXVldWVDbGFzc0FuZE5vZGUpOgorICAgICAgICAodC5pLmZsdXNoQ2xhc3NOYW1lQW5k
Tm9kZVF1ZXVlKToKKyAgICAgICAgKHQuaS5jb21wb25lbnRXaWxsQXBwZWFyKToKKyAgICAgICAg
KHQuaS5jb21wb25lbnRXaWxsRW50ZXIpOgorICAgICAgICAodC5pLmNvbXBvbmVudFdpbGxMZWF2
ZSk6CisgICAgICAgICh0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsTW91bnQpOgorICAgICAgICAo
dC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQpOgorICAgICAgICAodC5wcm90b3R5cGUuY29t
cG9uZW50V2lsbFVubW91bnQpOgorICAgICAgICAoaCk6CisgICAgICAgICg4KToKKyAgICAgICAg
KGwpOgorICAgICAgICAoZik6CisgICAgICAgIChvLnByb3RvdHlwZS5kZXN0cnVjdG9yKToKKyAg
ICAgICAgKHMucHJvdG90eXBlLmRlc3RydWN0b3IpOgorICAgICAgICAoOSk6CisgICAgICAgIChj
KToKKyAgICAgICAgKF8uZGlzcGxheU5hbWUpOgorICAgICAgICAoXy5taXhpbnMpOgorICAgICAg
ICAoXy5jaGlsZENvbnRleHRUeXBlcyk6CisgICAgICAgIChfLmNvbnRleHRUeXBlcyk6CisgICAg
ICAgIChfLmdldERlZmF1bHRQcm9wcyk6CisgICAgICAgIChfLnByb3BUeXBlcyk6CisgICAgICAg
IChfLnN0YXRpY3MpOgorICAgICAgICAoXy5hdXRvYmluZCk6CisgICAgICAgICh3LnJlcGxhY2VT
dGF0ZSk6CisgICAgICAgICh3LmlzTW91bnRlZCk6CisgICAgICAgIChBKToKKyAgICAgICAgKFQu
Y3JlYXRlQ2xhc3MpOgorICAgICAgICAoVC5pbmplY3Rpb24uaW5qZWN0TWl4aW4pOgorICAgICAg
ICAoMTApOgorICAgICAgICAoci5wcm90b3R5cGUuc2V0U3RhdGUpOgorICAgICAgICAoci5wcm90
b3R5cGUuZm9yY2VVcGRhdGUpOgorICAgICAgICAoMTEpOgorICAgICAgICAoby5zaG91bGRDb21w
b25lbnRVcGRhdGUpOgorICAgICAgICAoMTIpOgorICAgICAgICAoMTMpOgorICAgICAgICAoMTQp
OgorICAgICAgICAocC5jcmVhdGVFbGVtZW50KToKKyAgICAgICAgKHAuY3JlYXRlRmFjdG9yeSk6
CisgICAgICAgIChwLmNsb25lQW5kUmVwbGFjZUtleSk6CisgICAgICAgIChwLmNsb25lRWxlbWVu
dCk6CisgICAgICAgIChwLmlzVmFsaWRFbGVtZW50KToKKyAgICAgICAgKDE1KToKKyAgICAgICAg
KDE2KToKKyAgICAgICAgKDE3KToKKyAgICAgICAgKDE4KToKKyAgICAgICAgKDE5KToKKyAgICAg
ICAgKDIwKToKKyAgICAgICAgKDIxKToKKyAgICAgICAgKHQuZXhwb3J0cy5pKToKKyAgICAgICAg
KDIyKToKKyAgICAgICAgKG8uY3JlYXRlU3RhdGVTZXR0ZXIpOgorICAgICAgICAoby5jcmVhdGVT
dGF0ZUtleVNldHRlcik6CisgICAgICAgIChvLk1peGluLmNyZWF0ZVN0YXRlU2V0dGVyKToKKyAg
ICAgICAgKG8uTWl4aW4uY3JlYXRlU3RhdGVLZXlTZXR0ZXIpOgorICAgICAgICAoMjMpOgorICAg
ICAgICAoby5nZXRDaGlsZE1hcHBpbmcpOgorICAgICAgICAoby4pOgorICAgICAgICAoby5tZXJn
ZUNoaWxkTWFwcGluZ3MpOgorICAgICAgICAoMjQpOgorICAgICAgICAodS5hZGRFbmRFdmVudExp
c3RlbmVyKToKKyAgICAgICAgKHUucmVtb3ZlRW5kRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICgy
NSk6CisgICAgICAgICh0LmkucGVyZm9ybUFwcGVhcik6CisgICAgICAgICh0LmkuX2hhbmRsZURv
bmVBcHBlYXJpbmcpOgorICAgICAgICAodC5pLnBlcmZvcm1FbnRlcik6CisgICAgICAgICh0Lmku
X2hhbmRsZURvbmVFbnRlcmluZyk6CisgICAgICAgICh0LmkucGVyZm9ybUxlYXZlKToKKyAgICAg
ICAgKHQuaS5faGFuZGxlRG9uZUxlYXZpbmcpOgorICAgICAgICAodC5wcm90b3R5cGUuY29tcG9u
ZW50V2lsbFJlY2VpdmVQcm9wcyk6CisgICAgICAgICh0LnByb3RvdHlwZS5jb21wb25lbnREaWRV
cGRhdGUpOgorICAgICAgICAoMjYpOgorICAgICAgICAoMjcpOgorICAgICAgICAoMjgpOgorICAg
ICAgICAoMjkpOgorICAgICAgICAoMzApOgorICAgICAgICAoMzEpOgorICAgICAgICAoY2FsbCk6
CisgICAgICAgICgzMik6CisgICAgICAgICgzMyk6CisgICAgICAgICgzNCk6CisgICAgICAgICgz
NSk6CisgICAgICAgICgzNik6CisgICAgICAgICgzNyk6CisgICAgICAgIChpLmFkZENsYXNzKToK
KyAgICAgICAgKGkucmVtb3ZlQ2xhc3MpOgorICAgICAgICAoaS5jb25kaXRpb25DbGFzcyk6Cisg
ICAgICAgIChpLmhhc0NsYXNzKToKKyAgICAgICAgKGkubWF0Y2hlc1NlbGVjdG9yKToKKyAgICAg
ICAgKDM4KToKKyAgICAgICAgKDM5KToKKyAgICAgICAgKG8udGhhdFJldHVybnNUaGlzKToKKyAg
ICAgICAgKG8udGhhdFJldHVybnNBcmd1bWVudCk6CisgICAgICAgICg0MCk6CisgICAgICAgICg0
MSk6CisgICAgICAgICg0Mik6CisgICAgICAgICg0Myk6CisgICAgICAgICg0NCk6CisgICAgICAg
ICh0cnkpOgorICAgICAgICAodC5leHBvcnRzKToKKyAgICAgICAgKE9iamVjdC5hc3NpZ24pOgor
ICAgICAgICAoNDUpOgorICAgICAgICAoNDYpOgorICAgICAgICAoNDcpOgorICAgICAgICAocmV0
dXJuLnIpOgorICAgICAgICAoYy5uKToKKyAgICAgICAgKHAudCk6CisgICAgICAgIChsLnQpOgor
ICAgICAgICAoZi50KToKKyAgICAgICAgKGQudCk6CisgICAgICAgIChoLnQpOgorICAgICAgICAo
eS50KToKKyAgICAgICAgKHkpOgorICAgICAgICAodi50KToKKyAgICAgICAgKHYpOgorICAgICAg
ICAobSk6CisgICAgICAgIChFKToKKyAgICAgICAgKGIpOgorICAgICAgICAoXyk6CisgICAgICAg
ICh4LmFueSk6CisgICAgICAgICh4Lik6CisgICAgICAgICh4LmVsZW1lbnQpOgorICAgICAgICAo
eC5ub2RlKToKKyAgICAgICAgKDQ4KToKKyAgICAgICAgKDQ5KToKKyAgICAgICAgKiBTcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9t
b2R1bGVzL3JlYWN0L2Rpc3QvcmVhY3QuanM6IEFkZGVkLgorICAgICAgICAoZWxzZSk6CisgICAg
ICAgIChlbHNlLmVsc2UpOgorICAgICAgICAocyk6CisgICAgICAgIChyZXR1cm4uZSk6CisgICAg
ICAgIChlc2NhcGUpOgorICAgICAgICAodW5lc2NhcGUpOgorICAgICAgICAoMSk6CisgICAgICAg
IChvbmVBcmd1bWVudFBvb2xlcik6CisgICAgICAgICh0d29Bcmd1bWVudFBvb2xlcik6CisgICAg
ICAgICh0aHJlZUFyZ3VtZW50UG9vbGVyKToKKyAgICAgICAgKGZvdXJBcmd1bWVudFBvb2xlcik6
CisgICAgICAgIChzdGFuZGFyZFJlbGVhc2VyKToKKyAgICAgICAgKGFkZFBvb2xpbmdUbyk6Cisg
ICAgICAgICgyKToKKyAgICAgICAgKF9fc3ByZWFkKToKKyAgICAgICAgKFJlYWN0LmNyZWF0ZU1p
eGluKToKKyAgICAgICAgKGVzY2FwZVVzZXJQcm92aWRlZEtleSk6CisgICAgICAgIChGb3JFYWNo
Qm9va0tlZXBpbmcpOgorICAgICAgICAoRm9yRWFjaEJvb2tLZWVwaW5nLnByb3RvdHlwZS5kZXN0
cnVjdG9yKToKKyAgICAgICAgKGZvckVhY2hTaW5nbGVDaGlsZCk6CisgICAgICAgIChmb3JFYWNo
Q2hpbGRyZW4pOgorICAgICAgICAoTWFwQm9va0tlZXBpbmcpOgorICAgICAgICAoTWFwQm9va0tl
ZXBpbmcucHJvdG90eXBlLmRlc3RydWN0b3IpOgorICAgICAgICAobWFwU2luZ2xlQ2hpbGRJbnRv
Q29udGV4dCk6CisgICAgICAgIChtYXBJbnRvV2l0aEtleVByZWZpeEludGVybmFsKToKKyAgICAg
ICAgKG1hcENoaWxkcmVuKToKKyAgICAgICAgKGZvckVhY2hTaW5nbGVDaGlsZER1bW15KToKKyAg
ICAgICAgKGNvdW50Q2hpbGRyZW4pOgorICAgICAgICAodG9BcnJheSk6CisgICAgICAgICg0KToK
KyAgICAgICAgKGlkZW50aXR5KToKKyAgICAgICAgKFJFU0VSVkVEX1NQRUNfS0VZUy5kaXNwbGF5
TmFtZSk6CisgICAgICAgIChSRVNFUlZFRF9TUEVDX0tFWVMubWl4aW5zKToKKyAgICAgICAgKFJF
U0VSVkVEX1NQRUNfS0VZUy5jaGlsZENvbnRleHRUeXBlcyk6CisgICAgICAgIChSRVNFUlZFRF9T
UEVDX0tFWVMuY29udGV4dFR5cGVzKToKKyAgICAgICAgKFJFU0VSVkVEX1NQRUNfS0VZUy5nZXRE
ZWZhdWx0UHJvcHMpOgorICAgICAgICAoUkVTRVJWRURfU1BFQ19LRVlTLnByb3BUeXBlcyk6Cisg
ICAgICAgIChSRVNFUlZFRF9TUEVDX0tFWVMuc3RhdGljcyk6CisgICAgICAgIChSRVNFUlZFRF9T
UEVDX0tFWVMuYXV0b2JpbmQpOgorICAgICAgICAodmFsaWRhdGVNZXRob2RPdmVycmlkZSk6Cisg
ICAgICAgIChtaXhTcGVjSW50b0NvbXBvbmVudCk6CisgICAgICAgIChtaXhTdGF0aWNTcGVjSW50
b0NvbXBvbmVudCk6CisgICAgICAgIChtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzKToKKyAg
ICAgICAgKHJldHVybi5tZXJnZWRSZXN1bHQpOgorICAgICAgICAoY3JlYXRlTWVyZ2VkUmVzdWx0
RnVuY3Rpb24pOgorICAgICAgICAocmV0dXJuLmNoYWluZWRGdW5jdGlvbik6CisgICAgICAgIChj
cmVhdGVDaGFpbmVkRnVuY3Rpb24pOgorICAgICAgICAoYm91bmRNZXRob2QuYmluZCk6CisgICAg
ICAgIChiaW5kQXV0b0JpbmRNZXRob2QpOgorICAgICAgICAoYmluZEF1dG9CaW5kTWV0aG9kcyk6
CisgICAgICAgIChSZWFjdENsYXNzTWl4aW4ucmVwbGFjZVN0YXRlKToKKyAgICAgICAgKFJlYWN0
Q2xhc3NNaXhpbi5pc01vdW50ZWQpOgorICAgICAgICAoUmVhY3RDbGFzc0NvbXBvbmVudCk6Cisg
ICAgICAgIChSZWFjdENsYXNzLmNyZWF0ZUNsYXNzKToKKyAgICAgICAgKFJlYWN0Q2xhc3MuaW5q
ZWN0aW9uLmluamVjdE1peGluKToKKyAgICAgICAgKDUpOgorICAgICAgICAoUmVhY3RDb21wb25l
bnQpOgorICAgICAgICAoUmVhY3RDb21wb25lbnQucHJvdG90eXBlLnNldFN0YXRlKToKKyAgICAg
ICAgKFJlYWN0Q29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSk6CisgICAgICAgIChkZWZp
bmVEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAoZ2V0IGZvcik6CisgICAgICAgICg2KToK
KyAgICAgICAgKGlzTmF0aXZlKToKKyAgICAgICAgKDcpOgorICAgICAgICAqIFNwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVs
ZXMvcmVhY3QvZGlzdC9yZWFjdC5taW4uanM6IEFkZGVkLgorICAgICAgICAobyk6CisgICAgICAg
IChyZXR1cm4udCk6CisgICAgICAgIChyKToKKyAgICAgICAgKDEpOgorICAgICAgICAoaSk6Cisg
ICAgICAgICh1KToKKyAgICAgICAgKGEpOgorICAgICAgICAocyk6CisgICAgICAgIChsKToKKyAg
ICAgICAgKDIpOgorICAgICAgICAobS5jcmVhdGVNaXhpbik6CisgICAgICAgICgzKToKKyAgICAg
ICAgKGYpOgorICAgICAgICAocCk6CisgICAgICAgIChkKToKKyAgICAgICAgKG8ucHJvdG90eXBl
LmRlc3RydWN0b3IpOgorICAgICAgICAoYS5wcm90b3R5cGUuZGVzdHJ1Y3Rvcik6CisgICAgICAg
ICg0KToKKyAgICAgICAgKGMpOgorICAgICAgICAoeC5kaXNwbGF5TmFtZSk6CisgICAgICAgICh4
Lm1peGlucyk6CisgICAgICAgICh4LmNoaWxkQ29udGV4dFR5cGVzKToKKyAgICAgICAgKHguY29u
dGV4dFR5cGVzKToKKyAgICAgICAgKHguZ2V0RGVmYXVsdFByb3BzKToKKyAgICAgICAgKHgucHJv
cFR5cGVzKToKKyAgICAgICAgKHguc3RhdGljcyk6CisgICAgICAgICh4LmF1dG9iaW5kKToKKyAg
ICAgICAgKF8ucmVwbGFjZVN0YXRlKToKKyAgICAgICAgKF8uaXNNb3VudGVkKToKKyAgICAgICAg
KFApOgorICAgICAgICAody5jcmVhdGVDbGFzcyk6CisgICAgICAgICh3LmluamVjdGlvbi5pbmpl
Y3RNaXhpbik6CisgICAgICAgICg1KToKKyAgICAgICAgKHIucHJvdG90eXBlLnNldFN0YXRlKToK
KyAgICAgICAgKHIucHJvdG90eXBlLmZvcmNlVXBkYXRlKToKKyAgICAgICAgKDYpOgorICAgICAg
ICAoNyk6CisgICAgICAgICg4KToKKyAgICAgICAgKGwuY3JlYXRlRWxlbWVudCk6CisgICAgICAg
IChsLmNyZWF0ZUZhY3RvcnkpOgorICAgICAgICAobC5jbG9uZUFuZFJlcGxhY2VLZXkpOgorICAg
ICAgICAobC5jbG9uZUVsZW1lbnQpOgorICAgICAgICAobC5pc1ZhbGlkRWxlbWVudCk6CisgICAg
ICAgICg5KToKKyAgICAgICAgKDEwKToKKyAgICAgICAgKDExKToKKyAgICAgICAgKDEyKToKKyAg
ICAgICAgKDEzKToKKyAgICAgICAgKGUuZXhwb3J0cy5pKToKKyAgICAgICAgKDE0KToKKyAgICAg
ICAgKDE1KToKKyAgICAgICAgKDE2KToKKyAgICAgICAgKDE3KToKKyAgICAgICAgKDE4KToKKyAg
ICAgICAgKDE5KToKKyAgICAgICAgKDIwKToKKyAgICAgICAgKDIxKToKKyAgICAgICAgKG8udGhh
dFJldHVybnNUaGlzKToKKyAgICAgICAgKG8udGhhdFJldHVybnNBcmd1bWVudCk6CisgICAgICAg
ICgyMik6CisgICAgICAgICgyMyk6CisgICAgICAgICgyNCk6CisgICAgICAgICgyNSk6CisgICAg
ICAgICh0cnkpOgorICAgICAgICAoZS5leHBvcnRzKToKKyAgICAgICAgKE9iamVjdC5hc3NpZ24p
OgorICAgICAgICAoMjYpOgorICAgICAgICAoMjcpOgorICAgICAgICAoMjgpOgorICAgICAgICAo
cmV0dXJuLnIpOgorICAgICAgICAoYy5uKToKKyAgICAgICAgKGwuZSk6CisgICAgICAgIChmLmUp
OgorICAgICAgICAocC5lKToKKyAgICAgICAgKGQuZSk6CisgICAgICAgICh5LmUpOgorICAgICAg
ICAoeSk6CisgICAgICAgIChoLmUpOgorICAgICAgICAoaCk6CisgICAgICAgICh2LmUpOgorICAg
ICAgICAodik6CisgICAgICAgIChtKToKKyAgICAgICAgKGIpOgorICAgICAgICAoRSk6CisgICAg
ICAgICh4KToKKyAgICAgICAgKE4uYW55KToKKyAgICAgICAgKE4uKToKKyAgICAgICAgKE4uZWxl
bWVudCk6CisgICAgICAgIChOLm5vZGUpOgorICAgICAgICAoMjkpOgorICAgICAgICAoMzApOgor
ICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4LmNzczogQWRkZWQu
CisgICAgICAgIChodG1sLCk6CisgICAgICAgIChidXR0b24pOgorICAgICAgICAoYm9keSk6Cisg
ICAgICAgICg6Zm9jdXMpOgorICAgICAgICAoLmhpZGRlbik6CisgICAgICAgICgudG9kb2FwcCk6
CisgICAgICAgICgudG9kb2FwcCBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcik6Cisg
ICAgICAgICgudG9kb2FwcCBpbnB1dDo6LW1vei1wbGFjZWhvbGRlcik6CisgICAgICAgICgudG9k
b2FwcCBpbnB1dDo6aW5wdXQtcGxhY2Vob2xkZXIpOgorICAgICAgICAoLnRvZG9hcHAgaDEpOgor
ICAgICAgICAoLm5ldy10b2RvLCk6CisgICAgICAgICgubmV3LXRvZG8pOgorICAgICAgICAoLm1h
aW4pOgorICAgICAgICAoLnRvZ2dsZS1hbGwpOgorICAgICAgICAoLnRvZ2dsZS1hbGwgKyBsYWJl
bCk6CisgICAgICAgICgudG9nZ2xlLWFsbCArIGxhYmVsOmJlZm9yZSk6CisgICAgICAgICgudG9n
Z2xlLWFsbDpjaGVja2VkICsgbGFiZWw6YmVmb3JlKToKKyAgICAgICAgKC50b2RvLWxpc3QpOgor
ICAgICAgICAoLnRvZG8tbGlzdCBsaSk6CisgICAgICAgICgudG9kby1saXN0IGxpOmxhc3QtY2hp
bGQpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaS5lZGl0aW5nKToKKyAgICAgICAgKC50b2RvLWxp
c3QgbGkuZWRpdGluZyAuZWRpdCk6CisgICAgICAgICgudG9kby1saXN0IGxpLmVkaXRpbmcgLnZp
ZXcpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaSAudG9nZ2xlKToKKyAgICAgICAgKC50b2RvLWxp
c3QgbGkgLnRvZ2dsZSArIGxhYmVsKToKKyAgICAgICAgKC50b2RvLWxpc3QgbGkgLnRvZ2dsZTpj
aGVja2VkICsgbGFiZWwpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaSBsYWJlbCk6CisgICAgICAg
ICgudG9kby1saXN0IGxpLmNvbXBsZXRlZCBsYWJlbCk6CisgICAgICAgICgudG9kby1saXN0IGxp
IC5kZXN0cm95KToKKyAgICAgICAgKC50b2RvLWxpc3QgbGkgLmRlc3Ryb3k6aG92ZXIpOgorICAg
ICAgICAoLnRvZG8tbGlzdCBsaSAuZGVzdHJveTphZnRlcik6CisgICAgICAgICgudG9kby1saXN0
IGxpOmhvdmVyIC5kZXN0cm95KToKKyAgICAgICAgKC50b2RvLWxpc3QgbGkgLmVkaXQpOgorICAg
ICAgICAoLnRvZG8tbGlzdCBsaS5lZGl0aW5nOmxhc3QtY2hpbGQpOgorICAgICAgICAoLmZvb3Rl
cik6CisgICAgICAgICguZm9vdGVyOmJlZm9yZSk6CisgICAgICAgICgudG9kby1jb3VudCk6Cisg
ICAgICAgICgudG9kby1jb3VudCBzdHJvbmcpOgorICAgICAgICAoLmZpbHRlcnMpOgorICAgICAg
ICAoLmZpbHRlcnMgbGkpOgorICAgICAgICAoLmZpbHRlcnMgbGkgYSk6CisgICAgICAgICguZmls
dGVycyBsaSBhOmhvdmVyKToKKyAgICAgICAgKC5maWx0ZXJzIGxpIGEuc2VsZWN0ZWQpOgorICAg
ICAgICAoLmNsZWFyLWNvbXBsZXRlZCwpOgorICAgICAgICAoLmNsZWFyLWNvbXBsZXRlZDpob3Zl
cik6CisgICAgICAgICguaW5mbyk6CisgICAgICAgICguaW5mbyBwKToKKyAgICAgICAgKC5pbmZv
IGEpOgorICAgICAgICAoLmluZm8gYTpob3Zlcik6CisgICAgICAgIChAbWVkaWEgc2NyZWVuIGFu
ZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApKToKKyAgICAgICAgKC50b2dnbGUt
YWxsLCk6CisgICAgICAgIChAbWVkaWEgKG1heC13aWR0aDogNDMwcHgpKToKKyAgICAgICAgKiBT
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qv
bm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzOiBBZGRlZC4KKyAgICAgICAgKGhy
KToKKyAgICAgICAgKC5sZWFybiBhKToKKyAgICAgICAgKC5sZWFybiBhOmhvdmVyKToKKyAgICAg
ICAgKC5sZWFybiBoMywpOgorICAgICAgICAoLmxlYXJuIGgzKToKKyAgICAgICAgKC5sZWFybiBo
NCk6CisgICAgICAgICgubGVhcm4gaDUpOgorICAgICAgICAoLmxlYXJuIHVsKToKKyAgICAgICAg
KC5sZWFybiBsaSk6CisgICAgICAgICgubGVhcm4gcCk6CisgICAgICAgICgjaXNzdWUtY291bnQp
OgorICAgICAgICAoLnF1b3RlKToKKyAgICAgICAgKC5xdW90ZSBwKToKKyAgICAgICAgKC5xdW90
ZSBwOmJlZm9yZSk6CisgICAgICAgICgucXVvdGUgcDphZnRlcik6CisgICAgICAgICgucXVvdGUg
Zm9vdGVyKToKKyAgICAgICAgKC5xdW90ZSBmb290ZXIgaW1nKToKKyAgICAgICAgKC5xdW90ZSBm
b290ZXIgYSk6CisgICAgICAgICguc3BlZWNoLWJ1YmJsZSk6CisgICAgICAgICguc3BlZWNoLWJ1
YmJsZTphZnRlcik6CisgICAgICAgICgubGVhcm4tYmFyID4gLmxlYXJuKToKKyAgICAgICAgKEBt
ZWRpYSAobWluLXdpZHRoOiA4OTlweCkpOgorICAgICAgICAoLmxlYXJuLWJhcik6CisgICAgICAg
ICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Jl
YWN0L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzOiBBZGRlZC4KKyAgICAgICAg
KF8uZGVmYXVsdHMpOgorICAgICAgICAodGVtcGxhdGUpOgorICAgICAgICAoZXNjYXBlci5fLnRl
bXBsYXRlKToKKyAgICAgICAgKF8pOgorICAgICAgICAobG9jYXRpb24uaG9zdG5hbWUuc3RyaW5n
X2FwcGVhcmVkX2hlcmUuaS5yLmkucik6CisgICAgICAgIChyZWRpcmVjdCk6CisgICAgICAgIChm
aW5kUm9vdCk6CisgICAgICAgICh4aHIub25sb2FkKToKKyAgICAgICAgKGdldEZpbGUpOgorICAg
ICAgICAoTGVhcm4pOgorICAgICAgICAoTGVhcm4ucHJvdG90eXBlLmFwcGVuZCk6CisgICAgICAg
IChMZWFybi5wcm90b3R5cGUuZmV0Y2hJc3N1ZUNvdW50KToKKyAgICAgICAgKiBTcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvbnBtLXNocmlu
a3dyYXAuanNvbjogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L3BhY2thZ2UuanNvbjogQWRkZWQuCisgICAg
ICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZnVuY3Rpb25hbC1wcm9nLWV4YW1w
bGVzL2VsbS9idWlsZC9lbG0uanM6IEFkZGVkLgorICAgICAgICAoRjIud3JhcHBlcik6CisgICAg
ICAgIChGMik6CisgICAgICAgIChGMy53cmFwcGVyKToKKyAgICAgICAgKEYzKToKKyAgICAgICAg
KEY0LndyYXBwZXIpOgorICAgICAgICAoRjQpOgorICAgICAgICAoRjUud3JhcHBlcik6CisgICAg
ICAgIChGNSk6CisgICAgICAgIChGNi53cmFwcGVyKToKKyAgICAgICAgKEY2KToKKyAgICAgICAg
KEY3LndyYXBwZXIpOgorICAgICAgICAoRjcpOgorICAgICAgICAoRjgud3JhcHBlcik6CisgICAg
ICAgIChGOCk6CisgICAgICAgIChGOS53cmFwcGVyKToKKyAgICAgICAgKEY5KToKKyAgICAgICAg
KEEyKToKKyAgICAgICAgKEEzKToKKyAgICAgICAgKEE0KToKKyAgICAgICAgKEE1KToKKyAgICAg
ICAgKEE2KToKKyAgICAgICAgKEE3KToKKyAgICAgICAgKEE4KToKKyAgICAgICAgKEE5KToKKyAg
ICAgICAgKHJlbSk6CisgICAgICAgIChtb2QpOgorICAgICAgICAobG9nQmFzZSk6CisgICAgICAg
IChuZWdhdGUpOgorICAgICAgICAoYWJzKToKKyAgICAgICAgKG1pbik6CisgICAgICAgIChtYXgp
OgorICAgICAgICAoY2xhbXApOgorICAgICAgICAoY29tcGFyZSk6CisgICAgICAgICh4b3IpOgor
ICAgICAgICAobm90KToKKyAgICAgICAgKGlzSW5maW5pdGUpOgorICAgICAgICAodHJ1bmNhdGUp
OgorICAgICAgICAoZGVncmVlcyk6CisgICAgICAgICh0dXJucyk6CisgICAgICAgIChmcm9tUG9s
YXIpOgorICAgICAgICAodG9Qb2xhcik6CisgICAgICAgIChyZXR1cm4udG9GbG9hdCk6CisgICAg
ICAgIChfZWxtX2xhbmcuY29yZS5OYXRpdmVfQmFzaWNzKToKKyAgICAgICAgKGVxSGVscCk6Cisg
ICAgICAgIChjbXApOgorICAgICAgICAoVHVwbGUyKToKKyAgICAgICAgKGNocik6CisgICAgICAg
IChndWlkKToKKyAgICAgICAgKHVwZGF0ZSk6CisgICAgICAgIChDb25zKToKKyAgICAgICAgKGFw
cGVuZCk6CisgICAgICAgIChjcmFzaCk6CisgICAgICAgIChjcmFzaENhc2UpOgorICAgICAgICAo
cmVnaW9uVG9TdHJpbmcpOgorICAgICAgICAodG9TdHJpbmcpOgorICAgICAgICAoYWRkU2xhc2hl
cyk6CisgICAgICAgIChfZWxtX2xhbmcuY29yZS5OYXRpdmVfVXRpbHMpOgorCiAyMDE3LTA0LTI3
ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBiYWNr
IHRlc3RzIGluYWR2ZXJ0ZW50bHkgZGVsZXRlZCBpbiByMjA1MDMyLgpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvcmVhY3QvYnVpbGQubWluLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYnVpbGQubWlu
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjFjNWVhZjI0M2IyY2RhMjBmNWMxMGE4MzczY2U2MmI4NzdlOTg5MGIK
LS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9idWlsZC5taW4uanMKQEAgLTAs
MCArMSBAQAordmFyIGFwcD1hcHB8fHt9OyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjthcHAuQUxM
X1RPRE9TPSJhbGwiO2FwcC5BQ1RJVkVfVE9ET1M9ImFjdGl2ZSI7YXBwLkNPTVBMRVRFRF9UT0RP
Uz0iY29tcGxldGVkIjthcHAuVXRpbHM9e3V1aWQ6ZnVuY3Rpb24oKXt2YXIgaSxyYW5kb207dmFy
IHV1aWQ9IiI7Zm9yKGk9MDtpPDMyO2krKyl7cmFuZG9tPU1hdGgucmFuZG9tKCkqMTZ8MDtpZihp
PT09OHx8aT09PTEyfHxpPT09MTZ8fGk9PT0yMCl7dXVpZCs9Ii0ifXV1aWQrPShpPT09MTI/NDpp
PT09MTY/cmFuZG9tJjN8ODpyYW5kb20pLnRvU3RyaW5nKDE2KX1yZXR1cm4gdXVpZH0scGx1cmFs
aXplOmZ1bmN0aW9uKGNvdW50LHdvcmQpe3JldHVybiBjb3VudD09PTE/d29yZDp3b3JkKyJzIn0s
ZXh0ZW5kOmZ1bmN0aW9uKCl7dmFyIG5ld09iaj17fTtmb3IodmFyIGk9MDtpPGFyZ3VtZW50cy5s
ZW5ndGg7aSsrKXt2YXIgb2JqPWFyZ3VtZW50c1tpXTtmb3IodmFyIGtleSBpbiBvYmope2lmKG9i
ai5oYXNPd25Qcm9wZXJ0eShrZXkpKXtuZXdPYmpba2V5XT1vYmpba2V5XX19fXJldHVybiBuZXdP
Ymp9fTt2YXIgVXRpbHM9YXBwLlV0aWxzO2FwcC5Ub2RvTW9kZWw9ZnVuY3Rpb24oa2V5KXt0aGlz
LmtleT1rZXk7dGhpcy50b2Rvcz1bXTt0aGlzLm9uQ2hhbmdlcz1bXX07YXBwLlRvZG9Nb2RlbC5w
cm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKG9uQ2hhbmdlKXt0aGlzLm9uQ2hhbmdlcy5wdXNo
KG9uQ2hhbmdlKX07YXBwLlRvZG9Nb2RlbC5wcm90b3R5cGUuaW5mb3JtPWZ1bmN0aW9uKCl7dGhp
cy5vbkNoYW5nZXMuZm9yRWFjaChmdW5jdGlvbihjYil7Y2IoKX0pfTthcHAuVG9kb01vZGVsLnBy
b3RvdHlwZS5hZGRUb2RvPWZ1bmN0aW9uKHRpdGxlKXt0aGlzLnRvZG9zPXRoaXMudG9kb3MuY29u
Y2F0KHtpZDpVdGlscy51dWlkKCksdGl0bGU6dGl0bGUsY29tcGxldGVkOmZhbHNlfSk7dGhpcy5p
bmZvcm0oKX07YXBwLlRvZG9Nb2RlbC5wcm90b3R5cGUudG9nZ2xlQWxsPWZ1bmN0aW9uKGNoZWNr
ZWQpe3RoaXMudG9kb3M9dGhpcy50b2Rvcy5tYXAoZnVuY3Rpb24odG9kbyl7cmV0dXJuIFV0aWxz
LmV4dGVuZCh7fSx0b2RvLHtjb21wbGV0ZWQ6Y2hlY2tlZH0pfSk7dGhpcy5pbmZvcm0oKX07YXBw
LlRvZG9Nb2RlbC5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKHRvZG9Ub1RvZ2dsZSl7dGhpcy50
b2Rvcz10aGlzLnRvZG9zLm1hcChmdW5jdGlvbih0b2RvKXtyZXR1cm4gdG9kbyE9PXRvZG9Ub1Rv
Z2dsZT90b2RvOlV0aWxzLmV4dGVuZCh7fSx0b2RvLHtjb21wbGV0ZWQ6IXRvZG8uY29tcGxldGVk
fSl9KTt0aGlzLmluZm9ybSgpfTthcHAuVG9kb01vZGVsLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0
aW9uKHRvZG8pe3RoaXMudG9kb3M9dGhpcy50b2Rvcy5maWx0ZXIoZnVuY3Rpb24oY2FuZGlkYXRl
KXtyZXR1cm4gY2FuZGlkYXRlIT09dG9kb30pO3RoaXMuaW5mb3JtKCl9O2FwcC5Ub2RvTW9kZWwu
cHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24odG9kb1RvU2F2ZSx0ZXh0KXt0aGlzLnRvZG9zPXRoaXMu
dG9kb3MubWFwKGZ1bmN0aW9uKHRvZG8pe3JldHVybiB0b2RvIT09dG9kb1RvU2F2ZT90b2RvOlV0
aWxzLmV4dGVuZCh7fSx0b2RvLHt0aXRsZTp0ZXh0fSl9KTt0aGlzLmluZm9ybSgpfTthcHAuVG9k
b01vZGVsLnByb3RvdHlwZS5jbGVhckNvbXBsZXRlZD1mdW5jdGlvbigpe3RoaXMudG9kb3M9dGhp
cy50b2Rvcy5maWx0ZXIoZnVuY3Rpb24odG9kbyl7cmV0dXJuIXRvZG8uY29tcGxldGVkfSk7dGhp
cy5pbmZvcm0oKX07dmFyIFRvZG9Gb290ZXI9UmVhY3QuY3JlYXRlQ2xhc3Moe3JlbmRlcjpmdW5j
dGlvbigpe3ZhciBhY3RpdmVUb2RvV29yZD1hcHAuVXRpbHMucGx1cmFsaXplKHRoaXMucHJvcHMu
Y291bnQsIml0ZW0iKTt2YXIgY2xlYXJCdXR0b249bnVsbDtpZih0aGlzLnByb3BzLmNvbXBsZXRl
ZENvdW50PjApe2NsZWFyQnV0dG9uPVJlYWN0LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIse2NsYXNz
TmFtZToiY2xlYXItY29tcGxldGVkIixvbkNsaWNrOnRoaXMucHJvcHMub25DbGVhckNvbXBsZXRl
ZH0sIkNsZWFyIGNvbXBsZXRlZCIpfXZhciBub3dTaG93aW5nPXRoaXMucHJvcHMubm93U2hvd2lu
ZztyZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCgiZm9vdGVyIix7Y2xhc3NOYW1lOiJmb290ZXIi
fSxSZWFjdC5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJ0b2RvLWNvdW50In0sUmVh
Y3QuY3JlYXRlRWxlbWVudCgic3Ryb25nIixudWxsLHRoaXMucHJvcHMuY291bnQpLCIgIixhY3Rp
dmVUb2RvV29yZCwiIGxlZnQiKSxSZWFjdC5jcmVhdGVFbGVtZW50KCJ1bCIse2NsYXNzTmFtZToi
ZmlsdGVycyJ9LFJlYWN0LmNyZWF0ZUVsZW1lbnQoImxpIixudWxsLFJlYWN0LmNyZWF0ZUVsZW1l
bnQoImEiLHtocmVmOiIjLyIsY2xhc3NOYW1lOmNsYXNzTmFtZXMoe3NlbGVjdGVkOm5vd1Nob3dp
bmc9PT1hcHAuQUxMX1RPRE9TfSl9LCJBbGwiKSksIiAiLFJlYWN0LmNyZWF0ZUVsZW1lbnQoImxp
IixudWxsLFJlYWN0LmNyZWF0ZUVsZW1lbnQoImEiLHtocmVmOiIjL2FjdGl2ZSIsY2xhc3NOYW1l
OmNsYXNzTmFtZXMoe3NlbGVjdGVkOm5vd1Nob3dpbmc9PT1hcHAuQUNUSVZFX1RPRE9TfSl9LCJB
Y3RpdmUiKSksIiAiLFJlYWN0LmNyZWF0ZUVsZW1lbnQoImxpIixudWxsLFJlYWN0LmNyZWF0ZUVs
ZW1lbnQoImEiLHtocmVmOiIjL2NvbXBsZXRlZCIsY2xhc3NOYW1lOmNsYXNzTmFtZXMoe3NlbGVj
dGVkOm5vd1Nob3dpbmc9PT1hcHAuQ09NUExFVEVEX1RPRE9TfSl9LCJDb21wbGV0ZWQiKSkpLGNs
ZWFyQnV0dG9uKX19KTt2YXIgRVNDQVBFX0tFWT0yNzt2YXIgRU5URVJfS0VZPTEzO3ZhciBUb2Rv
SXRlbT1SZWFjdC5jcmVhdGVDbGFzcyh7aGFuZGxlU3VibWl0OmZ1bmN0aW9uKGV2ZW50KXt2YXIg
dmFsPXRoaXMuc3RhdGUuZWRpdFRleHQudHJpbSgpO2lmKHZhbCl7dGhpcy5wcm9wcy5vblNhdmUo
dmFsKTt0aGlzLnNldFN0YXRlKHtlZGl0VGV4dDp2YWx9KX1lbHNle3RoaXMucHJvcHMub25EZXN0
cm95KCl9fSxoYW5kbGVFZGl0OmZ1bmN0aW9uKCl7dGhpcy5wcm9wcy5vbkVkaXQoKTt0aGlzLnNl
dFN0YXRlKHtlZGl0VGV4dDp0aGlzLnByb3BzLnRvZG8udGl0bGV9KX0saGFuZGxlS2V5RG93bjpm
dW5jdGlvbihldmVudCl7aWYoZXZlbnQud2hpY2g9PT1FU0NBUEVfS0VZKXt0aGlzLnNldFN0YXRl
KHtlZGl0VGV4dDp0aGlzLnByb3BzLnRvZG8udGl0bGV9KTt0aGlzLnByb3BzLm9uQ2FuY2VsKGV2
ZW50KX1lbHNlIGlmKGV2ZW50LndoaWNoPT09RU5URVJfS0VZKXt0aGlzLmhhbmRsZVN1Ym1pdChl
dmVudCl9fSxoYW5kbGVDaGFuZ2U6ZnVuY3Rpb24oZXZlbnQpe2lmKHRoaXMucHJvcHMuZWRpdGlu
Zyl7dGhpcy5zZXRTdGF0ZSh7ZWRpdFRleHQ6ZXZlbnQudGFyZ2V0LnZhbHVlfSl9fSxnZXRJbml0
aWFsU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm57ZWRpdFRleHQ6dGhpcy5wcm9wcy50b2RvLnRpdGxl
fX0sc2hvdWxkQ29tcG9uZW50VXBkYXRlOmZ1bmN0aW9uKG5leHRQcm9wcyxuZXh0U3RhdGUpe3Jl
dHVybiBuZXh0UHJvcHMudG9kbyE9PXRoaXMucHJvcHMudG9kb3x8bmV4dFByb3BzLmVkaXRpbmch
PT10aGlzLnByb3BzLmVkaXRpbmd8fG5leHRTdGF0ZS5lZGl0VGV4dCE9PXRoaXMuc3RhdGUuZWRp
dFRleHR9LGNvbXBvbmVudERpZFVwZGF0ZTpmdW5jdGlvbihwcmV2UHJvcHMpe2lmKCFwcmV2UHJv
cHMuZWRpdGluZyYmdGhpcy5wcm9wcy5lZGl0aW5nKXt2YXIgbm9kZT1SZWFjdC5maW5kRE9NTm9k
ZSh0aGlzLnJlZnMuZWRpdEZpZWxkKTtub2RlLmZvY3VzKCk7bm9kZS5zZXRTZWxlY3Rpb25SYW5n
ZShub2RlLnZhbHVlLmxlbmd0aCxub2RlLnZhbHVlLmxlbmd0aCl9fSxyZW5kZXI6ZnVuY3Rpb24o
KXtyZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCgibGkiLHtjbGFzc05hbWU6Y2xhc3NOYW1lcyh7
Y29tcGxldGVkOnRoaXMucHJvcHMudG9kby5jb21wbGV0ZWQsZWRpdGluZzp0aGlzLnByb3BzLmVk
aXRpbmd9KX0sUmVhY3QuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJ2aWV3In0sUmVh
Y3QuY3JlYXRlRWxlbWVudCgiaW5wdXQiLHtjbGFzc05hbWU6InRvZ2dsZSIsdHlwZToiY2hlY2ti
b3giLGNoZWNrZWQ6dGhpcy5wcm9wcy50b2RvLmNvbXBsZXRlZCxvbkNoYW5nZTp0aGlzLnByb3Bz
Lm9uVG9nZ2xlfSksUmVhY3QuY3JlYXRlRWxlbWVudCgibGFiZWwiLHtvbkRvdWJsZUNsaWNrOnRo
aXMuaGFuZGxlRWRpdH0sdGhpcy5wcm9wcy50b2RvLnRpdGxlKSxSZWFjdC5jcmVhdGVFbGVtZW50
KCJidXR0b24iLHtjbGFzc05hbWU6ImRlc3Ryb3kiLG9uQ2xpY2s6dGhpcy5wcm9wcy5vbkRlc3Ry
b3l9KSksUmVhY3QuY3JlYXRlRWxlbWVudCgiaW5wdXQiLHtyZWY6ImVkaXRGaWVsZCIsY2xhc3NO
YW1lOiJlZGl0Iix2YWx1ZTp0aGlzLnN0YXRlLmVkaXRUZXh0LG9uQmx1cjp0aGlzLmhhbmRsZVN1
Ym1pdCxvbkNoYW5nZTp0aGlzLmhhbmRsZUNoYW5nZSxvbktleURvd246dGhpcy5oYW5kbGVLZXlE
b3dufSkpfX0pO3ZhciBFTlRFUl9LRVk9MTM7dmFyIFRvZG9BcHA9UmVhY3QuY3JlYXRlQ2xhc3Mo
e2dldEluaXRpYWxTdGF0ZTpmdW5jdGlvbigpe3JldHVybntub3dTaG93aW5nOmFwcC5BTExfVE9E
T1MsZWRpdGluZzpudWxsLG5ld1RvZG86IiJ9fSxjb21wb25lbnREaWRNb3VudDpmdW5jdGlvbigp
e3ZhciBzZXRTdGF0ZT10aGlzLnNldFN0YXRlO3ZhciByb3V0ZXI9Um91dGVyKHsiLyI6c2V0U3Rh
dGUuYmluZCh0aGlzLHtub3dTaG93aW5nOmFwcC5BTExfVE9ET1N9KSwiL2FjdGl2ZSI6c2V0U3Rh
dGUuYmluZCh0aGlzLHtub3dTaG93aW5nOmFwcC5BQ1RJVkVfVE9ET1N9KSwiL2NvbXBsZXRlZCI6
c2V0U3RhdGUuYmluZCh0aGlzLHtub3dTaG93aW5nOmFwcC5DT01QTEVURURfVE9ET1N9KX0pO3Jv
dXRlci5pbml0KCIvIil9LGhhbmRsZUNoYW5nZTpmdW5jdGlvbihldmVudCl7dGhpcy5zZXRTdGF0
ZSh7bmV3VG9kbzpldmVudC50YXJnZXQudmFsdWV9KX0saGFuZGxlTmV3VG9kb0tleURvd246ZnVu
Y3Rpb24oZXZlbnQpe2lmKGV2ZW50LmtleUNvZGUhPT1FTlRFUl9LRVkpe3JldHVybn1ldmVudC5w
cmV2ZW50RGVmYXVsdCgpO3ZhciB2YWw9dGhpcy5zdGF0ZS5uZXdUb2RvLnRyaW0oKTtpZih2YWwp
e3RoaXMucHJvcHMubW9kZWwuYWRkVG9kbyh2YWwpO3RoaXMuc2V0U3RhdGUoe25ld1RvZG86IiJ9
KX19LHRvZ2dsZUFsbDpmdW5jdGlvbihldmVudCl7dmFyIGNoZWNrZWQ9ZXZlbnQudGFyZ2V0LmNo
ZWNrZWQ7dGhpcy5wcm9wcy5tb2RlbC50b2dnbGVBbGwoY2hlY2tlZCl9LHRvZ2dsZTpmdW5jdGlv
bih0b2RvVG9Ub2dnbGUpe3RoaXMucHJvcHMubW9kZWwudG9nZ2xlKHRvZG9Ub1RvZ2dsZSl9LGRl
c3Ryb3k6ZnVuY3Rpb24odG9kbyl7dGhpcy5wcm9wcy5tb2RlbC5kZXN0cm95KHRvZG8pfSxlZGl0
OmZ1bmN0aW9uKHRvZG8pe3RoaXMuc2V0U3RhdGUoe2VkaXRpbmc6dG9kby5pZH0pfSxzYXZlOmZ1
bmN0aW9uKHRvZG9Ub1NhdmUsdGV4dCl7dGhpcy5wcm9wcy5tb2RlbC5zYXZlKHRvZG9Ub1NhdmUs
dGV4dCk7dGhpcy5zZXRTdGF0ZSh7ZWRpdGluZzpudWxsfSl9LGNhbmNlbDpmdW5jdGlvbigpe3Ro
aXMuc2V0U3RhdGUoe2VkaXRpbmc6bnVsbH0pfSxjbGVhckNvbXBsZXRlZDpmdW5jdGlvbigpe3Ro
aXMucHJvcHMubW9kZWwuY2xlYXJDb21wbGV0ZWQoKX0scmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGZv
b3Rlcjt2YXIgbWFpbjt2YXIgdG9kb3M9dGhpcy5wcm9wcy5tb2RlbC50b2Rvczt2YXIgc2hvd25U
b2Rvcz10b2Rvcy5maWx0ZXIoZnVuY3Rpb24odG9kbyl7c3dpdGNoKHRoaXMuc3RhdGUubm93U2hv
d2luZyl7Y2FzZSBhcHAuQUNUSVZFX1RPRE9TOnJldHVybiF0b2RvLmNvbXBsZXRlZDtjYXNlIGFw
cC5DT01QTEVURURfVE9ET1M6cmV0dXJuIHRvZG8uY29tcGxldGVkO2RlZmF1bHQ6cmV0dXJuIHRy
dWV9fSx0aGlzKTt2YXIgdG9kb0l0ZW1zPXNob3duVG9kb3MubWFwKGZ1bmN0aW9uKHRvZG8pe3Jl
dHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRvZG9JdGVtLHtrZXk6dG9kby5pZCx0b2RvOnRvZG8s
b25Ub2dnbGU6dGhpcy50b2dnbGUuYmluZCh0aGlzLHRvZG8pLG9uRGVzdHJveTp0aGlzLmRlc3Ry
b3kuYmluZCh0aGlzLHRvZG8pLG9uRWRpdDp0aGlzLmVkaXQuYmluZCh0aGlzLHRvZG8pLGVkaXRp
bmc6dGhpcy5zdGF0ZS5lZGl0aW5nPT09dG9kby5pZCxvblNhdmU6dGhpcy5zYXZlLmJpbmQodGhp
cyx0b2RvKSxvbkNhbmNlbDp0aGlzLmNhbmNlbH0pfSx0aGlzKTt2YXIgYWN0aXZlVG9kb0NvdW50
PXRvZG9zLnJlZHVjZShmdW5jdGlvbihhY2N1bSx0b2RvKXtyZXR1cm4gdG9kby5jb21wbGV0ZWQ/
YWNjdW06YWNjdW0rMX0sMCk7dmFyIGNvbXBsZXRlZENvdW50PXRvZG9zLmxlbmd0aC1hY3RpdmVU
b2RvQ291bnQ7aWYoYWN0aXZlVG9kb0NvdW50fHxjb21wbGV0ZWRDb3VudCl7Zm9vdGVyPVJlYWN0
LmNyZWF0ZUVsZW1lbnQoVG9kb0Zvb3Rlcix7Y291bnQ6YWN0aXZlVG9kb0NvdW50LGNvbXBsZXRl
ZENvdW50OmNvbXBsZXRlZENvdW50LG5vd1Nob3dpbmc6dGhpcy5zdGF0ZS5ub3dTaG93aW5nLG9u
Q2xlYXJDb21wbGV0ZWQ6dGhpcy5jbGVhckNvbXBsZXRlZH0pfWlmKHRvZG9zLmxlbmd0aCl7bWFp
bj1SZWFjdC5jcmVhdGVFbGVtZW50KCJzZWN0aW9uIix7Y2xhc3NOYW1lOiJtYWluIn0sUmVhY3Qu
Y3JlYXRlRWxlbWVudCgiaW5wdXQiLHtjbGFzc05hbWU6InRvZ2dsZS1hbGwiLHR5cGU6ImNoZWNr
Ym94IixvbkNoYW5nZTp0aGlzLnRvZ2dsZUFsbCxjaGVja2VkOmFjdGl2ZVRvZG9Db3VudD09PTB9
KSxSZWFjdC5jcmVhdGVFbGVtZW50KCJ1bCIse2NsYXNzTmFtZToidG9kby1saXN0In0sdG9kb0l0
ZW1zKSl9cmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCxSZWFjdC5jcmVhdGVF
bGVtZW50KCJoZWFkZXIiLHtjbGFzc05hbWU6ImhlYWRlciJ9LFJlYWN0LmNyZWF0ZUVsZW1lbnQo
ImgxIixudWxsLCJ0b2RvcyIpLFJlYWN0LmNyZWF0ZUVsZW1lbnQoImlucHV0Iix7Y2xhc3NOYW1l
OiJuZXctdG9kbyIscGxhY2Vob2xkZXI6IldoYXQgbmVlZHMgdG8gYmUgZG9uZT8iLHZhbHVlOnRo
aXMuc3RhdGUubmV3VG9kbyxvbktleURvd246dGhpcy5oYW5kbGVOZXdUb2RvS2V5RG93bixvbkNo
YW5nZTp0aGlzLmhhbmRsZUNoYW5nZSxhdXRvRm9jdXM6dHJ1ZX0pKSxtYWluLGZvb3Rlcil9fSk7
dmFyIG1vZGVsPW5ldyBhcHAuVG9kb01vZGVsKCJyZWFjdC10b2RvcyIpO2Z1bmN0aW9uIHJlbmRl
cigpe1JlYWN0RE9NLnJlbmRlcihSZWFjdC5jcmVhdGVFbGVtZW50KFRvZG9BcHAse21vZGVsOm1v
ZGVsfSksZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgidG9kb2FwcCIpWzBdKX1tb2Rl
bC5zdWJzY3JpYmUocmVuZGVyKTtyZW5kZXIoKX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvaW5kZXguaHRtbCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL3JlYWN0L2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjllNTYxNmJhYTYwMzZhNjViZWFmYzhm
MGYwMDkzOWFiNWQwY2U3YQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2lu
ZGV4Lmh0bWwKQEAgLTAsMCArMSwyMiBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbCBsYW5nPSJl
biIgZGF0YS1mcmFtZXdvcms9InJlYWN0Ij4KKyAgICA8aGVhZD4KKyAgICAgICAgPG1ldGEgY2hh
cnNldD0idXRmLTgiPgorICAgICAgICA8dGl0bGU+UmVhY3Qg4oCiIFRvZG9NVkM8L3RpdGxlPgor
ICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Im5vZGVfbW9kdWxlcy90b2RvbXZj
LWNvbW1vbi9iYXNlLmNzcyI+CisgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
bm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3MiPgorICAgIDwvaGVhZD4KKyAg
ICA8Ym9keT4KKyAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRvZG9hcHAiPjwvc2VjdGlvbj4KKyAg
ICAgICAgPGZvb3RlciBjbGFzcz0iaW5mbyI+CisgICAgICAgICAgICA8cD5Eb3VibGUtY2xpY2sg
dG8gZWRpdCBhIHRvZG88L3A+CisgICAgICAgICAgICA8cD5QYXJ0IG9mIDxhIGhyZWY9Imh0dHA6
Ly90b2RvbXZjLmNvbSI+VG9kb01WQzwvYT48L3A+CisgICAgICAgIDwvZm9vdGVyPgorCisgICAg
PHNjcmlwdCBzcmM9Im5vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHNyYz0ibm9kZV9tb2R1bGVzL2RpcmVjdG9yL2J1aWxkL2RpcmVjdG9yLmpz
Ij48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0ibm9kZV9tb2R1bGVzL3JlYWN0L2Rpc3QvcmVh
Y3Qtd2l0aC1hZGRvbnMubWluLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0ibm9kZV9t
b2R1bGVzL3JlYWN0LWRvbS9kaXN0L3JlYWN0LWRvbS5taW4uanMiPjwvc2NyaXB0PgorICAgIDxz
Y3JpcHQgc3JjPSJidWlsZC5taW4uanMiPjwvc2NyaXB0PgorICAgIDwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2pzL2FwcC5qc3ggYi9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9y
ZWFjdC9qcy9hcHAuanN4Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZkODk1ZTUxMDU4NGZjOWRlZDE2NmI0NDQzOTI2
NzgzZjE1MDQyYjQKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9qcy9hcHAu
anN4CkBAIC0wLDAgKzEsNDQyIEBACisvKmpzaGludCBxdW90bWFyazpmYWxzZSAqLworLypqc2hp
bnQgd2hpdGU6ZmFsc2UgKi8KKy8qanNoaW50IHRyYWlsaW5nOmZhbHNlICovCisvKmpzaGludCBu
ZXdjYXA6ZmFsc2UgKi8KKy8qZ2xvYmFsIFJlYWN0LCBSb3V0ZXIqLwordmFyIGFwcCA9IGFwcCB8
fCB7fTsKKworKGZ1bmN0aW9uICgpIHsKKwkndXNlIHN0cmljdCc7CisKKwlhcHAuQUxMX1RPRE9T
ID0gJ2FsbCc7CisJYXBwLkFDVElWRV9UT0RPUyA9ICdhY3RpdmUnOworCWFwcC5DT01QTEVURURf
VE9ET1MgPSAnY29tcGxldGVkJzsKKworICBhcHAuVXRpbHMgPSB7CisgICAgdXVpZDogZnVuY3Rp
b24gKCkgeworICAgICAgLypqc2hpbnQgYml0d2lzZTpmYWxzZSAqLworICAgICAgdmFyIGksIHJh
bmRvbTsKKyAgICAgIHZhciB1dWlkID0gJyc7CisKKyAgICAgIGZvciAoaSA9IDA7IGkgPCAzMjsg
aSsrKSB7CisgICAgICAgIHJhbmRvbSA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDA7CisgICAgICAg
IGlmIChpID09PSA4IHx8IGkgPT09IDEyIHx8IGkgPT09IDE2IHx8IGkgPT09IDIwKSB7CisgICAg
ICAgICAgdXVpZCArPSAnLSc7CisgICAgICAgIH0KKyAgICAgICAgdXVpZCArPSAoaSA9PT0gMTIg
PyA0IDogKGkgPT09IDE2ID8gKHJhbmRvbSAmIDMgfCA4KSA6IHJhbmRvbSkpCisgICAgICAgICAg
LnRvU3RyaW5nKDE2KTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHV1aWQ7CisgICAgfSwKKwor
ICAgIHBsdXJhbGl6ZTogZnVuY3Rpb24gKGNvdW50LCB3b3JkKSB7CisgICAgICByZXR1cm4gY291
bnQgPT09IDEgPyB3b3JkIDogd29yZCArICdzJzsKKyAgICB9LAorCisgICAgZXh0ZW5kOiBmdW5j
dGlvbiAoKSB7CisgICAgICB2YXIgbmV3T2JqID0ge307CisgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgb2JqID0gYXJndW1lbnRz
W2ldOworICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CisgICAgICAgICAgaWYgKG9iai5o
YXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAgICAgICBuZXdPYmpba2V5XSA9IG9ialtrZXld
OworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIG5ld09iajsK
KyAgICB9CisgIH07CisKKyAgdmFyIFV0aWxzID0gYXBwLlV0aWxzOworICAvLyBHZW5lcmljICJt
b2RlbCIgb2JqZWN0LiBZb3UgY2FuIHVzZSB3aGF0ZXZlcgorICAvLyBmcmFtZXdvcmsgeW91IHdh
bnQuIEZvciB0aGlzIGFwcGxpY2F0aW9uIGl0CisgIC8vIG1heSBub3QgZXZlbiBiZSB3b3J0aCBz
ZXBhcmF0aW5nIHRoaXMgbG9naWMKKyAgLy8gb3V0LCBidXQgd2UgZG8gdGhpcyB0byBkZW1vbnN0
cmF0ZSBvbmUgd2F5IHRvCisgIC8vIHNlcGFyYXRlIG91dCBwYXJ0cyBvZiB5b3VyIGFwcGxpY2F0
aW9uLgorICBhcHAuVG9kb01vZGVsID0gZnVuY3Rpb24gKGtleSkgeworICAgIHRoaXMua2V5ID0g
a2V5OworICAgIHRoaXMudG9kb3MgPSBbXTsKKyAgICB0aGlzLm9uQ2hhbmdlcyA9IFtdOworICB9
OworCisgIGFwcC5Ub2RvTW9kZWwucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIChvbkNo
YW5nZSkgeworICAgIHRoaXMub25DaGFuZ2VzLnB1c2gob25DaGFuZ2UpOworICB9OworCisgIGFw
cC5Ub2RvTW9kZWwucHJvdG90eXBlLmluZm9ybSA9IGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLm9u
Q2hhbmdlcy5mb3JFYWNoKGZ1bmN0aW9uIChjYikgeyBjYigpOyB9KTsKKyAgfTsKKworICBhcHAu
VG9kb01vZGVsLnByb3RvdHlwZS5hZGRUb2RvID0gZnVuY3Rpb24gKHRpdGxlKSB7CisgICAgdGhp
cy50b2RvcyA9IHRoaXMudG9kb3MuY29uY2F0KHsKKyAgICAgIGlkOiBVdGlscy51dWlkKCksCisg
ICAgICB0aXRsZTogdGl0bGUsCisgICAgICBjb21wbGV0ZWQ6IGZhbHNlCisgICAgfSk7CisKKyAg
ICB0aGlzLmluZm9ybSgpOworICB9OworCisgIGFwcC5Ub2RvTW9kZWwucHJvdG90eXBlLnRvZ2ds
ZUFsbCA9IGZ1bmN0aW9uIChjaGVja2VkKSB7CisgICAgLy8gTm90ZTogaXQncyB1c3VhbGx5IGJl
dHRlciB0byB1c2UgaW1tdXRhYmxlIGRhdGEgc3RydWN0dXJlcyBzaW5jZSB0aGV5J3JlCisgICAg
Ly8gZWFzaWVyIHRvIHJlYXNvbiBhYm91dCBhbmQgUmVhY3Qgd29ya3MgdmVyeSB3ZWxsIHdpdGgg
dGhlbS4gVGhhdCdzIHdoeQorICAgIC8vIHdlIHVzZSBtYXAoKSBhbmQgZmlsdGVyKCkgZXZlcnl3
aGVyZSBpbnN0ZWFkIG9mIG11dGF0aW5nIHRoZSBhcnJheSBvcgorICAgIC8vIHRvZG8gaXRlbXMg
dGhlbXNlbHZlcy4KKyAgICB0aGlzLnRvZG9zID0gdGhpcy50b2Rvcy5tYXAoZnVuY3Rpb24gKHRv
ZG8pIHsKKyAgICAgIHJldHVybiBVdGlscy5leHRlbmQoe30sIHRvZG8sIHtjb21wbGV0ZWQ6IGNo
ZWNrZWR9KTsKKyAgICB9KTsKKworICAgIHRoaXMuaW5mb3JtKCk7CisgIH07CisKKyAgYXBwLlRv
ZG9Nb2RlbC5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24gKHRvZG9Ub1RvZ2dsZSkgeworICAg
IHRoaXMudG9kb3MgPSB0aGlzLnRvZG9zLm1hcChmdW5jdGlvbiAodG9kbykgeworICAgICAgcmV0
dXJuIHRvZG8gIT09IHRvZG9Ub1RvZ2dsZSA/CisgICAgICAgIHRvZG8gOgorICAgICAgICBVdGls
cy5leHRlbmQoe30sIHRvZG8sIHtjb21wbGV0ZWQ6ICF0b2RvLmNvbXBsZXRlZH0pOworICAgIH0p
OworCisgICAgdGhpcy5pbmZvcm0oKTsKKyAgfTsKKworICBhcHAuVG9kb01vZGVsLnByb3RvdHlw
ZS5kZXN0cm95ID0gZnVuY3Rpb24gKHRvZG8pIHsKKyAgICB0aGlzLnRvZG9zID0gdGhpcy50b2Rv
cy5maWx0ZXIoZnVuY3Rpb24gKGNhbmRpZGF0ZSkgeworICAgICAgcmV0dXJuIGNhbmRpZGF0ZSAh
PT0gdG9kbzsKKyAgICB9KTsKKworICAgIHRoaXMuaW5mb3JtKCk7CisgIH07CisKKyAgYXBwLlRv
ZG9Nb2RlbC5wcm90b3R5cGUuc2F2ZSA9IGZ1bmN0aW9uICh0b2RvVG9TYXZlLCB0ZXh0KSB7Cisg
ICAgdGhpcy50b2RvcyA9IHRoaXMudG9kb3MubWFwKGZ1bmN0aW9uICh0b2RvKSB7CisgICAgICBy
ZXR1cm4gdG9kbyAhPT0gdG9kb1RvU2F2ZSA/IHRvZG8gOiBVdGlscy5leHRlbmQoe30sIHRvZG8s
IHt0aXRsZTogdGV4dH0pOworICAgIH0pOworCisgICAgdGhpcy5pbmZvcm0oKTsKKyAgfTsKKwor
ICBhcHAuVG9kb01vZGVsLnByb3RvdHlwZS5jbGVhckNvbXBsZXRlZCA9IGZ1bmN0aW9uICgpIHsK
KyAgICB0aGlzLnRvZG9zID0gdGhpcy50b2Rvcy5maWx0ZXIoZnVuY3Rpb24gKHRvZG8pIHsKKyAg
ICAgIHJldHVybiAhdG9kby5jb21wbGV0ZWQ7CisgICAgfSk7CisKKyAgICB0aGlzLmluZm9ybSgp
OworICB9OworCisKKyAgdmFyIFRvZG9Gb290ZXIgPSBSZWFjdC5jcmVhdGVDbGFzcyh7CisgICAg
cmVuZGVyOiBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgYWN0aXZlVG9kb1dvcmQgPSBhcHAuVXRp
bHMucGx1cmFsaXplKHRoaXMucHJvcHMuY291bnQsICdpdGVtJyk7CisgICAgICB2YXIgY2xlYXJC
dXR0b24gPSBudWxsOworCisgICAgICBpZiAodGhpcy5wcm9wcy5jb21wbGV0ZWRDb3VudCA+IDAp
IHsKKyAgICAgICAgY2xlYXJCdXR0b24gPSAoCisgICAgICAgICAgPGJ1dHRvbgorICAgICAgICAg
ICAgY2xhc3NOYW1lPSJjbGVhci1jb21wbGV0ZWQiCisgICAgICAgICAgICBvbkNsaWNrPXt0aGlz
LnByb3BzLm9uQ2xlYXJDb21wbGV0ZWR9PgorICAgICAgICAgICAgQ2xlYXIgY29tcGxldGVkCisg
ICAgICAgICAgPC9idXR0b24+CisgICAgICAgICk7CisgICAgICB9CisKKyAgICAgIHZhciBub3dT
aG93aW5nID0gdGhpcy5wcm9wcy5ub3dTaG93aW5nOworICAgICAgcmV0dXJuICgKKyAgICAgICAg
PGZvb3RlciBjbGFzc05hbWU9ImZvb3RlciI+CisgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSJ0
b2RvLWNvdW50Ij4KKyAgICAgICAgICAgIDxzdHJvbmc+e3RoaXMucHJvcHMuY291bnR9PC9zdHJv
bmc+IHthY3RpdmVUb2RvV29yZH0gbGVmdAorICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICA8
dWwgY2xhc3NOYW1lPSJmaWx0ZXJzIj4KKyAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAg
PGEKKyAgICAgICAgICAgICAgICBocmVmPSIjLyIKKyAgICAgICAgICAgICAgICBjbGFzc05hbWU9
e2NsYXNzTmFtZXMoe3NlbGVjdGVkOiBub3dTaG93aW5nID09PSBhcHAuQUxMX1RPRE9TfSl9Pgor
ICAgICAgICAgICAgICAgICAgQWxsCisgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgIDwv
bGk+CisgICAgICAgICAgICB7JyAnfQorICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICA8
YQorICAgICAgICAgICAgICAgIGhyZWY9IiMvYWN0aXZlIgorICAgICAgICAgICAgICAgIGNsYXNz
TmFtZT17Y2xhc3NOYW1lcyh7c2VsZWN0ZWQ6IG5vd1Nob3dpbmcgPT09IGFwcC5BQ1RJVkVfVE9E
T1N9KX0+CisgICAgICAgICAgICAgICAgICBBY3RpdmUKKyAgICAgICAgICAgICAgPC9hPgorICAg
ICAgICAgICAgPC9saT4KKyAgICAgICAgICAgIHsnICd9CisgICAgICAgICAgICA8bGk+CisgICAg
ICAgICAgICAgIDxhCisgICAgICAgICAgICAgICAgaHJlZj0iIy9jb21wbGV0ZWQiCisgICAgICAg
ICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHtzZWxlY3RlZDogbm93U2hvd2luZyA9PT0g
YXBwLkNPTVBMRVRFRF9UT0RPU30pfT4KKyAgICAgICAgICAgICAgICAgIENvbXBsZXRlZAorICAg
ICAgICAgICAgICA8L2E+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgIDwvdWw+CisgICAg
ICAgICAge2NsZWFyQnV0dG9ufQorICAgICAgICA8L2Zvb3Rlcj4KKyAgICAgICk7CisgICAgfQor
ICB9KTsKKworICB2YXIgRVNDQVBFX0tFWSA9IDI3OworICB2YXIgRU5URVJfS0VZID0gMTM7CisK
KyAgdmFyIFRvZG9JdGVtID0gUmVhY3QuY3JlYXRlQ2xhc3MoeworICAgIGhhbmRsZVN1Ym1pdDog
ZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICB2YXIgdmFsID0gdGhpcy5zdGF0ZS5lZGl0VGV4dC50
cmltKCk7CisgICAgICBpZiAodmFsKSB7CisgICAgICAgIHRoaXMucHJvcHMub25TYXZlKHZhbCk7
CisgICAgICAgIHRoaXMuc2V0U3RhdGUoe2VkaXRUZXh0OiB2YWx9KTsKKyAgICAgIH0gZWxzZSB7
CisgICAgICAgIHRoaXMucHJvcHMub25EZXN0cm95KCk7CisgICAgICB9CisgICAgfSwKKworICAg
IGhhbmRsZUVkaXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHRoaXMucHJvcHMub25FZGl0KCk7Cisg
ICAgICB0aGlzLnNldFN0YXRlKHtlZGl0VGV4dDogdGhpcy5wcm9wcy50b2RvLnRpdGxlfSk7Cisg
ICAgfSwKKworICAgIGhhbmRsZUtleURvd246IGZ1bmN0aW9uIChldmVudCkgeworICAgICAgaWYg
KGV2ZW50LndoaWNoID09PSBFU0NBUEVfS0VZKSB7CisgICAgICAgIHRoaXMuc2V0U3RhdGUoe2Vk
aXRUZXh0OiB0aGlzLnByb3BzLnRvZG8udGl0bGV9KTsKKyAgICAgICAgdGhpcy5wcm9wcy5vbkNh
bmNlbChldmVudCk7CisgICAgICB9IGVsc2UgaWYgKGV2ZW50LndoaWNoID09PSBFTlRFUl9LRVkp
IHsKKyAgICAgICAgdGhpcy5oYW5kbGVTdWJtaXQoZXZlbnQpOworICAgICAgfQorICAgIH0sCisK
KyAgICBoYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uIChldmVudCkgeworICAgICAgaWYgKHRoaXMucHJv
cHMuZWRpdGluZykgeworICAgICAgICB0aGlzLnNldFN0YXRlKHtlZGl0VGV4dDogZXZlbnQudGFy
Z2V0LnZhbHVlfSk7CisgICAgICB9CisgICAgfSwKKworICAgIGdldEluaXRpYWxTdGF0ZTogZnVu
Y3Rpb24gKCkgeworICAgICAgcmV0dXJuIHtlZGl0VGV4dDogdGhpcy5wcm9wcy50b2RvLnRpdGxl
fTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogVGhpcyBpcyBhIGNvbXBsZXRlbHkgb3B0aW9u
YWwgcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnQgdGhhdCB5b3UgY2FuCisgICAgICogaW1wbGVtZW50
IG9uIGFueSBSZWFjdCBjb21wb25lbnQuIElmIHlvdSB3ZXJlIHRvIGRlbGV0ZSB0aGlzIG1ldGhv
ZAorICAgICAqIHRoZSBhcHAgd291bGQgc3RpbGwgd29yayBjb3JyZWN0bHkgKGFuZCBzdGlsbCBi
ZSB2ZXJ5IHBlcmZvcm1hbnQhKSwgd2UKKyAgICAgKiBqdXN0IHVzZSBpdCBhcyBhbiBleGFtcGxl
IG9mIGhvdyBsaXR0bGUgY29kZSBpdCB0YWtlcyB0byBnZXQgYW4gb3JkZXIKKyAgICAgKiBvZiBt
YWduaXR1ZGUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuCisgICAgICovCisgICAgc2hvdWxkQ29t
cG9uZW50VXBkYXRlOiBmdW5jdGlvbiAobmV4dFByb3BzLCBuZXh0U3RhdGUpIHsKKyAgICAgIHJl
dHVybiAoCisgICAgICAgIG5leHRQcm9wcy50b2RvICE9PSB0aGlzLnByb3BzLnRvZG8gfHwKKyAg
ICAgICAgbmV4dFByb3BzLmVkaXRpbmcgIT09IHRoaXMucHJvcHMuZWRpdGluZyB8fAorICAgICAg
ICBuZXh0U3RhdGUuZWRpdFRleHQgIT09IHRoaXMuc3RhdGUuZWRpdFRleHQKKyAgICAgICk7Cisg
ICAgfSwKKworICAgIC8qKgorICAgICAqIFNhZmVseSBtYW5pcHVsYXRlIHRoZSBET00gYWZ0ZXIg
dXBkYXRpbmcgdGhlIHN0YXRlIHdoZW4gaW52b2tpbmcKKyAgICAgKiBgdGhpcy5wcm9wcy5vbkVk
aXQoKWAgaW4gdGhlIGBoYW5kbGVFZGl0YCBtZXRob2QgYWJvdmUuCisgICAgICogRm9yIG1vcmUg
aW5mbyByZWZlciB0byBub3RlcyBhdCBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9k
b2NzL2NvbXBvbmVudC1hcGkuaHRtbCNzZXRzdGF0ZQorICAgICAqIGFuZCBodHRwczovL2ZhY2Vi
b29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL2NvbXBvbmVudC1zcGVjcy5odG1sI3VwZGF0aW5nLWNv
bXBvbmVudGRpZHVwZGF0ZQorICAgICAqLworICAgIGNvbXBvbmVudERpZFVwZGF0ZTogZnVuY3Rp
b24gKHByZXZQcm9wcykgeworICAgICAgaWYgKCFwcmV2UHJvcHMuZWRpdGluZyAmJiB0aGlzLnBy
b3BzLmVkaXRpbmcpIHsKKyAgICAgICAgdmFyIG5vZGUgPSBSZWFjdC5maW5kRE9NTm9kZSh0aGlz
LnJlZnMuZWRpdEZpZWxkKTsKKyAgICAgICAgbm9kZS5mb2N1cygpOworICAgICAgICBub2RlLnNl
dFNlbGVjdGlvblJhbmdlKG5vZGUudmFsdWUubGVuZ3RoLCBub2RlLnZhbHVlLmxlbmd0aCk7Cisg
ICAgICB9CisgICAgfSwKKworICAgIHJlbmRlcjogZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJu
ICgKKyAgICAgICAgPGxpIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyh7CisgICAgICAgICAgY29tcGxl
dGVkOiB0aGlzLnByb3BzLnRvZG8uY29tcGxldGVkLAorICAgICAgICAgIGVkaXRpbmc6IHRoaXMu
cHJvcHMuZWRpdGluZworICAgICAgICB9KX0+CisgICAgICAgICAgPGRpdiBjbGFzc05hbWU9InZp
ZXciPgorICAgICAgICAgICAgPGlucHV0CisgICAgICAgICAgICAgIGNsYXNzTmFtZT0idG9nZ2xl
IgorICAgICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKKyAgICAgICAgICAgICAgY2hlY2tlZD17
dGhpcy5wcm9wcy50b2RvLmNvbXBsZXRlZH0KKyAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMu
cHJvcHMub25Ub2dnbGV9CisgICAgICAgICAgICAvPgorICAgICAgICAgICAgPGxhYmVsIG9uRG91
YmxlQ2xpY2s9e3RoaXMuaGFuZGxlRWRpdH0+CisgICAgICAgICAgICAgIHt0aGlzLnByb3BzLnRv
ZG8udGl0bGV9CisgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICAgPGJ1dHRvbiBjbGFz
c05hbWU9ImRlc3Ryb3kiIG9uQ2xpY2s9e3RoaXMucHJvcHMub25EZXN0cm95fSAvPgorICAgICAg
ICAgIDwvZGl2PgorICAgICAgICAgIDxpbnB1dAorICAgICAgICAgICAgcmVmPSJlZGl0RmllbGQi
CisgICAgICAgICAgICBjbGFzc05hbWU9ImVkaXQiCisgICAgICAgICAgICB2YWx1ZT17dGhpcy5z
dGF0ZS5lZGl0VGV4dH0KKyAgICAgICAgICAgIG9uQmx1cj17dGhpcy5oYW5kbGVTdWJtaXR9Cisg
ICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9CisgICAgICAgICAgICBvbktl
eURvd249e3RoaXMuaGFuZGxlS2V5RG93bn0KKyAgICAgICAgICAvPgorICAgICAgICA8L2xpPgor
ICAgICAgKTsKKyAgICB9CisgIH0pOworCisJdmFyIEVOVEVSX0tFWSA9IDEzOworCisJdmFyIFRv
ZG9BcHAgPSBSZWFjdC5jcmVhdGVDbGFzcyh7CisJCWdldEluaXRpYWxTdGF0ZTogZnVuY3Rpb24g
KCkgeworCQkJcmV0dXJuIHsKKwkJCQlub3dTaG93aW5nOiBhcHAuQUxMX1RPRE9TLAorCQkJCWVk
aXRpbmc6IG51bGwsCisJCQkJbmV3VG9kbzogJycKKwkJCX07CisJCX0sCisKKwkJY29tcG9uZW50
RGlkTW91bnQ6IGZ1bmN0aW9uICgpIHsKKwkJCXZhciBzZXRTdGF0ZSA9IHRoaXMuc2V0U3RhdGU7
CisJCQl2YXIgcm91dGVyID0gUm91dGVyKHsKKwkJCQknLyc6IHNldFN0YXRlLmJpbmQodGhpcywg
e25vd1Nob3dpbmc6IGFwcC5BTExfVE9ET1N9KSwKKwkJCQknL2FjdGl2ZSc6IHNldFN0YXRlLmJp
bmQodGhpcywge25vd1Nob3dpbmc6IGFwcC5BQ1RJVkVfVE9ET1N9KSwKKwkJCQknL2NvbXBsZXRl
ZCc6IHNldFN0YXRlLmJpbmQodGhpcywge25vd1Nob3dpbmc6IGFwcC5DT01QTEVURURfVE9ET1N9
KQorCQkJfSk7CisJCQlyb3V0ZXIuaW5pdCgnLycpOworCQl9LAorCisJCWhhbmRsZUNoYW5nZTog
ZnVuY3Rpb24gKGV2ZW50KSB7CisJCQl0aGlzLnNldFN0YXRlKHtuZXdUb2RvOiBldmVudC50YXJn
ZXQudmFsdWV9KTsKKwkJfSwKKworCQloYW5kbGVOZXdUb2RvS2V5RG93bjogZnVuY3Rpb24gKGV2
ZW50KSB7CisJCQlpZiAoZXZlbnQua2V5Q29kZSAhPT0gRU5URVJfS0VZKSB7CisJCQkJcmV0dXJu
OworCQkJfQorCisJCQlldmVudC5wcmV2ZW50RGVmYXVsdCgpOworCisJCQl2YXIgdmFsID0gdGhp
cy5zdGF0ZS5uZXdUb2RvLnRyaW0oKTsKKworCQkJaWYgKHZhbCkgeworCQkJCXRoaXMucHJvcHMu
bW9kZWwuYWRkVG9kbyh2YWwpOworCQkJCXRoaXMuc2V0U3RhdGUoe25ld1RvZG86ICcnfSk7CisJ
CQl9CisJCX0sCisKKwkJdG9nZ2xlQWxsOiBmdW5jdGlvbiAoZXZlbnQpIHsKKwkJCXZhciBjaGVj
a2VkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7CisJCQl0aGlzLnByb3BzLm1vZGVsLnRvZ2dsZUFs
bChjaGVja2VkKTsKKwkJfSwKKworCQl0b2dnbGU6IGZ1bmN0aW9uICh0b2RvVG9Ub2dnbGUpIHsK
KwkJCXRoaXMucHJvcHMubW9kZWwudG9nZ2xlKHRvZG9Ub1RvZ2dsZSk7CisJCX0sCisKKwkJZGVz
dHJveTogZnVuY3Rpb24gKHRvZG8pIHsKKwkJCXRoaXMucHJvcHMubW9kZWwuZGVzdHJveSh0b2Rv
KTsKKwkJfSwKKworCQllZGl0OiBmdW5jdGlvbiAodG9kbykgeworCQkJdGhpcy5zZXRTdGF0ZSh7
ZWRpdGluZzogdG9kby5pZH0pOworCQl9LAorCisJCXNhdmU6IGZ1bmN0aW9uICh0b2RvVG9TYXZl
LCB0ZXh0KSB7CisJCQl0aGlzLnByb3BzLm1vZGVsLnNhdmUodG9kb1RvU2F2ZSwgdGV4dCk7CisJ
CQl0aGlzLnNldFN0YXRlKHtlZGl0aW5nOiBudWxsfSk7CisJCX0sCisKKwkJY2FuY2VsOiBmdW5j
dGlvbiAoKSB7CisJCQl0aGlzLnNldFN0YXRlKHtlZGl0aW5nOiBudWxsfSk7CisJCX0sCisKKwkJ
Y2xlYXJDb21wbGV0ZWQ6IGZ1bmN0aW9uICgpIHsKKwkJCXRoaXMucHJvcHMubW9kZWwuY2xlYXJD
b21wbGV0ZWQoKTsKKwkJfSwKKworCQlyZW5kZXI6IGZ1bmN0aW9uICgpIHsKKwkJCXZhciBmb290
ZXI7CisJCQl2YXIgbWFpbjsKKwkJCXZhciB0b2RvcyA9IHRoaXMucHJvcHMubW9kZWwudG9kb3M7
CisKKwkJCXZhciBzaG93blRvZG9zID0gdG9kb3MuZmlsdGVyKGZ1bmN0aW9uICh0b2RvKSB7CisJ
CQkJc3dpdGNoICh0aGlzLnN0YXRlLm5vd1Nob3dpbmcpIHsKKwkJCQljYXNlIGFwcC5BQ1RJVkVf
VE9ET1M6CisJCQkJCXJldHVybiAhdG9kby5jb21wbGV0ZWQ7CisJCQkJY2FzZSBhcHAuQ09NUExF
VEVEX1RPRE9TOgorCQkJCQlyZXR1cm4gdG9kby5jb21wbGV0ZWQ7CisJCQkJZGVmYXVsdDoKKwkJ
CQkJcmV0dXJuIHRydWU7CisJCQkJfQorCQkJfSwgdGhpcyk7CisKKwkJCXZhciB0b2RvSXRlbXMg
PSBzaG93blRvZG9zLm1hcChmdW5jdGlvbiAodG9kbykgeworCQkJCXJldHVybiAoCisJCQkJCTxU
b2RvSXRlbQorCQkJCQkJa2V5PXt0b2RvLmlkfQorCQkJCQkJdG9kbz17dG9kb30KKwkJCQkJCW9u
VG9nZ2xlPXt0aGlzLnRvZ2dsZS5iaW5kKHRoaXMsIHRvZG8pfQorCQkJCQkJb25EZXN0cm95PXt0
aGlzLmRlc3Ryb3kuYmluZCh0aGlzLCB0b2RvKX0KKwkJCQkJCW9uRWRpdD17dGhpcy5lZGl0LmJp
bmQodGhpcywgdG9kbyl9CisJCQkJCQllZGl0aW5nPXt0aGlzLnN0YXRlLmVkaXRpbmcgPT09IHRv
ZG8uaWR9CisJCQkJCQlvblNhdmU9e3RoaXMuc2F2ZS5iaW5kKHRoaXMsIHRvZG8pfQorCQkJCQkJ
b25DYW5jZWw9e3RoaXMuY2FuY2VsfQorCQkJCQkvPgorCQkJCSk7CisJCQl9LCB0aGlzKTsKKwor
CQkJdmFyIGFjdGl2ZVRvZG9Db3VudCA9IHRvZG9zLnJlZHVjZShmdW5jdGlvbiAoYWNjdW0sIHRv
ZG8pIHsKKwkJCQlyZXR1cm4gdG9kby5jb21wbGV0ZWQgPyBhY2N1bSA6IGFjY3VtICsgMTsKKwkJ
CX0sIDApOworCisJCQl2YXIgY29tcGxldGVkQ291bnQgPSB0b2Rvcy5sZW5ndGggLSBhY3RpdmVU
b2RvQ291bnQ7CisKKwkJCWlmIChhY3RpdmVUb2RvQ291bnQgfHwgY29tcGxldGVkQ291bnQpIHsK
KwkJCQlmb290ZXIgPQorCQkJCQk8VG9kb0Zvb3RlcgorCQkJCQkJY291bnQ9e2FjdGl2ZVRvZG9D
b3VudH0KKwkJCQkJCWNvbXBsZXRlZENvdW50PXtjb21wbGV0ZWRDb3VudH0KKwkJCQkJCW5vd1No
b3dpbmc9e3RoaXMuc3RhdGUubm93U2hvd2luZ30KKwkJCQkJCW9uQ2xlYXJDb21wbGV0ZWQ9e3Ro
aXMuY2xlYXJDb21wbGV0ZWR9CisJCQkJCS8+OworCQkJfQorCisJCQlpZiAodG9kb3MubGVuZ3Ro
KSB7CisJCQkJbWFpbiA9ICgKKwkJCQkJPHNlY3Rpb24gY2xhc3NOYW1lPSJtYWluIj4KKwkJCQkJ
CTxpbnB1dAorCQkJCQkJCWNsYXNzTmFtZT0idG9nZ2xlLWFsbCIKKwkJCQkJCQl0eXBlPSJjaGVj
a2JveCIKKwkJCQkJCQlvbkNoYW5nZT17dGhpcy50b2dnbGVBbGx9CisJCQkJCQkJY2hlY2tlZD17
YWN0aXZlVG9kb0NvdW50ID09PSAwfQorCQkJCQkJLz4KKwkJCQkJCTx1bCBjbGFzc05hbWU9InRv
ZG8tbGlzdCI+CisJCQkJCQkJe3RvZG9JdGVtc30KKwkJCQkJCTwvdWw+CisJCQkJCTwvc2VjdGlv
bj4KKwkJCQkpOworCQkJfQorCisJCQlyZXR1cm4gKAorCQkJCTxkaXY+CisJCQkJCTxoZWFkZXIg
Y2xhc3NOYW1lPSJoZWFkZXIiPgorCQkJCQkJPGgxPnRvZG9zPC9oMT4KKwkJCQkJCTxpbnB1dAor
CQkJCQkJCWNsYXNzTmFtZT0ibmV3LXRvZG8iCisJCQkJCQkJcGxhY2Vob2xkZXI9IldoYXQgbmVl
ZHMgdG8gYmUgZG9uZT8iCisJCQkJCQkJdmFsdWU9e3RoaXMuc3RhdGUubmV3VG9kb30KKwkJCQkJ
CQlvbktleURvd249e3RoaXMuaGFuZGxlTmV3VG9kb0tleURvd259CisJCQkJCQkJb25DaGFuZ2U9
e3RoaXMuaGFuZGxlQ2hhbmdlfQorCQkJCQkJCWF1dG9Gb2N1cz17dHJ1ZX0KKwkJCQkJCS8+CisJ
CQkJCTwvaGVhZGVyPgorCQkJCQl7bWFpbn0KKwkJCQkJe2Zvb3Rlcn0KKwkJCQk8L2Rpdj4KKwkJ
CSk7CisJCX0KKwl9KTsKKworCXZhciBtb2RlbCA9IG5ldyBhcHAuVG9kb01vZGVsKCdyZWFjdC10
b2RvcycpOworCisJZnVuY3Rpb24gcmVuZGVyKCkgeworCQlSZWFjdERPTS5yZW5kZXIoCisJCQk8
VG9kb0FwcCBtb2RlbD17bW9kZWx9Lz4sCisJCQlkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NO
YW1lKCd0b2RvYXBwJylbMF0KKwkJKTsKKwl9CisKKwltb2RlbC5zdWJzY3JpYmUocmVuZGVyKTsK
KwlyZW5kZXIoKTsKK30pKCk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9saWNlbnNl
Lm1kIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvbGljZW5zZS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYmZhMmUzODll
ZDhjY2Q4N2IzZDU5ZDIyNjFhN2FkNjM1NGZjMzc0Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvcmVhY3QvbGljZW5zZS5tZApAQCAtMCwwICsxLDIwIEBACitFdmVyeXRoaW5nIGluIHRo
aXMgcmVwbyBpcyBNSVQgTGljZW5zZSB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZC4KKworQ29w
eXJpZ2h0IChjKSBBZGR5IE9zbWFuaSwgU2luZHJlIFNvcmh1cywgUGFzY2FsIEhhcnRpZywgU3Rl
cGhlbiBTYXdjaHVrLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo
YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCit0aGlzIHNvZnR3YXJlIGFu
ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVh
bCBpbgordGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0
IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwordXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs
aXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YKK3RoZSBT
b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1
cm5pc2hlZCB0byBkbyBzbywKK3N1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgor
CitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBz
aGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKK2NvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv
ZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI
T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcg
QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklU
TkVTUworRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SCitDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUg
Rk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIKK0lOIEFO
IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VU
IE9GIE9SIElOCitDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RI
RVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2Jp
bmQuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmQ4YWUxM2I5NTQ5OWUwYTgxMjU0NmIxNGYyZDVmNTZkY2Q5MWI2MjQKLS0t
IC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvY2xhc3NuYW1l
cy9iaW5kLmpzCkBAIC0wLDAgKzEsNDggQEAKKy8qIQorICBDb3B5cmlnaHQgKGMpIDIwMTYgSmVk
IFdhdHNvbi4KKyAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWUKKyAg
aHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lcworKi8KKy8qIGdsb2JhbCBkZWZp
bmUgKi8KKworKGZ1bmN0aW9uICgpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICB2YXIgaGFz
T3duID0ge30uaGFzT3duUHJvcGVydHk7CisKKyAgICBmdW5jdGlvbiBjbGFzc05hbWVzICgpIHsK
KyAgICAgICAgdmFyIGNsYXNzZXMgPSBbXTsKKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50
c1tpXTsKKyAgICAgICAgICAgIGlmICghYXJnKSBjb250aW51ZTsKKworICAgICAgICAgICAgdmFy
IGFyZ1R5cGUgPSB0eXBlb2YgYXJnOworCisgICAgICAgICAgICBpZiAoYXJnVHlwZSA9PT0gJ3N0
cmluZycgfHwgYXJnVHlwZSA9PT0gJ251bWJlcicpIHsKKyAgICAgICAgICAgICAgICBjbGFzc2Vz
LnB1c2godGhpcyAmJiB0aGlzW2FyZ10gfHwgYXJnKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
QXJyYXkuaXNBcnJheShhcmcpKSB7CisgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKGNsYXNz
TmFtZXMuYXBwbHkodGhpcywgYXJnKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ1R5cGUg
PT09ICdvYmplY3QnKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGFyZykgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXld
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2godGhpcyAmJiB0aGlzW2tl
eV0gfHwga2V5KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBjbGFzc2VzLmpvaW4oJyAn
KTsKKyAgICB9CisKKyAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9k
dWxlLmV4cG9ydHMpIHsKKyAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzOworICAg
IH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5l
LmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkgeworICAgICAgICAvLyByZWdpc3RlciBh
cyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lCisgICAgICAg
IGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gY2xhc3NOYW1lczsKKyAgICAgICAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgd2luZG93
LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzOworICAgIH0KK30oKSk7CmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9kZWR1cGUuanMgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9kZWR1cGUuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OTU0NmY4ZTNhMTBmNDFiYzExYTJmYjhmNzJmZDRlMmU2ZTBhMjFlYQotLS0gL2Rldi9udWxsCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2RlZHVwZS5qcwpA
QCAtMCwwICsxLDEwOSBAQAorLyohCisgIENvcHlyaWdodCAoYykgMjAxNiBKZWQgV2F0c29uLgor
ICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZQorICBodHRwOi8vamVk
d2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzCisqLworLyogZ2xvYmFsIGRlZmluZSAqLworCiso
ZnVuY3Rpb24gKCkgeworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHZhciBjbGFzc05hbWVzID0g
KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gZG9uJ3QgaW5oZXJpdCBmcm9tIE9iamVjdCBzbyB3
ZSBjYW4gc2tpcCBoYXNPd25Qcm9wZXJ0eSBjaGVjayBsYXRlcgorICAgICAgICAvLyBodHRwOi8v
c3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1NTE4MzI4L2NyZWF0aW5nLWpzLW9iamVjdC13
aXRoLW9iamVjdC1jcmVhdGVudWxsI2Fuc3dlci0yMTA3OTIzMgorICAgICAgICBmdW5jdGlvbiBT
dG9yYWdlT2JqZWN0KCkge30KKyAgICAgICAgU3RvcmFnZU9iamVjdC5wcm90b3R5cGUgPSBPYmpl
Y3QuY3JlYXRlKG51bGwpOworCisgICAgICAgIGZ1bmN0aW9uIF9wYXJzZUFycmF5IChyZXN1bHRT
ZXQsIGFycmF5KSB7CisgICAgICAgICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOworCisg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAg
ICAgICAgX3BhcnNlKHJlc3VsdFNldCwgYXJyYXlbaV0pOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgdmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5OworCisgICAgICAg
IGZ1bmN0aW9uIF9wYXJzZU51bWJlciAocmVzdWx0U2V0LCBudW0pIHsKKyAgICAgICAgICAgIHJl
c3VsdFNldFtudW1dID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIF9wYXJz
ZU9iamVjdCAocmVzdWx0U2V0LCBvYmplY3QpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGsgaW4g
b2JqZWN0KSB7CisgICAgICAgICAgICAgICAgaWYgKGhhc093bi5jYWxsKG9iamVjdCwgaykpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gc2V0IHZhbHVlIHRvIGZhbHNlIGluc3RlYWQgb2YgZGVs
ZXRpbmcgaXQgdG8gYXZvaWQgY2hhbmdpbmcgb2JqZWN0IHN0cnVjdHVyZQorICAgICAgICAgICAg
ICAgICAgICAvLyBodHRwczovL3d3dy5zbWFzaGluZ21hZ2F6aW5lLmNvbS8yMDEyLzExL3dyaXRp
bmctZmFzdC1tZW1vcnktZWZmaWNpZW50LWphdmFzY3JpcHQvI2RlLXJlZmVyZW5jaW5nLW1pc2Nv
bmNlcHRpb25zCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFNldFtrXSA9ICEhb2JqZWN0W2td
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IHZhciBTUEFDRSA9IC9ccysvOworICAgICAgICBmdW5jdGlvbiBfcGFyc2VTdHJpbmcgKHJlc3Vs
dFNldCwgc3RyKSB7CisgICAgICAgICAgICB2YXIgYXJyYXkgPSBzdHIuc3BsaXQoU1BBQ0UpOwor
ICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsKKworICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIHJlc3VsdFNl
dFthcnJheVtpXV0gPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
ZnVuY3Rpb24gX3BhcnNlIChyZXN1bHRTZXQsIGFyZykgeworICAgICAgICAgICAgaWYgKCFhcmcp
IHJldHVybjsKKyAgICAgICAgICAgIHZhciBhcmdUeXBlID0gdHlwZW9mIGFyZzsKKworICAgICAg
ICAgICAgLy8gJ2ZvbyBiYXInCisgICAgICAgICAgICBpZiAoYXJnVHlwZSA9PT0gJ3N0cmluZycp
IHsKKyAgICAgICAgICAgICAgICBfcGFyc2VTdHJpbmcocmVzdWx0U2V0LCBhcmcpOworCisgICAg
ICAgICAgICAvLyBbJ2ZvbycsICdiYXInLCAuLi5dCisgICAgICAgICAgICB9IGVsc2UgaWYgKEFy
cmF5LmlzQXJyYXkoYXJnKSkgeworICAgICAgICAgICAgICAgIF9wYXJzZUFycmF5KHJlc3VsdFNl
dCwgYXJnKTsKKworICAgICAgICAgICAgLy8geyAnZm9vJzogdHJ1ZSwgLi4uIH0KKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoYXJnVHlwZSA9PT0gJ29iamVjdCcpIHsKKyAgICAgICAgICAgICAgICBf
cGFyc2VPYmplY3QocmVzdWx0U2V0LCBhcmcpOworCisgICAgICAgICAgICAvLyAnMTMwJworICAg
ICAgICAgICAgfSBlbHNlIGlmIChhcmdUeXBlID09PSAnbnVtYmVyJykgeworICAgICAgICAgICAg
ICAgIF9wYXJzZU51bWJlcihyZXN1bHRTZXQsIGFyZyk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiBfY2xhc3NOYW1lcyAoKSB7CisgICAgICAgICAgICAvLyBk
b24ndCBsZWFrIGFyZ3VtZW50cworICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Bl
dGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMyLWxlYWtpbmct
YXJndW1lbnRzCisgICAgICAgICAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsKKyAgICAg
ICAgICAgIHZhciBhcmdzID0gQXJyYXkobGVuKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ld
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgY2xhc3NTZXQgPSBuZXcgU3RvcmFn
ZU9iamVjdCgpOworICAgICAgICAgICAgX3BhcnNlQXJyYXkoY2xhc3NTZXQsIGFyZ3MpOworCisg
ICAgICAgICAgICB2YXIgbGlzdCA9IFtdOworCisgICAgICAgICAgICBmb3IgKHZhciBrIGluIGNs
YXNzU2V0KSB7CisgICAgICAgICAgICAgICAgaWYgKGNsYXNzU2V0W2tdKSB7CisgICAgICAgICAg
ICAgICAgICAgIGxpc3QucHVzaChrKQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgcmV0dXJuIGxpc3Quam9pbignICcpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIF9jbGFzc05hbWVzOworICAgIH0pKCk7CisKKyAgICBpZiAodHlwZW9mIG1vZHVs
ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHsKKyAgICAgICAgbW9kdWxlLmV4
cG9ydHMgPSBjbGFzc05hbWVzOworICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1
bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkg
eworICAgICAgICAvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBu
cG0gcGFja2FnZSBuYW1lCisgICAgICAgIGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lczsKKyAgICAgICAgfSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgd2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzOworICAgIH0K
K30oKSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvY2xhc3Nu
YW1lcy9pbmRleC5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9jbGFzc25hbWVz
L2luZGV4LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM4ZjBmZjJiZjkwYTI5M2Y0MzBmZTk3OGQ5NGZhMGI1N2Vh
Yzg1MTgKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMv
Y2xhc3NuYW1lcy9pbmRleC5qcwpAQCAtMCwwICsxLDQ4IEBACisvKiEKKyAgQ29weXJpZ2h0IChj
KSAyMDE2IEplZCBXYXRzb24uCisgIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlU
KSwgc2VlCisgIGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXMKKyovCisvKiBn
bG9iYWwgZGVmaW5lICovCisKKyhmdW5jdGlvbiAoKSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisg
ICAgdmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5OworCisgICAgZnVuY3Rpb24gY2xhc3NO
YW1lcyAoKSB7CisgICAgICAgIHZhciBjbGFzc2VzID0gW107CisKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBhcmcg
PSBhcmd1bWVudHNbaV07CisgICAgICAgICAgICBpZiAoIWFyZykgY29udGludWU7CisKKyAgICAg
ICAgICAgIHZhciBhcmdUeXBlID0gdHlwZW9mIGFyZzsKKworICAgICAgICAgICAgaWYgKGFyZ1R5
cGUgPT09ICdzdHJpbmcnIHx8IGFyZ1R5cGUgPT09ICdudW1iZXInKSB7CisgICAgICAgICAgICAg
ICAgY2xhc3Nlcy5wdXNoKGFyZyk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJy
YXkoYXJnKSkgeworICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaChjbGFzc05hbWVzLmFwcGx5
KG51bGwsIGFyZykpOworICAgICAgICAgICAgfSBlbHNlIGlmIChhcmdUeXBlID09PSAnb2JqZWN0
JykgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBhcmcpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKGtleSk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7CisgICAgfQorCisgICAgaWYgKHR5cGVvZiBtb2R1
bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7CisgICAgICAgIG1vZHVsZS5l
eHBvcnRzID0gY2xhc3NOYW1lczsKKyAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdm
dW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQp
IHsKKyAgICAgICAgLy8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGgg
bnBtIHBhY2thZ2UgbmFtZQorICAgICAgICBkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZXM7CisgICAgICAgIH0pOworICAg
IH0gZWxzZSB7CisgICAgICAgIHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lczsKKyAgICB9
Cit9KCkpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0
LWRvbS9kaXN0L3JlYWN0LWRvbS5taW4uanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVs
ZXMvcmVhY3QtZG9tL2Rpc3QvcmVhY3QtZG9tLm1pbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMjYxZWRkZDY2
MDIzYTlmODIyNWY5NTE4ZjJiNzk0MjY0NDY5YmU1Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9kaXN0L3JlYWN0LWRvbS5taW4uanMK
QEAgLTAsMCArMSwxNiBAQAorLyoqCisgKiBSZWFjdERPTSB2MTUuNS40CisgKgorICogQ29weXJp
Z2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxl
IGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0
b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVu
dCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGly
ZWN0b3J5LgorICoKKyAqLworIWZ1bmN0aW9uKGUpe2lmKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0
cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9ZShyZXF1aXJlKCJy
ZWFjdCIpKTtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVm
aW5lKFsicmVhY3QiXSxlKTtlbHNle3ZhciB0O3Q9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/
d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlw
ZW9mIHNlbGY/c2VsZjp0aGlzLHQuUmVhY3RET009ZSh0LlJlYWN0KX19KGZ1bmN0aW9uKGUpe3Jl
dHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZSh0LG4s
cil7ZnVuY3Rpb24gbyhhLHMpe2lmKCFuW2FdKXtpZighdFthXSl7dmFyIHU9ImZ1bmN0aW9uIj09
dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIXMmJnUpcmV0dXJuIHUoYSwhMCk7aWYoaSlyZXR1
cm4gaShhLCEwKTt2YXIgbD1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIithKyInIik7
dGhyb3cgbC5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixsfXZhciBjPW5bYV09e2V4cG9ydHM6e319
O3RbYV1bMF0uY2FsbChjLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFthXVsxXVtlXTtyZXR1
cm4gbyhufHxlKX0sYyxjLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bYV0uZXhwb3J0c31mb3Io
dmFyIGk9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsYT0wO2E8ci5sZW5ndGg7
YSsrKW8oclthXSk7cmV0dXJuIG99KHsxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3Zh
ciByPXtQcm9wZXJ0aWVzOnsiYXJpYS1jdXJyZW50IjowLCJhcmlhLWRldGFpbHMiOjAsImFyaWEt
ZGlzYWJsZWQiOjAsImFyaWEtaGlkZGVuIjowLCJhcmlhLWludmFsaWQiOjAsImFyaWEta2V5c2hv
cnRjdXRzIjowLCJhcmlhLWxhYmVsIjowLCJhcmlhLXJvbGVkZXNjcmlwdGlvbiI6MCwiYXJpYS1h
dXRvY29tcGxldGUiOjAsImFyaWEtY2hlY2tlZCI6MCwiYXJpYS1leHBhbmRlZCI6MCwiYXJpYS1o
YXNwb3B1cCI6MCwiYXJpYS1sZXZlbCI6MCwiYXJpYS1tb2RhbCI6MCwiYXJpYS1tdWx0aWxpbmUi
OjAsImFyaWEtbXVsdGlzZWxlY3RhYmxlIjowLCJhcmlhLW9yaWVudGF0aW9uIjowLCJhcmlhLXBs
YWNlaG9sZGVyIjowLCJhcmlhLXByZXNzZWQiOjAsImFyaWEtcmVhZG9ubHkiOjAsImFyaWEtcmVx
dWlyZWQiOjAsImFyaWEtc2VsZWN0ZWQiOjAsImFyaWEtc29ydCI6MCwiYXJpYS12YWx1ZW1heCI6
MCwiYXJpYS12YWx1ZW1pbiI6MCwiYXJpYS12YWx1ZW5vdyI6MCwiYXJpYS12YWx1ZXRleHQiOjAs
ImFyaWEtYXRvbWljIjowLCJhcmlhLWJ1c3kiOjAsImFyaWEtbGl2ZSI6MCwiYXJpYS1yZWxldmFu
dCI6MCwiYXJpYS1kcm9wZWZmZWN0IjowLCJhcmlhLWdyYWJiZWQiOjAsImFyaWEtYWN0aXZlZGVz
Y2VuZGFudCI6MCwiYXJpYS1jb2xjb3VudCI6MCwiYXJpYS1jb2xpbmRleCI6MCwiYXJpYS1jb2xz
cGFuIjowLCJhcmlhLWNvbnRyb2xzIjowLCJhcmlhLWRlc2NyaWJlZGJ5IjowLCJhcmlhLWVycm9y
bWVzc2FnZSI6MCwiYXJpYS1mbG93dG8iOjAsImFyaWEtbGFiZWxsZWRieSI6MCwiYXJpYS1vd25z
IjowLCJhcmlhLXBvc2luc2V0IjowLCJhcmlhLXJvd2NvdW50IjowLCJhcmlhLXJvd2luZGV4Ijow
LCJhcmlhLXJvd3NwYW4iOjAsImFyaWEtc2V0c2l6ZSI6MH0sRE9NQXR0cmlidXRlTmFtZXM6e30s
RE9NUHJvcGVydHlOYW1lczp7fX07dC5leHBvcnRzPXJ9LHt9XSwyOltmdW5jdGlvbihlLHQsbil7
InVzZSBzdHJpY3QiO3ZhciByPWUoMzMpLG89ZSgxMzEpLGk9e2ZvY3VzRE9NQ29tcG9uZW50OmZ1
bmN0aW9uKCl7byhyLmdldE5vZGVGcm9tSW5zdGFuY2UodGhpcykpfX07dC5leHBvcnRzPWl9LHsx
MzE6MTMxLDMzOjMzfV0sMzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBy
KGUpe3JldHVybihlLmN0cmxLZXl8fGUuYWx0S2V5fHxlLm1ldGFLZXkpJiYhKGUuY3RybEtleSYm
ZS5hbHRLZXkpfWZ1bmN0aW9uIG8oZSl7c3dpdGNoKGUpe2Nhc2UidG9wQ29tcG9zaXRpb25TdGFy
dCI6cmV0dXJuIFQuY29tcG9zaXRpb25TdGFydDtjYXNlInRvcENvbXBvc2l0aW9uRW5kIjpyZXR1
cm4gVC5jb21wb3NpdGlvbkVuZDtjYXNlInRvcENvbXBvc2l0aW9uVXBkYXRlIjpyZXR1cm4gVC5j
b21wb3NpdGlvblVwZGF0ZX19ZnVuY3Rpb24gaShlLHQpe3JldHVybiJ0b3BLZXlEb3duIj09PWUm
JnQua2V5Q29kZT09PXl9ZnVuY3Rpb24gYShlLHQpe3N3aXRjaChlKXtjYXNlInRvcEtleVVwIjpy
ZXR1cm4tMSE9PWcuaW5kZXhPZih0LmtleUNvZGUpO2Nhc2UidG9wS2V5RG93biI6cmV0dXJuIHQu
a2V5Q29kZSE9PXk7Y2FzZSJ0b3BLZXlQcmVzcyI6Y2FzZSJ0b3BNb3VzZURvd24iOmNhc2UidG9w
Qmx1ciI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gcyhlKXt2YXIgdD1lLmRl
dGFpbDtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJiJkYXRhImluIHQ/dC5kYXRhOm51bGx9ZnVu
Y3Rpb24gdShlLHQsbixyKXt2YXIgdSxsO2lmKF8/dT1vKGUpOlA/YShlLG4pJiYodT1ULmNvbXBv
c2l0aW9uRW5kKTppKGUsbikmJih1PVQuY29tcG9zaXRpb25TdGFydCksIXUpcmV0dXJuIG51bGw7
RSYmKFB8fHUhPT1ULmNvbXBvc2l0aW9uU3RhcnQ/dT09PVQuY29tcG9zaXRpb25FbmQmJlAmJihs
PVAuZ2V0RGF0YSgpKTpQPWguZ2V0UG9vbGVkKHIpKTt2YXIgYz1tLmdldFBvb2xlZCh1LHQsbixy
KTtpZihsKWMuZGF0YT1sO2Vsc2V7dmFyIHA9cyhuKTtudWxsIT09cCYmKGMuZGF0YT1wKX1yZXR1
cm4gZC5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGMpLGN9ZnVuY3Rpb24gbChlLHQpe3N3
aXRjaChlKXtjYXNlInRvcENvbXBvc2l0aW9uRW5kIjpyZXR1cm4gcyh0KTtjYXNlInRvcEtleVBy
ZXNzIjpyZXR1cm4gdC53aGljaCE9PXg/bnVsbDooaz0hMCx3KTtjYXNlInRvcFRleHRJbnB1dCI6
dmFyIG49dC5kYXRhO3JldHVybiBuPT09dyYmaz9udWxsOm47ZGVmYXVsdDpyZXR1cm4gbnVsbH19
ZnVuY3Rpb24gYyhlLHQpe2lmKFApe2lmKCJ0b3BDb21wb3NpdGlvbkVuZCI9PT1lfHwhXyYmYShl
LHQpKXt2YXIgbj1QLmdldERhdGEoKTtyZXR1cm4gaC5yZWxlYXNlKFApLFA9bnVsbCxufXJldHVy
biBudWxsfXN3aXRjaChlKXtjYXNlInRvcFBhc3RlIjpyZXR1cm4gbnVsbDtjYXNlInRvcEtleVBy
ZXNzIjpyZXR1cm4gdC53aGljaCYmIXIodCk/U3RyaW5nLmZyb21DaGFyQ29kZSh0LndoaWNoKTpu
dWxsO2Nhc2UidG9wQ29tcG9zaXRpb25FbmQiOnJldHVybiBFP251bGw6dC5kYXRhO2RlZmF1bHQ6
cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHAoZSx0LG4scil7dmFyIG87aWYoIShvPWI/bChlLG4pOmMo
ZSxuKSkpcmV0dXJuIG51bGw7dmFyIGk9di5nZXRQb29sZWQoVC5iZWZvcmVJbnB1dCx0LG4scik7
cmV0dXJuIGkuZGF0YT1vLGQuYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhpKSxpfXZhciBk
PWUoMTkpLGY9ZSgxMjMpLGg9ZSgyMCksbT1lKDc4KSx2PWUoODIpLGc9WzksMTMsMjcsMzJdLHk9
MjI5LF89Zi5jYW5Vc2VET00mJiJDb21wb3NpdGlvbkV2ZW50ImluIHdpbmRvdyxDPW51bGw7Zi5j
YW5Vc2VET00mJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQmJihDPWRvY3VtZW50LmRvY3VtZW50
TW9kZSk7dmFyIGI9Zi5jYW5Vc2VET00mJiJUZXh0RXZlbnQiaW4gd2luZG93JiYhQyYmIWZ1bmN0
aW9uKCl7dmFyIGU9d2luZG93Lm9wZXJhO3JldHVybiJvYmplY3QiPT10eXBlb2YgZSYmImZ1bmN0
aW9uIj09dHlwZW9mIGUudmVyc2lvbiYmcGFyc2VJbnQoZS52ZXJzaW9uKCksMTApPD0xMn0oKSxF
PWYuY2FuVXNlRE9NJiYoIV98fEMmJkM+OCYmQzw9MTEpLHg9MzIsdz1TdHJpbmcuZnJvbUNoYXJD
b2RlKHgpLFQ9e2JlZm9yZUlucHV0OntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDoi
b25CZWZvcmVJbnB1dCIsY2FwdHVyZWQ6Im9uQmVmb3JlSW5wdXRDYXB0dXJlIn0sZGVwZW5kZW5j
aWVzOlsidG9wQ29tcG9zaXRpb25FbmQiLCJ0b3BLZXlQcmVzcyIsInRvcFRleHRJbnB1dCIsInRv
cFBhc3RlIl19LGNvbXBvc2l0aW9uRW5kOntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxl
ZDoib25Db21wb3NpdGlvbkVuZCIsY2FwdHVyZWQ6Im9uQ29tcG9zaXRpb25FbmRDYXB0dXJlIn0s
ZGVwZW5kZW5jaWVzOlsidG9wQmx1ciIsInRvcENvbXBvc2l0aW9uRW5kIiwidG9wS2V5RG93biIs
InRvcEtleVByZXNzIiwidG9wS2V5VXAiLCJ0b3BNb3VzZURvd24iXX0sY29tcG9zaXRpb25TdGFy
dDp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6Im9uQ29tcG9zaXRpb25TdGFydCIs
Y2FwdHVyZWQ6Im9uQ29tcG9zaXRpb25TdGFydENhcHR1cmUifSxkZXBlbmRlbmNpZXM6WyJ0b3BC
bHVyIiwidG9wQ29tcG9zaXRpb25TdGFydCIsInRvcEtleURvd24iLCJ0b3BLZXlQcmVzcyIsInRv
cEtleVVwIiwidG9wTW91c2VEb3duIl19LGNvbXBvc2l0aW9uVXBkYXRlOntwaGFzZWRSZWdpc3Ry
YXRpb25OYW1lczp7YnViYmxlZDoib25Db21wb3NpdGlvblVwZGF0ZSIsY2FwdHVyZWQ6Im9uQ29t
cG9zaXRpb25VcGRhdGVDYXB0dXJlIn0sZGVwZW5kZW5jaWVzOlsidG9wQmx1ciIsInRvcENvbXBv
c2l0aW9uVXBkYXRlIiwidG9wS2V5RG93biIsInRvcEtleVByZXNzIiwidG9wS2V5VXAiLCJ0b3BN
b3VzZURvd24iXX19LGs9ITEsUD1udWxsLFM9e2V2ZW50VHlwZXM6VCxleHRyYWN0RXZlbnRzOmZ1
bmN0aW9uKGUsdCxuLHIpe3JldHVyblt1KGUsdCxuLHIpLHAoZSx0LG4scildfX07dC5leHBvcnRz
PVN9LHsxMjM6MTIzLDE5OjE5LDIwOjIwLDc4Ojc4LDgyOjgyfV0sNDpbZnVuY3Rpb24oZSx0LG4p
eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGUrdC5jaGFyQXQoMCkudG9VcHBl
ckNhc2UoKSt0LnN1YnN0cmluZygxKX12YXIgbz17YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ITAs
Ym9yZGVySW1hZ2VPdXRzZXQ6ITAsYm9yZGVySW1hZ2VTbGljZTohMCxib3JkZXJJbWFnZVdpZHRo
OiEwLGJveEZsZXg6ITAsYm94RmxleEdyb3VwOiEwLGJveE9yZGluYWxHcm91cDohMCxjb2x1bW5D
b3VudDohMCxmbGV4OiEwLGZsZXhHcm93OiEwLGZsZXhQb3NpdGl2ZTohMCxmbGV4U2hyaW5rOiEw
LGZsZXhOZWdhdGl2ZTohMCxmbGV4T3JkZXI6ITAsZ3JpZFJvdzohMCxncmlkQ29sdW1uOiEwLGZv
bnRXZWlnaHQ6ITAsbGluZUNsYW1wOiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjoh
MCxvcnBoYW5zOiEwLHRhYlNpemU6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwLGZpbGxP
cGFjaXR5OiEwLGZsb29kT3BhY2l0eTohMCxzdG9wT3BhY2l0eTohMCxzdHJva2VEYXNoYXJyYXk6
ITAsc3Ryb2tlRGFzaG9mZnNldDohMCxzdHJva2VNaXRlcmxpbWl0OiEwLHN0cm9rZU9wYWNpdHk6
ITAsc3Ryb2tlV2lkdGg6ITB9LGk9WyJXZWJraXQiLCJtcyIsIk1veiIsIk8iXTtPYmplY3Qua2V5
cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2kuZm9yRWFjaChmdW5jdGlvbih0KXtvW3IodCxlKV09
b1tlXX0pfSk7dmFyIGE9e2JhY2tncm91bmQ6e2JhY2tncm91bmRBdHRhY2htZW50OiEwLGJhY2tn
cm91bmRDb2xvcjohMCxiYWNrZ3JvdW5kSW1hZ2U6ITAsYmFja2dyb3VuZFBvc2l0aW9uWDohMCxi
YWNrZ3JvdW5kUG9zaXRpb25ZOiEwLGJhY2tncm91bmRSZXBlYXQ6ITB9LGJhY2tncm91bmRQb3Np
dGlvbjp7YmFja2dyb3VuZFBvc2l0aW9uWDohMCxiYWNrZ3JvdW5kUG9zaXRpb25ZOiEwfSxib3Jk
ZXI6e2JvcmRlcldpZHRoOiEwLGJvcmRlclN0eWxlOiEwLGJvcmRlckNvbG9yOiEwfSxib3JkZXJC
b3R0b206e2JvcmRlckJvdHRvbVdpZHRoOiEwLGJvcmRlckJvdHRvbVN0eWxlOiEwLGJvcmRlckJv
dHRvbUNvbG9yOiEwfSxib3JkZXJMZWZ0Ontib3JkZXJMZWZ0V2lkdGg6ITAsYm9yZGVyTGVmdFN0
eWxlOiEwLGJvcmRlckxlZnRDb2xvcjohMH0sYm9yZGVyUmlnaHQ6e2JvcmRlclJpZ2h0V2lkdGg6
ITAsYm9yZGVyUmlnaHRTdHlsZTohMCxib3JkZXJSaWdodENvbG9yOiEwfSxib3JkZXJUb3A6e2Jv
cmRlclRvcFdpZHRoOiEwLGJvcmRlclRvcFN0eWxlOiEwLGJvcmRlclRvcENvbG9yOiEwfSxmb250
Ontmb250U3R5bGU6ITAsZm9udFZhcmlhbnQ6ITAsZm9udFdlaWdodDohMCxmb250U2l6ZTohMCxs
aW5lSGVpZ2h0OiEwLGZvbnRGYW1pbHk6ITB9LG91dGxpbmU6e291dGxpbmVXaWR0aDohMCxvdXRs
aW5lU3R5bGU6ITAsb3V0bGluZUNvbG9yOiEwfX0scz17aXNVbml0bGVzc051bWJlcjpvLHNob3J0
aGFuZFByb3BlcnR5RXhwYW5zaW9uczphfTt0LmV4cG9ydHM9c30se31dLDU6W2Z1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSg0KSxvPWUoMTIzKSxpPShlKDU4KSxlKDEyNSksZSg5
NCkpLGE9ZSgxMzYpLHM9ZSgxNDApLHU9KGUoMTQyKSxzKGZ1bmN0aW9uKGUpe3JldHVybiBhKGUp
fSkpLGw9ITEsYz0iY3NzRmxvYXQiO2lmKG8uY2FuVXNlRE9NKXt2YXIgcD1kb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKS5zdHlsZTt0cnl7cC5mb250PSIifWNhdGNoKGUpe2w9ITB9dm9pZCAw
PT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmNzc0Zsb2F0JiYoYz0ic3R5bGVGbG9h
dCIpfXZhciBkPXtjcmVhdGVNYXJrdXBGb3JTdHlsZXM6ZnVuY3Rpb24oZSx0KXt2YXIgbj0iIjtm
b3IodmFyIHIgaW4gZSlpZihlLmhhc093blByb3BlcnR5KHIpKXt2YXIgbz1lW3JdO251bGwhPW8m
JihuKz11KHIpKyI6IixuKz1pKHIsbyx0KSsiOyIpfXJldHVybiBufHxudWxsfSxzZXRWYWx1ZUZv
clN0eWxlczpmdW5jdGlvbihlLHQsbil7dmFyIG89ZS5zdHlsZTtmb3IodmFyIGEgaW4gdClpZih0
Lmhhc093blByb3BlcnR5KGEpKXt2YXIgcz1pKGEsdFthXSxuKTtpZigiZmxvYXQiIT09YSYmImNz
c0Zsb2F0IiE9PWF8fChhPWMpLHMpb1thXT1zO2Vsc2V7dmFyIHU9bCYmci5zaG9ydGhhbmRQcm9w
ZXJ0eUV4cGFuc2lvbnNbYV07aWYodSlmb3IodmFyIHAgaW4gdSlvW3BdPSIiO2Vsc2Ugb1thXT0i
In19fX07dC5leHBvcnRzPWR9LHsxMjM6MTIzLDEyNToxMjUsMTM2OjEzNiwxNDA6MTQwLDE0Mjox
NDIsNDo0LDU4OjU4LDk0Ojk0fV0sNjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5j
dGlvbiByKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fu
bm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9dmFyIG89ZSgxMTIpLGk9ZSgyNCksYT0o
ZSgxMzcpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtyKHRoaXMsZSksdGhpcy5fY2FsbGJhY2tz
PW51bGwsdGhpcy5fY29udGV4dHM9bnVsbCx0aGlzLl9hcmc9dH1yZXR1cm4gZS5wcm90b3R5cGUu
ZW5xdWV1ZT1mdW5jdGlvbihlLHQpe3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3N8fFtd
LHRoaXMuX2NhbGxiYWNrcy5wdXNoKGUpLHRoaXMuX2NvbnRleHRzPXRoaXMuX2NvbnRleHRzfHxb
XSx0aGlzLl9jb250ZXh0cy5wdXNoKHQpfSxlLnByb3RvdHlwZS5ub3RpZnlBbGw9ZnVuY3Rpb24o
KXt2YXIgZT10aGlzLl9jYWxsYmFja3MsdD10aGlzLl9jb250ZXh0cyxuPXRoaXMuX2FyZztpZihl
JiZ0KXtlLmxlbmd0aCE9PXQubGVuZ3RoJiZvKCIyNCIpLHRoaXMuX2NhbGxiYWNrcz1udWxsLHRo
aXMuX2NvbnRleHRzPW51bGw7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspZVtyXS5jYWxsKHRb
cl0sbik7ZS5sZW5ndGg9MCx0Lmxlbmd0aD0wfX0sZS5wcm90b3R5cGUuY2hlY2twb2ludD1mdW5j
dGlvbigpe3JldHVybiB0aGlzLl9jYWxsYmFja3M/dGhpcy5fY2FsbGJhY2tzLmxlbmd0aDowfSxl
LnByb3RvdHlwZS5yb2xsYmFjaz1mdW5jdGlvbihlKXt0aGlzLl9jYWxsYmFja3MmJnRoaXMuX2Nv
bnRleHRzJiYodGhpcy5fY2FsbGJhY2tzLmxlbmd0aD1lLHRoaXMuX2NvbnRleHRzLmxlbmd0aD1l
KX0sZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9jYWxsYmFja3M9bnVsbCx0aGlz
Ll9jb250ZXh0cz1udWxsfSxlLnByb3RvdHlwZS5kZXN0cnVjdG9yPWZ1bmN0aW9uKCl7dGhpcy5y
ZXNldCgpfSxlfSgpKTt0LmV4cG9ydHM9aS5hZGRQb29saW5nVG8oYSl9LHsxMTI6MTEyLDEzNzox
MzcsMjQ6MjR9XSw3OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7
dmFyIHQ9ZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJzZWxlY3Qi
PT09dHx8ImlucHV0Ij09PXQmJiJmaWxlIj09PWUudHlwZX1mdW5jdGlvbiBvKGUpe3ZhciB0PXcu
Z2V0UG9vbGVkKFMuY2hhbmdlLE0sZSxUKGUpKTtDLmFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNo
ZXModCkseC5iYXRjaGVkVXBkYXRlcyhpLHQpfWZ1bmN0aW9uIGkoZSl7Xy5lbnF1ZXVlRXZlbnRz
KGUpLF8ucHJvY2Vzc0V2ZW50UXVldWUoITEpfWZ1bmN0aW9uIGEoZSx0KXtOPWUsTT10LE4uYXR0
YWNoRXZlbnQoIm9uY2hhbmdlIixvKX1mdW5jdGlvbiBzKCl7TiYmKE4uZGV0YWNoRXZlbnQoIm9u
Y2hhbmdlIixvKSxOPW51bGwsTT1udWxsKX1mdW5jdGlvbiB1KGUsdCl7aWYoInRvcENoYW5nZSI9
PT1lKXJldHVybiB0fWZ1bmN0aW9uIGwoZSx0LG4peyJ0b3BGb2N1cyI9PT1lPyhzKCksYSh0LG4p
KToidG9wQmx1ciI9PT1lJiZzKCl9ZnVuY3Rpb24gYyhlLHQpe049ZSxNPXQsST1lLnZhbHVlLE89
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwi
dmFsdWUiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTiwidmFsdWUiLEQpLE4uYXR0YWNoRXZlbnQ/
Ti5hdHRhY2hFdmVudCgib25wcm9wZXJ0eWNoYW5nZSIsZCk6Ti5hZGRFdmVudExpc3RlbmVyKCJw
cm9wZXJ0eWNoYW5nZSIsZCwhMSl9ZnVuY3Rpb24gcCgpe04mJihkZWxldGUgTi52YWx1ZSxOLmRl
dGFjaEV2ZW50P04uZGV0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLGQpOk4ucmVtb3ZlRXZl
bnRMaXN0ZW5lcigicHJvcGVydHljaGFuZ2UiLGQsITEpLE49bnVsbCxNPW51bGwsST1udWxsLE89
bnVsbCl9ZnVuY3Rpb24gZChlKXtpZigidmFsdWUiPT09ZS5wcm9wZXJ0eU5hbWUpe3ZhciB0PWUu
c3JjRWxlbWVudC52YWx1ZTt0IT09SSYmKEk9dCxvKGUpKX19ZnVuY3Rpb24gZihlLHQpe2lmKCJ0
b3BJbnB1dCI9PT1lKXJldHVybiB0fWZ1bmN0aW9uIGgoZSx0LG4peyJ0b3BGb2N1cyI9PT1lPyhw
KCksYyh0LG4pKToidG9wQmx1ciI9PT1lJiZwKCl9ZnVuY3Rpb24gbShlLHQpe2lmKCgidG9wU2Vs
ZWN0aW9uQ2hhbmdlIj09PWV8fCJ0b3BLZXlVcCI9PT1lfHwidG9wS2V5RG93biI9PT1lKSYmTiYm
Ti52YWx1ZSE9PUkpcmV0dXJuIEk9Ti52YWx1ZSxNfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIGUubm9k
ZU5hbWUmJiJpbnB1dCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJigiY2hlY2tib3giPT09
ZS50eXBlfHwicmFkaW8iPT09ZS50eXBlKX1mdW5jdGlvbiBnKGUsdCl7aWYoInRvcENsaWNrIj09
PWUpcmV0dXJuIHR9ZnVuY3Rpb24geShlLHQpe2lmKG51bGwhPWUpe3ZhciBuPWUuX3dyYXBwZXJT
dGF0ZXx8dC5fd3JhcHBlclN0YXRlO2lmKG4mJm4uY29udHJvbGxlZCYmIm51bWJlciI9PT10LnR5
cGUpe3ZhciByPSIiK3QudmFsdWU7dC5nZXRBdHRyaWJ1dGUoInZhbHVlIikhPT1yJiZ0LnNldEF0
dHJpYnV0ZSgidmFsdWUiLHIpfX19dmFyIF89ZSgxNiksQz1lKDE5KSxiPWUoMTIzKSxFPWUoMzMp
LHg9ZSg3MSksdz1lKDgwKSxUPWUoMTAyKSxrPWUoMTA5KSxQPWUoMTEwKSxTPXtjaGFuZ2U6e3Bo
YXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOiJvbkNoYW5nZSIsY2FwdHVyZWQ6Im9uQ2hh
bmdlQ2FwdHVyZSJ9LGRlcGVuZGVuY2llczpbInRvcEJsdXIiLCJ0b3BDaGFuZ2UiLCJ0b3BDbGlj
ayIsInRvcEZvY3VzIiwidG9wSW5wdXQiLCJ0b3BLZXlEb3duIiwidG9wS2V5VXAiLCJ0b3BTZWxl
Y3Rpb25DaGFuZ2UiXX19LE49bnVsbCxNPW51bGwsST1udWxsLE89bnVsbCxSPSExO2IuY2FuVXNl
RE9NJiYoUj1rKCJjaGFuZ2UiKSYmKCFkb2N1bWVudC5kb2N1bWVudE1vZGV8fGRvY3VtZW50LmRv
Y3VtZW50TW9kZT44KSk7dmFyIEE9ITE7Yi5jYW5Vc2VET00mJihBPWsoImlucHV0IikmJighZG9j
dW1lbnQuZG9jdW1lbnRNb2RlfHxkb2N1bWVudC5kb2N1bWVudE1vZGU+MTEpKTt2YXIgRD17Z2V0
OmZ1bmN0aW9uKCl7cmV0dXJuIE8uZ2V0LmNhbGwodGhpcyl9LHNldDpmdW5jdGlvbihlKXtJPSIi
K2UsTy5zZXQuY2FsbCh0aGlzLGUpfX0sTD17ZXZlbnRUeXBlczpTLGV4dHJhY3RFdmVudHM6ZnVu
Y3Rpb24oZSx0LG4sbyl7dmFyIGksYSxzPXQ/RS5nZXROb2RlRnJvbUluc3RhbmNlKHQpOndpbmRv
dztpZihyKHMpP1I/aT11OmE9bDpQKHMpP0E/aT1mOihpPW0sYT1oKTp2KHMpJiYoaT1nKSxpKXt2
YXIgYz1pKGUsdCk7aWYoYyl7dmFyIHA9dy5nZXRQb29sZWQoUy5jaGFuZ2UsYyxuLG8pO3JldHVy
biBwLnR5cGU9ImNoYW5nZSIsQy5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKHApLHB9fWEm
JmEoZSxzLHQpLCJ0b3BCbHVyIj09PWUmJnkodCxzKX19O3QuZXhwb3J0cz1MfSx7MTAyOjEwMiwx
MDk6MTA5LDExMDoxMTAsMTIzOjEyMywxNjoxNiwxOToxOSwzMzozMyw3MTo3MSw4MDo4MH1dLDg6
W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBBcnJh
eS5pc0FycmF5KHQpJiYodD10WzFdKSx0P3QubmV4dFNpYmxpbmc6ZS5maXJzdENoaWxkfWZ1bmN0
aW9uIG8oZSx0LG4pe2MuaW5zZXJ0VHJlZUJlZm9yZShlLHQsbil9ZnVuY3Rpb24gaShlLHQsbil7
QXJyYXkuaXNBcnJheSh0KT9zKGUsdFswXSx0WzFdLG4pOm0oZSx0LG4pfWZ1bmN0aW9uIGEoZSx0
KXtpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgbj10WzFdO3Q9dFswXSx1KGUsdCxuKSxlLnJlbW92
ZUNoaWxkKG4pfWUucmVtb3ZlQ2hpbGQodCl9ZnVuY3Rpb24gcyhlLHQsbixyKXtmb3IodmFyIG89
dDs7KXt2YXIgaT1vLm5leHRTaWJsaW5nO2lmKG0oZSxvLHIpLG89PT1uKWJyZWFrO289aX19ZnVu
Y3Rpb24gdShlLHQsbil7Zm9yKDs7KXt2YXIgcj10Lm5leHRTaWJsaW5nO2lmKHI9PT1uKWJyZWFr
O2UucmVtb3ZlQ2hpbGQocil9fWZ1bmN0aW9uIGwoZSx0LG4pe3ZhciByPWUucGFyZW50Tm9kZSxv
PWUubmV4dFNpYmxpbmc7bz09PXQ/biYmbShyLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG4pLG8p
Om4/KGgobyxuKSx1KHIsbyx0KSk6dShyLGUsdCl9dmFyIGM9ZSg5KSxwPWUoMTMpLGQ9KGUoMzMp
LGUoNTgpLGUoOTMpKSxmPWUoMTE0KSxoPWUoMTE1KSxtPWQoZnVuY3Rpb24oZSx0LG4pe2UuaW5z
ZXJ0QmVmb3JlKHQsbil9KSx2PXAuZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXAsZz17
ZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXA6dixyZXBsYWNlRGVsaW1pdGVkVGV4dDps
LHByb2Nlc3NVcGRhdGVzOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKysp
e3ZhciBzPXRbbl07c3dpdGNoKHMudHlwZSl7Y2FzZSJJTlNFUlRfTUFSS1VQIjpvKGUscy5jb250
ZW50LHIoZSxzLmFmdGVyTm9kZSkpO2JyZWFrO2Nhc2UiTU9WRV9FWElTVElORyI6aShlLHMuZnJv
bU5vZGUscihlLHMuYWZ0ZXJOb2RlKSk7YnJlYWs7Y2FzZSJTRVRfTUFSS1VQIjpmKGUscy5jb250
ZW50KTticmVhaztjYXNlIlRFWFRfQ09OVEVOVCI6aChlLHMuY29udGVudCk7YnJlYWs7Y2FzZSJS
RU1PVkVfTk9ERSI6YShlLHMuZnJvbU5vZGUpfX19fTt0LmV4cG9ydHM9Z30sezExNDoxMTQsMTE1
OjExNSwxMzoxMywzMzozMyw1ODo1OCw5OjksOTM6OTN9XSw5OltmdW5jdGlvbihlLHQsbil7InVz
ZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYoaCl7dmFyIHQ9ZS5ub2RlLG49ZS5jaGlsZHJlbjtp
ZihuLmxlbmd0aClmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyltKHQsbltyXSxudWxsKTtlbHNl
IG51bGwhPWUuaHRtbD9wKHQsZS5odG1sKTpudWxsIT1lLnRleHQmJmYodCxlLnRleHQpfX1mdW5j
dGlvbiBvKGUsdCl7ZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0Lm5vZGUsZSkscih0KX1mdW5j
dGlvbiBpKGUsdCl7aD9lLmNoaWxkcmVuLnB1c2godCk6ZS5ub2RlLmFwcGVuZENoaWxkKHQubm9k
ZSl9ZnVuY3Rpb24gYShlLHQpe2g/ZS5odG1sPXQ6cChlLm5vZGUsdCl9ZnVuY3Rpb24gcyhlLHQp
e2g/ZS50ZXh0PXQ6ZihlLm5vZGUsdCl9ZnVuY3Rpb24gdSgpe3JldHVybiB0aGlzLm5vZGUubm9k
ZU5hbWV9ZnVuY3Rpb24gbChlKXtyZXR1cm57bm9kZTplLGNoaWxkcmVuOltdLGh0bWw6bnVsbCx0
ZXh0Om51bGwsdG9TdHJpbmc6dX19dmFyIGM9ZSgxMCkscD1lKDExNCksZD1lKDkzKSxmPWUoMTE1
KSxoPSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJiJudW1iZXIiPT10eXBlb2YgZG9jdW1l
bnQuZG9jdW1lbnRNb2RlfHwidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmInN0cmluZyI9
PXR5cGVvZiBuYXZpZ2F0b3IudXNlckFnZW50JiYvXGJFZGdlXC9cZC8udGVzdChuYXZpZ2F0b3Iu
dXNlckFnZW50KSxtPWQoZnVuY3Rpb24oZSx0LG4pezExPT09dC5ub2RlLm5vZGVUeXBlfHwxPT09
dC5ub2RlLm5vZGVUeXBlJiYib2JqZWN0Ij09PXQubm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgp
JiYobnVsbD09dC5ub2RlLm5hbWVzcGFjZVVSSXx8dC5ub2RlLm5hbWVzcGFjZVVSST09PWMuaHRt
bCk/KHIodCksZS5pbnNlcnRCZWZvcmUodC5ub2RlLG4pKTooZS5pbnNlcnRCZWZvcmUodC5ub2Rl
LG4pLHIodCkpfSk7bC5pbnNlcnRUcmVlQmVmb3JlPW0sbC5yZXBsYWNlQ2hpbGRXaXRoVHJlZT1v
LGwucXVldWVDaGlsZD1pLGwucXVldWVIVE1MPWEsbC5xdWV1ZVRleHQ9cyx0LmV4cG9ydHM9bH0s
ezEwOjEwLDExNDoxMTQsMTE1OjExNSw5Mzo5M31dLDEwOltmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO3ZhciByPXtodG1sOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixtYXRobWw6
Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLHN2ZzoiaHR0cDovL3d3dy53My5v
cmcvMjAwMC9zdmcifTt0LmV4cG9ydHM9cn0se31dLDExOltmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4oZSZ0KT09PXR9dmFyIG89ZSgxMTIpLGk9KGUo
MTM3KSx7TVVTVF9VU0VfUFJPUEVSVFk6MSxIQVNfQk9PTEVBTl9WQUxVRTo0LEhBU19OVU1FUklD
X1ZBTFVFOjgsSEFTX1BPU0lUSVZFX05VTUVSSUNfVkFMVUU6MjQsSEFTX09WRVJMT0FERURfQk9P
TEVBTl9WQUxVRTozMixpbmplY3RET01Qcm9wZXJ0eUNvbmZpZzpmdW5jdGlvbihlKXt2YXIgdD1p
LG49ZS5Qcm9wZXJ0aWVzfHx7fSxhPWUuRE9NQXR0cmlidXRlTmFtZXNwYWNlc3x8e30sdT1lLkRP
TUF0dHJpYnV0ZU5hbWVzfHx7fSxsPWUuRE9NUHJvcGVydHlOYW1lc3x8e30sYz1lLkRPTU11dGF0
aW9uTWV0aG9kc3x8e307ZS5pc0N1c3RvbUF0dHJpYnV0ZSYmcy5faXNDdXN0b21BdHRyaWJ1dGVG
dW5jdGlvbnMucHVzaChlLmlzQ3VzdG9tQXR0cmlidXRlKTtmb3IodmFyIHAgaW4gbil7cy5wcm9w
ZXJ0aWVzLmhhc093blByb3BlcnR5KHApJiZvKCI0OCIscCk7dmFyIGQ9cC50b0xvd2VyQ2FzZSgp
LGY9bltwXSxoPXthdHRyaWJ1dGVOYW1lOmQsYXR0cmlidXRlTmFtZXNwYWNlOm51bGwscHJvcGVy
dHlOYW1lOnAsbXV0YXRpb25NZXRob2Q6bnVsbCxtdXN0VXNlUHJvcGVydHk6cihmLHQuTVVTVF9V
U0VfUFJPUEVSVFkpLGhhc0Jvb2xlYW5WYWx1ZTpyKGYsdC5IQVNfQk9PTEVBTl9WQUxVRSksaGFz
TnVtZXJpY1ZhbHVlOnIoZix0LkhBU19OVU1FUklDX1ZBTFVFKSxoYXNQb3NpdGl2ZU51bWVyaWNW
YWx1ZTpyKGYsdC5IQVNfUE9TSVRJVkVfTlVNRVJJQ19WQUxVRSksaGFzT3ZlcmxvYWRlZEJvb2xl
YW5WYWx1ZTpyKGYsdC5IQVNfT1ZFUkxPQURFRF9CT09MRUFOX1ZBTFVFKX07aWYoaC5oYXNCb29s
ZWFuVmFsdWUraC5oYXNOdW1lcmljVmFsdWUraC5oYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlPD0x
fHxvKCI1MCIscCksdS5oYXNPd25Qcm9wZXJ0eShwKSl7dmFyIG09dVtwXTtoLmF0dHJpYnV0ZU5h
bWU9bX1hLmhhc093blByb3BlcnR5KHApJiYoaC5hdHRyaWJ1dGVOYW1lc3BhY2U9YVtwXSksbC5o
YXNPd25Qcm9wZXJ0eShwKSYmKGgucHJvcGVydHlOYW1lPWxbcF0pLGMuaGFzT3duUHJvcGVydHko
cCkmJihoLm11dGF0aW9uTWV0aG9kPWNbcF0pLHMucHJvcGVydGllc1twXT1ofX19KSxhPSI6QS1a
X2EtelxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDJGRlxcdTAzNzAt
XFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwNzAtXFx1MjE4RlxcdTJD
MDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRCIs
cz17SURfQVRUUklCVVRFX05BTUU6ImRhdGEtcmVhY3RpZCIsUk9PVF9BVFRSSUJVVEVfTkFNRToi
ZGF0YS1yZWFjdHJvb3QiLEFUVFJJQlVURV9OQU1FX1NUQVJUX0NIQVI6YSxBVFRSSUJVVEVfTkFN
RV9DSEFSOmErIlxcLS4wLTlcXHUwMEI3XFx1MDMwMC1cXHUwMzZGXFx1MjAzRi1cXHUyMDQwIixw
cm9wZXJ0aWVzOnt9LGdldFBvc3NpYmxlU3RhbmRhcmROYW1lOm51bGwsX2lzQ3VzdG9tQXR0cmli
dXRlRnVuY3Rpb25zOltdLGlzQ3VzdG9tQXR0cmlidXRlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0w
O3Q8cy5faXNDdXN0b21BdHRyaWJ1dGVGdW5jdGlvbnMubGVuZ3RoO3QrKylpZigoMCxzLl9pc0N1
c3RvbUF0dHJpYnV0ZUZ1bmN0aW9uc1t0XSkoZSkpcmV0dXJuITA7cmV0dXJuITF9LGluamVjdGlv
bjppfTt0LmV4cG9ydHM9c30sezExMjoxMTIsMTM3OjEzN31dLDEyOltmdW5jdGlvbihlLHQsbil7
InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuISFsLmhhc093blByb3BlcnR5KGUpfHwh
dS5oYXNPd25Qcm9wZXJ0eShlKSYmKHMudGVzdChlKT8obFtlXT0hMCwhMCk6KHVbZV09ITAsITEp
KX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIG51bGw9PXR8fGUuaGFzQm9vbGVhblZhbHVlJiYhdHx8
ZS5oYXNOdW1lcmljVmFsdWUmJmlzTmFOKHQpfHxlLmhhc1Bvc2l0aXZlTnVtZXJpY1ZhbHVlJiZ0
PDF8fGUuaGFzT3ZlcmxvYWRlZEJvb2xlYW5WYWx1ZSYmITE9PT10fXZhciBpPWUoMTEpLGE9KGUo
MzMpLGUoNTgpLGUoMTExKSkscz0oZSgxNDIpLG5ldyBSZWdFeHAoIl5bIitpLkFUVFJJQlVURV9O
QU1FX1NUQVJUX0NIQVIrIl1bIitpLkFUVFJJQlVURV9OQU1FX0NIQVIrIl0qJCIpKSx1PXt9LGw9
e30sYz17Y3JlYXRlTWFya3VwRm9ySUQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGkuSURfQVRUUklCVVRF
X05BTUUrIj0iK2EoZSl9LHNldEF0dHJpYnV0ZUZvcklEOmZ1bmN0aW9uKGUsdCl7ZS5zZXRBdHRy
aWJ1dGUoaS5JRF9BVFRSSUJVVEVfTkFNRSx0KX0sY3JlYXRlTWFya3VwRm9yUm9vdDpmdW5jdGlv
bigpe3JldHVybiBpLlJPT1RfQVRUUklCVVRFX05BTUUrJz0iIid9LHNldEF0dHJpYnV0ZUZvclJv
b3Q6ZnVuY3Rpb24oZSl7ZS5zZXRBdHRyaWJ1dGUoaS5ST09UX0FUVFJJQlVURV9OQU1FLCIiKX0s
Y3JlYXRlTWFya3VwRm9yUHJvcGVydHk6ZnVuY3Rpb24oZSx0KXt2YXIgbj1pLnByb3BlcnRpZXMu
aGFzT3duUHJvcGVydHkoZSk/aS5wcm9wZXJ0aWVzW2VdOm51bGw7aWYobil7aWYobyhuLHQpKXJl
dHVybiIiO3ZhciByPW4uYXR0cmlidXRlTmFtZTtyZXR1cm4gbi5oYXNCb29sZWFuVmFsdWV8fG4u
aGFzT3ZlcmxvYWRlZEJvb2xlYW5WYWx1ZSYmITA9PT10P3IrJz0iIic6cisiPSIrYSh0KX1yZXR1
cm4gaS5pc0N1c3RvbUF0dHJpYnV0ZShlKT9udWxsPT10PyIiOmUrIj0iK2EodCk6bnVsbH0sY3Jl
YXRlTWFya3VwRm9yQ3VzdG9tQXR0cmlidXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIoZSkmJm51
bGwhPXQ/ZSsiPSIrYSh0KToiIn0sc2V0VmFsdWVGb3JQcm9wZXJ0eTpmdW5jdGlvbihlLHQsbil7
dmFyIHI9aS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHQpP2kucHJvcGVydGllc1t0XTpudWxs
O2lmKHIpe3ZhciBhPXIubXV0YXRpb25NZXRob2Q7aWYoYSlhKGUsbik7ZWxzZXtpZihvKHIsbikp
cmV0dXJuIHZvaWQgdGhpcy5kZWxldGVWYWx1ZUZvclByb3BlcnR5KGUsdCk7aWYoci5tdXN0VXNl
UHJvcGVydHkpZVtyLnByb3BlcnR5TmFtZV09bjtlbHNle3ZhciBzPXIuYXR0cmlidXRlTmFtZSx1
PXIuYXR0cmlidXRlTmFtZXNwYWNlO3U/ZS5zZXRBdHRyaWJ1dGVOUyh1LHMsIiIrbik6ci5oYXNC
b29sZWFuVmFsdWV8fHIuaGFzT3ZlcmxvYWRlZEJvb2xlYW5WYWx1ZSYmITA9PT1uP2Uuc2V0QXR0
cmlidXRlKHMsIiIpOmUuc2V0QXR0cmlidXRlKHMsIiIrbil9fX1lbHNlIGlmKGkuaXNDdXN0b21B
dHRyaWJ1dGUodCkpcmV0dXJuIHZvaWQgYy5zZXRWYWx1ZUZvckF0dHJpYnV0ZShlLHQsbil9LHNl
dFZhbHVlRm9yQXR0cmlidXRlOmZ1bmN0aW9uKGUsdCxuKXtyKHQpJiYobnVsbD09bj9lLnJlbW92
ZUF0dHJpYnV0ZSh0KTplLnNldEF0dHJpYnV0ZSh0LCIiK24pKX0sZGVsZXRlVmFsdWVGb3JBdHRy
aWJ1dGU6ZnVuY3Rpb24oZSx0KXtlLnJlbW92ZUF0dHJpYnV0ZSh0KX0sZGVsZXRlVmFsdWVGb3JQ
cm9wZXJ0eTpmdW5jdGlvbihlLHQpe3ZhciBuPWkucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSh0
KT9pLnByb3BlcnRpZXNbdF06bnVsbDtpZihuKXt2YXIgcj1uLm11dGF0aW9uTWV0aG9kO2lmKHIp
cihlLHZvaWQgMCk7ZWxzZSBpZihuLm11c3RVc2VQcm9wZXJ0eSl7dmFyIG89bi5wcm9wZXJ0eU5h
bWU7bi5oYXNCb29sZWFuVmFsdWU/ZVtvXT0hMTplW29dPSIifWVsc2UgZS5yZW1vdmVBdHRyaWJ1
dGUobi5hdHRyaWJ1dGVOYW1lKX1lbHNlIGkuaXNDdXN0b21BdHRyaWJ1dGUodCkmJmUucmVtb3Zl
QXR0cmlidXRlKHQpfX07dC5leHBvcnRzPWN9LHsxMToxMSwxMTE6MTExLDE0MjoxNDIsMzM6MzMs
NTg6NTh9XSwxMzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDExMiksbz1l
KDkpLGk9ZSgxMjMpLGE9ZSgxMjgpLHM9ZSgxMjkpLHU9KGUoMTM3KSx7ZGFuZ2Vyb3VzbHlSZXBs
YWNlTm9kZVdpdGhNYXJrdXA6ZnVuY3Rpb24oZSx0KXtpZihpLmNhblVzZURPTXx8cigiNTYiKSx0
fHxyKCI1NyIpLCJIVE1MIj09PWUubm9kZU5hbWUmJnIoIjU4IiksInN0cmluZyI9PXR5cGVvZiB0
KXt2YXIgbj1hKHQscylbMF07ZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChuLGUpfWVsc2Ugby5y
ZXBsYWNlQ2hpbGRXaXRoVHJlZShlLHQpfX0pO3QuZXhwb3J0cz11fSx7MTEyOjExMiwxMjM6MTIz
LDEyODoxMjgsMTI5OjEyOSwxMzc6MTM3LDk6OX1dLDE0OltmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO3ZhciByPVsiUmVzcG9uZGVyRXZlbnRQbHVnaW4iLCJTaW1wbGVFdmVudFBsdWdpbiIs
IlRhcEV2ZW50UGx1Z2luIiwiRW50ZXJMZWF2ZUV2ZW50UGx1Z2luIiwiQ2hhbmdlRXZlbnRQbHVn
aW4iLCJTZWxlY3RFdmVudFBsdWdpbiIsIkJlZm9yZUlucHV0RXZlbnRQbHVnaW4iXTt0LmV4cG9y
dHM9cn0se31dLDE1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTkpLG89
ZSgzMyksaT1lKDg0KSxhPXttb3VzZUVudGVyOntyZWdpc3RyYXRpb25OYW1lOiJvbk1vdXNlRW50
ZXIiLGRlcGVuZGVuY2llczpbInRvcE1vdXNlT3V0IiwidG9wTW91c2VPdmVyIl19LG1vdXNlTGVh
dmU6e3JlZ2lzdHJhdGlvbk5hbWU6Im9uTW91c2VMZWF2ZSIsZGVwZW5kZW5jaWVzOlsidG9wTW91
c2VPdXQiLCJ0b3BNb3VzZU92ZXIiXX19LHM9e2V2ZW50VHlwZXM6YSxleHRyYWN0RXZlbnRzOmZ1
bmN0aW9uKGUsdCxuLHMpe2lmKCJ0b3BNb3VzZU92ZXIiPT09ZSYmKG4ucmVsYXRlZFRhcmdldHx8
bi5mcm9tRWxlbWVudCkpcmV0dXJuIG51bGw7aWYoInRvcE1vdXNlT3V0IiE9PWUmJiJ0b3BNb3Vz
ZU92ZXIiIT09ZSlyZXR1cm4gbnVsbDt2YXIgdTtpZihzLndpbmRvdz09PXMpdT1zO2Vsc2V7dmFy
IGw9cy5vd25lckRvY3VtZW50O3U9bD9sLmRlZmF1bHRWaWV3fHxsLnBhcmVudFdpbmRvdzp3aW5k
b3d9dmFyIGMscDtpZigidG9wTW91c2VPdXQiPT09ZSl7Yz10O3ZhciBkPW4ucmVsYXRlZFRhcmdl
dHx8bi50b0VsZW1lbnQ7cD1kP28uZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUoZCk6bnVsbH1l
bHNlIGM9bnVsbCxwPXQ7aWYoYz09PXApcmV0dXJuIG51bGw7dmFyIGY9bnVsbD09Yz91Om8uZ2V0
Tm9kZUZyb21JbnN0YW5jZShjKSxoPW51bGw9PXA/dTpvLmdldE5vZGVGcm9tSW5zdGFuY2UocCks
bT1pLmdldFBvb2xlZChhLm1vdXNlTGVhdmUsYyxuLHMpO20udHlwZT0ibW91c2VsZWF2ZSIsbS50
YXJnZXQ9ZixtLnJlbGF0ZWRUYXJnZXQ9aDt2YXIgdj1pLmdldFBvb2xlZChhLm1vdXNlRW50ZXIs
cCxuLHMpO3JldHVybiB2LnR5cGU9Im1vdXNlZW50ZXIiLHYudGFyZ2V0PWgsdi5yZWxhdGVkVGFy
Z2V0PWYsci5hY2N1bXVsYXRlRW50ZXJMZWF2ZURpc3BhdGNoZXMobSx2LGMscCksW20sdl19fTt0
LmV4cG9ydHM9c30sezE5OjE5LDMzOjMzLDg0Ojg0fV0sMTY6W2Z1bmN0aW9uKGUsdCxuKXsidXNl
IHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4iYnV0dG9uIj09PWV8fCJpbnB1dCI9PT1lfHwi
c2VsZWN0Ij09PWV8fCJ0ZXh0YXJlYSI9PT1lfWZ1bmN0aW9uIG8oZSx0LG4pe3N3aXRjaChlKXtj
YXNlIm9uQ2xpY2siOmNhc2Uib25DbGlja0NhcHR1cmUiOmNhc2Uib25Eb3VibGVDbGljayI6Y2Fz
ZSJvbkRvdWJsZUNsaWNrQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlRG93biI6Y2FzZSJvbk1vdXNlRG93
bkNhcHR1cmUiOmNhc2Uib25Nb3VzZU1vdmUiOmNhc2Uib25Nb3VzZU1vdmVDYXB0dXJlIjpjYXNl
Im9uTW91c2VVcCI6Y2FzZSJvbk1vdXNlVXBDYXB0dXJlIjpyZXR1cm4hKCFuLmRpc2FibGVkfHwh
cih0KSk7ZGVmYXVsdDpyZXR1cm4hMX19dmFyIGk9ZSgxMTIpLGE9ZSgxNykscz1lKDE4KSx1PWUo
NTApLGw9ZSg5MSksYz1lKDk4KSxwPShlKDEzNykse30pLGQ9bnVsbCxmPWZ1bmN0aW9uKGUsdCl7
ZSYmKHMuZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyKGUsdCksZS5pc1BlcnNpc3RlbnQoKXx8ZS5j
b25zdHJ1Y3Rvci5yZWxlYXNlKGUpKX0saD1mdW5jdGlvbihlKXtyZXR1cm4gZihlLCEwKX0sbT1m
dW5jdGlvbihlKXtyZXR1cm4gZihlLCExKX0sdj1mdW5jdGlvbihlKXtyZXR1cm4iLiIrZS5fcm9v
dE5vZGVJRH0sZz17aW5qZWN0aW9uOntpbmplY3RFdmVudFBsdWdpbk9yZGVyOmEuaW5qZWN0RXZl
bnRQbHVnaW5PcmRlcixpbmplY3RFdmVudFBsdWdpbnNCeU5hbWU6YS5pbmplY3RFdmVudFBsdWdp
bnNCeU5hbWV9LHB1dExpc3RlbmVyOmZ1bmN0aW9uKGUsdCxuKXsiZnVuY3Rpb24iIT10eXBlb2Yg
biYmaSgiOTQiLHQsdHlwZW9mIG4pO3ZhciByPXYoZSk7KHBbdF18fChwW3RdPXt9KSlbcl09bjt2
YXIgbz1hLnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzW3RdO28mJm8uZGlkUHV0TGlzdGVuZXImJm8u
ZGlkUHV0TGlzdGVuZXIoZSx0LG4pfSxnZXRMaXN0ZW5lcjpmdW5jdGlvbihlLHQpe3ZhciBuPXBb
dF07aWYobyh0LGUuX2N1cnJlbnRFbGVtZW50LnR5cGUsZS5fY3VycmVudEVsZW1lbnQucHJvcHMp
KXJldHVybiBudWxsO3ZhciByPXYoZSk7cmV0dXJuIG4mJm5bcl19LGRlbGV0ZUxpc3RlbmVyOmZ1
bmN0aW9uKGUsdCl7dmFyIG49YS5yZWdpc3RyYXRpb25OYW1lTW9kdWxlc1t0XTtuJiZuLndpbGxE
ZWxldGVMaXN0ZW5lciYmbi53aWxsRGVsZXRlTGlzdGVuZXIoZSx0KTt2YXIgcj1wW3RdO3ImJmRl
bGV0ZSByW3YoZSldfSxkZWxldGVBbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oZSl7dmFyIHQ9dihlKTtm
b3IodmFyIG4gaW4gcClpZihwLmhhc093blByb3BlcnR5KG4pJiZwW25dW3RdKXt2YXIgcj1hLnJl
Z2lzdHJhdGlvbk5hbWVNb2R1bGVzW25dO3ImJnIud2lsbERlbGV0ZUxpc3RlbmVyJiZyLndpbGxE
ZWxldGVMaXN0ZW5lcihlLG4pLGRlbGV0ZSBwW25dW3RdfX0sZXh0cmFjdEV2ZW50czpmdW5jdGlv
bihlLHQsbixyKXtmb3IodmFyIG8saT1hLnBsdWdpbnMscz0wO3M8aS5sZW5ndGg7cysrKXt2YXIg
dT1pW3NdO2lmKHUpe3ZhciBjPXUuZXh0cmFjdEV2ZW50cyhlLHQsbixyKTtjJiYobz1sKG8sYykp
fX1yZXR1cm4gb30sZW5xdWV1ZUV2ZW50czpmdW5jdGlvbihlKXtlJiYoZD1sKGQsZSkpfSxwcm9j
ZXNzRXZlbnRRdWV1ZTpmdW5jdGlvbihlKXt2YXIgdD1kO2Q9bnVsbCxlP2ModCxoKTpjKHQsbSks
ZCYmaSgiOTUiKSx1LnJldGhyb3dDYXVnaHRFcnJvcigpfSxfX3B1cmdlOmZ1bmN0aW9uKCl7cD17
fX0sX19nZXRMaXN0ZW5lckJhbms6ZnVuY3Rpb24oKXtyZXR1cm4gcH19O3QuZXhwb3J0cz1nfSx7
MTEyOjExMiwxMzc6MTM3LDE3OjE3LDE4OjE4LDUwOjUwLDkxOjkxLDk4Ojk4fV0sMTc6W2Z1bmN0
aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe2lmKHMpZm9yKHZhciBlIGluIHUp
e3ZhciB0PXVbZV0sbj1zLmluZGV4T2YoZSk7aWYobj4tMXx8YSgiOTYiLGUpLCFsLnBsdWdpbnNb
bl0pe3QuZXh0cmFjdEV2ZW50c3x8YSgiOTciLGUpLGwucGx1Z2luc1tuXT10O3ZhciByPXQuZXZl
bnRUeXBlcztmb3IodmFyIGkgaW4gcilvKHJbaV0sdCxpKXx8YSgiOTgiLGksZSl9fX1mdW5jdGlv
biBvKGUsdCxuKXtsLmV2ZW50TmFtZURpc3BhdGNoQ29uZmlncy5oYXNPd25Qcm9wZXJ0eShuKSYm
YSgiOTkiLG4pLGwuZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzW25dPWU7dmFyIHI9ZS5waGFzZWRS
ZWdpc3RyYXRpb25OYW1lcztpZihyKXtmb3IodmFyIG8gaW4gcilpZihyLmhhc093blByb3BlcnR5
KG8pKXt2YXIgcz1yW29dO2kocyx0LG4pfXJldHVybiEwfXJldHVybiEhZS5yZWdpc3RyYXRpb25O
YW1lJiYoaShlLnJlZ2lzdHJhdGlvbk5hbWUsdCxuKSwhMCl9ZnVuY3Rpb24gaShlLHQsbil7bC5y
ZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tlXSYmYSgiMTAwIixlKSxsLnJlZ2lzdHJhdGlvbk5hbWVN
b2R1bGVzW2VdPXQsbC5yZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzW2VdPXQuZXZlbnRUeXBl
c1tuXS5kZXBlbmRlbmNpZXN9dmFyIGE9ZSgxMTIpLHM9KGUoMTM3KSxudWxsKSx1PXt9LGw9e3Bs
dWdpbnM6W10sZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzOnt9LHJlZ2lzdHJhdGlvbk5hbWVNb2R1
bGVzOnt9LHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXM6e30scG9zc2libGVSZWdpc3RyYXRp
b25OYW1lczpudWxsLGluamVjdEV2ZW50UGx1Z2luT3JkZXI6ZnVuY3Rpb24oZSl7cyYmYSgiMTAx
Iikscz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlKSxyKCl9LGluamVjdEV2ZW50UGx1Z2lu
c0J5TmFtZTpmdW5jdGlvbihlKXt2YXIgdD0hMTtmb3IodmFyIG4gaW4gZSlpZihlLmhhc093blBy
b3BlcnR5KG4pKXt2YXIgbz1lW25dO3UuaGFzT3duUHJvcGVydHkobikmJnVbbl09PT1vfHwodVtu
XSYmYSgiMTAyIixuKSx1W25dPW8sdD0hMCl9dCYmcigpfSxnZXRQbHVnaW5Nb2R1bGVGb3JFdmVu
dDpmdW5jdGlvbihlKXt2YXIgdD1lLmRpc3BhdGNoQ29uZmlnO2lmKHQucmVnaXN0cmF0aW9uTmFt
ZSlyZXR1cm4gbC5yZWdpc3RyYXRpb25OYW1lTW9kdWxlc1t0LnJlZ2lzdHJhdGlvbk5hbWVdfHxu
dWxsO2lmKHZvaWQgMCE9PXQucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMpe3ZhciBuPXQucGhhc2Vk
UmVnaXN0cmF0aW9uTmFtZXM7Zm9yKHZhciByIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShyKSl7
dmFyIG89bC5yZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tuW3JdXTtpZihvKXJldHVybiBvfX1yZXR1
cm4gbnVsbH0sX3Jlc2V0RXZlbnRQbHVnaW5zOmZ1bmN0aW9uKCl7cz1udWxsO2Zvcih2YXIgZSBp
biB1KXUuaGFzT3duUHJvcGVydHkoZSkmJmRlbGV0ZSB1W2VdO2wucGx1Z2lucy5sZW5ndGg9MDt2
YXIgdD1sLmV2ZW50TmFtZURpc3BhdGNoQ29uZmlncztmb3IodmFyIG4gaW4gdCl0Lmhhc093blBy
b3BlcnR5KG4pJiZkZWxldGUgdFtuXTt2YXIgcj1sLnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzO2Zv
cih2YXIgbyBpbiByKXIuaGFzT3duUHJvcGVydHkobykmJmRlbGV0ZSByW29dfX07dC5leHBvcnRz
PWx9LHsxMTI6MTEyLDEzNzoxMzd9XSwxODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijtm
dW5jdGlvbiByKGUpe3JldHVybiJ0b3BNb3VzZVVwIj09PWV8fCJ0b3BUb3VjaEVuZCI9PT1lfHwi
dG9wVG91Y2hDYW5jZWwiPT09ZX1mdW5jdGlvbiBvKGUpe3JldHVybiJ0b3BNb3VzZU1vdmUiPT09
ZXx8InRvcFRvdWNoTW92ZSI9PT1lfWZ1bmN0aW9uIGkoZSl7cmV0dXJuInRvcE1vdXNlRG93biI9
PT1lfHwidG9wVG91Y2hTdGFydCI9PT1lfWZ1bmN0aW9uIGEoZSx0LG4scil7dmFyIG89ZS50eXBl
fHwidW5rbm93bi1ldmVudCI7ZS5jdXJyZW50VGFyZ2V0PWcuZ2V0Tm9kZUZyb21JbnN0YW5jZShy
KSx0P20uaW52b2tlR3VhcmRlZENhbGxiYWNrV2l0aENhdGNoKG8sbixlKTptLmludm9rZUd1YXJk
ZWRDYWxsYmFjayhvLG4sZSksZS5jdXJyZW50VGFyZ2V0PW51bGx9ZnVuY3Rpb24gcyhlLHQpe3Zh
ciBuPWUuX2Rpc3BhdGNoTGlzdGVuZXJzLHI9ZS5fZGlzcGF0Y2hJbnN0YW5jZXM7aWYoQXJyYXku
aXNBcnJheShuKSlmb3IodmFyIG89MDtvPG4ubGVuZ3RoJiYhZS5pc1Byb3BhZ2F0aW9uU3RvcHBl
ZCgpO28rKylhKGUsdCxuW29dLHJbb10pO2Vsc2UgbiYmYShlLHQsbixyKTtlLl9kaXNwYXRjaExp
c3RlbmVycz1udWxsLGUuX2Rpc3BhdGNoSW5zdGFuY2VzPW51bGx9ZnVuY3Rpb24gdShlKXt2YXIg
dD1lLl9kaXNwYXRjaExpc3RlbmVycyxuPWUuX2Rpc3BhdGNoSW5zdGFuY2VzO2lmKEFycmF5Lmlz
QXJyYXkodCkpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGgmJiFlLmlzUHJvcGFnYXRpb25TdG9wcGVk
KCk7cisrKWlmKHRbcl0oZSxuW3JdKSlyZXR1cm4gbltyXX1lbHNlIGlmKHQmJnQoZSxuKSlyZXR1
cm4gbjtyZXR1cm4gbnVsbH1mdW5jdGlvbiBsKGUpe3ZhciB0PXUoZSk7cmV0dXJuIGUuX2Rpc3Bh
dGNoSW5zdGFuY2VzPW51bGwsZS5fZGlzcGF0Y2hMaXN0ZW5lcnM9bnVsbCx0fWZ1bmN0aW9uIGMo
ZSl7dmFyIHQ9ZS5fZGlzcGF0Y2hMaXN0ZW5lcnMsbj1lLl9kaXNwYXRjaEluc3RhbmNlcztBcnJh
eS5pc0FycmF5KHQpJiZoKCIxMDMiKSxlLmN1cnJlbnRUYXJnZXQ9dD9nLmdldE5vZGVGcm9tSW5z
dGFuY2Uobik6bnVsbDt2YXIgcj10P3QoZSk6bnVsbDtyZXR1cm4gZS5jdXJyZW50VGFyZ2V0PW51
bGwsZS5fZGlzcGF0Y2hMaXN0ZW5lcnM9bnVsbCxlLl9kaXNwYXRjaEluc3RhbmNlcz1udWxsLHJ9
ZnVuY3Rpb24gcChlKXtyZXR1cm4hIWUuX2Rpc3BhdGNoTGlzdGVuZXJzfXZhciBkLGYsaD1lKDEx
MiksbT1lKDUwKSx2PShlKDEzNyksZSgxNDIpLHtpbmplY3RDb21wb25lbnRUcmVlOmZ1bmN0aW9u
KGUpe2Q9ZX0saW5qZWN0VHJlZVRyYXZlcnNhbDpmdW5jdGlvbihlKXtmPWV9fSksZz17aXNFbmRp
c2g6cixpc01vdmVpc2g6byxpc1N0YXJ0aXNoOmksZXhlY3V0ZURpcmVjdERpc3BhdGNoOmMsZXhl
Y3V0ZURpc3BhdGNoZXNJbk9yZGVyOnMsZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyU3RvcEF0VHJ1
ZTpsLGhhc0Rpc3BhdGNoZXM6cCxnZXRJbnN0YW5jZUZyb21Ob2RlOmZ1bmN0aW9uKGUpe3JldHVy
biBkLmdldEluc3RhbmNlRnJvbU5vZGUoZSl9LGdldE5vZGVGcm9tSW5zdGFuY2U6ZnVuY3Rpb24o
ZSl7cmV0dXJuIGQuZ2V0Tm9kZUZyb21JbnN0YW5jZShlKX0saXNBbmNlc3RvcjpmdW5jdGlvbihl
LHQpe3JldHVybiBmLmlzQW5jZXN0b3IoZSx0KX0sZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3I6ZnVu
Y3Rpb24oZSx0KXtyZXR1cm4gZi5nZXRMb3dlc3RDb21tb25BbmNlc3RvcihlLHQpfSxnZXRQYXJl
bnRJbnN0YW5jZTpmdW5jdGlvbihlKXtyZXR1cm4gZi5nZXRQYXJlbnRJbnN0YW5jZShlKX0sdHJh
dmVyc2VUd29QaGFzZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGYudHJhdmVyc2VUd29QaGFzZShl
LHQsbil9LHRyYXZlcnNlRW50ZXJMZWF2ZTpmdW5jdGlvbihlLHQsbixyLG8pe3JldHVybiBmLnRy
YXZlcnNlRW50ZXJMZWF2ZShlLHQsbixyLG8pfSxpbmplY3Rpb246dn07dC5leHBvcnRzPWd9LHsx
MTI6MTEyLDEzNzoxMzcsMTQyOjE0Miw1MDo1MH1dLDE5OltmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe3ZhciByPXQuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVn
aXN0cmF0aW9uTmFtZXNbbl07cmV0dXJuIGcoZSxyKX1mdW5jdGlvbiBvKGUsdCxuKXt2YXIgbz1y
KGUsbix0KTtvJiYobi5fZGlzcGF0Y2hMaXN0ZW5lcnM9bShuLl9kaXNwYXRjaExpc3RlbmVycyxv
KSxuLl9kaXNwYXRjaEluc3RhbmNlcz1tKG4uX2Rpc3BhdGNoSW5zdGFuY2VzLGUpKX1mdW5jdGlv
biBpKGUpe2UmJmUuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMmJmgudHJh
dmVyc2VUd29QaGFzZShlLl90YXJnZXRJbnN0LG8sZSl9ZnVuY3Rpb24gYShlKXtpZihlJiZlLmRp
c3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKXt2YXIgdD1lLl90YXJnZXRJbnN0
LG49dD9oLmdldFBhcmVudEluc3RhbmNlKHQpOm51bGw7aC50cmF2ZXJzZVR3b1BoYXNlKG4sbyxl
KX19ZnVuY3Rpb24gcyhlLHQsbil7aWYobiYmbi5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25O
YW1lKXt2YXIgcj1uLmRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUsbz1nKGUscik7byYm
KG4uX2Rpc3BhdGNoTGlzdGVuZXJzPW0obi5fZGlzcGF0Y2hMaXN0ZW5lcnMsbyksbi5fZGlzcGF0
Y2hJbnN0YW5jZXM9bShuLl9kaXNwYXRjaEluc3RhbmNlcyxlKSl9fWZ1bmN0aW9uIHUoZSl7ZSYm
ZS5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lJiZzKGUuX3RhcmdldEluc3QsbnVsbCxl
KX1mdW5jdGlvbiBsKGUpe3YoZSxpKX1mdW5jdGlvbiBjKGUpe3YoZSxhKX1mdW5jdGlvbiBwKGUs
dCxuLHIpe2gudHJhdmVyc2VFbnRlckxlYXZlKG4scixzLGUsdCl9ZnVuY3Rpb24gZChlKXt2KGUs
dSl9dmFyIGY9ZSgxNiksaD1lKDE4KSxtPWUoOTEpLHY9ZSg5OCksZz0oZSgxNDIpLGYuZ2V0TGlz
dGVuZXIpLHk9e2FjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXM6bCxhY2N1bXVsYXRlVHdvUGhh
c2VEaXNwYXRjaGVzU2tpcFRhcmdldDpjLGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzOmQsYWNj
dW11bGF0ZUVudGVyTGVhdmVEaXNwYXRjaGVzOnB9O3QuZXhwb3J0cz15fSx7MTQyOjE0MiwxNjox
NiwxODoxOCw5MTo5MSw5ODo5OH1dLDIwOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1
bmN0aW9uIHIoZSl7dGhpcy5fcm9vdD1lLHRoaXMuX3N0YXJ0VGV4dD10aGlzLmdldFRleHQoKSx0
aGlzLl9mYWxsYmFja1RleHQ9bnVsbH12YXIgbz1lKDE0MyksaT1lKDI0KSxhPWUoMTA2KTtvKHIu
cHJvdG90eXBlLHtkZXN0cnVjdG9yOmZ1bmN0aW9uKCl7dGhpcy5fcm9vdD1udWxsLHRoaXMuX3N0
YXJ0VGV4dD1udWxsLHRoaXMuX2ZhbGxiYWNrVGV4dD1udWxsfSxnZXRUZXh0OmZ1bmN0aW9uKCl7
cmV0dXJuInZhbHVlImluIHRoaXMuX3Jvb3Q/dGhpcy5fcm9vdC52YWx1ZTp0aGlzLl9yb290W2Eo
KV19LGdldERhdGE6ZnVuY3Rpb24oKXtpZih0aGlzLl9mYWxsYmFja1RleHQpcmV0dXJuIHRoaXMu
X2ZhbGxiYWNrVGV4dDt2YXIgZSx0LG49dGhpcy5fc3RhcnRUZXh0LHI9bi5sZW5ndGgsbz10aGlz
LmdldFRleHQoKSxpPW8ubGVuZ3RoO2ZvcihlPTA7ZTxyJiZuW2VdPT09b1tlXTtlKyspO3ZhciBh
PXItZTtmb3IodD0xO3Q8PWEmJm5bci10XT09PW9baS10XTt0KyspO3ZhciBzPXQ+MT8xLXQ6dm9p
ZCAwO3JldHVybiB0aGlzLl9mYWxsYmFja1RleHQ9by5zbGljZShlLHMpLHRoaXMuX2ZhbGxiYWNr
VGV4dH19KSxpLmFkZFBvb2xpbmdUbyhyKSx0LmV4cG9ydHM9cn0sezEwNjoxMDYsMTQzOjE0Mywy
NDoyNH1dLDIxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTEpLG89ci5p
bmplY3Rpb24uTVVTVF9VU0VfUFJPUEVSVFksaT1yLmluamVjdGlvbi5IQVNfQk9PTEVBTl9WQUxV
RSxhPXIuaW5qZWN0aW9uLkhBU19OVU1FUklDX1ZBTFVFLHM9ci5pbmplY3Rpb24uSEFTX1BPU0lU
SVZFX05VTUVSSUNfVkFMVUUsdT1yLmluamVjdGlvbi5IQVNfT1ZFUkxPQURFRF9CT09MRUFOX1ZB
TFVFLGw9e2lzQ3VzdG9tQXR0cmlidXRlOlJlZ0V4cC5wcm90b3R5cGUudGVzdC5iaW5kKG5ldyBS
ZWdFeHAoIl4oZGF0YXxhcmlhKS1bIityLkFUVFJJQlVURV9OQU1FX0NIQVIrIl0qJCIpKSxQcm9w
ZXJ0aWVzOnthY2NlcHQ6MCxhY2NlcHRDaGFyc2V0OjAsYWNjZXNzS2V5OjAsYWN0aW9uOjAsYWxs
b3dGdWxsU2NyZWVuOmksYWxsb3dUcmFuc3BhcmVuY3k6MCxhbHQ6MCxhczowLGFzeW5jOmksYXV0
b0NvbXBsZXRlOjAsYXV0b1BsYXk6aSxjYXB0dXJlOmksY2VsbFBhZGRpbmc6MCxjZWxsU3BhY2lu
ZzowLGNoYXJTZXQ6MCxjaGFsbGVuZ2U6MCxjaGVja2VkOm98aSxjaXRlOjAsY2xhc3NJRDowLGNs
YXNzTmFtZTowLGNvbHM6cyxjb2xTcGFuOjAsY29udGVudDowLGNvbnRlbnRFZGl0YWJsZTowLGNv
bnRleHRNZW51OjAsY29udHJvbHM6aSxjb29yZHM6MCxjcm9zc09yaWdpbjowLGRhdGE6MCxkYXRl
VGltZTowLGRlZmF1bHQ6aSxkZWZlcjppLGRpcjowLGRpc2FibGVkOmksZG93bmxvYWQ6dSxkcmFn
Z2FibGU6MCxlbmNUeXBlOjAsZm9ybTowLGZvcm1BY3Rpb246MCxmb3JtRW5jVHlwZTowLGZvcm1N
ZXRob2Q6MCxmb3JtTm9WYWxpZGF0ZTppLGZvcm1UYXJnZXQ6MCxmcmFtZUJvcmRlcjowLGhlYWRl
cnM6MCxoZWlnaHQ6MCxoaWRkZW46aSxoaWdoOjAsaHJlZjowLGhyZWZMYW5nOjAsaHRtbEZvcjow
LGh0dHBFcXVpdjowLGljb246MCxpZDowLGlucHV0TW9kZTowLGludGVncml0eTowLGlzOjAsa2V5
UGFyYW1zOjAsa2V5VHlwZTowLGtpbmQ6MCxsYWJlbDowLGxhbmc6MCxsaXN0OjAsbG9vcDppLGxv
dzowLG1hbmlmZXN0OjAsbWFyZ2luSGVpZ2h0OjAsbWFyZ2luV2lkdGg6MCxtYXg6MCxtYXhMZW5n
dGg6MCxtZWRpYTowLG1lZGlhR3JvdXA6MCxtZXRob2Q6MCxtaW46MCxtaW5MZW5ndGg6MCxtdWx0
aXBsZTpvfGksbXV0ZWQ6b3xpLG5hbWU6MCxub25jZTowLG5vVmFsaWRhdGU6aSxvcGVuOmksb3B0
aW11bTowLHBhdHRlcm46MCxwbGFjZWhvbGRlcjowLHBsYXlzSW5saW5lOmkscG9zdGVyOjAscHJl
bG9hZDowLHByb2ZpbGU6MCxyYWRpb0dyb3VwOjAscmVhZE9ubHk6aSxyZWZlcnJlclBvbGljeTow
LHJlbDowLHJlcXVpcmVkOmkscmV2ZXJzZWQ6aSxyb2xlOjAscm93czpzLHJvd1NwYW46YSxzYW5k
Ym94OjAsc2NvcGU6MCxzY29wZWQ6aSxzY3JvbGxpbmc6MCxzZWFtbGVzczppLHNlbGVjdGVkOm98
aSxzaGFwZTowLHNpemU6cyxzaXplczowLHNwYW46cyxzcGVsbENoZWNrOjAsc3JjOjAsc3JjRG9j
OjAsc3JjTGFuZzowLHNyY1NldDowLHN0YXJ0OmEsc3RlcDowLHN0eWxlOjAsc3VtbWFyeTowLHRh
YkluZGV4OjAsdGFyZ2V0OjAsdGl0bGU6MCx0eXBlOjAsdXNlTWFwOjAsdmFsdWU6MCx3aWR0aDow
LHdtb2RlOjAsd3JhcDowLGFib3V0OjAsZGF0YXR5cGU6MCxpbmxpc3Q6MCxwcmVmaXg6MCxwcm9w
ZXJ0eTowLHJlc291cmNlOjAsdHlwZW9mOjAsdm9jYWI6MCxhdXRvQ2FwaXRhbGl6ZTowLGF1dG9D
b3JyZWN0OjAsYXV0b1NhdmU6MCxjb2xvcjowLGl0ZW1Qcm9wOjAsaXRlbVNjb3BlOmksaXRlbVR5
cGU6MCxpdGVtSUQ6MCxpdGVtUmVmOjAscmVzdWx0czowLHNlY3VyaXR5OjAsdW5zZWxlY3RhYmxl
OjB9LERPTUF0dHJpYnV0ZU5hbWVzOnthY2NlcHRDaGFyc2V0OiJhY2NlcHQtY2hhcnNldCIsY2xh
c3NOYW1lOiJjbGFzcyIsaHRtbEZvcjoiZm9yIixodHRwRXF1aXY6Imh0dHAtZXF1aXYifSxET01Q
cm9wZXJ0eU5hbWVzOnt9LERPTU11dGF0aW9uTWV0aG9kczp7dmFsdWU6ZnVuY3Rpb24oZSx0KXtp
ZihudWxsPT10KXJldHVybiBlLnJlbW92ZUF0dHJpYnV0ZSgidmFsdWUiKTsibnVtYmVyIiE9PWUu
dHlwZXx8ITE9PT1lLmhhc0F0dHJpYnV0ZSgidmFsdWUiKT9lLnNldEF0dHJpYnV0ZSgidmFsdWUi
LCIiK3QpOmUudmFsaWRpdHkmJiFlLnZhbGlkaXR5LmJhZElucHV0JiZlLm93bmVyRG9jdW1lbnQu
YWN0aXZlRWxlbWVudCE9PWUmJmUuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIrdCl9fX07dC5leHBv
cnRzPWx9LHsxMToxMX1dLDIyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9u
IHIoZSl7dmFyIHQ9eyI9IjoiPTAiLCI6IjoiPTIifTtyZXR1cm4iJCIrKCIiK2UpLnJlcGxhY2Uo
L1s9Ol0vZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9eyI9
MCI6Ij0iLCI9MiI6IjoifTtyZXR1cm4oIiIrKCIuIj09PWVbMF0mJiIkIj09PWVbMV0/ZS5zdWJz
dHJpbmcoMik6ZS5zdWJzdHJpbmcoMSkpKS5yZXBsYWNlKC8oPTB8PTIpL2csZnVuY3Rpb24oZSl7
cmV0dXJuIHRbZV19KX12YXIgaT17ZXNjYXBlOnIsdW5lc2NhcGU6b307dC5leHBvcnRzPWl9LHt9
XSwyMzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe251bGwhPWUu
Y2hlY2tlZExpbmsmJm51bGwhPWUudmFsdWVMaW5rJiZzKCI4NyIpfWZ1bmN0aW9uIG8oZSl7cihl
KSwobnVsbCE9ZS52YWx1ZXx8bnVsbCE9ZS5vbkNoYW5nZSkmJnMoIjg4Iil9ZnVuY3Rpb24gaShl
KXtyKGUpLChudWxsIT1lLmNoZWNrZWR8fG51bGwhPWUub25DaGFuZ2UpJiZzKCI4OSIpfWZ1bmN0
aW9uIGEoZSl7aWYoZSl7dmFyIHQ9ZS5nZXROYW1lKCk7aWYodClyZXR1cm4iIENoZWNrIHRoZSBy
ZW5kZXIgbWV0aG9kIG9mIGAiK3QrImAuIn1yZXR1cm4iIn12YXIgcz1lKDExMiksdT1lKDY0KSxs
PWUoMTQ1KSxjPWUoMTIwKSxwPWwoYy5pc1ZhbGlkRWxlbWVudCksZD0oZSgxMzcpLGUoMTQyKSx7
YnV0dG9uOiEwLGNoZWNrYm94OiEwLGltYWdlOiEwLGhpZGRlbjohMCxyYWRpbzohMCxyZXNldDoh
MCxzdWJtaXQ6ITB9KSxmPXt2YWx1ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIWVbdF18fGRbZS50
eXBlXXx8ZS5vbkNoYW5nZXx8ZS5yZWFkT25seXx8ZS5kaXNhYmxlZD9udWxsOm5ldyBFcnJvcigi
WW91IHByb3ZpZGVkIGEgYHZhbHVlYCBwcm9wIHRvIGEgZm9ybSBmaWVsZCB3aXRob3V0IGFuIGBv
bkNoYW5nZWAgaGFuZGxlci4gVGhpcyB3aWxsIHJlbmRlciBhIHJlYWQtb25seSBmaWVsZC4gSWYg
dGhlIGZpZWxkIHNob3VsZCBiZSBtdXRhYmxlIHVzZSBgZGVmYXVsdFZhbHVlYC4gT3RoZXJ3aXNl
LCBzZXQgZWl0aGVyIGBvbkNoYW5nZWAgb3IgYHJlYWRPbmx5YC4iKX0sY2hlY2tlZDpmdW5jdGlv
bihlLHQsbil7cmV0dXJuIWVbdF18fGUub25DaGFuZ2V8fGUucmVhZE9ubHl8fGUuZGlzYWJsZWQ/
bnVsbDpuZXcgRXJyb3IoIllvdSBwcm92aWRlZCBhIGBjaGVja2VkYCBwcm9wIHRvIGEgZm9ybSBm
aWVsZCB3aXRob3V0IGFuIGBvbkNoYW5nZWAgaGFuZGxlci4gVGhpcyB3aWxsIHJlbmRlciBhIHJl
YWQtb25seSBmaWVsZC4gSWYgdGhlIGZpZWxkIHNob3VsZCBiZSBtdXRhYmxlIHVzZSBgZGVmYXVs
dENoZWNrZWRgLiBPdGhlcndpc2UsIHNldCBlaXRoZXIgYG9uQ2hhbmdlYCBvciBgcmVhZE9ubHlg
LiIpfSxvbkNoYW5nZTpwLmZ1bmN9LGg9e30sbT17Y2hlY2tQcm9wVHlwZXM6ZnVuY3Rpb24oZSx0
LG4pe2Zvcih2YXIgciBpbiBmKXtpZihmLmhhc093blByb3BlcnR5KHIpKXZhciBvPWZbcl0odCxy
LGUsInByb3AiLG51bGwsdSk7byBpbnN0YW5jZW9mIEVycm9yJiYhKG8ubWVzc2FnZSBpbiBoKSYm
KGhbby5tZXNzYWdlXT0hMCxhKG4pKX19LGdldFZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnZh
bHVlTGluaz8obyhlKSxlLnZhbHVlTGluay52YWx1ZSk6ZS52YWx1ZX0sZ2V0Q2hlY2tlZDpmdW5j
dGlvbihlKXtyZXR1cm4gZS5jaGVja2VkTGluaz8oaShlKSxlLmNoZWNrZWRMaW5rLnZhbHVlKTpl
LmNoZWNrZWR9LGV4ZWN1dGVPbkNoYW5nZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLnZhbHVlTGlu
az8obyhlKSxlLnZhbHVlTGluay5yZXF1ZXN0Q2hhbmdlKHQudGFyZ2V0LnZhbHVlKSk6ZS5jaGVj
a2VkTGluaz8oaShlKSxlLmNoZWNrZWRMaW5rLnJlcXVlc3RDaGFuZ2UodC50YXJnZXQuY2hlY2tl
ZCkpOmUub25DaGFuZ2U/ZS5vbkNoYW5nZS5jYWxsKHZvaWQgMCx0KTp2b2lkIDB9fTt0LmV4cG9y
dHM9bX0sezExMjoxMTIsMTIwOjEyMCwxMzc6MTM3LDE0MjoxNDIsMTQ1OjE0NSw2NDo2NH1dLDI0
OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTEyKSxvPShlKDEzNyksZnVu
Y3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0Lmluc3RhbmNlUG9vbC5sZW5ndGgpe3ZhciBuPXQuaW5z
dGFuY2VQb29sLnBvcCgpO3JldHVybiB0LmNhbGwobixlKSxufXJldHVybiBuZXcgdChlKX0pLGk9
ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2lmKG4uaW5zdGFuY2VQb29sLmxlbmd0aCl7dmFyIHI9
bi5pbnN0YW5jZVBvb2wucG9wKCk7cmV0dXJuIG4uY2FsbChyLGUsdCkscn1yZXR1cm4gbmV3IG4o
ZSx0KX0sYT1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcztpZihyLmluc3RhbmNlUG9vbC5sZW5n
dGgpe3ZhciBvPXIuaW5zdGFuY2VQb29sLnBvcCgpO3JldHVybiByLmNhbGwobyxlLHQsbiksb31y
ZXR1cm4gbmV3IHIoZSx0LG4pfSxzPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPXRoaXM7aWYoby5p
bnN0YW5jZVBvb2wubGVuZ3RoKXt2YXIgaT1vLmluc3RhbmNlUG9vbC5wb3AoKTtyZXR1cm4gby5j
YWxsKGksZSx0LG4sciksaX1yZXR1cm4gbmV3IG8oZSx0LG4scil9LHU9ZnVuY3Rpb24oZSl7dmFy
IHQ9dGhpcztlIGluc3RhbmNlb2YgdHx8cigiMjUiKSxlLmRlc3RydWN0b3IoKSx0Lmluc3RhbmNl
UG9vbC5sZW5ndGg8dC5wb29sU2l6ZSYmdC5pbnN0YW5jZVBvb2wucHVzaChlKX0sbD1vLGM9ZnVu
Y3Rpb24oZSx0KXt2YXIgbj1lO3JldHVybiBuLmluc3RhbmNlUG9vbD1bXSxuLmdldFBvb2xlZD10
fHxsLG4ucG9vbFNpemV8fChuLnBvb2xTaXplPTEwKSxuLnJlbGVhc2U9dSxufSxwPXthZGRQb29s
aW5nVG86YyxvbmVBcmd1bWVudFBvb2xlcjpvLHR3b0FyZ3VtZW50UG9vbGVyOmksdGhyZWVBcmd1
bWVudFBvb2xlcjphLGZvdXJBcmd1bWVudFBvb2xlcjpzfTt0LmV4cG9ydHM9cH0sezExMjoxMTIs
MTM3OjEzN31dLDI1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7
cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG0pfHwoZVttXT1m
KysscFtlW21dXT17fSkscFtlW21dXX12YXIgbyxpPWUoMTQzKSxhPWUoMTcpLHM9ZSg1MSksdT1l
KDkwKSxsPWUoMTA3KSxjPWUoMTA5KSxwPXt9LGQ9ITEsZj0wLGg9e3RvcEFib3J0OiJhYm9ydCIs
dG9wQW5pbWF0aW9uRW5kOmwoImFuaW1hdGlvbmVuZCIpfHwiYW5pbWF0aW9uZW5kIix0b3BBbmlt
YXRpb25JdGVyYXRpb246bCgiYW5pbWF0aW9uaXRlcmF0aW9uIil8fCJhbmltYXRpb25pdGVyYXRp
b24iLHRvcEFuaW1hdGlvblN0YXJ0OmwoImFuaW1hdGlvbnN0YXJ0Iil8fCJhbmltYXRpb25zdGFy
dCIsdG9wQmx1cjoiYmx1ciIsdG9wQ2FuUGxheToiY2FucGxheSIsdG9wQ2FuUGxheVRocm91Z2g6
ImNhbnBsYXl0aHJvdWdoIix0b3BDaGFuZ2U6ImNoYW5nZSIsdG9wQ2xpY2s6ImNsaWNrIix0b3BD
b21wb3NpdGlvbkVuZDoiY29tcG9zaXRpb25lbmQiLHRvcENvbXBvc2l0aW9uU3RhcnQ6ImNvbXBv
c2l0aW9uc3RhcnQiLHRvcENvbXBvc2l0aW9uVXBkYXRlOiJjb21wb3NpdGlvbnVwZGF0ZSIsdG9w
Q29udGV4dE1lbnU6ImNvbnRleHRtZW51Iix0b3BDb3B5OiJjb3B5Iix0b3BDdXQ6ImN1dCIsdG9w
RG91YmxlQ2xpY2s6ImRibGNsaWNrIix0b3BEcmFnOiJkcmFnIix0b3BEcmFnRW5kOiJkcmFnZW5k
Iix0b3BEcmFnRW50ZXI6ImRyYWdlbnRlciIsdG9wRHJhZ0V4aXQ6ImRyYWdleGl0Iix0b3BEcmFn
TGVhdmU6ImRyYWdsZWF2ZSIsdG9wRHJhZ092ZXI6ImRyYWdvdmVyIix0b3BEcmFnU3RhcnQ6ImRy
YWdzdGFydCIsdG9wRHJvcDoiZHJvcCIsdG9wRHVyYXRpb25DaGFuZ2U6ImR1cmF0aW9uY2hhbmdl
Iix0b3BFbXB0aWVkOiJlbXB0aWVkIix0b3BFbmNyeXB0ZWQ6ImVuY3J5cHRlZCIsdG9wRW5kZWQ6
ImVuZGVkIix0b3BFcnJvcjoiZXJyb3IiLAordG9wRm9jdXM6ImZvY3VzIix0b3BJbnB1dDoiaW5w
dXQiLHRvcEtleURvd246ImtleWRvd24iLHRvcEtleVByZXNzOiJrZXlwcmVzcyIsdG9wS2V5VXA6
ImtleXVwIix0b3BMb2FkZWREYXRhOiJsb2FkZWRkYXRhIix0b3BMb2FkZWRNZXRhZGF0YToibG9h
ZGVkbWV0YWRhdGEiLHRvcExvYWRTdGFydDoibG9hZHN0YXJ0Iix0b3BNb3VzZURvd246Im1vdXNl
ZG93biIsdG9wTW91c2VNb3ZlOiJtb3VzZW1vdmUiLHRvcE1vdXNlT3V0OiJtb3VzZW91dCIsdG9w
TW91c2VPdmVyOiJtb3VzZW92ZXIiLHRvcE1vdXNlVXA6Im1vdXNldXAiLHRvcFBhc3RlOiJwYXN0
ZSIsdG9wUGF1c2U6InBhdXNlIix0b3BQbGF5OiJwbGF5Iix0b3BQbGF5aW5nOiJwbGF5aW5nIix0
b3BQcm9ncmVzczoicHJvZ3Jlc3MiLHRvcFJhdGVDaGFuZ2U6InJhdGVjaGFuZ2UiLHRvcFNjcm9s
bDoic2Nyb2xsIix0b3BTZWVrZWQ6InNlZWtlZCIsdG9wU2Vla2luZzoic2Vla2luZyIsdG9wU2Vs
ZWN0aW9uQ2hhbmdlOiJzZWxlY3Rpb25jaGFuZ2UiLHRvcFN0YWxsZWQ6InN0YWxsZWQiLHRvcFN1
c3BlbmQ6InN1c3BlbmQiLHRvcFRleHRJbnB1dDoidGV4dElucHV0Iix0b3BUaW1lVXBkYXRlOiJ0
aW1ldXBkYXRlIix0b3BUb3VjaENhbmNlbDoidG91Y2hjYW5jZWwiLHRvcFRvdWNoRW5kOiJ0b3Vj
aGVuZCIsdG9wVG91Y2hNb3ZlOiJ0b3VjaG1vdmUiLHRvcFRvdWNoU3RhcnQ6InRvdWNoc3RhcnQi
LHRvcFRyYW5zaXRpb25FbmQ6bCgidHJhbnNpdGlvbmVuZCIpfHwidHJhbnNpdGlvbmVuZCIsdG9w
Vm9sdW1lQ2hhbmdlOiJ2b2x1bWVjaGFuZ2UiLHRvcFdhaXRpbmc6IndhaXRpbmciLHRvcFdoZWVs
OiJ3aGVlbCJ9LG09Il9yZWFjdExpc3RlbmVyc0lEIitTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xp
Y2UoMiksdj1pKHt9LHMse1JlYWN0RXZlbnRMaXN0ZW5lcjpudWxsLGluamVjdGlvbjp7aW5qZWN0
UmVhY3RFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGUpe2Uuc2V0SGFuZGxlVG9wTGV2ZWwodi5oYW5k
bGVUb3BMZXZlbCksdi5SZWFjdEV2ZW50TGlzdGVuZXI9ZX19LHNldEVuYWJsZWQ6ZnVuY3Rpb24o
ZSl7di5SZWFjdEV2ZW50TGlzdGVuZXImJnYuUmVhY3RFdmVudExpc3RlbmVyLnNldEVuYWJsZWQo
ZSl9LGlzRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiEoIXYuUmVhY3RFdmVudExpc3RlbmVyfHwh
di5SZWFjdEV2ZW50TGlzdGVuZXIuaXNFbmFibGVkKCkpfSxsaXN0ZW5UbzpmdW5jdGlvbihlLHQp
e2Zvcih2YXIgbj10LG89cihuKSxpPWEucmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llc1tlXSxz
PTA7czxpLmxlbmd0aDtzKyspe3ZhciB1PWlbc107by5oYXNPd25Qcm9wZXJ0eSh1KSYmb1t1XXx8
KCJ0b3BXaGVlbCI9PT11P2MoIndoZWVsIik/di5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJs
ZWRFdmVudCgidG9wV2hlZWwiLCJ3aGVlbCIsbik6YygibW91c2V3aGVlbCIpP3YuUmVhY3RFdmVu
dExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoInRvcFdoZWVsIiwibW91c2V3aGVlbCIsbik6di5S
ZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudCgidG9wV2hlZWwiLCJET01Nb3VzZVNj
cm9sbCIsbik6InRvcFNjcm9sbCI9PT11P2MoInNjcm9sbCIsITApP3YuUmVhY3RFdmVudExpc3Rl
bmVyLnRyYXBDYXB0dXJlZEV2ZW50KCJ0b3BTY3JvbGwiLCJzY3JvbGwiLG4pOnYuUmVhY3RFdmVu
dExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoInRvcFNjcm9sbCIsInNjcm9sbCIsdi5SZWFjdEV2
ZW50TGlzdGVuZXIuV0lORE9XX0hBTkRMRSk6InRvcEZvY3VzIj09PXV8fCJ0b3BCbHVyIj09PXU/
KGMoImZvY3VzIiwhMCk/KHYuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBDYXB0dXJlZEV2ZW50KCJ0
b3BGb2N1cyIsImZvY3VzIixuKSx2LlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQ2FwdHVyZWRFdmVu
dCgidG9wQmx1ciIsImJsdXIiLG4pKTpjKCJmb2N1c2luIikmJih2LlJlYWN0RXZlbnRMaXN0ZW5l
ci50cmFwQnViYmxlZEV2ZW50KCJ0b3BGb2N1cyIsImZvY3VzaW4iLG4pLHYuUmVhY3RFdmVudExp
c3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoInRvcEJsdXIiLCJmb2N1c291dCIsbikpLG8udG9wQmx1
cj0hMCxvLnRvcEZvY3VzPSEwKTpoLmhhc093blByb3BlcnR5KHUpJiZ2LlJlYWN0RXZlbnRMaXN0
ZW5lci50cmFwQnViYmxlZEV2ZW50KHUsaFt1XSxuKSxvW3VdPSEwKX19LHRyYXBCdWJibGVkRXZl
bnQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2LlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxl
ZEV2ZW50KGUsdCxuKX0sdHJhcENhcHR1cmVkRXZlbnQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2
LlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQ2FwdHVyZWRFdmVudChlLHQsbil9LHN1cHBvcnRzRXZl
bnRQYWdlWFk6ZnVuY3Rpb24oKXtpZighZG9jdW1lbnQuY3JlYXRlRXZlbnQpcmV0dXJuITE7dmFy
IGU9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnQiKTtyZXR1cm4gbnVsbCE9ZSYmInBh
Z2VYImluIGV9LGVuc3VyZVNjcm9sbFZhbHVlTW9uaXRvcmluZzpmdW5jdGlvbigpe2lmKHZvaWQg
MD09PW8mJihvPXYuc3VwcG9ydHNFdmVudFBhZ2VYWSgpKSwhbyYmIWQpe3ZhciBlPXUucmVmcmVz
aFNjcm9sbFZhbHVlczt2LlJlYWN0RXZlbnRMaXN0ZW5lci5tb25pdG9yU2Nyb2xsVmFsdWUoZSks
ZD0hMH19fSk7dC5leHBvcnRzPXZ9LHsxMDc6MTA3LDEwOToxMDksMTQzOjE0MywxNzoxNyw1MTo1
MSw5MDo5MH1dLDI2OltmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKG4peyJ1c2Ugc3RyaWN0Ijtm
dW5jdGlvbiByKGUsdCxuLHIpe3ZhciBvPXZvaWQgMD09PWVbbl07bnVsbCE9dCYmbyYmKGVbbl09
aSh0LCEwKSl9dmFyIG89ZSg2NiksaT1lKDEwOCksYT0oZSgyMiksZSgxMTYpKSxzPWUoMTE3KTtl
KDE0Mik7dm9pZCAwIT09biYmbi5lbnY7dmFyIHU9e2luc3RhbnRpYXRlQ2hpbGRyZW46ZnVuY3Rp
b24oZSx0LG4sbyl7aWYobnVsbD09ZSlyZXR1cm4gbnVsbDt2YXIgaT17fTtyZXR1cm4gcyhlLHIs
aSksaX0sdXBkYXRlQ2hpbGRyZW46ZnVuY3Rpb24oZSx0LG4scixzLHUsbCxjLHApe2lmKHR8fGUp
e3ZhciBkLGY7Zm9yKGQgaW4gdClpZih0Lmhhc093blByb3BlcnR5KGQpKXtmPWUmJmVbZF07dmFy
IGg9ZiYmZi5fY3VycmVudEVsZW1lbnQsbT10W2RdO2lmKG51bGwhPWYmJmEoaCxtKSlvLnJlY2Vp
dmVDb21wb25lbnQoZixtLHMsYyksdFtkXT1mO2Vsc2V7ZiYmKHJbZF09by5nZXRIb3N0Tm9kZShm
KSxvLnVubW91bnRDb21wb25lbnQoZiwhMSkpO3ZhciB2PWkobSwhMCk7dFtkXT12O3ZhciBnPW8u
bW91bnRDb21wb25lbnQodixzLHUsbCxjLHApO24ucHVzaChnKX19Zm9yKGQgaW4gZSkhZS5oYXNP
d25Qcm9wZXJ0eShkKXx8dCYmdC5oYXNPd25Qcm9wZXJ0eShkKXx8KGY9ZVtkXSxyW2RdPW8uZ2V0
SG9zdE5vZGUoZiksby51bm1vdW50Q29tcG9uZW50KGYsITEpKX19LHVubW91bnRDaGlsZHJlbjpm
dW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkobikpe3ZhciBy
PWVbbl07by51bm1vdW50Q29tcG9uZW50KHIsdCl9fX07dC5leHBvcnRzPXV9KS5jYWxsKHRoaXMs
dm9pZCAwKX0sezEwODoxMDgsMTE2OjExNiwxMTc6MTE3LDE0MjoxNDIsMjI6MjIsNjY6NjZ9XSwy
NzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDgpLG89ZSgzNyksaT17cHJv
Y2Vzc0NoaWxkcmVuVXBkYXRlczpvLmRhbmdlcm91c2x5UHJvY2Vzc0NoaWxkcmVuVXBkYXRlcyxy
ZXBsYWNlTm9kZVdpdGhNYXJrdXA6ci5kYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cH07
dC5leHBvcnRzPWl9LHszNzozNyw4Ojh9XSwyODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0
Ijt2YXIgcj1lKDExMiksbz0oZSgxMzcpLCExKSxpPXtyZXBsYWNlTm9kZVdpdGhNYXJrdXA6bnVs
bCxwcm9jZXNzQ2hpbGRyZW5VcGRhdGVzOm51bGwsaW5qZWN0aW9uOntpbmplY3RFbnZpcm9ubWVu
dDpmdW5jdGlvbihlKXtvJiZyKCIxMDQiKSxpLnJlcGxhY2VOb2RlV2l0aE1hcmt1cD1lLnJlcGxh
Y2VOb2RlV2l0aE1hcmt1cCxpLnByb2Nlc3NDaGlsZHJlblVwZGF0ZXM9ZS5wcm9jZXNzQ2hpbGRy
ZW5VcGRhdGVzLG89ITB9fX07dC5leHBvcnRzPWl9LHsxMTI6MTEyLDEzNzoxMzd9XSwyOTpbZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe31mdW5jdGlvbiBvKGUpe3Jl
dHVybiEoIWUucHJvdG90eXBlfHwhZS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCl9ZnVuY3Rp
b24gaShlKXtyZXR1cm4hKCFlLnByb3RvdHlwZXx8IWUucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29t
cG9uZW50KX12YXIgYT1lKDExMikscz1lKDE0MyksdT1lKDEyMCksbD1lKDI4KSxjPWUoMTE5KSxw
PWUoNTApLGQ9ZSg1NyksZj0oZSg1OCksZSg2MikpLGg9ZSg2NiksbT1lKDEzMCksdj0oZSgxMzcp
LGUoMTQxKSksZz1lKDExNikseT0oZSgxNDIpLHtJbXB1cmVDbGFzczowLFB1cmVDbGFzczoxLFN0
YXRlbGVzc0Z1bmN0aW9uYWw6Mn0pO3IucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBl
PWQuZ2V0KHRoaXMpLl9jdXJyZW50RWxlbWVudC50eXBlLHQ9ZSh0aGlzLnByb3BzLHRoaXMuY29u
dGV4dCx0aGlzLnVwZGF0ZXIpO3JldHVybiB0fTt2YXIgXz0xLEM9e2NvbnN0cnVjdDpmdW5jdGlv
bihlKXt0aGlzLl9jdXJyZW50RWxlbWVudD1lLHRoaXMuX3Jvb3ROb2RlSUQ9MCx0aGlzLl9jb21w
b3NpdGVUeXBlPW51bGwsdGhpcy5faW5zdGFuY2U9bnVsbCx0aGlzLl9ob3N0UGFyZW50PW51bGws
dGhpcy5faG9zdENvbnRhaW5lckluZm89bnVsbCx0aGlzLl91cGRhdGVCYXRjaE51bWJlcj1udWxs
LHRoaXMuX3BlbmRpbmdFbGVtZW50PW51bGwsdGhpcy5fcGVuZGluZ1N0YXRlUXVldWU9bnVsbCx0
aGlzLl9wZW5kaW5nUmVwbGFjZVN0YXRlPSExLHRoaXMuX3BlbmRpbmdGb3JjZVVwZGF0ZT0hMSx0
aGlzLl9yZW5kZXJlZE5vZGVUeXBlPW51bGwsdGhpcy5fcmVuZGVyZWRDb21wb25lbnQ9bnVsbCx0
aGlzLl9jb250ZXh0PW51bGwsdGhpcy5fbW91bnRPcmRlcj0wLHRoaXMuX3RvcExldmVsV3JhcHBl
cj1udWxsLHRoaXMuX3BlbmRpbmdDYWxsYmFja3M9bnVsbCx0aGlzLl9jYWxsZWRDb21wb25lbnRX
aWxsVW5tb3VudD0hMX0sbW91bnRDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4scyl7dGhpcy5fY29u
dGV4dD1zLHRoaXMuX21vdW50T3JkZXI9XysrLHRoaXMuX2hvc3RQYXJlbnQ9dCx0aGlzLl9ob3N0
Q29udGFpbmVySW5mbz1uO3ZhciBsLGM9dGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHMscD10aGlz
Ll9wcm9jZXNzQ29udGV4dChzKSxmPXRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGUsaD1lLmdldFVw
ZGF0ZVF1ZXVlKCksdj1vKGYpLGc9dGhpcy5fY29uc3RydWN0Q29tcG9uZW50KHYsYyxwLGgpO3Z8
fG51bGwhPWcmJm51bGwhPWcucmVuZGVyP2koZik/dGhpcy5fY29tcG9zaXRlVHlwZT15LlB1cmVD
bGFzczp0aGlzLl9jb21wb3NpdGVUeXBlPXkuSW1wdXJlQ2xhc3M6KGw9ZyxudWxsPT09Z3x8ITE9
PT1nfHx1LmlzVmFsaWRFbGVtZW50KGcpfHxhKCIxMDUiLGYuZGlzcGxheU5hbWV8fGYubmFtZXx8
IkNvbXBvbmVudCIpLGc9bmV3IHIoZiksdGhpcy5fY29tcG9zaXRlVHlwZT15LlN0YXRlbGVzc0Z1
bmN0aW9uYWwpLGcucHJvcHM9YyxnLmNvbnRleHQ9cCxnLnJlZnM9bSxnLnVwZGF0ZXI9aCx0aGlz
Ll9pbnN0YW5jZT1nLGQuc2V0KGcsdGhpcyk7dmFyIEM9Zy5zdGF0ZTt2b2lkIDA9PT1DJiYoZy5z
dGF0ZT1DPW51bGwpLCgib2JqZWN0IiE9dHlwZW9mIEN8fEFycmF5LmlzQXJyYXkoQykpJiZhKCIx
MDYiLHRoaXMuZ2V0TmFtZSgpfHwiUmVhY3RDb21wb3NpdGVDb21wb25lbnQiKSx0aGlzLl9wZW5k
aW5nU3RhdGVRdWV1ZT1udWxsLHRoaXMuX3BlbmRpbmdSZXBsYWNlU3RhdGU9ITEsdGhpcy5fcGVu
ZGluZ0ZvcmNlVXBkYXRlPSExO3ZhciBiO3JldHVybiBiPWcudW5zdGFibGVfaGFuZGxlRXJyb3I/
dGhpcy5wZXJmb3JtSW5pdGlhbE1vdW50V2l0aEVycm9ySGFuZGxpbmcobCx0LG4sZSxzKTp0aGlz
LnBlcmZvcm1Jbml0aWFsTW91bnQobCx0LG4sZSxzKSxnLmNvbXBvbmVudERpZE1vdW50JiZlLmdl
dFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUoZy5jb21wb25lbnREaWRNb3VudCxnKSxifSxfY29u
c3RydWN0Q29tcG9uZW50OmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLl9jb25zdHJ1Y3RD
b21wb25lbnRXaXRob3V0T3duZXIoZSx0LG4scil9LF9jb25zdHJ1Y3RDb21wb25lbnRXaXRob3V0
T3duZXI6ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89dGhpcy5fY3VycmVudEVsZW1lbnQudHlwZTty
ZXR1cm4gZT9uZXcgbyh0LG4scik6byh0LG4scil9LHBlcmZvcm1Jbml0aWFsTW91bnRXaXRoRXJy
b3JIYW5kbGluZzpmdW5jdGlvbihlLHQsbixyLG8pe3ZhciBpLGE9ci5jaGVja3BvaW50KCk7dHJ5
e2k9dGhpcy5wZXJmb3JtSW5pdGlhbE1vdW50KGUsdCxuLHIsbyl9Y2F0Y2gocyl7ci5yb2xsYmFj
ayhhKSx0aGlzLl9pbnN0YW5jZS51bnN0YWJsZV9oYW5kbGVFcnJvcihzKSx0aGlzLl9wZW5kaW5n
U3RhdGVRdWV1ZSYmKHRoaXMuX2luc3RhbmNlLnN0YXRlPXRoaXMuX3Byb2Nlc3NQZW5kaW5nU3Rh
dGUodGhpcy5faW5zdGFuY2UucHJvcHMsdGhpcy5faW5zdGFuY2UuY29udGV4dCkpLGE9ci5jaGVj
a3BvaW50KCksdGhpcy5fcmVuZGVyZWRDb21wb25lbnQudW5tb3VudENvbXBvbmVudCghMCksci5y
b2xsYmFjayhhKSxpPXRoaXMucGVyZm9ybUluaXRpYWxNb3VudChlLHQsbixyLG8pfXJldHVybiBp
fSxwZXJmb3JtSW5pdGlhbE1vdW50OmZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGk9dGhpcy5faW5z
dGFuY2U7aS5jb21wb25lbnRXaWxsTW91bnQmJihpLmNvbXBvbmVudFdpbGxNb3VudCgpLHRoaXMu
X3BlbmRpbmdTdGF0ZVF1ZXVlJiYoaS5zdGF0ZT10aGlzLl9wcm9jZXNzUGVuZGluZ1N0YXRlKGku
cHJvcHMsaS5jb250ZXh0KSkpLHZvaWQgMD09PWUmJihlPXRoaXMuX3JlbmRlclZhbGlkYXRlZENv
bXBvbmVudCgpKTt2YXIgYT1mLmdldFR5cGUoZSk7dGhpcy5fcmVuZGVyZWROb2RlVHlwZT1hO3Zh
ciBzPXRoaXMuX2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQoZSxhIT09Zi5FTVBUWSk7cmV0dXJu
IHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50PXMsaC5tb3VudENvbXBvbmVudChzLHIsdCxuLHRoaXMu
X3Byb2Nlc3NDaGlsZENvbnRleHQobyksMCl9LGdldEhvc3ROb2RlOmZ1bmN0aW9uKCl7cmV0dXJu
IGguZ2V0SG9zdE5vZGUodGhpcy5fcmVuZGVyZWRDb21wb25lbnQpfSx1bm1vdW50Q29tcG9uZW50
OmZ1bmN0aW9uKGUpe2lmKHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50KXt2YXIgdD10aGlzLl9pbnN0
YW5jZTtpZih0LmNvbXBvbmVudFdpbGxVbm1vdW50JiYhdC5fY2FsbGVkQ29tcG9uZW50V2lsbFVu
bW91bnQpaWYodC5fY2FsbGVkQ29tcG9uZW50V2lsbFVubW91bnQ9ITAsZSl7dmFyIG49dGhpcy5n
ZXROYW1lKCkrIi5jb21wb25lbnRXaWxsVW5tb3VudCgpIjtwLmludm9rZUd1YXJkZWRDYWxsYmFj
ayhuLHQuY29tcG9uZW50V2lsbFVubW91bnQuYmluZCh0KSl9ZWxzZSB0LmNvbXBvbmVudFdpbGxV
bm1vdW50KCk7dGhpcy5fcmVuZGVyZWRDb21wb25lbnQmJihoLnVubW91bnRDb21wb25lbnQodGhp
cy5fcmVuZGVyZWRDb21wb25lbnQsZSksdGhpcy5fcmVuZGVyZWROb2RlVHlwZT1udWxsLHRoaXMu
X3JlbmRlcmVkQ29tcG9uZW50PW51bGwsdGhpcy5faW5zdGFuY2U9bnVsbCksdGhpcy5fcGVuZGlu
Z1N0YXRlUXVldWU9bnVsbCx0aGlzLl9wZW5kaW5nUmVwbGFjZVN0YXRlPSExLHRoaXMuX3BlbmRp
bmdGb3JjZVVwZGF0ZT0hMSx0aGlzLl9wZW5kaW5nQ2FsbGJhY2tzPW51bGwsdGhpcy5fcGVuZGlu
Z0VsZW1lbnQ9bnVsbCx0aGlzLl9jb250ZXh0PW51bGwsdGhpcy5fcm9vdE5vZGVJRD0wLHRoaXMu
X3RvcExldmVsV3JhcHBlcj1udWxsLGQucmVtb3ZlKHQpfX0sX21hc2tDb250ZXh0OmZ1bmN0aW9u
KGUpe3ZhciB0PXRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGUsbj10LmNvbnRleHRUeXBlcztpZigh
bilyZXR1cm4gbTt2YXIgcj17fTtmb3IodmFyIG8gaW4gbilyW29dPWVbb107cmV0dXJuIHJ9LF9w
cm9jZXNzQ29udGV4dDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbWFza0NvbnRleHQoZSl9LF9w
cm9jZXNzQ2hpbGRDb250ZXh0OmZ1bmN0aW9uKGUpe3ZhciB0LG49dGhpcy5fY3VycmVudEVsZW1l
bnQudHlwZSxyPXRoaXMuX2luc3RhbmNlO2lmKHIuZ2V0Q2hpbGRDb250ZXh0JiYodD1yLmdldENo
aWxkQ29udGV4dCgpKSx0KXsib2JqZWN0IiE9dHlwZW9mIG4uY2hpbGRDb250ZXh0VHlwZXMmJmEo
IjEwNyIsdGhpcy5nZXROYW1lKCl8fCJSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCIpO2Zvcih2YXIg
byBpbiB0KW8gaW4gbi5jaGlsZENvbnRleHRUeXBlc3x8YSgiMTA4Iix0aGlzLmdldE5hbWUoKXx8
IlJlYWN0Q29tcG9zaXRlQ29tcG9uZW50IixvKTtyZXR1cm4gcyh7fSxlLHQpfXJldHVybiBlfSxf
Y2hlY2tDb250ZXh0VHlwZXM6ZnVuY3Rpb24oZSx0LG4pe30scmVjZWl2ZUNvbXBvbmVudDpmdW5j
dGlvbihlLHQsbil7dmFyIHI9dGhpcy5fY3VycmVudEVsZW1lbnQsbz10aGlzLl9jb250ZXh0O3Ro
aXMuX3BlbmRpbmdFbGVtZW50PW51bGwsdGhpcy51cGRhdGVDb21wb25lbnQodCxyLGUsbyxuKX0s
cGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5OmZ1bmN0aW9uKGUpe251bGwhPXRoaXMuX3BlbmRpbmdF
bGVtZW50P2gucmVjZWl2ZUNvbXBvbmVudCh0aGlzLHRoaXMuX3BlbmRpbmdFbGVtZW50LGUsdGhp
cy5fY29udGV4dCk6bnVsbCE9PXRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlfHx0aGlzLl9wZW5kaW5n
Rm9yY2VVcGRhdGU/dGhpcy51cGRhdGVDb21wb25lbnQoZSx0aGlzLl9jdXJyZW50RWxlbWVudCx0
aGlzLl9jdXJyZW50RWxlbWVudCx0aGlzLl9jb250ZXh0LHRoaXMuX2NvbnRleHQpOnRoaXMuX3Vw
ZGF0ZUJhdGNoTnVtYmVyPW51bGx9LHVwZGF0ZUNvbXBvbmVudDpmdW5jdGlvbihlLHQsbixyLG8p
e3ZhciBpPXRoaXMuX2luc3RhbmNlO251bGw9PWkmJmEoIjEzNiIsdGhpcy5nZXROYW1lKCl8fCJS
ZWFjdENvbXBvc2l0ZUNvbXBvbmVudCIpO3ZhciBzLHU9ITE7dGhpcy5fY29udGV4dD09PW8/cz1p
LmNvbnRleHQ6KHM9dGhpcy5fcHJvY2Vzc0NvbnRleHQobyksdT0hMCk7dmFyIGw9dC5wcm9wcyxj
PW4ucHJvcHM7dCE9PW4mJih1PSEwKSx1JiZpLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJmku
Y29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhjLHMpO3ZhciBwPXRoaXMuX3Byb2Nlc3NQZW5kaW5n
U3RhdGUoYyxzKSxkPSEwO3RoaXMuX3BlbmRpbmdGb3JjZVVwZGF0ZXx8KGkuc2hvdWxkQ29tcG9u
ZW50VXBkYXRlP2Q9aS5zaG91bGRDb21wb25lbnRVcGRhdGUoYyxwLHMpOnRoaXMuX2NvbXBvc2l0
ZVR5cGU9PT15LlB1cmVDbGFzcyYmKGQ9IXYobCxjKXx8IXYoaS5zdGF0ZSxwKSkpLHRoaXMuX3Vw
ZGF0ZUJhdGNoTnVtYmVyPW51bGwsZD8odGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlPSExLHRoaXMu
X3BlcmZvcm1Db21wb25lbnRVcGRhdGUobixjLHAscyxlLG8pKToodGhpcy5fY3VycmVudEVsZW1l
bnQ9bix0aGlzLl9jb250ZXh0PW8saS5wcm9wcz1jLGkuc3RhdGU9cCxpLmNvbnRleHQ9cyl9LF9w
cm9jZXNzUGVuZGluZ1N0YXRlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5faW5zdGFuY2Uscj10
aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZSxvPXRoaXMuX3BlbmRpbmdSZXBsYWNlU3RhdGU7aWYodGhp
cy5fcGVuZGluZ1JlcGxhY2VTdGF0ZT0hMSx0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZT1udWxsLCFy
KXJldHVybiBuLnN0YXRlO2lmKG8mJjE9PT1yLmxlbmd0aClyZXR1cm4gclswXTtmb3IodmFyIGk9
cyh7fSxvP3JbMF06bi5zdGF0ZSksYT1vPzE6MDthPHIubGVuZ3RoO2ErKyl7dmFyIHU9clthXTtz
KGksImZ1bmN0aW9uIj09dHlwZW9mIHU/dS5jYWxsKG4saSxlLHQpOnUpfXJldHVybiBpfSxfcGVy
Zm9ybUNvbXBvbmVudFVwZGF0ZTpmdW5jdGlvbihlLHQsbixyLG8saSl7dmFyIGEscyx1LGw9dGhp
cy5faW5zdGFuY2UsYz1Cb29sZWFuKGwuY29tcG9uZW50RGlkVXBkYXRlKTtjJiYoYT1sLnByb3Bz
LHM9bC5zdGF0ZSx1PWwuY29udGV4dCksbC5jb21wb25lbnRXaWxsVXBkYXRlJiZsLmNvbXBvbmVu
dFdpbGxVcGRhdGUodCxuLHIpLHRoaXMuX2N1cnJlbnRFbGVtZW50PWUsdGhpcy5fY29udGV4dD1p
LGwucHJvcHM9dCxsLnN0YXRlPW4sbC5jb250ZXh0PXIsdGhpcy5fdXBkYXRlUmVuZGVyZWRDb21w
b25lbnQobyxpKSxjJiZvLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUobC5jb21wb25lbnRE
aWRVcGRhdGUuYmluZChsLGEscyx1KSxsKX0sX3VwZGF0ZVJlbmRlcmVkQ29tcG9uZW50OmZ1bmN0
aW9uKGUsdCl7dmFyIG49dGhpcy5fcmVuZGVyZWRDb21wb25lbnQscj1uLl9jdXJyZW50RWxlbWVu
dCxvPXRoaXMuX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudCgpO2lmKGcocixvKSloLnJlY2VpdmVD
b21wb25lbnQobixvLGUsdGhpcy5fcHJvY2Vzc0NoaWxkQ29udGV4dCh0KSk7ZWxzZXt2YXIgaT1o
LmdldEhvc3ROb2RlKG4pO2gudW5tb3VudENvbXBvbmVudChuLCExKTt2YXIgYT1mLmdldFR5cGUo
byk7dGhpcy5fcmVuZGVyZWROb2RlVHlwZT1hO3ZhciBzPXRoaXMuX2luc3RhbnRpYXRlUmVhY3RD
b21wb25lbnQobyxhIT09Zi5FTVBUWSk7dGhpcy5fcmVuZGVyZWRDb21wb25lbnQ9czt2YXIgdT1o
Lm1vdW50Q29tcG9uZW50KHMsZSx0aGlzLl9ob3N0UGFyZW50LHRoaXMuX2hvc3RDb250YWluZXJJ
bmZvLHRoaXMuX3Byb2Nlc3NDaGlsZENvbnRleHQodCksMCk7dGhpcy5fcmVwbGFjZU5vZGVXaXRo
TWFya3VwKGksdSxuKX19LF9yZXBsYWNlTm9kZVdpdGhNYXJrdXA6ZnVuY3Rpb24oZSx0LG4pe2wu
cmVwbGFjZU5vZGVXaXRoTWFya3VwKGUsdCxuKX0sX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudFdp
dGhvdXRPd25lck9yQ29udGV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbnN0YW5jZS5yZW5k
ZXIoKX0sX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudDpmdW5jdGlvbigpe3ZhciBlO2lmKHRoaXMu
X2NvbXBvc2l0ZVR5cGUhPT15LlN0YXRlbGVzc0Z1bmN0aW9uYWwpe2MuY3VycmVudD10aGlzO3Ry
eXtlPXRoaXMuX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudFdpdGhvdXRPd25lck9yQ29udGV4dCgp
fWZpbmFsbHl7Yy5jdXJyZW50PW51bGx9fWVsc2UgZT10aGlzLl9yZW5kZXJWYWxpZGF0ZWRDb21w
b25lbnRXaXRob3V0T3duZXJPckNvbnRleHQoKTtyZXR1cm4gbnVsbD09PWV8fCExPT09ZXx8dS5p
c1ZhbGlkRWxlbWVudChlKXx8YSgiMTA5Iix0aGlzLmdldE5hbWUoKXx8IlJlYWN0Q29tcG9zaXRl
Q29tcG9uZW50IiksZX0sYXR0YWNoUmVmOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5nZXRQdWJs
aWNJbnN0YW5jZSgpO251bGw9PW4mJmEoIjExMCIpO3ZhciByPXQuZ2V0UHVibGljSW5zdGFuY2Uo
KTsobi5yZWZzPT09bT9uLnJlZnM9e306bi5yZWZzKVtlXT1yfSxkZXRhY2hSZWY6ZnVuY3Rpb24o
ZSl7ZGVsZXRlIHRoaXMuZ2V0UHVibGljSW5zdGFuY2UoKS5yZWZzW2VdfSxnZXROYW1lOmZ1bmN0
aW9uKCl7dmFyIGU9dGhpcy5fY3VycmVudEVsZW1lbnQudHlwZSx0PXRoaXMuX2luc3RhbmNlJiZ0
aGlzLl9pbnN0YW5jZS5jb25zdHJ1Y3RvcjtyZXR1cm4gZS5kaXNwbGF5TmFtZXx8dCYmdC5kaXNw
bGF5TmFtZXx8ZS5uYW1lfHx0JiZ0Lm5hbWV8fG51bGx9LGdldFB1YmxpY0luc3RhbmNlOmZ1bmN0
aW9uKCl7dmFyIGU9dGhpcy5faW5zdGFuY2U7cmV0dXJuIHRoaXMuX2NvbXBvc2l0ZVR5cGU9PT15
LlN0YXRlbGVzc0Z1bmN0aW9uYWw/bnVsbDplfSxfaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudDpu
dWxsfTt0LmV4cG9ydHM9Q30sezExMjoxMTIsMTE2OjExNiwxMTk6MTE5LDEyMDoxMjAsMTMwOjEz
MCwxMzc6MTM3LDE0MToxNDEsMTQyOjE0MiwxNDM6MTQzLDI4OjI4LDUwOjUwLDU3OjU3LDU4OjU4
LDYyOjYyLDY2OjY2fV0sMzA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgz
Myksbz1lKDQ3KSxpPWUoNjApLGE9ZSg2Nikscz1lKDcxKSx1PWUoNzIpLGw9ZSg5NiksYz1lKDEw
MykscD1lKDExMyk7ZSgxNDIpO28uaW5qZWN0KCk7dmFyIGQ9e2ZpbmRET01Ob2RlOmwscmVuZGVy
OmkucmVuZGVyLHVubW91bnRDb21wb25lbnRBdE5vZGU6aS51bm1vdW50Q29tcG9uZW50QXROb2Rl
LHZlcnNpb246dSx1bnN0YWJsZV9iYXRjaGVkVXBkYXRlczpzLmJhdGNoZWRVcGRhdGVzLHVuc3Rh
YmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyOnB9OyJ1bmRlZmluZWQiIT10eXBlb2YgX19S
RUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fJiYiZnVuY3Rpb24iPT10eXBlb2YgX19SRUFDVF9E
RVZUT09MU19HTE9CQUxfSE9PS19fLmluamVjdCYmX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9P
S19fLmluamVjdCh7Q29tcG9uZW50VHJlZTp7Z2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGU6ci5n
ZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSxnZXROb2RlRnJvbUluc3RhbmNlOmZ1bmN0aW9uKGUp
e3JldHVybiBlLl9yZW5kZXJlZENvbXBvbmVudCYmKGU9YyhlKSksZT9yLmdldE5vZGVGcm9tSW5z
dGFuY2UoZSk6bnVsbH19LE1vdW50OmksUmVjb25jaWxlcjphfSk7dC5leHBvcnRzPWR9LHsxMDM6
MTAzLDExMzoxMTMsMTQyOjE0MiwzMzozMyw0Nzo0Nyw2MDo2MCw2Njo2Niw3MTo3MSw3Mjo3Miw5
Njo5Nn1dLDMxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYo
ZSl7dmFyIHQ9ZS5fY3VycmVudEVsZW1lbnQuX293bmVyfHxudWxsO2lmKHQpe3ZhciBuPXQuZ2V0
TmFtZSgpO2lmKG4pcmV0dXJuIiBUaGlzIERPTSBub2RlIHdhcyByZW5kZXJlZCBieSBgIituKyJg
LiJ9fXJldHVybiIifWZ1bmN0aW9uIG8oZSx0KXt0JiYoWVtlLl90YWddJiYobnVsbCE9dC5jaGls
ZHJlbnx8bnVsbCE9dC5kYW5nZXJvdXNseVNldElubmVySFRNTCkmJm0oIjEzNyIsZS5fdGFnLGUu
X2N1cnJlbnRFbGVtZW50Ll9vd25lcj8iIENoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mICIrZS5f
Y3VycmVudEVsZW1lbnQuX293bmVyLmdldE5hbWUoKSsiLiI6IiIpLG51bGwhPXQuZGFuZ2Vyb3Vz
bHlTZXRJbm5lckhUTUwmJihudWxsIT10LmNoaWxkcmVuJiZtKCI2MCIpLCJvYmplY3QiPT10eXBl
b2YgdC5kYW5nZXJvdXNseVNldElubmVySFRNTCYmQiBpbiB0LmRhbmdlcm91c2x5U2V0SW5uZXJI
VE1MfHxtKCI2MSIpKSxudWxsIT10LnN0eWxlJiYib2JqZWN0IiE9dHlwZW9mIHQuc3R5bGUmJm0o
IjYyIixyKGUpKSl9ZnVuY3Rpb24gaShlLHQsbixyKXtpZighKHIgaW5zdGFuY2VvZiBSKSl7dmFy
IG89ZS5faG9zdENvbnRhaW5lckluZm8saT1vLl9ub2RlJiZvLl9ub2RlLm5vZGVUeXBlPT09SCxz
PWk/by5fbm9kZTpvLl9vd25lckRvY3VtZW50O0YodCxzKSxyLmdldFJlYWN0TW91bnRSZWFkeSgp
LmVucXVldWUoYSx7aW5zdDplLHJlZ2lzdHJhdGlvbk5hbWU6dCxsaXN0ZW5lcjpufSl9fWZ1bmN0
aW9uIGEoKXt2YXIgZT10aGlzO3gucHV0TGlzdGVuZXIoZS5pbnN0LGUucmVnaXN0cmF0aW9uTmFt
ZSxlLmxpc3RlbmVyKX1mdW5jdGlvbiBzKCl7dmFyIGU9dGhpcztTLnBvc3RNb3VudFdyYXBwZXIo
ZSl9ZnVuY3Rpb24gdSgpe3ZhciBlPXRoaXM7SS5wb3N0TW91bnRXcmFwcGVyKGUpfWZ1bmN0aW9u
IGwoKXt2YXIgZT10aGlzO04ucG9zdE1vdW50V3JhcHBlcihlKX1mdW5jdGlvbiBjKCl7dmFyIGU9
dGhpcztlLl9yb290Tm9kZUlEfHxtKCI2MyIpO3ZhciB0PVUoZSk7c3dpdGNoKHR8fG0oIjY0Iiks
ZS5fdGFnKXtjYXNlImlmcmFtZSI6Y2FzZSJvYmplY3QiOmUuX3dyYXBwZXJTdGF0ZS5saXN0ZW5l
cnM9W1QudHJhcEJ1YmJsZWRFdmVudCgidG9wTG9hZCIsImxvYWQiLHQpXTticmVhaztjYXNlInZp
ZGVvIjpjYXNlImF1ZGlvIjplLl93cmFwcGVyU3RhdGUubGlzdGVuZXJzPVtdO2Zvcih2YXIgbiBp
biBxKXEuaGFzT3duUHJvcGVydHkobikmJmUuX3dyYXBwZXJTdGF0ZS5saXN0ZW5lcnMucHVzaChU
LnRyYXBCdWJibGVkRXZlbnQobixxW25dLHQpKTticmVhaztjYXNlInNvdXJjZSI6ZS5fd3JhcHBl
clN0YXRlLmxpc3RlbmVycz1bVC50cmFwQnViYmxlZEV2ZW50KCJ0b3BFcnJvciIsImVycm9yIix0
KV07YnJlYWs7Y2FzZSJpbWciOmUuX3dyYXBwZXJTdGF0ZS5saXN0ZW5lcnM9W1QudHJhcEJ1YmJs
ZWRFdmVudCgidG9wRXJyb3IiLCJlcnJvciIsdCksVC50cmFwQnViYmxlZEV2ZW50KCJ0b3BMb2Fk
IiwibG9hZCIsdCldO2JyZWFrO2Nhc2UiZm9ybSI6ZS5fd3JhcHBlclN0YXRlLmxpc3RlbmVycz1b
VC50cmFwQnViYmxlZEV2ZW50KCJ0b3BSZXNldCIsInJlc2V0Iix0KSxULnRyYXBCdWJibGVkRXZl
bnQoInRvcFN1Ym1pdCIsInN1Ym1pdCIsdCldO2JyZWFrO2Nhc2UiaW5wdXQiOmNhc2Uic2VsZWN0
IjpjYXNlInRleHRhcmVhIjplLl93cmFwcGVyU3RhdGUubGlzdGVuZXJzPVtULnRyYXBCdWJibGVk
RXZlbnQoInRvcEludmFsaWQiLCJpbnZhbGlkIix0KV19fWZ1bmN0aW9uIHAoKXtNLnBvc3RVcGRh
dGVXcmFwcGVyKHRoaXMpfWZ1bmN0aW9uIGQoZSl7Ry5jYWxsKFEsZSl8fChYLnRlc3QoZSl8fG0o
IjY1IixlKSxRW2VdPSEwKX1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuIGUuaW5kZXhPZigiLSIpPj0w
fHxudWxsIT10LmlzfWZ1bmN0aW9uIGgoZSl7dmFyIHQ9ZS50eXBlO2QodCksdGhpcy5fY3VycmVu
dEVsZW1lbnQ9ZSx0aGlzLl90YWc9dC50b0xvd2VyQ2FzZSgpLHRoaXMuX25hbWVzcGFjZVVSST1u
dWxsLHRoaXMuX3JlbmRlcmVkQ2hpbGRyZW49bnVsbCx0aGlzLl9wcmV2aW91c1N0eWxlPW51bGws
dGhpcy5fcHJldmlvdXNTdHlsZUNvcHk9bnVsbCx0aGlzLl9ob3N0Tm9kZT1udWxsLHRoaXMuX2hv
c3RQYXJlbnQ9bnVsbCx0aGlzLl9yb290Tm9kZUlEPTAsdGhpcy5fZG9tSUQ9MCx0aGlzLl9ob3N0
Q29udGFpbmVySW5mbz1udWxsLHRoaXMuX3dyYXBwZXJTdGF0ZT1udWxsLHRoaXMuX3RvcExldmVs
V3JhcHBlcj1udWxsLHRoaXMuX2ZsYWdzPTB9dmFyIG09ZSgxMTIpLHY9ZSgxNDMpLGc9ZSgyKSx5
PWUoNSksXz1lKDkpLEM9ZSgxMCksYj1lKDExKSxFPWUoMTIpLHg9ZSgxNiksdz1lKDE3KSxUPWUo
MjUpLGs9ZSgzMiksUD1lKDMzKSxTPWUoMzgpLE49ZSgzOSksTT1lKDQwKSxJPWUoNDMpLE89KGUo
NTgpLGUoNjEpKSxSPWUoNjgpLEE9KGUoMTI5KSxlKDk1KSksRD0oZSgxMzcpLGUoMTA5KSxlKDE0
MSksZSgxMTgpLGUoMTQyKSxrKSxMPXguZGVsZXRlTGlzdGVuZXIsVT1QLmdldE5vZGVGcm9tSW5z
dGFuY2UsRj1ULmxpc3RlblRvLGo9dy5yZWdpc3RyYXRpb25OYW1lTW9kdWxlcyxWPXtzdHJpbmc6
ITAsbnVtYmVyOiEwfSxCPSJfX2h0bWwiLFc9e2NoaWxkcmVuOm51bGwsZGFuZ2Vyb3VzbHlTZXRJ
bm5lckhUTUw6bnVsbCxzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmc6bnVsbH0sSD0xMSxx
PXt0b3BBYm9ydDoiYWJvcnQiLHRvcENhblBsYXk6ImNhbnBsYXkiLHRvcENhblBsYXlUaHJvdWdo
OiJjYW5wbGF5dGhyb3VnaCIsdG9wRHVyYXRpb25DaGFuZ2U6ImR1cmF0aW9uY2hhbmdlIix0b3BF
bXB0aWVkOiJlbXB0aWVkIix0b3BFbmNyeXB0ZWQ6ImVuY3J5cHRlZCIsdG9wRW5kZWQ6ImVuZGVk
Iix0b3BFcnJvcjoiZXJyb3IiLHRvcExvYWRlZERhdGE6ImxvYWRlZGRhdGEiLHRvcExvYWRlZE1l
dGFkYXRhOiJsb2FkZWRtZXRhZGF0YSIsdG9wTG9hZFN0YXJ0OiJsb2Fkc3RhcnQiLHRvcFBhdXNl
OiJwYXVzZSIsdG9wUGxheToicGxheSIsdG9wUGxheWluZzoicGxheWluZyIsdG9wUHJvZ3Jlc3M6
InByb2dyZXNzIix0b3BSYXRlQ2hhbmdlOiJyYXRlY2hhbmdlIix0b3BTZWVrZWQ6InNlZWtlZCIs
dG9wU2Vla2luZzoic2Vla2luZyIsdG9wU3RhbGxlZDoic3RhbGxlZCIsdG9wU3VzcGVuZDoic3Vz
cGVuZCIsdG9wVGltZVVwZGF0ZToidGltZXVwZGF0ZSIsdG9wVm9sdW1lQ2hhbmdlOiJ2b2x1bWVj
aGFuZ2UiLHRvcFdhaXRpbmc6IndhaXRpbmcifSxLPXthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29s
OiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRh
OiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9LHo9e2xpc3Rpbmc6ITAscHJl
OiEwLHRleHRhcmVhOiEwfSxZPXYoe21lbnVpdGVtOiEwfSxLKSxYPS9eW2EtekEtWl1bYS16QS1a
Ol9cLlwtXGRdKiQvLFE9e30sRz17fS5oYXNPd25Qcm9wZXJ0eSwkPTE7aC5kaXNwbGF5TmFtZT0i
UmVhY3RET01Db21wb25lbnQiLGguTWl4aW49e21vdW50Q29tcG9uZW50OmZ1bmN0aW9uKGUsdCxu
LHIpe3RoaXMuX3Jvb3ROb2RlSUQ9JCsrLHRoaXMuX2RvbUlEPW4uX2lkQ291bnRlcisrLHRoaXMu
X2hvc3RQYXJlbnQ9dCx0aGlzLl9ob3N0Q29udGFpbmVySW5mbz1uO3ZhciBpPXRoaXMuX2N1cnJl
bnRFbGVtZW50LnByb3BzO3N3aXRjaCh0aGlzLl90YWcpe2Nhc2UiYXVkaW8iOmNhc2UiZm9ybSI6
Y2FzZSJpZnJhbWUiOmNhc2UiaW1nIjpjYXNlImxpbmsiOmNhc2Uib2JqZWN0IjpjYXNlInNvdXJj
ZSI6Y2FzZSJ2aWRlbyI6dGhpcy5fd3JhcHBlclN0YXRlPXtsaXN0ZW5lcnM6bnVsbH0sZS5nZXRS
ZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGMsdGhpcyk7YnJlYWs7Y2FzZSJpbnB1dCI6Uy5tb3Vu
dFdyYXBwZXIodGhpcyxpLHQpLGk9Uy5nZXRIb3N0UHJvcHModGhpcyxpKSxlLmdldFJlYWN0TW91
bnRSZWFkeSgpLmVucXVldWUoYyx0aGlzKTticmVhaztjYXNlIm9wdGlvbiI6Ti5tb3VudFdyYXBw
ZXIodGhpcyxpLHQpLGk9Ti5nZXRIb3N0UHJvcHModGhpcyxpKTticmVhaztjYXNlInNlbGVjdCI6
TS5tb3VudFdyYXBwZXIodGhpcyxpLHQpLGk9TS5nZXRIb3N0UHJvcHModGhpcyxpKSxlLmdldFJl
YWN0TW91bnRSZWFkeSgpLmVucXVldWUoYyx0aGlzKTticmVhaztjYXNlInRleHRhcmVhIjpJLm1v
dW50V3JhcHBlcih0aGlzLGksdCksaT1JLmdldEhvc3RQcm9wcyh0aGlzLGkpLGUuZ2V0UmVhY3RN
b3VudFJlYWR5KCkuZW5xdWV1ZShjLHRoaXMpfW8odGhpcyxpKTt2YXIgYSxwO251bGwhPXQ/KGE9
dC5fbmFtZXNwYWNlVVJJLHA9dC5fdGFnKTpuLl90YWcmJihhPW4uX25hbWVzcGFjZVVSSSxwPW4u
X3RhZyksKG51bGw9PWF8fGE9PT1DLnN2ZyYmImZvcmVpZ25vYmplY3QiPT09cCkmJihhPUMuaHRt
bCksYT09PUMuaHRtbCYmKCJzdmciPT09dGhpcy5fdGFnP2E9Qy5zdmc6Im1hdGgiPT09dGhpcy5f
dGFnJiYoYT1DLm1hdGhtbCkpLHRoaXMuX25hbWVzcGFjZVVSST1hO3ZhciBkO2lmKGUudXNlQ3Jl
YXRlRWxlbWVudCl7dmFyIGYsaD1uLl9vd25lckRvY3VtZW50O2lmKGE9PT1DLmh0bWwpaWYoInNj
cmlwdCI9PT10aGlzLl90YWcpe3ZhciBtPWguY3JlYXRlRWxlbWVudCgiZGl2Iiksdj10aGlzLl9j
dXJyZW50RWxlbWVudC50eXBlO20uaW5uZXJIVE1MPSI8Iit2KyI+PC8iK3YrIj4iLGY9bS5yZW1v
dmVDaGlsZChtLmZpcnN0Q2hpbGQpfWVsc2UgZj1pLmlzP2guY3JlYXRlRWxlbWVudCh0aGlzLl9j
dXJyZW50RWxlbWVudC50eXBlLGkuaXMpOmguY3JlYXRlRWxlbWVudCh0aGlzLl9jdXJyZW50RWxl
bWVudC50eXBlKTtlbHNlIGY9aC5jcmVhdGVFbGVtZW50TlMoYSx0aGlzLl9jdXJyZW50RWxlbWVu
dC50eXBlKTtQLnByZWNhY2hlTm9kZSh0aGlzLGYpLHRoaXMuX2ZsYWdzfD1ELmhhc0NhY2hlZENo
aWxkTm9kZXMsdGhpcy5faG9zdFBhcmVudHx8RS5zZXRBdHRyaWJ1dGVGb3JSb290KGYpLHRoaXMu
X3VwZGF0ZURPTVByb3BlcnRpZXMobnVsbCxpLGUpO3ZhciB5PV8oZik7dGhpcy5fY3JlYXRlSW5p
dGlhbENoaWxkcmVuKGUsaSxyLHkpLGQ9eX1lbHNle3ZhciBiPXRoaXMuX2NyZWF0ZU9wZW5UYWdN
YXJrdXBBbmRQdXRMaXN0ZW5lcnMoZSxpKSx4PXRoaXMuX2NyZWF0ZUNvbnRlbnRNYXJrdXAoZSxp
LHIpO2Q9IXgmJktbdGhpcy5fdGFnXT9iKyIvPiI6YisiPiIreCsiPC8iK3RoaXMuX2N1cnJlbnRF
bGVtZW50LnR5cGUrIj4ifXN3aXRjaCh0aGlzLl90YWcpe2Nhc2UiaW5wdXQiOmUuZ2V0UmVhY3RN
b3VudFJlYWR5KCkuZW5xdWV1ZShzLHRoaXMpLGkuYXV0b0ZvY3VzJiZlLmdldFJlYWN0TW91bnRS
ZWFkeSgpLmVucXVldWUoZy5mb2N1c0RPTUNvbXBvbmVudCx0aGlzKTticmVhaztjYXNlInRleHRh
cmVhIjplLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUodSx0aGlzKSxpLmF1dG9Gb2N1cyYm
ZS5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGcuZm9jdXNET01Db21wb25lbnQsdGhpcyk7
YnJlYWs7Y2FzZSJzZWxlY3QiOmNhc2UiYnV0dG9uIjppLmF1dG9Gb2N1cyYmZS5nZXRSZWFjdE1v
dW50UmVhZHkoKS5lbnF1ZXVlKGcuZm9jdXNET01Db21wb25lbnQsdGhpcyk7YnJlYWs7Y2FzZSJv
cHRpb24iOmUuZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShsLHRoaXMpfXJldHVybiBkfSxf
Y3JlYXRlT3BlblRhZ01hcmt1cEFuZFB1dExpc3RlbmVyczpmdW5jdGlvbihlLHQpe3ZhciBuPSI8
Iit0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlO2Zvcih2YXIgciBpbiB0KWlmKHQuaGFzT3duUHJv
cGVydHkocikpe3ZhciBvPXRbcl07aWYobnVsbCE9bylpZihqLmhhc093blByb3BlcnR5KHIpKW8m
JmkodGhpcyxyLG8sZSk7ZWxzZXsic3R5bGUiPT09ciYmKG8mJihvPXRoaXMuX3ByZXZpb3VzU3R5
bGVDb3B5PXYoe30sdC5zdHlsZSkpLG89eS5jcmVhdGVNYXJrdXBGb3JTdHlsZXMobyx0aGlzKSk7
dmFyIGE9bnVsbDtudWxsIT10aGlzLl90YWcmJmYodGhpcy5fdGFnLHQpP1cuaGFzT3duUHJvcGVy
dHkocil8fChhPUUuY3JlYXRlTWFya3VwRm9yQ3VzdG9tQXR0cmlidXRlKHIsbykpOmE9RS5jcmVh
dGVNYXJrdXBGb3JQcm9wZXJ0eShyLG8pLGEmJihuKz0iICIrYSl9fXJldHVybiBlLnJlbmRlclRv
U3RhdGljTWFya3VwP246KHRoaXMuX2hvc3RQYXJlbnR8fChuKz0iICIrRS5jcmVhdGVNYXJrdXBG
b3JSb290KCkpLG4rPSIgIitFLmNyZWF0ZU1hcmt1cEZvcklEKHRoaXMuX2RvbUlEKSl9LF9jcmVh
dGVDb250ZW50TWFya3VwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0iIixvPXQuZGFuZ2Vyb3VzbHlT
ZXRJbm5lckhUTUw7aWYobnVsbCE9byludWxsIT1vLl9faHRtbCYmKHI9by5fX2h0bWwpO2Vsc2V7
dmFyIGk9Vlt0eXBlb2YgdC5jaGlsZHJlbl0/dC5jaGlsZHJlbjpudWxsLGE9bnVsbCE9aT9udWxs
OnQuY2hpbGRyZW47aWYobnVsbCE9aSlyPUEoaSk7ZWxzZSBpZihudWxsIT1hKXt2YXIgcz10aGlz
Lm1vdW50Q2hpbGRyZW4oYSxlLG4pO3I9cy5qb2luKCIiKX19cmV0dXJuIHpbdGhpcy5fdGFnXSYm
IlxuIj09PXIuY2hhckF0KDApPyJcbiIrcjpyfSxfY3JlYXRlSW5pdGlhbENoaWxkcmVuOmZ1bmN0
aW9uKGUsdCxuLHIpe3ZhciBvPXQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw7aWYobnVsbCE9bylu
dWxsIT1vLl9faHRtbCYmXy5xdWV1ZUhUTUwocixvLl9faHRtbCk7ZWxzZXt2YXIgaT1WW3R5cGVv
ZiB0LmNoaWxkcmVuXT90LmNoaWxkcmVuOm51bGwsYT1udWxsIT1pP251bGw6dC5jaGlsZHJlbjtp
ZihudWxsIT1pKSIiIT09aSYmXy5xdWV1ZVRleHQocixpKTtlbHNlIGlmKG51bGwhPWEpZm9yKHZh
ciBzPXRoaXMubW91bnRDaGlsZHJlbihhLGUsbiksdT0wO3U8cy5sZW5ndGg7dSsrKV8ucXVldWVD
aGlsZChyLHNbdV0pfX0scmVjZWl2ZUNvbXBvbmVudDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhp
cy5fY3VycmVudEVsZW1lbnQ7dGhpcy5fY3VycmVudEVsZW1lbnQ9ZSx0aGlzLnVwZGF0ZUNvbXBv
bmVudCh0LHIsZSxuKX0sdXBkYXRlQ29tcG9uZW50OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXQu
cHJvcHMsYT10aGlzLl9jdXJyZW50RWxlbWVudC5wcm9wcztzd2l0Y2godGhpcy5fdGFnKXtjYXNl
ImlucHV0IjppPVMuZ2V0SG9zdFByb3BzKHRoaXMsaSksYT1TLmdldEhvc3RQcm9wcyh0aGlzLGEp
O2JyZWFrO2Nhc2Uib3B0aW9uIjppPU4uZ2V0SG9zdFByb3BzKHRoaXMsaSksYT1OLmdldEhvc3RQ
cm9wcyh0aGlzLGEpO2JyZWFrO2Nhc2Uic2VsZWN0IjppPU0uZ2V0SG9zdFByb3BzKHRoaXMsaSks
YT1NLmdldEhvc3RQcm9wcyh0aGlzLGEpO2JyZWFrO2Nhc2UidGV4dGFyZWEiOmk9SS5nZXRIb3N0
UHJvcHModGhpcyxpKSxhPUkuZ2V0SG9zdFByb3BzKHRoaXMsYSl9c3dpdGNoKG8odGhpcyxhKSx0
aGlzLl91cGRhdGVET01Qcm9wZXJ0aWVzKGksYSxlKSx0aGlzLl91cGRhdGVET01DaGlsZHJlbihp
LGEsZSxyKSx0aGlzLl90YWcpe2Nhc2UiaW5wdXQiOlMudXBkYXRlV3JhcHBlcih0aGlzKTticmVh
aztjYXNlInRleHRhcmVhIjpJLnVwZGF0ZVdyYXBwZXIodGhpcyk7YnJlYWs7Y2FzZSJzZWxlY3Qi
OmUuZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShwLHRoaXMpfX0sX3VwZGF0ZURPTVByb3Bl
cnRpZXM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8sYTtmb3IociBpbiBlKWlmKCF0Lmhhc093blBy
b3BlcnR5KHIpJiZlLmhhc093blByb3BlcnR5KHIpJiZudWxsIT1lW3JdKWlmKCJzdHlsZSI9PT1y
KXt2YXIgcz10aGlzLl9wcmV2aW91c1N0eWxlQ29weTtmb3IobyBpbiBzKXMuaGFzT3duUHJvcGVy
dHkobykmJihhPWF8fHt9LGFbb109IiIpO3RoaXMuX3ByZXZpb3VzU3R5bGVDb3B5PW51bGx9ZWxz
ZSBqLmhhc093blByb3BlcnR5KHIpP2Vbcl0mJkwodGhpcyxyKTpmKHRoaXMuX3RhZyxlKT9XLmhh
c093blByb3BlcnR5KHIpfHxFLmRlbGV0ZVZhbHVlRm9yQXR0cmlidXRlKFUodGhpcykscik6KGIu
cHJvcGVydGllc1tyXXx8Yi5pc0N1c3RvbUF0dHJpYnV0ZShyKSkmJkUuZGVsZXRlVmFsdWVGb3JQ
cm9wZXJ0eShVKHRoaXMpLHIpO2ZvcihyIGluIHQpe3ZhciB1PXRbcl0sbD0ic3R5bGUiPT09cj90
aGlzLl9wcmV2aW91c1N0eWxlQ29weTpudWxsIT1lP2Vbcl06dm9pZCAwO2lmKHQuaGFzT3duUHJv
cGVydHkocikmJnUhPT1sJiYobnVsbCE9dXx8bnVsbCE9bCkpaWYoInN0eWxlIj09PXIpaWYodT91
PXRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5PXYoe30sdSk6dGhpcy5fcHJldmlvdXNTdHlsZUNvcHk9
bnVsbCxsKXtmb3IobyBpbiBsKSFsLmhhc093blByb3BlcnR5KG8pfHx1JiZ1Lmhhc093blByb3Bl
cnR5KG8pfHwoYT1hfHx7fSxhW29dPSIiKTtmb3IobyBpbiB1KXUuaGFzT3duUHJvcGVydHkobykm
Jmxbb10hPT11W29dJiYoYT1hfHx7fSxhW29dPXVbb10pfWVsc2UgYT11O2Vsc2UgaWYoai5oYXNP
d25Qcm9wZXJ0eShyKSl1P2kodGhpcyxyLHUsbik6bCYmTCh0aGlzLHIpO2Vsc2UgaWYoZih0aGlz
Ll90YWcsdCkpVy5oYXNPd25Qcm9wZXJ0eShyKXx8RS5zZXRWYWx1ZUZvckF0dHJpYnV0ZShVKHRo
aXMpLHIsdSk7ZWxzZSBpZihiLnByb3BlcnRpZXNbcl18fGIuaXNDdXN0b21BdHRyaWJ1dGUocikp
e3ZhciBjPVUodGhpcyk7bnVsbCE9dT9FLnNldFZhbHVlRm9yUHJvcGVydHkoYyxyLHUpOkUuZGVs
ZXRlVmFsdWVGb3JQcm9wZXJ0eShjLHIpfX1hJiZ5LnNldFZhbHVlRm9yU3R5bGVzKFUodGhpcyks
YSx0aGlzKX0sX3VwZGF0ZURPTUNoaWxkcmVuOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPVZbdHlw
ZW9mIGUuY2hpbGRyZW5dP2UuY2hpbGRyZW46bnVsbCxpPVZbdHlwZW9mIHQuY2hpbGRyZW5dP3Qu
Y2hpbGRyZW46bnVsbCxhPWUuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJmUuZGFuZ2Vyb3VzbHlT
ZXRJbm5lckhUTUwuX19odG1sLHM9dC5kYW5nZXJvdXNseVNldElubmVySFRNTCYmdC5kYW5nZXJv
dXNseVNldElubmVySFRNTC5fX2h0bWwsdT1udWxsIT1vP251bGw6ZS5jaGlsZHJlbixsPW51bGwh
PWk/bnVsbDp0LmNoaWxkcmVuLGM9bnVsbCE9b3x8bnVsbCE9YSxwPW51bGwhPWl8fG51bGwhPXM7
bnVsbCE9dSYmbnVsbD09bD90aGlzLnVwZGF0ZUNoaWxkcmVuKG51bGwsbixyKTpjJiYhcCYmdGhp
cy51cGRhdGVUZXh0Q29udGVudCgiIiksbnVsbCE9aT9vIT09aSYmdGhpcy51cGRhdGVUZXh0Q29u
dGVudCgiIitpKTpudWxsIT1zP2EhPT1zJiZ0aGlzLnVwZGF0ZU1hcmt1cCgiIitzKTpudWxsIT1s
JiZ0aGlzLnVwZGF0ZUNoaWxkcmVuKGwsbixyKX0sZ2V0SG9zdE5vZGU6ZnVuY3Rpb24oKXtyZXR1
cm4gVSh0aGlzKX0sdW5tb3VudENvbXBvbmVudDpmdW5jdGlvbihlKXtzd2l0Y2godGhpcy5fdGFn
KXtjYXNlImF1ZGlvIjpjYXNlImZvcm0iOmNhc2UiaWZyYW1lIjpjYXNlImltZyI6Y2FzZSJsaW5r
IjpjYXNlIm9iamVjdCI6Y2FzZSJzb3VyY2UiOmNhc2UidmlkZW8iOnZhciB0PXRoaXMuX3dyYXBw
ZXJTdGF0ZS5saXN0ZW5lcnM7aWYodClmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl0W25dLnJl
bW92ZSgpO2JyZWFrO2Nhc2UiaHRtbCI6Y2FzZSJoZWFkIjpjYXNlImJvZHkiOm0oIjY2Iix0aGlz
Ll90YWcpfXRoaXMudW5tb3VudENoaWxkcmVuKGUpLFAudW5jYWNoZU5vZGUodGhpcykseC5kZWxl
dGVBbGxMaXN0ZW5lcnModGhpcyksdGhpcy5fcm9vdE5vZGVJRD0wLHRoaXMuX2RvbUlEPTAsdGhp
cy5fd3JhcHBlclN0YXRlPW51bGx9LGdldFB1YmxpY0luc3RhbmNlOmZ1bmN0aW9uKCl7cmV0dXJu
IFUodGhpcyl9fSx2KGgucHJvdG90eXBlLGguTWl4aW4sTy5NaXhpbiksdC5leHBvcnRzPWh9LHsx
MDoxMCwxMDk6MTA5LDExOjExLDExMjoxMTIsMTE4OjExOCwxMjoxMiwxMjk6MTI5LDEzNzoxMzcs
MTQxOjE0MSwxNDI6MTQyLDE0MzoxNDMsMTY6MTYsMTc6MTcsMjoyLDI1OjI1LDMyOjMyLDMzOjMz
LDM4OjM4LDM5OjM5LDQwOjQwLDQzOjQzLDU6NSw1ODo1OCw2MTo2MSw2ODo2OCw5OjksOTU6OTV9
XSwzMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17aGFzQ2FjaGVkQ2hpbGRO
b2RlczoxfTt0LmV4cG9ydHM9cn0se31dLDMzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3Qi
O2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gMT09PWUubm9kZVR5cGUmJmUuZ2V0QXR0cmlidXRlKGgp
PT09U3RyaW5nKHQpfHw4PT09ZS5ub2RlVHlwZSYmZS5ub2RlVmFsdWU9PT0iIHJlYWN0LXRleHQ6
ICIrdCsiICJ8fDg9PT1lLm5vZGVUeXBlJiZlLm5vZGVWYWx1ZT09PSIgcmVhY3QtZW1wdHk6ICIr
dCsiICJ9ZnVuY3Rpb24gbyhlKXtmb3IodmFyIHQ7dD1lLl9yZW5kZXJlZENvbXBvbmVudDspZT10
O3JldHVybiBlfWZ1bmN0aW9uIGkoZSx0KXt2YXIgbj1vKGUpO24uX2hvc3ROb2RlPXQsdFt2XT1u
fWZ1bmN0aW9uIGEoZSl7dmFyIHQ9ZS5faG9zdE5vZGU7dCYmKGRlbGV0ZSB0W3ZdLGUuX2hvc3RO
b2RlPW51bGwpfWZ1bmN0aW9uIHMoZSx0KXtpZighKGUuX2ZsYWdzJm0uaGFzQ2FjaGVkQ2hpbGRO
b2Rlcykpe3ZhciBuPWUuX3JlbmRlcmVkQ2hpbGRyZW4sYT10LmZpcnN0Q2hpbGQ7ZTpmb3IodmFy
IHMgaW4gbilpZihuLmhhc093blByb3BlcnR5KHMpKXt2YXIgdT1uW3NdLGw9byh1KS5fZG9tSUQ7
aWYoMCE9PWwpe2Zvcig7bnVsbCE9PWE7YT1hLm5leHRTaWJsaW5nKWlmKHIoYSxsKSl7aSh1LGEp
O2NvbnRpbnVlIGV9cCgiMzIiLGwpfX1lLl9mbGFnc3w9bS5oYXNDYWNoZWRDaGlsZE5vZGVzfX1m
dW5jdGlvbiB1KGUpe2lmKGVbdl0pcmV0dXJuIGVbdl07Zm9yKHZhciB0PVtdOyFlW3ZdOyl7aWYo
dC5wdXNoKGUpLCFlLnBhcmVudE5vZGUpcmV0dXJuIG51bGw7ZT1lLnBhcmVudE5vZGV9Zm9yKHZh
ciBuLHI7ZSYmKHI9ZVt2XSk7ZT10LnBvcCgpKW49cix0Lmxlbmd0aCYmcyhyLGUpO3JldHVybiBu
fWZ1bmN0aW9uIGwoZSl7dmFyIHQ9dShlKTtyZXR1cm4gbnVsbCE9dCYmdC5faG9zdE5vZGU9PT1l
P3Q6bnVsbH1mdW5jdGlvbiBjKGUpe2lmKHZvaWQgMD09PWUuX2hvc3ROb2RlJiZwKCIzMyIpLGUu
X2hvc3ROb2RlKXJldHVybiBlLl9ob3N0Tm9kZTtmb3IodmFyIHQ9W107IWUuX2hvc3ROb2RlOyl0
LnB1c2goZSksZS5faG9zdFBhcmVudHx8cCgiMzQiKSxlPWUuX2hvc3RQYXJlbnQ7Zm9yKDt0Lmxl
bmd0aDtlPXQucG9wKCkpcyhlLGUuX2hvc3ROb2RlKTtyZXR1cm4gZS5faG9zdE5vZGV9dmFyIHA9
ZSgxMTIpLGQ9ZSgxMSksZj1lKDMyKSxoPShlKDEzNyksZC5JRF9BVFRSSUJVVEVfTkFNRSksbT1m
LHY9Il9fcmVhY3RJbnRlcm5hbEluc3RhbmNlJCIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNiku
c2xpY2UoMiksZz17Z2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGU6dSxnZXRJbnN0YW5jZUZyb21O
b2RlOmwsZ2V0Tm9kZUZyb21JbnN0YW5jZTpjLHByZWNhY2hlQ2hpbGROb2RlczpzLHByZWNhY2hl
Tm9kZTppLHVuY2FjaGVOb2RlOmF9O3QuZXhwb3J0cz1nfSx7MTE6MTEsMTEyOjExMiwxMzc6MTM3
LDMyOjMyfV0sMzQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQp
e3JldHVybntfdG9wTGV2ZWxXcmFwcGVyOmUsX2lkQ291bnRlcjoxLF9vd25lckRvY3VtZW50OnQ/
dC5ub2RlVHlwZT09PW8/dDp0Lm93bmVyRG9jdW1lbnQ6bnVsbCxfbm9kZTp0LF90YWc6dD90Lm5v
ZGVOYW1lLnRvTG93ZXJDYXNlKCk6bnVsbCxfbmFtZXNwYWNlVVJJOnQ/dC5uYW1lc3BhY2VVUkk6
bnVsbH19dmFyIG89KGUoMTE4KSw5KTt0LmV4cG9ydHM9cn0sezExODoxMTh9XSwzNTpbZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDE0Myksbz1lKDkpLGk9ZSgzMyksYT1mdW5j
dGlvbihlKXt0aGlzLl9jdXJyZW50RWxlbWVudD1udWxsLHRoaXMuX2hvc3ROb2RlPW51bGwsdGhp
cy5faG9zdFBhcmVudD1udWxsLHRoaXMuX2hvc3RDb250YWluZXJJbmZvPW51bGwsdGhpcy5fZG9t
SUQ9MH07cihhLnByb3RvdHlwZSx7bW91bnRDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4scil7dmFy
IGE9bi5faWRDb3VudGVyKys7dGhpcy5fZG9tSUQ9YSx0aGlzLl9ob3N0UGFyZW50PXQsdGhpcy5f
aG9zdENvbnRhaW5lckluZm89bjt2YXIgcz0iIHJlYWN0LWVtcHR5OiAiK3RoaXMuX2RvbUlEKyIg
IjtpZihlLnVzZUNyZWF0ZUVsZW1lbnQpe3ZhciB1PW4uX293bmVyRG9jdW1lbnQsbD11LmNyZWF0
ZUNvbW1lbnQocyk7cmV0dXJuIGkucHJlY2FjaGVOb2RlKHRoaXMsbCksbyhsKX1yZXR1cm4gZS5y
ZW5kZXJUb1N0YXRpY01hcmt1cD8iIjoiPCEtLSIrcysiLS0+In0scmVjZWl2ZUNvbXBvbmVudDpm
dW5jdGlvbigpe30sZ2V0SG9zdE5vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gaS5nZXROb2RlRnJvbUlu
c3RhbmNlKHRoaXMpfSx1bm1vdW50Q29tcG9uZW50OmZ1bmN0aW9uKCl7aS51bmNhY2hlTm9kZSh0
aGlzKX19KSx0LmV4cG9ydHM9YX0sezE0MzoxNDMsMzM6MzMsOTo5fV0sMzY6W2Z1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e3VzZUNyZWF0ZUVsZW1lbnQ6ITAsdXNlRmliZXI6ITF9
O3QuZXhwb3J0cz1yfSx7fV0sMzc6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9
ZSg4KSxvPWUoMzMpLGk9e2Rhbmdlcm91c2x5UHJvY2Vzc0NoaWxkcmVuVXBkYXRlczpmdW5jdGlv
bihlLHQpe3ZhciBuPW8uZ2V0Tm9kZUZyb21JbnN0YW5jZShlKTtyLnByb2Nlc3NVcGRhdGVzKG4s
dCl9fTt0LmV4cG9ydHM9aX0sezMzOjMzLDg6OH1dLDM4OltmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO2Z1bmN0aW9uIHIoKXt0aGlzLl9yb290Tm9kZUlEJiZkLnVwZGF0ZVdyYXBwZXIodGhp
cyl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4iY2hlY2tib3giPT09ZS50eXBlfHwicmFkaW8iPT09ZS50
eXBlP251bGwhPWUuY2hlY2tlZDpudWxsIT1lLnZhbHVlfWZ1bmN0aW9uIGkoZSl7dmFyIHQ9dGhp
cy5fY3VycmVudEVsZW1lbnQucHJvcHMsbj1sLmV4ZWN1dGVPbkNoYW5nZSh0LGUpO3AuYXNhcChy
LHRoaXMpO3ZhciBvPXQubmFtZTtpZigicmFkaW8iPT09dC50eXBlJiZudWxsIT1vKXtmb3IodmFy
IGk9Yy5nZXROb2RlRnJvbUluc3RhbmNlKHRoaXMpLHM9aTtzLnBhcmVudE5vZGU7KXM9cy5wYXJl
bnROb2RlO2Zvcih2YXIgdT1zLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W25hbWU9IitKU09OLnN0
cmluZ2lmeSgiIitvKSsnXVt0eXBlPSJyYWRpbyJdJyksZD0wO2Q8dS5sZW5ndGg7ZCsrKXt2YXIg
Zj11W2RdO2lmKGYhPT1pJiZmLmZvcm09PT1pLmZvcm0pe3ZhciBoPWMuZ2V0SW5zdGFuY2VGcm9t
Tm9kZShmKTtofHxhKCI5MCIpLHAuYXNhcChyLGgpfX19cmV0dXJuIG59dmFyIGE9ZSgxMTIpLHM9
ZSgxNDMpLHU9ZSgxMiksbD1lKDIzKSxjPWUoMzMpLHA9ZSg3MSksZD0oZSgxMzcpLGUoMTQyKSx7
Z2V0SG9zdFByb3BzOmZ1bmN0aW9uKGUsdCl7dmFyIG49bC5nZXRWYWx1ZSh0KSxyPWwuZ2V0Q2hl
Y2tlZCh0KTtyZXR1cm4gcyh7dHlwZTp2b2lkIDAsc3RlcDp2b2lkIDAsbWluOnZvaWQgMCxtYXg6
dm9pZCAwfSx0LHtkZWZhdWx0Q2hlY2tlZDp2b2lkIDAsZGVmYXVsdFZhbHVlOnZvaWQgMCx2YWx1
ZTpudWxsIT1uP246ZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSxjaGVja2VkOm51bGwhPXI/
cjplLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWQsb25DaGFuZ2U6ZS5fd3JhcHBlclN0YXRl
Lm9uQ2hhbmdlfSl9LG1vdW50V3JhcHBlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXQuZGVmYXVsdFZh
bHVlO2UuX3dyYXBwZXJTdGF0ZT17aW5pdGlhbENoZWNrZWQ6bnVsbCE9dC5jaGVja2VkP3QuY2hl
Y2tlZDp0LmRlZmF1bHRDaGVja2VkLGluaXRpYWxWYWx1ZTpudWxsIT10LnZhbHVlP3QudmFsdWU6
bixsaXN0ZW5lcnM6bnVsbCxvbkNoYW5nZTppLmJpbmQoZSksY29udHJvbGxlZDpvKHQpfX0sdXBk
YXRlV3JhcHBlcjpmdW5jdGlvbihlKXt2YXIgdD1lLl9jdXJyZW50RWxlbWVudC5wcm9wcyxuPXQu
Y2hlY2tlZDtudWxsIT1uJiZ1LnNldFZhbHVlRm9yUHJvcGVydHkoYy5nZXROb2RlRnJvbUluc3Rh
bmNlKGUpLCJjaGVja2VkIixufHwhMSk7dmFyIHI9Yy5nZXROb2RlRnJvbUluc3RhbmNlKGUpLG89
bC5nZXRWYWx1ZSh0KTtpZihudWxsIT1vKWlmKDA9PT1vJiYiIj09PXIudmFsdWUpci52YWx1ZT0i
MCI7ZWxzZSBpZigibnVtYmVyIj09PXQudHlwZSl7dmFyIGk9cGFyc2VGbG9hdChyLnZhbHVlLDEw
KXx8MDtvIT1pJiYoci52YWx1ZT0iIitvKX1lbHNlIG8hPXIudmFsdWUmJihyLnZhbHVlPSIiK28p
O2Vsc2UgbnVsbD09dC52YWx1ZSYmbnVsbCE9dC5kZWZhdWx0VmFsdWUmJnIuZGVmYXVsdFZhbHVl
IT09IiIrdC5kZWZhdWx0VmFsdWUmJihyLmRlZmF1bHRWYWx1ZT0iIit0LmRlZmF1bHRWYWx1ZSks
bnVsbD09dC5jaGVja2VkJiZudWxsIT10LmRlZmF1bHRDaGVja2VkJiYoci5kZWZhdWx0Q2hlY2tl
ZD0hIXQuZGVmYXVsdENoZWNrZWQpfSxwb3N0TW91bnRXcmFwcGVyOmZ1bmN0aW9uKGUpe3ZhciB0
PWUuX2N1cnJlbnRFbGVtZW50LnByb3BzLG49Yy5nZXROb2RlRnJvbUluc3RhbmNlKGUpO3N3aXRj
aCh0LnR5cGUpe2Nhc2Uic3VibWl0IjpjYXNlInJlc2V0IjpicmVhaztjYXNlImNvbG9yIjpjYXNl
ImRhdGUiOmNhc2UiZGF0ZXRpbWUiOmNhc2UiZGF0ZXRpbWUtbG9jYWwiOmNhc2UibW9udGgiOmNh
c2UidGltZSI6Y2FzZSJ3ZWVrIjpuLnZhbHVlPSIiLG4udmFsdWU9bi5kZWZhdWx0VmFsdWU7YnJl
YWs7ZGVmYXVsdDpuLnZhbHVlPW4udmFsdWV9dmFyIHI9bi5uYW1lOyIiIT09ciYmKG4ubmFtZT0i
Iiksbi5kZWZhdWx0Q2hlY2tlZD0hbi5kZWZhdWx0Q2hlY2tlZCxuLmRlZmF1bHRDaGVja2VkPSFu
LmRlZmF1bHRDaGVja2VkLCIiIT09ciYmKG4ubmFtZT1yKX19KTt0LmV4cG9ydHM9ZH0sezExMjox
MTIsMTI6MTIsMTM3OjEzNywxNDI6MTQyLDE0MzoxNDMsMjM6MjMsMzM6MzMsNzE6NzF9XSwzOTpb
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PSIiO3JldHVy
biBpLkNoaWxkcmVuLmZvckVhY2goZSxmdW5jdGlvbihlKXtudWxsIT1lJiYoInN0cmluZyI9PXR5
cGVvZiBlfHwibnVtYmVyIj09dHlwZW9mIGU/dCs9ZTp1fHwodT0hMCkpfSksdH12YXIgbz1lKDE0
MyksaT1lKDEyMCksYT1lKDMzKSxzPWUoNDApLHU9KGUoMTQyKSwhMSksbD17bW91bnRXcmFwcGVy
OmZ1bmN0aW9uKGUsdCxuKXt2YXIgbz1udWxsO2lmKG51bGwhPW4pe3ZhciBpPW47Im9wdGdyb3Vw
Ij09PWkuX3RhZyYmKGk9aS5faG9zdFBhcmVudCksbnVsbCE9aSYmInNlbGVjdCI9PT1pLl90YWcm
JihvPXMuZ2V0U2VsZWN0VmFsdWVDb250ZXh0KGkpKX12YXIgYT1udWxsO2lmKG51bGwhPW8pe3Zh
ciB1O2lmKHU9bnVsbCE9dC52YWx1ZT90LnZhbHVlKyIiOnIodC5jaGlsZHJlbiksYT0hMSxBcnJh
eS5pc0FycmF5KG8pKXtmb3IodmFyIGw9MDtsPG8ubGVuZ3RoO2wrKylpZigiIitvW2xdPT09dSl7
YT0hMDticmVha319ZWxzZSBhPSIiK289PT11fWUuX3dyYXBwZXJTdGF0ZT17c2VsZWN0ZWQ6YX19
LHBvc3RNb3VudFdyYXBwZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fY3VycmVudEVsZW1lbnQucHJv
cHM7bnVsbCE9dC52YWx1ZSYmYS5nZXROb2RlRnJvbUluc3RhbmNlKGUpLnNldEF0dHJpYnV0ZSgi
dmFsdWUiLHQudmFsdWUpfSxnZXRIb3N0UHJvcHM6ZnVuY3Rpb24oZSx0KXt2YXIgbj1vKHtzZWxl
Y3RlZDp2b2lkIDAsY2hpbGRyZW46dm9pZCAwfSx0KTtudWxsIT1lLl93cmFwcGVyU3RhdGUuc2Vs
ZWN0ZWQmJihuLnNlbGVjdGVkPWUuX3dyYXBwZXJTdGF0ZS5zZWxlY3RlZCk7dmFyIGk9cih0LmNo
aWxkcmVuKTtyZXR1cm4gaSYmKG4uY2hpbGRyZW49aSksbn19O3QuZXhwb3J0cz1sfSx7MTIwOjEy
MCwxNDI6MTQyLDE0MzoxNDMsMzM6MzMsNDA6NDB9XSw0MDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ug
c3RyaWN0IjtmdW5jdGlvbiByKCl7aWYodGhpcy5fcm9vdE5vZGVJRCYmdGhpcy5fd3JhcHBlclN0
YXRlLnBlbmRpbmdVcGRhdGUpe3RoaXMuX3dyYXBwZXJTdGF0ZS5wZW5kaW5nVXBkYXRlPSExO3Zh
ciBlPXRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzLHQ9cy5nZXRWYWx1ZShlKTtudWxsIT10JiZv
KHRoaXMsQm9vbGVhbihlLm11bHRpcGxlKSx0KX19ZnVuY3Rpb24gbyhlLHQsbil7dmFyIHIsbyxp
PXUuZ2V0Tm9kZUZyb21JbnN0YW5jZShlKS5vcHRpb25zO2lmKHQpe2ZvcihyPXt9LG89MDtvPG4u
bGVuZ3RoO28rKylyWyIiK25bb11dPSEwO2ZvcihvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBhPXIu
aGFzT3duUHJvcGVydHkoaVtvXS52YWx1ZSk7aVtvXS5zZWxlY3RlZCE9PWEmJihpW29dLnNlbGVj
dGVkPWEpfX1lbHNle2ZvcihyPSIiK24sbz0wO288aS5sZW5ndGg7bysrKWlmKGlbb10udmFsdWU9
PT1yKXJldHVybiB2b2lkKGlbb10uc2VsZWN0ZWQ9ITApO2kubGVuZ3RoJiYoaVswXS5zZWxlY3Rl
ZD0hMCl9fWZ1bmN0aW9uIGkoZSl7dmFyIHQ9dGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHMsbj1z
LmV4ZWN1dGVPbkNoYW5nZSh0LGUpO3JldHVybiB0aGlzLl9yb290Tm9kZUlEJiYodGhpcy5fd3Jh
cHBlclN0YXRlLnBlbmRpbmdVcGRhdGU9ITApLGwuYXNhcChyLHRoaXMpLG59dmFyIGE9ZSgxNDMp
LHM9ZSgyMyksdT1lKDMzKSxsPWUoNzEpLGM9KGUoMTQyKSwhMSkscD17Z2V0SG9zdFByb3BzOmZ1
bmN0aW9uKGUsdCl7cmV0dXJuIGEoe30sdCx7b25DaGFuZ2U6ZS5fd3JhcHBlclN0YXRlLm9uQ2hh
bmdlLHZhbHVlOnZvaWQgMH0pfSxtb3VudFdyYXBwZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj1zLmdl
dFZhbHVlKHQpO2UuX3dyYXBwZXJTdGF0ZT17cGVuZGluZ1VwZGF0ZTohMSxpbml0aWFsVmFsdWU6
bnVsbCE9bj9uOnQuZGVmYXVsdFZhbHVlLGxpc3RlbmVyczpudWxsLG9uQ2hhbmdlOmkuYmluZChl
KSx3YXNNdWx0aXBsZTpCb29sZWFuKHQubXVsdGlwbGUpfSx2b2lkIDA9PT10LnZhbHVlfHx2b2lk
IDA9PT10LmRlZmF1bHRWYWx1ZXx8Y3x8KGM9ITApfSxnZXRTZWxlY3RWYWx1ZUNvbnRleHQ6ZnVu
Y3Rpb24oZSl7cmV0dXJuIGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWV9LHBvc3RVcGRhdGVX
cmFwcGVyOmZ1bmN0aW9uKGUpe3ZhciB0PWUuX2N1cnJlbnRFbGVtZW50LnByb3BzO2UuX3dyYXBw
ZXJTdGF0ZS5pbml0aWFsVmFsdWU9dm9pZCAwO3ZhciBuPWUuX3dyYXBwZXJTdGF0ZS53YXNNdWx0
aXBsZTtlLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU9Qm9vbGVhbih0Lm11bHRpcGxlKTt2YXIg
cj1zLmdldFZhbHVlKHQpO251bGwhPXI/KGUuX3dyYXBwZXJTdGF0ZS5wZW5kaW5nVXBkYXRlPSEx
LG8oZSxCb29sZWFuKHQubXVsdGlwbGUpLHIpKTpuIT09Qm9vbGVhbih0Lm11bHRpcGxlKSYmKG51
bGwhPXQuZGVmYXVsdFZhbHVlP28oZSxCb29sZWFuKHQubXVsdGlwbGUpLHQuZGVmYXVsdFZhbHVl
KTpvKGUsQm9vbGVhbih0Lm11bHRpcGxlKSx0Lm11bHRpcGxlP1tdOiIiKSl9fTt0LmV4cG9ydHM9
cH0sezE0MjoxNDIsMTQzOjE0MywyMzoyMywzMzozMyw3MTo3MX1dLDQxOltmdW5jdGlvbihlLHQs
bil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7cmV0dXJuIGU9PT1uJiZ0PT09cn1m
dW5jdGlvbiBvKGUpe3ZhciB0PWRvY3VtZW50LnNlbGVjdGlvbixuPXQuY3JlYXRlUmFuZ2UoKSxy
PW4udGV4dC5sZW5ndGgsbz1uLmR1cGxpY2F0ZSgpO28ubW92ZVRvRWxlbWVudFRleHQoZSksby5z
ZXRFbmRQb2ludCgiRW5kVG9TdGFydCIsbik7dmFyIGk9by50ZXh0Lmxlbmd0aDtyZXR1cm57c3Rh
cnQ6aSxlbmQ6aStyfX1mdW5jdGlvbiBpKGUpe3ZhciB0PXdpbmRvdy5nZXRTZWxlY3Rpb24mJndp
bmRvdy5nZXRTZWxlY3Rpb24oKTtpZighdHx8MD09PXQucmFuZ2VDb3VudClyZXR1cm4gbnVsbDt2
YXIgbj10LmFuY2hvck5vZGUsbz10LmFuY2hvck9mZnNldCxpPXQuZm9jdXNOb2RlLGE9dC5mb2N1
c09mZnNldCxzPXQuZ2V0UmFuZ2VBdCgwKTt0cnl7cy5zdGFydENvbnRhaW5lci5ub2RlVHlwZSxz
LmVuZENvbnRhaW5lci5ub2RlVHlwZX1jYXRjaChlKXtyZXR1cm4gbnVsbH12YXIgdT1yKHQuYW5j
aG9yTm9kZSx0LmFuY2hvck9mZnNldCx0LmZvY3VzTm9kZSx0LmZvY3VzT2Zmc2V0KSxsPXU/MDpz
LnRvU3RyaW5nKCkubGVuZ3RoLGM9cy5jbG9uZVJhbmdlKCk7Yy5zZWxlY3ROb2RlQ29udGVudHMo
ZSksYy5zZXRFbmQocy5zdGFydENvbnRhaW5lcixzLnN0YXJ0T2Zmc2V0KTt2YXIgcD1yKGMuc3Rh
cnRDb250YWluZXIsYy5zdGFydE9mZnNldCxjLmVuZENvbnRhaW5lcixjLmVuZE9mZnNldCksZD1w
PzA6Yy50b1N0cmluZygpLmxlbmd0aCxmPWQrbCxoPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7aC5z
ZXRTdGFydChuLG8pLGguc2V0RW5kKGksYSk7dmFyIG09aC5jb2xsYXBzZWQ7cmV0dXJue3N0YXJ0
Om0/ZjpkLGVuZDptP2Q6Zn19ZnVuY3Rpb24gYShlLHQpe3ZhciBuLHIsbz1kb2N1bWVudC5zZWxl
Y3Rpb24uY3JlYXRlUmFuZ2UoKS5kdXBsaWNhdGUoKTt2b2lkIDA9PT10LmVuZD8obj10LnN0YXJ0
LHI9bik6dC5zdGFydD50LmVuZD8obj10LmVuZCxyPXQuc3RhcnQpOihuPXQuc3RhcnQscj10LmVu
ZCksby5tb3ZlVG9FbGVtZW50VGV4dChlKSxvLm1vdmVTdGFydCgiY2hhcmFjdGVyIixuKSxvLnNl
dEVuZFBvaW50KCJFbmRUb1N0YXJ0IixvKSxvLm1vdmVFbmQoImNoYXJhY3RlciIsci1uKSxvLnNl
bGVjdCgpfWZ1bmN0aW9uIHMoZSx0KXtpZih3aW5kb3cuZ2V0U2VsZWN0aW9uKXt2YXIgbj13aW5k
b3cuZ2V0U2VsZWN0aW9uKCkscj1lW2MoKV0ubGVuZ3RoLG89TWF0aC5taW4odC5zdGFydCxyKSxp
PXZvaWQgMD09PXQuZW5kP286TWF0aC5taW4odC5lbmQscik7aWYoIW4uZXh0ZW5kJiZvPmkpe3Zh
ciBhPWk7aT1vLG89YX12YXIgcz1sKGUsbyksdT1sKGUsaSk7aWYocyYmdSl7dmFyIHA9ZG9jdW1l
bnQuY3JlYXRlUmFuZ2UoKTtwLnNldFN0YXJ0KHMubm9kZSxzLm9mZnNldCksbi5yZW1vdmVBbGxS
YW5nZXMoKSxvPmk/KG4uYWRkUmFuZ2UocCksbi5leHRlbmQodS5ub2RlLHUub2Zmc2V0KSk6KHAu
c2V0RW5kKHUubm9kZSx1Lm9mZnNldCksbi5hZGRSYW5nZShwKSl9fX12YXIgdT1lKDEyMyksbD1l
KDEwNSksYz1lKDEwNikscD11LmNhblVzZURPTSYmInNlbGVjdGlvbiJpbiBkb2N1bWVudCYmISgi
Z2V0U2VsZWN0aW9uImluIHdpbmRvdyksZD17Z2V0T2Zmc2V0czpwP286aSxzZXRPZmZzZXRzOnA/
YTpzfTt0LmV4cG9ydHM9ZH0sezEwNToxMDUsMTA2OjEwNiwxMjM6MTIzfV0sNDI6W2Z1bmN0aW9u
KGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgxMTIpLG89ZSgxNDMpLGk9ZSg4KSxhPWUoOSks
cz1lKDMzKSx1PWUoOTUpLGw9KGUoMTM3KSxlKDExOCksZnVuY3Rpb24oZSl7dGhpcy5fY3VycmVu
dEVsZW1lbnQ9ZSx0aGlzLl9zdHJpbmdUZXh0PSIiK2UsCit0aGlzLl9ob3N0Tm9kZT1udWxsLHRo
aXMuX2hvc3RQYXJlbnQ9bnVsbCx0aGlzLl9kb21JRD0wLHRoaXMuX21vdW50SW5kZXg9MCx0aGlz
Ll9jbG9zaW5nQ29tbWVudD1udWxsLHRoaXMuX2NvbW1lbnROb2Rlcz1udWxsfSk7byhsLnByb3Rv
dHlwZSx7bW91bnRDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89bi5faWRDb3VudGVy
KyssaT0iIHJlYWN0LXRleHQ6ICIrbysiICI7aWYodGhpcy5fZG9tSUQ9byx0aGlzLl9ob3N0UGFy
ZW50PXQsZS51c2VDcmVhdGVFbGVtZW50KXt2YXIgbD1uLl9vd25lckRvY3VtZW50LGM9bC5jcmVh
dGVDb21tZW50KGkpLHA9bC5jcmVhdGVDb21tZW50KCIgL3JlYWN0LXRleHQgIiksZD1hKGwuY3Jl
YXRlRG9jdW1lbnRGcmFnbWVudCgpKTtyZXR1cm4gYS5xdWV1ZUNoaWxkKGQsYShjKSksdGhpcy5f
c3RyaW5nVGV4dCYmYS5xdWV1ZUNoaWxkKGQsYShsLmNyZWF0ZVRleHROb2RlKHRoaXMuX3N0cmlu
Z1RleHQpKSksYS5xdWV1ZUNoaWxkKGQsYShwKSkscy5wcmVjYWNoZU5vZGUodGhpcyxjKSx0aGlz
Ll9jbG9zaW5nQ29tbWVudD1wLGR9dmFyIGY9dSh0aGlzLl9zdHJpbmdUZXh0KTtyZXR1cm4gZS5y
ZW5kZXJUb1N0YXRpY01hcmt1cD9mOiI8IS0tIitpKyItLT4iK2YrIjwhLS0gL3JlYWN0LXRleHQg
LS0+In0scmVjZWl2ZUNvbXBvbmVudDpmdW5jdGlvbihlLHQpe2lmKGUhPT10aGlzLl9jdXJyZW50
RWxlbWVudCl7dGhpcy5fY3VycmVudEVsZW1lbnQ9ZTt2YXIgbj0iIitlO2lmKG4hPT10aGlzLl9z
dHJpbmdUZXh0KXt0aGlzLl9zdHJpbmdUZXh0PW47dmFyIHI9dGhpcy5nZXRIb3N0Tm9kZSgpO2ku
cmVwbGFjZURlbGltaXRlZFRleHQoclswXSxyWzFdLG4pfX19LGdldEhvc3ROb2RlOmZ1bmN0aW9u
KCl7dmFyIGU9dGhpcy5fY29tbWVudE5vZGVzO2lmKGUpcmV0dXJuIGU7aWYoIXRoaXMuX2Nsb3Np
bmdDb21tZW50KWZvcih2YXIgdD1zLmdldE5vZGVGcm9tSW5zdGFuY2UodGhpcyksbj10Lm5leHRT
aWJsaW5nOzspe2lmKG51bGw9PW4mJnIoIjY3Iix0aGlzLl9kb21JRCksOD09PW4ubm9kZVR5cGUm
JiIgL3JlYWN0LXRleHQgIj09PW4ubm9kZVZhbHVlKXt0aGlzLl9jbG9zaW5nQ29tbWVudD1uO2Jy
ZWFrfW49bi5uZXh0U2libGluZ31yZXR1cm4gZT1bdGhpcy5faG9zdE5vZGUsdGhpcy5fY2xvc2lu
Z0NvbW1lbnRdLHRoaXMuX2NvbW1lbnROb2Rlcz1lLGV9LHVubW91bnRDb21wb25lbnQ6ZnVuY3Rp
b24oKXt0aGlzLl9jbG9zaW5nQ29tbWVudD1udWxsLHRoaXMuX2NvbW1lbnROb2Rlcz1udWxsLHMu
dW5jYWNoZU5vZGUodGhpcyl9fSksdC5leHBvcnRzPWx9LHsxMTI6MTEyLDExODoxMTgsMTM3OjEz
NywxNDM6MTQzLDMzOjMzLDg6OCw5OjksOTU6OTV9XSw0MzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ug
c3RyaWN0IjtmdW5jdGlvbiByKCl7dGhpcy5fcm9vdE5vZGVJRCYmYy51cGRhdGVXcmFwcGVyKHRo
aXMpfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9dGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHMsbj1zLmV4
ZWN1dGVPbkNoYW5nZSh0LGUpO3JldHVybiBsLmFzYXAocix0aGlzKSxufXZhciBpPWUoMTEyKSxh
PWUoMTQzKSxzPWUoMjMpLHU9ZSgzMyksbD1lKDcxKSxjPShlKDEzNyksZSgxNDIpLHtnZXRIb3N0
UHJvcHM6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbCE9dC5kYW5nZXJvdXNseVNldElubmVySFRN
TCYmaSgiOTEiKSxhKHt9LHQse3ZhbHVlOnZvaWQgMCxkZWZhdWx0VmFsdWU6dm9pZCAwLGNoaWxk
cmVuOiIiK2UuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUsb25DaGFuZ2U6ZS5fd3JhcHBlclN0
YXRlLm9uQ2hhbmdlfSl9LG1vdW50V3JhcHBlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXMuZ2V0VmFs
dWUodCkscj1uO2lmKG51bGw9PW4pe3ZhciBhPXQuZGVmYXVsdFZhbHVlLHU9dC5jaGlsZHJlbjtu
dWxsIT11JiYobnVsbCE9YSYmaSgiOTIiKSxBcnJheS5pc0FycmF5KHUpJiYodS5sZW5ndGg8PTF8
fGkoIjkzIiksdT11WzBdKSxhPSIiK3UpLG51bGw9PWEmJihhPSIiKSxyPWF9ZS5fd3JhcHBlclN0
YXRlPXtpbml0aWFsVmFsdWU6IiIrcixsaXN0ZW5lcnM6bnVsbCxvbkNoYW5nZTpvLmJpbmQoZSl9
fSx1cGRhdGVXcmFwcGVyOmZ1bmN0aW9uKGUpe3ZhciB0PWUuX2N1cnJlbnRFbGVtZW50LnByb3Bz
LG49dS5nZXROb2RlRnJvbUluc3RhbmNlKGUpLHI9cy5nZXRWYWx1ZSh0KTtpZihudWxsIT1yKXt2
YXIgbz0iIityO28hPT1uLnZhbHVlJiYobi52YWx1ZT1vKSxudWxsPT10LmRlZmF1bHRWYWx1ZSYm
KG4uZGVmYXVsdFZhbHVlPW8pfW51bGwhPXQuZGVmYXVsdFZhbHVlJiYobi5kZWZhdWx0VmFsdWU9
dC5kZWZhdWx0VmFsdWUpfSxwb3N0TW91bnRXcmFwcGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXUuZ2V0
Tm9kZUZyb21JbnN0YW5jZShlKSxuPXQudGV4dENvbnRlbnQ7bj09PWUuX3dyYXBwZXJTdGF0ZS5p
bml0aWFsVmFsdWUmJih0LnZhbHVlPW4pfX0pO3QuZXhwb3J0cz1jfSx7MTEyOjExMiwxMzc6MTM3
LDE0MjoxNDIsMTQzOjE0MywyMzoyMywzMzozMyw3MTo3MX1dLDQ0OltmdW5jdGlvbihlLHQsbil7
InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXsiX2hvc3ROb2RlImluIGV8fHUoIjMzIiksIl9o
b3N0Tm9kZSJpbiB0fHx1KCIzMyIpO2Zvcih2YXIgbj0wLHI9ZTtyO3I9ci5faG9zdFBhcmVudClu
Kys7Zm9yKHZhciBvPTAsaT10O2k7aT1pLl9ob3N0UGFyZW50KW8rKztmb3IoO24tbz4wOyllPWUu
X2hvc3RQYXJlbnQsbi0tO2Zvcig7by1uPjA7KXQ9dC5faG9zdFBhcmVudCxvLS07Zm9yKHZhciBh
PW47YS0tOyl7aWYoZT09PXQpcmV0dXJuIGU7ZT1lLl9ob3N0UGFyZW50LHQ9dC5faG9zdFBhcmVu
dH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBvKGUsdCl7Il9ob3N0Tm9kZSJpbiBlfHx1KCIzNSIpLCJf
aG9zdE5vZGUiaW4gdHx8dSgiMzUiKTtmb3IoO3Q7KXtpZih0PT09ZSlyZXR1cm4hMDt0PXQuX2hv
c3RQYXJlbnR9cmV0dXJuITF9ZnVuY3Rpb24gaShlKXtyZXR1cm4iX2hvc3ROb2RlImluIGV8fHUo
IjM2IiksZS5faG9zdFBhcmVudH1mdW5jdGlvbiBhKGUsdCxuKXtmb3IodmFyIHI9W107ZTspci5w
dXNoKGUpLGU9ZS5faG9zdFBhcmVudDt2YXIgbztmb3Iobz1yLmxlbmd0aDtvLS0gPjA7KXQocltv
XSwiY2FwdHVyZWQiLG4pO2ZvcihvPTA7bzxyLmxlbmd0aDtvKyspdChyW29dLCJidWJibGVkIixu
KX1mdW5jdGlvbiBzKGUsdCxuLG8saSl7Zm9yKHZhciBhPWUmJnQ/cihlLHQpOm51bGwscz1bXTtl
JiZlIT09YTspcy5wdXNoKGUpLGU9ZS5faG9zdFBhcmVudDtmb3IodmFyIHU9W107dCYmdCE9PWE7
KXUucHVzaCh0KSx0PXQuX2hvc3RQYXJlbnQ7dmFyIGw7Zm9yKGw9MDtsPHMubGVuZ3RoO2wrKylu
KHNbbF0sImJ1YmJsZWQiLG8pO2ZvcihsPXUubGVuZ3RoO2wtLSA+MDspbih1W2xdLCJjYXB0dXJl
ZCIsaSl9dmFyIHU9ZSgxMTIpO2UoMTM3KTt0LmV4cG9ydHM9e2lzQW5jZXN0b3I6byxnZXRMb3dl
c3RDb21tb25BbmNlc3RvcjpyLGdldFBhcmVudEluc3RhbmNlOmksdHJhdmVyc2VUd29QaGFzZTph
LHRyYXZlcnNlRW50ZXJMZWF2ZTpzfX0sezExMjoxMTIsMTM3OjEzN31dLDQ1OltmdW5jdGlvbihl
LHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTIwKSxvPWUoMzApLGk9bztyLmFkZG9ucyYmKHIu
X19TRUNSRVRfSU5KRUNURURfUkVBQ1RfRE9NX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklS
RUQ9aSksdC5leHBvcnRzPWl9LHsxMjA6MTIwLDMwOjMwfV0sNDY6W2Z1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3RoaXMucmVpbml0aWFsaXplVHJhbnNhY3Rpb24oKX12
YXIgbz1lKDE0MyksaT1lKDcxKSxhPWUoODkpLHM9ZSgxMjkpLHU9e2luaXRpYWxpemU6cyxjbG9z
ZTpmdW5jdGlvbigpe2QuaXNCYXRjaGluZ1VwZGF0ZXM9ITF9fSxsPXtpbml0aWFsaXplOnMsY2xv
c2U6aS5mbHVzaEJhdGNoZWRVcGRhdGVzLmJpbmQoaSl9LGM9W2wsdV07byhyLnByb3RvdHlwZSxh
LHtnZXRUcmFuc2FjdGlvbldyYXBwZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIGN9fSk7dmFyIHA9bmV3
IHIsZD17aXNCYXRjaGluZ1VwZGF0ZXM6ITEsYmF0Y2hlZFVwZGF0ZXM6ZnVuY3Rpb24oZSx0LG4s
cixvLGkpe3ZhciBhPWQuaXNCYXRjaGluZ1VwZGF0ZXM7cmV0dXJuIGQuaXNCYXRjaGluZ1VwZGF0
ZXM9ITAsYT9lKHQsbixyLG8saSk6cC5wZXJmb3JtKGUsbnVsbCx0LG4scixvLGkpfX07dC5leHBv
cnRzPWR9LHsxMjk6MTI5LDE0MzoxNDMsNzE6NzEsODk6ODl9XSw0NzpbZnVuY3Rpb24oZSx0LG4p
eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7eHx8KHg9ITAseS5FdmVudEVtaXR0ZXIuaW5qZWN0
UmVhY3RFdmVudExpc3RlbmVyKGcpLHkuRXZlbnRQbHVnaW5IdWIuaW5qZWN0RXZlbnRQbHVnaW5P
cmRlcihzKSx5LkV2ZW50UGx1Z2luVXRpbHMuaW5qZWN0Q29tcG9uZW50VHJlZShkKSx5LkV2ZW50
UGx1Z2luVXRpbHMuaW5qZWN0VHJlZVRyYXZlcnNhbChoKSx5LkV2ZW50UGx1Z2luSHViLmluamVj
dEV2ZW50UGx1Z2luc0J5TmFtZSh7U2ltcGxlRXZlbnRQbHVnaW46RSxFbnRlckxlYXZlRXZlbnRQ
bHVnaW46dSxDaGFuZ2VFdmVudFBsdWdpbjphLFNlbGVjdEV2ZW50UGx1Z2luOmIsQmVmb3JlSW5w
dXRFdmVudFBsdWdpbjppfSkseS5Ib3N0Q29tcG9uZW50LmluamVjdEdlbmVyaWNDb21wb25lbnRD
bGFzcyhwKSx5Lkhvc3RDb21wb25lbnQuaW5qZWN0VGV4dENvbXBvbmVudENsYXNzKG0pLHkuRE9N
UHJvcGVydHkuaW5qZWN0RE9NUHJvcGVydHlDb25maWcobykseS5ET01Qcm9wZXJ0eS5pbmplY3RE
T01Qcm9wZXJ0eUNvbmZpZyhsKSx5LkRPTVByb3BlcnR5LmluamVjdERPTVByb3BlcnR5Q29uZmln
KEMpLHkuRW1wdHlDb21wb25lbnQuaW5qZWN0RW1wdHlDb21wb25lbnRGYWN0b3J5KGZ1bmN0aW9u
KGUpe3JldHVybiBuZXcgZihlKX0pLHkuVXBkYXRlcy5pbmplY3RSZWNvbmNpbGVUcmFuc2FjdGlv
bihfKSx5LlVwZGF0ZXMuaW5qZWN0QmF0Y2hpbmdTdHJhdGVneSh2KSx5LkNvbXBvbmVudC5pbmpl
Y3RFbnZpcm9ubWVudChjKSl9dmFyIG89ZSgxKSxpPWUoMyksYT1lKDcpLHM9ZSgxNCksdT1lKDE1
KSxsPWUoMjEpLGM9ZSgyNykscD1lKDMxKSxkPWUoMzMpLGY9ZSgzNSksaD1lKDQ0KSxtPWUoNDIp
LHY9ZSg0NiksZz1lKDUyKSx5PWUoNTUpLF89ZSg2NSksQz1lKDczKSxiPWUoNzQpLEU9ZSg3NSks
eD0hMTt0LmV4cG9ydHM9e2luamVjdDpyfX0sezE6MSwxNDoxNCwxNToxNSwyMToyMSwyNzoyNywz
OjMsMzE6MzEsMzM6MzMsMzU6MzUsNDI6NDIsNDQ6NDQsNDY6NDYsNTI6NTIsNTU6NTUsNjU6NjUs
Nzo3LDczOjczLDc0Ojc0LDc1Ojc1fV0sNDg6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7
dmFyIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigi
cmVhY3QuZWxlbWVudCIpfHw2MDEwMzt0LmV4cG9ydHM9cn0se31dLDQ5OltmdW5jdGlvbihlLHQs
bil7InVzZSBzdHJpY3QiO3ZhciByLG89e2luamVjdEVtcHR5Q29tcG9uZW50RmFjdG9yeTpmdW5j
dGlvbihlKXtyPWV9fSxpPXtjcmVhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSl9fTtpLmluamVj
dGlvbj1vLHQuZXhwb3J0cz1pfSx7fV0sNTA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7
ZnVuY3Rpb24gcihlLHQsbil7dHJ5e3Qobil9Y2F0Y2goZSl7bnVsbD09PW8mJihvPWUpfX12YXIg
bz1udWxsLGk9e2ludm9rZUd1YXJkZWRDYWxsYmFjazpyLGludm9rZUd1YXJkZWRDYWxsYmFja1dp
dGhDYXRjaDpyLHJldGhyb3dDYXVnaHRFcnJvcjpmdW5jdGlvbigpe2lmKG8pe3ZhciBlPW87dGhy
b3cgbz1udWxsLGV9fX07dC5leHBvcnRzPWl9LHt9XSw1MTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ug
c3RyaWN0IjtmdW5jdGlvbiByKGUpe28uZW5xdWV1ZUV2ZW50cyhlKSxvLnByb2Nlc3NFdmVudFF1
ZXVlKCExKX12YXIgbz1lKDE2KSxpPXtoYW5kbGVUb3BMZXZlbDpmdW5jdGlvbihlLHQsbixpKXty
KG8uZXh0cmFjdEV2ZW50cyhlLHQsbixpKSl9fTt0LmV4cG9ydHM9aX0sezE2OjE2fV0sNTI6W2Z1
bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtmb3IoO2UuX2hvc3RQYXJl
bnQ7KWU9ZS5faG9zdFBhcmVudDt2YXIgdD1wLmdldE5vZGVGcm9tSW5zdGFuY2UoZSksbj10LnBh
cmVudE5vZGU7cmV0dXJuIHAuZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUobil9ZnVuY3Rpb24g
byhlLHQpe3RoaXMudG9wTGV2ZWxUeXBlPWUsdGhpcy5uYXRpdmVFdmVudD10LHRoaXMuYW5jZXN0
b3JzPVtdfWZ1bmN0aW9uIGkoZSl7dmFyIHQ9ZihlLm5hdGl2ZUV2ZW50KSxuPXAuZ2V0Q2xvc2Vz
dEluc3RhbmNlRnJvbU5vZGUodCksbz1uO2Rve2UuYW5jZXN0b3JzLnB1c2gobyksbz1vJiZyKG8p
fXdoaWxlKG8pO2Zvcih2YXIgaT0wO2k8ZS5hbmNlc3RvcnMubGVuZ3RoO2krKyluPWUuYW5jZXN0
b3JzW2ldLG0uX2hhbmRsZVRvcExldmVsKGUudG9wTGV2ZWxUeXBlLG4sZS5uYXRpdmVFdmVudCxm
KGUubmF0aXZlRXZlbnQpKX1mdW5jdGlvbiBhKGUpe2UoaCh3aW5kb3cpKX12YXIgcz1lKDE0Myks
dT1lKDEyMiksbD1lKDEyMyksYz1lKDI0KSxwPWUoMzMpLGQ9ZSg3MSksZj1lKDEwMiksaD1lKDEz
NCk7cyhvLnByb3RvdHlwZSx7ZGVzdHJ1Y3RvcjpmdW5jdGlvbigpe3RoaXMudG9wTGV2ZWxUeXBl
PW51bGwsdGhpcy5uYXRpdmVFdmVudD1udWxsLHRoaXMuYW5jZXN0b3JzLmxlbmd0aD0wfX0pLGMu
YWRkUG9vbGluZ1RvKG8sYy50d29Bcmd1bWVudFBvb2xlcik7dmFyIG09e19lbmFibGVkOiEwLF9o
YW5kbGVUb3BMZXZlbDpudWxsLFdJTkRPV19IQU5ETEU6bC5jYW5Vc2VET00/d2luZG93Om51bGws
c2V0SGFuZGxlVG9wTGV2ZWw6ZnVuY3Rpb24oZSl7bS5faGFuZGxlVG9wTGV2ZWw9ZX0sc2V0RW5h
YmxlZDpmdW5jdGlvbihlKXttLl9lbmFibGVkPSEhZX0saXNFbmFibGVkOmZ1bmN0aW9uKCl7cmV0
dXJuIG0uX2VuYWJsZWR9LHRyYXBCdWJibGVkRXZlbnQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBu
P3UubGlzdGVuKG4sdCxtLmRpc3BhdGNoRXZlbnQuYmluZChudWxsLGUpKTpudWxsfSx0cmFwQ2Fw
dHVyZWRFdmVudDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIG4/dS5jYXB0dXJlKG4sdCxtLmRpc3Bh
dGNoRXZlbnQuYmluZChudWxsLGUpKTpudWxsfSxtb25pdG9yU2Nyb2xsVmFsdWU6ZnVuY3Rpb24o
ZSl7dmFyIHQ9YS5iaW5kKG51bGwsZSk7dS5saXN0ZW4od2luZG93LCJzY3JvbGwiLHQpfSxkaXNw
YXRjaEV2ZW50OmZ1bmN0aW9uKGUsdCl7aWYobS5fZW5hYmxlZCl7dmFyIG49by5nZXRQb29sZWQo
ZSx0KTt0cnl7ZC5iYXRjaGVkVXBkYXRlcyhpLG4pfWZpbmFsbHl7by5yZWxlYXNlKG4pfX19fTt0
LmV4cG9ydHM9bX0sezEwMjoxMDIsMTIyOjEyMiwxMjM6MTIzLDEzNDoxMzQsMTQzOjE0MywyNDoy
NCwzMzozMyw3MTo3MX1dLDUzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPXts
b2dUb3BMZXZlbFJlbmRlcnM6ITF9O3QuZXhwb3J0cz1yfSx7fV0sNTQ6W2Z1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gc3x8YSgiMTExIixlLnR5cGUpLG5l
dyBzKGUpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIG5ldyB1KGUpfWZ1bmN0aW9uIGkoZSl7cmV0dXJu
IGUgaW5zdGFuY2VvZiB1fXZhciBhPWUoMTEyKSxzPShlKDEzNyksbnVsbCksdT1udWxsLGw9e2lu
amVjdEdlbmVyaWNDb21wb25lbnRDbGFzczpmdW5jdGlvbihlKXtzPWV9LGluamVjdFRleHRDb21w
b25lbnRDbGFzczpmdW5jdGlvbihlKXt1PWV9fSxjPXtjcmVhdGVJbnRlcm5hbENvbXBvbmVudDpy
LGNyZWF0ZUluc3RhbmNlRm9yVGV4dDpvLGlzVGV4dENvbXBvbmVudDppLGluamVjdGlvbjpsfTt0
LmV4cG9ydHM9Y30sezExMjoxMTIsMTM3OjEzN31dLDU1OltmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO3ZhciByPWUoMTEpLG89ZSgxNiksaT1lKDE4KSxhPWUoMjgpLHM9ZSg0OSksdT1lKDI1
KSxsPWUoNTQpLGM9ZSg3MSkscD17Q29tcG9uZW50OmEuaW5qZWN0aW9uLERPTVByb3BlcnR5OnIu
aW5qZWN0aW9uLEVtcHR5Q29tcG9uZW50OnMuaW5qZWN0aW9uLEV2ZW50UGx1Z2luSHViOm8uaW5q
ZWN0aW9uLEV2ZW50UGx1Z2luVXRpbHM6aS5pbmplY3Rpb24sRXZlbnRFbWl0dGVyOnUuaW5qZWN0
aW9uLEhvc3RDb21wb25lbnQ6bC5pbmplY3Rpb24sVXBkYXRlczpjLmluamVjdGlvbn07dC5leHBv
cnRzPXB9LHsxMToxMSwxNjoxNiwxODoxOCwyNToyNSwyODoyOCw0OTo0OSw1NDo1NCw3MTo3MX1d
LDU2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGko
ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGUpfXZhciBvPWUoNDEpLGk9ZSgxMjYpLGE9ZSgxMzEp
LHM9ZSgxMzIpLHU9e2hhc1NlbGVjdGlvbkNhcGFiaWxpdGllczpmdW5jdGlvbihlKXt2YXIgdD1l
JiZlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHQmJigiaW5wdXQi
PT09dCYmInRleHQiPT09ZS50eXBlfHwidGV4dGFyZWEiPT09dHx8InRydWUiPT09ZS5jb250ZW50
RWRpdGFibGUpfSxnZXRTZWxlY3Rpb25JbmZvcm1hdGlvbjpmdW5jdGlvbigpe3ZhciBlPXMoKTty
ZXR1cm57Zm9jdXNlZEVsZW06ZSxzZWxlY3Rpb25SYW5nZTp1Lmhhc1NlbGVjdGlvbkNhcGFiaWxp
dGllcyhlKT91LmdldFNlbGVjdGlvbihlKTpudWxsfX0scmVzdG9yZVNlbGVjdGlvbjpmdW5jdGlv
bihlKXt2YXIgdD1zKCksbj1lLmZvY3VzZWRFbGVtLG89ZS5zZWxlY3Rpb25SYW5nZTt0IT09biYm
cihuKSYmKHUuaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKG4pJiZ1LnNldFNlbGVjdGlvbihuLG8p
LGEobikpfSxnZXRTZWxlY3Rpb246ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoInNlbGVjdGlvblN0YXJ0
ImluIGUpdD17c3RhcnQ6ZS5zZWxlY3Rpb25TdGFydCxlbmQ6ZS5zZWxlY3Rpb25FbmR9O2Vsc2Ug
aWYoZG9jdW1lbnQuc2VsZWN0aW9uJiZlLm5vZGVOYW1lJiYiaW5wdXQiPT09ZS5ub2RlTmFtZS50
b0xvd2VyQ2FzZSgpKXt2YXIgbj1kb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTtuLnBh
cmVudEVsZW1lbnQoKT09PWUmJih0PXtzdGFydDotbi5tb3ZlU3RhcnQoImNoYXJhY3RlciIsLWUu
dmFsdWUubGVuZ3RoKSxlbmQ6LW4ubW92ZUVuZCgiY2hhcmFjdGVyIiwtZS52YWx1ZS5sZW5ndGgp
fSl9ZWxzZSB0PW8uZ2V0T2Zmc2V0cyhlKTtyZXR1cm4gdHx8e3N0YXJ0OjAsZW5kOjB9fSxzZXRT
ZWxlY3Rpb246ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnN0YXJ0LHI9dC5lbmQ7aWYodm9pZCAwPT09
ciYmKHI9biksInNlbGVjdGlvblN0YXJ0ImluIGUpZS5zZWxlY3Rpb25TdGFydD1uLGUuc2VsZWN0
aW9uRW5kPU1hdGgubWluKHIsZS52YWx1ZS5sZW5ndGgpO2Vsc2UgaWYoZG9jdW1lbnQuc2VsZWN0
aW9uJiZlLm5vZGVOYW1lJiYiaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXt2YXIg
aT1lLmNyZWF0ZVRleHRSYW5nZSgpO2kuY29sbGFwc2UoITApLGkubW92ZVN0YXJ0KCJjaGFyYWN0
ZXIiLG4pLGkubW92ZUVuZCgiY2hhcmFjdGVyIixyLW4pLGkuc2VsZWN0KCl9ZWxzZSBvLnNldE9m
ZnNldHMoZSx0KX19O3QuZXhwb3J0cz11fSx7MTI2OjEyNiwxMzE6MTMxLDEzMjoxMzIsNDE6NDF9
XSw1NzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17cmVtb3ZlOmZ1bmN0aW9u
KGUpe2UuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZT12b2lkIDB9LGdldDpmdW5jdGlvbihlKXtyZXR1
cm4gZS5fcmVhY3RJbnRlcm5hbEluc3RhbmNlfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQg
MCE9PWUuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZX0sc2V0OmZ1bmN0aW9uKGUsdCl7ZS5fcmVhY3RJ
bnRlcm5hbEluc3RhbmNlPXR9fTt0LmV4cG9ydHM9cn0se31dLDU4OltmdW5jdGlvbihlLHQsbil7
InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17ZGVidWdUb29sOm51bGx9fSx7fV0sNTk6W2Z1bmN0aW9u
KGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSg5Miksbz0vXjxcIVwtXC0vLGk9e0NIRUNLU1VN
X0FUVFJfTkFNRToiZGF0YS1yZWFjdC1jaGVja3N1bSIsYWRkQ2hlY2tzdW1Ub01hcmt1cDpmdW5j
dGlvbihlKXt2YXIgdD1yKGUpO3JldHVybiBvLnRlc3QoZSk/ZTplLnJlcGxhY2UoL1wvPz4vLCIg
IitpLkNIRUNLU1VNX0FUVFJfTkFNRSsnPSInK3QrJyIkJicpfSxjYW5SZXVzZU1hcmt1cDpmdW5j
dGlvbihlLHQpe3ZhciBuPXQuZ2V0QXR0cmlidXRlKGkuQ0hFQ0tTVU1fQVRUUl9OQU1FKTtyZXR1
cm4gbj1uJiZwYXJzZUludChuLDEwKSxyKGUpPT09bn19O3QuZXhwb3J0cz1pfSx7OTI6OTJ9XSw2
MDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBu
PU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKSxyPTA7cjxuO3IrKylpZihlLmNoYXJBdChyKSE9
PXQuY2hhckF0KHIpKXJldHVybiByO3JldHVybiBlLmxlbmd0aD09PXQubGVuZ3RoPy0xOm59ZnVu
Y3Rpb24gbyhlKXtyZXR1cm4gZT9lLm5vZGVUeXBlPT09QT9lLmRvY3VtZW50RWxlbWVudDplLmZp
cnN0Q2hpbGQ6bnVsbH1mdW5jdGlvbiBpKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZSYmZS5nZXRB
dHRyaWJ1dGUoSSl8fCIifWZ1bmN0aW9uIGEoZSx0LG4scixvKXt2YXIgaTtpZihiLmxvZ1RvcExl
dmVsUmVuZGVycyl7dmFyIGE9ZS5fY3VycmVudEVsZW1lbnQucHJvcHMuY2hpbGQscz1hLnR5cGU7
aT0iUmVhY3QgbW91bnQ6ICIrKCJzdHJpbmciPT10eXBlb2Ygcz9zOnMuZGlzcGxheU5hbWV8fHMu
bmFtZSksY29uc29sZS50aW1lKGkpfXZhciB1PXcubW91bnRDb21wb25lbnQoZSxuLG51bGwsXyhl
LHQpLG8sMCk7aSYmY29uc29sZS50aW1lRW5kKGkpLGUuX3JlbmRlcmVkQ29tcG9uZW50Ll90b3BM
ZXZlbFdyYXBwZXI9ZSxqLl9tb3VudEltYWdlSW50b05vZGUodSx0LGUscixuKX1mdW5jdGlvbiBz
KGUsdCxuLHIpe3ZhciBvPWsuUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5nZXRQb29sZWQoIW4m
JkMudXNlQ3JlYXRlRWxlbWVudCk7by5wZXJmb3JtKGEsbnVsbCxlLHQsbyxuLHIpLGsuUmVhY3RS
ZWNvbmNpbGVUcmFuc2FjdGlvbi5yZWxlYXNlKG8pfWZ1bmN0aW9uIHUoZSx0LG4pe2Zvcih3LnVu
bW91bnRDb21wb25lbnQoZSxuKSx0Lm5vZGVUeXBlPT09QSYmKHQ9dC5kb2N1bWVudEVsZW1lbnQp
O3QubGFzdENoaWxkOyl0LnJlbW92ZUNoaWxkKHQubGFzdENoaWxkKX1mdW5jdGlvbiBsKGUpe3Zh
ciB0PW8oZSk7aWYodCl7dmFyIG49eS5nZXRJbnN0YW5jZUZyb21Ob2RlKHQpO3JldHVybiEoIW58
fCFuLl9ob3N0UGFyZW50KX19ZnVuY3Rpb24gYyhlKXtyZXR1cm4hKCFlfHxlLm5vZGVUeXBlIT09
UiYmZS5ub2RlVHlwZSE9PUEmJmUubm9kZVR5cGUhPT1EKX1mdW5jdGlvbiBwKGUpe3ZhciB0PW8o
ZSksbj10JiZ5LmdldEluc3RhbmNlRnJvbU5vZGUodCk7cmV0dXJuIG4mJiFuLl9ob3N0UGFyZW50
P246bnVsbH1mdW5jdGlvbiBkKGUpe3ZhciB0PXAoZSk7cmV0dXJuIHQ/dC5faG9zdENvbnRhaW5l
ckluZm8uX3RvcExldmVsV3JhcHBlcjpudWxsfXZhciBmPWUoMTEyKSxoPWUoOSksbT1lKDExKSx2
PWUoMTIwKSxnPWUoMjUpLHk9KGUoMTE5KSxlKDMzKSksXz1lKDM0KSxDPWUoMzYpLGI9ZSg1Myks
RT1lKDU3KSx4PShlKDU4KSxlKDU5KSksdz1lKDY2KSxUPWUoNzApLGs9ZSg3MSksUD1lKDEzMCks
Uz1lKDEwOCksTj0oZSgxMzcpLGUoMTE0KSksTT1lKDExNiksST0oZSgxNDIpLG0uSURfQVRUUklC
VVRFX05BTUUpLE89bS5ST09UX0FUVFJJQlVURV9OQU1FLFI9MSxBPTksRD0xMSxMPXt9LFU9MSxG
PWZ1bmN0aW9uKCl7dGhpcy5yb290SUQ9VSsrfTtGLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50
PXt9LEYucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BzLmNoaWxk
fSxGLmlzUmVhY3RUb3BMZXZlbFdyYXBwZXI9ITA7dmFyIGo9e1RvcExldmVsV3JhcHBlcjpGLF9p
bnN0YW5jZXNCeVJlYWN0Um9vdElEOkwsc2Nyb2xsTW9uaXRvcjpmdW5jdGlvbihlLHQpe3QoKX0s
X3VwZGF0ZVJvb3RDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4scixvKXtyZXR1cm4gai5zY3JvbGxN
b25pdG9yKHIsZnVuY3Rpb24oKXtULmVucXVldWVFbGVtZW50SW50ZXJuYWwoZSx0LG4pLG8mJlQu
ZW5xdWV1ZUNhbGxiYWNrSW50ZXJuYWwoZSxvKX0pLGV9LF9yZW5kZXJOZXdSb290Q29tcG9uZW50
OmZ1bmN0aW9uKGUsdCxuLHIpe2ModCl8fGYoIjM3IiksZy5lbnN1cmVTY3JvbGxWYWx1ZU1vbml0
b3JpbmcoKTt2YXIgbz1TKGUsITEpO2suYmF0Y2hlZFVwZGF0ZXMocyxvLHQsbixyKTt2YXIgaT1v
Ll9pbnN0YW5jZS5yb290SUQ7cmV0dXJuIExbaV09byxvfSxyZW5kZXJTdWJ0cmVlSW50b0NvbnRh
aW5lcjpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbnVsbCE9ZSYmRS5oYXMoZSl8fGYoIjM4Iiks
ai5fcmVuZGVyU3VidHJlZUludG9Db250YWluZXIoZSx0LG4scil9LF9yZW5kZXJTdWJ0cmVlSW50
b0NvbnRhaW5lcjpmdW5jdGlvbihlLHQsbixyKXtULnZhbGlkYXRlQ2FsbGJhY2sociwiUmVhY3RE
T00ucmVuZGVyIiksdi5pc1ZhbGlkRWxlbWVudCh0KXx8ZigiMzkiLCJzdHJpbmciPT10eXBlb2Yg
dD8iIEluc3RlYWQgb2YgcGFzc2luZyBhIHN0cmluZyBsaWtlICdkaXYnLCBwYXNzIFJlYWN0LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpIG9yIDxkaXYgLz4uIjoiZnVuY3Rpb24iPT10eXBlb2YgdD8iIElu
c3RlYWQgb2YgcGFzc2luZyBhIGNsYXNzIGxpa2UgRm9vLCBwYXNzIFJlYWN0LmNyZWF0ZUVsZW1l
bnQoRm9vKSBvciA8Rm9vIC8+LiI6bnVsbCE9dCYmdm9pZCAwIT09dC5wcm9wcz8iIFRoaXMgbWF5
IGJlIGNhdXNlZCBieSB1bmludGVudGlvbmFsbHkgbG9hZGluZyB0d28gaW5kZXBlbmRlbnQgY29w
aWVzIG9mIFJlYWN0LiI6IiIpO3ZhciBhLHM9di5jcmVhdGVFbGVtZW50KEYse2NoaWxkOnR9KTtp
ZihlKXt2YXIgdT1FLmdldChlKTthPXUuX3Byb2Nlc3NDaGlsZENvbnRleHQodS5fY29udGV4dCl9
ZWxzZSBhPVA7dmFyIGM9ZChuKTtpZihjKXt2YXIgcD1jLl9jdXJyZW50RWxlbWVudCxoPXAucHJv
cHMuY2hpbGQ7aWYoTShoLHQpKXt2YXIgbT1jLl9yZW5kZXJlZENvbXBvbmVudC5nZXRQdWJsaWNJ
bnN0YW5jZSgpLGc9ciYmZnVuY3Rpb24oKXtyLmNhbGwobSl9O3JldHVybiBqLl91cGRhdGVSb290
Q29tcG9uZW50KGMscyxhLG4sZyksbX1qLnVubW91bnRDb21wb25lbnRBdE5vZGUobil9dmFyIHk9
byhuKSxfPXkmJiEhaSh5KSxDPWwobiksYj1fJiYhYyYmIUMseD1qLl9yZW5kZXJOZXdSb290Q29t
cG9uZW50KHMsbixiLGEpLl9yZW5kZXJlZENvbXBvbmVudC5nZXRQdWJsaWNJbnN0YW5jZSgpO3Jl
dHVybiByJiZyLmNhbGwoeCkseH0scmVuZGVyOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gai5fcmVu
ZGVyU3VidHJlZUludG9Db250YWluZXIobnVsbCxlLHQsbil9LHVubW91bnRDb21wb25lbnRBdE5v
ZGU6ZnVuY3Rpb24oZSl7YyhlKXx8ZigiNDAiKTt2YXIgdD1kKGUpO3JldHVybiB0PyhkZWxldGUg
TFt0Ll9pbnN0YW5jZS5yb290SURdLGsuYmF0Y2hlZFVwZGF0ZXModSx0LGUsITEpLCEwKToobChl
KSwxPT09ZS5ub2RlVHlwZSYmZS5oYXNBdHRyaWJ1dGUoTyksITEpfSxfbW91bnRJbWFnZUludG9O
b2RlOmZ1bmN0aW9uKGUsdCxuLGksYSl7aWYoYyh0KXx8ZigiNDEiKSxpKXt2YXIgcz1vKHQpO2lm
KHguY2FuUmV1c2VNYXJrdXAoZSxzKSlyZXR1cm4gdm9pZCB5LnByZWNhY2hlTm9kZShuLHMpO3Zh
ciB1PXMuZ2V0QXR0cmlidXRlKHguQ0hFQ0tTVU1fQVRUUl9OQU1FKTtzLnJlbW92ZUF0dHJpYnV0
ZSh4LkNIRUNLU1VNX0FUVFJfTkFNRSk7dmFyIGw9cy5vdXRlckhUTUw7cy5zZXRBdHRyaWJ1dGUo
eC5DSEVDS1NVTV9BVFRSX05BTUUsdSk7dmFyIHA9ZSxkPXIocCxsKSxtPSIgKGNsaWVudCkgIitw
LnN1YnN0cmluZyhkLTIwLGQrMjApKyJcbiAoc2VydmVyKSAiK2wuc3Vic3RyaW5nKGQtMjAsZCsy
MCk7dC5ub2RlVHlwZT09PUEmJmYoIjQyIixtKX1pZih0Lm5vZGVUeXBlPT09QSYmZigiNDMiKSxh
LnVzZUNyZWF0ZUVsZW1lbnQpe2Zvcig7dC5sYXN0Q2hpbGQ7KXQucmVtb3ZlQ2hpbGQodC5sYXN0
Q2hpbGQpO2guaW5zZXJ0VHJlZUJlZm9yZSh0LGUsbnVsbCl9ZWxzZSBOKHQsZSkseS5wcmVjYWNo
ZU5vZGUobix0LmZpcnN0Q2hpbGQpfX07dC5leHBvcnRzPWp9LHsxMDg6MTA4LDExOjExLDExMjox
MTIsMTE0OjExNCwxMTY6MTE2LDExOToxMTksMTIwOjEyMCwxMzA6MTMwLDEzNzoxMzcsMTQyOjE0
MiwyNToyNSwzMzozMywzNDozNCwzNjozNiw1Mzo1Myw1Nzo1Nyw1ODo1OCw1OTo1OSw2Njo2Niw3
MDo3MCw3MTo3MSw5Ojl9XSw2MTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlv
biByKGUsdCxuKXtyZXR1cm57dHlwZToiSU5TRVJUX01BUktVUCIsY29udGVudDplLGZyb21JbmRl
eDpudWxsLGZyb21Ob2RlOm51bGwsdG9JbmRleDpuLGFmdGVyTm9kZTp0fX1mdW5jdGlvbiBvKGUs
dCxuKXtyZXR1cm57dHlwZToiTU9WRV9FWElTVElORyIsY29udGVudDpudWxsLGZyb21JbmRleDpl
Ll9tb3VudEluZGV4LGZyb21Ob2RlOmQuZ2V0SG9zdE5vZGUoZSksdG9JbmRleDpuLGFmdGVyTm9k
ZTp0fX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJue3R5cGU6IlJFTU9WRV9OT0RFIixjb250ZW50Om51
bGwsZnJvbUluZGV4OmUuX21vdW50SW5kZXgsZnJvbU5vZGU6dCx0b0luZGV4Om51bGwsYWZ0ZXJO
b2RlOm51bGx9fWZ1bmN0aW9uIGEoZSl7cmV0dXJue3R5cGU6IlNFVF9NQVJLVVAiLGNvbnRlbnQ6
ZSxmcm9tSW5kZXg6bnVsbCxmcm9tTm9kZTpudWxsLHRvSW5kZXg6bnVsbCxhZnRlck5vZGU6bnVs
bH19ZnVuY3Rpb24gcyhlKXtyZXR1cm57dHlwZToiVEVYVF9DT05URU5UIixjb250ZW50OmUsZnJv
bUluZGV4Om51bGwsZnJvbU5vZGU6bnVsbCx0b0luZGV4Om51bGwsYWZ0ZXJOb2RlOm51bGx9fWZ1
bmN0aW9uIHUoZSx0KXtyZXR1cm4gdCYmKGU9ZXx8W10sZS5wdXNoKHQpKSxlfWZ1bmN0aW9uIGwo
ZSx0KXtwLnByb2Nlc3NDaGlsZHJlblVwZGF0ZXMoZSx0KX12YXIgYz1lKDExMikscD1lKDI4KSxk
PShlKDU3KSxlKDU4KSxlKDExOSksZSg2NikpLGY9ZSgyNiksaD0oZSgxMjkpLGUoOTcpKSxtPShl
KDEzNykse01peGluOntfcmVjb25jaWxlckluc3RhbnRpYXRlQ2hpbGRyZW46ZnVuY3Rpb24oZSx0
LG4pe3JldHVybiBmLmluc3RhbnRpYXRlQ2hpbGRyZW4oZSx0LG4pfSxfcmVjb25jaWxlclVwZGF0
ZUNoaWxkcmVuOmZ1bmN0aW9uKGUsdCxuLHIsbyxpKXt2YXIgYTtyZXR1cm4gYT1oKHQsMCksZi51
cGRhdGVDaGlsZHJlbihlLGEsbixyLG8sdGhpcyx0aGlzLl9ob3N0Q29udGFpbmVySW5mbyxpLDAp
LGF9LG1vdW50Q2hpbGRyZW46ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuX3JlY29uY2lsZXJJ
bnN0YW50aWF0ZUNoaWxkcmVuKGUsdCxuKTt0aGlzLl9yZW5kZXJlZENoaWxkcmVuPXI7dmFyIG89
W10saT0wO2Zvcih2YXIgYSBpbiByKWlmKHIuaGFzT3duUHJvcGVydHkoYSkpe3ZhciBzPXJbYV0s
dT1kLm1vdW50Q29tcG9uZW50KHMsdCx0aGlzLHRoaXMuX2hvc3RDb250YWluZXJJbmZvLG4sMCk7
cy5fbW91bnRJbmRleD1pKyssby5wdXNoKHUpfXJldHVybiBvfSx1cGRhdGVUZXh0Q29udGVudDpm
dW5jdGlvbihlKXt2YXIgdD10aGlzLl9yZW5kZXJlZENoaWxkcmVuO2YudW5tb3VudENoaWxkcmVu
KHQsITEpO2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJmMoIjExOCIpO2wodGhp
cyxbcyhlKV0pfSx1cGRhdGVNYXJrdXA6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcmVuZGVyZWRD
aGlsZHJlbjtmLnVubW91bnRDaGlsZHJlbih0LCExKTtmb3IodmFyIG4gaW4gdCl0Lmhhc093blBy
b3BlcnR5KG4pJiZjKCIxMTgiKTtsKHRoaXMsW2EoZSldKX0sdXBkYXRlQ2hpbGRyZW46ZnVuY3Rp
b24oZSx0LG4pe3RoaXMuX3VwZGF0ZUNoaWxkcmVuKGUsdCxuKX0sX3VwZGF0ZUNoaWxkcmVuOmZ1
bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLl9yZW5kZXJlZENoaWxkcmVuLG89e30saT1bXSxhPXRo
aXMuX3JlY29uY2lsZXJVcGRhdGVDaGlsZHJlbihyLGUsaSxvLHQsbik7aWYoYXx8cil7dmFyIHMs
Yz1udWxsLHA9MCxmPTAsaD0wLG09bnVsbDtmb3IocyBpbiBhKWlmKGEuaGFzT3duUHJvcGVydHko
cykpe3ZhciB2PXImJnJbc10sZz1hW3NdO3Y9PT1nPyhjPXUoYyx0aGlzLm1vdmVDaGlsZCh2LG0s
cCxmKSksZj1NYXRoLm1heCh2Ll9tb3VudEluZGV4LGYpLHYuX21vdW50SW5kZXg9cCk6KHYmJihm
PU1hdGgubWF4KHYuX21vdW50SW5kZXgsZikpLGM9dShjLHRoaXMuX21vdW50Q2hpbGRBdEluZGV4
KGcsaVtoXSxtLHAsdCxuKSksaCsrKSxwKyssbT1kLmdldEhvc3ROb2RlKGcpfWZvcihzIGluIG8p
by5oYXNPd25Qcm9wZXJ0eShzKSYmKGM9dShjLHRoaXMuX3VubW91bnRDaGlsZChyW3NdLG9bc10p
KSk7YyYmbCh0aGlzLGMpLHRoaXMuX3JlbmRlcmVkQ2hpbGRyZW49YX19LHVubW91bnRDaGlsZHJl
bjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9yZW5kZXJlZENoaWxkcmVuO2YudW5tb3VudENoaWxk
cmVuKHQsZSksdGhpcy5fcmVuZGVyZWRDaGlsZHJlbj1udWxsfSxtb3ZlQ2hpbGQ6ZnVuY3Rpb24o
ZSx0LG4scil7aWYoZS5fbW91bnRJbmRleDxyKXJldHVybiBvKGUsdCxuKX0sY3JlYXRlQ2hpbGQ6
ZnVuY3Rpb24oZSx0LG4pe3JldHVybiByKG4sdCxlLl9tb3VudEluZGV4KX0scmVtb3ZlQ2hpbGQ6
ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaShlLHQpfSxfbW91bnRDaGlsZEF0SW5kZXg6ZnVuY3Rpb24o
ZSx0LG4scixvLGkpe3JldHVybiBlLl9tb3VudEluZGV4PXIsdGhpcy5jcmVhdGVDaGlsZChlLG4s
dCl9LF91bm1vdW50Q2hpbGQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnJlbW92ZUNoaWxkKGUs
dCk7cmV0dXJuIGUuX21vdW50SW5kZXg9bnVsbCxufX19KTt0LmV4cG9ydHM9bX0sezExMjoxMTIs
MTE5OjExOSwxMjk6MTI5LDEzNzoxMzcsMjY6MjYsMjg6MjgsNTc6NTcsNTg6NTgsNjY6NjYsOTc6
OTd9XSw2MjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDExMiksbz1lKDEy
MCksaT0oZSgxMzcpLHtIT1NUOjAsQ09NUE9TSVRFOjEsRU1QVFk6MixnZXRUeXBlOmZ1bmN0aW9u
KGUpe3JldHVybiBudWxsPT09ZXx8ITE9PT1lP2kuRU1QVFk6by5pc1ZhbGlkRWxlbWVudChlKT8i
ZnVuY3Rpb24iPT10eXBlb2YgZS50eXBlP2kuQ09NUE9TSVRFOmkuSE9TVDp2b2lkIHIoIjI2Iixl
KX19KTt0LmV4cG9ydHM9aX0sezExMjoxMTIsMTIwOjEyMCwxMzc6MTM3fV0sNjM6W2Z1bmN0aW9u
KGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4hKCFlfHwiZnVuY3Rpb24i
IT10eXBlb2YgZS5hdHRhY2hSZWZ8fCJmdW5jdGlvbiIhPXR5cGVvZiBlLmRldGFjaFJlZil9dmFy
IG89ZSgxMTIpLGk9KGUoMTM3KSx7YWRkQ29tcG9uZW50QXNSZWZUbzpmdW5jdGlvbihlLHQsbil7
cihuKXx8bygiMTE5Iiksbi5hdHRhY2hSZWYodCxlKX0scmVtb3ZlQ29tcG9uZW50QXNSZWZGcm9t
OmZ1bmN0aW9uKGUsdCxuKXtyKG4pfHxvKCIxMjAiKTt2YXIgaT1uLmdldFB1YmxpY0luc3RhbmNl
KCk7aSYmaS5yZWZzW3RdPT09ZS5nZXRQdWJsaWNJbnN0YW5jZSgpJiZuLmRldGFjaFJlZih0KX19
KTt0LmV4cG9ydHM9aX0sezExMjoxMTIsMTM3OjEzN31dLDY0OltmdW5jdGlvbihlLHQsbil7InVz
ZSBzdHJpY3QiO3QuZXhwb3J0cz0iU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExf
QkVfRklSRUQifSx7fV0sNjU6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24g
cihlKXt0aGlzLnJlaW5pdGlhbGl6ZVRyYW5zYWN0aW9uKCksdGhpcy5yZW5kZXJUb1N0YXRpY01h
cmt1cD0hMSx0aGlzLnJlYWN0TW91bnRSZWFkeT1pLmdldFBvb2xlZChudWxsKSx0aGlzLnVzZUNy
ZWF0ZUVsZW1lbnQ9ZX12YXIgbz1lKDE0MyksaT1lKDYpLGE9ZSgyNCkscz1lKDI1KSx1PWUoNTYp
LGw9KGUoNTgpLGUoODkpKSxjPWUoNzApLHA9e2luaXRpYWxpemU6dS5nZXRTZWxlY3Rpb25JbmZv
cm1hdGlvbixjbG9zZTp1LnJlc3RvcmVTZWxlY3Rpb259LGQ9e2luaXRpYWxpemU6ZnVuY3Rpb24o
KXt2YXIgZT1zLmlzRW5hYmxlZCgpO3JldHVybiBzLnNldEVuYWJsZWQoITEpLGV9LGNsb3NlOmZ1
bmN0aW9uKGUpe3Muc2V0RW5hYmxlZChlKX19LGY9e2luaXRpYWxpemU6ZnVuY3Rpb24oKXt0aGlz
LnJlYWN0TW91bnRSZWFkeS5yZXNldCgpfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMucmVhY3RNb3Vu
dFJlYWR5Lm5vdGlmeUFsbCgpfX0saD1bcCxkLGZdLG09e2dldFRyYW5zYWN0aW9uV3JhcHBlcnM6
ZnVuY3Rpb24oKXtyZXR1cm4gaH0sZ2V0UmVhY3RNb3VudFJlYWR5OmZ1bmN0aW9uKCl7cmV0dXJu
IHRoaXMucmVhY3RNb3VudFJlYWR5fSxnZXRVcGRhdGVRdWV1ZTpmdW5jdGlvbigpe3JldHVybiBj
fSxjaGVja3BvaW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhY3RNb3VudFJlYWR5LmNoZWNr
cG9pbnQoKX0scm9sbGJhY2s6ZnVuY3Rpb24oZSl7dGhpcy5yZWFjdE1vdW50UmVhZHkucm9sbGJh
Y2soZSl9LGRlc3RydWN0b3I6ZnVuY3Rpb24oKXtpLnJlbGVhc2UodGhpcy5yZWFjdE1vdW50UmVh
ZHkpLHRoaXMucmVhY3RNb3VudFJlYWR5PW51bGx9fTtvKHIucHJvdG90eXBlLGwsbSksYS5hZGRQ
b29saW5nVG8ociksdC5leHBvcnRzPXJ9LHsxNDM6MTQzLDI0OjI0LDI1OjI1LDU2OjU2LDU4OjU4
LDY6Niw3MDo3MCw4OTo4OX1dLDY2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0
aW9uIHIoKXtvLmF0dGFjaFJlZnModGhpcyx0aGlzLl9jdXJyZW50RWxlbWVudCl9dmFyIG89ZSg2
NyksaT0oZSg1OCksZSgxNDIpLHttb3VudENvbXBvbmVudDpmdW5jdGlvbihlLHQsbixvLGksYSl7
dmFyIHM9ZS5tb3VudENvbXBvbmVudCh0LG4sbyxpLGEpO3JldHVybiBlLl9jdXJyZW50RWxlbWVu
dCYmbnVsbCE9ZS5fY3VycmVudEVsZW1lbnQucmVmJiZ0LmdldFJlYWN0TW91bnRSZWFkeSgpLmVu
cXVldWUocixlKSxzfSxnZXRIb3N0Tm9kZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRIb3N0Tm9k
ZSgpfSx1bm1vdW50Q29tcG9uZW50OmZ1bmN0aW9uKGUsdCl7by5kZXRhY2hSZWZzKGUsZS5fY3Vy
cmVudEVsZW1lbnQpLGUudW5tb3VudENvbXBvbmVudCh0KX0scmVjZWl2ZUNvbXBvbmVudDpmdW5j
dGlvbihlLHQsbixpKXt2YXIgYT1lLl9jdXJyZW50RWxlbWVudDtpZih0IT09YXx8aSE9PWUuX2Nv
bnRleHQpe3ZhciBzPW8uc2hvdWxkVXBkYXRlUmVmcyhhLHQpO3MmJm8uZGV0YWNoUmVmcyhlLGEp
LGUucmVjZWl2ZUNvbXBvbmVudCh0LG4saSkscyYmZS5fY3VycmVudEVsZW1lbnQmJm51bGwhPWUu
X2N1cnJlbnRFbGVtZW50LnJlZiYmbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKHIsZSl9
fSxwZXJmb3JtVXBkYXRlSWZOZWNlc3Nhcnk6ZnVuY3Rpb24oZSx0LG4pe2UuX3VwZGF0ZUJhdGNo
TnVtYmVyPT09biYmZS5wZXJmb3JtVXBkYXRlSWZOZWNlc3NhcnkodCl9fSk7dC5leHBvcnRzPWl9
LHsxNDI6MTQyLDU4OjU4LDY3OjY3fV0sNjc6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7
ZnVuY3Rpb24gcihlLHQsbil7ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZSh0LmdldFB1YmxpY0luc3Rh
bmNlKCkpOmkuYWRkQ29tcG9uZW50QXNSZWZUbyh0LGUsbil9ZnVuY3Rpb24gbyhlLHQsbil7ImZ1
bmN0aW9uIj09dHlwZW9mIGU/ZShudWxsKTppLnJlbW92ZUNvbXBvbmVudEFzUmVmRnJvbSh0LGUs
bil9dmFyIGk9ZSg2MyksYT17fTthLmF0dGFjaFJlZnM9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT09
dCYmIm9iamVjdCI9PXR5cGVvZiB0KXt2YXIgbj10LnJlZjtudWxsIT1uJiZyKG4sZSx0Ll9vd25l
cil9fSxhLnNob3VsZFVwZGF0ZVJlZnM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1udWxsLHI9bnVsbDtu
dWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlJiYobj1lLnJlZixyPWUuX293bmVyKTt2YXIgbz1u
dWxsLGk9bnVsbDtyZXR1cm4gbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdCYmKG89dC5yZWYs
aT10Ll9vd25lciksbiE9PW98fCJzdHJpbmciPT10eXBlb2YgbyYmaSE9PXJ9LGEuZGV0YWNoUmVm
cz1mdW5jdGlvbihlLHQpe2lmKG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHQpe3ZhciBuPXQu
cmVmO251bGwhPW4mJm8obixlLHQuX293bmVyKX19LHQuZXhwb3J0cz1hfSx7NjM6NjN9XSw2ODpb
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3RoaXMucmVpbml0aWFs
aXplVHJhbnNhY3Rpb24oKSx0aGlzLnJlbmRlclRvU3RhdGljTWFya3VwPWUsdGhpcy51c2VDcmVh
dGVFbGVtZW50PSExLHRoaXMudXBkYXRlUXVldWU9bmV3IHModGhpcyl9dmFyIG89ZSgxNDMpLGk9
ZSgyNCksYT1lKDg5KSxzPShlKDU4KSxlKDY5KSksdT1bXSxsPXtlbnF1ZXVlOmZ1bmN0aW9uKCl7
fX0sYz17Z2V0VHJhbnNhY3Rpb25XcmFwcGVyczpmdW5jdGlvbigpe3JldHVybiB1fSxnZXRSZWFj
dE1vdW50UmVhZHk6ZnVuY3Rpb24oKXtyZXR1cm4gbH0sZ2V0VXBkYXRlUXVldWU6ZnVuY3Rpb24o
KXtyZXR1cm4gdGhpcy51cGRhdGVRdWV1ZX0sZGVzdHJ1Y3RvcjpmdW5jdGlvbigpe30sY2hlY2tw
b2ludDpmdW5jdGlvbigpe30scm9sbGJhY2s6ZnVuY3Rpb24oKXt9fTtvKHIucHJvdG90eXBlLGEs
YyksaS5hZGRQb29saW5nVG8ociksdC5leHBvcnRzPXJ9LHsxNDM6MTQzLDI0OjI0LDU4OjU4LDY5
OjY5LDg5Ojg5fV0sNjk6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihl
LHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxs
IGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfXZhciBvPWUoNzApLGk9KGUoMTQyKSxmdW5jdGlvbigp
e2Z1bmN0aW9uIGUodCl7cih0aGlzLGUpLHRoaXMudHJhbnNhY3Rpb249dH1yZXR1cm4gZS5wcm90
b3R5cGUuaXNNb3VudGVkPWZ1bmN0aW9uKGUpe3JldHVybiExfSxlLnByb3RvdHlwZS5lbnF1ZXVl
Q2FsbGJhY2s9ZnVuY3Rpb24oZSx0LG4pe3RoaXMudHJhbnNhY3Rpb24uaXNJblRyYW5zYWN0aW9u
KCkmJm8uZW5xdWV1ZUNhbGxiYWNrKGUsdCxuKX0sZS5wcm90b3R5cGUuZW5xdWV1ZUZvcmNlVXBk
YXRlPWZ1bmN0aW9uKGUpe3RoaXMudHJhbnNhY3Rpb24uaXNJblRyYW5zYWN0aW9uKCkmJm8uZW5x
dWV1ZUZvcmNlVXBkYXRlKGUpfSxlLnByb3RvdHlwZS5lbnF1ZXVlUmVwbGFjZVN0YXRlPWZ1bmN0
aW9uKGUsdCl7dGhpcy50cmFuc2FjdGlvbi5pc0luVHJhbnNhY3Rpb24oKSYmby5lbnF1ZXVlUmVw
bGFjZVN0YXRlKGUsdCl9LGUucHJvdG90eXBlLmVucXVldWVTZXRTdGF0ZT1mdW5jdGlvbihlLHQp
e3RoaXMudHJhbnNhY3Rpb24uaXNJblRyYW5zYWN0aW9uKCkmJm8uZW5xdWV1ZVNldFN0YXRlKGUs
dCl9LGV9KCkpO3QuZXhwb3J0cz1pfSx7MTQyOjE0Miw3MDo3MH1dLDcwOltmdW5jdGlvbihlLHQs
bil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dS5lbnF1ZXVlVXBkYXRlKGUpfWZ1bmN0aW9u
IG8oZSl7dmFyIHQ9dHlwZW9mIGU7aWYoIm9iamVjdCIhPT10KXJldHVybiB0O3ZhciBuPWUuY29u
c3RydWN0b3ImJmUuY29uc3RydWN0b3IubmFtZXx8dCxyPU9iamVjdC5rZXlzKGUpO3JldHVybiBy
Lmxlbmd0aD4wJiZyLmxlbmd0aDwyMD9uKyIgKGtleXM6ICIrci5qb2luKCIsICIpKyIpIjpufWZ1
bmN0aW9uIGkoZSx0KXt2YXIgbj1zLmdldChlKTtyZXR1cm4gbnx8bnVsbH12YXIgYT1lKDExMiks
cz0oZSgxMTkpLGUoNTcpKSx1PShlKDU4KSxlKDcxKSksbD0oZSgxMzcpLGUoMTQyKSx7aXNNb3Vu
dGVkOmZ1bmN0aW9uKGUpe3ZhciB0PXMuZ2V0KGUpO3JldHVybiEhdCYmISF0Ll9yZW5kZXJlZENv
bXBvbmVudH0sZW5xdWV1ZUNhbGxiYWNrOmZ1bmN0aW9uKGUsdCxuKXtsLnZhbGlkYXRlQ2FsbGJh
Y2sodCxuKTt2YXIgbz1pKGUpO2lmKCFvKXJldHVybiBudWxsO28uX3BlbmRpbmdDYWxsYmFja3M/
by5fcGVuZGluZ0NhbGxiYWNrcy5wdXNoKHQpOm8uX3BlbmRpbmdDYWxsYmFja3M9W3RdLHIobyl9
LGVucXVldWVDYWxsYmFja0ludGVybmFsOmZ1bmN0aW9uKGUsdCl7ZS5fcGVuZGluZ0NhbGxiYWNr
cz9lLl9wZW5kaW5nQ2FsbGJhY2tzLnB1c2godCk6ZS5fcGVuZGluZ0NhbGxiYWNrcz1bdF0scihl
KX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PWkoZSwiZm9yY2VVcGRhdGUi
KTt0JiYodC5fcGVuZGluZ0ZvcmNlVXBkYXRlPSEwLHIodCkpfSxlbnF1ZXVlUmVwbGFjZVN0YXRl
OmZ1bmN0aW9uKGUsdCxuKXt2YXIgbz1pKGUsInJlcGxhY2VTdGF0ZSIpO28mJihvLl9wZW5kaW5n
U3RhdGVRdWV1ZT1bdF0sby5fcGVuZGluZ1JlcGxhY2VTdGF0ZT0hMCx2b2lkIDAhPT1uJiZudWxs
IT09biYmKGwudmFsaWRhdGVDYWxsYmFjayhuLCJyZXBsYWNlU3RhdGUiKSxvLl9wZW5kaW5nQ2Fs
bGJhY2tzP28uX3BlbmRpbmdDYWxsYmFja3MucHVzaChuKTpvLl9wZW5kaW5nQ2FsbGJhY2tzPVtu
XSkscihvKSl9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbihlLHQpe3ZhciBuPWkoZSwic2V0U3Rh
dGUiKTtuJiYoKG4uX3BlbmRpbmdTdGF0ZVF1ZXVlfHwobi5fcGVuZGluZ1N0YXRlUXVldWU9W10p
KS5wdXNoKHQpLHIobikpfSxlbnF1ZXVlRWxlbWVudEludGVybmFsOmZ1bmN0aW9uKGUsdCxuKXtl
Ll9wZW5kaW5nRWxlbWVudD10LGUuX2NvbnRleHQ9bixyKGUpfSx2YWxpZGF0ZUNhbGxiYWNrOmZ1
bmN0aW9uKGUsdCl7ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUmJmEoIjEyMiIsdCxvKGUpKX19KTt0
LmV4cG9ydHM9bH0sezExMjoxMTIsMTE5OjExOSwxMzc6MTM3LDE0MjoxNDIsNTc6NTcsNTg6NTgs
NzE6NzF9XSw3MTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7UC5S
ZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uJiZifHxjKCIxMjMiKX1mdW5jdGlvbiBvKCl7dGhpcy5y
ZWluaXRpYWxpemVUcmFuc2FjdGlvbigpLHRoaXMuZGlydHlDb21wb25lbnRzTGVuZ3RoPW51bGws
dGhpcy5jYWxsYmFja1F1ZXVlPWQuZ2V0UG9vbGVkKCksdGhpcy5yZWNvbmNpbGVUcmFuc2FjdGlv
bj1QLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24uZ2V0UG9vbGVkKCEwKX1mdW5jdGlvbiBpKGUs
dCxuLG8saSxhKXtyZXR1cm4gcigpLGIuYmF0Y2hlZFVwZGF0ZXMoZSx0LG4sbyxpLGEpfWZ1bmN0
aW9uIGEoZSx0KXtyZXR1cm4gZS5fbW91bnRPcmRlci10Ll9tb3VudE9yZGVyfWZ1bmN0aW9uIHMo
ZSl7dmFyIHQ9ZS5kaXJ0eUNvbXBvbmVudHNMZW5ndGg7dCE9PWcubGVuZ3RoJiZjKCIxMjQiLHQs
Zy5sZW5ndGgpLGcuc29ydChhKSx5Kys7Zm9yKHZhciBuPTA7bjx0O24rKyl7dmFyIHI9Z1tuXSxv
PXIuX3BlbmRpbmdDYWxsYmFja3M7ci5fcGVuZGluZ0NhbGxiYWNrcz1udWxsO3ZhciBpO2lmKGgu
bG9nVG9wTGV2ZWxSZW5kZXJzKXt2YXIgcz1yO3IuX2N1cnJlbnRFbGVtZW50LnR5cGUuaXNSZWFj
dFRvcExldmVsV3JhcHBlciYmKHM9ci5fcmVuZGVyZWRDb21wb25lbnQpLGk9IlJlYWN0IHVwZGF0
ZTogIitzLmdldE5hbWUoKSxjb25zb2xlLnRpbWUoaSl9aWYobS5wZXJmb3JtVXBkYXRlSWZOZWNl
c3NhcnkocixlLnJlY29uY2lsZVRyYW5zYWN0aW9uLHkpLGkmJmNvbnNvbGUudGltZUVuZChpKSxv
KWZvcih2YXIgdT0wO3U8by5sZW5ndGg7dSsrKWUuY2FsbGJhY2tRdWV1ZS5lbnF1ZXVlKG9bdV0s
ci5nZXRQdWJsaWNJbnN0YW5jZSgpKX19ZnVuY3Rpb24gdShlKXtpZihyKCksIWIuaXNCYXRjaGlu
Z1VwZGF0ZXMpcmV0dXJuIHZvaWQgYi5iYXRjaGVkVXBkYXRlcyh1LGUpO2cucHVzaChlKSxudWxs
PT1lLl91cGRhdGVCYXRjaE51bWJlciYmKGUuX3VwZGF0ZUJhdGNoTnVtYmVyPXkrMSl9ZnVuY3Rp
b24gbChlLHQpe2IuaXNCYXRjaGluZ1VwZGF0ZXN8fGMoIjEyNSIpLF8uZW5xdWV1ZShlLHQpLEM9
ITB9dmFyIGM9ZSgxMTIpLHA9ZSgxNDMpLGQ9ZSg2KSxmPWUoMjQpLGg9ZSg1MyksbT1lKDY2KSx2
PWUoODkpLGc9KGUoMTM3KSxbXSkseT0wLF89ZC5nZXRQb29sZWQoKSxDPSExLGI9bnVsbCxFPXtp
bml0aWFsaXplOmZ1bmN0aW9uKCl7dGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGg9Zy5sZW5ndGh9
LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGghPT1nLmxlbmd0aD8o
Zy5zcGxpY2UoMCx0aGlzLmRpcnR5Q29tcG9uZW50c0xlbmd0aCksVCgpKTpnLmxlbmd0aD0wfX0s
eD17aW5pdGlhbGl6ZTpmdW5jdGlvbigpe3RoaXMuY2FsbGJhY2tRdWV1ZS5yZXNldCgpfSxjbG9z
ZTpmdW5jdGlvbigpe3RoaXMuY2FsbGJhY2tRdWV1ZS5ub3RpZnlBbGwoKX19LHc9W0UseF07cChv
LnByb3RvdHlwZSx2LHtnZXRUcmFuc2FjdGlvbldyYXBwZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHd9
LGRlc3RydWN0b3I6ZnVuY3Rpb24oKXt0aGlzLmRpcnR5Q29tcG9uZW50c0xlbmd0aD1udWxsLGQu
cmVsZWFzZSh0aGlzLmNhbGxiYWNrUXVldWUpLHRoaXMuY2FsbGJhY2tRdWV1ZT1udWxsLFAuUmVh
Y3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5yZWxlYXNlKHRoaXMucmVjb25jaWxlVHJhbnNhY3Rpb24p
LHRoaXMucmVjb25jaWxlVHJhbnNhY3Rpb249bnVsbH0scGVyZm9ybTpmdW5jdGlvbihlLHQsbil7
cmV0dXJuIHYucGVyZm9ybS5jYWxsKHRoaXMsdGhpcy5yZWNvbmNpbGVUcmFuc2FjdGlvbi5wZXJm
b3JtLHRoaXMucmVjb25jaWxlVHJhbnNhY3Rpb24sZSx0LG4pfX0pLGYuYWRkUG9vbGluZ1RvKG8p
O3ZhciBUPWZ1bmN0aW9uKCl7Zm9yKDtnLmxlbmd0aHx8Qzspe2lmKGcubGVuZ3RoKXt2YXIgZT1v
LmdldFBvb2xlZCgpO2UucGVyZm9ybShzLG51bGwsZSksby5yZWxlYXNlKGUpfWlmKEMpe0M9ITE7
dmFyIHQ9XztfPWQuZ2V0UG9vbGVkKCksdC5ub3RpZnlBbGwoKSxkLnJlbGVhc2UodCl9fX0saz17
aW5qZWN0UmVjb25jaWxlVHJhbnNhY3Rpb246ZnVuY3Rpb24oZSl7ZXx8YygiMTI2IiksUC5SZWFj
dFJlY29uY2lsZVRyYW5zYWN0aW9uPWV9LGluamVjdEJhdGNoaW5nU3RyYXRlZ3k6ZnVuY3Rpb24o
ZSl7ZXx8YygiMTI3IiksImZ1bmN0aW9uIiE9dHlwZW9mIGUuYmF0Y2hlZFVwZGF0ZXMmJmMoIjEy
OCIpLCJib29sZWFuIiE9dHlwZW9mIGUuaXNCYXRjaGluZ1VwZGF0ZXMmJmMoIjEyOSIpLGI9ZX19
LFA9e1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb246bnVsbCxiYXRjaGVkVXBkYXRlczppLGVucXVl
dWVVcGRhdGU6dSxmbHVzaEJhdGNoZWRVcGRhdGVzOlQsaW5qZWN0aW9uOmssYXNhcDpsfTt0LmV4
cG9ydHM9UH0sezExMjoxMTIsMTM3OjEzNywxNDM6MTQzLDI0OjI0LDUzOjUzLDY6Niw2Njo2Niw4
OTo4OX1dLDcyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz0iMTUuNS40
In0se31dLDczOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPXt4bGluazoiaHR0
cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5
OC9uYW1lc3BhY2UifSxvPXthY2NlbnRIZWlnaHQ6ImFjY2VudC1oZWlnaHQiLGFjY3VtdWxhdGU6
MCxhZGRpdGl2ZTowLGFsaWdubWVudEJhc2VsaW5lOiJhbGlnbm1lbnQtYmFzZWxpbmUiLGFsbG93
UmVvcmRlcjoiYWxsb3dSZW9yZGVyIixhbHBoYWJldGljOjAsYW1wbGl0dWRlOjAsYXJhYmljRm9y
bToiYXJhYmljLWZvcm0iLGFzY2VudDowLGF0dHJpYnV0ZU5hbWU6ImF0dHJpYnV0ZU5hbWUiLGF0
dHJpYnV0ZVR5cGU6ImF0dHJpYnV0ZVR5cGUiLGF1dG9SZXZlcnNlOiJhdXRvUmV2ZXJzZSIsYXpp
bXV0aDowLGJhc2VGcmVxdWVuY3k6ImJhc2VGcmVxdWVuY3kiLGJhc2VQcm9maWxlOiJiYXNlUHJv
ZmlsZSIsYmFzZWxpbmVTaGlmdDoiYmFzZWxpbmUtc2hpZnQiLGJib3g6MCxiZWdpbjowLGJpYXM6
MCxieTowLGNhbGNNb2RlOiJjYWxjTW9kZSIsY2FwSGVpZ2h0OiJjYXAtaGVpZ2h0IixjbGlwOjAs
Y2xpcFBhdGg6ImNsaXAtcGF0aCIsY2xpcFJ1bGU6ImNsaXAtcnVsZSIsY2xpcFBhdGhVbml0czoi
Y2xpcFBhdGhVbml0cyIsY29sb3JJbnRlcnBvbGF0aW9uOiJjb2xvci1pbnRlcnBvbGF0aW9uIixj
b2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMiLGNv
bG9yUHJvZmlsZToiY29sb3ItcHJvZmlsZSIsY29sb3JSZW5kZXJpbmc6ImNvbG9yLXJlbmRlcmlu
ZyIsY29udGVudFNjcmlwdFR5cGU6ImNvbnRlbnRTY3JpcHRUeXBlIixjb250ZW50U3R5bGVUeXBl
OiJjb250ZW50U3R5bGVUeXBlIixjdXJzb3I6MCxjeDowLGN5OjAsZDowLGRlY2VsZXJhdGU6MCxk
ZXNjZW50OjAsZGlmZnVzZUNvbnN0YW50OiJkaWZmdXNlQ29uc3RhbnQiLGRpcmVjdGlvbjowLGRp
c3BsYXk6MCxkaXZpc29yOjAsZG9taW5hbnRCYXNlbGluZToiZG9taW5hbnQtYmFzZWxpbmUiLGR1
cjowLGR4OjAsZHk6MCxlZGdlTW9kZToiZWRnZU1vZGUiLGVsZXZhdGlvbjowLGVuYWJsZUJhY2tn
cm91bmQ6ImVuYWJsZS1iYWNrZ3JvdW5kIixlbmQ6MCxleHBvbmVudDowLGV4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQ6ImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQiLGZpbGw6MCxmaWxsT3BhY2l0
eToiZmlsbC1vcGFjaXR5IixmaWxsUnVsZToiZmlsbC1ydWxlIixmaWx0ZXI6MCxmaWx0ZXJSZXM6
ImZpbHRlclJlcyIsZmlsdGVyVW5pdHM6ImZpbHRlclVuaXRzIixmbG9vZENvbG9yOiJmbG9vZC1j
b2xvciIsZmxvb2RPcGFjaXR5OiJmbG9vZC1vcGFjaXR5Iixmb2N1c2FibGU6MCxmb250RmFtaWx5
OiJmb250LWZhbWlseSIsZm9udFNpemU6ImZvbnQtc2l6ZSIsZm9udFNpemVBZGp1c3Q6ImZvbnQt
c2l6ZS1hZGp1c3QiLGZvbnRTdHJldGNoOiJmb250LXN0cmV0Y2giLGZvbnRTdHlsZToiZm9udC1z
dHlsZSIsZm9udFZhcmlhbnQ6ImZvbnQtdmFyaWFudCIsZm9udFdlaWdodDoiZm9udC13ZWlnaHQi
LGZvcm1hdDowLGZyb206MCxmeDowLGZ5OjAsZzE6MCxnMjowLGdseXBoTmFtZToiZ2x5cGgtbmFt
ZSIsZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWw6ImdseXBoLW9yaWVudGF0aW9uLWhvcml6b250
YWwiLGdseXBoT3JpZW50YXRpb25WZXJ0aWNhbDoiZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwi
LGdseXBoUmVmOiJnbHlwaFJlZiIsZ3JhZGllbnRUcmFuc2Zvcm06ImdyYWRpZW50VHJhbnNmb3Jt
IixncmFkaWVudFVuaXRzOiJncmFkaWVudFVuaXRzIixoYW5naW5nOjAsaG9yaXpBZHZYOiJob3Jp
ei1hZHYteCIsaG9yaXpPcmlnaW5YOiJob3Jpei1vcmlnaW4teCIsaWRlb2dyYXBoaWM6MCxpbWFn
ZVJlbmRlcmluZzoiaW1hZ2UtcmVuZGVyaW5nIixpbjowLGluMjowLGludGVyY2VwdDowLGs6MCxr
MTowLGsyOjAsazM6MCxrNDowLGtlcm5lbE1hdHJpeDoia2VybmVsTWF0cml4IixrZXJuZWxVbml0
TGVuZ3RoOiJrZXJuZWxVbml0TGVuZ3RoIixrZXJuaW5nOjAsa2V5UG9pbnRzOiJrZXlQb2ludHMi
LGtleVNwbGluZXM6ImtleVNwbGluZXMiLGtleVRpbWVzOiJrZXlUaW1lcyIsbGVuZ3RoQWRqdXN0
OiJsZW5ndGhBZGp1c3QiLGxldHRlclNwYWNpbmc6ImxldHRlci1zcGFjaW5nIixsaWdodGluZ0Nv
bG9yOiJsaWdodGluZy1jb2xvciIsbGltaXRpbmdDb25lQW5nbGU6ImxpbWl0aW5nQ29uZUFuZ2xl
Iixsb2NhbDowLG1hcmtlckVuZDoibWFya2VyLWVuZCIsbWFya2VyTWlkOiJtYXJrZXItbWlkIixt
YXJrZXJTdGFydDoibWFya2VyLXN0YXJ0IixtYXJrZXJIZWlnaHQ6Im1hcmtlckhlaWdodCIsbWFy
a2VyVW5pdHM6Im1hcmtlclVuaXRzIixtYXJrZXJXaWR0aDoibWFya2VyV2lkdGgiLG1hc2s6MCxt
YXNrQ29udGVudFVuaXRzOiJtYXNrQ29udGVudFVuaXRzIixtYXNrVW5pdHM6Im1hc2tVbml0cyIs
bWF0aGVtYXRpY2FsOjAsbW9kZTowLG51bU9jdGF2ZXM6Im51bU9jdGF2ZXMiLG9mZnNldDowLG9w
YWNpdHk6MCxvcGVyYXRvcjowLG9yZGVyOjAsb3JpZW50OjAsb3JpZW50YXRpb246MCxvcmlnaW46
MCxvdmVyZmxvdzowLG92ZXJsaW5lUG9zaXRpb246Im92ZXJsaW5lLXBvc2l0aW9uIixvdmVybGlu
ZVRoaWNrbmVzczoib3ZlcmxpbmUtdGhpY2tuZXNzIixwYWludE9yZGVyOiJwYWludC1vcmRlciIs
cGFub3NlMToicGFub3NlLTEiLHBhdGhMZW5ndGg6InBhdGhMZW5ndGgiLHBhdHRlcm5Db250ZW50
VW5pdHM6InBhdHRlcm5Db250ZW50VW5pdHMiLHBhdHRlcm5UcmFuc2Zvcm06InBhdHRlcm5UcmFu
c2Zvcm0iLHBhdHRlcm5Vbml0czoicGF0dGVyblVuaXRzIixwb2ludGVyRXZlbnRzOiJwb2ludGVy
LWV2ZW50cyIscG9pbnRzOjAscG9pbnRzQXRYOiJwb2ludHNBdFgiLHBvaW50c0F0WToicG9pbnRz
QXRZIixwb2ludHNBdFo6InBvaW50c0F0WiIscHJlc2VydmVBbHBoYToicHJlc2VydmVBbHBoYSIs
cHJlc2VydmVBc3BlY3RSYXRpbzoicHJlc2VydmVBc3BlY3RSYXRpbyIscHJpbWl0aXZlVW5pdHM6
InByaW1pdGl2ZVVuaXRzIixyOjAscmFkaXVzOjAscmVmWDoicmVmWCIscmVmWToicmVmWSIscmVu
ZGVyaW5nSW50ZW50OiJyZW5kZXJpbmctaW50ZW50IixyZXBlYXRDb3VudDoicmVwZWF0Q291bnQi
LHJlcGVhdER1cjoicmVwZWF0RHVyIixyZXF1aXJlZEV4dGVuc2lvbnM6InJlcXVpcmVkRXh0ZW5z
aW9ucyIscmVxdWlyZWRGZWF0dXJlczoicmVxdWlyZWRGZWF0dXJlcyIscmVzdGFydDowLHJlc3Vs
dDowLHJvdGF0ZTowLHJ4OjAscnk6MCxzY2FsZTowLHNlZWQ6MCxzaGFwZVJlbmRlcmluZzoic2hh
cGUtcmVuZGVyaW5nIixzbG9wZTowLHNwYWNpbmc6MCxzcGVjdWxhckNvbnN0YW50OiJzcGVjdWxh
ckNvbnN0YW50IixzcGVjdWxhckV4cG9uZW50OiJzcGVjdWxhckV4cG9uZW50IixzcGVlZDowLHNw
cmVhZE1ldGhvZDoic3ByZWFkTWV0aG9kIixzdGFydE9mZnNldDoic3RhcnRPZmZzZXQiLHN0ZERl
dmlhdGlvbjoic3RkRGV2aWF0aW9uIixzdGVtaDowLHN0ZW12OjAsc3RpdGNoVGlsZXM6InN0aXRj
aFRpbGVzIixzdG9wQ29sb3I6InN0b3AtY29sb3IiLHN0b3BPcGFjaXR5OiJzdG9wLW9wYWNpdHki
LHN0cmlrZXRocm91Z2hQb3NpdGlvbjoic3RyaWtldGhyb3VnaC1wb3NpdGlvbiIsc3RyaWtldGhy
b3VnaFRoaWNrbmVzczoic3RyaWtldGhyb3VnaC10aGlja25lc3MiLHN0cmluZzowLHN0cm9rZTow
LHN0cm9rZURhc2hhcnJheToic3Ryb2tlLWRhc2hhcnJheSIsc3Ryb2tlRGFzaG9mZnNldDoic3Ry
b2tlLWRhc2hvZmZzZXQiLHN0cm9rZUxpbmVjYXA6InN0cm9rZS1saW5lY2FwIixzdHJva2VMaW5l
am9pbjoic3Ryb2tlLWxpbmVqb2luIixzdHJva2VNaXRlcmxpbWl0OiJzdHJva2UtbWl0ZXJsaW1p
dCIsc3Ryb2tlT3BhY2l0eToic3Ryb2tlLW9wYWNpdHkiLHN0cm9rZVdpZHRoOiJzdHJva2Utd2lk
dGgiLHN1cmZhY2VTY2FsZToic3VyZmFjZVNjYWxlIixzeXN0ZW1MYW5ndWFnZToic3lzdGVtTGFu
Z3VhZ2UiLHRhYmxlVmFsdWVzOiJ0YWJsZVZhbHVlcyIsdGFyZ2V0WDoidGFyZ2V0WCIsdGFyZ2V0
WToidGFyZ2V0WSIsdGV4dEFuY2hvcjoidGV4dC1hbmNob3IiLHRleHREZWNvcmF0aW9uOiJ0ZXh0
LWRlY29yYXRpb24iLHRleHRSZW5kZXJpbmc6InRleHQtcmVuZGVyaW5nIix0ZXh0TGVuZ3RoOiJ0
ZXh0TGVuZ3RoIix0bzowLHRyYW5zZm9ybTowLHUxOjAsdTI6MCx1bmRlcmxpbmVQb3NpdGlvbjoi
dW5kZXJsaW5lLXBvc2l0aW9uIix1bmRlcmxpbmVUaGlja25lc3M6InVuZGVybGluZS10aGlja25l
c3MiLHVuaWNvZGU6MCx1bmljb2RlQmlkaToidW5pY29kZS1iaWRpIix1bmljb2RlUmFuZ2U6InVu
aWNvZGUtcmFuZ2UiLHVuaXRzUGVyRW06InVuaXRzLXBlci1lbSIsdkFscGhhYmV0aWM6InYtYWxw
aGFiZXRpYyIsdkhhbmdpbmc6InYtaGFuZ2luZyIsdklkZW9ncmFwaGljOiJ2LWlkZW9ncmFwaGlj
Iix2TWF0aGVtYXRpY2FsOiJ2LW1hdGhlbWF0aWNhbCIsdmFsdWVzOjAsdmVjdG9yRWZmZWN0OiJ2
ZWN0b3ItZWZmZWN0Iix2ZXJzaW9uOjAsdmVydEFkdlk6InZlcnQtYWR2LXkiLHZlcnRPcmlnaW5Y
OiJ2ZXJ0LW9yaWdpbi14Iix2ZXJ0T3JpZ2luWToidmVydC1vcmlnaW4teSIsdmlld0JveDoidmll
d0JveCIsdmlld1RhcmdldDoidmlld1RhcmdldCIsdmlzaWJpbGl0eTowLHdpZHRoczowLHdvcmRT
cGFjaW5nOiJ3b3JkLXNwYWNpbmciLHdyaXRpbmdNb2RlOiJ3cml0aW5nLW1vZGUiLHg6MCx4SGVp
Z2h0OiJ4LWhlaWdodCIseDE6MCx4MjowLHhDaGFubmVsU2VsZWN0b3I6InhDaGFubmVsU2VsZWN0
b3IiLHhsaW5rQWN0dWF0ZToieGxpbms6YWN0dWF0ZSIseGxpbmtBcmNyb2xlOiJ4bGluazphcmNy
b2xlIix4bGlua0hyZWY6InhsaW5rOmhyZWYiLHhsaW5rUm9sZToieGxpbms6cm9sZSIseGxpbmtT
aG93OiJ4bGluazpzaG93Iix4bGlua1RpdGxlOiJ4bGluazp0aXRsZSIseGxpbmtUeXBlOiJ4bGlu
azp0eXBlIix4bWxCYXNlOiJ4bWw6YmFzZSIseG1sbnM6MCx4bWxuc1hsaW5rOiJ4bWxuczp4bGlu
ayIseG1sTGFuZzoieG1sOmxhbmciLHhtbFNwYWNlOiJ4bWw6c3BhY2UiLHk6MCx5MTowLHkyOjAs
eUNoYW5uZWxTZWxlY3RvcjoieUNoYW5uZWxTZWxlY3RvciIsejowLHpvb21BbmRQYW46Inpvb21B
bmRQYW4ifSxpPXtQcm9wZXJ0aWVzOnt9LERPTUF0dHJpYnV0ZU5hbWVzcGFjZXM6e3hsaW5rQWN0
dWF0ZTpyLnhsaW5rLHhsaW5rQXJjcm9sZTpyLnhsaW5rLHhsaW5rSHJlZjpyLnhsaW5rLHhsaW5r
Um9sZTpyLnhsaW5rLHhsaW5rU2hvdzpyLnhsaW5rLHhsaW5rVGl0bGU6ci54bGluayx4bGlua1R5
cGU6ci54bGluayx4bWxCYXNlOnIueG1sLHhtbExhbmc6ci54bWwseG1sU3BhY2U6ci54bWx9LERP
TUF0dHJpYnV0ZU5hbWVzOnt9fTtPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2ku
UHJvcGVydGllc1tlXT0wLG9bZV0mJihpLkRPTUF0dHJpYnV0ZU5hbWVzW2VdPW9bZV0pfSksdC5l
eHBvcnRzPWl9LHt9XSw3NDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBy
KGUpe2lmKCJzZWxlY3Rpb25TdGFydCJpbiBlJiZ1Lmhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhl
KSlyZXR1cm57c3RhcnQ6ZS5zZWxlY3Rpb25TdGFydCxlbmQ6ZS5zZWxlY3Rpb25FbmR9O2lmKHdp
bmRvdy5nZXRTZWxlY3Rpb24pe3ZhciB0PXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtyZXR1cm57YW5j
aG9yTm9kZTp0LmFuY2hvck5vZGUsYW5jaG9yT2Zmc2V0OnQuYW5jaG9yT2Zmc2V0LGZvY3VzTm9k
ZTp0LmZvY3VzTm9kZSxmb2N1c09mZnNldDp0LmZvY3VzT2Zmc2V0fX1pZihkb2N1bWVudC5zZWxl
Y3Rpb24pe3ZhciBuPWRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO3JldHVybntwYXJl
bnRFbGVtZW50Om4ucGFyZW50RWxlbWVudCgpLHRleHQ6bi50ZXh0LHRvcDpuLmJvdW5kaW5nVG9w
LGxlZnQ6bi5ib3VuZGluZ0xlZnR9fX1mdW5jdGlvbiBvKGUsdCl7aWYoeXx8bnVsbD09bXx8bSE9
PWMoKSlyZXR1cm4gbnVsbDt2YXIgbj1yKG0pO2lmKCFnfHwhZChnLG4pKXtnPW47dmFyIG89bC5n
ZXRQb29sZWQoaC5zZWxlY3QsdixlLHQpO3JldHVybiBvLnR5cGU9InNlbGVjdCIsby50YXJnZXQ9
bSxpLmFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMobyksb31yZXR1cm4gbnVsbH12YXIgaT1l
KDE5KSxhPWUoMTIzKSxzPWUoMzMpLHU9ZSg1NiksbD1lKDgwKSxjPWUoMTMyKSxwPWUoMTEwKSxk
PWUoMTQxKSxmPWEuY2FuVXNlRE9NJiYiZG9jdW1lbnRNb2RlImluIGRvY3VtZW50JiZkb2N1bWVu
dC5kb2N1bWVudE1vZGU8PTExLGg9e3NlbGVjdDp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1
YmJsZWQ6Im9uU2VsZWN0IixjYXB0dXJlZDoib25TZWxlY3RDYXB0dXJlIn0sZGVwZW5kZW5jaWVz
OlsidG9wQmx1ciIsInRvcENvbnRleHRNZW51IiwidG9wRm9jdXMiLCJ0b3BLZXlEb3duIiwidG9w
S2V5VXAiLCJ0b3BNb3VzZURvd24iLCJ0b3BNb3VzZVVwIiwidG9wU2VsZWN0aW9uQ2hhbmdlIl19
fSxtPW51bGwsdj1udWxsLGc9bnVsbCx5PSExLF89ITEsQz17ZXZlbnRUeXBlczpoLGV4dHJhY3RF
dmVudHM6ZnVuY3Rpb24oZSx0LG4scil7aWYoIV8pcmV0dXJuIG51bGw7dmFyIGk9dD9zLmdldE5v
ZGVGcm9tSW5zdGFuY2UodCk6d2luZG93O3N3aXRjaChlKXtjYXNlInRvcEZvY3VzIjoocChpKXx8
InRydWUiPT09aS5jb250ZW50RWRpdGFibGUpJiYobT1pLHY9dCxnPW51bGwpO2JyZWFrCis7Y2Fz
ZSJ0b3BCbHVyIjptPW51bGwsdj1udWxsLGc9bnVsbDticmVhaztjYXNlInRvcE1vdXNlRG93biI6
eT0hMDticmVhaztjYXNlInRvcENvbnRleHRNZW51IjpjYXNlInRvcE1vdXNlVXAiOnJldHVybiB5
PSExLG8obixyKTtjYXNlInRvcFNlbGVjdGlvbkNoYW5nZSI6aWYoZilicmVhaztjYXNlInRvcEtl
eURvd24iOmNhc2UidG9wS2V5VXAiOnJldHVybiBvKG4scil9cmV0dXJuIG51bGx9LGRpZFB1dExp
c3RlbmVyOmZ1bmN0aW9uKGUsdCxuKXsib25TZWxlY3QiPT09dCYmKF89ITApfX07dC5leHBvcnRz
PUN9LHsxMTA6MTEwLDEyMzoxMjMsMTMyOjEzMiwxNDE6MTQxLDE5OjE5LDMzOjMzLDU2OjU2LDgw
OjgwfV0sNzU6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1
cm4iLiIrZS5fcm9vdE5vZGVJRH1mdW5jdGlvbiBvKGUpe3JldHVybiJidXR0b24iPT09ZXx8Imlu
cHV0Ij09PWV8fCJzZWxlY3QiPT09ZXx8InRleHRhcmVhIj09PWV9dmFyIGk9ZSgxMTIpLGE9ZSgx
MjIpLHM9ZSgxOSksdT1lKDMzKSxsPWUoNzYpLGM9ZSg3NykscD1lKDgwKSxkPWUoODEpLGY9ZSg4
MyksaD1lKDg0KSxtPWUoNzkpLHY9ZSg4NSksZz1lKDg2KSx5PWUoODcpLF89ZSg4OCksQz1lKDEy
OSksYj1lKDk5KSxFPShlKDEzNykse30pLHg9e307WyJhYm9ydCIsImFuaW1hdGlvbkVuZCIsImFu
aW1hdGlvbkl0ZXJhdGlvbiIsImFuaW1hdGlvblN0YXJ0IiwiYmx1ciIsImNhblBsYXkiLCJjYW5Q
bGF5VGhyb3VnaCIsImNsaWNrIiwiY29udGV4dE1lbnUiLCJjb3B5IiwiY3V0IiwiZG91YmxlQ2xp
Y2siLCJkcmFnIiwiZHJhZ0VuZCIsImRyYWdFbnRlciIsImRyYWdFeGl0IiwiZHJhZ0xlYXZlIiwi
ZHJhZ092ZXIiLCJkcmFnU3RhcnQiLCJkcm9wIiwiZHVyYXRpb25DaGFuZ2UiLCJlbXB0aWVkIiwi
ZW5jcnlwdGVkIiwiZW5kZWQiLCJlcnJvciIsImZvY3VzIiwiaW5wdXQiLCJpbnZhbGlkIiwia2V5
RG93biIsImtleVByZXNzIiwia2V5VXAiLCJsb2FkIiwibG9hZGVkRGF0YSIsImxvYWRlZE1ldGFk
YXRhIiwibG9hZFN0YXJ0IiwibW91c2VEb3duIiwibW91c2VNb3ZlIiwibW91c2VPdXQiLCJtb3Vz
ZU92ZXIiLCJtb3VzZVVwIiwicGFzdGUiLCJwYXVzZSIsInBsYXkiLCJwbGF5aW5nIiwicHJvZ3Jl
c3MiLCJyYXRlQ2hhbmdlIiwicmVzZXQiLCJzY3JvbGwiLCJzZWVrZWQiLCJzZWVraW5nIiwic3Rh
bGxlZCIsInN1Ym1pdCIsInN1c3BlbmQiLCJ0aW1lVXBkYXRlIiwidG91Y2hDYW5jZWwiLCJ0b3Vj
aEVuZCIsInRvdWNoTW92ZSIsInRvdWNoU3RhcnQiLCJ0cmFuc2l0aW9uRW5kIiwidm9sdW1lQ2hh
bmdlIiwid2FpdGluZyIsIndoZWVsIl0uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lWzBdLnRv
VXBwZXJDYXNlKCkrZS5zbGljZSgxKSxuPSJvbiIrdCxyPSJ0b3AiK3Qsbz17cGhhc2VkUmVnaXN0
cmF0aW9uTmFtZXM6e2J1YmJsZWQ6bixjYXB0dXJlZDpuKyJDYXB0dXJlIn0sZGVwZW5kZW5jaWVz
OltyXX07RVtlXT1vLHhbcl09b30pO3ZhciB3PXt9LFQ9e2V2ZW50VHlwZXM6RSxleHRyYWN0RXZl
bnRzOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPXhbZV07aWYoIW8pcmV0dXJuIG51bGw7dmFyIGE7
c3dpdGNoKGUpe2Nhc2UidG9wQWJvcnQiOmNhc2UidG9wQ2FuUGxheSI6Y2FzZSJ0b3BDYW5QbGF5
VGhyb3VnaCI6Y2FzZSJ0b3BEdXJhdGlvbkNoYW5nZSI6Y2FzZSJ0b3BFbXB0aWVkIjpjYXNlInRv
cEVuY3J5cHRlZCI6Y2FzZSJ0b3BFbmRlZCI6Y2FzZSJ0b3BFcnJvciI6Y2FzZSJ0b3BJbnB1dCI6
Y2FzZSJ0b3BJbnZhbGlkIjpjYXNlInRvcExvYWQiOmNhc2UidG9wTG9hZGVkRGF0YSI6Y2FzZSJ0
b3BMb2FkZWRNZXRhZGF0YSI6Y2FzZSJ0b3BMb2FkU3RhcnQiOmNhc2UidG9wUGF1c2UiOmNhc2Ui
dG9wUGxheSI6Y2FzZSJ0b3BQbGF5aW5nIjpjYXNlInRvcFByb2dyZXNzIjpjYXNlInRvcFJhdGVD
aGFuZ2UiOmNhc2UidG9wUmVzZXQiOmNhc2UidG9wU2Vla2VkIjpjYXNlInRvcFNlZWtpbmciOmNh
c2UidG9wU3RhbGxlZCI6Y2FzZSJ0b3BTdWJtaXQiOmNhc2UidG9wU3VzcGVuZCI6Y2FzZSJ0b3BU
aW1lVXBkYXRlIjpjYXNlInRvcFZvbHVtZUNoYW5nZSI6Y2FzZSJ0b3BXYWl0aW5nIjphPXA7YnJl
YWs7Y2FzZSJ0b3BLZXlQcmVzcyI6aWYoMD09PWIobikpcmV0dXJuIG51bGw7Y2FzZSJ0b3BLZXlE
b3duIjpjYXNlInRvcEtleVVwIjphPWY7YnJlYWs7Y2FzZSJ0b3BCbHVyIjpjYXNlInRvcEZvY3Vz
IjphPWQ7YnJlYWs7Y2FzZSJ0b3BDbGljayI6aWYoMj09PW4uYnV0dG9uKXJldHVybiBudWxsO2Nh
c2UidG9wRG91YmxlQ2xpY2siOmNhc2UidG9wTW91c2VEb3duIjpjYXNlInRvcE1vdXNlTW92ZSI6
Y2FzZSJ0b3BNb3VzZVVwIjpjYXNlInRvcE1vdXNlT3V0IjpjYXNlInRvcE1vdXNlT3ZlciI6Y2Fz
ZSJ0b3BDb250ZXh0TWVudSI6YT1oO2JyZWFrO2Nhc2UidG9wRHJhZyI6Y2FzZSJ0b3BEcmFnRW5k
IjpjYXNlInRvcERyYWdFbnRlciI6Y2FzZSJ0b3BEcmFnRXhpdCI6Y2FzZSJ0b3BEcmFnTGVhdmUi
OmNhc2UidG9wRHJhZ092ZXIiOmNhc2UidG9wRHJhZ1N0YXJ0IjpjYXNlInRvcERyb3AiOmE9bTti
cmVhaztjYXNlInRvcFRvdWNoQ2FuY2VsIjpjYXNlInRvcFRvdWNoRW5kIjpjYXNlInRvcFRvdWNo
TW92ZSI6Y2FzZSJ0b3BUb3VjaFN0YXJ0IjphPXY7YnJlYWs7Y2FzZSJ0b3BBbmltYXRpb25FbmQi
OmNhc2UidG9wQW5pbWF0aW9uSXRlcmF0aW9uIjpjYXNlInRvcEFuaW1hdGlvblN0YXJ0IjphPWw7
YnJlYWs7Y2FzZSJ0b3BUcmFuc2l0aW9uRW5kIjphPWc7YnJlYWs7Y2FzZSJ0b3BTY3JvbGwiOmE9
eTticmVhaztjYXNlInRvcFdoZWVsIjphPV87YnJlYWs7Y2FzZSJ0b3BDb3B5IjpjYXNlInRvcEN1
dCI6Y2FzZSJ0b3BQYXN0ZSI6YT1jfWF8fGkoIjg2IixlKTt2YXIgdT1hLmdldFBvb2xlZChvLHQs
bixyKTtyZXR1cm4gcy5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKHUpLHV9LGRpZFB1dExp
c3RlbmVyOmZ1bmN0aW9uKGUsdCxuKXtpZigib25DbGljayI9PT10JiYhbyhlLl90YWcpKXt2YXIg
aT1yKGUpLHM9dS5nZXROb2RlRnJvbUluc3RhbmNlKGUpO3dbaV18fCh3W2ldPWEubGlzdGVuKHMs
ImNsaWNrIixDKSl9fSx3aWxsRGVsZXRlTGlzdGVuZXI6ZnVuY3Rpb24oZSx0KXtpZigib25DbGlj
ayI9PT10JiYhbyhlLl90YWcpKXt2YXIgbj1yKGUpO3dbbl0ucmVtb3ZlKCksZGVsZXRlIHdbbl19
fX07dC5leHBvcnRzPVR9LHsxMTI6MTEyLDEyMjoxMjIsMTI5OjEyOSwxMzc6MTM3LDE5OjE5LDMz
OjMzLDc2Ojc2LDc3Ojc3LDc5Ojc5LDgwOjgwLDgxOjgxLDgzOjgzLDg0Ojg0LDg1Ojg1LDg2Ojg2
LDg3Ojg3LDg4Ojg4LDk5Ojk5fV0sNzY6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVu
Y3Rpb24gcihlLHQsbixyKXtyZXR1cm4gby5jYWxsKHRoaXMsZSx0LG4scil9dmFyIG89ZSg4MCks
aT17YW5pbWF0aW9uTmFtZTpudWxsLGVsYXBzZWRUaW1lOm51bGwscHNldWRvRWxlbWVudDpudWxs
fTtvLmF1Z21lbnRDbGFzcyhyLGkpLHQuZXhwb3J0cz1yfSx7ODA6ODB9XSw3NzpbZnVuY3Rpb24o
ZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3JldHVybiBvLmNhbGwodGhp
cyxlLHQsbixyKX12YXIgbz1lKDgwKSxpPXtjbGlwYm9hcmREYXRhOmZ1bmN0aW9uKGUpe3JldHVy
biJjbGlwYm9hcmREYXRhImluIGU/ZS5jbGlwYm9hcmREYXRhOndpbmRvdy5jbGlwYm9hcmREYXRh
fX07by5hdWdtZW50Q2xhc3MocixpKSx0LmV4cG9ydHM9cn0sezgwOjgwfV0sNzg6W2Z1bmN0aW9u
KGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtyZXR1cm4gby5jYWxsKHRo
aXMsZSx0LG4scil9dmFyIG89ZSg4MCksaT17ZGF0YTpudWxsfTtvLmF1Z21lbnRDbGFzcyhyLGkp
LHQuZXhwb3J0cz1yfSx7ODA6ODB9XSw3OTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijtm
dW5jdGlvbiByKGUsdCxuLHIpe3JldHVybiBvLmNhbGwodGhpcyxlLHQsbixyKX12YXIgbz1lKDg0
KSxpPXtkYXRhVHJhbnNmZXI6bnVsbH07by5hdWdtZW50Q2xhc3MocixpKSx0LmV4cG9ydHM9cn0s
ezg0Ojg0fV0sODA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQs
bixyKXt0aGlzLmRpc3BhdGNoQ29uZmlnPWUsdGhpcy5fdGFyZ2V0SW5zdD10LHRoaXMubmF0aXZl
RXZlbnQ9bjt2YXIgbz10aGlzLmNvbnN0cnVjdG9yLkludGVyZmFjZTtmb3IodmFyIGkgaW4gbylp
ZihvLmhhc093blByb3BlcnR5KGkpKXt2YXIgcz1vW2ldO3M/dGhpc1tpXT1zKG4pOiJ0YXJnZXQi
PT09aT90aGlzLnRhcmdldD1yOnRoaXNbaV09bltpXX12YXIgdT1udWxsIT1uLmRlZmF1bHRQcmV2
ZW50ZWQ/bi5kZWZhdWx0UHJldmVudGVkOiExPT09bi5yZXR1cm5WYWx1ZTtyZXR1cm4gdGhpcy5p
c0RlZmF1bHRQcmV2ZW50ZWQ9dT9hLnRoYXRSZXR1cm5zVHJ1ZTphLnRoYXRSZXR1cm5zRmFsc2Us
dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1hLnRoYXRSZXR1cm5zRmFsc2UsdGhpc312YXIgbz1l
KDE0MyksaT1lKDI0KSxhPWUoMTI5KSxzPShlKDE0MiksWyJkaXNwYXRjaENvbmZpZyIsIl90YXJn
ZXRJbnN0IiwibmF0aXZlRXZlbnQiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJpc1Byb3BhZ2F0aW9u
U3RvcHBlZCIsIl9kaXNwYXRjaExpc3RlbmVycyIsIl9kaXNwYXRjaEluc3RhbmNlcyJdKSx1PXt0
eXBlOm51bGwsdGFyZ2V0Om51bGwsY3VycmVudFRhcmdldDphLnRoYXRSZXR1cm5zTnVsbCxldmVu
dFBoYXNlOm51bGwsYnViYmxlczpudWxsLGNhbmNlbGFibGU6bnVsbCx0aW1lU3RhbXA6ZnVuY3Rp
b24oZSl7cmV0dXJuIGUudGltZVN0YW1wfHxEYXRlLm5vdygpfSxkZWZhdWx0UHJldmVudGVkOm51
bGwsaXNUcnVzdGVkOm51bGx9O28oci5wcm90b3R5cGUse3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9u
KCl7dGhpcy5kZWZhdWx0UHJldmVudGVkPSEwO3ZhciBlPXRoaXMubmF0aXZlRXZlbnQ7ZSYmKGUu
cHJldmVudERlZmF1bHQ/ZS5wcmV2ZW50RGVmYXVsdCgpOiJ1bmtub3duIiE9dHlwZW9mIGUucmV0
dXJuVmFsdWUmJihlLnJldHVyblZhbHVlPSExKSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1hLnRo
YXRSZXR1cm5zVHJ1ZSl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMubmF0
aXZlRXZlbnQ7ZSYmKGUuc3RvcFByb3BhZ2F0aW9uP2Uuc3RvcFByb3BhZ2F0aW9uKCk6InVua25v
d24iIT10eXBlb2YgZS5jYW5jZWxCdWJibGUmJihlLmNhbmNlbEJ1YmJsZT0hMCksdGhpcy5pc1By
b3BhZ2F0aW9uU3RvcHBlZD1hLnRoYXRSZXR1cm5zVHJ1ZSl9LHBlcnNpc3Q6ZnVuY3Rpb24oKXt0
aGlzLmlzUGVyc2lzdGVudD1hLnRoYXRSZXR1cm5zVHJ1ZX0saXNQZXJzaXN0ZW50OmEudGhhdFJl
dHVybnNGYWxzZSxkZXN0cnVjdG9yOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb25zdHJ1Y3Rvci5J
bnRlcmZhY2U7Zm9yKHZhciB0IGluIGUpdGhpc1t0XT1udWxsO2Zvcih2YXIgbj0wO248cy5sZW5n
dGg7bisrKXRoaXNbc1tuXV09bnVsbH19KSxyLkludGVyZmFjZT11LHIuYXVnbWVudENsYXNzPWZ1
bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT1uLnByb3Rv
dHlwZTt2YXIgYT1uZXcgcjtvKGEsZS5wcm90b3R5cGUpLGUucHJvdG90eXBlPWEsZS5wcm90b3R5
cGUuY29uc3RydWN0b3I9ZSxlLkludGVyZmFjZT1vKHt9LG4uSW50ZXJmYWNlLHQpLGUuYXVnbWVu
dENsYXNzPW4uYXVnbWVudENsYXNzLGkuYWRkUG9vbGluZ1RvKGUsaS5mb3VyQXJndW1lbnRQb29s
ZXIpfSxpLmFkZFBvb2xpbmdUbyhyLGkuZm91ckFyZ3VtZW50UG9vbGVyKSx0LmV4cG9ydHM9cn0s
ezEyOToxMjksMTQyOjE0MiwxNDM6MTQzLDI0OjI0fV0sODE6W2Z1bmN0aW9uKGUsdCxuKXsidXNl
IHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtyZXR1cm4gby5jYWxsKHRoaXMsZSx0LG4scil9
dmFyIG89ZSg4NyksaT17cmVsYXRlZFRhcmdldDpudWxsfTtvLmF1Z21lbnRDbGFzcyhyLGkpLHQu
ZXhwb3J0cz1yfSx7ODc6ODd9XSw4MjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5j
dGlvbiByKGUsdCxuLHIpe3JldHVybiBvLmNhbGwodGhpcyxlLHQsbixyKX12YXIgbz1lKDgwKSxp
PXtkYXRhOm51bGx9O28uYXVnbWVudENsYXNzKHIsaSksdC5leHBvcnRzPXJ9LHs4MDo4MH1dLDgz
OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7cmV0dXJu
IG8uY2FsbCh0aGlzLGUsdCxuLHIpfXZhciBvPWUoODcpLGk9ZSg5OSksYT1lKDEwMCkscz1lKDEw
MSksdT17a2V5OmEsbG9jYXRpb246bnVsbCxjdHJsS2V5Om51bGwsc2hpZnRLZXk6bnVsbCxhbHRL
ZXk6bnVsbCxtZXRhS2V5Om51bGwscmVwZWF0Om51bGwsbG9jYWxlOm51bGwsZ2V0TW9kaWZpZXJT
dGF0ZTpzLGNoYXJDb2RlOmZ1bmN0aW9uKGUpe3JldHVybiJrZXlwcmVzcyI9PT1lLnR5cGU/aShl
KTowfSxrZXlDb2RlOmZ1bmN0aW9uKGUpe3JldHVybiJrZXlkb3duIj09PWUudHlwZXx8ImtleXVw
Ij09PWUudHlwZT9lLmtleUNvZGU6MH0sd2hpY2g6ZnVuY3Rpb24oZSl7cmV0dXJuImtleXByZXNz
Ij09PWUudHlwZT9pKGUpOiJrZXlkb3duIj09PWUudHlwZXx8ImtleXVwIj09PWUudHlwZT9lLmtl
eUNvZGU6MH19O28uYXVnbWVudENsYXNzKHIsdSksdC5leHBvcnRzPXJ9LHsxMDA6MTAwLDEwMTox
MDEsODc6ODcsOTk6OTl9XSw4NDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlv
biByKGUsdCxuLHIpe3JldHVybiBvLmNhbGwodGhpcyxlLHQsbixyKX12YXIgbz1lKDg3KSxpPWUo
OTApLGE9ZSgxMDEpLHM9e3NjcmVlblg6bnVsbCxzY3JlZW5ZOm51bGwsY2xpZW50WDpudWxsLGNs
aWVudFk6bnVsbCxjdHJsS2V5Om51bGwsc2hpZnRLZXk6bnVsbCxhbHRLZXk6bnVsbCxtZXRhS2V5
Om51bGwsZ2V0TW9kaWZpZXJTdGF0ZTphLGJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD1lLmJ1dHRv
bjtyZXR1cm4id2hpY2giaW4gZT90OjI9PT10PzI6ND09PXQ/MTowfSxidXR0b25zOm51bGwscmVs
YXRlZFRhcmdldDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZWxhdGVkVGFyZ2V0fHwoZS5mcm9tRWxl
bWVudD09PWUuc3JjRWxlbWVudD9lLnRvRWxlbWVudDplLmZyb21FbGVtZW50KX0scGFnZVg6ZnVu
Y3Rpb24oZSl7cmV0dXJuInBhZ2VYImluIGU/ZS5wYWdlWDplLmNsaWVudFgraS5jdXJyZW50U2Ny
b2xsTGVmdH0scGFnZVk6ZnVuY3Rpb24oZSl7cmV0dXJuInBhZ2VZImluIGU/ZS5wYWdlWTplLmNs
aWVudFkraS5jdXJyZW50U2Nyb2xsVG9wfX07by5hdWdtZW50Q2xhc3MocixzKSx0LmV4cG9ydHM9
cn0sezEwMToxMDEsODc6ODcsOTA6OTB9XSw4NTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0
IjtmdW5jdGlvbiByKGUsdCxuLHIpe3JldHVybiBvLmNhbGwodGhpcyxlLHQsbixyKX12YXIgbz1l
KDg3KSxpPWUoMTAxKSxhPXt0b3VjaGVzOm51bGwsdGFyZ2V0VG91Y2hlczpudWxsLGNoYW5nZWRU
b3VjaGVzOm51bGwsYWx0S2V5Om51bGwsbWV0YUtleTpudWxsLGN0cmxLZXk6bnVsbCxzaGlmdEtl
eTpudWxsLGdldE1vZGlmaWVyU3RhdGU6aX07by5hdWdtZW50Q2xhc3MocixhKSx0LmV4cG9ydHM9
cn0sezEwMToxMDEsODc6ODd9XSw4NjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5j
dGlvbiByKGUsdCxuLHIpe3JldHVybiBvLmNhbGwodGhpcyxlLHQsbixyKX12YXIgbz1lKDgwKSxp
PXtwcm9wZXJ0eU5hbWU6bnVsbCxlbGFwc2VkVGltZTpudWxsLHBzZXVkb0VsZW1lbnQ6bnVsbH07
by5hdWdtZW50Q2xhc3MocixpKSx0LmV4cG9ydHM9cn0sezgwOjgwfV0sODc6W2Z1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtyZXR1cm4gby5jYWxsKHRoaXMs
ZSx0LG4scil9dmFyIG89ZSg4MCksaT1lKDEwMiksYT17dmlldzpmdW5jdGlvbihlKXtpZihlLnZp
ZXcpcmV0dXJuIGUudmlldzt2YXIgdD1pKGUpO2lmKHQud2luZG93PT09dClyZXR1cm4gdDt2YXIg
bj10Lm93bmVyRG9jdW1lbnQ7cmV0dXJuIG4/bi5kZWZhdWx0Vmlld3x8bi5wYXJlbnRXaW5kb3c6
d2luZG93fSxkZXRhaWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGV0YWlsfHwwfX07by5hdWdtZW50
Q2xhc3MocixhKSx0LmV4cG9ydHM9cn0sezEwMjoxMDIsODA6ODB9XSw4ODpbZnVuY3Rpb24oZSx0
LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3JldHVybiBvLmNhbGwodGhpcyxl
LHQsbixyKX12YXIgbz1lKDg0KSxpPXtkZWx0YVg6ZnVuY3Rpb24oZSl7cmV0dXJuImRlbHRhWCJp
biBlP2UuZGVsdGFYOiJ3aGVlbERlbHRhWCJpbiBlPy1lLndoZWVsRGVsdGFYOjB9LGRlbHRhWTpm
dW5jdGlvbihlKXtyZXR1cm4iZGVsdGFZImluIGU/ZS5kZWx0YVk6IndoZWVsRGVsdGFZImluIGU/
LWUud2hlZWxEZWx0YVk6IndoZWVsRGVsdGEiaW4gZT8tZS53aGVlbERlbHRhOjB9LGRlbHRhWjpu
dWxsLGRlbHRhTW9kZTpudWxsfTtvLmF1Z21lbnRDbGFzcyhyLGkpLHQuZXhwb3J0cz1yfSx7ODQ6
ODR9XSw4OTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDExMiksbz0oZSgx
MzcpLHt9KSxpPXtyZWluaXRpYWxpemVUcmFuc2FjdGlvbjpmdW5jdGlvbigpe3RoaXMudHJhbnNh
Y3Rpb25XcmFwcGVycz10aGlzLmdldFRyYW5zYWN0aW9uV3JhcHBlcnMoKSx0aGlzLndyYXBwZXJJ
bml0RGF0YT90aGlzLndyYXBwZXJJbml0RGF0YS5sZW5ndGg9MDp0aGlzLndyYXBwZXJJbml0RGF0
YT1bXSx0aGlzLl9pc0luVHJhbnNhY3Rpb249ITF9LF9pc0luVHJhbnNhY3Rpb246ITEsZ2V0VHJh
bnNhY3Rpb25XcmFwcGVyczpudWxsLGlzSW5UcmFuc2FjdGlvbjpmdW5jdGlvbigpe3JldHVybiEh
dGhpcy5faXNJblRyYW5zYWN0aW9ufSxwZXJmb3JtOmZ1bmN0aW9uKGUsdCxuLG8saSxhLHMsdSl7
dGhpcy5pc0luVHJhbnNhY3Rpb24oKSYmcigiMjciKTt2YXIgbCxjO3RyeXt0aGlzLl9pc0luVHJh
bnNhY3Rpb249ITAsbD0hMCx0aGlzLmluaXRpYWxpemVBbGwoMCksYz1lLmNhbGwodCxuLG8saSxh
LHMsdSksbD0hMX1maW5hbGx5e3RyeXtpZihsKXRyeXt0aGlzLmNsb3NlQWxsKDApfWNhdGNoKGUp
e31lbHNlIHRoaXMuY2xvc2VBbGwoMCl9ZmluYWxseXt0aGlzLl9pc0luVHJhbnNhY3Rpb249ITF9
fXJldHVybiBjfSxpbml0aWFsaXplQWxsOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyYW5z
YWN0aW9uV3JhcHBlcnMsbj1lO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3RyeXt0aGlzLndy
YXBwZXJJbml0RGF0YVtuXT1vLHRoaXMud3JhcHBlckluaXREYXRhW25dPXIuaW5pdGlhbGl6ZT9y
LmluaXRpYWxpemUuY2FsbCh0aGlzKTpudWxsfWZpbmFsbHl7aWYodGhpcy53cmFwcGVySW5pdERh
dGFbbl09PT1vKXRyeXt0aGlzLmluaXRpYWxpemVBbGwobisxKX1jYXRjaChlKXt9fX19LGNsb3Nl
QWxsOmZ1bmN0aW9uKGUpe3RoaXMuaXNJblRyYW5zYWN0aW9uKCl8fHIoIjI4Iik7Zm9yKHZhciB0
PXRoaXMudHJhbnNhY3Rpb25XcmFwcGVycyxuPWU7bjx0Lmxlbmd0aDtuKyspe3ZhciBpLGE9dFtu
XSxzPXRoaXMud3JhcHBlckluaXREYXRhW25dO3RyeXtpPSEwLHMhPT1vJiZhLmNsb3NlJiZhLmNs
b3NlLmNhbGwodGhpcyxzKSxpPSExfWZpbmFsbHl7aWYoaSl0cnl7dGhpcy5jbG9zZUFsbChuKzEp
fWNhdGNoKGUpe319fXRoaXMud3JhcHBlckluaXREYXRhLmxlbmd0aD0wfX07dC5leHBvcnRzPWl9
LHsxMTI6MTEyLDEzNzoxMzd9XSw5MDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIg
cj17Y3VycmVudFNjcm9sbExlZnQ6MCxjdXJyZW50U2Nyb2xsVG9wOjAscmVmcmVzaFNjcm9sbFZh
bHVlczpmdW5jdGlvbihlKXtyLmN1cnJlbnRTY3JvbGxMZWZ0PWUueCxyLmN1cnJlbnRTY3JvbGxU
b3A9ZS55fX07dC5leHBvcnRzPXJ9LHt9XSw5MTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0
IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIG51bGw9PXQmJm8oIjMwIiksbnVsbD09ZT90OkFycmF5
LmlzQXJyYXkoZSk/QXJyYXkuaXNBcnJheSh0KT8oZS5wdXNoLmFwcGx5KGUsdCksZSk6KGUucHVz
aCh0KSxlKTpBcnJheS5pc0FycmF5KHQpP1tlXS5jb25jYXQodCk6W2UsdF19dmFyIG89ZSgxMTIp
O2UoMTM3KTt0LmV4cG9ydHM9cn0sezExMjoxMTIsMTM3OjEzN31dLDkyOltmdW5jdGlvbihlLHQs
bil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7Zm9yKHZhciB0PTEsbj0wLHI9MCxpPWUubGVu
Z3RoLGE9LTQmaTtyPGE7KXtmb3IodmFyIHM9TWF0aC5taW4ocis0MDk2LGEpO3I8cztyKz00KW4r
PSh0Kz1lLmNoYXJDb2RlQXQocikpKyh0Kz1lLmNoYXJDb2RlQXQocisxKSkrKHQrPWUuY2hhckNv
ZGVBdChyKzIpKSsodCs9ZS5jaGFyQ29kZUF0KHIrMykpO3QlPW8sbiU9b31mb3IoO3I8aTtyKysp
bis9dCs9ZS5jaGFyQ29kZUF0KHIpO3JldHVybiB0JT1vLG4lPW8sdHxuPDwxNn12YXIgbz02NTUy
MTt0LmV4cG9ydHM9cn0se31dLDkzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBy
PWZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgTVNBcHAmJk1TQXBwLmV4ZWNV
bnNhZmVMb2NhbEZ1bmN0aW9uP2Z1bmN0aW9uKHQsbixyLG8pe01TQXBwLmV4ZWNVbnNhZmVMb2Nh
bEZ1bmN0aW9uKGZ1bmN0aW9uKCl7cmV0dXJuIGUodCxuLHIsbyl9KX06ZX07dC5leHBvcnRzPXJ9
LHt9XSw5NDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXty
ZXR1cm4gbnVsbD09dHx8ImJvb2xlYW4iPT10eXBlb2YgdHx8IiI9PT10PyIiOmlzTmFOKHQpfHww
PT09dHx8aS5oYXNPd25Qcm9wZXJ0eShlKSYmaVtlXT8iIit0Oigic3RyaW5nIj09dHlwZW9mIHQm
Jih0PXQudHJpbSgpKSx0KyJweCIpfXZhciBvPWUoNCksaT0oZSgxNDIpLG8uaXNVbml0bGVzc051
bWJlcik7dC5leHBvcnRzPXJ9LHsxNDI6MTQyLDQ6NH1dLDk1OltmdW5jdGlvbihlLHQsbil7InVz
ZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9IiIrZSxuPWkuZXhlYyh0KTtpZighbilyZXR1
cm4gdDt2YXIgcixvPSIiLGE9MCxzPTA7Zm9yKGE9bi5pbmRleDthPHQubGVuZ3RoO2ErKyl7c3dp
dGNoKHQuY2hhckNvZGVBdChhKSl7Y2FzZSAzNDpyPSImcXVvdDsiO2JyZWFrO2Nhc2UgMzg6cj0i
JmFtcDsiO2JyZWFrO2Nhc2UgMzk6cj0iJiN4Mjc7IjticmVhaztjYXNlIDYwOnI9IiZsdDsiO2Jy
ZWFrO2Nhc2UgNjI6cj0iJmd0OyI7YnJlYWs7ZGVmYXVsdDpjb250aW51ZX1zIT09YSYmKG8rPXQu
c3Vic3RyaW5nKHMsYSkpLHM9YSsxLG8rPXJ9cmV0dXJuIHMhPT1hP28rdC5zdWJzdHJpbmcocyxh
KTpvfWZ1bmN0aW9uIG8oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZXx8Im51bWJlciI9PXR5
cGVvZiBlPyIiK2U6cihlKX12YXIgaT0vWyInJjw+XS87dC5leHBvcnRzPW99LHt9XSw5NjpbZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKG51bGw9PWUpcmV0dXJu
IG51bGw7aWYoMT09PWUubm9kZVR5cGUpcmV0dXJuIGU7dmFyIHQ9YS5nZXQoZSk7aWYodClyZXR1
cm4gdD1zKHQpLHQ/aS5nZXROb2RlRnJvbUluc3RhbmNlKHQpOm51bGw7ImZ1bmN0aW9uIj09dHlw
ZW9mIGUucmVuZGVyP28oIjQ0Iik6bygiNDUiLE9iamVjdC5rZXlzKGUpKX12YXIgbz1lKDExMiks
aT0oZSgxMTkpLGUoMzMpKSxhPWUoNTcpLHM9ZSgxMDMpO2UoMTM3KSxlKDE0Mik7dC5leHBvcnRz
PXJ9LHsxMDM6MTAzLDExMjoxMTIsMTE5OjExOSwxMzc6MTM3LDE0MjoxNDIsMzM6MzMsNTc6NTd9
XSw5NzpbZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbihuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24g
cihlLHQsbixyKXtpZihlJiYib2JqZWN0Ij09dHlwZW9mIGUpe3ZhciBvPWU7dm9pZCAwPT09b1tu
XSYmbnVsbCE9dCYmKG9bbl09dCl9fWZ1bmN0aW9uIG8oZSx0KXtpZihudWxsPT1lKXJldHVybiBl
O3ZhciBuPXt9O3JldHVybiBpKGUscixuKSxufXZhciBpPShlKDIyKSxlKDExNykpO2UoMTQyKTt2
b2lkIDAhPT1uJiZuLmVudix0LmV4cG9ydHM9b30pLmNhbGwodGhpcyx2b2lkIDApfSx7MTE3OjEx
NywxNDI6MTQyLDIyOjIyfV0sOTg6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rp
b24gcihlLHQsbil7QXJyYXkuaXNBcnJheShlKT9lLmZvckVhY2godCxuKTplJiZ0LmNhbGwobixl
KX10LmV4cG9ydHM9cn0se31dLDk5OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0
aW9uIHIoZSl7dmFyIHQsbj1lLmtleUNvZGU7cmV0dXJuImNoYXJDb2RlImluIGU/MD09PSh0PWUu
Y2hhckNvZGUpJiYxMz09PW4mJih0PTEzKTp0PW4sdD49MzJ8fDEzPT09dD90OjB9dC5leHBvcnRz
PXJ9LHt9XSwxMDA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtp
ZihlLmtleSl7dmFyIHQ9aVtlLmtleV18fGUua2V5O2lmKCJVbmlkZW50aWZpZWQiIT09dClyZXR1
cm4gdH1pZigia2V5cHJlc3MiPT09ZS50eXBlKXt2YXIgbj1vKGUpO3JldHVybiAxMz09PW4/IkVu
dGVyIjpTdHJpbmcuZnJvbUNoYXJDb2RlKG4pfXJldHVybiJrZXlkb3duIj09PWUudHlwZXx8Imtl
eXVwIj09PWUudHlwZT9hW2Uua2V5Q29kZV18fCJVbmlkZW50aWZpZWQiOiIifXZhciBvPWUoOTkp
LGk9e0VzYzoiRXNjYXBlIixTcGFjZWJhcjoiICIsTGVmdDoiQXJyb3dMZWZ0IixVcDoiQXJyb3dV
cCIsUmlnaHQ6IkFycm93UmlnaHQiLERvd246IkFycm93RG93biIsRGVsOiJEZWxldGUiLFdpbjoi
T1MiLE1lbnU6IkNvbnRleHRNZW51IixBcHBzOiJDb250ZXh0TWVudSIsU2Nyb2xsOiJTY3JvbGxM
b2NrIixNb3pQcmludGFibGVLZXk6IlVuaWRlbnRpZmllZCJ9LGE9ezg6IkJhY2tzcGFjZSIsOToi
VGFiIiwxMjoiQ2xlYXIiLDEzOiJFbnRlciIsMTY6IlNoaWZ0IiwxNzoiQ29udHJvbCIsMTg6IkFs
dCIsMTk6IlBhdXNlIiwyMDoiQ2Fwc0xvY2siLDI3OiJFc2NhcGUiLDMyOiIgIiwzMzoiUGFnZVVw
IiwzNDoiUGFnZURvd24iLDM1OiJFbmQiLDM2OiJIb21lIiwzNzoiQXJyb3dMZWZ0IiwzODoiQXJy
b3dVcCIsMzk6IkFycm93UmlnaHQiLDQwOiJBcnJvd0Rvd24iLDQ1OiJJbnNlcnQiLDQ2OiJEZWxl
dGUiLDExMjoiRjEiLDExMzoiRjIiLDExNDoiRjMiLDExNToiRjQiLDExNjoiRjUiLDExNzoiRjYi
LDExODoiRjciLDExOToiRjgiLDEyMDoiRjkiLDEyMToiRjEwIiwxMjI6IkYxMSIsMTIzOiJGMTIi
LDE0NDoiTnVtTG9jayIsMTQ1OiJTY3JvbGxMb2NrIiwyMjQ6Ik1ldGEifTt0LmV4cG9ydHM9cn0s
ezk5Ojk5fV0sMTAxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7
dmFyIHQ9dGhpcyxuPXQubmF0aXZlRXZlbnQ7aWYobi5nZXRNb2RpZmllclN0YXRlKXJldHVybiBu
LmdldE1vZGlmaWVyU3RhdGUoZSk7dmFyIHI9aVtlXTtyZXR1cm4hIXImJiEhbltyXX1mdW5jdGlv
biBvKGUpe3JldHVybiByfXZhciBpPXtBbHQ6ImFsdEtleSIsQ29udHJvbDoiY3RybEtleSIsTWV0
YToibWV0YUtleSIsU2hpZnQ6InNoaWZ0S2V5In07dC5leHBvcnRzPW99LHt9XSwxMDI6W2Z1bmN0
aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lLnRhcmdldHx8ZS5z
cmNFbGVtZW50fHx3aW5kb3c7cmV0dXJuIHQuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQmJih0PXQu
Y29ycmVzcG9uZGluZ1VzZUVsZW1lbnQpLDM9PT10Lm5vZGVUeXBlP3QucGFyZW50Tm9kZTp0fXQu
ZXhwb3J0cz1yfSx7fV0sMTAzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9u
IHIoZSl7Zm9yKHZhciB0Oyh0PWUuX3JlbmRlcmVkTm9kZVR5cGUpPT09by5DT01QT1NJVEU7KWU9
ZS5fcmVuZGVyZWRDb21wb25lbnQ7cmV0dXJuIHQ9PT1vLkhPU1Q/ZS5fcmVuZGVyZWRDb21wb25l
bnQ6dD09PW8uRU1QVFk/bnVsbDp2b2lkIDB9dmFyIG89ZSg2Mik7dC5leHBvcnRzPXJ9LHs2Mjo2
Mn1dLDEwNDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0
PWUmJihvJiZlW29dfHxlW2ldKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gdH12YXIg
bz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3IsaT0iQEBpdGVyYXRv
ciI7dC5leHBvcnRzPXJ9LHt9XSwxMDU6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVu
Y3Rpb24gcihlKXtmb3IoO2UmJmUuZmlyc3RDaGlsZDspZT1lLmZpcnN0Q2hpbGQ7cmV0dXJuIGV9
ZnVuY3Rpb24gbyhlKXtmb3IoO2U7KXtpZihlLm5leHRTaWJsaW5nKXJldHVybiBlLm5leHRTaWJs
aW5nO2U9ZS5wYXJlbnROb2RlfX1mdW5jdGlvbiBpKGUsdCl7Zm9yKHZhciBuPXIoZSksaT0wLGE9
MDtuOyl7aWYoMz09PW4ubm9kZVR5cGUpe2lmKGE9aStuLnRleHRDb250ZW50Lmxlbmd0aCxpPD10
JiZhPj10KXJldHVybntub2RlOm4sb2Zmc2V0OnQtaX07aT1hfW49cihvKG4pKX19dC5leHBvcnRz
PWl9LHt9XSwxMDY6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3Jl
dHVybiFpJiZvLmNhblVzZURPTSYmKGk9InRleHRDb250ZW50ImluIGRvY3VtZW50LmRvY3VtZW50
RWxlbWVudD8idGV4dENvbnRlbnQiOiJpbm5lclRleHQiKSxpfXZhciBvPWUoMTIzKSxpPW51bGw7
dC5leHBvcnRzPXJ9LHsxMjM6MTIzfV0sMTA3OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3Qi
O2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj17fTtyZXR1cm4gbltlLnRvTG93ZXJDYXNlKCldPXQudG9M
b3dlckNhc2UoKSxuWyJXZWJraXQiK2VdPSJ3ZWJraXQiK3QsblsiTW96IitlXT0ibW96Iit0LG5b
Im1zIitlXT0iTVMiK3QsblsiTyIrZV09Im8iK3QudG9Mb3dlckNhc2UoKSxufWZ1bmN0aW9uIG8o
ZSl7aWYoc1tlXSlyZXR1cm4gc1tlXTtpZighYVtlXSlyZXR1cm4gZTt2YXIgdD1hW2VdO2Zvcih2
YXIgbiBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkobikmJm4gaW4gdSlyZXR1cm4gc1tlXT10W25d
O3JldHVybiIifXZhciBpPWUoMTIzKSxhPXthbmltYXRpb25lbmQ6cigiQW5pbWF0aW9uIiwiQW5p
bWF0aW9uRW5kIiksYW5pbWF0aW9uaXRlcmF0aW9uOnIoIkFuaW1hdGlvbiIsIkFuaW1hdGlvbkl0
ZXJhdGlvbiIpLGFuaW1hdGlvbnN0YXJ0OnIoIkFuaW1hdGlvbiIsIkFuaW1hdGlvblN0YXJ0Iiks
dHJhbnNpdGlvbmVuZDpyKCJUcmFuc2l0aW9uIiwiVHJhbnNpdGlvbkVuZCIpfSxzPXt9LHU9e307
aS5jYW5Vc2VET00mJih1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlLCJBbmlt
YXRpb25FdmVudCJpbiB3aW5kb3d8fChkZWxldGUgYS5hbmltYXRpb25lbmQuYW5pbWF0aW9uLGRl
bGV0ZSBhLmFuaW1hdGlvbml0ZXJhdGlvbi5hbmltYXRpb24sZGVsZXRlIGEuYW5pbWF0aW9uc3Rh
cnQuYW5pbWF0aW9uKSwiVHJhbnNpdGlvbkV2ZW50ImluIHdpbmRvd3x8ZGVsZXRlIGEudHJhbnNp
dGlvbmVuZC50cmFuc2l0aW9uKSx0LmV4cG9ydHM9b30sezEyMzoxMjN9XSwxMDg6W2Z1bmN0aW9u
KGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihlKXt2YXIgdD1lLmdldE5hbWUo
KTtpZih0KXJldHVybiIgQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCIrdCsiYC4ifXJldHVy
biIifWZ1bmN0aW9uIG8oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUmJnZvaWQgMCE9PWUu
cHJvdG90eXBlJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5wcm90b3R5cGUubW91bnRDb21wb25lbnQm
JiJmdW5jdGlvbiI9PXR5cGVvZiBlLnByb3RvdHlwZS5yZWNlaXZlQ29tcG9uZW50fWZ1bmN0aW9u
IGkoZSx0KXt2YXIgbjtpZihudWxsPT09ZXx8ITE9PT1lKW49bC5jcmVhdGUoaSk7ZWxzZSBpZigi
b2JqZWN0Ij09dHlwZW9mIGUpe3ZhciBzPWUsdT1zLnR5cGU7aWYoImZ1bmN0aW9uIiE9dHlwZW9m
IHUmJiJzdHJpbmciIT10eXBlb2YgdSl7dmFyIGQ9IiI7ZCs9cihzLl9vd25lciksYSgiMTMwIixu
dWxsPT11P3U6dHlwZW9mIHUsZCl9InN0cmluZyI9PXR5cGVvZiBzLnR5cGU/bj1jLmNyZWF0ZUlu
dGVybmFsQ29tcG9uZW50KHMpOm8ocy50eXBlKT8obj1uZXcgcy50eXBlKHMpLG4uZ2V0SG9zdE5v
ZGV8fChuLmdldEhvc3ROb2RlPW4uZ2V0TmF0aXZlTm9kZSkpOm49bmV3IHAocyl9ZWxzZSJzdHJp
bmciPT10eXBlb2YgZXx8Im51bWJlciI9PXR5cGVvZiBlP249Yy5jcmVhdGVJbnN0YW5jZUZvclRl
eHQoZSk6YSgiMTMxIix0eXBlb2YgZSk7cmV0dXJuIG4uX21vdW50SW5kZXg9MCxuLl9tb3VudElt
YWdlPW51bGwsbn12YXIgYT1lKDExMikscz1lKDE0MyksdT1lKDI5KSxsPWUoNDkpLGM9ZSg1NCks
cD0oZSgxMjEpLGUoMTM3KSxlKDE0MiksZnVuY3Rpb24oZSl7dGhpcy5jb25zdHJ1Y3QoZSl9KTtz
KHAucHJvdG90eXBlLHUse19pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50Oml9KSx0LmV4cG9ydHM9
aX0sezExMjoxMTIsMTIxOjEyMSwxMzc6MTM3LDE0MjoxNDIsMTQzOjE0MywyOToyOSw0OTo0OSw1
NDo1NH1dLDEwOTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7
aWYoIWkuY2FuVXNlRE9NfHx0JiYhKCJhZGRFdmVudExpc3RlbmVyImluIGRvY3VtZW50KSlyZXR1
cm4hMTt2YXIgbj0ib24iK2Uscj1uIGluIGRvY3VtZW50O2lmKCFyKXt2YXIgYT1kb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJkaXYiKTthLnNldEF0dHJpYnV0ZShuLCJyZXR1cm47Iikscj0iZnVuY3Rp
b24iPT10eXBlb2YgYVtuXX1yZXR1cm4hciYmbyYmIndoZWVsIj09PWUmJihyPWRvY3VtZW50Lmlt
cGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoIkV2ZW50cy53aGVlbCIsIjMuMCIpKSxyfXZhciBvLGk9
ZSgxMjMpO2kuY2FuVXNlRE9NJiYobz1kb2N1bWVudC5pbXBsZW1lbnRhdGlvbiYmZG9jdW1lbnQu
aW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSYmITAhPT1kb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5o
YXNGZWF0dXJlKCIiLCIiKSksdC5leHBvcnRzPXJ9LHsxMjM6MTIzfV0sMTEwOltmdW5jdGlvbihl
LHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZSYmZS5ub2RlTmFtZSYmZS5u
b2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT10PyEhb1tlLnR5cGVdOiJ0ZXh0
YXJlYSI9PT10fXZhciBvPXtjb2xvcjohMCxkYXRlOiEwLGRhdGV0aW1lOiEwLCJkYXRldGltZS1s
b2NhbCI6ITAsZW1haWw6ITAsbW9udGg6ITAsbnVtYmVyOiEwLHBhc3N3b3JkOiEwLHJhbmdlOiEw
LHNlYXJjaDohMCx0ZWw6ITAsdGV4dDohMCx0aW1lOiEwLHVybDohMCx3ZWVrOiEwfTt0LmV4cG9y
dHM9cn0se31dLDExMTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUp
e3JldHVybiciJytvKGUpKyciJ312YXIgbz1lKDk1KTt0LmV4cG9ydHM9cn0sezk1Ojk1fV0sMTEy
OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7Zm9yKHZhciB0PWFy
Z3VtZW50cy5sZW5ndGgtMSxuPSJNaW5pZmllZCBSZWFjdCBlcnJvciAjIitlKyI7IHZpc2l0IGh0
dHA6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/aW52
YXJpYW50PSIrZSxyPTA7cjx0O3IrKyluKz0iJmFyZ3NbXT0iK2VuY29kZVVSSUNvbXBvbmVudChh
cmd1bWVudHNbcisxXSk7bis9IiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1t
aW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhl
bHBmdWwgd2FybmluZ3MuIjt2YXIgbz1uZXcgRXJyb3Iobik7dGhyb3cgby5uYW1lPSJJbnZhcmlh
bnQgVmlvbGF0aW9uIixvLmZyYW1lc1RvUG9wPTEsb310LmV4cG9ydHM9cn0se31dLDExMzpbZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDYwKTt0LmV4cG9ydHM9ci5yZW5kZXJT
dWJ0cmVlSW50b0NvbnRhaW5lcn0sezYwOjYwfV0sMTE0OltmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO3ZhciByLG89ZSgxMjMpLGk9ZSgxMCksYT0vXlsgXHJcblx0XGZdLyxzPS88KCEtLXxs
aW5rfG5vc2NyaXB0fG1ldGF8c2NyaXB0fHN0eWxlKVsgXHJcblx0XGZcLz5dLyx1PWUoOTMpLGw9
dShmdW5jdGlvbihlLHQpe2lmKGUubmFtZXNwYWNlVVJJIT09aS5zdmd8fCJpbm5lckhUTUwiaW4g
ZSllLmlubmVySFRNTD10O2Vsc2V7cj1yfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxy
LmlubmVySFRNTD0iPHN2Zz4iK3QrIjwvc3ZnPiI7Zm9yKHZhciBuPXIuZmlyc3RDaGlsZDtuLmZp
cnN0Q2hpbGQ7KWUuYXBwZW5kQ2hpbGQobi5maXJzdENoaWxkKX19KTtpZihvLmNhblVzZURPTSl7
dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yy5pbm5lckhUTUw9IiAiLCIiPT09
Yy5pbm5lckhUTUwmJihsPWZ1bmN0aW9uKGUsdCl7aWYoZS5wYXJlbnROb2RlJiZlLnBhcmVudE5v
ZGUucmVwbGFjZUNoaWxkKGUsZSksYS50ZXN0KHQpfHwiPCI9PT10WzBdJiZzLnRlc3QodCkpe2Uu
aW5uZXJIVE1MPVN0cmluZy5mcm9tQ2hhckNvZGUoNjUyNzkpK3Q7dmFyIG49ZS5maXJzdENoaWxk
OzE9PT1uLmRhdGEubGVuZ3RoP2UucmVtb3ZlQ2hpbGQobik6bi5kZWxldGVEYXRhKDAsMSl9ZWxz
ZSBlLmlubmVySFRNTD10fSksYz1udWxsfXQuZXhwb3J0cz1sfSx7MTA6MTAsMTIzOjEyMyw5Mzo5
M31dLDExNTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDEyMyksbz1lKDk1
KSxpPWUoMTE0KSxhPWZ1bmN0aW9uKGUsdCl7aWYodCl7dmFyIG49ZS5maXJzdENoaWxkO2lmKG4m
Jm49PT1lLmxhc3RDaGlsZCYmMz09PW4ubm9kZVR5cGUpcmV0dXJuIHZvaWQobi5ub2RlVmFsdWU9
dCl9ZS50ZXh0Q29udGVudD10fTtyLmNhblVzZURPTSYmKCJ0ZXh0Q29udGVudCJpbiBkb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnR8fChhPWZ1bmN0aW9uKGUsdCl7aWYoMz09PWUubm9kZVR5cGUpcmV0
dXJuIHZvaWQoZS5ub2RlVmFsdWU9dCk7aShlLG8odCkpfSkpLHQuZXhwb3J0cz1hfSx7MTE0OjEx
NCwxMjM6MTIzLDk1Ojk1fV0sMTE2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0
aW9uIHIoZSx0KXt2YXIgbj1udWxsPT09ZXx8ITE9PT1lLHI9bnVsbD09PXR8fCExPT09dDtpZihu
fHxyKXJldHVybiBuPT09cjt2YXIgbz10eXBlb2YgZSxpPXR5cGVvZiB0O3JldHVybiJzdHJpbmci
PT09b3x8Im51bWJlciI9PT1vPyJzdHJpbmciPT09aXx8Im51bWJlciI9PT1pOiJvYmplY3QiPT09
aSYmZS50eXBlPT09dC50eXBlJiZlLmtleT09PXQua2V5fXQuZXhwb3J0cz1yfSx7fV0sMTE3Oltm
dW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZSYmIm9i
amVjdCI9PXR5cGVvZiBlJiZudWxsIT1lLmtleT9sLmVzY2FwZShlLmtleSk6dC50b1N0cmluZygz
Nil9ZnVuY3Rpb24gbyhlLHQsbixpKXt2YXIgZD10eXBlb2YgZTtpZigidW5kZWZpbmVkIiE9PWQm
JiJib29sZWFuIiE9PWR8fChlPW51bGwpLG51bGw9PT1lfHwic3RyaW5nIj09PWR8fCJudW1iZXIi
PT09ZHx8Im9iamVjdCI9PT1kJiZlLiQkdHlwZW9mPT09cylyZXR1cm4gbihpLGUsIiI9PT10P2Mr
cihlLDApOnQpLDE7dmFyIGYsaCxtPTAsdj0iIj09PXQ/Yzp0K3A7aWYoQXJyYXkuaXNBcnJheShl
KSlmb3IodmFyIGc9MDtnPGUubGVuZ3RoO2crKylmPWVbZ10saD12K3IoZixnKSxtKz1vKGYsaCxu
LGkpO2Vsc2V7dmFyIHk9dShlKTtpZih5KXt2YXIgXyxDPXkuY2FsbChlKTtpZih5IT09ZS5lbnRy
aWVzKWZvcih2YXIgYj0wOyEoXz1DLm5leHQoKSkuZG9uZTspZj1fLnZhbHVlLGg9dityKGYsYisr
KSxtKz1vKGYsaCxuLGkpO2Vsc2UgZm9yKDshKF89Qy5uZXh0KCkpLmRvbmU7KXt2YXIgRT1fLnZh
bHVlO0UmJihmPUVbMV0saD12K2wuZXNjYXBlKEVbMF0pK3ArcihmLDApLG0rPW8oZixoLG4saSkp
fX1lbHNlIGlmKCJvYmplY3QiPT09ZCl7dmFyIHg9U3RyaW5nKGUpO2EoIjMxIiwiW29iamVjdCBP
YmplY3RdIj09PXg/Im9iamVjdCB3aXRoIGtleXMgeyIrT2JqZWN0LmtleXMoZSkuam9pbigiLCAi
KSsifSI6eCwiIil9fXJldHVybiBtfWZ1bmN0aW9uIGkoZSx0LG4pe3JldHVybiBudWxsPT1lPzA6
byhlLCIiLHQsbil9dmFyIGE9ZSgxMTIpLHM9KGUoMTE5KSxlKDQ4KSksdT1lKDEwNCksbD0oZSgx
MzcpLGUoMjIpKSxjPShlKDE0MiksIi4iKSxwPSI6Ijt0LmV4cG9ydHM9aX0sezEwNDoxMDQsMTEy
OjExMiwxMTk6MTE5LDEzNzoxMzcsMTQyOjE0MiwyMjoyMiw0ODo0OH1dLDExODpbZnVuY3Rpb24o
ZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj0oZSgxNDMpLGUoMTI5KSksbz0oZSgxNDIpLHIpO3Qu
ZXhwb3J0cz1vfSx7MTI5OjEyOSwxNDI6MTQyLDE0MzoxNDN9XSwxMTk6W2Z1bmN0aW9uKHQsbixy
KXsidXNlIHN0cmljdCI7dmFyIG89ZS5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9Z
T1VfV0lMTF9CRV9GSVJFRDtuLmV4cG9ydHM9by5SZWFjdEN1cnJlbnRPd25lcn0se31dLDEyMDpb
ZnVuY3Rpb24odCxuLHIpeyJ1c2Ugc3RyaWN0IjtuLmV4cG9ydHM9ZX0se31dLDEyMTpbZnVuY3Rp
b24odCxuLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbz1lLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1Rf
VVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEO24uZXhwb3J0cz1vLmdldE5leHREZWJ1Z0lEfSx7fV0s
MTIyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTI5KSxvPXtsaXN0ZW46
ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlLmFkZEV2ZW50TGlzdGVuZXI/KGUuYWRkRXZlbnRMaXN0
ZW5lcih0LG4sITEpLHtyZW1vdmU6ZnVuY3Rpb24oKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxu
LCExKX19KTplLmF0dGFjaEV2ZW50PyhlLmF0dGFjaEV2ZW50KCJvbiIrdCxuKSx7cmVtb3ZlOmZ1
bmN0aW9uKCl7ZS5kZXRhY2hFdmVudCgib24iK3Qsbil9fSk6dm9pZCAwfSxjYXB0dXJlOmZ1bmN0
aW9uKGUsdCxuKXtyZXR1cm4gZS5hZGRFdmVudExpc3RlbmVyPyhlLmFkZEV2ZW50TGlzdGVuZXIo
dCxuLCEwKSx7cmVtb3ZlOmZ1bmN0aW9uKCl7ZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbiwhMCl9
fSk6e3JlbW92ZTpyfX0scmVnaXN0ZXJEZWZhdWx0OmZ1bmN0aW9uKCl7fX07dC5leHBvcnRzPW99
LHsxMjk6MTI5fV0sMTIzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPSEoInVu
ZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3d8fCF3aW5kb3cuZG9jdW1lbnR8fCF3aW5kb3cuZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCksbz17Y2FuVXNlRE9NOnIsY2FuVXNlV29ya2VyczoidW5kZWZpbmVk
IiE9dHlwZW9mIFdvcmtlcixjYW5Vc2VFdmVudExpc3RlbmVyczpyJiYhKCF3aW5kb3cuYWRkRXZl
bnRMaXN0ZW5lciYmIXdpbmRvdy5hdHRhY2hFdmVudCksY2FuVXNlVmlld3BvcnQ6ciYmISF3aW5k
b3cuc2NyZWVuLGlzSW5Xb3JrZXI6IXJ9O3QuZXhwb3J0cz1vfSx7fV0sMTI0OltmdW5jdGlvbihl
LHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUucmVwbGFjZShvLGZ1bmN0
aW9uKGUsdCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX0pfXZhciBvPS8tKC4pL2c7dC5leHBvcnRz
PXJ9LHt9XSwxMjU6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXty
ZXR1cm4gbyhlLnJlcGxhY2UoaSwibXMtIikpfXZhciBvPWUoMTI0KSxpPS9eLW1zLS87dC5leHBv
cnRzPXJ9LHsxMjQ6MTI0fV0sMTI2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0
aW9uIHIoZSx0KXtyZXR1cm4hKCFlfHwhdCkmJihlPT09dHx8IW8oZSkmJihvKHQpP3IoZSx0LnBh
cmVudE5vZGUpOiJjb250YWlucyJpbiBlP2UuY29udGFpbnModCk6ISFlLmNvbXBhcmVEb2N1bWVu
dFBvc2l0aW9uJiYhISgxNiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpKSkpfXZhciBvPWUo
MTM5KTt0LmV4cG9ydHM9cn0sezEzOToxMzl9XSwxMjc6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lLmxlbmd0aDtpZigoQXJyYXkuaXNBcnJheShlKXx8
Im9iamVjdCIhPXR5cGVvZiBlJiYiZnVuY3Rpb24iIT10eXBlb2YgZSkmJmEoITEpLCJudW1iZXIi
IT10eXBlb2YgdCYmYSghMSksMD09PXR8fHQtMSBpbiBlfHxhKCExKSwiZnVuY3Rpb24iPT10eXBl
b2YgZS5jYWxsZWUmJmEoITEpLGUuaGFzT3duUHJvcGVydHkpdHJ5e3JldHVybiBBcnJheS5wcm90
b3R5cGUuc2xpY2UuY2FsbChlKX1jYXRjaChlKXt9Zm9yKHZhciBuPUFycmF5KHQpLHI9MDtyPHQ7
cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBvKGUpe3JldHVybiEhZSYmKCJvYmplY3Qi
PT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpJiYibGVuZ3RoImluIGUmJiEoInNldElu
dGVydmFsImluIGUpJiYibnVtYmVyIiE9dHlwZW9mIGUubm9kZVR5cGUmJihBcnJheS5pc0FycmF5
KGUpfHwiY2FsbGVlImluIGV8fCJpdGVtImluIGUpfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIG8oZSk/
QXJyYXkuaXNBcnJheShlKT9lLnNsaWNlKCk6cihlKTpbZV19dmFyIGE9ZSgxMzcpO3QuZXhwb3J0
cz1pfSx7MTM3OjEzN31dLDEyODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlv
biByKGUpe3ZhciB0PWUubWF0Y2goYyk7cmV0dXJuIHQmJnRbMV0udG9Mb3dlckNhc2UoKX1mdW5j
dGlvbiBvKGUsdCl7dmFyIG49bDtsfHx1KCExKTt2YXIgbz1yKGUpLGk9byYmcyhvKTtpZihpKXtu
LmlubmVySFRNTD1pWzFdK2UraVsyXTtmb3IodmFyIGM9aVswXTtjLS07KW49bi5sYXN0Q2hpbGR9
ZWxzZSBuLmlubmVySFRNTD1lO3ZhciBwPW4uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIp
O3AubGVuZ3RoJiYodHx8dSghMSksYShwKS5mb3JFYWNoKHQpKTtmb3IodmFyIGQ9QXJyYXkuZnJv
bShuLmNoaWxkTm9kZXMpO24ubGFzdENoaWxkOyluLnJlbW92ZUNoaWxkKG4ubGFzdENoaWxkKTty
ZXR1cm4gZH12YXIgaT1lKDEyMyksYT1lKDEyNykscz1lKDEzMyksdT1lKDEzNyksbD1pLmNhblVz
ZURPTT9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTpudWxsLGM9L15ccyo8KFx3KykvO3Qu
ZXhwb3J0cz1vfSx7MTIzOjEyMywxMjc6MTI3LDEzMzoxMzMsMTM3OjEzN31dLDEyOTpbZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlvbigpe3Jl
dHVybiBlfX12YXIgbz1mdW5jdGlvbigpe307by50aGF0UmV0dXJucz1yLG8udGhhdFJldHVybnNG
YWxzZT1yKCExKSxvLnRoYXRSZXR1cm5zVHJ1ZT1yKCEwKSxvLnRoYXRSZXR1cm5zTnVsbD1yKG51
bGwpLG8udGhhdFJldHVybnNUaGlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LG8udGhhdFJldHVy
bnNBcmd1bWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZX0sdC5leHBvcnRzPW99LHt9XSwxMzA6W2Z1
bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e307dC5leHBvcnRzPXJ9LHt9XSwxMzE6
W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt0cnl7ZS5mb2N1cygp
fWNhdGNoKGUpe319dC5leHBvcnRzPXJ9LHt9XSwxMzI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCI7ZnVuY3Rpb24gcihlKXtpZih2b2lkIDA9PT0oZT1lfHwoInVuZGVmaW5lZCIhPXR5cGVv
ZiBkb2N1bWVudD9kb2N1bWVudDp2b2lkIDApKSlyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIGUuYWN0
aXZlRWxlbWVudHx8ZS5ib2R5fWNhdGNoKHQpe3JldHVybiBlLmJvZHl9fXQuZXhwb3J0cz1yfSx7
fV0sMTMzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJu
IGF8fGkoITEpLGQuaGFzT3duUHJvcGVydHkoZSl8fChlPSIqIikscy5oYXNPd25Qcm9wZXJ0eShl
KXx8KGEuaW5uZXJIVE1MPSIqIj09PWU/IjxsaW5rIC8+IjoiPCIrZSsiPjwvIitlKyI+IixzW2Vd
PSFhLmZpcnN0Q2hpbGQpLHNbZV0/ZFtlXTpudWxsfXZhciBvPWUoMTIzKSxpPWUoMTM3KSxhPW8u
Y2FuVXNlRE9NP2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOm51bGwscz17fSx1PVsxLCc8
c2VsZWN0IG11bHRpcGxlPSJ0cnVlIj4nLCI8L3NlbGVjdD4iXSxsPVsxLCI8dGFibGU+IiwiPC90
YWJsZT4iXSxjPVszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4i
XSxwPVsxLCc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+JywiPC9zdmc+
Il0sZD17IioiOlsxLCI/PGRpdj4iLCI8L2Rpdj4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJd
LGNvbDpbMiwiPHRhYmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwv
dGFibGU+Il0sbGVnZW5kOlsxLCI8ZmllbGRzZXQ+IiwiPC9maWVsZHNldD4iXSxwYXJhbTpbMSwi
PG9iamVjdD4iLCI8L29iamVjdD4iXSx0cjpbMiwiPHRhYmxlPjx0Ym9keT4iLCI8L3Rib2R5Pjwv
dGFibGU+Il0sb3B0Z3JvdXA6dSxvcHRpb246dSxjYXB0aW9uOmwsY29sZ3JvdXA6bCx0Ym9keTps
LHRmb290OmwsdGhlYWQ6bCx0ZDpjLHRoOmN9O1siY2lyY2xlIiwiY2xpcFBhdGgiLCJkZWZzIiwi
ZWxsaXBzZSIsImciLCJpbWFnZSIsImxpbmUiLCJsaW5lYXJHcmFkaWVudCIsIm1hc2siLCJwYXRo
IiwicGF0dGVybiIsInBvbHlnb24iLCJwb2x5bGluZSIsInJhZGlhbEdyYWRpZW50IiwicmVjdCIs
InN0b3AiLCJ0ZXh0IiwidHNwYW4iXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2RbZV09cCxzW2VdPSEw
fSksdC5leHBvcnRzPXJ9LHsxMjM6MTIzLDEzNzoxMzd9XSwxMzQ6W2Z1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZS5XaW5kb3cmJmUgaW5zdGFuY2VvZiBl
LldpbmRvdz97eDplLnBhZ2VYT2Zmc2V0fHxlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3Jv
bGxMZWZ0LHk6ZS5wYWdlWU9mZnNldHx8ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xs
VG9wfTp7eDplLnNjcm9sbExlZnQseTplLnNjcm9sbFRvcH19dC5leHBvcnRzPXJ9LHt9XSwxMzU6
W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZS5yZXBs
YWNlKG8sIi0kMSIpLnRvTG93ZXJDYXNlKCl9dmFyIG89LyhbQS1aXSkvZzt0LmV4cG9ydHM9cn0s
e31dLDEzNjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVy
biBvKGUpLnJlcGxhY2UoaSwiLW1zLSIpfXZhciBvPWUoMTM1KSxpPS9ebXMtLzt0LmV4cG9ydHM9
cn0sezEzNToxMzV9XSwxMzc6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24g
cihlLHQsbixyLGksYSxzLHUpe2lmKG8odCksIWUpe3ZhciBsO2lmKHZvaWQgMD09PXQpbD1uZXcg
RXJyb3IoIk1pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQg
ZGV2IGVudmlyb25tZW50IGZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFs
IGhlbHBmdWwgd2FybmluZ3MuIik7ZWxzZXt2YXIgYz1bbixyLGksYSxzLHVdLHA9MDtsPW5ldyBF
cnJvcih0LnJlcGxhY2UoLyVzL2csZnVuY3Rpb24oKXtyZXR1cm4gY1twKytdfSkpLGwubmFtZT0i
SW52YXJpYW50IFZpb2xhdGlvbiJ9dGhyb3cgbC5mcmFtZXNUb1BvcD0xLGx9fXZhciBvPWZ1bmN0
aW9uKGUpe307dC5leHBvcnRzPXJ9LHt9XSwxMzg6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmlj
dCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lP2Uub3duZXJEb2N1bWVudHx8ZTpkb2N1bWVudCxuPXQu
ZGVmYXVsdFZpZXd8fHdpbmRvdztyZXR1cm4hKCFlfHwhKCJmdW5jdGlvbiI9PXR5cGVvZiBuLk5v
ZGU/ZSBpbnN0YW5jZW9mIG4uTm9kZToib2JqZWN0Ij09dHlwZW9mIGUmJiJudW1iZXIiPT10eXBl
b2YgZS5ub2RlVHlwZSYmInN0cmluZyI9PXR5cGVvZiBlLm5vZGVOYW1lKSl9dC5leHBvcnRzPXJ9
LHt9XSwxMzk6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1
cm4gbyhlKSYmMz09ZS5ub2RlVHlwZX12YXIgbz1lKDEzOCk7dC5leHBvcnRzPXJ9LHsxMzg6MTM4
fV0sMTQwOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9
e307cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0Lmhhc093blByb3BlcnR5KG4pfHwodFtuXT1l
LmNhbGwodGhpcyxuKSksdFtuXX19dC5leHBvcnRzPXJ9LHt9XSwxNDE6W2Z1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBlPT09dD8wIT09ZXx8MCE9PXR8
fDEvZT09MS90OmUhPT1lJiZ0IT09dH1mdW5jdGlvbiBvKGUsdCl7aWYocihlLHQpKXJldHVybiEw
O2lmKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWV8fCJvYmplY3QiIT10eXBlb2YgdHx8bnVs
bD09PXQpcmV0dXJuITE7dmFyIG49T2JqZWN0LmtleXMoZSksbz1PYmplY3Qua2V5cyh0KTtpZihu
Lmxlbmd0aCE9PW8ubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgYT0wO2E8bi5sZW5ndGg7YSsrKWlm
KCFpLmNhbGwodCxuW2FdKXx8IXIoZVtuW2FdXSx0W25bYV1dKSlyZXR1cm4hMTtyZXR1cm4hMH12
YXIgaT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1vfSx7fV0sMTQy
OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTI5KSxvPXI7dC5leHBvcnRz
PW99LHsxMjk6MTI5fV0sMTQzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9u
IHIoZSl7aWYobnVsbD09PWV8fHZvaWQgMD09PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0
LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQiKTtyZXR1cm4g
T2JqZWN0KGUpfXZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsaT1PYmplY3QucHJv
dG90eXBlLmhhc093blByb3BlcnR5LGE9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVy
YWJsZTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt0cnl7aWYoIU9iamVjdC5hc3NpZ24pcmV0dXJuITE7
dmFyIGU9bmV3IFN0cmluZygiYWJjIik7aWYoZVs1XT0iZGUiLCI1Ij09PU9iamVjdC5nZXRPd25Q
cm9wZXJ0eU5hbWVzKGUpWzBdKXJldHVybiExO2Zvcih2YXIgdD17fSxuPTA7bjwxMDtuKyspdFsi
XyIrU3RyaW5nLmZyb21DaGFyQ29kZShuKV09bjtpZigiMDEyMzQ1Njc4OSIhPT1PYmplY3QuZ2V0
T3duUHJvcGVydHlOYW1lcyh0KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KS5qb2luKCIi
KSlyZXR1cm4hMTt2YXIgcj17fTtyZXR1cm4iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLnNwbGl0KCIi
KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JbZV09ZX0pLCJhYmNkZWZnaGlqa2xtbm9wcXJzdCI9PT1P
YmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LHIpKS5qb2luKCIiKX1jYXRjaChlKXtyZXR1cm4h
MX19KCk/T2JqZWN0LmFzc2lnbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbixzLHU9cihlKSxsPTE7
bDxhcmd1bWVudHMubGVuZ3RoO2wrKyl7bj1PYmplY3QoYXJndW1lbnRzW2xdKTtmb3IodmFyIGMg
aW4gbilpLmNhbGwobixjKSYmKHVbY109bltjXSk7aWYobyl7cz1vKG4pO2Zvcih2YXIgcD0wO3A8
cy5sZW5ndGg7cCsrKWEuY2FsbChuLHNbcF0pJiYodVtzW3BdXT1uW3NbcF1dKX19cmV0dXJuIHV9
fSx7fV0sMTQ0OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4s
cixvKXt9dC5leHBvcnRzPXJ9LHsxMzc6MTM3LDE0MjoxNDIsMTQ3OjE0N31dLDE0NTpbZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDE0Nik7dC5leHBvcnRzPWZ1bmN0aW9uKGUp
e3JldHVybiByKGUsITEpfX0sezE0NjoxNDZ9XSwxNDY6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCI7dmFyIHI9ZSgxMjkpLG89ZSgxMzcpLGk9KGUoMTQyKSxlKDE0NykpLGE9ZSgxNDQpO3Qu
ZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7dmFyIHQ9ZSYmKEUmJmVbRV18fGVb
eF0pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiB0fWZ1bmN0aW9uIHMoZSx0KXtyZXR1
cm4gZT09PXQ/MCE9PWV8fDEvZT09MS90OmUhPT1lJiZ0IT09dH1mdW5jdGlvbiB1KGUpe3RoaXMu
bWVzc2FnZT1lLHRoaXMuc3RhY2s9IiJ9ZnVuY3Rpb24gbChlKXtmdW5jdGlvbiBuKG4scixhLHMs
bCxjLHApe2lmKHM9c3x8dyxjPWN8fGEscCE9PWkpaWYodClvKCExLCJDYWxsaW5nIFByb3BUeXBl
cyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVz
YCBwYWNrYWdlLiBVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRoZW0u
IFJlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMiKTtlbHNlO3Jl
dHVybiBudWxsPT1yW2FdP24/bmV3IHUobnVsbD09PXJbYV0/IlRoZSAiK2wrIiBgIitjKyJgIGlz
IG1hcmtlZCBhcyByZXF1aXJlZCBpbiBgIitzKyJgLCBidXQgaXRzIHZhbHVlIGlzIGBudWxsYC4i
OiJUaGUgIitsKyIgYCIrYysiYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gYCIrcysiYCwgYnV0
IGl0cyB2YWx1ZSBpcyBgdW5kZWZpbmVkYC4iKTpudWxsOmUocixhLHMsbCxjKX12YXIgcj1uLmJp
bmQobnVsbCwhMSk7cmV0dXJuIHIuaXNSZXF1aXJlZD1uLmJpbmQobnVsbCwhMCkscn1mdW5jdGlv
biBjKGUpe2Z1bmN0aW9uIHQodCxuLHIsbyxpLGEpe3ZhciBzPXRbbl07aWYoXyhzKSE9PWUpcmV0
dXJuIG5ldyB1KCJJbnZhbGlkICIrbysiIGAiK2krImAgb2YgdHlwZSBgIitDKHMpKyJgIHN1cHBs
aWVkIHRvIGAiK3IrImAsIGV4cGVjdGVkIGAiK2UrImAuIik7cmV0dXJuIG51bGx9cmV0dXJuIGwo
dCl9ZnVuY3Rpb24gcChlKXtmdW5jdGlvbiB0KHQsbixyLG8sYSl7aWYoImZ1bmN0aW9uIiE9dHlw
ZW9mIGUpcmV0dXJuIG5ldyB1KCJQcm9wZXJ0eSBgIithKyJgIG9mIGNvbXBvbmVudCBgIityKyJg
IGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBhcnJheU9mLiIpO3ZhciBzPXRb
bl07aWYoIUFycmF5LmlzQXJyYXkocykpe3JldHVybiBuZXcgdSgiSW52YWxpZCAiK28rIiBgIith
KyJgIG9mIHR5cGUgYCIrXyhzKSsiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBhbiBh
cnJheS4iKX1mb3IodmFyIGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIGM9ZShzLGwscixvLGErIlsi
K2wrIl0iLGkpO2lmKGMgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gY31yZXR1cm4gbnVsbH1yZXR1
cm4gbCh0KX1mdW5jdGlvbiBkKGUpe2Z1bmN0aW9uIHQodCxuLHIsbyxpKXtpZighKHRbbl1pbnN0
YW5jZW9mIGUpKXt2YXIgYT1lLm5hbWV8fHc7cmV0dXJuIG5ldyB1KCJJbnZhbGlkICIrbysiIGAi
K2krImAgb2YgdHlwZSBgIitiKHRbbl0pKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVk
IGluc3RhbmNlIG9mIGAiK2ErImAuIil9cmV0dXJuIG51bGx9cmV0dXJuIGwodCl9ZnVuY3Rpb24g
ZihlKXtmdW5jdGlvbiB0KHQsbixyLG8saSl7Zm9yKHZhciBhPXRbbl0sbD0wO2w8ZS5sZW5ndGg7
bCsrKWlmKHMoYSxlW2xdKSlyZXR1cm4gbnVsbDtyZXR1cm4gbmV3IHUoIkludmFsaWQgIitvKyIg
YCIraSsiYCBvZiB2YWx1ZSBgIithKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVkIG9u
ZSBvZiAiK0pTT04uc3RyaW5naWZ5KGUpKyIuIil9cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/bCh0
KTpyLnRoYXRSZXR1cm5zTnVsbH1mdW5jdGlvbiBoKGUpe2Z1bmN0aW9uIHQodCxuLHIsbyxhKXtp
ZigiZnVuY3Rpb24iIT10eXBlb2YgZSlyZXR1cm4gbmV3IHUoIlByb3BlcnR5IGAiK2ErImAgb2Yg
Y29tcG9uZW50IGAiK3IrImAgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIG9i
amVjdE9mLiIpO3ZhciBzPXRbbl0sbD1fKHMpO2lmKCJvYmplY3QiIT09bClyZXR1cm4gbmV3IHUo
IkludmFsaWQgIitvKyIgYCIrYSsiYCBvZiB0eXBlIGAiK2wrImAgc3VwcGxpZWQgdG8gYCIrcisi
YCwgZXhwZWN0ZWQgYW4gb2JqZWN0LiIpO2Zvcih2YXIgYyBpbiBzKWlmKHMuaGFzT3duUHJvcGVy
dHkoYykpe3ZhciBwPWUocyxjLHIsbyxhKyIuIitjLGkpO2lmKHAgaW5zdGFuY2VvZiBFcnJvcily
ZXR1cm4gcH1yZXR1cm4gbnVsbH1yZXR1cm4gbCh0KX1mdW5jdGlvbiBtKGUpe2Z1bmN0aW9uIHQo
dCxuLHIsbyxhKXtmb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKyl7aWYobnVsbD09KDAsZVtzXSko
dCxuLHIsbyxhLGkpKXJldHVybiBudWxsfXJldHVybiBuZXcgdSgiSW52YWxpZCAiK28rIiBgIith
KyJgIHN1cHBsaWVkIHRvIGAiK3IrImAuIil9cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/bCh0KTpy
LnRoYXRSZXR1cm5zTnVsbH1mdW5jdGlvbiB2KGUpe2Z1bmN0aW9uIHQodCxuLHIsbyxhKXt2YXIg
cz10W25dLGw9XyhzKTtpZigib2JqZWN0IiE9PWwpcmV0dXJuIG5ldyB1KCJJbnZhbGlkICIrbysi
IGAiK2ErImAgb2YgdHlwZSBgIitsKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVkIGBv
YmplY3RgLiIpO2Zvcih2YXIgYyBpbiBlKXt2YXIgcD1lW2NdO2lmKHApe3ZhciBkPXAocyxjLHIs
byxhKyIuIitjLGkpO2lmKGQpcmV0dXJuIGR9fXJldHVybiBudWxsfXJldHVybiBsKHQpfWZ1bmN0
aW9uIGcodCl7c3dpdGNoKHR5cGVvZiB0KXtjYXNlIm51bWJlciI6Y2FzZSJzdHJpbmciOmNhc2Ui
dW5kZWZpbmVkIjpyZXR1cm4hMDtjYXNlImJvb2xlYW4iOnJldHVybiF0O2Nhc2Uib2JqZWN0Ijpp
ZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0LmV2ZXJ5KGcpO2lmKG51bGw9PT10fHxlKHQpKXJl
dHVybiEwO3ZhciByPW4odCk7aWYoIXIpcmV0dXJuITE7dmFyIG8saT1yLmNhbGwodCk7aWYociE9
PXQuZW50cmllcyl7Zm9yKDshKG89aS5uZXh0KCkpLmRvbmU7KWlmKCFnKG8udmFsdWUpKXJldHVy
biExfWVsc2UgZm9yKDshKG89aS5uZXh0KCkpLmRvbmU7KXt2YXIgYT1vLnZhbHVlO2lmKGEmJiFn
KGFbMV0pKXJldHVybiExfXJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIHkoZSx0
KXtyZXR1cm4ic3ltYm9sIj09PWV8fCgiU3ltYm9sIj09PXRbIkBAdG9TdHJpbmdUYWciXXx8ImZ1
bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdCBpbnN0YW5jZW9mIFN5bWJvbCl9ZnVuY3Rpb24gXyhl
KXt2YXIgdD10eXBlb2YgZTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOmUgaW5zdGFu
Y2VvZiBSZWdFeHA/Im9iamVjdCI6eSh0LGUpPyJzeW1ib2wiOnR9ZnVuY3Rpb24gQyhlKXt2YXIg
dD1fKGUpO2lmKCJvYmplY3QiPT09dCl7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuImRhdGUi
O2lmKGUgaW5zdGFuY2VvZiBSZWdFeHApcmV0dXJuInJlZ2V4cCJ9cmV0dXJuIHR9ZnVuY3Rpb24g
YihlKXtyZXR1cm4gZS5jb25zdHJ1Y3RvciYmZS5jb25zdHJ1Y3Rvci5uYW1lP2UuY29uc3RydWN0
b3IubmFtZTp3fXZhciBFPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRv
cix4PSJAQGl0ZXJhdG9yIix3PSI8PGFub255bW91cz4+IixUPXthcnJheTpjKCJhcnJheSIpLGJv
b2w6YygiYm9vbGVhbiIpLGZ1bmM6YygiZnVuY3Rpb24iKSxudW1iZXI6YygibnVtYmVyIiksb2Jq
ZWN0OmMoIm9iamVjdCIpLHN0cmluZzpjKCJzdHJpbmciKSxzeW1ib2w6Yygic3ltYm9sIiksYW55
OmZ1bmN0aW9uKCl7cmV0dXJuIGwoci50aGF0UmV0dXJuc051bGwpfSgpLGFycmF5T2Y6cCxlbGVt
ZW50OmZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LG4scixvLGkpe3ZhciBhPXRbbl07aWYoIWUoYSkp
e3JldHVybiBuZXcgdSgiSW52YWxpZCAiK28rIiBgIitpKyJgIG9mIHR5cGUgYCIrXyhhKSsiYCBz
dXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuIil9cmV0
dXJuIG51bGx9cmV0dXJuIGwodCl9KCksaW5zdGFuY2VPZjpkLG5vZGU6ZnVuY3Rpb24oKXtmdW5j
dGlvbiBlKGUsdCxuLHIsbyl7cmV0dXJuIGcoZVt0XSk/bnVsbDpuZXcgdSgiSW52YWxpZCAiK3Ir
IiBgIitvKyJgIHN1cHBsaWVkIHRvIGAiK24rImAsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLiIpfXJl
dHVybiBsKGUpfSgpLG9iamVjdE9mOmgsb25lT2Y6ZixvbmVPZlR5cGU6bSxzaGFwZTp2fQorO3Jl
dHVybiB1LnByb3RvdHlwZT1FcnJvci5wcm90b3R5cGUsVC5jaGVja1Byb3BUeXBlcz1hLFQuUHJv
cFR5cGVzPVQsVH19LHsxMjk6MTI5LDEzNzoxMzcsMTQyOjE0MiwxNDQ6MTQ0LDE0NzoxNDd9XSwx
NDc6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPSJTRUNSRVRfRE9fTk9U
X1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCJ9LHt9XX0se30sWzQ1XSkoNDUpfSgpfSgp
fSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
cmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0L2Rpc3QvcmVhY3Qtd2l0aC1hZGRvbnMuanMgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QvZGlzdC9yZWFjdC13aXRoLWFkZG9ucy5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yYTI5MDM2Y2Q0ZTg3MTZlMjhmOTlkMjE5ODYxZjY5NjBlYWRkNjc2Ci0t
LSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0L2Rp
c3QvcmVhY3Qtd2l0aC1hZGRvbnMuanMKQEAgLTAsMCArMSw1NjQ2IEBACisgLyoqCisgICogUmVh
Y3QgKHdpdGggYWRkb25zKSB2MTUuNS40CisgICovCisoZnVuY3Rpb24oZil7aWYodHlwZW9mIGV4
cG9ydHM9PT0ib2JqZWN0IiYmdHlwZW9mIG1vZHVsZSE9PSJ1bmRlZmluZWQiKXttb2R1bGUuZXhw
b3J0cz1mKCl9ZWxzZSBpZih0eXBlb2YgZGVmaW5lPT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZCl7
ZGVmaW5lKFtdLGYpfWVsc2V7dmFyIGc7aWYodHlwZW9mIHdpbmRvdyE9PSJ1bmRlZmluZWQiKXtn
PXdpbmRvd31lbHNlIGlmKHR5cGVvZiBnbG9iYWwhPT0idW5kZWZpbmVkIil7Zz1nbG9iYWx9ZWxz
ZSBpZih0eXBlb2Ygc2VsZiE9PSJ1bmRlZmluZWQiKXtnPXNlbGZ9ZWxzZXtnPXRoaXN9Zy5SZWFj
dCA9IGYoKX19KShmdW5jdGlvbigpe3ZhciBkZWZpbmUsbW9kdWxlLGV4cG9ydHM7cmV0dXJuIChm
dW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIg
YT10eXBlb2YgcmVxdWlyZT09ImZ1bmN0aW9uIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShv
LCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9k
dWxlICciK28rIiciKTt0aHJvdyBmLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLGZ9dmFyIGw9bltv
XT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10
W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5b
b10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09ImZ1bmN0aW9uIiYmcmVxdWlyZTtmb3Io
dmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkoezE6W2Z1bmN0aW9uKF9k
ZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBG
YWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJj
ZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0
aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2Ug
dHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91
bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisK
Kyd1c2Ugc3RyaWN0JzsKKwordmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gX2RlcmVxXyg0NCk7
CisKKy8qKgorICogR2VuZXJhdGUgYSBtYXBwaW5nIG9mIHN0YW5kYXJkIHZlbmRvciBwcmVmaXhl
cyB1c2luZyB0aGUgZGVmaW5lZCBzdHlsZSBwcm9wZXJ0eSBhbmQgZXZlbnQgbmFtZS4KKyAqCisg
KiBAcGFyYW0ge3N0cmluZ30gc3R5bGVQcm9wCisgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1l
CisgKiBAcmV0dXJucyB7b2JqZWN0fQorICovCitmdW5jdGlvbiBtYWtlUHJlZml4TWFwKHN0eWxl
UHJvcCwgZXZlbnROYW1lKSB7CisgIHZhciBwcmVmaXhlcyA9IHt9OworCisgIHByZWZpeGVzW3N0
eWxlUHJvcC50b0xvd2VyQ2FzZSgpXSA9IGV2ZW50TmFtZS50b0xvd2VyQ2FzZSgpOworICBwcmVm
aXhlc1snV2Via2l0JyArIHN0eWxlUHJvcF0gPSAnd2Via2l0JyArIGV2ZW50TmFtZTsKKyAgcHJl
Zml4ZXNbJ01veicgKyBzdHlsZVByb3BdID0gJ21veicgKyBldmVudE5hbWU7CisgIHByZWZpeGVz
WydtcycgKyBzdHlsZVByb3BdID0gJ01TJyArIGV2ZW50TmFtZTsKKyAgcHJlZml4ZXNbJ08nICsg
c3R5bGVQcm9wXSA9ICdvJyArIGV2ZW50TmFtZS50b0xvd2VyQ2FzZSgpOworCisgIHJldHVybiBw
cmVmaXhlczsKK30KKworLyoqCisgKiBBIGxpc3Qgb2YgZXZlbnQgbmFtZXMgdG8gYSBjb25maWd1
cmFibGUgbGlzdCBvZiB2ZW5kb3IgcHJlZml4ZXMuCisgKi8KK3ZhciB2ZW5kb3JQcmVmaXhlcyA9
IHsKKyAgYW5pbWF0aW9uZW5kOiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5pbWF0aW9u
RW5kJyksCisgIGFuaW1hdGlvbml0ZXJhdGlvbjogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywg
J0FuaW1hdGlvbkl0ZXJhdGlvbicpLAorICBhbmltYXRpb25zdGFydDogbWFrZVByZWZpeE1hcCgn
QW5pbWF0aW9uJywgJ0FuaW1hdGlvblN0YXJ0JyksCisgIHRyYW5zaXRpb25lbmQ6IG1ha2VQcmVm
aXhNYXAoJ1RyYW5zaXRpb24nLCAnVHJhbnNpdGlvbkVuZCcpCit9OworCisvKioKKyAqIEV2ZW50
IG5hbWVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gZGV0ZWN0ZWQgYW5kIHByZWZpeGVkIChpZiBh
cHBsaWNhYmxlKS4KKyAqLwordmFyIHByZWZpeGVkRXZlbnROYW1lcyA9IHt9OworCisvKioKKyAq
IEVsZW1lbnQgdG8gY2hlY2sgZm9yIHByZWZpeGVzIG9uLgorICovCit2YXIgc3R5bGUgPSB7fTsK
KworLyoqCisgKiBCb290c3RyYXAgaWYgYSBET00gZXhpc3RzLgorICovCitpZiAoRXhlY3V0aW9u
RW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7CisgIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2Jykuc3R5bGU7CisKKyAgLy8gT24gc29tZSBwbGF0Zm9ybXMsIGluIHBhcnRpY3VsYXIg
c29tZSByZWxlYXNlcyBvZiBBbmRyb2lkIDQueCwKKyAgLy8gdGhlIHVuLXByZWZpeGVkICJhbmlt
YXRpb24iIGFuZCAidHJhbnNpdGlvbiIgcHJvcGVydGllcyBhcmUgZGVmaW5lZCBvbiB0aGUKKyAg
Ly8gc3R5bGUgb2JqZWN0IGJ1dCB0aGUgZXZlbnRzIHRoYXQgZmlyZSB3aWxsIHN0aWxsIGJlIHBy
ZWZpeGVkLCBzbyB3ZSBuZWVkCisgIC8vIHRvIGNoZWNrIGlmIHRoZSB1bi1wcmVmaXhlZCBldmVu
dHMgYXJlIHVzYWJsZSwgYW5kIGlmIG5vdCByZW1vdmUgdGhlbSBmcm9tIHRoZSBtYXAuCisgIGlm
ICghKCdBbmltYXRpb25FdmVudCcgaW4gd2luZG93KSkgeworICAgIGRlbGV0ZSB2ZW5kb3JQcmVm
aXhlcy5hbmltYXRpb25lbmQuYW5pbWF0aW9uOworICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy5h
bmltYXRpb25pdGVyYXRpb24uYW5pbWF0aW9uOworICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy5h
bmltYXRpb25zdGFydC5hbmltYXRpb247CisgIH0KKworICAvLyBTYW1lIGFzIGFib3ZlCisgIGlm
ICghKCdUcmFuc2l0aW9uRXZlbnQnIGluIHdpbmRvdykpIHsKKyAgICBkZWxldGUgdmVuZG9yUHJl
Zml4ZXMudHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uOworICB9Cit9CisKKy8qKgorICogQXR0ZW1w
dHMgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHZlbmRvciBwcmVmaXhlZCBldmVudCBuYW1lLgor
ICoKKyAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUKKyAqIEByZXR1cm5zIHtzdHJpbmd9Cisg
Ki8KK2Z1bmN0aW9uIGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKGV2ZW50TmFtZSkgeworICBp
ZiAocHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV0pIHsKKyAgICByZXR1cm4gcHJlZml4ZWRF
dmVudE5hbWVzW2V2ZW50TmFtZV07CisgIH0gZWxzZSBpZiAoIXZlbmRvclByZWZpeGVzW2V2ZW50
TmFtZV0pIHsKKyAgICByZXR1cm4gZXZlbnROYW1lOworICB9CisKKyAgdmFyIHByZWZpeE1hcCA9
IHZlbmRvclByZWZpeGVzW2V2ZW50TmFtZV07CisKKyAgZm9yICh2YXIgc3R5bGVQcm9wIGluIHBy
ZWZpeE1hcCkgeworICAgIGlmIChwcmVmaXhNYXAuaGFzT3duUHJvcGVydHkoc3R5bGVQcm9wKSAm
JiBzdHlsZVByb3AgaW4gc3R5bGUpIHsKKyAgICAgIHJldHVybiBwcmVmaXhlZEV2ZW50TmFtZXNb
ZXZlbnROYW1lXSA9IHByZWZpeE1hcFtzdHlsZVByb3BdOworICAgIH0KKyAgfQorCisgIHJldHVy
biAnJzsKK30KKworbW9kdWxlLmV4cG9ydHMgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZTsK
K30seyI0NCI6NDR9XSwyOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUg
QlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJv
b3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAq
IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhl
IHNhbWUgZGlyZWN0b3J5LgorICoKKyAqIAorICovCisKKyd1c2Ugc3RyaWN0JzsKKworLyoqCisg
KiBFc2NhcGUgYW5kIHdyYXAga2V5IHNvIGl0IGlzIHNhZmUgdG8gdXNlIGFzIGEgcmVhY3RpZAor
ICoKKyAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgdG8gYmUgZXNjYXBlZC4KKyAqIEByZXR1cm4ge3N0
cmluZ30gdGhlIGVzY2FwZWQga2V5LgorICovCisKK2Z1bmN0aW9uIGVzY2FwZShrZXkpIHsKKyAg
dmFyIGVzY2FwZVJlZ2V4ID0gL1s9Ol0vZzsKKyAgdmFyIGVzY2FwZXJMb29rdXAgPSB7CisgICAg
Jz0nOiAnPTAnLAorICAgICc6JzogJz0yJworICB9OworICB2YXIgZXNjYXBlZFN0cmluZyA9ICgn
JyArIGtleSkucmVwbGFjZShlc2NhcGVSZWdleCwgZnVuY3Rpb24gKG1hdGNoKSB7CisgICAgcmV0
dXJuIGVzY2FwZXJMb29rdXBbbWF0Y2hdOworICB9KTsKKworICByZXR1cm4gJyQnICsgZXNjYXBl
ZFN0cmluZzsKK30KKworLyoqCisgKiBVbmVzY2FwZSBhbmQgdW53cmFwIGtleSBmb3IgaHVtYW4t
cmVhZGFibGUgZGlzcGxheQorICoKKyAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgdG8gdW5lc2NhcGUu
CisgKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSB1bmVzY2FwZWQga2V5LgorICovCitmdW5jdGlvbiB1
bmVzY2FwZShrZXkpIHsKKyAgdmFyIHVuZXNjYXBlUmVnZXggPSAvKD0wfD0yKS9nOworICB2YXIg
dW5lc2NhcGVyTG9va3VwID0geworICAgICc9MCc6ICc9JywKKyAgICAnPTInOiAnOicKKyAgfTsK
KyAgdmFyIGtleVN1YnN0cmluZyA9IGtleVswXSA9PT0gJy4nICYmIGtleVsxXSA9PT0gJyQnID8g
a2V5LnN1YnN0cmluZygyKSA6IGtleS5zdWJzdHJpbmcoMSk7CisKKyAgcmV0dXJuICgnJyArIGtl
eVN1YnN0cmluZykucmVwbGFjZSh1bmVzY2FwZVJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gpIHsKKyAg
ICByZXR1cm4gdW5lc2NhcGVyTG9va3VwW21hdGNoXTsKKyAgfSk7Cit9CisKK3ZhciBLZXlFc2Nh
cGVVdGlscyA9IHsKKyAgZXNjYXBlOiBlc2NhcGUsCisgIHVuZXNjYXBlOiB1bmVzY2FwZQorfTsK
KworbW9kdWxlLmV4cG9ydHMgPSBLZXlFc2NhcGVVdGlsczsKK30se31dLDM6W2Z1bmN0aW9uKF9k
ZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBG
YWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJj
ZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0
aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2Ug
dHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91
bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisK
Kyd1c2Ugc3RyaWN0JzsKKwordmFyIFJlYWN0TGluayA9IF9kZXJlcV8oMjApOwordmFyIFJlYWN0
U3RhdGVTZXR0ZXJzID0gX2RlcmVxXygyNik7CisKKy8qKgorICogQSBzaW1wbGUgbWl4aW4gYXJv
dW5kIFJlYWN0TGluay5mb3JTdGF0ZSgpLgorICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHVi
LmlvL3JlYWN0L2RvY3MvdHdvLXdheS1iaW5kaW5nLWhlbHBlcnMuaHRtbAorICovCit2YXIgTGlu
a2VkU3RhdGVNaXhpbiA9IHsKKyAgLyoqCisgICAqIENyZWF0ZSBhIFJlYWN0TGluayB0aGF0J3Mg
bGlua2VkIHRvIHBhcnQgb2YgdGhpcyBjb21wb25lbnQncyBzdGF0ZS4gVGhlCisgICAqIFJlYWN0
TGluayB3aWxsIGhhdmUgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhpcy5zdGF0ZVtrZXldIGFuZCB3
aWxsIGNhbGwKKyAgICogc2V0U3RhdGUoKSB3aGVuIGEgY2hhbmdlIGlzIHJlcXVlc3RlZC4KKyAg
ICoKKyAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBzdGF0ZSBrZXkgdG8gdXBkYXRlLgorICAgKiBA
cmV0dXJuIHtSZWFjdExpbmt9IFJlYWN0TGluayBpbnN0YW5jZSBsaW5raW5nIHRvIHRoZSBzdGF0
ZS4KKyAgICovCisgIGxpbmtTdGF0ZTogZnVuY3Rpb24gKGtleSkgeworICAgIHJldHVybiBuZXcg
UmVhY3RMaW5rKHRoaXMuc3RhdGVba2V5XSwgUmVhY3RTdGF0ZVNldHRlcnMuY3JlYXRlU3RhdGVL
ZXlTZXR0ZXIodGhpcywga2V5KSk7CisgIH0KK307CisKK21vZHVsZS5leHBvcnRzID0gTGlua2Vk
U3RhdGVNaXhpbjsKK30seyIyMCI6MjAsIjI2IjoyNn1dLDQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9k
dWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywg
SW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlz
IGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4g
YWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhl
IFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICogCisgKi8KKworJ3Vz
ZSBzdHJpY3QnOworCit2YXIgX3Byb2RJbnZhcmlhbnQgPSBfZGVyZXFfKDM5KTsKKwordmFyIGlu
dmFyaWFudCA9IF9kZXJlcV8oNDcpOworCisvKioKKyAqIFN0YXRpYyBwb29sZXJzLiBTZXZlcmFs
IGN1c3RvbSB2ZXJzaW9ucyBmb3IgZWFjaCBwb3RlbnRpYWwgbnVtYmVyIG9mCisgKiBhcmd1bWVu
dHMuIEEgY29tcGxldGVseSBnZW5lcmljIHBvb2xlciBpcyBlYXN5IHRvIGltcGxlbWVudCwgYnV0
IHdvdWxkCisgKiByZXF1aXJlIGFjY2Vzc2luZyB0aGUgYGFyZ3VtZW50c2Agb2JqZWN0LiBJbiBl
YWNoIG9mIHRoZXNlLCBgdGhpc2AgcmVmZXJzIHRvCisgKiB0aGUgQ2xhc3MgaXRzZWxmLCBub3Qg
YW4gaW5zdGFuY2UuIElmIGFueSBvdGhlcnMgYXJlIG5lZWRlZCwgc2ltcGx5IGFkZCB0aGVtCisg
KiBoZXJlLCBvciBpbiB0aGVpciBvd24gZmlsZXMuCisgKi8KK3ZhciBvbmVBcmd1bWVudFBvb2xl
ciA9IGZ1bmN0aW9uIChjb3B5RmllbGRzRnJvbSkgeworICB2YXIgS2xhc3MgPSB0aGlzOworICBp
ZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCkgeworICAgIHZhciBpbnN0YW5jZSA9IEtsYXNz
Lmluc3RhbmNlUG9vbC5wb3AoKTsKKyAgICBLbGFzcy5jYWxsKGluc3RhbmNlLCBjb3B5RmllbGRz
RnJvbSk7CisgICAgcmV0dXJuIGluc3RhbmNlOworICB9IGVsc2UgeworICAgIHJldHVybiBuZXcg
S2xhc3MoY29weUZpZWxkc0Zyb20pOworICB9Cit9OworCit2YXIgdHdvQXJndW1lbnRQb29sZXIg
PSBmdW5jdGlvbiAoYTEsIGEyKSB7CisgIHZhciBLbGFzcyA9IHRoaXM7CisgIGlmIChLbGFzcy5p
bnN0YW5jZVBvb2wubGVuZ3RoKSB7CisgICAgdmFyIGluc3RhbmNlID0gS2xhc3MuaW5zdGFuY2VQ
b29sLnBvcCgpOworICAgIEtsYXNzLmNhbGwoaW5zdGFuY2UsIGExLCBhMik7CisgICAgcmV0dXJu
IGluc3RhbmNlOworICB9IGVsc2UgeworICAgIHJldHVybiBuZXcgS2xhc3MoYTEsIGEyKTsKKyAg
fQorfTsKKwordmFyIHRocmVlQXJndW1lbnRQb29sZXIgPSBmdW5jdGlvbiAoYTEsIGEyLCBhMykg
eworICB2YXIgS2xhc3MgPSB0aGlzOworICBpZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCkg
eworICAgIHZhciBpbnN0YW5jZSA9IEtsYXNzLmluc3RhbmNlUG9vbC5wb3AoKTsKKyAgICBLbGFz
cy5jYWxsKGluc3RhbmNlLCBhMSwgYTIsIGEzKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7CisgIH0g
ZWxzZSB7CisgICAgcmV0dXJuIG5ldyBLbGFzcyhhMSwgYTIsIGEzKTsKKyAgfQorfTsKKwordmFy
IGZvdXJBcmd1bWVudFBvb2xlciA9IGZ1bmN0aW9uIChhMSwgYTIsIGEzLCBhNCkgeworICB2YXIg
S2xhc3MgPSB0aGlzOworICBpZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCkgeworICAgIHZh
ciBpbnN0YW5jZSA9IEtsYXNzLmluc3RhbmNlUG9vbC5wb3AoKTsKKyAgICBLbGFzcy5jYWxsKGlu
c3RhbmNlLCBhMSwgYTIsIGEzLCBhNCk7CisgICAgcmV0dXJuIGluc3RhbmNlOworICB9IGVsc2Ug
eworICAgIHJldHVybiBuZXcgS2xhc3MoYTEsIGEyLCBhMywgYTQpOworICB9Cit9OworCit2YXIg
c3RhbmRhcmRSZWxlYXNlciA9IGZ1bmN0aW9uIChpbnN0YW5jZSkgeworICB2YXIgS2xhc3MgPSB0
aGlzOworICAhKGluc3RhbmNlIGluc3RhbmNlb2YgS2xhc3MpID8gImRldmVsb3BtZW50IiAhPT0g
J3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnVHJ5aW5nIHRvIHJlbGVhc2UgYW4gaW5z
dGFuY2UgaW50byBhIHBvb2wgb2YgYSBkaWZmZXJlbnQgdHlwZS4nKSA6IF9wcm9kSW52YXJpYW50
KCcyNScpIDogdm9pZCAwOworICBpbnN0YW5jZS5kZXN0cnVjdG9yKCk7CisgIGlmIChLbGFzcy5p
bnN0YW5jZVBvb2wubGVuZ3RoIDwgS2xhc3MucG9vbFNpemUpIHsKKyAgICBLbGFzcy5pbnN0YW5j
ZVBvb2wucHVzaChpbnN0YW5jZSk7CisgIH0KK307CisKK3ZhciBERUZBVUxUX1BPT0xfU0laRSA9
IDEwOwordmFyIERFRkFVTFRfUE9PTEVSID0gb25lQXJndW1lbnRQb29sZXI7CisKKy8qKgorICog
QXVnbWVudHMgYENvcHlDb25zdHJ1Y3RvcmAgdG8gYmUgYSBwb29sYWJsZSBjbGFzcywgYXVnbWVu
dGluZyBvbmx5IHRoZSBjbGFzcworICogaXRzZWxmIChzdGF0aWNhbGx5KSBub3QgYWRkaW5nIGFu
eSBwcm90b3R5cGljYWwgZmllbGRzLiBBbnkgQ29weUNvbnN0cnVjdG9yCisgKiB5b3UgZ2l2ZSB0
aGlzIG1heSBoYXZlIGEgYHBvb2xTaXplYCBwcm9wZXJ0eSwgYW5kIHdpbGwgbG9vayBmb3IgYQor
ICogcHJvdG90eXBpY2FsIGBkZXN0cnVjdG9yYCBvbiBpbnN0YW5jZXMuCisgKgorICogQHBhcmFt
IHtGdW5jdGlvbn0gQ29weUNvbnN0cnVjdG9yIENvbnN0cnVjdG9yIHRoYXQgY2FuIGJlIHVzZWQg
dG8gcmVzZXQuCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwb29sZXIgQ3VzdG9taXphYmxlIHBvb2xl
ci4KKyAqLwordmFyIGFkZFBvb2xpbmdUbyA9IGZ1bmN0aW9uIChDb3B5Q29uc3RydWN0b3IsIHBv
b2xlcikgeworICAvLyBDYXN0aW5nIGFzIGFueSBzbyB0aGF0IGZsb3cgaWdub3JlcyB0aGUgYWN0
dWFsIGltcGxlbWVudGF0aW9uIGFuZCB0cnVzdHMKKyAgLy8gaXQgdG8gbWF0Y2ggdGhlIHR5cGUg
d2UgZGVjbGFyZWQKKyAgdmFyIE5ld0tsYXNzID0gQ29weUNvbnN0cnVjdG9yOworICBOZXdLbGFz
cy5pbnN0YW5jZVBvb2wgPSBbXTsKKyAgTmV3S2xhc3MuZ2V0UG9vbGVkID0gcG9vbGVyIHx8IERF
RkFVTFRfUE9PTEVSOworICBpZiAoIU5ld0tsYXNzLnBvb2xTaXplKSB7CisgICAgTmV3S2xhc3Mu
cG9vbFNpemUgPSBERUZBVUxUX1BPT0xfU0laRTsKKyAgfQorICBOZXdLbGFzcy5yZWxlYXNlID0g
c3RhbmRhcmRSZWxlYXNlcjsKKyAgcmV0dXJuIE5ld0tsYXNzOworfTsKKwordmFyIFBvb2xlZENs
YXNzID0geworICBhZGRQb29saW5nVG86IGFkZFBvb2xpbmdUbywKKyAgb25lQXJndW1lbnRQb29s
ZXI6IG9uZUFyZ3VtZW50UG9vbGVyLAorICB0d29Bcmd1bWVudFBvb2xlcjogdHdvQXJndW1lbnRQ
b29sZXIsCisgIHRocmVlQXJndW1lbnRQb29sZXI6IHRocmVlQXJndW1lbnRQb29sZXIsCisgIGZv
dXJBcmd1bWVudFBvb2xlcjogZm91ckFyZ3VtZW50UG9vbGVyCit9OworCittb2R1bGUuZXhwb3J0
cyA9IFBvb2xlZENsYXNzOworfSx7IjM5IjozOSwiNDciOjQ3fV0sNTpbZnVuY3Rpb24oX2RlcmVx
Xyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vi
b29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNv
ZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQor
ICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVl
LiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBp
biB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3Vz
ZSBzdHJpY3QnOworCit2YXIgX2Fzc2lnbiA9IF9kZXJlcV8oNTApOworCit2YXIgUmVhY3RDaGls
ZHJlbiA9IF9kZXJlcV8oOSk7Cit2YXIgUmVhY3RDb21wb25lbnQgPSBfZGVyZXFfKDExKTsKK3Zh
ciBSZWFjdFB1cmVDb21wb25lbnQgPSBfZGVyZXFfKDI1KTsKK3ZhciBSZWFjdENsYXNzID0gX2Rl
cmVxXygxMCk7Cit2YXIgUmVhY3RET01GYWN0b3JpZXMgPSBfZGVyZXFfKDE1KTsKK3ZhciBSZWFj
dEVsZW1lbnQgPSBfZGVyZXFfKDE2KTsKK3ZhciBSZWFjdFByb3BUeXBlcyA9IF9kZXJlcV8oMjMp
OwordmFyIFJlYWN0VmVyc2lvbiA9IF9kZXJlcV8oMzApOworCit2YXIgb25seUNoaWxkID0gX2Rl
cmVxXygzOCk7Cit2YXIgd2FybmluZyA9IF9kZXJlcV8oNDkpOworCit2YXIgY3JlYXRlRWxlbWVu
dCA9IFJlYWN0RWxlbWVudC5jcmVhdGVFbGVtZW50OwordmFyIGNyZWF0ZUZhY3RvcnkgPSBSZWFj
dEVsZW1lbnQuY3JlYXRlRmFjdG9yeTsKK3ZhciBjbG9uZUVsZW1lbnQgPSBSZWFjdEVsZW1lbnQu
Y2xvbmVFbGVtZW50OworCitpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7Cisg
IHZhciBjYW5EZWZpbmVQcm9wZXJ0eSA9IF9kZXJlcV8oMzMpOworICB2YXIgUmVhY3RFbGVtZW50
VmFsaWRhdG9yID0gX2RlcmVxXygxOCk7CisgIHZhciBkaWRXYXJuUHJvcFR5cGVzRGVwcmVjYXRl
ZCA9IGZhbHNlOworICBjcmVhdGVFbGVtZW50ID0gUmVhY3RFbGVtZW50VmFsaWRhdG9yLmNyZWF0
ZUVsZW1lbnQ7CisgIGNyZWF0ZUZhY3RvcnkgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY3JlYXRl
RmFjdG9yeTsKKyAgY2xvbmVFbGVtZW50ID0gUmVhY3RFbGVtZW50VmFsaWRhdG9yLmNsb25lRWxl
bWVudDsKK30KKwordmFyIF9fc3ByZWFkID0gX2Fzc2lnbjsKKworaWYgKCJkZXZlbG9wbWVudCIg
IT09ICdwcm9kdWN0aW9uJykgeworICB2YXIgd2FybmVkID0gZmFsc2U7CisgIF9fc3ByZWFkID0g
ZnVuY3Rpb24gKCkgeworICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5p
bmcod2FybmVkLCAnUmVhY3QuX19zcHJlYWQgaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBi
ZSB1c2VkLiBVc2UgJyArICdPYmplY3QuYXNzaWduIGRpcmVjdGx5IG9yIGFub3RoZXIgaGVscGVy
IGZ1bmN0aW9uIHdpdGggc2ltaWxhciAnICsgJ3NlbWFudGljcy4gWW91IG1heSBiZSBzZWVpbmcg
dGhpcyB3YXJuaW5nIGR1ZSB0byB5b3VyIGNvbXBpbGVyLiAnICsgJ1NlZSBodHRwczovL2ZiLm1l
L3JlYWN0LXNwcmVhZC1kZXByZWNhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLicpIDogdm9pZCAwOwor
ICAgIHdhcm5lZCA9IHRydWU7CisgICAgcmV0dXJuIF9hc3NpZ24uYXBwbHkobnVsbCwgYXJndW1l
bnRzKTsKKyAgfTsKK30KKwordmFyIFJlYWN0ID0geworCisgIC8vIE1vZGVybgorCisgIENoaWxk
cmVuOiB7CisgICAgbWFwOiBSZWFjdENoaWxkcmVuLm1hcCwKKyAgICBmb3JFYWNoOiBSZWFjdENo
aWxkcmVuLmZvckVhY2gsCisgICAgY291bnQ6IFJlYWN0Q2hpbGRyZW4uY291bnQsCisgICAgdG9B
cnJheTogUmVhY3RDaGlsZHJlbi50b0FycmF5LAorICAgIG9ubHk6IG9ubHlDaGlsZAorICB9LAor
CisgIENvbXBvbmVudDogUmVhY3RDb21wb25lbnQsCisgIFB1cmVDb21wb25lbnQ6IFJlYWN0UHVy
ZUNvbXBvbmVudCwKKworICBjcmVhdGVFbGVtZW50OiBjcmVhdGVFbGVtZW50LAorICBjbG9uZUVs
ZW1lbnQ6IGNsb25lRWxlbWVudCwKKyAgaXNWYWxpZEVsZW1lbnQ6IFJlYWN0RWxlbWVudC5pc1Zh
bGlkRWxlbWVudCwKKworICAvLyBDbGFzc2ljCisKKyAgUHJvcFR5cGVzOiBSZWFjdFByb3BUeXBl
cywKKyAgY3JlYXRlQ2xhc3M6IFJlYWN0Q2xhc3MuY3JlYXRlQ2xhc3MsCisgIGNyZWF0ZUZhY3Rv
cnk6IGNyZWF0ZUZhY3RvcnksCisgIGNyZWF0ZU1peGluOiBmdW5jdGlvbiAobWl4aW4pIHsKKyAg
ICAvLyBDdXJyZW50bHkgYSBub29wLiBXaWxsIGJlIHVzZWQgdG8gdmFsaWRhdGUgYW5kIHRyYWNl
IG1peGlucy4KKyAgICByZXR1cm4gbWl4aW47CisgIH0sCisKKyAgLy8gVGhpcyBsb29rcyBET00g
c3BlY2lmaWMgYnV0IHRoZXNlIGFyZSBhY3R1YWxseSBpc29tb3JwaGljIGhlbHBlcnMKKyAgLy8g
c2luY2UgdGhleSBhcmUganVzdCBnZW5lcmF0aW5nIERPTSBzdHJpbmdzLgorICBET006IFJlYWN0
RE9NRmFjdG9yaWVzLAorCisgIHZlcnNpb246IFJlYWN0VmVyc2lvbiwKKworICAvLyBEZXByZWNh
dGVkIGhvb2sgZm9yIEpTWCBzcHJlYWQsIGRvbid0IHVzZSB0aGlzIGZvciBhbnl0aGluZy4KKyAg
X19zcHJlYWQ6IF9fc3ByZWFkCit9OworCisvLyBUT0RPOiBGaXggdGVzdHMgc28gdGhhdCB0aGlz
IGRlcHJlY2F0aW9uIHdhcm5pbmcgZG9lc24ndCBjYXVzZSBmYWlsdXJlcy4KK2lmICgiZGV2ZWxv
cG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgaWYgKGNhbkRlZmluZVByb3BlcnR5KSB7Cisg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWN0LCAnUHJvcFR5cGVzJywgeworICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/
IHdhcm5pbmcoZGlkV2FyblByb3BUeXBlc0RlcHJlY2F0ZWQsICdBY2Nlc3NpbmcgUHJvcFR5cGVz
IHZpYSB0aGUgbWFpbiBSZWFjdCBwYWNrYWdlIGlzIGRlcHJlY2F0ZWQuIFVzZSAnICsgJ3RoZSBw
cm9wLXR5cGVzIHBhY2thZ2UgZnJvbSBucG0gaW5zdGVhZC4nKSA6IHZvaWQgMDsKKyAgICAgICAg
ZGlkV2FyblByb3BUeXBlc0RlcHJlY2F0ZWQgPSB0cnVlOworICAgICAgICByZXR1cm4gUmVhY3RQ
cm9wVHlwZXM7CisgICAgICB9CisgICAgfSk7CisgIH0KK30KKworbW9kdWxlLmV4cG9ydHMgPSBS
ZWFjdDsKK30seyIxMCI6MTAsIjExIjoxMSwiMTUiOjE1LCIxNiI6MTYsIjE4IjoxOCwiMjMiOjIz
LCIyNSI6MjUsIjMwIjozMCwiMzMiOjMzLCIzOCI6MzgsIjQ5Ijo0OSwiNTAiOjUwLCI5Ijo5fV0s
NjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAy
MDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNl
bnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBv
ZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmln
aHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9y
eS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgUmVhY3RET007CisKK2Z1bmN0aW9u
IGdldFJlYWN0RE9NKCkgeworICBpZiAoIVJlYWN0RE9NKSB7CisgICAgLy8gVGhpcyBpcyBzYWZl
IHRvIHVzZSBiZWNhdXNlIGN1cnJlbnQgbW9kdWxlIG9ubHkgZXhpc3RzIGluIHRoZSBhZGRvbnMg
YnVpbGQ6CisgICAgdmFyIFJlYWN0V2l0aEFkZG9uc1VNREVudHJ5ID0gX2RlcmVxXygzMik7Cisg
ICAgLy8gVGhpcyBpcyBpbmplY3RlZCBieSB0aGUgUmVhY3RET00gVU1EIGJ1aWxkOgorICAgIFJl
YWN0RE9NID0gUmVhY3RXaXRoQWRkb25zVU1ERW50cnkuX19TRUNSRVRfSU5KRUNURURfUkVBQ1Rf
RE9NX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ7CisgIH0KKyAgcmV0dXJuIFJlYWN0
RE9NOworfQorCitleHBvcnRzLmdldFJlYWN0RE9NID0gZ2V0UmVhY3RET007CisKK2lmICgiZGV2
ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgZXhwb3J0cy5nZXRSZWFjdFBlcmYgPSBm
dW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIGdldFJlYWN0RE9NKCkuX19TRUNSRVRfSU5URVJOQUxT
X0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQuUmVhY3RQZXJmOworICB9OworCisgIGV4
cG9ydHMuZ2V0UmVhY3RUZXN0VXRpbHMgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIGdldFJl
YWN0RE9NKCkuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklS
RUQuUmVhY3RUZXN0VXRpbHM7CisgIH07Cit9Cit9LHsiMzIiOjMyfV0sNzpbZnVuY3Rpb24oX2Rl
cmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZh
Y2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNl
IGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRo
ZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0
cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKwor
J3VzZSBzdHJpY3QnOworCit2YXIgX2Fzc2lnbiA9IF9kZXJlcV8oNTApOworCitmdW5jdGlvbiBf
Y2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGlu
c3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxs
IGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOyB9IH0KKworZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3Ry
dWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5j
ZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVl
biBjYWxsZWQiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09ICJvYmplY3QiIHx8
IHR5cGVvZiBjYWxsID09PSAiZnVuY3Rpb24iKSA/IGNhbGwgOiBzZWxmOyB9CisKK2Z1bmN0aW9u
IF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3Mg
IT09ICJmdW5jdGlvbiIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVy
cm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwg
bm90ICIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0
LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9y
OiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBj
b25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5
cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJD
bGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9CisKK3ZhciBSZWFjdCA9IF9kZXJlcV8oNSk7
Cit2YXIgcHJvcFR5cGVzRmFjdG9yeSA9IF9kZXJlcV8oNTIpOwordmFyIFByb3BUeXBlcyA9IHBy
b3BUeXBlc0ZhY3RvcnkoUmVhY3QuaXNWYWxpZEVsZW1lbnQpOworCit2YXIgUmVhY3RUcmFuc2l0
aW9uR3JvdXAgPSBfZGVyZXFfKDI5KTsKK3ZhciBSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxk
ID0gX2RlcmVxXyg4KTsKKworZnVuY3Rpb24gY3JlYXRlVHJhbnNpdGlvblRpbWVvdXRQcm9wVmFs
aWRhdG9yKHRyYW5zaXRpb25UeXBlKSB7CisgIHZhciB0aW1lb3V0UHJvcE5hbWUgPSAndHJhbnNp
dGlvbicgKyB0cmFuc2l0aW9uVHlwZSArICdUaW1lb3V0JzsKKyAgdmFyIGVuYWJsZWRQcm9wTmFt
ZSA9ICd0cmFuc2l0aW9uJyArIHRyYW5zaXRpb25UeXBlOworCisgIHJldHVybiBmdW5jdGlvbiAo
cHJvcHMpIHsKKyAgICAvLyBJZiB0aGUgdHJhbnNpdGlvbiBpcyBlbmFibGVkCisgICAgaWYgKHBy
b3BzW2VuYWJsZWRQcm9wTmFtZV0pIHsKKyAgICAgIC8vIElmIG5vIHRpbWVvdXQgZHVyYXRpb24g
aXMgcHJvdmlkZWQKKyAgICAgIGlmIChwcm9wc1t0aW1lb3V0UHJvcE5hbWVdID09IG51bGwpIHsK
KyAgICAgICAgcmV0dXJuIG5ldyBFcnJvcih0aW1lb3V0UHJvcE5hbWUgKyAnIHdhc25cJ3Qgc3Vw
cGxpZWQgdG8gUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXA6ICcgKyAndGhpcyBjYW4gY2F1c2UgdW5y
ZWxpYWJsZSBhbmltYXRpb25zIGFuZCB3b25cJ3QgYmUgc3VwcG9ydGVkIGluICcgKyAnYSBmdXR1
cmUgdmVyc2lvbiBvZiBSZWFjdC4gU2VlICcgKyAnaHR0cHM6Ly9mYi5tZS9yZWFjdC1hbmltYXRp
b24tdHJhbnNpdGlvbi1ncm91cC10aW1lb3V0IGZvciBtb3JlICcgKyAnaW5mb3JtYXRpb24uJyk7
CisKKyAgICAgICAgLy8gSWYgdGhlIGR1cmF0aW9uIGlzbid0IGEgbnVtYmVyCisgICAgICB9IGVs
c2UgaWYgKHR5cGVvZiBwcm9wc1t0aW1lb3V0UHJvcE5hbWVdICE9PSAnbnVtYmVyJykgeworICAg
ICAgICByZXR1cm4gbmV3IEVycm9yKHRpbWVvdXRQcm9wTmFtZSArICcgbXVzdCBiZSBhIG51bWJl
ciAoaW4gbWlsbGlzZWNvbmRzKScpOworICAgICAgfQorICAgIH0KKyAgfTsKK30KKworLyoqCisg
KiBBbiBlYXN5IHdheSB0byBwZXJmb3JtIENTUyB0cmFuc2l0aW9ucyBhbmQgYW5pbWF0aW9ucyB3
aGVuIGEgUmVhY3QgY29tcG9uZW50CisgKiBlbnRlcnMgb3IgbGVhdmVzIHRoZSBET00uCisgKiBT
ZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9hbmltYXRpb24uaHRtbCNo
aWdoLWxldmVsLWFwaS1yZWFjdGNzc3RyYW5zaXRpb25ncm91cAorICovCisKK3ZhciBSZWFjdENT
U1RyYW5zaXRpb25Hcm91cCA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7CisgIF9pbmhl
cml0cyhSZWFjdENTU1RyYW5zaXRpb25Hcm91cCwgX1JlYWN0JENvbXBvbmVudCk7CisKKyAgZnVu
Y3Rpb24gUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXAoKSB7CisgICAgdmFyIF90ZW1wLCBfdGhpcywg
X3JldDsKKworICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSZWFjdENTU1RyYW5zaXRpb25Hcm91
cCk7CisKKyAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5
KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykgeworICAgICAgYXJnc1tfa2V5
XSA9IGFyZ3VtZW50c1tfa2V5XTsKKyAgICB9CisKKyAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9
IChfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9SZWFjdCRDb21wb25l
bnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90
aGlzKSwgX3RoaXMuX3dyYXBDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZCkgeworICAgICAgLy8gV2Ug
bmVlZCB0byBwcm92aWRlIHRoaXMgY2hpbGRGYWN0b3J5IHNvIHRoYXQKKyAgICAgIC8vIFJlYWN0
Q1NTVHJhbnNpdGlvbkdyb3VwQ2hpbGQgY2FuIHJlY2VpdmUgdXBkYXRlcyB0byBuYW1lLCBlbnRl
ciwgYW5kCisgICAgICAvLyBsZWF2ZSB3aGlsZSBpdCBpcyBsZWF2aW5nLgorICAgICAgcmV0dXJu
IFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXBDaGlsZCwgeworICAg
ICAgICBuYW1lOiBfdGhpcy5wcm9wcy50cmFuc2l0aW9uTmFtZSwKKyAgICAgICAgYXBwZWFyOiBf
dGhpcy5wcm9wcy50cmFuc2l0aW9uQXBwZWFyLAorICAgICAgICBlbnRlcjogX3RoaXMucHJvcHMu
dHJhbnNpdGlvbkVudGVyLAorICAgICAgICBsZWF2ZTogX3RoaXMucHJvcHMudHJhbnNpdGlvbkxl
YXZlLAorICAgICAgICBhcHBlYXJUaW1lb3V0OiBfdGhpcy5wcm9wcy50cmFuc2l0aW9uQXBwZWFy
VGltZW91dCwKKyAgICAgICAgZW50ZXJUaW1lb3V0OiBfdGhpcy5wcm9wcy50cmFuc2l0aW9uRW50
ZXJUaW1lb3V0LAorICAgICAgICBsZWF2ZVRpbWVvdXQ6IF90aGlzLnByb3BzLnRyYW5zaXRpb25M
ZWF2ZVRpbWVvdXQKKyAgICAgIH0sIGNoaWxkKTsKKyAgICB9LCBfdGVtcCksIF9wb3NzaWJsZUNv
bnN0cnVjdG9yUmV0dXJuKF90aGlzLCBfcmV0KTsKKyAgfQorCisgIFJlYWN0Q1NTVHJhbnNpdGlv
bkdyb3VwLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7CisgICAgcmV0dXJu
IFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3RUcmFuc2l0aW9uR3JvdXAsIF9hc3NpZ24oe30sIHRo
aXMucHJvcHMsIHsgY2hpbGRGYWN0b3J5OiB0aGlzLl93cmFwQ2hpbGQgfSkpOworICB9OworCisg
IHJldHVybiBSZWFjdENTU1RyYW5zaXRpb25Hcm91cDsKK30oUmVhY3QuQ29tcG9uZW50KTsKKwor
UmVhY3RDU1NUcmFuc2l0aW9uR3JvdXAuZGlzcGxheU5hbWUgPSAnUmVhY3RDU1NUcmFuc2l0aW9u
R3JvdXAnOworUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXAucHJvcFR5cGVzID0geworICB0cmFuc2l0
aW9uTmFtZTogUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXBDaGlsZC5wcm9wVHlwZXMubmFtZSwKKwor
ICB0cmFuc2l0aW9uQXBwZWFyOiBQcm9wVHlwZXMuYm9vbCwKKyAgdHJhbnNpdGlvbkVudGVyOiBQ
cm9wVHlwZXMuYm9vbCwKKyAgdHJhbnNpdGlvbkxlYXZlOiBQcm9wVHlwZXMuYm9vbCwKKyAgdHJh
bnNpdGlvbkFwcGVhclRpbWVvdXQ6IGNyZWF0ZVRyYW5zaXRpb25UaW1lb3V0UHJvcFZhbGlkYXRv
cignQXBwZWFyJyksCisgIHRyYW5zaXRpb25FbnRlclRpbWVvdXQ6IGNyZWF0ZVRyYW5zaXRpb25U
aW1lb3V0UHJvcFZhbGlkYXRvcignRW50ZXInKSwKKyAgdHJhbnNpdGlvbkxlYXZlVGltZW91dDog
Y3JlYXRlVHJhbnNpdGlvblRpbWVvdXRQcm9wVmFsaWRhdG9yKCdMZWF2ZScpCit9OworUmVhY3RD
U1NUcmFuc2l0aW9uR3JvdXAuZGVmYXVsdFByb3BzID0geworICB0cmFuc2l0aW9uQXBwZWFyOiBm
YWxzZSwKKyAgdHJhbnNpdGlvbkVudGVyOiB0cnVlLAorICB0cmFuc2l0aW9uTGVhdmU6IHRydWUK
K307CisKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdENTU1RyYW5zaXRpb25Hcm91cDsKK30seyIy
OSI6MjksIjUiOjUsIjUwIjo1MCwiNTIiOjUyLCI4Ijo4fV0sODpbZnVuY3Rpb24oX2RlcmVxXyxt
b2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29r
LCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUg
aXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICog
TElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBB
biBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0
aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBz
dHJpY3QnOworCitmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9y
KSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBU
eXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOyB9IH0KKworZnVu
Y3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYp
IHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2Vk
IC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9m
IGNhbGwgPT09ICJvYmplY3QiIHx8IHR5cGVvZiBjYWxsID09PSAiZnVuY3Rpb24iKSA/IGNhbGwg
OiBzZWxmOyB9CisKK2Z1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBp
ZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09ICJmdW5jdGlvbiIgJiYgc3VwZXJDbGFzcyAhPT0gbnVs
bCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJl
IG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xh
c3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJv
dG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFs
c2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xh
c3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFz
cywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9CisKK3Zh
ciBSZWFjdCA9IF9kZXJlcV8oNSk7Cit2YXIgUmVhY3RBZGRvbnNET01EZXBlbmRlbmNpZXMgPSBf
ZGVyZXFfKDYpOworCit2YXIgcHJvcFR5cGVzRmFjdG9yeSA9IF9kZXJlcV8oNTIpOwordmFyIFBy
b3BUeXBlcyA9IHByb3BUeXBlc0ZhY3RvcnkoUmVhY3QuaXNWYWxpZEVsZW1lbnQpOworCit2YXIg
Q1NTQ29yZSA9IF9kZXJlcV8oNDMpOwordmFyIFJlYWN0VHJhbnNpdGlvbkV2ZW50cyA9IF9kZXJl
cV8oMjgpOworCit2YXIgb25seUNoaWxkID0gX2RlcmVxXygzOCk7CisKK3ZhciBUSUNLID0gMTc7
CisKK3ZhciBSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkID0gZnVuY3Rpb24gKF9SZWFjdCRD
b21wb25lbnQpIHsKKyAgX2luaGVyaXRzKFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwQ2hpbGQsIF9S
ZWFjdCRDb21wb25lbnQpOworCisgIGZ1bmN0aW9uIFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwQ2hp
bGQoKSB7CisgICAgdmFyIF90ZW1wLCBfdGhpcywgX3JldDsKKworICAgIF9jbGFzc0NhbGxDaGVj
ayh0aGlzLCBSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkKTsKKworICAgIGZvciAodmFyIF9s
ZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5
IDwgX2xlbjsgX2tleSsrKSB7CisgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldOwor
ICAgIH0KKworICAgIHJldHVybiBfcmV0ID0gKF90ZW1wID0gKF90aGlzID0gX3Bvc3NpYmxlQ29u
c3RydWN0b3JSZXR1cm4odGhpcywgX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRD
b21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpKSwgX3RoaXMpLCBfdGhpcy5faXNNb3VudGVk
ID0gZmFsc2UsIF90aGlzLnRyYW5zaXRpb24gPSBmdW5jdGlvbiAoYW5pbWF0aW9uVHlwZSwgZmlu
aXNoQ2FsbGJhY2ssIHVzZXJTcGVjaWZpZWREZWxheSkgeworICAgICAgdmFyIG5vZGUgPSBSZWFj
dEFkZG9uc0RPTURlcGVuZGVuY2llcy5nZXRSZWFjdERPTSgpLmZpbmRET01Ob2RlKF90aGlzKTsK
KworICAgICAgaWYgKCFub2RlKSB7CisgICAgICAgIGlmIChmaW5pc2hDYWxsYmFjaykgeworICAg
ICAgICAgIGZpbmlzaENhbGxiYWNrKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAg
ICAgfQorCisgICAgICB2YXIgY2xhc3NOYW1lID0gX3RoaXMucHJvcHMubmFtZVthbmltYXRpb25U
eXBlXSB8fCBfdGhpcy5wcm9wcy5uYW1lICsgJy0nICsgYW5pbWF0aW9uVHlwZTsKKyAgICAgIHZh
ciBhY3RpdmVDbGFzc05hbWUgPSBfdGhpcy5wcm9wcy5uYW1lW2FuaW1hdGlvblR5cGUgKyAnQWN0
aXZlJ10gfHwgY2xhc3NOYW1lICsgJy1hY3RpdmUnOworICAgICAgdmFyIHRpbWVvdXQgPSBudWxs
OworCisgICAgICB2YXIgZW5kTGlzdGVuZXIgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICBpZiAo
ZSAmJiBlLnRhcmdldCAhPT0gbm9kZSkgeworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTsKKworICAgICAgICBDU1NDb3JlLnJlbW92
ZUNsYXNzKG5vZGUsIGNsYXNzTmFtZSk7CisgICAgICAgIENTU0NvcmUucmVtb3ZlQ2xhc3Mobm9k
ZSwgYWN0aXZlQ2xhc3NOYW1lKTsKKworICAgICAgICBSZWFjdFRyYW5zaXRpb25FdmVudHMucmVt
b3ZlRW5kRXZlbnRMaXN0ZW5lcihub2RlLCBlbmRMaXN0ZW5lcik7CisKKyAgICAgICAgLy8gVXN1
YWxseSB0aGlzIG9wdGlvbmFsIGNhbGxiYWNrIGlzIHVzZWQgZm9yIGluZm9ybWluZyBhbiBvd25l
ciBvZgorICAgICAgICAvLyBhIGxlYXZlIGFuaW1hdGlvbiBhbmQgdGVsbGluZyBpdCB0byByZW1v
dmUgdGhlIGNoaWxkLgorICAgICAgICBpZiAoZmluaXNoQ2FsbGJhY2spIHsKKyAgICAgICAgICBm
aW5pc2hDYWxsYmFjaygpOworICAgICAgICB9CisgICAgICB9OworCisgICAgICBDU1NDb3JlLmFk
ZENsYXNzKG5vZGUsIGNsYXNzTmFtZSk7CisKKyAgICAgIC8vIE5lZWQgdG8gZG8gdGhpcyB0byBh
Y3R1YWxseSB0cmlnZ2VyIGEgdHJhbnNpdGlvbi4KKyAgICAgIF90aGlzLnF1ZXVlQ2xhc3NBbmRO
b2RlKGFjdGl2ZUNsYXNzTmFtZSwgbm9kZSk7CisKKyAgICAgIC8vIElmIHRoZSB1c2VyIHNwZWNp
ZmllZCBhIHRpbWVvdXQgZGVsYXkuCisgICAgICBpZiAodXNlclNwZWNpZmllZERlbGF5KSB7Cisg
ICAgICAgIC8vIENsZWFuLXVwIHRoZSBhbmltYXRpb24gYWZ0ZXIgdGhlIHNwZWNpZmllZCBkZWxh
eQorICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChlbmRMaXN0ZW5lciwgdXNlclNwZWNpZmll
ZERlbGF5KTsKKyAgICAgICAgX3RoaXMudHJhbnNpdGlvblRpbWVvdXRzLnB1c2godGltZW91dCk7
CisgICAgICB9IGVsc2UgeworICAgICAgICAvLyBERVBSRUNBVEVEOiB0aGlzIGxpc3RlbmVyIHdp
bGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHJlYWN0CisgICAgICAgIFJlYWN0
VHJhbnNpdGlvbkV2ZW50cy5hZGRFbmRFdmVudExpc3RlbmVyKG5vZGUsIGVuZExpc3RlbmVyKTsK
KyAgICAgIH0KKyAgICB9LCBfdGhpcy5xdWV1ZUNsYXNzQW5kTm9kZSA9IGZ1bmN0aW9uIChjbGFz
c05hbWUsIG5vZGUpIHsKKyAgICAgIF90aGlzLmNsYXNzTmFtZUFuZE5vZGVRdWV1ZS5wdXNoKHsK
KyAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsCisgICAgICAgIG5vZGU6IG5vZGUKKyAgICAg
IH0pOworCisgICAgICBpZiAoIV90aGlzLnRpbWVvdXQpIHsKKyAgICAgICAgX3RoaXMudGltZW91
dCA9IHNldFRpbWVvdXQoX3RoaXMuZmx1c2hDbGFzc05hbWVBbmROb2RlUXVldWUsIFRJQ0spOwor
ICAgICAgfQorICAgIH0sIF90aGlzLmZsdXNoQ2xhc3NOYW1lQW5kTm9kZVF1ZXVlID0gZnVuY3Rp
b24gKCkgeworICAgICAgaWYgKF90aGlzLl9pc01vdW50ZWQpIHsKKyAgICAgICAgX3RoaXMuY2xh
c3NOYW1lQW5kTm9kZVF1ZXVlLmZvckVhY2goZnVuY3Rpb24gKG9iaikgeworICAgICAgICAgIENT
U0NvcmUuYWRkQ2xhc3Mob2JqLm5vZGUsIG9iai5jbGFzc05hbWUpOworICAgICAgICB9KTsKKyAg
ICAgIH0KKyAgICAgIF90aGlzLmNsYXNzTmFtZUFuZE5vZGVRdWV1ZS5sZW5ndGggPSAwOworICAg
ICAgX3RoaXMudGltZW91dCA9IG51bGw7CisgICAgfSwgX3RoaXMuY29tcG9uZW50V2lsbEFwcGVh
ciA9IGZ1bmN0aW9uIChkb25lKSB7CisgICAgICBpZiAoX3RoaXMucHJvcHMuYXBwZWFyKSB7Cisg
ICAgICAgIF90aGlzLnRyYW5zaXRpb24oJ2FwcGVhcicsIGRvbmUsIF90aGlzLnByb3BzLmFwcGVh
clRpbWVvdXQpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZG9uZSgpOworICAgICAgfQorICAg
IH0sIF90aGlzLmNvbXBvbmVudFdpbGxFbnRlciA9IGZ1bmN0aW9uIChkb25lKSB7CisgICAgICBp
ZiAoX3RoaXMucHJvcHMuZW50ZXIpIHsKKyAgICAgICAgX3RoaXMudHJhbnNpdGlvbignZW50ZXIn
LCBkb25lLCBfdGhpcy5wcm9wcy5lbnRlclRpbWVvdXQpOworICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgZG9uZSgpOworICAgICAgfQorICAgIH0sIF90aGlzLmNvbXBvbmVudFdpbGxMZWF2ZSA9IGZ1
bmN0aW9uIChkb25lKSB7CisgICAgICBpZiAoX3RoaXMucHJvcHMubGVhdmUpIHsKKyAgICAgICAg
X3RoaXMudHJhbnNpdGlvbignbGVhdmUnLCBkb25lLCBfdGhpcy5wcm9wcy5sZWF2ZVRpbWVvdXQp
OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZG9uZSgpOworICAgICAgfQorICAgIH0sIF90ZW1w
KSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpOworICB9CisKKyAgUmVh
Y3RDU1NUcmFuc2l0aW9uR3JvdXBDaGlsZC5wcm90b3R5cGUuY29tcG9uZW50V2lsbE1vdW50ID0g
ZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkgeworICAgIHRoaXMuY2xhc3NOYW1lQW5kTm9k
ZVF1ZXVlID0gW107CisgICAgdGhpcy50cmFuc2l0aW9uVGltZW91dHMgPSBbXTsKKyAgfTsKKwor
ICBSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3Vu
dCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkgeworICAgIHRoaXMuX2lzTW91bnRlZCA9
IHRydWU7CisgIH07CisKKyAgUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXBDaGlsZC5wcm90b3R5cGUu
Y29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHsK
KyAgICB0aGlzLl9pc01vdW50ZWQgPSBmYWxzZTsKKworICAgIGlmICh0aGlzLnRpbWVvdXQpIHsK
KyAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpOworICAgIH0KKyAgICB0aGlzLnRyYW5z
aXRpb25UaW1lb3V0cy5mb3JFYWNoKGZ1bmN0aW9uICh0aW1lb3V0KSB7CisgICAgICBjbGVhclRp
bWVvdXQodGltZW91dCk7CisgICAgfSk7CisKKyAgICB0aGlzLmNsYXNzTmFtZUFuZE5vZGVRdWV1
ZS5sZW5ndGggPSAwOworICB9OworCisgIFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwQ2hpbGQucHJv
dG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHsKKyAgICByZXR1cm4gb25seUNoaWxk
KHRoaXMucHJvcHMuY2hpbGRyZW4pOworICB9OworCisgIHJldHVybiBSZWFjdENTU1RyYW5zaXRp
b25Hcm91cENoaWxkOworfShSZWFjdC5Db21wb25lbnQpOworCitSZWFjdENTU1RyYW5zaXRpb25H
cm91cENoaWxkLnByb3BUeXBlcyA9IHsKKyAgbmFtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJv
cFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLnNoYXBlKHsKKyAgICBlbnRlcjogUHJvcFR5cGVzLnN0
cmluZywKKyAgICBsZWF2ZTogUHJvcFR5cGVzLnN0cmluZywKKyAgICBhY3RpdmU6IFByb3BUeXBl
cy5zdHJpbmcKKyAgfSksIFByb3BUeXBlcy5zaGFwZSh7CisgICAgZW50ZXI6IFByb3BUeXBlcy5z
dHJpbmcsCisgICAgZW50ZXJBY3RpdmU6IFByb3BUeXBlcy5zdHJpbmcsCisgICAgbGVhdmU6IFBy
b3BUeXBlcy5zdHJpbmcsCisgICAgbGVhdmVBY3RpdmU6IFByb3BUeXBlcy5zdHJpbmcsCisgICAg
YXBwZWFyOiBQcm9wVHlwZXMuc3RyaW5nLAorICAgIGFwcGVhckFjdGl2ZTogUHJvcFR5cGVzLnN0
cmluZworICB9KV0pLmlzUmVxdWlyZWQsCisKKyAgLy8gT25jZSB3ZSByZXF1aXJlIHRpbWVvdXRz
IHRvIGJlIHNwZWNpZmllZCwgd2UgY2FuIHJlbW92ZSB0aGUKKyAgLy8gYm9vbGVhbiBmbGFncyAo
YXBwZWFyIGV0Yy4pIGFuZCBqdXN0IGFjY2VwdCBhIG51bWJlcgorICAvLyBvciBhIGJvb2wgZm9y
IHRoZSB0aW1lb3V0IGZsYWdzIChhcHBlYXJUaW1lb3V0IGV0Yy4pCisgIGFwcGVhcjogUHJvcFR5
cGVzLmJvb2wsCisgIGVudGVyOiBQcm9wVHlwZXMuYm9vbCwKKyAgbGVhdmU6IFByb3BUeXBlcy5i
b29sLAorICBhcHBlYXJUaW1lb3V0OiBQcm9wVHlwZXMubnVtYmVyLAorICBlbnRlclRpbWVvdXQ6
IFByb3BUeXBlcy5udW1iZXIsCisgIGxlYXZlVGltZW91dDogUHJvcFR5cGVzLm51bWJlcgorfTsK
KworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwQ2hpbGQ7Cit9LHsi
MjgiOjI4LCIzOCI6MzgsIjQzIjo0MywiNSI6NSwiNTIiOjUyLCI2Ijo2fV0sOTpbZnVuY3Rpb24o
X2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQs
IEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291
cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGlu
IHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJj
ZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBm
b3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8K
KworJ3VzZSBzdHJpY3QnOworCit2YXIgUG9vbGVkQ2xhc3MgPSBfZGVyZXFfKDQpOwordmFyIFJl
YWN0RWxlbWVudCA9IF9kZXJlcV8oMTYpOworCit2YXIgZW1wdHlGdW5jdGlvbiA9IF9kZXJlcV8o
NDUpOwordmFyIHRyYXZlcnNlQWxsQ2hpbGRyZW4gPSBfZGVyZXFfKDQxKTsKKwordmFyIHR3b0Fy
Z3VtZW50UG9vbGVyID0gUG9vbGVkQ2xhc3MudHdvQXJndW1lbnRQb29sZXI7Cit2YXIgZm91ckFy
Z3VtZW50UG9vbGVyID0gUG9vbGVkQ2xhc3MuZm91ckFyZ3VtZW50UG9vbGVyOworCit2YXIgdXNl
clByb3ZpZGVkS2V5RXNjYXBlUmVnZXggPSAvXC8rL2c7CitmdW5jdGlvbiBlc2NhcGVVc2VyUHJv
dmlkZWRLZXkodGV4dCkgeworICByZXR1cm4gKCcnICsgdGV4dCkucmVwbGFjZSh1c2VyUHJvdmlk
ZWRLZXlFc2NhcGVSZWdleCwgJyQmLycpOworfQorCisvKioKKyAqIFBvb2xlZENsYXNzIHJlcHJl
c2VudGluZyB0aGUgYm9va2tlZXBpbmcgYXNzb2NpYXRlZCB3aXRoIHBlcmZvcm1pbmcgYSBjaGls
ZAorICogdHJhdmVyc2FsLiBBbGxvd3MgYXZvaWRpbmcgYmluZGluZyBjYWxsYmFja3MuCisgKgor
ICogQGNvbnN0cnVjdG9yIEZvckVhY2hCb29rS2VlcGluZworICogQHBhcmFtIHshZnVuY3Rpb259
IGZvckVhY2hGdW5jdGlvbiBGdW5jdGlvbiB0byBwZXJmb3JtIHRyYXZlcnNhbCB3aXRoLgorICog
QHBhcmFtIHs/Kn0gZm9yRWFjaENvbnRleHQgQ29udGV4dCB0byBwZXJmb3JtIGNvbnRleHQgd2l0
aC4KKyAqLworZnVuY3Rpb24gRm9yRWFjaEJvb2tLZWVwaW5nKGZvckVhY2hGdW5jdGlvbiwgZm9y
RWFjaENvbnRleHQpIHsKKyAgdGhpcy5mdW5jID0gZm9yRWFjaEZ1bmN0aW9uOworICB0aGlzLmNv
bnRleHQgPSBmb3JFYWNoQ29udGV4dDsKKyAgdGhpcy5jb3VudCA9IDA7Cit9CitGb3JFYWNoQm9v
a0tlZXBpbmcucHJvdG90eXBlLmRlc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7CisgIHRoaXMuZnVu
YyA9IG51bGw7CisgIHRoaXMuY29udGV4dCA9IG51bGw7CisgIHRoaXMuY291bnQgPSAwOworfTsK
K1Bvb2xlZENsYXNzLmFkZFBvb2xpbmdUbyhGb3JFYWNoQm9va0tlZXBpbmcsIHR3b0FyZ3VtZW50
UG9vbGVyKTsKKworZnVuY3Rpb24gZm9yRWFjaFNpbmdsZUNoaWxkKGJvb2tLZWVwaW5nLCBjaGls
ZCwgbmFtZSkgeworICB2YXIgZnVuYyA9IGJvb2tLZWVwaW5nLmZ1bmMsCisgICAgICBjb250ZXh0
ID0gYm9va0tlZXBpbmcuY29udGV4dDsKKworICBmdW5jLmNhbGwoY29udGV4dCwgY2hpbGQsIGJv
b2tLZWVwaW5nLmNvdW50KyspOworfQorCisvKioKKyAqIEl0ZXJhdGVzIHRocm91Z2ggY2hpbGRy
ZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gLgorICoK
KyAqIFNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3RvcC1sZXZlbC1h
cGkuaHRtbCNyZWFjdC5jaGlsZHJlbi5mb3JlYWNoCisgKgorICogVGhlIHByb3ZpZGVkIGZvckVh
Y2hGdW5jKGNoaWxkLCBpbmRleCkgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2gKKyAqIGxlYWYgY2hp
bGQuCisgKgorICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIu
CisgKiBAcGFyYW0ge2Z1bmN0aW9uKCosIGludCl9IGZvckVhY2hGdW5jCisgKiBAcGFyYW0geyp9
IGZvckVhY2hDb250ZXh0IENvbnRleHQgZm9yIGZvckVhY2hDb250ZXh0LgorICovCitmdW5jdGlv
biBmb3JFYWNoQ2hpbGRyZW4oY2hpbGRyZW4sIGZvckVhY2hGdW5jLCBmb3JFYWNoQ29udGV4dCkg
eworICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkgeworICAgIHJldHVybiBjaGlsZHJlbjsKKyAgfQor
ICB2YXIgdHJhdmVyc2VDb250ZXh0ID0gRm9yRWFjaEJvb2tLZWVwaW5nLmdldFBvb2xlZChmb3JF
YWNoRnVuYywgZm9yRWFjaENvbnRleHQpOworICB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVu
LCBmb3JFYWNoU2luZ2xlQ2hpbGQsIHRyYXZlcnNlQ29udGV4dCk7CisgIEZvckVhY2hCb29rS2Vl
cGluZy5yZWxlYXNlKHRyYXZlcnNlQ29udGV4dCk7Cit9CisKKy8qKgorICogUG9vbGVkQ2xhc3Mg
cmVwcmVzZW50aW5nIHRoZSBib29ra2VlcGluZyBhc3NvY2lhdGVkIHdpdGggcGVyZm9ybWluZyBh
IGNoaWxkCisgKiBtYXBwaW5nLiBBbGxvd3MgYXZvaWRpbmcgYmluZGluZyBjYWxsYmFja3MuCisg
KgorICogQGNvbnN0cnVjdG9yIE1hcEJvb2tLZWVwaW5nCisgKiBAcGFyYW0geyEqfSBtYXBSZXN1
bHQgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9yZGVyZWQgbWFwIG9mIHJlc3VsdHMuCisgKiBAcGFy
YW0geyFmdW5jdGlvbn0gbWFwRnVuY3Rpb24gRnVuY3Rpb24gdG8gcGVyZm9ybSBtYXBwaW5nIHdp
dGguCisgKiBAcGFyYW0gez8qfSBtYXBDb250ZXh0IENvbnRleHQgdG8gcGVyZm9ybSBtYXBwaW5n
IHdpdGguCisgKi8KK2Z1bmN0aW9uIE1hcEJvb2tLZWVwaW5nKG1hcFJlc3VsdCwga2V5UHJlZml4
LCBtYXBGdW5jdGlvbiwgbWFwQ29udGV4dCkgeworICB0aGlzLnJlc3VsdCA9IG1hcFJlc3VsdDsK
KyAgdGhpcy5rZXlQcmVmaXggPSBrZXlQcmVmaXg7CisgIHRoaXMuZnVuYyA9IG1hcEZ1bmN0aW9u
OworICB0aGlzLmNvbnRleHQgPSBtYXBDb250ZXh0OworICB0aGlzLmNvdW50ID0gMDsKK30KK01h
cEJvb2tLZWVwaW5nLnByb3RvdHlwZS5kZXN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeworICB0aGlz
LnJlc3VsdCA9IG51bGw7CisgIHRoaXMua2V5UHJlZml4ID0gbnVsbDsKKyAgdGhpcy5mdW5jID0g
bnVsbDsKKyAgdGhpcy5jb250ZXh0ID0gbnVsbDsKKyAgdGhpcy5jb3VudCA9IDA7Cit9OworUG9v
bGVkQ2xhc3MuYWRkUG9vbGluZ1RvKE1hcEJvb2tLZWVwaW5nLCBmb3VyQXJndW1lbnRQb29sZXIp
OworCitmdW5jdGlvbiBtYXBTaW5nbGVDaGlsZEludG9Db250ZXh0KGJvb2tLZWVwaW5nLCBjaGls
ZCwgY2hpbGRLZXkpIHsKKyAgdmFyIHJlc3VsdCA9IGJvb2tLZWVwaW5nLnJlc3VsdCwKKyAgICAg
IGtleVByZWZpeCA9IGJvb2tLZWVwaW5nLmtleVByZWZpeCwKKyAgICAgIGZ1bmMgPSBib29rS2Vl
cGluZy5mdW5jLAorICAgICAgY29udGV4dCA9IGJvb2tLZWVwaW5nLmNvbnRleHQ7CisKKworICB2
YXIgbWFwcGVkQ2hpbGQgPSBmdW5jLmNhbGwoY29udGV4dCwgY2hpbGQsIGJvb2tLZWVwaW5nLmNv
dW50KyspOworICBpZiAoQXJyYXkuaXNBcnJheShtYXBwZWRDaGlsZCkpIHsKKyAgICBtYXBJbnRv
V2l0aEtleVByZWZpeEludGVybmFsKG1hcHBlZENoaWxkLCByZXN1bHQsIGNoaWxkS2V5LCBlbXB0
eUZ1bmN0aW9uLnRoYXRSZXR1cm5zQXJndW1lbnQpOworICB9IGVsc2UgaWYgKG1hcHBlZENoaWxk
ICE9IG51bGwpIHsKKyAgICBpZiAoUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KG1hcHBlZENo
aWxkKSkgeworICAgICAgbWFwcGVkQ2hpbGQgPSBSZWFjdEVsZW1lbnQuY2xvbmVBbmRSZXBsYWNl
S2V5KG1hcHBlZENoaWxkLAorICAgICAgLy8gS2VlcCBib3RoIHRoZSAobWFwcGVkKSBhbmQgb2xk
IGtleXMgaWYgdGhleSBkaWZmZXIsIGp1c3QgYXMKKyAgICAgIC8vIHRyYXZlcnNlQWxsQ2hpbGRy
ZW4gdXNlZCB0byBkbyBmb3Igb2JqZWN0cyBhcyBjaGlsZHJlbgorICAgICAga2V5UHJlZml4ICsg
KG1hcHBlZENoaWxkLmtleSAmJiAoIWNoaWxkIHx8IGNoaWxkLmtleSAhPT0gbWFwcGVkQ2hpbGQu
a2V5KSA/IGVzY2FwZVVzZXJQcm92aWRlZEtleShtYXBwZWRDaGlsZC5rZXkpICsgJy8nIDogJycp
ICsgY2hpbGRLZXkpOworICAgIH0KKyAgICByZXN1bHQucHVzaChtYXBwZWRDaGlsZCk7CisgIH0K
K30KKworZnVuY3Rpb24gbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbChjaGlsZHJlbiwgYXJy
YXksIHByZWZpeCwgZnVuYywgY29udGV4dCkgeworICB2YXIgZXNjYXBlZFByZWZpeCA9ICcnOwor
ICBpZiAocHJlZml4ICE9IG51bGwpIHsKKyAgICBlc2NhcGVkUHJlZml4ID0gZXNjYXBlVXNlclBy
b3ZpZGVkS2V5KHByZWZpeCkgKyAnLyc7CisgIH0KKyAgdmFyIHRyYXZlcnNlQ29udGV4dCA9IE1h
cEJvb2tLZWVwaW5nLmdldFBvb2xlZChhcnJheSwgZXNjYXBlZFByZWZpeCwgZnVuYywgY29udGV4
dCk7CisgIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRyZW4sIG1hcFNpbmdsZUNoaWxkSW50b0Nv
bnRleHQsIHRyYXZlcnNlQ29udGV4dCk7CisgIE1hcEJvb2tLZWVwaW5nLnJlbGVhc2UodHJhdmVy
c2VDb250ZXh0KTsKK30KKworLyoqCisgKiBNYXBzIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxs
eSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC4KKyAqCisgKiBTZWUgaHR0cHM6Ly9mYWNl
Ym9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3QuY2hpbGRy
ZW4ubWFwCisgKgorICogVGhlIHByb3ZpZGVkIG1hcEZ1bmN0aW9uKGNoaWxkLCBrZXksIGluZGV4
KSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaAorICogbGVhZiBjaGlsZC4KKyAqCisgKiBAcGFyYW0g
ez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci4KKyAqIEBwYXJhbSB7ZnVuY3Rp
b24oKiwgaW50KX0gZnVuYyBUaGUgbWFwIGZ1bmN0aW9uLgorICogQHBhcmFtIHsqfSBjb250ZXh0
IENvbnRleHQgZm9yIG1hcEZ1bmN0aW9uLgorICogQHJldHVybiB7b2JqZWN0fSBPYmplY3QgY29u
dGFpbmluZyB0aGUgb3JkZXJlZCBtYXAgb2YgcmVzdWx0cy4KKyAqLworZnVuY3Rpb24gbWFwQ2hp
bGRyZW4oY2hpbGRyZW4sIGZ1bmMsIGNvbnRleHQpIHsKKyAgaWYgKGNoaWxkcmVuID09IG51bGwp
IHsKKyAgICByZXR1cm4gY2hpbGRyZW47CisgIH0KKyAgdmFyIHJlc3VsdCA9IFtdOworICBtYXBJ
bnRvV2l0aEtleVByZWZpeEludGVybmFsKGNoaWxkcmVuLCByZXN1bHQsIG51bGwsIGZ1bmMsIGNv
bnRleHQpOworICByZXR1cm4gcmVzdWx0OworfQorCitmdW5jdGlvbiBmb3JFYWNoU2luZ2xlQ2hp
bGREdW1teSh0cmF2ZXJzZUNvbnRleHQsIGNoaWxkLCBuYW1lKSB7CisgIHJldHVybiBudWxsOwor
fQorCisvKioKKyAqIENvdW50IHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNh
bGx5IHNwZWNpZmllZCBhcworICogYHByb3BzLmNoaWxkcmVuYC4KKyAqCisgKiBTZWUgaHR0cHM6
Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3Qu
Y2hpbGRyZW4uY291bnQKKyAqCisgKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVl
IGNvbnRhaW5lci4KKyAqIEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBjaGlsZHJlbi4K
KyAqLworZnVuY3Rpb24gY291bnRDaGlsZHJlbihjaGlsZHJlbiwgY29udGV4dCkgeworICByZXR1
cm4gdHJhdmVyc2VBbGxDaGlsZHJlbihjaGlsZHJlbiwgZm9yRWFjaFNpbmdsZUNoaWxkRHVtbXks
IG51bGwpOworfQorCisvKioKKyAqIEZsYXR0ZW4gYSBjaGlsZHJlbiBvYmplY3QgKHR5cGljYWxs
eSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYCkgYW5kCisgKiByZXR1cm4gYW4gYXJyYXkg
d2l0aCBhcHByb3ByaWF0ZWx5IHJlLWtleWVkIGNoaWxkcmVuLgorICoKKyAqIFNlZSBodHRwczov
L2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3RvcC1sZXZlbC1hcGkuaHRtbCNyZWFjdC5j
aGlsZHJlbi50b2FycmF5CisgKi8KK2Z1bmN0aW9uIHRvQXJyYXkoY2hpbGRyZW4pIHsKKyAgdmFy
IHJlc3VsdCA9IFtdOworICBtYXBJbnRvV2l0aEtleVByZWZpeEludGVybmFsKGNoaWxkcmVuLCBy
ZXN1bHQsIG51bGwsIGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNBcmd1bWVudCk7CisgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZhciBSZWFjdENoaWxkcmVuID0geworICBmb3JFYWNoOiBmb3JFYWNo
Q2hpbGRyZW4sCisgIG1hcDogbWFwQ2hpbGRyZW4sCisgIG1hcEludG9XaXRoS2V5UHJlZml4SW50
ZXJuYWw6IG1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJuYWwsCisgIGNvdW50OiBjb3VudENoaWxk
cmVuLAorICB0b0FycmF5OiB0b0FycmF5Cit9OworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q2hp
bGRyZW47Cit9LHsiMTYiOjE2LCI0Ijo0LCI0MSI6NDEsIjQ1Ijo0NX1dLDEwOltmdW5jdGlvbihf
ZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwg
RmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3Vy
Y2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4g
dGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNl
IHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZv
dW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLwor
CisndXNlIHN0cmljdCc7CisKK3ZhciBfcHJvZEludmFyaWFudCA9IF9kZXJlcV8oMzkpLAorICAg
IF9hc3NpZ24gPSBfZGVyZXFfKDUwKTsKKwordmFyIFJlYWN0Q29tcG9uZW50ID0gX2RlcmVxXygx
MSk7Cit2YXIgUmVhY3RFbGVtZW50ID0gX2RlcmVxXygxNik7Cit2YXIgUmVhY3RQcm9wVHlwZUxv
Y2F0aW9uTmFtZXMgPSBfZGVyZXFfKDIyKTsKK3ZhciBSZWFjdE5vb3BVcGRhdGVRdWV1ZSA9IF9k
ZXJlcV8oMjEpOworCit2YXIgZW1wdHlPYmplY3QgPSBfZGVyZXFfKDQ2KTsKK3ZhciBpbnZhcmlh
bnQgPSBfZGVyZXFfKDQ3KTsKK3ZhciB3YXJuaW5nID0gX2RlcmVxXyg0OSk7CisKK3ZhciBNSVhJ
TlNfS0VZID0gJ21peGlucyc7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBhbGxvdyB0aGUgY3Jl
YXRpb24gb2YgYW5vbnltb3VzIGZ1bmN0aW9ucyB3aGljaCBkbyBub3QKKy8vIGhhdmUgLm5hbWUg
c2V0IHRvIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSBiZWluZyBhc3NpZ25lZCB0by4KK2Z1bmN0
aW9uIGlkZW50aXR5KGZuKSB7CisgIHJldHVybiBmbjsKK30KKworLyoqCisgKiBQb2xpY2llcyB0
aGF0IGRlc2NyaWJlIG1ldGhvZHMgaW4gYFJlYWN0Q2xhc3NJbnRlcmZhY2VgLgorICovCisKKwor
dmFyIGluamVjdGVkTWl4aW5zID0gW107CisKKy8qKgorICogQ29tcG9zaXRlIGNvbXBvbmVudHMg
YXJlIGhpZ2hlci1sZXZlbCBjb21wb25lbnRzIHRoYXQgY29tcG9zZSBvdGhlciBjb21wb3NpdGUK
KyAqIG9yIGhvc3QgY29tcG9uZW50cy4KKyAqCisgKiBUbyBjcmVhdGUgYSBuZXcgdHlwZSBvZiBg
UmVhY3RDbGFzc2AsIHBhc3MgYSBzcGVjaWZpY2F0aW9uIG9mCisgKiB5b3VyIG5ldyBjbGFzcyB0
byBgUmVhY3QuY3JlYXRlQ2xhc3NgLiBUaGUgb25seSByZXF1aXJlbWVudCBvZiB5b3VyIGNsYXNz
CisgKiBzcGVjaWZpY2F0aW9uIGlzIHRoYXQgeW91IGltcGxlbWVudCBhIGByZW5kZXJgIG1ldGhv
ZC4KKyAqCisgKiAgIHZhciBNeUNvbXBvbmVudCA9IFJlYWN0LmNyZWF0ZUNsYXNzKHsKKyAqICAg
ICByZW5kZXI6IGZ1bmN0aW9uKCkgeworICogICAgICAgcmV0dXJuIDxkaXY+SGVsbG8gV29ybGQ8
L2Rpdj47CisgKiAgICAgfQorICogICB9KTsKKyAqCisgKiBUaGUgY2xhc3Mgc3BlY2lmaWNhdGlv
biBzdXBwb3J0cyBhIHNwZWNpZmljIHByb3RvY29sIG9mIG1ldGhvZHMgdGhhdCBoYXZlCisgKiBz
cGVjaWFsIG1lYW5pbmcgKGUuZy4gYHJlbmRlcmApLiBTZWUgYFJlYWN0Q2xhc3NJbnRlcmZhY2Vg
IGZvcgorICogbW9yZSB0aGUgY29tcHJlaGVuc2l2ZSBwcm90b2NvbC4gQW55IG90aGVyIHByb3Bl
cnRpZXMgYW5kIG1ldGhvZHMgaW4gdGhlCisgKiBjbGFzcyBzcGVjaWZpY2F0aW9uIHdpbGwgYmUg
YXZhaWxhYmxlIG9uIHRoZSBwcm90b3R5cGUuCisgKgorICogQGludGVyZmFjZSBSZWFjdENsYXNz
SW50ZXJmYWNlCisgKiBAaW50ZXJuYWwKKyAqLwordmFyIFJlYWN0Q2xhc3NJbnRlcmZhY2UgPSB7
CisKKyAgLyoqCisgICAqIEFuIGFycmF5IG9mIE1peGluIG9iamVjdHMgdG8gaW5jbHVkZSB3aGVu
IGRlZmluaW5nIHlvdXIgY29tcG9uZW50LgorICAgKgorICAgKiBAdHlwZSB7YXJyYXl9CisgICAq
IEBvcHRpb25hbAorICAgKi8KKyAgbWl4aW5zOiAnREVGSU5FX01BTlknLAorCisgIC8qKgorICAg
KiBBbiBvYmplY3QgY29udGFpbmluZyBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIHRoYXQgc2hvdWxk
IGJlIGRlZmluZWQgb24KKyAgICogdGhlIGNvbXBvbmVudCdzIGNvbnN0cnVjdG9yIGluc3RlYWQg
b2YgaXRzIHByb3RvdHlwZSAoc3RhdGljIG1ldGhvZHMpLgorICAgKgorICAgKiBAdHlwZSB7b2Jq
ZWN0fQorICAgKiBAb3B0aW9uYWwKKyAgICovCisgIHN0YXRpY3M6ICdERUZJTkVfTUFOWScsCisK
KyAgLyoqCisgICAqIERlZmluaXRpb24gb2YgcHJvcCB0eXBlcyBmb3IgdGhpcyBjb21wb25lbnQu
CisgICAqCisgICAqIEB0eXBlIHtvYmplY3R9CisgICAqIEBvcHRpb25hbAorICAgKi8KKyAgcHJv
cFR5cGVzOiAnREVGSU5FX01BTlknLAorCisgIC8qKgorICAgKiBEZWZpbml0aW9uIG9mIGNvbnRl
eHQgdHlwZXMgZm9yIHRoaXMgY29tcG9uZW50LgorICAgKgorICAgKiBAdHlwZSB7b2JqZWN0fQor
ICAgKiBAb3B0aW9uYWwKKyAgICovCisgIGNvbnRleHRUeXBlczogJ0RFRklORV9NQU5ZJywKKwor
ICAvKioKKyAgICogRGVmaW5pdGlvbiBvZiBjb250ZXh0IHR5cGVzIHRoaXMgY29tcG9uZW50IHNl
dHMgZm9yIGl0cyBjaGlsZHJlbi4KKyAgICoKKyAgICogQHR5cGUge29iamVjdH0KKyAgICogQG9w
dGlvbmFsCisgICAqLworICBjaGlsZENvbnRleHRUeXBlczogJ0RFRklORV9NQU5ZJywKKworICAv
LyA9PT09IERlZmluaXRpb24gbWV0aG9kcyA9PT09CisKKyAgLyoqCisgICAqIEludm9rZWQgd2hl
biB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQuIFZhbHVlcyBpbiB0aGUgbWFwcGluZyB3aWxsIGJl
IHNldCBvbgorICAgKiBgdGhpcy5wcm9wc2AgaWYgdGhhdCBwcm9wIGlzIG5vdCBzcGVjaWZpZWQg
KGkuZS4gdXNpbmcgYW4gYGluYCBjaGVjaykuCisgICAqCisgICAqIFRoaXMgbWV0aG9kIGlzIGlu
dm9rZWQgYmVmb3JlIGBnZXRJbml0aWFsU3RhdGVgIGFuZCB0aGVyZWZvcmUgY2Fubm90IHJlbHkK
KyAgICogb24gYHRoaXMuc3RhdGVgIG9yIHVzZSBgdGhpcy5zZXRTdGF0ZWAuCisgICAqCisgICAq
IEByZXR1cm4ge29iamVjdH0KKyAgICogQG9wdGlvbmFsCisgICAqLworICBnZXREZWZhdWx0UHJv
cHM6ICdERUZJTkVfTUFOWV9NRVJHRUQnLAorCisgIC8qKgorICAgKiBJbnZva2VkIG9uY2UgYmVm
b3JlIHRoZSBjb21wb25lbnQgaXMgbW91bnRlZC4gVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIHVz
ZWQKKyAgICogYXMgdGhlIGluaXRpYWwgdmFsdWUgb2YgYHRoaXMuc3RhdGVgLgorICAgKgorICAg
KiAgIGdldEluaXRpYWxTdGF0ZTogZnVuY3Rpb24oKSB7CisgICAqICAgICByZXR1cm4geworICAg
KiAgICAgICBpc09uOiBmYWxzZSwKKyAgICogICAgICAgZm9vQmF6OiBuZXcgQmF6Rm9vKCkKKyAg
ICogICAgIH0KKyAgICogICB9CisgICAqCisgICAqIEByZXR1cm4ge29iamVjdH0KKyAgICogQG9w
dGlvbmFsCisgICAqLworICBnZXRJbml0aWFsU3RhdGU6ICdERUZJTkVfTUFOWV9NRVJHRUQnLAor
CisgIC8qKgorICAgKiBAcmV0dXJuIHtvYmplY3R9CisgICAqIEBvcHRpb25hbAorICAgKi8KKyAg
Z2V0Q2hpbGRDb250ZXh0OiAnREVGSU5FX01BTllfTUVSR0VEJywKKworICAvKioKKyAgICogVXNl
cyBwcm9wcyBmcm9tIGB0aGlzLnByb3BzYCBhbmQgc3RhdGUgZnJvbSBgdGhpcy5zdGF0ZWAgdG8g
cmVuZGVyIHRoZQorICAgKiBzdHJ1Y3R1cmUgb2YgdGhlIGNvbXBvbmVudC4KKyAgICoKKyAgICog
Tm8gZ3VhcmFudGVlcyBhcmUgbWFkZSBhYm91dCB3aGVuIG9yIGhvdyBvZnRlbiB0aGlzIG1ldGhv
ZCBpcyBpbnZva2VkLCBzbworICAgKiBpdCBtdXN0IG5vdCBoYXZlIHNpZGUgZWZmZWN0cy4KKyAg
ICoKKyAgICogICByZW5kZXI6IGZ1bmN0aW9uKCkgeworICAgKiAgICAgdmFyIG5hbWUgPSB0aGlz
LnByb3BzLm5hbWU7CisgICAqICAgICByZXR1cm4gPGRpdj5IZWxsbywge25hbWV9ITwvZGl2PjsK
KyAgICogICB9CisgICAqCisgICAqIEByZXR1cm4ge1JlYWN0Q29tcG9uZW50fQorICAgKiBAcmVx
dWlyZWQKKyAgICovCisgIHJlbmRlcjogJ0RFRklORV9PTkNFJywKKworICAvLyA9PT09IERlbGVn
YXRlIG1ldGhvZHMgPT09PQorCisgIC8qKgorICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVu
dCBpcyBpbml0aWFsbHkgY3JlYXRlZCBhbmQgYWJvdXQgdG8gYmUgbW91bnRlZC4KKyAgICogVGhp
cyBtYXkgaGF2ZSBzaWRlIGVmZmVjdHMsIGJ1dCBhbnkgZXh0ZXJuYWwgc3Vic2NyaXB0aW9ucyBv
ciBkYXRhIGNyZWF0ZWQKKyAgICogYnkgdGhpcyBtZXRob2QgbXVzdCBiZSBjbGVhbmVkIHVwIGlu
IGBjb21wb25lbnRXaWxsVW5tb3VudGAuCisgICAqCisgICAqIEBvcHRpb25hbAorICAgKi8KKyAg
Y29tcG9uZW50V2lsbE1vdW50OiAnREVGSU5FX01BTlknLAorCisgIC8qKgorICAgKiBJbnZva2Vk
IHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgYmVlbiBtb3VudGVkIGFuZCBoYXMgYSBET00gcmVwcmVz
ZW50YXRpb24uCisgICAqIEhvd2V2ZXIsIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBE
T00gbm9kZSBpcyBpbiB0aGUgZG9jdW1lbnQuCisgICAqCisgICAqIFVzZSB0aGlzIGFzIGFuIG9w
cG9ydHVuaXR5IHRvIG9wZXJhdGUgb24gdGhlIERPTSB3aGVuIHRoZSBjb21wb25lbnQgaGFzCisg
ICAqIGJlZW4gbW91bnRlZCAoaW5pdGlhbGl6ZWQgYW5kIHJlbmRlcmVkKSBmb3IgdGhlIGZpcnN0
IHRpbWUuCisgICAqCisgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gcm9vdE5vZGUgRE9NIGVsZW1l
bnQgcmVwcmVzZW50aW5nIHRoZSBjb21wb25lbnQuCisgICAqIEBvcHRpb25hbAorICAgKi8KKyAg
Y29tcG9uZW50RGlkTW91bnQ6ICdERUZJTkVfTUFOWScsCisKKyAgLyoqCisgICAqIEludm9rZWQg
YmVmb3JlIHRoZSBjb21wb25lbnQgcmVjZWl2ZXMgbmV3IHByb3BzLgorICAgKgorICAgKiBVc2Ug
dGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byByZWFjdCB0byBhIHByb3AgdHJhbnNpdGlvbiBieSB1
cGRhdGluZyB0aGUKKyAgICogc3RhdGUgdXNpbmcgYHRoaXMuc2V0U3RhdGVgLiBDdXJyZW50IHBy
b3BzIGFyZSBhY2Nlc3NlZCB2aWEgYHRoaXMucHJvcHNgLgorICAgKgorICAgKiAgIGNvbXBvbmVu
dFdpbGxSZWNlaXZlUHJvcHM6IGZ1bmN0aW9uKG5leHRQcm9wcywgbmV4dENvbnRleHQpIHsKKyAg
ICogICAgIHRoaXMuc2V0U3RhdGUoeworICAgKiAgICAgICBsaWtlc0luY3JlYXNpbmc6IG5leHRQ
cm9wcy5saWtlQ291bnQgPiB0aGlzLnByb3BzLmxpa2VDb3VudAorICAgKiAgICAgfSk7CisgICAq
ICAgfQorICAgKgorICAgKiBOT1RFOiBUaGVyZSBpcyBubyBlcXVpdmFsZW50IGBjb21wb25lbnRX
aWxsUmVjZWl2ZVN0YXRlYC4gQW4gaW5jb21pbmcgcHJvcAorICAgKiB0cmFuc2l0aW9uIG1heSBj
YXVzZSBhIHN0YXRlIGNoYW5nZSwgYnV0IHRoZSBvcHBvc2l0ZSBpcyBub3QgdHJ1ZS4gSWYgeW91
CisgICAqIG5lZWQgaXQsIHlvdSBhcmUgcHJvYmFibHkgbG9va2luZyBmb3IgYGNvbXBvbmVudFdp
bGxVcGRhdGVgLgorICAgKgorICAgKiBAcGFyYW0ge29iamVjdH0gbmV4dFByb3BzCisgICAqIEBv
cHRpb25hbAorICAgKi8KKyAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wczogJ0RFRklORV9NQU5Z
JywKKworICAvKioKKyAgICogSW52b2tlZCB3aGlsZSBkZWNpZGluZyBpZiB0aGUgY29tcG9uZW50
IHNob3VsZCBiZSB1cGRhdGVkIGFzIGEgcmVzdWx0IG9mCisgICAqIHJlY2VpdmluZyBuZXcgcHJv
cHMsIHN0YXRlIGFuZC9vciBjb250ZXh0LgorICAgKgorICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBv
cnR1bml0eSB0byBgcmV0dXJuIGZhbHNlYCB3aGVuIHlvdSdyZSBjZXJ0YWluIHRoYXQgdGhlCisg
ICAqIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBwcm9wcy9zdGF0ZS9jb250ZXh0IHdpbGwgbm90IHJl
cXVpcmUgYSBjb21wb25lbnQKKyAgICogdXBkYXRlLgorICAgKgorICAgKiAgIHNob3VsZENvbXBv
bmVudFVwZGF0ZTogZnVuY3Rpb24obmV4dFByb3BzLCBuZXh0U3RhdGUsIG5leHRDb250ZXh0KSB7
CisgICAqICAgICByZXR1cm4gIWVxdWFsKG5leHRQcm9wcywgdGhpcy5wcm9wcykgfHwKKyAgICog
ICAgICAgIWVxdWFsKG5leHRTdGF0ZSwgdGhpcy5zdGF0ZSkgfHwKKyAgICogICAgICAgIWVxdWFs
KG5leHRDb250ZXh0LCB0aGlzLmNvbnRleHQpOworICAgKiAgIH0KKyAgICoKKyAgICogQHBhcmFt
IHtvYmplY3R9IG5leHRQcm9wcworICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRTdGF0ZQorICAg
KiBAcGFyYW0gez9vYmplY3R9IG5leHRDb250ZXh0CisgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRy
dWUgaWYgdGhlIGNvbXBvbmVudCBzaG91bGQgdXBkYXRlLgorICAgKiBAb3B0aW9uYWwKKyAgICov
CisgIHNob3VsZENvbXBvbmVudFVwZGF0ZTogJ0RFRklORV9PTkNFJywKKworICAvKioKKyAgICog
SW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgYWJvdXQgdG8gdXBkYXRlIGR1ZSB0byBhIHRy
YW5zaXRpb24gZnJvbQorICAgKiBgdGhpcy5wcm9wc2AsIGB0aGlzLnN0YXRlYCBhbmQgYHRoaXMu
Y29udGV4dGAgdG8gYG5leHRQcm9wc2AsIGBuZXh0U3RhdGVgCisgICAqIGFuZCBgbmV4dENvbnRl
eHRgLgorICAgKgorICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBwZXJmb3JtIHBy
ZXBhcmF0aW9uIGJlZm9yZSBhbiB1cGRhdGUgb2NjdXJzLgorICAgKgorICAgKiBOT1RFOiBZb3Ug
KipjYW5ub3QqKiB1c2UgYHRoaXMuc2V0U3RhdGUoKWAgaW4gdGhpcyBtZXRob2QuCisgICAqCisg
ICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJvcHMKKyAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0
U3RhdGUKKyAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0Q29udGV4dAorICAgKiBAcGFyYW0ge1Jl
YWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uCisgICAqIEBvcHRpb25hbAorICAg
Ki8KKyAgY29tcG9uZW50V2lsbFVwZGF0ZTogJ0RFRklORV9NQU5ZJywKKworICAvKioKKyAgICog
SW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQncyBET00gcmVwcmVzZW50YXRpb24gaGFzIGJlZW4g
dXBkYXRlZC4KKyAgICoKKyAgICogVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gb3BlcmF0
ZSBvbiB0aGUgRE9NIHdoZW4gdGhlIGNvbXBvbmVudCBoYXMKKyAgICogYmVlbiB1cGRhdGVkLgor
ICAgKgorICAgKiBAcGFyYW0ge29iamVjdH0gcHJldlByb3BzCisgICAqIEBwYXJhbSB7P29iamVj
dH0gcHJldlN0YXRlCisgICAqIEBwYXJhbSB7P29iamVjdH0gcHJldkNvbnRleHQKKyAgICogQHBh
cmFtIHtET01FbGVtZW50fSByb290Tm9kZSBET00gZWxlbWVudCByZXByZXNlbnRpbmcgdGhlIGNv
bXBvbmVudC4KKyAgICogQG9wdGlvbmFsCisgICAqLworICBjb21wb25lbnREaWRVcGRhdGU6ICdE
RUZJTkVfTUFOWScsCisKKyAgLyoqCisgICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50IGlz
IGFib3V0IHRvIGJlIHJlbW92ZWQgZnJvbSBpdHMgcGFyZW50IGFuZCBoYXZlCisgICAqIGl0cyBE
T00gcmVwcmVzZW50YXRpb24gZGVzdHJveWVkLgorICAgKgorICAgKiBVc2UgdGhpcyBhcyBhbiBv
cHBvcnR1bml0eSB0byBkZWFsbG9jYXRlIGFueSBleHRlcm5hbCByZXNvdXJjZXMuCisgICAqCisg
ICAqIE5PVEU6IFRoZXJlIGlzIG5vIGBjb21wb25lbnREaWRVbm1vdW50YCBzaW5jZSB5b3VyIGNv
bXBvbmVudCB3aWxsIGhhdmUgYmVlbgorICAgKiBkZXN0cm95ZWQgYnkgdGhhdCBwb2ludC4KKyAg
ICoKKyAgICogQG9wdGlvbmFsCisgICAqLworICBjb21wb25lbnRXaWxsVW5tb3VudDogJ0RFRklO
RV9NQU5ZJywKKworICAvLyA9PT09IEFkdmFuY2VkIG1ldGhvZHMgPT09PQorCisgIC8qKgorICAg
KiBVcGRhdGVzIHRoZSBjb21wb25lbnQncyBjdXJyZW50bHkgbW91bnRlZCBET00gcmVwcmVzZW50
YXRpb24uCisgICAqCisgICAqIEJ5IGRlZmF1bHQsIHRoaXMgaW1wbGVtZW50cyBSZWFjdCdzIHJl
bmRlcmluZyBhbmQgcmVjb25jaWxpYXRpb24gYWxnb3JpdGhtLgorICAgKiBTb3BoaXN0aWNhdGVk
IGNsaWVudHMgbWF5IHdpc2ggdG8gb3ZlcnJpZGUgdGhpcy4KKyAgICoKKyAgICogQHBhcmFtIHtS
ZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvbgorICAgKiBAaW50ZXJuYWwKKyAg
ICogQG92ZXJyaWRhYmxlCisgICAqLworICB1cGRhdGVDb21wb25lbnQ6ICdPVkVSUklERV9CQVNF
JworCit9OworCisvKioKKyAqIE1hcHBpbmcgZnJvbSBjbGFzcyBzcGVjaWZpY2F0aW9uIGtleXMg
dG8gc3BlY2lhbCBwcm9jZXNzaW5nIGZ1bmN0aW9ucy4KKyAqCisgKiBBbHRob3VnaCB0aGVzZSBh
cmUgZGVjbGFyZWQgbGlrZSBpbnN0YW5jZSBwcm9wZXJ0aWVzIGluIHRoZSBzcGVjaWZpY2F0aW9u
CisgKiB3aGVuIGRlZmluaW5nIGNsYXNzZXMgdXNpbmcgYFJlYWN0LmNyZWF0ZUNsYXNzYCwgdGhl
eSBhcmUgYWN0dWFsbHkgc3RhdGljCisgKiBhbmQgYXJlIGFjY2Vzc2libGUgb24gdGhlIGNvbnN0
cnVjdG9yIGluc3RlYWQgb2YgdGhlIHByb3RvdHlwZS4gRGVzcGl0ZQorICogYmVpbmcgc3RhdGlj
LCB0aGV5IG11c3QgYmUgZGVmaW5lZCBvdXRzaWRlIG9mIHRoZSAic3RhdGljcyIga2V5IHVuZGVy
CisgKiB3aGljaCBhbGwgb3RoZXIgc3RhdGljIG1ldGhvZHMgYXJlIGRlZmluZWQuCisgKi8KK3Zh
ciBSRVNFUlZFRF9TUEVDX0tFWVMgPSB7CisgIGRpc3BsYXlOYW1lOiBmdW5jdGlvbiAoQ29uc3Ry
dWN0b3IsIGRpc3BsYXlOYW1lKSB7CisgICAgQ29uc3RydWN0b3IuZGlzcGxheU5hbWUgPSBkaXNw
bGF5TmFtZTsKKyAgfSwKKyAgbWl4aW5zOiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIG1peGlucykg
eworICAgIGlmIChtaXhpbnMpIHsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWl4aW5zLmxl
bmd0aDsgaSsrKSB7CisgICAgICAgIG1peFNwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBt
aXhpbnNbaV0pOworICAgICAgfQorICAgIH0KKyAgfSwKKyAgY2hpbGRDb250ZXh0VHlwZXM6IGZ1
bmN0aW9uIChDb25zdHJ1Y3RvciwgY2hpbGRDb250ZXh0VHlwZXMpIHsKKyAgICBpZiAoImRldmVs
b3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICB2YWxpZGF0ZVR5cGVEZWYoQ29uc3Ry
dWN0b3IsIGNoaWxkQ29udGV4dFR5cGVzLCAnY2hpbGRDb250ZXh0Jyk7CisgICAgfQorICAgIENv
bnN0cnVjdG9yLmNoaWxkQ29udGV4dFR5cGVzID0gX2Fzc2lnbih7fSwgQ29uc3RydWN0b3IuY2hp
bGRDb250ZXh0VHlwZXMsIGNoaWxkQ29udGV4dFR5cGVzKTsKKyAgfSwKKyAgY29udGV4dFR5cGVz
OiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIGNvbnRleHRUeXBlcykgeworICAgIGlmICgiZGV2ZWxv
cG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgIHZhbGlkYXRlVHlwZURlZihDb25zdHJ1
Y3RvciwgY29udGV4dFR5cGVzLCAnY29udGV4dCcpOworICAgIH0KKyAgICBDb25zdHJ1Y3Rvci5j
b250ZXh0VHlwZXMgPSBfYXNzaWduKHt9LCBDb25zdHJ1Y3Rvci5jb250ZXh0VHlwZXMsIGNvbnRl
eHRUeXBlcyk7CisgIH0sCisgIC8qKgorICAgKiBTcGVjaWFsIGNhc2UgZ2V0RGVmYXVsdFByb3Bz
IHdoaWNoIHNob3VsZCBtb3ZlIGludG8gc3RhdGljcyBidXQgcmVxdWlyZXMKKyAgICogYXV0b21h
dGljIG1lcmdpbmcuCisgICAqLworICBnZXREZWZhdWx0UHJvcHM6IGZ1bmN0aW9uIChDb25zdHJ1
Y3RvciwgZ2V0RGVmYXVsdFByb3BzKSB7CisgICAgaWYgKENvbnN0cnVjdG9yLmdldERlZmF1bHRQ
cm9wcykgeworICAgICAgQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzID0gY3JlYXRlTWVyZ2Vk
UmVzdWx0RnVuY3Rpb24oQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzLCBnZXREZWZhdWx0UHJv
cHMpOworICAgIH0gZWxzZSB7CisgICAgICBDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMgPSBn
ZXREZWZhdWx0UHJvcHM7CisgICAgfQorICB9LAorICBwcm9wVHlwZXM6IGZ1bmN0aW9uIChDb25z
dHJ1Y3RvciwgcHJvcFR5cGVzKSB7CisgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0
aW9uJykgeworICAgICAgdmFsaWRhdGVUeXBlRGVmKENvbnN0cnVjdG9yLCBwcm9wVHlwZXMsICdw
cm9wJyk7CisgICAgfQorICAgIENvbnN0cnVjdG9yLnByb3BUeXBlcyA9IF9hc3NpZ24oe30sIENv
bnN0cnVjdG9yLnByb3BUeXBlcywgcHJvcFR5cGVzKTsKKyAgfSwKKyAgc3RhdGljczogZnVuY3Rp
b24gKENvbnN0cnVjdG9yLCBzdGF0aWNzKSB7CisgICAgbWl4U3RhdGljU3BlY0ludG9Db21wb25l
bnQoQ29uc3RydWN0b3IsIHN0YXRpY3MpOworICB9LAorICBhdXRvYmluZDogZnVuY3Rpb24gKCkg
e30gfTsKKworZnVuY3Rpb24gdmFsaWRhdGVUeXBlRGVmKENvbnN0cnVjdG9yLCB0eXBlRGVmLCBs
b2NhdGlvbikgeworICBmb3IgKHZhciBwcm9wTmFtZSBpbiB0eXBlRGVmKSB7CisgICAgaWYgKHR5
cGVEZWYuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7CisgICAgICAvLyB1c2UgYSB3YXJuaW5n
IGluc3RlYWQgb2YgYW4gaW52YXJpYW50IHNvIGNvbXBvbmVudHMKKyAgICAgIC8vIGRvbid0IHNo
b3cgdXAgaW4gcHJvZCBidXQgb25seSBpbiBfX0RFVl9fCisgICAgICAiZGV2ZWxvcG1lbnQiICE9
PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKHR5cGVvZiB0eXBlRGVmW3Byb3BOYW1lXSA9PT0gJ2Z1
bmN0aW9uJywgJyVzOiAlcyB0eXBlIGAlc2AgaXMgaW52YWxpZDsgaXQgbXVzdCBiZSBhIGZ1bmN0
aW9uLCB1c3VhbGx5IGZyb20gJyArICdSZWFjdC5Qcm9wVHlwZXMuJywgQ29uc3RydWN0b3IuZGlz
cGxheU5hbWUgfHwgJ1JlYWN0Q2xhc3MnLCBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2Nh
dGlvbl0sIHByb3BOYW1lKSA6IHZvaWQgMDsKKyAgICB9CisgIH0KK30KKworZnVuY3Rpb24gdmFs
aWRhdGVNZXRob2RPdmVycmlkZShpc0FscmVhZHlEZWZpbmVkLCBuYW1lKSB7CisgIHZhciBzcGVj
UG9saWN5ID0gUmVhY3RDbGFzc0ludGVyZmFjZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSA/IFJlYWN0
Q2xhc3NJbnRlcmZhY2VbbmFtZV0gOiBudWxsOworCisgIC8vIERpc2FsbG93IG92ZXJyaWRpbmcg
b2YgYmFzZSBjbGFzcyBtZXRob2RzIHVubGVzcyBleHBsaWNpdGx5IGFsbG93ZWQuCisgIGlmIChS
ZWFjdENsYXNzTWl4aW4uaGFzT3duUHJvcGVydHkobmFtZSkpIHsKKyAgICAhKHNwZWNQb2xpY3kg
PT09ICdPVkVSUklERV9CQVNFJykgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBp
bnZhcmlhbnQoZmFsc2UsICdSZWFjdENsYXNzSW50ZXJmYWNlOiBZb3UgYXJlIGF0dGVtcHRpbmcg
dG8gb3ZlcnJpZGUgYCVzYCBmcm9tIHlvdXIgY2xhc3Mgc3BlY2lmaWNhdGlvbi4gRW5zdXJlIHRo
YXQgeW91ciBtZXRob2QgbmFtZXMgZG8gbm90IG92ZXJsYXAgd2l0aCBSZWFjdCBtZXRob2RzLics
IG5hbWUpIDogX3Byb2RJbnZhcmlhbnQoJzczJywgbmFtZSkgOiB2b2lkIDA7CisgIH0KKworICAv
LyBEaXNhbGxvdyBkZWZpbmluZyBtZXRob2RzIG1vcmUgdGhhbiBvbmNlIHVubGVzcyBleHBsaWNp
dGx5IGFsbG93ZWQuCisgIGlmIChpc0FscmVhZHlEZWZpbmVkKSB7CisgICAgIShzcGVjUG9saWN5
ID09PSAnREVGSU5FX01BTlknIHx8IHNwZWNQb2xpY3kgPT09ICdERUZJTkVfTUFOWV9NRVJHRUQn
KSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1Jl
YWN0Q2xhc3NJbnRlcmZhY2U6IFlvdSBhcmUgYXR0ZW1wdGluZyB0byBkZWZpbmUgYCVzYCBvbiB5
b3VyIGNvbXBvbmVudCBtb3JlIHRoYW4gb25jZS4gVGhpcyBjb25mbGljdCBtYXkgYmUgZHVlIHRv
IGEgbWl4aW4uJywgbmFtZSkgOiBfcHJvZEludmFyaWFudCgnNzQnLCBuYW1lKSA6IHZvaWQgMDsK
KyAgfQorfQorCisvKioKKyAqIE1peGluIGhlbHBlciB3aGljaCBoYW5kbGVzIHBvbGljeSB2YWxp
ZGF0aW9uIGFuZCByZXNlcnZlZAorICogc3BlY2lmaWNhdGlvbiBrZXlzIHdoZW4gYnVpbGRpbmcg
UmVhY3QgY2xhc3Nlcy4KKyAqLworZnVuY3Rpb24gbWl4U3BlY0ludG9Db21wb25lbnQoQ29uc3Ry
dWN0b3IsIHNwZWMpIHsKKyAgaWYgKCFzcGVjKSB7CisgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09
ICdwcm9kdWN0aW9uJykgeworICAgICAgdmFyIHR5cGVvZlNwZWMgPSB0eXBlb2Ygc3BlYzsKKyAg
ICAgIHZhciBpc01peGluVmFsaWQgPSB0eXBlb2ZTcGVjID09PSAnb2JqZWN0JyAmJiBzcGVjICE9
PSBudWxsOworCisgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5n
KGlzTWl4aW5WYWxpZCwgJyVzOiBZb3VcJ3JlIGF0dGVtcHRpbmcgdG8gaW5jbHVkZSBhIG1peGlu
IHRoYXQgaXMgZWl0aGVyIG51bGwgJyArICdvciBub3QgYW4gb2JqZWN0LiBDaGVjayB0aGUgbWl4
aW5zIGluY2x1ZGVkIGJ5IHRoZSBjb21wb25lbnQsICcgKyAnYXMgd2VsbCBhcyBhbnkgbWl4aW5z
IHRoZXkgaW5jbHVkZSB0aGVtc2VsdmVzLiAnICsgJ0V4cGVjdGVkIG9iamVjdCBidXQgZ290ICVz
LicsIENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8ICdSZWFjdENsYXNzJywgc3BlYyA9PT0gbnVs
bCA/IG51bGwgOiB0eXBlb2ZTcGVjKSA6IHZvaWQgMDsKKyAgICB9CisKKyAgICByZXR1cm47Cisg
IH0KKworICAhKHR5cGVvZiBzcGVjICE9PSAnZnVuY3Rpb24nKSA/ICJkZXZlbG9wbWVudCIgIT09
ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1JlYWN0Q2xhc3M6IFlvdVwncmUgYXR0
ZW1wdGluZyB0byB1c2UgYSBjb21wb25lbnQgY2xhc3Mgb3IgZnVuY3Rpb24gYXMgYSBtaXhpbi4g
SW5zdGVhZCwganVzdCB1c2UgYSByZWd1bGFyIG9iamVjdC4nKSA6IF9wcm9kSW52YXJpYW50KCc3
NScpIDogdm9pZCAwOworICAhIVJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChzcGVjKSA/ICJk
ZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1JlYWN0Q2xh
c3M6IFlvdVwncmUgYXR0ZW1wdGluZyB0byB1c2UgYSBjb21wb25lbnQgYXMgYSBtaXhpbi4gSW5z
dGVhZCwganVzdCB1c2UgYSByZWd1bGFyIG9iamVjdC4nKSA6IF9wcm9kSW52YXJpYW50KCc3Nicp
IDogdm9pZCAwOworCisgIHZhciBwcm90byA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTsKKyAgdmFy
IGF1dG9CaW5kUGFpcnMgPSBwcm90by5fX3JlYWN0QXV0b0JpbmRQYWlyczsKKworICAvLyBCeSBo
YW5kbGluZyBtaXhpbnMgYmVmb3JlIGFueSBvdGhlciBwcm9wZXJ0aWVzLCB3ZSBlbnN1cmUgdGhl
IHNhbWUKKyAgLy8gY2hhaW5pbmcgb3JkZXIgaXMgYXBwbGllZCB0byBtZXRob2RzIHdpdGggREVG
SU5FX01BTlkgcG9saWN5LCB3aGV0aGVyCisgIC8vIG1peGlucyBhcmUgbGlzdGVkIGJlZm9yZSBv
ciBhZnRlciB0aGVzZSBtZXRob2RzIGluIHRoZSBzcGVjLgorICBpZiAoc3BlYy5oYXNPd25Qcm9w
ZXJ0eShNSVhJTlNfS0VZKSkgeworICAgIFJFU0VSVkVEX1NQRUNfS0VZUy5taXhpbnMoQ29uc3Ry
dWN0b3IsIHNwZWMubWl4aW5zKTsKKyAgfQorCisgIGZvciAodmFyIG5hbWUgaW4gc3BlYykgewor
ICAgIGlmICghc3BlYy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgeworICAgICAgY29udGludWU7Cisg
ICAgfQorCisgICAgaWYgKG5hbWUgPT09IE1JWElOU19LRVkpIHsKKyAgICAgIC8vIFdlIGhhdmUg
YWxyZWFkeSBoYW5kbGVkIG1peGlucyBpbiBhIHNwZWNpYWwgY2FzZSBhYm92ZS4KKyAgICAgIGNv
bnRpbnVlOworICAgIH0KKworICAgIHZhciBwcm9wZXJ0eSA9IHNwZWNbbmFtZV07CisgICAgdmFy
IGlzQWxyZWFkeURlZmluZWQgPSBwcm90by5oYXNPd25Qcm9wZXJ0eShuYW1lKTsKKyAgICB2YWxp
ZGF0ZU1ldGhvZE92ZXJyaWRlKGlzQWxyZWFkeURlZmluZWQsIG5hbWUpOworCisgICAgaWYgKFJF
U0VSVkVEX1NQRUNfS0VZUy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgeworICAgICAgUkVTRVJWRURf
U1BFQ19LRVlTW25hbWVdKENvbnN0cnVjdG9yLCBwcm9wZXJ0eSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgIC8vIFNldHVwIG1ldGhvZHMgb24gcHJvdG90eXBlOgorICAgICAgLy8gVGhlIGZvbGxvd2lu
ZyBtZW1iZXIgbWV0aG9kcyBzaG91bGQgbm90IGJlIGF1dG9tYXRpY2FsbHkgYm91bmQ6CisgICAg
ICAvLyAxLiBFeHBlY3RlZCBSZWFjdENsYXNzIG1ldGhvZHMgKGluIHRoZSAiaW50ZXJmYWNlIiku
CisgICAgICAvLyAyLiBPdmVycmlkZGVuIG1ldGhvZHMgKHRoYXQgd2VyZSBtaXhlZCBpbikuCisg
ICAgICB2YXIgaXNSZWFjdENsYXNzTWV0aG9kID0gUmVhY3RDbGFzc0ludGVyZmFjZS5oYXNPd25Q
cm9wZXJ0eShuYW1lKTsKKyAgICAgIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIHByb3BlcnR5ID09
PSAnZnVuY3Rpb24nOworICAgICAgdmFyIHNob3VsZEF1dG9CaW5kID0gaXNGdW5jdGlvbiAmJiAh
aXNSZWFjdENsYXNzTWV0aG9kICYmICFpc0FscmVhZHlEZWZpbmVkICYmIHNwZWMuYXV0b2JpbmQg
IT09IGZhbHNlOworCisgICAgICBpZiAoc2hvdWxkQXV0b0JpbmQpIHsKKyAgICAgICAgYXV0b0Jp
bmRQYWlycy5wdXNoKG5hbWUsIHByb3BlcnR5KTsKKyAgICAgICAgcHJvdG9bbmFtZV0gPSBwcm9w
ZXJ0eTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChpc0FscmVhZHlEZWZpbmVkKSB7Cisg
ICAgICAgICAgdmFyIHNwZWNQb2xpY3kgPSBSZWFjdENsYXNzSW50ZXJmYWNlW25hbWVdOworCisg
ICAgICAgICAgLy8gVGhlc2UgY2FzZXMgc2hvdWxkIGFscmVhZHkgYmUgY2F1Z2h0IGJ5IHZhbGlk
YXRlTWV0aG9kT3ZlcnJpZGUuCisgICAgICAgICAgIShpc1JlYWN0Q2xhc3NNZXRob2QgJiYgKHNw
ZWNQb2xpY3kgPT09ICdERUZJTkVfTUFOWV9NRVJHRUQnIHx8IHNwZWNQb2xpY3kgPT09ICdERUZJ
TkVfTUFOWScpKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChm
YWxzZSwgJ1JlYWN0Q2xhc3M6IFVuZXhwZWN0ZWQgc3BlYyBwb2xpY3kgJXMgZm9yIGtleSAlcyB3
aGVuIG1peGluZyBpbiBjb21wb25lbnQgc3BlY3MuJywgc3BlY1BvbGljeSwgbmFtZSkgOiBfcHJv
ZEludmFyaWFudCgnNzcnLCBzcGVjUG9saWN5LCBuYW1lKSA6IHZvaWQgMDsKKworICAgICAgICAg
IC8vIEZvciBtZXRob2RzIHdoaWNoIGFyZSBkZWZpbmVkIG1vcmUgdGhhbiBvbmNlLCBjYWxsIHRo
ZSBleGlzdGluZworICAgICAgICAgIC8vIG1ldGhvZHMgYmVmb3JlIGNhbGxpbmcgdGhlIG5ldyBw
cm9wZXJ0eSwgbWVyZ2luZyBpZiBhcHByb3ByaWF0ZS4KKyAgICAgICAgICBpZiAoc3BlY1BvbGlj
eSA9PT0gJ0RFRklORV9NQU5ZX01FUkdFRCcpIHsKKyAgICAgICAgICAgIHByb3RvW25hbWVdID0g
Y3JlYXRlTWVyZ2VkUmVzdWx0RnVuY3Rpb24ocHJvdG9bbmFtZV0sIHByb3BlcnR5KTsKKyAgICAg
ICAgICB9IGVsc2UgaWYgKHNwZWNQb2xpY3kgPT09ICdERUZJTkVfTUFOWScpIHsKKyAgICAgICAg
ICAgIHByb3RvW25hbWVdID0gY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKHByb3RvW25hbWVdLCBwcm9w
ZXJ0eSk7CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHByb3RvW25h
bWVdID0gcHJvcGVydHk7CisgICAgICAgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0
aW9uJykgeworICAgICAgICAgICAgLy8gQWRkIHZlcmJvc2UgZGlzcGxheU5hbWUgdG8gdGhlIGZ1
bmN0aW9uLCB3aGljaCBoZWxwcyB3aGVuIGxvb2tpbmcKKyAgICAgICAgICAgIC8vIGF0IHByb2Zp
bGluZyB0b29scy4KKyAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09ICdmdW5jdGlv
bicgJiYgc3BlYy5kaXNwbGF5TmFtZSkgeworICAgICAgICAgICAgICBwcm90b1tuYW1lXS5kaXNw
bGF5TmFtZSA9IHNwZWMuZGlzcGxheU5hbWUgKyAnXycgKyBuYW1lOworICAgICAgICAgICAgfQor
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorfQorCitmdW5jdGlv
biBtaXhTdGF0aWNTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3Rvciwgc3RhdGljcykgeworICBp
ZiAoIXN0YXRpY3MpIHsKKyAgICByZXR1cm47CisgIH0KKyAgZm9yICh2YXIgbmFtZSBpbiBzdGF0
aWNzKSB7CisgICAgdmFyIHByb3BlcnR5ID0gc3RhdGljc1tuYW1lXTsKKyAgICBpZiAoIXN0YXRp
Y3MuaGFzT3duUHJvcGVydHkobmFtZSkpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAg
IHZhciBpc1Jlc2VydmVkID0gbmFtZSBpbiBSRVNFUlZFRF9TUEVDX0tFWVM7CisgICAgISFpc1Jl
c2VydmVkID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNl
LCAnUmVhY3RDbGFzczogWW91IGFyZSBhdHRlbXB0aW5nIHRvIGRlZmluZSBhIHJlc2VydmVkIHBy
b3BlcnR5LCBgJXNgLCB0aGF0IHNob3VsZG5cJ3QgYmUgb24gdGhlICJzdGF0aWNzIiBrZXkuIERl
ZmluZSBpdCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBpbnN0ZWFkOyBpdCB3aWxsIHN0aWxsIGJl
IGFjY2Vzc2libGUgb24gdGhlIGNvbnN0cnVjdG9yLicsIG5hbWUpIDogX3Byb2RJbnZhcmlhbnQo
Jzc4JywgbmFtZSkgOiB2b2lkIDA7CisKKyAgICB2YXIgaXNJbmhlcml0ZWQgPSBuYW1lIGluIENv
bnN0cnVjdG9yOworICAgICEhaXNJbmhlcml0ZWQgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVj
dGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdENsYXNzOiBZb3UgYXJlIGF0dGVtcHRpbmcg
dG8gZGVmaW5lIGAlc2Agb24geW91ciBjb21wb25lbnQgbW9yZSB0aGFuIG9uY2UuIFRoaXMgY29u
ZmxpY3QgbWF5IGJlIGR1ZSB0byBhIG1peGluLicsIG5hbWUpIDogX3Byb2RJbnZhcmlhbnQoJzc5
JywgbmFtZSkgOiB2b2lkIDA7CisgICAgQ29uc3RydWN0b3JbbmFtZV0gPSBwcm9wZXJ0eTsKKyAg
fQorfQorCisvKioKKyAqIE1lcmdlIHR3byBvYmplY3RzLCBidXQgdGhyb3cgaWYgYm90aCBjb250
YWluIHRoZSBzYW1lIGtleS4KKyAqCisgKiBAcGFyYW0ge29iamVjdH0gb25lIFRoZSBmaXJzdCBv
YmplY3QsIHdoaWNoIGlzIG11dGF0ZWQuCisgKiBAcGFyYW0ge29iamVjdH0gdHdvIFRoZSBzZWNv
bmQgb2JqZWN0CisgKiBAcmV0dXJuIHtvYmplY3R9IG9uZSBhZnRlciBpdCBoYXMgYmVlbiBtdXRh
dGVkIHRvIGNvbnRhaW4gZXZlcnl0aGluZyBpbiB0d28uCisgKi8KK2Z1bmN0aW9uIG1lcmdlSW50
b1dpdGhOb0R1cGxpY2F0ZUtleXMob25lLCB0d28pIHsKKyAgIShvbmUgJiYgdHdvICYmIHR5cGVv
ZiBvbmUgPT09ICdvYmplY3QnICYmIHR5cGVvZiB0d28gPT09ICdvYmplY3QnKSA/ICJkZXZlbG9w
bWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ21lcmdlSW50b1dpdGhO
b0R1cGxpY2F0ZUtleXMoKTogQ2Fubm90IG1lcmdlIG5vbi1vYmplY3RzLicpIDogX3Byb2RJbnZh
cmlhbnQoJzgwJykgOiB2b2lkIDA7CisKKyAgZm9yICh2YXIga2V5IGluIHR3bykgeworICAgIGlm
ICh0d28uaGFzT3duUHJvcGVydHkoa2V5KSkgeworICAgICAgIShvbmVba2V5XSA9PT0gdW5kZWZp
bmVkKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwg
J21lcmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtleXMoKTogVHJpZWQgdG8gbWVyZ2UgdHdvIG9iamVj
dHMgd2l0aCB0aGUgc2FtZSBrZXk6IGAlc2AuIFRoaXMgY29uZmxpY3QgbWF5IGJlIGR1ZSB0byBh
IG1peGluOyBpbiBwYXJ0aWN1bGFyLCB0aGlzIG1heSBiZSBjYXVzZWQgYnkgdHdvIGdldEluaXRp
YWxTdGF0ZSgpIG9yIGdldERlZmF1bHRQcm9wcygpIG1ldGhvZHMgcmV0dXJuaW5nIG9iamVjdHMg
d2l0aCBjbGFzaGluZyBrZXlzLicsIGtleSkgOiBfcHJvZEludmFyaWFudCgnODEnLCBrZXkpIDog
dm9pZCAwOworICAgICAgb25lW2tleV0gPSB0d29ba2V5XTsKKyAgICB9CisgIH0KKyAgcmV0dXJu
IG9uZTsKK30KKworLyoqCisgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIHR3byBm
dW5jdGlvbnMgYW5kIG1lcmdlcyB0aGVpciByZXR1cm4gdmFsdWVzLgorICoKKyAqIEBwYXJhbSB7
ZnVuY3Rpb259IG9uZSBGdW5jdGlvbiB0byBpbnZva2UgZmlyc3QuCisgKiBAcGFyYW0ge2Z1bmN0
aW9ufSB0d28gRnVuY3Rpb24gdG8gaW52b2tlIHNlY29uZC4KKyAqIEByZXR1cm4ge2Z1bmN0aW9u
fSBGdW5jdGlvbiB0aGF0IGludm9rZXMgdGhlIHR3byBhcmd1bWVudCBmdW5jdGlvbnMuCisgKiBA
cHJpdmF0ZQorICovCitmdW5jdGlvbiBjcmVhdGVNZXJnZWRSZXN1bHRGdW5jdGlvbihvbmUsIHR3
bykgeworICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkUmVzdWx0KCkgeworICAgIHZhciBhID0gb25l
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgdmFyIGIgPSB0d28uYXBwbHkodGhpcywgYXJn
dW1lbnRzKTsKKyAgICBpZiAoYSA9PSBudWxsKSB7CisgICAgICByZXR1cm4gYjsKKyAgICB9IGVs
c2UgaWYgKGIgPT0gbnVsbCkgeworICAgICAgcmV0dXJuIGE7CisgICAgfQorICAgIHZhciBjID0g
e307CisgICAgbWVyZ2VJbnRvV2l0aE5vRHVwbGljYXRlS2V5cyhjLCBhKTsKKyAgICBtZXJnZUlu
dG9XaXRoTm9EdXBsaWNhdGVLZXlzKGMsIGIpOworICAgIHJldHVybiBjOworICB9OworfQorCisv
KioKKyAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgdHdvIGZ1bmN0aW9ucyBhbmQg
aWdub3JlcyB0aGVpciByZXR1cm4gdmFsZXMuCisgKgorICogQHBhcmFtIHtmdW5jdGlvbn0gb25l
IEZ1bmN0aW9uIHRvIGludm9rZSBmaXJzdC4KKyAqIEBwYXJhbSB7ZnVuY3Rpb259IHR3byBGdW5j
dGlvbiB0byBpbnZva2Ugc2Vjb25kLgorICogQHJldHVybiB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRo
YXQgaW52b2tlcyB0aGUgdHdvIGFyZ3VtZW50IGZ1bmN0aW9ucy4KKyAqIEBwcml2YXRlCisgKi8K
K2Z1bmN0aW9uIGNyZWF0ZUNoYWluZWRGdW5jdGlvbihvbmUsIHR3bykgeworICByZXR1cm4gZnVu
Y3Rpb24gY2hhaW5lZEZ1bmN0aW9uKCkgeworICAgIG9uZS5hcHBseSh0aGlzLCBhcmd1bWVudHMp
OworICAgIHR3by5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICB9OworfQorCisvKioKKyAqIEJp
bmRzIGEgbWV0aG9kIHRvIHRoZSBjb21wb25lbnQuCisgKgorICogQHBhcmFtIHtvYmplY3R9IGNv
bXBvbmVudCBDb21wb25lbnQgd2hvc2UgbWV0aG9kIGlzIGdvaW5nIHRvIGJlIGJvdW5kLgorICog
QHBhcmFtIHtmdW5jdGlvbn0gbWV0aG9kIE1ldGhvZCB0byBiZSBib3VuZC4KKyAqIEByZXR1cm4g
e2Z1bmN0aW9ufSBUaGUgYm91bmQgbWV0aG9kLgorICovCitmdW5jdGlvbiBiaW5kQXV0b0JpbmRN
ZXRob2QoY29tcG9uZW50LCBtZXRob2QpIHsKKyAgdmFyIGJvdW5kTWV0aG9kID0gbWV0aG9kLmJp
bmQoY29tcG9uZW50KTsKKyAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgewor
ICAgIGJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZENvbnRleHQgPSBjb21wb25lbnQ7CisgICAgYm91
bmRNZXRob2QuX19yZWFjdEJvdW5kTWV0aG9kID0gbWV0aG9kOworICAgIGJvdW5kTWV0aG9kLl9f
cmVhY3RCb3VuZEFyZ3VtZW50cyA9IG51bGw7CisgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBjb21w
b25lbnQuY29uc3RydWN0b3IuZGlzcGxheU5hbWU7CisgICAgdmFyIF9iaW5kID0gYm91bmRNZXRo
b2QuYmluZDsKKyAgICBib3VuZE1ldGhvZC5iaW5kID0gZnVuY3Rpb24gKG5ld1RoaXMpIHsKKyAg
ICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+
IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykgeworICAg
ICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTsKKyAgICAgIH0KKworICAgICAg
Ly8gVXNlciBpcyB0cnlpbmcgdG8gYmluZCgpIGFuIGF1dG9ib3VuZCBtZXRob2Q7IHdlIGVmZmVj
dGl2ZWx5IHdpbGwKKyAgICAgIC8vIGlnbm9yZSB0aGUgdmFsdWUgb2YgInRoaXMiIHRoYXQgdGhl
IHVzZXIgaXMgdHJ5aW5nIHRvIHVzZSwgc28KKyAgICAgIC8vIGxldCdzIHdhcm4uCisgICAgICBp
ZiAobmV3VGhpcyAhPT0gY29tcG9uZW50ICYmIG5ld1RoaXMgIT09IG51bGwpIHsKKyAgICAgICAg
ImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ2JpbmQoKTog
UmVhY3QgY29tcG9uZW50IG1ldGhvZHMgbWF5IG9ubHkgYmUgYm91bmQgdG8gdGhlICcgKyAnY29t
cG9uZW50IGluc3RhbmNlLiBTZWUgJXMnLCBjb21wb25lbnROYW1lKSA6IHZvaWQgMDsKKyAgICAg
IH0gZWxzZSBpZiAoIWFyZ3MubGVuZ3RoKSB7CisgICAgICAgICJkZXZlbG9wbWVudCIgIT09ICdw
cm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdiaW5kKCk6IFlvdSBhcmUgYmluZGluZyBhIGNv
bXBvbmVudCBtZXRob2QgdG8gdGhlIGNvbXBvbmVudC4gJyArICdSZWFjdCBkb2VzIHRoaXMgZm9y
IHlvdSBhdXRvbWF0aWNhbGx5IGluIGEgaGlnaC1wZXJmb3JtYW5jZSAnICsgJ3dheSwgc28geW91
IGNhbiBzYWZlbHkgcmVtb3ZlIHRoaXMgY2FsbC4gU2VlICVzJywgY29tcG9uZW50TmFtZSkgOiB2
b2lkIDA7CisgICAgICAgIHJldHVybiBib3VuZE1ldGhvZDsKKyAgICAgIH0KKyAgICAgIHZhciBy
ZWJvdW5kTWV0aG9kID0gX2JpbmQuYXBwbHkoYm91bmRNZXRob2QsIGFyZ3VtZW50cyk7CisgICAg
ICByZWJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZENvbnRleHQgPSBjb21wb25lbnQ7CisgICAgICBy
ZWJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZE1ldGhvZCA9IG1ldGhvZDsKKyAgICAgIHJlYm91bmRN
ZXRob2QuX19yZWFjdEJvdW5kQXJndW1lbnRzID0gYXJnczsKKyAgICAgIHJldHVybiByZWJvdW5k
TWV0aG9kOworICAgIH07CisgIH0KKyAgcmV0dXJuIGJvdW5kTWV0aG9kOworfQorCisvKioKKyAq
IEJpbmRzIGFsbCBhdXRvLWJvdW5kIG1ldGhvZHMgaW4gYSBjb21wb25lbnQuCisgKgorICogQHBh
cmFtIHtvYmplY3R9IGNvbXBvbmVudCBDb21wb25lbnQgd2hvc2UgbWV0aG9kIGlzIGdvaW5nIHRv
IGJlIGJvdW5kLgorICovCitmdW5jdGlvbiBiaW5kQXV0b0JpbmRNZXRob2RzKGNvbXBvbmVudCkg
eworICB2YXIgcGFpcnMgPSBjb21wb25lbnQuX19yZWFjdEF1dG9CaW5kUGFpcnM7CisgIGZvciAo
dmFyIGkgPSAwOyBpIDwgcGFpcnMubGVuZ3RoOyBpICs9IDIpIHsKKyAgICB2YXIgYXV0b0JpbmRL
ZXkgPSBwYWlyc1tpXTsKKyAgICB2YXIgbWV0aG9kID0gcGFpcnNbaSArIDFdOworICAgIGNvbXBv
bmVudFthdXRvQmluZEtleV0gPSBiaW5kQXV0b0JpbmRNZXRob2QoY29tcG9uZW50LCBtZXRob2Qp
OworICB9Cit9CisKKy8qKgorICogQWRkIG1vcmUgdG8gdGhlIFJlYWN0Q2xhc3MgYmFzZSBjbGFz
cy4gVGhlc2UgYXJlIGFsbCBsZWdhY3kgZmVhdHVyZXMgYW5kCisgKiB0aGVyZWZvcmUgbm90IGFs
cmVhZHkgcGFydCBvZiB0aGUgbW9kZXJuIFJlYWN0Q29tcG9uZW50LgorICovCit2YXIgUmVhY3RD
bGFzc01peGluID0geworCisgIC8qKgorICAgKiBUT0RPOiBUaGlzIHdpbGwgYmUgZGVwcmVjYXRl
ZCBiZWNhdXNlIHN0YXRlIHNob3VsZCBhbHdheXMga2VlcCBhIGNvbnNpc3RlbnQKKyAgICogdHlw
ZSBzaWduYXR1cmUgYW5kIHRoZSBvbmx5IHVzZSBjYXNlIGZvciB0aGlzLCBpcyB0byBhdm9pZCB0
aGF0LgorICAgKi8KKyAgcmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAobmV3U3RhdGUsIGNhbGxiYWNr
KSB7CisgICAgdGhpcy51cGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUodGhpcywgbmV3U3RhdGUp
OworICAgIGlmIChjYWxsYmFjaykgeworICAgICAgdGhpcy51cGRhdGVyLmVucXVldWVDYWxsYmFj
ayh0aGlzLCBjYWxsYmFjaywgJ3JlcGxhY2VTdGF0ZScpOworICAgIH0KKyAgfSwKKworICAvKioK
KyAgICogQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoaXMgY29tcG9zaXRlIGNvbXBvbmVudCBpcyBt
b3VudGVkLgorICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIG1vdW50ZWQsIGZhbHNlIG90
aGVyd2lzZS4KKyAgICogQHByb3RlY3RlZAorICAgKiBAZmluYWwKKyAgICovCisgIGlzTW91bnRl
ZDogZnVuY3Rpb24gKCkgeworICAgIHJldHVybiB0aGlzLnVwZGF0ZXIuaXNNb3VudGVkKHRoaXMp
OworICB9Cit9OworCit2YXIgUmVhY3RDbGFzc0NvbXBvbmVudCA9IGZ1bmN0aW9uICgpIHt9Owor
X2Fzc2lnbihSZWFjdENsYXNzQ29tcG9uZW50LnByb3RvdHlwZSwgUmVhY3RDb21wb25lbnQucHJv
dG90eXBlLCBSZWFjdENsYXNzTWl4aW4pOworCit2YXIgZGlkV2FybkRlcHJlY2F0ZWQgPSBmYWxz
ZTsKKworLyoqCisgKiBNb2R1bGUgZm9yIGNyZWF0aW5nIGNvbXBvc2l0ZSBjb21wb25lbnRzLgor
ICoKKyAqIEBjbGFzcyBSZWFjdENsYXNzCisgKi8KK3ZhciBSZWFjdENsYXNzID0geworCisgIC8q
KgorICAgKiBDcmVhdGVzIGEgY29tcG9zaXRlIGNvbXBvbmVudCBjbGFzcyBnaXZlbiBhIGNsYXNz
IHNwZWNpZmljYXRpb24uCisgICAqIFNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFj
dC9kb2NzL3RvcC1sZXZlbC1hcGkuaHRtbCNyZWFjdC5jcmVhdGVjbGFzcworICAgKgorICAgKiBA
cGFyYW0ge29iamVjdH0gc3BlYyBDbGFzcyBzcGVjaWZpY2F0aW9uICh3aGljaCBtdXN0IGRlZmlu
ZSBgcmVuZGVyYCkuCisgICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBDb21wb25lbnQgY29uc3RydWN0
b3IgZnVuY3Rpb24uCisgICAqIEBwdWJsaWMKKyAgICovCisgIGNyZWF0ZUNsYXNzOiBmdW5jdGlv
biAoc3BlYykgeworICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAg
ICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZGlkV2FybkRlcHJl
Y2F0ZWQsICclczogUmVhY3QuY3JlYXRlQ2xhc3MgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSBy
ZW1vdmVkIGluIHZlcnNpb24gMTYuICcgKyAnVXNlIHBsYWluIEphdmFTY3JpcHQgY2xhc3NlcyBp
bnN0ZWFkLiBJZiB5b3VcJ3JlIG5vdCB5ZXQgcmVhZHkgdG8gJyArICdtaWdyYXRlLCBjcmVhdGUt
cmVhY3QtY2xhc3MgaXMgYXZhaWxhYmxlIG9uIG5wbSBhcyBhICcgKyAnZHJvcC1pbiByZXBsYWNl
bWVudC4nLCBzcGVjICYmIHNwZWMuZGlzcGxheU5hbWUgfHwgJ0EgQ29tcG9uZW50JykgOiB2b2lk
IDA7CisgICAgICBkaWRXYXJuRGVwcmVjYXRlZCA9IHRydWU7CisgICAgfQorCisgICAgLy8gVG8g
a2VlcCBvdXIgd2FybmluZ3MgbW9yZSB1bmRlcnN0YW5kYWJsZSwgd2UnbGwgdXNlIGEgbGl0dGxl
IGhhY2sgaGVyZSB0bworICAgIC8vIGVuc3VyZSB0aGF0IENvbnN0cnVjdG9yLm5hbWUgIT09ICdD
b25zdHJ1Y3RvcicuIFRoaXMgbWFrZXMgc3VyZSB3ZSBkb24ndAorICAgIC8vIHVubmVjZXNzYXJp
bHkgaWRlbnRpZnkgYSBjbGFzcyB3aXRob3V0IGRpc3BsYXlOYW1lIGFzICdDb25zdHJ1Y3Rvcicu
CisgICAgdmFyIENvbnN0cnVjdG9yID0gaWRlbnRpdHkoZnVuY3Rpb24gKHByb3BzLCBjb250ZXh0
LCB1cGRhdGVyKSB7CisgICAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIGdldHMgb3ZlcnJpZGRlbiBi
eSBtb2Nrcy4gVGhlIGFyZ3VtZW50IGlzIHVzZWQKKyAgICAgIC8vIGJ5IG1vY2tzIHRvIGFzc2Vy
dCBvbiB3aGF0IGdldHMgbW91bnRlZC4KKworICAgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdw
cm9kdWN0aW9uJykgeworICAgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3
YXJuaW5nKHRoaXMgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvciwgJ1NvbWV0aGluZyBpcyBjYWxsaW5n
IGEgUmVhY3QgY29tcG9uZW50IGRpcmVjdGx5LiBVc2UgYSBmYWN0b3J5IG9yICcgKyAnSlNYIGlu
c3RlYWQuIFNlZTogaHR0cHM6Ly9mYi5tZS9yZWFjdC1sZWdhY3lmYWN0b3J5JykgOiB2b2lkIDA7
CisgICAgICB9CisKKyAgICAgIC8vIFdpcmUgdXAgYXV0by1iaW5kaW5nCisgICAgICBpZiAodGhp
cy5fX3JlYWN0QXV0b0JpbmRQYWlycy5sZW5ndGgpIHsKKyAgICAgICAgYmluZEF1dG9CaW5kTWV0
aG9kcyh0aGlzKTsKKyAgICAgIH0KKworICAgICAgdGhpcy5wcm9wcyA9IHByb3BzOworICAgICAg
dGhpcy5jb250ZXh0ID0gY29udGV4dDsKKyAgICAgIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0Owor
ICAgICAgdGhpcy51cGRhdGVyID0gdXBkYXRlciB8fCBSZWFjdE5vb3BVcGRhdGVRdWV1ZTsKKwor
ICAgICAgdGhpcy5zdGF0ZSA9IG51bGw7CisKKyAgICAgIC8vIFJlYWN0Q2xhc3NlcyBkb2Vzbid0
IGhhdmUgY29uc3RydWN0b3JzLiBJbnN0ZWFkLCB0aGV5IHVzZSB0aGUKKyAgICAgIC8vIGdldElu
aXRpYWxTdGF0ZSBhbmQgY29tcG9uZW50V2lsbE1vdW50IG1ldGhvZHMgZm9yIGluaXRpYWxpemF0
aW9uLgorCisgICAgICB2YXIgaW5pdGlhbFN0YXRlID0gdGhpcy5nZXRJbml0aWFsU3RhdGUgPyB0
aGlzLmdldEluaXRpYWxTdGF0ZSgpIDogbnVsbDsKKyAgICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9
PSAncHJvZHVjdGlvbicpIHsKKyAgICAgICAgLy8gV2UgYWxsb3cgYXV0by1tb2NrcyB0byBwcm9j
ZWVkIGFzIGlmIHRoZXkncmUgcmV0dXJuaW5nIG51bGwuCisgICAgICAgIGlmIChpbml0aWFsU3Rh
dGUgPT09IHVuZGVmaW5lZCAmJiB0aGlzLmdldEluaXRpYWxTdGF0ZS5faXNNb2NrRnVuY3Rpb24p
IHsKKyAgICAgICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IGJhZCBwcmFjdGljZS4gQ29uc2lkZXIg
d2FybmluZyBoZXJlIGFuZAorICAgICAgICAgIC8vIGRlcHJlY2F0aW5nIHRoaXMgY29udmVuaWVu
Y2UuCisgICAgICAgICAgaW5pdGlhbFN0YXRlID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgfQor
ICAgICAgISh0eXBlb2YgaW5pdGlhbFN0YXRlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJh
eShpbml0aWFsU3RhdGUpKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFy
aWFudChmYWxzZSwgJyVzLmdldEluaXRpYWxTdGF0ZSgpOiBtdXN0IHJldHVybiBhbiBvYmplY3Qg
b3IgbnVsbCcsIENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBv
bmVudCcpIDogX3Byb2RJbnZhcmlhbnQoJzgyJywgQ29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwg
J1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50JykgOiB2b2lkIDA7CisKKyAgICAgIHRoaXMuc3RhdGUg
PSBpbml0aWFsU3RhdGU7CisgICAgfSk7CisgICAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gbmV3
IFJlYWN0Q2xhc3NDb21wb25lbnQoKTsKKyAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3Ry
dWN0b3IgPSBDb25zdHJ1Y3RvcjsKKyAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUuX19yZWFjdEF1
dG9CaW5kUGFpcnMgPSBbXTsKKworICAgIGluamVjdGVkTWl4aW5zLmZvckVhY2gobWl4U3BlY0lu
dG9Db21wb25lbnQuYmluZChudWxsLCBDb25zdHJ1Y3RvcikpOworCisgICAgbWl4U3BlY0ludG9D
b21wb25lbnQoQ29uc3RydWN0b3IsIHNwZWMpOworCisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVm
YXVsdFByb3BzIHByb3BlcnR5IGFmdGVyIGFsbCBtaXhpbnMgaGF2ZSBiZWVuIG1lcmdlZC4KKyAg
ICBpZiAoQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzKSB7CisgICAgICBDb25zdHJ1Y3Rvci5k
ZWZhdWx0UHJvcHMgPSBDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMoKTsKKyAgICB9CisKKyAg
ICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICAvLyBUaGlzIGlz
IGEgdGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHVzZSBvZiB0aGVzZSBtZXRob2QgbmFtZXMgaXMg
b2ssCisgICAgICAvLyBzaW5jZSBpdCdzIHVzZWQgd2l0aCBjcmVhdGVDbGFzcy4gSWYgaXQncyBu
b3QsIHRoZW4gaXQncyBsaWtlbHkgYQorICAgICAgLy8gbWlzdGFrZSBzbyB3ZSdsbCB3YXJuIHlv
dSB0byB1c2UgdGhlIHN0YXRpYyBwcm9wZXJ0eSwgcHJvcGVydHkKKyAgICAgIC8vIGluaXRpYWxp
emVyIG9yIGNvbnN0cnVjdG9yIHJlc3BlY3RpdmVseS4KKyAgICAgIGlmIChDb25zdHJ1Y3Rvci5n
ZXREZWZhdWx0UHJvcHMpIHsKKyAgICAgICAgQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzLmlz
UmVhY3RDbGFzc0FwcHJvdmVkID0ge307CisgICAgICB9CisgICAgICBpZiAoQ29uc3RydWN0b3Iu
cHJvdG90eXBlLmdldEluaXRpYWxTdGF0ZSkgeworICAgICAgICBDb25zdHJ1Y3Rvci5wcm90b3R5
cGUuZ2V0SW5pdGlhbFN0YXRlLmlzUmVhY3RDbGFzc0FwcHJvdmVkID0ge307CisgICAgICB9Cisg
ICAgfQorCisgICAgIUNvbnN0cnVjdG9yLnByb3RvdHlwZS5yZW5kZXIgPyAiZGV2ZWxvcG1lbnQi
ICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdjcmVhdGVDbGFzcyguLi4pOiBD
bGFzcyBzcGVjaWZpY2F0aW9uIG11c3QgaW1wbGVtZW50IGEgYHJlbmRlcmAgbWV0aG9kLicpIDog
X3Byb2RJbnZhcmlhbnQoJzgzJykgOiB2b2lkIDA7CisKKyAgICBpZiAoImRldmVsb3BtZW50IiAh
PT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicg
PyB3YXJuaW5nKCFDb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29tcG9uZW50U2hvdWxkVXBkYXRlLCAn
JXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudFNob3VsZFVwZGF0ZSgpLiBEaWQg
eW91IG1lYW4gc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk/ICcgKyAnVGhlIG5hbWUgaXMgcGhyYXNl
ZCBhcyBhIHF1ZXN0aW9uIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzICcgKyAnZXhwZWN0ZWQgdG8g
cmV0dXJuIGEgdmFsdWUuJywgc3BlYy5kaXNwbGF5TmFtZSB8fCAnQSBjb21wb25lbnQnKSA6IHZv
aWQgMDsKKyAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoIUNv
bnN0cnVjdG9yLnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzLCAnJXMgaGFzIGEg
bWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMoKS4gRGlkIHlvdSBt
ZWFuIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKT8nLCBzcGVjLmRpc3BsYXlOYW1lIHx8ICdB
IGNvbXBvbmVudCcpIDogdm9pZCAwOworICAgIH0KKworICAgIC8vIFJlZHVjZSB0aW1lIHNwZW50
IGRvaW5nIGxvb2t1cHMgYnkgc2V0dGluZyB0aGVzZSBvbiB0aGUgcHJvdG90eXBlLgorICAgIGZv
ciAodmFyIG1ldGhvZE5hbWUgaW4gUmVhY3RDbGFzc0ludGVyZmFjZSkgeworICAgICAgaWYgKCFD
b25zdHJ1Y3Rvci5wcm90b3R5cGVbbWV0aG9kTmFtZV0pIHsKKyAgICAgICAgQ29uc3RydWN0b3Iu
cHJvdG90eXBlW21ldGhvZE5hbWVdID0gbnVsbDsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gQ29uc3RydWN0b3I7CisgIH0sCisKKyAgaW5qZWN0aW9uOiB7CisgICAgaW5qZWN0TWl4aW46
IGZ1bmN0aW9uIChtaXhpbikgeworICAgICAgaW5qZWN0ZWRNaXhpbnMucHVzaChtaXhpbik7Cisg
ICAgfQorICB9CisKK307CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RDbGFzczsKK30seyIxMSI6
MTEsIjE2IjoxNiwiMjEiOjIxLCIyMiI6MjIsIjM5IjozOSwiNDYiOjQ2LCI0NyI6NDcsIjQ5Ijo0
OSwiNTAiOjUwfV0sMTE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisg
KiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBC
U0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICog
b2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUg
c2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIF9wcm9kSW52
YXJpYW50ID0gX2RlcmVxXygzOSk7CisKK3ZhciBSZWFjdE5vb3BVcGRhdGVRdWV1ZSA9IF9kZXJl
cV8oMjEpOworCit2YXIgY2FuRGVmaW5lUHJvcGVydHkgPSBfZGVyZXFfKDMzKTsKK3ZhciBlbXB0
eU9iamVjdCA9IF9kZXJlcV8oNDYpOwordmFyIGludmFyaWFudCA9IF9kZXJlcV8oNDcpOwordmFy
IHdhcm5pbmcgPSBfZGVyZXFfKDQ5KTsKKworLyoqCisgKiBCYXNlIGNsYXNzIGhlbHBlcnMgZm9y
IHRoZSB1cGRhdGluZyBzdGF0ZSBvZiBhIGNvbXBvbmVudC4KKyAqLworZnVuY3Rpb24gUmVhY3RD
b21wb25lbnQocHJvcHMsIGNvbnRleHQsIHVwZGF0ZXIpIHsKKyAgdGhpcy5wcm9wcyA9IHByb3Bz
OworICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OworICB0aGlzLnJlZnMgPSBlbXB0eU9iamVjdDsK
KyAgLy8gV2UgaW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCB1cGRhdGVyIGJ1dCB0aGUgcmVhbCBvbmUg
Z2V0cyBpbmplY3RlZCBieSB0aGUKKyAgLy8gcmVuZGVyZXIuCisgIHRoaXMudXBkYXRlciA9IHVw
ZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7Cit9CisKK1JlYWN0Q29tcG9uZW50LnByb3Rv
dHlwZS5pc1JlYWN0Q29tcG9uZW50ID0ge307CisKKy8qKgorICogU2V0cyBhIHN1YnNldCBvZiB0
aGUgc3RhdGUuIEFsd2F5cyB1c2UgdGhpcyB0byBtdXRhdGUKKyAqIHN0YXRlLiBZb3Ugc2hvdWxk
IHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBpbW11dGFibGUuCisgKgorICogVGhlcmUgaXMgbm8gZ3Vh
cmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc28K
KyAqIGFjY2Vzc2luZyBgdGhpcy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkg
cmV0dXJuIHRoZSBvbGQgdmFsdWUuCisgKgorICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQg
Y2FsbHMgdG8gYHNldFN0YXRlYCB3aWxsIHJ1biBzeW5jaHJvbm91c2x5LAorICogYXMgdGhleSBt
YXkgZXZlbnR1YWxseSBiZSBiYXRjaGVkIHRvZ2V0aGVyLiAgWW91IGNhbiBwcm92aWRlIGFuIG9w
dGlvbmFsCisgKiBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgY2FsbCB0
byBzZXRTdGF0ZSBpcyBhY3R1YWxseQorICogY29tcGxldGVkLgorICoKKyAqIFdoZW4gYSBmdW5j
dGlvbiBpcyBwcm92aWRlZCB0byBzZXRTdGF0ZSwgaXQgd2lsbCBiZSBjYWxsZWQgYXQgc29tZSBw
b2ludCBpbgorICogdGhlIGZ1dHVyZSAobm90IHN5bmNocm9ub3VzbHkpLiBJdCB3aWxsIGJlIGNh
bGxlZCB3aXRoIHRoZSB1cCB0byBkYXRlCisgKiBjb21wb25lbnQgYXJndW1lbnRzIChzdGF0ZSwg
cHJvcHMsIGNvbnRleHQpLiBUaGVzZSB2YWx1ZXMgY2FuIGJlIGRpZmZlcmVudAorICogZnJvbSB0
aGlzLiogYmVjYXVzZSB5b3VyIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgYWZ0ZXIgcmVjZWl2ZVBy
b3BzIGJ1dCBiZWZvcmUKKyAqIHNob3VsZENvbXBvbmVudFVwZGF0ZSwgYW5kIHRoaXMgbmV3IHN0
YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgd2lsbCBub3QgeWV0IGJlCisgKiBhc3NpZ25lZCB0byB0
aGlzLgorICoKKyAqIEBwYXJhbSB7b2JqZWN0fGZ1bmN0aW9ufSBwYXJ0aWFsU3RhdGUgTmV4dCBw
YXJ0aWFsIHN0YXRlIG9yIGZ1bmN0aW9uIHRvCisgKiAgICAgICAgcHJvZHVjZSBuZXh0IHBhcnRp
YWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggY3VycmVudCBzdGF0ZS4KKyAqIEBwYXJhbSB7P2Z1
bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgc3RhdGUgaXMgdXBkYXRlZC4KKyAqIEBmaW5h
bAorICogQHByb3RlY3RlZAorICovCitSZWFjdENvbXBvbmVudC5wcm90b3R5cGUuc2V0U3RhdGUg
PSBmdW5jdGlvbiAocGFydGlhbFN0YXRlLCBjYWxsYmFjaykgeworICAhKHR5cGVvZiBwYXJ0aWFs
U3RhdGUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdmdW5jdGlvbicg
fHwgcGFydGlhbFN0YXRlID09IG51bGwpID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24n
ID8gaW52YXJpYW50KGZhbHNlLCAnc2V0U3RhdGUoLi4uKTogdGFrZXMgYW4gb2JqZWN0IG9mIHN0
YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIG9i
amVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMuJykgOiBfcHJvZEludmFyaWFudCgnODUnKSA6IHZvaWQg
MDsKKyAgdGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLCBwYXJ0aWFsU3RhdGUpOwor
ICBpZiAoY2FsbGJhY2spIHsKKyAgICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZUNhbGxiYWNrKHRoaXMs
IGNhbGxiYWNrLCAnc2V0U3RhdGUnKTsKKyAgfQorfTsKKworLyoqCisgKiBGb3JjZXMgYW4gdXBk
YXRlLiBUaGlzIHNob3VsZCBvbmx5IGJlIGludm9rZWQgd2hlbiBpdCBpcyBrbm93biB3aXRoCisg
KiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2FjdGlvbi4KKyAq
CisgKiBZb3UgbWF5IHdhbnQgdG8gY2FsbCB0aGlzIHdoZW4geW91IGtub3cgdGhhdCBzb21lIGRl
ZXBlciBhc3BlY3Qgb2YgdGhlCisgKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBidXQg
YHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC4KKyAqCisgKiBUaGlzIHdpbGwgbm90IGludm9rZSBg
c2hvdWxkQ29tcG9uZW50VXBkYXRlYCwgYnV0IGl0IHdpbGwgaW52b2tlCisgKiBgY29tcG9uZW50
V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLgorICoKKyAqIEBwYXJhbSB7P2Z1
bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgdXBkYXRlIGlzIGNvbXBsZXRlLgorICogQGZp
bmFsCisgKiBAcHJvdGVjdGVkCisgKi8KK1JlYWN0Q29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVw
ZGF0ZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNl
VXBkYXRlKHRoaXMpOworICBpZiAoY2FsbGJhY2spIHsKKyAgICB0aGlzLnVwZGF0ZXIuZW5xdWV1
ZUNhbGxiYWNrKHRoaXMsIGNhbGxiYWNrLCAnZm9yY2VVcGRhdGUnKTsKKyAgfQorfTsKKworLyoq
CisgKiBEZXByZWNhdGVkIEFQSXMuIFRoZXNlIEFQSXMgdXNlZCB0byBleGlzdCBvbiBjbGFzc2lj
IFJlYWN0IGNsYXNzZXMgYnV0IHNpbmNlCisgKiB3ZSB3b3VsZCBsaWtlIHRvIGRlcHJlY2F0ZSB0
aGVtLCB3ZSdyZSBub3QgZ29pbmcgdG8gbW92ZSB0aGVtIG92ZXIgdG8gdGhpcworICogbW9kZXJu
IGJhc2UgY2xhc3MuIEluc3RlYWQsIHdlIGRlZmluZSBhIGdldHRlciB0aGF0IHdhcm5zIGlmIGl0
J3MgYWNjZXNzZWQuCisgKi8KK2lmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsK
KyAgdmFyIGRlcHJlY2F0ZWRBUElzID0geworICAgIGlzTW91bnRlZDogWydpc01vdW50ZWQnLCAn
SW5zdGVhZCwgbWFrZSBzdXJlIHRvIGNsZWFuIHVwIHN1YnNjcmlwdGlvbnMgYW5kIHBlbmRpbmcg
cmVxdWVzdHMgaW4gJyArICdjb21wb25lbnRXaWxsVW5tb3VudCB0byBwcmV2ZW50IG1lbW9yeSBs
ZWFrcy4nXSwKKyAgICByZXBsYWNlU3RhdGU6IFsncmVwbGFjZVN0YXRlJywgJ1JlZmFjdG9yIHlv
dXIgY29kZSB0byB1c2Ugc2V0U3RhdGUgaW5zdGVhZCAoc2VlICcgKyAnaHR0cHM6Ly9naXRodWIu
Y29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zMjM2KS4nXQorICB9OworICB2YXIgZGVmaW5lRGVw
cmVjYXRpb25XYXJuaW5nID0gZnVuY3Rpb24gKG1ldGhvZE5hbWUsIGluZm8pIHsKKyAgICBpZiAo
Y2FuRGVmaW5lUHJvcGVydHkpIHsKKyAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFjdENv
bXBvbmVudC5wcm90b3R5cGUsIG1ldGhvZE5hbWUsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhm
YWxzZSwgJyVzKC4uLikgaXMgZGVwcmVjYXRlZCBpbiBwbGFpbiBKYXZhU2NyaXB0IFJlYWN0IGNs
YXNzZXMuICVzJywgaW5mb1swXSwgaW5mb1sxXSkgOiB2b2lkIDA7CisgICAgICAgICAgcmV0dXJu
IHVuZGVmaW5lZDsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorICB9OworICBmb3IgKHZh
ciBmbk5hbWUgaW4gZGVwcmVjYXRlZEFQSXMpIHsKKyAgICBpZiAoZGVwcmVjYXRlZEFQSXMuaGFz
T3duUHJvcGVydHkoZm5OYW1lKSkgeworICAgICAgZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nKGZu
TmFtZSwgZGVwcmVjYXRlZEFQSXNbZm5OYW1lXSk7CisgICAgfQorICB9Cit9CisKK21vZHVsZS5l
eHBvcnRzID0gUmVhY3RDb21wb25lbnQ7Cit9LHsiMjEiOjIxLCIzMyI6MzMsIjM5IjozOSwiNDYi
OjQ2LCI0NyI6NDcsIjQ5Ijo0OX1dLDEyOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRz
KXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTYtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1
bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwg
Z3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZp
bGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqIAorICovCisKKyd1c2Ugc3RyaWN0JzsK
KwordmFyIF9wcm9kSW52YXJpYW50ID0gX2RlcmVxXygzOSk7CisKK3ZhciBSZWFjdEN1cnJlbnRP
d25lciA9IF9kZXJlcV8oMTQpOworCit2YXIgaW52YXJpYW50ID0gX2RlcmVxXyg0Nyk7Cit2YXIg
d2FybmluZyA9IF9kZXJlcV8oNDkpOworCitmdW5jdGlvbiBpc05hdGl2ZShmbikgeworICAvLyBC
YXNlZCBvbiBpc05hdGl2ZSgpIGZyb20gTG9kYXNoCisgIHZhciBmdW5jVG9TdHJpbmcgPSBGdW5j
dGlvbi5wcm90b3R5cGUudG9TdHJpbmc7CisgIHZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5w
cm90b3R5cGUuaGFzT3duUHJvcGVydHk7CisgIHZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyAr
IGZ1bmNUb1N0cmluZworICAvLyBUYWtlIGFuIGV4YW1wbGUgbmF0aXZlIGZ1bmN0aW9uIHNvdXJj
ZSBmb3IgY29tcGFyaXNvbgorICAuY2FsbChoYXNPd25Qcm9wZXJ0eSkKKyAgLy8gU3RyaXAgcmVn
ZXggY2hhcmFjdGVycyBzbyB3ZSBjYW4gdXNlIGl0IGZvciByZWdleAorICAucmVwbGFjZSgvW1xc
XiQuKis/KClbXF17fXxdL2csICdcXCQmJykKKyAgLy8gUmVtb3ZlIGhhc093blByb3BlcnR5IGZy
b20gdGhlIHRlbXBsYXRlIHRvIG1ha2UgaXQgZ2VuZXJpYworICAucmVwbGFjZSgvaGFzT3duUHJv
cGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywgJyQxLio/Jykg
KyAnJCcpOworICB0cnkgeworICAgIHZhciBzb3VyY2UgPSBmdW5jVG9TdHJpbmcuY2FsbChmbik7
CisgICAgcmV0dXJuIHJlSXNOYXRpdmUudGVzdChzb3VyY2UpOworICB9IGNhdGNoIChlcnIpIHsK
KyAgICByZXR1cm4gZmFsc2U7CisgIH0KK30KKwordmFyIGNhblVzZUNvbGxlY3Rpb25zID0KKy8v
IEFycmF5LmZyb20KK3R5cGVvZiBBcnJheS5mcm9tID09PSAnZnVuY3Rpb24nICYmCisvLyBNYXAK
K3R5cGVvZiBNYXAgPT09ICdmdW5jdGlvbicgJiYgaXNOYXRpdmUoTWFwKSAmJgorLy8gTWFwLnBy
b3RvdHlwZS5rZXlzCitNYXAucHJvdG90eXBlICE9IG51bGwgJiYgdHlwZW9mIE1hcC5wcm90b3R5
cGUua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJiBpc05hdGl2ZShNYXAucHJvdG90eXBlLmtleXMpICYm
CisvLyBTZXQKK3R5cGVvZiBTZXQgPT09ICdmdW5jdGlvbicgJiYgaXNOYXRpdmUoU2V0KSAmJgor
Ly8gU2V0LnByb3RvdHlwZS5rZXlzCitTZXQucHJvdG90eXBlICE9IG51bGwgJiYgdHlwZW9mIFNl
dC5wcm90b3R5cGUua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJiBpc05hdGl2ZShTZXQucHJvdG90eXBl
LmtleXMpOworCit2YXIgc2V0SXRlbTsKK3ZhciBnZXRJdGVtOwordmFyIHJlbW92ZUl0ZW07Cit2
YXIgZ2V0SXRlbUlEczsKK3ZhciBhZGRSb290OwordmFyIHJlbW92ZVJvb3Q7Cit2YXIgZ2V0Um9v
dElEczsKKworaWYgKGNhblVzZUNvbGxlY3Rpb25zKSB7CisgIHZhciBpdGVtTWFwID0gbmV3IE1h
cCgpOworICB2YXIgcm9vdElEU2V0ID0gbmV3IFNldCgpOworCisgIHNldEl0ZW0gPSBmdW5jdGlv
biAoaWQsIGl0ZW0pIHsKKyAgICBpdGVtTWFwLnNldChpZCwgaXRlbSk7CisgIH07CisgIGdldEl0
ZW0gPSBmdW5jdGlvbiAoaWQpIHsKKyAgICByZXR1cm4gaXRlbU1hcC5nZXQoaWQpOworICB9Owor
ICByZW1vdmVJdGVtID0gZnVuY3Rpb24gKGlkKSB7CisgICAgaXRlbU1hcFsnZGVsZXRlJ10oaWQp
OworICB9OworICBnZXRJdGVtSURzID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiBBcnJheS5m
cm9tKGl0ZW1NYXAua2V5cygpKTsKKyAgfTsKKworICBhZGRSb290ID0gZnVuY3Rpb24gKGlkKSB7
CisgICAgcm9vdElEU2V0LmFkZChpZCk7CisgIH07CisgIHJlbW92ZVJvb3QgPSBmdW5jdGlvbiAo
aWQpIHsKKyAgICByb290SURTZXRbJ2RlbGV0ZSddKGlkKTsKKyAgfTsKKyAgZ2V0Um9vdElEcyA9
IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gQXJyYXkuZnJvbShyb290SURTZXQua2V5cygpKTsK
KyAgfTsKK30gZWxzZSB7CisgIHZhciBpdGVtQnlLZXkgPSB7fTsKKyAgdmFyIHJvb3RCeUtleSA9
IHt9OworCisgIC8vIFVzZSBub24tbnVtZXJpYyBrZXlzIHRvIHByZXZlbnQgVjggcGVyZm9ybWFu
Y2UgaXNzdWVzOgorICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC83
MjMyCisgIHZhciBnZXRLZXlGcm9tSUQgPSBmdW5jdGlvbiAoaWQpIHsKKyAgICByZXR1cm4gJy4n
ICsgaWQ7CisgIH07CisgIHZhciBnZXRJREZyb21LZXkgPSBmdW5jdGlvbiAoa2V5KSB7CisgICAg
cmV0dXJuIHBhcnNlSW50KGtleS5zdWJzdHIoMSksIDEwKTsKKyAgfTsKKworICBzZXRJdGVtID0g
ZnVuY3Rpb24gKGlkLCBpdGVtKSB7CisgICAgdmFyIGtleSA9IGdldEtleUZyb21JRChpZCk7Cisg
ICAgaXRlbUJ5S2V5W2tleV0gPSBpdGVtOworICB9OworICBnZXRJdGVtID0gZnVuY3Rpb24gKGlk
KSB7CisgICAgdmFyIGtleSA9IGdldEtleUZyb21JRChpZCk7CisgICAgcmV0dXJuIGl0ZW1CeUtl
eVtrZXldOworICB9OworICByZW1vdmVJdGVtID0gZnVuY3Rpb24gKGlkKSB7CisgICAgdmFyIGtl
eSA9IGdldEtleUZyb21JRChpZCk7CisgICAgZGVsZXRlIGl0ZW1CeUtleVtrZXldOworICB9Owor
ICBnZXRJdGVtSURzID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiBPYmplY3Qua2V5cyhpdGVt
QnlLZXkpLm1hcChnZXRJREZyb21LZXkpOworICB9OworCisgIGFkZFJvb3QgPSBmdW5jdGlvbiAo
aWQpIHsKKyAgICB2YXIga2V5ID0gZ2V0S2V5RnJvbUlEKGlkKTsKKyAgICByb290QnlLZXlba2V5
XSA9IHRydWU7CisgIH07CisgIHJlbW92ZVJvb3QgPSBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIg
a2V5ID0gZ2V0S2V5RnJvbUlEKGlkKTsKKyAgICBkZWxldGUgcm9vdEJ5S2V5W2tleV07CisgIH07
CisgIGdldFJvb3RJRHMgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIE9iamVjdC5rZXlzKHJv
b3RCeUtleSkubWFwKGdldElERnJvbUtleSk7CisgIH07Cit9CisKK3ZhciB1bm1vdW50ZWRJRHMg
PSBbXTsKKworZnVuY3Rpb24gcHVyZ2VEZWVwKGlkKSB7CisgIHZhciBpdGVtID0gZ2V0SXRlbShp
ZCk7CisgIGlmIChpdGVtKSB7CisgICAgdmFyIGNoaWxkSURzID0gaXRlbS5jaGlsZElEczsKKwor
ICAgIHJlbW92ZUl0ZW0oaWQpOworICAgIGNoaWxkSURzLmZvckVhY2gocHVyZ2VEZWVwKTsKKyAg
fQorfQorCitmdW5jdGlvbiBkZXNjcmliZUNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3du
ZXJOYW1lKSB7CisgIHJldHVybiAnXG4gICAgaW4gJyArIChuYW1lIHx8ICdVbmtub3duJykgKyAo
c291cmNlID8gJyAoYXQgJyArIHNvdXJjZS5maWxlTmFtZS5yZXBsYWNlKC9eLipbXFxcL10vLCAn
JykgKyAnOicgKyBzb3VyY2UubGluZU51bWJlciArICcpJyA6IG93bmVyTmFtZSA/ICcgKGNyZWF0
ZWQgYnkgJyArIG93bmVyTmFtZSArICcpJyA6ICcnKTsKK30KKworZnVuY3Rpb24gZ2V0RGlzcGxh
eU5hbWUoZWxlbWVudCkgeworICBpZiAoZWxlbWVudCA9PSBudWxsKSB7CisgICAgcmV0dXJuICcj
ZW1wdHknOworICB9IGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJyB8fCB0eXBl
b2YgZWxlbWVudCA9PT0gJ251bWJlcicpIHsKKyAgICByZXR1cm4gJyN0ZXh0JzsKKyAgfSBlbHNl
IGlmICh0eXBlb2YgZWxlbWVudC50eXBlID09PSAnc3RyaW5nJykgeworICAgIHJldHVybiBlbGVt
ZW50LnR5cGU7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIGVsZW1lbnQudHlwZS5kaXNwbGF5TmFt
ZSB8fCBlbGVtZW50LnR5cGUubmFtZSB8fCAnVW5rbm93bic7CisgIH0KK30KKworZnVuY3Rpb24g
ZGVzY3JpYmVJRChpZCkgeworICB2YXIgbmFtZSA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0
RGlzcGxheU5hbWUoaWQpOworICB2YXIgZWxlbWVudCA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2su
Z2V0RWxlbWVudChpZCk7CisgIHZhciBvd25lcklEID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5n
ZXRPd25lcklEKGlkKTsKKyAgdmFyIG93bmVyTmFtZTsKKyAgaWYgKG93bmVySUQpIHsKKyAgICBv
d25lck5hbWUgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldERpc3BsYXlOYW1lKG93bmVySUQp
OworICB9CisgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZWxlbWVu
dCwgJ1JlYWN0Q29tcG9uZW50VHJlZUhvb2s6IE1pc3NpbmcgUmVhY3QgZWxlbWVudCBmb3IgZGVi
dWdJRCAlcyB3aGVuICcgKyAnYnVpbGRpbmcgc3RhY2snLCBpZCkgOiB2b2lkIDA7CisgIHJldHVy
biBkZXNjcmliZUNvbXBvbmVudEZyYW1lKG5hbWUsIGVsZW1lbnQgJiYgZWxlbWVudC5fc291cmNl
LCBvd25lck5hbWUpOworfQorCit2YXIgUmVhY3RDb21wb25lbnRUcmVlSG9vayA9IHsKKyAgb25T
ZXRDaGlsZHJlbjogZnVuY3Rpb24gKGlkLCBuZXh0Q2hpbGRJRHMpIHsKKyAgICB2YXIgaXRlbSA9
IGdldEl0ZW0oaWQpOworICAgICFpdGVtID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24n
ID8gaW52YXJpYW50KGZhbHNlLCAnSXRlbSBtdXN0IGhhdmUgYmVlbiBzZXQnKSA6IF9wcm9kSW52
YXJpYW50KCcxNDQnKSA6IHZvaWQgMDsKKyAgICBpdGVtLmNoaWxkSURzID0gbmV4dENoaWxkSURz
OworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXh0Q2hpbGRJRHMubGVuZ3RoOyBpKyspIHsK
KyAgICAgIHZhciBuZXh0Q2hpbGRJRCA9IG5leHRDaGlsZElEc1tpXTsKKyAgICAgIHZhciBuZXh0
Q2hpbGQgPSBnZXRJdGVtKG5leHRDaGlsZElEKTsKKyAgICAgICFuZXh0Q2hpbGQgPyAiZGV2ZWxv
cG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCBob29r
IGV2ZW50cyB0byBmaXJlIGZvciB0aGUgY2hpbGQgYmVmb3JlIGl0cyBwYXJlbnQgaW5jbHVkZXMg
aXQgaW4gb25TZXRDaGlsZHJlbigpLicpIDogX3Byb2RJbnZhcmlhbnQoJzE0MCcpIDogdm9pZCAw
OworICAgICAgIShuZXh0Q2hpbGQuY2hpbGRJRHMgIT0gbnVsbCB8fCB0eXBlb2YgbmV4dENoaWxk
LmVsZW1lbnQgIT09ICdvYmplY3QnIHx8IG5leHRDaGlsZC5lbGVtZW50ID09IG51bGwpID8gImRl
dmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnRXhwZWN0ZWQg
b25TZXRDaGlsZHJlbigpIHRvIGZpcmUgZm9yIGEgY29udGFpbmVyIGNoaWxkIGJlZm9yZSBpdHMg
cGFyZW50IGluY2x1ZGVzIGl0IGluIG9uU2V0Q2hpbGRyZW4oKS4nKSA6IF9wcm9kSW52YXJpYW50
KCcxNDEnKSA6IHZvaWQgMDsKKyAgICAgICFuZXh0Q2hpbGQuaXNNb3VudGVkID8gImRldmVsb3Bt
ZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnRXhwZWN0ZWQgb25Nb3Vu
dENvbXBvbmVudCgpIHRvIGZpcmUgZm9yIHRoZSBjaGlsZCBiZWZvcmUgaXRzIHBhcmVudCBpbmNs
dWRlcyBpdCBpbiBvblNldENoaWxkcmVuKCkuJykgOiBfcHJvZEludmFyaWFudCgnNzEnKSA6IHZv
aWQgMDsKKyAgICAgIGlmIChuZXh0Q2hpbGQucGFyZW50SUQgPT0gbnVsbCkgeworICAgICAgICBu
ZXh0Q2hpbGQucGFyZW50SUQgPSBpZDsKKyAgICAgICAgLy8gVE9ETzogVGhpcyBzaG91bGRuJ3Qg
YmUgbmVjZXNzYXJ5IGJ1dCBtb3VudGluZyBhIG5ldyByb290IGR1cmluZyBpbgorICAgICAgICAv
LyBjb21wb25lbnRXaWxsTW91bnQgY3VycmVudGx5IGNhdXNlcyBub3QteWV0LW1vdW50ZWQgY29t
cG9uZW50cyB0bworICAgICAgICAvLyBiZSBwdXJnZWQgZnJvbSBvdXIgdHJlZSBkYXRhIHNvIHRo
ZWlyIHBhcmVudCBpZCBpcyBtaXNzaW5nLgorICAgICAgfQorICAgICAgIShuZXh0Q2hpbGQucGFy
ZW50SUQgPT09IGlkKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFu
dChmYWxzZSwgJ0V4cGVjdGVkIG9uQmVmb3JlTW91bnRDb21wb25lbnQoKSBwYXJlbnQgYW5kIG9u
U2V0Q2hpbGRyZW4oKSB0byBiZSBjb25zaXN0ZW50ICglcyBoYXMgcGFyZW50cyAlcyBhbmQgJXMp
LicsIG5leHRDaGlsZElELCBuZXh0Q2hpbGQucGFyZW50SUQsIGlkKSA6IF9wcm9kSW52YXJpYW50
KCcxNDInLCBuZXh0Q2hpbGRJRCwgbmV4dENoaWxkLnBhcmVudElELCBpZCkgOiB2b2lkIDA7Cisg
ICAgfQorICB9LAorICBvbkJlZm9yZU1vdW50Q29tcG9uZW50OiBmdW5jdGlvbiAoaWQsIGVsZW1l
bnQsIHBhcmVudElEKSB7CisgICAgdmFyIGl0ZW0gPSB7CisgICAgICBlbGVtZW50OiBlbGVtZW50
LAorICAgICAgcGFyZW50SUQ6IHBhcmVudElELAorICAgICAgdGV4dDogbnVsbCwKKyAgICAgIGNo
aWxkSURzOiBbXSwKKyAgICAgIGlzTW91bnRlZDogZmFsc2UsCisgICAgICB1cGRhdGVDb3VudDog
MAorICAgIH07CisgICAgc2V0SXRlbShpZCwgaXRlbSk7CisgIH0sCisgIG9uQmVmb3JlVXBkYXRl
Q29tcG9uZW50OiBmdW5jdGlvbiAoaWQsIGVsZW1lbnQpIHsKKyAgICB2YXIgaXRlbSA9IGdldEl0
ZW0oaWQpOworICAgIGlmICghaXRlbSB8fCAhaXRlbS5pc01vdW50ZWQpIHsKKyAgICAgIC8vIFdl
IG1heSBlbmQgdXAgaGVyZSBhcyBhIHJlc3VsdCBvZiBzZXRTdGF0ZSgpIGluIGNvbXBvbmVudFdp
bGxVbm1vdW50KCkuCisgICAgICAvLyBJbiB0aGlzIGNhc2UsIGlnbm9yZSB0aGUgZWxlbWVudC4K
KyAgICAgIHJldHVybjsKKyAgICB9CisgICAgaXRlbS5lbGVtZW50ID0gZWxlbWVudDsKKyAgfSwK
KyAgb25Nb3VudENvbXBvbmVudDogZnVuY3Rpb24gKGlkKSB7CisgICAgdmFyIGl0ZW0gPSBnZXRJ
dGVtKGlkKTsKKyAgICAhaXRlbSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGlu
dmFyaWFudChmYWxzZSwgJ0l0ZW0gbXVzdCBoYXZlIGJlZW4gc2V0JykgOiBfcHJvZEludmFyaWFu
dCgnMTQ0JykgOiB2b2lkIDA7CisgICAgaXRlbS5pc01vdW50ZWQgPSB0cnVlOworICAgIHZhciBp
c1Jvb3QgPSBpdGVtLnBhcmVudElEID09PSAwOworICAgIGlmIChpc1Jvb3QpIHsKKyAgICAgIGFk
ZFJvb3QoaWQpOworICAgIH0KKyAgfSwKKyAgb25VcGRhdGVDb21wb25lbnQ6IGZ1bmN0aW9uIChp
ZCkgeworICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7CisgICAgaWYgKCFpdGVtIHx8ICFpdGVt
LmlzTW91bnRlZCkgeworICAgICAgLy8gV2UgbWF5IGVuZCB1cCBoZXJlIGFzIGEgcmVzdWx0IG9m
IHNldFN0YXRlKCkgaW4gY29tcG9uZW50V2lsbFVubW91bnQoKS4KKyAgICAgIC8vIEluIHRoaXMg
Y2FzZSwgaWdub3JlIHRoZSBlbGVtZW50LgorICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpdGVt
LnVwZGF0ZUNvdW50Kys7CisgIH0sCisgIG9uVW5tb3VudENvbXBvbmVudDogZnVuY3Rpb24gKGlk
KSB7CisgICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTsKKyAgICBpZiAoaXRlbSkgeworICAgICAg
Ly8gV2UgbmVlZCB0byBjaGVjayBpZiBpdCBleGlzdHMuCisgICAgICAvLyBgaXRlbWAgbWlnaHQg
bm90IGV4aXN0IGlmIGl0IGlzIGluc2lkZSBhbiBlcnJvciBib3VuZGFyeSwgYW5kIGEgc2libGlu
ZworICAgICAgLy8gZXJyb3IgYm91bmRhcnkgY2hpbGQgdGhyZXcgd2hpbGUgbW91bnRpbmcuIFRo
ZW4gdGhpcyBpbnN0YW5jZSBuZXZlcgorICAgICAgLy8gZ290IGEgY2hhbmNlIHRvIG1vdW50LCBi
dXQgaXQgc3RpbGwgZ2V0cyBhbiB1bm1vdW50aW5nIGV2ZW50IGR1cmluZworICAgICAgLy8gdGhl
IGVycm9yIGJvdW5kYXJ5IGNsZWFudXAuCisgICAgICBpdGVtLmlzTW91bnRlZCA9IGZhbHNlOwor
ICAgICAgdmFyIGlzUm9vdCA9IGl0ZW0ucGFyZW50SUQgPT09IDA7CisgICAgICBpZiAoaXNSb290
KSB7CisgICAgICAgIHJlbW92ZVJvb3QoaWQpOworICAgICAgfQorICAgIH0KKyAgICB1bm1vdW50
ZWRJRHMucHVzaChpZCk7CisgIH0sCisgIHB1cmdlVW5tb3VudGVkQ29tcG9uZW50czogZnVuY3Rp
b24gKCkgeworICAgIGlmIChSZWFjdENvbXBvbmVudFRyZWVIb29rLl9wcmV2ZW50UHVyZ2luZykg
eworICAgICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdGVzdGluZy4KKyAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVubW91bnRlZElEcy5sZW5ndGg7
IGkrKykgeworICAgICAgdmFyIGlkID0gdW5tb3VudGVkSURzW2ldOworICAgICAgcHVyZ2VEZWVw
KGlkKTsKKyAgICB9CisgICAgdW5tb3VudGVkSURzLmxlbmd0aCA9IDA7CisgIH0sCisgIGlzTW91
bnRlZDogZnVuY3Rpb24gKGlkKSB7CisgICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTsKKyAgICBy
ZXR1cm4gaXRlbSA/IGl0ZW0uaXNNb3VudGVkIDogZmFsc2U7CisgIH0sCisgIGdldEN1cnJlbnRT
dGFja0FkZGVuZHVtOiBmdW5jdGlvbiAodG9wRWxlbWVudCkgeworICAgIHZhciBpbmZvID0gJyc7
CisgICAgaWYgKHRvcEVsZW1lbnQpIHsKKyAgICAgIHZhciBuYW1lID0gZ2V0RGlzcGxheU5hbWUo
dG9wRWxlbWVudCk7CisgICAgICB2YXIgb3duZXIgPSB0b3BFbGVtZW50Ll9vd25lcjsKKyAgICAg
IGluZm8gKz0gZGVzY3JpYmVDb21wb25lbnRGcmFtZShuYW1lLCB0b3BFbGVtZW50Ll9zb3VyY2Us
IG93bmVyICYmIG93bmVyLmdldE5hbWUoKSk7CisgICAgfQorCisgICAgdmFyIGN1cnJlbnRPd25l
ciA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQ7CisgICAgdmFyIGlkID0gY3VycmVudE93bmVy
ICYmIGN1cnJlbnRPd25lci5fZGVidWdJRDsKKworICAgIGluZm8gKz0gUmVhY3RDb21wb25lbnRU
cmVlSG9vay5nZXRTdGFja0FkZGVuZHVtQnlJRChpZCk7CisgICAgcmV0dXJuIGluZm87CisgIH0s
CisgIGdldFN0YWNrQWRkZW5kdW1CeUlEOiBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIgaW5mbyA9
ICcnOworICAgIHdoaWxlIChpZCkgeworICAgICAgaW5mbyArPSBkZXNjcmliZUlEKGlkKTsKKyAg
ICAgIGlkID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRQYXJlbnRJRChpZCk7CisgICAgfQor
ICAgIHJldHVybiBpbmZvOworICB9LAorICBnZXRDaGlsZElEczogZnVuY3Rpb24gKGlkKSB7Cisg
ICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTsKKyAgICByZXR1cm4gaXRlbSA/IGl0ZW0uY2hpbGRJ
RHMgOiBbXTsKKyAgfSwKKyAgZ2V0RGlzcGxheU5hbWU6IGZ1bmN0aW9uIChpZCkgeworICAgIHZh
ciBlbGVtZW50ID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRFbGVtZW50KGlkKTsKKyAgICBp
ZiAoIWVsZW1lbnQpIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICByZXR1cm4gZ2V0
RGlzcGxheU5hbWUoZWxlbWVudCk7CisgIH0sCisgIGdldEVsZW1lbnQ6IGZ1bmN0aW9uIChpZCkg
eworICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7CisgICAgcmV0dXJuIGl0ZW0gPyBpdGVtLmVs
ZW1lbnQgOiBudWxsOworICB9LAorICBnZXRPd25lcklEOiBmdW5jdGlvbiAoaWQpIHsKKyAgICB2
YXIgZWxlbWVudCA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0RWxlbWVudChpZCk7CisgICAg
aWYgKCFlbGVtZW50IHx8ICFlbGVtZW50Ll9vd25lcikgeworICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgfQorICAgIHJldHVybiBlbGVtZW50Ll9vd25lci5fZGVidWdJRDsKKyAgfSwKKyAgZ2V0UGFy
ZW50SUQ6IGZ1bmN0aW9uIChpZCkgeworICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7CisgICAg
cmV0dXJuIGl0ZW0gPyBpdGVtLnBhcmVudElEIDogbnVsbDsKKyAgfSwKKyAgZ2V0U291cmNlOiBm
dW5jdGlvbiAoaWQpIHsKKyAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpOworICAgIHZhciBlbGVt
ZW50ID0gaXRlbSA/IGl0ZW0uZWxlbWVudCA6IG51bGw7CisgICAgdmFyIHNvdXJjZSA9IGVsZW1l
bnQgIT0gbnVsbCA/IGVsZW1lbnQuX3NvdXJjZSA6IG51bGw7CisgICAgcmV0dXJuIHNvdXJjZTsK
KyAgfSwKKyAgZ2V0VGV4dDogZnVuY3Rpb24gKGlkKSB7CisgICAgdmFyIGVsZW1lbnQgPSBSZWFj
dENvbXBvbmVudFRyZWVIb29rLmdldEVsZW1lbnQoaWQpOworICAgIGlmICh0eXBlb2YgZWxlbWVu
dCA9PT0gJ3N0cmluZycpIHsKKyAgICAgIHJldHVybiBlbGVtZW50OworICAgIH0gZWxzZSBpZiAo
dHlwZW9mIGVsZW1lbnQgPT09ICdudW1iZXInKSB7CisgICAgICByZXR1cm4gJycgKyBlbGVtZW50
OworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgIH0sCisgIGdldFVw
ZGF0ZUNvdW50OiBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpOwor
ICAgIHJldHVybiBpdGVtID8gaXRlbS51cGRhdGVDb3VudCA6IDA7CisgIH0sCisKKworICBnZXRS
b290SURzOiBnZXRSb290SURzLAorICBnZXRSZWdpc3RlcmVkSURzOiBnZXRJdGVtSURzCit9Owor
Cittb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2s7Cit9LHsiMTQiOjE0LCIz
OSI6MzksIjQ3Ijo0NywiNDkiOjQ5fV0sMTM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9y
dHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2Vk
IHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25h
bCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMg
ZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwor
dmFyIHNoYWxsb3dDb21wYXJlID0gX2RlcmVxXyg0MCk7CisKKy8qKgorICogSWYgeW91ciBSZWFj
dCBjb21wb25lbnQncyByZW5kZXIgZnVuY3Rpb24gaXMgInB1cmUiLCBlLmcuIGl0IHdpbGwgcmVu
ZGVyIHRoZQorICogc2FtZSByZXN1bHQgZ2l2ZW4gdGhlIHNhbWUgcHJvcHMgYW5kIHN0YXRlLCBw
cm92aWRlIHRoaXMgbWl4aW4gZm9yIGEKKyAqIGNvbnNpZGVyYWJsZSBwZXJmb3JtYW5jZSBib29z
dC4KKyAqCisgKiBNb3N0IFJlYWN0IGNvbXBvbmVudHMgaGF2ZSBwdXJlIHJlbmRlciBmdW5jdGlv
bnMuCisgKgorICogRXhhbXBsZToKKyAqCisgKiAgIHZhciBSZWFjdENvbXBvbmVudFdpdGhQdXJl
UmVuZGVyTWl4aW4gPQorICogICAgIHJlcXVpcmUoJ1JlYWN0Q29tcG9uZW50V2l0aFB1cmVSZW5k
ZXJNaXhpbicpOworICogICBSZWFjdC5jcmVhdGVDbGFzcyh7CisgKiAgICAgbWl4aW5zOiBbUmVh
Y3RDb21wb25lbnRXaXRoUHVyZVJlbmRlck1peGluXSwKKyAqCisgKiAgICAgcmVuZGVyOiBmdW5j
dGlvbigpIHsKKyAqICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFz
c05hbWV9PmZvbzwvZGl2PjsKKyAqICAgICB9CisgKiAgIH0pOworICoKKyAqIE5vdGU6IFRoaXMg
b25seSBjaGVja3Mgc2hhbGxvdyBlcXVhbGl0eSBmb3IgcHJvcHMgYW5kIHN0YXRlLiBJZiB0aGVz
ZSBjb250YWluCisgKiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGlzIG1peGluIG1heSBoYXZl
IGZhbHNlLW5lZ2F0aXZlcyBmb3IgZGVlcGVyCisgKiBkaWZmZXJlbmNlcy4gT25seSBtaXhpbiB0
byBjb21wb25lbnRzIHdoaWNoIGhhdmUgc2ltcGxlIHByb3BzIGFuZCBzdGF0ZSwgb3IKKyAqIHVz
ZSBgZm9yY2VVcGRhdGUoKWAgd2hlbiB5b3Uga25vdyBkZWVwIGRhdGEgc3RydWN0dXJlcyBoYXZl
IGNoYW5nZWQuCisgKgorICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2Rv
Y3MvcHVyZS1yZW5kZXItbWl4aW4uaHRtbAorICovCit2YXIgUmVhY3RDb21wb25lbnRXaXRoUHVy
ZVJlbmRlck1peGluID0geworICBzaG91bGRDb21wb25lbnRVcGRhdGU6IGZ1bmN0aW9uIChuZXh0
UHJvcHMsIG5leHRTdGF0ZSkgeworICAgIHJldHVybiBzaGFsbG93Q29tcGFyZSh0aGlzLCBuZXh0
UHJvcHMsIG5leHRTdGF0ZSk7CisgIH0KK307CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RDb21w
b25lbnRXaXRoUHVyZVJlbmRlck1peGluOworfSx7IjQwIjo0MH1dLDE0OltmdW5jdGlvbihfZGVy
ZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFj
ZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2Ug
Y29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhl
CisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5k
IGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqIAorICov
CisKKyd1c2Ugc3RyaWN0JzsKKworLyoqCisgKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBv
d25lci4KKyAqCisgKiBUaGUgY3VycmVudCBvd25lciBpcyB0aGUgY29tcG9uZW50IHdobyBzaG91
bGQgb3duIGFueSBjb21wb25lbnRzIHRoYXQgYXJlCisgKiBjdXJyZW50bHkgYmVpbmcgY29uc3Ry
dWN0ZWQuCisgKi8KK3ZhciBSZWFjdEN1cnJlbnRPd25lciA9IHsKKworICAvKioKKyAgICogQGlu
dGVybmFsCisgICAqIEB0eXBlIHtSZWFjdENvbXBvbmVudH0KKyAgICovCisgIGN1cnJlbnQ6IG51
bGwKKworfTsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdEN1cnJlbnRPd25lcjsKK30se31dLDE1
OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIw
MTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vu
c2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9m
IHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdo
dHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5
LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBSZWFjdEVsZW1lbnQgPSBfZGVyZXFf
KDE2KTsKKworLyoqCisgKiBDcmVhdGUgYSBmYWN0b3J5IHRoYXQgY3JlYXRlcyBIVE1MIHRhZyBl
bGVtZW50cy4KKyAqCisgKiBAcHJpdmF0ZQorICovCit2YXIgY3JlYXRlRE9NRmFjdG9yeSA9IFJl
YWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5OworaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0
aW9uJykgeworICB2YXIgUmVhY3RFbGVtZW50VmFsaWRhdG9yID0gX2RlcmVxXygxOCk7CisgIGNy
ZWF0ZURPTUZhY3RvcnkgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY3JlYXRlRmFjdG9yeTsKK30K
KworLyoqCisgKiBDcmVhdGVzIGEgbWFwcGluZyBmcm9tIHN1cHBvcnRlZCBIVE1MIHRhZ3MgdG8g
YFJlYWN0RE9NQ29tcG9uZW50YCBjbGFzc2VzLgorICogVGhpcyBpcyBhbHNvIGFjY2Vzc2libGUg
dmlhIGBSZWFjdC5ET01gLgorICoKKyAqIEBwdWJsaWMKKyAqLwordmFyIFJlYWN0RE9NRmFjdG9y
aWVzID0geworICBhOiBjcmVhdGVET01GYWN0b3J5KCdhJyksCisgIGFiYnI6IGNyZWF0ZURPTUZh
Y3RvcnkoJ2FiYnInKSwKKyAgYWRkcmVzczogY3JlYXRlRE9NRmFjdG9yeSgnYWRkcmVzcycpLAor
ICBhcmVhOiBjcmVhdGVET01GYWN0b3J5KCdhcmVhJyksCisgIGFydGljbGU6IGNyZWF0ZURPTUZh
Y3RvcnkoJ2FydGljbGUnKSwKKyAgYXNpZGU6IGNyZWF0ZURPTUZhY3RvcnkoJ2FzaWRlJyksCisg
IGF1ZGlvOiBjcmVhdGVET01GYWN0b3J5KCdhdWRpbycpLAorICBiOiBjcmVhdGVET01GYWN0b3J5
KCdiJyksCisgIGJhc2U6IGNyZWF0ZURPTUZhY3RvcnkoJ2Jhc2UnKSwKKyAgYmRpOiBjcmVhdGVE
T01GYWN0b3J5KCdiZGknKSwKKyAgYmRvOiBjcmVhdGVET01GYWN0b3J5KCdiZG8nKSwKKyAgYmln
OiBjcmVhdGVET01GYWN0b3J5KCdiaWcnKSwKKyAgYmxvY2txdW90ZTogY3JlYXRlRE9NRmFjdG9y
eSgnYmxvY2txdW90ZScpLAorICBib2R5OiBjcmVhdGVET01GYWN0b3J5KCdib2R5JyksCisgIGJy
OiBjcmVhdGVET01GYWN0b3J5KCdicicpLAorICBidXR0b246IGNyZWF0ZURPTUZhY3RvcnkoJ2J1
dHRvbicpLAorICBjYW52YXM6IGNyZWF0ZURPTUZhY3RvcnkoJ2NhbnZhcycpLAorICBjYXB0aW9u
OiBjcmVhdGVET01GYWN0b3J5KCdjYXB0aW9uJyksCisgIGNpdGU6IGNyZWF0ZURPTUZhY3Rvcnko
J2NpdGUnKSwKKyAgY29kZTogY3JlYXRlRE9NRmFjdG9yeSgnY29kZScpLAorICBjb2w6IGNyZWF0
ZURPTUZhY3RvcnkoJ2NvbCcpLAorICBjb2xncm91cDogY3JlYXRlRE9NRmFjdG9yeSgnY29sZ3Jv
dXAnKSwKKyAgZGF0YTogY3JlYXRlRE9NRmFjdG9yeSgnZGF0YScpLAorICBkYXRhbGlzdDogY3Jl
YXRlRE9NRmFjdG9yeSgnZGF0YWxpc3QnKSwKKyAgZGQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2RkJyks
CisgIGRlbDogY3JlYXRlRE9NRmFjdG9yeSgnZGVsJyksCisgIGRldGFpbHM6IGNyZWF0ZURPTUZh
Y3RvcnkoJ2RldGFpbHMnKSwKKyAgZGZuOiBjcmVhdGVET01GYWN0b3J5KCdkZm4nKSwKKyAgZGlh
bG9nOiBjcmVhdGVET01GYWN0b3J5KCdkaWFsb2cnKSwKKyAgZGl2OiBjcmVhdGVET01GYWN0b3J5
KCdkaXYnKSwKKyAgZGw6IGNyZWF0ZURPTUZhY3RvcnkoJ2RsJyksCisgIGR0OiBjcmVhdGVET01G
YWN0b3J5KCdkdCcpLAorICBlbTogY3JlYXRlRE9NRmFjdG9yeSgnZW0nKSwKKyAgZW1iZWQ6IGNy
ZWF0ZURPTUZhY3RvcnkoJ2VtYmVkJyksCisgIGZpZWxkc2V0OiBjcmVhdGVET01GYWN0b3J5KCdm
aWVsZHNldCcpLAorICBmaWdjYXB0aW9uOiBjcmVhdGVET01GYWN0b3J5KCdmaWdjYXB0aW9uJyks
CisgIGZpZ3VyZTogY3JlYXRlRE9NRmFjdG9yeSgnZmlndXJlJyksCisgIGZvb3RlcjogY3JlYXRl
RE9NRmFjdG9yeSgnZm9vdGVyJyksCisgIGZvcm06IGNyZWF0ZURPTUZhY3RvcnkoJ2Zvcm0nKSwK
KyAgaDE6IGNyZWF0ZURPTUZhY3RvcnkoJ2gxJyksCisgIGgyOiBjcmVhdGVET01GYWN0b3J5KCdo
MicpLAorICBoMzogY3JlYXRlRE9NRmFjdG9yeSgnaDMnKSwKKyAgaDQ6IGNyZWF0ZURPTUZhY3Rv
cnkoJ2g0JyksCisgIGg1OiBjcmVhdGVET01GYWN0b3J5KCdoNScpLAorICBoNjogY3JlYXRlRE9N
RmFjdG9yeSgnaDYnKSwKKyAgaGVhZDogY3JlYXRlRE9NRmFjdG9yeSgnaGVhZCcpLAorICBoZWFk
ZXI6IGNyZWF0ZURPTUZhY3RvcnkoJ2hlYWRlcicpLAorICBoZ3JvdXA6IGNyZWF0ZURPTUZhY3Rv
cnkoJ2hncm91cCcpLAorICBocjogY3JlYXRlRE9NRmFjdG9yeSgnaHInKSwKKyAgaHRtbDogY3Jl
YXRlRE9NRmFjdG9yeSgnaHRtbCcpLAorICBpOiBjcmVhdGVET01GYWN0b3J5KCdpJyksCisgIGlm
cmFtZTogY3JlYXRlRE9NRmFjdG9yeSgnaWZyYW1lJyksCisgIGltZzogY3JlYXRlRE9NRmFjdG9y
eSgnaW1nJyksCisgIGlucHV0OiBjcmVhdGVET01GYWN0b3J5KCdpbnB1dCcpLAorICBpbnM6IGNy
ZWF0ZURPTUZhY3RvcnkoJ2lucycpLAorICBrYmQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2tiZCcpLAor
ICBrZXlnZW46IGNyZWF0ZURPTUZhY3RvcnkoJ2tleWdlbicpLAorICBsYWJlbDogY3JlYXRlRE9N
RmFjdG9yeSgnbGFiZWwnKSwKKyAgbGVnZW5kOiBjcmVhdGVET01GYWN0b3J5KCdsZWdlbmQnKSwK
KyAgbGk6IGNyZWF0ZURPTUZhY3RvcnkoJ2xpJyksCisgIGxpbms6IGNyZWF0ZURPTUZhY3Rvcnko
J2xpbmsnKSwKKyAgbWFpbjogY3JlYXRlRE9NRmFjdG9yeSgnbWFpbicpLAorICBtYXA6IGNyZWF0
ZURPTUZhY3RvcnkoJ21hcCcpLAorICBtYXJrOiBjcmVhdGVET01GYWN0b3J5KCdtYXJrJyksCisg
IG1lbnU6IGNyZWF0ZURPTUZhY3RvcnkoJ21lbnUnKSwKKyAgbWVudWl0ZW06IGNyZWF0ZURPTUZh
Y3RvcnkoJ21lbnVpdGVtJyksCisgIG1ldGE6IGNyZWF0ZURPTUZhY3RvcnkoJ21ldGEnKSwKKyAg
bWV0ZXI6IGNyZWF0ZURPTUZhY3RvcnkoJ21ldGVyJyksCisgIG5hdjogY3JlYXRlRE9NRmFjdG9y
eSgnbmF2JyksCisgIG5vc2NyaXB0OiBjcmVhdGVET01GYWN0b3J5KCdub3NjcmlwdCcpLAorICBv
YmplY3Q6IGNyZWF0ZURPTUZhY3RvcnkoJ29iamVjdCcpLAorICBvbDogY3JlYXRlRE9NRmFjdG9y
eSgnb2wnKSwKKyAgb3B0Z3JvdXA6IGNyZWF0ZURPTUZhY3RvcnkoJ29wdGdyb3VwJyksCisgIG9w
dGlvbjogY3JlYXRlRE9NRmFjdG9yeSgnb3B0aW9uJyksCisgIG91dHB1dDogY3JlYXRlRE9NRmFj
dG9yeSgnb3V0cHV0JyksCisgIHA6IGNyZWF0ZURPTUZhY3RvcnkoJ3AnKSwKKyAgcGFyYW06IGNy
ZWF0ZURPTUZhY3RvcnkoJ3BhcmFtJyksCisgIHBpY3R1cmU6IGNyZWF0ZURPTUZhY3RvcnkoJ3Bp
Y3R1cmUnKSwKKyAgcHJlOiBjcmVhdGVET01GYWN0b3J5KCdwcmUnKSwKKyAgcHJvZ3Jlc3M6IGNy
ZWF0ZURPTUZhY3RvcnkoJ3Byb2dyZXNzJyksCisgIHE6IGNyZWF0ZURPTUZhY3RvcnkoJ3EnKSwK
KyAgcnA6IGNyZWF0ZURPTUZhY3RvcnkoJ3JwJyksCisgIHJ0OiBjcmVhdGVET01GYWN0b3J5KCdy
dCcpLAorICBydWJ5OiBjcmVhdGVET01GYWN0b3J5KCdydWJ5JyksCisgIHM6IGNyZWF0ZURPTUZh
Y3RvcnkoJ3MnKSwKKyAgc2FtcDogY3JlYXRlRE9NRmFjdG9yeSgnc2FtcCcpLAorICBzY3JpcHQ6
IGNyZWF0ZURPTUZhY3RvcnkoJ3NjcmlwdCcpLAorICBzZWN0aW9uOiBjcmVhdGVET01GYWN0b3J5
KCdzZWN0aW9uJyksCisgIHNlbGVjdDogY3JlYXRlRE9NRmFjdG9yeSgnc2VsZWN0JyksCisgIHNt
YWxsOiBjcmVhdGVET01GYWN0b3J5KCdzbWFsbCcpLAorICBzb3VyY2U6IGNyZWF0ZURPTUZhY3Rv
cnkoJ3NvdXJjZScpLAorICBzcGFuOiBjcmVhdGVET01GYWN0b3J5KCdzcGFuJyksCisgIHN0cm9u
ZzogY3JlYXRlRE9NRmFjdG9yeSgnc3Ryb25nJyksCisgIHN0eWxlOiBjcmVhdGVET01GYWN0b3J5
KCdzdHlsZScpLAorICBzdWI6IGNyZWF0ZURPTUZhY3RvcnkoJ3N1YicpLAorICBzdW1tYXJ5OiBj
cmVhdGVET01GYWN0b3J5KCdzdW1tYXJ5JyksCisgIHN1cDogY3JlYXRlRE9NRmFjdG9yeSgnc3Vw
JyksCisgIHRhYmxlOiBjcmVhdGVET01GYWN0b3J5KCd0YWJsZScpLAorICB0Ym9keTogY3JlYXRl
RE9NRmFjdG9yeSgndGJvZHknKSwKKyAgdGQ6IGNyZWF0ZURPTUZhY3RvcnkoJ3RkJyksCisgIHRl
eHRhcmVhOiBjcmVhdGVET01GYWN0b3J5KCd0ZXh0YXJlYScpLAorICB0Zm9vdDogY3JlYXRlRE9N
RmFjdG9yeSgndGZvb3QnKSwKKyAgdGg6IGNyZWF0ZURPTUZhY3RvcnkoJ3RoJyksCisgIHRoZWFk
OiBjcmVhdGVET01GYWN0b3J5KCd0aGVhZCcpLAorICB0aW1lOiBjcmVhdGVET01GYWN0b3J5KCd0
aW1lJyksCisgIHRpdGxlOiBjcmVhdGVET01GYWN0b3J5KCd0aXRsZScpLAorICB0cjogY3JlYXRl
RE9NRmFjdG9yeSgndHInKSwKKyAgdHJhY2s6IGNyZWF0ZURPTUZhY3RvcnkoJ3RyYWNrJyksCisg
IHU6IGNyZWF0ZURPTUZhY3RvcnkoJ3UnKSwKKyAgdWw6IGNyZWF0ZURPTUZhY3RvcnkoJ3VsJyks
CisgICd2YXInOiBjcmVhdGVET01GYWN0b3J5KCd2YXInKSwKKyAgdmlkZW86IGNyZWF0ZURPTUZh
Y3RvcnkoJ3ZpZGVvJyksCisgIHdicjogY3JlYXRlRE9NRmFjdG9yeSgnd2JyJyksCisKKyAgLy8g
U1ZHCisgIGNpcmNsZTogY3JlYXRlRE9NRmFjdG9yeSgnY2lyY2xlJyksCisgIGNsaXBQYXRoOiBj
cmVhdGVET01GYWN0b3J5KCdjbGlwUGF0aCcpLAorICBkZWZzOiBjcmVhdGVET01GYWN0b3J5KCdk
ZWZzJyksCisgIGVsbGlwc2U6IGNyZWF0ZURPTUZhY3RvcnkoJ2VsbGlwc2UnKSwKKyAgZzogY3Jl
YXRlRE9NRmFjdG9yeSgnZycpLAorICBpbWFnZTogY3JlYXRlRE9NRmFjdG9yeSgnaW1hZ2UnKSwK
KyAgbGluZTogY3JlYXRlRE9NRmFjdG9yeSgnbGluZScpLAorICBsaW5lYXJHcmFkaWVudDogY3Jl
YXRlRE9NRmFjdG9yeSgnbGluZWFyR3JhZGllbnQnKSwKKyAgbWFzazogY3JlYXRlRE9NRmFjdG9y
eSgnbWFzaycpLAorICBwYXRoOiBjcmVhdGVET01GYWN0b3J5KCdwYXRoJyksCisgIHBhdHRlcm46
IGNyZWF0ZURPTUZhY3RvcnkoJ3BhdHRlcm4nKSwKKyAgcG9seWdvbjogY3JlYXRlRE9NRmFjdG9y
eSgncG9seWdvbicpLAorICBwb2x5bGluZTogY3JlYXRlRE9NRmFjdG9yeSgncG9seWxpbmUnKSwK
KyAgcmFkaWFsR3JhZGllbnQ6IGNyZWF0ZURPTUZhY3RvcnkoJ3JhZGlhbEdyYWRpZW50JyksCisg
IHJlY3Q6IGNyZWF0ZURPTUZhY3RvcnkoJ3JlY3QnKSwKKyAgc3RvcDogY3JlYXRlRE9NRmFjdG9y
eSgnc3RvcCcpLAorICBzdmc6IGNyZWF0ZURPTUZhY3RvcnkoJ3N2ZycpLAorICB0ZXh0OiBjcmVh
dGVET01GYWN0b3J5KCd0ZXh0JyksCisgIHRzcGFuOiBjcmVhdGVET01GYWN0b3J5KCd0c3Bhbicp
Cit9OworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NRmFjdG9yaWVzOworfSx7IjE2IjoxNiwi
MTgiOjE4fV0sMTY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBD
b3B5cmlnaHQgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qt
c3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBk
aXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2Yg
cGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2Ft
ZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIF9hc3NpZ24gPSBf
ZGVyZXFfKDUwKTsKKwordmFyIFJlYWN0Q3VycmVudE93bmVyID0gX2RlcmVxXygxNCk7CisKK3Zh
ciB3YXJuaW5nID0gX2RlcmVxXyg0OSk7Cit2YXIgY2FuRGVmaW5lUHJvcGVydHkgPSBfZGVyZXFf
KDMzKTsKK3ZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy
dHk7CisKK3ZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBfZGVyZXFfKDE3KTsKKwordmFyIFJFU0VS
VkVEX1BST1BTID0geworICBrZXk6IHRydWUsCisgIHJlZjogdHJ1ZSwKKyAgX19zZWxmOiB0cnVl
LAorICBfX3NvdXJjZTogdHJ1ZQorfTsKKwordmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3du
LCBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bjsKKworZnVuY3Rpb24gaGFzVmFsaWRSZWYoY29u
ZmlnKSB7CisgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICBpZiAo
aGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdyZWYnKSkgeworICAgICAgdmFyIGdldHRlciA9
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAncmVmJykuZ2V0OworICAg
ICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gY29uZmlnLnJlZiAhPT0gdW5k
ZWZpbmVkOworfQorCitmdW5jdGlvbiBoYXNWYWxpZEtleShjb25maWcpIHsKKyAgaWYgKCJkZXZl
bG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxs
KGNvbmZpZywgJ2tleScpKSB7CisgICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihjb25maWcsICdrZXknKS5nZXQ7CisgICAgICBpZiAoZ2V0dGVyICYmIGdl
dHRlci5pc1JlYWN0V2FybmluZykgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9Cisg
ICAgfQorICB9CisgIHJldHVybiBjb25maWcua2V5ICE9PSB1bmRlZmluZWQ7Cit9CisKK2Z1bmN0
aW9uIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkgeworICB2
YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkgeworICAgIGlmICghc3BlY2lh
bFByb3BLZXlXYXJuaW5nU2hvd24pIHsKKyAgICAgIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3du
ID0gdHJ1ZTsKKyAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmco
ZmFsc2UsICclczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxs
IHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0
byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwg
eW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vZmIu
bWUvcmVhY3Qtc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFtZSkgOiB2b2lkIDA7CisgICAgfQor
ICB9OworICB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkuaXNSZWFjdFdhcm5pbmcgPSB0cnVlOworICBP
YmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdrZXknLCB7CisgICAgZ2V0OiB3YXJuQWJvdXRB
Y2Nlc3NpbmdLZXksCisgICAgY29uZmlndXJhYmxlOiB0cnVlCisgIH0pOworfQorCitmdW5jdGlv
biBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHsKKyAgdmFy
IHdhcm5BYm91dEFjY2Vzc2luZ1JlZiA9IGZ1bmN0aW9uICgpIHsKKyAgICBpZiAoIXNwZWNpYWxQ
cm9wUmVmV2FybmluZ1Nob3duKSB7CisgICAgICBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9
IHRydWU7CisgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZh
bHNlLCAnJXM6IGByZWZgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCBy
ZXN1bHQgJyArICdpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8g
YWNjZXNzIHRoZSBzYW1lICcgKyAndmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlv
dSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCAnICsgJ3Byb3AuIChodHRwczovL2ZiLm1l
L3JlYWN0LXNwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpIDogdm9pZCAwOworICAgIH0KKyAg
fTsKKyAgd2FybkFib3V0QWNjZXNzaW5nUmVmLmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTsKKyAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAncmVmJywgeworICAgIGdldDogd2FybkFib3V0QWNj
ZXNzaW5nUmVmLAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICB9KTsKK30KKworLyoqCisgKiBG
YWN0b3J5IG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgUmVhY3QgZWxlbWVudC4gVGhpcyBubyBsb25n
ZXIgYWRoZXJlcyB0bworICogdGhlIGNsYXNzIHBhdHRlcm4sIHNvIGRvIG5vdCB1c2UgbmV3IHRv
IGNhbGwgaXQuIEFsc28sIG5vIGluc3RhbmNlb2YgY2hlY2sKKyAqIHdpbGwgd29yay4gSW5zdGVh
ZCB0ZXN0ICQkdHlwZW9mIGZpZWxkIGFnYWluc3QgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcp
IHRvIGNoZWNrCisgKiBpZiBzb21ldGhpbmcgaXMgYSBSZWFjdCBFbGVtZW50LgorICoKKyAqIEBw
YXJhbSB7Kn0gdHlwZQorICogQHBhcmFtIHsqfSBrZXkKKyAqIEBwYXJhbSB7c3RyaW5nfG9iamVj
dH0gcmVmCisgKiBAcGFyYW0geyp9IHNlbGYgQSAqdGVtcG9yYXJ5KiBoZWxwZXIgdG8gZGV0ZWN0
IHBsYWNlcyB3aGVyZSBgdGhpc2AgaXMKKyAqIGRpZmZlcmVudCBmcm9tIHRoZSBgb3duZXJgIHdo
ZW4gUmVhY3QuY3JlYXRlRWxlbWVudCBpcyBjYWxsZWQsIHNvIHRoYXQgd2UKKyAqIGNhbiB3YXJu
LiBXZSB3YW50IHRvIGdldCByaWQgb2Ygb3duZXIgYW5kIHJlcGxhY2Ugc3RyaW5nIGByZWZgcyB3
aXRoIGFycm93CisgKiBmdW5jdGlvbnMsIGFuZCBhcyBsb25nIGFzIGB0aGlzYCBhbmQgb3duZXIg
YXJlIHRoZSBzYW1lLCB0aGVyZSB3aWxsIGJlIG5vCisgKiBjaGFuZ2UgaW4gYmVoYXZpb3IuCisg
KiBAcGFyYW0geyp9IHNvdXJjZSBBbiBhbm5vdGF0aW9uIG9iamVjdCAoYWRkZWQgYnkgYSB0cmFu
c3BpbGVyIG9yIG90aGVyd2lzZSkKKyAqIGluZGljYXRpbmcgZmlsZW5hbWUsIGxpbmUgbnVtYmVy
LCBhbmQvb3Igb3RoZXIgaW5mb3JtYXRpb24uCisgKiBAcGFyYW0geyp9IG93bmVyCisgKiBAcGFy
YW0geyp9IHByb3BzCisgKiBAaW50ZXJuYWwKKyAqLwordmFyIFJlYWN0RWxlbWVudCA9IGZ1bmN0
aW9uICh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpIHsKKyAgdmFy
IGVsZW1lbnQgPSB7CisgICAgLy8gVGhpcyB0YWcgYWxsb3cgdXMgdG8gdW5pcXVlbHkgaWRlbnRp
ZnkgdGhpcyBhcyBhIFJlYWN0IEVsZW1lbnQKKyAgICAkJHR5cGVvZjogUkVBQ1RfRUxFTUVOVF9U
WVBFLAorCisgICAgLy8gQnVpbHQtaW4gcHJvcGVydGllcyB0aGF0IGJlbG9uZyBvbiB0aGUgZWxl
bWVudAorICAgIHR5cGU6IHR5cGUsCisgICAga2V5OiBrZXksCisgICAgcmVmOiByZWYsCisgICAg
cHJvcHM6IHByb3BzLAorCisgICAgLy8gUmVjb3JkIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUg
Zm9yIGNyZWF0aW5nIHRoaXMgZWxlbWVudC4KKyAgICBfb3duZXI6IG93bmVyCisgIH07CisKKyAg
aWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgIC8vIFRoZSB2YWxpZGF0
aW9uIGZsYWcgaXMgY3VycmVudGx5IG11dGF0aXZlLiBXZSBwdXQgaXQgb24KKyAgICAvLyBhbiBl
eHRlcm5hbCBiYWNraW5nIHN0b3JlIHNvIHRoYXQgd2UgY2FuIGZyZWV6ZSB0aGUgd2hvbGUgb2Jq
ZWN0LgorICAgIC8vIFRoaXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBXZWFrTWFwIG9uY2UgdGhl
eSBhcmUgaW1wbGVtZW50ZWQgaW4KKyAgICAvLyBjb21tb25seSB1c2VkIGRldmVsb3BtZW50IGVu
dmlyb25tZW50cy4KKyAgICBlbGVtZW50Ll9zdG9yZSA9IHt9OworCisgICAgLy8gVG8gbWFrZSBj
b21wYXJpbmcgUmVhY3RFbGVtZW50cyBlYXNpZXIgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHdlIG1h
a2UKKyAgICAvLyB0aGUgdmFsaWRhdGlvbiBmbGFnIG5vbi1lbnVtZXJhYmxlICh3aGVyZSBwb3Nz
aWJsZSwgd2hpY2ggc2hvdWxkCisgICAgLy8gaW5jbHVkZSBldmVyeSBlbnZpcm9ubWVudCB3ZSBy
dW4gdGVzdHMgaW4pLCBzbyB0aGUgdGVzdCBmcmFtZXdvcmsKKyAgICAvLyBpZ25vcmVzIGl0Lgor
ICAgIGlmIChjYW5EZWZpbmVQcm9wZXJ0eSkgeworICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KGVsZW1lbnQuX3N0b3JlLCAndmFsaWRhdGVkJywgeworICAgICAgICBjb25maWd1cmFibGU6IGZh
bHNlLAorICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgICAgICAgd3JpdGFibGU6IHRydWUs
CisgICAgICAgIHZhbHVlOiBmYWxzZQorICAgICAgfSk7CisgICAgICAvLyBzZWxmIGFuZCBzb3Vy
Y2UgYXJlIERFViBvbmx5IHByb3BlcnRpZXMuCisgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
ZWxlbWVudCwgJ19zZWxmJywgeworICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLAorICAgICAg
ICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgICAgICAgd3JpdGFibGU6IGZhbHNlLAorICAgICAgICB2
YWx1ZTogc2VsZgorICAgICAgfSk7CisgICAgICAvLyBUd28gZWxlbWVudHMgY3JlYXRlZCBpbiB0
d28gZGlmZmVyZW50IHBsYWNlcyBzaG91bGQgYmUgY29uc2lkZXJlZAorICAgICAgLy8gZXF1YWwg
Zm9yIHRlc3RpbmcgcHVycG9zZXMgYW5kIHRoZXJlZm9yZSB3ZSBoaWRlIGl0IGZyb20gZW51bWVy
YXRpb24uCisgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zb3VyY2UnLCB7
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsCisgICAgICAgIGVudW1lcmFibGU6IGZhbHNl
LAorICAgICAgICB3cml0YWJsZTogZmFsc2UsCisgICAgICAgIHZhbHVlOiBzb3VyY2UKKyAgICAg
IH0pOworICAgIH0gZWxzZSB7CisgICAgICBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgPSBmYWxz
ZTsKKyAgICAgIGVsZW1lbnQuX3NlbGYgPSBzZWxmOworICAgICAgZWxlbWVudC5fc291cmNlID0g
c291cmNlOworICAgIH0KKyAgICBpZiAoT2JqZWN0LmZyZWV6ZSkgeworICAgICAgT2JqZWN0LmZy
ZWV6ZShlbGVtZW50LnByb3BzKTsKKyAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudCk7CisgICAg
fQorICB9CisKKyAgcmV0dXJuIGVsZW1lbnQ7Cit9OworCisvKioKKyAqIENyZWF0ZSBhbmQgcmV0
dXJuIGEgbmV3IFJlYWN0RWxlbWVudCBvZiB0aGUgZ2l2ZW4gdHlwZS4KKyAqIFNlZSBodHRwczov
L2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3RvcC1sZXZlbC1hcGkuaHRtbCNyZWFjdC5j
cmVhdGVlbGVtZW50CisgKi8KK1JlYWN0RWxlbWVudC5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24g
KHR5cGUsIGNvbmZpZywgY2hpbGRyZW4pIHsKKyAgdmFyIHByb3BOYW1lOworCisgIC8vIFJlc2Vy
dmVkIG5hbWVzIGFyZSBleHRyYWN0ZWQKKyAgdmFyIHByb3BzID0ge307CisKKyAgdmFyIGtleSA9
IG51bGw7CisgIHZhciByZWYgPSBudWxsOworICB2YXIgc2VsZiA9IG51bGw7CisgIHZhciBzb3Vy
Y2UgPSBudWxsOworCisgIGlmIChjb25maWcgIT0gbnVsbCkgeworICAgIGlmIChoYXNWYWxpZFJl
Zihjb25maWcpKSB7CisgICAgICByZWYgPSBjb25maWcucmVmOworICAgIH0KKyAgICBpZiAoaGFz
VmFsaWRLZXkoY29uZmlnKSkgeworICAgICAga2V5ID0gJycgKyBjb25maWcua2V5OworICAgIH0K
KworICAgIHNlbGYgPSBjb25maWcuX19zZWxmID09PSB1bmRlZmluZWQgPyBudWxsIDogY29uZmln
Ll9fc2VsZjsKKyAgICBzb3VyY2UgPSBjb25maWcuX19zb3VyY2UgPT09IHVuZGVmaW5lZCA/IG51
bGwgOiBjb25maWcuX19zb3VyY2U7CisgICAgLy8gUmVtYWluaW5nIHByb3BlcnRpZXMgYXJlIGFk
ZGVkIHRvIGEgbmV3IHByb3BzIG9iamVjdAorICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7
CisgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAhUkVT
RVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7CisgICAgICAgIHByb3BzW3By
b3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07CisgICAgICB9CisgICAgfQorICB9CisKKyAgLy8g
Q2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJh
bnNmZXJyZWQgb250bworICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC4KKyAg
dmFyIGNoaWxkcmVuTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7CisgIGlmIChjaGlsZHJl
bkxlbmd0aCA9PT0gMSkgeworICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47CisgIH0gZWxz
ZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7CisgICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShj
aGlsZHJlbkxlbmd0aCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsg
aSsrKSB7CisgICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRzW2kgKyAyXTsKKyAgICB9Cisg
ICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgICAgaWYgKE9iamVj
dC5mcmVlemUpIHsKKyAgICAgICAgT2JqZWN0LmZyZWV6ZShjaGlsZEFycmF5KTsKKyAgICAgIH0K
KyAgICB9CisgICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5OworICB9CisKKyAgLy8gUmVz
b2x2ZSBkZWZhdWx0IHByb3BzCisgIGlmICh0eXBlICYmIHR5cGUuZGVmYXVsdFByb3BzKSB7Cisg
ICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzOworICAgIGZvciAocHJvcE5h
bWUgaW4gZGVmYXVsdFByb3BzKSB7CisgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRl
ZmluZWQpIHsKKyAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1l
XTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0
aW9uJykgeworICAgIGlmIChrZXkgfHwgcmVmKSB7CisgICAgICBpZiAodHlwZW9mIHByb3BzLiQk
dHlwZW9mID09PSAndW5kZWZpbmVkJyB8fCBwcm9wcy4kJHR5cGVvZiAhPT0gUkVBQ1RfRUxFTUVO
VF9UWVBFKSB7CisgICAgICAgIHZhciBkaXNwbGF5TmFtZSA9IHR5cGVvZiB0eXBlID09PSAnZnVu
Y3Rpb24nID8gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgJ1Vua25vd24nIDogdHlw
ZTsKKyAgICAgICAgaWYgKGtleSkgeworICAgICAgICAgIGRlZmluZUtleVByb3BXYXJuaW5nR2V0
dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlZikgewor
ICAgICAgICAgIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7
CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIFJlYWN0RWxlbWVudCh0
eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LCBw
cm9wcyk7Cit9OworCisvKioKKyAqIFJldHVybiBhIGZ1bmN0aW9uIHRoYXQgcHJvZHVjZXMgUmVh
Y3RFbGVtZW50cyBvZiBhIGdpdmVuIHR5cGUuCisgKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRo
dWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3QuY3JlYXRlZmFjdG9yeQor
ICovCitSZWFjdEVsZW1lbnQuY3JlYXRlRmFjdG9yeSA9IGZ1bmN0aW9uICh0eXBlKSB7CisgIHZh
ciBmYWN0b3J5ID0gUmVhY3RFbGVtZW50LmNyZWF0ZUVsZW1lbnQuYmluZChudWxsLCB0eXBlKTsK
KyAgLy8gRXhwb3NlIHRoZSB0eXBlIG9uIHRoZSBmYWN0b3J5IGFuZCB0aGUgcHJvdG90eXBlIHNv
IHRoYXQgaXQgY2FuIGJlCisgIC8vIGVhc2lseSBhY2Nlc3NlZCBvbiBlbGVtZW50cy4gRS5nLiBg
PEZvbyAvPi50eXBlID09PSBGb29gLgorICAvLyBUaGlzIHNob3VsZCBub3QgYmUgbmFtZWQgYGNv
bnN0cnVjdG9yYCBzaW5jZSB0aGlzIG1heSBub3QgYmUgdGhlIGZ1bmN0aW9uCisgIC8vIHRoYXQg
Y3JlYXRlZCB0aGUgZWxlbWVudCwgYW5kIGl0IG1heSBub3QgZXZlbiBiZSBhIGNvbnN0cnVjdG9y
LgorICAvLyBMZWdhY3kgaG9vayBUT0RPOiBXYXJuIGlmIHRoaXMgaXMgYWNjZXNzZWQKKyAgZmFj
dG9yeS50eXBlID0gdHlwZTsKKyAgcmV0dXJuIGZhY3Rvcnk7Cit9OworCitSZWFjdEVsZW1lbnQu
Y2xvbmVBbmRSZXBsYWNlS2V5ID0gZnVuY3Rpb24gKG9sZEVsZW1lbnQsIG5ld0tleSkgeworICB2
YXIgbmV3RWxlbWVudCA9IFJlYWN0RWxlbWVudChvbGRFbGVtZW50LnR5cGUsIG5ld0tleSwgb2xk
RWxlbWVudC5yZWYsIG9sZEVsZW1lbnQuX3NlbGYsIG9sZEVsZW1lbnQuX3NvdXJjZSwgb2xkRWxl
bWVudC5fb3duZXIsIG9sZEVsZW1lbnQucHJvcHMpOworCisgIHJldHVybiBuZXdFbGVtZW50Owor
fTsKKworLyoqCisgKiBDbG9uZSBhbmQgcmV0dXJuIGEgbmV3IFJlYWN0RWxlbWVudCB1c2luZyBl
bGVtZW50IGFzIHRoZSBzdGFydGluZyBwb2ludC4KKyAqIFNlZSBodHRwczovL2ZhY2Vib29rLmdp
dGh1Yi5pby9yZWFjdC9kb2NzL3RvcC1sZXZlbC1hcGkuaHRtbCNyZWFjdC5jbG9uZWVsZW1lbnQK
KyAqLworUmVhY3RFbGVtZW50LmNsb25lRWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCBjb25m
aWcsIGNoaWxkcmVuKSB7CisgIHZhciBwcm9wTmFtZTsKKworICAvLyBPcmlnaW5hbCBwcm9wcyBh
cmUgY29waWVkCisgIHZhciBwcm9wcyA9IF9hc3NpZ24oe30sIGVsZW1lbnQucHJvcHMpOworCisg
IC8vIFJlc2VydmVkIG5hbWVzIGFyZSBleHRyYWN0ZWQKKyAgdmFyIGtleSA9IGVsZW1lbnQua2V5
OworICB2YXIgcmVmID0gZWxlbWVudC5yZWY7CisgIC8vIFNlbGYgaXMgcHJlc2VydmVkIHNpbmNl
IHRoZSBvd25lciBpcyBwcmVzZXJ2ZWQuCisgIHZhciBzZWxmID0gZWxlbWVudC5fc2VsZjsKKyAg
Ly8gU291cmNlIGlzIHByZXNlcnZlZCBzaW5jZSBjbG9uZUVsZW1lbnQgaXMgdW5saWtlbHkgdG8g
YmUgdGFyZ2V0ZWQgYnkgYQorICAvLyB0cmFuc3BpbGVyLCBhbmQgdGhlIG9yaWdpbmFsIHNvdXJj
ZSBpcyBwcm9iYWJseSBhIGJldHRlciBpbmRpY2F0b3Igb2YgdGhlCisgIC8vIHRydWUgb3duZXIu
CisgIHZhciBzb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7CisKKyAgLy8gT3duZXIgd2lsbCBiZSBw
cmVzZXJ2ZWQsIHVubGVzcyByZWYgaXMgb3ZlcnJpZGRlbgorICB2YXIgb3duZXIgPSBlbGVtZW50
Ll9vd25lcjsKKworICBpZiAoY29uZmlnICE9IG51bGwpIHsKKyAgICBpZiAoaGFzVmFsaWRSZWYo
Y29uZmlnKSkgeworICAgICAgLy8gU2lsZW50bHkgc3RlYWwgdGhlIHJlZiBmcm9tIHRoZSBwYXJl
bnQuCisgICAgICByZWYgPSBjb25maWcucmVmOworICAgICAgb3duZXIgPSBSZWFjdEN1cnJlbnRP
d25lci5jdXJyZW50OworICAgIH0KKyAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkgeworICAg
ICAga2V5ID0gJycgKyBjb25maWcua2V5OworICAgIH0KKworICAgIC8vIFJlbWFpbmluZyBwcm9w
ZXJ0aWVzIG92ZXJyaWRlIGV4aXN0aW5nIHByb3BzCisgICAgdmFyIGRlZmF1bHRQcm9wczsKKyAg
ICBpZiAoZWxlbWVudC50eXBlICYmIGVsZW1lbnQudHlwZS5kZWZhdWx0UHJvcHMpIHsKKyAgICAg
IGRlZmF1bHRQcm9wcyA9IGVsZW1lbnQudHlwZS5kZWZhdWx0UHJvcHM7CisgICAgfQorICAgIGZv
ciAocHJvcE5hbWUgaW4gY29uZmlnKSB7CisgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChj
b25maWcsIHByb3BOYW1lKSAmJiAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5h
bWUpKSB7CisgICAgICAgIGlmIChjb25maWdbcHJvcE5hbWVdID09PSB1bmRlZmluZWQgJiYgZGVm
YXVsdFByb3BzICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAvLyBSZXNvbHZlIGRlZmF1bHQg
cHJvcHMKKyAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVd
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1tw
cm9wTmFtZV07CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICAvLyBDaGlsZHJl
biBjYW4gYmUgbW9yZSB0aGFuIG9uZSBhcmd1bWVudCwgYW5kIHRob3NlIGFyZSB0cmFuc2ZlcnJl
ZCBvbnRvCisgIC8vIHRoZSBuZXdseSBhbGxvY2F0ZWQgcHJvcHMgb2JqZWN0LgorICB2YXIgY2hp
bGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjsKKyAgaWYgKGNoaWxkcmVuTGVuZ3Ro
ID09PSAxKSB7CisgICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZHJlbjsKKyAgfSBlbHNlIGlmIChj
aGlsZHJlbkxlbmd0aCA+IDEpIHsKKyAgICB2YXIgY2hpbGRBcnJheSA9IEFycmF5KGNoaWxkcmVu
TGVuZ3RoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHsK
KyAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdOworICAgIH0KKyAgICBwcm9w
cy5jaGlsZHJlbiA9IGNoaWxkQXJyYXk7CisgIH0KKworICByZXR1cm4gUmVhY3RFbGVtZW50KGVs
ZW1lbnQudHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKTsKK307CisK
Ky8qKgorICogVmVyaWZpZXMgdGhlIG9iamVjdCBpcyBhIFJlYWN0RWxlbWVudC4KKyAqIFNlZSBo
dHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3RvcC1sZXZlbC1hcGkuaHRtbCNy
ZWFjdC5pc3ZhbGlkZWxlbWVudAorICogQHBhcmFtIHs/b2JqZWN0fSBvYmplY3QKKyAqIEByZXR1
cm4ge2Jvb2xlYW59IFRydWUgaWYgYG9iamVjdGAgaXMgYSB2YWxpZCBjb21wb25lbnQuCisgKiBA
ZmluYWwKKyAqLworUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50ID0gZnVuY3Rpb24gKG9iamVj
dCkgeworICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBu
dWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFOworfTsKKworbW9k
dWxlLmV4cG9ydHMgPSBSZWFjdEVsZW1lbnQ7Cit9LHsiMTQiOjE0LCIxNyI6MTcsIjMzIjozMywi
NDkiOjQ5LCI1MCI6NTB9XSwxNzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIg
dGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50
CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGlu
IHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKiAKKyAqLworCisndXNlIHN0cmljdCc7CisKKy8v
IFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudCB0eXBlLiBJZiB0aGVyZSBp
cyBubyBuYXRpdmUgU3ltYm9sCisvLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIg
aXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuCisKK3ZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSB0eXBl
b2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbFsnZm9yJ10gJiYgU3ltYm9sWydmb3In
XSgncmVhY3QuZWxlbWVudCcpIHx8IDB4ZWFjNzsKKworbW9kdWxlLmV4cG9ydHMgPSBSRUFDVF9F
TEVNRU5UX1RZUEU7Cit9LHt9XSwxODpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5k
ZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdy
YW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxl
IGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworLyoqCisgKiBSZWFjdEVsZW1lbnRW
YWxpZGF0b3IgcHJvdmlkZXMgYSB3cmFwcGVyIGFyb3VuZCBhIGVsZW1lbnQgZmFjdG9yeQorICog
d2hpY2ggdmFsaWRhdGVzIHRoZSBwcm9wcyBwYXNzZWQgdG8gdGhlIGVsZW1lbnQuIFRoaXMgaXMg
aW50ZW5kZWQgdG8gYmUKKyAqIHVzZWQgb25seSBpbiBERVYgYW5kIGNvdWxkIGJlIHJlcGxhY2Vk
IGJ5IGEgc3RhdGljIHR5cGUgY2hlY2tlciBmb3IgbGFuZ3VhZ2VzCisgKiB0aGF0IHN1cHBvcnQg
aXQuCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgUmVhY3RDdXJyZW50T3duZXIgPSBfZGVy
ZXFfKDE0KTsKK3ZhciBSZWFjdENvbXBvbmVudFRyZWVIb29rID0gX2RlcmVxXygxMik7Cit2YXIg
UmVhY3RFbGVtZW50ID0gX2RlcmVxXygxNik7CisKK3ZhciBjaGVja1JlYWN0VHlwZVNwZWMgPSBf
ZGVyZXFfKDM0KTsKKwordmFyIGNhbkRlZmluZVByb3BlcnR5ID0gX2RlcmVxXygzMyk7Cit2YXIg
Z2V0SXRlcmF0b3JGbiA9IF9kZXJlcV8oMzYpOwordmFyIHdhcm5pbmcgPSBfZGVyZXFfKDQ5KTsK
KworZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkgeworICBpZiAoUmVhY3RD
dXJyZW50T3duZXIuY3VycmVudCkgeworICAgIHZhciBuYW1lID0gUmVhY3RDdXJyZW50T3duZXIu
Y3VycmVudC5nZXROYW1lKCk7CisgICAgaWYgKG5hbWUpIHsKKyAgICAgIHJldHVybiAnIENoZWNr
IHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7CisgICAgfQorICB9CisgIHJl
dHVybiAnJzsKK30KKworZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oZWxlbWVu
dFByb3BzKSB7CisgIGlmIChlbGVtZW50UHJvcHMgIT09IG51bGwgJiYgZWxlbWVudFByb3BzICE9
PSB1bmRlZmluZWQgJiYgZWxlbWVudFByb3BzLl9fc291cmNlICE9PSB1bmRlZmluZWQpIHsKKyAg
ICB2YXIgc291cmNlID0gZWxlbWVudFByb3BzLl9fc291cmNlOworICAgIHZhciBmaWxlTmFtZSA9
IHNvdXJjZS5maWxlTmFtZS5yZXBsYWNlKC9eLipbXFxcL10vLCAnJyk7CisgICAgdmFyIGxpbmVO
dW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjsKKyAgICByZXR1cm4gJyBDaGVjayB5b3VyIGNvZGUg
YXQgJyArIGZpbGVOYW1lICsgJzonICsgbGluZU51bWJlciArICcuJzsKKyAgfQorICByZXR1cm4g
Jyc7Cit9CisKKy8qKgorICogV2FybiBpZiB0aGVyZSdzIG5vIGtleSBleHBsaWNpdGx5IHNldCBv
biBkeW5hbWljIGFycmF5cyBvZiBjaGlsZHJlbiBvcgorICogb2JqZWN0IGtleXMgYXJlIG5vdCB2
YWxpZC4gVGhpcyBhbGxvd3MgdXMgdG8ga2VlcCB0cmFjayBvZiBjaGlsZHJlbiBiZXR3ZWVuCisg
KiB1cGRhdGVzLgorICovCit2YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307CisKK2Z1bmN0
aW9uIGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSkgeworICB2YXIgaW5m
byA9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpOworCisgIGlmICghaW5mbykgeworICAg
IHZhciBwYXJlbnROYW1lID0gdHlwZW9mIHBhcmVudFR5cGUgPT09ICdzdHJpbmcnID8gcGFyZW50
VHlwZSA6IHBhcmVudFR5cGUuZGlzcGxheU5hbWUgfHwgcGFyZW50VHlwZS5uYW1lOworICAgIGlm
IChwYXJlbnROYW1lKSB7CisgICAgICBpbmZvID0gJyBDaGVjayB0aGUgdG9wLWxldmVsIHJlbmRl
ciBjYWxsIHVzaW5nIDwnICsgcGFyZW50TmFtZSArICc+Lic7CisgICAgfQorICB9CisgIHJldHVy
biBpbmZvOworfQorCisvKioKKyAqIFdhcm4gaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIGFu
IGV4cGxpY2l0IGtleSBhc3NpZ25lZCB0byBpdC4KKyAqIFRoaXMgZWxlbWVudCBpcyBpbiBhbiBh
cnJheS4gVGhlIGFycmF5IGNvdWxkIGdyb3cgYW5kIHNocmluayBvciBiZQorICogcmVvcmRlcmVk
LiBBbGwgY2hpbGRyZW4gdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXJlIHJl
cXVpcmVkIHRvCisgKiBoYXZlIGEgImtleSIgcHJvcGVydHkgYXNzaWduZWQgdG8gaXQuIEVycm9y
IHN0YXR1c2VzIGFyZSBjYWNoZWQgc28gYSB3YXJuaW5nCisgKiB3aWxsIG9ubHkgYmUgc2hvd24g
b25jZS4KKyAqCisgKiBAaW50ZXJuYWwKKyAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50
IEVsZW1lbnQgdGhhdCByZXF1aXJlcyBhIGtleS4KKyAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBl
bGVtZW50J3MgcGFyZW50J3MgdHlwZS4KKyAqLworZnVuY3Rpb24gdmFsaWRhdGVFeHBsaWNpdEtl
eShlbGVtZW50LCBwYXJlbnRUeXBlKSB7CisgIGlmICghZWxlbWVudC5fc3RvcmUgfHwgZWxlbWVu
dC5fc3RvcmUudmFsaWRhdGVkIHx8IGVsZW1lbnQua2V5ICE9IG51bGwpIHsKKyAgICByZXR1cm47
CisgIH0KKyAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTsKKworICB2YXIgbWVtb2l6
ZXIgPSBvd25lckhhc0tleVVzZVdhcm5pbmcudW5pcXVlS2V5IHx8IChvd25lckhhc0tleVVzZVdh
cm5pbmcudW5pcXVlS2V5ID0ge30pOworCisgIHZhciBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZv
ID0gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKTsKKyAgaWYgKG1lbW9p
emVyW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dKSB7CisgICAgcmV0dXJuOworICB9CisgIG1l
bW9pemVyW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dID0gdHJ1ZTsKKworICAvLyBVc3VhbGx5
IHRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBvZmZlbmRlciwgYnV0IGlmIGl0IGFjY2VwdHMgY2hp
bGRyZW4gYXMgYQorICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBj
aGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yCisgIC8vIGFzc2lnbmluZyBpdCBhIGtleS4KKyAg
dmFyIGNoaWxkT3duZXIgPSAnJzsKKyAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5fb3duZXIgJiYg
ZWxlbWVudC5fb3duZXIgIT09IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQpIHsKKyAgICAvLyBH
aXZlIHRoZSBjb21wb25lbnQgdGhhdCBvcmlnaW5hbGx5IGNyZWF0ZWQgdGhpcyBjaGlsZC4KKyAg
ICBjaGlsZE93bmVyID0gJyBJdCB3YXMgcGFzc2VkIGEgY2hpbGQgZnJvbSAnICsgZWxlbWVudC5f
b3duZXIuZ2V0TmFtZSgpICsgJy4nOworICB9CisKKyAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1
Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ0VhY2ggY2hpbGQgaW4gYW4gYXJyYXkgb3IgaXRlcmF0
b3Igc2hvdWxkIGhhdmUgYSB1bmlxdWUgImtleSIgcHJvcC4nICsgJyVzJXMgU2VlIGh0dHBzOi8v
ZmIubWUvcmVhY3Qtd2FybmluZy1rZXlzIGZvciBtb3JlIGluZm9ybWF0aW9uLiVzJywgY3VycmVu
dENvbXBvbmVudEVycm9ySW5mbywgY2hpbGRPd25lciwgUmVhY3RDb21wb25lbnRUcmVlSG9vay5n
ZXRDdXJyZW50U3RhY2tBZGRlbmR1bShlbGVtZW50KSkgOiB2b2lkIDA7Cit9CisKKy8qKgorICog
RW5zdXJlIHRoYXQgZXZlcnkgZWxlbWVudCBlaXRoZXIgaXMgcGFzc2VkIGluIGEgc3RhdGljIGxv
Y2F0aW9uLCBpbiBhbgorICogYXJyYXkgd2l0aCBhbiBleHBsaWNpdCBrZXlzIHByb3BlcnR5IGRl
ZmluZWQsIG9yIGluIGFuIG9iamVjdCBsaXRlcmFsCisgKiB3aXRoIHZhbGlkIGtleSBwcm9wZXJ0
eS4KKyAqCisgKiBAaW50ZXJuYWwKKyAqIEBwYXJhbSB7UmVhY3ROb2RlfSBub2RlIFN0YXRpY2Fs
bHkgcGFzc2VkIGNoaWxkIG9mIGFueSB0eXBlLgorICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIG5v
ZGUncyBwYXJlbnQncyB0eXBlLgorICovCitmdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2Rl
LCBwYXJlbnRUeXBlKSB7CisgIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHsKKyAgICBy
ZXR1cm47CisgIH0KKyAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07
CisgICAgICBpZiAoUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkgeworICAgICAg
ICB2YWxpZGF0ZUV4cGxpY2l0S2V5KGNoaWxkLCBwYXJlbnRUeXBlKTsKKyAgICAgIH0KKyAgICB9
CisgIH0gZWxzZSBpZiAoUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KG5vZGUpKSB7CisgICAg
Ly8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi4KKyAgICBpZiAo
bm9kZS5fc3RvcmUpIHsKKyAgICAgIG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7CisgICAg
fQorICB9IGVsc2UgaWYgKG5vZGUpIHsKKyAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9y
Rm4obm9kZSk7CisgICAgLy8gRW50cnkgaXRlcmF0b3JzIHByb3ZpZGUgaW1wbGljaXQga2V5cy4K
KyAgICBpZiAoaXRlcmF0b3JGbikgeworICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IG5vZGUuZW50
cmllcykgeworICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobm9kZSk7Cisg
ICAgICAgIHZhciBzdGVwOworICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgp
KS5kb25lKSB7CisgICAgICAgICAgaWYgKFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChzdGVw
LnZhbHVlKSkgeworICAgICAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShzdGVwLnZhbHVlLCBw
YXJlbnRUeXBlKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0K
K30KKworLyoqCisgKiBHaXZlbiBhbiBlbGVtZW50LCB2YWxpZGF0ZSB0aGF0IGl0cyBwcm9wcyBm
b2xsb3cgdGhlIHByb3BUeXBlcyBkZWZpbml0aW9uLAorICogcHJvdmlkZWQgYnkgdGhlIHR5cGUu
CisgKgorICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQKKyAqLworZnVuY3Rpb24gdmFs
aWRhdGVQcm9wVHlwZXMoZWxlbWVudCkgeworICB2YXIgY29tcG9uZW50Q2xhc3MgPSBlbGVtZW50
LnR5cGU7CisgIGlmICh0eXBlb2YgY29tcG9uZW50Q2xhc3MgIT09ICdmdW5jdGlvbicpIHsKKyAg
ICByZXR1cm47CisgIH0KKyAgdmFyIG5hbWUgPSBjb21wb25lbnRDbGFzcy5kaXNwbGF5TmFtZSB8
fCBjb21wb25lbnRDbGFzcy5uYW1lOworICBpZiAoY29tcG9uZW50Q2xhc3MucHJvcFR5cGVzKSB7
CisgICAgY2hlY2tSZWFjdFR5cGVTcGVjKGNvbXBvbmVudENsYXNzLnByb3BUeXBlcywgZWxlbWVu
dC5wcm9wcywgJ3Byb3AnLCBuYW1lLCBlbGVtZW50LCBudWxsKTsKKyAgfQorICBpZiAodHlwZW9m
IGNvbXBvbmVudENsYXNzLmdldERlZmF1bHRQcm9wcyA9PT0gJ2Z1bmN0aW9uJykgeworICAgICJk
ZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoY29tcG9uZW50Q2xhc3MuZ2V0
RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkLCAnZ2V0RGVmYXVsdFByb3BzIGlzIG9u
bHkgdXNlZCBvbiBjbGFzc2ljIFJlYWN0LmNyZWF0ZUNsYXNzICcgKyAnZGVmaW5pdGlvbnMuIFVz
ZSBhIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBgZGVmYXVsdFByb3BzYCBpbnN0ZWFkLicpIDogdm9p
ZCAwOworICB9Cit9CisKK3ZhciBSZWFjdEVsZW1lbnRWYWxpZGF0b3IgPSB7CisKKyAgY3JlYXRl
RWxlbWVudDogZnVuY3Rpb24gKHR5cGUsIHByb3BzLCBjaGlsZHJlbikgeworICAgIHZhciB2YWxp
ZFR5cGUgPSB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5j
dGlvbic7CisgICAgLy8gV2Ugd2FybiBpbiB0aGlzIGNhc2UgYnV0IGRvbid0IHRocm93LiBXZSBl
eHBlY3QgdGhlIGVsZW1lbnQgY3JlYXRpb24gdG8KKyAgICAvLyBzdWNjZWVkIGFuZCB0aGVyZSB3
aWxsIGxpa2VseSBiZSBlcnJvcnMgaW4gcmVuZGVyLgorICAgIGlmICghdmFsaWRUeXBlKSB7Cisg
ICAgICBpZiAodHlwZW9mIHR5cGUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHR5cGUgIT09ICdz
dHJpbmcnKSB7CisgICAgICAgIHZhciBpbmZvID0gJyc7CisgICAgICAgIGlmICh0eXBlID09PSB1
bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYg
T2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgaW5mbyArPSAnIFlv
dSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcg
KyAnaXRcJ3MgZGVmaW5lZCBpbi4nOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHNvdXJjZUlu
Zm8gPSBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShwcm9wcyk7CisgICAgICAgIGlmIChzb3Vy
Y2VJbmZvKSB7CisgICAgICAgICAgaW5mbyArPSBzb3VyY2VJbmZvOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgIGluZm8gKz0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7CisgICAg
ICAgIH0KKworICAgICAgICBpbmZvICs9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0Q3VycmVu
dFN0YWNrQWRkZW5kdW0oKTsKKworICAgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlv
bicgPyB3YXJuaW5nKGZhbHNlLCAnUmVhY3QuY3JlYXRlRWxlbWVudDogdHlwZSBpcyBpbnZhbGlk
IC0tIGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgJyArICdidWlsdC1pbiBjb21wb25lbnRzKSBvciBh
IGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlICcgKyAnY29tcG9uZW50cykgYnV0IGdvdDog
JXMuJXMnLCB0eXBlID09IG51bGwgPyB0eXBlIDogdHlwZW9mIHR5cGUsIGluZm8pIDogdm9pZCAw
OworICAgICAgfQorICAgIH0KKworICAgIHZhciBlbGVtZW50ID0gUmVhY3RFbGVtZW50LmNyZWF0
ZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKworICAgIC8vIFRoZSByZXN1bHQgY2Fu
IGJlIG51bGxpc2ggaWYgYSBtb2NrIG9yIGEgY3VzdG9tIGZ1bmN0aW9uIGlzIHVzZWQuCisgICAg
Ly8gVE9ETzogRHJvcCB0aGlzIHdoZW4gdGhlc2UgYXJlIG5vIGxvbmdlciBhbGxvd2VkIGFzIHRo
ZSB0eXBlIGFyZ3VtZW50LgorICAgIGlmIChlbGVtZW50ID09IG51bGwpIHsKKyAgICAgIHJldHVy
biBlbGVtZW50OworICAgIH0KKworICAgIC8vIFNraXAga2V5IHdhcm5pbmcgaWYgdGhlIHR5cGUg
aXNuJ3QgdmFsaWQgc2luY2Ugb3VyIGtleSB2YWxpZGF0aW9uIGxvZ2ljCisgICAgLy8gZG9lc24n
dCBleHBlY3QgYSBub24tc3RyaW5nL2Z1bmN0aW9uIHR5cGUgYW5kIGNhbiB0aHJvdyBjb25mdXNp
bmcgZXJyb3JzLgorICAgIC8vIFdlIGRvbid0IHdhbnQgZXhjZXB0aW9uIGJlaGF2aW9yIHRvIGRp
ZmZlciBiZXR3ZWVuIGRldiBhbmQgcHJvZC4KKyAgICAvLyAoUmVuZGVyaW5nIHdpbGwgdGhyb3cg
d2l0aCBhIGhlbHBmdWwgbWVzc2FnZSBhbmQgYXMgc29vbiBhcyB0aGUgdHlwZSBpcworICAgIC8v
IGZpeGVkLCB0aGUga2V5IHdhcm5pbmdzIHdpbGwgYXBwZWFyLikKKyAgICBpZiAodmFsaWRUeXBl
KSB7CisgICAgICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewor
ICAgICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNbaV0sIHR5cGUpOworICAgICAgfQor
ICAgIH0KKworICAgIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpOworCisgICAgcmV0dXJuIGVs
ZW1lbnQ7CisgIH0sCisKKyAgY3JlYXRlRmFjdG9yeTogZnVuY3Rpb24gKHR5cGUpIHsKKyAgICB2
YXIgdmFsaWRhdGVkRmFjdG9yeSA9IFJlYWN0RWxlbWVudFZhbGlkYXRvci5jcmVhdGVFbGVtZW50
LmJpbmQobnVsbCwgdHlwZSk7CisgICAgLy8gTGVnYWN5IGhvb2sgVE9ETzogV2FybiBpZiB0aGlz
IGlzIGFjY2Vzc2VkCisgICAgdmFsaWRhdGVkRmFjdG9yeS50eXBlID0gdHlwZTsKKworICAgIGlm
ICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgIGlmIChjYW5EZWZpbmVQ
cm9wZXJ0eSkgeworICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsaWRhdGVkRmFjdG9y
eSwgJ3R5cGUnLCB7CisgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsCisgICAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlv
bicgPyB3YXJuaW5nKGZhbHNlLCAnRmFjdG9yeS50eXBlIGlzIGRlcHJlY2F0ZWQuIEFjY2VzcyB0
aGUgY2xhc3MgZGlyZWN0bHkgJyArICdiZWZvcmUgcGFzc2luZyBpdCB0byBjcmVhdGVGYWN0b3J5
LicpIDogdm9pZCAwOworICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd0
eXBlJywgeworICAgICAgICAgICAgICB2YWx1ZTogdHlwZQorICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICByZXR1cm4gdHlwZTsKKyAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiB2YWxpZGF0ZWRGYWN0b3J5OworICB9LAorCisgIGNsb25lRWxl
bWVudDogZnVuY3Rpb24gKGVsZW1lbnQsIHByb3BzLCBjaGlsZHJlbikgeworICAgIHZhciBuZXdF
bGVtZW50ID0gUmVhY3RFbGVtZW50LmNsb25lRWxlbWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMp
OworICAgIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CisgICAg
ICB2YWxpZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNbaV0sIG5ld0VsZW1lbnQudHlwZSk7CisgICAg
fQorICAgIHZhbGlkYXRlUHJvcFR5cGVzKG5ld0VsZW1lbnQpOworICAgIHJldHVybiBuZXdFbGVt
ZW50OworICB9CisKK307CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RFbGVtZW50VmFsaWRhdG9y
OworfSx7IjEyIjoxMiwiMTQiOjE0LCIxNiI6MTYsIjMzIjozMywiMzQiOjM0LCIzNiI6MzYsIjQ5
Ijo0OX1dLDE5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29w
eXJpZ2h0IDIwMTUtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0
eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGly
ZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBh
dGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUg
ZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBfcHJvZEludmFyaWFu
dCA9IF9kZXJlcV8oMzkpOworCit2YXIgUmVhY3RDaGlsZHJlbiA9IF9kZXJlcV8oOSk7Cit2YXIg
UmVhY3RFbGVtZW50ID0gX2RlcmVxXygxNik7CisKK3ZhciBlbXB0eUZ1bmN0aW9uID0gX2RlcmVx
Xyg0NSk7Cit2YXIgaW52YXJpYW50ID0gX2RlcmVxXyg0Nyk7Cit2YXIgd2FybmluZyA9IF9kZXJl
cV8oNDkpOworCisvKioKKyAqIFdlIHVzZWQgdG8gYWxsb3cga2V5ZWQgb2JqZWN0cyB0byBzZXJ2
ZSBhcyBhIGNvbGxlY3Rpb24gb2YgUmVhY3RFbGVtZW50cywKKyAqIG9yIG5lc3RlZCBzZXRzLiBU
aGlzIGFsbG93ZWQgdXMgYSB3YXkgdG8gZXhwbGljaXRseSBrZXkgYSBzZXQgb3IgZnJhZ21lbnQg
b2YKKyAqIGNvbXBvbmVudHMuIFRoaXMgaXMgbm93IGJlaW5nIHJlcGxhY2VkIHdpdGggYW4gb3Bh
cXVlIGRhdGEgc3RydWN0dXJlLgorICogVGhlIHVwZ3JhZGUgcGF0aCBpcyB0byBjYWxsIFJlYWN0
LmFkZG9ucy5jcmVhdGVGcmFnbWVudCh7IGtleTogdmFsdWUgfSkgdG8KKyAqIGNyZWF0ZSBhIGtl
eWVkIGZyYWdtZW50LiBUaGUgcmVzdWx0aW5nIGRhdGEgc3RydWN0dXJlIGlzIGFuIGFycmF5Lgor
ICovCisKK3ZhciBudW1lcmljUHJvcGVydHlSZWdleCA9IC9eXGQrJC87CisKK3ZhciB3YXJuZWRB
Ym91dE51bWVyaWMgPSBmYWxzZTsKKwordmFyIFJlYWN0RnJhZ21lbnQgPSB7CisgIC8qKgorICAg
KiBXcmFwIGEga2V5ZWQgb2JqZWN0IGluIGFuIG9wYXF1ZSBwcm94eSB0aGF0IHdhcm5zIHlvdSBp
ZiB5b3UgYWNjZXNzIGFueQorICAgKiBvZiBpdHMgcHJvcGVydGllcy4KKyAgICogU2VlIGh0dHBz
Oi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvY3JlYXRlLWZyYWdtZW50Lmh0bWwKKyAg
ICovCisgIGNyZWF0ZTogZnVuY3Rpb24gKG9iamVjdCkgeworICAgIGlmICh0eXBlb2Ygb2JqZWN0
ICE9PSAnb2JqZWN0JyB8fCAhb2JqZWN0IHx8IEFycmF5LmlzQXJyYXkob2JqZWN0KSkgeworICAg
ICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1JlYWN0
LmFkZG9ucy5jcmVhdGVGcmFnbWVudCBvbmx5IGFjY2VwdHMgYSBzaW5nbGUgb2JqZWN0LiBHb3Q6
ICVzJywgb2JqZWN0KSA6IHZvaWQgMDsKKyAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorICAg
IGlmIChSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQob2JqZWN0KSkgeworICAgICAgImRldmVs
b3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1JlYWN0LmFkZG9ucy5j
cmVhdGVGcmFnbWVudCBkb2VzIG5vdCBhY2NlcHQgYSBSZWFjdEVsZW1lbnQgJyArICd3aXRob3V0
IGEgd3JhcHBlciBvYmplY3QuJykgOiB2b2lkIDA7CisgICAgICByZXR1cm4gb2JqZWN0OworICAg
IH0KKworICAgICEob2JqZWN0Lm5vZGVUeXBlICE9PSAxKSA/ICJkZXZlbG9wbWVudCIgIT09ICdw
cm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1JlYWN0LmFkZG9ucy5jcmVhdGVGcmFnbWVu
dCguLi4pOiBFbmNvdW50ZXJlZCBhbiBpbnZhbGlkIGNoaWxkOyBET00gZWxlbWVudHMgYXJlIG5v
dCB2YWxpZCBjaGlsZHJlbiBvZiBSZWFjdCBjb21wb25lbnRzLicpIDogX3Byb2RJbnZhcmlhbnQo
JzAnKSA6IHZvaWQgMDsKKworICAgIHZhciByZXN1bHQgPSBbXTsKKworICAgIGZvciAodmFyIGtl
eSBpbiBvYmplY3QpIHsKKyAgICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicp
IHsKKyAgICAgICAgaWYgKCF3YXJuZWRBYm91dE51bWVyaWMgJiYgbnVtZXJpY1Byb3BlcnR5UmVn
ZXgudGVzdChrZXkpKSB7CisgICAgICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24n
ID8gd2FybmluZyhmYWxzZSwgJ1JlYWN0LmFkZG9ucy5jcmVhdGVGcmFnbWVudCguLi4pOiBDaGls
ZCBvYmplY3RzIHNob3VsZCBoYXZlICcgKyAnbm9uLW51bWVyaWMga2V5cyBzbyBvcmRlcmluZyBp
cyBwcmVzZXJ2ZWQuJykgOiB2b2lkIDA7CisgICAgICAgICAgd2FybmVkQWJvdXROdW1lcmljID0g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgUmVhY3RDaGlsZHJlbi5tYXBJbnRvV2l0
aEtleVByZWZpeEludGVybmFsKG9iamVjdFtrZXldLCByZXN1bHQsIGtleSwgZW1wdHlGdW5jdGlv
bi50aGF0UmV0dXJuc0FyZ3VtZW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworICB9
Cit9OworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0RnJhZ21lbnQ7Cit9LHsiMTYiOjE2LCIzOSI6
MzksIjQ1Ijo0NSwiNDciOjQ3LCI0OSI6NDksIjkiOjl9XSwyMDpbZnVuY3Rpb24oX2RlcmVxXyxt
b2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29r
LCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUg
aXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICog
TElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBB
biBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0
aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBz
dHJpY3QnOworCisvKioKKyAqIFJlYWN0TGluayBlbmNhcHN1bGF0ZXMgYSBjb21tb24gcGF0dGVy
biBpbiB3aGljaCBhIGNvbXBvbmVudCB3YW50cyB0byBtb2RpZnkKKyAqIGEgcHJvcCByZWNlaXZl
ZCBmcm9tIGl0cyBwYXJlbnQuIFJlYWN0TGluayBhbGxvd3MgdGhlIHBhcmVudCB0byBwYXNzIGRv
d24gYQorICogdmFsdWUgY291cGxlZCB3aXRoIGEgY2FsbGJhY2sgdGhhdCwgd2hlbiBpbnZva2Vk
LCBleHByZXNzZXMgYW4gaW50ZW50IHRvCisgKiBtb2RpZnkgdGhhdCB2YWx1ZS4gRm9yIGV4YW1w
bGU6CisgKgorICogUmVhY3QuY3JlYXRlQ2xhc3MoeworICogICBnZXRJbml0aWFsU3RhdGU6IGZ1
bmN0aW9uKCkgeworICogICAgIHJldHVybiB7dmFsdWU6ICcnfTsKKyAqICAgfSwKKyAqICAgcmVu
ZGVyOiBmdW5jdGlvbigpIHsKKyAqICAgICB2YXIgdmFsdWVMaW5rID0gbmV3IFJlYWN0TGluayh0
aGlzLnN0YXRlLnZhbHVlLCB0aGlzLl9oYW5kbGVWYWx1ZUNoYW5nZSk7CisgKiAgICAgcmV0dXJu
IDxpbnB1dCB2YWx1ZUxpbms9e3ZhbHVlTGlua30gLz47CisgKiAgIH0sCisgKiAgIF9oYW5kbGVW
YWx1ZUNoYW5nZTogZnVuY3Rpb24obmV3VmFsdWUpIHsKKyAqICAgICB0aGlzLnNldFN0YXRlKHt2
YWx1ZTogbmV3VmFsdWV9KTsKKyAqICAgfQorICogfSk7CisgKgorICogV2UgaGF2ZSBwcm92aWRl
ZCBzb21lIHN1Z2FyeSBtaXhpbnMgdG8gbWFrZSB0aGUgY3JlYXRpb24gYW5kCisgKiBjb25zdW1w
dGlvbiBvZiBSZWFjdExpbmsgZWFzaWVyOyBzZWUgTGlua2VkVmFsdWVVdGlscyBhbmQgTGlua2Vk
U3RhdGVNaXhpbi4KKyAqLworCit2YXIgUmVhY3QgPSBfZGVyZXFfKDUpOworCisvKioKKyAqIERl
cHJlY2F0ZWQ6IEFuIGFuIGVhc3kgd2F5IHRvIGV4cHJlc3MgdHdvLXdheSBiaW5kaW5nIHdpdGgg
UmVhY3QuIAorICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdHdv
LXdheS1iaW5kaW5nLWhlbHBlcnMuaHRtbAorICoKKyAqIEBwYXJhbSB7Kn0gdmFsdWUgY3VycmVu
dCB2YWx1ZSBvZiB0aGUgbGluaworICogQHBhcmFtIHtmdW5jdGlvbn0gcmVxdWVzdENoYW5nZSBj
YWxsYmFjayB0byByZXF1ZXN0IGEgY2hhbmdlCisgKi8KK2Z1bmN0aW9uIFJlYWN0TGluayh2YWx1
ZSwgcmVxdWVzdENoYW5nZSkgeworICB0aGlzLnZhbHVlID0gdmFsdWU7CisgIHRoaXMucmVxdWVz
dENoYW5nZSA9IHJlcXVlc3RDaGFuZ2U7Cit9CisKKy8qKgorICogQ3JlYXRlcyBhIFByb3BUeXBl
IHRoYXQgZW5mb3JjZXMgdGhlIFJlYWN0TGluayBBUEkgYW5kIG9wdGlvbmFsbHkgY2hlY2tzIHRo
ZQorICogdHlwZSBvZiB0aGUgdmFsdWUgYmVpbmcgcGFzc2VkIGluc2lkZSB0aGUgbGluay4gRXhh
bXBsZToKKyAqCisgKiBNeUNvbXBvbmVudC5wcm9wVHlwZXMgPSB7CisgKiAgIHRhYkluZGV4TGlu
azogUmVhY3RMaW5rLlByb3BUeXBlcy5saW5rKFJlYWN0LlByb3BUeXBlcy5udW1iZXIpCisgKiB9
CisgKi8KK2Z1bmN0aW9uIGNyZWF0ZUxpbmtUeXBlQ2hlY2tlcihsaW5rVHlwZSkgeworICB2YXIg
c2hhcGVzID0geworICAgIHZhbHVlOiBsaW5rVHlwZSA9PT0gdW5kZWZpbmVkID8gUmVhY3QuUHJv
cFR5cGVzLmFueS5pc1JlcXVpcmVkIDogbGlua1R5cGUuaXNSZXF1aXJlZCwKKyAgICByZXF1ZXN0
Q2hhbmdlOiBSZWFjdC5Qcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkCisgIH07CisgIHJldHVybiBS
ZWFjdC5Qcm9wVHlwZXMuc2hhcGUoc2hhcGVzKTsKK30KKworUmVhY3RMaW5rLlByb3BUeXBlcyA9
IHsKKyAgbGluazogY3JlYXRlTGlua1R5cGVDaGVja2VyCit9OworCittb2R1bGUuZXhwb3J0cyA9
IFJlYWN0TGluazsKK30seyI1Ijo1fV0sMjE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9y
dHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxNS1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2Vk
IHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25h
bCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMg
ZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwor
dmFyIHdhcm5pbmcgPSBfZGVyZXFfKDQ5KTsKKworZnVuY3Rpb24gd2Fybk5vb3AocHVibGljSW5z
dGFuY2UsIGNhbGxlck5hbWUpIHsKKyAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9u
JykgeworICAgIHZhciBjb25zdHJ1Y3RvciA9IHB1YmxpY0luc3RhbmNlLmNvbnN0cnVjdG9yOwor
ICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICclcygu
Li4pOiBDYW4gb25seSB1cGRhdGUgYSBtb3VudGVkIG9yIG1vdW50aW5nIGNvbXBvbmVudC4gJyAr
ICdUaGlzIHVzdWFsbHkgbWVhbnMgeW91IGNhbGxlZCAlcygpIG9uIGFuIHVubW91bnRlZCBjb21w
b25lbnQuICcgKyAnVGhpcyBpcyBhIG5vLW9wLiBQbGVhc2UgY2hlY2sgdGhlIGNvZGUgZm9yIHRo
ZSAlcyBjb21wb25lbnQuJywgY2FsbGVyTmFtZSwgY2FsbGVyTmFtZSwgY29uc3RydWN0b3IgJiYg
KGNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8IGNvbnN0cnVjdG9yLm5hbWUpIHx8ICdSZWFjdENs
YXNzJykgOiB2b2lkIDA7CisgIH0KK30KKworLyoqCisgKiBUaGlzIGlzIHRoZSBhYnN0cmFjdCBB
UEkgZm9yIGFuIHVwZGF0ZSBxdWV1ZS4KKyAqLwordmFyIFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlID0g
eworCisgIC8qKgorICAgKiBDaGVja3Mgd2hldGhlciBvciBub3QgdGhpcyBjb21wb3NpdGUgY29t
cG9uZW50IGlzIG1vdW50ZWQuCisgICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFu
Y2UgVGhlIGluc3RhbmNlIHdlIHdhbnQgdG8gdGVzdC4KKyAgICogQHJldHVybiB7Ym9vbGVhbn0g
VHJ1ZSBpZiBtb3VudGVkLCBmYWxzZSBvdGhlcndpc2UuCisgICAqIEBwcm90ZWN0ZWQKKyAgICog
QGZpbmFsCisgICAqLworICBpc01vdW50ZWQ6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSkgewor
ICAgIHJldHVybiBmYWxzZTsKKyAgfSwKKworICAvKioKKyAgICogRW5xdWV1ZSBhIGNhbGxiYWNr
IHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhZnRlciBhbGwgdGhlIHBlbmRpbmcgdXBkYXRlcworICAg
KiBoYXZlIHByb2Nlc3NlZC4KKyAgICoKKyAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJ
bnN0YW5jZSBUaGUgaW5zdGFuY2UgdG8gdXNlIGFzIGB0aGlzYCBjb250ZXh0LgorICAgKiBAcGFy
YW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHN0YXRlIGlzIHVwZGF0ZWQuCisg
ICAqIEBpbnRlcm5hbAorICAgKi8KKyAgZW5xdWV1ZUNhbGxiYWNrOiBmdW5jdGlvbiAocHVibGlj
SW5zdGFuY2UsIGNhbGxiYWNrKSB7fSwKKworICAvKioKKyAgICogRm9yY2VzIGFuIHVwZGF0ZS4g
VGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aAorICAgKiBj
ZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2FjdGlvbi4KKyAgICoK
KyAgICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBk
ZWVwZXIgYXNwZWN0IG9mIHRoZQorICAgKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBi
dXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC4KKyAgICoKKyAgICogVGhpcyB3aWxsIG5vdCBp
bnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZQorICAgKiBg
Y29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLgorICAgKgorICAg
KiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNo
b3VsZCByZXJlbmRlci4KKyAgICogQGludGVybmFsCisgICAqLworICBlbnF1ZXVlRm9yY2VVcGRh
dGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSkgeworICAgIHdhcm5Ob29wKHB1YmxpY0luc3Rh
bmNlLCAnZm9yY2VVcGRhdGUnKTsKKyAgfSwKKworICAvKioKKyAgICogUmVwbGFjZXMgYWxsIG9m
IHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIG9yIGBzZXRTdGF0ZWAgdG8gbXV0YXRlIHN0YXRl
LgorICAgKiBZb3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBpbW11dGFibGUuCisgICAq
CisgICAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGB0aGlzLnN0YXRlYCB3aWxsIGJlIGlt
bWVkaWF0ZWx5IHVwZGF0ZWQsIHNvCisgICAqIGFjY2Vzc2luZyBgdGhpcy5zdGF0ZWAgYWZ0ZXIg
Y2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQgdmFsdWUuCisgICAqCisgICAq
IEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hv
dWxkIHJlcmVuZGVyLgorICAgKiBAcGFyYW0ge29iamVjdH0gY29tcGxldGVTdGF0ZSBOZXh0IHN0
YXRlLgorICAgKiBAaW50ZXJuYWwKKyAgICovCisgIGVucXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0
aW9uIChwdWJsaWNJbnN0YW5jZSwgY29tcGxldGVTdGF0ZSkgeworICAgIHdhcm5Ob29wKHB1Ymxp
Y0luc3RhbmNlLCAncmVwbGFjZVN0YXRlJyk7CisgIH0sCisKKyAgLyoqCisgICAqIFNldHMgYSBz
dWJzZXQgb2YgdGhlIHN0YXRlLiBUaGlzIG9ubHkgZXhpc3RzIGJlY2F1c2UgX3BlbmRpbmdTdGF0
ZSBpcworICAgKiBpbnRlcm5hbC4gVGhpcyBwcm92aWRlcyBhIG1lcmdpbmcgc3RyYXRlZ3kgdGhh
dCBpcyBub3QgYXZhaWxhYmxlIHRvIGRlZXAKKyAgICogcHJvcGVydGllcyB3aGljaCBpcyBjb25m
dXNpbmcuIFRPRE86IEV4cG9zZSBwZW5kaW5nU3RhdGUgb3IgZG9uJ3QgdXNlIGl0CisgICAqIGR1
cmluZyB0aGUgbWVyZ2UuCisgICAqCisgICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5z
dGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLgorICAgKiBAcGFyYW0ge29i
amVjdH0gcGFydGlhbFN0YXRlIE5leHQgcGFydGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBz
dGF0ZS4KKyAgICogQGludGVybmFsCisgICAqLworICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9u
IChwdWJsaWNJbnN0YW5jZSwgcGFydGlhbFN0YXRlKSB7CisgICAgd2Fybk5vb3AocHVibGljSW5z
dGFuY2UsICdzZXRTdGF0ZScpOworICB9Cit9OworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0Tm9v
cFVwZGF0ZVF1ZXVlOworfSx7IjQ5Ijo0OX1dLDIyOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxl
eHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4K
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNl
bnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0
aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRF
TlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqIAorICovCisKKyd1c2Ugc3Ry
aWN0JzsKKwordmFyIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0ge307CisKK2lmICgiZGV2
ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFt
ZXMgPSB7CisgICAgcHJvcDogJ3Byb3AnLAorICAgIGNvbnRleHQ6ICdjb250ZXh0JywKKyAgICBj
aGlsZENvbnRleHQ6ICdjaGlsZCBjb250ZXh0JworICB9OworfQorCittb2R1bGUuZXhwb3J0cyA9
IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzOworfSx7fV0sMjM6W2Z1bmN0aW9uKF9kZXJlcV8s
bW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9v
aywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2Rl
IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAq
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4g
QW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4g
dGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ug
c3RyaWN0JzsKKwordmFyIF9yZXF1aXJlID0gX2RlcmVxXygxNiksCisgICAgaXNWYWxpZEVsZW1l
bnQgPSBfcmVxdWlyZS5pc1ZhbGlkRWxlbWVudDsKKwordmFyIGZhY3RvcnkgPSBfZGVyZXFfKDUy
KTsKKworbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KGlzVmFsaWRFbGVtZW50KTsKK30seyIxNiI6
MTYsIjUyIjo1Mn1dLDI0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUg
QlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJv
b3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAq
IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhl
IHNhbWUgZGlyZWN0b3J5LgorICoKKyAqIAorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIFJl
YWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxM
X0JFX0ZJUkVEJzsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDsKK30s
e31dLDI1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJp
Z2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxl
IGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0
b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVu
dCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGly
ZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBfYXNzaWduID0gX2RlcmVx
Xyg1MCk7CisKK3ZhciBSZWFjdENvbXBvbmVudCA9IF9kZXJlcV8oMTEpOwordmFyIFJlYWN0Tm9v
cFVwZGF0ZVF1ZXVlID0gX2RlcmVxXygyMSk7CisKK3ZhciBlbXB0eU9iamVjdCA9IF9kZXJlcV8o
NDYpOworCisvKioKKyAqIEJhc2UgY2xhc3MgaGVscGVycyBmb3IgdGhlIHVwZGF0aW5nIHN0YXRl
IG9mIGEgY29tcG9uZW50LgorICovCitmdW5jdGlvbiBSZWFjdFB1cmVDb21wb25lbnQocHJvcHMs
IGNvbnRleHQsIHVwZGF0ZXIpIHsKKyAgLy8gRHVwbGljYXRlZCBmcm9tIFJlYWN0Q29tcG9uZW50
LgorICB0aGlzLnByb3BzID0gcHJvcHM7CisgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7CisgIHRo
aXMucmVmcyA9IGVtcHR5T2JqZWN0OworICAvLyBXZSBpbml0aWFsaXplIHRoZSBkZWZhdWx0IHVw
ZGF0ZXIgYnV0IHRoZSByZWFsIG9uZSBnZXRzIGluamVjdGVkIGJ5IHRoZQorICAvLyByZW5kZXJl
ci4KKyAgdGhpcy51cGRhdGVyID0gdXBkYXRlciB8fCBSZWFjdE5vb3BVcGRhdGVRdWV1ZTsKK30K
KworZnVuY3Rpb24gQ29tcG9uZW50RHVtbXkoKSB7fQorQ29tcG9uZW50RHVtbXkucHJvdG90eXBl
ID0gUmVhY3RDb21wb25lbnQucHJvdG90eXBlOworUmVhY3RQdXJlQ29tcG9uZW50LnByb3RvdHlw
ZSA9IG5ldyBDb21wb25lbnREdW1teSgpOworUmVhY3RQdXJlQ29tcG9uZW50LnByb3RvdHlwZS5j
b25zdHJ1Y3RvciA9IFJlYWN0UHVyZUNvbXBvbmVudDsKKy8vIEF2b2lkIGFuIGV4dHJhIHByb3Rv
dHlwZSBqdW1wIGZvciB0aGVzZSBtZXRob2RzLgorX2Fzc2lnbihSZWFjdFB1cmVDb21wb25lbnQu
cHJvdG90eXBlLCBSZWFjdENvbXBvbmVudC5wcm90b3R5cGUpOworUmVhY3RQdXJlQ29tcG9uZW50
LnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCA9IHRydWU7CisKK21vZHVsZS5leHBvcnRz
ID0gUmVhY3RQdXJlQ29tcG9uZW50OworfSx7IjExIjoxMSwiMjEiOjIxLCI0NiI6NDYsIjUwIjo1
MH1dLDI2OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJp
Z2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxl
IGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0
b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVu
dCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGly
ZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBSZWFjdFN0YXRlU2V0dGVy
cyA9IHsKKyAgLyoqCisgICAqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBwcm92
aWRlZCBmdW5jdGlvbiwgYW5kIHVzZXMgdGhlIHJlc3VsdAorICAgKiBvZiB0aGF0IHRvIHNldCB0
aGUgY29tcG9uZW50J3Mgc3RhdGUuCisgICAqCisgICAqIEBwYXJhbSB7UmVhY3RDb21wb3NpdGVD
b21wb25lbnR9IGNvbXBvbmVudAorICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmdW5jUmV0dXJuaW5n
U3RhdGUgUmV0dXJuZWQgY2FsbGJhY2sgdXNlcyB0aGlzIHRvCisgICAqICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmUgaG93IHRvIHVwZGF0ZSBzdGF0ZS4KKyAg
ICogQHJldHVybiB7ZnVuY3Rpb259IGNhbGxiYWNrIHRoYXQgd2hlbiBpbnZva2VkIHVzZXMgZnVu
Y1JldHVybmluZ1N0YXRlIHRvCisgICAqICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVkIHRo
ZSBvYmplY3QgbGl0ZXJhbCB0byBzZXRTdGF0ZS4KKyAgICovCisgIGNyZWF0ZVN0YXRlU2V0dGVy
OiBmdW5jdGlvbiAoY29tcG9uZW50LCBmdW5jUmV0dXJuaW5nU3RhdGUpIHsKKyAgICByZXR1cm4g
ZnVuY3Rpb24gKGEsIGIsIGMsIGQsIGUsIGYpIHsKKyAgICAgIHZhciBwYXJ0aWFsU3RhdGUgPSBm
dW5jUmV0dXJuaW5nU3RhdGUuY2FsbChjb21wb25lbnQsIGEsIGIsIGMsIGQsIGUsIGYpOworICAg
ICAgaWYgKHBhcnRpYWxTdGF0ZSkgeworICAgICAgICBjb21wb25lbnQuc2V0U3RhdGUocGFydGlh
bFN0YXRlKTsKKyAgICAgIH0KKyAgICB9OworICB9LAorCisgIC8qKgorICAgKiBSZXR1cm5zIGEg
c2luZ2xlLWFyZ3VtZW50IGNhbGxiYWNrIHRoYXQgY2FuIGJlIHVzZWQgdG8gdXBkYXRlIGEgc2lu
Z2xlCisgICAqIGtleSBpbiB0aGUgY29tcG9uZW50J3Mgc3RhdGUuCisgICAqCisgICAqIE5vdGU6
IHRoaXMgaXMgbWVtb2l6ZWQgZnVuY3Rpb24sIHdoaWNoIG1ha2VzIGl0IGluZXhwZW5zaXZlIHRv
IGNhbGwuCisgICAqCisgICAqIEBwYXJhbSB7UmVhY3RDb21wb3NpdGVDb21wb25lbnR9IGNvbXBv
bmVudAorICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgaW4gdGhlIHN0YXRlIHRoYXQg
eW91IHNob3VsZCB1cGRhdGUuCisgICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBjYWxsYmFjayBvZiAx
IGFyZ3VtZW50IHdoaWNoIGNhbGxzIHNldFN0YXRlKCkgd2l0aAorICAgKiAgICAgICAgICAgICAg
ICAgICAgdGhlIHByb3ZpZGVkIGtleU5hbWUgYW5kIGNhbGxiYWNrIGFyZ3VtZW50LgorICAgKi8K
KyAgY3JlYXRlU3RhdGVLZXlTZXR0ZXI6IGZ1bmN0aW9uIChjb21wb25lbnQsIGtleSkgeworICAg
IC8vIE1lbW9pemUgdGhlIHNldHRlcnMuCisgICAgdmFyIGNhY2hlID0gY29tcG9uZW50Ll9fa2V5
U2V0dGVycyB8fCAoY29tcG9uZW50Ll9fa2V5U2V0dGVycyA9IHt9KTsKKyAgICByZXR1cm4gY2Fj
aGVba2V5XSB8fCAoY2FjaGVba2V5XSA9IGNyZWF0ZVN0YXRlS2V5U2V0dGVyKGNvbXBvbmVudCwg
a2V5KSk7CisgIH0KK307CisKK2Z1bmN0aW9uIGNyZWF0ZVN0YXRlS2V5U2V0dGVyKGNvbXBvbmVu
dCwga2V5KSB7CisgIC8vIFBhcnRpYWwgc3RhdGUgaXMgYWxsb2NhdGVkIG91dHNpZGUgb2YgdGhl
IGZ1bmN0aW9uIGNsb3N1cmUgc28gaXQgY2FuIGJlCisgIC8vIHJldXNlZCB3aXRoIGV2ZXJ5IGNh
bGwsIGF2b2lkaW5nIG1lbW9yeSBhbGxvY2F0aW9uIHdoZW4gdGhpcyBmdW5jdGlvbgorICAvLyBp
cyBjYWxsZWQuCisgIHZhciBwYXJ0aWFsU3RhdGUgPSB7fTsKKyAgcmV0dXJuIGZ1bmN0aW9uIHN0
YXRlS2V5U2V0dGVyKHZhbHVlKSB7CisgICAgcGFydGlhbFN0YXRlW2tleV0gPSB2YWx1ZTsKKyAg
ICBjb21wb25lbnQuc2V0U3RhdGUocGFydGlhbFN0YXRlKTsKKyAgfTsKK30KKworUmVhY3RTdGF0
ZVNldHRlcnMuTWl4aW4gPSB7CisgIC8qKgorICAgKiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBj
YWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24sIGFuZCB1c2VzIHRoZSByZXN1bHQKKyAgICogb2Yg
dGhhdCB0byBzZXQgdGhlIGNvbXBvbmVudCdzIHN0YXRlLgorICAgKgorICAgKiBGb3IgZXhhbXBs
ZSwgdGhlc2Ugc3RhdGVtZW50cyBhcmUgZXF1aXZhbGVudDoKKyAgICoKKyAgICogICB0aGlzLnNl
dFN0YXRlKHt4OiAxfSk7CisgICAqICAgdGhpcy5jcmVhdGVTdGF0ZVNldHRlcihmdW5jdGlvbih4
VmFsdWUpIHsKKyAgICogICAgIHJldHVybiB7eDogeFZhbHVlfTsKKyAgICogICB9KSgxKTsKKyAg
ICoKKyAgICogQHBhcmFtIHtmdW5jdGlvbn0gZnVuY1JldHVybmluZ1N0YXRlIFJldHVybmVkIGNh
bGxiYWNrIHVzZXMgdGhpcyB0bworICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGV0ZXJtaW5lIGhvdyB0byB1cGRhdGUgc3RhdGUuCisgICAqIEByZXR1cm4ge2Z1bmN0
aW9ufSBjYWxsYmFjayB0aGF0IHdoZW4gaW52b2tlZCB1c2VzIGZ1bmNSZXR1cm5pbmdTdGF0ZSB0
bworICAgKiAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lZCB0aGUgb2JqZWN0IGxpdGVyYWwg
dG8gc2V0U3RhdGUuCisgICAqLworICBjcmVhdGVTdGF0ZVNldHRlcjogZnVuY3Rpb24gKGZ1bmNS
ZXR1cm5pbmdTdGF0ZSkgeworICAgIHJldHVybiBSZWFjdFN0YXRlU2V0dGVycy5jcmVhdGVTdGF0
ZVNldHRlcih0aGlzLCBmdW5jUmV0dXJuaW5nU3RhdGUpOworICB9LAorCisgIC8qKgorICAgKiBS
ZXR1cm5zIGEgc2luZ2xlLWFyZ3VtZW50IGNhbGxiYWNrIHRoYXQgY2FuIGJlIHVzZWQgdG8gdXBk
YXRlIGEgc2luZ2xlCisgICAqIGtleSBpbiB0aGUgY29tcG9uZW50J3Mgc3RhdGUuCisgICAqCisg
ICAqIEZvciBleGFtcGxlLCB0aGVzZSBzdGF0ZW1lbnRzIGFyZSBlcXVpdmFsZW50OgorICAgKgor
ICAgKiAgIHRoaXMuc2V0U3RhdGUoe3g6IDF9KTsKKyAgICogICB0aGlzLmNyZWF0ZVN0YXRlS2V5
U2V0dGVyKCd4JykoMSk7CisgICAqCisgICAqIE5vdGU6IHRoaXMgaXMgbWVtb2l6ZWQgZnVuY3Rp
b24sIHdoaWNoIG1ha2VzIGl0IGluZXhwZW5zaXZlIHRvIGNhbGwuCisgICAqCisgICAqIEBwYXJh
bSB7c3RyaW5nfSBrZXkgVGhlIGtleSBpbiB0aGUgc3RhdGUgdGhhdCB5b3Ugc2hvdWxkIHVwZGF0
ZS4KKyAgICogQHJldHVybiB7ZnVuY3Rpb259IGNhbGxiYWNrIG9mIDEgYXJndW1lbnQgd2hpY2gg
Y2FsbHMgc2V0U3RhdGUoKSB3aXRoCisgICAqICAgICAgICAgICAgICAgICAgICB0aGUgcHJvdmlk
ZWQga2V5TmFtZSBhbmQgY2FsbGJhY2sgYXJndW1lbnQuCisgICAqLworICBjcmVhdGVTdGF0ZUtl
eVNldHRlcjogZnVuY3Rpb24gKGtleSkgeworICAgIHJldHVybiBSZWFjdFN0YXRlU2V0dGVycy5j
cmVhdGVTdGF0ZUtleVNldHRlcih0aGlzLCBrZXkpOworICB9Cit9OworCittb2R1bGUuZXhwb3J0
cyA9IFJlYWN0U3RhdGVTZXR0ZXJzOworfSx7fV0sMjc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxl
LGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5j
LgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxp
Y2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VO
U0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRk
aXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBB
VEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0
JzsKKwordmFyIGZsYXR0ZW5DaGlsZHJlbiA9IF9kZXJlcV8oMzUpOworCit2YXIgUmVhY3RUcmFu
c2l0aW9uQ2hpbGRNYXBwaW5nID0geworICAvKioKKyAgICogR2l2ZW4gYHRoaXMucHJvcHMuY2hp
bGRyZW5gLCByZXR1cm4gYW4gb2JqZWN0IG1hcHBpbmcga2V5IHRvIGNoaWxkLiBKdXN0CisgICAq
IHNpbXBsZSBzeW50YWN0aWMgc3VnYXIgYXJvdW5kIGZsYXR0ZW5DaGlsZHJlbigpLgorICAgKgor
ICAgKiBAcGFyYW0geyp9IGNoaWxkcmVuIGB0aGlzLnByb3BzLmNoaWxkcmVuYAorICAgKiBAcGFy
YW0ge251bWJlcj19IHNlbGZEZWJ1Z0lEIE9wdGlvbmFsIGRlYnVnSUQgb2YgdGhlIGN1cnJlbnQg
aW50ZXJuYWwgaW5zdGFuY2UuCisgICAqIEByZXR1cm4ge29iamVjdH0gTWFwcGluZyBvZiBrZXkg
dG8gY2hpbGQKKyAgICovCisgIGdldENoaWxkTWFwcGluZzogZnVuY3Rpb24gKGNoaWxkcmVuLCBz
ZWxmRGVidWdJRCkgeworICAgIGlmICghY2hpbGRyZW4pIHsKKyAgICAgIHJldHVybiBjaGlsZHJl
bjsKKyAgICB9CisKKyAgICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7Cisg
ICAgICByZXR1cm4gZmxhdHRlbkNoaWxkcmVuKGNoaWxkcmVuLCBzZWxmRGVidWdJRCk7CisgICAg
fQorCisgICAgcmV0dXJuIGZsYXR0ZW5DaGlsZHJlbihjaGlsZHJlbik7CisgIH0sCisKKyAgLyoq
CisgICAqIFdoZW4geW91J3JlIGFkZGluZyBvciByZW1vdmluZyBjaGlsZHJlbiBzb21lIG1heSBi
ZSBhZGRlZCBvciByZW1vdmVkIGluIHRoZQorICAgKiBzYW1lIHJlbmRlciBwYXNzLiBXZSB3YW50
IHRvIHNob3cgKmJvdGgqIHNpbmNlIHdlIHdhbnQgdG8gc2ltdWx0YW5lb3VzbHkKKyAgICogYW5p
bWF0ZSBlbGVtZW50cyBpbiBhbmQgb3V0LiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgcHJldmlvdXMg
c2V0IG9mIGtleXMKKyAgICogYW5kIGEgbmV3IHNldCBvZiBrZXlzIGFuZCBtZXJnZXMgdGhlbSB3
aXRoIGl0cyBiZXN0IGd1ZXNzIG9mIHRoZSBjb3JyZWN0CisgICAqIG9yZGVyaW5nLiBJbiB0aGUg
ZnV0dXJlIHdlIG1heSBleHBvc2Ugc29tZSBvZiB0aGUgdXRpbGl0aWVzIGluCisgICAqIFJlYWN0
TXVsdGlDaGlsZCB0byBtYWtlIHRoaXMgZWFzeSwgYnV0IGZvciBub3cgUmVhY3QgaXRzZWxmIGRv
ZXMgbm90CisgICAqIGRpcmVjdGx5IGhhdmUgdGhpcyBjb25jZXB0IG9mIHRoZSB1bmlvbiBvZiBw
cmV2Q2hpbGRyZW4gYW5kIG5leHRDaGlsZHJlbgorICAgKiBzbyB3ZSBpbXBsZW1lbnQgaXQgaGVy
ZS4KKyAgICoKKyAgICogQHBhcmFtIHtvYmplY3R9IHByZXYgcHJldiBjaGlsZHJlbiBhcyByZXR1
cm5lZCBmcm9tCisgICAqIGBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBw
aW5nKClgLgorICAgKiBAcGFyYW0ge29iamVjdH0gbmV4dCBuZXh0IGNoaWxkcmVuIGFzIHJldHVy
bmVkIGZyb20KKyAgICogYFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBp
bmcoKWAuCisgICAqIEByZXR1cm4ge29iamVjdH0gYSBrZXkgc2V0IHRoYXQgY29udGFpbnMgYWxs
IGtleXMgaW4gYHByZXZgIGFuZCBhbGwga2V5cworICAgKiBpbiBgbmV4dGAgaW4gYSByZWFzb25h
YmxlIG9yZGVyLgorICAgKi8KKyAgbWVyZ2VDaGlsZE1hcHBpbmdzOiBmdW5jdGlvbiAocHJldiwg
bmV4dCkgeworICAgIHByZXYgPSBwcmV2IHx8IHt9OworICAgIG5leHQgPSBuZXh0IHx8IHt9Owor
CisgICAgZnVuY3Rpb24gZ2V0VmFsdWVGb3JLZXkoa2V5KSB7CisgICAgICBpZiAobmV4dC5oYXNP
d25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAgIHJldHVybiBuZXh0W2tleV07CisgICAgICB9IGVs
c2UgeworICAgICAgICByZXR1cm4gcHJldltrZXldOworICAgICAgfQorICAgIH0KKworICAgIC8v
IEZvciBlYWNoIGtleSBvZiBgbmV4dGAsIHRoZSBsaXN0IG9mIGtleXMgdG8gaW5zZXJ0IGJlZm9y
ZSB0aGF0IGtleSBpbgorICAgIC8vIHRoZSBjb21iaW5lZCBsaXN0CisgICAgdmFyIG5leHRLZXlz
UGVuZGluZyA9IHt9OworCisgICAgdmFyIHBlbmRpbmdLZXlzID0gW107CisgICAgZm9yICh2YXIg
cHJldktleSBpbiBwcmV2KSB7CisgICAgICBpZiAobmV4dC5oYXNPd25Qcm9wZXJ0eShwcmV2S2V5
KSkgeworICAgICAgICBpZiAocGVuZGluZ0tleXMubGVuZ3RoKSB7CisgICAgICAgICAgbmV4dEtl
eXNQZW5kaW5nW3ByZXZLZXldID0gcGVuZGluZ0tleXM7CisgICAgICAgICAgcGVuZGluZ0tleXMg
PSBbXTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgcGVuZGluZ0tleXMucHVz
aChwcmV2S2V5KTsKKyAgICAgIH0KKyAgICB9CisKKyAgICB2YXIgaTsKKyAgICB2YXIgY2hpbGRN
YXBwaW5nID0ge307CisgICAgZm9yICh2YXIgbmV4dEtleSBpbiBuZXh0KSB7CisgICAgICBpZiAo
bmV4dEtleXNQZW5kaW5nLmhhc093blByb3BlcnR5KG5leHRLZXkpKSB7CisgICAgICAgIGZvciAo
aSA9IDA7IGkgPCBuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV0ubGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgICB2YXIgcGVuZGluZ05leHRLZXkgPSBuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV1baV07Cisg
ICAgICAgICAgY2hpbGRNYXBwaW5nW25leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXV0gPSBnZXRW
YWx1ZUZvcktleShwZW5kaW5nTmV4dEtleSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGNo
aWxkTWFwcGluZ1tuZXh0S2V5XSA9IGdldFZhbHVlRm9yS2V5KG5leHRLZXkpOworICAgIH0KKwor
ICAgIC8vIEZpbmFsbHksIGFkZCB0aGUga2V5cyB3aGljaCBkaWRuJ3QgYXBwZWFyIGJlZm9yZSBh
bnkga2V5IGluIGBuZXh0YAorICAgIGZvciAoaSA9IDA7IGkgPCBwZW5kaW5nS2V5cy5sZW5ndGg7
IGkrKykgeworICAgICAgY2hpbGRNYXBwaW5nW3BlbmRpbmdLZXlzW2ldXSA9IGdldFZhbHVlRm9y
S2V5KHBlbmRpbmdLZXlzW2ldKTsKKyAgICB9CisKKyAgICByZXR1cm4gY2hpbGRNYXBwaW5nOwor
ICB9Cit9OworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZzsK
K30seyIzNSI6MzV9XSwyODpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioK
KyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhl
IEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50Cisg
KiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRo
ZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgRXhlY3V0
aW9uRW52aXJvbm1lbnQgPSBfZGVyZXFfKDQ0KTsKKwordmFyIGdldFZlbmRvclByZWZpeGVkRXZl
bnROYW1lID0gX2RlcmVxXygxKTsKKwordmFyIGVuZEV2ZW50cyA9IFtdOworCitmdW5jdGlvbiBk
ZXRlY3RFdmVudHMoKSB7CisgIHZhciBhbmltRW5kID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5h
bWUoJ2FuaW1hdGlvbmVuZCcpOworICB2YXIgdHJhbnNFbmQgPSBnZXRWZW5kb3JQcmVmaXhlZEV2
ZW50TmFtZSgndHJhbnNpdGlvbmVuZCcpOworCisgIGlmIChhbmltRW5kKSB7CisgICAgZW5kRXZl
bnRzLnB1c2goYW5pbUVuZCk7CisgIH0KKworICBpZiAodHJhbnNFbmQpIHsKKyAgICBlbmRFdmVu
dHMucHVzaCh0cmFuc0VuZCk7CisgIH0KK30KKworaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNh
blVzZURPTSkgeworICBkZXRlY3RFdmVudHMoKTsKK30KKworLy8gV2UgdXNlIHRoZSByYXcge2Fk
ZHxyZW1vdmV9RXZlbnRMaXN0ZW5lcigpIGNhbGwgYmVjYXVzZSBFdmVudExpc3RlbmVyCisvLyBk
b2VzIG5vdCBrbm93IGhvdyB0byByZW1vdmUgZXZlbnQgbGlzdGVuZXJzIGFuZCB3ZSByZWFsbHkg
c2hvdWxkCisvLyBjbGVhbiB1cC4gQWxzbywgdGhlc2UgZXZlbnRzIGFyZSBub3QgdHJpZ2dlcmVk
IGluIG9sZGVyIGJyb3dzZXJzCisvLyBzbyB3ZSBzaG91bGQgYmUgQS1PSyBoZXJlLgorCitmdW5j
dGlvbiBhZGRFdmVudExpc3RlbmVyKG5vZGUsIGV2ZW50TmFtZSwgZXZlbnRMaXN0ZW5lcikgewor
ICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBldmVudExpc3RlbmVyLCBmYWxzZSk7
Cit9CisKK2Z1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIobm9kZSwgZXZlbnROYW1lLCBldmVu
dExpc3RlbmVyKSB7CisgIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGV2ZW50
TGlzdGVuZXIsIGZhbHNlKTsKK30KKwordmFyIFJlYWN0VHJhbnNpdGlvbkV2ZW50cyA9IHsKKyAg
YWRkRW5kRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gKG5vZGUsIGV2ZW50TGlzdGVuZXIpIHsKKyAg
ICBpZiAoZW5kRXZlbnRzLmxlbmd0aCA9PT0gMCkgeworICAgICAgLy8gSWYgQ1NTIHRyYW5zaXRp
b25zIGFyZSBub3Qgc3VwcG9ydGVkLCB0cmlnZ2VyIGFuICJlbmQgYW5pbWF0aW9uIgorICAgICAg
Ly8gZXZlbnQgaW1tZWRpYXRlbHkuCisgICAgICB3aW5kb3cuc2V0VGltZW91dChldmVudExpc3Rl
bmVyLCAwKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgZW5kRXZlbnRzLmZvckVhY2goZnVu
Y3Rpb24gKGVuZEV2ZW50KSB7CisgICAgICBhZGRFdmVudExpc3RlbmVyKG5vZGUsIGVuZEV2ZW50
LCBldmVudExpc3RlbmVyKTsKKyAgICB9KTsKKyAgfSwKKworICByZW1vdmVFbmRFdmVudExpc3Rl
bmVyOiBmdW5jdGlvbiAobm9kZSwgZXZlbnRMaXN0ZW5lcikgeworICAgIGlmIChlbmRFdmVudHMu
bGVuZ3RoID09PSAwKSB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGVuZEV2ZW50cy5mb3JF
YWNoKGZ1bmN0aW9uIChlbmRFdmVudCkgeworICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihub2Rl
LCBlbmRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgfSk7CisgIH0KK307CisKK21vZHVsZS5l
eHBvcnRzID0gUmVhY3RUcmFuc2l0aW9uRXZlbnRzOworfSx7IjEiOjEsIjQ0Ijo0NH1dLDI5Oltm
dW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMt
cHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2Ug
Zm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRo
aXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMg
Y2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5Lgor
ICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBfYXNzaWduID0gX2RlcmVxXyg1MCk7CisK
K2Z1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEo
aW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigi
Q2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIik7IH0gfQorCitmdW5jdGlvbiBfcG9z
c2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBu
ZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigp
IGhhc24ndCBiZWVuIGNhbGxlZCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0g
Im9iamVjdCIgfHwgdHlwZW9mIGNhbGwgPT09ICJmdW5jdGlvbiIpID8gY2FsbCA6IHNlbGY7IH0K
KworZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Yg
c3VwZXJDbGFzcyAhPT0gImZ1bmN0aW9uIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93
IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBh
IGZ1bmN0aW9uLCBub3QgIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5
cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsg
Y29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFi
bGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0
LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNs
YXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH0KKwordmFyIFJlYWN0ID0g
X2RlcmVxXyg1KTsKK3ZhciBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcgPSBfZGVyZXFfKDI3
KTsKKwordmFyIHByb3BUeXBlc0ZhY3RvcnkgPSBfZGVyZXFfKDUyKTsKK3ZhciBQcm9wVHlwZXMg
PSBwcm9wVHlwZXNGYWN0b3J5KFJlYWN0LmlzVmFsaWRFbGVtZW50KTsKKwordmFyIGVtcHR5RnVu
Y3Rpb24gPSBfZGVyZXFfKDQ1KTsKKworLyoqCisgKiBBIGJhc2lzIGZvciBhbmltYXRpb25zLiBX
aGVuIGNoaWxkcmVuIGFyZSBkZWNsYXJhdGl2ZWx5IGFkZGVkIG9yIHJlbW92ZWQsCisgKiBzcGVj
aWFsIGxpZmVjeWNsZSBob29rcyBhcmUgY2FsbGVkLgorICogU2VlIGh0dHBzOi8vZmFjZWJvb2su
Z2l0aHViLmlvL3JlYWN0L2RvY3MvYW5pbWF0aW9uLmh0bWwjbG93LWxldmVsLWFwaS1yZWFjdHRy
YW5zaXRpb25ncm91cAorICovCisKK3ZhciBSZWFjdFRyYW5zaXRpb25Hcm91cCA9IGZ1bmN0aW9u
IChfUmVhY3QkQ29tcG9uZW50KSB7CisgIF9pbmhlcml0cyhSZWFjdFRyYW5zaXRpb25Hcm91cCwg
X1JlYWN0JENvbXBvbmVudCk7CisKKyAgZnVuY3Rpb24gUmVhY3RUcmFuc2l0aW9uR3JvdXAoKSB7
CisgICAgdmFyIF90ZW1wLCBfdGhpcywgX3JldDsKKworICAgIF9jbGFzc0NhbGxDaGVjayh0aGlz
LCBSZWFjdFRyYW5zaXRpb25Hcm91cCk7CisKKyAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRz
Lmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkr
KykgeworICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJu
KHRoaXMsIF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhp
c10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuc3RhdGUgPSB7CisgICAgICAvLyBUT0RP
OiBjYW4gd2UgZ2V0IHVzZWZ1bCBkZWJ1ZyBpbmZvcm1hdGlvbiB0byBzaG93IGF0IHRoaXMgcG9p
bnQ/CisgICAgICBjaGlsZHJlbjogUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxk
TWFwcGluZyhfdGhpcy5wcm9wcy5jaGlsZHJlbikKKyAgICB9LCBfdGhpcy5wZXJmb3JtQXBwZWFy
ID0gZnVuY3Rpb24gKGtleSkgeworICAgICAgX3RoaXMuY3VycmVudGx5VHJhbnNpdGlvbmluZ0tl
eXNba2V5XSA9IHRydWU7CisKKyAgICAgIHZhciBjb21wb25lbnQgPSBfdGhpcy5yZWZzW2tleV07
CisKKyAgICAgIGlmIChjb21wb25lbnQuY29tcG9uZW50V2lsbEFwcGVhcikgeworICAgICAgICBj
b21wb25lbnQuY29tcG9uZW50V2lsbEFwcGVhcihfdGhpcy5faGFuZGxlRG9uZUFwcGVhcmluZy5i
aW5kKF90aGlzLCBrZXkpKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIF90aGlzLl9oYW5kbGVE
b25lQXBwZWFyaW5nKGtleSk7CisgICAgICB9CisgICAgfSwgX3RoaXMuX2hhbmRsZURvbmVBcHBl
YXJpbmcgPSBmdW5jdGlvbiAoa2V5KSB7CisgICAgICB2YXIgY29tcG9uZW50ID0gX3RoaXMucmVm
c1trZXldOworICAgICAgaWYgKGNvbXBvbmVudC5jb21wb25lbnREaWRBcHBlYXIpIHsKKyAgICAg
ICAgY29tcG9uZW50LmNvbXBvbmVudERpZEFwcGVhcigpOworICAgICAgfQorCisgICAgICBkZWxl
dGUgX3RoaXMuY3VycmVudGx5VHJhbnNpdGlvbmluZ0tleXNba2V5XTsKKworICAgICAgdmFyIGN1
cnJlbnRDaGlsZE1hcHBpbmcgPSBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRN
YXBwaW5nKF90aGlzLnByb3BzLmNoaWxkcmVuKTsKKworICAgICAgaWYgKCFjdXJyZW50Q2hpbGRN
YXBwaW5nIHx8ICFjdXJyZW50Q2hpbGRNYXBwaW5nLmhhc093blByb3BlcnR5KGtleSkpIHsKKyAg
ICAgICAgLy8gVGhpcyB3YXMgcmVtb3ZlZCBiZWZvcmUgaXQgaGFkIGZ1bGx5IGFwcGVhcmVkLiBS
ZW1vdmUgaXQuCisgICAgICAgIF90aGlzLnBlcmZvcm1MZWF2ZShrZXkpOworICAgICAgfQorICAg
IH0sIF90aGlzLnBlcmZvcm1FbnRlciA9IGZ1bmN0aW9uIChrZXkpIHsKKyAgICAgIF90aGlzLmN1
cnJlbnRseVRyYW5zaXRpb25pbmdLZXlzW2tleV0gPSB0cnVlOworCisgICAgICB2YXIgY29tcG9u
ZW50ID0gX3RoaXMucmVmc1trZXldOworCisgICAgICBpZiAoY29tcG9uZW50LmNvbXBvbmVudFdp
bGxFbnRlcikgeworICAgICAgICBjb21wb25lbnQuY29tcG9uZW50V2lsbEVudGVyKF90aGlzLl9o
YW5kbGVEb25lRW50ZXJpbmcuYmluZChfdGhpcywga2V5KSk7CisgICAgICB9IGVsc2UgeworICAg
ICAgICBfdGhpcy5faGFuZGxlRG9uZUVudGVyaW5nKGtleSk7CisgICAgICB9CisgICAgfSwgX3Ro
aXMuX2hhbmRsZURvbmVFbnRlcmluZyA9IGZ1bmN0aW9uIChrZXkpIHsKKyAgICAgIHZhciBjb21w
b25lbnQgPSBfdGhpcy5yZWZzW2tleV07CisgICAgICBpZiAoY29tcG9uZW50LmNvbXBvbmVudERp
ZEVudGVyKSB7CisgICAgICAgIGNvbXBvbmVudC5jb21wb25lbnREaWRFbnRlcigpOworICAgICAg
fQorCisgICAgICBkZWxldGUgX3RoaXMuY3VycmVudGx5VHJhbnNpdGlvbmluZ0tleXNba2V5XTsK
KworICAgICAgdmFyIGN1cnJlbnRDaGlsZE1hcHBpbmcgPSBSZWFjdFRyYW5zaXRpb25DaGlsZE1h
cHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKF90aGlzLnByb3BzLmNoaWxkcmVuKTsKKworICAgICAgaWYg
KCFjdXJyZW50Q2hpbGRNYXBwaW5nIHx8ICFjdXJyZW50Q2hpbGRNYXBwaW5nLmhhc093blByb3Bl
cnR5KGtleSkpIHsKKyAgICAgICAgLy8gVGhpcyB3YXMgcmVtb3ZlZCBiZWZvcmUgaXQgaGFkIGZ1
bGx5IGVudGVyZWQuIFJlbW92ZSBpdC4KKyAgICAgICAgX3RoaXMucGVyZm9ybUxlYXZlKGtleSk7
CisgICAgICB9CisgICAgfSwgX3RoaXMucGVyZm9ybUxlYXZlID0gZnVuY3Rpb24gKGtleSkgewor
ICAgICAgX3RoaXMuY3VycmVudGx5VHJhbnNpdGlvbmluZ0tleXNba2V5XSA9IHRydWU7CisKKyAg
ICAgIHZhciBjb21wb25lbnQgPSBfdGhpcy5yZWZzW2tleV07CisgICAgICBpZiAoY29tcG9uZW50
LmNvbXBvbmVudFdpbGxMZWF2ZSkgeworICAgICAgICBjb21wb25lbnQuY29tcG9uZW50V2lsbExl
YXZlKF90aGlzLl9oYW5kbGVEb25lTGVhdmluZy5iaW5kKF90aGlzLCBrZXkpKTsKKyAgICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzIHNvbWV3aGF0IGRhbmdlcm91cyBi
L2MgaXQgY2FsbHMgc2V0U3RhdGUoKQorICAgICAgICAvLyBhZ2FpbiwgZWZmZWN0aXZlbHkgbXV0
YXRpbmcgdGhlIGNvbXBvbmVudCBiZWZvcmUgYWxsIHRoZSB3b3JrCisgICAgICAgIC8vIGlzIGRv
bmUuCisgICAgICAgIF90aGlzLl9oYW5kbGVEb25lTGVhdmluZyhrZXkpOworICAgICAgfQorICAg
IH0sIF90aGlzLl9oYW5kbGVEb25lTGVhdmluZyA9IGZ1bmN0aW9uIChrZXkpIHsKKyAgICAgIHZh
ciBjb21wb25lbnQgPSBfdGhpcy5yZWZzW2tleV07CisKKyAgICAgIGlmIChjb21wb25lbnQuY29t
cG9uZW50RGlkTGVhdmUpIHsKKyAgICAgICAgY29tcG9uZW50LmNvbXBvbmVudERpZExlYXZlKCk7
CisgICAgICB9CisKKyAgICAgIGRlbGV0ZSBfdGhpcy5jdXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5
c1trZXldOworCisgICAgICB2YXIgY3VycmVudENoaWxkTWFwcGluZyA9IFJlYWN0VHJhbnNpdGlv
bkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoX3RoaXMucHJvcHMuY2hpbGRyZW4pOworCisg
ICAgICBpZiAoY3VycmVudENoaWxkTWFwcGluZyAmJiBjdXJyZW50Q2hpbGRNYXBwaW5nLmhhc093
blByb3BlcnR5KGtleSkpIHsKKyAgICAgICAgLy8gVGhpcyBlbnRlcmVkIGFnYWluIGJlZm9yZSBp
dCBmdWxseSBsZWZ0LiBBZGQgaXQgYWdhaW4uCisgICAgICAgIF90aGlzLnBlcmZvcm1FbnRlcihr
ZXkpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHN0
YXRlKSB7CisgICAgICAgICAgdmFyIG5ld0NoaWxkcmVuID0gX2Fzc2lnbih7fSwgc3RhdGUuY2hp
bGRyZW4pOworICAgICAgICAgIGRlbGV0ZSBuZXdDaGlsZHJlbltrZXldOworICAgICAgICAgIHJl
dHVybiB7IGNoaWxkcmVuOiBuZXdDaGlsZHJlbiB9OworICAgICAgICB9KTsKKyAgICAgIH0KKyAg
ICB9LCBfdGVtcCksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzLCBfcmV0KTsKKyAg
fQorCisgIFJlYWN0VHJhbnNpdGlvbkdyb3VwLnByb3RvdHlwZS5jb21wb25lbnRXaWxsTW91bnQg
PSBmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKSB7CisgICAgdGhpcy5jdXJyZW50bHlUcmFu
c2l0aW9uaW5nS2V5cyA9IHt9OworICAgIHRoaXMua2V5c1RvRW50ZXIgPSBbXTsKKyAgICB0aGlz
LmtleXNUb0xlYXZlID0gW107CisgIH07CisKKyAgUmVhY3RUcmFuc2l0aW9uR3JvdXAucHJvdG90
eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7Cisg
ICAgdmFyIGluaXRpYWxDaGlsZE1hcHBpbmcgPSB0aGlzLnN0YXRlLmNoaWxkcmVuOworICAgIGZv
ciAodmFyIGtleSBpbiBpbml0aWFsQ2hpbGRNYXBwaW5nKSB7CisgICAgICBpZiAoaW5pdGlhbENo
aWxkTWFwcGluZ1trZXldKSB7CisgICAgICAgIHRoaXMucGVyZm9ybUFwcGVhcihrZXkpOworICAg
ICAgfQorICAgIH0KKyAgfTsKKworICBSZWFjdFRyYW5zaXRpb25Hcm91cC5wcm90b3R5cGUuY29t
cG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJv
cHMobmV4dFByb3BzKSB7CisgICAgdmFyIG5leHRDaGlsZE1hcHBpbmcgPSBSZWFjdFRyYW5zaXRp
b25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcy5jaGlsZHJlbik7CisgICAg
dmFyIHByZXZDaGlsZE1hcHBpbmcgPSB0aGlzLnN0YXRlLmNoaWxkcmVuOworCisgICAgdGhpcy5z
ZXRTdGF0ZSh7CisgICAgICBjaGlsZHJlbjogUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLm1l
cmdlQ2hpbGRNYXBwaW5ncyhwcmV2Q2hpbGRNYXBwaW5nLCBuZXh0Q2hpbGRNYXBwaW5nKQorICAg
IH0pOworCisgICAgdmFyIGtleTsKKworICAgIGZvciAoa2V5IGluIG5leHRDaGlsZE1hcHBpbmcp
IHsKKyAgICAgIHZhciBoYXNQcmV2ID0gcHJldkNoaWxkTWFwcGluZyAmJiBwcmV2Q2hpbGRNYXBw
aW5nLmhhc093blByb3BlcnR5KGtleSk7CisgICAgICBpZiAobmV4dENoaWxkTWFwcGluZ1trZXld
ICYmICFoYXNQcmV2ICYmICF0aGlzLmN1cnJlbnRseVRyYW5zaXRpb25pbmdLZXlzW2tleV0pIHsK
KyAgICAgICAgdGhpcy5rZXlzVG9FbnRlci5wdXNoKGtleSk7CisgICAgICB9CisgICAgfQorCisg
ICAgZm9yIChrZXkgaW4gcHJldkNoaWxkTWFwcGluZykgeworICAgICAgdmFyIGhhc05leHQgPSBu
ZXh0Q2hpbGRNYXBwaW5nICYmIG5leHRDaGlsZE1hcHBpbmcuaGFzT3duUHJvcGVydHkoa2V5KTsK
KyAgICAgIGlmIChwcmV2Q2hpbGRNYXBwaW5nW2tleV0gJiYgIWhhc05leHQgJiYgIXRoaXMuY3Vy
cmVudGx5VHJhbnNpdGlvbmluZ0tleXNba2V5XSkgeworICAgICAgICB0aGlzLmtleXNUb0xlYXZl
LnB1c2goa2V5KTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBJZiB3ZSB3YW50IHRvIHNvbWVk
YXkgY2hlY2sgZm9yIHJlb3JkZXJpbmcsIHdlIGNvdWxkIGRvIGl0IGhlcmUuCisgIH07CisKKyAg
UmVhY3RUcmFuc2l0aW9uR3JvdXAucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0
aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHsKKyAgICB2YXIga2V5c1RvRW50ZXIgPSB0aGlzLmtl
eXNUb0VudGVyOworICAgIHRoaXMua2V5c1RvRW50ZXIgPSBbXTsKKyAgICBrZXlzVG9FbnRlci5m
b3JFYWNoKHRoaXMucGVyZm9ybUVudGVyKTsKKworICAgIHZhciBrZXlzVG9MZWF2ZSA9IHRoaXMu
a2V5c1RvTGVhdmU7CisgICAgdGhpcy5rZXlzVG9MZWF2ZSA9IFtdOworICAgIGtleXNUb0xlYXZl
LmZvckVhY2godGhpcy5wZXJmb3JtTGVhdmUpOworICB9OworCisgIFJlYWN0VHJhbnNpdGlvbkdy
b3VwLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7CisgICAgLy8gVE9ETzog
d2UgY291bGQgZ2V0IHJpZCBvZiB0aGUgbmVlZCBmb3IgdGhlIHdyYXBwZXIgbm9kZQorICAgIC8v
IGJ5IGNsb25pbmcgYSBzaW5nbGUgY2hpbGQKKyAgICB2YXIgY2hpbGRyZW5Ub1JlbmRlciA9IFtd
OworICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnN0YXRlLmNoaWxkcmVuKSB7CisgICAgICB2YXIg
Y2hpbGQgPSB0aGlzLnN0YXRlLmNoaWxkcmVuW2tleV07CisgICAgICBpZiAoY2hpbGQpIHsKKyAg
ICAgICAgLy8gWW91IG1heSBuZWVkIHRvIGFwcGx5IHJlYWN0aXZlIHVwZGF0ZXMgdG8gYSBjaGls
ZCBhcyBpdCBpcyBsZWF2aW5nLgorICAgICAgICAvLyBUaGUgbm9ybWFsIFJlYWN0IHdheSB0byBk
byBpdCB3b24ndCB3b3JrIHNpbmNlIHRoZSBjaGlsZCB3aWxsIGhhdmUKKyAgICAgICAgLy8gYWxy
ZWFkeSBiZWVuIHJlbW92ZWQuIEluIGNhc2UgeW91IG5lZWQgdGhpcyBiZWhhdmlvciB5b3UgY2Fu
IHByb3ZpZGUKKyAgICAgICAgLy8gYSBjaGlsZEZhY3RvcnkgZnVuY3Rpb24gdG8gd3JhcCBldmVy
eSBjaGlsZCwgZXZlbiB0aGUgb25lcyB0aGF0IGFyZQorICAgICAgICAvLyBsZWF2aW5nLgorICAg
ICAgICBjaGlsZHJlblRvUmVuZGVyLnB1c2goUmVhY3QuY2xvbmVFbGVtZW50KHRoaXMucHJvcHMu
Y2hpbGRGYWN0b3J5KGNoaWxkKSwgeyByZWY6IGtleSwga2V5OiBrZXkgfSkpOworICAgICAgfQor
ICAgIH0KKworICAgIC8vIERvIG5vdCBmb3J3YXJkIFJlYWN0VHJhbnNpdGlvbkdyb3VwIHByb3Bz
IHRvIHByaW1pdGl2ZSBET00gbm9kZXMKKyAgICB2YXIgcHJvcHMgPSBfYXNzaWduKHt9LCB0aGlz
LnByb3BzKTsKKyAgICBkZWxldGUgcHJvcHMudHJhbnNpdGlvbkxlYXZlOworICAgIGRlbGV0ZSBw
cm9wcy50cmFuc2l0aW9uTmFtZTsKKyAgICBkZWxldGUgcHJvcHMudHJhbnNpdGlvbkFwcGVhcjsK
KyAgICBkZWxldGUgcHJvcHMudHJhbnNpdGlvbkVudGVyOworICAgIGRlbGV0ZSBwcm9wcy5jaGls
ZEZhY3Rvcnk7CisgICAgZGVsZXRlIHByb3BzLnRyYW5zaXRpb25MZWF2ZVRpbWVvdXQ7CisgICAg
ZGVsZXRlIHByb3BzLnRyYW5zaXRpb25FbnRlclRpbWVvdXQ7CisgICAgZGVsZXRlIHByb3BzLnRy
YW5zaXRpb25BcHBlYXJUaW1lb3V0OworICAgIGRlbGV0ZSBwcm9wcy5jb21wb25lbnQ7CisKKyAg
ICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCh0aGlzLnByb3BzLmNvbXBvbmVudCwgcHJvcHMs
IGNoaWxkcmVuVG9SZW5kZXIpOworICB9OworCisgIHJldHVybiBSZWFjdFRyYW5zaXRpb25Hcm91
cDsKK30oUmVhY3QuQ29tcG9uZW50KTsKKworUmVhY3RUcmFuc2l0aW9uR3JvdXAuZGlzcGxheU5h
bWUgPSAnUmVhY3RUcmFuc2l0aW9uR3JvdXAnOworUmVhY3RUcmFuc2l0aW9uR3JvdXAucHJvcFR5
cGVzID0geworICBjb21wb25lbnQ6IFByb3BUeXBlcy5hbnksCisgIGNoaWxkRmFjdG9yeTogUHJv
cFR5cGVzLmZ1bmMKK307CitSZWFjdFRyYW5zaXRpb25Hcm91cC5kZWZhdWx0UHJvcHMgPSB7Cisg
IGNvbXBvbmVudDogJ3NwYW4nLAorICBjaGlsZEZhY3Rvcnk6IGVtcHR5RnVuY3Rpb24udGhhdFJl
dHVybnNBcmd1bWVudAorfTsKKworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0VHJhbnNpdGlvbkdy
b3VwOworfSx7IjI3IjoyNywiNDUiOjQ1LCI1Ijo1LCI1MCI6NTAsIjUyIjo1Mn1dLDMwOltmdW5j
dGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJl
c2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91
bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMg
c291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2Fu
IGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoK
KyAqLworCisndXNlIHN0cmljdCc7CisKK21vZHVsZS5leHBvcnRzID0gJzE1LjUuNCc7Cit9LHt9
XSwzMTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdo
dCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBs
aWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9y
eSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQg
cmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVj
dG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgTGlua2VkU3RhdGVNaXhpbiA9
IF9kZXJlcV8oMyk7Cit2YXIgUmVhY3QgPSBfZGVyZXFfKDUpOwordmFyIFJlYWN0QWRkb25zRE9N
RGVwZW5kZW5jaWVzID0gX2RlcmVxXyg2KTsKK3ZhciBSZWFjdENvbXBvbmVudFdpdGhQdXJlUmVu
ZGVyTWl4aW4gPSBfZGVyZXFfKDEzKTsKK3ZhciBSZWFjdENTU1RyYW5zaXRpb25Hcm91cCA9IF9k
ZXJlcV8oNyk7Cit2YXIgUmVhY3RGcmFnbWVudCA9IF9kZXJlcV8oMTkpOwordmFyIFJlYWN0VHJh
bnNpdGlvbkdyb3VwID0gX2RlcmVxXygyOSk7CisKK3ZhciBzaGFsbG93Q29tcGFyZSA9IF9kZXJl
cV8oNDApOwordmFyIHVwZGF0ZSA9IF9kZXJlcV8oNDIpOworCitSZWFjdC5hZGRvbnMgPSB7Cisg
IENTU1RyYW5zaXRpb25Hcm91cDogUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXAsCisgIExpbmtlZFN0
YXRlTWl4aW46IExpbmtlZFN0YXRlTWl4aW4sCisgIFB1cmVSZW5kZXJNaXhpbjogUmVhY3RDb21w
b25lbnRXaXRoUHVyZVJlbmRlck1peGluLAorICBUcmFuc2l0aW9uR3JvdXA6IFJlYWN0VHJhbnNp
dGlvbkdyb3VwLAorCisgIGNyZWF0ZUZyYWdtZW50OiBSZWFjdEZyYWdtZW50LmNyZWF0ZSwKKyAg
c2hhbGxvd0NvbXBhcmU6IHNoYWxsb3dDb21wYXJlLAorICB1cGRhdGU6IHVwZGF0ZQorfTsKKwor
aWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAvLyBGb3IgdGhlIFVNRCBi
dWlsZCB3ZSBnZXQgdGhlc2UgbGF6aWx5IGZyb20gdGhlIGdsb2JhbCBzaW5jZSB0aGV5J3JlIHRp
ZWQKKyAgLy8gdG8gdGhlIERPTSByZW5kZXJlciBhbmQgaXQgaGFzbid0IGxvYWRlZCB5ZXQuCisg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFjdC5hZGRvbnMsICdQZXJmJywgeworICAgIGVudW1l
cmFibGU6IHRydWUsCisgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gUmVhY3RB
ZGRvbnNET01EZXBlbmRlbmNpZXMuZ2V0UmVhY3RQZXJmKCk7CisgICAgfQorICB9KTsKKyAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KFJlYWN0LmFkZG9ucywgJ1Rlc3RVdGlscycsIHsKKyAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJuIFJlYWN0
QWRkb25zRE9NRGVwZW5kZW5jaWVzLmdldFJlYWN0VGVzdFV0aWxzKCk7CisgICAgfQorICB9KTsK
K30KKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdDsKK30seyIxMyI6MTMsIjE5IjoxOSwiMjkiOjI5
LCIzIjozLCI0MCI6NDAsIjQyIjo0MiwiNSI6NSwiNiI6NiwiNyI6N31dLDMyOltmdW5jdGlvbihf
ZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwg
RmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3Vy
Y2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4g
dGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNl
IHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZv
dW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLwor
CisndXNlIHN0cmljdCc7CisKK3ZhciBfYXNzaWduID0gX2RlcmVxXyg1MCk7CisKK3ZhciBSZWFj
dFdpdGhBZGRvbnMgPSBfZGVyZXFfKDMxKTsKKworLy8gYHZlcnNpb25gIHdpbGwgYmUgYWRkZWQg
aGVyZSBieSB0aGUgUmVhY3QgbW9kdWxlLgordmFyIFJlYWN0V2l0aEFkZG9uc1VNREVudHJ5ID0g
X2Fzc2lnbihSZWFjdFdpdGhBZGRvbnMsIHsKKyAgX19TRUNSRVRfSU5KRUNURURfUkVBQ1RfRE9N
X0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6IG51bGwsIC8vIFdpbGwgYmUgaW5qZWN0
ZWQgYnkgUmVhY3RET00gVU1EIGJ1aWxkLgorICBfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VT
RV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDogeworICAgIFJlYWN0Q3VycmVudE93bmVyOiBfZGVyZXFf
KDE0KQorICB9Cit9KTsKKworaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgewor
ICBfYXNzaWduKFJlYWN0V2l0aEFkZG9uc1VNREVudHJ5Ll9fU0VDUkVUX0lOVEVSTkFMU19ET19O
T1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELCB7CisgICAgLy8gUmVhY3RDb21wb25lbnRUcmVl
SG9vayBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGluIHByb2R1Y3Rpb24uCisgICAgUmVhY3RDb21w
b25lbnRUcmVlSG9vazogX2RlcmVxXygxMiksCisgICAgZ2V0TmV4dERlYnVnSUQ6IF9kZXJlcV8o
MzcpCisgIH0pOworfQorCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0V2l0aEFkZG9uc1VNREVudHJ5
OworfSx7IjEyIjoxMiwiMTQiOjE0LCIzMSI6MzEsIjM3IjozNywiNTAiOjUwfV0sMzM6W2Z1bmN0
aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVz
ZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3Vu
ZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBz
b3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4g
YmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgor
ICogCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgY2FuRGVmaW5lUHJvcGVydHkgPSBmYWxz
ZTsKK2lmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgdHJ5IHsKKyAgICAv
LyAkRmxvd0ZpeE1lIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8yODUK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICd4JywgeyBnZXQ6IGZ1bmN0aW9uICgpIHt9
IH0pOworICAgIGNhbkRlZmluZVByb3BlcnR5ID0gdHJ1ZTsKKyAgfSBjYXRjaCAoeCkgeworICAg
IC8vIElFIHdpbGwgZmFpbCBvbiBkZWZpbmVQcm9wZXJ0eQorICB9Cit9CisKK21vZHVsZS5leHBv
cnRzID0gY2FuRGVmaW5lUHJvcGVydHk7Cit9LHt9XSwzNDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1
bGUsZXhwb3J0cyl7CisoZnVuY3Rpb24gKHByb2Nlc3MpeworLyoqCisgKiBDb3B5cmlnaHQgMjAx
My1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5z
ZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2Yg
dGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0
cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnku
CisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIF9wcm9kSW52YXJpYW50ID0gX2RlcmVx
XygzOSk7CisKK3ZhciBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcyA9IF9kZXJlcV8oMjIpOwor
dmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gX2RlcmVxXygyNCk7CisKK3ZhciBpbnZhcmlhbnQg
PSBfZGVyZXFfKDQ3KTsKK3ZhciB3YXJuaW5nID0gX2RlcmVxXyg0OSk7CisKK3ZhciBSZWFjdENv
bXBvbmVudFRyZWVIb29rOworCitpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYm
IHByb2Nlc3MuZW52ICYmICJkZXZlbG9wbWVudCIgPT09ICd0ZXN0JykgeworICAvLyBUZW1wb3Jh
cnkgaGFjay4KKyAgLy8gSW5saW5lIHJlcXVpcmVzIGRvbid0IHdvcmsgd2VsbCB3aXRoIEplc3Q6
CisgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNzI0MAorICAv
LyBSZW1vdmUgdGhlIGlubGluZSByZXF1aXJlcyB3aGVuIHdlIGRvbid0IG5lZWQgdGhlbSBhbnlt
b3JlOgorICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC83MTc4Cisg
IFJlYWN0Q29tcG9uZW50VHJlZUhvb2sgPSBfZGVyZXFfKDEyKTsKK30KKwordmFyIGxvZ2dlZFR5
cGVGYWlsdXJlcyA9IHt9OworCisvKioKKyAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZXMgbWF0Y2gg
d2l0aCB0aGUgdHlwZSBzcGVjcy4KKyAqIEVycm9yIG1lc3NhZ2VzIGFyZSBtZW1vcml6ZWQgYW5k
IHdpbGwgb25seSBiZSBzaG93biBvbmNlLgorICoKKyAqIEBwYXJhbSB7b2JqZWN0fSB0eXBlU3Bl
Y3MgTWFwIG9mIG5hbWUgdG8gYSBSZWFjdFByb3BUeXBlCisgKiBAcGFyYW0ge29iamVjdH0gdmFs
dWVzIFJ1bnRpbWUgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSB0eXBlLWNoZWNrZWQKKyAqIEBwYXJh
bSB7c3RyaW5nfSBsb2NhdGlvbiBlLmcuICJwcm9wIiwgImNvbnRleHQiLCAiY2hpbGQgY29udGV4
dCIKKyAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIE5hbWUgb2YgdGhlIGNvbXBvbmVu
dCBmb3IgZXJyb3IgbWVzc2FnZXMuCisgKiBAcGFyYW0gez9vYmplY3R9IGVsZW1lbnQgVGhlIFJl
YWN0IGVsZW1lbnQgdGhhdCBpcyBiZWluZyB0eXBlLWNoZWNrZWQKKyAqIEBwYXJhbSB7P251bWJl
cn0gZGVidWdJRCBUaGUgUmVhY3QgY29tcG9uZW50IGluc3RhbmNlIHRoYXQgaXMgYmVpbmcgdHlw
ZS1jaGVja2VkCisgKiBAcHJpdmF0ZQorICovCitmdW5jdGlvbiBjaGVja1JlYWN0VHlwZVNwZWMo
dHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBlbGVtZW50LCBkZWJ1
Z0lEKSB7CisgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHsKKyAgICBpZiAo
dHlwZVNwZWNzLmhhc093blByb3BlcnR5KHR5cGVTcGVjTmFtZSkpIHsKKyAgICAgIHZhciBlcnJv
cjsKKyAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5
IGRvLCB3ZSBkb24ndCB3YW50IHRvCisgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hl
cmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuCisgICAgICAvLyBBZnRlciB0
aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuCisgICAgICB0
cnkgeworICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQg
Z2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWUKKyAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91
dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLgorICAgICAgICAh
KHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSA9PT0gJ2Z1bmN0aW9uJykgPyAiZGV2ZWxv
cG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICclczogJXMgdHlwZSBg
JXNgIGlzIGludmFsaWQ7IGl0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIFJlYWN0
LlByb3BUeXBlcy4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIFJlYWN0UHJvcFR5
cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXSwgdHlwZVNwZWNOYW1lKSA6IF9wcm9kSW52YXJpYW50
KCc4NCcsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgUmVhY3RQcm9wVHlwZUxvY2F0
aW9uTmFtZXNbbG9jYXRpb25dLCB0eXBlU3BlY05hbWUpIDogdm9pZCAwOworICAgICAgICBlcnJv
ciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25l
bnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpOworICAgICAgfSBj
YXRjaCAoZXgpIHsKKyAgICAgICAgZXJyb3IgPSBleDsKKyAgICAgIH0KKyAgICAgICJkZXZlbG9w
bWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoIWVycm9yIHx8IGVycm9yIGluc3RhbmNl
b2YgRXJyb3IsICclczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzIGAlc2AgaXMgaW52YWxpZDsg
dGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBg
RXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8g
cGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlP
ZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBl
IGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFz
cycsIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXSwgdHlwZVNwZWNOYW1lLCB0
eXBlb2YgZXJyb3IpIDogdm9pZCAwOworICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3Ig
JiYgIShlcnJvci5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHsKKyAgICAgICAgLy8g
T25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUg
YSBsb3Qgb2YgdGhlCisgICAgICAgIC8vIHNhbWUgZXJyb3IuCisgICAgICAgIGxvZ2dlZFR5cGVG
YWlsdXJlc1tlcnJvci5tZXNzYWdlXSA9IHRydWU7CisKKyAgICAgICAgdmFyIGNvbXBvbmVudFN0
YWNrSW5mbyA9ICcnOworCisgICAgICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlv
bicpIHsKKyAgICAgICAgICBpZiAoIVJlYWN0Q29tcG9uZW50VHJlZUhvb2spIHsKKyAgICAgICAg
ICAgIFJlYWN0Q29tcG9uZW50VHJlZUhvb2sgPSBfZGVyZXFfKDEyKTsKKyAgICAgICAgICB9Cisg
ICAgICAgICAgaWYgKGRlYnVnSUQgIT09IG51bGwpIHsKKyAgICAgICAgICAgIGNvbXBvbmVudFN0
YWNrSW5mbyA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0U3RhY2tBZGRlbmR1bUJ5SUQoZGVi
dWdJRCk7CisgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50ICE9PSBudWxsKSB7CisgICAgICAg
ICAgICBjb21wb25lbnRTdGFja0luZm8gPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldEN1cnJl
bnRTdGFja0FkZGVuZHVtKGVsZW1lbnQpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdGYWls
ZWQgJXMgdHlwZTogJXMlcycsIGxvY2F0aW9uLCBlcnJvci5tZXNzYWdlLCBjb21wb25lbnRTdGFj
a0luZm8pIDogdm9pZCAwOworICAgICAgfQorICAgIH0KKyAgfQorfQorCittb2R1bGUuZXhwb3J0
cyA9IGNoZWNrUmVhY3RUeXBlU3BlYzsKK30pLmNhbGwodGhpcyx1bmRlZmluZWQpCit9LHsiMTIi
OjEyLCIyMiI6MjIsIjI0IjoyNCwiMzkiOjM5LCI0NyI6NDcsIjQ5Ijo0OX1dLDM1OltmdW5jdGlv
bihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKyhmdW5jdGlvbiAocHJvY2Vzcyl7CisvKioKKyAq
IENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJT
RC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290
IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBv
ZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBz
YW1lIGRpcmVjdG9yeS4KKyAqCisgKiAKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBLZXlF
c2NhcGVVdGlscyA9IF9kZXJlcV8oMik7Cit2YXIgdHJhdmVyc2VBbGxDaGlsZHJlbiA9IF9kZXJl
cV8oNDEpOwordmFyIHdhcm5pbmcgPSBfZGVyZXFfKDQ5KTsKKwordmFyIFJlYWN0Q29tcG9uZW50
VHJlZUhvb2s7CisKK2lmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vz
cy5lbnYgJiYgImRldmVsb3BtZW50IiA9PT0gJ3Rlc3QnKSB7CisgIC8vIFRlbXBvcmFyeSBoYWNr
LgorICAvLyBJbmxpbmUgcmVxdWlyZXMgZG9uJ3Qgd29yayB3ZWxsIHdpdGggSmVzdDoKKyAgLy8g
aHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83MjQwCisgIC8vIFJlbW92
ZSB0aGUgaW5saW5lIHJlcXVpcmVzIHdoZW4gd2UgZG9uJ3QgbmVlZCB0aGVtIGFueW1vcmU6Cisg
IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzcxNzgKKyAgUmVhY3RD
b21wb25lbnRUcmVlSG9vayA9IF9kZXJlcV8oMTIpOworfQorCisvKioKKyAqIEBwYXJhbSB7ZnVu
Y3Rpb259IHRyYXZlcnNlQ29udGV4dCBDb250ZXh0IHBhc3NlZCB0aHJvdWdoIHRyYXZlcnNhbC4K
KyAqIEBwYXJhbSB7P1JlYWN0Q29tcG9uZW50fSBjaGlsZCBSZWFjdCBjaGlsZCBjb21wb25lbnQu
CisgKiBAcGFyYW0geyFzdHJpbmd9IG5hbWUgU3RyaW5nIG5hbWUgb2Yga2V5IHBhdGggdG8gY2hp
bGQuCisgKiBAcGFyYW0ge251bWJlcj19IHNlbGZEZWJ1Z0lEIE9wdGlvbmFsIGRlYnVnSUQgb2Yg
dGhlIGN1cnJlbnQgaW50ZXJuYWwgaW5zdGFuY2UuCisgKi8KK2Z1bmN0aW9uIGZsYXR0ZW5TaW5n
bGVDaGlsZEludG9Db250ZXh0KHRyYXZlcnNlQ29udGV4dCwgY2hpbGQsIG5hbWUsIHNlbGZEZWJ1
Z0lEKSB7CisgIC8vIFdlIGZvdW5kIGEgY29tcG9uZW50IGluc3RhbmNlLgorICBpZiAodHJhdmVy
c2VDb250ZXh0ICYmIHR5cGVvZiB0cmF2ZXJzZUNvbnRleHQgPT09ICdvYmplY3QnKSB7CisgICAg
dmFyIHJlc3VsdCA9IHRyYXZlcnNlQ29udGV4dDsKKyAgICB2YXIga2V5VW5pcXVlID0gcmVzdWx0
W25hbWVdID09PSB1bmRlZmluZWQ7CisgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0
aW9uJykgeworICAgICAgaWYgKCFSZWFjdENvbXBvbmVudFRyZWVIb29rKSB7CisgICAgICAgIFJl
YWN0Q29tcG9uZW50VHJlZUhvb2sgPSBfZGVyZXFfKDEyKTsKKyAgICAgIH0KKyAgICAgIGlmICgh
a2V5VW5pcXVlKSB7CisgICAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdh
cm5pbmcoZmFsc2UsICdmbGF0dGVuQ2hpbGRyZW4oLi4uKTogRW5jb3VudGVyZWQgdHdvIGNoaWxk
cmVuIHdpdGggdGhlIHNhbWUga2V5LCAnICsgJ2Alc2AuIENoaWxkIGtleXMgbXVzdCBiZSB1bmlx
dWU7IHdoZW4gdHdvIGNoaWxkcmVuIHNoYXJlIGEga2V5LCBvbmx5ICcgKyAndGhlIGZpcnN0IGNo
aWxkIHdpbGwgYmUgdXNlZC4lcycsIEtleUVzY2FwZVV0aWxzLnVuZXNjYXBlKG5hbWUpLCBSZWFj
dENvbXBvbmVudFRyZWVIb29rLmdldFN0YWNrQWRkZW5kdW1CeUlEKHNlbGZEZWJ1Z0lEKSkgOiB2
b2lkIDA7CisgICAgICB9CisgICAgfQorICAgIGlmIChrZXlVbmlxdWUgJiYgY2hpbGQgIT0gbnVs
bCkgeworICAgICAgcmVzdWx0W25hbWVdID0gY2hpbGQ7CisgICAgfQorICB9Cit9CisKKy8qKgor
ICogRmxhdHRlbnMgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJv
cHMuY2hpbGRyZW5gLiBBbnkgbnVsbAorICogY2hpbGRyZW4gd2lsbCBub3QgYmUgaW5jbHVkZWQg
aW4gdGhlIHJlc3VsdGluZyBvYmplY3QuCisgKiBAcmV0dXJuIHshb2JqZWN0fSBmbGF0dGVuZWQg
Y2hpbGRyZW4ga2V5ZWQgYnkgbmFtZS4KKyAqLworZnVuY3Rpb24gZmxhdHRlbkNoaWxkcmVuKGNo
aWxkcmVuLCBzZWxmRGVidWdJRCkgeworICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkgeworICAgIHJl
dHVybiBjaGlsZHJlbjsKKyAgfQorICB2YXIgcmVzdWx0ID0ge307CisKKyAgaWYgKCJkZXZlbG9w
bWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRy
ZW4sIGZ1bmN0aW9uICh0cmF2ZXJzZUNvbnRleHQsIGNoaWxkLCBuYW1lKSB7CisgICAgICByZXR1
cm4gZmxhdHRlblNpbmdsZUNoaWxkSW50b0NvbnRleHQodHJhdmVyc2VDb250ZXh0LCBjaGlsZCwg
bmFtZSwgc2VsZkRlYnVnSUQpOworICAgIH0sIHJlc3VsdCk7CisgIH0gZWxzZSB7CisgICAgdHJh
dmVyc2VBbGxDaGlsZHJlbihjaGlsZHJlbiwgZmxhdHRlblNpbmdsZUNoaWxkSW50b0NvbnRleHQs
IHJlc3VsdCk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworbW9kdWxlLmV4cG9ydHMgPSBm
bGF0dGVuQ2hpbGRyZW47Cit9KS5jYWxsKHRoaXMsdW5kZWZpbmVkKQorfSx7IjEyIjoxMiwiMiI6
MiwiNDEiOjQxLCI0OSI6NDl9XSwzNjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5k
ZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdy
YW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxl
IGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKiAKKyAqLworCisndXNlIHN0cmljdCc7CisK
Ky8qIGdsb2JhbCBTeW1ib2wgKi8KKwordmFyIElURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1i
b2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yOwordmFyIEZBVVhfSVRFUkFUT1Jf
U1lNQk9MID0gJ0BAaXRlcmF0b3InOyAvLyBCZWZvcmUgU3ltYm9sIHNwZWMuCisKKy8qKgorICog
UmV0dXJucyB0aGUgaXRlcmF0b3IgbWV0aG9kIGZ1bmN0aW9uIGNvbnRhaW5lZCBvbiB0aGUgaXRl
cmFibGUgb2JqZWN0LgorICoKKyAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRo
IHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OgorICoKKyAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdl
dEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7CisgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHsKKyAqICAg
ICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChteUl0ZXJhYmxlKTsKKyAqICAgICAg
IC4uLgorICogICAgIH0KKyAqCisgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGUKKyAq
IEByZXR1cm4gez9mdW5jdGlvbn0KKyAqLworZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0
ZXJhYmxlKSB7CisgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1Jf
U1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxl
W0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7CisgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1
bmN0aW9uJykgeworICAgIHJldHVybiBpdGVyYXRvckZuOworICB9Cit9CisKK21vZHVsZS5leHBv
cnRzID0gZ2V0SXRlcmF0b3JGbjsKK30se31dLDM3OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxl
eHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4K
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNl
bnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0
aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRF
TlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqIAorICovCisKKyd1c2Ugc3Ry
aWN0JzsKKwordmFyIG5leHREZWJ1Z0lEID0gMTsKKworZnVuY3Rpb24gZ2V0TmV4dERlYnVnSUQo
KSB7CisgIHJldHVybiBuZXh0RGVidWdJRCsrOworfQorCittb2R1bGUuZXhwb3J0cyA9IGdldE5l
eHREZWJ1Z0lEOworfSx7fV0sMzg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewor
LyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVy
IHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFu
dAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBp
biB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisndXNlIHN0cmljdCc7CisKK3ZhciBfcHJv
ZEludmFyaWFudCA9IF9kZXJlcV8oMzkpOworCit2YXIgUmVhY3RFbGVtZW50ID0gX2RlcmVxXygx
Nik7CisKK3ZhciBpbnZhcmlhbnQgPSBfZGVyZXFfKDQ3KTsKKworLyoqCisgKiBSZXR1cm5zIHRo
ZSBmaXJzdCBjaGlsZCBpbiBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4gYW5kIHZlcmlmaWVzIHRo
YXQgdGhlcmUKKyAqIGlzIG9ubHkgb25lIGNoaWxkIGluIHRoZSBjb2xsZWN0aW9uLgorICoKKyAq
IFNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3RvcC1sZXZlbC1hcGku
aHRtbCNyZWFjdC5jaGlsZHJlbi5vbmx5CisgKgorICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRp
b24gb2YgdGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgYSBzaW5nbGUgY2hpbGQgZ2V0cworICog
cGFzc2VkIHdpdGhvdXQgYSB3cmFwcGVyLCBidXQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBoZWxwZXIg
ZnVuY3Rpb24gaXMgdG8KKyAqIGFic3RyYWN0IGF3YXkgdGhlIHBhcnRpY3VsYXIgc3RydWN0dXJl
IG9mIGNoaWxkcmVuLgorICoKKyAqIEBwYXJhbSB7P29iamVjdH0gY2hpbGRyZW4gQ2hpbGQgY29s
bGVjdGlvbiBzdHJ1Y3R1cmUuCisgKiBAcmV0dXJuIHtSZWFjdEVsZW1lbnR9IFRoZSBmaXJzdCBh
bmQgb25seSBgUmVhY3RFbGVtZW50YCBjb250YWluZWQgaW4gdGhlCisgKiBzdHJ1Y3R1cmUuCisg
Ki8KK2Z1bmN0aW9uIG9ubHlDaGlsZChjaGlsZHJlbikgeworICAhUmVhY3RFbGVtZW50LmlzVmFs
aWRFbGVtZW50KGNoaWxkcmVuKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGlu
dmFyaWFudChmYWxzZSwgJ1JlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBh
IHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLicpIDogX3Byb2RJbnZhcmlhbnQoJzE0MycpIDog
dm9pZCAwOworICByZXR1cm4gY2hpbGRyZW47Cit9CisKK21vZHVsZS5leHBvcnRzID0gb25seUNo
aWxkOworfSx7IjE2IjoxNiwiMzkiOjM5LCI0NyI6NDd9XSwzOTpbZnVuY3Rpb24oX2RlcmVxXyxt
b2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNl
Ym9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBj
b2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUK
KyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJl
ZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQg
aW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICogCisgKi8K
Kyd1c2Ugc3RyaWN0JzsKKworLyoqCisgKiBXQVJOSU5HOiBETyBOT1QgbWFudWFsbHkgcmVxdWly
ZSB0aGlzIG1vZHVsZS4KKyAqIFRoaXMgaXMgYSByZXBsYWNlbWVudCBmb3IgYGludmFyaWFudCgu
Li4pYCB1c2VkIGJ5IHRoZSBlcnJvciBjb2RlIHN5c3RlbQorICogYW5kIHdpbGwgX29ubHlfIGJl
IHJlcXVpcmVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIGJhYmVsIHBhc3MuCisgKiBJdCBhbHdheXMg
dGhyb3dzLgorICovCisKK2Z1bmN0aW9uIHJlYWN0UHJvZEludmFyaWFudChjb2RlKSB7CisgIHZh
ciBhcmdDb3VudCA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOworCisgIHZhciBtZXNzYWdlID0gJ01p
bmlmaWVkIFJlYWN0IGVycm9yICMnICsgY29kZSArICc7IHZpc2l0ICcgKyAnaHR0cDovL2ZhY2Vi
b29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlhbnQ9JyAr
IGNvZGU7CisKKyAgZm9yICh2YXIgYXJnSWR4ID0gMDsgYXJnSWR4IDwgYXJnQ291bnQ7IGFyZ0lk
eCsrKSB7CisgICAgbWVzc2FnZSArPSAnJmFyZ3NbXT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGFy
Z3VtZW50c1thcmdJZHggKyAxXSk7CisgIH0KKworICBtZXNzYWdlICs9ICcgZm9yIHRoZSBmdWxs
IG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50JyArICcgZm9y
IGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuJzsKKworICB2YXIg
ZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7CisgIGVycm9yLm5hbWUgPSAnSW52YXJpYW50IFZp
b2xhdGlvbic7CisgIGVycm9yLmZyYW1lc1RvUG9wID0gMTsgLy8gd2UgZG9uJ3QgY2FyZSBhYm91
dCByZWFjdFByb2RJbnZhcmlhbnQncyBvd24gZnJhbWUKKworICB0aHJvdyBlcnJvcjsKK30KKwor
bW9kdWxlLmV4cG9ydHMgPSByZWFjdFByb2RJbnZhcmlhbnQ7Cit9LHt9XSw0MDpbZnVuY3Rpb24o
X2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQs
IEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291
cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGlu
IHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJj
ZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBm
b3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8K
KworJ3VzZSBzdHJpY3QnOworCit2YXIgc2hhbGxvd0VxdWFsID0gX2RlcmVxXyg0OCk7CisKKy8q
KgorICogRG9lcyBhIHNoYWxsb3cgY29tcGFyaXNvbiBmb3IgcHJvcHMgYW5kIHN0YXRlLgorICog
U2VlIFJlYWN0Q29tcG9uZW50V2l0aFB1cmVSZW5kZXJNaXhpbgorICogU2VlIGFsc28gaHR0cHM6
Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9zaGFsbG93LWNvbXBhcmUuaHRtbAorICov
CitmdW5jdGlvbiBzaGFsbG93Q29tcGFyZShpbnN0YW5jZSwgbmV4dFByb3BzLCBuZXh0U3RhdGUp
IHsKKyAgcmV0dXJuICFzaGFsbG93RXF1YWwoaW5zdGFuY2UucHJvcHMsIG5leHRQcm9wcykgfHwg
IXNoYWxsb3dFcXVhbChpbnN0YW5jZS5zdGF0ZSwgbmV4dFN0YXRlKTsKK30KKworbW9kdWxlLmV4
cG9ydHMgPSBzaGFsbG93Q29tcGFyZTsKK30seyI0OCI6NDh9XSw0MTpbZnVuY3Rpb24oX2RlcmVx
Xyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vi
b29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNv
ZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQor
ICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVl
LiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBp
biB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3Vz
ZSBzdHJpY3QnOworCit2YXIgX3Byb2RJbnZhcmlhbnQgPSBfZGVyZXFfKDM5KTsKKwordmFyIFJl
YWN0Q3VycmVudE93bmVyID0gX2RlcmVxXygxNCk7Cit2YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0g
X2RlcmVxXygxNyk7CisKK3ZhciBnZXRJdGVyYXRvckZuID0gX2RlcmVxXygzNik7Cit2YXIgaW52
YXJpYW50ID0gX2RlcmVxXyg0Nyk7Cit2YXIgS2V5RXNjYXBlVXRpbHMgPSBfZGVyZXFfKDIpOwor
dmFyIHdhcm5pbmcgPSBfZGVyZXFfKDQ5KTsKKwordmFyIFNFUEFSQVRPUiA9ICcuJzsKK3ZhciBT
VUJTRVBBUkFUT1IgPSAnOic7CisKKy8qKgorICogVGhpcyBpcyBpbmxpbmVkIGZyb20gUmVhY3RF
bGVtZW50IHNpbmNlIHRoaXMgZmlsZSBpcyBzaGFyZWQgYmV0d2VlbgorICogaXNvbW9ycGhpYyBh
bmQgcmVuZGVyZXJzLiBXZSBjb3VsZCBleHRyYWN0IHRoaXMgdG8gYQorICoKKyAqLworCisvKioK
KyAqIFRPRE86IFRlc3QgdGhhdCBhIHNpbmdsZSBjaGlsZCBhbmQgYW4gYXJyYXkgd2l0aCBvbmUg
aXRlbSBoYXZlIHRoZSBzYW1lIGtleQorICogcGF0dGVybi4KKyAqLworCit2YXIgZGlkV2FybkFi
b3V0TWFwcyA9IGZhbHNlOworCisvKioKKyAqIEdlbmVyYXRlIGEga2V5IHN0cmluZyB0aGF0IGlk
ZW50aWZpZXMgYSBjb21wb25lbnQgd2l0aGluIGEgc2V0LgorICoKKyAqIEBwYXJhbSB7Kn0gY29t
cG9uZW50IEEgY29tcG9uZW50IHRoYXQgY291bGQgY29udGFpbiBhIG1hbnVhbCBrZXkuCisgKiBA
cGFyYW0ge251bWJlcn0gaW5kZXggSW5kZXggdGhhdCBpcyB1c2VkIGlmIGEgbWFudWFsIGtleSBp
cyBub3QgcHJvdmlkZWQuCisgKiBAcmV0dXJuIHtzdHJpbmd9CisgKi8KK2Z1bmN0aW9uIGdldENv
bXBvbmVudEtleShjb21wb25lbnQsIGluZGV4KSB7CisgIC8vIERvIHNvbWUgdHlwZWNoZWNraW5n
IGhlcmUgc2luY2Ugd2UgY2FsbCB0aGlzIGJsaW5kbHkuIFdlIHdhbnQgdG8gZW5zdXJlCisgIC8v
IHRoYXQgd2UgZG9uJ3QgYmxvY2sgcG90ZW50aWFsIGZ1dHVyZSBFUyBBUElzLgorICBpZiAoY29t
cG9uZW50ICYmIHR5cGVvZiBjb21wb25lbnQgPT09ICdvYmplY3QnICYmIGNvbXBvbmVudC5rZXkg
IT0gbnVsbCkgeworICAgIC8vIEV4cGxpY2l0IGtleQorICAgIHJldHVybiBLZXlFc2NhcGVVdGls
cy5lc2NhcGUoY29tcG9uZW50LmtleSk7CisgIH0KKyAgLy8gSW1wbGljaXQga2V5IGRldGVybWlu
ZWQgYnkgdGhlIGluZGV4IGluIHRoZSBzZXQKKyAgcmV0dXJuIGluZGV4LnRvU3RyaW5nKDM2KTsK
K30KKworLyoqCisgKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5l
ci4KKyAqIEBwYXJhbSB7IXN0cmluZ30gbmFtZVNvRmFyIE5hbWUgb2YgdGhlIGtleSBwYXRoIHNv
IGZhci4KKyAqIEBwYXJhbSB7IWZ1bmN0aW9ufSBjYWxsYmFjayBDYWxsYmFjayB0byBpbnZva2Ug
d2l0aCBlYWNoIGNoaWxkIGZvdW5kLgorICogQHBhcmFtIHs/Kn0gdHJhdmVyc2VDb250ZXh0IFVz
ZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiB0aHJvdWdob3V0IHRoZSB0cmF2ZXJzYWwKKyAqIHByb2Nl
c3MuCisgKiBAcmV0dXJuIHshbnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHRoaXMg
c3VidHJlZS4KKyAqLworZnVuY3Rpb24gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGRyZW4s
IG5hbWVTb0ZhciwgY2FsbGJhY2ssIHRyYXZlcnNlQ29udGV4dCkgeworICB2YXIgdHlwZSA9IHR5
cGVvZiBjaGlsZHJlbjsKKworICBpZiAodHlwZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZSA9PT0g
J2Jvb2xlYW4nKSB7CisgICAgLy8gQWxsIG9mIHRoZSBhYm92ZSBhcmUgcGVyY2VpdmVkIGFzIG51
bGwuCisgICAgY2hpbGRyZW4gPSBudWxsOworICB9CisKKyAgaWYgKGNoaWxkcmVuID09PSBudWxs
IHx8IHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGUgPT09ICdudW1iZXInIHx8CisgIC8vIFRoZSBm
b2xsb3dpbmcgaXMgaW5saW5lZCBmcm9tIFJlYWN0RWxlbWVudC4gVGhpcyBtZWFucyB3ZSBjYW4g
b3B0aW1pemUKKyAgLy8gc29tZSBjaGVja3MuIFJlYWN0IEZpYmVyIGFsc28gaW5saW5lcyB0aGlz
IGxvZ2ljIGZvciBzaW1pbGFyIHB1cnBvc2VzLgorICB0eXBlID09PSAnb2JqZWN0JyAmJiBjaGls
ZHJlbi4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFKSB7CisgICAgY2FsbGJhY2sodHJh
dmVyc2VDb250ZXh0LCBjaGlsZHJlbiwKKyAgICAvLyBJZiBpdCdzIHRoZSBvbmx5IGNoaWxkLCB0
cmVhdCB0aGUgbmFtZSBhcyBpZiBpdCB3YXMgd3JhcHBlZCBpbiBhbiBhcnJheQorICAgIC8vIHNv
IHRoYXQgaXQncyBjb25zaXN0ZW50IGlmIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gZ3Jvd3MuCisg
ICAgbmFtZVNvRmFyID09PSAnJyA/IFNFUEFSQVRPUiArIGdldENvbXBvbmVudEtleShjaGlsZHJl
biwgMCkgOiBuYW1lU29GYXIpOworICAgIHJldHVybiAxOworICB9CisKKyAgdmFyIGNoaWxkOwor
ICB2YXIgbmV4dE5hbWU7CisgIHZhciBzdWJ0cmVlQ291bnQgPSAwOyAvLyBDb3VudCBvZiBjaGls
ZHJlbiBmb3VuZCBpbiB0aGUgY3VycmVudCBzdWJ0cmVlLgorICB2YXIgbmV4dE5hbWVQcmVmaXgg
PSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SIDogbmFtZVNvRmFyICsgU1VCU0VQQVJBVE9S
OworCisgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkgeworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKKyAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07
CisgICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgZ2V0Q29tcG9uZW50S2V5KGNoaWxk
LCBpKTsKKyAgICAgIHN1YnRyZWVDb3VudCArPSB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChjaGls
ZCwgbmV4dE5hbWUsIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpOworICAgIH0KKyAgfSBlbHNl
IHsKKyAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4oY2hpbGRyZW4pOworICAgIGlm
IChpdGVyYXRvckZuKSB7CisgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwoY2hp
bGRyZW4pOworICAgICAgdmFyIHN0ZXA7CisgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gY2hpbGRy
ZW4uZW50cmllcykgeworICAgICAgICB2YXIgaWkgPSAwOworICAgICAgICB3aGlsZSAoIShzdGVw
ID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7CisgICAgICAgICAgY2hpbGQgPSBzdGVwLnZhbHVl
OworICAgICAgICAgIG5leHROYW1lID0gbmV4dE5hbWVQcmVmaXggKyBnZXRDb21wb25lbnRLZXko
Y2hpbGQsIGlpKyspOworICAgICAgICAgIHN1YnRyZWVDb3VudCArPSB0cmF2ZXJzZUFsbENoaWxk
cmVuSW1wbChjaGlsZCwgbmV4dE5hbWUsIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpOworICAg
ICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3By
b2R1Y3Rpb24nKSB7CisgICAgICAgICAgdmFyIG1hcHNBc0NoaWxkcmVuQWRkZW5kdW0gPSAnJzsK
KyAgICAgICAgICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkgeworICAgICAgICAgICAg
dmFyIG1hcHNBc0NoaWxkcmVuT3duZXJOYW1lID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC5n
ZXROYW1lKCk7CisgICAgICAgICAgICBpZiAobWFwc0FzQ2hpbGRyZW5Pd25lck5hbWUpIHsKKyAg
ICAgICAgICAgICAgbWFwc0FzQ2hpbGRyZW5BZGRlbmR1bSA9ICcgQ2hlY2sgdGhlIHJlbmRlciBt
ZXRob2Qgb2YgYCcgKyBtYXBzQXNDaGlsZHJlbk93bmVyTmFtZSArICdgLic7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgfQorICAgICAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9u
JyA/IHdhcm5pbmcoZGlkV2FybkFib3V0TWFwcywgJ1VzaW5nIE1hcHMgYXMgY2hpbGRyZW4gaXMg
bm90IHlldCBmdWxseSBzdXBwb3J0ZWQuIEl0IGlzIGFuICcgKyAnZXhwZXJpbWVudGFsIGZlYXR1
cmUgdGhhdCBtaWdodCBiZSByZW1vdmVkLiBDb252ZXJ0IGl0IHRvIGEgJyArICdzZXF1ZW5jZSAv
IGl0ZXJhYmxlIG9mIGtleWVkIFJlYWN0RWxlbWVudHMgaW5zdGVhZC4lcycsIG1hcHNBc0NoaWxk
cmVuQWRkZW5kdW0pIDogdm9pZCAwOworICAgICAgICAgIGRpZFdhcm5BYm91dE1hcHMgPSB0cnVl
OworICAgICAgICB9CisgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2
XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLgorICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRl
cmF0b3IubmV4dCgpKS5kb25lKSB7CisgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTsK
KyAgICAgICAgICBpZiAoZW50cnkpIHsKKyAgICAgICAgICAgIGNoaWxkID0gZW50cnlbMV07Cisg
ICAgICAgICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgS2V5RXNjYXBlVXRpbHMuZXNj
YXBlKGVudHJ5WzBdKSArIFNVQlNFUEFSQVRPUiArIGdldENvbXBvbmVudEtleShjaGlsZCwgMCk7
CisgICAgICAgICAgICBzdWJ0cmVlQ291bnQgKz0gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hp
bGQsIG5leHROYW1lLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KTsKKyAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7Cisg
ICAgICB2YXIgYWRkZW5kdW0gPSAnJzsKKyAgICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJv
ZHVjdGlvbicpIHsKKyAgICAgICAgYWRkZW5kdW0gPSAnIElmIHlvdSBtZWFudCB0byByZW5kZXIg
YSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgJyArICdpbnN0ZWFkIG9yIHdy
YXAgdGhlIG9iamVjdCB1c2luZyBjcmVhdGVGcmFnbWVudChvYmplY3QpIGZyb20gdGhlICcgKyAn
UmVhY3QgYWRkLW9ucy4nOworICAgICAgICBpZiAoY2hpbGRyZW4uX2lzUmVhY3RFbGVtZW50KSB7
CisgICAgICAgICAgYWRkZW5kdW0gPSAnIEl0IGxvb2tzIGxpa2UgeW91XCdyZSB1c2luZyBhbiBl
bGVtZW50IGNyZWF0ZWQgYnkgYSBkaWZmZXJlbnQgJyArICd2ZXJzaW9uIG9mIFJlYWN0LiBNYWtl
IHN1cmUgdG8gdXNlIG9ubHkgb25lIGNvcHkgb2YgUmVhY3QuJzsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkgeworICAgICAgICAgIHZhciBuYW1lID0g
UmVhY3RDdXJyZW50T3duZXIuY3VycmVudC5nZXROYW1lKCk7CisgICAgICAgICAgaWYgKG5hbWUp
IHsKKyAgICAgICAgICAgIGFkZGVuZHVtICs9ICcgQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2Yg
YCcgKyBuYW1lICsgJ2AuJzsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAg
IHZhciBjaGlsZHJlblN0cmluZyA9IFN0cmluZyhjaGlsZHJlbik7CisgICAgICAhZmFsc2UgPyAi
ZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdPYmplY3Rz
IGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6ICVzKS4lcycsIGNoaWxkcmVu
U3RyaW5nID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2Jq
ZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4oJywgJykgKyAnfScgOiBjaGlsZHJlblN0cmluZywgYWRk
ZW5kdW0pIDogX3Byb2RJbnZhcmlhbnQoJzMxJywgY2hpbGRyZW5TdHJpbmcgPT09ICdbb2JqZWN0
IE9iamVjdF0nID8gJ29iamVjdCB3aXRoIGtleXMgeycgKyBPYmplY3Qua2V5cyhjaGlsZHJlbiku
am9pbignLCAnKSArICd9JyA6IGNoaWxkcmVuU3RyaW5nLCBhZGRlbmR1bSkgOiB2b2lkIDA7Cisg
ICAgfQorICB9CisKKyAgcmV0dXJuIHN1YnRyZWVDb3VudDsKK30KKworLyoqCisgKiBUcmF2ZXJz
ZXMgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRy
ZW5gLCBidXQKKyAqIG1pZ2h0IGFsc28gYmUgc3BlY2lmaWVkIHRocm91Z2ggYXR0cmlidXRlczoK
KyAqCisgKiAtIGB0cmF2ZXJzZUFsbENoaWxkcmVuKHRoaXMucHJvcHMuY2hpbGRyZW4sIC4uLilg
CisgKiAtIGB0cmF2ZXJzZUFsbENoaWxkcmVuKHRoaXMucHJvcHMubGVmdFBhbmVsQ2hpbGRyZW4s
IC4uLilgCisgKgorICogVGhlIGB0cmF2ZXJzZUNvbnRleHRgIGlzIGFuIG9wdGlvbmFsIGFyZ3Vt
ZW50IHRoYXQgaXMgcGFzc2VkIHRocm91Z2ggdGhlCisgKiBlbnRpcmUgdHJhdmVyc2FsLiBJdCBj
YW4gYmUgdXNlZCB0byBzdG9yZSBhY2N1bXVsYXRpb25zIG9yIGFueXRoaW5nIGVsc2UgdGhhdAor
ICogdGhlIGNhbGxiYWNrIG1pZ2h0IGZpbmQgcmVsZXZhbnQuCisgKgorICogQHBhcmFtIHs/Kn0g
Y2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBvYmplY3QuCisgKiBAcGFyYW0geyFmdW5jdGlvbn0gY2Fs
bGJhY2sgVG8gaW52b2tlIHVwb24gdHJhdmVyc2luZyBlYWNoIGNoaWxkLgorICogQHBhcmFtIHs/
Kn0gdHJhdmVyc2VDb250ZXh0IENvbnRleHQgZm9yIHRyYXZlcnNhbC4KKyAqIEByZXR1cm4geyFu
dW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4gaW4gdGhpcyBzdWJ0cmVlLgorICovCitmdW5j
dGlvbiB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBjYWxsYmFjaywgdHJhdmVyc2VDb250
ZXh0KSB7CisgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKwor
ICByZXR1cm4gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGRyZW4sICcnLCBjYWxsYmFjaywg
dHJhdmVyc2VDb250ZXh0KTsKK30KKworbW9kdWxlLmV4cG9ydHMgPSB0cmF2ZXJzZUFsbENoaWxk
cmVuOworfSx7IjE0IjoxNCwiMTciOjE3LCIyIjoyLCIzNiI6MzYsIjM5IjozOSwiNDciOjQ3LCI0
OSI6NDl9XSw0MjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENv
cHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1z
dHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRp
cmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBw
YXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1l
IGRpcmVjdG9yeS4KKyAqCisgKi8KKworLyogZ2xvYmFsIGhhc093blByb3BlcnR5OnRydWUgKi8K
KworJ3VzZSBzdHJpY3QnOworCit2YXIgX3Byb2RJbnZhcmlhbnQgPSBfZGVyZXFfKDM5KSwKKyAg
ICBfYXNzaWduID0gX2RlcmVxXyg1MCk7CisKK3ZhciBpbnZhcmlhbnQgPSBfZGVyZXFfKDQ3KTsK
K3ZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5OworCitmdW5jdGlvbiBzaGFs
bG93Q29weSh4KSB7CisgIGlmIChBcnJheS5pc0FycmF5KHgpKSB7CisgICAgcmV0dXJuIHguY29u
Y2F0KCk7CisgIH0gZWxzZSBpZiAoeCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcpIHsKKyAgICBy
ZXR1cm4gX2Fzc2lnbihuZXcgeC5jb25zdHJ1Y3RvcigpLCB4KTsKKyAgfSBlbHNlIHsKKyAgICBy
ZXR1cm4geDsKKyAgfQorfQorCit2YXIgQ09NTUFORF9QVVNIID0gJyRwdXNoJzsKK3ZhciBDT01N
QU5EX1VOU0hJRlQgPSAnJHVuc2hpZnQnOwordmFyIENPTU1BTkRfU1BMSUNFID0gJyRzcGxpY2Un
OwordmFyIENPTU1BTkRfU0VUID0gJyRzZXQnOwordmFyIENPTU1BTkRfTUVSR0UgPSAnJG1lcmdl
JzsKK3ZhciBDT01NQU5EX0FQUExZID0gJyRhcHBseSc7CisKK3ZhciBBTExfQ09NTUFORFNfTElT
VCA9IFtDT01NQU5EX1BVU0gsIENPTU1BTkRfVU5TSElGVCwgQ09NTUFORF9TUExJQ0UsIENPTU1B
TkRfU0VULCBDT01NQU5EX01FUkdFLCBDT01NQU5EX0FQUExZXTsKKwordmFyIEFMTF9DT01NQU5E
U19TRVQgPSB7fTsKKworQUxMX0NPTU1BTkRTX0xJU1QuZm9yRWFjaChmdW5jdGlvbiAoY29tbWFu
ZCkgeworICBBTExfQ09NTUFORFNfU0VUW2NvbW1hbmRdID0gdHJ1ZTsKK30pOworCitmdW5jdGlv
biBpbnZhcmlhbnRBcnJheUNhc2UodmFsdWUsIHNwZWMsIGNvbW1hbmQpIHsKKyAgIUFycmF5Lmlz
QXJyYXkodmFsdWUpID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50
KGZhbHNlLCAndXBkYXRlKCk6IGV4cGVjdGVkIHRhcmdldCBvZiAlcyB0byBiZSBhbiBhcnJheTsg
Z290ICVzLicsIGNvbW1hbmQsIHZhbHVlKSA6IF9wcm9kSW52YXJpYW50KCcxJywgY29tbWFuZCwg
dmFsdWUpIDogdm9pZCAwOworICB2YXIgc3BlY1ZhbHVlID0gc3BlY1tjb21tYW5kXTsKKyAgIUFy
cmF5LmlzQXJyYXkoc3BlY1ZhbHVlKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/
IGludmFyaWFudChmYWxzZSwgJ3VwZGF0ZSgpOiBleHBlY3RlZCBzcGVjIG9mICVzIHRvIGJlIGFu
IGFycmF5OyBnb3QgJXMuIERpZCB5b3UgZm9yZ2V0IHRvIHdyYXAgeW91ciBwYXJhbWV0ZXIgaW4g
YW4gYXJyYXk/JywgY29tbWFuZCwgc3BlY1ZhbHVlKSA6IF9wcm9kSW52YXJpYW50KCcyJywgY29t
bWFuZCwgc3BlY1ZhbHVlKSA6IHZvaWQgMDsKK30KKworLyoqCisgKiBSZXR1cm5zIGEgdXBkYXRl
ZCBzaGFsbG93IGNvcHkgb2YgYW4gb2JqZWN0IHdpdGhvdXQgbXV0YXRpbmcgdGhlIG9yaWdpbmFs
LgorICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdXBkYXRlLmh0
bWwgZm9yIGRldGFpbHMuCisgKi8KK2Z1bmN0aW9uIHVwZGF0ZSh2YWx1ZSwgc3BlYykgeworICAh
KHR5cGVvZiBzcGVjID09PSAnb2JqZWN0JykgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlv
bicgPyBpbnZhcmlhbnQoZmFsc2UsICd1cGRhdGUoKTogWW91IHByb3ZpZGVkIGEga2V5IHBhdGgg
dG8gdXBkYXRlKCkgdGhhdCBkaWQgbm90IGNvbnRhaW4gb25lIG9mICVzLiBEaWQgeW91IGZvcmdl
dCB0byBpbmNsdWRlIHslczogLi4ufT8nLCBBTExfQ09NTUFORFNfTElTVC5qb2luKCcsICcpLCBD
T01NQU5EX1NFVCkgOiBfcHJvZEludmFyaWFudCgnMycsIEFMTF9DT01NQU5EU19MSVNULmpvaW4o
JywgJyksIENPTU1BTkRfU0VUKSA6IHZvaWQgMDsKKworICBpZiAoaGFzT3duUHJvcGVydHkuY2Fs
bChzcGVjLCBDT01NQU5EX1NFVCkpIHsKKyAgICAhKE9iamVjdC5rZXlzKHNwZWMpLmxlbmd0aCA9
PT0gMSkgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2Us
ICdDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIGtleSBpbiBhbiBvYmplY3Qgd2l0aCAlcycsIENP
TU1BTkRfU0VUKSA6IF9wcm9kSW52YXJpYW50KCc0JywgQ09NTUFORF9TRVQpIDogdm9pZCAwOwor
CisgICAgcmV0dXJuIHNwZWNbQ09NTUFORF9TRVRdOworICB9CisKKyAgdmFyIG5leHRWYWx1ZSA9
IHNoYWxsb3dDb3B5KHZhbHVlKTsKKworICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChzcGVjLCBD
T01NQU5EX01FUkdFKSkgeworICAgIHZhciBtZXJnZU9iaiA9IHNwZWNbQ09NTUFORF9NRVJHRV07
CisgICAgIShtZXJnZU9iaiAmJiB0eXBlb2YgbWVyZ2VPYmogPT09ICdvYmplY3QnKSA/ICJkZXZl
bG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3VwZGF0ZSgpOiAl
cyBleHBlY3RzIGEgc3BlYyBvZiB0eXBlIFwnb2JqZWN0XCc7IGdvdCAlcycsIENPTU1BTkRfTUVS
R0UsIG1lcmdlT2JqKSA6IF9wcm9kSW52YXJpYW50KCc1JywgQ09NTUFORF9NRVJHRSwgbWVyZ2VP
YmopIDogdm9pZCAwOworICAgICEobmV4dFZhbHVlICYmIHR5cGVvZiBuZXh0VmFsdWUgPT09ICdv
YmplY3QnKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxz
ZSwgJ3VwZGF0ZSgpOiAlcyBleHBlY3RzIGEgdGFyZ2V0IG9mIHR5cGUgXCdvYmplY3RcJzsgZ290
ICVzJywgQ09NTUFORF9NRVJHRSwgbmV4dFZhbHVlKSA6IF9wcm9kSW52YXJpYW50KCc2JywgQ09N
TUFORF9NRVJHRSwgbmV4dFZhbHVlKSA6IHZvaWQgMDsKKyAgICBfYXNzaWduKG5leHRWYWx1ZSwg
c3BlY1tDT01NQU5EX01FUkdFXSk7CisgIH0KKworICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChz
cGVjLCBDT01NQU5EX1BVU0gpKSB7CisgICAgaW52YXJpYW50QXJyYXlDYXNlKHZhbHVlLCBzcGVj
LCBDT01NQU5EX1BVU0gpOworICAgIHNwZWNbQ09NTUFORF9QVVNIXS5mb3JFYWNoKGZ1bmN0aW9u
IChpdGVtKSB7CisgICAgICBuZXh0VmFsdWUucHVzaChpdGVtKTsKKyAgICB9KTsKKyAgfQorCisg
IGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNwZWMsIENPTU1BTkRfVU5TSElGVCkpIHsKKyAgICBp
bnZhcmlhbnRBcnJheUNhc2UodmFsdWUsIHNwZWMsIENPTU1BTkRfVU5TSElGVCk7CisgICAgc3Bl
Y1tDT01NQU5EX1VOU0hJRlRdLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKKyAgICAgIG5leHRW
YWx1ZS51bnNoaWZ0KGl0ZW0pOworICAgIH0pOworICB9CisKKyAgaWYgKGhhc093blByb3BlcnR5
LmNhbGwoc3BlYywgQ09NTUFORF9TUExJQ0UpKSB7CisgICAgIUFycmF5LmlzQXJyYXkodmFsdWUp
ID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnRXhw
ZWN0ZWQgJXMgdGFyZ2V0IHRvIGJlIGFuIGFycmF5OyBnb3QgJXMnLCBDT01NQU5EX1NQTElDRSwg
dmFsdWUpIDogX3Byb2RJbnZhcmlhbnQoJzcnLCBDT01NQU5EX1NQTElDRSwgdmFsdWUpIDogdm9p
ZCAwOworICAgICFBcnJheS5pc0FycmF5KHNwZWNbQ09NTUFORF9TUExJQ0VdKSA/ICJkZXZlbG9w
bWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3VwZGF0ZSgpOiBleHBl
Y3RlZCBzcGVjIG9mICVzIHRvIGJlIGFuIGFycmF5IG9mIGFycmF5czsgZ290ICVzLiBEaWQgeW91
IGZvcmdldCB0byB3cmFwIHlvdXIgcGFyYW1ldGVycyBpbiBhbiBhcnJheT8nLCBDT01NQU5EX1NQ
TElDRSwgc3BlY1tDT01NQU5EX1NQTElDRV0pIDogX3Byb2RJbnZhcmlhbnQoJzgnLCBDT01NQU5E
X1NQTElDRSwgc3BlY1tDT01NQU5EX1NQTElDRV0pIDogdm9pZCAwOworICAgIHNwZWNbQ09NTUFO
RF9TUExJQ0VdLmZvckVhY2goZnVuY3Rpb24gKGFyZ3MpIHsKKyAgICAgICFBcnJheS5pc0FycmF5
KGFyZ3MpID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNl
LCAndXBkYXRlKCk6IGV4cGVjdGVkIHNwZWMgb2YgJXMgdG8gYmUgYW4gYXJyYXkgb2YgYXJyYXlz
OyBnb3QgJXMuIERpZCB5b3UgZm9yZ2V0IHRvIHdyYXAgeW91ciBwYXJhbWV0ZXJzIGluIGFuIGFy
cmF5PycsIENPTU1BTkRfU1BMSUNFLCBzcGVjW0NPTU1BTkRfU1BMSUNFXSkgOiBfcHJvZEludmFy
aWFudCgnOCcsIENPTU1BTkRfU1BMSUNFLCBzcGVjW0NPTU1BTkRfU1BMSUNFXSkgOiB2b2lkIDA7
CisgICAgICBuZXh0VmFsdWUuc3BsaWNlLmFwcGx5KG5leHRWYWx1ZSwgYXJncyk7CisgICAgfSk7
CisgIH0KKworICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChzcGVjLCBDT01NQU5EX0FQUExZKSkg
eworICAgICEodHlwZW9mIHNwZWNbQ09NTUFORF9BUFBMWV0gPT09ICdmdW5jdGlvbicpID8gImRl
dmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAndXBkYXRlKCk6
IGV4cGVjdGVkIHNwZWMgb2YgJXMgdG8gYmUgYSBmdW5jdGlvbjsgZ290ICVzLicsIENPTU1BTkRf
QVBQTFksIHNwZWNbQ09NTUFORF9BUFBMWV0pIDogX3Byb2RJbnZhcmlhbnQoJzknLCBDT01NQU5E
X0FQUExZLCBzcGVjW0NPTU1BTkRfQVBQTFldKSA6IHZvaWQgMDsKKyAgICBuZXh0VmFsdWUgPSBz
cGVjW0NPTU1BTkRfQVBQTFldKG5leHRWYWx1ZSk7CisgIH0KKworICBmb3IgKHZhciBrIGluIHNw
ZWMpIHsKKyAgICBpZiAoIShBTExfQ09NTUFORFNfU0VULmhhc093blByb3BlcnR5KGspICYmIEFM
TF9DT01NQU5EU19TRVRba10pKSB7CisgICAgICBuZXh0VmFsdWVba10gPSB1cGRhdGUodmFsdWVb
a10sIHNwZWNba10pOworICAgIH0KKyAgfQorCisgIHJldHVybiBuZXh0VmFsdWU7Cit9CisKK21v
ZHVsZS5leHBvcnRzID0gdXBkYXRlOworfSx7IjM5IjozOSwiNDciOjQ3LCI1MCI6NTB9XSw0Mzpb
ZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisndXNlIHN0cmljdCc7CisKKy8qKgor
ICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIg
dGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50
CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGlu
IHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKiBAdHlwZWNoZWNrcworICovCisKK3ZhciBpbnZh
cmlhbnQgPSBfZGVyZXFfKDQ3KTsKKworLyoqCisgKiBUaGUgQ1NTQ29yZSBtb2R1bGUgc3BlY2lm
aWVzIHRoZSBBUEkgKGFuZCBpbXBsZW1lbnRzIG1vc3Qgb2YgdGhlIG1ldGhvZHMpCisgKiB0aGF0
IHNob3VsZCBiZSB1c2VkIHdoZW4gZGVhbGluZyB3aXRoIHRoZSBkaXNwbGF5IG9mIGVsZW1lbnRz
ICh2aWEgdGhlaXIKKyAqIENTUyBjbGFzc2VzIGFuZCB2aXNpYmlsaXR5IG9uIHNjcmVlbi4gSXQg
aXMgYW4gQVBJIGZvY3VzZWQgb24gbXV0YXRpbmcgdGhlCisgKiBkaXNwbGF5IGFuZCBub3QgcmVh
ZGluZyBpdCBhcyBubyBsb2dpY2FsIHN0YXRlIHNob3VsZCBiZSBlbmNvZGVkIGluIHRoZQorICog
ZGlzcGxheSBvZiBlbGVtZW50cy4KKyAqLworCisvKiBTbG93IGltcGxlbWVudGF0aW9uIGZvciBi
cm93c2VycyB0aGF0IGRvbid0IG5hdGl2ZWx5IHN1cHBvcnQgLm1hdGNoZXMoKSAqLworZnVuY3Rp
b24gbWF0Y2hlc1NlbGVjdG9yX1NMT1coZWxlbWVudCwgc2VsZWN0b3IpIHsKKyAgdmFyIHJvb3Qg
PSBlbGVtZW50OworICB3aGlsZSAocm9vdC5wYXJlbnROb2RlKSB7CisgICAgcm9vdCA9IHJvb3Qu
cGFyZW50Tm9kZTsKKyAgfQorCisgIHZhciBhbGwgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoc2Vs
ZWN0b3IpOworICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChhbGwsIGVsZW1l
bnQpICE9PSAtMTsKK30KKwordmFyIENTU0NvcmUgPSB7CisKKyAgLyoqCisgICAqIEFkZHMgdGhl
IGNsYXNzIHBhc3NlZCBpbiB0byB0aGUgZWxlbWVudCBpZiBpdCBkb2Vzbid0IGFscmVhZHkgaGF2
ZSBpdC4KKyAgICoKKyAgICogQHBhcmFtIHtET01FbGVtZW50fSBlbGVtZW50IHRoZSBlbGVtZW50
IHRvIHNldCB0aGUgY2xhc3Mgb24KKyAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSB0aGUg
Q1NTIGNsYXNzTmFtZQorICAgKiBAcmV0dXJuIHtET01FbGVtZW50fSB0aGUgZWxlbWVudCBwYXNz
ZWQgaW4KKyAgICovCisgIGFkZENsYXNzOiBmdW5jdGlvbiBhZGRDbGFzcyhlbGVtZW50LCBjbGFz
c05hbWUpIHsKKyAgICAhIS9ccy8udGVzdChjbGFzc05hbWUpID8gImRldmVsb3BtZW50IiAhPT0g
J3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnQ1NTQ29yZS5hZGRDbGFzcyB0YWtlcyBv
bmx5IGEgc2luZ2xlIGNsYXNzIG5hbWUuICIlcyIgY29udGFpbnMgJyArICdtdWx0aXBsZSBjbGFz
c2VzLicsIGNsYXNzTmFtZSkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwOworCisgICAgaWYg
KGNsYXNzTmFtZSkgeworICAgICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0KSB7CisgICAgICAgIGVs
ZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpOworICAgICAgfSBlbHNlIGlmICghQ1NTQ29y
ZS5oYXNDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpKSB7CisgICAgICAgIGVsZW1lbnQuY2xhc3NO
YW1lID0gZWxlbWVudC5jbGFzc05hbWUgKyAnICcgKyBjbGFzc05hbWU7CisgICAgICB9CisgICAg
fQorICAgIHJldHVybiBlbGVtZW50OworICB9LAorCisgIC8qKgorICAgKiBSZW1vdmVzIHRoZSBj
bGFzcyBwYXNzZWQgaW4gZnJvbSB0aGUgZWxlbWVudAorICAgKgorICAgKiBAcGFyYW0ge0RPTUVs
ZW1lbnR9IGVsZW1lbnQgdGhlIGVsZW1lbnQgdG8gc2V0IHRoZSBjbGFzcyBvbgorICAgKiBAcGFy
YW0ge3N0cmluZ30gY2xhc3NOYW1lIHRoZSBDU1MgY2xhc3NOYW1lCisgICAqIEByZXR1cm4ge0RP
TUVsZW1lbnR9IHRoZSBlbGVtZW50IHBhc3NlZCBpbgorICAgKi8KKyAgcmVtb3ZlQ2xhc3M6IGZ1
bmN0aW9uIHJlbW92ZUNsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkgeworICAgICEhL1xzLy50ZXN0
KGNsYXNzTmFtZSkgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQo
ZmFsc2UsICdDU1NDb3JlLnJlbW92ZUNsYXNzIHRha2VzIG9ubHkgYSBzaW5nbGUgY2xhc3MgbmFt
ZS4gIiVzIiBjb250YWlucyAnICsgJ211bHRpcGxlIGNsYXNzZXMuJywgY2xhc3NOYW1lKSA6IGlu
dmFyaWFudChmYWxzZSkgOiB2b2lkIDA7CisKKyAgICBpZiAoY2xhc3NOYW1lKSB7CisgICAgICBp
ZiAoZWxlbWVudC5jbGFzc0xpc3QpIHsKKyAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3Zl
KGNsYXNzTmFtZSk7CisgICAgICB9IGVsc2UgaWYgKENTU0NvcmUuaGFzQ2xhc3MoZWxlbWVudCwg
Y2xhc3NOYW1lKSkgeworICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NO
YW1lLnJlcGxhY2UobmV3IFJlZ0V4cCgnKF58XFxzKScgKyBjbGFzc05hbWUgKyAnKD86XFxzfCQp
JywgJ2cnKSwgJyQxJykucmVwbGFjZSgvXHMrL2csICcgJykgLy8gbXVsdGlwbGUgc3BhY2VzIHRv
IG9uZQorICAgICAgICAucmVwbGFjZSgvXlxzKnxccyokL2csICcnKTsgLy8gdHJpbSB0aGUgZW5k
cworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZWxlbWVudDsKKyAgfSwKKworICAvKioKKyAg
ICogSGVscGVyIHRvIGFkZCBvciByZW1vdmUgYSBjbGFzcyBmcm9tIGFuIGVsZW1lbnQgYmFzZWQg
b24gYSBjb25kaXRpb24uCisgICAqCisgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gZWxlbWVudCB0
aGUgZWxlbWVudCB0byBzZXQgdGhlIGNsYXNzIG9uCisgICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFz
c05hbWUgdGhlIENTUyBjbGFzc05hbWUKKyAgICogQHBhcmFtIHsqfSBib29sIGNvbmRpdGlvbiB0
byB3aGV0aGVyIHRvIGFkZCBvciByZW1vdmUgdGhlIGNsYXNzCisgICAqIEByZXR1cm4ge0RPTUVs
ZW1lbnR9IHRoZSBlbGVtZW50IHBhc3NlZCBpbgorICAgKi8KKyAgY29uZGl0aW9uQ2xhc3M6IGZ1
bmN0aW9uIGNvbmRpdGlvbkNsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSwgYm9vbCkgeworICAgIHJl
dHVybiAoYm9vbCA/IENTU0NvcmUuYWRkQ2xhc3MgOiBDU1NDb3JlLnJlbW92ZUNsYXNzKShlbGVt
ZW50LCBjbGFzc05hbWUpOworICB9LAorCisgIC8qKgorICAgKiBUZXN0cyB3aGV0aGVyIHRoZSBl
bGVtZW50IGhhcyB0aGUgY2xhc3Mgc3BlY2lmaWVkLgorICAgKgorICAgKiBAcGFyYW0ge0RPTU5v
ZGV8RE9NV2luZG93fSBlbGVtZW50IHRoZSBlbGVtZW50IHRvIGNoZWNrIHRoZSBjbGFzcyBvbgor
ICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lIHRoZSBDU1MgY2xhc3NOYW1lCisgICAqIEBy
ZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdGhlIGVsZW1lbnQgaGFzIHRoZSBjbGFzcywgZmFsc2Ug
aWYgbm90CisgICAqLworICBoYXNDbGFzczogZnVuY3Rpb24gaGFzQ2xhc3MoZWxlbWVudCwgY2xh
c3NOYW1lKSB7CisgICAgISEvXHMvLnRlc3QoY2xhc3NOYW1lKSA/ICJkZXZlbG9wbWVudCIgIT09
ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0NTUy5oYXNDbGFzcyB0YWtlcyBvbmx5
IGEgc2luZ2xlIGNsYXNzIG5hbWUuJykgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwOworICAg
IGlmIChlbGVtZW50LmNsYXNzTGlzdCkgeworICAgICAgcmV0dXJuICEhY2xhc3NOYW1lICYmIGVs
ZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7CisgICAgfQorICAgIHJldHVybiAo
JyAnICsgZWxlbWVudC5jbGFzc05hbWUgKyAnICcpLmluZGV4T2YoJyAnICsgY2xhc3NOYW1lICsg
JyAnKSA+IC0xOworICB9LAorCisgIC8qKgorICAgKiBUZXN0cyB3aGV0aGVyIHRoZSBlbGVtZW50
IG1hdGNoZXMgdGhlIHNlbGVjdG9yIHNwZWNpZmllZAorICAgKgorICAgKiBAcGFyYW0ge0RPTU5v
ZGV8RE9NV2luZG93fSBlbGVtZW50IHRoZSBlbGVtZW50IHRoYXQgd2UgYXJlIHF1ZXJ5aW5nCisg
ICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciB0aGUgQ1NTIHNlbGVjdG9yCisgICAqIEByZXR1
cm4ge2Jvb2xlYW59IHRydWUgaWYgdGhlIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IsIGZh
bHNlIGlmIG5vdAorICAgKi8KKyAgbWF0Y2hlc1NlbGVjdG9yOiBmdW5jdGlvbiBtYXRjaGVzU2Vs
ZWN0b3IoZWxlbWVudCwgc2VsZWN0b3IpIHsKKyAgICB2YXIgbWF0Y2hlc0ltcGwgPSBlbGVtZW50
Lm1hdGNoZXMgfHwgZWxlbWVudC53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHwgZWxlbWVudC5tb3pN
YXRjaGVzU2VsZWN0b3IgfHwgZWxlbWVudC5tc01hdGNoZXNTZWxlY3RvciB8fCBmdW5jdGlvbiAo
cykgeworICAgICAgcmV0dXJuIG1hdGNoZXNTZWxlY3Rvcl9TTE9XKGVsZW1lbnQsIHMpOworICAg
IH07CisgICAgcmV0dXJuIG1hdGNoZXNJbXBsLmNhbGwoZWxlbWVudCwgc2VsZWN0b3IpOworICB9
CisKK307CisKK21vZHVsZS5leHBvcnRzID0gQ1NTQ29yZTsKK30seyI0NyI6NDd9XSw0NDpbZnVu
Y3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAoYykgMjAx
My1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5z
ZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2Yg
dGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0
cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnku
CisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIGNhblVzZURPTSA9ICEhKHR5cGVvZiB3
aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kb2N1bWVudCAmJiB3aW5kb3cuZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCk7CisKKy8qKgorICogU2ltcGxlLCBsaWdodHdlaWdodCBtb2R1bGUg
YXNzaXN0aW5nIHdpdGggdGhlIGRldGVjdGlvbiBhbmQgY29udGV4dCBvZgorICogV29ya2VyLiBI
ZWxwcyBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYW5kIGFsbG93cyBjb2RlIHRvIHJlYXNv
biBhYm91dAorICogd2hldGhlciBvciBub3QgdGhleSBhcmUgaW4gYSBXb3JrZXIsIGV2ZW4gaWYg
dGhleSBuZXZlciBpbmNsdWRlIHRoZSBtYWluCisgKiBgUmVhY3RXb3JrZXJgIGRlcGVuZGVuY3ku
CisgKi8KK3ZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHsKKworICBjYW5Vc2VET006IGNhblVz
ZURPTSwKKworICBjYW5Vc2VXb3JrZXJzOiB0eXBlb2YgV29ya2VyICE9PSAndW5kZWZpbmVkJywK
KworICBjYW5Vc2VFdmVudExpc3RlbmVyczogY2FuVXNlRE9NICYmICEhKHdpbmRvdy5hZGRFdmVu
dExpc3RlbmVyIHx8IHdpbmRvdy5hdHRhY2hFdmVudCksCisKKyAgY2FuVXNlVmlld3BvcnQ6IGNh
blVzZURPTSAmJiAhIXdpbmRvdy5zY3JlZW4sCisKKyAgaXNJbldvcmtlcjogIWNhblVzZURPTSAv
LyBGb3Igbm93LCB0aGlzIGlzIHRydWUgLSBtaWdodCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KKwor
fTsKKworbW9kdWxlLmV4cG9ydHMgPSBFeGVjdXRpb25FbnZpcm9ubWVudDsKK30se31dLDQ1Oltm
dW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKyJ1c2Ugc3RyaWN0IjsKKworLyoqCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0
aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQK
KyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4g
dGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqIAorICovCisKK2Z1bmN0aW9uIG1ha2VFbXB0eUZ1
bmN0aW9uKGFyZykgeworICByZXR1cm4gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiBhcmc7Cisg
IH07Cit9CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBhY2NlcHRzIGFuZCBkaXNjYXJkcyBpbnB1
dHM7IGl0IGhhcyBubyBzaWRlIGVmZmVjdHMuIFRoaXMgaXMKKyAqIHByaW1hcmlseSB1c2VmdWwg
aWRpb21hdGljYWxseSBmb3Igb3ZlcnJpZGFibGUgZnVuY3Rpb24gZW5kcG9pbnRzIHdoaWNoCisg
KiBhbHdheXMgbmVlZCB0byBiZSBjYWxsYWJsZSwgc2luY2UgSlMgbGFja3MgYSBudWxsLWNhbGwg
aWRpb20gYWxhIENvY29hLgorICovCit2YXIgZW1wdHlGdW5jdGlvbiA9IGZ1bmN0aW9uIGVtcHR5
RnVuY3Rpb24oKSB7fTsKKworZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJucyA9IG1ha2VFbXB0eUZ1
bmN0aW9uOworZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0ZhbHNlID0gbWFrZUVtcHR5RnVuY3Rp
b24oZmFsc2UpOworZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc1RydWUgPSBtYWtlRW1wdHlGdW5j
dGlvbih0cnVlKTsKK2VtcHR5RnVuY3Rpb24udGhhdFJldHVybnNOdWxsID0gbWFrZUVtcHR5RnVu
Y3Rpb24obnVsbCk7CitlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVGhpcyA9IGZ1bmN0aW9uICgp
IHsKKyAgcmV0dXJuIHRoaXM7Cit9OworZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0FyZ3VtZW50
ID0gZnVuY3Rpb24gKGFyZykgeworICByZXR1cm4gYXJnOworfTsKKworbW9kdWxlLmV4cG9ydHMg
PSBlbXB0eUZ1bmN0aW9uOworfSx7fV0sNDY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9y
dHMpeworLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4K
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNl
bnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0
aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRF
TlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7
CisKK3ZhciBlbXB0eU9iamVjdCA9IHt9OworCitpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1
Y3Rpb24nKSB7CisgIE9iamVjdC5mcmVlemUoZW1wdHlPYmplY3QpOworfQorCittb2R1bGUuZXhw
b3J0cyA9IGVtcHR5T2JqZWN0OworfSx7fV0sNDc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4
cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIElu
Yy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBs
aWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQ
QVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmlj
dCc7CisKKy8qKgorICogVXNlIGludmFyaWFudCgpIHRvIGFzc2VydCBzdGF0ZSB3aGljaCB5b3Vy
IHByb2dyYW0gYXNzdW1lcyB0byBiZSB0cnVlLgorICoKKyAqIFByb3ZpZGUgc3ByaW50Zi1zdHls
ZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzCisgKiB0byBwcm92
aWRlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgYnJva2UgYW5kIHdoYXQgeW91IHdlcmUKKyAqIGV4
cGVjdGluZy4KKyAqCisgKiBUaGUgaW52YXJpYW50IG1lc3NhZ2Ugd2lsbCBiZSBzdHJpcHBlZCBp
biBwcm9kdWN0aW9uLCBidXQgdGhlIGludmFyaWFudAorICogd2lsbCByZW1haW4gdG8gZW5zdXJl
IGxvZ2ljIGRvZXMgbm90IGRpZmZlciBpbiBwcm9kdWN0aW9uLgorICovCisKK3ZhciB2YWxpZGF0
ZUZvcm1hdCA9IGZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0KGZvcm1hdCkge307CisKK2lmICgiZGV2
ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgdmFsaWRhdGVGb3JtYXQgPSBmdW5jdGlv
biB2YWxpZGF0ZUZvcm1hdChmb3JtYXQpIHsKKyAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQp
IHsKKyAgICAgIHRocm93IG5ldyBFcnJvcignaW52YXJpYW50IHJlcXVpcmVzIGFuIGVycm9yIG1l
c3NhZ2UgYXJndW1lbnQnKTsKKyAgICB9CisgIH07Cit9CisKK2Z1bmN0aW9uIGludmFyaWFudChj
b25kaXRpb24sIGZvcm1hdCwgYSwgYiwgYywgZCwgZSwgZikgeworICB2YWxpZGF0ZUZvcm1hdChm
b3JtYXQpOworCisgIGlmICghY29uZGl0aW9uKSB7CisgICAgdmFyIGVycm9yOworICAgIGlmIChm
b3JtYXQgPT09IHVuZGVmaW5lZCkgeworICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoJ01pbmlmaWVk
IGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50
ICcgKyAnZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3
YXJuaW5ncy4nKTsKKyAgICB9IGVsc2UgeworICAgICAgdmFyIGFyZ3MgPSBbYSwgYiwgYywgZCwg
ZSwgZl07CisgICAgICB2YXIgYXJnSW5kZXggPSAwOworICAgICAgZXJyb3IgPSBuZXcgRXJyb3Io
Zm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIGFyZ3Nb
YXJnSW5kZXgrK107CisgICAgICB9KSk7CisgICAgICBlcnJvci5uYW1lID0gJ0ludmFyaWFudCBW
aW9sYXRpb24nOworICAgIH0KKworICAgIGVycm9yLmZyYW1lc1RvUG9wID0gMTsgLy8gd2UgZG9u
J3QgY2FyZSBhYm91dCBpbnZhcmlhbnQncyBvd24gZnJhbWUKKyAgICB0aHJvdyBlcnJvcjsKKyAg
fQorfQorCittb2R1bGUuZXhwb3J0cyA9IGludmFyaWFudDsKK30se31dLDQ4OltmdW5jdGlvbihf
ZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNl
bnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
c291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5k
IGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNv
dXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBi
ZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisg
KiBAdHlwZWNoZWNrcworICogCisgKi8KKworLyplc2xpbnQtZGlzYWJsZSBuby1zZWxmLWNvbXBh
cmUgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJv
dG90eXBlLmhhc093blByb3BlcnR5OworCisvKioKKyAqIGlubGluZWQgT2JqZWN0LmlzIHBvbHlm
aWxsIHRvIGF2b2lkIHJlcXVpcmluZyBjb25zdW1lcnMgc2hpcCB0aGVpciBvd24KKyAqIGh0dHBz
Oi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJl
bmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pcworICovCitmdW5jdGlvbiBpcyh4LCB5KSB7Cisg
IC8vIFNhbWVWYWx1ZSBhbGdvcml0aG0KKyAgaWYgKHggPT09IHkpIHsKKyAgICAvLyBTdGVwcyAx
LTUsIDctMTAKKyAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMAorICAgIC8vIEFkZGVkIHRo
ZSBub256ZXJvIHkgY2hlY2sgdG8gbWFrZSBGbG93IGhhcHB5LCBidXQgaXQgaXMgcmVkdW5kYW50
CisgICAgcmV0dXJuIHggIT09IDAgfHwgeSAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7CisgIH0g
ZWxzZSB7CisgICAgLy8gU3RlcCA2LmE6IE5hTiA9PSBOYU4KKyAgICByZXR1cm4geCAhPT0geCAm
JiB5ICE9PSB5OworICB9Cit9CisKKy8qKgorICogUGVyZm9ybXMgZXF1YWxpdHkgYnkgaXRlcmF0
aW5nIHRocm91Z2gga2V5cyBvbiBhbiBvYmplY3QgYW5kIHJldHVybmluZyBmYWxzZQorICogd2hl
biBhbnkga2V5IGhhcyB2YWx1ZXMgd2hpY2ggYXJlIG5vdCBzdHJpY3RseSBlcXVhbCBiZXR3ZWVu
IHRoZSBhcmd1bWVudHMuCisgKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgdmFsdWVzIG9mIGFsbCBr
ZXlzIGFyZSBzdHJpY3RseSBlcXVhbC4KKyAqLworZnVuY3Rpb24gc2hhbGxvd0VxdWFsKG9iakEs
IG9iakIpIHsKKyAgaWYgKGlzKG9iakEsIG9iakIpKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0K
KworICBpZiAodHlwZW9mIG9iakEgIT09ICdvYmplY3QnIHx8IG9iakEgPT09IG51bGwgfHwgdHlw
ZW9mIG9iakIgIT09ICdvYmplY3QnIHx8IG9iakIgPT09IG51bGwpIHsKKyAgICByZXR1cm4gZmFs
c2U7CisgIH0KKworICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhvYmpBKTsKKyAgdmFyIGtleXNC
ID0gT2JqZWN0LmtleXMob2JqQik7CisKKyAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVu
Z3RoKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgLy8gVGVzdCBmb3IgQSdzIGtleXMg
ZGlmZmVyZW50IGZyb20gQi4KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzQS5sZW5ndGg7IGkr
KykgeworICAgIGlmICghaGFzT3duUHJvcGVydHkuY2FsbChvYmpCLCBrZXlzQVtpXSkgfHwgIWlz
KG9iakFba2V5c0FbaV1dLCBvYmpCW2tleXNBW2ldXSkpIHsKKyAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgIH0KKworICByZXR1cm4gdHJ1ZTsKK30KKworbW9kdWxlLmV4cG9ydHMgPSBzaGFs
bG93RXF1YWw7Cit9LHt9XSw0OTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhl
IEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50Cisg
KiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRo
ZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgZW1wdHlG
dW5jdGlvbiA9IF9kZXJlcV8oNDUpOworCisvKioKKyAqIFNpbWlsYXIgdG8gaW52YXJpYW50IGJ1
dCBvbmx5IGxvZ3MgYSB3YXJuaW5nIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IG1ldC4KKyAqIFRo
aXMgY2FuIGJlIHVzZWQgdG8gbG9nIGlzc3VlcyBpbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMg
aW4gY3JpdGljYWwKKyAqIHBhdGhzLiBSZW1vdmluZyB0aGUgbG9nZ2luZyBjb2RlIGZvciBwcm9k
dWN0aW9uIGVudmlyb25tZW50cyB3aWxsIGtlZXAgdGhlCisgKiBzYW1lIGxvZ2ljIGFuZCBmb2xs
b3cgdGhlIHNhbWUgY29kZSBwYXRocy4KKyAqLworCit2YXIgd2FybmluZyA9IGVtcHR5RnVuY3Rp
b247CisKK2lmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgKGZ1bmN0aW9u
ICgpIHsKKyAgICB2YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGZvcm1h
dCkgeworICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJh
eShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsr
KSB7CisgICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldOworICAgICAgfQor
CisgICAgICB2YXIgYXJnSW5kZXggPSAwOworICAgICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzog
JyArIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBh
cmdzW2FyZ0luZGV4KytdOworICAgICAgfSk7CisgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09
ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7CisgICAgICB9
CisgICAgICB0cnkgeworICAgICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3Qg
LS0tCisgICAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNv
IHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFjaworICAgICAgICAvLyB0byBmaW5kIHRoZSBjYWxs
c2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS4KKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKG1lc3NhZ2UpOworICAgICAgfSBjYXRjaCAoeCkge30KKyAgICB9OworCisgICAgd2Fy
bmluZyA9IGZ1bmN0aW9uIHdhcm5pbmcoY29uZGl0aW9uLCBmb3JtYXQpIHsKKyAgICAgIGlmIChm
b3JtYXQgPT09IHVuZGVmaW5lZCkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2B3YXJuaW5n
KGNvbmRpdGlvbiwgZm9ybWF0LCAuLi5hcmdzKWAgcmVxdWlyZXMgYSB3YXJuaW5nICcgKyAnbWVz
c2FnZSBhcmd1bWVudCcpOworICAgICAgfQorCisgICAgICBpZiAoZm9ybWF0LmluZGV4T2YoJ0Zh
aWxlZCBDb21wb3NpdGUgcHJvcFR5cGU6ICcpID09PSAwKSB7CisgICAgICAgIHJldHVybjsgLy8g
SWdub3JlIENvbXBvc2l0ZUNvbXBvbmVudCBwcm9wdHlwZSBjaGVjay4KKyAgICAgIH0KKworICAg
ICAgaWYgKCFjb25kaXRpb24pIHsKKyAgICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMu
bGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjIgPiAyID8gX2xlbjIgLSAyIDogMCksIF9rZXkyID0g
MjsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykgeworICAgICAgICAgIGFyZ3NbX2tleTIgLSAyXSA9
IGFyZ3VtZW50c1tfa2V5Ml07CisgICAgICAgIH0KKworICAgICAgICBwcmludFdhcm5pbmcuYXBw
bHkodW5kZWZpbmVkLCBbZm9ybWF0XS5jb25jYXQoYXJncykpOworICAgICAgfQorICAgIH07Cisg
IH0pKCk7Cit9CisKK21vZHVsZS5leHBvcnRzID0gd2FybmluZzsKK30seyI0NSI6NDV9XSw1MDpb
ZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKgorb2JqZWN0LWFzc2lnbgorKGMp
IFNpbmRyZSBTb3JodXMKK0BsaWNlbnNlIE1JVAorKi8KKworJ3VzZSBzdHJpY3QnOworLyogZXNs
aW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi8KK3ZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMg
PSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzOwordmFyIGhhc093blByb3BlcnR5ID0gT2Jq
ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTsKK3ZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2Jq
ZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTsKKworZnVuY3Rpb24gdG9PYmplY3Qo
dmFsKSB7CisgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkgeworICAg
ICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQg
d2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpOworICAgIH0KKworICAgIHJldHVybiBPYmplY3QodmFs
KTsKK30KKworZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkgeworICAgIHRyeSB7CisgICAgICAg
IGlmICghT2JqZWN0LmFzc2lnbikgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVy
IGluIG9sZGVyIFY4IHZlcnNpb25zLgorCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1
bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMTgKKyAgICAgICAgdmFyIHRlc3QxID0gbmV3
IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVycwor
ICAgICAgICB0ZXN0MVs1XSA9ICdkZSc7CisgICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVy
dHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1JykgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lz
c3Vlcy9kZXRhaWw/aWQ9MzA1NgorICAgICAgICB2YXIgdGVzdDIgPSB7fTsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisgICAgICAgICAgICB0ZXN0MlsnXycgKyBTdHJp
bmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIG9yZGVyMiA9
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHsKKyAg
ICAgICAgICAgIHJldHVybiB0ZXN0MltuXTsKKyAgICAgICAgfSk7CisgICAgICAgIGlmIChvcmRl
cjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5JykgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisKKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4
L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NgorICAgICAgICB2YXIgdGVzdDMgPSB7fTsKKyAgICAgICAg
J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVy
KSB7CisgICAgICAgICAgICB0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyOworICAgICAgICB9KTsKKyAg
ICAgICAgaWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykg
IT09CisgICAgICAgICAgICAgICAgJ2FiY2RlZmdoaWprbG1ub3BxcnN0JykgeworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fSBjYXRjaCAoZXJyKSB7CisgICAgICAgIC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFi
b3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK21vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmpl
Y3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7CisgICAgdmFyIGZyb207Cisg
ICAgdmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTsKKyAgICB2YXIgc3ltYm9sczsKKworICAgIGZv
ciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7CisgICAgICAgIGZyb20g
PSBPYmplY3QoYXJndW1lbnRzW3NdKTsKKworICAgICAgICBmb3IgKHZhciBrZXkgaW4gZnJvbSkg
eworICAgICAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkgeworICAg
ICAgICAgICAgICAgIHRvW2tleV0gPSBmcm9tW2tleV07CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7CisgICAgICAgICAgICBz
eW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pOworICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYg
KHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkgeworICAgICAgICAgICAg
ICAgICAgICB0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRvOwor
fTsKKworfSx7fV0sNTE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisg
KiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBC
U0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICog
b2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUg
c2FtZSBkaXJlY3RvcnkuCisgKi8KKworJ3VzZSBzdHJpY3QnOworCitpZiAoImRldmVsb3BtZW50
IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgIHZhciBpbnZhcmlhbnQgPSBfZGVyZXFfKDQ3KTsKKyAg
dmFyIHdhcm5pbmcgPSBfZGVyZXFfKDQ5KTsKKyAgdmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0g
X2RlcmVxXyg1NCk7CisgIHZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTsKK30KKworLyoqCisg
KiBBc3NlcnQgdGhhdCB0aGUgdmFsdWVzIG1hdGNoIHdpdGggdGhlIHR5cGUgc3BlY3MuCisgKiBF
cnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS4K
KyAqCisgKiBAcGFyYW0ge29iamVjdH0gdHlwZVNwZWNzIE1hcCBvZiBuYW1lIHRvIGEgUmVhY3RQ
cm9wVHlwZQorICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5l
ZWQgdG8gYmUgdHlwZS1jaGVja2VkCisgKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5nLiAi
cHJvcCIsICJjb250ZXh0IiwgImNoaWxkIGNvbnRleHQiCisgKiBAcGFyYW0ge3N0cmluZ30gY29t
cG9uZW50TmFtZSBOYW1lIG9mIHRoZSBjb21wb25lbnQgZm9yIGVycm9yIG1lc3NhZ2VzLgorICog
QHBhcmFtIHs/RnVuY3Rpb259IGdldFN0YWNrIFJldHVybnMgdGhlIGNvbXBvbmVudCBzdGFjay4K
KyAqIEBwcml2YXRlCisgKi8KK2Z1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFs
dWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHsKKyAgaWYgKCJkZXZlbG9w
bWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0
eXBlU3BlY3MpIHsKKyAgICAgIGlmICh0eXBlU3BlY3MuaGFzT3duUHJvcGVydHkodHlwZVNwZWNO
YW1lKSkgeworICAgICAgICB2YXIgZXJyb3I7CisgICAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0
aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvCisgICAgICAg
IC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNv
IHdlIGxvZyBpdC4KKyAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAs
IHdlJ2xsIGxldCB0aGVtIHRocm93LgorICAgICAgICB0cnkgeworICAgICAgICAgIC8vIFRoaXMg
aXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUg
c2FtZQorICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhj
ZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS4KKyAgICAgICAgICBpbnZhcmlhbnQodHlwZW9mIHR5
cGVTcGVjc1t0eXBlU3BlY05hbWVdID09PSAnZnVuY3Rpb24nLCAnJXM6ICVzIHR5cGUgYCVzYCBp
cyBpbnZhbGlkOyBpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSAnICsgJ1JlYWN0
LlByb3BUeXBlcy4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0
eXBlU3BlY05hbWUpOworICAgICAgICAgIGVycm9yID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0o
dmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCBSZWFj
dFByb3BUeXBlc1NlY3JldCk7CisgICAgICAgIH0gY2F0Y2ggKGV4KSB7CisgICAgICAgICAgZXJy
b3IgPSBleDsKKyAgICAgICAgfQorICAgICAgICB3YXJuaW5nKCFlcnJvciB8fCBlcnJvciBpbnN0
YW5jZW9mIEVycm9yLCAnJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcyBgJXNgIGlzIGludmFs
aWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3Ig
YW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAlcy4gJyArICdZb3UgbWF5IGhhdmUgZm9yZ290dGVu
IHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICsgJ2NyZWF0b3IgKGFy
cmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArICdz
aGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3Qg
Y2xhc3MnLCBsb2NhdGlvbiwgdHlwZVNwZWNOYW1lLCB0eXBlb2YgZXJyb3IpOworICAgICAgICBp
ZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlw
ZUZhaWx1cmVzKSkgeworICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25j
ZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZQorICAgICAgICAgIC8vIHNh
bWUgZXJyb3IuCisgICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0g
dHJ1ZTsKKworICAgICAgICAgIHZhciBzdGFjayA9IGdldFN0YWNrID8gZ2V0U3RhY2soKSA6ICcn
OworCisgICAgICAgICAgd2FybmluZyhmYWxzZSwgJ0ZhaWxlZCAlcyB0eXBlOiAlcyVzJywgbG9j
YXRpb24sIGVycm9yLm1lc3NhZ2UsIHN0YWNrICE9IG51bGwgPyBzdGFjayA6ICcnKTsKKyAgICAg
ICAgfQorICAgICAgfQorICAgIH0KKyAgfQorfQorCittb2R1bGUuZXhwb3J0cyA9IGNoZWNrUHJv
cFR5cGVzOworCit9LHsiNDciOjQ3LCI0OSI6NDksIjU0Ijo1NH1dLDUyOltmdW5jdGlvbihfZGVy
ZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFj
ZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2Ug
Y29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhl
CisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5k
IGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICovCisKKyd1c2Ug
c3RyaWN0JzsKKworLy8gUmVhY3QgMTUuNSByZWZlcmVuY2VzIHRoaXMgbW9kdWxlLCBhbmQgYXNz
dW1lcyBQcm9wVHlwZXMgYXJlIHN0aWxsIGNhbGxhYmxlIGluIHByb2R1Y3Rpb24uCisvLyBUaGVy
ZWZvcmUgd2UgcmUtZXhwb3J0IGRldmVsb3BtZW50LW9ubHkgdmVyc2lvbiB3aXRoIGFsbCB0aGUg
UHJvcFR5cGVzIGNoZWNrcyBoZXJlLgorLy8gSG93ZXZlciBpZiBvbmUgaXMgbWlncmF0aW5nIHRv
IHRoZSBgcHJvcC10eXBlc2AgbnBtIGxpYnJhcnksIHRoZXkgd2lsbCBnbyB0aHJvdWdoIHRoZQor
Ly8gYGluZGV4LmpzYCBlbnRyeSBwb2ludCwgYW5kIGl0IHdpbGwgYnJhbmNoIGRlcGVuZGluZyBv
biB0aGUgZW52aXJvbm1lbnQuCit2YXIgZmFjdG9yeSA9IF9kZXJlcV8oNTMpOworbW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbihpc1ZhbGlkRWxlbWVudCkgeworICAvLyBJdCBpcyBzdGlsbCBhbGxv
d2VkIGluIDE1LjUuCisgIHZhciB0aHJvd09uRGlyZWN0QWNjZXNzID0gZmFsc2U7CisgIHJldHVy
biBmYWN0b3J5KGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTsKK307CisKK30s
eyI1MyI6NTN9XSw1MzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAq
IENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJT
RC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290
IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBv
ZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBz
YW1lIGRpcmVjdG9yeS4KKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBlbXB0eUZ1bmN0aW9u
ID0gX2RlcmVxXyg0NSk7Cit2YXIgaW52YXJpYW50ID0gX2RlcmVxXyg0Nyk7Cit2YXIgd2Fybmlu
ZyA9IF9kZXJlcV8oNDkpOworCit2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSBfZGVyZXFfKDU0
KTsKK3ZhciBjaGVja1Byb3BUeXBlcyA9IF9kZXJlcV8oNTEpOworCittb2R1bGUuZXhwb3J0cyA9
IGZ1bmN0aW9uKGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKSB7CisgIC8qIGds
b2JhbCBTeW1ib2wgKi8KKyAgdmFyIElURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09
ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yOworICB2YXIgRkFVWF9JVEVSQVRPUl9TWU1C
T0wgPSAnQEBpdGVyYXRvcic7IC8vIEJlZm9yZSBTeW1ib2wgc3BlYy4KKworICAvKioKKyAgICog
UmV0dXJucyB0aGUgaXRlcmF0b3IgbWV0aG9kIGZ1bmN0aW9uIGNvbnRhaW5lZCBvbiB0aGUgaXRl
cmFibGUgb2JqZWN0LgorICAgKgorICAgKiBCZSBzdXJlIHRvIGludm9rZSB0aGUgZnVuY3Rpb24g
d2l0aCB0aGUgaXRlcmFibGUgYXMgY29udGV4dDoKKyAgICoKKyAgICogICAgIHZhciBpdGVyYXRv
ckZuID0gZ2V0SXRlcmF0b3JGbihteUl0ZXJhYmxlKTsKKyAgICogICAgIGlmIChpdGVyYXRvckZu
KSB7CisgICAqICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChteUl0ZXJhYmxl
KTsKKyAgICogICAgICAgLi4uCisgICAqICAgICB9CisgICAqCisgICAqIEBwYXJhbSB7P29iamVj
dH0gbWF5YmVJdGVyYWJsZQorICAgKiBAcmV0dXJuIHs/ZnVuY3Rpb259CisgICAqLworICBmdW5j
dGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHsKKyAgICB2YXIgaXRlcmF0b3JGbiA9
IG1heWJlSXRlcmFibGUgJiYgKElURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW0lURVJB
VE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF0pOworICAg
IGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgcmV0dXJuIGl0
ZXJhdG9yRm47CisgICAgfQorICB9CisKKyAgLyoqCisgICAqIENvbGxlY3Rpb24gb2YgbWV0aG9k
cyB0aGF0IGFsbG93IGRlY2xhcmF0aW9uIGFuZCB2YWxpZGF0aW9uIG9mIHByb3BzIHRoYXQgYXJl
CisgICAqIHN1cHBsaWVkIHRvIFJlYWN0IGNvbXBvbmVudHMuIEV4YW1wbGUgdXNhZ2U6CisgICAq
CisgICAqICAgdmFyIFByb3BzID0gcmVxdWlyZSgnUmVhY3RQcm9wVHlwZXMnKTsKKyAgICogICB2
YXIgTXlBcnRpY2xlID0gUmVhY3QuY3JlYXRlQ2xhc3MoeworICAgKiAgICAgcHJvcFR5cGVzOiB7
CisgICAqICAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBwcm9wIG5hbWVkICJkZXNjcmlwdGlv
biIuCisgICAqICAgICAgIGRlc2NyaXB0aW9uOiBQcm9wcy5zdHJpbmcsCisgICAqCisgICAqICAg
ICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkICJjYXRlZ29yeSIuCisgICAqICAgICAg
IGNhdGVnb3J5OiBQcm9wcy5vbmVPZihbJ05ld3MnLCdQaG90b3MnXSkuaXNSZXF1aXJlZCwKKyAg
ICoKKyAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkICJkaWFsb2ciIHRoYXQgcmVxdWlyZXMgYW4g
aW5zdGFuY2Ugb2YgRGlhbG9nLgorICAgKiAgICAgICBkaWFsb2c6IFByb3BzLmluc3RhbmNlT2Yo
RGlhbG9nKS5pc1JlcXVpcmVkCisgICAqICAgICB9LAorICAgKiAgICAgcmVuZGVyOiBmdW5jdGlv
bigpIHsgLi4uIH0KKyAgICogICB9KTsKKyAgICoKKyAgICogQSBtb3JlIGZvcm1hbCBzcGVjaWZp
Y2F0aW9uIG9mIGhvdyB0aGVzZSBtZXRob2RzIGFyZSB1c2VkOgorICAgKgorICAgKiAgIHR5cGUg
Oj0gYXJyYXl8Ym9vbHxmdW5jfG9iamVjdHxudW1iZXJ8c3RyaW5nfG9uZU9mKFsuLi5dKXxpbnN0
YW5jZU9mKC4uLikKKyAgICogICBkZWNsIDo9IFJlYWN0UHJvcFR5cGVzLnt0eXBlfSguaXNSZXF1
aXJlZCk/CisgICAqCisgICAqIEVhY2ggYW5kIGV2ZXJ5IGRlY2xhcmF0aW9uIHByb2R1Y2VzIGEg
ZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUuIFRoaXMKKyAgICogYWxsb3dzIHRoZSBj
cmVhdGlvbiBvZiBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbnMuIEZvciBleGFtcGxlOgorICAg
KgorICAgKiAgdmFyIE15TGluayA9IFJlYWN0LmNyZWF0ZUNsYXNzKHsKKyAgICogICAgcHJvcFR5
cGVzOiB7CisgICAqICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIG9yIFVSSSBwcm9wIG5hbWVk
ICJocmVmIi4KKyAgICogICAgICBocmVmOiBmdW5jdGlvbihwcm9wcywgcHJvcE5hbWUsIGNvbXBv
bmVudE5hbWUpIHsKKyAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07
CisgICAqICAgICAgICBpZiAocHJvcFZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHByb3BWYWx1ZSAh
PT0gJ3N0cmluZycgJiYKKyAgICogICAgICAgICAgICAhKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVS
SSkpIHsKKyAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcigKKyAgICogICAgICAgICAgICAn
RXhwZWN0ZWQgYSBzdHJpbmcgb3IgYW4gVVJJIGZvciAnICsgcHJvcE5hbWUgKyAnIGluICcgKwor
ICAgKiAgICAgICAgICAgIGNvbXBvbmVudE5hbWUKKyAgICogICAgICAgICAgKTsKKyAgICogICAg
ICAgIH0KKyAgICogICAgICB9CisgICAqICAgIH0sCisgICAqICAgIHJlbmRlcjogZnVuY3Rpb24o
KSB7Li4ufQorICAgKiAgfSk7CisgICAqCisgICAqIEBpbnRlcm5hbAorICAgKi8KKworICB2YXIg
QU5PTllNT1VTID0gJzw8YW5vbnltb3VzPj4nOworCisgIC8vIEltcG9ydGFudCEKKyAgLy8gS2Vl
cCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5
V2l0aFRocm93aW5nU2hpbXMuanNgLgorICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7CisgICAgYXJy
YXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLAorICAgIGJvb2w6IGNyZWF0
ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdib29sZWFuJyksCisgICAgZnVuYzogY3JlYXRlUHJpbWl0
aXZlVHlwZUNoZWNrZXIoJ2Z1bmN0aW9uJyksCisgICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVU
eXBlQ2hlY2tlcignbnVtYmVyJyksCisgICAgb2JqZWN0OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hl
Y2tlcignb2JqZWN0JyksCisgICAgc3RyaW5nOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcign
c3RyaW5nJyksCisgICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9s
JyksCisKKyAgICBhbnk6IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksCisgICAgYXJyYXlPZjogY3Jl
YXRlQXJyYXlPZlR5cGVDaGVja2VyLAorICAgIGVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRUeXBlQ2hl
Y2tlcigpLAorICAgIGluc3RhbmNlT2Y6IGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIsCisgICAg
bm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSwKKyAgICBvYmplY3RPZjogY3JlYXRlT2JqZWN0T2ZU
eXBlQ2hlY2tlciwKKyAgICBvbmVPZjogY3JlYXRlRW51bVR5cGVDaGVja2VyLAorICAgIG9uZU9m
VHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlciwKKyAgICBzaGFwZTogY3JlYXRlU2hhcGVUeXBl
Q2hlY2tlcgorICB9OworCisgIC8qKgorICAgKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0
byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duCisgICAqIGh0dHBzOi8v
ZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNl
L0dsb2JhbF9PYmplY3RzL09iamVjdC9pcworICAgKi8KKyAgLyplc2xpbnQtZGlzYWJsZSBuby1z
ZWxmLWNvbXBhcmUqLworICBmdW5jdGlvbiBpcyh4LCB5KSB7CisgICAgLy8gU2FtZVZhbHVlIGFs
Z29yaXRobQorICAgIGlmICh4ID09PSB5KSB7CisgICAgICAvLyBTdGVwcyAxLTUsIDctMTAKKyAg
ICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wCisgICAgICByZXR1cm4geCAhPT0gMCB8fCAx
IC8geCA9PT0gMSAvIHk7CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0g
TmFOCisgICAgICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5OworICAgIH0KKyAgfQorICAvKmVz
bGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlKi8KKworICAvKioKKyAgICogV2UgdXNlIGFuIEVy
cm9yLWxpa2Ugb2JqZWN0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFzIHBlb3BsZSBtYXkg
Y2FsbAorICAgKiBQcm9wVHlwZXMgZGlyZWN0bHkgYW5kIGluc3BlY3QgdGhlaXIgb3V0cHV0LiBI
b3dldmVyLCB3ZSBkb24ndCB1c2UgcmVhbAorICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3Qg
aW5zcGVjdCB0aGVpciBzdGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtCisgICAqIGlzIHBy
b2hpYml0aXZlbHkgZXhwZW5zaXZlIGlmIHRoZXkgYXJlIGNyZWF0ZWQgdG9vIG9mdGVuLCBzdWNo
IGFzIHdoYXQKKyAgICogaGFwcGVucyBpbiBvbmVPZlR5cGUoKSBmb3IgYW55IHR5cGUgYmVmb3Jl
IHRoZSBvbmUgdGhhdCBtYXRjaGVkLgorICAgKi8KKyAgZnVuY3Rpb24gUHJvcFR5cGVFcnJvciht
ZXNzYWdlKSB7CisgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKKyAgICB0aGlzLnN0YWNrID0g
Jyc7CisgIH0KKyAgLy8gTWFrZSBgaW5zdGFuY2VvZiBFcnJvcmAgc3RpbGwgd29yayBmb3IgcmV0
dXJuZWQgZXJyb3JzLgorICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlw
ZTsKKworICBmdW5jdGlvbiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkgewor
ICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgIHZhciBtYW51
YWxQcm9wVHlwZUNhbGxDYWNoZSA9IHt9OworICAgIH0KKyAgICBmdW5jdGlvbiBjaGVja1R5cGUo
aXNSZXF1aXJlZCwgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJv
cEZ1bGxOYW1lLCBzZWNyZXQpIHsKKyAgICAgIGNvbXBvbmVudE5hbWUgPSBjb21wb25lbnROYW1l
IHx8IEFOT05ZTU9VUzsKKyAgICAgIHByb3BGdWxsTmFtZSA9IHByb3BGdWxsTmFtZSB8fCBwcm9w
TmFtZTsKKworICAgICAgaWYgKHNlY3JldCAhPT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHsKKyAg
ICAgICAgaWYgKHRocm93T25EaXJlY3RBY2Nlc3MpIHsKKyAgICAgICAgICAvLyBOZXcgYmVoYXZp
b3Igb25seSBmb3IgdXNlcnMgb2YgYHByb3AtdHlwZXNgIHBhY2thZ2UKKyAgICAgICAgICBpbnZh
cmlhbnQoCisgICAgICAgICAgICBmYWxzZSwKKyAgICAgICAgICAgICdDYWxsaW5nIFByb3BUeXBl
cyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVz
YCBwYWNrYWdlLiAnICsKKyAgICAgICAgICAgICdVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBl
cygpYCB0byBjYWxsIHRoZW0uICcgKworICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8v
ZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnCisgICAgICAgICAgKTsKKyAgICAgICAgfSBlbHNl
IGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09
ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgLy8gT2xkIGJlaGF2aW9yIGZvciBwZW9wbGUgdXNp
bmcgUmVhY3QuUHJvcFR5cGVzCisgICAgICAgICAgdmFyIGNhY2hlS2V5ID0gY29tcG9uZW50TmFt
ZSArICc6JyArIHByb3BOYW1lOworICAgICAgICAgIGlmICghbWFudWFsUHJvcFR5cGVDYWxsQ2Fj
aGVbY2FjaGVLZXldKSB7CisgICAgICAgICAgICB3YXJuaW5nKAorICAgICAgICAgICAgICBmYWxz
ZSwKKyAgICAgICAgICAgICAgJ1lvdSBhcmUgbWFudWFsbHkgY2FsbGluZyBhIFJlYWN0LlByb3BU
eXBlcyB2YWxpZGF0aW9uICcgKworICAgICAgICAgICAgICAnZnVuY3Rpb24gZm9yIHRoZSBgJXNg
IHByb3Agb24gYCVzYC4gVGhpcyBpcyBkZXByZWNhdGVkICcgKworICAgICAgICAgICAgICAnYW5k
IHdpbGwgdGhyb3cgaW4gdGhlIHN0YW5kYWxvbmUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgKwor
ICAgICAgICAgICAgICAnWW91IG1heSBiZSBzZWVpbmcgdGhpcyB3YXJuaW5nIGR1ZSB0byBhIHRo
aXJkLXBhcnR5IFByb3BUeXBlcyAnICsKKyAgICAgICAgICAgICAgJ2xpYnJhcnkuIFNlZSBodHRw
czovL2ZiLm1lL3JlYWN0LXdhcm5pbmctZG9udC1jYWxsLXByb3B0eXBlcyAnICsgJ2ZvciBkZXRh
aWxzLicsCisgICAgICAgICAgICAgIHByb3BGdWxsTmFtZSwKKyAgICAgICAgICAgICAgY29tcG9u
ZW50TmFtZQorICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlQ2FsbENh
Y2hlW2NhY2hlS2V5XSA9IHRydWU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9Cisg
ICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHsKKyAgICAgICAgaWYgKGlzUmVxdWly
ZWQpIHsKKyAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7CisgICAgICAg
ICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsg
cHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkICcgKyAoJ2luIGAnICsgY29t
cG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGBudWxsYC4nKSk7CisgICAgICAgICAg
fQorICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiAr
ICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgn
YCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgcmV0dXJuIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRp
b24sIHByb3BGdWxsTmFtZSk7CisgICAgICB9CisgICAgfQorCisgICAgdmFyIGNoYWluZWRDaGVj
a1R5cGUgPSBjaGVja1R5cGUuYmluZChudWxsLCBmYWxzZSk7CisgICAgY2hhaW5lZENoZWNrVHlw
ZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7CisKKyAgICByZXR1cm4g
Y2hhaW5lZENoZWNrVHlwZTsKKyAgfQorCisgIGZ1bmN0aW9uIGNyZWF0ZVByaW1pdGl2ZVR5cGVD
aGVja2VyKGV4cGVjdGVkVHlwZSkgeworICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9w
TmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7Cisg
ICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdOworICAgICAgdmFyIHByb3BUeXBl
ID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTsKKyAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0
ZWRUeXBlKSB7CisgICAgICAgIC8vIGBwcm9wVmFsdWVgIGJlaW5nIGluc3RhbmNlIG9mLCBzYXks
IGRhdGUvcmVnZXhwLCBwYXNzIHRoZSAnb2JqZWN0JworICAgICAgICAvLyBjaGVjaywgYnV0IHdl
IGNhbiBvZmZlciBhIG1vcmUgcHJlY2lzZSBlcnJvciBtZXNzYWdlIGhlcmUgcmF0aGVyIHRoYW4K
KyAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLgorICAgICAgICB2YXIgcHJlY2lzZVR5cGUg
PSBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpOworCisgICAgICAgIHJldHVybiBuZXcgUHJvcFR5
cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Ag
b2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21w
b25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicp
KTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICByZXR1cm4gY3JlYXRl
Q2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpOworICB9CisKKyAgZnVuY3Rpb24gY3JlYXRl
QW55VHlwZUNoZWNrZXIoKSB7CisgICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2Vy
KGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNOdWxsKTsKKyAgfQorCisgIGZ1bmN0aW9uIGNyZWF0
ZUFycmF5T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikgeworICAgIGZ1bmN0aW9uIHZhbGlkYXRl
KHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkg
eworICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykgeworICAgICAg
ICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsg
J2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BU
eXBlIG5vdGF0aW9uIGluc2lkZSBhcnJheU9mLicpOworICAgICAgfQorICAgICAgdmFyIHByb3BW
YWx1ZSA9IHByb3BzW3Byb3BOYW1lXTsKKyAgICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wVmFs
dWUpKSB7CisgICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7Cisg
ICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAn
IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Ag
c3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5Licp
KTsKKyAgICAgIH0KKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29t
cG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0
UHJvcFR5cGVzU2VjcmV0KTsKKyAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHsK
KyAgICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVy
biBudWxsOworICAgIH0KKyAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFs
aWRhdGUpOworICB9CisKKyAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCkgewor
ICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9j
YXRpb24sIHByb3BGdWxsTmFtZSkgeworICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BO
YW1lXTsKKyAgICAgIGlmICghaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkgeworICAgICAgICB2
YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpOworICAgICAgICByZXR1cm4gbmV3
IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFt
ZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsg
Y29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpOwor
ICAgICAgfQorICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBjcmVhdGVDaGFp
bmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7CisgIH0KKworICBmdW5jdGlvbiBjcmVhdGVJbnN0
YW5jZVR5cGVDaGVja2VyKGV4cGVjdGVkQ2xhc3MpIHsKKyAgICBmdW5jdGlvbiB2YWxpZGF0ZShw
cm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHsK
KyAgICAgIGlmICghKHByb3BzW3Byb3BOYW1lXSBpbnN0YW5jZW9mIGV4cGVjdGVkQ2xhc3MpKSB7
CisgICAgICAgIHZhciBleHBlY3RlZENsYXNzTmFtZSA9IGV4cGVjdGVkQ2xhc3MubmFtZSB8fCBB
Tk9OWU1PVVM7CisgICAgICAgIHZhciBhY3R1YWxDbGFzc05hbWUgPSBnZXRDbGFzc05hbWUocHJv
cHNbcHJvcE5hbWVdKTsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlk
ICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2An
ICsgYWN0dWFsQ2xhc3NOYW1lICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsg
J2AsIGV4cGVjdGVkICcpICsgKCdpbnN0YW5jZSBvZiBgJyArIGV4cGVjdGVkQ2xhc3NOYW1lICsg
J2AuJykpOworICAgICAgfQorICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBj
cmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7CisgIH0KKworICBmdW5jdGlvbiBj
cmVhdGVFbnVtVHlwZUNoZWNrZXIoZXhwZWN0ZWRWYWx1ZXMpIHsKKyAgICBpZiAoIUFycmF5Lmlz
QXJyYXkoZXhwZWN0ZWRWYWx1ZXMpKSB7CisgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVj
dGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVP
ZiwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7CisgICAgICByZXR1
cm4gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGw7CisgICAgfQorCisgICAgZnVuY3Rpb24g
dmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1
bGxOYW1lKSB7CisgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdOworICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZFZhbHVlcy5sZW5ndGg7IGkrKykgeworICAgICAg
ICBpZiAoaXMocHJvcFZhbHVlLCBleHBlY3RlZFZhbHVlc1tpXSkpIHsKKyAgICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICB2YXIgdmFsdWVzU3RyaW5nID0g
SlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWRWYWx1ZXMpOworICAgICAgcmV0dXJuIG5ldyBQcm9wVHlw
ZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBv
ZiB2YWx1ZSBgJyArIHByb3BWYWx1ZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9u
ZW50TmFtZSArICdgLCBleHBlY3RlZCBvbmUgb2YgJyArIHZhbHVlc1N0cmluZyArICcuJykpOwor
ICAgIH0KKyAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpOwor
ICB9CisKKyAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikg
eworICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwg
bG9jYXRpb24sIHByb3BGdWxsTmFtZSkgeworICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAh
PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3Bl
cnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFt
ZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4nKTsK
KyAgICAgIH0KKyAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07CisgICAgICB2
YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpOworICAgICAgaWYgKHByb3BUeXBl
ICE9PSAnb2JqZWN0JykgeworICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFs
aWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgn
YCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBl
eHBlY3RlZCBhbiBvYmplY3QuJykpOworICAgICAgfQorICAgICAgZm9yICh2YXIga2V5IGluIHBy
b3BWYWx1ZSkgeworICAgICAgICBpZiAocHJvcFZhbHVlLmhhc093blByb3BlcnR5KGtleSkpIHsK
KyAgICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9u
ZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlw
ZXNTZWNyZXQpOworICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7CisgICAg
ICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9Cisg
ICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVD
aGVja2VyKHZhbGlkYXRlKTsKKyAgfQorCisgIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNr
ZXIoYXJyYXlPZlR5cGVDaGVja2VycykgeworICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheU9m
VHlwZUNoZWNrZXJzKSkgeworICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8g
d2FybmluZyhmYWxzZSwgJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLCBl
eHBlY3RlZCBhbiBpbnN0YW5jZSBvZiBhcnJheS4nKSA6IHZvaWQgMDsKKyAgICAgIHJldHVybiBl
bXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zTnVsbDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB2YWxp
ZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5h
bWUpIHsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5n
dGg7IGkrKykgeworICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07
CisgICAgICAgIGlmIChjaGVja2VyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9j
YXRpb24sIHByb3BGdWxsTmFtZSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpID09IG51bGwpIHsKKyAg
ICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICByZXR1cm4g
bmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxs
TmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLicpKTsK
KyAgICB9CisgICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTsK
KyAgfQorCisgIGZ1bmN0aW9uIGNyZWF0ZU5vZGVDaGVja2VyKCkgeworICAgIGZ1bmN0aW9uIHZh
bGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxs
TmFtZSkgeworICAgICAgaWYgKCFpc05vZGUocHJvcHNbcHJvcE5hbWVdKSkgeworICAgICAgICBy
ZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHBy
b3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdg
LCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4nKSk7CisgICAgICB9CisgICAgICByZXR1cm4gbnVsbDsK
KyAgICB9CisgICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTsK
KyAgfQorCisgIGZ1bmN0aW9uIGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykgewor
ICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9j
YXRpb24sIHByb3BGdWxsTmFtZSkgeworICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BO
YW1lXTsKKyAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7CisgICAg
ICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7CisgICAgICAgIHJldHVybiBuZXcgUHJvcFR5
cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Ag
b2YgdHlwZSBgJyArIHByb3BUeXBlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25l
bnROYW1lICsgJ2AsIGV4cGVjdGVkIGBvYmplY3RgLicpKTsKKyAgICAgIH0KKyAgICAgIGZvciAo
dmFyIGtleSBpbiBzaGFwZVR5cGVzKSB7CisgICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBl
c1trZXldOworICAgICAgICBpZiAoIWNoZWNrZXIpIHsKKyAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21w
b25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BU
eXBlc1NlY3JldCk7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgIHJldHVybiBlcnJv
cjsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJl
dHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7CisgIH0KKworICBmdW5j
dGlvbiBpc05vZGUocHJvcFZhbHVlKSB7CisgICAgc3dpdGNoICh0eXBlb2YgcHJvcFZhbHVlKSB7
CisgICAgICBjYXNlICdudW1iZXInOgorICAgICAgY2FzZSAnc3RyaW5nJzoKKyAgICAgIGNhc2Ug
J3VuZGVmaW5lZCc6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSAnYm9vbGVhbic6
CisgICAgICAgIHJldHVybiAhcHJvcFZhbHVlOworICAgICAgY2FzZSAnb2JqZWN0JzoKKyAgICAg
ICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkgeworICAgICAgICAgIHJldHVybiBwcm9w
VmFsdWUuZXZlcnkoaXNOb2RlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocHJvcFZhbHVlID09
PSBudWxsIHx8IGlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHsKKyAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JG
bihwcm9wVmFsdWUpOworICAgICAgICBpZiAoaXRlcmF0b3JGbikgeworICAgICAgICAgIHZhciBp
dGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChwcm9wVmFsdWUpOworICAgICAgICAgIHZhciBzdGVw
OworICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykgeworICAg
ICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkgeworICAgICAg
ICAgICAgICBpZiAoIWlzTm9kZShzdGVwLnZhbHVlKSkgeworICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBJdGVyYXRvciB3aWxsIHByb3ZpZGUgZW50cnkgW2ssdl0gdHVw
bGVzIHJhdGhlciB0aGFuIHZhbHVlcy4KKyAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVy
YXRvci5uZXh0KCkpLmRvbmUpIHsKKyAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1
ZTsKKyAgICAgICAgICAgICAgaWYgKGVudHJ5KSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc05v
ZGUoZW50cnlbMV0pKSB7CisgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUp
IHsKKyAgICAvLyBOYXRpdmUgU3ltYm9sLgorICAgIGlmIChwcm9wVHlwZSA9PT0gJ3N5bWJvbCcp
IHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIDE5LjQuMy41IFN5bWJvbC5w
cm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnCisgICAgaWYgKHByb3BWYWx1ZVsn
QEB0b1N0cmluZ1RhZyddID09PSAnU3ltYm9sJykgeworICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgLy8gRmFsbGJhY2sgZm9yIG5vbi1zcGVjIGNvbXBsaWFudCBTeW1ib2xzIHdoaWNo
IGFyZSBwb2x5ZmlsbGVkLgorICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYm
IHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkgeworICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgLy8gRXF1aXZhbGVudCBvZiBgdHlwZW9m
YCBidXQgd2l0aCBzcGVjaWFsIGhhbmRsaW5nIGZvciBhcnJheSBhbmQgcmVnZXhwLgorICBmdW5j
dGlvbiBnZXRQcm9wVHlwZShwcm9wVmFsdWUpIHsKKyAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2Yg
cHJvcFZhbHVlOworICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHsKKyAgICAgIHJl
dHVybiAnYXJyYXknOworICAgIH0KKyAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhw
KSB7CisgICAgICAvLyBPbGQgd2Via2l0cyAoYXQgbGVhc3QgdW50aWwgQW5kcm9pZCA0LjApIHJl
dHVybiAnZnVuY3Rpb24nIHJhdGhlciB0aGFuCisgICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9m
IGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS8KKyAgICAg
IC8vIHBhc3NlcyBQcm9wVHlwZXMub2JqZWN0LgorICAgICAgcmV0dXJuICdvYmplY3QnOworICAg
IH0KKyAgICBpZiAoaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkpIHsKKyAgICAgIHJldHVy
biAnc3ltYm9sJzsKKyAgICB9CisgICAgcmV0dXJuIHByb3BUeXBlOworICB9CisKKyAgLy8gVGhp
cyBoYW5kbGVzIG1vcmUgdHlwZXMgdGhhbiBgZ2V0UHJvcFR5cGVgLiBPbmx5IHVzZWQgZm9yIGVy
cm9yIG1lc3NhZ2VzLgorICAvLyBTZWUgYGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyYC4KKyAg
ZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7CisgICAgdmFyIHByb3BUeXBlID0g
Z2V0UHJvcFR5cGUocHJvcFZhbHVlKTsKKyAgICBpZiAocHJvcFR5cGUgPT09ICdvYmplY3QnKSB7
CisgICAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgeworICAgICAgICByZXR1cm4g
J2RhdGUnOworICAgICAgfSBlbHNlIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHsK
KyAgICAgICAgcmV0dXJuICdyZWdleHAnOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcHJv
cFR5cGU7CisgIH0KKworICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9iamVjdCwgaWYg
YW55LgorICBmdW5jdGlvbiBnZXRDbGFzc05hbWUocHJvcFZhbHVlKSB7CisgICAgaWYgKCFwcm9w
VmFsdWUuY29uc3RydWN0b3IgfHwgIXByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lKSB7CisgICAg
ICByZXR1cm4gQU5PTllNT1VTOworICAgIH0KKyAgICByZXR1cm4gcHJvcFZhbHVlLmNvbnN0cnVj
dG9yLm5hbWU7CisgIH0KKworICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyA9IGNoZWNr
UHJvcFR5cGVzOworICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlczsK
KworICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7Cit9OworCit9LHsiNDUiOjQ1LCI0NyI6NDcsIjQ5
Ijo0OSwiNTEiOjUxLCI1NCI6NTR9XSw1NDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0
cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQg
dW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxl
IGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFs
IGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBm
aWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBS
ZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lM
TF9CRV9GSVJFRCc7CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7CisK
K30se31dfSx7fSxbMzJdKSgzMikKK30pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9yZWFjdC9kaXN0L3JlYWN0
LXdpdGgtYWRkb25zLm1pbi5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9yZWFj
dC9kaXN0L3JlYWN0LXdpdGgtYWRkb25zLm1pbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMDBhMWVkOWQwYzc3
ZjEzYTc3MTk5OGRmZjJmMzJkZDI2YWMwNjAxCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0L2Rpc3QvcmVhY3Qtd2l0aC1hZGRvbnMubWluLmpz
CkBAIC0wLDAgKzEsMTMgQEAKKy8qKgorICogUmVhY3QgKHdpdGggYWRkb25zKSB2MTUuNS40Cisg
KgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0
aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQK
KyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4g
dGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworIWZ1bmN0aW9uKGUpe2lmKCJvYmplY3QiPT10
eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9
ZSgpO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUo
W10sZSk7ZWxzZXt2YXIgdDt0PSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5k
ZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3Nl
bGY6dGhpcyx0LlJlYWN0PWUoKX19KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUodCxuLHIp
e2Z1bmN0aW9uIG8oYSxzKXtpZighblthXSl7aWYoIXRbYV0pe3ZhciB1PSJmdW5jdGlvbiI9PXR5
cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFzJiZ1KXJldHVybiB1KGEsITApO2lmKGkpcmV0dXJu
IGkoYSwhMCk7dmFyIGM9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrYSsiJyIpO3Ro
cm93IGMuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsY312YXIgcD1uW2FdPXtleHBvcnRzOnt9fTt0
W2FdWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbYV1bMV1bZV07cmV0dXJu
IG8obnx8ZSl9LHAscC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW2FdLmV4cG9ydHN9Zm9yKHZh
ciBpPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGE9MDthPHIubGVuZ3RoO2Er
KylvKHJbYV0pO3JldHVybiBvfSh7MTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5j
dGlvbiByKGUsdCl7dmFyIG49e307cmV0dXJuIG5bZS50b0xvd2VyQ2FzZSgpXT10LnRvTG93ZXJD
YXNlKCksblsiV2Via2l0IitlXT0id2Via2l0Iit0LG5bIk1veiIrZV09Im1veiIrdCxuWyJtcyIr
ZV09Ik1TIit0LG5bIk8iK2VdPSJvIit0LnRvTG93ZXJDYXNlKCksbn1mdW5jdGlvbiBvKGUpe2lm
KHNbZV0pcmV0dXJuIHNbZV07aWYoIWFbZV0pcmV0dXJuIGU7dmFyIHQ9YVtlXTtmb3IodmFyIG4g
aW4gdClpZih0Lmhhc093blByb3BlcnR5KG4pJiZuIGluIHUpcmV0dXJuIHNbZV09dFtuXTtyZXR1
cm4iIn12YXIgaT1lKDM5KSxhPXthbmltYXRpb25lbmQ6cigiQW5pbWF0aW9uIiwiQW5pbWF0aW9u
RW5kIiksYW5pbWF0aW9uaXRlcmF0aW9uOnIoIkFuaW1hdGlvbiIsIkFuaW1hdGlvbkl0ZXJhdGlv
biIpLGFuaW1hdGlvbnN0YXJ0OnIoIkFuaW1hdGlvbiIsIkFuaW1hdGlvblN0YXJ0IiksdHJhbnNp
dGlvbmVuZDpyKCJUcmFuc2l0aW9uIiwiVHJhbnNpdGlvbkVuZCIpfSxzPXt9LHU9e307aS5jYW5V
c2VET00mJih1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlLCJBbmltYXRpb25F
dmVudCJpbiB3aW5kb3d8fChkZWxldGUgYS5hbmltYXRpb25lbmQuYW5pbWF0aW9uLGRlbGV0ZSBh
LmFuaW1hdGlvbml0ZXJhdGlvbi5hbmltYXRpb24sZGVsZXRlIGEuYW5pbWF0aW9uc3RhcnQuYW5p
bWF0aW9uKSwiVHJhbnNpdGlvbkV2ZW50ImluIHdpbmRvd3x8ZGVsZXRlIGEudHJhbnNpdGlvbmVu
ZC50cmFuc2l0aW9uKSx0LmV4cG9ydHM9b30sezM5OjM5fV0sMjpbZnVuY3Rpb24oZSx0LG4peyJ1
c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PXsiPSI6Ij0wIiwiOiI6Ij0yIn07cmV0dXJu
IiQiKygiIitlKS5yZXBsYWNlKC9bPTpdL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX1mdW5j
dGlvbiBvKGUpe3ZhciB0PXsiPTAiOiI9IiwiPTIiOiI6In07cmV0dXJuKCIiKygiLiI9PT1lWzBd
JiYiJCI9PT1lWzFdP2Uuc3Vic3RyaW5nKDIpOmUuc3Vic3RyaW5nKDEpKSkucmVwbGFjZSgvKD0w
fD0yKS9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9dmFyIGk9e2VzY2FwZTpyLHVuZXNjYXBl
Om99O3QuZXhwb3J0cz1pfSx7fV0sMzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIg
cj1lKDE4KSxvPWUoMjMpLGk9e2xpbmtTdGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHIodGhp
cy5zdGF0ZVtlXSxvLmNyZWF0ZVN0YXRlS2V5U2V0dGVyKHRoaXMsZSkpfX07dC5leHBvcnRzPWl9
LHsxODoxOCwyMzoyM31dLDQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgz
NCksbz0oZSg0MiksZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0Lmluc3RhbmNlUG9vbC5sZW5n
dGgpe3ZhciBuPXQuaW5zdGFuY2VQb29sLnBvcCgpO3JldHVybiB0LmNhbGwobixlKSxufXJldHVy
biBuZXcgdChlKX0pLGk9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2lmKG4uaW5zdGFuY2VQb29s
Lmxlbmd0aCl7dmFyIHI9bi5pbnN0YW5jZVBvb2wucG9wKCk7cmV0dXJuIG4uY2FsbChyLGUsdCks
cn1yZXR1cm4gbmV3IG4oZSx0KX0sYT1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcztpZihyLmlu
c3RhbmNlUG9vbC5sZW5ndGgpe3ZhciBvPXIuaW5zdGFuY2VQb29sLnBvcCgpO3JldHVybiByLmNh
bGwobyxlLHQsbiksb31yZXR1cm4gbmV3IHIoZSx0LG4pfSxzPWZ1bmN0aW9uKGUsdCxuLHIpe3Zh
ciBvPXRoaXM7aWYoby5pbnN0YW5jZVBvb2wubGVuZ3RoKXt2YXIgaT1vLmluc3RhbmNlUG9vbC5w
b3AoKTtyZXR1cm4gby5jYWxsKGksZSx0LG4sciksaX1yZXR1cm4gbmV3IG8oZSx0LG4scil9LHU9
ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztlIGluc3RhbmNlb2YgdHx8cigiMjUiKSxlLmRlc3RydWN0
b3IoKSx0Lmluc3RhbmNlUG9vbC5sZW5ndGg8dC5wb29sU2l6ZSYmdC5pbnN0YW5jZVBvb2wucHVz
aChlKX0sYz1vLHA9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lO3JldHVybiBuLmluc3RhbmNlUG9vbD1b
XSxuLmdldFBvb2xlZD10fHxjLG4ucG9vbFNpemV8fChuLnBvb2xTaXplPTEwKSxuLnJlbGVhc2U9
dSxufSxsPXthZGRQb29saW5nVG86cCxvbmVBcmd1bWVudFBvb2xlcjpvLHR3b0FyZ3VtZW50UG9v
bGVyOmksdGhyZWVBcmd1bWVudFBvb2xlcjphLGZvdXJBcmd1bWVudFBvb2xlcjpzfTt0LmV4cG9y
dHM9bH0sezM0OjM0LDQyOjQyfV0sNTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIg
cj1lKDQ1KSxvPWUoOSksaT1lKDExKSxhPWUoMjIpLHM9ZSgxMCksdT1lKDE0KSxjPWUoMTUpLHA9
ZSgyMSksbD1lKDI3KSxmPWUoMzMpLGQ9KGUoNDQpLGMuY3JlYXRlRWxlbWVudCksaD1jLmNyZWF0
ZUZhY3RvcnkseT1jLmNsb25lRWxlbWVudCx2PXIsbT17Q2hpbGRyZW46e21hcDpvLm1hcCxmb3JF
YWNoOm8uZm9yRWFjaCxjb3VudDpvLmNvdW50LHRvQXJyYXk6by50b0FycmF5LG9ubHk6Zn0sQ29t
cG9uZW50OmksUHVyZUNvbXBvbmVudDphLGNyZWF0ZUVsZW1lbnQ6ZCxjbG9uZUVsZW1lbnQ6eSxp
c1ZhbGlkRWxlbWVudDpjLmlzVmFsaWRFbGVtZW50LFByb3BUeXBlczpwLGNyZWF0ZUNsYXNzOnMu
Y3JlYXRlQ2xhc3MsY3JlYXRlRmFjdG9yeTpoLGNyZWF0ZU1peGluOmZ1bmN0aW9uKGUpe3JldHVy
biBlfSxET006dSx2ZXJzaW9uOmwsX19zcHJlYWQ6dn07dC5leHBvcnRzPW19LHsxMDoxMCwxMTox
MSwxNDoxNCwxNToxNSwyMToyMSwyMjoyMiwyNzoyNywzMzozMyw0NDo0NCw0NTo0NSw5Ojl9XSw2
OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtpZighbyl7dmFyIHQ9
ZSgyOSk7bz10Ll9fU0VDUkVUX0lOSkVDVEVEX1JFQUNUX0RPTV9ET19OT1RfVVNFX09SX1lPVV9X
SUxMX0JFX0ZJUkVEfXJldHVybiBvfXZhciBvO24uZ2V0UmVhY3RET009cn0sezI5OjI5fV0sNzpb
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7aWYoIShlIGluc3Rh
bmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1
bmN0aW9uIil9ZnVuY3Rpb24gbyhlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigi
dGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVk
Iik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0
fWZ1bmN0aW9uIGkoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cg
bmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEg
ZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQu
cHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEw
LGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQ
cm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfWZ1bmN0aW9uIGEoZSl7dmFyIHQ9InRyYW5z
aXRpb24iK2UrIlRpbWVvdXQiLG49InRyYW5zaXRpb24iK2U7cmV0dXJuIGZ1bmN0aW9uKGUpe2lm
KGVbbl0pe2lmKG51bGw9PWVbdF0pcmV0dXJuIG5ldyBFcnJvcih0KyIgd2Fzbid0IHN1cHBsaWVk
IHRvIFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwOiB0aGlzIGNhbiBjYXVzZSB1bnJlbGlhYmxlIGFu
aW1hdGlvbnMgYW5kIHdvbid0IGJlIHN1cHBvcnRlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIFJl
YWN0LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC1hbmltYXRpb24tdHJhbnNpdGlvbi1ncm91cC10
aW1lb3V0IGZvciBtb3JlIGluZm9ybWF0aW9uLiIpO2lmKCJudW1iZXIiIT10eXBlb2YgZVt0XSly
ZXR1cm4gbmV3IEVycm9yKHQrIiBtdXN0IGJlIGEgbnVtYmVyIChpbiBtaWxsaXNlY29uZHMpIil9
fX12YXIgcz1lKDQ1KSx1PWUoNSksYz1lKDQ3KSxwPWModS5pc1ZhbGlkRWxlbWVudCksbD1lKDI2
KSxmPWUoOCksZD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIG4saSxhO3IodGhpcyx0KTtm
b3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxjPUFycmF5KHMpLHA9MDtwPHM7cCsrKWNbcF09YXJn
dW1lbnRzW3BdO3JldHVybiBuPWk9byh0aGlzLGUuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQo
YykpKSxpLl93cmFwQ2hpbGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHUuY3JlYXRlRWxlbWVudChmLHtu
YW1lOmkucHJvcHMudHJhbnNpdGlvbk5hbWUsYXBwZWFyOmkucHJvcHMudHJhbnNpdGlvbkFwcGVh
cixlbnRlcjppLnByb3BzLnRyYW5zaXRpb25FbnRlcixsZWF2ZTppLnByb3BzLnRyYW5zaXRpb25M
ZWF2ZSxhcHBlYXJUaW1lb3V0OmkucHJvcHMudHJhbnNpdGlvbkFwcGVhclRpbWVvdXQsZW50ZXJU
aW1lb3V0OmkucHJvcHMudHJhbnNpdGlvbkVudGVyVGltZW91dCxsZWF2ZVRpbWVvdXQ6aS5wcm9w
cy50cmFuc2l0aW9uTGVhdmVUaW1lb3V0fSxlKX0sYT1uLG8oaSxhKX1yZXR1cm4gaSh0LGUpLHQu
cHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB1LmNyZWF0ZUVsZW1lbnQobCxzKHt9
LHRoaXMucHJvcHMse2NoaWxkRmFjdG9yeTp0aGlzLl93cmFwQ2hpbGR9KSl9LHR9KHUuQ29tcG9u
ZW50KTtkLmRpc3BsYXlOYW1lPSJSZWFjdENTU1RyYW5zaXRpb25Hcm91cCIsZC5wcm9wVHlwZXM9
e3RyYW5zaXRpb25OYW1lOmYucHJvcFR5cGVzLm5hbWUsdHJhbnNpdGlvbkFwcGVhcjpwLmJvb2ws
dHJhbnNpdGlvbkVudGVyOnAuYm9vbCx0cmFuc2l0aW9uTGVhdmU6cC5ib29sLHRyYW5zaXRpb25B
cHBlYXJUaW1lb3V0OmEoIkFwcGVhciIpLHRyYW5zaXRpb25FbnRlclRpbWVvdXQ6YSgiRW50ZXIi
KSx0cmFuc2l0aW9uTGVhdmVUaW1lb3V0OmEoIkxlYXZlIil9LGQuZGVmYXVsdFByb3BzPXt0cmFu
c2l0aW9uQXBwZWFyOiExLHRyYW5zaXRpb25FbnRlcjohMCx0cmFuc2l0aW9uTGVhdmU6ITB9LHQu
ZXhwb3J0cz1kfSx7MjY6MjYsNDU6NDUsNDc6NDcsNTo1LDg6OH1dLDg6W2Z1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93
IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0
aW9uIG8oZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJl
ZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwi
b2JqZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6dH1mdW5jdGlvbiBpKGUs
dCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3Io
IlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3Qg
Iit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29u
c3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6
ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0
KTplLl9fcHJvdG9fXz10KX12YXIgYT1lKDUpLHM9ZSg2KSx1PWUoNDcpLGM9dShhLmlzVmFsaWRF
bGVtZW50KSxwPWUoMzgpLGw9ZSgyNSksZj1lKDMzKSxkPTE3LGg9ZnVuY3Rpb24oZSl7ZnVuY3Rp
b24gdCgpe3ZhciBuLGksYTtyKHRoaXMsdCk7Zm9yKHZhciB1PWFyZ3VtZW50cy5sZW5ndGgsYz1B
cnJheSh1KSxmPTA7Zjx1O2YrKyljW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gbj1pPW8odGhpcyxl
LmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGMpKSksaS5faXNNb3VudGVkPSExLGkudHJhbnNp
dGlvbj1mdW5jdGlvbihlLHQsbil7dmFyIHI9cy5nZXRSZWFjdERPTSgpLmZpbmRET01Ob2RlKGkp
O2lmKCFyKXJldHVybiB2b2lkKHQmJnQoKSk7dmFyIG89aS5wcm9wcy5uYW1lW2VdfHxpLnByb3Bz
Lm5hbWUrIi0iK2UsYT1pLnByb3BzLm5hbWVbZSsiQWN0aXZlIl18fG8rIi1hY3RpdmUiLHU9bnVs
bCxjPWZ1bmN0aW9uKGUpe2UmJmUudGFyZ2V0IT09cnx8KGNsZWFyVGltZW91dCh1KSxwLnJlbW92
ZUNsYXNzKHIsbykscC5yZW1vdmVDbGFzcyhyLGEpLGwucmVtb3ZlRW5kRXZlbnRMaXN0ZW5lcihy
LGMpLHQmJnQoKSl9O3AuYWRkQ2xhc3MocixvKSxpLnF1ZXVlQ2xhc3NBbmROb2RlKGEsciksbj8o
dT1zZXRUaW1lb3V0KGMsbiksaS50cmFuc2l0aW9uVGltZW91dHMucHVzaCh1KSk6bC5hZGRFbmRF
dmVudExpc3RlbmVyKHIsYyl9LGkucXVldWVDbGFzc0FuZE5vZGU9ZnVuY3Rpb24oZSx0KXtpLmNs
YXNzTmFtZUFuZE5vZGVRdWV1ZS5wdXNoKHtjbGFzc05hbWU6ZSxub2RlOnR9KSxpLnRpbWVvdXR8
fChpLnRpbWVvdXQ9c2V0VGltZW91dChpLmZsdXNoQ2xhc3NOYW1lQW5kTm9kZVF1ZXVlLGQpKX0s
aS5mbHVzaENsYXNzTmFtZUFuZE5vZGVRdWV1ZT1mdW5jdGlvbigpe2kuX2lzTW91bnRlZCYmaS5j
bGFzc05hbWVBbmROb2RlUXVldWUuZm9yRWFjaChmdW5jdGlvbihlKXtwLmFkZENsYXNzKGUubm9k
ZSxlLmNsYXNzTmFtZSl9KSxpLmNsYXNzTmFtZUFuZE5vZGVRdWV1ZS5sZW5ndGg9MCxpLnRpbWVv
dXQ9bnVsbH0saS5jb21wb25lbnRXaWxsQXBwZWFyPWZ1bmN0aW9uKGUpe2kucHJvcHMuYXBwZWFy
P2kudHJhbnNpdGlvbigiYXBwZWFyIixlLGkucHJvcHMuYXBwZWFyVGltZW91dCk6ZSgpfSxpLmNv
bXBvbmVudFdpbGxFbnRlcj1mdW5jdGlvbihlKXtpLnByb3BzLmVudGVyP2kudHJhbnNpdGlvbigi
ZW50ZXIiLGUsaS5wcm9wcy5lbnRlclRpbWVvdXQpOmUoKX0saS5jb21wb25lbnRXaWxsTGVhdmU9
ZnVuY3Rpb24oZSl7aS5wcm9wcy5sZWF2ZT9pLnRyYW5zaXRpb24oImxlYXZlIixlLGkucHJvcHMu
bGVhdmVUaW1lb3V0KTplKCl9LGE9bixvKGksYSl9cmV0dXJuIGkodCxlKSx0LnByb3RvdHlwZS5j
b21wb25lbnRXaWxsTW91bnQ9ZnVuY3Rpb24oKXt0aGlzLmNsYXNzTmFtZUFuZE5vZGVRdWV1ZT1b
XSx0aGlzLnRyYW5zaXRpb25UaW1lb3V0cz1bXX0sdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91
bnQ9ZnVuY3Rpb24oKXt0aGlzLl9pc01vdW50ZWQ9ITB9LHQucHJvdG90eXBlLmNvbXBvbmVudFdp
bGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5faXNNb3VudGVkPSExLHRoaXMudGltZW91dCYmY2xl
YXJUaW1lb3V0KHRoaXMudGltZW91dCksdGhpcy50cmFuc2l0aW9uVGltZW91dHMuZm9yRWFjaChm
dW5jdGlvbihlKXtjbGVhclRpbWVvdXQoZSl9KSx0aGlzLmNsYXNzTmFtZUFuZE5vZGVRdWV1ZS5s
ZW5ndGg9MH0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGYodGhpcy5wcm9w
cy5jaGlsZHJlbil9LHR9KGEuQ29tcG9uZW50KTtoLnByb3BUeXBlcz17bmFtZTpjLm9uZU9mVHlw
ZShbYy5zdHJpbmcsYy5zaGFwZSh7ZW50ZXI6Yy5zdHJpbmcsbGVhdmU6Yy5zdHJpbmcsYWN0aXZl
OmMuc3RyaW5nfSksYy5zaGFwZSh7ZW50ZXI6Yy5zdHJpbmcsZW50ZXJBY3RpdmU6Yy5zdHJpbmcs
bGVhdmU6Yy5zdHJpbmcsbGVhdmVBY3RpdmU6Yy5zdHJpbmcsYXBwZWFyOmMuc3RyaW5nLGFwcGVh
ckFjdGl2ZTpjLnN0cmluZ30pXSkuaXNSZXF1aXJlZCxhcHBlYXI6Yy5ib29sLGVudGVyOmMuYm9v
bCxsZWF2ZTpjLmJvb2wsYXBwZWFyVGltZW91dDpjLm51bWJlcixlbnRlclRpbWVvdXQ6Yy5udW1i
ZXIsbGVhdmVUaW1lb3V0OmMubnVtYmVyfSx0LmV4cG9ydHM9aH0sezI1OjI1LDMzOjMzLDM4OjM4
LDQ3OjQ3LDU6NSw2OjZ9XSw5OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9u
IHIoZSl7cmV0dXJuKCIiK2UpLnJlcGxhY2UoYiwiJCYvIil9ZnVuY3Rpb24gbyhlLHQpe3RoaXMu
ZnVuYz1lLHRoaXMuY29udGV4dD10LHRoaXMuY291bnQ9MH1mdW5jdGlvbiBpKGUsdCxuKXt2YXIg
cj1lLmZ1bmMsbz1lLmNvbnRleHQ7ci5jYWxsKG8sdCxlLmNvdW50KyspfWZ1bmN0aW9uIGEoZSx0
LG4pe2lmKG51bGw9PWUpcmV0dXJuIGU7dmFyIHI9by5nZXRQb29sZWQodCxuKTttKGUsaSxyKSxv
LnJlbGVhc2Uocil9ZnVuY3Rpb24gcyhlLHQsbixyKXt0aGlzLnJlc3VsdD1lLHRoaXMua2V5UHJl
Zml4PXQsdGhpcy5mdW5jPW4sdGhpcy5jb250ZXh0PXIsdGhpcy5jb3VudD0wfWZ1bmN0aW9uIHUo
ZSx0LG4pe3ZhciBvPWUucmVzdWx0LGk9ZS5rZXlQcmVmaXgsYT1lLmZ1bmMscz1lLmNvbnRleHQs
dT1hLmNhbGwocyx0LGUuY291bnQrKyk7QXJyYXkuaXNBcnJheSh1KT9jKHUsbyxuLHYudGhhdFJl
dHVybnNBcmd1bWVudCk6bnVsbCE9dSYmKHkuaXNWYWxpZEVsZW1lbnQodSkmJih1PXkuY2xvbmVB
bmRSZXBsYWNlS2V5KHUsaSsoIXUua2V5fHx0JiZ0LmtleT09PXUua2V5PyIiOnIodS5rZXkpKyIv
IikrbikpLG8ucHVzaCh1KSl9ZnVuY3Rpb24gYyhlLHQsbixvLGkpe3ZhciBhPSIiO251bGwhPW4m
JihhPXIobikrIi8iKTt2YXIgYz1zLmdldFBvb2xlZCh0LGEsbyxpKTttKGUsdSxjKSxzLnJlbGVh
c2UoYyl9ZnVuY3Rpb24gcChlLHQsbil7aWYobnVsbD09ZSlyZXR1cm4gZTt2YXIgcj1bXTtyZXR1
cm4gYyhlLHIsbnVsbCx0LG4pLHJ9ZnVuY3Rpb24gbChlLHQsbil7cmV0dXJuIG51bGx9ZnVuY3Rp
b24gZihlLHQpe3JldHVybiBtKGUsbCxudWxsKX1mdW5jdGlvbiBkKGUpe3ZhciB0PVtdO3JldHVy
biBjKGUsdCxudWxsLHYudGhhdFJldHVybnNBcmd1bWVudCksdH12YXIgaD1lKDQpLHk9ZSgxNSks
dj1lKDQwKSxtPWUoMzYpLEU9aC50d29Bcmd1bWVudFBvb2xlcixnPWguZm91ckFyZ3VtZW50UG9v
bGVyLGI9L1wvKy9nO28ucHJvdG90eXBlLmRlc3RydWN0b3I9ZnVuY3Rpb24oKXt0aGlzLmZ1bmM9
bnVsbCx0aGlzLmNvbnRleHQ9bnVsbCx0aGlzLmNvdW50PTB9LGguYWRkUG9vbGluZ1RvKG8sRSks
cy5wcm90b3R5cGUuZGVzdHJ1Y3Rvcj1mdW5jdGlvbigpe3RoaXMucmVzdWx0PW51bGwsdGhpcy5r
ZXlQcmVmaXg9bnVsbCx0aGlzLmZ1bmM9bnVsbCx0aGlzLmNvbnRleHQ9bnVsbCx0aGlzLmNvdW50
PTB9LGguYWRkUG9vbGluZ1RvKHMsZyk7dmFyIF89e2ZvckVhY2g6YSxtYXA6cCxtYXBJbnRvV2l0
aEtleVByZWZpeEludGVybmFsOmMsY291bnQ6Zix0b0FycmF5OmR9O3QuZXhwb3J0cz1ffSx7MTU6
MTUsMzY6MzYsNDo0LDQwOjQwfV0sMTA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVu
Y3Rpb24gcihlKXtyZXR1cm4gZX1mdW5jdGlvbiBvKGUsdCl7dmFyIG49Yi5oYXNPd25Qcm9wZXJ0
eSh0KT9iW3RdOm51bGw7dy5oYXNPd25Qcm9wZXJ0eSh0KSYmIk9WRVJSSURFX0JBU0UiIT09biYm
ZigiNzMiLHQpLGUmJiJERUZJTkVfTUFOWSIhPT1uJiYiREVGSU5FX01BTllfTUVSR0VEIiE9PW4m
JmYoIjc0Iix0KX1mdW5jdGlvbiBpKGUsdCl7aWYodCl7ImZ1bmN0aW9uIj09dHlwZW9mIHQmJmYo
Ijc1IikseS5pc1ZhbGlkRWxlbWVudCh0KSYmZigiNzYiKTt2YXIgbj1lLnByb3RvdHlwZSxyPW4u
X19yZWFjdEF1dG9CaW5kUGFpcnM7dC5oYXNPd25Qcm9wZXJ0eShFKSYmXy5taXhpbnMoZSx0Lm1p
eGlucyk7Zm9yKHZhciBpIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShpKSYmaSE9PUUpe3ZhciBh
PXRbaV0scz1uLmhhc093blByb3BlcnR5KGkpO2lmKG8ocyxpKSxfLmhhc093blByb3BlcnR5KGkp
KV9baV0oZSxhKTtlbHNle3ZhciBwPWIuaGFzT3duUHJvcGVydHkoaSksbD0iZnVuY3Rpb24iPT10
eXBlb2YgYSxkPWwmJiFwJiYhcyYmITEhPT10LmF1dG9iaW5kO2lmKGQpci5wdXNoKGksYSksbltp
XT1hO2Vsc2UgaWYocyl7dmFyIGg9YltpXTsoIXB8fCJERUZJTkVfTUFOWV9NRVJHRUQiIT09aCYm
IkRFRklORV9NQU5ZIiE9PWgpJiZmKCI3NyIsaCxpKSwiREVGSU5FX01BTllfTUVSR0VEIj09PWg/
bltpXT11KG5baV0sYSk6IkRFRklORV9NQU5ZIj09PWgmJihuW2ldPWMobltpXSxhKSl9ZWxzZSBu
W2ldPWF9fX19ZnVuY3Rpb24gYShlLHQpe2lmKHQpZm9yKHZhciBuIGluIHQpe3ZhciByPXRbbl07
aWYodC5oYXNPd25Qcm9wZXJ0eShuKSl7dmFyIG89biBpbiBfO28mJmYoIjc4IixuKTt2YXIgaT1u
IGluIGU7aSYmZigiNzkiLG4pLGVbbl09cn19fWZ1bmN0aW9uIHMoZSx0KXtlJiZ0JiYib2JqZWN0
Ij09dHlwZW9mIGUmJiJvYmplY3QiPT10eXBlb2YgdHx8ZigiODAiKTtmb3IodmFyIG4gaW4gdCl0
Lmhhc093blByb3BlcnR5KG4pJiYodm9pZCAwIT09ZVtuXSYmZigiODEiLG4pLGVbbl09dFtuXSk7
cmV0dXJuIGV9ZnVuY3Rpb24gdShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHko
dGhpcyxhcmd1bWVudHMpLHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYobnVsbD09bilyZXR1
cm4gcjtpZihudWxsPT1yKXJldHVybiBuO3ZhciBvPXt9O3JldHVybiBzKG8sbikscyhvLHIpLG99
fWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtlLmFwcGx5KHRoaXMsYXJndW1lbnRz
KSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gcChlLHQpe3JldHVybiB0LmJpbmQo
ZSl9ZnVuY3Rpb24gbChlKXtmb3IodmFyIHQ9ZS5fX3JlYWN0QXV0b0JpbmRQYWlycyxuPTA7bjx0
Lmxlbmd0aDtuKz0yKXt2YXIgcj10W25dLG89dFtuKzFdO2Vbcl09cChlLG8pfX12YXIgZj1lKDM0
KSxkPWUoNDUpLGg9ZSgxMSkseT1lKDE1KSx2PShlKDIwKSxlKDE5KSksbT1lKDQxKSxFPShlKDQy
KSxlKDQ0KSwibWl4aW5zIiksZz1bXSxiPXttaXhpbnM6IkRFRklORV9NQU5ZIixzdGF0aWNzOiJE
RUZJTkVfTUFOWSIscHJvcFR5cGVzOiJERUZJTkVfTUFOWSIsY29udGV4dFR5cGVzOiJERUZJTkVf
TUFOWSIsY2hpbGRDb250ZXh0VHlwZXM6IkRFRklORV9NQU5ZIixnZXREZWZhdWx0UHJvcHM6IkRF
RklORV9NQU5ZX01FUkdFRCIsZ2V0SW5pdGlhbFN0YXRlOiJERUZJTkVfTUFOWV9NRVJHRUQiLGdl
dENoaWxkQ29udGV4dDoiREVGSU5FX01BTllfTUVSR0VEIixyZW5kZXI6IkRFRklORV9PTkNFIixj
b21wb25lbnRXaWxsTW91bnQ6IkRFRklORV9NQU5ZIixjb21wb25lbnREaWRNb3VudDoiREVGSU5F
X01BTlkiLGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM6IkRFRklORV9NQU5ZIixzaG91bGRDb21w
b25lbnRVcGRhdGU6IkRFRklORV9PTkNFIixjb21wb25lbnRXaWxsVXBkYXRlOiJERUZJTkVfTUFO
WSIsY29tcG9uZW50RGlkVXBkYXRlOiJERUZJTkVfTUFOWSIsY29tcG9uZW50V2lsbFVubW91bnQ6
IkRFRklORV9NQU5ZIix1cGRhdGVDb21wb25lbnQ6Ik9WRVJSSURFX0JBU0UifSxfPXtkaXNwbGF5
TmFtZTpmdW5jdGlvbihlLHQpe2UuZGlzcGxheU5hbWU9dH0sbWl4aW5zOmZ1bmN0aW9uKGUsdCl7
aWYodClmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylpKGUsdFtuXSl9LGNoaWxkQ29udGV4dFR5
cGVzOmZ1bmN0aW9uKGUsdCl7ZS5jaGlsZENvbnRleHRUeXBlcz1kKHt9LGUuY2hpbGRDb250ZXh0
VHlwZXMsdCl9LGNvbnRleHRUeXBlczpmdW5jdGlvbihlLHQpe2UuY29udGV4dFR5cGVzPWQoe30s
ZS5jb250ZXh0VHlwZXMsdCl9LGdldERlZmF1bHRQcm9wczpmdW5jdGlvbihlLHQpe2UuZ2V0RGVm
YXVsdFByb3BzP2UuZ2V0RGVmYXVsdFByb3BzPXUoZS5nZXREZWZhdWx0UHJvcHMsdCk6ZS5nZXRE
ZWZhdWx0UHJvcHM9dH0scHJvcFR5cGVzOmZ1bmN0aW9uKGUsdCl7ZS5wcm9wVHlwZXM9ZCh7fSxl
LnByb3BUeXBlcyx0KX0sc3RhdGljczpmdW5jdGlvbihlLHQpe2EoZSx0KX0sYXV0b2JpbmQ6ZnVu
Y3Rpb24oKXt9fSx3PXtyZXBsYWNlU3RhdGU6ZnVuY3Rpb24oZSx0KXt0aGlzLnVwZGF0ZXIuZW5x
dWV1ZVJlcGxhY2VTdGF0ZSh0aGlzLGUpLHQmJnRoaXMudXBkYXRlci5lbnF1ZXVlQ2FsbGJhY2so
dGhpcyx0LCJyZXBsYWNlU3RhdGUiKX0saXNNb3VudGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu
dXBkYXRlci5pc01vdW50ZWQodGhpcyl9fSxBPWZ1bmN0aW9uKCl7fTtkKEEucHJvdG90eXBlLGgu
cHJvdG90eXBlLHcpO3ZhciBUPXtjcmVhdGVDbGFzczpmdW5jdGlvbihlKXt2YXIgdD1yKGZ1bmN0
aW9uKGUsbixyKXt0aGlzLl9fcmVhY3RBdXRvQmluZFBhaXJzLmxlbmd0aCYmbCh0aGlzKSx0aGlz
LnByb3BzPWUsdGhpcy5jb250ZXh0PW4sdGhpcy5yZWZzPW0sdGhpcy51cGRhdGVyPXJ8fHYsdGhp
cy5zdGF0ZT1udWxsO3ZhciBvPXRoaXMuZ2V0SW5pdGlhbFN0YXRlP3RoaXMuZ2V0SW5pdGlhbFN0
YXRlKCk6bnVsbDsoIm9iamVjdCIhPXR5cGVvZiBvfHxBcnJheS5pc0FycmF5KG8pKSYmZigiODIi
LHQuZGlzcGxheU5hbWV8fCJSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCIpLHRoaXMuc3RhdGU9b30p
O3QucHJvdG90eXBlPW5ldyBBLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXQsdC5wcm90b3R5cGUu
X19yZWFjdEF1dG9CaW5kUGFpcnM9W10sZy5mb3JFYWNoKGkuYmluZChudWxsLHQpKSxpKHQsZSks
dC5nZXREZWZhdWx0UHJvcHMmJih0LmRlZmF1bHRQcm9wcz10LmdldERlZmF1bHRQcm9wcygpKSx0
LnByb3RvdHlwZS5yZW5kZXJ8fGYoIjgzIik7Zm9yKHZhciBuIGluIGIpdC5wcm90b3R5cGVbbl18
fCh0LnByb3RvdHlwZVtuXT1udWxsKTtyZXR1cm4gdH0saW5qZWN0aW9uOntpbmplY3RNaXhpbjpm
dW5jdGlvbihlKXtnLnB1c2goZSl9fX07dC5leHBvcnRzPVR9LHsxMToxMSwxNToxNSwxOToxOSwy
MDoyMCwzNDozNCw0MTo0MSw0Mjo0Miw0NDo0NCw0NTo0NX1dLDExOltmdW5jdGlvbihlLHQsbil7
InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe3RoaXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9
dCx0aGlzLnJlZnM9YSx0aGlzLnVwZGF0ZXI9bnx8aX12YXIgbz1lKDM0KSxpPWUoMTkpLGE9KGUo
MzApLGUoNDEpKTtlKDQyKSxlKDQ0KTtyLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9LHIu
cHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGUsdCl7Im9iamVjdCIhPXR5cGVvZiBlJiYiZnVu
Y3Rpb24iIT10eXBlb2YgZSYmbnVsbCE9ZSYmbygiODUiKSx0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNl
dFN0YXRlKHRoaXMsZSksdCYmdGhpcy51cGRhdGVyLmVucXVldWVDYWxsYmFjayh0aGlzLHQsInNl
dFN0YXRlIil9LHIucHJvdG90eXBlLmZvcmNlVXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMudXBkYXRl
ci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcyksZSYmdGhpcy51cGRhdGVyLmVucXVldWVDYWxsYmFj
ayh0aGlzLGUsImZvcmNlVXBkYXRlIil9O3QuZXhwb3J0cz1yfSx7MTk6MTksMzA6MzAsMzQ6MzQs
NDE6NDEsNDI6NDIsNDQ6NDR9XSwxMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIg
cj1lKDM1KSxvPXtzaG91bGRDb21wb25lbnRVcGRhdGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcih0
aGlzLGUsdCl9fTt0LmV4cG9ydHM9b30sezM1OjM1fV0sMTM6W2Z1bmN0aW9uKGUsdCxuKXsidXNl
IHN0cmljdCI7dmFyIHI9e2N1cnJlbnQ6bnVsbH07dC5leHBvcnRzPXJ9LHt9XSwxNDpbZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDE1KSxvPXIuY3JlYXRlRmFjdG9yeSxpPXth
Om8oImEiKSxhYmJyOm8oImFiYnIiKSxhZGRyZXNzOm8oImFkZHJlc3MiKSxhcmVhOm8oImFyZWEi
KSxhcnRpY2xlOm8oImFydGljbGUiKSxhc2lkZTpvKCJhc2lkZSIpLGF1ZGlvOm8oImF1ZGlvIiks
YjpvKCJiIiksYmFzZTpvKCJiYXNlIiksYmRpOm8oImJkaSIpLGJkbzpvKCJiZG8iKSxiaWc6bygi
YmlnIiksYmxvY2txdW90ZTpvKCJibG9ja3F1b3RlIiksYm9keTpvKCJib2R5IiksYnI6bygiYnIi
KSxidXR0b246bygiYnV0dG9uIiksY2FudmFzOm8oImNhbnZhcyIpLGNhcHRpb246bygiY2FwdGlv
biIpLGNpdGU6bygiY2l0ZSIpLGNvZGU6bygiY29kZSIpLGNvbDpvKCJjb2wiKSxjb2xncm91cDpv
KCJjb2xncm91cCIpLGRhdGE6bygiZGF0YSIpLGRhdGFsaXN0Om8oImRhdGFsaXN0IiksZGQ6bygi
ZGQiKSxkZWw6bygiZGVsIiksZGV0YWlsczpvKCJkZXRhaWxzIiksZGZuOm8oImRmbiIpLGRpYWxv
ZzpvKCJkaWFsb2ciKSxkaXY6bygiZGl2IiksZGw6bygiZGwiKSxkdDpvKCJkdCIpLGVtOm8oImVt
IiksZW1iZWQ6bygiZW1iZWQiKSxmaWVsZHNldDpvKCJmaWVsZHNldCIpLGZpZ2NhcHRpb246bygi
ZmlnY2FwdGlvbiIpLGZpZ3VyZTpvKCJmaWd1cmUiKSxmb290ZXI6bygiZm9vdGVyIiksZm9ybTpv
KCJmb3JtIiksaDE6bygiaDEiKSxoMjpvKCJoMiIpLGgzOm8oImgzIiksaDQ6bygiaDQiKSxoNTpv
KCJoNSIpLGg2Om8oImg2IiksaGVhZDpvKCJoZWFkIiksaGVhZGVyOm8oImhlYWRlciIpLGhncm91
cDpvKCJoZ3JvdXAiKSxocjpvKCJociIpLGh0bWw6bygiaHRtbCIpLGk6bygiaSIpLGlmcmFtZTpv
KCJpZnJhbWUiKSxpbWc6bygiaW1nIiksaW5wdXQ6bygiaW5wdXQiKSxpbnM6bygiaW5zIiksa2Jk
Om8oImtiZCIpLGtleWdlbjpvKCJrZXlnZW4iKSxsYWJlbDpvKCJsYWJlbCIpLGxlZ2VuZDpvKCJs
ZWdlbmQiKSxsaTpvKCJsaSIpLGxpbms6bygibGluayIpLG1haW46bygibWFpbiIpLG1hcDpvKCJt
YXAiKSxtYXJrOm8oIm1hcmsiKSxtZW51Om8oIm1lbnUiKSxtZW51aXRlbTpvKCJtZW51aXRlbSIp
LG1ldGE6bygibWV0YSIpLG1ldGVyOm8oIm1ldGVyIiksbmF2Om8oIm5hdiIpLG5vc2NyaXB0Om8o
Im5vc2NyaXB0Iiksb2JqZWN0Om8oIm9iamVjdCIpLG9sOm8oIm9sIiksb3B0Z3JvdXA6bygib3B0
Z3JvdXAiKSxvcHRpb246bygib3B0aW9uIiksb3V0cHV0Om8oIm91dHB1dCIpLHA6bygicCIpLHBh
cmFtOm8oInBhcmFtIikscGljdHVyZTpvKCJwaWN0dXJlIikscHJlOm8oInByZSIpLHByb2dyZXNz
Om8oInByb2dyZXNzIikscTpvKCJxIikscnA6bygicnAiKSxydDpvKCJydCIpLHJ1Ynk6bygicnVi
eSIpLHM6bygicyIpLHNhbXA6bygic2FtcCIpLHNjcmlwdDpvKCJzY3JpcHQiKSxzZWN0aW9uOm8o
InNlY3Rpb24iKSxzZWxlY3Q6bygic2VsZWN0Iiksc21hbGw6bygic21hbGwiKSxzb3VyY2U6bygi
c291cmNlIiksc3BhbjpvKCJzcGFuIiksc3Ryb25nOm8oInN0cm9uZyIpLHN0eWxlOm8oInN0eWxl
Iiksc3ViOm8oInN1YiIpLHN1bW1hcnk6bygic3VtbWFyeSIpLHN1cDpvKCJzdXAiKSx0YWJsZTpv
KCJ0YWJsZSIpLHRib2R5Om8oInRib2R5IiksdGQ6bygidGQiKSx0ZXh0YXJlYTpvKCJ0ZXh0YXJl
YSIpLHRmb290Om8oInRmb290IiksdGg6bygidGgiKSx0aGVhZDpvKCJ0aGVhZCIpLHRpbWU6bygi
dGltZSIpLHRpdGxlOm8oInRpdGxlIiksdHI6bygidHIiKSx0cmFjazpvKCJ0cmFjayIpLHU6bygi
dSIpLHVsOm8oInVsIiksdmFyOm8oInZhciIpLHZpZGVvOm8oInZpZGVvIiksd2JyOm8oIndiciIp
LGNpcmNsZTpvKCJjaXJjbGUiKSxjbGlwUGF0aDpvKCJjbGlwUGF0aCIpLGRlZnM6bygiZGVmcyIp
LGVsbGlwc2U6bygiZWxsaXBzZSIpLGc6bygiZyIpLGltYWdlOm8oImltYWdlIiksbGluZTpvKCJs
aW5lIiksbGluZWFyR3JhZGllbnQ6bygibGluZWFyR3JhZGllbnQiKSxtYXNrOm8oIm1hc2siKSxw
YXRoOm8oInBhdGgiKSxwYXR0ZXJuOm8oInBhdHRlcm4iKSxwb2x5Z29uOm8oInBvbHlnb24iKSxw
b2x5bGluZTpvKCJwb2x5bGluZSIpLHJhZGlhbEdyYWRpZW50Om8oInJhZGlhbEdyYWRpZW50Iiks
cmVjdDpvKCJyZWN0Iiksc3RvcDpvKCJzdG9wIiksc3ZnOm8oInN2ZyIpLHRleHQ6bygidGV4dCIp
LHRzcGFuOm8oInRzcGFuIil9O3QuZXhwb3J0cz1pfSx7MTU6MTV9XSwxNTpbZnVuY3Rpb24oZSx0
LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiB2b2lkIDAhPT1lLnJlZn1mdW5j
dGlvbiBvKGUpe3JldHVybiB2b2lkIDAhPT1lLmtleX12YXIgaT1lKDQ1KSxhPWUoMTMpLHM9KGUo
NDQpLGUoMzApLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpLHU9ZSgxNiksYz17a2V5
OiEwLHJlZjohMCxfX3NlbGY6ITAsX19zb3VyY2U6ITB9LHA9ZnVuY3Rpb24oZSx0LG4scixvLGks
YSl7cmV0dXJueyQkdHlwZW9mOnUsdHlwZTplLGtleTp0LHJlZjpuLHByb3BzOmEsX293bmVyOml9
fTtwLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpLHU9e30sbD1udWxsLGY9bnVs
bDtpZihudWxsIT10KXtyKHQpJiYoZj10LnJlZiksbyh0KSYmKGw9IiIrdC5rZXkpLHZvaWQgMD09
PXQuX19zZWxmP251bGw6dC5fX3NlbGYsdm9pZCAwPT09dC5fX3NvdXJjZT9udWxsOnQuX19zb3Vy
Y2U7Zm9yKGkgaW4gdClzLmNhbGwodCxpKSYmIWMuaGFzT3duUHJvcGVydHkoaSkmJih1W2ldPXRb
aV0pfXZhciBkPWFyZ3VtZW50cy5sZW5ndGgtMjtpZigxPT09ZCl1LmNoaWxkcmVuPW47ZWxzZSBp
ZihkPjEpe2Zvcih2YXIgaD1BcnJheShkKSx5PTA7eTxkO3krKyloW3ldPWFyZ3VtZW50c1t5KzJd
O3UuY2hpbGRyZW49aH1pZihlJiZlLmRlZmF1bHRQcm9wcyl7dmFyIHY9ZS5kZWZhdWx0UHJvcHM7
Zm9yKGkgaW4gdil2b2lkIDA9PT11W2ldJiYodVtpXT12W2ldKX1yZXR1cm4gcChlLGwsZiwwLDAs
YS5jdXJyZW50LHUpfSxwLmNyZWF0ZUZhY3Rvcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9cC5jcmVhdGVF
bGVtZW50LmJpbmQobnVsbCxlKTtyZXR1cm4gdC50eXBlPWUsdH0scC5jbG9uZUFuZFJlcGxhY2VL
ZXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChlLnR5cGUsdCxlLnJlZixlLl9zZWxmLGUuX3NvdXJj
ZSxlLl9vd25lcixlLnByb3BzKX0scC5jbG9uZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciB1
LGw9aSh7fSxlLnByb3BzKSxmPWUua2V5LGQ9ZS5yZWYsaD0oZS5fc2VsZixlLl9zb3VyY2UsZS5f
b3duZXIpO2lmKG51bGwhPXQpe3IodCkmJihkPXQucmVmLGg9YS5jdXJyZW50KSxvKHQpJiYoZj0i
Iit0LmtleSk7dmFyIHk7ZS50eXBlJiZlLnR5cGUuZGVmYXVsdFByb3BzJiYoeT1lLnR5cGUuZGVm
YXVsdFByb3BzKTtmb3IodSBpbiB0KXMuY2FsbCh0LHUpJiYhYy5oYXNPd25Qcm9wZXJ0eSh1KSYm
KHZvaWQgMD09PXRbdV0mJnZvaWQgMCE9PXk/bFt1XT15W3VdOmxbdV09dFt1XSl9dmFyIHY9YXJn
dW1lbnRzLmxlbmd0aC0yO2lmKDE9PT12KWwuY2hpbGRyZW49bjtlbHNlIGlmKHY+MSl7Zm9yKHZh
ciBtPUFycmF5KHYpLEU9MDtFPHY7RSsrKW1bRV09YXJndW1lbnRzW0UrMl07bC5jaGlsZHJlbj1t
fXJldHVybiBwKGUudHlwZSxmLGQsMCwwLGgsbCl9LHAuaXNWYWxpZEVsZW1lbnQ9ZnVuY3Rpb24o
ZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmZS4kJHR5cGVvZj09PXV9LHQu
ZXhwb3J0cz1wfSx7MTM6MTMsMTY6MTYsMzA6MzAsNDQ6NDQsNDU6NDV9XSwxNjpbZnVuY3Rpb24o
ZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1i
b2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iil8fDYwMTAzO3QuZXhwb3J0cz1yfSx7
fV0sMTc6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgzNCksbz1lKDkpLGk9
ZSgxNSksYT1lKDQwKSxzPShlKDQyKSxlKDQ0KSx7Y3JlYXRlOmZ1bmN0aW9uKGUpe2lmKCJvYmpl
Y3QiIT10eXBlb2YgZXx8IWV8fEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGU7aWYoaS5pc1ZhbGlk
RWxlbWVudChlKSlyZXR1cm4gZTsxPT09ZS5ub2RlVHlwZSYmcigiMCIpO3ZhciB0PVtdO2Zvcih2
YXIgbiBpbiBlKW8ubWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbChlW25dLHQsbixhLnRoYXRS
ZXR1cm5zQXJndW1lbnQpO3JldHVybiB0fX0pO3QuZXhwb3J0cz1zfSx7MTU6MTUsMzQ6MzQsNDA6
NDAsNDI6NDIsNDQ6NDQsOTo5fV0sMTg6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVu
Y3Rpb24gcihlLHQpe3RoaXMudmFsdWU9ZSx0aGlzLnJlcXVlc3RDaGFuZ2U9dH1mdW5jdGlvbiBv
KGUpe3ZhciB0PXt2YWx1ZTp2b2lkIDA9PT1lP2kuUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkOmUu
aXNSZXF1aXJlZCxyZXF1ZXN0Q2hhbmdlOmkuUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZH07cmV0
dXJuIGkuUHJvcFR5cGVzLnNoYXBlKHQpfXZhciBpPWUoNSk7ci5Qcm9wVHlwZXM9e2xpbms6b30s
dC5leHBvcnRzPXJ9LHs1OjV9XSwxOTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIg
cj0oZSg0NCkse2lzTW91bnRlZDpmdW5jdGlvbihlKXtyZXR1cm4hMX0sZW5xdWV1ZUNhbGxiYWNr
OmZ1bmN0aW9uKGUsdCl7fSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oZSl7fSxlbnF1ZXVl
UmVwbGFjZVN0YXRlOmZ1bmN0aW9uKGUsdCl7fSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oZSx0
KXt9fSk7dC5leHBvcnRzPXJ9LHs0NDo0NH1dLDIwOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJp
Y3QiO3ZhciByPXt9O3QuZXhwb3J0cz1yfSx7fV0sMjE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCI7dmFyIHI9ZSgxNSksbz1yLmlzVmFsaWRFbGVtZW50LGk9ZSg0Nyk7dC5leHBvcnRzPWko
byl9LHsxNToxNSw0Nzo0N31dLDIyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0
aW9uIHIoZSx0LG4pe3RoaXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLnJlZnM9dSx0aGlz
LnVwZGF0ZXI9bnx8c31mdW5jdGlvbiBvKCl7fXZhciBpPWUoNDUpLGE9ZSgxMSkscz1lKDE5KSx1
PWUoNDEpO28ucHJvdG90eXBlPWEucHJvdG90eXBlLHIucHJvdG90eXBlPW5ldyBvLHIucHJvdG90
eXBlLmNvbnN0cnVjdG9yPXIsaShyLnByb3RvdHlwZSxhLnByb3RvdHlwZSksci5wcm90b3R5cGUu
aXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsdC5leHBvcnRzPXJ9LHsxMToxMSwxOToxOSw0MTo0MSw0
NTo0NX1dLDIzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2
YXIgbj17fTtyZXR1cm4gZnVuY3Rpb24ocil7blt0XT1yLGUuc2V0U3RhdGUobil9fXZhciBvPXtj
cmVhdGVTdGF0ZVNldHRlcjpmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuLHIsbyxpLGEs
cyl7dmFyIHU9dC5jYWxsKGUsbixyLG8saSxhLHMpO3UmJmUuc2V0U3RhdGUodSl9fSxjcmVhdGVT
dGF0ZUtleVNldHRlcjpmdW5jdGlvbihlLHQpe3ZhciBuPWUuX19rZXlTZXR0ZXJzfHwoZS5fX2tl
eVNldHRlcnM9e30pO3JldHVybiBuW3RdfHwoblt0XT1yKGUsdCkpfX07by5NaXhpbj17Y3JlYXRl
U3RhdGVTZXR0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG8uY3JlYXRlU3RhdGVTZXR0ZXIodGhpcyxl
KX0sY3JlYXRlU3RhdGVLZXlTZXR0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG8uY3JlYXRlU3RhdGVL
ZXlTZXR0ZXIodGhpcyxlKX19LHQuZXhwb3J0cz1vfSx7fV0sMjQ6W2Z1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7dmFyIHI9ZSgzMSksbz17Z2V0Q2hpbGRNYXBwaW5nOmZ1bmN0aW9uKGUsdCl7
cmV0dXJuIGU/cihlKTplfSxtZXJnZUNoaWxkTWFwcGluZ3M6ZnVuY3Rpb24oZSx0KXtmdW5jdGlv
biBuKG4pe3JldHVybiB0Lmhhc093blByb3BlcnR5KG4pP3Rbbl06ZVtuXX1lPWV8fHt9LHQ9dHx8
e307dmFyIHI9e30sbz1bXTtmb3IodmFyIGkgaW4gZSl0Lmhhc093blByb3BlcnR5KGkpP28ubGVu
Z3RoJiYocltpXT1vLG89W10pOm8ucHVzaChpKTt2YXIgYSxzPXt9O2Zvcih2YXIgdSBpbiB0KXtp
ZihyLmhhc093blByb3BlcnR5KHUpKWZvcihhPTA7YTxyW3VdLmxlbmd0aDthKyspe3ZhciBjPXJb
dV1bYV07c1tyW3VdW2FdXT1uKGMpfXNbdV09bih1KX1mb3IoYT0wO2E8by5sZW5ndGg7YSsrKXNb
b1thXV09bihvW2FdKTtyZXR1cm4gc319O3QuZXhwb3J0cz1vfSx7MzE6MzF9XSwyNTpbZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXtlLmFkZEV2ZW50TGlzdGVu
ZXIodCxuLCExKX1mdW5jdGlvbiBvKGUsdCxuKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuLCEx
KX12YXIgaT1lKDM5KSxhPWUoMSkscz1bXTtpLmNhblVzZURPTSYmZnVuY3Rpb24oKXt2YXIgZT1h
KCJhbmltYXRpb25lbmQiKSx0PWEoInRyYW5zaXRpb25lbmQiKTtlJiZzLnB1c2goZSksdCYmcy5w
dXNoKHQpfSgpO3ZhciB1PXthZGRFbmRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGUsdCl7aWYoMD09
PXMubGVuZ3RoKXJldHVybiB2b2lkIHdpbmRvdy5zZXRUaW1lb3V0KHQsMCk7cy5mb3JFYWNoKGZ1
bmN0aW9uKG4pe3IoZSxuLHQpfSl9LHJlbW92ZUVuZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oZSx0
KXswIT09cy5sZW5ndGgmJnMuZm9yRWFjaChmdW5jdGlvbihuKXtvKGUsbix0KX0pfX07dC5leHBv
cnRzPXV9LHsxOjEsMzk6Mzl9XSwyNjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5j
dGlvbiByKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fu
bm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbyhlLHQpe2lmKCFlKXRo
cm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1
cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYm
ImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGkoZSx0KXtpZigiZnVuY3Rpb24iIT10
eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBt
dXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3Rv
dHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxl
bnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNl
dFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfXZh
ciBhPWUoNDUpLHM9ZSg1KSx1PWUoMjQpLGM9ZSg0NykscD1jKHMuaXNWYWxpZEVsZW1lbnQpLGw9
ZSg0MCksZj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIG4saSxzO3IodGhpcyx0KTtmb3Io
dmFyIGM9YXJndW1lbnRzLmxlbmd0aCxwPUFycmF5KGMpLGw9MDtsPGM7bCsrKXBbbF09YXJndW1l
bnRzW2xdO3JldHVybiBuPWk9byh0aGlzLGUuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQocCkp
KSxpLnN0YXRlPXtjaGlsZHJlbjp1LmdldENoaWxkTWFwcGluZyhpLnByb3BzLmNoaWxkcmVuKX0s
aS5wZXJmb3JtQXBwZWFyPWZ1bmN0aW9uKGUpe2kuY3VycmVudGx5VHJhbnNpdGlvbmluZ0tleXNb
ZV09ITA7dmFyIHQ9aS5yZWZzW2VdO3QuY29tcG9uZW50V2lsbEFwcGVhcj90LmNvbXBvbmVudFdp
bGxBcHBlYXIoaS5faGFuZGxlRG9uZUFwcGVhcmluZy5iaW5kKGksZSkpOmkuX2hhbmRsZURvbmVB
cHBlYXJpbmcoZSl9LGkuX2hhbmRsZURvbmVBcHBlYXJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQ9aS5y
ZWZzW2VdO3QuY29tcG9uZW50RGlkQXBwZWFyJiZ0LmNvbXBvbmVudERpZEFwcGVhcigpLGRlbGV0
ZSBpLmN1cnJlbnRseVRyYW5zaXRpb25pbmdLZXlzW2VdO3ZhciBuPXUuZ2V0Q2hpbGRNYXBwaW5n
KGkucHJvcHMuY2hpbGRyZW4pO24mJm4uaGFzT3duUHJvcGVydHkoZSl8fGkucGVyZm9ybUxlYXZl
KGUpfSxpLnBlcmZvcm1FbnRlcj1mdW5jdGlvbihlKXtpLmN1cnJlbnRseVRyYW5zaXRpb25pbmdL
ZXlzW2VdPSEwO3ZhciB0PWkucmVmc1tlXTt0LmNvbXBvbmVudFdpbGxFbnRlcj90LmNvbXBvbmVu
dFdpbGxFbnRlcihpLl9oYW5kbGVEb25lRW50ZXJpbmcuYmluZChpLGUpKTppLl9oYW5kbGVEb25l
RW50ZXJpbmcoZSl9LGkuX2hhbmRsZURvbmVFbnRlcmluZz1mdW5jdGlvbihlKXt2YXIgdD1pLnJl
ZnNbZV07dC5jb21wb25lbnREaWRFbnRlciYmdC5jb21wb25lbnREaWRFbnRlcigpLGRlbGV0ZSBp
LmN1cnJlbnRseVRyYW5zaXRpb25pbmdLZXlzW2VdO3ZhciBuPXUuZ2V0Q2hpbGRNYXBwaW5nKGku
cHJvcHMuY2hpbGRyZW4pO24mJm4uaGFzT3duUHJvcGVydHkoZSl8fGkucGVyZm9ybUxlYXZlKGUp
fSxpLnBlcmZvcm1MZWF2ZT1mdW5jdGlvbihlKXtpLmN1cnJlbnRseVRyYW5zaXRpb25pbmdLZXlz
W2VdPSEwO3ZhciB0PWkucmVmc1tlXTt0LmNvbXBvbmVudFdpbGxMZWF2ZT90LmNvbXBvbmVudFdp
bGxMZWF2ZShpLl9oYW5kbGVEb25lTGVhdmluZy5iaW5kKGksZSkpOmkuX2hhbmRsZURvbmVMZWF2
aW5nKGUpfSxpLl9oYW5kbGVEb25lTGVhdmluZz1mdW5jdGlvbihlKXt2YXIgdD1pLnJlZnNbZV07
dC5jb21wb25lbnREaWRMZWF2ZSYmdC5jb21wb25lbnREaWRMZWF2ZSgpLGRlbGV0ZSBpLmN1cnJl
bnRseVRyYW5zaXRpb25pbmdLZXlzW2VdO3ZhciBuPXUuZ2V0Q2hpbGRNYXBwaW5nKGkucHJvcHMu
Y2hpbGRyZW4pO24mJm4uaGFzT3duUHJvcGVydHkoZSk/aS5wZXJmb3JtRW50ZXIoZSk6aS5zZXRT
dGF0ZShmdW5jdGlvbih0KXt2YXIgbj1hKHt9LHQuY2hpbGRyZW4pO3JldHVybiBkZWxldGUgbltl
XSx7Y2hpbGRyZW46bn19KX0scz1uLG8oaSxzKX1yZXR1cm4gaSh0LGUpLHQucHJvdG90eXBlLmNv
bXBvbmVudFdpbGxNb3VudD1mdW5jdGlvbigpe3RoaXMuY3VycmVudGx5VHJhbnNpdGlvbmluZ0tl
eXM9e30sdGhpcy5rZXlzVG9FbnRlcj1bXSx0aGlzLmtleXNUb0xlYXZlPVtdfSx0LnByb3RvdHlw
ZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc3RhdGUuY2hpbGRyZW47
Zm9yKHZhciB0IGluIGUpZVt0XSYmdGhpcy5wZXJmb3JtQXBwZWFyKHQpfSx0LnByb3RvdHlwZS5j
b21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPWZ1bmN0aW9uKGUpe3ZhciB0PXUuZ2V0Q2hpbGRNYXBw
aW5nKGUuY2hpbGRyZW4pLG49dGhpcy5zdGF0ZS5jaGlsZHJlbjt0aGlzLnNldFN0YXRlKHtjaGls
ZHJlbjp1Lm1lcmdlQ2hpbGRNYXBwaW5ncyhuLHQpfSk7dmFyIHI7Zm9yKHIgaW4gdCl7dmFyIG89
biYmbi5oYXNPd25Qcm9wZXJ0eShyKTshdFtyXXx8b3x8dGhpcy5jdXJyZW50bHlUcmFuc2l0aW9u
aW5nS2V5c1tyXXx8dGhpcy5rZXlzVG9FbnRlci5wdXNoKHIpfWZvcihyIGluIG4pe3ZhciBpPXQm
JnQuaGFzT3duUHJvcGVydHkocik7IW5bcl18fGl8fHRoaXMuY3VycmVudGx5VHJhbnNpdGlvbmlu
Z0tleXNbcl18fHRoaXMua2V5c1RvTGVhdmUucHVzaChyKX19LHQucHJvdG90eXBlLmNvbXBvbmVu
dERpZFVwZGF0ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMua2V5c1RvRW50ZXI7dGhpcy5rZXlzVG9F
bnRlcj1bXSxlLmZvckVhY2godGhpcy5wZXJmb3JtRW50ZXIpO3ZhciB0PXRoaXMua2V5c1RvTGVh
dmU7dGhpcy5rZXlzVG9MZWF2ZT1bXSx0LmZvckVhY2godGhpcy5wZXJmb3JtTGVhdmUpfSx0LnBy
b3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcy5zdGF0
ZS5jaGlsZHJlbil7dmFyIG49dGhpcy5zdGF0ZS5jaGlsZHJlblt0XTtuJiZlLnB1c2gocy5jbG9u
ZUVsZW1lbnQodGhpcy5wcm9wcy5jaGlsZEZhY3Rvcnkobikse3JlZjp0LGtleTp0fSkpfXZhciBy
PWEoe30sdGhpcy5wcm9wcyk7cmV0dXJuIGRlbGV0ZSByLnRyYW5zaXRpb25MZWF2ZSxkZWxldGUg
ci50cmFuc2l0aW9uTmFtZSxkZWxldGUgci50cmFuc2l0aW9uQXBwZWFyLGRlbGV0ZSByLnRyYW5z
aXRpb25FbnRlcixkZWxldGUgci5jaGlsZEZhY3RvcnksZGVsZXRlIHIudHJhbnNpdGlvbkxlYXZl
VGltZW91dCxkZWxldGUgci50cmFuc2l0aW9uRW50ZXJUaW1lb3V0LGRlbGV0ZSByLnRyYW5zaXRp
b25BcHBlYXJUaW1lb3V0LGRlbGV0ZSByLmNvbXBvbmVudCxzLmNyZWF0ZUVsZW1lbnQodGhpcy5w
cm9wcy5jb21wb25lbnQscixlKX0sdH0ocy5Db21wb25lbnQpO2YuZGlzcGxheU5hbWU9IlJlYWN0
VHJhbnNpdGlvbkdyb3VwIixmLnByb3BUeXBlcz17Y29tcG9uZW50OnAuYW55LGNoaWxkRmFjdG9y
eTpwLmZ1bmN9LGYuZGVmYXVsdFByb3BzPXtjb21wb25lbnQ6InNwYW4iLGNoaWxkRmFjdG9yeTps
LnRoYXRSZXR1cm5zQXJndW1lbnR9LHQuZXhwb3J0cz1mfSx7MjQ6MjQsNDA6NDAsNDU6NDUsNDc6
NDcsNTo1fV0sMjc6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPSIxNS41
LjQifSx7fV0sMjg6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgzKSxvPWUo
NSksaT0oZSg2KSxlKDEyKSksYT1lKDcpLHM9ZSgxNyksdT1lKDI2KSxjPWUoMzUpLHA9ZSgzNyk7
by5hZGRvbnM9e0NTU1RyYW5zaXRpb25Hcm91cDphLExpbmtlZFN0YXRlTWl4aW46cixQdXJlUmVu
ZGVyTWl4aW46aSxUcmFuc2l0aW9uR3JvdXA6dSxjcmVhdGVGcmFnbWVudDpzLmNyZWF0ZSxzaGFs
bG93Q29tcGFyZTpjLHVwZGF0ZTpwfSx0LmV4cG9ydHM9b30sezEyOjEyLDE3OjE3LDI2OjI2LDM6
MywzNTozNSwzNzozNyw1OjUsNjo2LDc6N31dLDI5OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJp
Y3QiO3ZhciByPWUoNDUpLG89ZSgyOCksaT1yKG8se19fU0VDUkVUX0lOSkVDVEVEX1JFQUNUX0RP
TV9ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOm51bGwsX19TRUNSRVRfSU5URVJOQUxT
X0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6e1JlYWN0Q3VycmVudE93bmVyOmUoMTMp
fX0pO3QuZXhwb3J0cz1pfSx7MTM6MTMsMjg6MjgsNDU6NDV9XSwzMDpbZnVuY3Rpb24oZSx0LG4p
eyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ITF9LHt9XSwzMTpbZnVuY3Rpb24oZSx0LG4peyhmdW5j
dGlvbihuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtpZihlJiYib2JqZWN0Ij09
dHlwZW9mIGUpe3ZhciBvPWU7dm9pZCAwPT09b1tuXSYmbnVsbCE9dCYmKG9bbl09dCl9fWZ1bmN0
aW9uIG8oZSx0KXtpZihudWxsPT1lKXJldHVybiBlO3ZhciBuPXt9O3JldHVybiBpKGUscixuKSxu
fXZhciBpPShlKDIpLGUoMzYpKTtlKDQ0KTt2b2lkIDAhPT1uJiZuLmVudix0LmV4cG9ydHM9b30p
LmNhbGwodGhpcyx2b2lkIDApfSx7MjoyLDM2OjM2LDQ0OjQ0fV0sMzI6W2Z1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lJiYobyYmZVtvXXx8ZVtpXSk7aWYo
ImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIHR9dmFyIG89ImZ1bmN0aW9uIj09dHlwZW9mIFN5
bWJvbCYmU3ltYm9sLml0ZXJhdG9yLGk9IkBAaXRlcmF0b3IiO3QuZXhwb3J0cz1yfSx7fV0sMzM6
W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gaS5pc1Zh
bGlkRWxlbWVudChlKXx8bygiMTQzIiksZX12YXIgbz1lKDM0KSxpPWUoMTUpO2UoNDIpO3QuZXhw
b3J0cz1yfSx7MTU6MTUsMzQ6MzQsNDI6NDJ9XSwzNDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3Ry
aWN0IjtmdW5jdGlvbiByKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLTEsbj0iTWluaWZp
ZWQgUmVhY3QgZXJyb3IgIyIrZSsiOyB2aXNpdCBodHRwOi8vZmFjZWJvb2suZ2l0aHViLmlvL3Jl
YWN0L2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD0iK2Uscj0wO3I8dDtyKyspbis9
IiZhcmdzW109IitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW3IrMV0pO24rPSIgZm9yIHRo
ZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZv
ciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLiI7dmFyIG89bmV3
IEVycm9yKG4pO3Rocm93IG8ubmFtZT0iSW52YXJpYW50IFZpb2xhdGlvbiIsby5mcmFtZXNUb1Bv
cD0xLG99dC5leHBvcnRzPXJ9LHt9XSwzNTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijtm
dW5jdGlvbiByKGUsdCxuKXtyZXR1cm4hbyhlLnByb3BzLHQpfHwhbyhlLnN0YXRlLG4pfXZhciBv
PWUoNDMpO3QuZXhwb3J0cz1yfSx7NDM6NDN9XSwzNjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3Ry
aWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGUmJiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9
ZS5rZXk/Yy5lc2NhcGUoZS5rZXkpOnQudG9TdHJpbmcoMzYpfWZ1bmN0aW9uIG8oZSx0LG4saSl7
dmFyIGY9dHlwZW9mIGU7aWYoInVuZGVmaW5lZCIhPT1mJiYiYm9vbGVhbiIhPT1mfHwoZT1udWxs
KSxudWxsPT09ZXx8InN0cmluZyI9PT1mfHwibnVtYmVyIj09PWZ8fCJvYmplY3QiPT09ZiYmZS4k
JHR5cGVvZj09PXMpcmV0dXJuIG4oaSxlLCIiPT09dD9wK3IoZSwwKTp0KSwxO3ZhciBkLGgseT0w
LHY9IiI9PT10P3A6dCtsO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciBtPTA7bTxlLmxlbmd0
aDttKyspZD1lW21dLGg9dityKGQsbSkseSs9byhkLGgsbixpKTtlbHNle3ZhciBFPXUoZSk7aWYo
RSl7dmFyIGcsYj1FLmNhbGwoZSk7aWYoRSE9PWUuZW50cmllcylmb3IodmFyIF89MDshKGc9Yi5u
ZXh0KCkpLmRvbmU7KWQ9Zy52YWx1ZSxoPXYrcihkLF8rKykseSs9byhkLGgsbixpKTtlbHNlIGZv
cig7IShnPWIubmV4dCgpKS5kb25lOyl7dmFyIHc9Zy52YWx1ZTt3JiYoZD13WzFdLGg9ditjLmVz
Y2FwZSh3WzBdKStsK3IoZCwwKSx5Kz1vKGQsaCxuLGkpKX19ZWxzZSBpZigib2JqZWN0Ij09PWYp
e3ZhciBBPVN0cmluZyhlKTthKCIzMSIsIltvYmplY3QgT2JqZWN0XSI9PT1BPyJvYmplY3Qgd2l0
aCBrZXlzIHsiK09iamVjdC5rZXlzKGUpLmpvaW4oIiwgIikrIn0iOkEsIiIpfX1yZXR1cm4geX1m
dW5jdGlvbiBpKGUsdCxuKXtyZXR1cm4gbnVsbD09ZT8wOm8oZSwiIix0LG4pfXZhciBhPWUoMzQp
LHM9KGUoMTMpLGUoMTYpKSx1PWUoMzIpLGM9KGUoNDIpLGUoMikpLHA9KGUoNDQpLCIuIiksbD0i
OiI7dC5leHBvcnRzPWl9LHsxMzoxMywxNjoxNiwyOjIsMzI6MzIsMzQ6MzQsNDI6NDIsNDQ6NDR9
XSwzNzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBB
cnJheS5pc0FycmF5KGUpP2UuY29uY2F0KCk6ZSYmIm9iamVjdCI9PXR5cGVvZiBlP3MobmV3IGUu
Y29uc3RydWN0b3IsZSk6ZX1mdW5jdGlvbiBvKGUsdCxuKXtBcnJheS5pc0FycmF5KGUpfHxhKCIx
IixuLGUpO3ZhciByPXRbbl07QXJyYXkuaXNBcnJheShyKXx8YSgiMiIsbixyKX1mdW5jdGlvbiBp
KGUsdCl7aWYoIm9iamVjdCIhPXR5cGVvZiB0JiZhKCIzIix5LmpvaW4oIiwgIiksZiksdS5jYWxs
KHQsZikpcmV0dXJuIDEhPT1PYmplY3Qua2V5cyh0KS5sZW5ndGgmJmEoIjQiLGYpLHRbZl07dmFy
IG49cihlKTtpZih1LmNhbGwodCxkKSl7dmFyIG09dFtkXTttJiYib2JqZWN0Ij09dHlwZW9mIG18
fGEoIjUiLGQsbSksbiYmIm9iamVjdCI9PXR5cGVvZiBufHxhKCI2IixkLG4pLHMobix0W2RdKX11
LmNhbGwodCxjKSYmKG8oZSx0LGMpLHRbY10uZm9yRWFjaChmdW5jdGlvbihlKXtuLnB1c2goZSl9
KSksdS5jYWxsKHQscCkmJihvKGUsdCxwKSx0W3BdLmZvckVhY2goZnVuY3Rpb24oZSl7bi51bnNo
aWZ0KGUpfSkpLHUuY2FsbCh0LGwpJiYoQXJyYXkuaXNBcnJheShlKXx8YSgiNyIsbCxlKSxBcnJh
eS5pc0FycmF5KHRbbF0pfHxhKCI4IixsLHRbbF0pLHRbbF0uZm9yRWFjaChmdW5jdGlvbihlKXtB
cnJheS5pc0FycmF5KGUpfHxhKCI4IixsLHRbbF0pLG4uc3BsaWNlLmFwcGx5KG4sZSl9KSksdS5j
YWxsKHQsaCkmJigiZnVuY3Rpb24iIT10eXBlb2YgdFtoXSYmYSgiOSIsaCx0W2hdKSxuPXRbaF0o
bikpO2Zvcih2YXIgRSBpbiB0KXYuaGFzT3duUHJvcGVydHkoRSkmJnZbRV18fChuW0VdPWkoZVtF
XSx0W0VdKSk7cmV0dXJuIG59dmFyIGE9ZSgzNCkscz1lKDQ1KSx1PShlKDQyKSx7fS5oYXNPd25Q
cm9wZXJ0eSksYz0iJHB1c2giLHA9IiR1bnNoaWZ0IixsPSIkc3BsaWNlIixmPSIkc2V0IixkPSIk
bWVyZ2UiLGg9IiRhcHBseSIseT1bYyxwLGwsZixkLGhdLHY9e307eS5mb3JFYWNoKGZ1bmN0aW9u
KGUpe3ZbZV09ITB9KSx0LmV4cG9ydHM9aX0sezM0OjM0LDQyOjQyLDQ1OjQ1fV0sMzg6W2Z1bmN0
aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj1lO24ucGFy
ZW50Tm9kZTspbj1uLnBhcmVudE5vZGU7dmFyIHI9bi5xdWVyeVNlbGVjdG9yQWxsKHQpO3JldHVy
bi0xIT09QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChyLGUpfXZhciBvPWUoNDIpLGk9e2Fk
ZENsYXNzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuL1xzLy50ZXN0KHQpJiZvKCExKSx0JiYoZS5jbGFz
c0xpc3Q/ZS5jbGFzc0xpc3QuYWRkKHQpOmkuaGFzQ2xhc3MoZSx0KXx8KGUuY2xhc3NOYW1lPWUu
Y2xhc3NOYW1lKyIgIit0KSksZX0scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oZSx0KXtyZXR1cm4vXHMv
LnRlc3QodCkmJm8oITEpLHQmJihlLmNsYXNzTGlzdD9lLmNsYXNzTGlzdC5yZW1vdmUodCk6aS5o
YXNDbGFzcyhlLHQpJiYoZS5jbGFzc05hbWU9ZS5jbGFzc05hbWUucmVwbGFjZShuZXcgUmVnRXhw
KCIoXnxcXHMpIit0KyIoPzpcXHN8JCkiLCJnIiksIiQxIikucmVwbGFjZSgvXHMrL2csIiAiKS5y
ZXBsYWNlKC9eXHMqfFxzKiQvZywiIikpKSxlfSxjb25kaXRpb25DbGFzczpmdW5jdGlvbihlLHQs
bil7cmV0dXJuKG4/aS5hZGRDbGFzczppLnJlbW92ZUNsYXNzKShlLHQpfSxoYXNDbGFzczpmdW5j
dGlvbihlLHQpe3JldHVybi9ccy8udGVzdCh0KSYmbyghMSksZS5jbGFzc0xpc3Q/ISF0JiZlLmNs
YXNzTGlzdC5jb250YWlucyh0KTooIiAiK2UuY2xhc3NOYW1lKyIgIikuaW5kZXhPZigiICIrdCsi
ICIpPi0xfSxtYXRjaGVzU2VsZWN0b3I6ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZS5tYXRjaGVzfHxl
LndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8ZS5tb3pNYXRjaGVzU2VsZWN0b3J8fGUubXNNYXRjaGVz
U2VsZWN0b3J8fGZ1bmN0aW9uKHQpe3JldHVybiByKGUsdCl9KS5jYWxsKGUsdCl9fTt0LmV4cG9y
dHM9aX0sezQyOjQyfV0sMzk6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ISgi
dW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvd3x8IXdpbmRvdy5kb2N1bWVudHx8IXdpbmRvdy5kb2N1
bWVudC5jcmVhdGVFbGVtZW50KSxvPXtjYW5Vc2VET006cixjYW5Vc2VXb3JrZXJzOiJ1bmRlZmlu
ZWQiIT10eXBlb2YgV29ya2VyLGNhblVzZUV2ZW50TGlzdGVuZXJzOnImJiEoIXdpbmRvdy5hZGRF
dmVudExpc3RlbmVyJiYhd2luZG93LmF0dGFjaEV2ZW50KSxjYW5Vc2VWaWV3cG9ydDpyJiYhIXdp
bmRvdy5zY3JlZW4saXNJbldvcmtlcjohcn07dC5leHBvcnRzPW99LHt9XSw0MDpbZnVuY3Rpb24o
ZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVy
biBlfX12YXIgbz1mdW5jdGlvbigpe307by50aGF0UmV0dXJucz1yLG8udGhhdFJldHVybnNGYWxz
ZT1yKCExKSxvLnRoYXRSZXR1cm5zVHJ1ZT1yKCEwKSxvLnRoYXRSZXR1cm5zTnVsbD1yKG51bGwp
LG8udGhhdFJldHVybnNUaGlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LG8udGhhdFJldHVybnNB
cmd1bWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZX0sdC5leHBvcnRzPW99LHt9XSw0MTpbZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17fTt0LmV4cG9ydHM9cn0se31dLDQyOltmdW5j
dGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scixpLGEscyx1KXtpZihv
KHQpLCFlKXt2YXIgYztpZih2b2lkIDA9PT10KWM9bmV3IEVycm9yKCJNaW5pZmllZCBleGNlcHRp
b24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgdGhl
IGZ1bGwgZXJyb3IgbWVzc2FnZSBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLiIpO2Vs
c2V7dmFyIHA9W24scixpLGEscyx1XSxsPTA7Yz1uZXcgRXJyb3IodC5yZXBsYWNlKC8lcy9nLGZ1
bmN0aW9uKCl7cmV0dXJuIHBbbCsrXX0pKSxjLm5hbWU9IkludmFyaWFudCBWaW9sYXRpb24ifXRo
cm93IGMuZnJhbWVzVG9Qb3A9MSxjfX12YXIgbz1mdW5jdGlvbihlKXt9O3QuZXhwb3J0cz1yfSx7
fV0sNDM6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVy
biBlPT09dD8wIT09ZXx8MCE9PXR8fDEvZT09MS90OmUhPT1lJiZ0IT09dH1mdW5jdGlvbiBvKGUs
dCl7aWYocihlLHQpKXJldHVybiEwO2lmKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWV8fCJv
YmplY3QiIT10eXBlb2YgdHx8bnVsbD09PXQpcmV0dXJuITE7dmFyIG49T2JqZWN0LmtleXMoZSks
bz1PYmplY3Qua2V5cyh0KTtpZihuLmxlbmd0aCE9PW8ubGVuZ3RoKXJldHVybiExO2Zvcih2YXIg
YT0wO2E8bi5sZW5ndGg7YSsrKWlmKCFpLmNhbGwodCxuW2FdKXx8IXIoZVtuW2FdXSx0W25bYV1d
KSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgaT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5
O3QuZXhwb3J0cz1vfSx7fV0sNDQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9
ZSg0MCksbz1yO3QuZXhwb3J0cz1vfSx7NDA6NDB9XSw0NTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ug
c3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKG51bGw9PT1lfHx2b2lkIDA9PT1lKXRocm93IG5ldyBU
eXBlRXJyb3IoIk9iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5k
ZWZpbmVkIik7cmV0dXJuIE9iamVjdChlKX12YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1i
b2xzLGk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxhPU9iamVjdC5wcm90b3R5cGUu
cHJvcGVydHlJc0VudW1lcmFibGU7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e2lmKCFPYmplY3Qu
YXNzaWduKXJldHVybiExO3ZhciBlPW5ldyBTdHJpbmcoImFiYyIpO2lmKGVbNV09ImRlIiwiNSI9
PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKVswXSlyZXR1cm4hMTtmb3IodmFyIHQ9e30s
bj0wO248MTA7bisrKXRbIl8iK1N0cmluZy5mcm9tQ2hhckNvZGUobildPW47aWYoIjAxMjM0NTY3
ODkiIT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCkubWFwKGZ1bmN0aW9uKGUpe3JldHVy
biB0W2VdfSkuam9pbigiIikpcmV0dXJuITE7dmFyIHI9e307cmV0dXJuImFiY2RlZmdoaWprbG1u
b3BxcnN0Ii5zcGxpdCgiIikuZm9yRWFjaChmdW5jdGlvbihlKXtyW2VdPWV9KSwiYWJjZGVmZ2hp
amtsbW5vcHFyc3QiPT09T2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxyKSkuam9pbigiIil9
Y2F0Y2goZSl7cmV0dXJuITF9fSgpP09iamVjdC5hc3NpZ246ZnVuY3Rpb24oZSx0KXtmb3IodmFy
IG4scyx1PXIoZSksYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspe249T2JqZWN0KGFyZ3VtZW50
c1tjXSk7Zm9yKHZhciBwIGluIG4paS5jYWxsKG4scCkmJih1W3BdPW5bcF0pO2lmKG8pe3M9byhu
KTtmb3IodmFyIGw9MDtsPHMubGVuZ3RoO2wrKylhLmNhbGwobixzW2xdKSYmKHVbc1tsXV09bltz
W2xdXSl9fXJldHVybiB1fX0se31dLDQ2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1
bmN0aW9uIHIoZSx0LG4scixvKXt9dC5leHBvcnRzPXJ9LHs0Mjo0Miw0NDo0NCw0OTo0OX1dLDQ3
OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoNDgpCis7dC5leHBvcnRzPWZ1
bmN0aW9uKGUpe3JldHVybiByKGUsITEpfX0sezQ4OjQ4fV0sNDg6W2Z1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7dmFyIHI9ZSg0MCksbz1lKDQyKSxpPShlKDQ0KSxlKDQ5KSksYT1lKDQ2KTt0
LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3ZhciB0PWUmJih3JiZlW3ddfHxl
W0FdKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gdH1mdW5jdGlvbiBzKGUsdCl7cmV0
dXJuIGU9PT10PzAhPT1lfHwxL2U9PTEvdDplIT09ZSYmdCE9PXR9ZnVuY3Rpb24gdShlKXt0aGlz
Lm1lc3NhZ2U9ZSx0aGlzLnN0YWNrPSIifWZ1bmN0aW9uIGMoZSl7ZnVuY3Rpb24gbihuLHIsYSxz
LGMscCxsKXtpZihzPXN8fFQscD1wfHxhLGwhPT1pKWlmKHQpbyghMSwiQ2FsbGluZyBQcm9wVHlw
ZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBl
c2AgcGFja2FnZS4gVXNlIGBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVt
LiBSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzIik7ZWxzZTty
ZXR1cm4gbnVsbD09clthXT9uP25ldyB1KG51bGw9PT1yW2FdPyJUaGUgIitjKyIgYCIrcCsiYCBp
cyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gYCIrcysiYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAu
IjoiVGhlICIrYysiIGAiK3ArImAgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluIGAiK3MrImAsIGJ1
dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuIik6bnVsbDplKHIsYSxzLGMscCl9dmFyIHI9bi5i
aW5kKG51bGwsITEpO3JldHVybiByLmlzUmVxdWlyZWQ9bi5iaW5kKG51bGwsITApLHJ9ZnVuY3Rp
b24gcChlKXtmdW5jdGlvbiB0KHQsbixyLG8saSxhKXt2YXIgcz10W25dO2lmKGcocykhPT1lKXJl
dHVybiBuZXcgdSgiSW52YWxpZCAiK28rIiBgIitpKyJgIG9mIHR5cGUgYCIrYihzKSsiYCBzdXBw
bGllZCB0byBgIityKyJgLCBleHBlY3RlZCBgIitlKyJgLiIpO3JldHVybiBudWxsfXJldHVybiBj
KHQpfWZ1bmN0aW9uIGwoZSl7ZnVuY3Rpb24gdCh0LG4scixvLGEpe2lmKCJmdW5jdGlvbiIhPXR5
cGVvZiBlKXJldHVybiBuZXcgdSgiUHJvcGVydHkgYCIrYSsiYCBvZiBjb21wb25lbnQgYCIrcisi
YCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgYXJyYXlPZi4iKTt2YXIgcz10
W25dO2lmKCFBcnJheS5pc0FycmF5KHMpKXtyZXR1cm4gbmV3IHUoIkludmFsaWQgIitvKyIgYCIr
YSsiYCBvZiB0eXBlIGAiK2cocykrImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgYW4g
YXJyYXkuIil9Zm9yKHZhciBjPTA7YzxzLmxlbmd0aDtjKyspe3ZhciBwPWUocyxjLHIsbyxhKyJb
IitjKyJdIixpKTtpZihwIGluc3RhbmNlb2YgRXJyb3IpcmV0dXJuIHB9cmV0dXJuIG51bGx9cmV0
dXJuIGModCl9ZnVuY3Rpb24gZihlKXtmdW5jdGlvbiB0KHQsbixyLG8saSl7aWYoISh0W25daW5z
dGFuY2VvZiBlKSl7dmFyIGE9ZS5uYW1lfHxUO3JldHVybiBuZXcgdSgiSW52YWxpZCAiK28rIiBg
IitpKyJgIG9mIHR5cGUgYCIrXyh0W25dKSsiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3Rl
ZCBpbnN0YW5jZSBvZiBgIithKyJgLiIpfXJldHVybiBudWxsfXJldHVybiBjKHQpfWZ1bmN0aW9u
IGQoZSl7ZnVuY3Rpb24gdCh0LG4scixvLGkpe2Zvcih2YXIgYT10W25dLGM9MDtjPGUubGVuZ3Ro
O2MrKylpZihzKGEsZVtjXSkpcmV0dXJuIG51bGw7cmV0dXJuIG5ldyB1KCJJbnZhbGlkICIrbysi
IGAiK2krImAgb2YgdmFsdWUgYCIrYSsiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBv
bmUgb2YgIitKU09OLnN0cmluZ2lmeShlKSsiLiIpfXJldHVybiBBcnJheS5pc0FycmF5KGUpP2Mo
dCk6ci50aGF0UmV0dXJuc051bGx9ZnVuY3Rpb24gaChlKXtmdW5jdGlvbiB0KHQsbixyLG8sYSl7
aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpcmV0dXJuIG5ldyB1KCJQcm9wZXJ0eSBgIithKyJgIG9m
IGNvbXBvbmVudCBgIityKyJgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBv
YmplY3RPZi4iKTt2YXIgcz10W25dLGM9ZyhzKTtpZigib2JqZWN0IiE9PWMpcmV0dXJuIG5ldyB1
KCJJbnZhbGlkICIrbysiIGAiK2ErImAgb2YgdHlwZSBgIitjKyJgIHN1cHBsaWVkIHRvIGAiK3Ir
ImAsIGV4cGVjdGVkIGFuIG9iamVjdC4iKTtmb3IodmFyIHAgaW4gcylpZihzLmhhc093blByb3Bl
cnR5KHApKXt2YXIgbD1lKHMscCxyLG8sYSsiLiIrcCxpKTtpZihsIGluc3RhbmNlb2YgRXJyb3Ip
cmV0dXJuIGx9cmV0dXJuIG51bGx9cmV0dXJuIGModCl9ZnVuY3Rpb24geShlKXtmdW5jdGlvbiB0
KHQsbixyLG8sYSl7Zm9yKHZhciBzPTA7czxlLmxlbmd0aDtzKyspe2lmKG51bGw9PSgwLGVbc10p
KHQsbixyLG8sYSxpKSlyZXR1cm4gbnVsbH1yZXR1cm4gbmV3IHUoIkludmFsaWQgIitvKyIgYCIr
YSsiYCBzdXBwbGllZCB0byBgIityKyJgLiIpfXJldHVybiBBcnJheS5pc0FycmF5KGUpP2ModCk6
ci50aGF0UmV0dXJuc051bGx9ZnVuY3Rpb24gdihlKXtmdW5jdGlvbiB0KHQsbixyLG8sYSl7dmFy
IHM9dFtuXSxjPWcocyk7aWYoIm9iamVjdCIhPT1jKXJldHVybiBuZXcgdSgiSW52YWxpZCAiK28r
IiBgIithKyJgIG9mIHR5cGUgYCIrYysiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBg
b2JqZWN0YC4iKTtmb3IodmFyIHAgaW4gZSl7dmFyIGw9ZVtwXTtpZihsKXt2YXIgZj1sKHMscCxy
LG8sYSsiLiIrcCxpKTtpZihmKXJldHVybiBmfX1yZXR1cm4gbnVsbH1yZXR1cm4gYyh0KX1mdW5j
dGlvbiBtKHQpe3N3aXRjaCh0eXBlb2YgdCl7Y2FzZSJudW1iZXIiOmNhc2Uic3RyaW5nIjpjYXNl
InVuZGVmaW5lZCI6cmV0dXJuITA7Y2FzZSJib29sZWFuIjpyZXR1cm4hdDtjYXNlIm9iamVjdCI6
aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdC5ldmVyeShtKTtpZihudWxsPT09dHx8ZSh0KSly
ZXR1cm4hMDt2YXIgcj1uKHQpO2lmKCFyKXJldHVybiExO3ZhciBvLGk9ci5jYWxsKHQpO2lmKHIh
PT10LmVudHJpZXMpe2Zvcig7IShvPWkubmV4dCgpKS5kb25lOylpZighbShvLnZhbHVlKSlyZXR1
cm4hMX1lbHNlIGZvcig7IShvPWkubmV4dCgpKS5kb25lOyl7dmFyIGE9by52YWx1ZTtpZihhJiYh
bShhWzFdKSlyZXR1cm4hMX1yZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBFKGUs
dCl7cmV0dXJuInN5bWJvbCI9PT1lfHwoIlN5bWJvbCI9PT10WyJAQHRvU3RyaW5nVGFnIl18fCJm
dW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQgaW5zdGFuY2VvZiBTeW1ib2wpfWZ1bmN0aW9uIGco
ZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5IjplIGluc3Rh
bmNlb2YgUmVnRXhwPyJvYmplY3QiOkUodCxlKT8ic3ltYm9sIjp0fWZ1bmN0aW9uIGIoZSl7dmFy
IHQ9ZyhlKTtpZigib2JqZWN0Ij09PXQpe2lmKGUgaW5zdGFuY2VvZiBEYXRlKXJldHVybiJkYXRl
IjtpZihlIGluc3RhbmNlb2YgUmVnRXhwKXJldHVybiJyZWdleHAifXJldHVybiB0fWZ1bmN0aW9u
IF8oZSl7cmV0dXJuIGUuY29uc3RydWN0b3ImJmUuY29uc3RydWN0b3IubmFtZT9lLmNvbnN0cnVj
dG9yLm5hbWU6VH12YXIgdz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0
b3IsQT0iQEBpdGVyYXRvciIsVD0iPDxhbm9ueW1vdXM+PiIseD17YXJyYXk6cCgiYXJyYXkiKSxi
b29sOnAoImJvb2xlYW4iKSxmdW5jOnAoImZ1bmN0aW9uIiksbnVtYmVyOnAoIm51bWJlciIpLG9i
amVjdDpwKCJvYmplY3QiKSxzdHJpbmc6cCgic3RyaW5nIiksc3ltYm9sOnAoInN5bWJvbCIpLGFu
eTpmdW5jdGlvbigpe3JldHVybiBjKHIudGhhdFJldHVybnNOdWxsKX0oKSxhcnJheU9mOmwsZWxl
bWVudDpmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxuLHIsbyxpKXt2YXIgYT10W25dO2lmKCFlKGEp
KXtyZXR1cm4gbmV3IHUoIkludmFsaWQgIitvKyIgYCIraSsiYCBvZiB0eXBlIGAiK2coYSkrImAg
c3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50LiIpfXJl
dHVybiBudWxsfXJldHVybiBjKHQpfSgpLGluc3RhbmNlT2Y6Zixub2RlOmZ1bmN0aW9uKCl7ZnVu
Y3Rpb24gZShlLHQsbixyLG8pe3JldHVybiBtKGVbdF0pP251bGw6bmV3IHUoIkludmFsaWQgIity
KyIgYCIrbysiYCBzdXBwbGllZCB0byBgIituKyJgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4iKX1y
ZXR1cm4gYyhlKX0oKSxvYmplY3RPZjpoLG9uZU9mOmQsb25lT2ZUeXBlOnksc2hhcGU6dn07cmV0
dXJuIHUucHJvdG90eXBlPUVycm9yLnByb3RvdHlwZSx4LmNoZWNrUHJvcFR5cGVzPWEseC5Qcm9w
VHlwZXM9eCx4fX0sezQwOjQwLDQyOjQyLDQ0OjQ0LDQ2OjQ2LDQ5OjQ5fV0sNDk6W2Z1bmN0aW9u
KGUsdCxuKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPSJTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19P
Ul9ZT1VfV0lMTF9CRV9GSVJFRCJ9LHt9XX0se30sWzI5XSkoMjkpfSk7ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVz
L3JlYWN0L2Rpc3QvcmVhY3QuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvcmVh
Y3QvZGlzdC9yZWFjdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMDdiOTQxOTJhOGZlMzE5NjVlMWYyYWY5MTJj
M2RmZjIyNmUzYjRiCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9t
b2R1bGVzL3JlYWN0L2Rpc3QvcmVhY3QuanMKQEAgLTAsMCArMSwzOTg3IEBACisgLyoqCisgICog
UmVhY3QgdjE1LjUuNAorICAqLworKGZ1bmN0aW9uKGYpe2lmKHR5cGVvZiBleHBvcnRzPT09Im9i
amVjdCImJnR5cGVvZiBtb2R1bGUhPT0idW5kZWZpbmVkIil7bW9kdWxlLmV4cG9ydHM9ZigpfWVs
c2UgaWYodHlwZW9mIGRlZmluZT09PSJmdW5jdGlvbiImJmRlZmluZS5hbWQpe2RlZmluZShbXSxm
KX1lbHNle3ZhciBnO2lmKHR5cGVvZiB3aW5kb3chPT0idW5kZWZpbmVkIil7Zz13aW5kb3d9ZWxz
ZSBpZih0eXBlb2YgZ2xvYmFsIT09InVuZGVmaW5lZCIpe2c9Z2xvYmFsfWVsc2UgaWYodHlwZW9m
IHNlbGYhPT0idW5kZWZpbmVkIil7Zz1zZWxmfWVsc2V7Zz10aGlzfWcuUmVhY3QgPSBmKCl9fSko
ZnVuY3Rpb24oKXt2YXIgZGVmaW5lLG1vZHVsZSxleHBvcnRzO3JldHVybiAoZnVuY3Rpb24gZSh0
LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJl
cXVpcmU9PSJmdW5jdGlvbiImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSly
ZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitvKyIn
Iik7dGhyb3cgZi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixmfXZhciBsPW5bb109e2V4cG9ydHM6
e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTty
ZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9
dmFyIGk9dHlwZW9mIHJlcXVpcmU9PSJmdW5jdGlvbiImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxy
Lmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pKHsxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVs
ZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIElu
Yy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBs
aWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQ
QVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqIAorICovCisKKyd1c2Ug
c3RyaWN0JzsKKworLyoqCisgKiBFc2NhcGUgYW5kIHdyYXAga2V5IHNvIGl0IGlzIHNhZmUgdG8g
dXNlIGFzIGEgcmVhY3RpZAorICoKKyAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgdG8gYmUgZXNjYXBl
ZC4KKyAqIEByZXR1cm4ge3N0cmluZ30gdGhlIGVzY2FwZWQga2V5LgorICovCisKK2Z1bmN0aW9u
IGVzY2FwZShrZXkpIHsKKyAgdmFyIGVzY2FwZVJlZ2V4ID0gL1s9Ol0vZzsKKyAgdmFyIGVzY2Fw
ZXJMb29rdXAgPSB7CisgICAgJz0nOiAnPTAnLAorICAgICc6JzogJz0yJworICB9OworICB2YXIg
ZXNjYXBlZFN0cmluZyA9ICgnJyArIGtleSkucmVwbGFjZShlc2NhcGVSZWdleCwgZnVuY3Rpb24g
KG1hdGNoKSB7CisgICAgcmV0dXJuIGVzY2FwZXJMb29rdXBbbWF0Y2hdOworICB9KTsKKworICBy
ZXR1cm4gJyQnICsgZXNjYXBlZFN0cmluZzsKK30KKworLyoqCisgKiBVbmVzY2FwZSBhbmQgdW53
cmFwIGtleSBmb3IgaHVtYW4tcmVhZGFibGUgZGlzcGxheQorICoKKyAqIEBwYXJhbSB7c3RyaW5n
fSBrZXkgdG8gdW5lc2NhcGUuCisgKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSB1bmVzY2FwZWQga2V5
LgorICovCitmdW5jdGlvbiB1bmVzY2FwZShrZXkpIHsKKyAgdmFyIHVuZXNjYXBlUmVnZXggPSAv
KD0wfD0yKS9nOworICB2YXIgdW5lc2NhcGVyTG9va3VwID0geworICAgICc9MCc6ICc9JywKKyAg
ICAnPTInOiAnOicKKyAgfTsKKyAgdmFyIGtleVN1YnN0cmluZyA9IGtleVswXSA9PT0gJy4nICYm
IGtleVsxXSA9PT0gJyQnID8ga2V5LnN1YnN0cmluZygyKSA6IGtleS5zdWJzdHJpbmcoMSk7CisK
KyAgcmV0dXJuICgnJyArIGtleVN1YnN0cmluZykucmVwbGFjZSh1bmVzY2FwZVJlZ2V4LCBmdW5j
dGlvbiAobWF0Y2gpIHsKKyAgICByZXR1cm4gdW5lc2NhcGVyTG9va3VwW21hdGNoXTsKKyAgfSk7
Cit9CisKK3ZhciBLZXlFc2NhcGVVdGlscyA9IHsKKyAgZXNjYXBlOiBlc2NhcGUsCisgIHVuZXNj
YXBlOiB1bmVzY2FwZQorfTsKKworbW9kdWxlLmV4cG9ydHMgPSBLZXlFc2NhcGVVdGlsczsKK30s
e31dLDI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmln
aHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUg
bGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rv
cnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50
IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJl
Y3RvcnkuCisgKgorICogCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgX3Byb2RJbnZhcmlh
bnQgPSBfZGVyZXFfKDI1KTsKKwordmFyIGludmFyaWFudCA9IF9kZXJlcV8oMjkpOworCisvKioK
KyAqIFN0YXRpYyBwb29sZXJzLiBTZXZlcmFsIGN1c3RvbSB2ZXJzaW9ucyBmb3IgZWFjaCBwb3Rl
bnRpYWwgbnVtYmVyIG9mCisgKiBhcmd1bWVudHMuIEEgY29tcGxldGVseSBnZW5lcmljIHBvb2xl
ciBpcyBlYXN5IHRvIGltcGxlbWVudCwgYnV0IHdvdWxkCisgKiByZXF1aXJlIGFjY2Vzc2luZyB0
aGUgYGFyZ3VtZW50c2Agb2JqZWN0LiBJbiBlYWNoIG9mIHRoZXNlLCBgdGhpc2AgcmVmZXJzIHRv
CisgKiB0aGUgQ2xhc3MgaXRzZWxmLCBub3QgYW4gaW5zdGFuY2UuIElmIGFueSBvdGhlcnMgYXJl
IG5lZWRlZCwgc2ltcGx5IGFkZCB0aGVtCisgKiBoZXJlLCBvciBpbiB0aGVpciBvd24gZmlsZXMu
CisgKi8KK3ZhciBvbmVBcmd1bWVudFBvb2xlciA9IGZ1bmN0aW9uIChjb3B5RmllbGRzRnJvbSkg
eworICB2YXIgS2xhc3MgPSB0aGlzOworICBpZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCkg
eworICAgIHZhciBpbnN0YW5jZSA9IEtsYXNzLmluc3RhbmNlUG9vbC5wb3AoKTsKKyAgICBLbGFz
cy5jYWxsKGluc3RhbmNlLCBjb3B5RmllbGRzRnJvbSk7CisgICAgcmV0dXJuIGluc3RhbmNlOwor
ICB9IGVsc2UgeworICAgIHJldHVybiBuZXcgS2xhc3MoY29weUZpZWxkc0Zyb20pOworICB9Cit9
OworCit2YXIgdHdvQXJndW1lbnRQb29sZXIgPSBmdW5jdGlvbiAoYTEsIGEyKSB7CisgIHZhciBL
bGFzcyA9IHRoaXM7CisgIGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3RoKSB7CisgICAgdmFy
IGluc3RhbmNlID0gS2xhc3MuaW5zdGFuY2VQb29sLnBvcCgpOworICAgIEtsYXNzLmNhbGwoaW5z
dGFuY2UsIGExLCBhMik7CisgICAgcmV0dXJuIGluc3RhbmNlOworICB9IGVsc2UgeworICAgIHJl
dHVybiBuZXcgS2xhc3MoYTEsIGEyKTsKKyAgfQorfTsKKwordmFyIHRocmVlQXJndW1lbnRQb29s
ZXIgPSBmdW5jdGlvbiAoYTEsIGEyLCBhMykgeworICB2YXIgS2xhc3MgPSB0aGlzOworICBpZiAo
S2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCkgeworICAgIHZhciBpbnN0YW5jZSA9IEtsYXNzLmlu
c3RhbmNlUG9vbC5wb3AoKTsKKyAgICBLbGFzcy5jYWxsKGluc3RhbmNlLCBhMSwgYTIsIGEzKTsK
KyAgICByZXR1cm4gaW5zdGFuY2U7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIG5ldyBLbGFzcyhh
MSwgYTIsIGEzKTsKKyAgfQorfTsKKwordmFyIGZvdXJBcmd1bWVudFBvb2xlciA9IGZ1bmN0aW9u
IChhMSwgYTIsIGEzLCBhNCkgeworICB2YXIgS2xhc3MgPSB0aGlzOworICBpZiAoS2xhc3MuaW5z
dGFuY2VQb29sLmxlbmd0aCkgeworICAgIHZhciBpbnN0YW5jZSA9IEtsYXNzLmluc3RhbmNlUG9v
bC5wb3AoKTsKKyAgICBLbGFzcy5jYWxsKGluc3RhbmNlLCBhMSwgYTIsIGEzLCBhNCk7CisgICAg
cmV0dXJuIGluc3RhbmNlOworICB9IGVsc2UgeworICAgIHJldHVybiBuZXcgS2xhc3MoYTEsIGEy
LCBhMywgYTQpOworICB9Cit9OworCit2YXIgc3RhbmRhcmRSZWxlYXNlciA9IGZ1bmN0aW9uIChp
bnN0YW5jZSkgeworICB2YXIgS2xhc3MgPSB0aGlzOworICAhKGluc3RhbmNlIGluc3RhbmNlb2Yg
S2xhc3MpID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNl
LCAnVHJ5aW5nIHRvIHJlbGVhc2UgYW4gaW5zdGFuY2UgaW50byBhIHBvb2wgb2YgYSBkaWZmZXJl
bnQgdHlwZS4nKSA6IF9wcm9kSW52YXJpYW50KCcyNScpIDogdm9pZCAwOworICBpbnN0YW5jZS5k
ZXN0cnVjdG9yKCk7CisgIGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3RoIDwgS2xhc3MucG9v
bFNpemUpIHsKKyAgICBLbGFzcy5pbnN0YW5jZVBvb2wucHVzaChpbnN0YW5jZSk7CisgIH0KK307
CisKK3ZhciBERUZBVUxUX1BPT0xfU0laRSA9IDEwOwordmFyIERFRkFVTFRfUE9PTEVSID0gb25l
QXJndW1lbnRQb29sZXI7CisKKy8qKgorICogQXVnbWVudHMgYENvcHlDb25zdHJ1Y3RvcmAgdG8g
YmUgYSBwb29sYWJsZSBjbGFzcywgYXVnbWVudGluZyBvbmx5IHRoZSBjbGFzcworICogaXRzZWxm
IChzdGF0aWNhbGx5KSBub3QgYWRkaW5nIGFueSBwcm90b3R5cGljYWwgZmllbGRzLiBBbnkgQ29w
eUNvbnN0cnVjdG9yCisgKiB5b3UgZ2l2ZSB0aGlzIG1heSBoYXZlIGEgYHBvb2xTaXplYCBwcm9w
ZXJ0eSwgYW5kIHdpbGwgbG9vayBmb3IgYQorICogcHJvdG90eXBpY2FsIGBkZXN0cnVjdG9yYCBv
biBpbnN0YW5jZXMuCisgKgorICogQHBhcmFtIHtGdW5jdGlvbn0gQ29weUNvbnN0cnVjdG9yIENv
bnN0cnVjdG9yIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVzZXQuCisgKiBAcGFyYW0ge0Z1bmN0aW9u
fSBwb29sZXIgQ3VzdG9taXphYmxlIHBvb2xlci4KKyAqLwordmFyIGFkZFBvb2xpbmdUbyA9IGZ1
bmN0aW9uIChDb3B5Q29uc3RydWN0b3IsIHBvb2xlcikgeworICAvLyBDYXN0aW5nIGFzIGFueSBz
byB0aGF0IGZsb3cgaWdub3JlcyB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIGFuZCB0cnVzdHMK
KyAgLy8gaXQgdG8gbWF0Y2ggdGhlIHR5cGUgd2UgZGVjbGFyZWQKKyAgdmFyIE5ld0tsYXNzID0g
Q29weUNvbnN0cnVjdG9yOworICBOZXdLbGFzcy5pbnN0YW5jZVBvb2wgPSBbXTsKKyAgTmV3S2xh
c3MuZ2V0UG9vbGVkID0gcG9vbGVyIHx8IERFRkFVTFRfUE9PTEVSOworICBpZiAoIU5ld0tsYXNz
LnBvb2xTaXplKSB7CisgICAgTmV3S2xhc3MucG9vbFNpemUgPSBERUZBVUxUX1BPT0xfU0laRTsK
KyAgfQorICBOZXdLbGFzcy5yZWxlYXNlID0gc3RhbmRhcmRSZWxlYXNlcjsKKyAgcmV0dXJuIE5l
d0tsYXNzOworfTsKKwordmFyIFBvb2xlZENsYXNzID0geworICBhZGRQb29saW5nVG86IGFkZFBv
b2xpbmdUbywKKyAgb25lQXJndW1lbnRQb29sZXI6IG9uZUFyZ3VtZW50UG9vbGVyLAorICB0d29B
cmd1bWVudFBvb2xlcjogdHdvQXJndW1lbnRQb29sZXIsCisgIHRocmVlQXJndW1lbnRQb29sZXI6
IHRocmVlQXJndW1lbnRQb29sZXIsCisgIGZvdXJBcmd1bWVudFBvb2xlcjogZm91ckFyZ3VtZW50
UG9vbGVyCit9OworCittb2R1bGUuZXhwb3J0cyA9IFBvb2xlZENsYXNzOworfSx7IjI1IjoyNSwi
MjkiOjI5fV0sMzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENv
cHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1z
dHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRp
cmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBw
YXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1l
IGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgX2Fzc2lnbiA9IF9k
ZXJlcV8oMzEpOworCit2YXIgUmVhY3RDaGlsZHJlbiA9IF9kZXJlcV8oNCk7Cit2YXIgUmVhY3RD
b21wb25lbnQgPSBfZGVyZXFfKDYpOwordmFyIFJlYWN0UHVyZUNvbXBvbmVudCA9IF9kZXJlcV8o
MTcpOwordmFyIFJlYWN0Q2xhc3MgPSBfZGVyZXFfKDUpOwordmFyIFJlYWN0RE9NRmFjdG9yaWVz
ID0gX2RlcmVxXyg5KTsKK3ZhciBSZWFjdEVsZW1lbnQgPSBfZGVyZXFfKDEwKTsKK3ZhciBSZWFj
dFByb3BUeXBlcyA9IF9kZXJlcV8oMTUpOwordmFyIFJlYWN0VmVyc2lvbiA9IF9kZXJlcV8oMTkp
OworCit2YXIgb25seUNoaWxkID0gX2RlcmVxXygyNCk7Cit2YXIgd2FybmluZyA9IF9kZXJlcV8o
MzApOworCit2YXIgY3JlYXRlRWxlbWVudCA9IFJlYWN0RWxlbWVudC5jcmVhdGVFbGVtZW50Owor
dmFyIGNyZWF0ZUZhY3RvcnkgPSBSZWFjdEVsZW1lbnQuY3JlYXRlRmFjdG9yeTsKK3ZhciBjbG9u
ZUVsZW1lbnQgPSBSZWFjdEVsZW1lbnQuY2xvbmVFbGVtZW50OworCitpZiAoImRldmVsb3BtZW50
IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgIHZhciBjYW5EZWZpbmVQcm9wZXJ0eSA9IF9kZXJlcV8o
MjApOworICB2YXIgUmVhY3RFbGVtZW50VmFsaWRhdG9yID0gX2RlcmVxXygxMik7CisgIHZhciBk
aWRXYXJuUHJvcFR5cGVzRGVwcmVjYXRlZCA9IGZhbHNlOworICBjcmVhdGVFbGVtZW50ID0gUmVh
Y3RFbGVtZW50VmFsaWRhdG9yLmNyZWF0ZUVsZW1lbnQ7CisgIGNyZWF0ZUZhY3RvcnkgPSBSZWFj
dEVsZW1lbnRWYWxpZGF0b3IuY3JlYXRlRmFjdG9yeTsKKyAgY2xvbmVFbGVtZW50ID0gUmVhY3RF
bGVtZW50VmFsaWRhdG9yLmNsb25lRWxlbWVudDsKK30KKwordmFyIF9fc3ByZWFkID0gX2Fzc2ln
bjsKKworaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICB2YXIgd2FybmVk
ID0gZmFsc2U7CisgIF9fc3ByZWFkID0gZnVuY3Rpb24gKCkgeworICAgICJkZXZlbG9wbWVudCIg
IT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcod2FybmVkLCAnUmVhY3QuX19zcHJlYWQgaXMgZGVw
cmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLiBVc2UgJyArICdPYmplY3QuYXNzaWduIGRp
cmVjdGx5IG9yIGFub3RoZXIgaGVscGVyIGZ1bmN0aW9uIHdpdGggc2ltaWxhciAnICsgJ3NlbWFu
dGljcy4gWW91IG1heSBiZSBzZWVpbmcgdGhpcyB3YXJuaW5nIGR1ZSB0byB5b3VyIGNvbXBpbGVy
LiAnICsgJ1NlZSBodHRwczovL2ZiLm1lL3JlYWN0LXNwcmVhZC1kZXByZWNhdGlvbiBmb3IgbW9y
ZSBkZXRhaWxzLicpIDogdm9pZCAwOworICAgIHdhcm5lZCA9IHRydWU7CisgICAgcmV0dXJuIF9h
c3NpZ24uYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKKyAgfTsKK30KKwordmFyIFJlYWN0ID0gewor
CisgIC8vIE1vZGVybgorCisgIENoaWxkcmVuOiB7CisgICAgbWFwOiBSZWFjdENoaWxkcmVuLm1h
cCwKKyAgICBmb3JFYWNoOiBSZWFjdENoaWxkcmVuLmZvckVhY2gsCisgICAgY291bnQ6IFJlYWN0
Q2hpbGRyZW4uY291bnQsCisgICAgdG9BcnJheTogUmVhY3RDaGlsZHJlbi50b0FycmF5LAorICAg
IG9ubHk6IG9ubHlDaGlsZAorICB9LAorCisgIENvbXBvbmVudDogUmVhY3RDb21wb25lbnQsCisg
IFB1cmVDb21wb25lbnQ6IFJlYWN0UHVyZUNvbXBvbmVudCwKKworICBjcmVhdGVFbGVtZW50OiBj
cmVhdGVFbGVtZW50LAorICBjbG9uZUVsZW1lbnQ6IGNsb25lRWxlbWVudCwKKyAgaXNWYWxpZEVs
ZW1lbnQ6IFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudCwKKworICAvLyBDbGFzc2ljCisKKyAg
UHJvcFR5cGVzOiBSZWFjdFByb3BUeXBlcywKKyAgY3JlYXRlQ2xhc3M6IFJlYWN0Q2xhc3MuY3Jl
YXRlQ2xhc3MsCisgIGNyZWF0ZUZhY3Rvcnk6IGNyZWF0ZUZhY3RvcnksCisgIGNyZWF0ZU1peGlu
OiBmdW5jdGlvbiAobWl4aW4pIHsKKyAgICAvLyBDdXJyZW50bHkgYSBub29wLiBXaWxsIGJlIHVz
ZWQgdG8gdmFsaWRhdGUgYW5kIHRyYWNlIG1peGlucy4KKyAgICByZXR1cm4gbWl4aW47CisgIH0s
CisKKyAgLy8gVGhpcyBsb29rcyBET00gc3BlY2lmaWMgYnV0IHRoZXNlIGFyZSBhY3R1YWxseSBp
c29tb3JwaGljIGhlbHBlcnMKKyAgLy8gc2luY2UgdGhleSBhcmUganVzdCBnZW5lcmF0aW5nIERP
TSBzdHJpbmdzLgorICBET006IFJlYWN0RE9NRmFjdG9yaWVzLAorCisgIHZlcnNpb246IFJlYWN0
VmVyc2lvbiwKKworICAvLyBEZXByZWNhdGVkIGhvb2sgZm9yIEpTWCBzcHJlYWQsIGRvbid0IHVz
ZSB0aGlzIGZvciBhbnl0aGluZy4KKyAgX19zcHJlYWQ6IF9fc3ByZWFkCit9OworCisvLyBUT0RP
OiBGaXggdGVzdHMgc28gdGhhdCB0aGlzIGRlcHJlY2F0aW9uIHdhcm5pbmcgZG9lc24ndCBjYXVz
ZSBmYWlsdXJlcy4KK2lmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgaWYg
KGNhbkRlZmluZVByb3BlcnR5KSB7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWN0LCAn
UHJvcFR5cGVzJywgeworICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICJkZXZlbG9w
bWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZGlkV2FyblByb3BUeXBlc0RlcHJlY2F0
ZWQsICdBY2Nlc3NpbmcgUHJvcFR5cGVzIHZpYSB0aGUgbWFpbiBSZWFjdCBwYWNrYWdlIGlzIGRl
cHJlY2F0ZWQuIFVzZSAnICsgJ3RoZSBwcm9wLXR5cGVzIHBhY2thZ2UgZnJvbSBucG0gaW5zdGVh
ZC4nKSA6IHZvaWQgMDsKKyAgICAgICAgZGlkV2FyblByb3BUeXBlc0RlcHJlY2F0ZWQgPSB0cnVl
OworICAgICAgICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7CisgICAgICB9CisgICAgfSk7CisgIH0K
K30KKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdDsKK30seyIxMCI6MTAsIjEyIjoxMiwiMTUiOjE1
LCIxNyI6MTcsIjE5IjoxOSwiMjAiOjIwLCIyNCI6MjQsIjMwIjozMCwiMzEiOjMxLCI0Ijo0LCI1
Ijo1LCI2Ijo2LCI5Ijo5fV0sNDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIg
dGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50
CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGlu
IHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgUG9v
bGVkQ2xhc3MgPSBfZGVyZXFfKDIpOwordmFyIFJlYWN0RWxlbWVudCA9IF9kZXJlcV8oMTApOwor
Cit2YXIgZW1wdHlGdW5jdGlvbiA9IF9kZXJlcV8oMjcpOwordmFyIHRyYXZlcnNlQWxsQ2hpbGRy
ZW4gPSBfZGVyZXFfKDI2KTsKKwordmFyIHR3b0FyZ3VtZW50UG9vbGVyID0gUG9vbGVkQ2xhc3Mu
dHdvQXJndW1lbnRQb29sZXI7Cit2YXIgZm91ckFyZ3VtZW50UG9vbGVyID0gUG9vbGVkQ2xhc3Mu
Zm91ckFyZ3VtZW50UG9vbGVyOworCit2YXIgdXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXggPSAv
XC8rL2c7CitmdW5jdGlvbiBlc2NhcGVVc2VyUHJvdmlkZWRLZXkodGV4dCkgeworICByZXR1cm4g
KCcnICsgdGV4dCkucmVwbGFjZSh1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCwgJyQmLycpOwor
fQorCisvKioKKyAqIFBvb2xlZENsYXNzIHJlcHJlc2VudGluZyB0aGUgYm9va2tlZXBpbmcgYXNz
b2NpYXRlZCB3aXRoIHBlcmZvcm1pbmcgYSBjaGlsZAorICogdHJhdmVyc2FsLiBBbGxvd3MgYXZv
aWRpbmcgYmluZGluZyBjYWxsYmFja3MuCisgKgorICogQGNvbnN0cnVjdG9yIEZvckVhY2hCb29r
S2VlcGluZworICogQHBhcmFtIHshZnVuY3Rpb259IGZvckVhY2hGdW5jdGlvbiBGdW5jdGlvbiB0
byBwZXJmb3JtIHRyYXZlcnNhbCB3aXRoLgorICogQHBhcmFtIHs/Kn0gZm9yRWFjaENvbnRleHQg
Q29udGV4dCB0byBwZXJmb3JtIGNvbnRleHQgd2l0aC4KKyAqLworZnVuY3Rpb24gRm9yRWFjaEJv
b2tLZWVwaW5nKGZvckVhY2hGdW5jdGlvbiwgZm9yRWFjaENvbnRleHQpIHsKKyAgdGhpcy5mdW5j
ID0gZm9yRWFjaEZ1bmN0aW9uOworICB0aGlzLmNvbnRleHQgPSBmb3JFYWNoQ29udGV4dDsKKyAg
dGhpcy5jb3VudCA9IDA7Cit9CitGb3JFYWNoQm9va0tlZXBpbmcucHJvdG90eXBlLmRlc3RydWN0
b3IgPSBmdW5jdGlvbiAoKSB7CisgIHRoaXMuZnVuYyA9IG51bGw7CisgIHRoaXMuY29udGV4dCA9
IG51bGw7CisgIHRoaXMuY291bnQgPSAwOworfTsKK1Bvb2xlZENsYXNzLmFkZFBvb2xpbmdUbyhG
b3JFYWNoQm9va0tlZXBpbmcsIHR3b0FyZ3VtZW50UG9vbGVyKTsKKworZnVuY3Rpb24gZm9yRWFj
aFNpbmdsZUNoaWxkKGJvb2tLZWVwaW5nLCBjaGlsZCwgbmFtZSkgeworICB2YXIgZnVuYyA9IGJv
b2tLZWVwaW5nLmZ1bmMsCisgICAgICBjb250ZXh0ID0gYm9va0tlZXBpbmcuY29udGV4dDsKKwor
ICBmdW5jLmNhbGwoY29udGV4dCwgY2hpbGQsIGJvb2tLZWVwaW5nLmNvdW50KyspOworfQorCisv
KioKKyAqIEl0ZXJhdGVzIHRocm91Z2ggY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNp
ZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gLgorICoKKyAqIFNlZSBodHRwczovL2ZhY2Vib29rLmdp
dGh1Yi5pby9yZWFjdC9kb2NzL3RvcC1sZXZlbC1hcGkuaHRtbCNyZWFjdC5jaGlsZHJlbi5mb3Jl
YWNoCisgKgorICogVGhlIHByb3ZpZGVkIGZvckVhY2hGdW5jKGNoaWxkLCBpbmRleCkgd2lsbCBi
ZSBjYWxsZWQgZm9yIGVhY2gKKyAqIGxlYWYgY2hpbGQuCisgKgorICogQHBhcmFtIHs/Kn0gY2hp
bGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuCisgKiBAcGFyYW0ge2Z1bmN0aW9uKCosIGlu
dCl9IGZvckVhY2hGdW5jCisgKiBAcGFyYW0geyp9IGZvckVhY2hDb250ZXh0IENvbnRleHQgZm9y
IGZvckVhY2hDb250ZXh0LgorICovCitmdW5jdGlvbiBmb3JFYWNoQ2hpbGRyZW4oY2hpbGRyZW4s
IGZvckVhY2hGdW5jLCBmb3JFYWNoQ29udGV4dCkgeworICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkg
eworICAgIHJldHVybiBjaGlsZHJlbjsKKyAgfQorICB2YXIgdHJhdmVyc2VDb250ZXh0ID0gRm9y
RWFjaEJvb2tLZWVwaW5nLmdldFBvb2xlZChmb3JFYWNoRnVuYywgZm9yRWFjaENvbnRleHQpOwor
ICB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoU2luZ2xlQ2hpbGQsIHRyYXZl
cnNlQ29udGV4dCk7CisgIEZvckVhY2hCb29rS2VlcGluZy5yZWxlYXNlKHRyYXZlcnNlQ29udGV4
dCk7Cit9CisKKy8qKgorICogUG9vbGVkQ2xhc3MgcmVwcmVzZW50aW5nIHRoZSBib29ra2VlcGlu
ZyBhc3NvY2lhdGVkIHdpdGggcGVyZm9ybWluZyBhIGNoaWxkCisgKiBtYXBwaW5nLiBBbGxvd3Mg
YXZvaWRpbmcgYmluZGluZyBjYWxsYmFja3MuCisgKgorICogQGNvbnN0cnVjdG9yIE1hcEJvb2tL
ZWVwaW5nCisgKiBAcGFyYW0geyEqfSBtYXBSZXN1bHQgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9y
ZGVyZWQgbWFwIG9mIHJlc3VsdHMuCisgKiBAcGFyYW0geyFmdW5jdGlvbn0gbWFwRnVuY3Rpb24g
RnVuY3Rpb24gdG8gcGVyZm9ybSBtYXBwaW5nIHdpdGguCisgKiBAcGFyYW0gez8qfSBtYXBDb250
ZXh0IENvbnRleHQgdG8gcGVyZm9ybSBtYXBwaW5nIHdpdGguCisgKi8KK2Z1bmN0aW9uIE1hcEJv
b2tLZWVwaW5nKG1hcFJlc3VsdCwga2V5UHJlZml4LCBtYXBGdW5jdGlvbiwgbWFwQ29udGV4dCkg
eworICB0aGlzLnJlc3VsdCA9IG1hcFJlc3VsdDsKKyAgdGhpcy5rZXlQcmVmaXggPSBrZXlQcmVm
aXg7CisgIHRoaXMuZnVuYyA9IG1hcEZ1bmN0aW9uOworICB0aGlzLmNvbnRleHQgPSBtYXBDb250
ZXh0OworICB0aGlzLmNvdW50ID0gMDsKK30KK01hcEJvb2tLZWVwaW5nLnByb3RvdHlwZS5kZXN0
cnVjdG9yID0gZnVuY3Rpb24gKCkgeworICB0aGlzLnJlc3VsdCA9IG51bGw7CisgIHRoaXMua2V5
UHJlZml4ID0gbnVsbDsKKyAgdGhpcy5mdW5jID0gbnVsbDsKKyAgdGhpcy5jb250ZXh0ID0gbnVs
bDsKKyAgdGhpcy5jb3VudCA9IDA7Cit9OworUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKE1hcEJv
b2tLZWVwaW5nLCBmb3VyQXJndW1lbnRQb29sZXIpOworCitmdW5jdGlvbiBtYXBTaW5nbGVDaGls
ZEludG9Db250ZXh0KGJvb2tLZWVwaW5nLCBjaGlsZCwgY2hpbGRLZXkpIHsKKyAgdmFyIHJlc3Vs
dCA9IGJvb2tLZWVwaW5nLnJlc3VsdCwKKyAgICAgIGtleVByZWZpeCA9IGJvb2tLZWVwaW5nLmtl
eVByZWZpeCwKKyAgICAgIGZ1bmMgPSBib29rS2VlcGluZy5mdW5jLAorICAgICAgY29udGV4dCA9
IGJvb2tLZWVwaW5nLmNvbnRleHQ7CisKKworICB2YXIgbWFwcGVkQ2hpbGQgPSBmdW5jLmNhbGwo
Y29udGV4dCwgY2hpbGQsIGJvb2tLZWVwaW5nLmNvdW50KyspOworICBpZiAoQXJyYXkuaXNBcnJh
eShtYXBwZWRDaGlsZCkpIHsKKyAgICBtYXBJbnRvV2l0aEtleVByZWZpeEludGVybmFsKG1hcHBl
ZENoaWxkLCByZXN1bHQsIGNoaWxkS2V5LCBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zQXJndW1l
bnQpOworICB9IGVsc2UgaWYgKG1hcHBlZENoaWxkICE9IG51bGwpIHsKKyAgICBpZiAoUmVhY3RF
bGVtZW50LmlzVmFsaWRFbGVtZW50KG1hcHBlZENoaWxkKSkgeworICAgICAgbWFwcGVkQ2hpbGQg
PSBSZWFjdEVsZW1lbnQuY2xvbmVBbmRSZXBsYWNlS2V5KG1hcHBlZENoaWxkLAorICAgICAgLy8g
S2VlcCBib3RoIHRoZSAobWFwcGVkKSBhbmQgb2xkIGtleXMgaWYgdGhleSBkaWZmZXIsIGp1c3Qg
YXMKKyAgICAgIC8vIHRyYXZlcnNlQWxsQ2hpbGRyZW4gdXNlZCB0byBkbyBmb3Igb2JqZWN0cyBh
cyBjaGlsZHJlbgorICAgICAga2V5UHJlZml4ICsgKG1hcHBlZENoaWxkLmtleSAmJiAoIWNoaWxk
IHx8IGNoaWxkLmtleSAhPT0gbWFwcGVkQ2hpbGQua2V5KSA/IGVzY2FwZVVzZXJQcm92aWRlZEtl
eShtYXBwZWRDaGlsZC5rZXkpICsgJy8nIDogJycpICsgY2hpbGRLZXkpOworICAgIH0KKyAgICBy
ZXN1bHQucHVzaChtYXBwZWRDaGlsZCk7CisgIH0KK30KKworZnVuY3Rpb24gbWFwSW50b1dpdGhL
ZXlQcmVmaXhJbnRlcm5hbChjaGlsZHJlbiwgYXJyYXksIHByZWZpeCwgZnVuYywgY29udGV4dCkg
eworICB2YXIgZXNjYXBlZFByZWZpeCA9ICcnOworICBpZiAocHJlZml4ICE9IG51bGwpIHsKKyAg
ICBlc2NhcGVkUHJlZml4ID0gZXNjYXBlVXNlclByb3ZpZGVkS2V5KHByZWZpeCkgKyAnLyc7Cisg
IH0KKyAgdmFyIHRyYXZlcnNlQ29udGV4dCA9IE1hcEJvb2tLZWVwaW5nLmdldFBvb2xlZChhcnJh
eSwgZXNjYXBlZFByZWZpeCwgZnVuYywgY29udGV4dCk7CisgIHRyYXZlcnNlQWxsQ2hpbGRyZW4o
Y2hpbGRyZW4sIG1hcFNpbmdsZUNoaWxkSW50b0NvbnRleHQsIHRyYXZlcnNlQ29udGV4dCk7Cisg
IE1hcEJvb2tLZWVwaW5nLnJlbGVhc2UodHJhdmVyc2VDb250ZXh0KTsKK30KKworLyoqCisgKiBN
YXBzIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxk
cmVuYC4KKyAqCisgKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90
b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3QuY2hpbGRyZW4ubWFwCisgKgorICogVGhlIHByb3ZpZGVk
IG1hcEZ1bmN0aW9uKGNoaWxkLCBrZXksIGluZGV4KSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaAor
ICogbGVhZiBjaGlsZC4KKyAqCisgKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVl
IGNvbnRhaW5lci4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgaW50KX0gZnVuYyBUaGUgbWFwIGZ1
bmN0aW9uLgorICogQHBhcmFtIHsqfSBjb250ZXh0IENvbnRleHQgZm9yIG1hcEZ1bmN0aW9uLgor
ICogQHJldHVybiB7b2JqZWN0fSBPYmplY3QgY29udGFpbmluZyB0aGUgb3JkZXJlZCBtYXAgb2Yg
cmVzdWx0cy4KKyAqLworZnVuY3Rpb24gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmMsIGNvbnRl
eHQpIHsKKyAgaWYgKGNoaWxkcmVuID09IG51bGwpIHsKKyAgICByZXR1cm4gY2hpbGRyZW47Cisg
IH0KKyAgdmFyIHJlc3VsdCA9IFtdOworICBtYXBJbnRvV2l0aEtleVByZWZpeEludGVybmFsKGNo
aWxkcmVuLCByZXN1bHQsIG51bGwsIGZ1bmMsIGNvbnRleHQpOworICByZXR1cm4gcmVzdWx0Owor
fQorCitmdW5jdGlvbiBmb3JFYWNoU2luZ2xlQ2hpbGREdW1teSh0cmF2ZXJzZUNvbnRleHQsIGNo
aWxkLCBuYW1lKSB7CisgIHJldHVybiBudWxsOworfQorCisvKioKKyAqIENvdW50IHRoZSBudW1i
ZXIgb2YgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcworICogYHByb3Bz
LmNoaWxkcmVuYC4KKyAqCisgKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3Qv
ZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3QuY2hpbGRyZW4uY291bnQKKyAqCisgKiBAcGFy
YW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci4KKyAqIEByZXR1cm4ge251
bWJlcn0gVGhlIG51bWJlciBvZiBjaGlsZHJlbi4KKyAqLworZnVuY3Rpb24gY291bnRDaGlsZHJl
bihjaGlsZHJlbiwgY29udGV4dCkgeworICByZXR1cm4gdHJhdmVyc2VBbGxDaGlsZHJlbihjaGls
ZHJlbiwgZm9yRWFjaFNpbmdsZUNoaWxkRHVtbXksIG51bGwpOworfQorCisvKioKKyAqIEZsYXR0
ZW4gYSBjaGlsZHJlbiBvYmplY3QgKHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxk
cmVuYCkgYW5kCisgKiByZXR1cm4gYW4gYXJyYXkgd2l0aCBhcHByb3ByaWF0ZWx5IHJlLWtleWVk
IGNoaWxkcmVuLgorICoKKyAqIFNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9k
b2NzL3RvcC1sZXZlbC1hcGkuaHRtbCNyZWFjdC5jaGlsZHJlbi50b2FycmF5CisgKi8KK2Z1bmN0
aW9uIHRvQXJyYXkoY2hpbGRyZW4pIHsKKyAgdmFyIHJlc3VsdCA9IFtdOworICBtYXBJbnRvV2l0
aEtleVByZWZpeEludGVybmFsKGNoaWxkcmVuLCByZXN1bHQsIG51bGwsIGVtcHR5RnVuY3Rpb24u
dGhhdFJldHVybnNBcmd1bWVudCk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZhciBSZWFjdENo
aWxkcmVuID0geworICBmb3JFYWNoOiBmb3JFYWNoQ2hpbGRyZW4sCisgIG1hcDogbWFwQ2hpbGRy
ZW4sCisgIG1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJuYWw6IG1hcEludG9XaXRoS2V5UHJlZml4
SW50ZXJuYWwsCisgIGNvdW50OiBjb3VudENoaWxkcmVuLAorICB0b0FycmF5OiB0b0FycmF5Cit9
OworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q2hpbGRyZW47Cit9LHsiMTAiOjEwLCIyIjoyLCIy
NiI6MjYsIjI3IjoyN31dLDU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoq
CisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAor
ICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0
aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIF9wcm9k
SW52YXJpYW50ID0gX2RlcmVxXygyNSksCisgICAgX2Fzc2lnbiA9IF9kZXJlcV8oMzEpOworCit2
YXIgUmVhY3RDb21wb25lbnQgPSBfZGVyZXFfKDYpOwordmFyIFJlYWN0RWxlbWVudCA9IF9kZXJl
cV8oMTApOwordmFyIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0gX2RlcmVxXygxNCk7Cit2
YXIgUmVhY3ROb29wVXBkYXRlUXVldWUgPSBfZGVyZXFfKDEzKTsKKwordmFyIGVtcHR5T2JqZWN0
ID0gX2RlcmVxXygyOCk7Cit2YXIgaW52YXJpYW50ID0gX2RlcmVxXygyOSk7Cit2YXIgd2Fybmlu
ZyA9IF9kZXJlcV8oMzApOworCit2YXIgTUlYSU5TX0tFWSA9ICdtaXhpbnMnOworCisvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gYWxsb3cgdGhlIGNyZWF0aW9uIG9mIGFub255bW91cyBmdW5jdGlvbnMg
d2hpY2ggZG8gbm90CisvLyBoYXZlIC5uYW1lIHNldCB0byB0aGUgbmFtZSBvZiB0aGUgdmFyaWFi
bGUgYmVpbmcgYXNzaWduZWQgdG8uCitmdW5jdGlvbiBpZGVudGl0eShmbikgeworICByZXR1cm4g
Zm47Cit9CisKKy8qKgorICogUG9saWNpZXMgdGhhdCBkZXNjcmliZSBtZXRob2RzIGluIGBSZWFj
dENsYXNzSW50ZXJmYWNlYC4KKyAqLworCisKK3ZhciBpbmplY3RlZE1peGlucyA9IFtdOworCisv
KioKKyAqIENvbXBvc2l0ZSBjb21wb25lbnRzIGFyZSBoaWdoZXItbGV2ZWwgY29tcG9uZW50cyB0
aGF0IGNvbXBvc2Ugb3RoZXIgY29tcG9zaXRlCisgKiBvciBob3N0IGNvbXBvbmVudHMuCisgKgor
ICogVG8gY3JlYXRlIGEgbmV3IHR5cGUgb2YgYFJlYWN0Q2xhc3NgLCBwYXNzIGEgc3BlY2lmaWNh
dGlvbiBvZgorICogeW91ciBuZXcgY2xhc3MgdG8gYFJlYWN0LmNyZWF0ZUNsYXNzYC4gVGhlIG9u
bHkgcmVxdWlyZW1lbnQgb2YgeW91ciBjbGFzcworICogc3BlY2lmaWNhdGlvbiBpcyB0aGF0IHlv
dSBpbXBsZW1lbnQgYSBgcmVuZGVyYCBtZXRob2QuCisgKgorICogICB2YXIgTXlDb21wb25lbnQg
PSBSZWFjdC5jcmVhdGVDbGFzcyh7CisgKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHsKKyAqICAg
ICAgIHJldHVybiA8ZGl2PkhlbGxvIFdvcmxkPC9kaXY+OworICogICAgIH0KKyAqICAgfSk7Cisg
KgorICogVGhlIGNsYXNzIHNwZWNpZmljYXRpb24gc3VwcG9ydHMgYSBzcGVjaWZpYyBwcm90b2Nv
bCBvZiBtZXRob2RzIHRoYXQgaGF2ZQorICogc3BlY2lhbCBtZWFuaW5nIChlLmcuIGByZW5kZXJg
KS4gU2VlIGBSZWFjdENsYXNzSW50ZXJmYWNlYCBmb3IKKyAqIG1vcmUgdGhlIGNvbXByZWhlbnNp
dmUgcHJvdG9jb2wuIEFueSBvdGhlciBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIGluIHRoZQorICog
Y2xhc3Mgc3BlY2lmaWNhdGlvbiB3aWxsIGJlIGF2YWlsYWJsZSBvbiB0aGUgcHJvdG90eXBlLgor
ICoKKyAqIEBpbnRlcmZhY2UgUmVhY3RDbGFzc0ludGVyZmFjZQorICogQGludGVybmFsCisgKi8K
K3ZhciBSZWFjdENsYXNzSW50ZXJmYWNlID0geworCisgIC8qKgorICAgKiBBbiBhcnJheSBvZiBN
aXhpbiBvYmplY3RzIHRvIGluY2x1ZGUgd2hlbiBkZWZpbmluZyB5b3VyIGNvbXBvbmVudC4KKyAg
ICoKKyAgICogQHR5cGUge2FycmF5fQorICAgKiBAb3B0aW9uYWwKKyAgICovCisgIG1peGluczog
J0RFRklORV9NQU5ZJywKKworICAvKioKKyAgICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgcHJvcGVy
dGllcyBhbmQgbWV0aG9kcyB0aGF0IHNob3VsZCBiZSBkZWZpbmVkIG9uCisgICAqIHRoZSBjb21w
b25lbnQncyBjb25zdHJ1Y3RvciBpbnN0ZWFkIG9mIGl0cyBwcm90b3R5cGUgKHN0YXRpYyBtZXRo
b2RzKS4KKyAgICoKKyAgICogQHR5cGUge29iamVjdH0KKyAgICogQG9wdGlvbmFsCisgICAqLwor
ICBzdGF0aWNzOiAnREVGSU5FX01BTlknLAorCisgIC8qKgorICAgKiBEZWZpbml0aW9uIG9mIHBy
b3AgdHlwZXMgZm9yIHRoaXMgY29tcG9uZW50LgorICAgKgorICAgKiBAdHlwZSB7b2JqZWN0fQor
ICAgKiBAb3B0aW9uYWwKKyAgICovCisgIHByb3BUeXBlczogJ0RFRklORV9NQU5ZJywKKworICAv
KioKKyAgICogRGVmaW5pdGlvbiBvZiBjb250ZXh0IHR5cGVzIGZvciB0aGlzIGNvbXBvbmVudC4K
KyAgICoKKyAgICogQHR5cGUge29iamVjdH0KKyAgICogQG9wdGlvbmFsCisgICAqLworICBjb250
ZXh0VHlwZXM6ICdERUZJTkVfTUFOWScsCisKKyAgLyoqCisgICAqIERlZmluaXRpb24gb2YgY29u
dGV4dCB0eXBlcyB0aGlzIGNvbXBvbmVudCBzZXRzIGZvciBpdHMgY2hpbGRyZW4uCisgICAqCisg
ICAqIEB0eXBlIHtvYmplY3R9CisgICAqIEBvcHRpb25hbAorICAgKi8KKyAgY2hpbGRDb250ZXh0
VHlwZXM6ICdERUZJTkVfTUFOWScsCisKKyAgLy8gPT09PSBEZWZpbml0aW9uIG1ldGhvZHMgPT09
PQorCisgIC8qKgorICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLiBW
YWx1ZXMgaW4gdGhlIG1hcHBpbmcgd2lsbCBiZSBzZXQgb24KKyAgICogYHRoaXMucHJvcHNgIGlm
IHRoYXQgcHJvcCBpcyBub3Qgc3BlY2lmaWVkIChpLmUuIHVzaW5nIGFuIGBpbmAgY2hlY2spLgor
ICAgKgorICAgKiBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIGJlZm9yZSBgZ2V0SW5pdGlhbFN0YXRl
YCBhbmQgdGhlcmVmb3JlIGNhbm5vdCByZWx5CisgICAqIG9uIGB0aGlzLnN0YXRlYCBvciB1c2Ug
YHRoaXMuc2V0U3RhdGVgLgorICAgKgorICAgKiBAcmV0dXJuIHtvYmplY3R9CisgICAqIEBvcHRp
b25hbAorICAgKi8KKyAgZ2V0RGVmYXVsdFByb3BzOiAnREVGSU5FX01BTllfTUVSR0VEJywKKwor
ICAvKioKKyAgICogSW52b2tlZCBvbmNlIGJlZm9yZSB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQu
IFRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSB1c2VkCisgICAqIGFzIHRoZSBpbml0aWFsIHZhbHVl
IG9mIGB0aGlzLnN0YXRlYC4KKyAgICoKKyAgICogICBnZXRJbml0aWFsU3RhdGU6IGZ1bmN0aW9u
KCkgeworICAgKiAgICAgcmV0dXJuIHsKKyAgICogICAgICAgaXNPbjogZmFsc2UsCisgICAqICAg
ICAgIGZvb0JhejogbmV3IEJhekZvbygpCisgICAqICAgICB9CisgICAqICAgfQorICAgKgorICAg
KiBAcmV0dXJuIHtvYmplY3R9CisgICAqIEBvcHRpb25hbAorICAgKi8KKyAgZ2V0SW5pdGlhbFN0
YXRlOiAnREVGSU5FX01BTllfTUVSR0VEJywKKworICAvKioKKyAgICogQHJldHVybiB7b2JqZWN0
fQorICAgKiBAb3B0aW9uYWwKKyAgICovCisgIGdldENoaWxkQ29udGV4dDogJ0RFRklORV9NQU5Z
X01FUkdFRCcsCisKKyAgLyoqCisgICAqIFVzZXMgcHJvcHMgZnJvbSBgdGhpcy5wcm9wc2AgYW5k
IHN0YXRlIGZyb20gYHRoaXMuc3RhdGVgIHRvIHJlbmRlciB0aGUKKyAgICogc3RydWN0dXJlIG9m
IHRoZSBjb21wb25lbnQuCisgICAqCisgICAqIE5vIGd1YXJhbnRlZXMgYXJlIG1hZGUgYWJvdXQg
d2hlbiBvciBob3cgb2Z0ZW4gdGhpcyBtZXRob2QgaXMgaW52b2tlZCwgc28KKyAgICogaXQgbXVz
dCBub3QgaGF2ZSBzaWRlIGVmZmVjdHMuCisgICAqCisgICAqICAgcmVuZGVyOiBmdW5jdGlvbigp
IHsKKyAgICogICAgIHZhciBuYW1lID0gdGhpcy5wcm9wcy5uYW1lOworICAgKiAgICAgcmV0dXJu
IDxkaXY+SGVsbG8sIHtuYW1lfSE8L2Rpdj47CisgICAqICAgfQorICAgKgorICAgKiBAcmV0dXJu
IHtSZWFjdENvbXBvbmVudH0KKyAgICogQHJlcXVpcmVkCisgICAqLworICByZW5kZXI6ICdERUZJ
TkVfT05DRScsCisKKyAgLy8gPT09PSBEZWxlZ2F0ZSBtZXRob2RzID09PT0KKworICAvKioKKyAg
ICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgaW5pdGlhbGx5IGNyZWF0ZWQgYW5kIGFi
b3V0IHRvIGJlIG1vdW50ZWQuCisgICAqIFRoaXMgbWF5IGhhdmUgc2lkZSBlZmZlY3RzLCBidXQg
YW55IGV4dGVybmFsIHN1YnNjcmlwdGlvbnMgb3IgZGF0YSBjcmVhdGVkCisgICAqIGJ5IHRoaXMg
bWV0aG9kIG11c3QgYmUgY2xlYW5lZCB1cCBpbiBgY29tcG9uZW50V2lsbFVubW91bnRgLgorICAg
KgorICAgKiBAb3B0aW9uYWwKKyAgICovCisgIGNvbXBvbmVudFdpbGxNb3VudDogJ0RFRklORV9N
QU5ZJywKKworICAvKioKKyAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQgaGFzIGJlZW4g
bW91bnRlZCBhbmQgaGFzIGEgRE9NIHJlcHJlc2VudGF0aW9uLgorICAgKiBIb3dldmVyLCB0aGVy
ZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGUgRE9NIG5vZGUgaXMgaW4gdGhlIGRvY3VtZW50Lgor
ICAgKgorICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBvcGVyYXRlIG9uIHRoZSBE
T00gd2hlbiB0aGUgY29tcG9uZW50IGhhcworICAgKiBiZWVuIG1vdW50ZWQgKGluaXRpYWxpemVk
IGFuZCByZW5kZXJlZCkgZm9yIHRoZSBmaXJzdCB0aW1lLgorICAgKgorICAgKiBAcGFyYW0ge0RP
TUVsZW1lbnR9IHJvb3ROb2RlIERPTSBlbGVtZW50IHJlcHJlc2VudGluZyB0aGUgY29tcG9uZW50
LgorICAgKiBAb3B0aW9uYWwKKyAgICovCisgIGNvbXBvbmVudERpZE1vdW50OiAnREVGSU5FX01B
TlknLAorCisgIC8qKgorICAgKiBJbnZva2VkIGJlZm9yZSB0aGUgY29tcG9uZW50IHJlY2VpdmVz
IG5ldyBwcm9wcy4KKyAgICoKKyAgICogVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gcmVh
Y3QgdG8gYSBwcm9wIHRyYW5zaXRpb24gYnkgdXBkYXRpbmcgdGhlCisgICAqIHN0YXRlIHVzaW5n
IGB0aGlzLnNldFN0YXRlYC4gQ3VycmVudCBwcm9wcyBhcmUgYWNjZXNzZWQgdmlhIGB0aGlzLnBy
b3BzYC4KKyAgICoKKyAgICogICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzOiBmdW5jdGlvbihu
ZXh0UHJvcHMsIG5leHRDb250ZXh0KSB7CisgICAqICAgICB0aGlzLnNldFN0YXRlKHsKKyAgICog
ICAgICAgbGlrZXNJbmNyZWFzaW5nOiBuZXh0UHJvcHMubGlrZUNvdW50ID4gdGhpcy5wcm9wcy5s
aWtlQ291bnQKKyAgICogICAgIH0pOworICAgKiAgIH0KKyAgICoKKyAgICogTk9URTogVGhlcmUg
aXMgbm8gZXF1aXZhbGVudCBgY29tcG9uZW50V2lsbFJlY2VpdmVTdGF0ZWAuIEFuIGluY29taW5n
IHByb3AKKyAgICogdHJhbnNpdGlvbiBtYXkgY2F1c2UgYSBzdGF0ZSBjaGFuZ2UsIGJ1dCB0aGUg
b3Bwb3NpdGUgaXMgbm90IHRydWUuIElmIHlvdQorICAgKiBuZWVkIGl0LCB5b3UgYXJlIHByb2Jh
Ymx5IGxvb2tpbmcgZm9yIGBjb21wb25lbnRXaWxsVXBkYXRlYC4KKyAgICoKKyAgICogQHBhcmFt
IHtvYmplY3R9IG5leHRQcm9wcworICAgKiBAb3B0aW9uYWwKKyAgICovCisgIGNvbXBvbmVudFdp
bGxSZWNlaXZlUHJvcHM6ICdERUZJTkVfTUFOWScsCisKKyAgLyoqCisgICAqIEludm9rZWQgd2hp
bGUgZGVjaWRpbmcgaWYgdGhlIGNvbXBvbmVudCBzaG91bGQgYmUgdXBkYXRlZCBhcyBhIHJlc3Vs
dCBvZgorICAgKiByZWNlaXZpbmcgbmV3IHByb3BzLCBzdGF0ZSBhbmQvb3IgY29udGV4dC4KKyAg
ICoKKyAgICogVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gYHJldHVybiBmYWxzZWAgd2hl
biB5b3UncmUgY2VydGFpbiB0aGF0IHRoZQorICAgKiB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgcHJv
cHMvc3RhdGUvY29udGV4dCB3aWxsIG5vdCByZXF1aXJlIGEgY29tcG9uZW50CisgICAqIHVwZGF0
ZS4KKyAgICoKKyAgICogICBzaG91bGRDb21wb25lbnRVcGRhdGU6IGZ1bmN0aW9uKG5leHRQcm9w
cywgbmV4dFN0YXRlLCBuZXh0Q29udGV4dCkgeworICAgKiAgICAgcmV0dXJuICFlcXVhbChuZXh0
UHJvcHMsIHRoaXMucHJvcHMpIHx8CisgICAqICAgICAgICFlcXVhbChuZXh0U3RhdGUsIHRoaXMu
c3RhdGUpIHx8CisgICAqICAgICAgICFlcXVhbChuZXh0Q29udGV4dCwgdGhpcy5jb250ZXh0KTsK
KyAgICogICB9CisgICAqCisgICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJvcHMKKyAgICogQHBh
cmFtIHs/b2JqZWN0fSBuZXh0U3RhdGUKKyAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0Q29udGV4
dAorICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBjb21wb25lbnQgc2hvdWxkIHVw
ZGF0ZS4KKyAgICogQG9wdGlvbmFsCisgICAqLworICBzaG91bGRDb21wb25lbnRVcGRhdGU6ICdE
RUZJTkVfT05DRScsCisKKyAgLyoqCisgICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50IGlz
IGFib3V0IHRvIHVwZGF0ZSBkdWUgdG8gYSB0cmFuc2l0aW9uIGZyb20KKyAgICogYHRoaXMucHJv
cHNgLCBgdGhpcy5zdGF0ZWAgYW5kIGB0aGlzLmNvbnRleHRgIHRvIGBuZXh0UHJvcHNgLCBgbmV4
dFN0YXRlYAorICAgKiBhbmQgYG5leHRDb250ZXh0YC4KKyAgICoKKyAgICogVXNlIHRoaXMgYXMg
YW4gb3Bwb3J0dW5pdHkgdG8gcGVyZm9ybSBwcmVwYXJhdGlvbiBiZWZvcmUgYW4gdXBkYXRlIG9j
Y3Vycy4KKyAgICoKKyAgICogTk9URTogWW91ICoqY2Fubm90KiogdXNlIGB0aGlzLnNldFN0YXRl
KClgIGluIHRoaXMgbWV0aG9kLgorICAgKgorICAgKiBAcGFyYW0ge29iamVjdH0gbmV4dFByb3Bz
CisgICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dFN0YXRlCisgICAqIEBwYXJhbSB7P29iamVjdH0g
bmV4dENvbnRleHQKKyAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFu
c2FjdGlvbgorICAgKiBAb3B0aW9uYWwKKyAgICovCisgIGNvbXBvbmVudFdpbGxVcGRhdGU6ICdE
RUZJTkVfTUFOWScsCisKKyAgLyoqCisgICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50J3Mg
RE9NIHJlcHJlc2VudGF0aW9uIGhhcyBiZWVuIHVwZGF0ZWQuCisgICAqCisgICAqIFVzZSB0aGlz
IGFzIGFuIG9wcG9ydHVuaXR5IHRvIG9wZXJhdGUgb24gdGhlIERPTSB3aGVuIHRoZSBjb21wb25l
bnQgaGFzCisgICAqIGJlZW4gdXBkYXRlZC4KKyAgICoKKyAgICogQHBhcmFtIHtvYmplY3R9IHBy
ZXZQcm9wcworICAgKiBAcGFyYW0gez9vYmplY3R9IHByZXZTdGF0ZQorICAgKiBAcGFyYW0gez9v
YmplY3R9IHByZXZDb250ZXh0CisgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gcm9vdE5vZGUgRE9N
IGVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSBjb21wb25lbnQuCisgICAqIEBvcHRpb25hbAorICAg
Ki8KKyAgY29tcG9uZW50RGlkVXBkYXRlOiAnREVGSU5FX01BTlknLAorCisgIC8qKgorICAgKiBJ
bnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBhYm91dCB0byBiZSByZW1vdmVkIGZyb20gaXRz
IHBhcmVudCBhbmQgaGF2ZQorICAgKiBpdHMgRE9NIHJlcHJlc2VudGF0aW9uIGRlc3Ryb3llZC4K
KyAgICoKKyAgICogVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gZGVhbGxvY2F0ZSBhbnkg
ZXh0ZXJuYWwgcmVzb3VyY2VzLgorICAgKgorICAgKiBOT1RFOiBUaGVyZSBpcyBubyBgY29tcG9u
ZW50RGlkVW5tb3VudGAgc2luY2UgeW91ciBjb21wb25lbnQgd2lsbCBoYXZlIGJlZW4KKyAgICog
ZGVzdHJveWVkIGJ5IHRoYXQgcG9pbnQuCisgICAqCisgICAqIEBvcHRpb25hbAorICAgKi8KKyAg
Y29tcG9uZW50V2lsbFVubW91bnQ6ICdERUZJTkVfTUFOWScsCisKKyAgLy8gPT09PSBBZHZhbmNl
ZCBtZXRob2RzID09PT0KKworICAvKioKKyAgICogVXBkYXRlcyB0aGUgY29tcG9uZW50J3MgY3Vy
cmVudGx5IG1vdW50ZWQgRE9NIHJlcHJlc2VudGF0aW9uLgorICAgKgorICAgKiBCeSBkZWZhdWx0
LCB0aGlzIGltcGxlbWVudHMgUmVhY3QncyByZW5kZXJpbmcgYW5kIHJlY29uY2lsaWF0aW9uIGFs
Z29yaXRobS4KKyAgICogU29waGlzdGljYXRlZCBjbGllbnRzIG1heSB3aXNoIHRvIG92ZXJyaWRl
IHRoaXMuCisgICAqCisgICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJh
bnNhY3Rpb24KKyAgICogQGludGVybmFsCisgICAqIEBvdmVycmlkYWJsZQorICAgKi8KKyAgdXBk
YXRlQ29tcG9uZW50OiAnT1ZFUlJJREVfQkFTRScKKworfTsKKworLyoqCisgKiBNYXBwaW5nIGZy
b20gY2xhc3Mgc3BlY2lmaWNhdGlvbiBrZXlzIHRvIHNwZWNpYWwgcHJvY2Vzc2luZyBmdW5jdGlv
bnMuCisgKgorICogQWx0aG91Z2ggdGhlc2UgYXJlIGRlY2xhcmVkIGxpa2UgaW5zdGFuY2UgcHJv
cGVydGllcyBpbiB0aGUgc3BlY2lmaWNhdGlvbgorICogd2hlbiBkZWZpbmluZyBjbGFzc2VzIHVz
aW5nIGBSZWFjdC5jcmVhdGVDbGFzc2AsIHRoZXkgYXJlIGFjdHVhbGx5IHN0YXRpYworICogYW5k
IGFyZSBhY2Nlc3NpYmxlIG9uIHRoZSBjb25zdHJ1Y3RvciBpbnN0ZWFkIG9mIHRoZSBwcm90b3R5
cGUuIERlc3BpdGUKKyAqIGJlaW5nIHN0YXRpYywgdGhleSBtdXN0IGJlIGRlZmluZWQgb3V0c2lk
ZSBvZiB0aGUgInN0YXRpY3MiIGtleSB1bmRlcgorICogd2hpY2ggYWxsIG90aGVyIHN0YXRpYyBt
ZXRob2RzIGFyZSBkZWZpbmVkLgorICovCit2YXIgUkVTRVJWRURfU1BFQ19LRVlTID0geworICBk
aXNwbGF5TmFtZTogZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBkaXNwbGF5TmFtZSkgeworICAgIENv
bnN0cnVjdG9yLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7CisgIH0sCisgIG1peGluczogZnVu
Y3Rpb24gKENvbnN0cnVjdG9yLCBtaXhpbnMpIHsKKyAgICBpZiAobWl4aW5zKSB7CisgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IG1peGlucy5sZW5ndGg7IGkrKykgeworICAgICAgICBtaXhTcGVj
SW50b0NvbXBvbmVudChDb25zdHJ1Y3RvciwgbWl4aW5zW2ldKTsKKyAgICAgIH0KKyAgICB9Cisg
IH0sCisgIGNoaWxkQ29udGV4dFR5cGVzOiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIGNoaWxkQ29u
dGV4dFR5cGVzKSB7CisgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgewor
ICAgICAgdmFsaWRhdGVUeXBlRGVmKENvbnN0cnVjdG9yLCBjaGlsZENvbnRleHRUeXBlcywgJ2No
aWxkQ29udGV4dCcpOworICAgIH0KKyAgICBDb25zdHJ1Y3Rvci5jaGlsZENvbnRleHRUeXBlcyA9
IF9hc3NpZ24oe30sIENvbnN0cnVjdG9yLmNoaWxkQ29udGV4dFR5cGVzLCBjaGlsZENvbnRleHRU
eXBlcyk7CisgIH0sCisgIGNvbnRleHRUeXBlczogZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBjb250
ZXh0VHlwZXMpIHsKKyAgICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7Cisg
ICAgICB2YWxpZGF0ZVR5cGVEZWYoQ29uc3RydWN0b3IsIGNvbnRleHRUeXBlcywgJ2NvbnRleHQn
KTsKKyAgICB9CisgICAgQ29uc3RydWN0b3IuY29udGV4dFR5cGVzID0gX2Fzc2lnbih7fSwgQ29u
c3RydWN0b3IuY29udGV4dFR5cGVzLCBjb250ZXh0VHlwZXMpOworICB9LAorICAvKioKKyAgICog
U3BlY2lhbCBjYXNlIGdldERlZmF1bHRQcm9wcyB3aGljaCBzaG91bGQgbW92ZSBpbnRvIHN0YXRp
Y3MgYnV0IHJlcXVpcmVzCisgICAqIGF1dG9tYXRpYyBtZXJnaW5nLgorICAgKi8KKyAgZ2V0RGVm
YXVsdFByb3BzOiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIGdldERlZmF1bHRQcm9wcykgeworICAg
IGlmIChDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMpIHsKKyAgICAgIENvbnN0cnVjdG9yLmdl
dERlZmF1bHRQcm9wcyA9IGNyZWF0ZU1lcmdlZFJlc3VsdEZ1bmN0aW9uKENvbnN0cnVjdG9yLmdl
dERlZmF1bHRQcm9wcywgZ2V0RGVmYXVsdFByb3BzKTsKKyAgICB9IGVsc2UgeworICAgICAgQ29u
c3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzID0gZ2V0RGVmYXVsdFByb3BzOworICAgIH0KKyAgfSwK
KyAgcHJvcFR5cGVzOiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3BUeXBlcykgeworICAgIGlm
ICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgIHZhbGlkYXRlVHlwZURl
ZihDb25zdHJ1Y3RvciwgcHJvcFR5cGVzLCAncHJvcCcpOworICAgIH0KKyAgICBDb25zdHJ1Y3Rv
ci5wcm9wVHlwZXMgPSBfYXNzaWduKHt9LCBDb25zdHJ1Y3Rvci5wcm9wVHlwZXMsIHByb3BUeXBl
cyk7CisgIH0sCisgIHN0YXRpY3M6IGZ1bmN0aW9uIChDb25zdHJ1Y3Rvciwgc3RhdGljcykgewor
ICAgIG1peFN0YXRpY1NwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBzdGF0aWNzKTsKKyAg
fSwKKyAgYXV0b2JpbmQ6IGZ1bmN0aW9uICgpIHt9IH07CisKK2Z1bmN0aW9uIHZhbGlkYXRlVHlw
ZURlZihDb25zdHJ1Y3RvciwgdHlwZURlZiwgbG9jYXRpb24pIHsKKyAgZm9yICh2YXIgcHJvcE5h
bWUgaW4gdHlwZURlZikgeworICAgIGlmICh0eXBlRGVmLmhhc093blByb3BlcnR5KHByb3BOYW1l
KSkgeworICAgICAgLy8gdXNlIGEgd2FybmluZyBpbnN0ZWFkIG9mIGFuIGludmFyaWFudCBzbyBj
b21wb25lbnRzCisgICAgICAvLyBkb24ndCBzaG93IHVwIGluIHByb2QgYnV0IG9ubHkgaW4gX19E
RVZfXworICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyh0eXBl
b2YgdHlwZURlZltwcm9wTmFtZV0gPT09ICdmdW5jdGlvbicsICclczogJXMgdHlwZSBgJXNgIGlz
IGludmFsaWQ7IGl0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tICcgKyAnUmVhY3Qu
UHJvcFR5cGVzLicsIENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8ICdSZWFjdENsYXNzJywgUmVh
Y3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dLCBwcm9wTmFtZSkgOiB2b2lkIDA7Cisg
ICAgfQorICB9Cit9CisKK2Z1bmN0aW9uIHZhbGlkYXRlTWV0aG9kT3ZlcnJpZGUoaXNBbHJlYWR5
RGVmaW5lZCwgbmFtZSkgeworICB2YXIgc3BlY1BvbGljeSA9IFJlYWN0Q2xhc3NJbnRlcmZhY2Uu
aGFzT3duUHJvcGVydHkobmFtZSkgPyBSZWFjdENsYXNzSW50ZXJmYWNlW25hbWVdIDogbnVsbDsK
KworICAvLyBEaXNhbGxvdyBvdmVycmlkaW5nIG9mIGJhc2UgY2xhc3MgbWV0aG9kcyB1bmxlc3Mg
ZXhwbGljaXRseSBhbGxvd2VkLgorICBpZiAoUmVhY3RDbGFzc01peGluLmhhc093blByb3BlcnR5
KG5hbWUpKSB7CisgICAgIShzcGVjUG9saWN5ID09PSAnT1ZFUlJJREVfQkFTRScpID8gImRldmVs
b3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3RDbGFzc0lu
dGVyZmFjZTogWW91IGFyZSBhdHRlbXB0aW5nIHRvIG92ZXJyaWRlIGAlc2AgZnJvbSB5b3VyIGNs
YXNzIHNwZWNpZmljYXRpb24uIEVuc3VyZSB0aGF0IHlvdXIgbWV0aG9kIG5hbWVzIGRvIG5vdCBv
dmVybGFwIHdpdGggUmVhY3QgbWV0aG9kcy4nLCBuYW1lKSA6IF9wcm9kSW52YXJpYW50KCc3Mycs
IG5hbWUpIDogdm9pZCAwOworICB9CisKKyAgLy8gRGlzYWxsb3cgZGVmaW5pbmcgbWV0aG9kcyBt
b3JlIHRoYW4gb25jZSB1bmxlc3MgZXhwbGljaXRseSBhbGxvd2VkLgorICBpZiAoaXNBbHJlYWR5
RGVmaW5lZCkgeworICAgICEoc3BlY1BvbGljeSA9PT0gJ0RFRklORV9NQU5ZJyB8fCBzcGVjUG9s
aWN5ID09PSAnREVGSU5FX01BTllfTUVSR0VEJykgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVj
dGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdENsYXNzSW50ZXJmYWNlOiBZb3UgYXJlIGF0
dGVtcHRpbmcgdG8gZGVmaW5lIGAlc2Agb24geW91ciBjb21wb25lbnQgbW9yZSB0aGFuIG9uY2Uu
IFRoaXMgY29uZmxpY3QgbWF5IGJlIGR1ZSB0byBhIG1peGluLicsIG5hbWUpIDogX3Byb2RJbnZh
cmlhbnQoJzc0JywgbmFtZSkgOiB2b2lkIDA7CisgIH0KK30KKworLyoqCisgKiBNaXhpbiBoZWxw
ZXIgd2hpY2ggaGFuZGxlcyBwb2xpY3kgdmFsaWRhdGlvbiBhbmQgcmVzZXJ2ZWQKKyAqIHNwZWNp
ZmljYXRpb24ga2V5cyB3aGVuIGJ1aWxkaW5nIFJlYWN0IGNsYXNzZXMuCisgKi8KK2Z1bmN0aW9u
IG1peFNwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBzcGVjKSB7CisgIGlmICghc3BlYykg
eworICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgIHZhciB0
eXBlb2ZTcGVjID0gdHlwZW9mIHNwZWM7CisgICAgICB2YXIgaXNNaXhpblZhbGlkID0gdHlwZW9m
U3BlYyA9PT0gJ29iamVjdCcgJiYgc3BlYyAhPT0gbnVsbDsKKworICAgICAgImRldmVsb3BtZW50
IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhpc01peGluVmFsaWQsICclczogWW91XCdyZSBh
dHRlbXB0aW5nIHRvIGluY2x1ZGUgYSBtaXhpbiB0aGF0IGlzIGVpdGhlciBudWxsICcgKyAnb3Ig
bm90IGFuIG9iamVjdC4gQ2hlY2sgdGhlIG1peGlucyBpbmNsdWRlZCBieSB0aGUgY29tcG9uZW50
LCAnICsgJ2FzIHdlbGwgYXMgYW55IG1peGlucyB0aGV5IGluY2x1ZGUgdGhlbXNlbHZlcy4gJyAr
ICdFeHBlY3RlZCBvYmplY3QgYnV0IGdvdCAlcy4nLCBDb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8
fCAnUmVhY3RDbGFzcycsIHNwZWMgPT09IG51bGwgPyBudWxsIDogdHlwZW9mU3BlYykgOiB2b2lk
IDA7CisgICAgfQorCisgICAgcmV0dXJuOworICB9CisKKyAgISh0eXBlb2Ygc3BlYyAhPT0gJ2Z1
bmN0aW9uJykgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFs
c2UsICdSZWFjdENsYXNzOiBZb3VcJ3JlIGF0dGVtcHRpbmcgdG8gdXNlIGEgY29tcG9uZW50IGNs
YXNzIG9yIGZ1bmN0aW9uIGFzIGEgbWl4aW4uIEluc3RlYWQsIGp1c3QgdXNlIGEgcmVndWxhciBv
YmplY3QuJykgOiBfcHJvZEludmFyaWFudCgnNzUnKSA6IHZvaWQgMDsKKyAgISFSZWFjdEVsZW1l
bnQuaXNWYWxpZEVsZW1lbnQoc3BlYykgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicg
PyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdENsYXNzOiBZb3VcJ3JlIGF0dGVtcHRpbmcgdG8gdXNl
IGEgY29tcG9uZW50IGFzIGEgbWl4aW4uIEluc3RlYWQsIGp1c3QgdXNlIGEgcmVndWxhciBvYmpl
Y3QuJykgOiBfcHJvZEludmFyaWFudCgnNzYnKSA6IHZvaWQgMDsKKworICB2YXIgcHJvdG8gPSBD
b25zdHJ1Y3Rvci5wcm90b3R5cGU7CisgIHZhciBhdXRvQmluZFBhaXJzID0gcHJvdG8uX19yZWFj
dEF1dG9CaW5kUGFpcnM7CisKKyAgLy8gQnkgaGFuZGxpbmcgbWl4aW5zIGJlZm9yZSBhbnkgb3Ro
ZXIgcHJvcGVydGllcywgd2UgZW5zdXJlIHRoZSBzYW1lCisgIC8vIGNoYWluaW5nIG9yZGVyIGlz
IGFwcGxpZWQgdG8gbWV0aG9kcyB3aXRoIERFRklORV9NQU5ZIHBvbGljeSwgd2hldGhlcgorICAv
LyBtaXhpbnMgYXJlIGxpc3RlZCBiZWZvcmUgb3IgYWZ0ZXIgdGhlc2UgbWV0aG9kcyBpbiB0aGUg
c3BlYy4KKyAgaWYgKHNwZWMuaGFzT3duUHJvcGVydHkoTUlYSU5TX0tFWSkpIHsKKyAgICBSRVNF
UlZFRF9TUEVDX0tFWVMubWl4aW5zKENvbnN0cnVjdG9yLCBzcGVjLm1peGlucyk7CisgIH0KKwor
ICBmb3IgKHZhciBuYW1lIGluIHNwZWMpIHsKKyAgICBpZiAoIXNwZWMuaGFzT3duUHJvcGVydHko
bmFtZSkpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIGlmIChuYW1lID09PSBNSVhJ
TlNfS0VZKSB7CisgICAgICAvLyBXZSBoYXZlIGFscmVhZHkgaGFuZGxlZCBtaXhpbnMgaW4gYSBz
cGVjaWFsIGNhc2UgYWJvdmUuCisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICB2YXIgcHJv
cGVydHkgPSBzcGVjW25hbWVdOworICAgIHZhciBpc0FscmVhZHlEZWZpbmVkID0gcHJvdG8uaGFz
T3duUHJvcGVydHkobmFtZSk7CisgICAgdmFsaWRhdGVNZXRob2RPdmVycmlkZShpc0FscmVhZHlE
ZWZpbmVkLCBuYW1lKTsKKworICAgIGlmIChSRVNFUlZFRF9TUEVDX0tFWVMuaGFzT3duUHJvcGVy
dHkobmFtZSkpIHsKKyAgICAgIFJFU0VSVkVEX1NQRUNfS0VZU1tuYW1lXShDb25zdHJ1Y3Rvciwg
cHJvcGVydHkpOworICAgIH0gZWxzZSB7CisgICAgICAvLyBTZXR1cCBtZXRob2RzIG9uIHByb3Rv
dHlwZToKKyAgICAgIC8vIFRoZSBmb2xsb3dpbmcgbWVtYmVyIG1ldGhvZHMgc2hvdWxkIG5vdCBi
ZSBhdXRvbWF0aWNhbGx5IGJvdW5kOgorICAgICAgLy8gMS4gRXhwZWN0ZWQgUmVhY3RDbGFzcyBt
ZXRob2RzIChpbiB0aGUgImludGVyZmFjZSIpLgorICAgICAgLy8gMi4gT3ZlcnJpZGRlbiBtZXRo
b2RzICh0aGF0IHdlcmUgbWl4ZWQgaW4pLgorICAgICAgdmFyIGlzUmVhY3RDbGFzc01ldGhvZCA9
IFJlYWN0Q2xhc3NJbnRlcmZhY2UuaGFzT3duUHJvcGVydHkobmFtZSk7CisgICAgICB2YXIgaXNG
dW5jdGlvbiA9IHR5cGVvZiBwcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJzsKKyAgICAgIHZhciBzaG91
bGRBdXRvQmluZCA9IGlzRnVuY3Rpb24gJiYgIWlzUmVhY3RDbGFzc01ldGhvZCAmJiAhaXNBbHJl
YWR5RGVmaW5lZCAmJiBzcGVjLmF1dG9iaW5kICE9PSBmYWxzZTsKKworICAgICAgaWYgKHNob3Vs
ZEF1dG9CaW5kKSB7CisgICAgICAgIGF1dG9CaW5kUGFpcnMucHVzaChuYW1lLCBwcm9wZXJ0eSk7
CisgICAgICAgIHByb3RvW25hbWVdID0gcHJvcGVydHk7CisgICAgICB9IGVsc2UgeworICAgICAg
ICBpZiAoaXNBbHJlYWR5RGVmaW5lZCkgeworICAgICAgICAgIHZhciBzcGVjUG9saWN5ID0gUmVh
Y3RDbGFzc0ludGVyZmFjZVtuYW1lXTsKKworICAgICAgICAgIC8vIFRoZXNlIGNhc2VzIHNob3Vs
ZCBhbHJlYWR5IGJlIGNhdWdodCBieSB2YWxpZGF0ZU1ldGhvZE92ZXJyaWRlLgorICAgICAgICAg
ICEoaXNSZWFjdENsYXNzTWV0aG9kICYmIChzcGVjUG9saWN5ID09PSAnREVGSU5FX01BTllfTUVS
R0VEJyB8fCBzcGVjUG9saWN5ID09PSAnREVGSU5FX01BTlknKSkgPyAiZGV2ZWxvcG1lbnQiICE9
PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdENsYXNzOiBVbmV4cGVjdGVk
IHNwZWMgcG9saWN5ICVzIGZvciBrZXkgJXMgd2hlbiBtaXhpbmcgaW4gY29tcG9uZW50IHNwZWNz
LicsIHNwZWNQb2xpY3ksIG5hbWUpIDogX3Byb2RJbnZhcmlhbnQoJzc3Jywgc3BlY1BvbGljeSwg
bmFtZSkgOiB2b2lkIDA7CisKKyAgICAgICAgICAvLyBGb3IgbWV0aG9kcyB3aGljaCBhcmUgZGVm
aW5lZCBtb3JlIHRoYW4gb25jZSwgY2FsbCB0aGUgZXhpc3RpbmcKKyAgICAgICAgICAvLyBtZXRo
b2RzIGJlZm9yZSBjYWxsaW5nIHRoZSBuZXcgcHJvcGVydHksIG1lcmdpbmcgaWYgYXBwcm9wcmlh
dGUuCisgICAgICAgICAgaWYgKHNwZWNQb2xpY3kgPT09ICdERUZJTkVfTUFOWV9NRVJHRUQnKSB7
CisgICAgICAgICAgICBwcm90b1tuYW1lXSA9IGNyZWF0ZU1lcmdlZFJlc3VsdEZ1bmN0aW9uKHBy
b3RvW25hbWVdLCBwcm9wZXJ0eSk7CisgICAgICAgICAgfSBlbHNlIGlmIChzcGVjUG9saWN5ID09
PSAnREVGSU5FX01BTlknKSB7CisgICAgICAgICAgICBwcm90b1tuYW1lXSA9IGNyZWF0ZUNoYWlu
ZWRGdW5jdGlvbihwcm90b1tuYW1lXSwgcHJvcGVydHkpOworICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICBwcm90b1tuYW1lXSA9IHByb3BlcnR5OworICAgICAgICAgIGlm
ICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgICAgICAgIC8vIEFkZCB2
ZXJib3NlIGRpc3BsYXlOYW1lIHRvIHRoZSBmdW5jdGlvbiwgd2hpY2ggaGVscHMgd2hlbiBsb29r
aW5nCisgICAgICAgICAgICAvLyBhdCBwcm9maWxpbmcgdG9vbHMuCisgICAgICAgICAgICBpZiAo
dHlwZW9mIHByb3BlcnR5ID09PSAnZnVuY3Rpb24nICYmIHNwZWMuZGlzcGxheU5hbWUpIHsKKyAg
ICAgICAgICAgICAgcHJvdG9bbmFtZV0uZGlzcGxheU5hbWUgPSBzcGVjLmRpc3BsYXlOYW1lICsg
J18nICsgbmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
IH0KKyAgICB9CisgIH0KK30KKworZnVuY3Rpb24gbWl4U3RhdGljU3BlY0ludG9Db21wb25lbnQo
Q29uc3RydWN0b3IsIHN0YXRpY3MpIHsKKyAgaWYgKCFzdGF0aWNzKSB7CisgICAgcmV0dXJuOwor
ICB9CisgIGZvciAodmFyIG5hbWUgaW4gc3RhdGljcykgeworICAgIHZhciBwcm9wZXJ0eSA9IHN0
YXRpY3NbbmFtZV07CisgICAgaWYgKCFzdGF0aWNzLmhhc093blByb3BlcnR5KG5hbWUpKSB7Cisg
ICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICB2YXIgaXNSZXNlcnZlZCA9IG5hbWUgaW4gUkVT
RVJWRURfU1BFQ19LRVlTOworICAgICEhaXNSZXNlcnZlZCA/ICJkZXZlbG9wbWVudCIgIT09ICdw
cm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1JlYWN0Q2xhc3M6IFlvdSBhcmUgYXR0ZW1w
dGluZyB0byBkZWZpbmUgYSByZXNlcnZlZCBwcm9wZXJ0eSwgYCVzYCwgdGhhdCBzaG91bGRuXCd0
IGJlIG9uIHRoZSAic3RhdGljcyIga2V5LiBEZWZpbmUgaXQgYXMgYW4gaW5zdGFuY2UgcHJvcGVy
dHkgaW5zdGVhZDsgaXQgd2lsbCBzdGlsbCBiZSBhY2Nlc3NpYmxlIG9uIHRoZSBjb25zdHJ1Y3Rv
ci4nLCBuYW1lKSA6IF9wcm9kSW52YXJpYW50KCc3OCcsIG5hbWUpIDogdm9pZCAwOworCisgICAg
dmFyIGlzSW5oZXJpdGVkID0gbmFtZSBpbiBDb25zdHJ1Y3RvcjsKKyAgICAhIWlzSW5oZXJpdGVk
ID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnUmVh
Y3RDbGFzczogWW91IGFyZSBhdHRlbXB0aW5nIHRvIGRlZmluZSBgJXNgIG9uIHlvdXIgY29tcG9u
ZW50IG1vcmUgdGhhbiBvbmNlLiBUaGlzIGNvbmZsaWN0IG1heSBiZSBkdWUgdG8gYSBtaXhpbi4n
LCBuYW1lKSA6IF9wcm9kSW52YXJpYW50KCc3OScsIG5hbWUpIDogdm9pZCAwOworICAgIENvbnN0
cnVjdG9yW25hbWVdID0gcHJvcGVydHk7CisgIH0KK30KKworLyoqCisgKiBNZXJnZSB0d28gb2Jq
ZWN0cywgYnV0IHRocm93IGlmIGJvdGggY29udGFpbiB0aGUgc2FtZSBrZXkuCisgKgorICogQHBh
cmFtIHtvYmplY3R9IG9uZSBUaGUgZmlyc3Qgb2JqZWN0LCB3aGljaCBpcyBtdXRhdGVkLgorICog
QHBhcmFtIHtvYmplY3R9IHR3byBUaGUgc2Vjb25kIG9iamVjdAorICogQHJldHVybiB7b2JqZWN0
fSBvbmUgYWZ0ZXIgaXQgaGFzIGJlZW4gbXV0YXRlZCB0byBjb250YWluIGV2ZXJ5dGhpbmcgaW4g
dHdvLgorICovCitmdW5jdGlvbiBtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzKG9uZSwgdHdv
KSB7CisgICEob25lICYmIHR3byAmJiB0eXBlb2Ygb25lID09PSAnb2JqZWN0JyAmJiB0eXBlb2Yg
dHdvID09PSAnb2JqZWN0JykgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZh
cmlhbnQoZmFsc2UsICdtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzKCk6IENhbm5vdCBtZXJn
ZSBub24tb2JqZWN0cy4nKSA6IF9wcm9kSW52YXJpYW50KCc4MCcpIDogdm9pZCAwOworCisgIGZv
ciAodmFyIGtleSBpbiB0d28pIHsKKyAgICBpZiAodHdvLmhhc093blByb3BlcnR5KGtleSkpIHsK
KyAgICAgICEob25lW2tleV0gPT09IHVuZGVmaW5lZCkgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJv
ZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlz
KCk6IFRyaWVkIHRvIG1lcmdlIHR3byBvYmplY3RzIHdpdGggdGhlIHNhbWUga2V5OiBgJXNgLiBU
aGlzIGNvbmZsaWN0IG1heSBiZSBkdWUgdG8gYSBtaXhpbjsgaW4gcGFydGljdWxhciwgdGhpcyBt
YXkgYmUgY2F1c2VkIGJ5IHR3byBnZXRJbml0aWFsU3RhdGUoKSBvciBnZXREZWZhdWx0UHJvcHMo
KSBtZXRob2RzIHJldHVybmluZyBvYmplY3RzIHdpdGggY2xhc2hpbmcga2V5cy4nLCBrZXkpIDog
X3Byb2RJbnZhcmlhbnQoJzgxJywga2V5KSA6IHZvaWQgMDsKKyAgICAgIG9uZVtrZXldID0gdHdv
W2tleV07CisgICAgfQorICB9CisgIHJldHVybiBvbmU7Cit9CisKKy8qKgorICogQ3JlYXRlcyBh
IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0d28gZnVuY3Rpb25zIGFuZCBtZXJnZXMgdGhlaXIgcmV0
dXJuIHZhbHVlcy4KKyAqCisgKiBAcGFyYW0ge2Z1bmN0aW9ufSBvbmUgRnVuY3Rpb24gdG8gaW52
b2tlIGZpcnN0LgorICogQHBhcmFtIHtmdW5jdGlvbn0gdHdvIEZ1bmN0aW9uIHRvIGludm9rZSBz
ZWNvbmQuCisgKiBAcmV0dXJuIHtmdW5jdGlvbn0gRnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSB0
d28gYXJndW1lbnQgZnVuY3Rpb25zLgorICogQHByaXZhdGUKKyAqLworZnVuY3Rpb24gY3JlYXRl
TWVyZ2VkUmVzdWx0RnVuY3Rpb24ob25lLCB0d28pIHsKKyAgcmV0dXJuIGZ1bmN0aW9uIG1lcmdl
ZFJlc3VsdCgpIHsKKyAgICB2YXIgYSA9IG9uZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAg
IHZhciBiID0gdHdvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgaWYgKGEgPT0gbnVsbCkg
eworICAgICAgcmV0dXJuIGI7CisgICAgfSBlbHNlIGlmIChiID09IG51bGwpIHsKKyAgICAgIHJl
dHVybiBhOworICAgIH0KKyAgICB2YXIgYyA9IHt9OworICAgIG1lcmdlSW50b1dpdGhOb0R1cGxp
Y2F0ZUtleXMoYywgYSk7CisgICAgbWVyZ2VJbnRvV2l0aE5vRHVwbGljYXRlS2V5cyhjLCBiKTsK
KyAgICByZXR1cm4gYzsKKyAgfTsKK30KKworLyoqCisgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhh
dCBpbnZva2VzIHR3byBmdW5jdGlvbnMgYW5kIGlnbm9yZXMgdGhlaXIgcmV0dXJuIHZhbGVzLgor
ICoKKyAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uZSBGdW5jdGlvbiB0byBpbnZva2UgZmlyc3QuCisg
KiBAcGFyYW0ge2Z1bmN0aW9ufSB0d28gRnVuY3Rpb24gdG8gaW52b2tlIHNlY29uZC4KKyAqIEBy
ZXR1cm4ge2Z1bmN0aW9ufSBGdW5jdGlvbiB0aGF0IGludm9rZXMgdGhlIHR3byBhcmd1bWVudCBm
dW5jdGlvbnMuCisgKiBAcHJpdmF0ZQorICovCitmdW5jdGlvbiBjcmVhdGVDaGFpbmVkRnVuY3Rp
b24ob25lLCB0d28pIHsKKyAgcmV0dXJuIGZ1bmN0aW9uIGNoYWluZWRGdW5jdGlvbigpIHsKKyAg
ICBvbmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICB0d28uYXBwbHkodGhpcywgYXJndW1l
bnRzKTsKKyAgfTsKK30KKworLyoqCisgKiBCaW5kcyBhIG1ldGhvZCB0byB0aGUgY29tcG9uZW50
LgorICoKKyAqIEBwYXJhbSB7b2JqZWN0fSBjb21wb25lbnQgQ29tcG9uZW50IHdob3NlIG1ldGhv
ZCBpcyBnb2luZyB0byBiZSBib3VuZC4KKyAqIEBwYXJhbSB7ZnVuY3Rpb259IG1ldGhvZCBNZXRo
b2QgdG8gYmUgYm91bmQuCisgKiBAcmV0dXJuIHtmdW5jdGlvbn0gVGhlIGJvdW5kIG1ldGhvZC4K
KyAqLworZnVuY3Rpb24gYmluZEF1dG9CaW5kTWV0aG9kKGNvbXBvbmVudCwgbWV0aG9kKSB7Cisg
IHZhciBib3VuZE1ldGhvZCA9IG1ldGhvZC5iaW5kKGNvbXBvbmVudCk7CisgIGlmICgiZGV2ZWxv
cG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICBib3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRD
b250ZXh0ID0gY29tcG9uZW50OworICAgIGJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZE1ldGhvZCA9
IG1ldGhvZDsKKyAgICBib3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRBcmd1bWVudHMgPSBudWxsOwor
ICAgIHZhciBjb21wb25lbnROYW1lID0gY29tcG9uZW50LmNvbnN0cnVjdG9yLmRpc3BsYXlOYW1l
OworICAgIHZhciBfYmluZCA9IGJvdW5kTWV0aG9kLmJpbmQ7CisgICAgYm91bmRNZXRob2QuYmlu
ZCA9IGZ1bmN0aW9uIChuZXdUaGlzKSB7CisgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRz
Lmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7
IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKKyAgICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVu
dHNbX2tleV07CisgICAgICB9CisKKyAgICAgIC8vIFVzZXIgaXMgdHJ5aW5nIHRvIGJpbmQoKSBh
biBhdXRvYm91bmQgbWV0aG9kOyB3ZSBlZmZlY3RpdmVseSB3aWxsCisgICAgICAvLyBpZ25vcmUg
dGhlIHZhbHVlIG9mICJ0aGlzIiB0aGF0IHRoZSB1c2VyIGlzIHRyeWluZyB0byB1c2UsIHNvCisg
ICAgICAvLyBsZXQncyB3YXJuLgorICAgICAgaWYgKG5ld1RoaXMgIT09IGNvbXBvbmVudCAmJiBu
ZXdUaGlzICE9PSBudWxsKSB7CisgICAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9u
JyA/IHdhcm5pbmcoZmFsc2UsICdiaW5kKCk6IFJlYWN0IGNvbXBvbmVudCBtZXRob2RzIG1heSBv
bmx5IGJlIGJvdW5kIHRvIHRoZSAnICsgJ2NvbXBvbmVudCBpbnN0YW5jZS4gU2VlICVzJywgY29t
cG9uZW50TmFtZSkgOiB2b2lkIDA7CisgICAgICB9IGVsc2UgaWYgKCFhcmdzLmxlbmd0aCkgewor
ICAgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAn
YmluZCgpOiBZb3UgYXJlIGJpbmRpbmcgYSBjb21wb25lbnQgbWV0aG9kIHRvIHRoZSBjb21wb25l
bnQuICcgKyAnUmVhY3QgZG9lcyB0aGlzIGZvciB5b3UgYXV0b21hdGljYWxseSBpbiBhIGhpZ2gt
cGVyZm9ybWFuY2UgJyArICd3YXksIHNvIHlvdSBjYW4gc2FmZWx5IHJlbW92ZSB0aGlzIGNhbGwu
IFNlZSAlcycsIGNvbXBvbmVudE5hbWUpIDogdm9pZCAwOworICAgICAgICByZXR1cm4gYm91bmRN
ZXRob2Q7CisgICAgICB9CisgICAgICB2YXIgcmVib3VuZE1ldGhvZCA9IF9iaW5kLmFwcGx5KGJv
dW5kTWV0aG9kLCBhcmd1bWVudHMpOworICAgICAgcmVib3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRD
b250ZXh0ID0gY29tcG9uZW50OworICAgICAgcmVib3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRNZXRo
b2QgPSBtZXRob2Q7CisgICAgICByZWJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZEFyZ3VtZW50cyA9
IGFyZ3M7CisgICAgICByZXR1cm4gcmVib3VuZE1ldGhvZDsKKyAgICB9OworICB9CisgIHJldHVy
biBib3VuZE1ldGhvZDsKK30KKworLyoqCisgKiBCaW5kcyBhbGwgYXV0by1ib3VuZCBtZXRob2Rz
IGluIGEgY29tcG9uZW50LgorICoKKyAqIEBwYXJhbSB7b2JqZWN0fSBjb21wb25lbnQgQ29tcG9u
ZW50IHdob3NlIG1ldGhvZCBpcyBnb2luZyB0byBiZSBib3VuZC4KKyAqLworZnVuY3Rpb24gYmlu
ZEF1dG9CaW5kTWV0aG9kcyhjb21wb25lbnQpIHsKKyAgdmFyIHBhaXJzID0gY29tcG9uZW50Ll9f
cmVhY3RBdXRvQmluZFBhaXJzOworICBmb3IgKHZhciBpID0gMDsgaSA8IHBhaXJzLmxlbmd0aDsg
aSArPSAyKSB7CisgICAgdmFyIGF1dG9CaW5kS2V5ID0gcGFpcnNbaV07CisgICAgdmFyIG1ldGhv
ZCA9IHBhaXJzW2kgKyAxXTsKKyAgICBjb21wb25lbnRbYXV0b0JpbmRLZXldID0gYmluZEF1dG9C
aW5kTWV0aG9kKGNvbXBvbmVudCwgbWV0aG9kKTsKKyAgfQorfQorCisvKioKKyAqIEFkZCBtb3Jl
IHRvIHRoZSBSZWFjdENsYXNzIGJhc2UgY2xhc3MuIFRoZXNlIGFyZSBhbGwgbGVnYWN5IGZlYXR1
cmVzIGFuZAorICogdGhlcmVmb3JlIG5vdCBhbHJlYWR5IHBhcnQgb2YgdGhlIG1vZGVybiBSZWFj
dENvbXBvbmVudC4KKyAqLwordmFyIFJlYWN0Q2xhc3NNaXhpbiA9IHsKKworICAvKioKKyAgICog
VE9ETzogVGhpcyB3aWxsIGJlIGRlcHJlY2F0ZWQgYmVjYXVzZSBzdGF0ZSBzaG91bGQgYWx3YXlz
IGtlZXAgYSBjb25zaXN0ZW50CisgICAqIHR5cGUgc2lnbmF0dXJlIGFuZCB0aGUgb25seSB1c2Ug
Y2FzZSBmb3IgdGhpcywgaXMgdG8gYXZvaWQgdGhhdC4KKyAgICovCisgIHJlcGxhY2VTdGF0ZTog
ZnVuY3Rpb24gKG5ld1N0YXRlLCBjYWxsYmFjaykgeworICAgIHRoaXMudXBkYXRlci5lbnF1ZXVl
UmVwbGFjZVN0YXRlKHRoaXMsIG5ld1N0YXRlKTsKKyAgICBpZiAoY2FsbGJhY2spIHsKKyAgICAg
IHRoaXMudXBkYXRlci5lbnF1ZXVlQ2FsbGJhY2sodGhpcywgY2FsbGJhY2ssICdyZXBsYWNlU3Rh
dGUnKTsKKyAgICB9CisgIH0sCisKKyAgLyoqCisgICAqIENoZWNrcyB3aGV0aGVyIG9yIG5vdCB0
aGlzIGNvbXBvc2l0ZSBjb21wb25lbnQgaXMgbW91bnRlZC4KKyAgICogQHJldHVybiB7Ym9vbGVh
bn0gVHJ1ZSBpZiBtb3VudGVkLCBmYWxzZSBvdGhlcndpc2UuCisgICAqIEBwcm90ZWN0ZWQKKyAg
ICogQGZpbmFsCisgICAqLworICBpc01vdW50ZWQ6IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4g
dGhpcy51cGRhdGVyLmlzTW91bnRlZCh0aGlzKTsKKyAgfQorfTsKKwordmFyIFJlYWN0Q2xhc3ND
b21wb25lbnQgPSBmdW5jdGlvbiAoKSB7fTsKK19hc3NpZ24oUmVhY3RDbGFzc0NvbXBvbmVudC5w
cm90b3R5cGUsIFJlYWN0Q29tcG9uZW50LnByb3RvdHlwZSwgUmVhY3RDbGFzc01peGluKTsKKwor
dmFyIGRpZFdhcm5EZXByZWNhdGVkID0gZmFsc2U7CisKKy8qKgorICogTW9kdWxlIGZvciBjcmVh
dGluZyBjb21wb3NpdGUgY29tcG9uZW50cy4KKyAqCisgKiBAY2xhc3MgUmVhY3RDbGFzcworICov
Cit2YXIgUmVhY3RDbGFzcyA9IHsKKworICAvKioKKyAgICogQ3JlYXRlcyBhIGNvbXBvc2l0ZSBj
b21wb25lbnQgY2xhc3MgZ2l2ZW4gYSBjbGFzcyBzcGVjaWZpY2F0aW9uLgorICAgKiBTZWUgaHR0
cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVh
Y3QuY3JlYXRlY2xhc3MKKyAgICoKKyAgICogQHBhcmFtIHtvYmplY3R9IHNwZWMgQ2xhc3Mgc3Bl
Y2lmaWNhdGlvbiAod2hpY2ggbXVzdCBkZWZpbmUgYHJlbmRlcmApLgorICAgKiBAcmV0dXJuIHtm
dW5jdGlvbn0gQ29tcG9uZW50IGNvbnN0cnVjdG9yIGZ1bmN0aW9uLgorICAgKiBAcHVibGljCisg
ICAqLworICBjcmVhdGVDbGFzczogZnVuY3Rpb24gKHNwZWMpIHsKKyAgICBpZiAoImRldmVsb3Bt
ZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVj
dGlvbicgPyB3YXJuaW5nKGRpZFdhcm5EZXByZWNhdGVkLCAnJXM6IFJlYWN0LmNyZWF0ZUNsYXNz
IGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB2ZXJzaW9uIDE2LiAnICsgJ1Vz
ZSBwbGFpbiBKYXZhU2NyaXB0IGNsYXNzZXMgaW5zdGVhZC4gSWYgeW91XCdyZSBub3QgeWV0IHJl
YWR5IHRvICcgKyAnbWlncmF0ZSwgY3JlYXRlLXJlYWN0LWNsYXNzIGlzIGF2YWlsYWJsZSBvbiBu
cG0gYXMgYSAnICsgJ2Ryb3AtaW4gcmVwbGFjZW1lbnQuJywgc3BlYyAmJiBzcGVjLmRpc3BsYXlO
YW1lIHx8ICdBIENvbXBvbmVudCcpIDogdm9pZCAwOworICAgICAgZGlkV2FybkRlcHJlY2F0ZWQg
PSB0cnVlOworICAgIH0KKworICAgIC8vIFRvIGtlZXAgb3VyIHdhcm5pbmdzIG1vcmUgdW5kZXJz
dGFuZGFibGUsIHdlJ2xsIHVzZSBhIGxpdHRsZSBoYWNrIGhlcmUgdG8KKyAgICAvLyBlbnN1cmUg
dGhhdCBDb25zdHJ1Y3Rvci5uYW1lICE9PSAnQ29uc3RydWN0b3InLiBUaGlzIG1ha2VzIHN1cmUg
d2UgZG9uJ3QKKyAgICAvLyB1bm5lY2Vzc2FyaWx5IGlkZW50aWZ5IGEgY2xhc3Mgd2l0aG91dCBk
aXNwbGF5TmFtZSBhcyAnQ29uc3RydWN0b3InLgorICAgIHZhciBDb25zdHJ1Y3RvciA9IGlkZW50
aXR5KGZ1bmN0aW9uIChwcm9wcywgY29udGV4dCwgdXBkYXRlcikgeworICAgICAgLy8gVGhpcyBj
b25zdHJ1Y3RvciBnZXRzIG92ZXJyaWRkZW4gYnkgbW9ja3MuIFRoZSBhcmd1bWVudCBpcyB1c2Vk
CisgICAgICAvLyBieSBtb2NrcyB0byBhc3NlcnQgb24gd2hhdCBnZXRzIG1vdW50ZWQuCisKKyAg
ICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgICAgImRldmVs
b3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyh0aGlzIGluc3RhbmNlb2YgQ29uc3Ry
dWN0b3IsICdTb21ldGhpbmcgaXMgY2FsbGluZyBhIFJlYWN0IGNvbXBvbmVudCBkaXJlY3RseS4g
VXNlIGEgZmFjdG9yeSBvciAnICsgJ0pTWCBpbnN0ZWFkLiBTZWU6IGh0dHBzOi8vZmIubWUvcmVh
Y3QtbGVnYWN5ZmFjdG9yeScpIDogdm9pZCAwOworICAgICAgfQorCisgICAgICAvLyBXaXJlIHVw
IGF1dG8tYmluZGluZworICAgICAgaWYgKHRoaXMuX19yZWFjdEF1dG9CaW5kUGFpcnMubGVuZ3Ro
KSB7CisgICAgICAgIGJpbmRBdXRvQmluZE1ldGhvZHModGhpcyk7CisgICAgICB9CisKKyAgICAg
IHRoaXMucHJvcHMgPSBwcm9wczsKKyAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7CisgICAg
ICB0aGlzLnJlZnMgPSBlbXB0eU9iamVjdDsKKyAgICAgIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIg
fHwgUmVhY3ROb29wVXBkYXRlUXVldWU7CisKKyAgICAgIHRoaXMuc3RhdGUgPSBudWxsOworCisg
ICAgICAvLyBSZWFjdENsYXNzZXMgZG9lc24ndCBoYXZlIGNvbnN0cnVjdG9ycy4gSW5zdGVhZCwg
dGhleSB1c2UgdGhlCisgICAgICAvLyBnZXRJbml0aWFsU3RhdGUgYW5kIGNvbXBvbmVudFdpbGxN
b3VudCBtZXRob2RzIGZvciBpbml0aWFsaXphdGlvbi4KKworICAgICAgdmFyIGluaXRpYWxTdGF0
ZSA9IHRoaXMuZ2V0SW5pdGlhbFN0YXRlID8gdGhpcy5nZXRJbml0aWFsU3RhdGUoKSA6IG51bGw7
CisgICAgICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICAgIC8v
IFdlIGFsbG93IGF1dG8tbW9ja3MgdG8gcHJvY2VlZCBhcyBpZiB0aGV5J3JlIHJldHVybmluZyBu
dWxsLgorICAgICAgICBpZiAoaW5pdGlhbFN0YXRlID09PSB1bmRlZmluZWQgJiYgdGhpcy5nZXRJ
bml0aWFsU3RhdGUuX2lzTW9ja0Z1bmN0aW9uKSB7CisgICAgICAgICAgLy8gVGhpcyBpcyBwcm9i
YWJseSBiYWQgcHJhY3RpY2UuIENvbnNpZGVyIHdhcm5pbmcgaGVyZSBhbmQKKyAgICAgICAgICAv
LyBkZXByZWNhdGluZyB0aGlzIGNvbnZlbmllbmNlLgorICAgICAgICAgIGluaXRpYWxTdGF0ZSA9
IG51bGw7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgICEodHlwZW9mIGluaXRpYWxTdGF0ZSA9
PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoaW5pdGlhbFN0YXRlKSkgPyAiZGV2ZWxvcG1l
bnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICclcy5nZXRJbml0aWFsU3Rh
dGUoKTogbXVzdCByZXR1cm4gYW4gb2JqZWN0IG9yIG51bGwnLCBDb25zdHJ1Y3Rvci5kaXNwbGF5
TmFtZSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnKSA6IF9wcm9kSW52YXJpYW50KCc4Mics
IENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCcpIDog
dm9pZCAwOworCisgICAgICB0aGlzLnN0YXRlID0gaW5pdGlhbFN0YXRlOworICAgIH0pOworICAg
IENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IG5ldyBSZWFjdENsYXNzQ29tcG9uZW50KCk7CisgICAg
Q29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3I7CisgICAgQ29u
c3RydWN0b3IucHJvdG90eXBlLl9fcmVhY3RBdXRvQmluZFBhaXJzID0gW107CisKKyAgICBpbmpl
Y3RlZE1peGlucy5mb3JFYWNoKG1peFNwZWNJbnRvQ29tcG9uZW50LmJpbmQobnVsbCwgQ29uc3Ry
dWN0b3IpKTsKKworICAgIG1peFNwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBzcGVjKTsK
KworICAgIC8vIEluaXRpYWxpemUgdGhlIGRlZmF1bHRQcm9wcyBwcm9wZXJ0eSBhZnRlciBhbGwg
bWl4aW5zIGhhdmUgYmVlbiBtZXJnZWQuCisgICAgaWYgKENvbnN0cnVjdG9yLmdldERlZmF1bHRQ
cm9wcykgeworICAgICAgQ29uc3RydWN0b3IuZGVmYXVsdFByb3BzID0gQ29uc3RydWN0b3IuZ2V0
RGVmYXVsdFByb3BzKCk7CisgICAgfQorCisgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9k
dWN0aW9uJykgeworICAgICAgLy8gVGhpcyBpcyBhIHRhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSB1
c2Ugb2YgdGhlc2UgbWV0aG9kIG5hbWVzIGlzIG9rLAorICAgICAgLy8gc2luY2UgaXQncyB1c2Vk
IHdpdGggY3JlYXRlQ2xhc3MuIElmIGl0J3Mgbm90LCB0aGVuIGl0J3MgbGlrZWx5IGEKKyAgICAg
IC8vIG1pc3Rha2Ugc28gd2UnbGwgd2FybiB5b3UgdG8gdXNlIHRoZSBzdGF0aWMgcHJvcGVydHks
IHByb3BlcnR5CisgICAgICAvLyBpbml0aWFsaXplciBvciBjb25zdHJ1Y3RvciByZXNwZWN0aXZl
bHkuCisgICAgICBpZiAoQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzKSB7CisgICAgICAgIENv
bnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCA9IHt9OworICAg
ICAgfQorICAgICAgaWYgKENvbnN0cnVjdG9yLnByb3RvdHlwZS5nZXRJbml0aWFsU3RhdGUpIHsK
KyAgICAgICAgQ29uc3RydWN0b3IucHJvdG90eXBlLmdldEluaXRpYWxTdGF0ZS5pc1JlYWN0Q2xh
c3NBcHByb3ZlZCA9IHt9OworICAgICAgfQorICAgIH0KKworICAgICFDb25zdHJ1Y3Rvci5wcm90
b3R5cGUucmVuZGVyID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50
KGZhbHNlLCAnY3JlYXRlQ2xhc3MoLi4uKTogQ2xhc3Mgc3BlY2lmaWNhdGlvbiBtdXN0IGltcGxl
bWVudCBhIGByZW5kZXJgIG1ldGhvZC4nKSA6IF9wcm9kSW52YXJpYW50KCc4MycpIDogdm9pZCAw
OworCisgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgICAgImRl
dmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyghQ29uc3RydWN0b3IucHJvdG90
eXBlLmNvbXBvbmVudFNob3VsZFVwZGF0ZSwgJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdj
b21wb25lbnRTaG91bGRVcGRhdGUoKS4gRGlkIHlvdSBtZWFuIHNob3VsZENvbXBvbmVudFVwZGF0
ZSgpPyAnICsgJ1RoZSBuYW1lIGlzIHBocmFzZWQgYXMgYSBxdWVzdGlvbiBiZWNhdXNlIHRoZSBm
dW5jdGlvbiBpcyAnICsgJ2V4cGVjdGVkIHRvIHJldHVybiBhIHZhbHVlLicsIHNwZWMuZGlzcGxh
eU5hbWUgfHwgJ0EgY29tcG9uZW50JykgOiB2b2lkIDA7CisgICAgICAiZGV2ZWxvcG1lbnQiICE9
PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFDb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29tcG9uZW50
V2lsbFJlY2lldmVQcm9wcywgJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdjb21wb25lbnRX
aWxsUmVjaWV2ZVByb3BzKCkuIERpZCB5b3UgbWVhbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3Bz
KCk/Jywgc3BlYy5kaXNwbGF5TmFtZSB8fCAnQSBjb21wb25lbnQnKSA6IHZvaWQgMDsKKyAgICB9
CisKKyAgICAvLyBSZWR1Y2UgdGltZSBzcGVudCBkb2luZyBsb29rdXBzIGJ5IHNldHRpbmcgdGhl
c2Ugb24gdGhlIHByb3RvdHlwZS4KKyAgICBmb3IgKHZhciBtZXRob2ROYW1lIGluIFJlYWN0Q2xh
c3NJbnRlcmZhY2UpIHsKKyAgICAgIGlmICghQ29uc3RydWN0b3IucHJvdG90eXBlW21ldGhvZE5h
bWVdKSB7CisgICAgICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IG51bGw7
CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIENvbnN0cnVjdG9yOworICB9LAorCisgIGlu
amVjdGlvbjogeworICAgIGluamVjdE1peGluOiBmdW5jdGlvbiAobWl4aW4pIHsKKyAgICAgIGlu
amVjdGVkTWl4aW5zLnB1c2gobWl4aW4pOworICAgIH0KKyAgfQorCit9OworCittb2R1bGUuZXhw
b3J0cyA9IFJlYWN0Q2xhc3M7Cit9LHsiMTAiOjEwLCIxMyI6MTMsIjE0IjoxNCwiMjUiOjI1LCIy
OCI6MjgsIjI5IjoyOSwiMzAiOjMwLCIzMSI6MzEsIjYiOjZ9XSw2OltmdW5jdGlvbihfZGVyZXFf
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJv
b2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29k
ZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisg
KiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUu
IEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGlu
IHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNl
IHN0cmljdCc7CisKK3ZhciBfcHJvZEludmFyaWFudCA9IF9kZXJlcV8oMjUpOworCit2YXIgUmVh
Y3ROb29wVXBkYXRlUXVldWUgPSBfZGVyZXFfKDEzKTsKKwordmFyIGNhbkRlZmluZVByb3BlcnR5
ID0gX2RlcmVxXygyMCk7Cit2YXIgZW1wdHlPYmplY3QgPSBfZGVyZXFfKDI4KTsKK3ZhciBpbnZh
cmlhbnQgPSBfZGVyZXFfKDI5KTsKK3ZhciB3YXJuaW5nID0gX2RlcmVxXygzMCk7CisKKy8qKgor
ICogQmFzZSBjbGFzcyBoZWxwZXJzIGZvciB0aGUgdXBkYXRpbmcgc3RhdGUgb2YgYSBjb21wb25l
bnQuCisgKi8KK2Z1bmN0aW9uIFJlYWN0Q29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVy
KSB7CisgIHRoaXMucHJvcHMgPSBwcm9wczsKKyAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsKKyAg
dGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7CisgIC8vIFdlIGluaXRpYWxpemUgdGhlIGRlZmF1bHQg
dXBkYXRlciBidXQgdGhlIHJlYWwgb25lIGdldHMgaW5qZWN0ZWQgYnkgdGhlCisgIC8vIHJlbmRl
cmVyLgorICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlOwor
fQorCitSZWFjdENvbXBvbmVudC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCA9IHt9OworCisv
KioKKyAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHN0YXRlLiBBbHdheXMgdXNlIHRoaXMgdG8gbXV0
YXRlCisgKiBzdGF0ZS4gWW91IHNob3VsZCB0cmVhdCBgdGhpcy5zdGF0ZWAgYXMgaW1tdXRhYmxl
LgorICoKKyAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGB0aGlzLnN0YXRlYCB3aWxsIGJl
IGltbWVkaWF0ZWx5IHVwZGF0ZWQsIHNvCisgKiBhY2Nlc3NpbmcgYHRoaXMuc3RhdGVgIGFmdGVy
IGNhbGxpbmcgdGhpcyBtZXRob2QgbWF5IHJldHVybiB0aGUgb2xkIHZhbHVlLgorICoKKyAqIFRo
ZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGNhbGxzIHRvIGBzZXRTdGF0ZWAgd2lsbCBydW4gc3lu
Y2hyb25vdXNseSwKKyAqIGFzIHRoZXkgbWF5IGV2ZW50dWFsbHkgYmUgYmF0Y2hlZCB0b2dldGhl
ci4gIFlvdSBjYW4gcHJvdmlkZSBhbiBvcHRpb25hbAorICogY2FsbGJhY2sgdGhhdCB3aWxsIGJl
IGV4ZWN1dGVkIHdoZW4gdGhlIGNhbGwgdG8gc2V0U3RhdGUgaXMgYWN0dWFsbHkKKyAqIGNvbXBs
ZXRlZC4KKyAqCisgKiBXaGVuIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdG8gc2V0U3RhdGUsIGl0
IHdpbGwgYmUgY2FsbGVkIGF0IHNvbWUgcG9pbnQgaW4KKyAqIHRoZSBmdXR1cmUgKG5vdCBzeW5j
aHJvbm91c2x5KS4gSXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgdXAgdG8gZGF0ZQorICogY29t
cG9uZW50IGFyZ3VtZW50cyAoc3RhdGUsIHByb3BzLCBjb250ZXh0KS4gVGhlc2UgdmFsdWVzIGNh
biBiZSBkaWZmZXJlbnQKKyAqIGZyb20gdGhpcy4qIGJlY2F1c2UgeW91ciBmdW5jdGlvbiBtYXkg
YmUgY2FsbGVkIGFmdGVyIHJlY2VpdmVQcm9wcyBidXQgYmVmb3JlCisgKiBzaG91bGRDb21wb25l
bnRVcGRhdGUsIGFuZCB0aGlzIG5ldyBzdGF0ZSwgcHJvcHMsIGFuZCBjb250ZXh0IHdpbGwgbm90
IHlldCBiZQorICogYXNzaWduZWQgdG8gdGhpcy4KKyAqCisgKiBAcGFyYW0ge29iamVjdHxmdW5j
dGlvbn0gcGFydGlhbFN0YXRlIE5leHQgcGFydGlhbCBzdGF0ZSBvciBmdW5jdGlvbiB0bworICog
ICAgICAgIHByb2R1Y2UgbmV4dCBwYXJ0aWFsIHN0YXRlIHRvIGJlIG1lcmdlZCB3aXRoIGN1cnJl
bnQgc3RhdGUuCisgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHN0
YXRlIGlzIHVwZGF0ZWQuCisgKiBAZmluYWwKKyAqIEBwcm90ZWN0ZWQKKyAqLworUmVhY3RDb21w
b25lbnQucHJvdG90eXBlLnNldFN0YXRlID0gZnVuY3Rpb24gKHBhcnRpYWxTdGF0ZSwgY2FsbGJh
Y2spIHsKKyAgISh0eXBlb2YgcGFydGlhbFN0YXRlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgcGFy
dGlhbFN0YXRlID09PSAnZnVuY3Rpb24nIHx8IHBhcnRpYWxTdGF0ZSA9PSBudWxsKSA/ICJkZXZl
bG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3NldFN0YXRlKC4u
Lik6IHRha2VzIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMgdG8gdXBkYXRlIG9yIGEgZnVu
Y3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLicpIDogX3By
b2RJbnZhcmlhbnQoJzg1JykgOiB2b2lkIDA7CisgIHRoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3Rh
dGUodGhpcywgcGFydGlhbFN0YXRlKTsKKyAgaWYgKGNhbGxiYWNrKSB7CisgICAgdGhpcy51cGRh
dGVyLmVucXVldWVDYWxsYmFjayh0aGlzLCBjYWxsYmFjaywgJ3NldFN0YXRlJyk7CisgIH0KK307
CisKKy8qKgorICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2Vk
IHdoZW4gaXQgaXMga25vd24gd2l0aAorICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90Kiog
aW4gYSBET00gdHJhbnNhY3Rpb24uCisgKgorICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3
aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZQorICogY29tcG9uZW50
J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuCisgKgor
ICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3
aWxsIGludm9rZQorICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBk
YXRlYC4KKyAqCisgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHVw
ZGF0ZSBpcyBjb21wbGV0ZS4KKyAqIEBmaW5hbAorICogQHByb3RlY3RlZAorICovCitSZWFjdENv
bXBvbmVudC5wcm90b3R5cGUuZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHsKKyAg
dGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzKTsKKyAgaWYgKGNhbGxiYWNrKSB7
CisgICAgdGhpcy51cGRhdGVyLmVucXVldWVDYWxsYmFjayh0aGlzLCBjYWxsYmFjaywgJ2ZvcmNl
VXBkYXRlJyk7CisgIH0KK307CisKKy8qKgorICogRGVwcmVjYXRlZCBBUElzLiBUaGVzZSBBUElz
IHVzZWQgdG8gZXhpc3Qgb24gY2xhc3NpYyBSZWFjdCBjbGFzc2VzIGJ1dCBzaW5jZQorICogd2Ug
d291bGQgbGlrZSB0byBkZXByZWNhdGUgdGhlbSwgd2UncmUgbm90IGdvaW5nIHRvIG1vdmUgdGhl
bSBvdmVyIHRvIHRoaXMKKyAqIG1vZGVybiBiYXNlIGNsYXNzLiBJbnN0ZWFkLCB3ZSBkZWZpbmUg
YSBnZXR0ZXIgdGhhdCB3YXJucyBpZiBpdCdzIGFjY2Vzc2VkLgorICovCitpZiAoImRldmVsb3Bt
ZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgIHZhciBkZXByZWNhdGVkQVBJcyA9IHsKKyAgICBp
c01vdW50ZWQ6IFsnaXNNb3VudGVkJywgJ0luc3RlYWQsIG1ha2Ugc3VyZSB0byBjbGVhbiB1cCBz
dWJzY3JpcHRpb25zIGFuZCBwZW5kaW5nIHJlcXVlc3RzIGluICcgKyAnY29tcG9uZW50V2lsbFVu
bW91bnQgdG8gcHJldmVudCBtZW1vcnkgbGVha3MuJ10sCisgICAgcmVwbGFjZVN0YXRlOiBbJ3Jl
cGxhY2VTdGF0ZScsICdSZWZhY3RvciB5b3VyIGNvZGUgdG8gdXNlIHNldFN0YXRlIGluc3RlYWQg
KHNlZSAnICsgJ2h0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMzIzNiku
J10KKyAgfTsKKyAgdmFyIGRlZmluZURlcHJlY2F0aW9uV2FybmluZyA9IGZ1bmN0aW9uIChtZXRo
b2ROYW1lLCBpbmZvKSB7CisgICAgaWYgKGNhbkRlZmluZVByb3BlcnR5KSB7CisgICAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoUmVhY3RDb21wb25lbnQucHJvdG90eXBlLCBtZXRob2ROYW1lLCB7
CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICJkZXZlbG9wbWVudCIgIT09
ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICclcyguLi4pIGlzIGRlcHJlY2F0ZWQgaW4g
cGxhaW4gSmF2YVNjcmlwdCBSZWFjdCBjbGFzc2VzLiAlcycsIGluZm9bMF0sIGluZm9bMV0pIDog
dm9pZCAwOworICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgICAgIH0KKyAgICAgIH0p
OworICAgIH0KKyAgfTsKKyAgZm9yICh2YXIgZm5OYW1lIGluIGRlcHJlY2F0ZWRBUElzKSB7Cisg
ICAgaWYgKGRlcHJlY2F0ZWRBUElzLmhhc093blByb3BlcnR5KGZuTmFtZSkpIHsKKyAgICAgIGRl
ZmluZURlcHJlY2F0aW9uV2FybmluZyhmbk5hbWUsIGRlcHJlY2F0ZWRBUElzW2ZuTmFtZV0pOwor
ICAgIH0KKyAgfQorfQorCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q29tcG9uZW50OworfSx7IjEz
IjoxMywiMjAiOjIwLCIyNSI6MjUsIjI4IjoyOCwiMjkiOjI5LCIzMCI6MzB9XSw3OltmdW5jdGlv
bihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTYtcHJlc2Vu
dCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBz
b3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQg
aW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291
cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJl
IGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAq
IAorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIF9wcm9kSW52YXJpYW50ID0gX2RlcmVxXygy
NSk7CisKK3ZhciBSZWFjdEN1cnJlbnRPd25lciA9IF9kZXJlcV8oOCk7CisKK3ZhciBpbnZhcmlh
bnQgPSBfZGVyZXFfKDI5KTsKK3ZhciB3YXJuaW5nID0gX2RlcmVxXygzMCk7CisKK2Z1bmN0aW9u
IGlzTmF0aXZlKGZuKSB7CisgIC8vIEJhc2VkIG9uIGlzTmF0aXZlKCkgZnJvbSBMb2Rhc2gKKyAg
dmFyIGZ1bmNUb1N0cmluZyA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZzsKKyAgdmFyIGhh
c093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTsKKyAgdmFyIHJl
SXNOYXRpdmUgPSBSZWdFeHAoJ14nICsgZnVuY1RvU3RyaW5nCisgIC8vIFRha2UgYW4gZXhhbXBs
ZSBuYXRpdmUgZnVuY3Rpb24gc291cmNlIGZvciBjb21wYXJpc29uCisgIC5jYWxsKGhhc093blBy
b3BlcnR5KQorICAvLyBTdHJpcCByZWdleCBjaGFyYWN0ZXJzIHNvIHdlIGNhbiB1c2UgaXQgZm9y
IHJlZ2V4CisgIC5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywgJ1xcJCYnKQorICAvLyBS
ZW1vdmUgaGFzT3duUHJvcGVydHkgZnJvbSB0aGUgdGVtcGxhdGUgdG8gbWFrZSBpdCBnZW5lcmlj
CisgIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAu
Kz8oPz1cXFxdKS9nLCAnJDEuKj8nKSArICckJyk7CisgIHRyeSB7CisgICAgdmFyIHNvdXJjZSA9
IGZ1bmNUb1N0cmluZy5jYWxsKGZuKTsKKyAgICByZXR1cm4gcmVJc05hdGl2ZS50ZXN0KHNvdXJj
ZSk7CisgIH0gY2F0Y2ggKGVycikgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorfQorCit2YXIg
Y2FuVXNlQ29sbGVjdGlvbnMgPQorLy8gQXJyYXkuZnJvbQordHlwZW9mIEFycmF5LmZyb20gPT09
ICdmdW5jdGlvbicgJiYKKy8vIE1hcAordHlwZW9mIE1hcCA9PT0gJ2Z1bmN0aW9uJyAmJiBpc05h
dGl2ZShNYXApICYmCisvLyBNYXAucHJvdG90eXBlLmtleXMKK01hcC5wcm90b3R5cGUgIT0gbnVs
bCAmJiB0eXBlb2YgTWFwLnByb3RvdHlwZS5rZXlzID09PSAnZnVuY3Rpb24nICYmIGlzTmF0aXZl
KE1hcC5wcm90b3R5cGUua2V5cykgJiYKKy8vIFNldAordHlwZW9mIFNldCA9PT0gJ2Z1bmN0aW9u
JyAmJiBpc05hdGl2ZShTZXQpICYmCisvLyBTZXQucHJvdG90eXBlLmtleXMKK1NldC5wcm90b3R5
cGUgIT0gbnVsbCAmJiB0eXBlb2YgU2V0LnByb3RvdHlwZS5rZXlzID09PSAnZnVuY3Rpb24nICYm
IGlzTmF0aXZlKFNldC5wcm90b3R5cGUua2V5cyk7CisKK3ZhciBzZXRJdGVtOwordmFyIGdldEl0
ZW07Cit2YXIgcmVtb3ZlSXRlbTsKK3ZhciBnZXRJdGVtSURzOwordmFyIGFkZFJvb3Q7Cit2YXIg
cmVtb3ZlUm9vdDsKK3ZhciBnZXRSb290SURzOworCitpZiAoY2FuVXNlQ29sbGVjdGlvbnMpIHsK
KyAgdmFyIGl0ZW1NYXAgPSBuZXcgTWFwKCk7CisgIHZhciByb290SURTZXQgPSBuZXcgU2V0KCk7
CisKKyAgc2V0SXRlbSA9IGZ1bmN0aW9uIChpZCwgaXRlbSkgeworICAgIGl0ZW1NYXAuc2V0KGlk
LCBpdGVtKTsKKyAgfTsKKyAgZ2V0SXRlbSA9IGZ1bmN0aW9uIChpZCkgeworICAgIHJldHVybiBp
dGVtTWFwLmdldChpZCk7CisgIH07CisgIHJlbW92ZUl0ZW0gPSBmdW5jdGlvbiAoaWQpIHsKKyAg
ICBpdGVtTWFwWydkZWxldGUnXShpZCk7CisgIH07CisgIGdldEl0ZW1JRHMgPSBmdW5jdGlvbiAo
KSB7CisgICAgcmV0dXJuIEFycmF5LmZyb20oaXRlbU1hcC5rZXlzKCkpOworICB9OworCisgIGFk
ZFJvb3QgPSBmdW5jdGlvbiAoaWQpIHsKKyAgICByb290SURTZXQuYWRkKGlkKTsKKyAgfTsKKyAg
cmVtb3ZlUm9vdCA9IGZ1bmN0aW9uIChpZCkgeworICAgIHJvb3RJRFNldFsnZGVsZXRlJ10oaWQp
OworICB9OworICBnZXRSb290SURzID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiBBcnJheS5m
cm9tKHJvb3RJRFNldC5rZXlzKCkpOworICB9OworfSBlbHNlIHsKKyAgdmFyIGl0ZW1CeUtleSA9
IHt9OworICB2YXIgcm9vdEJ5S2V5ID0ge307CisKKyAgLy8gVXNlIG5vbi1udW1lcmljIGtleXMg
dG8gcHJldmVudCBWOCBwZXJmb3JtYW5jZSBpc3N1ZXM6CisgIC8vIGh0dHBzOi8vZ2l0aHViLmNv
bS9mYWNlYm9vay9yZWFjdC9wdWxsLzcyMzIKKyAgdmFyIGdldEtleUZyb21JRCA9IGZ1bmN0aW9u
IChpZCkgeworICAgIHJldHVybiAnLicgKyBpZDsKKyAgfTsKKyAgdmFyIGdldElERnJvbUtleSA9
IGZ1bmN0aW9uIChrZXkpIHsKKyAgICByZXR1cm4gcGFyc2VJbnQoa2V5LnN1YnN0cigxKSwgMTAp
OworICB9OworCisgIHNldEl0ZW0gPSBmdW5jdGlvbiAoaWQsIGl0ZW0pIHsKKyAgICB2YXIga2V5
ID0gZ2V0S2V5RnJvbUlEKGlkKTsKKyAgICBpdGVtQnlLZXlba2V5XSA9IGl0ZW07CisgIH07Cisg
IGdldEl0ZW0gPSBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIga2V5ID0gZ2V0S2V5RnJvbUlEKGlk
KTsKKyAgICByZXR1cm4gaXRlbUJ5S2V5W2tleV07CisgIH07CisgIHJlbW92ZUl0ZW0gPSBmdW5j
dGlvbiAoaWQpIHsKKyAgICB2YXIga2V5ID0gZ2V0S2V5RnJvbUlEKGlkKTsKKyAgICBkZWxldGUg
aXRlbUJ5S2V5W2tleV07CisgIH07CisgIGdldEl0ZW1JRHMgPSBmdW5jdGlvbiAoKSB7CisgICAg
cmV0dXJuIE9iamVjdC5rZXlzKGl0ZW1CeUtleSkubWFwKGdldElERnJvbUtleSk7CisgIH07CisK
KyAgYWRkUm9vdCA9IGZ1bmN0aW9uIChpZCkgeworICAgIHZhciBrZXkgPSBnZXRLZXlGcm9tSUQo
aWQpOworICAgIHJvb3RCeUtleVtrZXldID0gdHJ1ZTsKKyAgfTsKKyAgcmVtb3ZlUm9vdCA9IGZ1
bmN0aW9uIChpZCkgeworICAgIHZhciBrZXkgPSBnZXRLZXlGcm9tSUQoaWQpOworICAgIGRlbGV0
ZSByb290QnlLZXlba2V5XTsKKyAgfTsKKyAgZ2V0Um9vdElEcyA9IGZ1bmN0aW9uICgpIHsKKyAg
ICByZXR1cm4gT2JqZWN0LmtleXMocm9vdEJ5S2V5KS5tYXAoZ2V0SURGcm9tS2V5KTsKKyAgfTsK
K30KKwordmFyIHVubW91bnRlZElEcyA9IFtdOworCitmdW5jdGlvbiBwdXJnZURlZXAoaWQpIHsK
KyAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTsKKyAgaWYgKGl0ZW0pIHsKKyAgICB2YXIgY2hpbGRJ
RHMgPSBpdGVtLmNoaWxkSURzOworCisgICAgcmVtb3ZlSXRlbShpZCk7CisgICAgY2hpbGRJRHMu
Zm9yRWFjaChwdXJnZURlZXApOworICB9Cit9CisKK2Z1bmN0aW9uIGRlc2NyaWJlQ29tcG9uZW50
RnJhbWUobmFtZSwgc291cmNlLCBvd25lck5hbWUpIHsKKyAgcmV0dXJuICdcbiAgICBpbiAnICsg
KG5hbWUgfHwgJ1Vua25vd24nKSArIChzb3VyY2UgPyAnIChhdCAnICsgc291cmNlLmZpbGVOYW1l
LnJlcGxhY2UoL14uKltcXFwvXS8sICcnKSArICc6JyArIHNvdXJjZS5saW5lTnVtYmVyICsgJykn
IDogb3duZXJOYW1lID8gJyAoY3JlYXRlZCBieSAnICsgb3duZXJOYW1lICsgJyknIDogJycpOwor
fQorCitmdW5jdGlvbiBnZXREaXNwbGF5TmFtZShlbGVtZW50KSB7CisgIGlmIChlbGVtZW50ID09
IG51bGwpIHsKKyAgICByZXR1cm4gJyNlbXB0eSc7CisgIH0gZWxzZSBpZiAodHlwZW9mIGVsZW1l
bnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBlbGVtZW50ID09PSAnbnVtYmVyJykgeworICAgIHJl
dHVybiAnI3RleHQnOworICB9IGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50LnR5cGUgPT09ICdzdHJp
bmcnKSB7CisgICAgcmV0dXJuIGVsZW1lbnQudHlwZTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4g
ZWxlbWVudC50eXBlLmRpc3BsYXlOYW1lIHx8IGVsZW1lbnQudHlwZS5uYW1lIHx8ICdVbmtub3du
JzsKKyAgfQorfQorCitmdW5jdGlvbiBkZXNjcmliZUlEKGlkKSB7CisgIHZhciBuYW1lID0gUmVh
Y3RDb21wb25lbnRUcmVlSG9vay5nZXREaXNwbGF5TmFtZShpZCk7CisgIHZhciBlbGVtZW50ID0g
UmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRFbGVtZW50KGlkKTsKKyAgdmFyIG93bmVySUQgPSBS
ZWFjdENvbXBvbmVudFRyZWVIb29rLmdldE93bmVySUQoaWQpOworICB2YXIgb3duZXJOYW1lOwor
ICBpZiAob3duZXJJRCkgeworICAgIG93bmVyTmFtZSA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2su
Z2V0RGlzcGxheU5hbWUob3duZXJJRCk7CisgIH0KKyAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1
Y3Rpb24nID8gd2FybmluZyhlbGVtZW50LCAnUmVhY3RDb21wb25lbnRUcmVlSG9vazogTWlzc2lu
ZyBSZWFjdCBlbGVtZW50IGZvciBkZWJ1Z0lEICVzIHdoZW4gJyArICdidWlsZGluZyBzdGFjaycs
IGlkKSA6IHZvaWQgMDsKKyAgcmV0dXJuIGRlc2NyaWJlQ29tcG9uZW50RnJhbWUobmFtZSwgZWxl
bWVudCAmJiBlbGVtZW50Ll9zb3VyY2UsIG93bmVyTmFtZSk7Cit9CisKK3ZhciBSZWFjdENvbXBv
bmVudFRyZWVIb29rID0geworICBvblNldENoaWxkcmVuOiBmdW5jdGlvbiAoaWQsIG5leHRDaGls
ZElEcykgeworICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7CisgICAgIWl0ZW0gPyAiZGV2ZWxv
cG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdJdGVtIG11c3QgaGF2
ZSBiZWVuIHNldCcpIDogX3Byb2RJbnZhcmlhbnQoJzE0NCcpIDogdm9pZCAwOworICAgIGl0ZW0u
Y2hpbGRJRHMgPSBuZXh0Q2hpbGRJRHM7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5leHRD
aGlsZElEcy5sZW5ndGg7IGkrKykgeworICAgICAgdmFyIG5leHRDaGlsZElEID0gbmV4dENoaWxk
SURzW2ldOworICAgICAgdmFyIG5leHRDaGlsZCA9IGdldEl0ZW0obmV4dENoaWxkSUQpOworICAg
ICAgIW5leHRDaGlsZCA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFu
dChmYWxzZSwgJ0V4cGVjdGVkIGhvb2sgZXZlbnRzIHRvIGZpcmUgZm9yIHRoZSBjaGlsZCBiZWZv
cmUgaXRzIHBhcmVudCBpbmNsdWRlcyBpdCBpbiBvblNldENoaWxkcmVuKCkuJykgOiBfcHJvZElu
dmFyaWFudCgnMTQwJykgOiB2b2lkIDA7CisgICAgICAhKG5leHRDaGlsZC5jaGlsZElEcyAhPSBu
dWxsIHx8IHR5cGVvZiBuZXh0Q2hpbGQuZWxlbWVudCAhPT0gJ29iamVjdCcgfHwgbmV4dENoaWxk
LmVsZW1lbnQgPT0gbnVsbCkgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZh
cmlhbnQoZmFsc2UsICdFeHBlY3RlZCBvblNldENoaWxkcmVuKCkgdG8gZmlyZSBmb3IgYSBjb250
YWluZXIgY2hpbGQgYmVmb3JlIGl0cyBwYXJlbnQgaW5jbHVkZXMgaXQgaW4gb25TZXRDaGlsZHJl
bigpLicpIDogX3Byb2RJbnZhcmlhbnQoJzE0MScpIDogdm9pZCAwOworICAgICAgIW5leHRDaGls
ZC5pc01vdW50ZWQgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQo
ZmFsc2UsICdFeHBlY3RlZCBvbk1vdW50Q29tcG9uZW50KCkgdG8gZmlyZSBmb3IgdGhlIGNoaWxk
IGJlZm9yZSBpdHMgcGFyZW50IGluY2x1ZGVzIGl0IGluIG9uU2V0Q2hpbGRyZW4oKS4nKSA6IF9w
cm9kSW52YXJpYW50KCc3MScpIDogdm9pZCAwOworICAgICAgaWYgKG5leHRDaGlsZC5wYXJlbnRJ
RCA9PSBudWxsKSB7CisgICAgICAgIG5leHRDaGlsZC5wYXJlbnRJRCA9IGlkOworICAgICAgICAv
LyBUT0RPOiBUaGlzIHNob3VsZG4ndCBiZSBuZWNlc3NhcnkgYnV0IG1vdW50aW5nIGEgbmV3IHJv
b3QgZHVyaW5nIGluCisgICAgICAgIC8vIGNvbXBvbmVudFdpbGxNb3VudCBjdXJyZW50bHkgY2F1
c2VzIG5vdC15ZXQtbW91bnRlZCBjb21wb25lbnRzIHRvCisgICAgICAgIC8vIGJlIHB1cmdlZCBm
cm9tIG91ciB0cmVlIGRhdGEgc28gdGhlaXIgcGFyZW50IGlkIGlzIG1pc3NpbmcuCisgICAgICB9
CisgICAgICAhKG5leHRDaGlsZC5wYXJlbnRJRCA9PT0gaWQpID8gImRldmVsb3BtZW50IiAhPT0g
J3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnRXhwZWN0ZWQgb25CZWZvcmVNb3VudENv
bXBvbmVudCgpIHBhcmVudCBhbmQgb25TZXRDaGlsZHJlbigpIHRvIGJlIGNvbnNpc3RlbnQgKCVz
IGhhcyBwYXJlbnRzICVzIGFuZCAlcykuJywgbmV4dENoaWxkSUQsIG5leHRDaGlsZC5wYXJlbnRJ
RCwgaWQpIDogX3Byb2RJbnZhcmlhbnQoJzE0MicsIG5leHRDaGlsZElELCBuZXh0Q2hpbGQucGFy
ZW50SUQsIGlkKSA6IHZvaWQgMDsKKyAgICB9CisgIH0sCisgIG9uQmVmb3JlTW91bnRDb21wb25l
bnQ6IGZ1bmN0aW9uIChpZCwgZWxlbWVudCwgcGFyZW50SUQpIHsKKyAgICB2YXIgaXRlbSA9IHsK
KyAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsCisgICAgICBwYXJlbnRJRDogcGFyZW50SUQsCisgICAg
ICB0ZXh0OiBudWxsLAorICAgICAgY2hpbGRJRHM6IFtdLAorICAgICAgaXNNb3VudGVkOiBmYWxz
ZSwKKyAgICAgIHVwZGF0ZUNvdW50OiAwCisgICAgfTsKKyAgICBzZXRJdGVtKGlkLCBpdGVtKTsK
KyAgfSwKKyAgb25CZWZvcmVVcGRhdGVDb21wb25lbnQ6IGZ1bmN0aW9uIChpZCwgZWxlbWVudCkg
eworICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7CisgICAgaWYgKCFpdGVtIHx8ICFpdGVtLmlz
TW91bnRlZCkgeworICAgICAgLy8gV2UgbWF5IGVuZCB1cCBoZXJlIGFzIGEgcmVzdWx0IG9mIHNl
dFN0YXRlKCkgaW4gY29tcG9uZW50V2lsbFVubW91bnQoKS4KKyAgICAgIC8vIEluIHRoaXMgY2Fz
ZSwgaWdub3JlIHRoZSBlbGVtZW50LgorICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpdGVtLmVs
ZW1lbnQgPSBlbGVtZW50OworICB9LAorICBvbk1vdW50Q29tcG9uZW50OiBmdW5jdGlvbiAoaWQp
IHsKKyAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpOworICAgICFpdGVtID8gImRldmVsb3BtZW50
IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnSXRlbSBtdXN0IGhhdmUgYmVl
biBzZXQnKSA6IF9wcm9kSW52YXJpYW50KCcxNDQnKSA6IHZvaWQgMDsKKyAgICBpdGVtLmlzTW91
bnRlZCA9IHRydWU7CisgICAgdmFyIGlzUm9vdCA9IGl0ZW0ucGFyZW50SUQgPT09IDA7CisgICAg
aWYgKGlzUm9vdCkgeworICAgICAgYWRkUm9vdChpZCk7CisgICAgfQorICB9LAorICBvblVwZGF0
ZUNvbXBvbmVudDogZnVuY3Rpb24gKGlkKSB7CisgICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTsK
KyAgICBpZiAoIWl0ZW0gfHwgIWl0ZW0uaXNNb3VudGVkKSB7CisgICAgICAvLyBXZSBtYXkgZW5k
IHVwIGhlcmUgYXMgYSByZXN1bHQgb2Ygc2V0U3RhdGUoKSBpbiBjb21wb25lbnRXaWxsVW5tb3Vu
dCgpLgorICAgICAgLy8gSW4gdGhpcyBjYXNlLCBpZ25vcmUgdGhlIGVsZW1lbnQuCisgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGl0ZW0udXBkYXRlQ291bnQrKzsKKyAgfSwKKyAgb25Vbm1vdW50
Q29tcG9uZW50OiBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpOwor
ICAgIGlmIChpdGVtKSB7CisgICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIGl0IGV4aXN0cy4K
KyAgICAgIC8vIGBpdGVtYCBtaWdodCBub3QgZXhpc3QgaWYgaXQgaXMgaW5zaWRlIGFuIGVycm9y
IGJvdW5kYXJ5LCBhbmQgYSBzaWJsaW5nCisgICAgICAvLyBlcnJvciBib3VuZGFyeSBjaGlsZCB0
aHJldyB3aGlsZSBtb3VudGluZy4gVGhlbiB0aGlzIGluc3RhbmNlIG5ldmVyCisgICAgICAvLyBn
b3QgYSBjaGFuY2UgdG8gbW91bnQsIGJ1dCBpdCBzdGlsbCBnZXRzIGFuIHVubW91bnRpbmcgZXZl
bnQgZHVyaW5nCisgICAgICAvLyB0aGUgZXJyb3IgYm91bmRhcnkgY2xlYW51cC4KKyAgICAgIGl0
ZW0uaXNNb3VudGVkID0gZmFsc2U7CisgICAgICB2YXIgaXNSb290ID0gaXRlbS5wYXJlbnRJRCA9
PT0gMDsKKyAgICAgIGlmIChpc1Jvb3QpIHsKKyAgICAgICAgcmVtb3ZlUm9vdChpZCk7CisgICAg
ICB9CisgICAgfQorICAgIHVubW91bnRlZElEcy5wdXNoKGlkKTsKKyAgfSwKKyAgcHVyZ2VVbm1v
dW50ZWRDb21wb25lbnRzOiBmdW5jdGlvbiAoKSB7CisgICAgaWYgKFJlYWN0Q29tcG9uZW50VHJl
ZUhvb2suX3ByZXZlbnRQdXJnaW5nKSB7CisgICAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIGZv
ciB0ZXN0aW5nLgorICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgdW5tb3VudGVkSURzLmxlbmd0aDsgaSsrKSB7CisgICAgICB2YXIgaWQgPSB1bm1vdW50ZWRJ
RHNbaV07CisgICAgICBwdXJnZURlZXAoaWQpOworICAgIH0KKyAgICB1bm1vdW50ZWRJRHMubGVu
Z3RoID0gMDsKKyAgfSwKKyAgaXNNb3VudGVkOiBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIgaXRl
bSA9IGdldEl0ZW0oaWQpOworICAgIHJldHVybiBpdGVtID8gaXRlbS5pc01vdW50ZWQgOiBmYWxz
ZTsKKyAgfSwKKyAgZ2V0Q3VycmVudFN0YWNrQWRkZW5kdW06IGZ1bmN0aW9uICh0b3BFbGVtZW50
KSB7CisgICAgdmFyIGluZm8gPSAnJzsKKyAgICBpZiAodG9wRWxlbWVudCkgeworICAgICAgdmFy
IG5hbWUgPSBnZXREaXNwbGF5TmFtZSh0b3BFbGVtZW50KTsKKyAgICAgIHZhciBvd25lciA9IHRv
cEVsZW1lbnQuX293bmVyOworICAgICAgaW5mbyArPSBkZXNjcmliZUNvbXBvbmVudEZyYW1lKG5h
bWUsIHRvcEVsZW1lbnQuX3NvdXJjZSwgb3duZXIgJiYgb3duZXIuZ2V0TmFtZSgpKTsKKyAgICB9
CisKKyAgICB2YXIgY3VycmVudE93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDsKKyAg
ICB2YXIgaWQgPSBjdXJyZW50T3duZXIgJiYgY3VycmVudE93bmVyLl9kZWJ1Z0lEOworCisgICAg
aW5mbyArPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldFN0YWNrQWRkZW5kdW1CeUlEKGlkKTsK
KyAgICByZXR1cm4gaW5mbzsKKyAgfSwKKyAgZ2V0U3RhY2tBZGRlbmR1bUJ5SUQ6IGZ1bmN0aW9u
IChpZCkgeworICAgIHZhciBpbmZvID0gJyc7CisgICAgd2hpbGUgKGlkKSB7CisgICAgICBpbmZv
ICs9IGRlc2NyaWJlSUQoaWQpOworICAgICAgaWQgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdl
dFBhcmVudElEKGlkKTsKKyAgICB9CisgICAgcmV0dXJuIGluZm87CisgIH0sCisgIGdldENoaWxk
SURzOiBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpOworICAgIHJl
dHVybiBpdGVtID8gaXRlbS5jaGlsZElEcyA6IFtdOworICB9LAorICBnZXREaXNwbGF5TmFtZTog
ZnVuY3Rpb24gKGlkKSB7CisgICAgdmFyIGVsZW1lbnQgPSBSZWFjdENvbXBvbmVudFRyZWVIb29r
LmdldEVsZW1lbnQoaWQpOworICAgIGlmICghZWxlbWVudCkgeworICAgICAgcmV0dXJuIG51bGw7
CisgICAgfQorICAgIHJldHVybiBnZXREaXNwbGF5TmFtZShlbGVtZW50KTsKKyAgfSwKKyAgZ2V0
RWxlbWVudDogZnVuY3Rpb24gKGlkKSB7CisgICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTsKKyAg
ICByZXR1cm4gaXRlbSA/IGl0ZW0uZWxlbWVudCA6IG51bGw7CisgIH0sCisgIGdldE93bmVySUQ6
IGZ1bmN0aW9uIChpZCkgeworICAgIHZhciBlbGVtZW50ID0gUmVhY3RDb21wb25lbnRUcmVlSG9v
ay5nZXRFbGVtZW50KGlkKTsKKyAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQuX293bmVyKSB7
CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0dXJuIGVsZW1lbnQuX293bmVyLl9k
ZWJ1Z0lEOworICB9LAorICBnZXRQYXJlbnRJRDogZnVuY3Rpb24gKGlkKSB7CisgICAgdmFyIGl0
ZW0gPSBnZXRJdGVtKGlkKTsKKyAgICByZXR1cm4gaXRlbSA/IGl0ZW0ucGFyZW50SUQgOiBudWxs
OworICB9LAorICBnZXRTb3VyY2U6IGZ1bmN0aW9uIChpZCkgeworICAgIHZhciBpdGVtID0gZ2V0
SXRlbShpZCk7CisgICAgdmFyIGVsZW1lbnQgPSBpdGVtID8gaXRlbS5lbGVtZW50IDogbnVsbDsK
KyAgICB2YXIgc291cmNlID0gZWxlbWVudCAhPSBudWxsID8gZWxlbWVudC5fc291cmNlIDogbnVs
bDsKKyAgICByZXR1cm4gc291cmNlOworICB9LAorICBnZXRUZXh0OiBmdW5jdGlvbiAoaWQpIHsK
KyAgICB2YXIgZWxlbWVudCA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0RWxlbWVudChpZCk7
CisgICAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJykgeworICAgICAgcmV0dXJuIGVs
ZW1lbnQ7CisgICAgfSBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ251bWJlcicpIHsKKyAg
ICAgIHJldHVybiAnJyArIGVsZW1lbnQ7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBudWxs
OworICAgIH0KKyAgfSwKKyAgZ2V0VXBkYXRlQ291bnQ6IGZ1bmN0aW9uIChpZCkgeworICAgIHZh
ciBpdGVtID0gZ2V0SXRlbShpZCk7CisgICAgcmV0dXJuIGl0ZW0gPyBpdGVtLnVwZGF0ZUNvdW50
IDogMDsKKyAgfSwKKworCisgIGdldFJvb3RJRHM6IGdldFJvb3RJRHMsCisgIGdldFJlZ2lzdGVy
ZWRJRHM6IGdldEl0ZW1JRHMKK307CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RDb21wb25lbnRU
cmVlSG9vazsKK30seyIyNSI6MjUsIjI5IjoyOSwiMzAiOjMwLCI4Ijo4fV0sODpbZnVuY3Rpb24o
X2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQs
IEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291
cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGlu
IHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJj
ZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBm
b3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKiAK
KyAqLworCisndXNlIHN0cmljdCc7CisKKy8qKgorICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJl
bnQgb3duZXIuCisgKgorICogVGhlIGN1cnJlbnQgb3duZXIgaXMgdGhlIGNvbXBvbmVudCB3aG8g
c2hvdWxkIG93biBhbnkgY29tcG9uZW50cyB0aGF0IGFyZQorICogY3VycmVudGx5IGJlaW5nIGNv
bnN0cnVjdGVkLgorICovCit2YXIgUmVhY3RDdXJyZW50T3duZXIgPSB7CisKKyAgLyoqCisgICAq
IEBpbnRlcm5hbAorICAgKiBAdHlwZSB7UmVhY3RDb21wb25lbnR9CisgICAqLworICBjdXJyZW50
OiBudWxsCisKK307CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RDdXJyZW50T3duZXI7Cit9LHt9
XSw5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0
IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxp
Y2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5
IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCBy
aWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0
b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBSZWFjdEVsZW1lbnQgPSBfZGVy
ZXFfKDEwKTsKKworLyoqCisgKiBDcmVhdGUgYSBmYWN0b3J5IHRoYXQgY3JlYXRlcyBIVE1MIHRh
ZyBlbGVtZW50cy4KKyAqCisgKiBAcHJpdmF0ZQorICovCit2YXIgY3JlYXRlRE9NRmFjdG9yeSA9
IFJlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5OworaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9k
dWN0aW9uJykgeworICB2YXIgUmVhY3RFbGVtZW50VmFsaWRhdG9yID0gX2RlcmVxXygxMik7Cisg
IGNyZWF0ZURPTUZhY3RvcnkgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY3JlYXRlRmFjdG9yeTsK
K30KKworLyoqCisgKiBDcmVhdGVzIGEgbWFwcGluZyBmcm9tIHN1cHBvcnRlZCBIVE1MIHRhZ3Mg
dG8gYFJlYWN0RE9NQ29tcG9uZW50YCBjbGFzc2VzLgorICogVGhpcyBpcyBhbHNvIGFjY2Vzc2li
bGUgdmlhIGBSZWFjdC5ET01gLgorICoKKyAqIEBwdWJsaWMKKyAqLwordmFyIFJlYWN0RE9NRmFj
dG9yaWVzID0geworICBhOiBjcmVhdGVET01GYWN0b3J5KCdhJyksCisgIGFiYnI6IGNyZWF0ZURP
TUZhY3RvcnkoJ2FiYnInKSwKKyAgYWRkcmVzczogY3JlYXRlRE9NRmFjdG9yeSgnYWRkcmVzcycp
LAorICBhcmVhOiBjcmVhdGVET01GYWN0b3J5KCdhcmVhJyksCisgIGFydGljbGU6IGNyZWF0ZURP
TUZhY3RvcnkoJ2FydGljbGUnKSwKKyAgYXNpZGU6IGNyZWF0ZURPTUZhY3RvcnkoJ2FzaWRlJyks
CisgIGF1ZGlvOiBjcmVhdGVET01GYWN0b3J5KCdhdWRpbycpLAorICBiOiBjcmVhdGVET01GYWN0
b3J5KCdiJyksCisgIGJhc2U6IGNyZWF0ZURPTUZhY3RvcnkoJ2Jhc2UnKSwKKyAgYmRpOiBjcmVh
dGVET01GYWN0b3J5KCdiZGknKSwKKyAgYmRvOiBjcmVhdGVET01GYWN0b3J5KCdiZG8nKSwKKyAg
YmlnOiBjcmVhdGVET01GYWN0b3J5KCdiaWcnKSwKKyAgYmxvY2txdW90ZTogY3JlYXRlRE9NRmFj
dG9yeSgnYmxvY2txdW90ZScpLAorICBib2R5OiBjcmVhdGVET01GYWN0b3J5KCdib2R5JyksCisg
IGJyOiBjcmVhdGVET01GYWN0b3J5KCdicicpLAorICBidXR0b246IGNyZWF0ZURPTUZhY3Rvcnko
J2J1dHRvbicpLAorICBjYW52YXM6IGNyZWF0ZURPTUZhY3RvcnkoJ2NhbnZhcycpLAorICBjYXB0
aW9uOiBjcmVhdGVET01GYWN0b3J5KCdjYXB0aW9uJyksCisgIGNpdGU6IGNyZWF0ZURPTUZhY3Rv
cnkoJ2NpdGUnKSwKKyAgY29kZTogY3JlYXRlRE9NRmFjdG9yeSgnY29kZScpLAorICBjb2w6IGNy
ZWF0ZURPTUZhY3RvcnkoJ2NvbCcpLAorICBjb2xncm91cDogY3JlYXRlRE9NRmFjdG9yeSgnY29s
Z3JvdXAnKSwKKyAgZGF0YTogY3JlYXRlRE9NRmFjdG9yeSgnZGF0YScpLAorICBkYXRhbGlzdDog
Y3JlYXRlRE9NRmFjdG9yeSgnZGF0YWxpc3QnKSwKKyAgZGQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2Rk
JyksCisgIGRlbDogY3JlYXRlRE9NRmFjdG9yeSgnZGVsJyksCisgIGRldGFpbHM6IGNyZWF0ZURP
TUZhY3RvcnkoJ2RldGFpbHMnKSwKKyAgZGZuOiBjcmVhdGVET01GYWN0b3J5KCdkZm4nKSwKKyAg
ZGlhbG9nOiBjcmVhdGVET01GYWN0b3J5KCdkaWFsb2cnKSwKKyAgZGl2OiBjcmVhdGVET01GYWN0
b3J5KCdkaXYnKSwKKyAgZGw6IGNyZWF0ZURPTUZhY3RvcnkoJ2RsJyksCisgIGR0OiBjcmVhdGVE
T01GYWN0b3J5KCdkdCcpLAorICBlbTogY3JlYXRlRE9NRmFjdG9yeSgnZW0nKSwKKyAgZW1iZWQ6
IGNyZWF0ZURPTUZhY3RvcnkoJ2VtYmVkJyksCisgIGZpZWxkc2V0OiBjcmVhdGVET01GYWN0b3J5
KCdmaWVsZHNldCcpLAorICBmaWdjYXB0aW9uOiBjcmVhdGVET01GYWN0b3J5KCdmaWdjYXB0aW9u
JyksCisgIGZpZ3VyZTogY3JlYXRlRE9NRmFjdG9yeSgnZmlndXJlJyksCisgIGZvb3RlcjogY3Jl
YXRlRE9NRmFjdG9yeSgnZm9vdGVyJyksCisgIGZvcm06IGNyZWF0ZURPTUZhY3RvcnkoJ2Zvcm0n
KSwKKyAgaDE6IGNyZWF0ZURPTUZhY3RvcnkoJ2gxJyksCisgIGgyOiBjcmVhdGVET01GYWN0b3J5
KCdoMicpLAorICBoMzogY3JlYXRlRE9NRmFjdG9yeSgnaDMnKSwKKyAgaDQ6IGNyZWF0ZURPTUZh
Y3RvcnkoJ2g0JyksCisgIGg1OiBjcmVhdGVET01GYWN0b3J5KCdoNScpLAorICBoNjogY3JlYXRl
RE9NRmFjdG9yeSgnaDYnKSwKKyAgaGVhZDogY3JlYXRlRE9NRmFjdG9yeSgnaGVhZCcpLAorICBo
ZWFkZXI6IGNyZWF0ZURPTUZhY3RvcnkoJ2hlYWRlcicpLAorICBoZ3JvdXA6IGNyZWF0ZURPTUZh
Y3RvcnkoJ2hncm91cCcpLAorICBocjogY3JlYXRlRE9NRmFjdG9yeSgnaHInKSwKKyAgaHRtbDog
Y3JlYXRlRE9NRmFjdG9yeSgnaHRtbCcpLAorICBpOiBjcmVhdGVET01GYWN0b3J5KCdpJyksCisg
IGlmcmFtZTogY3JlYXRlRE9NRmFjdG9yeSgnaWZyYW1lJyksCisgIGltZzogY3JlYXRlRE9NRmFj
dG9yeSgnaW1nJyksCisgIGlucHV0OiBjcmVhdGVET01GYWN0b3J5KCdpbnB1dCcpLAorICBpbnM6
IGNyZWF0ZURPTUZhY3RvcnkoJ2lucycpLAorICBrYmQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2tiZCcp
LAorICBrZXlnZW46IGNyZWF0ZURPTUZhY3RvcnkoJ2tleWdlbicpLAorICBsYWJlbDogY3JlYXRl
RE9NRmFjdG9yeSgnbGFiZWwnKSwKKyAgbGVnZW5kOiBjcmVhdGVET01GYWN0b3J5KCdsZWdlbmQn
KSwKKyAgbGk6IGNyZWF0ZURPTUZhY3RvcnkoJ2xpJyksCisgIGxpbms6IGNyZWF0ZURPTUZhY3Rv
cnkoJ2xpbmsnKSwKKyAgbWFpbjogY3JlYXRlRE9NRmFjdG9yeSgnbWFpbicpLAorICBtYXA6IGNy
ZWF0ZURPTUZhY3RvcnkoJ21hcCcpLAorICBtYXJrOiBjcmVhdGVET01GYWN0b3J5KCdtYXJrJyks
CisgIG1lbnU6IGNyZWF0ZURPTUZhY3RvcnkoJ21lbnUnKSwKKyAgbWVudWl0ZW06IGNyZWF0ZURP
TUZhY3RvcnkoJ21lbnVpdGVtJyksCisgIG1ldGE6IGNyZWF0ZURPTUZhY3RvcnkoJ21ldGEnKSwK
KyAgbWV0ZXI6IGNyZWF0ZURPTUZhY3RvcnkoJ21ldGVyJyksCisgIG5hdjogY3JlYXRlRE9NRmFj
dG9yeSgnbmF2JyksCisgIG5vc2NyaXB0OiBjcmVhdGVET01GYWN0b3J5KCdub3NjcmlwdCcpLAor
ICBvYmplY3Q6IGNyZWF0ZURPTUZhY3RvcnkoJ29iamVjdCcpLAorICBvbDogY3JlYXRlRE9NRmFj
dG9yeSgnb2wnKSwKKyAgb3B0Z3JvdXA6IGNyZWF0ZURPTUZhY3RvcnkoJ29wdGdyb3VwJyksCisg
IG9wdGlvbjogY3JlYXRlRE9NRmFjdG9yeSgnb3B0aW9uJyksCisgIG91dHB1dDogY3JlYXRlRE9N
RmFjdG9yeSgnb3V0cHV0JyksCisgIHA6IGNyZWF0ZURPTUZhY3RvcnkoJ3AnKSwKKyAgcGFyYW06
IGNyZWF0ZURPTUZhY3RvcnkoJ3BhcmFtJyksCisgIHBpY3R1cmU6IGNyZWF0ZURPTUZhY3Rvcnko
J3BpY3R1cmUnKSwKKyAgcHJlOiBjcmVhdGVET01GYWN0b3J5KCdwcmUnKSwKKyAgcHJvZ3Jlc3M6
IGNyZWF0ZURPTUZhY3RvcnkoJ3Byb2dyZXNzJyksCisgIHE6IGNyZWF0ZURPTUZhY3RvcnkoJ3En
KSwKKyAgcnA6IGNyZWF0ZURPTUZhY3RvcnkoJ3JwJyksCisgIHJ0OiBjcmVhdGVET01GYWN0b3J5
KCdydCcpLAorICBydWJ5OiBjcmVhdGVET01GYWN0b3J5KCdydWJ5JyksCisgIHM6IGNyZWF0ZURP
TUZhY3RvcnkoJ3MnKSwKKyAgc2FtcDogY3JlYXRlRE9NRmFjdG9yeSgnc2FtcCcpLAorICBzY3Jp
cHQ6IGNyZWF0ZURPTUZhY3RvcnkoJ3NjcmlwdCcpLAorICBzZWN0aW9uOiBjcmVhdGVET01GYWN0
b3J5KCdzZWN0aW9uJyksCisgIHNlbGVjdDogY3JlYXRlRE9NRmFjdG9yeSgnc2VsZWN0JyksCisg
IHNtYWxsOiBjcmVhdGVET01GYWN0b3J5KCdzbWFsbCcpLAorICBzb3VyY2U6IGNyZWF0ZURPTUZh
Y3RvcnkoJ3NvdXJjZScpLAorICBzcGFuOiBjcmVhdGVET01GYWN0b3J5KCdzcGFuJyksCisgIHN0
cm9uZzogY3JlYXRlRE9NRmFjdG9yeSgnc3Ryb25nJyksCisgIHN0eWxlOiBjcmVhdGVET01GYWN0
b3J5KCdzdHlsZScpLAorICBzdWI6IGNyZWF0ZURPTUZhY3RvcnkoJ3N1YicpLAorICBzdW1tYXJ5
OiBjcmVhdGVET01GYWN0b3J5KCdzdW1tYXJ5JyksCisgIHN1cDogY3JlYXRlRE9NRmFjdG9yeSgn
c3VwJyksCisgIHRhYmxlOiBjcmVhdGVET01GYWN0b3J5KCd0YWJsZScpLAorICB0Ym9keTogY3Jl
YXRlRE9NRmFjdG9yeSgndGJvZHknKSwKKyAgdGQ6IGNyZWF0ZURPTUZhY3RvcnkoJ3RkJyksCisg
IHRleHRhcmVhOiBjcmVhdGVET01GYWN0b3J5KCd0ZXh0YXJlYScpLAorICB0Zm9vdDogY3JlYXRl
RE9NRmFjdG9yeSgndGZvb3QnKSwKKyAgdGg6IGNyZWF0ZURPTUZhY3RvcnkoJ3RoJyksCisgIHRo
ZWFkOiBjcmVhdGVET01GYWN0b3J5KCd0aGVhZCcpLAorICB0aW1lOiBjcmVhdGVET01GYWN0b3J5
KCd0aW1lJyksCisgIHRpdGxlOiBjcmVhdGVET01GYWN0b3J5KCd0aXRsZScpLAorICB0cjogY3Jl
YXRlRE9NRmFjdG9yeSgndHInKSwKKyAgdHJhY2s6IGNyZWF0ZURPTUZhY3RvcnkoJ3RyYWNrJyks
CisgIHU6IGNyZWF0ZURPTUZhY3RvcnkoJ3UnKSwKKyAgdWw6IGNyZWF0ZURPTUZhY3RvcnkoJ3Vs
JyksCisgICd2YXInOiBjcmVhdGVET01GYWN0b3J5KCd2YXInKSwKKyAgdmlkZW86IGNyZWF0ZURP
TUZhY3RvcnkoJ3ZpZGVvJyksCisgIHdicjogY3JlYXRlRE9NRmFjdG9yeSgnd2JyJyksCisKKyAg
Ly8gU1ZHCisgIGNpcmNsZTogY3JlYXRlRE9NRmFjdG9yeSgnY2lyY2xlJyksCisgIGNsaXBQYXRo
OiBjcmVhdGVET01GYWN0b3J5KCdjbGlwUGF0aCcpLAorICBkZWZzOiBjcmVhdGVET01GYWN0b3J5
KCdkZWZzJyksCisgIGVsbGlwc2U6IGNyZWF0ZURPTUZhY3RvcnkoJ2VsbGlwc2UnKSwKKyAgZzog
Y3JlYXRlRE9NRmFjdG9yeSgnZycpLAorICBpbWFnZTogY3JlYXRlRE9NRmFjdG9yeSgnaW1hZ2Un
KSwKKyAgbGluZTogY3JlYXRlRE9NRmFjdG9yeSgnbGluZScpLAorICBsaW5lYXJHcmFkaWVudDog
Y3JlYXRlRE9NRmFjdG9yeSgnbGluZWFyR3JhZGllbnQnKSwKKyAgbWFzazogY3JlYXRlRE9NRmFj
dG9yeSgnbWFzaycpLAorICBwYXRoOiBjcmVhdGVET01GYWN0b3J5KCdwYXRoJyksCisgIHBhdHRl
cm46IGNyZWF0ZURPTUZhY3RvcnkoJ3BhdHRlcm4nKSwKKyAgcG9seWdvbjogY3JlYXRlRE9NRmFj
dG9yeSgncG9seWdvbicpLAorICBwb2x5bGluZTogY3JlYXRlRE9NRmFjdG9yeSgncG9seWxpbmUn
KSwKKyAgcmFkaWFsR3JhZGllbnQ6IGNyZWF0ZURPTUZhY3RvcnkoJ3JhZGlhbEdyYWRpZW50Jyks
CisgIHJlY3Q6IGNyZWF0ZURPTUZhY3RvcnkoJ3JlY3QnKSwKKyAgc3RvcDogY3JlYXRlRE9NRmFj
dG9yeSgnc3RvcCcpLAorICBzdmc6IGNyZWF0ZURPTUZhY3RvcnkoJ3N2ZycpLAorICB0ZXh0OiBj
cmVhdGVET01GYWN0b3J5KCd0ZXh0JyksCisgIHRzcGFuOiBjcmVhdGVET01GYWN0b3J5KCd0c3Bh
bicpCit9OworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NRmFjdG9yaWVzOworfSx7IjEwIjox
MCwiMTIiOjEyfV0sMTA6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisg
KiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBC
U0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICog
b2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUg
c2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIF9hc3NpZ24g
PSBfZGVyZXFfKDMxKTsKKwordmFyIFJlYWN0Q3VycmVudE93bmVyID0gX2RlcmVxXyg4KTsKKwor
dmFyIHdhcm5pbmcgPSBfZGVyZXFfKDMwKTsKK3ZhciBjYW5EZWZpbmVQcm9wZXJ0eSA9IF9kZXJl
cV8oMjApOwordmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9w
ZXJ0eTsKKwordmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IF9kZXJlcV8oMTEpOworCit2YXIgUkVT
RVJWRURfUFJPUFMgPSB7CisgIGtleTogdHJ1ZSwKKyAgcmVmOiB0cnVlLAorICBfX3NlbGY6IHRy
dWUsCisgIF9fc291cmNlOiB0cnVlCit9OworCit2YXIgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hv
d24sIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duOworCitmdW5jdGlvbiBoYXNWYWxpZFJlZihj
b25maWcpIHsKKyAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgIGlm
IChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ3JlZicpKSB7CisgICAgICB2YXIgZ2V0dGVy
ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdyZWYnKS5nZXQ7Cisg
ICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBjb25maWcucmVmICE9PSB1
bmRlZmluZWQ7Cit9CisKK2Z1bmN0aW9uIGhhc1ZhbGlkS2V5KGNvbmZpZykgeworICBpZiAoImRl
dmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgaWYgKGhhc093blByb3BlcnR5LmNh
bGwoY29uZmlnLCAna2V5JykpIHsKKyAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ2tleScpLmdldDsKKyAgICAgIGlmIChnZXR0ZXIgJiYg
Z2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0K
KyAgICB9CisgIH0KKyAgcmV0dXJuIGNvbmZpZy5rZXkgIT09IHVuZGVmaW5lZDsKK30KKworZnVu
Y3Rpb24gZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7Cisg
IHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkgPSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKCFzcGVj
aWFsUHJvcEtleVdhcm5pbmdTaG93bikgeworICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hv
d24gPSB0cnVlOworICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2Fybmlu
ZyhmYWxzZSwgJyVzOiBga2V5YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdp
bGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVk
IHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50
LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9m
Yi5tZS9yZWFjdC1zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKSA6IHZvaWQgMDsKKyAgICB9
CisgIH07CisgIHdhcm5BYm91dEFjY2Vzc2luZ0tleS5pc1JlYWN0V2FybmluZyA9IHRydWU7Cisg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2tleScsIHsKKyAgICBnZXQ6IHdhcm5BYm91
dEFjY2Vzc2luZ0tleSwKKyAgICBjb25maWd1cmFibGU6IHRydWUKKyAgfSk7Cit9CisKK2Z1bmN0
aW9uIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkgeworICB2
YXIgd2FybkFib3V0QWNjZXNzaW5nUmVmID0gZnVuY3Rpb24gKCkgeworICAgIGlmICghc3BlY2lh
bFByb3BSZWZXYXJuaW5nU2hvd24pIHsKKyAgICAgIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3du
ID0gdHJ1ZTsKKyAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmco
ZmFsc2UsICclczogYHJlZmAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxs
IHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0
byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwg
eW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vZmIu
bWUvcmVhY3Qtc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFtZSkgOiB2b2lkIDA7CisgICAgfQor
ICB9OworICB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlOworICBP
YmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdyZWYnLCB7CisgICAgZ2V0OiB3YXJuQWJvdXRB
Y2Nlc3NpbmdSZWYsCisgICAgY29uZmlndXJhYmxlOiB0cnVlCisgIH0pOworfQorCisvKioKKyAq
IEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSBhIG5ldyBSZWFjdCBlbGVtZW50LiBUaGlzIG5vIGxv
bmdlciBhZGhlcmVzIHRvCisgKiB0aGUgY2xhc3MgcGF0dGVybiwgc28gZG8gbm90IHVzZSBuZXcg
dG8gY2FsbCBpdC4gQWxzbywgbm8gaW5zdGFuY2VvZiBjaGVjaworICogd2lsbCB3b3JrLiBJbnN0
ZWFkIHRlc3QgJCR0eXBlb2YgZmllbGQgYWdhaW5zdCBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50
JykgdG8gY2hlY2sKKyAqIGlmIHNvbWV0aGluZyBpcyBhIFJlYWN0IEVsZW1lbnQuCisgKgorICog
QHBhcmFtIHsqfSB0eXBlCisgKiBAcGFyYW0geyp9IGtleQorICogQHBhcmFtIHtzdHJpbmd8b2Jq
ZWN0fSByZWYKKyAqIEBwYXJhbSB7Kn0gc2VsZiBBICp0ZW1wb3JhcnkqIGhlbHBlciB0byBkZXRl
Y3QgcGxhY2VzIHdoZXJlIGB0aGlzYCBpcworICogZGlmZmVyZW50IGZyb20gdGhlIGBvd25lcmAg
d2hlbiBSZWFjdC5jcmVhdGVFbGVtZW50IGlzIGNhbGxlZCwgc28gdGhhdCB3ZQorICogY2FuIHdh
cm4uIFdlIHdhbnQgdG8gZ2V0IHJpZCBvZiBvd25lciBhbmQgcmVwbGFjZSBzdHJpbmcgYHJlZmBz
IHdpdGggYXJyb3cKKyAqIGZ1bmN0aW9ucywgYW5kIGFzIGxvbmcgYXMgYHRoaXNgIGFuZCBvd25l
ciBhcmUgdGhlIHNhbWUsIHRoZXJlIHdpbGwgYmUgbm8KKyAqIGNoYW5nZSBpbiBiZWhhdmlvci4K
KyAqIEBwYXJhbSB7Kn0gc291cmNlIEFuIGFubm90YXRpb24gb2JqZWN0IChhZGRlZCBieSBhIHRy
YW5zcGlsZXIgb3Igb3RoZXJ3aXNlKQorICogaW5kaWNhdGluZyBmaWxlbmFtZSwgbGluZSBudW1i
ZXIsIGFuZC9vciBvdGhlciBpbmZvcm1hdGlvbi4KKyAqIEBwYXJhbSB7Kn0gb3duZXIKKyAqIEBw
YXJhbSB7Kn0gcHJvcHMKKyAqIEBpbnRlcm5hbAorICovCit2YXIgUmVhY3RFbGVtZW50ID0gZnVu
Y3Rpb24gKHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcykgeworICB2
YXIgZWxlbWVudCA9IHsKKyAgICAvLyBUaGlzIHRhZyBhbGxvdyB1cyB0byB1bmlxdWVseSBpZGVu
dGlmeSB0aGlzIGFzIGEgUmVhY3QgRWxlbWVudAorICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5U
X1RZUEUsCisKKyAgICAvLyBCdWlsdC1pbiBwcm9wZXJ0aWVzIHRoYXQgYmVsb25nIG9uIHRoZSBl
bGVtZW50CisgICAgdHlwZTogdHlwZSwKKyAgICBrZXk6IGtleSwKKyAgICByZWY6IHJlZiwKKyAg
ICBwcm9wczogcHJvcHMsCisKKyAgICAvLyBSZWNvcmQgdGhlIGNvbXBvbmVudCByZXNwb25zaWJs
ZSBmb3IgY3JlYXRpbmcgdGhpcyBlbGVtZW50LgorICAgIF9vd25lcjogb3duZXIKKyAgfTsKKwor
ICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgLy8gVGhlIHZhbGlk
YXRpb24gZmxhZyBpcyBjdXJyZW50bHkgbXV0YXRpdmUuIFdlIHB1dCBpdCBvbgorICAgIC8vIGFu
IGV4dGVybmFsIGJhY2tpbmcgc3RvcmUgc28gdGhhdCB3ZSBjYW4gZnJlZXplIHRoZSB3aG9sZSBv
YmplY3QuCisgICAgLy8gVGhpcyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIFdlYWtNYXAgb25jZSB0
aGV5IGFyZSBpbXBsZW1lbnRlZCBpbgorICAgIC8vIGNvbW1vbmx5IHVzZWQgZGV2ZWxvcG1lbnQg
ZW52aXJvbm1lbnRzLgorICAgIGVsZW1lbnQuX3N0b3JlID0ge307CisKKyAgICAvLyBUbyBtYWtl
IGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2Ug
bWFrZQorICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBv
c3NpYmxlLCB3aGljaCBzaG91bGQKKyAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdl
IHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29yaworICAgIC8vIGlnbm9yZXMgaXQu
CisgICAgaWYgKGNhbkRlZmluZVByb3BlcnR5KSB7CisgICAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7CisgICAgICAgIGNvbmZpZ3VyYWJsZTog
ZmFsc2UsCisgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLAorICAgICAgICB3cml0YWJsZTogdHJ1
ZSwKKyAgICAgICAgdmFsdWU6IGZhbHNlCisgICAgICB9KTsKKyAgICAgIC8vIHNlbGYgYW5kIHNv
dXJjZSBhcmUgREVWIG9ubHkgcHJvcGVydGllcy4KKyAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShlbGVtZW50LCAnX3NlbGYnLCB7CisgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsCisgICAg
ICAgIGVudW1lcmFibGU6IGZhbHNlLAorICAgICAgICB3cml0YWJsZTogZmFsc2UsCisgICAgICAg
IHZhbHVlOiBzZWxmCisgICAgICB9KTsKKyAgICAgIC8vIFR3byBlbGVtZW50cyBjcmVhdGVkIGlu
IHR3byBkaWZmZXJlbnQgcGxhY2VzIHNob3VsZCBiZSBjb25zaWRlcmVkCisgICAgICAvLyBlcXVh
bCBmb3IgdGVzdGluZyBwdXJwb3NlcyBhbmQgdGhlcmVmb3JlIHdlIGhpZGUgaXQgZnJvbSBlbnVt
ZXJhdGlvbi4KKyAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NvdXJjZScs
IHsKKyAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSwKKyAgICAgICAgZW51bWVyYWJsZTogZmFs
c2UsCisgICAgICAgIHdyaXRhYmxlOiBmYWxzZSwKKyAgICAgICAgdmFsdWU6IHNvdXJjZQorICAg
ICAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IGZh
bHNlOworICAgICAgZWxlbWVudC5fc2VsZiA9IHNlbGY7CisgICAgICBlbGVtZW50Ll9zb3VyY2Ug
PSBzb3VyY2U7CisgICAgfQorICAgIGlmIChPYmplY3QuZnJlZXplKSB7CisgICAgICBPYmplY3Qu
ZnJlZXplKGVsZW1lbnQucHJvcHMpOworICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50KTsKKyAg
ICB9CisgIH0KKworICByZXR1cm4gZWxlbWVudDsKK307CisKKy8qKgorICogQ3JlYXRlIGFuZCBy
ZXR1cm4gYSBuZXcgUmVhY3RFbGVtZW50IG9mIHRoZSBnaXZlbiB0eXBlLgorICogU2VlIGh0dHBz
Oi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0
LmNyZWF0ZWVsZW1lbnQKKyAqLworUmVhY3RFbGVtZW50LmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlv
biAodHlwZSwgY29uZmlnLCBjaGlsZHJlbikgeworICB2YXIgcHJvcE5hbWU7CisKKyAgLy8gUmVz
ZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZAorICB2YXIgcHJvcHMgPSB7fTsKKworICB2YXIga2V5
ID0gbnVsbDsKKyAgdmFyIHJlZiA9IG51bGw7CisgIHZhciBzZWxmID0gbnVsbDsKKyAgdmFyIHNv
dXJjZSA9IG51bGw7CisKKyAgaWYgKGNvbmZpZyAhPSBudWxsKSB7CisgICAgaWYgKGhhc1ZhbGlk
UmVmKGNvbmZpZykpIHsKKyAgICAgIHJlZiA9IGNvbmZpZy5yZWY7CisgICAgfQorICAgIGlmICho
YXNWYWxpZEtleShjb25maWcpKSB7CisgICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7CisgICAg
fQorCisgICAgc2VsZiA9IGNvbmZpZy5fX3NlbGYgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25m
aWcuX19zZWxmOworICAgIHNvdXJjZSA9IGNvbmZpZy5fX3NvdXJjZSA9PT0gdW5kZWZpbmVkID8g
bnVsbCA6IGNvbmZpZy5fX3NvdXJjZTsKKyAgICAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBhcmUg
YWRkZWQgdG8gYSBuZXcgcHJvcHMgb2JqZWN0CisgICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcp
IHsKKyAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFS
RVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHsKKyAgICAgICAgcHJvcHNb
cHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICAv
LyBDaGlsZHJlbiBjYW4gYmUgbW9yZSB0aGFuIG9uZSBhcmd1bWVudCwgYW5kIHRob3NlIGFyZSB0
cmFuc2ZlcnJlZCBvbnRvCisgIC8vIHRoZSBuZXdseSBhbGxvY2F0ZWQgcHJvcHMgb2JqZWN0Lgor
ICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjsKKyAgaWYgKGNoaWxk
cmVuTGVuZ3RoID09PSAxKSB7CisgICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZHJlbjsKKyAgfSBl
bHNlIGlmIChjaGlsZHJlbkxlbmd0aCA+IDEpIHsKKyAgICB2YXIgY2hpbGRBcnJheSA9IEFycmF5
KGNoaWxkcmVuTGVuZ3RoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3Ro
OyBpKyspIHsKKyAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdOworICAgIH0K
KyAgICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICBpZiAoT2Jq
ZWN0LmZyZWV6ZSkgeworICAgICAgICBPYmplY3QuZnJlZXplKGNoaWxkQXJyYXkpOworICAgICAg
fQorICAgIH0KKyAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkQXJyYXk7CisgIH0KKworICAvLyBS
ZXNvbHZlIGRlZmF1bHQgcHJvcHMKKyAgaWYgKHR5cGUgJiYgdHlwZS5kZWZhdWx0UHJvcHMpIHsK
KyAgICB2YXIgZGVmYXVsdFByb3BzID0gdHlwZS5kZWZhdWx0UHJvcHM7CisgICAgZm9yIChwcm9w
TmFtZSBpbiBkZWZhdWx0UHJvcHMpIHsKKyAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IHVu
ZGVmaW5lZCkgeworICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5h
bWVdOworICAgICAgfQorICAgIH0KKyAgfQorICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1
Y3Rpb24nKSB7CisgICAgaWYgKGtleSB8fCByZWYpIHsKKyAgICAgIGlmICh0eXBlb2YgcHJvcHMu
JCR0eXBlb2YgPT09ICd1bmRlZmluZWQnIHx8IHByb3BzLiQkdHlwZW9mICE9PSBSRUFDVF9FTEVN
RU5UX1RZUEUpIHsKKyAgICAgICAgdmFyIGRpc3BsYXlOYW1lID0gdHlwZW9mIHR5cGUgPT09ICdm
dW5jdGlvbicgPyB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCAnVW5rbm93bicgOiB0
eXBlOworICAgICAgICBpZiAoa2V5KSB7CisgICAgICAgICAgZGVmaW5lS2V5UHJvcFdhcm5pbmdH
ZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVmKSB7
CisgICAgICAgICAgZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1l
KTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gUmVhY3RFbGVtZW50
KHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQs
IHByb3BzKTsKK307CisKKy8qKgorICogUmV0dXJuIGEgZnVuY3Rpb24gdGhhdCBwcm9kdWNlcyBS
ZWFjdEVsZW1lbnRzIG9mIGEgZ2l2ZW4gdHlwZS4KKyAqIFNlZSBodHRwczovL2ZhY2Vib29rLmdp
dGh1Yi5pby9yZWFjdC9kb2NzL3RvcC1sZXZlbC1hcGkuaHRtbCNyZWFjdC5jcmVhdGVmYWN0b3J5
CisgKi8KK1JlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5ID0gZnVuY3Rpb24gKHR5cGUpIHsKKyAg
dmFyIGZhY3RvcnkgPSBSZWFjdEVsZW1lbnQuY3JlYXRlRWxlbWVudC5iaW5kKG51bGwsIHR5cGUp
OworICAvLyBFeHBvc2UgdGhlIHR5cGUgb24gdGhlIGZhY3RvcnkgYW5kIHRoZSBwcm90b3R5cGUg
c28gdGhhdCBpdCBjYW4gYmUKKyAgLy8gZWFzaWx5IGFjY2Vzc2VkIG9uIGVsZW1lbnRzLiBFLmcu
IGA8Rm9vIC8+LnR5cGUgPT09IEZvb2AuCisgIC8vIFRoaXMgc2hvdWxkIG5vdCBiZSBuYW1lZCBg
Y29uc3RydWN0b3JgIHNpbmNlIHRoaXMgbWF5IG5vdCBiZSB0aGUgZnVuY3Rpb24KKyAgLy8gdGhh
dCBjcmVhdGVkIHRoZSBlbGVtZW50LCBhbmQgaXQgbWF5IG5vdCBldmVuIGJlIGEgY29uc3RydWN0
b3IuCisgIC8vIExlZ2FjeSBob29rIFRPRE86IFdhcm4gaWYgdGhpcyBpcyBhY2Nlc3NlZAorICBm
YWN0b3J5LnR5cGUgPSB0eXBlOworICByZXR1cm4gZmFjdG9yeTsKK307CisKK1JlYWN0RWxlbWVu
dC5jbG9uZUFuZFJlcGxhY2VLZXkgPSBmdW5jdGlvbiAob2xkRWxlbWVudCwgbmV3S2V5KSB7Cisg
IHZhciBuZXdFbGVtZW50ID0gUmVhY3RFbGVtZW50KG9sZEVsZW1lbnQudHlwZSwgbmV3S2V5LCBv
bGRFbGVtZW50LnJlZiwgb2xkRWxlbWVudC5fc2VsZiwgb2xkRWxlbWVudC5fc291cmNlLCBvbGRF
bGVtZW50Ll9vd25lciwgb2xkRWxlbWVudC5wcm9wcyk7CisKKyAgcmV0dXJuIG5ld0VsZW1lbnQ7
Cit9OworCisvKioKKyAqIENsb25lIGFuZCByZXR1cm4gYSBuZXcgUmVhY3RFbGVtZW50IHVzaW5n
IGVsZW1lbnQgYXMgdGhlIHN0YXJ0aW5nIHBvaW50LgorICogU2VlIGh0dHBzOi8vZmFjZWJvb2su
Z2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNsb25lZWxlbWVu
dAorICovCitSZWFjdEVsZW1lbnQuY2xvbmVFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIGNv
bmZpZywgY2hpbGRyZW4pIHsKKyAgdmFyIHByb3BOYW1lOworCisgIC8vIE9yaWdpbmFsIHByb3Bz
IGFyZSBjb3BpZWQKKyAgdmFyIHByb3BzID0gX2Fzc2lnbih7fSwgZWxlbWVudC5wcm9wcyk7CisK
KyAgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZAorICB2YXIga2V5ID0gZWxlbWVudC5r
ZXk7CisgIHZhciByZWYgPSBlbGVtZW50LnJlZjsKKyAgLy8gU2VsZiBpcyBwcmVzZXJ2ZWQgc2lu
Y2UgdGhlIG93bmVyIGlzIHByZXNlcnZlZC4KKyAgdmFyIHNlbGYgPSBlbGVtZW50Ll9zZWxmOwor
ICAvLyBTb3VyY2UgaXMgcHJlc2VydmVkIHNpbmNlIGNsb25lRWxlbWVudCBpcyB1bmxpa2VseSB0
byBiZSB0YXJnZXRlZCBieSBhCisgIC8vIHRyYW5zcGlsZXIsIGFuZCB0aGUgb3JpZ2luYWwgc291
cmNlIGlzIHByb2JhYmx5IGEgYmV0dGVyIGluZGljYXRvciBvZiB0aGUKKyAgLy8gdHJ1ZSBvd25l
ci4KKyAgdmFyIHNvdXJjZSA9IGVsZW1lbnQuX3NvdXJjZTsKKworICAvLyBPd25lciB3aWxsIGJl
IHByZXNlcnZlZCwgdW5sZXNzIHJlZiBpcyBvdmVycmlkZGVuCisgIHZhciBvd25lciA9IGVsZW1l
bnQuX293bmVyOworCisgIGlmIChjb25maWcgIT0gbnVsbCkgeworICAgIGlmIChoYXNWYWxpZFJl
Zihjb25maWcpKSB7CisgICAgICAvLyBTaWxlbnRseSBzdGVhbCB0aGUgcmVmIGZyb20gdGhlIHBh
cmVudC4KKyAgICAgIHJlZiA9IGNvbmZpZy5yZWY7CisgICAgICBvd25lciA9IFJlYWN0Q3VycmVu
dE93bmVyLmN1cnJlbnQ7CisgICAgfQorICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7Cisg
ICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7CisgICAgfQorCisgICAgLy8gUmVtYWluaW5nIHBy
b3BlcnRpZXMgb3ZlcnJpZGUgZXhpc3RpbmcgcHJvcHMKKyAgICB2YXIgZGVmYXVsdFByb3BzOwor
ICAgIGlmIChlbGVtZW50LnR5cGUgJiYgZWxlbWVudC50eXBlLmRlZmF1bHRQcm9wcykgeworICAg
ICAgZGVmYXVsdFByb3BzID0gZWxlbWVudC50eXBlLmRlZmF1bHRQcm9wczsKKyAgICB9CisgICAg
Zm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHsKKyAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxs
KGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9w
TmFtZSkpIHsKKyAgICAgICAgaWYgKGNvbmZpZ1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCAmJiBk
ZWZhdWx0UHJvcHMgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgIC8vIFJlc29sdmUgZGVmYXVs
dCBwcm9wcworICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFt
ZV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmln
W3Byb3BOYW1lXTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIC8vIENoaWxk
cmVuIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVy
cmVkIG9udG8KKyAgLy8gdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuCisgIHZhciBj
aGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyOworICBpZiAoY2hpbGRyZW5MZW5n
dGggPT09IDEpIHsKKyAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuOworICB9IGVsc2UgaWYg
KGNoaWxkcmVuTGVuZ3RoID4gMSkgeworICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRy
ZW5MZW5ndGgpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7IGkrKykg
eworICAgICAgY2hpbGRBcnJheVtpXSA9IGFyZ3VtZW50c1tpICsgMl07CisgICAgfQorICAgIHBy
b3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTsKKyAgfQorCisgIHJldHVybiBSZWFjdEVsZW1lbnQo
ZWxlbWVudC50eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpOworfTsK
KworLyoqCisgKiBWZXJpZmllcyB0aGUgb2JqZWN0IGlzIGEgUmVhY3RFbGVtZW50LgorICogU2Vl
IGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1s
I3JlYWN0LmlzdmFsaWRlbGVtZW50CisgKiBAcGFyYW0gez9vYmplY3R9IG9iamVjdAorICogQHJl
dHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb2JqZWN0YCBpcyBhIHZhbGlkIGNvbXBvbmVudC4KKyAq
IEBmaW5hbAorICovCitSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQgPSBmdW5jdGlvbiAob2Jq
ZWN0KSB7CisgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09
IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7Cit9OworCitt
b2R1bGUuZXhwb3J0cyA9IFJlYWN0RWxlbWVudDsKK30seyIxMSI6MTEsIjIwIjoyMCwiMzAiOjMw
LCIzMSI6MzEsIjgiOjh9XSwxMTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIg
dGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50
CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGlu
IHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKiAKKyAqLworCisndXNlIHN0cmljdCc7CisKKy8v
IFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudCB0eXBlLiBJZiB0aGVyZSBp
cyBubyBuYXRpdmUgU3ltYm9sCisvLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIg
aXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuCisKK3ZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSB0eXBl
b2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbFsnZm9yJ10gJiYgU3ltYm9sWydmb3In
XSgncmVhY3QuZWxlbWVudCcpIHx8IDB4ZWFjNzsKKworbW9kdWxlLmV4cG9ydHMgPSBSRUFDVF9F
TEVNRU5UX1RZUEU7Cit9LHt9XSwxMjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5k
ZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdy
YW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxl
IGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworLyoqCisgKiBSZWFjdEVsZW1lbnRW
YWxpZGF0b3IgcHJvdmlkZXMgYSB3cmFwcGVyIGFyb3VuZCBhIGVsZW1lbnQgZmFjdG9yeQorICog
d2hpY2ggdmFsaWRhdGVzIHRoZSBwcm9wcyBwYXNzZWQgdG8gdGhlIGVsZW1lbnQuIFRoaXMgaXMg
aW50ZW5kZWQgdG8gYmUKKyAqIHVzZWQgb25seSBpbiBERVYgYW5kIGNvdWxkIGJlIHJlcGxhY2Vk
IGJ5IGEgc3RhdGljIHR5cGUgY2hlY2tlciBmb3IgbGFuZ3VhZ2VzCisgKiB0aGF0IHN1cHBvcnQg
aXQuCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgUmVhY3RDdXJyZW50T3duZXIgPSBfZGVy
ZXFfKDgpOwordmFyIFJlYWN0Q29tcG9uZW50VHJlZUhvb2sgPSBfZGVyZXFfKDcpOwordmFyIFJl
YWN0RWxlbWVudCA9IF9kZXJlcV8oMTApOworCit2YXIgY2hlY2tSZWFjdFR5cGVTcGVjID0gX2Rl
cmVxXygyMSk7CisKK3ZhciBjYW5EZWZpbmVQcm9wZXJ0eSA9IF9kZXJlcV8oMjApOwordmFyIGdl
dEl0ZXJhdG9yRm4gPSBfZGVyZXFfKDIyKTsKK3ZhciB3YXJuaW5nID0gX2RlcmVxXygzMCk7CisK
K2Z1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpIHsKKyAgaWYgKFJlYWN0Q3Vy
cmVudE93bmVyLmN1cnJlbnQpIHsKKyAgICB2YXIgbmFtZSA9IFJlYWN0Q3VycmVudE93bmVyLmN1
cnJlbnQuZ2V0TmFtZSgpOworICAgIGlmIChuYW1lKSB7CisgICAgICByZXR1cm4gJyBDaGVjayB0
aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nOworICAgIH0KKyAgfQorICByZXR1
cm4gJyc7Cit9CisKK2Z1bmN0aW9uIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKGVsZW1lbnRQ
cm9wcykgeworICBpZiAoZWxlbWVudFByb3BzICE9PSBudWxsICYmIGVsZW1lbnRQcm9wcyAhPT0g
dW5kZWZpbmVkICYmIGVsZW1lbnRQcm9wcy5fX3NvdXJjZSAhPT0gdW5kZWZpbmVkKSB7CisgICAg
dmFyIHNvdXJjZSA9IGVsZW1lbnRQcm9wcy5fX3NvdXJjZTsKKyAgICB2YXIgZmlsZU5hbWUgPSBz
b3VyY2UuZmlsZU5hbWUucmVwbGFjZSgvXi4qW1xcXC9dLywgJycpOworICAgIHZhciBsaW5lTnVt
YmVyID0gc291cmNlLmxpbmVOdW1iZXI7CisgICAgcmV0dXJuICcgQ2hlY2sgeW91ciBjb2RlIGF0
ICcgKyBmaWxlTmFtZSArICc6JyArIGxpbmVOdW1iZXIgKyAnLic7CisgIH0KKyAgcmV0dXJuICcn
OworfQorCisvKioKKyAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24g
ZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3IKKyAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFs
aWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlbgorICog
dXBkYXRlcy4KKyAqLwordmFyIG93bmVySGFzS2V5VXNlV2FybmluZyA9IHt9OworCitmdW5jdGlv
biBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpIHsKKyAgdmFyIGluZm8g
PSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTsKKworICBpZiAoIWluZm8pIHsKKyAgICB2
YXIgcGFyZW50TmFtZSA9IHR5cGVvZiBwYXJlbnRUeXBlID09PSAnc3RyaW5nJyA/IHBhcmVudFR5
cGUgOiBwYXJlbnRUeXBlLmRpc3BsYXlOYW1lIHx8IHBhcmVudFR5cGUubmFtZTsKKyAgICBpZiAo
cGFyZW50TmFtZSkgeworICAgICAgaW5mbyA9ICcgQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIg
Y2FsbCB1c2luZyA8JyArIHBhcmVudE5hbWUgKyAnPi4nOworICAgIH0KKyAgfQorICByZXR1cm4g
aW5mbzsKK30KKworLyoqCisgKiBXYXJuIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBhbiBl
eHBsaWNpdCBrZXkgYXNzaWduZWQgdG8gaXQuCisgKiBUaGlzIGVsZW1lbnQgaXMgaW4gYW4gYXJy
YXkuIFRoZSBhcnJheSBjb3VsZCBncm93IGFuZCBzaHJpbmsgb3IgYmUKKyAqIHJlb3JkZXJlZC4g
QWxsIGNoaWxkcmVuIHRoYXQgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGFyZSByZXF1
aXJlZCB0bworICogaGF2ZSBhICJrZXkiIHByb3BlcnR5IGFzc2lnbmVkIHRvIGl0LiBFcnJvciBz
dGF0dXNlcyBhcmUgY2FjaGVkIHNvIGEgd2FybmluZworICogd2lsbCBvbmx5IGJlIHNob3duIG9u
Y2UuCisgKgorICogQGludGVybmFsCisgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudCBF
bGVtZW50IHRoYXQgcmVxdWlyZXMgYSBrZXkuCisgKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgZWxl
bWVudCdzIHBhcmVudCdzIHR5cGUuCisgKi8KK2Z1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXko
ZWxlbWVudCwgcGFyZW50VHlwZSkgeworICBpZiAoIWVsZW1lbnQuX3N0b3JlIHx8IGVsZW1lbnQu
X3N0b3JlLnZhbGlkYXRlZCB8fCBlbGVtZW50LmtleSAhPSBudWxsKSB7CisgICAgcmV0dXJuOwor
ICB9CisgIGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7CisKKyAgdmFyIG1lbW9pemVy
ID0gb3duZXJIYXNLZXlVc2VXYXJuaW5nLnVuaXF1ZUtleSB8fCAob3duZXJIYXNLZXlVc2VXYXJu
aW5nLnVuaXF1ZUtleSA9IHt9KTsKKworICB2YXIgY3VycmVudENvbXBvbmVudEVycm9ySW5mbyA9
IGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSk7CisgIGlmIChtZW1vaXpl
cltjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSkgeworICAgIHJldHVybjsKKyAgfQorICBtZW1v
aXplcltjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSA9IHRydWU7CisKKyAgLy8gVXN1YWxseSB0
aGUgY3VycmVudCBvd25lciBpcyB0aGUgb2ZmZW5kZXIsIGJ1dCBpZiBpdCBhY2NlcHRzIGNoaWxk
cmVuIGFzIGEKKyAgLy8gcHJvcGVydHksIGl0IG1heSBiZSB0aGUgY3JlYXRvciBvZiB0aGUgY2hp
bGQgdGhhdCdzIHJlc3BvbnNpYmxlIGZvcgorICAvLyBhc3NpZ25pbmcgaXQgYSBrZXkuCisgIHZh
ciBjaGlsZE93bmVyID0gJyc7CisgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX293bmVyICYmIGVs
ZW1lbnQuX293bmVyICE9PSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7CisgICAgLy8gR2l2
ZSB0aGUgY29tcG9uZW50IHRoYXQgb3JpZ2luYWxseSBjcmVhdGVkIHRoaXMgY2hpbGQuCisgICAg
Y2hpbGRPd25lciA9ICcgSXQgd2FzIHBhc3NlZCBhIGNoaWxkIGZyb20gJyArIGVsZW1lbnQuX293
bmVyLmdldE5hbWUoKSArICcuJzsKKyAgfQorCisgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0
aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdFYWNoIGNoaWxkIGluIGFuIGFycmF5IG9yIGl0ZXJhdG9y
IHNob3VsZCBoYXZlIGEgdW5pcXVlICJrZXkiIHByb3AuJyArICclcyVzIFNlZSBodHRwczovL2Zi
Lm1lL3JlYWN0LXdhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4lcycsIGN1cnJlbnRD
b21wb25lbnRFcnJvckluZm8sIGNoaWxkT3duZXIsIFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0
Q3VycmVudFN0YWNrQWRkZW5kdW0oZWxlbWVudCkpIDogdm9pZCAwOworfQorCisvKioKKyAqIEVu
c3VyZSB0aGF0IGV2ZXJ5IGVsZW1lbnQgZWl0aGVyIGlzIHBhc3NlZCBpbiBhIHN0YXRpYyBsb2Nh
dGlvbiwgaW4gYW4KKyAqIGFycmF5IHdpdGggYW4gZXhwbGljaXQga2V5cyBwcm9wZXJ0eSBkZWZp
bmVkLCBvciBpbiBhbiBvYmplY3QgbGl0ZXJhbAorICogd2l0aCB2YWxpZCBrZXkgcHJvcGVydHku
CisgKgorICogQGludGVybmFsCisgKiBAcGFyYW0ge1JlYWN0Tm9kZX0gbm9kZSBTdGF0aWNhbGx5
IHBhc3NlZCBjaGlsZCBvZiBhbnkgdHlwZS4KKyAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBub2Rl
J3MgcGFyZW50J3MgdHlwZS4KKyAqLworZnVuY3Rpb24gdmFsaWRhdGVDaGlsZEtleXMobm9kZSwg
cGFyZW50VHlwZSkgeworICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSB7CisgICAgcmV0
dXJuOworICB9CisgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSB7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7CisgICAgICB2YXIgY2hpbGQgPSBub2RlW2ldOwor
ICAgICAgaWYgKFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHsKKyAgICAgICAg
dmFsaWRhdGVFeHBsaWNpdEtleShjaGlsZCwgcGFyZW50VHlwZSk7CisgICAgICB9CisgICAgfQor
ICB9IGVsc2UgaWYgKFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChub2RlKSkgeworICAgIC8v
IFRoaXMgZWxlbWVudCB3YXMgcGFzc2VkIGluIGEgdmFsaWQgbG9jYXRpb24uCisgICAgaWYgKG5v
ZGUuX3N0b3JlKSB7CisgICAgICBub2RlLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlOworICAgIH0K
KyAgfSBlbHNlIGlmIChub2RlKSB7CisgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZu
KG5vZGUpOworICAgIC8vIEVudHJ5IGl0ZXJhdG9ycyBwcm92aWRlIGltcGxpY2l0IGtleXMuCisg
ICAgaWYgKGl0ZXJhdG9yRm4pIHsKKyAgICAgIGlmIChpdGVyYXRvckZuICE9PSBub2RlLmVudHJp
ZXMpIHsKKyAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG5vZGUpOworICAg
ICAgICB2YXIgc3RlcDsKKyAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSku
ZG9uZSkgeworICAgICAgICAgIGlmIChSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoc3RlcC52
YWx1ZSkpIHsKKyAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFy
ZW50VHlwZSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9Cit9
CisKKy8qKgorICogR2l2ZW4gYW4gZWxlbWVudCwgdmFsaWRhdGUgdGhhdCBpdHMgcHJvcHMgZm9s
bG93IHRoZSBwcm9wVHlwZXMgZGVmaW5pdGlvbiwKKyAqIHByb3ZpZGVkIGJ5IHRoZSB0eXBlLgor
ICoKKyAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50CisgKi8KK2Z1bmN0aW9uIHZhbGlk
YXRlUHJvcFR5cGVzKGVsZW1lbnQpIHsKKyAgdmFyIGNvbXBvbmVudENsYXNzID0gZWxlbWVudC50
eXBlOworICBpZiAodHlwZW9mIGNvbXBvbmVudENsYXNzICE9PSAnZnVuY3Rpb24nKSB7CisgICAg
cmV0dXJuOworICB9CisgIHZhciBuYW1lID0gY29tcG9uZW50Q2xhc3MuZGlzcGxheU5hbWUgfHwg
Y29tcG9uZW50Q2xhc3MubmFtZTsKKyAgaWYgKGNvbXBvbmVudENsYXNzLnByb3BUeXBlcykgewor
ICAgIGNoZWNrUmVhY3RUeXBlU3BlYyhjb21wb25lbnRDbGFzcy5wcm9wVHlwZXMsIGVsZW1lbnQu
cHJvcHMsICdwcm9wJywgbmFtZSwgZWxlbWVudCwgbnVsbCk7CisgIH0KKyAgaWYgKHR5cGVvZiBj
b21wb25lbnRDbGFzcy5nZXREZWZhdWx0UHJvcHMgPT09ICdmdW5jdGlvbicpIHsKKyAgICAiZGV2
ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGNvbXBvbmVudENsYXNzLmdldERl
ZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCwgJ2dldERlZmF1bHRQcm9wcyBpcyBvbmx5
IHVzZWQgb24gY2xhc3NpYyBSZWFjdC5jcmVhdGVDbGFzcyAnICsgJ2RlZmluaXRpb25zLiBVc2Ug
YSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgYGRlZmF1bHRQcm9wc2AgaW5zdGVhZC4nKSA6IHZvaWQg
MDsKKyAgfQorfQorCit2YXIgUmVhY3RFbGVtZW50VmFsaWRhdG9yID0geworCisgIGNyZWF0ZUVs
ZW1lbnQ6IGZ1bmN0aW9uICh0eXBlLCBwcm9wcywgY2hpbGRyZW4pIHsKKyAgICB2YXIgdmFsaWRU
eXBlID0gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rp
b24nOworICAgIC8vIFdlIHdhcm4gaW4gdGhpcyBjYXNlIGJ1dCBkb24ndCB0aHJvdy4gV2UgZXhw
ZWN0IHRoZSBlbGVtZW50IGNyZWF0aW9uIHRvCisgICAgLy8gc3VjY2VlZCBhbmQgdGhlcmUgd2ls
bCBsaWtlbHkgYmUgZXJyb3JzIGluIHJlbmRlci4KKyAgICBpZiAoIXZhbGlkVHlwZSkgeworICAg
ICAgaWYgKHR5cGVvZiB0eXBlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB0eXBlICE9PSAnc3Ry
aW5nJykgeworICAgICAgICB2YXIgaW5mbyA9ICcnOworICAgICAgICBpZiAodHlwZSA9PT0gdW5k
ZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmIE9i
amVjdC5rZXlzKHR5cGUpLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgIGluZm8gKz0gJyBZb3Ug
bGlrZWx5IGZvcmdvdCB0byBleHBvcnQgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgZmlsZSAnICsg
J2l0XCdzIGRlZmluZWQgaW4uJzsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBzb3VyY2VJbmZv
ID0gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0ocHJvcHMpOworICAgICAgICBpZiAoc291cmNl
SW5mbykgeworICAgICAgICAgIGluZm8gKz0gc291cmNlSW5mbzsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICBpbmZvICs9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpOworICAgICAg
ICB9CisKKyAgICAgICAgaW5mbyArPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldEN1cnJlbnRT
dGFja0FkZGVuZHVtKCk7CisKKyAgICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24n
ID8gd2FybmluZyhmYWxzZSwgJ1JlYWN0LmNyZWF0ZUVsZW1lbnQ6IHR5cGUgaXMgaW52YWxpZCAt
LSBleHBlY3RlZCBhIHN0cmluZyAoZm9yICcgKyAnYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBj
bGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSAnICsgJ2NvbXBvbmVudHMpIGJ1dCBnb3Q6ICVz
LiVzJywgdHlwZSA9PSBudWxsID8gdHlwZSA6IHR5cGVvZiB0eXBlLCBpbmZvKSA6IHZvaWQgMDsK
KyAgICAgIH0KKyAgICB9CisKKyAgICB2YXIgZWxlbWVudCA9IFJlYWN0RWxlbWVudC5jcmVhdGVF
bGVtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisKKyAgICAvLyBUaGUgcmVzdWx0IGNhbiBi
ZSBudWxsaXNoIGlmIGEgbW9jayBvciBhIGN1c3RvbSBmdW5jdGlvbiBpcyB1c2VkLgorICAgIC8v
IFRPRE86IERyb3AgdGhpcyB3aGVuIHRoZXNlIGFyZSBubyBsb25nZXIgYWxsb3dlZCBhcyB0aGUg
dHlwZSBhcmd1bWVudC4KKyAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7CisgICAgICByZXR1cm4g
ZWxlbWVudDsKKyAgICB9CisKKyAgICAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlz
bid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpYworICAgIC8vIGRvZXNuJ3Qg
ZXhwZWN0IGEgbm9uLXN0cmluZy9mdW5jdGlvbiB0eXBlIGFuZCBjYW4gdGhyb3cgY29uZnVzaW5n
IGVycm9ycy4KKyAgICAvLyBXZSBkb24ndCB3YW50IGV4Y2VwdGlvbiBiZWhhdmlvciB0byBkaWZm
ZXIgYmV0d2VlbiBkZXYgYW5kIHByb2QuCisgICAgLy8gKFJlbmRlcmluZyB3aWxsIHRocm93IHdp
dGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlIHR5cGUgaXMKKyAgICAvLyBm
aXhlZCwgdGhlIGtleSB3YXJuaW5ncyB3aWxsIGFwcGVhci4pCisgICAgaWYgKHZhbGlkVHlwZSkg
eworICAgICAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCB0eXBlKTsKKyAgICAgIH0KKyAg
ICB9CisKKyAgICB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KTsKKworICAgIHJldHVybiBlbGVt
ZW50OworICB9LAorCisgIGNyZWF0ZUZhY3Rvcnk6IGZ1bmN0aW9uICh0eXBlKSB7CisgICAgdmFy
IHZhbGlkYXRlZEZhY3RvcnkgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY3JlYXRlRWxlbWVudC5i
aW5kKG51bGwsIHR5cGUpOworICAgIC8vIExlZ2FjeSBob29rIFRPRE86IFdhcm4gaWYgdGhpcyBp
cyBhY2Nlc3NlZAorICAgIHZhbGlkYXRlZEZhY3RvcnkudHlwZSA9IHR5cGU7CisKKyAgICBpZiAo
ImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICBpZiAoY2FuRGVmaW5lUHJv
cGVydHkpIHsKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbGlkYXRlZEZhY3Rvcnks
ICd0eXBlJywgeworICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLAorICAgICAgICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24n
ID8gd2FybmluZyhmYWxzZSwgJ0ZhY3RvcnkudHlwZSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdGhl
IGNsYXNzIGRpcmVjdGx5ICcgKyAnYmVmb3JlIHBhc3NpbmcgaXQgdG8gY3JlYXRlRmFjdG9yeS4n
KSA6IHZvaWQgMDsKKyAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndHlw
ZScsIHsKKyAgICAgICAgICAgICAgdmFsdWU6IHR5cGUKKyAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgcmV0dXJuIHR5cGU7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gdmFsaWRhdGVkRmFjdG9yeTsKKyAgfSwKKworICBjbG9uZUVsZW1l
bnQ6IGZ1bmN0aW9uIChlbGVtZW50LCBwcm9wcywgY2hpbGRyZW4pIHsKKyAgICB2YXIgbmV3RWxl
bWVudCA9IFJlYWN0RWxlbWVudC5jbG9uZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsK
KyAgICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeworICAgICAg
dmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCBuZXdFbGVtZW50LnR5cGUpOworICAgIH0K
KyAgICB2YWxpZGF0ZVByb3BUeXBlcyhuZXdFbGVtZW50KTsKKyAgICByZXR1cm4gbmV3RWxlbWVu
dDsKKyAgfQorCit9OworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0RWxlbWVudFZhbGlkYXRvcjsK
K30seyIxMCI6MTAsIjIwIjoyMCwiMjEiOjIxLCIyMiI6MjIsIjMwIjozMCwiNyI6NywiOCI6OH1d
LDEzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0
IDIwMTUtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxp
Y2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5
IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCBy
aWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0
b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciB3YXJuaW5nID0gX2RlcmVxXygz
MCk7CisKK2Z1bmN0aW9uIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCBjYWxsZXJOYW1lKSB7Cisg
IGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICB2YXIgY29uc3RydWN0
b3IgPSBwdWJsaWNJbnN0YW5jZS5jb25zdHJ1Y3RvcjsKKyAgICAiZGV2ZWxvcG1lbnQiICE9PSAn
cHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnJXMoLi4uKTogQ2FuIG9ubHkgdXBkYXRlIGEg
bW91bnRlZCBvciBtb3VudGluZyBjb21wb25lbnQuICcgKyAnVGhpcyB1c3VhbGx5IG1lYW5zIHlv
dSBjYWxsZWQgJXMoKSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LiAnICsgJ1RoaXMgaXMgYSBu
by1vcC4gUGxlYXNlIGNoZWNrIHRoZSBjb2RlIGZvciB0aGUgJXMgY29tcG9uZW50LicsIGNhbGxl
ck5hbWUsIGNhbGxlck5hbWUsIGNvbnN0cnVjdG9yICYmIChjb25zdHJ1Y3Rvci5kaXNwbGF5TmFt
ZSB8fCBjb25zdHJ1Y3Rvci5uYW1lKSB8fCAnUmVhY3RDbGFzcycpIDogdm9pZCAwOworICB9Cit9
CisKKy8qKgorICogVGhpcyBpcyB0aGUgYWJzdHJhY3QgQVBJIGZvciBhbiB1cGRhdGUgcXVldWUu
CisgKi8KK3ZhciBSZWFjdE5vb3BVcGRhdGVRdWV1ZSA9IHsKKworICAvKioKKyAgICogQ2hlY2tz
IHdoZXRoZXIgb3Igbm90IHRoaXMgY29tcG9zaXRlIGNvbXBvbmVudCBpcyBtb3VudGVkLgorICAg
KiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB3ZSB3YW50
IHRvIHRlc3QuCisgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgbW91bnRlZCwgZmFsc2Ug
b3RoZXJ3aXNlLgorICAgKiBAcHJvdGVjdGVkCisgICAqIEBmaW5hbAorICAgKi8KKyAgaXNNb3Vu
dGVkOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0s
CisKKyAgLyoqCisgICAqIEVucXVldWUgYSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQg
YWZ0ZXIgYWxsIHRoZSBwZW5kaW5nIHVwZGF0ZXMKKyAgICogaGF2ZSBwcm9jZXNzZWQuCisgICAq
CisgICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRv
IHVzZSBhcyBgdGhpc2AgY29udGV4dC4KKyAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNr
IENhbGxlZCBhZnRlciBzdGF0ZSBpcyB1cGRhdGVkLgorICAgKiBAaW50ZXJuYWwKKyAgICovCisg
IGVucXVldWVDYWxsYmFjazogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBjYWxsYmFjaykge30s
CisKKyAgLyoqCisgICAqIEZvcmNlcyBhbiB1cGRhdGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW52
b2tlZCB3aGVuIGl0IGlzIGtub3duIHdpdGgKKyAgICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoq
bm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uCisgICAqCisgICAqIFlvdSBtYXkgd2FudCB0byBj
YWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNvbWUgZGVlcGVyIGFzcGVjdCBvZiB0aGUKKyAg
ICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBj
YWxsZWQuCisgICAqCisgICAqIFRoaXMgd2lsbCBub3QgaW52b2tlIGBzaG91bGRDb21wb25lbnRV
cGRhdGVgLCBidXQgaXQgd2lsbCBpbnZva2UKKyAgICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFu
ZCBgY29tcG9uZW50RGlkVXBkYXRlYC4KKyAgICoKKyAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBw
dWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuCisgICAqIEBp
bnRlcm5hbAorICAgKi8KKyAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAocHVibGljSW5z
dGFuY2UpIHsKKyAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ2ZvcmNlVXBkYXRlJyk7Cisg
IH0sCisKKyAgLyoqCisgICAqIFJlcGxhY2VzIGFsbCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2Ug
dGhpcyBvciBgc2V0U3RhdGVgIHRvIG11dGF0ZSBzdGF0ZS4KKyAgICogWW91IHNob3VsZCB0cmVh
dCBgdGhpcy5zdGF0ZWAgYXMgaW1tdXRhYmxlLgorICAgKgorICAgKiBUaGVyZSBpcyBubyBndWFy
YW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzbwor
ICAgKiBhY2Nlc3NpbmcgYHRoaXMuc3RhdGVgIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgbWF5
IHJldHVybiB0aGUgb2xkIHZhbHVlLgorICAgKgorICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1
YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci4KKyAgICogQHBh
cmFtIHtvYmplY3R9IGNvbXBsZXRlU3RhdGUgTmV4dCBzdGF0ZS4KKyAgICogQGludGVybmFsCisg
ICAqLworICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNv
bXBsZXRlU3RhdGUpIHsKKyAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ3JlcGxhY2VTdGF0
ZScpOworICB9LAorCisgIC8qKgorICAgKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gVGhp
cyBvbmx5IGV4aXN0cyBiZWNhdXNlIF9wZW5kaW5nU3RhdGUgaXMKKyAgICogaW50ZXJuYWwuIFRo
aXMgcHJvdmlkZXMgYSBtZXJnaW5nIHN0cmF0ZWd5IHRoYXQgaXMgbm90IGF2YWlsYWJsZSB0byBk
ZWVwCisgICAqIHByb3BlcnRpZXMgd2hpY2ggaXMgY29uZnVzaW5nLiBUT0RPOiBFeHBvc2UgcGVu
ZGluZ1N0YXRlIG9yIGRvbid0IHVzZSBpdAorICAgKiBkdXJpbmcgdGhlIG1lcmdlLgorICAgKgor
ICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0
IHNob3VsZCByZXJlbmRlci4KKyAgICogQHBhcmFtIHtvYmplY3R9IHBhcnRpYWxTdGF0ZSBOZXh0
IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggc3RhdGUuCisgICAqIEBpbnRlcm5hbAor
ICAgKi8KKyAgZW5xdWV1ZVNldFN0YXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIHBhcnRp
YWxTdGF0ZSkgeworICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnc2V0U3RhdGUnKTsKKyAg
fQorfTsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdE5vb3BVcGRhdGVRdWV1ZTsKK30seyIzMCI6
MzB9XSwxNDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHly
aWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHls
ZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVj
dG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRl
bnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRp
cmVjdG9yeS4KKyAqCisgKiAKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBSZWFjdFByb3BU
eXBlTG9jYXRpb25OYW1lcyA9IHt9OworCitpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rp
b24nKSB7CisgIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0geworICAgIHByb3A6ICdwcm9w
JywKKyAgICBjb250ZXh0OiAnY29udGV4dCcsCisgICAgY2hpbGRDb250ZXh0OiAnY2hpbGQgY29u
dGV4dCcKKyAgfTsKK30KKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25O
YW1lczsKK30se31dLDE1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUg
QlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJv
b3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAq
IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhl
IHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBfcmVxdWly
ZSA9IF9kZXJlcV8oMTApLAorICAgIGlzVmFsaWRFbGVtZW50ID0gX3JlcXVpcmUuaXNWYWxpZEVs
ZW1lbnQ7CisKK3ZhciBmYWN0b3J5ID0gX2RlcmVxXygzMyk7CisKK21vZHVsZS5leHBvcnRzID0g
ZmFjdG9yeShpc1ZhbGlkRWxlbWVudCk7Cit9LHsiMTAiOjEwLCIzMyI6MzN9XSwxNjpbZnVuY3Rp
b24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNl
bnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
c291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5k
IGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNv
dXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBi
ZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisg
KiAKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdT
RUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7CisKK21vZHVsZS5l
eHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7Cit9LHt9XSwxNzpbZnVuY3Rpb24oX2RlcmVx
Xyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vi
b29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNv
ZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQor
ICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVl
LiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBp
biB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3Vz
ZSBzdHJpY3QnOworCit2YXIgX2Fzc2lnbiA9IF9kZXJlcV8oMzEpOworCit2YXIgUmVhY3RDb21w
b25lbnQgPSBfZGVyZXFfKDYpOwordmFyIFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlID0gX2RlcmVxXygx
Myk7CisKK3ZhciBlbXB0eU9iamVjdCA9IF9kZXJlcV8oMjgpOworCisvKioKKyAqIEJhc2UgY2xh
c3MgaGVscGVycyBmb3IgdGhlIHVwZGF0aW5nIHN0YXRlIG9mIGEgY29tcG9uZW50LgorICovCitm
dW5jdGlvbiBSZWFjdFB1cmVDb21wb25lbnQocHJvcHMsIGNvbnRleHQsIHVwZGF0ZXIpIHsKKyAg
Ly8gRHVwbGljYXRlZCBmcm9tIFJlYWN0Q29tcG9uZW50LgorICB0aGlzLnByb3BzID0gcHJvcHM7
CisgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7CisgIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0Owor
ICAvLyBXZSBpbml0aWFsaXplIHRoZSBkZWZhdWx0IHVwZGF0ZXIgYnV0IHRoZSByZWFsIG9uZSBn
ZXRzIGluamVjdGVkIGJ5IHRoZQorICAvLyByZW5kZXJlci4KKyAgdGhpcy51cGRhdGVyID0gdXBk
YXRlciB8fCBSZWFjdE5vb3BVcGRhdGVRdWV1ZTsKK30KKworZnVuY3Rpb24gQ29tcG9uZW50RHVt
bXkoKSB7fQorQ29tcG9uZW50RHVtbXkucHJvdG90eXBlID0gUmVhY3RDb21wb25lbnQucHJvdG90
eXBlOworUmVhY3RQdXJlQ29tcG9uZW50LnByb3RvdHlwZSA9IG5ldyBDb21wb25lbnREdW1teSgp
OworUmVhY3RQdXJlQ29tcG9uZW50LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlYWN0UHVyZUNv
bXBvbmVudDsKKy8vIEF2b2lkIGFuIGV4dHJhIHByb3RvdHlwZSBqdW1wIGZvciB0aGVzZSBtZXRo
b2RzLgorX2Fzc2lnbihSZWFjdFB1cmVDb21wb25lbnQucHJvdG90eXBlLCBSZWFjdENvbXBvbmVu
dC5wcm90b3R5cGUpOworUmVhY3RQdXJlQ29tcG9uZW50LnByb3RvdHlwZS5pc1B1cmVSZWFjdENv
bXBvbmVudCA9IHRydWU7CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RQdXJlQ29tcG9uZW50Owor
fSx7IjEzIjoxMywiMjgiOjI4LCIzMSI6MzEsIjYiOjZ9XSwxODpbZnVuY3Rpb24oX2RlcmVxXyxt
b2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29r
LCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUg
aXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICog
TElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBB
biBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0
aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBz
dHJpY3QnOworCit2YXIgX2Fzc2lnbiA9IF9kZXJlcV8oMzEpOworCit2YXIgUmVhY3QgPSBfZGVy
ZXFfKDMpOworCisvLyBgdmVyc2lvbmAgd2lsbCBiZSBhZGRlZCBoZXJlIGJ5IHRoZSBSZWFjdCBt
b2R1bGUuCit2YXIgUmVhY3RVTURFbnRyeSA9IF9hc3NpZ24oUmVhY3QsIHsKKyAgX19TRUNSRVRf
SU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6IHsKKyAgICBSZWFjdEN1
cnJlbnRPd25lcjogX2RlcmVxXyg4KQorICB9Cit9KTsKKworaWYgKCJkZXZlbG9wbWVudCIgIT09
ICdwcm9kdWN0aW9uJykgeworICBfYXNzaWduKFJlYWN0VU1ERW50cnkuX19TRUNSRVRfSU5URVJO
QUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQsIHsKKyAgICAvLyBSZWFjdENvbXBv
bmVudFRyZWVIb29rIHNob3VsZCBub3QgYmUgaW5jbHVkZWQgaW4gcHJvZHVjdGlvbi4KKyAgICBS
ZWFjdENvbXBvbmVudFRyZWVIb29rOiBfZGVyZXFfKDcpLAorICAgIGdldE5leHREZWJ1Z0lEOiBf
ZGVyZXFfKDIzKQorICB9KTsKK30KKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdFVNREVudHJ5Owor
fSx7IjIzIjoyMywiMyI6MywiMzEiOjMxLCI3Ijo3LCI4Ijo4fV0sMTk6W2Z1bmN0aW9uKF9kZXJl
cV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNl
Ym9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBj
b2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUK
KyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJl
ZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQg
aW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1
c2Ugc3RyaWN0JzsKKworbW9kdWxlLmV4cG9ydHMgPSAnMTUuNS40JzsKK30se31dLDIwOltmdW5j
dGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJl
c2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91
bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMg
c291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2Fu
IGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoK
KyAqIAorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIGNhbkRlZmluZVByb3BlcnR5ID0gZmFs
c2U7CitpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgIHRyeSB7CisgICAg
Ly8gJEZsb3dGaXhNZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMjg1
CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAneCcsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7
fSB9KTsKKyAgICBjYW5EZWZpbmVQcm9wZXJ0eSA9IHRydWU7CisgIH0gY2F0Y2ggKHgpIHsKKyAg
ICAvLyBJRSB3aWxsIGZhaWwgb24gZGVmaW5lUHJvcGVydHkKKyAgfQorfQorCittb2R1bGUuZXhw
b3J0cyA9IGNhbkRlZmluZVByb3BlcnR5OworfSx7fV0sMjE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9k
dWxlLGV4cG9ydHMpeworKGZ1bmN0aW9uIChwcm9jZXNzKXsKKy8qKgorICogQ29weXJpZ2h0IDIw
MTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vu
c2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9m
IHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdo
dHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5
LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBfcHJvZEludmFyaWFudCA9IF9kZXJl
cV8oMjUpOworCit2YXIgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSBfZGVyZXFfKDE0KTsK
K3ZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IF9kZXJlcV8oMTYpOworCit2YXIgaW52YXJpYW50
ID0gX2RlcmVxXygyOSk7Cit2YXIgd2FybmluZyA9IF9kZXJlcV8oMzApOworCit2YXIgUmVhY3RD
b21wb25lbnRUcmVlSG9vazsKKworaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAm
JiBwcm9jZXNzLmVudiAmJiAiZGV2ZWxvcG1lbnQiID09PSAndGVzdCcpIHsKKyAgLy8gVGVtcG9y
YXJ5IGhhY2suCisgIC8vIElubGluZSByZXF1aXJlcyBkb24ndCB3b3JrIHdlbGwgd2l0aCBKZXN0
OgorICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcyNDAKKyAg
Ly8gUmVtb3ZlIHRoZSBpbmxpbmUgcmVxdWlyZXMgd2hlbiB3ZSBkb24ndCBuZWVkIHRoZW0gYW55
bW9yZToKKyAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvNzE3OAor
ICBSZWFjdENvbXBvbmVudFRyZWVIb29rID0gX2RlcmVxXyg3KTsKK30KKwordmFyIGxvZ2dlZFR5
cGVGYWlsdXJlcyA9IHt9OworCisvKioKKyAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZXMgbWF0Y2gg
d2l0aCB0aGUgdHlwZSBzcGVjcy4KKyAqIEVycm9yIG1lc3NhZ2VzIGFyZSBtZW1vcml6ZWQgYW5k
IHdpbGwgb25seSBiZSBzaG93biBvbmNlLgorICoKKyAqIEBwYXJhbSB7b2JqZWN0fSB0eXBlU3Bl
Y3MgTWFwIG9mIG5hbWUgdG8gYSBSZWFjdFByb3BUeXBlCisgKiBAcGFyYW0ge29iamVjdH0gdmFs
dWVzIFJ1bnRpbWUgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSB0eXBlLWNoZWNrZWQKKyAqIEBwYXJh
bSB7c3RyaW5nfSBsb2NhdGlvbiBlLmcuICJwcm9wIiwgImNvbnRleHQiLCAiY2hpbGQgY29udGV4
dCIKKyAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIE5hbWUgb2YgdGhlIGNvbXBvbmVu
dCBmb3IgZXJyb3IgbWVzc2FnZXMuCisgKiBAcGFyYW0gez9vYmplY3R9IGVsZW1lbnQgVGhlIFJl
YWN0IGVsZW1lbnQgdGhhdCBpcyBiZWluZyB0eXBlLWNoZWNrZWQKKyAqIEBwYXJhbSB7P251bWJl
cn0gZGVidWdJRCBUaGUgUmVhY3QgY29tcG9uZW50IGluc3RhbmNlIHRoYXQgaXMgYmVpbmcgdHlw
ZS1jaGVja2VkCisgKiBAcHJpdmF0ZQorICovCitmdW5jdGlvbiBjaGVja1JlYWN0VHlwZVNwZWMo
dHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBlbGVtZW50LCBkZWJ1
Z0lEKSB7CisgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHsKKyAgICBpZiAo
dHlwZVNwZWNzLmhhc093blByb3BlcnR5KHR5cGVTcGVjTmFtZSkpIHsKKyAgICAgIHZhciBlcnJv
cjsKKyAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5
IGRvLCB3ZSBkb24ndCB3YW50IHRvCisgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hl
cmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuCisgICAgICAvLyBBZnRlciB0
aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuCisgICAgICB0
cnkgeworICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQg
Z2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWUKKyAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91
dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLgorICAgICAgICAh
KHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSA9PT0gJ2Z1bmN0aW9uJykgPyAiZGV2ZWxv
cG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICclczogJXMgdHlwZSBg
JXNgIGlzIGludmFsaWQ7IGl0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIFJlYWN0
LlByb3BUeXBlcy4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIFJlYWN0UHJvcFR5
cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXSwgdHlwZVNwZWNOYW1lKSA6IF9wcm9kSW52YXJpYW50
KCc4NCcsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgUmVhY3RQcm9wVHlwZUxvY2F0
aW9uTmFtZXNbbG9jYXRpb25dLCB0eXBlU3BlY05hbWUpIDogdm9pZCAwOworICAgICAgICBlcnJv
ciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25l
bnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpOworICAgICAgfSBj
YXRjaCAoZXgpIHsKKyAgICAgICAgZXJyb3IgPSBleDsKKyAgICAgIH0KKyAgICAgICJkZXZlbG9w
bWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoIWVycm9yIHx8IGVycm9yIGluc3RhbmNl
b2YgRXJyb3IsICclczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzIGAlc2AgaXMgaW52YWxpZDsg
dGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBg
RXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8g
cGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlP
ZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBl
IGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFz
cycsIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXSwgdHlwZVNwZWNOYW1lLCB0
eXBlb2YgZXJyb3IpIDogdm9pZCAwOworICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3Ig
JiYgIShlcnJvci5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHsKKyAgICAgICAgLy8g
T25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUg
YSBsb3Qgb2YgdGhlCisgICAgICAgIC8vIHNhbWUgZXJyb3IuCisgICAgICAgIGxvZ2dlZFR5cGVG
YWlsdXJlc1tlcnJvci5tZXNzYWdlXSA9IHRydWU7CisKKyAgICAgICAgdmFyIGNvbXBvbmVudFN0
YWNrSW5mbyA9ICcnOworCisgICAgICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlv
bicpIHsKKyAgICAgICAgICBpZiAoIVJlYWN0Q29tcG9uZW50VHJlZUhvb2spIHsKKyAgICAgICAg
ICAgIFJlYWN0Q29tcG9uZW50VHJlZUhvb2sgPSBfZGVyZXFfKDcpOworICAgICAgICAgIH0KKyAg
ICAgICAgICBpZiAoZGVidWdJRCAhPT0gbnVsbCkgeworICAgICAgICAgICAgY29tcG9uZW50U3Rh
Y2tJbmZvID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRTdGFja0FkZGVuZHVtQnlJRChkZWJ1
Z0lEKTsKKyAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgIT09IG51bGwpIHsKKyAgICAgICAg
ICAgIGNvbXBvbmVudFN0YWNrSW5mbyA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0Q3VycmVu
dFN0YWNrQWRkZW5kdW0oZWxlbWVudCk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ0ZhaWxl
ZCAlcyB0eXBlOiAlcyVzJywgbG9jYXRpb24sIGVycm9yLm1lc3NhZ2UsIGNvbXBvbmVudFN0YWNr
SW5mbykgOiB2b2lkIDA7CisgICAgICB9CisgICAgfQorICB9Cit9CisKK21vZHVsZS5leHBvcnRz
ID0gY2hlY2tSZWFjdFR5cGVTcGVjOworfSkuY2FsbCh0aGlzLHVuZGVmaW5lZCkKK30seyIxNCI6
MTQsIjE2IjoxNiwiMjUiOjI1LCIyOSI6MjksIjMwIjozMCwiNyI6N31dLDIyOltmdW5jdGlvbihf
ZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwg
RmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3Vy
Y2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4g
dGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNl
IHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZv
dW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqIAor
ICovCisKKyd1c2Ugc3RyaWN0JzsKKworLyogZ2xvYmFsIFN5bWJvbCAqLworCit2YXIgSVRFUkFU
T1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0
b3I7Cit2YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7IC8vIEJlZm9yZSBT
eW1ib2wgc3BlYy4KKworLyoqCisgKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rp
b24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBvYmplY3QuCisgKgorICogQmUgc3VyZSB0byBp
bnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZXJhYmxlIGFzIGNvbnRleHQ6CisgKgorICog
ICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihteUl0ZXJhYmxlKTsKKyAqICAgICBp
ZiAoaXRlcmF0b3JGbikgeworICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxs
KG15SXRlcmFibGUpOworICogICAgICAgLi4uCisgKiAgICAgfQorICoKKyAqIEBwYXJhbSB7P29i
amVjdH0gbWF5YmVJdGVyYWJsZQorICogQHJldHVybiB7P2Z1bmN0aW9ufQorICovCitmdW5jdGlv
biBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHsKKyAgdmFyIGl0ZXJhdG9yRm4gPSBtYXli
ZUl0ZXJhYmxlICYmIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9T
WU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKTsKKyAgaWYgKHR5
cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7CisgICAgcmV0dXJuIGl0ZXJhdG9yRm47
CisgIH0KK30KKworbW9kdWxlLmV4cG9ydHMgPSBnZXRJdGVyYXRvckZuOworfSx7fV0sMjM6W2Z1
bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1w
cmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBm
b3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhp
cyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBj
YW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisg
KgorICogCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgbmV4dERlYnVnSUQgPSAxOworCitm
dW5jdGlvbiBnZXROZXh0RGVidWdJRCgpIHsKKyAgcmV0dXJuIG5leHREZWJ1Z0lEKys7Cit9CisK
K21vZHVsZS5leHBvcnRzID0gZ2V0TmV4dERlYnVnSUQ7Cit9LHt9XSwyNDpbZnVuY3Rpb24oX2Rl
cmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZh
Y2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNl
IGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRo
ZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0
cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKyd1
c2Ugc3RyaWN0JzsKKwordmFyIF9wcm9kSW52YXJpYW50ID0gX2RlcmVxXygyNSk7CisKK3ZhciBS
ZWFjdEVsZW1lbnQgPSBfZGVyZXFfKDEwKTsKKwordmFyIGludmFyaWFudCA9IF9kZXJlcV8oMjkp
OworCisvKioKKyAqIFJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGluIGEgY29sbGVjdGlvbiBvZiBj
aGlsZHJlbiBhbmQgdmVyaWZpZXMgdGhhdCB0aGVyZQorICogaXMgb25seSBvbmUgY2hpbGQgaW4g
dGhlIGNvbGxlY3Rpb24uCisgKgorICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3Jl
YWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNoaWxkcmVuLm9ubHkKKyAqCisgKiBU
aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBh
IHNpbmdsZSBjaGlsZCBnZXRzCisgKiBwYXNzZWQgd2l0aG91dCBhIHdyYXBwZXIsIGJ1dCB0aGUg
cHVycG9zZSBvZiB0aGlzIGhlbHBlciBmdW5jdGlvbiBpcyB0bworICogYWJzdHJhY3QgYXdheSB0
aGUgcGFydGljdWxhciBzdHJ1Y3R1cmUgb2YgY2hpbGRyZW4uCisgKgorICogQHBhcmFtIHs/b2Jq
ZWN0fSBjaGlsZHJlbiBDaGlsZCBjb2xsZWN0aW9uIHN0cnVjdHVyZS4KKyAqIEByZXR1cm4ge1Jl
YWN0RWxlbWVudH0gVGhlIGZpcnN0IGFuZCBvbmx5IGBSZWFjdEVsZW1lbnRgIGNvbnRhaW5lZCBp
biB0aGUKKyAqIHN0cnVjdHVyZS4KKyAqLworZnVuY3Rpb24gb25seUNoaWxkKGNoaWxkcmVuKSB7
CisgICFSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pID8gImRldmVsb3BtZW50
IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3QuQ2hpbGRyZW4ub25s
eSBleHBlY3RlZCB0byByZWNlaXZlIGEgc2luZ2xlIFJlYWN0IGVsZW1lbnQgY2hpbGQuJykgOiBf
cHJvZEludmFyaWFudCgnMTQzJykgOiB2b2lkIDA7CisgIHJldHVybiBjaGlsZHJlbjsKK30KKwor
bW9kdWxlLmV4cG9ydHMgPSBvbmx5Q2hpbGQ7Cit9LHsiMTAiOjEwLCIyNSI6MjUsIjI5IjoyOX1d
LDI1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0
IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHls
ZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVj
dG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRl
bnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRp
cmVjdG9yeS4KKyAqCisgKiAKKyAqLworJ3VzZSBzdHJpY3QnOworCisvKioKKyAqIFdBUk5JTkc6
IERPIE5PVCBtYW51YWxseSByZXF1aXJlIHRoaXMgbW9kdWxlLgorICogVGhpcyBpcyBhIHJlcGxh
Y2VtZW50IGZvciBgaW52YXJpYW50KC4uLilgIHVzZWQgYnkgdGhlIGVycm9yIGNvZGUgc3lzdGVt
CisgKiBhbmQgd2lsbCBfb25seV8gYmUgcmVxdWlyZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcgYmFi
ZWwgcGFzcy4KKyAqIEl0IGFsd2F5cyB0aHJvd3MuCisgKi8KKworZnVuY3Rpb24gcmVhY3RQcm9k
SW52YXJpYW50KGNvZGUpIHsKKyAgdmFyIGFyZ0NvdW50ID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7
CisKKyAgdmFyIG1lc3NhZ2UgPSAnTWluaWZpZWQgUmVhY3QgZXJyb3IgIycgKyBjb2RlICsgJzsg
dmlzaXQgJyArICdodHRwOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvZXJyb3ItZGVj
b2Rlci5odG1sP2ludmFyaWFudD0nICsgY29kZTsKKworICBmb3IgKHZhciBhcmdJZHggPSAwOyBh
cmdJZHggPCBhcmdDb3VudDsgYXJnSWR4KyspIHsKKyAgICBtZXNzYWdlICs9ICcmYXJnc1tdPScg
KyBlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW2FyZ0lkeCArIDFdKTsKKyAgfQorCisgIG1l
c3NhZ2UgKz0gJyBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBk
ZXYgZW52aXJvbm1lbnQnICsgJyBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1
bCB3YXJuaW5ncy4nOworCisgIHZhciBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTsKKyAgZXJy
b3IubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJzsKKyAgZXJyb3IuZnJhbWVzVG9Qb3AgPSAx
OyAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IHJlYWN0UHJvZEludmFyaWFudCdzIG93biBmcmFtZQor
CisgIHRocm93IGVycm9yOworfQorCittb2R1bGUuZXhwb3J0cyA9IHJlYWN0UHJvZEludmFyaWFu
dDsKK30se31dLDI2OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICog
Q29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNE
LXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
ZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9m
IHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNh
bWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBfcHJvZEludmFy
aWFudCA9IF9kZXJlcV8oMjUpOworCit2YXIgUmVhY3RDdXJyZW50T3duZXIgPSBfZGVyZXFfKDgp
OwordmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IF9kZXJlcV8oMTEpOworCit2YXIgZ2V0SXRlcmF0
b3JGbiA9IF9kZXJlcV8oMjIpOwordmFyIGludmFyaWFudCA9IF9kZXJlcV8oMjkpOwordmFyIEtl
eUVzY2FwZVV0aWxzID0gX2RlcmVxXygxKTsKK3ZhciB3YXJuaW5nID0gX2RlcmVxXygzMCk7CisK
K3ZhciBTRVBBUkFUT1IgPSAnLic7Cit2YXIgU1VCU0VQQVJBVE9SID0gJzonOworCisvKioKKyAq
IFRoaXMgaXMgaW5saW5lZCBmcm9tIFJlYWN0RWxlbWVudCBzaW5jZSB0aGlzIGZpbGUgaXMgc2hh
cmVkIGJldHdlZW4KKyAqIGlzb21vcnBoaWMgYW5kIHJlbmRlcmVycy4gV2UgY291bGQgZXh0cmFj
dCB0aGlzIHRvIGEKKyAqCisgKi8KKworLyoqCisgKiBUT0RPOiBUZXN0IHRoYXQgYSBzaW5nbGUg
Y2hpbGQgYW5kIGFuIGFycmF5IHdpdGggb25lIGl0ZW0gaGF2ZSB0aGUgc2FtZSBrZXkKKyAqIHBh
dHRlcm4uCisgKi8KKwordmFyIGRpZFdhcm5BYm91dE1hcHMgPSBmYWxzZTsKKworLyoqCisgKiBH
ZW5lcmF0ZSBhIGtleSBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIGEgY29tcG9uZW50IHdpdGhpbiBh
IHNldC4KKyAqCisgKiBAcGFyYW0geyp9IGNvbXBvbmVudCBBIGNvbXBvbmVudCB0aGF0IGNvdWxk
IGNvbnRhaW4gYSBtYW51YWwga2V5LgorICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IHRo
YXQgaXMgdXNlZCBpZiBhIG1hbnVhbCBrZXkgaXMgbm90IHByb3ZpZGVkLgorICogQHJldHVybiB7
c3RyaW5nfQorICovCitmdW5jdGlvbiBnZXRDb21wb25lbnRLZXkoY29tcG9uZW50LCBpbmRleCkg
eworICAvLyBEbyBzb21lIHR5cGVjaGVja2luZyBoZXJlIHNpbmNlIHdlIGNhbGwgdGhpcyBibGlu
ZGx5LiBXZSB3YW50IHRvIGVuc3VyZQorICAvLyB0aGF0IHdlIGRvbid0IGJsb2NrIHBvdGVudGlh
bCBmdXR1cmUgRVMgQVBJcy4KKyAgaWYgKGNvbXBvbmVudCAmJiB0eXBlb2YgY29tcG9uZW50ID09
PSAnb2JqZWN0JyAmJiBjb21wb25lbnQua2V5ICE9IG51bGwpIHsKKyAgICAvLyBFeHBsaWNpdCBr
ZXkKKyAgICByZXR1cm4gS2V5RXNjYXBlVXRpbHMuZXNjYXBlKGNvbXBvbmVudC5rZXkpOworICB9
CisgIC8vIEltcGxpY2l0IGtleSBkZXRlcm1pbmVkIGJ5IHRoZSBpbmRleCBpbiB0aGUgc2V0Cisg
IHJldHVybiBpbmRleC50b1N0cmluZygzNik7Cit9CisKKy8qKgorICogQHBhcmFtIHs/Kn0gY2hp
bGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuCisgKiBAcGFyYW0geyFzdHJpbmd9IG5hbWVT
b0ZhciBOYW1lIG9mIHRoZSBrZXkgcGF0aCBzbyBmYXIuCisgKiBAcGFyYW0geyFmdW5jdGlvbn0g
Y2FsbGJhY2sgQ2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZWFjaCBjaGlsZCBmb3VuZC4KKyAqIEBw
YXJhbSB7Pyp9IHRyYXZlcnNlQ29udGV4dCBVc2VkIHRvIHBhc3MgaW5mb3JtYXRpb24gdGhyb3Vn
aG91dCB0aGUgdHJhdmVyc2FsCisgKiBwcm9jZXNzLgorICogQHJldHVybiB7IW51bWJlcn0gVGhl
IG51bWJlciBvZiBjaGlsZHJlbiBpbiB0aGlzIHN1YnRyZWUuCisgKi8KK2Z1bmN0aW9uIHRyYXZl
cnNlQWxsQ2hpbGRyZW5JbXBsKGNoaWxkcmVuLCBuYW1lU29GYXIsIGNhbGxiYWNrLCB0cmF2ZXJz
ZUNvbnRleHQpIHsKKyAgdmFyIHR5cGUgPSB0eXBlb2YgY2hpbGRyZW47CisKKyAgaWYgKHR5cGUg
PT09ICd1bmRlZmluZWQnIHx8IHR5cGUgPT09ICdib29sZWFuJykgeworICAgIC8vIEFsbCBvZiB0
aGUgYWJvdmUgYXJlIHBlcmNlaXZlZCBhcyBudWxsLgorICAgIGNoaWxkcmVuID0gbnVsbDsKKyAg
fQorCisgIGlmIChjaGlsZHJlbiA9PT0gbnVsbCB8fCB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBl
ID09PSAnbnVtYmVyJyB8fAorICAvLyBUaGUgZm9sbG93aW5nIGlzIGlubGluZWQgZnJvbSBSZWFj
dEVsZW1lbnQuIFRoaXMgbWVhbnMgd2UgY2FuIG9wdGltaXplCisgIC8vIHNvbWUgY2hlY2tzLiBS
ZWFjdCBGaWJlciBhbHNvIGlubGluZXMgdGhpcyBsb2dpYyBmb3Igc2ltaWxhciBwdXJwb3Nlcy4K
KyAgdHlwZSA9PT0gJ29iamVjdCcgJiYgY2hpbGRyZW4uJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1F
TlRfVFlQRSkgeworICAgIGNhbGxiYWNrKHRyYXZlcnNlQ29udGV4dCwgY2hpbGRyZW4sCisgICAg
Ly8gSWYgaXQncyB0aGUgb25seSBjaGlsZCwgdHJlYXQgdGhlIG5hbWUgYXMgaWYgaXQgd2FzIHdy
YXBwZWQgaW4gYW4gYXJyYXkKKyAgICAvLyBzbyB0aGF0IGl0J3MgY29uc2lzdGVudCBpZiB0aGUg
bnVtYmVyIG9mIGNoaWxkcmVuIGdyb3dzLgorICAgIG5hbWVTb0ZhciA9PT0gJycgPyBTRVBBUkFU
T1IgKyBnZXRDb21wb25lbnRLZXkoY2hpbGRyZW4sIDApIDogbmFtZVNvRmFyKTsKKyAgICByZXR1
cm4gMTsKKyAgfQorCisgIHZhciBjaGlsZDsKKyAgdmFyIG5leHROYW1lOworICB2YXIgc3VidHJl
ZUNvdW50ID0gMDsgLy8gQ291bnQgb2YgY2hpbGRyZW4gZm91bmQgaW4gdGhlIGN1cnJlbnQgc3Vi
dHJlZS4KKyAgdmFyIG5leHROYW1lUHJlZml4ID0gbmFtZVNvRmFyID09PSAnJyA/IFNFUEFSQVRP
UiA6IG5hbWVTb0ZhciArIFNVQlNFUEFSQVRPUjsKKworICBpZiAoQXJyYXkuaXNBcnJheShjaGls
ZHJlbikpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7
CisgICAgICBjaGlsZCA9IGNoaWxkcmVuW2ldOworICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVBy
ZWZpeCArIGdldENvbXBvbmVudEtleShjaGlsZCwgaSk7CisgICAgICBzdWJ0cmVlQ291bnQgKz0g
dHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGQsIG5leHROYW1lLCBjYWxsYmFjaywgdHJhdmVy
c2VDb250ZXh0KTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJ
dGVyYXRvckZuKGNoaWxkcmVuKTsKKyAgICBpZiAoaXRlcmF0b3JGbikgeworICAgICAgdmFyIGl0
ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGNoaWxkcmVuKTsKKyAgICAgIHZhciBzdGVwOworICAg
ICAgaWYgKGl0ZXJhdG9yRm4gIT09IGNoaWxkcmVuLmVudHJpZXMpIHsKKyAgICAgICAgdmFyIGlp
ID0gMDsKKyAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkgewor
ICAgICAgICAgIGNoaWxkID0gc3RlcC52YWx1ZTsKKyAgICAgICAgICBuZXh0TmFtZSA9IG5leHRO
YW1lUHJlZml4ICsgZ2V0Q29tcG9uZW50S2V5KGNoaWxkLCBpaSsrKTsKKyAgICAgICAgICBzdWJ0
cmVlQ291bnQgKz0gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGQsIG5leHROYW1lLCBjYWxs
YmFjaywgdHJhdmVyc2VDb250ZXh0KTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgICAgICAgIHZhciBt
YXBzQXNDaGlsZHJlbkFkZGVuZHVtID0gJyc7CisgICAgICAgICAgaWYgKFJlYWN0Q3VycmVudE93
bmVyLmN1cnJlbnQpIHsKKyAgICAgICAgICAgIHZhciBtYXBzQXNDaGlsZHJlbk93bmVyTmFtZSA9
IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQuZ2V0TmFtZSgpOworICAgICAgICAgICAgaWYgKG1h
cHNBc0NoaWxkcmVuT3duZXJOYW1lKSB7CisgICAgICAgICAgICAgIG1hcHNBc0NoaWxkcmVuQWRk
ZW5kdW0gPSAnIENoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbWFwc0FzQ2hpbGRyZW5P
d25lck5hbWUgKyAnYC4nOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICAi
ZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGRpZFdhcm5BYm91dE1hcHMs
ICdVc2luZyBNYXBzIGFzIGNoaWxkcmVuIGlzIG5vdCB5ZXQgZnVsbHkgc3VwcG9ydGVkLiBJdCBp
cyBhbiAnICsgJ2V4cGVyaW1lbnRhbCBmZWF0dXJlIHRoYXQgbWlnaHQgYmUgcmVtb3ZlZC4gQ29u
dmVydCBpdCB0byBhICcgKyAnc2VxdWVuY2UgLyBpdGVyYWJsZSBvZiBrZXllZCBSZWFjdEVsZW1l
bnRzIGluc3RlYWQuJXMnLCBtYXBzQXNDaGlsZHJlbkFkZGVuZHVtKSA6IHZvaWQgMDsKKyAgICAg
ICAgICBkaWRXYXJuQWJvdXRNYXBzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBJdGVy
YXRvciB3aWxsIHByb3ZpZGUgZW50cnkgW2ssdl0gdHVwbGVzIHJhdGhlciB0aGFuIHZhbHVlcy4K
KyAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkgeworICAgICAg
ICAgIHZhciBlbnRyeSA9IHN0ZXAudmFsdWU7CisgICAgICAgICAgaWYgKGVudHJ5KSB7CisgICAg
ICAgICAgICBjaGlsZCA9IGVudHJ5WzFdOworICAgICAgICAgICAgbmV4dE5hbWUgPSBuZXh0TmFt
ZVByZWZpeCArIEtleUVzY2FwZVV0aWxzLmVzY2FwZShlbnRyeVswXSkgKyBTVUJTRVBBUkFUT1Ig
KyBnZXRDb21wb25lbnRLZXkoY2hpbGQsIDApOworICAgICAgICAgICAgc3VidHJlZUNvdW50ICs9
IHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKGNoaWxkLCBuZXh0TmFtZSwgY2FsbGJhY2ssIHRyYXZl
cnNlQ29udGV4dCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfSBlbHNl
IGlmICh0eXBlID09PSAnb2JqZWN0JykgeworICAgICAgdmFyIGFkZGVuZHVtID0gJyc7CisgICAg
ICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICAgIGFkZGVuZHVt
ID0gJyBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNl
IGFuIGFycmF5ICcgKyAnaW5zdGVhZCBvciB3cmFwIHRoZSBvYmplY3QgdXNpbmcgY3JlYXRlRnJh
Z21lbnQob2JqZWN0KSBmcm9tIHRoZSAnICsgJ1JlYWN0IGFkZC1vbnMuJzsKKyAgICAgICAgaWYg
KGNoaWxkcmVuLl9pc1JlYWN0RWxlbWVudCkgeworICAgICAgICAgIGFkZGVuZHVtID0gJyBJdCBs
b29rcyBsaWtlIHlvdVwncmUgdXNpbmcgYW4gZWxlbWVudCBjcmVhdGVkIGJ5IGEgZGlmZmVyZW50
ICcgKyAndmVyc2lvbiBvZiBSZWFjdC4gTWFrZSBzdXJlIHRvIHVzZSBvbmx5IG9uZSBjb3B5IG9m
IFJlYWN0Lic7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFJlYWN0Q3VycmVudE93bmVyLmN1cnJl
bnQpIHsKKyAgICAgICAgICB2YXIgbmFtZSA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQuZ2V0
TmFtZSgpOworICAgICAgICAgIGlmIChuYW1lKSB7CisgICAgICAgICAgICBhZGRlbmR1bSArPSAn
IENoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7CisgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICB9CisgICAgICB2YXIgY2hpbGRyZW5TdHJpbmcgPSBTdHJpbmco
Y2hpbGRyZW4pOworICAgICAgIWZhbHNlID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24n
ID8gaW52YXJpYW50KGZhbHNlLCAnT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hp
bGQgKGZvdW5kOiAlcykuJXMnLCBjaGlsZHJlblN0cmluZyA9PT0gJ1tvYmplY3QgT2JqZWN0XScg
PyAnb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKGNoaWxkcmVuKS5qb2luKCcsICcp
ICsgJ30nIDogY2hpbGRyZW5TdHJpbmcsIGFkZGVuZHVtKSA6IF9wcm9kSW52YXJpYW50KCczMScs
IGNoaWxkcmVuU3RyaW5nID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlz
IHsnICsgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4oJywgJykgKyAnfScgOiBjaGlsZHJlblN0
cmluZywgYWRkZW5kdW0pIDogdm9pZCAwOworICAgIH0KKyAgfQorCisgIHJldHVybiBzdWJ0cmVl
Q291bnQ7Cit9CisKKy8qKgorICogVHJhdmVyc2VzIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxs
eSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYCwgYnV0CisgKiBtaWdodCBhbHNvIGJlIHNw
ZWNpZmllZCB0aHJvdWdoIGF0dHJpYnV0ZXM6CisgKgorICogLSBgdHJhdmVyc2VBbGxDaGlsZHJl
bih0aGlzLnByb3BzLmNoaWxkcmVuLCAuLi4pYAorICogLSBgdHJhdmVyc2VBbGxDaGlsZHJlbih0
aGlzLnByb3BzLmxlZnRQYW5lbENoaWxkcmVuLCAuLi4pYAorICoKKyAqIFRoZSBgdHJhdmVyc2VD
b250ZXh0YCBpcyBhbiBvcHRpb25hbCBhcmd1bWVudCB0aGF0IGlzIHBhc3NlZCB0aHJvdWdoIHRo
ZQorICogZW50aXJlIHRyYXZlcnNhbC4gSXQgY2FuIGJlIHVzZWQgdG8gc3RvcmUgYWNjdW11bGF0
aW9ucyBvciBhbnl0aGluZyBlbHNlIHRoYXQKKyAqIHRoZSBjYWxsYmFjayBtaWdodCBmaW5kIHJl
bGV2YW50LgorICoKKyAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgb2JqZWN0
LgorICogQHBhcmFtIHshZnVuY3Rpb259IGNhbGxiYWNrIFRvIGludm9rZSB1cG9uIHRyYXZlcnNp
bmcgZWFjaCBjaGlsZC4KKyAqIEBwYXJhbSB7Pyp9IHRyYXZlcnNlQ29udGV4dCBDb250ZXh0IGZv
ciB0cmF2ZXJzYWwuCisgKiBAcmV0dXJuIHshbnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoaWxkcmVu
IGluIHRoaXMgc3VidHJlZS4KKyAqLworZnVuY3Rpb24gdHJhdmVyc2VBbGxDaGlsZHJlbihjaGls
ZHJlbiwgY2FsbGJhY2ssIHRyYXZlcnNlQ29udGV4dCkgeworICBpZiAoY2hpbGRyZW4gPT0gbnVs
bCkgeworICAgIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIHRyYXZlcnNlQWxsQ2hpbGRyZW5J
bXBsKGNoaWxkcmVuLCAnJywgY2FsbGJhY2ssIHRyYXZlcnNlQ29udGV4dCk7Cit9CisKK21vZHVs
ZS5leHBvcnRzID0gdHJhdmVyc2VBbGxDaGlsZHJlbjsKK30seyIxIjoxLCIxMSI6MTEsIjIyIjoy
MiwiMjUiOjI1LCIyOSI6MjksIjMwIjozMCwiOCI6OH1dLDI3OltmdW5jdGlvbihfZGVyZXFfLG1v
ZHVsZSxleHBvcnRzKXsKKyJ1c2Ugc3RyaWN0IjsKKworLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vu
c2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9m
IHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdo
dHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5
LgorICoKKyAqIAorICovCisKK2Z1bmN0aW9uIG1ha2VFbXB0eUZ1bmN0aW9uKGFyZykgeworICBy
ZXR1cm4gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiBhcmc7CisgIH07Cit9CisKKy8qKgorICog
VGhpcyBmdW5jdGlvbiBhY2NlcHRzIGFuZCBkaXNjYXJkcyBpbnB1dHM7IGl0IGhhcyBubyBzaWRl
IGVmZmVjdHMuIFRoaXMgaXMKKyAqIHByaW1hcmlseSB1c2VmdWwgaWRpb21hdGljYWxseSBmb3Ig
b3ZlcnJpZGFibGUgZnVuY3Rpb24gZW5kcG9pbnRzIHdoaWNoCisgKiBhbHdheXMgbmVlZCB0byBi
ZSBjYWxsYWJsZSwgc2luY2UgSlMgbGFja3MgYSBudWxsLWNhbGwgaWRpb20gYWxhIENvY29hLgor
ICovCit2YXIgZW1wdHlGdW5jdGlvbiA9IGZ1bmN0aW9uIGVtcHR5RnVuY3Rpb24oKSB7fTsKKwor
ZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJucyA9IG1ha2VFbXB0eUZ1bmN0aW9uOworZW1wdHlGdW5j
dGlvbi50aGF0UmV0dXJuc0ZhbHNlID0gbWFrZUVtcHR5RnVuY3Rpb24oZmFsc2UpOworZW1wdHlG
dW5jdGlvbi50aGF0UmV0dXJuc1RydWUgPSBtYWtlRW1wdHlGdW5jdGlvbih0cnVlKTsKK2VtcHR5
RnVuY3Rpb24udGhhdFJldHVybnNOdWxsID0gbWFrZUVtcHR5RnVuY3Rpb24obnVsbCk7CitlbXB0
eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVGhpcyA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuIHRoaXM7
Cit9OworZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0FyZ3VtZW50ID0gZnVuY3Rpb24gKGFyZykg
eworICByZXR1cm4gYXJnOworfTsKKworbW9kdWxlLmV4cG9ydHMgPSBlbXB0eUZ1bmN0aW9uOwor
fSx7fV0sMjg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5
cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNE
LXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
ZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9m
IHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNh
bWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBlbXB0eU9iamVj
dCA9IHt9OworCitpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgIE9iamVj
dC5mcmVlemUoZW1wdHlPYmplY3QpOworfQorCittb2R1bGUuZXhwb3J0cyA9IGVtcHR5T2JqZWN0
OworfSx7fV0sMjk6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBD
b3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUg
QlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJv
b3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAq
IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhl
IHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKKy8qKgorICogVXNl
IGludmFyaWFudCgpIHRvIGFzc2VydCBzdGF0ZSB3aGljaCB5b3VyIHByb2dyYW0gYXNzdW1lcyB0
byBiZSB0cnVlLgorICoKKyAqIFByb3ZpZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMg
aXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzCisgKiB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFi
b3V0IHdoYXQgYnJva2UgYW5kIHdoYXQgeW91IHdlcmUKKyAqIGV4cGVjdGluZy4KKyAqCisgKiBU
aGUgaW52YXJpYW50IG1lc3NhZ2Ugd2lsbCBiZSBzdHJpcHBlZCBpbiBwcm9kdWN0aW9uLCBidXQg
dGhlIGludmFyaWFudAorICogd2lsbCByZW1haW4gdG8gZW5zdXJlIGxvZ2ljIGRvZXMgbm90IGRp
ZmZlciBpbiBwcm9kdWN0aW9uLgorICovCisKK3ZhciB2YWxpZGF0ZUZvcm1hdCA9IGZ1bmN0aW9u
IHZhbGlkYXRlRm9ybWF0KGZvcm1hdCkge307CisKK2lmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJv
ZHVjdGlvbicpIHsKKyAgdmFsaWRhdGVGb3JtYXQgPSBmdW5jdGlvbiB2YWxpZGF0ZUZvcm1hdChm
b3JtYXQpIHsKKyAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHsKKyAgICAgIHRocm93IG5l
dyBFcnJvcignaW52YXJpYW50IHJlcXVpcmVzIGFuIGVycm9yIG1lc3NhZ2UgYXJndW1lbnQnKTsK
KyAgICB9CisgIH07Cit9CisKK2Z1bmN0aW9uIGludmFyaWFudChjb25kaXRpb24sIGZvcm1hdCwg
YSwgYiwgYywgZCwgZSwgZikgeworICB2YWxpZGF0ZUZvcm1hdChmb3JtYXQpOworCisgIGlmICgh
Y29uZGl0aW9uKSB7CisgICAgdmFyIGVycm9yOworICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5l
ZCkgeworICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoJ01pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJl
ZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50ICcgKyAnZm9yIHRoZSBmdWxs
IGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nKTsKKyAgICB9
IGVsc2UgeworICAgICAgdmFyIGFyZ3MgPSBbYSwgYiwgYywgZCwgZSwgZl07CisgICAgICB2YXIg
YXJnSW5kZXggPSAwOworICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoZm9ybWF0LnJlcGxhY2UoLyVz
L2csIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107CisgICAg
ICB9KSk7CisgICAgICBlcnJvci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nOworICAgIH0K
KworICAgIGVycm9yLmZyYW1lc1RvUG9wID0gMTsgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCBpbnZh
cmlhbnQncyBvd24gZnJhbWUKKyAgICB0aHJvdyBlcnJvcjsKKyAgfQorfQorCittb2R1bGUuZXhw
b3J0cyA9IGludmFyaWFudDsKK30se31dLDMwOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBv
cnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgRmFjZWJvb2ssIEluYy4KKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1
bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwg
Z3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZp
bGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3Zh
ciBlbXB0eUZ1bmN0aW9uID0gX2RlcmVxXygyNyk7CisKKy8qKgorICogU2ltaWxhciB0byBpbnZh
cmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0
LgorICogVGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmly
b25tZW50cyBpbiBjcml0aWNhbAorICogcGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUg
Zm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2VlcCB0aGUKKyAqIHNhbWUgbG9naWMg
YW5kIGZvbGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLgorICovCisKK3ZhciB3YXJuaW5nID0gZW1w
dHlGdW5jdGlvbjsKKworaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAo
ZnVuY3Rpb24gKCkgeworICAgIHZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbiBwcmludFdhcm5p
bmcoZm9ybWF0KSB7CisgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJn
cyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVu
OyBfa2V5KyspIHsKKyAgICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07Cisg
ICAgICB9CisKKyAgICAgIHZhciBhcmdJbmRleCA9IDA7CisgICAgICB2YXIgbWVzc2FnZSA9ICdX
YXJuaW5nOiAnICsgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
cmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107CisgICAgICB9KTsKKyAgICAgIGlmICh0eXBlb2YgY29u
c29sZSAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTsK
KyAgICAgIH0KKyAgICAgIHRyeSB7CisgICAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2lu
ZyBSZWFjdCAtLS0KKyAgICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVu
aWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrCisgICAgICAgIC8vIHRvIGZpbmQg
dGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLgorICAgICAgICB0
aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7CisgICAgICB9IGNhdGNoICh4KSB7fQorICAgIH07CisK
KyAgICB3YXJuaW5nID0gZnVuY3Rpb24gd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCkgeworICAg
ICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcign
YHdhcm5pbmcoY29uZGl0aW9uLCBmb3JtYXQsIC4uLmFyZ3MpYCByZXF1aXJlcyBhIHdhcm5pbmcg
JyArICdtZXNzYWdlIGFyZ3VtZW50Jyk7CisgICAgICB9CisKKyAgICAgIGlmIChmb3JtYXQuaW5k
ZXhPZignRmFpbGVkIENvbXBvc2l0ZSBwcm9wVHlwZTogJykgPT09IDApIHsKKyAgICAgICAgcmV0
dXJuOyAvLyBJZ25vcmUgQ29tcG9zaXRlQ29tcG9uZW50IHByb3B0eXBlIGNoZWNrLgorICAgICAg
fQorCisgICAgICBpZiAoIWNvbmRpdGlvbikgeworICAgICAgICBmb3IgKHZhciBfbGVuMiA9IGFy
Z3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuMiA+IDIgPyBfbGVuMiAtIDIgOiAwKSwg
X2tleTIgPSAyOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7CisgICAgICAgICAgYXJnc1tfa2V5
MiAtIDJdID0gYXJndW1lbnRzW19rZXkyXTsKKyAgICAgICAgfQorCisgICAgICAgIHByaW50V2Fy
bmluZy5hcHBseSh1bmRlZmluZWQsIFtmb3JtYXRdLmNvbmNhdChhcmdzKSk7CisgICAgICB9Cisg
ICAgfTsKKyAgfSkoKTsKK30KKworbW9kdWxlLmV4cG9ydHMgPSB3YXJuaW5nOworfSx7IjI3Ijoy
N31dLDMxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qCitvYmplY3QtYXNz
aWduCisoYykgU2luZHJlIFNvcmh1cworQGxpY2Vuc2UgTUlUCisqLworCisndXNlIHN0cmljdCc7
CisvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqLwordmFyIGdldE93blByb3BlcnR5
U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7Cit2YXIgaGFzT3duUHJvcGVy
dHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5OwordmFyIHByb3BJc0VudW1lcmFi
bGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlOworCitmdW5jdGlvbiB0
b09iamVjdCh2YWwpIHsKKyAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVk
KSB7CisgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJl
IGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7CisgICAgfQorCisgICAgcmV0dXJuIE9i
amVjdCh2YWwpOworfQorCitmdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7CisgICAgdHJ5IHsK
KyAgICAgICAgaWYgKCFPYmplY3QuYXNzaWduKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKworICAgICAgICAvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRp
b24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuCisKKyAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOAorICAgICAgICB2YXIgdGVz
dDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdy
YXBwZXJzCisgICAgICAgIHRlc3QxWzVdID0gJ2RlJzsKKyAgICAgICAgaWYgKE9iamVjdC5nZXRP
d25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3Jn
L3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2CisgICAgICAgIHZhciB0ZXN0MiA9IHt9OworICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHsKKyAgICAgICAgICAgIHRlc3QyWydf
JyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTsKKyAgICAgICAgfQorICAgICAgICB2YXIg
b3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAo
bikgeworICAgICAgICAgICAgcmV0dXJuIHRlc3QyW25dOworICAgICAgICB9KTsKKyAgICAgICAg
aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0u
b3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2CisgICAgICAgIHZhciB0ZXN0MyA9IHt9Owor
ICAgICAgICAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9u
IChsZXR0ZXIpIHsKKyAgICAgICAgICAgIHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7CisgICAgICAg
IH0pOworICAgICAgICBpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5q
b2luKCcnKSAhPT0KKyAgICAgICAgICAgICAgICAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgZXhwZWN0IGFueSBv
ZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS4KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKworbW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUo
KSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHsKKyAgICB2YXIg
ZnJvbTsKKyAgICB2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpOworICAgIHZhciBzeW1ib2xzOwor
CisgICAgZm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHsKKyAgICAg
ICAgZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pOworCisgICAgICAgIGZvciAodmFyIGtleSBp
biBmcm9tKSB7CisgICAgICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkp
KSB7CisgICAgICAgICAgICAgICAgdG9ba2V5XSA9IGZyb21ba2V5XTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsKKyAgICAg
ICAgICAgIHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7CisgICAgICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICBpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7CisgICAg
ICAgICAgICAgICAgICAgIHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gdG87Cit9OworCit9LHt9XSwzMjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5k
ZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdy
YW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxl
IGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqLworCisndXNlIHN0cmljdCc7CisKK2lmICgiZGV2
ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgdmFyIGludmFyaWFudCA9IF9kZXJlcV8o
MjkpOworICB2YXIgd2FybmluZyA9IF9kZXJlcV8oMzApOworICB2YXIgUmVhY3RQcm9wVHlwZXNT
ZWNyZXQgPSBfZGVyZXFfKDM1KTsKKyAgdmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9OworfQor
CisvKioKKyAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZXMgbWF0Y2ggd2l0aCB0aGUgdHlwZSBzcGVj
cy4KKyAqIEVycm9yIG1lc3NhZ2VzIGFyZSBtZW1vcml6ZWQgYW5kIHdpbGwgb25seSBiZSBzaG93
biBvbmNlLgorICoKKyAqIEBwYXJhbSB7b2JqZWN0fSB0eXBlU3BlY3MgTWFwIG9mIG5hbWUgdG8g
YSBSZWFjdFByb3BUeXBlCisgKiBAcGFyYW0ge29iamVjdH0gdmFsdWVzIFJ1bnRpbWUgdmFsdWVz
IHRoYXQgbmVlZCB0byBiZSB0eXBlLWNoZWNrZWQKKyAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlv
biBlLmcuICJwcm9wIiwgImNvbnRleHQiLCAiY2hpbGQgY29udGV4dCIKKyAqIEBwYXJhbSB7c3Ry
aW5nfSBjb21wb25lbnROYW1lIE5hbWUgb2YgdGhlIGNvbXBvbmVudCBmb3IgZXJyb3IgbWVzc2Fn
ZXMuCisgKiBAcGFyYW0gez9GdW5jdGlvbn0gZ2V0U3RhY2sgUmV0dXJucyB0aGUgY29tcG9uZW50
IHN0YWNrLgorICogQHByaXZhdGUKKyAqLworZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNw
ZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBnZXRTdGFjaykgeworICBpZiAo
ImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgZm9yICh2YXIgdHlwZVNwZWNO
YW1lIGluIHR5cGVTcGVjcykgeworICAgICAgaWYgKHR5cGVTcGVjcy5oYXNPd25Qcm9wZXJ0eSh0
eXBlU3BlY05hbWUpKSB7CisgICAgICAgIHZhciBlcnJvcjsKKyAgICAgICAgLy8gUHJvcCB0eXBl
IHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG8K
KyAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJl
Zm9yZS4gU28gd2UgbG9nIGl0LgorICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xl
YW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuCisgICAgICAgIHRyeSB7CisgICAgICAgICAg
Ly8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJ
dCdzIHRoZSBzYW1lCisgICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRl
bWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLgorICAgICAgICAgIGludmFyaWFudCh0
eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gPT09ICdmdW5jdGlvbicsICclczogJXMgdHlw
ZSBgJXNgIGlzIGludmFsaWQ7IGl0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tICcg
KyAnUmVhY3QuUHJvcFR5cGVzLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgbG9j
YXRpb24sIHR5cGVTcGVjTmFtZSk7CisgICAgICAgICAgZXJyb3IgPSB0eXBlU3BlY3NbdHlwZVNw
ZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51
bGwsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTsKKyAgICAgICAgfSBjYXRjaCAoZXgpIHsKKyAgICAg
ICAgICBlcnJvciA9IGV4OworICAgICAgICB9CisgICAgICAgIHdhcm5pbmcoIWVycm9yIHx8IGVy
cm9yIGluc3RhbmNlb2YgRXJyb3IsICclczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzIGAlc2Ag
aXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBu
dWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBm
b3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3Jl
YXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFu
ZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8
ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvcik7Cisg
ICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IubWVzc2FnZSBpbiBs
b2dnZWRUeXBlRmFpbHVyZXMpKSB7CisgICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFp
bHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlCisgICAgICAg
ICAgLy8gc2FtZSBlcnJvci4KKyAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IubWVz
c2FnZV0gPSB0cnVlOworCisgICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFj
aygpIDogJyc7CisKKyAgICAgICAgICB3YXJuaW5nKGZhbHNlLCAnRmFpbGVkICVzIHR5cGU6ICVz
JXMnLCBsb2NhdGlvbiwgZXJyb3IubWVzc2FnZSwgc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycp
OworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9Cit9CisKK21vZHVsZS5leHBvcnRzID0g
Y2hlY2tQcm9wVHlwZXM7CisKK30seyIyOSI6MjksIjMwIjozMCwiMzUiOjM1fV0sMzM6W2Z1bmN0
aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVz
ZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3Vu
ZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBz
b3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4g
YmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKi8K
KworJ3VzZSBzdHJpY3QnOworCisvLyBSZWFjdCAxNS41IHJlZmVyZW5jZXMgdGhpcyBtb2R1bGUs
IGFuZCBhc3N1bWVzIFByb3BUeXBlcyBhcmUgc3RpbGwgY2FsbGFibGUgaW4gcHJvZHVjdGlvbi4K
Ky8vIFRoZXJlZm9yZSB3ZSByZS1leHBvcnQgZGV2ZWxvcG1lbnQtb25seSB2ZXJzaW9uIHdpdGgg
YWxsIHRoZSBQcm9wVHlwZXMgY2hlY2tzIGhlcmUuCisvLyBIb3dldmVyIGlmIG9uZSBpcyBtaWdy
YXRpbmcgdG8gdGhlIGBwcm9wLXR5cGVzYCBucG0gbGlicmFyeSwgdGhleSB3aWxsIGdvIHRocm91
Z2ggdGhlCisvLyBgaW5kZXguanNgIGVudHJ5IHBvaW50LCBhbmQgaXQgd2lsbCBicmFuY2ggZGVw
ZW5kaW5nIG9uIHRoZSBlbnZpcm9ubWVudC4KK3ZhciBmYWN0b3J5ID0gX2RlcmVxXygzNCk7Citt
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGlzVmFsaWRFbGVtZW50KSB7CisgIC8vIEl0IGlzIHN0
aWxsIGFsbG93ZWQgaW4gMTUuNS4KKyAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSBmYWxzZTsK
KyAgcmV0dXJuIGZhY3RvcnkoaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpOwor
fTsKKworfSx7IjM0IjozNH1dLDM0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRl
ciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3Jh
bnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUg
aW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIGVtcHR5
RnVuY3Rpb24gPSBfZGVyZXFfKDI3KTsKK3ZhciBpbnZhcmlhbnQgPSBfZGVyZXFfKDI5KTsKK3Zh
ciB3YXJuaW5nID0gX2RlcmVxXygzMCk7CisKK3ZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IF9k
ZXJlcV8oMzUpOwordmFyIGNoZWNrUHJvcFR5cGVzID0gX2RlcmVxXygzMik7CisKK21vZHVsZS5l
eHBvcnRzID0gZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpIHsK
KyAgLyogZ2xvYmFsIFN5bWJvbCAqLworICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5
bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7CisgIHZhciBGQVVYX0lURVJB
VE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLgorCisgIC8q
KgorICAgKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9u
IHRoZSBpdGVyYWJsZSBvYmplY3QuCisgICAqCisgICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBm
dW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OgorICAgKgorICAgKiAgICAgdmFy
IGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpOworICAgKiAgICAgaWYgKGl0
ZXJhdG9yRm4pIHsKKyAgICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15
SXRlcmFibGUpOworICAgKiAgICAgICAuLi4KKyAgICogICAgIH0KKyAgICoKKyAgICogQHBhcmFt
IHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlCisgICAqIEByZXR1cm4gez9mdW5jdGlvbn0KKyAgICov
CisgIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkgeworICAgIHZhciBpdGVy
YXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFi
bGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9M
XSk7CisgICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7CisgICAgICBy
ZXR1cm4gaXRlcmF0b3JGbjsKKyAgICB9CisgIH0KKworICAvKioKKyAgICogQ29sbGVjdGlvbiBv
ZiBtZXRob2RzIHRoYXQgYWxsb3cgZGVjbGFyYXRpb24gYW5kIHZhbGlkYXRpb24gb2YgcHJvcHMg
dGhhdCBhcmUKKyAgICogc3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2Fn
ZToKKyAgICoKKyAgICogICB2YXIgUHJvcHMgPSByZXF1aXJlKCdSZWFjdFByb3BUeXBlcycpOwor
ICAgKiAgIHZhciBNeUFydGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7CisgICAqICAgICBwcm9w
VHlwZXM6IHsKKyAgICogICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIHByb3AgbmFtZWQgImRl
c2NyaXB0aW9uIi4KKyAgICogICAgICAgZGVzY3JpcHRpb246IFByb3BzLnN0cmluZywKKyAgICoK
KyAgICogICAgICAgLy8gQSByZXF1aXJlZCBlbnVtIHByb3AgbmFtZWQgImNhdGVnb3J5Ii4KKyAg
ICogICAgICAgY2F0ZWdvcnk6IFByb3BzLm9uZU9mKFsnTmV3cycsJ1Bob3RvcyddKS5pc1JlcXVp
cmVkLAorICAgKgorICAgKiAgICAgICAvLyBBIHByb3AgbmFtZWQgImRpYWxvZyIgdGhhdCByZXF1
aXJlcyBhbiBpbnN0YW5jZSBvZiBEaWFsb2cuCisgICAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5z
dGFuY2VPZihEaWFsb2cpLmlzUmVxdWlyZWQKKyAgICogICAgIH0sCisgICAqICAgICByZW5kZXI6
IGZ1bmN0aW9uKCkgeyAuLi4gfQorICAgKiAgIH0pOworICAgKgorICAgKiBBIG1vcmUgZm9ybWFs
IHNwZWNpZmljYXRpb24gb2YgaG93IHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQ6CisgICAqCisgICAq
ICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4u
Ll0pfGluc3RhbmNlT2YoLi4uKQorICAgKiAgIGRlY2wgOj0gUmVhY3RQcm9wVHlwZXMue3R5cGV9
KC5pc1JlcXVpcmVkKT8KKyAgICoKKyAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJv
ZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpcworICAgKiBhbGxv
d3MgdGhlIGNyZWF0aW9uIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gRm9yIGV4YW1w
bGU6CisgICAqCisgICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3MoeworICAgKiAg
ICBwcm9wVHlwZXM6IHsKKyAgICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHBy
b3AgbmFtZWQgImhyZWYiLgorICAgKiAgICAgIGhyZWY6IGZ1bmN0aW9uKHByb3BzLCBwcm9wTmFt
ZSwgY29tcG9uZW50TmFtZSkgeworICAgKiAgICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3By
b3BOYW1lXTsKKyAgICogICAgICAgIGlmIChwcm9wVmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgcHJv
cFZhbHVlICE9PSAnc3RyaW5nJyAmJgorICAgKiAgICAgICAgICAgICEocHJvcFZhbHVlIGluc3Rh
bmNlb2YgVVJJKSkgeworICAgKiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKAorICAgKiAgICAg
ICAgICAgICdFeHBlY3RlZCBhIHN0cmluZyBvciBhbiBVUkkgZm9yICcgKyBwcm9wTmFtZSArICcg
aW4gJyArCisgICAqICAgICAgICAgICAgY29tcG9uZW50TmFtZQorICAgKiAgICAgICAgICApOwor
ICAgKiAgICAgICAgfQorICAgKiAgICAgIH0KKyAgICogICAgfSwKKyAgICogICAgcmVuZGVyOiBm
dW5jdGlvbigpIHsuLi59CisgICAqICB9KTsKKyAgICoKKyAgICogQGludGVybmFsCisgICAqLwor
CisgIHZhciBBTk9OWU1PVVMgPSAnPDxhbm9ueW1vdXM+Pic7CisKKyAgLy8gSW1wb3J0YW50IQor
ICAvLyBLZWVwIHRoaXMgbGlzdCBpbiBzeW5jIHdpdGggcHJvZHVjdGlvbiB2ZXJzaW9uIGluIGAu
L2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qc2AuCisgIHZhciBSZWFjdFByb3BUeXBlcyA9IHsK
KyAgICBhcnJheTogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2FycmF5JyksCisgICAgYm9v
bDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Jvb2xlYW4nKSwKKyAgICBmdW5jOiBjcmVh
dGVQcmltaXRpdmVUeXBlQ2hlY2tlcignZnVuY3Rpb24nKSwKKyAgICBudW1iZXI6IGNyZWF0ZVBy
aW1pdGl2ZVR5cGVDaGVja2VyKCdudW1iZXInKSwKKyAgICBvYmplY3Q6IGNyZWF0ZVByaW1pdGl2
ZVR5cGVDaGVja2VyKCdvYmplY3QnKSwKKyAgICBzdHJpbmc6IGNyZWF0ZVByaW1pdGl2ZVR5cGVD
aGVja2VyKCdzdHJpbmcnKSwKKyAgICBzeW1ib2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2Vy
KCdzeW1ib2wnKSwKKworICAgIGFueTogY3JlYXRlQW55VHlwZUNoZWNrZXIoKSwKKyAgICBhcnJh
eU9mOiBjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIsCisgICAgZWxlbWVudDogY3JlYXRlRWxlbWVu
dFR5cGVDaGVja2VyKCksCisgICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tl
ciwKKyAgICBub2RlOiBjcmVhdGVOb2RlQ2hlY2tlcigpLAorICAgIG9iamVjdE9mOiBjcmVhdGVP
YmplY3RPZlR5cGVDaGVja2VyLAorICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsCisg
ICAgb25lT2ZUeXBlOiBjcmVhdGVVbmlvblR5cGVDaGVja2VyLAorICAgIHNoYXBlOiBjcmVhdGVT
aGFwZVR5cGVDaGVja2VyCisgIH07CisKKyAgLyoqCisgICAqIGlubGluZWQgT2JqZWN0LmlzIHBv
bHlmaWxsIHRvIGF2b2lkIHJlcXVpcmluZyBjb25zdW1lcnMgc2hpcCB0aGVpciBvd24KKyAgICog
aHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9S
ZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzCisgICAqLworICAvKmVzbGludC1kaXNh
YmxlIG5vLXNlbGYtY29tcGFyZSovCisgIGZ1bmN0aW9uIGlzKHgsIHkpIHsKKyAgICAvLyBTYW1l
VmFsdWUgYWxnb3JpdGhtCisgICAgaWYgKHggPT09IHkpIHsKKyAgICAgIC8vIFN0ZXBzIDEtNSwg
Ny0xMAorICAgICAgLy8gU3RlcHMgNi5iLTYuZTogKzAgIT0gLTAKKyAgICAgIHJldHVybiB4ICE9
PSAwIHx8IDEgLyB4ID09PSAxIC8geTsKKyAgICB9IGVsc2UgeworICAgICAgLy8gU3RlcCA2LmE6
IE5hTiA9PSBOYU4KKyAgICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7CisgICAgfQorICB9
CisgIC8qZXNsaW50LWVuYWJsZSBuby1zZWxmLWNvbXBhcmUqLworCisgIC8qKgorICAgKiBXZSB1
c2UgYW4gRXJyb3ItbGlrZSBvYmplY3QgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYXMgcGVv
cGxlIG1heSBjYWxsCisgICAqIFByb3BUeXBlcyBkaXJlY3RseSBhbmQgaW5zcGVjdCB0aGVpciBv
dXRwdXQuIEhvd2V2ZXIsIHdlIGRvbid0IHVzZSByZWFsCisgICAqIEVycm9ycyBhbnltb3JlLiBX
ZSBkb24ndCBpbnNwZWN0IHRoZWlyIHN0YWNrIGFueXdheSwgYW5kIGNyZWF0aW5nIHRoZW0KKyAg
ICogaXMgcHJvaGliaXRpdmVseSBleHBlbnNpdmUgaWYgdGhleSBhcmUgY3JlYXRlZCB0b28gb2Z0
ZW4sIHN1Y2ggYXMgd2hhdAorICAgKiBoYXBwZW5zIGluIG9uZU9mVHlwZSgpIGZvciBhbnkgdHlw
ZSBiZWZvcmUgdGhlIG9uZSB0aGF0IG1hdGNoZWQuCisgICAqLworICBmdW5jdGlvbiBQcm9wVHlw
ZUVycm9yKG1lc3NhZ2UpIHsKKyAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHRoaXMu
c3RhY2sgPSAnJzsKKyAgfQorICAvLyBNYWtlIGBpbnN0YW5jZW9mIEVycm9yYCBzdGlsbCB3b3Jr
IGZvciByZXR1cm5lZCBlcnJvcnMuCisgIFByb3BUeXBlRXJyb3IucHJvdG90eXBlID0gRXJyb3Iu
cHJvdG90eXBlOworCisgIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlk
YXRlKSB7CisgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgICAg
dmFyIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlID0ge307CisgICAgfQorICAgIGZ1bmN0aW9uIGNo
ZWNrVHlwZShpc1JlcXVpcmVkLCBwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0
aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkgeworICAgICAgY29tcG9uZW50TmFtZSA9IGNvbXBv
bmVudE5hbWUgfHwgQU5PTllNT1VTOworICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1l
IHx8IHByb3BOYW1lOworCisgICAgICBpZiAoc2VjcmV0ICE9PSBSZWFjdFByb3BUeXBlc1NlY3Jl
dCkgeworICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2VzcykgeworICAgICAgICAgIC8vIE5l
dyBiZWhhdmlvciBvbmx5IGZvciB1c2VycyBvZiBgcHJvcC10eXBlc2AgcGFja2FnZQorICAgICAg
ICAgIGludmFyaWFudCgKKyAgICAgICAgICAgIGZhbHNlLAorICAgICAgICAgICAgJ0NhbGxpbmcg
UHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHBy
b3AtdHlwZXNgIHBhY2thZ2UuICcgKworICAgICAgICAgICAgJ1VzZSBgUHJvcFR5cGVzLmNoZWNr
UHJvcFR5cGVzKClgIHRvIGNhbGwgdGhlbS4gJyArCisgICAgICAgICAgICAnUmVhZCBtb3JlIGF0
IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcycKKyAgICAgICAgICApOworICAgICAg
ICB9IGVsc2UgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgY29u
c29sZSAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAvLyBPbGQgYmVoYXZpb3IgZm9yIHBl
b3BsZSB1c2luZyBSZWFjdC5Qcm9wVHlwZXMKKyAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21w
b25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7CisgICAgICAgICAgaWYgKCFtYW51YWxQcm9wVHlw
ZUNhbGxDYWNoZVtjYWNoZUtleV0pIHsKKyAgICAgICAgICAgIHdhcm5pbmcoCisgICAgICAgICAg
ICAgIGZhbHNlLAorICAgICAgICAgICAgICAnWW91IGFyZSBtYW51YWxseSBjYWxsaW5nIGEgUmVh
Y3QuUHJvcFR5cGVzIHZhbGlkYXRpb24gJyArCisgICAgICAgICAgICAgICdmdW5jdGlvbiBmb3Ig
dGhlIGAlc2AgcHJvcCBvbiBgJXNgLiBUaGlzIGlzIGRlcHJlY2F0ZWQgJyArCisgICAgICAgICAg
ICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2Fn
ZS4gJyArCisgICAgICAgICAgICAgICdZb3UgbWF5IGJlIHNlZWluZyB0aGlzIHdhcm5pbmcgZHVl
IHRvIGEgdGhpcmQtcGFydHkgUHJvcFR5cGVzICcgKworICAgICAgICAgICAgICAnbGlicmFyeS4g
U2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtd2FybmluZy1kb250LWNhbGwtcHJvcHR5cGVzICcgKyAn
Zm9yIGRldGFpbHMuJywKKyAgICAgICAgICAgICAgcHJvcEZ1bGxOYW1lLAorICAgICAgICAgICAg
ICBjb21wb25lbnROYW1lCisgICAgICAgICAgICApOworICAgICAgICAgICAgbWFudWFsUHJvcFR5
cGVDYWxsQ2FjaGVbY2FjaGVLZXldID0gdHJ1ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgIH0KKyAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkgeworICAgICAgICBpZiAo
aXNSZXF1aXJlZCkgeworICAgICAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IG51bGwpIHsK
KyAgICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiAr
ICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgJyArICgnaW4g
YCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYG51bGxgLicpKTsKKyAg
ICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxv
Y2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBp
biAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgdW5kZWZp
bmVkYC4nKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9IGVsc2Ug
eworICAgICAgICByZXR1cm4gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1l
LCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICB2YXIgY2hh
aW5lZENoZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTsKKyAgICBjaGFpbmVk
Q2hlY2tUeXBlLmlzUmVxdWlyZWQgPSBjaGVja1R5cGUuYmluZChudWxsLCB0cnVlKTsKKworICAg
IHJldHVybiBjaGFpbmVkQ2hlY2tUeXBlOworICB9CisKKyAgZnVuY3Rpb24gY3JlYXRlUHJpbWl0
aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7CisgICAgZnVuY3Rpb24gdmFsaWRhdGUocHJv
cHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNy
ZXQpIHsKKyAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07CisgICAgICB2YXIg
cHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpOworICAgICAgaWYgKHByb3BUeXBlICE9
PSBleHBlY3RlZFR5cGUpIHsKKyAgICAgICAgLy8gYHByb3BWYWx1ZWAgYmVpbmcgaW5zdGFuY2Ug
b2YsIHNheSwgZGF0ZS9yZWdleHAsIHBhc3MgdGhlICdvYmplY3QnCisgICAgICAgIC8vIGNoZWNr
LCBidXQgd2UgY2FuIG9mZmVyIGEgbW9yZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSByYXRo
ZXIgdGhhbgorICAgICAgICAvLyAnb2YgdHlwZSBgb2JqZWN0YCcuCisgICAgICAgIHZhciBwcmVj
aXNlVHlwZSA9IGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSk7CisKKyAgICAgICAgcmV0dXJuIG5l
dyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5h
bWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJlY2lzZVR5cGUgKyAnYCBzdXBwbGllZCB0byBg
JyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2AnICsgZXhwZWN0ZWRUeXBl
ICsgJ2AuJykpOworICAgICAgfQorICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVy
biBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7CisgIH0KKworICBmdW5jdGlv
biBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpIHsKKyAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlw
ZUNoZWNrZXIoZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGwpOworICB9CisKKyAgZnVuY3Rp
b24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7CisgICAgZnVuY3Rpb24g
dmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1
bGxOYW1lKSB7CisgICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7
CisgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVs
bE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFs
aWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuJyk7CisgICAgICB9CisgICAgICB2
YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdOworICAgICAgaWYgKCFBcnJheS5pc0FycmF5
KHByb3BWYWx1ZSkpIHsKKyAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2Nh
dGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5
cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4g
YXJyYXkuJykpOworICAgICAgfQorICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVl
LCBpLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJ1snICsgaSArICdd
JywgUmVhY3RQcm9wVHlwZXNTZWNyZXQpOworICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBF
cnJvcikgeworICAgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgICAgfQorICAgICAgfQorICAg
ICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hl
Y2tlcih2YWxpZGF0ZSk7CisgIH0KKworICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNr
ZXIoKSB7CisgICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnRO
YW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7CisgICAgICB2YXIgcHJvcFZhbHVlID0gcHJv
cHNbcHJvcE5hbWVdOworICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7Cisg
ICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7CisgICAgICAgIHJl
dHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJv
cEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQg
dG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVu
dC4nKSk7CisgICAgICB9CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0dXJuIGNy
ZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTsKKyAgfQorCisgIGZ1bmN0aW9uIGNy
ZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykgeworICAgIGZ1bmN0aW9uIHZh
bGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxs
TmFtZSkgeworICAgICAgaWYgKCEocHJvcHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRD
bGFzcykpIHsKKyAgICAgICAgdmFyIGV4cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5u
YW1lIHx8IEFOT05ZTU9VUzsKKyAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNz
TmFtZShwcm9wc1twcm9wTmFtZV0pOworICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3Io
J0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUg
JyArICgnYCcgKyBhY3R1YWxDbGFzc05hbWUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVu
dE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2luc3RhbmNlIG9mIGAnICsgZXhwZWN0ZWRDbGFz
c05hbWUgKyAnYC4nKSk7CisgICAgICB9CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAg
cmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTsKKyAgfQorCisgIGZ1
bmN0aW9uIGNyZWF0ZUVudW1UeXBlQ2hlY2tlcihleHBlY3RlZFZhbHVlcykgeworICAgIGlmICgh
QXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHsKKyAgICAgICJkZXZlbG9wbWVudCIgIT09
ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVk
IHRvIG9uZU9mLCBleHBlY3RlZCBhbiBpbnN0YW5jZSBvZiBhcnJheS4nKSA6IHZvaWQgMDsKKyAg
ICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zTnVsbDsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9u
LCBwcm9wRnVsbE5hbWUpIHsKKyAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07
CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgIGlmIChpcyhwcm9wVmFsdWUsIGV4cGVjdGVkVmFsdWVzW2ldKSkgeworICAgICAg
ICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHZhciB2YWx1ZXNT
dHJpbmcgPSBKU09OLnN0cmluZ2lmeShleHBlY3RlZFZhbHVlcyk7CisgICAgICByZXR1cm4gbmV3
IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFt
ZSArICdgIG9mIHZhbHVlIGAnICsgcHJvcFZhbHVlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcg
KyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIG9uZSBvZiAnICsgdmFsdWVzU3RyaW5nICsg
Jy4nKSk7CisgICAgfQorICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxp
ZGF0ZSk7CisgIH0KKworICBmdW5jdGlvbiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyKHR5cGVD
aGVja2VyKSB7CisgICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25l
bnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7CisgICAgICBpZiAodHlwZW9mIHR5cGVD
aGVja2VyICE9PSAnZnVuY3Rpb24nKSB7CisgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJv
cignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21w
b25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIG9iamVj
dE9mLicpOworICAgICAgfQorICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTsK
KyAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7CisgICAgICBpZiAo
cHJvcFR5cGUgIT09ICdvYmplY3QnKSB7CisgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJv
cignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlw
ZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1l
ICsgJ2AsIGV4cGVjdGVkIGFuIG9iamVjdC4nKSk7CisgICAgICB9CisgICAgICBmb3IgKHZhciBr
ZXkgaW4gcHJvcFZhbHVlKSB7CisgICAgICAgIGlmIChwcm9wVmFsdWUuaGFzT3duUHJvcGVydHko
a2V5KSkgeworICAgICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwga2V5
LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFj
dFByb3BUeXBlc1NlY3JldCk7CisgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3Ip
IHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgIH0KKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICByZXR1cm4gY3JlYXRlQ2hhaW5h
YmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpOworICB9CisKKyAgZnVuY3Rpb24gY3JlYXRlVW5pb25U
eXBlQ2hlY2tlcihhcnJheU9mVHlwZUNoZWNrZXJzKSB7CisgICAgaWYgKCFBcnJheS5pc0FycmF5
KGFycmF5T2ZUeXBlQ2hlY2tlcnMpKSB7CisgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVj
dGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVP
ZlR5cGUsIGV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIGFycmF5LicpIDogdm9pZCAwOworICAgICAg
cmV0dXJuIGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNOdWxsOworICAgIH0KKworICAgIGZ1bmN0
aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHBy
b3BGdWxsTmFtZSkgeworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNr
ZXJzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVj
a2Vyc1tpXTsKKyAgICAgICAgaWYgKGNoZWNrZXIocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnRO
YW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBSZWFjdFByb3BUeXBlc1NlY3JldCkgPT0gbnVs
bCkgeworICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICB9CisKKyAgICAg
IHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsg
cHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsg
J2AuJykpOworICAgIH0KKyAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFs
aWRhdGUpOworICB9CisKKyAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7CisgICAgZnVu
Y3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwg
cHJvcEZ1bGxOYW1lKSB7CisgICAgICBpZiAoIWlzTm9kZShwcm9wc1twcm9wTmFtZV0pKSB7Cisg
ICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAn
IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnRO
YW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTsKKyAgICAgIH0KKyAgICAgIHJldHVy
biBudWxsOworICAgIH0KKyAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFs
aWRhdGUpOworICB9CisKKyAgZnVuY3Rpb24gY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5
cGVzKSB7CisgICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnRO
YW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7CisgICAgICB2YXIgcHJvcFZhbHVlID0gcHJv
cHNbcHJvcE5hbWVdOworICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVl
KTsKKyAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHsKKyAgICAgICAgcmV0dXJuIG5l
dyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5h
bWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyAr
IGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpOworICAgICAgfQorICAg
ICAgZm9yICh2YXIga2V5IGluIHNoYXBlVHlwZXMpIHsKKyAgICAgICAgdmFyIGNoZWNrZXIgPSBz
aGFwZVR5cGVzW2tleV07CisgICAgICAgIGlmICghY2hlY2tlcikgeworICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisgICAgICAgIHZhciBlcnJvciA9IGNoZWNrZXIocHJvcFZhbHVlLCBr
ZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJl
YWN0UHJvcFR5cGVzU2VjcmV0KTsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgcmV0
dXJuIGVycm9yOworICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9
CisgICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTsKKyAgfQor
CisgIGZ1bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHsKKyAgICBzd2l0Y2ggKHR5cGVvZiBwcm9w
VmFsdWUpIHsKKyAgICAgIGNhc2UgJ251bWJlcic6CisgICAgICBjYXNlICdzdHJpbmcnOgorICAg
ICAgY2FzZSAndW5kZWZpbmVkJzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICBjYXNlICdi
b29sZWFuJzoKKyAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7CisgICAgICBjYXNlICdvYmplY3Qn
OgorICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7CisgICAgICAgICAgcmV0
dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpOworICAgICAgICB9CisgICAgICAgIGlmIChwcm9w
VmFsdWUgPT09IG51bGwgfHwgaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkgeworICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJ
dGVyYXRvckZuKHByb3BWYWx1ZSk7CisgICAgICAgIGlmIChpdGVyYXRvckZuKSB7CisgICAgICAg
ICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7CisgICAgICAgICAg
dmFyIHN0ZXA7CisgICAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IHByb3BWYWx1ZS5lbnRyaWVz
KSB7CisgICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7
CisgICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBb
ayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLgorICAgICAgICAgICAgd2hpbGUgKCEoc3Rl
cCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkgeworICAgICAgICAgICAgICB2YXIgZW50cnkgPSBz
dGVwLnZhbHVlOworICAgICAgICAgICAgICBpZiAoZW50cnkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIWlzTm9kZShlbnRyeVsxXSkpIHsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gaXNTeW1ib2wocHJvcFR5cGUsIHBy
b3BWYWx1ZSkgeworICAgIC8vIE5hdGl2ZSBTeW1ib2wuCisgICAgaWYgKHByb3BUeXBlID09PSAn
c3ltYm9sJykgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gMTkuNC4zLjUg
U3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXSA9PT0gJ1N5bWJvbCcKKyAgICBpZiAocHJv
cFZhbHVlWydAQHRvU3RyaW5nVGFnJ10gPT09ICdTeW1ib2wnKSB7CisgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICAvLyBGYWxsYmFjayBmb3Igbm9uLXNwZWMgY29tcGxpYW50IFN5bWJv
bHMgd2hpY2ggYXJlIHBvbHlmaWxsZWQuCisgICAgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5j
dGlvbicgJiYgcHJvcFZhbHVlIGluc3RhbmNlb2YgU3ltYm9sKSB7CisgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICAvLyBFcXVpdmFsZW50IG9m
IGB0eXBlb2ZgIGJ1dCB3aXRoIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGFycmF5IGFuZCByZWdleHAu
CisgIGZ1bmN0aW9uIGdldFByb3BUeXBlKHByb3BWYWx1ZSkgeworICAgIHZhciBwcm9wVHlwZSA9
IHR5cGVvZiBwcm9wVmFsdWU7CisgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkgewor
ICAgICAgcmV0dXJuICdhcnJheSc7CisgICAgfQorICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2Vv
ZiBSZWdFeHApIHsKKyAgICAgIC8vIE9sZCB3ZWJraXRzIChhdCBsZWFzdCB1bnRpbCBBbmRyb2lk
IDQuMCkgcmV0dXJuICdmdW5jdGlvbicgcmF0aGVyIHRoYW4KKyAgICAgIC8vICdvYmplY3QnIGZv
ciB0eXBlb2YgYSBSZWdFeHAuIFdlJ2xsIG5vcm1hbGl6ZSB0aGlzIGhlcmUgc28gdGhhdCAvYmxh
LworICAgICAgLy8gcGFzc2VzIFByb3BUeXBlcy5vYmplY3QuCisgICAgICByZXR1cm4gJ29iamVj
dCc7CisgICAgfQorICAgIGlmIChpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSkgeworICAg
ICAgcmV0dXJuICdzeW1ib2wnOworICAgIH0KKyAgICByZXR1cm4gcHJvcFR5cGU7CisgIH0KKwor
ICAvLyBUaGlzIGhhbmRsZXMgbW9yZSB0eXBlcyB0aGFuIGBnZXRQcm9wVHlwZWAuIE9ubHkgdXNl
ZCBmb3IgZXJyb3IgbWVzc2FnZXMuCisgIC8vIFNlZSBgY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNr
ZXJgLgorICBmdW5jdGlvbiBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpIHsKKyAgICB2YXIgcHJv
cFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpOworICAgIGlmIChwcm9wVHlwZSA9PT0gJ29i
amVjdCcpIHsKKyAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7CisgICAgICAg
IHJldHVybiAnZGF0ZSc7CisgICAgICB9IGVsc2UgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJl
Z0V4cCkgeworICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7CisgICAgICB9CisgICAgfQorICAgIHJl
dHVybiBwcm9wVHlwZTsKKyAgfQorCisgIC8vIFJldHVybnMgY2xhc3MgbmFtZSBvZiB0aGUgb2Jq
ZWN0LCBpZiBhbnkuCisgIGZ1bmN0aW9uIGdldENsYXNzTmFtZShwcm9wVmFsdWUpIHsKKyAgICBp
ZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUp
IHsKKyAgICAgIHJldHVybiBBTk9OWU1PVVM7CisgICAgfQorICAgIHJldHVybiBwcm9wVmFsdWUu
Y29uc3RydWN0b3IubmFtZTsKKyAgfQorCisgIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVz
ID0gY2hlY2tQcm9wVHlwZXM7CisgIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJv
cFR5cGVzOworCisgIHJldHVybiBSZWFjdFByb3BUeXBlczsKK307CisKK30seyIyNyI6MjcsIjI5
IjoyOSwiMzAiOjMwLCIzMiI6MzIsIjM1IjozNX1dLDM1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVs
ZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIElu
Yy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBs
aWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQ
QVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICovCisKKyd1c2Ugc3RyaWN0JzsK
KwordmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09S
X1lPVV9XSUxMX0JFX0ZJUkVEJzsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1Nl
Y3JldDsKKworfSx7fV19LHt9LFsxOF0pKDE4KQorfSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0L2Rp
c3QvcmVhY3QubWluLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0L2Rp
c3QvcmVhY3QubWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2YTg0NGIwY2E3OGQwYzUwYmEzNWI1OGY3YzY1
MWQxNTExODc2ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21v
ZHVsZXMvcmVhY3QvZGlzdC9yZWFjdC5taW4uanMKQEAgLTAsMCArMSwxMiBAQAorLyoqCisgKiBS
ZWFjdCB2MTUuNS40CisgKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIElu
Yy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBs
aWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQ
QVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworIWZ1bmN0aW9uKHQp
e2lmKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGUp
bW9kdWxlLmV4cG9ydHM9dCgpO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVm
aW5lLmFtZClkZWZpbmUoW10sdCk7ZWxzZXt2YXIgZTtlPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2lu
ZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIh
PXR5cGVvZiBzZWxmP3NlbGY6dGhpcyxlLlJlYWN0PXQoKX19KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1
bmN0aW9uIHQoZSxuLHIpe2Z1bmN0aW9uIG8odSxhKXtpZighblt1XSl7aWYoIWVbdV0pe3ZhciBz
PSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFhJiZzKXJldHVybiBzKHUs
ITApO2lmKGkpcmV0dXJuIGkodSwhMCk7dmFyIGM9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1
bGUgJyIrdSsiJyIpO3Rocm93IGMuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsY312YXIgbD1uW3Vd
PXtleHBvcnRzOnt9fTtlW3VdWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKHQpe3ZhciBuPWVb
dV1bMV1bdF07cmV0dXJuIG8obnx8dCl9LGwsbC5leHBvcnRzLHQsZSxuLHIpfXJldHVybiBuW3Vd
LmV4cG9ydHN9Zm9yKHZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLHU9
MDt1PHIubGVuZ3RoO3UrKylvKHJbdV0pO3JldHVybiBvfSh7MTpbZnVuY3Rpb24odCxlLG4peyJ1
c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3ZhciBlPXsiPSI6Ij0wIiwiOiI6Ij0yIn07cmV0dXJu
IiQiKygiIit0KS5yZXBsYWNlKC9bPTpdL2csZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KX1mdW5j
dGlvbiBvKHQpe3ZhciBlPXsiPTAiOiI9IiwiPTIiOiI6In07cmV0dXJuKCIiKygiLiI9PT10WzBd
JiYiJCI9PT10WzFdP3Quc3Vic3RyaW5nKDIpOnQuc3Vic3RyaW5nKDEpKSkucmVwbGFjZSgvKD0w
fD0yKS9nLGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSl9dmFyIGk9e2VzY2FwZTpyLHVuZXNjYXBl
Om99O2UuZXhwb3J0cz1pfSx7fV0sMjpbZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIg
cj10KDIwKSxvPSh0KDI0KSxmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKGUuaW5zdGFuY2VQb29s
Lmxlbmd0aCl7dmFyIG49ZS5pbnN0YW5jZVBvb2wucG9wKCk7cmV0dXJuIGUuY2FsbChuLHQpLG59
cmV0dXJuIG5ldyBlKHQpfSksaT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7aWYobi5pbnN0YW5j
ZVBvb2wubGVuZ3RoKXt2YXIgcj1uLmluc3RhbmNlUG9vbC5wb3AoKTtyZXR1cm4gbi5jYWxsKHIs
dCxlKSxyfXJldHVybiBuZXcgbih0LGUpfSx1PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzO2lm
KHIuaW5zdGFuY2VQb29sLmxlbmd0aCl7dmFyIG89ci5pbnN0YW5jZVBvb2wucG9wKCk7cmV0dXJu
IHIuY2FsbChvLHQsZSxuKSxvfXJldHVybiBuZXcgcih0LGUsbil9LGE9ZnVuY3Rpb24odCxlLG4s
cil7dmFyIG89dGhpcztpZihvLmluc3RhbmNlUG9vbC5sZW5ndGgpe3ZhciBpPW8uaW5zdGFuY2VQ
b29sLnBvcCgpO3JldHVybiBvLmNhbGwoaSx0LGUsbixyKSxpfXJldHVybiBuZXcgbyh0LGUsbixy
KX0scz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QgaW5zdGFuY2VvZiBlfHxyKCIyNSIpLHQuZGVz
dHJ1Y3RvcigpLGUuaW5zdGFuY2VQb29sLmxlbmd0aDxlLnBvb2xTaXplJiZlLmluc3RhbmNlUG9v
bC5wdXNoKHQpfSxjPW8sbD1mdW5jdGlvbih0LGUpe3ZhciBuPXQ7cmV0dXJuIG4uaW5zdGFuY2VQ
b29sPVtdLG4uZ2V0UG9vbGVkPWV8fGMsbi5wb29sU2l6ZXx8KG4ucG9vbFNpemU9MTApLG4ucmVs
ZWFzZT1zLG59LGY9e2FkZFBvb2xpbmdUbzpsLG9uZUFyZ3VtZW50UG9vbGVyOm8sdHdvQXJndW1l
bnRQb29sZXI6aSx0aHJlZUFyZ3VtZW50UG9vbGVyOnUsZm91ckFyZ3VtZW50UG9vbGVyOmF9O2Uu
ZXhwb3J0cz1mfSx7MjA6MjAsMjQ6MjR9XSwzOltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3Qi
O3ZhciByPXQoMjYpLG89dCg0KSxpPXQoNiksdT10KDE0KSxhPXQoNSkscz10KDgpLGM9dCg5KSxs
PXQoMTMpLGY9dCgxNikscD10KDE5KSxkPSh0KDI1KSxjLmNyZWF0ZUVsZW1lbnQpLHk9Yy5jcmVh
dGVGYWN0b3J5LGg9Yy5jbG9uZUVsZW1lbnQsdj1yLG09e0NoaWxkcmVuOnttYXA6by5tYXAsZm9y
RWFjaDpvLmZvckVhY2gsY291bnQ6by5jb3VudCx0b0FycmF5Om8udG9BcnJheSxvbmx5OnB9LENv
bXBvbmVudDppLFB1cmVDb21wb25lbnQ6dSxjcmVhdGVFbGVtZW50OmQsY2xvbmVFbGVtZW50Omgs
aXNWYWxpZEVsZW1lbnQ6Yy5pc1ZhbGlkRWxlbWVudCxQcm9wVHlwZXM6bCxjcmVhdGVDbGFzczph
LmNyZWF0ZUNsYXNzLGNyZWF0ZUZhY3Rvcnk6eSxjcmVhdGVNaXhpbjpmdW5jdGlvbih0KXtyZXR1
cm4gdH0sRE9NOnMsdmVyc2lvbjpmLF9fc3ByZWFkOnZ9O2UuZXhwb3J0cz1tfSx7MTM6MTMsMTQ6
MTQsMTY6MTYsMTk6MTksMjU6MjUsMjY6MjYsNDo0LDU6NSw2OjYsODo4LDk6OX1dLDQ6W2Z1bmN0
aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4oIiIrdCkucmVwbGFj
ZShFLCIkJi8iKX1mdW5jdGlvbiBvKHQsZSl7dGhpcy5mdW5jPXQsdGhpcy5jb250ZXh0PWUsdGhp
cy5jb3VudD0wfWZ1bmN0aW9uIGkodCxlLG4pe3ZhciByPXQuZnVuYyxvPXQuY29udGV4dDtyLmNh
bGwobyxlLHQuY291bnQrKyl9ZnVuY3Rpb24gdSh0LGUsbil7aWYobnVsbD09dClyZXR1cm4gdDt2
YXIgcj1vLmdldFBvb2xlZChlLG4pO20odCxpLHIpLG8ucmVsZWFzZShyKX1mdW5jdGlvbiBhKHQs
ZSxuLHIpe3RoaXMucmVzdWx0PXQsdGhpcy5rZXlQcmVmaXg9ZSx0aGlzLmZ1bmM9bix0aGlzLmNv
bnRleHQ9cix0aGlzLmNvdW50PTB9ZnVuY3Rpb24gcyh0LGUsbil7dmFyIG89dC5yZXN1bHQsaT10
LmtleVByZWZpeCx1PXQuZnVuYyxhPXQuY29udGV4dCxzPXUuY2FsbChhLGUsdC5jb3VudCsrKTtB
cnJheS5pc0FycmF5KHMpP2MocyxvLG4sdi50aGF0UmV0dXJuc0FyZ3VtZW50KTpudWxsIT1zJiYo
aC5pc1ZhbGlkRWxlbWVudChzKSYmKHM9aC5jbG9uZUFuZFJlcGxhY2VLZXkocyxpKyghcy5rZXl8
fGUmJmUua2V5PT09cy5rZXk/IiI6cihzLmtleSkrIi8iKStuKSksby5wdXNoKHMpKX1mdW5jdGlv
biBjKHQsZSxuLG8saSl7dmFyIHU9IiI7bnVsbCE9biYmKHU9cihuKSsiLyIpO3ZhciBjPWEuZ2V0
UG9vbGVkKGUsdSxvLGkpO20odCxzLGMpLGEucmVsZWFzZShjKX1mdW5jdGlvbiBsKHQsZSxuKXtp
ZihudWxsPT10KXJldHVybiB0O3ZhciByPVtdO3JldHVybiBjKHQscixudWxsLGUsbikscn1mdW5j
dGlvbiBmKHQsZSxuKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIG0odCxmLG51
bGwpfWZ1bmN0aW9uIGQodCl7dmFyIGU9W107cmV0dXJuIGModCxlLG51bGwsdi50aGF0UmV0dXJu
c0FyZ3VtZW50KSxlfXZhciB5PXQoMiksaD10KDkpLHY9dCgyMiksbT10KDIxKSxiPXkudHdvQXJn
dW1lbnRQb29sZXIsZz15LmZvdXJBcmd1bWVudFBvb2xlcixFPS9cLysvZztvLnByb3RvdHlwZS5k
ZXN0cnVjdG9yPWZ1bmN0aW9uKCl7dGhpcy5mdW5jPW51bGwsdGhpcy5jb250ZXh0PW51bGwsdGhp
cy5jb3VudD0wfSx5LmFkZFBvb2xpbmdUbyhvLGIpLGEucHJvdG90eXBlLmRlc3RydWN0b3I9ZnVu
Y3Rpb24oKXt0aGlzLnJlc3VsdD1udWxsLHRoaXMua2V5UHJlZml4PW51bGwsdGhpcy5mdW5jPW51
bGwsdGhpcy5jb250ZXh0PW51bGwsdGhpcy5jb3VudD0wfSx5LmFkZFBvb2xpbmdUbyhhLGcpO3Zh
ciB4PXtmb3JFYWNoOnUsbWFwOmwsbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbDpjLGNvdW50
OnAsdG9BcnJheTpkfTtlLmV4cG9ydHM9eH0sezI6MiwyMToyMSwyMjoyMiw5Ojl9XSw1OltmdW5j
dGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7cmV0dXJuIHR9ZnVuY3Rpb24g
byh0LGUpe3ZhciBuPUUuaGFzT3duUHJvcGVydHkoZSk/RVtlXTpudWxsO18uaGFzT3duUHJvcGVy
dHkoZSkmJiJPVkVSUklERV9CQVNFIiE9PW4mJnAoIjczIixlKSx0JiYiREVGSU5FX01BTlkiIT09
biYmIkRFRklORV9NQU5ZX01FUkdFRCIhPT1uJiZwKCI3NCIsZSl9ZnVuY3Rpb24gaSh0LGUpe2lm
KGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBlJiZwKCI3NSIpLGguaXNWYWxpZEVsZW1lbnQoZSkmJnAo
Ijc2Iik7dmFyIG49dC5wcm90b3R5cGUscj1uLl9fcmVhY3RBdXRvQmluZFBhaXJzO2UuaGFzT3du
UHJvcGVydHkoYikmJngubWl4aW5zKHQsZS5taXhpbnMpO2Zvcih2YXIgaSBpbiBlKWlmKGUuaGFz
T3duUHJvcGVydHkoaSkmJmkhPT1iKXt2YXIgdT1lW2ldLGE9bi5oYXNPd25Qcm9wZXJ0eShpKTtp
ZihvKGEsaSkseC5oYXNPd25Qcm9wZXJ0eShpKSl4W2ldKHQsdSk7ZWxzZXt2YXIgbD1FLmhhc093
blByb3BlcnR5KGkpLGY9ImZ1bmN0aW9uIj09dHlwZW9mIHUsZD1mJiYhbCYmIWEmJiExIT09ZS5h
dXRvYmluZDtpZihkKXIucHVzaChpLHUpLG5baV09dTtlbHNlIGlmKGEpe3ZhciB5PUVbaV07KCFs
fHwiREVGSU5FX01BTllfTUVSR0VEIiE9PXkmJiJERUZJTkVfTUFOWSIhPT15KSYmcCgiNzciLHks
aSksIkRFRklORV9NQU5ZX01FUkdFRCI9PT15P25baV09cyhuW2ldLHUpOiJERUZJTkVfTUFOWSI9
PT15JiYobltpXT1jKG5baV0sdSkpfWVsc2UgbltpXT11fX19fWZ1bmN0aW9uIHUodCxlKXtpZihl
KWZvcih2YXIgbiBpbiBlKXt2YXIgcj1lW25dO2lmKGUuaGFzT3duUHJvcGVydHkobikpe3ZhciBv
PW4gaW4geDtvJiZwKCI3OCIsbik7dmFyIGk9biBpbiB0O2kmJnAoIjc5IixuKSx0W25dPXJ9fX1m
dW5jdGlvbiBhKHQsZSl7dCYmZSYmIm9iamVjdCI9PXR5cGVvZiB0JiYib2JqZWN0Ij09dHlwZW9m
IGV8fHAoIjgwIik7Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHZvaWQgMCE9
PXRbbl0mJnAoIjgxIixuKSx0W25dPWVbbl0pO3JldHVybiB0fWZ1bmN0aW9uIHModCxlKXtyZXR1
cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyPWUuYXBwbHkodGhp
cyxhcmd1bWVudHMpO2lmKG51bGw9PW4pcmV0dXJuIHI7aWYobnVsbD09cilyZXR1cm4gbjt2YXIg
bz17fTtyZXR1cm4gYShvLG4pLGEobyxyKSxvfX1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIGZ1bmN0
aW9uKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1
bmN0aW9uIGwodCxlKXtyZXR1cm4gZS5iaW5kKHQpfWZ1bmN0aW9uIGYodCl7Zm9yKHZhciBlPXQu
X19yZWFjdEF1dG9CaW5kUGFpcnMsbj0wO248ZS5sZW5ndGg7bis9Mil7dmFyIHI9ZVtuXSxvPWVb
bisxXTt0W3JdPWwodCxvKX19dmFyIHA9dCgyMCksZD10KDI2KSx5PXQoNiksaD10KDkpLHY9KHQo
MTIpLHQoMTEpKSxtPXQoMjMpLGI9KHQoMjQpLHQoMjUpLCJtaXhpbnMiKSxnPVtdLEU9e21peGlu
czoiREVGSU5FX01BTlkiLHN0YXRpY3M6IkRFRklORV9NQU5ZIixwcm9wVHlwZXM6IkRFRklORV9N
QU5ZIixjb250ZXh0VHlwZXM6IkRFRklORV9NQU5ZIixjaGlsZENvbnRleHRUeXBlczoiREVGSU5F
X01BTlkiLGdldERlZmF1bHRQcm9wczoiREVGSU5FX01BTllfTUVSR0VEIixnZXRJbml0aWFsU3Rh
dGU6IkRFRklORV9NQU5ZX01FUkdFRCIsZ2V0Q2hpbGRDb250ZXh0OiJERUZJTkVfTUFOWV9NRVJH
RUQiLHJlbmRlcjoiREVGSU5FX09OQ0UiLGNvbXBvbmVudFdpbGxNb3VudDoiREVGSU5FX01BTlki
LGNvbXBvbmVudERpZE1vdW50OiJERUZJTkVfTUFOWSIsY29tcG9uZW50V2lsbFJlY2VpdmVQcm9w
czoiREVGSU5FX01BTlkiLHNob3VsZENvbXBvbmVudFVwZGF0ZToiREVGSU5FX09OQ0UiLGNvbXBv
bmVudFdpbGxVcGRhdGU6IkRFRklORV9NQU5ZIixjb21wb25lbnREaWRVcGRhdGU6IkRFRklORV9N
QU5ZIixjb21wb25lbnRXaWxsVW5tb3VudDoiREVGSU5FX01BTlkiLHVwZGF0ZUNvbXBvbmVudDoi
T1ZFUlJJREVfQkFTRSJ9LHg9e2Rpc3BsYXlOYW1lOmZ1bmN0aW9uKHQsZSl7dC5kaXNwbGF5TmFt
ZT1lfSxtaXhpbnM6ZnVuY3Rpb24odCxlKXtpZihlKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisr
KWkodCxlW25dKX0sY2hpbGRDb250ZXh0VHlwZXM6ZnVuY3Rpb24odCxlKXt0LmNoaWxkQ29udGV4
dFR5cGVzPWQoe30sdC5jaGlsZENvbnRleHRUeXBlcyxlKX0sY29udGV4dFR5cGVzOmZ1bmN0aW9u
KHQsZSl7dC5jb250ZXh0VHlwZXM9ZCh7fSx0LmNvbnRleHRUeXBlcyxlKX0sZ2V0RGVmYXVsdFBy
b3BzOmZ1bmN0aW9uKHQsZSl7dC5nZXREZWZhdWx0UHJvcHM/dC5nZXREZWZhdWx0UHJvcHM9cyh0
LmdldERlZmF1bHRQcm9wcyxlKTp0LmdldERlZmF1bHRQcm9wcz1lfSxwcm9wVHlwZXM6ZnVuY3Rp
b24odCxlKXt0LnByb3BUeXBlcz1kKHt9LHQucHJvcFR5cGVzLGUpfSxzdGF0aWNzOmZ1bmN0aW9u
KHQsZSl7dSh0LGUpfSxhdXRvYmluZDpmdW5jdGlvbigpe319LF89e3JlcGxhY2VTdGF0ZTpmdW5j
dGlvbih0LGUpe3RoaXMudXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKHRoaXMsdCksZSYmdGhp
cy51cGRhdGVyLmVucXVldWVDYWxsYmFjayh0aGlzLGUsInJlcGxhY2VTdGF0ZSIpfSxpc01vdW50
ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51cGRhdGVyLmlzTW91bnRlZCh0aGlzKX19LFA9ZnVu
Y3Rpb24oKXt9O2QoUC5wcm90b3R5cGUseS5wcm90b3R5cGUsXyk7dmFyIHc9e2NyZWF0ZUNsYXNz
OmZ1bmN0aW9uKHQpe3ZhciBlPXIoZnVuY3Rpb24odCxuLHIpe3RoaXMuX19yZWFjdEF1dG9CaW5k
UGFpcnMubGVuZ3RoJiZmKHRoaXMpLHRoaXMucHJvcHM9dCx0aGlzLmNvbnRleHQ9bix0aGlzLnJl
ZnM9bSx0aGlzLnVwZGF0ZXI9cnx8dix0aGlzLnN0YXRlPW51bGw7dmFyIG89dGhpcy5nZXRJbml0
aWFsU3RhdGU/dGhpcy5nZXRJbml0aWFsU3RhdGUoKTpudWxsOygib2JqZWN0IiE9dHlwZW9mIG98
fEFycmF5LmlzQXJyYXkobykpJiZwKCI4MiIsZS5kaXNwbGF5TmFtZXx8IlJlYWN0Q29tcG9zaXRl
Q29tcG9uZW50IiksdGhpcy5zdGF0ZT1vfSk7ZS5wcm90b3R5cGU9bmV3IFAsZS5wcm90b3R5cGUu
Y29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fX3JlYWN0QXV0b0JpbmRQYWlycz1bXSxnLmZvckVh
Y2goaS5iaW5kKG51bGwsZSkpLGkoZSx0KSxlLmdldERlZmF1bHRQcm9wcyYmKGUuZGVmYXVsdFBy
b3BzPWUuZ2V0RGVmYXVsdFByb3BzKCkpLGUucHJvdG90eXBlLnJlbmRlcnx8cCgiODMiKTtmb3Io
dmFyIG4gaW4gRSllLnByb3RvdHlwZVtuXXx8KGUucHJvdG90eXBlW25dPW51bGwpO3JldHVybiBl
fSxpbmplY3Rpb246e2luamVjdE1peGluOmZ1bmN0aW9uKHQpe2cucHVzaCh0KX19fTtlLmV4cG9y
dHM9d30sezExOjExLDEyOjEyLDIwOjIwLDIzOjIzLDI0OjI0LDI1OjI1LDI2OjI2LDY6Niw5Ojl9
XSw2OltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCxlLG4pe3RoaXMu
cHJvcHM9dCx0aGlzLmNvbnRleHQ9ZSx0aGlzLnJlZnM9dSx0aGlzLnVwZGF0ZXI9bnx8aX12YXIg
bz10KDIwKSxpPXQoMTEpLHU9KHQoMTcpLHQoMjMpKTt0KDI0KSx0KDI1KTtyLnByb3RvdHlwZS5p
c1JlYWN0Q29tcG9uZW50PXt9LHIucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKHQsZSl7Im9i
amVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9dCYmbygiODUiKSx0
aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsdCksZSYmdGhpcy51cGRhdGVyLmVucXVl
dWVDYWxsYmFjayh0aGlzLGUsInNldFN0YXRlIil9LHIucHJvdG90eXBlLmZvcmNlVXBkYXRlPWZ1
bmN0aW9uKHQpe3RoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcyksdCYmdGhpcy51
cGRhdGVyLmVucXVldWVDYWxsYmFjayh0aGlzLHQsImZvcmNlVXBkYXRlIil9O2UuZXhwb3J0cz1y
fSx7MTE6MTEsMTc6MTcsMjA6MjAsMjM6MjMsMjQ6MjQsMjU6MjV9XSw3OltmdW5jdGlvbih0LGUs
bil7InVzZSBzdHJpY3QiO3ZhciByPXtjdXJyZW50Om51bGx9O2UuZXhwb3J0cz1yfSx7fV0sODpb
ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj10KDkpLG89ci5jcmVhdGVGYWN0b3J5
LGk9e2E6bygiYSIpLGFiYnI6bygiYWJiciIpLGFkZHJlc3M6bygiYWRkcmVzcyIpLGFyZWE6bygi
YXJlYSIpLGFydGljbGU6bygiYXJ0aWNsZSIpLGFzaWRlOm8oImFzaWRlIiksYXVkaW86bygiYXVk
aW8iKSxiOm8oImIiKSxiYXNlOm8oImJhc2UiKSxiZGk6bygiYmRpIiksYmRvOm8oImJkbyIpLGJp
ZzpvKCJiaWciKSxibG9ja3F1b3RlOm8oImJsb2NrcXVvdGUiKSxib2R5Om8oImJvZHkiKSxicjpv
KCJiciIpLGJ1dHRvbjpvKCJidXR0b24iKSxjYW52YXM6bygiY2FudmFzIiksY2FwdGlvbjpvKCJj
YXB0aW9uIiksY2l0ZTpvKCJjaXRlIiksY29kZTpvKCJjb2RlIiksY29sOm8oImNvbCIpLGNvbGdy
b3VwOm8oImNvbGdyb3VwIiksZGF0YTpvKCJkYXRhIiksZGF0YWxpc3Q6bygiZGF0YWxpc3QiKSxk
ZDpvKCJkZCIpLGRlbDpvKCJkZWwiKSxkZXRhaWxzOm8oImRldGFpbHMiKSxkZm46bygiZGZuIiks
ZGlhbG9nOm8oImRpYWxvZyIpLGRpdjpvKCJkaXYiKSxkbDpvKCJkbCIpLGR0Om8oImR0IiksZW06
bygiZW0iKSxlbWJlZDpvKCJlbWJlZCIpLGZpZWxkc2V0Om8oImZpZWxkc2V0IiksZmlnY2FwdGlv
bjpvKCJmaWdjYXB0aW9uIiksZmlndXJlOm8oImZpZ3VyZSIpLGZvb3RlcjpvKCJmb290ZXIiKSxm
b3JtOm8oImZvcm0iKSxoMTpvKCJoMSIpLGgyOm8oImgyIiksaDM6bygiaDMiKSxoNDpvKCJoNCIp
LGg1Om8oImg1IiksaDY6bygiaDYiKSxoZWFkOm8oImhlYWQiKSxoZWFkZXI6bygiaGVhZGVyIiks
aGdyb3VwOm8oImhncm91cCIpLGhyOm8oImhyIiksaHRtbDpvKCJodG1sIiksaTpvKCJpIiksaWZy
YW1lOm8oImlmcmFtZSIpLGltZzpvKCJpbWciKSxpbnB1dDpvKCJpbnB1dCIpLGluczpvKCJpbnMi
KSxrYmQ6bygia2JkIiksa2V5Z2VuOm8oImtleWdlbiIpLGxhYmVsOm8oImxhYmVsIiksbGVnZW5k
Om8oImxlZ2VuZCIpLGxpOm8oImxpIiksbGluazpvKCJsaW5rIiksbWFpbjpvKCJtYWluIiksbWFw
Om8oIm1hcCIpLG1hcms6bygibWFyayIpLG1lbnU6bygibWVudSIpLG1lbnVpdGVtOm8oIm1lbnVp
dGVtIiksbWV0YTpvKCJtZXRhIiksbWV0ZXI6bygibWV0ZXIiKSxuYXY6bygibmF2Iiksbm9zY3Jp
cHQ6bygibm9zY3JpcHQiKSxvYmplY3Q6bygib2JqZWN0Iiksb2w6bygib2wiKSxvcHRncm91cDpv
KCJvcHRncm91cCIpLG9wdGlvbjpvKCJvcHRpb24iKSxvdXRwdXQ6bygib3V0cHV0IikscDpvKCJw
IikscGFyYW06bygicGFyYW0iKSxwaWN0dXJlOm8oInBpY3R1cmUiKSxwcmU6bygicHJlIikscHJv
Z3Jlc3M6bygicHJvZ3Jlc3MiKSxxOm8oInEiKSxycDpvKCJycCIpLHJ0Om8oInJ0IikscnVieTpv
KCJydWJ5IiksczpvKCJzIiksc2FtcDpvKCJzYW1wIiksc2NyaXB0Om8oInNjcmlwdCIpLHNlY3Rp
b246bygic2VjdGlvbiIpLHNlbGVjdDpvKCJzZWxlY3QiKSxzbWFsbDpvKCJzbWFsbCIpLHNvdXJj
ZTpvKCJzb3VyY2UiKSxzcGFuOm8oInNwYW4iKSxzdHJvbmc6bygic3Ryb25nIiksc3R5bGU6bygi
c3R5bGUiKSxzdWI6bygic3ViIiksc3VtbWFyeTpvKCJzdW1tYXJ5Iiksc3VwOm8oInN1cCIpLHRh
YmxlOm8oInRhYmxlIiksdGJvZHk6bygidGJvZHkiKSx0ZDpvKCJ0ZCIpLHRleHRhcmVhOm8oInRl
eHRhcmVhIiksdGZvb3Q6bygidGZvb3QiKSx0aDpvKCJ0aCIpLHRoZWFkOm8oInRoZWFkIiksdGlt
ZTpvKCJ0aW1lIiksdGl0bGU6bygidGl0bGUiKSx0cjpvKCJ0ciIpLHRyYWNrOm8oInRyYWNrIiks
dTpvKCJ1IiksdWw6bygidWwiKSx2YXI6bygidmFyIiksdmlkZW86bygidmlkZW8iKSx3YnI6bygi
d2JyIiksY2lyY2xlOm8oImNpcmNsZSIpLGNsaXBQYXRoOm8oImNsaXBQYXRoIiksZGVmczpvKCJk
ZWZzIiksZWxsaXBzZTpvKCJlbGxpcHNlIiksZzpvKCJnIiksaW1hZ2U6bygiaW1hZ2UiKSxsaW5l
Om8oImxpbmUiKSxsaW5lYXJHcmFkaWVudDpvKCJsaW5lYXJHcmFkaWVudCIpLG1hc2s6bygibWFz
ayIpLHBhdGg6bygicGF0aCIpLHBhdHRlcm46bygicGF0dGVybiIpLHBvbHlnb246bygicG9seWdv
biIpLHBvbHlsaW5lOm8oInBvbHlsaW5lIikscmFkaWFsR3JhZGllbnQ6bygicmFkaWFsR3JhZGll
bnQiKSxyZWN0Om8oInJlY3QiKSxzdG9wOm8oInN0b3AiKSxzdmc6bygic3ZnIiksdGV4dDpvKCJ0
ZXh0IiksdHNwYW46bygidHNwYW4iKX07ZS5leHBvcnRzPWl9LHs5Ojl9XSw5OltmdW5jdGlvbih0
LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7cmV0dXJuIHZvaWQgMCE9PXQucmVmfWZ1
bmN0aW9uIG8odCl7cmV0dXJuIHZvaWQgMCE9PXQua2V5fXZhciBpPXQoMjYpLHU9dCg3KSxhPSh0
KDI1KSx0KDE3KSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KSxzPXQoMTApLGM9e2tl
eTohMCxyZWY6ITAsX19zZWxmOiEwLF9fc291cmNlOiEwfSxsPWZ1bmN0aW9uKHQsZSxuLHIsbyxp
LHUpe3JldHVybnskJHR5cGVvZjpzLHR5cGU6dCxrZXk6ZSxyZWY6bixwcm9wczp1LF9vd25lcjpp
fX07bC5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxzPXt9LGY9bnVsbCxwPW51
bGw7aWYobnVsbCE9ZSl7cihlKSYmKHA9ZS5yZWYpLG8oZSkmJihmPSIiK2Uua2V5KSx2b2lkIDA9
PT1lLl9fc2VsZj9udWxsOmUuX19zZWxmLHZvaWQgMD09PWUuX19zb3VyY2U/bnVsbDplLl9fc291
cmNlO2ZvcihpIGluIGUpYS5jYWxsKGUsaSkmJiFjLmhhc093blByb3BlcnR5KGkpJiYoc1tpXT1l
W2ldKX12YXIgZD1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWQpcy5jaGlsZHJlbj1uO2Vsc2Ug
aWYoZD4xKXtmb3IodmFyIHk9QXJyYXkoZCksaD0wO2g8ZDtoKyspeVtoXT1hcmd1bWVudHNbaCsy
XTtzLmNoaWxkcmVuPXl9aWYodCYmdC5kZWZhdWx0UHJvcHMpe3ZhciB2PXQuZGVmYXVsdFByb3Bz
O2ZvcihpIGluIHYpdm9pZCAwPT09c1tpXSYmKHNbaV09dltpXSl9cmV0dXJuIGwodCxmLHAsMCww
LHUuY3VycmVudCxzKX0sbC5jcmVhdGVGYWN0b3J5PWZ1bmN0aW9uKHQpe3ZhciBlPWwuY3JlYXRl
RWxlbWVudC5iaW5kKG51bGwsdCk7cmV0dXJuIGUudHlwZT10LGV9LGwuY2xvbmVBbmRSZXBsYWNl
S2V5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGwodC50eXBlLGUsdC5yZWYsdC5fc2VsZix0Ll9zb3Vy
Y2UsdC5fb3duZXIsdC5wcm9wcyl9LGwuY2xvbmVFbGVtZW50PWZ1bmN0aW9uKHQsZSxuKXt2YXIg
cyxmPWkoe30sdC5wcm9wcykscD10LmtleSxkPXQucmVmLHk9KHQuX3NlbGYsdC5fc291cmNlLHQu
X293bmVyKTtpZihudWxsIT1lKXtyKGUpJiYoZD1lLnJlZix5PXUuY3VycmVudCksbyhlKSYmKHA9
IiIrZS5rZXkpO3ZhciBoO3QudHlwZSYmdC50eXBlLmRlZmF1bHRQcm9wcyYmKGg9dC50eXBlLmRl
ZmF1bHRQcm9wcyk7Zm9yKHMgaW4gZSlhLmNhbGwoZSxzKSYmIWMuaGFzT3duUHJvcGVydHkocykm
Jih2b2lkIDA9PT1lW3NdJiZ2b2lkIDAhPT1oP2Zbc109aFtzXTpmW3NdPWVbc10pfXZhciB2PWFy
Z3VtZW50cy5sZW5ndGgtMjtpZigxPT09dilmLmNoaWxkcmVuPW47ZWxzZSBpZih2PjEpe2Zvcih2
YXIgbT1BcnJheSh2KSxiPTA7Yjx2O2IrKyltW2JdPWFyZ3VtZW50c1tiKzJdO2YuY2hpbGRyZW49
bX1yZXR1cm4gbCh0LnR5cGUscCxkLDAsMCx5LGYpfSxsLmlzVmFsaWRFbGVtZW50PWZ1bmN0aW9u
KHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9PXQmJnQuJCR0eXBlb2Y9PT1zfSxl
LmV4cG9ydHM9bH0sezEwOjEwLDE3OjE3LDI1OjI1LDI2OjI2LDc6N31dLDEwOltmdW5jdGlvbih0
LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJv
bC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDM7ZS5leHBvcnRzPXJ9LHt9
XSwxMTpbZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj0odCgyNSkse2lzTW91bnRl
ZDpmdW5jdGlvbih0KXtyZXR1cm4hMX0sZW5xdWV1ZUNhbGxiYWNrOmZ1bmN0aW9uKHQsZSl7fSxl
bnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24odCl7fSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0
aW9uKHQsZSl7fSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24odCxlKXt9fSk7ZS5leHBvcnRzPXJ9
LHsyNToyNX1dLDEyOltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPXt9O2UuZXhw
b3J0cz1yfSx7fV0sMTM6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9dCg5KSxv
PXIuaXNWYWxpZEVsZW1lbnQsaT10KDI4KTtlLmV4cG9ydHM9aShvKX0sezI4OjI4LDk6OX1dLDE0
OltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCxlLG4pe3RoaXMucHJv
cHM9dCx0aGlzLmNvbnRleHQ9ZSx0aGlzLnJlZnM9cyx0aGlzLnVwZGF0ZXI9bnx8YX1mdW5jdGlv
biBvKCl7fXZhciBpPXQoMjYpLHU9dCg2KSxhPXQoMTEpLHM9dCgyMyk7by5wcm90b3R5cGU9dS5w
cm90b3R5cGUsci5wcm90b3R5cGU9bmV3IG8sci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixpKHIu
cHJvdG90eXBlLHUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudD0h
MCxlLmV4cG9ydHM9cn0sezExOjExLDIzOjIzLDI2OjI2LDY6Nn1dLDE1OltmdW5jdGlvbih0LGUs
bil7InVzZSBzdHJpY3QiO3ZhciByPXQoMjYpLG89dCgzKSxpPXIobyx7X19TRUNSRVRfSU5URVJO
QUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6e1JlYWN0Q3VycmVudE93bmVyOnQo
Nyl9fSk7ZS5leHBvcnRzPWl9LHsyNjoyNiwzOjMsNzo3fV0sMTY6W2Z1bmN0aW9uKHQsZSxuKXsi
dXNlIHN0cmljdCI7ZS5leHBvcnRzPSIxNS41LjQifSx7fV0sMTc6W2Z1bmN0aW9uKHQsZSxuKXsi
dXNlIHN0cmljdCI7ZS5leHBvcnRzPSExfSx7fV0sMTg6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0
cmljdCI7ZnVuY3Rpb24gcih0KXt2YXIgZT10JiYobyYmdFtvXXx8dFtpXSk7aWYoImZ1bmN0aW9u
Ij09dHlwZW9mIGUpcmV0dXJuIGV9dmFyIG89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3lt
Ym9sLml0ZXJhdG9yLGk9IkBAaXRlcmF0b3IiO2UuZXhwb3J0cz1yfSx7fV0sMTk6W2Z1bmN0aW9u
KHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gaS5pc1ZhbGlkRWxlbWVu
dCh0KXx8bygiMTQzIiksdH12YXIgbz10KDIwKSxpPXQoOSk7dCgyNCk7ZS5leHBvcnRzPXJ9LHsy
MDoyMCwyNDoyNCw5Ojl9XSwyMDpbZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlv
biByKHQpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLTEsbj0iTWluaWZpZWQgUmVhY3QgZXJy
b3IgIyIrdCsiOyB2aXNpdCBodHRwOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvZXJy
b3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD0iK3Qscj0wO3I8ZTtyKyspbis9IiZhcmdzW109Iitl
bmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW3IrMV0pO24rPSIgZm9yIHRoZSBmdWxsIG1lc3Nh
Z2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9y
cyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLiI7dmFyIG89bmV3IEVycm9yKG4pO3Ro
cm93IG8ubmFtZT0iSW52YXJpYW50IFZpb2xhdGlvbiIsby5mcmFtZXNUb1BvcD0xLG99ZS5leHBv
cnRzPXJ9LHt9XSwyMTpbZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQs
ZSl7cmV0dXJuIHQmJiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9dC5rZXk/Yy5lc2NhcGUodC5r
ZXkpOmUudG9TdHJpbmcoMzYpfWZ1bmN0aW9uIG8odCxlLG4saSl7dmFyIHA9dHlwZW9mIHQ7aWYo
InVuZGVmaW5lZCIhPT1wJiYiYm9vbGVhbiIhPT1wfHwodD1udWxsKSxudWxsPT09dHx8InN0cmlu
ZyI9PT1wfHwibnVtYmVyIj09PXB8fCJvYmplY3QiPT09cCYmdC4kJHR5cGVvZj09PWEpcmV0dXJu
IG4oaSx0LCIiPT09ZT9sK3IodCwwKTplKSwxO3ZhciBkLHksaD0wLHY9IiI9PT1lP2w6ZStmO2lm
KEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBtPTA7bTx0Lmxlbmd0aDttKyspZD10W21dLHk9dity
KGQsbSksaCs9byhkLHksbixpKTtlbHNle3ZhciBiPXModCk7aWYoYil7dmFyIGcsRT1iLmNhbGwo
dCk7aWYoYiE9PXQuZW50cmllcylmb3IodmFyIHg9MDshKGc9RS5uZXh0KCkpLmRvbmU7KWQ9Zy52
YWx1ZSx5PXYrcihkLHgrKyksaCs9byhkLHksbixpKTtlbHNlIGZvcig7IShnPUUubmV4dCgpKS5k
b25lOyl7dmFyIF89Zy52YWx1ZTtfJiYoZD1fWzFdLHk9ditjLmVzY2FwZShfWzBdKStmK3IoZCww
KSxoKz1vKGQseSxuLGkpKX19ZWxzZSBpZigib2JqZWN0Ij09PXApe3ZhciBQPVN0cmluZyh0KTt1
KCIzMSIsIltvYmplY3QgT2JqZWN0XSI9PT1QPyJvYmplY3Qgd2l0aCBrZXlzIHsiK09iamVjdC5r
ZXlzKHQpLmpvaW4oIiwgIikrIn0iOlAsIiIpfX1yZXR1cm4gaH1mdW5jdGlvbiBpKHQsZSxuKXty
ZXR1cm4gbnVsbD09dD8wOm8odCwiIixlLG4pfXZhciB1PXQoMjApLGE9KHQoNyksdCgxMCkpLHM9
dCgxOCksYz0odCgyNCksdCgxKSksbD0odCgyNSksIi4iKSxmPSI6IjtlLmV4cG9ydHM9aX0sezE6
MSwxMDoxMCwxODoxOCwyMDoyMCwyNDoyNCwyNToyNSw3Ojd9XSwyMjpbZnVuY3Rpb24odCxlLG4p
eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX12
YXIgbz1mdW5jdGlvbigpe307by50aGF0UmV0dXJucz1yLG8udGhhdFJldHVybnNGYWxzZT1yKCEx
KSxvLnRoYXRSZXR1cm5zVHJ1ZT1yKCEwKSxvLnRoYXRSZXR1cm5zTnVsbD1yKG51bGwpLG8udGhh
dFJldHVybnNUaGlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LG8udGhhdFJldHVybnNBcmd1bWVu
dD1mdW5jdGlvbih0KXtyZXR1cm4gdH0sZS5leHBvcnRzPW99LHt9XSwyMzpbZnVuY3Rpb24odCxl
LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17fTtlLmV4cG9ydHM9cn0se31dLDI0OltmdW5jdGlvbih0
LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCxlLG4scixpLHUsYSxzKXtpZihvKGUpLCF0
KXt2YXIgYztpZih2b2lkIDA9PT1lKWM9bmV3IEVycm9yKCJNaW5pZmllZCBleGNlcHRpb24gb2Nj
dXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgdGhlIGZ1bGwg
ZXJyb3IgbWVzc2FnZSBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLiIpO2Vsc2V7dmFy
IGw9W24scixpLHUsYSxzXSxmPTA7Yz1uZXcgRXJyb3IoZS5yZXBsYWNlKC8lcy9nLGZ1bmN0aW9u
KCl7cmV0dXJuIGxbZisrXX0pKSxjLm5hbWU9IkludmFyaWFudCBWaW9sYXRpb24ifXRocm93IGMu
ZnJhbWVzVG9Qb3A9MSxjfX12YXIgbz1mdW5jdGlvbih0KXt9O2UuZXhwb3J0cz1yfSx7fV0sMjU6
W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9dCgyMiksbz1yO2UuZXhwb3J0cz1v
fSx7MjI6MjJ9XSwyNjpbZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQp
e2lmKG51bGw9PT10fHx2b2lkIDA9PT10KXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5hc3Np
Z24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkIik7cmV0dXJuIE9iamVj
dCh0KX12YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGk9T2JqZWN0LnByb3RvdHlw
ZS5oYXNPd25Qcm9wZXJ0eSx1PU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7
ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciB0
PW5ldyBTdHJpbmcoImFiYyIpO2lmKHRbNV09ImRlIiwiNSI9PT1PYmplY3QuZ2V0T3duUHJvcGVy
dHlOYW1lcyh0KVswXSlyZXR1cm4hMTtmb3IodmFyIGU9e30sbj0wO248MTA7bisrKWVbIl8iK1N0
cmluZy5mcm9tQ2hhckNvZGUobildPW47aWYoIjAxMjM0NTY3ODkiIT09T2JqZWN0LmdldE93blBy
b3BlcnR5TmFtZXMoZSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSkuam9pbigiIikpcmV0
dXJuITE7dmFyIHI9e307cmV0dXJuImFiY2RlZmdoaWprbG1ub3BxcnN0Ii5zcGxpdCgiIikuZm9y
RWFjaChmdW5jdGlvbih0KXtyW3RdPXR9KSwiYWJjZGVmZ2hpamtsbW5vcHFyc3QiPT09T2JqZWN0
LmtleXMoT2JqZWN0LmFzc2lnbih7fSxyKSkuam9pbigiIil9Y2F0Y2godCl7cmV0dXJuITF9fSgp
P09iamVjdC5hc3NpZ246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4sYSxzPXIodCksYz0xO2M8YXJn
dW1lbnRzLmxlbmd0aDtjKyspe249T2JqZWN0KGFyZ3VtZW50c1tjXSk7Zm9yKHZhciBsIGluIG4p
aS5jYWxsKG4sbCkmJihzW2xdPW5bbF0pO2lmKG8pe2E9byhuKTtmb3IodmFyIGY9MDtmPGEubGVu
Z3RoO2YrKyl1LmNhbGwobixhW2ZdKSYmKHNbYVtmXV09blthW2ZdXSl9fXJldHVybiBzfX0se31d
LDI3OltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCxlLG4scixvKXt9
ZS5leHBvcnRzPXJ9LHsyNDoyNCwyNToyNSwzMDozMH1dLDI4OltmdW5jdGlvbih0LGUsbil7InVz
ZSBzdHJpY3QiO3ZhciByPXQoMjkpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0LCEx
KX19LHsyOToyOX1dLDI5OltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPXQoMjIp
LG89dCgyNCksaT0odCgyNSksdCgzMCkpLHU9dCgyNyk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7
ZnVuY3Rpb24gbih0KXt2YXIgZT10JiYoXyYmdFtfXXx8dFtQXSk7aWYoImZ1bmN0aW9uIj09dHlw
ZW9mIGUpcmV0dXJuIGV9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiB0PT09ZT8wIT09dHx8MS90PT0x
L2U6dCE9PXQmJmUhPT1lfWZ1bmN0aW9uIHModCl7dGhpcy5tZXNzYWdlPXQsdGhpcy5zdGFjaz0i
In1mdW5jdGlvbiBjKHQpe2Z1bmN0aW9uIG4obixyLHUsYSxjLGwsZil7aWYoYT1hfHx3LGw9bHx8
dSxmIT09aSlpZihlKW8oITEsIkNhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkg
aXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuIFVzZSBgUHJvcFR5
cGVzLmNoZWNrUHJvcFR5cGVzKClgIHRvIGNhbGwgdGhlbS4gUmVhZCBtb3JlIGF0IGh0dHA6Ly9m
Yi5tZS91c2UtY2hlY2stcHJvcC10eXBlcyIpO2Vsc2U7cmV0dXJuIG51bGw9PXJbdV0/bj9uZXcg
cyhudWxsPT09clt1XT8iVGhlICIrYysiIGAiK2wrImAgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGlu
IGAiK2ErImAsIGJ1dCBpdHMgdmFsdWUgaXMgYG51bGxgLiI6IlRoZSAiK2MrIiBgIitsKyJgIGlz
IG1hcmtlZCBhcyByZXF1aXJlZCBpbiBgIithKyJgLCBidXQgaXRzIHZhbHVlIGlzIGB1bmRlZmlu
ZWRgLiIpOm51bGw6dChyLHUsYSxjLGwpfXZhciByPW4uYmluZChudWxsLCExKTtyZXR1cm4gci5p
c1JlcXVpcmVkPW4uYmluZChudWxsLCEwKSxyfWZ1bmN0aW9uIGwodCl7ZnVuY3Rpb24gZShlLG4s
cixvLGksdSl7dmFyIGE9ZVtuXTtpZihnKGEpIT09dClyZXR1cm4gbmV3IHMoIkludmFsaWQgIitv
KyIgYCIraSsiYCBvZiB0eXBlIGAiK0UoYSkrImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0
ZWQgYCIrdCsiYC4iKTtyZXR1cm4gbnVsbH1yZXR1cm4gYyhlKX1mdW5jdGlvbiBmKHQpe2Z1bmN0
aW9uIGUoZSxuLHIsbyx1KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdClyZXR1cm4gbmV3IHMoIlBy
b3BlcnR5IGAiK3UrImAgb2YgY29tcG9uZW50IGAiK3IrImAgaGFzIGludmFsaWQgUHJvcFR5cGUg
bm90YXRpb24gaW5zaWRlIGFycmF5T2YuIik7dmFyIGE9ZVtuXTtpZighQXJyYXkuaXNBcnJheShh
KSl7cmV0dXJuIG5ldyBzKCJJbnZhbGlkICIrbysiIGAiK3UrImAgb2YgdHlwZSBgIitnKGEpKyJg
IHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVkIGFuIGFycmF5LiIpfWZvcih2YXIgYz0wO2M8
YS5sZW5ndGg7YysrKXt2YXIgbD10KGEsYyxyLG8sdSsiWyIrYysiXSIsaSk7aWYobCBpbnN0YW5j
ZW9mIEVycm9yKXJldHVybiBsfXJldHVybiBudWxsfXJldHVybiBjKGUpfWZ1bmN0aW9uIHAodCl7
ZnVuY3Rpb24gZShlLG4scixvLGkpe2lmKCEoZVtuXWluc3RhbmNlb2YgdCkpe3ZhciB1PXQubmFt
ZXx8dztyZXR1cm4gbmV3IHMoIkludmFsaWQgIitvKyIgYCIraSsiYCBvZiB0eXBlIGAiK3goZVtu
XSkrImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgaW5zdGFuY2Ugb2YgYCIrdSsiYC4i
KX1yZXR1cm4gbnVsbH1yZXR1cm4gYyhlKX1mdW5jdGlvbiBkKHQpe2Z1bmN0aW9uIGUoZSxuLHIs
byxpKXtmb3IodmFyIHU9ZVtuXSxjPTA7Yzx0Lmxlbmd0aDtjKyspaWYoYSh1LHRbY10pKXJldHVy
biBudWxsO3JldHVybiBuZXcgcygiSW52YWxpZCAiK28rIiBgIitpKyJgIG9mIHZhbHVlIGAiK3Ur
ImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgb25lIG9mICIrSlNPTi5zdHJpbmdpZnko
dCkrIi4iKX1yZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9jKGUpOnIudGhhdFJldHVybnNOdWxsfWZ1
bmN0aW9uIHkodCl7ZnVuY3Rpb24gZShlLG4scixvLHUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0
KXJldHVybiBuZXcgcygiUHJvcGVydHkgYCIrdSsiYCBvZiBjb21wb25lbnQgYCIrcisiYCBoYXMg
aW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuIik7dmFyIGE9ZVtuXSxj
PWcoYSk7aWYoIm9iamVjdCIhPT1jKXJldHVybiBuZXcgcygiSW52YWxpZCAiK28rIiBgIit1KyJg
IG9mIHR5cGUgYCIrYysiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBhbiBvYmplY3Qu
Iik7Zm9yKHZhciBsIGluIGEpaWYoYS5oYXNPd25Qcm9wZXJ0eShsKSl7dmFyIGY9dChhLGwscixv
LHUrIi4iK2wsaSk7aWYoZiBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBmfXJldHVybiBudWxsfXJl
dHVybiBjKGUpfWZ1bmN0aW9uIGgodCl7ZnVuY3Rpb24gZShlLG4scixvLHUpe2Zvcih2YXIgYT0w
O2E8dC5sZW5ndGg7YSsrKXtpZihudWxsPT0oMCx0W2FdKShlLG4scixvLHUsaSkpcmV0dXJuIG51
bGx9cmV0dXJuIG5ldyBzKCJJbnZhbGlkICIrbysiIGAiK3UrImAgc3VwcGxpZWQgdG8gYCIrcisi
YC4iKX1yZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9jKGUpOnIudGhhdFJldHVybnNOdWxsfWZ1bmN0
aW9uIHYodCl7ZnVuY3Rpb24gZShlLG4scixvLHUpe3ZhciBhPWVbbl0sYz1nKGEpO2lmKCJvYmpl
Y3QiIT09YylyZXR1cm4gbmV3IHMoIkludmFsaWQgIitvKyIgYCIrdSsiYCBvZiB0eXBlIGAiK2Mr
ImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgYG9iamVjdGAuIik7Zm9yKHZhciBsIGlu
IHQpe3ZhciBmPXRbbF07aWYoZil7dmFyIHA9ZihhLGwscixvLHUrIi4iK2wsaSk7aWYocClyZXR1
cm4gcH19cmV0dXJuIG51bGx9cmV0dXJuIGMoZSl9ZnVuY3Rpb24gbShlKXtzd2l0Y2godHlwZW9m
IGUpe2Nhc2UibnVtYmVyIjpjYXNlInN0cmluZyI6Y2FzZSJ1bmRlZmluZWQiOnJldHVybiEwO2Nh
c2UiYm9vbGVhbiI6cmV0dXJuIWU7Y2FzZSJvYmplY3QiOmlmKEFycmF5LmlzQXJyYXkoZSkpcmV0
dXJuIGUuZXZlcnkobSk7aWYobnVsbD09PWV8fHQoZSkpcmV0dXJuITA7dmFyIHI9bihlKTtpZigh
cilyZXR1cm4hMTt2YXIgbyxpPXIuY2FsbChlKTtpZihyIT09ZS5lbnRyaWVzKXtmb3IoOyEobz1p
Lm5leHQoKSkuZG9uZTspaWYoIW0oby52YWx1ZSkpcmV0dXJuITF9ZWxzZSBmb3IoOyEobz1pLm5l
eHQoKSkuZG9uZTspe3ZhciB1PW8udmFsdWU7aWYodSYmIW0odVsxXSkpcmV0dXJuITF9cmV0dXJu
ITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gYih0LGUpe3JldHVybiJzeW1ib2wiPT09dHx8
KCJTeW1ib2wiPT09ZVsiQEB0b1N0cmluZ1RhZyJdfHwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9s
JiZlIGluc3RhbmNlb2YgU3ltYm9sKX1mdW5jdGlvbiBnKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVy
biBBcnJheS5pc0FycmF5KHQpPyJhcnJheSI6dCBpbnN0YW5jZW9mIFJlZ0V4cD8ib2JqZWN0Ijpi
KGUsdCk/InN5bWJvbCI6ZX1mdW5jdGlvbiBFKHQpe3ZhciBlPWcodCk7aWYoIm9iamVjdCI9PT1l
KXtpZih0IGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4iZGF0ZSI7aWYodCBpbnN0YW5jZW9mIFJlZ0V4
cClyZXR1cm4icmVnZXhwIn1yZXR1cm4gZX1mdW5jdGlvbiB4KHQpe3JldHVybiB0LmNvbnN0cnVj
dG9yJiZ0LmNvbnN0cnVjdG9yLm5hbWU/dC5jb25zdHJ1Y3Rvci5uYW1lOnd9dmFyIF89ImZ1bmN0
aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yLFA9IkBAaXRlcmF0b3IiLHc9Ijw8
YW5vbnltb3VzPj4iLE49e2FycmF5OmwoImFycmF5IiksYm9vbDpsKCJib29sZWFuIiksZnVuYzps
KCJmdW5jdGlvbiIpLG51bWJlcjpsKCJudW1iZXIiKSxvYmplY3Q6bCgib2JqZWN0Iiksc3RyaW5n
OmwoInN0cmluZyIpLHN5bWJvbDpsKCJzeW1ib2wiKSxhbnk6ZnVuY3Rpb24oKXtyZXR1cm4gYyhy
LnRoYXRSZXR1cm5zTnVsbCl9KCksYXJyYXlPZjpmLGVsZW1lbnQ6ZnVuY3Rpb24oKXtmdW5jdGlv
biBlKGUsbixyLG8saSl7dmFyIHU9ZVtuXTtpZighdCh1KSl7cmV0dXJuIG5ldyBzKCJJbnZhbGlk
ICIrbysiIGAiK2krImAgb2YgdHlwZSBgIitnKHUpKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4
cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4iKX1yZXR1cm4gbnVsbH1yZXR1cm4gYyhlKX0o
KSxpbnN0YW5jZU9mOnAsbm9kZTpmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixvKXtyZXR1
cm4gbSh0W2VdKT9udWxsOm5ldyBzKCJJbnZhbGlkICIrcisiIGAiK28rImAgc3VwcGxpZWQgdG8g
YCIrbisiYCwgZXhwZWN0ZWQgYSBSZWFjdE5vZGUuIil9cmV0dXJuIGModCl9KCksb2JqZWN0T2Y6
eSxvbmVPZjpkLG9uZU9mVHlwZTpoLHNoYXBlOnZ9O3JldHVybiBzLnByb3RvdHlwZT1FcnJvci5w
cm90b3R5cGUsTi5jaGVja1Byb3BUeXBlcz11LE4uUHJvcFR5cGVzPU4sTn19LHsyMjoyMiwyNDoy
NCwyNToyNSwyNzoyNywzMDozMH1dLDMwOltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Uu
ZXhwb3J0cz0iU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQifSx7
fV19LHt9LFsxNV0pKDE1KX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvaW5kZXgu
Y3NzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRl
eC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZTA0ZmJkYmRiNGVkNGFmZTA5ZDU1NDNkYjUyMGRjNmE5ZGRkNDFi
MgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy90b2Rv
bXZjLWFwcC1jc3MvaW5kZXguY3NzCkBAIC0wLDAgKzEsMzc2IEBACitodG1sLAorYm9keSB7Cisg
ICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7Cit9CisKK2J1dHRvbiB7CisgICAgbWFyZ2lu
OiAwOworICAgIHBhZGRpbmc6IDA7CisgICAgYm9yZGVyOiAwOworICAgIGJhY2tncm91bmQ6IG5v
bmU7CisgICAgZm9udC1zaXplOiAxMDAlOworICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsK
KyAgICBmb250LWZhbWlseTogaW5oZXJpdDsKKyAgICBmb250LXdlaWdodDogaW5oZXJpdDsKKyAg
ICBjb2xvcjogaW5oZXJpdDsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CisgICAgYXBw
ZWFyYW5jZTogbm9uZTsKKyAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsK
KyAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOworfQorCitib2R5IHsKKyAg
ICBmb250OiAxNHB4ICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2Vy
aWY7CisgICAgbGluZS1oZWlnaHQ6IDEuNGVtOworICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7Cisg
ICAgY29sb3I6ICM0ZDRkNGQ7CisgICAgbWluLXdpZHRoOiAyMzBweDsKKyAgICBtYXgtd2lkdGg6
IDU1MHB4OworICAgIG1hcmdpbjogMCBhdXRvOworICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6
IGFudGlhbGlhc2VkOworICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7Cisg
ICAgZm9udC13ZWlnaHQ6IDMwMDsKK30KKworOmZvY3VzIHsKKyAgICBvdXRsaW5lOiAwOworfQor
CisuaGlkZGVuIHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisudG9kb2FwcCB7CisgICAgYmFj
a2dyb3VuZDogI2ZmZjsKKyAgICBtYXJnaW46IDEzMHB4IDAgNDBweCAwOworICAgIHBvc2l0aW9u
OiByZWxhdGl2ZTsKKyAgICBib3gtc2hhZG93OiAwIDJweCA0cHggMCByZ2JhKDAsIDAsIDAsIDAu
MiksCisgICAgICAgICAgICAgICAgMCAyNXB4IDUwcHggMCByZ2JhKDAsIDAsIDAsIDAuMSk7Cit9
CisKKy50b2RvYXBwIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHsKKyAgICBmb250
LXN0eWxlOiBpdGFsaWM7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKKyAgICBjb2xvcjogI2U2ZTZl
NjsKK30KKworLnRvZG9hcHAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIgeworICAgIGZvbnQtc3R5
bGU6IGl0YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGNvbG9yOiAjZTZlNmU2Owor
fQorCisudG9kb2FwcCBpbnB1dDo6aW5wdXQtcGxhY2Vob2xkZXIgeworICAgIGZvbnQtc3R5bGU6
IGl0YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGNvbG9yOiAjZTZlNmU2OworfQor
CisudG9kb2FwcCBoMSB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogLTE1NXB4
OworICAgIHdpZHRoOiAxMDAlOworICAgIGZvbnQtc2l6ZTogMTAwcHg7CisgICAgZm9udC13ZWln
aHQ6IDEwMDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgY29sb3I6IHJnYmEoMTc1LCA0
NywgNDcsIDAuMTUpOworICAgIC13ZWJraXQtdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJp
bGl0eTsKKyAgICAtbW96LXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7CisgICAg
dGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKK30KKworLm5ldy10b2RvLAorLmVk
aXQgeworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBtYXJnaW46IDA7CisgICAgd2lkdGg6
IDEwMCU7CisgICAgZm9udC1zaXplOiAyNHB4OworICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0Owor
ICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OworICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKKyAgICBi
b3JkZXI6IDA7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgcGFkZGluZzogNnB4OworICAgIGJv
cmRlcjogMXB4IHNvbGlkICM5OTk7CisgICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDVweCAw
IHJnYmEoMCwgMCwgMCwgMC4yKTsKKyAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIC13
ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAgIC1tb3otb3N4LWZvbnQtc21v
b3RoaW5nOiBncmF5c2NhbGU7Cit9CisKKy5uZXctdG9kbyB7CisgICAgcGFkZGluZzogMTZweCAx
NnB4IDE2cHggNjBweDsKKyAgICBib3JkZXI6IG5vbmU7CisgICAgYmFja2dyb3VuZDogcmdiYSgw
LCAwLCAwLCAwLjAwMyk7CisgICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMnB4IDFweCByZ2JhKDAs
MCwwLDAuMDMpOworfQorCisubWFpbiB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIHot
aW5kZXg6IDI7CisgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNmU2ZTY7Cit9CisKKy50b2dn
bGUtYWxsIHsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgYm9yZGVyOiBub25lOyAvKiBN
b2JpbGUgU2FmYXJpICovCisgICAgb3BhY2l0eTogMDsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7
Cit9CisKKy50b2dnbGUtYWxsICsgbGFiZWwgeworICAgIHdpZHRoOiA2MHB4OworICAgIGhlaWdo
dDogMzRweDsKKyAgICBmb250LXNpemU6IDA7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAg
IHRvcDogLTUycHg7CisgICAgbGVmdDogLTEzcHg7CisgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJv
dGF0ZSg5MGRlZyk7CisgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOworfQorCisudG9nZ2xl
LWFsbCArIGxhYmVsOmJlZm9yZSB7CisgICAgY29udGVudDogJ+Kdryc7CisgICAgZm9udC1zaXpl
OiAyMnB4OworICAgIGNvbG9yOiAjZTZlNmU2OworICAgIHBhZGRpbmc6IDEwcHggMjdweCAxMHB4
IDI3cHg7Cit9CisKKy50b2dnbGUtYWxsOmNoZWNrZWQgKyBsYWJlbDpiZWZvcmUgeworICAgIGNv
bG9yOiAjNzM3MzczOworfQorCisudG9kby1saXN0IHsKKyAgICBtYXJnaW46IDA7CisgICAgcGFk
ZGluZzogMDsKKyAgICBsaXN0LXN0eWxlOiBub25lOworfQorCisudG9kby1saXN0IGxpIHsKKyAg
ICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgZm9udC1zaXplOiAyNHB4OworICAgIGJvcmRlci1i
b3R0b206IDFweCBzb2xpZCAjZWRlZGVkOworfQorCisudG9kby1saXN0IGxpOmxhc3QtY2hpbGQg
eworICAgIGJvcmRlci1ib3R0b206IG5vbmU7Cit9CisKKy50b2RvLWxpc3QgbGkuZWRpdGluZyB7
CisgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKKyAgICBwYWRkaW5nOiAwOworfQorCisudG9kby1s
aXN0IGxpLmVkaXRpbmcgLmVkaXQgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIHdpZHRoOiA1
MDZweDsKKyAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CisgICAgbWFyZ2luOiAwIDAgMCA0M3B4Owor
fQorCisudG9kby1saXN0IGxpLmVkaXRpbmcgLnZpZXcgeworICAgIGRpc3BsYXk6IG5vbmU7Cit9
CisKKy50b2RvLWxpc3QgbGkgLnRvZ2dsZSB7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAg
IHdpZHRoOiA0MHB4OworICAgIC8qIGF1dG8sIHNpbmNlIG5vbi1XZWJLaXQgYnJvd3NlcnMgZG9l
c24ndCBzdXBwb3J0IGlucHV0IHN0eWxpbmcgKi8KKyAgICBoZWlnaHQ6IGF1dG87CisgICAgcG9z
aXRpb246IGFic29sdXRlOworICAgIHRvcDogMDsKKyAgICBib3R0b206IDA7CisgICAgbWFyZ2lu
OiBhdXRvIDA7CisgICAgYm9yZGVyOiBub25lOyAvKiBNb2JpbGUgU2FmYXJpICovCisgICAgLXdl
YmtpdC1hcHBlYXJhbmNlOiBub25lOworICAgIGFwcGVhcmFuY2U6IG5vbmU7Cit9CisKKy50b2Rv
LWxpc3QgbGkgLnRvZ2dsZSB7CisgICAgb3BhY2l0eTogMDsKK30KKworLnRvZG8tbGlzdCBsaSAu
dG9nZ2xlICsgbGFiZWwgeworICAgIC8qCisgICAgICAgIEZpcmVmb3ggcmVxdWlyZXMgYCNgIHRv
IGJlIGVzY2FwZWQgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9p
ZD05MjI0MzMKKyAgICAgICAgSUUgYW5kIEVkZ2UgcmVxdWlyZXMgKmV2ZXJ5dGhpbmcqIHRvIGJl
IGVzY2FwZWQgdG8gcmVuZGVyLCBzbyB3ZSBkbyB0aGF0IGluc3RlYWQgb2YganVzdCB0aGUgYCNg
IC0gaHR0cHM6Ly9kZXZlbG9wZXIubWljcm9zb2Z0LmNvbS9lbi11cy9taWNyb3NvZnQtZWRnZS9w
bGF0Zm9ybS9pc3N1ZXMvNzE1NzQ1OS8KKyAgICAqLworICAgIGJhY2tncm91bmQtaW1hZ2U6IHVy
bCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsJTNDc3ZnJTIweG1sbnMlM0QlMjJodHRwJTNBLy93
d3cudzMub3JnLzIwMDAvc3ZnJTIyJTIwd2lkdGglM0QlMjI0MCUyMiUyMGhlaWdodCUzRCUyMjQw
JTIyJTIwdmlld0JveCUzRCUyMi0xMCUyMC0xOCUyMDEwMCUyMDEzNSUyMiUzRSUzQ2NpcmNsZSUy
MGN4JTNEJTIyNTAlMjIlMjBjeSUzRCUyMjUwJTIyJTIwciUzRCUyMjUwJTIyJTIwZmlsbCUzRCUy
Mm5vbmUlMjIlMjBzdHJva2UlM0QlMjIlMjNlZGVkZWQlMjIlMjBzdHJva2Utd2lkdGglM0QlMjIz
JTIyLyUzRSUzQy9zdmclM0UnKTsKKyAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Owor
ICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBsZWZ0OworfQorCisudG9kby1saXN0IGxp
IC50b2dnbGU6Y2hlY2tlZCArIGxhYmVsIHsKKyAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2Rh
dGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQS8vd3d3Lncz
Lm9yZy8yMDAwL3N2ZyUyMiUyMHdpZHRoJTNEJTIyNDAlMjIlMjBoZWlnaHQlM0QlMjI0MCUyMiUy
MHZpZXdCb3glM0QlMjItMTAlMjAtMTglMjAxMDAlMjAxMzUlMjIlM0UlM0NjaXJjbGUlMjBjeCUz
RCUyMjUwJTIyJTIwY3klM0QlMjI1MCUyMiUyMHIlM0QlMjI1MCUyMiUyMGZpbGwlM0QlMjJub25l
JTIyJTIwc3Ryb2tlJTNEJTIyJTIzYmRkYWQ1JTIyJTIwc3Ryb2tlLXdpZHRoJTNEJTIyMyUyMi8l
M0UlM0NwYXRoJTIwZmlsbCUzRCUyMiUyMzVkYzJhZiUyMiUyMGQlM0QlMjJNNzIlMjAyNUw0MiUy
MDcxJTIwMjclMjA1NmwtNCUyMDQlMjAyMCUyMDIwJTIwMzQtNTJ6JTIyLyUzRSUzQy9zdmclM0Un
KTsKK30KKworLnRvZG8tbGlzdCBsaSBsYWJlbCB7CisgICAgd29yZC1icmVhazogYnJlYWstYWxs
OworICAgIHBhZGRpbmc6IDE1cHggMTVweCAxNXB4IDYwcHg7CisgICAgZGlzcGxheTogYmxvY2s7
CisgICAgbGluZS1oZWlnaHQ6IDEuMjsKKyAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjRzOworfQor
CisudG9kby1saXN0IGxpLmNvbXBsZXRlZCBsYWJlbCB7CisgICAgY29sb3I6ICNkOWQ5ZDk7Cisg
ICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Cit9CisKKy50b2RvLWxpc3QgbGkgLmRl
c3Ryb3kgeworICAgIGRpc3BsYXk6IG5vbmU7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAg
IHRvcDogMDsKKyAgICByaWdodDogMTBweDsKKyAgICBib3R0b206IDA7CisgICAgd2lkdGg6IDQw
cHg7CisgICAgaGVpZ2h0OiA0MHB4OworICAgIG1hcmdpbjogYXV0byAwOworICAgIGZvbnQtc2l6
ZTogMzBweDsKKyAgICBjb2xvcjogI2NjOWE5YTsKKyAgICBtYXJnaW4tYm90dG9tOiAxMXB4Owor
ICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnMgZWFzZS1vdXQ7Cit9CisKKy50b2RvLWxpc3QgbGkg
LmRlc3Ryb3k6aG92ZXIgeworICAgIGNvbG9yOiAjYWY1YjVlOworfQorCisudG9kby1saXN0IGxp
IC5kZXN0cm95OmFmdGVyIHsKKyAgICBjb250ZW50OiAnw5cnOworfQorCisudG9kby1saXN0IGxp
OmhvdmVyIC5kZXN0cm95IHsKKyAgICBkaXNwbGF5OiBibG9jazsKK30KKworLnRvZG8tbGlzdCBs
aSAuZWRpdCB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworLnRvZG8tbGlzdCBsaS5lZGl0aW5n
Omxhc3QtY2hpbGQgeworICAgIG1hcmdpbi1ib3R0b206IC0xcHg7Cit9CisKKy5mb290ZXIgewor
ICAgIGNvbG9yOiAjNzc3OworICAgIHBhZGRpbmc6IDEwcHggMTVweDsKKyAgICBoZWlnaHQ6IDIw
cHg7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAj
ZTZlNmU2OworfQorCisuZm9vdGVyOmJlZm9yZSB7CisgICAgY29udGVudDogJyc7CisgICAgcG9z
aXRpb246IGFic29sdXRlOworICAgIHJpZ2h0OiAwOworICAgIGJvdHRvbTogMDsKKyAgICBsZWZ0
OiAwOworICAgIGhlaWdodDogNTBweDsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworICAgIGJveC1z
aGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMiksCisgICAgICAgICAgICAgICAgMCA4
cHggMCAtM3B4ICNmNmY2ZjYsCisgICAgICAgICAgICAgICAgMCA5cHggMXB4IC0zcHggcmdiYSgw
LCAwLCAwLCAwLjIpLAorICAgICAgICAgICAgICAgIDAgMTZweCAwIC02cHggI2Y2ZjZmNiwKKyAg
ICAgICAgICAgICAgICAwIDE3cHggMnB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpOworfQorCisu
dG9kby1jb3VudCB7CisgICAgZmxvYXQ6IGxlZnQ7CisgICAgdGV4dC1hbGlnbjogbGVmdDsKK30K
KworLnRvZG8tY291bnQgc3Ryb25nIHsKKyAgICBmb250LXdlaWdodDogMzAwOworfQorCisuZmls
dGVycyB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7CisgICAgbGlzdC1zdHlsZTog
bm9uZTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgcmlnaHQ6IDA7CisgICAgbGVmdDog
MDsKK30KKworLmZpbHRlcnMgbGkgeworICAgIGRpc3BsYXk6IGlubGluZTsKK30KKworLmZpbHRl
cnMgbGkgYSB7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgbWFyZ2luOiAzcHg7CisgICAgcGFk
ZGluZzogM3B4IDdweDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgYm9yZGVyOiAx
cHggc29saWQgdHJhbnNwYXJlbnQ7CisgICAgYm9yZGVyLXJhZGl1czogM3B4OworfQorCisuZmls
dGVycyBsaSBhOmhvdmVyIHsKKyAgICBib3JkZXItY29sb3I6IHJnYmEoMTc1LCA0NywgNDcsIDAu
MSk7Cit9CisKKy5maWx0ZXJzIGxpIGEuc2VsZWN0ZWQgeworICAgIGJvcmRlci1jb2xvcjogcmdi
YSgxNzUsIDQ3LCA0NywgMC4yKTsKK30KKworLmNsZWFyLWNvbXBsZXRlZCwKK2h0bWwgLmNsZWFy
LWNvbXBsZXRlZDphY3RpdmUgeworICAgIGZsb2F0OiByaWdodDsKKyAgICBwb3NpdGlvbjogcmVs
YXRpdmU7CisgICAgbGluZS1oZWlnaHQ6IDIwcHg7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25l
OworICAgIGN1cnNvcjogcG9pbnRlcjsKK30KKworLmNsZWFyLWNvbXBsZXRlZDpob3ZlciB7Cisg
ICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy5pbmZvIHsKKyAgICBtYXJnaW46
IDY1cHggYXV0byAwOworICAgIGNvbG9yOiAjYmZiZmJmOworICAgIGZvbnQtc2l6ZTogMTBweDsK
KyAgICB0ZXh0LXNoYWRvdzogMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7CisgICAg
dGV4dC1hbGlnbjogY2VudGVyOworfQorCisuaW5mbyBwIHsKKyAgICBsaW5lLWhlaWdodDogMTsK
K30KKworLmluZm8gYSB7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgdGV4dC1kZWNvcmF0aW9u
OiBub25lOworICAgIGZvbnQtd2VpZ2h0OiA0MDA7Cit9CisKKy5pbmZvIGE6aG92ZXIgeworICAg
IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisvKgorICAgIEhhY2sgdG8gcmVtb3Zl
IGJhY2tncm91bmQgZnJvbSBNb2JpbGUgU2FmYXJpLgorICAgIENhbid0IHVzZSBpdCBnbG9iYWxs
eSBzaW5jZSBpdCBkZXN0cm95cyBjaGVja2JveGVzIGluIEZpcmVmb3gKKyovCitAbWVkaWEgc2Ny
ZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApIHsKKyAgICAudG9nZ2xl
LWFsbCwKKyAgICAudG9kby1saXN0IGxpIC50b2dnbGUgeworICAgICAgICBiYWNrZ3JvdW5kOiBu
b25lOworICAgIH0KKworICAgIC50b2RvLWxpc3QgbGkgLnRvZ2dsZSB7CisgICAgICAgIGhlaWdo
dDogNDBweDsKKyAgICB9Cit9CisKK0BtZWRpYSAobWF4LXdpZHRoOiA0MzBweCkgeworICAgIC5m
b290ZXIgeworICAgICAgICBoZWlnaHQ6IDUwcHg7CisgICAgfQorCisgICAgLmZpbHRlcnMgewor
ICAgICAgICBib3R0b206IDEwcHg7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
cmVhY3Qvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
cmVhY3Qvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRk
MjVkM2M4NGFjNmM2YWVmMjZiOTY4M2EyYmMxMGM2MWY5NjBjOGYKLS0tIC9kZXYvbnVsbAorKysg
Yi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MK
QEAgLTAsMCArMSwxNDEgQEAKK2hyIHsKKyAgICBtYXJnaW46IDIwcHggMDsKKyAgICBib3JkZXI6
IDA7CisgICAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjYzVjNWM1OworICAgIGJvcmRlci1ib3R0
b206IDFweCBkYXNoZWQgI2Y3ZjdmNzsKK30KKworLmxlYXJuIGEgeworICAgIGZvbnQtd2VpZ2h0
OiBub3JtYWw7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGNvbG9yOiAjYjgzZjQ1
OworfQorCisubGVhcm4gYTpob3ZlciB7CisgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7
CisgICAgY29sb3I6ICM3ODdlN2U7Cit9CisKKy5sZWFybiBoMywKKy5sZWFybiBoNCwKKy5sZWFy
biBoNSB7CisgICAgbWFyZ2luOiAxMHB4IDA7CisgICAgZm9udC13ZWlnaHQ6IDUwMDsKKyAgICBs
aW5lLWhlaWdodDogMS4yOworICAgIGNvbG9yOiAjMDAwOworfQorCisubGVhcm4gaDMgeworICAg
IGZvbnQtc2l6ZTogMjRweDsKK30KKworLmxlYXJuIGg0IHsKKyAgICBmb250LXNpemU6IDE4cHg7
Cit9CisKKy5sZWFybiBoNSB7CisgICAgbWFyZ2luLWJvdHRvbTogMDsKKyAgICBmb250LXNpemU6
IDE0cHg7Cit9CisKKy5sZWFybiB1bCB7CisgICAgcGFkZGluZzogMDsKKyAgICBtYXJnaW46IDAg
MCAzMHB4IDI1cHg7Cit9CisKKy5sZWFybiBsaSB7CisgICAgbGluZS1oZWlnaHQ6IDIwcHg7Cit9
CisKKy5sZWFybiBwIHsKKyAgICBmb250LXNpemU6IDE1cHg7CisgICAgZm9udC13ZWlnaHQ6IDMw
MDsKKyAgICBsaW5lLWhlaWdodDogMS4zOworICAgIG1hcmdpbi10b3A6IDA7CisgICAgbWFyZ2lu
LWJvdHRvbTogMDsKK30KKworI2lzc3VlLWNvdW50IHsKKyAgICBkaXNwbGF5OiBub25lOworfQor
CisucXVvdGUgeworICAgIGJvcmRlcjogbm9uZTsKKyAgICBtYXJnaW46IDIwcHggMCA2MHB4IDA7
Cit9CisKKy5xdW90ZSBwIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy5xdW90ZSBw
OmJlZm9yZSB7CisgICAgY29udGVudDogJ+KAnCc7CisgICAgZm9udC1zaXplOiA1MHB4OworICAg
IG9wYWNpdHk6IC4xNTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAtMjBweDsK
KyAgICBsZWZ0OiAzcHg7Cit9CisKKy5xdW90ZSBwOmFmdGVyIHsKKyAgICBjb250ZW50OiAn4oCd
JzsKKyAgICBmb250LXNpemU6IDUwcHg7CisgICAgb3BhY2l0eTogLjE1OworICAgIHBvc2l0aW9u
OiBhYnNvbHV0ZTsKKyAgICBib3R0b206IC00MnB4OworICAgIHJpZ2h0OiAzcHg7Cit9CisKKy5x
dW90ZSBmb290ZXIgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBib3R0b206IC00MHB4
OworICAgIHJpZ2h0OiAwOworfQorCisucXVvdGUgZm9vdGVyIGltZyB7CisgICAgYm9yZGVyLXJh
ZGl1czogM3B4OworfQorCisucXVvdGUgZm9vdGVyIGEgeworICAgIG1hcmdpbi1sZWZ0OiA1cHg7
CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKK30KKworLnNwZWVjaC1idWJibGUgeworICAg
IHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBwYWRkaW5nOiAxMHB4OworICAgIGJhY2tncm91bmQ6
IHJnYmEoMCwgMCwgMCwgLjA0KTsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7Cit9CisKKy5zcGVl
Y2gtYnViYmxlOmFmdGVyIHsKKyAgICBjb250ZW50OiAnJzsKKyAgICBwb3NpdGlvbjogYWJzb2x1
dGU7CisgICAgdG9wOiAxMDAlOworICAgIHJpZ2h0OiAzMHB4OworICAgIGJvcmRlcjogMTNweCBz
b2xpZCB0cmFuc3BhcmVudDsKKyAgICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDAsIDAsIDAsIC4w
NCk7Cit9CisKKy5sZWFybi1iYXIgPiAubGVhcm4geworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
KyAgICB3aWR0aDogMjcycHg7CisgICAgdG9wOiA4cHg7CisgICAgbGVmdDogLTMwMHB4OworICAg
IHBhZGRpbmc6IDEwcHg7CisgICAgYm9yZGVyLXJhZGl1czogNXB4OworICAgIGJhY2tncm91bmQt
Y29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjYpOworICAgIHRyYW5zaXRpb24tcHJvcGVydHk6
IGxlZnQ7CisgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNTAwbXM7Cit9CisKK0BtZWRpYSAobWlu
LXdpZHRoOiA4OTlweCkgeworICAgIC5sZWFybi1iYXIgeworICAgICAgICB3aWR0aDogYXV0bzsK
KyAgICAgICAgcGFkZGluZy1sZWZ0OiAzMDBweDsKKyAgICB9CisKKyAgICAubGVhcm4tYmFyID4g
LmxlYXJuIHsKKyAgICAgICAgbGVmdDogOHB4OworICAgIH0KK30KZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzIGIvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uODFlMDA2YmM1MDJkZGM0Yzc0ZjQ3YmQxM2E4MzkyMjc3ZjgzMGRiOAotLS0gL2Rldi9udWxs
CisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNl
LmpzCkBAIC0wLDAgKzEsMjQ5IEBACisvKiBnbG9iYWwgXyAqLworKGZ1bmN0aW9uICgpIHsKKyAg
ICAndXNlIHN0cmljdCc7CisKKyAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovCisgICAgLy8g
VW5kZXJzY29yZSdzIFRlbXBsYXRlIE1vZHVsZQorICAgIC8vIENvdXJ0ZXN5IG9mIHVuZGVyc2Nv
cmVqcy5vcmcKKyAgICB2YXIgXyA9IChmdW5jdGlvbiAoXykgeworICAgICAgICBfLmRlZmF1bHRz
ID0gZnVuY3Rpb24gKG9iamVjdCkgeworICAgICAgICAgICAgaWYgKCFvYmplY3QpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9y
ICh2YXIgYXJnc0luZGV4ID0gMSwgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGFyZ3NJ
bmRleCA8IGFyZ3NMZW5ndGg7IGFyZ3NJbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGl0
ZXJhYmxlID0gYXJndW1lbnRzW2FyZ3NJbmRleF07CisgICAgICAgICAgICAgICAgaWYgKGl0ZXJh
YmxlKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBpdGVyYWJsZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdFtrZXldID09IG51bGwpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IGl0ZXJhYmxlW2tleV07CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAg
ICB9CisKKyAgICAgICAgLy8gQnkgZGVmYXVsdCwgVW5kZXJzY29yZSB1c2VzIEVSQi1zdHlsZSB0
ZW1wbGF0ZSBkZWxpbWl0ZXJzLCBjaGFuZ2UgdGhlCisgICAgICAgIC8vIGZvbGxvd2luZyB0ZW1w
bGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy4KKyAgICAgICAgXy50
ZW1wbGF0ZVNldHRpbmdzID0geworICAgICAgICAgICAgZXZhbHVhdGUgICAgOiAvPCUoW1xzXFNd
Kz8pJT4vZywKKyAgICAgICAgICAgIGludGVycG9sYXRlIDogLzwlPShbXHNcU10rPyklPi9nLAor
ICAgICAgICAgICAgZXNjYXBlICAgICAgOiAvPCUtKFtcc1xTXSs/KSU+L2cKKyAgICAgICAgfTsK
KworICAgICAgICAvLyBXaGVuIGN1c3RvbWl6aW5nIGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91
IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuCisgICAgICAgIC8vIGludGVycG9sYXRpb24sIGV2YWx1
YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQgaXMKKyAgICAgICAgLy8g
Z3VhcmFudGVlZCBub3QgdG8gbWF0Y2guCisgICAgICAgIHZhciBub01hdGNoID0gLyguKV4vOwor
CisgICAgICAgIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhh
dCB0aGV5IGNhbiBiZSBwdXQgaW50byBhCisgICAgICAgIC8vIHN0cmluZyBsaXRlcmFsLgorICAg
ICAgICB2YXIgZXNjYXBlcyA9IHsKKyAgICAgICAgICAgICInIjogICAgICAiJyIsCisgICAgICAg
ICAgICAnXFwnOiAgICAgJ1xcJywKKyAgICAgICAgICAgICdccic6ICAgICAncicsCisgICAgICAg
ICAgICAnXG4nOiAgICAgJ24nLAorICAgICAgICAgICAgJ1x0JzogICAgICd0JywKKyAgICAgICAg
ICAgICdcdTIwMjgnOiAndTIwMjgnLAorICAgICAgICAgICAgJ1x1MjAyOSc6ICd1MjAyOScKKyAg
ICAgICAgfTsKKworICAgICAgICB2YXIgZXNjYXBlciA9IC9cXHwnfFxyfFxufFx0fFx1MjAyOHxc
dTIwMjkvZzsKKworICAgICAgICAvLyBKYXZhU2NyaXB0IG1pY3JvLXRlbXBsYXRpbmcsIHNpbWls
YXIgdG8gSm9obiBSZXNpZydzIGltcGxlbWVudGF0aW9uLgorICAgICAgICAvLyBVbmRlcnNjb3Jl
IHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVycywgcHJlc2VydmVzIHdoaXRl
c3BhY2UsCisgICAgICAgIC8vIGFuZCBjb3JyZWN0bHkgZXNjYXBlcyBxdW90ZXMgd2l0aGluIGlu
dGVycG9sYXRlZCBjb2RlLgorICAgICAgICBfLnRlbXBsYXRlID0gZnVuY3Rpb24odGV4dCwgZGF0
YSwgc2V0dGluZ3MpIHsKKyAgICAgICAgICAgIHZhciByZW5kZXI7CisgICAgICAgICAgICBzZXR0
aW5ncyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBsYXRlU2V0dGluZ3MpOworCisg
ICAgICAgICAgICAvLyBDb21iaW5lIGRlbGltaXRlcnMgaW50byBvbmUgcmVndWxhciBleHByZXNz
aW9uIHZpYSBhbHRlcm5hdGlvbi4KKyAgICAgICAgICAgIHZhciBtYXRjaGVyID0gbmV3IFJlZ0V4
cChbCisgICAgICAgICAgICAgICAgKHNldHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2Us
CisgICAgICAgICAgICAgICAgKHNldHRpbmdzLmludGVycG9sYXRlIHx8IG5vTWF0Y2gpLnNvdXJj
ZSwKKyAgICAgICAgICAgICAgICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNl
CisgICAgICAgICAgICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7CisKKyAgICAgICAgICAgIC8v
IENvbXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxpdGVyYWxzIGFw
cHJvcHJpYXRlbHkuCisgICAgICAgICAgICB2YXIgaW5kZXggPSAwOworICAgICAgICAgICAgdmFy
IHNvdXJjZSA9ICJfX3ArPSciOworICAgICAgICAgICAgdGV4dC5yZXBsYWNlKG1hdGNoZXIsIGZ1
bmN0aW9uKG1hdGNoLCBlc2NhcGUsIGludGVycG9sYXRlLCBldmFsdWF0ZSwgb2Zmc2V0KSB7Cisg
ICAgICAgICAgICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCkKKyAgICAg
ICAgICAgICAgICAgICAgLnJlcGxhY2UoZXNjYXBlciwgZnVuY3Rpb24obWF0Y2gpIHsgcmV0dXJu
ICdcXCcgKyBlc2NhcGVzW21hdGNoXTsgfSk7CisKKyAgICAgICAgICAgICAgICBpZiAoZXNjYXBl
KSB7CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSAiJytcbigoX190PSgiICsgZXNjYXBl
ICsgIikpPT1udWxsPycnOl8uZXNjYXBlKF9fdCkpK1xuJyI7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0ZSkgeworICAgICAgICAgICAgICAgICAgICBz
b3VyY2UgKz0gIicrXG4oKF9fdD0oIiArIGludGVycG9sYXRlICsgIikpPT1udWxsPycnOl9fdCkr
XG4nIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGV2YWx1YXRlKSB7
CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSAiJztcbiIgKyBldmFsdWF0ZSArICJcbl9f
cCs9JyI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGluZGV4ID0gb2Zmc2V0
ICsgbWF0Y2gubGVuZ3RoOworICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgc291cmNlICs9ICInO1xuIjsKKworICAgICAgICAgICAgLy8g
SWYgYSB2YXJpYWJsZSBpcyBub3Qgc3BlY2lmaWVkLCBwbGFjZSBkYXRhIHZhbHVlcyBpbiBsb2Nh
bCBzY29wZS4KKyAgICAgICAgICAgIGlmICghc2V0dGluZ3MudmFyaWFibGUpIHNvdXJjZSA9ICd3
aXRoKG9ianx8e30pe1xuJyArIHNvdXJjZSArICd9XG4nOworCisgICAgICAgICAgICBzb3VyY2Ug
PSAidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLCIgKworICAgICAgICAg
ICAgICAgICJwcmludD1mdW5jdGlvbigpe19fcCs9X19qLmNhbGwoYXJndW1lbnRzLCcnKTt9O1xu
IiArCisgICAgICAgICAgICAgICAgc291cmNlICsgInJldHVybiBfX3A7XG4iOworCisgICAgICAg
ICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJlbmRlciA9IG5ldyBGdW5jdGlvbihzZXR0aW5n
cy52YXJpYWJsZSB8fCAnb2JqJywgJ18nLCBzb3VyY2UpOworICAgICAgICAgICAgfSBjYXRjaCAo
ZSkgeworICAgICAgICAgICAgICAgIGUuc291cmNlID0gc291cmNlOworICAgICAgICAgICAgICAg
IHRocm93IGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChkYXRhKSByZXR1cm4g
cmVuZGVyKGRhdGEsIF8pOworICAgICAgICAgICAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24oZGF0
YSkgeworICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfKTsK
KyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIGZ1
bmN0aW9uIHNvdXJjZSBhcyBhIGNvbnZlbmllbmNlIGZvciBwcmVjb21waWxhdGlvbi4KKyAgICAg
ICAgICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgKHNldHRpbmdzLnZhcmlhYmxl
IHx8ICdvYmonKSArICcpe1xuJyArIHNvdXJjZSArICd9JzsKKworICAgICAgICAgICAgcmV0dXJu
IHRlbXBsYXRlOworICAgICAgICB9OworCisgICAgICAgIHJldHVybiBfOworICAgIH0pKHt9KTsK
KworICAgIGlmIChsb2NhdGlvbi5ob3N0bmFtZSA9PT0gJ3RvZG9tdmMuY29tJykgeworICAgICAg
ICAoZnVuY3Rpb24oaSxzLG8sZyxyLGEsbSl7aVsnR29vZ2xlQW5hbHl0aWNzT2JqZWN0J109cjtp
W3JdPWlbcl18fGZ1bmN0aW9uKCl7CisgICAgICAgIChpW3JdLnE9aVtyXS5xfHxbXSkucHVzaChh
cmd1bWVudHMpfSxpW3JdLmw9MSpuZXcgRGF0ZSgpO2E9cy5jcmVhdGVFbGVtZW50KG8pLAorICAg
ICAgICBtPXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUobylbMF07YS5hc3luYz0xO2Euc3JjPWc7bS5w
YXJlbnROb2RlLmluc2VydEJlZm9yZShhLG0pCisgICAgICAgIH0pKHdpbmRvdyxkb2N1bWVudCwn
c2NyaXB0JywnaHR0cHM6Ly93d3cuZ29vZ2xlLWFuYWx5dGljcy5jb20vYW5hbHl0aWNzLmpzJywn
Z2EnKTsKKyAgICAgICAgZ2EoJ2NyZWF0ZScsICdVQS0zMTA4MTA2Mi0xJywgJ2F1dG8nKTsKKyAg
ICAgICAgZ2EoJ3NlbmQnLCAncGFnZXZpZXcnKTsKKyAgICB9CisgICAgLyoganNoaW50IGlnbm9y
ZTplbmQgKi8KKworICAgIGZ1bmN0aW9uIHJlZGlyZWN0KCkgeworICAgICAgICBpZiAobG9jYXRp
b24uaG9zdG5hbWUgPT09ICd0YXN0ZWpzLmdpdGh1Yi5pbycpIHsKKyAgICAgICAgICAgIGxvY2F0
aW9uLmhyZWYgPSBsb2NhdGlvbi5ocmVmLnJlcGxhY2UoJ3Rhc3RlanMuZ2l0aHViLmlvL3RvZG9t
dmMnLCAndG9kb212Yy5jb20nKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGZp
bmRSb290KCkgeworICAgICAgICB2YXIgYmFzZSA9IGxvY2F0aW9uLmhyZWYuaW5kZXhPZignZXhh
bXBsZXMvJyk7CisgICAgICAgIHJldHVybiBsb2NhdGlvbi5ocmVmLnN1YnN0cigwLCBiYXNlKTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBnZXRGaWxlKGZpbGUsIGNhbGxiYWNrKSB7CisgICAgICAg
IGlmICghbG9jYXRpb24uaG9zdCkgeworICAgICAgICAgICAgcmV0dXJuIGNvbnNvbGUuaW5mbygn
TWlzcyB0aGUgaW5mbyBiYXI/IFJ1biBUb2RvTVZDIGZyb20gYSBzZXJ2ZXIgdG8gYXZvaWQgYSBj
cm9zcy1vcmlnaW4gZXJyb3IuJyk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgeGhyID0gbmV3
IFhNTEh0dHBSZXF1ZXN0KCk7CisKKyAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIGZpbmRSb290KCkg
KyBmaWxlLCB0cnVlKTsKKyAgICAgICAgeGhyLnNlbmQoKTsKKworICAgICAgICB4aHIub25sb2Fk
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiBj
YWxsYmFjaykgeworICAgICAgICAgICAgICAgIGNhbGxiYWNrKHhoci5yZXNwb25zZVRleHQpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIExlYXJuKGxl
YXJuSlNPTiwgY29uZmlnKSB7CisgICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBMZWFybikp
IHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgTGVhcm4obGVhcm5KU09OLCBjb25maWcpOworICAg
ICAgICB9CisKKyAgICAgICAgdmFyIHRlbXBsYXRlLCBmcmFtZXdvcms7CisKKyAgICAgICAgaWYg
KHR5cGVvZiBsZWFybkpTT04gIT09ICdvYmplY3QnKSB7CisgICAgICAgICAgICB0cnkgeworICAg
ICAgICAgICAgICAgIGxlYXJuSlNPTiA9IEpTT04ucGFyc2UobGVhcm5KU09OKTsKKyAgICAgICAg
ICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZmlnKSB7CisgICAgICAgICAgICB0ZW1wbGF0
ZSA9IGNvbmZpZy50ZW1wbGF0ZTsKKyAgICAgICAgICAgIGZyYW1ld29yayA9IGNvbmZpZy5mcmFt
ZXdvcms7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXRlbXBsYXRlICYmIGxlYXJuSlNPTi50
ZW1wbGF0ZXMpIHsKKyAgICAgICAgICAgIHRlbXBsYXRlID0gbGVhcm5KU09OLnRlbXBsYXRlcy50
b2RvbXZjOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmcmFtZXdvcmsgJiYgZG9jdW1lbnQu
cXVlcnlTZWxlY3RvcignW2RhdGEtZnJhbWV3b3JrXScpKSB7CisgICAgICAgICAgICBmcmFtZXdv
cmsgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1mcmFtZXdvcmtdJykuZGF0YXNldC5m
cmFtZXdvcms7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnRlbXBsYXRlID0gdGVtcGxhdGU7
CisKKyAgICAgICAgaWYgKGxlYXJuSlNPTi5iYWNrZW5kKSB7CisgICAgICAgICAgICB0aGlzLmZy
YW1ld29ya0pTT04gPSBsZWFybkpTT04uYmFja2VuZDsKKyAgICAgICAgICAgIHRoaXMuZnJhbWV3
b3JrSlNPTi5pc3N1ZUxhYmVsID0gZnJhbWV3b3JrOworICAgICAgICAgICAgdGhpcy5hcHBlbmQo
eworICAgICAgICAgICAgICAgIGJhY2tlbmQ6IHRydWUKKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9IGVsc2UgaWYgKGxlYXJuSlNPTltmcmFtZXdvcmtdKSB7CisgICAgICAgICAgICB0aGlzLmZy
YW1ld29ya0pTT04gPSBsZWFybkpTT05bZnJhbWV3b3JrXTsKKyAgICAgICAgICAgIHRoaXMuZnJh
bWV3b3JrSlNPTi5pc3N1ZUxhYmVsID0gZnJhbWV3b3JrOworICAgICAgICAgICAgdGhpcy5hcHBl
bmQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuZmV0Y2hJc3N1ZUNvdW50KCk7CisgICAg
fQorCisgICAgTGVhcm4ucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIChvcHRzKSB7CisgICAg
ICAgIHZhciBhc2lkZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2FzaWRlJyk7CisgICAgICAg
IGFzaWRlLmlubmVySFRNTCA9IF8udGVtcGxhdGUodGhpcy50ZW1wbGF0ZSwgdGhpcy5mcmFtZXdv
cmtKU09OKTsKKyAgICAgICAgYXNpZGUuY2xhc3NOYW1lID0gJ2xlYXJuJzsKKworICAgICAgICBp
ZiAob3B0cyAmJiBvcHRzLmJhY2tlbmQpIHsKKyAgICAgICAgICAgIC8vIFJlbW92ZSBkZW1vIGxp
bmsKKyAgICAgICAgICAgIHZhciBzb3VyY2VMaW5rcyA9IGFzaWRlLnF1ZXJ5U2VsZWN0b3IoJy5z
b3VyY2UtbGlua3MnKTsKKyAgICAgICAgICAgIHZhciBoZWFkaW5nID0gc291cmNlTGlua3MuZmly
c3RFbGVtZW50Q2hpbGQ7CisgICAgICAgICAgICB2YXIgc291cmNlTGluayA9IHNvdXJjZUxpbmtz
Lmxhc3RFbGVtZW50Q2hpbGQ7CisgICAgICAgICAgICAvLyBDb3JyZWN0IGxpbmsgcGF0aAorICAg
ICAgICAgICAgdmFyIGhyZWYgPSBzb3VyY2VMaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpOworICAg
ICAgICAgICAgc291cmNlTGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmLnN1YnN0cihocmVm
Lmxhc3RJbmRleE9mKCdodHRwJykpKTsKKyAgICAgICAgICAgIHNvdXJjZUxpbmtzLmlubmVySFRN
TCA9IGhlYWRpbmcub3V0ZXJIVE1MICsgc291cmNlTGluay5vdXRlckhUTUw7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBMb2NhbGl6ZSBkZW1vIGxpbmtzCisgICAgICAgICAgICB2
YXIgZGVtb0xpbmtzID0gYXNpZGUucXVlcnlTZWxlY3RvckFsbCgnLmRlbW8tbGluaycpOworICAg
ICAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChkZW1vTGlua3MsIGZ1bmN0aW9u
IChkZW1vTGluaykgeworICAgICAgICAgICAgICAgIGlmIChkZW1vTGluay5nZXRBdHRyaWJ1dGUo
J2hyZWYnKS5zdWJzdHIoMCwgNCkgIT09ICdodHRwJykgeworICAgICAgICAgICAgICAgICAgICBk
ZW1vTGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBmaW5kUm9vdCgpICsgZGVtb0xpbmsuZ2V0QXR0
cmlidXRlKCdocmVmJykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9CisKKyAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc05hbWUgPSAoZG9jdW1lbnQuYm9k
eS5jbGFzc05hbWUgKyAnIGxlYXJuLWJhcicpLnRyaW0oKTsKKyAgICAgICAgZG9jdW1lbnQuYm9k
eS5pbnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyQmVnaW4nLCBhc2lkZS5vdXRlckhUTUwpOworICAg
IH07CisKKyAgICBMZWFybi5wcm90b3R5cGUuZmV0Y2hJc3N1ZUNvdW50ID0gZnVuY3Rpb24gKCkg
eworICAgICAgICB2YXIgaXNzdWVMaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lzc3Vl
LWNvdW50LWxpbmsnKTsKKyAgICAgICAgaWYgKGlzc3VlTGluaykgeworICAgICAgICAgICAgdmFy
IHVybCA9IGlzc3VlTGluay5ocmVmLnJlcGxhY2UoJ2h0dHBzOi8vZ2l0aHViLmNvbScsICdodHRw
czovL2FwaS5naXRodWIuY29tL3JlcG9zJyk7CisgICAgICAgICAgICB2YXIgeGhyID0gbmV3IFhN
TEh0dHBSZXF1ZXN0KCk7CisgICAgICAgICAgICB4aHIub3BlbignR0VUJywgdXJsLCB0cnVlKTsK
KyAgICAgICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgICAg
IHZhciBwYXJzZWRSZXNwb25zZSA9IEpTT04ucGFyc2UoZS50YXJnZXQucmVzcG9uc2VUZXh0KTsK
KyAgICAgICAgICAgICAgICBpZiAocGFyc2VkUmVzcG9uc2UgaW5zdGFuY2VvZiBBcnJheSkgewor
ICAgICAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBwYXJzZWRSZXNwb25zZS5sZW5ndGg7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCAhPT0gMCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaXNzdWVMaW5rLmlubmVySFRNTCA9ICdUaGlzIGFwcCBoYXMgJyArIGNvdW50ICsgJyBv
cGVuIGlzc3Vlcyc7CisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnaXNzdWUtY291bnQnKS5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICAg
ICAgeGhyLnNlbmQoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICByZWRpcmVjdCgpOworICAg
IGdldEZpbGUoJ2xlYXJuLmpzb24nLCBMZWFybik7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvcmVhY3QvbnBtLXNocmlua3dyYXAuanNvbiBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25wbS1z
aHJpbmt3cmFwLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODJlZTc4MjA3NTllYWRjNjZkY2M0Yzg3MjlhOWQ4
YTE4N2E3NDBhNQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25wbS1zaHJp
bmt3cmFwLmpzb24KQEAgLTAsMCArMSwxMDQgQEAKK3sKKyAgImRlcGVuZGVuY2llcyI6IHsKKyAg
ICAiYXNhcCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC41IiwKKyAgICAgICJmcm9tIjogImFz
YXBAPj0yLjAuMyA8Mi4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL2FzYXAvLS9hc2FwLTIuMC41LnRneiIKKyAgICB9LAorICAgICJjbGFzc25hbWVz
IjogeworICAgICAgInZlcnNpb24iOiAiMi4yLjUiLAorICAgICAgImZyb20iOiAiY2xhc3NuYW1l
c0A+PTIuMi41IDwzLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvY2xhc3NuYW1lcy8tL2NsYXNzbmFtZXMtMi4yLjUudGd6IgorICAgIH0sCisgICAg
ImNvcmUtanMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIuNyIsCisgICAgICAiZnJvbSI6ICJj
b3JlLWpzQD49MS4wLjAgPDIuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9jb3JlLWpzLy0vY29yZS1qcy0xLjIuNy50Z3oiCisgICAgfSwKKyAgICAi
ZGlyZWN0b3IiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIuOCIsCisgICAgICAiZnJvbSI6ICJk
aXJlY3RvckA+PTEuMi44IDwyLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdp
c3RyeS5ucG1qcy5vcmcvZGlyZWN0b3IvLS9kaXJlY3Rvci0xLjIuOC50Z3oiCisgICAgfSwKKyAg
ICAiZW5jb2RpbmciOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjEuMTIiLAorICAgICAgImZyb20i
OiAiZW5jb2RpbmdAPj0wLjEuMTEgPDAuMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbmNvZGluZy8tL2VuY29kaW5nLTAuMS4xMi50Z3oiCisgICAg
fSwKKyAgICAiZmJqcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuOC42IiwKKyAgICAgICJmcm9t
IjogImZianNAPj0wLjguNCA8MC45LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL2ZianMvLS9mYmpzLTAuOC42LnRneiIKKyAgICB9LAorICAgICJpY29u
di1saXRlIjogeworICAgICAgInZlcnNpb24iOiAiMC40LjE1IiwKKyAgICAgICJmcm9tIjogImlj
b252LWxpdGVAPj0wLjQuMTMgPDAuNS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3Jl
Z2lzdHJ5Lm5wbWpzLm9yZy9pY29udi1saXRlLy0vaWNvbnYtbGl0ZS0wLjQuMTUudGd6IgorICAg
IH0sCisgICAgImlzLXN0cmVhbSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKKyAgICAg
ICJmcm9tIjogImlzLXN0cmVhbUA+PTEuMC4xIDwyLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAi
aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtc3RyZWFtLy0vaXMtc3RyZWFtLTEuMS4wLnRn
eiIKKyAgICB9LAorICAgICJpc29tb3JwaGljLWZldGNoIjogeworICAgICAgInZlcnNpb24iOiAi
Mi4yLjEiLAorICAgICAgImZyb20iOiAiaXNvbW9ycGhpYy1mZXRjaEA+PTIuMS4xIDwzLjAuMCIs
CisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXNvbW9ycGhp
Yy1mZXRjaC8tL2lzb21vcnBoaWMtZmV0Y2gtMi4yLjEudGd6IgorICAgIH0sCisgICAgImpzLXRv
a2VucyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKKyAgICAgICJmcm9tIjogImpzLXRv
a2Vuc0A+PTIuMC4wIDwzLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvanMtdG9rZW5zLy0vanMtdG9rZW5zLTIuMC4wLnRneiIKKyAgICB9LAorICAg
ICJsb29zZS1lbnZpZnkiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjMuMCIsCisgICAgICAiZnJv
bSI6ICJsb29zZS1lbnZpZnlAPj0xLjEuMCA8Mi4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xvb3NlLWVudmlmeS8tL2xvb3NlLWVudmlmeS0xLjMu
MC50Z3oiCisgICAgfSwKKyAgICAibm9kZS1mZXRjaCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEu
Ni4zIiwKKyAgICAgICJmcm9tIjogIm5vZGUtZmV0Y2hAPj0xLjAuMSA8Mi4wLjAiLAorICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25vZGUtZmV0Y2gvLS9ub2Rl
LWZldGNoLTEuNi4zLnRneiIKKyAgICB9LAorICAgICJvYmplY3QtYXNzaWduIjogeworICAgICAg
InZlcnNpb24iOiAiNC4xLjAiLAorICAgICAgImZyb20iOiAib2JqZWN0LWFzc2lnbkA+PTQuMS4w
IDw1LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
b2JqZWN0LWFzc2lnbi8tL29iamVjdC1hc3NpZ24tNC4xLjAudGd6IgorICAgIH0sCisgICAgInBy
b21pc2UiOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjEuMSIsCisgICAgICAiZnJvbSI6ICJwcm9t
aXNlQD49Ny4xLjEgPDguMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9wcm9taXNlLy0vcHJvbWlzZS03LjEuMS50Z3oiCisgICAgfSwKKyAgICAicmVh
Y3QiOiB7CisgICAgICAidmVyc2lvbiI6ICIxNS40LjAiLAorICAgICAgImZyb20iOiAicmVhY3RA
MTUuNC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9y
ZWFjdC8tL3JlYWN0LTE1LjQuMC50Z3oiCisgICAgfSwKKyAgICAicmVhY3QtZG9tIjogeworICAg
ICAgInZlcnNpb24iOiAiMTUuNC4wIiwKKyAgICAgICJmcm9tIjogInJlYWN0LWRvbUAxNS40LjAi
LAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlYWN0LWRv
bS8tL3JlYWN0LWRvbS0xNS40LjAudGd6IgorICAgIH0sCisgICAgInRvZG9tdmMtYXBwLWNzcyI6
IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC42IiwKKyAgICAgICJmcm9tIjogInRvZG9tdmMtYXBw
LWNzc0A+PTIuMC4wIDwzLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvdG9kb212Yy1hcHAtY3NzLy0vdG9kb212Yy1hcHAtY3NzLTIuMC42LnRneiIK
KyAgICB9LAorICAgICJ0b2RvbXZjLWNvbW1vbiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4z
IiwKKyAgICAgICJmcm9tIjogInRvZG9tdmMtY29tbW9uQD49MS4wLjIgPDIuMC4wIiwKKyAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90b2RvbXZjLWNvbW1vbi8t
L3RvZG9tdmMtY29tbW9uLTEuMC4zLnRneiIKKyAgICB9LAorICAgICJ1YS1wYXJzZXItanMiOiB7
CisgICAgICAidmVyc2lvbiI6ICIwLjcuMTIiLAorICAgICAgImZyb20iOiAidWEtcGFyc2VyLWpz
QD49MC43LjkgPDAuOC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy91YS1wYXJzZXItanMvLS91YS1wYXJzZXItanMtMC43LjEyLnRneiIKKyAgICB9LAor
ICAgICJ3aGF0d2ctZmV0Y2giOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCisgICAgICAi
ZnJvbSI6ICJ3aGF0d2ctZmV0Y2hAPj0wLjEwLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL3doYXR3Zy1mZXRjaC8tL3doYXR3Zy1mZXRjaC0yLjAuMS50
Z3oiCisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9wYWNrYWdl
Lmpzb24gYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9wYWNrYWdlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA3
NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGU2ZjNk
NmYyNDA0OWFlYTVjOTQwYzc3MDU1NjNmM2YwOTY2NWMzNgotLS0gL2Rldi9udWxsCisrKyBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL3JlYWN0L3BhY2thZ2UuanNvbgpAQCAtMCwwICsxLDIwIEBACit7CisgICJwcml2
YXRlIjogdHJ1ZSwKKyAgInNjcmlwdHMiOiB7CisgICAgIm1ha2UiOiAiYmFiZWwgLS1wbHVnaW5z
IHRyYW5zZm9ybS1yZWFjdC1qc3gganMvYXBwLmpzeCB8IHVnbGlmeWpzIC1vIGJ1aWxkLm1pbi5q
cyIKKyAgfSwKKyAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAiY2xhc3NuYW1lcyI6ICJeMi4yLjUi
LAorICAgICJkaXJlY3RvciI6ICJeMS4yLjgiLAorICAgICJyZWFjdCI6ICJeMTUuNC4wIiwKKyAg
ICAicmVhY3QtZG9tIjogIl4xNS40LjAiLAorICAgICJ0b2RvbXZjLWFwcC1jc3MiOiAiXjIuMC4w
IiwKKyAgICAidG9kb212Yy1jb21tb24iOiAiXjEuMC4yIgorICB9LAorICAiZGV2RGVwZW5kZW5j
aWVzIjogeworICAgICJiYWJlbC1jbGkiOiAiXjYuMTAuMSIsCisgICAgImJhYmVsLXBsdWdpbi10
cmFuc2Zvcm0tcmVhY3QtanN4IjogIl42LjguMCIsCisgICAgImJhYmVsLXBsdWdpbi11Z2xpZnki
OiAiXjEuMC4yIiwKKyAgICAidWdsaWZ5LWpzIjogIl4yLjYuNCIKKyAgfQorfQpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlv
bmFsLXByb2ctZXhhbXBsZXMvZWxtL2J1aWxkL2VsbS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZnVuY3Rpb25hbC1wcm9nLWV4YW1wbGVzL2VsbS9i
dWlsZC9lbG0uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTdiOTdjNTQ3YTljOGZiYWJkZjA1NjkzNTZiNjc0MjY3
YTBiYjQwYgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvZnVuY3Rpb25hbC1wcm9nLWV4YW1wbGVzL2VsbS9idWlsZC9lbG0u
anMKQEAgLTAsMCArMSwxMDM3MyBAQAorCisoZnVuY3Rpb24oKSB7CisndXNlIHN0cmljdCc7CisK
K2Z1bmN0aW9uIEYyKGZ1bikKK3sKKyAgZnVuY3Rpb24gd3JhcHBlcihhKSB7IHJldHVybiBmdW5j
dGlvbihiKSB7IHJldHVybiBmdW4oYSxiKTsgfTsgfQorICB3cmFwcGVyLmFyaXR5ID0gMjsKKyAg
d3JhcHBlci5mdW5jID0gZnVuOworICByZXR1cm4gd3JhcHBlcjsKK30KKworZnVuY3Rpb24gRjMo
ZnVuKQoreworICBmdW5jdGlvbiB3cmFwcGVyKGEpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oYikg
eyByZXR1cm4gZnVuY3Rpb24oYykgeyByZXR1cm4gZnVuKGEsIGIsIGMpOyB9OyB9OworICB9Cisg
IHdyYXBwZXIuYXJpdHkgPSAzOworICB3cmFwcGVyLmZ1bmMgPSBmdW47CisgIHJldHVybiB3cmFw
cGVyOworfQorCitmdW5jdGlvbiBGNChmdW4pCit7CisgIGZ1bmN0aW9uIHdyYXBwZXIoYSkgeyBy
ZXR1cm4gZnVuY3Rpb24oYikgeyByZXR1cm4gZnVuY3Rpb24oYykgeworICAgIHJldHVybiBmdW5j
dGlvbihkKSB7IHJldHVybiBmdW4oYSwgYiwgYywgZCk7IH07IH07IH07CisgIH0KKyAgd3JhcHBl
ci5hcml0eSA9IDQ7CisgIHdyYXBwZXIuZnVuYyA9IGZ1bjsKKyAgcmV0dXJuIHdyYXBwZXI7Cit9
CisKK2Z1bmN0aW9uIEY1KGZ1bikKK3sKKyAgZnVuY3Rpb24gd3JhcHBlcihhKSB7IHJldHVybiBm
dW5jdGlvbihiKSB7IHJldHVybiBmdW5jdGlvbihjKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKGQp
IHsgcmV0dXJuIGZ1bmN0aW9uKGUpIHsgcmV0dXJuIGZ1bihhLCBiLCBjLCBkLCBlKTsgfTsgfTsg
fTsgfTsKKyAgfQorICB3cmFwcGVyLmFyaXR5ID0gNTsKKyAgd3JhcHBlci5mdW5jID0gZnVuOwor
ICByZXR1cm4gd3JhcHBlcjsKK30KKworZnVuY3Rpb24gRjYoZnVuKQoreworICBmdW5jdGlvbiB3
cmFwcGVyKGEpIHsgcmV0dXJuIGZ1bmN0aW9uKGIpIHsgcmV0dXJuIGZ1bmN0aW9uKGMpIHsKKyAg
ICByZXR1cm4gZnVuY3Rpb24oZCkgeyByZXR1cm4gZnVuY3Rpb24oZSkgeyByZXR1cm4gZnVuY3Rp
b24oZikgeworICAgIHJldHVybiBmdW4oYSwgYiwgYywgZCwgZSwgZik7IH07IH07IH07IH07IH07
CisgIH0KKyAgd3JhcHBlci5hcml0eSA9IDY7CisgIHdyYXBwZXIuZnVuYyA9IGZ1bjsKKyAgcmV0
dXJuIHdyYXBwZXI7Cit9CisKK2Z1bmN0aW9uIEY3KGZ1bikKK3sKKyAgZnVuY3Rpb24gd3JhcHBl
cihhKSB7IHJldHVybiBmdW5jdGlvbihiKSB7IHJldHVybiBmdW5jdGlvbihjKSB7CisgICAgcmV0
dXJuIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGZ1bmN0aW9uKGUpIHsgcmV0dXJuIGZ1bmN0aW9uKGYp
IHsKKyAgICByZXR1cm4gZnVuY3Rpb24oZykgeyByZXR1cm4gZnVuKGEsIGIsIGMsIGQsIGUsIGYs
IGcpOyB9OyB9OyB9OyB9OyB9OyB9OworICB9CisgIHdyYXBwZXIuYXJpdHkgPSA3OworICB3cmFw
cGVyLmZ1bmMgPSBmdW47CisgIHJldHVybiB3cmFwcGVyOworfQorCitmdW5jdGlvbiBGOChmdW4p
Cit7CisgIGZ1bmN0aW9uIHdyYXBwZXIoYSkgeyByZXR1cm4gZnVuY3Rpb24oYikgeyByZXR1cm4g
ZnVuY3Rpb24oYykgeworICAgIHJldHVybiBmdW5jdGlvbihkKSB7IHJldHVybiBmdW5jdGlvbihl
KSB7IHJldHVybiBmdW5jdGlvbihmKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKGcpIHsgcmV0dXJu
IGZ1bmN0aW9uKGgpIHsKKyAgICByZXR1cm4gZnVuKGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgpOyB9
OyB9OyB9OyB9OyB9OyB9OyB9OworICB9CisgIHdyYXBwZXIuYXJpdHkgPSA4OworICB3cmFwcGVy
LmZ1bmMgPSBmdW47CisgIHJldHVybiB3cmFwcGVyOworfQorCitmdW5jdGlvbiBGOShmdW4pCit7
CisgIGZ1bmN0aW9uIHdyYXBwZXIoYSkgeyByZXR1cm4gZnVuY3Rpb24oYikgeyByZXR1cm4gZnVu
Y3Rpb24oYykgeworICAgIHJldHVybiBmdW5jdGlvbihkKSB7IHJldHVybiBmdW5jdGlvbihlKSB7
IHJldHVybiBmdW5jdGlvbihmKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKGcpIHsgcmV0dXJuIGZ1
bmN0aW9uKGgpIHsgcmV0dXJuIGZ1bmN0aW9uKGkpIHsKKyAgICByZXR1cm4gZnVuKGEsIGIsIGMs
IGQsIGUsIGYsIGcsIGgsIGkpOyB9OyB9OyB9OyB9OyB9OyB9OyB9OyB9OworICB9CisgIHdyYXBw
ZXIuYXJpdHkgPSA5OworICB3cmFwcGVyLmZ1bmMgPSBmdW47CisgIHJldHVybiB3cmFwcGVyOwor
fQorCitmdW5jdGlvbiBBMihmdW4sIGEsIGIpCit7CisgIHJldHVybiBmdW4uYXJpdHkgPT09IDIK
KyAgICA/IGZ1bi5mdW5jKGEsIGIpCisgICAgOiBmdW4oYSkoYik7Cit9CitmdW5jdGlvbiBBMyhm
dW4sIGEsIGIsIGMpCit7CisgIHJldHVybiBmdW4uYXJpdHkgPT09IDMKKyAgICA/IGZ1bi5mdW5j
KGEsIGIsIGMpCisgICAgOiBmdW4oYSkoYikoYyk7Cit9CitmdW5jdGlvbiBBNChmdW4sIGEsIGIs
IGMsIGQpCit7CisgIHJldHVybiBmdW4uYXJpdHkgPT09IDQKKyAgICA/IGZ1bi5mdW5jKGEsIGIs
IGMsIGQpCisgICAgOiBmdW4oYSkoYikoYykoZCk7Cit9CitmdW5jdGlvbiBBNShmdW4sIGEsIGIs
IGMsIGQsIGUpCit7CisgIHJldHVybiBmdW4uYXJpdHkgPT09IDUKKyAgICA/IGZ1bi5mdW5jKGEs
IGIsIGMsIGQsIGUpCisgICAgOiBmdW4oYSkoYikoYykoZCkoZSk7Cit9CitmdW5jdGlvbiBBNihm
dW4sIGEsIGIsIGMsIGQsIGUsIGYpCit7CisgIHJldHVybiBmdW4uYXJpdHkgPT09IDYKKyAgICA/
IGZ1bi5mdW5jKGEsIGIsIGMsIGQsIGUsIGYpCisgICAgOiBmdW4oYSkoYikoYykoZCkoZSkoZik7
Cit9CitmdW5jdGlvbiBBNyhmdW4sIGEsIGIsIGMsIGQsIGUsIGYsIGcpCit7CisgIHJldHVybiBm
dW4uYXJpdHkgPT09IDcKKyAgICA/IGZ1bi5mdW5jKGEsIGIsIGMsIGQsIGUsIGYsIGcpCisgICAg
OiBmdW4oYSkoYikoYykoZCkoZSkoZikoZyk7Cit9CitmdW5jdGlvbiBBOChmdW4sIGEsIGIsIGMs
IGQsIGUsIGYsIGcsIGgpCit7CisgIHJldHVybiBmdW4uYXJpdHkgPT09IDgKKyAgICA/IGZ1bi5m
dW5jKGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgpCisgICAgOiBmdW4oYSkoYikoYykoZCkoZSkoZiko
ZykoaCk7Cit9CitmdW5jdGlvbiBBOShmdW4sIGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIGkpCit7
CisgIHJldHVybiBmdW4uYXJpdHkgPT09IDkKKyAgICA/IGZ1bi5mdW5jKGEsIGIsIGMsIGQsIGUs
IGYsIGcsIGgsIGkpCisgICAgOiBmdW4oYSkoYikoYykoZCkoZSkoZikoZykoaCkoaSk7Cit9CisK
Ky8vaW1wb3J0IE5hdGl2ZS5VdGlscyAvLworCit2YXIgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jh
c2ljcyA9IGZ1bmN0aW9uKCkgeworCitmdW5jdGlvbiBkaXYoYSwgYikKK3sKKyAgICByZXR1cm4g
KGEgLyBiKSB8IDA7Cit9CitmdW5jdGlvbiByZW0oYSwgYikKK3sKKyAgICByZXR1cm4gYSAlIGI7
Cit9CitmdW5jdGlvbiBtb2QoYSwgYikKK3sKKyAgICBpZiAoYiA9PT0gMCkKKyAgICB7CisgICAg
ICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHBlcmZvcm0gbW9kIDAuIERpdmlzaW9uIGJ5IHpl
cm8gZXJyb3IuJyk7CisgICAgfQorICAgIHZhciByID0gYSAlIGI7CisgICAgdmFyIG0gPSBhID09
PSAwID8gMCA6IChiID4gMCA/IChhID49IDAgPyByIDogciArIGIpIDogLW1vZCgtYSwgLWIpKTsK
KworICAgIHJldHVybiBtID09PSBiID8gMCA6IG07Cit9CitmdW5jdGlvbiBsb2dCYXNlKGJhc2Us
IG4pCit7CisgICAgcmV0dXJuIE1hdGgubG9nKG4pIC8gTWF0aC5sb2coYmFzZSk7Cit9CitmdW5j
dGlvbiBuZWdhdGUobikKK3sKKyAgICByZXR1cm4gLW47Cit9CitmdW5jdGlvbiBhYnMobikKK3sK
KyAgICByZXR1cm4gbiA8IDAgPyAtbiA6IG47Cit9CisKK2Z1bmN0aW9uIG1pbihhLCBiKQorewor
ICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY21wKGEsIGIpIDwgMCA/IGEg
OiBiOworfQorZnVuY3Rpb24gbWF4KGEsIGIpCit7CisgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9VdGlscy5jbXAoYSwgYikgPiAwID8gYSA6IGI7Cit9CitmdW5jdGlvbiBjbGFtcChs
bywgaGksIG4pCit7CisgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jbXAo
biwgbG8pIDwgMAorICAgICAgICA/IGxvCisgICAgICAgIDogX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X1V0aWxzLmNtcChuLCBoaSkgPiAwCisgICAgICAgICAgICA/IGhpCisgICAgICAgICAgICA6IG47
Cit9CisKK3ZhciBvcmQgPSBbJ0xUJywgJ0VRJywgJ0dUJ107CisKK2Z1bmN0aW9uIGNvbXBhcmUo
eCwgeSkKK3sKKyAgICByZXR1cm4geyBjdG9yOiBvcmRbX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0
aWxzLmNtcCh4LCB5KSArIDFdIH07Cit9CisKK2Z1bmN0aW9uIHhvcihhLCBiKQoreworICAgIHJl
dHVybiBhICE9PSBiOworfQorZnVuY3Rpb24gbm90KGIpCit7CisgICAgcmV0dXJuICFiOworfQor
ZnVuY3Rpb24gaXNJbmZpbml0ZShuKQoreworICAgIHJldHVybiBuID09PSBJbmZpbml0eSB8fCBu
ID09PSAtSW5maW5pdHk7Cit9CisKK2Z1bmN0aW9uIHRydW5jYXRlKG4pCit7CisgICAgcmV0dXJu
IG4gfCAwOworfQorCitmdW5jdGlvbiBkZWdyZWVzKGQpCit7CisgICAgcmV0dXJuIGQgKiBNYXRo
LlBJIC8gMTgwOworfQorZnVuY3Rpb24gdHVybnModCkKK3sKKyAgICByZXR1cm4gMiAqIE1hdGgu
UEkgKiB0OworfQorZnVuY3Rpb24gZnJvbVBvbGFyKHBvaW50KQoreworICAgIHZhciByID0gcG9p
bnQuXzA7CisgICAgdmFyIHQgPSBwb2ludC5fMTsKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX1V0aWxzLlR1cGxlMihyICogTWF0aC5jb3ModCksIHIgKiBNYXRoLnNpbih0KSk7Cit9
CitmdW5jdGlvbiB0b1BvbGFyKHBvaW50KQoreworICAgIHZhciB4ID0gcG9pbnQuXzA7CisgICAg
dmFyIHkgPSBwb2ludC5fMTsKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxz
LlR1cGxlMihNYXRoLnNxcnQoeCAqIHggKyB5ICogeSksIE1hdGguYXRhbjIoeSwgeCkpOworfQor
CityZXR1cm4geworICAgIGRpdjogRjIoZGl2KSwKKyAgICByZW06IEYyKHJlbSksCisgICAgbW9k
OiBGMihtb2QpLAorCisgICAgcGk6IE1hdGguUEksCisgICAgZTogTWF0aC5FLAorICAgIGNvczog
TWF0aC5jb3MsCisgICAgc2luOiBNYXRoLnNpbiwKKyAgICB0YW46IE1hdGgudGFuLAorICAgIGFj
b3M6IE1hdGguYWNvcywKKyAgICBhc2luOiBNYXRoLmFzaW4sCisgICAgYXRhbjogTWF0aC5hdGFu
LAorICAgIGF0YW4yOiBGMihNYXRoLmF0YW4yKSwKKworICAgIGRlZ3JlZXM6IGRlZ3JlZXMsCisg
ICAgdHVybnM6IHR1cm5zLAorICAgIGZyb21Qb2xhcjogZnJvbVBvbGFyLAorICAgIHRvUG9sYXI6
IHRvUG9sYXIsCisKKyAgICBzcXJ0OiBNYXRoLnNxcnQsCisgICAgbG9nQmFzZTogRjIobG9nQmFz
ZSksCisgICAgbmVnYXRlOiBuZWdhdGUsCisgICAgYWJzOiBhYnMsCisgICAgbWluOiBGMihtaW4p
LAorICAgIG1heDogRjIobWF4KSwKKyAgICBjbGFtcDogRjMoY2xhbXApLAorICAgIGNvbXBhcmU6
IEYyKGNvbXBhcmUpLAorCisgICAgeG9yOiBGMih4b3IpLAorICAgIG5vdDogbm90LAorCisgICAg
dHJ1bmNhdGU6IHRydW5jYXRlLAorICAgIGNlaWxpbmc6IE1hdGguY2VpbCwKKyAgICBmbG9vcjog
TWF0aC5mbG9vciwKKyAgICByb3VuZDogTWF0aC5yb3VuZCwKKyAgICB0b0Zsb2F0OiBmdW5jdGlv
bih4KSB7IHJldHVybiB4OyB9LAorICAgIGlzTmFOOiBpc05hTiwKKyAgICBpc0luZmluaXRlOiBp
c0luZmluaXRlCit9OworCit9KCk7CisvL2ltcG9ydCAvLworCit2YXIgX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX1V0aWxzID0gZnVuY3Rpb24oKSB7CisKKy8vIENPTVBBUklTT05TCisKK2Z1bmN0aW9u
IGVxKHgsIHkpCit7CisgICAgdmFyIHN0YWNrID0gW107CisgICAgdmFyIGlzRXF1YWwgPSBlcUhl
bHAoeCwgeSwgMCwgc3RhY2spOworICAgIHZhciBwYWlyOworICAgIHdoaWxlIChpc0VxdWFsICYm
IChwYWlyID0gc3RhY2sucG9wKCkpKQorICAgIHsKKyAgICAgICAgaXNFcXVhbCA9IGVxSGVscChw
YWlyLngsIHBhaXIueSwgMCwgc3RhY2spOworICAgIH0KKyAgICByZXR1cm4gaXNFcXVhbDsKK30K
KworCitmdW5jdGlvbiBlcUhlbHAoeCwgeSwgZGVwdGgsIHN0YWNrKQoreworICAgIGlmIChkZXB0
aCA+IDEwMCkKKyAgICB7CisgICAgICAgIHN0YWNrLnB1c2goeyB4OiB4LCB5OiB5IH0pOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoeCA9PT0geSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh0eXBlb2YgeCAhPT0gJ29iamVjdCcp
CisgICAgeworICAgICAgICBpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigKKyAgICAgICAgICAgICAgICAnVHJ5aW5nIHRv
IHVzZSBgKD09KWAgb24gZnVuY3Rpb25zLiBUaGVyZSBpcyBubyB3YXkgdG8ga25vdyBpZiBmdW5j
dGlvbnMgYXJlICJ0aGUgc2FtZSIgaW4gdGhlIEVsbSBzZW5zZS4nCisgICAgICAgICAgICAgICAg
KyAnIFJlYWQgbW9yZSBhYm91dCB0aGlzIGF0IGh0dHA6Ly9wYWNrYWdlLmVsbS1sYW5nLm9yZy9w
YWNrYWdlcy9lbG0tbGFuZy9jb3JlL2xhdGVzdC9CYXNpY3MjPT0nCisgICAgICAgICAgICAgICAg
KyAnIHdoaWNoIGRlc2NyaWJlcyB3aHkgaXQgaXMgdGhpcyB3YXkgYW5kIHdoYXQgdGhlIGJldHRl
ciB2ZXJzaW9uIHdpbGwgbG9vayBsaWtlLicKKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICh4ID09PSBudWxsIHx8IHkgPT09
IG51bGwpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2UKKyAgICB9CisKKyAgICBpZiAoeCBp
bnN0YW5jZW9mIERhdGUpCisgICAgeworICAgICAgICByZXR1cm4geC5nZXRUaW1lKCkgPT09IHku
Z2V0VGltZSgpOworICAgIH0KKworICAgIGlmICghKCdjdG9yJyBpbiB4KSkKKyAgICB7CisgICAg
ICAgIGZvciAodmFyIGtleSBpbiB4KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWVxSGVs
cCh4W2tleV0sIHlba2V5XSwgZGVwdGggKyAxLCBzdGFjaykpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIGNvbnZlcnQgRGljdHMgYW5kIFNldHMg
dG8gbGlzdHMKKyAgICBpZiAoeC5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJyB8fCB4LmN0
b3IgPT09ICdSQkVtcHR5X2VsbV9idWlsdGluJykKKyAgICB7CisgICAgICAgIHggPSBfZWxtX2xh
bmckY29yZSREaWN0JHRvTGlzdCh4KTsKKyAgICAgICAgeSA9IF9lbG1fbGFuZyRjb3JlJERpY3Qk
dG9MaXN0KHkpOworICAgIH0KKyAgICBpZiAoeC5jdG9yID09PSAnU2V0X2VsbV9idWlsdGluJykK
KyAgICB7CisgICAgICAgIHggPSBfZWxtX2xhbmckY29yZSRTZXQkdG9MaXN0KHgpOworICAgICAg
ICB5ID0gX2VsbV9sYW5nJGNvcmUkU2V0JHRvTGlzdCh5KTsKKyAgICB9CisKKyAgICAvLyBjaGVj
ayBpZiBsaXN0cyBhcmUgZXF1YWwgd2l0aG91dCByZWN1cnNpb24KKyAgICBpZiAoeC5jdG9yID09
PSAnOjonKQorICAgIHsKKyAgICAgICAgdmFyIGEgPSB4OworICAgICAgICB2YXIgYiA9IHk7Cisg
ICAgICAgIHdoaWxlIChhLmN0b3IgPT09ICc6OicgJiYgYi5jdG9yID09PSAnOjonKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoIWVxSGVscChhLl8wLCBiLl8wLCBkZXB0aCArIDEsIHN0YWNr
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBhID0gYS5fMTsKKyAgICAgICAgICAgIGIgPSBiLl8xOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBhLmN0b3IgPT09IGIuY3RvcjsKKyAgICB9CisKKyAgICAv
LyBjaGVjayBpZiBBcnJheXMgYXJlIGVxdWFsCisgICAgaWYgKHguY3RvciA9PT0gJ19BcnJheScp
CisgICAgeworICAgICAgICB2YXIgeHMgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQXJyYXkudG9K
U0FycmF5KHgpOworICAgICAgICB2YXIgeXMgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQXJyYXku
dG9KU0FycmF5KHkpOworICAgICAgICBpZiAoeHMubGVuZ3RoICE9PSB5cy5sZW5ndGgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoIWVxSGVscCh4c1tpXSwgeXNbaV0sIGRlcHRoICsgMSwgc3RhY2spKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIWVxSGVscCh4LmN0b3Is
IHkuY3RvciwgZGVwdGggKyAxLCBzdGFjaykpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgZm9yICh2YXIga2V5IGluIHgpCisgICAgeworICAgICAgICBpZiAoIWVx
SGVscCh4W2tleV0sIHlba2V5XSwgZGVwdGggKyAxLCBzdGFjaykpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworLy8gQ29kZSBpbiBHZW5lcmF0ZS9KYXZhU2NyaXB0LmhzLCBCYXNpY3MuanMsIGFuZCBM
aXN0LmpzIGRlcGVuZHMgb24KKy8vIHRoZSBwYXJ0aWN1bGFyIGludGVnZXIgdmFsdWVzIGFzc2ln
bmVkIHRvIExULCBFUSwgYW5kIEdULgorCit2YXIgTFQgPSAtMSwgRVEgPSAwLCBHVCA9IDE7CisK
K2Z1bmN0aW9uIGNtcCh4LCB5KQoreworICAgIGlmICh0eXBlb2YgeCAhPT0gJ29iamVjdCcpCisg
ICAgeworICAgICAgICByZXR1cm4geCA9PT0geSA/IEVRIDogeCA8IHkgPyBMVCA6IEdUOworICAg
IH0KKworICAgIGlmICh4IGluc3RhbmNlb2YgU3RyaW5nKQorICAgIHsKKyAgICAgICAgdmFyIGEg
PSB4LnZhbHVlT2YoKTsKKyAgICAgICAgdmFyIGIgPSB5LnZhbHVlT2YoKTsKKyAgICAgICAgcmV0
dXJuIGEgPT09IGIgPyBFUSA6IGEgPCBiID8gTFQgOiBHVDsKKyAgICB9CisKKyAgICBpZiAoeC5j
dG9yID09PSAnOjonIHx8IHguY3RvciA9PT0gJ1tdJykKKyAgICB7CisgICAgICAgIHdoaWxlICh4
LmN0b3IgPT09ICc6OicgJiYgeS5jdG9yID09PSAnOjonKQorICAgICAgICB7CisgICAgICAgICAg
ICB2YXIgb3JkID0gY21wKHguXzAsIHkuXzApOworICAgICAgICAgICAgaWYgKG9yZCAhPT0gRVEp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG9yZDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHggPSB4Ll8xOworICAgICAgICAgICAgeSA9IHkuXzE7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHguY3RvciA9PT0geS5jdG9yID8gRVEgOiB4LmN0b3IgPT09ICdb
XScgPyBMVCA6IEdUOworICAgIH0KKworICAgIGlmICh4LmN0b3Iuc2xpY2UoMCwgNikgPT09ICdf
VHVwbGUnKQorICAgIHsKKyAgICAgICAgdmFyIG9yZDsKKyAgICAgICAgdmFyIG4gPSB4LmN0b3Iu
c2xpY2UoNikgLSAwOworICAgICAgICB2YXIgZXJyID0gJ2Nhbm5vdCBjb21wYXJlIHR1cGxlcyB3
aXRoIG1vcmUgdGhhbiA2IGVsZW1lbnRzLic7CisgICAgICAgIGlmIChuID09PSAwKSByZXR1cm4g
RVE7CisgICAgICAgIGlmIChuID49IDEpIHsgb3JkID0gY21wKHguXzAsIHkuXzApOyBpZiAob3Jk
ICE9PSBFUSkgcmV0dXJuIG9yZDsKKyAgICAgICAgaWYgKG4gPj0gMikgeyBvcmQgPSBjbXAoeC5f
MSwgeS5fMSk7IGlmIChvcmQgIT09IEVRKSByZXR1cm4gb3JkOworICAgICAgICBpZiAobiA+PSAz
KSB7IG9yZCA9IGNtcCh4Ll8yLCB5Ll8yKTsgaWYgKG9yZCAhPT0gRVEpIHJldHVybiBvcmQ7Cisg
ICAgICAgIGlmIChuID49IDQpIHsgb3JkID0gY21wKHguXzMsIHkuXzMpOyBpZiAob3JkICE9PSBF
USkgcmV0dXJuIG9yZDsKKyAgICAgICAgaWYgKG4gPj0gNSkgeyBvcmQgPSBjbXAoeC5fNCwgeS5f
NCk7IGlmIChvcmQgIT09IEVRKSByZXR1cm4gb3JkOworICAgICAgICBpZiAobiA+PSA2KSB7IG9y
ZCA9IGNtcCh4Ll81LCB5Ll81KTsgaWYgKG9yZCAhPT0gRVEpIHJldHVybiBvcmQ7CisgICAgICAg
IGlmIChuID49IDcpIHRocm93IG5ldyBFcnJvcignQ29tcGFyaXNvbiBlcnJvcjogJyArIGVycik7
IH0gfSB9IH0gfSB9CisgICAgICAgIHJldHVybiBFUTsKKyAgICB9CisKKyAgICB0aHJvdyBuZXcg
RXJyb3IoCisgICAgICAgICdDb21wYXJpc29uIGVycm9yOiBjb21wYXJpc29uIGlzIG9ubHkgZGVm
aW5lZCBvbiBpbnRzLCAnCisgICAgICAgICsgJ2Zsb2F0cywgdGltZXMsIGNoYXJzLCBzdHJpbmdz
LCBsaXN0cyBvZiBjb21wYXJhYmxlIHZhbHVlcywgJworICAgICAgICArICdhbmQgdHVwbGVzIG9m
IGNvbXBhcmFibGUgdmFsdWVzLicKKyAgICApOworfQorCisKKy8vIENPTU1PTiBWQUxVRVMKKwor
dmFyIFR1cGxlMCA9IHsKKyAgICBjdG9yOiAnX1R1cGxlMCcKK307CisKK2Z1bmN0aW9uIFR1cGxl
Mih4LCB5KQoreworICAgIHJldHVybiB7CisgICAgICAgIGN0b3I6ICdfVHVwbGUyJywKKyAgICAg
ICAgXzA6IHgsCisgICAgICAgIF8xOiB5CisgICAgfTsKK30KKworZnVuY3Rpb24gY2hyKGMpCit7
CisgICAgcmV0dXJuIG5ldyBTdHJpbmcoYyk7Cit9CisKKworLy8gR1VJRAorCit2YXIgY291bnQg
PSAwOworZnVuY3Rpb24gZ3VpZChfKQoreworICAgIHJldHVybiBjb3VudCsrOworfQorCisKKy8v
IFJFQ09SRFMKKworZnVuY3Rpb24gdXBkYXRlKG9sZFJlY29yZCwgdXBkYXRlZEZpZWxkcykKK3sK
KyAgICB2YXIgbmV3UmVjb3JkID0ge307CisgICAgZm9yICh2YXIga2V5IGluIG9sZFJlY29yZCkK
KyAgICB7CisgICAgICAgIHZhciB2YWx1ZSA9IChrZXkgaW4gdXBkYXRlZEZpZWxkcykgPyB1cGRh
dGVkRmllbGRzW2tleV0gOiBvbGRSZWNvcmRba2V5XTsKKyAgICAgICAgbmV3UmVjb3JkW2tleV0g
PSB2YWx1ZTsKKyAgICB9CisgICAgcmV0dXJuIG5ld1JlY29yZDsKK30KKworCisvLy8vIExJU1Qg
U1RVRkYgLy8vLworCit2YXIgTmlsID0geyBjdG9yOiAnW10nIH07CisKK2Z1bmN0aW9uIENvbnMo
aGQsIHRsKQoreworICAgIHJldHVybiB7CisgICAgICAgIGN0b3I6ICc6OicsCisgICAgICAgIF8w
OiBoZCwKKyAgICAgICAgXzE6IHRsCisgICAgfTsKK30KKworZnVuY3Rpb24gYXBwZW5kKHhzLCB5
cykKK3sKKyAgICAvLyBhcHBlbmQgU3RyaW5ncworICAgIGlmICh0eXBlb2YgeHMgPT09ICdzdHJp
bmcnKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHhzICsgeXM7CisgICAgfQorCisgICAgLy8gYXBw
ZW5kIExpc3RzCisgICAgaWYgKHhzLmN0b3IgPT09ICdbXScpCisgICAgeworICAgICAgICByZXR1
cm4geXM7CisgICAgfQorICAgIHZhciByb290ID0gQ29ucyh4cy5fMCwgTmlsKTsKKyAgICB2YXIg
Y3VyciA9IHJvb3Q7CisgICAgeHMgPSB4cy5fMTsKKyAgICB3aGlsZSAoeHMuY3RvciAhPT0gJ1td
JykKKyAgICB7CisgICAgICAgIGN1cnIuXzEgPSBDb25zKHhzLl8wLCBOaWwpOworICAgICAgICB4
cyA9IHhzLl8xOworICAgICAgICBjdXJyID0gY3Vyci5fMTsKKyAgICB9CisgICAgY3Vyci5fMSA9
IHlzOworICAgIHJldHVybiByb290OworfQorCisKKy8vIENSQVNIRVMKKworZnVuY3Rpb24gY3Jh
c2gobW9kdWxlTmFtZSwgcmVnaW9uKQoreworICAgIHJldHVybiBmdW5jdGlvbihtZXNzYWdlKSB7
CisgICAgICAgIHRocm93IG5ldyBFcnJvcigKKyAgICAgICAgICAgICdSYW4gaW50byBhIGBEZWJ1
Zy5jcmFzaGAgaW4gbW9kdWxlIGAnICsgbW9kdWxlTmFtZSArICdgICcgKyByZWdpb25Ub1N0cmlu
ZyhyZWdpb24pICsgJ1xuJworICAgICAgICAgICAgKyAnVGhlIG1lc3NhZ2UgcHJvdmlkZWQgYnkg
dGhlIGNvZGUgYXV0aG9yIGlzOlxuXG4gICAgJworICAgICAgICAgICAgKyBtZXNzYWdlCisgICAg
ICAgICk7CisgICAgfTsKK30KKworZnVuY3Rpb24gY3Jhc2hDYXNlKG1vZHVsZU5hbWUsIHJlZ2lv
biwgdmFsdWUpCit7CisgICAgcmV0dXJuIGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKAorICAgICAgICAgICAgJ1JhbiBpbnRvIGEgYERlYnVnLmNyYXNoYCBpbiBt
b2R1bGUgYCcgKyBtb2R1bGVOYW1lICsgJ2BcblxuJworICAgICAgICAgICAgKyAnVGhpcyB3YXMg
Y2F1c2VkIGJ5IHRoZSBgY2FzZWAgZXhwcmVzc2lvbiAnICsgcmVnaW9uVG9TdHJpbmcocmVnaW9u
KSArICcuXG4nCisgICAgICAgICAgICArICdPbmUgb2YgdGhlIGJyYW5jaGVzIGVuZGVkIHdpdGgg
YSBjcmFzaCBhbmQgdGhlIGZvbGxvd2luZyB2YWx1ZSBnb3QgdGhyb3VnaDpcblxuICAgICcgKyB0
b1N0cmluZyh2YWx1ZSkgKyAnXG5cbicKKyAgICAgICAgICAgICsgJ1RoZSBtZXNzYWdlIHByb3Zp
ZGVkIGJ5IHRoZSBjb2RlIGF1dGhvciBpczpcblxuICAgICcKKyAgICAgICAgICAgICsgbWVzc2Fn
ZQorICAgICAgICApOworICAgIH07Cit9CisKK2Z1bmN0aW9uIHJlZ2lvblRvU3RyaW5nKHJlZ2lv
bikKK3sKKyAgICBpZiAocmVnaW9uLnN0YXJ0LmxpbmUgPT0gcmVnaW9uLmVuZC5saW5lKQorICAg
IHsKKyAgICAgICAgcmV0dXJuICdvbiBsaW5lICcgKyByZWdpb24uc3RhcnQubGluZTsKKyAgICB9
CisgICAgcmV0dXJuICdiZXR3ZWVuIGxpbmVzICcgKyByZWdpb24uc3RhcnQubGluZSArICcgYW5k
ICcgKyByZWdpb24uZW5kLmxpbmU7Cit9CisKKworLy8gVE8gU1RSSU5HCisKK2Z1bmN0aW9uIHRv
U3RyaW5nKHYpCit7CisgICAgdmFyIHR5cGUgPSB0eXBlb2YgdjsKKyAgICBpZiAodHlwZSA9PT0g
J2Z1bmN0aW9uJykKKyAgICB7CisgICAgICAgIHZhciBuYW1lID0gdi5mdW5jID8gdi5mdW5jLm5h
bWUgOiB2Lm5hbWU7CisgICAgICAgIHJldHVybiAnPGZ1bmN0aW9uJyArIChuYW1lID09PSAnJyA/
ICcnIDogJzonKSArIG5hbWUgKyAnPic7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT09ICdib29s
ZWFuJykKKyAgICB7CisgICAgICAgIHJldHVybiB2ID8gJ1RydWUnIDogJ0ZhbHNlJzsKKyAgICB9
CisKKyAgICBpZiAodHlwZSA9PT0gJ251bWJlcicpCisgICAgeworICAgICAgICByZXR1cm4gdiAr
ICcnOworICAgIH0KKworICAgIGlmICh2IGluc3RhbmNlb2YgU3RyaW5nKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuICdcJycgKyBhZGRTbGFzaGVzKHYsIHRydWUpICsgJ1wnJzsKKyAgICB9CisKKyAg
ICBpZiAodHlwZSA9PT0gJ3N0cmluZycpCisgICAgeworICAgICAgICByZXR1cm4gJyInICsgYWRk
U2xhc2hlcyh2LCBmYWxzZSkgKyAnIic7CisgICAgfQorCisgICAgaWYgKHYgPT09IG51bGwpCisg
ICAgeworICAgICAgICByZXR1cm4gJ251bGwnOworICAgIH0KKworICAgIGlmICh0eXBlID09PSAn
b2JqZWN0JyAmJiAnY3RvcicgaW4gdikKKyAgICB7CisgICAgICAgIHZhciBjdG9yU3RhcnRlciA9
IHYuY3Rvci5zdWJzdHJpbmcoMCwgNSk7CisKKyAgICAgICAgaWYgKGN0b3JTdGFydGVyID09PSAn
X1R1cGwnKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgb3V0cHV0ID0gW107CisgICAgICAg
ICAgICBmb3IgKHZhciBrIGluIHYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KGsgPT09ICdjdG9yJykgY29udGludWU7CisgICAgICAgICAgICAgICAgb3V0cHV0LnB1c2godG9T
dHJpbmcodltrXSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuICcoJyArIG91
dHB1dC5qb2luKCcsJykgKyAnKSc7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3RvclN0YXJ0
ZXIgPT09ICdfVGFzaycpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAnPHRhc2s+Jwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHYuY3RvciA9PT0gJ19BcnJheScpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHZhciBsaXN0ID0gX2VsbV9sYW5nJGNvcmUkQXJyYXkkdG9MaXN0KHYpOwor
ICAgICAgICAgICAgcmV0dXJuICdBcnJheS5mcm9tTGlzdCAnICsgdG9TdHJpbmcobGlzdCk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAodi5jdG9yID09PSAnPGRlY29kZXI+JykKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuICc8ZGVjb2Rlcj4nOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHYuY3RvciA9PT0gJ19Qcm9jZXNzJykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
ICc8cHJvY2VzczonICsgdi5pZCArICc+JzsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2LmN0
b3IgPT09ICc6OicpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBvdXRwdXQgPSAnWycgKyB0
b1N0cmluZyh2Ll8wKTsKKyAgICAgICAgICAgIHYgPSB2Ll8xOworICAgICAgICAgICAgd2hpbGUg
KHYuY3RvciA9PT0gJzo6JykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXQg
Kz0gJywnICsgdG9TdHJpbmcodi5fMCk7CisgICAgICAgICAgICAgICAgdiA9IHYuXzE7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gb3V0cHV0ICsgJ10nOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHYuY3RvciA9PT0gJ1tdJykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuICdbXSc7CisgICAgICAgIH0KKworICAgICAgICBpZiAodi5jdG9yID09PSAnU2V0X2VsbV9i
dWlsdGluJykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICdTZXQuZnJvbUxpc3QgJyAr
IHRvU3RyaW5nKF9lbG1fbGFuZyRjb3JlJFNldCR0b0xpc3QodikpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHYuY3RvciA9PT0gJ1JCTm9kZV9lbG1fYnVpbHRpbicgfHwgdi5jdG9yID09PSAn
UkJFbXB0eV9lbG1fYnVpbHRpbicpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAnRGlj
dC5mcm9tTGlzdCAnICsgdG9TdHJpbmcoX2VsbV9sYW5nJGNvcmUkRGljdCR0b0xpc3QodikpOwor
ICAgICAgICB9CisKKyAgICAgICAgdmFyIG91dHB1dCA9ICcnOworICAgICAgICBmb3IgKHZhciBp
IGluIHYpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpID09PSAnY3RvcicpIGNvbnRpbnVl
OworICAgICAgICAgICAgdmFyIHN0ciA9IHRvU3RyaW5nKHZbaV0pOworICAgICAgICAgICAgdmFy
IGMwID0gc3RyWzBdOworICAgICAgICAgICAgdmFyIHBhcmVubGVzcyA9IGMwID09PSAneycgfHwg
YzAgPT09ICcoJyB8fCBjMCA9PT0gJzwnIHx8IGMwID09PSAnIicgfHwgc3RyLmluZGV4T2YoJyAn
KSA8IDA7CisgICAgICAgICAgICBvdXRwdXQgKz0gJyAnICsgKHBhcmVubGVzcyA/IHN0ciA6ICco
JyArIHN0ciArICcpJyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHYuY3RvciArIG91dHB1
dDsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PT0gJ29iamVjdCcpCisgICAgeworICAgICAgICBp
ZiAodiBpbnN0YW5jZW9mIERhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAnPCcg
KyB2LnRvU3RyaW5nKCkgKyAnPic7CisgICAgICAgIH0KKworICAgICAgICBpZiAodi5lbG1fd2Vi
X3NvY2tldCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICc8d2Vic29ja2V0Pic7Cisg
ICAgICAgIH0KKworICAgICAgICB2YXIgb3V0cHV0ID0gW107CisgICAgICAgIGZvciAodmFyIGsg
aW4gdikKKyAgICAgICAgeworICAgICAgICAgICAgb3V0cHV0LnB1c2goayArICcgPSAnICsgdG9T
dHJpbmcodltrXSkpOworICAgICAgICB9CisgICAgICAgIGlmIChvdXRwdXQubGVuZ3RoID09PSAw
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJ3t9JzsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gJ3sgJyArIG91dHB1dC5qb2luKCcsICcpICsgJyB9JzsKKyAgICB9CisKKyAgICBy
ZXR1cm4gJzxpbnRlcm5hbCBzdHJ1Y3R1cmU+JzsKK30KKworZnVuY3Rpb24gYWRkU2xhc2hlcyhz
dHIsIGlzQ2hhcikKK3sKKyAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC9cXC9nLCAnXFxcXCcpCisg
ICAgICAgICAgICAgIC5yZXBsYWNlKC9cbi9nLCAnXFxuJykKKyAgICAgICAgICAgICAgLnJlcGxh
Y2UoL1x0L2csICdcXHQnKQorICAgICAgICAgICAgICAucmVwbGFjZSgvXHIvZywgJ1xccicpCisg
ICAgICAgICAgICAgIC5yZXBsYWNlKC9cdi9nLCAnXFx2JykKKyAgICAgICAgICAgICAgLnJlcGxh
Y2UoL1wwL2csICdcXDAnKTsKKyAgICBpZiAoaXNDaGFyKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHMucmVwbGFjZSgvXCcvZywgJ1xcXCcnKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHMucmVwbGFjZSgvXCIvZywgJ1xcIicpOworICAgIH0KK30KKworCityZXR1cm4g
eworICAgIGVxOiBlcSwKKyAgICBjbXA6IGNtcCwKKyAgICBUdXBsZTA6IFR1cGxlMCwKKyAgICBU
dXBsZTI6IFR1cGxlMiwKKyAgICBjaHI6IGNociwKKyAgICB1cGRhdGU6IHVwZGF0ZSwKKyAgICBn
dWlkOiBndWlkLAorCisgICAgYXBwZW5kOiBGMihhcHBlbmQpLAorCisgICAgY3Jhc2g6IGNyYXNo
LAorICAgIGNyYXNoQ2FzZTogY3Jhc2hDYXNlLAorCisgICAgdG9TdHJpbmc6IHRvU3RyaW5nCit9
OworCit9KCk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHVuY3VycnkgPSBGMigKKyAgICBm
dW5jdGlvbiAoZiwgX3AwKSB7CisgICAgICAgIHZhciBfcDEgPSBfcDA7CisgICAgICAgIHJldHVy
biBBMihmLCBfcDEuXzAsIF9wMS5fMSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFz
aWNzJGN1cnJ5ID0gRjMoCisgICAgZnVuY3Rpb24gKGYsIGEsIGIpIHsKKyAgICAgICAgcmV0dXJu
IGYoCisgICAgICAgICAgICB7Y3RvcjogJ19UdXBsZTInLCBfMDogYSwgXzE6IGJ9KTsKKyAgICB9
KTsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3MkZmxpcCA9IEYzKAorICAgIGZ1bmN0aW9uIChm
LCBiLCBhKSB7CisgICAgICAgIHJldHVybiBBMihmLCBhLCBiKTsKKyAgICB9KTsKK3ZhciBfZWxt
X2xhbmckY29yZSRCYXNpY3Mkc25kID0gZnVuY3Rpb24gKF9wMikgeworICAgIHZhciBfcDMgPSBf
cDI7CisgICAgcmV0dXJuIF9wMy5fMTsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGZz
dCA9IGZ1bmN0aW9uIChfcDQpIHsKKyAgICB2YXIgX3A1ID0gX3A0OworICAgIHJldHVybiBfcDUu
XzA7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRhbHdheXMgPSBGMigKKyAgICBmdW5j
dGlvbiAoYSwgX3A2KSB7CisgICAgICAgIHJldHVybiBhOworICAgIH0pOwordmFyIF9lbG1fbGFu
ZyRjb3JlJEJhc2ljcyRpZGVudGl0eSA9IGZ1bmN0aW9uICh4KSB7CisgICAgcmV0dXJuIHg7Cit9
OwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgPSBfZWxtX2xhbmckY29yZSRCYXNpY3Nf
b3BzIHx8IHt9OworX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snPHwnXSA9IEYyKAorICAgIGZ1
bmN0aW9uIChmLCB4KSB7CisgICAgICAgIHJldHVybiBmKHgpOworICAgIH0pOwordmFyIF9lbG1f
bGFuZyRjb3JlJEJhc2ljc19vcHMgPSBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzIHx8IHt9Owor
X2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snfD4nXSA9IEYyKAorICAgIGZ1bmN0aW9uICh4LCBm
KSB7CisgICAgICAgIHJldHVybiBmKHgpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJEJh
c2ljc19vcHMgPSBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzIHx8IHt9OworX2VsbV9sYW5nJGNv
cmUkQmFzaWNzX29wc1snPj4nXSA9IEYzKAorICAgIGZ1bmN0aW9uIChmLCBnLCB4KSB7CisgICAg
ICAgIHJldHVybiBnKAorICAgICAgICAgICAgZih4KSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5n
JGNvcmUkQmFzaWNzX29wcyA9IF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgfHwge307CitfZWxt
X2xhbmckY29yZSRCYXNpY3Nfb3BzWyc8PCddID0gRjMoCisgICAgZnVuY3Rpb24gKGcsIGYsIHgp
IHsKKyAgICAgICAgcmV0dXJuIGcoCisgICAgICAgICAgICBmKHgpKTsKKyAgICB9KTsKK3ZhciBf
ZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzID0gX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wcyB8fCB7
fTsKK19lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJysrJ10gPSBfZWxtX2xhbmckY29yZSROYXRp
dmVfVXRpbHMuYXBwZW5kOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyR0b1N0cmluZyA9IF9l
bG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy50b1N0cmluZzsKK3ZhciBfZWxtX2xhbmckY29yZSRC
YXNpY3MkaXNJbmZpbml0ZSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MuaXNJbmZpbml0
ZTsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3MkaXNOYU4gPSBfZWxtX2xhbmckY29yZSROYXRp
dmVfQmFzaWNzLmlzTmFOOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyR0b0Zsb2F0ID0gX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy50b0Zsb2F0OwordmFyIF9lbG1fbGFuZyRjb3JlJEJh
c2ljcyRjZWlsaW5nID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5jZWlsaW5nOwordmFy
IF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRmbG9vciA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNp
Y3MuZmxvb3I7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHRydW5jYXRlID0gX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX0Jhc2ljcy50cnVuY2F0ZTsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3Mk
cm91bmQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLnJvdW5kOwordmFyIF9lbG1fbGFu
ZyRjb3JlJEJhc2ljcyRub3QgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLm5vdDsKK3Zh
ciBfZWxtX2xhbmckY29yZSRCYXNpY3MkeG9yID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2lj
cy54b3I7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wcyA9IF9lbG1fbGFuZyRjb3JlJEJh
c2ljc19vcHMgfHwge307CitfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWyd8fCddID0gX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5vcjsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3Bz
ID0gX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wcyB8fCB7fTsKK19lbG1fbGFuZyRjb3JlJEJhc2lj
c19vcHNbJyYmJ10gPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLmFuZDsKK3ZhciBfZWxt
X2xhbmckY29yZSRCYXNpY3MkbWF4ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5tYXg7
Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJG1pbiA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9C
YXNpY3MubWluOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRjb21wYXJlID0gX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX0Jhc2ljcy5jb21wYXJlOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19v
cHMgPSBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzIHx8IHt9OworX2VsbV9sYW5nJGNvcmUkQmFz
aWNzX29wc1snPj0nXSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MuZ2U7Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkQmFzaWNzX29wcyA9IF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgfHwge307
CitfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWyc8PSddID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X0Jhc2ljcy5sZTsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzID0gX2VsbV9sYW5nJGNv
cmUkQmFzaWNzX29wcyB8fCB7fTsKK19lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJz4nXSA9IF9l
bG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MuZ3Q7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNz
X29wcyA9IF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgfHwge307CitfZWxtX2xhbmckY29yZSRC
YXNpY3Nfb3BzWyc8J10gPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLmx0OwordmFyIF9l
bG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgPSBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzIHx8IHt9
OworX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snLz0nXSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9CYXNpY3MubmVxOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgPSBfZWxtX2xhbmck
Y29yZSRCYXNpY3Nfb3BzIHx8IHt9OworX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snPT0nXSA9
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MuZXE7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFz
aWNzJGUgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLmU7Cit2YXIgX2VsbV9sYW5nJGNv
cmUkQmFzaWNzJHBpID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5waTsKK3ZhciBfZWxt
X2xhbmckY29yZSRCYXNpY3MkY2xhbXAgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLmNs
YW1wOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRsb2dCYXNlID0gX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX0Jhc2ljcy5sb2dCYXNlOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRhYnMgPSBf
ZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLmFiczsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNp
Y3MkbmVnYXRlID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5uZWdhdGU7Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkQmFzaWNzJHNxcnQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLnNx
cnQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGF0YW4yID0gX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX0Jhc2ljcy5hdGFuMjsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3MkYXRhbiA9IF9lbG1f
bGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MuYXRhbjsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3Mk
YXNpbiA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MuYXNpbjsKK3ZhciBfZWxtX2xhbmck
Y29yZSRCYXNpY3MkYWNvcyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MuYWNvczsKK3Zh
ciBfZWxtX2xhbmckY29yZSRCYXNpY3MkdGFuID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2lj
cy50YW47Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHNpbiA9IF9lbG1fbGFuZyRjb3JlJE5h
dGl2ZV9CYXNpY3Muc2luOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRjb3MgPSBfZWxtX2xh
bmckY29yZSROYXRpdmVfQmFzaWNzLmNvczsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3Bz
ID0gX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wcyB8fCB7fTsKK19lbG1fbGFuZyRjb3JlJEJhc2lj
c19vcHNbJ14nXSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MuZXhwOwordmFyIF9lbG1f
bGFuZyRjb3JlJEJhc2ljc19vcHMgPSBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzIHx8IHt9Owor
X2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snJSddID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jh
c2ljcy5tb2Q7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHJlbSA9IF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9CYXNpY3MucmVtOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgPSBfZWxt
X2xhbmckY29yZSRCYXNpY3Nfb3BzIHx8IHt9OworX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1sn
Ly8nXSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MuZGl2OwordmFyIF9lbG1fbGFuZyRj
b3JlJEJhc2ljc19vcHMgPSBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzIHx8IHt9OworX2VsbV9s
YW5nJGNvcmUkQmFzaWNzX29wc1snLyddID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5m
bG9hdERpdjsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzID0gX2VsbV9sYW5nJGNvcmUk
QmFzaWNzX29wcyB8fCB7fTsKK19lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJyonXSA9IF9lbG1f
bGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MubXVsOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19v
cHMgPSBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzIHx8IHt9OworX2VsbV9sYW5nJGNvcmUkQmFz
aWNzX29wc1snLSddID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5zdWI7Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkQmFzaWNzX29wcyA9IF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgfHwge307
CitfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycrJ10gPSBfZWxtX2xhbmckY29yZSROYXRpdmVf
QmFzaWNzLmFkZDsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3MkdG9Qb2xhciA9IF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9CYXNpY3MudG9Qb2xhcjsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3Mk
ZnJvbVBvbGFyID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5mcm9tUG9sYXI7Cit2YXIg
X2VsbV9sYW5nJGNvcmUkQmFzaWNzJHR1cm5zID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2lj
cy50dXJuczsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3MkZGVncmVlcyA9IF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9CYXNpY3MuZGVncmVlczsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3MkcmFk
aWFucyA9IGZ1bmN0aW9uICh0KSB7CisgICAgcmV0dXJuIHQ7Cit9OwordmFyIF9lbG1fbGFuZyRj
b3JlJEJhc2ljcyRHVCA9IHtjdG9yOiAnR1QnfTsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3Mk
RVEgPSB7Y3RvcjogJ0VRJ307Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJExUID0ge2N0b3I6
ICdMVCd9OwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyROZXZlciA9IGZ1bmN0aW9uIChhKSB7
CisgICAgcmV0dXJuIHtjdG9yOiAnTmV2ZXInLCBfMDogYX07Cit9OworCisvL2ltcG9ydCBOYXRp
dmUuVXRpbHMgLy8KKwordmFyIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9EZWJ1ZyA9IGZ1bmN0aW9u
KCkgeworCitmdW5jdGlvbiBsb2codGFnLCB2YWx1ZSkKK3sKKyAgICB2YXIgbXNnID0gdGFnICsg
JzogJyArIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy50b1N0cmluZyh2YWx1ZSk7CisgICAg
dmFyIHByb2Nlc3MgPSBwcm9jZXNzIHx8IHt9OworICAgIGlmIChwcm9jZXNzLnN0ZG91dCkKKyAg
ICB7CisgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG1zZyk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIC8vIGNvbnNvbGUubG9nKG1zZyk7CisgICAgfQorICAgIHJldHVybiB2
YWx1ZTsKK30KKworZnVuY3Rpb24gY3Jhc2gobWVzc2FnZSkKK3sKKyAgICB0aHJvdyBuZXcgRXJy
b3IobWVzc2FnZSk7Cit9CisKK3JldHVybiB7CisgICAgY3Jhc2g6IGNyYXNoLAorICAgIGxvZzog
RjIobG9nKQorfTsKKworfSgpOwordmFyIF9lbG1fbGFuZyRjb3JlJERlYnVnJGNyYXNoID0gX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX0RlYnVnLmNyYXNoOwordmFyIF9lbG1fbGFuZyRjb3JlJERlYnVn
JGxvZyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9EZWJ1Zy5sb2c7CisKK3ZhciBfZWxtX2xhbmck
Y29yZSRNYXliZSR3aXRoRGVmYXVsdCA9IEYyKAorICAgIGZ1bmN0aW9uICgkZGVmYXVsdCwgbWF5
YmUpIHsKKyAgICAgICAgdmFyIF9wMCA9IG1heWJlOworICAgICAgICBpZiAoX3AwLmN0b3IgPT09
ICdKdXN0JykgeworICAgICAgICAgICAgcmV0dXJuIF9wMC5fMDsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHJldHVybiAkZGVmYXVsdDsKKyAgICAgICAgfQorICAgIH0pOwordmFyIF9l
bG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmcgPSB7Y3RvcjogJ05vdGhpbmcnfTsKK3ZhciBfZWxt
X2xhbmckY29yZSRNYXliZSRvbmVPZiA9IGZ1bmN0aW9uIChtYXliZXMpIHsKKyAgICBvbmVPZjoK
KyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICB2YXIgX3AxID0gbWF5YmVzOworICAgICAgICBp
ZiAoX3AxLmN0b3IgPT09ICdbXScpIHsKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29y
ZSRNYXliZSROb3RoaW5nOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIF9wMyA9
IF9wMS5fMDsKKyAgICAgICAgICAgIHZhciBfcDIgPSBfcDM7CisgICAgICAgICAgICBpZiAoX3Ay
LmN0b3IgPT09ICdOb3RoaW5nJykgeworICAgICAgICAgICAgICAgIHZhciBfdjMgPSBfcDEuXzE7
CisgICAgICAgICAgICAgICAgbWF5YmVzID0gX3YzOworICAgICAgICAgICAgICAgIGNvbnRpbnVl
IG9uZU9mOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX3Az
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfTsKK3ZhciBfZWxtX2xhbmckY29y
ZSRNYXliZSRhbmRUaGVuID0gRjIoCisgICAgZnVuY3Rpb24gKG1heWJlVmFsdWUsIGNhbGxiYWNr
KSB7CisgICAgICAgIHZhciBfcDQgPSBtYXliZVZhbHVlOworICAgICAgICBpZiAoX3A0LmN0b3Ig
PT09ICdKdXN0JykgeworICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKF9wNC5fMCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90
aGluZzsKKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJE1heWJlJEp1c3Qg
PSBmdW5jdGlvbiAoYSkgeworICAgIHJldHVybiB7Y3RvcjogJ0p1c3QnLCBfMDogYX07Cit9Owor
dmFyIF9lbG1fbGFuZyRjb3JlJE1heWJlJG1hcCA9IEYyKAorICAgIGZ1bmN0aW9uIChmLCBtYXli
ZSkgeworICAgICAgICB2YXIgX3A1ID0gbWF5YmU7CisgICAgICAgIGlmIChfcDUuY3RvciA9PT0g
J0p1c3QnKSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVzdCgK
KyAgICAgICAgICAgICAgICBmKF9wNS5fMCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmc7CisgICAgICAgIH0KKyAgICB9
KTsKK3ZhciBfZWxtX2xhbmckY29yZSRNYXliZSRtYXAyID0gRjMoCisgICAgZnVuY3Rpb24gKGZ1
bmMsIG1hLCBtYikgeworICAgICAgICB2YXIgX3A2ID0ge2N0b3I6ICdfVHVwbGUyJywgXzA6IG1h
LCBfMTogbWJ9OworICAgICAgICBpZiAoKChfcDYuY3RvciA9PT0gJ19UdXBsZTInKSAmJiAoX3A2
Ll8wLmN0b3IgPT09ICdKdXN0JykpICYmIChfcDYuXzEuY3RvciA9PT0gJ0p1c3QnKSkgeworICAg
ICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1heWJlJEp1c3QoCisgICAgICAgICAgICAg
ICAgQTIoZnVuYywgX3A2Ll8wLl8wLCBfcDYuXzEuXzApKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRNYXliZSROb3RoaW5nOworICAgICAgICB9
CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTWF5YmUkbWFwMyA9IEY0KAorICAgIGZ1bmN0
aW9uIChmdW5jLCBtYSwgbWIsIG1jKSB7CisgICAgICAgIHZhciBfcDcgPSB7Y3RvcjogJ19UdXBs
ZTMnLCBfMDogbWEsIF8xOiBtYiwgXzI6IG1jfTsKKyAgICAgICAgaWYgKCgoKF9wNy5jdG9yID09
PSAnX1R1cGxlMycpICYmIChfcDcuXzAuY3RvciA9PT0gJ0p1c3QnKSkgJiYgKF9wNy5fMS5jdG9y
ID09PSAnSnVzdCcpKSAmJiAoX3A3Ll8yLmN0b3IgPT09ICdKdXN0JykpIHsKKyAgICAgICAgICAg
IHJldHVybiBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0KAorICAgICAgICAgICAgICAgIEEzKGZ1
bmMsIF9wNy5fMC5fMCwgX3A3Ll8xLl8wLCBfcDcuXzIuXzApKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRNYXliZSROb3RoaW5nOworICAgICAg
ICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTWF5YmUkbWFwNCA9IEY1KAorICAgIGZ1
bmN0aW9uIChmdW5jLCBtYSwgbWIsIG1jLCBtZCkgeworICAgICAgICB2YXIgX3A4ID0ge2N0b3I6
ICdfVHVwbGU0JywgXzA6IG1hLCBfMTogbWIsIF8yOiBtYywgXzM6IG1kfTsKKyAgICAgICAgaWYg
KCgoKChfcDguY3RvciA9PT0gJ19UdXBsZTQnKSAmJiAoX3A4Ll8wLmN0b3IgPT09ICdKdXN0Jykp
ICYmIChfcDguXzEuY3RvciA9PT0gJ0p1c3QnKSkgJiYgKF9wOC5fMi5jdG9yID09PSAnSnVzdCcp
KSAmJiAoX3A4Ll8zLmN0b3IgPT09ICdKdXN0JykpIHsKKyAgICAgICAgICAgIHJldHVybiBfZWxt
X2xhbmckY29yZSRNYXliZSRKdXN0KAorICAgICAgICAgICAgICAgIEE0KGZ1bmMsIF9wOC5fMC5f
MCwgX3A4Ll8xLl8wLCBfcDguXzIuXzAsIF9wOC5fMy5fMCkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmc7CisgICAgICAg
IH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRNYXliZSRtYXA1ID0gRjYoCisgICAgZnVu
Y3Rpb24gKGZ1bmMsIG1hLCBtYiwgbWMsIG1kLCBtZSkgeworICAgICAgICB2YXIgX3A5ID0ge2N0
b3I6ICdfVHVwbGU1JywgXzA6IG1hLCBfMTogbWIsIF8yOiBtYywgXzM6IG1kLCBfNDogbWV9Owor
ICAgICAgICBpZiAoKCgoKChfcDkuY3RvciA9PT0gJ19UdXBsZTUnKSAmJiAoX3A5Ll8wLmN0b3Ig
PT09ICdKdXN0JykpICYmIChfcDkuXzEuY3RvciA9PT0gJ0p1c3QnKSkgJiYgKF9wOS5fMi5jdG9y
ID09PSAnSnVzdCcpKSAmJiAoX3A5Ll8zLmN0b3IgPT09ICdKdXN0JykpICYmIChfcDkuXzQuY3Rv
ciA9PT0gJ0p1c3QnKSkgeworICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1heWJl
JEp1c3QoCisgICAgICAgICAgICAgICAgQTUoZnVuYywgX3A5Ll8wLl8wLCBfcDkuXzEuXzAsIF9w
OS5fMi5fMCwgX3A5Ll8zLl8wLCBfcDkuXzQuXzApKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRNYXliZSROb3RoaW5nOworICAgICAgICB9Cisg
ICAgfSk7CisKKy8vaW1wb3J0IE5hdGl2ZS5VdGlscyAvLworCit2YXIgX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX0xpc3QgPSBmdW5jdGlvbigpIHsKKwordmFyIE5pbCA9IHsgY3RvcjogJ1tdJyB9Owor
CitmdW5jdGlvbiBDb25zKGhkLCB0bCkKK3sKKyAgICByZXR1cm4geyBjdG9yOiAnOjonLCBfMDog
aGQsIF8xOiB0bCB9OworfQorCitmdW5jdGlvbiBmcm9tQXJyYXkoYXJyKQoreworICAgIHZhciBv
dXQgPSBOaWw7CisgICAgZm9yICh2YXIgaSA9IGFyci5sZW5ndGg7IGktLTsgKQorICAgIHsKKyAg
ICAgICAgb3V0ID0gQ29ucyhhcnJbaV0sIG91dCk7CisgICAgfQorICAgIHJldHVybiBvdXQ7Cit9
CisKK2Z1bmN0aW9uIHRvQXJyYXkoeHMpCit7CisgICAgdmFyIG91dCA9IFtdOworICAgIHdoaWxl
ICh4cy5jdG9yICE9PSAnW10nKQorICAgIHsKKyAgICAgICAgb3V0LnB1c2goeHMuXzApOworICAg
ICAgICB4cyA9IHhzLl8xOworICAgIH0KKyAgICByZXR1cm4gb3V0OworfQorCisKK2Z1bmN0aW9u
IHJhbmdlKGxvLCBoaSkKK3sKKyAgICB2YXIgbGlzdCA9IE5pbDsKKyAgICBpZiAobG8gPD0gaGkp
CisgICAgeworICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgICBsaXN0ID0gQ29ucyho
aSwgbGlzdCk7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKGhpLS0gPiBsbyk7CisgICAgfQor
ICAgIHJldHVybiBsaXN0OworfQorCitmdW5jdGlvbiBmb2xkcihmLCBiLCB4cykKK3sKKyAgICB2
YXIgYXJyID0gdG9BcnJheSh4cyk7CisgICAgdmFyIGFjYyA9IGI7CisgICAgZm9yICh2YXIgaSA9
IGFyci5sZW5ndGg7IGktLTsgKQorICAgIHsKKyAgICAgICAgYWNjID0gQTIoZiwgYXJyW2ldLCBh
Y2MpOworICAgIH0KKyAgICByZXR1cm4gYWNjOworfQorCitmdW5jdGlvbiBtYXAyKGYsIHhzLCB5
cykKK3sKKyAgICB2YXIgYXJyID0gW107CisgICAgd2hpbGUgKHhzLmN0b3IgIT09ICdbXScgJiYg
eXMuY3RvciAhPT0gJ1tdJykKKyAgICB7CisgICAgICAgIGFyci5wdXNoKEEyKGYsIHhzLl8wLCB5
cy5fMCkpOworICAgICAgICB4cyA9IHhzLl8xOworICAgICAgICB5cyA9IHlzLl8xOworICAgIH0K
KyAgICByZXR1cm4gZnJvbUFycmF5KGFycik7Cit9CisKK2Z1bmN0aW9uIG1hcDMoZiwgeHMsIHlz
LCB6cykKK3sKKyAgICB2YXIgYXJyID0gW107CisgICAgd2hpbGUgKHhzLmN0b3IgIT09ICdbXScg
JiYgeXMuY3RvciAhPT0gJ1tdJyAmJiB6cy5jdG9yICE9PSAnW10nKQorICAgIHsKKyAgICAgICAg
YXJyLnB1c2goQTMoZiwgeHMuXzAsIHlzLl8wLCB6cy5fMCkpOworICAgICAgICB4cyA9IHhzLl8x
OworICAgICAgICB5cyA9IHlzLl8xOworICAgICAgICB6cyA9IHpzLl8xOworICAgIH0KKyAgICBy
ZXR1cm4gZnJvbUFycmF5KGFycik7Cit9CisKK2Z1bmN0aW9uIG1hcDQoZiwgd3MsIHhzLCB5cywg
enMpCit7CisgICAgdmFyIGFyciA9IFtdOworICAgIHdoaWxlICggICB3cy5jdG9yICE9PSAnW10n
CisgICAgICAgICAgICYmIHhzLmN0b3IgIT09ICdbXScKKyAgICAgICAgICAgJiYgeXMuY3RvciAh
PT0gJ1tdJworICAgICAgICAgICAmJiB6cy5jdG9yICE9PSAnW10nKQorICAgIHsKKyAgICAgICAg
YXJyLnB1c2goQTQoZiwgd3MuXzAsIHhzLl8wLCB5cy5fMCwgenMuXzApKTsKKyAgICAgICAgd3Mg
PSB3cy5fMTsKKyAgICAgICAgeHMgPSB4cy5fMTsKKyAgICAgICAgeXMgPSB5cy5fMTsKKyAgICAg
ICAgenMgPSB6cy5fMTsKKyAgICB9CisgICAgcmV0dXJuIGZyb21BcnJheShhcnIpOworfQorCitm
dW5jdGlvbiBtYXA1KGYsIHZzLCB3cywgeHMsIHlzLCB6cykKK3sKKyAgICB2YXIgYXJyID0gW107
CisgICAgd2hpbGUgKCAgIHZzLmN0b3IgIT09ICdbXScKKyAgICAgICAgICAgJiYgd3MuY3RvciAh
PT0gJ1tdJworICAgICAgICAgICAmJiB4cy5jdG9yICE9PSAnW10nCisgICAgICAgICAgICYmIHlz
LmN0b3IgIT09ICdbXScKKyAgICAgICAgICAgJiYgenMuY3RvciAhPT0gJ1tdJykKKyAgICB7Cisg
ICAgICAgIGFyci5wdXNoKEE1KGYsIHZzLl8wLCB3cy5fMCwgeHMuXzAsIHlzLl8wLCB6cy5fMCkp
OworICAgICAgICB2cyA9IHZzLl8xOworICAgICAgICB3cyA9IHdzLl8xOworICAgICAgICB4cyA9
IHhzLl8xOworICAgICAgICB5cyA9IHlzLl8xOworICAgICAgICB6cyA9IHpzLl8xOworICAgIH0K
KyAgICByZXR1cm4gZnJvbUFycmF5KGFycik7Cit9CisKK2Z1bmN0aW9uIHNvcnRCeShmLCB4cykK
K3sKKyAgICByZXR1cm4gZnJvbUFycmF5KHRvQXJyYXkoeHMpLnNvcnQoZnVuY3Rpb24oYSwgYikg
eworICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNtcChmKGEpLCBm
KGIpKTsKKyAgICB9KSk7Cit9CisKK2Z1bmN0aW9uIHNvcnRXaXRoKGYsIHhzKQoreworICAgIHJl
dHVybiBmcm9tQXJyYXkodG9BcnJheSh4cykuc29ydChmdW5jdGlvbihhLCBiKSB7CisgICAgICAg
IHZhciBvcmQgPSBmKGEpKGIpLmN0b3I7CisgICAgICAgIHJldHVybiBvcmQgPT09ICdFUScgPyAw
IDogb3JkID09PSAnTFQnID8gLTEgOiAxOworICAgIH0pKTsKK30KKworcmV0dXJuIHsKKyAgICBO
aWw6IE5pbCwKKyAgICBDb25zOiBDb25zLAorICAgIGNvbnM6IEYyKENvbnMpLAorICAgIHRvQXJy
YXk6IHRvQXJyYXksCisgICAgZnJvbUFycmF5OiBmcm9tQXJyYXksCisgICAgcmFuZ2U6IHJhbmdl
LAorCisgICAgZm9sZHI6IEYzKGZvbGRyKSwKKworICAgIG1hcDI6IEYzKG1hcDIpLAorICAgIG1h
cDM6IEY0KG1hcDMpLAorICAgIG1hcDQ6IEY1KG1hcDQpLAorICAgIG1hcDU6IEY2KG1hcDUpLAor
ICAgIHNvcnRCeTogRjIoc29ydEJ5KSwKKyAgICBzb3J0V2l0aDogRjIoc29ydFdpdGgpCit9Owor
Cit9KCk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCRzb3J0V2l0aCA9IF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9MaXN0LnNvcnRXaXRoOwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3Qkc29ydEJ5ID0g
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3Quc29ydEJ5OwordmFyIF9lbG1fbGFuZyRjb3JlJExp
c3Qkc29ydCA9IGZ1bmN0aW9uICh4cykgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckY29yZSRM
aXN0JHNvcnRCeSwgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGlkZW50aXR5LCB4cyk7Cit9OwordmFy
IF9lbG1fbGFuZyRjb3JlJExpc3QkZHJvcCA9IEYyKAorICAgIGZ1bmN0aW9uIChuLCBsaXN0KSB7
CisgICAgICAgIGRyb3A6CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpZiAo
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNtcChuLCAwKSA8IDEpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbGlzdDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
dmFyIF9wMCA9IGxpc3Q7CisgICAgICAgICAgICAgICAgaWYgKF9wMC5jdG9yID09PSAnW10nKSB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsaXN0OworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBfdjEgPSBuIC0gMSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIF92MiA9IF9wMC5fMTsKKyAgICAgICAgICAgICAgICAgICAgbiA9IF92MTsKKyAg
ICAgICAgICAgICAgICAgICAgbGlzdCA9IF92MjsKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWUgZHJvcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JG1hcDUgPSBfZWxtX2xhbmckY29yZSROYXRp
dmVfTGlzdC5tYXA1OwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkbWFwNCA9IF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9MaXN0Lm1hcDQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCRtYXAzID0gX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QubWFwMzsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JG1h
cDIgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5tYXAyOwordmFyIF9lbG1fbGFuZyRjb3Jl
JExpc3QkYW55ID0gRjIoCisgICAgZnVuY3Rpb24gKGlzT2theSwgbGlzdCkgeworICAgICAgICBh
bnk6CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICB2YXIgX3AxID0gbGlzdDsK
KyAgICAgICAgICAgIGlmIChfcDEuY3RvciA9PT0gJ1tdJykgeworICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGlz
T2theShfcDEuXzApKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBfdjQgPSBpc09rYXks
CisgICAgICAgICAgICAgICAgICAgICAgICBfdjUgPSBfcDEuXzE7CisgICAgICAgICAgICAgICAg
ICAgIGlzT2theSA9IF92NDsKKyAgICAgICAgICAgICAgICAgICAgbGlzdCA9IF92NTsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWUgYW55OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkYWxsID0g
RjIoCisgICAgZnVuY3Rpb24gKGlzT2theSwgbGlzdCkgeworICAgICAgICByZXR1cm4gX2VsbV9s
YW5nJGNvcmUkQmFzaWNzJG5vdCgKKyAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgIF9l
bG1fbGFuZyRjb3JlJExpc3QkYW55LAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfcDIpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRub3QoCisg
ICAgICAgICAgICAgICAgICAgICAgICBpc09rYXkoX3AyKSk7CisgICAgICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgICAgICBsaXN0KSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlz
dCRmb2xkciA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZvbGRyOwordmFyIF9lbG1fbGFu
ZyRjb3JlJExpc3QkZm9sZGwgPSBGMygKKyAgICBmdW5jdGlvbiAoZnVuYywgYWNjLCBsaXN0KSB7
CisgICAgICAgIGZvbGRsOgorICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgdmFy
IF9wMyA9IGxpc3Q7CisgICAgICAgICAgICBpZiAoX3AzLmN0b3IgPT09ICdbXScpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gYWNjOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICB2YXIgX3Y3ID0gZnVuYywKKyAgICAgICAgICAgICAgICAgICAgX3Y4ID0gQTIoZnVuYywg
X3AzLl8wLCBhY2MpLAorICAgICAgICAgICAgICAgICAgICBfdjkgPSBfcDMuXzE7CisgICAgICAg
ICAgICAgICAgZnVuYyA9IF92NzsKKyAgICAgICAgICAgICAgICBhY2MgPSBfdjg7CisgICAgICAg
ICAgICAgICAgbGlzdCA9IF92OTsKKyAgICAgICAgICAgICAgICBjb250aW51ZSBmb2xkbDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3Qk
bGVuZ3RoID0gZnVuY3Rpb24gKHhzKSB7CisgICAgcmV0dXJuIEEzKAorICAgICAgICBfZWxtX2xh
bmckY29yZSRMaXN0JGZvbGRsLAorICAgICAgICBGMigKKyAgICAgICAgICAgIGZ1bmN0aW9uIChf
cDQsIGkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaSArIDE7CisgICAgICAgICAgICB9KSwK
KyAgICAgICAgMCwKKyAgICAgICAgeHMpOworfTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JHN1
bSA9IGZ1bmN0aW9uIChudW1iZXJzKSB7CisgICAgcmV0dXJuIEEzKAorICAgICAgICBfZWxtX2xh
bmckY29yZSRMaXN0JGZvbGRsLAorICAgICAgICBGMigKKyAgICAgICAgICAgIGZ1bmN0aW9uICh4
LCB5KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHggKyB5OworICAgICAgICAgICAgfSksCisg
ICAgICAgIDAsCisgICAgICAgIG51bWJlcnMpOworfTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0
JHByb2R1Y3QgPSBmdW5jdGlvbiAobnVtYmVycykgeworICAgIHJldHVybiBBMygKKyAgICAgICAg
X2VsbV9sYW5nJGNvcmUkTGlzdCRmb2xkbCwKKyAgICAgICAgRjIoCisgICAgICAgICAgICBmdW5j
dGlvbiAoeCwgeSkgeworICAgICAgICAgICAgICAgIHJldHVybiB4ICogeTsKKyAgICAgICAgICAg
IH0pLAorICAgICAgICAxLAorICAgICAgICBudW1iZXJzKTsKK307Cit2YXIgX2VsbV9sYW5nJGNv
cmUkTGlzdCRtYXhpbXVtID0gZnVuY3Rpb24gKGxpc3QpIHsKKyAgICB2YXIgX3A1ID0gbGlzdDsK
KyAgICBpZiAoX3A1LmN0b3IgPT09ICc6OicpIHsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRj
b3JlJE1heWJlJEp1c3QoCisgICAgICAgICAgICBBMyhfZWxtX2xhbmckY29yZSRMaXN0JGZvbGRs
LCBfZWxtX2xhbmckY29yZSRCYXNpY3MkbWF4LCBfcDUuXzAsIF9wNS5fMSkpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRNYXliZSROb3RoaW5nOworICAgIH0K
K307Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCRtaW5pbXVtID0gZnVuY3Rpb24gKGxpc3QpIHsK
KyAgICB2YXIgX3A2ID0gbGlzdDsKKyAgICBpZiAoX3A2LmN0b3IgPT09ICc6OicpIHsKKyAgICAg
ICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1heWJlJEp1c3QoCisgICAgICAgICAgICBBMyhfZWxt
X2xhbmckY29yZSRMaXN0JGZvbGRsLCBfZWxtX2xhbmckY29yZSRCYXNpY3MkbWluLCBfcDYuXzAs
IF9wNi5fMSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRN
YXliZSROb3RoaW5nOworICAgIH0KK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCRpbmRleGVk
TWFwID0gRjIoCisgICAgZnVuY3Rpb24gKGYsIHhzKSB7CisgICAgICAgIHJldHVybiBBMygKKyAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkbWFwMiwKKyAgICAgICAgICAgIGYsCisgICAg
ICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5yYW5nZSgKKyAgICAgICAgICAgICAg
ICAwLAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkbGVuZ3RoKHhzKSAtIDEp
LAorICAgICAgICAgICAgeHMpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkbWVt
YmVyID0gRjIoCisgICAgZnVuY3Rpb24gKHgsIHhzKSB7CisgICAgICAgIHJldHVybiBBMigKKyAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkYW55LAorICAgICAgICAgICAgZnVuY3Rpb24g
KGEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxz
LmVxKGEsIHgpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHhzKTsKKyAgICB9KTsKK3Zh
ciBfZWxtX2xhbmckY29yZSRMaXN0JGlzRW1wdHkgPSBmdW5jdGlvbiAoeHMpIHsKKyAgICB2YXIg
X3A3ID0geHM7CisgICAgaWYgKF9wNy5jdG9yID09PSAnW10nKSB7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9OwordmFy
IF9lbG1fbGFuZyRjb3JlJExpc3QkdGFpbCA9IGZ1bmN0aW9uIChsaXN0KSB7CisgICAgdmFyIF9w
OCA9IGxpc3Q7CisgICAgaWYgKF9wOC5jdG9yID09PSAnOjonKSB7CisgICAgICAgIHJldHVybiBf
ZWxtX2xhbmckY29yZSRNYXliZSRKdXN0KF9wOC5fMSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
cmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmc7CisgICAgfQorfTsKK3ZhciBfZWxt
X2xhbmckY29yZSRMaXN0JGhlYWQgPSBmdW5jdGlvbiAobGlzdCkgeworICAgIHZhciBfcDkgPSBs
aXN0OworICAgIGlmIChfcDkuY3RvciA9PT0gJzo6JykgeworICAgICAgICByZXR1cm4gX2VsbV9s
YW5nJGNvcmUkTWF5YmUkSnVzdChfcDkuXzApOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVy
biBfZWxtX2xhbmckY29yZSRNYXliZSROb3RoaW5nOworICAgIH0KK307Cit2YXIgX2VsbV9sYW5n
JGNvcmUkTGlzdF9vcHMgPSBfZWxtX2xhbmckY29yZSRMaXN0X29wcyB8fCB7fTsKK19lbG1fbGFu
ZyRjb3JlJExpc3Rfb3BzWyc6OiddID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuY29uczsK
K3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JG1hcCA9IEYyKAorICAgIGZ1bmN0aW9uIChmLCB4cykg
eworICAgICAgICByZXR1cm4gQTMoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JGZv
bGRyLAorICAgICAgICAgICAgRjIoCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHgsIGFjYykg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSRMaXN0X29wc1snOjonXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGYoeCksCisgICAgICAgICAgICAgICAgICAgICAgICBhY2MpOworICAgICAgICAgICAgICAgIH0p
LAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAg
ICAgICAgICAgICAgIFtdKSwKKyAgICAgICAgICAgIHhzKTsKKyAgICB9KTsKK3ZhciBfZWxtX2xh
bmckY29yZSRMaXN0JGZpbHRlciA9IEYyKAorICAgIGZ1bmN0aW9uIChwcmVkLCB4cykgeworICAg
ICAgICB2YXIgY29uZGl0aW9uYWxDb25zID0gRjIoCisgICAgICAgICAgICBmdW5jdGlvbiAoeCwg
eHMkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHByZWQoeCkgPyBBMihfZWxtX2xhbmckY29y
ZSRMaXN0X29wc1snOjonXSwgeCwgeHMkKSA6IHhzJDsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICByZXR1cm4gQTMoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JGZvbGRyLAorICAg
ICAgICAgICAgY29uZGl0aW9uYWxDb25zLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgIFtdKSwKKyAgICAgICAgICAgIHhz
KTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JG1heWJlQ29ucyA9IEYzKAorICAg
IGZ1bmN0aW9uIChmLCBteCwgeHMpIHsKKyAgICAgICAgdmFyIF9wMTAgPSBmKG14KTsKKyAgICAg
ICAgaWYgKF9wMTAuY3RvciA9PT0gJ0p1c3QnKSB7CisgICAgICAgICAgICByZXR1cm4gQTIoX2Vs
bV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10sIF9wMTAuXzAsIHhzKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHJldHVybiB4czsKKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1f
bGFuZyRjb3JlJExpc3QkZmlsdGVyTWFwID0gRjIoCisgICAgZnVuY3Rpb24gKGYsIHhzKSB7Cisg
ICAgICAgIHJldHVybiBBMygKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkZm9sZHIs
CisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JG1heWJlQ29ucyhmKSwKKyAgICAgICAg
ICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAg
ICBbXSksCisgICAgICAgICAgICB4cyk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlz
dCRyZXZlcnNlID0gZnVuY3Rpb24gKGxpc3QpIHsKKyAgICByZXR1cm4gQTMoCisgICAgICAgIF9l
bG1fbGFuZyRjb3JlJExpc3QkZm9sZGwsCisgICAgICAgIEYyKAorICAgICAgICAgICAgZnVuY3Rp
b24gKHgsIHkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGNvcmUkTGlz
dF9vcHNbJzo6J10sIHgsIHkpOworICAgICAgICAgICAgfSksCisgICAgICAgIF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgIFtdKSwKKyAgICAgICAgbGlz
dCk7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3Qkc2NhbmwgPSBGMygKKyAgICBmdW5jdGlv
biAoZiwgYiwgeHMpIHsKKyAgICAgICAgdmFyIHNjYW4xID0gRjIoCisgICAgICAgICAgICBmdW5j
dGlvbiAoeCwgYWNjQWNjKSB7CisgICAgICAgICAgICAgICAgdmFyIF9wMTEgPSBhY2NBY2M7Cisg
ICAgICAgICAgICAgICAgaWYgKF9wMTEuY3RvciA9PT0gJzo6JykgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRM
aXN0X29wc1snOjonXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEEyKGYsIHgsIF9wMTEuXzAp
LAorICAgICAgICAgICAgICAgICAgICAgICAgYWNjQWNjKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xp
c3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgW10pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTGlz
dCRyZXZlcnNlKAorICAgICAgICAgICAgQTMoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkTGlzdCRmb2xkbCwKKyAgICAgICAgICAgICAgICBzY2FuMSwKKyAgICAgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAg
IFtiXSksCisgICAgICAgICAgICAgICAgeHMpKTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29y
ZSRMaXN0JGFwcGVuZCA9IEYyKAorICAgIGZ1bmN0aW9uICh4cywgeXMpIHsKKyAgICAgICAgdmFy
IF9wMTIgPSB5czsKKyAgICAgICAgaWYgKF9wMTIuY3RvciA9PT0gJ1tdJykgeworICAgICAgICAg
ICAgcmV0dXJuIHhzOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIEEzKAor
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkZm9sZHIsCisgICAgICAgICAgICAg
ICAgRjIoCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh4LCB5KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10sIHgs
IHkpOworICAgICAgICAgICAgICAgICAgICB9KSwKKyAgICAgICAgICAgICAgICB5cywKKyAgICAg
ICAgICAgICAgICB4cyk7CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRM
aXN0JGNvbmNhdCA9IGZ1bmN0aW9uIChsaXN0cykgeworICAgIHJldHVybiBBMygKKyAgICAgICAg
X2VsbV9sYW5nJGNvcmUkTGlzdCRmb2xkciwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRh
cHBlbmQsCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAg
ICAgICAgICAgIFtdKSwKKyAgICAgICAgbGlzdHMpOworfTsKK3ZhciBfZWxtX2xhbmckY29yZSRM
aXN0JGNvbmNhdE1hcCA9IEYyKAorICAgIGZ1bmN0aW9uIChmLCBsaXN0KSB7CisgICAgICAgIHJl
dHVybiBfZWxtX2xhbmckY29yZSRMaXN0JGNvbmNhdCgKKyAgICAgICAgICAgIEEyKF9lbG1fbGFu
ZyRjb3JlJExpc3QkbWFwLCBmLCBsaXN0KSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUk
TGlzdCRwYXJ0aXRpb24gPSBGMigKKyAgICBmdW5jdGlvbiAocHJlZCwgbGlzdCkgeworICAgICAg
ICB2YXIgc3RlcCA9IEYyKAorICAgICAgICAgICAgZnVuY3Rpb24gKHgsIF9wMTMpIHsKKyAgICAg
ICAgICAgICAgICB2YXIgX3AxNCA9IF9wMTM7CisgICAgICAgICAgICAgICAgdmFyIF9wMTYgPSBf
cDE0Ll8wOworICAgICAgICAgICAgICAgIHZhciBfcDE1ID0gX3AxNC5fMTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcHJlZCh4KSA/IHsKKyAgICAgICAgICAgICAgICAgICAgY3RvcjogJ19UdXBs
ZTInLAorICAgICAgICAgICAgICAgICAgICBfMDogQTIoX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNb
Jzo6J10sIHgsIF9wMTYpLAorICAgICAgICAgICAgICAgICAgICBfMTogX3AxNQorICAgICAgICAg
ICAgICAgIH0gOiB7CisgICAgICAgICAgICAgICAgICAgIGN0b3I6ICdfVHVwbGUyJywKKyAgICAg
ICAgICAgICAgICAgICAgXzA6IF9wMTYsCisgICAgICAgICAgICAgICAgICAgIF8xOiBBMihfZWxt
X2xhbmckY29yZSRMaXN0X29wc1snOjonXSwgeCwgX3AxNSkKKyAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBBMygKKyAgICAgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJExpc3QkZm9sZHIsCisgICAgICAgICAgICBzdGVwLAorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGN0b3I6ICdfVHVwbGUyJywKKyAgICAgICAgICAgICAgICBfMDogX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICBbXSks
CisgICAgICAgICAgICAgICAgXzE6IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJh
eSgKKyAgICAgICAgICAgICAgICAgICAgW10pCisgICAgICAgICAgICB9LAorICAgICAgICAgICAg
bGlzdCk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCR1bnppcCA9IGZ1bmN0aW9u
IChwYWlycykgeworICAgIHZhciBzdGVwID0gRjIoCisgICAgICAgIGZ1bmN0aW9uIChfcDE4LCBf
cDE3KSB7CisgICAgICAgICAgICB2YXIgX3AxOSA9IF9wMTg7CisgICAgICAgICAgICB2YXIgX3Ay
MCA9IF9wMTc7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIGN0b3I6ICdf
VHVwbGUyJywKKyAgICAgICAgICAgICAgICBfMDogQTIoX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNb
Jzo6J10sIF9wMTkuXzAsIF9wMjAuXzApLAorICAgICAgICAgICAgICAgIF8xOiBBMihfZWxtX2xh
bmckY29yZSRMaXN0X29wc1snOjonXSwgX3AxOS5fMSwgX3AyMC5fMSkKKyAgICAgICAgICAgIH07
CisgICAgICAgIH0pOworICAgIHJldHVybiBBMygKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlz
dCRmb2xkciwKKyAgICAgICAgc3RlcCwKKyAgICAgICAgeworICAgICAgICAgICAgY3RvcjogJ19U
dXBsZTInLAorICAgICAgICAgICAgXzA6IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21B
cnJheSgKKyAgICAgICAgICAgICAgICBbXSksCisgICAgICAgICAgICBfMTogX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgIFtdKQorICAgICAgICB9
LAorICAgICAgICBwYWlycyk7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkaW50ZXJzcGVy
c2UgPSBGMigKKyAgICBmdW5jdGlvbiAoc2VwLCB4cykgeworICAgICAgICB2YXIgX3AyMSA9IHhz
OworICAgICAgICBpZiAoX3AyMS5jdG9yID09PSAnW10nKSB7CisgICAgICAgICAgICByZXR1cm4g
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgIFtd
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBzdGVwID0gRjIoCisgICAgICAg
ICAgICAgICAgZnVuY3Rpb24gKHgsIHJlc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6
J10sCisgICAgICAgICAgICAgICAgICAgICAgICBzZXAsCisgICAgICAgICAgICAgICAgICAgICAg
ICBBMihfZWxtX2xhbmckY29yZSRMaXN0X29wc1snOjonXSwgeCwgcmVzdCkpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgdmFyIHNwZXJzZWQgPSBBMygKKyAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSRMaXN0JGZvbGRyLAorICAgICAgICAgICAgICAgIHN0ZXAsCisgICAg
ICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAg
ICAgICAgICAgICAgICBbXSksCisgICAgICAgICAgICAgICAgX3AyMS5fMSk7CisgICAgICAgICAg
ICByZXR1cm4gQTIoX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10sIF9wMjEuXzAsIHNwZXJz
ZWQpOworICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCR0YWtlUmV2
ZXJzZSA9IEYzKAorICAgIGZ1bmN0aW9uIChuLCBsaXN0LCB0YWtlbikgeworICAgICAgICB0YWtl
UmV2ZXJzZToKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGlmIChfZWxtX2xh
bmckY29yZSROYXRpdmVfVXRpbHMuY21wKG4sIDApIDwgMSkgeworICAgICAgICAgICAgICAgIHJl
dHVybiB0YWtlbjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIF9w
MjIgPSBsaXN0OworICAgICAgICAgICAgICAgIGlmIChfcDIyLmN0b3IgPT09ICdbXScpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRha2VuOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIHZhciBfdjIzID0gbiAtIDEsCisgICAgICAgICAgICAgICAg
ICAgICAgICBfdjI0ID0gX3AyMi5fMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIF92MjUgPSBB
MihfZWxtX2xhbmckY29yZSRMaXN0X29wc1snOjonXSwgX3AyMi5fMCwgdGFrZW4pOworICAgICAg
ICAgICAgICAgICAgICBuID0gX3YyMzsKKyAgICAgICAgICAgICAgICAgICAgbGlzdCA9IF92MjQ7
CisgICAgICAgICAgICAgICAgICAgIHRha2VuID0gX3YyNTsKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWUgdGFrZVJldmVyc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCR0YWtlVGFpbFJlYyA9
IEYyKAorICAgIGZ1bmN0aW9uIChuLCBsaXN0KSB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmck
Y29yZSRMaXN0JHJldmVyc2UoCisgICAgICAgICAgICBBMygKKyAgICAgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSRMaXN0JHRha2VSZXZlcnNlLAorICAgICAgICAgICAgICAgIG4sCisgICAgICAg
ICAgICAgICAgbGlzdCwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlz
dC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgIFtdKSkpOworICAgIH0pOwordmFyIF9l
bG1fbGFuZyRjb3JlJExpc3QkdGFrZUZhc3QgPSBGMygKKyAgICBmdW5jdGlvbiAoY3RyLCBuLCBs
aXN0KSB7CisgICAgICAgIGlmIChfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY21wKG4sIDAp
IDwgMSkgeworICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZy
b21BcnJheSgKKyAgICAgICAgICAgICAgICBbXSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICB2YXIgX3AyMyA9IHtjdG9yOiAnX1R1cGxlMicsIF8wOiBuLCBfMTogbGlzdH07CisgICAg
ICAgICAgICBfdjI2XzU6CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgX3YyNl8x
OgorICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKF9wMjMuY3Rv
ciA9PT0gJ19UdXBsZTInKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3AyMy5fMS5j
dG9yID09PSAnW10nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3Q7
CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChfcDIzLl8xLl8xLmN0b3IgPT09ICc6OicpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoIChfcDIzLl8wKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWsgX3YyNl8xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBf
ZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFtfcDIzLl8xLl8wLCBfcDIzLl8xLl8xLl8wXSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9wMjMuXzEuXzEuXzEuY3RvciA9PT0gJzo6
JykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW19wMjMuXzEuXzAsIF9wMjMuXzEuXzEuXzAs
IF9wMjMuXzEuXzEuXzEuXzBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhayBfdjI2XzU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKF9wMjMuXzEuXzEuXzEuY3RvciA9
PT0gJzo6JykgJiYgKF9wMjMuXzEuXzEuXzEuXzEuY3RvciA9PT0gJzo6JykpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9wMjggPSBfcDIzLl8xLl8x
Ll8xLl8wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
X3AyNyA9IF9wMjMuXzEuXzEuXzA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBfcDI2ID0gX3AyMy5fMS5fMDsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIF9wMjUgPSBfcDIzLl8xLl8xLl8xLl8xLl8wOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3AyNCA9IF9wMjMu
XzEuXzEuXzEuXzEuXzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNtcChjdHIsIDEwMDApID4g
MCkgPyBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6OiddLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX3AyNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6OiddLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9wMjcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTIoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9l
bG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6OiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcDI4LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JExpc3Rfb3BzWyc6OiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX3AyNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJExpc3QkdGFr
ZVRhaWxSZWMsIG4gLSA0LCBfcDI0KSkpKSkgOiBBMigKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6OiddLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3AyNiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRj
b3JlJExpc3Rfb3BzWyc6OiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9wMjcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6OiddLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcDI4
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6OiddLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3AyNSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEz
KF9lbG1fbGFuZyRjb3JlJExpc3QkdGFrZUZhc3QsIGN0ciArIDEsIG4gLSA0LCBfcDI0KSkpKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3YyNl81OworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfcDIzLl8wID09PSAxKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjI2XzE7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhayBfdjI2XzU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhayBfdjI2XzU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
IHdoaWxlKGZhbHNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICBbX3AyMy5fMS5fMF0pOwor
ICAgICAgICAgICAgfSB3aGlsZShmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gbGlzdDsKKyAg
ICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkdGFrZSA9IEYyKAorICAg
IGZ1bmN0aW9uIChuLCBsaXN0KSB7CisgICAgICAgIHJldHVybiBBMyhfZWxtX2xhbmckY29yZSRM
aXN0JHRha2VGYXN0LCAwLCBuLCBsaXN0KTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRM
aXN0JHJlcGVhdEhlbHAgPSBGMygKKyAgICBmdW5jdGlvbiAocmVzdWx0LCBuLCB2YWx1ZSkgewor
ICAgICAgICByZXBlYXRIZWxwOgorICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAg
aWYgKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jbXAobiwgMCkgPCAxKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgdmFyIF92MjcgPSBBMihfZWxtX2xhbmckY29yZSRMaXN0X29wc1snOjonXSwgdmFsdWUs
IHJlc3VsdCksCisgICAgICAgICAgICAgICAgICAgIF92MjggPSBuIC0gMSwKKyAgICAgICAgICAg
ICAgICAgICAgX3YyOSA9IHZhbHVlOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IF92Mjc7Cisg
ICAgICAgICAgICAgICAgbiA9IF92Mjg7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBfdjI5Owor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlIHJlcGVhdEhlbHA7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JHJlcGVhdCA9IEYyKAorICAg
IGZ1bmN0aW9uIChuLCB2YWx1ZSkgeworICAgICAgICByZXR1cm4gQTMoCisgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSRMaXN0JHJlcGVhdEhlbHAsCisgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgW10pLAorICAgICAgICAg
ICAgbiwKKyAgICAgICAgICAgIHZhbHVlKTsKKyAgICB9KTsKKwordmFyIF9lbG1fbGFuZyRjb3Jl
JFJlc3VsdCR0b01heWJlID0gZnVuY3Rpb24gKHJlc3VsdCkgeworICAgIHZhciBfcDAgPSByZXN1
bHQ7CisgICAgaWYgKF9wMC5jdG9yID09PSAnT2snKSB7CisgICAgICAgIHJldHVybiBfZWxtX2xh
bmckY29yZSRNYXliZSRKdXN0KF9wMC5fMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJu
IF9lbG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmc7CisgICAgfQorfTsKK3ZhciBfZWxtX2xhbmck
Y29yZSRSZXN1bHQkd2l0aERlZmF1bHQgPSBGMigKKyAgICBmdW5jdGlvbiAoZGVmLCByZXN1bHQp
IHsKKyAgICAgICAgdmFyIF9wMSA9IHJlc3VsdDsKKyAgICAgICAgaWYgKF9wMS5jdG9yID09PSAn
T2snKSB7CisgICAgICAgICAgICByZXR1cm4gX3AxLl8wOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRj
b3JlJFJlc3VsdCRFcnIgPSBmdW5jdGlvbiAoYSkgeworICAgIHJldHVybiB7Y3RvcjogJ0Vycics
IF8wOiBhfTsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkUmVzdWx0JGFuZFRoZW4gPSBGMigKKyAg
ICBmdW5jdGlvbiAocmVzdWx0LCBjYWxsYmFjaykgeworICAgICAgICB2YXIgX3AyID0gcmVzdWx0
OworICAgICAgICBpZiAoX3AyLmN0b3IgPT09ICdPaycpIHsKKyAgICAgICAgICAgIHJldHVybiBj
YWxsYmFjayhfcDIuXzApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIF9l
bG1fbGFuZyRjb3JlJFJlc3VsdCRFcnIoX3AyLl8wKTsKKyAgICAgICAgfQorICAgIH0pOwordmFy
IF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRPayA9IGZ1bmN0aW9uIChhKSB7CisgICAgcmV0dXJuIHtj
dG9yOiAnT2snLCBfMDogYX07Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRtYXAgPSBG
MigKKyAgICBmdW5jdGlvbiAoZnVuYywgcmEpIHsKKyAgICAgICAgdmFyIF9wMyA9IHJhOworICAg
ICAgICBpZiAoX3AzLmN0b3IgPT09ICdPaycpIHsKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xh
bmckY29yZSRSZXN1bHQkT2soCisgICAgICAgICAgICAgICAgZnVuYyhfcDMuXzApKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1bHQkRXJy
KF9wMy5fMCk7CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRSZXN1bHQk
bWFwMiA9IEYzKAorICAgIGZ1bmN0aW9uIChmdW5jLCByYSwgcmIpIHsKKyAgICAgICAgdmFyIF9w
NCA9IHtjdG9yOiAnX1R1cGxlMicsIF8wOiByYSwgXzE6IHJifTsKKyAgICAgICAgaWYgKF9wNC5f
MC5jdG9yID09PSAnT2snKSB7CisgICAgICAgICAgICBpZiAoX3A0Ll8xLmN0b3IgPT09ICdPaycp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JE9rKAorICAg
ICAgICAgICAgICAgICAgICBBMihmdW5jLCBfcDQuXzAuXzAsIF9wNC5fMS5fMCkpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVz
dWx0JEVycihfcDQuXzEuXzApOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRFcnIoX3A0Ll8wLl8wKTsKKyAg
ICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRtYXAzID0gRjQoCisg
ICAgZnVuY3Rpb24gKGZ1bmMsIHJhLCByYiwgcmMpIHsKKyAgICAgICAgdmFyIF9wNSA9IHtjdG9y
OiAnX1R1cGxlMycsIF8wOiByYSwgXzE6IHJiLCBfMjogcmN9OworICAgICAgICBpZiAoX3A1Ll8w
LmN0b3IgPT09ICdPaycpIHsKKyAgICAgICAgICAgIGlmIChfcDUuXzEuY3RvciA9PT0gJ09rJykg
eworICAgICAgICAgICAgICAgIGlmIChfcDUuXzIuY3RvciA9PT0gJ09rJykgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JE9rKAorICAgICAgICAgICAg
ICAgICAgICAgICAgQTMoZnVuYywgX3A1Ll8wLl8wLCBfcDUuXzEuXzAsIF9wNS5fMi5fMCkpOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxt
X2xhbmckY29yZSRSZXN1bHQkRXJyKF9wNS5fMi5fMCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUk
UmVzdWx0JEVycihfcDUuXzEuXzApOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRFcnIoX3A1Ll8wLl8wKTsK
KyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRtYXA0ID0gRjUo
CisgICAgZnVuY3Rpb24gKGZ1bmMsIHJhLCByYiwgcmMsIHJkKSB7CisgICAgICAgIHZhciBfcDYg
PSB7Y3RvcjogJ19UdXBsZTQnLCBfMDogcmEsIF8xOiByYiwgXzI6IHJjLCBfMzogcmR9OworICAg
ICAgICBpZiAoX3A2Ll8wLmN0b3IgPT09ICdPaycpIHsKKyAgICAgICAgICAgIGlmIChfcDYuXzEu
Y3RvciA9PT0gJ09rJykgeworICAgICAgICAgICAgICAgIGlmIChfcDYuXzIuY3RvciA9PT0gJ09r
JykgeworICAgICAgICAgICAgICAgICAgICBpZiAoX3A2Ll8zLmN0b3IgPT09ICdPaycpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1bHQkT2soCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQTQoZnVuYywgX3A2Ll8wLl8wLCBfcDYuXzEuXzAs
IF9wNi5fMi5fMCwgX3A2Ll8zLl8wKSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JEVycihf
cDYuXzMuXzApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRFcnIo
X3A2Ll8yLl8wKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1bHQkRXJyKF9wNi5fMS5fMCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gX2Vs
bV9sYW5nJGNvcmUkUmVzdWx0JEVycihfcDYuXzAuXzApOworICAgICAgICB9CisgICAgfSk7Cit2
YXIgX2VsbV9sYW5nJGNvcmUkUmVzdWx0JG1hcDUgPSBGNigKKyAgICBmdW5jdGlvbiAoZnVuYywg
cmEsIHJiLCByYywgcmQsIHJlKSB7CisgICAgICAgIHZhciBfcDcgPSB7Y3RvcjogJ19UdXBsZTUn
LCBfMDogcmEsIF8xOiByYiwgXzI6IHJjLCBfMzogcmQsIF80OiByZX07CisgICAgICAgIGlmIChf
cDcuXzAuY3RvciA9PT0gJ09rJykgeworICAgICAgICAgICAgaWYgKF9wNy5fMS5jdG9yID09PSAn
T2snKSB7CisgICAgICAgICAgICAgICAgaWYgKF9wNy5fMi5jdG9yID09PSAnT2snKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChfcDcuXzMuY3RvciA9PT0gJ09rJykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKF9wNy5fNC5jdG9yID09PSAnT2snKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRPaygKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQTUoZnVuYywgX3A3Ll8wLl8wLCBfcDcuXzEuXzAsIF9wNy5f
Mi5fMCwgX3A3Ll8zLl8wLCBfcDcuXzQuXzApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3Jl
JFJlc3VsdCRFcnIoX3A3Ll80Ll8wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBf
ZWxtX2xhbmckY29yZSRSZXN1bHQkRXJyKF9wNy5fMy5fMCk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
X2VsbV9sYW5nJGNvcmUkUmVzdWx0JEVycihfcDcuXzIuXzApOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRj
b3JlJFJlc3VsdCRFcnIoX3A3Ll8xLl8wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1bHQkRXJyKF9wNy5fMC5f
MCk7CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRSZXN1bHQkZm9ybWF0
RXJyb3IgPSBGMigKKyAgICBmdW5jdGlvbiAoZiwgcmVzdWx0KSB7CisgICAgICAgIHZhciBfcDgg
PSByZXN1bHQ7CisgICAgICAgIGlmIChfcDguY3RvciA9PT0gJ09rJykgeworICAgICAgICAgICAg
cmV0dXJuIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRPayhfcDguXzApOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRFcnIoCisgICAgICAg
ICAgICAgICAgZihfcDguXzApKTsKKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRj
b3JlJFJlc3VsdCRmcm9tTWF5YmUgPSBGMigKKyAgICBmdW5jdGlvbiAoZXJyLCBtYXliZSkgewor
ICAgICAgICB2YXIgX3A5ID0gbWF5YmU7CisgICAgICAgIGlmIChfcDkuY3RvciA9PT0gJ0p1c3Qn
KSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JE9rKF9wOS5fMCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVz
dWx0JEVycihlcnIpOworICAgICAgICB9CisgICAgfSk7CisKKy8vaW1wb3J0IC8vCisKK3ZhciBf
ZWxtX2xhbmckY29yZSROYXRpdmVfUGxhdGZvcm0gPSBmdW5jdGlvbigpIHsKKworCisvLyBQUk9H
UkFNUworCitmdW5jdGlvbiBhZGRQdWJsaWNNb2R1bGUob2JqZWN0LCBuYW1lLCBtYWluKQorewor
ICAgIHZhciBpbml0ID0gbWFpbiA/IG1ha2VFbWJlZChuYW1lLCBtYWluKSA6IG1haW5Jc1VuZGVm
aW5lZChuYW1lKTsKKworICAgIG9iamVjdFsnd29ya2VyJ10gPSBmdW5jdGlvbiB3b3JrZXIoZmxh
Z3MpCisgICAgeworICAgICAgICByZXR1cm4gaW5pdCh1bmRlZmluZWQsIGZsYWdzLCBmYWxzZSk7
CisgICAgfQorCisgICAgb2JqZWN0WydlbWJlZCddID0gZnVuY3Rpb24gZW1iZWQoZG9tTm9kZSwg
ZmxhZ3MpCisgICAgeworICAgICAgICByZXR1cm4gaW5pdChkb21Ob2RlLCBmbGFncywgdHJ1ZSk7
CisgICAgfQorCisgICAgb2JqZWN0WydmdWxsc2NyZWVuJ10gPSBmdW5jdGlvbiBmdWxsc2NyZWVu
KGZsYWdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluaXQoZG9jdW1lbnQuYm9keSwgZmxhZ3Ms
IHRydWUpOworICAgIH07Cit9CisKKworLy8gUFJPR1JBTSBGQUlMCisKK2Z1bmN0aW9uIG1haW5J
c1VuZGVmaW5lZChuYW1lKQoreworICAgIHJldHVybiBmdW5jdGlvbihkb21Ob2RlKQorICAgIHsK
KyAgICAgICAgdmFyIG1lc3NhZ2UgPSAnQ2Fubm90IGluaXRpYWxpemUgbW9kdWxlIGAnICsgbmFt
ZSArCisgICAgICAgICAgICAnYCBiZWNhdXNlIGl0IGhhcyBubyBgbWFpbmAgdmFsdWUhXG5XaGF0
IHNob3VsZCBJIHNob3cgb24gc2NyZWVuPyc7CisgICAgICAgIGRvbU5vZGUuaW5uZXJIVE1MID0g
ZXJyb3JIdG1sKG1lc3NhZ2UpOworICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7Cisg
ICAgfTsKK30KKworZnVuY3Rpb24gZXJyb3JIdG1sKG1lc3NhZ2UpCit7CisgICAgcmV0dXJuICc8
ZGl2IHN0eWxlPSJwYWRkaW5nLWxlZnQ6MWVtOyI+JworICAgICAgICArICc8aDIgc3R5bGU9ImZv
bnQtd2VpZ2h0Om5vcm1hbDsiPjxiPk9vcHMhPC9iPiBTb21ldGhpbmcgd2VudCB3cm9uZyB3aGVu
IHN0YXJ0aW5nIHlvdXIgRWxtIHByb2dyYW0uPC9oMj4nCisgICAgICAgICsgJzxwcmUgc3R5bGU9
InBhZGRpbmctbGVmdDoxZW07Ij4nICsgbWVzc2FnZSArICc8L3ByZT4nCisgICAgICAgICsgJzwv
ZGl2Pic7Cit9CisKKworLy8gUFJPR1JBTSBTVUNDRVNTCisKK2Z1bmN0aW9uIG1ha2VFbWJlZCht
b2R1bGVOYW1lLCBtYWluKQoreworICAgIHJldHVybiBmdW5jdGlvbiBlbWJlZChyb290RG9tTm9k
ZSwgZmxhZ3MsIHdpdGhSZW5kZXJlcikKKyAgICB7CisgICAgICAgIHRyeQorICAgICAgICB7Cisg
ICAgICAgICAgICB2YXIgcHJvZ3JhbSA9IG1haW5Ub1Byb2dyYW0obW9kdWxlTmFtZSwgbWFpbik7
CisgICAgICAgICAgICBpZiAoIXdpdGhSZW5kZXJlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBwcm9ncmFtLnJlbmRlcmVyID0gZHVtbXlSZW5kZXJlcjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBtYWtlRW1iZWRIZWxwKG1vZHVsZU5hbWUsIHByb2dyYW0sIHJv
b3REb21Ob2RlLCBmbGFncyk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKGUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJvb3REb21Ob2RlLmlubmVySFRNTCA9IGVycm9ySHRtbChlLm1lc3Nh
Z2UpOworICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgfQorICAgIH07Cit9CisKK2Z1bmN0
aW9uIGR1bW15UmVuZGVyZXIoKQoreworICAgIHJldHVybiB7IHVwZGF0ZTogZnVuY3Rpb24oKSB7
fSB9OworfQorCisKKy8vIE1BSU4gVE8gUFJPR1JBTQorCitmdW5jdGlvbiBtYWluVG9Qcm9ncmFt
KG1vZHVsZU5hbWUsIHdyYXBwZWRNYWluKQoreworICAgIHZhciBtYWluID0gd3JhcHBlZE1haW4u
bWFpbjsKKworICAgIGlmICh0eXBlb2YgbWFpbi5pbml0ID09PSAndW5kZWZpbmVkJykKKyAgICB7
CisgICAgICAgIHZhciBlbXB0eUJhZyA9IGJhdGNoKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0
Lk5pbCk7CisgICAgICAgIHZhciBub0NoYW5nZSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGls
cy5UdXBsZTIoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuVHVwbGUw
LAorICAgICAgICAgICAgZW1wdHlCYWcKKyAgICAgICAgKTsKKworICAgICAgICByZXR1cm4gX2Vs
bV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1YWxEb20kcHJvZ3JhbVdpdGhGbGFncyh7CisgICAgICAg
ICAgICBpbml0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG5vQ2hhbmdlOyB9LAorICAgICAgICAgICAg
dmlldzogZnVuY3Rpb24oKSB7IHJldHVybiBtYWluOyB9LAorICAgICAgICAgICAgdXBkYXRlOiBG
MihmdW5jdGlvbigpIHsgcmV0dXJuIG5vQ2hhbmdlOyB9KSwKKyAgICAgICAgICAgIHN1YnNjcmlw
dGlvbnM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVtcHR5QmFnOyB9CisgICAgICAgIH0pOworICAg
IH0KKworICAgIHZhciBmbGFncyA9IHdyYXBwZWRNYWluLmZsYWdzOworICAgIHZhciBpbml0ID0g
ZmxhZ3MKKyAgICAgICAgPyBpbml0V2l0aEZsYWdzKG1vZHVsZU5hbWUsIG1haW4uaW5pdCwgZmxh
Z3MpCisgICAgICAgIDogaW5pdFdpdGhvdXRGbGFncyhtb2R1bGVOYW1lLCBtYWluLmluaXQpOwor
CisgICAgcmV0dXJuIF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJHByb2dyYW1XaXRo
RmxhZ3MoeworICAgICAgICBpbml0OiBpbml0LAorICAgICAgICB2aWV3OiBtYWluLnZpZXcsCisg
ICAgICAgIHVwZGF0ZTogbWFpbi51cGRhdGUsCisgICAgICAgIHN1YnNjcmlwdGlvbnM6IG1haW4u
c3Vic2NyaXB0aW9ucywKKyAgICB9KTsKK30KKworZnVuY3Rpb24gaW5pdFdpdGhvdXRGbGFncyht
b2R1bGVOYW1lLCByZWFsSW5pdCkKK3sKKyAgICByZXR1cm4gZnVuY3Rpb24gaW5pdChmbGFncykK
KyAgICB7CisgICAgICAgIGlmICh0eXBlb2YgZmxhZ3MgIT09ICd1bmRlZmluZWQnKQorICAgICAg
ICB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCisgICAgICAgICAgICAgICAgJ1lvdSBh
cmUgZ2l2aW5nIG1vZHVsZSBgJyArIG1vZHVsZU5hbWUgKyAnYCBhbiBhcmd1bWVudCBpbiBKYXZh
U2NyaXB0LlxuJworICAgICAgICAgICAgICAgICsgJ1RoaXMgbW9kdWxlIGRvZXMgbm90IHRha2Ug
YXJndW1lbnRzIHRob3VnaCEgWW91IHByb2JhYmx5IG5lZWQgdG8gY2hhbmdlIHRoZVxuJworICAg
ICAgICAgICAgICAgICsgJ2luaXRpYWxpemF0aW9uIGNvZGUgdG8gc29tZXRoaW5nIGxpa2UgYEVs
bS4nICsgbW9kdWxlTmFtZSArICcuZnVsbHNjcmVlbigpYCcKKyAgICAgICAgICAgICk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHJlYWxJbml0KCk7CisgICAgfTsKK30KKworZnVuY3Rpb24g
aW5pdFdpdGhGbGFncyhtb2R1bGVOYW1lLCByZWFsSW5pdCwgZmxhZ0RlY29kZXIpCit7CisgICAg
cmV0dXJuIGZ1bmN0aW9uIGluaXQoZmxhZ3MpCisgICAgeworICAgICAgICB2YXIgcmVzdWx0ID0g
QTIoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24ucnVuLCBmbGFnRGVjb2RlciwgZmxhZ3MpOwor
ICAgICAgICBpZiAocmVzdWx0LmN0b3IgPT09ICdFcnInKQorICAgICAgICB7CisgICAgICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoCisgICAgICAgICAgICAgICAgJ1lvdSBhcmUgdHJ5aW5nIHRvIGlu
aXRpYWxpemUgbW9kdWxlIGAnICsgbW9kdWxlTmFtZSArICdgIHdpdGggYW4gdW5leHBlY3RlZCBh
cmd1bWVudC5cbicKKyAgICAgICAgICAgICAgICArICdXaGVuIHRyeWluZyB0byBjb252ZXJ0IGl0
IHRvIGEgdXNhYmxlIEVsbSB2YWx1ZSwgSSBydW4gaW50byB0aGlzIHByb2JsZW06XG5cbicKKyAg
ICAgICAgICAgICAgICArIHJlc3VsdC5fMAorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gcmVhbEluaXQocmVzdWx0Ll8wKTsKKyAgICB9OworfQorCisKKy8vIFNFVFVQ
IFJVTlRJTUUgU1lTVEVNCisKK2Z1bmN0aW9uIG1ha2VFbWJlZEhlbHAobW9kdWxlTmFtZSwgcHJv
Z3JhbSwgcm9vdERvbU5vZGUsIGZsYWdzKQoreworICAgIHZhciBpbml0ID0gcHJvZ3JhbS5pbml0
OworICAgIHZhciB1cGRhdGUgPSBwcm9ncmFtLnVwZGF0ZTsKKyAgICB2YXIgc3Vic2NyaXB0aW9u
cyA9IHByb2dyYW0uc3Vic2NyaXB0aW9uczsKKyAgICB2YXIgdmlldyA9IHByb2dyYW0udmlldzsK
KyAgICB2YXIgbWFrZVJlbmRlcmVyID0gcHJvZ3JhbS5yZW5kZXJlcjsKKworICAgIC8vIGFtYmll
bnQgc3RhdGUKKyAgICB2YXIgbWFuYWdlcnMgPSB7fTsKKyAgICB2YXIgcmVuZGVyZXI7CisKKyAg
ICAvLyBpbml0IGFuZCB1cGRhdGUgc3RhdGUgaW4gbWFpbiBwcm9jZXNzCisgICAgdmFyIGluaXRB
cHAgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1bGVyLm5hdGl2ZUJpbmRpbmcoZnVuY3Rp
b24oY2FsbGJhY2spIHsKKyAgICAgICAgdmFyIHJlc3VsdHMgPSBpbml0KGZsYWdzKTsKKyAgICAg
ICAgdmFyIG1vZGVsID0gcmVzdWx0cy5fMDsKKyAgICAgICAgcmVuZGVyZXIgPSBtYWtlUmVuZGVy
ZXIocm9vdERvbU5vZGUsIGVucXVldWUsIHZpZXcobW9kZWwpKTsKKyAgICAgICAgdmFyIGNtZHMg
PSByZXN1bHRzLl8xOworICAgICAgICB2YXIgc3VicyA9IHN1YnNjcmlwdGlvbnMobW9kZWwpOwor
ICAgICAgICBkaXNwYXRjaEVmZmVjdHMobWFuYWdlcnMsIGNtZHMsIHN1YnMpOworICAgICAgICBj
YWxsYmFjayhfZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1bGVyLnN1Y2NlZWQobW9kZWwpKTsK
KyAgICB9KTsKKworICAgIGZ1bmN0aW9uIG9uTWVzc2FnZShtc2csIG1vZGVsKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIubmF0aXZlQmluZGlu
ZyhmdW5jdGlvbihjYWxsYmFjaykgeworICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBBMih1cGRh
dGUsIG1zZywgbW9kZWwpOworICAgICAgICAgICAgbW9kZWwgPSByZXN1bHRzLl8wOworICAgICAg
ICAgICAgcmVuZGVyZXIudXBkYXRlKHZpZXcobW9kZWwpKTsKKyAgICAgICAgICAgIHZhciBjbWRz
ID0gcmVzdWx0cy5fMTsKKyAgICAgICAgICAgIHZhciBzdWJzID0gc3Vic2NyaXB0aW9ucyhtb2Rl
bCk7CisgICAgICAgICAgICBkaXNwYXRjaEVmZmVjdHMobWFuYWdlcnMsIGNtZHMsIHN1YnMpOwor
ICAgICAgICAgICAgY2FsbGJhY2soX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5zdWNj
ZWVkKG1vZGVsKSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHZhciBtYWluUHJvY2VzcyA9
IHNwYXduTG9vcChpbml0QXBwLCBvbk1lc3NhZ2UpOworCisgICAgZnVuY3Rpb24gZW5xdWV1ZSht
c2cpCisgICAgeworICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1bGVyLnJhd1Nl
bmQobWFpblByb2Nlc3MsIG1zZyk7CisgICAgfQorCisgICAgdmFyIHBvcnRzID0gc2V0dXBFZmZl
Y3RzKG1hbmFnZXJzLCBlbnF1ZXVlKTsKKworICAgIHJldHVybiBwb3J0cyA/IHsgcG9ydHM6IHBv
cnRzIH0gOiB7fTsKK30KKworCisvLyBFRkZFQ1QgTUFOQUdFUlMKKwordmFyIGVmZmVjdE1hbmFn
ZXJzID0ge307CisKK2Z1bmN0aW9uIHNldHVwRWZmZWN0cyhtYW5hZ2VycywgY2FsbGJhY2spCit7
CisgICAgdmFyIHBvcnRzOworCisgICAgLy8gc2V0dXAgYWxsIG5lY2Vzc2FyeSBlZmZlY3QgbWFu
YWdlcnMKKyAgICBmb3IgKHZhciBrZXkgaW4gZWZmZWN0TWFuYWdlcnMpCisgICAgeworICAgICAg
ICB2YXIgbWFuYWdlciA9IGVmZmVjdE1hbmFnZXJzW2tleV07CisKKyAgICAgICAgaWYgKG1hbmFn
ZXIuaXNGb3JlaWduKQorICAgICAgICB7CisgICAgICAgICAgICBwb3J0cyA9IHBvcnRzIHx8IHt9
OworICAgICAgICAgICAgcG9ydHNba2V5XSA9IG1hbmFnZXIudGFnID09PSAnY21kJworICAgICAg
ICAgICAgICAgID8gc2V0dXBPdXRnb2luZ1BvcnQoa2V5KQorICAgICAgICAgICAgICAgIDogc2V0
dXBJbmNvbWluZ1BvcnQoa2V5LCBjYWxsYmFjayk7CisgICAgICAgIH0KKworICAgICAgICBtYW5h
Z2Vyc1trZXldID0gbWFrZU1hbmFnZXIobWFuYWdlciwgY2FsbGJhY2spOworICAgIH0KKworICAg
IHJldHVybiBwb3J0czsKK30KKworZnVuY3Rpb24gbWFrZU1hbmFnZXIoaW5mbywgY2FsbGJhY2sp
Cit7CisgICAgdmFyIHJvdXRlciA9IHsKKyAgICAgICAgbWFpbjogY2FsbGJhY2ssCisgICAgICAg
IHNlbGY6IHVuZGVmaW5lZAorICAgIH07CisKKyAgICB2YXIgdGFnID0gaW5mby50YWc7CisgICAg
dmFyIG9uRWZmZWN0cyA9IGluZm8ub25FZmZlY3RzOworICAgIHZhciBvblNlbGZNc2cgPSBpbmZv
Lm9uU2VsZk1zZzsKKworICAgIGZ1bmN0aW9uIG9uTWVzc2FnZShtc2csIHN0YXRlKQorICAgIHsK
KyAgICAgICAgaWYgKG1zZy5jdG9yID09PSAnc2VsZicpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBBMyhvblNlbGZNc2csIHJvdXRlciwgbXNnLl8wLCBzdGF0ZSk7CisgICAgICAgIH0K
KworICAgICAgICB2YXIgZnggPSBtc2cuXzA7CisgICAgICAgIHN3aXRjaCAodGFnKQorICAgICAg
ICB7CisgICAgICAgICAgICBjYXNlICdjbWQnOgorICAgICAgICAgICAgICAgIHJldHVybiBBMyhv
bkVmZmVjdHMsIHJvdXRlciwgZnguY21kcywgc3RhdGUpOworCisgICAgICAgICAgICBjYXNlICdz
dWInOgorICAgICAgICAgICAgICAgIHJldHVybiBBMyhvbkVmZmVjdHMsIHJvdXRlciwgZnguc3Vi
cywgc3RhdGUpOworCisgICAgICAgICAgICBjYXNlICdmeCc6CisgICAgICAgICAgICAgICAgcmV0
dXJuIEE0KG9uRWZmZWN0cywgcm91dGVyLCBmeC5jbWRzLCBmeC5zdWJzLCBzdGF0ZSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB2YXIgcHJvY2VzcyA9IHNwYXduTG9vcChpbmZvLmluaXQsIG9u
TWVzc2FnZSk7CisgICAgcm91dGVyLnNlbGYgPSBwcm9jZXNzOworICAgIHJldHVybiBwcm9jZXNz
OworfQorCitmdW5jdGlvbiBzZW5kVG9BcHAocm91dGVyLCBtc2cpCit7CisgICAgcmV0dXJuIF9l
bG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIubmF0aXZlQmluZGluZyhmdW5jdGlvbihjYWxs
YmFjaykKKyAgICB7CisgICAgICAgIHJvdXRlci5tYWluKG1zZyk7CisgICAgICAgIGNhbGxiYWNr
KF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIuc3VjY2VlZChfZWxtX2xhbmckY29yZSRO
YXRpdmVfVXRpbHMuVHVwbGUwKSk7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHNlbmRUb1NlbGYo
cm91dGVyLCBtc2cpCit7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hl
ZHVsZXIuc2VuZCwgcm91dGVyLnNlbGYsIHsKKyAgICAgICAgY3RvcjogJ3NlbGYnLAorICAgICAg
ICBfMDogbXNnCisgICAgfSk7Cit9CisKKworLy8gSEVMUEVSIGZvciBTVEFURUZVTCBMT09QUwor
CitmdW5jdGlvbiBzcGF3bkxvb3AoaW5pdCwgb25NZXNzYWdlKQoreworICAgIHZhciBhbmRUaGVu
ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5hbmRUaGVuOworCisgICAgZnVuY3Rp
b24gbG9vcChzdGF0ZSkKKyAgICB7CisgICAgICAgIHZhciBoYW5kbGVNc2cgPSBfZWxtX2xhbmck
Y29yZSROYXRpdmVfU2NoZWR1bGVyLnJlY2VpdmUoZnVuY3Rpb24obXNnKSB7CisgICAgICAgICAg
ICByZXR1cm4gb25NZXNzYWdlKG1zZywgc3RhdGUpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0
dXJuIEEyKGFuZFRoZW4sIGhhbmRsZU1zZywgbG9vcCk7CisgICAgfQorCisgICAgdmFyIHRhc2sg
PSBBMihhbmRUaGVuLCBpbml0LCBsb29wKTsKKworICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRO
YXRpdmVfU2NoZWR1bGVyLnJhd1NwYXduKHRhc2spOworfQorCisKKy8vIEJBR1MKKworZnVuY3Rp
b24gbGVhZihob21lKQoreworICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICB0eXBlOiAnbGVhZicsCisgICAgICAgICAgICBob21l
OiBob21lLAorICAgICAgICAgICAgdmFsdWU6IHZhbHVlCisgICAgICAgIH07CisgICAgfTsKK30K
KworZnVuY3Rpb24gYmF0Y2gobGlzdCkKK3sKKyAgICByZXR1cm4geworICAgICAgICB0eXBlOiAn
bm9kZScsCisgICAgICAgIGJyYW5jaGVzOiBsaXN0CisgICAgfTsKK30KKworZnVuY3Rpb24gbWFw
KHRhZ2dlciwgYmFnKQoreworICAgIHJldHVybiB7CisgICAgICAgIHR5cGU6ICdtYXAnLAorICAg
ICAgICB0YWdnZXI6IHRhZ2dlciwKKyAgICAgICAgdHJlZTogYmFnCisgICAgfQorfQorCisKKy8v
IFBJUEUgQkFHUyBJTlRPIEVGRkVDVCBNQU5BR0VSUworCitmdW5jdGlvbiBkaXNwYXRjaEVmZmVj
dHMobWFuYWdlcnMsIGNtZEJhZywgc3ViQmFnKQoreworICAgIHZhciBlZmZlY3RzRGljdCA9IHt9
OworICAgIGdhdGhlckVmZmVjdHModHJ1ZSwgY21kQmFnLCBlZmZlY3RzRGljdCwgbnVsbCk7Cisg
ICAgZ2F0aGVyRWZmZWN0cyhmYWxzZSwgc3ViQmFnLCBlZmZlY3RzRGljdCwgbnVsbCk7CisKKyAg
ICBmb3IgKHZhciBob21lIGluIG1hbmFnZXJzKQorICAgIHsKKyAgICAgICAgdmFyIGZ4ID0gaG9t
ZSBpbiBlZmZlY3RzRGljdAorICAgICAgICAgICAgPyBlZmZlY3RzRGljdFtob21lXQorICAgICAg
ICAgICAgOiB7CisgICAgICAgICAgICAgICAgY21kczogX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xp
c3QuTmlsLAorICAgICAgICAgICAgICAgIHN1YnM6IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0
Lk5pbAorICAgICAgICAgICAgfTsKKworICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfU2No
ZWR1bGVyLnJhd1NlbmQobWFuYWdlcnNbaG9tZV0sIHsgY3RvcjogJ2Z4JywgXzA6IGZ4IH0pOwor
ICAgIH0KK30KKworZnVuY3Rpb24gZ2F0aGVyRWZmZWN0cyhpc0NtZCwgYmFnLCBlZmZlY3RzRGlj
dCwgdGFnZ2VycykKK3sKKyAgICBzd2l0Y2ggKGJhZy50eXBlKQorICAgIHsKKyAgICAgICAgY2Fz
ZSAnbGVhZic6CisgICAgICAgICAgICB2YXIgaG9tZSA9IGJhZy5ob21lOworICAgICAgICAgICAg
dmFyIGVmZmVjdCA9IHRvRWZmZWN0KGlzQ21kLCBob21lLCB0YWdnZXJzLCBiYWcudmFsdWUpOwor
ICAgICAgICAgICAgZWZmZWN0c0RpY3RbaG9tZV0gPSBpbnNlcnQoaXNDbWQsIGVmZmVjdCwgZWZm
ZWN0c0RpY3RbaG9tZV0pOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgJ25v
ZGUnOgorICAgICAgICAgICAgdmFyIGxpc3QgPSBiYWcuYnJhbmNoZXM7CisgICAgICAgICAgICB3
aGlsZSAobGlzdC5jdG9yICE9PSAnW10nKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGdhdGhlckVmZmVjdHMoaXNDbWQsIGxpc3QuXzAsIGVmZmVjdHNEaWN0LCB0YWdnZXJzKTsKKyAg
ICAgICAgICAgICAgICBsaXN0ID0gbGlzdC5fMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBjYXNlICdtYXAnOgorICAgICAgICAgICAgZ2F0aGVyRWZmZWN0
cyhpc0NtZCwgYmFnLnRyZWUsIGVmZmVjdHNEaWN0LCB7CisgICAgICAgICAgICAgICAgdGFnZ2Vy
OiBiYWcudGFnZ2VyLAorICAgICAgICAgICAgICAgIHJlc3Q6IHRhZ2dlcnMKKyAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworZnVuY3Rpb24gdG9FZmZlY3Qo
aXNDbWQsIGhvbWUsIHRhZ2dlcnMsIHZhbHVlKQoreworICAgIGZ1bmN0aW9uIGFwcGx5VGFnZ2Vy
cyh4KQorICAgIHsKKyAgICAgICAgdmFyIHRlbXAgPSB0YWdnZXJzOworICAgICAgICB3aGlsZSAo
dGVtcCkKKyAgICAgICAgeworICAgICAgICAgICAgeCA9IHRlbXAudGFnZ2VyKHgpOworICAgICAg
ICAgICAgdGVtcCA9IHRlbXAucmVzdDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geDsKKyAg
ICB9CisKKyAgICB2YXIgbWFwID0gaXNDbWQKKyAgICAgICAgPyBlZmZlY3RNYW5hZ2Vyc1tob21l
XS5jbWRNYXAKKyAgICAgICAgOiBlZmZlY3RNYW5hZ2Vyc1tob21lXS5zdWJNYXA7CisKKyAgICBy
ZXR1cm4gQTIobWFwLCBhcHBseVRhZ2dlcnMsIHZhbHVlKQorfQorCitmdW5jdGlvbiBpbnNlcnQo
aXNDbWQsIG5ld0VmZmVjdCwgZWZmZWN0cykKK3sKKyAgICBlZmZlY3RzID0gZWZmZWN0cyB8fCB7
CisgICAgICAgIGNtZHM6IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0Lk5pbCwKKyAgICAgICAg
c3ViczogX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuTmlsCisgICAgfTsKKyAgICBpZiAoaXND
bWQpCisgICAgeworICAgICAgICBlZmZlY3RzLmNtZHMgPSBfZWxtX2xhbmckY29yZSROYXRpdmVf
TGlzdC5Db25zKG5ld0VmZmVjdCwgZWZmZWN0cy5jbWRzKTsKKyAgICAgICAgcmV0dXJuIGVmZmVj
dHM7CisgICAgfQorICAgIGVmZmVjdHMuc3VicyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0
LkNvbnMobmV3RWZmZWN0LCBlZmZlY3RzLnN1YnMpOworICAgIHJldHVybiBlZmZlY3RzOworfQor
CisKKy8vIFBPUlRTCisKK2Z1bmN0aW9uIGNoZWNrUG9ydE5hbWUobmFtZSkKK3sKKyAgICBpZiAo
bmFtZSBpbiBlZmZlY3RNYW5hZ2VycykKKyAgICB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcign
VGhlcmUgY2FuIG9ubHkgYmUgb25lIHBvcnQgbmFtZWQgYCcgKyBuYW1lICsgJ2AsIGJ1dCB5b3Vy
IHByb2dyYW0gaGFzIG11bHRpcGxlLicpOworICAgIH0KK30KKworCisvLyBPVVRHT0lORyBQT1JU
UworCitmdW5jdGlvbiBvdXRnb2luZ1BvcnQobmFtZSwgY29udmVydGVyKQoreworICAgIGNoZWNr
UG9ydE5hbWUobmFtZSk7CisgICAgZWZmZWN0TWFuYWdlcnNbbmFtZV0gPSB7CisgICAgICAgIHRh
ZzogJ2NtZCcsCisgICAgICAgIGNtZE1hcDogb3V0Z29pbmdQb3J0TWFwLAorICAgICAgICBjb252
ZXJ0ZXI6IGNvbnZlcnRlciwKKyAgICAgICAgaXNGb3JlaWduOiB0cnVlCisgICAgfTsKKyAgICBy
ZXR1cm4gbGVhZihuYW1lKTsKK30KKwordmFyIG91dGdvaW5nUG9ydE1hcCA9IEYyKGZ1bmN0aW9u
IGNtZE1hcCh0YWdnZXIsIHZhbHVlKSB7CisgICAgcmV0dXJuIHZhbHVlOworfSk7CisKK2Z1bmN0
aW9uIHNldHVwT3V0Z29pbmdQb3J0KG5hbWUpCit7CisgICAgdmFyIHN1YnMgPSBbXTsKKyAgICB2
YXIgY29udmVydGVyID0gZWZmZWN0TWFuYWdlcnNbbmFtZV0uY29udmVydGVyOworCisgICAgLy8g
Q1JFQVRFIE1BTkFHRVIKKworICAgIHZhciBpbml0ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1Nj
aGVkdWxlci5zdWNjZWVkKG51bGwpOworCisgICAgZnVuY3Rpb24gb25FZmZlY3RzKHJvdXRlciwg
Y21kTGlzdCwgc3RhdGUpCisgICAgeworICAgICAgICB3aGlsZSAoY21kTGlzdC5jdG9yICE9PSAn
W10nKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgdmFsdWUgPSBjb252ZXJ0ZXIoY21kTGlz
dC5fMCk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YnMubGVuZ3RoOyBpKysp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3Vic1tpXSh2YWx1ZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjbWRMaXN0ID0gY21kTGlzdC5fMTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gaW5pdDsKKyAgICB9CisKKyAgICBlZmZlY3RNYW5hZ2Vyc1tuYW1lXS5pbml0
ID0gaW5pdDsKKyAgICBlZmZlY3RNYW5hZ2Vyc1tuYW1lXS5vbkVmZmVjdHMgPSBGMyhvbkVmZmVj
dHMpOworCisgICAgLy8gUFVCTElDIEFQSQorCisgICAgZnVuY3Rpb24gc3Vic2NyaWJlKGNhbGxi
YWNrKQorICAgIHsKKyAgICAgICAgc3Vicy5wdXNoKGNhbGxiYWNrKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiB1bnN1YnNjcmliZShjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHZhciBpbmRleCA9
IHN1YnMuaW5kZXhPZihjYWxsYmFjayk7CisgICAgICAgIGlmIChpbmRleCA+PSAwKQorICAgICAg
ICB7CisgICAgICAgICAgICBzdWJzLnNwbGljZShpbmRleCwgMSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4geworICAgICAgICBzdWJzY3JpYmU6IHN1YnNjcmliZSwKKyAgICAgICAg
dW5zdWJzY3JpYmU6IHVuc3Vic2NyaWJlCisgICAgfTsKK30KKworCisvLyBJTkNPTUlORyBQT1JU
UworCitmdW5jdGlvbiBpbmNvbWluZ1BvcnQobmFtZSwgY29udmVydGVyKQoreworICAgIGNoZWNr
UG9ydE5hbWUobmFtZSk7CisgICAgZWZmZWN0TWFuYWdlcnNbbmFtZV0gPSB7CisgICAgICAgIHRh
ZzogJ3N1YicsCisgICAgICAgIHN1Yk1hcDogaW5jb21pbmdQb3J0TWFwLAorICAgICAgICBjb252
ZXJ0ZXI6IGNvbnZlcnRlciwKKyAgICAgICAgaXNGb3JlaWduOiB0cnVlCisgICAgfTsKKyAgICBy
ZXR1cm4gbGVhZihuYW1lKTsKK30KKwordmFyIGluY29taW5nUG9ydE1hcCA9IEYyKGZ1bmN0aW9u
IHN1Yk1hcCh0YWdnZXIsIGZpbmFsVGFnZ2VyKQoreworICAgIHJldHVybiBmdW5jdGlvbih2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0YWdnZXIoZmluYWxUYWdnZXIodmFsdWUpKTsKKyAg
ICB9OworfSk7CisKK2Z1bmN0aW9uIHNldHVwSW5jb21pbmdQb3J0KG5hbWUsIGNhbGxiYWNrKQor
eworICAgIHZhciBzZW50QmVmb3JlSW5pdCA9IFtdOworICAgIHZhciBzdWJzID0gX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX0xpc3QuTmlsOworICAgIHZhciBjb252ZXJ0ZXIgPSBlZmZlY3RNYW5hZ2Vy
c1tuYW1lXS5jb252ZXJ0ZXI7CisgICAgdmFyIGN1cnJlbnRPbkVmZmVjdHMgPSBwcmVJbml0T25F
ZmZlY3RzOworICAgIHZhciBjdXJyZW50U2VuZCA9IHByZUluaXRTZW5kOworCisgICAgLy8gQ1JF
QVRFIE1BTkFHRVIKKworICAgIHZhciBpbml0ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVk
dWxlci5zdWNjZWVkKG51bGwpOworCisgICAgZnVuY3Rpb24gcHJlSW5pdE9uRWZmZWN0cyhyb3V0
ZXIsIHN1Ykxpc3QsIHN0YXRlKQorICAgIHsKKyAgICAgICAgdmFyIHBvc3RJbml0UmVzdWx0ID0g
cG9zdEluaXRPbkVmZmVjdHMocm91dGVyLCBzdWJMaXN0LCBzdGF0ZSk7CisKKyAgICAgICAgZm9y
KHZhciBpID0gMDsgaSA8IHNlbnRCZWZvcmVJbml0Lmxlbmd0aDsgaSsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBwb3N0SW5pdFNlbmQoc2VudEJlZm9yZUluaXRbaV0pOworICAgICAgICB9CisK
KyAgICAgICAgc2VudEJlZm9yZUluaXQgPSBudWxsOyAvLyB0byByZWxlYXNlIG9iamVjdHMgaGVs
ZCBpbiBxdWV1ZQorICAgICAgICBjdXJyZW50U2VuZCA9IHBvc3RJbml0U2VuZDsKKyAgICAgICAg
Y3VycmVudE9uRWZmZWN0cyA9IHBvc3RJbml0T25FZmZlY3RzOworICAgICAgICByZXR1cm4gcG9z
dEluaXRSZXN1bHQ7CisgICAgfQorCisgICAgZnVuY3Rpb24gcG9zdEluaXRPbkVmZmVjdHMocm91
dGVyLCBzdWJMaXN0LCBzdGF0ZSkKKyAgICB7CisgICAgICAgIHN1YnMgPSBzdWJMaXN0OworICAg
ICAgICByZXR1cm4gaW5pdDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBvbkVmZmVjdHMocm91dGVy
LCBzdWJMaXN0LCBzdGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjdXJyZW50T25FZmZlY3Rz
KHJvdXRlciwgc3ViTGlzdCwgc3RhdGUpOworICAgIH0KKworICAgIGVmZmVjdE1hbmFnZXJzW25h
bWVdLmluaXQgPSBpbml0OworICAgIGVmZmVjdE1hbmFnZXJzW25hbWVdLm9uRWZmZWN0cyA9IEYz
KG9uRWZmZWN0cyk7CisKKyAgICAvLyBQVUJMSUMgQVBJCisKKyAgICBmdW5jdGlvbiBwcmVJbml0
U2VuZCh2YWx1ZSkKKyAgICB7CisgICAgICAgIHNlbnRCZWZvcmVJbml0LnB1c2godmFsdWUpOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIHBvc3RJbml0U2VuZChpbmNvbWluZ1ZhbHVlKQorICAgIHsK
KyAgICAgICAgdmFyIHJlc3VsdCA9IEEyKF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJGRlY29k
ZVZhbHVlLCBjb252ZXJ0ZXIsIGluY29taW5nVmFsdWUpOworICAgICAgICBpZiAocmVzdWx0LmN0
b3IgPT09ICdFcnInKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Ry
eWluZyB0byBzZW5kIGFuIHVuZXhwZWN0ZWQgdHlwZSBvZiB2YWx1ZSB0aHJvdWdoIHBvcnQgYCcg
KyBuYW1lICsgJ2A6XG4nICsgcmVzdWx0Ll8wKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciB2
YWx1ZSA9IHJlc3VsdC5fMDsKKyAgICAgICAgdmFyIHRlbXAgPSBzdWJzOworICAgICAgICB3aGls
ZSAodGVtcC5jdG9yICE9PSAnW10nKQorICAgICAgICB7CisgICAgICAgICAgICBjYWxsYmFjayh0
ZW1wLl8wKHZhbHVlKSk7CisgICAgICAgICAgICB0ZW1wID0gdGVtcC5fMTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGZ1bmN0aW9uIHNlbmQoaW5jb21pbmdWYWx1ZSkKKyAgICB7CisgICAgICAg
IGN1cnJlbnRTZW5kKGluY29taW5nVmFsdWUpOworICAgIH0KKworICAgIHJldHVybiB7IHNlbmQ6
IHNlbmQgfTsKK30KKworcmV0dXJuIHsKKyAgICAvLyByb3V0ZXJzCisgICAgc2VuZFRvQXBwOiBG
MihzZW5kVG9BcHApLAorICAgIHNlbmRUb1NlbGY6IEYyKHNlbmRUb1NlbGYpLAorCisgICAgLy8g
Z2xvYmFsIHNldHVwCisgICAgbWFpblRvUHJvZ3JhbTogbWFpblRvUHJvZ3JhbSwKKyAgICBlZmZl
Y3RNYW5hZ2VyczogZWZmZWN0TWFuYWdlcnMsCisgICAgb3V0Z29pbmdQb3J0OiBvdXRnb2luZ1Bv
cnQsCisgICAgaW5jb21pbmdQb3J0OiBpbmNvbWluZ1BvcnQsCisgICAgYWRkUHVibGljTW9kdWxl
OiBhZGRQdWJsaWNNb2R1bGUsCisKKyAgICAvLyBlZmZlY3QgYmFncworICAgIGxlYWY6IGxlYWYs
CisgICAgYmF0Y2g6IGJhdGNoLAorICAgIG1hcDogRjIobWFwKQorfTsKKworfSgpOworCisvL2lt
cG9ydCBOYXRpdmUuVXRpbHMgLy8KKwordmFyIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVs
ZXIgPSBmdW5jdGlvbigpIHsKKwordmFyIE1BWF9TVEVQUyA9IDEwMDAwOworCisKKy8vIFRBU0tT
CisKK2Z1bmN0aW9uIHN1Y2NlZWQodmFsdWUpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgY3Rv
cjogJ19UYXNrX3N1Y2NlZWQnLAorICAgICAgICB2YWx1ZTogdmFsdWUKKyAgICB9OworfQorCitm
dW5jdGlvbiBmYWlsKGVycm9yKQoreworICAgIHJldHVybiB7CisgICAgICAgIGN0b3I6ICdfVGFz
a19mYWlsJywKKyAgICAgICAgdmFsdWU6IGVycm9yCisgICAgfTsKK30KKworZnVuY3Rpb24gbmF0
aXZlQmluZGluZyhjYWxsYmFjaykKK3sKKyAgICByZXR1cm4geworICAgICAgICBjdG9yOiAnX1Rh
c2tfbmF0aXZlQmluZGluZycsCisgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjaywKKyAgICAgICAg
Y2FuY2VsOiBudWxsCisgICAgfTsKK30KKworZnVuY3Rpb24gYW5kVGhlbih0YXNrLCBjYWxsYmFj
aykKK3sKKyAgICByZXR1cm4geworICAgICAgICBjdG9yOiAnX1Rhc2tfYW5kVGhlbicsCisgICAg
ICAgIHRhc2s6IHRhc2ssCisgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjaworICAgIH07Cit9CisK
K2Z1bmN0aW9uIG9uRXJyb3IodGFzaywgY2FsbGJhY2spCit7CisgICAgcmV0dXJuIHsKKyAgICAg
ICAgY3RvcjogJ19UYXNrX29uRXJyb3InLAorICAgICAgICB0YXNrOiB0YXNrLAorICAgICAgICBj
YWxsYmFjazogY2FsbGJhY2sKKyAgICB9OworfQorCitmdW5jdGlvbiByZWNlaXZlKGNhbGxiYWNr
KQoreworICAgIHJldHVybiB7CisgICAgICAgIGN0b3I6ICdfVGFza19yZWNlaXZlJywKKyAgICAg
ICAgY2FsbGJhY2s6IGNhbGxiYWNrCisgICAgfTsKK30KKworCisvLyBQUk9DRVNTRVMKKworZnVu
Y3Rpb24gcmF3U3Bhd24odGFzaykKK3sKKyAgICB2YXIgcHJvY2VzcyA9IHsKKyAgICAgICAgY3Rv
cjogJ19Qcm9jZXNzJywKKyAgICAgICAgaWQ6IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5n
dWlkKCksCisgICAgICAgIHJvb3Q6IHRhc2ssCisgICAgICAgIHN0YWNrOiBudWxsLAorICAgICAg
ICBtYWlsYm94OiBbXQorICAgIH07CisKKyAgICBlbnF1ZXVlKHByb2Nlc3MpOworCisgICAgcmV0
dXJuIHByb2Nlc3M7Cit9CisKK2Z1bmN0aW9uIHNwYXduKHRhc2spCit7CisgICAgcmV0dXJuIG5h
dGl2ZUJpbmRpbmcoZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgICAgICAgdmFyIHByb2Nlc3MgPSBy
YXdTcGF3bih0YXNrKTsKKyAgICAgICAgY2FsbGJhY2soc3VjY2VlZChwcm9jZXNzKSk7CisgICAg
fSk7Cit9CisKK2Z1bmN0aW9uIHJhd1NlbmQocHJvY2VzcywgbXNnKQoreworICAgIHByb2Nlc3Mu
bWFpbGJveC5wdXNoKG1zZyk7CisgICAgZW5xdWV1ZShwcm9jZXNzKTsKK30KKworZnVuY3Rpb24g
c2VuZChwcm9jZXNzLCBtc2cpCit7CisgICAgcmV0dXJuIG5hdGl2ZUJpbmRpbmcoZnVuY3Rpb24o
Y2FsbGJhY2spIHsKKyAgICAgICAgcmF3U2VuZChwcm9jZXNzLCBtc2cpOworICAgICAgICBjYWxs
YmFjayhzdWNjZWVkKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5UdXBsZTApKTsKKyAgICB9
KTsKK30KKworZnVuY3Rpb24ga2lsbChwcm9jZXNzKQoreworICAgIHJldHVybiBuYXRpdmVCaW5k
aW5nKGZ1bmN0aW9uKGNhbGxiYWNrKSB7CisgICAgICAgIHZhciByb290ID0gcHJvY2Vzcy5yb290
OworICAgICAgICBpZiAocm9vdC5jdG9yID09PSAnX1Rhc2tfbmF0aXZlQmluZGluZycgJiYgcm9v
dC5jYW5jZWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJvb3QuY2FuY2VsKCk7CisgICAgICAg
IH0KKworICAgICAgICBwcm9jZXNzLnJvb3QgPSBudWxsOworCisgICAgICAgIGNhbGxiYWNrKHN1
Y2NlZWQoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLlR1cGxlMCkpOworICAgIH0pOworfQor
CitmdW5jdGlvbiBzbGVlcCh0aW1lKQoreworICAgIHJldHVybiBuYXRpdmVCaW5kaW5nKGZ1bmN0
aW9uKGNhbGxiYWNrKSB7CisgICAgICAgIHZhciBpZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICBjYWxsYmFjayhzdWNjZWVkKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGls
cy5UdXBsZTApKTsKKyAgICAgICAgfSwgdGltZSk7CisKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
KCkgeyBjbGVhclRpbWVvdXQoaWQpOyB9OworICAgIH0pOworfQorCisKKy8vIFNURVAgUFJPQ0VT
U0VTCisKK2Z1bmN0aW9uIHN0ZXAobnVtU3RlcHMsIHByb2Nlc3MpCit7CisgICAgd2hpbGUgKG51
bVN0ZXBzIDwgTUFYX1NURVBTKQorICAgIHsKKyAgICAgICAgdmFyIGN0b3IgPSBwcm9jZXNzLnJv
b3QuY3RvcjsKKworICAgICAgICBpZiAoY3RvciA9PT0gJ19UYXNrX3N1Y2NlZWQnKQorICAgICAg
ICB7CisgICAgICAgICAgICB3aGlsZSAocHJvY2Vzcy5zdGFjayAmJiBwcm9jZXNzLnN0YWNrLmN0
b3IgPT09ICdfVGFza19vbkVycm9yJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBw
cm9jZXNzLnN0YWNrID0gcHJvY2Vzcy5zdGFjay5yZXN0OworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHByb2Nlc3Muc3RhY2sgPT09IG51bGwpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcm9jZXNzLnJvb3Qg
PSBwcm9jZXNzLnN0YWNrLmNhbGxiYWNrKHByb2Nlc3Mucm9vdC52YWx1ZSk7CisgICAgICAgICAg
ICBwcm9jZXNzLnN0YWNrID0gcHJvY2Vzcy5zdGFjay5yZXN0OworICAgICAgICAgICAgKytudW1T
dGVwczsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGN0
b3IgPT09ICdfVGFza19mYWlsJykKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKHByb2Nl
c3Muc3RhY2sgJiYgcHJvY2Vzcy5zdGFjay5jdG9yID09PSAnX1Rhc2tfYW5kVGhlbicpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJvY2Vzcy5zdGFjayA9IHByb2Nlc3Muc3RhY2su
cmVzdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwcm9jZXNzLnN0YWNrID09PSBu
dWxsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcHJvY2Vzcy5yb290ID0gcHJvY2Vzcy5zdGFjay5jYWxsYmFjayhwcm9j
ZXNzLnJvb3QudmFsdWUpOworICAgICAgICAgICAgcHJvY2Vzcy5zdGFjayA9IHByb2Nlc3Muc3Rh
Y2sucmVzdDsKKyAgICAgICAgICAgICsrbnVtU3RlcHM7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChjdG9yID09PSAnX1Rhc2tfYW5kVGhlbicpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHByb2Nlc3Muc3RhY2sgPSB7CisgICAgICAgICAgICAgICAgY3Rv
cjogJ19UYXNrX2FuZFRoZW4nLAorICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBwcm9jZXNzLnJv
b3QuY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgcmVzdDogcHJvY2Vzcy5zdGFjaworICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIHByb2Nlc3Mucm9vdCA9IHByb2Nlc3Mucm9vdC50YXNrOwor
ICAgICAgICAgICAgKytudW1TdGVwczsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGN0b3IgPT09ICdfVGFza19vbkVycm9yJykKKyAgICAgICAgeworICAg
ICAgICAgICAgcHJvY2Vzcy5zdGFjayA9IHsKKyAgICAgICAgICAgICAgICBjdG9yOiAnX1Rhc2tf
b25FcnJvcicsCisgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHByb2Nlc3Mucm9vdC5jYWxsYmFj
aywKKyAgICAgICAgICAgICAgICByZXN0OiBwcm9jZXNzLnN0YWNrCisgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgcHJvY2Vzcy5yb290ID0gcHJvY2Vzcy5yb290LnRhc2s7CisgICAgICAgICAg
ICArK251bVN0ZXBzOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoY3RvciA9PT0gJ19UYXNrX25hdGl2ZUJpbmRpbmcnKQorICAgICAgICB7CisgICAgICAg
ICAgICBwcm9jZXNzLnJvb3QuY2FuY2VsID0gcHJvY2Vzcy5yb290LmNhbGxiYWNrKGZ1bmN0aW9u
KG5ld1Jvb3QpIHsKKyAgICAgICAgICAgICAgICBwcm9jZXNzLnJvb3QgPSBuZXdSb290OworICAg
ICAgICAgICAgICAgIGVucXVldWUocHJvY2Vzcyk7CisgICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3RvciA9PT0gJ19UYXNrX3Jl
Y2VpdmUnKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgbWFpbGJveCA9IHByb2Nlc3MubWFp
bGJveDsKKyAgICAgICAgICAgIGlmIChtYWlsYm94Lmxlbmd0aCA9PT0gMCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cHJvY2Vzcy5yb290ID0gcHJvY2Vzcy5yb290LmNhbGxiYWNrKG1haWxib3guc2hpZnQoKSk7Cisg
ICAgICAgICAgICArK251bVN0ZXBzOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY3Rvcik7CisgICAgfQorCisgICAgaWYgKG51bVN0
ZXBzIDwgTUFYX1NURVBTKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bVN0ZXBzICsgMTsKKyAg
ICB9CisgICAgZW5xdWV1ZShwcm9jZXNzKTsKKworICAgIHJldHVybiBudW1TdGVwczsKK30KKwor
CisvLyBXT1JLIFFVRVVFCisKK3ZhciB3b3JraW5nID0gZmFsc2U7Cit2YXIgd29ya1F1ZXVlID0g
W107CisKK2Z1bmN0aW9uIGVucXVldWUocHJvY2VzcykKK3sKKyAgICB3b3JrUXVldWUucHVzaChw
cm9jZXNzKTsKKworICAgIGlmICghd29ya2luZykKKyAgICB7CisgICAgICAgIHNldFRpbWVvdXQo
d29yaywgMCk7CisgICAgICAgIHdvcmtpbmcgPSB0cnVlOworICAgIH0KK30KKworZnVuY3Rpb24g
d29yaygpCit7CisgICAgdmFyIG51bVN0ZXBzID0gMDsKKyAgICB2YXIgcHJvY2VzczsKKyAgICB3
aGlsZSAobnVtU3RlcHMgPCBNQVhfU1RFUFMgJiYgKHByb2Nlc3MgPSB3b3JrUXVldWUuc2hpZnQo
KSkpCisgICAgeworICAgICAgICBpZiAocHJvY2Vzcy5yb290KQorICAgICAgICB7CisgICAgICAg
ICAgICBudW1TdGVwcyA9IHN0ZXAobnVtU3RlcHMsIHByb2Nlc3MpOworICAgICAgICB9CisgICAg
fQorICAgIGlmICghcHJvY2VzcykKKyAgICB7CisgICAgICAgIHdvcmtpbmcgPSBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzZXRUaW1lb3V0KHdvcmssIDApOworfQorCisKK3Jl
dHVybiB7CisgICAgc3VjY2VlZDogc3VjY2VlZCwKKyAgICBmYWlsOiBmYWlsLAorICAgIG5hdGl2
ZUJpbmRpbmc6IG5hdGl2ZUJpbmRpbmcsCisgICAgYW5kVGhlbjogRjIoYW5kVGhlbiksCisgICAg
b25FcnJvcjogRjIob25FcnJvciksCisgICAgcmVjZWl2ZTogcmVjZWl2ZSwKKworICAgIHNwYXdu
OiBzcGF3biwKKyAgICBraWxsOiBraWxsLAorICAgIHNsZWVwOiBzbGVlcCwKKyAgICBzZW5kOiBG
MihzZW5kKSwKKworICAgIHJhd1NwYXduOiByYXdTcGF3biwKKyAgICByYXdTZW5kOiByYXdTZW5k
Cit9OworCit9KCk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkUGxhdGZvcm0kaGFjayA9IF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIuc3VjY2VlZDsKK3ZhciBfZWxtX2xhbmckY29yZSRQbGF0
Zm9ybSRzZW5kVG9TZWxmID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1BsYXRmb3JtLnNlbmRUb1Nl
bGY7Cit2YXIgX2VsbV9sYW5nJGNvcmUkUGxhdGZvcm0kc2VuZFRvQXBwID0gX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX1BsYXRmb3JtLnNlbmRUb0FwcDsKK3ZhciBfZWxtX2xhbmckY29yZSRQbGF0Zm9y
bSRQcm9ncmFtID0ge2N0b3I6ICdQcm9ncmFtJ307Cit2YXIgX2VsbV9sYW5nJGNvcmUkUGxhdGZv
cm0kVGFzayA9IHtjdG9yOiAnVGFzayd9OwordmFyIF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtJFBy
b2Nlc3NJZCA9IHtjdG9yOiAnUHJvY2Vzc0lkJ307Cit2YXIgX2VsbV9sYW5nJGNvcmUkUGxhdGZv
cm0kUm91dGVyID0ge2N0b3I6ICdSb3V0ZXInfTsKKwordmFyIF9lbG1fbGFuZyRjb3JlJFBsYXRm
b3JtX0NtZCRiYXRjaCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9QbGF0Zm9ybS5iYXRjaDsKK3Zh
ciBfZWxtX2xhbmckY29yZSRQbGF0Zm9ybV9DbWQkbm9uZSA9IF9lbG1fbGFuZyRjb3JlJFBsYXRm
b3JtX0NtZCRiYXRjaCgKKyAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXko
CisgICAgICAgIFtdKSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkUGxhdGZvcm1fQ21kX29wcyA9IF9l
bG1fbGFuZyRjb3JlJFBsYXRmb3JtX0NtZF9vcHMgfHwge307CitfZWxtX2xhbmckY29yZSRQbGF0
Zm9ybV9DbWRfb3BzWychJ10gPSBGMigKKyAgICBmdW5jdGlvbiAobW9kZWwsIGNvbW1hbmRzKSB7
CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMicsCisgICAgICAg
ICAgICBfMDogbW9kZWwsCisgICAgICAgICAgICBfMTogX2VsbV9sYW5nJGNvcmUkUGxhdGZvcm1f
Q21kJGJhdGNoKGNvbW1hbmRzKQorICAgICAgICB9OworICAgIH0pOwordmFyIF9lbG1fbGFuZyRj
b3JlJFBsYXRmb3JtX0NtZCRtYXAgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfUGxhdGZvcm0ubWFw
OwordmFyIF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtX0NtZCRDbWQgPSB7Y3RvcjogJ0NtZCd9Owor
Cit2YXIgX2VsbV9sYW5nJGNvcmUkUGxhdGZvcm1fU3ViJGJhdGNoID0gX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX1BsYXRmb3JtLmJhdGNoOwordmFyIF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtX1N1YiRu
b25lID0gX2VsbV9sYW5nJGNvcmUkUGxhdGZvcm1fU3ViJGJhdGNoKAorICAgIF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgW10pKTsKK3ZhciBfZWxtX2xhbmck
Y29yZSRQbGF0Zm9ybV9TdWIkbWFwID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1BsYXRmb3JtLm1h
cDsKK3ZhciBfZWxtX2xhbmckY29yZSRQbGF0Zm9ybV9TdWIkU3ViID0ge2N0b3I6ICdTdWInfTsK
KworLy9pbXBvcnQgTWF5YmUsIE5hdGl2ZS5MaXN0LCBOYXRpdmUuVXRpbHMsIFJlc3VsdCAvLwor
Cit2YXIgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZyA9IGZ1bmN0aW9uKCkgeworCitmdW5j
dGlvbiBpc0VtcHR5KHN0cikKK3sKKyAgICByZXR1cm4gc3RyLmxlbmd0aCA9PT0gMDsKK30KK2Z1
bmN0aW9uIGNvbnMoY2hyLCBzdHIpCit7CisgICAgcmV0dXJuIGNociArIHN0cjsKK30KK2Z1bmN0
aW9uIHVuY29ucyhzdHIpCit7CisgICAgdmFyIGhkID0gc3RyWzBdOworICAgIGlmIChoZCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0KF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9VdGlscy5UdXBsZTIoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNociho
ZCksIHN0ci5zbGljZSgxKSkpOworICAgIH0KKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTWF5
YmUkTm90aGluZzsKK30KK2Z1bmN0aW9uIGFwcGVuZChhLCBiKQoreworICAgIHJldHVybiBhICsg
YjsKK30KK2Z1bmN0aW9uIGNvbmNhdChzdHJzKQoreworICAgIHJldHVybiBfZWxtX2xhbmckY29y
ZSROYXRpdmVfTGlzdC50b0FycmF5KHN0cnMpLmpvaW4oJycpOworfQorZnVuY3Rpb24gbGVuZ3Ro
KHN0cikKK3sKKyAgICByZXR1cm4gc3RyLmxlbmd0aDsKK30KK2Z1bmN0aW9uIG1hcChmLCBzdHIp
Cit7CisgICAgdmFyIG91dCA9IHN0ci5zcGxpdCgnJyk7CisgICAgZm9yICh2YXIgaSA9IG91dC5s
ZW5ndGg7IGktLTsgKQorICAgIHsKKyAgICAgICAgb3V0W2ldID0gZihfZWxtX2xhbmckY29yZSRO
YXRpdmVfVXRpbHMuY2hyKG91dFtpXSkpOworICAgIH0KKyAgICByZXR1cm4gb3V0LmpvaW4oJycp
OworfQorZnVuY3Rpb24gZmlsdGVyKHByZWQsIHN0cikKK3sKKyAgICByZXR1cm4gc3RyLnNwbGl0
KCcnKS5tYXAoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNocikuZmlsdGVyKHByZWQpLmpv
aW4oJycpOworfQorZnVuY3Rpb24gcmV2ZXJzZShzdHIpCit7CisgICAgcmV0dXJuIHN0ci5zcGxp
dCgnJykucmV2ZXJzZSgpLmpvaW4oJycpOworfQorZnVuY3Rpb24gZm9sZGwoZiwgYiwgc3RyKQor
eworICAgIHZhciBsZW4gPSBzdHIubGVuZ3RoOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVu
OyArK2kpCisgICAgeworICAgICAgICBiID0gQTIoZiwgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0
aWxzLmNocihzdHJbaV0pLCBiKTsKKyAgICB9CisgICAgcmV0dXJuIGI7Cit9CitmdW5jdGlvbiBm
b2xkcihmLCBiLCBzdHIpCit7CisgICAgZm9yICh2YXIgaSA9IHN0ci5sZW5ndGg7IGktLTsgKQor
ICAgIHsKKyAgICAgICAgYiA9IEEyKGYsIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jaHIo
c3RyW2ldKSwgYik7CisgICAgfQorICAgIHJldHVybiBiOworfQorZnVuY3Rpb24gc3BsaXQoc2Vw
LCBzdHIpCit7CisgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJh
eShzdHIuc3BsaXQoc2VwKSk7Cit9CitmdW5jdGlvbiBqb2luKHNlcCwgc3RycykKK3sKKyAgICBy
ZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QudG9BcnJheShzdHJzKS5qb2luKHNlcCk7
Cit9CitmdW5jdGlvbiByZXBlYXQobiwgc3RyKQoreworICAgIHZhciByZXN1bHQgPSAnJzsKKyAg
ICB3aGlsZSAobiA+IDApCisgICAgeworICAgICAgICBpZiAobiAmIDEpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJlc3VsdCArPSBzdHI7CisgICAgICAgIH0KKyAgICAgICAgbiA+Pj0gMSwgc3Ry
ICs9IHN0cjsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KK2Z1bmN0aW9uIHNsaWNlKHN0
YXJ0LCBlbmQsIHN0cikKK3sKKyAgICByZXR1cm4gc3RyLnNsaWNlKHN0YXJ0LCBlbmQpOworfQor
ZnVuY3Rpb24gbGVmdChuLCBzdHIpCit7CisgICAgcmV0dXJuIG4gPCAxID8gJycgOiBzdHIuc2xp
Y2UoMCwgbik7Cit9CitmdW5jdGlvbiByaWdodChuLCBzdHIpCit7CisgICAgcmV0dXJuIG4gPCAx
ID8gJycgOiBzdHIuc2xpY2UoLW4pOworfQorZnVuY3Rpb24gZHJvcExlZnQobiwgc3RyKQorewor
ICAgIHJldHVybiBuIDwgMSA/IHN0ciA6IHN0ci5zbGljZShuKTsKK30KK2Z1bmN0aW9uIGRyb3BS
aWdodChuLCBzdHIpCit7CisgICAgcmV0dXJuIG4gPCAxID8gc3RyIDogc3RyLnNsaWNlKDAsIC1u
KTsKK30KK2Z1bmN0aW9uIHBhZChuLCBjaHIsIHN0cikKK3sKKyAgICB2YXIgaGFsZiA9IChuIC0g
c3RyLmxlbmd0aCkgLyAyOworICAgIHJldHVybiByZXBlYXQoTWF0aC5jZWlsKGhhbGYpLCBjaHIp
ICsgc3RyICsgcmVwZWF0KGhhbGYgfCAwLCBjaHIpOworfQorZnVuY3Rpb24gcGFkUmlnaHQobiwg
Y2hyLCBzdHIpCit7CisgICAgcmV0dXJuIHN0ciArIHJlcGVhdChuIC0gc3RyLmxlbmd0aCwgY2hy
KTsKK30KK2Z1bmN0aW9uIHBhZExlZnQobiwgY2hyLCBzdHIpCit7CisgICAgcmV0dXJuIHJlcGVh
dChuIC0gc3RyLmxlbmd0aCwgY2hyKSArIHN0cjsKK30KKworZnVuY3Rpb24gdHJpbShzdHIpCit7
CisgICAgcmV0dXJuIHN0ci50cmltKCk7Cit9CitmdW5jdGlvbiB0cmltTGVmdChzdHIpCit7Cisg
ICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eXHMrLywgJycpOworfQorZnVuY3Rpb24gdHJpbVJpZ2h0
KHN0cikKK3sKKyAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1xzKyQvLCAnJyk7Cit9CisKK2Z1bmN0
aW9uIHdvcmRzKHN0cikKK3sKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3Qu
ZnJvbUFycmF5KHN0ci50cmltKCkuc3BsaXQoL1xzKy9nKSk7Cit9CitmdW5jdGlvbiBsaW5lcyhz
dHIpCit7CisgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheShz
dHIuc3BsaXQoL1xyXG58XHJ8XG4vZykpOworfQorCitmdW5jdGlvbiB0b1VwcGVyKHN0cikKK3sK
KyAgICByZXR1cm4gc3RyLnRvVXBwZXJDYXNlKCk7Cit9CitmdW5jdGlvbiB0b0xvd2VyKHN0cikK
K3sKKyAgICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCk7Cit9CisKK2Z1bmN0aW9uIGFueShwcmVk
LCBzdHIpCit7CisgICAgZm9yICh2YXIgaSA9IHN0ci5sZW5ndGg7IGktLTsgKQorICAgIHsKKyAg
ICAgICAgaWYgKHByZWQoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNocihzdHJbaV0pKSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorZnVuY3Rpb24gYWxsKHByZWQsIHN0cikKK3sKKyAgICBmb3Ig
KHZhciBpID0gc3RyLmxlbmd0aDsgaS0tOyApCisgICAgeworICAgICAgICBpZiAoIXByZWQoX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNocihzdHJbaV0pKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCitmdW5jdGlvbiBjb250YWlucyhzdWIsIHN0cikKK3sKKyAgICByZXR1cm4gc3RyLmluZGV4
T2Yoc3ViKSA+IC0xOworfQorZnVuY3Rpb24gc3RhcnRzV2l0aChzdWIsIHN0cikKK3sKKyAgICBy
ZXR1cm4gc3RyLmluZGV4T2Yoc3ViKSA9PT0gMDsKK30KK2Z1bmN0aW9uIGVuZHNXaXRoKHN1Yiwg
c3RyKQoreworICAgIHJldHVybiBzdHIubGVuZ3RoID49IHN1Yi5sZW5ndGggJiYKKyAgICAgICAg
c3RyLmxhc3RJbmRleE9mKHN1YikgPT09IHN0ci5sZW5ndGggLSBzdWIubGVuZ3RoOworfQorZnVu
Y3Rpb24gaW5kZXhlcyhzdWIsIHN0cikKK3sKKyAgICB2YXIgc3ViTGVuID0gc3ViLmxlbmd0aDsK
KyAgICAKKyAgICBpZiAoc3ViTGVuIDwgMSkKKyAgICB7CisgICAgICAgIHJldHVybiBfZWxtX2xh
bmckY29yZSROYXRpdmVfTGlzdC5OaWw7CisgICAgfQorCisgICAgdmFyIGkgPSAwOworICAgIHZh
ciBpcyA9IFtdOworCisgICAgd2hpbGUgKChpID0gc3RyLmluZGV4T2Yoc3ViLCBpKSkgPiAtMSkK
KyAgICB7CisgICAgICAgIGlzLnB1c2goaSk7CisgICAgICAgIGkgPSBpICsgc3ViTGVuOworICAg
IH0gICAKKyAgICAKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFy
cmF5KGlzKTsKK30KKworZnVuY3Rpb24gdG9JbnQocykKK3sKKyAgICB2YXIgbGVuID0gcy5sZW5n
dGg7CisgICAgaWYgKGxlbiA9PT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmck
Y29yZSRSZXN1bHQkRXJyKCJjb3VsZCBub3QgY29udmVydCBzdHJpbmcgJyIgKyBzICsgIicgdG8g
YW4gSW50IiApOworICAgIH0KKyAgICB2YXIgc3RhcnQgPSAwOworICAgIGlmIChzWzBdID09PSAn
LScpCisgICAgeworICAgICAgICBpZiAobGVuID09PSAxKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JEVycigiY291bGQgbm90IGNvbnZlcnQgc3Ry
aW5nICciICsgcyArICInIHRvIGFuIEludCIgKTsKKyAgICAgICAgfQorICAgICAgICBzdGFydCA9
IDE7CisgICAgfQorICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGxlbjsgKytpKQorICAgIHsK
KyAgICAgICAgdmFyIGMgPSBzW2ldOworICAgICAgICBpZiAoYyA8ICcwJyB8fCAnOScgPCBjKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JEVycigi
Y291bGQgbm90IGNvbnZlcnQgc3RyaW5nICciICsgcyArICInIHRvIGFuIEludCIgKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JE9rKHBhcnNlSW50
KHMsIDEwKSk7Cit9CisKK2Z1bmN0aW9uIHRvRmxvYXQocykKK3sKKyAgICB2YXIgbGVuID0gcy5s
ZW5ndGg7CisgICAgaWYgKGxlbiA9PT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBfZWxtX2xh
bmckY29yZSRSZXN1bHQkRXJyKCJjb3VsZCBub3QgY29udmVydCBzdHJpbmcgJyIgKyBzICsgIicg
dG8gYSBGbG9hdCIgKTsKKyAgICB9CisgICAgdmFyIHN0YXJ0ID0gMDsKKyAgICBpZiAoc1swXSA9
PT0gJy0nKQorICAgIHsKKyAgICAgICAgaWYgKGxlbiA9PT0gMSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRFcnIoImNvdWxkIG5vdCBjb252ZXJ0
IHN0cmluZyAnIiArIHMgKyAiJyB0byBhIEZsb2F0IiApOworICAgICAgICB9CisgICAgICAgIHN0
YXJ0ID0gMTsKKyAgICB9CisgICAgdmFyIGRvdENvdW50ID0gMDsKKyAgICBmb3IgKHZhciBpID0g
c3RhcnQ7IGkgPCBsZW47ICsraSkKKyAgICB7CisgICAgICAgIHZhciBjID0gc1tpXTsKKyAgICAg
ICAgaWYgKCcwJyA8PSBjICYmIGMgPD0gJzknKQorICAgICAgICB7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYyA9PT0gJy4nKQorICAgICAgICB7CisgICAg
ICAgICAgICBkb3RDb3VudCArPSAxOworICAgICAgICAgICAgaWYgKGRvdENvdW50IDw9IDEpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRFcnIoImNvdWxk
IG5vdCBjb252ZXJ0IHN0cmluZyAnIiArIHMgKyAiJyB0byBhIEZsb2F0IiApOworICAgIH0KKyAg
ICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JE9rKHBhcnNlRmxvYXQocykpOworfQorCitm
dW5jdGlvbiB0b0xpc3Qoc3RyKQoreworICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVf
TGlzdC5mcm9tQXJyYXkoc3RyLnNwbGl0KCcnKS5tYXAoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0
aWxzLmNocikpOworfQorZnVuY3Rpb24gZnJvbUxpc3QoY2hhcnMpCit7CisgICAgcmV0dXJuIF9l
bG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LnRvQXJyYXkoY2hhcnMpLmpvaW4oJycpOworfQorCity
ZXR1cm4geworICAgIGlzRW1wdHk6IGlzRW1wdHksCisgICAgY29uczogRjIoY29ucyksCisgICAg
dW5jb25zOiB1bmNvbnMsCisgICAgYXBwZW5kOiBGMihhcHBlbmQpLAorICAgIGNvbmNhdDogY29u
Y2F0LAorICAgIGxlbmd0aDogbGVuZ3RoLAorICAgIG1hcDogRjIobWFwKSwKKyAgICBmaWx0ZXI6
IEYyKGZpbHRlciksCisgICAgcmV2ZXJzZTogcmV2ZXJzZSwKKyAgICBmb2xkbDogRjMoZm9sZGwp
LAorICAgIGZvbGRyOiBGMyhmb2xkciksCisKKyAgICBzcGxpdDogRjIoc3BsaXQpLAorICAgIGpv
aW46IEYyKGpvaW4pLAorICAgIHJlcGVhdDogRjIocmVwZWF0KSwKKworICAgIHNsaWNlOiBGMyhz
bGljZSksCisgICAgbGVmdDogRjIobGVmdCksCisgICAgcmlnaHQ6IEYyKHJpZ2h0KSwKKyAgICBk
cm9wTGVmdDogRjIoZHJvcExlZnQpLAorICAgIGRyb3BSaWdodDogRjIoZHJvcFJpZ2h0KSwKKwor
ICAgIHBhZDogRjMocGFkKSwKKyAgICBwYWRMZWZ0OiBGMyhwYWRMZWZ0KSwKKyAgICBwYWRSaWdo
dDogRjMocGFkUmlnaHQpLAorCisgICAgdHJpbTogdHJpbSwKKyAgICB0cmltTGVmdDogdHJpbUxl
ZnQsCisgICAgdHJpbVJpZ2h0OiB0cmltUmlnaHQsCisKKyAgICB3b3Jkczogd29yZHMsCisgICAg
bGluZXM6IGxpbmVzLAorCisgICAgdG9VcHBlcjogdG9VcHBlciwKKyAgICB0b0xvd2VyOiB0b0xv
d2VyLAorCisgICAgYW55OiBGMihhbnkpLAorICAgIGFsbDogRjIoYWxsKSwKKworICAgIGNvbnRh
aW5zOiBGMihjb250YWlucyksCisgICAgc3RhcnRzV2l0aDogRjIoc3RhcnRzV2l0aCksCisgICAg
ZW5kc1dpdGg6IEYyKGVuZHNXaXRoKSwKKyAgICBpbmRleGVzOiBGMihpbmRleGVzKSwKKworICAg
IHRvSW50OiB0b0ludCwKKyAgICB0b0Zsb2F0OiB0b0Zsb2F0LAorICAgIHRvTGlzdDogdG9MaXN0
LAorICAgIGZyb21MaXN0OiBmcm9tTGlzdAorfTsKKworfSgpOworCisvL2ltcG9ydCBOYXRpdmUu
VXRpbHMgLy8KKwordmFyIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9DaGFyID0gZnVuY3Rpb24oKSB7
CisKK3JldHVybiB7CisgICAgZnJvbUNvZGU6IGZ1bmN0aW9uKGMpIHsgcmV0dXJuIF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9VdGlscy5jaHIoU3RyaW5nLmZyb21DaGFyQ29kZShjKSk7IH0sCisgICAg
dG9Db2RlOiBmdW5jdGlvbihjKSB7IHJldHVybiBjLmNoYXJDb2RlQXQoMCk7IH0sCisgICAgdG9V
cHBlcjogZnVuY3Rpb24oYykgeyByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNo
cihjLnRvVXBwZXJDYXNlKCkpOyB9LAorICAgIHRvTG93ZXI6IGZ1bmN0aW9uKGMpIHsgcmV0dXJu
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jaHIoYy50b0xvd2VyQ2FzZSgpKTsgfSwKKyAg
ICB0b0xvY2FsZVVwcGVyOiBmdW5jdGlvbihjKSB7IHJldHVybiBfZWxtX2xhbmckY29yZSROYXRp
dmVfVXRpbHMuY2hyKGMudG9Mb2NhbGVVcHBlckNhc2UoKSk7IH0sCisgICAgdG9Mb2NhbGVMb3dl
cjogZnVuY3Rpb24oYykgeyByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNocihj
LnRvTG9jYWxlTG93ZXJDYXNlKCkpOyB9Cit9OworCit9KCk7Cit2YXIgX2VsbV9sYW5nJGNvcmUk
Q2hhciRmcm9tQ29kZSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9DaGFyLmZyb21Db2RlOwordmFy
IF9lbG1fbGFuZyRjb3JlJENoYXIkdG9Db2RlID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0NoYXIu
dG9Db2RlOwordmFyIF9lbG1fbGFuZyRjb3JlJENoYXIkdG9Mb2NhbGVMb3dlciA9IF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9DaGFyLnRvTG9jYWxlTG93ZXI7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQ2hh
ciR0b0xvY2FsZVVwcGVyID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0NoYXIudG9Mb2NhbGVVcHBl
cjsKK3ZhciBfZWxtX2xhbmckY29yZSRDaGFyJHRvTG93ZXIgPSBfZWxtX2xhbmckY29yZSROYXRp
dmVfQ2hhci50b0xvd2VyOwordmFyIF9lbG1fbGFuZyRjb3JlJENoYXIkdG9VcHBlciA9IF9lbG1f
bGFuZyRjb3JlJE5hdGl2ZV9DaGFyLnRvVXBwZXI7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQ2hhciRp
c0JldHdlZW4gPSBGMygKKyAgICBmdW5jdGlvbiAobG93LCBoaWdoLCAkY2hhcikgeworICAgICAg
ICB2YXIgY29kZSA9IF9lbG1fbGFuZyRjb3JlJENoYXIkdG9Db2RlKCRjaGFyKTsKKyAgICAgICAg
cmV0dXJuIChfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY21wKAorICAgICAgICAgICAgY29k
ZSwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJENoYXIkdG9Db2RlKGxvdykpID4gLTEpICYm
IChfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY21wKAorICAgICAgICAgICAgY29kZSwKKyAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJENoYXIkdG9Db2RlKGhpZ2gpKSA8IDEpOworICAgIH0p
OwordmFyIF9lbG1fbGFuZyRjb3JlJENoYXIkaXNVcHBlciA9IEEyKAorICAgIF9lbG1fbGFuZyRj
b3JlJENoYXIkaXNCZXR3ZWVuLAorICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jaHIo
J0EnKSwKKyAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY2hyKCdaJykpOwordmFyIF9l
bG1fbGFuZyRjb3JlJENoYXIkaXNMb3dlciA9IEEyKAorICAgIF9lbG1fbGFuZyRjb3JlJENoYXIk
aXNCZXR3ZWVuLAorICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jaHIoJ2EnKSwKKyAg
ICBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY2hyKCd6JykpOwordmFyIF9lbG1fbGFuZyRj
b3JlJENoYXIkaXNEaWdpdCA9IEEyKAorICAgIF9lbG1fbGFuZyRjb3JlJENoYXIkaXNCZXR3ZWVu
LAorICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jaHIoJzAnKSwKKyAgICBfZWxtX2xh
bmckY29yZSROYXRpdmVfVXRpbHMuY2hyKCc5JykpOwordmFyIF9lbG1fbGFuZyRjb3JlJENoYXIk
aXNPY3REaWdpdCA9IEEyKAorICAgIF9lbG1fbGFuZyRjb3JlJENoYXIkaXNCZXR3ZWVuLAorICAg
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jaHIoJzAnKSwKKyAgICBfZWxtX2xhbmckY29y
ZSROYXRpdmVfVXRpbHMuY2hyKCc3JykpOwordmFyIF9lbG1fbGFuZyRjb3JlJENoYXIkaXNIZXhE
aWdpdCA9IGZ1bmN0aW9uICgkY2hhcikgeworICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRDaGFy
JGlzRGlnaXQoJGNoYXIpIHx8IChBMygKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkQ2hhciRpc0Jl
dHdlZW4sCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jaHIoJ2EnKSwKKyAg
ICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNocignZicpLAorICAgICAgICAkY2hh
cikgfHwgQTMoCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJENoYXIkaXNCZXR3ZWVuLAorICAgICAg
ICBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY2hyKCdBJyksCisgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9VdGlscy5jaHIoJ0YnKSwKKyAgICAgICAgJGNoYXIpKTsKK307CisKK3Zh
ciBfZWxtX2xhbmckY29yZSRTdHJpbmckZnJvbUxpc3QgPSBfZWxtX2xhbmckY29yZSROYXRpdmVf
U3RyaW5nLmZyb21MaXN0OwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyR0b0xpc3QgPSBfZWxt
X2xhbmckY29yZSROYXRpdmVfU3RyaW5nLnRvTGlzdDsKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJp
bmckdG9GbG9hdCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcudG9GbG9hdDsKK3ZhciBf
ZWxtX2xhbmckY29yZSRTdHJpbmckdG9JbnQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5n
LnRvSW50OwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRpbmRpY2VzID0gX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX1N0cmluZy5pbmRleGVzOwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRpbmRl
eGVzID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5pbmRleGVzOwordmFyIF9lbG1fbGFu
ZyRjb3JlJFN0cmluZyRlbmRzV2l0aCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcuZW5k
c1dpdGg7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJHN0YXJ0c1dpdGggPSBfZWxtX2xhbmck
Y29yZSROYXRpdmVfU3RyaW5nLnN0YXJ0c1dpdGg7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5n
JGNvbnRhaW5zID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5jb250YWluczsKK3ZhciBf
ZWxtX2xhbmckY29yZSRTdHJpbmckYWxsID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5h
bGw7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGFueSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9TdHJpbmcuYW55OwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyR0b0xvd2VyID0gX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX1N0cmluZy50b0xvd2VyOwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmlu
ZyR0b1VwcGVyID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy50b1VwcGVyOwordmFyIF9l
bG1fbGFuZyRjb3JlJFN0cmluZyRsaW5lcyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcu
bGluZXM7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJHdvcmRzID0gX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX1N0cmluZy53b3JkczsKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJpbmckdHJpbVJpZ2h0
ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy50cmltUmlnaHQ7Cit2YXIgX2VsbV9sYW5n
JGNvcmUkU3RyaW5nJHRyaW1MZWZ0ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy50cmlt
TGVmdDsKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJpbmckdHJpbSA9IF9lbG1fbGFuZyRjb3JlJE5h
dGl2ZV9TdHJpbmcudHJpbTsKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJpbmckcGFkUmlnaHQgPSBf
ZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5nLnBhZFJpZ2h0OwordmFyIF9lbG1fbGFuZyRjb3Jl
JFN0cmluZyRwYWRMZWZ0ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5wYWRMZWZ0Owor
dmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRwYWQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3Ry
aW5nLnBhZDsKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJpbmckZHJvcFJpZ2h0ID0gX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX1N0cmluZy5kcm9wUmlnaHQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5n
JGRyb3BMZWZ0ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5kcm9wTGVmdDsKK3ZhciBf
ZWxtX2xhbmckY29yZSRTdHJpbmckcmlnaHQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5n
LnJpZ2h0OwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRsZWZ0ID0gX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX1N0cmluZy5sZWZ0OwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRzbGljZSA9IF9l
bG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcuc2xpY2U7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3Ry
aW5nJHJlcGVhdCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcucmVwZWF0OwordmFyIF9l
bG1fbGFuZyRjb3JlJFN0cmluZyRqb2luID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5q
b2luOwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRzcGxpdCA9IF9lbG1fbGFuZyRjb3JlJE5h
dGl2ZV9TdHJpbmcuc3BsaXQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGZvbGRyID0gX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5mb2xkcjsKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJp
bmckZm9sZGwgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5nLmZvbGRsOwordmFyIF9lbG1f
bGFuZyRjb3JlJFN0cmluZyRyZXZlcnNlID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5y
ZXZlcnNlOwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRmaWx0ZXIgPSBfZWxtX2xhbmckY29y
ZSROYXRpdmVfU3RyaW5nLmZpbHRlcjsKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJpbmckbWFwID0g
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5tYXA7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3Ry
aW5nJGxlbmd0aCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcubGVuZ3RoOwordmFyIF9l
bG1fbGFuZyRjb3JlJFN0cmluZyRjb25jYXQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5n
LmNvbmNhdDsKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJpbmckYXBwZW5kID0gX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX1N0cmluZy5hcHBlbmQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJHVuY29u
cyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcudW5jb25zOwordmFyIF9lbG1fbGFuZyRj
b3JlJFN0cmluZyRjb25zID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5jb25zOwordmFy
IF9lbG1fbGFuZyRjb3JlJFN0cmluZyRmcm9tQ2hhciA9IGZ1bmN0aW9uICgkY2hhcikgeworICAg
IHJldHVybiBBMihfZWxtX2xhbmckY29yZSRTdHJpbmckY29ucywgJGNoYXIsICcnKTsKK307Cit2
YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGlzRW1wdHkgPSBfZWxtX2xhbmckY29yZSROYXRpdmVf
U3RyaW5nLmlzRW1wdHk7CisKKy8vaW1wb3J0IE1heWJlLCBOYXRpdmUuTGlzdCAvLworCit2YXIg
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX1JlZ2V4ID0gZnVuY3Rpb24oKSB7CisKK2Z1bmN0aW9uIGVz
Y2FwZShzdHIpCit7CisgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bLVwvXFxeJCorPy4oKXxbXF17
fV0vZywgJ1xcJCYnKTsKK30KK2Z1bmN0aW9uIGNhc2VJbnNlbnNpdGl2ZShyZSkKK3sKKyAgICBy
ZXR1cm4gbmV3IFJlZ0V4cChyZS5zb3VyY2UsICdnaScpOworfQorZnVuY3Rpb24gcmVnZXgocmF3
KQoreworICAgIHJldHVybiBuZXcgUmVnRXhwKHJhdywgJ2cnKTsKK30KKworZnVuY3Rpb24gY29u
dGFpbnMocmUsIHN0cmluZykKK3sKKyAgICByZXR1cm4gc3RyaW5nLm1hdGNoKHJlKSAhPT0gbnVs
bDsKK30KKworZnVuY3Rpb24gZmluZChuLCByZSwgc3RyKQoreworICAgIG4gPSBuLmN0b3IgPT09
ICdBbGwnID8gSW5maW5pdHkgOiBuLl8wOworICAgIHZhciBvdXQgPSBbXTsKKyAgICB2YXIgbnVt
YmVyID0gMDsKKyAgICB2YXIgc3RyaW5nID0gc3RyOworICAgIHZhciBsYXN0SW5kZXggPSByZS5s
YXN0SW5kZXg7CisgICAgdmFyIHByZXZMYXN0SW5kZXggPSAtMTsKKyAgICB2YXIgcmVzdWx0Owor
ICAgIHdoaWxlIChudW1iZXIrKyA8IG4gJiYgKHJlc3VsdCA9IHJlLmV4ZWMoc3RyaW5nKSkpCisg
ICAgeworICAgICAgICBpZiAocHJldkxhc3RJbmRleCA9PT0gcmUubGFzdEluZGV4KSBicmVhazsK
KyAgICAgICAgdmFyIGkgPSByZXN1bHQubGVuZ3RoIC0gMTsKKyAgICAgICAgdmFyIHN1YnMgPSBu
ZXcgQXJyYXkoaSk7CisgICAgICAgIHdoaWxlIChpID4gMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgdmFyIHN1Ym1hdGNoID0gcmVzdWx0W2ldOworICAgICAgICAgICAgc3Vic1stLWldID0gc3Vi
bWF0Y2ggPT09IHVuZGVmaW5lZAorICAgICAgICAgICAgICAgID8gX2VsbV9sYW5nJGNvcmUkTWF5
YmUkTm90aGluZworICAgICAgICAgICAgICAgIDogX2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVzdChz
dWJtYXRjaCk7CisgICAgICAgIH0KKyAgICAgICAgb3V0LnB1c2goeworICAgICAgICAgICAgbWF0
Y2g6IHJlc3VsdFswXSwKKyAgICAgICAgICAgIHN1Ym1hdGNoZXM6IF9lbG1fbGFuZyRjb3JlJE5h
dGl2ZV9MaXN0LmZyb21BcnJheShzdWJzKSwKKyAgICAgICAgICAgIGluZGV4OiByZXN1bHQuaW5k
ZXgsCisgICAgICAgICAgICBudW1iZXI6IG51bWJlcgorICAgICAgICB9KTsKKyAgICAgICAgcHJl
dkxhc3RJbmRleCA9IHJlLmxhc3RJbmRleDsKKyAgICB9CisgICAgcmUubGFzdEluZGV4ID0gbGFz
dEluZGV4OworICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXko
b3V0KTsKK30KKworZnVuY3Rpb24gcmVwbGFjZShuLCByZSwgcmVwbGFjZXIsIHN0cmluZykKK3sK
KyAgICBuID0gbi5jdG9yID09PSAnQWxsJyA/IEluZmluaXR5IDogbi5fMDsKKyAgICB2YXIgY291
bnQgPSAwOworICAgIGZ1bmN0aW9uIGpzUmVwbGFjZXIobWF0Y2gpCisgICAgeworICAgICAgICBp
ZiAoY291bnQrKyA+PSBuKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2g7Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMzsKKyAgICAgICAg
dmFyIHN1Ym1hdGNoZXMgPSBuZXcgQXJyYXkoaSk7CisgICAgICAgIHdoaWxlIChpID4gMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgdmFyIHN1Ym1hdGNoID0gYXJndW1lbnRzW2ldOworICAgICAg
ICAgICAgc3VibWF0Y2hlc1stLWldID0gc3VibWF0Y2ggPT09IHVuZGVmaW5lZAorICAgICAgICAg
ICAgICAgID8gX2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90aGluZworICAgICAgICAgICAgICAgIDog
X2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVzdChzdWJtYXRjaCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHJlcGxhY2VyKHsKKyAgICAgICAgICAgIG1hdGNoOiBtYXRjaCwKKyAgICAgICAgICAg
IHN1Ym1hdGNoZXM6IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheShzdWJtYXRj
aGVzKSwKKyAgICAgICAgICAgIGluZGV4OiBhcmd1bWVudHNbaSAtIDFdLAorICAgICAgICAgICAg
bnVtYmVyOiBjb3VudAorICAgICAgICB9KTsKKyAgICB9CisgICAgcmV0dXJuIHN0cmluZy5yZXBs
YWNlKHJlLCBqc1JlcGxhY2VyKTsKK30KKworZnVuY3Rpb24gc3BsaXQobiwgcmUsIHN0cikKK3sK
KyAgICBuID0gbi5jdG9yID09PSAnQWxsJyA/IEluZmluaXR5IDogbi5fMDsKKyAgICBpZiAobiA9
PT0gSW5maW5pdHkpCisgICAgeworICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X0xpc3QuZnJvbUFycmF5KHN0ci5zcGxpdChyZSkpOworICAgIH0KKyAgICB2YXIgc3RyaW5nID0g
c3RyOworICAgIHZhciByZXN1bHQ7CisgICAgdmFyIG91dCA9IFtdOworICAgIHZhciBzdGFydCA9
IHJlLmxhc3RJbmRleDsKKyAgICB3aGlsZSAobi0tKQorICAgIHsKKyAgICAgICAgaWYgKCEocmVz
dWx0ID0gcmUuZXhlYyhzdHJpbmcpKSkgYnJlYWs7CisgICAgICAgIG91dC5wdXNoKHN0cmluZy5z
bGljZShzdGFydCwgcmVzdWx0LmluZGV4KSk7CisgICAgICAgIHN0YXJ0ID0gcmUubGFzdEluZGV4
OworICAgIH0KKyAgICBvdXQucHVzaChzdHJpbmcuc2xpY2Uoc3RhcnQpKTsKKyAgICByZXR1cm4g
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KG91dCk7Cit9CisKK3JldHVybiB7
CisgICAgcmVnZXg6IHJlZ2V4LAorICAgIGNhc2VJbnNlbnNpdGl2ZTogY2FzZUluc2Vuc2l0aXZl
LAorICAgIGVzY2FwZTogZXNjYXBlLAorCisgICAgY29udGFpbnM6IEYyKGNvbnRhaW5zKSwKKyAg
ICBmaW5kOiBGMyhmaW5kKSwKKyAgICByZXBsYWNlOiBGNChyZXBsYWNlKSwKKyAgICBzcGxpdDog
RjMoc3BsaXQpCit9OworCit9KCk7CisKK3ZhciBfZWxtX2xhbmckY29yZSRSZWdleCRzcGxpdCA9
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9SZWdleC5zcGxpdDsKK3ZhciBfZWxtX2xhbmckY29yZSRS
ZWdleCRyZXBsYWNlID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1JlZ2V4LnJlcGxhY2U7Cit2YXIg
X2VsbV9sYW5nJGNvcmUkUmVnZXgkZmluZCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9SZWdleC5m
aW5kOwordmFyIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JGNvbnRhaW5zID0gX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX1JlZ2V4LmNvbnRhaW5zOwordmFyIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JGNhc2VJbnNl
bnNpdGl2ZSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9SZWdleC5jYXNlSW5zZW5zaXRpdmU7Cit2
YXIgX2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVnZXggPSBfZWxtX2xhbmckY29yZSROYXRpdmVfUmVn
ZXgucmVnZXg7Cit2YXIgX2VsbV9sYW5nJGNvcmUkUmVnZXgkZXNjYXBlID0gX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX1JlZ2V4LmVzY2FwZTsKK3ZhciBfZWxtX2xhbmckY29yZSRSZWdleCRNYXRjaCA9
IEY0KAorICAgIGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7CisgICAgICAgIHJldHVybiB7bWF0Y2g6
IGEsIHN1Ym1hdGNoZXM6IGIsIGluZGV4OiBjLCBudW1iZXI6IGR9OworICAgIH0pOwordmFyIF9l
bG1fbGFuZyRjb3JlJFJlZ2V4JFJlZ2V4ID0ge2N0b3I6ICdSZWdleCd9OwordmFyIF9lbG1fbGFu
ZyRjb3JlJFJlZ2V4JEF0TW9zdCA9IGZ1bmN0aW9uIChhKSB7CisgICAgcmV0dXJuIHtjdG9yOiAn
QXRNb3N0JywgXzA6IGF9OworfTsKK3ZhciBfZWxtX2xhbmckY29yZSRSZWdleCRBbGwgPSB7Y3Rv
cjogJ0FsbCd9OworCit2YXIgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRy
YSRsZWZ0T2ZCYWNrID0gRjIoCisgICAgZnVuY3Rpb24gKHBhdHRlcm4sIHN0cmluZykgeworICAg
ICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRNYXliZSR3aXRoRGVm
YXVsdCwKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkTWF5YmUkbWFwLAorICAgICAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRj
b3JlJEJhc2ljcyRmbGlwLCBfZWxtX2xhbmckY29yZSRTdHJpbmckbGVmdCwgc3RyaW5nKSwKKyAg
ICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JGhlYWQoCisgICAgICAgICAgICAgICAg
ICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkcmV2ZXJzZSgKKyAgICAgICAgICAgICAgICAgICAgICAg
IEEyKF9lbG1fbGFuZyRjb3JlJFN0cmluZyRpbmRleGVzLCBwYXR0ZXJuLCBzdHJpbmcpKSkpKTsK
KyAgICB9KTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHJp
Z2h0T2ZCYWNrID0gRjIoCisgICAgZnVuY3Rpb24gKHBhdHRlcm4sIHN0cmluZykgeworICAgICAg
ICByZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRNYXliZSR3aXRoRGVmYXVs
dCwKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkTWF5YmUkbWFwLAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfcDApIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEzKAorICAgICAgICAgICAgICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkQmFzaWNzJGZsaXAsCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSRTdHJpbmckZHJvcExlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJp
bmcsCisgICAgICAgICAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBGMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHgsIHkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4ICsgeTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGxlbmd0aChwYXR0ZXJuKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfcDApKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAg
ICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkaGVhZCgKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9s
YW5nJGNvcmUkTGlzdCRyZXZlcnNlKAorICAgICAgICAgICAgICAgICAgICAgICAgQTIoX2VsbV9s
YW5nJGNvcmUkU3RyaW5nJGluZGV4ZXMsIHBhdHRlcm4sIHN0cmluZykpKSkpOworICAgIH0pOwor
dmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkbGVmdE9mID0gRjIo
CisgICAgZnVuY3Rpb24gKHBhdHRlcm4sIHN0cmluZykgeworICAgICAgICByZXR1cm4gQTIoCisg
ICAgICAgICAgICBfZWxtX2xhbmckY29yZSRTdHJpbmckam9pbiwKKyAgICAgICAgICAgICcnLAor
ICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRtYXAs
CisgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9wMSkgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRNYXliZSR3
aXRoRGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICcnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTWF5YmUkb25lT2YoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZnVuY3Rpb24gKF8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIF8uc3VibWF0Y2hlczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KF9wMSkp
KTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIEEzKAorICAgICAgICAgICAg
ICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRmaW5kLAorICAgICAgICAgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSRSZWdleCRBdE1vc3QoMSksCisgICAgICAgICAgICAgICAgICAgIF9lbG1f
bGFuZyRjb3JlJFJlZ2V4JHJlZ2V4KAorICAgICAgICAgICAgICAgICAgICAgICAgQTIoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXiguKj8pJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRlc2NhcGUocGF0dGVybikpKSwKKyAgICAg
ICAgICAgICAgICAgICAgc3RyaW5nKSkpOworICAgIH0pOwordmFyIF9lbG1fY29tbXVuaXR5JHN0
cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkcmlnaHRPZiA9IEYyKAorICAgIGZ1bmN0aW9uIChwYXR0
ZXJuLCBzdHJpbmcpIHsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkU3RyaW5nJGpvaW4sCisgICAgICAgICAgICAnJywKKyAgICAgICAgICAgIEEyKAorICAg
ICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkbWFwLAorICAgICAgICAgICAgICAgIGZ1
bmN0aW9uIChfcDIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTWF5YmUkd2l0aERlZmF1bHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRj
b3JlJE1heWJlJG9uZU9mKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChf
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfLnN1Ym1hdGNoZXM7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfShfcDIpKSk7CisgICAgICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgICAgICBBMygKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkUmVnZXgkZmluZCwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgk
QXRNb3N0KDEpLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZWdl
eCgKKyAgICAgICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJysrJ10sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkZXNjYXBlKHBhdHRlcm4pLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICcoLiopJCcpKSwKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5n
KSkpOworICAgIH0pOwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0
cmEkc3RyaXBUYWdzID0gZnVuY3Rpb24gKHN0cmluZykgeworICAgIHJldHVybiBBNCgKKyAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVwbGFjZSwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUk
UmVnZXgkQWxsLAorICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZWdleCgnPFxcLz9bXj5d
Kz4nKSwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGFsd2F5cygnJyksCisgICAgICAg
IHN0cmluZyk7Cit9OwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0
cmEkdG9TZW50ZW5jZUhlbHBlciA9IEYzKAorICAgIGZ1bmN0aW9uIChsYXN0UGFydCwgc2VudGVu
Y2UsIGxpc3QpIHsKKyAgICAgICAgdG9TZW50ZW5jZUhlbHBlcjoKKyAgICAgICAgd2hpbGUgKHRy
dWUpIHsKKyAgICAgICAgICAgIHZhciBfcDMgPSBsaXN0OworICAgICAgICAgICAgaWYgKF9wMy5j
dG9yID09PSAnW10nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbnRlbmNlOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoX3AzLl8xLmN0b3IgPT09ICdbXScp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbnRlbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUk
QmFzaWNzX29wc1snKysnXSwgbGFzdFBhcnQsIF9wMy5fMCkpOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBfdjEgPSBsYXN0UGFydCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIF92MiA9IEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9s
YW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbnRl
bmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29w
c1snKysnXSwgJywgJywgX3AzLl8wKSksCisgICAgICAgICAgICAgICAgICAgICAgICBfdjMgPSBf
cDMuXzE7CisgICAgICAgICAgICAgICAgICAgIGxhc3RQYXJ0ID0gX3YxOworICAgICAgICAgICAg
ICAgICAgICBzZW50ZW5jZSA9IF92MjsKKyAgICAgICAgICAgICAgICAgICAgbGlzdCA9IF92MzsK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWUgdG9TZW50ZW5jZUhlbHBlcjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2Nv
bW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHRvU2VudGVuY2VCYXNlQ2FzZSA9IGZ1
bmN0aW9uIChsaXN0KSB7CisgICAgdmFyIF9wNCA9IGxpc3Q7CisgICAgX3Y0XzI6CisgICAgZG8g
eworICAgICAgICBpZiAoX3A0LmN0b3IgPT09ICc6OicpIHsKKyAgICAgICAgICAgIGlmIChfcDQu
XzEuY3RvciA9PT0gJ1tdJykgeworICAgICAgICAgICAgICAgIHJldHVybiBfcDQuXzA7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChfcDQuXzEuXzEuY3RvciA9PT0g
J1tdJykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAg
ICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycrKyddLAorICAgICAgICAgICAgICAg
ICAgICAgICAgX3A0Ll8wLAorICAgICAgICAgICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNv
cmUkQmFzaWNzX29wc1snKysnXSwgJyBhbmQgJywgX3A0Ll8xLl8wKSk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3Y0XzI7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnJl
YWsgX3Y0XzI7CisgICAgICAgIH0KKyAgICB9IHdoaWxlKGZhbHNlKTsKKyAgICByZXR1cm4gJyc7
Cit9OwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkdG9TZW50
ZW5jZU94Zm9yZCA9IGZ1bmN0aW9uIChsaXN0KSB7CisgICAgdmFyIF9wNSA9IGxpc3Q7CisgICAg
aWYgKCgoX3A1LmN0b3IgPT09ICc6OicpICYmIChfcDUuXzEuY3RvciA9PT0gJzo6JykpICYmIChf
cDUuXzEuXzEuY3RvciA9PT0gJzo6JykpIHsKKyAgICAgICAgcmV0dXJuIEEzKAorICAgICAgICAg
ICAgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSR0b1NlbnRlbmNlSGVs
cGVyLAorICAgICAgICAgICAgJywgYW5kICcsCisgICAgICAgICAgICBBMigKKyAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycrKyddLAorICAgICAgICAgICAgICAgIF9w
NS5fMCwKKyAgICAgICAgICAgICAgICBBMihfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycrKydd
LCAnLCAnLCBfcDUuXzEuXzApKSwKKyAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJExpc3Rf
b3BzWyc6OiddLCBfcDUuXzEuXzEuXzAsIF9wNS5fMS5fMS5fMSkpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHJldHVybiBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHRv
U2VudGVuY2VCYXNlQ2FzZShsaXN0KTsKKyAgICB9Cit9OwordmFyIF9lbG1fY29tbXVuaXR5JHN0
cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkdG9TZW50ZW5jZSA9IGZ1bmN0aW9uIChsaXN0KSB7Cisg
ICAgdmFyIF9wNiA9IGxpc3Q7CisgICAgaWYgKCgoX3A2LmN0b3IgPT09ICc6OicpICYmIChfcDYu
XzEuY3RvciA9PT0gJzo6JykpICYmIChfcDYuXzEuXzEuY3RvciA9PT0gJzo6JykpIHsKKyAgICAg
ICAgcmV0dXJuIEEzKAorICAgICAgICAgICAgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0
cmluZ19FeHRyYSR0b1NlbnRlbmNlSGVscGVyLAorICAgICAgICAgICAgJyBhbmQgJywKKyAgICAg
ICAgICAgIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJysr
J10sCisgICAgICAgICAgICAgICAgX3A2Ll8wLAorICAgICAgICAgICAgICAgIEEyKF9lbG1fbGFu
ZyRjb3JlJEJhc2ljc19vcHNbJysrJ10sICcsICcsIF9wNi5fMS5fMCkpLAorICAgICAgICAgICAg
QTIoX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10sIF9wNi5fMS5fMS5fMCwgX3A2Ll8xLl8x
Ll8xKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIF9lbG1fY29tbXVuaXR5JHN0cmlu
Z19leHRyYSRTdHJpbmdfRXh0cmEkdG9TZW50ZW5jZUJhc2VDYXNlKGxpc3QpOworICAgIH0KK307
Cit2YXIgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRlbGxpcHNpc1dp
dGggPSBGMygKKyAgICBmdW5jdGlvbiAoaG93TG9uZywgYXBwZW5kLCBzdHJpbmcpIHsKKyAgICAg
ICAgcmV0dXJuIChfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY21wKAorICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkU3RyaW5nJGxlbmd0aChzdHJpbmcpLAorICAgICAgICAgICAgaG93TG9u
ZykgPCAxKSA/IHN0cmluZyA6IEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNz
X29wc1snKysnXSwKKyAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRj
b3JlJFN0cmluZyRsZWZ0LAorICAgICAgICAgICAgICAgIGhvd0xvbmcgLSBfZWxtX2xhbmckY29y
ZSRTdHJpbmckbGVuZ3RoKGFwcGVuZCksCisgICAgICAgICAgICAgICAgc3RyaW5nKSwKKyAgICAg
ICAgICAgIGFwcGVuZCk7CisgICAgfSk7Cit2YXIgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJh
JFN0cmluZ19FeHRyYSRlbGxpcHNpcyA9IEYyKAorICAgIGZ1bmN0aW9uIChob3dMb25nLCBzdHJp
bmcpIHsKKyAgICAgICAgcmV0dXJuIEEzKF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJp
bmdfRXh0cmEkZWxsaXBzaXNXaXRoLCBob3dMb25nLCAnLi4uJywgc3RyaW5nKTsKKyAgICB9KTsK
K3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJGNvdW50T2NjdXJy
ZW5jZXMgPSBGMigKKyAgICBmdW5jdGlvbiAobmVlZGxlLCBoYXlzdGFjaykgeworICAgICAgICBy
ZXR1cm4gKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5lcSgKKyAgICAgICAgICAgIF9lbG1f
bGFuZyRjb3JlJFN0cmluZyRsZW5ndGgobmVlZGxlKSwKKyAgICAgICAgICAgIDApIHx8IF9lbG1f
bGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5lcSgKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0
cmluZyRsZW5ndGgoaGF5c3RhY2spLAorICAgICAgICAgICAgMCkpID8gMCA6IF9lbG1fbGFuZyRj
b3JlJExpc3QkbGVuZ3RoKAorICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGlu
ZGV4ZXMsIG5lZWRsZSwgaGF5c3RhY2spKTsKKyAgICB9KTsKK3ZhciBfZWxtX2NvbW11bml0eSRz
dHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHVuaW5kZW50ID0gZnVuY3Rpb24gKG11bHRpbGluZVN0
aW5nKSB7CisgICAgdmFyIGlzTm90V2hpdGVzcGFjZSA9IGZ1bmN0aW9uICgkY2hhcikgeworICAg
ICAgICByZXR1cm4gKCFfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuZXEoCisgICAgICAgICAg
ICAkY2hhciwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jaHIoJyAn
KSkpICYmICghX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmVxKAorICAgICAgICAgICAgJGNo
YXIsCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY2hyKCdcdCcpKSk7
CisgICAgfTsKKyAgICB2YXIgY291bnRMZWFkaW5nV2hpdGVzcGFjZSA9IEYyKAorICAgICAgICBm
dW5jdGlvbiAoY291bnQsIGxpbmUpIHsKKyAgICAgICAgICAgIGNvdW50TGVhZGluZ1doaXRlc3Bh
Y2U6CisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIHZhciBfcDcg
PSBfZWxtX2xhbmckY29yZSRTdHJpbmckdW5jb25zKGxpbmUpOworICAgICAgICAgICAgICAgIGlm
IChfcDcuY3RvciA9PT0gJ05vdGhpbmcnKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBj
b3VudDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2YXIg
X3A5ID0gX3A3Ll8wLl8xOworICAgICAgICAgICAgICAgICAgICB2YXIgX3A4ID0gX3A3Ll8wLl8w
OworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9wOC52YWx1ZU9mKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJyAnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBfdjkgPSBjb3VudCArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92MTAg
PSBfcDk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSBfdjk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGluZSA9IF92MTA7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWUgY291bnRMZWFkaW5nV2hpdGVzcGFjZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgJ1x0JzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3YxMSA9
IGNvdW50ICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3YxMiA9IF9wOTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IF92MTE7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGluZSA9IF92MTI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWUgY291bnRMZWFkaW5nV2hpdGVzcGFjZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50OworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9KTsKKyAgICB2YXIgbGluZXMgPSBfZWxtX2xhbmckY29yZSRTdHJpbmckbGluZXMobXVs
dGlsaW5lU3RpbmcpOworICAgIHZhciBtaW5MZWFkID0gQTIoCisgICAgICAgIF9lbG1fbGFuZyRj
b3JlJE1heWJlJHdpdGhEZWZhdWx0LAorICAgICAgICAwLAorICAgICAgICBfZWxtX2xhbmckY29y
ZSRMaXN0JG1pbmltdW0oCisgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICBfZWxtX2xh
bmckY29yZSRMaXN0JG1hcCwKKyAgICAgICAgICAgICAgICBjb3VudExlYWRpbmdXaGl0ZXNwYWNl
KDApLAorICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmck
Y29yZSRMaXN0JGZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkU3Ry
aW5nJGFueShpc05vdFdoaXRlc3BhY2UpLAorICAgICAgICAgICAgICAgICAgICBsaW5lcykpKSk7
CisgICAgcmV0dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmckY29yZSRTdHJpbmckam9pbiwKKyAg
ICAgICAgJ1xuJywKKyAgICAgICAgQTIoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0
JG1hcCwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRkcm9wTGVmdChtaW5MZWFk
KSwKKyAgICAgICAgICAgIGxpbmVzKSk7Cit9OwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19l
eHRyYSRTdHJpbmdfRXh0cmEkZGFzaGVyaXplID0gZnVuY3Rpb24gKHN0cmluZykgeworICAgIHJl
dHVybiBfZWxtX2xhbmckY29yZSRTdHJpbmckdG9Mb3dlcigKKyAgICAgICAgQTQoCisgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZXBsYWNlLAorICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkUmVnZXgkQWxsLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVnZXgo
J1tfLVxcc10rJyksCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3MkYWx3YXlzKCct
JyksCisgICAgICAgICAgICBBNCgKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdl
eCRyZXBsYWNlLAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JEFsbCwKKyAg
ICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZWdleCgnKFtBLVpdKScpLAorICAg
ICAgICAgICAgICAgIGZ1bmN0aW9uIChfcDEwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRhcHBl
bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAnLScsCisgICAgICAgICAgICAgICAgICAgICAg
ICBmdW5jdGlvbiAoXykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfLm1h
dGNoOworICAgICAgICAgICAgICAgICAgICAgICAgfShfcDEwKSk7CisgICAgICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRTdHJpbmckdHJpbShzdHJpbmcpKSkp
OworfTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHVuZGVy
c2NvcmVkID0gZnVuY3Rpb24gKHN0cmluZykgeworICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRT
dHJpbmckdG9Mb3dlcigKKyAgICAgICAgQTQoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRS
ZWdleCRyZXBsYWNlLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkQWxsLAorICAg
ICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVnZXgoJ1tfLVxcc10rJyksCisgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3MkYWx3YXlzKCdfJyksCisgICAgICAgICAgICBBNCgK
KyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZXBsYWNlLAorICAgICAgICAg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JEFsbCwKKyAgICAgICAgICAgICAgICBfZWxtX2xh
bmckY29yZSRSZWdleCRyZWdleCgnKFthLXpcXGRdKShbQS1aXSspJyksCisgICAgICAgICAgICAg
ICAgZnVuY3Rpb24gKF9wMTEpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAg
ICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGpvaW4sCisgICAgICAg
ICAgICAgICAgICAgICAgICAnXycsCisgICAgICAgICAgICAgICAgICAgICAgICBBMigKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JGZpbHRlck1hcCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3MkaWRlbnRpdHks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF8pIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF8uc3VibWF0Y2hlczsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9KF9wMTEpKSk7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSRTdHJpbmckdHJpbShzdHJpbmcpKSkpOworfTsKK3ZhciBfZWxt
X2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHVuc3Vycm91bmQgPSBGMigKKyAg
ICBmdW5jdGlvbiAod3JhcCwgc3RyaW5nKSB7CisgICAgICAgIGlmIChBMihfZWxtX2xhbmckY29y
ZSRTdHJpbmckc3RhcnRzV2l0aCwgd3JhcCwgc3RyaW5nKSAmJiBBMihfZWxtX2xhbmckY29yZSRT
dHJpbmckZW5kc1dpdGgsIHdyYXAsIHN0cmluZykpIHsKKyAgICAgICAgICAgIHZhciBsZW5ndGgg
PSBfZWxtX2xhbmckY29yZSRTdHJpbmckbGVuZ3RoKHdyYXApOworICAgICAgICAgICAgcmV0dXJu
IEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRkcm9wUmlnaHQsCisg
ICAgICAgICAgICAgICAgbGVuZ3RoLAorICAgICAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRjb3Jl
JFN0cmluZyRkcm9wTGVmdCwgbGVuZ3RoLCBzdHJpbmcpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHJldHVybiBzdHJpbmc7CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2Nv
bW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHVucXVvdGUgPSBmdW5jdGlvbiAoc3Ry
aW5nKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdf
RXh0cmEkdW5zdXJyb3VuZCwgJ1wiJywgc3RyaW5nKTsKK307Cit2YXIgX2VsbV9jb21tdW5pdHkk
c3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRzdXJyb3VuZCA9IEYyKAorICAgIGZ1bmN0aW9uICh3
cmFwLCBzdHJpbmcpIHsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkQmFzaWNzX29wc1snKysnXSwKKyAgICAgICAgICAgIHdyYXAsCisgICAgICAgICAgICBB
MihfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycrKyddLCBzdHJpbmcsIHdyYXApKTsKKyAgICB9
KTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHF1b3RlID0g
ZnVuY3Rpb24gKHN0cmluZykgeworICAgIHJldHVybiBBMihfZWxtX2NvbW11bml0eSRzdHJpbmdf
ZXh0cmEkU3RyaW5nX0V4dHJhJHN1cnJvdW5kLCAnXCInLCBzdHJpbmcpOworfTsKK3ZhciBfZWxt
X2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJGNhbWVsaXplID0gZnVuY3Rpb24g
KHN0cmluZykgeworICAgIHJldHVybiBBNCgKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgk
cmVwbGFjZSwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkQWxsLAorICAgICAgICBfZWxt
X2xhbmckY29yZSRSZWdleCRyZWdleCgnWy1fXFxzXSsoLik/JyksCisgICAgICAgIGZ1bmN0aW9u
IChfcDEyKSB7CisgICAgICAgICAgICB2YXIgX3AxMyA9IF9wMTI7CisgICAgICAgICAgICB2YXIg
X3AxNCA9IF9wMTMuc3VibWF0Y2hlczsKKyAgICAgICAgICAgIGlmICgoX3AxNC5jdG9yID09PSAn
OjonKSAmJiAoX3AxNC5fMC5jdG9yID09PSAnSnVzdCcpKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIF9lbG1fbGFuZyRjb3JlJFN0cmluZyR0b1VwcGVyKF9wMTQuXzAuXzApOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gJyc7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0sCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyR0cmltKHN0cmluZykpOwor
fTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJGlzQmxhbmsg
PSBmdW5jdGlvbiAoc3RyaW5nKSB7CisgICAgcmV0dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmck
Y29yZSRSZWdleCRjb250YWlucywKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVnZXgo
J15cXHMqJCcpLAorICAgICAgICBzdHJpbmcpOworfTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJp
bmdfZXh0cmEkU3RyaW5nX0V4dHJhJGNsZWFuID0gZnVuY3Rpb24gKHN0cmluZykgeworICAgIHJl
dHVybiBfZWxtX2xhbmckY29yZSRTdHJpbmckdHJpbSgKKyAgICAgICAgQTQoCisgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSRSZWdleCRyZXBsYWNlLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkUmVnZXgkQWxsLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVnZXgoJ1xc
c1xccysnKSwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRhbHdheXMoJyAnKSwK
KyAgICAgICAgICAgIHN0cmluZykpOworfTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0
cmEkU3RyaW5nX0V4dHJhJHNvZnRCcmVha1JlZ2V4cCA9IGZ1bmN0aW9uICh3aWR0aCkgeworICAg
IHJldHVybiBfZWxtX2xhbmckY29yZSRSZWdleCRyZWdleCgKKyAgICAgICAgQTIoCisgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycrKyddLAorICAgICAgICAgICAgJy57MSwn
LAorICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNz
X29wc1snKysnXSwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3MkdG9TdHJp
bmcod2lkdGgpLAorICAgICAgICAgICAgICAgICd9KFxcc3wkKXxcXFMrPyhcXHN8JCknKSkpOwor
fTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHNvZnRFbGxp
cHNpcyA9IEYyKAorICAgIGZ1bmN0aW9uIChob3dMb25nLCBzdHJpbmcpIHsKKyAgICAgICAgcmV0
dXJuIChfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY21wKAorICAgICAgICAgICAgX2VsbV9s
YW5nJGNvcmUkU3RyaW5nJGxlbmd0aChzdHJpbmcpLAorICAgICAgICAgICAgaG93TG9uZykgPCAx
KSA/IHN0cmluZyA6IEEzKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGZsaXAs
CisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRTdHJpbmckYXBwZW5kLAorICAgICAgICAgICAg
Jy4uLicsCisgICAgICAgICAgICBBNCgKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRS
ZWdleCRyZXBsYWNlLAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JEFsbCwK
KyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZWdleCgnKFtcXC4sOzpcXHNd
KSskJyksCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGFsd2F5cygnJyks
CisgICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JFN0cmluZyRqb2luLAorICAgICAgICAgICAgICAgICAgICAnJywKKyAgICAgICAgICAgICAgICAg
ICAgQTIoCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JG1hcCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIF8ubWF0Y2g7CisgICAgICAgICAgICAgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgICAgICAgICAgICAgQTMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkUmVnZXgkZmluZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSRSZWdleCRBdE1vc3QoMSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRzb2Z0QnJlYWtSZWdl
eHAoaG93TG9uZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKSkpKSk7Cisg
ICAgfSk7Cit2YXIgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRzb2Z0
QnJlYWsgPSBGMigKKyAgICBmdW5jdGlvbiAod2lkdGgsIHN0cmluZykgeworICAgICAgICByZXR1
cm4gKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jbXAod2lkdGgsIDApIDwgMSkgPyBfZWxt
X2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICBbXSkgOiBBMigK
KyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkbWFwLAorICAgICAgICAgICAgZnVuY3Rp
b24gKF8pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gXy5tYXRjaDsKKyAgICAgICAgICAgIH0s
CisgICAgICAgICAgICBBMygKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRm
aW5kLAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JEFsbCwKKyAgICAgICAg
ICAgICAgICBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHNvZnRCcmVh
a1JlZ2V4cCh3aWR0aCksCisgICAgICAgICAgICAgICAgc3RyaW5nKSk7CisgICAgfSk7Cit2YXIg
X2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRzb2Z0V3JhcFdpdGggPSBG
MygKKyAgICBmdW5jdGlvbiAod2lkdGgsIHNlcGFyYXRvciwgc3RyaW5nKSB7CisgICAgICAgIHJl
dHVybiBBMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRqb2luLAorICAgICAg
ICAgICAgc2VwYXJhdG9yLAorICAgICAgICAgICAgQTIoX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4
dHJhJFN0cmluZ19FeHRyYSRzb2Z0QnJlYWssIHdpZHRoLCBzdHJpbmcpKTsKKyAgICB9KTsKK3Zh
ciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHNvZnRXcmFwID0gRjIo
CisgICAgZnVuY3Rpb24gKHdpZHRoLCBzdHJpbmcpIHsKKyAgICAgICAgcmV0dXJuIEEzKF9lbG1f
Y29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkc29mdFdyYXBXaXRoLCB3aWR0aCwg
J1xuJywgc3RyaW5nKTsKKyAgICB9KTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEk
U3RyaW5nX0V4dHJhJGJyZWFrZXIgPSBGMygKKyAgICBmdW5jdGlvbiAod2lkdGgsIHN0cmluZywg
YWNjKSB7CisgICAgICAgIGJyZWFrZXI6CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAg
ICAgICB2YXIgX3AxNSA9IHN0cmluZzsKKyAgICAgICAgICAgIGlmIChfcDE1ID09PSAnJykgewor
ICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRMaXN0JHJldmVyc2UoYWNjKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIF92MTYgPSB3aWR0aCwK
KyAgICAgICAgICAgICAgICAgICAgX3YxNyA9IEEyKF9lbG1fbGFuZyRjb3JlJFN0cmluZyRkcm9w
TGVmdCwgd2lkdGgsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgIF92MTggPSBBMigKKyAg
ICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10sCisgICAgICAg
ICAgICAgICAgICAgIEEzKF9lbG1fbGFuZyRjb3JlJFN0cmluZyRzbGljZSwgMCwgd2lkdGgsIHN0
cmluZyksCisgICAgICAgICAgICAgICAgICAgIGFjYyk7CisgICAgICAgICAgICAgICAgd2lkdGgg
PSBfdjE2OworICAgICAgICAgICAgICAgIHN0cmluZyA9IF92MTc7CisgICAgICAgICAgICAgICAg
YWNjID0gX3YxODsKKyAgICAgICAgICAgICAgICBjb250aW51ZSBicmVha2VyOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJh
JFN0cmluZ19FeHRyYSRicmVhayA9IEYyKAorICAgIGZ1bmN0aW9uICh3aWR0aCwgc3RyaW5nKSB7
CisgICAgICAgIHJldHVybiAoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmVxKHdpZHRoLCAw
KSB8fCBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuZXEoc3RyaW5nLCAnJykpID8gX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgW3N0cmluZ10pIDog
QTMoCisgICAgICAgICAgICBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJh
JGJyZWFrZXIsCisgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgIHN0cmluZywKKyAgICAg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAg
ICAgICBbXSkpOworICAgIH0pOwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJp
bmdfRXh0cmEkd3JhcFdpdGggPSBGMygKKyAgICBmdW5jdGlvbiAod2lkdGgsIHNlcGFyYXRvciwg
c3RyaW5nKSB7CisgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JFN0cmluZyRqb2luLAorICAgICAgICAgICAgc2VwYXJhdG9yLAorICAgICAgICAgICAgQTIoX2Vs
bV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRicmVhaywgd2lkdGgsIHN0cmlu
ZykpOworICAgIH0pOwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0
cmEkd3JhcCA9IEYyKAorICAgIGZ1bmN0aW9uICh3aWR0aCwgc3RyaW5nKSB7CisgICAgICAgIHJl
dHVybiBBMyhfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHdyYXBXaXRo
LCB3aWR0aCwgJ1xuJywgc3RyaW5nKTsKKyAgICB9KTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJp
bmdfZXh0cmEkU3RyaW5nX0V4dHJhJHJlcGxhY2VTbGljZSA9IEY0KAorICAgIGZ1bmN0aW9uIChz
dWJzdGl0dXRpb24sIHN0YXJ0LCBlbmQsIHN0cmluZykgeworICAgICAgICByZXR1cm4gQTIoCisg
ICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycrKyddLAorICAgICAgICAgICAg
QTMoX2VsbV9sYW5nJGNvcmUkU3RyaW5nJHNsaWNlLCAwLCBzdGFydCwgc3RyaW5nKSwKKyAgICAg
ICAgICAgIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJysr
J10sCisgICAgICAgICAgICAgICAgc3Vic3RpdHV0aW9uLAorICAgICAgICAgICAgICAgIEEzKAor
ICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRTdHJpbmckc2xpY2UsCisgICAgICAg
ICAgICAgICAgICAgIGVuZCwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkU3Ry
aW5nJGxlbmd0aChzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICBzdHJpbmcpKSk7CisgICAg
fSk7Cit2YXIgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRpbnNlcnRB
dCA9IEYzKAorICAgIGZ1bmN0aW9uIChpbnNlcnQsIHBvcywgc3RyaW5nKSB7CisgICAgICAgIHJl
dHVybiBBNChfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHJlcGxhY2VT
bGljZSwgaW5zZXJ0LCBwb3MsIHBvcywgc3RyaW5nKTsKKyAgICB9KTsKK3ZhciBfZWxtX2NvbW11
bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHJlcGxhY2UgPSBGMygKKyAgICBmdW5jdGlv
biAoc2VhcmNoLCBzdWJzdGl0dXRpb24sIHN0cmluZykgeworICAgICAgICByZXR1cm4gQTQoCisg
ICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZXBsYWNlLAorICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkUmVnZXgkQWxsLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgk
cmVnZXgoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkZXNjYXBlKHNlYXJj
aCkpLAorICAgICAgICAgICAgZnVuY3Rpb24gKF9wMTYpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gc3Vic3RpdHV0aW9uOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHN0cmluZyk7Cisg
ICAgfSk7Cit2YXIgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRjaGFu
Z2VDYXNlID0gRjIoCisgICAgZnVuY3Rpb24gKG11dGF0b3IsIHdvcmQpIHsKKyAgICAgICAgcmV0
dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTWF5YmUkd2l0aERlZmF1bHQsCisg
ICAgICAgICAgICAnJywKKyAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJE1heWJlJG1hcCwKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX3AxNykgeworICAg
ICAgICAgICAgICAgICAgICB2YXIgX3AxOCA9IF9wMTc7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRj
b25zLAorICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRvcihfcDE4Ll8wKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIF9wMTguXzEpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICAgICAgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJHVuY29ucyh3b3JkKSkpOworICAgIH0pOwordmFy
IF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkdG9TZW50ZW5jZUNhc2Ug
PSBmdW5jdGlvbiAod29yZCkgeworICAgIHJldHVybiBBMihfZWxtX2NvbW11bml0eSRzdHJpbmdf
ZXh0cmEkU3RyaW5nX0V4dHJhJGNoYW5nZUNhc2UsIF9lbG1fbGFuZyRjb3JlJENoYXIkdG9VcHBl
ciwgd29yZCk7Cit9OwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0
cmEkdG9UaXRsZUNhc2UgPSBmdW5jdGlvbiAod3MpIHsKKyAgICB2YXIgdXBwZXJjYXNlTWF0Y2gg
PSBBMygKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVwbGFjZSwKKyAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkUmVnZXgkQWxsLAorICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZWdl
eCgnXFx3KycpLAorICAgICAgICBmdW5jdGlvbiAoX3AxOSkgeworICAgICAgICAgICAgcmV0dXJu
IF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkdG9TZW50ZW5jZUNhc2Uo
CisgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF8pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIF8ubWF0Y2g7CisgICAgICAgICAgICAgICAgfShfcDE5KSk7CisgICAgICAgIH0pOworICAg
IHJldHVybiBBNCgKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVwbGFjZSwKKyAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkQWxsLAorICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdl
eCRyZWdleCgnXihbYS16XSl8XFxzKyhbYS16XSknKSwKKyAgICAgICAgZnVuY3Rpb24gKF9wMjAp
IHsKKyAgICAgICAgICAgIHJldHVybiB1cHBlcmNhc2VNYXRjaCgKKyAgICAgICAgICAgICAgICBm
dW5jdGlvbiAoXykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gXy5tYXRjaDsKKyAgICAg
ICAgICAgICAgICB9KF9wMjApKTsKKyAgICAgICAgfSwKKyAgICAgICAgd3MpOworfTsKK3ZhciBf
ZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJGNsYXNzaWZ5ID0gZnVuY3Rp
b24gKHN0cmluZykgeworICAgIHJldHVybiBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3Ry
aW5nX0V4dHJhJHRvU2VudGVuY2VDYXNlKAorICAgICAgICBBMygKKyAgICAgICAgICAgIF9lbG1f
Y29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkcmVwbGFjZSwKKyAgICAgICAgICAg
ICcgJywKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAgX2VsbV9jb21tdW5pdHkkc3RyaW5n
X2V4dHJhJFN0cmluZ19FeHRyYSRjYW1lbGl6ZSgKKyAgICAgICAgICAgICAgICBBNCgKKyAgICAg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVwbGFjZSwKKyAgICAgICAgICAg
ICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkQWxsLAorICAgICAgICAgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSRSZWdleCRyZWdleCgnW1xcV19dJyksCisgICAgICAgICAgICAgICAgICAg
IF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRhbHdheXMoJyAnKSwKKyAgICAgICAgICAgICAgICAgICAg
c3RyaW5nKSkpKTsKK307Cit2YXIgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19F
eHRyYSRodW1hbml6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHsKKyAgICByZXR1cm4gX2VsbV9jb21t
dW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSR0b1NlbnRlbmNlQ2FzZSgKKyAgICAgICAg
X2VsbV9sYW5nJGNvcmUkU3RyaW5nJHRvTG93ZXIoCisgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSRTdHJpbmckdHJpbSgKKyAgICAgICAgICAgICAgICBBNCgKKyAgICAgICAgICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVwbGFjZSwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9s
YW5nJGNvcmUkUmVnZXgkQWxsLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRS
ZWdleCRyZWdleCgnX2lkJHxbLV9cXHNdKycpLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xh
bmckY29yZSRCYXNpY3MkYWx3YXlzKCcgJyksCisgICAgICAgICAgICAgICAgICAgIEE0KAorICAg
ICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVwbGFjZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JEFsbCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JHJlZ2V4KCdbQS1aXScpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9wMjEpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1f
bGFuZyRjb3JlJFN0cmluZyRhcHBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICctJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF8pIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfLm1hdGNoOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9KF9wMjEpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcpKSkpKTsKK307Cit2YXIgX2Vs
bV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRkZWNhcGl0YWxpemUgPSBmdW5j
dGlvbiAod29yZCkgeworICAgIHJldHVybiBBMihfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEk
U3RyaW5nX0V4dHJhJGNoYW5nZUNhc2UsIF9lbG1fbGFuZyRjb3JlJENoYXIkdG9Mb3dlciwgd29y
ZCk7Cit9OworCisvL2ltcG9ydCBOYXRpdmUuTGlzdCAvLworCit2YXIgX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX0FycmF5ID0gZnVuY3Rpb24oKSB7CisKKy8vIEEgUlJCLVRyZWUgaGFzIHR3byBkaXN0
aW5jdCBkYXRhIHR5cGVzLgorLy8gTGVhZiAtPiAiaGVpZ2h0IiAgaXMgYWx3YXlzIDAKKy8vICAg
ICAgICAgInRhYmxlIiAgIGlzIGFuIGFycmF5IG9mIGVsZW1lbnRzCisvLyBOb2RlIC0+ICJoZWln
aHQiICBpcyBhbHdheXMgZ3JlYXRlciB0aGFuIDAKKy8vICAgICAgICAgInRhYmxlIiAgIGlzIGFu
IGFycmF5IG9mIGNoaWxkIG5vZGVzCisvLyAgICAgICAgICJsZW5ndGhzIiBpcyBhbiBhcnJheSBv
ZiBhY2N1bXVsYXRlZCBsZW5ndGhzIG9mIHRoZSBjaGlsZCBub2RlcworCisvLyBNIGlzIHRoZSBt
YXhpbWFsIHRhYmxlIHNpemUuIDMyIHNlZW1zIGZhc3QuIEUgaXMgdGhlIGFsbG93ZWQgaW5jcmVh
c2UKKy8vIG9mIHNlYXJjaCBzdGVwcyB3aGVuIGNvbmNhdHRpbmcgdG8gZmluZCBhbiBpbmRleC4g
TG93ZXIgdmFsdWVzIHdpbGwKKy8vIGRlY3JlYXNlIGJhbGFuY2luZywgYnV0IHdpbGwgaW5jcmVh
c2Ugc2VhcmNoIHN0ZXBzLgordmFyIE0gPSAzMjsKK3ZhciBFID0gMjsKKworLy8gQW4gZW1wdHkg
YXJyYXkuCit2YXIgZW1wdHkgPSB7CisgICAgY3RvcjogJ19BcnJheScsCisgICAgaGVpZ2h0OiAw
LAorICAgIHRhYmxlOiBbXQorfTsKKworCitmdW5jdGlvbiBnZXQoaSwgYXJyYXkpCit7CisgICAg
aWYgKGkgPCAwIHx8IGkgPj0gbGVuZ3RoKGFycmF5KSkKKyAgICB7CisgICAgICAgIHRocm93IG5l
dyBFcnJvcigKKyAgICAgICAgICAgICdJbmRleCAnICsgaSArICcgaXMgb3V0IG9mIHJhbmdlLiBD
aGVjayB0aGUgbGVuZ3RoIG9mICcgKworICAgICAgICAgICAgJ3lvdXIgYXJyYXkgZmlyc3Qgb3Ig
dXNlIGdldE1heWJlIG9yIGdldFdpdGhEZWZhdWx0LicpOworICAgIH0KKyAgICByZXR1cm4gdW5z
YWZlR2V0KGksIGFycmF5KTsKK30KKworCitmdW5jdGlvbiB1bnNhZmVHZXQoaSwgYXJyYXkpCit7
CisgICAgZm9yICh2YXIgeCA9IGFycmF5LmhlaWdodDsgeCA+IDA7IHgtLSkKKyAgICB7CisgICAg
ICAgIHZhciBzbG90ID0gaSA+PiAoeCAqIDUpOworICAgICAgICB3aGlsZSAoYXJyYXkubGVuZ3Ro
c1tzbG90XSA8PSBpKQorICAgICAgICB7CisgICAgICAgICAgICBzbG90Kys7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHNsb3QgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBpIC09IGFycmF5
Lmxlbmd0aHNbc2xvdCAtIDFdOworICAgICAgICB9CisgICAgICAgIGFycmF5ID0gYXJyYXkudGFi
bGVbc2xvdF07CisgICAgfQorICAgIHJldHVybiBhcnJheS50YWJsZVtpXTsKK30KKworCisvLyBT
ZXRzIHRoZSB2YWx1ZSBhdCB0aGUgaW5kZXggaS4gT25seSB0aGUgbm9kZXMgbGVhZGluZyB0byBp
IHdpbGwgZ2V0CisvLyBjb3BpZWQgYW5kIHVwZGF0ZWQuCitmdW5jdGlvbiBzZXQoaSwgaXRlbSwg
YXJyYXkpCit7CisgICAgaWYgKGkgPCAwIHx8IGxlbmd0aChhcnJheSkgPD0gaSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhcnJheTsKKyAgICB9CisgICAgcmV0dXJuIHVuc2FmZVNldChpLCBpdGVt
LCBhcnJheSk7Cit9CisKKworZnVuY3Rpb24gdW5zYWZlU2V0KGksIGl0ZW0sIGFycmF5KQorewor
ICAgIGFycmF5ID0gbm9kZUNvcHkoYXJyYXkpOworCisgICAgaWYgKGFycmF5LmhlaWdodCA9PT0g
MCkKKyAgICB7CisgICAgICAgIGFycmF5LnRhYmxlW2ldID0gaXRlbTsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgdmFyIHNsb3QgPSBnZXRTbG90KGksIGFycmF5KTsKKyAgICAgICAg
aWYgKHNsb3QgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBpIC09IGFycmF5Lmxlbmd0aHNb
c2xvdCAtIDFdOworICAgICAgICB9CisgICAgICAgIGFycmF5LnRhYmxlW3Nsb3RdID0gdW5zYWZl
U2V0KGksIGl0ZW0sIGFycmF5LnRhYmxlW3Nsb3RdKTsKKyAgICB9CisgICAgcmV0dXJuIGFycmF5
OworfQorCisKK2Z1bmN0aW9uIGluaXRpYWxpemUobGVuLCBmKQoreworICAgIGlmIChsZW4gPD0g
MCkKKyAgICB7CisgICAgICAgIHJldHVybiBlbXB0eTsKKyAgICB9CisgICAgdmFyIGggPSBNYXRo
LmZsb29yKCBNYXRoLmxvZyhsZW4pIC8gTWF0aC5sb2coTSkgKTsKKyAgICByZXR1cm4gaW5pdGlh
bGl6ZV8oZiwgaCwgMCwgbGVuKTsKK30KKworZnVuY3Rpb24gaW5pdGlhbGl6ZV8oZiwgaCwgZnJv
bSwgdG8pCit7CisgICAgaWYgKGggPT09IDApCisgICAgeworICAgICAgICB2YXIgdGFibGUgPSBu
ZXcgQXJyYXkoKHRvIC0gZnJvbSkgJSAoTSArIDEpKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB0YWJsZS5sZW5ndGg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgIHRhYmxlW2ldID0g
Zihmcm9tICsgaSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIGN0
b3I6ICdfQXJyYXknLAorICAgICAgICAgICAgaGVpZ2h0OiAwLAorICAgICAgICAgICAgdGFibGU6
IHRhYmxlCisgICAgICAgIH07CisgICAgfQorCisgICAgdmFyIHN0ZXAgPSBNYXRoLnBvdyhNLCBo
KTsKKyAgICB2YXIgdGFibGUgPSBuZXcgQXJyYXkoTWF0aC5jZWlsKCh0byAtIGZyb20pIC8gc3Rl
cCkpOworICAgIHZhciBsZW5ndGhzID0gbmV3IEFycmF5KHRhYmxlLmxlbmd0aCk7CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB0YWJsZS5sZW5ndGg7IGkrKykKKyAgICB7CisgICAgICAgIHRhYmxl
W2ldID0gaW5pdGlhbGl6ZV8oZiwgaCAtIDEsIGZyb20gKyAoaSAqIHN0ZXApLCBNYXRoLm1pbihm
cm9tICsgKChpICsgMSkgKiBzdGVwKSwgdG8pKTsKKyAgICAgICAgbGVuZ3Roc1tpXSA9IGxlbmd0
aCh0YWJsZVtpXSkgKyAoaSA+IDAgPyBsZW5ndGhzW2ktMV0gOiAwKTsKKyAgICB9CisgICAgcmV0
dXJuIHsKKyAgICAgICAgY3RvcjogJ19BcnJheScsCisgICAgICAgIGhlaWdodDogaCwKKyAgICAg
ICAgdGFibGU6IHRhYmxlLAorICAgICAgICBsZW5ndGhzOiBsZW5ndGhzCisgICAgfTsKK30KKwor
ZnVuY3Rpb24gZnJvbUxpc3QobGlzdCkKK3sKKyAgICBpZiAobGlzdC5jdG9yID09PSAnW10nKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVtcHR5OworICAgIH0KKworICAgIC8vIEFsbG9jYXRlIE0g
c2l6ZWQgYmxvY2tzICh0YWJsZSkgYW5kIHdyaXRlIGxpc3QgZWxlbWVudHMgdG8gaXQuCisgICAg
dmFyIHRhYmxlID0gbmV3IEFycmF5KE0pOworICAgIHZhciBub2RlcyA9IFtdOworICAgIHZhciBp
ID0gMDsKKworICAgIHdoaWxlIChsaXN0LmN0b3IgIT09ICdbXScpCisgICAgeworICAgICAgICB0
YWJsZVtpXSA9IGxpc3QuXzA7CisgICAgICAgIGxpc3QgPSBsaXN0Ll8xOworICAgICAgICBpKys7
CisKKyAgICAgICAgLy8gdGFibGUgaXMgZnVsbCwgc28gd2UgY2FuIHB1c2ggYSBsZWFmIGNvbnRh
aW5pbmcgaXQgaW50byB0aGUKKyAgICAgICAgLy8gbmV4dCBub2RlLgorICAgICAgICBpZiAoaSA9
PT0gTSkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGxlYWYgPSB7CisgICAgICAgICAgICAg
ICAgY3RvcjogJ19BcnJheScsCisgICAgICAgICAgICAgICAgaGVpZ2h0OiAwLAorICAgICAgICAg
ICAgICAgIHRhYmxlOiB0YWJsZQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGZyb21MaXN0
UHVzaChsZWFmLCBub2Rlcyk7CisgICAgICAgICAgICB0YWJsZSA9IG5ldyBBcnJheShNKTsKKyAg
ICAgICAgICAgIGkgPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTWF5YmUgdGhlcmUg
aXMgc29tZXRoaW5nIGxlZnQgb24gdGhlIHRhYmxlLgorICAgIGlmIChpID4gMCkKKyAgICB7Cisg
ICAgICAgIHZhciBsZWFmID0geworICAgICAgICAgICAgY3RvcjogJ19BcnJheScsCisgICAgICAg
ICAgICBoZWlnaHQ6IDAsCisgICAgICAgICAgICB0YWJsZTogdGFibGUuc3BsaWNlKDAsIGkpCisg
ICAgICAgIH07CisgICAgICAgIGZyb21MaXN0UHVzaChsZWFmLCBub2Rlcyk7CisgICAgfQorCisg
ICAgLy8gR28gdGhyb3VnaCBhbGwgb2YgdGhlIG5vZGVzIGFuZCBldmVudHVhbGx5IHB1c2ggdGhl
bSBpbnRvIGhpZ2hlciBub2Rlcy4KKyAgICBmb3IgKHZhciBoID0gMDsgaCA8IG5vZGVzLmxlbmd0
aCAtIDE7IGgrKykKKyAgICB7CisgICAgICAgIGlmIChub2Rlc1toXS50YWJsZS5sZW5ndGggPiAw
KQorICAgICAgICB7CisgICAgICAgICAgICBmcm9tTGlzdFB1c2gobm9kZXNbaF0sIG5vZGVzKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHZhciBoZWFkID0gbm9kZXNbbm9kZXMubGVuZ3RoIC0g
MV07CisgICAgaWYgKGhlYWQuaGVpZ2h0ID4gMCAmJiBoZWFkLnRhYmxlLmxlbmd0aCA9PT0gMSkK
KyAgICB7CisgICAgICAgIHJldHVybiBoZWFkLnRhYmxlWzBdOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICByZXR1cm4gaGVhZDsKKyAgICB9Cit9CisKKy8vIFB1c2ggYSBub2RlIGlu
dG8gYSBoaWdoZXIgbm9kZSBhcyBhIGNoaWxkLgorZnVuY3Rpb24gZnJvbUxpc3RQdXNoKHRvUHVz
aCwgbm9kZXMpCit7CisgICAgdmFyIGggPSB0b1B1c2guaGVpZ2h0OworCisgICAgLy8gTWF5YmUg
dGhlIG5vZGUgb24gdGhpcyBoZWlnaHQgZG9lcyBub3QgZXhpc3QuCisgICAgaWYgKG5vZGVzLmxl
bmd0aCA9PT0gaCkKKyAgICB7CisgICAgICAgIHZhciBub2RlID0geworICAgICAgICAgICAgY3Rv
cjogJ19BcnJheScsCisgICAgICAgICAgICBoZWlnaHQ6IGggKyAxLAorICAgICAgICAgICAgdGFi
bGU6IFtdLAorICAgICAgICAgICAgbGVuZ3RoczogW10KKyAgICAgICAgfTsKKyAgICAgICAgbm9k
ZXMucHVzaChub2RlKTsKKyAgICB9CisKKyAgICBub2Rlc1toXS50YWJsZS5wdXNoKHRvUHVzaCk7
CisgICAgdmFyIGxlbiA9IGxlbmd0aCh0b1B1c2gpOworICAgIGlmIChub2Rlc1toXS5sZW5ndGhz
Lmxlbmd0aCA+IDApCisgICAgeworICAgICAgICBsZW4gKz0gbm9kZXNbaF0ubGVuZ3Roc1tub2Rl
c1toXS5sZW5ndGhzLmxlbmd0aCAtIDFdOworICAgIH0KKyAgICBub2Rlc1toXS5sZW5ndGhzLnB1
c2gobGVuKTsKKworICAgIGlmIChub2Rlc1toXS50YWJsZS5sZW5ndGggPT09IE0pCisgICAgewor
ICAgICAgICBmcm9tTGlzdFB1c2gobm9kZXNbaF0sIG5vZGVzKTsKKyAgICAgICAgbm9kZXNbaF0g
PSB7CisgICAgICAgICAgICBjdG9yOiAnX0FycmF5JywKKyAgICAgICAgICAgIGhlaWdodDogaCAr
IDEsCisgICAgICAgICAgICB0YWJsZTogW10sCisgICAgICAgICAgICBsZW5ndGhzOiBbXQorICAg
ICAgICB9OworICAgIH0KK30KKworLy8gUHVzaGVzIGFuIGl0ZW0gdmlhIHB1c2hfIHRvIHRoZSBi
b3R0b20gcmlnaHQgb2YgYSB0cmVlLgorZnVuY3Rpb24gcHVzaChpdGVtLCBhKQoreworICAgIHZh
ciBwdXNoZWQgPSBwdXNoXyhpdGVtLCBhKTsKKyAgICBpZiAocHVzaGVkICE9PSBudWxsKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHB1c2hlZDsKKyAgICB9CisKKyAgICB2YXIgbmV3VHJlZSA9IGNy
ZWF0ZShpdGVtLCBhLmhlaWdodCk7CisgICAgcmV0dXJuIHNpYmxpc2UoYSwgbmV3VHJlZSk7Cit9
CisKKy8vIFJlY3Vyc2l2ZWx5IHRyaWVzIHRvIHB1c2ggYW4gaXRlbSB0byB0aGUgYm90dG9tLXJp
Z2h0IG1vc3QKKy8vIHRyZWUgcG9zc2libGUuIElmIHRoZXJlIGlzIG5vIHNwYWNlIGxlZnQgZm9y
IHRoZSBpdGVtLAorLy8gbnVsbCB3aWxsIGJlIHJldHVybmVkLgorZnVuY3Rpb24gcHVzaF8oaXRl
bSwgYSkKK3sKKyAgICAvLyBIYW5kbGUgcmVzdXJzaW9uIHN0b3AgYXQgbGVhZiBsZXZlbC4KKyAg
ICBpZiAoYS5oZWlnaHQgPT09IDApCisgICAgeworICAgICAgICBpZiAoYS50YWJsZS5sZW5ndGgg
PCBNKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgbmV3QSA9IHsKKyAgICAgICAgICAgICAg
ICBjdG9yOiAnX0FycmF5JywKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDAsCisgICAgICAgICAg
ICAgICAgdGFibGU6IGEudGFibGUuc2xpY2UoKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IG5ld0EudGFibGUucHVzaChpdGVtKTsKKyAgICAgICAgICAgIHJldHVybiBuZXdBOworICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiBudWxsOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gUmVjdXJzaXZlbHkgcHVzaAorICAgIHZhciBwdXNoZWQg
PSBwdXNoXyhpdGVtLCBib3RSaWdodChhKSk7CisKKyAgICAvLyBUaGVyZSB3YXMgc3BhY2UgaW4g
dGhlIGJvdHRvbSByaWdodCB0cmVlLCBzbyB0aGUgc2xvdCB3aWxsCisgICAgLy8gYmUgdXBkYXRl
ZC4KKyAgICBpZiAocHVzaGVkICE9PSBudWxsKQorICAgIHsKKyAgICAgICAgdmFyIG5ld0EgPSBu
b2RlQ29weShhKTsKKyAgICAgICAgbmV3QS50YWJsZVtuZXdBLnRhYmxlLmxlbmd0aCAtIDFdID0g
cHVzaGVkOworICAgICAgICBuZXdBLmxlbmd0aHNbbmV3QS5sZW5ndGhzLmxlbmd0aCAtIDFdKys7
CisgICAgICAgIHJldHVybiBuZXdBOworICAgIH0KKworICAgIC8vIFdoZW4gdGhlcmUgd2FzIG5v
IHNwYWNlIGxlZnQsIGNoZWNrIGlmIHRoZXJlIGlzIHNwYWNlIGxlZnQKKyAgICAvLyBmb3IgYSBu
ZXcgc2xvdCB3aXRoIGEgdHJlZSB3aGljaCBjb250YWlucyBvbmx5IHRoZSBpdGVtCisgICAgLy8g
YXQgdGhlIGJvdHRvbS4KKyAgICBpZiAoYS50YWJsZS5sZW5ndGggPCBNKQorICAgIHsKKyAgICAg
ICAgdmFyIG5ld1Nsb3QgPSBjcmVhdGUoaXRlbSwgYS5oZWlnaHQgLSAxKTsKKyAgICAgICAgdmFy
IG5ld0EgPSBub2RlQ29weShhKTsKKyAgICAgICAgbmV3QS50YWJsZS5wdXNoKG5ld1Nsb3QpOwor
ICAgICAgICBuZXdBLmxlbmd0aHMucHVzaChuZXdBLmxlbmd0aHNbbmV3QS5sZW5ndGhzLmxlbmd0
aCAtIDFdICsgbGVuZ3RoKG5ld1Nsb3QpKTsKKyAgICAgICAgcmV0dXJuIG5ld0E7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KKworLy8gQ29u
dmVydHMgYW4gYXJyYXkgaW50byBhIGxpc3Qgb2YgZWxlbWVudHMuCitmdW5jdGlvbiB0b0xpc3Qo
YSkKK3sKKyAgICByZXR1cm4gdG9MaXN0XyhfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5OaWws
IGEpOworfQorCitmdW5jdGlvbiB0b0xpc3RfKGxpc3QsIGEpCit7CisgICAgZm9yICh2YXIgaSA9
IGEudGFibGUubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pCisgICAgeworICAgICAgICBsaXN0ID0K
KyAgICAgICAgICAgIGEuaGVpZ2h0ID09PSAwCisgICAgICAgICAgICAgICAgPyBfZWxtX2xhbmck
Y29yZSROYXRpdmVfTGlzdC5Db25zKGEudGFibGVbaV0sIGxpc3QpCisgICAgICAgICAgICAgICAg
OiB0b0xpc3RfKGxpc3QsIGEudGFibGVbaV0pOworICAgIH0KKyAgICByZXR1cm4gbGlzdDsKK30K
KworLy8gTWFwcyBhIGZ1bmN0aW9uIG92ZXIgdGhlIGVsZW1lbnRzIG9mIGFuIGFycmF5LgorZnVu
Y3Rpb24gbWFwKGYsIGEpCit7CisgICAgdmFyIG5ld0EgPSB7CisgICAgICAgIGN0b3I6ICdfQXJy
YXknLAorICAgICAgICBoZWlnaHQ6IGEuaGVpZ2h0LAorICAgICAgICB0YWJsZTogbmV3IEFycmF5
KGEudGFibGUubGVuZ3RoKQorICAgIH07CisgICAgaWYgKGEuaGVpZ2h0ID4gMCkKKyAgICB7Cisg
ICAgICAgIG5ld0EubGVuZ3RocyA9IGEubGVuZ3RoczsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBhLnRhYmxlLmxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgbmV3QS50YWJsZVtp
XSA9CisgICAgICAgICAgICBhLmhlaWdodCA9PT0gMAorICAgICAgICAgICAgICAgID8gZihhLnRh
YmxlW2ldKQorICAgICAgICAgICAgICAgIDogbWFwKGYsIGEudGFibGVbaV0pOworICAgIH0KKyAg
ICByZXR1cm4gbmV3QTsKK30KKworLy8gTWFwcyBhIGZ1bmN0aW9uIG92ZXIgdGhlIGVsZW1lbnRz
IHdpdGggdGhlaXIgaW5kZXggYXMgZmlyc3QgYXJndW1lbnQuCitmdW5jdGlvbiBpbmRleGVkTWFw
KGYsIGEpCit7CisgICAgcmV0dXJuIGluZGV4ZWRNYXBfKGYsIGEsIDApOworfQorCitmdW5jdGlv
biBpbmRleGVkTWFwXyhmLCBhLCBmcm9tKQoreworICAgIHZhciBuZXdBID0geworICAgICAgICBj
dG9yOiAnX0FycmF5JywKKyAgICAgICAgaGVpZ2h0OiBhLmhlaWdodCwKKyAgICAgICAgdGFibGU6
IG5ldyBBcnJheShhLnRhYmxlLmxlbmd0aCkKKyAgICB9OworICAgIGlmIChhLmhlaWdodCA+IDAp
CisgICAgeworICAgICAgICBuZXdBLmxlbmd0aHMgPSBhLmxlbmd0aHM7CisgICAgfQorICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgYS50YWJsZS5sZW5ndGg7IGkrKykKKyAgICB7CisgICAgICAgIG5l
d0EudGFibGVbaV0gPQorICAgICAgICAgICAgYS5oZWlnaHQgPT09IDAKKyAgICAgICAgICAgICAg
ICA/IEEyKGYsIGZyb20gKyBpLCBhLnRhYmxlW2ldKQorICAgICAgICAgICAgICAgIDogaW5kZXhl
ZE1hcF8oZiwgYS50YWJsZVtpXSwgaSA9PSAwID8gZnJvbSA6IGZyb20gKyBhLmxlbmd0aHNbaSAt
IDFdKTsKKyAgICB9CisgICAgcmV0dXJuIG5ld0E7Cit9CisKK2Z1bmN0aW9uIGZvbGRsKGYsIGIs
IGEpCit7CisgICAgaWYgKGEuaGVpZ2h0ID09PSAwKQorICAgIHsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBhLnRhYmxlLmxlbmd0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBi
ID0gQTIoZiwgYS50YWJsZVtpXSwgYik7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLnRhYmxlLmxlbmd0aDsgaSsrKQorICAg
ICAgICB7CisgICAgICAgICAgICBiID0gZm9sZGwoZiwgYiwgYS50YWJsZVtpXSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIGI7Cit9CisKK2Z1bmN0aW9uIGZvbGRyKGYsIGIsIGEpCit7
CisgICAgaWYgKGEuaGVpZ2h0ID09PSAwKQorICAgIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IGEu
dGFibGUubGVuZ3RoOyBpLS07ICkKKyAgICAgICAgeworICAgICAgICAgICAgYiA9IEEyKGYsIGEu
dGFibGVbaV0sIGIpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IGZvciAodmFyIGkgPSBhLnRhYmxlLmxlbmd0aDsgaS0tOyApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGIgPSBmb2xkcihmLCBiLCBhLnRhYmxlW2ldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gYjsKK30KKworLy8gVE9ETzogY3VycmVudGx5LCBpdCBzbGljZXMgdGhlIHJpZ2h0LCB0
aGVuIHRoZSBsZWZ0LiBUaGlzIGNhbiBiZQorLy8gb3B0aW1pemVkLgorZnVuY3Rpb24gc2xpY2Uo
ZnJvbSwgdG8sIGEpCit7CisgICAgaWYgKGZyb20gPCAwKQorICAgIHsKKyAgICAgICAgZnJvbSAr
PSBsZW5ndGgoYSk7CisgICAgfQorICAgIGlmICh0byA8IDApCisgICAgeworICAgICAgICB0byAr
PSBsZW5ndGgoYSk7CisgICAgfQorICAgIHJldHVybiBzbGljZUxlZnQoZnJvbSwgc2xpY2VSaWdo
dCh0bywgYSkpOworfQorCitmdW5jdGlvbiBzbGljZVJpZ2h0KHRvLCBhKQoreworICAgIGlmICh0
byA9PT0gbGVuZ3RoKGEpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGE7CisgICAgfQorCisgICAg
Ly8gSGFuZGxlIGxlYWYgbGV2ZWwuCisgICAgaWYgKGEuaGVpZ2h0ID09PSAwKQorICAgIHsKKyAg
ICAgICAgdmFyIG5ld0EgPSB7IGN0b3I6J19BcnJheScsIGhlaWdodDowIH07CisgICAgICAgIG5l
d0EudGFibGUgPSBhLnRhYmxlLnNsaWNlKDAsIHRvKTsKKyAgICAgICAgcmV0dXJuIG5ld0E7Cisg
ICAgfQorCisgICAgLy8gU2xpY2UgdGhlIHJpZ2h0IHJlY3Vyc2l2ZWx5LgorICAgIHZhciByaWdo
dCA9IGdldFNsb3QodG8sIGEpOworICAgIHZhciBzbGljZWQgPSBzbGljZVJpZ2h0KHRvIC0gKHJp
Z2h0ID4gMCA/IGEubGVuZ3Roc1tyaWdodCAtIDFdIDogMCksIGEudGFibGVbcmlnaHRdKTsKKwor
ICAgIC8vIE1heWJlIHRoZSBhIG5vZGUgaXMgbm90IGV2ZW4gbmVlZGVkLCBhcyBzbGljZWQgY29u
dGFpbnMgdGhlIHdob2xlIHNsaWNlLgorICAgIGlmIChyaWdodCA9PT0gMCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBzbGljZWQ7CisgICAgfQorCisgICAgLy8gQ3JlYXRlIG5ldyBub2RlLgorICAg
IHZhciBuZXdBID0geworICAgICAgICBjdG9yOiAnX0FycmF5JywKKyAgICAgICAgaGVpZ2h0OiBh
LmhlaWdodCwKKyAgICAgICAgdGFibGU6IGEudGFibGUuc2xpY2UoMCwgcmlnaHQpLAorICAgICAg
ICBsZW5ndGhzOiBhLmxlbmd0aHMuc2xpY2UoMCwgcmlnaHQpCisgICAgfTsKKyAgICBpZiAoc2xp
Y2VkLnRhYmxlLmxlbmd0aCA+IDApCisgICAgeworICAgICAgICBuZXdBLnRhYmxlW3JpZ2h0XSA9
IHNsaWNlZDsKKyAgICAgICAgbmV3QS5sZW5ndGhzW3JpZ2h0XSA9IGxlbmd0aChzbGljZWQpICsg
KHJpZ2h0ID4gMCA/IG5ld0EubGVuZ3Roc1tyaWdodCAtIDFdIDogMCk7CisgICAgfQorICAgIHJl
dHVybiBuZXdBOworfQorCitmdW5jdGlvbiBzbGljZUxlZnQoZnJvbSwgYSkKK3sKKyAgICBpZiAo
ZnJvbSA9PT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBhOworICAgIH0KKworICAgIC8vIEhh
bmRsZSBsZWFmIGxldmVsLgorICAgIGlmIChhLmhlaWdodCA9PT0gMCkKKyAgICB7CisgICAgICAg
IHZhciBuZXdBID0geyBjdG9yOidfQXJyYXknLCBoZWlnaHQ6MCB9OworICAgICAgICBuZXdBLnRh
YmxlID0gYS50YWJsZS5zbGljZShmcm9tLCBhLnRhYmxlLmxlbmd0aCArIDEpOworICAgICAgICBy
ZXR1cm4gbmV3QTsKKyAgICB9CisKKyAgICAvLyBTbGljZSB0aGUgbGVmdCByZWN1cnNpdmVseS4K
KyAgICB2YXIgbGVmdCA9IGdldFNsb3QoZnJvbSwgYSk7CisgICAgdmFyIHNsaWNlZCA9IHNsaWNl
TGVmdChmcm9tIC0gKGxlZnQgPiAwID8gYS5sZW5ndGhzW2xlZnQgLSAxXSA6IDApLCBhLnRhYmxl
W2xlZnRdKTsKKworICAgIC8vIE1heWJlIHRoZSBhIG5vZGUgaXMgbm90IGV2ZW4gbmVlZGVkLCBh
cyBzbGljZWQgY29udGFpbnMgdGhlIHdob2xlIHNsaWNlLgorICAgIGlmIChsZWZ0ID09PSBhLnRh
YmxlLmxlbmd0aCAtIDEpCisgICAgeworICAgICAgICByZXR1cm4gc2xpY2VkOworICAgIH0KKwor
ICAgIC8vIENyZWF0ZSBuZXcgbm9kZS4KKyAgICB2YXIgbmV3QSA9IHsKKyAgICAgICAgY3Rvcjog
J19BcnJheScsCisgICAgICAgIGhlaWdodDogYS5oZWlnaHQsCisgICAgICAgIHRhYmxlOiBhLnRh
YmxlLnNsaWNlKGxlZnQsIGEudGFibGUubGVuZ3RoICsgMSksCisgICAgICAgIGxlbmd0aHM6IG5l
dyBBcnJheShhLnRhYmxlLmxlbmd0aCAtIGxlZnQpCisgICAgfTsKKyAgICBuZXdBLnRhYmxlWzBd
ID0gc2xpY2VkOworICAgIHZhciBsZW4gPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3
QS50YWJsZS5sZW5ndGg7IGkrKykKKyAgICB7CisgICAgICAgIGxlbiArPSBsZW5ndGgobmV3QS50
YWJsZVtpXSk7CisgICAgICAgIG5ld0EubGVuZ3Roc1tpXSA9IGxlbjsKKyAgICB9CisKKyAgICBy
ZXR1cm4gbmV3QTsKK30KKworLy8gQXBwZW5kcyB0d28gdHJlZXMuCitmdW5jdGlvbiBhcHBlbmQo
YSxiKQoreworICAgIGlmIChhLnRhYmxlLmxlbmd0aCA9PT0gMCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBiOworICAgIH0KKyAgICBpZiAoYi50YWJsZS5sZW5ndGggPT09IDApCisgICAgeworICAg
ICAgICByZXR1cm4gYTsKKyAgICB9CisKKyAgICB2YXIgYyA9IGFwcGVuZF8oYSwgYik7CisKKyAg
ICAvLyBDaGVjayBpZiBib3RoIG5vZGVzIGNhbiBiZSBjcnVuc2hlZCB0b2dldGhlci4KKyAgICBp
ZiAoY1swXS50YWJsZS5sZW5ndGggKyBjWzFdLnRhYmxlLmxlbmd0aCA8PSBNKQorICAgIHsKKyAg
ICAgICAgaWYgKGNbMF0udGFibGUubGVuZ3RoID09PSAwKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gY1sxXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY1sxXS50YWJsZS5sZW5ndGgg
PT09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjWzBdOworICAgICAgICB9CisK
KyAgICAgICAgLy8gQWRqdXN0IC50YWJsZSBhbmQgLmxlbmd0aHMKKyAgICAgICAgY1swXS50YWJs
ZSA9IGNbMF0udGFibGUuY29uY2F0KGNbMV0udGFibGUpOworICAgICAgICBpZiAoY1swXS5oZWln
aHQgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgbGVuID0gbGVuZ3RoKGNbMF0pOwor
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjWzFdLmxlbmd0aHMubGVuZ3RoOyBpKysp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY1sxXS5sZW5ndGhzW2ldICs9IGxlbjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNbMF0ubGVuZ3RocyA9IGNbMF0ubGVuZ3Rocy5j
b25jYXQoY1sxXS5sZW5ndGhzKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBjWzBdOwor
ICAgIH0KKworICAgIGlmIChjWzBdLmhlaWdodCA+IDApCisgICAgeworICAgICAgICB2YXIgdG9S
ZW1vdmUgPSBjYWxjVG9SZW1vdmUoYSwgYik7CisgICAgICAgIGlmICh0b1JlbW92ZSA+IEUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGMgPSBzaHVmZmxlKGNbMF0sIGNbMV0sIHRvUmVtb3ZlKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzaWJsaXNlKGNbMF0sIGNbMV0pOworfQor
CisvLyBSZXR1cm5zIGFuIGFycmF5IG9mIHR3byBub2RlczsgcmlnaHQgYW5kIGxlZnQuIE9uZSBu
b2RlIF9tYXlfIGJlIGVtcHR5LgorZnVuY3Rpb24gYXBwZW5kXyhhLCBiKQoreworICAgIGlmIChh
LmhlaWdodCA9PT0gMCAmJiBiLmhlaWdodCA9PT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBb
YSwgYl07CisgICAgfQorCisgICAgaWYgKGEuaGVpZ2h0ICE9PSAxIHx8IGIuaGVpZ2h0ICE9PSAx
KQorICAgIHsKKyAgICAgICAgaWYgKGEuaGVpZ2h0ID09PSBiLmhlaWdodCkKKyAgICAgICAgewor
ICAgICAgICAgICAgYSA9IG5vZGVDb3B5KGEpOworICAgICAgICAgICAgYiA9IG5vZGVDb3B5KGIp
OworICAgICAgICAgICAgdmFyIGFwcGVuZGVkID0gYXBwZW5kXyhib3RSaWdodChhKSwgYm90TGVm
dChiKSk7CisKKyAgICAgICAgICAgIGluc2VydFJpZ2h0KGEsIGFwcGVuZGVkWzFdKTsKKyAgICAg
ICAgICAgIGluc2VydExlZnQoYiwgYXBwZW5kZWRbMF0pOworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKGEuaGVpZ2h0ID4gYi5oZWlnaHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGEgPSBu
b2RlQ29weShhKTsKKyAgICAgICAgICAgIHZhciBhcHBlbmRlZCA9IGFwcGVuZF8oYm90UmlnaHQo
YSksIGIpOworCisgICAgICAgICAgICBpbnNlcnRSaWdodChhLCBhcHBlbmRlZFswXSk7CisgICAg
ICAgICAgICBiID0gcGFyZW50aXNlKGFwcGVuZGVkWzFdLCBhcHBlbmRlZFsxXS5oZWlnaHQgKyAx
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGIgPSBu
b2RlQ29weShiKTsKKyAgICAgICAgICAgIHZhciBhcHBlbmRlZCA9IGFwcGVuZF8oYSwgYm90TGVm
dChiKSk7CisKKyAgICAgICAgICAgIHZhciBsZWZ0ID0gYXBwZW5kZWRbMF0udGFibGUubGVuZ3Ro
ID09PSAwID8gMCA6IDE7CisgICAgICAgICAgICB2YXIgcmlnaHQgPSBsZWZ0ID09PSAwID8gMSA6
IDA7CisgICAgICAgICAgICBpbnNlcnRMZWZ0KGIsIGFwcGVuZGVkW2xlZnRdKTsKKyAgICAgICAg
ICAgIGEgPSBwYXJlbnRpc2UoYXBwZW5kZWRbcmlnaHRdLCBhcHBlbmRlZFtyaWdodF0uaGVpZ2h0
ICsgMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDaGVjayBpZiBiYWxhbmNpbmcgaXMg
bmVlZGVkIGFuZCByZXR1cm4gYmFzZWQgb24gdGhhdC4KKyAgICBpZiAoYS50YWJsZS5sZW5ndGgg
PT09IDAgfHwgYi50YWJsZS5sZW5ndGggPT09IDApCisgICAgeworICAgICAgICByZXR1cm4gW2Es
IGJdOworICAgIH0KKworICAgIHZhciB0b1JlbW92ZSA9IGNhbGNUb1JlbW92ZShhLCBiKTsKKyAg
ICBpZiAodG9SZW1vdmUgPD0gRSkKKyAgICB7CisgICAgICAgIHJldHVybiBbYSwgYl07CisgICAg
fQorICAgIHJldHVybiBzaHVmZmxlKGEsIGIsIHRvUmVtb3ZlKTsKK30KKworLy8gSGVscGVyZnVu
Y3Rpb25zIGZvciBhcHBlbmRfLiBSZXBsYWNlcyBhIGNoaWxkIG5vZGUgYXQgdGhlIHNpZGUgb2Yg
dGhlIHBhcmVudC4KK2Z1bmN0aW9uIGluc2VydFJpZ2h0KHBhcmVudCwgbm9kZSkKK3sKKyAgICB2
YXIgaW5kZXggPSBwYXJlbnQudGFibGUubGVuZ3RoIC0gMTsKKyAgICBwYXJlbnQudGFibGVbaW5k
ZXhdID0gbm9kZTsKKyAgICBwYXJlbnQubGVuZ3Roc1tpbmRleF0gPSBsZW5ndGgobm9kZSk7Cisg
ICAgcGFyZW50Lmxlbmd0aHNbaW5kZXhdICs9IGluZGV4ID4gMCA/IHBhcmVudC5sZW5ndGhzW2lu
ZGV4IC0gMV0gOiAwOworfQorCitmdW5jdGlvbiBpbnNlcnRMZWZ0KHBhcmVudCwgbm9kZSkKK3sK
KyAgICBpZiAobm9kZS50YWJsZS5sZW5ndGggPiAwKQorICAgIHsKKyAgICAgICAgcGFyZW50LnRh
YmxlWzBdID0gbm9kZTsKKyAgICAgICAgcGFyZW50Lmxlbmd0aHNbMF0gPSBsZW5ndGgobm9kZSk7
CisKKyAgICAgICAgdmFyIGxlbiA9IGxlbmd0aChwYXJlbnQudGFibGVbMF0pOworICAgICAgICBm
b3IgKHZhciBpID0gMTsgaSA8IHBhcmVudC5sZW5ndGhzLmxlbmd0aDsgaSsrKQorICAgICAgICB7
CisgICAgICAgICAgICBsZW4gKz0gbGVuZ3RoKHBhcmVudC50YWJsZVtpXSk7CisgICAgICAgICAg
ICBwYXJlbnQubGVuZ3Roc1tpXSA9IGxlbjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICBwYXJlbnQudGFibGUuc2hpZnQoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9
IDE7IGkgPCBwYXJlbnQubGVuZ3Rocy5sZW5ndGg7IGkrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgcGFyZW50Lmxlbmd0aHNbaV0gPSBwYXJlbnQubGVuZ3Roc1tpXSAtIHBhcmVudC5sZW5ndGhz
WzBdOworICAgICAgICB9CisgICAgICAgIHBhcmVudC5sZW5ndGhzLnNoaWZ0KCk7CisgICAgfQor
fQorCisvLyBSZXR1cm5zIHRoZSBleHRyYSBzZWFyY2ggc3RlcHMgZm9yIEUuIFJlZmVyIHRvIHRo
ZSBwYXBlci4KK2Z1bmN0aW9uIGNhbGNUb1JlbW92ZShhLCBiKQoreworICAgIHZhciBzdWJMZW5n
dGhzID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEudGFibGUubGVuZ3RoOyBpKyspCisg
ICAgeworICAgICAgICBzdWJMZW5ndGhzICs9IGEudGFibGVbaV0udGFibGUubGVuZ3RoOworICAg
IH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIudGFibGUubGVuZ3RoOyBpKyspCisgICAgewor
ICAgICAgICBzdWJMZW5ndGhzICs9IGIudGFibGVbaV0udGFibGUubGVuZ3RoOworICAgIH0KKwor
ICAgIHZhciB0b1JlbW92ZSA9IGEudGFibGUubGVuZ3RoICsgYi50YWJsZS5sZW5ndGg7CisgICAg
cmV0dXJuIHRvUmVtb3ZlIC0gKE1hdGguZmxvb3IoKHN1Ykxlbmd0aHMgLSAxKSAvIE0pICsgMSk7
Cit9CisKKy8vIGdldDIsIHNldDIgYW5kIHNhdmVTbG90IGFyZSBoZWxwZXJzIGZvciBhY2Nlc3Np
bmcgZWxlbWVudHMgb3ZlciB0d28gYXJyYXlzLgorZnVuY3Rpb24gZ2V0MihhLCBiLCBpbmRleCkK
K3sKKyAgICByZXR1cm4gaW5kZXggPCBhLmxlbmd0aAorICAgICAgICA/IGFbaW5kZXhdCisgICAg
ICAgIDogYltpbmRleCAtIGEubGVuZ3RoXTsKK30KKworZnVuY3Rpb24gc2V0MihhLCBiLCBpbmRl
eCwgdmFsdWUpCit7CisgICAgaWYgKGluZGV4IDwgYS5sZW5ndGgpCisgICAgeworICAgICAgICBh
W2luZGV4XSA9IHZhbHVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiW2luZGV4
IC0gYS5sZW5ndGhdID0gdmFsdWU7CisgICAgfQorfQorCitmdW5jdGlvbiBzYXZlU2xvdChhLCBi
LCBpbmRleCwgc2xvdCkKK3sKKyAgICBzZXQyKGEudGFibGUsIGIudGFibGUsIGluZGV4LCBzbG90
KTsKKworICAgIHZhciBsID0gKGluZGV4ID09PSAwIHx8IGluZGV4ID09PSBhLmxlbmd0aHMubGVu
Z3RoKQorICAgICAgICA/IDAKKyAgICAgICAgOiBnZXQyKGEubGVuZ3RocywgYS5sZW5ndGhzLCBp
bmRleCAtIDEpOworCisgICAgc2V0MihhLmxlbmd0aHMsIGIubGVuZ3RocywgaW5kZXgsIGwgKyBs
ZW5ndGgoc2xvdCkpOworfQorCisvLyBDcmVhdGVzIGEgbm9kZSBvciBsZWFmIHdpdGggYSBnaXZl
biBsZW5ndGggYXQgdGhlaXIgYXJyYXlzIGZvciBwZXJmb21hbmNlLgorLy8gSXMgb25seSB1c2Vk
IGJ5IHNodWZmbGUuCitmdW5jdGlvbiBjcmVhdGVOb2RlKGgsIGxlbmd0aCkKK3sKKyAgICBpZiAo
bGVuZ3RoIDwgMCkKKyAgICB7CisgICAgICAgIGxlbmd0aCA9IDA7CisgICAgfQorICAgIHZhciBh
ID0geworICAgICAgICBjdG9yOiAnX0FycmF5JywKKyAgICAgICAgaGVpZ2h0OiBoLAorICAgICAg
ICB0YWJsZTogbmV3IEFycmF5KGxlbmd0aCkKKyAgICB9OworICAgIGlmIChoID4gMCkKKyAgICB7
CisgICAgICAgIGEubGVuZ3RocyA9IG5ldyBBcnJheShsZW5ndGgpOworICAgIH0KKyAgICByZXR1
cm4gYTsKK30KKworLy8gUmV0dXJucyBhbiBhcnJheSBvZiB0d28gYmFsYW5jZWQgbm9kZXMuCitm
dW5jdGlvbiBzaHVmZmxlKGEsIGIsIHRvUmVtb3ZlKQoreworICAgIHZhciBuZXdBID0gY3JlYXRl
Tm9kZShhLmhlaWdodCwgTWF0aC5taW4oTSwgYS50YWJsZS5sZW5ndGggKyBiLnRhYmxlLmxlbmd0
aCAtIHRvUmVtb3ZlKSk7CisgICAgdmFyIG5ld0IgPSBjcmVhdGVOb2RlKGEuaGVpZ2h0LCBuZXdB
LnRhYmxlLmxlbmd0aCAtIChhLnRhYmxlLmxlbmd0aCArIGIudGFibGUubGVuZ3RoIC0gdG9SZW1v
dmUpKTsKKworICAgIC8vIFNraXAgdGhlIHNsb3RzIHdpdGggc2l6ZSBNLiBNb3JlIHByZWNpc2U6
IGNvcHkgdGhlIHNsb3QgcmVmZXJlbmNlcworICAgIC8vIHRvIHRoZSBuZXcgbm9kZQorICAgIHZh
ciByZWFkID0gMDsKKyAgICB3aGlsZSAoZ2V0MihhLnRhYmxlLCBiLnRhYmxlLCByZWFkKS50YWJs
ZS5sZW5ndGggJSBNID09PSAwKQorICAgIHsKKyAgICAgICAgc2V0MihuZXdBLnRhYmxlLCBuZXdC
LnRhYmxlLCByZWFkLCBnZXQyKGEudGFibGUsIGIudGFibGUsIHJlYWQpKTsKKyAgICAgICAgc2V0
MihuZXdBLmxlbmd0aHMsIG5ld0IubGVuZ3RocywgcmVhZCwgZ2V0MihhLmxlbmd0aHMsIGIubGVu
Z3RocywgcmVhZCkpOworICAgICAgICByZWFkKys7CisgICAgfQorCisgICAgLy8gUHVsbGluZyBp
dGVtcyBmcm9tIGxlZnQgdG8gcmlnaHQsIGNhY2hpbmcgaW4gYSBzbG90IGJlZm9yZSB3cml0aW5n
CisgICAgLy8gaXQgaW50byB0aGUgbmV3IG5vZGVzLgorICAgIHZhciB3cml0ZSA9IHJlYWQ7Cisg
ICAgdmFyIHNsb3QgPSBuZXcgY3JlYXRlTm9kZShhLmhlaWdodCAtIDEsIDApOworICAgIHZhciBm
cm9tID0gMDsKKworICAgIC8vIElmIHRoZSBjdXJyZW50IHNsb3QgaXMgc3RpbGwgY29udGFpbmlu
ZyBkYXRhLCB0aGVuIHRoZXJlIHdpbGwgYmUgYXQKKyAgICAvLyBsZWFzdCBvbmUgbW9yZSB3cml0
ZSwgc28gd2UgZG8gbm90IGJyZWFrIHRoaXMgbG9vcCB5ZXQuCisgICAgd2hpbGUgKHJlYWQgLSB3
cml0ZSAtIChzbG90LnRhYmxlLmxlbmd0aCA+IDAgPyAxIDogMCkgPCB0b1JlbW92ZSkKKyAgICB7
CisgICAgICAgIC8vIEZpbmQgb3V0IHRoZSBtYXggcG9zc2libGUgaXRlbXMgZm9yIGNvcHlpbmcu
CisgICAgICAgIHZhciBzb3VyY2UgPSBnZXQyKGEudGFibGUsIGIudGFibGUsIHJlYWQpOworICAg
ICAgICB2YXIgdG8gPSBNYXRoLm1pbihNIC0gc2xvdC50YWJsZS5sZW5ndGgsIHNvdXJjZS50YWJs
ZS5sZW5ndGgpOworCisgICAgICAgIC8vIENvcHkgYW5kIGFkanVzdCBzaXplIHRhYmxlLgorICAg
ICAgICBzbG90LnRhYmxlID0gc2xvdC50YWJsZS5jb25jYXQoc291cmNlLnRhYmxlLnNsaWNlKGZy
b20sIHRvKSk7CisgICAgICAgIGlmIChzbG90LmhlaWdodCA+IDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHZhciBsZW4gPSBzbG90Lmxlbmd0aHMubGVuZ3RoOworICAgICAgICAgICAgZm9yICh2
YXIgaSA9IGxlbjsgaSA8IGxlbiArIHRvIC0gZnJvbTsgaSsrKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHNsb3QubGVuZ3Roc1tpXSA9IGxlbmd0aChzbG90LnRhYmxlW2ldKTsKKyAg
ICAgICAgICAgICAgICBzbG90Lmxlbmd0aHNbaV0gKz0gKGkgPiAwID8gc2xvdC5sZW5ndGhzW2kg
LSAxXSA6IDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnJvbSArPSB0
bzsKKworICAgICAgICAvLyBPbmx5IHByb2NlZWQgdG8gbmV4dCBzbG90c1tpXSBpZiB0aGUgY3Vy
cmVudCBvbmUgd2FzCisgICAgICAgIC8vIGZ1bGx5IGNvcGllZC4KKyAgICAgICAgaWYgKHNvdXJj
ZS50YWJsZS5sZW5ndGggPD0gdG8pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlYWQrKzsgZnJv
bSA9IDA7CisgICAgICAgIH0KKworICAgICAgICAvLyBPbmx5IGNyZWF0ZSBhIG5ldyBzbG90IGlm
IHRoZSBjdXJyZW50IG9uZSBpcyBmaWxsZWQgdXAuCisgICAgICAgIGlmIChzbG90LnRhYmxlLmxl
bmd0aCA9PT0gTSkKKyAgICAgICAgeworICAgICAgICAgICAgc2F2ZVNsb3QobmV3QSwgbmV3Qiwg
d3JpdGUsIHNsb3QpOworICAgICAgICAgICAgc2xvdCA9IGNyZWF0ZU5vZGUoYS5oZWlnaHQgLSAx
LCAwKTsKKyAgICAgICAgICAgIHdyaXRlKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBD
bGVhbnVwIGFmdGVyIHRoZSBsb29wLiBDb3B5IHRoZSBsYXN0IHNsb3QgaW50byB0aGUgbmV3IG5v
ZGVzLgorICAgIGlmIChzbG90LnRhYmxlLmxlbmd0aCA+IDApCisgICAgeworICAgICAgICBzYXZl
U2xvdChuZXdBLCBuZXdCLCB3cml0ZSwgc2xvdCk7CisgICAgICAgIHdyaXRlKys7CisgICAgfQor
CisgICAgLy8gU2hpZnQgdGhlIHVudG91Y2hlZCBzbG90cyB0byB0aGUgbGVmdAorICAgIHdoaWxl
IChyZWFkIDwgYS50YWJsZS5sZW5ndGggKyBiLnRhYmxlLmxlbmd0aCApCisgICAgeworICAgICAg
ICBzYXZlU2xvdChuZXdBLCBuZXdCLCB3cml0ZSwgZ2V0MihhLnRhYmxlLCBiLnRhYmxlLCByZWFk
KSk7CisgICAgICAgIHJlYWQrKzsKKyAgICAgICAgd3JpdGUrKzsKKyAgICB9CisKKyAgICByZXR1
cm4gW25ld0EsIG5ld0JdOworfQorCisvLyBOYXZpZ2F0aW9uIGZ1bmN0aW9ucworZnVuY3Rpb24g
Ym90UmlnaHQoYSkKK3sKKyAgICByZXR1cm4gYS50YWJsZVthLnRhYmxlLmxlbmd0aCAtIDFdOwor
fQorZnVuY3Rpb24gYm90TGVmdChhKQoreworICAgIHJldHVybiBhLnRhYmxlWzBdOworfQorCisv
LyBDb3BpZXMgYSBub2RlIGZvciB1cGRhdGluZy4gTm90ZSB0aGF0IHlvdSBzaG91bGQgbm90IHVz
ZSB0aGlzIGlmCisvLyBvbmx5IHVwZGF0aW5nIG9ubHkgb25lIG9mICJ0YWJsZSIgb3IgImxlbmd0
aHMiIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgorZnVuY3Rpb24gbm9kZUNvcHkoYSkKK3sKKyAg
ICB2YXIgbmV3QSA9IHsKKyAgICAgICAgY3RvcjogJ19BcnJheScsCisgICAgICAgIGhlaWdodDog
YS5oZWlnaHQsCisgICAgICAgIHRhYmxlOiBhLnRhYmxlLnNsaWNlKCkKKyAgICB9OworICAgIGlm
IChhLmhlaWdodCA+IDApCisgICAgeworICAgICAgICBuZXdBLmxlbmd0aHMgPSBhLmxlbmd0aHMu
c2xpY2UoKTsKKyAgICB9CisgICAgcmV0dXJuIG5ld0E7Cit9CisKKy8vIFJldHVybnMgaG93IG1h
bnkgaXRlbXMgYXJlIGluIHRoZSB0cmVlLgorZnVuY3Rpb24gbGVuZ3RoKGFycmF5KQoreworICAg
IGlmIChhcnJheS5oZWlnaHQgPT09IDApCisgICAgeworICAgICAgICByZXR1cm4gYXJyYXkudGFi
bGUubGVuZ3RoOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gYXJyYXku
bGVuZ3Roc1thcnJheS5sZW5ndGhzLmxlbmd0aCAtIDFdOworICAgIH0KK30KKworLy8gQ2FsY3Vs
YXRlcyBpbiB3aGljaCBzbG90IG9mICJ0YWJsZSIgdGhlIGl0ZW0gcHJvYmFibHkgaXMsIHRoZW4K
Ky8vIGZpbmQgdGhlIGV4YWN0IHNsb3QgdmlhIGZvcndhcmQgc2VhcmNoaW5nIGluICAibGVuZ3Ro
cyIuIFJldHVybnMgdGhlIGluZGV4LgorZnVuY3Rpb24gZ2V0U2xvdChpLCBhKQoreworICAgIHZh
ciBzbG90ID0gaSA+PiAoNSAqIGEuaGVpZ2h0KTsKKyAgICB3aGlsZSAoYS5sZW5ndGhzW3Nsb3Rd
IDw9IGkpCisgICAgeworICAgICAgICBzbG90Kys7CisgICAgfQorICAgIHJldHVybiBzbG90Owor
fQorCisvLyBSZWN1cnNpdmVseSBjcmVhdGVzIGEgdHJlZSB3aXRoIGEgZ2l2ZW4gaGVpZ2h0IGNv
bnRhaW5pbmcKKy8vIG9ubHkgdGhlIGdpdmVuIGl0ZW0uCitmdW5jdGlvbiBjcmVhdGUoaXRlbSwg
aCkKK3sKKyAgICBpZiAoaCA9PT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICBjdG9yOiAnX0FycmF5JywKKyAgICAgICAgICAgIGhlaWdodDogMCwKKyAgICAgICAgICAg
IHRhYmxlOiBbaXRlbV0KKyAgICAgICAgfTsKKyAgICB9CisgICAgcmV0dXJuIHsKKyAgICAgICAg
Y3RvcjogJ19BcnJheScsCisgICAgICAgIGhlaWdodDogaCwKKyAgICAgICAgdGFibGU6IFtjcmVh
dGUoaXRlbSwgaCAtIDEpXSwKKyAgICAgICAgbGVuZ3RoczogWzFdCisgICAgfTsKK30KKworLy8g
UmVjdXJzaXZlbHkgY3JlYXRlcyBhIHRyZWUgdGhhdCBjb250YWlucyB0aGUgZ2l2ZW4gdHJlZS4K
K2Z1bmN0aW9uIHBhcmVudGlzZSh0cmVlLCBoKQoreworICAgIGlmIChoID09PSB0cmVlLmhlaWdo
dCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cmVlOworICAgIH0KKworICAgIHJldHVybiB7Cisg
ICAgICAgIGN0b3I6ICdfQXJyYXknLAorICAgICAgICBoZWlnaHQ6IGgsCisgICAgICAgIHRhYmxl
OiBbcGFyZW50aXNlKHRyZWUsIGggLSAxKV0sCisgICAgICAgIGxlbmd0aHM6IFtsZW5ndGgodHJl
ZSldCisgICAgfTsKK30KKworLy8gRW1waGFzaXplcyBibG9vZCBicm90aGVyaG9vZCBiZW5lYXRo
IHR3byB0cmVlcy4KK2Z1bmN0aW9uIHNpYmxpc2UoYSwgYikKK3sKKyAgICByZXR1cm4geworICAg
ICAgICBjdG9yOiAnX0FycmF5JywKKyAgICAgICAgaGVpZ2h0OiBhLmhlaWdodCArIDEsCisgICAg
ICAgIHRhYmxlOiBbYSwgYl0sCisgICAgICAgIGxlbmd0aHM6IFtsZW5ndGgoYSksIGxlbmd0aChh
KSArIGxlbmd0aChiKV0KKyAgICB9OworfQorCitmdW5jdGlvbiB0b0pTQXJyYXkoYSkKK3sKKyAg
ICB2YXIganNBcnJheSA9IG5ldyBBcnJheShsZW5ndGgoYSkpOworICAgIHRvSlNBcnJheV8oanNB
cnJheSwgMCwgYSk7CisgICAgcmV0dXJuIGpzQXJyYXk7Cit9CisKK2Z1bmN0aW9uIHRvSlNBcnJh
eV8oanNBcnJheSwgaSwgYSkKK3sKKyAgICBmb3IgKHZhciB0ID0gMDsgdCA8IGEudGFibGUubGVu
Z3RoOyB0KyspCisgICAgeworICAgICAgICBpZiAoYS5oZWlnaHQgPT09IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIGpzQXJyYXlbaSArIHRdID0gYS50YWJsZVt0XTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBpbmMgPSB0ID09PSAwID8gMCA6
IGEubGVuZ3Roc1t0IC0gMV07CisgICAgICAgICAgICB0b0pTQXJyYXlfKGpzQXJyYXksIGkgKyBp
bmMsIGEudGFibGVbdF0pOworICAgICAgICB9CisgICAgfQorfQorCitmdW5jdGlvbiBmcm9tSlNB
cnJheShqc0FycmF5KQoreworICAgIGlmIChqc0FycmF5Lmxlbmd0aCA9PT0gMCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlbXB0eTsKKyAgICB9CisgICAgdmFyIGggPSBNYXRoLmZsb29yKE1hdGgu
bG9nKGpzQXJyYXkubGVuZ3RoKSAvIE1hdGgubG9nKE0pKTsKKyAgICByZXR1cm4gZnJvbUpTQXJy
YXlfKGpzQXJyYXksIGgsIDAsIGpzQXJyYXkubGVuZ3RoKTsKK30KKworZnVuY3Rpb24gZnJvbUpT
QXJyYXlfKGpzQXJyYXksIGgsIGZyb20sIHRvKQoreworICAgIGlmIChoID09PSAwKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIGN0b3I6ICdfQXJyYXknLAorICAgICAgICAg
ICAgaGVpZ2h0OiAwLAorICAgICAgICAgICAgdGFibGU6IGpzQXJyYXkuc2xpY2UoZnJvbSwgdG8p
CisgICAgICAgIH07CisgICAgfQorCisgICAgdmFyIHN0ZXAgPSBNYXRoLnBvdyhNLCBoKTsKKyAg
ICB2YXIgdGFibGUgPSBuZXcgQXJyYXkoTWF0aC5jZWlsKCh0byAtIGZyb20pIC8gc3RlcCkpOwor
ICAgIHZhciBsZW5ndGhzID0gbmV3IEFycmF5KHRhYmxlLmxlbmd0aCk7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCB0YWJsZS5sZW5ndGg7IGkrKykKKyAgICB7CisgICAgICAgIHRhYmxlW2ldID0g
ZnJvbUpTQXJyYXlfKGpzQXJyYXksIGggLSAxLCBmcm9tICsgKGkgKiBzdGVwKSwgTWF0aC5taW4o
ZnJvbSArICgoaSArIDEpICogc3RlcCksIHRvKSk7CisgICAgICAgIGxlbmd0aHNbaV0gPSBsZW5n
dGgodGFibGVbaV0pICsgKGkgPiAwID8gbGVuZ3Roc1tpIC0gMV0gOiAwKTsKKyAgICB9CisgICAg
cmV0dXJuIHsKKyAgICAgICAgY3RvcjogJ19BcnJheScsCisgICAgICAgIGhlaWdodDogaCwKKyAg
ICAgICAgdGFibGU6IHRhYmxlLAorICAgICAgICBsZW5ndGhzOiBsZW5ndGhzCisgICAgfTsKK30K
KworcmV0dXJuIHsKKyAgICBlbXB0eTogZW1wdHksCisgICAgZnJvbUxpc3Q6IGZyb21MaXN0LAor
ICAgIHRvTGlzdDogdG9MaXN0LAorICAgIGluaXRpYWxpemU6IEYyKGluaXRpYWxpemUpLAorICAg
IGFwcGVuZDogRjIoYXBwZW5kKSwKKyAgICBwdXNoOiBGMihwdXNoKSwKKyAgICBzbGljZTogRjMo
c2xpY2UpLAorICAgIGdldDogRjIoZ2V0KSwKKyAgICBzZXQ6IEYzKHNldCksCisgICAgbWFwOiBG
MihtYXApLAorICAgIGluZGV4ZWRNYXA6IEYyKGluZGV4ZWRNYXApLAorICAgIGZvbGRsOiBGMyhm
b2xkbCksCisgICAgZm9sZHI6IEYzKGZvbGRyKSwKKyAgICBsZW5ndGg6IGxlbmd0aCwKKworICAg
IHRvSlNBcnJheTogdG9KU0FycmF5LAorICAgIGZyb21KU0FycmF5OiBmcm9tSlNBcnJheQorfTsK
KworfSgpOwordmFyIF9lbG1fbGFuZyRjb3JlJEFycmF5JGFwcGVuZCA9IF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9BcnJheS5hcHBlbmQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQXJyYXkkbGVuZ3RoID0g
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX0FycmF5Lmxlbmd0aDsKK3ZhciBfZWxtX2xhbmckY29yZSRB
cnJheSRpc0VtcHR5ID0gZnVuY3Rpb24gKGFycmF5KSB7CisgICAgcmV0dXJuIF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9VdGlscy5lcSgKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkQXJyYXkkbGVuZ3Ro
KGFycmF5KSwKKyAgICAgICAgMCk7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJEFycmF5JHNsaWNl
ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0FycmF5LnNsaWNlOwordmFyIF9lbG1fbGFuZyRjb3Jl
JEFycmF5JHNldCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9BcnJheS5zZXQ7Cit2YXIgX2VsbV9s
YW5nJGNvcmUkQXJyYXkkZ2V0ID0gRjIoCisgICAgZnVuY3Rpb24gKGksIGFycmF5KSB7CisgICAg
ICAgIHJldHVybiAoKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jbXAoMCwgaSkgPCAxKSAm
JiAoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNtcCgKKyAgICAgICAgICAgIGksCisgICAg
ICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfQXJyYXkubGVuZ3RoKGFycmF5KSkgPCAwKSkg
PyBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0KAorICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0FycmF5LmdldCwgaSwgYXJyYXkpKSA6IF9lbG1fbGFuZyRjb3JlJE1heWJlJE5v
dGhpbmc7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQXJyYXkkcHVzaCA9IF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9BcnJheS5wdXNoOwordmFyIF9lbG1fbGFuZyRjb3JlJEFycmF5JGVtcHR5
ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0FycmF5LmVtcHR5OwordmFyIF9lbG1fbGFuZyRjb3Jl
JEFycmF5JGZpbHRlciA9IEYyKAorICAgIGZ1bmN0aW9uIChpc09rYXksIGFycikgeworICAgICAg
ICB2YXIgdXBkYXRlID0gRjIoCisgICAgICAgICAgICBmdW5jdGlvbiAoeCwgeHMpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gaXNPa2F5KHgpID8gQTIoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Fy
cmF5LnB1c2gsIHgsIHhzKSA6IHhzOworICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBB
MyhfZWxtX2xhbmckY29yZSROYXRpdmVfQXJyYXkuZm9sZGwsIHVwZGF0ZSwgX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0FycmF5LmVtcHR5LCBhcnIpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3Jl
JEFycmF5JGZvbGRyID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0FycmF5LmZvbGRyOwordmFyIF9l
bG1fbGFuZyRjb3JlJEFycmF5JGZvbGRsID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0FycmF5LmZv
bGRsOwordmFyIF9lbG1fbGFuZyRjb3JlJEFycmF5JGluZGV4ZWRNYXAgPSBfZWxtX2xhbmckY29y
ZSROYXRpdmVfQXJyYXkuaW5kZXhlZE1hcDsKK3ZhciBfZWxtX2xhbmckY29yZSRBcnJheSRtYXAg
PSBfZWxtX2xhbmckY29yZSROYXRpdmVfQXJyYXkubWFwOwordmFyIF9lbG1fbGFuZyRjb3JlJEFy
cmF5JHRvSW5kZXhlZExpc3QgPSBmdW5jdGlvbiAoYXJyYXkpIHsKKyAgICByZXR1cm4gQTMoCisg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkbWFwMiwKKyAgICAgICAgRjIoCisgICAgICAgICAg
ICBmdW5jdGlvbiAodjAsIHYxKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHtjdG9yOiAnX1R1
cGxlMicsIF8wOiB2MCwgXzE6IHYxfTsKKyAgICAgICAgICAgIH0pLAorICAgICAgICBfZWxtX2xh
bmckY29yZSROYXRpdmVfTGlzdC5yYW5nZSgKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSROYXRpdmVfQXJyYXkubGVuZ3RoKGFycmF5KSAtIDEpLAorICAgICAgICBf
ZWxtX2xhbmckY29yZSROYXRpdmVfQXJyYXkudG9MaXN0KGFycmF5KSk7Cit9OwordmFyIF9lbG1f
bGFuZyRjb3JlJEFycmF5JHRvTGlzdCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9BcnJheS50b0xp
c3Q7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQXJyYXkkZnJvbUxpc3QgPSBfZWxtX2xhbmckY29yZSRO
YXRpdmVfQXJyYXkuZnJvbUxpc3Q7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQXJyYXkkaW5pdGlhbGl6
ZSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9BcnJheS5pbml0aWFsaXplOwordmFyIF9lbG1fbGFu
ZyRjb3JlJEFycmF5JHJlcGVhdCA9IEYyKAorICAgIGZ1bmN0aW9uIChuLCBlKSB7CisgICAgICAg
IHJldHVybiBBMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEFycmF5JGluaXRpYWxpemUs
CisgICAgICAgICAgICBuLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGFsd2F5
cyhlKSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQXJyYXkkQXJyYXkgPSB7Y3Rvcjog
J0FycmF5J307CisKK3ZhciBfZWxtX2xhbmckY29yZSRUYXNrJG9uRXJyb3IgPSBfZWxtX2xhbmck
Y29yZSROYXRpdmVfU2NoZWR1bGVyLm9uRXJyb3I7Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGFzayRh
bmRUaGVuID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5hbmRUaGVuOwordmFyIF9l
bG1fbGFuZyRjb3JlJFRhc2skc3Bhd25DbWQgPSBGMigKKyAgICBmdW5jdGlvbiAocm91dGVyLCBf
cDApIHsKKyAgICAgICAgdmFyIF9wMSA9IF9wMDsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9TY2hlZHVsZXIuc3Bhd24oCisgICAgICAgICAgICBBMigKKyAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSRUYXNrJGFuZFRoZW4sCisgICAgICAgICAgICAgICAgX3AxLl8w
LAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtJHNlbmRUb0FwcChyb3V0
ZXIpKSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGFzayRmYWlsID0gX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX1NjaGVkdWxlci5mYWlsOwordmFyIF9lbG1fbGFuZyRjb3JlJFRhc2skbWFw
RXJyb3IgPSBGMigKKyAgICBmdW5jdGlvbiAoZiwgdGFzaykgeworICAgICAgICByZXR1cm4gQTIo
CisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJG9uRXJyb3IsCisgICAgICAgICAgICB0
YXNrLAorICAgICAgICAgICAgZnVuY3Rpb24gKGVycikgeworICAgICAgICAgICAgICAgIHJldHVy
biBfZWxtX2xhbmckY29yZSRUYXNrJGZhaWwoCisgICAgICAgICAgICAgICAgICAgIGYoZXJyKSk7
CisgICAgICAgICAgICB9KTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRUYXNrJHN1Y2Nl
ZWQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1bGVyLnN1Y2NlZWQ7Cit2YXIgX2VsbV9s
YW5nJGNvcmUkVGFzayRtYXAgPSBGMigKKyAgICBmdW5jdGlvbiAoZnVuYywgdGFza0EpIHsKKyAg
ICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVu
LAorICAgICAgICAgICAgdGFza0EsCisgICAgICAgICAgICBmdW5jdGlvbiAoYSkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRUYXNrJHN1Y2NlZWQoCisgICAgICAgICAg
ICAgICAgICAgIGZ1bmMoYSkpOworICAgICAgICAgICAgfSk7CisgICAgfSk7Cit2YXIgX2VsbV9s
YW5nJGNvcmUkVGFzayRtYXAyID0gRjMoCisgICAgZnVuY3Rpb24gKGZ1bmMsIHRhc2tBLCB0YXNr
QikgeworICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNr
JGFuZFRoZW4sCisgICAgICAgICAgICB0YXNrQSwKKyAgICAgICAgICAgIGZ1bmN0aW9uIChhKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xh
bmckY29yZSRUYXNrJGFuZFRoZW4sCisgICAgICAgICAgICAgICAgICAgIHRhc2tCLAorICAgICAg
ICAgICAgICAgICAgICBmdW5jdGlvbiAoYikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIF9lbG1fbGFuZyRjb3JlJFRhc2skc3VjY2VlZCgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBMihmdW5jLCBhLCBiKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgfSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGFzayRtYXAzID0gRjQoCisgICAg
ZnVuY3Rpb24gKGZ1bmMsIHRhc2tBLCB0YXNrQiwgdGFza0MpIHsKKyAgICAgICAgcmV0dXJuIEEy
KAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAgICAg
dGFza0EsCisgICAgICAgICAgICBmdW5jdGlvbiAoYSkgeworICAgICAgICAgICAgICAgIHJldHVy
biBBMigKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAor
ICAgICAgICAgICAgICAgICAgICB0YXNrQiwKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24g
KGIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJGFuZFRoZW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGFza0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rp
b24gKGMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFu
ZyRjb3JlJFRhc2skc3VjY2VlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEEzKGZ1bmMsIGEsIGIsIGMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICB9KTsKK3ZhciBfZWxt
X2xhbmckY29yZSRUYXNrJG1hcDQgPSBGNSgKKyAgICBmdW5jdGlvbiAoZnVuYywgdGFza0EsIHRh
c2tCLCB0YXNrQywgdGFza0QpIHsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAgICAgdGFza0EsCisgICAgICAgICAg
ICBmdW5jdGlvbiAoYSkgeworICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAg
ICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAgICAgICAgICAg
ICB0YXNrQiwKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSRUYXNrJGFuZFRoZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFz
a0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGFza0QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmdW5jdGlvbiAoZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRUYXNrJHN1Y2NlZWQoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEE0KGZ1bmMsIGEsIGIsIGMsIGQpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0p
OworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJFRhc2skbWFwNSA9IEY2KAorICAgIGZ1bmN0
aW9uIChmdW5jLCB0YXNrQSwgdGFza0IsIHRhc2tDLCB0YXNrRCwgdGFza0UpIHsKKyAgICAgICAg
cmV0dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAg
ICAgICAgICAgdGFza0EsCisgICAgICAgICAgICBmdW5jdGlvbiAoYSkgeworICAgICAgICAgICAg
ICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRh
bmRUaGVuLAorICAgICAgICAgICAgICAgICAgICB0YXNrQiwKKyAgICAgICAgICAgICAgICAgICAg
ZnVuY3Rpb24gKGIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJGFuZFRoZW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGFza0MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZnVuY3Rpb24gKGMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUk
VGFzayRhbmRUaGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFza0Qs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRh
bmRUaGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNr
RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24g
KGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBfZWxtX2xhbmckY29yZSRUYXNrJHN1Y2NlZWQoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTUoZnVuYywgYSwgYiwgYywgZCwgZSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgIH0p
OwordmFyIF9lbG1fbGFuZyRjb3JlJFRhc2skYW5kTWFwID0gRjIoCisgICAgZnVuY3Rpb24gKHRh
c2tGdW5jLCB0YXNrVmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAgICAgdGFza0Z1bmMsCisgICAgICAg
ICAgICBmdW5jdGlvbiAoZnVuYykgeworICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAgICAg
ICAgICAgICB0YXNrVmFsdWUsCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFRhc2skc3Vj
Y2VlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jKHZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5n
JGNvcmUkVGFzayRzZXF1ZW5jZSA9IGZ1bmN0aW9uICh0YXNrcykgeworICAgIHZhciBfcDIgPSB0
YXNrczsKKyAgICBpZiAoX3AyLmN0b3IgPT09ICdbXScpIHsKKyAgICAgICAgcmV0dXJuIF9lbG1f
bGFuZyRjb3JlJFRhc2skc3VjY2VlZCgKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICBbXSkpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHJldHVybiBBMygKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRhc2skbWFwMiwK
KyAgICAgICAgICAgIEYyKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh4LCB5KSB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBBMihfZWxtX2xhbmckY29yZSRMaXN0X29wc1snOjonXSwg
eCwgeSk7CisgICAgICAgICAgICAgICAgfSksCisgICAgICAgICAgICBfcDIuXzAsCisgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSRUYXNrJHNlcXVlbmNlKF9wMi5fMSkpOworICAgIH0KK307Cit2
YXIgX2VsbV9sYW5nJGNvcmUkVGFzayRvbkVmZmVjdHMgPSBGMygKKyAgICBmdW5jdGlvbiAocm91
dGVyLCBjb21tYW5kcywgc3RhdGUpIHsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkVGFzayRtYXAsCisgICAgICAgICAgICBmdW5jdGlvbiAoX3AzKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHtjdG9yOiAnX1R1cGxlMCd9OworICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRhc2skc2VxdWVuY2UoCisgICAgICAgICAgICAg
ICAgQTIoCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkbWFwLAorICAg
ICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJHNwYXduQ21kKHJvdXRlciksCisg
ICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzKSkpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRj
b3JlJFRhc2skdG9NYXliZSA9IGZ1bmN0aW9uICh0YXNrKSB7CisgICAgcmV0dXJuIEEyKAorICAg
ICAgICBfZWxtX2xhbmckY29yZSRUYXNrJG9uRXJyb3IsCisgICAgICAgIEEyKF9lbG1fbGFuZyRj
b3JlJFRhc2skbWFwLCBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0LCB0YXNrKSwKKyAgICAgICAg
ZnVuY3Rpb24gKF9wNCkgeworICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFRhc2sk
c3VjY2VlZChfZWxtX2xhbmckY29yZSRNYXliZSROb3RoaW5nKTsKKyAgICAgICAgfSk7Cit9Owor
dmFyIF9lbG1fbGFuZyRjb3JlJFRhc2skZnJvbU1heWJlID0gRjIoCisgICAgZnVuY3Rpb24gKCRk
ZWZhdWx0LCBtYXliZSkgeworICAgICAgICB2YXIgX3A1ID0gbWF5YmU7CisgICAgICAgIGlmIChf
cDUuY3RvciA9PT0gJ0p1c3QnKSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUk
VGFzayRzdWNjZWVkKF9wNS5fMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1
cm4gX2VsbV9sYW5nJGNvcmUkVGFzayRmYWlsKCRkZWZhdWx0KTsKKyAgICAgICAgfQorICAgIH0p
OwordmFyIF9lbG1fbGFuZyRjb3JlJFRhc2skdG9SZXN1bHQgPSBmdW5jdGlvbiAodGFzaykgewor
ICAgIHJldHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRvbkVycm9yLAorICAg
ICAgICBBMihfZWxtX2xhbmckY29yZSRUYXNrJG1hcCwgX2VsbV9sYW5nJGNvcmUkUmVzdWx0JE9r
LCB0YXNrKSwKKyAgICAgICAgZnVuY3Rpb24gKG1zZykgeworICAgICAgICAgICAgcmV0dXJuIF9l
bG1fbGFuZyRjb3JlJFRhc2skc3VjY2VlZCgKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSRSZXN1bHQkRXJyKG1zZykpOworICAgICAgICB9KTsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUk
VGFzayRmcm9tUmVzdWx0ID0gZnVuY3Rpb24gKHJlc3VsdCkgeworICAgIHZhciBfcDYgPSByZXN1
bHQ7CisgICAgaWYgKF9wNi5jdG9yID09PSAnT2snKSB7CisgICAgICAgIHJldHVybiBfZWxtX2xh
bmckY29yZSRUYXNrJHN1Y2NlZWQoX3A2Ll8wKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1
cm4gX2VsbV9sYW5nJGNvcmUkVGFzayRmYWlsKF9wNi5fMCk7CisgICAgfQorfTsKK3ZhciBfZWxt
X2xhbmckY29yZSRUYXNrJGluaXQgPSBfZWxtX2xhbmckY29yZSRUYXNrJHN1Y2NlZWQoCisgICAg
e2N0b3I6ICdfVHVwbGUwJ30pOwordmFyIF9lbG1fbGFuZyRjb3JlJFRhc2skb25TZWxmTXNnID0g
RjMoCisgICAgZnVuY3Rpb24gKF9wOSwgX3A4LCBfcDcpIHsKKyAgICAgICAgcmV0dXJuIF9lbG1f
bGFuZyRjb3JlJFRhc2skc3VjY2VlZCgKKyAgICAgICAgICAgIHtjdG9yOiAnX1R1cGxlMCd9KTsK
KyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRUYXNrJGNvbW1hbmQgPSBfZWxtX2xhbmckY29y
ZSROYXRpdmVfUGxhdGZvcm0ubGVhZignVGFzaycpOwordmFyIF9lbG1fbGFuZyRjb3JlJFRhc2sk
VCA9IGZ1bmN0aW9uIChhKSB7CisgICAgcmV0dXJuIHtjdG9yOiAnVCcsIF8wOiBhfTsKK307Cit2
YXIgX2VsbV9sYW5nJGNvcmUkVGFzayRwZXJmb3JtID0gRjMoCisgICAgZnVuY3Rpb24gKG9uRmFp
bCwgb25TdWNjZXNzLCB0YXNrKSB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRUYXNr
JGNvbW1hbmQoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJFQoCisgICAgICAgICAg
ICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRhc2skb25FcnJv
ciwKKyAgICAgICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkVGFzayRtYXAsIG9uU3Vj
Y2VzcywgdGFzayksCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh4KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkVGFzayRzdWNjZWVkKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9uRmFpbCh4KSk7CisgICAgICAgICAgICAgICAgICAg
IH0pKSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGFzayRjbWRNYXAgPSBGMigKKyAg
ICBmdW5jdGlvbiAodGFnZ2VyLCBfcDEwKSB7CisgICAgICAgIHZhciBfcDExID0gX3AxMDsKKyAg
ICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFRhc2skVCgKKyAgICAgICAgICAgIEEyKF9lbG1f
bGFuZyRjb3JlJFRhc2skbWFwLCB0YWdnZXIsIF9wMTEuXzApKTsKKyAgICB9KTsKK19lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9QbGF0Zm9ybS5lZmZlY3RNYW5hZ2Vyc1snVGFzayddID0ge3BrZzogJ2Vs
bS1sYW5nL2NvcmUnLCBpbml0OiBfZWxtX2xhbmckY29yZSRUYXNrJGluaXQsIG9uRWZmZWN0czog
X2VsbV9sYW5nJGNvcmUkVGFzayRvbkVmZmVjdHMsIG9uU2VsZk1zZzogX2VsbV9sYW5nJGNvcmUk
VGFzayRvblNlbGZNc2csIHRhZzogJ2NtZCcsIGNtZE1hcDogX2VsbV9sYW5nJGNvcmUkVGFzayRj
bWRNYXB9OworCit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRmb2xkciA9IEYzKAorICAgIGZ1bmN0
aW9uIChmLCBhY2MsIHQpIHsKKyAgICAgICAgZm9sZHI6CisgICAgICAgIHdoaWxlICh0cnVlKSB7
CisgICAgICAgICAgICB2YXIgX3AwID0gdDsKKyAgICAgICAgICAgIGlmIChfcDAuY3RvciA9PT0g
J1JCRW1wdHlfZWxtX2J1aWx0aW4nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGFjYzsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIF92MSA9IGYsCisgICAgICAg
ICAgICAgICAgICAgIF92MiA9IEEzKAorICAgICAgICAgICAgICAgICAgICBmLAorICAgICAgICAg
ICAgICAgICAgICBfcDAuXzEsCisgICAgICAgICAgICAgICAgICAgIF9wMC5fMiwKKyAgICAgICAg
ICAgICAgICAgICAgQTMoX2VsbV9sYW5nJGNvcmUkRGljdCRmb2xkciwgZiwgYWNjLCBfcDAuXzQp
KSwKKyAgICAgICAgICAgICAgICAgICAgX3YzID0gX3AwLl8zOworICAgICAgICAgICAgICAgIGYg
PSBfdjE7CisgICAgICAgICAgICAgICAgYWNjID0gX3YyOworICAgICAgICAgICAgICAgIHQgPSBf
djM7CisgICAgICAgICAgICAgICAgY29udGludWUgZm9sZHI7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JGtleXMgPSBmdW5jdGlvbiAo
ZGljdCkgeworICAgIHJldHVybiBBMygKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCRmb2xk
ciwKKyAgICAgICAgRjMoCisgICAgICAgICAgICBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwga2V5TGlz
dCkgeworICAgICAgICAgICAgICAgIHJldHVybiBBMihfZWxtX2xhbmckY29yZSRMaXN0X29wc1sn
OjonXSwga2V5LCBrZXlMaXN0KTsKKyAgICAgICAgICAgIH0pLAorICAgICAgICBfZWxtX2xhbmck
Y29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICBbXSksCisgICAgICAgIGRp
Y3QpOworfTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JHZhbHVlcyA9IGZ1bmN0aW9uIChkaWN0
KSB7CisgICAgcmV0dXJuIEEzKAorICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JGZvbGRyLAor
ICAgICAgICBGMygKKyAgICAgICAgICAgIGZ1bmN0aW9uIChrZXksIHZhbHVlLCB2YWx1ZUxpc3Qp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6
J10sIHZhbHVlLCB2YWx1ZUxpc3QpOworICAgICAgICAgICAgfSksCisgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgIFtdKSwKKyAgICAgICAg
ZGljdCk7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkdG9MaXN0ID0gZnVuY3Rpb24gKGRp
Y3QpIHsKKyAgICByZXR1cm4gQTMoCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkZm9sZHIs
CisgICAgICAgIEYzKAorICAgICAgICAgICAgZnVuY3Rpb24gKGtleSwgdmFsdWUsIGxpc3QpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJExpc3Rfb3BzWyc6OiddLAorICAgICAgICAgICAgICAgICAgICB7Y3RvcjogJ19UdXBs
ZTInLCBfMDoga2V5LCBfMTogdmFsdWV9LAorICAgICAgICAgICAgICAgICAgICBsaXN0KTsKKyAg
ICAgICAgICAgIH0pLAorICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJy
YXkoCisgICAgICAgICAgICBbXSksCisgICAgICAgIGRpY3QpOworfTsKK3ZhciBfZWxtX2xhbmck
Y29yZSREaWN0JGZvbGRsID0gRjMoCisgICAgZnVuY3Rpb24gKGYsIGFjYywgZGljdCkgeworICAg
ICAgICBmb2xkbDoKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIHZhciBfcDEg
PSBkaWN0OworICAgICAgICAgICAgaWYgKF9wMS5jdG9yID09PSAnUkJFbXB0eV9lbG1fYnVpbHRp
bicpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYWNjOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICB2YXIgX3Y1ID0gZiwKKyAgICAgICAgICAgICAgICAgICAgX3Y2ID0g
QTMoCisgICAgICAgICAgICAgICAgICAgIGYsCisgICAgICAgICAgICAgICAgICAgIF9wMS5fMSwK
KyAgICAgICAgICAgICAgICAgICAgX3AxLl8yLAorICAgICAgICAgICAgICAgICAgICBBMyhfZWxt
X2xhbmckY29yZSREaWN0JGZvbGRsLCBmLCBhY2MsIF9wMS5fMykpLAorICAgICAgICAgICAgICAg
ICAgICBfdjcgPSBfcDEuXzQ7CisgICAgICAgICAgICAgICAgZiA9IF92NTsKKyAgICAgICAgICAg
ICAgICBhY2MgPSBfdjY7CisgICAgICAgICAgICAgICAgZGljdCA9IF92NzsKKyAgICAgICAgICAg
ICAgICBjb250aW51ZSBmb2xkbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOwor
dmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkbWVyZ2UgPSBGNigKKyAgICBmdW5jdGlvbiAobGVmdFN0
ZXAsIGJvdGhTdGVwLCByaWdodFN0ZXAsIGxlZnREaWN0LCByaWdodERpY3QsIGluaXRpYWxSZXN1
bHQpIHsKKyAgICAgICAgdmFyIHN0ZXBTdGF0ZSA9IEYzKAorICAgICAgICAgICAgZnVuY3Rpb24g
KHJLZXksIHJWYWx1ZSwgX3AyKSB7CisgICAgICAgICAgICAgICAgc3RlcFN0YXRlOgorICAgICAg
ICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBfcDMgPSBf
cDI7CisgICAgICAgICAgICAgICAgICAgIHZhciBfcDkgPSBfcDMuXzE7CisgICAgICAgICAgICAg
ICAgICAgIHZhciBfcDggPSBfcDMuXzA7CisgICAgICAgICAgICAgICAgICAgIHZhciBfcDQgPSBf
cDg7CisgICAgICAgICAgICAgICAgICAgIGlmIChfcDQuY3RvciA9PT0gJ1tdJykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
dG9yOiAnX1R1cGxlMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXzA6IF9wOCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfMTogQTMocmlnaHRTdGVwLCByS2V5LCByVmFsdWUs
IF9wOSkKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3A3ID0gX3A0Ll8xOworICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIF9wNiA9IF9wNC5fMC5fMTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBfcDUgPSBfcDQuXzAuXzA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNtcChfcDUsIHJLZXkpIDwgMCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBfdjEwID0gcktleSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX3YxMSA9IHJWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX3YxMiA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RvcjogJ19U
dXBsZTInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfMDogX3A3LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfMTogQTMobGVmdFN0ZXAsIF9wNSwgX3A2LCBfcDkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByS2V5ID0gX3YxMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByVmFsdWUgPSBf
djExOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9wMiA9IF92MTI7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWUgc3RlcFN0YXRlOworICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX1V0aWxzLmNtcChfcDUsIHJLZXkpID4gMCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3RvcjogJ19UdXBsZTInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXzA6IF9wOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8xOiBBMyhy
aWdodFN0ZXAsIHJLZXksIHJWYWx1ZSwgX3A5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjdG9yOiAnX1R1cGxlMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfMDogX3A3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXzE6
IEE0KGJvdGhTdGVwLCBfcDUsIF9wNiwgclZhbHVlLCBfcDkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSk7CisgICAgICAgIHZhciBfcDEwID0gQTMoCisgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSREaWN0JGZvbGRsLAorICAgICAgICAgICAgc3RlcFN0YXRlLAorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGN0b3I6ICdfVHVwbGUyJywKKyAgICAgICAgICAgICAg
ICBfMDogX2VsbV9sYW5nJGNvcmUkRGljdCR0b0xpc3QobGVmdERpY3QpLAorICAgICAgICAgICAg
ICAgIF8xOiBpbml0aWFsUmVzdWx0CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgcmlnaHRE
aWN0KTsKKyAgICAgICAgdmFyIGxlZnRvdmVycyA9IF9wMTAuXzA7CisgICAgICAgIHZhciBpbnRl
cm1lZGlhdGVSZXN1bHQgPSBfcDEwLl8xOworICAgICAgICByZXR1cm4gQTMoCisgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSRMaXN0JGZvbGRsLAorICAgICAgICAgICAgRjIoCisgICAgICAgICAg
ICAgICAgZnVuY3Rpb24gKF9wMTEsIHJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICB2YXIg
X3AxMiA9IF9wMTE7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMyhsZWZ0U3RlcCwgX3Ax
Mi5fMCwgX3AxMi5fMSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9KSwKKyAgICAgICAgICAg
IGludGVybWVkaWF0ZVJlc3VsdCwKKyAgICAgICAgICAgIGxlZnRvdmVycyk7CisgICAgfSk7Cit2
YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRyZXBvcnRSZW1CdWcgPSBGNCgKKyAgICBmdW5jdGlvbiAo
bXNnLCBjLCBsZ290LCByZ290KSB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRp
dmVfRGVidWcuY3Jhc2goCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRTdHJpbmckY29uY2F0
KAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgK
KyAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAgJ0ludGVybmFs
IHJlZC1ibGFjayB0cmVlIGludmFyaWFudCB2aW9sYXRlZCwgZXhwZWN0ZWQgJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICcgYW5kIGdvdCAn
LAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHRvU3RyaW5n
KGMpLAorICAgICAgICAgICAgICAgICAgICAgICAgJy8nLAorICAgICAgICAgICAgICAgICAgICAg
ICAgbGdvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICcvJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJnb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAnXG5QbGVhc2UgcmVwb3J0IHRo
aXMgYnVnIHRvIDxodHRwczovL2dpdGh1Yi5jb20vZWxtLWxhbmcvY29yZS9pc3N1ZXM+JworICAg
ICAgICAgICAgICAgICAgICBdKSkpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3Qk
aXNCQmxhY2sgPSBmdW5jdGlvbiAoZGljdCkgeworICAgIHZhciBfcDEzID0gZGljdDsKKyAgICBf
djE0XzI6CisgICAgZG8geworICAgICAgICBpZiAoX3AxMy5jdG9yID09PSAnUkJOb2RlX2VsbV9i
dWlsdGluJykgeworICAgICAgICAgICAgaWYgKF9wMTMuXzAuY3RvciA9PT0gJ0JCbGFjaycpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgYnJlYWsgX3YxNF8yOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgaWYgKF9wMTMuXzAuY3RvciA9PT0gJ0xCQmxhY2snKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGJyZWFrIF92MTRfMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gd2hpbGUo
ZmFsc2UpOworICAgIHJldHVybiBmYWxzZTsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRz
aXplSGVscCA9IEYyKAorICAgIGZ1bmN0aW9uIChuLCBkaWN0KSB7CisgICAgICAgIHNpemVIZWxw
OgorICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgdmFyIF9wMTQgPSBkaWN0Owor
ICAgICAgICAgICAgaWYgKF9wMTQuY3RvciA9PT0gJ1JCRW1wdHlfZWxtX2J1aWx0aW4nKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG47CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHZhciBfdjE2ID0gQTIoX2VsbV9sYW5nJGNvcmUkRGljdCRzaXplSGVscCwgbiArIDEs
IF9wMTQuXzQpLAorICAgICAgICAgICAgICAgICAgICBfdjE3ID0gX3AxNC5fMzsKKyAgICAgICAg
ICAgICAgICBuID0gX3YxNjsKKyAgICAgICAgICAgICAgICBkaWN0ID0gX3YxNzsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZSBzaXplSGVscDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3Qkc2l6ZSA9IGZ1bmN0aW9uIChkaWN0KSB7Cisg
ICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRjb3JlJERpY3Qkc2l6ZUhlbHAsIDAsIGRpY3QpOworfTsK
K3ZhciBfZWxtX2xhbmckY29yZSREaWN0JGdldCA9IEYyKAorICAgIGZ1bmN0aW9uICh0YXJnZXRL
ZXksIGRpY3QpIHsKKyAgICAgICAgZ2V0OgorICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAg
ICAgICAgdmFyIF9wMTUgPSBkaWN0OworICAgICAgICAgICAgaWYgKF9wMTUuY3RvciA9PT0gJ1JC
RW1wdHlfZWxtX2J1aWx0aW4nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRj
b3JlJE1heWJlJE5vdGhpbmc7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHZhciBfcDE2ID0gQTIoX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGNvbXBhcmUsIHRhcmdldEtleSwg
X3AxNS5fMSk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChfcDE2LmN0b3IpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSAnTFQnOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF92MjAg
PSB0YXJnZXRLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3YyMSA9IF9wMTUuXzM7
CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRLZXkgPSBfdjIwOworICAgICAgICAgICAg
ICAgICAgICAgICAgZGljdCA9IF92MjE7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZSBnZXQ7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0VRJzoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0KF9wMTUuXzIpOworICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF92MjIg
PSB0YXJnZXRLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3YyMyA9IF9wMTUuXzQ7
CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRLZXkgPSBfdjIyOworICAgICAgICAgICAg
ICAgICAgICAgICAgZGljdCA9IF92MjM7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZSBnZXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRtZW1iZXIgPSBGMigKKyAgICBmdW5jdGlvbiAo
a2V5LCBkaWN0KSB7CisgICAgICAgIHZhciBfcDE3ID0gQTIoX2VsbV9sYW5nJGNvcmUkRGljdCRn
ZXQsIGtleSwgZGljdCk7CisgICAgICAgIGlmIChfcDE3LmN0b3IgPT09ICdKdXN0JykgeworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JG1h
eFdpdGhEZWZhdWx0ID0gRjMoCisgICAgZnVuY3Rpb24gKGssIHYsIHIpIHsKKyAgICAgICAgbWF4
V2l0aERlZmF1bHQ6CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICB2YXIgX3Ax
OCA9IHI7CisgICAgICAgICAgICBpZiAoX3AxOC5jdG9yID09PSAnUkJFbXB0eV9lbG1fYnVpbHRp
bicpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4ge2N0b3I6ICdfVHVwbGUyJywgXzA6IGssIF8x
OiB2fTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIF92MjYgPSBf
cDE4Ll8xLAorICAgICAgICAgICAgICAgICAgICBfdjI3ID0gX3AxOC5fMiwKKyAgICAgICAgICAg
ICAgICAgICAgX3YyOCA9IF9wMTguXzQ7CisgICAgICAgICAgICAgICAgayA9IF92MjY7CisgICAg
ICAgICAgICAgICAgdiA9IF92Mjc7CisgICAgICAgICAgICAgICAgciA9IF92Mjg7CisgICAgICAg
ICAgICAgICAgY29udGludWUgbWF4V2l0aERlZmF1bHQ7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JE5CbGFjayA9IHtjdG9yOiAnTkJs
YWNrJ307Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRCQmxhY2sgPSB7Y3RvcjogJ0JCbGFjayd9
OwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkQmxhY2sgPSB7Y3RvcjogJ0JsYWNrJ307Cit2YXIg
X2VsbV9sYW5nJGNvcmUkRGljdCRibGFja2lzaCA9IGZ1bmN0aW9uICh0KSB7CisgICAgdmFyIF9w
MTkgPSB0OworICAgIGlmIChfcDE5LmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSB7Cisg
ICAgICAgIHZhciBfcDIwID0gX3AxOS5fMDsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9VdGlscy5lcShfcDIwLCBfZWxtX2xhbmckY29yZSREaWN0JEJsYWNrKSB8fCBfZWxt
X2xhbmckY29yZSROYXRpdmVfVXRpbHMuZXEoX3AyMCwgX2VsbV9sYW5nJGNvcmUkRGljdCRCQmxh
Y2spOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307Cit2YXIg
X2VsbV9sYW5nJGNvcmUkRGljdCRSZWQgPSB7Y3RvcjogJ1JlZCd9OwordmFyIF9lbG1fbGFuZyRj
b3JlJERpY3QkbW9yZUJsYWNrID0gZnVuY3Rpb24gKGNvbG9yKSB7CisgICAgdmFyIF9wMjEgPSBj
b2xvcjsKKyAgICBzd2l0Y2ggKF9wMjEuY3RvcikgeworICAgICAgICBjYXNlICdCbGFjayc6Cisg
ICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkRGljdCRCQmxhY2s7CisgICAgICAgIGNh
c2UgJ1JlZCc6CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkRGljdCRCbGFjazsK
KyAgICAgICAgY2FzZSAnTkJsYWNrJzoKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29y
ZSREaWN0JFJlZDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xh
bmckY29yZSROYXRpdmVfRGVidWcuY3Jhc2goJ0NhblwndCBtYWtlIGEgZG91YmxlIGJsYWNrIG5v
ZGUgbW9yZSBibGFjayEnKTsKKyAgICB9Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkbGVz
c0JsYWNrID0gZnVuY3Rpb24gKGNvbG9yKSB7CisgICAgdmFyIF9wMjIgPSBjb2xvcjsKKyAgICBz
d2l0Y2ggKF9wMjIuY3RvcikgeworICAgICAgICBjYXNlICdCQmxhY2snOgorICAgICAgICAgICAg
cmV0dXJuIF9lbG1fbGFuZyRjb3JlJERpY3QkQmxhY2s7CisgICAgICAgIGNhc2UgJ0JsYWNrJzoK
KyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSREaWN0JFJlZDsKKyAgICAgICAgY2Fz
ZSAnUmVkJzoKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSREaWN0JE5CbGFjazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRp
dmVfRGVidWcuY3Jhc2goJ0NhblwndCBtYWtlIGEgbmVnYXRpdmUgYmxhY2sgbm9kZSBsZXNzIGJs
YWNrIScpOworICAgIH0KK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRMQkJsYWNrID0ge2N0
b3I6ICdMQkJsYWNrJ307Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRMQmxhY2sgPSB7Y3Rvcjog
J0xCbGFjayd9OwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkUkJFbXB0eV9lbG1fYnVpbHRpbiA9
IGZ1bmN0aW9uIChhKSB7CisgICAgcmV0dXJuIHtjdG9yOiAnUkJFbXB0eV9lbG1fYnVpbHRpbics
IF8wOiBhfTsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRlbXB0eSA9IF9lbG1fbGFuZyRj
b3JlJERpY3QkUkJFbXB0eV9lbG1fYnVpbHRpbihfZWxtX2xhbmckY29yZSREaWN0JExCbGFjayk7
Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRpc0VtcHR5ID0gZnVuY3Rpb24gKGRpY3QpIHsKKyAg
ICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmVxKGRpY3QsIF9lbG1fbGFuZyRj
b3JlJERpY3QkZW1wdHkpOworfTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JFJCTm9kZV9lbG1f
YnVpbHRpbiA9IEY1KAorICAgIGZ1bmN0aW9uIChhLCBiLCBjLCBkLCBlKSB7CisgICAgICAgIHJl
dHVybiB7Y3RvcjogJ1JCTm9kZV9lbG1fYnVpbHRpbicsIF8wOiBhLCBfMTogYiwgXzI6IGMsIF8z
OiBkLCBfNDogZX07CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRlbnN1cmVCbGFj
a1Jvb3QgPSBmdW5jdGlvbiAoZGljdCkgeworICAgIHZhciBfcDIzID0gZGljdDsKKyAgICBpZiAo
KF9wMjMuY3RvciA9PT0gJ1JCTm9kZV9lbG1fYnVpbHRpbicpICYmIChfcDIzLl8wLmN0b3IgPT09
ICdSZWQnKSkgeworICAgICAgICByZXR1cm4gQTUoX2VsbV9sYW5nJGNvcmUkRGljdCRSQk5vZGVf
ZWxtX2J1aWx0aW4sIF9lbG1fbGFuZyRjb3JlJERpY3QkQmxhY2ssIF9wMjMuXzEsIF9wMjMuXzIs
IF9wMjMuXzMsIF9wMjMuXzQpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBkaWN0Owor
ICAgIH0KK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRsZXNzQmxhY2tUcmVlID0gZnVuY3Rp
b24gKGRpY3QpIHsKKyAgICB2YXIgX3AyNCA9IGRpY3Q7CisgICAgaWYgKF9wMjQuY3RvciA9PT0g
J1JCTm9kZV9lbG1fYnVpbHRpbicpIHsKKyAgICAgICAgcmV0dXJuIEE1KAorICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkRGljdCRSQk5vZGVfZWxtX2J1aWx0aW4sCisgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSREaWN0JGxlc3NCbGFjayhfcDI0Ll8wKSwKKyAgICAgICAgICAgIF9wMjQuXzEs
CisgICAgICAgICAgICBfcDI0Ll8yLAorICAgICAgICAgICAgX3AyNC5fMywKKyAgICAgICAgICAg
IF9wMjQuXzQpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRE
aWN0JFJCRW1wdHlfZWxtX2J1aWx0aW4oX2VsbV9sYW5nJGNvcmUkRGljdCRMQmxhY2spOworICAg
IH0KK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRiYWxhbmNlZFRyZWUgPSBmdW5jdGlvbiAo
Y29sKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uICh4aykgeworICAgICAgICByZXR1cm4gZnVuY3Rp
b24gKHh2KSB7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHlrKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uICh5dikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZnVuY3Rpb24gKHprKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24g
KHp2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoYikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
IChkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBBNSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9l
bG1fbGFuZyRjb3JlJERpY3QkUkJOb2RlX2VsbV9idWlsdGluLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCRsZXNzQmxh
Y2soY29sKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHlrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXYs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBNShfZWxt
X2xhbmckY29yZSREaWN0JFJCTm9kZV9lbG1fYnVpbHRpbiwgX2VsbV9sYW5nJGNvcmUkRGljdCRC
bGFjaywgeGssIHh2LCBhLCBiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEE1KF9lbG1fbGFuZyRjb3JlJERpY3QkUkJOb2RlX2VsbV9idWlsdGluLCBf
ZWxtX2xhbmckY29yZSREaWN0JEJsYWNrLCB6aywgenYsIGMsIGQpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfTsKKyAg
ICAgICAgfTsKKyAgICB9OworfTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JGJsYWNrZW4gPSBm
dW5jdGlvbiAodCkgeworICAgIHZhciBfcDI1ID0gdDsKKyAgICBpZiAoX3AyNS5jdG9yID09PSAn
UkJFbXB0eV9lbG1fYnVpbHRpbicpIHsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJERp
Y3QkUkJFbXB0eV9lbG1fYnVpbHRpbihfZWxtX2xhbmckY29yZSREaWN0JExCbGFjayk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIEE1KF9lbG1fbGFuZyRjb3JlJERpY3QkUkJOb2RlX2Vs
bV9idWlsdGluLCBfZWxtX2xhbmckY29yZSREaWN0JEJsYWNrLCBfcDI1Ll8xLCBfcDI1Ll8yLCBf
cDI1Ll8zLCBfcDI1Ll80KTsKKyAgICB9Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkcmVk
ZGVuID0gZnVuY3Rpb24gKHQpIHsKKyAgICB2YXIgX3AyNiA9IHQ7CisgICAgaWYgKF9wMjYuY3Rv
ciA9PT0gJ1JCRW1wdHlfZWxtX2J1aWx0aW4nKSB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmck
Y29yZSROYXRpdmVfRGVidWcuY3Jhc2goJ2NhblwndCBtYWtlIGEgTGVhZiByZWQnKTsKKyAgICB9
IGVsc2UgeworICAgICAgICByZXR1cm4gQTUoX2VsbV9sYW5nJGNvcmUkRGljdCRSQk5vZGVfZWxt
X2J1aWx0aW4sIF9lbG1fbGFuZyRjb3JlJERpY3QkUmVkLCBfcDI2Ll8xLCBfcDI2Ll8yLCBfcDI2
Ll8zLCBfcDI2Ll80KTsKKyAgICB9Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkYmFsYW5j
ZUhlbHAgPSBmdW5jdGlvbiAodHJlZSkgeworICAgIHZhciBfcDI3ID0gdHJlZTsKKyAgICBfdjM2
XzY6CisgICAgZG8geworICAgICAgICBfdjM2XzU6CisgICAgICAgIGRvIHsKKyAgICAgICAgICAg
IF92MzZfNDoKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBfdjM2XzM6CisgICAg
ICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICBfdjM2XzI6CisgICAgICAgICAg
ICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF92MzZfMToKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdjM2XzA6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoX3AyNy5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9wMjcuXzMuY3RvciA9PT0gJ1JC
Tm9kZV9lbG1fYnVpbHRpbicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoX3AyNy5fNC5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9wMjcuXzMuXzAu
Y3RvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnUmVkJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKF9wMjcuXzQuXzAuY3RvcikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdSZWQnOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChf
cDI3Ll8zLl8zLmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSAmJiAoX3AyNy5fMy5fMy5f
MC5jdG9yID09PSAnUmVkJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzA7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICgoX3AyNy5fMy5fNC5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykgJiYg
KF9wMjcuXzMuXzQuXzAuY3RvciA9PT0gJ1JlZCcpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZf
MTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKF9wMjcuXzQuXzMuY3RvciA9PT0g
J1JCTm9kZV9lbG1fYnVpbHRpbicpICYmIChfcDI3Ll80Ll8zLl8wLmN0b3IgPT09ICdSZWQnKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWsgX3YzNl8yOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKChfcDI3Ll80Ll80LmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4n
KSAmJiAoX3AyNy5fNC5fNC5fMC5jdG9yID09PSAnUmVkJykpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhayBfdjM2XzM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrIF92MzZfNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAnTkJsYWNrJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoX3AyNy5fMy5fMy5jdG9yID09PSAnUkJO
b2RlX2VsbV9idWlsdGluJykgJiYgKF9wMjcuXzMuXzMuXzAuY3RvciA9PT0gJ1JlZCcpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWsgX3YzNl8wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKF9wMjcuXzMuXzQu
Y3RvciA9PT0gJ1JCTm9kZV9lbG1fYnVpbHRpbicpICYmIChfcDI3Ll8zLl80Ll8wLmN0b3IgPT09
ICdSZWQnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzE7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCgoKChfcDI3Ll8wLmN0b3IgPT09ICdCQmxhY2snKSAmJiAoX3AyNy5fNC5f
My5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykpICYmIChfcDI3Ll80Ll8zLl8wLmN0b3Ig
PT09ICdCbGFjaycpKSAmJiAoX3AyNy5fNC5fNC5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGlu
JykpICYmIChfcDI3Ll80Ll80Ll8wLmN0b3IgPT09ICdCbGFjaycpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhayBfdjM2XzQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
ayBfdjM2XzY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
KF9wMjcuXzMuXzMuY3RvciA9PT0gJ1JCTm9kZV9lbG1fYnVpbHRpbicpICYmIChfcDI3Ll8zLl8z
Ll8wLmN0b3IgPT09ICdSZWQnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfMDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKChfcDI3Ll8zLl80LmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSAm
JiAoX3AyNy5fMy5fNC5fMC5jdG9yID09PSAnUmVkJykpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3Yz
Nl8xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfNjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAnTkJsYWNrJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKF9wMjcuXzQuXzAuY3RvcikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdSZWQnOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChf
cDI3Ll80Ll8zLmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSAmJiAoX3AyNy5fNC5fMy5f
MC5jdG9yID09PSAnUmVkJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzI7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICgoX3AyNy5fNC5fNC5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykgJiYg
KF9wMjcuXzQuXzQuXzAuY3RvciA9PT0gJ1JlZCcpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZf
MzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCgoKF9wMjcuXzAuY3RvciA9PT0g
J0JCbGFjaycpICYmIChfcDI3Ll8zLl8zLmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSkg
JiYgKF9wMjcuXzMuXzMuXzAuY3RvciA9PT0gJ0JsYWNrJykpICYmIChfcDI3Ll8zLl80LmN0b3Ig
PT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSkgJiYgKF9wMjcuXzMuXzQuXzAuY3RvciA9PT0gJ0Js
YWNrJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfNTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfNjsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAnTkJsYWNrJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfcDI3Ll8wLmN0b3IgPT09ICdCQmxhY2snKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCgoKF9wMjcuXzQuXzMuY3RvciA9PT0gJ1JCTm9kZV9lbG1fYnVpbHRpbicp
ICYmIChfcDI3Ll80Ll8zLl8wLmN0b3IgPT09ICdCbGFjaycpKSAmJiAoX3AyNy5fNC5fNC5jdG9y
ID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykpICYmIChfcDI3Ll80Ll80Ll8wLmN0b3IgPT09ICdC
bGFjaycpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfNDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoKCgoX3AyNy5fMy5fMy5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykg
JiYgKF9wMjcuXzMuXzMuXzAuY3RvciA9PT0gJ0JsYWNrJykpICYmIChfcDI3Ll8zLl80LmN0b3Ig
PT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSkgJiYgKF9wMjcuXzMuXzQuXzAuY3RvciA9PT0gJ0Js
YWNrJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfNTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfNjsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3YzNl82OworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCgoKChfcDI3Ll8wLmN0b3IgPT09ICdCQmxhY2snKSAmJiAoX3AyNy5fMy5fMy5jdG9yID09PSAn
UkJOb2RlX2VsbV9idWlsdGluJykpICYmIChfcDI3Ll8zLl8zLl8wLmN0b3IgPT09ICdCbGFjaycp
KSAmJiAoX3AyNy5fMy5fNC5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykpICYmIChfcDI3
Ll8zLl80Ll8wLmN0b3IgPT09ICdCbGFjaycpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3YzNl81OworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzY7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9wMjcuXzQuXzAuY3Rvcikg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICdSZWQnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKChfcDI3Ll80Ll8zLmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1
aWx0aW4nKSAmJiAoX3AyNy5fNC5fMy5fMC5jdG9yID09PSAnUmVkJykpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
ayBfdjM2XzI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoX3AyNy5fNC5fNC5jdG9yID09PSAn
UkJOb2RlX2VsbV9idWlsdGluJykgJiYgKF9wMjcuXzQuXzQuXzAuY3RvciA9PT0gJ1JlZCcpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrIF92MzZfMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhayBfdjM2XzY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdOQmxhY2snOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoKChf
cDI3Ll8wLmN0b3IgPT09ICdCQmxhY2snKSAmJiAoX3AyNy5fNC5fMy5jdG9yID09PSAnUkJOb2Rl
X2VsbV9idWlsdGluJykpICYmIChfcDI3Ll80Ll8zLl8wLmN0b3IgPT09ICdCbGFjaycpKSAmJiAo
X3AyNy5fNC5fNC5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykpICYmIChfcDI3Ll80Ll80
Ll8wLmN0b3IgPT09ICdCbGFjaycpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3YzNl80OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhayBfdjM2XzY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzY7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfcDI3Ll8zLl8wLmN0b3IpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1JlZCc6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KChfcDI3Ll8zLl8zLmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSAmJiAoX3AyNy5fMy5f
My5fMC5jdG9yID09PSAnUmVkJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3YzNl8wOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoX3AyNy5fMy5f
NC5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykgJiYgKF9wMjcuXzMuXzQuXzAuY3RvciA9
PT0gJ1JlZCcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzE7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzY7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdO
QmxhY2snOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICgoKCgoX3AyNy5fMC5jdG9yID09PSAnQkJsYWNrJykgJiYgKF9wMjcuXzMuXzMuY3Rv
ciA9PT0gJ1JCTm9kZV9lbG1fYnVpbHRpbicpKSAmJiAoX3AyNy5fMy5fMy5fMC5jdG9yID09PSAn
QmxhY2snKSkgJiYgKF9wMjcuXzMuXzQuY3RvciA9PT0gJ1JCTm9kZV9lbG1fYnVpbHRpbicpKSAm
JiAoX3AyNy5fMy5fNC5fMC5jdG9yID09PSAnQmxhY2snKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWsgX3YzNl82OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWsgX3YzNl82OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3AyNy5fNC5jdG9yID09PSAnUkJOb2Rl
X2VsbV9idWlsdGluJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKF9wMjcuXzQuXzAuY3RvcikgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnUmVkJzoKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKF9wMjcuXzQuXzMuY3RvciA9PT0g
J1JCTm9kZV9lbG1fYnVpbHRpbicpICYmIChfcDI3Ll80Ll8zLl8wLmN0b3IgPT09ICdSZWQnKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhayBfdjM2XzI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKChfcDI3Ll80Ll80LmN0b3IgPT09ICdSQk5vZGVfZWxt
X2J1aWx0aW4nKSAmJiAoX3AyNy5fNC5fNC5fMC5jdG9yID09PSAnUmVkJykpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
IF92MzZfMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfNjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ05CbGFjayc6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoKChfcDI3Ll8wLmN0
b3IgPT09ICdCQmxhY2snKSAmJiAoX3AyNy5fNC5fMy5jdG9yID09PSAnUkJOb2RlX2VsbV9idWls
dGluJykpICYmIChfcDI3Ll80Ll8zLl8wLmN0b3IgPT09ICdCbGFjaycpKSAmJiAoX3AyNy5fNC5f
NC5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykpICYmIChfcDI3Ll80Ll80Ll8wLmN0b3Ig
PT09ICdCbGFjaycpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzY7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzY7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzY7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3YzNl82OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3
aGlsZShmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFu
ZyRjb3JlJERpY3QkYmFsYW5jZWRUcmVlKF9wMjcuXzApKF9wMjcuXzMuXzMuXzEpKF9wMjcuXzMu
XzMuXzIpKF9wMjcuXzMuXzEpKF9wMjcuXzMuXzIpKF9wMjcuXzEpKF9wMjcuXzIpKF9wMjcuXzMu
XzMuXzMpKF9wMjcuXzMuXzMuXzQpKF9wMjcuXzMuXzQpKF9wMjcuXzQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfSB3aGlsZShmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gX2VsbV9sYW5nJGNvcmUkRGljdCRiYWxhbmNlZFRyZWUoX3AyNy5fMCkoX3AyNy5fMy5fMSko
X3AyNy5fMy5fMikoX3AyNy5fMy5fNC5fMSkoX3AyNy5fMy5fNC5fMikoX3AyNy5fMSkoX3AyNy5f
MikoX3AyNy5fMy5fMykoX3AyNy5fMy5fNC5fMykoX3AyNy5fMy5fNC5fNCkoX3AyNy5fNCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gX2VsbV9sYW5nJGNvcmUkRGljdCRiYWxhbmNlZFRyZWUoX3AyNy5fMCkoX3AyNy5fMSko
X3AyNy5fMikoX3AyNy5fNC5fMy5fMSkoX3AyNy5fNC5fMy5fMikoX3AyNy5fNC5fMSkoX3AyNy5f
NC5fMikoX3AyNy5fMykoX3AyNy5fNC5fMy5fMykoX3AyNy5fNC5fMy5fNCkoX3AyNy5fNC5fNCk7
CisgICAgICAgICAgICAgICAgfSB3aGlsZShmYWxzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IF9lbG1fbGFuZyRjb3JlJERpY3QkYmFsYW5jZWRUcmVlKF9wMjcuXzApKF9wMjcuXzEpKF9wMjcu
XzIpKF9wMjcuXzQuXzEpKF9wMjcuXzQuXzIpKF9wMjcuXzQuXzQuXzEpKF9wMjcuXzQuXzQuXzIp
KF9wMjcuXzMpKF9wMjcuXzQuXzMpKF9wMjcuXzQuXzQuXzMpKF9wMjcuXzQuXzQuXzQpOworICAg
ICAgICAgICAgfSB3aGlsZShmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gQTUoCisgICAgICAg
ICAgICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCRSQk5vZGVfZWxtX2J1aWx0aW4sCisgICAgICAg
ICAgICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCRCbGFjaywKKyAgICAgICAgICAgICAgICBfcDI3
Ll80Ll8zLl8xLAorICAgICAgICAgICAgICAgIF9wMjcuXzQuXzMuXzIsCisgICAgICAgICAgICAg
ICAgQTUoX2VsbV9sYW5nJGNvcmUkRGljdCRSQk5vZGVfZWxtX2J1aWx0aW4sIF9lbG1fbGFuZyRj
b3JlJERpY3QkQmxhY2ssIF9wMjcuXzEsIF9wMjcuXzIsIF9wMjcuXzMsIF9wMjcuXzQuXzMuXzMp
LAorICAgICAgICAgICAgICAgIEE1KAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSREaWN0JGJhbGFuY2UsCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3Qk
QmxhY2ssCisgICAgICAgICAgICAgICAgICAgIF9wMjcuXzQuXzEsCisgICAgICAgICAgICAgICAg
ICAgIF9wMjcuXzQuXzIsCisgICAgICAgICAgICAgICAgICAgIF9wMjcuXzQuXzMuXzQsCisgICAg
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkcmVkZGVuKF9wMjcuXzQuXzQpKSk7
CisgICAgICAgIH0gd2hpbGUoZmFsc2UpOworICAgICAgICByZXR1cm4gQTUoCisgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSREaWN0JFJCTm9kZV9lbG1fYnVpbHRpbiwKKyAgICAgICAgICAgIF9l
bG1fbGFuZyRjb3JlJERpY3QkQmxhY2ssCisgICAgICAgICAgICBfcDI3Ll8zLl80Ll8xLAorICAg
ICAgICAgICAgX3AyNy5fMy5fNC5fMiwKKyAgICAgICAgICAgIEE1KAorICAgICAgICAgICAgICAg
IF9lbG1fbGFuZyRjb3JlJERpY3QkYmFsYW5jZSwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmck
Y29yZSREaWN0JEJsYWNrLAorICAgICAgICAgICAgICAgIF9wMjcuXzMuXzEsCisgICAgICAgICAg
ICAgICAgX3AyNy5fMy5fMiwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JHJl
ZGRlbihfcDI3Ll8zLl8zKSwKKyAgICAgICAgICAgICAgICBfcDI3Ll8zLl80Ll8zKSwKKyAgICAg
ICAgICAgIEE1KF9lbG1fbGFuZyRjb3JlJERpY3QkUkJOb2RlX2VsbV9idWlsdGluLCBfZWxtX2xh
bmckY29yZSREaWN0JEJsYWNrLCBfcDI3Ll8xLCBfcDI3Ll8yLCBfcDI3Ll8zLl80Ll80LCBfcDI3
Ll80KSk7CisgICAgfSB3aGlsZShmYWxzZSk7CisgICAgcmV0dXJuIHRyZWU7Cit9OwordmFyIF9l
bG1fbGFuZyRjb3JlJERpY3QkYmFsYW5jZSA9IEY1KAorICAgIGZ1bmN0aW9uIChjLCBrLCB2LCBs
LCByKSB7CisgICAgICAgIHZhciB0cmVlID0gQTUoX2VsbV9sYW5nJGNvcmUkRGljdCRSQk5vZGVf
ZWxtX2J1aWx0aW4sIGMsIGssIHYsIGwsIHIpOworICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNv
cmUkRGljdCRibGFja2lzaCh0cmVlKSA/IF9lbG1fbGFuZyRjb3JlJERpY3QkYmFsYW5jZUhlbHAo
dHJlZSkgOiB0cmVlOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkYnViYmxlID0g
RjUoCisgICAgZnVuY3Rpb24gKGMsIGssIHYsIGwsIHIpIHsKKyAgICAgICAgcmV0dXJuIChfZWxt
X2xhbmckY29yZSREaWN0JGlzQkJsYWNrKGwpIHx8IF9lbG1fbGFuZyRjb3JlJERpY3QkaXNCQmxh
Y2socikpID8gQTUoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JGJhbGFuY2UsCisg
ICAgICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JG1vcmVCbGFjayhjKSwKKyAgICAgICAgICAg
IGssCisgICAgICAgICAgICB2LAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCRsZXNz
QmxhY2tUcmVlKGwpLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCRsZXNzQmxhY2tU
cmVlKHIpKSA6IEE1KF9lbG1fbGFuZyRjb3JlJERpY3QkUkJOb2RlX2VsbV9idWlsdGluLCBjLCBr
LCB2LCBsLCByKTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JHJlbW92ZU1heCA9
IEY1KAorICAgIGZ1bmN0aW9uIChjLCBrLCB2LCBsLCByKSB7CisgICAgICAgIHZhciBfcDI4ID0g
cjsKKyAgICAgICAgaWYgKF9wMjguY3RvciA9PT0gJ1JCRW1wdHlfZWxtX2J1aWx0aW4nKSB7Cisg
ICAgICAgICAgICByZXR1cm4gQTMoX2VsbV9sYW5nJGNvcmUkRGljdCRyZW0sIGMsIGwsIHIpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIEE1KAorICAgICAgICAgICAgICAg
IF9lbG1fbGFuZyRjb3JlJERpY3QkYnViYmxlLAorICAgICAgICAgICAgICAgIGMsCisgICAgICAg
ICAgICAgICAgaywKKyAgICAgICAgICAgICAgICB2LAorICAgICAgICAgICAgICAgIGwsCisgICAg
ICAgICAgICAgICAgQTUoX2VsbV9sYW5nJGNvcmUkRGljdCRyZW1vdmVNYXgsIF9wMjguXzAsIF9w
MjguXzEsIF9wMjguXzIsIF9wMjguXzMsIF9wMjguXzQpKTsKKyAgICAgICAgfQorICAgIH0pOwor
dmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkcmVtID0gRjMoCisgICAgZnVuY3Rpb24gKGMsIGwsIHIp
IHsKKyAgICAgICAgdmFyIF9wMjkgPSB7Y3RvcjogJ19UdXBsZTInLCBfMDogbCwgXzE6IHJ9Owor
ICAgICAgICBpZiAoX3AyOS5fMC5jdG9yID09PSAnUkJFbXB0eV9lbG1fYnVpbHRpbicpIHsKKyAg
ICAgICAgICAgIGlmIChfcDI5Ll8xLmN0b3IgPT09ICdSQkVtcHR5X2VsbV9idWlsdGluJykgewor
ICAgICAgICAgICAgICAgIHZhciBfcDMwID0gYzsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKF9w
MzAuY3RvcikgeworICAgICAgICAgICAgICAgICAgICBjYXNlICdSZWQnOgorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJERpY3QkUkJFbXB0eV9lbG1fYnVpbHRp
bihfZWxtX2xhbmckY29yZSREaWN0JExCbGFjayk7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J0JsYWNrJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRE
aWN0JFJCRW1wdHlfZWxtX2J1aWx0aW4oX2VsbV9sYW5nJGNvcmUkRGljdCRMQkJsYWNrKTsKKyAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBfZWxtX2xhbmckY29yZSROYXRpdmVfRGVidWcuY3Jhc2goJ2Nhbm5vdCBoYXZlIGJibGFjayBv
ciBuYmxhY2sgbm9kZXMgYXQgdGhpcyBwb2ludCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIF9wMzMgPSBfcDI5Ll8xLl8wOwor
ICAgICAgICAgICAgICAgIHZhciBfcDMyID0gX3AyOS5fMC5fMDsKKyAgICAgICAgICAgICAgICB2
YXIgX3AzMSA9IHtjdG9yOiAnX1R1cGxlMycsIF8wOiBjLCBfMTogX3AzMiwgXzI6IF9wMzN9Owor
ICAgICAgICAgICAgICAgIGlmICgoKChfcDMxLmN0b3IgPT09ICdfVHVwbGUzJykgJiYgKF9wMzEu
XzAuY3RvciA9PT0gJ0JsYWNrJykpICYmIChfcDMxLl8xLmN0b3IgPT09ICdMQmxhY2snKSkgJiYg
KF9wMzEuXzIuY3RvciA9PT0gJ1JlZCcpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBB
NShfZWxtX2xhbmckY29yZSREaWN0JFJCTm9kZV9lbG1fYnVpbHRpbiwgX2VsbV9sYW5nJGNvcmUk
RGljdCRCbGFjaywgX3AyOS5fMS5fMSwgX3AyOS5fMS5fMiwgX3AyOS5fMS5fMywgX3AyOS5fMS5f
NCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEE0KAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCRyZXBvcnRS
ZW1CdWcsCisgICAgICAgICAgICAgICAgICAgICAgICAnQmxhY2svTEJsYWNrL1JlZCcsCisgICAg
ICAgICAgICAgICAgICAgICAgICBjLAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkQmFzaWNzJHRvU3RyaW5nKF9wMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkQmFzaWNzJHRvU3RyaW5nKF9wMzMpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoX3AyOS5fMS5j
dG9yID09PSAnUkJFbXB0eV9lbG1fYnVpbHRpbicpIHsKKyAgICAgICAgICAgICAgICB2YXIgX3Az
NiA9IF9wMjkuXzEuXzA7CisgICAgICAgICAgICAgICAgdmFyIF9wMzUgPSBfcDI5Ll8wLl8wOwor
ICAgICAgICAgICAgICAgIHZhciBfcDM0ID0ge2N0b3I6ICdfVHVwbGUzJywgXzA6IGMsIF8xOiBf
cDM1LCBfMjogX3AzNn07CisgICAgICAgICAgICAgICAgaWYgKCgoKF9wMzQuY3RvciA9PT0gJ19U
dXBsZTMnKSAmJiAoX3AzNC5fMC5jdG9yID09PSAnQmxhY2snKSkgJiYgKF9wMzQuXzEuY3RvciA9
PT0gJ1JlZCcpKSAmJiAoX3AzNC5fMi5jdG9yID09PSAnTEJsYWNrJykpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEE1KF9lbG1fbGFuZyRjb3JlJERpY3QkUkJOb2RlX2VsbV9idWlsdGlu
LCBfZWxtX2xhbmckY29yZSREaWN0JEJsYWNrLCBfcDI5Ll8wLl8xLCBfcDI5Ll8wLl8yLCBfcDI5
Ll8wLl8zLCBfcDI5Ll8wLl80KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gQTQoCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmck
Y29yZSREaWN0JHJlcG9ydFJlbUJ1ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICdCbGFjay9S
ZWQvTEJsYWNrJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGMsCisgICAgICAgICAgICAgICAg
ICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3MkdG9TdHJpbmcoX3AzNSksCisgICAgICAgICAg
ICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3MkdG9TdHJpbmcoX3AzNikpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFy
IF9wNDAgPSBfcDI5Ll8wLl8yOworICAgICAgICAgICAgICAgIHZhciBfcDM5ID0gX3AyOS5fMC5f
NDsKKyAgICAgICAgICAgICAgICB2YXIgX3AzOCA9IF9wMjkuXzAuXzE7CisgICAgICAgICAgICAg
ICAgdmFyIGwkID0gQTUoX2VsbV9sYW5nJGNvcmUkRGljdCRyZW1vdmVNYXgsIF9wMjkuXzAuXzAs
IF9wMzgsIF9wNDAsIF9wMjkuXzAuXzMsIF9wMzkpOworICAgICAgICAgICAgICAgIHZhciBfcDM3
ID0gQTMoX2VsbV9sYW5nJGNvcmUkRGljdCRtYXhXaXRoRGVmYXVsdCwgX3AzOCwgX3A0MCwgX3Az
OSk7CisgICAgICAgICAgICAgICAgdmFyIGsgPSBfcDM3Ll8wOworICAgICAgICAgICAgICAgIHZh
ciB2ID0gX3AzNy5fMTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQTUoX2VsbV9sYW5nJGNvcmUk
RGljdCRidWJibGUsIGMsIGssIHYsIGwkLCByKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkbWFwID0gRjIoCisgICAgZnVuY3Rpb24g
KGYsIGRpY3QpIHsKKyAgICAgICAgdmFyIF9wNDEgPSBkaWN0OworICAgICAgICBpZiAoX3A0MS5j
dG9yID09PSAnUkJFbXB0eV9lbG1fYnVpbHRpbicpIHsKKyAgICAgICAgICAgIHJldHVybiBfZWxt
X2xhbmckY29yZSREaWN0JFJCRW1wdHlfZWxtX2J1aWx0aW4oX2VsbV9sYW5nJGNvcmUkRGljdCRM
QmxhY2spOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIF9wNDIgPSBfcDQxLl8x
OworICAgICAgICAgICAgcmV0dXJuIEE1KAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JERpY3QkUkJOb2RlX2VsbV9idWlsdGluLAorICAgICAgICAgICAgICAgIF9wNDEuXzAsCisgICAg
ICAgICAgICAgICAgX3A0MiwKKyAgICAgICAgICAgICAgICBBMihmLCBfcDQyLCBfcDQxLl8yKSwK
KyAgICAgICAgICAgICAgICBBMihfZWxtX2xhbmckY29yZSREaWN0JG1hcCwgZiwgX3A0MS5fMyks
CisgICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkRGljdCRtYXAsIGYsIF9wNDEuXzQp
KTsKKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkU2FtZSA9IHtj
dG9yOiAnU2FtZSd9OwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkUmVtb3ZlID0ge2N0b3I6ICdS
ZW1vdmUnfTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JEluc2VydCA9IHtjdG9yOiAnSW5zZXJ0
J307Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCR1cGRhdGUgPSBGMygKKyAgICBmdW5jdGlvbiAo
aywgYWx0ZXIsIGRpY3QpIHsKKyAgICAgICAgdmFyIHVwID0gZnVuY3Rpb24gKGRpY3QpIHsKKyAg
ICAgICAgICAgIHZhciBfcDQzID0gZGljdDsKKyAgICAgICAgICAgIGlmIChfcDQzLmN0b3IgPT09
ICdSQkVtcHR5X2VsbV9idWlsdGluJykgeworICAgICAgICAgICAgICAgIHZhciBfcDQ0ID0gYWx0
ZXIoX2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90aGluZyk7CisgICAgICAgICAgICAgICAgaWYgKF9w
NDQuY3RvciA9PT0gJ05vdGhpbmcnKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Y3Rv
cjogJ19UdXBsZTInLCBfMDogX2VsbV9sYW5nJGNvcmUkRGljdCRTYW1lLCBfMTogX2VsbV9sYW5n
JGNvcmUkRGljdCRlbXB0eX07CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0b3I6ICdfVHVwbGUy
JywKKyAgICAgICAgICAgICAgICAgICAgICAgIF8wOiBfZWxtX2xhbmckY29yZSREaWN0JEluc2Vy
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIF8xOiBBNShfZWxtX2xhbmckY29yZSREaWN0JFJC
Tm9kZV9lbG1fYnVpbHRpbiwgX2VsbV9sYW5nJGNvcmUkRGljdCRSZWQsIGssIF9wNDQuXzAsIF9l
bG1fbGFuZyRjb3JlJERpY3QkZW1wdHksIF9lbG1fbGFuZyRjb3JlJERpY3QkZW1wdHkpCisgICAg
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICB2YXIgX3A1NSA9IF9wNDMuXzI7CisgICAgICAgICAgICAgICAg
dmFyIF9wNTQgPSBfcDQzLl80OworICAgICAgICAgICAgICAgIHZhciBfcDUzID0gX3A0My5fMzsK
KyAgICAgICAgICAgICAgICB2YXIgX3A1MiA9IF9wNDMuXzE7CisgICAgICAgICAgICAgICAgdmFy
IF9wNTEgPSBfcDQzLl8wOworICAgICAgICAgICAgICAgIHZhciBfcDQ1ID0gQTIoX2VsbV9sYW5n
JGNvcmUkQmFzaWNzJGNvbXBhcmUsIGssIF9wNTIpOworICAgICAgICAgICAgICAgIHN3aXRjaCAo
X3A0NS5jdG9yKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0VRJzoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBfcDQ2ID0gYWx0ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVzdChfcDU1KSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoX3A0Ni5jdG9yID09PSAnTm90aGluZycpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdG9yOiAn
X1R1cGxlMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8wOiBfZWxtX2xhbmck
Y29yZSREaWN0JFJlbW92ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXzE6IEEz
KF9lbG1fbGFuZyRjb3JlJERpY3QkcmVtLCBfcDUxLCBfcDUzLCBfcDU0KQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGN0b3I6ICdfVHVwbGUyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXzA6IF9lbG1fbGFuZyRjb3JlJERpY3QkU2FtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXzE6IEE1KF9lbG1fbGFuZyRjb3JlJERpY3QkUkJOb2RlX2VsbV9idWlsdGluLCBf
cDUxLCBfcDUyLCBfcDQ2Ll8wLCBfcDUzLCBfcDU0KQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgJ0xUJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcDQ3ID0gdXAoX3A1Myk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmxhZyA9IF9wNDcuXzA7CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgbmV3TGVmdCA9IF9wNDcuXzE7CisgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgX3A0OCA9IGZsYWc7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9wNDgu
Y3RvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1NhbWUnOgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3RvcjogJ19UdXBsZTInLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXzA6IF9lbG1fbGFuZyRjb3JlJERpY3QkU2FtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF8xOiBBNShfZWxtX2xhbmckY29yZSREaWN0JFJCTm9kZV9l
bG1fYnVpbHRpbiwgX3A1MSwgX3A1MiwgX3A1NSwgbmV3TGVmdCwgX3A1NCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
ICdJbnNlcnQnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RvcjogJ19UdXBsZTInLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXzA6IF9lbG1fbGFuZyRjb3JlJERpY3QkSW5z
ZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXzE6IEE1KF9lbG1fbGFu
ZyRjb3JlJERpY3QkYmFsYW5jZSwgX3A1MSwgX3A1MiwgX3A1NSwgbmV3TGVmdCwgX3A1NCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RvcjogJ19UdXBsZTInLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXzA6IF9lbG1fbGFuZyRjb3JlJERpY3Qk
UmVtb3ZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXzE6IEE1KF9lbG1f
bGFuZyRjb3JlJERpY3QkYnViYmxlLCBfcDUxLCBfcDUyLCBfcDU1LCBuZXdMZWZ0LCBfcDU0KQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIF9wNDkgPSB1cChfcDU0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbGFn
ID0gX3A0OS5fMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdSaWdodCA9IF9wNDku
XzE7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3A1MCA9IGZsYWc7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKF9wNTAuY3RvcikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgJ1NhbWUnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RvcjogJ19UdXBsZTIn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXzA6IF9lbG1fbGFuZyRjb3Jl
JERpY3QkU2FtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8xOiBBNShf
ZWxtX2xhbmckY29yZSREaWN0JFJCTm9kZV9lbG1fYnVpbHRpbiwgX3A1MSwgX3A1MiwgX3A1NSwg
X3A1MywgbmV3UmlnaHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnSW5zZXJ0JzoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGN0b3I6ICdfVHVwbGUyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF8wOiBfZWxtX2xhbmckY29yZSREaWN0JEluc2VydCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF8xOiBBNShfZWxtX2xhbmckY29yZSREaWN0JGJhbGFuY2UsIF9wNTEsIF9w
NTIsIF9wNTUsIF9wNTMsIG5ld1JpZ2h0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjdG9yOiAnX1R1cGxlMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfMDogX2VsbV9sYW5nJGNvcmUkRGljdCRSZW1vdmUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfMTogQTUoX2VsbV9sYW5nJGNvcmUkRGljdCRidWJibGUsIF9wNTEs
IF9wNTIsIF9wNTUsIF9wNTMsIG5ld1JpZ2h0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgdmFyIF9wNTYgPSB1cChkaWN0KTsKKyAg
ICAgICAgdmFyIGZsYWcgPSBfcDU2Ll8wOworICAgICAgICB2YXIgdXBkYXRlZERpY3QgPSBfcDU2
Ll8xOworICAgICAgICB2YXIgX3A1NyA9IGZsYWc7CisgICAgICAgIHN3aXRjaCAoX3A1Ny5jdG9y
KSB7CisgICAgICAgICAgICBjYXNlICdTYW1lJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gdXBk
YXRlZERpY3Q7CisgICAgICAgICAgICBjYXNlICdJbnNlcnQnOgorICAgICAgICAgICAgICAgIHJl
dHVybiBfZWxtX2xhbmckY29yZSREaWN0JGVuc3VyZUJsYWNrUm9vdCh1cGRhdGVkRGljdCk7Cisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29y
ZSREaWN0JGJsYWNrZW4odXBkYXRlZERpY3QpOworICAgICAgICB9CisgICAgfSk7Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkRGljdCRpbnNlcnQgPSBGMygKKyAgICBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwg
ZGljdCkgeworICAgICAgICByZXR1cm4gQTMoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRE
aWN0JHVwZGF0ZSwKKyAgICAgICAgICAgIGtleSwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JEJhc2ljcyRhbHdheXMoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVz
dCh2YWx1ZSkpLAorICAgICAgICAgICAgZGljdCk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNv
cmUkRGljdCRzaW5nbGV0b24gPSBGMigKKyAgICBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkgeworICAg
ICAgICByZXR1cm4gQTMoX2VsbV9sYW5nJGNvcmUkRGljdCRpbnNlcnQsIGtleSwgdmFsdWUsIF9l
bG1fbGFuZyRjb3JlJERpY3QkZW1wdHkpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJERp
Y3QkdW5pb24gPSBGMigKKyAgICBmdW5jdGlvbiAodDEsIHQyKSB7CisgICAgICAgIHJldHVybiBB
MyhfZWxtX2xhbmckY29yZSREaWN0JGZvbGRsLCBfZWxtX2xhbmckY29yZSREaWN0JGluc2VydCwg
dDIsIHQxKTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JGZpbHRlciA9IEYyKAor
ICAgIGZ1bmN0aW9uIChwcmVkaWNhdGUsIGRpY3Rpb25hcnkpIHsKKyAgICAgICAgdmFyIGFkZCA9
IEYzKAorICAgICAgICAgICAgZnVuY3Rpb24gKGtleSwgdmFsdWUsIGRpY3QpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gQTIocHJlZGljYXRlLCBrZXksIHZhbHVlKSA/IEEzKF9lbG1fbGFuZyRj
b3JlJERpY3QkaW5zZXJ0LCBrZXksIHZhbHVlLCBkaWN0KSA6IGRpY3Q7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgcmV0dXJuIEEzKF9lbG1fbGFuZyRjb3JlJERpY3QkZm9sZGwsIGFkZCwgX2Vs
bV9sYW5nJGNvcmUkRGljdCRlbXB0eSwgZGljdGlvbmFyeSk7CisgICAgfSk7Cit2YXIgX2VsbV9s
YW5nJGNvcmUkRGljdCRpbnRlcnNlY3QgPSBGMigKKyAgICBmdW5jdGlvbiAodDEsIHQyKSB7Cisg
ICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkZmlsdGVy
LAorICAgICAgICAgICAgRjIoCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGssIF9wNTgpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRjb3JlJERpY3QkbWVtYmVy
LCBrLCB0Mik7CisgICAgICAgICAgICAgICAgfSksCisgICAgICAgICAgICB0MSk7CisgICAgfSk7
Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRwYXJ0aXRpb24gPSBGMigKKyAgICBmdW5jdGlvbiAo
cHJlZGljYXRlLCBkaWN0KSB7CisgICAgICAgIHZhciBhZGQgPSBGMygKKyAgICAgICAgICAgIGZ1
bmN0aW9uIChrZXksIHZhbHVlLCBfcDU5KSB7CisgICAgICAgICAgICAgICAgdmFyIF9wNjAgPSBf
cDU5OworICAgICAgICAgICAgICAgIHZhciBfcDYyID0gX3A2MC5fMTsKKyAgICAgICAgICAgICAg
ICB2YXIgX3A2MSA9IF9wNjAuXzA7CisgICAgICAgICAgICAgICAgcmV0dXJuIEEyKHByZWRpY2F0
ZSwga2V5LCB2YWx1ZSkgPyB7CisgICAgICAgICAgICAgICAgICAgIGN0b3I6ICdfVHVwbGUyJywK
KyAgICAgICAgICAgICAgICAgICAgXzA6IEEzKF9lbG1fbGFuZyRjb3JlJERpY3QkaW5zZXJ0LCBr
ZXksIHZhbHVlLCBfcDYxKSwKKyAgICAgICAgICAgICAgICAgICAgXzE6IF9wNjIKKyAgICAgICAg
ICAgICAgICB9IDogeworICAgICAgICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMicsCisgICAg
ICAgICAgICAgICAgICAgIF8wOiBfcDYxLAorICAgICAgICAgICAgICAgICAgICBfMTogQTMoX2Vs
bV9sYW5nJGNvcmUkRGljdCRpbnNlcnQsIGtleSwgdmFsdWUsIF9wNjIpCisgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gQTMoCisgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSREaWN0JGZvbGRsLAorICAgICAgICAgICAgYWRkLAorICAgICAgICAgICAg
e2N0b3I6ICdfVHVwbGUyJywgXzA6IF9lbG1fbGFuZyRjb3JlJERpY3QkZW1wdHksIF8xOiBfZWxt
X2xhbmckY29yZSREaWN0JGVtcHR5fSwKKyAgICAgICAgICAgIGRpY3QpOworICAgIH0pOwordmFy
IF9lbG1fbGFuZyRjb3JlJERpY3QkZnJvbUxpc3QgPSBmdW5jdGlvbiAoYXNzb2NzKSB7CisgICAg
cmV0dXJuIEEzKAorICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JGZvbGRsLAorICAgICAgICBG
MigKKyAgICAgICAgICAgIGZ1bmN0aW9uIChfcDYzLCBkaWN0KSB7CisgICAgICAgICAgICAgICAg
dmFyIF9wNjQgPSBfcDYzOworICAgICAgICAgICAgICAgIHJldHVybiBBMyhfZWxtX2xhbmckY29y
ZSREaWN0JGluc2VydCwgX3A2NC5fMCwgX3A2NC5fMSwgZGljdCk7CisgICAgICAgICAgICB9KSwK
KyAgICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCRlbXB0eSwKKyAgICAgICAgYXNzb2NzKTsKK307
Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRyZW1vdmUgPSBGMigKKyAgICBmdW5jdGlvbiAoa2V5
LCBkaWN0KSB7CisgICAgICAgIHJldHVybiBBMygKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JERpY3QkdXBkYXRlLAorICAgICAgICAgICAga2V5LAorICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkQmFzaWNzJGFsd2F5cyhfZWxtX2xhbmckY29yZSRNYXliZSROb3RoaW5nKSwKKyAgICAgICAg
ICAgIGRpY3QpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkZGlmZiA9IEYyKAor
ICAgIGZ1bmN0aW9uICh0MSwgdDIpIHsKKyAgICAgICAgcmV0dXJuIEEzKAorICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkRGljdCRmb2xkbCwKKyAgICAgICAgICAgIEYzKAorICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uIChrLCB2LCB0KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMihf
ZWxtX2xhbmckY29yZSREaWN0JHJlbW92ZSwgaywgdCk7CisgICAgICAgICAgICAgICAgfSksCisg
ICAgICAgICAgICB0MSwKKyAgICAgICAgICAgIHQyKTsKKyAgICB9KTsKKworLy9pbXBvcnQgTmF0
aXZlLlNjaGVkdWxlciAvLworCit2YXIgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1RpbWUgPSBmdW5j
dGlvbigpIHsKKwordmFyIG5vdyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIubmF0
aXZlQmluZGluZyhmdW5jdGlvbihjYWxsYmFjaykKK3sKKyAgICBjYWxsYmFjayhfZWxtX2xhbmck
Y29yZSROYXRpdmVfU2NoZWR1bGVyLnN1Y2NlZWQoRGF0ZS5ub3coKSkpOworfSk7CisKK2Z1bmN0
aW9uIHNldEludGVydmFsXyhpbnRlcnZhbCwgdGFzaykKK3sKKyAgICByZXR1cm4gX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX1NjaGVkdWxlci5uYXRpdmVCaW5kaW5nKGZ1bmN0aW9uKGNhbGxiYWNrKQor
ICAgIHsKKyAgICAgICAgdmFyIGlkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1bGVyLnJhd1NwYXduKHRhc2spOworICAg
ICAgICB9LCBpbnRlcnZhbCk7CisKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeyBjbGVhcklu
dGVydmFsKGlkKTsgfTsKKyAgICB9KTsKK30KKworcmV0dXJuIHsKKyAgICBub3c6IG5vdywKKyAg
ICBzZXRJbnRlcnZhbF86IEYyKHNldEludGVydmFsXykKK307CisKK30oKTsKK3ZhciBfZWxtX2xh
bmckY29yZSRUaW1lJHNldEludGVydmFsID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1RpbWUuc2V0
SW50ZXJ2YWxfOwordmFyIF9lbG1fbGFuZyRjb3JlJFRpbWUkc3Bhd25IZWxwID0gRjMoCisgICAg
ZnVuY3Rpb24gKHJvdXRlciwgaW50ZXJ2YWxzLCBwcm9jZXNzZXMpIHsKKyAgICAgICAgdmFyIF9w
MCA9IGludGVydmFsczsKKyAgICAgICAgaWYgKF9wMC5jdG9yID09PSAnW10nKSB7CisgICAgICAg
ICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkVGFzayRzdWNjZWVkKHByb2Nlc3Nlcyk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgX3AxID0gX3AwLl8wOworICAgICAgICAgICAg
cmV0dXJuIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRhc2skYW5kVGhlbiwK
KyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1bGVyLnNwYXduKAor
ICAgICAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJFRpbWUkc2V0SW50ZXJ2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICBfcDEsCisg
ICAgICAgICAgICAgICAgICAgICAgICBBMihfZWxtX2xhbmckY29yZSRQbGF0Zm9ybSRzZW5kVG9T
ZWxmLCByb3V0ZXIsIF9wMSkpKSwKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiAoaWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEEzKAorICAgICAgICAgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkVGltZSRzcGF3bkhlbHAsCisgICAgICAgICAgICAgICAgICAgICAgICByb3V0
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBfcDAuXzEsCisgICAgICAgICAgICAgICAgICAg
ICAgICBBMyhfZWxtX2xhbmckY29yZSREaWN0JGluc2VydCwgX3AxLCBpZCwgcHJvY2Vzc2VzKSk7
CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmck
Y29yZSRUaW1lJGFkZE15U3ViID0gRjIoCisgICAgZnVuY3Rpb24gKF9wMiwgc3RhdGUpIHsKKyAg
ICAgICAgdmFyIF9wMyA9IF9wMjsKKyAgICAgICAgdmFyIF9wNiA9IF9wMy5fMTsKKyAgICAgICAg
dmFyIF9wNSA9IF9wMy5fMDsKKyAgICAgICAgdmFyIF9wNCA9IEEyKF9lbG1fbGFuZyRjb3JlJERp
Y3QkZ2V0LCBfcDUsIHN0YXRlKTsKKyAgICAgICAgaWYgKF9wNC5jdG9yID09PSAnTm90aGluZycp
IHsKKyAgICAgICAgICAgIHJldHVybiBBMygKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSREaWN0JGluc2VydCwKKyAgICAgICAgICAgICAgICBfcDUsCisgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICBb
X3A2XSksCisgICAgICAgICAgICAgICAgc3RhdGUpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgcmV0dXJuIEEzKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkaW5z
ZXJ0LAorICAgICAgICAgICAgICAgIF9wNSwKKyAgICAgICAgICAgICAgICBBMihfZWxtX2xhbmck
Y29yZSRMaXN0X29wc1snOjonXSwgX3A2LCBfcDQuXzApLAorICAgICAgICAgICAgICAgIHN0YXRl
KTsKKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJFRpbWUkaW5NaWxsaXNl
Y29uZHMgPSBmdW5jdGlvbiAodCkgeworICAgIHJldHVybiB0OworfTsKK3ZhciBfZWxtX2xhbmck
Y29yZSRUaW1lJG1pbGxpc2Vjb25kID0gMTsKK3ZhciBfZWxtX2xhbmckY29yZSRUaW1lJHNlY29u
ZCA9IDEwMDAgKiBfZWxtX2xhbmckY29yZSRUaW1lJG1pbGxpc2Vjb25kOwordmFyIF9lbG1fbGFu
ZyRjb3JlJFRpbWUkbWludXRlID0gNjAgKiBfZWxtX2xhbmckY29yZSRUaW1lJHNlY29uZDsKK3Zh
ciBfZWxtX2xhbmckY29yZSRUaW1lJGhvdXIgPSA2MCAqIF9lbG1fbGFuZyRjb3JlJFRpbWUkbWlu
dXRlOwordmFyIF9lbG1fbGFuZyRjb3JlJFRpbWUkaW5Ib3VycyA9IGZ1bmN0aW9uICh0KSB7Cisg
ICAgcmV0dXJuIHQgLyBfZWxtX2xhbmckY29yZSRUaW1lJGhvdXI7Cit9OwordmFyIF9lbG1fbGFu
ZyRjb3JlJFRpbWUkaW5NaW51dGVzID0gZnVuY3Rpb24gKHQpIHsKKyAgICByZXR1cm4gdCAvIF9l
bG1fbGFuZyRjb3JlJFRpbWUkbWludXRlOworfTsKK3ZhciBfZWxtX2xhbmckY29yZSRUaW1lJGlu
U2Vjb25kcyA9IGZ1bmN0aW9uICh0KSB7CisgICAgcmV0dXJuIHQgLyBfZWxtX2xhbmckY29yZSRU
aW1lJHNlY29uZDsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGltZSRub3cgPSBfZWxtX2xhbmck
Y29yZSROYXRpdmVfVGltZS5ub3c7Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGltZSRvblNlbGZNc2cg
PSBGMygKKyAgICBmdW5jdGlvbiAocm91dGVyLCBpbnRlcnZhbCwgc3RhdGUpIHsKKyAgICAgICAg
dmFyIF9wNyA9IEEyKF9lbG1fbGFuZyRjb3JlJERpY3QkZ2V0LCBpbnRlcnZhbCwgc3RhdGUudGFn
Z2Vycyk7CisgICAgICAgIGlmIChfcDcuY3RvciA9PT0gJ05vdGhpbmcnKSB7CisgICAgICAgICAg
ICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkVGFzayRzdWNjZWVkKHN0YXRlKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmck
Y29yZSRUYXNrJGFuZFRoZW4sCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGltZSRu
b3csCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHRpbWUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFz
ayRhbmRUaGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRz
ZXF1ZW5jZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRtYXAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh0YWdnZXIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRQbGF0Zm9ybSRzZW5kVG9BcHAsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ2dlcih0aW1lKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9wNy5f
MCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9wOCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRUYXNrJHN1Y2NlZWQoc3Rh
dGUpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRUaW1lJHN1YnNjcmlwdGlvbiA9
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9QbGF0Zm9ybS5sZWFmKCdUaW1lJyk7Cit2YXIgX2VsbV9s
YW5nJGNvcmUkVGltZSRTdGF0ZSA9IEYyKAorICAgIGZ1bmN0aW9uIChhLCBiKSB7CisgICAgICAg
IHJldHVybiB7dGFnZ2VyczogYSwgcHJvY2Vzc2VzOiBifTsKKyAgICB9KTsKK3ZhciBfZWxtX2xh
bmckY29yZSRUaW1lJGluaXQgPSBfZWxtX2xhbmckY29yZSRUYXNrJHN1Y2NlZWQoCisgICAgQTIo
X2VsbV9sYW5nJGNvcmUkVGltZSRTdGF0ZSwgX2VsbV9sYW5nJGNvcmUkRGljdCRlbXB0eSwgX2Vs
bV9sYW5nJGNvcmUkRGljdCRlbXB0eSkpOwordmFyIF9lbG1fbGFuZyRjb3JlJFRpbWUkb25FZmZl
Y3RzID0gRjMoCisgICAgZnVuY3Rpb24gKHJvdXRlciwgc3VicywgX3A5KSB7CisgICAgICAgIHZh
ciBfcDEwID0gX3A5OworICAgICAgICB2YXIgcmlnaHRTdGVwID0gRjMoCisgICAgICAgICAgICBm
dW5jdGlvbiAoX3AxMiwgaWQsIF9wMTEpIHsKKyAgICAgICAgICAgICAgICB2YXIgX3AxMyA9IF9w
MTE7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgY3Rvcjog
J19UdXBsZTMnLAorICAgICAgICAgICAgICAgICAgICBfMDogX3AxMy5fMCwKKyAgICAgICAgICAg
ICAgICAgICAgXzE6IF9wMTMuXzEsCisgICAgICAgICAgICAgICAgICAgIF8yOiBBMigKKyAgICAg
ICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRhc2skYW5kVGhlbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIua2lsbChpZCks
CisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX3AxNCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBfcDEzLl8yOworICAgICAgICAgICAgICAgICAgICAgICAg
fSkKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSk7CisgICAgICAgIHZhciBib3Ro
U3RlcCA9IEY0KAorICAgICAgICAgICAgZnVuY3Rpb24gKGludGVydmFsLCB0YWdnZXJzLCBpZCwg
X3AxNSkgeworICAgICAgICAgICAgICAgIHZhciBfcDE2ID0gX3AxNTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMycsCisgICAgICAg
ICAgICAgICAgICAgIF8wOiBfcDE2Ll8wLAorICAgICAgICAgICAgICAgICAgICBfMTogQTMoX2Vs
bV9sYW5nJGNvcmUkRGljdCRpbnNlcnQsIGludGVydmFsLCBpZCwgX3AxNi5fMSksCisgICAgICAg
ICAgICAgICAgICAgIF8yOiBfcDE2Ll8yCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB2YXIgbGVmdFN0ZXAgPSBGMygKKyAgICAgICAgICAgIGZ1bmN0aW9uIChp
bnRlcnZhbCwgdGFnZ2VycywgX3AxNykgeworICAgICAgICAgICAgICAgIHZhciBfcDE4ID0gX3Ax
NzsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICBjdG9yOiAn
X1R1cGxlMycsCisgICAgICAgICAgICAgICAgICAgIF8wOiBBMihfZWxtX2xhbmckY29yZSRMaXN0
X29wc1snOjonXSwgaW50ZXJ2YWwsIF9wMTguXzApLAorICAgICAgICAgICAgICAgICAgICBfMTog
X3AxOC5fMSwKKyAgICAgICAgICAgICAgICAgICAgXzI6IF9wMTguXzIKKyAgICAgICAgICAgICAg
ICB9OworICAgICAgICAgICAgfSk7CisgICAgICAgIHZhciBuZXdUYWdnZXJzID0gQTMoX2VsbV9s
YW5nJGNvcmUkTGlzdCRmb2xkbCwgX2VsbV9sYW5nJGNvcmUkVGltZSRhZGRNeVN1YiwgX2VsbV9s
YW5nJGNvcmUkRGljdCRlbXB0eSwgc3Vicyk7CisgICAgICAgIHZhciBfcDE5ID0gQTYoCisgICAg
ICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JG1lcmdlLAorICAgICAgICAgICAgbGVmdFN0ZXAs
CisgICAgICAgICAgICBib3RoU3RlcCwKKyAgICAgICAgICAgIHJpZ2h0U3RlcCwKKyAgICAgICAg
ICAgIG5ld1RhZ2dlcnMsCisgICAgICAgICAgICBfcDEwLnByb2Nlc3NlcywKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMycsCisgICAgICAgICAgICAgICAgXzA6
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAg
ICAgW10pLAorICAgICAgICAgICAgICAgIF8xOiBfZWxtX2xhbmckY29yZSREaWN0JGVtcHR5LAor
ICAgICAgICAgICAgICAgIF8yOiBfZWxtX2xhbmckY29yZSRUYXNrJHN1Y2NlZWQoCisgICAgICAg
ICAgICAgICAgICAgIHtjdG9yOiAnX1R1cGxlMCd9KQorICAgICAgICAgICAgfSk7CisgICAgICAg
IHZhciBzcGF3bkxpc3QgPSBfcDE5Ll8wOworICAgICAgICB2YXIgZXhpc3RpbmdEaWN0ID0gX3Ax
OS5fMTsKKyAgICAgICAgdmFyIGtpbGxUYXNrID0gX3AxOS5fMjsKKyAgICAgICAgcmV0dXJuIEEy
KAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAgICAg
a2lsbFRhc2ssCisgICAgICAgICAgICBmdW5jdGlvbiAoX3AyMCkgeworICAgICAgICAgICAgICAg
IHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRU
aGVuLAorICAgICAgICAgICAgICAgICAgICBBMyhfZWxtX2xhbmckY29yZSRUaW1lJHNwYXduSGVs
cCwgcm91dGVyLCBzcGF3bkxpc3QsIGV4aXN0aW5nRGljdCksCisgICAgICAgICAgICAgICAgICAg
IGZ1bmN0aW9uIChuZXdQcm9jZXNzZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBfZWxtX2xhbmckY29yZSRUYXNrJHN1Y2NlZWQoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQTIoX2VsbV9sYW5nJGNvcmUkVGltZSRTdGF0ZSwgbmV3VGFnZ2VycywgbmV3UHJvY2Vzc2Vz
KSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgfSk7Cit2
YXIgX2VsbV9sYW5nJGNvcmUkVGltZSRFdmVyeSA9IEYyKAorICAgIGZ1bmN0aW9uIChhLCBiKSB7
CisgICAgICAgIHJldHVybiB7Y3RvcjogJ0V2ZXJ5JywgXzA6IGEsIF8xOiBifTsKKyAgICB9KTsK
K3ZhciBfZWxtX2xhbmckY29yZSRUaW1lJGV2ZXJ5ID0gRjIoCisgICAgZnVuY3Rpb24gKGludGVy
dmFsLCB0YWdnZXIpIHsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFRpbWUkc3Vic2Ny
aXB0aW9uKAorICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkVGltZSRFdmVyeSwgaW50ZXJ2
YWwsIHRhZ2dlcikpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJFRpbWUkc3ViTWFwID0g
RjIoCisgICAgZnVuY3Rpb24gKGYsIF9wMjEpIHsKKyAgICAgICAgdmFyIF9wMjIgPSBfcDIxOwor
ICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUaW1lJEV2ZXJ5
LAorICAgICAgICAgICAgX3AyMi5fMCwKKyAgICAgICAgICAgIGZ1bmN0aW9uIChfcDIzKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGYoCisgICAgICAgICAgICAgICAgICAgIF9wMjIuXzEoX3Ay
MykpOworICAgICAgICAgICAgfSk7CisgICAgfSk7CitfZWxtX2xhbmckY29yZSROYXRpdmVfUGxh
dGZvcm0uZWZmZWN0TWFuYWdlcnNbJ1RpbWUnXSA9IHtwa2c6ICdlbG0tbGFuZy9jb3JlJywgaW5p
dDogX2VsbV9sYW5nJGNvcmUkVGltZSRpbml0LCBvbkVmZmVjdHM6IF9lbG1fbGFuZyRjb3JlJFRp
bWUkb25FZmZlY3RzLCBvblNlbGZNc2c6IF9lbG1fbGFuZyRjb3JlJFRpbWUkb25TZWxmTXNnLCB0
YWc6ICdzdWInLCBzdWJNYXA6IF9lbG1fbGFuZyRjb3JlJFRpbWUkc3ViTWFwfTsKKworLy9pbXBv
cnQgTWF5YmUsIE5hdGl2ZS5BcnJheSwgTmF0aXZlLkxpc3QsIE5hdGl2ZS5VdGlscywgUmVzdWx0
IC8vCisKK3ZhciBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbiA9IGZ1bmN0aW9uKCkgeworCisK
Ky8vIENPUkUgREVDT0RFUlMKKworZnVuY3Rpb24gc3VjY2VlZChtc2cpCit7CisgICAgcmV0dXJu
IHsKKyAgICAgICAgY3RvcjogJzxkZWNvZGVyPicsCisgICAgICAgIHRhZzogJ3N1Y2NlZWQnLAor
ICAgICAgICBtc2c6IG1zZworICAgIH07Cit9CisKK2Z1bmN0aW9uIGZhaWwobXNnKQoreworICAg
IHJldHVybiB7CisgICAgICAgIGN0b3I6ICc8ZGVjb2Rlcj4nLAorICAgICAgICB0YWc6ICdmYWls
JywKKyAgICAgICAgbXNnOiBtc2cKKyAgICB9OworfQorCitmdW5jdGlvbiBkZWNvZGVQcmltaXRp
dmUodGFnKQoreworICAgIHJldHVybiB7CisgICAgICAgIGN0b3I6ICc8ZGVjb2Rlcj4nLAorICAg
ICAgICB0YWc6IHRhZworICAgIH07Cit9CisKK2Z1bmN0aW9uIGRlY29kZUNvbnRhaW5lcih0YWcs
IGRlY29kZXIpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgY3RvcjogJzxkZWNvZGVyPicsCisg
ICAgICAgIHRhZzogdGFnLAorICAgICAgICBkZWNvZGVyOiBkZWNvZGVyCisgICAgfTsKK30KKwor
ZnVuY3Rpb24gZGVjb2RlTnVsbCh2YWx1ZSkKK3sKKyAgICByZXR1cm4geworICAgICAgICBjdG9y
OiAnPGRlY29kZXI+JywKKyAgICAgICAgdGFnOiAnbnVsbCcsCisgICAgICAgIHZhbHVlOiB2YWx1
ZQorICAgIH07Cit9CisKK2Z1bmN0aW9uIGRlY29kZUZpZWxkKGZpZWxkLCBkZWNvZGVyKQorewor
ICAgIHJldHVybiB7CisgICAgICAgIGN0b3I6ICc8ZGVjb2Rlcj4nLAorICAgICAgICB0YWc6ICdm
aWVsZCcsCisgICAgICAgIGZpZWxkOiBmaWVsZCwKKyAgICAgICAgZGVjb2RlcjogZGVjb2Rlcgor
ICAgIH07Cit9CisKK2Z1bmN0aW9uIGRlY29kZUtleVZhbHVlUGFpcnMoZGVjb2RlcikKK3sKKyAg
ICByZXR1cm4geworICAgICAgICBjdG9yOiAnPGRlY29kZXI+JywKKyAgICAgICAgdGFnOiAna2V5
LXZhbHVlJywKKyAgICAgICAgZGVjb2RlcjogZGVjb2RlcgorICAgIH07Cit9CisKK2Z1bmN0aW9u
IGRlY29kZU9iamVjdChmLCBkZWNvZGVycykKK3sKKyAgICByZXR1cm4geworICAgICAgICBjdG9y
OiAnPGRlY29kZXI+JywKKyAgICAgICAgdGFnOiAnbWFwLW1hbnknLAorICAgICAgICBmdW5jOiBm
LAorICAgICAgICBkZWNvZGVyczogZGVjb2RlcnMKKyAgICB9OworfQorCitmdW5jdGlvbiBkZWNv
ZGVUdXBsZShmLCBkZWNvZGVycykKK3sKKyAgICByZXR1cm4geworICAgICAgICBjdG9yOiAnPGRl
Y29kZXI+JywKKyAgICAgICAgdGFnOiAndHVwbGUnLAorICAgICAgICBmdW5jOiBmLAorICAgICAg
ICBkZWNvZGVyczogZGVjb2RlcnMKKyAgICB9OworfQorCitmdW5jdGlvbiBhbmRUaGVuKGRlY29k
ZXIsIGNhbGxiYWNrKQoreworICAgIHJldHVybiB7CisgICAgICAgIGN0b3I6ICc8ZGVjb2Rlcj4n
LAorICAgICAgICB0YWc6ICdhbmRUaGVuJywKKyAgICAgICAgZGVjb2RlcjogZGVjb2RlciwKKyAg
ICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrCisgICAgfTsKK30KKworZnVuY3Rpb24gY3VzdG9tQW5k
VGhlbihkZWNvZGVyLCBjYWxsYmFjaykKK3sKKyAgICByZXR1cm4geworICAgICAgICBjdG9yOiAn
PGRlY29kZXI+JywKKyAgICAgICAgdGFnOiAnY3VzdG9tQW5kVGhlbicsCisgICAgICAgIGRlY29k
ZXI6IGRlY29kZXIsCisgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjaworICAgIH07Cit9CisKK2Z1
bmN0aW9uIG9uZU9mKGRlY29kZXJzKQoreworICAgIHJldHVybiB7CisgICAgICAgIGN0b3I6ICc8
ZGVjb2Rlcj4nLAorICAgICAgICB0YWc6ICdvbmVPZicsCisgICAgICAgIGRlY29kZXJzOiBkZWNv
ZGVycworICAgIH07Cit9CisKKworLy8gREVDT0RJTkcgT0JKRUNUUworCitmdW5jdGlvbiBkZWNv
ZGVPYmplY3QxKGYsIGQxKQoreworICAgIHJldHVybiBkZWNvZGVPYmplY3QoZiwgW2QxXSk7Cit9
CisKK2Z1bmN0aW9uIGRlY29kZU9iamVjdDIoZiwgZDEsIGQyKQoreworICAgIHJldHVybiBkZWNv
ZGVPYmplY3QoZiwgW2QxLCBkMl0pOworfQorCitmdW5jdGlvbiBkZWNvZGVPYmplY3QzKGYsIGQx
LCBkMiwgZDMpCit7CisgICAgcmV0dXJuIGRlY29kZU9iamVjdChmLCBbZDEsIGQyLCBkM10pOwor
fQorCitmdW5jdGlvbiBkZWNvZGVPYmplY3Q0KGYsIGQxLCBkMiwgZDMsIGQ0KQoreworICAgIHJl
dHVybiBkZWNvZGVPYmplY3QoZiwgW2QxLCBkMiwgZDMsIGQ0XSk7Cit9CisKK2Z1bmN0aW9uIGRl
Y29kZU9iamVjdDUoZiwgZDEsIGQyLCBkMywgZDQsIGQ1KQoreworICAgIHJldHVybiBkZWNvZGVP
YmplY3QoZiwgW2QxLCBkMiwgZDMsIGQ0LCBkNV0pOworfQorCitmdW5jdGlvbiBkZWNvZGVPYmpl
Y3Q2KGYsIGQxLCBkMiwgZDMsIGQ0LCBkNSwgZDYpCit7CisgICAgcmV0dXJuIGRlY29kZU9iamVj
dChmLCBbZDEsIGQyLCBkMywgZDQsIGQ1LCBkNl0pOworfQorCitmdW5jdGlvbiBkZWNvZGVPYmpl
Y3Q3KGYsIGQxLCBkMiwgZDMsIGQ0LCBkNSwgZDYsIGQ3KQoreworICAgIHJldHVybiBkZWNvZGVP
YmplY3QoZiwgW2QxLCBkMiwgZDMsIGQ0LCBkNSwgZDYsIGQ3XSk7Cit9CisKK2Z1bmN0aW9uIGRl
Y29kZU9iamVjdDgoZiwgZDEsIGQyLCBkMywgZDQsIGQ1LCBkNiwgZDcsIGQ4KQoreworICAgIHJl
dHVybiBkZWNvZGVPYmplY3QoZiwgW2QxLCBkMiwgZDMsIGQ0LCBkNSwgZDYsIGQ3LCBkOF0pOwor
fQorCisKKy8vIERFQ09ESU5HIFRVUExFUworCitmdW5jdGlvbiBkZWNvZGVUdXBsZTEoZiwgZDEp
Cit7CisgICAgcmV0dXJuIGRlY29kZVR1cGxlKGYsIFtkMV0pOworfQorCitmdW5jdGlvbiBkZWNv
ZGVUdXBsZTIoZiwgZDEsIGQyKQoreworICAgIHJldHVybiBkZWNvZGVUdXBsZShmLCBbZDEsIGQy
XSk7Cit9CisKK2Z1bmN0aW9uIGRlY29kZVR1cGxlMyhmLCBkMSwgZDIsIGQzKQoreworICAgIHJl
dHVybiBkZWNvZGVUdXBsZShmLCBbZDEsIGQyLCBkM10pOworfQorCitmdW5jdGlvbiBkZWNvZGVU
dXBsZTQoZiwgZDEsIGQyLCBkMywgZDQpCit7CisgICAgcmV0dXJuIGRlY29kZVR1cGxlKGYsIFtk
MSwgZDIsIGQzLCBkNF0pOworfQorCitmdW5jdGlvbiBkZWNvZGVUdXBsZTUoZiwgZDEsIGQyLCBk
MywgZDQsIGQ1KQoreworICAgIHJldHVybiBkZWNvZGVUdXBsZShmLCBbZDEsIGQyLCBkMywgZDQs
IGQ1XSk7Cit9CisKK2Z1bmN0aW9uIGRlY29kZVR1cGxlNihmLCBkMSwgZDIsIGQzLCBkNCwgZDUs
IGQ2KQoreworICAgIHJldHVybiBkZWNvZGVUdXBsZShmLCBbZDEsIGQyLCBkMywgZDQsIGQ1LCBk
Nl0pOworfQorCitmdW5jdGlvbiBkZWNvZGVUdXBsZTcoZiwgZDEsIGQyLCBkMywgZDQsIGQ1LCBk
NiwgZDcpCit7CisgICAgcmV0dXJuIGRlY29kZVR1cGxlKGYsIFtkMSwgZDIsIGQzLCBkNCwgZDUs
IGQ2LCBkN10pOworfQorCitmdW5jdGlvbiBkZWNvZGVUdXBsZTgoZiwgZDEsIGQyLCBkMywgZDQs
IGQ1LCBkNiwgZDcsIGQ4KQoreworICAgIHJldHVybiBkZWNvZGVUdXBsZShmLCBbZDEsIGQyLCBk
MywgZDQsIGQ1LCBkNiwgZDcsIGQ4XSk7Cit9CisKKworLy8gREVDT0RFIEhFTFBFUlMKKworZnVu
Y3Rpb24gb2sodmFsdWUpCit7CisgICAgcmV0dXJuIHsgdGFnOiAnb2snLCB2YWx1ZTogdmFsdWUg
fTsKK30KKworZnVuY3Rpb24gYmFkUHJpbWl0aXZlKHR5cGUsIHZhbHVlKQoreworICAgIHJldHVy
biB7IHRhZzogJ3ByaW1pdGl2ZScsIHR5cGU6IHR5cGUsIHZhbHVlOiB2YWx1ZSB9OworfQorCitm
dW5jdGlvbiBiYWRJbmRleChpbmRleCwgbmVzdGVkUHJvYmxlbXMpCit7CisgICAgcmV0dXJuIHsg
dGFnOiAnaW5kZXgnLCBpbmRleDogaW5kZXgsIHJlc3Q6IG5lc3RlZFByb2JsZW1zIH07Cit9CisK
K2Z1bmN0aW9uIGJhZEZpZWxkKGZpZWxkLCBuZXN0ZWRQcm9ibGVtcykKK3sKKyAgICByZXR1cm4g
eyB0YWc6ICdmaWVsZCcsIGZpZWxkOiBmaWVsZCwgcmVzdDogbmVzdGVkUHJvYmxlbXMgfTsKK30K
KworZnVuY3Rpb24gYmFkT25lT2YocHJvYmxlbXMpCit7CisgICAgcmV0dXJuIHsgdGFnOiAnb25l
T2YnLCBwcm9ibGVtczogcHJvYmxlbXMgfTsKK30KKworZnVuY3Rpb24gYmFkQ3VzdG9tKG1zZykK
K3sKKyAgICByZXR1cm4geyB0YWc6ICdjdXN0b20nLCBtc2c6IG1zZyB9OworfQorCitmdW5jdGlv
biBiYWQobXNnKQoreworICAgIHJldHVybiB7IHRhZzogJ2ZhaWwnLCBtc2c6IG1zZyB9OworfQor
CitmdW5jdGlvbiBiYWRUb1N0cmluZyhwcm9ibGVtKQoreworICAgIHZhciBjb250ZXh0ID0gJ18n
OworICAgIHdoaWxlIChwcm9ibGVtKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChwcm9ibGVtLnRh
ZykKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSAncHJpbWl0aXZlJzoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJ0V4cGVjdGluZyAnICsgcHJvYmxlbS50eXBlCisgICAgICAgICAgICAgICAg
ICAgICsgKGNvbnRleHQgPT09ICdfJyA/ICcnIDogJyBhdCAnICsgY29udGV4dCkKKyAgICAgICAg
ICAgICAgICAgICAgKyAnIGJ1dCBpbnN0ZWFkIGdvdDogJyArIGpzVG9TdHJpbmcocHJvYmxlbS52
YWx1ZSk7CisKKyAgICAgICAgICAgIGNhc2UgJ2luZGV4JzoKKyAgICAgICAgICAgICAgICBjb250
ZXh0ICs9ICdbJyArIHByb2JsZW0uaW5kZXggKyAnXSc7CisgICAgICAgICAgICAgICAgcHJvYmxl
bSA9IHByb2JsZW0ucmVzdDsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
Y2FzZSAnZmllbGQnOgorICAgICAgICAgICAgICAgIGNvbnRleHQgKz0gJy4nICsgcHJvYmxlbS5m
aWVsZDsKKyAgICAgICAgICAgICAgICBwcm9ibGVtID0gcHJvYmxlbS5yZXN0OworICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdvbmVPZic6CisgICAgICAgICAgICAg
ICAgdmFyIHByb2JsZW1zID0gcHJvYmxlbS5wcm9ibGVtczsKKyAgICAgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHByb2JsZW1zLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcHJvYmxlbXNbaV0gPSBiYWRUb1N0cmluZyhwcm9ibGVtc1tp
XSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiAnSSByYW4gaW50
byB0aGUgZm9sbG93aW5nIHByb2JsZW1zJworICAgICAgICAgICAgICAgICAgICArIChjb250ZXh0
ID09PSAnXycgPyAnJyA6ICcgYXQgJyArIGNvbnRleHQpCisgICAgICAgICAgICAgICAgICAgICsg
JzpcblxuJyArIHByb2JsZW1zLmpvaW4oJ1xuJyk7CisKKyAgICAgICAgICAgIGNhc2UgJ2N1c3Rv
bSc6CisgICAgICAgICAgICAgICAgcmV0dXJuICdBIGBjdXN0b21EZWNvZGVyYCBmYWlsZWQnCisg
ICAgICAgICAgICAgICAgICAgICsgKGNvbnRleHQgPT09ICdfJyA/ICcnIDogJyBhdCAnICsgY29u
dGV4dCkKKyAgICAgICAgICAgICAgICAgICAgKyAnIHdpdGggdGhlIG1lc3NhZ2U6ICcgKyBwcm9i
bGVtLm1zZzsKKworICAgICAgICAgICAgY2FzZSAnZmFpbCc6CisgICAgICAgICAgICAgICAgcmV0
dXJuICdJIHJhbiBpbnRvIGEgYGZhaWxgIGRlY29kZXInCisgICAgICAgICAgICAgICAgICAgICsg
KGNvbnRleHQgPT09ICdfJyA/ICcnIDogJyBhdCAnICsgY29udGV4dCkKKyAgICAgICAgICAgICAg
ICAgICAgKyAnOiAnICsgcHJvYmxlbS5tc2c7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0
aW9uIGpzVG9TdHJpbmcodmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQK
KyAgICAgICAgPyAndW5kZWZpbmVkJworICAgICAgICA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTsK
K30KKworCisvLyBERUNPREUKKworZnVuY3Rpb24gcnVuT25TdHJpbmcoZGVjb2Rlciwgc3RyaW5n
KQoreworICAgIHZhciBqc29uOworICAgIHRyeQorICAgIHsKKyAgICAgICAganNvbiA9IEpTT04u
cGFyc2Uoc3RyaW5nKTsKKyAgICB9CisgICAgY2F0Y2ggKGUpCisgICAgeworICAgICAgICByZXR1
cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JEVycignR2l2ZW4gYW4gaW52YWxpZCBKU09OOiAnICsg
ZS5tZXNzYWdlKTsKKyAgICB9CisgICAgcmV0dXJuIHJ1bihkZWNvZGVyLCBqc29uKTsKK30KKwor
ZnVuY3Rpb24gcnVuKGRlY29kZXIsIHZhbHVlKQoreworICAgIHZhciByZXN1bHQgPSBydW5IZWxw
KGRlY29kZXIsIHZhbHVlKTsKKyAgICByZXR1cm4gKHJlc3VsdC50YWcgPT09ICdvaycpCisgICAg
ICAgID8gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JE9rKHJlc3VsdC52YWx1ZSkKKyAgICAgICAgOiBf
ZWxtX2xhbmckY29yZSRSZXN1bHQkRXJyKGJhZFRvU3RyaW5nKHJlc3VsdCkpOworfQorCitmdW5j
dGlvbiBydW5IZWxwKGRlY29kZXIsIHZhbHVlKQoreworICAgIHN3aXRjaCAoZGVjb2Rlci50YWcp
CisgICAgeworICAgICAgICBjYXNlICdib29sJzoKKyAgICAgICAgICAgIHJldHVybiAodHlwZW9m
IHZhbHVlID09PSAnYm9vbGVhbicpCisgICAgICAgICAgICAgICAgPyBvayh2YWx1ZSkKKyAgICAg
ICAgICAgICAgICA6IGJhZFByaW1pdGl2ZSgnYSBCb29sJywgdmFsdWUpOworCisgICAgICAgIGNh
c2UgJ2ludCc6CisgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykgewor
ICAgICAgICAgICAgICAgIHJldHVybiBiYWRQcmltaXRpdmUoJ2FuIEludCcsIHZhbHVlKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKC0yMTQ3NDgzNjQ3IDwgdmFsdWUgJiYgdmFs
dWUgPCAyMTQ3NDgzNjQ3ICYmICh2YWx1ZSB8IDApID09PSB2YWx1ZSkgeworICAgICAgICAgICAg
ICAgIHJldHVybiBvayh2YWx1ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChp
c0Zpbml0ZSh2YWx1ZSkgJiYgISh2YWx1ZSAlIDEpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG9rKHZhbHVlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGJhZFByaW1p
dGl2ZSgnYW4gSW50JywgdmFsdWUpOworCisgICAgICAgIGNhc2UgJ2Zsb2F0JzoKKyAgICAgICAg
ICAgIHJldHVybiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykKKyAgICAgICAgICAgICAgICA/
IG9rKHZhbHVlKQorICAgICAgICAgICAgICAgIDogYmFkUHJpbWl0aXZlKCdhIEZsb2F0JywgdmFs
dWUpOworCisgICAgICAgIGNhc2UgJ3N0cmluZyc6CisgICAgICAgICAgICByZXR1cm4gKHR5cGVv
ZiB2YWx1ZSA9PT0gJ3N0cmluZycpCisgICAgICAgICAgICAgICAgPyBvayh2YWx1ZSkKKyAgICAg
ICAgICAgICAgICA6ICh2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZykKKyAgICAgICAgICAgICAgICAg
ICAgPyBvayh2YWx1ZSArICcnKQorICAgICAgICAgICAgICAgICAgICA6IGJhZFByaW1pdGl2ZSgn
YSBTdHJpbmcnLCB2YWx1ZSk7CisKKyAgICAgICAgY2FzZSAnbnVsbCc6CisgICAgICAgICAgICBy
ZXR1cm4gKHZhbHVlID09PSBudWxsKQorICAgICAgICAgICAgICAgID8gb2soZGVjb2Rlci52YWx1
ZSkKKyAgICAgICAgICAgICAgICA6IGJhZFByaW1pdGl2ZSgnbnVsbCcsIHZhbHVlKTsKKworICAg
ICAgICBjYXNlICd2YWx1ZSc6CisgICAgICAgICAgICByZXR1cm4gb2sodmFsdWUpOworCisgICAg
ICAgIGNhc2UgJ2xpc3QnOgorICAgICAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBBcnJh
eSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJhZFByaW1pdGl2ZSgn
YSBMaXN0JywgdmFsdWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgbGlzdCA9
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0Lk5pbDsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSB2YWx1ZS5sZW5ndGg7IGktLTsgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZh
ciByZXN1bHQgPSBydW5IZWxwKGRlY29kZXIuZGVjb2RlciwgdmFsdWVbaV0pOworICAgICAgICAg
ICAgICAgIGlmIChyZXN1bHQudGFnICE9PSAnb2snKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGJhZEluZGV4KGksIHJlc3VsdCkKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgbGlzdCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LkNv
bnMocmVzdWx0LnZhbHVlLCBsaXN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBvayhsaXN0KTsKKworICAgICAgICBjYXNlICdhcnJheSc6CisgICAgICAgICAgICBpZiAoISh2
YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gYmFkUHJpbWl0aXZlKCdhbiBBcnJheScsIHZhbHVlKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgdmFyIGxlbiA9IHZhbHVlLmxlbmd0aDsKKyAgICAgICAgICAgIHZhciBhcnJh
eSA9IG5ldyBBcnJheShsZW4pOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IGxlbjsgaS0tOyAp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJ1bkhlbHAoZGVj
b2Rlci5kZWNvZGVyLCB2YWx1ZVtpXSk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC50YWcg
IT09ICdvaycpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
YmFkSW5kZXgoaSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YXJyYXlbaV0gPSByZXN1bHQudmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gb2soX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0FycmF5LmZyb21KU0FycmF5KGFycmF5KSk7CisK
KyAgICAgICAgY2FzZSAnbWF5YmUnOgorICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJ1bkhlbHAo
ZGVjb2Rlci5kZWNvZGVyLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gKHJlc3VsdC50YWcg
PT09ICdvaycpCisgICAgICAgICAgICAgICAgPyBvayhfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0
KHJlc3VsdC52YWx1ZSkpCisgICAgICAgICAgICAgICAgOiBvayhfZWxtX2xhbmckY29yZSRNYXli
ZSROb3RoaW5nKTsKKworICAgICAgICBjYXNlICdmaWVsZCc6CisgICAgICAgICAgICB2YXIgZmll
bGQgPSBkZWNvZGVyLmZpZWxkOworICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29i
amVjdCcgfHwgdmFsdWUgPT09IG51bGwgfHwgIShmaWVsZCBpbiB2YWx1ZSkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJhZFByaW1pdGl2ZSgnYW4gb2JqZWN0IHdpdGgg
YSBmaWVsZCBuYW1lZCBgJyArIGZpZWxkICsgJ2AnLCB2YWx1ZSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHZhciByZXN1bHQgPSBydW5IZWxwKGRlY29kZXIuZGVjb2RlciwgdmFsdWVb
ZmllbGRdKTsKKyAgICAgICAgICAgIHJldHVybiAocmVzdWx0LnRhZyA9PT0gJ29rJykKKyAgICAg
ICAgICAgICAgICA/IHJlc3VsdAorICAgICAgICAgICAgICAgIDogYmFkRmllbGQoZmllbGQsIHJl
c3VsdCk7CisKKyAgICAgICAgY2FzZSAna2V5LXZhbHVlJzoKKyAgICAgICAgICAgIGlmICh0eXBl
b2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlIGluc3RhbmNl
b2YgQXJyYXkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJhZFByaW1p
dGl2ZSgnYW4gb2JqZWN0JywgdmFsdWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2
YXIga2V5VmFsdWVQYWlycyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0Lk5pbDsKKyAgICAg
ICAgICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICB2YXIgcmVzdWx0ID0gcnVuSGVscChkZWNvZGVyLmRlY29kZXIsIHZhbHVlW2tleV0pOwor
ICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudGFnICE9PSAnb2snKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhZEZpZWxkKGtleSwgcmVzdWx0KTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIHBhaXIgPSBfZWxtX2xhbmckY29y
ZSROYXRpdmVfVXRpbHMuVHVwbGUyKGtleSwgcmVzdWx0LnZhbHVlKTsKKyAgICAgICAgICAgICAg
ICBrZXlWYWx1ZVBhaXJzID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuQ29ucyhwYWlyLCBr
ZXlWYWx1ZVBhaXJzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBvayhrZXlW
YWx1ZVBhaXJzKTsKKworICAgICAgICBjYXNlICdtYXAtbWFueSc6CisgICAgICAgICAgICB2YXIg
YW5zd2VyID0gZGVjb2Rlci5mdW5jOworICAgICAgICAgICAgdmFyIGRlY29kZXJzID0gZGVjb2Rl
ci5kZWNvZGVyczsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVjb2RlcnMubGVu
Z3RoOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJ1
bkhlbHAoZGVjb2RlcnNbaV0sIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnRh
ZyAhPT0gJ29rJykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFuc3dlciA9IGFu
c3dlcihyZXN1bHQudmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG9r
KGFuc3dlcik7CisKKyAgICAgICAgY2FzZSAndHVwbGUnOgorICAgICAgICAgICAgdmFyIGRlY29k
ZXJzID0gZGVjb2Rlci5kZWNvZGVyczsKKyAgICAgICAgICAgIHZhciBsZW4gPSBkZWNvZGVycy5s
ZW5ndGg7CisKKyAgICAgICAgICAgIGlmICggISh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB8fCB2
YWx1ZS5sZW5ndGggIT09IGxlbiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGJhZFByaW1pdGl2ZSgnYSBUdXBsZSB3aXRoICcgKyBsZW4gKyAnIGVudHJpZXMnLCB2YWx1
ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBhbnN3ZXIgPSBkZWNvZGVyLmZ1
bmM7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBydW5IZWxwKGRlY29kZXJzW2ldLCB2
YWx1ZVtpXSk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC50YWcgIT09ICdvaycpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFkSW5kZXgoaSwgcmVz
dWx0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYW5zd2VyID0gYW5zd2Vy
KHJlc3VsdC52YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gb2soYW5z
d2VyKTsKKworICAgICAgICBjYXNlICdjdXN0b21BbmRUaGVuJzoKKyAgICAgICAgICAgIHZhciBy
ZXN1bHQgPSBydW5IZWxwKGRlY29kZXIuZGVjb2RlciwgdmFsdWUpOworICAgICAgICAgICAgaWYg
KHJlc3VsdC50YWcgIT09ICdvaycpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciByZWFsUmVzdWx0ID0g
ZGVjb2Rlci5jYWxsYmFjayhyZXN1bHQudmFsdWUpOworICAgICAgICAgICAgaWYgKHJlYWxSZXN1
bHQuY3RvciA9PT0gJ0VycicpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGJhZEN1c3RvbShyZWFsUmVzdWx0Ll8wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBvayhyZWFsUmVzdWx0Ll8wKTsKKworICAgICAgICBjYXNlICdhbmRUaGVuJzoKKyAgICAg
ICAgICAgIHZhciByZXN1bHQgPSBydW5IZWxwKGRlY29kZXIuZGVjb2RlciwgdmFsdWUpOworICAg
ICAgICAgICAgcmV0dXJuIChyZXN1bHQudGFnICE9PSAnb2snKQorICAgICAgICAgICAgICAgID8g
cmVzdWx0CisgICAgICAgICAgICAgICAgOiBydW5IZWxwKGRlY29kZXIuY2FsbGJhY2socmVzdWx0
LnZhbHVlKSwgdmFsdWUpOworCisgICAgICAgIGNhc2UgJ29uZU9mJzoKKyAgICAgICAgICAgIHZh
ciBlcnJvcnMgPSBbXTsKKyAgICAgICAgICAgIHZhciB0ZW1wID0gZGVjb2Rlci5kZWNvZGVyczsK
KyAgICAgICAgICAgIHdoaWxlICh0ZW1wLmN0b3IgIT09ICdbXScpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJ1bkhlbHAodGVtcC5fMCwgdmFsdWUpOworCisg
ICAgICAgICAgICAgICAgaWYgKHJlc3VsdC50YWcgPT09ICdvaycpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKHJlc3VsdCk7CisKKyAgICAgICAgICAgICAg
ICB0ZW1wID0gdGVtcC5fMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBiYWRP
bmVPZihlcnJvcnMpOworCisgICAgICAgIGNhc2UgJ2ZhaWwnOgorICAgICAgICAgICAgcmV0dXJu
IGJhZChkZWNvZGVyLm1zZyk7CisKKyAgICAgICAgY2FzZSAnc3VjY2VlZCc6CisgICAgICAgICAg
ICByZXR1cm4gb2soZGVjb2Rlci5tc2cpOworICAgIH0KK30KKworCisvLyBFUVVBTElUWQorCitm
dW5jdGlvbiBlcXVhbGl0eShhLCBiKQoreworICAgIGlmIChhID09PSBiKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGEudGFnICE9PSBiLnRhZykKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGEudGFnKQorICAg
IHsKKyAgICAgICAgY2FzZSAnc3VjY2VlZCc6CisgICAgICAgIGNhc2UgJ2ZhaWwnOgorICAgICAg
ICAgICAgcmV0dXJuIGEubXNnID09PSBiLm1zZzsKKworICAgICAgICBjYXNlICdib29sJzoKKyAg
ICAgICAgY2FzZSAnaW50JzoKKyAgICAgICAgY2FzZSAnZmxvYXQnOgorICAgICAgICBjYXNlICdz
dHJpbmcnOgorICAgICAgICBjYXNlICd2YWx1ZSc6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgICAgICBjYXNlICdudWxsJzoKKyAgICAgICAgICAgIHJldHVybiBhLnZhbHVlID09PSBi
LnZhbHVlOworCisgICAgICAgIGNhc2UgJ2xpc3QnOgorICAgICAgICBjYXNlICdhcnJheSc6Cisg
ICAgICAgIGNhc2UgJ21heWJlJzoKKyAgICAgICAgY2FzZSAna2V5LXZhbHVlJzoKKyAgICAgICAg
ICAgIHJldHVybiBlcXVhbGl0eShhLmRlY29kZXIsIGIuZGVjb2Rlcik7CisKKyAgICAgICAgY2Fz
ZSAnZmllbGQnOgorICAgICAgICAgICAgcmV0dXJuIGEuZmllbGQgPT09IGIuZmllbGQgJiYgZXF1
YWxpdHkoYS5kZWNvZGVyLCBiLmRlY29kZXIpOworCisgICAgICAgIGNhc2UgJ21hcC1tYW55JzoK
KyAgICAgICAgY2FzZSAndHVwbGUnOgorICAgICAgICAgICAgaWYgKGEuZnVuYyAhPT0gYi5mdW5j
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBsaXN0RXF1YWxpdHkoYS5kZWNvZGVycywgYi5kZWNv
ZGVycyk7CisKKyAgICAgICAgY2FzZSAnYW5kVGhlbic6CisgICAgICAgIGNhc2UgJ2N1c3RvbUFu
ZFRoZW4nOgorICAgICAgICAgICAgcmV0dXJuIGEuY2FsbGJhY2sgPT09IGIuY2FsbGJhY2sgJiYg
ZXF1YWxpdHkoYS5kZWNvZGVyLCBiLmRlY29kZXIpOworCisgICAgICAgIGNhc2UgJ29uZU9mJzoK
KyAgICAgICAgICAgIHJldHVybiBsaXN0RXF1YWxpdHkoYS5kZWNvZGVycywgYi5kZWNvZGVycyk7
CisgICAgfQorfQorCitmdW5jdGlvbiBsaXN0RXF1YWxpdHkoYURlY29kZXJzLCBiRGVjb2RlcnMp
Cit7CisgICAgdmFyIGxlbiA9IGFEZWNvZGVycy5sZW5ndGg7CisgICAgaWYgKGxlbiAhPT0gYkRl
Y29kZXJzLmxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICB7CisgICAgICAgIGlmICghZXF1YWxp
dHkoYURlY29kZXJzW2ldLCBiRGVjb2RlcnNbaV0pKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKKwor
Ly8gRU5DT0RFCisKK2Z1bmN0aW9uIGVuY29kZShpbmRlbnRMZXZlbCwgdmFsdWUpCit7CisgICAg
cmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCBpbmRlbnRMZXZlbCk7Cit9CisKK2Z1
bmN0aW9uIGlkZW50aXR5KHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZTsKK30KKworZnVuY3Rp
b24gZW5jb2RlT2JqZWN0KGtleVZhbHVlUGFpcnMpCit7CisgICAgdmFyIG9iaiA9IHt9OworICAg
IHdoaWxlIChrZXlWYWx1ZVBhaXJzLmN0b3IgIT09ICdbXScpCisgICAgeworICAgICAgICB2YXIg
cGFpciA9IGtleVZhbHVlUGFpcnMuXzA7CisgICAgICAgIG9ialtwYWlyLl8wXSA9IHBhaXIuXzE7
CisgICAgICAgIGtleVZhbHVlUGFpcnMgPSBrZXlWYWx1ZVBhaXJzLl8xOworICAgIH0KKyAgICBy
ZXR1cm4gb2JqOworfQorCityZXR1cm4geworICAgIGVuY29kZTogRjIoZW5jb2RlKSwKKyAgICBy
dW5PblN0cmluZzogRjIocnVuT25TdHJpbmcpLAorICAgIHJ1bjogRjIocnVuKSwKKworICAgIGRl
Y29kZU51bGw6IGRlY29kZU51bGwsCisgICAgZGVjb2RlUHJpbWl0aXZlOiBkZWNvZGVQcmltaXRp
dmUsCisgICAgZGVjb2RlQ29udGFpbmVyOiBGMihkZWNvZGVDb250YWluZXIpLAorCisgICAgZGVj
b2RlRmllbGQ6IEYyKGRlY29kZUZpZWxkKSwKKworICAgIGRlY29kZU9iamVjdDE6IEYyKGRlY29k
ZU9iamVjdDEpLAorICAgIGRlY29kZU9iamVjdDI6IEYzKGRlY29kZU9iamVjdDIpLAorICAgIGRl
Y29kZU9iamVjdDM6IEY0KGRlY29kZU9iamVjdDMpLAorICAgIGRlY29kZU9iamVjdDQ6IEY1KGRl
Y29kZU9iamVjdDQpLAorICAgIGRlY29kZU9iamVjdDU6IEY2KGRlY29kZU9iamVjdDUpLAorICAg
IGRlY29kZU9iamVjdDY6IEY3KGRlY29kZU9iamVjdDYpLAorICAgIGRlY29kZU9iamVjdDc6IEY4
KGRlY29kZU9iamVjdDcpLAorICAgIGRlY29kZU9iamVjdDg6IEY5KGRlY29kZU9iamVjdDgpLAor
ICAgIGRlY29kZUtleVZhbHVlUGFpcnM6IGRlY29kZUtleVZhbHVlUGFpcnMsCisKKyAgICBkZWNv
ZGVUdXBsZTE6IEYyKGRlY29kZVR1cGxlMSksCisgICAgZGVjb2RlVHVwbGUyOiBGMyhkZWNvZGVU
dXBsZTIpLAorICAgIGRlY29kZVR1cGxlMzogRjQoZGVjb2RlVHVwbGUzKSwKKyAgICBkZWNvZGVU
dXBsZTQ6IEY1KGRlY29kZVR1cGxlNCksCisgICAgZGVjb2RlVHVwbGU1OiBGNihkZWNvZGVUdXBs
ZTUpLAorICAgIGRlY29kZVR1cGxlNjogRjcoZGVjb2RlVHVwbGU2KSwKKyAgICBkZWNvZGVUdXBs
ZTc6IEY4KGRlY29kZVR1cGxlNyksCisgICAgZGVjb2RlVHVwbGU4OiBGOShkZWNvZGVUdXBsZTgp
LAorCisgICAgYW5kVGhlbjogRjIoYW5kVGhlbiksCisgICAgY3VzdG9tQW5kVGhlbjogRjIoY3Vz
dG9tQW5kVGhlbiksCisgICAgZmFpbDogZmFpbCwKKyAgICBzdWNjZWVkOiBzdWNjZWVkLAorICAg
IG9uZU9mOiBvbmVPZiwKKworICAgIGlkZW50aXR5OiBpZGVudGl0eSwKKyAgICBlbmNvZGVOdWxs
OiBudWxsLAorICAgIGVuY29kZUFycmF5OiBfZWxtX2xhbmckY29yZSROYXRpdmVfQXJyYXkudG9K
U0FycmF5LAorICAgIGVuY29kZUxpc3Q6IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LnRvQXJy
YXksCisgICAgZW5jb2RlT2JqZWN0OiBlbmNvZGVPYmplY3QsCisKKyAgICBlcXVhbGl0eTogZXF1
YWxpdHkKK307CisKK30oKTsKKwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRW5jb2RlJGxpc3Qg
PSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5lbmNvZGVMaXN0OwordmFyIF9lbG1fbGFuZyRj
b3JlJEpzb25fRW5jb2RlJGFycmF5ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZW5jb2Rl
QXJyYXk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9FbmNvZGUkb2JqZWN0ID0gX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX0pzb24uZW5jb2RlT2JqZWN0OwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25f
RW5jb2RlJG51bGwgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5lbmNvZGVOdWxsOwordmFy
IF9lbG1fbGFuZyRjb3JlJEpzb25fRW5jb2RlJGJvb2wgPSBfZWxtX2xhbmckY29yZSROYXRpdmVf
SnNvbi5pZGVudGl0eTsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0VuY29kZSRmbG9hdCA9IF9l
bG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmlkZW50aXR5OwordmFyIF9lbG1fbGFuZyRjb3JlJEpz
b25fRW5jb2RlJGludCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmlkZW50aXR5OwordmFy
IF9lbG1fbGFuZyRjb3JlJEpzb25fRW5jb2RlJHN0cmluZyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9Kc29uLmlkZW50aXR5OwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRW5jb2RlJGVuY29kZSA9
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmVuY29kZTsKK3ZhciBfZWxtX2xhbmckY29yZSRK
c29uX0VuY29kZSRWYWx1ZSA9IHtjdG9yOiAnVmFsdWUnfTsKKwordmFyIF9lbG1fbGFuZyRjb3Jl
JEpzb25fRGVjb2RlJHR1cGxlOCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmRlY29kZVR1
cGxlODsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSR0dXBsZTcgPSBfZWxtX2xhbmck
Y29yZSROYXRpdmVfSnNvbi5kZWNvZGVUdXBsZTc7Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9E
ZWNvZGUkdHVwbGU2ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVjb2RlVHVwbGU2Owor
dmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJHR1cGxlNSA9IF9lbG1fbGFuZyRjb3JlJE5h
dGl2ZV9Kc29uLmRlY29kZVR1cGxlNTsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSR0
dXBsZTQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5kZWNvZGVUdXBsZTQ7Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkdHVwbGUzID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pz
b24uZGVjb2RlVHVwbGUzOwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJHR1cGxlMiA9
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmRlY29kZVR1cGxlMjsKK3ZhciBfZWxtX2xhbmck
Y29yZSRKc29uX0RlY29kZSR0dXBsZTEgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5kZWNv
ZGVUdXBsZTE7Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkc3VjY2VlZCA9IF9lbG1f
bGFuZyRjb3JlJE5hdGl2ZV9Kc29uLnN1Y2NlZWQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9E
ZWNvZGUkZmFpbCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmZhaWw7Cit2YXIgX2VsbV9s
YW5nJGNvcmUkSnNvbl9EZWNvZGUkYW5kVGhlbiA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29u
LmFuZFRoZW47Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkY3VzdG9tRGVjb2RlciA9
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmN1c3RvbUFuZFRoZW47Cit2YXIgX2VsbV9sYW5n
JGNvcmUkSnNvbl9EZWNvZGUkZGVjb2RlVmFsdWUgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNv
bi5ydW47Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkdmFsdWUgPSBfZWxtX2xhbmck
Y29yZSROYXRpdmVfSnNvbi5kZWNvZGVQcmltaXRpdmUoJ3ZhbHVlJyk7Cit2YXIgX2VsbV9sYW5n
JGNvcmUkSnNvbl9EZWNvZGUkbWF5YmUgPSBmdW5jdGlvbiAoZGVjb2RlcikgeworICAgIHJldHVy
biBBMihfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5kZWNvZGVDb250YWluZXIsICdtYXliZScs
IGRlY29kZXIpOworfTsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRudWxsID0gX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVjb2RlTnVsbDsKK3ZhciBfZWxtX2xhbmckY29yZSRK
c29uX0RlY29kZSRhcnJheSA9IGZ1bmN0aW9uIChkZWNvZGVyKSB7CisgICAgcmV0dXJuIEEyKF9l
bG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmRlY29kZUNvbnRhaW5lciwgJ2FycmF5JywgZGVjb2Rl
cik7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJGxpc3QgPSBmdW5jdGlvbiAo
ZGVjb2RlcikgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5kZWNv
ZGVDb250YWluZXIsICdsaXN0JywgZGVjb2Rlcik7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJEpz
b25fRGVjb2RlJGJvb2wgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5kZWNvZGVQcmltaXRp
dmUoJ2Jvb2wnKTsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRpbnQgPSBfZWxtX2xh
bmckY29yZSROYXRpdmVfSnNvbi5kZWNvZGVQcmltaXRpdmUoJ2ludCcpOwordmFyIF9lbG1fbGFu
ZyRjb3JlJEpzb25fRGVjb2RlJGZsb2F0ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVj
b2RlUHJpbWl0aXZlKCdmbG9hdCcpOwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJHN0
cmluZyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmRlY29kZVByaW1pdGl2ZSgnc3RyaW5n
Jyk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkb25lT2YgPSBfZWxtX2xhbmckY29y
ZSROYXRpdmVfSnNvbi5vbmVPZjsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRrZXlW
YWx1ZVBhaXJzID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVjb2RlS2V5VmFsdWVQYWly
czsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRvYmplY3Q4ID0gX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0pzb24uZGVjb2RlT2JqZWN0ODsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0Rl
Y29kZSRvYmplY3Q3ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVjb2RlT2JqZWN0NzsK
K3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRvYmplY3Q2ID0gX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX0pzb24uZGVjb2RlT2JqZWN0NjsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29k
ZSRvYmplY3Q1ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVjb2RlT2JqZWN0NTsKK3Zh
ciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRvYmplY3Q0ID0gX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX0pzb24uZGVjb2RlT2JqZWN0NDsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRv
YmplY3QzID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVjb2RlT2JqZWN0MzsKK3ZhciBf
ZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRvYmplY3QyID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X0pzb24uZGVjb2RlT2JqZWN0MjsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRvYmpl
Y3QxID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVjb2RlT2JqZWN0MTsKK3ZhciBfZWxt
X2xhbmckY29yZSRKc29uX0RlY29kZV9vcHMgPSBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZV9v
cHMgfHwge307CitfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZV9vcHNbJzo9J10gPSBfZWxtX2xh
bmckY29yZSROYXRpdmVfSnNvbi5kZWNvZGVGaWVsZDsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29u
X0RlY29kZSRhdCA9IEYyKAorICAgIGZ1bmN0aW9uIChmaWVsZHMsIGRlY29kZXIpIHsKKyAgICAg
ICAgcmV0dXJuIEEzKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRmb2xkciwKKyAg
ICAgICAgICAgIEYyKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh4LCB5KSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBBMihfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZV9vcHNbJzo9
J10sIHgsIHkpOworICAgICAgICAgICAgICAgIH0pLAorICAgICAgICAgICAgZGVjb2RlciwKKyAg
ICAgICAgICAgIGZpZWxkcyk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNv
ZGUkZGVjb2RlU3RyaW5nID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24ucnVuT25TdHJpbmc7
Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkbWFwID0gX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX0pzb24uZGVjb2RlT2JqZWN0MTsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRk
aWN0ID0gZnVuY3Rpb24gKGRlY29kZXIpIHsKKyAgICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1f
bGFuZyRjb3JlJEpzb25fRGVjb2RlJG1hcCwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCRm
cm9tTGlzdCwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUka2V5VmFsdWVQYWly
cyhkZWNvZGVyKSk7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJERlY29kZXIg
PSB7Y3RvcjogJ0RlY29kZXInfTsKKwordmFyIF9lbG1fbGFuZyRjb3JlJFByb2Nlc3Mka2lsbCA9
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIua2lsbDsKK3ZhciBfZWxtX2xhbmckY29y
ZSRQcm9jZXNzJHNsZWVwID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5zbGVlcDsK
K3ZhciBfZWxtX2xhbmckY29yZSRQcm9jZXNzJHNwYXduID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X1NjaGVkdWxlci5zcGF3bjsKKwordmFyIF9lbG1fbGFuZyRkb20kTmF0aXZlX0RvbSA9IGZ1bmN0
aW9uKCkgeworCitmdW5jdGlvbiBvbihub2RlKQoreworICAgIHJldHVybiBmdW5jdGlvbihldmVu
dE5hbWUsIGRlY29kZXIsIHRvVGFzaykKKyAgICB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmck
Y29yZSROYXRpdmVfU2NoZWR1bGVyLm5hdGl2ZUJpbmRpbmcoZnVuY3Rpb24oY2FsbGJhY2spIHsK
KworICAgICAgICAgICAgZnVuY3Rpb24gcGVyZm9ybVRhc2soZXZlbnQpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IEEyKF9lbG1fbGFuZyRjb3JlJEpzb25fRGVj
b2RlJGRlY29kZVZhbHVlLCBkZWNvZGVyLCBldmVudCk7CisgICAgICAgICAgICAgICAgaWYgKHJl
c3VsdC5jdG9yID09PSAnT2snKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5yYXdTcGF3bih0b1Rhc2socmVzdWx0
Ll8wKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBu
b2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBwZXJmb3JtVGFzayk7CisKKyAgICAgICAg
ICAgIHJldHVybiBmdW5jdGlvbigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbm9k
ZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgcGVyZm9ybVRhc2spOworICAgICAgICAg
ICAgfTsKKyAgICAgICAgfSk7CisgICAgfTsKK30KKwordmFyIHJBRiA9IHR5cGVvZiByZXF1ZXN0
QW5pbWF0aW9uRnJhbWUgIT09ICd1bmRlZmluZWQnCisgICAgPyByZXF1ZXN0QW5pbWF0aW9uRnJh
bWUKKyAgICA6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7IGNhbGxiYWNrKCk7IH07CisKK2Z1bmN0aW9u
IHdpdGhOb2RlKGlkLCBkb1N0dWZmKQoreworICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRp
dmVfU2NoZWR1bGVyLm5hdGl2ZUJpbmRpbmcoZnVuY3Rpb24oY2FsbGJhY2spCisgICAgeworICAg
ICAgICByQUYoZnVuY3Rpb24oKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgbm9kZSA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICAgICAgICAgIGlmIChub2RlID09PSBudWxs
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhbGxiYWNrKF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9TY2hlZHVsZXIuZmFpbCh7IGN0b3I6ICdOb3RGb3VuZCcsIF8wOiBpZCB9KSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FsbGJh
Y2soX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5zdWNjZWVkKGRvU3R1ZmYobm9kZSkp
KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKKworLy8gRk9DVVMKKworZnVuY3Rpb24gZm9j
dXMoaWQpCit7CisgICAgcmV0dXJuIHdpdGhOb2RlKGlkLCBmdW5jdGlvbihub2RlKSB7CisgICAg
ICAgIG5vZGUuZm9jdXMoKTsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9V
dGlscy5UdXBsZTA7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIGJsdXIoaWQpCit7CisgICAgcmV0
dXJuIHdpdGhOb2RlKGlkLCBmdW5jdGlvbihub2RlKSB7CisgICAgICAgIG5vZGUuYmx1cigpOwor
ICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLlR1cGxlMDsKKyAgICB9
KTsKK30KKworCisvLyBTQ1JPTExJTkcKKworZnVuY3Rpb24gZ2V0U2Nyb2xsVG9wKGlkKQorewor
ICAgIHJldHVybiB3aXRoTm9kZShpZCwgZnVuY3Rpb24obm9kZSkgeworICAgICAgICByZXR1cm4g
bm9kZS5zY3JvbGxUb3A7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHNldFNjcm9sbFRvcChpZCwg
ZGVzaXJlZFNjcm9sbFRvcCkKK3sKKyAgICByZXR1cm4gd2l0aE5vZGUoaWQsIGZ1bmN0aW9uKG5v
ZGUpIHsKKyAgICAgICAgbm9kZS5zY3JvbGxUb3AgPSBkZXNpcmVkU2Nyb2xsVG9wOworICAgICAg
ICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLlR1cGxlMDsKKyAgICB9KTsKK30K
KworZnVuY3Rpb24gdG9Cb3R0b20oaWQpCit7CisgICAgcmV0dXJuIHdpdGhOb2RlKGlkLCBmdW5j
dGlvbihub2RlKSB7CisgICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7
CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuVHVwbGUwOworICAg
IH0pOworfQorCitmdW5jdGlvbiBnZXRTY3JvbGxMZWZ0KGlkKQoreworICAgIHJldHVybiB3aXRo
Tm9kZShpZCwgZnVuY3Rpb24obm9kZSkgeworICAgICAgICByZXR1cm4gbm9kZS5zY3JvbGxMZWZ0
OworICAgIH0pOworfQorCitmdW5jdGlvbiBzZXRTY3JvbGxMZWZ0KGlkLCBkZXNpcmVkU2Nyb2xs
TGVmdCkKK3sKKyAgICByZXR1cm4gd2l0aE5vZGUoaWQsIGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAg
ICAgbm9kZS5zY3JvbGxMZWZ0ID0gZGVzaXJlZFNjcm9sbExlZnQ7CisgICAgICAgIHJldHVybiBf
ZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuVHVwbGUwOworICAgIH0pOworfQorCitmdW5jdGlv
biB0b1JpZ2h0KGlkKQoreworICAgIHJldHVybiB3aXRoTm9kZShpZCwgZnVuY3Rpb24obm9kZSkg
eworICAgICAgICBub2RlLnNjcm9sbExlZnQgPSBub2RlLnNjcm9sbFdpZHRoOworICAgICAgICBy
ZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLlR1cGxlMDsKKyAgICB9KTsKK30KKwor
CisvLyBTSVpFCisKK2Z1bmN0aW9uIHdpZHRoKG9wdGlvbnMsIGlkKQoreworICAgIHJldHVybiB3
aXRoTm9kZShpZCwgZnVuY3Rpb24obm9kZSkgeworICAgICAgICBzd2l0Y2ggKG9wdGlvbnMuY3Rv
cikKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSAnQ29udGVudCc6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vZGUuc2Nyb2xsV2lkdGg7CisgICAgICAgICAgICBjYXNlICdWaXNpYmxlQ29u
dGVudCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2xpZW50V2lkdGg7CisgICAgICAg
ICAgICBjYXNlICdWaXNpYmxlQ29udGVudFdpdGhCb3JkZXJzJzoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbm9kZS5vZmZzZXRXaWR0aDsKKyAgICAgICAgICAgIGNhc2UgJ1Zpc2libGVDb250ZW50
V2l0aEJvcmRlcnNBbmRNYXJnaW5zJzoKKyAgICAgICAgICAgICAgICB2YXIgcmVjdCA9IG5vZGUu
Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlY3Qucmln
aHQgLSByZWN0LmxlZnQ7CisgICAgICAgIH0KKyAgICB9KTsKK30KKworZnVuY3Rpb24gaGVpZ2h0
KG9wdGlvbnMsIGlkKQoreworICAgIHJldHVybiB3aXRoTm9kZShpZCwgZnVuY3Rpb24obm9kZSkg
eworICAgICAgICBzd2l0Y2ggKG9wdGlvbnMuY3RvcikKKyAgICAgICAgeworICAgICAgICAgICAg
Y2FzZSAnQ29udGVudCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuc2Nyb2xsSGVpZ2h0
OworICAgICAgICAgICAgY2FzZSAnVmlzaWJsZUNvbnRlbnQnOgorICAgICAgICAgICAgICAgIHJl
dHVybiBub2RlLmNsaWVudEhlaWdodDsKKyAgICAgICAgICAgIGNhc2UgJ1Zpc2libGVDb250ZW50
V2l0aEJvcmRlcnMnOgorICAgICAgICAgICAgICAgIHJldHVybiBub2RlLm9mZnNldEhlaWdodDsK
KyAgICAgICAgICAgIGNhc2UgJ1Zpc2libGVDb250ZW50V2l0aEJvcmRlcnNBbmRNYXJnaW5zJzoK
KyAgICAgICAgICAgICAgICB2YXIgcmVjdCA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlY3QuYm90dG9tIC0gcmVjdC50b3A7CisgICAgICAg
IH0KKyAgICB9KTsKK30KKworcmV0dXJuIHsKKyAgICBvbkRvY3VtZW50OiBGMyhvbihkb2N1bWVu
dCkpLAorICAgIG9uV2luZG93OiBGMyhvbih3aW5kb3cpKSwKKworICAgIGZvY3VzOiBmb2N1cywK
KyAgICBibHVyOiBibHVyLAorCisgICAgZ2V0U2Nyb2xsVG9wOiBnZXRTY3JvbGxUb3AsCisgICAg
c2V0U2Nyb2xsVG9wOiBGMihzZXRTY3JvbGxUb3ApLAorICAgIGdldFNjcm9sbExlZnQ6IGdldFNj
cm9sbExlZnQsCisgICAgc2V0U2Nyb2xsTGVmdDogRjIoc2V0U2Nyb2xsTGVmdCksCisgICAgdG9C
b3R0b206IHRvQm90dG9tLAorICAgIHRvUmlnaHQ6IHRvUmlnaHQsCisKKyAgICBoZWlnaHQ6IEYy
KGhlaWdodCksCisgICAgd2lkdGg6IEYyKHdpZHRoKQorfTsKKworfSgpOworCit2YXIgX2VsbV9s
YW5nJGRvbSREb20kYmx1ciA9IF9lbG1fbGFuZyRkb20kTmF0aXZlX0RvbS5ibHVyOwordmFyIF9l
bG1fbGFuZyRkb20kRG9tJGZvY3VzID0gX2VsbV9sYW5nJGRvbSROYXRpdmVfRG9tLmZvY3VzOwor
dmFyIF9lbG1fbGFuZyRkb20kRG9tJE5vdEZvdW5kID0gZnVuY3Rpb24gKGEpIHsKKyAgICByZXR1
cm4ge2N0b3I6ICdOb3RGb3VuZCcsIF8wOiBhfTsKK307CisKK3ZhciBfZWxtX2xhbmckZG9tJERv
bV9Mb3dMZXZlbCRvbldpbmRvdyA9IF9lbG1fbGFuZyRkb20kTmF0aXZlX0RvbS5vbldpbmRvdzsK
K3ZhciBfZWxtX2xhbmckZG9tJERvbV9Mb3dMZXZlbCRvbkRvY3VtZW50ID0gX2VsbV9sYW5nJGRv
bSROYXRpdmVfRG9tLm9uRG9jdW1lbnQ7CisKKy8vaW1wb3J0IE5hdGl2ZS5Kc29uIC8vCisKK3Zh
ciBfZWxtX2xhbmckdmlydHVhbF9kb20kTmF0aXZlX1ZpcnR1YWxEb20gPSBmdW5jdGlvbigpIHsK
KwordmFyIFNUWUxFX0tFWSA9ICdTVFlMRSc7Cit2YXIgRVZFTlRfS0VZID0gJ0VWRU5UJzsKK3Zh
ciBBVFRSX0tFWSA9ICdBVFRSJzsKK3ZhciBBVFRSX05TX0tFWSA9ICdBVFRSX05TJzsKKworCisK
Ky8vLy8vLy8vLy8vLyAgVklSVFVBTCBET00gTk9ERVMgIC8vLy8vLy8vLy8vLworCisKK2Z1bmN0
aW9uIHRleHQoc3RyaW5nKQoreworICAgIHJldHVybiB7CisgICAgICAgIHR5cGU6ICd0ZXh0JywK
KyAgICAgICAgdGV4dDogc3RyaW5nCisgICAgfTsKK30KKworCitmdW5jdGlvbiBub2RlKHRhZykK
K3sKKyAgICByZXR1cm4gRjIoZnVuY3Rpb24oZmFjdExpc3QsIGtpZExpc3QpIHsKKyAgICAgICAg
cmV0dXJuIG5vZGVIZWxwKHRhZywgZmFjdExpc3QsIGtpZExpc3QpOworICAgIH0pOworfQorCisK
K2Z1bmN0aW9uIG5vZGVIZWxwKHRhZywgZmFjdExpc3QsIGtpZExpc3QpCit7CisgICAgdmFyIG9y
Z2FuaXplZCA9IG9yZ2FuaXplRmFjdHMoZmFjdExpc3QpOworICAgIHZhciBuYW1lc3BhY2UgPSBv
cmdhbml6ZWQubmFtZXNwYWNlOworICAgIHZhciBmYWN0cyA9IG9yZ2FuaXplZC5mYWN0czsKKwor
ICAgIHZhciBjaGlsZHJlbiA9IFtdOworICAgIHZhciBkZXNjZW5kYW50c0NvdW50ID0gMDsKKyAg
ICB3aGlsZSAoa2lkTGlzdC5jdG9yICE9PSAnW10nKQorICAgIHsKKyAgICAgICAgdmFyIGtpZCA9
IGtpZExpc3QuXzA7CisgICAgICAgIGRlc2NlbmRhbnRzQ291bnQgKz0gKGtpZC5kZXNjZW5kYW50
c0NvdW50IHx8IDApOworICAgICAgICBjaGlsZHJlbi5wdXNoKGtpZCk7CisgICAgICAgIGtpZExp
c3QgPSBraWRMaXN0Ll8xOworICAgIH0KKyAgICBkZXNjZW5kYW50c0NvdW50ICs9IGNoaWxkcmVu
Lmxlbmd0aDsKKworICAgIHJldHVybiB7CisgICAgICAgIHR5cGU6ICdub2RlJywKKyAgICAgICAg
dGFnOiB0YWcsCisgICAgICAgIGZhY3RzOiBmYWN0cywKKyAgICAgICAgY2hpbGRyZW46IGNoaWxk
cmVuLAorICAgICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZSwKKyAgICAgICAgZGVzY2VuZGFudHND
b3VudDogZGVzY2VuZGFudHNDb3VudAorICAgIH07Cit9CisKKworZnVuY3Rpb24ga2V5ZWROb2Rl
KHRhZywgZmFjdExpc3QsIGtpZExpc3QpCit7CisgICAgdmFyIG9yZ2FuaXplZCA9IG9yZ2FuaXpl
RmFjdHMoZmFjdExpc3QpOworICAgIHZhciBuYW1lc3BhY2UgPSBvcmdhbml6ZWQubmFtZXNwYWNl
OworICAgIHZhciBmYWN0cyA9IG9yZ2FuaXplZC5mYWN0czsKKworICAgIHZhciBjaGlsZHJlbiA9
IFtdOworICAgIHZhciBkZXNjZW5kYW50c0NvdW50ID0gMDsKKyAgICB3aGlsZSAoa2lkTGlzdC5j
dG9yICE9PSAnW10nKQorICAgIHsKKyAgICAgICAgdmFyIGtpZCA9IGtpZExpc3QuXzA7CisgICAg
ICAgIGRlc2NlbmRhbnRzQ291bnQgKz0gKGtpZC5fMS5kZXNjZW5kYW50c0NvdW50IHx8IDApOwor
ICAgICAgICBjaGlsZHJlbi5wdXNoKGtpZCk7CisgICAgICAgIGtpZExpc3QgPSBraWRMaXN0Ll8x
OworICAgIH0KKyAgICBkZXNjZW5kYW50c0NvdW50ICs9IGNoaWxkcmVuLmxlbmd0aDsKKworICAg
IHJldHVybiB7CisgICAgICAgIHR5cGU6ICdrZXllZC1ub2RlJywKKyAgICAgICAgdGFnOiB0YWcs
CisgICAgICAgIGZhY3RzOiBmYWN0cywKKyAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLAorICAg
ICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZSwKKyAgICAgICAgZGVzY2VuZGFudHNDb3VudDogZGVz
Y2VuZGFudHNDb3VudAorICAgIH07Cit9CisKKworZnVuY3Rpb24gY3VzdG9tKGZhY3RMaXN0LCBt
b2RlbCwgaW1wbCkKK3sKKyAgICB2YXIgZmFjdHMgPSBvcmdhbml6ZUZhY3RzKGZhY3RMaXN0KS5m
YWN0czsKKworICAgIHJldHVybiB7CisgICAgICAgIHR5cGU6ICdjdXN0b20nLAorICAgICAgICBm
YWN0czogZmFjdHMsCisgICAgICAgIG1vZGVsOiBtb2RlbCwKKyAgICAgICAgaW1wbDogaW1wbAor
ICAgIH07Cit9CisKKworZnVuY3Rpb24gbWFwKHRhZ2dlciwgbm9kZSkKK3sKKyAgICByZXR1cm4g
eworICAgICAgICB0eXBlOiAndGFnZ2VyJywKKyAgICAgICAgdGFnZ2VyOiB0YWdnZXIsCisgICAg
ICAgIG5vZGU6IG5vZGUsCisgICAgICAgIGRlc2NlbmRhbnRzQ291bnQ6IDEgKyAobm9kZS5kZXNj
ZW5kYW50c0NvdW50IHx8IDApCisgICAgfTsKK30KKworCitmdW5jdGlvbiB0aHVuayhmdW5jLCBh
cmdzLCB0aHVuaykKK3sKKyAgICByZXR1cm4geworICAgICAgICB0eXBlOiAndGh1bmsnLAorICAg
ICAgICBmdW5jOiBmdW5jLAorICAgICAgICBhcmdzOiBhcmdzLAorICAgICAgICB0aHVuazogdGh1
bmssCisgICAgICAgIG5vZGU6IHVuZGVmaW5lZAorICAgIH07Cit9CisKK2Z1bmN0aW9uIGxhenko
Zm4sIGEpCit7CisgICAgcmV0dXJuIHRodW5rKGZuLCBbYV0sIGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gZm4oYSk7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIGxhenkyKGZuLCBhLCBiKQor
eworICAgIHJldHVybiB0aHVuayhmbiwgW2EsYl0sIGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gQTIoZm4sIGEsIGIpOworICAgIH0pOworfQorCitmdW5jdGlvbiBsYXp5MyhmbiwgYSwgYiwg
YykKK3sKKyAgICByZXR1cm4gdGh1bmsoZm4sIFthLGIsY10sIGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gQTMoZm4sIGEsIGIsIGMpOworICAgIH0pOworfQorCisKKworLy8gRkFDVFMKKwor
CitmdW5jdGlvbiBvcmdhbml6ZUZhY3RzKGZhY3RMaXN0KQoreworICAgIHZhciBuYW1lc3BhY2Us
IGZhY3RzID0ge307CisKKyAgICB3aGlsZSAoZmFjdExpc3QuY3RvciAhPT0gJ1tdJykKKyAgICB7
CisgICAgICAgIHZhciBlbnRyeSA9IGZhY3RMaXN0Ll8wOworICAgICAgICB2YXIga2V5ID0gZW50
cnkua2V5OworCisgICAgICAgIGlmIChrZXkgPT09IEFUVFJfS0VZIHx8IGtleSA9PT0gQVRUUl9O
U19LRVkgfHwga2V5ID09PSBFVkVOVF9LRVkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBz
dWJGYWN0cyA9IGZhY3RzW2tleV0gfHwge307CisgICAgICAgICAgICBzdWJGYWN0c1tlbnRyeS5y
ZWFsS2V5XSA9IGVudHJ5LnZhbHVlOworICAgICAgICAgICAgZmFjdHNba2V5XSA9IHN1YkZhY3Rz
OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gU1RZTEVfS0VZKQorICAgICAg
ICB7CisgICAgICAgICAgICB2YXIgc3R5bGVzID0gZmFjdHNba2V5XSB8fCB7fTsKKyAgICAgICAg
ICAgIHZhciBzdHlsZUxpc3QgPSBlbnRyeS52YWx1ZTsKKyAgICAgICAgICAgIHdoaWxlIChzdHls
ZUxpc3QuY3RvciAhPT0gJ1tdJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIg
c3R5bGUgPSBzdHlsZUxpc3QuXzA7CisgICAgICAgICAgICAgICAgc3R5bGVzW3N0eWxlLl8wXSA9
IHN0eWxlLl8xOworICAgICAgICAgICAgICAgIHN0eWxlTGlzdCA9IHN0eWxlTGlzdC5fMTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGZhY3RzW2tleV0gPSBzdHlsZXM7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAoa2V5ID09PSAnbmFtZXNwYWNlJykKKyAgICAgICAgeworICAgICAg
ICAgICAgbmFtZXNwYWNlID0gZW50cnkudmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBmYWN0c1trZXldID0gZW50cnkudmFsdWU7CisgICAgICAg
IH0KKyAgICAgICAgZmFjdExpc3QgPSBmYWN0TGlzdC5fMTsKKyAgICB9CisKKyAgICByZXR1cm4g
eworICAgICAgICBmYWN0czogZmFjdHMsCisgICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlCisg
ICAgfTsKK30KKworCisKKy8vLy8vLy8vLy8vLyAgUFJPUEVSVElFUyBBTkQgQVRUUklCVVRFUyAg
Ly8vLy8vLy8vLy8vCisKKworZnVuY3Rpb24gc3R5bGUodmFsdWUpCit7CisgICAgcmV0dXJuIHsK
KyAgICAgICAga2V5OiBTVFlMRV9LRVksCisgICAgICAgIHZhbHVlOiB2YWx1ZQorICAgIH07Cit9
CisKKworZnVuY3Rpb24gcHJvcGVydHkoa2V5LCB2YWx1ZSkKK3sKKyAgICByZXR1cm4geworICAg
ICAgICBrZXk6IGtleSwKKyAgICAgICAgdmFsdWU6IHZhbHVlCisgICAgfTsKK30KKworCitmdW5j
dGlvbiBhdHRyaWJ1dGUoa2V5LCB2YWx1ZSkKK3sKKyAgICByZXR1cm4geworICAgICAgICBrZXk6
IEFUVFJfS0VZLAorICAgICAgICByZWFsS2V5OiBrZXksCisgICAgICAgIHZhbHVlOiB2YWx1ZQor
ICAgIH07Cit9CisKKworZnVuY3Rpb24gYXR0cmlidXRlTlMobmFtZXNwYWNlLCBrZXksIHZhbHVl
KQoreworICAgIHJldHVybiB7CisgICAgICAgIGtleTogQVRUUl9OU19LRVksCisgICAgICAgIHJl
YWxLZXk6IGtleSwKKyAgICAgICAgdmFsdWU6IHsKKyAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwK
KyAgICAgICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlCisgICAgICAgIH0KKyAgICB9OworfQor
CisKK2Z1bmN0aW9uIG9uKG5hbWUsIG9wdGlvbnMsIGRlY29kZXIpCit7CisgICAgcmV0dXJuIHsK
KyAgICAgICAga2V5OiBFVkVOVF9LRVksCisgICAgICAgIHJlYWxLZXk6IG5hbWUsCisgICAgICAg
IHZhbHVlOiB7CisgICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zLAorICAgICAgICAgICAgZGVj
b2RlcjogZGVjb2RlcgorICAgICAgICB9CisgICAgfTsKK30KKworCitmdW5jdGlvbiBlcXVhbEV2
ZW50cyhhLCBiKQoreworICAgIGlmICghYS5vcHRpb25zID09PSBiLm9wdGlvbnMpCisgICAgewor
ICAgICAgICBpZiAoYS5zdG9wUHJvcGFnYXRpb24gIT09IGIuc3RvcFByb3BhZ2F0aW9uIHx8IGEu
cHJldmVudERlZmF1bHQgIT09IGIucHJldmVudERlZmF1bHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX0pzb24uZXF1YWxpdHkoYS5kZWNvZGVyLCBiLmRlY29kZXIpOworfQorCisK
KworLy8vLy8vLy8vLy8vICBSRU5ERVJFUiAgLy8vLy8vLy8vLy8vCisKKworZnVuY3Rpb24gcmVu
ZGVyZXIocGFyZW50LCB0YWdnZXIsIGluaXRpYWxWaXJ0dWFsTm9kZSkKK3sKKyAgICB2YXIgZXZl
bnROb2RlID0geyB0YWdnZXI6IHRhZ2dlciwgcGFyZW50OiB1bmRlZmluZWQgfTsKKworICAgIHZh
ciBkb21Ob2RlID0gcmVuZGVyKGluaXRpYWxWaXJ0dWFsTm9kZSwgZXZlbnROb2RlKTsKKyAgICBw
YXJlbnQuYXBwZW5kQ2hpbGQoZG9tTm9kZSk7CisKKyAgICB2YXIgc3RhdGUgPSAnTk9fUkVRVUVT
VCc7CisgICAgdmFyIGN1cnJlbnRWaXJ0dWFsTm9kZSA9IGluaXRpYWxWaXJ0dWFsTm9kZTsKKyAg
ICB2YXIgbmV4dFZpcnR1YWxOb2RlID0gaW5pdGlhbFZpcnR1YWxOb2RlOworCisgICAgZnVuY3Rp
b24gcmVnaXN0ZXJWaXJ0dWFsTm9kZSh2Tm9kZSkKKyAgICB7CisgICAgICAgIGlmIChzdGF0ZSA9
PT0gJ05PX1JFUVVFU1QnKQorICAgICAgICB7CisgICAgICAgICAgICByQUYodXBkYXRlSWZOZWVk
ZWQpOworICAgICAgICB9CisgICAgICAgIHN0YXRlID0gJ1BFTkRJTkdfUkVRVUVTVCc7CisgICAg
ICAgIG5leHRWaXJ0dWFsTm9kZSA9IHZOb2RlOworICAgIH0KKworICAgIGZ1bmN0aW9uIHVwZGF0
ZUlmTmVlZGVkKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNhc2UgJ05PX1JFUVVFU1QnOgorICAgICAgICAgICAgICAgIHRocm93IG5ldyBF
cnJvcigKKyAgICAgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgZHJhdyBjYWxsYmFjay5cbicg
KworICAgICAgICAgICAgICAgICAgICAnUGxlYXNlIHJlcG9ydCB0aGlzIHRvIDxodHRwczovL2dp
dGh1Yi5jb20vZWxtLWxhbmcvY29yZS9pc3N1ZXM+LicKKyAgICAgICAgICAgICAgICApOworCisg
ICAgICAgICAgICBjYXNlICdQRU5ESU5HX1JFUVVFU1QnOgorICAgICAgICAgICAgICAgIHJBRih1
cGRhdGVJZk5lZWRlZCk7CisgICAgICAgICAgICAgICAgc3RhdGUgPSAnRVhUUkFfUkVRVUVTVCc7
CisKKyAgICAgICAgICAgICAgICB2YXIgcGF0Y2hlcyA9IGRpZmYoY3VycmVudFZpcnR1YWxOb2Rl
LCBuZXh0VmlydHVhbE5vZGUpOworICAgICAgICAgICAgICAgIGRvbU5vZGUgPSBhcHBseVBhdGNo
ZXMoZG9tTm9kZSwgY3VycmVudFZpcnR1YWxOb2RlLCBwYXRjaGVzLCBldmVudE5vZGUpOworICAg
ICAgICAgICAgICAgIGN1cnJlbnRWaXJ0dWFsTm9kZSA9IG5leHRWaXJ0dWFsTm9kZTsKKworICAg
ICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgY2FzZSAnRVhUUkFfUkVRVUVTVCc6
CisgICAgICAgICAgICAgICAgc3RhdGUgPSAnTk9fUkVRVUVTVCc7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsgdXBkYXRlOiByZWdpc3Rl
clZpcnR1YWxOb2RlIH07Cit9CisKKwordmFyIHJBRiA9CisgICAgdHlwZW9mIHJlcXVlc3RBbmlt
YXRpb25GcmFtZSAhPT0gJ3VuZGVmaW5lZCcKKyAgICAgICAgPyByZXF1ZXN0QW5pbWF0aW9uRnJh
bWUKKyAgICAgICAgOiBmdW5jdGlvbihjYikgeyBzZXRUaW1lb3V0KGNiLCAxMDAwIC8gNjApOyB9
OworCisKKworLy8vLy8vLy8vLy8vICBSRU5ERVIgIC8vLy8vLy8vLy8vLworCisKK2Z1bmN0aW9u
IHJlbmRlcih2Tm9kZSwgZXZlbnROb2RlKQoreworICAgIHN3aXRjaCAodk5vZGUudHlwZSkKKyAg
ICB7CisgICAgICAgIGNhc2UgJ3RodW5rJzoKKyAgICAgICAgICAgIGlmICghdk5vZGUubm9kZSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2Tm9kZS5ub2RlID0gdk5vZGUudGh1bmso
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZW5kZXIodk5vZGUubm9kZSwg
ZXZlbnROb2RlKTsKKworICAgICAgICBjYXNlICd0YWdnZXInOgorICAgICAgICAgICAgdmFyIHN1
Yk5vZGUgPSB2Tm9kZS5ub2RlOworICAgICAgICAgICAgdmFyIHRhZ2dlciA9IHZOb2RlLnRhZ2dl
cjsKKworICAgICAgICAgICAgd2hpbGUgKHN1Yk5vZGUudHlwZSA9PT0gJ3RhZ2dlcicpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgdHlwZW9mIHRhZ2dlciAhPT0gJ29iamVjdCcKKyAg
ICAgICAgICAgICAgICAgICAgPyB0YWdnZXIgPSBbdGFnZ2VyLCBzdWJOb2RlLnRhZ2dlcl0KKyAg
ICAgICAgICAgICAgICAgICAgOiB0YWdnZXIucHVzaChzdWJOb2RlLnRhZ2dlcik7CisKKyAgICAg
ICAgICAgICAgICBzdWJOb2RlID0gc3ViTm9kZS5ub2RlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICB2YXIgc3ViRXZlbnRSb290ID0geworICAgICAgICAgICAgICAgIHRhZ2dlcjogdGFn
Z2VyLAorICAgICAgICAgICAgICAgIHBhcmVudDogZXZlbnROb2RlCisgICAgICAgICAgICB9Owor
CisgICAgICAgICAgICB2YXIgZG9tTm9kZSA9IHJlbmRlcihzdWJOb2RlLCBzdWJFdmVudFJvb3Qp
OworICAgICAgICAgICAgZG9tTm9kZS5lbG1fZXZlbnRfbm9kZV9yZWYgPSBzdWJFdmVudFJvb3Q7
CisgICAgICAgICAgICByZXR1cm4gZG9tTm9kZTsKKworICAgICAgICBjYXNlICd0ZXh0JzoKKyAg
ICAgICAgICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh2Tm9kZS50ZXh0KTsKKwor
ICAgICAgICBjYXNlICdub2RlJzoKKyAgICAgICAgICAgIHZhciBkb21Ob2RlID0gdk5vZGUubmFt
ZXNwYWNlCisgICAgICAgICAgICAgICAgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlModk5vZGUu
bmFtZXNwYWNlLCB2Tm9kZS50YWcpCisgICAgICAgICAgICAgICAgOiBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KHZOb2RlLnRhZyk7CisKKyAgICAgICAgICAgIGFwcGx5RmFjdHMoZG9tTm9kZSwgZXZl
bnROb2RlLCB2Tm9kZS5mYWN0cyk7CisKKyAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IHZOb2Rl
LmNoaWxkcmVuOworCisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxl
bmd0aDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRvbU5vZGUuYXBwZW5k
Q2hpbGQocmVuZGVyKGNoaWxkcmVuW2ldLCBldmVudE5vZGUpKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcmV0dXJuIGRvbU5vZGU7CisKKyAgICAgICAgY2FzZSAna2V5ZWQtbm9kZSc6
CisgICAgICAgICAgICB2YXIgZG9tTm9kZSA9IHZOb2RlLm5hbWVzcGFjZQorICAgICAgICAgICAg
ICAgID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHZOb2RlLm5hbWVzcGFjZSwgdk5vZGUudGFn
KQorICAgICAgICAgICAgICAgIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh2Tm9kZS50YWcpOwor
CisgICAgICAgICAgICBhcHBseUZhY3RzKGRvbU5vZGUsIGV2ZW50Tm9kZSwgdk5vZGUuZmFjdHMp
OworCisgICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSB2Tm9kZS5jaGlsZHJlbjsKKworICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBkb21Ob2RlLmFwcGVuZENoaWxkKHJlbmRlcihjaGlsZHJl
bltpXS5fMSwgZXZlbnROb2RlKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVy
biBkb21Ob2RlOworCisgICAgICAgIGNhc2UgJ2N1c3RvbSc6CisgICAgICAgICAgICB2YXIgZG9t
Tm9kZSA9IHZOb2RlLmltcGwucmVuZGVyKHZOb2RlLm1vZGVsKTsKKyAgICAgICAgICAgIGFwcGx5
RmFjdHMoZG9tTm9kZSwgZXZlbnROb2RlLCB2Tm9kZS5mYWN0cyk7CisgICAgICAgICAgICByZXR1
cm4gZG9tTm9kZTsKKyAgICB9Cit9CisKKworCisvLy8vLy8vLy8vLy8gIEFQUExZIEZBQ1RTICAv
Ly8vLy8vLy8vLy8KKworCitmdW5jdGlvbiBhcHBseUZhY3RzKGRvbU5vZGUsIGV2ZW50Tm9kZSwg
ZmFjdHMpCit7CisgICAgZm9yICh2YXIga2V5IGluIGZhY3RzKQorICAgIHsKKyAgICAgICAgdmFy
IHZhbHVlID0gZmFjdHNba2V5XTsKKworICAgICAgICBzd2l0Y2ggKGtleSkKKyAgICAgICAgewor
ICAgICAgICAgICAgY2FzZSBTVFlMRV9LRVk6CisgICAgICAgICAgICAgICAgYXBwbHlTdHlsZXMo
ZG9tTm9kZSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBj
YXNlIEVWRU5UX0tFWToKKyAgICAgICAgICAgICAgICBhcHBseUV2ZW50cyhkb21Ob2RlLCBldmVu
dE5vZGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2Fz
ZSBBVFRSX0tFWToKKyAgICAgICAgICAgICAgICBhcHBseUF0dHJzKGRvbU5vZGUsIHZhbHVlKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBBVFRSX05TX0tFWToK
KyAgICAgICAgICAgICAgICBhcHBseUF0dHJzTlMoZG9tTm9kZSwgdmFsdWUpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICd2YWx1ZSc6CisgICAgICAgICAgICAg
ICAgaWYgKGRvbU5vZGVba2V5XSAhPT0gdmFsdWUpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBkb21Ob2RlW2tleV0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgZG9tTm9kZVtrZXldID0gdmFsdWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0aW9uIGFwcGx5U3R5bGVzKGRvbU5vZGUsIHN0eWxlcykK
K3sKKyAgICB2YXIgZG9tTm9kZVN0eWxlID0gZG9tTm9kZS5zdHlsZTsKKworICAgIGZvciAodmFy
IGtleSBpbiBzdHlsZXMpCisgICAgeworICAgICAgICBkb21Ob2RlU3R5bGVba2V5XSA9IHN0eWxl
c1trZXldOworICAgIH0KK30KKworZnVuY3Rpb24gYXBwbHlFdmVudHMoZG9tTm9kZSwgZXZlbnRO
b2RlLCBldmVudHMpCit7CisgICAgdmFyIGFsbEhhbmRsZXJzID0gZG9tTm9kZS5lbG1faGFuZGxl
cnMgfHwge307CisKKyAgICBmb3IgKHZhciBrZXkgaW4gZXZlbnRzKQorICAgIHsKKyAgICAgICAg
dmFyIGhhbmRsZXIgPSBhbGxIYW5kbGVyc1trZXldOworICAgICAgICB2YXIgdmFsdWUgPSBldmVu
dHNba2V5XTsKKworICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykKKyAg
ICAgICAgeworICAgICAgICAgICAgZG9tTm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGtleSwgaGFu
ZGxlcik7CisgICAgICAgICAgICBhbGxIYW5kbGVyc1trZXldID0gdW5kZWZpbmVkOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAndW5kZWZpbmVkJykKKyAg
ICAgICAgeworICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBtYWtlRXZlbnRIYW5kbGVyKGV2ZW50
Tm9kZSwgdmFsdWUpOworICAgICAgICAgICAgZG9tTm9kZS5hZGRFdmVudExpc3RlbmVyKGtleSwg
aGFuZGxlcik7CisgICAgICAgICAgICBhbGxIYW5kbGVyc1trZXldID0gaGFuZGxlcjsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGhhbmRsZXIuaW5mbyA9
IHZhbHVlOworICAgICAgICB9CisgICAgfQorCisgICAgZG9tTm9kZS5lbG1faGFuZGxlcnMgPSBh
bGxIYW5kbGVyczsKK30KKworZnVuY3Rpb24gbWFrZUV2ZW50SGFuZGxlcihldmVudE5vZGUsIGlu
Zm8pCit7CisgICAgZnVuY3Rpb24gZXZlbnRIYW5kbGVyKGV2ZW50KQorICAgIHsKKyAgICAgICAg
dmFyIGluZm8gPSBldmVudEhhbmRsZXIuaW5mbzsKKworICAgICAgICB2YXIgdmFsdWUgPSBBMihf
ZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5ydW4sIGluZm8uZGVjb2RlciwgZXZlbnQpOworCisg
ICAgICAgIGlmICh2YWx1ZS5jdG9yID09PSAnT2snKQorICAgICAgICB7CisgICAgICAgICAgICB2
YXIgb3B0aW9ucyA9IGluZm8ub3B0aW9uczsKKyAgICAgICAgICAgIGlmIChvcHRpb25zLnN0b3BQ
cm9wYWdhdGlvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJv
cGFnYXRpb24oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvcHRpb25zLnByZXZl
bnREZWZhdWx0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnRE
ZWZhdWx0KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBtZXNzYWdlID0gdmFs
dWUuXzA7CisKKyAgICAgICAgICAgIHZhciBjdXJyZW50RXZlbnROb2RlID0gZXZlbnROb2RlOwor
ICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRFdmVudE5vZGUpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgdmFyIHRhZ2dlciA9IGN1cnJlbnRFdmVudE5vZGUudGFnZ2VyOworICAgICAg
ICAgICAgICAgIGlmICh0eXBlb2YgdGFnZ2VyID09PSAnZnVuY3Rpb24nKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IHRhZ2dlcihtZXNzYWdlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRhZ2dlci5sZW5ndGg7IGktLTsgKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0g
dGFnZ2VyW2ldKG1lc3NhZ2UpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGN1cnJlbnRFdmVudE5vZGUgPSBjdXJyZW50RXZlbnROb2Rl
LnBhcmVudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICBldmVudEhh
bmRsZXIuaW5mbyA9IGluZm87CisKKyAgICByZXR1cm4gZXZlbnRIYW5kbGVyOworfQorCitmdW5j
dGlvbiBhcHBseUF0dHJzKGRvbU5vZGUsIGF0dHJzKQoreworICAgIGZvciAodmFyIGtleSBpbiBh
dHRycykKKyAgICB7CisgICAgICAgIHZhciB2YWx1ZSA9IGF0dHJzW2tleV07CisgICAgICAgIGlm
ICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKQorICAgICAgICB7CisgICAgICAgICAgICBk
b21Ob2RlLnJlbW92ZUF0dHJpYnV0ZShrZXkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgZG9tTm9kZS5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0aW9uIGFwcGx5QXR0cnNOUyhkb21Ob2RlLCBuc0F0
dHJzKQoreworICAgIGZvciAodmFyIGtleSBpbiBuc0F0dHJzKQorICAgIHsKKyAgICAgICAgdmFy
IHBhaXIgPSBuc0F0dHJzW2tleV07CisgICAgICAgIHZhciBuYW1lc3BhY2UgPSBwYWlyLm5hbWVz
cGFjZTsKKyAgICAgICAgdmFyIHZhbHVlID0gcGFpci52YWx1ZTsKKworICAgICAgICBpZiAodHlw
ZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykKKyAgICAgICAgeworICAgICAgICAgICAgZG9tTm9k
ZS5yZW1vdmVBdHRyaWJ1dGVOUyhuYW1lc3BhY2UsIGtleSk7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBkb21Ob2RlLnNldEF0dHJpYnV0ZU5TKG5hbWVz
cGFjZSwga2V5LCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKworCisvLy8vLy8vLy8v
Ly8gIERJRkYgIC8vLy8vLy8vLy8vLworCisKK2Z1bmN0aW9uIGRpZmYoYSwgYikKK3sKKyAgICB2
YXIgcGF0Y2hlcyA9IFtdOworICAgIGRpZmZIZWxwKGEsIGIsIHBhdGNoZXMsIDApOworICAgIHJl
dHVybiBwYXRjaGVzOworfQorCisKK2Z1bmN0aW9uIG1ha2VQYXRjaCh0eXBlLCBpbmRleCwgZGF0
YSkKK3sKKyAgICByZXR1cm4geworICAgICAgICBpbmRleDogaW5kZXgsCisgICAgICAgIHR5cGU6
IHR5cGUsCisgICAgICAgIGRhdGE6IGRhdGEsCisgICAgICAgIGRvbU5vZGU6IHVuZGVmaW5lZCwK
KyAgICAgICAgZXZlbnROb2RlOiB1bmRlZmluZWQKKyAgICB9OworfQorCisKK2Z1bmN0aW9uIGRp
ZmZIZWxwKGEsIGIsIHBhdGNoZXMsIGluZGV4KQoreworICAgIGlmIChhID09PSBiKQorICAgIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciBhVHlwZSA9IGEudHlwZTsKKyAgICB2
YXIgYlR5cGUgPSBiLnR5cGU7CisKKyAgICAvLyBCYWlsIGlmIHlvdSBydW4gaW50byBkaWZmZXJl
bnQgdHlwZXMgb2Ygbm9kZXMuIEltcGxpZXMgdGhhdCB0aGUKKyAgICAvLyBzdHJ1Y3R1cmUgaGFz
IGNoYW5nZWQgc2lnbmlmaWNhbnRseSBhbmQgaXQncyBub3Qgd29ydGggYSBkaWZmLgorICAgIGlm
IChhVHlwZSAhPT0gYlR5cGUpCisgICAgeworICAgICAgICBwYXRjaGVzLnB1c2gobWFrZVBhdGNo
KCdwLXJlZHJhdycsIGluZGV4LCBiKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBOb3cgd2Uga25vdyB0aGF0IGJvdGggbm9kZXMgYXJlIHRoZSBzYW1lIHR5cGUuCisgICAgc3dp
dGNoIChiVHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgJ3RodW5rJzoKKyAgICAgICAgICAgIHZh
ciBhQXJncyA9IGEuYXJnczsKKyAgICAgICAgICAgIHZhciBiQXJncyA9IGIuYXJnczsKKyAgICAg
ICAgICAgIHZhciBpID0gYUFyZ3MubGVuZ3RoOworICAgICAgICAgICAgdmFyIHNhbWUgPSBhLmZ1
bmMgPT09IGIuZnVuYyAmJiBpID09PSBiQXJncy5sZW5ndGg7CisgICAgICAgICAgICB3aGlsZSAo
c2FtZSAmJiBpLS0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2FtZSA9IGFBcmdz
W2ldID09PSBiQXJnc1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzYW1lKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGIubm9kZSA9IGEubm9kZTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBiLm5vZGUgPSBiLnRo
dW5rKCk7CisgICAgICAgICAgICB2YXIgc3ViUGF0Y2hlcyA9IFtdOworICAgICAgICAgICAgZGlm
ZkhlbHAoYS5ub2RlLCBiLm5vZGUsIHN1YlBhdGNoZXMsIDApOworICAgICAgICAgICAgaWYgKHN1
YlBhdGNoZXMubGVuZ3RoID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXRj
aGVzLnB1c2gobWFrZVBhdGNoKCdwLXRodW5rJywgaW5kZXgsIHN1YlBhdGNoZXMpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlICd0YWdnZXInOgor
ICAgICAgICAgICAgLy8gZ2F0aGVyIG5lc3RlZCB0YWdnZXJzCisgICAgICAgICAgICB2YXIgYVRh
Z2dlcnMgPSBhLnRhZ2dlcjsKKyAgICAgICAgICAgIHZhciBiVGFnZ2VycyA9IGIudGFnZ2VyOwor
ICAgICAgICAgICAgdmFyIG5lc3RpbmcgPSBmYWxzZTsKKworICAgICAgICAgICAgdmFyIGFTdWJO
b2RlID0gYS5ub2RlOworICAgICAgICAgICAgd2hpbGUgKGFTdWJOb2RlLnR5cGUgPT09ICd0YWdn
ZXInKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5lc3RpbmcgPSB0cnVlOworCisg
ICAgICAgICAgICAgICAgdHlwZW9mIGFUYWdnZXJzICE9PSAnb2JqZWN0JworICAgICAgICAgICAg
ICAgICAgICA/IGFUYWdnZXJzID0gW2FUYWdnZXJzLCBhU3ViTm9kZS50YWdnZXJdCisgICAgICAg
ICAgICAgICAgICAgIDogYVRhZ2dlcnMucHVzaChhU3ViTm9kZS50YWdnZXIpOworCisgICAgICAg
ICAgICAgICAgYVN1Yk5vZGUgPSBhU3ViTm9kZS5ub2RlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICB2YXIgYlN1Yk5vZGUgPSBiLm5vZGU7CisgICAgICAgICAgICB3aGlsZSAoYlN1Yk5v
ZGUudHlwZSA9PT0gJ3RhZ2dlcicpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbmVz
dGluZyA9IHRydWU7CisKKyAgICAgICAgICAgICAgICB0eXBlb2YgYlRhZ2dlcnMgIT09ICdvYmpl
Y3QnCisgICAgICAgICAgICAgICAgICAgID8gYlRhZ2dlcnMgPSBbYlRhZ2dlcnMsIGJTdWJOb2Rl
LnRhZ2dlcl0KKyAgICAgICAgICAgICAgICAgICAgOiBiVGFnZ2Vycy5wdXNoKGJTdWJOb2RlLnRh
Z2dlcik7CisKKyAgICAgICAgICAgICAgICBiU3ViTm9kZSA9IGJTdWJOb2RlLm5vZGU7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEp1c3QgYmFpbCBpZiBkaWZmZXJlbnQgbnVtYmVy
cyBvZiB0YWdnZXJzLiBUaGlzIGltcGxpZXMgdGhlCisgICAgICAgICAgICAvLyBzdHJ1Y3R1cmUg
b2YgdGhlIHZpcnR1YWwgRE9NIGhhcyBjaGFuZ2VkLgorICAgICAgICAgICAgaWYgKG5lc3Rpbmcg
JiYgYVRhZ2dlcnMubGVuZ3RoICE9PSBiVGFnZ2Vycy5sZW5ndGgpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcGF0Y2hlcy5wdXNoKG1ha2VQYXRjaCgncC1yZWRyYXcnLCBpbmRleCwg
YikpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gY2hlY2sgaWYgdGFnZ2VycyBhcmUgInRoZSBzYW1lIgorICAgICAgICAgICAgaWYgKG5l
c3RpbmcgPyAhcGFpcndpc2VSZWZFcXVhbChhVGFnZ2VycywgYlRhZ2dlcnMpIDogYVRhZ2dlcnMg
IT09IGJUYWdnZXJzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhdGNoZXMucHVz
aChtYWtlUGF0Y2goJ3AtdGFnZ2VyJywgaW5kZXgsIGJUYWdnZXJzKSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIGRpZmYgZXZlcnl0aGluZyBiZWxvdyB0aGUgdGFnZ2VycworICAg
ICAgICAgICAgZGlmZkhlbHAoYVN1Yk5vZGUsIGJTdWJOb2RlLCBwYXRjaGVzLCBpbmRleCArIDEp
OworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgJ3RleHQnOgorICAgICAgICAg
ICAgaWYgKGEudGV4dCAhPT0gYi50ZXh0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHBhdGNoZXMucHVzaChtYWtlUGF0Y2goJ3AtdGV4dCcsIGluZGV4LCBiLnRleHQpKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBjYXNlICdub2RlJzoKKyAgICAgICAgICAgIC8vIEJhaWwgaWYgb2J2aW91cyBp
bmRpY2F0b3JzIGhhdmUgY2hhbmdlZC4gSW1wbGllcyBtb3JlIHNlcmlvdXMKKyAgICAgICAgICAg
IC8vIHN0cnVjdHVyYWwgY2hhbmdlcyBzdWNoIHRoYXQgaXQncyBub3Qgd29ydGggaXQgdG8gZGlm
Zi4KKyAgICAgICAgICAgIGlmIChhLnRhZyAhPT0gYi50YWcgfHwgYS5uYW1lc3BhY2UgIT09IGIu
bmFtZXNwYWNlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhdGNoZXMucHVzaCht
YWtlUGF0Y2goJ3AtcmVkcmF3JywgaW5kZXgsIGIpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBmYWN0c0RpZmYgPSBkaWZmRmFjdHMo
YS5mYWN0cywgYi5mYWN0cyk7CisKKyAgICAgICAgICAgIGlmICh0eXBlb2YgZmFjdHNEaWZmICE9
PSAndW5kZWZpbmVkJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXRjaGVzLnB1
c2gobWFrZVBhdGNoKCdwLWZhY3RzJywgaW5kZXgsIGZhY3RzRGlmZikpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBkaWZmQ2hpbGRyZW4oYSwgYiwgcGF0Y2hlcywgaW5kZXgpOworICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgJ2tleWVkLW5vZGUnOgorICAgICAgICAg
ICAgLy8gQmFpbCBpZiBvYnZpb3VzIGluZGljYXRvcnMgaGF2ZSBjaGFuZ2VkLiBJbXBsaWVzIG1v
cmUgc2VyaW91cworICAgICAgICAgICAgLy8gc3RydWN0dXJhbCBjaGFuZ2VzIHN1Y2ggdGhhdCBp
dCdzIG5vdCB3b3J0aCBpdCB0byBkaWZmLgorICAgICAgICAgICAgaWYgKGEudGFnICE9PSBiLnRh
ZyB8fCBhLm5hbWVzcGFjZSAhPT0gYi5uYW1lc3BhY2UpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcGF0Y2hlcy5wdXNoKG1ha2VQYXRjaCgncC1yZWRyYXcnLCBpbmRleCwgYikpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFy
IGZhY3RzRGlmZiA9IGRpZmZGYWN0cyhhLmZhY3RzLCBiLmZhY3RzKTsKKworICAgICAgICAgICAg
aWYgKHR5cGVvZiBmYWN0c0RpZmYgIT09ICd1bmRlZmluZWQnKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHBhdGNoZXMucHVzaChtYWtlUGF0Y2goJ3AtZmFjdHMnLCBpbmRleCwgZmFj
dHNEaWZmKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRpZmZLZXllZENoaWxkcmVu
KGEsIGIsIHBhdGNoZXMsIGluZGV4KTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBj
YXNlICdjdXN0b20nOgorICAgICAgICAgICAgaWYgKGEuaW1wbCAhPT0gYi5pbXBsKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHBhdGNoZXMucHVzaChtYWtlUGF0Y2goJ3AtcmVkcmF3
JywgaW5kZXgsIGIpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHZhciBmYWN0c0RpZmYgPSBkaWZmRmFjdHMoYS5mYWN0cywgYi5mYWN0cyk7
CisgICAgICAgICAgICBpZiAodHlwZW9mIGZhY3RzRGlmZiAhPT0gJ3VuZGVmaW5lZCcpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcGF0Y2hlcy5wdXNoKG1ha2VQYXRjaCgncC1mYWN0
cycsIGluZGV4LCBmYWN0c0RpZmYpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFy
IHBhdGNoID0gYi5pbXBsLmRpZmYoYSxiKTsKKyAgICAgICAgICAgIGlmIChwYXRjaCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXRjaGVzLnB1c2gobWFrZVBhdGNoKCdwLWN1c3Rv
bScsIGluZGV4LCBwYXRjaCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworCisvLyBhc3N1bWVzIHRoZSBp
bmNvbWluZyBhcnJheXMgYXJlIHRoZSBzYW1lIGxlbmd0aAorZnVuY3Rpb24gcGFpcndpc2VSZWZF
cXVhbChhcywgYnMpCit7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcy5sZW5ndGg7IGkrKykK
KyAgICB7CisgICAgICAgIGlmIChhc1tpXSAhPT0gYnNbaV0pCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCisKKy8vIFRPRE8gSW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBkaWZmIG9iamVjdCwgaXQn
cyBwb3NzaWJsZSB0byBqdXN0IHRlc3QgaWYKKy8vIHRoZXJlICppcyogYSBkaWZmLiBEdXJpbmcg
dGhlIGFjdHVhbCBwYXRjaCwgZG8gdGhlIGRpZmYgYWdhaW4gYW5kIG1ha2UgdGhlCisvLyBtb2Rp
ZmljYXRpb25zIGRpcmVjdGx5LiBUaGlzIHdheSwgdGhlcmUncyBubyBuZXcgYWxsb2NhdGlvbnMu
IFdvcnRoIGl0PworZnVuY3Rpb24gZGlmZkZhY3RzKGEsIGIsIGNhdGVnb3J5KQoreworICAgIHZh
ciBkaWZmOworCisgICAgLy8gbG9vayBmb3IgY2hhbmdlcyBhbmQgcmVtb3ZhbHMKKyAgICBmb3Ig
KHZhciBhS2V5IGluIGEpCisgICAgeworICAgICAgICBpZiAoYUtleSA9PT0gU1RZTEVfS0VZIHx8
IGFLZXkgPT09IEVWRU5UX0tFWSB8fCBhS2V5ID09PSBBVFRSX0tFWSB8fCBhS2V5ID09PSBBVFRS
X05TX0tFWSkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHN1YkRpZmYgPSBkaWZmRmFjdHMo
YVthS2V5XSwgYlthS2V5XSB8fCB7fSwgYUtleSk7CisgICAgICAgICAgICBpZiAoc3ViRGlmZikK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkaWZmID0gZGlmZiB8fCB7fTsKKyAgICAg
ICAgICAgICAgICBkaWZmW2FLZXldID0gc3ViRGlmZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gcmVtb3ZlIGlmIG5vdCBpbiB0
aGUgbmV3IGZhY3RzCisgICAgICAgIGlmICghKGFLZXkgaW4gYikpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGRpZmYgPSBkaWZmIHx8IHt9OworICAgICAgICAgICAgZGlmZlthS2V5XSA9CisgICAg
ICAgICAgICAgICAgKHR5cGVvZiBjYXRlZ29yeSA9PT0gJ3VuZGVmaW5lZCcpCisgICAgICAgICAg
ICAgICAgICAgID8gKHR5cGVvZiBhW2FLZXldID09PSAnc3RyaW5nJyA/ICcnIDogbnVsbCkKKyAg
ICAgICAgICAgICAgICAgICAgOgorICAgICAgICAgICAgICAgIChjYXRlZ29yeSA9PT0gU1RZTEVf
S0VZKQorICAgICAgICAgICAgICAgICAgICA/ICcnCisgICAgICAgICAgICAgICAgICAgIDoKKyAg
ICAgICAgICAgICAgICAoY2F0ZWdvcnkgPT09IEVWRU5UX0tFWSB8fCBjYXRlZ29yeSA9PT0gQVRU
Ul9LRVkpCisgICAgICAgICAgICAgICAgICAgID8gdW5kZWZpbmVkCisgICAgICAgICAgICAgICAg
ICAgIDoKKyAgICAgICAgICAgICAgICB7IG5hbWVzcGFjZTogYVthS2V5XS5uYW1lc3BhY2UsIHZh
bHVlOiB1bmRlZmluZWQgfTsKKworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwor
ICAgICAgICB2YXIgYVZhbHVlID0gYVthS2V5XTsKKyAgICAgICAgdmFyIGJWYWx1ZSA9IGJbYUtl
eV07CisKKyAgICAgICAgLy8gcmVmZXJlbmNlIGVxdWFsLCBzbyBkb24ndCB3b3JyeSBhYm91dCBp
dAorICAgICAgICBpZiAoYVZhbHVlID09PSBiVmFsdWUgJiYgYUtleSAhPT0gJ3ZhbHVlJworICAg
ICAgICAgICAgfHwgY2F0ZWdvcnkgPT09IEVWRU5UX0tFWSAmJiBlcXVhbEV2ZW50cyhhVmFsdWUs
IGJWYWx1ZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisK
KyAgICAgICAgZGlmZiA9IGRpZmYgfHwge307CisgICAgICAgIGRpZmZbYUtleV0gPSBiVmFsdWU7
CisgICAgfQorCisgICAgLy8gYWRkIG5ldyBzdHVmZgorICAgIGZvciAodmFyIGJLZXkgaW4gYikK
KyAgICB7CisgICAgICAgIGlmICghKGJLZXkgaW4gYSkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGRpZmYgPSBkaWZmIHx8IHt9OworICAgICAgICAgICAgZGlmZltiS2V5XSA9IGJbYktleV07Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZGlmZjsKK30KKworCitmdW5jdGlvbiBkaWZm
Q2hpbGRyZW4oYVBhcmVudCwgYlBhcmVudCwgcGF0Y2hlcywgcm9vdEluZGV4KQoreworICAgIHZh
ciBhQ2hpbGRyZW4gPSBhUGFyZW50LmNoaWxkcmVuOworICAgIHZhciBiQ2hpbGRyZW4gPSBiUGFy
ZW50LmNoaWxkcmVuOworCisgICAgdmFyIGFMZW4gPSBhQ2hpbGRyZW4ubGVuZ3RoOworICAgIHZh
ciBiTGVuID0gYkNoaWxkcmVuLmxlbmd0aDsKKworICAgIC8vIEZJR1VSRSBPVVQgSUYgVEhFUkUg
QVJFIElOU0VSVFMgT1IgUkVNT1ZBTFMKKworICAgIGlmIChhTGVuID4gYkxlbikKKyAgICB7Cisg
ICAgICAgIHBhdGNoZXMucHVzaChtYWtlUGF0Y2goJ3AtcmVtb3ZlLWxhc3QnLCByb290SW5kZXgs
IGFMZW4gLSBiTGVuKSk7CisgICAgfQorICAgIGVsc2UgaWYgKGFMZW4gPCBiTGVuKQorICAgIHsK
KyAgICAgICAgcGF0Y2hlcy5wdXNoKG1ha2VQYXRjaCgncC1hcHBlbmQnLCByb290SW5kZXgsIGJD
aGlsZHJlbi5zbGljZShhTGVuKSkpOworICAgIH0KKworICAgIC8vIFBBSVJXSVNFIERJRkYgRVZF
UllUSElORyBFTFNFCisKKyAgICB2YXIgaW5kZXggPSByb290SW5kZXg7CisgICAgdmFyIG1pbkxl
biA9IGFMZW4gPCBiTGVuID8gYUxlbiA6IGJMZW47CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBt
aW5MZW47IGkrKykKKyAgICB7CisgICAgICAgIGluZGV4Kys7CisgICAgICAgIHZhciBhQ2hpbGQg
PSBhQ2hpbGRyZW5baV07CisgICAgICAgIGRpZmZIZWxwKGFDaGlsZCwgYkNoaWxkcmVuW2ldLCBw
YXRjaGVzLCBpbmRleCk7CisgICAgICAgIGluZGV4ICs9IGFDaGlsZC5kZXNjZW5kYW50c0NvdW50
IHx8IDA7CisgICAgfQorfQorCisKKworLy8vLy8vLy8vLy8vICBLRVlFRCBESUZGICAvLy8vLy8v
Ly8vLy8KKworCitmdW5jdGlvbiBkaWZmS2V5ZWRDaGlsZHJlbihhUGFyZW50LCBiUGFyZW50LCBw
YXRjaGVzLCByb290SW5kZXgpCit7CisgICAgdmFyIGxvY2FsUGF0Y2hlcyA9IFtdOworCisgICAg
dmFyIGNoYW5nZXMgPSB7fTsgLy8gRGljdCBTdHJpbmcgRW50cnkKKyAgICB2YXIgaW5zZXJ0cyA9
IFtdOyAvLyBBcnJheSB7IGluZGV4IDogSW50LCBlbnRyeSA6IEVudHJ5IH0KKyAgICAvLyB0eXBl
IEVudHJ5ID0geyB0YWcgOiBTdHJpbmcsIHZub2RlIDogVk5vZGUsIGluZGV4IDogSW50LCBkYXRh
IDogXyB9CisKKyAgICB2YXIgYUNoaWxkcmVuID0gYVBhcmVudC5jaGlsZHJlbjsKKyAgICB2YXIg
YkNoaWxkcmVuID0gYlBhcmVudC5jaGlsZHJlbjsKKyAgICB2YXIgYUxlbiA9IGFDaGlsZHJlbi5s
ZW5ndGg7CisgICAgdmFyIGJMZW4gPSBiQ2hpbGRyZW4ubGVuZ3RoOworICAgIHZhciBhSW5kZXgg
PSAwOworICAgIHZhciBiSW5kZXggPSAwOworCisgICAgdmFyIGluZGV4ID0gcm9vdEluZGV4Owor
CisgICAgd2hpbGUgKGFJbmRleCA8IGFMZW4gJiYgYkluZGV4IDwgYkxlbikKKyAgICB7CisgICAg
ICAgIHZhciBhID0gYUNoaWxkcmVuW2FJbmRleF07CisgICAgICAgIHZhciBiID0gYkNoaWxkcmVu
W2JJbmRleF07CisKKyAgICAgICAgdmFyIGFLZXkgPSBhLl8wOworICAgICAgICB2YXIgYktleSA9
IGIuXzA7CisgICAgICAgIHZhciBhTm9kZSA9IGEuXzE7CisgICAgICAgIHZhciBiTm9kZSA9IGIu
XzE7CisKKyAgICAgICAgLy8gY2hlY2sgaWYga2V5cyBtYXRjaAorCisgICAgICAgIGlmIChhS2V5
ID09PSBiS2V5KQorICAgICAgICB7CisgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAg
ZGlmZkhlbHAoYU5vZGUsIGJOb2RlLCBsb2NhbFBhdGNoZXMsIGluZGV4KTsKKyAgICAgICAgICAg
IGluZGV4ICs9IGFOb2RlLmRlc2NlbmRhbnRzQ291bnQgfHwgMDsKKworICAgICAgICAgICAgYUlu
ZGV4Kys7CisgICAgICAgICAgICBiSW5kZXgrKzsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gbG9vayBhaGVhZCAxIHRvIGRldGVjdCBpbnNlcnRpb25zIGFu
ZCByZW1vdmFscy4KKworICAgICAgICB2YXIgYUxvb2tBaGVhZCA9IGFJbmRleCArIDEgPCBhTGVu
OworICAgICAgICB2YXIgYkxvb2tBaGVhZCA9IGJJbmRleCArIDEgPCBiTGVuOworCisgICAgICAg
IGlmIChhTG9va0FoZWFkKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgYU5leHQgPSBhQ2hp
bGRyZW5bYUluZGV4ICsgMV07CisgICAgICAgICAgICB2YXIgYU5leHRLZXkgPSBhTmV4dC5fMDsK
KyAgICAgICAgICAgIHZhciBhTmV4dE5vZGUgPSBhTmV4dC5fMTsKKyAgICAgICAgICAgIHZhciBv
bGRNYXRjaCA9IGJLZXkgPT09IGFOZXh0S2V5OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJM
b29rQWhlYWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBiTmV4dCA9IGJDaGlsZHJlblti
SW5kZXggKyAxXTsKKyAgICAgICAgICAgIHZhciBiTmV4dEtleSA9IGJOZXh0Ll8wOworICAgICAg
ICAgICAgdmFyIGJOZXh0Tm9kZSA9IGJOZXh0Ll8xOworICAgICAgICAgICAgdmFyIG5ld01hdGNo
ID0gYUtleSA9PT0gYk5leHRLZXk7CisgICAgICAgIH0KKworCisgICAgICAgIC8vIHN3YXAgYSBh
bmQgYgorICAgICAgICBpZiAoYUxvb2tBaGVhZCAmJiBiTG9va0FoZWFkICYmIG5ld01hdGNoICYm
IG9sZE1hdGNoKQorICAgICAgICB7CisgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAg
ZGlmZkhlbHAoYU5vZGUsIGJOZXh0Tm9kZSwgbG9jYWxQYXRjaGVzLCBpbmRleCk7CisgICAgICAg
ICAgICBpbnNlcnROb2RlKGNoYW5nZXMsIGxvY2FsUGF0Y2hlcywgYUtleSwgYk5vZGUsIGJJbmRl
eCwgaW5zZXJ0cyk7CisgICAgICAgICAgICBpbmRleCArPSBhTm9kZS5kZXNjZW5kYW50c0NvdW50
IHx8IDA7CisKKyAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICByZW1vdmVOb2RlKGNo
YW5nZXMsIGxvY2FsUGF0Y2hlcywgYUtleSwgYU5leHROb2RlLCBpbmRleCk7CisgICAgICAgICAg
ICBpbmRleCArPSBhTmV4dE5vZGUuZGVzY2VuZGFudHNDb3VudCB8fCAwOworCisgICAgICAgICAg
ICBhSW5kZXggKz0gMjsKKyAgICAgICAgICAgIGJJbmRleCArPSAyOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBpbnNlcnQgYgorICAgICAgICBpZiAoYkxv
b2tBaGVhZCAmJiBuZXdNYXRjaCkKKyAgICAgICAgeworICAgICAgICAgICAgaW5kZXgrKzsKKyAg
ICAgICAgICAgIGluc2VydE5vZGUoY2hhbmdlcywgbG9jYWxQYXRjaGVzLCBiS2V5LCBiTm9kZSwg
YkluZGV4LCBpbnNlcnRzKTsKKyAgICAgICAgICAgIGRpZmZIZWxwKGFOb2RlLCBiTmV4dE5vZGUs
IGxvY2FsUGF0Y2hlcywgaW5kZXgpOworICAgICAgICAgICAgaW5kZXggKz0gYU5vZGUuZGVzY2Vu
ZGFudHNDb3VudCB8fCAwOworCisgICAgICAgICAgICBhSW5kZXggKz0gMTsKKyAgICAgICAgICAg
IGJJbmRleCArPSAyOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAg
ICAvLyByZW1vdmUgYQorICAgICAgICBpZiAoYUxvb2tBaGVhZCAmJiBvbGRNYXRjaCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgIHJlbW92ZU5vZGUoY2hhbmdl
cywgbG9jYWxQYXRjaGVzLCBhS2V5LCBhTm9kZSwgaW5kZXgpOworICAgICAgICAgICAgaW5kZXgg
Kz0gYU5vZGUuZGVzY2VuZGFudHNDb3VudCB8fCAwOworCisgICAgICAgICAgICBpbmRleCsrOwor
ICAgICAgICAgICAgZGlmZkhlbHAoYU5leHROb2RlLCBiTm9kZSwgbG9jYWxQYXRjaGVzLCBpbmRl
eCk7CisgICAgICAgICAgICBpbmRleCArPSBhTmV4dE5vZGUuZGVzY2VuZGFudHNDb3VudCB8fCAw
OworCisgICAgICAgICAgICBhSW5kZXggKz0gMjsKKyAgICAgICAgICAgIGJJbmRleCArPSAxOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyByZW1vdmUgYSwg
aW5zZXJ0IGIKKyAgICAgICAgaWYgKGFMb29rQWhlYWQgJiYgYkxvb2tBaGVhZCAmJiBhTmV4dEtl
eSA9PT0gYk5leHRLZXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAg
ICAgICByZW1vdmVOb2RlKGNoYW5nZXMsIGxvY2FsUGF0Y2hlcywgYUtleSwgYU5vZGUsIGluZGV4
KTsKKyAgICAgICAgICAgIGluc2VydE5vZGUoY2hhbmdlcywgbG9jYWxQYXRjaGVzLCBiS2V5LCBi
Tm9kZSwgYkluZGV4LCBpbnNlcnRzKTsKKyAgICAgICAgICAgIGluZGV4ICs9IGFOb2RlLmRlc2Nl
bmRhbnRzQ291bnQgfHwgMDsKKworICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgIGRp
ZmZIZWxwKGFOZXh0Tm9kZSwgYk5leHROb2RlLCBsb2NhbFBhdGNoZXMsIGluZGV4KTsKKyAgICAg
ICAgICAgIGluZGV4ICs9IGFOZXh0Tm9kZS5kZXNjZW5kYW50c0NvdW50IHx8IDA7CisKKyAgICAg
ICAgICAgIGFJbmRleCArPSAyOworICAgICAgICAgICAgYkluZGV4ICs9IDI7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8v
IGVhdCB1cCBhbnkgcmVtYWluaW5nIG5vZGVzIHdpdGggcmVtb3ZlTm9kZSBhbmQgaW5zZXJ0Tm9k
ZQorCisgICAgd2hpbGUgKGFJbmRleCA8IGFMZW4pCisgICAgeworICAgICAgICBpbmRleCsrOwor
ICAgICAgICB2YXIgYSA9IGFDaGlsZHJlblthSW5kZXhdOworICAgICAgICB2YXIgYU5vZGUgPSBh
Ll8xOworICAgICAgICByZW1vdmVOb2RlKGNoYW5nZXMsIGxvY2FsUGF0Y2hlcywgYS5fMCwgYU5v
ZGUsIGluZGV4KTsKKyAgICAgICAgaW5kZXggKz0gYU5vZGUuZGVzY2VuZGFudHNDb3VudCB8fCAw
OworICAgICAgICBhSW5kZXgrKzsKKyAgICB9CisKKyAgICB2YXIgZW5kSW5zZXJ0czsKKyAgICB3
aGlsZSAoYkluZGV4IDwgYkxlbikKKyAgICB7CisgICAgICAgIGVuZEluc2VydHMgPSBlbmRJbnNl
cnRzIHx8IFtdOworICAgICAgICB2YXIgYiA9IGJDaGlsZHJlbltiSW5kZXhdOworICAgICAgICBp
bnNlcnROb2RlKGNoYW5nZXMsIGxvY2FsUGF0Y2hlcywgYi5fMCwgYi5fMSwgdW5kZWZpbmVkLCBl
bmRJbnNlcnRzKTsKKyAgICAgICAgYkluZGV4Kys7CisgICAgfQorCisgICAgaWYgKGxvY2FsUGF0
Y2hlcy5sZW5ndGggPiAwIHx8IGluc2VydHMubGVuZ3RoID4gMCB8fCB0eXBlb2YgZW5kSW5zZXJ0
cyAhPT0gJ3VuZGVmaW5lZCcpCisgICAgeworICAgICAgICBwYXRjaGVzLnB1c2gobWFrZVBhdGNo
KCdwLXJlb3JkZXInLCByb290SW5kZXgsIHsKKyAgICAgICAgICAgIHBhdGNoZXM6IGxvY2FsUGF0
Y2hlcywKKyAgICAgICAgICAgIGluc2VydHM6IGluc2VydHMsCisgICAgICAgICAgICBlbmRJbnNl
cnRzOiBlbmRJbnNlcnRzCisgICAgICAgIH0pKTsKKyAgICB9Cit9CisKKworCisvLy8vLy8vLy8v
Ly8gIENIQU5HRVMgRlJPTSBLRVlFRCBESUZGICAvLy8vLy8vLy8vLy8KKworCit2YXIgUE9TVEZJ
WCA9ICdfZWxtVzZCTCc7CisKKworZnVuY3Rpb24gaW5zZXJ0Tm9kZShjaGFuZ2VzLCBsb2NhbFBh
dGNoZXMsIGtleSwgdm5vZGUsIGJJbmRleCwgaW5zZXJ0cykKK3sKKyAgICB2YXIgZW50cnkgPSBj
aGFuZ2VzW2tleV07CisKKyAgICAvLyBuZXZlciBzZWVuIHRoaXMga2V5IGJlZm9yZQorICAgIGlm
ICh0eXBlb2YgZW50cnkgPT09ICd1bmRlZmluZWQnKQorICAgIHsKKyAgICAgICAgZW50cnkgPSB7
CisgICAgICAgICAgICB0YWc6ICdpbnNlcnQnLAorICAgICAgICAgICAgdm5vZGU6IHZub2RlLAor
ICAgICAgICAgICAgaW5kZXg6IGJJbmRleCwKKyAgICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZAor
ICAgICAgICB9OworCisgICAgICAgIGluc2VydHMucHVzaCh7IGluZGV4OiBiSW5kZXgsIGVudHJ5
OiBlbnRyeSB9KTsKKyAgICAgICAgY2hhbmdlc1trZXldID0gZW50cnk7CisKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIHRoaXMga2V5IHdhcyByZW1vdmVkIGVhcmxpZXIsIGEgbWF0
Y2ghCisgICAgaWYgKGVudHJ5LnRhZyA9PT0gJ3JlbW92ZScpCisgICAgeworICAgICAgICBpbnNl
cnRzLnB1c2goeyBpbmRleDogYkluZGV4LCBlbnRyeTogZW50cnkgfSk7CisKKyAgICAgICAgZW50
cnkudGFnID0gJ21vdmUnOworICAgICAgICB2YXIgc3ViUGF0Y2hlcyA9IFtdOworICAgICAgICBk
aWZmSGVscChlbnRyeS52bm9kZSwgdm5vZGUsIHN1YlBhdGNoZXMsIGVudHJ5LmluZGV4KTsKKyAg
ICAgICAgZW50cnkuaW5kZXggPSBiSW5kZXg7CisgICAgICAgIGVudHJ5LmRhdGEuZGF0YSA9IHsK
KyAgICAgICAgICAgIHBhdGNoZXM6IHN1YlBhdGNoZXMsCisgICAgICAgICAgICBlbnRyeTogZW50
cnkKKyAgICAgICAgfTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gdGhpcyBr
ZXkgaGFzIGFscmVhZHkgYmVlbiBpbnNlcnRlZCBvciBtb3ZlZCwgYSBkdXBsaWNhdGUhCisgICAg
aW5zZXJ0Tm9kZShjaGFuZ2VzLCBsb2NhbFBhdGNoZXMsIGtleSArIFBPU1RGSVgsIHZub2RlLCBi
SW5kZXgsIGluc2VydHMpOworfQorCisKK2Z1bmN0aW9uIHJlbW92ZU5vZGUoY2hhbmdlcywgbG9j
YWxQYXRjaGVzLCBrZXksIHZub2RlLCBpbmRleCkKK3sKKyAgICB2YXIgZW50cnkgPSBjaGFuZ2Vz
W2tleV07CisKKyAgICAvLyBuZXZlciBzZWVuIHRoaXMga2V5IGJlZm9yZQorICAgIGlmICh0eXBl
b2YgZW50cnkgPT09ICd1bmRlZmluZWQnKQorICAgIHsKKyAgICAgICAgdmFyIHBhdGNoID0gbWFr
ZVBhdGNoKCdwLXJlbW92ZScsIGluZGV4LCB1bmRlZmluZWQpOworICAgICAgICBsb2NhbFBhdGNo
ZXMucHVzaChwYXRjaCk7CisKKyAgICAgICAgY2hhbmdlc1trZXldID0geworICAgICAgICAgICAg
dGFnOiAncmVtb3ZlJywKKyAgICAgICAgICAgIHZub2RlOiB2bm9kZSwKKyAgICAgICAgICAgIGlu
ZGV4OiBpbmRleCwKKyAgICAgICAgICAgIGRhdGE6IHBhdGNoCisgICAgICAgIH07CisKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIHRoaXMga2V5IHdhcyBpbnNlcnRlZCBlYXJsaWVy
LCBhIG1hdGNoIQorICAgIGlmIChlbnRyeS50YWcgPT09ICdpbnNlcnQnKQorICAgIHsKKyAgICAg
ICAgZW50cnkudGFnID0gJ21vdmUnOworICAgICAgICB2YXIgc3ViUGF0Y2hlcyA9IFtdOworICAg
ICAgICBkaWZmSGVscCh2bm9kZSwgZW50cnkudm5vZGUsIHN1YlBhdGNoZXMsIGluZGV4KTsKKwor
ICAgICAgICB2YXIgcGF0Y2ggPSBtYWtlUGF0Y2goJ3AtcmVtb3ZlJywgaW5kZXgsIHsKKyAgICAg
ICAgICAgIHBhdGNoZXM6IHN1YlBhdGNoZXMsCisgICAgICAgICAgICBlbnRyeTogZW50cnkKKyAg
ICAgICAgfSk7CisgICAgICAgIGxvY2FsUGF0Y2hlcy5wdXNoKHBhdGNoKTsKKworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gdGhpcyBrZXkgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVk
IG9yIG1vdmVkLCBhIGR1cGxpY2F0ZSEKKyAgICByZW1vdmVOb2RlKGNoYW5nZXMsIGxvY2FsUGF0
Y2hlcywga2V5ICsgUE9TVEZJWCwgdm5vZGUsIGluZGV4KTsKK30KKworCisKKy8vLy8vLy8vLy8v
LyAgQUREIERPTSBOT0RFUyAgLy8vLy8vLy8vLy8vCisvLworLy8gRWFjaCBET00gbm9kZSBoYXMg
YW4gImluZGV4IiBhc3NpZ25lZCBpbiBvcmRlciBvZiB0cmF2ZXJzYWwuIEl0IGlzIGltcG9ydGFu
dAorLy8gdG8gbWluaW1pemUgb3VyIGNyYXdsIG92ZXIgdGhlIGFjdHVhbCBET00sIHNvIHRoZXNl
IGluZGV4ZXMgKGFsb25nIHdpdGggdGhlCisvLyBkZXNjZW5kYW50c0NvdW50IG9mIHZpcnR1YWwg
bm9kZXMpIGxldCB1cyBza2lwIHRvdWNoaW5nIGVudGlyZSBzdWJ0cmVlcyBvZgorLy8gdGhlIERP
TSBpZiB3ZSBrbm93IHRoZXJlIGFyZSBubyBwYXRjaGVzIHRoZXJlLgorCisKK2Z1bmN0aW9uIGFk
ZERvbU5vZGVzKGRvbU5vZGUsIHZOb2RlLCBwYXRjaGVzLCBldmVudE5vZGUpCit7CisgICAgYWRk
RG9tTm9kZXNIZWxwKGRvbU5vZGUsIHZOb2RlLCBwYXRjaGVzLCAwLCAwLCB2Tm9kZS5kZXNjZW5k
YW50c0NvdW50LCBldmVudE5vZGUpOworfQorCisKKy8vIGFzc3VtZXMgYHBhdGNoZXNgIGlzIG5v
bi1lbXB0eSBhbmQgaW5kZXhlcyBpbmNyZWFzZSBtb25vdG9uaWNhbGx5LgorZnVuY3Rpb24gYWRk
RG9tTm9kZXNIZWxwKGRvbU5vZGUsIHZOb2RlLCBwYXRjaGVzLCBpLCBsb3csIGhpZ2gsIGV2ZW50
Tm9kZSkKK3sKKyAgICB2YXIgcGF0Y2ggPSBwYXRjaGVzW2ldOworICAgIHZhciBpbmRleCA9IHBh
dGNoLmluZGV4OworCisgICAgd2hpbGUgKGluZGV4ID09PSBsb3cpCisgICAgeworICAgICAgICB2
YXIgcGF0Y2hUeXBlID0gcGF0Y2gudHlwZTsKKworICAgICAgICBpZiAocGF0Y2hUeXBlID09PSAn
cC10aHVuaycpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFkZERvbU5vZGVzKGRvbU5vZGUsIHZO
b2RlLm5vZGUsIHBhdGNoLmRhdGEsIGV2ZW50Tm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSBpZiAocGF0Y2hUeXBlID09PSAncC1yZW9yZGVyJykKKyAgICAgICAgeworICAgICAgICAgICAg
cGF0Y2guZG9tTm9kZSA9IGRvbU5vZGU7CisgICAgICAgICAgICBwYXRjaC5ldmVudE5vZGUgPSBl
dmVudE5vZGU7CisKKyAgICAgICAgICAgIHZhciBzdWJQYXRjaGVzID0gcGF0Y2guZGF0YS5wYXRj
aGVzOworICAgICAgICAgICAgaWYgKHN1YlBhdGNoZXMubGVuZ3RoID4gMCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBhZGREb21Ob2Rlc0hlbHAoZG9tTm9kZSwgdk5vZGUsIHN1YlBh
dGNoZXMsIDAsIGxvdywgaGlnaCwgZXZlbnROb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChwYXRjaFR5cGUgPT09ICdwLXJlbW92ZScpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHBhdGNoLmRvbU5vZGUgPSBkb21Ob2RlOworICAgICAgICAgICAgcGF0Y2gu
ZXZlbnROb2RlID0gZXZlbnROb2RlOworCisgICAgICAgICAgICB2YXIgZGF0YSA9IHBhdGNoLmRh
dGE7CisgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEgIT09ICd1bmRlZmluZWQnKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGRhdGEuZW50cnkuZGF0YSA9IGRvbU5vZGU7CisgICAg
ICAgICAgICAgICAgdmFyIHN1YlBhdGNoZXMgPSBkYXRhLnBhdGNoZXM7CisgICAgICAgICAgICAg
ICAgaWYgKHN1YlBhdGNoZXMubGVuZ3RoID4gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGFkZERvbU5vZGVzSGVscChkb21Ob2RlLCB2Tm9kZSwgc3ViUGF0Y2hlcywg
MCwgbG93LCBoaWdoLCBldmVudE5vZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhdGNo
LmRvbU5vZGUgPSBkb21Ob2RlOworICAgICAgICAgICAgcGF0Y2guZXZlbnROb2RlID0gZXZlbnRO
b2RlOworICAgICAgICB9CisKKyAgICAgICAgaSsrOworCisgICAgICAgIGlmICghKHBhdGNoID0g
cGF0Y2hlc1tpXSkgfHwgKGluZGV4ID0gcGF0Y2guaW5kZXgpID4gaGlnaCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKHZO
b2RlLnR5cGUpCisgICAgeworICAgICAgICBjYXNlICd0YWdnZXInOgorICAgICAgICAgICAgdmFy
IHN1Yk5vZGUgPSB2Tm9kZS5ub2RlOworCisgICAgICAgICAgICB3aGlsZSAoc3ViTm9kZS50eXBl
ID09PSAidGFnZ2VyIikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdWJOb2RlID0g
c3ViTm9kZS5ub2RlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gYWRkRG9t
Tm9kZXNIZWxwKGRvbU5vZGUsIHN1Yk5vZGUsIHBhdGNoZXMsIGksIGxvdyArIDEsIGhpZ2gsIGRv
bU5vZGUuZWxtX2V2ZW50X25vZGVfcmVmKTsKKworICAgICAgICBjYXNlICdub2RlJzoKKyAgICAg
ICAgICAgIHZhciB2Q2hpbGRyZW4gPSB2Tm9kZS5jaGlsZHJlbjsKKyAgICAgICAgICAgIHZhciBj
aGlsZE5vZGVzID0gZG9tTm9kZS5jaGlsZE5vZGVzOworICAgICAgICAgICAgZm9yICh2YXIgaiA9
IDA7IGogPCB2Q2hpbGRyZW4ubGVuZ3RoOyBqKyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgbG93Kys7CisgICAgICAgICAgICAgICAgdmFyIHZDaGlsZCA9IHZDaGlsZHJlbltqXTsK
KyAgICAgICAgICAgICAgICB2YXIgbmV4dExvdyA9IGxvdyArICh2Q2hpbGQuZGVzY2VuZGFudHND
b3VudCB8fCAwKTsKKyAgICAgICAgICAgICAgICBpZiAobG93IDw9IGluZGV4ICYmIGluZGV4IDw9
IG5leHRMb3cpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpID0gYWRk
RG9tTm9kZXNIZWxwKGNoaWxkTm9kZXNbal0sIHZDaGlsZCwgcGF0Y2hlcywgaSwgbG93LCBuZXh0
TG93LCBldmVudE5vZGUpOworICAgICAgICAgICAgICAgICAgICBpZiAoIShwYXRjaCA9IHBhdGNo
ZXNbaV0pIHx8IChpbmRleCA9IHBhdGNoLmluZGV4KSA+IGhpZ2gpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxvdyA9IG5leHRMb3c7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gaTsKKworICAgICAgICBjYXNlICdr
ZXllZC1ub2RlJzoKKyAgICAgICAgICAgIHZhciB2Q2hpbGRyZW4gPSB2Tm9kZS5jaGlsZHJlbjsK
KyAgICAgICAgICAgIHZhciBjaGlsZE5vZGVzID0gZG9tTm9kZS5jaGlsZE5vZGVzOworICAgICAg
ICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2Q2hpbGRyZW4ubGVuZ3RoOyBqKyspCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgbG93Kys7CisgICAgICAgICAgICAgICAgdmFyIHZDaGls
ZCA9IHZDaGlsZHJlbltqXS5fMTsKKyAgICAgICAgICAgICAgICB2YXIgbmV4dExvdyA9IGxvdyAr
ICh2Q2hpbGQuZGVzY2VuZGFudHNDb3VudCB8fCAwKTsKKyAgICAgICAgICAgICAgICBpZiAobG93
IDw9IGluZGV4ICYmIGluZGV4IDw9IG5leHRMb3cpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpID0gYWRkRG9tTm9kZXNIZWxwKGNoaWxkTm9kZXNbal0sIHZDaGlsZCwg
cGF0Y2hlcywgaSwgbG93LCBuZXh0TG93LCBldmVudE5vZGUpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoIShwYXRjaCA9IHBhdGNoZXNbaV0pIHx8IChpbmRleCA9IHBhdGNoLmluZGV4KSA+IGhp
Z2gpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGxvdyA9IG5leHRMb3c7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
aTsKKworICAgICAgICBjYXNlICd0ZXh0JzoKKyAgICAgICAgY2FzZSAndGh1bmsnOgorICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaG91bGQgbmV2ZXIgdHJhdmVyc2UgYHRleHRgIG9yIGB0
aHVua2Agbm9kZXMgbGlrZSB0aGlzJyk7CisgICAgfQorfQorCisKKworLy8vLy8vLy8vLy8vICBB
UFBMWSBQQVRDSEVTICAvLy8vLy8vLy8vLy8KKworCitmdW5jdGlvbiBhcHBseVBhdGNoZXMocm9v
dERvbU5vZGUsIG9sZFZpcnR1YWxOb2RlLCBwYXRjaGVzLCBldmVudE5vZGUpCit7CisgICAgaWYg
KHBhdGNoZXMubGVuZ3RoID09PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJvb3REb21Ob2Rl
OworICAgIH0KKworICAgIGFkZERvbU5vZGVzKHJvb3REb21Ob2RlLCBvbGRWaXJ0dWFsTm9kZSwg
cGF0Y2hlcywgZXZlbnROb2RlKTsKKyAgICByZXR1cm4gYXBwbHlQYXRjaGVzSGVscChyb290RG9t
Tm9kZSwgcGF0Y2hlcyk7Cit9CisKK2Z1bmN0aW9uIGFwcGx5UGF0Y2hlc0hlbHAocm9vdERvbU5v
ZGUsIHBhdGNoZXMpCit7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRjaGVzLmxlbmd0aDsg
aSsrKQorICAgIHsKKyAgICAgICAgdmFyIHBhdGNoID0gcGF0Y2hlc1tpXTsKKyAgICAgICAgdmFy
IGxvY2FsRG9tTm9kZSA9IHBhdGNoLmRvbU5vZGUKKyAgICAgICAgdmFyIG5ld05vZGUgPSBhcHBs
eVBhdGNoKGxvY2FsRG9tTm9kZSwgcGF0Y2gpOworICAgICAgICBpZiAobG9jYWxEb21Ob2RlID09
PSByb290RG9tTm9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgcm9vdERvbU5vZGUgPSBuZXdO
b2RlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByb290RG9tTm9kZTsKK30KKworZnVu
Y3Rpb24gYXBwbHlQYXRjaChkb21Ob2RlLCBwYXRjaCkKK3sKKyAgICBzd2l0Y2ggKHBhdGNoLnR5
cGUpCisgICAgeworICAgICAgICBjYXNlICdwLXJlZHJhdyc6CisgICAgICAgICAgICByZXR1cm4g
YXBwbHlQYXRjaFJlZHJhdyhkb21Ob2RlLCBwYXRjaC5kYXRhLCBwYXRjaC5ldmVudE5vZGUpOwor
CisgICAgICAgIGNhc2UgJ3AtZmFjdHMnOgorICAgICAgICAgICAgYXBwbHlGYWN0cyhkb21Ob2Rl
LCBwYXRjaC5ldmVudE5vZGUsIHBhdGNoLmRhdGEpOworICAgICAgICAgICAgcmV0dXJuIGRvbU5v
ZGU7CisKKyAgICAgICAgY2FzZSAncC10ZXh0JzoKKyAgICAgICAgICAgIGRvbU5vZGUucmVwbGFj
ZURhdGEoMCwgZG9tTm9kZS5sZW5ndGgsIHBhdGNoLmRhdGEpOworICAgICAgICAgICAgcmV0dXJu
IGRvbU5vZGU7CisKKyAgICAgICAgY2FzZSAncC10aHVuayc6CisgICAgICAgICAgICByZXR1cm4g
YXBwbHlQYXRjaGVzSGVscChkb21Ob2RlLCBwYXRjaC5kYXRhKTsKKworICAgICAgICBjYXNlICdw
LXRhZ2dlcic6CisgICAgICAgICAgICBkb21Ob2RlLmVsbV9ldmVudF9ub2RlX3JlZi50YWdnZXIg
PSBwYXRjaC5kYXRhOworICAgICAgICAgICAgcmV0dXJuIGRvbU5vZGU7CisKKyAgICAgICAgY2Fz
ZSAncC1yZW1vdmUtbGFzdCc6CisgICAgICAgICAgICB2YXIgaSA9IHBhdGNoLmRhdGE7CisgICAg
ICAgICAgICB3aGlsZSAoaS0tKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRvbU5v
ZGUucmVtb3ZlQ2hpbGQoZG9tTm9kZS5sYXN0Q2hpbGQpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIGRvbU5vZGU7CisKKyAgICAgICAgY2FzZSAncC1hcHBlbmQnOgorICAgICAg
ICAgICAgdmFyIG5ld05vZGVzID0gcGF0Y2guZGF0YTsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbmV3Tm9kZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZG9tTm9kZS5hcHBlbmRDaGlsZChyZW5kZXIobmV3Tm9kZXNbaV0sIHBhdGNoLmV2ZW50
Tm9kZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGRvbU5vZGU7CisKKyAg
ICAgICAgY2FzZSAncC1yZW1vdmUnOgorICAgICAgICAgICAgdmFyIGRhdGEgPSBwYXRjaC5kYXRh
OworICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAndW5kZWZpbmVkJykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBkb21Ob2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZG9t
Tm9kZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRvbU5vZGU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB2YXIgZW50cnkgPSBkYXRhLmVudHJ5OworICAgICAgICAgICAgaWYgKHR5cGVv
ZiBlbnRyeS5pbmRleCAhPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZG9tTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRvbU5vZGUpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZW50cnkuZGF0YSA9IGFwcGx5UGF0Y2hlc0hlbHAoZG9tTm9kZSwg
ZGF0YS5wYXRjaGVzKTsKKyAgICAgICAgICAgIHJldHVybiBkb21Ob2RlOworCisgICAgICAgIGNh
c2UgJ3AtcmVvcmRlcic6CisgICAgICAgICAgICByZXR1cm4gYXBwbHlQYXRjaFJlb3JkZXIoZG9t
Tm9kZSwgcGF0Y2gpOworCisgICAgICAgIGNhc2UgJ3AtY3VzdG9tJzoKKyAgICAgICAgICAgIHZh
ciBpbXBsID0gcGF0Y2guZGF0YTsKKyAgICAgICAgICAgIHJldHVybiBpbXBsLmFwcGx5UGF0Y2go
ZG9tTm9kZSwgaW1wbC5kYXRhKTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCdSYW4gaW50byBhbiB1bmtub3duIHBhdGNoIScpOworICAgIH0KK30KKwor
CitmdW5jdGlvbiBhcHBseVBhdGNoUmVkcmF3KGRvbU5vZGUsIHZOb2RlLCBldmVudE5vZGUpCit7
CisgICAgdmFyIHBhcmVudE5vZGUgPSBkb21Ob2RlLnBhcmVudE5vZGU7CisgICAgdmFyIG5ld05v
ZGUgPSByZW5kZXIodk5vZGUsIGV2ZW50Tm9kZSk7CisKKyAgICBpZiAodHlwZW9mIG5ld05vZGUu
ZWxtX2V2ZW50X25vZGVfcmVmID09PSAndW5kZWZpbmVkJykKKyAgICB7CisgICAgICAgIG5ld05v
ZGUuZWxtX2V2ZW50X25vZGVfcmVmID0gZG9tTm9kZS5lbG1fZXZlbnRfbm9kZV9yZWY7CisgICAg
fQorCisgICAgaWYgKHBhcmVudE5vZGUgJiYgbmV3Tm9kZSAhPT0gZG9tTm9kZSkKKyAgICB7Cisg
ICAgICAgIHBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG5ld05vZGUsIGRvbU5vZGUpOworICAgIH0K
KyAgICByZXR1cm4gbmV3Tm9kZTsKK30KKworCitmdW5jdGlvbiBhcHBseVBhdGNoUmVvcmRlcihk
b21Ob2RlLCBwYXRjaCkKK3sKKyAgICB2YXIgZGF0YSA9IHBhdGNoLmRhdGE7CisKKyAgICAvLyBy
ZW1vdmUgZW5kIGluc2VydHMKKyAgICB2YXIgZnJhZyA9IGFwcGx5UGF0Y2hSZW9yZGVyRW5kSW5z
ZXJ0c0hlbHAoZGF0YS5lbmRJbnNlcnRzLCBwYXRjaCk7CisKKyAgICAvLyByZW1vdmFscworICAg
IGRvbU5vZGUgPSBhcHBseVBhdGNoZXNIZWxwKGRvbU5vZGUsIGRhdGEucGF0Y2hlcyk7CisKKyAg
ICAvLyBpbnNlcnRzCisgICAgdmFyIGluc2VydHMgPSBkYXRhLmluc2VydHM7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBpbnNlcnRzLmxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgdmFyIGlu
c2VydCA9IGluc2VydHNbaV07CisgICAgICAgIHZhciBlbnRyeSA9IGluc2VydC5lbnRyeTsKKyAg
ICAgICAgdmFyIG5vZGUgPSBlbnRyeS50YWcgPT09ICdtb3ZlJworICAgICAgICAgICAgPyBlbnRy
eS5kYXRhCisgICAgICAgICAgICA6IHJlbmRlcihlbnRyeS52bm9kZSwgcGF0Y2guZXZlbnROb2Rl
KTsKKyAgICAgICAgZG9tTm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgZG9tTm9kZS5jaGlsZE5vZGVz
W2luc2VydC5pbmRleF0pOworICAgIH0KKworICAgIC8vIGFkZCBlbmQgaW5zZXJ0cworICAgIGlm
ICh0eXBlb2YgZnJhZyAhPT0gJ3VuZGVmaW5lZCcpCisgICAgeworICAgICAgICBkb21Ob2RlLmFw
cGVuZENoaWxkKGZyYWcpOworICAgIH0KKworICAgIHJldHVybiBkb21Ob2RlOworfQorCisKK2Z1
bmN0aW9uIGFwcGx5UGF0Y2hSZW9yZGVyRW5kSW5zZXJ0c0hlbHAoZW5kSW5zZXJ0cywgcGF0Y2gp
Cit7CisgICAgaWYgKHR5cGVvZiBlbmRJbnNlcnRzID09PSAndW5kZWZpbmVkJykKKyAgICB7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURv
Y3VtZW50RnJhZ21lbnQoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVuZEluc2VydHMubGVu
Z3RoOyBpKyspCisgICAgeworICAgICAgICB2YXIgaW5zZXJ0ID0gZW5kSW5zZXJ0c1tpXTsKKyAg
ICAgICAgdmFyIGVudHJ5ID0gaW5zZXJ0LmVudHJ5OworICAgICAgICBmcmFnLmFwcGVuZENoaWxk
KGVudHJ5LnRhZyA9PT0gJ21vdmUnCisgICAgICAgICAgICA/IGVudHJ5LmRhdGEKKyAgICAgICAg
ICAgIDogcmVuZGVyKGVudHJ5LnZub2RlLCBwYXRjaC5ldmVudE5vZGUpCisgICAgICAgICk7Cisg
ICAgfQorICAgIHJldHVybiBmcmFnOworfQorCisKKworLy8vLy8vLy8vLy8vICBQUk9HUkFNUyAg
Ly8vLy8vLy8vLy8vCisKKworZnVuY3Rpb24gcHJvZ3JhbVdpdGhGbGFncyhkZXRhaWxzKQorewor
ICAgIHJldHVybiB7CisgICAgICAgIGluaXQ6IGRldGFpbHMuaW5pdCwKKyAgICAgICAgdXBkYXRl
OiBkZXRhaWxzLnVwZGF0ZSwKKyAgICAgICAgc3Vic2NyaXB0aW9uczogZGV0YWlscy5zdWJzY3Jp
cHRpb25zLAorICAgICAgICB2aWV3OiBkZXRhaWxzLnZpZXcsCisgICAgICAgIHJlbmRlcmVyOiBy
ZW5kZXJlcgorICAgIH07Cit9CisKKworcmV0dXJuIHsKKyAgICBub2RlOiBub2RlLAorICAgIHRl
eHQ6IHRleHQsCisKKyAgICBjdXN0b206IGN1c3RvbSwKKworICAgIG1hcDogRjIobWFwKSwKKwor
ICAgIG9uOiBGMyhvbiksCisgICAgc3R5bGU6IHN0eWxlLAorICAgIHByb3BlcnR5OiBGMihwcm9w
ZXJ0eSksCisgICAgYXR0cmlidXRlOiBGMihhdHRyaWJ1dGUpLAorICAgIGF0dHJpYnV0ZU5TOiBG
MyhhdHRyaWJ1dGVOUyksCisKKyAgICBsYXp5OiBGMihsYXp5KSwKKyAgICBsYXp5MjogRjMobGF6
eTIpLAorICAgIGxhenkzOiBGNChsYXp5MyksCisgICAga2V5ZWROb2RlOiBGMyhrZXllZE5vZGUp
LAorCisgICAgcHJvZ3JhbVdpdGhGbGFnczogcHJvZ3JhbVdpdGhGbGFncworfTsKKworfSgpOwor
dmFyIF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJHByb2dyYW1XaXRoRmxhZ3MgPSBf
ZWxtX2xhbmckdmlydHVhbF9kb20kTmF0aXZlX1ZpcnR1YWxEb20ucHJvZ3JhbVdpdGhGbGFnczsK
K3ZhciBfZWxtX2xhbmckdmlydHVhbF9kb20kVmlydHVhbERvbSRrZXllZE5vZGUgPSBfZWxtX2xh
bmckdmlydHVhbF9kb20kTmF0aXZlX1ZpcnR1YWxEb20ua2V5ZWROb2RlOwordmFyIF9lbG1fbGFu
ZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJGxhenkzID0gX2VsbV9sYW5nJHZpcnR1YWxfZG9tJE5h
dGl2ZV9WaXJ0dWFsRG9tLmxhenkzOwordmFyIF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFs
RG9tJGxhenkyID0gX2VsbV9sYW5nJHZpcnR1YWxfZG9tJE5hdGl2ZV9WaXJ0dWFsRG9tLmxhenky
OwordmFyIF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJGxhenkgPSBfZWxtX2xhbmck
dmlydHVhbF9kb20kTmF0aXZlX1ZpcnR1YWxEb20ubGF6eTsKK3ZhciBfZWxtX2xhbmckdmlydHVh
bF9kb20kVmlydHVhbERvbSRkZWZhdWx0T3B0aW9ucyA9IHtzdG9wUHJvcGFnYXRpb246IGZhbHNl
LCBwcmV2ZW50RGVmYXVsdDogZmFsc2V9OwordmFyIF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0
dWFsRG9tJG9uV2l0aE9wdGlvbnMgPSBfZWxtX2xhbmckdmlydHVhbF9kb20kTmF0aXZlX1ZpcnR1
YWxEb20ub247Cit2YXIgX2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1YWxEb20kb24gPSBGMigK
KyAgICBmdW5jdGlvbiAoZXZlbnROYW1lLCBkZWNvZGVyKSB7CisgICAgICAgIHJldHVybiBBMyhf
ZWxtX2xhbmckdmlydHVhbF9kb20kVmlydHVhbERvbSRvbldpdGhPcHRpb25zLCBldmVudE5hbWUs
IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJGRlZmF1bHRPcHRpb25zLCBkZWNvZGVy
KTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckdmlydHVhbF9kb20kVmlydHVhbERvbSRzdHlsZSA9
IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSROYXRpdmVfVmlydHVhbERvbS5zdHlsZTsKK3ZhciBfZWxt
X2xhbmckdmlydHVhbF9kb20kVmlydHVhbERvbSRhdHRyaWJ1dGVOUyA9IF9lbG1fbGFuZyR2aXJ0
dWFsX2RvbSROYXRpdmVfVmlydHVhbERvbS5hdHRyaWJ1dGVOUzsKK3ZhciBfZWxtX2xhbmckdmly
dHVhbF9kb20kVmlydHVhbERvbSRhdHRyaWJ1dGUgPSBfZWxtX2xhbmckdmlydHVhbF9kb20kTmF0
aXZlX1ZpcnR1YWxEb20uYXR0cmlidXRlOwordmFyIF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0
dWFsRG9tJHByb3BlcnR5ID0gX2VsbV9sYW5nJHZpcnR1YWxfZG9tJE5hdGl2ZV9WaXJ0dWFsRG9t
LnByb3BlcnR5OwordmFyIF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJG1hcCA9IF9l
bG1fbGFuZyR2aXJ0dWFsX2RvbSROYXRpdmVfVmlydHVhbERvbS5tYXA7Cit2YXIgX2VsbV9sYW5n
JHZpcnR1YWxfZG9tJFZpcnR1YWxEb20kdGV4dCA9IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSROYXRp
dmVfVmlydHVhbERvbS50ZXh0OwordmFyIF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9t
JG5vZGUgPSBfZWxtX2xhbmckdmlydHVhbF9kb20kTmF0aXZlX1ZpcnR1YWxEb20ubm9kZTsKK3Zh
ciBfZWxtX2xhbmckdmlydHVhbF9kb20kVmlydHVhbERvbSRPcHRpb25zID0gRjIoCisgICAgZnVu
Y3Rpb24gKGEsIGIpIHsKKyAgICAgICAgcmV0dXJuIHtzdG9wUHJvcGFnYXRpb246IGEsIHByZXZl
bnREZWZhdWx0OiBifTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckdmlydHVhbF9kb20kVmlydHVh
bERvbSROb2RlID0ge2N0b3I6ICdOb2RlJ307Cit2YXIgX2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZp
cnR1YWxEb20kUHJvcGVydHkgPSB7Y3RvcjogJ1Byb3BlcnR5J307CisKK3ZhciBfZWxtX2xhbmck
aHRtbCRIdG1sJHRleHQgPSBfZWxtX2xhbmckdmlydHVhbF9kb20kVmlydHVhbERvbSR0ZXh0Owor
dmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSA9IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0
dWFsRG9tJG5vZGU7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRib2R5ID0gX2VsbV9sYW5nJGh0
bWwkSHRtbCRub2RlKCdib2R5Jyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRzZWN0aW9uID0g
X2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdzZWN0aW9uJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwk
SHRtbCRuYXYgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ25hdicpOwordmFyIF9lbG1fbGFu
ZyRodG1sJEh0bWwkYXJ0aWNsZSA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnYXJ0aWNsZScp
OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkYXNpZGUgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5v
ZGUoJ2FzaWRlJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRoMSA9IF9lbG1fbGFuZyRodG1s
JEh0bWwkbm9kZSgnaDEnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGgyID0gX2VsbV9sYW5n
JGh0bWwkSHRtbCRub2RlKCdoMicpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkaDMgPSBfZWxt
X2xhbmckaHRtbCRIdG1sJG5vZGUoJ2gzJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRoNCA9
IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnaDQnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1s
JGg1ID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdoNScpOwordmFyIF9lbG1fbGFuZyRodG1s
JEh0bWwkaDYgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2g2Jyk7Cit2YXIgX2VsbV9sYW5n
JGh0bWwkSHRtbCRoZWFkZXIgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2hlYWRlcicpOwor
dmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkZm9vdGVyID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2Rl
KCdmb290ZXInKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGFkZHJlc3MgPSBfZWxtX2xhbmck
aHRtbCRIdG1sJG5vZGUoJ2FkZHJlc3MnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJG1haW4k
ID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdtYWluJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwk
SHRtbCRwID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdwJyk7Cit2YXIgX2VsbV9sYW5nJGh0
bWwkSHRtbCRociA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnaHInKTsKK3ZhciBfZWxtX2xh
bmckaHRtbCRIdG1sJHByZSA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgncHJlJyk7Cit2YXIg
X2VsbV9sYW5nJGh0bWwkSHRtbCRibG9ja3F1b3RlID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2Rl
KCdibG9ja3F1b3RlJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRvbCA9IF9lbG1fbGFuZyRo
dG1sJEh0bWwkbm9kZSgnb2wnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHVsID0gX2VsbV9s
YW5nJGh0bWwkSHRtbCRub2RlKCd1bCcpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkbGkgPSBf
ZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2xpJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRk
bCA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnZGwnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRI
dG1sJGR0ID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdkdCcpOwordmFyIF9lbG1fbGFuZyRo
dG1sJEh0bWwkZGQgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2RkJyk7Cit2YXIgX2VsbV9s
YW5nJGh0bWwkSHRtbCRmaWd1cmUgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2ZpZ3VyZScp
OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkZmlnY2FwdGlvbiA9IF9lbG1fbGFuZyRodG1sJEh0
bWwkbm9kZSgnZmlnY2FwdGlvbicpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkZGl2ID0gX2Vs
bV9sYW5nJGh0bWwkSHRtbCRub2RlKCdkaXYnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGEg
PSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2EnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1s
JGVtID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdlbScpOwordmFyIF9lbG1fbGFuZyRodG1s
JEh0bWwkc3Ryb25nID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdzdHJvbmcnKTsKK3ZhciBf
ZWxtX2xhbmckaHRtbCRIdG1sJHNtYWxsID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdzbWFs
bCcpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkcyA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9k
ZSgncycpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkY2l0ZSA9IF9lbG1fbGFuZyRodG1sJEh0
bWwkbm9kZSgnY2l0ZScpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkcSA9IF9lbG1fbGFuZyRo
dG1sJEh0bWwkbm9kZSgncScpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkZGZuID0gX2VsbV9s
YW5nJGh0bWwkSHRtbCRub2RlKCdkZm4nKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGFiYnIg
PSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2FiYnInKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRI
dG1sJHRpbWUgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3RpbWUnKTsKK3ZhciBfZWxtX2xh
bmckaHRtbCRIdG1sJGNvZGUgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2NvZGUnKTsKK3Zh
ciBfZWxtX2xhbmckaHRtbCRIdG1sJHZhciA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgndmFy
Jyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRzYW1wID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRu
b2RlKCdzYW1wJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRrYmQgPSBfZWxtX2xhbmckaHRt
bCRIdG1sJG5vZGUoJ2tiZCcpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkc3ViID0gX2VsbV9s
YW5nJGh0bWwkSHRtbCRub2RlKCdzdWInKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHN1cCA9
IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnc3VwJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRt
bCRpID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdpJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwk
SHRtbCRiID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdiJyk7Cit2YXIgX2VsbV9sYW5nJGh0
bWwkSHRtbCR1ID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCd1Jyk7Cit2YXIgX2VsbV9sYW5n
JGh0bWwkSHRtbCRtYXJrID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdtYXJrJyk7Cit2YXIg
X2VsbV9sYW5nJGh0bWwkSHRtbCRydWJ5ID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdydWJ5
Jyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRydCA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9k
ZSgncnQnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHJwID0gX2VsbV9sYW5nJGh0bWwkSHRt
bCRub2RlKCdycCcpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkYmRpID0gX2VsbV9sYW5nJGh0
bWwkSHRtbCRub2RlKCdiZGknKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGJkbyA9IF9lbG1f
bGFuZyRodG1sJEh0bWwkbm9kZSgnYmRvJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRzcGFu
ID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdzcGFuJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwk
SHRtbCRiciA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnYnInKTsKK3ZhciBfZWxtX2xhbmck
aHRtbCRIdG1sJHdiciA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnd2JyJyk7Cit2YXIgX2Vs
bV9sYW5nJGh0bWwkSHRtbCRpbnMgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2lucycpOwor
dmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkZGVsID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdk
ZWwnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGltZyA9IF9lbG1fbGFuZyRodG1sJEh0bWwk
bm9kZSgnaW1nJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRpZnJhbWUgPSBfZWxtX2xhbmck
aHRtbCRIdG1sJG5vZGUoJ2lmcmFtZScpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkZW1iZWQg
PSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2VtYmVkJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwk
SHRtbCRvYmplY3QgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ29iamVjdCcpOwordmFyIF9l
bG1fbGFuZyRodG1sJEh0bWwkcGFyYW0gPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3BhcmFt
Jyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCR2aWRlbyA9IF9lbG1fbGFuZyRodG1sJEh0bWwk
bm9kZSgndmlkZW8nKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGF1ZGlvID0gX2VsbV9sYW5n
JGh0bWwkSHRtbCRub2RlKCdhdWRpbycpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkc291cmNl
ID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdzb3VyY2UnKTsKK3ZhciBfZWxtX2xhbmckaHRt
bCRIdG1sJHRyYWNrID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCd0cmFjaycpOwordmFyIF9l
bG1fbGFuZyRodG1sJEh0bWwkY2FudmFzID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdjYW52
YXMnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHN2ZyA9IF9lbG1fbGFuZyRodG1sJEh0bWwk
bm9kZSgnc3ZnJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRtYXRoID0gX2VsbV9sYW5nJGh0
bWwkSHRtbCRub2RlKCdtYXRoJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCR0YWJsZSA9IF9l
bG1fbGFuZyRodG1sJEh0bWwkbm9kZSgndGFibGUnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1s
JGNhcHRpb24gPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2NhcHRpb24nKTsKK3ZhciBfZWxt
X2xhbmckaHRtbCRIdG1sJGNvbGdyb3VwID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdjb2xn
cm91cCcpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkY29sID0gX2VsbV9sYW5nJGh0bWwkSHRt
bCRub2RlKCdjb2wnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHRib2R5ID0gX2VsbV9sYW5n
JGh0bWwkSHRtbCRub2RlKCd0Ym9keScpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkdGhlYWQg
PSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3RoZWFkJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwk
SHRtbCR0Zm9vdCA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgndGZvb3QnKTsKK3ZhciBfZWxt
X2xhbmckaHRtbCRIdG1sJHRyID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCd0cicpOwordmFy
IF9lbG1fbGFuZyRodG1sJEh0bWwkdGQgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3RkJyk7
Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCR0aCA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgn
dGgnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGZvcm0gPSBfZWxtX2xhbmckaHRtbCRIdG1s
JG5vZGUoJ2Zvcm0nKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGZpZWxkc2V0ID0gX2VsbV9s
YW5nJGh0bWwkSHRtbCRub2RlKCdmaWVsZHNldCcpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwk
bGVnZW5kID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdsZWdlbmQnKTsKK3ZhciBfZWxtX2xh
bmckaHRtbCRIdG1sJGxhYmVsID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdsYWJlbCcpOwor
dmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkaW5wdXQgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUo
J2lucHV0Jyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRidXR0b24gPSBfZWxtX2xhbmckaHRt
bCRIdG1sJG5vZGUoJ2J1dHRvbicpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkc2VsZWN0ID0g
X2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdzZWxlY3QnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRI
dG1sJGRhdGFsaXN0ID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdkYXRhbGlzdCcpOwordmFy
IF9lbG1fbGFuZyRodG1sJEh0bWwkb3B0Z3JvdXAgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUo
J29wdGdyb3VwJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRvcHRpb24gPSBfZWxtX2xhbmck
aHRtbCRIdG1sJG5vZGUoJ29wdGlvbicpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkdGV4dGFy
ZWEgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3RleHRhcmVhJyk7Cit2YXIgX2VsbV9sYW5n
JGh0bWwkSHRtbCRrZXlnZW4gPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2tleWdlbicpOwor
dmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkb3V0cHV0ID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2Rl
KCdvdXRwdXQnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHByb2dyZXNzID0gX2VsbV9sYW5n
JGh0bWwkSHRtbCRub2RlKCdwcm9ncmVzcycpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkbWV0
ZXIgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ21ldGVyJyk7Cit2YXIgX2VsbV9sYW5nJGh0
bWwkSHRtbCRkZXRhaWxzID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdkZXRhaWxzJyk7Cit2
YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRzdW1tYXJ5ID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2Rl
KCdzdW1tYXJ5Jyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRtZW51aXRlbSA9IF9lbG1fbGFu
ZyRodG1sJEh0bWwkbm9kZSgnbWVudWl0ZW0nKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJG1l
bnUgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ21lbnUnKTsKKwordmFyIF9lbG1fbGFuZyRo
dG1sJEh0bWxfQXBwJHByb2dyYW1XaXRoRmxhZ3MgPSBfZWxtX2xhbmckdmlydHVhbF9kb20kVmly
dHVhbERvbSRwcm9ncmFtV2l0aEZsYWdzOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXBwJHBy
b2dyYW0gPSBmdW5jdGlvbiAoYXBwKSB7CisgICAgcmV0dXJuIF9lbG1fbGFuZyRodG1sJEh0bWxf
QXBwJHByb2dyYW1XaXRoRmxhZ3MoCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGls
cy51cGRhdGUoCisgICAgICAgICAgICBhcHAsCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaW5pdDogZnVuY3Rpb24gKF9wMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBw
LmluaXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSkpOworfTsKK3ZhciBfZWxt
X2xhbmckaHRtbCRIdG1sX0FwcCRiZWdpbm5lclByb2dyYW0gPSBmdW5jdGlvbiAoX3AxKSB7Cisg
ICAgdmFyIF9wMiA9IF9wMTsKKyAgICByZXR1cm4gX2VsbV9sYW5nJGh0bWwkSHRtbF9BcHAkcHJv
Z3JhbVdpdGhGbGFncygKKyAgICAgICAgeworICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24gKF9w
MykgeworICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkUGxhdGZvcm1fQ21kX29wc1snISddLAorICAgICAgICAgICAgICAgICAgICBf
cDIubW9kZWwsCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0
LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgICAgIFtdKSk7CisgICAgICAgICAgICB9
LAorICAgICAgICAgICAgdXBkYXRlOiBGMigKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiAobXNn
LCBtb2RlbCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAg
ICAgICAgICAgICBfZWxtX2xhbmckY29yZSRQbGF0Zm9ybV9DbWRfb3BzWychJ10sCisgICAgICAg
ICAgICAgICAgICAgICAgICBBMihfcDIudXBkYXRlLCBtc2csIG1vZGVsKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBbXSkpOworICAgICAgICAgICAgICAgIH0pLAorICAgICAg
ICAgICAgdmlldzogX3AyLnZpZXcsCisgICAgICAgICAgICBzdWJzY3JpcHRpb25zOiBmdW5jdGlv
biAoX3A0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFBsYXRmb3Jt
X1N1YiRub25lOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKK307Cit2YXIgX2VsbV9sYW5n
JGh0bWwkSHRtbF9BcHAkbWFwID0gX2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1YWxEb20kbWFw
OworCit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGF0dHJpYnV0ZSA9IF9lbG1f
bGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJGF0dHJpYnV0ZTsKK3ZhciBfZWxtX2xhbmckaHRt
bCRIdG1sX0F0dHJpYnV0ZXMkY29udGV4dG1lbnUgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICBy
ZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGF0dHJpYnV0ZSwgJ2NvbnRl
eHRtZW51JywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMk
ZHJhZ2dhYmxlID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRo
dG1sJEh0bWxfQXR0cmlidXRlcyRhdHRyaWJ1dGUsICdkcmFnZ2FibGUnLCB2YWx1ZSk7Cit9Owor
dmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRsaXN0ID0gZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRhdHRyaWJ1
dGUsICdsaXN0JywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0
ZXMkbWF4bGVuZ3RoID0gZnVuY3Rpb24gKG4pIHsKKyAgICByZXR1cm4gQTIoCisgICAgICAgIF9l
bG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRhdHRyaWJ1dGUsCisgICAgICAgICdtYXhsZW5n
dGgnLAorICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3MkdG9TdHJpbmcobikpOworfTsKK3Zh
ciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkZGF0ZXRpbWUgPSBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGF0dHJp
YnV0ZSwgJ2RhdGV0aW1lJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkcHViZGF0ZSA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxt
X2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYXR0cmlidXRlLCAncHViZGF0ZScsIHZhbHVlKTsK
K307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGNvbHNwYW4gPSBmdW5jdGlv
biAobikgeworICAgIHJldHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRy
aWJ1dGVzJGF0dHJpYnV0ZSwKKyAgICAgICAgJ2NvbHNwYW4nLAorICAgICAgICBfZWxtX2xhbmck
Y29yZSRCYXNpY3MkdG9TdHJpbmcobikpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkcm93c3BhbiA9IGZ1bmN0aW9uIChuKSB7CisgICAgcmV0dXJuIEEyKAorICAgICAg
ICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYXR0cmlidXRlLAorICAgICAgICAncm93
c3BhbicsCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyR0b1N0cmluZyhuKSk7Cit9Owor
dmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRwcm9wZXJ0eSA9IF9lbG1fbGFuZyR2
aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJHByb3BlcnR5OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxf
QXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSA9IEYyKAorICAgIGZ1bmN0aW9uIChuYW1lLCBzdHJp
bmcpIHsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRt
bF9BdHRyaWJ1dGVzJHByb3BlcnR5LAorICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgIF9l
bG1fbGFuZyRjb3JlJEpzb25fRW5jb2RlJHN0cmluZyhzdHJpbmcpKTsKKyAgICB9KTsKK3ZhciBf
ZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkY2xhc3MgPSBmdW5jdGlvbiAobmFtZSkgewor
ICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVy
dHksICdjbGFzc05hbWUnLCBuYW1lKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRy
aWJ1dGVzJGlkID0gZnVuY3Rpb24gKG5hbWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0
bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnaWQnLCBuYW1lKTsKK307Cit2YXIg
X2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHRpdGxlID0gZnVuY3Rpb24gKG5hbWUpIHsK
KyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3Bl
cnR5LCAndGl0bGUnLCBuYW1lKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1
dGVzJGFjY2Vzc2tleSA9IGZ1bmN0aW9uICgkY2hhcikgeworICAgIHJldHVybiBBMigKKyAgICAg
ICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LAorICAgICAg
ICAnYWNjZXNzS2V5JywKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGZyb21DaGFyKCRj
aGFyKSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRkaXIgPSBmdW5j
dGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1
dGVzJHN0cmluZ1Byb3BlcnR5LCAnZGlyJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRt
bCRIdG1sX0F0dHJpYnV0ZXMkZHJvcHpvbmUgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1
cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnZHJv
cHpvbmUnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRp
dGVtcHJvcCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRt
bCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdpdGVtcHJvcCcsIHZhbHVlKTsKK307
Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGxhbmcgPSBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmlu
Z1Byb3BlcnR5LCAnbGFuZycsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9B
dHRyaWJ1dGVzJHRhYmluZGV4ID0gZnVuY3Rpb24gKG4pIHsKKyAgICByZXR1cm4gQTIoCisgICAg
ICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwKKyAgICAg
ICAgJ3RhYkluZGV4JywKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHRvU3RyaW5nKG4p
KTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGNoYXJzZXQgPSBmdW5j
dGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1
dGVzJHN0cmluZ1Byb3BlcnR5LCAnY2hhcnNldCcsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5n
JGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGNvbnRlbnQgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICBy
ZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAn
Y29udGVudCcsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVz
JGh0dHBFcXVpdiA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmck
aHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdodHRwRXF1aXYnLCB2YWx1ZSk7
Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRsYW5ndWFnZSA9IGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0
ZXMkc3RyaW5nUHJvcGVydHksICdsYW5ndWFnZScsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5n
JGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHNyYyA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVy
biBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdzcmMn
LCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRoZWlnaHQg
PSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1fbGFuZyRo
dG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwKKyAgICAgICAgJ2hlaWdodCcsCisg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyR0b1N0cmluZyh2YWx1ZSkpOworfTsKK3ZhciBf
ZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkd2lkdGggPSBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRz
dHJpbmdQcm9wZXJ0eSwKKyAgICAgICAgJ3dpZHRoJywKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUk
QmFzaWNzJHRvU3RyaW5nKHZhbHVlKSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0
cmlidXRlcyRhbHQgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5n
JGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnYWx0JywgdmFsdWUpOworfTsK
K3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkcHJlbG9hZCA9IGZ1bmN0aW9uICh2
YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3Ry
aW5nUHJvcGVydHksICdwcmVsb2FkJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRI
dG1sX0F0dHJpYnV0ZXMkcG9zdGVyID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEy
KF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ3Bvc3Rlcics
IHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGtpbmQgPSBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRy
aWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAna2luZCcsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5n
JGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHNyY2xhbmcgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICBy
ZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAn
c3JjbGFuZycsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVz
JHNhbmRib3ggPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0
bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnc2FuZGJveCcsIHZhbHVlKTsKK307
Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHNyY2RvYyA9IGZ1bmN0aW9uICh2
YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3Ry
aW5nUHJvcGVydHksICdzcmNkb2MnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0
bWxfQXR0cmlidXRlcyR0eXBlJCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihf
ZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICd0eXBlJywgdmFs
dWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkdmFsdWUgPSBmdW5j
dGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1
dGVzJHN0cmluZ1Byb3BlcnR5LCAndmFsdWUnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRo
dG1sJEh0bWxfQXR0cmlidXRlcyRkZWZhdWx0VmFsdWUgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAg
ICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5
LCAnZGVmYXVsdFZhbHVlJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkcGxhY2Vob2xkZXIgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIo
X2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAncGxhY2Vob2xk
ZXInLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRhY2Nl
cHQgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRt
bF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnYWNjZXB0JywgdmFsdWUpOworfTsKK3ZhciBf
ZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYWNjZXB0Q2hhcnNldCA9IGZ1bmN0aW9uICh2
YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3Ry
aW5nUHJvcGVydHksICdhY2NlcHRDaGFyc2V0JywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmck
aHRtbCRIdG1sX0F0dHJpYnV0ZXMkYWN0aW9uID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0
dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ2Fj
dGlvbicsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGF1
dG9jb21wbGV0ZSA9IGZ1bmN0aW9uIChib29sKSB7CisgICAgcmV0dXJuIEEyKAorICAgICAgICBf
ZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksCisgICAgICAgICdh
dXRvY29tcGxldGUnLAorICAgICAgICBib29sID8gJ29uJyA6ICdvZmYnKTsKK307Cit2YXIgX2Vs
bV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGF1dG9zYXZlID0gZnVuY3Rpb24gKHZhbHVlKSB7
CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9w
ZXJ0eSwgJ2F1dG9zYXZlJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkZW5jdHlwZSA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxt
X2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdlbmN0eXBlJywgdmFs
dWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkZm9ybWFjdGlvbiA9
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdmb3JtQWN0aW9uJywgdmFsdWUpOworfTsKK3ZhciBf
ZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkbWlubGVuZ3RoID0gZnVuY3Rpb24gKG4pIHsK
KyAgICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRz
dHJpbmdQcm9wZXJ0eSwKKyAgICAgICAgJ21pbkxlbmd0aCcsCisgICAgICAgIF9lbG1fbGFuZyRj
b3JlJEJhc2ljcyR0b1N0cmluZyhuKSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0
cmlidXRlcyRtZXRob2QgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9s
YW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnbWV0aG9kJywgdmFsdWUp
OworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkbmFtZSA9IGZ1bmN0aW9u
ICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMk
c3RyaW5nUHJvcGVydHksICduYW1lJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRI
dG1sX0F0dHJpYnV0ZXMkcGF0dGVybiA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBB
MihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdwYXR0ZXJu
JywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc2l6ZSA9
IGZ1bmN0aW9uIChuKSB7CisgICAgcmV0dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmckaHRtbCRI
dG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksCisgICAgICAgICdzaXplJywKKyAgICAgICAg
X2VsbV9sYW5nJGNvcmUkQmFzaWNzJHRvU3RyaW5nKG4pKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0
bWwkSHRtbF9BdHRyaWJ1dGVzJGZvciA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBB
MihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdodG1sRm9y
JywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkZm9ybSA9
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdmb3JtJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xh
bmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkbWF4ID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0
dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ21h
eCcsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJG1pbiA9
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdtaW4nLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFu
ZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdGVwID0gZnVuY3Rpb24gKG4pIHsKKyAgICByZXR1cm4g
QTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnc3RlcCcs
IG4pOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkY29scyA9IGZ1bmN0
aW9uIChuKSB7CisgICAgcmV0dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksCisgICAgICAgICdjb2xzJywKKyAgICAgICAgX2VsbV9s
YW5nJGNvcmUkQmFzaWNzJHRvU3RyaW5nKG4pKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRt
bF9BdHRyaWJ1dGVzJHJvd3MgPSBmdW5jdGlvbiAobikgeworICAgIHJldHVybiBBMigKKyAgICAg
ICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LAorICAgICAg
ICAncm93cycsCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyR0b1N0cmluZyhuKSk7Cit9
OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyR3cmFwID0gZnVuY3Rpb24gKHZh
bHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJp
bmdQcm9wZXJ0eSwgJ3dyYXAnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxf
QXR0cmlidXRlcyR1c2VtYXAgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2Vs
bV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAndXNlTWFwJywgdmFs
dWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc2hhcGUgPSBmdW5j
dGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1
dGVzJHN0cmluZ1Byb3BlcnR5LCAnc2hhcGUnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRo
dG1sJEh0bWxfQXR0cmlidXRlcyRjb29yZHMgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1
cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnY29v
cmRzJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkY2hh
bGxlbmdlID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1s
JEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ2NoYWxsZW5nZScsIHZhbHVlKTsKK307
Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGtleXR5cGUgPSBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0
cmluZ1Byb3BlcnR5LCAna2V5dHlwZScsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwk
SHRtbF9BdHRyaWJ1dGVzJGFsaWduID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEy
KF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ2FsaWduJywg
dmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkY2l0ZSA9IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJp
YnV0ZXMkc3RyaW5nUHJvcGVydHksICdjaXRlJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmck
aHRtbCRIdG1sX0F0dHJpYnV0ZXMkaHJlZiA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVy
biBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdocmVm
JywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkdGFyZ2V0
ID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxf
QXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ3RhcmdldCcsIHZhbHVlKTsKK307Cit2YXIgX2Vs
bV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGRvd25sb2FkQXMgPSBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1By
b3BlcnR5LCAnZG93bmxvYWQnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxf
QXR0cmlidXRlcyRocmVmbGFuZyA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihf
ZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdocmVmbGFuZycs
IHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJG1lZGlhID0g
ZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0
cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ21lZGlhJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xh
bmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkcGluZyA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJl
dHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdw
aW5nJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkcmVs
ID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxf
QXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ3JlbCcsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9s
YW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0YXJ0ID0gZnVuY3Rpb24gKG4pIHsKKyAgICByZXR1
cm4gQTIoCisgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9w
ZXJ0eSwKKyAgICAgICAgJ3N0YXJ0JywKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHRv
U3RyaW5nKG4pKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGhlYWRl
cnMgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRt
bF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnaGVhZGVycycsIHZhbHVlKTsKK307Cit2YXIg
X2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHNjb3BlID0gZnVuY3Rpb24gKHZhbHVlKSB7
CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9w
ZXJ0eSwgJ3Njb3BlJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJp
YnV0ZXMkbWFuaWZlc3QgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9s
YW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnbWFuaWZlc3QnLCB2YWx1
ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRib29sUHJvcGVydHkg
PSBGMigKKyAgICBmdW5jdGlvbiAobmFtZSwgYm9vbCkgeworICAgICAgICByZXR1cm4gQTIoCisg
ICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkcHJvcGVydHksCisgICAg
ICAgICAgICBuYW1lLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9FbmNvZGUkYm9v
bChib29sKSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGhp
ZGRlbiA9IGZ1bmN0aW9uIChib29sKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0
bWxfQXR0cmlidXRlcyRib29sUHJvcGVydHksICdoaWRkZW4nLCBib29sKTsKK307Cit2YXIgX2Vs
bV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGNvbnRlbnRlZGl0YWJsZSA9IGZ1bmN0aW9uIChi
b29sKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRib29s
UHJvcGVydHksICdjb250ZW50RWRpdGFibGUnLCBib29sKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0
bWwkSHRtbF9BdHRyaWJ1dGVzJHNwZWxsY2hlY2sgPSBmdW5jdGlvbiAoYm9vbCkgeworICAgIHJl
dHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYm9vbFByb3BlcnR5LCAnc3Bl
bGxjaGVjaycsIGJvb2wpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMk
YXN5bmMgPSBmdW5jdGlvbiAoYm9vbCkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRI
dG1sX0F0dHJpYnV0ZXMkYm9vbFByb3BlcnR5LCAnYXN5bmMnLCBib29sKTsKK307Cit2YXIgX2Vs
bV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGRlZmVyID0gZnVuY3Rpb24gKGJvb2wpIHsKKyAg
ICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGJvb2xQcm9wZXJ0eSwg
J2RlZmVyJywgYm9vbCk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRz
Y29wZWQgPSBmdW5jdGlvbiAoYm9vbCkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRI
dG1sX0F0dHJpYnV0ZXMkYm9vbFByb3BlcnR5LCAnc2NvcGVkJywgYm9vbCk7Cit9OwordmFyIF9l
bG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRhdXRvcGxheSA9IGZ1bmN0aW9uIChib29sKSB7
CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRib29sUHJvcGVy
dHksICdhdXRvcGxheScsIGJvb2wpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJp
YnV0ZXMkY29udHJvbHMgPSBmdW5jdGlvbiAoYm9vbCkgeworICAgIHJldHVybiBBMihfZWxtX2xh
bmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYm9vbFByb3BlcnR5LCAnY29udHJvbHMnLCBib29sKTsK
K307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGxvb3AgPSBmdW5jdGlvbiAo
Ym9vbCkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYm9v
bFByb3BlcnR5LCAnbG9vcCcsIGJvb2wpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkZGVmYXVsdCA9IGZ1bmN0aW9uIChib29sKSB7CisgICAgcmV0dXJuIEEyKF9lbG1f
bGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRib29sUHJvcGVydHksICdkZWZhdWx0JywgYm9vbCk7
Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzZWFtbGVzcyA9IGZ1bmN0
aW9uIChib29sKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRl
cyRib29sUHJvcGVydHksICdzZWFtbGVzcycsIGJvb2wpOworfTsKK3ZhciBfZWxtX2xhbmckaHRt
bCRIdG1sX0F0dHJpYnV0ZXMkY2hlY2tlZCA9IGZ1bmN0aW9uIChib29sKSB7CisgICAgcmV0dXJu
IEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRib29sUHJvcGVydHksICdjaGVja2Vk
JywgYm9vbCk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzZWxlY3Rl
ZCA9IGZ1bmN0aW9uIChib29sKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxf
QXR0cmlidXRlcyRib29sUHJvcGVydHksICdzZWxlY3RlZCcsIGJvb2wpOworfTsKK3ZhciBfZWxt
X2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYXV0b2ZvY3VzID0gZnVuY3Rpb24gKGJvb2wpIHsK
KyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGJvb2xQcm9wZXJ0
eSwgJ2F1dG9mb2N1cycsIGJvb2wpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJp
YnV0ZXMkZGlzYWJsZWQgPSBmdW5jdGlvbiAoYm9vbCkgeworICAgIHJldHVybiBBMihfZWxtX2xh
bmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYm9vbFByb3BlcnR5LCAnZGlzYWJsZWQnLCBib29sKTsK
K307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJG11bHRpcGxlID0gZnVuY3Rp
b24gKGJvb2wpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVz
JGJvb2xQcm9wZXJ0eSwgJ211bHRpcGxlJywgYm9vbCk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1s
JEh0bWxfQXR0cmlidXRlcyRub3ZhbGlkYXRlID0gZnVuY3Rpb24gKGJvb2wpIHsKKyAgICByZXR1
cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGJvb2xQcm9wZXJ0eSwgJ25vVmFs
aWRhdGUnLCBib29sKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHJl
YWRvbmx5ID0gZnVuY3Rpb24gKGJvb2wpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwk
SHRtbF9BdHRyaWJ1dGVzJGJvb2xQcm9wZXJ0eSwgJ3JlYWRPbmx5JywgYm9vbCk7Cit9OwordmFy
IF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRyZXF1aXJlZCA9IGZ1bmN0aW9uIChib29s
KSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRib29sUHJv
cGVydHksICdyZXF1aXJlZCcsIGJvb2wpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkaXNtYXAgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9s
YW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGJvb2xQcm9wZXJ0eSwgJ2lzTWFwJywgdmFsdWUpOwor
fTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkZG93bmxvYWQgPSBmdW5jdGlv
biAoYm9vbCkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMk
Ym9vbFByb3BlcnR5LCAnZG93bmxvYWQnLCBib29sKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwk
SHRtbF9BdHRyaWJ1dGVzJHJldmVyc2VkID0gZnVuY3Rpb24gKGJvb2wpIHsKKyAgICByZXR1cm4g
QTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGJvb2xQcm9wZXJ0eSwgJ3JldmVyc2Vk
JywgYm9vbCk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjbGFzc0xp
c3QgPSBmdW5jdGlvbiAobGlzdCkgeworICAgIHJldHVybiBfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkY2xhc3MoCisgICAgICAgIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUk
U3RyaW5nJGpvaW4sCisgICAgICAgICAgICAnICcsCisgICAgICAgICAgICBBMigKKyAgICAgICAg
ICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JG1hcCwKKyAgICAgICAgICAgICAgICBfZWxtX2xh
bmckY29yZSRCYXNpY3MkZnN0LAorICAgICAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJExp
c3QkZmlsdGVyLCBfZWxtX2xhbmckY29yZSRCYXNpY3Mkc25kLCBsaXN0KSkpKTsKK307Cit2YXIg
X2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0eWxlID0gX2VsbV9sYW5nJHZpcnR1YWxf
ZG9tJFZpcnR1YWxEb20kc3R5bGU7CisKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRr
ZXlDb2RlID0gQTIoX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGVfb3BzWyc6PSddLCAna2V5Q29k
ZScsIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJGludCk7Cit2YXIgX2VsbV9sYW5nJGh0bWwk
SHRtbF9FdmVudHMkdGFyZ2V0Q2hlY2tlZCA9IEEyKAorICAgIF9lbG1fbGFuZyRjb3JlJEpzb25f
RGVjb2RlJGF0LAorICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAg
ICAgICAgWyd0YXJnZXQnLCAnY2hlY2tlZCddKSwKKyAgICBfZWxtX2xhbmckY29yZSRKc29uX0Rl
Y29kZSRib29sKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyR0YXJnZXRWYWx1ZSA9
IEEyKAorICAgIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJGF0LAorICAgIF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgWyd0YXJnZXQnLCAndmFsdWUnXSks
CisgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkc3RyaW5nKTsKK3ZhciBfZWxtX2xhbmck
aHRtbCRIdG1sX0V2ZW50cyRkZWZhdWx0T3B0aW9ucyA9IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRW
aXJ0dWFsRG9tJGRlZmF1bHRPcHRpb25zOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRz
JG9uV2l0aE9wdGlvbnMgPSBfZWxtX2xhbmckdmlydHVhbF9kb20kVmlydHVhbERvbSRvbldpdGhP
cHRpb25zOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uID0gX2VsbV9sYW5nJHZp
cnR1YWxfZG9tJFZpcnR1YWxEb20kb247Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMk
b25Gb2N1cyA9IGZ1bmN0aW9uIChtc2cpIHsKKyAgICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1f
bGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uLAorICAgICAgICAnZm9jdXMnLAorICAgICAgICBfZWxt
X2xhbmckY29yZSRKc29uX0RlY29kZSRzdWNjZWVkKG1zZykpOworfTsKK3ZhciBfZWxtX2xhbmck
aHRtbCRIdG1sX0V2ZW50cyRvbkJsdXIgPSBmdW5jdGlvbiAobXNnKSB7CisgICAgcmV0dXJuIEEy
KAorICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbiwKKyAgICAgICAgJ2JsdXIn
LAorICAgICAgICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRzdWNjZWVkKG1zZykpOworfTsK
K3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvblN1Ym1pdE9wdGlvbnMgPSBfZWxtX2xh
bmckY29yZSROYXRpdmVfVXRpbHMudXBkYXRlKAorICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZl
bnRzJGRlZmF1bHRPcHRpb25zLAorICAgIHtwcmV2ZW50RGVmYXVsdDogdHJ1ZX0pOwordmFyIF9l
bG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uU3VibWl0ID0gZnVuY3Rpb24gKG1zZykgeworICAg
IHJldHVybiBBMygKKyAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb25XaXRoT3B0
aW9ucywKKyAgICAgICAgJ3N1Ym1pdCcsCisgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZl
bnRzJG9uU3VibWl0T3B0aW9ucywKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUk
c3VjY2VlZChtc2cpKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb25DaGVj
ayA9IGZ1bmN0aW9uICh0YWdnZXIpIHsKKyAgICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1fbGFu
ZyRodG1sJEh0bWxfRXZlbnRzJG9uLAorICAgICAgICAnY2hhbmdlJywKKyAgICAgICAgQTIoX2Vs
bV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkbWFwLCB0YWdnZXIsIF9lbG1fbGFuZyRodG1sJEh0bWxf
RXZlbnRzJHRhcmdldENoZWNrZWQpKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVu
dHMkb25JbnB1dCA9IGZ1bmN0aW9uICh0YWdnZXIpIHsKKyAgICByZXR1cm4gQTIoCisgICAgICAg
IF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uLAorICAgICAgICAnaW5wdXQnLAorICAgICAg
ICBBMihfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRtYXAsIHRhZ2dlciwgX2VsbV9sYW5nJGh0
bWwkSHRtbF9FdmVudHMkdGFyZ2V0VmFsdWUpKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRt
bF9FdmVudHMkb25Nb3VzZU91dCA9IGZ1bmN0aW9uIChtc2cpIHsKKyAgICByZXR1cm4gQTIoCisg
ICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uLAorICAgICAgICAnbW91c2VvdXQn
LAorICAgICAgICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRzdWNjZWVkKG1zZykpOworfTsK
K3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbk1vdXNlT3ZlciA9IGZ1bmN0aW9uICht
c2cpIHsKKyAgICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRz
JG9uLAorICAgICAgICAnbW91c2VvdmVyJywKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9E
ZWNvZGUkc3VjY2VlZChtc2cpKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMk
b25Nb3VzZUxlYXZlID0gZnVuY3Rpb24gKG1zZykgeworICAgIHJldHVybiBBMigKKyAgICAgICAg
X2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb24sCisgICAgICAgICdtb3VzZWxlYXZlJywKKyAg
ICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkc3VjY2VlZChtc2cpKTsKK307Cit2YXIg
X2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb25Nb3VzZUVudGVyID0gZnVuY3Rpb24gKG1zZykg
eworICAgIHJldHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb24s
CisgICAgICAgICdtb3VzZWVudGVyJywKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNv
ZGUkc3VjY2VlZChtc2cpKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb25N
b3VzZVVwID0gZnVuY3Rpb24gKG1zZykgeworICAgIHJldHVybiBBMigKKyAgICAgICAgX2VsbV9s
YW5nJGh0bWwkSHRtbF9FdmVudHMkb24sCisgICAgICAgICdtb3VzZXVwJywKKyAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkc3VjY2VlZChtc2cpKTsKK307Cit2YXIgX2VsbV9sYW5n
JGh0bWwkSHRtbF9FdmVudHMkb25Nb3VzZURvd24gPSBmdW5jdGlvbiAobXNnKSB7CisgICAgcmV0
dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbiwKKyAgICAgICAg
J21vdXNlZG93bicsCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJHN1Y2NlZWQo
bXNnKSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uRG91YmxlQ2xpY2sg
PSBmdW5jdGlvbiAobXNnKSB7CisgICAgcmV0dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmckaHRt
bCRIdG1sX0V2ZW50cyRvbiwKKyAgICAgICAgJ2RibGNsaWNrJywKKyAgICAgICAgX2VsbV9sYW5n
JGNvcmUkSnNvbl9EZWNvZGUkc3VjY2VlZChtc2cpKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwk
SHRtbF9FdmVudHMkb25DbGljayA9IGZ1bmN0aW9uIChtc2cpIHsKKyAgICByZXR1cm4gQTIoCisg
ICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uLAorICAgICAgICAnY2xpY2snLAor
ICAgICAgICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRzdWNjZWVkKG1zZykpOworfTsKK3Zh
ciBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRPcHRpb25zID0gRjIoCisgICAgZnVuY3Rpb24g
KGEsIGIpIHsKKyAgICAgICAgcmV0dXJuIHtzdG9wUHJvcGFnYXRpb246IGEsIHByZXZlbnREZWZh
dWx0OiBifTsKKyAgICB9KTsKKwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfTGF6eSRsYXp5MyA9
IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJGxhenkzOwordmFyIF9lbG1fbGFuZyRo
dG1sJEh0bWxfTGF6eSRsYXp5MiA9IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJGxh
enkyOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfTGF6eSRsYXp5ID0gX2VsbV9sYW5nJHZpcnR1
YWxfZG9tJFZpcnR1YWxEb20kbGF6eTsKKwordmFyIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdGl2
ZV9OYXZpZ2F0aW9uID0gZnVuY3Rpb24oKSB7CisKK2Z1bmN0aW9uIGdvKG4pCit7CisgICAgcmV0
dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIubmF0aXZlQmluZGluZyhmdW5jdGlv
bihjYWxsYmFjaykKKyAgICB7CisgICAgICAgIGlmIChuICE9PSAwKQorICAgICAgICB7CisgICAg
ICAgICAgICBoaXN0b3J5LmdvKG4pOworICAgICAgICB9CisgICAgICAgIGNhbGxiYWNrKF9lbG1f
bGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIuc3VjY2VlZChfZWxtX2xhbmckY29yZSROYXRpdmVf
VXRpbHMuVHVwbGUwKSk7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHB1c2hTdGF0ZSh1cmwpCit7
CisgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIubmF0aXZlQmluZGlu
ZyhmdW5jdGlvbihjYWxsYmFjaykKKyAgICB7CisgICAgICAgIGhpc3RvcnkucHVzaFN0YXRlKHt9
LCAnJywgdXJsKTsKKyAgICAgICAgY2FsbGJhY2soX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVk
dWxlci5zdWNjZWVkKGdldExvY2F0aW9uKCkpKTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gcmVw
bGFjZVN0YXRlKHVybCkKK3sKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVk
dWxlci5uYXRpdmVCaW5kaW5nKGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgaGlz
dG9yeS5yZXBsYWNlU3RhdGUoe30sICcnLCB1cmwpOworICAgICAgICBjYWxsYmFjayhfZWxtX2xh
bmckY29yZSROYXRpdmVfU2NoZWR1bGVyLnN1Y2NlZWQoZ2V0TG9jYXRpb24oKSkpOworICAgIH0p
OworfQorCitmdW5jdGlvbiBnZXRMb2NhdGlvbigpCit7CisgICAgdmFyIGxvY2F0aW9uID0gZG9j
dW1lbnQubG9jYXRpb247CisKKyAgICByZXR1cm4geworICAgICAgICBocmVmOiBsb2NhdGlvbi5o
cmVmLAorICAgICAgICBob3N0OiBsb2NhdGlvbi5ob3N0LAorICAgICAgICBob3N0bmFtZTogbG9j
YXRpb24uaG9zdG5hbWUsCisgICAgICAgIHByb3RvY29sOiBsb2NhdGlvbi5wcm90b2NvbCwKKyAg
ICAgICAgb3JpZ2luOiBsb2NhdGlvbi5vcmlnaW4sCisgICAgICAgIHBvcnRfOiBsb2NhdGlvbi5w
b3J0LAorICAgICAgICBwYXRobmFtZTogbG9jYXRpb24ucGF0aG5hbWUsCisgICAgICAgIHNlYXJj
aDogbG9jYXRpb24uc2VhcmNoLAorICAgICAgICBoYXNoOiBsb2NhdGlvbi5oYXNoLAorICAgICAg
ICB1c2VybmFtZTogbG9jYXRpb24udXNlcm5hbWUsCisgICAgICAgIHBhc3N3b3JkOiBsb2NhdGlv
bi5wYXNzd29yZAorICAgIH07Cit9CisKKworcmV0dXJuIHsKKyAgICBnbzogZ28sCisgICAgcHVz
aFN0YXRlOiBwdXNoU3RhdGUsCisgICAgcmVwbGFjZVN0YXRlOiByZXBsYWNlU3RhdGUsCisgICAg
Z2V0TG9jYXRpb246IGdldExvY2F0aW9uCit9OworCit9KCk7CisKK3ZhciBfZWxtX2xhbmckbmF2
aWdhdGlvbiROYXZpZ2F0aW9uJHJlcGxhY2VTdGF0ZSA9IF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5h
dGl2ZV9OYXZpZ2F0aW9uLnJlcGxhY2VTdGF0ZTsKK3ZhciBfZWxtX2xhbmckbmF2aWdhdGlvbiRO
YXZpZ2F0aW9uJHB1c2hTdGF0ZSA9IF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdGl2ZV9OYXZpZ2F0
aW9uLnB1c2hTdGF0ZTsKK3ZhciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJGdvID0g
X2VsbV9sYW5nJG5hdmlnYXRpb24kTmF0aXZlX05hdmlnYXRpb24uZ287Cit2YXIgX2VsbV9sYW5n
JG5hdmlnYXRpb24kTmF2aWdhdGlvbiRzcGF3blBvcFN0YXRlID0gZnVuY3Rpb24gKHJvdXRlcikg
eworICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRQcm9jZXNzJHNwYXduKAorICAgICAgICBBMygK
KyAgICAgICAgICAgIF9lbG1fbGFuZyRkb20kRG9tX0xvd0xldmVsJG9uV2luZG93LAorICAgICAg
ICAgICAgJ3BvcHN0YXRlJywKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2Rl
JHZhbHVlLAorICAgICAgICAgICAgZnVuY3Rpb24gKF9wMCkgeworICAgICAgICAgICAgICAgIHJl
dHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUGxhdGZvcm0kc2Vu
ZFRvU2VsZiwKKyAgICAgICAgICAgICAgICAgICAgcm91dGVyLAorICAgICAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXRpdmVfTmF2aWdhdGlvbi5nZXRMb2NhdGlvbigKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHtjdG9yOiAnX1R1cGxlMCd9KSk7CisgICAgICAgICAgICB9
KSk7Cit9OwordmFyIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb25fb3BzID0gX2VsbV9s
YW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbl9vcHMgfHwge307CitfZWxtX2xhbmckbmF2aWdhdGlv
biROYXZpZ2F0aW9uX29wc1snJj4nXSA9IEYyKAorICAgIGZ1bmN0aW9uICh0YXNrMSwgdGFzazIp
IHsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRh
bmRUaGVuLAorICAgICAgICAgICAgdGFzazEsCisgICAgICAgICAgICBmdW5jdGlvbiAoX3AxKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2syOworICAgICAgICAgICAgfSk7CisgICAgfSk7
Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRub3RpZnkgPSBGMygKKyAgICBm
dW5jdGlvbiAocm91dGVyLCBzdWJzLCBsb2NhdGlvbikgeworICAgICAgICB2YXIgc2VuZCA9IGZ1
bmN0aW9uIChfcDIpIHsKKyAgICAgICAgICAgIHZhciBfcDMgPSBfcDI7CisgICAgICAgICAgICBy
ZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUGxhdGZvcm0kc2VuZFRv
QXBwLAorICAgICAgICAgICAgICAgIHJvdXRlciwKKyAgICAgICAgICAgICAgICBfcDMuXzAobG9j
YXRpb24pKTsKKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgX2Vs
bV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbl9vcHNbJyY+J10sCisgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSRUYXNrJHNlcXVlbmNlKAorICAgICAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRj
b3JlJExpc3QkbWFwLCBzZW5kLCBzdWJzKSksCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRU
YXNrJHN1Y2NlZWQoCisgICAgICAgICAgICAgICAge2N0b3I6ICdfVHVwbGUwJ30pKTsKKyAgICB9
KTsKK3ZhciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJG9uU2VsZk1zZyA9IEYzKAor
ICAgIGZ1bmN0aW9uIChyb3V0ZXIsIGxvY2F0aW9uLCBzdGF0ZSkgeworICAgICAgICByZXR1cm4g
QTIoCisgICAgICAgICAgICBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uX29wc1snJj4n
XSwKKyAgICAgICAgICAgIEEzKF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kbm90aWZ5
LCByb3V0ZXIsIHN0YXRlLnN1YnMsIGxvY2F0aW9uKSwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRj
b3JlJFRhc2skc3VjY2VlZChzdGF0ZSkpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRuYXZpZ2F0
aW9uJE5hdmlnYXRpb24kY21kSGVscCA9IEYzKAorICAgIGZ1bmN0aW9uIChyb3V0ZXIsIHN1YnMs
IGNtZCkgeworICAgICAgICB2YXIgX3A0ID0gY21kOworICAgICAgICBzd2l0Y2ggKF9wNC5jdG9y
KSB7CisgICAgICAgICAgICBjYXNlICdKdW1wJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gX2Vs
bV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRnbyhfcDQuXzApOworICAgICAgICAgICAgY2Fz
ZSAnTmV3JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgICAg
IF9lbG1fbGFuZyRjb3JlJFRhc2skYW5kVGhlbiwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9s
YW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRwdXNoU3RhdGUoX3A0Ll8wKSwKKyAgICAgICAgICAg
ICAgICAgICAgQTIoX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRub3RpZnksIHJvdXRl
ciwgc3VicykpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
QTIoCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRhc2skYW5kVGhlbiwKKyAg
ICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRyZXBsYWNl
U3RhdGUoX3A0Ll8wKSwKKyAgICAgICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJG5hdmlnYXRp
b24kTmF2aWdhdGlvbiRub3RpZnksIHJvdXRlciwgc3VicykpOworICAgICAgICB9CisgICAgfSk7
Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiR1cGRhdGVIZWxwID0gRjIoCisg
ICAgZnVuY3Rpb24gKGZ1bmMsIF9wNSkgeworICAgICAgICB2YXIgX3A2ID0gX3A1OworICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgY3RvcjogJ19UdXBsZTInLAorICAgICAgICAgICAgXzA6
IF9wNi5fMCwKKyAgICAgICAgICAgIF8xOiBBMihfZWxtX2xhbmckY29yZSRQbGF0Zm9ybV9DbWQk
bWFwLCBmdW5jLCBfcDYuXzEpCisgICAgICAgIH07CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJG5h
dmlnYXRpb24kTmF2aWdhdGlvbiRzdWJzY3JpcHRpb24gPSBfZWxtX2xhbmckY29yZSROYXRpdmVf
UGxhdGZvcm0ubGVhZignTmF2aWdhdGlvbicpOwordmFyIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5h
dmlnYXRpb24kY29tbWFuZCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9QbGF0Zm9ybS5sZWFmKCdO
YXZpZ2F0aW9uJyk7Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRMb2NhdGlv
biA9IGZ1bmN0aW9uIChhKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uIChiKSB7CisgICAgICAgIHJl
dHVybiBmdW5jdGlvbiAoYykgeworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmdW5jdGlvbiAoZikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uIChnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
IChoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAo
aSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
IChqKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uIChrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB7aHJlZjogYSwgaG9zdDogYiwgaG9zdG5hbWU6IGMsIHByb3RvY29sOiBkLCBvcmln
aW46IGUsIHBvcnRfOiBmLCBwYXRobmFtZTogZywgc2VhcmNoOiBoLCBoYXNoOiBpLCB1c2VybmFt
ZTogaiwgcGFzc3dvcmQ6IGt9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICB9OworICAg
ICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9OworICAgICAgICB9OworICAgIH07Cit9Owor
dmFyIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kU3RhdGUgPSBGMigKKyAgICBmdW5j
dGlvbiAoYSwgYikgeworICAgICAgICByZXR1cm4ge3N1YnM6IGEsIHByb2Nlc3M6IGJ9OworICAg
IH0pOwordmFyIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kaW5pdCA9IF9lbG1fbGFu
ZyRjb3JlJFRhc2skc3VjY2VlZCgKKyAgICBBMigKKyAgICAgICAgX2VsbV9sYW5nJG5hdmlnYXRp
b24kTmF2aWdhdGlvbiRTdGF0ZSwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3Qu
ZnJvbUFycmF5KAorICAgICAgICAgICAgW10pLAorICAgICAgICBfZWxtX2xhbmckY29yZSRNYXli
ZSROb3RoaW5nKSk7Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRvbkVmZmVj
dHMgPSBGNCgKKyAgICBmdW5jdGlvbiAocm91dGVyLCBjbWRzLCBzdWJzLCBfcDcpIHsKKyAgICAg
ICAgdmFyIF9wOCA9IF9wNzsKKyAgICAgICAgdmFyIF9wMTAgPSBfcDgucHJvY2VzczsKKyAgICAg
ICAgdmFyIHN0ZXBTdGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBfcDkgPSB7
Y3RvcjogJ19UdXBsZTInLCBfMDogc3VicywgXzE6IF9wMTB9OworICAgICAgICAgICAgX3Y0XzI6
CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgaWYgKF9wOS5fMC5jdG9yID09PSAn
W10nKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChfcDkuXzEuY3RvciA9PT0gJ0p1c3QnKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbl9vcHNbJyY+J10sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUHJvY2VzcyRraWxsKF9wOS5f
MS5fMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRz
dWNjZWVkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBMihfZWxtX2xhbmckbmF2
aWdhdGlvbiROYXZpZ2F0aW9uJFN0YXRlLCBzdWJzLCBfZWxtX2xhbmckY29yZSRNYXliZSROb3Ro
aW5nKSkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWsgX3Y0XzI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoX3A5Ll8xLmN0b3IgPT09ICdOb3Ro
aW5nJykgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRhc2skYW5kVGhlbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJHNwYXduUG9w
U3RhdGUocm91dGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAocGlk
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29y
ZSRUYXNrJHN1Y2NlZWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBMigK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckbmF2aWdh
dGlvbiROYXZpZ2F0aW9uJFN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN1YnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkTWF5YmUkSnVzdChwaWQpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhayBfdjRfMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0gd2hpbGUoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuIF9lbG1f
bGFuZyRjb3JlJFRhc2skc3VjY2VlZCgKKyAgICAgICAgICAgICAgICBBMihfZWxtX2xhbmckbmF2
aWdhdGlvbiROYXZpZ2F0aW9uJFN0YXRlLCBzdWJzLCBfcDEwKSk7CisgICAgICAgIH0oKTsKKyAg
ICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdh
dGlvbl9vcHNbJyY+J10sCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJHNlcXVlbmNl
KAorICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSRMaXN0JG1hcCwKKyAgICAgICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJG5hdmlnYXRpb24k
TmF2aWdhdGlvbiRjbWRIZWxwLCByb3V0ZXIsIHN1YnMpLAorICAgICAgICAgICAgICAgICAgICBj
bWRzKSksCisgICAgICAgICAgICBzdGVwU3RhdGUpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRu
YXZpZ2F0aW9uJE5hdmlnYXRpb24kVXNlck1zZyA9IGZ1bmN0aW9uIChhKSB7CisgICAgcmV0dXJu
IHtjdG9yOiAnVXNlck1zZycsIF8wOiBhfTsKK307Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24k
TmF2aWdhdGlvbiRDaGFuZ2UgPSBmdW5jdGlvbiAoYSkgeworICAgIHJldHVybiB7Y3RvcjogJ0No
YW5nZScsIF8wOiBhfTsKK307Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRQ
YXJzZXIgPSBmdW5jdGlvbiAoYSkgeworICAgIHJldHVybiB7Y3RvcjogJ1BhcnNlcicsIF8wOiBh
fTsKK307Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRtYWtlUGFyc2VyID0g
X2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRQYXJzZXI7Cit2YXIgX2VsbV9sYW5nJG5h
dmlnYXRpb24kTmF2aWdhdGlvbiRNb2RpZnkgPSBmdW5jdGlvbiAoYSkgeworICAgIHJldHVybiB7
Y3RvcjogJ01vZGlmeScsIF8wOiBhfTsKK307Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2
aWdhdGlvbiRtb2RpZnlVcmwgPSBmdW5jdGlvbiAodXJsKSB7CisgICAgcmV0dXJuIF9lbG1fbGFu
ZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kY29tbWFuZCgKKyAgICAgICAgX2VsbV9sYW5nJG5hdmln
YXRpb24kTmF2aWdhdGlvbiRNb2RpZnkodXJsKSk7Cit9OwordmFyIF9lbG1fbGFuZyRuYXZpZ2F0
aW9uJE5hdmlnYXRpb24kTmV3ID0gZnVuY3Rpb24gKGEpIHsKKyAgICByZXR1cm4ge2N0b3I6ICdO
ZXcnLCBfMDogYX07Cit9OwordmFyIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kbmV3
VXJsID0gZnVuY3Rpb24gKHVybCkgeworICAgIHJldHVybiBfZWxtX2xhbmckbmF2aWdhdGlvbiRO
YXZpZ2F0aW9uJGNvbW1hbmQoCisgICAgICAgIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRp
b24kTmV3KHVybCkpOworfTsKK3ZhciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJEp1
bXAgPSBmdW5jdGlvbiAoYSkgeworICAgIHJldHVybiB7Y3RvcjogJ0p1bXAnLCBfMDogYX07Cit9
OwordmFyIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kYmFjayA9IGZ1bmN0aW9uIChu
KSB7CisgICAgcmV0dXJuIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kY29tbWFuZCgK
KyAgICAgICAgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRKdW1wKDAgLSBuKSk7Cit9
OwordmFyIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kZm9yd2FyZCA9IGZ1bmN0aW9u
IChuKSB7CisgICAgcmV0dXJuIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kY29tbWFu
ZCgKKyAgICAgICAgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRKdW1wKG4pKTsKK307
Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRjbWRNYXAgPSBGMigKKyAgICBm
dW5jdGlvbiAoX3AxMSwgbXlDbWQpIHsKKyAgICAgICAgdmFyIF9wMTIgPSBteUNtZDsKKyAgICAg
ICAgc3dpdGNoIChfcDEyLmN0b3IpIHsKKyAgICAgICAgICAgIGNhc2UgJ0p1bXAnOgorICAgICAg
ICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJEp1bXAoX3Ax
Mi5fMCk7CisgICAgICAgICAgICBjYXNlICdOZXcnOgorICAgICAgICAgICAgICAgIHJldHVybiBf
ZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJE5ldyhfcDEyLl8wKTsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5h
dmlnYXRpb24kTW9kaWZ5KF9wMTIuXzApOworICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9s
YW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRNb25pdG9yID0gZnVuY3Rpb24gKGEpIHsKKyAgICBy
ZXR1cm4ge2N0b3I6ICdNb25pdG9yJywgXzA6IGF9OworfTsKK3ZhciBfZWxtX2xhbmckbmF2aWdh
dGlvbiROYXZpZ2F0aW9uJHByb2dyYW1XaXRoRmxhZ3MgPSBGMigKKyAgICBmdW5jdGlvbiAoX3Ax
Mywgc3R1ZmYpIHsKKyAgICAgICAgdmFyIF9wMTQgPSBfcDEzOworICAgICAgICB2YXIgX3AxNiA9
IF9wMTQuXzA7CisgICAgICAgIHZhciBsb2NhdGlvbiA9IF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5h
dGl2ZV9OYXZpZ2F0aW9uLmdldExvY2F0aW9uKAorICAgICAgICAgICAge2N0b3I6ICdfVHVwbGUw
J30pOworICAgICAgICB2YXIgaW5pdCA9IGZ1bmN0aW9uIChmbGFncykgeworICAgICAgICAgICAg
cmV0dXJuIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRp
b24kdXBkYXRlSGVscCwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZp
Z2F0aW9uJFVzZXJNc2csCisgICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAg
IHN0dWZmLmluaXQsCisgICAgICAgICAgICAgICAgICAgIGZsYWdzLAorICAgICAgICAgICAgICAg
ICAgICBfcDE2KGxvY2F0aW9uKSkpOworICAgICAgICB9OworICAgICAgICB2YXIgdmlldyA9IGZ1
bmN0aW9uIChtb2RlbCkgeworICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAg
IF9lbG1fbGFuZyRodG1sJEh0bWxfQXBwJG1hcCwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmck
bmF2aWdhdGlvbiROYXZpZ2F0aW9uJFVzZXJNc2csCisgICAgICAgICAgICAgICAgc3R1ZmYudmll
dyhtb2RlbCkpOworICAgICAgICB9OworICAgICAgICB2YXIgc3VicyA9IGZ1bmN0aW9uIChtb2Rl
bCkgeworICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtX1N1YiRiYXRj
aCgKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXko
CisgICAgICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kc3Vic2NyaXB0aW9uKAorICAgICAgICAgICAgICAgICAg
ICAgICAgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRNb25pdG9yKF9lbG1fbGFuZyRu
YXZpZ2F0aW9uJE5hdmlnYXRpb24kQ2hhbmdlKSksCisgICAgICAgICAgICAgICAgICAgICAgICBB
MigKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtX1N1YiRt
YXAsCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0
aW9uJFVzZXJNc2csCisgICAgICAgICAgICAgICAgICAgICAgICBzdHVmZi5zdWJzY3JpcHRpb25z
KG1vZGVsKSkKKyAgICAgICAgICAgICAgICAgICAgXSkpOworICAgICAgICB9OworICAgICAgICB2
YXIgdXBkYXRlID0gRjIoCisgICAgICAgICAgICBmdW5jdGlvbiAobXNnLCBtb2RlbCkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJG5h
dmlnYXRpb24kTmF2aWdhdGlvbiR1cGRhdGVIZWxwLAorICAgICAgICAgICAgICAgICAgICBfZWxt
X2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJFVzZXJNc2csCisgICAgICAgICAgICAgICAgICAg
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcDE1ID0gbXNnOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9wMTUuY3RvciA9PT0gJ0NoYW5nZScpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0dWZmLnVybFVwZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX3AxNihfcDE1Ll8wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9k
ZWwpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gQTIoc3R1ZmYudXBkYXRlLCBfcDE1Ll8wLCBtb2RlbCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0oKSk7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRodG1sJEh0bWxfQXBwJHByb2dyYW1X
aXRoRmxhZ3MoCisgICAgICAgICAgICB7aW5pdDogaW5pdCwgdmlldzogdmlldywgdXBkYXRlOiB1
cGRhdGUsIHN1YnNjcmlwdGlvbnM6IHN1YnN9KTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckbmF2
aWdhdGlvbiROYXZpZ2F0aW9uJHByb2dyYW0gPSBGMigKKyAgICBmdW5jdGlvbiAocGFyc2VyLCBz
dHVmZikgeworICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxtX2xhbmckbmF2aWdh
dGlvbiROYXZpZ2F0aW9uJHByb2dyYW1XaXRoRmxhZ3MsCisgICAgICAgICAgICBwYXJzZXIsCisg
ICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMudXBkYXRlKAorICAgICAgICAg
ICAgICAgIHN0dWZmLAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW5p
dDogZnVuY3Rpb24gKF9wMTcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHVm
Zi5pbml0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSkpOworICAg
IH0pOwordmFyIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kc3ViTWFwID0gRjIoCisg
ICAgZnVuY3Rpb24gKGZ1bmMsIF9wMTgpIHsKKyAgICAgICAgdmFyIF9wMTkgPSBfcDE4OworICAg
ICAgICByZXR1cm4gX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRNb25pdG9yKAorICAg
ICAgICAgICAgZnVuY3Rpb24gKF9wMjApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVuYygK
KyAgICAgICAgICAgICAgICAgICAgX3AxOS5fMChfcDIwKSk7CisgICAgICAgICAgICB9KTsKKyAg
ICB9KTsKK19lbG1fbGFuZyRjb3JlJE5hdGl2ZV9QbGF0Zm9ybS5lZmZlY3RNYW5hZ2Vyc1snTmF2
aWdhdGlvbiddID0ge3BrZzogJ2VsbS1sYW5nL25hdmlnYXRpb24nLCBpbml0OiBfZWxtX2xhbmck
bmF2aWdhdGlvbiROYXZpZ2F0aW9uJGluaXQsIG9uRWZmZWN0czogX2VsbV9sYW5nJG5hdmlnYXRp
b24kTmF2aWdhdGlvbiRvbkVmZmVjdHMsIG9uU2VsZk1zZzogX2VsbV9sYW5nJG5hdmlnYXRpb24k
TmF2aWdhdGlvbiRvblNlbGZNc2csIHRhZzogJ2Z4JywgY21kTWFwOiBfZWxtX2xhbmckbmF2aWdh
dGlvbiROYXZpZ2F0aW9uJGNtZE1hcCwgc3ViTWFwOiBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZp
Z2F0aW9uJHN1Yk1hcH07CisKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG9fVGFzayRvbkZp
bmlzaCA9IEYyKAorICAgIGZ1bmN0aW9uIChlbnRlck1lc3NhZ2UsIGVzY2FwZU1lc3NhZ2UpIHsK
KyAgICAgICAgdmFyIHNlbGVjdCA9IGZ1bmN0aW9uIChrZXkpIHsKKyAgICAgICAgICAgIHZhciBf
cDAgPSBrZXk7CisgICAgICAgICAgICBpZiAoX3AwID09PSAxMykgeworICAgICAgICAgICAgICAg
IHJldHVybiBlbnRlck1lc3NhZ2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIHJldHVybiBlc2NhcGVNZXNzYWdlOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAg
ICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRv
biwKKyAgICAgICAgICAgICdrZXlkb3duJywKKyAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRjb3Jl
JEpzb25fRGVjb2RlJG1hcCwgc2VsZWN0LCBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRrZXlD
b2RlKSk7CisgICAgfSk7Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvX1Rhc2skdXBkYXRl
ID0gRjIoCisgICAgZnVuY3Rpb24gKG1zZywgbW9kZWwpIHsKKyAgICAgICAgdmFyIF9wMSA9IG1z
ZzsKKyAgICAgICAgc3dpdGNoIChfcDEuY3RvcikgeworICAgICAgICAgICAgY2FzZSAnRm9jdXMn
OgorICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0KAorICAg
ICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMudXBkYXRlKAorICAg
ICAgICAgICAgICAgICAgICAgICAgbW9kZWwsCisgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdHM6IF9lbG1fbGFuZyRjb3JlJE1heWJlJEp1
c3QobW9kZWwuZGVzY3JpcHRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CisgICAg
ICAgICAgICBjYXNlICdFZGl0JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNv
cmUkTWF5YmUkSnVzdCgKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X1V0aWxzLnVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsLAorICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRzOiBfZWxt
X2xhbmckY29yZSRNYXliZSRKdXN0KF9wMS5fMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIH0p
KTsKKyAgICAgICAgICAgIGNhc2UgJ0NhbmNlbCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9l
bG1fbGFuZyRjb3JlJE1heWJlJEp1c3QoCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9VdGlscy51cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHtlZGl0czogX2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90
aGluZ30pKTsKKyAgICAgICAgICAgIGNhc2UgJ0NvbW1pdCc6CisgICAgICAgICAgICAgICAgdmFy
IF9wMiA9IG1vZGVsLmVkaXRzOworICAgICAgICAgICAgICAgIGlmIChfcDIuY3RvciA9PT0gJ05v
dGhpbmcnKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRNYXli
ZSRKdXN0KG1vZGVsKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICB2YXIgZGVzY3JpcHRpb24gPSBfZWxtX2xhbmckY29yZSRTdHJpbmckdHJpbShfcDIuXzAp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGlzRW1w
dHkoZGVzY3JpcHRpb24pID8gX2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90aGluZyA6IF9lbG1fbGFu
ZyRjb3JlJE1heWJlJEp1c3QoCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSROYXRpdmVfVXRpbHMudXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVs
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtlZGl0czogX2VsbV9sYW5nJGNvcmUkTWF5
YmUkTm90aGluZywgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9ufSkpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNhc2UgJ0NvbXBsZXRlZCc6CisgICAgICAgICAgICAgICAgcmV0dXJu
IF9lbG1fbGFuZyRjb3JlJE1heWJlJEp1c3QoCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9VdGlscy51cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBtb2Rl
bCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHtjb21wbGV0ZWQ6IF9wMS5fMH0pKTsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1h
eWJlJE5vdGhpbmc7CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZj
JFRvZG9fVGFzayRpbml0ID0gRjIoCisgICAgZnVuY3Rpb24gKGRlc2MsIGlkKSB7CisgICAgICAg
IHJldHVybiB7ZGVzY3JpcHRpb246IGRlc2MsIGNvbXBsZXRlZDogZmFsc2UsIGVkaXRzOiBfZWxt
X2xhbmckY29yZSRNYXliZSROb3RoaW5nLCBpZDogaWR9OworICAgIH0pOwordmFyIF9ldmFuY3ok
ZWxtX3RvZG9tdmMkVG9kb19UYXNrJE1vZGVsID0gRjQoCisgICAgZnVuY3Rpb24gKGEsIGIsIGMs
IGQpIHsKKyAgICAgICAgcmV0dXJuIHtkZXNjcmlwdGlvbjogYSwgY29tcGxldGVkOiBiLCBlZGl0
czogYywgaWQ6IGR9OworICAgIH0pOwordmFyIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kb19UYXNr
JERlbGV0ZSA9IHtjdG9yOiAnRGVsZXRlJ307Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2Rv
X1Rhc2skQ29tcGxldGVkID0gZnVuY3Rpb24gKGEpIHsKKyAgICByZXR1cm4ge2N0b3I6ICdDb21w
bGV0ZWQnLCBfMDogYX07Cit9OwordmFyIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kb19UYXNrJENv
bW1pdCA9IHtjdG9yOiAnQ29tbWl0J307Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvX1Rh
c2skQ2FuY2VsID0ge2N0b3I6ICdDYW5jZWwnfTsKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRv
ZG9fVGFzayRFZGl0ID0gZnVuY3Rpb24gKGEpIHsKKyAgICByZXR1cm4ge2N0b3I6ICdFZGl0Jywg
XzA6IGF9OworfTsKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG9fVGFzayRGb2N1cyA9IGZ1
bmN0aW9uIChhKSB7CisgICAgcmV0dXJuIHtjdG9yOiAnRm9jdXMnLCBfMDogYX07Cit9OwordmFy
IF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kb19UYXNrJHZpZXcgPSBmdW5jdGlvbiAobW9kZWwpIHsK
KyAgICB2YXIgZWxlbWVudElkID0gQTIoCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19v
cHNbJysrJ10sCisgICAgICAgICd0b2RvLScsCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2lj
cyR0b1N0cmluZyhtb2RlbC5pZCkpOworICAgIHZhciBkZXNjcmlwdGlvbiA9IEEyKF9lbG1fbGFu
ZyRjb3JlJE1heWJlJHdpdGhEZWZhdWx0LCBtb2RlbC5kZXNjcmlwdGlvbiwgbW9kZWwuZWRpdHMp
OworICAgIHZhciBjbGFzc05hbWUgPSBBMigKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNz
X29wc1snKysnXSwKKyAgICAgICAgbW9kZWwuY29tcGxldGVkID8gJ2NvbXBsZXRlZCAnIDogJycs
CisgICAgICAgIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBfcDMgPSBtb2RlbC5lZGl0
czsKKyAgICAgICAgICAgIGlmIChfcDMuY3RvciA9PT0gJ0p1c3QnKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuICdlZGl0aW5nJzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuICcnOworICAgICAgICAgICAgfQorICAgICAgICB9KCkpOworICAgIHJldHVybiBB
MigKKyAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCRsaSwKKyAgICAgICAgX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAg
IF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjbGFzcyhjbGFzc05hbWUpCisgICAgICAg
ICAgICBdKSwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAor
ICAgICAgICAgICAgWworICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgIF9lbG1f
bGFuZyRodG1sJEh0bWwkZGl2LAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAg
ICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGNsYXNzKCd2aWV3JykKKyAg
ICAgICAgICAgICAgICAgICAgXSksCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAg
ICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0
bWwkaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVf
TGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkY2xh
c3MoJ3RvZ2dsZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmck
aHRtbCRIdG1sX0F0dHJpYnV0ZXMkdHlwZSQoJ2NoZWNrYm94JyksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjaGVja2VkKG1v
ZGVsLmNvbXBsZXRlZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRodG1sJEh0bWxfRXZlbnRzJG9uQ2xpY2soCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kb19UYXNrJENvbXBsZXRlZCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRub3QobW9kZWwu
Y29tcGxldGVkKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCisgICAgICAgICAg
ICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgW10pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEEy
KAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCRsYWJlbCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJh
eSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uRG91YmxlQ2xpY2soCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kb19UYXNr
JEZvY3VzKGVsZW1lbnRJZCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCisgICAg
ICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXko
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJHRleHQoZGVzY3JpcHRpb24pCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgQTIoCisgICAg
ICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJGJ1dHRvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjbGFzcygnZGVzdHJveScpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRv
bkNsaWNrKF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kb19UYXNrJERlbGV0ZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBb
XSkpCisgICAgICAgICAgICAgICAgICAgIF0pKSwKKyAgICAgICAgICAgICAgICBBMigKKyAgICAg
ICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJGlucHV0LAorICAgICAgICAgICAgICAgIF9l
bG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAg
WworICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVz
JGNsYXNzKCdlZGl0JyksCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRI
dG1sX0F0dHJpYnV0ZXMkdmFsdWUoZGVzY3JpcHRpb24pLAorICAgICAgICAgICAgICAgICAgICAg
ICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJG5hbWUoJ3RpdGxlJyksCisgICAgICAg
ICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkaWQoZWxlbWVu
dElkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRz
JG9uSW5wdXQoX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvX1Rhc2skRWRpdCksCisgICAgICAgICAg
ICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbkJsdXIoX2V2YW5jeiRl
bG1fdG9kb212YyRUb2RvX1Rhc2skQ29tbWl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEEy
KF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kb19UYXNrJG9uRmluaXNoLCBfZXZhbmN6JGVsbV90b2Rv
bXZjJFRvZG9fVGFzayRDb21taXQsIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kb19UYXNrJENhbmNl
bCkKKyAgICAgICAgICAgICAgICAgICAgXSksCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICBbXSkpCisgICAg
ICAgICAgICBdKSk7Cit9OworCit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHN1YnNjcmlw
dGlvbnMgPSBmdW5jdGlvbiAobW9kZWwpIHsKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUGxh
dGZvcm1fU3ViJG5vbmU7Cit9OwordmFyIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRmcm9tVXJs
ID0gZnVuY3Rpb24gKGhhc2gpIHsKKyAgICB2YXIgY2xlYW5IYXNoID0gQTIoX2VsbV9sYW5nJGNv
cmUkU3RyaW5nJGRyb3BMZWZ0LCAyLCBoYXNoKTsKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX1V0aWxzLmVxKAorICAgICAgICBBMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JExpc3QkbWVtYmVyLAorICAgICAgICAgICAgY2xlYW5IYXNoLAorICAgICAgICAgICAgX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgIFsnYWxsJywg
J2FjdGl2ZScsICdjb21wbGV0ZWQnXSkpLAorICAgICAgICB0cnVlKSA/IF9lbG1fbGFuZyRjb3Jl
JE1heWJlJEp1c3QoY2xlYW5IYXNoKSA6IF9lbG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmc7Cit9
OwordmFyIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyR1cmxQYXJzZXIgPSBfZWxtX2xhbmckbmF2
aWdhdGlvbiROYXZpZ2F0aW9uJG1ha2VQYXJzZXIoCisgICAgZnVuY3Rpb24gKF9wMCkgeworICAg
ICAgICByZXR1cm4gX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJGZyb21VcmwoCisgICAgICAgICAg
ICBmdW5jdGlvbiAoXykgeworICAgICAgICAgICAgICAgIHJldHVybiBfLmhhc2g7CisgICAgICAg
ICAgICB9KF9wMCkpOworICAgIH0pOwordmFyIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyR0b1Vy
bCA9IGZ1bmN0aW9uICh2aXNpYmlsaXR5KSB7CisgICAgcmV0dXJuIEEyKAorICAgICAgICBfZWxt
X2xhbmckY29yZSRCYXNpY3Nfb3BzWycrKyddLAorICAgICAgICAnIy8nLAorICAgICAgICBfZWxt
X2xhbmckY29yZSRTdHJpbmckdG9Mb3dlcih2aXNpYmlsaXR5KSk7Cit9OwordmFyIF9ldmFuY3ok
ZWxtX3RvZG9tdmMkVG9kbyRpbmZvRm9vdGVyID0gQTIoCisgICAgX2VsbV9sYW5nJGh0bWwkSHRt
bCRmb290ZXIsCisgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAg
ICAgICBbCisgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkY2xhc3Mo
J2luZm8nKQorICAgICAgICBdKSwKKyAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9t
QXJyYXkoCisgICAgICAgIFsKKyAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5n
JGh0bWwkSHRtbCRwLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJv
bUFycmF5KAorICAgICAgICAgICAgICAgIFtdKSwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAg
ICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkdGV4dCgnRG91YmxlLWNsaWNrIHRvIGVkaXQgYSB0
b2RvJykKKyAgICAgICAgICAgICAgICBdKSksCisgICAgICAgICAgICBBMigKKyAgICAgICAgICAg
IF9lbG1fbGFuZyRodG1sJEh0bWwkcCwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICBbXSksCisgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgWworICAg
ICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJHRleHQoJ1dyaXR0ZW4gYnkgJyks
CisgICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmck
aHRtbCRIdG1sJGEsCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9M
aXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkaHJlZignaHR0cHM6
Ly9naXRodWIuY29tL2V2YW5jeicpCisgICAgICAgICAgICAgICAgICAgICAgICBdKSwKKyAgICAg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAg
ICAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1f
bGFuZyRodG1sJEh0bWwkdGV4dCgnRXZhbiBDemFwbGlja2knKQorICAgICAgICAgICAgICAgICAg
ICAgICAgXSkpCisgICAgICAgICAgICAgICAgXSkpLAorICAgICAgICAgICAgQTIoCisgICAgICAg
ICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJHAsCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRO
YXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgW10pLAorICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgIFsK
KyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCR0ZXh0KCdQYXJ0IG9mICcp
LAorICAgICAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5n
JGh0bWwkSHRtbCRhLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVf
TGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGhyZWYoJ2h0dHA6
Ly90b2RvbXZjLmNvbScpCisgICAgICAgICAgICAgICAgICAgICAgICBdKSwKKyAgICAgICAgICAg
ICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAg
ICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRo
dG1sJEh0bWwkdGV4dCgnVG9kb01WQycpCisgICAgICAgICAgICAgICAgICAgICAgICBdKSkKKyAg
ICAgICAgICAgICAgICBdKSkKKyAgICAgICAgXSkpOwordmFyIF9ldmFuY3okZWxtX3RvZG9tdmMk
VG9kbyRlbXB0eU1vZGVsID0geworICAgIHRhc2tzOiBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlz
dC5mcm9tQXJyYXkoCisgICAgICAgIFtdKSwKKyAgICB2aXNpYmlsaXR5OiAnQWxsJywKKyAgICBm
aWVsZDogJycsCisgICAgdWlkOiAwCit9OwordmFyIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRz
YXZlID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1BsYXRmb3JtLm91dGdvaW5nUG9ydCgKKyAgICAn
c2F2ZScsCisgICAgZnVuY3Rpb24gKHYpIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
IHRhc2tzOiBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC50b0FycmF5KHYudGFza3MpLm1hcCgK
KyAgICAgICAgICAgICAgICBmdW5jdGlvbiAodikgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHYuZGVzY3JpcHRpb24s
CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQ6IHYuY29tcGxldGVkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgZWRpdHM6ICh2LmVkaXRzLmN0b3IgPT09ICdOb3RoaW5nJykgPyBu
dWxsIDogdi5lZGl0cy5fMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB2LmlkCisgICAg
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfSksCisgICAgICAgICAgICBmaWVs
ZDogdi5maWVsZCwKKyAgICAgICAgICAgIHVpZDogdi51aWQsCisgICAgICAgICAgICB2aXNpYmls
aXR5OiB2LnZpc2liaWxpdHkKKyAgICAgICAgfTsKKyAgICB9KTsKK3ZhciBfZXZhbmN6JGVsbV90
b2RvbXZjJFRvZG8kTW9kZWwgPSBGNCgKKyAgICBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeworICAg
ICAgICByZXR1cm4ge3Rhc2tzOiBhLCBmaWVsZDogYiwgdWlkOiBjLCB2aXNpYmlsaXR5OiBkfTsK
KyAgICB9KTsKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kQ2hhbmdlVmlzaWJpbGl0eSA9
IGZ1bmN0aW9uIChhKSB7CisgICAgcmV0dXJuIHtjdG9yOiAnQ2hhbmdlVmlzaWJpbGl0eScsIF8w
OiBhfTsKK307Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHZpc2liaWxpdHlTd2FwID0g
RjMoCisgICAgZnVuY3Rpb24gKHVyaSwgdmlzaWJpbGl0eSwgYWN0dWFsVmlzaWJpbGl0eSkgewor
ICAgICAgICB2YXIgY2xhc3NOYW1lID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmVxKHZp
c2liaWxpdHksIGFjdHVhbFZpc2liaWxpdHkpID8gJ3NlbGVjdGVkJyA6ICcnOworICAgICAgICBy
ZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJGxpLAorICAgICAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAg
IFsKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb25DbGlj
aygKKyAgICAgICAgICAgICAgICAgICAgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJENoYW5nZVZp
c2liaWxpdHkodmlzaWJpbGl0eSkpCisgICAgICAgICAgICAgICAgXSksCisgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgWwor
ICAgICAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0
bWwkSHRtbCRhLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlz
dC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGNsYXNzKGNsYXNzTmFt
ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRy
aWJ1dGVzJGhyZWYodXJpKQorICAgICAgICAgICAgICAgICAgICAgICAgXSksCisgICAgICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmck
aHRtbCRIdG1sJHRleHQodmlzaWJpbGl0eSkKKyAgICAgICAgICAgICAgICAgICAgICAgIF0pKQor
ICAgICAgICAgICAgICAgIF0pKTsKKyAgICB9KTsKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRv
ZG8kQ2hlY2tBbGwgPSBmdW5jdGlvbiAoYSkgeworICAgIHJldHVybiB7Y3RvcjogJ0NoZWNrQWxs
JywgXzA6IGF9OworfTsKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kRGVsZXRlQ29tcGxl
dGUgPSB7Y3RvcjogJ0RlbGV0ZUNvbXBsZXRlJ307Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRU
b2RvJGNvbnRyb2xzID0gRjIoCisgICAgZnVuY3Rpb24gKHZpc2liaWxpdHksIHRhc2tzKSB7Cisg
ICAgICAgIHZhciB0YXNrc0NvbXBsZXRlZCA9IF9lbG1fbGFuZyRjb3JlJExpc3QkbGVuZ3RoKAor
ICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRmaWx0
ZXIsCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF8pIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIF8uY29tcGxldGVkOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg
dGFza3MpKTsKKyAgICAgICAgdmFyIHRhc2tzTGVmdCA9IF9lbG1fbGFuZyRjb3JlJExpc3QkbGVu
Z3RoKHRhc2tzKSAtIHRhc2tzQ29tcGxldGVkOworICAgICAgICB2YXIgaXRlbV8gPSBfZWxtX2xh
bmckY29yZSROYXRpdmVfVXRpbHMuZXEodGFza3NMZWZ0LCAxKSA/ICcgaXRlbScgOiAnIGl0ZW1z
JzsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCRm
b290ZXIsCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXko
CisgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRI
dG1sX0F0dHJpYnV0ZXMkY2xhc3MoJ2Zvb3RlcicpLAorICAgICAgICAgICAgICAgICAgICBfZWxt
X2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkaGlkZGVuKAorICAgICAgICAgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSRMaXN0JGlzRW1wdHkodGFza3MpKQorICAgICAgICAgICAgICAgIF0pLAor
ICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAg
ICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAg
IF9lbG1fbGFuZyRodG1sJEh0bWwkc3BhbiwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgWwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRl
cyRjbGFzcygndG9kby1jb3VudCcpCisgICAgICAgICAgICAgICAgICAgICAgICBdKSwKKyAgICAg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAg
ICAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEyKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkc3Ryb25nLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZy
b21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCR0ZXh0KAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHRvU3RyaW5nKHRhc2tz
TGVmdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJHRleHQoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSwgaXRlbV8s
ICcgbGVmdCcpKQorICAgICAgICAgICAgICAgICAgICAgICAgXSkpLAorICAgICAgICAgICAgICAg
ICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCR1bCwKKyAg
ICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAor
ICAgICAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9l
bG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjbGFzcygnZmlsdGVycycpCisgICAgICAgICAg
ICAgICAgICAgICAgICBdKSwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEEzKF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyR2aXNpYmlsaXR5
U3dhcCwgJyMvJywgJ0FsbCcsIHZpc2liaWxpdHkpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkdGV4dCgnICcpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEEzKF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyR2aXNpYmlsaXR5U3dhcCwgJyMvYWN0
aXZlJywgJ0FjdGl2ZScsIHZpc2liaWxpdHkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9lbG1fbGFuZyRodG1sJEh0bWwkdGV4dCgnICcpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEEzKF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyR2aXNpYmlsaXR5U3dhcCwgJyMvY29tcGxl
dGVkJywgJ0NvbXBsZXRlZCcsIHZpc2liaWxpdHkpCisgICAgICAgICAgICAgICAgICAgICAgICBd
KSksCisgICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xh
bmckaHRtbCRIdG1sJGJ1dHRvbiwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgWworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjbGFz
cygnY2xlYXItY29tcGxldGVkJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9s
YW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGhpZGRlbigKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuZXEodGFza3NDb21wbGV0ZWQsIDApKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRv
bkNsaWNrKF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyREZWxldGVDb21wbGV0ZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIF0pLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRO
YXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgICAgICBbCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCR0ZXh0KAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycrKyddLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnQ2xlYXIgY29tcGxldGVkICgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRj
b3JlJEJhc2ljc19vcHNbJysrJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSRCYXNpY3MkdG9TdHJpbmcodGFza3NDb21wbGV0ZWQpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyknKSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBdKSkKKyAgICAgICAgICAgICAgICBdKSk7CisgICAgfSk7Cit2YXIgX2V2YW5jeiRlbG1f
dG9kb212YyRUb2RvJFVwZGF0ZVRhc2sgPSBmdW5jdGlvbiAoYSkgeworICAgIHJldHVybiB7Y3Rv
cjogJ1VwZGF0ZVRhc2snLCBfMDogYX07Cit9OwordmFyIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9k
byR0YXNrTGlzdCA9IEYyKAorICAgIGZ1bmN0aW9uICh2aXNpYmlsaXR5LCB0YXNrcykgeworICAg
ICAgICB2YXIgY3NzVmlzaWJpbGl0eSA9IF9lbG1fbGFuZyRjb3JlJExpc3QkaXNFbXB0eSh0YXNr
cykgPyAnaGlkZGVuJyA6ICd2aXNpYmxlJzsKKyAgICAgICAgdmFyIGFsbENvbXBsZXRlZCA9IEEy
KAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRhbGwsCisgICAgICAgICAgICBmdW5j
dGlvbiAoXykgeworICAgICAgICAgICAgICAgIHJldHVybiBfLmNvbXBsZXRlZDsKKyAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICB0YXNrcyk7CisgICAgICAgIHZhciBpc1Zpc2libGUgPSBmdW5j
dGlvbiAodG9kbykgeworICAgICAgICAgICAgdmFyIF9wMSA9IHZpc2liaWxpdHk7CisgICAgICAg
ICAgICBzd2l0Y2ggKF9wMSkgeworICAgICAgICAgICAgICAgIGNhc2UgJ0NvbXBsZXRlZCc6Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2RvLmNvbXBsZXRlZDsKKyAgICAgICAgICAgICAg
ICBjYXNlICdBY3RpdmUnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNv
cmUkQmFzaWNzJG5vdCh0b2RvLmNvbXBsZXRlZCk7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
IH07CisgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwk
c2VjdGlvbiwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJh
eSgKKyAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1s
JEh0bWxfQXR0cmlidXRlcyRjbGFzcygnbWFpbicpLAorICAgICAgICAgICAgICAgICAgICBfZWxt
X2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3R5bGUoCisgICAgICAgICAgICAgICAgICAgIF9l
bG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3RvcjogJ19UdXBsZTInLCBfMDog
J3Zpc2liaWxpdHknLCBfMTogY3NzVmlzaWJpbGl0eX0KKyAgICAgICAgICAgICAgICAgICAgICAg
IF0pKQorICAgICAgICAgICAgICAgIF0pLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAg
ICAgQTIoCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkaW5wdXQsCisg
ICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgK
KyAgICAgICAgICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
ZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkY2xhc3MoJ3RvZ2dsZS1hbGwnKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkdHlw
ZSQoJ2NoZWNrYm94JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0
bWwkSHRtbF9BdHRyaWJ1dGVzJG5hbWUoJ3RvZ2dsZScpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjaGVja2VkKGFsbENvbXBsZXRl
ZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVu
dHMkb25DbGljaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZXZhbmN6JGVsbV90b2Rv
bXZjJFRvZG8kQ2hlY2tBbGwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1f
bGFuZyRjb3JlJEJhc2ljcyRub3QoYWxsQ29tcGxldGVkKSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBdKSwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3Qu
ZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgW10pKSwKKyAgICAgICAgICAgICAg
ICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkbGFiZWws
CisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJh
eSgKKyAgICAgICAgICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkZm9yKCd0b2dnbGUtYWxsJykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIF0pLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgICAgICBbCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCR0ZXh0KCdNYXJrIGFs
bCBhcyBjb21wbGV0ZScpCisgICAgICAgICAgICAgICAgICAgICAgICBdKSksCisgICAgICAgICAg
ICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJHVs
LAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJy
YXkoCisgICAgICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGNsYXNzKCd0b2RvLWxpc3QnKQorICAg
ICAgICAgICAgICAgICAgICAgICAgXSksCisgICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAg
ICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRtYXAsCisgICAgICAgICAgICAg
ICAgICAgICAgICBmdW5jdGlvbiAodGFzaykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciB0YXNrVmlldyA9IF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kb19UYXNrJHZpZXcodGFzayk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlkID0gdGFzay5pZDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXBwJG1hcCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZnVuY3Rpb24gKG1zZykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRVcGRhdGVUYXNrKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdG9yOiAnX1R1cGxlMicsIF8w
OiBpZCwgXzE6IG1zZ30pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrVmlldyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkTGlz
dCRmaWx0ZXIsIGlzVmlzaWJsZSwgdGFza3MpKSkKKyAgICAgICAgICAgICAgICBdKSk7CisgICAg
fSk7Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJEFkZCA9IHtjdG9yOiAnQWRkJ307Cit2
YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJFVwZGF0ZUZpZWxkID0gZnVuY3Rpb24gKGEpIHsK
KyAgICByZXR1cm4ge2N0b3I6ICdVcGRhdGVGaWVsZCcsIF8wOiBhfTsKK307Cit2YXIgX2V2YW5j
eiRlbG1fdG9kb212YyRUb2RvJE5vT3AgPSB7Y3RvcjogJ05vT3AnfTsKK3ZhciBfZXZhbmN6JGVs
bV90b2RvbXZjJFRvZG8kZm9jdXNUYXNrID0gZnVuY3Rpb24gKGVsZW1lbnRJZCkgeworICAgIHJl
dHVybiBBMygKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRwZXJmb3JtLAorICAgICAgICBm
dW5jdGlvbiAoX3AyKSB7CisgICAgICAgICAgICByZXR1cm4gX2V2YW5jeiRlbG1fdG9kb212YyRU
b2RvJE5vT3A7CisgICAgICAgIH0sCisgICAgICAgIGZ1bmN0aW9uIChfcDMpIHsKKyAgICAgICAg
ICAgIHJldHVybiBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kTm9PcDsKKyAgICAgICAgfSwKKyAg
ICAgICAgX2VsbV9sYW5nJGRvbSREb20kZm9jdXMoZWxlbWVudElkKSk7Cit9OwordmFyIF9ldmFu
Y3okZWxtX3RvZG9tdmMkVG9kbyR1cGRhdGUgPSBGMigKKyAgICBmdW5jdGlvbiAobXNnLCBtb2Rl
bCkgeworICAgICAgICB2YXIgX3A0ID0gQTIoX2VsbV9sYW5nJGNvcmUkRGVidWckbG9nLCAnTUVT
U0FHRTogJywgbXNnKTsKKyAgICAgICAgc3dpdGNoIChfcDQuY3RvcikgeworICAgICAgICAgICAg
Y2FzZSAnTm9PcCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIHtjdG9yOiAnX1R1cGxlMicsIF8w
OiBtb2RlbCwgXzE6IF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtX0NtZCRub25lfTsKKyAgICAgICAg
ICAgIGNhc2UgJ1VwZGF0ZUZpZWxkJzoKKyAgICAgICAgICAgICAgICB2YXIgbmV3TW9kZWwgPSBf
ZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMudXBkYXRlKAorICAgICAgICAgICAgICAgICAgICBt
b2RlbCwKKyAgICAgICAgICAgICAgICAgICAge2ZpZWxkOiBfcDQuXzB9KTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMicsCisgICAg
ICAgICAgICAgICAgICAgIF8wOiBuZXdNb2RlbCwKKyAgICAgICAgICAgICAgICAgICAgXzE6IF9l
dmFuY3okZWxtX3RvZG9tdmMkVG9kbyRzYXZlKG1vZGVsKQorICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICBjYXNlICdBZGQnOgorICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdGlvbiA9
IF9lbG1fbGFuZyRjb3JlJFN0cmluZyR0cmltKG1vZGVsLmZpZWxkKTsKKyAgICAgICAgICAgICAg
ICB2YXIgbmV3TW9kZWwgPSBfZWxtX2xhbmckY29yZSRTdHJpbmckaXNFbXB0eShkZXNjcmlwdGlv
bikgPyBtb2RlbCA6IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy51cGRhdGUoCisgICAgICAg
ICAgICAgICAgICAgIG1vZGVsLAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB1aWQ6IG1vZGVsLnVpZCArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICBm
aWVsZDogJycsCisgICAgICAgICAgICAgICAgICAgICAgICB0YXNrczogQTIoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtb2RlbC50YXNrcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEEyKF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kb19UYXNrJGluaXQsIGRlc2NyaXB0aW9uLCBt
b2RlbC51aWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pKQorICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAg
ICAgICBjdG9yOiAnX1R1cGxlMicsCisgICAgICAgICAgICAgICAgICAgIF8wOiBuZXdNb2RlbCwK
KyAgICAgICAgICAgICAgICAgICAgXzE6IF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRzYXZlKG5l
d01vZGVsKQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICBjYXNlICdVcGRhdGVUYXNr
JzoKKyAgICAgICAgICAgICAgICB2YXIgX3A2ID0gX3A0Ll8wLl8xOworICAgICAgICAgICAgICAg
IHZhciB1cGRhdGVUYXNrID0gZnVuY3Rpb24gKHQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5lcSh0LmlkLCBfcDQuXzAuXzApID8gQTIo
X2V2YW5jeiRlbG1fdG9kb212YyRUb2RvX1Rhc2skdXBkYXRlLCBfcDYsIHQpIDogX2VsbV9sYW5n
JGNvcmUkTWF5YmUkSnVzdCh0KTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAg
IHZhciBuZXdNb2RlbCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy51cGRhdGUoCisgICAg
ICAgICAgICAgICAgICAgIG1vZGVsLAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0YXNrczogQTIoX2VsbV9sYW5nJGNvcmUkTGlzdCRmaWx0ZXJNYXAsIHVw
ZGF0ZVRhc2ssIG1vZGVsLnRhc2tzKQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICB2YXIgX3A1ID0gX3A2OworICAgICAgICAgICAgICAgIGlmIChfcDUuY3RvciA9PT0g
J0ZvY3VzJykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAg
ICAgICAgICAgICBfZWxtX2xhbmckY29yZSRQbGF0Zm9ybV9DbWRfb3BzWychJ10sCisgICAgICAg
ICAgICAgICAgICAgICAgICBuZXdNb2RlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1f
bGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9ldmFuY3okZWxtX3RvZG9t
dmMkVG9kbyRzYXZlKG5ld01vZGVsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJGZvY3VzVGFzayhfcDUuXzApCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxl
MicsCisgICAgICAgICAgICAgICAgICAgICAgICBfMDogbmV3TW9kZWwsCisgICAgICAgICAgICAg
ICAgICAgICAgICBfMTogX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHNhdmUobmV3TW9kZWwpCisg
ICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2Fz
ZSAnRGVsZXRlQ29tcGxldGUnOgorICAgICAgICAgICAgICAgIHZhciBuZXdNb2RlbCA9IF9lbG1f
bGFuZyRjb3JlJE5hdGl2ZV9VdGlscy51cGRhdGUoCisgICAgICAgICAgICAgICAgICAgIG1vZGVs
LAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB0YXNrczog
QTIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRmaWx0
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9wNykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkQmFzaWNzJG5v
dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF8uY29tcGxldGVk
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfShfcDcpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVs
LnRhc2tzKQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMicsCisgICAgICAgICAgICAgICAg
ICAgIF8wOiBuZXdNb2RlbCwKKyAgICAgICAgICAgICAgICAgICAgXzE6IF9ldmFuY3okZWxtX3Rv
ZG9tdmMkVG9kbyRzYXZlKG5ld01vZGVsKQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICBjYXNlICdDaGVja0FsbCc6CisgICAgICAgICAgICAgICAgdmFyIHVwZGF0ZVRhc2sgPSBmdW5j
dGlvbiAodCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX1V0aWxzLnVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICB7Y29tcGxldGVkOiBfcDQuXzB9KTsKKyAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgICAgIHZhciBuZXdNb2RlbCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGls
cy51cGRhdGUoCisgICAgICAgICAgICAgICAgICAgIG1vZGVsLAorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICB0YXNrczogQTIoX2VsbV9sYW5nJGNvcmUkTGlz
dCRtYXAsIHVwZGF0ZVRhc2ssIG1vZGVsLnRhc2tzKQorICAgICAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICBjdG9yOiAnX1R1
cGxlMicsCisgICAgICAgICAgICAgICAgICAgIF8wOiBuZXdNb2RlbCwKKyAgICAgICAgICAgICAg
ICAgICAgXzE6IF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRzYXZlKG5ld01vZGVsKQorICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHZhciBu
ZXdNb2RlbCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy51cGRhdGUoCisgICAgICAgICAg
ICAgICAgICAgIG1vZGVsLAorICAgICAgICAgICAgICAgICAgICB7dmlzaWJpbGl0eTogX3A0Ll8w
fSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgY3Rvcjog
J19UdXBsZTInLAorICAgICAgICAgICAgICAgICAgICBfMDogbmV3TW9kZWwsCisgICAgICAgICAg
ICAgICAgICAgIF8xOiBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kc2F2ZShtb2RlbCkKKyAgICAg
ICAgICAgICAgICB9OworICAgICAgICB9CisgICAgfSk7Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212
YyRUb2RvJHVybFVwZGF0ZSA9IEYyKAorICAgIGZ1bmN0aW9uIChyZXN1bHQsIG1vZGVsKSB7Cisg
ICAgICAgIHZhciBfcDggPSByZXN1bHQ7CisgICAgICAgIGlmIChfcDguY3RvciA9PT0gJ0p1c3Qn
KSB7CisgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgX2V2YW5jeiRlbG1f
dG9kb212YyRUb2RvJHVwZGF0ZSwKKyAgICAgICAgICAgICAgICBfZXZhbmN6JGVsbV90b2RvbXZj
JFRvZG8kQ2hhbmdlVmlzaWJpbGl0eSgKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9jb21tdW5p
dHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSR0b1NlbnRlbmNlQ2FzZShfcDguXzApKSwKKyAg
ICAgICAgICAgICAgICBtb2RlbCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1
cm4gQTIoCisgICAgICAgICAgICAgICAgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHVwZGF0ZSwK
KyAgICAgICAgICAgICAgICBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kQ2hhbmdlVmlzaWJpbGl0
eSgnQWxsJyksCisgICAgICAgICAgICAgICAgbW9kZWwpOworICAgICAgICB9CisgICAgfSk7Cit2
YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJGluaXQgPSBGMigKKyAgICBmdW5jdGlvbiAoZmxh
Z3MsIHVybCkgeworICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBfZXZhbmN6JGVsbV90
b2RvbXZjJFRvZG8kdXJsVXBkYXRlLAorICAgICAgICAgICAgdXJsLAorICAgICAgICAgICAgQTIo
X2VsbV9sYW5nJGNvcmUkTWF5YmUkd2l0aERlZmF1bHQsIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9k
byRlbXB0eU1vZGVsLCBmbGFncykpOworICAgIH0pOwordmFyIF9ldmFuY3okZWxtX3RvZG9tdmMk
VG9kbyR0YXNrRW50cnkgPSBmdW5jdGlvbiAodGFzaykgeworICAgIHJldHVybiBBMigKKyAgICAg
ICAgX2VsbV9sYW5nJGh0bWwkSHRtbCRoZWFkZXIsCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5h
dGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICBfZWxt
X2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkY2xhc3MoJ2hlYWRlcicpCisgICAgICAgICAgICBd
KSwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAg
ICAgICAgWworICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRo
dG1sJEh0bWwkaDEsCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3Qu
ZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICBbXSksCisgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICBb
CisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJHRleHQoJ3RvZG9z
JykKKyAgICAgICAgICAgICAgICAgICAgXSkpLAorICAgICAgICAgICAgICAgIEEyKAorICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkaW5wdXQsCisgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICBb
CisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMk
Y2xhc3MoJ25ldy10b2RvJyksCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRt
bCRIdG1sX0F0dHJpYnV0ZXMkcGxhY2Vob2xkZXIoJ1doYXQgbmVlZHMgdG8gYmUgZG9uZT8nKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRh
dXRvZm9jdXModHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRI
dG1sX0F0dHJpYnV0ZXMkdmFsdWUodGFzayksCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxt
X2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkbmFtZSgnbmV3VG9kbycpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb25JbnB1dChfZXZhbmN6JGVs
bV90b2RvbXZjJFRvZG8kVXBkYXRlRmllbGQpLAorICAgICAgICAgICAgICAgICAgICAgICAgQTIo
X2V2YW5jeiRlbG1fdG9kb212YyRUb2RvX1Rhc2skb25GaW5pc2gsIF9ldmFuY3okZWxtX3RvZG9t
dmMkVG9kbyRBZGQsIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyROb09wKQorICAgICAgICAgICAg
ICAgICAgICBdKSwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5m
cm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgIFtdKSkKKyAgICAgICAgICAgIF0pKTsKK307
Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHZpZXcgPSBmdW5jdGlvbiAobW9kZWwpIHsK
KyAgICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkZGl2LAorICAgICAg
ICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICBbCisg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGNsYXNzKCd0b2Rv
bXZjLXdyYXBwZXInKSwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJp
YnV0ZXMkc3R5bGUoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3Qu
ZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAg
ICB7Y3RvcjogJ19UdXBsZTInLCBfMDogJ3Zpc2liaWxpdHknLCBfMTogJ2hpZGRlbid9CisgICAg
ICAgICAgICAgICAgICAgIF0pKQorICAgICAgICAgICAgXSksCisgICAgICAgIF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAg
ICBBMigKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJHNlY3Rpb24sCisgICAg
ICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAg
ICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRI
dG1sX0F0dHJpYnV0ZXMkY2xhc3MoJ3RvZG9hcHAnKQorICAgICAgICAgICAgICAgICAgICBdKSwK
KyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisg
ICAgICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgIEEyKF9lbG1fbGFu
ZyRodG1sJEh0bWxfTGF6eSRsYXp5LCBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kdGFza0VudHJ5
LCBtb2RlbC5maWVsZCksCisgICAgICAgICAgICAgICAgICAgICAgICBBMyhfZWxtX2xhbmckaHRt
bCRIdG1sX0xhenkkbGF6eTIsIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyR0YXNrTGlzdCwgbW9k
ZWwudmlzaWJpbGl0eSwgbW9kZWwudGFza3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgQTMo
X2VsbV9sYW5nJGh0bWwkSHRtbF9MYXp5JGxhenkyLCBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8k
Y29udHJvbHMsIG1vZGVsLnZpc2liaWxpdHksIG1vZGVsLnRhc2tzKQorICAgICAgICAgICAgICAg
ICAgICBdKSksCisgICAgICAgICAgICAgICAgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJGluZm9G
b290ZXIKKyAgICAgICAgICAgIF0pKTsKK307Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2Rv
JG1haW4gPSB7CisgICAgbWFpbjogQTIoCisgICAgICAgIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5h
dmlnYXRpb24kcHJvZ3JhbVdpdGhGbGFncywKKyAgICAgICAgX2V2YW5jeiRlbG1fdG9kb212YyRU
b2RvJHVybFBhcnNlciwKKyAgICAgICAge3VybFVwZGF0ZTogX2V2YW5jeiRlbG1fdG9kb212YyRU
b2RvJHVybFVwZGF0ZSwgdmlldzogX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHZpZXcsIGluaXQ6
IF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRpbml0LCB1cGRhdGU6IF9ldmFuY3okZWxtX3RvZG9t
dmMkVG9kbyR1cGRhdGUsIHN1YnNjcmlwdGlvbnM6IF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRz
dWJzY3JpcHRpb25zfSksCisgICAgZmxhZ3M6IF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJG9u
ZU9mKAorICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAg
ICAgICAgICBbCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkbnVs
bChfZWxtX2xhbmckY29yZSRNYXliZSROb3RoaW5nKSwKKyAgICAgICAgICAgICAgICBBMigKKyAg
ICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRtYXAsCisgICAgICAgICAg
ICAgICAgX2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVzdCwKKyAgICAgICAgICAgICAgICBBMigKKyAg
ICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkYW5kVGhlbiwKKyAg
ICAgICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGVfb3BzWyc6PSdd
LCAnZmllbGQnLCBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRzdHJpbmcpLAorICAgICAgICAg
ICAgICAgICAgICBmdW5jdGlvbiAoZmllbGQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRKc29u
X0RlY29kZSRhbmRUaGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZV9vcHNb
Jzo9J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0YXNrcycsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJGxpc3Qo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRhbmRU
aGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEyKF9lbG1fbGFu
ZyRjb3JlJEpzb25fRGVjb2RlX29wc1snOj0nXSwgJ2NvbXBsZXRlZCcsIF9lbG1fbGFuZyRjb3Jl
JEpzb25fRGVjb2RlJGJvb2wpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uIChjb21wbGV0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkYW5kVGhlbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEyKF9lbG1fbGFu
ZyRjb3JlJEpzb25fRGVjb2RlX29wc1snOj0nXSwgJ2Rlc2NyaXB0aW9uJywgX2VsbV9sYW5nJGNv
cmUkSnNvbl9EZWNvZGUkc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChkZXNjcmlwdGlvbikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkSnNvbl9EZWNvZGUkYW5kVGhlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRKc29uX0Rl
Y29kZV9vcHNbJzo9J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnZWRpdHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNv
ZGUkb25lT2YoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRu
dWxsKF9lbG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmcpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTIoX2Vs
bV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkbWFwLCBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0LCBf
ZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRzdHJpbmcpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pKSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0
aW9uIChlZGl0cykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEpzb25f
RGVjb2RlJGFuZFRoZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGVfb3Bz
Wyc6PSddLCAnaWQnLCBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRpbnQpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1
bmN0aW9uIChpZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNv
ZGUkc3VjY2VlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb21wbGV0ZWQ6IGNvbXBsZXRlZCwgZGVzY3Jp
cHRpb246IGRlc2NyaXB0aW9uLCBlZGl0czogZWRpdHMsIGlkOiBpZH0pOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHRhc2tzKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJGFuZFRoZW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBMihfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZV9vcHNbJzo9
J10sICd1aWQnLCBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRpbnQpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHVpZCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkYW5kVGhl
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTIoX2VsbV9s
YW5nJGNvcmUkSnNvbl9EZWNvZGVfb3BzWyc6PSddLCAndmlzaWJpbGl0eScsIF9lbG1fbGFuZyRj
b3JlJEpzb25fRGVjb2RlJHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZ1bmN0aW9uICh2aXNpYmlsaXR5KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkSnNvbl9E
ZWNvZGUkc3VjY2VlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7ZmllbGQ6IGZpZWxkLCB0YXNrczogdGFza3MsIHVpZDogdWlkLCB2aXNpYmls
aXR5OiB2aXNpYmlsaXR5fSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0pKQorICAg
ICAgICAgICAgXSkpCit9OworCit2YXIgRWxtID0ge307CitFbG1bJ1RvZG8nXSA9IEVsbVsnVG9k
byddIHx8IHt9OworX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1BsYXRmb3JtLmFkZFB1YmxpY01vZHVs
ZShFbG1bJ1RvZG8nXSwgJ1RvZG8nLCB0eXBlb2YgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJG1h
aW4gPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRtYWlu
KTsKKworaWYgKHR5cGVvZiBkZWZpbmUgPT09ICJmdW5jdGlvbiIgJiYgZGVmaW5lWydhbWQnXSkK
K3sKKyAgZGVmaW5lKFtdLCBmdW5jdGlvbigpIHsgcmV0dXJuIEVsbTsgfSk7CisgIHJldHVybjsK
K30KKworaWYgKHR5cGVvZiBtb2R1bGUgPT09ICJvYmplY3QiKQoreworICBtb2R1bGVbJ2V4cG9y
dHMnXSA9IEVsbTsKKyAgcmV0dXJuOworfQorCit2YXIgZ2xvYmFsRWxtID0gdGhpc1snRWxtJ107
CitpZiAodHlwZW9mIGdsb2JhbEVsbSA9PT0gInVuZGVmaW5lZCIpCit7CisgIHRoaXNbJ0VsbSdd
ID0gRWxtOworICByZXR1cm47Cit9CisKK2ZvciAodmFyIHB1YmxpY01vZHVsZSBpbiBFbG0pCit7
CisgIGlmIChwdWJsaWNNb2R1bGUgaW4gZ2xvYmFsRWxtKQorICB7CisgICAgdGhyb3cgbmV3IEVy
cm9yKCdUaGVyZSBhcmUgdHdvIEVsbSBtb2R1bGVzIGNhbGxlZCBgJyArIHB1YmxpY01vZHVsZSAr
ICdgIG9uIHRoaXMgcGFnZSEgUmVuYW1lIG9uZSBvZiB0aGVtLicpOworICB9CisgIGdsb2JhbEVs
bVtwdWJsaWNNb2R1bGVdID0gRWxtW3B1YmxpY01vZHVsZV07Cit9CisKK30pLmNhbGwodGhpcyk7
CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308629</attachid>
            <date>2017-04-28 17:26:02 -0700</date>
            <delta_ts>2017-05-11 19:32:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171464-20170428172601.patch</filename>
            <type>text/plain</type>
            <size>381490</size>
            <attacher name="Addy Osmani">addyo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1OTYwCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGJmMTgxODE2ODc2
NDhkODA3YzE2NjQyOWQxM2MzMDZkMGM1NTk5NjQuLmQ2NWExZGUxZTc5ZWYzNmZiOGFiZDJkZWQw
Zjk3OWRlZGM4YzhjNDMgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTY1IEBACisyMDE3LTA0
LTI4ICBBZGR5IE9zbWFuaSAgPGFkZHlvc21hbmlAZ21haWwuY29tPgorCisgICAgICAgIFNwZWVk
b21ldGVyOiBBZGQgYW4gRWxtIFRvZG9NVkMgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTQ2NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICBTcGVlZG9tZXRlcjogQWRkIEVsbSBUb2Rv
TVZDIGltcGxlbWVudGF0aW9uCisKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9mdW5jdGlvbmFsLXByb2ctZXhhbXBsZXMvZWxtL1RvZG8uZWxtOiBBZGRlZC4KKyAgICAg
ICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlvbmFsLXByb2ctZXhhbXBs
ZXMvZWxtL1RvZG8vVGFzay5lbG06IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2Z1bmN0aW9uYWwtcHJvZy1leGFtcGxlcy9lbG0vYnVpbGQvZWxtLmpzOiBB
ZGRlZC4KKyAgICAgICAgKEYyLndyYXBwZXIpOgorICAgICAgICAoRjIpOgorICAgICAgICAoRjMu
d3JhcHBlcik6CisgICAgICAgIChGMyk6CisgICAgICAgIChGNC53cmFwcGVyKToKKyAgICAgICAg
KEY0KToKKyAgICAgICAgKEY1LndyYXBwZXIpOgorICAgICAgICAoRjUpOgorICAgICAgICAoRjYu
d3JhcHBlcik6CisgICAgICAgIChGNik6CisgICAgICAgIChGNy53cmFwcGVyKToKKyAgICAgICAg
KEY3KToKKyAgICAgICAgKEY4LndyYXBwZXIpOgorICAgICAgICAoRjgpOgorICAgICAgICAoRjku
d3JhcHBlcik6CisgICAgICAgIChGOSk6CisgICAgICAgIChBMik6CisgICAgICAgIChBMyk6Cisg
ICAgICAgIChBNCk6CisgICAgICAgIChBNSk6CisgICAgICAgIChBNik6CisgICAgICAgIChBNyk6
CisgICAgICAgIChBOCk6CisgICAgICAgIChBOSk6CisgICAgICAgIChyZW0pOgorICAgICAgICAo
bW9kKToKKyAgICAgICAgKGxvZ0Jhc2UpOgorICAgICAgICAobmVnYXRlKToKKyAgICAgICAgKGFi
cyk6CisgICAgICAgIChtaW4pOgorICAgICAgICAobWF4KToKKyAgICAgICAgKGNsYW1wKToKKyAg
ICAgICAgKGNvbXBhcmUpOgorICAgICAgICAoeG9yKToKKyAgICAgICAgKG5vdCk6CisgICAgICAg
IChpc0luZmluaXRlKToKKyAgICAgICAgKHRydW5jYXRlKToKKyAgICAgICAgKGRlZ3JlZXMpOgor
ICAgICAgICAodHVybnMpOgorICAgICAgICAoZnJvbVBvbGFyKToKKyAgICAgICAgKHRvUG9sYXIp
OgorICAgICAgICAocmV0dXJuLnRvRmxvYXQpOgorICAgICAgICAoX2VsbV9sYW5nLmNvcmUuTmF0
aXZlX0Jhc2ljcyk6CisgICAgICAgIChlcUhlbHApOgorICAgICAgICAoY21wKToKKyAgICAgICAg
KFR1cGxlMik6CisgICAgICAgIChjaHIpOgorICAgICAgICAoZ3VpZCk6CisgICAgICAgICh1cGRh
dGUpOgorICAgICAgICAoQ29ucyk6CisgICAgICAgIChhcHBlbmQpOgorICAgICAgICAoY3Jhc2gp
OgorICAgICAgICAoY3Jhc2hDYXNlKToKKyAgICAgICAgKHJlZ2lvblRvU3RyaW5nKToKKyAgICAg
ICAgKHRvU3RyaW5nKToKKyAgICAgICAgKGFkZFNsYXNoZXMpOgorICAgICAgICAoX2VsbV9sYW5n
LmNvcmUuTmF0aXZlX1V0aWxzKToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9mdW5jdGlvbmFsLXByb2ctZXhhbXBsZXMvZWxtL2luZGV4Lmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Z1bmN0aW9uYWwtcHJvZy1leGFt
cGxlcy9lbG0vbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3M6IEFkZGVkLgor
ICAgICAgICAoaHRtbCwpOgorICAgICAgICAoYnV0dG9uKToKKyAgICAgICAgKGJvZHkpOgorICAg
ICAgICAoOmZvY3VzKToKKyAgICAgICAgKC5oaWRkZW4pOgorICAgICAgICAoLnRvZG9hcHApOgor
ICAgICAgICAoLnRvZG9hcHAgaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIpOgorICAg
ICAgICAoLnRvZG9hcHAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIpOgorICAgICAgICAoLnRvZG9h
cHAgaW5wdXQ6OmlucHV0LXBsYWNlaG9sZGVyKToKKyAgICAgICAgKC50b2RvYXBwIGgxKToKKyAg
ICAgICAgKC5uZXctdG9kbywpOgorICAgICAgICAoLm5ldy10b2RvKToKKyAgICAgICAgKC5tYWlu
KToKKyAgICAgICAgKGxhYmVsW2Zvcj0ndG9nZ2xlLWFsbCddKToKKyAgICAgICAgKC50b2dnbGUt
YWxsKToKKyAgICAgICAgKC50b2dnbGUtYWxsOmJlZm9yZSk6CisgICAgICAgICgudG9nZ2xlLWFs
bDpjaGVja2VkOmJlZm9yZSk6CisgICAgICAgICgudG9kby1saXN0KToKKyAgICAgICAgKC50b2Rv
LWxpc3QgbGkpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaTpsYXN0LWNoaWxkKToKKyAgICAgICAg
KC50b2RvLWxpc3QgbGkuZWRpdGluZyk6CisgICAgICAgICgudG9kby1saXN0IGxpLmVkaXRpbmcg
LmVkaXQpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaS5lZGl0aW5nIC52aWV3KToKKyAgICAgICAg
KC50b2RvLWxpc3QgbGkgLnRvZ2dsZSk6CisgICAgICAgICgudG9kby1saXN0IGxpIC50b2dnbGU6
YWZ0ZXIpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaSAudG9nZ2xlOmNoZWNrZWQ6YWZ0ZXIpOgor
ICAgICAgICAoLnRvZG8tbGlzdCBsaSBsYWJlbCk6CisgICAgICAgICgudG9kby1saXN0IGxpLmNv
bXBsZXRlZCBsYWJlbCk6CisgICAgICAgICgudG9kby1saXN0IGxpIC5kZXN0cm95KToKKyAgICAg
ICAgKC50b2RvLWxpc3QgbGkgLmRlc3Ryb3k6aG92ZXIpOgorICAgICAgICAoLnRvZG8tbGlzdCBs
aSAuZGVzdHJveTphZnRlcik6CisgICAgICAgICgudG9kby1saXN0IGxpOmhvdmVyIC5kZXN0cm95
KToKKyAgICAgICAgKC50b2RvLWxpc3QgbGkgLmVkaXQpOgorICAgICAgICAoLnRvZG8tbGlzdCBs
aS5lZGl0aW5nOmxhc3QtY2hpbGQpOgorICAgICAgICAoLmZvb3Rlcik6CisgICAgICAgICguZm9v
dGVyOmJlZm9yZSk6CisgICAgICAgICgudG9kby1jb3VudCk6CisgICAgICAgICgudG9kby1jb3Vu
dCBzdHJvbmcpOgorICAgICAgICAoLmZpbHRlcnMpOgorICAgICAgICAoLmZpbHRlcnMgbGkpOgor
ICAgICAgICAoLmZpbHRlcnMgbGkgYSk6CisgICAgICAgICguZmlsdGVycyBsaSBhOmhvdmVyKToK
KyAgICAgICAgKC5maWx0ZXJzIGxpIGEuc2VsZWN0ZWQpOgorICAgICAgICAoLmNsZWFyLWNvbXBs
ZXRlZCwpOgorICAgICAgICAoLmNsZWFyLWNvbXBsZXRlZDpob3Zlcik6CisgICAgICAgICguaW5m
byk6CisgICAgICAgICguaW5mbyBwKToKKyAgICAgICAgKC5pbmZvIGEpOgorICAgICAgICAoLmlu
Zm8gYTpob3Zlcik6CisgICAgICAgIChAbWVkaWEgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2
aWNlLXBpeGVsLXJhdGlvOjApKToKKyAgICAgICAgKC50b2dnbGUtYWxsLCk6CisgICAgICAgIChA
bWVkaWEgKG1heC13aWR0aDogNDMwcHgpKToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9mdW5jdGlvbmFsLXByb2ctZXhhbXBsZXMvZWxtL25vZGVfbW9kdWxlcy90b2Rv
bXZjLWNvbW1vbi9iYXNlLmNzczogQWRkZWQuCisgICAgICAgIChocik6CisgICAgICAgICgubGVh
cm4gYSk6CisgICAgICAgICgubGVhcm4gYTpob3Zlcik6CisgICAgICAgICgubGVhcm4gaDMsKToK
KyAgICAgICAgKC5sZWFybiBoMyk6CisgICAgICAgICgubGVhcm4gaDQpOgorICAgICAgICAoLmxl
YXJuIGg1KToKKyAgICAgICAgKC5sZWFybiB1bCk6CisgICAgICAgICgubGVhcm4gbGkpOgorICAg
ICAgICAoLmxlYXJuIHApOgorICAgICAgICAoI2lzc3VlLWNvdW50KToKKyAgICAgICAgKC5xdW90
ZSk6CisgICAgICAgICgucXVvdGUgcCk6CisgICAgICAgICgucXVvdGUgcDpiZWZvcmUpOgorICAg
ICAgICAoLnF1b3RlIHA6YWZ0ZXIpOgorICAgICAgICAoLnF1b3RlIGZvb3Rlcik6CisgICAgICAg
ICgucXVvdGUgZm9vdGVyIGltZyk6CisgICAgICAgICgucXVvdGUgZm9vdGVyIGEpOgorICAgICAg
ICAoLnNwZWVjaC1idWJibGUpOgorICAgICAgICAoLnNwZWVjaC1idWJibGU6YWZ0ZXIpOgorICAg
ICAgICAoLmxlYXJuLWJhciA+IC5sZWFybik6CisgICAgICAgIChAbWVkaWEgKG1pbi13aWR0aDog
ODk5cHgpKToKKyAgICAgICAgKC5sZWFybi1iYXIpOgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2Z1bmN0aW9uYWwtcHJvZy1leGFtcGxlcy9lbG0vbm9kZV9tb2R1bGVz
L3RvZG9tdmMtY29tbW9uL2Jhc2UuanM6IEFkZGVkLgorICAgICAgICAoXy5kZWZhdWx0cyk6Cisg
ICAgICAgICh0ZW1wbGF0ZSk6CisgICAgICAgIChlc2NhcGVyLl8udGVtcGxhdGUpOgorICAgICAg
ICAoXyk6CisgICAgICAgIChsb2NhdGlvbi5ob3N0bmFtZS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5p
LnIuaS5yKToKKyAgICAgICAgKHJlZGlyZWN0KToKKyAgICAgICAgKGZpbmRSb290KToKKyAgICAg
ICAgKHhoci5vbmxvYWQpOgorICAgICAgICAoZ2V0RmlsZSk6CisgICAgICAgIChMZWFybik6Cisg
ICAgICAgIChMZWFybi5wcm90b3R5cGUuYXBwZW5kKToKKyAgICAgICAgKExlYXJuLnByb3RvdHlw
ZS5mZXRjaElzc3VlQ291bnQpOgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2Z1bmN0aW9uYWwtcHJvZy1leGFtcGxlcy9lbG0vcGFja2FnZS5qc29uOiBBZGRlZC4KKyAg
ICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlvbmFsLXByb2ctZXhh
bXBsZXMvZWxtL3JlYWRtZS5tZDogQWRkZWQuCisKIDIwMTctMDQtMjcgIE1pY2hhZWwgU2Fib2Zm
ICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGJhY2sgdGVzdHMgaW5hZHZlcnRl
bnRseSBkZWxldGVkIGluIHIyMDUwMzIuCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Z1bmN0aW9uYWwtcHJvZy1leGFtcGxlcy9lbG0v
VG9kby5lbG0gYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2Z1bmN0aW9uYWwtcHJvZy1leGFtcGxlcy9lbG0vVG9kby5lbG0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmYxZDM5
ZGIzMTcxOWY5NTJkMzIxOWVkNmVkMDcwMTkxNGI1YWE2ZgotLS0gL2Rldi9udWxsCisrKyBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZnVuY3Rpb25hbC1w
cm9nLWV4YW1wbGVzL2VsbS9Ub2RvLmVsbQpAQCAtMCwwICsxLDM5MCBAQAorcG9ydCBtb2R1bGUg
VG9kbyBleHBvc2luZyAoLi4pCisKK3stfCBUb2RvTVZDIGltcGxlbWVudGVkIGluIEVsbSwgdXNp
bmcgcGxhaW4gSFRNTCBhbmQgQ1NTIGZvciByZW5kZXJpbmcuCisKK1RoaXMgYXBwbGljYXRpb24g
aXMgYnJva2VuIHVwIGludG8gZm91ciBkaXN0aW5jdCBwYXJ0czoKKworICAxLiBNb2RlbCAgLSBh
IGZ1bGwgZGVzY3JpcHRpb24gb2YgdGhlIGFwcGxpY2F0aW9uIGFzIGRhdGEKKyAgMi4gVXBkYXRl
IC0gYSB3YXkgdG8gdXBkYXRlIHRoZSBtb2RlbCBiYXNlZCBvbiB1c2VyIGFjdGlvbnMKKyAgMy4g
VmlldyAgIC0gYSB3YXkgdG8gdmlzdWFsaXplIG91ciBtb2RlbCB3aXRoIEhUTUwKKworVGhpcyBw
cm9ncmFtIGlzIG5vdCBwYXJ0aWN1bGFybHkgbGFyZ2UsIHNvIGRlZmluaXRlbHkgc2VlIHRoZSBm
b2xsb3dpbmcKK2RvY3VtZW50IGZvciBub3RlcyBvbiBzdHJ1Y3R1cmluZyBtb3JlIGNvbXBsZXgg
R1VJcyB3aXRoIEVsbToKK2h0dHA6Ly9ndWlkZS5lbG0tbGFuZy5vcmcvYXJjaGl0ZWN0dXJlLwor
LX0KKworaW1wb3J0IERvbQoraW1wb3J0IFRhc2sKK2ltcG9ydCBIdG1sIGV4cG9zaW5nICguLikK
K2ltcG9ydCBIdG1sLkF0dHJpYnV0ZXMgZXhwb3NpbmcgKC4uKQoraW1wb3J0IEh0bWwuRXZlbnRz
IGV4cG9zaW5nICguLikKK2ltcG9ydCBIdG1sLkxhenkgZXhwb3NpbmcgKGxhenksIGxhenkyKQor
aW1wb3J0IEh0bWwuQXBwCitpbXBvcnQgTmF2aWdhdGlvbiBleHBvc2luZyAoUGFyc2VyKQoraW1w
b3J0IFN0cmluZworaW1wb3J0IFN0cmluZy5FeHRyYQoraW1wb3J0IFRvZG8uVGFzaworCisKKy0t
IE1PREVMCistLSBUaGUgZnVsbCBhcHBsaWNhdGlvbiBzdGF0ZSBvZiBvdXIgdG9kbyBhcHAuCisK
KwordHlwZSBhbGlhcyBNb2RlbCA9CisgICAgeyB0YXNrcyA6IExpc3QgVG9kby5UYXNrLk1vZGVs
CisgICAgLCBmaWVsZCA6IFN0cmluZworICAgICwgdWlkIDogSW50CisgICAgLCB2aXNpYmlsaXR5
IDogU3RyaW5nCisgICAgfQorCisKK3R5cGUgYWxpYXMgRmxhZ3MgPQorICAgIE1heWJlIE1vZGVs
CisKKworZW1wdHlNb2RlbCA6IE1vZGVsCitlbXB0eU1vZGVsID0KKyAgICB7IHRhc2tzID0gW10K
KyAgICAsIHZpc2liaWxpdHkgPSAiQWxsIgorICAgICwgZmllbGQgPSAiIgorICAgICwgdWlkID0g
MAorICAgIH0KKworCisKKy0tIFVQREFURQorLS0gQSBkZXNjcmlwdGlvbiBvZiB0aGUga2luZHMg
b2YgYWN0aW9ucyB0aGF0IGNhbiBiZSBwZXJmb3JtZWQgb24gdGhlIG1vZGVsIG9mCistLSBvdXIg
YXBwbGljYXRpb24uIFNlZSB0aGUgZm9sbG93aW5nIHBvc3QgZm9yIG1vcmUgaW5mbyBvbiB0aGlz
IHBhdHRlcm4gYW5kCistLSBzb21lIGFsdGVybmF0aXZlczogaHR0cDovL2d1aWRlLmVsbS1sYW5n
Lm9yZy9hcmNoaXRlY3R1cmUvCisKKwordHlwZSBNc2cKKyAgICA9IE5vT3AKKyAgICB8IFVwZGF0
ZUZpZWxkIFN0cmluZworICAgIHwgQWRkCisgICAgfCBVcGRhdGVUYXNrICggSW50LCBUb2RvLlRh
c2suTXNnICkKKyAgICB8IERlbGV0ZUNvbXBsZXRlCisgICAgfCBDaGVja0FsbCBCb29sCisgICAg
fCBDaGFuZ2VWaXNpYmlsaXR5IFN0cmluZworCisKKworLS0gSG93IHdlIHVwZGF0ZSBvdXIgTW9k
ZWwgb24gYW55IGdpdmVuIE1lc3NhZ2UKKworCit1cGRhdGUgOiBNc2cgLT4gTW9kZWwgLT4gKCBN
b2RlbCwgQ21kIE1zZyApCit1cGRhdGUgbXNnIG1vZGVsID0KKyAgICBjYXNlIERlYnVnLmxvZyAi
TUVTU0FHRTogIiBtc2cgb2YKKyAgICAgICAgTm9PcCAtPgorICAgICAgICAgICAgKCBtb2RlbCwg
Q21kLm5vbmUgKQorCisgICAgICAgIFVwZGF0ZUZpZWxkIHN0ciAtPgorICAgICAgICAgICAgbGV0
CisgICAgICAgICAgICAgICAgbmV3TW9kZWwgPQorICAgICAgICAgICAgICAgICAgICB7IG1vZGVs
IHwgZmllbGQgPSBzdHIgfQorICAgICAgICAgICAgaW4KKyAgICAgICAgICAgICAgICAoIG5ld01v
ZGVsLCBzYXZlIG1vZGVsICkKKworICAgICAgICBBZGQgLT4KKyAgICAgICAgICAgIGxldAorICAg
ICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nLnRy
aW0gbW9kZWwuZmllbGQKKworICAgICAgICAgICAgICAgIG5ld01vZGVsID0KKyAgICAgICAgICAg
ICAgICAgICAgaWYgU3RyaW5nLmlzRW1wdHkgZGVzY3JpcHRpb24gdGhlbgorICAgICAgICAgICAg
ICAgICAgICAgICAgbW9kZWwKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgeyBtb2RlbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdWlkID0g
bW9kZWwudWlkICsgMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgZmllbGQgPSAiIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgdGFza3MgPSBtb2RlbC50YXNrcyArKyBbIFRv
ZG8uVGFzay5pbml0IGRlc2NyaXB0aW9uIG1vZGVsLnVpZCBdCisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpbgorICAgICAgICAgICAgICAgICggbmV3TW9kZWwsIHNhdmUg
bmV3TW9kZWwgKQorCisgICAgICAgIFVwZGF0ZVRhc2sgKCBpZCwgdGFza01zZyApIC0+CisgICAg
ICAgICAgICBsZXQKKyAgICAgICAgICAgICAgICB1cGRhdGVUYXNrIHQgPQorICAgICAgICAgICAg
ICAgICAgICBpZiB0LmlkID09IGlkIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvZG8u
VGFzay51cGRhdGUgdGFza01zZyB0CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEp1c3QgdAorCisgICAgICAgICAgICAgICAgbmV3TW9kZWwgPQorICAg
ICAgICAgICAgICAgICAgICB7IG1vZGVsIHwgdGFza3MgPSBMaXN0LmZpbHRlck1hcCB1cGRhdGVU
YXNrIG1vZGVsLnRhc2tzIH0KKyAgICAgICAgICAgIGluCisgICAgICAgICAgICAgICAgY2FzZSB0
YXNrTXNnIG9mCisgICAgICAgICAgICAgICAgICAgIFRvZG8uVGFzay5Gb2N1cyBlbGVtZW50SWQg
LT4KKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld01vZGVsICEgWyBzYXZlIG5ld01vZGVsLCBm
b2N1c1Rhc2sgZWxlbWVudElkIF0KKworICAgICAgICAgICAgICAgICAgICBfIC0+CisgICAgICAg
ICAgICAgICAgICAgICAgICAoIG5ld01vZGVsLCBzYXZlIG5ld01vZGVsICkKKworICAgICAgICBE
ZWxldGVDb21wbGV0ZSAtPgorICAgICAgICAgICAgbGV0CisgICAgICAgICAgICAgICAgbmV3TW9k
ZWwgPQorICAgICAgICAgICAgICAgICAgICB7IG1vZGVsCisgICAgICAgICAgICAgICAgICAgICAg
ICB8IHRhc2tzID0gTGlzdC5maWx0ZXIgKG5vdCA8PCAuY29tcGxldGVkKSBtb2RlbC50YXNrcwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpbgorICAgICAgICAgICAgICAgICgg
bmV3TW9kZWwsIHNhdmUgbmV3TW9kZWwgKQorCisgICAgICAgIENoZWNrQWxsIGJvb2wgLT4KKyAg
ICAgICAgICAgIGxldAorICAgICAgICAgICAgICAgIHVwZGF0ZVRhc2sgdCA9CisgICAgICAgICAg
ICAgICAgICAgIHsgdCB8IGNvbXBsZXRlZCA9IGJvb2wgfQorCisgICAgICAgICAgICAgICAgbmV3
TW9kZWwgPQorICAgICAgICAgICAgICAgICAgICB7IG1vZGVsIHwgdGFza3MgPSBMaXN0Lm1hcCB1
cGRhdGVUYXNrIG1vZGVsLnRhc2tzIH0KKyAgICAgICAgICAgIGluCisgICAgICAgICAgICAgICAg
KCBuZXdNb2RlbCwgc2F2ZSBuZXdNb2RlbCApCisKKyAgICAgICAgQ2hhbmdlVmlzaWJpbGl0eSB2
aXNpYmlsaXR5IC0+CisgICAgICAgICAgICBsZXQKKyAgICAgICAgICAgICAgICBuZXdNb2RlbCA9
CisgICAgICAgICAgICAgICAgICAgIHsgbW9kZWwgfCB2aXNpYmlsaXR5ID0gdmlzaWJpbGl0eSB9
CisgICAgICAgICAgICBpbgorICAgICAgICAgICAgICAgICggbmV3TW9kZWwsIHNhdmUgbW9kZWwg
KQorCisKK2ZvY3VzVGFzayA6IFN0cmluZyAtPiBDbWQgTXNnCitmb2N1c1Rhc2sgZWxlbWVudElk
ID0KKyAgICBUYXNrLnBlcmZvcm0gKFxfIC0+IE5vT3ApIChcXyAtPiBOb09wKSAoRG9tLmZvY3Vz
IGVsZW1lbnRJZCkKKworCisKKy0tIFZJRVcKKworCit2aWV3IDogTW9kZWwgLT4gSHRtbCBNc2cK
K3ZpZXcgbW9kZWwgPQorICAgIGRpdgorICAgICAgICBbIGNsYXNzICJ0b2RvbXZjLXdyYXBwZXIi
CisgICAgICAgICwgc3R5bGUgWyAoICJ2aXNpYmlsaXR5IiwgImhpZGRlbiIgKSBdCisgICAgICAg
IF0KKyAgICAgICAgWyBzZWN0aW9uCisgICAgICAgICAgICBbIGNsYXNzICJ0b2RvYXBwIiBdCisg
ICAgICAgICAgICBbIGxhenkgdGFza0VudHJ5IG1vZGVsLmZpZWxkCisgICAgICAgICAgICAsIGxh
enkyIHRhc2tMaXN0IG1vZGVsLnZpc2liaWxpdHkgbW9kZWwudGFza3MKKyAgICAgICAgICAgICwg
bGF6eTIgY29udHJvbHMgbW9kZWwudmlzaWJpbGl0eSBtb2RlbC50YXNrcworICAgICAgICAgICAg
XQorICAgICAgICAsIGluZm9Gb290ZXIKKyAgICAgICAgXQorCisKK3Rhc2tFbnRyeSA6IFN0cmlu
ZyAtPiBIdG1sIE1zZwordGFza0VudHJ5IHRhc2sgPQorICAgIGhlYWRlcgorICAgICAgICBbIGNs
YXNzICJoZWFkZXIiIF0KKyAgICAgICAgWyBoMSBbXSBbIHRleHQgInRvZG9zIiBdCisgICAgICAg
ICwgaW5wdXQKKyAgICAgICAgICAgIFsgY2xhc3MgIm5ldy10b2RvIgorICAgICAgICAgICAgLCBw
bGFjZWhvbGRlciAiV2hhdCBuZWVkcyB0byBiZSBkb25lPyIKKyAgICAgICAgICAgICwgYXV0b2Zv
Y3VzIFRydWUKKyAgICAgICAgICAgICwgdmFsdWUgdGFzaworICAgICAgICAgICAgLCBuYW1lICJu
ZXdUb2RvIgorICAgICAgICAgICAgLCBvbklucHV0IFVwZGF0ZUZpZWxkCisgICAgICAgICAgICAs
IFRvZG8uVGFzay5vbkZpbmlzaCBBZGQgTm9PcAorICAgICAgICAgICAgXQorICAgICAgICAgICAg
W10KKyAgICAgICAgXQorCisKK3Rhc2tMaXN0IDogU3RyaW5nIC0+IExpc3QgVG9kby5UYXNrLk1v
ZGVsIC0+IEh0bWwgTXNnCit0YXNrTGlzdCB2aXNpYmlsaXR5IHRhc2tzID0KKyAgICBsZXQKKyAg
ICAgICAgaXNWaXNpYmxlIHRvZG8gPQorICAgICAgICAgICAgY2FzZSB2aXNpYmlsaXR5IG9mCisg
ICAgICAgICAgICAgICAgIkNvbXBsZXRlZCIgLT4KKyAgICAgICAgICAgICAgICAgICAgdG9kby5j
b21wbGV0ZWQKKworICAgICAgICAgICAgICAgICJBY3RpdmUiIC0+CisgICAgICAgICAgICAgICAg
ICAgIG5vdCB0b2RvLmNvbXBsZXRlZAorCisgICAgICAgICAgICAgICAgLS0gIkFsbCIKKyAgICAg
ICAgICAgICAgICBfIC0+CisgICAgICAgICAgICAgICAgICAgIFRydWUKKworICAgICAgICBhbGxD
b21wbGV0ZWQgPQorICAgICAgICAgICAgTGlzdC5hbGwgLmNvbXBsZXRlZCB0YXNrcworCisgICAg
ICAgIGNzc1Zpc2liaWxpdHkgPQorICAgICAgICAgICAgaWYgTGlzdC5pc0VtcHR5IHRhc2tzIHRo
ZW4KKyAgICAgICAgICAgICAgICAiaGlkZGVuIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICJ2aXNpYmxlIgorICAgIGluCisgICAgICAgIHNlY3Rpb24KKyAgICAgICAgICAgIFsg
Y2xhc3MgIm1haW4iCisgICAgICAgICAgICAsIHN0eWxlIFsgKCAidmlzaWJpbGl0eSIsIGNzc1Zp
c2liaWxpdHkgKSBdCisgICAgICAgICAgICBdCisgICAgICAgICAgICBbIGlucHV0CisgICAgICAg
ICAgICAgICAgWyBjbGFzcyAidG9nZ2xlLWFsbCIKKyAgICAgICAgICAgICAgICAsIHR5cGUnICJj
aGVja2JveCIKKyAgICAgICAgICAgICAgICAsIG5hbWUgInRvZ2dsZSIKKyAgICAgICAgICAgICAg
ICAsIGNoZWNrZWQgYWxsQ29tcGxldGVkCisgICAgICAgICAgICAgICAgLCBvbkNsaWNrIChDaGVj
a0FsbCAobm90IGFsbENvbXBsZXRlZCkpCisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAg
ICAgIFtdCisgICAgICAgICAgICAsIGxhYmVsCisgICAgICAgICAgICAgICAgWyBmb3IgInRvZ2ds
ZS1hbGwiIF0KKyAgICAgICAgICAgICAgICBbIHRleHQgIk1hcmsgYWxsIGFzIGNvbXBsZXRlIiBd
CisgICAgICAgICAgICAsIHVsCisgICAgICAgICAgICAgICAgWyBjbGFzcyAidG9kby1saXN0IiBd
CisgICAgICAgICAgICAgICAgKExpc3QubWFwCisgICAgICAgICAgICAgICAgICAgIChcdGFzayAt
PgorICAgICAgICAgICAgICAgICAgICAgICAgbGV0CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLmlkCisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0YXNrVmlldyA9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRvZG8uVGFzay52aWV3IHRhc2sKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSHRtbC5BcHAubWFwIChcbXNnIC0+IFVwZGF0
ZVRhc2sgKCBpZCwgbXNnICkpIHRhc2tWaWV3CisgICAgICAgICAgICAgICAgICAgICkKKyAgICAg
ICAgICAgICAgICAgICAgKExpc3QuZmlsdGVyIGlzVmlzaWJsZSB0YXNrcykKKyAgICAgICAgICAg
ICAgICApCisgICAgICAgICAgICBdCisKKworY29udHJvbHMgOiBTdHJpbmcgLT4gTGlzdCBUb2Rv
LlRhc2suTW9kZWwgLT4gSHRtbCBNc2cKK2NvbnRyb2xzIHZpc2liaWxpdHkgdGFza3MgPQorICAg
IGxldAorICAgICAgICB0YXNrc0NvbXBsZXRlZCA9CisgICAgICAgICAgICBMaXN0Lmxlbmd0aCAo
TGlzdC5maWx0ZXIgLmNvbXBsZXRlZCB0YXNrcykKKworICAgICAgICB0YXNrc0xlZnQgPQorICAg
ICAgICAgICAgTGlzdC5sZW5ndGggdGFza3MgLSB0YXNrc0NvbXBsZXRlZAorCisgICAgICAgIGl0
ZW1fID0KKyAgICAgICAgICAgIGlmIHRhc2tzTGVmdCA9PSAxIHRoZW4KKyAgICAgICAgICAgICAg
ICAiIGl0ZW0iCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgIiBpdGVtcyIKKyAg
ICBpbgorICAgICAgICBmb290ZXIKKyAgICAgICAgICAgIFsgY2xhc3MgImZvb3RlciIKKyAgICAg
ICAgICAgICwgaGlkZGVuIChMaXN0LmlzRW1wdHkgdGFza3MpCisgICAgICAgICAgICBdCisgICAg
ICAgICAgICBbIHNwYW4KKyAgICAgICAgICAgICAgICBbIGNsYXNzICJ0b2RvLWNvdW50IiBdCisg
ICAgICAgICAgICAgICAgWyBzdHJvbmcgW10gWyB0ZXh0ICh0b1N0cmluZyB0YXNrc0xlZnQpIF0K
KyAgICAgICAgICAgICAgICAsIHRleHQgKGl0ZW1fICsrICIgbGVmdCIpCisgICAgICAgICAgICAg
ICAgXQorICAgICAgICAgICAgLCB1bAorICAgICAgICAgICAgICAgIFsgY2xhc3MgImZpbHRlcnMi
IF0KKyAgICAgICAgICAgICAgICBbIHZpc2liaWxpdHlTd2FwICIjLyIgIkFsbCIgdmlzaWJpbGl0
eQorICAgICAgICAgICAgICAgICwgdGV4dCAiICIKKyAgICAgICAgICAgICAgICAsIHZpc2liaWxp
dHlTd2FwICIjL2FjdGl2ZSIgIkFjdGl2ZSIgdmlzaWJpbGl0eQorICAgICAgICAgICAgICAgICwg
dGV4dCAiICIKKyAgICAgICAgICAgICAgICAsIHZpc2liaWxpdHlTd2FwICIjL2NvbXBsZXRlZCIg
IkNvbXBsZXRlZCIgdmlzaWJpbGl0eQorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICwg
YnV0dG9uCisgICAgICAgICAgICAgICAgWyBjbGFzcyAiY2xlYXItY29tcGxldGVkIgorICAgICAg
ICAgICAgICAgICwgaGlkZGVuICh0YXNrc0NvbXBsZXRlZCA9PSAwKQorICAgICAgICAgICAgICAg
ICwgb25DbGljayBEZWxldGVDb21wbGV0ZQorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAg
ICAgICBbIHRleHQgKCJDbGVhciBjb21wbGV0ZWQgKCIgKysgdG9TdHJpbmcgdGFza3NDb21wbGV0
ZWQgKysgIikiKSBdCisgICAgICAgICAgICBdCisKKwordmlzaWJpbGl0eVN3YXAgOiBTdHJpbmcg
LT4gU3RyaW5nIC0+IFN0cmluZyAtPiBIdG1sIE1zZwordmlzaWJpbGl0eVN3YXAgdXJpIHZpc2li
aWxpdHkgYWN0dWFsVmlzaWJpbGl0eSA9CisgICAgbGV0CisgICAgICAgIGNsYXNzTmFtZSA9Cisg
ICAgICAgICAgICBpZiB2aXNpYmlsaXR5ID09IGFjdHVhbFZpc2liaWxpdHkgdGhlbgorICAgICAg
ICAgICAgICAgICJzZWxlY3RlZCIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAi
IgorICAgIGluCisgICAgICAgIGxpCisgICAgICAgICAgICBbIG9uQ2xpY2sgKENoYW5nZVZpc2li
aWxpdHkgdmlzaWJpbGl0eSkgXQorICAgICAgICAgICAgWyBhIFsgY2xhc3MgY2xhc3NOYW1lLCBo
cmVmIHVyaSBdIFsgdGV4dCB2aXNpYmlsaXR5IF0gXQorCisKK2luZm9Gb290ZXIgOiBIdG1sIG1z
ZworaW5mb0Zvb3RlciA9CisgICAgZm9vdGVyCisgICAgICAgIFsgY2xhc3MgImluZm8iIF0KKyAg
ICAgICAgWyBwIFtdIFsgdGV4dCAiRG91YmxlLWNsaWNrIHRvIGVkaXQgYSB0b2RvIiBdCisgICAg
ICAgICwgcCBbXQorICAgICAgICAgICAgWyB0ZXh0ICJXcml0dGVuIGJ5ICIKKyAgICAgICAgICAg
ICwgYSBbIGhyZWYgImh0dHBzOi8vZ2l0aHViLmNvbS9ldmFuY3oiIF0gWyB0ZXh0ICJFdmFuIEN6
YXBsaWNraSIgXQorICAgICAgICAgICAgXQorICAgICAgICAsIHAgW10KKyAgICAgICAgICAgIFsg
dGV4dCAiUGFydCBvZiAiCisgICAgICAgICAgICAsIGEgWyBocmVmICJodHRwOi8vdG9kb212Yy5j
b20iIF0gWyB0ZXh0ICJUb2RvTVZDIiBdCisgICAgICAgICAgICBdCisgICAgICAgIF0KKworCisK
Ky0tIHdpcmUgdGhlIGVudGlyZSBhcHBsaWNhdGlvbiB0b2dldGhlcgorCisKK21haW4gOiBQcm9n
cmFtIEZsYWdzCittYWluID0KKyAgICBOYXZpZ2F0aW9uLnByb2dyYW1XaXRoRmxhZ3MgdXJsUGFy
c2VyCisgICAgICAgIHsgdXJsVXBkYXRlID0gdXJsVXBkYXRlCisgICAgICAgICwgdmlldyA9IHZp
ZXcKKyAgICAgICAgLCBpbml0ID0gaW5pdAorICAgICAgICAsIHVwZGF0ZSA9IHVwZGF0ZQorICAg
ICAgICAsIHN1YnNjcmlwdGlvbnMgPSBzdWJzY3JpcHRpb25zCisgICAgICAgIH0KKworCisKKy0t
IFVSTCBQQVJTRVJTIC0gY2hlY2sgb3V0IGV2YW5jei91cmwtcGFyc2VyIGZvciBmYW5jaWVyIFVS
TCBwYXJzaW5nCisKKwordG9VcmwgOiBTdHJpbmcgLT4gU3RyaW5nCit0b1VybCB2aXNpYmlsaXR5
ID0KKyAgICAiIy8iICsrIFN0cmluZy50b0xvd2VyIHZpc2liaWxpdHkKKworCitmcm9tVXJsIDog
U3RyaW5nIC0+IE1heWJlIFN0cmluZworZnJvbVVybCBoYXNoID0KKyAgICBsZXQKKyAgICAgICAg
Y2xlYW5IYXNoID0KKyAgICAgICAgICAgIFN0cmluZy5kcm9wTGVmdCAyIGhhc2gKKyAgICBpbgor
ICAgICAgICBpZiAoTGlzdC5tZW1iZXIgY2xlYW5IYXNoIFsgImFsbCIsICJhY3RpdmUiLCAiY29t
cGxldGVkIiBdKSA9PSBUcnVlIHRoZW4KKyAgICAgICAgICAgIEp1c3QgY2xlYW5IYXNoCisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIE5vdGhpbmcKKworCit1cmxQYXJzZXIgOiBQYXJzZXIgKE1h
eWJlIFN0cmluZykKK3VybFBhcnNlciA9CisgICAgTmF2aWdhdGlvbi5tYWtlUGFyc2VyIChmcm9t
VXJsIDw8IC5oYXNoKQorCisKK3stfCBUaGUgVVJMIGlzIHR1cm5lZCBpbnRvIGEgTWF5YmUgdmFs
dWUuIElmIHRoZSBVUkwgaXMgdmFsaWQsIHdlIGp1c3QgdXBkYXRlCitvdXIgbW9kZWwgd2l0aCB0
aGUgbmV3IHZpc2liaWxpdHkgc2V0dGluZ3MuIElmIGl0IGlzIG5vdCBhIHZhbGlkIFVSTCwKK3dl
IHNldCB0aGUgdmlzaWJpbGl0eSBmaWx0ZXIgdG8gc2hvdyBhbGwgdGFza3MuCistfQordXJsVXBk
YXRlIDogTWF5YmUgU3RyaW5nIC0+IE1vZGVsIC0+ICggTW9kZWwsIENtZCBNc2cgKQordXJsVXBk
YXRlIHJlc3VsdCBtb2RlbCA9CisgICAgY2FzZSByZXN1bHQgb2YKKyAgICAgICAgSnVzdCB2aXNp
YmlsaXR5IC0+CisgICAgICAgICAgICB1cGRhdGUgKENoYW5nZVZpc2liaWxpdHkgKFN0cmluZy5F
eHRyYS50b1NlbnRlbmNlQ2FzZSB2aXNpYmlsaXR5KSkgbW9kZWwKKworICAgICAgICBOb3RoaW5n
IC0+CisgICAgICAgICAgICB1cGRhdGUgKENoYW5nZVZpc2liaWxpdHkgIkFsbCIpIG1vZGVsCisK
KworaW5pdCA6IEZsYWdzIC0+IE1heWJlIFN0cmluZyAtPiAoIE1vZGVsLCBDbWQgTXNnICkKK2lu
aXQgZmxhZ3MgdXJsID0KKyAgICB1cmxVcGRhdGUgdXJsIChNYXliZS53aXRoRGVmYXVsdCBlbXB0
eU1vZGVsIGZsYWdzKQorCisKKworLS0gaW50ZXJhY3Rpb25zIHdpdGggbG9jYWxTdG9yYWdlCisK
KworcG9ydCBzYXZlIDogTW9kZWwgLT4gQ21kIG1zZworCisKK3N1YnNjcmlwdGlvbnMgOiBNb2Rl
bCAtPiBTdWIgTXNnCitzdWJzY3JpcHRpb25zIG1vZGVsID0KKyAgICBTdWIubm9uZQpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5j
dGlvbmFsLXByb2ctZXhhbXBsZXMvZWxtL1RvZG8vVGFzay5lbG0gYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Z1bmN0aW9uYWwtcHJvZy1leGFtcGxlcy9l
bG0vVG9kby9UYXNrLmVsbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMzVmNjE2M2RjY2QxZmMwZTBlODlhOGYzOWI5
MGZlOGUxZWI0ODRhCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlvbmFsLXByb2ctZXhhbXBsZXMvZWxtL1RvZG8v
VGFzay5lbG0KQEAgLTAsMCArMSwxNTIgQEAKK21vZHVsZSBUb2RvLlRhc2sgZXhwb3NpbmcgKC4u
KQorCitpbXBvcnQgSHRtbCBleHBvc2luZyAoLi4pCitpbXBvcnQgSHRtbC5BdHRyaWJ1dGVzIGV4
cG9zaW5nICguLikKK2ltcG9ydCBIdG1sLkV2ZW50cyBleHBvc2luZyAoLi4pCitpbXBvcnQgSnNv
bi5EZWNvZGUKK2ltcG9ydCBTdHJpbmcKKworCistLSBNT0RFTAorCisKK3R5cGUgYWxpYXMgTW9k
ZWwgPQorICAgIHsgZGVzY3JpcHRpb24gOiBTdHJpbmcKKyAgICAsIGNvbXBsZXRlZCA6IEJvb2wK
KyAgICAsIGVkaXRzIDogTWF5YmUgU3RyaW5nCisgICAgLCBpZCA6IEludAorICAgIH0KKworCitp
bml0IDogU3RyaW5nIC0+IEludCAtPiBNb2RlbAoraW5pdCBkZXNjIGlkID0KKyAgICB7IGRlc2Ny
aXB0aW9uID0gZGVzYworICAgICwgY29tcGxldGVkID0gRmFsc2UKKyAgICAsIGVkaXRzID0gTm90
aGluZworICAgICwgaWQgPSBpZAorICAgIH0KKworCisKKy0tIFVQREFURQorCisKK3R5cGUgTXNn
CisgICAgPSBGb2N1cyBTdHJpbmcKKyAgICB8IEVkaXQgU3RyaW5nCisgICAgfCBDYW5jZWwKKyAg
ICB8IENvbW1pdAorICAgIHwgQ29tcGxldGVkIEJvb2wKKyAgICB8IERlbGV0ZQorCisKK3VwZGF0
ZSA6IE1zZyAtPiBNb2RlbCAtPiBNYXliZSBNb2RlbAordXBkYXRlIG1zZyBtb2RlbCA9CisgICAg
Y2FzZSBtc2cgb2YKKyAgICAgICAgRm9jdXMgZWxlbWVudElkIC0+CisgICAgICAgICAgICBKdXN0
IHsgbW9kZWwgfCBlZGl0cyA9IEp1c3QgbW9kZWwuZGVzY3JpcHRpb24gfQorCisgICAgICAgIEVk
aXQgZGVzY3JpcHRpb24gLT4KKyAgICAgICAgICAgIEp1c3QgeyBtb2RlbCB8IGVkaXRzID0gSnVz
dCBkZXNjcmlwdGlvbiB9CisKKyAgICAgICAgQ2FuY2VsIC0+CisgICAgICAgICAgICBKdXN0IHsg
bW9kZWwgfCBlZGl0cyA9IE5vdGhpbmcgfQorCisgICAgICAgIENvbW1pdCAtPgorICAgICAgICAg
ICAgY2FzZSBtb2RlbC5lZGl0cyBvZgorICAgICAgICAgICAgICAgIE5vdGhpbmcgLT4KKyAgICAg
ICAgICAgICAgICAgICAgSnVzdCBtb2RlbAorCisgICAgICAgICAgICAgICAgSnVzdCByYXdEZXNj
cmlwdGlvbiAtPgorICAgICAgICAgICAgICAgICAgICBsZXQKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc2NyaXB0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcudHJp
bSByYXdEZXNjcmlwdGlvbgorICAgICAgICAgICAgICAgICAgICBpbgorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgU3RyaW5nLmlzRW1wdHkgZGVzY3JpcHRpb24gdGhlbgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5vdGhpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBKdXN0CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsgbW9kZWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWRp
dHMgPSBOb3RoaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGRlc2Ny
aXB0aW9uID0gZGVzY3JpcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgIENvbXBsZXRlZCBib29sIC0+CisgICAgICAgICAgICBKdXN0IHsgbW9kZWwgfCBj
b21wbGV0ZWQgPSBib29sIH0KKworICAgICAgICBEZWxldGUgLT4KKyAgICAgICAgICAgIE5vdGhp
bmcKKworCisKKy0tIFZJRVcKKworCit2aWV3IDogTW9kZWwgLT4gSHRtbCBNc2cKK3ZpZXcgbW9k
ZWwgPQorICAgIGxldAorICAgICAgICBjbGFzc05hbWUgPQorICAgICAgICAgICAgKGlmIG1vZGVs
LmNvbXBsZXRlZCB0aGVuCisgICAgICAgICAgICAgICAgImNvbXBsZXRlZCAiCisgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICIiCisgICAgICAgICAgICApCisgICAgICAgICAgICAg
ICAgKysgY2FzZSBtb2RlbC5lZGl0cyBvZgorICAgICAgICAgICAgICAgICAgICBKdXN0IF8gLT4K
KyAgICAgICAgICAgICAgICAgICAgICAgICJlZGl0aW5nIgorCisgICAgICAgICAgICAgICAgICAg
IE5vdGhpbmcgLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICIiCisKKyAgICAgICAgZGVzY3Jp
cHRpb24gPQorICAgICAgICAgICAgTWF5YmUud2l0aERlZmF1bHQgbW9kZWwuZGVzY3JpcHRpb24g
bW9kZWwuZWRpdHMKKworICAgICAgICBlbGVtZW50SWQgPQorICAgICAgICAgICAgInRvZG8tIiAr
KyB0b1N0cmluZyBtb2RlbC5pZAorICAgIGluCisgICAgICAgIGxpCisgICAgICAgICAgICBbIGNs
YXNzIGNsYXNzTmFtZSBdCisgICAgICAgICAgICBbIGRpdgorICAgICAgICAgICAgICAgIFsgY2xh
c3MgInZpZXciIF0KKyAgICAgICAgICAgICAgICBbIGlucHV0CisgICAgICAgICAgICAgICAgICAg
IFsgY2xhc3MgInRvZ2dsZSIKKyAgICAgICAgICAgICAgICAgICAgLCB0eXBlJyAiY2hlY2tib3gi
CisgICAgICAgICAgICAgICAgICAgICwgY2hlY2tlZCBtb2RlbC5jb21wbGV0ZWQKKyAgICAgICAg
ICAgICAgICAgICAgLCBvbkNsaWNrIChDb21wbGV0ZWQgKG5vdCBtb2RlbC5jb21wbGV0ZWQpKQor
ICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgIFtdCisgICAgICAgICAg
ICAgICAgLCBsYWJlbAorICAgICAgICAgICAgICAgICAgICBbIG9uRG91YmxlQ2xpY2sgKEZvY3Vz
IGVsZW1lbnRJZCkgXQorICAgICAgICAgICAgICAgICAgICBbIHRleHQgZGVzY3JpcHRpb24gXQor
ICAgICAgICAgICAgICAgICwgYnV0dG9uCisgICAgICAgICAgICAgICAgICAgIFsgY2xhc3MgImRl
c3Ryb3kiCisgICAgICAgICAgICAgICAgICAgICwgb25DbGljayBEZWxldGUKKyAgICAgICAgICAg
ICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICBbXQorICAgICAgICAgICAgICAgIF0KKyAg
ICAgICAgICAgICwgaW5wdXQKKyAgICAgICAgICAgICAgICBbIGNsYXNzICJlZGl0IgorICAgICAg
ICAgICAgICAgICwgdmFsdWUgZGVzY3JpcHRpb24KKyAgICAgICAgICAgICAgICAsIG5hbWUgInRp
dGxlIgorICAgICAgICAgICAgICAgICwgaWQgKGVsZW1lbnRJZCkKKyAgICAgICAgICAgICAgICAs
IG9uSW5wdXQgRWRpdAorICAgICAgICAgICAgICAgICwgb25CbHVyIENvbW1pdAorICAgICAgICAg
ICAgICAgICwgb25GaW5pc2ggQ29tbWl0IENhbmNlbAorICAgICAgICAgICAgICAgIF0KKyAgICAg
ICAgICAgICAgICBbXQorICAgICAgICAgICAgXQorCisKK29uRmluaXNoIDogbXNnIC0+IG1zZyAt
PiBBdHRyaWJ1dGUgbXNnCitvbkZpbmlzaCBlbnRlck1lc3NhZ2UgZXNjYXBlTWVzc2FnZSA9Cisg
ICAgbGV0CisgICAgICAgIHNlbGVjdCBrZXkgPQorICAgICAgICAgICAgY2FzZSBrZXkgb2YKKyAg
ICAgICAgICAgICAgICAxMyAtPgorICAgICAgICAgICAgICAgICAgICBlbnRlck1lc3NhZ2UKKwor
ICAgICAgICAgICAgICAgIF8gLT4KKyAgICAgICAgICAgICAgICAgICAgLS0gTm90IGEgJ2Zpbmlz
aCcga2V5LCBzdWNoIGFzIEVOVEVSIG9yIEVTQ0FQRQorICAgICAgICAgICAgICAgICAgICBlc2Nh
cGVNZXNzYWdlCisgICAgaW4KKyAgICAgICAgb24gImtleWRvd24iIChKc29uLkRlY29kZS5tYXAg
c2VsZWN0IGtleUNvZGUpCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2Z1bmN0aW9uYWwtcHJvZy1leGFtcGxlcy9lbG0vYnVpbGQvZWxt
LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5j
dGlvbmFsLXByb2ctZXhhbXBsZXMvZWxtL2J1aWxkL2VsbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41N2I5N2M1
NDdhOWM4ZmJhYmRmMDU2OTM1NmI2NzQyNjdhMGJiNDBiCi0tLSAvZGV2L251bGwKKysrIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlvbmFsLXBy
b2ctZXhhbXBsZXMvZWxtL2J1aWxkL2VsbS5qcwpAQCAtMCwwICsxLDEwMzczIEBACisKKyhmdW5j
dGlvbigpIHsKKyd1c2Ugc3RyaWN0JzsKKworZnVuY3Rpb24gRjIoZnVuKQoreworICBmdW5jdGlv
biB3cmFwcGVyKGEpIHsgcmV0dXJuIGZ1bmN0aW9uKGIpIHsgcmV0dXJuIGZ1bihhLGIpOyB9OyB9
CisgIHdyYXBwZXIuYXJpdHkgPSAyOworICB3cmFwcGVyLmZ1bmMgPSBmdW47CisgIHJldHVybiB3
cmFwcGVyOworfQorCitmdW5jdGlvbiBGMyhmdW4pCit7CisgIGZ1bmN0aW9uIHdyYXBwZXIoYSkg
eworICAgIHJldHVybiBmdW5jdGlvbihiKSB7IHJldHVybiBmdW5jdGlvbihjKSB7IHJldHVybiBm
dW4oYSwgYiwgYyk7IH07IH07CisgIH0KKyAgd3JhcHBlci5hcml0eSA9IDM7CisgIHdyYXBwZXIu
ZnVuYyA9IGZ1bjsKKyAgcmV0dXJuIHdyYXBwZXI7Cit9CisKK2Z1bmN0aW9uIEY0KGZ1bikKK3sK
KyAgZnVuY3Rpb24gd3JhcHBlcihhKSB7IHJldHVybiBmdW5jdGlvbihiKSB7IHJldHVybiBmdW5j
dGlvbihjKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGZ1bihhLCBiLCBjLCBk
KTsgfTsgfTsgfTsKKyAgfQorICB3cmFwcGVyLmFyaXR5ID0gNDsKKyAgd3JhcHBlci5mdW5jID0g
ZnVuOworICByZXR1cm4gd3JhcHBlcjsKK30KKworZnVuY3Rpb24gRjUoZnVuKQoreworICBmdW5j
dGlvbiB3cmFwcGVyKGEpIHsgcmV0dXJuIGZ1bmN0aW9uKGIpIHsgcmV0dXJuIGZ1bmN0aW9uKGMp
IHsKKyAgICByZXR1cm4gZnVuY3Rpb24oZCkgeyByZXR1cm4gZnVuY3Rpb24oZSkgeyByZXR1cm4g
ZnVuKGEsIGIsIGMsIGQsIGUpOyB9OyB9OyB9OyB9OworICB9CisgIHdyYXBwZXIuYXJpdHkgPSA1
OworICB3cmFwcGVyLmZ1bmMgPSBmdW47CisgIHJldHVybiB3cmFwcGVyOworfQorCitmdW5jdGlv
biBGNihmdW4pCit7CisgIGZ1bmN0aW9uIHdyYXBwZXIoYSkgeyByZXR1cm4gZnVuY3Rpb24oYikg
eyByZXR1cm4gZnVuY3Rpb24oYykgeworICAgIHJldHVybiBmdW5jdGlvbihkKSB7IHJldHVybiBm
dW5jdGlvbihlKSB7IHJldHVybiBmdW5jdGlvbihmKSB7CisgICAgcmV0dXJuIGZ1bihhLCBiLCBj
LCBkLCBlLCBmKTsgfTsgfTsgfTsgfTsgfTsKKyAgfQorICB3cmFwcGVyLmFyaXR5ID0gNjsKKyAg
d3JhcHBlci5mdW5jID0gZnVuOworICByZXR1cm4gd3JhcHBlcjsKK30KKworZnVuY3Rpb24gRjco
ZnVuKQoreworICBmdW5jdGlvbiB3cmFwcGVyKGEpIHsgcmV0dXJuIGZ1bmN0aW9uKGIpIHsgcmV0
dXJuIGZ1bmN0aW9uKGMpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oZCkgeyByZXR1cm4gZnVuY3Rp
b24oZSkgeyByZXR1cm4gZnVuY3Rpb24oZikgeworICAgIHJldHVybiBmdW5jdGlvbihnKSB7IHJl
dHVybiBmdW4oYSwgYiwgYywgZCwgZSwgZiwgZyk7IH07IH07IH07IH07IH07IH07CisgIH0KKyAg
d3JhcHBlci5hcml0eSA9IDc7CisgIHdyYXBwZXIuZnVuYyA9IGZ1bjsKKyAgcmV0dXJuIHdyYXBw
ZXI7Cit9CisKK2Z1bmN0aW9uIEY4KGZ1bikKK3sKKyAgZnVuY3Rpb24gd3JhcHBlcihhKSB7IHJl
dHVybiBmdW5jdGlvbihiKSB7IHJldHVybiBmdW5jdGlvbihjKSB7CisgICAgcmV0dXJuIGZ1bmN0
aW9uKGQpIHsgcmV0dXJuIGZ1bmN0aW9uKGUpIHsgcmV0dXJuIGZ1bmN0aW9uKGYpIHsKKyAgICBy
ZXR1cm4gZnVuY3Rpb24oZykgeyByZXR1cm4gZnVuY3Rpb24oaCkgeworICAgIHJldHVybiBmdW4o
YSwgYiwgYywgZCwgZSwgZiwgZywgaCk7IH07IH07IH07IH07IH07IH07IH07CisgIH0KKyAgd3Jh
cHBlci5hcml0eSA9IDg7CisgIHdyYXBwZXIuZnVuYyA9IGZ1bjsKKyAgcmV0dXJuIHdyYXBwZXI7
Cit9CisKK2Z1bmN0aW9uIEY5KGZ1bikKK3sKKyAgZnVuY3Rpb24gd3JhcHBlcihhKSB7IHJldHVy
biBmdW5jdGlvbihiKSB7IHJldHVybiBmdW5jdGlvbihjKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9u
KGQpIHsgcmV0dXJuIGZ1bmN0aW9uKGUpIHsgcmV0dXJuIGZ1bmN0aW9uKGYpIHsKKyAgICByZXR1
cm4gZnVuY3Rpb24oZykgeyByZXR1cm4gZnVuY3Rpb24oaCkgeyByZXR1cm4gZnVuY3Rpb24oaSkg
eworICAgIHJldHVybiBmdW4oYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSk7IH07IH07IH07IH07
IH07IH07IH07IH07CisgIH0KKyAgd3JhcHBlci5hcml0eSA9IDk7CisgIHdyYXBwZXIuZnVuYyA9
IGZ1bjsKKyAgcmV0dXJuIHdyYXBwZXI7Cit9CisKK2Z1bmN0aW9uIEEyKGZ1biwgYSwgYikKK3sK
KyAgcmV0dXJuIGZ1bi5hcml0eSA9PT0gMgorICAgID8gZnVuLmZ1bmMoYSwgYikKKyAgICA6IGZ1
bihhKShiKTsKK30KK2Z1bmN0aW9uIEEzKGZ1biwgYSwgYiwgYykKK3sKKyAgcmV0dXJuIGZ1bi5h
cml0eSA9PT0gMworICAgID8gZnVuLmZ1bmMoYSwgYiwgYykKKyAgICA6IGZ1bihhKShiKShjKTsK
K30KK2Z1bmN0aW9uIEE0KGZ1biwgYSwgYiwgYywgZCkKK3sKKyAgcmV0dXJuIGZ1bi5hcml0eSA9
PT0gNAorICAgID8gZnVuLmZ1bmMoYSwgYiwgYywgZCkKKyAgICA6IGZ1bihhKShiKShjKShkKTsK
K30KK2Z1bmN0aW9uIEE1KGZ1biwgYSwgYiwgYywgZCwgZSkKK3sKKyAgcmV0dXJuIGZ1bi5hcml0
eSA9PT0gNQorICAgID8gZnVuLmZ1bmMoYSwgYiwgYywgZCwgZSkKKyAgICA6IGZ1bihhKShiKShj
KShkKShlKTsKK30KK2Z1bmN0aW9uIEE2KGZ1biwgYSwgYiwgYywgZCwgZSwgZikKK3sKKyAgcmV0
dXJuIGZ1bi5hcml0eSA9PT0gNgorICAgID8gZnVuLmZ1bmMoYSwgYiwgYywgZCwgZSwgZikKKyAg
ICA6IGZ1bihhKShiKShjKShkKShlKShmKTsKK30KK2Z1bmN0aW9uIEE3KGZ1biwgYSwgYiwgYywg
ZCwgZSwgZiwgZykKK3sKKyAgcmV0dXJuIGZ1bi5hcml0eSA9PT0gNworICAgID8gZnVuLmZ1bmMo
YSwgYiwgYywgZCwgZSwgZiwgZykKKyAgICA6IGZ1bihhKShiKShjKShkKShlKShmKShnKTsKK30K
K2Z1bmN0aW9uIEE4KGZ1biwgYSwgYiwgYywgZCwgZSwgZiwgZywgaCkKK3sKKyAgcmV0dXJuIGZ1
bi5hcml0eSA9PT0gOAorICAgID8gZnVuLmZ1bmMoYSwgYiwgYywgZCwgZSwgZiwgZywgaCkKKyAg
ICA6IGZ1bihhKShiKShjKShkKShlKShmKShnKShoKTsKK30KK2Z1bmN0aW9uIEE5KGZ1biwgYSwg
YiwgYywgZCwgZSwgZiwgZywgaCwgaSkKK3sKKyAgcmV0dXJuIGZ1bi5hcml0eSA9PT0gOQorICAg
ID8gZnVuLmZ1bmMoYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSkKKyAgICA6IGZ1bihhKShiKShj
KShkKShlKShmKShnKShoKShpKTsKK30KKworLy9pbXBvcnQgTmF0aXZlLlV0aWxzIC8vCisKK3Zh
ciBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzID0gZnVuY3Rpb24oKSB7CisKK2Z1bmN0aW9u
IGRpdihhLCBiKQoreworICAgIHJldHVybiAoYSAvIGIpIHwgMDsKK30KK2Z1bmN0aW9uIHJlbShh
LCBiKQoreworICAgIHJldHVybiBhICUgYjsKK30KK2Z1bmN0aW9uIG1vZChhLCBiKQoreworICAg
IGlmIChiID09PSAwKQorICAgIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGVy
Zm9ybSBtb2QgMC4gRGl2aXNpb24gYnkgemVybyBlcnJvci4nKTsKKyAgICB9CisgICAgdmFyIHIg
PSBhICUgYjsKKyAgICB2YXIgbSA9IGEgPT09IDAgPyAwIDogKGIgPiAwID8gKGEgPj0gMCA/IHIg
OiByICsgYikgOiAtbW9kKC1hLCAtYikpOworCisgICAgcmV0dXJuIG0gPT09IGIgPyAwIDogbTsK
K30KK2Z1bmN0aW9uIGxvZ0Jhc2UoYmFzZSwgbikKK3sKKyAgICByZXR1cm4gTWF0aC5sb2cobikg
LyBNYXRoLmxvZyhiYXNlKTsKK30KK2Z1bmN0aW9uIG5lZ2F0ZShuKQoreworICAgIHJldHVybiAt
bjsKK30KK2Z1bmN0aW9uIGFicyhuKQoreworICAgIHJldHVybiBuIDwgMCA/IC1uIDogbjsKK30K
KworZnVuY3Rpb24gbWluKGEsIGIpCit7CisgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9VdGlscy5jbXAoYSwgYikgPCAwID8gYSA6IGI7Cit9CitmdW5jdGlvbiBtYXgoYSwgYikKK3sK
KyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNtcChhLCBiKSA+IDAgPyBh
IDogYjsKK30KK2Z1bmN0aW9uIGNsYW1wKGxvLCBoaSwgbikKK3sKKyAgICByZXR1cm4gX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNtcChuLCBsbykgPCAwCisgICAgICAgID8gbG8KKyAgICAg
ICAgOiBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY21wKG4sIGhpKSA+IDAKKyAgICAgICAg
ICAgID8gaGkKKyAgICAgICAgICAgIDogbjsKK30KKwordmFyIG9yZCA9IFsnTFQnLCAnRVEnLCAn
R1QnXTsKKworZnVuY3Rpb24gY29tcGFyZSh4LCB5KQoreworICAgIHJldHVybiB7IGN0b3I6IG9y
ZFtfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY21wKHgsIHkpICsgMV0gfTsKK30KKworZnVu
Y3Rpb24geG9yKGEsIGIpCit7CisgICAgcmV0dXJuIGEgIT09IGI7Cit9CitmdW5jdGlvbiBub3Qo
YikKK3sKKyAgICByZXR1cm4gIWI7Cit9CitmdW5jdGlvbiBpc0luZmluaXRlKG4pCit7CisgICAg
cmV0dXJuIG4gPT09IEluZmluaXR5IHx8IG4gPT09IC1JbmZpbml0eTsKK30KKworZnVuY3Rpb24g
dHJ1bmNhdGUobikKK3sKKyAgICByZXR1cm4gbiB8IDA7Cit9CisKK2Z1bmN0aW9uIGRlZ3JlZXMo
ZCkKK3sKKyAgICByZXR1cm4gZCAqIE1hdGguUEkgLyAxODA7Cit9CitmdW5jdGlvbiB0dXJucyh0
KQoreworICAgIHJldHVybiAyICogTWF0aC5QSSAqIHQ7Cit9CitmdW5jdGlvbiBmcm9tUG9sYXIo
cG9pbnQpCit7CisgICAgdmFyIHIgPSBwb2ludC5fMDsKKyAgICB2YXIgdCA9IHBvaW50Ll8xOwor
ICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuVHVwbGUyKHIgKiBNYXRoLmNv
cyh0KSwgciAqIE1hdGguc2luKHQpKTsKK30KK2Z1bmN0aW9uIHRvUG9sYXIocG9pbnQpCit7Cisg
ICAgdmFyIHggPSBwb2ludC5fMDsKKyAgICB2YXIgeSA9IHBvaW50Ll8xOworICAgIHJldHVybiBf
ZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuVHVwbGUyKE1hdGguc3FydCh4ICogeCArIHkgKiB5
KSwgTWF0aC5hdGFuMih5LCB4KSk7Cit9CisKK3JldHVybiB7CisgICAgZGl2OiBGMihkaXYpLAor
ICAgIHJlbTogRjIocmVtKSwKKyAgICBtb2Q6IEYyKG1vZCksCisKKyAgICBwaTogTWF0aC5QSSwK
KyAgICBlOiBNYXRoLkUsCisgICAgY29zOiBNYXRoLmNvcywKKyAgICBzaW46IE1hdGguc2luLAor
ICAgIHRhbjogTWF0aC50YW4sCisgICAgYWNvczogTWF0aC5hY29zLAorICAgIGFzaW46IE1hdGgu
YXNpbiwKKyAgICBhdGFuOiBNYXRoLmF0YW4sCisgICAgYXRhbjI6IEYyKE1hdGguYXRhbjIpLAor
CisgICAgZGVncmVlczogZGVncmVlcywKKyAgICB0dXJuczogdHVybnMsCisgICAgZnJvbVBvbGFy
OiBmcm9tUG9sYXIsCisgICAgdG9Qb2xhcjogdG9Qb2xhciwKKworICAgIHNxcnQ6IE1hdGguc3Fy
dCwKKyAgICBsb2dCYXNlOiBGMihsb2dCYXNlKSwKKyAgICBuZWdhdGU6IG5lZ2F0ZSwKKyAgICBh
YnM6IGFicywKKyAgICBtaW46IEYyKG1pbiksCisgICAgbWF4OiBGMihtYXgpLAorICAgIGNsYW1w
OiBGMyhjbGFtcCksCisgICAgY29tcGFyZTogRjIoY29tcGFyZSksCisKKyAgICB4b3I6IEYyKHhv
ciksCisgICAgbm90OiBub3QsCisKKyAgICB0cnVuY2F0ZTogdHJ1bmNhdGUsCisgICAgY2VpbGlu
ZzogTWF0aC5jZWlsLAorICAgIGZsb29yOiBNYXRoLmZsb29yLAorICAgIHJvdW5kOiBNYXRoLnJv
dW5kLAorICAgIHRvRmxvYXQ6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHg7IH0sCisgICAgaXNOYU46
IGlzTmFOLAorICAgIGlzSW5maW5pdGU6IGlzSW5maW5pdGUKK307CisKK30oKTsKKy8vaW1wb3J0
IC8vCisKK3ZhciBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMgPSBmdW5jdGlvbigpIHsKKwor
Ly8gQ09NUEFSSVNPTlMKKworZnVuY3Rpb24gZXEoeCwgeSkKK3sKKyAgICB2YXIgc3RhY2sgPSBb
XTsKKyAgICB2YXIgaXNFcXVhbCA9IGVxSGVscCh4LCB5LCAwLCBzdGFjayk7CisgICAgdmFyIHBh
aXI7CisgICAgd2hpbGUgKGlzRXF1YWwgJiYgKHBhaXIgPSBzdGFjay5wb3AoKSkpCisgICAgewor
ICAgICAgICBpc0VxdWFsID0gZXFIZWxwKHBhaXIueCwgcGFpci55LCAwLCBzdGFjayk7CisgICAg
fQorICAgIHJldHVybiBpc0VxdWFsOworfQorCisKK2Z1bmN0aW9uIGVxSGVscCh4LCB5LCBkZXB0
aCwgc3RhY2spCit7CisgICAgaWYgKGRlcHRoID4gMTAwKQorICAgIHsKKyAgICAgICAgc3RhY2su
cHVzaCh7IHg6IHgsIHk6IHkgfSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IGlmICh4ID09PSB5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
aWYgKHR5cGVvZiB4ICE9PSAnb2JqZWN0JykKKyAgICB7CisgICAgICAgIGlmICh0eXBlb2YgeCA9
PT0gJ2Z1bmN0aW9uJykKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKAor
ICAgICAgICAgICAgICAgICdUcnlpbmcgdG8gdXNlIGAoPT0pYCBvbiBmdW5jdGlvbnMuIFRoZXJl
IGlzIG5vIHdheSB0byBrbm93IGlmIGZ1bmN0aW9ucyBhcmUgInRoZSBzYW1lIiBpbiB0aGUgRWxt
IHNlbnNlLicKKyAgICAgICAgICAgICAgICArICcgUmVhZCBtb3JlIGFib3V0IHRoaXMgYXQgaHR0
cDovL3BhY2thZ2UuZWxtLWxhbmcub3JnL3BhY2thZ2VzL2VsbS1sYW5nL2NvcmUvbGF0ZXN0L0Jh
c2ljcyM9PScKKyAgICAgICAgICAgICAgICArICcgd2hpY2ggZGVzY3JpYmVzIHdoeSBpdCBpcyB0
aGlzIHdheSBhbmQgd2hhdCB0aGUgYmV0dGVyIHZlcnNpb24gd2lsbCBsb29rIGxpa2UuJworICAg
ICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKHggPT09IG51bGwgfHwgeSA9PT0gbnVsbCkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZQorICAgIH0KKworICAgIGlmICh4IGluc3RhbmNlb2YgRGF0ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiB4LmdldFRpbWUoKSA9PT0geS5nZXRUaW1lKCk7CisgICAgfQorCisgICAgaWYgKCEo
J2N0b3InIGluIHgpKQorICAgIHsKKyAgICAgICAgZm9yICh2YXIga2V5IGluIHgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmICghZXFIZWxwKHhba2V5XSwgeVtrZXldLCBkZXB0aCArIDEsIHN0
YWNrKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
Ly8gY29udmVydCBEaWN0cyBhbmQgU2V0cyB0byBsaXN0cworICAgIGlmICh4LmN0b3IgPT09ICdS
Qk5vZGVfZWxtX2J1aWx0aW4nIHx8IHguY3RvciA9PT0gJ1JCRW1wdHlfZWxtX2J1aWx0aW4nKQor
ICAgIHsKKyAgICAgICAgeCA9IF9lbG1fbGFuZyRjb3JlJERpY3QkdG9MaXN0KHgpOworICAgICAg
ICB5ID0gX2VsbV9sYW5nJGNvcmUkRGljdCR0b0xpc3QoeSk7CisgICAgfQorICAgIGlmICh4LmN0
b3IgPT09ICdTZXRfZWxtX2J1aWx0aW4nKQorICAgIHsKKyAgICAgICAgeCA9IF9lbG1fbGFuZyRj
b3JlJFNldCR0b0xpc3QoeCk7CisgICAgICAgIHkgPSBfZWxtX2xhbmckY29yZSRTZXQkdG9MaXN0
KHkpOworICAgIH0KKworICAgIC8vIGNoZWNrIGlmIGxpc3RzIGFyZSBlcXVhbCB3aXRob3V0IHJl
Y3Vyc2lvbgorICAgIGlmICh4LmN0b3IgPT09ICc6OicpCisgICAgeworICAgICAgICB2YXIgYSA9
IHg7CisgICAgICAgIHZhciBiID0geTsKKyAgICAgICAgd2hpbGUgKGEuY3RvciA9PT0gJzo6JyAm
JiBiLmN0b3IgPT09ICc6OicpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghZXFIZWxwKGEu
XzAsIGIuXzAsIGRlcHRoICsgMSwgc3RhY2spKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGEgPSBhLl8xOwor
ICAgICAgICAgICAgYiA9IGIuXzE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGEuY3RvciA9
PT0gYi5jdG9yOworICAgIH0KKworICAgIC8vIGNoZWNrIGlmIEFycmF5cyBhcmUgZXF1YWwKKyAg
ICBpZiAoeC5jdG9yID09PSAnX0FycmF5JykKKyAgICB7CisgICAgICAgIHZhciB4cyA9IF9lbG1f
bGFuZyRjb3JlJE5hdGl2ZV9BcnJheS50b0pTQXJyYXkoeCk7CisgICAgICAgIHZhciB5cyA9IF9l
bG1fbGFuZyRjb3JlJE5hdGl2ZV9BcnJheS50b0pTQXJyYXkoeSk7CisgICAgICAgIGlmICh4cy5s
ZW5ndGggIT09IHlzLmxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghZXFIZWxwKHhzW2ldLCB5c1tpXSwgZGVwdGgg
KyAxLCBzdGFjaykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGlmICghZXFIZWxwKHguY3RvciwgeS5jdG9yLCBkZXB0aCArIDEsIHN0YWNrKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBmb3IgKHZhciBrZXkgaW4g
eCkKKyAgICB7CisgICAgICAgIGlmICghZXFIZWxwKHhba2V5XSwgeVtrZXldLCBkZXB0aCArIDEs
IHN0YWNrKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCisvLyBDb2RlIGluIEdlbmVyYXRlL0phdmFT
Y3JpcHQuaHMsIEJhc2ljcy5qcywgYW5kIExpc3QuanMgZGVwZW5kcyBvbgorLy8gdGhlIHBhcnRp
Y3VsYXIgaW50ZWdlciB2YWx1ZXMgYXNzaWduZWQgdG8gTFQsIEVRLCBhbmQgR1QuCisKK3ZhciBM
VCA9IC0xLCBFUSA9IDAsIEdUID0gMTsKKworZnVuY3Rpb24gY21wKHgsIHkpCit7CisgICAgaWYg
KHR5cGVvZiB4ICE9PSAnb2JqZWN0JykKKyAgICB7CisgICAgICAgIHJldHVybiB4ID09PSB5ID8g
RVEgOiB4IDwgeSA/IExUIDogR1Q7CisgICAgfQorCisgICAgaWYgKHggaW5zdGFuY2VvZiBTdHJp
bmcpCisgICAgeworICAgICAgICB2YXIgYSA9IHgudmFsdWVPZigpOworICAgICAgICB2YXIgYiA9
IHkudmFsdWVPZigpOworICAgICAgICByZXR1cm4gYSA9PT0gYiA/IEVRIDogYSA8IGIgPyBMVCA6
IEdUOworICAgIH0KKworICAgIGlmICh4LmN0b3IgPT09ICc6OicgfHwgeC5jdG9yID09PSAnW10n
KQorICAgIHsKKyAgICAgICAgd2hpbGUgKHguY3RvciA9PT0gJzo6JyAmJiB5LmN0b3IgPT09ICc6
OicpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBvcmQgPSBjbXAoeC5fMCwgeS5fMCk7Cisg
ICAgICAgICAgICBpZiAob3JkICE9PSBFUSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gb3JkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgeCA9IHguXzE7CisgICAg
ICAgICAgICB5ID0geS5fMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geC5jdG9yID09PSB5
LmN0b3IgPyBFUSA6IHguY3RvciA9PT0gJ1tdJyA/IExUIDogR1Q7CisgICAgfQorCisgICAgaWYg
KHguY3Rvci5zbGljZSgwLCA2KSA9PT0gJ19UdXBsZScpCisgICAgeworICAgICAgICB2YXIgb3Jk
OworICAgICAgICB2YXIgbiA9IHguY3Rvci5zbGljZSg2KSAtIDA7CisgICAgICAgIHZhciBlcnIg
PSAnY2Fubm90IGNvbXBhcmUgdHVwbGVzIHdpdGggbW9yZSB0aGFuIDYgZWxlbWVudHMuJzsKKyAg
ICAgICAgaWYgKG4gPT09IDApIHJldHVybiBFUTsKKyAgICAgICAgaWYgKG4gPj0gMSkgeyBvcmQg
PSBjbXAoeC5fMCwgeS5fMCk7IGlmIChvcmQgIT09IEVRKSByZXR1cm4gb3JkOworICAgICAgICBp
ZiAobiA+PSAyKSB7IG9yZCA9IGNtcCh4Ll8xLCB5Ll8xKTsgaWYgKG9yZCAhPT0gRVEpIHJldHVy
biBvcmQ7CisgICAgICAgIGlmIChuID49IDMpIHsgb3JkID0gY21wKHguXzIsIHkuXzIpOyBpZiAo
b3JkICE9PSBFUSkgcmV0dXJuIG9yZDsKKyAgICAgICAgaWYgKG4gPj0gNCkgeyBvcmQgPSBjbXAo
eC5fMywgeS5fMyk7IGlmIChvcmQgIT09IEVRKSByZXR1cm4gb3JkOworICAgICAgICBpZiAobiA+
PSA1KSB7IG9yZCA9IGNtcCh4Ll80LCB5Ll80KTsgaWYgKG9yZCAhPT0gRVEpIHJldHVybiBvcmQ7
CisgICAgICAgIGlmIChuID49IDYpIHsgb3JkID0gY21wKHguXzUsIHkuXzUpOyBpZiAob3JkICE9
PSBFUSkgcmV0dXJuIG9yZDsKKyAgICAgICAgaWYgKG4gPj0gNykgdGhyb3cgbmV3IEVycm9yKCdD
b21wYXJpc29uIGVycm9yOiAnICsgZXJyKTsgfSB9IH0gfSB9IH0KKyAgICAgICAgcmV0dXJuIEVR
OworICAgIH0KKworICAgIHRocm93IG5ldyBFcnJvcigKKyAgICAgICAgJ0NvbXBhcmlzb24gZXJy
b3I6IGNvbXBhcmlzb24gaXMgb25seSBkZWZpbmVkIG9uIGludHMsICcKKyAgICAgICAgKyAnZmxv
YXRzLCB0aW1lcywgY2hhcnMsIHN0cmluZ3MsIGxpc3RzIG9mIGNvbXBhcmFibGUgdmFsdWVzLCAn
CisgICAgICAgICsgJ2FuZCB0dXBsZXMgb2YgY29tcGFyYWJsZSB2YWx1ZXMuJworICAgICk7Cit9
CisKKworLy8gQ09NTU9OIFZBTFVFUworCit2YXIgVHVwbGUwID0geworICAgIGN0b3I6ICdfVHVw
bGUwJworfTsKKworZnVuY3Rpb24gVHVwbGUyKHgsIHkpCit7CisgICAgcmV0dXJuIHsKKyAgICAg
ICAgY3RvcjogJ19UdXBsZTInLAorICAgICAgICBfMDogeCwKKyAgICAgICAgXzE6IHkKKyAgICB9
OworfQorCitmdW5jdGlvbiBjaHIoYykKK3sKKyAgICByZXR1cm4gbmV3IFN0cmluZyhjKTsKK30K
KworCisvLyBHVUlECisKK3ZhciBjb3VudCA9IDA7CitmdW5jdGlvbiBndWlkKF8pCit7CisgICAg
cmV0dXJuIGNvdW50Kys7Cit9CisKKworLy8gUkVDT1JEUworCitmdW5jdGlvbiB1cGRhdGUob2xk
UmVjb3JkLCB1cGRhdGVkRmllbGRzKQoreworICAgIHZhciBuZXdSZWNvcmQgPSB7fTsKKyAgICBm
b3IgKHZhciBrZXkgaW4gb2xkUmVjb3JkKQorICAgIHsKKyAgICAgICAgdmFyIHZhbHVlID0gKGtl
eSBpbiB1cGRhdGVkRmllbGRzKSA/IHVwZGF0ZWRGaWVsZHNba2V5XSA6IG9sZFJlY29yZFtrZXld
OworICAgICAgICBuZXdSZWNvcmRba2V5XSA9IHZhbHVlOworICAgIH0KKyAgICByZXR1cm4gbmV3
UmVjb3JkOworfQorCisKKy8vLy8gTElTVCBTVFVGRiAvLy8vCisKK3ZhciBOaWwgPSB7IGN0b3I6
ICdbXScgfTsKKworZnVuY3Rpb24gQ29ucyhoZCwgdGwpCit7CisgICAgcmV0dXJuIHsKKyAgICAg
ICAgY3RvcjogJzo6JywKKyAgICAgICAgXzA6IGhkLAorICAgICAgICBfMTogdGwKKyAgICB9Owor
fQorCitmdW5jdGlvbiBhcHBlbmQoeHMsIHlzKQoreworICAgIC8vIGFwcGVuZCBTdHJpbmdzCisg
ICAgaWYgKHR5cGVvZiB4cyA9PT0gJ3N0cmluZycpCisgICAgeworICAgICAgICByZXR1cm4geHMg
KyB5czsKKyAgICB9CisKKyAgICAvLyBhcHBlbmQgTGlzdHMKKyAgICBpZiAoeHMuY3RvciA9PT0g
J1tdJykKKyAgICB7CisgICAgICAgIHJldHVybiB5czsKKyAgICB9CisgICAgdmFyIHJvb3QgPSBD
b25zKHhzLl8wLCBOaWwpOworICAgIHZhciBjdXJyID0gcm9vdDsKKyAgICB4cyA9IHhzLl8xOwor
ICAgIHdoaWxlICh4cy5jdG9yICE9PSAnW10nKQorICAgIHsKKyAgICAgICAgY3Vyci5fMSA9IENv
bnMoeHMuXzAsIE5pbCk7CisgICAgICAgIHhzID0geHMuXzE7CisgICAgICAgIGN1cnIgPSBjdXJy
Ll8xOworICAgIH0KKyAgICBjdXJyLl8xID0geXM7CisgICAgcmV0dXJuIHJvb3Q7Cit9CisKKwor
Ly8gQ1JBU0hFUworCitmdW5jdGlvbiBjcmFzaChtb2R1bGVOYW1lLCByZWdpb24pCit7CisgICAg
cmV0dXJuIGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKAorICAg
ICAgICAgICAgJ1JhbiBpbnRvIGEgYERlYnVnLmNyYXNoYCBpbiBtb2R1bGUgYCcgKyBtb2R1bGVO
YW1lICsgJ2AgJyArIHJlZ2lvblRvU3RyaW5nKHJlZ2lvbikgKyAnXG4nCisgICAgICAgICAgICAr
ICdUaGUgbWVzc2FnZSBwcm92aWRlZCBieSB0aGUgY29kZSBhdXRob3IgaXM6XG5cbiAgICAnCisg
ICAgICAgICAgICArIG1lc3NhZ2UKKyAgICAgICAgKTsKKyAgICB9OworfQorCitmdW5jdGlvbiBj
cmFzaENhc2UobW9kdWxlTmFtZSwgcmVnaW9uLCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gZnVuY3Rp
b24obWVzc2FnZSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCisgICAgICAgICAgICAnUmFu
IGludG8gYSBgRGVidWcuY3Jhc2hgIGluIG1vZHVsZSBgJyArIG1vZHVsZU5hbWUgKyAnYFxuXG4n
CisgICAgICAgICAgICArICdUaGlzIHdhcyBjYXVzZWQgYnkgdGhlIGBjYXNlYCBleHByZXNzaW9u
ICcgKyByZWdpb25Ub1N0cmluZyhyZWdpb24pICsgJy5cbicKKyAgICAgICAgICAgICsgJ09uZSBv
ZiB0aGUgYnJhbmNoZXMgZW5kZWQgd2l0aCBhIGNyYXNoIGFuZCB0aGUgZm9sbG93aW5nIHZhbHVl
IGdvdCB0aHJvdWdoOlxuXG4gICAgJyArIHRvU3RyaW5nKHZhbHVlKSArICdcblxuJworICAgICAg
ICAgICAgKyAnVGhlIG1lc3NhZ2UgcHJvdmlkZWQgYnkgdGhlIGNvZGUgYXV0aG9yIGlzOlxuXG4g
ICAgJworICAgICAgICAgICAgKyBtZXNzYWdlCisgICAgICAgICk7CisgICAgfTsKK30KKworZnVu
Y3Rpb24gcmVnaW9uVG9TdHJpbmcocmVnaW9uKQoreworICAgIGlmIChyZWdpb24uc3RhcnQubGlu
ZSA9PSByZWdpb24uZW5kLmxpbmUpCisgICAgeworICAgICAgICByZXR1cm4gJ29uIGxpbmUgJyAr
IHJlZ2lvbi5zdGFydC5saW5lOworICAgIH0KKyAgICByZXR1cm4gJ2JldHdlZW4gbGluZXMgJyAr
IHJlZ2lvbi5zdGFydC5saW5lICsgJyBhbmQgJyArIHJlZ2lvbi5lbmQubGluZTsKK30KKworCisv
LyBUTyBTVFJJTkcKKworZnVuY3Rpb24gdG9TdHJpbmcodikKK3sKKyAgICB2YXIgdHlwZSA9IHR5
cGVvZiB2OworICAgIGlmICh0eXBlID09PSAnZnVuY3Rpb24nKQorICAgIHsKKyAgICAgICAgdmFy
IG5hbWUgPSB2LmZ1bmMgPyB2LmZ1bmMubmFtZSA6IHYubmFtZTsKKyAgICAgICAgcmV0dXJuICc8
ZnVuY3Rpb24nICsgKG5hbWUgPT09ICcnID8gJycgOiAnOicpICsgbmFtZSArICc+JzsKKyAgICB9
CisKKyAgICBpZiAodHlwZSA9PT0gJ2Jvb2xlYW4nKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHYg
PyAnVHJ1ZScgOiAnRmFsc2UnOworICAgIH0KKworICAgIGlmICh0eXBlID09PSAnbnVtYmVyJykK
KyAgICB7CisgICAgICAgIHJldHVybiB2ICsgJyc7CisgICAgfQorCisgICAgaWYgKHYgaW5zdGFu
Y2VvZiBTdHJpbmcpCisgICAgeworICAgICAgICByZXR1cm4gJ1wnJyArIGFkZFNsYXNoZXModiwg
dHJ1ZSkgKyAnXCcnOworICAgIH0KKworICAgIGlmICh0eXBlID09PSAnc3RyaW5nJykKKyAgICB7
CisgICAgICAgIHJldHVybiAnIicgKyBhZGRTbGFzaGVzKHYsIGZhbHNlKSArICciJzsKKyAgICB9
CisKKyAgICBpZiAodiA9PT0gbnVsbCkKKyAgICB7CisgICAgICAgIHJldHVybiAnbnVsbCc7Cisg
ICAgfQorCisgICAgaWYgKHR5cGUgPT09ICdvYmplY3QnICYmICdjdG9yJyBpbiB2KQorICAgIHsK
KyAgICAgICAgdmFyIGN0b3JTdGFydGVyID0gdi5jdG9yLnN1YnN0cmluZygwLCA1KTsKKworICAg
ICAgICBpZiAoY3RvclN0YXJ0ZXIgPT09ICdfVHVwbCcpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHZhciBvdXRwdXQgPSBbXTsKKyAgICAgICAgICAgIGZvciAodmFyIGsgaW4gdikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoayA9PT0gJ2N0b3InKSBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICBvdXRwdXQucHVzaCh0b1N0cmluZyh2W2tdKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gJygnICsgb3V0cHV0LmpvaW4oJywnKSArICcpJzsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChjdG9yU3RhcnRlciA9PT0gJ19UYXNrJykKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuICc8dGFzaz4nCisgICAgICAgIH0KKworICAgICAgICBpZiAodi5jdG9y
ID09PSAnX0FycmF5JykKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGxpc3QgPSBfZWxtX2xh
bmckY29yZSRBcnJheSR0b0xpc3Qodik7CisgICAgICAgICAgICByZXR1cm4gJ0FycmF5LmZyb21M
aXN0ICcgKyB0b1N0cmluZyhsaXN0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2LmN0b3Ig
PT09ICc8ZGVjb2Rlcj4nKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJzxkZWNvZGVy
Pic7CisgICAgICAgIH0KKworICAgICAgICBpZiAodi5jdG9yID09PSAnX1Byb2Nlc3MnKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gJzxwcm9jZXNzOicgKyB2LmlkICsgJz4nOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHYuY3RvciA9PT0gJzo6JykKKyAgICAgICAgeworICAgICAg
ICAgICAgdmFyIG91dHB1dCA9ICdbJyArIHRvU3RyaW5nKHYuXzApOworICAgICAgICAgICAgdiA9
IHYuXzE7CisgICAgICAgICAgICB3aGlsZSAodi5jdG9yID09PSAnOjonKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG91dHB1dCArPSAnLCcgKyB0b1N0cmluZyh2Ll8wKTsKKyAgICAg
ICAgICAgICAgICB2ID0gdi5fMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBv
dXRwdXQgKyAnXSc7CisgICAgICAgIH0KKworICAgICAgICBpZiAodi5jdG9yID09PSAnW10nKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJ1tdJzsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICh2LmN0b3IgPT09ICdTZXRfZWxtX2J1aWx0aW4nKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gJ1NldC5mcm9tTGlzdCAnICsgdG9TdHJpbmcoX2VsbV9sYW5nJGNvcmUkU2V0JHRv
TGlzdCh2KSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodi5jdG9yID09PSAnUkJOb2RlX2Vs
bV9idWlsdGluJyB8fCB2LmN0b3IgPT09ICdSQkVtcHR5X2VsbV9idWlsdGluJykKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuICdEaWN0LmZyb21MaXN0ICcgKyB0b1N0cmluZyhfZWxtX2xh
bmckY29yZSREaWN0JHRvTGlzdCh2KSk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgb3V0cHV0
ID0gJyc7CisgICAgICAgIGZvciAodmFyIGkgaW4gdikKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGkgPT09ICdjdG9yJykgY29udGludWU7CisgICAgICAgICAgICB2YXIgc3RyID0gdG9TdHJp
bmcodltpXSk7CisgICAgICAgICAgICB2YXIgYzAgPSBzdHJbMF07CisgICAgICAgICAgICB2YXIg
cGFyZW5sZXNzID0gYzAgPT09ICd7JyB8fCBjMCA9PT0gJygnIHx8IGMwID09PSAnPCcgfHwgYzAg
PT09ICciJyB8fCBzdHIuaW5kZXhPZignICcpIDwgMDsKKyAgICAgICAgICAgIG91dHB1dCArPSAn
ICcgKyAocGFyZW5sZXNzID8gc3RyIDogJygnICsgc3RyICsgJyknKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdi5jdG9yICsgb3V0cHV0OworICAgIH0KKworICAgIGlmICh0eXBlID09PSAn
b2JqZWN0JykKKyAgICB7CisgICAgICAgIGlmICh2IGluc3RhbmNlb2YgRGF0ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuICc8JyArIHYudG9TdHJpbmcoKSArICc+JzsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICh2LmVsbV93ZWJfc29ja2V0KQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gJzx3ZWJzb2NrZXQ+JzsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBvdXRwdXQg
PSBbXTsKKyAgICAgICAgZm9yICh2YXIgayBpbiB2KQorICAgICAgICB7CisgICAgICAgICAgICBv
dXRwdXQucHVzaChrICsgJyA9ICcgKyB0b1N0cmluZyh2W2tdKSk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKG91dHB1dC5sZW5ndGggPT09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biAne30nOworICAgICAgICB9CisgICAgICAgIHJldHVybiAneyAnICsgb3V0cHV0LmpvaW4oJywg
JykgKyAnIH0nOworICAgIH0KKworICAgIHJldHVybiAnPGludGVybmFsIHN0cnVjdHVyZT4nOwor
fQorCitmdW5jdGlvbiBhZGRTbGFzaGVzKHN0ciwgaXNDaGFyKQoreworICAgIHZhciBzID0gc3Ry
LnJlcGxhY2UoL1xcL2csICdcXFxcJykKKyAgICAgICAgICAgICAgLnJlcGxhY2UoL1xuL2csICdc
XG4nKQorICAgICAgICAgICAgICAucmVwbGFjZSgvXHQvZywgJ1xcdCcpCisgICAgICAgICAgICAg
IC5yZXBsYWNlKC9cci9nLCAnXFxyJykKKyAgICAgICAgICAgICAgLnJlcGxhY2UoL1x2L2csICdc
XHYnKQorICAgICAgICAgICAgICAucmVwbGFjZSgvXDAvZywgJ1xcMCcpOworICAgIGlmIChpc0No
YXIpCisgICAgeworICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC9cJy9nLCAnXFxcJycpOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC9cIi9nLCAnXFwi
Jyk7CisgICAgfQorfQorCisKK3JldHVybiB7CisgICAgZXE6IGVxLAorICAgIGNtcDogY21wLAor
ICAgIFR1cGxlMDogVHVwbGUwLAorICAgIFR1cGxlMjogVHVwbGUyLAorICAgIGNocjogY2hyLAor
ICAgIHVwZGF0ZTogdXBkYXRlLAorICAgIGd1aWQ6IGd1aWQsCisKKyAgICBhcHBlbmQ6IEYyKGFw
cGVuZCksCisKKyAgICBjcmFzaDogY3Jhc2gsCisgICAgY3Jhc2hDYXNlOiBjcmFzaENhc2UsCisK
KyAgICB0b1N0cmluZzogdG9TdHJpbmcKK307CisKK30oKTsKK3ZhciBfZWxtX2xhbmckY29yZSRC
YXNpY3MkdW5jdXJyeSA9IEYyKAorICAgIGZ1bmN0aW9uIChmLCBfcDApIHsKKyAgICAgICAgdmFy
IF9wMSA9IF9wMDsKKyAgICAgICAgcmV0dXJuIEEyKGYsIF9wMS5fMCwgX3AxLl8xKTsKKyAgICB9
KTsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3MkY3VycnkgPSBGMygKKyAgICBmdW5jdGlvbiAo
ZiwgYSwgYikgeworICAgICAgICByZXR1cm4gZigKKyAgICAgICAgICAgIHtjdG9yOiAnX1R1cGxl
MicsIF8wOiBhLCBfMTogYn0pOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRm
bGlwID0gRjMoCisgICAgZnVuY3Rpb24gKGYsIGIsIGEpIHsKKyAgICAgICAgcmV0dXJuIEEyKGYs
IGEsIGIpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRzbmQgPSBmdW5jdGlv
biAoX3AyKSB7CisgICAgdmFyIF9wMyA9IF9wMjsKKyAgICByZXR1cm4gX3AzLl8xOworfTsKK3Zh
ciBfZWxtX2xhbmckY29yZSRCYXNpY3MkZnN0ID0gZnVuY3Rpb24gKF9wNCkgeworICAgIHZhciBf
cDUgPSBfcDQ7CisgICAgcmV0dXJuIF9wNS5fMDsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFz
aWNzJGFsd2F5cyA9IEYyKAorICAgIGZ1bmN0aW9uIChhLCBfcDYpIHsKKyAgICAgICAgcmV0dXJu
IGE7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGlkZW50aXR5ID0gZnVuY3Rp
b24gKHgpIHsKKyAgICByZXR1cm4geDsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29w
cyA9IF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgfHwge307CitfZWxtX2xhbmckY29yZSRCYXNp
Y3Nfb3BzWyc8fCddID0gRjIoCisgICAgZnVuY3Rpb24gKGYsIHgpIHsKKyAgICAgICAgcmV0dXJu
IGYoeCk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wcyA9IF9lbG1fbGFu
ZyRjb3JlJEJhc2ljc19vcHMgfHwge307CitfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWyd8Pidd
ID0gRjIoCisgICAgZnVuY3Rpb24gKHgsIGYpIHsKKyAgICAgICAgcmV0dXJuIGYoeCk7CisgICAg
fSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wcyA9IF9lbG1fbGFuZyRjb3JlJEJhc2lj
c19vcHMgfHwge307CitfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWyc+PiddID0gRjMoCisgICAg
ZnVuY3Rpb24gKGYsIGcsIHgpIHsKKyAgICAgICAgcmV0dXJuIGcoCisgICAgICAgICAgICBmKHgp
KTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzID0gX2VsbV9sYW5nJGNv
cmUkQmFzaWNzX29wcyB8fCB7fTsKK19lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJzw8J10gPSBG
MygKKyAgICBmdW5jdGlvbiAoZywgZiwgeCkgeworICAgICAgICByZXR1cm4gZygKKyAgICAgICAg
ICAgIGYoeCkpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgPSBfZWxt
X2xhbmckY29yZSRCYXNpY3Nfb3BzIHx8IHt9OworX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1sn
KysnXSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5hcHBlbmQ7Cit2YXIgX2VsbV9sYW5n
JGNvcmUkQmFzaWNzJHRvU3RyaW5nID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLnRvU3Ry
aW5nOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRpc0luZmluaXRlID0gX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0Jhc2ljcy5pc0luZmluaXRlOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRp
c05hTiA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MuaXNOYU47Cit2YXIgX2VsbV9sYW5n
JGNvcmUkQmFzaWNzJHRvRmxvYXQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLnRvRmxv
YXQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGNlaWxpbmcgPSBfZWxtX2xhbmckY29yZSRO
YXRpdmVfQmFzaWNzLmNlaWxpbmc7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGZsb29yID0g
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5mbG9vcjsKK3ZhciBfZWxtX2xhbmckY29yZSRC
YXNpY3MkdHJ1bmNhdGUgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLnRydW5jYXRlOwor
dmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRyb3VuZCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9C
YXNpY3Mucm91bmQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJG5vdCA9IF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9CYXNpY3Mubm90OwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyR4b3IgPSBf
ZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLnhvcjsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNp
Y3Nfb3BzID0gX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wcyB8fCB7fTsKK19lbG1fbGFuZyRjb3Jl
JEJhc2ljc19vcHNbJ3x8J10gPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLm9yOwordmFy
IF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgPSBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzIHx8
IHt9OworX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snJiYnXSA9IF9lbG1fbGFuZyRjb3JlJE5h
dGl2ZV9CYXNpY3MuYW5kOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRtYXggPSBfZWxtX2xh
bmckY29yZSROYXRpdmVfQmFzaWNzLm1heDsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3MkbWlu
ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5taW47Cit2YXIgX2VsbV9sYW5nJGNvcmUk
QmFzaWNzJGNvbXBhcmUgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLmNvbXBhcmU7Cit2
YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wcyA9IF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMg
fHwge307CitfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWyc+PSddID0gX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX0Jhc2ljcy5nZTsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzID0gX2VsbV9s
YW5nJGNvcmUkQmFzaWNzX29wcyB8fCB7fTsKK19lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJzw9
J10gPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLmxlOwordmFyIF9lbG1fbGFuZyRjb3Jl
JEJhc2ljc19vcHMgPSBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzIHx8IHt9OworX2VsbV9sYW5n
JGNvcmUkQmFzaWNzX29wc1snPiddID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5ndDsK
K3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzID0gX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29w
cyB8fCB7fTsKK19lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJzwnXSA9IF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9CYXNpY3MubHQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wcyA9IF9lbG1f
bGFuZyRjb3JlJEJhc2ljc19vcHMgfHwge307CitfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycv
PSddID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5uZXE7Cit2YXIgX2VsbV9sYW5nJGNv
cmUkQmFzaWNzX29wcyA9IF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgfHwge307CitfZWxtX2xh
bmckY29yZSRCYXNpY3Nfb3BzWyc9PSddID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5l
cTsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3MkZSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9C
YXNpY3MuZTsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3MkcGkgPSBfZWxtX2xhbmckY29yZSRO
YXRpdmVfQmFzaWNzLnBpOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRjbGFtcCA9IF9lbG1f
bGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MuY2xhbXA7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNz
JGxvZ0Jhc2UgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLmxvZ0Jhc2U7Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkQmFzaWNzJGFicyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MuYWJz
OwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRuZWdhdGUgPSBfZWxtX2xhbmckY29yZSROYXRp
dmVfQmFzaWNzLm5lZ2F0ZTsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3Mkc3FydCA9IF9lbG1f
bGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3Muc3FydDsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3Mk
YXRhbjIgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLmF0YW4yOwordmFyIF9lbG1fbGFu
ZyRjb3JlJEJhc2ljcyRhdGFuID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5hdGFuOwor
dmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRhc2luID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jh
c2ljcy5hc2luOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRhY29zID0gX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0Jhc2ljcy5hY29zOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyR0YW4gPSBf
ZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLnRhbjsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNp
Y3Mkc2luID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5zaW47Cit2YXIgX2VsbV9sYW5n
JGNvcmUkQmFzaWNzJGNvcyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MuY29zOwordmFy
IF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgPSBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzIHx8
IHt9OworX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snXiddID0gX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX0Jhc2ljcy5leHA7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wcyA9IF9lbG1fbGFu
ZyRjb3JlJEJhc2ljc19vcHMgfHwge307CitfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWyclJ10g
PSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLm1vZDsKK3ZhciBfZWxtX2xhbmckY29yZSRC
YXNpY3MkcmVtID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5yZW07Cit2YXIgX2VsbV9s
YW5nJGNvcmUkQmFzaWNzX29wcyA9IF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgfHwge307Citf
ZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycvLyddID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jh
c2ljcy5kaXY7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wcyA9IF9lbG1fbGFuZyRjb3Jl
JEJhc2ljc19vcHMgfHwge307CitfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycvJ10gPSBfZWxt
X2xhbmckY29yZSROYXRpdmVfQmFzaWNzLmZsb2F0RGl2OwordmFyIF9lbG1fbGFuZyRjb3JlJEJh
c2ljc19vcHMgPSBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzIHx8IHt9OworX2VsbV9sYW5nJGNv
cmUkQmFzaWNzX29wc1snKiddID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5tdWw7Cit2
YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wcyA9IF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMg
fHwge307CitfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWyctJ10gPSBfZWxtX2xhbmckY29yZSRO
YXRpdmVfQmFzaWNzLnN1YjsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzID0gX2VsbV9s
YW5nJGNvcmUkQmFzaWNzX29wcyB8fCB7fTsKK19lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJysn
XSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MuYWRkOwordmFyIF9lbG1fbGFuZyRjb3Jl
JEJhc2ljcyR0b1BvbGFyID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy50b1BvbGFyOwor
dmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRmcm9tUG9sYXIgPSBfZWxtX2xhbmckY29yZSROYXRp
dmVfQmFzaWNzLmZyb21Qb2xhcjsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3MkdHVybnMgPSBf
ZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLnR1cm5zOwordmFyIF9lbG1fbGFuZyRjb3JlJEJh
c2ljcyRkZWdyZWVzID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5kZWdyZWVzOwordmFy
IF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRyYWRpYW5zID0gZnVuY3Rpb24gKHQpIHsKKyAgICByZXR1
cm4gdDsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJEdUID0ge2N0b3I6ICdHVCd9Owor
dmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRFUSA9IHtjdG9yOiAnRVEnfTsKK3ZhciBfZWxtX2xh
bmckY29yZSRCYXNpY3MkTFQgPSB7Y3RvcjogJ0xUJ307Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFz
aWNzJE5ldmVyID0gZnVuY3Rpb24gKGEpIHsKKyAgICByZXR1cm4ge2N0b3I6ICdOZXZlcicsIF8w
OiBhfTsKK307CisKKy8vaW1wb3J0IE5hdGl2ZS5VdGlscyAvLworCit2YXIgX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0RlYnVnID0gZnVuY3Rpb24oKSB7CisKK2Z1bmN0aW9uIGxvZyh0YWcsIHZhbHVl
KQoreworICAgIHZhciBtc2cgPSB0YWcgKyAnOiAnICsgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0
aWxzLnRvU3RyaW5nKHZhbHVlKTsKKyAgICB2YXIgcHJvY2VzcyA9IHByb2Nlc3MgfHwge307Cisg
ICAgaWYgKHByb2Nlc3Muc3Rkb3V0KQorICAgIHsKKyAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3Jp
dGUobXNnKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gY29uc29sZS5sb2co
bXNnKTsKKyAgICB9CisgICAgcmV0dXJuIHZhbHVlOworfQorCitmdW5jdGlvbiBjcmFzaChtZXNz
YWdlKQoreworICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTsKK30KKworcmV0dXJuIHsKKyAg
ICBjcmFzaDogY3Jhc2gsCisgICAgbG9nOiBGMihsb2cpCit9OworCit9KCk7Cit2YXIgX2VsbV9s
YW5nJGNvcmUkRGVidWckY3Jhc2ggPSBfZWxtX2xhbmckY29yZSROYXRpdmVfRGVidWcuY3Jhc2g7
Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGVidWckbG9nID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Rl
YnVnLmxvZzsKKwordmFyIF9lbG1fbGFuZyRjb3JlJE1heWJlJHdpdGhEZWZhdWx0ID0gRjIoCisg
ICAgZnVuY3Rpb24gKCRkZWZhdWx0LCBtYXliZSkgeworICAgICAgICB2YXIgX3AwID0gbWF5YmU7
CisgICAgICAgIGlmIChfcDAuY3RvciA9PT0gJ0p1c3QnKSB7CisgICAgICAgICAgICByZXR1cm4g
X3AwLl8wOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuICRkZWZhdWx0Owor
ICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90aGluZyA9IHtj
dG9yOiAnTm90aGluZyd9OwordmFyIF9lbG1fbGFuZyRjb3JlJE1heWJlJG9uZU9mID0gZnVuY3Rp
b24gKG1heWJlcykgeworICAgIG9uZU9mOgorICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIHZh
ciBfcDEgPSBtYXliZXM7CisgICAgICAgIGlmIChfcDEuY3RvciA9PT0gJ1tdJykgeworICAgICAg
ICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmc7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICB2YXIgX3AzID0gX3AxLl8wOworICAgICAgICAgICAgdmFyIF9wMiA9
IF9wMzsKKyAgICAgICAgICAgIGlmIChfcDIuY3RvciA9PT0gJ05vdGhpbmcnKSB7CisgICAgICAg
ICAgICAgICAgdmFyIF92MyA9IF9wMS5fMTsKKyAgICAgICAgICAgICAgICBtYXliZXMgPSBfdjM7
CisgICAgICAgICAgICAgICAgY29udGludWUgb25lT2Y7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIHJldHVybiBfcDM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJE1heWJlJGFuZFRoZW4gPSBGMigKKyAgICBmdW5j
dGlvbiAobWF5YmVWYWx1ZSwgY2FsbGJhY2spIHsKKyAgICAgICAgdmFyIF9wNCA9IG1heWJlVmFs
dWU7CisgICAgICAgIGlmIChfcDQuY3RvciA9PT0gJ0p1c3QnKSB7CisgICAgICAgICAgICByZXR1
cm4gY2FsbGJhY2soX3A0Ll8wKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVy
biBfZWxtX2xhbmckY29yZSRNYXliZSROb3RoaW5nOworICAgICAgICB9CisgICAgfSk7Cit2YXIg
X2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVzdCA9IGZ1bmN0aW9uIChhKSB7CisgICAgcmV0dXJuIHtj
dG9yOiAnSnVzdCcsIF8wOiBhfTsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkTWF5YmUkbWFwID0g
RjIoCisgICAgZnVuY3Rpb24gKGYsIG1heWJlKSB7CisgICAgICAgIHZhciBfcDUgPSBtYXliZTsK
KyAgICAgICAgaWYgKF9wNS5jdG9yID09PSAnSnVzdCcpIHsKKyAgICAgICAgICAgIHJldHVybiBf
ZWxtX2xhbmckY29yZSRNYXliZSRKdXN0KAorICAgICAgICAgICAgICAgIGYoX3A1Ll8wKSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTWF5YmUk
Tm90aGluZzsKKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJE1heWJlJG1h
cDIgPSBGMygKKyAgICBmdW5jdGlvbiAoZnVuYywgbWEsIG1iKSB7CisgICAgICAgIHZhciBfcDYg
PSB7Y3RvcjogJ19UdXBsZTInLCBfMDogbWEsIF8xOiBtYn07CisgICAgICAgIGlmICgoKF9wNi5j
dG9yID09PSAnX1R1cGxlMicpICYmIChfcDYuXzAuY3RvciA9PT0gJ0p1c3QnKSkgJiYgKF9wNi5f
MS5jdG9yID09PSAnSnVzdCcpKSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUk
TWF5YmUkSnVzdCgKKyAgICAgICAgICAgICAgICBBMihmdW5jLCBfcDYuXzAuXzAsIF9wNi5fMS5f
MCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3Jl
JE1heWJlJE5vdGhpbmc7CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRN
YXliZSRtYXAzID0gRjQoCisgICAgZnVuY3Rpb24gKGZ1bmMsIG1hLCBtYiwgbWMpIHsKKyAgICAg
ICAgdmFyIF9wNyA9IHtjdG9yOiAnX1R1cGxlMycsIF8wOiBtYSwgXzE6IG1iLCBfMjogbWN9Owor
ICAgICAgICBpZiAoKCgoX3A3LmN0b3IgPT09ICdfVHVwbGUzJykgJiYgKF9wNy5fMC5jdG9yID09
PSAnSnVzdCcpKSAmJiAoX3A3Ll8xLmN0b3IgPT09ICdKdXN0JykpICYmIChfcDcuXzIuY3RvciA9
PT0gJ0p1c3QnKSkgeworICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1heWJlJEp1
c3QoCisgICAgICAgICAgICAgICAgQTMoZnVuYywgX3A3Ll8wLl8wLCBfcDcuXzEuXzAsIF9wNy5f
Mi5fMCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRj
b3JlJE1heWJlJE5vdGhpbmc7CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29y
ZSRNYXliZSRtYXA0ID0gRjUoCisgICAgZnVuY3Rpb24gKGZ1bmMsIG1hLCBtYiwgbWMsIG1kKSB7
CisgICAgICAgIHZhciBfcDggPSB7Y3RvcjogJ19UdXBsZTQnLCBfMDogbWEsIF8xOiBtYiwgXzI6
IG1jLCBfMzogbWR9OworICAgICAgICBpZiAoKCgoKF9wOC5jdG9yID09PSAnX1R1cGxlNCcpICYm
IChfcDguXzAuY3RvciA9PT0gJ0p1c3QnKSkgJiYgKF9wOC5fMS5jdG9yID09PSAnSnVzdCcpKSAm
JiAoX3A4Ll8yLmN0b3IgPT09ICdKdXN0JykpICYmIChfcDguXzMuY3RvciA9PT0gJ0p1c3QnKSkg
eworICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1heWJlJEp1c3QoCisgICAgICAg
ICAgICAgICAgQTQoZnVuYywgX3A4Ll8wLl8wLCBfcDguXzEuXzAsIF9wOC5fMi5fMCwgX3A4Ll8z
Ll8wKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNv
cmUkTWF5YmUkTm90aGluZzsKKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3Jl
JE1heWJlJG1hcDUgPSBGNigKKyAgICBmdW5jdGlvbiAoZnVuYywgbWEsIG1iLCBtYywgbWQsIG1l
KSB7CisgICAgICAgIHZhciBfcDkgPSB7Y3RvcjogJ19UdXBsZTUnLCBfMDogbWEsIF8xOiBtYiwg
XzI6IG1jLCBfMzogbWQsIF80OiBtZX07CisgICAgICAgIGlmICgoKCgoKF9wOS5jdG9yID09PSAn
X1R1cGxlNScpICYmIChfcDkuXzAuY3RvciA9PT0gJ0p1c3QnKSkgJiYgKF9wOS5fMS5jdG9yID09
PSAnSnVzdCcpKSAmJiAoX3A5Ll8yLmN0b3IgPT09ICdKdXN0JykpICYmIChfcDkuXzMuY3RvciA9
PT0gJ0p1c3QnKSkgJiYgKF9wOS5fNC5jdG9yID09PSAnSnVzdCcpKSB7CisgICAgICAgICAgICBy
ZXR1cm4gX2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVzdCgKKyAgICAgICAgICAgICAgICBBNShmdW5j
LCBfcDkuXzAuXzAsIF9wOS5fMS5fMCwgX3A5Ll8yLl8wLCBfcDkuXzMuXzAsIF9wOS5fNC5fMCkp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1h
eWJlJE5vdGhpbmc7CisgICAgICAgIH0KKyAgICB9KTsKKworLy9pbXBvcnQgTmF0aXZlLlV0aWxz
IC8vCisKK3ZhciBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdCA9IGZ1bmN0aW9uKCkgeworCit2
YXIgTmlsID0geyBjdG9yOiAnW10nIH07CisKK2Z1bmN0aW9uIENvbnMoaGQsIHRsKQoreworICAg
IHJldHVybiB7IGN0b3I6ICc6OicsIF8wOiBoZCwgXzE6IHRsIH07Cit9CisKK2Z1bmN0aW9uIGZy
b21BcnJheShhcnIpCit7CisgICAgdmFyIG91dCA9IE5pbDsKKyAgICBmb3IgKHZhciBpID0gYXJy
Lmxlbmd0aDsgaS0tOyApCisgICAgeworICAgICAgICBvdXQgPSBDb25zKGFycltpXSwgb3V0KTsK
KyAgICB9CisgICAgcmV0dXJuIG91dDsKK30KKworZnVuY3Rpb24gdG9BcnJheSh4cykKK3sKKyAg
ICB2YXIgb3V0ID0gW107CisgICAgd2hpbGUgKHhzLmN0b3IgIT09ICdbXScpCisgICAgeworICAg
ICAgICBvdXQucHVzaCh4cy5fMCk7CisgICAgICAgIHhzID0geHMuXzE7CisgICAgfQorICAgIHJl
dHVybiBvdXQ7Cit9CisKKworZnVuY3Rpb24gcmFuZ2UobG8sIGhpKQoreworICAgIHZhciBsaXN0
ID0gTmlsOworICAgIGlmIChsbyA8PSBoaSkKKyAgICB7CisgICAgICAgIGRvCisgICAgICAgIHsK
KyAgICAgICAgICAgIGxpc3QgPSBDb25zKGhpLCBsaXN0KTsKKyAgICAgICAgfQorICAgICAgICB3
aGlsZSAoaGktLSA+IGxvKTsKKyAgICB9CisgICAgcmV0dXJuIGxpc3Q7Cit9CisKK2Z1bmN0aW9u
IGZvbGRyKGYsIGIsIHhzKQoreworICAgIHZhciBhcnIgPSB0b0FycmF5KHhzKTsKKyAgICB2YXIg
YWNjID0gYjsKKyAgICBmb3IgKHZhciBpID0gYXJyLmxlbmd0aDsgaS0tOyApCisgICAgeworICAg
ICAgICBhY2MgPSBBMihmLCBhcnJbaV0sIGFjYyk7CisgICAgfQorICAgIHJldHVybiBhY2M7Cit9
CisKK2Z1bmN0aW9uIG1hcDIoZiwgeHMsIHlzKQoreworICAgIHZhciBhcnIgPSBbXTsKKyAgICB3
aGlsZSAoeHMuY3RvciAhPT0gJ1tdJyAmJiB5cy5jdG9yICE9PSAnW10nKQorICAgIHsKKyAgICAg
ICAgYXJyLnB1c2goQTIoZiwgeHMuXzAsIHlzLl8wKSk7CisgICAgICAgIHhzID0geHMuXzE7Cisg
ICAgICAgIHlzID0geXMuXzE7CisgICAgfQorICAgIHJldHVybiBmcm9tQXJyYXkoYXJyKTsKK30K
KworZnVuY3Rpb24gbWFwMyhmLCB4cywgeXMsIHpzKQoreworICAgIHZhciBhcnIgPSBbXTsKKyAg
ICB3aGlsZSAoeHMuY3RvciAhPT0gJ1tdJyAmJiB5cy5jdG9yICE9PSAnW10nICYmIHpzLmN0b3Ig
IT09ICdbXScpCisgICAgeworICAgICAgICBhcnIucHVzaChBMyhmLCB4cy5fMCwgeXMuXzAsIHpz
Ll8wKSk7CisgICAgICAgIHhzID0geHMuXzE7CisgICAgICAgIHlzID0geXMuXzE7CisgICAgICAg
IHpzID0genMuXzE7CisgICAgfQorICAgIHJldHVybiBmcm9tQXJyYXkoYXJyKTsKK30KKworZnVu
Y3Rpb24gbWFwNChmLCB3cywgeHMsIHlzLCB6cykKK3sKKyAgICB2YXIgYXJyID0gW107CisgICAg
d2hpbGUgKCAgIHdzLmN0b3IgIT09ICdbXScKKyAgICAgICAgICAgJiYgeHMuY3RvciAhPT0gJ1td
JworICAgICAgICAgICAmJiB5cy5jdG9yICE9PSAnW10nCisgICAgICAgICAgICYmIHpzLmN0b3Ig
IT09ICdbXScpCisgICAgeworICAgICAgICBhcnIucHVzaChBNChmLCB3cy5fMCwgeHMuXzAsIHlz
Ll8wLCB6cy5fMCkpOworICAgICAgICB3cyA9IHdzLl8xOworICAgICAgICB4cyA9IHhzLl8xOwor
ICAgICAgICB5cyA9IHlzLl8xOworICAgICAgICB6cyA9IHpzLl8xOworICAgIH0KKyAgICByZXR1
cm4gZnJvbUFycmF5KGFycik7Cit9CisKK2Z1bmN0aW9uIG1hcDUoZiwgdnMsIHdzLCB4cywgeXMs
IHpzKQoreworICAgIHZhciBhcnIgPSBbXTsKKyAgICB3aGlsZSAoICAgdnMuY3RvciAhPT0gJ1td
JworICAgICAgICAgICAmJiB3cy5jdG9yICE9PSAnW10nCisgICAgICAgICAgICYmIHhzLmN0b3Ig
IT09ICdbXScKKyAgICAgICAgICAgJiYgeXMuY3RvciAhPT0gJ1tdJworICAgICAgICAgICAmJiB6
cy5jdG9yICE9PSAnW10nKQorICAgIHsKKyAgICAgICAgYXJyLnB1c2goQTUoZiwgdnMuXzAsIHdz
Ll8wLCB4cy5fMCwgeXMuXzAsIHpzLl8wKSk7CisgICAgICAgIHZzID0gdnMuXzE7CisgICAgICAg
IHdzID0gd3MuXzE7CisgICAgICAgIHhzID0geHMuXzE7CisgICAgICAgIHlzID0geXMuXzE7Cisg
ICAgICAgIHpzID0genMuXzE7CisgICAgfQorICAgIHJldHVybiBmcm9tQXJyYXkoYXJyKTsKK30K
KworZnVuY3Rpb24gc29ydEJ5KGYsIHhzKQoreworICAgIHJldHVybiBmcm9tQXJyYXkodG9BcnJh
eSh4cykuc29ydChmdW5jdGlvbihhLCBiKSB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29y
ZSROYXRpdmVfVXRpbHMuY21wKGYoYSksIGYoYikpOworICAgIH0pKTsKK30KKworZnVuY3Rpb24g
c29ydFdpdGgoZiwgeHMpCit7CisgICAgcmV0dXJuIGZyb21BcnJheSh0b0FycmF5KHhzKS5zb3J0
KGZ1bmN0aW9uKGEsIGIpIHsKKyAgICAgICAgdmFyIG9yZCA9IGYoYSkoYikuY3RvcjsKKyAgICAg
ICAgcmV0dXJuIG9yZCA9PT0gJ0VRJyA/IDAgOiBvcmQgPT09ICdMVCcgPyAtMSA6IDE7CisgICAg
fSkpOworfQorCityZXR1cm4geworICAgIE5pbDogTmlsLAorICAgIENvbnM6IENvbnMsCisgICAg
Y29uczogRjIoQ29ucyksCisgICAgdG9BcnJheTogdG9BcnJheSwKKyAgICBmcm9tQXJyYXk6IGZy
b21BcnJheSwKKyAgICByYW5nZTogcmFuZ2UsCisKKyAgICBmb2xkcjogRjMoZm9sZHIpLAorCisg
ICAgbWFwMjogRjMobWFwMiksCisgICAgbWFwMzogRjQobWFwMyksCisgICAgbWFwNDogRjUobWFw
NCksCisgICAgbWFwNTogRjYobWFwNSksCisgICAgc29ydEJ5OiBGMihzb3J0QnkpLAorICAgIHNv
cnRXaXRoOiBGMihzb3J0V2l0aCkKK307CisKK30oKTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0
JHNvcnRXaXRoID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3Quc29ydFdpdGg7Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkTGlzdCRzb3J0QnkgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5zb3J0
Qnk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCRzb3J0ID0gZnVuY3Rpb24gKHhzKSB7CisgICAg
cmV0dXJuIEEyKF9lbG1fbGFuZyRjb3JlJExpc3Qkc29ydEJ5LCBfZWxtX2xhbmckY29yZSRCYXNp
Y3MkaWRlbnRpdHksIHhzKTsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCRkcm9wID0gRjIo
CisgICAgZnVuY3Rpb24gKG4sIGxpc3QpIHsKKyAgICAgICAgZHJvcDoKKyAgICAgICAgd2hpbGUg
KHRydWUpIHsKKyAgICAgICAgICAgIGlmIChfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY21w
KG4sIDApIDwgMSkgeworICAgICAgICAgICAgICAgIHJldHVybiBsaXN0OworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgX3AwID0gbGlzdDsKKyAgICAgICAgICAgICAg
ICBpZiAoX3AwLmN0b3IgPT09ICdbXScpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxp
c3Q7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIF92
MSA9IG4gLSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgX3YyID0gX3AwLl8xOworICAgICAg
ICAgICAgICAgICAgICBuID0gX3YxOworICAgICAgICAgICAgICAgICAgICBsaXN0ID0gX3YyOwor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBkcm9wOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3Qk
bWFwNSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0Lm1hcDU7Cit2YXIgX2VsbV9sYW5nJGNv
cmUkTGlzdCRtYXA0ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QubWFwNDsKK3ZhciBfZWxt
X2xhbmckY29yZSRMaXN0JG1hcDMgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5tYXAzOwor
dmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkbWFwMiA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0
Lm1hcDI7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCRhbnkgPSBGMigKKyAgICBmdW5jdGlvbiAo
aXNPa2F5LCBsaXN0KSB7CisgICAgICAgIGFueToKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgICAgIHZhciBfcDEgPSBsaXN0OworICAgICAgICAgICAgaWYgKF9wMS5jdG9yID09PSAn
W10nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBpZiAoaXNPa2F5KF9wMS5fMCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIF92NCA9IGlzT2theSwKKyAgICAgICAgICAgICAgICAgICAgICAgIF92NSA9
IF9wMS5fMTsKKyAgICAgICAgICAgICAgICAgICAgaXNPa2F5ID0gX3Y0OworICAgICAgICAgICAg
ICAgICAgICBsaXN0ID0gX3Y1OworICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBhbnk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7Cit2YXIg
X2VsbV9sYW5nJGNvcmUkTGlzdCRhbGwgPSBGMigKKyAgICBmdW5jdGlvbiAoaXNPa2F5LCBsaXN0
KSB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRCYXNpY3Mkbm90KAorICAgICAgICAg
ICAgQTIoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRhbnksCisgICAgICAg
ICAgICAgICAgZnVuY3Rpb24gKF9wMikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2Vs
bV9sYW5nJGNvcmUkQmFzaWNzJG5vdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzT2theShf
cDIpKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIGxpc3QpKTsKKyAgICB9
KTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JGZvbGRyID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X0xpc3QuZm9sZHI7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCRmb2xkbCA9IEYzKAorICAgIGZ1
bmN0aW9uIChmdW5jLCBhY2MsIGxpc3QpIHsKKyAgICAgICAgZm9sZGw6CisgICAgICAgIHdoaWxl
ICh0cnVlKSB7CisgICAgICAgICAgICB2YXIgX3AzID0gbGlzdDsKKyAgICAgICAgICAgIGlmIChf
cDMuY3RvciA9PT0gJ1tdJykgeworICAgICAgICAgICAgICAgIHJldHVybiBhY2M7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBfdjcgPSBmdW5jLAorICAgICAgICAg
ICAgICAgICAgICBfdjggPSBBMihmdW5jLCBfcDMuXzAsIGFjYyksCisgICAgICAgICAgICAgICAg
ICAgIF92OSA9IF9wMy5fMTsKKyAgICAgICAgICAgICAgICBmdW5jID0gX3Y3OworICAgICAgICAg
ICAgICAgIGFjYyA9IF92ODsKKyAgICAgICAgICAgICAgICBsaXN0ID0gX3Y5OworICAgICAgICAg
ICAgICAgIGNvbnRpbnVlIGZvbGRsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7
Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCRsZW5ndGggPSBmdW5jdGlvbiAoeHMpIHsKKyAgICBy
ZXR1cm4gQTMoCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkZm9sZGwsCisgICAgICAgIEYy
KAorICAgICAgICAgICAgZnVuY3Rpb24gKF9wNCwgaSkgeworICAgICAgICAgICAgICAgIHJldHVy
biBpICsgMTsKKyAgICAgICAgICAgIH0pLAorICAgICAgICAwLAorICAgICAgICB4cyk7Cit9Owor
dmFyIF9lbG1fbGFuZyRjb3JlJExpc3Qkc3VtID0gZnVuY3Rpb24gKG51bWJlcnMpIHsKKyAgICBy
ZXR1cm4gQTMoCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkZm9sZGwsCisgICAgICAgIEYy
KAorICAgICAgICAgICAgZnVuY3Rpb24gKHgsIHkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
eCArIHk7CisgICAgICAgICAgICB9KSwKKyAgICAgICAgMCwKKyAgICAgICAgbnVtYmVycyk7Cit9
OwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkcHJvZHVjdCA9IGZ1bmN0aW9uIChudW1iZXJzKSB7
CisgICAgcmV0dXJuIEEzKAorICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JGZvbGRsLAorICAg
ICAgICBGMigKKyAgICAgICAgICAgIGZ1bmN0aW9uICh4LCB5KSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHggKiB5OworICAgICAgICAgICAgfSksCisgICAgICAgIDEsCisgICAgICAgIG51bWJl
cnMpOworfTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JG1heGltdW0gPSBmdW5jdGlvbiAobGlz
dCkgeworICAgIHZhciBfcDUgPSBsaXN0OworICAgIGlmIChfcDUuY3RvciA9PT0gJzo6Jykgewor
ICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVzdCgKKyAgICAgICAgICAgIEEz
KF9lbG1fbGFuZyRjb3JlJExpc3QkZm9sZGwsIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRtYXgsIF9w
NS5fMCwgX3A1Ll8xKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRj
b3JlJE1heWJlJE5vdGhpbmc7CisgICAgfQorfTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JG1p
bmltdW0gPSBmdW5jdGlvbiAobGlzdCkgeworICAgIHZhciBfcDYgPSBsaXN0OworICAgIGlmIChf
cDYuY3RvciA9PT0gJzo6JykgeworICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTWF5YmUk
SnVzdCgKKyAgICAgICAgICAgIEEzKF9lbG1fbGFuZyRjb3JlJExpc3QkZm9sZGwsIF9lbG1fbGFu
ZyRjb3JlJEJhc2ljcyRtaW4sIF9wNi5fMCwgX3A2Ll8xKSk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmc7CisgICAgfQorfTsKK3ZhciBf
ZWxtX2xhbmckY29yZSRMaXN0JGluZGV4ZWRNYXAgPSBGMigKKyAgICBmdW5jdGlvbiAoZiwgeHMp
IHsKKyAgICAgICAgcmV0dXJuIEEzKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRt
YXAyLAorICAgICAgICAgICAgZiwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9M
aXN0LnJhbmdlKAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkTGlzdCRsZW5ndGgoeHMpIC0gMSksCisgICAgICAgICAgICB4cyk7CisgICAgfSk7Cit2
YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCRtZW1iZXIgPSBGMigKKyAgICBmdW5jdGlvbiAoeCwgeHMp
IHsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRh
bnksCisgICAgICAgICAgICBmdW5jdGlvbiAoYSkgeworICAgICAgICAgICAgICAgIHJldHVybiBf
ZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuZXEoYSwgeCk7CisgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgeHMpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkaXNFbXB0eSA9
IGZ1bmN0aW9uICh4cykgeworICAgIHZhciBfcDcgPSB4czsKKyAgICBpZiAoX3A3LmN0b3IgPT09
ICdbXScpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCR0YWlsID0gZnVu
Y3Rpb24gKGxpc3QpIHsKKyAgICB2YXIgX3A4ID0gbGlzdDsKKyAgICBpZiAoX3A4LmN0b3IgPT09
ICc6OicpIHsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1heWJlJEp1c3QoX3A4Ll8x
KTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90
aGluZzsKKyAgICB9Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkaGVhZCA9IGZ1bmN0aW9u
IChsaXN0KSB7CisgICAgdmFyIF9wOSA9IGxpc3Q7CisgICAgaWYgKF9wOS5jdG9yID09PSAnOjon
KSB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0KF9wOS5fMCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmc7
CisgICAgfQorfTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0X29wcyA9IF9lbG1fbGFuZyRjb3Jl
JExpc3Rfb3BzIHx8IHt9OworX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10gPSBfZWxtX2xh
bmckY29yZSROYXRpdmVfTGlzdC5jb25zOwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkbWFwID0g
RjIoCisgICAgZnVuY3Rpb24gKGYsIHhzKSB7CisgICAgICAgIHJldHVybiBBMygKKyAgICAgICAg
ICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkZm9sZHIsCisgICAgICAgICAgICBGMigKKyAgICAgICAg
ICAgICAgICBmdW5jdGlvbiAoeCwgYWNjKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBB
MigKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6Oidd
LAorICAgICAgICAgICAgICAgICAgICAgICAgZih4KSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGFjYyk7CisgICAgICAgICAgICAgICAgfSksCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRO
YXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgW10pLAorICAgICAgICAgICAg
eHMpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkZmlsdGVyID0gRjIoCisgICAg
ZnVuY3Rpb24gKHByZWQsIHhzKSB7CisgICAgICAgIHZhciBjb25kaXRpb25hbENvbnMgPSBGMigK
KyAgICAgICAgICAgIGZ1bmN0aW9uICh4LCB4cyQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
cHJlZCh4KSA/IEEyKF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6OiddLCB4LCB4cyQpIDogeHMk
OworICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBBMygKKyAgICAgICAgICAgIF9lbG1f
bGFuZyRjb3JlJExpc3QkZm9sZHIsCisgICAgICAgICAgICBjb25kaXRpb25hbENvbnMsCisgICAg
ICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAg
ICAgICAgW10pLAorICAgICAgICAgICAgeHMpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3Jl
JExpc3QkbWF5YmVDb25zID0gRjMoCisgICAgZnVuY3Rpb24gKGYsIG14LCB4cykgeworICAgICAg
ICB2YXIgX3AxMCA9IGYobXgpOworICAgICAgICBpZiAoX3AxMC5jdG9yID09PSAnSnVzdCcpIHsK
KyAgICAgICAgICAgIHJldHVybiBBMihfZWxtX2xhbmckY29yZSRMaXN0X29wc1snOjonXSwgX3Ax
MC5fMCwgeHMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHhzOworICAg
ICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCRmaWx0ZXJNYXAgPSBGMigK
KyAgICBmdW5jdGlvbiAoZiwgeHMpIHsKKyAgICAgICAgcmV0dXJuIEEzKAorICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkTGlzdCRmb2xkciwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExp
c3QkbWF5YmVDb25zKGYpLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3Qu
ZnJvbUFycmF5KAorICAgICAgICAgICAgICAgIFtdKSwKKyAgICAgICAgICAgIHhzKTsKKyAgICB9
KTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JHJldmVyc2UgPSBmdW5jdGlvbiAobGlzdCkgewor
ICAgIHJldHVybiBBMygKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRmb2xkbCwKKyAgICAg
ICAgRjIoCisgICAgICAgICAgICBmdW5jdGlvbiAoeCwgeSkgeworICAgICAgICAgICAgICAgIHJl
dHVybiBBMihfZWxtX2xhbmckY29yZSRMaXN0X29wc1snOjonXSwgeCwgeSk7CisgICAgICAgICAg
ICB9KSwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAg
ICAgICAgICAgW10pLAorICAgICAgICBsaXN0KTsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlz
dCRzY2FubCA9IEYzKAorICAgIGZ1bmN0aW9uIChmLCBiLCB4cykgeworICAgICAgICB2YXIgc2Nh
bjEgPSBGMigKKyAgICAgICAgICAgIGZ1bmN0aW9uICh4LCBhY2NBY2MpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgX3AxMSA9IGFjY0FjYzsKKyAgICAgICAgICAgICAgICBpZiAoX3AxMS5jdG9yID09
PSAnOjonKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6OiddLAorICAgICAgICAgICAgICAg
ICAgICAgICAgQTIoZiwgeCwgX3AxMS5fMCksCisgICAgICAgICAgICAgICAgICAgICAgICBhY2NB
Y2MpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAg
ICAgICAgICBbXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAg
IHJldHVybiBfZWxtX2xhbmckY29yZSRMaXN0JHJldmVyc2UoCisgICAgICAgICAgICBBMygKKyAg
ICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JGZvbGRsLAorICAgICAgICAgICAgICAg
IHNjYW4xLAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21B
cnJheSgKKyAgICAgICAgICAgICAgICAgICAgW2JdKSwKKyAgICAgICAgICAgICAgICB4cykpOwor
ICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkYXBwZW5kID0gRjIoCisgICAgZnVuY3Rp
b24gKHhzLCB5cykgeworICAgICAgICB2YXIgX3AxMiA9IHlzOworICAgICAgICBpZiAoX3AxMi5j
dG9yID09PSAnW10nKSB7CisgICAgICAgICAgICByZXR1cm4geHM7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICByZXR1cm4gQTMoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUk
TGlzdCRmb2xkciwKKyAgICAgICAgICAgICAgICBGMigKKyAgICAgICAgICAgICAgICAgICAgZnVu
Y3Rpb24gKHgsIHkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMihfZWxtX2xh
bmckY29yZSRMaXN0X29wc1snOjonXSwgeCwgeSk7CisgICAgICAgICAgICAgICAgICAgIH0pLAor
ICAgICAgICAgICAgICAgIHlzLAorICAgICAgICAgICAgICAgIHhzKTsKKyAgICAgICAgfQorICAg
IH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkY29uY2F0ID0gZnVuY3Rpb24gKGxpc3RzKSB7
CisgICAgcmV0dXJuIEEzKAorICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JGZvbGRyLAorICAg
ICAgICBfZWxtX2xhbmckY29yZSRMaXN0JGFwcGVuZCwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgW10pLAorICAgICAgICBsaXN0cyk7
Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkY29uY2F0TWFwID0gRjIoCisgICAgZnVuY3Rp
b24gKGYsIGxpc3QpIHsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJExpc3QkY29uY2F0
KAorICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkTGlzdCRtYXAsIGYsIGxpc3QpKTsKKyAg
ICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JHBhcnRpdGlvbiA9IEYyKAorICAgIGZ1bmN0
aW9uIChwcmVkLCBsaXN0KSB7CisgICAgICAgIHZhciBzdGVwID0gRjIoCisgICAgICAgICAgICBm
dW5jdGlvbiAoeCwgX3AxMykgeworICAgICAgICAgICAgICAgIHZhciBfcDE0ID0gX3AxMzsKKyAg
ICAgICAgICAgICAgICB2YXIgX3AxNiA9IF9wMTQuXzA7CisgICAgICAgICAgICAgICAgdmFyIF9w
MTUgPSBfcDE0Ll8xOworICAgICAgICAgICAgICAgIHJldHVybiBwcmVkKHgpID8geworICAgICAg
ICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMicsCisgICAgICAgICAgICAgICAgICAgIF8wOiBB
MihfZWxtX2xhbmckY29yZSRMaXN0X29wc1snOjonXSwgeCwgX3AxNiksCisgICAgICAgICAgICAg
ICAgICAgIF8xOiBfcDE1CisgICAgICAgICAgICAgICAgfSA6IHsKKyAgICAgICAgICAgICAgICAg
ICAgY3RvcjogJ19UdXBsZTInLAorICAgICAgICAgICAgICAgICAgICBfMDogX3AxNiwKKyAgICAg
ICAgICAgICAgICAgICAgXzE6IEEyKF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6OiddLCB4LCBf
cDE1KQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJu
IEEzKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRmb2xkciwKKyAgICAgICAgICAg
IHN0ZXAsCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY3RvcjogJ19UdXBsZTInLAor
ICAgICAgICAgICAgICAgIF8wOiBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXko
CisgICAgICAgICAgICAgICAgICAgIFtdKSwKKyAgICAgICAgICAgICAgICBfMTogX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICBbXSkKKyAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICBsaXN0KTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmck
Y29yZSRMaXN0JHVuemlwID0gZnVuY3Rpb24gKHBhaXJzKSB7CisgICAgdmFyIHN0ZXAgPSBGMigK
KyAgICAgICAgZnVuY3Rpb24gKF9wMTgsIF9wMTcpIHsKKyAgICAgICAgICAgIHZhciBfcDE5ID0g
X3AxODsKKyAgICAgICAgICAgIHZhciBfcDIwID0gX3AxNzsKKyAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgY3RvcjogJ19UdXBsZTInLAorICAgICAgICAgICAgICAgIF8wOiBB
MihfZWxtX2xhbmckY29yZSRMaXN0X29wc1snOjonXSwgX3AxOS5fMCwgX3AyMC5fMCksCisgICAg
ICAgICAgICAgICAgXzE6IEEyKF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6OiddLCBfcDE5Ll8x
LCBfcDIwLl8xKQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuIEEzKAor
ICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JGZvbGRyLAorICAgICAgICBzdGVwLAorICAgICAg
ICB7CisgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMicsCisgICAgICAgICAgICBfMDogX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgIFtdKSwKKyAg
ICAgICAgICAgIF8xOiBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAg
ICAgICAgICAgICAgW10pCisgICAgICAgIH0sCisgICAgICAgIHBhaXJzKTsKK307Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkTGlzdCRpbnRlcnNwZXJzZSA9IEYyKAorICAgIGZ1bmN0aW9uIChzZXAsIHhz
KSB7CisgICAgICAgIHZhciBfcDIxID0geHM7CisgICAgICAgIGlmIChfcDIxLmN0b3IgPT09ICdb
XScpIHsKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9t
QXJyYXkoCisgICAgICAgICAgICAgICAgW10pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgdmFyIHN0ZXAgPSBGMigKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiAoeCwgcmVzdCkgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSRMaXN0X29wc1snOjonXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNl
cCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6
OiddLCB4LCByZXN0KSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB2YXIgc3Bl
cnNlZCA9IEEzKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkZm9sZHIsCisg
ICAgICAgICAgICAgICAgc3RlcCwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRp
dmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgIFtdKSwKKyAgICAgICAgICAg
ICAgICBfcDIxLl8xKTsKKyAgICAgICAgICAgIHJldHVybiBBMihfZWxtX2xhbmckY29yZSRMaXN0
X29wc1snOjonXSwgX3AyMS5fMCwgc3BlcnNlZCk7CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBf
ZWxtX2xhbmckY29yZSRMaXN0JHRha2VSZXZlcnNlID0gRjMoCisgICAgZnVuY3Rpb24gKG4sIGxp
c3QsIHRha2VuKSB7CisgICAgICAgIHRha2VSZXZlcnNlOgorICAgICAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICAgICAgaWYgKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jbXAobiwgMCkg
PCAxKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRha2VuOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICB2YXIgX3AyMiA9IGxpc3Q7CisgICAgICAgICAgICAgICAgaWYg
KF9wMjIuY3RvciA9PT0gJ1tdJykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFrZW47
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIF92MjMg
PSBuIC0gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIF92MjQgPSBfcDIyLl8xLAorICAgICAg
ICAgICAgICAgICAgICAgICAgX3YyNSA9IEEyKF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6Oidd
LCBfcDIyLl8wLCB0YWtlbik7CisgICAgICAgICAgICAgICAgICAgIG4gPSBfdjIzOworICAgICAg
ICAgICAgICAgICAgICBsaXN0ID0gX3YyNDsKKyAgICAgICAgICAgICAgICAgICAgdGFrZW4gPSBf
djI1OworICAgICAgICAgICAgICAgICAgICBjb250aW51ZSB0YWtlUmV2ZXJzZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2xh
bmckY29yZSRMaXN0JHRha2VUYWlsUmVjID0gRjIoCisgICAgZnVuY3Rpb24gKG4sIGxpc3QpIHsK
KyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJExpc3QkcmV2ZXJzZSgKKyAgICAgICAgICAg
IEEzKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkdGFrZVJldmVyc2UsCisg
ICAgICAgICAgICAgICAgbiwKKyAgICAgICAgICAgICAgICBsaXN0LAorICAgICAgICAgICAgICAg
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAg
ICAgW10pKSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCR0YWtlRmFzdCA9IEYz
KAorICAgIGZ1bmN0aW9uIChjdHIsIG4sIGxpc3QpIHsKKyAgICAgICAgaWYgKF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9VdGlscy5jbXAobiwgMCkgPCAxKSB7CisgICAgICAgICAgICByZXR1cm4gX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgIFtdKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBfcDIzID0ge2N0b3I6ICdfVHVwbGUy
JywgXzA6IG4sIF8xOiBsaXN0fTsKKyAgICAgICAgICAgIF92MjZfNToKKyAgICAgICAgICAgIGRv
IHsKKyAgICAgICAgICAgICAgICBfdjI2XzE6CisgICAgICAgICAgICAgICAgZG8geworICAgICAg
ICAgICAgICAgICAgICBpZiAoX3AyMy5jdG9yID09PSAnX1R1cGxlMicpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChfcDIzLl8xLmN0b3IgPT09ICdbXScpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbGlzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9wMjMuXzEuXzEuY3RvciA9PT0g
Jzo6JykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9wMjMuXzAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjI2XzE7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21B
cnJheSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW19wMjMu
XzEuXzAsIF9wMjMuXzEuXzEuXzBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
X3AyMy5fMS5fMS5fMS5jdG9yID09PSAnOjonKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9t
QXJyYXkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBb
X3AyMy5fMS5fMCwgX3AyMy5fMS5fMS5fMCwgX3AyMy5fMS5fMS5fMS5fMF0pOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MjZfNTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgoX3AyMy5fMS5fMS5fMS5jdG9yID09PSAnOjonKSAmJiAoX3AyMy5fMS5fMS5fMS5fMS5j
dG9yID09PSAnOjonKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgX3AyOCA9IF9wMjMuXzEuXzEuXzEuXzA7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBfcDI3ID0gX3AyMy5fMS5fMS5fMDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9wMjYgPSBfcDIzLl8xLl8w
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3AyNSA9
IF9wMjMuXzEuXzEuXzEuXzEuXzA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBfcDI0ID0gX3AyMy5fMS5fMS5fMS5fMS5fMTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChfZWxtX2xhbmckY29yZSROYXRp
dmVfVXRpbHMuY21wKGN0ciwgMTAwMCkgPiAwKSA/IEEyKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcDI2LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTIoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkTGlzdF9vcHNbJzo6J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX3AyNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9w
MjgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcDI1LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QTIoX2VsbV9sYW5nJGNvcmUkTGlzdCR0YWtlVGFpbFJlYywgbiAtIDQsIF9wMjQpKSkpKSA6IEEy
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9s
YW5nJGNvcmUkTGlzdF9vcHNbJzo6J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfcDI2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3AyNywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBMigKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkTGlzdF9vcHNbJzo6J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9wMjgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdF9v
cHNbJzo6J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfcDI1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQTMoX2VsbV9sYW5nJGNvcmUkTGlzdCR0YWtlRmFzdCwg
Y3RyICsgMSwgbiAtIDQsIF9wMjQpKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhayBfdjI2XzU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKF9wMjMuXzAgPT09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrIF92MjZfMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MjZfNTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MjZfNTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0gd2hpbGUoZmFsc2UpOworICAgICAgICAgICAgICAg
IHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAg
ICAgICAgICAgIFtfcDIzLl8xLl8wXSk7CisgICAgICAgICAgICB9IHdoaWxlKGZhbHNlKTsKKyAg
ICAgICAgICAgIHJldHVybiBsaXN0OworICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5n
JGNvcmUkTGlzdCR0YWtlID0gRjIoCisgICAgZnVuY3Rpb24gKG4sIGxpc3QpIHsKKyAgICAgICAg
cmV0dXJuIEEzKF9lbG1fbGFuZyRjb3JlJExpc3QkdGFrZUZhc3QsIDAsIG4sIGxpc3QpOworICAg
IH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkcmVwZWF0SGVscCA9IEYzKAorICAgIGZ1bmN0
aW9uIChyZXN1bHQsIG4sIHZhbHVlKSB7CisgICAgICAgIHJlcGVhdEhlbHA6CisgICAgICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICAgICAgICBpZiAoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxz
LmNtcChuLCAwKSA8IDEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgX3YyNyA9IEEyKF9lbG1fbGFuZyRj
b3JlJExpc3Rfb3BzWyc6OiddLCB2YWx1ZSwgcmVzdWx0KSwKKyAgICAgICAgICAgICAgICAgICAg
X3YyOCA9IG4gLSAxLAorICAgICAgICAgICAgICAgICAgICBfdjI5ID0gdmFsdWU7CisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gX3YyNzsKKyAgICAgICAgICAgICAgICBuID0gX3YyODsKKyAgICAg
ICAgICAgICAgICB2YWx1ZSA9IF92Mjk7CisgICAgICAgICAgICAgICAgY29udGludWUgcmVwZWF0
SGVscDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRj
b3JlJExpc3QkcmVwZWF0ID0gRjIoCisgICAgZnVuY3Rpb24gKG4sIHZhbHVlKSB7CisgICAgICAg
IHJldHVybiBBMygKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkcmVwZWF0SGVscCwK
KyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAg
ICAgICAgICAgICBbXSksCisgICAgICAgICAgICBuLAorICAgICAgICAgICAgdmFsdWUpOworICAg
IH0pOworCit2YXIgX2VsbV9sYW5nJGNvcmUkUmVzdWx0JHRvTWF5YmUgPSBmdW5jdGlvbiAocmVz
dWx0KSB7CisgICAgdmFyIF9wMCA9IHJlc3VsdDsKKyAgICBpZiAoX3AwLmN0b3IgPT09ICdPaycp
IHsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1heWJlJEp1c3QoX3AwLl8wKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90aGluZzsK
KyAgICB9Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCR3aXRoRGVmYXVsdCA9IEYyKAor
ICAgIGZ1bmN0aW9uIChkZWYsIHJlc3VsdCkgeworICAgICAgICB2YXIgX3AxID0gcmVzdWx0Owor
ICAgICAgICBpZiAoX3AxLmN0b3IgPT09ICdPaycpIHsKKyAgICAgICAgICAgIHJldHVybiBfcDEu
XzA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gZGVmOworICAgICAgICB9
CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkUmVzdWx0JEVyciA9IGZ1bmN0aW9uIChhKSB7
CisgICAgcmV0dXJuIHtjdG9yOiAnRXJyJywgXzA6IGF9OworfTsKK3ZhciBfZWxtX2xhbmckY29y
ZSRSZXN1bHQkYW5kVGhlbiA9IEYyKAorICAgIGZ1bmN0aW9uIChyZXN1bHQsIGNhbGxiYWNrKSB7
CisgICAgICAgIHZhciBfcDIgPSByZXN1bHQ7CisgICAgICAgIGlmIChfcDIuY3RvciA9PT0gJ09r
JykgeworICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKF9wMi5fMCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JEVycihfcDIuXzAp
OworICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkUmVzdWx0JE9rID0gZnVu
Y3Rpb24gKGEpIHsKKyAgICByZXR1cm4ge2N0b3I6ICdPaycsIF8wOiBhfTsKK307Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkUmVzdWx0JG1hcCA9IEYyKAorICAgIGZ1bmN0aW9uIChmdW5jLCByYSkgewor
ICAgICAgICB2YXIgX3AzID0gcmE7CisgICAgICAgIGlmIChfcDMuY3RvciA9PT0gJ09rJykgewor
ICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRPaygKKyAgICAgICAgICAg
ICAgICBmdW5jKF9wMy5fMCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJu
IF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRFcnIoX3AzLl8wKTsKKyAgICAgICAgfQorICAgIH0pOwor
dmFyIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRtYXAyID0gRjMoCisgICAgZnVuY3Rpb24gKGZ1bmMs
IHJhLCByYikgeworICAgICAgICB2YXIgX3A0ID0ge2N0b3I6ICdfVHVwbGUyJywgXzA6IHJhLCBf
MTogcmJ9OworICAgICAgICBpZiAoX3A0Ll8wLmN0b3IgPT09ICdPaycpIHsKKyAgICAgICAgICAg
IGlmIChfcDQuXzEuY3RvciA9PT0gJ09rJykgeworICAgICAgICAgICAgICAgIHJldHVybiBfZWxt
X2xhbmckY29yZSRSZXN1bHQkT2soCisgICAgICAgICAgICAgICAgICAgIEEyKGZ1bmMsIF9wNC5f
MC5fMCwgX3A0Ll8xLl8wKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1bHQkRXJyKF9wNC5fMS5fMCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUk
UmVzdWx0JEVycihfcDQuXzAuXzApOworICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5n
JGNvcmUkUmVzdWx0JG1hcDMgPSBGNCgKKyAgICBmdW5jdGlvbiAoZnVuYywgcmEsIHJiLCByYykg
eworICAgICAgICB2YXIgX3A1ID0ge2N0b3I6ICdfVHVwbGUzJywgXzA6IHJhLCBfMTogcmIsIF8y
OiByY307CisgICAgICAgIGlmIChfcDUuXzAuY3RvciA9PT0gJ09rJykgeworICAgICAgICAgICAg
aWYgKF9wNS5fMS5jdG9yID09PSAnT2snKSB7CisgICAgICAgICAgICAgICAgaWYgKF9wNS5fMi5j
dG9yID09PSAnT2snKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29y
ZSRSZXN1bHQkT2soCisgICAgICAgICAgICAgICAgICAgICAgICBBMyhmdW5jLCBfcDUuXzAuXzAs
IF9wNS5fMS5fMCwgX3A1Ll8yLl8wKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRFcnIoX3A1Ll8yLl8w
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1bHQkRXJyKF9wNS5fMS5fMCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNv
cmUkUmVzdWx0JEVycihfcDUuXzAuXzApOworICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9s
YW5nJGNvcmUkUmVzdWx0JG1hcDQgPSBGNSgKKyAgICBmdW5jdGlvbiAoZnVuYywgcmEsIHJiLCBy
YywgcmQpIHsKKyAgICAgICAgdmFyIF9wNiA9IHtjdG9yOiAnX1R1cGxlNCcsIF8wOiByYSwgXzE6
IHJiLCBfMjogcmMsIF8zOiByZH07CisgICAgICAgIGlmIChfcDYuXzAuY3RvciA9PT0gJ09rJykg
eworICAgICAgICAgICAgaWYgKF9wNi5fMS5jdG9yID09PSAnT2snKSB7CisgICAgICAgICAgICAg
ICAgaWYgKF9wNi5fMi5jdG9yID09PSAnT2snKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChf
cDYuXzMuY3RvciA9PT0gJ09rJykgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9l
bG1fbGFuZyRjb3JlJFJlc3VsdCRPaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBNChm
dW5jLCBfcDYuXzAuXzAsIF9wNi5fMS5fMCwgX3A2Ll8yLl8wLCBfcDYuXzMuXzApKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBf
ZWxtX2xhbmckY29yZSRSZXN1bHQkRXJyKF9wNi5fMy5fMCk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
X2VsbV9sYW5nJGNvcmUkUmVzdWx0JEVycihfcDYuXzIuXzApOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRj
b3JlJFJlc3VsdCRFcnIoX3A2Ll8xLl8wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1bHQkRXJyKF9wNi5fMC5f
MCk7CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRSZXN1bHQkbWFwNSA9
IEY2KAorICAgIGZ1bmN0aW9uIChmdW5jLCByYSwgcmIsIHJjLCByZCwgcmUpIHsKKyAgICAgICAg
dmFyIF9wNyA9IHtjdG9yOiAnX1R1cGxlNScsIF8wOiByYSwgXzE6IHJiLCBfMjogcmMsIF8zOiBy
ZCwgXzQ6IHJlfTsKKyAgICAgICAgaWYgKF9wNy5fMC5jdG9yID09PSAnT2snKSB7CisgICAgICAg
ICAgICBpZiAoX3A3Ll8xLmN0b3IgPT09ICdPaycpIHsKKyAgICAgICAgICAgICAgICBpZiAoX3A3
Ll8yLmN0b3IgPT09ICdPaycpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKF9wNy5fMy5jdG9y
ID09PSAnT2snKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3A3Ll80LmN0b3IgPT09
ICdPaycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNv
cmUkUmVzdWx0JE9rKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBNShmdW5jLCBf
cDcuXzAuXzAsIF9wNy5fMS5fMCwgX3A3Ll8yLl8wLCBfcDcuXzMuXzAsIF9wNy5fNC5fMCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JEVycihfcDcuXzQuXzApOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRFcnIoX3A3Ll8z
Ll8wKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1bHQkRXJyKF9wNy5f
Mi5fMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JEVycihfcDcuXzEuXzApOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFu
ZyRjb3JlJFJlc3VsdCRFcnIoX3A3Ll8wLl8wKTsKKyAgICAgICAgfQorICAgIH0pOwordmFyIF9l
bG1fbGFuZyRjb3JlJFJlc3VsdCRmb3JtYXRFcnJvciA9IEYyKAorICAgIGZ1bmN0aW9uIChmLCBy
ZXN1bHQpIHsKKyAgICAgICAgdmFyIF9wOCA9IHJlc3VsdDsKKyAgICAgICAgaWYgKF9wOC5jdG9y
ID09PSAnT2snKSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JE9r
KF9wOC5fMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5n
JGNvcmUkUmVzdWx0JEVycigKKyAgICAgICAgICAgICAgICBmKF9wOC5fMCkpOworICAgICAgICB9
CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkUmVzdWx0JGZyb21NYXliZSA9IEYyKAorICAg
IGZ1bmN0aW9uIChlcnIsIG1heWJlKSB7CisgICAgICAgIHZhciBfcDkgPSBtYXliZTsKKyAgICAg
ICAgaWYgKF9wOS5jdG9yID09PSAnSnVzdCcpIHsKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xh
bmckY29yZSRSZXN1bHQkT2soX3A5Ll8wKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1bHQkRXJyKGVycik7CisgICAgICAgIH0KKyAgICB9
KTsKKworLy9pbXBvcnQgLy8KKwordmFyIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9QbGF0Zm9ybSA9
IGZ1bmN0aW9uKCkgeworCisKKy8vIFBST0dSQU1TCisKK2Z1bmN0aW9uIGFkZFB1YmxpY01vZHVs
ZShvYmplY3QsIG5hbWUsIG1haW4pCit7CisgICAgdmFyIGluaXQgPSBtYWluID8gbWFrZUVtYmVk
KG5hbWUsIG1haW4pIDogbWFpbklzVW5kZWZpbmVkKG5hbWUpOworCisgICAgb2JqZWN0Wyd3b3Jr
ZXInXSA9IGZ1bmN0aW9uIHdvcmtlcihmbGFncykKKyAgICB7CisgICAgICAgIHJldHVybiBpbml0
KHVuZGVmaW5lZCwgZmxhZ3MsIGZhbHNlKTsKKyAgICB9CisKKyAgICBvYmplY3RbJ2VtYmVkJ10g
PSBmdW5jdGlvbiBlbWJlZChkb21Ob2RlLCBmbGFncykKKyAgICB7CisgICAgICAgIHJldHVybiBp
bml0KGRvbU5vZGUsIGZsYWdzLCB0cnVlKTsKKyAgICB9CisKKyAgICBvYmplY3RbJ2Z1bGxzY3Jl
ZW4nXSA9IGZ1bmN0aW9uIGZ1bGxzY3JlZW4oZmxhZ3MpCisgICAgeworICAgICAgICByZXR1cm4g
aW5pdChkb2N1bWVudC5ib2R5LCBmbGFncywgdHJ1ZSk7CisgICAgfTsKK30KKworCisvLyBQUk9H
UkFNIEZBSUwKKworZnVuY3Rpb24gbWFpbklzVW5kZWZpbmVkKG5hbWUpCit7CisgICAgcmV0dXJu
IGZ1bmN0aW9uKGRvbU5vZGUpCisgICAgeworICAgICAgICB2YXIgbWVzc2FnZSA9ICdDYW5ub3Qg
aW5pdGlhbGl6ZSBtb2R1bGUgYCcgKyBuYW1lICsKKyAgICAgICAgICAgICdgIGJlY2F1c2UgaXQg
aGFzIG5vIGBtYWluYCB2YWx1ZSFcbldoYXQgc2hvdWxkIEkgc2hvdyBvbiBzY3JlZW4/JzsKKyAg
ICAgICAgZG9tTm9kZS5pbm5lckhUTUwgPSBlcnJvckh0bWwobWVzc2FnZSk7CisgICAgICAgIHRo
cm93IG5ldyBFcnJvcihtZXNzYWdlKTsKKyAgICB9OworfQorCitmdW5jdGlvbiBlcnJvckh0bWwo
bWVzc2FnZSkKK3sKKyAgICByZXR1cm4gJzxkaXYgc3R5bGU9InBhZGRpbmctbGVmdDoxZW07Ij4n
CisgICAgICAgICsgJzxoMiBzdHlsZT0iZm9udC13ZWlnaHQ6bm9ybWFsOyI+PGI+T29wcyE8L2I+
IFNvbWV0aGluZyB3ZW50IHdyb25nIHdoZW4gc3RhcnRpbmcgeW91ciBFbG0gcHJvZ3JhbS48L2gy
PicKKyAgICAgICAgKyAnPHByZSBzdHlsZT0icGFkZGluZy1sZWZ0OjFlbTsiPicgKyBtZXNzYWdl
ICsgJzwvcHJlPicKKyAgICAgICAgKyAnPC9kaXY+JzsKK30KKworCisvLyBQUk9HUkFNIFNVQ0NF
U1MKKworZnVuY3Rpb24gbWFrZUVtYmVkKG1vZHVsZU5hbWUsIG1haW4pCit7CisgICAgcmV0dXJu
IGZ1bmN0aW9uIGVtYmVkKHJvb3REb21Ob2RlLCBmbGFncywgd2l0aFJlbmRlcmVyKQorICAgIHsK
KyAgICAgICAgdHJ5CisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBwcm9ncmFtID0gbWFpblRv
UHJvZ3JhbShtb2R1bGVOYW1lLCBtYWluKTsKKyAgICAgICAgICAgIGlmICghd2l0aFJlbmRlcmVy
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByb2dyYW0ucmVuZGVyZXIgPSBkdW1t
eVJlbmRlcmVyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG1ha2VFbWJlZEhl
bHAobW9kdWxlTmFtZSwgcHJvZ3JhbSwgcm9vdERvbU5vZGUsIGZsYWdzKTsKKyAgICAgICAgfQor
ICAgICAgICBjYXRjaCAoZSkKKyAgICAgICAgeworICAgICAgICAgICAgcm9vdERvbU5vZGUuaW5u
ZXJIVE1MID0gZXJyb3JIdG1sKGUubWVzc2FnZSk7CisgICAgICAgICAgICB0aHJvdyBlOworICAg
ICAgICB9CisgICAgfTsKK30KKworZnVuY3Rpb24gZHVtbXlSZW5kZXJlcigpCit7CisgICAgcmV0
dXJuIHsgdXBkYXRlOiBmdW5jdGlvbigpIHt9IH07Cit9CisKKworLy8gTUFJTiBUTyBQUk9HUkFN
CisKK2Z1bmN0aW9uIG1haW5Ub1Byb2dyYW0obW9kdWxlTmFtZSwgd3JhcHBlZE1haW4pCit7Cisg
ICAgdmFyIG1haW4gPSB3cmFwcGVkTWFpbi5tYWluOworCisgICAgaWYgKHR5cGVvZiBtYWluLmlu
aXQgPT09ICd1bmRlZmluZWQnKQorICAgIHsKKyAgICAgICAgdmFyIGVtcHR5QmFnID0gYmF0Y2go
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuTmlsKTsKKyAgICAgICAgdmFyIG5vQ2hhbmdlID0g
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLlR1cGxlMigKKyAgICAgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9VdGlscy5UdXBsZTAsCisgICAgICAgICAgICBlbXB0eUJhZworICAgICAg
ICApOworCisgICAgICAgIHJldHVybiBfZWxtX2xhbmckdmlydHVhbF9kb20kVmlydHVhbERvbSRw
cm9ncmFtV2l0aEZsYWdzKHsKKyAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4g
bm9DaGFuZ2U7IH0sCisgICAgICAgICAgICB2aWV3OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1haW47
IH0sCisgICAgICAgICAgICB1cGRhdGU6IEYyKGZ1bmN0aW9uKCkgeyByZXR1cm4gbm9DaGFuZ2U7
IH0pLAorICAgICAgICAgICAgc3Vic2NyaXB0aW9uczogZnVuY3Rpb24gKCkgeyByZXR1cm4gZW1w
dHlCYWc7IH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAgdmFyIGZsYWdzID0gd3JhcHBlZE1h
aW4uZmxhZ3M7CisgICAgdmFyIGluaXQgPSBmbGFncworICAgICAgICA/IGluaXRXaXRoRmxhZ3Mo
bW9kdWxlTmFtZSwgbWFpbi5pbml0LCBmbGFncykKKyAgICAgICAgOiBpbml0V2l0aG91dEZsYWdz
KG1vZHVsZU5hbWUsIG1haW4uaW5pdCk7CisKKyAgICByZXR1cm4gX2VsbV9sYW5nJHZpcnR1YWxf
ZG9tJFZpcnR1YWxEb20kcHJvZ3JhbVdpdGhGbGFncyh7CisgICAgICAgIGluaXQ6IGluaXQsCisg
ICAgICAgIHZpZXc6IG1haW4udmlldywKKyAgICAgICAgdXBkYXRlOiBtYWluLnVwZGF0ZSwKKyAg
ICAgICAgc3Vic2NyaXB0aW9uczogbWFpbi5zdWJzY3JpcHRpb25zLAorICAgIH0pOworfQorCitm
dW5jdGlvbiBpbml0V2l0aG91dEZsYWdzKG1vZHVsZU5hbWUsIHJlYWxJbml0KQoreworICAgIHJl
dHVybiBmdW5jdGlvbiBpbml0KGZsYWdzKQorICAgIHsKKyAgICAgICAgaWYgKHR5cGVvZiBmbGFn
cyAhPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJv
cigKKyAgICAgICAgICAgICAgICAnWW91IGFyZSBnaXZpbmcgbW9kdWxlIGAnICsgbW9kdWxlTmFt
ZSArICdgIGFuIGFyZ3VtZW50IGluIEphdmFTY3JpcHQuXG4nCisgICAgICAgICAgICAgICAgKyAn
VGhpcyBtb2R1bGUgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMgdGhvdWdoISBZb3UgcHJvYmFibHkg
bmVlZCB0byBjaGFuZ2UgdGhlXG4nCisgICAgICAgICAgICAgICAgKyAnaW5pdGlhbGl6YXRpb24g
Y29kZSB0byBzb21ldGhpbmcgbGlrZSBgRWxtLicgKyBtb2R1bGVOYW1lICsgJy5mdWxsc2NyZWVu
KClgJworICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVhbEluaXQo
KTsKKyAgICB9OworfQorCitmdW5jdGlvbiBpbml0V2l0aEZsYWdzKG1vZHVsZU5hbWUsIHJlYWxJ
bml0LCBmbGFnRGVjb2RlcikKK3sKKyAgICByZXR1cm4gZnVuY3Rpb24gaW5pdChmbGFncykKKyAg
ICB7CisgICAgICAgIHZhciByZXN1bHQgPSBBMihfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5y
dW4sIGZsYWdEZWNvZGVyLCBmbGFncyk7CisgICAgICAgIGlmIChyZXN1bHQuY3RvciA9PT0gJ0Vy
cicpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigKKyAgICAgICAgICAg
ICAgICAnWW91IGFyZSB0cnlpbmcgdG8gaW5pdGlhbGl6ZSBtb2R1bGUgYCcgKyBtb2R1bGVOYW1l
ICsgJ2Agd2l0aCBhbiB1bmV4cGVjdGVkIGFyZ3VtZW50LlxuJworICAgICAgICAgICAgICAgICsg
J1doZW4gdHJ5aW5nIHRvIGNvbnZlcnQgaXQgdG8gYSB1c2FibGUgRWxtIHZhbHVlLCBJIHJ1biBp
bnRvIHRoaXMgcHJvYmxlbTpcblxuJworICAgICAgICAgICAgICAgICsgcmVzdWx0Ll8wCisgICAg
ICAgICAgICApOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZWFsSW5pdChyZXN1bHQuXzAp
OworICAgIH07Cit9CisKKworLy8gU0VUVVAgUlVOVElNRSBTWVNURU0KKworZnVuY3Rpb24gbWFr
ZUVtYmVkSGVscChtb2R1bGVOYW1lLCBwcm9ncmFtLCByb290RG9tTm9kZSwgZmxhZ3MpCit7Cisg
ICAgdmFyIGluaXQgPSBwcm9ncmFtLmluaXQ7CisgICAgdmFyIHVwZGF0ZSA9IHByb2dyYW0udXBk
YXRlOworICAgIHZhciBzdWJzY3JpcHRpb25zID0gcHJvZ3JhbS5zdWJzY3JpcHRpb25zOworICAg
IHZhciB2aWV3ID0gcHJvZ3JhbS52aWV3OworICAgIHZhciBtYWtlUmVuZGVyZXIgPSBwcm9ncmFt
LnJlbmRlcmVyOworCisgICAgLy8gYW1iaWVudCBzdGF0ZQorICAgIHZhciBtYW5hZ2VycyA9IHt9
OworICAgIHZhciByZW5kZXJlcjsKKworICAgIC8vIGluaXQgYW5kIHVwZGF0ZSBzdGF0ZSBpbiBt
YWluIHByb2Nlc3MKKyAgICB2YXIgaW5pdEFwcCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hl
ZHVsZXIubmF0aXZlQmluZGluZyhmdW5jdGlvbihjYWxsYmFjaykgeworICAgICAgICB2YXIgcmVz
dWx0cyA9IGluaXQoZmxhZ3MpOworICAgICAgICB2YXIgbW9kZWwgPSByZXN1bHRzLl8wOworICAg
ICAgICByZW5kZXJlciA9IG1ha2VSZW5kZXJlcihyb290RG9tTm9kZSwgZW5xdWV1ZSwgdmlldyht
b2RlbCkpOworICAgICAgICB2YXIgY21kcyA9IHJlc3VsdHMuXzE7CisgICAgICAgIHZhciBzdWJz
ID0gc3Vic2NyaXB0aW9ucyhtb2RlbCk7CisgICAgICAgIGRpc3BhdGNoRWZmZWN0cyhtYW5hZ2Vy
cywgY21kcywgc3Vicyk7CisgICAgICAgIGNhbGxiYWNrKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9T
Y2hlZHVsZXIuc3VjY2VlZChtb2RlbCkpOworICAgIH0pOworCisgICAgZnVuY3Rpb24gb25NZXNz
YWdlKG1zZywgbW9kZWwpCisgICAgeworICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX1NjaGVkdWxlci5uYXRpdmVCaW5kaW5nKGZ1bmN0aW9uKGNhbGxiYWNrKSB7CisgICAgICAg
ICAgICB2YXIgcmVzdWx0cyA9IEEyKHVwZGF0ZSwgbXNnLCBtb2RlbCk7CisgICAgICAgICAgICBt
b2RlbCA9IHJlc3VsdHMuXzA7CisgICAgICAgICAgICByZW5kZXJlci51cGRhdGUodmlldyhtb2Rl
bCkpOworICAgICAgICAgICAgdmFyIGNtZHMgPSByZXN1bHRzLl8xOworICAgICAgICAgICAgdmFy
IHN1YnMgPSBzdWJzY3JpcHRpb25zKG1vZGVsKTsKKyAgICAgICAgICAgIGRpc3BhdGNoRWZmZWN0
cyhtYW5hZ2VycywgY21kcywgc3Vicyk7CisgICAgICAgICAgICBjYWxsYmFjayhfZWxtX2xhbmck
Y29yZSROYXRpdmVfU2NoZWR1bGVyLnN1Y2NlZWQobW9kZWwpKTsKKyAgICAgICAgfSk7CisgICAg
fQorCisgICAgdmFyIG1haW5Qcm9jZXNzID0gc3Bhd25Mb29wKGluaXRBcHAsIG9uTWVzc2FnZSk7
CisKKyAgICBmdW5jdGlvbiBlbnF1ZXVlKG1zZykKKyAgICB7CisgICAgICAgIF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9TY2hlZHVsZXIucmF3U2VuZChtYWluUHJvY2VzcywgbXNnKTsKKyAgICB9CisK
KyAgICB2YXIgcG9ydHMgPSBzZXR1cEVmZmVjdHMobWFuYWdlcnMsIGVucXVldWUpOworCisgICAg
cmV0dXJuIHBvcnRzID8geyBwb3J0czogcG9ydHMgfSA6IHt9OworfQorCisKKy8vIEVGRkVDVCBN
QU5BR0VSUworCit2YXIgZWZmZWN0TWFuYWdlcnMgPSB7fTsKKworZnVuY3Rpb24gc2V0dXBFZmZl
Y3RzKG1hbmFnZXJzLCBjYWxsYmFjaykKK3sKKyAgICB2YXIgcG9ydHM7CisKKyAgICAvLyBzZXR1
cCBhbGwgbmVjZXNzYXJ5IGVmZmVjdCBtYW5hZ2VycworICAgIGZvciAodmFyIGtleSBpbiBlZmZl
Y3RNYW5hZ2VycykKKyAgICB7CisgICAgICAgIHZhciBtYW5hZ2VyID0gZWZmZWN0TWFuYWdlcnNb
a2V5XTsKKworICAgICAgICBpZiAobWFuYWdlci5pc0ZvcmVpZ24pCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHBvcnRzID0gcG9ydHMgfHwge307CisgICAgICAgICAgICBwb3J0c1trZXldID0gbWFu
YWdlci50YWcgPT09ICdjbWQnCisgICAgICAgICAgICAgICAgPyBzZXR1cE91dGdvaW5nUG9ydChr
ZXkpCisgICAgICAgICAgICAgICAgOiBzZXR1cEluY29taW5nUG9ydChrZXksIGNhbGxiYWNrKTsK
KyAgICAgICAgfQorCisgICAgICAgIG1hbmFnZXJzW2tleV0gPSBtYWtlTWFuYWdlcihtYW5hZ2Vy
LCBjYWxsYmFjayk7CisgICAgfQorCisgICAgcmV0dXJuIHBvcnRzOworfQorCitmdW5jdGlvbiBt
YWtlTWFuYWdlcihpbmZvLCBjYWxsYmFjaykKK3sKKyAgICB2YXIgcm91dGVyID0geworICAgICAg
ICBtYWluOiBjYWxsYmFjaywKKyAgICAgICAgc2VsZjogdW5kZWZpbmVkCisgICAgfTsKKworICAg
IHZhciB0YWcgPSBpbmZvLnRhZzsKKyAgICB2YXIgb25FZmZlY3RzID0gaW5mby5vbkVmZmVjdHM7
CisgICAgdmFyIG9uU2VsZk1zZyA9IGluZm8ub25TZWxmTXNnOworCisgICAgZnVuY3Rpb24gb25N
ZXNzYWdlKG1zZywgc3RhdGUpCisgICAgeworICAgICAgICBpZiAobXNnLmN0b3IgPT09ICdzZWxm
JykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEEzKG9uU2VsZk1zZywgcm91dGVyLCBt
c2cuXzAsIHN0YXRlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBmeCA9IG1zZy5fMDsKKyAg
ICAgICAgc3dpdGNoICh0YWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgJ2NtZCc6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIEEzKG9uRWZmZWN0cywgcm91dGVyLCBmeC5jbWRzLCBzdGF0
ZSk7CisKKyAgICAgICAgICAgIGNhc2UgJ3N1Yic6CisgICAgICAgICAgICAgICAgcmV0dXJuIEEz
KG9uRWZmZWN0cywgcm91dGVyLCBmeC5zdWJzLCBzdGF0ZSk7CisKKyAgICAgICAgICAgIGNhc2Ug
J2Z4JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gQTQob25FZmZlY3RzLCByb3V0ZXIsIGZ4LmNt
ZHMsIGZ4LnN1YnMsIHN0YXRlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZhciBwcm9jZXNz
ID0gc3Bhd25Mb29wKGluZm8uaW5pdCwgb25NZXNzYWdlKTsKKyAgICByb3V0ZXIuc2VsZiA9IHBy
b2Nlc3M7CisgICAgcmV0dXJuIHByb2Nlc3M7Cit9CisKK2Z1bmN0aW9uIHNlbmRUb0FwcChyb3V0
ZXIsIG1zZykKK3sKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5u
YXRpdmVCaW5kaW5nKGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgcm91dGVyLm1h
aW4obXNnKTsKKyAgICAgICAgY2FsbGJhY2soX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxl
ci5zdWNjZWVkKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5UdXBsZTApKTsKKyAgICB9KTsK
K30KKworZnVuY3Rpb24gc2VuZFRvU2VsZihyb3V0ZXIsIG1zZykKK3sKKyAgICByZXR1cm4gQTIo
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5zZW5kLCByb3V0ZXIuc2VsZiwgeworICAg
ICAgICBjdG9yOiAnc2VsZicsCisgICAgICAgIF8wOiBtc2cKKyAgICB9KTsKK30KKworCisvLyBI
RUxQRVIgZm9yIFNUQVRFRlVMIExPT1BTCisKK2Z1bmN0aW9uIHNwYXduTG9vcChpbml0LCBvbk1l
c3NhZ2UpCit7CisgICAgdmFyIGFuZFRoZW4gPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1
bGVyLmFuZFRoZW47CisKKyAgICBmdW5jdGlvbiBsb29wKHN0YXRlKQorICAgIHsKKyAgICAgICAg
dmFyIGhhbmRsZU1zZyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIucmVjZWl2ZShm
dW5jdGlvbihtc2cpIHsKKyAgICAgICAgICAgIHJldHVybiBvbk1lc3NhZ2UobXNnLCBzdGF0ZSk7
CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gQTIoYW5kVGhlbiwgaGFuZGxlTXNnLCBsb29w
KTsKKyAgICB9CisKKyAgICB2YXIgdGFzayA9IEEyKGFuZFRoZW4sIGluaXQsIGxvb3ApOworCisg
ICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIucmF3U3Bhd24odGFzayk7
Cit9CisKKworLy8gQkFHUworCitmdW5jdGlvbiBsZWFmKGhvbWUpCit7CisgICAgcmV0dXJuIGZ1
bmN0aW9uKHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHR5cGU6
ICdsZWFmJywKKyAgICAgICAgICAgIGhvbWU6IGhvbWUsCisgICAgICAgICAgICB2YWx1ZTogdmFs
dWUKKyAgICAgICAgfTsKKyAgICB9OworfQorCitmdW5jdGlvbiBiYXRjaChsaXN0KQoreworICAg
IHJldHVybiB7CisgICAgICAgIHR5cGU6ICdub2RlJywKKyAgICAgICAgYnJhbmNoZXM6IGxpc3QK
KyAgICB9OworfQorCitmdW5jdGlvbiBtYXAodGFnZ2VyLCBiYWcpCit7CisgICAgcmV0dXJuIHsK
KyAgICAgICAgdHlwZTogJ21hcCcsCisgICAgICAgIHRhZ2dlcjogdGFnZ2VyLAorICAgICAgICB0
cmVlOiBiYWcKKyAgICB9Cit9CisKKworLy8gUElQRSBCQUdTIElOVE8gRUZGRUNUIE1BTkFHRVJT
CisKK2Z1bmN0aW9uIGRpc3BhdGNoRWZmZWN0cyhtYW5hZ2VycywgY21kQmFnLCBzdWJCYWcpCit7
CisgICAgdmFyIGVmZmVjdHNEaWN0ID0ge307CisgICAgZ2F0aGVyRWZmZWN0cyh0cnVlLCBjbWRC
YWcsIGVmZmVjdHNEaWN0LCBudWxsKTsKKyAgICBnYXRoZXJFZmZlY3RzKGZhbHNlLCBzdWJCYWcs
IGVmZmVjdHNEaWN0LCBudWxsKTsKKworICAgIGZvciAodmFyIGhvbWUgaW4gbWFuYWdlcnMpCisg
ICAgeworICAgICAgICB2YXIgZnggPSBob21lIGluIGVmZmVjdHNEaWN0CisgICAgICAgICAgICA/
IGVmZmVjdHNEaWN0W2hvbWVdCisgICAgICAgICAgICA6IHsKKyAgICAgICAgICAgICAgICBjbWRz
OiBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5OaWwsCisgICAgICAgICAgICAgICAgc3Viczog
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuTmlsCisgICAgICAgICAgICB9OworCisgICAgICAg
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIucmF3U2VuZChtYW5hZ2Vyc1tob21lXSwg
eyBjdG9yOiAnZngnLCBfMDogZnggfSk7CisgICAgfQorfQorCitmdW5jdGlvbiBnYXRoZXJFZmZl
Y3RzKGlzQ21kLCBiYWcsIGVmZmVjdHNEaWN0LCB0YWdnZXJzKQoreworICAgIHN3aXRjaCAoYmFn
LnR5cGUpCisgICAgeworICAgICAgICBjYXNlICdsZWFmJzoKKyAgICAgICAgICAgIHZhciBob21l
ID0gYmFnLmhvbWU7CisgICAgICAgICAgICB2YXIgZWZmZWN0ID0gdG9FZmZlY3QoaXNDbWQsIGhv
bWUsIHRhZ2dlcnMsIGJhZy52YWx1ZSk7CisgICAgICAgICAgICBlZmZlY3RzRGljdFtob21lXSA9
IGluc2VydChpc0NtZCwgZWZmZWN0LCBlZmZlY3RzRGljdFtob21lXSk7CisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgY2FzZSAnbm9kZSc6CisgICAgICAgICAgICB2YXIgbGlzdCA9IGJh
Zy5icmFuY2hlczsKKyAgICAgICAgICAgIHdoaWxlIChsaXN0LmN0b3IgIT09ICdbXScpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2F0aGVyRWZmZWN0cyhpc0NtZCwgbGlzdC5fMCwg
ZWZmZWN0c0RpY3QsIHRhZ2dlcnMpOworICAgICAgICAgICAgICAgIGxpc3QgPSBsaXN0Ll8xOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgJ21hcCc6
CisgICAgICAgICAgICBnYXRoZXJFZmZlY3RzKGlzQ21kLCBiYWcudHJlZSwgZWZmZWN0c0RpY3Qs
IHsKKyAgICAgICAgICAgICAgICB0YWdnZXI6IGJhZy50YWdnZXIsCisgICAgICAgICAgICAgICAg
cmVzdDogdGFnZ2VycworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
fQorfQorCitmdW5jdGlvbiB0b0VmZmVjdChpc0NtZCwgaG9tZSwgdGFnZ2VycywgdmFsdWUpCit7
CisgICAgZnVuY3Rpb24gYXBwbHlUYWdnZXJzKHgpCisgICAgeworICAgICAgICB2YXIgdGVtcCA9
IHRhZ2dlcnM7CisgICAgICAgIHdoaWxlICh0ZW1wKQorICAgICAgICB7CisgICAgICAgICAgICB4
ID0gdGVtcC50YWdnZXIoeCk7CisgICAgICAgICAgICB0ZW1wID0gdGVtcC5yZXN0OworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB4OworICAgIH0KKworICAgIHZhciBtYXAgPSBpc0NtZAorICAg
ICAgICA/IGVmZmVjdE1hbmFnZXJzW2hvbWVdLmNtZE1hcAorICAgICAgICA6IGVmZmVjdE1hbmFn
ZXJzW2hvbWVdLnN1Yk1hcDsKKworICAgIHJldHVybiBBMihtYXAsIGFwcGx5VGFnZ2VycywgdmFs
dWUpCit9CisKK2Z1bmN0aW9uIGluc2VydChpc0NtZCwgbmV3RWZmZWN0LCBlZmZlY3RzKQorewor
ICAgIGVmZmVjdHMgPSBlZmZlY3RzIHx8IHsKKyAgICAgICAgY21kczogX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX0xpc3QuTmlsLAorICAgICAgICBzdWJzOiBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlz
dC5OaWwKKyAgICB9OworICAgIGlmIChpc0NtZCkKKyAgICB7CisgICAgICAgIGVmZmVjdHMuY21k
cyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LkNvbnMobmV3RWZmZWN0LCBlZmZlY3RzLmNt
ZHMpOworICAgICAgICByZXR1cm4gZWZmZWN0czsKKyAgICB9CisgICAgZWZmZWN0cy5zdWJzID0g
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuQ29ucyhuZXdFZmZlY3QsIGVmZmVjdHMuc3Vicyk7
CisgICAgcmV0dXJuIGVmZmVjdHM7Cit9CisKKworLy8gUE9SVFMKKworZnVuY3Rpb24gY2hlY2tQ
b3J0TmFtZShuYW1lKQoreworICAgIGlmIChuYW1lIGluIGVmZmVjdE1hbmFnZXJzKQorICAgIHsK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBjYW4gb25seSBiZSBvbmUgcG9ydCBuYW1l
ZCBgJyArIG5hbWUgKyAnYCwgYnV0IHlvdXIgcHJvZ3JhbSBoYXMgbXVsdGlwbGUuJyk7CisgICAg
fQorfQorCisKKy8vIE9VVEdPSU5HIFBPUlRTCisKK2Z1bmN0aW9uIG91dGdvaW5nUG9ydChuYW1l
LCBjb252ZXJ0ZXIpCit7CisgICAgY2hlY2tQb3J0TmFtZShuYW1lKTsKKyAgICBlZmZlY3RNYW5h
Z2Vyc1tuYW1lXSA9IHsKKyAgICAgICAgdGFnOiAnY21kJywKKyAgICAgICAgY21kTWFwOiBvdXRn
b2luZ1BvcnRNYXAsCisgICAgICAgIGNvbnZlcnRlcjogY29udmVydGVyLAorICAgICAgICBpc0Zv
cmVpZ246IHRydWUKKyAgICB9OworICAgIHJldHVybiBsZWFmKG5hbWUpOworfQorCit2YXIgb3V0
Z29pbmdQb3J0TWFwID0gRjIoZnVuY3Rpb24gY21kTWFwKHRhZ2dlciwgdmFsdWUpIHsKKyAgICBy
ZXR1cm4gdmFsdWU7Cit9KTsKKworZnVuY3Rpb24gc2V0dXBPdXRnb2luZ1BvcnQobmFtZSkKK3sK
KyAgICB2YXIgc3VicyA9IFtdOworICAgIHZhciBjb252ZXJ0ZXIgPSBlZmZlY3RNYW5hZ2Vyc1tu
YW1lXS5jb252ZXJ0ZXI7CisKKyAgICAvLyBDUkVBVEUgTUFOQUdFUgorCisgICAgdmFyIGluaXQg
PSBfZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1bGVyLnN1Y2NlZWQobnVsbCk7CisKKyAgICBm
dW5jdGlvbiBvbkVmZmVjdHMocm91dGVyLCBjbWRMaXN0LCBzdGF0ZSkKKyAgICB7CisgICAgICAg
IHdoaWxlIChjbWRMaXN0LmN0b3IgIT09ICdbXScpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZh
ciB2YWx1ZSA9IGNvbnZlcnRlcihjbWRMaXN0Ll8wKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgc3Vicy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBzdWJzW2ldKHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNtZExpc3QgPSBj
bWRMaXN0Ll8xOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpbml0OworICAgIH0KKworICAg
IGVmZmVjdE1hbmFnZXJzW25hbWVdLmluaXQgPSBpbml0OworICAgIGVmZmVjdE1hbmFnZXJzW25h
bWVdLm9uRWZmZWN0cyA9IEYzKG9uRWZmZWN0cyk7CisKKyAgICAvLyBQVUJMSUMgQVBJCisKKyAg
ICBmdW5jdGlvbiBzdWJzY3JpYmUoY2FsbGJhY2spCisgICAgeworICAgICAgICBzdWJzLnB1c2go
Y2FsbGJhY2spOworICAgIH0KKworICAgIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKGNhbGxiYWNrKQor
ICAgIHsKKyAgICAgICAgdmFyIGluZGV4ID0gc3Vicy5pbmRleE9mKGNhbGxiYWNrKTsKKyAgICAg
ICAgaWYgKGluZGV4ID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHN1YnMuc3BsaWNlKGlu
ZGV4LCAxKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAgIHN1YnNj
cmliZTogc3Vic2NyaWJlLAorICAgICAgICB1bnN1YnNjcmliZTogdW5zdWJzY3JpYmUKKyAgICB9
OworfQorCisKKy8vIElOQ09NSU5HIFBPUlRTCisKK2Z1bmN0aW9uIGluY29taW5nUG9ydChuYW1l
LCBjb252ZXJ0ZXIpCit7CisgICAgY2hlY2tQb3J0TmFtZShuYW1lKTsKKyAgICBlZmZlY3RNYW5h
Z2Vyc1tuYW1lXSA9IHsKKyAgICAgICAgdGFnOiAnc3ViJywKKyAgICAgICAgc3ViTWFwOiBpbmNv
bWluZ1BvcnRNYXAsCisgICAgICAgIGNvbnZlcnRlcjogY29udmVydGVyLAorICAgICAgICBpc0Zv
cmVpZ246IHRydWUKKyAgICB9OworICAgIHJldHVybiBsZWFmKG5hbWUpOworfQorCit2YXIgaW5j
b21pbmdQb3J0TWFwID0gRjIoZnVuY3Rpb24gc3ViTWFwKHRhZ2dlciwgZmluYWxUYWdnZXIpCit7
CisgICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRhZ2dl
cihmaW5hbFRhZ2dlcih2YWx1ZSkpOworICAgIH07Cit9KTsKKworZnVuY3Rpb24gc2V0dXBJbmNv
bWluZ1BvcnQobmFtZSwgY2FsbGJhY2spCit7CisgICAgdmFyIHNlbnRCZWZvcmVJbml0ID0gW107
CisgICAgdmFyIHN1YnMgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5OaWw7CisgICAgdmFy
IGNvbnZlcnRlciA9IGVmZmVjdE1hbmFnZXJzW25hbWVdLmNvbnZlcnRlcjsKKyAgICB2YXIgY3Vy
cmVudE9uRWZmZWN0cyA9IHByZUluaXRPbkVmZmVjdHM7CisgICAgdmFyIGN1cnJlbnRTZW5kID0g
cHJlSW5pdFNlbmQ7CisKKyAgICAvLyBDUkVBVEUgTUFOQUdFUgorCisgICAgdmFyIGluaXQgPSBf
ZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1bGVyLnN1Y2NlZWQobnVsbCk7CisKKyAgICBmdW5j
dGlvbiBwcmVJbml0T25FZmZlY3RzKHJvdXRlciwgc3ViTGlzdCwgc3RhdGUpCisgICAgeworICAg
ICAgICB2YXIgcG9zdEluaXRSZXN1bHQgPSBwb3N0SW5pdE9uRWZmZWN0cyhyb3V0ZXIsIHN1Ykxp
c3QsIHN0YXRlKTsKKworICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2VudEJlZm9yZUluaXQu
bGVuZ3RoOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHBvc3RJbml0U2VuZChzZW50QmVm
b3JlSW5pdFtpXSk7CisgICAgICAgIH0KKworICAgICAgICBzZW50QmVmb3JlSW5pdCA9IG51bGw7
IC8vIHRvIHJlbGVhc2Ugb2JqZWN0cyBoZWxkIGluIHF1ZXVlCisgICAgICAgIGN1cnJlbnRTZW5k
ID0gcG9zdEluaXRTZW5kOworICAgICAgICBjdXJyZW50T25FZmZlY3RzID0gcG9zdEluaXRPbkVm
ZmVjdHM7CisgICAgICAgIHJldHVybiBwb3N0SW5pdFJlc3VsdDsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBwb3N0SW5pdE9uRWZmZWN0cyhyb3V0ZXIsIHN1Ykxpc3QsIHN0YXRlKQorICAgIHsKKyAg
ICAgICAgc3VicyA9IHN1Ykxpc3Q7CisgICAgICAgIHJldHVybiBpbml0OworICAgIH0KKworICAg
IGZ1bmN0aW9uIG9uRWZmZWN0cyhyb3V0ZXIsIHN1Ykxpc3QsIHN0YXRlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGN1cnJlbnRPbkVmZmVjdHMocm91dGVyLCBzdWJMaXN0LCBzdGF0ZSk7CisgICAg
fQorCisgICAgZWZmZWN0TWFuYWdlcnNbbmFtZV0uaW5pdCA9IGluaXQ7CisgICAgZWZmZWN0TWFu
YWdlcnNbbmFtZV0ub25FZmZlY3RzID0gRjMob25FZmZlY3RzKTsKKworICAgIC8vIFBVQkxJQyBB
UEkKKworICAgIGZ1bmN0aW9uIHByZUluaXRTZW5kKHZhbHVlKQorICAgIHsKKyAgICAgICAgc2Vu
dEJlZm9yZUluaXQucHVzaCh2YWx1ZSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcG9zdEluaXRT
ZW5kKGluY29taW5nVmFsdWUpCisgICAgeworICAgICAgICB2YXIgcmVzdWx0ID0gQTIoX2VsbV9s
YW5nJGNvcmUkSnNvbl9EZWNvZGUkZGVjb2RlVmFsdWUsIGNvbnZlcnRlciwgaW5jb21pbmdWYWx1
ZSk7CisgICAgICAgIGlmIChyZXN1bHQuY3RvciA9PT0gJ0VycicpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcignVHJ5aW5nIHRvIHNlbmQgYW4gdW5leHBlY3RlZCB0eXBl
IG9mIHZhbHVlIHRocm91Z2ggcG9ydCBgJyArIG5hbWUgKyAnYDpcbicgKyByZXN1bHQuXzApOwor
ICAgICAgICB9CisKKyAgICAgICAgdmFyIHZhbHVlID0gcmVzdWx0Ll8wOworICAgICAgICB2YXIg
dGVtcCA9IHN1YnM7CisgICAgICAgIHdoaWxlICh0ZW1wLmN0b3IgIT09ICdbXScpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNhbGxiYWNrKHRlbXAuXzAodmFsdWUpKTsKKyAgICAgICAgICAgIHRl
bXAgPSB0ZW1wLl8xOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gc2VuZChpbmNv
bWluZ1ZhbHVlKQorICAgIHsKKyAgICAgICAgY3VycmVudFNlbmQoaW5jb21pbmdWYWx1ZSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHsgc2VuZDogc2VuZCB9OworfQorCityZXR1cm4geworICAgIC8v
IHJvdXRlcnMKKyAgICBzZW5kVG9BcHA6IEYyKHNlbmRUb0FwcCksCisgICAgc2VuZFRvU2VsZjog
RjIoc2VuZFRvU2VsZiksCisKKyAgICAvLyBnbG9iYWwgc2V0dXAKKyAgICBtYWluVG9Qcm9ncmFt
OiBtYWluVG9Qcm9ncmFtLAorICAgIGVmZmVjdE1hbmFnZXJzOiBlZmZlY3RNYW5hZ2VycywKKyAg
ICBvdXRnb2luZ1BvcnQ6IG91dGdvaW5nUG9ydCwKKyAgICBpbmNvbWluZ1BvcnQ6IGluY29taW5n
UG9ydCwKKyAgICBhZGRQdWJsaWNNb2R1bGU6IGFkZFB1YmxpY01vZHVsZSwKKworICAgIC8vIGVm
ZmVjdCBiYWdzCisgICAgbGVhZjogbGVhZiwKKyAgICBiYXRjaDogYmF0Y2gsCisgICAgbWFwOiBG
MihtYXApCit9OworCit9KCk7CisKKy8vaW1wb3J0IE5hdGl2ZS5VdGlscyAvLworCit2YXIgX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlciA9IGZ1bmN0aW9uKCkgeworCit2YXIgTUFYX1NU
RVBTID0gMTAwMDA7CisKKworLy8gVEFTS1MKKworZnVuY3Rpb24gc3VjY2VlZCh2YWx1ZSkKK3sK
KyAgICByZXR1cm4geworICAgICAgICBjdG9yOiAnX1Rhc2tfc3VjY2VlZCcsCisgICAgICAgIHZh
bHVlOiB2YWx1ZQorICAgIH07Cit9CisKK2Z1bmN0aW9uIGZhaWwoZXJyb3IpCit7CisgICAgcmV0
dXJuIHsKKyAgICAgICAgY3RvcjogJ19UYXNrX2ZhaWwnLAorICAgICAgICB2YWx1ZTogZXJyb3IK
KyAgICB9OworfQorCitmdW5jdGlvbiBuYXRpdmVCaW5kaW5nKGNhbGxiYWNrKQoreworICAgIHJl
dHVybiB7CisgICAgICAgIGN0b3I6ICdfVGFza19uYXRpdmVCaW5kaW5nJywKKyAgICAgICAgY2Fs
bGJhY2s6IGNhbGxiYWNrLAorICAgICAgICBjYW5jZWw6IG51bGwKKyAgICB9OworfQorCitmdW5j
dGlvbiBhbmRUaGVuKHRhc2ssIGNhbGxiYWNrKQoreworICAgIHJldHVybiB7CisgICAgICAgIGN0
b3I6ICdfVGFza19hbmRUaGVuJywKKyAgICAgICAgdGFzazogdGFzaywKKyAgICAgICAgY2FsbGJh
Y2s6IGNhbGxiYWNrCisgICAgfTsKK30KKworZnVuY3Rpb24gb25FcnJvcih0YXNrLCBjYWxsYmFj
aykKK3sKKyAgICByZXR1cm4geworICAgICAgICBjdG9yOiAnX1Rhc2tfb25FcnJvcicsCisgICAg
ICAgIHRhc2s6IHRhc2ssCisgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjaworICAgIH07Cit9CisK
K2Z1bmN0aW9uIHJlY2VpdmUoY2FsbGJhY2spCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgY3Rv
cjogJ19UYXNrX3JlY2VpdmUnLAorICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sKKyAgICB9Owor
fQorCisKKy8vIFBST0NFU1NFUworCitmdW5jdGlvbiByYXdTcGF3bih0YXNrKQoreworICAgIHZh
ciBwcm9jZXNzID0geworICAgICAgICBjdG9yOiAnX1Byb2Nlc3MnLAorICAgICAgICBpZDogX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmd1aWQoKSwKKyAgICAgICAgcm9vdDogdGFzaywKKyAg
ICAgICAgc3RhY2s6IG51bGwsCisgICAgICAgIG1haWxib3g6IFtdCisgICAgfTsKKworICAgIGVu
cXVldWUocHJvY2Vzcyk7CisKKyAgICByZXR1cm4gcHJvY2VzczsKK30KKworZnVuY3Rpb24gc3Bh
d24odGFzaykKK3sKKyAgICByZXR1cm4gbmF0aXZlQmluZGluZyhmdW5jdGlvbihjYWxsYmFjaykg
eworICAgICAgICB2YXIgcHJvY2VzcyA9IHJhd1NwYXduKHRhc2spOworICAgICAgICBjYWxsYmFj
ayhzdWNjZWVkKHByb2Nlc3MpKTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gcmF3U2VuZChwcm9j
ZXNzLCBtc2cpCit7CisgICAgcHJvY2Vzcy5tYWlsYm94LnB1c2gobXNnKTsKKyAgICBlbnF1ZXVl
KHByb2Nlc3MpOworfQorCitmdW5jdGlvbiBzZW5kKHByb2Nlc3MsIG1zZykKK3sKKyAgICByZXR1
cm4gbmF0aXZlQmluZGluZyhmdW5jdGlvbihjYWxsYmFjaykgeworICAgICAgICByYXdTZW5kKHBy
b2Nlc3MsIG1zZyk7CisgICAgICAgIGNhbGxiYWNrKHN1Y2NlZWQoX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX1V0aWxzLlR1cGxlMCkpOworICAgIH0pOworfQorCitmdW5jdGlvbiBraWxsKHByb2Nlc3Mp
Cit7CisgICAgcmV0dXJuIG5hdGl2ZUJpbmRpbmcoZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgICAg
ICAgdmFyIHJvb3QgPSBwcm9jZXNzLnJvb3Q7CisgICAgICAgIGlmIChyb290LmN0b3IgPT09ICdf
VGFza19uYXRpdmVCaW5kaW5nJyAmJiByb290LmNhbmNlbCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcm9vdC5jYW5jZWwoKTsKKyAgICAgICAgfQorCisgICAgICAgIHByb2Nlc3Mucm9vdCA9IG51
bGw7CisKKyAgICAgICAgY2FsbGJhY2soc3VjY2VlZChfZWxtX2xhbmckY29yZSROYXRpdmVfVXRp
bHMuVHVwbGUwKSk7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHNsZWVwKHRpbWUpCit7CisgICAg
cmV0dXJuIG5hdGl2ZUJpbmRpbmcoZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgICAgICAgdmFyIGlk
ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKHN1Y2NlZWQo
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLlR1cGxlMCkpOworICAgICAgICB9LCB0aW1lKTsK
KworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7IGNsZWFyVGltZW91dChpZCk7IH07CisgICAg
fSk7Cit9CisKKworLy8gU1RFUCBQUk9DRVNTRVMKKworZnVuY3Rpb24gc3RlcChudW1TdGVwcywg
cHJvY2VzcykKK3sKKyAgICB3aGlsZSAobnVtU3RlcHMgPCBNQVhfU1RFUFMpCisgICAgeworICAg
ICAgICB2YXIgY3RvciA9IHByb2Nlc3Mucm9vdC5jdG9yOworCisgICAgICAgIGlmIChjdG9yID09
PSAnX1Rhc2tfc3VjY2VlZCcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChwcm9jZXNz
LnN0YWNrICYmIHByb2Nlc3Muc3RhY2suY3RvciA9PT0gJ19UYXNrX29uRXJyb3InKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHByb2Nlc3Muc3RhY2sgPSBwcm9jZXNzLnN0YWNrLnJl
c3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocHJvY2Vzcy5zdGFjayA9PT0gbnVs
bCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHByb2Nlc3Mucm9vdCA9IHByb2Nlc3Muc3RhY2suY2FsbGJhY2socHJvY2Vz
cy5yb290LnZhbHVlKTsKKyAgICAgICAgICAgIHByb2Nlc3Muc3RhY2sgPSBwcm9jZXNzLnN0YWNr
LnJlc3Q7CisgICAgICAgICAgICArK251bVN0ZXBzOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoY3RvciA9PT0gJ19UYXNrX2ZhaWwnKQorICAgICAgICB7
CisgICAgICAgICAgICB3aGlsZSAocHJvY2Vzcy5zdGFjayAmJiBwcm9jZXNzLnN0YWNrLmN0b3Ig
PT09ICdfVGFza19hbmRUaGVuJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcm9j
ZXNzLnN0YWNrID0gcHJvY2Vzcy5zdGFjay5yZXN0OworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKHByb2Nlc3Muc3RhY2sgPT09IG51bGwpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcm9jZXNzLnJvb3QgPSBw
cm9jZXNzLnN0YWNrLmNhbGxiYWNrKHByb2Nlc3Mucm9vdC52YWx1ZSk7CisgICAgICAgICAgICBw
cm9jZXNzLnN0YWNrID0gcHJvY2Vzcy5zdGFjay5yZXN0OworICAgICAgICAgICAgKytudW1TdGVw
czsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGN0b3Ig
PT09ICdfVGFza19hbmRUaGVuJykKKyAgICAgICAgeworICAgICAgICAgICAgcHJvY2Vzcy5zdGFj
ayA9IHsKKyAgICAgICAgICAgICAgICBjdG9yOiAnX1Rhc2tfYW5kVGhlbicsCisgICAgICAgICAg
ICAgICAgY2FsbGJhY2s6IHByb2Nlc3Mucm9vdC5jYWxsYmFjaywKKyAgICAgICAgICAgICAgICBy
ZXN0OiBwcm9jZXNzLnN0YWNrCisgICAgICAgICAgICB9OworICAgICAgICAgICAgcHJvY2Vzcy5y
b290ID0gcHJvY2Vzcy5yb290LnRhc2s7CisgICAgICAgICAgICArK251bVN0ZXBzOworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3RvciA9PT0gJ19UYXNr
X29uRXJyb3InKQorICAgICAgICB7CisgICAgICAgICAgICBwcm9jZXNzLnN0YWNrID0geworICAg
ICAgICAgICAgICAgIGN0b3I6ICdfVGFza19vbkVycm9yJywKKyAgICAgICAgICAgICAgICBjYWxs
YmFjazogcHJvY2Vzcy5yb290LmNhbGxiYWNrLAorICAgICAgICAgICAgICAgIHJlc3Q6IHByb2Nl
c3Muc3RhY2sKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBwcm9jZXNzLnJvb3QgPSBwcm9j
ZXNzLnJvb3QudGFzazsKKyAgICAgICAgICAgICsrbnVtU3RlcHM7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjdG9yID09PSAnX1Rhc2tfbmF0aXZlQmlu
ZGluZycpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByb2Nlc3Mucm9vdC5jYW5jZWwgPSBwcm9j
ZXNzLnJvb3QuY2FsbGJhY2soZnVuY3Rpb24obmV3Um9vdCkgeworICAgICAgICAgICAgICAgIHBy
b2Nlc3Mucm9vdCA9IG5ld1Jvb3Q7CisgICAgICAgICAgICAgICAgZW5xdWV1ZShwcm9jZXNzKTsK
KyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChjdG9yID09PSAnX1Rhc2tfcmVjZWl2ZScpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHZhciBtYWlsYm94ID0gcHJvY2Vzcy5tYWlsYm94OworICAgICAgICAgICAgaWYgKG1haWxib3gu
bGVuZ3RoID09PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBwcm9jZXNzLnJvb3QgPSBwcm9jZXNzLnJvb3QuY2Fs
bGJhY2sobWFpbGJveC5zaGlmdCgpKTsKKyAgICAgICAgICAgICsrbnVtU3RlcHM7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHRocm93IG5ldyBFcnJvcihjdG9y
KTsKKyAgICB9CisKKyAgICBpZiAobnVtU3RlcHMgPCBNQVhfU1RFUFMpCisgICAgeworICAgICAg
ICByZXR1cm4gbnVtU3RlcHMgKyAxOworICAgIH0KKyAgICBlbnF1ZXVlKHByb2Nlc3MpOworCisg
ICAgcmV0dXJuIG51bVN0ZXBzOworfQorCisKKy8vIFdPUksgUVVFVUUKKwordmFyIHdvcmtpbmcg
PSBmYWxzZTsKK3ZhciB3b3JrUXVldWUgPSBbXTsKKworZnVuY3Rpb24gZW5xdWV1ZShwcm9jZXNz
KQoreworICAgIHdvcmtRdWV1ZS5wdXNoKHByb2Nlc3MpOworCisgICAgaWYgKCF3b3JraW5nKQor
ICAgIHsKKyAgICAgICAgc2V0VGltZW91dCh3b3JrLCAwKTsKKyAgICAgICAgd29ya2luZyA9IHRy
dWU7CisgICAgfQorfQorCitmdW5jdGlvbiB3b3JrKCkKK3sKKyAgICB2YXIgbnVtU3RlcHMgPSAw
OworICAgIHZhciBwcm9jZXNzOworICAgIHdoaWxlIChudW1TdGVwcyA8IE1BWF9TVEVQUyAmJiAo
cHJvY2VzcyA9IHdvcmtRdWV1ZS5zaGlmdCgpKSkKKyAgICB7CisgICAgICAgIGlmIChwcm9jZXNz
LnJvb3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIG51bVN0ZXBzID0gc3RlcChudW1TdGVwcywg
cHJvY2Vzcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFwcm9jZXNzKQorICAgIHsKKyAg
ICAgICAgd29ya2luZyA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNldFRp
bWVvdXQod29yaywgMCk7Cit9CisKKworcmV0dXJuIHsKKyAgICBzdWNjZWVkOiBzdWNjZWVkLAor
ICAgIGZhaWw6IGZhaWwsCisgICAgbmF0aXZlQmluZGluZzogbmF0aXZlQmluZGluZywKKyAgICBh
bmRUaGVuOiBGMihhbmRUaGVuKSwKKyAgICBvbkVycm9yOiBGMihvbkVycm9yKSwKKyAgICByZWNl
aXZlOiByZWNlaXZlLAorCisgICAgc3Bhd246IHNwYXduLAorICAgIGtpbGw6IGtpbGwsCisgICAg
c2xlZXA6IHNsZWVwLAorICAgIHNlbmQ6IEYyKHNlbmQpLAorCisgICAgcmF3U3Bhd246IHJhd1Nw
YXduLAorICAgIHJhd1NlbmQ6IHJhd1NlbmQKK307CisKK30oKTsKK3ZhciBfZWxtX2xhbmckY29y
ZSRQbGF0Zm9ybSRoYWNrID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5zdWNjZWVk
OwordmFyIF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtJHNlbmRUb1NlbGYgPSBfZWxtX2xhbmckY29y
ZSROYXRpdmVfUGxhdGZvcm0uc2VuZFRvU2VsZjsKK3ZhciBfZWxtX2xhbmckY29yZSRQbGF0Zm9y
bSRzZW5kVG9BcHAgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfUGxhdGZvcm0uc2VuZFRvQXBwOwor
dmFyIF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtJFByb2dyYW0gPSB7Y3RvcjogJ1Byb2dyYW0nfTsK
K3ZhciBfZWxtX2xhbmckY29yZSRQbGF0Zm9ybSRUYXNrID0ge2N0b3I6ICdUYXNrJ307Cit2YXIg
X2VsbV9sYW5nJGNvcmUkUGxhdGZvcm0kUHJvY2Vzc0lkID0ge2N0b3I6ICdQcm9jZXNzSWQnfTsK
K3ZhciBfZWxtX2xhbmckY29yZSRQbGF0Zm9ybSRSb3V0ZXIgPSB7Y3RvcjogJ1JvdXRlcid9Owor
Cit2YXIgX2VsbV9sYW5nJGNvcmUkUGxhdGZvcm1fQ21kJGJhdGNoID0gX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX1BsYXRmb3JtLmJhdGNoOwordmFyIF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtX0NtZCRu
b25lID0gX2VsbV9sYW5nJGNvcmUkUGxhdGZvcm1fQ21kJGJhdGNoKAorICAgIF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgW10pKTsKK3ZhciBfZWxtX2xhbmck
Y29yZSRQbGF0Zm9ybV9DbWRfb3BzID0gX2VsbV9sYW5nJGNvcmUkUGxhdGZvcm1fQ21kX29wcyB8
fCB7fTsKK19lbG1fbGFuZyRjb3JlJFBsYXRmb3JtX0NtZF9vcHNbJyEnXSA9IEYyKAorICAgIGZ1
bmN0aW9uIChtb2RlbCwgY29tbWFuZHMpIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
IGN0b3I6ICdfVHVwbGUyJywKKyAgICAgICAgICAgIF8wOiBtb2RlbCwKKyAgICAgICAgICAgIF8x
OiBfZWxtX2xhbmckY29yZSRQbGF0Zm9ybV9DbWQkYmF0Y2goY29tbWFuZHMpCisgICAgICAgIH07
CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkUGxhdGZvcm1fQ21kJG1hcCA9IF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9QbGF0Zm9ybS5tYXA7Cit2YXIgX2VsbV9sYW5nJGNvcmUkUGxhdGZvcm1f
Q21kJENtZCA9IHtjdG9yOiAnQ21kJ307CisKK3ZhciBfZWxtX2xhbmckY29yZSRQbGF0Zm9ybV9T
dWIkYmF0Y2ggPSBfZWxtX2xhbmckY29yZSROYXRpdmVfUGxhdGZvcm0uYmF0Y2g7Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkUGxhdGZvcm1fU3ViJG5vbmUgPSBfZWxtX2xhbmckY29yZSRQbGF0Zm9ybV9T
dWIkYmF0Y2goCisgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAg
ICAgICBbXSkpOwordmFyIF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtX1N1YiRtYXAgPSBfZWxtX2xh
bmckY29yZSROYXRpdmVfUGxhdGZvcm0ubWFwOwordmFyIF9lbG1fbGFuZyRjb3JlJFBsYXRmb3Jt
X1N1YiRTdWIgPSB7Y3RvcjogJ1N1Yid9OworCisvL2ltcG9ydCBNYXliZSwgTmF0aXZlLkxpc3Qs
IE5hdGl2ZS5VdGlscywgUmVzdWx0IC8vCisKK3ZhciBfZWxtX2xhbmckY29yZSROYXRpdmVfU3Ry
aW5nID0gZnVuY3Rpb24oKSB7CisKK2Z1bmN0aW9uIGlzRW1wdHkoc3RyKQoreworICAgIHJldHVy
biBzdHIubGVuZ3RoID09PSAwOworfQorZnVuY3Rpb24gY29ucyhjaHIsIHN0cikKK3sKKyAgICBy
ZXR1cm4gY2hyICsgc3RyOworfQorZnVuY3Rpb24gdW5jb25zKHN0cikKK3sKKyAgICB2YXIgaGQg
PSBzdHJbMF07CisgICAgaWYgKGhkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRj
b3JlJE1heWJlJEp1c3QoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLlR1cGxlMihfZWxtX2xh
bmckY29yZSROYXRpdmVfVXRpbHMuY2hyKGhkKSwgc3RyLnNsaWNlKDEpKSk7CisgICAgfQorICAg
IHJldHVybiBfZWxtX2xhbmckY29yZSRNYXliZSROb3RoaW5nOworfQorZnVuY3Rpb24gYXBwZW5k
KGEsIGIpCit7CisgICAgcmV0dXJuIGEgKyBiOworfQorZnVuY3Rpb24gY29uY2F0KHN0cnMpCit7
CisgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LnRvQXJyYXkoc3Rycykuam9p
bignJyk7Cit9CitmdW5jdGlvbiBsZW5ndGgoc3RyKQoreworICAgIHJldHVybiBzdHIubGVuZ3Ro
OworfQorZnVuY3Rpb24gbWFwKGYsIHN0cikKK3sKKyAgICB2YXIgb3V0ID0gc3RyLnNwbGl0KCcn
KTsKKyAgICBmb3IgKHZhciBpID0gb3V0Lmxlbmd0aDsgaS0tOyApCisgICAgeworICAgICAgICBv
dXRbaV0gPSBmKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jaHIob3V0W2ldKSk7CisgICAg
fQorICAgIHJldHVybiBvdXQuam9pbignJyk7Cit9CitmdW5jdGlvbiBmaWx0ZXIocHJlZCwgc3Ry
KQoreworICAgIHJldHVybiBzdHIuc3BsaXQoJycpLm1hcChfZWxtX2xhbmckY29yZSROYXRpdmVf
VXRpbHMuY2hyKS5maWx0ZXIocHJlZCkuam9pbignJyk7Cit9CitmdW5jdGlvbiByZXZlcnNlKHN0
cikKK3sKKyAgICByZXR1cm4gc3RyLnNwbGl0KCcnKS5yZXZlcnNlKCkuam9pbignJyk7Cit9Citm
dW5jdGlvbiBmb2xkbChmLCBiLCBzdHIpCit7CisgICAgdmFyIGxlbiA9IHN0ci5sZW5ndGg7Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkKKyAgICB7CisgICAgICAgIGIgPSBBMihm
LCBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY2hyKHN0cltpXSksIGIpOworICAgIH0KKyAg
ICByZXR1cm4gYjsKK30KK2Z1bmN0aW9uIGZvbGRyKGYsIGIsIHN0cikKK3sKKyAgICBmb3IgKHZh
ciBpID0gc3RyLmxlbmd0aDsgaS0tOyApCisgICAgeworICAgICAgICBiID0gQTIoZiwgX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNocihzdHJbaV0pLCBiKTsKKyAgICB9CisgICAgcmV0dXJu
IGI7Cit9CitmdW5jdGlvbiBzcGxpdChzZXAsIHN0cikKK3sKKyAgICByZXR1cm4gX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KHN0ci5zcGxpdChzZXApKTsKK30KK2Z1bmN0aW9u
IGpvaW4oc2VwLCBzdHJzKQoreworICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlz
dC50b0FycmF5KHN0cnMpLmpvaW4oc2VwKTsKK30KK2Z1bmN0aW9uIHJlcGVhdChuLCBzdHIpCit7
CisgICAgdmFyIHJlc3VsdCA9ICcnOworICAgIHdoaWxlIChuID4gMCkKKyAgICB7CisgICAgICAg
IGlmIChuICYgMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ICs9IHN0cjsKKyAgICAg
ICAgfQorICAgICAgICBuID4+PSAxLCBzdHIgKz0gc3RyOworICAgIH0KKyAgICByZXR1cm4gcmVz
dWx0OworfQorZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCwgc3RyKQoreworICAgIHJldHVybiBz
dHIuc2xpY2Uoc3RhcnQsIGVuZCk7Cit9CitmdW5jdGlvbiBsZWZ0KG4sIHN0cikKK3sKKyAgICBy
ZXR1cm4gbiA8IDEgPyAnJyA6IHN0ci5zbGljZSgwLCBuKTsKK30KK2Z1bmN0aW9uIHJpZ2h0KG4s
IHN0cikKK3sKKyAgICByZXR1cm4gbiA8IDEgPyAnJyA6IHN0ci5zbGljZSgtbik7Cit9CitmdW5j
dGlvbiBkcm9wTGVmdChuLCBzdHIpCit7CisgICAgcmV0dXJuIG4gPCAxID8gc3RyIDogc3RyLnNs
aWNlKG4pOworfQorZnVuY3Rpb24gZHJvcFJpZ2h0KG4sIHN0cikKK3sKKyAgICByZXR1cm4gbiA8
IDEgPyBzdHIgOiBzdHIuc2xpY2UoMCwgLW4pOworfQorZnVuY3Rpb24gcGFkKG4sIGNociwgc3Ry
KQoreworICAgIHZhciBoYWxmID0gKG4gLSBzdHIubGVuZ3RoKSAvIDI7CisgICAgcmV0dXJuIHJl
cGVhdChNYXRoLmNlaWwoaGFsZiksIGNocikgKyBzdHIgKyByZXBlYXQoaGFsZiB8IDAsIGNocik7
Cit9CitmdW5jdGlvbiBwYWRSaWdodChuLCBjaHIsIHN0cikKK3sKKyAgICByZXR1cm4gc3RyICsg
cmVwZWF0KG4gLSBzdHIubGVuZ3RoLCBjaHIpOworfQorZnVuY3Rpb24gcGFkTGVmdChuLCBjaHIs
IHN0cikKK3sKKyAgICByZXR1cm4gcmVwZWF0KG4gLSBzdHIubGVuZ3RoLCBjaHIpICsgc3RyOwor
fQorCitmdW5jdGlvbiB0cmltKHN0cikKK3sKKyAgICByZXR1cm4gc3RyLnRyaW0oKTsKK30KK2Z1
bmN0aW9uIHRyaW1MZWZ0KHN0cikKK3sKKyAgICByZXR1cm4gc3RyLnJlcGxhY2UoL15ccysvLCAn
Jyk7Cit9CitmdW5jdGlvbiB0cmltUmlnaHQoc3RyKQoreworICAgIHJldHVybiBzdHIucmVwbGFj
ZSgvXHMrJC8sICcnKTsKK30KKworZnVuY3Rpb24gd29yZHMoc3RyKQoreworICAgIHJldHVybiBf
ZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoc3RyLnRyaW0oKS5zcGxpdCgvXHMr
L2cpKTsKK30KK2Z1bmN0aW9uIGxpbmVzKHN0cikKK3sKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KHN0ci5zcGxpdCgvXHJcbnxccnxcbi9nKSk7Cit9CisK
K2Z1bmN0aW9uIHRvVXBwZXIoc3RyKQoreworICAgIHJldHVybiBzdHIudG9VcHBlckNhc2UoKTsK
K30KK2Z1bmN0aW9uIHRvTG93ZXIoc3RyKQoreworICAgIHJldHVybiBzdHIudG9Mb3dlckNhc2Uo
KTsKK30KKworZnVuY3Rpb24gYW55KHByZWQsIHN0cikKK3sKKyAgICBmb3IgKHZhciBpID0gc3Ry
Lmxlbmd0aDsgaS0tOyApCisgICAgeworICAgICAgICBpZiAocHJlZChfZWxtX2xhbmckY29yZSRO
YXRpdmVfVXRpbHMuY2hyKHN0cltpXSkpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CitmdW5jdGlvbiBh
bGwocHJlZCwgc3RyKQoreworICAgIGZvciAodmFyIGkgPSBzdHIubGVuZ3RoOyBpLS07ICkKKyAg
ICB7CisgICAgICAgIGlmICghcHJlZChfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY2hyKHN0
cltpXSkpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9uIGNvbnRhaW5zKHN1Yiwgc3Ry
KQoreworICAgIHJldHVybiBzdHIuaW5kZXhPZihzdWIpID4gLTE7Cit9CitmdW5jdGlvbiBzdGFy
dHNXaXRoKHN1Yiwgc3RyKQoreworICAgIHJldHVybiBzdHIuaW5kZXhPZihzdWIpID09PSAwOwor
fQorZnVuY3Rpb24gZW5kc1dpdGgoc3ViLCBzdHIpCit7CisgICAgcmV0dXJuIHN0ci5sZW5ndGgg
Pj0gc3ViLmxlbmd0aCAmJgorICAgICAgICBzdHIubGFzdEluZGV4T2Yoc3ViKSA9PT0gc3RyLmxl
bmd0aCAtIHN1Yi5sZW5ndGg7Cit9CitmdW5jdGlvbiBpbmRleGVzKHN1Yiwgc3RyKQoreworICAg
IHZhciBzdWJMZW4gPSBzdWIubGVuZ3RoOworICAgIAorICAgIGlmIChzdWJMZW4gPCAxKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0Lk5pbDsKKyAgICB9
CisKKyAgICB2YXIgaSA9IDA7CisgICAgdmFyIGlzID0gW107CisKKyAgICB3aGlsZSAoKGkgPSBz
dHIuaW5kZXhPZihzdWIsIGkpKSA+IC0xKQorICAgIHsKKyAgICAgICAgaXMucHVzaChpKTsKKyAg
ICAgICAgaSA9IGkgKyBzdWJMZW47CisgICAgfSAgIAorICAgIAorICAgIHJldHVybiBfZWxtX2xh
bmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoaXMpOworfQorCitmdW5jdGlvbiB0b0ludChz
KQoreworICAgIHZhciBsZW4gPSBzLmxlbmd0aDsKKyAgICBpZiAobGVuID09PSAwKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRFcnIoImNvdWxkIG5vdCBjb252
ZXJ0IHN0cmluZyAnIiArIHMgKyAiJyB0byBhbiBJbnQiICk7CisgICAgfQorICAgIHZhciBzdGFy
dCA9IDA7CisgICAgaWYgKHNbMF0gPT09ICctJykKKyAgICB7CisgICAgICAgIGlmIChsZW4gPT09
IDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1bHQk
RXJyKCJjb3VsZCBub3QgY29udmVydCBzdHJpbmcgJyIgKyBzICsgIicgdG8gYW4gSW50IiApOwor
ICAgICAgICB9CisgICAgICAgIHN0YXJ0ID0gMTsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9IHN0
YXJ0OyBpIDwgbGVuOyArK2kpCisgICAgeworICAgICAgICB2YXIgYyA9IHNbaV07CisgICAgICAg
IGlmIChjIDwgJzAnIHx8ICc5JyA8IGMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBf
ZWxtX2xhbmckY29yZSRSZXN1bHQkRXJyKCJjb3VsZCBub3QgY29udmVydCBzdHJpbmcgJyIgKyBz
ICsgIicgdG8gYW4gSW50IiApOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBfZWxtX2xh
bmckY29yZSRSZXN1bHQkT2socGFyc2VJbnQocywgMTApKTsKK30KKworZnVuY3Rpb24gdG9GbG9h
dChzKQoreworICAgIHZhciBsZW4gPSBzLmxlbmd0aDsKKyAgICBpZiAobGVuID09PSAwKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRFcnIoImNvdWxkIG5vdCBj
b252ZXJ0IHN0cmluZyAnIiArIHMgKyAiJyB0byBhIEZsb2F0IiApOworICAgIH0KKyAgICB2YXIg
c3RhcnQgPSAwOworICAgIGlmIChzWzBdID09PSAnLScpCisgICAgeworICAgICAgICBpZiAobGVu
ID09PSAxKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVz
dWx0JEVycigiY291bGQgbm90IGNvbnZlcnQgc3RyaW5nICciICsgcyArICInIHRvIGEgRmxvYXQi
ICk7CisgICAgICAgIH0KKyAgICAgICAgc3RhcnQgPSAxOworICAgIH0KKyAgICB2YXIgZG90Q291
bnQgPSAwOworICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGxlbjsgKytpKQorICAgIHsKKyAg
ICAgICAgdmFyIGMgPSBzW2ldOworICAgICAgICBpZiAoJzAnIDw9IGMgJiYgYyA8PSAnOScpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChj
ID09PSAnLicpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvdENvdW50ICs9IDE7CisgICAgICAg
ICAgICBpZiAoZG90Q291bnQgPD0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gX2VsbV9s
YW5nJGNvcmUkUmVzdWx0JEVycigiY291bGQgbm90IGNvbnZlcnQgc3RyaW5nICciICsgcyArICIn
IHRvIGEgRmxvYXQiICk7CisgICAgfQorICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1bHQk
T2socGFyc2VGbG9hdChzKSk7Cit9CisKK2Z1bmN0aW9uIHRvTGlzdChzdHIpCit7CisgICAgcmV0
dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheShzdHIuc3BsaXQoJycpLm1h
cChfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY2hyKSk7Cit9CitmdW5jdGlvbiBmcm9tTGlz
dChjaGFycykKK3sKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QudG9BcnJh
eShjaGFycykuam9pbignJyk7Cit9CisKK3JldHVybiB7CisgICAgaXNFbXB0eTogaXNFbXB0eSwK
KyAgICBjb25zOiBGMihjb25zKSwKKyAgICB1bmNvbnM6IHVuY29ucywKKyAgICBhcHBlbmQ6IEYy
KGFwcGVuZCksCisgICAgY29uY2F0OiBjb25jYXQsCisgICAgbGVuZ3RoOiBsZW5ndGgsCisgICAg
bWFwOiBGMihtYXApLAorICAgIGZpbHRlcjogRjIoZmlsdGVyKSwKKyAgICByZXZlcnNlOiByZXZl
cnNlLAorICAgIGZvbGRsOiBGMyhmb2xkbCksCisgICAgZm9sZHI6IEYzKGZvbGRyKSwKKworICAg
IHNwbGl0OiBGMihzcGxpdCksCisgICAgam9pbjogRjIoam9pbiksCisgICAgcmVwZWF0OiBGMihy
ZXBlYXQpLAorCisgICAgc2xpY2U6IEYzKHNsaWNlKSwKKyAgICBsZWZ0OiBGMihsZWZ0KSwKKyAg
ICByaWdodDogRjIocmlnaHQpLAorICAgIGRyb3BMZWZ0OiBGMihkcm9wTGVmdCksCisgICAgZHJv
cFJpZ2h0OiBGMihkcm9wUmlnaHQpLAorCisgICAgcGFkOiBGMyhwYWQpLAorICAgIHBhZExlZnQ6
IEYzKHBhZExlZnQpLAorICAgIHBhZFJpZ2h0OiBGMyhwYWRSaWdodCksCisKKyAgICB0cmltOiB0
cmltLAorICAgIHRyaW1MZWZ0OiB0cmltTGVmdCwKKyAgICB0cmltUmlnaHQ6IHRyaW1SaWdodCwK
KworICAgIHdvcmRzOiB3b3JkcywKKyAgICBsaW5lczogbGluZXMsCisKKyAgICB0b1VwcGVyOiB0
b1VwcGVyLAorICAgIHRvTG93ZXI6IHRvTG93ZXIsCisKKyAgICBhbnk6IEYyKGFueSksCisgICAg
YWxsOiBGMihhbGwpLAorCisgICAgY29udGFpbnM6IEYyKGNvbnRhaW5zKSwKKyAgICBzdGFydHNX
aXRoOiBGMihzdGFydHNXaXRoKSwKKyAgICBlbmRzV2l0aDogRjIoZW5kc1dpdGgpLAorICAgIGlu
ZGV4ZXM6IEYyKGluZGV4ZXMpLAorCisgICAgdG9JbnQ6IHRvSW50LAorICAgIHRvRmxvYXQ6IHRv
RmxvYXQsCisgICAgdG9MaXN0OiB0b0xpc3QsCisgICAgZnJvbUxpc3Q6IGZyb21MaXN0Cit9Owor
Cit9KCk7CisKKy8vaW1wb3J0IE5hdGl2ZS5VdGlscyAvLworCit2YXIgX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX0NoYXIgPSBmdW5jdGlvbigpIHsKKworcmV0dXJuIHsKKyAgICBmcm9tQ29kZTogZnVu
Y3Rpb24oYykgeyByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNocihTdHJpbmcu
ZnJvbUNoYXJDb2RlKGMpKTsgfSwKKyAgICB0b0NvZGU6IGZ1bmN0aW9uKGMpIHsgcmV0dXJuIGMu
Y2hhckNvZGVBdCgwKTsgfSwKKyAgICB0b1VwcGVyOiBmdW5jdGlvbihjKSB7IHJldHVybiBfZWxt
X2xhbmckY29yZSROYXRpdmVfVXRpbHMuY2hyKGMudG9VcHBlckNhc2UoKSk7IH0sCisgICAgdG9M
b3dlcjogZnVuY3Rpb24oYykgeyByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNo
cihjLnRvTG93ZXJDYXNlKCkpOyB9LAorICAgIHRvTG9jYWxlVXBwZXI6IGZ1bmN0aW9uKGMpIHsg
cmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jaHIoYy50b0xvY2FsZVVwcGVyQ2Fz
ZSgpKTsgfSwKKyAgICB0b0xvY2FsZUxvd2VyOiBmdW5jdGlvbihjKSB7IHJldHVybiBfZWxtX2xh
bmckY29yZSROYXRpdmVfVXRpbHMuY2hyKGMudG9Mb2NhbGVMb3dlckNhc2UoKSk7IH0KK307CisK
K30oKTsKK3ZhciBfZWxtX2xhbmckY29yZSRDaGFyJGZyb21Db2RlID0gX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX0NoYXIuZnJvbUNvZGU7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQ2hhciR0b0NvZGUgPSBf
ZWxtX2xhbmckY29yZSROYXRpdmVfQ2hhci50b0NvZGU7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQ2hh
ciR0b0xvY2FsZUxvd2VyID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0NoYXIudG9Mb2NhbGVMb3dl
cjsKK3ZhciBfZWxtX2xhbmckY29yZSRDaGFyJHRvTG9jYWxlVXBwZXIgPSBfZWxtX2xhbmckY29y
ZSROYXRpdmVfQ2hhci50b0xvY2FsZVVwcGVyOwordmFyIF9lbG1fbGFuZyRjb3JlJENoYXIkdG9M
b3dlciA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9DaGFyLnRvTG93ZXI7Cit2YXIgX2VsbV9sYW5n
JGNvcmUkQ2hhciR0b1VwcGVyID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0NoYXIudG9VcHBlcjsK
K3ZhciBfZWxtX2xhbmckY29yZSRDaGFyJGlzQmV0d2VlbiA9IEYzKAorICAgIGZ1bmN0aW9uIChs
b3csIGhpZ2gsICRjaGFyKSB7CisgICAgICAgIHZhciBjb2RlID0gX2VsbV9sYW5nJGNvcmUkQ2hh
ciR0b0NvZGUoJGNoYXIpOworICAgICAgICByZXR1cm4gKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9V
dGlscy5jbXAoCisgICAgICAgICAgICBjb2RlLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUk
Q2hhciR0b0NvZGUobG93KSkgPiAtMSkgJiYgKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5j
bXAoCisgICAgICAgICAgICBjb2RlLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQ2hhciR0
b0NvZGUoaGlnaCkpIDwgMSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQ2hhciRpc1Vw
cGVyID0gQTIoCisgICAgX2VsbV9sYW5nJGNvcmUkQ2hhciRpc0JldHdlZW4sCisgICAgX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNocignQScpLAorICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9VdGlscy5jaHIoJ1onKSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQ2hhciRpc0xvd2VyID0gQTIo
CisgICAgX2VsbV9sYW5nJGNvcmUkQ2hhciRpc0JldHdlZW4sCisgICAgX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX1V0aWxzLmNocignYScpLAorICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5j
aHIoJ3onKSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQ2hhciRpc0RpZ2l0ID0gQTIoCisgICAgX2Vs
bV9sYW5nJGNvcmUkQ2hhciRpc0JldHdlZW4sCisgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0
aWxzLmNocignMCcpLAorICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jaHIoJzknKSk7
Cit2YXIgX2VsbV9sYW5nJGNvcmUkQ2hhciRpc09jdERpZ2l0ID0gQTIoCisgICAgX2VsbV9sYW5n
JGNvcmUkQ2hhciRpc0JldHdlZW4sCisgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNo
cignMCcpLAorICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jaHIoJzcnKSk7Cit2YXIg
X2VsbV9sYW5nJGNvcmUkQ2hhciRpc0hleERpZ2l0ID0gZnVuY3Rpb24gKCRjaGFyKSB7CisgICAg
cmV0dXJuIF9lbG1fbGFuZyRjb3JlJENoYXIkaXNEaWdpdCgkY2hhcikgfHwgKEEzKAorICAgICAg
ICBfZWxtX2xhbmckY29yZSRDaGFyJGlzQmV0d2VlbiwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX1V0aWxzLmNocignYScpLAorICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRp
bHMuY2hyKCdmJyksCisgICAgICAgICRjaGFyKSB8fCBBMygKKyAgICAgICAgX2VsbV9sYW5nJGNv
cmUkQ2hhciRpc0JldHdlZW4sCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5j
aHIoJ0EnKSwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNocignRicpLAor
ICAgICAgICAkY2hhcikpOworfTsKKwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRmcm9tTGlz
dCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcuZnJvbUxpc3Q7Cit2YXIgX2VsbV9sYW5n
JGNvcmUkU3RyaW5nJHRvTGlzdCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcudG9MaXN0
OwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyR0b0Zsb2F0ID0gX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX1N0cmluZy50b0Zsb2F0OwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyR0b0ludCA9IF9l
bG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcudG9JbnQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3Ry
aW5nJGluZGljZXMgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5nLmluZGV4ZXM7Cit2YXIg
X2VsbV9sYW5nJGNvcmUkU3RyaW5nJGluZGV4ZXMgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3Ry
aW5nLmluZGV4ZXM7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGVuZHNXaXRoID0gX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX1N0cmluZy5lbmRzV2l0aDsKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJp
bmckc3RhcnRzV2l0aCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcuc3RhcnRzV2l0aDsK
K3ZhciBfZWxtX2xhbmckY29yZSRTdHJpbmckY29udGFpbnMgPSBfZWxtX2xhbmckY29yZSROYXRp
dmVfU3RyaW5nLmNvbnRhaW5zOwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRhbGwgPSBfZWxt
X2xhbmckY29yZSROYXRpdmVfU3RyaW5nLmFsbDsKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJpbmck
YW55ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5hbnk7Cit2YXIgX2VsbV9sYW5nJGNv
cmUkU3RyaW5nJHRvTG93ZXIgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5nLnRvTG93ZXI7
Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJHRvVXBwZXIgPSBfZWxtX2xhbmckY29yZSROYXRp
dmVfU3RyaW5nLnRvVXBwZXI7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGxpbmVzID0gX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5saW5lczsKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJp
bmckd29yZHMgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5nLndvcmRzOwordmFyIF9lbG1f
bGFuZyRjb3JlJFN0cmluZyR0cmltUmlnaHQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5n
LnRyaW1SaWdodDsKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJpbmckdHJpbUxlZnQgPSBfZWxtX2xh
bmckY29yZSROYXRpdmVfU3RyaW5nLnRyaW1MZWZ0OwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmlu
ZyR0cmltID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy50cmltOwordmFyIF9lbG1fbGFu
ZyRjb3JlJFN0cmluZyRwYWRSaWdodCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcucGFk
UmlnaHQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJHBhZExlZnQgPSBfZWxtX2xhbmckY29y
ZSROYXRpdmVfU3RyaW5nLnBhZExlZnQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJHBhZCA9
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcucGFkOwordmFyIF9lbG1fbGFuZyRjb3JlJFN0
cmluZyRkcm9wUmlnaHQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5nLmRyb3BSaWdodDsK
K3ZhciBfZWxtX2xhbmckY29yZSRTdHJpbmckZHJvcExlZnQgPSBfZWxtX2xhbmckY29yZSROYXRp
dmVfU3RyaW5nLmRyb3BMZWZ0OwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRyaWdodCA9IF9l
bG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcucmlnaHQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3Ry
aW5nJGxlZnQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5nLmxlZnQ7Cit2YXIgX2VsbV9s
YW5nJGNvcmUkU3RyaW5nJHNsaWNlID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5zbGlj
ZTsKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJpbmckcmVwZWF0ID0gX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX1N0cmluZy5yZXBlYXQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGpvaW4gPSBfZWxt
X2xhbmckY29yZSROYXRpdmVfU3RyaW5nLmpvaW47Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5n
JHNwbGl0ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5zcGxpdDsKK3ZhciBfZWxtX2xh
bmckY29yZSRTdHJpbmckZm9sZHIgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5nLmZvbGRy
OwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRmb2xkbCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9TdHJpbmcuZm9sZGw7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJHJldmVyc2UgPSBfZWxt
X2xhbmckY29yZSROYXRpdmVfU3RyaW5nLnJldmVyc2U7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3Ry
aW5nJGZpbHRlciA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcuZmlsdGVyOwordmFyIF9l
bG1fbGFuZyRjb3JlJFN0cmluZyRtYXAgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5nLm1h
cDsKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJpbmckbGVuZ3RoID0gX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX1N0cmluZy5sZW5ndGg7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGNvbmNhdCA9IF9l
bG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcuY29uY2F0OwordmFyIF9lbG1fbGFuZyRjb3JlJFN0
cmluZyRhcHBlbmQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5nLmFwcGVuZDsKK3ZhciBf
ZWxtX2xhbmckY29yZSRTdHJpbmckdW5jb25zID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmlu
Zy51bmNvbnM7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGNvbnMgPSBfZWxtX2xhbmckY29y
ZSROYXRpdmVfU3RyaW5nLmNvbnM7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGZyb21DaGFy
ID0gZnVuY3Rpb24gKCRjaGFyKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRjb3JlJFN0cmlu
ZyRjb25zLCAkY2hhciwgJycpOworfTsKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJpbmckaXNFbXB0
eSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcuaXNFbXB0eTsKKworLy9pbXBvcnQgTWF5
YmUsIE5hdGl2ZS5MaXN0IC8vCisKK3ZhciBfZWxtX2xhbmckY29yZSROYXRpdmVfUmVnZXggPSBm
dW5jdGlvbigpIHsKKworZnVuY3Rpb24gZXNjYXBlKHN0cikKK3sKKyAgICByZXR1cm4gc3RyLnJl
cGxhY2UoL1stXC9cXF4kKis/LigpfFtcXXt9XS9nLCAnXFwkJicpOworfQorZnVuY3Rpb24gY2Fz
ZUluc2Vuc2l0aXZlKHJlKQoreworICAgIHJldHVybiBuZXcgUmVnRXhwKHJlLnNvdXJjZSwgJ2dp
Jyk7Cit9CitmdW5jdGlvbiByZWdleChyYXcpCit7CisgICAgcmV0dXJuIG5ldyBSZWdFeHAocmF3
LCAnZycpOworfQorCitmdW5jdGlvbiBjb250YWlucyhyZSwgc3RyaW5nKQoreworICAgIHJldHVy
biBzdHJpbmcubWF0Y2gocmUpICE9PSBudWxsOworfQorCitmdW5jdGlvbiBmaW5kKG4sIHJlLCBz
dHIpCit7CisgICAgbiA9IG4uY3RvciA9PT0gJ0FsbCcgPyBJbmZpbml0eSA6IG4uXzA7CisgICAg
dmFyIG91dCA9IFtdOworICAgIHZhciBudW1iZXIgPSAwOworICAgIHZhciBzdHJpbmcgPSBzdHI7
CisgICAgdmFyIGxhc3RJbmRleCA9IHJlLmxhc3RJbmRleDsKKyAgICB2YXIgcHJldkxhc3RJbmRl
eCA9IC0xOworICAgIHZhciByZXN1bHQ7CisgICAgd2hpbGUgKG51bWJlcisrIDwgbiAmJiAocmVz
dWx0ID0gcmUuZXhlYyhzdHJpbmcpKSkKKyAgICB7CisgICAgICAgIGlmIChwcmV2TGFzdEluZGV4
ID09PSByZS5sYXN0SW5kZXgpIGJyZWFrOworICAgICAgICB2YXIgaSA9IHJlc3VsdC5sZW5ndGgg
LSAxOworICAgICAgICB2YXIgc3VicyA9IG5ldyBBcnJheShpKTsKKyAgICAgICAgd2hpbGUgKGkg
PiAwKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgc3VibWF0Y2ggPSByZXN1bHRbaV07Cisg
ICAgICAgICAgICBzdWJzWy0taV0gPSBzdWJtYXRjaCA9PT0gdW5kZWZpbmVkCisgICAgICAgICAg
ICAgICAgPyBfZWxtX2xhbmckY29yZSRNYXliZSROb3RoaW5nCisgICAgICAgICAgICAgICAgOiBf
ZWxtX2xhbmckY29yZSRNYXliZSRKdXN0KHN1Ym1hdGNoKTsKKyAgICAgICAgfQorICAgICAgICBv
dXQucHVzaCh7CisgICAgICAgICAgICBtYXRjaDogcmVzdWx0WzBdLAorICAgICAgICAgICAgc3Vi
bWF0Y2hlczogX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KHN1YnMpLAorICAg
ICAgICAgICAgaW5kZXg6IHJlc3VsdC5pbmRleCwKKyAgICAgICAgICAgIG51bWJlcjogbnVtYmVy
CisgICAgICAgIH0pOworICAgICAgICBwcmV2TGFzdEluZGV4ID0gcmUubGFzdEluZGV4OworICAg
IH0KKyAgICByZS5sYXN0SW5kZXggPSBsYXN0SW5kZXg7CisgICAgcmV0dXJuIF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheShvdXQpOworfQorCitmdW5jdGlvbiByZXBsYWNlKG4s
IHJlLCByZXBsYWNlciwgc3RyaW5nKQoreworICAgIG4gPSBuLmN0b3IgPT09ICdBbGwnID8gSW5m
aW5pdHkgOiBuLl8wOworICAgIHZhciBjb3VudCA9IDA7CisgICAgZnVuY3Rpb24ganNSZXBsYWNl
cihtYXRjaCkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCsrID49IG4pCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBtYXRjaDsKKyAgICAgICAgfQorICAgICAgICB2YXIgaSA9IGFyZ3Vt
ZW50cy5sZW5ndGggLSAzOworICAgICAgICB2YXIgc3VibWF0Y2hlcyA9IG5ldyBBcnJheShpKTsK
KyAgICAgICAgd2hpbGUgKGkgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgc3VibWF0
Y2ggPSBhcmd1bWVudHNbaV07CisgICAgICAgICAgICBzdWJtYXRjaGVzWy0taV0gPSBzdWJtYXRj
aCA9PT0gdW5kZWZpbmVkCisgICAgICAgICAgICAgICAgPyBfZWxtX2xhbmckY29yZSRNYXliZSRO
b3RoaW5nCisgICAgICAgICAgICAgICAgOiBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0KHN1Ym1h
dGNoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVwbGFjZXIoeworICAgICAgICAgICAg
bWF0Y2g6IG1hdGNoLAorICAgICAgICAgICAgc3VibWF0Y2hlczogX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX0xpc3QuZnJvbUFycmF5KHN1Ym1hdGNoZXMpLAorICAgICAgICAgICAgaW5kZXg6IGFyZ3Vt
ZW50c1tpIC0gMV0sCisgICAgICAgICAgICBudW1iZXI6IGNvdW50CisgICAgICAgIH0pOworICAg
IH0KKyAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UocmUsIGpzUmVwbGFjZXIpOworfQorCitmdW5j
dGlvbiBzcGxpdChuLCByZSwgc3RyKQoreworICAgIG4gPSBuLmN0b3IgPT09ICdBbGwnID8gSW5m
aW5pdHkgOiBuLl8wOworICAgIGlmIChuID09PSBJbmZpbml0eSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoc3RyLnNwbGl0KHJlKSk7
CisgICAgfQorICAgIHZhciBzdHJpbmcgPSBzdHI7CisgICAgdmFyIHJlc3VsdDsKKyAgICB2YXIg
b3V0ID0gW107CisgICAgdmFyIHN0YXJ0ID0gcmUubGFzdEluZGV4OworICAgIHdoaWxlIChuLS0p
CisgICAgeworICAgICAgICBpZiAoIShyZXN1bHQgPSByZS5leGVjKHN0cmluZykpKSBicmVhazsK
KyAgICAgICAgb3V0LnB1c2goc3RyaW5nLnNsaWNlKHN0YXJ0LCByZXN1bHQuaW5kZXgpKTsKKyAg
ICAgICAgc3RhcnQgPSByZS5sYXN0SW5kZXg7CisgICAgfQorICAgIG91dC5wdXNoKHN0cmluZy5z
bGljZShzdGFydCkpOworICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9t
QXJyYXkob3V0KTsKK30KKworcmV0dXJuIHsKKyAgICByZWdleDogcmVnZXgsCisgICAgY2FzZUlu
c2Vuc2l0aXZlOiBjYXNlSW5zZW5zaXRpdmUsCisgICAgZXNjYXBlOiBlc2NhcGUsCisKKyAgICBj
b250YWluczogRjIoY29udGFpbnMpLAorICAgIGZpbmQ6IEYzKGZpbmQpLAorICAgIHJlcGxhY2U6
IEY0KHJlcGxhY2UpLAorICAgIHNwbGl0OiBGMyhzcGxpdCkKK307CisKK30oKTsKKwordmFyIF9l
bG1fbGFuZyRjb3JlJFJlZ2V4JHNwbGl0ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1JlZ2V4LnNw
bGl0OwordmFyIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JHJlcGxhY2UgPSBfZWxtX2xhbmckY29yZSRO
YXRpdmVfUmVnZXgucmVwbGFjZTsKK3ZhciBfZWxtX2xhbmckY29yZSRSZWdleCRmaW5kID0gX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX1JlZ2V4LmZpbmQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkUmVnZXgk
Y29udGFpbnMgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfUmVnZXguY29udGFpbnM7Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkUmVnZXgkY2FzZUluc2Vuc2l0aXZlID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X1JlZ2V4LmNhc2VJbnNlbnNpdGl2ZTsKK3ZhciBfZWxtX2xhbmckY29yZSRSZWdleCRyZWdleCA9
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9SZWdleC5yZWdleDsKK3ZhciBfZWxtX2xhbmckY29yZSRS
ZWdleCRlc2NhcGUgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfUmVnZXguZXNjYXBlOwordmFyIF9l
bG1fbGFuZyRjb3JlJFJlZ2V4JE1hdGNoID0gRjQoCisgICAgZnVuY3Rpb24gKGEsIGIsIGMsIGQp
IHsKKyAgICAgICAgcmV0dXJuIHttYXRjaDogYSwgc3VibWF0Y2hlczogYiwgaW5kZXg6IGMsIG51
bWJlcjogZH07CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkUmVnZXgkUmVnZXggPSB7Y3Rv
cjogJ1JlZ2V4J307Cit2YXIgX2VsbV9sYW5nJGNvcmUkUmVnZXgkQXRNb3N0ID0gZnVuY3Rpb24g
KGEpIHsKKyAgICByZXR1cm4ge2N0b3I6ICdBdE1vc3QnLCBfMDogYX07Cit9OwordmFyIF9lbG1f
bGFuZyRjb3JlJFJlZ2V4JEFsbCA9IHtjdG9yOiAnQWxsJ307CisKK3ZhciBfZWxtX2NvbW11bml0
eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJGxlZnRPZkJhY2sgPSBGMigKKyAgICBmdW5jdGlv
biAocGF0dGVybiwgc3RyaW5nKSB7CisgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgIF9l
bG1fbGFuZyRjb3JlJE1heWJlJHdpdGhEZWZhdWx0LAorICAgICAgICAgICAgJycsCisgICAgICAg
ICAgICBBMigKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRNYXliZSRtYXAsCisgICAg
ICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGZsaXAsIF9lbG1fbGFuZyRjb3Jl
JFN0cmluZyRsZWZ0LCBzdHJpbmcpLAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExp
c3QkaGVhZCgKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRyZXZlcnNl
KAorICAgICAgICAgICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGluZGV4
ZXMsIHBhdHRlcm4sIHN0cmluZykpKSkpOworICAgIH0pOwordmFyIF9lbG1fY29tbXVuaXR5JHN0
cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkcmlnaHRPZkJhY2sgPSBGMigKKyAgICBmdW5jdGlvbiAo
cGF0dGVybiwgc3RyaW5nKSB7CisgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgIF9lbG1f
bGFuZyRjb3JlJE1heWJlJHdpdGhEZWZhdWx0LAorICAgICAgICAgICAgJycsCisgICAgICAgICAg
ICBBMigKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRNYXliZSRtYXAsCisgICAgICAg
ICAgICAgICAgZnVuY3Rpb24gKF9wMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQTMo
CisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3MkZmxpcCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRkcm9wTGVmdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgIEEy
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYyKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmdW5jdGlvbiAoeCwgeSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHggKyB5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRTdHJpbmckbGVu
Z3RoKHBhdHRlcm4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9wMCkpOworICAgICAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRoZWFkKAor
ICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JHJldmVyc2UoCisgICAgICAg
ICAgICAgICAgICAgICAgICBBMihfZWxtX2xhbmckY29yZSRTdHJpbmckaW5kZXhlcywgcGF0dGVy
biwgc3RyaW5nKSkpKSk7CisgICAgfSk7Cit2YXIgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJh
JFN0cmluZ19FeHRyYSRsZWZ0T2YgPSBGMigKKyAgICBmdW5jdGlvbiAocGF0dGVybiwgc3RyaW5n
KSB7CisgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmlu
ZyRqb2luLAorICAgICAgICAgICAgJycsCisgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSRMaXN0JG1hcCwKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX3Ax
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAg
ICAgIF9lbG1fbGFuZyRjb3JlJE1heWJlJHdpdGhEZWZhdWx0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgJycsCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRNYXliZSRv
bmVPZigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoXykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXy5zdWJtYXRjaGVzOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0oX3AxKSkpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICAgICAgQTMoCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JGZp
bmQsCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JEF0TW9zdCgxKSwK
KyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVnZXgoCisgICAgICAg
ICAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xh
bmckY29yZSRCYXNpY3Nfb3BzWycrKyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICde
KC4qPyknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4
JGVzY2FwZShwYXR0ZXJuKSkpLAorICAgICAgICAgICAgICAgICAgICBzdHJpbmcpKSk7CisgICAg
fSk7Cit2YXIgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRyaWdodE9m
ID0gRjIoCisgICAgZnVuY3Rpb24gKHBhdHRlcm4sIHN0cmluZykgeworICAgICAgICByZXR1cm4g
QTIoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRTdHJpbmckam9pbiwKKyAgICAgICAgICAg
ICcnLAorICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlz
dCRtYXAsCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9wMikgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRN
YXliZSR3aXRoRGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICcnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTWF5YmUkb25lT2YoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZnVuY3Rpb24gKF8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIF8uc3VibWF0Y2hlczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
KF9wMikpKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIEEzKAorICAgICAg
ICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRmaW5kLAorICAgICAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRBdE1vc3QoMSksCisgICAgICAgICAgICAgICAgICAg
IF9lbG1fbGFuZyRjb3JlJFJlZ2V4JHJlZ2V4KAorICAgICAgICAgICAgICAgICAgICAgICAgQTIo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1sn
KysnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRl
c2NhcGUocGF0dGVybiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyguKikkJykpLAor
ICAgICAgICAgICAgICAgICAgICBzdHJpbmcpKSk7CisgICAgfSk7Cit2YXIgX2VsbV9jb21tdW5p
dHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRzdHJpcFRhZ3MgPSBmdW5jdGlvbiAoc3RyaW5n
KSB7CisgICAgcmV0dXJuIEE0KAorICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZXBsYWNl
LAorICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRBbGwsCisgICAgICAgIF9lbG1fbGFuZyRj
b3JlJFJlZ2V4JHJlZ2V4KCc8XFwvP1tePl0rPicpLAorICAgICAgICBfZWxtX2xhbmckY29yZSRC
YXNpY3MkYWx3YXlzKCcnKSwKKyAgICAgICAgc3RyaW5nKTsKK307Cit2YXIgX2VsbV9jb21tdW5p
dHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSR0b1NlbnRlbmNlSGVscGVyID0gRjMoCisgICAg
ZnVuY3Rpb24gKGxhc3RQYXJ0LCBzZW50ZW5jZSwgbGlzdCkgeworICAgICAgICB0b1NlbnRlbmNl
SGVscGVyOgorICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgdmFyIF9wMyA9IGxp
c3Q7CisgICAgICAgICAgICBpZiAoX3AzLmN0b3IgPT09ICdbXScpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc2VudGVuY2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGlmIChfcDMuXzEuY3RvciA9PT0gJ1tdJykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
QTIoCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycr
KyddLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VudGVuY2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICBBMihfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycrKyddLCBsYXN0UGFydCwgX3Az
Ll8wKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IF92MSA9IGxhc3RQYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgX3YyID0gQTIoCisgICAg
ICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycrKyddLAorICAg
ICAgICAgICAgICAgICAgICAgICAgc2VudGVuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBB
MihfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycrKyddLCAnLCAnLCBfcDMuXzApKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIF92MyA9IF9wMy5fMTsKKyAgICAgICAgICAgICAgICAgICAgbGFz
dFBhcnQgPSBfdjE7CisgICAgICAgICAgICAgICAgICAgIHNlbnRlbmNlID0gX3YyOworICAgICAg
ICAgICAgICAgICAgICBsaXN0ID0gX3YzOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZSB0
b1NlbnRlbmNlSGVscGVyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0pOwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0
cmEkdG9TZW50ZW5jZUJhc2VDYXNlID0gZnVuY3Rpb24gKGxpc3QpIHsKKyAgICB2YXIgX3A0ID0g
bGlzdDsKKyAgICBfdjRfMjoKKyAgICBkbyB7CisgICAgICAgIGlmIChfcDQuY3RvciA9PT0gJzo6
JykgeworICAgICAgICAgICAgaWYgKF9wNC5fMS5jdG9yID09PSAnW10nKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIF9wNC5fMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgaWYgKF9wNC5fMS5fMS5jdG9yID09PSAnW10nKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19v
cHNbJysrJ10sCisgICAgICAgICAgICAgICAgICAgICAgICBfcDQuXzAsCisgICAgICAgICAgICAg
ICAgICAgICAgICBBMihfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycrKyddLCAnIGFuZCAnLCBf
cDQuXzEuXzApKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBicmVhayBfdjRfMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBicmVhayBfdjRfMjsKKyAgICAgICAgfQorICAgIH0gd2hp
bGUoZmFsc2UpOworICAgIHJldHVybiAnJzsKK307Cit2YXIgX2VsbV9jb21tdW5pdHkkc3RyaW5n
X2V4dHJhJFN0cmluZ19FeHRyYSR0b1NlbnRlbmNlT3hmb3JkID0gZnVuY3Rpb24gKGxpc3QpIHsK
KyAgICB2YXIgX3A1ID0gbGlzdDsKKyAgICBpZiAoKChfcDUuY3RvciA9PT0gJzo6JykgJiYgKF9w
NS5fMS5jdG9yID09PSAnOjonKSkgJiYgKF9wNS5fMS5fMS5jdG9yID09PSAnOjonKSkgeworICAg
ICAgICByZXR1cm4gQTMoCisgICAgICAgICAgICBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEk
U3RyaW5nX0V4dHJhJHRvU2VudGVuY2VIZWxwZXIsCisgICAgICAgICAgICAnLCBhbmQgJywKKyAg
ICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNb
JysrJ10sCisgICAgICAgICAgICAgICAgX3A1Ll8wLAorICAgICAgICAgICAgICAgIEEyKF9lbG1f
bGFuZyRjb3JlJEJhc2ljc19vcHNbJysrJ10sICcsICcsIF9wNS5fMS5fMCkpLAorICAgICAgICAg
ICAgQTIoX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10sIF9wNS5fMS5fMS5fMCwgX3A1Ll8x
Ll8xLl8xKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIF9lbG1fY29tbXVuaXR5JHN0
cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkdG9TZW50ZW5jZUJhc2VDYXNlKGxpc3QpOworICAgIH0K
K307Cit2YXIgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSR0b1NlbnRl
bmNlID0gZnVuY3Rpb24gKGxpc3QpIHsKKyAgICB2YXIgX3A2ID0gbGlzdDsKKyAgICBpZiAoKChf
cDYuY3RvciA9PT0gJzo6JykgJiYgKF9wNi5fMS5jdG9yID09PSAnOjonKSkgJiYgKF9wNi5fMS5f
MS5jdG9yID09PSAnOjonKSkgeworICAgICAgICByZXR1cm4gQTMoCisgICAgICAgICAgICBfZWxt
X2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHRvU2VudGVuY2VIZWxwZXIsCisg
ICAgICAgICAgICAnIGFuZCAnLAorICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSwKKyAgICAgICAgICAgICAgICBfcDYuXzAsCisg
ICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSwgJywgJywg
X3A2Ll8xLl8wKSksCisgICAgICAgICAgICBBMihfZWxtX2xhbmckY29yZSRMaXN0X29wc1snOjon
XSwgX3A2Ll8xLl8xLl8wLCBfcDYuXzEuXzEuXzEpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBy
ZXR1cm4gX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSR0b1NlbnRlbmNl
QmFzZUNhc2UobGlzdCk7CisgICAgfQorfTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0
cmEkU3RyaW5nX0V4dHJhJGVsbGlwc2lzV2l0aCA9IEYzKAorICAgIGZ1bmN0aW9uIChob3dMb25n
LCBhcHBlbmQsIHN0cmluZykgeworICAgICAgICByZXR1cm4gKF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9VdGlscy5jbXAoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRTdHJpbmckbGVuZ3RoKHN0
cmluZyksCisgICAgICAgICAgICBob3dMb25nKSA8IDEpID8gc3RyaW5nIDogQTIoCisgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycrKyddLAorICAgICAgICAgICAgQTIoCisg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGxlZnQsCisgICAgICAgICAgICAg
ICAgaG93TG9uZyAtIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRsZW5ndGgoYXBwZW5kKSwKKyAgICAg
ICAgICAgICAgICBzdHJpbmcpLAorICAgICAgICAgICAgYXBwZW5kKTsKKyAgICB9KTsKK3ZhciBf
ZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJGVsbGlwc2lzID0gRjIoCisg
ICAgZnVuY3Rpb24gKGhvd0xvbmcsIHN0cmluZykgeworICAgICAgICByZXR1cm4gQTMoX2VsbV9j
b21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRlbGxpcHNpc1dpdGgsIGhvd0xvbmcs
ICcuLi4nLCBzdHJpbmcpOworICAgIH0pOwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRy
YSRTdHJpbmdfRXh0cmEkY291bnRPY2N1cnJlbmNlcyA9IEYyKAorICAgIGZ1bmN0aW9uIChuZWVk
bGUsIGhheXN0YWNrKSB7CisgICAgICAgIHJldHVybiAoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0
aWxzLmVxKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGxlbmd0aChuZWVkbGUp
LAorICAgICAgICAgICAgMCkgfHwgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmVxKAorICAg
ICAgICAgICAgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGxlbmd0aChoYXlzdGFjayksCisgICAgICAg
ICAgICAwKSkgPyAwIDogX2VsbV9sYW5nJGNvcmUkTGlzdCRsZW5ndGgoCisgICAgICAgICAgICBB
MihfZWxtX2xhbmckY29yZSRTdHJpbmckaW5kZXhlcywgbmVlZGxlLCBoYXlzdGFjaykpOworICAg
IH0pOwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkdW5pbmRl
bnQgPSBmdW5jdGlvbiAobXVsdGlsaW5lU3RpbmcpIHsKKyAgICB2YXIgaXNOb3RXaGl0ZXNwYWNl
ID0gZnVuY3Rpb24gKCRjaGFyKSB7CisgICAgICAgIHJldHVybiAoIV9lbG1fbGFuZyRjb3JlJE5h
dGl2ZV9VdGlscy5lcSgKKyAgICAgICAgICAgICRjaGFyLAorICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX1V0aWxzLmNocignICcpKSkgJiYgKCFfZWxtX2xhbmckY29yZSROYXRpdmVf
VXRpbHMuZXEoCisgICAgICAgICAgICAkY2hhciwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9VdGlscy5jaHIoJ1x0JykpKTsKKyAgICB9OworICAgIHZhciBjb3VudExlYWRpbmdX
aGl0ZXNwYWNlID0gRjIoCisgICAgICAgIGZ1bmN0aW9uIChjb3VudCwgbGluZSkgeworICAgICAg
ICAgICAgY291bnRMZWFkaW5nV2hpdGVzcGFjZToKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7
CisgICAgICAgICAgICAgICAgdmFyIF9wNyA9IF9lbG1fbGFuZyRjb3JlJFN0cmluZyR1bmNvbnMo
bGluZSk7CisgICAgICAgICAgICAgICAgaWYgKF9wNy5jdG9yID09PSAnTm90aGluZycpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50OworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIHZhciBfcDkgPSBfcDcuXzAuXzE7CisgICAgICAgICAgICAg
ICAgICAgIHZhciBfcDggPSBfcDcuXzAuXzA7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
X3A4LnZhbHVlT2YoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnICc6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF92OSA9IGNvdW50ICsgMSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX3YxMCA9IF9wOTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb3VudCA9IF92OTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gX3Yx
MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBjb3VudExlYWRpbmdXaGl0
ZXNwYWNlOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnXHQnOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBfdjExID0gY291bnQgKyAxLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfdjEyID0gX3A5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
dW50ID0gX3YxMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gX3YxMjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBjb3VudExlYWRpbmdXaGl0ZXNwYWNl
OworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY291bnQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIHZhciBsaW5lcyA9IF9lbG1f
bGFuZyRjb3JlJFN0cmluZyRsaW5lcyhtdWx0aWxpbmVTdGluZyk7CisgICAgdmFyIG1pbkxlYWQg
PSBBMigKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkTWF5YmUkd2l0aERlZmF1bHQsCisgICAgICAg
IDAsCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkbWluaW11bSgKKyAgICAgICAgICAgIEEy
KAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkbWFwLAorICAgICAgICAgICAg
ICAgIGNvdW50TGVhZGluZ1doaXRlc3BhY2UoMCksCisgICAgICAgICAgICAgICAgQTIoCisgICAg
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkZmlsdGVyLAorICAgICAgICAgICAg
ICAgICAgICBfZWxtX2xhbmckY29yZSRTdHJpbmckYW55KGlzTm90V2hpdGVzcGFjZSksCisgICAg
ICAgICAgICAgICAgICAgIGxpbmVzKSkpKTsKKyAgICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1f
bGFuZyRjb3JlJFN0cmluZyRqb2luLAorICAgICAgICAnXG4nLAorICAgICAgICBBMigKKyAgICAg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkbWFwLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkU3RyaW5nJGRyb3BMZWZ0KG1pbkxlYWQpLAorICAgICAgICAgICAgbGluZXMpKTsKK307Cit2
YXIgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRkYXNoZXJpemUgPSBm
dW5jdGlvbiAoc3RyaW5nKSB7CisgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFN0cmluZyR0b0xv
d2VyKAorICAgICAgICBBNCgKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JHJlcGxh
Y2UsCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRBbGwsCisgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSRSZWdleCRyZWdleCgnW18tXFxzXSsnKSwKKyAgICAgICAgICAgIF9lbG1f
bGFuZyRjb3JlJEJhc2ljcyRhbHdheXMoJy0nKSwKKyAgICAgICAgICAgIEE0KAorICAgICAgICAg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JHJlcGxhY2UsCisgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkUmVnZXgkQWxsLAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJl
Z2V4JHJlZ2V4KCcoW0EtWl0pJyksCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9wMTApIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkU3RyaW5nJGFwcGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICct
JywKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIF8ubWF0Y2g7CisgICAgICAgICAgICAgICAgICAgICAgICB9
KF9wMTApKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRj
b3JlJFN0cmluZyR0cmltKHN0cmluZykpKSk7Cit9OwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmlu
Z19leHRyYSRTdHJpbmdfRXh0cmEkdW5kZXJzY29yZWQgPSBmdW5jdGlvbiAoc3RyaW5nKSB7Cisg
ICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFN0cmluZyR0b0xvd2VyKAorICAgICAgICBBNCgKKyAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JHJlcGxhY2UsCisgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSRSZWdleCRBbGwsCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRy
ZWdleCgnW18tXFxzXSsnKSwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRhbHdh
eXMoJ18nKSwKKyAgICAgICAgICAgIEE0KAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JFJlZ2V4JHJlcGxhY2UsCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkQWxs
LAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JHJlZ2V4KCcoW2EtelxcZF0p
KFtBLVpdKyknKSwKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX3AxMSkgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmck
Y29yZSRTdHJpbmckam9pbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICdfJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJExpc3QkZmlsdGVyTWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1f
bGFuZyRjb3JlJEJhc2ljcyRpZGVudGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
dW5jdGlvbiAoXykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXy5z
dWJtYXRjaGVzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0oX3AxMSkpKTsKKyAgICAg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyR0cmlt
KHN0cmluZykpKSk7Cit9OwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdf
RXh0cmEkdW5zdXJyb3VuZCA9IEYyKAorICAgIGZ1bmN0aW9uICh3cmFwLCBzdHJpbmcpIHsKKyAg
ICAgICAgaWYgKEEyKF9lbG1fbGFuZyRjb3JlJFN0cmluZyRzdGFydHNXaXRoLCB3cmFwLCBzdHJp
bmcpICYmIEEyKF9lbG1fbGFuZyRjb3JlJFN0cmluZyRlbmRzV2l0aCwgd3JhcCwgc3RyaW5nKSkg
eworICAgICAgICAgICAgdmFyIGxlbmd0aCA9IF9lbG1fbGFuZyRjb3JlJFN0cmluZyRsZW5ndGgo
d3JhcCk7CisgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkU3RyaW5nJGRyb3BSaWdodCwKKyAgICAgICAgICAgICAgICBsZW5ndGgsCisgICAgICAg
ICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGRyb3BMZWZ0LCBsZW5ndGgsIHN0cmlu
ZykpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICAg
ICAgfQorICAgIH0pOwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0
cmEkdW5xdW90ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9jb21t
dW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSR1bnN1cnJvdW5kLCAnXCInLCBzdHJpbmcp
OworfTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHN1cnJv
dW5kID0gRjIoCisgICAgZnVuY3Rpb24gKHdyYXAsIHN0cmluZykgeworICAgICAgICByZXR1cm4g
QTIoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycrKyddLAorICAgICAg
ICAgICAgd3JhcCwKKyAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJysr
J10sIHN0cmluZywgd3JhcCkpOworICAgIH0pOwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19l
eHRyYSRTdHJpbmdfRXh0cmEkcXVvdGUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7CisgICAgcmV0dXJu
IEEyKF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkc3Vycm91bmQsICdc
IicsIHN0cmluZyk7Cit9OwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdf
RXh0cmEkY2FtZWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7CisgICAgcmV0dXJuIEE0KAorICAg
ICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZXBsYWNlLAorICAgICAgICBfZWxtX2xhbmckY29y
ZSRSZWdleCRBbGwsCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JHJlZ2V4KCdbLV9cXHNd
KyguKT8nKSwKKyAgICAgICAgZnVuY3Rpb24gKF9wMTIpIHsKKyAgICAgICAgICAgIHZhciBfcDEz
ID0gX3AxMjsKKyAgICAgICAgICAgIHZhciBfcDE0ID0gX3AxMy5zdWJtYXRjaGVzOworICAgICAg
ICAgICAgaWYgKChfcDE0LmN0b3IgPT09ICc6OicpICYmIChfcDE0Ll8wLmN0b3IgPT09ICdKdXN0
JykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkU3RyaW5nJHRvVXBw
ZXIoX3AxNC5fMC5fMCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJl
dHVybiAnJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgX2VsbV9sYW5nJGNv
cmUkU3RyaW5nJHRyaW0oc3RyaW5nKSk7Cit9OwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19l
eHRyYSRTdHJpbmdfRXh0cmEkaXNCbGFuayA9IGZ1bmN0aW9uIChzdHJpbmcpIHsKKyAgICByZXR1
cm4gQTIoCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JGNvbnRhaW5zLAorICAgICAgICBf
ZWxtX2xhbmckY29yZSRSZWdleCRyZWdleCgnXlxccyokJyksCisgICAgICAgIHN0cmluZyk7Cit9
OwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkY2xlYW4gPSBm
dW5jdGlvbiAoc3RyaW5nKSB7CisgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFN0cmluZyR0cmlt
KAorICAgICAgICBBNCgKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JHJlcGxhY2Us
CisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRBbGwsCisgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSRSZWdleCRyZWdleCgnXFxzXFxzKycpLAorICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkQmFzaWNzJGFsd2F5cygnICcpLAorICAgICAgICAgICAgc3RyaW5nKSk7Cit9OwordmFy
IF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkc29mdEJyZWFrUmVnZXhw
ID0gZnVuY3Rpb24gKHdpZHRoKSB7CisgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JHJl
Z2V4KAorICAgICAgICBBMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNb
JysrJ10sCisgICAgICAgICAgICAnLnsxLCcsCisgICAgICAgICAgICBBMigKKyAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycrKyddLAorICAgICAgICAgICAgICAgIF9l
bG1fbGFuZyRjb3JlJEJhc2ljcyR0b1N0cmluZyh3aWR0aCksCisgICAgICAgICAgICAgICAgJ30o
XFxzfCQpfFxcUys/KFxcc3wkKScpKSk7Cit9OwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19l
eHRyYSRTdHJpbmdfRXh0cmEkc29mdEVsbGlwc2lzID0gRjIoCisgICAgZnVuY3Rpb24gKGhvd0xv
bmcsIHN0cmluZykgeworICAgICAgICByZXR1cm4gKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGls
cy5jbXAoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRTdHJpbmckbGVuZ3RoKHN0cmluZyks
CisgICAgICAgICAgICBob3dMb25nKSA8IDEpID8gc3RyaW5nIDogQTMoCisgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSRCYXNpY3MkZmxpcCwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0
cmluZyRhcHBlbmQsCisgICAgICAgICAgICAnLi4uJywKKyAgICAgICAgICAgIEE0KAorICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JHJlcGxhY2UsCisgICAgICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkUmVnZXgkQWxsLAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JFJlZ2V4JHJlZ2V4KCcoW1xcLiw7Olxcc10pKyQnKSwKKyAgICAgICAgICAgICAgICBfZWxtX2xh
bmckY29yZSRCYXNpY3MkYWx3YXlzKCcnKSwKKyAgICAgICAgICAgICAgICBBMigKKyAgICAgICAg
ICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGpvaW4sCisgICAgICAgICAgICAgICAg
ICAgICcnLAorICAgICAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAgICAg
IF9lbG1fbGFuZyRjb3JlJExpc3QkbWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rp
b24gKF8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXy5tYXRjaDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBBMygKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRmaW5kLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JEF0TW9zdCgxKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEk
U3RyaW5nX0V4dHJhJHNvZnRCcmVha1JlZ2V4cChob3dMb25nKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJpbmcpKSkpKTsKKyAgICB9KTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJp
bmdfZXh0cmEkU3RyaW5nX0V4dHJhJHNvZnRCcmVhayA9IEYyKAorICAgIGZ1bmN0aW9uICh3aWR0
aCwgc3RyaW5nKSB7CisgICAgICAgIHJldHVybiAoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxz
LmNtcCh3aWR0aCwgMCkgPCAxKSA/IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJh
eSgKKyAgICAgICAgICAgIFtdKSA6IEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlz
dCRtYXAsCisgICAgICAgICAgICBmdW5jdGlvbiAoXykgeworICAgICAgICAgICAgICAgIHJldHVy
biBfLm1hdGNoOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIEEzKAorICAgICAgICAgICAg
ICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JGZpbmQsCisgICAgICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkUmVnZXgkQWxsLAorICAgICAgICAgICAgICAgIF9lbG1fY29tbXVuaXR5JHN0cmluZ19l
eHRyYSRTdHJpbmdfRXh0cmEkc29mdEJyZWFrUmVnZXhwKHdpZHRoKSwKKyAgICAgICAgICAgICAg
ICBzdHJpbmcpKTsKKyAgICB9KTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3Ry
aW5nX0V4dHJhJHNvZnRXcmFwV2l0aCA9IEYzKAorICAgIGZ1bmN0aW9uICh3aWR0aCwgc2VwYXJh
dG9yLCBzdHJpbmcpIHsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkU3RyaW5nJGpvaW4sCisgICAgICAgICAgICBzZXBhcmF0b3IsCisgICAgICAgICAgICBB
MihfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHNvZnRCcmVhaywgd2lk
dGgsIHN0cmluZykpOworICAgIH0pOwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRT
dHJpbmdfRXh0cmEkc29mdFdyYXAgPSBGMigKKyAgICBmdW5jdGlvbiAod2lkdGgsIHN0cmluZykg
eworICAgICAgICByZXR1cm4gQTMoX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19F
eHRyYSRzb2Z0V3JhcFdpdGgsIHdpZHRoLCAnXG4nLCBzdHJpbmcpOworICAgIH0pOwordmFyIF9l
bG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkYnJlYWtlciA9IEYzKAorICAg
IGZ1bmN0aW9uICh3aWR0aCwgc3RyaW5nLCBhY2MpIHsKKyAgICAgICAgYnJlYWtlcjoKKyAgICAg
ICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIHZhciBfcDE1ID0gc3RyaW5nOworICAgICAg
ICAgICAgaWYgKF9wMTUgPT09ICcnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFu
ZyRjb3JlJExpc3QkcmV2ZXJzZShhY2MpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB2YXIgX3YxNiA9IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICBfdjE3ID0gQTIo
X2VsbV9sYW5nJGNvcmUkU3RyaW5nJGRyb3BMZWZ0LCB3aWR0aCwgc3RyaW5nKSwKKyAgICAgICAg
ICAgICAgICAgICAgX3YxOCA9IEEyKAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSRMaXN0X29wc1snOjonXSwKKyAgICAgICAgICAgICAgICAgICAgQTMoX2VsbV9sYW5nJGNvcmUk
U3RyaW5nJHNsaWNlLCAwLCB3aWR0aCwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgYWNj
KTsKKyAgICAgICAgICAgICAgICB3aWR0aCA9IF92MTY7CisgICAgICAgICAgICAgICAgc3RyaW5n
ID0gX3YxNzsKKyAgICAgICAgICAgICAgICBhY2MgPSBfdjE4OworICAgICAgICAgICAgICAgIGNv
bnRpbnVlIGJyZWFrZXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBf
ZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJGJyZWFrID0gRjIoCisgICAg
ZnVuY3Rpb24gKHdpZHRoLCBzdHJpbmcpIHsKKyAgICAgICAgcmV0dXJuIChfZWxtX2xhbmckY29y
ZSROYXRpdmVfVXRpbHMuZXEod2lkdGgsIDApIHx8IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGls
cy5lcShzdHJpbmcsICcnKSkgPyBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXko
CisgICAgICAgICAgICBbc3RyaW5nXSkgOiBBMygKKyAgICAgICAgICAgIF9lbG1fY29tbXVuaXR5
JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkYnJlYWtlciwKKyAgICAgICAgICAgIHdpZHRoLAor
ICAgICAgICAgICAgc3RyaW5nLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xp
c3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgIFtdKSk7CisgICAgfSk7Cit2YXIgX2VsbV9j
b21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSR3cmFwV2l0aCA9IEYzKAorICAgIGZ1
bmN0aW9uICh3aWR0aCwgc2VwYXJhdG9yLCBzdHJpbmcpIHsKKyAgICAgICAgcmV0dXJuIEEyKAor
ICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGpvaW4sCisgICAgICAgICAgICBzZXBh
cmF0b3IsCisgICAgICAgICAgICBBMihfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5n
X0V4dHJhJGJyZWFrLCB3aWR0aCwgc3RyaW5nKSk7CisgICAgfSk7Cit2YXIgX2VsbV9jb21tdW5p
dHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSR3cmFwID0gRjIoCisgICAgZnVuY3Rpb24gKHdp
ZHRoLCBzdHJpbmcpIHsKKyAgICAgICAgcmV0dXJuIEEzKF9lbG1fY29tbXVuaXR5JHN0cmluZ19l
eHRyYSRTdHJpbmdfRXh0cmEkd3JhcFdpdGgsIHdpZHRoLCAnXG4nLCBzdHJpbmcpOworICAgIH0p
OwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkcmVwbGFjZVNs
aWNlID0gRjQoCisgICAgZnVuY3Rpb24gKHN1YnN0aXR1dGlvbiwgc3RhcnQsIGVuZCwgc3RyaW5n
KSB7CisgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2lj
c19vcHNbJysrJ10sCisgICAgICAgICAgICBBMyhfZWxtX2xhbmckY29yZSRTdHJpbmckc2xpY2Us
IDAsIHN0YXJ0LCBzdHJpbmcpLAorICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSwKKyAgICAgICAgICAgICAgICBzdWJzdGl0dXRp
b24sCisgICAgICAgICAgICAgICAgQTMoCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRj
b3JlJFN0cmluZyRzbGljZSwKKyAgICAgICAgICAgICAgICAgICAgZW5kLAorICAgICAgICAgICAg
ICAgICAgICBfZWxtX2xhbmckY29yZSRTdHJpbmckbGVuZ3RoKHN0cmluZyksCisgICAgICAgICAg
ICAgICAgICAgIHN0cmluZykpKTsKKyAgICB9KTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdf
ZXh0cmEkU3RyaW5nX0V4dHJhJGluc2VydEF0ID0gRjMoCisgICAgZnVuY3Rpb24gKGluc2VydCwg
cG9zLCBzdHJpbmcpIHsKKyAgICAgICAgcmV0dXJuIEE0KF9lbG1fY29tbXVuaXR5JHN0cmluZ19l
eHRyYSRTdHJpbmdfRXh0cmEkcmVwbGFjZVNsaWNlLCBpbnNlcnQsIHBvcywgcG9zLCBzdHJpbmcp
OworICAgIH0pOwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEk
cmVwbGFjZSA9IEYzKAorICAgIGZ1bmN0aW9uIChzZWFyY2gsIHN1YnN0aXR1dGlvbiwgc3RyaW5n
KSB7CisgICAgICAgIHJldHVybiBBNCgKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4
JHJlcGxhY2UsCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRBbGwsCisgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZWdleCgKKyAgICAgICAgICAgICAgICBfZWxtX2xh
bmckY29yZSRSZWdleCRlc2NhcGUoc2VhcmNoKSksCisgICAgICAgICAgICBmdW5jdGlvbiAoX3Ax
NikgeworICAgICAgICAgICAgICAgIHJldHVybiBzdWJzdGl0dXRpb247CisgICAgICAgICAgICB9
LAorICAgICAgICAgICAgc3RyaW5nKTsKKyAgICB9KTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJp
bmdfZXh0cmEkU3RyaW5nX0V4dHJhJGNoYW5nZUNhc2UgPSBGMigKKyAgICBmdW5jdGlvbiAobXV0
YXRvciwgd29yZCkgeworICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxtX2xhbmck
Y29yZSRNYXliZSR3aXRoRGVmYXVsdCwKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAgQTIo
CisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTWF5YmUkbWFwLAorICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uIChfcDE3KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBfcDE4ID0gX3Ax
NzsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGNvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICBt
dXRhdG9yKF9wMTguXzApLAorICAgICAgICAgICAgICAgICAgICAgICAgX3AxOC5fMSk7CisgICAg
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRTdHJpbmckdW5j
b25zKHdvcmQpKSk7CisgICAgfSk7Cit2YXIgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0
cmluZ19FeHRyYSR0b1NlbnRlbmNlQ2FzZSA9IGZ1bmN0aW9uICh3b3JkKSB7CisgICAgcmV0dXJu
IEEyKF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkY2hhbmdlQ2FzZSwg
X2VsbV9sYW5nJGNvcmUkQ2hhciR0b1VwcGVyLCB3b3JkKTsKK307Cit2YXIgX2VsbV9jb21tdW5p
dHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSR0b1RpdGxlQ2FzZSA9IGZ1bmN0aW9uICh3cykg
eworICAgIHZhciB1cHBlcmNhc2VNYXRjaCA9IEEzKAorICAgICAgICBfZWxtX2xhbmckY29yZSRS
ZWdleCRyZXBsYWNlLAorICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRBbGwsCisgICAgICAg
IF9lbG1fbGFuZyRjb3JlJFJlZ2V4JHJlZ2V4KCdcXHcrJyksCisgICAgICAgIGZ1bmN0aW9uIChf
cDE5KSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0
cmluZ19FeHRyYSR0b1NlbnRlbmNlQ2FzZSgKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiAoXykg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gXy5tYXRjaDsKKyAgICAgICAgICAgICAgICB9
KF9wMTkpKTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuIEE0KAorICAgICAgICBfZWxtX2xhbmck
Y29yZSRSZWdleCRyZXBsYWNlLAorICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRBbGwsCisg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JHJlZ2V4KCdeKFthLXpdKXxcXHMrKFthLXpdKScp
LAorICAgICAgICBmdW5jdGlvbiAoX3AyMCkgeworICAgICAgICAgICAgcmV0dXJuIHVwcGVyY2Fz
ZU1hdGNoKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBfLm1hdGNoOworICAgICAgICAgICAgICAgIH0oX3AyMCkpOworICAgICAgICB9
LAorICAgICAgICB3cyk7Cit9OwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJp
bmdfRXh0cmEkY2xhc3NpZnkgPSBmdW5jdGlvbiAoc3RyaW5nKSB7CisgICAgcmV0dXJuIF9lbG1f
Y29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkdG9TZW50ZW5jZUNhc2UoCisgICAg
ICAgIEEzKAorICAgICAgICAgICAgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19F
eHRyYSRyZXBsYWNlLAorICAgICAgICAgICAgJyAnLAorICAgICAgICAgICAgJycsCisgICAgICAg
ICAgICBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJGNhbWVsaXplKAor
ICAgICAgICAgICAgICAgIEE0KAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRS
ZWdleCRyZXBsYWNlLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRB
bGwsCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JHJlZ2V4KCdbXFxX
X10nKSwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGFsd2F5cygn
ICcpLAorICAgICAgICAgICAgICAgICAgICBzdHJpbmcpKSkpOworfTsKK3ZhciBfZWxtX2NvbW11
bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJGh1bWFuaXplID0gZnVuY3Rpb24gKHN0cmlu
ZykgeworICAgIHJldHVybiBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJh
JHRvU2VudGVuY2VDYXNlKAorICAgICAgICBfZWxtX2xhbmckY29yZSRTdHJpbmckdG9Mb3dlcigK
KyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyR0cmltKAorICAgICAgICAgICAgICAg
IEE0KAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZXBsYWNlLAor
ICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRBbGwsCisgICAgICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JHJlZ2V4KCdfaWQkfFstX1xcc10rJyksCisg
ICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRhbHdheXMoJyAnKSwKKyAg
ICAgICAgICAgICAgICAgICAgQTQoCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmck
Y29yZSRSZWdleCRyZXBsYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkUmVnZXgkQWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVn
ZXgkcmVnZXgoJ1tBLVpdJyksCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX3Ay
MSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGFwcGVuZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0nLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmdW5jdGlvbiAoXykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIF8ubWF0Y2g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0oX3Ay
MSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0cmluZykpKSkpOworfTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5n
X0V4dHJhJGRlY2FwaXRhbGl6ZSA9IGZ1bmN0aW9uICh3b3JkKSB7CisgICAgcmV0dXJuIEEyKF9l
bG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkY2hhbmdlQ2FzZSwgX2VsbV9s
YW5nJGNvcmUkQ2hhciR0b0xvd2VyLCB3b3JkKTsKK307CisKKy8vaW1wb3J0IE5hdGl2ZS5MaXN0
IC8vCisKK3ZhciBfZWxtX2xhbmckY29yZSROYXRpdmVfQXJyYXkgPSBmdW5jdGlvbigpIHsKKwor
Ly8gQSBSUkItVHJlZSBoYXMgdHdvIGRpc3RpbmN0IGRhdGEgdHlwZXMuCisvLyBMZWFmIC0+ICJo
ZWlnaHQiICBpcyBhbHdheXMgMAorLy8gICAgICAgICAidGFibGUiICAgaXMgYW4gYXJyYXkgb2Yg
ZWxlbWVudHMKKy8vIE5vZGUgLT4gImhlaWdodCIgIGlzIGFsd2F5cyBncmVhdGVyIHRoYW4gMAor
Ly8gICAgICAgICAidGFibGUiICAgaXMgYW4gYXJyYXkgb2YgY2hpbGQgbm9kZXMKKy8vICAgICAg
ICAgImxlbmd0aHMiIGlzIGFuIGFycmF5IG9mIGFjY3VtdWxhdGVkIGxlbmd0aHMgb2YgdGhlIGNo
aWxkIG5vZGVzCisKKy8vIE0gaXMgdGhlIG1heGltYWwgdGFibGUgc2l6ZS4gMzIgc2VlbXMgZmFz
dC4gRSBpcyB0aGUgYWxsb3dlZCBpbmNyZWFzZQorLy8gb2Ygc2VhcmNoIHN0ZXBzIHdoZW4gY29u
Y2F0dGluZyB0byBmaW5kIGFuIGluZGV4LiBMb3dlciB2YWx1ZXMgd2lsbAorLy8gZGVjcmVhc2Ug
YmFsYW5jaW5nLCBidXQgd2lsbCBpbmNyZWFzZSBzZWFyY2ggc3RlcHMuCit2YXIgTSA9IDMyOwor
dmFyIEUgPSAyOworCisvLyBBbiBlbXB0eSBhcnJheS4KK3ZhciBlbXB0eSA9IHsKKyAgICBjdG9y
OiAnX0FycmF5JywKKyAgICBoZWlnaHQ6IDAsCisgICAgdGFibGU6IFtdCit9OworCisKK2Z1bmN0
aW9uIGdldChpLCBhcnJheSkKK3sKKyAgICBpZiAoaSA8IDAgfHwgaSA+PSBsZW5ndGgoYXJyYXkp
KQorICAgIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKAorICAgICAgICAgICAgJ0luZGV4ICcg
KyBpICsgJyBpcyBvdXQgb2YgcmFuZ2UuIENoZWNrIHRoZSBsZW5ndGggb2YgJyArCisgICAgICAg
ICAgICAneW91ciBhcnJheSBmaXJzdCBvciB1c2UgZ2V0TWF5YmUgb3IgZ2V0V2l0aERlZmF1bHQu
Jyk7CisgICAgfQorICAgIHJldHVybiB1bnNhZmVHZXQoaSwgYXJyYXkpOworfQorCisKK2Z1bmN0
aW9uIHVuc2FmZUdldChpLCBhcnJheSkKK3sKKyAgICBmb3IgKHZhciB4ID0gYXJyYXkuaGVpZ2h0
OyB4ID4gMDsgeC0tKQorICAgIHsKKyAgICAgICAgdmFyIHNsb3QgPSBpID4+ICh4ICogNSk7Cisg
ICAgICAgIHdoaWxlIChhcnJheS5sZW5ndGhzW3Nsb3RdIDw9IGkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHNsb3QrKzsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2xvdCA+IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIGkgLT0gYXJyYXkubGVuZ3Roc1tzbG90IC0gMV07CisgICAgICAgIH0K
KyAgICAgICAgYXJyYXkgPSBhcnJheS50YWJsZVtzbG90XTsKKyAgICB9CisgICAgcmV0dXJuIGFy
cmF5LnRhYmxlW2ldOworfQorCisKKy8vIFNldHMgdGhlIHZhbHVlIGF0IHRoZSBpbmRleCBpLiBP
bmx5IHRoZSBub2RlcyBsZWFkaW5nIHRvIGkgd2lsbCBnZXQKKy8vIGNvcGllZCBhbmQgdXBkYXRl
ZC4KK2Z1bmN0aW9uIHNldChpLCBpdGVtLCBhcnJheSkKK3sKKyAgICBpZiAoaSA8IDAgfHwgbGVu
Z3RoKGFycmF5KSA8PSBpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFycmF5OworICAgIH0KKyAg
ICByZXR1cm4gdW5zYWZlU2V0KGksIGl0ZW0sIGFycmF5KTsKK30KKworCitmdW5jdGlvbiB1bnNh
ZmVTZXQoaSwgaXRlbSwgYXJyYXkpCit7CisgICAgYXJyYXkgPSBub2RlQ29weShhcnJheSk7CisK
KyAgICBpZiAoYXJyYXkuaGVpZ2h0ID09PSAwKQorICAgIHsKKyAgICAgICAgYXJyYXkudGFibGVb
aV0gPSBpdGVtOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB2YXIgc2xvdCA9IGdl
dFNsb3QoaSwgYXJyYXkpOworICAgICAgICBpZiAoc2xvdCA+IDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGkgLT0gYXJyYXkubGVuZ3Roc1tzbG90IC0gMV07CisgICAgICAgIH0KKyAgICAgICAg
YXJyYXkudGFibGVbc2xvdF0gPSB1bnNhZmVTZXQoaSwgaXRlbSwgYXJyYXkudGFibGVbc2xvdF0p
OworICAgIH0KKyAgICByZXR1cm4gYXJyYXk7Cit9CisKKworZnVuY3Rpb24gaW5pdGlhbGl6ZShs
ZW4sIGYpCit7CisgICAgaWYgKGxlbiA8PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVtcHR5
OworICAgIH0KKyAgICB2YXIgaCA9IE1hdGguZmxvb3IoIE1hdGgubG9nKGxlbikgLyBNYXRoLmxv
ZyhNKSApOworICAgIHJldHVybiBpbml0aWFsaXplXyhmLCBoLCAwLCBsZW4pOworfQorCitmdW5j
dGlvbiBpbml0aWFsaXplXyhmLCBoLCBmcm9tLCB0bykKK3sKKyAgICBpZiAoaCA9PT0gMCkKKyAg
ICB7CisgICAgICAgIHZhciB0YWJsZSA9IG5ldyBBcnJheSgodG8gLSBmcm9tKSAlIChNICsgMSkp
OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYmxlLmxlbmd0aDsgaSsrKQorICAgICAg
ICB7CisgICAgICAgICAgdGFibGVbaV0gPSBmKGZyb20gKyBpKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgY3RvcjogJ19BcnJheScsCisgICAgICAgICAgICBoZWln
aHQ6IDAsCisgICAgICAgICAgICB0YWJsZTogdGFibGUKKyAgICAgICAgfTsKKyAgICB9CisKKyAg
ICB2YXIgc3RlcCA9IE1hdGgucG93KE0sIGgpOworICAgIHZhciB0YWJsZSA9IG5ldyBBcnJheShN
YXRoLmNlaWwoKHRvIC0gZnJvbSkgLyBzdGVwKSk7CisgICAgdmFyIGxlbmd0aHMgPSBuZXcgQXJy
YXkodGFibGUubGVuZ3RoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYmxlLmxlbmd0aDsg
aSsrKQorICAgIHsKKyAgICAgICAgdGFibGVbaV0gPSBpbml0aWFsaXplXyhmLCBoIC0gMSwgZnJv
bSArIChpICogc3RlcCksIE1hdGgubWluKGZyb20gKyAoKGkgKyAxKSAqIHN0ZXApLCB0bykpOwor
ICAgICAgICBsZW5ndGhzW2ldID0gbGVuZ3RoKHRhYmxlW2ldKSArIChpID4gMCA/IGxlbmd0aHNb
aS0xXSA6IDApOworICAgIH0KKyAgICByZXR1cm4geworICAgICAgICBjdG9yOiAnX0FycmF5JywK
KyAgICAgICAgaGVpZ2h0OiBoLAorICAgICAgICB0YWJsZTogdGFibGUsCisgICAgICAgIGxlbmd0
aHM6IGxlbmd0aHMKKyAgICB9OworfQorCitmdW5jdGlvbiBmcm9tTGlzdChsaXN0KQoreworICAg
IGlmIChsaXN0LmN0b3IgPT09ICdbXScpCisgICAgeworICAgICAgICByZXR1cm4gZW1wdHk7Cisg
ICAgfQorCisgICAgLy8gQWxsb2NhdGUgTSBzaXplZCBibG9ja3MgKHRhYmxlKSBhbmQgd3JpdGUg
bGlzdCBlbGVtZW50cyB0byBpdC4KKyAgICB2YXIgdGFibGUgPSBuZXcgQXJyYXkoTSk7CisgICAg
dmFyIG5vZGVzID0gW107CisgICAgdmFyIGkgPSAwOworCisgICAgd2hpbGUgKGxpc3QuY3RvciAh
PT0gJ1tdJykKKyAgICB7CisgICAgICAgIHRhYmxlW2ldID0gbGlzdC5fMDsKKyAgICAgICAgbGlz
dCA9IGxpc3QuXzE7CisgICAgICAgIGkrKzsKKworICAgICAgICAvLyB0YWJsZSBpcyBmdWxsLCBz
byB3ZSBjYW4gcHVzaCBhIGxlYWYgY29udGFpbmluZyBpdCBpbnRvIHRoZQorICAgICAgICAvLyBu
ZXh0IG5vZGUuCisgICAgICAgIGlmIChpID09PSBNKQorICAgICAgICB7CisgICAgICAgICAgICB2
YXIgbGVhZiA9IHsKKyAgICAgICAgICAgICAgICBjdG9yOiAnX0FycmF5JywKKyAgICAgICAgICAg
ICAgICBoZWlnaHQ6IDAsCisgICAgICAgICAgICAgICAgdGFibGU6IHRhYmxlCisgICAgICAgICAg
ICB9OworICAgICAgICAgICAgZnJvbUxpc3RQdXNoKGxlYWYsIG5vZGVzKTsKKyAgICAgICAgICAg
IHRhYmxlID0gbmV3IEFycmF5KE0pOworICAgICAgICAgICAgaSA9IDA7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBNYXliZSB0aGVyZSBpcyBzb21ldGhpbmcgbGVmdCBvbiB0aGUgdGFibGUu
CisgICAgaWYgKGkgPiAwKQorICAgIHsKKyAgICAgICAgdmFyIGxlYWYgPSB7CisgICAgICAgICAg
ICBjdG9yOiAnX0FycmF5JywKKyAgICAgICAgICAgIGhlaWdodDogMCwKKyAgICAgICAgICAgIHRh
YmxlOiB0YWJsZS5zcGxpY2UoMCwgaSkKKyAgICAgICAgfTsKKyAgICAgICAgZnJvbUxpc3RQdXNo
KGxlYWYsIG5vZGVzKTsKKyAgICB9CisKKyAgICAvLyBHbyB0aHJvdWdoIGFsbCBvZiB0aGUgbm9k
ZXMgYW5kIGV2ZW50dWFsbHkgcHVzaCB0aGVtIGludG8gaGlnaGVyIG5vZGVzLgorICAgIGZvciAo
dmFyIGggPSAwOyBoIDwgbm9kZXMubGVuZ3RoIC0gMTsgaCsrKQorICAgIHsKKyAgICAgICAgaWYg
KG5vZGVzW2hdLnRhYmxlLmxlbmd0aCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZyb21M
aXN0UHVzaChub2Rlc1toXSwgbm9kZXMpOworICAgICAgICB9CisgICAgfQorCisgICAgdmFyIGhl
YWQgPSBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXTsKKyAgICBpZiAoaGVhZC5oZWlnaHQgPiAwICYm
IGhlYWQudGFibGUubGVuZ3RoID09PSAxKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGhlYWQudGFi
bGVbMF07CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBoZWFkOworICAg
IH0KK30KKworLy8gUHVzaCBhIG5vZGUgaW50byBhIGhpZ2hlciBub2RlIGFzIGEgY2hpbGQuCitm
dW5jdGlvbiBmcm9tTGlzdFB1c2godG9QdXNoLCBub2RlcykKK3sKKyAgICB2YXIgaCA9IHRvUHVz
aC5oZWlnaHQ7CisKKyAgICAvLyBNYXliZSB0aGUgbm9kZSBvbiB0aGlzIGhlaWdodCBkb2VzIG5v
dCBleGlzdC4KKyAgICBpZiAobm9kZXMubGVuZ3RoID09PSBoKQorICAgIHsKKyAgICAgICAgdmFy
IG5vZGUgPSB7CisgICAgICAgICAgICBjdG9yOiAnX0FycmF5JywKKyAgICAgICAgICAgIGhlaWdo
dDogaCArIDEsCisgICAgICAgICAgICB0YWJsZTogW10sCisgICAgICAgICAgICBsZW5ndGhzOiBb
XQorICAgICAgICB9OworICAgICAgICBub2Rlcy5wdXNoKG5vZGUpOworICAgIH0KKworICAgIG5v
ZGVzW2hdLnRhYmxlLnB1c2godG9QdXNoKTsKKyAgICB2YXIgbGVuID0gbGVuZ3RoKHRvUHVzaCk7
CisgICAgaWYgKG5vZGVzW2hdLmxlbmd0aHMubGVuZ3RoID4gMCkKKyAgICB7CisgICAgICAgIGxl
biArPSBub2Rlc1toXS5sZW5ndGhzW25vZGVzW2hdLmxlbmd0aHMubGVuZ3RoIC0gMV07CisgICAg
fQorICAgIG5vZGVzW2hdLmxlbmd0aHMucHVzaChsZW4pOworCisgICAgaWYgKG5vZGVzW2hdLnRh
YmxlLmxlbmd0aCA9PT0gTSkKKyAgICB7CisgICAgICAgIGZyb21MaXN0UHVzaChub2Rlc1toXSwg
bm9kZXMpOworICAgICAgICBub2Rlc1toXSA9IHsKKyAgICAgICAgICAgIGN0b3I6ICdfQXJyYXkn
LAorICAgICAgICAgICAgaGVpZ2h0OiBoICsgMSwKKyAgICAgICAgICAgIHRhYmxlOiBbXSwKKyAg
ICAgICAgICAgIGxlbmd0aHM6IFtdCisgICAgICAgIH07CisgICAgfQorfQorCisvLyBQdXNoZXMg
YW4gaXRlbSB2aWEgcHVzaF8gdG8gdGhlIGJvdHRvbSByaWdodCBvZiBhIHRyZWUuCitmdW5jdGlv
biBwdXNoKGl0ZW0sIGEpCit7CisgICAgdmFyIHB1c2hlZCA9IHB1c2hfKGl0ZW0sIGEpOworICAg
IGlmIChwdXNoZWQgIT09IG51bGwpCisgICAgeworICAgICAgICByZXR1cm4gcHVzaGVkOworICAg
IH0KKworICAgIHZhciBuZXdUcmVlID0gY3JlYXRlKGl0ZW0sIGEuaGVpZ2h0KTsKKyAgICByZXR1
cm4gc2libGlzZShhLCBuZXdUcmVlKTsKK30KKworLy8gUmVjdXJzaXZlbHkgdHJpZXMgdG8gcHVz
aCBhbiBpdGVtIHRvIHRoZSBib3R0b20tcmlnaHQgbW9zdAorLy8gdHJlZSBwb3NzaWJsZS4gSWYg
dGhlcmUgaXMgbm8gc3BhY2UgbGVmdCBmb3IgdGhlIGl0ZW0sCisvLyBudWxsIHdpbGwgYmUgcmV0
dXJuZWQuCitmdW5jdGlvbiBwdXNoXyhpdGVtLCBhKQoreworICAgIC8vIEhhbmRsZSByZXN1cnNp
b24gc3RvcCBhdCBsZWFmIGxldmVsLgorICAgIGlmIChhLmhlaWdodCA9PT0gMCkKKyAgICB7Cisg
ICAgICAgIGlmIChhLnRhYmxlLmxlbmd0aCA8IE0pCisgICAgICAgIHsKKyAgICAgICAgICAgIHZh
ciBuZXdBID0geworICAgICAgICAgICAgICAgIGN0b3I6ICdfQXJyYXknLAorICAgICAgICAgICAg
ICAgIGhlaWdodDogMCwKKyAgICAgICAgICAgICAgICB0YWJsZTogYS50YWJsZS5zbGljZSgpCisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgbmV3QS50YWJsZS5wdXNoKGl0ZW0pOworICAgICAg
ICAgICAgcmV0dXJuIG5ld0E7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZWN1cnNp
dmVseSBwdXNoCisgICAgdmFyIHB1c2hlZCA9IHB1c2hfKGl0ZW0sIGJvdFJpZ2h0KGEpKTsKKwor
ICAgIC8vIFRoZXJlIHdhcyBzcGFjZSBpbiB0aGUgYm90dG9tIHJpZ2h0IHRyZWUsIHNvIHRoZSBz
bG90IHdpbGwKKyAgICAvLyBiZSB1cGRhdGVkLgorICAgIGlmIChwdXNoZWQgIT09IG51bGwpCisg
ICAgeworICAgICAgICB2YXIgbmV3QSA9IG5vZGVDb3B5KGEpOworICAgICAgICBuZXdBLnRhYmxl
W25ld0EudGFibGUubGVuZ3RoIC0gMV0gPSBwdXNoZWQ7CisgICAgICAgIG5ld0EubGVuZ3Roc1tu
ZXdBLmxlbmd0aHMubGVuZ3RoIC0gMV0rKzsKKyAgICAgICAgcmV0dXJuIG5ld0E7CisgICAgfQor
CisgICAgLy8gV2hlbiB0aGVyZSB3YXMgbm8gc3BhY2UgbGVmdCwgY2hlY2sgaWYgdGhlcmUgaXMg
c3BhY2UgbGVmdAorICAgIC8vIGZvciBhIG5ldyBzbG90IHdpdGggYSB0cmVlIHdoaWNoIGNvbnRh
aW5zIG9ubHkgdGhlIGl0ZW0KKyAgICAvLyBhdCB0aGUgYm90dG9tLgorICAgIGlmIChhLnRhYmxl
Lmxlbmd0aCA8IE0pCisgICAgeworICAgICAgICB2YXIgbmV3U2xvdCA9IGNyZWF0ZShpdGVtLCBh
LmhlaWdodCAtIDEpOworICAgICAgICB2YXIgbmV3QSA9IG5vZGVDb3B5KGEpOworICAgICAgICBu
ZXdBLnRhYmxlLnB1c2gobmV3U2xvdCk7CisgICAgICAgIG5ld0EubGVuZ3Rocy5wdXNoKG5ld0Eu
bGVuZ3Roc1tuZXdBLmxlbmd0aHMubGVuZ3RoIC0gMV0gKyBsZW5ndGgobmV3U2xvdCkpOworICAg
ICAgICByZXR1cm4gbmV3QTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG51bGw7CisgICAgfQorfQorCisvLyBDb252ZXJ0cyBhbiBhcnJheSBpbnRvIGEgbGlzdCBvZiBl
bGVtZW50cy4KK2Z1bmN0aW9uIHRvTGlzdChhKQoreworICAgIHJldHVybiB0b0xpc3RfKF9lbG1f
bGFuZyRjb3JlJE5hdGl2ZV9MaXN0Lk5pbCwgYSk7Cit9CisKK2Z1bmN0aW9uIHRvTGlzdF8obGlz
dCwgYSkKK3sKKyAgICBmb3IgKHZhciBpID0gYS50YWJsZS5sZW5ndGggLSAxOyBpID49IDA7IGkt
LSkKKyAgICB7CisgICAgICAgIGxpc3QgPQorICAgICAgICAgICAgYS5oZWlnaHQgPT09IDAKKyAg
ICAgICAgICAgICAgICA/IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LkNvbnMoYS50YWJsZVtp
XSwgbGlzdCkKKyAgICAgICAgICAgICAgICA6IHRvTGlzdF8obGlzdCwgYS50YWJsZVtpXSk7Cisg
ICAgfQorICAgIHJldHVybiBsaXN0OworfQorCisvLyBNYXBzIGEgZnVuY3Rpb24gb3ZlciB0aGUg
ZWxlbWVudHMgb2YgYW4gYXJyYXkuCitmdW5jdGlvbiBtYXAoZiwgYSkKK3sKKyAgICB2YXIgbmV3
QSA9IHsKKyAgICAgICAgY3RvcjogJ19BcnJheScsCisgICAgICAgIGhlaWdodDogYS5oZWlnaHQs
CisgICAgICAgIHRhYmxlOiBuZXcgQXJyYXkoYS50YWJsZS5sZW5ndGgpCisgICAgfTsKKyAgICBp
ZiAoYS5oZWlnaHQgPiAwKQorICAgIHsKKyAgICAgICAgbmV3QS5sZW5ndGhzID0gYS5sZW5ndGhz
OworICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEudGFibGUubGVuZ3RoOyBpKyspCisg
ICAgeworICAgICAgICBuZXdBLnRhYmxlW2ldID0KKyAgICAgICAgICAgIGEuaGVpZ2h0ID09PSAw
CisgICAgICAgICAgICAgICAgPyBmKGEudGFibGVbaV0pCisgICAgICAgICAgICAgICAgOiBtYXAo
ZiwgYS50YWJsZVtpXSk7CisgICAgfQorICAgIHJldHVybiBuZXdBOworfQorCisvLyBNYXBzIGEg
ZnVuY3Rpb24gb3ZlciB0aGUgZWxlbWVudHMgd2l0aCB0aGVpciBpbmRleCBhcyBmaXJzdCBhcmd1
bWVudC4KK2Z1bmN0aW9uIGluZGV4ZWRNYXAoZiwgYSkKK3sKKyAgICByZXR1cm4gaW5kZXhlZE1h
cF8oZiwgYSwgMCk7Cit9CisKK2Z1bmN0aW9uIGluZGV4ZWRNYXBfKGYsIGEsIGZyb20pCit7Cisg
ICAgdmFyIG5ld0EgPSB7CisgICAgICAgIGN0b3I6ICdfQXJyYXknLAorICAgICAgICBoZWlnaHQ6
IGEuaGVpZ2h0LAorICAgICAgICB0YWJsZTogbmV3IEFycmF5KGEudGFibGUubGVuZ3RoKQorICAg
IH07CisgICAgaWYgKGEuaGVpZ2h0ID4gMCkKKyAgICB7CisgICAgICAgIG5ld0EubGVuZ3RocyA9
IGEubGVuZ3RoczsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLnRhYmxlLmxlbmd0
aDsgaSsrKQorICAgIHsKKyAgICAgICAgbmV3QS50YWJsZVtpXSA9CisgICAgICAgICAgICBhLmhl
aWdodCA9PT0gMAorICAgICAgICAgICAgICAgID8gQTIoZiwgZnJvbSArIGksIGEudGFibGVbaV0p
CisgICAgICAgICAgICAgICAgOiBpbmRleGVkTWFwXyhmLCBhLnRhYmxlW2ldLCBpID09IDAgPyBm
cm9tIDogZnJvbSArIGEubGVuZ3Roc1tpIC0gMV0pOworICAgIH0KKyAgICByZXR1cm4gbmV3QTsK
K30KKworZnVuY3Rpb24gZm9sZGwoZiwgYiwgYSkKK3sKKyAgICBpZiAoYS5oZWlnaHQgPT09IDAp
CisgICAgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEudGFibGUubGVuZ3RoOyBpKysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGIgPSBBMihmLCBhLnRhYmxlW2ldLCBiKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGEudGFibGUubGVuZ3RoOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGIgPSBmb2xkbChm
LCBiLCBhLnRhYmxlW2ldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gYjsKK30KKwor
ZnVuY3Rpb24gZm9sZHIoZiwgYiwgYSkKK3sKKyAgICBpZiAoYS5oZWlnaHQgPT09IDApCisgICAg
eworICAgICAgICBmb3IgKHZhciBpID0gYS50YWJsZS5sZW5ndGg7IGktLTsgKQorICAgICAgICB7
CisgICAgICAgICAgICBiID0gQTIoZiwgYS50YWJsZVtpXSwgYik7CisgICAgICAgIH0KKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IGEudGFibGUubGVuZ3RoOyBp
LS07ICkKKyAgICAgICAgeworICAgICAgICAgICAgYiA9IGZvbGRyKGYsIGIsIGEudGFibGVbaV0p
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBiOworfQorCisvLyBUT0RPOiBjdXJyZW50
bHksIGl0IHNsaWNlcyB0aGUgcmlnaHQsIHRoZW4gdGhlIGxlZnQuIFRoaXMgY2FuIGJlCisvLyBv
cHRpbWl6ZWQuCitmdW5jdGlvbiBzbGljZShmcm9tLCB0bywgYSkKK3sKKyAgICBpZiAoZnJvbSA8
IDApCisgICAgeworICAgICAgICBmcm9tICs9IGxlbmd0aChhKTsKKyAgICB9CisgICAgaWYgKHRv
IDwgMCkKKyAgICB7CisgICAgICAgIHRvICs9IGxlbmd0aChhKTsKKyAgICB9CisgICAgcmV0dXJu
IHNsaWNlTGVmdChmcm9tLCBzbGljZVJpZ2h0KHRvLCBhKSk7Cit9CisKK2Z1bmN0aW9uIHNsaWNl
UmlnaHQodG8sIGEpCit7CisgICAgaWYgKHRvID09PSBsZW5ndGgoYSkpCisgICAgeworICAgICAg
ICByZXR1cm4gYTsKKyAgICB9CisKKyAgICAvLyBIYW5kbGUgbGVhZiBsZXZlbC4KKyAgICBpZiAo
YS5oZWlnaHQgPT09IDApCisgICAgeworICAgICAgICB2YXIgbmV3QSA9IHsgY3RvcjonX0FycmF5
JywgaGVpZ2h0OjAgfTsKKyAgICAgICAgbmV3QS50YWJsZSA9IGEudGFibGUuc2xpY2UoMCwgdG8p
OworICAgICAgICByZXR1cm4gbmV3QTsKKyAgICB9CisKKyAgICAvLyBTbGljZSB0aGUgcmlnaHQg
cmVjdXJzaXZlbHkuCisgICAgdmFyIHJpZ2h0ID0gZ2V0U2xvdCh0bywgYSk7CisgICAgdmFyIHNs
aWNlZCA9IHNsaWNlUmlnaHQodG8gLSAocmlnaHQgPiAwID8gYS5sZW5ndGhzW3JpZ2h0IC0gMV0g
OiAwKSwgYS50YWJsZVtyaWdodF0pOworCisgICAgLy8gTWF5YmUgdGhlIGEgbm9kZSBpcyBub3Qg
ZXZlbiBuZWVkZWQsIGFzIHNsaWNlZCBjb250YWlucyB0aGUgd2hvbGUgc2xpY2UuCisgICAgaWYg
KHJpZ2h0ID09PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNsaWNlZDsKKyAgICB9CisKKyAg
ICAvLyBDcmVhdGUgbmV3IG5vZGUuCisgICAgdmFyIG5ld0EgPSB7CisgICAgICAgIGN0b3I6ICdf
QXJyYXknLAorICAgICAgICBoZWlnaHQ6IGEuaGVpZ2h0LAorICAgICAgICB0YWJsZTogYS50YWJs
ZS5zbGljZSgwLCByaWdodCksCisgICAgICAgIGxlbmd0aHM6IGEubGVuZ3Rocy5zbGljZSgwLCBy
aWdodCkKKyAgICB9OworICAgIGlmIChzbGljZWQudGFibGUubGVuZ3RoID4gMCkKKyAgICB7Cisg
ICAgICAgIG5ld0EudGFibGVbcmlnaHRdID0gc2xpY2VkOworICAgICAgICBuZXdBLmxlbmd0aHNb
cmlnaHRdID0gbGVuZ3RoKHNsaWNlZCkgKyAocmlnaHQgPiAwID8gbmV3QS5sZW5ndGhzW3JpZ2h0
IC0gMV0gOiAwKTsKKyAgICB9CisgICAgcmV0dXJuIG5ld0E7Cit9CisKK2Z1bmN0aW9uIHNsaWNl
TGVmdChmcm9tLCBhKQoreworICAgIGlmIChmcm9tID09PSAwKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGE7CisgICAgfQorCisgICAgLy8gSGFuZGxlIGxlYWYgbGV2ZWwuCisgICAgaWYgKGEuaGVp
Z2h0ID09PSAwKQorICAgIHsKKyAgICAgICAgdmFyIG5ld0EgPSB7IGN0b3I6J19BcnJheScsIGhl
aWdodDowIH07CisgICAgICAgIG5ld0EudGFibGUgPSBhLnRhYmxlLnNsaWNlKGZyb20sIGEudGFi
bGUubGVuZ3RoICsgMSk7CisgICAgICAgIHJldHVybiBuZXdBOworICAgIH0KKworICAgIC8vIFNs
aWNlIHRoZSBsZWZ0IHJlY3Vyc2l2ZWx5LgorICAgIHZhciBsZWZ0ID0gZ2V0U2xvdChmcm9tLCBh
KTsKKyAgICB2YXIgc2xpY2VkID0gc2xpY2VMZWZ0KGZyb20gLSAobGVmdCA+IDAgPyBhLmxlbmd0
aHNbbGVmdCAtIDFdIDogMCksIGEudGFibGVbbGVmdF0pOworCisgICAgLy8gTWF5YmUgdGhlIGEg
bm9kZSBpcyBub3QgZXZlbiBuZWVkZWQsIGFzIHNsaWNlZCBjb250YWlucyB0aGUgd2hvbGUgc2xp
Y2UuCisgICAgaWYgKGxlZnQgPT09IGEudGFibGUubGVuZ3RoIC0gMSkKKyAgICB7CisgICAgICAg
IHJldHVybiBzbGljZWQ7CisgICAgfQorCisgICAgLy8gQ3JlYXRlIG5ldyBub2RlLgorICAgIHZh
ciBuZXdBID0geworICAgICAgICBjdG9yOiAnX0FycmF5JywKKyAgICAgICAgaGVpZ2h0OiBhLmhl
aWdodCwKKyAgICAgICAgdGFibGU6IGEudGFibGUuc2xpY2UobGVmdCwgYS50YWJsZS5sZW5ndGgg
KyAxKSwKKyAgICAgICAgbGVuZ3RoczogbmV3IEFycmF5KGEudGFibGUubGVuZ3RoIC0gbGVmdCkK
KyAgICB9OworICAgIG5ld0EudGFibGVbMF0gPSBzbGljZWQ7CisgICAgdmFyIGxlbiA9IDA7Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdBLnRhYmxlLmxlbmd0aDsgaSsrKQorICAgIHsKKyAg
ICAgICAgbGVuICs9IGxlbmd0aChuZXdBLnRhYmxlW2ldKTsKKyAgICAgICAgbmV3QS5sZW5ndGhz
W2ldID0gbGVuOworICAgIH0KKworICAgIHJldHVybiBuZXdBOworfQorCisvLyBBcHBlbmRzIHR3
byB0cmVlcy4KK2Z1bmN0aW9uIGFwcGVuZChhLGIpCit7CisgICAgaWYgKGEudGFibGUubGVuZ3Ro
ID09PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGI7CisgICAgfQorICAgIGlmIChiLnRhYmxl
Lmxlbmd0aCA9PT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBhOworICAgIH0KKworICAgIHZh
ciBjID0gYXBwZW5kXyhhLCBiKTsKKworICAgIC8vIENoZWNrIGlmIGJvdGggbm9kZXMgY2FuIGJl
IGNydW5zaGVkIHRvZ2V0aGVyLgorICAgIGlmIChjWzBdLnRhYmxlLmxlbmd0aCArIGNbMV0udGFi
bGUubGVuZ3RoIDw9IE0pCisgICAgeworICAgICAgICBpZiAoY1swXS50YWJsZS5sZW5ndGggPT09
IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjWzFdOworICAgICAgICB9CisgICAg
ICAgIGlmIChjWzFdLnRhYmxlLmxlbmd0aCA9PT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGNbMF07CisgICAgICAgIH0KKworICAgICAgICAvLyBBZGp1c3QgLnRhYmxlIGFuZCAu
bGVuZ3RocworICAgICAgICBjWzBdLnRhYmxlID0gY1swXS50YWJsZS5jb25jYXQoY1sxXS50YWJs
ZSk7CisgICAgICAgIGlmIChjWzBdLmhlaWdodCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAg
IHZhciBsZW4gPSBsZW5ndGgoY1swXSk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGNbMV0ubGVuZ3Rocy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBjWzFdLmxlbmd0aHNbaV0gKz0gbGVuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY1sw
XS5sZW5ndGhzID0gY1swXS5sZW5ndGhzLmNvbmNhdChjWzFdLmxlbmd0aHMpOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIGNbMF07CisgICAgfQorCisgICAgaWYgKGNbMF0uaGVpZ2h0ID4g
MCkKKyAgICB7CisgICAgICAgIHZhciB0b1JlbW92ZSA9IGNhbGNUb1JlbW92ZShhLCBiKTsKKyAg
ICAgICAgaWYgKHRvUmVtb3ZlID4gRSkKKyAgICAgICAgeworICAgICAgICAgICAgYyA9IHNodWZm
bGUoY1swXSwgY1sxXSwgdG9SZW1vdmUpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IHNpYmxpc2UoY1swXSwgY1sxXSk7Cit9CisKKy8vIFJldHVybnMgYW4gYXJyYXkgb2YgdHdvIG5v
ZGVzOyByaWdodCBhbmQgbGVmdC4gT25lIG5vZGUgX21heV8gYmUgZW1wdHkuCitmdW5jdGlvbiBh
cHBlbmRfKGEsIGIpCit7CisgICAgaWYgKGEuaGVpZ2h0ID09PSAwICYmIGIuaGVpZ2h0ID09PSAw
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFthLCBiXTsKKyAgICB9CisKKyAgICBpZiAoYS5oZWln
aHQgIT09IDEgfHwgYi5oZWlnaHQgIT09IDEpCisgICAgeworICAgICAgICBpZiAoYS5oZWlnaHQg
PT09IGIuaGVpZ2h0KQorICAgICAgICB7CisgICAgICAgICAgICBhID0gbm9kZUNvcHkoYSk7Cisg
ICAgICAgICAgICBiID0gbm9kZUNvcHkoYik7CisgICAgICAgICAgICB2YXIgYXBwZW5kZWQgPSBh
cHBlbmRfKGJvdFJpZ2h0KGEpLCBib3RMZWZ0KGIpKTsKKworICAgICAgICAgICAgaW5zZXJ0Umln
aHQoYSwgYXBwZW5kZWRbMV0pOworICAgICAgICAgICAgaW5zZXJ0TGVmdChiLCBhcHBlbmRlZFsw
XSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYS5oZWlnaHQgPiBiLmhlaWdodCkKKyAg
ICAgICAgeworICAgICAgICAgICAgYSA9IG5vZGVDb3B5KGEpOworICAgICAgICAgICAgdmFyIGFw
cGVuZGVkID0gYXBwZW5kXyhib3RSaWdodChhKSwgYik7CisKKyAgICAgICAgICAgIGluc2VydFJp
Z2h0KGEsIGFwcGVuZGVkWzBdKTsKKyAgICAgICAgICAgIGIgPSBwYXJlbnRpc2UoYXBwZW5kZWRb
MV0sIGFwcGVuZGVkWzFdLmhlaWdodCArIDEpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgYiA9IG5vZGVDb3B5KGIpOworICAgICAgICAgICAgdmFyIGFw
cGVuZGVkID0gYXBwZW5kXyhhLCBib3RMZWZ0KGIpKTsKKworICAgICAgICAgICAgdmFyIGxlZnQg
PSBhcHBlbmRlZFswXS50YWJsZS5sZW5ndGggPT09IDAgPyAwIDogMTsKKyAgICAgICAgICAgIHZh
ciByaWdodCA9IGxlZnQgPT09IDAgPyAxIDogMDsKKyAgICAgICAgICAgIGluc2VydExlZnQoYiwg
YXBwZW5kZWRbbGVmdF0pOworICAgICAgICAgICAgYSA9IHBhcmVudGlzZShhcHBlbmRlZFtyaWdo
dF0sIGFwcGVuZGVkW3JpZ2h0XS5oZWlnaHQgKyAxKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIENoZWNrIGlmIGJhbGFuY2luZyBpcyBuZWVkZWQgYW5kIHJldHVybiBiYXNlZCBvbiB0aGF0
LgorICAgIGlmIChhLnRhYmxlLmxlbmd0aCA9PT0gMCB8fCBiLnRhYmxlLmxlbmd0aCA9PT0gMCkK
KyAgICB7CisgICAgICAgIHJldHVybiBbYSwgYl07CisgICAgfQorCisgICAgdmFyIHRvUmVtb3Zl
ID0gY2FsY1RvUmVtb3ZlKGEsIGIpOworICAgIGlmICh0b1JlbW92ZSA8PSBFKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFthLCBiXTsKKyAgICB9CisgICAgcmV0dXJuIHNodWZmbGUoYSwgYiwgdG9S
ZW1vdmUpOworfQorCisvLyBIZWxwZXJmdW5jdGlvbnMgZm9yIGFwcGVuZF8uIFJlcGxhY2VzIGEg
Y2hpbGQgbm9kZSBhdCB0aGUgc2lkZSBvZiB0aGUgcGFyZW50LgorZnVuY3Rpb24gaW5zZXJ0Umln
aHQocGFyZW50LCBub2RlKQoreworICAgIHZhciBpbmRleCA9IHBhcmVudC50YWJsZS5sZW5ndGgg
LSAxOworICAgIHBhcmVudC50YWJsZVtpbmRleF0gPSBub2RlOworICAgIHBhcmVudC5sZW5ndGhz
W2luZGV4XSA9IGxlbmd0aChub2RlKTsKKyAgICBwYXJlbnQubGVuZ3Roc1tpbmRleF0gKz0gaW5k
ZXggPiAwID8gcGFyZW50Lmxlbmd0aHNbaW5kZXggLSAxXSA6IDA7Cit9CisKK2Z1bmN0aW9uIGlu
c2VydExlZnQocGFyZW50LCBub2RlKQoreworICAgIGlmIChub2RlLnRhYmxlLmxlbmd0aCA+IDAp
CisgICAgeworICAgICAgICBwYXJlbnQudGFibGVbMF0gPSBub2RlOworICAgICAgICBwYXJlbnQu
bGVuZ3Roc1swXSA9IGxlbmd0aChub2RlKTsKKworICAgICAgICB2YXIgbGVuID0gbGVuZ3RoKHBh
cmVudC50YWJsZVswXSk7CisgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgcGFyZW50Lmxlbmd0
aHMubGVuZ3RoOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGxlbiArPSBsZW5ndGgocGFy
ZW50LnRhYmxlW2ldKTsKKyAgICAgICAgICAgIHBhcmVudC5sZW5ndGhzW2ldID0gbGVuOworICAg
ICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHBhcmVudC50YWJsZS5zaGlm
dCgpOworICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHBhcmVudC5sZW5ndGhzLmxlbmd0aDsg
aSsrKQorICAgICAgICB7CisgICAgICAgICAgICBwYXJlbnQubGVuZ3Roc1tpXSA9IHBhcmVudC5s
ZW5ndGhzW2ldIC0gcGFyZW50Lmxlbmd0aHNbMF07CisgICAgICAgIH0KKyAgICAgICAgcGFyZW50
Lmxlbmd0aHMuc2hpZnQoKTsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdGhlIGV4dHJhIHNlYXJj
aCBzdGVwcyBmb3IgRS4gUmVmZXIgdG8gdGhlIHBhcGVyLgorZnVuY3Rpb24gY2FsY1RvUmVtb3Zl
KGEsIGIpCit7CisgICAgdmFyIHN1Ykxlbmd0aHMgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgYS50YWJsZS5sZW5ndGg7IGkrKykKKyAgICB7CisgICAgICAgIHN1Ykxlbmd0aHMgKz0gYS50
YWJsZVtpXS50YWJsZS5sZW5ndGg7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYi50
YWJsZS5sZW5ndGg7IGkrKykKKyAgICB7CisgICAgICAgIHN1Ykxlbmd0aHMgKz0gYi50YWJsZVtp
XS50YWJsZS5sZW5ndGg7CisgICAgfQorCisgICAgdmFyIHRvUmVtb3ZlID0gYS50YWJsZS5sZW5n
dGggKyBiLnRhYmxlLmxlbmd0aDsKKyAgICByZXR1cm4gdG9SZW1vdmUgLSAoTWF0aC5mbG9vcigo
c3ViTGVuZ3RocyAtIDEpIC8gTSkgKyAxKTsKK30KKworLy8gZ2V0Miwgc2V0MiBhbmQgc2F2ZVNs
b3QgYXJlIGhlbHBlcnMgZm9yIGFjY2Vzc2luZyBlbGVtZW50cyBvdmVyIHR3byBhcnJheXMuCitm
dW5jdGlvbiBnZXQyKGEsIGIsIGluZGV4KQoreworICAgIHJldHVybiBpbmRleCA8IGEubGVuZ3Ro
CisgICAgICAgID8gYVtpbmRleF0KKyAgICAgICAgOiBiW2luZGV4IC0gYS5sZW5ndGhdOworfQor
CitmdW5jdGlvbiBzZXQyKGEsIGIsIGluZGV4LCB2YWx1ZSkKK3sKKyAgICBpZiAoaW5kZXggPCBh
Lmxlbmd0aCkKKyAgICB7CisgICAgICAgIGFbaW5kZXhdID0gdmFsdWU7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIGJbaW5kZXggLSBhLmxlbmd0aF0gPSB2YWx1ZTsKKyAgICB9Cit9
CisKK2Z1bmN0aW9uIHNhdmVTbG90KGEsIGIsIGluZGV4LCBzbG90KQoreworICAgIHNldDIoYS50
YWJsZSwgYi50YWJsZSwgaW5kZXgsIHNsb3QpOworCisgICAgdmFyIGwgPSAoaW5kZXggPT09IDAg
fHwgaW5kZXggPT09IGEubGVuZ3Rocy5sZW5ndGgpCisgICAgICAgID8gMAorICAgICAgICA6IGdl
dDIoYS5sZW5ndGhzLCBhLmxlbmd0aHMsIGluZGV4IC0gMSk7CisKKyAgICBzZXQyKGEubGVuZ3Ro
cywgYi5sZW5ndGhzLCBpbmRleCwgbCArIGxlbmd0aChzbG90KSk7Cit9CisKKy8vIENyZWF0ZXMg
YSBub2RlIG9yIGxlYWYgd2l0aCBhIGdpdmVuIGxlbmd0aCBhdCB0aGVpciBhcnJheXMgZm9yIHBl
cmZvbWFuY2UuCisvLyBJcyBvbmx5IHVzZWQgYnkgc2h1ZmZsZS4KK2Z1bmN0aW9uIGNyZWF0ZU5v
ZGUoaCwgbGVuZ3RoKQoreworICAgIGlmIChsZW5ndGggPCAwKQorICAgIHsKKyAgICAgICAgbGVu
Z3RoID0gMDsKKyAgICB9CisgICAgdmFyIGEgPSB7CisgICAgICAgIGN0b3I6ICdfQXJyYXknLAor
ICAgICAgICBoZWlnaHQ6IGgsCisgICAgICAgIHRhYmxlOiBuZXcgQXJyYXkobGVuZ3RoKQorICAg
IH07CisgICAgaWYgKGggPiAwKQorICAgIHsKKyAgICAgICAgYS5sZW5ndGhzID0gbmV3IEFycmF5
KGxlbmd0aCk7CisgICAgfQorICAgIHJldHVybiBhOworfQorCisvLyBSZXR1cm5zIGFuIGFycmF5
IG9mIHR3byBiYWxhbmNlZCBub2Rlcy4KK2Z1bmN0aW9uIHNodWZmbGUoYSwgYiwgdG9SZW1vdmUp
Cit7CisgICAgdmFyIG5ld0EgPSBjcmVhdGVOb2RlKGEuaGVpZ2h0LCBNYXRoLm1pbihNLCBhLnRh
YmxlLmxlbmd0aCArIGIudGFibGUubGVuZ3RoIC0gdG9SZW1vdmUpKTsKKyAgICB2YXIgbmV3QiA9
IGNyZWF0ZU5vZGUoYS5oZWlnaHQsIG5ld0EudGFibGUubGVuZ3RoIC0gKGEudGFibGUubGVuZ3Ro
ICsgYi50YWJsZS5sZW5ndGggLSB0b1JlbW92ZSkpOworCisgICAgLy8gU2tpcCB0aGUgc2xvdHMg
d2l0aCBzaXplIE0uIE1vcmUgcHJlY2lzZTogY29weSB0aGUgc2xvdCByZWZlcmVuY2VzCisgICAg
Ly8gdG8gdGhlIG5ldyBub2RlCisgICAgdmFyIHJlYWQgPSAwOworICAgIHdoaWxlIChnZXQyKGEu
dGFibGUsIGIudGFibGUsIHJlYWQpLnRhYmxlLmxlbmd0aCAlIE0gPT09IDApCisgICAgeworICAg
ICAgICBzZXQyKG5ld0EudGFibGUsIG5ld0IudGFibGUsIHJlYWQsIGdldDIoYS50YWJsZSwgYi50
YWJsZSwgcmVhZCkpOworICAgICAgICBzZXQyKG5ld0EubGVuZ3RocywgbmV3Qi5sZW5ndGhzLCBy
ZWFkLCBnZXQyKGEubGVuZ3RocywgYi5sZW5ndGhzLCByZWFkKSk7CisgICAgICAgIHJlYWQrKzsK
KyAgICB9CisKKyAgICAvLyBQdWxsaW5nIGl0ZW1zIGZyb20gbGVmdCB0byByaWdodCwgY2FjaGlu
ZyBpbiBhIHNsb3QgYmVmb3JlIHdyaXRpbmcKKyAgICAvLyBpdCBpbnRvIHRoZSBuZXcgbm9kZXMu
CisgICAgdmFyIHdyaXRlID0gcmVhZDsKKyAgICB2YXIgc2xvdCA9IG5ldyBjcmVhdGVOb2RlKGEu
aGVpZ2h0IC0gMSwgMCk7CisgICAgdmFyIGZyb20gPSAwOworCisgICAgLy8gSWYgdGhlIGN1cnJl
bnQgc2xvdCBpcyBzdGlsbCBjb250YWluaW5nIGRhdGEsIHRoZW4gdGhlcmUgd2lsbCBiZSBhdAor
ICAgIC8vIGxlYXN0IG9uZSBtb3JlIHdyaXRlLCBzbyB3ZSBkbyBub3QgYnJlYWsgdGhpcyBsb29w
IHlldC4KKyAgICB3aGlsZSAocmVhZCAtIHdyaXRlIC0gKHNsb3QudGFibGUubGVuZ3RoID4gMCA/
IDEgOiAwKSA8IHRvUmVtb3ZlKQorICAgIHsKKyAgICAgICAgLy8gRmluZCBvdXQgdGhlIG1heCBw
b3NzaWJsZSBpdGVtcyBmb3IgY29weWluZy4KKyAgICAgICAgdmFyIHNvdXJjZSA9IGdldDIoYS50
YWJsZSwgYi50YWJsZSwgcmVhZCk7CisgICAgICAgIHZhciB0byA9IE1hdGgubWluKE0gLSBzbG90
LnRhYmxlLmxlbmd0aCwgc291cmNlLnRhYmxlLmxlbmd0aCk7CisKKyAgICAgICAgLy8gQ29weSBh
bmQgYWRqdXN0IHNpemUgdGFibGUuCisgICAgICAgIHNsb3QudGFibGUgPSBzbG90LnRhYmxlLmNv
bmNhdChzb3VyY2UudGFibGUuc2xpY2UoZnJvbSwgdG8pKTsKKyAgICAgICAgaWYgKHNsb3QuaGVp
Z2h0ID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGxlbiA9IHNsb3QubGVuZ3Rocy5s
ZW5ndGg7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gbGVuOyBpIDwgbGVuICsgdG8gLSBmcm9t
OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2xvdC5sZW5ndGhzW2ldID0g
bGVuZ3RoKHNsb3QudGFibGVbaV0pOworICAgICAgICAgICAgICAgIHNsb3QubGVuZ3Roc1tpXSAr
PSAoaSA+IDAgPyBzbG90Lmxlbmd0aHNbaSAtIDFdIDogMCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBmcm9tICs9IHRvOworCisgICAgICAgIC8vIE9ubHkgcHJvY2VlZCB0
byBuZXh0IHNsb3RzW2ldIGlmIHRoZSBjdXJyZW50IG9uZSB3YXMKKyAgICAgICAgLy8gZnVsbHkg
Y29waWVkLgorICAgICAgICBpZiAoc291cmNlLnRhYmxlLmxlbmd0aCA8PSB0bykKKyAgICAgICAg
eworICAgICAgICAgICAgcmVhZCsrOyBmcm9tID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IE9ubHkgY3JlYXRlIGEgbmV3IHNsb3QgaWYgdGhlIGN1cnJlbnQgb25lIGlzIGZpbGxlZCB1cC4K
KyAgICAgICAgaWYgKHNsb3QudGFibGUubGVuZ3RoID09PSBNKQorICAgICAgICB7CisgICAgICAg
ICAgICBzYXZlU2xvdChuZXdBLCBuZXdCLCB3cml0ZSwgc2xvdCk7CisgICAgICAgICAgICBzbG90
ID0gY3JlYXRlTm9kZShhLmhlaWdodCAtIDEsIDApOworICAgICAgICAgICAgd3JpdGUrKzsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIENsZWFudXAgYWZ0ZXIgdGhlIGxvb3AuIENvcHkgdGhl
IGxhc3Qgc2xvdCBpbnRvIHRoZSBuZXcgbm9kZXMuCisgICAgaWYgKHNsb3QudGFibGUubGVuZ3Ro
ID4gMCkKKyAgICB7CisgICAgICAgIHNhdmVTbG90KG5ld0EsIG5ld0IsIHdyaXRlLCBzbG90KTsK
KyAgICAgICAgd3JpdGUrKzsKKyAgICB9CisKKyAgICAvLyBTaGlmdCB0aGUgdW50b3VjaGVkIHNs
b3RzIHRvIHRoZSBsZWZ0CisgICAgd2hpbGUgKHJlYWQgPCBhLnRhYmxlLmxlbmd0aCArIGIudGFi
bGUubGVuZ3RoICkKKyAgICB7CisgICAgICAgIHNhdmVTbG90KG5ld0EsIG5ld0IsIHdyaXRlLCBn
ZXQyKGEudGFibGUsIGIudGFibGUsIHJlYWQpKTsKKyAgICAgICAgcmVhZCsrOworICAgICAgICB3
cml0ZSsrOworICAgIH0KKworICAgIHJldHVybiBbbmV3QSwgbmV3Ql07Cit9CisKKy8vIE5hdmln
YXRpb24gZnVuY3Rpb25zCitmdW5jdGlvbiBib3RSaWdodChhKQoreworICAgIHJldHVybiBhLnRh
YmxlW2EudGFibGUubGVuZ3RoIC0gMV07Cit9CitmdW5jdGlvbiBib3RMZWZ0KGEpCit7CisgICAg
cmV0dXJuIGEudGFibGVbMF07Cit9CisKKy8vIENvcGllcyBhIG5vZGUgZm9yIHVwZGF0aW5nLiBO
b3RlIHRoYXQgeW91IHNob3VsZCBub3QgdXNlIHRoaXMgaWYKKy8vIG9ubHkgdXBkYXRpbmcgb25s
eSBvbmUgb2YgInRhYmxlIiBvciAibGVuZ3RocyIgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuCitm
dW5jdGlvbiBub2RlQ29weShhKQoreworICAgIHZhciBuZXdBID0geworICAgICAgICBjdG9yOiAn
X0FycmF5JywKKyAgICAgICAgaGVpZ2h0OiBhLmhlaWdodCwKKyAgICAgICAgdGFibGU6IGEudGFi
bGUuc2xpY2UoKQorICAgIH07CisgICAgaWYgKGEuaGVpZ2h0ID4gMCkKKyAgICB7CisgICAgICAg
IG5ld0EubGVuZ3RocyA9IGEubGVuZ3Rocy5zbGljZSgpOworICAgIH0KKyAgICByZXR1cm4gbmV3
QTsKK30KKworLy8gUmV0dXJucyBob3cgbWFueSBpdGVtcyBhcmUgaW4gdGhlIHRyZWUuCitmdW5j
dGlvbiBsZW5ndGgoYXJyYXkpCit7CisgICAgaWYgKGFycmF5LmhlaWdodCA9PT0gMCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhcnJheS50YWJsZS5sZW5ndGg7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIHJldHVybiBhcnJheS5sZW5ndGhzW2FycmF5Lmxlbmd0aHMubGVuZ3RoIC0g
MV07CisgICAgfQorfQorCisvLyBDYWxjdWxhdGVzIGluIHdoaWNoIHNsb3Qgb2YgInRhYmxlIiB0
aGUgaXRlbSBwcm9iYWJseSBpcywgdGhlbgorLy8gZmluZCB0aGUgZXhhY3Qgc2xvdCB2aWEgZm9y
d2FyZCBzZWFyY2hpbmcgaW4gICJsZW5ndGhzIi4gUmV0dXJucyB0aGUgaW5kZXguCitmdW5jdGlv
biBnZXRTbG90KGksIGEpCit7CisgICAgdmFyIHNsb3QgPSBpID4+ICg1ICogYS5oZWlnaHQpOwor
ICAgIHdoaWxlIChhLmxlbmd0aHNbc2xvdF0gPD0gaSkKKyAgICB7CisgICAgICAgIHNsb3QrKzsK
KyAgICB9CisgICAgcmV0dXJuIHNsb3Q7Cit9CisKKy8vIFJlY3Vyc2l2ZWx5IGNyZWF0ZXMgYSB0
cmVlIHdpdGggYSBnaXZlbiBoZWlnaHQgY29udGFpbmluZworLy8gb25seSB0aGUgZ2l2ZW4gaXRl
bS4KK2Z1bmN0aW9uIGNyZWF0ZShpdGVtLCBoKQoreworICAgIGlmIChoID09PSAwKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIGN0b3I6ICdfQXJyYXknLAorICAgICAgICAg
ICAgaGVpZ2h0OiAwLAorICAgICAgICAgICAgdGFibGU6IFtpdGVtXQorICAgICAgICB9OworICAg
IH0KKyAgICByZXR1cm4geworICAgICAgICBjdG9yOiAnX0FycmF5JywKKyAgICAgICAgaGVpZ2h0
OiBoLAorICAgICAgICB0YWJsZTogW2NyZWF0ZShpdGVtLCBoIC0gMSldLAorICAgICAgICBsZW5n
dGhzOiBbMV0KKyAgICB9OworfQorCisvLyBSZWN1cnNpdmVseSBjcmVhdGVzIGEgdHJlZSB0aGF0
IGNvbnRhaW5zIHRoZSBnaXZlbiB0cmVlLgorZnVuY3Rpb24gcGFyZW50aXNlKHRyZWUsIGgpCit7
CisgICAgaWYgKGggPT09IHRyZWUuaGVpZ2h0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyZWU7
CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgY3RvcjogJ19BcnJheScsCisgICAgICAg
IGhlaWdodDogaCwKKyAgICAgICAgdGFibGU6IFtwYXJlbnRpc2UodHJlZSwgaCAtIDEpXSwKKyAg
ICAgICAgbGVuZ3RoczogW2xlbmd0aCh0cmVlKV0KKyAgICB9OworfQorCisvLyBFbXBoYXNpemVz
IGJsb29kIGJyb3RoZXJob29kIGJlbmVhdGggdHdvIHRyZWVzLgorZnVuY3Rpb24gc2libGlzZShh
LCBiKQoreworICAgIHJldHVybiB7CisgICAgICAgIGN0b3I6ICdfQXJyYXknLAorICAgICAgICBo
ZWlnaHQ6IGEuaGVpZ2h0ICsgMSwKKyAgICAgICAgdGFibGU6IFthLCBiXSwKKyAgICAgICAgbGVu
Z3RoczogW2xlbmd0aChhKSwgbGVuZ3RoKGEpICsgbGVuZ3RoKGIpXQorICAgIH07Cit9CisKK2Z1
bmN0aW9uIHRvSlNBcnJheShhKQoreworICAgIHZhciBqc0FycmF5ID0gbmV3IEFycmF5KGxlbmd0
aChhKSk7CisgICAgdG9KU0FycmF5Xyhqc0FycmF5LCAwLCBhKTsKKyAgICByZXR1cm4ganNBcnJh
eTsKK30KKworZnVuY3Rpb24gdG9KU0FycmF5Xyhqc0FycmF5LCBpLCBhKQoreworICAgIGZvciAo
dmFyIHQgPSAwOyB0IDwgYS50YWJsZS5sZW5ndGg7IHQrKykKKyAgICB7CisgICAgICAgIGlmIChh
LmhlaWdodCA9PT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAganNBcnJheVtpICsgdF0gPSBh
LnRhYmxlW3RdOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgdmFyIGluYyA9IHQgPT09IDAgPyAwIDogYS5sZW5ndGhzW3QgLSAxXTsKKyAgICAgICAgICAg
IHRvSlNBcnJheV8oanNBcnJheSwgaSArIGluYywgYS50YWJsZVt0XSk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK2Z1bmN0aW9uIGZyb21KU0FycmF5KGpzQXJyYXkpCit7CisgICAgaWYgKGpzQXJy
YXkubGVuZ3RoID09PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVtcHR5OworICAgIH0KKyAg
ICB2YXIgaCA9IE1hdGguZmxvb3IoTWF0aC5sb2coanNBcnJheS5sZW5ndGgpIC8gTWF0aC5sb2co
TSkpOworICAgIHJldHVybiBmcm9tSlNBcnJheV8oanNBcnJheSwgaCwgMCwganNBcnJheS5sZW5n
dGgpOworfQorCitmdW5jdGlvbiBmcm9tSlNBcnJheV8oanNBcnJheSwgaCwgZnJvbSwgdG8pCit7
CisgICAgaWYgKGggPT09IDApCisgICAgeworICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
Y3RvcjogJ19BcnJheScsCisgICAgICAgICAgICBoZWlnaHQ6IDAsCisgICAgICAgICAgICB0YWJs
ZToganNBcnJheS5zbGljZShmcm9tLCB0bykKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICB2YXIg
c3RlcCA9IE1hdGgucG93KE0sIGgpOworICAgIHZhciB0YWJsZSA9IG5ldyBBcnJheShNYXRoLmNl
aWwoKHRvIC0gZnJvbSkgLyBzdGVwKSk7CisgICAgdmFyIGxlbmd0aHMgPSBuZXcgQXJyYXkodGFi
bGUubGVuZ3RoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYmxlLmxlbmd0aDsgaSsrKQor
ICAgIHsKKyAgICAgICAgdGFibGVbaV0gPSBmcm9tSlNBcnJheV8oanNBcnJheSwgaCAtIDEsIGZy
b20gKyAoaSAqIHN0ZXApLCBNYXRoLm1pbihmcm9tICsgKChpICsgMSkgKiBzdGVwKSwgdG8pKTsK
KyAgICAgICAgbGVuZ3Roc1tpXSA9IGxlbmd0aCh0YWJsZVtpXSkgKyAoaSA+IDAgPyBsZW5ndGhz
W2kgLSAxXSA6IDApOworICAgIH0KKyAgICByZXR1cm4geworICAgICAgICBjdG9yOiAnX0FycmF5
JywKKyAgICAgICAgaGVpZ2h0OiBoLAorICAgICAgICB0YWJsZTogdGFibGUsCisgICAgICAgIGxl
bmd0aHM6IGxlbmd0aHMKKyAgICB9OworfQorCityZXR1cm4geworICAgIGVtcHR5OiBlbXB0eSwK
KyAgICBmcm9tTGlzdDogZnJvbUxpc3QsCisgICAgdG9MaXN0OiB0b0xpc3QsCisgICAgaW5pdGlh
bGl6ZTogRjIoaW5pdGlhbGl6ZSksCisgICAgYXBwZW5kOiBGMihhcHBlbmQpLAorICAgIHB1c2g6
IEYyKHB1c2gpLAorICAgIHNsaWNlOiBGMyhzbGljZSksCisgICAgZ2V0OiBGMihnZXQpLAorICAg
IHNldDogRjMoc2V0KSwKKyAgICBtYXA6IEYyKG1hcCksCisgICAgaW5kZXhlZE1hcDogRjIoaW5k
ZXhlZE1hcCksCisgICAgZm9sZGw6IEYzKGZvbGRsKSwKKyAgICBmb2xkcjogRjMoZm9sZHIpLAor
ICAgIGxlbmd0aDogbGVuZ3RoLAorCisgICAgdG9KU0FycmF5OiB0b0pTQXJyYXksCisgICAgZnJv
bUpTQXJyYXk6IGZyb21KU0FycmF5Cit9OworCit9KCk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQXJy
YXkkYXBwZW5kID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0FycmF5LmFwcGVuZDsKK3ZhciBfZWxt
X2xhbmckY29yZSRBcnJheSRsZW5ndGggPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQXJyYXkubGVu
Z3RoOwordmFyIF9lbG1fbGFuZyRjb3JlJEFycmF5JGlzRW1wdHkgPSBmdW5jdGlvbiAoYXJyYXkp
IHsKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmVxKAorICAgICAgICBf
ZWxtX2xhbmckY29yZSRBcnJheSRsZW5ndGgoYXJyYXkpLAorICAgICAgICAwKTsKK307Cit2YXIg
X2VsbV9sYW5nJGNvcmUkQXJyYXkkc2xpY2UgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQXJyYXku
c2xpY2U7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQXJyYXkkc2V0ID0gX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX0FycmF5LnNldDsKK3ZhciBfZWxtX2xhbmckY29yZSRBcnJheSRnZXQgPSBGMigKKyAgICBm
dW5jdGlvbiAoaSwgYXJyYXkpIHsKKyAgICAgICAgcmV0dXJuICgoX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX1V0aWxzLmNtcCgwLCBpKSA8IDEpICYmIChfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMu
Y21wKAorICAgICAgICAgICAgaSwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9B
cnJheS5sZW5ndGgoYXJyYXkpKSA8IDApKSA/IF9lbG1fbGFuZyRjb3JlJE1heWJlJEp1c3QoCisg
ICAgICAgICAgICBBMihfZWxtX2xhbmckY29yZSROYXRpdmVfQXJyYXkuZ2V0LCBpLCBhcnJheSkp
IDogX2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90aGluZzsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmck
Y29yZSRBcnJheSRwdXNoID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0FycmF5LnB1c2g7Cit2YXIg
X2VsbV9sYW5nJGNvcmUkQXJyYXkkZW1wdHkgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQXJyYXku
ZW1wdHk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQXJyYXkkZmlsdGVyID0gRjIoCisgICAgZnVuY3Rp
b24gKGlzT2theSwgYXJyKSB7CisgICAgICAgIHZhciB1cGRhdGUgPSBGMigKKyAgICAgICAgICAg
IGZ1bmN0aW9uICh4LCB4cykgeworICAgICAgICAgICAgICAgIHJldHVybiBpc09rYXkoeCkgPyBB
MihfZWxtX2xhbmckY29yZSROYXRpdmVfQXJyYXkucHVzaCwgeCwgeHMpIDogeHM7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgcmV0dXJuIEEzKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9BcnJheS5m
b2xkbCwgdXBkYXRlLCBfZWxtX2xhbmckY29yZSROYXRpdmVfQXJyYXkuZW1wdHksIGFycik7Cisg
ICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQXJyYXkkZm9sZHIgPSBfZWxtX2xhbmckY29yZSRO
YXRpdmVfQXJyYXkuZm9sZHI7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQXJyYXkkZm9sZGwgPSBfZWxt
X2xhbmckY29yZSROYXRpdmVfQXJyYXkuZm9sZGw7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQXJyYXkk
aW5kZXhlZE1hcCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9BcnJheS5pbmRleGVkTWFwOwordmFy
IF9lbG1fbGFuZyRjb3JlJEFycmF5JG1hcCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9BcnJheS5t
YXA7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQXJyYXkkdG9JbmRleGVkTGlzdCA9IGZ1bmN0aW9uIChh
cnJheSkgeworICAgIHJldHVybiBBMygKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRtYXAy
LAorICAgICAgICBGMigKKyAgICAgICAgICAgIGZ1bmN0aW9uICh2MCwgdjEpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4ge2N0b3I6ICdfVHVwbGUyJywgXzA6IHYwLCBfMTogdjF9OworICAgICAg
ICAgICAgfSksCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LnJhbmdlKAorICAg
ICAgICAgICAgMCwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9BcnJheS5sZW5n
dGgoYXJyYXkpIC0gMSksCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9BcnJheS50b0xp
c3QoYXJyYXkpKTsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkQXJyYXkkdG9MaXN0ID0gX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX0FycmF5LnRvTGlzdDsKK3ZhciBfZWxtX2xhbmckY29yZSRBcnJheSRm
cm9tTGlzdCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9BcnJheS5mcm9tTGlzdDsKK3ZhciBfZWxt
X2xhbmckY29yZSRBcnJheSRpbml0aWFsaXplID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0FycmF5
LmluaXRpYWxpemU7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQXJyYXkkcmVwZWF0ID0gRjIoCisgICAg
ZnVuY3Rpb24gKG4sIGUpIHsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9s
YW5nJGNvcmUkQXJyYXkkaW5pdGlhbGl6ZSwKKyAgICAgICAgICAgIG4sCisgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSRCYXNpY3MkYWx3YXlzKGUpKTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmck
Y29yZSRBcnJheSRBcnJheSA9IHtjdG9yOiAnQXJyYXknfTsKKwordmFyIF9lbG1fbGFuZyRjb3Jl
JFRhc2skb25FcnJvciA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIub25FcnJvcjsK
K3ZhciBfZWxtX2xhbmckY29yZSRUYXNrJGFuZFRoZW4gPSBfZWxtX2xhbmckY29yZSROYXRpdmVf
U2NoZWR1bGVyLmFuZFRoZW47Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGFzayRzcGF3bkNtZCA9IEYy
KAorICAgIGZ1bmN0aW9uIChyb3V0ZXIsIF9wMCkgeworICAgICAgICB2YXIgX3AxID0gX3AwOwor
ICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5zcGF3bigKKyAg
ICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRhc2skYW5kVGhl
biwKKyAgICAgICAgICAgICAgICBfcDEuXzAsCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkUGxhdGZvcm0kc2VuZFRvQXBwKHJvdXRlcikpKTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmck
Y29yZSRUYXNrJGZhaWwgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1bGVyLmZhaWw7Cit2
YXIgX2VsbV9sYW5nJGNvcmUkVGFzayRtYXBFcnJvciA9IEYyKAorICAgIGZ1bmN0aW9uIChmLCB0
YXNrKSB7CisgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRh
c2skb25FcnJvciwKKyAgICAgICAgICAgIHRhc2ssCisgICAgICAgICAgICBmdW5jdGlvbiAoZXJy
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFRhc2skZmFpbCgKKyAg
ICAgICAgICAgICAgICAgICAgZihlcnIpKTsKKyAgICAgICAgICAgIH0pOworICAgIH0pOwordmFy
IF9lbG1fbGFuZyRjb3JlJFRhc2skc3VjY2VlZCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hl
ZHVsZXIuc3VjY2VlZDsKK3ZhciBfZWxtX2xhbmckY29yZSRUYXNrJG1hcCA9IEYyKAorICAgIGZ1
bmN0aW9uIChmdW5jLCB0YXNrQSkgeworICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSRUYXNrJGFuZFRoZW4sCisgICAgICAgICAgICB0YXNrQSwKKyAgICAgICAg
ICAgIGZ1bmN0aW9uIChhKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3Jl
JFRhc2skc3VjY2VlZCgKKyAgICAgICAgICAgICAgICAgICAgZnVuYyhhKSk7CisgICAgICAgICAg
ICB9KTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRUYXNrJG1hcDIgPSBGMygKKyAgICBm
dW5jdGlvbiAoZnVuYywgdGFza0EsIHRhc2tCKSB7CisgICAgICAgIHJldHVybiBBMigKKyAgICAg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJFRhc2skYW5kVGhlbiwKKyAgICAgICAgICAgIHRhc2tBLAor
ICAgICAgICAgICAgZnVuY3Rpb24gKGEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQTIoCisg
ICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRhc2skYW5kVGhlbiwKKyAgICAgICAg
ICAgICAgICAgICAgdGFza0IsCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChiKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkVGFzayRzdWNjZWVk
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEyKGZ1bmMsIGEsIGIpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmck
Y29yZSRUYXNrJG1hcDMgPSBGNCgKKyAgICBmdW5jdGlvbiAoZnVuYywgdGFza0EsIHRhc2tCLCB0
YXNrQykgeworICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRU
YXNrJGFuZFRoZW4sCisgICAgICAgICAgICB0YXNrQSwKKyAgICAgICAgICAgIGZ1bmN0aW9uIChh
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSRUYXNrJGFuZFRoZW4sCisgICAgICAgICAgICAgICAgICAgIHRhc2tCLAorICAg
ICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoYikgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRh
c2skYW5kVGhlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrQywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoYykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkVGFzayRzdWNjZWVkKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQTMoZnVuYywgYSwgYiwgYykpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIH0pOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJFRhc2skbWFwNCA9IEY1KAorICAg
IGZ1bmN0aW9uIChmdW5jLCB0YXNrQSwgdGFza0IsIHRhc2tDLCB0YXNrRCkgeworICAgICAgICBy
ZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJGFuZFRoZW4sCisgICAg
ICAgICAgICB0YXNrQSwKKyAgICAgICAgICAgIGZ1bmN0aW9uIChhKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJGFu
ZFRoZW4sCisgICAgICAgICAgICAgICAgICAgIHRhc2tCLAorICAgICAgICAgICAgICAgICAgICBm
dW5jdGlvbiAoYikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRhc2skYW5kVGhlbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0YXNrQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmdW5jdGlvbiAoYykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
QTIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRU
YXNrJGFuZFRoZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrRCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChkKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3Jl
JFRhc2skc3VjY2VlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQTQoZnVuYywgYSwgYiwgYywgZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUk
VGFzayRtYXA1ID0gRjYoCisgICAgZnVuY3Rpb24gKGZ1bmMsIHRhc2tBLCB0YXNrQiwgdGFza0Ms
IHRhc2tELCB0YXNrRSkgeworICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxtX2xh
bmckY29yZSRUYXNrJGFuZFRoZW4sCisgICAgICAgICAgICB0YXNrQSwKKyAgICAgICAgICAgIGZ1
bmN0aW9uIChhKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSRUYXNrJGFuZFRoZW4sCisgICAgICAgICAgICAgICAgICAgIHRh
c2tCLAorICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoYikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJFRhc2skYW5kVGhlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrQywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoYykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJGFuZFRoZW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0YXNrRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uIChkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSRUYXNrJGFuZFRoZW4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRhc2tFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFRhc2skc3VjY2Vl
ZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
NShmdW5jLCBhLCBiLCBjLCBkLCBlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRN
YXAgPSBGMigKKyAgICBmdW5jdGlvbiAodGFza0Z1bmMsIHRhc2tWYWx1ZSkgeworICAgICAgICBy
ZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJGFuZFRoZW4sCisgICAg
ICAgICAgICB0YXNrRnVuYywKKyAgICAgICAgICAgIGZ1bmN0aW9uIChmdW5jKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRU
YXNrJGFuZFRoZW4sCisgICAgICAgICAgICAgICAgICAgIHRhc2tWYWx1ZSwKKyAgICAgICAgICAg
ICAgICAgICAgZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gX2VsbV9sYW5nJGNvcmUkVGFzayRzdWNjZWVkKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZ1bmModmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
KTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRUYXNrJHNlcXVlbmNlID0gZnVuY3Rpb24g
KHRhc2tzKSB7CisgICAgdmFyIF9wMiA9IHRhc2tzOworICAgIGlmIChfcDIuY3RvciA9PT0gJ1td
JykgeworICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkVGFzayRzdWNjZWVkKAorICAgICAg
ICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAg
ICAgIFtdKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIEEzKAorICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkVGFzayRtYXAyLAorICAgICAgICAgICAgRjIoCisgICAgICAgICAgICAg
ICAgZnVuY3Rpb24gKHgsIHkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEyKF9lbG1f
bGFuZyRjb3JlJExpc3Rfb3BzWyc6OiddLCB4LCB5KTsKKyAgICAgICAgICAgICAgICB9KSwKKyAg
ICAgICAgICAgIF9wMi5fMCwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRhc2skc2VxdWVu
Y2UoX3AyLl8xKSk7CisgICAgfQorfTsKK3ZhciBfZWxtX2xhbmckY29yZSRUYXNrJG9uRWZmZWN0
cyA9IEYzKAorICAgIGZ1bmN0aW9uIChyb3V0ZXIsIGNvbW1hbmRzLCBzdGF0ZSkgeworICAgICAg
ICByZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJG1hcCwKKyAgICAg
ICAgICAgIGZ1bmN0aW9uIChfcDMpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4ge2N0b3I6ICdf
VHVwbGUwJ307CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFz
ayRzZXF1ZW5jZSgKKyAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkTGlzdCRtYXAsCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JFRhc2skc3Bhd25DbWQocm91dGVyKSwKKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZHMpKSk7
CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGFzayR0b01heWJlID0gZnVuY3Rpb24gKHRh
c2spIHsKKyAgICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRhc2skb25FcnJv
ciwKKyAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkVGFzayRtYXAsIF9lbG1fbGFuZyRjb3JlJE1h
eWJlJEp1c3QsIHRhc2spLAorICAgICAgICBmdW5jdGlvbiAoX3A0KSB7CisgICAgICAgICAgICBy
ZXR1cm4gX2VsbV9sYW5nJGNvcmUkVGFzayRzdWNjZWVkKF9lbG1fbGFuZyRjb3JlJE1heWJlJE5v
dGhpbmcpOworICAgICAgICB9KTsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGFzayRmcm9tTWF5
YmUgPSBGMigKKyAgICBmdW5jdGlvbiAoJGRlZmF1bHQsIG1heWJlKSB7CisgICAgICAgIHZhciBf
cDUgPSBtYXliZTsKKyAgICAgICAgaWYgKF9wNS5jdG9yID09PSAnSnVzdCcpIHsKKyAgICAgICAg
ICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRUYXNrJHN1Y2NlZWQoX3A1Ll8wKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRUYXNrJGZhaWwoJGRl
ZmF1bHQpOworICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGFzayR0b1Jl
c3VsdCA9IGZ1bmN0aW9uICh0YXNrKSB7CisgICAgcmV0dXJuIEEyKAorICAgICAgICBfZWxtX2xh
bmckY29yZSRUYXNrJG9uRXJyb3IsCisgICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJFRhc2skbWFw
LCBfZWxtX2xhbmckY29yZSRSZXN1bHQkT2ssIHRhc2spLAorICAgICAgICBmdW5jdGlvbiAobXNn
KSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkVGFzayRzdWNjZWVkKAorICAg
ICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRFcnIobXNnKSk7CisgICAgICAgIH0p
OworfTsKK3ZhciBfZWxtX2xhbmckY29yZSRUYXNrJGZyb21SZXN1bHQgPSBmdW5jdGlvbiAocmVz
dWx0KSB7CisgICAgdmFyIF9wNiA9IHJlc3VsdDsKKyAgICBpZiAoX3A2LmN0b3IgPT09ICdPaycp
IHsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFRhc2skc3VjY2VlZChfcDYuXzApOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRUYXNrJGZhaWwoX3A2
Ll8wKTsKKyAgICB9Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJFRhc2skaW5pdCA9IF9lbG1fbGFu
ZyRjb3JlJFRhc2skc3VjY2VlZCgKKyAgICB7Y3RvcjogJ19UdXBsZTAnfSk7Cit2YXIgX2VsbV9s
YW5nJGNvcmUkVGFzayRvblNlbGZNc2cgPSBGMygKKyAgICBmdW5jdGlvbiAoX3A5LCBfcDgsIF9w
NykgeworICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkVGFzayRzdWNjZWVkKAorICAgICAg
ICAgICAge2N0b3I6ICdfVHVwbGUwJ30pOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJFRh
c2skY29tbWFuZCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9QbGF0Zm9ybS5sZWFmKCdUYXNrJyk7
Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGFzayRUID0gZnVuY3Rpb24gKGEpIHsKKyAgICByZXR1cm4g
e2N0b3I6ICdUJywgXzA6IGF9OworfTsKK3ZhciBfZWxtX2xhbmckY29yZSRUYXNrJHBlcmZvcm0g
PSBGMygKKyAgICBmdW5jdGlvbiAob25GYWlsLCBvblN1Y2Nlc3MsIHRhc2spIHsKKyAgICAgICAg
cmV0dXJuIF9lbG1fbGFuZyRjb3JlJFRhc2skY29tbWFuZCgKKyAgICAgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJFRhc2skVCgKKyAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkVGFzayRvbkVycm9yLAorICAgICAgICAgICAgICAgICAgICBBMihfZWxt
X2xhbmckY29yZSRUYXNrJG1hcCwgb25TdWNjZXNzLCB0YXNrKSwKKyAgICAgICAgICAgICAgICAg
ICAgZnVuY3Rpb24gKHgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xh
bmckY29yZSRUYXNrJHN1Y2NlZWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25GYWls
KHgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSkpKTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmck
Y29yZSRUYXNrJGNtZE1hcCA9IEYyKAorICAgIGZ1bmN0aW9uICh0YWdnZXIsIF9wMTApIHsKKyAg
ICAgICAgdmFyIF9wMTEgPSBfcDEwOworICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkVGFz
ayRUKAorICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkVGFzayRtYXAsIHRhZ2dlciwgX3Ax
MS5fMCkpOworICAgIH0pOworX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1BsYXRmb3JtLmVmZmVjdE1h
bmFnZXJzWydUYXNrJ10gPSB7cGtnOiAnZWxtLWxhbmcvY29yZScsIGluaXQ6IF9lbG1fbGFuZyRj
b3JlJFRhc2skaW5pdCwgb25FZmZlY3RzOiBfZWxtX2xhbmckY29yZSRUYXNrJG9uRWZmZWN0cywg
b25TZWxmTXNnOiBfZWxtX2xhbmckY29yZSRUYXNrJG9uU2VsZk1zZywgdGFnOiAnY21kJywgY21k
TWFwOiBfZWxtX2xhbmckY29yZSRUYXNrJGNtZE1hcH07CisKK3ZhciBfZWxtX2xhbmckY29yZSRE
aWN0JGZvbGRyID0gRjMoCisgICAgZnVuY3Rpb24gKGYsIGFjYywgdCkgeworICAgICAgICBmb2xk
cjoKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIHZhciBfcDAgPSB0OworICAg
ICAgICAgICAgaWYgKF9wMC5jdG9yID09PSAnUkJFbXB0eV9lbG1fYnVpbHRpbicpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gYWNjOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICB2YXIgX3YxID0gZiwKKyAgICAgICAgICAgICAgICAgICAgX3YyID0gQTMoCisgICAgICAg
ICAgICAgICAgICAgIGYsCisgICAgICAgICAgICAgICAgICAgIF9wMC5fMSwKKyAgICAgICAgICAg
ICAgICAgICAgX3AwLl8yLAorICAgICAgICAgICAgICAgICAgICBBMyhfZWxtX2xhbmckY29yZSRE
aWN0JGZvbGRyLCBmLCBhY2MsIF9wMC5fNCkpLAorICAgICAgICAgICAgICAgICAgICBfdjMgPSBf
cDAuXzM7CisgICAgICAgICAgICAgICAgZiA9IF92MTsKKyAgICAgICAgICAgICAgICBhY2MgPSBf
djI7CisgICAgICAgICAgICAgICAgdCA9IF92MzsKKyAgICAgICAgICAgICAgICBjb250aW51ZSBm
b2xkcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRj
b3JlJERpY3Qka2V5cyA9IGZ1bmN0aW9uIChkaWN0KSB7CisgICAgcmV0dXJuIEEzKAorICAgICAg
ICBfZWxtX2xhbmckY29yZSREaWN0JGZvbGRyLAorICAgICAgICBGMygKKyAgICAgICAgICAgIGZ1
bmN0aW9uIChrZXksIHZhbHVlLCBrZXlMaXN0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEEy
KF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6OiddLCBrZXksIGtleUxpc3QpOworICAgICAgICAg
ICAgfSksCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAg
ICAgICAgICAgIFtdKSwKKyAgICAgICAgZGljdCk7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJERp
Y3QkdmFsdWVzID0gZnVuY3Rpb24gKGRpY3QpIHsKKyAgICByZXR1cm4gQTMoCisgICAgICAgIF9l
bG1fbGFuZyRjb3JlJERpY3QkZm9sZHIsCisgICAgICAgIEYzKAorICAgICAgICAgICAgZnVuY3Rp
b24gKGtleSwgdmFsdWUsIHZhbHVlTGlzdCkgeworICAgICAgICAgICAgICAgIHJldHVybiBBMihf
ZWxtX2xhbmckY29yZSRMaXN0X29wc1snOjonXSwgdmFsdWUsIHZhbHVlTGlzdCk7CisgICAgICAg
ICAgICB9KSwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAor
ICAgICAgICAgICAgW10pLAorICAgICAgICBkaWN0KTsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUk
RGljdCR0b0xpc3QgPSBmdW5jdGlvbiAoZGljdCkgeworICAgIHJldHVybiBBMygKKyAgICAgICAg
X2VsbV9sYW5nJGNvcmUkRGljdCRmb2xkciwKKyAgICAgICAgRjMoCisgICAgICAgICAgICBmdW5j
dGlvbiAoa2V5LCB2YWx1ZSwgbGlzdCkgeworICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAg
ICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10sCisgICAgICAg
ICAgICAgICAgICAgIHtjdG9yOiAnX1R1cGxlMicsIF8wOiBrZXksIF8xOiB2YWx1ZX0sCisgICAg
ICAgICAgICAgICAgICAgIGxpc3QpOworICAgICAgICAgICAgfSksCisgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgIFtdKSwKKyAgICAgICAg
ZGljdCk7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkZm9sZGwgPSBGMygKKyAgICBmdW5j
dGlvbiAoZiwgYWNjLCBkaWN0KSB7CisgICAgICAgIGZvbGRsOgorICAgICAgICB3aGlsZSAodHJ1
ZSkgeworICAgICAgICAgICAgdmFyIF9wMSA9IGRpY3Q7CisgICAgICAgICAgICBpZiAoX3AxLmN0
b3IgPT09ICdSQkVtcHR5X2VsbV9idWlsdGluJykgeworICAgICAgICAgICAgICAgIHJldHVybiBh
Y2M7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBfdjUgPSBmLAor
ICAgICAgICAgICAgICAgICAgICBfdjYgPSBBMygKKyAgICAgICAgICAgICAgICAgICAgZiwKKyAg
ICAgICAgICAgICAgICAgICAgX3AxLl8xLAorICAgICAgICAgICAgICAgICAgICBfcDEuXzIsCisg
ICAgICAgICAgICAgICAgICAgIEEzKF9lbG1fbGFuZyRjb3JlJERpY3QkZm9sZGwsIGYsIGFjYywg
X3AxLl8zKSksCisgICAgICAgICAgICAgICAgICAgIF92NyA9IF9wMS5fNDsKKyAgICAgICAgICAg
ICAgICBmID0gX3Y1OworICAgICAgICAgICAgICAgIGFjYyA9IF92NjsKKyAgICAgICAgICAgICAg
ICBkaWN0ID0gX3Y3OworICAgICAgICAgICAgICAgIGNvbnRpbnVlIGZvbGRsOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRtZXJnZSA9
IEY2KAorICAgIGZ1bmN0aW9uIChsZWZ0U3RlcCwgYm90aFN0ZXAsIHJpZ2h0U3RlcCwgbGVmdERp
Y3QsIHJpZ2h0RGljdCwgaW5pdGlhbFJlc3VsdCkgeworICAgICAgICB2YXIgc3RlcFN0YXRlID0g
RjMoCisgICAgICAgICAgICBmdW5jdGlvbiAocktleSwgclZhbHVlLCBfcDIpIHsKKyAgICAgICAg
ICAgICAgICBzdGVwU3RhdGU6CisgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIF9wMyA9IF9wMjsKKyAgICAgICAgICAgICAgICAgICAgdmFyIF9w
OSA9IF9wMy5fMTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIF9wOCA9IF9wMy5fMDsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIF9wNCA9IF9wODsKKyAgICAgICAgICAgICAgICAgICAgaWYgKF9w
NC5jdG9yID09PSAnW10nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGN0b3I6ICdfVHVwbGUyJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfMDogX3A4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8xOiBB
MyhyaWdodFN0ZXAsIHJLZXksIHJWYWx1ZSwgX3A5KQorICAgICAgICAgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBfcDcgPSBfcDQuXzE7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3A2ID0gX3A0
Ll8wLl8xOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9wNSA9IF9wNC5fMC5fMDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY21w
KF9wNSwgcktleSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF92MTAg
PSByS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdjExID0gclZhbHVlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdjEyID0geworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMicsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF8wOiBfcDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8xOiBB
MyhsZWZ0U3RlcCwgX3A1LCBfcDYsIF9wOSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJLZXkgPSBfdjEwOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJWYWx1ZSA9IF92MTE7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX3AyID0gX3YxMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBzdGVw
U3RhdGU7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY21wKF9wNSwgcktl
eSkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMicsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfMDogX3A4LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXzE6IEEzKHJpZ2h0U3RlcCwgcktleSwgclZhbHVlLCBfcDkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0b3I6ICdfVHVwbGUyJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8wOiBfcDcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfMTogQTQoYm90aFN0ZXAsIF9wNSwgX3A2LCByVmFsdWUs
IF9wOSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgdmFy
IF9wMTAgPSBBMygKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkZm9sZGwsCisgICAg
ICAgICAgICBzdGVwU3RhdGUsCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY3Rvcjog
J19UdXBsZTInLAorICAgICAgICAgICAgICAgIF8wOiBfZWxtX2xhbmckY29yZSREaWN0JHRvTGlz
dChsZWZ0RGljdCksCisgICAgICAgICAgICAgICAgXzE6IGluaXRpYWxSZXN1bHQKKyAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICByaWdodERpY3QpOworICAgICAgICB2YXIgbGVmdG92ZXJzID0g
X3AxMC5fMDsKKyAgICAgICAgdmFyIGludGVybWVkaWF0ZVJlc3VsdCA9IF9wMTAuXzE7CisgICAg
ICAgIHJldHVybiBBMygKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkZm9sZGwsCisg
ICAgICAgICAgICBGMigKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX3AxMSwgcmVzdWx0KSB7
CisgICAgICAgICAgICAgICAgICAgIHZhciBfcDEyID0gX3AxMTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEEzKGxlZnRTdGVwLCBfcDEyLl8wLCBfcDEyLl8xLCByZXN1bHQpOworICAgICAg
ICAgICAgICAgIH0pLAorICAgICAgICAgICAgaW50ZXJtZWRpYXRlUmVzdWx0LAorICAgICAgICAg
ICAgbGVmdG92ZXJzKTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JHJlcG9ydFJl
bUJ1ZyA9IEY0KAorICAgIGZ1bmN0aW9uIChtc2csIGMsIGxnb3QsIHJnb3QpIHsKKyAgICAgICAg
cmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9EZWJ1Zy5jcmFzaCgKKyAgICAgICAgICAgIF9l
bG1fbGFuZyRjb3JlJFN0cmluZyRjb25jYXQoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICBbCisgICAgICAg
ICAgICAgICAgICAgICAgICAnSW50ZXJuYWwgcmVkLWJsYWNrIHRyZWUgaW52YXJpYW50IHZpb2xh
dGVkLCBleHBlY3RlZCAnLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgJyBhbmQgZ290ICcsCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSRCYXNpY3MkdG9TdHJpbmcoYyksCisgICAgICAgICAgICAgICAgICAgICAgICAn
LycsCisgICAgICAgICAgICAgICAgICAgICAgICBsZ290LAorICAgICAgICAgICAgICAgICAgICAg
ICAgJy8nLAorICAgICAgICAgICAgICAgICAgICAgICAgcmdvdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICdcblBsZWFzZSByZXBvcnQgdGhpcyBidWcgdG8gPGh0dHBzOi8vZ2l0aHViLmNvbS9l
bG0tbGFuZy9jb3JlL2lzc3Vlcz4nCisgICAgICAgICAgICAgICAgICAgIF0pKSk7CisgICAgfSk7
Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRpc0JCbGFjayA9IGZ1bmN0aW9uIChkaWN0KSB7Cisg
ICAgdmFyIF9wMTMgPSBkaWN0OworICAgIF92MTRfMjoKKyAgICBkbyB7CisgICAgICAgIGlmIChf
cDEzLmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSB7CisgICAgICAgICAgICBpZiAoX3Ax
My5fMC5jdG9yID09PSAnQkJsYWNrJykgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhayBfdjE0XzI7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoX3AxMy5fMC5jdG9y
ID09PSAnTEJCbGFjaycpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnJlYWsgX3YxNF8yOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfSB3aGlsZShmYWxzZSk7CisgICAgcmV0dXJuIGZhbHNlOworfTsK
K3ZhciBfZWxtX2xhbmckY29yZSREaWN0JHNpemVIZWxwID0gRjIoCisgICAgZnVuY3Rpb24gKG4s
IGRpY3QpIHsKKyAgICAgICAgc2l6ZUhlbHA6CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAg
ICAgICAgICB2YXIgX3AxNCA9IGRpY3Q7CisgICAgICAgICAgICBpZiAoX3AxNC5jdG9yID09PSAn
UkJFbXB0eV9lbG1fYnVpbHRpbicpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbjsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIF92MTYgPSBBMihfZWxtX2xhbmck
Y29yZSREaWN0JHNpemVIZWxwLCBuICsgMSwgX3AxNC5fNCksCisgICAgICAgICAgICAgICAgICAg
IF92MTcgPSBfcDE0Ll8zOworICAgICAgICAgICAgICAgIG4gPSBfdjE2OworICAgICAgICAgICAg
ICAgIGRpY3QgPSBfdjE3OworICAgICAgICAgICAgICAgIGNvbnRpbnVlIHNpemVIZWxwOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRz
aXplID0gZnVuY3Rpb24gKGRpY3QpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGNvcmUkRGlj
dCRzaXplSGVscCwgMCwgZGljdCk7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkZ2V0ID0g
RjIoCisgICAgZnVuY3Rpb24gKHRhcmdldEtleSwgZGljdCkgeworICAgICAgICBnZXQ6CisgICAg
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICB2YXIgX3AxNSA9IGRpY3Q7CisgICAgICAg
ICAgICBpZiAoX3AxNS5jdG9yID09PSAnUkJFbXB0eV9lbG1fYnVpbHRpbicpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90aGluZzsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIF9wMTYgPSBBMihfZWxtX2xhbmckY29yZSRC
YXNpY3MkY29tcGFyZSwgdGFyZ2V0S2V5LCBfcDE1Ll8xKTsKKyAgICAgICAgICAgICAgICBzd2l0
Y2ggKF9wMTYuY3RvcikgeworICAgICAgICAgICAgICAgICAgICBjYXNlICdMVCc6CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgX3YyMCA9IHRhcmdldEtleSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfdjIxID0gX3AxNS5fMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdl
dEtleSA9IF92MjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkaWN0ID0gX3YyMTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGdldDsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAnRVEnOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1h
eWJlJEp1c3QoX3AxNS5fMik7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgX3YyMiA9IHRhcmdldEtleSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfdjIzID0gX3AxNS5fNDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdl
dEtleSA9IF92MjI7CisgICAgICAgICAgICAgICAgICAgICAgICBkaWN0ID0gX3YyMzsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGdldDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JG1l
bWJlciA9IEYyKAorICAgIGZ1bmN0aW9uIChrZXksIGRpY3QpIHsKKyAgICAgICAgdmFyIF9wMTcg
PSBBMihfZWxtX2xhbmckY29yZSREaWN0JGdldCwga2V5LCBkaWN0KTsKKyAgICAgICAgaWYgKF9w
MTcuY3RvciA9PT0gJ0p1c3QnKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0pOwor
dmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkbWF4V2l0aERlZmF1bHQgPSBGMygKKyAgICBmdW5jdGlv
biAoaywgdiwgcikgeworICAgICAgICBtYXhXaXRoRGVmYXVsdDoKKyAgICAgICAgd2hpbGUgKHRy
dWUpIHsKKyAgICAgICAgICAgIHZhciBfcDE4ID0gcjsKKyAgICAgICAgICAgIGlmIChfcDE4LmN0
b3IgPT09ICdSQkVtcHR5X2VsbV9idWlsdGluJykgeworICAgICAgICAgICAgICAgIHJldHVybiB7
Y3RvcjogJ19UdXBsZTInLCBfMDogaywgXzE6IHZ9OworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICB2YXIgX3YyNiA9IF9wMTguXzEsCisgICAgICAgICAgICAgICAgICAgIF92
MjcgPSBfcDE4Ll8yLAorICAgICAgICAgICAgICAgICAgICBfdjI4ID0gX3AxOC5fNDsKKyAgICAg
ICAgICAgICAgICBrID0gX3YyNjsKKyAgICAgICAgICAgICAgICB2ID0gX3YyNzsKKyAgICAgICAg
ICAgICAgICByID0gX3YyODsKKyAgICAgICAgICAgICAgICBjb250aW51ZSBtYXhXaXRoRGVmYXVs
dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3Jl
JERpY3QkTkJsYWNrID0ge2N0b3I6ICdOQmxhY2snfTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0
JEJCbGFjayA9IHtjdG9yOiAnQkJsYWNrJ307Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRCbGFj
ayA9IHtjdG9yOiAnQmxhY2snfTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JGJsYWNraXNoID0g
ZnVuY3Rpb24gKHQpIHsKKyAgICB2YXIgX3AxOSA9IHQ7CisgICAgaWYgKF9wMTkuY3RvciA9PT0g
J1JCTm9kZV9lbG1fYnVpbHRpbicpIHsKKyAgICAgICAgdmFyIF9wMjAgPSBfcDE5Ll8wOworICAg
ICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmVxKF9wMjAsIF9lbG1fbGFu
ZyRjb3JlJERpY3QkQmxhY2spIHx8IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5lcShfcDIw
LCBfZWxtX2xhbmckY29yZSREaWN0JEJCbGFjayk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorfTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JFJlZCA9IHtjdG9y
OiAnUmVkJ307Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRtb3JlQmxhY2sgPSBmdW5jdGlvbiAo
Y29sb3IpIHsKKyAgICB2YXIgX3AyMSA9IGNvbG9yOworICAgIHN3aXRjaCAoX3AyMS5jdG9yKSB7
CisgICAgICAgIGNhc2UgJ0JsYWNrJzoKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29y
ZSREaWN0JEJCbGFjazsKKyAgICAgICAgY2FzZSAnUmVkJzoKKyAgICAgICAgICAgIHJldHVybiBf
ZWxtX2xhbmckY29yZSREaWN0JEJsYWNrOworICAgICAgICBjYXNlICdOQmxhY2snOgorICAgICAg
ICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJERpY3QkUmVkOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9EZWJ1Zy5jcmFzaCgnQ2Fu
XCd0IG1ha2UgYSBkb3VibGUgYmxhY2sgbm9kZSBtb3JlIGJsYWNrIScpOworICAgIH0KK307Cit2
YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRsZXNzQmxhY2sgPSBmdW5jdGlvbiAoY29sb3IpIHsKKyAg
ICB2YXIgX3AyMiA9IGNvbG9yOworICAgIHN3aXRjaCAoX3AyMi5jdG9yKSB7CisgICAgICAgIGNh
c2UgJ0JCbGFjayc6CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkRGljdCRCbGFj
azsKKyAgICAgICAgY2FzZSAnQmxhY2snOgorICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRj
b3JlJERpY3QkUmVkOworICAgICAgICBjYXNlICdSZWQnOgorICAgICAgICAgICAgcmV0dXJuIF9l
bG1fbGFuZyRjb3JlJERpY3QkTkJsYWNrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9EZWJ1Zy5jcmFzaCgnQ2FuXCd0IG1ha2UgYSBu
ZWdhdGl2ZSBibGFjayBub2RlIGxlc3MgYmxhY2shJyk7CisgICAgfQorfTsKK3ZhciBfZWxtX2xh
bmckY29yZSREaWN0JExCQmxhY2sgPSB7Y3RvcjogJ0xCQmxhY2snfTsKK3ZhciBfZWxtX2xhbmck
Y29yZSREaWN0JExCbGFjayA9IHtjdG9yOiAnTEJsYWNrJ307Cit2YXIgX2VsbV9sYW5nJGNvcmUk
RGljdCRSQkVtcHR5X2VsbV9idWlsdGluID0gZnVuY3Rpb24gKGEpIHsKKyAgICByZXR1cm4ge2N0
b3I6ICdSQkVtcHR5X2VsbV9idWlsdGluJywgXzA6IGF9OworfTsKK3ZhciBfZWxtX2xhbmckY29y
ZSREaWN0JGVtcHR5ID0gX2VsbV9sYW5nJGNvcmUkRGljdCRSQkVtcHR5X2VsbV9idWlsdGluKF9l
bG1fbGFuZyRjb3JlJERpY3QkTEJsYWNrKTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JGlzRW1w
dHkgPSBmdW5jdGlvbiAoZGljdCkgeworICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVf
VXRpbHMuZXEoZGljdCwgX2VsbV9sYW5nJGNvcmUkRGljdCRlbXB0eSk7Cit9OwordmFyIF9lbG1f
bGFuZyRjb3JlJERpY3QkUkJOb2RlX2VsbV9idWlsdGluID0gRjUoCisgICAgZnVuY3Rpb24gKGEs
IGIsIGMsIGQsIGUpIHsKKyAgICAgICAgcmV0dXJuIHtjdG9yOiAnUkJOb2RlX2VsbV9idWlsdGlu
JywgXzA6IGEsIF8xOiBiLCBfMjogYywgXzM6IGQsIF80OiBlfTsKKyAgICB9KTsKK3ZhciBfZWxt
X2xhbmckY29yZSREaWN0JGVuc3VyZUJsYWNrUm9vdCA9IGZ1bmN0aW9uIChkaWN0KSB7CisgICAg
dmFyIF9wMjMgPSBkaWN0OworICAgIGlmICgoX3AyMy5jdG9yID09PSAnUkJOb2RlX2VsbV9idWls
dGluJykgJiYgKF9wMjMuXzAuY3RvciA9PT0gJ1JlZCcpKSB7CisgICAgICAgIHJldHVybiBBNShf
ZWxtX2xhbmckY29yZSREaWN0JFJCTm9kZV9lbG1fYnVpbHRpbiwgX2VsbV9sYW5nJGNvcmUkRGlj
dCRCbGFjaywgX3AyMy5fMSwgX3AyMy5fMiwgX3AyMy5fMywgX3AyMy5fNCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgcmV0dXJuIGRpY3Q7CisgICAgfQorfTsKK3ZhciBfZWxtX2xhbmckY29yZSRE
aWN0JGxlc3NCbGFja1RyZWUgPSBmdW5jdGlvbiAoZGljdCkgeworICAgIHZhciBfcDI0ID0gZGlj
dDsKKyAgICBpZiAoX3AyNC5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykgeworICAgICAg
ICByZXR1cm4gQTUoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JFJCTm9kZV9lbG1f
YnVpbHRpbiwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkbGVzc0JsYWNrKF9wMjQu
XzApLAorICAgICAgICAgICAgX3AyNC5fMSwKKyAgICAgICAgICAgIF9wMjQuXzIsCisgICAgICAg
ICAgICBfcDI0Ll8zLAorICAgICAgICAgICAgX3AyNC5fNCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJERpY3QkUkJFbXB0eV9lbG1fYnVpbHRpbihfZWxtX2xh
bmckY29yZSREaWN0JExCbGFjayk7CisgICAgfQorfTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0
JGJhbGFuY2VkVHJlZSA9IGZ1bmN0aW9uIChjb2wpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24gKHhr
KSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiAoeHYpIHsKKyAgICAgICAgICAgIHJldHVybiBm
dW5jdGlvbiAoeWspIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHl2KSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoemspIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoenYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZnVuY3Rpb24gKGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uIChiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZnVuY3Rpb24gKGMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEE1KAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCRSQk5vZGVfZWxtX2J1
aWx0aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSREaWN0JGxlc3NCbGFjayhjb2wpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeWssCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB5diwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEE1KF9lbG1fbGFuZyRjb3JlJERpY3QkUkJOb2RlX2VsbV9idWls
dGluLCBfZWxtX2xhbmckY29yZSREaWN0JEJsYWNrLCB4aywgeHYsIGEsIGIpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTUoX2VsbV9sYW5nJGNvcmUk
RGljdCRSQk5vZGVfZWxtX2J1aWx0aW4sIF9lbG1fbGFuZyRjb3JlJERpY3QkQmxhY2ssIHprLCB6
diwgYywgZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICB9OworICAgICAgICB9OworICAgIH07Cit9OwordmFyIF9lbG1f
bGFuZyRjb3JlJERpY3QkYmxhY2tlbiA9IGZ1bmN0aW9uICh0KSB7CisgICAgdmFyIF9wMjUgPSB0
OworICAgIGlmIChfcDI1LmN0b3IgPT09ICdSQkVtcHR5X2VsbV9idWlsdGluJykgeworICAgICAg
ICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkRGljdCRSQkVtcHR5X2VsbV9idWlsdGluKF9lbG1fbGFu
ZyRjb3JlJERpY3QkTEJsYWNrKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gQTUoX2Vs
bV9sYW5nJGNvcmUkRGljdCRSQk5vZGVfZWxtX2J1aWx0aW4sIF9lbG1fbGFuZyRjb3JlJERpY3Qk
QmxhY2ssIF9wMjUuXzEsIF9wMjUuXzIsIF9wMjUuXzMsIF9wMjUuXzQpOworICAgIH0KK307Cit2
YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRyZWRkZW4gPSBmdW5jdGlvbiAodCkgeworICAgIHZhciBf
cDI2ID0gdDsKKyAgICBpZiAoX3AyNi5jdG9yID09PSAnUkJFbXB0eV9lbG1fYnVpbHRpbicpIHsK
KyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9EZWJ1Zy5jcmFzaCgnY2FuXCd0
IG1ha2UgYSBMZWFmIHJlZCcpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBBNShfZWxt
X2xhbmckY29yZSREaWN0JFJCTm9kZV9lbG1fYnVpbHRpbiwgX2VsbV9sYW5nJGNvcmUkRGljdCRS
ZWQsIF9wMjYuXzEsIF9wMjYuXzIsIF9wMjYuXzMsIF9wMjYuXzQpOworICAgIH0KK307Cit2YXIg
X2VsbV9sYW5nJGNvcmUkRGljdCRiYWxhbmNlSGVscCA9IGZ1bmN0aW9uICh0cmVlKSB7CisgICAg
dmFyIF9wMjcgPSB0cmVlOworICAgIF92MzZfNjoKKyAgICBkbyB7CisgICAgICAgIF92MzZfNToK
KyAgICAgICAgZG8geworICAgICAgICAgICAgX3YzNl80OgorICAgICAgICAgICAgZG8geworICAg
ICAgICAgICAgICAgIF92MzZfMzoKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAg
ICAgICAgIF92MzZfMjoKKyAgICAgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAg
ICAgICAgICAgX3YzNl8xOgorICAgICAgICAgICAgICAgICAgICAgICAgZG8geworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF92MzZfMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
byB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfcDI3LmN0b3IgPT09ICdS
Qk5vZGVfZWxtX2J1aWx0aW4nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoX3AyNy5fMy5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfcDI3Ll80LmN0b3IgPT09ICdSQk5v
ZGVfZWxtX2J1aWx0aW4nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCAoX3AyNy5fMy5fMC5jdG9yKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdSZWQnOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX3AyNy5fNC5fMC5jdG9y
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ1JlZCc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoKF9wMjcuXzMuXzMuY3RvciA9PT0gJ1JCTm9kZV9lbG1f
YnVpbHRpbicpICYmIChfcDI3Ll8zLl8zLl8wLmN0b3IgPT09ICdSZWQnKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrIF92MzZfMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChfcDI3Ll8zLl80LmN0b3IgPT09
ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSAmJiAoX3AyNy5fMy5fNC5fMC5jdG9yID09PSAnUmVkJykp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWsgX3YzNl8xOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgoX3AyNy5fNC5fMy5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykgJiYgKF9wMjcu
XzQuXzMuXzAuY3RvciA9PT0gJ1JlZCcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzI7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKF9wMjcuXzQuXzQuY3Rv
ciA9PT0gJ1JCTm9kZV9lbG1fYnVpbHRpbicpICYmIChfcDI3Ll80Ll80Ll8wLmN0b3IgPT09ICdS
ZWQnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfMzsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3YzNl82OworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdOQmxhY2snOgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KChfcDI3Ll8zLl8zLmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSAmJiAoX3AyNy5fMy5f
My5fMC5jdG9yID09PSAnUmVkJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzA7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICgoX3AyNy5fMy5fNC5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykg
JiYgKF9wMjcuXzMuXzQuXzAuY3RvciA9PT0gJ1JlZCcpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92
MzZfMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCgoKF9wMjcuXzAuY3RvciA9
PT0gJ0JCbGFjaycpICYmIChfcDI3Ll80Ll8zLmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4n
KSkgJiYgKF9wMjcuXzQuXzMuXzAuY3RvciA9PT0gJ0JsYWNrJykpICYmIChfcDI3Ll80Ll80LmN0
b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSkgJiYgKF9wMjcuXzQuXzQuXzAuY3RvciA9PT0g
J0JsYWNrJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfNDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfNjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICgoX3AyNy5fMy5fMy5jdG9yID09PSAnUkJOb2RlX2Vs
bV9idWlsdGluJykgJiYgKF9wMjcuXzMuXzMuXzAuY3RvciA9PT0gJ1JlZCcpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWsgX3YzNl8wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKF9wMjcuXzMuXzQuY3RvciA9
PT0gJ1JCTm9kZV9lbG1fYnVpbHRpbicpICYmIChfcDI3Ll8zLl80Ll8wLmN0b3IgPT09ICdSZWQn
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzE7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWsgX3YzNl82OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdOQmxhY2snOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX3AyNy5fNC5fMC5jdG9y
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ1JlZCc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoKF9wMjcuXzQuXzMuY3RvciA9PT0gJ1JCTm9kZV9lbG1f
YnVpbHRpbicpICYmIChfcDI3Ll80Ll8zLl8wLmN0b3IgPT09ICdSZWQnKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrIF92MzZfMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChfcDI3Ll80Ll80LmN0b3IgPT09
ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSAmJiAoX3AyNy5fNC5fNC5fMC5jdG9yID09PSAnUmVkJykp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWsgX3YzNl8zOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgoKCgoX3AyNy5fMC5jdG9yID09PSAnQkJsYWNrJykgJiYgKF9wMjcuXzMuXzMuY3RvciA9
PT0gJ1JCTm9kZV9lbG1fYnVpbHRpbicpKSAmJiAoX3AyNy5fMy5fMy5fMC5jdG9yID09PSAnQmxh
Y2snKSkgJiYgKF9wMjcuXzMuXzQuY3RvciA9PT0gJ1JCTm9kZV9lbG1fYnVpbHRpbicpKSAmJiAo
X3AyNy5fMy5fNC5fMC5jdG9yID09PSAnQmxhY2snKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsg
X3YzNl81OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3YzNl82
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdOQmxhY2snOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9w
MjcuXzAuY3RvciA9PT0gJ0JCbGFjaycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCgoX3AyNy5fNC5fMy5jdG9y
ID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykgJiYgKF9wMjcuXzQuXzMuXzAuY3RvciA9PT0gJ0Js
YWNrJykpICYmIChfcDI3Ll80Ll80LmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSkgJiYg
KF9wMjcuXzQuXzQuXzAuY3RvciA9PT0gJ0JsYWNrJykpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3Yz
Nl80OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKChfcDI3Ll8zLl8zLmN0b3Ig
PT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSAmJiAoX3AyNy5fMy5fMy5fMC5jdG9yID09PSAnQmxh
Y2snKSkgJiYgKF9wMjcuXzMuXzQuY3RvciA9PT0gJ1JCTm9kZV9lbG1fYnVpbHRpbicpKSAmJiAo
X3AyNy5fMy5fNC5fMC5jdG9yID09PSAnQmxhY2snKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsg
X3YzNl81OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3YzNl82
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2
XzY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCgoKF9wMjcuXzAuY3RvciA9PT0gJ0JCbGFjaycp
ICYmIChfcDI3Ll8zLl8zLmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSkgJiYgKF9wMjcu
XzMuXzMuXzAuY3RvciA9PT0gJ0JsYWNrJykpICYmIChfcDI3Ll8zLl80LmN0b3IgPT09ICdSQk5v
ZGVfZWxtX2J1aWx0aW4nKSkgJiYgKF9wMjcuXzMuXzQuXzAuY3RvciA9PT0gJ0JsYWNrJykpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhayBfdjM2XzU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfNjsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCAoX3AyNy5fNC5fMC5jdG9yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1JlZCc6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKF9wMjcuXzQu
XzMuY3RvciA9PT0gJ1JCTm9kZV9lbG1fYnVpbHRpbicpICYmIChfcDI3Ll80Ll8zLl8wLmN0b3Ig
PT09ICdSZWQnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfMjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKChfcDI3Ll80Ll80LmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSAmJiAoX3AyNy5f
NC5fNC5fMC5jdG9yID09PSAnUmVkJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3YzNl8zOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfNjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgJ05CbGFjayc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoKCgoKF9wMjcuXzAuY3RvciA9PT0gJ0JCbGFjaycpICYmIChf
cDI3Ll80Ll8zLmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSkgJiYgKF9wMjcuXzQuXzMu
XzAuY3RvciA9PT0gJ0JsYWNrJykpICYmIChfcDI3Ll80Ll80LmN0b3IgPT09ICdSQk5vZGVfZWxt
X2J1aWx0aW4nKSkgJiYgKF9wMjcuXzQuXzQuXzAuY3RvciA9PT0gJ0JsYWNrJykpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhayBfdjM2XzQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfNjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrIF92MzZfNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKF9wMjcuXzMuXzAuY3RvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSAnUmVkJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoKF9wMjcuXzMuXzMuY3RvciA9PT0gJ1JCTm9kZV9l
bG1fYnVpbHRpbicpICYmIChfcDI3Ll8zLl8zLl8wLmN0b3IgPT09ICdSZWQnKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBf
djM2XzA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKChfcDI3Ll8zLl80LmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4n
KSAmJiAoX3AyNy5fMy5fNC5fMC5jdG9yID09PSAnUmVkJykpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfMTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrIF92MzZfNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgJ05CbGFjayc6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoKChfcDI3Ll8wLmN0b3IgPT09ICdC
QmxhY2snKSAmJiAoX3AyNy5fMy5fMy5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykpICYm
IChfcDI3Ll8zLl8zLl8wLmN0b3IgPT09ICdCbGFjaycpKSAmJiAoX3AyNy5fMy5fNC5jdG9yID09
PSAnUkJOb2RlX2VsbV9idWlsdGluJykpICYmIChfcDI3Ll8zLl80Ll8wLmN0b3IgPT09ICdCbGFj
aycpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrIF92MzZfNTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzY7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzY7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChfcDI3Ll80LmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX3AyNy5fNC5fMC5jdG9yKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdS
ZWQnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgoX3AyNy5fNC5fMy5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykgJiYgKF9wMjcu
XzQuXzMuXzAuY3RvciA9PT0gJ1JlZCcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfMjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKF9wMjcu
XzQuXzQuY3RvciA9PT0gJ1JCTm9kZV9lbG1fYnVpbHRpbicpICYmIChfcDI3Ll80Ll80Ll8wLmN0
b3IgPT09ICdSZWQnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3YzNl8zOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3Yz
Nl82OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAnTkJsYWNrJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoKCgoKF9wMjcuXzAuY3RvciA9PT0gJ0JCbGFjaycpICYmIChfcDI3Ll80Ll8z
LmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSkgJiYgKF9wMjcuXzQuXzMuXzAuY3RvciA9
PT0gJ0JsYWNrJykpICYmIChfcDI3Ll80Ll80LmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4n
KSkgJiYgKF9wMjcuXzQuXzQuXzAuY3RvciA9PT0gJ0JsYWNrJykpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3YzNl80Owor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrIF92MzZfNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrIF92MzZfNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrIF92MzZfNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhayBfdjM2XzY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkRGljdCRiYWxhbmNlZFRyZWUoX3AyNy5f
MCkoX3AyNy5fMy5fMy5fMSkoX3AyNy5fMy5fMy5fMikoX3AyNy5fMy5fMSkoX3AyNy5fMy5fMiko
X3AyNy5fMSkoX3AyNy5fMikoX3AyNy5fMy5fMy5fMykoX3AyNy5fMy5fMy5fNCkoX3AyNy5fMy5f
NCkoX3AyNy5fNCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKGZhbHNlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSREaWN0JGJhbGFuY2Vk
VHJlZShfcDI3Ll8wKShfcDI3Ll8zLl8xKShfcDI3Ll8zLl8yKShfcDI3Ll8zLl80Ll8xKShfcDI3
Ll8zLl80Ll8yKShfcDI3Ll8xKShfcDI3Ll8yKShfcDI3Ll8zLl8zKShfcDI3Ll8zLl80Ll8zKShf
cDI3Ll8zLl80Ll80KShfcDI3Ll80KTsKKyAgICAgICAgICAgICAgICAgICAgfSB3aGlsZShmYWxz
ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSREaWN0JGJhbGFu
Y2VkVHJlZShfcDI3Ll8wKShfcDI3Ll8xKShfcDI3Ll8yKShfcDI3Ll80Ll8zLl8xKShfcDI3Ll80
Ll8zLl8yKShfcDI3Ll80Ll8xKShfcDI3Ll80Ll8yKShfcDI3Ll8zKShfcDI3Ll80Ll8zLl8zKShf
cDI3Ll80Ll8zLl80KShfcDI3Ll80Ll80KTsKKyAgICAgICAgICAgICAgICB9IHdoaWxlKGZhbHNl
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkRGljdCRiYWxhbmNlZFRy
ZWUoX3AyNy5fMCkoX3AyNy5fMSkoX3AyNy5fMikoX3AyNy5fNC5fMSkoX3AyNy5fNC5fMikoX3Ay
Ny5fNC5fNC5fMSkoX3AyNy5fNC5fNC5fMikoX3AyNy5fMykoX3AyNy5fNC5fMykoX3AyNy5fNC5f
NC5fMykoX3AyNy5fNC5fNC5fNCk7CisgICAgICAgICAgICB9IHdoaWxlKGZhbHNlKTsKKyAgICAg
ICAgICAgIHJldHVybiBBNSgKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JFJC
Tm9kZV9lbG1fYnVpbHRpbiwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JEJs
YWNrLAorICAgICAgICAgICAgICAgIF9wMjcuXzQuXzMuXzEsCisgICAgICAgICAgICAgICAgX3Ay
Ny5fNC5fMy5fMiwKKyAgICAgICAgICAgICAgICBBNShfZWxtX2xhbmckY29yZSREaWN0JFJCTm9k
ZV9lbG1fYnVpbHRpbiwgX2VsbV9sYW5nJGNvcmUkRGljdCRCbGFjaywgX3AyNy5fMSwgX3AyNy5f
MiwgX3AyNy5fMywgX3AyNy5fNC5fMy5fMyksCisgICAgICAgICAgICAgICAgQTUoCisgICAgICAg
ICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkYmFsYW5jZSwKKyAgICAgICAgICAgICAg
ICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCRCbGFjaywKKyAgICAgICAgICAgICAgICAgICAgX3Ay
Ny5fNC5fMSwKKyAgICAgICAgICAgICAgICAgICAgX3AyNy5fNC5fMiwKKyAgICAgICAgICAgICAg
ICAgICAgX3AyNy5fNC5fMy5fNCwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUk
RGljdCRyZWRkZW4oX3AyNy5fNC5fNCkpKTsKKyAgICAgICAgfSB3aGlsZShmYWxzZSk7CisgICAg
ICAgIHJldHVybiBBNSgKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkUkJOb2RlX2Vs
bV9idWlsdGluLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCRCbGFjaywKKyAgICAg
ICAgICAgIF9wMjcuXzMuXzQuXzEsCisgICAgICAgICAgICBfcDI3Ll8zLl80Ll8yLAorICAgICAg
ICAgICAgQTUoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCRiYWxhbmNlLAor
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkQmxhY2ssCisgICAgICAgICAgICAg
ICAgX3AyNy5fMy5fMSwKKyAgICAgICAgICAgICAgICBfcDI3Ll8zLl8yLAorICAgICAgICAgICAg
ICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkcmVkZGVuKF9wMjcuXzMuXzMpLAorICAgICAgICAgICAg
ICAgIF9wMjcuXzMuXzQuXzMpLAorICAgICAgICAgICAgQTUoX2VsbV9sYW5nJGNvcmUkRGljdCRS
Qk5vZGVfZWxtX2J1aWx0aW4sIF9lbG1fbGFuZyRjb3JlJERpY3QkQmxhY2ssIF9wMjcuXzEsIF9w
MjcuXzIsIF9wMjcuXzMuXzQuXzQsIF9wMjcuXzQpKTsKKyAgICB9IHdoaWxlKGZhbHNlKTsKKyAg
ICByZXR1cm4gdHJlZTsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRiYWxhbmNlID0gRjUo
CisgICAgZnVuY3Rpb24gKGMsIGssIHYsIGwsIHIpIHsKKyAgICAgICAgdmFyIHRyZWUgPSBBNShf
ZWxtX2xhbmckY29yZSREaWN0JFJCTm9kZV9lbG1fYnVpbHRpbiwgYywgaywgdiwgbCwgcik7Cisg
ICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSREaWN0JGJsYWNraXNoKHRyZWUpID8gX2VsbV9s
YW5nJGNvcmUkRGljdCRiYWxhbmNlSGVscCh0cmVlKSA6IHRyZWU7CisgICAgfSk7Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkRGljdCRidWJibGUgPSBGNSgKKyAgICBmdW5jdGlvbiAoYywgaywgdiwgbCwg
cikgeworICAgICAgICByZXR1cm4gKF9lbG1fbGFuZyRjb3JlJERpY3QkaXNCQmxhY2sobCkgfHwg
X2VsbV9sYW5nJGNvcmUkRGljdCRpc0JCbGFjayhyKSkgPyBBNSgKKyAgICAgICAgICAgIF9lbG1f
bGFuZyRjb3JlJERpY3QkYmFsYW5jZSwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3Qk
bW9yZUJsYWNrKGMpLAorICAgICAgICAgICAgaywKKyAgICAgICAgICAgIHYsCisgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSREaWN0JGxlc3NCbGFja1RyZWUobCksCisgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSREaWN0JGxlc3NCbGFja1RyZWUocikpIDogQTUoX2VsbV9sYW5nJGNvcmUkRGlj
dCRSQk5vZGVfZWxtX2J1aWx0aW4sIGMsIGssIHYsIGwsIHIpOworICAgIH0pOwordmFyIF9lbG1f
bGFuZyRjb3JlJERpY3QkcmVtb3ZlTWF4ID0gRjUoCisgICAgZnVuY3Rpb24gKGMsIGssIHYsIGws
IHIpIHsKKyAgICAgICAgdmFyIF9wMjggPSByOworICAgICAgICBpZiAoX3AyOC5jdG9yID09PSAn
UkJFbXB0eV9lbG1fYnVpbHRpbicpIHsKKyAgICAgICAgICAgIHJldHVybiBBMyhfZWxtX2xhbmck
Y29yZSREaWN0JHJlbSwgYywgbCwgcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBy
ZXR1cm4gQTUoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCRidWJibGUsCisg
ICAgICAgICAgICAgICAgYywKKyAgICAgICAgICAgICAgICBrLAorICAgICAgICAgICAgICAgIHYs
CisgICAgICAgICAgICAgICAgbCwKKyAgICAgICAgICAgICAgICBBNShfZWxtX2xhbmckY29yZSRE
aWN0JHJlbW92ZU1heCwgX3AyOC5fMCwgX3AyOC5fMSwgX3AyOC5fMiwgX3AyOC5fMywgX3AyOC5f
NCkpOworICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRyZW0gPSBG
MygKKyAgICBmdW5jdGlvbiAoYywgbCwgcikgeworICAgICAgICB2YXIgX3AyOSA9IHtjdG9yOiAn
X1R1cGxlMicsIF8wOiBsLCBfMTogcn07CisgICAgICAgIGlmIChfcDI5Ll8wLmN0b3IgPT09ICdS
QkVtcHR5X2VsbV9idWlsdGluJykgeworICAgICAgICAgICAgaWYgKF9wMjkuXzEuY3RvciA9PT0g
J1JCRW1wdHlfZWxtX2J1aWx0aW4nKSB7CisgICAgICAgICAgICAgICAgdmFyIF9wMzAgPSBjOwor
ICAgICAgICAgICAgICAgIHN3aXRjaCAoX3AzMC5jdG9yKSB7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgJ1JlZCc6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNv
cmUkRGljdCRSQkVtcHR5X2VsbV9idWlsdGluKF9lbG1fbGFuZyRjb3JlJERpY3QkTEJsYWNrKTsK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSAnQmxhY2snOgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJERpY3QkUkJFbXB0eV9lbG1fYnVpbHRpbihfZWxtX2xh
bmckY29yZSREaWN0JExCQmxhY2spOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9EZWJ1Zy5j
cmFzaCgnY2Fubm90IGhhdmUgYmJsYWNrIG9yIG5ibGFjayBub2RlcyBhdCB0aGlzIHBvaW50Jyk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICB2YXIgX3AzMyA9IF9wMjkuXzEuXzA7CisgICAgICAgICAgICAgICAgdmFyIF9wMzIgPSBfcDI5
Ll8wLl8wOworICAgICAgICAgICAgICAgIHZhciBfcDMxID0ge2N0b3I6ICdfVHVwbGUzJywgXzA6
IGMsIF8xOiBfcDMyLCBfMjogX3AzM307CisgICAgICAgICAgICAgICAgaWYgKCgoKF9wMzEuY3Rv
ciA9PT0gJ19UdXBsZTMnKSAmJiAoX3AzMS5fMC5jdG9yID09PSAnQmxhY2snKSkgJiYgKF9wMzEu
XzEuY3RvciA9PT0gJ0xCbGFjaycpKSAmJiAoX3AzMS5fMi5jdG9yID09PSAnUmVkJykpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEE1KF9lbG1fbGFuZyRjb3JlJERpY3QkUkJOb2RlX2Vs
bV9idWlsdGluLCBfZWxtX2xhbmckY29yZSREaWN0JEJsYWNrLCBfcDI5Ll8xLl8xLCBfcDI5Ll8x
Ll8yLCBfcDI5Ll8xLl8zLCBfcDI5Ll8xLl80KTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQTQoCisgICAgICAgICAgICAgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSREaWN0JHJlcG9ydFJlbUJ1ZywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICdCbGFjay9MQmxhY2svUmVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGMsCisgICAgICAg
ICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3MkdG9TdHJpbmcoX3AzMiksCisg
ICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3MkdG9TdHJpbmcoX3Az
MykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGlmIChfcDI5Ll8xLmN0b3IgPT09ICdSQkVtcHR5X2VsbV9idWlsdGluJykg
eworICAgICAgICAgICAgICAgIHZhciBfcDM2ID0gX3AyOS5fMS5fMDsKKyAgICAgICAgICAgICAg
ICB2YXIgX3AzNSA9IF9wMjkuXzAuXzA7CisgICAgICAgICAgICAgICAgdmFyIF9wMzQgPSB7Y3Rv
cjogJ19UdXBsZTMnLCBfMDogYywgXzE6IF9wMzUsIF8yOiBfcDM2fTsKKyAgICAgICAgICAgICAg
ICBpZiAoKCgoX3AzNC5jdG9yID09PSAnX1R1cGxlMycpICYmIChfcDM0Ll8wLmN0b3IgPT09ICdC
bGFjaycpKSAmJiAoX3AzNC5fMS5jdG9yID09PSAnUmVkJykpICYmIChfcDM0Ll8yLmN0b3IgPT09
ICdMQmxhY2snKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQTUoX2VsbV9sYW5nJGNv
cmUkRGljdCRSQk5vZGVfZWxtX2J1aWx0aW4sIF9lbG1fbGFuZyRjb3JlJERpY3QkQmxhY2ssIF9w
MjkuXzAuXzEsIF9wMjkuXzAuXzIsIF9wMjkuXzAuXzMsIF9wMjkuXzAuXzQpOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBNCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkcmVwb3J0UmVtQnVnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgJ0JsYWNrL1JlZC9MQmxhY2snLAorICAgICAgICAgICAgICAgICAg
ICAgICAgYywKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyR0
b1N0cmluZyhfcDM1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJh
c2ljcyR0b1N0cmluZyhfcDM2KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgX3A0MCA9IF9wMjkuXzAuXzI7CisgICAgICAgICAg
ICAgICAgdmFyIF9wMzkgPSBfcDI5Ll8wLl80OworICAgICAgICAgICAgICAgIHZhciBfcDM4ID0g
X3AyOS5fMC5fMTsKKyAgICAgICAgICAgICAgICB2YXIgbCQgPSBBNShfZWxtX2xhbmckY29yZSRE
aWN0JHJlbW92ZU1heCwgX3AyOS5fMC5fMCwgX3AzOCwgX3A0MCwgX3AyOS5fMC5fMywgX3AzOSk7
CisgICAgICAgICAgICAgICAgdmFyIF9wMzcgPSBBMyhfZWxtX2xhbmckY29yZSREaWN0JG1heFdp
dGhEZWZhdWx0LCBfcDM4LCBfcDQwLCBfcDM5KTsKKyAgICAgICAgICAgICAgICB2YXIgayA9IF9w
MzcuXzA7CisgICAgICAgICAgICAgICAgdmFyIHYgPSBfcDM3Ll8xOworICAgICAgICAgICAgICAg
IHJldHVybiBBNShfZWxtX2xhbmckY29yZSREaWN0JGJ1YmJsZSwgYywgaywgdiwgbCQsIHIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGlj
dCRtYXAgPSBGMigKKyAgICBmdW5jdGlvbiAoZiwgZGljdCkgeworICAgICAgICB2YXIgX3A0MSA9
IGRpY3Q7CisgICAgICAgIGlmIChfcDQxLmN0b3IgPT09ICdSQkVtcHR5X2VsbV9idWlsdGluJykg
eworICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJERpY3QkUkJFbXB0eV9lbG1fYnVp
bHRpbihfZWxtX2xhbmckY29yZSREaWN0JExCbGFjayk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB2YXIgX3A0MiA9IF9wNDEuXzE7CisgICAgICAgICAgICByZXR1cm4gQTUoCisgICAg
ICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCRSQk5vZGVfZWxtX2J1aWx0aW4sCisgICAg
ICAgICAgICAgICAgX3A0MS5fMCwKKyAgICAgICAgICAgICAgICBfcDQyLAorICAgICAgICAgICAg
ICAgIEEyKGYsIF9wNDIsIF9wNDEuXzIpLAorICAgICAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRj
b3JlJERpY3QkbWFwLCBmLCBfcDQxLl8zKSwKKyAgICAgICAgICAgICAgICBBMihfZWxtX2xhbmck
Y29yZSREaWN0JG1hcCwgZiwgX3A0MS5fNCkpOworICAgICAgICB9CisgICAgfSk7Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkRGljdCRTYW1lID0ge2N0b3I6ICdTYW1lJ307Cit2YXIgX2VsbV9sYW5nJGNv
cmUkRGljdCRSZW1vdmUgPSB7Y3RvcjogJ1JlbW92ZSd9OwordmFyIF9lbG1fbGFuZyRjb3JlJERp
Y3QkSW5zZXJ0ID0ge2N0b3I6ICdJbnNlcnQnfTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JHVw
ZGF0ZSA9IEYzKAorICAgIGZ1bmN0aW9uIChrLCBhbHRlciwgZGljdCkgeworICAgICAgICB2YXIg
dXAgPSBmdW5jdGlvbiAoZGljdCkgeworICAgICAgICAgICAgdmFyIF9wNDMgPSBkaWN0OworICAg
ICAgICAgICAgaWYgKF9wNDMuY3RvciA9PT0gJ1JCRW1wdHlfZWxtX2J1aWx0aW4nKSB7CisgICAg
ICAgICAgICAgICAgdmFyIF9wNDQgPSBhbHRlcihfZWxtX2xhbmckY29yZSRNYXliZSROb3RoaW5n
KTsKKyAgICAgICAgICAgICAgICBpZiAoX3A0NC5jdG9yID09PSAnTm90aGluZycpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHtjdG9yOiAnX1R1cGxlMicsIF8wOiBfZWxtX2xhbmckY29y
ZSREaWN0JFNhbWUsIF8xOiBfZWxtX2xhbmckY29yZSREaWN0JGVtcHR5fTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgICAgICAgICAgY3RvcjogJ19UdXBsZTInLAorICAgICAgICAgICAgICAgICAgICAgICAgXzA6
IF9lbG1fbGFuZyRjb3JlJERpY3QkSW5zZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgXzE6
IEE1KF9lbG1fbGFuZyRjb3JlJERpY3QkUkJOb2RlX2VsbV9idWlsdGluLCBfZWxtX2xhbmckY29y
ZSREaWN0JFJlZCwgaywgX3A0NC5fMCwgX2VsbV9sYW5nJGNvcmUkRGljdCRlbXB0eSwgX2VsbV9s
YW5nJGNvcmUkRGljdCRlbXB0eSkKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBfcDU1ID0g
X3A0My5fMjsKKyAgICAgICAgICAgICAgICB2YXIgX3A1NCA9IF9wNDMuXzQ7CisgICAgICAgICAg
ICAgICAgdmFyIF9wNTMgPSBfcDQzLl8zOworICAgICAgICAgICAgICAgIHZhciBfcDUyID0gX3A0
My5fMTsKKyAgICAgICAgICAgICAgICB2YXIgX3A1MSA9IF9wNDMuXzA7CisgICAgICAgICAgICAg
ICAgdmFyIF9wNDUgPSBBMihfZWxtX2xhbmckY29yZSRCYXNpY3MkY29tcGFyZSwgaywgX3A1Mik7
CisgICAgICAgICAgICAgICAgc3dpdGNoIChfcDQ1LmN0b3IpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSAnRVEnOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9wNDYgPSBhbHRlcigK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0KF9w
NTUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfcDQ2LmN0b3IgPT09ICdOb3RoaW5n
JykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGN0b3I6ICdfVHVwbGUyJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXzA6IF9lbG1fbGFuZyRjb3JlJERpY3QkUmVtb3ZlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfMTogQTMoX2VsbV9sYW5nJGNvcmUkRGljdCRyZW0sIF9wNTEs
IF9wNTMsIF9wNTQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RvcjogJ19UdXBsZTInLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfMDogX2VsbV9sYW5nJGNvcmUkRGljdCRTYW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfMTogQTUoX2VsbV9sYW5nJGNvcmUk
RGljdCRSQk5vZGVfZWxtX2J1aWx0aW4sIF9wNTEsIF9wNTIsIF9wNDYuXzAsIF9wNTMsIF9wNTQp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnTFQnOgorICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIF9wNDcgPSB1cChfcDUzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbGFn
ID0gX3A0Ny5fMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdMZWZ0ID0gX3A0Ny5f
MTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcDQ4ID0gZmxhZzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHN3aXRjaCAoX3A0OC5jdG9yKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAnU2FtZSc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMics
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfMDogX2VsbV9sYW5nJGNvcmUk
RGljdCRTYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXzE6IEE1KF9l
bG1fbGFuZyRjb3JlJERpY3QkUkJOb2RlX2VsbV9idWlsdGluLCBfcDUxLCBfcDUyLCBfcDU1LCBu
ZXdMZWZ0LCBfcDU0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0luc2VydCc6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjdG9yOiAnX1R1cGxlMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
MDogX2VsbV9sYW5nJGNvcmUkRGljdCRJbnNlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfMTogQTUoX2VsbV9sYW5nJGNvcmUkRGljdCRiYWxhbmNlLCBfcDUxLCBfcDUy
LCBfcDU1LCBuZXdMZWZ0LCBfcDU0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjdG9yOiAnX1R1cGxlMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfMDogX2VsbV9sYW5nJGNvcmUkRGljdCRSZW1vdmUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfMTogQTUoX2VsbV9sYW5nJGNvcmUkRGljdCRidWJibGUsIF9wNTEsIF9w
NTIsIF9wNTUsIG5ld0xlZnQsIF9wNTQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3A0OSA9IHVwKF9wNTQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIGZsYWcgPSBfcDQ5Ll8wOworICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIG5ld1JpZ2h0ID0gX3A0OS5fMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBfcDUwID0gZmxhZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX3A1MC5jdG9y
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnU2FtZSc6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjdG9yOiAnX1R1cGxlMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfMDogX2VsbV9sYW5nJGNvcmUkRGljdCRTYW1lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXzE6IEE1KF9lbG1fbGFuZyRjb3JlJERpY3QkUkJOb2RlX2VsbV9i
dWlsdGluLCBfcDUxLCBfcDUyLCBfcDU1LCBfcDUzLCBuZXdSaWdodCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdJ
bnNlcnQnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RvcjogJ19UdXBsZTInLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXzA6IF9lbG1fbGFuZyRjb3JlJERpY3QkSW5zZXJ0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXzE6IEE1KF9lbG1fbGFuZyRj
b3JlJERpY3QkYmFsYW5jZSwgX3A1MSwgX3A1MiwgX3A1NSwgX3A1MywgbmV3UmlnaHQpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0b3I6ICdfVHVwbGUyJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8wOiBfZWxtX2xhbmckY29yZSREaWN0JFJl
bW92ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8xOiBBNShfZWxtX2xh
bmckY29yZSREaWN0JGJ1YmJsZSwgX3A1MSwgX3A1MiwgX3A1NSwgX3A1MywgbmV3UmlnaHQpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAg
ICB2YXIgX3A1NiA9IHVwKGRpY3QpOworICAgICAgICB2YXIgZmxhZyA9IF9wNTYuXzA7CisgICAg
ICAgIHZhciB1cGRhdGVkRGljdCA9IF9wNTYuXzE7CisgICAgICAgIHZhciBfcDU3ID0gZmxhZzsK
KyAgICAgICAgc3dpdGNoIChfcDU3LmN0b3IpIHsKKyAgICAgICAgICAgIGNhc2UgJ1NhbWUnOgor
ICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVkRGljdDsKKyAgICAgICAgICAgIGNhc2UgJ0lu
c2VydCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJERpY3QkZW5zdXJl
QmxhY2tSb290KHVwZGF0ZWREaWN0KTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJERpY3QkYmxhY2tlbih1cGRhdGVkRGljdCk7Cisg
ICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JGluc2VydCA9IEYzKAor
ICAgIGZ1bmN0aW9uIChrZXksIHZhbHVlLCBkaWN0KSB7CisgICAgICAgIHJldHVybiBBMygKKyAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkdXBkYXRlLAorICAgICAgICAgICAga2V5LAor
ICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGFsd2F5cygKKyAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0KHZhbHVlKSksCisgICAgICAgICAgICBkaWN0KTsK
KyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JHNpbmdsZXRvbiA9IEYyKAorICAgIGZ1
bmN0aW9uIChrZXksIHZhbHVlKSB7CisgICAgICAgIHJldHVybiBBMyhfZWxtX2xhbmckY29yZSRE
aWN0JGluc2VydCwga2V5LCB2YWx1ZSwgX2VsbV9sYW5nJGNvcmUkRGljdCRlbXB0eSk7CisgICAg
fSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCR1bmlvbiA9IEYyKAorICAgIGZ1bmN0aW9uICh0
MSwgdDIpIHsKKyAgICAgICAgcmV0dXJuIEEzKF9lbG1fbGFuZyRjb3JlJERpY3QkZm9sZGwsIF9l
bG1fbGFuZyRjb3JlJERpY3QkaW5zZXJ0LCB0MiwgdDEpOworICAgIH0pOwordmFyIF9lbG1fbGFu
ZyRjb3JlJERpY3QkZmlsdGVyID0gRjIoCisgICAgZnVuY3Rpb24gKHByZWRpY2F0ZSwgZGljdGlv
bmFyeSkgeworICAgICAgICB2YXIgYWRkID0gRjMoCisgICAgICAgICAgICBmdW5jdGlvbiAoa2V5
LCB2YWx1ZSwgZGljdCkgeworICAgICAgICAgICAgICAgIHJldHVybiBBMihwcmVkaWNhdGUsIGtl
eSwgdmFsdWUpID8gQTMoX2VsbV9sYW5nJGNvcmUkRGljdCRpbnNlcnQsIGtleSwgdmFsdWUsIGRp
Y3QpIDogZGljdDsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gQTMoX2VsbV9sYW5n
JGNvcmUkRGljdCRmb2xkbCwgYWRkLCBfZWxtX2xhbmckY29yZSREaWN0JGVtcHR5LCBkaWN0aW9u
YXJ5KTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JGludGVyc2VjdCA9IEYyKAor
ICAgIGZ1bmN0aW9uICh0MSwgdDIpIHsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkRGljdCRmaWx0ZXIsCisgICAgICAgICAgICBGMigKKyAgICAgICAgICAg
ICAgICBmdW5jdGlvbiAoaywgX3A1OCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQTIo
X2VsbV9sYW5nJGNvcmUkRGljdCRtZW1iZXIsIGssIHQyKTsKKyAgICAgICAgICAgICAgICB9KSwK
KyAgICAgICAgICAgIHQxKTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JHBhcnRp
dGlvbiA9IEYyKAorICAgIGZ1bmN0aW9uIChwcmVkaWNhdGUsIGRpY3QpIHsKKyAgICAgICAgdmFy
IGFkZCA9IEYzKAorICAgICAgICAgICAgZnVuY3Rpb24gKGtleSwgdmFsdWUsIF9wNTkpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgX3A2MCA9IF9wNTk7CisgICAgICAgICAgICAgICAgdmFyIF9wNjIg
PSBfcDYwLl8xOworICAgICAgICAgICAgICAgIHZhciBfcDYxID0gX3A2MC5fMDsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gQTIocHJlZGljYXRlLCBrZXksIHZhbHVlKSA/IHsKKyAgICAgICAgICAg
ICAgICAgICAgY3RvcjogJ19UdXBsZTInLAorICAgICAgICAgICAgICAgICAgICBfMDogQTMoX2Vs
bV9sYW5nJGNvcmUkRGljdCRpbnNlcnQsIGtleSwgdmFsdWUsIF9wNjEpLAorICAgICAgICAgICAg
ICAgICAgICBfMTogX3A2MgorICAgICAgICAgICAgICAgIH0gOiB7CisgICAgICAgICAgICAgICAg
ICAgIGN0b3I6ICdfVHVwbGUyJywKKyAgICAgICAgICAgICAgICAgICAgXzA6IF9wNjEsCisgICAg
ICAgICAgICAgICAgICAgIF8xOiBBMyhfZWxtX2xhbmckY29yZSREaWN0JGluc2VydCwga2V5LCB2
YWx1ZSwgX3A2MikKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSk7CisgICAgICAg
IHJldHVybiBBMygKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkZm9sZGwsCisgICAg
ICAgICAgICBhZGQsCisgICAgICAgICAgICB7Y3RvcjogJ19UdXBsZTInLCBfMDogX2VsbV9sYW5n
JGNvcmUkRGljdCRlbXB0eSwgXzE6IF9lbG1fbGFuZyRjb3JlJERpY3QkZW1wdHl9LAorICAgICAg
ICAgICAgZGljdCk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRmcm9tTGlzdCA9
IGZ1bmN0aW9uIChhc3NvY3MpIHsKKyAgICByZXR1cm4gQTMoCisgICAgICAgIF9lbG1fbGFuZyRj
b3JlJExpc3QkZm9sZGwsCisgICAgICAgIEYyKAorICAgICAgICAgICAgZnVuY3Rpb24gKF9wNjMs
IGRpY3QpIHsKKyAgICAgICAgICAgICAgICB2YXIgX3A2NCA9IF9wNjM7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIEEzKF9lbG1fbGFuZyRjb3JlJERpY3QkaW5zZXJ0LCBfcDY0Ll8wLCBfcDY0Ll8x
LCBkaWN0KTsKKyAgICAgICAgICAgIH0pLAorICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JGVt
cHR5LAorICAgICAgICBhc3NvY3MpOworfTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JHJlbW92
ZSA9IEYyKAorICAgIGZ1bmN0aW9uIChrZXksIGRpY3QpIHsKKyAgICAgICAgcmV0dXJuIEEzKAor
ICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCR1cGRhdGUsCisgICAgICAgICAgICBrZXks
CisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3MkYWx3YXlzKF9lbG1fbGFuZyRjb3Jl
JE1heWJlJE5vdGhpbmcpLAorICAgICAgICAgICAgZGljdCk7CisgICAgfSk7Cit2YXIgX2VsbV9s
YW5nJGNvcmUkRGljdCRkaWZmID0gRjIoCisgICAgZnVuY3Rpb24gKHQxLCB0MikgeworICAgICAg
ICByZXR1cm4gQTMoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JGZvbGRsLAorICAg
ICAgICAgICAgRjMoCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGssIHYsIHQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRjb3JlJERpY3QkcmVtb3ZlLCBrLCB0
KTsKKyAgICAgICAgICAgICAgICB9KSwKKyAgICAgICAgICAgIHQxLAorICAgICAgICAgICAgdDIp
OworICAgIH0pOworCisvL2ltcG9ydCBOYXRpdmUuU2NoZWR1bGVyIC8vCisKK3ZhciBfZWxtX2xh
bmckY29yZSROYXRpdmVfVGltZSA9IGZ1bmN0aW9uKCkgeworCit2YXIgbm93ID0gX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX1NjaGVkdWxlci5uYXRpdmVCaW5kaW5nKGZ1bmN0aW9uKGNhbGxiYWNrKQor
eworICAgIGNhbGxiYWNrKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIuc3VjY2VlZChE
YXRlLm5vdygpKSk7Cit9KTsKKworZnVuY3Rpb24gc2V0SW50ZXJ2YWxfKGludGVydmFsLCB0YXNr
KQoreworICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1bGVyLm5hdGl2ZUJp
bmRpbmcoZnVuY3Rpb24oY2FsbGJhY2spCisgICAgeworICAgICAgICB2YXIgaWQgPSBzZXRJbnRl
cnZhbChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hl
ZHVsZXIucmF3U3Bhd24odGFzayk7CisgICAgICAgIH0sIGludGVydmFsKTsKKworICAgICAgICBy
ZXR1cm4gZnVuY3Rpb24oKSB7IGNsZWFySW50ZXJ2YWwoaWQpOyB9OworICAgIH0pOworfQorCity
ZXR1cm4geworICAgIG5vdzogbm93LAorICAgIHNldEludGVydmFsXzogRjIoc2V0SW50ZXJ2YWxf
KQorfTsKKworfSgpOwordmFyIF9lbG1fbGFuZyRjb3JlJFRpbWUkc2V0SW50ZXJ2YWwgPSBfZWxt
X2xhbmckY29yZSROYXRpdmVfVGltZS5zZXRJbnRlcnZhbF87Cit2YXIgX2VsbV9sYW5nJGNvcmUk
VGltZSRzcGF3bkhlbHAgPSBGMygKKyAgICBmdW5jdGlvbiAocm91dGVyLCBpbnRlcnZhbHMsIHBy
b2Nlc3NlcykgeworICAgICAgICB2YXIgX3AwID0gaW50ZXJ2YWxzOworICAgICAgICBpZiAoX3Aw
LmN0b3IgPT09ICdbXScpIHsKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRUYXNr
JHN1Y2NlZWQocHJvY2Vzc2VzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBf
cDEgPSBfcDAuXzA7CisgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9TY2hlZHVsZXIuc3Bhd24oCisgICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAg
ICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGltZSRzZXRJbnRlcnZhbCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIF9wMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEEyKF9lbG1f
bGFuZyRjb3JlJFBsYXRmb3JtJHNlbmRUb1NlbGYsIHJvdXRlciwgX3AxKSkpLAorICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uIChpZCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQTMoCisg
ICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUaW1lJHNwYXduSGVscCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJvdXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9w
MC5fMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEEzKF9lbG1fbGFuZyRjb3JlJERpY3QkaW5z
ZXJ0LCBfcDEsIGlkLCBwcm9jZXNzZXMpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJFRpbWUkYWRkTXlTdWIgPSBGMigKKyAgICBm
dW5jdGlvbiAoX3AyLCBzdGF0ZSkgeworICAgICAgICB2YXIgX3AzID0gX3AyOworICAgICAgICB2
YXIgX3A2ID0gX3AzLl8xOworICAgICAgICB2YXIgX3A1ID0gX3AzLl8wOworICAgICAgICB2YXIg
X3A0ID0gQTIoX2VsbV9sYW5nJGNvcmUkRGljdCRnZXQsIF9wNSwgc3RhdGUpOworICAgICAgICBp
ZiAoX3A0LmN0b3IgPT09ICdOb3RoaW5nJykgeworICAgICAgICAgICAgcmV0dXJuIEEzKAorICAg
ICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkaW5zZXJ0LAorICAgICAgICAgICAgICAg
IF9wNSwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJy
YXkoCisgICAgICAgICAgICAgICAgICAgIFtfcDZdKSwKKyAgICAgICAgICAgICAgICBzdGF0ZSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gQTMoCisgICAgICAgICAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkRGljdCRpbnNlcnQsCisgICAgICAgICAgICAgICAgX3A1LAorICAg
ICAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6OiddLCBfcDYsIF9wNC5f
MCksCisgICAgICAgICAgICAgICAgc3RhdGUpOworICAgICAgICB9CisgICAgfSk7Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkVGltZSRpbk1pbGxpc2Vjb25kcyA9IGZ1bmN0aW9uICh0KSB7CisgICAgcmV0
dXJuIHQ7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJFRpbWUkbWlsbGlzZWNvbmQgPSAxOwordmFy
IF9lbG1fbGFuZyRjb3JlJFRpbWUkc2Vjb25kID0gMTAwMCAqIF9lbG1fbGFuZyRjb3JlJFRpbWUk
bWlsbGlzZWNvbmQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGltZSRtaW51dGUgPSA2MCAqIF9lbG1f
bGFuZyRjb3JlJFRpbWUkc2Vjb25kOwordmFyIF9lbG1fbGFuZyRjb3JlJFRpbWUkaG91ciA9IDYw
ICogX2VsbV9sYW5nJGNvcmUkVGltZSRtaW51dGU7Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGltZSRp
bkhvdXJzID0gZnVuY3Rpb24gKHQpIHsKKyAgICByZXR1cm4gdCAvIF9lbG1fbGFuZyRjb3JlJFRp
bWUkaG91cjsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGltZSRpbk1pbnV0ZXMgPSBmdW5jdGlv
biAodCkgeworICAgIHJldHVybiB0IC8gX2VsbV9sYW5nJGNvcmUkVGltZSRtaW51dGU7Cit9Owor
dmFyIF9lbG1fbGFuZyRjb3JlJFRpbWUkaW5TZWNvbmRzID0gZnVuY3Rpb24gKHQpIHsKKyAgICBy
ZXR1cm4gdCAvIF9lbG1fbGFuZyRjb3JlJFRpbWUkc2Vjb25kOworfTsKK3ZhciBfZWxtX2xhbmck
Y29yZSRUaW1lJG5vdyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9UaW1lLm5vdzsKK3ZhciBfZWxt
X2xhbmckY29yZSRUaW1lJG9uU2VsZk1zZyA9IEYzKAorICAgIGZ1bmN0aW9uIChyb3V0ZXIsIGlu
dGVydmFsLCBzdGF0ZSkgeworICAgICAgICB2YXIgX3A3ID0gQTIoX2VsbV9sYW5nJGNvcmUkRGlj
dCRnZXQsIGludGVydmFsLCBzdGF0ZS50YWdnZXJzKTsKKyAgICAgICAgaWYgKF9wNy5jdG9yID09
PSAnTm90aGluZycpIHsKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRUYXNrJHN1
Y2NlZWQoc3RhdGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIEEyKAor
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRhc2skYW5kVGhlbiwKKyAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSRUaW1lJG5vdywKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiAo
dGltZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAg
ICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJGFuZFRoZW4sCisgICAgICAgICAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSRUYXNrJHNlcXVlbmNlKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSRMaXN0JG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHRh
Z2dlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFBs
YXRmb3JtJHNlbmRUb0FwcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByb3V0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnZ2Vy
KHRpbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX3A3Ll8wKSksCisgICAgICAgICAgICAgICAgICAgICAgICBm
dW5jdGlvbiAoX3A4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1f
bGFuZyRjb3JlJFRhc2skc3VjY2VlZChzdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFu
ZyRjb3JlJFRpbWUkc3Vic2NyaXB0aW9uID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1BsYXRmb3Jt
LmxlYWYoJ1RpbWUnKTsKK3ZhciBfZWxtX2xhbmckY29yZSRUaW1lJFN0YXRlID0gRjIoCisgICAg
ZnVuY3Rpb24gKGEsIGIpIHsKKyAgICAgICAgcmV0dXJuIHt0YWdnZXJzOiBhLCBwcm9jZXNzZXM6
IGJ9OworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJFRpbWUkaW5pdCA9IF9lbG1fbGFuZyRj
b3JlJFRhc2skc3VjY2VlZCgKKyAgICBBMihfZWxtX2xhbmckY29yZSRUaW1lJFN0YXRlLCBfZWxt
X2xhbmckY29yZSREaWN0JGVtcHR5LCBfZWxtX2xhbmckY29yZSREaWN0JGVtcHR5KSk7Cit2YXIg
X2VsbV9sYW5nJGNvcmUkVGltZSRvbkVmZmVjdHMgPSBGMygKKyAgICBmdW5jdGlvbiAocm91dGVy
LCBzdWJzLCBfcDkpIHsKKyAgICAgICAgdmFyIF9wMTAgPSBfcDk7CisgICAgICAgIHZhciByaWdo
dFN0ZXAgPSBGMygKKyAgICAgICAgICAgIGZ1bmN0aW9uIChfcDEyLCBpZCwgX3AxMSkgeworICAg
ICAgICAgICAgICAgIHZhciBfcDEzID0gX3AxMTsKKyAgICAgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMycsCisgICAgICAgICAgICAgICAgICAg
IF8wOiBfcDEzLl8wLAorICAgICAgICAgICAgICAgICAgICBfMTogX3AxMy5fMSwKKyAgICAgICAg
ICAgICAgICAgICAgXzI6IEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkVGFzayRhbmRUaGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX1NjaGVkdWxlci5raWxsKGlkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0
aW9uIChfcDE0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9wMTMuXzI7
CisgICAgICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgdmFyIGJvdGhTdGVwID0gRjQoCisgICAgICAgICAgICBmdW5jdGlv
biAoaW50ZXJ2YWwsIHRhZ2dlcnMsIGlkLCBfcDE1KSB7CisgICAgICAgICAgICAgICAgdmFyIF9w
MTYgPSBfcDE1OworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAg
IGN0b3I6ICdfVHVwbGUzJywKKyAgICAgICAgICAgICAgICAgICAgXzA6IF9wMTYuXzAsCisgICAg
ICAgICAgICAgICAgICAgIF8xOiBBMyhfZWxtX2xhbmckY29yZSREaWN0JGluc2VydCwgaW50ZXJ2
YWwsIGlkLCBfcDE2Ll8xKSwKKyAgICAgICAgICAgICAgICAgICAgXzI6IF9wMTYuXzIKKyAgICAg
ICAgICAgICAgICB9OworICAgICAgICAgICAgfSk7CisgICAgICAgIHZhciBsZWZ0U3RlcCA9IEYz
KAorICAgICAgICAgICAgZnVuY3Rpb24gKGludGVydmFsLCB0YWdnZXJzLCBfcDE3KSB7CisgICAg
ICAgICAgICAgICAgdmFyIF9wMTggPSBfcDE3OworICAgICAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgICAgIGN0b3I6ICdfVHVwbGUzJywKKyAgICAgICAgICAgICAgICAgICAg
XzA6IEEyKF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6OiddLCBpbnRlcnZhbCwgX3AxOC5fMCks
CisgICAgICAgICAgICAgICAgICAgIF8xOiBfcDE4Ll8xLAorICAgICAgICAgICAgICAgICAgICBf
MjogX3AxOC5fMgorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
dmFyIG5ld1RhZ2dlcnMgPSBBMyhfZWxtX2xhbmckY29yZSRMaXN0JGZvbGRsLCBfZWxtX2xhbmck
Y29yZSRUaW1lJGFkZE15U3ViLCBfZWxtX2xhbmckY29yZSREaWN0JGVtcHR5LCBzdWJzKTsKKyAg
ICAgICAgdmFyIF9wMTkgPSBBNigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkbWVy
Z2UsCisgICAgICAgICAgICBsZWZ0U3RlcCwKKyAgICAgICAgICAgIGJvdGhTdGVwLAorICAgICAg
ICAgICAgcmlnaHRTdGVwLAorICAgICAgICAgICAgbmV3VGFnZ2VycywKKyAgICAgICAgICAgIF9w
MTAucHJvY2Vzc2VzLAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGN0b3I6ICdfVHVw
bGUzJywKKyAgICAgICAgICAgICAgICBfMDogX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJv
bUFycmF5KAorICAgICAgICAgICAgICAgICAgICBbXSksCisgICAgICAgICAgICAgICAgXzE6IF9l
bG1fbGFuZyRjb3JlJERpY3QkZW1wdHksCisgICAgICAgICAgICAgICAgXzI6IF9lbG1fbGFuZyRj
b3JlJFRhc2skc3VjY2VlZCgKKyAgICAgICAgICAgICAgICAgICAge2N0b3I6ICdfVHVwbGUwJ30p
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgdmFyIHNwYXduTGlzdCA9IF9wMTkuXzA7CisgICAg
ICAgIHZhciBleGlzdGluZ0RpY3QgPSBfcDE5Ll8xOworICAgICAgICB2YXIga2lsbFRhc2sgPSBf
cDE5Ll8yOworICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRU
YXNrJGFuZFRoZW4sCisgICAgICAgICAgICBraWxsVGFzaywKKyAgICAgICAgICAgIGZ1bmN0aW9u
IChfcDIwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSRUYXNrJGFuZFRoZW4sCisgICAgICAgICAgICAgICAgICAgIEEzKF9l
bG1fbGFuZyRjb3JlJFRpbWUkc3Bhd25IZWxwLCByb3V0ZXIsIHNwYXduTGlzdCwgZXhpc3RpbmdE
aWN0KSwKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKG5ld1Byb2Nlc3NlcykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFRhc2skc3VjY2VlZCgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBMihfZWxtX2xhbmckY29yZSRUaW1lJFN0YXRl
LCBuZXdUYWdnZXJzLCBuZXdQcm9jZXNzZXMpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICB9KTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRUaW1lJEV2ZXJ5ID0g
RjIoCisgICAgZnVuY3Rpb24gKGEsIGIpIHsKKyAgICAgICAgcmV0dXJuIHtjdG9yOiAnRXZlcnkn
LCBfMDogYSwgXzE6IGJ9OworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJFRpbWUkZXZlcnkg
PSBGMigKKyAgICBmdW5jdGlvbiAoaW50ZXJ2YWwsIHRhZ2dlcikgeworICAgICAgICByZXR1cm4g
X2VsbV9sYW5nJGNvcmUkVGltZSRzdWJzY3JpcHRpb24oCisgICAgICAgICAgICBBMihfZWxtX2xh
bmckY29yZSRUaW1lJEV2ZXJ5LCBpbnRlcnZhbCwgdGFnZ2VyKSk7CisgICAgfSk7Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkVGltZSRzdWJNYXAgPSBGMigKKyAgICBmdW5jdGlvbiAoZiwgX3AyMSkgewor
ICAgICAgICB2YXIgX3AyMiA9IF9wMjE7CisgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAg
IF9lbG1fbGFuZyRjb3JlJFRpbWUkRXZlcnksCisgICAgICAgICAgICBfcDIyLl8wLAorICAgICAg
ICAgICAgZnVuY3Rpb24gKF9wMjMpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZigKKyAgICAg
ICAgICAgICAgICAgICAgX3AyMi5fMShfcDIzKSk7CisgICAgICAgICAgICB9KTsKKyAgICB9KTsK
K19lbG1fbGFuZyRjb3JlJE5hdGl2ZV9QbGF0Zm9ybS5lZmZlY3RNYW5hZ2Vyc1snVGltZSddID0g
e3BrZzogJ2VsbS1sYW5nL2NvcmUnLCBpbml0OiBfZWxtX2xhbmckY29yZSRUaW1lJGluaXQsIG9u
RWZmZWN0czogX2VsbV9sYW5nJGNvcmUkVGltZSRvbkVmZmVjdHMsIG9uU2VsZk1zZzogX2VsbV9s
YW5nJGNvcmUkVGltZSRvblNlbGZNc2csIHRhZzogJ3N1YicsIHN1Yk1hcDogX2VsbV9sYW5nJGNv
cmUkVGltZSRzdWJNYXB9OworCisvL2ltcG9ydCBNYXliZSwgTmF0aXZlLkFycmF5LCBOYXRpdmUu
TGlzdCwgTmF0aXZlLlV0aWxzLCBSZXN1bHQgLy8KKwordmFyIF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9Kc29uID0gZnVuY3Rpb24oKSB7CisKKworLy8gQ09SRSBERUNPREVSUworCitmdW5jdGlvbiBz
dWNjZWVkKG1zZykKK3sKKyAgICByZXR1cm4geworICAgICAgICBjdG9yOiAnPGRlY29kZXI+JywK
KyAgICAgICAgdGFnOiAnc3VjY2VlZCcsCisgICAgICAgIG1zZzogbXNnCisgICAgfTsKK30KKwor
ZnVuY3Rpb24gZmFpbChtc2cpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgY3RvcjogJzxkZWNv
ZGVyPicsCisgICAgICAgIHRhZzogJ2ZhaWwnLAorICAgICAgICBtc2c6IG1zZworICAgIH07Cit9
CisKK2Z1bmN0aW9uIGRlY29kZVByaW1pdGl2ZSh0YWcpCit7CisgICAgcmV0dXJuIHsKKyAgICAg
ICAgY3RvcjogJzxkZWNvZGVyPicsCisgICAgICAgIHRhZzogdGFnCisgICAgfTsKK30KKworZnVu
Y3Rpb24gZGVjb2RlQ29udGFpbmVyKHRhZywgZGVjb2RlcikKK3sKKyAgICByZXR1cm4geworICAg
ICAgICBjdG9yOiAnPGRlY29kZXI+JywKKyAgICAgICAgdGFnOiB0YWcsCisgICAgICAgIGRlY29k
ZXI6IGRlY29kZXIKKyAgICB9OworfQorCitmdW5jdGlvbiBkZWNvZGVOdWxsKHZhbHVlKQorewor
ICAgIHJldHVybiB7CisgICAgICAgIGN0b3I6ICc8ZGVjb2Rlcj4nLAorICAgICAgICB0YWc6ICdu
dWxsJywKKyAgICAgICAgdmFsdWU6IHZhbHVlCisgICAgfTsKK30KKworZnVuY3Rpb24gZGVjb2Rl
RmllbGQoZmllbGQsIGRlY29kZXIpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgY3RvcjogJzxk
ZWNvZGVyPicsCisgICAgICAgIHRhZzogJ2ZpZWxkJywKKyAgICAgICAgZmllbGQ6IGZpZWxkLAor
ICAgICAgICBkZWNvZGVyOiBkZWNvZGVyCisgICAgfTsKK30KKworZnVuY3Rpb24gZGVjb2RlS2V5
VmFsdWVQYWlycyhkZWNvZGVyKQoreworICAgIHJldHVybiB7CisgICAgICAgIGN0b3I6ICc8ZGVj
b2Rlcj4nLAorICAgICAgICB0YWc6ICdrZXktdmFsdWUnLAorICAgICAgICBkZWNvZGVyOiBkZWNv
ZGVyCisgICAgfTsKK30KKworZnVuY3Rpb24gZGVjb2RlT2JqZWN0KGYsIGRlY29kZXJzKQorewor
ICAgIHJldHVybiB7CisgICAgICAgIGN0b3I6ICc8ZGVjb2Rlcj4nLAorICAgICAgICB0YWc6ICdt
YXAtbWFueScsCisgICAgICAgIGZ1bmM6IGYsCisgICAgICAgIGRlY29kZXJzOiBkZWNvZGVycwor
ICAgIH07Cit9CisKK2Z1bmN0aW9uIGRlY29kZVR1cGxlKGYsIGRlY29kZXJzKQoreworICAgIHJl
dHVybiB7CisgICAgICAgIGN0b3I6ICc8ZGVjb2Rlcj4nLAorICAgICAgICB0YWc6ICd0dXBsZScs
CisgICAgICAgIGZ1bmM6IGYsCisgICAgICAgIGRlY29kZXJzOiBkZWNvZGVycworICAgIH07Cit9
CisKK2Z1bmN0aW9uIGFuZFRoZW4oZGVjb2RlciwgY2FsbGJhY2spCit7CisgICAgcmV0dXJuIHsK
KyAgICAgICAgY3RvcjogJzxkZWNvZGVyPicsCisgICAgICAgIHRhZzogJ2FuZFRoZW4nLAorICAg
ICAgICBkZWNvZGVyOiBkZWNvZGVyLAorICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sKKyAgICB9
OworfQorCitmdW5jdGlvbiBjdXN0b21BbmRUaGVuKGRlY29kZXIsIGNhbGxiYWNrKQoreworICAg
IHJldHVybiB7CisgICAgICAgIGN0b3I6ICc8ZGVjb2Rlcj4nLAorICAgICAgICB0YWc6ICdjdXN0
b21BbmRUaGVuJywKKyAgICAgICAgZGVjb2RlcjogZGVjb2RlciwKKyAgICAgICAgY2FsbGJhY2s6
IGNhbGxiYWNrCisgICAgfTsKK30KKworZnVuY3Rpb24gb25lT2YoZGVjb2RlcnMpCit7CisgICAg
cmV0dXJuIHsKKyAgICAgICAgY3RvcjogJzxkZWNvZGVyPicsCisgICAgICAgIHRhZzogJ29uZU9m
JywKKyAgICAgICAgZGVjb2RlcnM6IGRlY29kZXJzCisgICAgfTsKK30KKworCisvLyBERUNPRElO
RyBPQkpFQ1RTCisKK2Z1bmN0aW9uIGRlY29kZU9iamVjdDEoZiwgZDEpCit7CisgICAgcmV0dXJu
IGRlY29kZU9iamVjdChmLCBbZDFdKTsKK30KKworZnVuY3Rpb24gZGVjb2RlT2JqZWN0MihmLCBk
MSwgZDIpCit7CisgICAgcmV0dXJuIGRlY29kZU9iamVjdChmLCBbZDEsIGQyXSk7Cit9CisKK2Z1
bmN0aW9uIGRlY29kZU9iamVjdDMoZiwgZDEsIGQyLCBkMykKK3sKKyAgICByZXR1cm4gZGVjb2Rl
T2JqZWN0KGYsIFtkMSwgZDIsIGQzXSk7Cit9CisKK2Z1bmN0aW9uIGRlY29kZU9iamVjdDQoZiwg
ZDEsIGQyLCBkMywgZDQpCit7CisgICAgcmV0dXJuIGRlY29kZU9iamVjdChmLCBbZDEsIGQyLCBk
MywgZDRdKTsKK30KKworZnVuY3Rpb24gZGVjb2RlT2JqZWN0NShmLCBkMSwgZDIsIGQzLCBkNCwg
ZDUpCit7CisgICAgcmV0dXJuIGRlY29kZU9iamVjdChmLCBbZDEsIGQyLCBkMywgZDQsIGQ1XSk7
Cit9CisKK2Z1bmN0aW9uIGRlY29kZU9iamVjdDYoZiwgZDEsIGQyLCBkMywgZDQsIGQ1LCBkNikK
K3sKKyAgICByZXR1cm4gZGVjb2RlT2JqZWN0KGYsIFtkMSwgZDIsIGQzLCBkNCwgZDUsIGQ2XSk7
Cit9CisKK2Z1bmN0aW9uIGRlY29kZU9iamVjdDcoZiwgZDEsIGQyLCBkMywgZDQsIGQ1LCBkNiwg
ZDcpCit7CisgICAgcmV0dXJuIGRlY29kZU9iamVjdChmLCBbZDEsIGQyLCBkMywgZDQsIGQ1LCBk
NiwgZDddKTsKK30KKworZnVuY3Rpb24gZGVjb2RlT2JqZWN0OChmLCBkMSwgZDIsIGQzLCBkNCwg
ZDUsIGQ2LCBkNywgZDgpCit7CisgICAgcmV0dXJuIGRlY29kZU9iamVjdChmLCBbZDEsIGQyLCBk
MywgZDQsIGQ1LCBkNiwgZDcsIGQ4XSk7Cit9CisKKworLy8gREVDT0RJTkcgVFVQTEVTCisKK2Z1
bmN0aW9uIGRlY29kZVR1cGxlMShmLCBkMSkKK3sKKyAgICByZXR1cm4gZGVjb2RlVHVwbGUoZiwg
W2QxXSk7Cit9CisKK2Z1bmN0aW9uIGRlY29kZVR1cGxlMihmLCBkMSwgZDIpCit7CisgICAgcmV0
dXJuIGRlY29kZVR1cGxlKGYsIFtkMSwgZDJdKTsKK30KKworZnVuY3Rpb24gZGVjb2RlVHVwbGUz
KGYsIGQxLCBkMiwgZDMpCit7CisgICAgcmV0dXJuIGRlY29kZVR1cGxlKGYsIFtkMSwgZDIsIGQz
XSk7Cit9CisKK2Z1bmN0aW9uIGRlY29kZVR1cGxlNChmLCBkMSwgZDIsIGQzLCBkNCkKK3sKKyAg
ICByZXR1cm4gZGVjb2RlVHVwbGUoZiwgW2QxLCBkMiwgZDMsIGQ0XSk7Cit9CisKK2Z1bmN0aW9u
IGRlY29kZVR1cGxlNShmLCBkMSwgZDIsIGQzLCBkNCwgZDUpCit7CisgICAgcmV0dXJuIGRlY29k
ZVR1cGxlKGYsIFtkMSwgZDIsIGQzLCBkNCwgZDVdKTsKK30KKworZnVuY3Rpb24gZGVjb2RlVHVw
bGU2KGYsIGQxLCBkMiwgZDMsIGQ0LCBkNSwgZDYpCit7CisgICAgcmV0dXJuIGRlY29kZVR1cGxl
KGYsIFtkMSwgZDIsIGQzLCBkNCwgZDUsIGQ2XSk7Cit9CisKK2Z1bmN0aW9uIGRlY29kZVR1cGxl
NyhmLCBkMSwgZDIsIGQzLCBkNCwgZDUsIGQ2LCBkNykKK3sKKyAgICByZXR1cm4gZGVjb2RlVHVw
bGUoZiwgW2QxLCBkMiwgZDMsIGQ0LCBkNSwgZDYsIGQ3XSk7Cit9CisKK2Z1bmN0aW9uIGRlY29k
ZVR1cGxlOChmLCBkMSwgZDIsIGQzLCBkNCwgZDUsIGQ2LCBkNywgZDgpCit7CisgICAgcmV0dXJu
IGRlY29kZVR1cGxlKGYsIFtkMSwgZDIsIGQzLCBkNCwgZDUsIGQ2LCBkNywgZDhdKTsKK30KKwor
CisvLyBERUNPREUgSEVMUEVSUworCitmdW5jdGlvbiBvayh2YWx1ZSkKK3sKKyAgICByZXR1cm4g
eyB0YWc6ICdvaycsIHZhbHVlOiB2YWx1ZSB9OworfQorCitmdW5jdGlvbiBiYWRQcmltaXRpdmUo
dHlwZSwgdmFsdWUpCit7CisgICAgcmV0dXJuIHsgdGFnOiAncHJpbWl0aXZlJywgdHlwZTogdHlw
ZSwgdmFsdWU6IHZhbHVlIH07Cit9CisKK2Z1bmN0aW9uIGJhZEluZGV4KGluZGV4LCBuZXN0ZWRQ
cm9ibGVtcykKK3sKKyAgICByZXR1cm4geyB0YWc6ICdpbmRleCcsIGluZGV4OiBpbmRleCwgcmVz
dDogbmVzdGVkUHJvYmxlbXMgfTsKK30KKworZnVuY3Rpb24gYmFkRmllbGQoZmllbGQsIG5lc3Rl
ZFByb2JsZW1zKQoreworICAgIHJldHVybiB7IHRhZzogJ2ZpZWxkJywgZmllbGQ6IGZpZWxkLCBy
ZXN0OiBuZXN0ZWRQcm9ibGVtcyB9OworfQorCitmdW5jdGlvbiBiYWRPbmVPZihwcm9ibGVtcykK
K3sKKyAgICByZXR1cm4geyB0YWc6ICdvbmVPZicsIHByb2JsZW1zOiBwcm9ibGVtcyB9OworfQor
CitmdW5jdGlvbiBiYWRDdXN0b20obXNnKQoreworICAgIHJldHVybiB7IHRhZzogJ2N1c3RvbScs
IG1zZzogbXNnIH07Cit9CisKK2Z1bmN0aW9uIGJhZChtc2cpCit7CisgICAgcmV0dXJuIHsgdGFn
OiAnZmFpbCcsIG1zZzogbXNnIH07Cit9CisKK2Z1bmN0aW9uIGJhZFRvU3RyaW5nKHByb2JsZW0p
Cit7CisgICAgdmFyIGNvbnRleHQgPSAnXyc7CisgICAgd2hpbGUgKHByb2JsZW0pCisgICAgewor
ICAgICAgICBzd2l0Y2ggKHByb2JsZW0udGFnKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNl
ICdwcmltaXRpdmUnOgorICAgICAgICAgICAgICAgIHJldHVybiAnRXhwZWN0aW5nICcgKyBwcm9i
bGVtLnR5cGUKKyAgICAgICAgICAgICAgICAgICAgKyAoY29udGV4dCA9PT0gJ18nID8gJycgOiAn
IGF0ICcgKyBjb250ZXh0KQorICAgICAgICAgICAgICAgICAgICArICcgYnV0IGluc3RlYWQgZ290
OiAnICsganNUb1N0cmluZyhwcm9ibGVtLnZhbHVlKTsKKworICAgICAgICAgICAgY2FzZSAnaW5k
ZXgnOgorICAgICAgICAgICAgICAgIGNvbnRleHQgKz0gJ1snICsgcHJvYmxlbS5pbmRleCArICdd
JzsKKyAgICAgICAgICAgICAgICBwcm9ibGVtID0gcHJvYmxlbS5yZXN0OworICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdmaWVsZCc6CisgICAgICAgICAgICAgICAg
Y29udGV4dCArPSAnLicgKyBwcm9ibGVtLmZpZWxkOworICAgICAgICAgICAgICAgIHByb2JsZW0g
PSBwcm9ibGVtLnJlc3Q7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNh
c2UgJ29uZU9mJzoKKyAgICAgICAgICAgICAgICB2YXIgcHJvYmxlbXMgPSBwcm9ibGVtLnByb2Js
ZW1zOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvYmxlbXMubGVuZ3Ro
OyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwcm9ibGVtc1tp
XSA9IGJhZFRvU3RyaW5nKHByb2JsZW1zW2ldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcmV0dXJuICdJIHJhbiBpbnRvIHRoZSBmb2xsb3dpbmcgcHJvYmxlbXMnCisgICAg
ICAgICAgICAgICAgICAgICsgKGNvbnRleHQgPT09ICdfJyA/ICcnIDogJyBhdCAnICsgY29udGV4
dCkKKyAgICAgICAgICAgICAgICAgICAgKyAnOlxuXG4nICsgcHJvYmxlbXMuam9pbignXG4nKTsK
KworICAgICAgICAgICAgY2FzZSAnY3VzdG9tJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ0Eg
YGN1c3RvbURlY29kZXJgIGZhaWxlZCcKKyAgICAgICAgICAgICAgICAgICAgKyAoY29udGV4dCA9
PT0gJ18nID8gJycgOiAnIGF0ICcgKyBjb250ZXh0KQorICAgICAgICAgICAgICAgICAgICArICcg
d2l0aCB0aGUgbWVzc2FnZTogJyArIHByb2JsZW0ubXNnOworCisgICAgICAgICAgICBjYXNlICdm
YWlsJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ0kgcmFuIGludG8gYSBgZmFpbGAgZGVjb2Rl
cicKKyAgICAgICAgICAgICAgICAgICAgKyAoY29udGV4dCA9PT0gJ18nID8gJycgOiAnIGF0ICcg
KyBjb250ZXh0KQorICAgICAgICAgICAgICAgICAgICArICc6ICcgKyBwcm9ibGVtLm1zZzsKKyAg
ICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24ganNUb1N0cmluZyh2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZAorICAgICAgICA/ICd1bmRlZmluZWQnCisgICAgICAg
IDogSlNPTi5zdHJpbmdpZnkodmFsdWUpOworfQorCisKKy8vIERFQ09ERQorCitmdW5jdGlvbiBy
dW5PblN0cmluZyhkZWNvZGVyLCBzdHJpbmcpCit7CisgICAgdmFyIGpzb247CisgICAgdHJ5Cisg
ICAgeworICAgICAgICBqc29uID0gSlNPTi5wYXJzZShzdHJpbmcpOworICAgIH0KKyAgICBjYXRj
aCAoZSkKKyAgICB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1bHQkRXJyKCdH
aXZlbiBhbiBpbnZhbGlkIEpTT046ICcgKyBlLm1lc3NhZ2UpOworICAgIH0KKyAgICByZXR1cm4g
cnVuKGRlY29kZXIsIGpzb24pOworfQorCitmdW5jdGlvbiBydW4oZGVjb2RlciwgdmFsdWUpCit7
CisgICAgdmFyIHJlc3VsdCA9IHJ1bkhlbHAoZGVjb2RlciwgdmFsdWUpOworICAgIHJldHVybiAo
cmVzdWx0LnRhZyA9PT0gJ29rJykKKyAgICAgICAgPyBfZWxtX2xhbmckY29yZSRSZXN1bHQkT2so
cmVzdWx0LnZhbHVlKQorICAgICAgICA6IF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRFcnIoYmFkVG9T
dHJpbmcocmVzdWx0KSk7Cit9CisKK2Z1bmN0aW9uIHJ1bkhlbHAoZGVjb2RlciwgdmFsdWUpCit7
CisgICAgc3dpdGNoIChkZWNvZGVyLnRhZykKKyAgICB7CisgICAgICAgIGNhc2UgJ2Jvb2wnOgor
ICAgICAgICAgICAgcmV0dXJuICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykKKyAgICAgICAg
ICAgICAgICA/IG9rKHZhbHVlKQorICAgICAgICAgICAgICAgIDogYmFkUHJpbWl0aXZlKCdhIEJv
b2wnLCB2YWx1ZSk7CisKKyAgICAgICAgY2FzZSAnaW50JzoKKyAgICAgICAgICAgIGlmICh0eXBl
b2YgdmFsdWUgIT09ICdudW1iZXInKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJhZFByaW1p
dGl2ZSgnYW4gSW50JywgdmFsdWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
LTIxNDc0ODM2NDcgPCB2YWx1ZSAmJiB2YWx1ZSA8IDIxNDc0ODM2NDcgJiYgKHZhbHVlIHwgMCkg
PT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG9rKHZhbHVlKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKGlzRmluaXRlKHZhbHVlKSAmJiAhKHZhbHVlICUgMSkp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gb2sodmFsdWUpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICByZXR1cm4gYmFkUHJpbWl0aXZlKCdhbiBJbnQnLCB2YWx1ZSk7CisKKyAgICAg
ICAgY2FzZSAnZmxvYXQnOgorICAgICAgICAgICAgcmV0dXJuICh0eXBlb2YgdmFsdWUgPT09ICdu
dW1iZXInKQorICAgICAgICAgICAgICAgID8gb2sodmFsdWUpCisgICAgICAgICAgICAgICAgOiBi
YWRQcmltaXRpdmUoJ2EgRmxvYXQnLCB2YWx1ZSk7CisKKyAgICAgICAgY2FzZSAnc3RyaW5nJzoK
KyAgICAgICAgICAgIHJldHVybiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykKKyAgICAgICAg
ICAgICAgICA/IG9rKHZhbHVlKQorICAgICAgICAgICAgICAgIDogKHZhbHVlIGluc3RhbmNlb2Yg
U3RyaW5nKQorICAgICAgICAgICAgICAgICAgICA/IG9rKHZhbHVlICsgJycpCisgICAgICAgICAg
ICAgICAgICAgIDogYmFkUHJpbWl0aXZlKCdhIFN0cmluZycsIHZhbHVlKTsKKworICAgICAgICBj
YXNlICdudWxsJzoKKyAgICAgICAgICAgIHJldHVybiAodmFsdWUgPT09IG51bGwpCisgICAgICAg
ICAgICAgICAgPyBvayhkZWNvZGVyLnZhbHVlKQorICAgICAgICAgICAgICAgIDogYmFkUHJpbWl0
aXZlKCdudWxsJywgdmFsdWUpOworCisgICAgICAgIGNhc2UgJ3ZhbHVlJzoKKyAgICAgICAgICAg
IHJldHVybiBvayh2YWx1ZSk7CisKKyAgICAgICAgY2FzZSAnbGlzdCc6CisgICAgICAgICAgICBp
ZiAoISh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gYmFkUHJpbWl0aXZlKCdhIExpc3QnLCB2YWx1ZSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHZhciBsaXN0ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuTmls
OworICAgICAgICAgICAgZm9yICh2YXIgaSA9IHZhbHVlLmxlbmd0aDsgaS0tOyApCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJ1bkhlbHAoZGVjb2Rlci5kZWNv
ZGVyLCB2YWx1ZVtpXSk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC50YWcgIT09ICdvaycp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFkSW5kZXgo
aSwgcmVzdWx0KQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsaXN0ID0gX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuQ29ucyhyZXN1bHQudmFsdWUsIGxpc3QpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG9rKGxpc3QpOworCisgICAgICAgIGNhc2UgJ2Fy
cmF5JzoKKyAgICAgICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBiYWRQcmltaXRpdmUoJ2FuIEFycmF5Jywg
dmFsdWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgbGVuID0gdmFsdWUubGVu
Z3RoOworICAgICAgICAgICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KGxlbik7CisgICAgICAgICAg
ICBmb3IgKHZhciBpID0gbGVuOyBpLS07ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICB2YXIgcmVzdWx0ID0gcnVuSGVscChkZWNvZGVyLmRlY29kZXIsIHZhbHVlW2ldKTsKKyAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0LnRhZyAhPT0gJ29rJykKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBiYWRJbmRleChpLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHJlc3VsdC52YWx1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBvayhfZWxtX2xhbmckY29yZSROYXRpdmVfQXJy
YXkuZnJvbUpTQXJyYXkoYXJyYXkpKTsKKworICAgICAgICBjYXNlICdtYXliZSc6CisgICAgICAg
ICAgICB2YXIgcmVzdWx0ID0gcnVuSGVscChkZWNvZGVyLmRlY29kZXIsIHZhbHVlKTsKKyAgICAg
ICAgICAgIHJldHVybiAocmVzdWx0LnRhZyA9PT0gJ29rJykKKyAgICAgICAgICAgICAgICA/IG9r
KF9lbG1fbGFuZyRjb3JlJE1heWJlJEp1c3QocmVzdWx0LnZhbHVlKSkKKyAgICAgICAgICAgICAg
ICA6IG9rKF9lbG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmcpOworCisgICAgICAgIGNhc2UgJ2Zp
ZWxkJzoKKyAgICAgICAgICAgIHZhciBmaWVsZCA9IGRlY29kZXIuZmllbGQ7CisgICAgICAgICAg
ICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCAhKGZp
ZWxkIGluIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFk
UHJpbWl0aXZlKCdhbiBvYmplY3Qgd2l0aCBhIGZpZWxkIG5hbWVkIGAnICsgZmllbGQgKyAnYCcs
IHZhbHVlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJ1bkhl
bHAoZGVjb2Rlci5kZWNvZGVyLCB2YWx1ZVtmaWVsZF0pOworICAgICAgICAgICAgcmV0dXJuIChy
ZXN1bHQudGFnID09PSAnb2snKQorICAgICAgICAgICAgICAgID8gcmVzdWx0CisgICAgICAgICAg
ICAgICAgOiBiYWRGaWVsZChmaWVsZCwgcmVzdWx0KTsKKworICAgICAgICBjYXNlICdrZXktdmFs
dWUnOgorICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUg
PT09IG51bGwgfHwgdmFsdWUgaW5zdGFuY2VvZiBBcnJheSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gYmFkUHJpbWl0aXZlKCdhbiBvYmplY3QnLCB2YWx1ZSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBrZXlWYWx1ZVBhaXJzID0gX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0xpc3QuTmlsOworICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBydW5IZWxwKGRlY29k
ZXIuZGVjb2RlciwgdmFsdWVba2V5XSk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC50YWcg
IT09ICdvaycpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
YmFkRmllbGQoa2V5LCByZXN1bHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB2YXIgcGFpciA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5UdXBsZTIoa2V5LCByZXN1
bHQudmFsdWUpOworICAgICAgICAgICAgICAgIGtleVZhbHVlUGFpcnMgPSBfZWxtX2xhbmckY29y
ZSROYXRpdmVfTGlzdC5Db25zKHBhaXIsIGtleVZhbHVlUGFpcnMpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIG9rKGtleVZhbHVlUGFpcnMpOworCisgICAgICAgIGNhc2UgJ21h
cC1tYW55JzoKKyAgICAgICAgICAgIHZhciBhbnN3ZXIgPSBkZWNvZGVyLmZ1bmM7CisgICAgICAg
ICAgICB2YXIgZGVjb2RlcnMgPSBkZWNvZGVyLmRlY29kZXJzOworICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBkZWNvZGVycy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICB2YXIgcmVzdWx0ID0gcnVuSGVscChkZWNvZGVyc1tpXSwgdmFsdWUpOworICAg
ICAgICAgICAgICAgIGlmIChyZXN1bHQudGFnICE9PSAnb2snKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYW5zd2VyID0gYW5zd2VyKHJlc3VsdC52YWx1ZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gb2soYW5zd2VyKTsKKworICAgICAgICBjYXNlICd0dXBs
ZSc6CisgICAgICAgICAgICB2YXIgZGVjb2RlcnMgPSBkZWNvZGVyLmRlY29kZXJzOworICAgICAg
ICAgICAgdmFyIGxlbiA9IGRlY29kZXJzLmxlbmd0aDsKKworICAgICAgICAgICAgaWYgKCAhKHZh
bHVlIGluc3RhbmNlb2YgQXJyYXkpIHx8IHZhbHVlLmxlbmd0aCAhPT0gbGVuICkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFkUHJpbWl0aXZlKCdhIFR1cGxlIHdpdGgg
JyArIGxlbiArICcgZW50cmllcycsIHZhbHVlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgdmFyIGFuc3dlciA9IGRlY29kZXIuZnVuYzsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbGVuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFyIHJlc3Vs
dCA9IHJ1bkhlbHAoZGVjb2RlcnNbaV0sIHZhbHVlW2ldKTsKKyAgICAgICAgICAgICAgICBpZiAo
cmVzdWx0LnRhZyAhPT0gJ29rJykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBiYWRJbmRleChpLCByZXN1bHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBhbnN3ZXIgPSBhbnN3ZXIocmVzdWx0LnZhbHVlKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBvayhhbnN3ZXIpOworCisgICAgICAgIGNhc2UgJ2N1c3RvbUFu
ZFRoZW4nOgorICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJ1bkhlbHAoZGVjb2Rlci5kZWNvZGVy
LCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAocmVzdWx0LnRhZyAhPT0gJ29rJykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdmFyIHJlYWxSZXN1bHQgPSBkZWNvZGVyLmNhbGxiYWNrKHJlc3VsdC52YWx1ZSk7
CisgICAgICAgICAgICBpZiAocmVhbFJlc3VsdC5jdG9yID09PSAnRXJyJykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFkQ3VzdG9tKHJlYWxSZXN1bHQuXzApOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG9rKHJlYWxSZXN1bHQuXzApOworCisgICAg
ICAgIGNhc2UgJ2FuZFRoZW4nOgorICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJ1bkhlbHAoZGVj
b2Rlci5kZWNvZGVyLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gKHJlc3VsdC50YWcgIT09
ICdvaycpCisgICAgICAgICAgICAgICAgPyByZXN1bHQKKyAgICAgICAgICAgICAgICA6IHJ1bkhl
bHAoZGVjb2Rlci5jYWxsYmFjayhyZXN1bHQudmFsdWUpLCB2YWx1ZSk7CisKKyAgICAgICAgY2Fz
ZSAnb25lT2YnOgorICAgICAgICAgICAgdmFyIGVycm9ycyA9IFtdOworICAgICAgICAgICAgdmFy
IHRlbXAgPSBkZWNvZGVyLmRlY29kZXJzOworICAgICAgICAgICAgd2hpbGUgKHRlbXAuY3RvciAh
PT0gJ1tdJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcnVu
SGVscCh0ZW1wLl8wLCB2YWx1ZSk7CisKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnRhZyA9
PT0gJ29rJykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2go
cmVzdWx0KTsKKworICAgICAgICAgICAgICAgIHRlbXAgPSB0ZW1wLl8xOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGJhZE9uZU9mKGVycm9ycyk7CisKKyAgICAgICAgY2FzZSAn
ZmFpbCc6CisgICAgICAgICAgICByZXR1cm4gYmFkKGRlY29kZXIubXNnKTsKKworICAgICAgICBj
YXNlICdzdWNjZWVkJzoKKyAgICAgICAgICAgIHJldHVybiBvayhkZWNvZGVyLm1zZyk7CisgICAg
fQorfQorCisKKy8vIEVRVUFMSVRZCisKK2Z1bmN0aW9uIGVxdWFsaXR5KGEsIGIpCit7CisgICAg
aWYgKGEgPT09IGIpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBp
ZiAoYS50YWcgIT09IGIudGFnKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHN3aXRjaCAoYS50YWcpCisgICAgeworICAgICAgICBjYXNlICdzdWNjZWVkJzoKKyAg
ICAgICAgY2FzZSAnZmFpbCc6CisgICAgICAgICAgICByZXR1cm4gYS5tc2cgPT09IGIubXNnOwor
CisgICAgICAgIGNhc2UgJ2Jvb2wnOgorICAgICAgICBjYXNlICdpbnQnOgorICAgICAgICBjYXNl
ICdmbG9hdCc6CisgICAgICAgIGNhc2UgJ3N0cmluZyc6CisgICAgICAgIGNhc2UgJ3ZhbHVlJzoK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGNhc2UgJ251bGwnOgorICAgICAg
ICAgICAgcmV0dXJuIGEudmFsdWUgPT09IGIudmFsdWU7CisKKyAgICAgICAgY2FzZSAnbGlzdCc6
CisgICAgICAgIGNhc2UgJ2FycmF5JzoKKyAgICAgICAgY2FzZSAnbWF5YmUnOgorICAgICAgICBj
YXNlICdrZXktdmFsdWUnOgorICAgICAgICAgICAgcmV0dXJuIGVxdWFsaXR5KGEuZGVjb2Rlciwg
Yi5kZWNvZGVyKTsKKworICAgICAgICBjYXNlICdmaWVsZCc6CisgICAgICAgICAgICByZXR1cm4g
YS5maWVsZCA9PT0gYi5maWVsZCAmJiBlcXVhbGl0eShhLmRlY29kZXIsIGIuZGVjb2Rlcik7CisK
KyAgICAgICAgY2FzZSAnbWFwLW1hbnknOgorICAgICAgICBjYXNlICd0dXBsZSc6CisgICAgICAg
ICAgICBpZiAoYS5mdW5jICE9PSBiLmZ1bmMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGxpc3RF
cXVhbGl0eShhLmRlY29kZXJzLCBiLmRlY29kZXJzKTsKKworICAgICAgICBjYXNlICdhbmRUaGVu
JzoKKyAgICAgICAgY2FzZSAnY3VzdG9tQW5kVGhlbic6CisgICAgICAgICAgICByZXR1cm4gYS5j
YWxsYmFjayA9PT0gYi5jYWxsYmFjayAmJiBlcXVhbGl0eShhLmRlY29kZXIsIGIuZGVjb2Rlcik7
CisKKyAgICAgICAgY2FzZSAnb25lT2YnOgorICAgICAgICAgICAgcmV0dXJuIGxpc3RFcXVhbGl0
eShhLmRlY29kZXJzLCBiLmRlY29kZXJzKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGxpc3RFcXVh
bGl0eShhRGVjb2RlcnMsIGJEZWNvZGVycykKK3sKKyAgICB2YXIgbGVuID0gYURlY29kZXJzLmxl
bmd0aDsKKyAgICBpZiAobGVuICE9PSBiRGVjb2RlcnMubGVuZ3RoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKQor
ICAgIHsKKyAgICAgICAgaWYgKCFlcXVhbGl0eShhRGVjb2RlcnNbaV0sIGJEZWNvZGVyc1tpXSkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworCisvLyBFTkNPREUKKworZnVuY3Rpb24gZW5jb2RlKGlu
ZGVudExldmVsLCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIG51
bGwsIGluZGVudExldmVsKTsKK30KKworZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpCit7CisgICAg
cmV0dXJuIHZhbHVlOworfQorCitmdW5jdGlvbiBlbmNvZGVPYmplY3Qoa2V5VmFsdWVQYWlycykK
K3sKKyAgICB2YXIgb2JqID0ge307CisgICAgd2hpbGUgKGtleVZhbHVlUGFpcnMuY3RvciAhPT0g
J1tdJykKKyAgICB7CisgICAgICAgIHZhciBwYWlyID0ga2V5VmFsdWVQYWlycy5fMDsKKyAgICAg
ICAgb2JqW3BhaXIuXzBdID0gcGFpci5fMTsKKyAgICAgICAga2V5VmFsdWVQYWlycyA9IGtleVZh
bHVlUGFpcnMuXzE7CisgICAgfQorICAgIHJldHVybiBvYmo7Cit9CisKK3JldHVybiB7CisgICAg
ZW5jb2RlOiBGMihlbmNvZGUpLAorICAgIHJ1bk9uU3RyaW5nOiBGMihydW5PblN0cmluZyksCisg
ICAgcnVuOiBGMihydW4pLAorCisgICAgZGVjb2RlTnVsbDogZGVjb2RlTnVsbCwKKyAgICBkZWNv
ZGVQcmltaXRpdmU6IGRlY29kZVByaW1pdGl2ZSwKKyAgICBkZWNvZGVDb250YWluZXI6IEYyKGRl
Y29kZUNvbnRhaW5lciksCisKKyAgICBkZWNvZGVGaWVsZDogRjIoZGVjb2RlRmllbGQpLAorCisg
ICAgZGVjb2RlT2JqZWN0MTogRjIoZGVjb2RlT2JqZWN0MSksCisgICAgZGVjb2RlT2JqZWN0Mjog
RjMoZGVjb2RlT2JqZWN0MiksCisgICAgZGVjb2RlT2JqZWN0MzogRjQoZGVjb2RlT2JqZWN0Myks
CisgICAgZGVjb2RlT2JqZWN0NDogRjUoZGVjb2RlT2JqZWN0NCksCisgICAgZGVjb2RlT2JqZWN0
NTogRjYoZGVjb2RlT2JqZWN0NSksCisgICAgZGVjb2RlT2JqZWN0NjogRjcoZGVjb2RlT2JqZWN0
NiksCisgICAgZGVjb2RlT2JqZWN0NzogRjgoZGVjb2RlT2JqZWN0NyksCisgICAgZGVjb2RlT2Jq
ZWN0ODogRjkoZGVjb2RlT2JqZWN0OCksCisgICAgZGVjb2RlS2V5VmFsdWVQYWlyczogZGVjb2Rl
S2V5VmFsdWVQYWlycywKKworICAgIGRlY29kZVR1cGxlMTogRjIoZGVjb2RlVHVwbGUxKSwKKyAg
ICBkZWNvZGVUdXBsZTI6IEYzKGRlY29kZVR1cGxlMiksCisgICAgZGVjb2RlVHVwbGUzOiBGNChk
ZWNvZGVUdXBsZTMpLAorICAgIGRlY29kZVR1cGxlNDogRjUoZGVjb2RlVHVwbGU0KSwKKyAgICBk
ZWNvZGVUdXBsZTU6IEY2KGRlY29kZVR1cGxlNSksCisgICAgZGVjb2RlVHVwbGU2OiBGNyhkZWNv
ZGVUdXBsZTYpLAorICAgIGRlY29kZVR1cGxlNzogRjgoZGVjb2RlVHVwbGU3KSwKKyAgICBkZWNv
ZGVUdXBsZTg6IEY5KGRlY29kZVR1cGxlOCksCisKKyAgICBhbmRUaGVuOiBGMihhbmRUaGVuKSwK
KyAgICBjdXN0b21BbmRUaGVuOiBGMihjdXN0b21BbmRUaGVuKSwKKyAgICBmYWlsOiBmYWlsLAor
ICAgIHN1Y2NlZWQ6IHN1Y2NlZWQsCisgICAgb25lT2Y6IG9uZU9mLAorCisgICAgaWRlbnRpdHk6
IGlkZW50aXR5LAorICAgIGVuY29kZU51bGw6IG51bGwsCisgICAgZW5jb2RlQXJyYXk6IF9lbG1f
bGFuZyRjb3JlJE5hdGl2ZV9BcnJheS50b0pTQXJyYXksCisgICAgZW5jb2RlTGlzdDogX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX0xpc3QudG9BcnJheSwKKyAgICBlbmNvZGVPYmplY3Q6IGVuY29kZU9i
amVjdCwKKworICAgIGVxdWFsaXR5OiBlcXVhbGl0eQorfTsKKworfSgpOworCit2YXIgX2VsbV9s
YW5nJGNvcmUkSnNvbl9FbmNvZGUkbGlzdCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmVu
Y29kZUxpc3Q7Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9FbmNvZGUkYXJyYXkgPSBfZWxtX2xh
bmckY29yZSROYXRpdmVfSnNvbi5lbmNvZGVBcnJheTsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29u
X0VuY29kZSRvYmplY3QgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5lbmNvZGVPYmplY3Q7
Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9FbmNvZGUkbnVsbCA9IF9lbG1fbGFuZyRjb3JlJE5h
dGl2ZV9Kc29uLmVuY29kZU51bGw7Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9FbmNvZGUkYm9v
bCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmlkZW50aXR5OwordmFyIF9lbG1fbGFuZyRj
b3JlJEpzb25fRW5jb2RlJGZsb2F0ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uaWRlbnRp
dHk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9FbmNvZGUkaW50ID0gX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX0pzb24uaWRlbnRpdHk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9FbmNvZGUkc3Ry
aW5nID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uaWRlbnRpdHk7Cit2YXIgX2VsbV9sYW5n
JGNvcmUkSnNvbl9FbmNvZGUkZW5jb2RlID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZW5j
b2RlOwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRW5jb2RlJFZhbHVlID0ge2N0b3I6ICdWYWx1
ZSd9OworCit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkdHVwbGU4ID0gX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX0pzb24uZGVjb2RlVHVwbGU4OwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25f
RGVjb2RlJHR1cGxlNyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmRlY29kZVR1cGxlNzsK
K3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSR0dXBsZTYgPSBfZWxtX2xhbmckY29yZSRO
YXRpdmVfSnNvbi5kZWNvZGVUdXBsZTY7Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUk
dHVwbGU1ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVjb2RlVHVwbGU1OwordmFyIF9l
bG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJHR1cGxlNCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9K
c29uLmRlY29kZVR1cGxlNDsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSR0dXBsZTMg
PSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5kZWNvZGVUdXBsZTM7Cit2YXIgX2VsbV9sYW5n
JGNvcmUkSnNvbl9EZWNvZGUkdHVwbGUyID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVj
b2RlVHVwbGUyOwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJHR1cGxlMSA9IF9lbG1f
bGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmRlY29kZVR1cGxlMTsKK3ZhciBfZWxtX2xhbmckY29yZSRK
c29uX0RlY29kZSRzdWNjZWVkID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uc3VjY2VlZDsK
K3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRmYWlsID0gX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX0pzb24uZmFpbDsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRhbmRUaGVuID0g
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uYW5kVGhlbjsKK3ZhciBfZWxtX2xhbmckY29yZSRK
c29uX0RlY29kZSRjdXN0b21EZWNvZGVyID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uY3Vz
dG9tQW5kVGhlbjsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRkZWNvZGVWYWx1ZSA9
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLnJ1bjsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29u
X0RlY29kZSR2YWx1ZSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmRlY29kZVByaW1pdGl2
ZSgndmFsdWUnKTsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRtYXliZSA9IGZ1bmN0
aW9uIChkZWNvZGVyKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29u
LmRlY29kZUNvbnRhaW5lciwgJ21heWJlJywgZGVjb2Rlcik7Cit9OwordmFyIF9lbG1fbGFuZyRj
b3JlJEpzb25fRGVjb2RlJG51bGwgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5kZWNvZGVO
dWxsOwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJGFycmF5ID0gZnVuY3Rpb24gKGRl
Y29kZXIpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVjb2Rl
Q29udGFpbmVyLCAnYXJyYXknLCBkZWNvZGVyKTsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNv
bl9EZWNvZGUkbGlzdCA9IGZ1bmN0aW9uIChkZWNvZGVyKSB7CisgICAgcmV0dXJuIEEyKF9lbG1f
bGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmRlY29kZUNvbnRhaW5lciwgJ2xpc3QnLCBkZWNvZGVyKTsK
K307Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkYm9vbCA9IF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9Kc29uLmRlY29kZVByaW1pdGl2ZSgnYm9vbCcpOwordmFyIF9lbG1fbGFuZyRjb3Jl
JEpzb25fRGVjb2RlJGludCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmRlY29kZVByaW1p
dGl2ZSgnaW50Jyk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkZmxvYXQgPSBfZWxt
X2xhbmckY29yZSROYXRpdmVfSnNvbi5kZWNvZGVQcmltaXRpdmUoJ2Zsb2F0Jyk7Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkc3RyaW5nID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pz
b24uZGVjb2RlUHJpbWl0aXZlKCdzdHJpbmcnKTsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0Rl
Y29kZSRvbmVPZiA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLm9uZU9mOwordmFyIF9lbG1f
bGFuZyRjb3JlJEpzb25fRGVjb2RlJGtleVZhbHVlUGFpcnMgPSBfZWxtX2xhbmckY29yZSROYXRp
dmVfSnNvbi5kZWNvZGVLZXlWYWx1ZVBhaXJzOwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVj
b2RlJG9iamVjdDggPSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5kZWNvZGVPYmplY3Q4Owor
dmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJG9iamVjdDcgPSBfZWxtX2xhbmckY29yZSRO
YXRpdmVfSnNvbi5kZWNvZGVPYmplY3Q3OwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2Rl
JG9iamVjdDYgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5kZWNvZGVPYmplY3Q2OwordmFy
IF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJG9iamVjdDUgPSBfZWxtX2xhbmckY29yZSROYXRp
dmVfSnNvbi5kZWNvZGVPYmplY3Q1OwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJG9i
amVjdDQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5kZWNvZGVPYmplY3Q0OwordmFyIF9l
bG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJG9iamVjdDMgPSBfZWxtX2xhbmckY29yZSROYXRpdmVf
SnNvbi5kZWNvZGVPYmplY3QzOwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJG9iamVj
dDIgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5kZWNvZGVPYmplY3QyOwordmFyIF9lbG1f
bGFuZyRjb3JlJEpzb25fRGVjb2RlJG9iamVjdDEgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNv
bi5kZWNvZGVPYmplY3QxOwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlX29wcyA9IF9l
bG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlX29wcyB8fCB7fTsKK19lbG1fbGFuZyRjb3JlJEpzb25f
RGVjb2RlX29wc1snOj0nXSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmRlY29kZUZpZWxk
OwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJGF0ID0gRjIoCisgICAgZnVuY3Rpb24g
KGZpZWxkcywgZGVjb2RlcikgeworICAgICAgICByZXR1cm4gQTMoCisgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSRMaXN0JGZvbGRyLAorICAgICAgICAgICAgRjIoCisgICAgICAgICAgICAgICAg
ZnVuY3Rpb24gKHgsIHkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEyKF9lbG1fbGFu
ZyRjb3JlJEpzb25fRGVjb2RlX29wc1snOj0nXSwgeCwgeSk7CisgICAgICAgICAgICAgICAgfSks
CisgICAgICAgICAgICBkZWNvZGVyLAorICAgICAgICAgICAgZmllbGRzKTsKKyAgICB9KTsKK3Zh
ciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRkZWNvZGVTdHJpbmcgPSBfZWxtX2xhbmckY29y
ZSROYXRpdmVfSnNvbi5ydW5PblN0cmluZzsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29k
ZSRtYXAgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5kZWNvZGVPYmplY3QxOwordmFyIF9l
bG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJGRpY3QgPSBmdW5jdGlvbiAoZGVjb2RlcikgeworICAg
IHJldHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkbWFwLAorICAg
ICAgICBfZWxtX2xhbmckY29yZSREaWN0JGZyb21MaXN0LAorICAgICAgICBfZWxtX2xhbmckY29y
ZSRKc29uX0RlY29kZSRrZXlWYWx1ZVBhaXJzKGRlY29kZXIpKTsKK307Cit2YXIgX2VsbV9sYW5n
JGNvcmUkSnNvbl9EZWNvZGUkRGVjb2RlciA9IHtjdG9yOiAnRGVjb2Rlcid9OworCit2YXIgX2Vs
bV9sYW5nJGNvcmUkUHJvY2VzcyRraWxsID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxl
ci5raWxsOwordmFyIF9lbG1fbGFuZyRjb3JlJFByb2Nlc3Mkc2xlZXAgPSBfZWxtX2xhbmckY29y
ZSROYXRpdmVfU2NoZWR1bGVyLnNsZWVwOwordmFyIF9lbG1fbGFuZyRjb3JlJFByb2Nlc3Mkc3Bh
d24gPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1bGVyLnNwYXduOworCit2YXIgX2VsbV9s
YW5nJGRvbSROYXRpdmVfRG9tID0gZnVuY3Rpb24oKSB7CisKK2Z1bmN0aW9uIG9uKG5vZGUpCit7
CisgICAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50TmFtZSwgZGVjb2RlciwgdG9UYXNrKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIubmF0aXZlQmlu
ZGluZyhmdW5jdGlvbihjYWxsYmFjaykgeworCisgICAgICAgICAgICBmdW5jdGlvbiBwZXJmb3Jt
VGFzayhldmVudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0g
QTIoX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkZGVjb2RlVmFsdWUsIGRlY29kZXIsIGV2ZW50
KTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmN0b3IgPT09ICdPaycpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1
bGVyLnJhd1NwYXduKHRvVGFzayhyZXN1bHQuXzApKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUs
IHBlcmZvcm1UYXNrKTsKKworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1l
LCBwZXJmb3JtVGFzayk7CisgICAgICAgICAgICB9OworICAgICAgICB9KTsKKyAgICB9OworfQor
Cit2YXIgckFGID0gdHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSAhPT0gJ3VuZGVmaW5lZCcK
KyAgICA/IHJlcXVlc3RBbmltYXRpb25GcmFtZQorICAgIDogZnVuY3Rpb24oY2FsbGJhY2spIHsg
Y2FsbGJhY2soKTsgfTsKKworZnVuY3Rpb24gd2l0aE5vZGUoaWQsIGRvU3R1ZmYpCit7CisgICAg
cmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIubmF0aXZlQmluZGluZyhmdW5j
dGlvbihjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHJBRihmdW5jdGlvbigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHZhciBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworICAg
ICAgICAgICAgaWYgKG5vZGUgPT09IG51bGwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgY2FsbGJhY2soX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5mYWlsKHsgY3Rvcjog
J05vdEZvdW5kJywgXzA6IGlkIH0pKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjYWxsYmFjayhfZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1
bGVyLnN1Y2NlZWQoZG9TdHVmZihub2RlKSkpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwor
CisvLyBGT0NVUworCitmdW5jdGlvbiBmb2N1cyhpZCkKK3sKKyAgICByZXR1cm4gd2l0aE5vZGUo
aWQsIGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgbm9kZS5mb2N1cygpOworICAgICAgICByZXR1
cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLlR1cGxlMDsKKyAgICB9KTsKK30KKworZnVu
Y3Rpb24gYmx1cihpZCkKK3sKKyAgICByZXR1cm4gd2l0aE5vZGUoaWQsIGZ1bmN0aW9uKG5vZGUp
IHsKKyAgICAgICAgbm9kZS5ibHVyKCk7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRO
YXRpdmVfVXRpbHMuVHVwbGUwOworICAgIH0pOworfQorCisKKy8vIFNDUk9MTElORworCitmdW5j
dGlvbiBnZXRTY3JvbGxUb3AoaWQpCit7CisgICAgcmV0dXJuIHdpdGhOb2RlKGlkLCBmdW5jdGlv
bihub2RlKSB7CisgICAgICAgIHJldHVybiBub2RlLnNjcm9sbFRvcDsKKyAgICB9KTsKK30KKwor
ZnVuY3Rpb24gc2V0U2Nyb2xsVG9wKGlkLCBkZXNpcmVkU2Nyb2xsVG9wKQoreworICAgIHJldHVy
biB3aXRoTm9kZShpZCwgZnVuY3Rpb24obm9kZSkgeworICAgICAgICBub2RlLnNjcm9sbFRvcCA9
IGRlc2lyZWRTY3JvbGxUb3A7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVf
VXRpbHMuVHVwbGUwOworICAgIH0pOworfQorCitmdW5jdGlvbiB0b0JvdHRvbShpZCkKK3sKKyAg
ICByZXR1cm4gd2l0aE5vZGUoaWQsIGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgbm9kZS5zY3Jv
bGxUb3AgPSBub2RlLnNjcm9sbEhlaWdodDsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9VdGlscy5UdXBsZTA7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIGdldFNjcm9sbExl
ZnQoaWQpCit7CisgICAgcmV0dXJuIHdpdGhOb2RlKGlkLCBmdW5jdGlvbihub2RlKSB7CisgICAg
ICAgIHJldHVybiBub2RlLnNjcm9sbExlZnQ7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHNldFNj
cm9sbExlZnQoaWQsIGRlc2lyZWRTY3JvbGxMZWZ0KQoreworICAgIHJldHVybiB3aXRoTm9kZShp
ZCwgZnVuY3Rpb24obm9kZSkgeworICAgICAgICBub2RlLnNjcm9sbExlZnQgPSBkZXNpcmVkU2Ny
b2xsTGVmdDsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5UdXBs
ZTA7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHRvUmlnaHQoaWQpCit7CisgICAgcmV0dXJuIHdp
dGhOb2RlKGlkLCBmdW5jdGlvbihub2RlKSB7CisgICAgICAgIG5vZGUuc2Nyb2xsTGVmdCA9IG5v
ZGUuc2Nyb2xsV2lkdGg7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRp
bHMuVHVwbGUwOworICAgIH0pOworfQorCisKKy8vIFNJWkUKKworZnVuY3Rpb24gd2lkdGgob3B0
aW9ucywgaWQpCit7CisgICAgcmV0dXJuIHdpdGhOb2RlKGlkLCBmdW5jdGlvbihub2RlKSB7Cisg
ICAgICAgIHN3aXRjaCAob3B0aW9ucy5jdG9yKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNl
ICdDb250ZW50JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5zY3JvbGxXaWR0aDsKKyAg
ICAgICAgICAgIGNhc2UgJ1Zpc2libGVDb250ZW50JzoKKyAgICAgICAgICAgICAgICByZXR1cm4g
bm9kZS5jbGllbnRXaWR0aDsKKyAgICAgICAgICAgIGNhc2UgJ1Zpc2libGVDb250ZW50V2l0aEJv
cmRlcnMnOgorICAgICAgICAgICAgICAgIHJldHVybiBub2RlLm9mZnNldFdpZHRoOworICAgICAg
ICAgICAgY2FzZSAnVmlzaWJsZUNvbnRlbnRXaXRoQm9yZGVyc0FuZE1hcmdpbnMnOgorICAgICAg
ICAgICAgICAgIHZhciByZWN0ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcmVjdC5yaWdodCAtIHJlY3QubGVmdDsKKyAgICAgICAgfQorICAg
IH0pOworfQorCitmdW5jdGlvbiBoZWlnaHQob3B0aW9ucywgaWQpCit7CisgICAgcmV0dXJuIHdp
dGhOb2RlKGlkLCBmdW5jdGlvbihub2RlKSB7CisgICAgICAgIHN3aXRjaCAob3B0aW9ucy5jdG9y
KQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlICdDb250ZW50JzoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbm9kZS5zY3JvbGxIZWlnaHQ7CisgICAgICAgICAgICBjYXNlICdWaXNpYmxlQ29u
dGVudCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2xpZW50SGVpZ2h0OworICAgICAg
ICAgICAgY2FzZSAnVmlzaWJsZUNvbnRlbnRXaXRoQm9yZGVycyc6CisgICAgICAgICAgICAgICAg
cmV0dXJuIG5vZGUub2Zmc2V0SGVpZ2h0OworICAgICAgICAgICAgY2FzZSAnVmlzaWJsZUNvbnRl
bnRXaXRoQm9yZGVyc0FuZE1hcmdpbnMnOgorICAgICAgICAgICAgICAgIHZhciByZWN0ID0gbm9k
ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVjdC5i
b3R0b20gLSByZWN0LnRvcDsKKyAgICAgICAgfQorICAgIH0pOworfQorCityZXR1cm4geworICAg
IG9uRG9jdW1lbnQ6IEYzKG9uKGRvY3VtZW50KSksCisgICAgb25XaW5kb3c6IEYzKG9uKHdpbmRv
dykpLAorCisgICAgZm9jdXM6IGZvY3VzLAorICAgIGJsdXI6IGJsdXIsCisKKyAgICBnZXRTY3Jv
bGxUb3A6IGdldFNjcm9sbFRvcCwKKyAgICBzZXRTY3JvbGxUb3A6IEYyKHNldFNjcm9sbFRvcCks
CisgICAgZ2V0U2Nyb2xsTGVmdDogZ2V0U2Nyb2xsTGVmdCwKKyAgICBzZXRTY3JvbGxMZWZ0OiBG
MihzZXRTY3JvbGxMZWZ0KSwKKyAgICB0b0JvdHRvbTogdG9Cb3R0b20sCisgICAgdG9SaWdodDog
dG9SaWdodCwKKworICAgIGhlaWdodDogRjIoaGVpZ2h0KSwKKyAgICB3aWR0aDogRjIod2lkdGgp
Cit9OworCit9KCk7CisKK3ZhciBfZWxtX2xhbmckZG9tJERvbSRibHVyID0gX2VsbV9sYW5nJGRv
bSROYXRpdmVfRG9tLmJsdXI7Cit2YXIgX2VsbV9sYW5nJGRvbSREb20kZm9jdXMgPSBfZWxtX2xh
bmckZG9tJE5hdGl2ZV9Eb20uZm9jdXM7Cit2YXIgX2VsbV9sYW5nJGRvbSREb20kTm90Rm91bmQg
PSBmdW5jdGlvbiAoYSkgeworICAgIHJldHVybiB7Y3RvcjogJ05vdEZvdW5kJywgXzA6IGF9Owor
fTsKKwordmFyIF9lbG1fbGFuZyRkb20kRG9tX0xvd0xldmVsJG9uV2luZG93ID0gX2VsbV9sYW5n
JGRvbSROYXRpdmVfRG9tLm9uV2luZG93OwordmFyIF9lbG1fbGFuZyRkb20kRG9tX0xvd0xldmVs
JG9uRG9jdW1lbnQgPSBfZWxtX2xhbmckZG9tJE5hdGl2ZV9Eb20ub25Eb2N1bWVudDsKKworLy9p
bXBvcnQgTmF0aXZlLkpzb24gLy8KKwordmFyIF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSROYXRpdmVf
VmlydHVhbERvbSA9IGZ1bmN0aW9uKCkgeworCit2YXIgU1RZTEVfS0VZID0gJ1NUWUxFJzsKK3Zh
ciBFVkVOVF9LRVkgPSAnRVZFTlQnOwordmFyIEFUVFJfS0VZID0gJ0FUVFInOwordmFyIEFUVFJf
TlNfS0VZID0gJ0FUVFJfTlMnOworCisKKworLy8vLy8vLy8vLy8vICBWSVJUVUFMIERPTSBOT0RF
UyAgLy8vLy8vLy8vLy8vCisKKworZnVuY3Rpb24gdGV4dChzdHJpbmcpCit7CisgICAgcmV0dXJu
IHsKKyAgICAgICAgdHlwZTogJ3RleHQnLAorICAgICAgICB0ZXh0OiBzdHJpbmcKKyAgICB9Owor
fQorCisKK2Z1bmN0aW9uIG5vZGUodGFnKQoreworICAgIHJldHVybiBGMihmdW5jdGlvbihmYWN0
TGlzdCwga2lkTGlzdCkgeworICAgICAgICByZXR1cm4gbm9kZUhlbHAodGFnLCBmYWN0TGlzdCwg
a2lkTGlzdCk7CisgICAgfSk7Cit9CisKKworZnVuY3Rpb24gbm9kZUhlbHAodGFnLCBmYWN0TGlz
dCwga2lkTGlzdCkKK3sKKyAgICB2YXIgb3JnYW5pemVkID0gb3JnYW5pemVGYWN0cyhmYWN0TGlz
dCk7CisgICAgdmFyIG5hbWVzcGFjZSA9IG9yZ2FuaXplZC5uYW1lc3BhY2U7CisgICAgdmFyIGZh
Y3RzID0gb3JnYW5pemVkLmZhY3RzOworCisgICAgdmFyIGNoaWxkcmVuID0gW107CisgICAgdmFy
IGRlc2NlbmRhbnRzQ291bnQgPSAwOworICAgIHdoaWxlIChraWRMaXN0LmN0b3IgIT09ICdbXScp
CisgICAgeworICAgICAgICB2YXIga2lkID0ga2lkTGlzdC5fMDsKKyAgICAgICAgZGVzY2VuZGFu
dHNDb3VudCArPSAoa2lkLmRlc2NlbmRhbnRzQ291bnQgfHwgMCk7CisgICAgICAgIGNoaWxkcmVu
LnB1c2goa2lkKTsKKyAgICAgICAga2lkTGlzdCA9IGtpZExpc3QuXzE7CisgICAgfQorICAgIGRl
c2NlbmRhbnRzQ291bnQgKz0gY2hpbGRyZW4ubGVuZ3RoOworCisgICAgcmV0dXJuIHsKKyAgICAg
ICAgdHlwZTogJ25vZGUnLAorICAgICAgICB0YWc6IHRhZywKKyAgICAgICAgZmFjdHM6IGZhY3Rz
LAorICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW4sCisgICAgICAgIG5hbWVzcGFjZTogbmFtZXNw
YWNlLAorICAgICAgICBkZXNjZW5kYW50c0NvdW50OiBkZXNjZW5kYW50c0NvdW50CisgICAgfTsK
K30KKworCitmdW5jdGlvbiBrZXllZE5vZGUodGFnLCBmYWN0TGlzdCwga2lkTGlzdCkKK3sKKyAg
ICB2YXIgb3JnYW5pemVkID0gb3JnYW5pemVGYWN0cyhmYWN0TGlzdCk7CisgICAgdmFyIG5hbWVz
cGFjZSA9IG9yZ2FuaXplZC5uYW1lc3BhY2U7CisgICAgdmFyIGZhY3RzID0gb3JnYW5pemVkLmZh
Y3RzOworCisgICAgdmFyIGNoaWxkcmVuID0gW107CisgICAgdmFyIGRlc2NlbmRhbnRzQ291bnQg
PSAwOworICAgIHdoaWxlIChraWRMaXN0LmN0b3IgIT09ICdbXScpCisgICAgeworICAgICAgICB2
YXIga2lkID0ga2lkTGlzdC5fMDsKKyAgICAgICAgZGVzY2VuZGFudHNDb3VudCArPSAoa2lkLl8x
LmRlc2NlbmRhbnRzQ291bnQgfHwgMCk7CisgICAgICAgIGNoaWxkcmVuLnB1c2goa2lkKTsKKyAg
ICAgICAga2lkTGlzdCA9IGtpZExpc3QuXzE7CisgICAgfQorICAgIGRlc2NlbmRhbnRzQ291bnQg
Kz0gY2hpbGRyZW4ubGVuZ3RoOworCisgICAgcmV0dXJuIHsKKyAgICAgICAgdHlwZTogJ2tleWVk
LW5vZGUnLAorICAgICAgICB0YWc6IHRhZywKKyAgICAgICAgZmFjdHM6IGZhY3RzLAorICAgICAg
ICBjaGlsZHJlbjogY2hpbGRyZW4sCisgICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlLAorICAg
ICAgICBkZXNjZW5kYW50c0NvdW50OiBkZXNjZW5kYW50c0NvdW50CisgICAgfTsKK30KKworCitm
dW5jdGlvbiBjdXN0b20oZmFjdExpc3QsIG1vZGVsLCBpbXBsKQoreworICAgIHZhciBmYWN0cyA9
IG9yZ2FuaXplRmFjdHMoZmFjdExpc3QpLmZhY3RzOworCisgICAgcmV0dXJuIHsKKyAgICAgICAg
dHlwZTogJ2N1c3RvbScsCisgICAgICAgIGZhY3RzOiBmYWN0cywKKyAgICAgICAgbW9kZWw6IG1v
ZGVsLAorICAgICAgICBpbXBsOiBpbXBsCisgICAgfTsKK30KKworCitmdW5jdGlvbiBtYXAodGFn
Z2VyLCBub2RlKQoreworICAgIHJldHVybiB7CisgICAgICAgIHR5cGU6ICd0YWdnZXInLAorICAg
ICAgICB0YWdnZXI6IHRhZ2dlciwKKyAgICAgICAgbm9kZTogbm9kZSwKKyAgICAgICAgZGVzY2Vu
ZGFudHNDb3VudDogMSArIChub2RlLmRlc2NlbmRhbnRzQ291bnQgfHwgMCkKKyAgICB9OworfQor
CisKK2Z1bmN0aW9uIHRodW5rKGZ1bmMsIGFyZ3MsIHRodW5rKQoreworICAgIHJldHVybiB7Cisg
ICAgICAgIHR5cGU6ICd0aHVuaycsCisgICAgICAgIGZ1bmM6IGZ1bmMsCisgICAgICAgIGFyZ3M6
IGFyZ3MsCisgICAgICAgIHRodW5rOiB0aHVuaywKKyAgICAgICAgbm9kZTogdW5kZWZpbmVkCisg
ICAgfTsKK30KKworZnVuY3Rpb24gbGF6eShmbiwgYSkKK3sKKyAgICByZXR1cm4gdGh1bmsoZm4s
IFthXSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBmbihhKTsKKyAgICB9KTsKK30KKwor
ZnVuY3Rpb24gbGF6eTIoZm4sIGEsIGIpCit7CisgICAgcmV0dXJuIHRodW5rKGZuLCBbYSxiXSwg
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBBMihmbiwgYSwgYik7CisgICAgfSk7Cit9CisK
K2Z1bmN0aW9uIGxhenkzKGZuLCBhLCBiLCBjKQoreworICAgIHJldHVybiB0aHVuayhmbiwgW2Es
YixjXSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBBMyhmbiwgYSwgYiwgYyk7CisgICAg
fSk7Cit9CisKKworCisvLyBGQUNUUworCisKK2Z1bmN0aW9uIG9yZ2FuaXplRmFjdHMoZmFjdExp
c3QpCit7CisgICAgdmFyIG5hbWVzcGFjZSwgZmFjdHMgPSB7fTsKKworICAgIHdoaWxlIChmYWN0
TGlzdC5jdG9yICE9PSAnW10nKQorICAgIHsKKyAgICAgICAgdmFyIGVudHJ5ID0gZmFjdExpc3Qu
XzA7CisgICAgICAgIHZhciBrZXkgPSBlbnRyeS5rZXk7CisKKyAgICAgICAgaWYgKGtleSA9PT0g
QVRUUl9LRVkgfHwga2V5ID09PSBBVFRSX05TX0tFWSB8fCBrZXkgPT09IEVWRU5UX0tFWSkKKyAg
ICAgICAgeworICAgICAgICAgICAgdmFyIHN1YkZhY3RzID0gZmFjdHNba2V5XSB8fCB7fTsKKyAg
ICAgICAgICAgIHN1YkZhY3RzW2VudHJ5LnJlYWxLZXldID0gZW50cnkudmFsdWU7CisgICAgICAg
ICAgICBmYWN0c1trZXldID0gc3ViRmFjdHM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAo
a2V5ID09PSBTVFlMRV9LRVkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBzdHlsZXMgPSBm
YWN0c1trZXldIHx8IHt9OworICAgICAgICAgICAgdmFyIHN0eWxlTGlzdCA9IGVudHJ5LnZhbHVl
OworICAgICAgICAgICAgd2hpbGUgKHN0eWxlTGlzdC5jdG9yICE9PSAnW10nKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHZhciBzdHlsZSA9IHN0eWxlTGlzdC5fMDsKKyAgICAgICAg
ICAgICAgICBzdHlsZXNbc3R5bGUuXzBdID0gc3R5bGUuXzE7CisgICAgICAgICAgICAgICAgc3R5
bGVMaXN0ID0gc3R5bGVMaXN0Ll8xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmFjdHNb
a2V5XSA9IHN0eWxlczsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChrZXkgPT09ICduYW1l
c3BhY2UnKQorICAgICAgICB7CisgICAgICAgICAgICBuYW1lc3BhY2UgPSBlbnRyeS52YWx1ZTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGZhY3RzW2tl
eV0gPSBlbnRyeS52YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBmYWN0TGlzdCA9IGZhY3RMaXN0
Ll8xOworICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAgIGZhY3RzOiBmYWN0cywKKyAgICAg
ICAgbmFtZXNwYWNlOiBuYW1lc3BhY2UKKyAgICB9OworfQorCisKKworLy8vLy8vLy8vLy8vICBQ
Uk9QRVJUSUVTIEFORCBBVFRSSUJVVEVTICAvLy8vLy8vLy8vLy8KKworCitmdW5jdGlvbiBzdHls
ZSh2YWx1ZSkKK3sKKyAgICByZXR1cm4geworICAgICAgICBrZXk6IFNUWUxFX0tFWSwKKyAgICAg
ICAgdmFsdWU6IHZhbHVlCisgICAgfTsKK30KKworCitmdW5jdGlvbiBwcm9wZXJ0eShrZXksIHZh
bHVlKQoreworICAgIHJldHVybiB7CisgICAgICAgIGtleToga2V5LAorICAgICAgICB2YWx1ZTog
dmFsdWUKKyAgICB9OworfQorCisKK2Z1bmN0aW9uIGF0dHJpYnV0ZShrZXksIHZhbHVlKQorewor
ICAgIHJldHVybiB7CisgICAgICAgIGtleTogQVRUUl9LRVksCisgICAgICAgIHJlYWxLZXk6IGtl
eSwKKyAgICAgICAgdmFsdWU6IHZhbHVlCisgICAgfTsKK30KKworCitmdW5jdGlvbiBhdHRyaWJ1
dGVOUyhuYW1lc3BhY2UsIGtleSwgdmFsdWUpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAga2V5
OiBBVFRSX05TX0tFWSwKKyAgICAgICAgcmVhbEtleToga2V5LAorICAgICAgICB2YWx1ZTogewor
ICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAorICAgICAgICAgICAgbmFtZXNwYWNlOiBuYW1lc3Bh
Y2UKKyAgICAgICAgfQorICAgIH07Cit9CisKKworZnVuY3Rpb24gb24obmFtZSwgb3B0aW9ucywg
ZGVjb2RlcikKK3sKKyAgICByZXR1cm4geworICAgICAgICBrZXk6IEVWRU5UX0tFWSwKKyAgICAg
ICAgcmVhbEtleTogbmFtZSwKKyAgICAgICAgdmFsdWU6IHsKKyAgICAgICAgICAgIG9wdGlvbnM6
IG9wdGlvbnMsCisgICAgICAgICAgICBkZWNvZGVyOiBkZWNvZGVyCisgICAgICAgIH0KKyAgICB9
OworfQorCisKK2Z1bmN0aW9uIGVxdWFsRXZlbnRzKGEsIGIpCit7CisgICAgaWYgKCFhLm9wdGlv
bnMgPT09IGIub3B0aW9ucykKKyAgICB7CisgICAgICAgIGlmIChhLnN0b3BQcm9wYWdhdGlvbiAh
PT0gYi5zdG9wUHJvcGFnYXRpb24gfHwgYS5wcmV2ZW50RGVmYXVsdCAhPT0gYi5wcmV2ZW50RGVm
YXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5lcXVhbGl0eShhLmRl
Y29kZXIsIGIuZGVjb2Rlcik7Cit9CisKKworCisvLy8vLy8vLy8vLy8gIFJFTkRFUkVSICAvLy8v
Ly8vLy8vLy8KKworCitmdW5jdGlvbiByZW5kZXJlcihwYXJlbnQsIHRhZ2dlciwgaW5pdGlhbFZp
cnR1YWxOb2RlKQoreworICAgIHZhciBldmVudE5vZGUgPSB7IHRhZ2dlcjogdGFnZ2VyLCBwYXJl
bnQ6IHVuZGVmaW5lZCB9OworCisgICAgdmFyIGRvbU5vZGUgPSByZW5kZXIoaW5pdGlhbFZpcnR1
YWxOb2RlLCBldmVudE5vZGUpOworICAgIHBhcmVudC5hcHBlbmRDaGlsZChkb21Ob2RlKTsKKwor
ICAgIHZhciBzdGF0ZSA9ICdOT19SRVFVRVNUJzsKKyAgICB2YXIgY3VycmVudFZpcnR1YWxOb2Rl
ID0gaW5pdGlhbFZpcnR1YWxOb2RlOworICAgIHZhciBuZXh0VmlydHVhbE5vZGUgPSBpbml0aWFs
VmlydHVhbE5vZGU7CisKKyAgICBmdW5jdGlvbiByZWdpc3RlclZpcnR1YWxOb2RlKHZOb2RlKQor
ICAgIHsKKyAgICAgICAgaWYgKHN0YXRlID09PSAnTk9fUkVRVUVTVCcpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJBRih1cGRhdGVJZk5lZWRlZCk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUg
PSAnUEVORElOR19SRVFVRVNUJzsKKyAgICAgICAgbmV4dFZpcnR1YWxOb2RlID0gdk5vZGU7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gdXBkYXRlSWZOZWVkZWQoKQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChzdGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSAnTk9fUkVRVUVTVCc6Cisg
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKAorICAgICAgICAgICAgICAgICAgICAnVW5l
eHBlY3RlZCBkcmF3IGNhbGxiYWNrLlxuJyArCisgICAgICAgICAgICAgICAgICAgICdQbGVhc2Ug
cmVwb3J0IHRoaXMgdG8gPGh0dHBzOi8vZ2l0aHViLmNvbS9lbG0tbGFuZy9jb3JlL2lzc3Vlcz4u
JworICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgICAgIGNhc2UgJ1BFTkRJTkdfUkVRVUVT
VCc6CisgICAgICAgICAgICAgICAgckFGKHVwZGF0ZUlmTmVlZGVkKTsKKyAgICAgICAgICAgICAg
ICBzdGF0ZSA9ICdFWFRSQV9SRVFVRVNUJzsKKworICAgICAgICAgICAgICAgIHZhciBwYXRjaGVz
ID0gZGlmZihjdXJyZW50VmlydHVhbE5vZGUsIG5leHRWaXJ0dWFsTm9kZSk7CisgICAgICAgICAg
ICAgICAgZG9tTm9kZSA9IGFwcGx5UGF0Y2hlcyhkb21Ob2RlLCBjdXJyZW50VmlydHVhbE5vZGUs
IHBhdGNoZXMsIGV2ZW50Tm9kZSk7CisgICAgICAgICAgICAgICAgY3VycmVudFZpcnR1YWxOb2Rl
ID0gbmV4dFZpcnR1YWxOb2RlOworCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
ICAgICBjYXNlICdFWFRSQV9SRVFVRVNUJzoKKyAgICAgICAgICAgICAgICBzdGF0ZSA9ICdOT19S
RVFVRVNUJzsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4geyB1cGRhdGU6IHJlZ2lzdGVyVmlydHVhbE5vZGUgfTsKK30KKworCit2YXIgckFG
ID0KKyAgICB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lICE9PSAndW5kZWZpbmVkJworICAg
ICAgICA/IHJlcXVlc3RBbmltYXRpb25GcmFtZQorICAgICAgICA6IGZ1bmN0aW9uKGNiKSB7IHNl
dFRpbWVvdXQoY2IsIDEwMDAgLyA2MCk7IH07CisKKworCisvLy8vLy8vLy8vLy8gIFJFTkRFUiAg
Ly8vLy8vLy8vLy8vCisKKworZnVuY3Rpb24gcmVuZGVyKHZOb2RlLCBldmVudE5vZGUpCit7Cisg
ICAgc3dpdGNoICh2Tm9kZS50eXBlKQorICAgIHsKKyAgICAgICAgY2FzZSAndGh1bmsnOgorICAg
ICAgICAgICAgaWYgKCF2Tm9kZS5ub2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHZOb2RlLm5vZGUgPSB2Tm9kZS50aHVuaygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIHJlbmRlcih2Tm9kZS5ub2RlLCBldmVudE5vZGUpOworCisgICAgICAgIGNhc2UgJ3Rh
Z2dlcic6CisgICAgICAgICAgICB2YXIgc3ViTm9kZSA9IHZOb2RlLm5vZGU7CisgICAgICAgICAg
ICB2YXIgdGFnZ2VyID0gdk5vZGUudGFnZ2VyOworCisgICAgICAgICAgICB3aGlsZSAoc3ViTm9k
ZS50eXBlID09PSAndGFnZ2VyJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0eXBl
b2YgdGFnZ2VyICE9PSAnb2JqZWN0JworICAgICAgICAgICAgICAgICAgICA/IHRhZ2dlciA9IFt0
YWdnZXIsIHN1Yk5vZGUudGFnZ2VyXQorICAgICAgICAgICAgICAgICAgICA6IHRhZ2dlci5wdXNo
KHN1Yk5vZGUudGFnZ2VyKTsKKworICAgICAgICAgICAgICAgIHN1Yk5vZGUgPSBzdWJOb2RlLm5v
ZGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBzdWJFdmVudFJvb3QgPSB7Cisg
ICAgICAgICAgICAgICAgdGFnZ2VyOiB0YWdnZXIsCisgICAgICAgICAgICAgICAgcGFyZW50OiBl
dmVudE5vZGUKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIHZhciBkb21Ob2RlID0gcmVu
ZGVyKHN1Yk5vZGUsIHN1YkV2ZW50Um9vdCk7CisgICAgICAgICAgICBkb21Ob2RlLmVsbV9ldmVu
dF9ub2RlX3JlZiA9IHN1YkV2ZW50Um9vdDsKKyAgICAgICAgICAgIHJldHVybiBkb21Ob2RlOwor
CisgICAgICAgIGNhc2UgJ3RleHQnOgorICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKHZOb2RlLnRleHQpOworCisgICAgICAgIGNhc2UgJ25vZGUnOgorICAgICAgICAg
ICAgdmFyIGRvbU5vZGUgPSB2Tm9kZS5uYW1lc3BhY2UKKyAgICAgICAgICAgICAgICA/IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnROUyh2Tm9kZS5uYW1lc3BhY2UsIHZOb2RlLnRhZykKKyAgICAgICAg
ICAgICAgICA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodk5vZGUudGFnKTsKKworICAgICAgICAg
ICAgYXBwbHlGYWN0cyhkb21Ob2RlLCBldmVudE5vZGUsIHZOb2RlLmZhY3RzKTsKKworICAgICAg
ICAgICAgdmFyIGNoaWxkcmVuID0gdk5vZGUuY2hpbGRyZW47CisKKyAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgZG9tTm9kZS5hcHBlbmRDaGlsZChyZW5kZXIoY2hpbGRyZW5baV0sIGV2ZW50
Tm9kZSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZG9tTm9kZTsKKwor
ICAgICAgICBjYXNlICdrZXllZC1ub2RlJzoKKyAgICAgICAgICAgIHZhciBkb21Ob2RlID0gdk5v
ZGUubmFtZXNwYWNlCisgICAgICAgICAgICAgICAgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMo
dk5vZGUubmFtZXNwYWNlLCB2Tm9kZS50YWcpCisgICAgICAgICAgICAgICAgOiBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KHZOb2RlLnRhZyk7CisKKyAgICAgICAgICAgIGFwcGx5RmFjdHMoZG9tTm9k
ZSwgZXZlbnROb2RlLCB2Tm9kZS5mYWN0cyk7CisKKyAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9
IHZOb2RlLmNoaWxkcmVuOworCisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxk
cmVuLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRvbU5vZGUu
YXBwZW5kQ2hpbGQocmVuZGVyKGNoaWxkcmVuW2ldLl8xLCBldmVudE5vZGUpKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGRvbU5vZGU7CisKKyAgICAgICAgY2FzZSAnY3Vz
dG9tJzoKKyAgICAgICAgICAgIHZhciBkb21Ob2RlID0gdk5vZGUuaW1wbC5yZW5kZXIodk5vZGUu
bW9kZWwpOworICAgICAgICAgICAgYXBwbHlGYWN0cyhkb21Ob2RlLCBldmVudE5vZGUsIHZOb2Rl
LmZhY3RzKTsKKyAgICAgICAgICAgIHJldHVybiBkb21Ob2RlOworICAgIH0KK30KKworCisKKy8v
Ly8vLy8vLy8vLyAgQVBQTFkgRkFDVFMgIC8vLy8vLy8vLy8vLworCisKK2Z1bmN0aW9uIGFwcGx5
RmFjdHMoZG9tTm9kZSwgZXZlbnROb2RlLCBmYWN0cykKK3sKKyAgICBmb3IgKHZhciBrZXkgaW4g
ZmFjdHMpCisgICAgeworICAgICAgICB2YXIgdmFsdWUgPSBmYWN0c1trZXldOworCisgICAgICAg
IHN3aXRjaCAoa2V5KQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFNUWUxFX0tFWToKKyAg
ICAgICAgICAgICAgICBhcHBseVN0eWxlcyhkb21Ob2RlLCB2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRVZFTlRfS0VZOgorICAgICAgICAgICAgICAg
IGFwcGx5RXZlbnRzKGRvbU5vZGUsIGV2ZW50Tm9kZSwgdmFsdWUpOworICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFUVFJfS0VZOgorICAgICAgICAgICAgICAgIGFw
cGx5QXR0cnMoZG9tTm9kZSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICBjYXNlIEFUVFJfTlNfS0VZOgorICAgICAgICAgICAgICAgIGFwcGx5QXR0cnNOUyhk
b21Ob2RlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNh
c2UgJ3ZhbHVlJzoKKyAgICAgICAgICAgICAgICBpZiAoZG9tTm9kZVtrZXldICE9PSB2YWx1ZSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRvbU5vZGVba2V5XSA9IHZh
bHVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBkb21Ob2RlW2tleV0gPSB2YWx1ZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24gYXBw
bHlTdHlsZXMoZG9tTm9kZSwgc3R5bGVzKQoreworICAgIHZhciBkb21Ob2RlU3R5bGUgPSBkb21O
b2RlLnN0eWxlOworCisgICAgZm9yICh2YXIga2V5IGluIHN0eWxlcykKKyAgICB7CisgICAgICAg
IGRvbU5vZGVTdHlsZVtrZXldID0gc3R5bGVzW2tleV07CisgICAgfQorfQorCitmdW5jdGlvbiBh
cHBseUV2ZW50cyhkb21Ob2RlLCBldmVudE5vZGUsIGV2ZW50cykKK3sKKyAgICB2YXIgYWxsSGFu
ZGxlcnMgPSBkb21Ob2RlLmVsbV9oYW5kbGVycyB8fCB7fTsKKworICAgIGZvciAodmFyIGtleSBp
biBldmVudHMpCisgICAgeworICAgICAgICB2YXIgaGFuZGxlciA9IGFsbEhhbmRsZXJzW2tleV07
CisgICAgICAgIHZhciB2YWx1ZSA9IGV2ZW50c1trZXldOworCisgICAgICAgIGlmICh0eXBlb2Yg
dmFsdWUgPT09ICd1bmRlZmluZWQnKQorICAgICAgICB7CisgICAgICAgICAgICBkb21Ob2RlLnJl
bW92ZUV2ZW50TGlzdGVuZXIoa2V5LCBoYW5kbGVyKTsKKyAgICAgICAgICAgIGFsbEhhbmRsZXJz
W2tleV0gPSB1bmRlZmluZWQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodHlwZW9mIGhh
bmRsZXIgPT09ICd1bmRlZmluZWQnKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgaGFuZGxl
ciA9IG1ha2VFdmVudEhhbmRsZXIoZXZlbnROb2RlLCB2YWx1ZSk7CisgICAgICAgICAgICBkb21O
b2RlLmFkZEV2ZW50TGlzdGVuZXIoa2V5LCBoYW5kbGVyKTsKKyAgICAgICAgICAgIGFsbEhhbmRs
ZXJzW2tleV0gPSBoYW5kbGVyOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgaGFuZGxlci5pbmZvID0gdmFsdWU7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBkb21Ob2RlLmVsbV9oYW5kbGVycyA9IGFsbEhhbmRsZXJzOworfQorCitmdW5jdGlvbiBtYWtl
RXZlbnRIYW5kbGVyKGV2ZW50Tm9kZSwgaW5mbykKK3sKKyAgICBmdW5jdGlvbiBldmVudEhhbmRs
ZXIoZXZlbnQpCisgICAgeworICAgICAgICB2YXIgaW5mbyA9IGV2ZW50SGFuZGxlci5pbmZvOwor
CisgICAgICAgIHZhciB2YWx1ZSA9IEEyKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLnJ1biwg
aW5mby5kZWNvZGVyLCBldmVudCk7CisKKyAgICAgICAgaWYgKHZhbHVlLmN0b3IgPT09ICdPaycp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBvcHRpb25zID0gaW5mby5vcHRpb25zOworICAg
ICAgICAgICAgaWYgKG9wdGlvbnMuc3RvcFByb3BhZ2F0aW9uKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKG9wdGlvbnMucHJldmVudERlZmF1bHQpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgdmFyIG1lc3NhZ2UgPSB2YWx1ZS5fMDsKKworICAgICAgICAgICAgdmFyIGN1cnJl
bnRFdmVudE5vZGUgPSBldmVudE5vZGU7CisgICAgICAgICAgICB3aGlsZSAoY3VycmVudEV2ZW50
Tm9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgdGFnZ2VyID0gY3VycmVu
dEV2ZW50Tm9kZS50YWdnZXI7CisgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0YWdnZXIgPT09
ICdmdW5jdGlvbicpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtZXNz
YWdlID0gdGFnZ2VyKG1lc3NhZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBp
ID0gdGFnZ2VyLmxlbmd0aDsgaS0tOyApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSB0YWdnZXJbaV0obWVzc2FnZSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY3VycmVudEV2
ZW50Tm9kZSA9IGN1cnJlbnRFdmVudE5vZGUucGFyZW50OworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfTsKKworICAgIGV2ZW50SGFuZGxlci5pbmZvID0gaW5mbzsKKworICAgIHJldHVy
biBldmVudEhhbmRsZXI7Cit9CisKK2Z1bmN0aW9uIGFwcGx5QXR0cnMoZG9tTm9kZSwgYXR0cnMp
Cit7CisgICAgZm9yICh2YXIga2V5IGluIGF0dHJzKQorICAgIHsKKyAgICAgICAgdmFyIHZhbHVl
ID0gYXR0cnNba2V5XTsKKyAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGRvbU5vZGUucmVtb3ZlQXR0cmlidXRlKGtleSk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBkb21Ob2RlLnNl
dEF0dHJpYnV0ZShrZXksIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24g
YXBwbHlBdHRyc05TKGRvbU5vZGUsIG5zQXR0cnMpCit7CisgICAgZm9yICh2YXIga2V5IGluIG5z
QXR0cnMpCisgICAgeworICAgICAgICB2YXIgcGFpciA9IG5zQXR0cnNba2V5XTsKKyAgICAgICAg
dmFyIG5hbWVzcGFjZSA9IHBhaXIubmFtZXNwYWNlOworICAgICAgICB2YXIgdmFsdWUgPSBwYWly
LnZhbHVlOworCisgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKQorICAg
ICAgICB7CisgICAgICAgICAgICBkb21Ob2RlLnJlbW92ZUF0dHJpYnV0ZU5TKG5hbWVzcGFjZSwg
a2V5KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRv
bU5vZGUuc2V0QXR0cmlidXRlTlMobmFtZXNwYWNlLCBrZXksIHZhbHVlKTsKKyAgICAgICAgfQor
ICAgIH0KK30KKworCisKKy8vLy8vLy8vLy8vLyAgRElGRiAgLy8vLy8vLy8vLy8vCisKKworZnVu
Y3Rpb24gZGlmZihhLCBiKQoreworICAgIHZhciBwYXRjaGVzID0gW107CisgICAgZGlmZkhlbHAo
YSwgYiwgcGF0Y2hlcywgMCk7CisgICAgcmV0dXJuIHBhdGNoZXM7Cit9CisKKworZnVuY3Rpb24g
bWFrZVBhdGNoKHR5cGUsIGluZGV4LCBkYXRhKQoreworICAgIHJldHVybiB7CisgICAgICAgIGlu
ZGV4OiBpbmRleCwKKyAgICAgICAgdHlwZTogdHlwZSwKKyAgICAgICAgZGF0YTogZGF0YSwKKyAg
ICAgICAgZG9tTm9kZTogdW5kZWZpbmVkLAorICAgICAgICBldmVudE5vZGU6IHVuZGVmaW5lZAor
ICAgIH07Cit9CisKKworZnVuY3Rpb24gZGlmZkhlbHAoYSwgYiwgcGF0Y2hlcywgaW5kZXgpCit7
CisgICAgaWYgKGEgPT09IGIpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
dmFyIGFUeXBlID0gYS50eXBlOworICAgIHZhciBiVHlwZSA9IGIudHlwZTsKKworICAgIC8vIEJh
aWwgaWYgeW91IHJ1biBpbnRvIGRpZmZlcmVudCB0eXBlcyBvZiBub2Rlcy4gSW1wbGllcyB0aGF0
IHRoZQorICAgIC8vIHN0cnVjdHVyZSBoYXMgY2hhbmdlZCBzaWduaWZpY2FudGx5IGFuZCBpdCdz
IG5vdCB3b3J0aCBhIGRpZmYuCisgICAgaWYgKGFUeXBlICE9PSBiVHlwZSkKKyAgICB7CisgICAg
ICAgIHBhdGNoZXMucHVzaChtYWtlUGF0Y2goJ3AtcmVkcmF3JywgaW5kZXgsIGIpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIE5vdyB3ZSBrbm93IHRoYXQgYm90aCBub2RlcyBh
cmUgdGhlIHNhbWUgdHlwZS4KKyAgICBzd2l0Y2ggKGJUeXBlKQorICAgIHsKKyAgICAgICAgY2Fz
ZSAndGh1bmsnOgorICAgICAgICAgICAgdmFyIGFBcmdzID0gYS5hcmdzOworICAgICAgICAgICAg
dmFyIGJBcmdzID0gYi5hcmdzOworICAgICAgICAgICAgdmFyIGkgPSBhQXJncy5sZW5ndGg7Cisg
ICAgICAgICAgICB2YXIgc2FtZSA9IGEuZnVuYyA9PT0gYi5mdW5jICYmIGkgPT09IGJBcmdzLmxl
bmd0aDsKKyAgICAgICAgICAgIHdoaWxlIChzYW1lICYmIGktLSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBzYW1lID0gYUFyZ3NbaV0gPT09IGJBcmdzW2ldOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKHNhbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Yi5ub2RlID0gYS5ub2RlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGIubm9kZSA9IGIudGh1bmsoKTsKKyAgICAgICAgICAgIHZhciBzdWJQYXRj
aGVzID0gW107CisgICAgICAgICAgICBkaWZmSGVscChhLm5vZGUsIGIubm9kZSwgc3ViUGF0Y2hl
cywgMCk7CisgICAgICAgICAgICBpZiAoc3ViUGF0Y2hlcy5sZW5ndGggPiAwKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHBhdGNoZXMucHVzaChtYWtlUGF0Y2goJ3AtdGh1bmsnLCBp
bmRleCwgc3ViUGF0Y2hlcykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGNhc2UgJ3RhZ2dlcic6CisgICAgICAgICAgICAvLyBnYXRoZXIgbmVzdGVkIHRh
Z2dlcnMKKyAgICAgICAgICAgIHZhciBhVGFnZ2VycyA9IGEudGFnZ2VyOworICAgICAgICAgICAg
dmFyIGJUYWdnZXJzID0gYi50YWdnZXI7CisgICAgICAgICAgICB2YXIgbmVzdGluZyA9IGZhbHNl
OworCisgICAgICAgICAgICB2YXIgYVN1Yk5vZGUgPSBhLm5vZGU7CisgICAgICAgICAgICB3aGls
ZSAoYVN1Yk5vZGUudHlwZSA9PT0gJ3RhZ2dlcicpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgbmVzdGluZyA9IHRydWU7CisKKyAgICAgICAgICAgICAgICB0eXBlb2YgYVRhZ2dlcnMg
IT09ICdvYmplY3QnCisgICAgICAgICAgICAgICAgICAgID8gYVRhZ2dlcnMgPSBbYVRhZ2dlcnMs
IGFTdWJOb2RlLnRhZ2dlcl0KKyAgICAgICAgICAgICAgICAgICAgOiBhVGFnZ2Vycy5wdXNoKGFT
dWJOb2RlLnRhZ2dlcik7CisKKyAgICAgICAgICAgICAgICBhU3ViTm9kZSA9IGFTdWJOb2RlLm5v
ZGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBiU3ViTm9kZSA9IGIubm9kZTsK
KyAgICAgICAgICAgIHdoaWxlIChiU3ViTm9kZS50eXBlID09PSAndGFnZ2VyJykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBuZXN0aW5nID0gdHJ1ZTsKKworICAgICAgICAgICAgICAg
IHR5cGVvZiBiVGFnZ2VycyAhPT0gJ29iamVjdCcKKyAgICAgICAgICAgICAgICAgICAgPyBiVGFn
Z2VycyA9IFtiVGFnZ2VycywgYlN1Yk5vZGUudGFnZ2VyXQorICAgICAgICAgICAgICAgICAgICA6
IGJUYWdnZXJzLnB1c2goYlN1Yk5vZGUudGFnZ2VyKTsKKworICAgICAgICAgICAgICAgIGJTdWJO
b2RlID0gYlN1Yk5vZGUubm9kZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSnVz
dCBiYWlsIGlmIGRpZmZlcmVudCBudW1iZXJzIG9mIHRhZ2dlcnMuIFRoaXMgaW1wbGllcyB0aGUK
KyAgICAgICAgICAgIC8vIHN0cnVjdHVyZSBvZiB0aGUgdmlydHVhbCBET00gaGFzIGNoYW5nZWQu
CisgICAgICAgICAgICBpZiAobmVzdGluZyAmJiBhVGFnZ2Vycy5sZW5ndGggIT09IGJUYWdnZXJz
Lmxlbmd0aCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXRjaGVzLnB1c2gobWFr
ZVBhdGNoKCdwLXJlZHJhdycsIGluZGV4LCBiKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBjaGVjayBpZiB0YWdnZXJzIGFyZSAidGhl
IHNhbWUiCisgICAgICAgICAgICBpZiAobmVzdGluZyA/ICFwYWlyd2lzZVJlZkVxdWFsKGFUYWdn
ZXJzLCBiVGFnZ2VycykgOiBhVGFnZ2VycyAhPT0gYlRhZ2dlcnMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcGF0Y2hlcy5wdXNoKG1ha2VQYXRjaCgncC10YWdnZXInLCBpbmRleCwg
YlRhZ2dlcnMpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gZGlmZiBldmVyeXRo
aW5nIGJlbG93IHRoZSB0YWdnZXJzCisgICAgICAgICAgICBkaWZmSGVscChhU3ViTm9kZSwgYlN1
Yk5vZGUsIHBhdGNoZXMsIGluZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgY2FzZSAndGV4dCc6CisgICAgICAgICAgICBpZiAoYS50ZXh0ICE9PSBiLnRleHQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcGF0Y2hlcy5wdXNoKG1ha2VQYXRjaCgncC10ZXh0
JywgaW5kZXgsIGIudGV4dCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgJ25vZGUnOgorICAgICAg
ICAgICAgLy8gQmFpbCBpZiBvYnZpb3VzIGluZGljYXRvcnMgaGF2ZSBjaGFuZ2VkLiBJbXBsaWVz
IG1vcmUgc2VyaW91cworICAgICAgICAgICAgLy8gc3RydWN0dXJhbCBjaGFuZ2VzIHN1Y2ggdGhh
dCBpdCdzIG5vdCB3b3J0aCBpdCB0byBkaWZmLgorICAgICAgICAgICAgaWYgKGEudGFnICE9PSBi
LnRhZyB8fCBhLm5hbWVzcGFjZSAhPT0gYi5uYW1lc3BhY2UpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcGF0Y2hlcy5wdXNoKG1ha2VQYXRjaCgncC1yZWRyYXcnLCBpbmRleCwgYikp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
dmFyIGZhY3RzRGlmZiA9IGRpZmZGYWN0cyhhLmZhY3RzLCBiLmZhY3RzKTsKKworICAgICAgICAg
ICAgaWYgKHR5cGVvZiBmYWN0c0RpZmYgIT09ICd1bmRlZmluZWQnKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHBhdGNoZXMucHVzaChtYWtlUGF0Y2goJ3AtZmFjdHMnLCBpbmRleCwg
ZmFjdHNEaWZmKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRpZmZDaGlsZHJlbihh
LCBiLCBwYXRjaGVzLCBpbmRleCk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2Fz
ZSAna2V5ZWQtbm9kZSc6CisgICAgICAgICAgICAvLyBCYWlsIGlmIG9idmlvdXMgaW5kaWNhdG9y
cyBoYXZlIGNoYW5nZWQuIEltcGxpZXMgbW9yZSBzZXJpb3VzCisgICAgICAgICAgICAvLyBzdHJ1
Y3R1cmFsIGNoYW5nZXMgc3VjaCB0aGF0IGl0J3Mgbm90IHdvcnRoIGl0IHRvIGRpZmYuCisgICAg
ICAgICAgICBpZiAoYS50YWcgIT09IGIudGFnIHx8IGEubmFtZXNwYWNlICE9PSBiLm5hbWVzcGFj
ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXRjaGVzLnB1c2gobWFrZVBhdGNo
KCdwLXJlZHJhdycsIGluZGV4LCBiKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB2YXIgZmFjdHNEaWZmID0gZGlmZkZhY3RzKGEuZmFjdHMs
IGIuZmFjdHMpOworCisgICAgICAgICAgICBpZiAodHlwZW9mIGZhY3RzRGlmZiAhPT0gJ3VuZGVm
aW5lZCcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGF0Y2hlcy5wdXNoKG1ha2VQ
YXRjaCgncC1mYWN0cycsIGluZGV4LCBmYWN0c0RpZmYpKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgZGlmZktleWVkQ2hpbGRyZW4oYSwgYiwgcGF0Y2hlcywgaW5kZXgpOworICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgJ2N1c3RvbSc6CisgICAgICAgICAgICBpZiAo
YS5pbXBsICE9PSBiLmltcGwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGF0Y2hl
cy5wdXNoKG1ha2VQYXRjaCgncC1yZWRyYXcnLCBpbmRleCwgYikpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGZhY3RzRGlmZiA9IGRp
ZmZGYWN0cyhhLmZhY3RzLCBiLmZhY3RzKTsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgZmFjdHNE
aWZmICE9PSAndW5kZWZpbmVkJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXRj
aGVzLnB1c2gobWFrZVBhdGNoKCdwLWZhY3RzJywgaW5kZXgsIGZhY3RzRGlmZikpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB2YXIgcGF0Y2ggPSBiLmltcGwuZGlmZihhLGIpOworICAg
ICAgICAgICAgaWYgKHBhdGNoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhdGNo
ZXMucHVzaChtYWtlUGF0Y2goJ3AtY3VzdG9tJywgaW5kZXgsIHBhdGNoKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAg
fQorfQorCisKKy8vIGFzc3VtZXMgdGhlIGluY29taW5nIGFycmF5cyBhcmUgdGhlIHNhbWUgbGVu
Z3RoCitmdW5jdGlvbiBwYWlyd2lzZVJlZkVxdWFsKGFzLCBicykKK3sKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGFzLmxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGFzW2ldICE9PSBi
c1tpXSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworLy8gVE9ETyBJbnN0ZWFkIG9mIGNyZWF0
aW5nIGEgbmV3IGRpZmYgb2JqZWN0LCBpdCdzIHBvc3NpYmxlIHRvIGp1c3QgdGVzdCBpZgorLy8g
dGhlcmUgKmlzKiBhIGRpZmYuIER1cmluZyB0aGUgYWN0dWFsIHBhdGNoLCBkbyB0aGUgZGlmZiBh
Z2FpbiBhbmQgbWFrZSB0aGUKKy8vIG1vZGlmaWNhdGlvbnMgZGlyZWN0bHkuIFRoaXMgd2F5LCB0
aGVyZSdzIG5vIG5ldyBhbGxvY2F0aW9ucy4gV29ydGggaXQ/CitmdW5jdGlvbiBkaWZmRmFjdHMo
YSwgYiwgY2F0ZWdvcnkpCit7CisgICAgdmFyIGRpZmY7CisKKyAgICAvLyBsb29rIGZvciBjaGFu
Z2VzIGFuZCByZW1vdmFscworICAgIGZvciAodmFyIGFLZXkgaW4gYSkKKyAgICB7CisgICAgICAg
IGlmIChhS2V5ID09PSBTVFlMRV9LRVkgfHwgYUtleSA9PT0gRVZFTlRfS0VZIHx8IGFLZXkgPT09
IEFUVFJfS0VZIHx8IGFLZXkgPT09IEFUVFJfTlNfS0VZKQorICAgICAgICB7CisgICAgICAgICAg
ICB2YXIgc3ViRGlmZiA9IGRpZmZGYWN0cyhhW2FLZXldLCBiW2FLZXldIHx8IHt9LCBhS2V5KTsK
KyAgICAgICAgICAgIGlmIChzdWJEaWZmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGRpZmYgPSBkaWZmIHx8IHt9OworICAgICAgICAgICAgICAgIGRpZmZbYUtleV0gPSBzdWJEaWZm
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAg
ICAgICAvLyByZW1vdmUgaWYgbm90IGluIHRoZSBuZXcgZmFjdHMKKyAgICAgICAgaWYgKCEoYUtl
eSBpbiBiKSkKKyAgICAgICAgeworICAgICAgICAgICAgZGlmZiA9IGRpZmYgfHwge307CisgICAg
ICAgICAgICBkaWZmW2FLZXldID0KKyAgICAgICAgICAgICAgICAodHlwZW9mIGNhdGVnb3J5ID09
PSAndW5kZWZpbmVkJykKKyAgICAgICAgICAgICAgICAgICAgPyAodHlwZW9mIGFbYUtleV0gPT09
ICdzdHJpbmcnID8gJycgOiBudWxsKQorICAgICAgICAgICAgICAgICAgICA6CisgICAgICAgICAg
ICAgICAgKGNhdGVnb3J5ID09PSBTVFlMRV9LRVkpCisgICAgICAgICAgICAgICAgICAgID8gJycK
KyAgICAgICAgICAgICAgICAgICAgOgorICAgICAgICAgICAgICAgIChjYXRlZ29yeSA9PT0gRVZF
TlRfS0VZIHx8IGNhdGVnb3J5ID09PSBBVFRSX0tFWSkKKyAgICAgICAgICAgICAgICAgICAgPyB1
bmRlZmluZWQKKyAgICAgICAgICAgICAgICAgICAgOgorICAgICAgICAgICAgICAgIHsgbmFtZXNw
YWNlOiBhW2FLZXldLm5hbWVzcGFjZSwgdmFsdWU6IHVuZGVmaW5lZCB9OworCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBhVmFsdWUgPSBhW2FLZXldOwor
ICAgICAgICB2YXIgYlZhbHVlID0gYlthS2V5XTsKKworICAgICAgICAvLyByZWZlcmVuY2UgZXF1
YWwsIHNvIGRvbid0IHdvcnJ5IGFib3V0IGl0CisgICAgICAgIGlmIChhVmFsdWUgPT09IGJWYWx1
ZSAmJiBhS2V5ICE9PSAndmFsdWUnCisgICAgICAgICAgICB8fCBjYXRlZ29yeSA9PT0gRVZFTlRf
S0VZICYmIGVxdWFsRXZlbnRzKGFWYWx1ZSwgYlZhbHVlKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBkaWZmID0gZGlmZiB8fCB7fTsKKyAg
ICAgICAgZGlmZlthS2V5XSA9IGJWYWx1ZTsKKyAgICB9CisKKyAgICAvLyBhZGQgbmV3IHN0dWZm
CisgICAgZm9yICh2YXIgYktleSBpbiBiKQorICAgIHsKKyAgICAgICAgaWYgKCEoYktleSBpbiBh
KSkKKyAgICAgICAgeworICAgICAgICAgICAgZGlmZiA9IGRpZmYgfHwge307CisgICAgICAgICAg
ICBkaWZmW2JLZXldID0gYltiS2V5XTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBk
aWZmOworfQorCisKK2Z1bmN0aW9uIGRpZmZDaGlsZHJlbihhUGFyZW50LCBiUGFyZW50LCBwYXRj
aGVzLCByb290SW5kZXgpCit7CisgICAgdmFyIGFDaGlsZHJlbiA9IGFQYXJlbnQuY2hpbGRyZW47
CisgICAgdmFyIGJDaGlsZHJlbiA9IGJQYXJlbnQuY2hpbGRyZW47CisKKyAgICB2YXIgYUxlbiA9
IGFDaGlsZHJlbi5sZW5ndGg7CisgICAgdmFyIGJMZW4gPSBiQ2hpbGRyZW4ubGVuZ3RoOworCisg
ICAgLy8gRklHVVJFIE9VVCBJRiBUSEVSRSBBUkUgSU5TRVJUUyBPUiBSRU1PVkFMUworCisgICAg
aWYgKGFMZW4gPiBiTGVuKQorICAgIHsKKyAgICAgICAgcGF0Y2hlcy5wdXNoKG1ha2VQYXRjaCgn
cC1yZW1vdmUtbGFzdCcsIHJvb3RJbmRleCwgYUxlbiAtIGJMZW4pKTsKKyAgICB9CisgICAgZWxz
ZSBpZiAoYUxlbiA8IGJMZW4pCisgICAgeworICAgICAgICBwYXRjaGVzLnB1c2gobWFrZVBhdGNo
KCdwLWFwcGVuZCcsIHJvb3RJbmRleCwgYkNoaWxkcmVuLnNsaWNlKGFMZW4pKSk7CisgICAgfQor
CisgICAgLy8gUEFJUldJU0UgRElGRiBFVkVSWVRISU5HIEVMU0UKKworICAgIHZhciBpbmRleCA9
IHJvb3RJbmRleDsKKyAgICB2YXIgbWluTGVuID0gYUxlbiA8IGJMZW4gPyBhTGVuIDogYkxlbjsK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1pbkxlbjsgaSsrKQorICAgIHsKKyAgICAgICAgaW5k
ZXgrKzsKKyAgICAgICAgdmFyIGFDaGlsZCA9IGFDaGlsZHJlbltpXTsKKyAgICAgICAgZGlmZkhl
bHAoYUNoaWxkLCBiQ2hpbGRyZW5baV0sIHBhdGNoZXMsIGluZGV4KTsKKyAgICAgICAgaW5kZXgg
Kz0gYUNoaWxkLmRlc2NlbmRhbnRzQ291bnQgfHwgMDsKKyAgICB9Cit9CisKKworCisvLy8vLy8v
Ly8vLy8gIEtFWUVEIERJRkYgIC8vLy8vLy8vLy8vLworCisKK2Z1bmN0aW9uIGRpZmZLZXllZENo
aWxkcmVuKGFQYXJlbnQsIGJQYXJlbnQsIHBhdGNoZXMsIHJvb3RJbmRleCkKK3sKKyAgICB2YXIg
bG9jYWxQYXRjaGVzID0gW107CisKKyAgICB2YXIgY2hhbmdlcyA9IHt9OyAvLyBEaWN0IFN0cmlu
ZyBFbnRyeQorICAgIHZhciBpbnNlcnRzID0gW107IC8vIEFycmF5IHsgaW5kZXggOiBJbnQsIGVu
dHJ5IDogRW50cnkgfQorICAgIC8vIHR5cGUgRW50cnkgPSB7IHRhZyA6IFN0cmluZywgdm5vZGUg
OiBWTm9kZSwgaW5kZXggOiBJbnQsIGRhdGEgOiBfIH0KKworICAgIHZhciBhQ2hpbGRyZW4gPSBh
UGFyZW50LmNoaWxkcmVuOworICAgIHZhciBiQ2hpbGRyZW4gPSBiUGFyZW50LmNoaWxkcmVuOwor
ICAgIHZhciBhTGVuID0gYUNoaWxkcmVuLmxlbmd0aDsKKyAgICB2YXIgYkxlbiA9IGJDaGlsZHJl
bi5sZW5ndGg7CisgICAgdmFyIGFJbmRleCA9IDA7CisgICAgdmFyIGJJbmRleCA9IDA7CisKKyAg
ICB2YXIgaW5kZXggPSByb290SW5kZXg7CisKKyAgICB3aGlsZSAoYUluZGV4IDwgYUxlbiAmJiBi
SW5kZXggPCBiTGVuKQorICAgIHsKKyAgICAgICAgdmFyIGEgPSBhQ2hpbGRyZW5bYUluZGV4XTsK
KyAgICAgICAgdmFyIGIgPSBiQ2hpbGRyZW5bYkluZGV4XTsKKworICAgICAgICB2YXIgYUtleSA9
IGEuXzA7CisgICAgICAgIHZhciBiS2V5ID0gYi5fMDsKKyAgICAgICAgdmFyIGFOb2RlID0gYS5f
MTsKKyAgICAgICAgdmFyIGJOb2RlID0gYi5fMTsKKworICAgICAgICAvLyBjaGVjayBpZiBrZXlz
IG1hdGNoCisKKyAgICAgICAgaWYgKGFLZXkgPT09IGJLZXkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGluZGV4Kys7CisgICAgICAgICAgICBkaWZmSGVscChhTm9kZSwgYk5vZGUsIGxvY2FsUGF0
Y2hlcywgaW5kZXgpOworICAgICAgICAgICAgaW5kZXggKz0gYU5vZGUuZGVzY2VuZGFudHNDb3Vu
dCB8fCAwOworCisgICAgICAgICAgICBhSW5kZXgrKzsKKyAgICAgICAgICAgIGJJbmRleCsrOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBsb29rIGFoZWFk
IDEgdG8gZGV0ZWN0IGluc2VydGlvbnMgYW5kIHJlbW92YWxzLgorCisgICAgICAgIHZhciBhTG9v
a0FoZWFkID0gYUluZGV4ICsgMSA8IGFMZW47CisgICAgICAgIHZhciBiTG9va0FoZWFkID0gYklu
ZGV4ICsgMSA8IGJMZW47CisKKyAgICAgICAgaWYgKGFMb29rQWhlYWQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHZhciBhTmV4dCA9IGFDaGlsZHJlblthSW5kZXggKyAxXTsKKyAgICAgICAgICAg
IHZhciBhTmV4dEtleSA9IGFOZXh0Ll8wOworICAgICAgICAgICAgdmFyIGFOZXh0Tm9kZSA9IGFO
ZXh0Ll8xOworICAgICAgICAgICAgdmFyIG9sZE1hdGNoID0gYktleSA9PT0gYU5leHRLZXk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoYkxvb2tBaGVhZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgdmFyIGJOZXh0ID0gYkNoaWxkcmVuW2JJbmRleCArIDFdOworICAgICAgICAgICAgdmFyIGJO
ZXh0S2V5ID0gYk5leHQuXzA7CisgICAgICAgICAgICB2YXIgYk5leHROb2RlID0gYk5leHQuXzE7
CisgICAgICAgICAgICB2YXIgbmV3TWF0Y2ggPSBhS2V5ID09PSBiTmV4dEtleTsKKyAgICAgICAg
fQorCisKKyAgICAgICAgLy8gc3dhcCBhIGFuZCBiCisgICAgICAgIGlmIChhTG9va0FoZWFkICYm
IGJMb29rQWhlYWQgJiYgbmV3TWF0Y2ggJiYgb2xkTWF0Y2gpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGluZGV4Kys7CisgICAgICAgICAgICBkaWZmSGVscChhTm9kZSwgYk5leHROb2RlLCBsb2Nh
bFBhdGNoZXMsIGluZGV4KTsKKyAgICAgICAgICAgIGluc2VydE5vZGUoY2hhbmdlcywgbG9jYWxQ
YXRjaGVzLCBhS2V5LCBiTm9kZSwgYkluZGV4LCBpbnNlcnRzKTsKKyAgICAgICAgICAgIGluZGV4
ICs9IGFOb2RlLmRlc2NlbmRhbnRzQ291bnQgfHwgMDsKKworICAgICAgICAgICAgaW5kZXgrKzsK
KyAgICAgICAgICAgIHJlbW92ZU5vZGUoY2hhbmdlcywgbG9jYWxQYXRjaGVzLCBhS2V5LCBhTmV4
dE5vZGUsIGluZGV4KTsKKyAgICAgICAgICAgIGluZGV4ICs9IGFOZXh0Tm9kZS5kZXNjZW5kYW50
c0NvdW50IHx8IDA7CisKKyAgICAgICAgICAgIGFJbmRleCArPSAyOworICAgICAgICAgICAgYklu
ZGV4ICs9IDI7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IGluc2VydCBiCisgICAgICAgIGlmIChiTG9va0FoZWFkICYmIG5ld01hdGNoKQorICAgICAgICB7
CisgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgaW5zZXJ0Tm9kZShjaGFuZ2VzLCBs
b2NhbFBhdGNoZXMsIGJLZXksIGJOb2RlLCBiSW5kZXgsIGluc2VydHMpOworICAgICAgICAgICAg
ZGlmZkhlbHAoYU5vZGUsIGJOZXh0Tm9kZSwgbG9jYWxQYXRjaGVzLCBpbmRleCk7CisgICAgICAg
ICAgICBpbmRleCArPSBhTm9kZS5kZXNjZW5kYW50c0NvdW50IHx8IDA7CisKKyAgICAgICAgICAg
IGFJbmRleCArPSAxOworICAgICAgICAgICAgYkluZGV4ICs9IDI7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHJlbW92ZSBhCisgICAgICAgIGlmIChhTG9v
a0FoZWFkICYmIG9sZE1hdGNoKQorICAgICAgICB7CisgICAgICAgICAgICBpbmRleCsrOworICAg
ICAgICAgICAgcmVtb3ZlTm9kZShjaGFuZ2VzLCBsb2NhbFBhdGNoZXMsIGFLZXksIGFOb2RlLCBp
bmRleCk7CisgICAgICAgICAgICBpbmRleCArPSBhTm9kZS5kZXNjZW5kYW50c0NvdW50IHx8IDA7
CisKKyAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICBkaWZmSGVscChhTmV4dE5vZGUs
IGJOb2RlLCBsb2NhbFBhdGNoZXMsIGluZGV4KTsKKyAgICAgICAgICAgIGluZGV4ICs9IGFOZXh0
Tm9kZS5kZXNjZW5kYW50c0NvdW50IHx8IDA7CisKKyAgICAgICAgICAgIGFJbmRleCArPSAyOwor
ICAgICAgICAgICAgYkluZGV4ICs9IDE7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIHJlbW92ZSBhLCBpbnNlcnQgYgorICAgICAgICBpZiAoYUxvb2tBaGVh
ZCAmJiBiTG9va0FoZWFkICYmIGFOZXh0S2V5ID09PSBiTmV4dEtleSkKKyAgICAgICAgeworICAg
ICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgIHJlbW92ZU5vZGUoY2hhbmdlcywgbG9jYWxQ
YXRjaGVzLCBhS2V5LCBhTm9kZSwgaW5kZXgpOworICAgICAgICAgICAgaW5zZXJ0Tm9kZShjaGFu
Z2VzLCBsb2NhbFBhdGNoZXMsIGJLZXksIGJOb2RlLCBiSW5kZXgsIGluc2VydHMpOworICAgICAg
ICAgICAgaW5kZXggKz0gYU5vZGUuZGVzY2VuZGFudHNDb3VudCB8fCAwOworCisgICAgICAgICAg
ICBpbmRleCsrOworICAgICAgICAgICAgZGlmZkhlbHAoYU5leHROb2RlLCBiTmV4dE5vZGUsIGxv
Y2FsUGF0Y2hlcywgaW5kZXgpOworICAgICAgICAgICAgaW5kZXggKz0gYU5leHROb2RlLmRlc2Nl
bmRhbnRzQ291bnQgfHwgMDsKKworICAgICAgICAgICAgYUluZGV4ICs9IDI7CisgICAgICAgICAg
ICBiSW5kZXggKz0gMjsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gZWF0IHVwIGFueSByZW1haW5pbmcgbm9kZXMgd2l0
aCByZW1vdmVOb2RlIGFuZCBpbnNlcnROb2RlCisKKyAgICB3aGlsZSAoYUluZGV4IDwgYUxlbikK
KyAgICB7CisgICAgICAgIGluZGV4Kys7CisgICAgICAgIHZhciBhID0gYUNoaWxkcmVuW2FJbmRl
eF07CisgICAgICAgIHZhciBhTm9kZSA9IGEuXzE7CisgICAgICAgIHJlbW92ZU5vZGUoY2hhbmdl
cywgbG9jYWxQYXRjaGVzLCBhLl8wLCBhTm9kZSwgaW5kZXgpOworICAgICAgICBpbmRleCArPSBh
Tm9kZS5kZXNjZW5kYW50c0NvdW50IHx8IDA7CisgICAgICAgIGFJbmRleCsrOworICAgIH0KKwor
ICAgIHZhciBlbmRJbnNlcnRzOworICAgIHdoaWxlIChiSW5kZXggPCBiTGVuKQorICAgIHsKKyAg
ICAgICAgZW5kSW5zZXJ0cyA9IGVuZEluc2VydHMgfHwgW107CisgICAgICAgIHZhciBiID0gYkNo
aWxkcmVuW2JJbmRleF07CisgICAgICAgIGluc2VydE5vZGUoY2hhbmdlcywgbG9jYWxQYXRjaGVz
LCBiLl8wLCBiLl8xLCB1bmRlZmluZWQsIGVuZEluc2VydHMpOworICAgICAgICBiSW5kZXgrKzsK
KyAgICB9CisKKyAgICBpZiAobG9jYWxQYXRjaGVzLmxlbmd0aCA+IDAgfHwgaW5zZXJ0cy5sZW5n
dGggPiAwIHx8IHR5cGVvZiBlbmRJbnNlcnRzICE9PSAndW5kZWZpbmVkJykKKyAgICB7CisgICAg
ICAgIHBhdGNoZXMucHVzaChtYWtlUGF0Y2goJ3AtcmVvcmRlcicsIHJvb3RJbmRleCwgeworICAg
ICAgICAgICAgcGF0Y2hlczogbG9jYWxQYXRjaGVzLAorICAgICAgICAgICAgaW5zZXJ0czogaW5z
ZXJ0cywKKyAgICAgICAgICAgIGVuZEluc2VydHM6IGVuZEluc2VydHMKKyAgICAgICAgfSkpOwor
ICAgIH0KK30KKworCisKKy8vLy8vLy8vLy8vLyAgQ0hBTkdFUyBGUk9NIEtFWUVEIERJRkYgIC8v
Ly8vLy8vLy8vLworCisKK3ZhciBQT1NURklYID0gJ19lbG1XNkJMJzsKKworCitmdW5jdGlvbiBp
bnNlcnROb2RlKGNoYW5nZXMsIGxvY2FsUGF0Y2hlcywga2V5LCB2bm9kZSwgYkluZGV4LCBpbnNl
cnRzKQoreworICAgIHZhciBlbnRyeSA9IGNoYW5nZXNba2V5XTsKKworICAgIC8vIG5ldmVyIHNl
ZW4gdGhpcyBrZXkgYmVmb3JlCisgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3VuZGVmaW5lZCcp
CisgICAgeworICAgICAgICBlbnRyeSA9IHsKKyAgICAgICAgICAgIHRhZzogJ2luc2VydCcsCisg
ICAgICAgICAgICB2bm9kZTogdm5vZGUsCisgICAgICAgICAgICBpbmRleDogYkluZGV4LAorICAg
ICAgICAgICAgZGF0YTogdW5kZWZpbmVkCisgICAgICAgIH07CisKKyAgICAgICAgaW5zZXJ0cy5w
dXNoKHsgaW5kZXg6IGJJbmRleCwgZW50cnk6IGVudHJ5IH0pOworICAgICAgICBjaGFuZ2VzW2tl
eV0gPSBlbnRyeTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gdGhpcyBrZXkg
d2FzIHJlbW92ZWQgZWFybGllciwgYSBtYXRjaCEKKyAgICBpZiAoZW50cnkudGFnID09PSAncmVt
b3ZlJykKKyAgICB7CisgICAgICAgIGluc2VydHMucHVzaCh7IGluZGV4OiBiSW5kZXgsIGVudHJ5
OiBlbnRyeSB9KTsKKworICAgICAgICBlbnRyeS50YWcgPSAnbW92ZSc7CisgICAgICAgIHZhciBz
dWJQYXRjaGVzID0gW107CisgICAgICAgIGRpZmZIZWxwKGVudHJ5LnZub2RlLCB2bm9kZSwgc3Vi
UGF0Y2hlcywgZW50cnkuaW5kZXgpOworICAgICAgICBlbnRyeS5pbmRleCA9IGJJbmRleDsKKyAg
ICAgICAgZW50cnkuZGF0YS5kYXRhID0geworICAgICAgICAgICAgcGF0Y2hlczogc3ViUGF0Y2hl
cywKKyAgICAgICAgICAgIGVudHJ5OiBlbnRyeQorICAgICAgICB9OworCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyB0aGlzIGtleSBoYXMgYWxyZWFkeSBiZWVuIGluc2VydGVkIG9y
IG1vdmVkLCBhIGR1cGxpY2F0ZSEKKyAgICBpbnNlcnROb2RlKGNoYW5nZXMsIGxvY2FsUGF0Y2hl
cywga2V5ICsgUE9TVEZJWCwgdm5vZGUsIGJJbmRleCwgaW5zZXJ0cyk7Cit9CisKKworZnVuY3Rp
b24gcmVtb3ZlTm9kZShjaGFuZ2VzLCBsb2NhbFBhdGNoZXMsIGtleSwgdm5vZGUsIGluZGV4KQor
eworICAgIHZhciBlbnRyeSA9IGNoYW5nZXNba2V5XTsKKworICAgIC8vIG5ldmVyIHNlZW4gdGhp
cyBrZXkgYmVmb3JlCisgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3VuZGVmaW5lZCcpCisgICAg
eworICAgICAgICB2YXIgcGF0Y2ggPSBtYWtlUGF0Y2goJ3AtcmVtb3ZlJywgaW5kZXgsIHVuZGVm
aW5lZCk7CisgICAgICAgIGxvY2FsUGF0Y2hlcy5wdXNoKHBhdGNoKTsKKworICAgICAgICBjaGFu
Z2VzW2tleV0gPSB7CisgICAgICAgICAgICB0YWc6ICdyZW1vdmUnLAorICAgICAgICAgICAgdm5v
ZGU6IHZub2RlLAorICAgICAgICAgICAgaW5kZXg6IGluZGV4LAorICAgICAgICAgICAgZGF0YTog
cGF0Y2gKKyAgICAgICAgfTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gdGhp
cyBrZXkgd2FzIGluc2VydGVkIGVhcmxpZXIsIGEgbWF0Y2ghCisgICAgaWYgKGVudHJ5LnRhZyA9
PT0gJ2luc2VydCcpCisgICAgeworICAgICAgICBlbnRyeS50YWcgPSAnbW92ZSc7CisgICAgICAg
IHZhciBzdWJQYXRjaGVzID0gW107CisgICAgICAgIGRpZmZIZWxwKHZub2RlLCBlbnRyeS52bm9k
ZSwgc3ViUGF0Y2hlcywgaW5kZXgpOworCisgICAgICAgIHZhciBwYXRjaCA9IG1ha2VQYXRjaCgn
cC1yZW1vdmUnLCBpbmRleCwgeworICAgICAgICAgICAgcGF0Y2hlczogc3ViUGF0Y2hlcywKKyAg
ICAgICAgICAgIGVudHJ5OiBlbnRyeQorICAgICAgICB9KTsKKyAgICAgICAgbG9jYWxQYXRjaGVz
LnB1c2gocGF0Y2gpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyB0aGlzIGtl
eSBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQgb3IgbW92ZWQsIGEgZHVwbGljYXRlIQorICAgIHJl
bW92ZU5vZGUoY2hhbmdlcywgbG9jYWxQYXRjaGVzLCBrZXkgKyBQT1NURklYLCB2bm9kZSwgaW5k
ZXgpOworfQorCisKKworLy8vLy8vLy8vLy8vICBBREQgRE9NIE5PREVTICAvLy8vLy8vLy8vLy8K
Ky8vCisvLyBFYWNoIERPTSBub2RlIGhhcyBhbiAiaW5kZXgiIGFzc2lnbmVkIGluIG9yZGVyIG9m
IHRyYXZlcnNhbC4gSXQgaXMgaW1wb3J0YW50CisvLyB0byBtaW5pbWl6ZSBvdXIgY3Jhd2wgb3Zl
ciB0aGUgYWN0dWFsIERPTSwgc28gdGhlc2UgaW5kZXhlcyAoYWxvbmcgd2l0aCB0aGUKKy8vIGRl
c2NlbmRhbnRzQ291bnQgb2YgdmlydHVhbCBub2RlcykgbGV0IHVzIHNraXAgdG91Y2hpbmcgZW50
aXJlIHN1YnRyZWVzIG9mCisvLyB0aGUgRE9NIGlmIHdlIGtub3cgdGhlcmUgYXJlIG5vIHBhdGNo
ZXMgdGhlcmUuCisKKworZnVuY3Rpb24gYWRkRG9tTm9kZXMoZG9tTm9kZSwgdk5vZGUsIHBhdGNo
ZXMsIGV2ZW50Tm9kZSkKK3sKKyAgICBhZGREb21Ob2Rlc0hlbHAoZG9tTm9kZSwgdk5vZGUsIHBh
dGNoZXMsIDAsIDAsIHZOb2RlLmRlc2NlbmRhbnRzQ291bnQsIGV2ZW50Tm9kZSk7Cit9CisKKwor
Ly8gYXNzdW1lcyBgcGF0Y2hlc2AgaXMgbm9uLWVtcHR5IGFuZCBpbmRleGVzIGluY3JlYXNlIG1v
bm90b25pY2FsbHkuCitmdW5jdGlvbiBhZGREb21Ob2Rlc0hlbHAoZG9tTm9kZSwgdk5vZGUsIHBh
dGNoZXMsIGksIGxvdywgaGlnaCwgZXZlbnROb2RlKQoreworICAgIHZhciBwYXRjaCA9IHBhdGNo
ZXNbaV07CisgICAgdmFyIGluZGV4ID0gcGF0Y2guaW5kZXg7CisKKyAgICB3aGlsZSAoaW5kZXgg
PT09IGxvdykKKyAgICB7CisgICAgICAgIHZhciBwYXRjaFR5cGUgPSBwYXRjaC50eXBlOworCisg
ICAgICAgIGlmIChwYXRjaFR5cGUgPT09ICdwLXRodW5rJykKKyAgICAgICAgeworICAgICAgICAg
ICAgYWRkRG9tTm9kZXMoZG9tTm9kZSwgdk5vZGUubm9kZSwgcGF0Y2guZGF0YSwgZXZlbnROb2Rl
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwYXRjaFR5cGUgPT09ICdwLXJlb3JkZXIn
KQorICAgICAgICB7CisgICAgICAgICAgICBwYXRjaC5kb21Ob2RlID0gZG9tTm9kZTsKKyAgICAg
ICAgICAgIHBhdGNoLmV2ZW50Tm9kZSA9IGV2ZW50Tm9kZTsKKworICAgICAgICAgICAgdmFyIHN1
YlBhdGNoZXMgPSBwYXRjaC5kYXRhLnBhdGNoZXM7CisgICAgICAgICAgICBpZiAoc3ViUGF0Y2hl
cy5sZW5ndGggPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFkZERvbU5vZGVz
SGVscChkb21Ob2RlLCB2Tm9kZSwgc3ViUGF0Y2hlcywgMCwgbG93LCBoaWdoLCBldmVudE5vZGUp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHBhdGNoVHlwZSA9
PT0gJ3AtcmVtb3ZlJykKKyAgICAgICAgeworICAgICAgICAgICAgcGF0Y2guZG9tTm9kZSA9IGRv
bU5vZGU7CisgICAgICAgICAgICBwYXRjaC5ldmVudE5vZGUgPSBldmVudE5vZGU7CisKKyAgICAg
ICAgICAgIHZhciBkYXRhID0gcGF0Y2guZGF0YTsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0
YSAhPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGF0YS5l
bnRyeS5kYXRhID0gZG9tTm9kZTsKKyAgICAgICAgICAgICAgICB2YXIgc3ViUGF0Y2hlcyA9IGRh
dGEucGF0Y2hlczsKKyAgICAgICAgICAgICAgICBpZiAoc3ViUGF0Y2hlcy5sZW5ndGggPiAwKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkRG9tTm9kZXNIZWxwKGRv
bU5vZGUsIHZOb2RlLCBzdWJQYXRjaGVzLCAwLCBsb3csIGhpZ2gsIGV2ZW50Tm9kZSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgcGF0Y2guZG9tTm9kZSA9IGRvbU5vZGU7CisgICAgICAgICAg
ICBwYXRjaC5ldmVudE5vZGUgPSBldmVudE5vZGU7CisgICAgICAgIH0KKworICAgICAgICBpKys7
CisKKyAgICAgICAgaWYgKCEocGF0Y2ggPSBwYXRjaGVzW2ldKSB8fCAoaW5kZXggPSBwYXRjaC5p
bmRleCkgPiBoaWdoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHN3aXRjaCAodk5vZGUudHlwZSkKKyAgICB7CisgICAgICAgIGNhc2Ug
J3RhZ2dlcic6CisgICAgICAgICAgICB2YXIgc3ViTm9kZSA9IHZOb2RlLm5vZGU7CisKKyAgICAg
ICAgICAgIHdoaWxlIChzdWJOb2RlLnR5cGUgPT09ICJ0YWdnZXIiKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHN1Yk5vZGUgPSBzdWJOb2RlLm5vZGU7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHJldHVybiBhZGREb21Ob2Rlc0hlbHAoZG9tTm9kZSwgc3ViTm9kZSwgcGF0
Y2hlcywgaSwgbG93ICsgMSwgaGlnaCwgZG9tTm9kZS5lbG1fZXZlbnRfbm9kZV9yZWYpOworCisg
ICAgICAgIGNhc2UgJ25vZGUnOgorICAgICAgICAgICAgdmFyIHZDaGlsZHJlbiA9IHZOb2RlLmNo
aWxkcmVuOworICAgICAgICAgICAgdmFyIGNoaWxkTm9kZXMgPSBkb21Ob2RlLmNoaWxkTm9kZXM7
CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZDaGlsZHJlbi5sZW5ndGg7IGorKykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsb3crKzsKKyAgICAgICAgICAgICAgICB2
YXIgdkNoaWxkID0gdkNoaWxkcmVuW2pdOworICAgICAgICAgICAgICAgIHZhciBuZXh0TG93ID0g
bG93ICsgKHZDaGlsZC5kZXNjZW5kYW50c0NvdW50IHx8IDApOworICAgICAgICAgICAgICAgIGlm
IChsb3cgPD0gaW5kZXggJiYgaW5kZXggPD0gbmV4dExvdykKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIGkgPSBhZGREb21Ob2Rlc0hlbHAoY2hpbGROb2Rlc1tqXSwgdkNo
aWxkLCBwYXRjaGVzLCBpLCBsb3csIG5leHRMb3csIGV2ZW50Tm9kZSk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghKHBhdGNoID0gcGF0Y2hlc1tpXSkgfHwgKGluZGV4ID0gcGF0Y2guaW5kZXgp
ID4gaGlnaCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgbG93ID0gbmV4dExvdzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBpOworCisgICAgICAgIGNhc2UgJ2tleWVkLW5vZGUnOgorICAgICAgICAgICAgdmFyIHZD
aGlsZHJlbiA9IHZOb2RlLmNoaWxkcmVuOworICAgICAgICAgICAgdmFyIGNoaWxkTm9kZXMgPSBk
b21Ob2RlLmNoaWxkTm9kZXM7CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZDaGls
ZHJlbi5sZW5ndGg7IGorKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsb3crKzsK
KyAgICAgICAgICAgICAgICB2YXIgdkNoaWxkID0gdkNoaWxkcmVuW2pdLl8xOworICAgICAgICAg
ICAgICAgIHZhciBuZXh0TG93ID0gbG93ICsgKHZDaGlsZC5kZXNjZW5kYW50c0NvdW50IHx8IDAp
OworICAgICAgICAgICAgICAgIGlmIChsb3cgPD0gaW5kZXggJiYgaW5kZXggPD0gbmV4dExvdykK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGkgPSBhZGREb21Ob2Rlc0hl
bHAoY2hpbGROb2Rlc1tqXSwgdkNoaWxkLCBwYXRjaGVzLCBpLCBsb3csIG5leHRMb3csIGV2ZW50
Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghKHBhdGNoID0gcGF0Y2hlc1tpXSkgfHwg
KGluZGV4ID0gcGF0Y2guaW5kZXgpID4gaGlnaCkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbG93ID0gbmV4dExvdzsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBpOworCisgICAgICAgIGNhc2UgJ3RleHQnOgorICAg
ICAgICBjYXNlICd0aHVuayc6CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Nob3VsZCBu
ZXZlciB0cmF2ZXJzZSBgdGV4dGAgb3IgYHRodW5rYCBub2RlcyBsaWtlIHRoaXMnKTsKKyAgICB9
Cit9CisKKworCisvLy8vLy8vLy8vLy8gIEFQUExZIFBBVENIRVMgIC8vLy8vLy8vLy8vLworCisK
K2Z1bmN0aW9uIGFwcGx5UGF0Y2hlcyhyb290RG9tTm9kZSwgb2xkVmlydHVhbE5vZGUsIHBhdGNo
ZXMsIGV2ZW50Tm9kZSkKK3sKKyAgICBpZiAocGF0Y2hlcy5sZW5ndGggPT09IDApCisgICAgewor
ICAgICAgICByZXR1cm4gcm9vdERvbU5vZGU7CisgICAgfQorCisgICAgYWRkRG9tTm9kZXMocm9v
dERvbU5vZGUsIG9sZFZpcnR1YWxOb2RlLCBwYXRjaGVzLCBldmVudE5vZGUpOworICAgIHJldHVy
biBhcHBseVBhdGNoZXNIZWxwKHJvb3REb21Ob2RlLCBwYXRjaGVzKTsKK30KKworZnVuY3Rpb24g
YXBwbHlQYXRjaGVzSGVscChyb290RG9tTm9kZSwgcGF0Y2hlcykKK3sKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHBhdGNoZXMubGVuZ3RoOyBpKyspCisgICAgeworICAgICAgICB2YXIgcGF0Y2gg
PSBwYXRjaGVzW2ldOworICAgICAgICB2YXIgbG9jYWxEb21Ob2RlID0gcGF0Y2guZG9tTm9kZQor
ICAgICAgICB2YXIgbmV3Tm9kZSA9IGFwcGx5UGF0Y2gobG9jYWxEb21Ob2RlLCBwYXRjaCk7Cisg
ICAgICAgIGlmIChsb2NhbERvbU5vZGUgPT09IHJvb3REb21Ob2RlKQorICAgICAgICB7CisgICAg
ICAgICAgICByb290RG9tTm9kZSA9IG5ld05vZGU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIHJvb3REb21Ob2RlOworfQorCitmdW5jdGlvbiBhcHBseVBhdGNoKGRvbU5vZGUsIHBhdGNo
KQoreworICAgIHN3aXRjaCAocGF0Y2gudHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgJ3AtcmVk
cmF3JzoKKyAgICAgICAgICAgIHJldHVybiBhcHBseVBhdGNoUmVkcmF3KGRvbU5vZGUsIHBhdGNo
LmRhdGEsIHBhdGNoLmV2ZW50Tm9kZSk7CisKKyAgICAgICAgY2FzZSAncC1mYWN0cyc6CisgICAg
ICAgICAgICBhcHBseUZhY3RzKGRvbU5vZGUsIHBhdGNoLmV2ZW50Tm9kZSwgcGF0Y2guZGF0YSk7
CisgICAgICAgICAgICByZXR1cm4gZG9tTm9kZTsKKworICAgICAgICBjYXNlICdwLXRleHQnOgor
ICAgICAgICAgICAgZG9tTm9kZS5yZXBsYWNlRGF0YSgwLCBkb21Ob2RlLmxlbmd0aCwgcGF0Y2gu
ZGF0YSk7CisgICAgICAgICAgICByZXR1cm4gZG9tTm9kZTsKKworICAgICAgICBjYXNlICdwLXRo
dW5rJzoKKyAgICAgICAgICAgIHJldHVybiBhcHBseVBhdGNoZXNIZWxwKGRvbU5vZGUsIHBhdGNo
LmRhdGEpOworCisgICAgICAgIGNhc2UgJ3AtdGFnZ2VyJzoKKyAgICAgICAgICAgIGRvbU5vZGUu
ZWxtX2V2ZW50X25vZGVfcmVmLnRhZ2dlciA9IHBhdGNoLmRhdGE7CisgICAgICAgICAgICByZXR1
cm4gZG9tTm9kZTsKKworICAgICAgICBjYXNlICdwLXJlbW92ZS1sYXN0JzoKKyAgICAgICAgICAg
IHZhciBpID0gcGF0Y2guZGF0YTsKKyAgICAgICAgICAgIHdoaWxlIChpLS0pCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgZG9tTm9kZS5yZW1vdmVDaGlsZChkb21Ob2RlLmxhc3RDaGls
ZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZG9tTm9kZTsKKworICAgICAg
ICBjYXNlICdwLWFwcGVuZCc6CisgICAgICAgICAgICB2YXIgbmV3Tm9kZXMgPSBwYXRjaC5kYXRh
OworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdOb2Rlcy5sZW5ndGg7IGkrKykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkb21Ob2RlLmFwcGVuZENoaWxkKHJlbmRl
cihuZXdOb2Rlc1tpXSwgcGF0Y2guZXZlbnROb2RlKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gZG9tTm9kZTsKKworICAgICAgICBjYXNlICdwLXJlbW92ZSc6CisgICAgICAg
ICAgICB2YXIgZGF0YSA9IHBhdGNoLmRhdGE7CisgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEg
PT09ICd1bmRlZmluZWQnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRvbU5vZGUu
cGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkb21Ob2RlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZG9tTm9kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBlbnRyeSA9IGRhdGEuZW50
cnk7CisgICAgICAgICAgICBpZiAodHlwZW9mIGVudHJ5LmluZGV4ICE9PSAndW5kZWZpbmVkJykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkb21Ob2RlLnBhcmVudE5vZGUucmVtb3Zl
Q2hpbGQoZG9tTm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbnRyeS5kYXRhID0g
YXBwbHlQYXRjaGVzSGVscChkb21Ob2RlLCBkYXRhLnBhdGNoZXMpOworICAgICAgICAgICAgcmV0
dXJuIGRvbU5vZGU7CisKKyAgICAgICAgY2FzZSAncC1yZW9yZGVyJzoKKyAgICAgICAgICAgIHJl
dHVybiBhcHBseVBhdGNoUmVvcmRlcihkb21Ob2RlLCBwYXRjaCk7CisKKyAgICAgICAgY2FzZSAn
cC1jdXN0b20nOgorICAgICAgICAgICAgdmFyIGltcGwgPSBwYXRjaC5kYXRhOworICAgICAgICAg
ICAgcmV0dXJuIGltcGwuYXBwbHlQYXRjaChkb21Ob2RlLCBpbXBsLmRhdGEpOworCisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JhbiBpbnRvIGFuIHVua25v
d24gcGF0Y2ghJyk7CisgICAgfQorfQorCisKK2Z1bmN0aW9uIGFwcGx5UGF0Y2hSZWRyYXcoZG9t
Tm9kZSwgdk5vZGUsIGV2ZW50Tm9kZSkKK3sKKyAgICB2YXIgcGFyZW50Tm9kZSA9IGRvbU5vZGUu
cGFyZW50Tm9kZTsKKyAgICB2YXIgbmV3Tm9kZSA9IHJlbmRlcih2Tm9kZSwgZXZlbnROb2RlKTsK
KworICAgIGlmICh0eXBlb2YgbmV3Tm9kZS5lbG1fZXZlbnRfbm9kZV9yZWYgPT09ICd1bmRlZmlu
ZWQnKQorICAgIHsKKyAgICAgICAgbmV3Tm9kZS5lbG1fZXZlbnRfbm9kZV9yZWYgPSBkb21Ob2Rl
LmVsbV9ldmVudF9ub2RlX3JlZjsKKyAgICB9CisKKyAgICBpZiAocGFyZW50Tm9kZSAmJiBuZXdO
b2RlICE9PSBkb21Ob2RlKQorICAgIHsKKyAgICAgICAgcGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQo
bmV3Tm9kZSwgZG9tTm9kZSk7CisgICAgfQorICAgIHJldHVybiBuZXdOb2RlOworfQorCisKK2Z1
bmN0aW9uIGFwcGx5UGF0Y2hSZW9yZGVyKGRvbU5vZGUsIHBhdGNoKQoreworICAgIHZhciBkYXRh
ID0gcGF0Y2guZGF0YTsKKworICAgIC8vIHJlbW92ZSBlbmQgaW5zZXJ0cworICAgIHZhciBmcmFn
ID0gYXBwbHlQYXRjaFJlb3JkZXJFbmRJbnNlcnRzSGVscChkYXRhLmVuZEluc2VydHMsIHBhdGNo
KTsKKworICAgIC8vIHJlbW92YWxzCisgICAgZG9tTm9kZSA9IGFwcGx5UGF0Y2hlc0hlbHAoZG9t
Tm9kZSwgZGF0YS5wYXRjaGVzKTsKKworICAgIC8vIGluc2VydHMKKyAgICB2YXIgaW5zZXJ0cyA9
IGRhdGEuaW5zZXJ0czsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluc2VydHMubGVuZ3RoOyBp
KyspCisgICAgeworICAgICAgICB2YXIgaW5zZXJ0ID0gaW5zZXJ0c1tpXTsKKyAgICAgICAgdmFy
IGVudHJ5ID0gaW5zZXJ0LmVudHJ5OworICAgICAgICB2YXIgbm9kZSA9IGVudHJ5LnRhZyA9PT0g
J21vdmUnCisgICAgICAgICAgICA/IGVudHJ5LmRhdGEKKyAgICAgICAgICAgIDogcmVuZGVyKGVu
dHJ5LnZub2RlLCBwYXRjaC5ldmVudE5vZGUpOworICAgICAgICBkb21Ob2RlLmluc2VydEJlZm9y
ZShub2RlLCBkb21Ob2RlLmNoaWxkTm9kZXNbaW5zZXJ0LmluZGV4XSk7CisgICAgfQorCisgICAg
Ly8gYWRkIGVuZCBpbnNlcnRzCisgICAgaWYgKHR5cGVvZiBmcmFnICE9PSAndW5kZWZpbmVkJykK
KyAgICB7CisgICAgICAgIGRvbU5vZGUuYXBwZW5kQ2hpbGQoZnJhZyk7CisgICAgfQorCisgICAg
cmV0dXJuIGRvbU5vZGU7Cit9CisKKworZnVuY3Rpb24gYXBwbHlQYXRjaFJlb3JkZXJFbmRJbnNl
cnRzSGVscChlbmRJbnNlcnRzLCBwYXRjaCkKK3sKKyAgICBpZiAodHlwZW9mIGVuZEluc2VydHMg
PT09ICd1bmRlZmluZWQnKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZh
ciBmcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgZW5kSW5zZXJ0cy5sZW5ndGg7IGkrKykKKyAgICB7CisgICAgICAgIHZhciBp
bnNlcnQgPSBlbmRJbnNlcnRzW2ldOworICAgICAgICB2YXIgZW50cnkgPSBpbnNlcnQuZW50cnk7
CisgICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQoZW50cnkudGFnID09PSAnbW92ZScKKyAgICAgICAg
ICAgID8gZW50cnkuZGF0YQorICAgICAgICAgICAgOiByZW5kZXIoZW50cnkudm5vZGUsIHBhdGNo
LmV2ZW50Tm9kZSkKKyAgICAgICAgKTsKKyAgICB9CisgICAgcmV0dXJuIGZyYWc7Cit9CisKKwor
CisvLy8vLy8vLy8vLy8gIFBST0dSQU1TICAvLy8vLy8vLy8vLy8KKworCitmdW5jdGlvbiBwcm9n
cmFtV2l0aEZsYWdzKGRldGFpbHMpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgaW5pdDogZGV0
YWlscy5pbml0LAorICAgICAgICB1cGRhdGU6IGRldGFpbHMudXBkYXRlLAorICAgICAgICBzdWJz
Y3JpcHRpb25zOiBkZXRhaWxzLnN1YnNjcmlwdGlvbnMsCisgICAgICAgIHZpZXc6IGRldGFpbHMu
dmlldywKKyAgICAgICAgcmVuZGVyZXI6IHJlbmRlcmVyCisgICAgfTsKK30KKworCityZXR1cm4g
eworICAgIG5vZGU6IG5vZGUsCisgICAgdGV4dDogdGV4dCwKKworICAgIGN1c3RvbTogY3VzdG9t
LAorCisgICAgbWFwOiBGMihtYXApLAorCisgICAgb246IEYzKG9uKSwKKyAgICBzdHlsZTogc3R5
bGUsCisgICAgcHJvcGVydHk6IEYyKHByb3BlcnR5KSwKKyAgICBhdHRyaWJ1dGU6IEYyKGF0dHJp
YnV0ZSksCisgICAgYXR0cmlidXRlTlM6IEYzKGF0dHJpYnV0ZU5TKSwKKworICAgIGxhenk6IEYy
KGxhenkpLAorICAgIGxhenkyOiBGMyhsYXp5MiksCisgICAgbGF6eTM6IEY0KGxhenkzKSwKKyAg
ICBrZXllZE5vZGU6IEYzKGtleWVkTm9kZSksCisKKyAgICBwcm9ncmFtV2l0aEZsYWdzOiBwcm9n
cmFtV2l0aEZsYWdzCit9OworCit9KCk7Cit2YXIgX2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1
YWxEb20kcHJvZ3JhbVdpdGhGbGFncyA9IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSROYXRpdmVfVmly
dHVhbERvbS5wcm9ncmFtV2l0aEZsYWdzOwordmFyIF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0
dWFsRG9tJGtleWVkTm9kZSA9IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSROYXRpdmVfVmlydHVhbERv
bS5rZXllZE5vZGU7Cit2YXIgX2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1YWxEb20kbGF6eTMg
PSBfZWxtX2xhbmckdmlydHVhbF9kb20kTmF0aXZlX1ZpcnR1YWxEb20ubGF6eTM7Cit2YXIgX2Vs
bV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1YWxEb20kbGF6eTIgPSBfZWxtX2xhbmckdmlydHVhbF9k
b20kTmF0aXZlX1ZpcnR1YWxEb20ubGF6eTI7Cit2YXIgX2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZp
cnR1YWxEb20kbGF6eSA9IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSROYXRpdmVfVmlydHVhbERvbS5s
YXp5OwordmFyIF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJGRlZmF1bHRPcHRpb25z
ID0ge3N0b3BQcm9wYWdhdGlvbjogZmFsc2UsIHByZXZlbnREZWZhdWx0OiBmYWxzZX07Cit2YXIg
X2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1YWxEb20kb25XaXRoT3B0aW9ucyA9IF9lbG1fbGFu
ZyR2aXJ0dWFsX2RvbSROYXRpdmVfVmlydHVhbERvbS5vbjsKK3ZhciBfZWxtX2xhbmckdmlydHVh
bF9kb20kVmlydHVhbERvbSRvbiA9IEYyKAorICAgIGZ1bmN0aW9uIChldmVudE5hbWUsIGRlY29k
ZXIpIHsKKyAgICAgICAgcmV0dXJuIEEzKF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9t
JG9uV2l0aE9wdGlvbnMsIGV2ZW50TmFtZSwgX2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1YWxE
b20kZGVmYXVsdE9wdGlvbnMsIGRlY29kZXIpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyR2aXJ0
dWFsX2RvbSRWaXJ0dWFsRG9tJHN0eWxlID0gX2VsbV9sYW5nJHZpcnR1YWxfZG9tJE5hdGl2ZV9W
aXJ0dWFsRG9tLnN0eWxlOwordmFyIF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJGF0
dHJpYnV0ZU5TID0gX2VsbV9sYW5nJHZpcnR1YWxfZG9tJE5hdGl2ZV9WaXJ0dWFsRG9tLmF0dHJp
YnV0ZU5TOwordmFyIF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJGF0dHJpYnV0ZSA9
IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSROYXRpdmVfVmlydHVhbERvbS5hdHRyaWJ1dGU7Cit2YXIg
X2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1YWxEb20kcHJvcGVydHkgPSBfZWxtX2xhbmckdmly
dHVhbF9kb20kTmF0aXZlX1ZpcnR1YWxEb20ucHJvcGVydHk7Cit2YXIgX2VsbV9sYW5nJHZpcnR1
YWxfZG9tJFZpcnR1YWxEb20kbWFwID0gX2VsbV9sYW5nJHZpcnR1YWxfZG9tJE5hdGl2ZV9WaXJ0
dWFsRG9tLm1hcDsKK3ZhciBfZWxtX2xhbmckdmlydHVhbF9kb20kVmlydHVhbERvbSR0ZXh0ID0g
X2VsbV9sYW5nJHZpcnR1YWxfZG9tJE5hdGl2ZV9WaXJ0dWFsRG9tLnRleHQ7Cit2YXIgX2VsbV9s
YW5nJHZpcnR1YWxfZG9tJFZpcnR1YWxEb20kbm9kZSA9IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRO
YXRpdmVfVmlydHVhbERvbS5ub2RlOwordmFyIF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFs
RG9tJE9wdGlvbnMgPSBGMigKKyAgICBmdW5jdGlvbiAoYSwgYikgeworICAgICAgICByZXR1cm4g
e3N0b3BQcm9wYWdhdGlvbjogYSwgcHJldmVudERlZmF1bHQ6IGJ9OworICAgIH0pOwordmFyIF9l
bG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJE5vZGUgPSB7Y3RvcjogJ05vZGUnfTsKK3Zh
ciBfZWxtX2xhbmckdmlydHVhbF9kb20kVmlydHVhbERvbSRQcm9wZXJ0eSA9IHtjdG9yOiAnUHJv
cGVydHknfTsKKwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkdGV4dCA9IF9lbG1fbGFuZyR2aXJ0
dWFsX2RvbSRWaXJ0dWFsRG9tJHRleHQ7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlID0g
X2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1YWxEb20kbm9kZTsKK3ZhciBfZWxtX2xhbmckaHRt
bCRIdG1sJGJvZHkgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2JvZHknKTsKK3ZhciBfZWxt
X2xhbmckaHRtbCRIdG1sJHNlY3Rpb24gPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3NlY3Rp
b24nKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJG5hdiA9IF9lbG1fbGFuZyRodG1sJEh0bWwk
bm9kZSgnbmF2Jyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRhcnRpY2xlID0gX2VsbV9sYW5n
JGh0bWwkSHRtbCRub2RlKCdhcnRpY2xlJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRhc2lk
ZSA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnYXNpZGUnKTsKK3ZhciBfZWxtX2xhbmckaHRt
bCRIdG1sJGgxID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdoMScpOwordmFyIF9lbG1fbGFu
ZyRodG1sJEh0bWwkaDIgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2gyJyk7Cit2YXIgX2Vs
bV9sYW5nJGh0bWwkSHRtbCRoMyA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnaDMnKTsKK3Zh
ciBfZWxtX2xhbmckaHRtbCRIdG1sJGg0ID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdoNCcp
OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkaDUgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUo
J2g1Jyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRoNiA9IF9lbG1fbGFuZyRodG1sJEh0bWwk
bm9kZSgnaDYnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGhlYWRlciA9IF9lbG1fbGFuZyRo
dG1sJEh0bWwkbm9kZSgnaGVhZGVyJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRmb290ZXIg
PSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2Zvb3RlcicpOwordmFyIF9lbG1fbGFuZyRodG1s
JEh0bWwkYWRkcmVzcyA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnYWRkcmVzcycpOwordmFy
IF9lbG1fbGFuZyRodG1sJEh0bWwkbWFpbiQgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ21h
aW4nKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHAgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5v
ZGUoJ3AnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGhyID0gX2VsbV9sYW5nJGh0bWwkSHRt
bCRub2RlKCdocicpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkcHJlID0gX2VsbV9sYW5nJGh0
bWwkSHRtbCRub2RlKCdwcmUnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGJsb2NrcXVvdGUg
PSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2Jsb2NrcXVvdGUnKTsKK3ZhciBfZWxtX2xhbmck
aHRtbCRIdG1sJG9sID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdvbCcpOwordmFyIF9lbG1f
bGFuZyRodG1sJEh0bWwkdWwgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3VsJyk7Cit2YXIg
X2VsbV9sYW5nJGh0bWwkSHRtbCRsaSA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnbGknKTsK
K3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGRsID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdk
bCcpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkZHQgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5v
ZGUoJ2R0Jyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRkZCA9IF9lbG1fbGFuZyRodG1sJEh0
bWwkbm9kZSgnZGQnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGZpZ3VyZSA9IF9lbG1fbGFu
ZyRodG1sJEh0bWwkbm9kZSgnZmlndXJlJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRmaWdj
YXB0aW9uID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdmaWdjYXB0aW9uJyk7Cit2YXIgX2Vs
bV9sYW5nJGh0bWwkSHRtbCRkaXYgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2RpdicpOwor
dmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkYSA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnYScp
OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkZW0gPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUo
J2VtJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRzdHJvbmcgPSBfZWxtX2xhbmckaHRtbCRI
dG1sJG5vZGUoJ3N0cm9uZycpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkc21hbGwgPSBfZWxt
X2xhbmckaHRtbCRIdG1sJG5vZGUoJ3NtYWxsJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRz
ID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdzJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRt
bCRjaXRlID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdjaXRlJyk7Cit2YXIgX2VsbV9sYW5n
JGh0bWwkSHRtbCRxID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdxJyk7Cit2YXIgX2VsbV9s
YW5nJGh0bWwkSHRtbCRkZm4gPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2RmbicpOwordmFy
IF9lbG1fbGFuZyRodG1sJEh0bWwkYWJiciA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnYWJi
cicpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkdGltZSA9IF9lbG1fbGFuZyRodG1sJEh0bWwk
bm9kZSgndGltZScpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkY29kZSA9IF9lbG1fbGFuZyRo
dG1sJEh0bWwkbm9kZSgnY29kZScpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkdmFyID0gX2Vs
bV9sYW5nJGh0bWwkSHRtbCRub2RlKCd2YXInKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHNh
bXAgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3NhbXAnKTsKK3ZhciBfZWxtX2xhbmckaHRt
bCRIdG1sJGtiZCA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgna2JkJyk7Cit2YXIgX2VsbV9s
YW5nJGh0bWwkSHRtbCRzdWIgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3N1YicpOwordmFy
IF9lbG1fbGFuZyRodG1sJEh0bWwkc3VwID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdzdXAn
KTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGkgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUo
J2knKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGIgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5v
ZGUoJ2InKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHUgPSBfZWxtX2xhbmckaHRtbCRIdG1s
JG5vZGUoJ3UnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJG1hcmsgPSBfZWxtX2xhbmckaHRt
bCRIdG1sJG5vZGUoJ21hcmsnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHJ1YnkgPSBfZWxt
X2xhbmckaHRtbCRIdG1sJG5vZGUoJ3J1YnknKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHJ0
ID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdydCcpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0
bWwkcnAgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3JwJyk7Cit2YXIgX2VsbV9sYW5nJGh0
bWwkSHRtbCRiZGkgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2JkaScpOwordmFyIF9lbG1f
bGFuZyRodG1sJEh0bWwkYmRvID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdiZG8nKTsKK3Zh
ciBfZWxtX2xhbmckaHRtbCRIdG1sJHNwYW4gPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3Nw
YW4nKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGJyID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRu
b2RlKCdicicpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkd2JyID0gX2VsbV9sYW5nJGh0bWwk
SHRtbCRub2RlKCd3YnInKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGlucyA9IF9lbG1fbGFu
ZyRodG1sJEh0bWwkbm9kZSgnaW5zJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRkZWwgPSBf
ZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2RlbCcpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwk
aW1nID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdpbWcnKTsKK3ZhciBfZWxtX2xhbmckaHRt
bCRIdG1sJGlmcmFtZSA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnaWZyYW1lJyk7Cit2YXIg
X2VsbV9sYW5nJGh0bWwkSHRtbCRlbWJlZCA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnZW1i
ZWQnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJG9iamVjdCA9IF9lbG1fbGFuZyRodG1sJEh0
bWwkbm9kZSgnb2JqZWN0Jyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRwYXJhbSA9IF9lbG1f
bGFuZyRodG1sJEh0bWwkbm9kZSgncGFyYW0nKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHZp
ZGVvID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCd2aWRlbycpOwordmFyIF9lbG1fbGFuZyRo
dG1sJEh0bWwkYXVkaW8gPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2F1ZGlvJyk7Cit2YXIg
X2VsbV9sYW5nJGh0bWwkSHRtbCRzb3VyY2UgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3Nv
dXJjZScpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkdHJhY2sgPSBfZWxtX2xhbmckaHRtbCRI
dG1sJG5vZGUoJ3RyYWNrJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRjYW52YXMgPSBfZWxt
X2xhbmckaHRtbCRIdG1sJG5vZGUoJ2NhbnZhcycpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwk
c3ZnID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdzdmcnKTsKK3ZhciBfZWxtX2xhbmckaHRt
bCRIdG1sJG1hdGggPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ21hdGgnKTsKK3ZhciBfZWxt
X2xhbmckaHRtbCRIdG1sJHRhYmxlID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCd0YWJsZScp
OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkY2FwdGlvbiA9IF9lbG1fbGFuZyRodG1sJEh0bWwk
bm9kZSgnY2FwdGlvbicpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkY29sZ3JvdXAgPSBfZWxt
X2xhbmckaHRtbCRIdG1sJG5vZGUoJ2NvbGdyb3VwJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRt
bCRjb2wgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2NvbCcpOwordmFyIF9lbG1fbGFuZyRo
dG1sJEh0bWwkdGJvZHkgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3Rib2R5Jyk7Cit2YXIg
X2VsbV9sYW5nJGh0bWwkSHRtbCR0aGVhZCA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgndGhl
YWQnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHRmb290ID0gX2VsbV9sYW5nJGh0bWwkSHRt
bCRub2RlKCd0Zm9vdCcpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkdHIgPSBfZWxtX2xhbmck
aHRtbCRIdG1sJG5vZGUoJ3RyJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCR0ZCA9IF9lbG1f
bGFuZyRodG1sJEh0bWwkbm9kZSgndGQnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHRoID0g
X2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCd0aCcpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwk
Zm9ybSA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnZm9ybScpOwordmFyIF9lbG1fbGFuZyRo
dG1sJEh0bWwkZmllbGRzZXQgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2ZpZWxkc2V0Jyk7
Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRsZWdlbmQgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5v
ZGUoJ2xlZ2VuZCcpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkbGFiZWwgPSBfZWxtX2xhbmck
aHRtbCRIdG1sJG5vZGUoJ2xhYmVsJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRpbnB1dCA9
IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnaW5wdXQnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRI
dG1sJGJ1dHRvbiA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnYnV0dG9uJyk7Cit2YXIgX2Vs
bV9sYW5nJGh0bWwkSHRtbCRzZWxlY3QgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3NlbGVj
dCcpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkZGF0YWxpc3QgPSBfZWxtX2xhbmckaHRtbCRI
dG1sJG5vZGUoJ2RhdGFsaXN0Jyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRvcHRncm91cCA9
IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnb3B0Z3JvdXAnKTsKK3ZhciBfZWxtX2xhbmckaHRt
bCRIdG1sJG9wdGlvbiA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnb3B0aW9uJyk7Cit2YXIg
X2VsbV9sYW5nJGh0bWwkSHRtbCR0ZXh0YXJlYSA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgn
dGV4dGFyZWEnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGtleWdlbiA9IF9lbG1fbGFuZyRo
dG1sJEh0bWwkbm9kZSgna2V5Z2VuJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRvdXRwdXQg
PSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ291dHB1dCcpOwordmFyIF9lbG1fbGFuZyRodG1s
JEh0bWwkcHJvZ3Jlc3MgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3Byb2dyZXNzJyk7Cit2
YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRtZXRlciA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgn
bWV0ZXInKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGRldGFpbHMgPSBfZWxtX2xhbmckaHRt
bCRIdG1sJG5vZGUoJ2RldGFpbHMnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHN1bW1hcnkg
PSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3N1bW1hcnknKTsKK3ZhciBfZWxtX2xhbmckaHRt
bCRIdG1sJG1lbnVpdGVtID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdtZW51aXRlbScpOwor
dmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkbWVudSA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgn
bWVudScpOworCit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BcHAkcHJvZ3JhbVdpdGhGbGFncyA9
IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJHByb2dyYW1XaXRoRmxhZ3M7Cit2YXIg
X2VsbV9sYW5nJGh0bWwkSHRtbF9BcHAkcHJvZ3JhbSA9IGZ1bmN0aW9uIChhcHApIHsKKyAgICBy
ZXR1cm4gX2VsbV9sYW5nJGh0bWwkSHRtbF9BcHAkcHJvZ3JhbVdpdGhGbGFncygKKyAgICAgICAg
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLnVwZGF0ZSgKKyAgICAgICAgICAgIGFwcCwKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbml0OiBmdW5jdGlvbiAoX3AwKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBhcHAuaW5pdDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9KSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXBwJGJlZ2lubmVyUHJv
Z3JhbSA9IGZ1bmN0aW9uIChfcDEpIHsKKyAgICB2YXIgX3AyID0gX3AxOworICAgIHJldHVybiBf
ZWxtX2xhbmckaHRtbCRIdG1sX0FwcCRwcm9ncmFtV2l0aEZsYWdzKAorICAgICAgICB7CisgICAg
ICAgICAgICBpbml0OiBmdW5jdGlvbiAoX3AzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEEy
KAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRQbGF0Zm9ybV9DbWRfb3BzWych
J10sCisgICAgICAgICAgICAgICAgICAgIF9wMi5tb2RlbCwKKyAgICAgICAgICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAg
ICAgICAgW10pKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB1cGRhdGU6IEYyKAorICAg
ICAgICAgICAgICAgIGZ1bmN0aW9uIChtc2csIG1vZGVsKSB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFBsYXRm
b3JtX0NtZF9vcHNbJyEnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEEyKF9wMi51cGRhdGUs
IG1zZywgbW9kZWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKSk7Cisg
ICAgICAgICAgICAgICAgfSksCisgICAgICAgICAgICB2aWV3OiBfcDIudmlldywKKyAgICAgICAg
ICAgIHN1YnNjcmlwdGlvbnM6IGZ1bmN0aW9uIChfcDQpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gX2VsbV9sYW5nJGNvcmUkUGxhdGZvcm1fU3ViJG5vbmU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0pOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0FwcCRtYXAgPSBfZWxtX2xhbmck
dmlydHVhbF9kb20kVmlydHVhbERvbSRtYXA7CisKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkYXR0cmlidXRlID0gX2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1YWxEb20kYXR0
cmlidXRlOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjb250ZXh0bWVudSA9
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkYXR0cmlidXRlLCAnY29udGV4dG1lbnUnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1f
bGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRkcmFnZ2FibGUgPSBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGF0dHJpYnV0ZSwg
J2RyYWdnYWJsZScsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1
dGVzJGxpc3QgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0
bWwkSHRtbF9BdHRyaWJ1dGVzJGF0dHJpYnV0ZSwgJ2xpc3QnLCB2YWx1ZSk7Cit9OwordmFyIF9l
bG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRtYXhsZW5ndGggPSBmdW5jdGlvbiAobikgewor
ICAgIHJldHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGF0
dHJpYnV0ZSwKKyAgICAgICAgJ21heGxlbmd0aCcsCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJh
c2ljcyR0b1N0cmluZyhuKSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRl
cyRkYXRldGltZSA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmck
aHRtbCRIdG1sX0F0dHJpYnV0ZXMkYXR0cmlidXRlLCAnZGF0ZXRpbWUnLCB2YWx1ZSk7Cit9Owor
dmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRwdWJkYXRlID0gZnVuY3Rpb24gKHZh
bHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRhdHRy
aWJ1dGUsICdwdWJkYXRlJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkY29sc3BhbiA9IGZ1bmN0aW9uIChuKSB7CisgICAgcmV0dXJuIEEyKAorICAgICAg
ICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYXR0cmlidXRlLAorICAgICAgICAnY29s
c3BhbicsCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyR0b1N0cmluZyhuKSk7Cit9Owor
dmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRyb3dzcGFuID0gZnVuY3Rpb24gKG4p
IHsKKyAgICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRl
cyRhdHRyaWJ1dGUsCisgICAgICAgICdyb3dzcGFuJywKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUk
QmFzaWNzJHRvU3RyaW5nKG4pKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1
dGVzJHByb3BlcnR5ID0gX2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1YWxEb20kcHJvcGVydHk7
Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5ID0gRjIo
CisgICAgZnVuY3Rpb24gKG5hbWUsIHN0cmluZykgeworICAgICAgICByZXR1cm4gQTIoCisgICAg
ICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkcHJvcGVydHksCisgICAgICAg
ICAgICBuYW1lLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9FbmNvZGUkc3RyaW5n
KHN0cmluZykpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRj
bGFzcyA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0
bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ2NsYXNzTmFtZScsIG5hbWUpOworfTsKK3Zh
ciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkaWQgPSBmdW5jdGlvbiAobmFtZSkgewor
ICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVy
dHksICdpZCcsIG5hbWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMk
dGl0bGUgPSBmdW5jdGlvbiAobmFtZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRI
dG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICd0aXRsZScsIG5hbWUpOworfTsKK3ZhciBf
ZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYWNjZXNza2V5ID0gZnVuY3Rpb24gKCRjaGFy
KSB7CisgICAgcmV0dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0
ZXMkc3RyaW5nUHJvcGVydHksCisgICAgICAgICdhY2Nlc3NLZXknLAorICAgICAgICBfZWxtX2xh
bmckY29yZSRTdHJpbmckZnJvbUNoYXIoJGNoYXIpKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwk
SHRtbF9BdHRyaWJ1dGVzJGRpciA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihf
ZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdkaXInLCB2YWx1
ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRkcm9wem9uZSA9IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJp
YnV0ZXMkc3RyaW5nUHJvcGVydHksICdkcm9wem9uZScsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9s
YW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGl0ZW1wcm9wID0gZnVuY3Rpb24gKHZhbHVlKSB7Cisg
ICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0
eSwgJ2l0ZW1wcm9wJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJp
YnV0ZXMkbGFuZyA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmck
aHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdsYW5nJywgdmFsdWUpOworfTsK
K3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkdGFiaW5kZXggPSBmdW5jdGlvbiAo
bikgeworICAgIHJldHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1
dGVzJHN0cmluZ1Byb3BlcnR5LAorICAgICAgICAndGFiSW5kZXgnLAorICAgICAgICBfZWxtX2xh
bmckY29yZSRCYXNpY3MkdG9TdHJpbmcobikpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1s
X0F0dHJpYnV0ZXMkY2hhcnNldCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihf
ZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdjaGFyc2V0Jywg
dmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkY29udGVudCA9
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdjb250ZW50JywgdmFsdWUpOworfTsKK3ZhciBfZWxt
X2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkaHR0cEVxdWl2ID0gZnVuY3Rpb24gKHZhbHVlKSB7
CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9w
ZXJ0eSwgJ2h0dHBFcXVpdicsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9B
dHRyaWJ1dGVzJGxhbmd1YWdlID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9l
bG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ2xhbmd1YWdlJywg
dmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3JjID0gZnVu
Y3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmli
dXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ3NyYycsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0
bWwkSHRtbF9BdHRyaWJ1dGVzJGhlaWdodCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVy
biBBMigKKyAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3Bl
cnR5LAorICAgICAgICAnaGVpZ2h0JywKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHRv
U3RyaW5nKHZhbHVlKSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyR3
aWR0aCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMigKKyAgICAgICAgX2VsbV9s
YW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LAorICAgICAgICAnd2lkdGgn
LAorICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3MkdG9TdHJpbmcodmFsdWUpKTsKK307Cit2
YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGFsdCA9IGZ1bmN0aW9uICh2YWx1ZSkg
eworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJv
cGVydHksICdhbHQnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmli
dXRlcyRwcmVsb2FkID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFu
ZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ3ByZWxvYWQnLCB2YWx1ZSk7
Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRwb3N0ZXIgPSBmdW5jdGlv
biAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVz
JHN0cmluZ1Byb3BlcnR5LCAncG9zdGVyJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRt
bCRIdG1sX0F0dHJpYnV0ZXMka2luZCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBB
MihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdraW5kJywg
dmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3JjbGFuZyA9
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdzcmNsYW5nJywgdmFsdWUpOworfTsKK3ZhciBfZWxt
X2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc2FuZGJveCA9IGZ1bmN0aW9uICh2YWx1ZSkgewor
ICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVy
dHksICdzYW5kYm94JywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJp
YnV0ZXMkc3JjZG9jID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFu
ZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ3NyY2RvYycsIHZhbHVlKTsK
K307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHR5cGUkID0gZnVuY3Rpb24g
KHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRz
dHJpbmdQcm9wZXJ0eSwgJ3R5cGUnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0
bWxfQXR0cmlidXRlcyR2YWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihf
ZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICd2YWx1ZScsIHZh
bHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGRlZmF1bHRWYWx1
ZSA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1s
X0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdkZWZhdWx0VmFsdWUnLCB2YWx1ZSk7Cit9Owor
dmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRwbGFjZWhvbGRlciA9IGZ1bmN0aW9u
ICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMk
c3RyaW5nUHJvcGVydHksICdwbGFjZWhvbGRlcicsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5n
JGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGFjY2VwdCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJl
dHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdh
Y2NlcHQnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRh
Y2NlcHRDaGFyc2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFu
ZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ2FjY2VwdENoYXJzZXQnLCB2
YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRhY3Rpb24gPSBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRy
aWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnYWN0aW9uJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xh
bmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYXV0b2NvbXBsZXRlID0gZnVuY3Rpb24gKGJvb2wpIHsK
KyAgICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRz
dHJpbmdQcm9wZXJ0eSwKKyAgICAgICAgJ2F1dG9jb21wbGV0ZScsCisgICAgICAgIGJvb2wgPyAn
b24nIDogJ29mZicpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYXV0
b3NhdmUgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwk
SHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnYXV0b3NhdmUnLCB2YWx1ZSk7Cit9Owor
dmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRlbmN0eXBlID0gZnVuY3Rpb24gKHZh
bHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJp
bmdQcm9wZXJ0eSwgJ2VuY3R5cGUnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0
bWxfQXR0cmlidXRlcyRmb3JtYWN0aW9uID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJu
IEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ2Zvcm1B
Y3Rpb24nLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRt
aW5sZW5ndGggPSBmdW5jdGlvbiAobikgeworICAgIHJldHVybiBBMigKKyAgICAgICAgX2VsbV9s
YW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LAorICAgICAgICAnbWluTGVu
Z3RoJywKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHRvU3RyaW5nKG4pKTsKK307Cit2
YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJG1ldGhvZCA9IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5n
UHJvcGVydHksICdtZXRob2QnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxf
QXR0cmlidXRlcyRuYW1lID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1f
bGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ25hbWUnLCB2YWx1ZSk7
Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRwYXR0ZXJuID0gZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRl
cyRzdHJpbmdQcm9wZXJ0eSwgJ3BhdHRlcm4nLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRo
dG1sJEh0bWxfQXR0cmlidXRlcyRzaXplID0gZnVuY3Rpb24gKG4pIHsKKyAgICByZXR1cm4gQTIo
CisgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwK
KyAgICAgICAgJ3NpemUnLAorICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3MkdG9TdHJpbmco
bikpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkZm9yID0gZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRl
cyRzdHJpbmdQcm9wZXJ0eSwgJ2h0bWxGb3InLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRo
dG1sJEh0bWxfQXR0cmlidXRlcyRmb3JtID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJu
IEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ2Zvcm0n
LCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRtYXggPSBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRy
aWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnbWF4JywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmck
aHRtbCRIdG1sX0F0dHJpYnV0ZXMkbWluID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJu
IEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ21pbics
IHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0ZXAgPSBm
dW5jdGlvbiAobikgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0
ZXMkc3RyaW5nUHJvcGVydHksICdzdGVwJywgbik7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0
bWxfQXR0cmlidXRlcyRjb2xzID0gZnVuY3Rpb24gKG4pIHsKKyAgICByZXR1cm4gQTIoCisgICAg
ICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwKKyAgICAg
ICAgJ2NvbHMnLAorICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3MkdG9TdHJpbmcobikpOwor
fTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkcm93cyA9IGZ1bmN0aW9uIChu
KSB7CisgICAgcmV0dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0
ZXMkc3RyaW5nUHJvcGVydHksCisgICAgICAgICdyb3dzJywKKyAgICAgICAgX2VsbV9sYW5nJGNv
cmUkQmFzaWNzJHRvU3RyaW5nKG4pKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRy
aWJ1dGVzJHdyYXAgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5n
JGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnd3JhcCcsIHZhbHVlKTsKK307
Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHVzZW1hcCA9IGZ1bmN0aW9uICh2
YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3Ry
aW5nUHJvcGVydHksICd1c2VNYXAnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0
bWxfQXR0cmlidXRlcyRzaGFwZSA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihf
ZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdzaGFwZScsIHZh
bHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGNvb3JkcyA9IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJp
YnV0ZXMkc3RyaW5nUHJvcGVydHksICdjb29yZHMnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFu
ZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjaGFsbGVuZ2UgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAg
ICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5
LCAnY2hhbGxlbmdlJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJp
YnV0ZXMka2V5dHlwZSA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xh
bmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdrZXl0eXBlJywgdmFsdWUp
OworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYWxpZ24gPSBmdW5jdGlv
biAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVz
JHN0cmluZ1Byb3BlcnR5LCAnYWxpZ24nLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1s
JEh0bWxfQXR0cmlidXRlcyRjaXRlID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEy
KF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ2NpdGUnLCB2
YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRocmVmID0gZnVu
Y3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmli
dXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ2hyZWYnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRo
dG1sJEh0bWxfQXR0cmlidXRlcyR0YXJnZXQgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1
cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAndGFy
Z2V0JywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkZG93
bmxvYWRBcyA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRt
bCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdkb3dubG9hZCcsIHZhbHVlKTsKK307
Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGhyZWZsYW5nID0gZnVuY3Rpb24g
KHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRz
dHJpbmdQcm9wZXJ0eSwgJ2hyZWZsYW5nJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRt
bCRIdG1sX0F0dHJpYnV0ZXMkbWVkaWEgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4g
QTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnbWVkaWEn
LCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRwaW5nID0g
ZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0
cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ3BpbmcnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFu
ZyRodG1sJEh0bWxfQXR0cmlidXRlcyRyZWwgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1
cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAncmVs
JywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RhcnQg
PSBmdW5jdGlvbiAobikgeworICAgIHJldHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5nJGh0bWwk
SHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LAorICAgICAgICAnc3RhcnQnLAorICAgICAg
ICBfZWxtX2xhbmckY29yZSRCYXNpY3MkdG9TdHJpbmcobikpOworfTsKK3ZhciBfZWxtX2xhbmck
aHRtbCRIdG1sX0F0dHJpYnV0ZXMkaGVhZGVycyA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJl
dHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdo
ZWFkZXJzJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMk
c2NvcGUgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwk
SHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnc2NvcGUnLCB2YWx1ZSk7Cit9OwordmFy
IF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRtYW5pZmVzdCA9IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5n
UHJvcGVydHksICdtYW5pZmVzdCcsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRt
bF9BdHRyaWJ1dGVzJGJvb2xQcm9wZXJ0eSA9IEYyKAorICAgIGZ1bmN0aW9uIChuYW1lLCBib29s
KSB7CisgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxf
QXR0cmlidXRlcyRwcm9wZXJ0eSwKKyAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSRKc29uX0VuY29kZSRib29sKGJvb2wpKTsKKyAgICB9KTsKK3ZhciBfZWxtX2xh
bmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkaGlkZGVuID0gZnVuY3Rpb24gKGJvb2wpIHsKKyAgICBy
ZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGJvb2xQcm9wZXJ0eSwgJ2hp
ZGRlbicsIGJvb2wpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkY29u
dGVudGVkaXRhYmxlID0gZnVuY3Rpb24gKGJvb2wpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5n
JGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGJvb2xQcm9wZXJ0eSwgJ2NvbnRlbnRFZGl0YWJsZScsIGJv
b2wpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3BlbGxjaGVjayA9
IGZ1bmN0aW9uIChib29sKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0
cmlidXRlcyRib29sUHJvcGVydHksICdzcGVsbGNoZWNrJywgYm9vbCk7Cit9OwordmFyIF9lbG1f
bGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRhc3luYyA9IGZ1bmN0aW9uIChib29sKSB7CisgICAg
cmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRib29sUHJvcGVydHksICdh
c3luYycsIGJvb2wpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkZGVm
ZXIgPSBmdW5jdGlvbiAoYm9vbCkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1s
X0F0dHJpYnV0ZXMkYm9vbFByb3BlcnR5LCAnZGVmZXInLCBib29sKTsKK307Cit2YXIgX2VsbV9s
YW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHNjb3BlZCA9IGZ1bmN0aW9uIChib29sKSB7CisgICAg
cmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRib29sUHJvcGVydHksICdz
Y29wZWQnLCBib29sKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGF1
dG9wbGF5ID0gZnVuY3Rpb24gKGJvb2wpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwk
SHRtbF9BdHRyaWJ1dGVzJGJvb2xQcm9wZXJ0eSwgJ2F1dG9wbGF5JywgYm9vbCk7Cit9OwordmFy
IF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjb250cm9scyA9IGZ1bmN0aW9uIChib29s
KSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRib29sUHJv
cGVydHksICdjb250cm9scycsIGJvb2wpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkbG9vcCA9IGZ1bmN0aW9uIChib29sKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFu
ZyRodG1sJEh0bWxfQXR0cmlidXRlcyRib29sUHJvcGVydHksICdsb29wJywgYm9vbCk7Cit9Owor
dmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRkZWZhdWx0ID0gZnVuY3Rpb24gKGJv
b2wpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGJvb2xQ
cm9wZXJ0eSwgJ2RlZmF1bHQnLCBib29sKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9B
dHRyaWJ1dGVzJHNlYW1sZXNzID0gZnVuY3Rpb24gKGJvb2wpIHsKKyAgICByZXR1cm4gQTIoX2Vs
bV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGJvb2xQcm9wZXJ0eSwgJ3NlYW1sZXNzJywgYm9v
bCk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjaGVja2VkID0gZnVu
Y3Rpb24gKGJvb2wpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1
dGVzJGJvb2xQcm9wZXJ0eSwgJ2NoZWNrZWQnLCBib29sKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0
bWwkSHRtbF9BdHRyaWJ1dGVzJHNlbGVjdGVkID0gZnVuY3Rpb24gKGJvb2wpIHsKKyAgICByZXR1
cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGJvb2xQcm9wZXJ0eSwgJ3NlbGVj
dGVkJywgYm9vbCk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRhdXRv
Zm9jdXMgPSBmdW5jdGlvbiAoYm9vbCkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRI
dG1sX0F0dHJpYnV0ZXMkYm9vbFByb3BlcnR5LCAnYXV0b2ZvY3VzJywgYm9vbCk7Cit9OwordmFy
IF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRkaXNhYmxlZCA9IGZ1bmN0aW9uIChib29s
KSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRib29sUHJv
cGVydHksICdkaXNhYmxlZCcsIGJvb2wpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkbXVsdGlwbGUgPSBmdW5jdGlvbiAoYm9vbCkgeworICAgIHJldHVybiBBMihfZWxt
X2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYm9vbFByb3BlcnR5LCAnbXVsdGlwbGUnLCBib29s
KTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJG5vdmFsaWRhdGUgPSBm
dW5jdGlvbiAoYm9vbCkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJp
YnV0ZXMkYm9vbFByb3BlcnR5LCAnbm9WYWxpZGF0ZScsIGJvb2wpOworfTsKK3ZhciBfZWxtX2xh
bmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkcmVhZG9ubHkgPSBmdW5jdGlvbiAoYm9vbCkgeworICAg
IHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYm9vbFByb3BlcnR5LCAn
cmVhZE9ubHknLCBib29sKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVz
JHJlcXVpcmVkID0gZnVuY3Rpb24gKGJvb2wpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0
bWwkSHRtbF9BdHRyaWJ1dGVzJGJvb2xQcm9wZXJ0eSwgJ3JlcXVpcmVkJywgYm9vbCk7Cit9Owor
dmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRpc21hcCA9IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYm9vbFBy
b3BlcnR5LCAnaXNNYXAnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0
cmlidXRlcyRkb3dubG9hZCA9IGZ1bmN0aW9uIChib29sKSB7CisgICAgcmV0dXJuIEEyKF9lbG1f
bGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRib29sUHJvcGVydHksICdkb3dubG9hZCcsIGJvb2wp
OworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkcmV2ZXJzZWQgPSBmdW5j
dGlvbiAoYm9vbCkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0
ZXMkYm9vbFByb3BlcnR5LCAncmV2ZXJzZWQnLCBib29sKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0
bWwkSHRtbF9BdHRyaWJ1dGVzJGNsYXNzTGlzdCA9IGZ1bmN0aW9uIChsaXN0KSB7CisgICAgcmV0
dXJuIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjbGFzcygKKyAgICAgICAgQTIoCisg
ICAgICAgICAgICBfZWxtX2xhbmckY29yZSRTdHJpbmckam9pbiwKKyAgICAgICAgICAgICcgJywK
KyAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkbWFw
LAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRmc3QsCisgICAgICAgICAg
ICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkTGlzdCRmaWx0ZXIsIF9lbG1fbGFuZyRjb3JlJEJhc2lj
cyRzbmQsIGxpc3QpKSkpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMk
c3R5bGUgPSBfZWxtX2xhbmckdmlydHVhbF9kb20kVmlydHVhbERvbSRzdHlsZTsKKwordmFyIF9l
bG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJGtleUNvZGUgPSBBMihfZWxtX2xhbmckY29yZSRKc29u
X0RlY29kZV9vcHNbJzo9J10sICdrZXlDb2RlJywgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUk
aW50KTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyR0YXJnZXRDaGVja2VkID0gQTIo
CisgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkYXQsCisgICAgX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICBbJ3RhcmdldCcsICdjaGVja2VkJ10pLAor
ICAgIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJGJvb2wpOwordmFyIF9lbG1fbGFuZyRodG1s
JEh0bWxfRXZlbnRzJHRhcmdldFZhbHVlID0gQTIoCisgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9E
ZWNvZGUkYXQsCisgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAg
ICAgICBbJ3RhcmdldCcsICd2YWx1ZSddKSwKKyAgICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29k
ZSRzdHJpbmcpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJGRlZmF1bHRPcHRpb25z
ID0gX2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1YWxEb20kZGVmYXVsdE9wdGlvbnM7Cit2YXIg
X2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb25XaXRoT3B0aW9ucyA9IF9lbG1fbGFuZyR2aXJ0
dWFsX2RvbSRWaXJ0dWFsRG9tJG9uV2l0aE9wdGlvbnM7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRt
bF9FdmVudHMkb24gPSBfZWxtX2xhbmckdmlydHVhbF9kb20kVmlydHVhbERvbSRvbjsKK3ZhciBf
ZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbkZvY3VzID0gZnVuY3Rpb24gKG1zZykgeworICAg
IHJldHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb24sCisgICAg
ICAgICdmb2N1cycsCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJHN1Y2NlZWQo
bXNnKSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uQmx1ciA9IGZ1bmN0
aW9uIChtc2cpIHsKKyAgICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxf
RXZlbnRzJG9uLAorICAgICAgICAnYmx1cicsCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJEpzb25f
RGVjb2RlJHN1Y2NlZWQobXNnKSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRz
JG9uU3VibWl0T3B0aW9ucyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy51cGRhdGUoCisg
ICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkZGVmYXVsdE9wdGlvbnMsCisgICAge3ByZXZl
bnREZWZhdWx0OiB0cnVlfSk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb25TdWJt
aXQgPSBmdW5jdGlvbiAobXNnKSB7CisgICAgcmV0dXJuIEEzKAorICAgICAgICBfZWxtX2xhbmck
aHRtbCRIdG1sX0V2ZW50cyRvbldpdGhPcHRpb25zLAorICAgICAgICAnc3VibWl0JywKKyAgICAg
ICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb25TdWJtaXRPcHRpb25zLAorICAgICAgICBf
ZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRzdWNjZWVkKG1zZykpOworfTsKK3ZhciBfZWxtX2xh
bmckaHRtbCRIdG1sX0V2ZW50cyRvbkNoZWNrID0gZnVuY3Rpb24gKHRhZ2dlcikgeworICAgIHJl
dHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb24sCisgICAgICAg
ICdjaGFuZ2UnLAorICAgICAgICBBMihfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRtYXAsIHRh
Z2dlciwgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkdGFyZ2V0Q2hlY2tlZCkpOworfTsKK3Zh
ciBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbklucHV0ID0gZnVuY3Rpb24gKHRhZ2dlcikg
eworICAgIHJldHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb24s
CisgICAgICAgICdpbnB1dCcsCisgICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2Rl
JG1hcCwgdGFnZ2VyLCBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyR0YXJnZXRWYWx1ZSkpOwor
fTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbk1vdXNlT3V0ID0gZnVuY3Rpb24g
KG1zZykgeworICAgIHJldHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVu
dHMkb24sCisgICAgICAgICdtb3VzZW91dCcsCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJEpzb25f
RGVjb2RlJHN1Y2NlZWQobXNnKSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRz
JG9uTW91c2VPdmVyID0gZnVuY3Rpb24gKG1zZykgeworICAgIHJldHVybiBBMigKKyAgICAgICAg
X2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb24sCisgICAgICAgICdtb3VzZW92ZXInLAorICAg
ICAgICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRzdWNjZWVkKG1zZykpOworfTsKK3ZhciBf
ZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbk1vdXNlTGVhdmUgPSBmdW5jdGlvbiAobXNnKSB7
CisgICAgcmV0dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbiwK
KyAgICAgICAgJ21vdXNlbGVhdmUnLAorICAgICAgICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29k
ZSRzdWNjZWVkKG1zZykpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbk1v
dXNlRW50ZXIgPSBmdW5jdGlvbiAobXNnKSB7CisgICAgcmV0dXJuIEEyKAorICAgICAgICBfZWxt
X2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbiwKKyAgICAgICAgJ21vdXNlZW50ZXInLAorICAgICAg
ICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRzdWNjZWVkKG1zZykpOworfTsKK3ZhciBfZWxt
X2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbk1vdXNlVXAgPSBmdW5jdGlvbiAobXNnKSB7CisgICAg
cmV0dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbiwKKyAgICAg
ICAgJ21vdXNldXAnLAorICAgICAgICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRzdWNjZWVk
KG1zZykpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbk1vdXNlRG93biA9
IGZ1bmN0aW9uIChtc2cpIHsKKyAgICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1fbGFuZyRodG1s
JEh0bWxfRXZlbnRzJG9uLAorICAgICAgICAnbW91c2Vkb3duJywKKyAgICAgICAgX2VsbV9sYW5n
JGNvcmUkSnNvbl9EZWNvZGUkc3VjY2VlZChtc2cpKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwk
SHRtbF9FdmVudHMkb25Eb3VibGVDbGljayA9IGZ1bmN0aW9uIChtc2cpIHsKKyAgICByZXR1cm4g
QTIoCisgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uLAorICAgICAgICAnZGJs
Y2xpY2snLAorICAgICAgICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRzdWNjZWVkKG1zZykp
OworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbkNsaWNrID0gZnVuY3Rpb24g
KG1zZykgeworICAgIHJldHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVu
dHMkb24sCisgICAgICAgICdjbGljaycsCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVj
b2RlJHN1Y2NlZWQobXNnKSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJE9w
dGlvbnMgPSBGMigKKyAgICBmdW5jdGlvbiAoYSwgYikgeworICAgICAgICByZXR1cm4ge3N0b3BQ
cm9wYWdhdGlvbjogYSwgcHJldmVudERlZmF1bHQ6IGJ9OworICAgIH0pOworCit2YXIgX2VsbV9s
YW5nJGh0bWwkSHRtbF9MYXp5JGxhenkzID0gX2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1YWxE
b20kbGF6eTM7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9MYXp5JGxhenkyID0gX2VsbV9sYW5n
JHZpcnR1YWxfZG9tJFZpcnR1YWxEb20kbGF6eTI7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9M
YXp5JGxhenkgPSBfZWxtX2xhbmckdmlydHVhbF9kb20kVmlydHVhbERvbSRsYXp5OworCit2YXIg
X2VsbV9sYW5nJG5hdmlnYXRpb24kTmF0aXZlX05hdmlnYXRpb24gPSBmdW5jdGlvbigpIHsKKwor
ZnVuY3Rpb24gZ28obikKK3sKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVk
dWxlci5uYXRpdmVCaW5kaW5nKGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgaWYg
KG4gIT09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGhpc3RvcnkuZ28obik7CisgICAgICAg
IH0KKyAgICAgICAgY2FsbGJhY2soX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5zdWNj
ZWVkKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5UdXBsZTApKTsKKyAgICB9KTsKK30KKwor
ZnVuY3Rpb24gcHVzaFN0YXRlKHVybCkKK3sKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX1NjaGVkdWxlci5uYXRpdmVCaW5kaW5nKGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHsKKyAg
ICAgICAgaGlzdG9yeS5wdXNoU3RhdGUoe30sICcnLCB1cmwpOworICAgICAgICBjYWxsYmFjayhf
ZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1bGVyLnN1Y2NlZWQoZ2V0TG9jYXRpb24oKSkpOwor
ICAgIH0pOworfQorCitmdW5jdGlvbiByZXBsYWNlU3RhdGUodXJsKQoreworICAgIHJldHVybiBf
ZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1bGVyLm5hdGl2ZUJpbmRpbmcoZnVuY3Rpb24oY2Fs
bGJhY2spCisgICAgeworICAgICAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZSh7fSwgJycsIHVybCk7
CisgICAgICAgIGNhbGxiYWNrKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIuc3VjY2Vl
ZChnZXRMb2NhdGlvbigpKSk7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIGdldExvY2F0aW9uKCkK
K3sKKyAgICB2YXIgbG9jYXRpb24gPSBkb2N1bWVudC5sb2NhdGlvbjsKKworICAgIHJldHVybiB7
CisgICAgICAgIGhyZWY6IGxvY2F0aW9uLmhyZWYsCisgICAgICAgIGhvc3Q6IGxvY2F0aW9uLmhv
c3QsCisgICAgICAgIGhvc3RuYW1lOiBsb2NhdGlvbi5ob3N0bmFtZSwKKyAgICAgICAgcHJvdG9j
b2w6IGxvY2F0aW9uLnByb3RvY29sLAorICAgICAgICBvcmlnaW46IGxvY2F0aW9uLm9yaWdpbiwK
KyAgICAgICAgcG9ydF86IGxvY2F0aW9uLnBvcnQsCisgICAgICAgIHBhdGhuYW1lOiBsb2NhdGlv
bi5wYXRobmFtZSwKKyAgICAgICAgc2VhcmNoOiBsb2NhdGlvbi5zZWFyY2gsCisgICAgICAgIGhh
c2g6IGxvY2F0aW9uLmhhc2gsCisgICAgICAgIHVzZXJuYW1lOiBsb2NhdGlvbi51c2VybmFtZSwK
KyAgICAgICAgcGFzc3dvcmQ6IGxvY2F0aW9uLnBhc3N3b3JkCisgICAgfTsKK30KKworCityZXR1
cm4geworICAgIGdvOiBnbywKKyAgICBwdXNoU3RhdGU6IHB1c2hTdGF0ZSwKKyAgICByZXBsYWNl
U3RhdGU6IHJlcGxhY2VTdGF0ZSwKKyAgICBnZXRMb2NhdGlvbjogZ2V0TG9jYXRpb24KK307CisK
K30oKTsKKwordmFyIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kcmVwbGFjZVN0YXRl
ID0gX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF0aXZlX05hdmlnYXRpb24ucmVwbGFjZVN0YXRlOwor
dmFyIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kcHVzaFN0YXRlID0gX2VsbV9sYW5n
JG5hdmlnYXRpb24kTmF0aXZlX05hdmlnYXRpb24ucHVzaFN0YXRlOwordmFyIF9lbG1fbGFuZyRu
YXZpZ2F0aW9uJE5hdmlnYXRpb24kZ28gPSBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXRpdmVfTmF2
aWdhdGlvbi5nbzsKK3ZhciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJHNwYXduUG9w
U3RhdGUgPSBmdW5jdGlvbiAocm91dGVyKSB7CisgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFBy
b2Nlc3Mkc3Bhd24oCisgICAgICAgIEEzKAorICAgICAgICAgICAgX2VsbV9sYW5nJGRvbSREb21f
TG93TGV2ZWwkb25XaW5kb3csCisgICAgICAgICAgICAncG9wc3RhdGUnLAorICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkdmFsdWUsCisgICAgICAgICAgICBmdW5jdGlvbiAo
X3AwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSRQbGF0Zm9ybSRzZW5kVG9TZWxmLAorICAgICAgICAgICAgICAgICAgICBy
b3V0ZXIsCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdGl2ZV9O
YXZpZ2F0aW9uLmdldExvY2F0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAge2N0b3I6ICdf
VHVwbGUwJ30pKTsKKyAgICAgICAgICAgIH0pKTsKK307Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRp
b24kTmF2aWdhdGlvbl9vcHMgPSBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uX29wcyB8
fCB7fTsKK19lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb25fb3BzWycmPiddID0gRjIoCisg
ICAgZnVuY3Rpb24gKHRhc2sxLCB0YXNrMikgeworICAgICAgICByZXR1cm4gQTIoCisgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSRUYXNrJGFuZFRoZW4sCisgICAgICAgICAgICB0YXNrMSwKKyAg
ICAgICAgICAgIGZ1bmN0aW9uIChfcDEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGFzazI7
CisgICAgICAgICAgICB9KTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZp
Z2F0aW9uJG5vdGlmeSA9IEYzKAorICAgIGZ1bmN0aW9uIChyb3V0ZXIsIHN1YnMsIGxvY2F0aW9u
KSB7CisgICAgICAgIHZhciBzZW5kID0gZnVuY3Rpb24gKF9wMikgeworICAgICAgICAgICAgdmFy
IF9wMyA9IF9wMjsKKyAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSRQbGF0Zm9ybSRzZW5kVG9BcHAsCisgICAgICAgICAgICAgICAgcm91dGVyLAor
ICAgICAgICAgICAgICAgIF9wMy5fMChsb2NhdGlvbikpOworICAgICAgICB9OworICAgICAgICBy
ZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uX29w
c1snJj4nXSwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRhc2skc2VxdWVuY2UoCisgICAg
ICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkTGlzdCRtYXAsIHNlbmQsIHN1YnMpKSwKKyAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRhc2skc3VjY2VlZCgKKyAgICAgICAgICAgICAgICB7
Y3RvcjogJ19UdXBsZTAnfSkpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5h
dmlnYXRpb24kb25TZWxmTXNnID0gRjMoCisgICAgZnVuY3Rpb24gKHJvdXRlciwgbG9jYXRpb24s
IHN0YXRlKSB7CisgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRuYXZp
Z2F0aW9uJE5hdmlnYXRpb25fb3BzWycmPiddLAorICAgICAgICAgICAgQTMoX2VsbV9sYW5nJG5h
dmlnYXRpb24kTmF2aWdhdGlvbiRub3RpZnksIHJvdXRlciwgc3RhdGUuc3VicywgbG9jYXRpb24p
LAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRzdWNjZWVkKHN0YXRlKSk7CisgICAg
fSk7Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRjbWRIZWxwID0gRjMoCisg
ICAgZnVuY3Rpb24gKHJvdXRlciwgc3VicywgY21kKSB7CisgICAgICAgIHZhciBfcDQgPSBjbWQ7
CisgICAgICAgIHN3aXRjaCAoX3A0LmN0b3IpIHsKKyAgICAgICAgICAgIGNhc2UgJ0p1bXAnOgor
ICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJGdv
KF9wNC5fMCk7CisgICAgICAgICAgICBjYXNlICdOZXcnOgorICAgICAgICAgICAgICAgIHJldHVy
biBBMigKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAor
ICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJHB1c2hT
dGF0ZShfcDQuXzApLAorICAgICAgICAgICAgICAgICAgICBBMihfZWxtX2xhbmckbmF2aWdhdGlv
biROYXZpZ2F0aW9uJG5vdGlmeSwgcm91dGVyLCBzdWJzKSk7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9s
YW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckbmF2
aWdhdGlvbiROYXZpZ2F0aW9uJHJlcGxhY2VTdGF0ZShfcDQuXzApLAorICAgICAgICAgICAgICAg
ICAgICBBMihfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJG5vdGlmeSwgcm91dGVyLCBz
dWJzKSk7CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZp
Z2F0aW9uJHVwZGF0ZUhlbHAgPSBGMigKKyAgICBmdW5jdGlvbiAoZnVuYywgX3A1KSB7CisgICAg
ICAgIHZhciBfcDYgPSBfcDU7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBjdG9yOiAn
X1R1cGxlMicsCisgICAgICAgICAgICBfMDogX3A2Ll8wLAorICAgICAgICAgICAgXzE6IEEyKF9l
bG1fbGFuZyRjb3JlJFBsYXRmb3JtX0NtZCRtYXAsIGZ1bmMsIF9wNi5fMSkKKyAgICAgICAgfTsK
KyAgICB9KTsKK3ZhciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJHN1YnNjcmlwdGlv
biA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9QbGF0Zm9ybS5sZWFmKCdOYXZpZ2F0aW9uJyk7Cit2
YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRjb21tYW5kID0gX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX1BsYXRmb3JtLmxlYWYoJ05hdmlnYXRpb24nKTsKK3ZhciBfZWxtX2xhbmckbmF2
aWdhdGlvbiROYXZpZ2F0aW9uJExvY2F0aW9uID0gZnVuY3Rpb24gKGEpIHsKKyAgICByZXR1cm4g
ZnVuY3Rpb24gKGIpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjKSB7CisgICAgICAgICAg
ICByZXR1cm4gZnVuY3Rpb24gKGQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24g
KGUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGcpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGopIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGspIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtocmVmOiBhLCBob3N0OiBiLCBob3N0
bmFtZTogYywgcHJvdG9jb2w6IGQsIG9yaWdpbjogZSwgcG9ydF86IGYsIHBhdGhuYW1lOiBnLCBz
ZWFyY2g6IGgsIGhhc2g6IGksIHVzZXJuYW1lOiBqLCBwYXNzd29yZDoga307CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH07
CisgICAgICAgIH07CisgICAgfTsKK307Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdh
dGlvbiRTdGF0ZSA9IEYyKAorICAgIGZ1bmN0aW9uIChhLCBiKSB7CisgICAgICAgIHJldHVybiB7
c3ViczogYSwgcHJvY2VzczogYn07CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24k
TmF2aWdhdGlvbiRpbml0ID0gX2VsbV9sYW5nJGNvcmUkVGFzayRzdWNjZWVkKAorICAgIEEyKAor
ICAgICAgICBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJFN0YXRlLAorICAgICAgICBf
ZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICBbXSksCisg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmcpKTsKK3ZhciBfZWxtX2xhbmckbmF2
aWdhdGlvbiROYXZpZ2F0aW9uJG9uRWZmZWN0cyA9IEY0KAorICAgIGZ1bmN0aW9uIChyb3V0ZXIs
IGNtZHMsIHN1YnMsIF9wNykgeworICAgICAgICB2YXIgX3A4ID0gX3A3OworICAgICAgICB2YXIg
X3AxMCA9IF9wOC5wcm9jZXNzOworICAgICAgICB2YXIgc3RlcFN0YXRlID0gZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgdmFyIF9wOSA9IHtjdG9yOiAnX1R1cGxlMicsIF8wOiBzdWJzLCBfMTog
X3AxMH07CisgICAgICAgICAgICBfdjRfMjoKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAg
ICAgICBpZiAoX3A5Ll8wLmN0b3IgPT09ICdbXScpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KF9wOS5fMS5jdG9yID09PSAnSnVzdCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckbmF2aWdhdGlvbiRO
YXZpZ2F0aW9uX29wc1snJj4nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xh
bmckY29yZSRQcm9jZXNzJGtpbGwoX3A5Ll8xLl8wKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSRUYXNrJHN1Y2NlZWQoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEEyKF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kU3RhdGUsIHN1YnMs
IF9lbG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmcpKSk7CisgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjRfMjsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChfcDkuXzEuY3RvciA9PT0gJ05vdGhpbmcnKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUk
VGFzayRhbmRUaGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRuYXZp
Z2F0aW9uJE5hdmlnYXRpb24kc3Bhd25Qb3BTdGF0ZShyb3V0ZXIpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZ1bmN0aW9uIChwaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFRhc2skc3VjY2VlZCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kU3RhdGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0KHBpZCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92NF8yOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSB3aGlsZShmYWxzZSk7
CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkVGFzayRzdWNjZWVkKAorICAgICAg
ICAgICAgICAgIEEyKF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kU3RhdGUsIHN1YnMs
IF9wMTApKTsKKyAgICAgICAgfSgpOworICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBf
ZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uX29wc1snJj4nXSwKKyAgICAgICAgICAgIF9l
bG1fbGFuZyRjb3JlJFRhc2skc2VxdWVuY2UoCisgICAgICAgICAgICAgICAgQTIoCisgICAgICAg
ICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkbWFwLAorICAgICAgICAgICAgICAgICAg
ICBBMihfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJGNtZEhlbHAsIHJvdXRlciwgc3Vi
cyksCisgICAgICAgICAgICAgICAgICAgIGNtZHMpKSwKKyAgICAgICAgICAgIHN0ZXBTdGF0ZSk7
CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRVc2VyTXNnID0g
ZnVuY3Rpb24gKGEpIHsKKyAgICByZXR1cm4ge2N0b3I6ICdVc2VyTXNnJywgXzA6IGF9OworfTsK
K3ZhciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJENoYW5nZSA9IGZ1bmN0aW9uIChh
KSB7CisgICAgcmV0dXJuIHtjdG9yOiAnQ2hhbmdlJywgXzA6IGF9OworfTsKK3ZhciBfZWxtX2xh
bmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJFBhcnNlciA9IGZ1bmN0aW9uIChhKSB7CisgICAgcmV0
dXJuIHtjdG9yOiAnUGFyc2VyJywgXzA6IGF9OworfTsKK3ZhciBfZWxtX2xhbmckbmF2aWdhdGlv
biROYXZpZ2F0aW9uJG1ha2VQYXJzZXIgPSBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9u
JFBhcnNlcjsKK3ZhciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJE1vZGlmeSA9IGZ1
bmN0aW9uIChhKSB7CisgICAgcmV0dXJuIHtjdG9yOiAnTW9kaWZ5JywgXzA6IGF9OworfTsKK3Zh
ciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJG1vZGlmeVVybCA9IGZ1bmN0aW9uICh1
cmwpIHsKKyAgICByZXR1cm4gX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRjb21tYW5k
KAorICAgICAgICBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJE1vZGlmeSh1cmwpKTsK
K307Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiROZXcgPSBmdW5jdGlvbiAo
YSkgeworICAgIHJldHVybiB7Y3RvcjogJ05ldycsIF8wOiBhfTsKK307Cit2YXIgX2VsbV9sYW5n
JG5hdmlnYXRpb24kTmF2aWdhdGlvbiRuZXdVcmwgPSBmdW5jdGlvbiAodXJsKSB7CisgICAgcmV0
dXJuIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kY29tbWFuZCgKKyAgICAgICAgX2Vs
bV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiROZXcodXJsKSk7Cit9OwordmFyIF9lbG1fbGFu
ZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kSnVtcCA9IGZ1bmN0aW9uIChhKSB7CisgICAgcmV0dXJu
IHtjdG9yOiAnSnVtcCcsIF8wOiBhfTsKK307Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2
aWdhdGlvbiRiYWNrID0gZnVuY3Rpb24gKG4pIHsKKyAgICByZXR1cm4gX2VsbV9sYW5nJG5hdmln
YXRpb24kTmF2aWdhdGlvbiRjb21tYW5kKAorICAgICAgICBfZWxtX2xhbmckbmF2aWdhdGlvbiRO
YXZpZ2F0aW9uJEp1bXAoMCAtIG4pKTsKK307Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2
aWdhdGlvbiRmb3J3YXJkID0gZnVuY3Rpb24gKG4pIHsKKyAgICByZXR1cm4gX2VsbV9sYW5nJG5h
dmlnYXRpb24kTmF2aWdhdGlvbiRjb21tYW5kKAorICAgICAgICBfZWxtX2xhbmckbmF2aWdhdGlv
biROYXZpZ2F0aW9uJEp1bXAobikpOworfTsKK3ZhciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZp
Z2F0aW9uJGNtZE1hcCA9IEYyKAorICAgIGZ1bmN0aW9uIChfcDExLCBteUNtZCkgeworICAgICAg
ICB2YXIgX3AxMiA9IG15Q21kOworICAgICAgICBzd2l0Y2ggKF9wMTIuY3RvcikgeworICAgICAg
ICAgICAgY2FzZSAnSnVtcCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRuYXZp
Z2F0aW9uJE5hdmlnYXRpb24kSnVtcChfcDEyLl8wKTsKKyAgICAgICAgICAgIGNhc2UgJ05ldyc6
CisgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24k
TmV3KF9wMTIuXzApOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRNb2RpZnkoX3AxMi5fMCk7CisgICAg
ICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJE1vbml0
b3IgPSBmdW5jdGlvbiAoYSkgeworICAgIHJldHVybiB7Y3RvcjogJ01vbml0b3InLCBfMDogYX07
Cit9OwordmFyIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kcHJvZ3JhbVdpdGhGbGFn
cyA9IEYyKAorICAgIGZ1bmN0aW9uIChfcDEzLCBzdHVmZikgeworICAgICAgICB2YXIgX3AxNCA9
IF9wMTM7CisgICAgICAgIHZhciBfcDE2ID0gX3AxNC5fMDsKKyAgICAgICAgdmFyIGxvY2F0aW9u
ID0gX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF0aXZlX05hdmlnYXRpb24uZ2V0TG9jYXRpb24oCisg
ICAgICAgICAgICB7Y3RvcjogJ19UdXBsZTAnfSk7CisgICAgICAgIHZhciBpbml0ID0gZnVuY3Rp
b24gKGZsYWdzKSB7CisgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiR1cGRhdGVIZWxwLAorICAgICAgICAgICAgICAg
IF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kVXNlck1zZywKKyAgICAgICAgICAgICAg
ICBBMigKKyAgICAgICAgICAgICAgICAgICAgc3R1ZmYuaW5pdCwKKyAgICAgICAgICAgICAgICAg
ICAgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgIF9wMTYobG9jYXRpb24pKSk7CisgICAgICAg
IH07CisgICAgICAgIHZhciB2aWV3ID0gZnVuY3Rpb24gKG1vZGVsKSB7CisgICAgICAgICAgICBy
ZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BcHAkbWFwLAor
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kVXNlck1zZywK
KyAgICAgICAgICAgICAgICBzdHVmZi52aWV3KG1vZGVsKSk7CisgICAgICAgIH07CisgICAgICAg
IHZhciBzdWJzID0gZnVuY3Rpb24gKG1vZGVsKSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9s
YW5nJGNvcmUkUGxhdGZvcm1fU3ViJGJhdGNoKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgWworICAgICAg
ICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRzdWJzY3Jp
cHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZp
Z2F0aW9uJE1vbml0b3IoX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRDaGFuZ2UpKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkUGxhdGZvcm1fU3ViJG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9l
bG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kVXNlck1zZywKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0dWZmLnN1YnNjcmlwdGlvbnMobW9kZWwpKQorICAgICAgICAgICAgICAgICAgICBd
KSk7CisgICAgICAgIH07CisgICAgICAgIHZhciB1cGRhdGUgPSBGMigKKyAgICAgICAgICAgIGZ1
bmN0aW9uIChtc2csIG1vZGVsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAg
ICAgICAgICAgICAgICBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJHVwZGF0ZUhlbHAs
CisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kVXNl
ck1zZywKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIF9wMTUgPSBtc2c7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3Ax
NS5jdG9yID09PSAnQ2hhbmdlJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1ZmYudXJsVXBkYXRlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcDE2KF9wMTUuXzApLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtb2RlbCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMihzdHVmZi51cGRh
dGUsIF9wMTUuXzAsIG1vZGVsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfSgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gX2VsbV9s
YW5nJGh0bWwkSHRtbF9BcHAkcHJvZ3JhbVdpdGhGbGFncygKKyAgICAgICAgICAgIHtpbml0OiBp
bml0LCB2aWV3OiB2aWV3LCB1cGRhdGU6IHVwZGF0ZSwgc3Vic2NyaXB0aW9uczogc3Vic30pOwor
ICAgIH0pOwordmFyIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kcHJvZ3JhbSA9IEYy
KAorICAgIGZ1bmN0aW9uIChwYXJzZXIsIHN0dWZmKSB7CisgICAgICAgIHJldHVybiBBMigKKyAg
ICAgICAgICAgIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kcHJvZ3JhbVdpdGhGbGFn
cywKKyAgICAgICAgICAgIHBhcnNlciwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9VdGlscy51cGRhdGUoCisgICAgICAgICAgICAgICAgc3R1ZmYsCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBpbml0OiBmdW5jdGlvbiAoX3AxNykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0dWZmLmluaXQ7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9KSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24k
TmF2aWdhdGlvbiRzdWJNYXAgPSBGMigKKyAgICBmdW5jdGlvbiAoZnVuYywgX3AxOCkgeworICAg
ICAgICB2YXIgX3AxOSA9IF9wMTg7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckbmF2aWdhdGlv
biROYXZpZ2F0aW9uJE1vbml0b3IoCisgICAgICAgICAgICBmdW5jdGlvbiAoX3AyMCkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBmdW5jKAorICAgICAgICAgICAgICAgICAgICBfcDE5Ll8wKF9w
MjApKTsKKyAgICAgICAgICAgIH0pOworICAgIH0pOworX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1Bs
YXRmb3JtLmVmZmVjdE1hbmFnZXJzWydOYXZpZ2F0aW9uJ10gPSB7cGtnOiAnZWxtLWxhbmcvbmF2
aWdhdGlvbicsIGluaXQ6IF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kaW5pdCwgb25F
ZmZlY3RzOiBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJG9uRWZmZWN0cywgb25TZWxm
TXNnOiBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJG9uU2VsZk1zZywgdGFnOiAnZngn
LCBjbWRNYXA6IF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kY21kTWFwLCBzdWJNYXA6
IF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kc3ViTWFwfTsKKwordmFyIF9ldmFuY3ok
ZWxtX3RvZG9tdmMkVG9kb19UYXNrJG9uRmluaXNoID0gRjIoCisgICAgZnVuY3Rpb24gKGVudGVy
TWVzc2FnZSwgZXNjYXBlTWVzc2FnZSkgeworICAgICAgICB2YXIgc2VsZWN0ID0gZnVuY3Rpb24g
KGtleSkgeworICAgICAgICAgICAgdmFyIF9wMCA9IGtleTsKKyAgICAgICAgICAgIGlmIChfcDAg
PT09IDEzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVudGVyTWVzc2FnZTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVzY2FwZU1lc3NhZ2U7CisgICAg
ICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgIF9l
bG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uLAorICAgICAgICAgICAgJ2tleWRvd24nLAorICAg
ICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkbWFwLCBzZWxlY3QsIF9lbG1f
bGFuZyRodG1sJEh0bWxfRXZlbnRzJGtleUNvZGUpKTsKKyAgICB9KTsKK3ZhciBfZXZhbmN6JGVs
bV90b2RvbXZjJFRvZG9fVGFzayR1cGRhdGUgPSBGMigKKyAgICBmdW5jdGlvbiAobXNnLCBtb2Rl
bCkgeworICAgICAgICB2YXIgX3AxID0gbXNnOworICAgICAgICBzd2l0Y2ggKF9wMS5jdG9yKSB7
CisgICAgICAgICAgICBjYXNlICdGb2N1cyc6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1f
bGFuZyRjb3JlJE1heWJlJEp1c3QoCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9VdGlscy51cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0
czogX2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVzdChtb2RlbC5kZXNjcmlwdGlvbikKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgIGNhc2UgJ0VkaXQnOgorICAgICAgICAg
ICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0KAorICAgICAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMudXBkYXRlKAorICAgICAgICAgICAgICAg
ICAgICAgICAgbW9kZWwsCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWRpdHM6IF9lbG1fbGFuZyRjb3JlJE1heWJlJEp1c3QoX3AxLl8wKQor
ICAgICAgICAgICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgY2FzZSAnQ2FuY2VsJzoK
KyAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVzdCgKKyAgICAg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLnVwZGF0ZSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1vZGVsLAorICAgICAgICAgICAgICAgICAgICAgICAge2VkaXRz
OiBfZWxtX2xhbmckY29yZSRNYXliZSROb3RoaW5nfSkpOworICAgICAgICAgICAgY2FzZSAnQ29t
bWl0JzoKKyAgICAgICAgICAgICAgICB2YXIgX3AyID0gbW9kZWwuZWRpdHM7CisgICAgICAgICAg
ICAgICAgaWYgKF9wMi5jdG9yID09PSAnTm90aGluZycpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1heWJlJEp1c3QobW9kZWwpOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdGlvbiA9IF9lbG1fbGFu
ZyRjb3JlJFN0cmluZyR0cmltKF9wMi5fMCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBf
ZWxtX2xhbmckY29yZSRTdHJpbmckaXNFbXB0eShkZXNjcmlwdGlvbikgPyBfZWxtX2xhbmckY29y
ZSRNYXliZSROb3RoaW5nIDogX2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVzdCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy51cGRhdGUoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbW9kZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
e2VkaXRzOiBfZWxtX2xhbmckY29yZSRNYXliZSROb3RoaW5nLCBkZXNjcmlwdGlvbjogZGVzY3Jp
cHRpb259KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSAnQ29tcGxldGVk
JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVzdCgKKyAg
ICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLnVwZGF0ZSgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1vZGVsLAorICAgICAgICAgICAgICAgICAgICAgICAge2Nv
bXBsZXRlZDogX3AxLl8wfSkpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90aGluZzsKKyAgICAgICAgfQorICAgIH0p
OwordmFyIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kb19UYXNrJGluaXQgPSBGMigKKyAgICBmdW5j
dGlvbiAoZGVzYywgaWQpIHsKKyAgICAgICAgcmV0dXJuIHtkZXNjcmlwdGlvbjogZGVzYywgY29t
cGxldGVkOiBmYWxzZSwgZWRpdHM6IF9lbG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmcsIGlkOiBp
ZH07CisgICAgfSk7Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvX1Rhc2skTW9kZWwgPSBG
NCgKKyAgICBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeworICAgICAgICByZXR1cm4ge2Rlc2NyaXB0
aW9uOiBhLCBjb21wbGV0ZWQ6IGIsIGVkaXRzOiBjLCBpZDogZH07CisgICAgfSk7Cit2YXIgX2V2
YW5jeiRlbG1fdG9kb212YyRUb2RvX1Rhc2skRGVsZXRlID0ge2N0b3I6ICdEZWxldGUnfTsKK3Zh
ciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG9fVGFzayRDb21wbGV0ZWQgPSBmdW5jdGlvbiAoYSkg
eworICAgIHJldHVybiB7Y3RvcjogJ0NvbXBsZXRlZCcsIF8wOiBhfTsKK307Cit2YXIgX2V2YW5j
eiRlbG1fdG9kb212YyRUb2RvX1Rhc2skQ29tbWl0ID0ge2N0b3I6ICdDb21taXQnfTsKK3ZhciBf
ZXZhbmN6JGVsbV90b2RvbXZjJFRvZG9fVGFzayRDYW5jZWwgPSB7Y3RvcjogJ0NhbmNlbCd9Owor
dmFyIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kb19UYXNrJEVkaXQgPSBmdW5jdGlvbiAoYSkgewor
ICAgIHJldHVybiB7Y3RvcjogJ0VkaXQnLCBfMDogYX07Cit9OwordmFyIF9ldmFuY3okZWxtX3Rv
ZG9tdmMkVG9kb19UYXNrJEZvY3VzID0gZnVuY3Rpb24gKGEpIHsKKyAgICByZXR1cm4ge2N0b3I6
ICdGb2N1cycsIF8wOiBhfTsKK307Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvX1Rhc2sk
dmlldyA9IGZ1bmN0aW9uIChtb2RlbCkgeworICAgIHZhciBlbGVtZW50SWQgPSBBMigKKyAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSwKKyAgICAgICAgJ3RvZG8tJywKKyAg
ICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHRvU3RyaW5nKG1vZGVsLmlkKSk7CisgICAgdmFy
IGRlc2NyaXB0aW9uID0gQTIoX2VsbV9sYW5nJGNvcmUkTWF5YmUkd2l0aERlZmF1bHQsIG1vZGVs
LmRlc2NyaXB0aW9uLCBtb2RlbC5lZGl0cyk7CisgICAgdmFyIGNsYXNzTmFtZSA9IEEyKAorICAg
ICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycrKyddLAorICAgICAgICBtb2RlbC5jb21w
bGV0ZWQgPyAnY29tcGxldGVkICcgOiAnJywKKyAgICAgICAgZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgdmFyIF9wMyA9IG1vZGVsLmVkaXRzOworICAgICAgICAgICAgaWYgKF9wMy5jdG9yID09
PSAnSnVzdCcpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2VkaXRpbmcnOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gJyc7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0oKSk7CisgICAgcmV0dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1s
JGxpLAorICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAg
ICAgICAgICBbCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVz
JGNsYXNzKGNsYXNzTmFtZSkKKyAgICAgICAgICAgIF0pLAorICAgICAgICBfZWxtX2xhbmckY29y
ZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAg
QTIoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCRkaXYsCisgICAgICAgICAg
ICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAg
ICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkY2xhc3MoJ3ZpZXcnKQorICAgICAgICAgICAgICAgICAgICBdKSwKKyAgICAgICAg
ICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAg
ICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAg
ICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCRpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjbGFzcygndG9nZ2xlJyksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyR0eXBlJCgnY2hl
Y2tib3gnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwk
SHRtbF9BdHRyaWJ1dGVzJGNoZWNrZWQobW9kZWwuY29tcGxldGVkKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb25DbGljaygKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvX1Rh
c2skQ29tcGxldGVkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9s
YW5nJGNvcmUkQmFzaWNzJG5vdChtb2RlbC5jb21wbGV0ZWQpKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5h
dGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxt
X2xhbmckaHRtbCRIdG1sJGxhYmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9F
dmVudHMkb25Eb3VibGVDbGljaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2V2
YW5jeiRlbG1fdG9kb212YyRUb2RvX1Rhc2skRm9jdXMoZWxlbWVudElkKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBb
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkdGV4
dChkZXNjcmlwdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSksCisgICAgICAg
ICAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRo
dG1sJEh0bWwkYnV0dG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1
dGVzJGNsYXNzKCdkZXN0cm95JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9l
bG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uQ2xpY2soX2V2YW5jeiRlbG1fdG9kb212YyRUb2Rv
X1Rhc2skRGVsZXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAorICAgICAgICAg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFtdKSkKKyAgICAgICAgICAgICAgICAgICAgXSkpLAor
ICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwk
aW5wdXQsCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFy
cmF5KAorICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxt
X2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkY2xhc3MoJ2VkaXQnKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyR2YWx1ZShkZXNjcmlwdGlv
biksCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0
ZXMkbmFtZSgndGl0bGUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1s
JEh0bWxfQXR0cmlidXRlcyRpZChlbGVtZW50SWQpLAorICAgICAgICAgICAgICAgICAgICAgICAg
X2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb25JbnB1dChfZXZhbmN6JGVsbV90b2RvbXZjJFRv
ZG9fVGFzayRFZGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0
bWxfRXZlbnRzJG9uQmx1cihfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG9fVGFzayRDb21taXQpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgQTIoX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvX1Rhc2sk
b25GaW5pc2gsIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kb19UYXNrJENvbW1pdCwgX2V2YW5jeiRl
bG1fdG9kb212YyRUb2RvX1Rhc2skQ2FuY2VsKQorICAgICAgICAgICAgICAgICAgICBdKSwKKyAg
ICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAg
ICAgICAgICAgICAgICAgIFtdKSkKKyAgICAgICAgICAgIF0pKTsKK307CisKK3ZhciBfZXZhbmN6
JGVsbV90b2RvbXZjJFRvZG8kc3Vic2NyaXB0aW9ucyA9IGZ1bmN0aW9uIChtb2RlbCkgeworICAg
IHJldHVybiBfZWxtX2xhbmckY29yZSRQbGF0Zm9ybV9TdWIkbm9uZTsKK307Cit2YXIgX2V2YW5j
eiRlbG1fdG9kb212YyRUb2RvJGZyb21VcmwgPSBmdW5jdGlvbiAoaGFzaCkgeworICAgIHZhciBj
bGVhbkhhc2ggPSBBMihfZWxtX2xhbmckY29yZSRTdHJpbmckZHJvcExlZnQsIDIsIGhhc2gpOwor
ICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuZXEoCisgICAgICAgIEEyKAor
ICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRtZW1iZXIsCisgICAgICAgICAgICBjbGVh
bkhhc2gsCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXko
CisgICAgICAgICAgICAgICAgWydhbGwnLCAnYWN0aXZlJywgJ2NvbXBsZXRlZCddKSksCisgICAg
ICAgIHRydWUpID8gX2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVzdChjbGVhbkhhc2gpIDogX2VsbV9s
YW5nJGNvcmUkTWF5YmUkTm90aGluZzsKK307Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2Rv
JHVybFBhcnNlciA9IF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kbWFrZVBhcnNlcigK
KyAgICBmdW5jdGlvbiAoX3AwKSB7CisgICAgICAgIHJldHVybiBfZXZhbmN6JGVsbV90b2RvbXZj
JFRvZG8kZnJvbVVybCgKKyAgICAgICAgICAgIGZ1bmN0aW9uIChfKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIF8uaGFzaDsKKyAgICAgICAgICAgIH0oX3AwKSk7CisgICAgfSk7Cit2YXIgX2V2
YW5jeiRlbG1fdG9kb212YyRUb2RvJHRvVXJsID0gZnVuY3Rpb24gKHZpc2liaWxpdHkpIHsKKyAg
ICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJysrJ10sCisg
ICAgICAgICcjLycsCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyR0b0xvd2VyKHZpc2li
aWxpdHkpKTsKK307Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJGluZm9Gb290ZXIgPSBB
MigKKyAgICBfZWxtX2xhbmckaHRtbCRIdG1sJGZvb3RlciwKKyAgICBfZWxtX2xhbmckY29yZSRO
YXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgIFsKKyAgICAgICAgICAgIF9lbG1fbGFuZyRo
dG1sJEh0bWxfQXR0cmlidXRlcyRjbGFzcygnaW5mbycpCisgICAgICAgIF0pLAorICAgIF9lbG1f
bGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgWworICAgICAgICAgICAg
QTIoCisgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJHAsCisgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgW10pLAor
ICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAg
ICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCR0ZXh0
KCdEb3VibGUtY2xpY2sgdG8gZWRpdCBhIHRvZG8nKQorICAgICAgICAgICAgICAgIF0pKSwKKyAg
ICAgICAgICAgIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCRwLAorICAgICAg
ICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAg
ICAgIFtdKSwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJh
eSgKKyAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1s
JEh0bWwkdGV4dCgnV3JpdHRlbiBieSAnKSwKKyAgICAgICAgICAgICAgICAgICAgQTIoCisgICAg
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkYSwKKyAgICAgICAgICAgICAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAg
ICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0
bWxfQXR0cmlidXRlcyRocmVmKCdodHRwczovL2dpdGh1Yi5jb20vZXZhbmN6JykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIF0pLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRO
YXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgICAgICBbCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCR0ZXh0KCdFdmFuIEN6YXBs
aWNraScpCisgICAgICAgICAgICAgICAgICAgICAgICBdKSkKKyAgICAgICAgICAgICAgICBdKSks
CisgICAgICAgICAgICBBMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkcCwKKyAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAg
ICAgICAgICBbXSksCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9t
QXJyYXkoCisgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmck
aHRtbCRIdG1sJHRleHQoJ1BhcnQgb2YgJyksCisgICAgICAgICAgICAgICAgICAgIEEyKAorICAg
ICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJGEsCisgICAgICAgICAgICAgICAg
ICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRI
dG1sX0F0dHJpYnV0ZXMkaHJlZignaHR0cDovL3RvZG9tdmMuY29tJykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIF0pLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVf
TGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCR0ZXh0KCdUb2RvTVZDJykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIF0pKQorICAgICAgICAgICAgICAgIF0pKQorICAgICAgICBdKSk7
Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJGVtcHR5TW9kZWwgPSB7CisgICAgdGFza3M6
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgW10pLAorICAg
IHZpc2liaWxpdHk6ICdBbGwnLAorICAgIGZpZWxkOiAnJywKKyAgICB1aWQ6IDAKK307Cit2YXIg
X2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHNhdmUgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfUGxh
dGZvcm0ub3V0Z29pbmdQb3J0KAorICAgICdzYXZlJywKKyAgICBmdW5jdGlvbiAodikgeworICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgdGFza3M6IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9M
aXN0LnRvQXJyYXkodi50YXNrcykubWFwKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh2KSB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICBk
ZXNjcmlwdGlvbjogdi5kZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBs
ZXRlZDogdi5jb21wbGV0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICBlZGl0czogKHYuZWRp
dHMuY3RvciA9PT0gJ05vdGhpbmcnKSA/IG51bGwgOiB2LmVkaXRzLl8wLAorICAgICAgICAgICAg
ICAgICAgICAgICAgaWQ6IHYuaWQKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
ICAgICB9KSwKKyAgICAgICAgICAgIGZpZWxkOiB2LmZpZWxkLAorICAgICAgICAgICAgdWlkOiB2
LnVpZCwKKyAgICAgICAgICAgIHZpc2liaWxpdHk6IHYudmlzaWJpbGl0eQorICAgICAgICB9Owor
ICAgIH0pOwordmFyIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRNb2RlbCA9IEY0KAorICAgIGZ1
bmN0aW9uIChhLCBiLCBjLCBkKSB7CisgICAgICAgIHJldHVybiB7dGFza3M6IGEsIGZpZWxkOiBi
LCB1aWQ6IGMsIHZpc2liaWxpdHk6IGR9OworICAgIH0pOwordmFyIF9ldmFuY3okZWxtX3RvZG9t
dmMkVG9kbyRDaGFuZ2VWaXNpYmlsaXR5ID0gZnVuY3Rpb24gKGEpIHsKKyAgICByZXR1cm4ge2N0
b3I6ICdDaGFuZ2VWaXNpYmlsaXR5JywgXzA6IGF9OworfTsKK3ZhciBfZXZhbmN6JGVsbV90b2Rv
bXZjJFRvZG8kdmlzaWJpbGl0eVN3YXAgPSBGMygKKyAgICBmdW5jdGlvbiAodXJpLCB2aXNpYmls
aXR5LCBhY3R1YWxWaXNpYmlsaXR5KSB7CisgICAgICAgIHZhciBjbGFzc05hbWUgPSBfZWxtX2xh
bmckY29yZSROYXRpdmVfVXRpbHMuZXEodmlzaWJpbGl0eSwgYWN0dWFsVmlzaWJpbGl0eSkgPyAn
c2VsZWN0ZWQnIDogJyc7CisgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgIF9lbG1fbGFu
ZyRodG1sJEh0bWwkbGksCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5m
cm9tQXJyYXkoCisgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICBfZWxtX2xh
bmckaHRtbCRIdG1sX0V2ZW50cyRvbkNsaWNrKAorICAgICAgICAgICAgICAgICAgICBfZXZhbmN6
JGVsbV90b2RvbXZjJFRvZG8kQ2hhbmdlVmlzaWJpbGl0eSh2aXNpYmlsaXR5KSkKKyAgICAgICAg
ICAgICAgICBdKSwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21B
cnJheSgKKyAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAg
ICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJGEsCisgICAgICAgICAgICAgICAgICAg
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1s
X0F0dHJpYnV0ZXMkY2xhc3MoY2xhc3NOYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkaHJlZih1cmkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBdKSwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkdGV4dCh2aXNpYmlsaXR5KQorICAg
ICAgICAgICAgICAgICAgICAgICAgXSkpCisgICAgICAgICAgICAgICAgXSkpOworICAgIH0pOwor
dmFyIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRDaGVja0FsbCA9IGZ1bmN0aW9uIChhKSB7Cisg
ICAgcmV0dXJuIHtjdG9yOiAnQ2hlY2tBbGwnLCBfMDogYX07Cit9OwordmFyIF9ldmFuY3okZWxt
X3RvZG9tdmMkVG9kbyREZWxldGVDb21wbGV0ZSA9IHtjdG9yOiAnRGVsZXRlQ29tcGxldGUnfTsK
K3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kY29udHJvbHMgPSBGMigKKyAgICBmdW5jdGlv
biAodmlzaWJpbGl0eSwgdGFza3MpIHsKKyAgICAgICAgdmFyIHRhc2tzQ29tcGxldGVkID0gX2Vs
bV9sYW5nJGNvcmUkTGlzdCRsZW5ndGgoCisgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSRMaXN0JGZpbHRlciwKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiAo
XykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gXy5jb21wbGV0ZWQ7CisgICAgICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICB0YXNrcykpOworICAgICAgICB2YXIgdGFza3NMZWZ0
ID0gX2VsbV9sYW5nJGNvcmUkTGlzdCRsZW5ndGgodGFza3MpIC0gdGFza3NDb21wbGV0ZWQ7Cisg
ICAgICAgIHZhciBpdGVtXyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5lcSh0YXNrc0xl
ZnQsIDEpID8gJyBpdGVtJyA6ICcgaXRlbXMnOworICAgICAgICByZXR1cm4gQTIoCisgICAgICAg
ICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJGZvb3RlciwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICBbCisgICAgICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjbGFzcygnZm9vdGVyJyks
CisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRoaWRk
ZW4oCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkaXNFbXB0eSh0YXNr
cykpCisgICAgICAgICAgICAgICAgXSksCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRp
dmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAg
ICBBMigKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCRzcGFuLAorICAg
ICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisg
ICAgICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGNsYXNzKCd0b2RvLWNvdW50JykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIF0pLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRO
YXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgICAgICBbCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGh0bWwkSHRtbCRzdHJvbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRI
dG1sJHRleHQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmck
Y29yZSRCYXNpY3MkdG9TdHJpbmcodGFza3NMZWZ0KSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1s
JEh0bWwkdGV4dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBMihfZWxtX2xhbmckY29y
ZSRCYXNpY3Nfb3BzWycrKyddLCBpdGVtXywgJyBsZWZ0JykpCisgICAgICAgICAgICAgICAgICAg
ICAgICBdKSksCisgICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICBf
ZWxtX2xhbmckaHRtbCRIdG1sJHVsLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgICAgICBbCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGNs
YXNzKCdmaWx0ZXJzJykKKyAgICAgICAgICAgICAgICAgICAgICAgIF0pLAorICAgICAgICAgICAg
ICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAg
ICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTMoX2V2YW5jeiRl
bG1fdG9kb212YyRUb2RvJHZpc2liaWxpdHlTd2FwLCAnIy8nLCAnQWxsJywgdmlzaWJpbGl0eSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCR0ZXh0KCcg
JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTMoX2V2YW5jeiRlbG1fdG9kb212YyRU
b2RvJHZpc2liaWxpdHlTd2FwLCAnIy9hY3RpdmUnLCAnQWN0aXZlJywgdmlzaWJpbGl0eSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCR0ZXh0KCcgJyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTMoX2V2YW5jeiRlbG1fdG9kb212YyRUb2Rv
JHZpc2liaWxpdHlTd2FwLCAnIy9jb21wbGV0ZWQnLCAnQ29tcGxldGVkJywgdmlzaWJpbGl0eSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIF0pKSwKKyAgICAgICAgICAgICAgICAgICAgQTIoCisg
ICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkYnV0dG9uLAorICAgICAgICAg
ICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAg
ICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5n
JGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGNsYXNzKCdjbGVhci1jb21wbGV0ZWQnKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkaGlkZGVu
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGls
cy5lcSh0YXNrc0NvbXBsZXRlZCwgMCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9l
bG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uQ2xpY2soX2V2YW5jeiRlbG1fdG9kb212YyRUb2Rv
JERlbGV0ZUNvbXBsZXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgXSksCisgICAgICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmck
aHRtbCRIdG1sJHRleHQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTIoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJysrJ10s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDbGVhciBjb21wbGV0ZWQgKCcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyR0b1N0cmlu
Zyh0YXNrc0NvbXBsZXRlZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
KScpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIF0pKQorICAgICAgICAgICAgICAgIF0pKTsK
KyAgICB9KTsKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kVXBkYXRlVGFzayA9IGZ1bmN0
aW9uIChhKSB7CisgICAgcmV0dXJuIHtjdG9yOiAnVXBkYXRlVGFzaycsIF8wOiBhfTsKK307Cit2
YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHRhc2tMaXN0ID0gRjIoCisgICAgZnVuY3Rpb24g
KHZpc2liaWxpdHksIHRhc2tzKSB7CisgICAgICAgIHZhciBjc3NWaXNpYmlsaXR5ID0gX2VsbV9s
YW5nJGNvcmUkTGlzdCRpc0VtcHR5KHRhc2tzKSA/ICdoaWRkZW4nIDogJ3Zpc2libGUnOworICAg
ICAgICB2YXIgYWxsQ29tcGxldGVkID0gQTIoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRM
aXN0JGFsbCwKKyAgICAgICAgICAgIGZ1bmN0aW9uIChfKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIF8uY29tcGxldGVkOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHRhc2tzKTsKKyAg
ICAgICAgdmFyIGlzVmlzaWJsZSA9IGZ1bmN0aW9uICh0b2RvKSB7CisgICAgICAgICAgICB2YXIg
X3AxID0gdmlzaWJpbGl0eTsKKyAgICAgICAgICAgIHN3aXRjaCAoX3AxKSB7CisgICAgICAgICAg
ICAgICAgY2FzZSAnQ29tcGxldGVkJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvZG8u
Y29tcGxldGVkOworICAgICAgICAgICAgICAgIGNhc2UgJ0FjdGl2ZSc6CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRCYXNpY3Mkbm90KHRvZG8uY29tcGxldGVkKTsK
KyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAg
ICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCRzZWN0aW9uLAorICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgIFsKKyAgICAgICAg
ICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGNsYXNzKCdtYWluJyks
CisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHls
ZSgKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFy
cmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHtjdG9yOiAnX1R1cGxlMicsIF8wOiAndmlzaWJpbGl0eScsIF8xOiBjc3NWaXNpYmlsaXR5
fQorICAgICAgICAgICAgICAgICAgICAgICAgXSkpCisgICAgICAgICAgICAgICAgXSksCisgICAg
ICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAg
ICAgICAgWworICAgICAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGh0bWwkSHRtbCRpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgWworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRj
bGFzcygndG9nZ2xlLWFsbCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRodG1sJEh0bWxfQXR0cmlidXRlcyR0eXBlJCgnY2hlY2tib3gnKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkbmFtZSgndG9nZ2xl
JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRy
aWJ1dGVzJGNoZWNrZWQoYWxsQ29tcGxldGVkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbkNsaWNrKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRDaGVja0FsbCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJG5vdChhbGxDb21wbGV0
ZWQpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIF0pLAorICAgICAgICAgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAg
ICAgICBbXSkpLAorICAgICAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAg
X2VsbV9sYW5nJGh0bWwkSHRtbCRsYWJlbCwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgWwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRl
cyRmb3IoJ3RvZ2dsZS1hbGwnKQorICAgICAgICAgICAgICAgICAgICAgICAgXSksCisgICAgICAg
ICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xh
bmckaHRtbCRIdG1sJHRleHQoJ01hcmsgYWxsIGFzIGNvbXBsZXRlJykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIF0pKSwKKyAgICAgICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAg
ICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkdWwsCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgICAgIFsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0
ZXMkY2xhc3MoJ3RvZG8tbGlzdCcpCisgICAgICAgICAgICAgICAgICAgICAgICBdKSwKKyAgICAg
ICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSRMaXN0JG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh0YXNrKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2tWaWV3ID0gX2V2YW5jeiRlbG1fdG9k
b212YyRUb2RvX1Rhc2skdmlldyh0YXNrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgaWQgPSB0YXNrLmlkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMigK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BcHAk
bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAobXNnKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2V2YW5jeiRlbG1fdG9k
b212YyRUb2RvJFVwZGF0ZVRhc2soCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAge2N0b3I6ICdfVHVwbGUyJywgXzA6IGlkLCBfMTogbXNnfSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRh
c2tWaWV3KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAg
ICAgICBBMihfZWxtX2xhbmckY29yZSRMaXN0JGZpbHRlciwgaXNWaXNpYmxlLCB0YXNrcykpKQor
ICAgICAgICAgICAgICAgIF0pKTsKKyAgICB9KTsKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRv
ZG8kQWRkID0ge2N0b3I6ICdBZGQnfTsKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kVXBk
YXRlRmllbGQgPSBmdW5jdGlvbiAoYSkgeworICAgIHJldHVybiB7Y3RvcjogJ1VwZGF0ZUZpZWxk
JywgXzA6IGF9OworfTsKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kTm9PcCA9IHtjdG9y
OiAnTm9PcCd9OwordmFyIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRmb2N1c1Rhc2sgPSBmdW5j
dGlvbiAoZWxlbWVudElkKSB7CisgICAgcmV0dXJuIEEzKAorICAgICAgICBfZWxtX2xhbmckY29y
ZSRUYXNrJHBlcmZvcm0sCisgICAgICAgIGZ1bmN0aW9uIChfcDIpIHsKKyAgICAgICAgICAgIHJl
dHVybiBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kTm9PcDsKKyAgICAgICAgfSwKKyAgICAgICAg
ZnVuY3Rpb24gKF9wMykgeworICAgICAgICAgICAgcmV0dXJuIF9ldmFuY3okZWxtX3RvZG9tdmMk
VG9kbyROb09wOworICAgICAgICB9LAorICAgICAgICBfZWxtX2xhbmckZG9tJERvbSRmb2N1cyhl
bGVtZW50SWQpKTsKK307Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHVwZGF0ZSA9IEYy
KAorICAgIGZ1bmN0aW9uIChtc2csIG1vZGVsKSB7CisgICAgICAgIHZhciBfcDQgPSBBMihfZWxt
X2xhbmckY29yZSREZWJ1ZyRsb2csICdNRVNTQUdFOiAnLCBtc2cpOworICAgICAgICBzd2l0Y2gg
KF9wNC5jdG9yKSB7CisgICAgICAgICAgICBjYXNlICdOb09wJzoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4ge2N0b3I6ICdfVHVwbGUyJywgXzA6IG1vZGVsLCBfMTogX2VsbV9sYW5nJGNvcmUkUGxh
dGZvcm1fQ21kJG5vbmV9OworICAgICAgICAgICAgY2FzZSAnVXBkYXRlRmllbGQnOgorICAgICAg
ICAgICAgICAgIHZhciBuZXdNb2RlbCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy51cGRh
dGUoCisgICAgICAgICAgICAgICAgICAgIG1vZGVsLAorICAgICAgICAgICAgICAgICAgICB7Zmll
bGQ6IF9wNC5fMH0pOworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
ICAgIGN0b3I6ICdfVHVwbGUyJywKKyAgICAgICAgICAgICAgICAgICAgXzA6IG5ld01vZGVsLAor
ICAgICAgICAgICAgICAgICAgICBfMTogX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHNhdmUobW9k
ZWwpCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGNhc2UgJ0FkZCc6CisgICAgICAg
ICAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0gX2VsbV9sYW5nJGNvcmUkU3RyaW5nJHRyaW0obW9k
ZWwuZmllbGQpOworICAgICAgICAgICAgICAgIHZhciBuZXdNb2RlbCA9IF9lbG1fbGFuZyRjb3Jl
JFN0cmluZyRpc0VtcHR5KGRlc2NyaXB0aW9uKSA/IG1vZGVsIDogX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX1V0aWxzLnVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgbW9kZWwsCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpZDogbW9kZWwudWlkICsgMSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiAnJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRhc2tzOiBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSRCYXNpY3Nfb3BzWycrKyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsLnRh
c2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9M
aXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTIoX2V2YW5jeiRlbG1fdG9kb212YyRUb2Rv
X1Rhc2skaW5pdCwgZGVzY3JpcHRpb24sIG1vZGVsLnVpZCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXSkpCisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIGN0b3I6ICdfVHVwbGUyJywKKyAgICAgICAg
ICAgICAgICAgICAgXzA6IG5ld01vZGVsLAorICAgICAgICAgICAgICAgICAgICBfMTogX2V2YW5j
eiRlbG1fdG9kb212YyRUb2RvJHNhdmUobmV3TW9kZWwpCisgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIGNhc2UgJ1VwZGF0ZVRhc2snOgorICAgICAgICAgICAgICAgIHZhciBfcDYgPSBf
cDQuXzAuXzE7CisgICAgICAgICAgICAgICAgdmFyIHVwZGF0ZVRhc2sgPSBmdW5jdGlvbiAodCkg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxz
LmVxKHQuaWQsIF9wNC5fMC5fMCkgPyBBMihfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG9fVGFzayR1
cGRhdGUsIF9wNiwgdCkgOiBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0KHQpOworICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICAgICAgdmFyIG5ld01vZGVsID0gX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX1V0aWxzLnVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgbW9kZWwsCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tzOiBBMihfZWxtX2xh
bmckY29yZSRMaXN0JGZpbHRlck1hcCwgdXBkYXRlVGFzaywgbW9kZWwudGFza3MpCisgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHZhciBfcDUgPSBfcDY7CisgICAgICAg
ICAgICAgICAgaWYgKF9wNS5jdG9yID09PSAnRm9jdXMnKSB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFBsYXRm
b3JtX0NtZF9vcHNbJyEnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld01vZGVsLAorICAg
ICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHNhdmUobmV3TW9kZWwpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kZm9jdXNU
YXNrKF9wNS5fMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGN0b3I6ICdfVHVwbGUyJywKKyAgICAgICAgICAgICAgICAgICAgICAgIF8w
OiBuZXdNb2RlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIF8xOiBfZXZhbmN6JGVsbV90b2Rv
bXZjJFRvZG8kc2F2ZShuZXdNb2RlbCkKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICBjYXNlICdEZWxldGVDb21wbGV0ZSc6CisgICAgICAgICAg
ICAgICAgdmFyIG5ld01vZGVsID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLnVwZGF0ZSgK
KyAgICAgICAgICAgICAgICAgICAgbW9kZWwsCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRhc2tzOiBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSRMaXN0JGZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmdW5jdGlvbiAoX3A3KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBfZWxtX2xhbmckY29yZSRCYXNpY3Mkbm90KAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZnVuY3Rpb24gKF8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gXy5jb21wbGV0ZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9KF9wNykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbW9kZWwudGFza3MpCisgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIGN0b3I6ICdf
VHVwbGUyJywKKyAgICAgICAgICAgICAgICAgICAgXzA6IG5ld01vZGVsLAorICAgICAgICAgICAg
ICAgICAgICBfMTogX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHNhdmUobmV3TW9kZWwpCisgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGNhc2UgJ0NoZWNrQWxsJzoKKyAgICAgICAgICAg
ICAgICB2YXIgdXBkYXRlVGFzayA9IGZ1bmN0aW9uICh0KSB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMudXBkYXRlKAorICAgICAgICAgICAg
ICAgICAgICAgICAgdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHtjb21wbGV0ZWQ6IF9wNC5f
MH0pOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgdmFyIG5ld01vZGVsID0g
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLnVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAg
bW9kZWwsCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRh
c2tzOiBBMihfZWxtX2xhbmckY29yZSRMaXN0JG1hcCwgdXBkYXRlVGFzaywgbW9kZWwudGFza3Mp
CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICAgICAgICAgIGN0b3I6ICdfVHVwbGUyJywKKyAgICAgICAgICAgICAgICAgICAgXzA6
IG5ld01vZGVsLAorICAgICAgICAgICAgICAgICAgICBfMTogX2V2YW5jeiRlbG1fdG9kb212YyRU
b2RvJHNhdmUobmV3TW9kZWwpCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgdmFyIG5ld01vZGVsID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X1V0aWxzLnVwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgbW9kZWwsCisgICAgICAgICAgICAg
ICAgICAgIHt2aXNpYmlsaXR5OiBfcDQuXzB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMicsCisgICAgICAgICAgICAgICAgICAg
IF8wOiBuZXdNb2RlbCwKKyAgICAgICAgICAgICAgICAgICAgXzE6IF9ldmFuY3okZWxtX3RvZG9t
dmMkVG9kbyRzYXZlKG1vZGVsKQorICAgICAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICB9
KTsKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kdXJsVXBkYXRlID0gRjIoCisgICAgZnVu
Y3Rpb24gKHJlc3VsdCwgbW9kZWwpIHsKKyAgICAgICAgdmFyIF9wOCA9IHJlc3VsdDsKKyAgICAg
ICAgaWYgKF9wOC5jdG9yID09PSAnSnVzdCcpIHsKKyAgICAgICAgICAgIHJldHVybiBBMigKKyAg
ICAgICAgICAgICAgICBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kdXBkYXRlLAorICAgICAgICAg
ICAgICAgIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRDaGFuZ2VWaXNpYmlsaXR5KAorICAgICAg
ICAgICAgICAgICAgICBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHRv
U2VudGVuY2VDYXNlKF9wOC5fMCkpLAorICAgICAgICAgICAgICAgIG1vZGVsKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICBfZXZhbmN6
JGVsbV90b2RvbXZjJFRvZG8kdXBkYXRlLAorICAgICAgICAgICAgICAgIF9ldmFuY3okZWxtX3Rv
ZG9tdmMkVG9kbyRDaGFuZ2VWaXNpYmlsaXR5KCdBbGwnKSwKKyAgICAgICAgICAgICAgICBtb2Rl
bCk7CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kaW5p
dCA9IEYyKAorICAgIGZ1bmN0aW9uIChmbGFncywgdXJsKSB7CisgICAgICAgIHJldHVybiBBMigK
KyAgICAgICAgICAgIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyR1cmxVcGRhdGUsCisgICAgICAg
ICAgICB1cmwsCisgICAgICAgICAgICBBMihfZWxtX2xhbmckY29yZSRNYXliZSR3aXRoRGVmYXVs
dCwgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJGVtcHR5TW9kZWwsIGZsYWdzKSk7CisgICAgfSk7
Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHRhc2tFbnRyeSA9IGZ1bmN0aW9uICh0YXNr
KSB7CisgICAgcmV0dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJGhlYWRlciwK
KyAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAg
ICAgWworICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjbGFz
cygnaGVhZGVyJykKKyAgICAgICAgICAgIF0pLAorICAgICAgICBfZWxtX2xhbmckY29yZSROYXRp
dmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgQTIoCisg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCRoMSwKKyAgICAgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAg
IFtdKSwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJy
YXkoCisgICAgICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1f
bGFuZyRodG1sJEh0bWwkdGV4dCgndG9kb3MnKQorICAgICAgICAgICAgICAgICAgICBdKSksCisg
ICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCRp
bnB1dCwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJy
YXkoCisgICAgICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1f
bGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjbGFzcygnbmV3LXRvZG8nKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRwbGFjZWhvbGRlcign
V2hhdCBuZWVkcyB0byBiZSBkb25lPycpLAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9s
YW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGF1dG9mb2N1cyh0cnVlKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyR2YWx1ZSh0YXNrKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRuYW1l
KCduZXdUb2RvJyksCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1s
X0V2ZW50cyRvbklucHV0KF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRVcGRhdGVGaWVsZCksCisg
ICAgICAgICAgICAgICAgICAgICAgICBBMihfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG9fVGFzayRv
bkZpbmlzaCwgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJEFkZCwgX2V2YW5jeiRlbG1fdG9kb212
YyRUb2RvJE5vT3ApCisgICAgICAgICAgICAgICAgICAgIF0pLAorICAgICAgICAgICAgICAgIF9l
bG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAg
W10pKQorICAgICAgICAgICAgXSkpOworfTsKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8k
dmlldyA9IGZ1bmN0aW9uIChtb2RlbCkgeworICAgIHJldHVybiBBMigKKyAgICAgICAgX2VsbV9s
YW5nJGh0bWwkSHRtbCRkaXYsCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZy
b21BcnJheSgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRI
dG1sX0F0dHJpYnV0ZXMkY2xhc3MoJ3RvZG9tdmMtd3JhcHBlcicpLAorICAgICAgICAgICAgICAg
IF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHlsZSgKKyAgICAgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAg
IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHtjdG9yOiAnX1R1cGxlMicsIF8wOiAndmlzaWJp
bGl0eScsIF8xOiAnaGlkZGVuJ30KKyAgICAgICAgICAgICAgICAgICAgXSkpCisgICAgICAgICAg
ICBdKSwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAg
ICAgICAgICAgWworICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRodG1sJEh0bWwkc2VjdGlvbiwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRp
dmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjbGFzcygndG9kb2FwcCcp
CisgICAgICAgICAgICAgICAgICAgIF0pLAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAg
ICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9MYXp5JGxhenksIF9ldmFuY3ok
ZWxtX3RvZG9tdmMkVG9kbyR0YXNrRW50cnksIG1vZGVsLmZpZWxkKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEEzKF9lbG1fbGFuZyRodG1sJEh0bWxfTGF6eSRsYXp5MiwgX2V2YW5jeiRlbG1f
dG9kb212YyRUb2RvJHRhc2tMaXN0LCBtb2RlbC52aXNpYmlsaXR5LCBtb2RlbC50YXNrcyksCisg
ICAgICAgICAgICAgICAgICAgICAgICBBMyhfZWxtX2xhbmckaHRtbCRIdG1sX0xhenkkbGF6eTIs
IF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRjb250cm9scywgbW9kZWwudmlzaWJpbGl0eSwgbW9k
ZWwudGFza3MpCisgICAgICAgICAgICAgICAgICAgIF0pKSwKKyAgICAgICAgICAgICAgICBfZXZh
bmN6JGVsbV90b2RvbXZjJFRvZG8kaW5mb0Zvb3RlcgorICAgICAgICAgICAgXSkpOworfTsKK3Zh
ciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kbWFpbiA9IHsKKyAgICBtYWluOiBBMigKKyAgICAg
ICAgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRwcm9ncmFtV2l0aEZsYWdzLAorICAg
ICAgICBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kdXJsUGFyc2VyLAorICAgICAgICB7dXJsVXBk
YXRlOiBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kdXJsVXBkYXRlLCB2aWV3OiBfZXZhbmN6JGVs
bV90b2RvbXZjJFRvZG8kdmlldywgaW5pdDogX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJGluaXQs
IHVwZGF0ZTogX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHVwZGF0ZSwgc3Vic2NyaXB0aW9uczog
X2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHN1YnNjcmlwdGlvbnN9KSwKKyAgICBmbGFnczogX2Vs
bV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkb25lT2YoCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5h
dGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSRKc29uX0RlY29kZSRudWxsKF9lbG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmcp
LAorICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEpz
b25fRGVjb2RlJG1hcCwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0
LAorICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSRKc29uX0RlY29kZSRhbmRUaGVuLAorICAgICAgICAgICAgICAgICAgICBBMihfZWxtX2xhbmck
Y29yZSRKc29uX0RlY29kZV9vcHNbJzo9J10sICdmaWVsZCcsIF9lbG1fbGFuZyRjb3JlJEpzb25f
RGVjb2RlJHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChmaWVsZCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJGFuZFRoZW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1f
bGFuZyRjb3JlJEpzb25fRGVjb2RlX29wc1snOj0nXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ3Rhc2tzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9s
YW5nJGNvcmUkSnNvbl9EZWNvZGUkbGlzdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1f
bGFuZyRjb3JlJEpzb25fRGVjb2RlJGFuZFRoZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGVfb3BzWyc6PSddLCAn
Y29tcGxldGVkJywgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkYm9vbCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGNvbXBsZXRlZCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQTIoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSRKc29uX0RlY29kZSRhbmRUaGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGVfb3BzWyc6PSddLCAn
ZGVzY3JpcHRpb24nLCBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRzdHJpbmcpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGRlc2Ny
aXB0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRhbmRUaGVuLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBMigK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlX29wc1snOj0nXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlZGl0cycsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRvbmVPZigKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9l
bG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJG51bGwoX2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90aGlu
ZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBMihfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRtYXAsIF9l
bG1fbGFuZyRjb3JlJE1heWJlJEp1c3QsIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJHN0cmlu
ZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXSkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGVkaXRzKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQTIoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkYW5kVGhlbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBMihfZWxt
X2xhbmckY29yZSRKc29uX0RlY29kZV9vcHNbJzo9J10sICdpZCcsIF9lbG1fbGFuZyRjb3JlJEpz
b25fRGVjb2RlJGludCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGlkKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRzdWNjZWVkKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Nv
bXBsZXRlZDogY29tcGxldGVkLCBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sIGVkaXRzOiBlZGl0
cywgaWQ6IGlkfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAodGFz
a3MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUk
YW5kVGhlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEyKF9lbG1fbGFu
ZyRjb3JlJEpzb25fRGVjb2RlX29wc1snOj0nXSwgJ3VpZCcsIF9lbG1fbGFuZyRjb3JlJEpzb25f
RGVjb2RlJGludCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlv
biAodWlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xh
bmckY29yZSRKc29uX0RlY29kZSRhbmRUaGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBMihfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZV9vcHNbJzo9J10s
ICd2aXNpYmlsaXR5JywgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkc3RyaW5nKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHZpc2liaWxp
dHkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRzdWNjZWVkKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmaWVsZDogZmllbGQsIHRhc2tz
OiB0YXNrcywgdWlkOiB1aWQsIHZpc2liaWxpdHk6IHZpc2liaWxpdHl9KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgfSkpCisgICAgICAgICAgICBdKSkKK307CisKK3ZhciBFbG0gPSB7
fTsKK0VsbVsnVG9kbyddID0gRWxtWydUb2RvJ10gfHwge307CitfZWxtX2xhbmckY29yZSROYXRp
dmVfUGxhdGZvcm0uYWRkUHVibGljTW9kdWxlKEVsbVsnVG9kbyddLCAnVG9kbycsIHR5cGVvZiBf
ZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kbWFpbiA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogX2V2
YW5jeiRlbG1fdG9kb212YyRUb2RvJG1haW4pOworCitpZiAodHlwZW9mIGRlZmluZSA9PT0gImZ1
bmN0aW9uIiAmJiBkZWZpbmVbJ2FtZCddKQoreworICBkZWZpbmUoW10sIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gRWxtOyB9KTsKKyAgcmV0dXJuOworfQorCitpZiAodHlwZW9mIG1vZHVsZSA9PT0gIm9i
amVjdCIpCit7CisgIG1vZHVsZVsnZXhwb3J0cyddID0gRWxtOworICByZXR1cm47Cit9CisKK3Zh
ciBnbG9iYWxFbG0gPSB0aGlzWydFbG0nXTsKK2lmICh0eXBlb2YgZ2xvYmFsRWxtID09PSAidW5k
ZWZpbmVkIikKK3sKKyAgdGhpc1snRWxtJ10gPSBFbG07CisgIHJldHVybjsKK30KKworZm9yICh2
YXIgcHVibGljTW9kdWxlIGluIEVsbSkKK3sKKyAgaWYgKHB1YmxpY01vZHVsZSBpbiBnbG9iYWxF
bG0pCisgIHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGFyZSB0d28gRWxtIG1vZHVsZXMg
Y2FsbGVkIGAnICsgcHVibGljTW9kdWxlICsgJ2Agb24gdGhpcyBwYWdlISBSZW5hbWUgb25lIG9m
IHRoZW0uJyk7CisgIH0KKyAgZ2xvYmFsRWxtW3B1YmxpY01vZHVsZV0gPSBFbG1bcHVibGljTW9k
dWxlXTsKK30KKworfSkuY2FsbCh0aGlzKTsKKwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlvbmFsLXByb2ctZXhhbXBsZXMv
ZWxtL2luZGV4Lmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2Z1bmN0aW9uYWwtcHJvZy1leGFtcGxlcy9lbG0vaW5kZXguaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45NTE0YzRjZDhhMDY4MWYyMTYzMTU4ZDhjZmEyOTZhYjU4OTg3N2NmCi0tLSAvZGV2L251bGwK
KysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5j
dGlvbmFsLXByb2ctZXhhbXBsZXMvZWxtL2luZGV4Lmh0bWwKQEAgLTAsMCArMSwzMiBAQAorPCFk
b2N0eXBlIGh0bWw+Cis8aHRtbCBsYW5nPSJlbiIgZGF0YS1mcmFtZXdvcms9ImVsbSI+Cis8aGVh
ZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgICAgPHRpdGxlPkVsbSDigKIgVG9kb01W
QzwvdGl0bGU+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJub2RlX21vZHVsZXMv
dG9kb212Yy1jb21tb24vYmFzZS5jc3MiPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJl
Zj0ibm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3MiPgorICAgIDxzdHlsZT4K
KyAgICAgICAgYm9keSB7CisgICAgICAgICAgICB3aWR0aDogYXV0bzsKKyAgICAgICAgfQorICAg
ICAgICAudG9kb212Yy13cmFwcGVyIHsKKyAgICAgICAgICAgIHZpc2liaWxpdHk6IHZpc2libGUg
IWltcG9ydGFudDsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5Pgor
PHNjcmlwdCBzcmM9ImJ1aWxkL2VsbS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorICAgIChmdW5j
dGlvbiAoKSB7CisgICAgICAgIC8vIHZhciByZXN1bHQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgn
ZWxtLXRvZG8tbW9kZWwnKTsKKyAgICAgICAgLy8gdmFyIHNhdmVkTW9kZWwgPSByZXN1bHQgPyBK
U09OLnBhcnNlKHJlc3VsdCkgOiBudWxsOworICAgICAgICB2YXIgc2F2ZWRNb2RlbCA9IG51bGw7
CisgICAgICAgIHZhciB0b2RvbXZjID0gRWxtLlRvZG8uZnVsbHNjcmVlbihzYXZlZE1vZGVsKTsK
KyAgICAgICAgLy8gdG9kb212Yy5wb3J0cy5zYXZlLnN1YnNjcmliZShmdW5jdGlvbiAobW9kZWwp
IHsKKyAgICAgICAgLy8gIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdlbG0tdG9kby1tb2RlbCcsIEpT
T04uc3RyaW5naWZ5KG1vZGVsKSk7CisgICAgICAgIC8vIH0pOworICAgIH0oKSk7Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZnVuY3Rpb25hbC1wcm9nLWV4YW1wbGVzL2VsbS9ub2Rl
X21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4LmNzcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZnVuY3Rpb25hbC1wcm9nLWV4YW1wbGVzL2VsbS9u
b2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMGUzZDJm
NmI3OTNkNDJjYjRlMjBhZWVhNDhhM2I1Y2ViNDg2ZWU1Ci0tLSAvZGV2L251bGwKKysrIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlvbmFsLXBy
b2ctZXhhbXBsZXMvZWxtL25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvaW5kZXguY3NzCkBA
IC0wLDAgKzEsMzcwIEBACitodG1sLAorYm9keSB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRp
bmc6IDA7Cit9CisKK2J1dHRvbiB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7Cisg
ICAgYm9yZGVyOiAwOworICAgIGJhY2tncm91bmQ6IG5vbmU7CisgICAgZm9udC1zaXplOiAxMDAl
OworICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICBmb250LWZhbWlseTogaW5oZXJp
dDsKKyAgICBmb250LXdlaWdodDogaW5oZXJpdDsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICAt
d2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CisgICAgYXBwZWFyYW5jZTogbm9uZTsKKyAgICAtd2Vi
a2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICAtbW96LW9zeC1mb250LXNtb290
aGluZzogZ3JheXNjYWxlOworfQorCitib2R5IHsKKyAgICBmb250OiAxNHB4ICdIZWx2ZXRpY2Eg
TmV1ZScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CisgICAgbGluZS1oZWlnaHQ6IDEu
NGVtOworICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7CisgICAgY29sb3I6ICM0ZDRkNGQ7CisgICAg
bWluLXdpZHRoOiAyMzBweDsKKyAgICBtYXgtd2lkdGg6IDU1MHB4OworICAgIG1hcmdpbjogMCBh
dXRvOworICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAgIC1tb3ot
b3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKK30K
KworOmZvY3VzIHsKKyAgICBvdXRsaW5lOiAwOworfQorCisuaGlkZGVuIHsKKyAgICBkaXNwbGF5
OiBub25lOworfQorCisudG9kb2FwcCB7CisgICAgYmFja2dyb3VuZDogI2ZmZjsKKyAgICBtYXJn
aW46IDEzMHB4IDAgNDBweCAwOworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBib3gtc2hh
ZG93OiAwIDJweCA0cHggMCByZ2JhKDAsIDAsIDAsIDAuMiksCisgICAgICAgICAgICAgICAgMCAy
NXB4IDUwcHggMCByZ2JhKDAsIDAsIDAsIDAuMSk7Cit9CisKKy50b2RvYXBwIGlucHV0Ojotd2Vi
a2l0LWlucHV0LXBsYWNlaG9sZGVyIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7CisgICAgZm9u
dC13ZWlnaHQ6IDMwMDsKKyAgICBjb2xvcjogI2U2ZTZlNjsKK30KKworLnRvZG9hcHAgaW5wdXQ6
Oi1tb3otcGxhY2Vob2xkZXIgeworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKKyAgICBmb250LXdl
aWdodDogMzAwOworICAgIGNvbG9yOiAjZTZlNmU2OworfQorCisudG9kb2FwcCBpbnB1dDo6aW5w
dXQtcGxhY2Vob2xkZXIgeworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKKyAgICBmb250LXdlaWdo
dDogMzAwOworICAgIGNvbG9yOiAjZTZlNmU2OworfQorCisudG9kb2FwcCBoMSB7CisgICAgcG9z
aXRpb246IGFic29sdXRlOworICAgIHRvcDogLTE1NXB4OworICAgIHdpZHRoOiAxMDAlOworICAg
IGZvbnQtc2l6ZTogMTAwcHg7CisgICAgZm9udC13ZWlnaHQ6IDEwMDsKKyAgICB0ZXh0LWFsaWdu
OiBjZW50ZXI7CisgICAgY29sb3I6IHJnYmEoMTc1LCA0NywgNDcsIDAuMTUpOworICAgIC13ZWJr
aXQtdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKKyAgICAtbW96LXRleHQtcmVu
ZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7CisgICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXpl
TGVnaWJpbGl0eTsKK30KKworLm5ldy10b2RvLAorLmVkaXQgeworICAgIHBvc2l0aW9uOiByZWxh
dGl2ZTsKKyAgICBtYXJnaW46IDA7CisgICAgd2lkdGg6IDEwMCU7CisgICAgZm9udC1zaXplOiAy
NHB4OworICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OworICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0
OworICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKKyAgICBib3JkZXI6IDA7CisgICAgY29sb3I6IGlu
aGVyaXQ7CisgICAgcGFkZGluZzogNnB4OworICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7Cisg
ICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4yKTsKKyAg
ICBib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFu
dGlhbGlhc2VkOworICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7Cit9CisK
Ky5uZXctdG9kbyB7CisgICAgcGFkZGluZzogMTZweCAxNnB4IDE2cHggNjBweDsKKyAgICBib3Jk
ZXI6IG5vbmU7CisgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjAwMyk7CisgICAgYm94
LXNoYWRvdzogaW5zZXQgMCAtMnB4IDFweCByZ2JhKDAsMCwwLDAuMDMpOworfQorCisubWFpbiB7
CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIHotaW5kZXg6IDI7CisgICAgYm9yZGVyLXRv
cDogMXB4IHNvbGlkICNlNmU2ZTY7Cit9CisKK2xhYmVsW2Zvcj0ndG9nZ2xlLWFsbCddIHsKKyAg
ICBkaXNwbGF5OiBub25lOworfQorCisudG9nZ2xlLWFsbCB7CisgICAgcG9zaXRpb246IGFic29s
dXRlOworICAgIHRvcDogLTU1cHg7CisgICAgbGVmdDogLTEycHg7CisgICAgd2lkdGg6IDYwcHg7
CisgICAgaGVpZ2h0OiAzNHB4OworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBib3JkZXI6
IG5vbmU7IC8qIE1vYmlsZSBTYWZhcmkgKi8KK30KKworLnRvZ2dsZS1hbGw6YmVmb3JlIHsKKyAg
ICBjb250ZW50OiAn4p2vJzsKKyAgICBmb250LXNpemU6IDIycHg7CisgICAgY29sb3I6ICNlNmU2
ZTY7CisgICAgcGFkZGluZzogMTBweCAyN3B4IDEwcHggMjdweDsKK30KKworLnRvZ2dsZS1hbGw6
Y2hlY2tlZDpiZWZvcmUgeworICAgIGNvbG9yOiAjNzM3MzczOworfQorCisudG9kby1saXN0IHsK
KyAgICBtYXJnaW46IDA7CisgICAgcGFkZGluZzogMDsKKyAgICBsaXN0LXN0eWxlOiBub25lOwor
fQorCisudG9kby1saXN0IGxpIHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgZm9udC1z
aXplOiAyNHB4OworICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWRlZGVkOworfQorCisu
dG9kby1saXN0IGxpOmxhc3QtY2hpbGQgeworICAgIGJvcmRlci1ib3R0b206IG5vbmU7Cit9CisK
Ky50b2RvLWxpc3QgbGkuZWRpdGluZyB7CisgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKKyAgICBw
YWRkaW5nOiAwOworfQorCisudG9kby1saXN0IGxpLmVkaXRpbmcgLmVkaXQgeworICAgIGRpc3Bs
YXk6IGJsb2NrOworICAgIHdpZHRoOiA1MDZweDsKKyAgICBwYWRkaW5nOiAxMnB4IDE2cHg7Cisg
ICAgbWFyZ2luOiAwIDAgMCA0M3B4OworfQorCisudG9kby1saXN0IGxpLmVkaXRpbmcgLnZpZXcg
eworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKy50b2RvLWxpc3QgbGkgLnRvZ2dsZSB7CisgICAg
dGV4dC1hbGlnbjogY2VudGVyOworICAgIHdpZHRoOiA0MHB4OworICAgIC8qIGF1dG8sIHNpbmNl
IG5vbi1XZWJLaXQgYnJvd3NlcnMgZG9lc24ndCBzdXBwb3J0IGlucHV0IHN0eWxpbmcgKi8KKyAg
ICBoZWlnaHQ6IGF1dG87CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogMDsKKyAg
ICBib3R0b206IDA7CisgICAgbWFyZ2luOiBhdXRvIDA7CisgICAgYm9yZGVyOiBub25lOyAvKiBN
b2JpbGUgU2FmYXJpICovCisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAgIGFwcGVh
cmFuY2U6IG5vbmU7Cit9CisKKy50b2RvLWxpc3QgbGkgLnRvZ2dsZTphZnRlciB7CisgICAgY29u
dGVudDogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSItMTAgLTE4
IDEwMCAxMzUiPjxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIHI9IjUwIiBmaWxsPSJub25lIiBzdHJv
a2U9IiNlZGVkZWQiIHN0cm9rZS13aWR0aD0iMyIvPjwvc3ZnPicpOworfQorCisudG9kby1saXN0
IGxpIC50b2dnbGU6Y2hlY2tlZDphZnRlciB7CisgICAgY29udGVudDogdXJsKCdkYXRhOmltYWdl
L3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lk
dGg9IjQwIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSItMTAgLTE4IDEwMCAxMzUiPjxjaXJjbGUgY3g9
IjUwIiBjeT0iNTAiIHI9IjUwIiBmaWxsPSJub25lIiBzdHJva2U9IiNiZGRhZDUiIHN0cm9rZS13
aWR0aD0iMyIvPjxwYXRoIGZpbGw9IiM1ZGMyYWYiIGQ9Ik03MiAyNUw0MiA3MSAyNyA1NmwtNCA0
IDIwIDIwIDM0LTUyeiIvPjwvc3ZnPicpOworfQorCisudG9kby1saXN0IGxpIGxhYmVsIHsKKyAg
ICB3b3JkLWJyZWFrOiBicmVhay1hbGw7CisgICAgcGFkZGluZzogMTVweCA2MHB4IDE1cHggMTVw
eDsKKyAgICBtYXJnaW4tbGVmdDogNDVweDsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBsaW5l
LWhlaWdodDogMS4yOworICAgIHRyYW5zaXRpb246IGNvbG9yIDAuNHM7Cit9CisKKy50b2RvLWxp
c3QgbGkuY29tcGxldGVkIGxhYmVsIHsKKyAgICBjb2xvcjogI2Q5ZDlkOTsKKyAgICB0ZXh0LWRl
Y29yYXRpb246IGxpbmUtdGhyb3VnaDsKK30KKworLnRvZG8tbGlzdCBsaSAuZGVzdHJveSB7Cisg
ICAgZGlzcGxheTogbm9uZTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAwOwor
ICAgIHJpZ2h0OiAxMHB4OworICAgIGJvdHRvbTogMDsKKyAgICB3aWR0aDogNDBweDsKKyAgICBo
ZWlnaHQ6IDQwcHg7CisgICAgbWFyZ2luOiBhdXRvIDA7CisgICAgZm9udC1zaXplOiAzMHB4Owor
ICAgIGNvbG9yOiAjY2M5YTlhOworICAgIG1hcmdpbi1ib3R0b206IDExcHg7CisgICAgdHJhbnNp
dGlvbjogY29sb3IgMC4ycyBlYXNlLW91dDsKK30KKworLnRvZG8tbGlzdCBsaSAuZGVzdHJveTpo
b3ZlciB7CisgICAgY29sb3I6ICNhZjViNWU7Cit9CisKKy50b2RvLWxpc3QgbGkgLmRlc3Ryb3k6
YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICfDlyc7Cit9CisKKy50b2RvLWxpc3QgbGk6aG92ZXIgLmRl
c3Ryb3kgeworICAgIGRpc3BsYXk6IGJsb2NrOworfQorCisudG9kby1saXN0IGxpIC5lZGl0IHsK
KyAgICBkaXNwbGF5OiBub25lOworfQorCisudG9kby1saXN0IGxpLmVkaXRpbmc6bGFzdC1jaGls
ZCB7CisgICAgbWFyZ2luLWJvdHRvbTogLTFweDsKK30KKworLmZvb3RlciB7CisgICAgY29sb3I6
ICM3Nzc7CisgICAgcGFkZGluZzogMTBweCAxNXB4OworICAgIGhlaWdodDogMjBweDsKKyAgICB0
ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNmU2ZTY7Cit9
CisKKy5mb290ZXI6YmVmb3JlIHsKKyAgICBjb250ZW50OiAnJzsKKyAgICBwb3NpdGlvbjogYWJz
b2x1dGU7CisgICAgcmlnaHQ6IDA7CisgICAgYm90dG9tOiAwOworICAgIGxlZnQ6IDA7CisgICAg
aGVpZ2h0OiA1MHB4OworICAgIG92ZXJmbG93OiBoaWRkZW47CisgICAgYm94LXNoYWRvdzogMCAx
cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwKKyAgICAgICAgICAgICAgICAwIDhweCAwIC0zcHgg
I2Y2ZjZmNiwKKyAgICAgICAgICAgICAgICAwIDlweCAxcHggLTNweCByZ2JhKDAsIDAsIDAsIDAu
MiksCisgICAgICAgICAgICAgICAgMCAxNnB4IDAgLTZweCAjZjZmNmY2LAorICAgICAgICAgICAg
ICAgIDAgMTdweCAycHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMik7Cit9CisKKy50b2RvLWNvdW50
IHsKKyAgICBmbG9hdDogbGVmdDsKKyAgICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisudG9kby1j
b3VudCBzdHJvbmcgeworICAgIGZvbnQtd2VpZ2h0OiAzMDA7Cit9CisKKy5maWx0ZXJzIHsKKyAg
ICBtYXJnaW46IDA7CisgICAgcGFkZGluZzogMDsKKyAgICBsaXN0LXN0eWxlOiBub25lOworICAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICByaWdodDogMDsKKyAgICBsZWZ0OiAwOworfQorCisu
ZmlsdGVycyBsaSB7CisgICAgZGlzcGxheTogaW5saW5lOworfQorCisuZmlsdGVycyBsaSBhIHsK
KyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICBtYXJnaW46IDNweDsKKyAgICBwYWRkaW5nOiAzcHgg
N3B4OworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBib3JkZXI6IDFweCBzb2xpZCB0
cmFuc3BhcmVudDsKKyAgICBib3JkZXItcmFkaXVzOiAzcHg7Cit9CisKKy5maWx0ZXJzIGxpIGE6
aG92ZXIgeworICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNzUsIDQ3LCA0NywgMC4xKTsKK30KKwor
LmZpbHRlcnMgbGkgYS5zZWxlY3RlZCB7CisgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE3NSwgNDcs
IDQ3LCAwLjIpOworfQorCisuY2xlYXItY29tcGxldGVkLAoraHRtbCAuY2xlYXItY29tcGxldGVk
OmFjdGl2ZSB7CisgICAgZmxvYXQ6IHJpZ2h0OworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAg
ICBsaW5lLWhlaWdodDogMjBweDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgY3Vy
c29yOiBwb2ludGVyOworfQorCisuY2xlYXItY29tcGxldGVkOmhvdmVyIHsKKyAgICB0ZXh0LWRl
Y29yYXRpb246IHVuZGVybGluZTsKK30KKworLmluZm8geworICAgIG1hcmdpbjogNjVweCBhdXRv
IDA7CisgICAgY29sb3I6ICNiZmJmYmY7CisgICAgZm9udC1zaXplOiAxMHB4OworICAgIHRleHQt
c2hhZG93OiAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKKyAgICB0ZXh0LWFsaWdu
OiBjZW50ZXI7Cit9CisKKy5pbmZvIHAgeworICAgIGxpbmUtaGVpZ2h0OiAxOworfQorCisuaW5m
byBhIHsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cisg
ICAgZm9udC13ZWlnaHQ6IDQwMDsKK30KKworLmluZm8gYTpob3ZlciB7CisgICAgdGV4dC1kZWNv
cmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy8qCisgICAgSGFjayB0byByZW1vdmUgYmFja2dyb3Vu
ZCBmcm9tIE1vYmlsZSBTYWZhcmkuCisgICAgQ2FuJ3QgdXNlIGl0IGdsb2JhbGx5IHNpbmNlIGl0
IGRlc3Ryb3lzIGNoZWNrYm94ZXMgaW4gRmlyZWZveAorKi8KK0BtZWRpYSBzY3JlZW4gYW5kICgt
d2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCkgeworICAgIC50b2dnbGUtYWxsLAorICAg
IC50b2RvLWxpc3QgbGkgLnRvZ2dsZSB7CisgICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CisgICAg
fQorCisgICAgLnRvZG8tbGlzdCBsaSAudG9nZ2xlIHsKKyAgICAgICAgaGVpZ2h0OiA0MHB4Owor
ICAgIH0KKworICAgIC50b2dnbGUtYWxsIHsKKyAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJv
dGF0ZSg5MGRlZyk7CisgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKKyAgICAgICAg
LXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAgICAgICBhcHBlYXJhbmNlOiBub25lOworICAg
IH0KK30KKworQG1lZGlhIChtYXgtd2lkdGg6IDQzMHB4KSB7CisgICAgLmZvb3RlciB7CisgICAg
ICAgIGhlaWdodDogNTBweDsKKyAgICB9CisKKyAgICAuZmlsdGVycyB7CisgICAgICAgIGJvdHRv
bTogMTBweDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2Z1bmN0aW9uYWwtcHJvZy1leGFtcGxlcy9lbG0vbm9kZV9t
b2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlvbmFsLXByb2ctZXhhbXBsZXMvZWxtL25vZGVf
bW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDI1ZDNjODRhYzZj
NmFlZjI2Yjk2ODNhMmJjMTBjNjFmOTYwYzhmCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlvbmFsLXByb2ctZXhh
bXBsZXMvZWxtL25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcwpAQCAtMCwwICsx
LDE0MSBAQAoraHIgeworICAgIG1hcmdpbjogMjBweCAwOworICAgIGJvcmRlcjogMDsKKyAgICBi
b3JkZXItdG9wOiAxcHggZGFzaGVkICNjNWM1YzU7CisgICAgYm9yZGVyLWJvdHRvbTogMXB4IGRh
c2hlZCAjZjdmN2Y3OworfQorCisubGVhcm4gYSB7CisgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsK
KyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgY29sb3I6ICNiODNmNDU7Cit9CisKKy5s
ZWFybiBhOmhvdmVyIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgICBjb2xv
cjogIzc4N2U3ZTsKK30KKworLmxlYXJuIGgzLAorLmxlYXJuIGg0LAorLmxlYXJuIGg1IHsKKyAg
ICBtYXJnaW46IDEwcHggMDsKKyAgICBmb250LXdlaWdodDogNTAwOworICAgIGxpbmUtaGVpZ2h0
OiAxLjI7CisgICAgY29sb3I6ICMwMDA7Cit9CisKKy5sZWFybiBoMyB7CisgICAgZm9udC1zaXpl
OiAyNHB4OworfQorCisubGVhcm4gaDQgeworICAgIGZvbnQtc2l6ZTogMThweDsKK30KKworLmxl
YXJuIGg1IHsKKyAgICBtYXJnaW4tYm90dG9tOiAwOworICAgIGZvbnQtc2l6ZTogMTRweDsKK30K
KworLmxlYXJuIHVsIHsKKyAgICBwYWRkaW5nOiAwOworICAgIG1hcmdpbjogMCAwIDMwcHggMjVw
eDsKK30KKworLmxlYXJuIGxpIHsKKyAgICBsaW5lLWhlaWdodDogMjBweDsKK30KKworLmxlYXJu
IHAgeworICAgIGZvbnQtc2l6ZTogMTVweDsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGxp
bmUtaGVpZ2h0OiAxLjM7CisgICAgbWFyZ2luLXRvcDogMDsKKyAgICBtYXJnaW4tYm90dG9tOiAw
OworfQorCisjaXNzdWUtY291bnQgeworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKy5xdW90ZSB7
CisgICAgYm9yZGVyOiBub25lOworICAgIG1hcmdpbjogMjBweCAwIDYwcHggMDsKK30KKworLnF1
b3RlIHAgeworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLnF1b3RlIHA6YmVmb3JlIHsK
KyAgICBjb250ZW50OiAn4oCcJzsKKyAgICBmb250LXNpemU6IDUwcHg7CisgICAgb3BhY2l0eTog
LjE1OworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC0yMHB4OworICAgIGxlZnQ6
IDNweDsKK30KKworLnF1b3RlIHA6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICfigJ0nOworICAgIGZv
bnQtc2l6ZTogNTBweDsKKyAgICBvcGFjaXR5OiAuMTU7CisgICAgcG9zaXRpb246IGFic29sdXRl
OworICAgIGJvdHRvbTogLTQycHg7CisgICAgcmlnaHQ6IDNweDsKK30KKworLnF1b3RlIGZvb3Rl
ciB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIGJvdHRvbTogLTQwcHg7CisgICAgcmln
aHQ6IDA7Cit9CisKKy5xdW90ZSBmb290ZXIgaW1nIHsKKyAgICBib3JkZXItcmFkaXVzOiAzcHg7
Cit9CisKKy5xdW90ZSBmb290ZXIgYSB7CisgICAgbWFyZ2luLWxlZnQ6IDVweDsKKyAgICB2ZXJ0
aWNhbC1hbGlnbjogbWlkZGxlOworfQorCisuc3BlZWNoLWJ1YmJsZSB7CisgICAgcG9zaXRpb246
IHJlbGF0aXZlOworICAgIHBhZGRpbmc6IDEwcHg7CisgICAgYmFja2dyb3VuZDogcmdiYSgwLCAw
LCAwLCAuMDQpOworICAgIGJvcmRlci1yYWRpdXM6IDVweDsKK30KKworLnNwZWVjaC1idWJibGU6
YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICcnOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0
b3A6IDEwMCU7CisgICAgcmlnaHQ6IDMwcHg7CisgICAgYm9yZGVyOiAxM3B4IHNvbGlkIHRyYW5z
cGFyZW50OworICAgIGJvcmRlci10b3AtY29sb3I6IHJnYmEoMCwgMCwgMCwgLjA0KTsKK30KKwor
LmxlYXJuLWJhciA+IC5sZWFybiB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHdpZHRo
OiAyNzJweDsKKyAgICB0b3A6IDhweDsKKyAgICBsZWZ0OiAtMzAwcHg7CisgICAgcGFkZGluZzog
MTBweDsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmdi
YSgyNTUsIDI1NSwgMjU1LCAuNik7CisgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogbGVmdDsKKyAg
ICB0cmFuc2l0aW9uLWR1cmF0aW9uOiA1MDBtczsKK30KKworQG1lZGlhIChtaW4td2lkdGg6IDg5
OXB4KSB7CisgICAgLmxlYXJuLWJhciB7CisgICAgICAgIHdpZHRoOiBhdXRvOworICAgICAgICBw
YWRkaW5nLWxlZnQ6IDMwMHB4OworICAgIH0KKworICAgIC5sZWFybi1iYXIgPiAubGVhcm4gewor
ICAgICAgICBsZWZ0OiA4cHg7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlvbmFsLXByb2ctZXhhbXBsZXMv
ZWxtL25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlvbmFsLXByb2ctZXhhbXBsZXMv
ZWxtL25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgxZTAw
NmJjNTAyZGRjNGM3NGY0N2JkMTNhODM5MjI3N2Y4MzBkYjgKLS0tIC9kZXYvbnVsbAorKysgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Z1bmN0aW9uYWwt
cHJvZy1leGFtcGxlcy9lbG0vbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuanMKQEAg
LTAsMCArMSwyNDkgQEAKKy8qIGdsb2JhbCBfICovCisoZnVuY3Rpb24gKCkgeworICAgICd1c2Ug
c3RyaWN0JzsKKworICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi8KKyAgICAvLyBVbmRlcnNj
b3JlJ3MgVGVtcGxhdGUgTW9kdWxlCisgICAgLy8gQ291cnRlc3kgb2YgdW5kZXJzY29yZWpzLm9y
ZworICAgIHZhciBfID0gKGZ1bmN0aW9uIChfKSB7CisgICAgICAgIF8uZGVmYXVsdHMgPSBmdW5j
dGlvbiAob2JqZWN0KSB7CisgICAgICAgICAgICBpZiAoIW9iamVjdCkgeworICAgICAgICAgICAg
ICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHZhciBh
cmdzSW5kZXggPSAxLCBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgYXJnc0luZGV4IDwg
YXJnc0xlbmd0aDsgYXJnc0luZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgaXRlcmFibGUg
PSBhcmd1bWVudHNbYXJnc0luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGl0ZXJhYmxlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAob2JqZWN0W2tleV0gPT0gbnVsbCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9iamVjdFtrZXldID0gaXRlcmFibGVba2V5XTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRl
IGRlbGltaXRlcnMsIGNoYW5nZSB0aGUKKyAgICAgICAgLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNl
dHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLgorICAgICAgICBfLnRlbXBsYXRl
U2V0dGluZ3MgPSB7CisgICAgICAgICAgICBldmFsdWF0ZSAgICA6IC88JShbXHNcU10rPyklPi9n
LAorICAgICAgICAgICAgaW50ZXJwb2xhdGUgOiAvPCU9KFtcc1xTXSs/KSU+L2csCisgICAgICAg
ICAgICBlc2NhcGUgICAgICA6IC88JS0oW1xzXFNdKz8pJT4vZworICAgICAgICB9OworCisgICAg
ICAgIC8vIFdoZW4gY3VzdG9taXppbmcgYHRlbXBsYXRlU2V0dGluZ3NgLCBpZiB5b3UgZG9uJ3Qg
d2FudCB0byBkZWZpbmUgYW4KKyAgICAgICAgLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVhdGlvbiBv
ciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpcworICAgICAgICAvLyBndWFyYW50
ZWVkIG5vdCB0byBtYXRjaC4KKyAgICAgICAgdmFyIG5vTWF0Y2ggPSAvKC4pXi87CisKKyAgICAg
ICAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkg
Y2FuIGJlIHB1dCBpbnRvIGEKKyAgICAgICAgLy8gc3RyaW5nIGxpdGVyYWwuCisgICAgICAgIHZh
ciBlc2NhcGVzID0geworICAgICAgICAgICAgIiciOiAgICAgICInIiwKKyAgICAgICAgICAgICdc
XCc6ICAgICAnXFwnLAorICAgICAgICAgICAgJ1xyJzogICAgICdyJywKKyAgICAgICAgICAgICdc
bic6ICAgICAnbicsCisgICAgICAgICAgICAnXHQnOiAgICAgJ3QnLAorICAgICAgICAgICAgJ1x1
MjAyOCc6ICd1MjAyOCcsCisgICAgICAgICAgICAnXHUyMDI5JzogJ3UyMDI5JworICAgICAgICB9
OworCisgICAgICAgIHZhciBlc2NhcGVyID0gL1xcfCd8XHJ8XG58XHR8XHUyMDI4fFx1MjAyOS9n
OworCisgICAgICAgIC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxhciB0byBK
b2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIC8vIFVuZGVyc2NvcmUgdGVtcGxh
dGluZyBoYW5kbGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMgd2hpdGVzcGFjZSwK
KyAgICAgICAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xh
dGVkIGNvZGUuCisgICAgICAgIF8udGVtcGxhdGUgPSBmdW5jdGlvbih0ZXh0LCBkYXRhLCBzZXR0
aW5ncykgeworICAgICAgICAgICAgdmFyIHJlbmRlcjsKKyAgICAgICAgICAgIHNldHRpbmdzID0g
Xy5kZWZhdWx0cyh7fSwgc2V0dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5ncyk7CisKKyAgICAgICAg
ICAgIC8vIENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9uZSByZWd1bGFyIGV4cHJlc3Npb24gdmlh
IGFsdGVybmF0aW9uLgorICAgICAgICAgICAgdmFyIG1hdGNoZXIgPSBuZXcgUmVnRXhwKFsKKyAg
ICAgICAgICAgICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJjZSwKKyAgICAg
ICAgICAgICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLAorICAg
ICAgICAgICAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2UKKyAgICAg
ICAgICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTsKKworICAgICAgICAgICAgLy8gQ29tcGls
ZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlh
dGVseS4KKyAgICAgICAgICAgIHZhciBpbmRleCA9IDA7CisgICAgICAgICAgICB2YXIgc291cmNl
ID0gIl9fcCs9JyI7CisgICAgICAgICAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24o
bWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHsKKyAgICAgICAg
ICAgICAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShpbmRleCwgb2Zmc2V0KQorICAgICAgICAgICAg
ICAgICAgICAucmVwbGFjZShlc2NhcGVyLCBmdW5jdGlvbihtYXRjaCkgeyByZXR1cm4gJ1xcJyAr
IGVzY2FwZXNbbWF0Y2hdOyB9KTsKKworICAgICAgICAgICAgICAgIGlmIChlc2NhcGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIgKyBlc2NhcGUgKyAiKSk9
PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXG4nIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKGludGVycG9sYXRlKSB7CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSAr
PSAiJytcbigoX190PSgiICsgaW50ZXJwb2xhdGUgKyAiKSk9PW51bGw/Jyc6X190KStcbiciOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZXZhbHVhdGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgc291cmNlICs9ICInO1xuIiArIGV2YWx1YXRlICsgIlxuX19wKz0nIjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5kZXggPSBvZmZzZXQgKyBtYXRj
aC5sZW5ndGg7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICBzb3VyY2UgKz0gIic7XG4iOworCisgICAgICAgICAgICAvLyBJZiBhIHZh
cmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2FsIHNjb3Bl
LgorICAgICAgICAgICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291cmNlID0gJ3dpdGgob2Jq
fHx7fSl7XG4nICsgc291cmNlICsgJ31cbic7CisKKyAgICAgICAgICAgIHNvdXJjZSA9ICJ2YXIg
X190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4sIiArCisgICAgICAgICAgICAgICAg
InByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307XG4iICsKKyAg
ICAgICAgICAgICAgICBzb3VyY2UgKyAicmV0dXJuIF9fcDtcbiI7CisKKyAgICAgICAgICAgIHRy
eSB7CisgICAgICAgICAgICAgICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdzLnZhcmlh
YmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7Cisg
ICAgICAgICAgICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7CisgICAgICAgICAgICAgICAgdGhyb3cg
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRhdGEpIHJldHVybiByZW5kZXIo
ZGF0YSwgXyk7CisgICAgICAgICAgICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlvbihkYXRhKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlci5jYWxsKHRoaXMsIGRhdGEsIF8pOworICAgICAg
ICAgICAgfTsKKworICAgICAgICAgICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgZnVuY3Rpb24g
c291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLgorICAgICAgICAgICAg
dGVtcGxhdGUuc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAoc2V0dGluZ3MudmFyaWFibGUgfHwgJ29i
aicpICsgJyl7XG4nICsgc291cmNlICsgJ30nOworCisgICAgICAgICAgICByZXR1cm4gdGVtcGxh
dGU7CisgICAgICAgIH07CisKKyAgICAgICAgcmV0dXJuIF87CisgICAgfSkoe30pOworCisgICAg
aWYgKGxvY2F0aW9uLmhvc3RuYW1lID09PSAndG9kb212Yy5jb20nKSB7CisgICAgICAgIChmdW5j
dGlvbihpLHMsbyxnLHIsYSxtKXtpWydHb29nbGVBbmFseXRpY3NPYmplY3QnXT1yO2lbcl09aVty
XXx8ZnVuY3Rpb24oKXsKKyAgICAgICAgKGlbcl0ucT1pW3JdLnF8fFtdKS5wdXNoKGFyZ3VtZW50
cyl9LGlbcl0ubD0xKm5ldyBEYXRlKCk7YT1zLmNyZWF0ZUVsZW1lbnQobyksCisgICAgICAgIG09
cy5nZXRFbGVtZW50c0J5VGFnTmFtZShvKVswXTthLmFzeW5jPTE7YS5zcmM9ZzttLnBhcmVudE5v
ZGUuaW5zZXJ0QmVmb3JlKGEsbSkKKyAgICAgICAgfSkod2luZG93LGRvY3VtZW50LCdzY3JpcHQn
LCdodHRwczovL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9hbmFseXRpY3MuanMnLCdnYScpOwor
ICAgICAgICBnYSgnY3JlYXRlJywgJ1VBLTMxMDgxMDYyLTEnLCAnYXV0bycpOworICAgICAgICBn
YSgnc2VuZCcsICdwYWdldmlldycpOworICAgIH0KKyAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAq
LworCisgICAgZnVuY3Rpb24gcmVkaXJlY3QoKSB7CisgICAgICAgIGlmIChsb2NhdGlvbi5ob3N0
bmFtZSA9PT0gJ3Rhc3RlanMuZ2l0aHViLmlvJykgeworICAgICAgICAgICAgbG9jYXRpb24uaHJl
ZiA9IGxvY2F0aW9uLmhyZWYucmVwbGFjZSgndGFzdGVqcy5naXRodWIuaW8vdG9kb212YycsICd0
b2RvbXZjLmNvbScpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluZFJvb3Qo
KSB7CisgICAgICAgIHZhciBiYXNlID0gbG9jYXRpb24uaHJlZi5pbmRleE9mKCdleGFtcGxlcy8n
KTsKKyAgICAgICAgcmV0dXJuIGxvY2F0aW9uLmhyZWYuc3Vic3RyKDAsIGJhc2UpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGdldEZpbGUoZmlsZSwgY2FsbGJhY2spIHsKKyAgICAgICAgaWYgKCFs
b2NhdGlvbi5ob3N0KSB7CisgICAgICAgICAgICByZXR1cm4gY29uc29sZS5pbmZvKCdNaXNzIHRo
ZSBpbmZvIGJhcj8gUnVuIFRvZG9NVkMgZnJvbSBhIHNlcnZlciB0byBhdm9pZCBhIGNyb3NzLW9y
aWdpbiBlcnJvci4nKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0
cFJlcXVlc3QoKTsKKworICAgICAgICB4aHIub3BlbignR0VUJywgZmluZFJvb3QoKSArIGZpbGUs
IHRydWUpOworICAgICAgICB4aHIuc2VuZCgpOworCisgICAgICAgIHhoci5vbmxvYWQgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIGNhbGxiYWNr
KSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2soeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gTGVhcm4obGVhcm5KU09O
LCBjb25maWcpIHsKKyAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIExlYXJuKSkgeworICAg
ICAgICAgICAgcmV0dXJuIG5ldyBMZWFybihsZWFybkpTT04sIGNvbmZpZyk7CisgICAgICAgIH0K
KworICAgICAgICB2YXIgdGVtcGxhdGUsIGZyYW1ld29yazsKKworICAgICAgICBpZiAodHlwZW9m
IGxlYXJuSlNPTiAhPT0gJ29iamVjdCcpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICAgICAgbGVhcm5KU09OID0gSlNPTi5wYXJzZShsZWFybkpTT04pOworICAgICAgICAgICAgfSBj
YXRjaCAoZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChjb25maWcpIHsKKyAgICAgICAgICAgIHRlbXBsYXRlID0gY29u
ZmlnLnRlbXBsYXRlOworICAgICAgICAgICAgZnJhbWV3b3JrID0gY29uZmlnLmZyYW1ld29yazsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICghdGVtcGxhdGUgJiYgbGVhcm5KU09OLnRlbXBsYXRl
cykgeworICAgICAgICAgICAgdGVtcGxhdGUgPSBsZWFybkpTT04udGVtcGxhdGVzLnRvZG9tdmM7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZyYW1ld29yayAmJiBkb2N1bWVudC5xdWVyeVNl
bGVjdG9yKCdbZGF0YS1mcmFtZXdvcmtdJykpIHsKKyAgICAgICAgICAgIGZyYW1ld29yayA9IGRv
Y3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWZyYW1ld29ya10nKS5kYXRhc2V0LmZyYW1ld29y
azsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMudGVtcGxhdGUgPSB0ZW1wbGF0ZTsKKworICAg
ICAgICBpZiAobGVhcm5KU09OLmJhY2tlbmQpIHsKKyAgICAgICAgICAgIHRoaXMuZnJhbWV3b3Jr
SlNPTiA9IGxlYXJuSlNPTi5iYWNrZW5kOworICAgICAgICAgICAgdGhpcy5mcmFtZXdvcmtKU09O
Lmlzc3VlTGFiZWwgPSBmcmFtZXdvcms7CisgICAgICAgICAgICB0aGlzLmFwcGVuZCh7CisgICAg
ICAgICAgICAgICAgYmFja2VuZDogdHJ1ZQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxz
ZSBpZiAobGVhcm5KU09OW2ZyYW1ld29ya10pIHsKKyAgICAgICAgICAgIHRoaXMuZnJhbWV3b3Jr
SlNPTiA9IGxlYXJuSlNPTltmcmFtZXdvcmtdOworICAgICAgICAgICAgdGhpcy5mcmFtZXdvcmtK
U09OLmlzc3VlTGFiZWwgPSBmcmFtZXdvcms7CisgICAgICAgICAgICB0aGlzLmFwcGVuZCgpOwor
ICAgICAgICB9CisKKyAgICAgICAgdGhpcy5mZXRjaElzc3VlQ291bnQoKTsKKyAgICB9CisKKyAg
ICBMZWFybi5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG9wdHMpIHsKKyAgICAgICAgdmFy
IGFzaWRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXNpZGUnKTsKKyAgICAgICAgYXNpZGUu
aW5uZXJIVE1MID0gXy50ZW1wbGF0ZSh0aGlzLnRlbXBsYXRlLCB0aGlzLmZyYW1ld29ya0pTT04p
OworICAgICAgICBhc2lkZS5jbGFzc05hbWUgPSAnbGVhcm4nOworCisgICAgICAgIGlmIChvcHRz
ICYmIG9wdHMuYmFja2VuZCkgeworICAgICAgICAgICAgLy8gUmVtb3ZlIGRlbW8gbGluaworICAg
ICAgICAgICAgdmFyIHNvdXJjZUxpbmtzID0gYXNpZGUucXVlcnlTZWxlY3RvcignLnNvdXJjZS1s
aW5rcycpOworICAgICAgICAgICAgdmFyIGhlYWRpbmcgPSBzb3VyY2VMaW5rcy5maXJzdEVsZW1l
bnRDaGlsZDsKKyAgICAgICAgICAgIHZhciBzb3VyY2VMaW5rID0gc291cmNlTGlua3MubGFzdEVs
ZW1lbnRDaGlsZDsKKyAgICAgICAgICAgIC8vIENvcnJlY3QgbGluayBwYXRoCisgICAgICAgICAg
ICB2YXIgaHJlZiA9IHNvdXJjZUxpbmsuZ2V0QXR0cmlidXRlKCdocmVmJyk7CisgICAgICAgICAg
ICBzb3VyY2VMaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYuc3Vic3RyKGhyZWYubGFzdElu
ZGV4T2YoJ2h0dHAnKSkpOworICAgICAgICAgICAgc291cmNlTGlua3MuaW5uZXJIVE1MID0gaGVh
ZGluZy5vdXRlckhUTUwgKyBzb3VyY2VMaW5rLm91dGVySFRNTDsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIExvY2FsaXplIGRlbW8gbGlua3MKKyAgICAgICAgICAgIHZhciBkZW1v
TGlua3MgPSBhc2lkZS5xdWVyeVNlbGVjdG9yQWxsKCcuZGVtby1saW5rJyk7CisgICAgICAgICAg
ICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGRlbW9MaW5rcywgZnVuY3Rpb24gKGRlbW9M
aW5rKSB7CisgICAgICAgICAgICAgICAgaWYgKGRlbW9MaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicp
LnN1YnN0cigwLCA0KSAhPT0gJ2h0dHAnKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbW9MaW5r
LnNldEF0dHJpYnV0ZSgnaHJlZicsIGZpbmRSb290KCkgKyBkZW1vTGluay5nZXRBdHRyaWJ1dGUo
J2hyZWYnKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0K
KworICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTmFtZSA9IChkb2N1bWVudC5ib2R5LmNsYXNz
TmFtZSArICcgbGVhcm4tYmFyJykudHJpbSgpOworICAgICAgICBkb2N1bWVudC5ib2R5Lmluc2Vy
dEFkamFjZW50SFRNTCgnYWZ0ZXJCZWdpbicsIGFzaWRlLm91dGVySFRNTCk7CisgICAgfTsKKwor
ICAgIExlYXJuLnByb3RvdHlwZS5mZXRjaElzc3VlQ291bnQgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHZhciBpc3N1ZUxpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaXNzdWUtY291bnQt
bGluaycpOworICAgICAgICBpZiAoaXNzdWVMaW5rKSB7CisgICAgICAgICAgICB2YXIgdXJsID0g
aXNzdWVMaW5rLmhyZWYucmVwbGFjZSgnaHR0cHM6Ly9naXRodWIuY29tJywgJ2h0dHBzOi8vYXBp
LmdpdGh1Yi5jb20vcmVwb3MnKTsKKyAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJl
cXVlc3QoKTsKKyAgICAgICAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwsIHRydWUpOworICAgICAg
ICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICAgICAgdmFyIHBh
cnNlZFJlc3BvbnNlID0gSlNPTi5wYXJzZShlLnRhcmdldC5yZXNwb25zZVRleHQpOworICAgICAg
ICAgICAgICAgIGlmIChwYXJzZWRSZXNwb25zZSBpbnN0YW5jZW9mIEFycmF5KSB7CisgICAgICAg
ICAgICAgICAgICAgIHZhciBjb3VudCA9IHBhcnNlZFJlc3BvbnNlLmxlbmd0aDsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGNvdW50ICE9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
c3N1ZUxpbmsuaW5uZXJIVE1MID0gJ1RoaXMgYXBwIGhhcyAnICsgY291bnQgKyAnIG9wZW4gaXNz
dWVzJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdp
c3N1ZS1jb3VudCcpLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJzsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICB4aHIu
c2VuZCgpOworICAgICAgICB9CisgICAgfTsKKworICAgIHJlZGlyZWN0KCk7CisgICAgZ2V0Rmls
ZSgnbGVhcm4uanNvbicsIExlYXJuKTsKK30pKCk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Z1bmN0aW9uYWwtcHJvZy1leGFtcGxl
cy9lbG0vcGFja2FnZS5qc29uIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9mdW5jdGlvbmFsLXByb2ctZXhhbXBsZXMvZWxtL3BhY2thZ2UuanNvbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wZjE3YWVjM2RjNzIxODcyNzViMzRlOTZhNjlmMGU4NmI5NDdhNjc1Ci0tLSAvZGV2
L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9mdW5jdGlvbmFsLXByb2ctZXhhbXBsZXMvZWxtL3BhY2thZ2UuanNvbgpAQCAtMCwwICsxLDcg
QEAKK3sKKyAgInByaXZhdGUiOiB0cnVlLAorICAiZGVwZW5kZW5jaWVzIjogeworICAgICJ0b2Rv
bXZjLWFwcC1jc3MiOiAiXjIuMC42IiwKKyAgICAidG9kb212Yy1jb21tb24iOiAiXjEuMC4yIgor
ICB9Cit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2Z1bmN0aW9uYWwtcHJvZy1leGFtcGxlcy9lbG0vcmVhZG1lLm1kIGIvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlvbmFsLXByb2ct
ZXhhbXBsZXMvZWxtL3JlYWRtZS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MTY3OTk5Y2EyZDNhYTliNjc2NmU5
YThjYzE4NDQ2NDZkNTQyNWY0Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlvbmFsLXByb2ctZXhhbXBsZXMvZWxt
L3JlYWRtZS5tZApAQCAtMCwwICsxLDU2IEBACisjIEVsbSBUb2RvTVZDIEV4YW1wbGUKKworPiBB
IGZ1bmN0aW9uYWwgbGFuZ3VhZ2UgZm9yIGludGVyYWN0aXZlIGFwcGxpY2F0aW9ucworCis+IF9b
RWxtXShodHRwOi8vZWxtLWxhbmcub3JnLylfCisKKworIyMgTGVhcm5pbmcgRWxtCisKK1RoZSBb
RWxtIHdlYnNpdGVdKGh0dHA6Ly9lbG0tbGFuZy5vcmcvKSBpcyBhIGdyZWF0IHJlc291cmNlIGZv
ciBnZXR0aW5nCitzdGFydGVkLgorCitIZXJlIGFyZSBzb21lIGxpbmtzIHlvdSBtYXkgZmluZCBo
ZWxwZnVsOgorCisqIFtUcnkgRWxtXShodHRwOi8vZWxtLWxhbmcub3JnL3RyeSkKKyogW0xlYXJu
IEVsbV0oaHR0cDovL2VsbS1sYW5nLm9yZy9MZWFybi5lbG0pCisqIFtBbiBJbnRyb2R1Y3Rpb24g
dG8gRWxtXShodHRwOi8vZ3VpZGUuZWxtLWxhbmcub3JnLykKKworR2V0IGhlbHAgZnJvbSBvdGhl
ciBFbG0gdXNlcnM6CisKKyogW2VsbS1kaXNjdXNzIG1haWxpbmcgbGlzdF0oaHR0cHM6Ly9ncm91
cHMuZ29vZ2xlLmNvbS9mb3J1bS8/ZnJvbWdyb3VwcyMhZm9ydW0vZWxtLWRpc2N1c3MpCisqIFtA
ZWxtbGFuZyBvbiBUd2l0dGVyXShodHRwczovL3R3aXR0ZXIuY29tL2VsbWxhbmcpCisqIFtAY3ph
cGxpYyBvbiBUd2l0dGVyXShodHRwczovL3R3aXR0ZXIuY29tL2N6YXBsaWMpCisKK19JZiB5b3Ug
aGF2ZSBvdGhlciBoZWxwZnVsIGxpbmtzIHRvIHNoYXJlLCBvciBmaW5kIGFueSBvZiB0aGUgbGlu
a3MgYWJvdmUgbm8gbG9uZ2VyIHdvcmssIHBsZWFzZSBbbGV0IHVzIGtub3ddKGh0dHBzOi8vZ2l0
aHViLmNvbS90YXN0ZWpzL3RvZG9tdmMvaXNzdWVzKS5fCisKKworCisjIyBQcm9qZWN0IFN0cnVj
dHVyZQorCitBbGwgb2YgdGhlIEVsbSBjb2RlIGxpdmVzIGluIGBUb2RvLmVsbWAgYW5kIGBUb2Rv
L1Rhc2suZWxtYCBhbmQgcmVsaWVzCitvbiB0aGUgW2VsbS1odG1sXVtdIGFuZCBbZWxtLW5hdmln
YXRpb25dW10gcGFja2FnZXMuCisKK1tlbG0taHRtbF06IGh0dHA6Ly9wYWNrYWdlLmVsbS1sYW5n
Lm9yZy9wYWNrYWdlcy9lbG0tbGFuZy9odG1sL2xhdGVzdC8KK1tlbG0tbmF2aWdhdGlvbl06IGh0
dHA6Ly9wYWNrYWdlLmVsbS1sYW5nLm9yZy9wYWNrYWdlcy9lbG0tbGFuZy9uYXZpZ2F0aW9uL2xh
dGVzdC8KKworVGhlcmUgYWxzbyBpcyBhIHBvcnQgaGFuZGxlciBzZXQgdXAgaW4gYGluZGV4Lmh0
bWxgIHRvIHNldCB0aGUgZm9jdXMgb24KK3BhcnRpY3VsYXIgdGV4dCBmaWVsZHMgd2hlbiBuZWNl
c3NhcnkuCisKKyMjIEJ1aWxkIEluc3RydWN0aW9ucworCitZb3UgbmVlZCB0byBpbnN0YWxsIFtl
bG1dKGh0dHA6Ly9lbG0tbGFuZy5vcmcvaW5zdGFsbCkKK29uIHlvdXIgbWFjaGluZSBmaXJzdC4K
KworUnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgZnJvbSB0aGUgcm9vdCBvZiB0aGlzIHByb2pl
Y3Q6CisKK2BgYGJhc2gKK2VsbS1wYWNrYWdlIGluc3RhbGwgLXkKK2VsbS1tYWtlIFRvZG8uZWxt
IC0tb3V0cHV0IGJ1aWxkL2VsbS5qcworYGBgCisKK1RoZW4gb3BlbiBgaW5kZXguaHRtbGAgaW4g
eW91ciBicm93c2VyIQorCisjIyBDcmVkaXQKKworVGhpcyBUb2RvTVZDIGFwcGxpY2F0aW9uIHdh
cyBjcmVhdGVkIGJ5IFtAZXZhbmN6XShodHRwczovL2dpdGh1Yi5jb20vZXZhbmN6KSwgYW5kIGlt
cG9ydGVkIGludG8gVGFzdGVKUyBieSBbQHBhc3N5XShodHRwczovL3R3aXR0ZXIuY29tL3Bhc3N5
KS4gVGhlIFNwZWVkb21ldGVyIHZlcnNpb24gaXMgYnkgQWRkeSBPc21hbmkuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309848</attachid>
            <date>2017-05-11 19:32:58 -0700</date>
            <delta_ts>2017-05-11 19:50:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171464-20170511193258.patch</filename>
            <type>text/plain</type>
            <size>377861</size>
            <attacher name="Addy Osmani">addyo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1OTYwCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGJmMTgxODE2ODc2
NDhkODA3YzE2NjQyOWQxM2MzMDZkMGM1NTk5NjQuLjAyOGE0YzFlYTczYTEzNzc4MmIzMjM3ODdm
MTkxZjY3NDc5NWEyNzggMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTctMDUt
MTEgIEFkZHkgT3NtYW5pICA8YWRkeW9zbWFuaUBnbWFpbC5jb20+CisKKyAgICAgICAgU3BlZWRv
bWV0ZXI6IEFkZCBhbiBFbG0gVG9kb01WQyBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxNDY0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BlZWRvbWV0ZXI6IEFkZCBFbG0gVG9k
b01WQyBpbXBsZW1lbnRhdGlvbgorCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvZnVuY3Rpb25hbC1wcm9nLWV4YW1wbGVzL2VsbS9Ub2RvLmVsbTogQWRkZWQuCisgICAg
ICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZnVuY3Rpb25hbC1wcm9nLWV4YW1w
bGVzL2VsbS9Ub2RvL1Rhc2suZWxtOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9mdW5jdGlvbmFsLXByb2ctZXhhbXBsZXMvZWxtL2Rpc3QvZWxtLmpzOiBB
ZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlvbmFs
LXByb2ctZXhhbXBsZXMvZWxtL2luZGV4Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2Z1bmN0aW9uYWwtcHJvZy1leGFtcGxlcy9lbG0vbm9kZV9t
b2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3M6IEFkZGVkLgorICAgICAgICAqIFNwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Z1bmN0aW9uYWwtcHJvZy1leGFtcGxlcy9lbG0vbm9k
ZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlvbmFsLXByb2ctZXhhbXBsZXMvZWxtL25v
ZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlvbmFsLXByb2ctZXhhbXBsZXMvZWxtL3Bh
Y2thZ2UuanNvbjogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZnVuY3Rpb25hbC1wcm9nLWV4YW1wbGVzL2VsbS9yZWFkbWUubWQ6IEFkZGVkLgorCiAyMDE3
LTA0LTI3ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIEFk
ZCBiYWNrIHRlc3RzIGluYWR2ZXJ0ZW50bHkgZGVsZXRlZCBpbiByMjA1MDMyLgpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlv
bmFsLXByb2ctZXhhbXBsZXMvZWxtL1RvZG8uZWxtIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlvbmFsLXByb2ctZXhhbXBsZXMvZWxtL1RvZG8u
ZWxtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmJmMWQzOWRiMzE3MTlmOTUyZDMyMTllZDZlZDA3MDE5MTRiNWFhNmYK
LS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2Z1bmN0aW9uYWwtcHJvZy1leGFtcGxlcy9lbG0vVG9kby5lbG0KQEAgLTAsMCAr
MSwzOTAgQEAKK3BvcnQgbW9kdWxlIFRvZG8gZXhwb3NpbmcgKC4uKQorCit7LXwgVG9kb01WQyBp
bXBsZW1lbnRlZCBpbiBFbG0sIHVzaW5nIHBsYWluIEhUTUwgYW5kIENTUyBmb3IgcmVuZGVyaW5n
LgorCitUaGlzIGFwcGxpY2F0aW9uIGlzIGJyb2tlbiB1cCBpbnRvIGZvdXIgZGlzdGluY3QgcGFy
dHM6CisKKyAgMS4gTW9kZWwgIC0gYSBmdWxsIGRlc2NyaXB0aW9uIG9mIHRoZSBhcHBsaWNhdGlv
biBhcyBkYXRhCisgIDIuIFVwZGF0ZSAtIGEgd2F5IHRvIHVwZGF0ZSB0aGUgbW9kZWwgYmFzZWQg
b24gdXNlciBhY3Rpb25zCisgIDMuIFZpZXcgICAtIGEgd2F5IHRvIHZpc3VhbGl6ZSBvdXIgbW9k
ZWwgd2l0aCBIVE1MCisKK1RoaXMgcHJvZ3JhbSBpcyBub3QgcGFydGljdWxhcmx5IGxhcmdlLCBz
byBkZWZpbml0ZWx5IHNlZSB0aGUgZm9sbG93aW5nCitkb2N1bWVudCBmb3Igbm90ZXMgb24gc3Ry
dWN0dXJpbmcgbW9yZSBjb21wbGV4IEdVSXMgd2l0aCBFbG06CitodHRwOi8vZ3VpZGUuZWxtLWxh
bmcub3JnL2FyY2hpdGVjdHVyZS8KKy19CisKK2ltcG9ydCBEb20KK2ltcG9ydCBUYXNrCitpbXBv
cnQgSHRtbCBleHBvc2luZyAoLi4pCitpbXBvcnQgSHRtbC5BdHRyaWJ1dGVzIGV4cG9zaW5nICgu
LikKK2ltcG9ydCBIdG1sLkV2ZW50cyBleHBvc2luZyAoLi4pCitpbXBvcnQgSHRtbC5MYXp5IGV4
cG9zaW5nIChsYXp5LCBsYXp5MikKK2ltcG9ydCBIdG1sLkFwcAoraW1wb3J0IE5hdmlnYXRpb24g
ZXhwb3NpbmcgKFBhcnNlcikKK2ltcG9ydCBTdHJpbmcKK2ltcG9ydCBTdHJpbmcuRXh0cmEKK2lt
cG9ydCBUb2RvLlRhc2sKKworCistLSBNT0RFTAorLS0gVGhlIGZ1bGwgYXBwbGljYXRpb24gc3Rh
dGUgb2Ygb3VyIHRvZG8gYXBwLgorCisKK3R5cGUgYWxpYXMgTW9kZWwgPQorICAgIHsgdGFza3Mg
OiBMaXN0IFRvZG8uVGFzay5Nb2RlbAorICAgICwgZmllbGQgOiBTdHJpbmcKKyAgICAsIHVpZCA6
IEludAorICAgICwgdmlzaWJpbGl0eSA6IFN0cmluZworICAgIH0KKworCit0eXBlIGFsaWFzIEZs
YWdzID0KKyAgICBNYXliZSBNb2RlbAorCisKK2VtcHR5TW9kZWwgOiBNb2RlbAorZW1wdHlNb2Rl
bCA9CisgICAgeyB0YXNrcyA9IFtdCisgICAgLCB2aXNpYmlsaXR5ID0gIkFsbCIKKyAgICAsIGZp
ZWxkID0gIiIKKyAgICAsIHVpZCA9IDAKKyAgICB9CisKKworCistLSBVUERBVEUKKy0tIEEgZGVz
Y3JpcHRpb24gb2YgdGhlIGtpbmRzIG9mIGFjdGlvbnMgdGhhdCBjYW4gYmUgcGVyZm9ybWVkIG9u
IHRoZSBtb2RlbCBvZgorLS0gb3VyIGFwcGxpY2F0aW9uLiBTZWUgdGhlIGZvbGxvd2luZyBwb3N0
IGZvciBtb3JlIGluZm8gb24gdGhpcyBwYXR0ZXJuIGFuZAorLS0gc29tZSBhbHRlcm5hdGl2ZXM6
IGh0dHA6Ly9ndWlkZS5lbG0tbGFuZy5vcmcvYXJjaGl0ZWN0dXJlLworCisKK3R5cGUgTXNnCisg
ICAgPSBOb09wCisgICAgfCBVcGRhdGVGaWVsZCBTdHJpbmcKKyAgICB8IEFkZAorICAgIHwgVXBk
YXRlVGFzayAoIEludCwgVG9kby5UYXNrLk1zZyApCisgICAgfCBEZWxldGVDb21wbGV0ZQorICAg
IHwgQ2hlY2tBbGwgQm9vbAorICAgIHwgQ2hhbmdlVmlzaWJpbGl0eSBTdHJpbmcKKworCisKKy0t
IEhvdyB3ZSB1cGRhdGUgb3VyIE1vZGVsIG9uIGFueSBnaXZlbiBNZXNzYWdlCisKKwordXBkYXRl
IDogTXNnIC0+IE1vZGVsIC0+ICggTW9kZWwsIENtZCBNc2cgKQordXBkYXRlIG1zZyBtb2RlbCA9
CisgICAgY2FzZSBEZWJ1Zy5sb2cgIk1FU1NBR0U6ICIgbXNnIG9mCisgICAgICAgIE5vT3AgLT4K
KyAgICAgICAgICAgICggbW9kZWwsIENtZC5ub25lICkKKworICAgICAgICBVcGRhdGVGaWVsZCBz
dHIgLT4KKyAgICAgICAgICAgIGxldAorICAgICAgICAgICAgICAgIG5ld01vZGVsID0KKyAgICAg
ICAgICAgICAgICAgICAgeyBtb2RlbCB8IGZpZWxkID0gc3RyIH0KKyAgICAgICAgICAgIGluCisg
ICAgICAgICAgICAgICAgKCBuZXdNb2RlbCwgc2F2ZSBtb2RlbCApCisKKyAgICAgICAgQWRkIC0+
CisgICAgICAgICAgICBsZXQKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9CisgICAgICAg
ICAgICAgICAgICAgIFN0cmluZy50cmltIG1vZGVsLmZpZWxkCisKKyAgICAgICAgICAgICAgICBu
ZXdNb2RlbCA9CisgICAgICAgICAgICAgICAgICAgIGlmIFN0cmluZy5pc0VtcHR5IGRlc2NyaXB0
aW9uIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsCisgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgbW9kZWwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8IHVpZCA9IG1vZGVsLnVpZCArIDEKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIGZpZWxkID0gIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHRhc2tz
ID0gbW9kZWwudGFza3MgKysgWyBUb2RvLlRhc2suaW5pdCBkZXNjcmlwdGlvbiBtb2RlbC51aWQg
XQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaW4KKyAgICAgICAgICAg
ICAgICAoIG5ld01vZGVsLCBzYXZlIG5ld01vZGVsICkKKworICAgICAgICBVcGRhdGVUYXNrICgg
aWQsIHRhc2tNc2cgKSAtPgorICAgICAgICAgICAgbGV0CisgICAgICAgICAgICAgICAgdXBkYXRl
VGFzayB0ID0KKyAgICAgICAgICAgICAgICAgICAgaWYgdC5pZCA9PSBpZCB0aGVuCisgICAgICAg
ICAgICAgICAgICAgICAgICBUb2RvLlRhc2sudXBkYXRlIHRhc2tNc2cgdAorICAgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBKdXN0IHQKKworICAgICAgICAg
ICAgICAgIG5ld01vZGVsID0KKyAgICAgICAgICAgICAgICAgICAgeyBtb2RlbCB8IHRhc2tzID0g
TGlzdC5maWx0ZXJNYXAgdXBkYXRlVGFzayBtb2RlbC50YXNrcyB9CisgICAgICAgICAgICBpbgor
ICAgICAgICAgICAgICAgIGNhc2UgdGFza01zZyBvZgorICAgICAgICAgICAgICAgICAgICBUb2Rv
LlRhc2suRm9jdXMgZWxlbWVudElkIC0+CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdNb2Rl
bCAhIFsgc2F2ZSBuZXdNb2RlbCwgZm9jdXNUYXNrIGVsZW1lbnRJZCBdCisKKyAgICAgICAgICAg
ICAgICAgICAgXyAtPgorICAgICAgICAgICAgICAgICAgICAgICAgKCBuZXdNb2RlbCwgc2F2ZSBu
ZXdNb2RlbCApCisKKyAgICAgICAgRGVsZXRlQ29tcGxldGUgLT4KKyAgICAgICAgICAgIGxldAor
ICAgICAgICAgICAgICAgIG5ld01vZGVsID0KKyAgICAgICAgICAgICAgICAgICAgeyBtb2RlbAor
ICAgICAgICAgICAgICAgICAgICAgICAgfCB0YXNrcyA9IExpc3QuZmlsdGVyIChub3QgPDwgLmNv
bXBsZXRlZCkgbW9kZWwudGFza3MKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
aW4KKyAgICAgICAgICAgICAgICAoIG5ld01vZGVsLCBzYXZlIG5ld01vZGVsICkKKworICAgICAg
ICBDaGVja0FsbCBib29sIC0+CisgICAgICAgICAgICBsZXQKKyAgICAgICAgICAgICAgICB1cGRh
dGVUYXNrIHQgPQorICAgICAgICAgICAgICAgICAgICB7IHQgfCBjb21wbGV0ZWQgPSBib29sIH0K
KworICAgICAgICAgICAgICAgIG5ld01vZGVsID0KKyAgICAgICAgICAgICAgICAgICAgeyBtb2Rl
bCB8IHRhc2tzID0gTGlzdC5tYXAgdXBkYXRlVGFzayBtb2RlbC50YXNrcyB9CisgICAgICAgICAg
ICBpbgorICAgICAgICAgICAgICAgICggbmV3TW9kZWwsIHNhdmUgbmV3TW9kZWwgKQorCisgICAg
ICAgIENoYW5nZVZpc2liaWxpdHkgdmlzaWJpbGl0eSAtPgorICAgICAgICAgICAgbGV0CisgICAg
ICAgICAgICAgICAgbmV3TW9kZWwgPQorICAgICAgICAgICAgICAgICAgICB7IG1vZGVsIHwgdmlz
aWJpbGl0eSA9IHZpc2liaWxpdHkgfQorICAgICAgICAgICAgaW4KKyAgICAgICAgICAgICAgICAo
IG5ld01vZGVsLCBzYXZlIG1vZGVsICkKKworCitmb2N1c1Rhc2sgOiBTdHJpbmcgLT4gQ21kIE1z
ZworZm9jdXNUYXNrIGVsZW1lbnRJZCA9CisgICAgVGFzay5wZXJmb3JtIChcXyAtPiBOb09wKSAo
XF8gLT4gTm9PcCkgKERvbS5mb2N1cyBlbGVtZW50SWQpCisKKworCistLSBWSUVXCisKKwordmll
dyA6IE1vZGVsIC0+IEh0bWwgTXNnCit2aWV3IG1vZGVsID0KKyAgICBkaXYKKyAgICAgICAgWyBj
bGFzcyAidG9kb212Yy13cmFwcGVyIgorICAgICAgICAsIHN0eWxlIFsgKCAidmlzaWJpbGl0eSIs
ICJoaWRkZW4iICkgXQorICAgICAgICBdCisgICAgICAgIFsgc2VjdGlvbgorICAgICAgICAgICAg
WyBjbGFzcyAidG9kb2FwcCIgXQorICAgICAgICAgICAgWyBsYXp5IHRhc2tFbnRyeSBtb2RlbC5m
aWVsZAorICAgICAgICAgICAgLCBsYXp5MiB0YXNrTGlzdCBtb2RlbC52aXNpYmlsaXR5IG1vZGVs
LnRhc2tzCisgICAgICAgICAgICAsIGxhenkyIGNvbnRyb2xzIG1vZGVsLnZpc2liaWxpdHkgbW9k
ZWwudGFza3MKKyAgICAgICAgICAgIF0KKyAgICAgICAgLCBpbmZvRm9vdGVyCisgICAgICAgIF0K
KworCit0YXNrRW50cnkgOiBTdHJpbmcgLT4gSHRtbCBNc2cKK3Rhc2tFbnRyeSB0YXNrID0KKyAg
ICBoZWFkZXIKKyAgICAgICAgWyBjbGFzcyAiaGVhZGVyIiBdCisgICAgICAgIFsgaDEgW10gWyB0
ZXh0ICJ0b2RvcyIgXQorICAgICAgICAsIGlucHV0CisgICAgICAgICAgICBbIGNsYXNzICJuZXct
dG9kbyIKKyAgICAgICAgICAgICwgcGxhY2Vob2xkZXIgIldoYXQgbmVlZHMgdG8gYmUgZG9uZT8i
CisgICAgICAgICAgICAsIGF1dG9mb2N1cyBUcnVlCisgICAgICAgICAgICAsIHZhbHVlIHRhc2sK
KyAgICAgICAgICAgICwgbmFtZSAibmV3VG9kbyIKKyAgICAgICAgICAgICwgb25JbnB1dCBVcGRh
dGVGaWVsZAorICAgICAgICAgICAgLCBUb2RvLlRhc2sub25GaW5pc2ggQWRkIE5vT3AKKyAgICAg
ICAgICAgIF0KKyAgICAgICAgICAgIFtdCisgICAgICAgIF0KKworCit0YXNrTGlzdCA6IFN0cmlu
ZyAtPiBMaXN0IFRvZG8uVGFzay5Nb2RlbCAtPiBIdG1sIE1zZwordGFza0xpc3QgdmlzaWJpbGl0
eSB0YXNrcyA9CisgICAgbGV0CisgICAgICAgIGlzVmlzaWJsZSB0b2RvID0KKyAgICAgICAgICAg
IGNhc2UgdmlzaWJpbGl0eSBvZgorICAgICAgICAgICAgICAgICJDb21wbGV0ZWQiIC0+CisgICAg
ICAgICAgICAgICAgICAgIHRvZG8uY29tcGxldGVkCisKKyAgICAgICAgICAgICAgICAiQWN0aXZl
IiAtPgorICAgICAgICAgICAgICAgICAgICBub3QgdG9kby5jb21wbGV0ZWQKKworICAgICAgICAg
ICAgICAgIC0tICJBbGwiCisgICAgICAgICAgICAgICAgXyAtPgorICAgICAgICAgICAgICAgICAg
ICBUcnVlCisKKyAgICAgICAgYWxsQ29tcGxldGVkID0KKyAgICAgICAgICAgIExpc3QuYWxsIC5j
b21wbGV0ZWQgdGFza3MKKworICAgICAgICBjc3NWaXNpYmlsaXR5ID0KKyAgICAgICAgICAgIGlm
IExpc3QuaXNFbXB0eSB0YXNrcyB0aGVuCisgICAgICAgICAgICAgICAgImhpZGRlbiIKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAidmlzaWJsZSIKKyAgICBpbgorICAgICAgICBz
ZWN0aW9uCisgICAgICAgICAgICBbIGNsYXNzICJtYWluIgorICAgICAgICAgICAgLCBzdHlsZSBb
ICggInZpc2liaWxpdHkiLCBjc3NWaXNpYmlsaXR5ICkgXQorICAgICAgICAgICAgXQorICAgICAg
ICAgICAgWyBpbnB1dAorICAgICAgICAgICAgICAgIFsgY2xhc3MgInRvZ2dsZS1hbGwiCisgICAg
ICAgICAgICAgICAgLCB0eXBlJyAiY2hlY2tib3giCisgICAgICAgICAgICAgICAgLCBuYW1lICJ0
b2dnbGUiCisgICAgICAgICAgICAgICAgLCBjaGVja2VkIGFsbENvbXBsZXRlZAorICAgICAgICAg
ICAgICAgICwgb25DbGljayAoQ2hlY2tBbGwgKG5vdCBhbGxDb21wbGV0ZWQpKQorICAgICAgICAg
ICAgICAgIF0KKyAgICAgICAgICAgICAgICBbXQorICAgICAgICAgICAgLCBsYWJlbAorICAgICAg
ICAgICAgICAgIFsgZm9yICJ0b2dnbGUtYWxsIiBdCisgICAgICAgICAgICAgICAgWyB0ZXh0ICJN
YXJrIGFsbCBhcyBjb21wbGV0ZSIgXQorICAgICAgICAgICAgLCB1bAorICAgICAgICAgICAgICAg
IFsgY2xhc3MgInRvZG8tbGlzdCIgXQorICAgICAgICAgICAgICAgIChMaXN0Lm1hcAorICAgICAg
ICAgICAgICAgICAgICAoXHRhc2sgLT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGxldAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGFzay5pZAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFza1ZpZXcgPQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb2RvLlRhc2sudmlldyB0YXNrCisgICAg
ICAgICAgICAgICAgICAgICAgICBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEh0bWwu
QXBwLm1hcCAoXG1zZyAtPiBVcGRhdGVUYXNrICggaWQsIG1zZyApKSB0YXNrVmlldworICAgICAg
ICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgIChMaXN0LmZpbHRlciBpc1Zpc2li
bGUgdGFza3MpCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgXQorCisKK2NvbnRyb2xz
IDogU3RyaW5nIC0+IExpc3QgVG9kby5UYXNrLk1vZGVsIC0+IEh0bWwgTXNnCitjb250cm9scyB2
aXNpYmlsaXR5IHRhc2tzID0KKyAgICBsZXQKKyAgICAgICAgdGFza3NDb21wbGV0ZWQgPQorICAg
ICAgICAgICAgTGlzdC5sZW5ndGggKExpc3QuZmlsdGVyIC5jb21wbGV0ZWQgdGFza3MpCisKKyAg
ICAgICAgdGFza3NMZWZ0ID0KKyAgICAgICAgICAgIExpc3QubGVuZ3RoIHRhc2tzIC0gdGFza3ND
b21wbGV0ZWQKKworICAgICAgICBpdGVtXyA9CisgICAgICAgICAgICBpZiB0YXNrc0xlZnQgPT0g
MSB0aGVuCisgICAgICAgICAgICAgICAgIiBpdGVtIgorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICIgaXRlbXMiCisgICAgaW4KKyAgICAgICAgZm9vdGVyCisgICAgICAgICAgICBb
IGNsYXNzICJmb290ZXIiCisgICAgICAgICAgICAsIGhpZGRlbiAoTGlzdC5pc0VtcHR5IHRhc2tz
KQorICAgICAgICAgICAgXQorICAgICAgICAgICAgWyBzcGFuCisgICAgICAgICAgICAgICAgWyBj
bGFzcyAidG9kby1jb3VudCIgXQorICAgICAgICAgICAgICAgIFsgc3Ryb25nIFtdIFsgdGV4dCAo
dG9TdHJpbmcgdGFza3NMZWZ0KSBdCisgICAgICAgICAgICAgICAgLCB0ZXh0IChpdGVtXyArKyAi
IGxlZnQiKQorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICwgdWwKKyAgICAgICAgICAg
ICAgICBbIGNsYXNzICJmaWx0ZXJzIiBdCisgICAgICAgICAgICAgICAgWyB2aXNpYmlsaXR5U3dh
cCAiIy8iICJBbGwiIHZpc2liaWxpdHkKKyAgICAgICAgICAgICAgICAsIHRleHQgIiAiCisgICAg
ICAgICAgICAgICAgLCB2aXNpYmlsaXR5U3dhcCAiIy9hY3RpdmUiICJBY3RpdmUiIHZpc2liaWxp
dHkKKyAgICAgICAgICAgICAgICAsIHRleHQgIiAiCisgICAgICAgICAgICAgICAgLCB2aXNpYmls
aXR5U3dhcCAiIy9jb21wbGV0ZWQiICJDb21wbGV0ZWQiIHZpc2liaWxpdHkKKyAgICAgICAgICAg
ICAgICBdCisgICAgICAgICAgICAsIGJ1dHRvbgorICAgICAgICAgICAgICAgIFsgY2xhc3MgImNs
ZWFyLWNvbXBsZXRlZCIKKyAgICAgICAgICAgICAgICAsIGhpZGRlbiAodGFza3NDb21wbGV0ZWQg
PT0gMCkKKyAgICAgICAgICAgICAgICAsIG9uQ2xpY2sgRGVsZXRlQ29tcGxldGUKKyAgICAgICAg
ICAgICAgICBdCisgICAgICAgICAgICAgICAgWyB0ZXh0ICgiQ2xlYXIgY29tcGxldGVkICgiICsr
IHRvU3RyaW5nIHRhc2tzQ29tcGxldGVkICsrICIpIikgXQorICAgICAgICAgICAgXQorCisKK3Zp
c2liaWxpdHlTd2FwIDogU3RyaW5nIC0+IFN0cmluZyAtPiBTdHJpbmcgLT4gSHRtbCBNc2cKK3Zp
c2liaWxpdHlTd2FwIHVyaSB2aXNpYmlsaXR5IGFjdHVhbFZpc2liaWxpdHkgPQorICAgIGxldAor
ICAgICAgICBjbGFzc05hbWUgPQorICAgICAgICAgICAgaWYgdmlzaWJpbGl0eSA9PSBhY3R1YWxW
aXNpYmlsaXR5IHRoZW4KKyAgICAgICAgICAgICAgICAic2VsZWN0ZWQiCisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgIiIKKyAgICBpbgorICAgICAgICBsaQorICAgICAgICAgICAg
WyBvbkNsaWNrIChDaGFuZ2VWaXNpYmlsaXR5IHZpc2liaWxpdHkpIF0KKyAgICAgICAgICAgIFsg
YSBbIGNsYXNzIGNsYXNzTmFtZSwgaHJlZiB1cmkgXSBbIHRleHQgdmlzaWJpbGl0eSBdIF0KKwor
CitpbmZvRm9vdGVyIDogSHRtbCBtc2cKK2luZm9Gb290ZXIgPQorICAgIGZvb3RlcgorICAgICAg
ICBbIGNsYXNzICJpbmZvIiBdCisgICAgICAgIFsgcCBbXSBbIHRleHQgIkRvdWJsZS1jbGljayB0
byBlZGl0IGEgdG9kbyIgXQorICAgICAgICAsIHAgW10KKyAgICAgICAgICAgIFsgdGV4dCAiV3Jp
dHRlbiBieSAiCisgICAgICAgICAgICAsIGEgWyBocmVmICJodHRwczovL2dpdGh1Yi5jb20vZXZh
bmN6IiBdIFsgdGV4dCAiRXZhbiBDemFwbGlja2kiIF0KKyAgICAgICAgICAgIF0KKyAgICAgICAg
LCBwIFtdCisgICAgICAgICAgICBbIHRleHQgIlBhcnQgb2YgIgorICAgICAgICAgICAgLCBhIFsg
aHJlZiAiaHR0cDovL3RvZG9tdmMuY29tIiBdIFsgdGV4dCAiVG9kb01WQyIgXQorICAgICAgICAg
ICAgXQorICAgICAgICBdCisKKworCistLSB3aXJlIHRoZSBlbnRpcmUgYXBwbGljYXRpb24gdG9n
ZXRoZXIKKworCittYWluIDogUHJvZ3JhbSBGbGFncworbWFpbiA9CisgICAgTmF2aWdhdGlvbi5w
cm9ncmFtV2l0aEZsYWdzIHVybFBhcnNlcgorICAgICAgICB7IHVybFVwZGF0ZSA9IHVybFVwZGF0
ZQorICAgICAgICAsIHZpZXcgPSB2aWV3CisgICAgICAgICwgaW5pdCA9IGluaXQKKyAgICAgICAg
LCB1cGRhdGUgPSB1cGRhdGUKKyAgICAgICAgLCBzdWJzY3JpcHRpb25zID0gc3Vic2NyaXB0aW9u
cworICAgICAgICB9CisKKworCistLSBVUkwgUEFSU0VSUyAtIGNoZWNrIG91dCBldmFuY3ovdXJs
LXBhcnNlciBmb3IgZmFuY2llciBVUkwgcGFyc2luZworCisKK3RvVXJsIDogU3RyaW5nIC0+IFN0
cmluZwordG9VcmwgdmlzaWJpbGl0eSA9CisgICAgIiMvIiArKyBTdHJpbmcudG9Mb3dlciB2aXNp
YmlsaXR5CisKKworZnJvbVVybCA6IFN0cmluZyAtPiBNYXliZSBTdHJpbmcKK2Zyb21VcmwgaGFz
aCA9CisgICAgbGV0CisgICAgICAgIGNsZWFuSGFzaCA9CisgICAgICAgICAgICBTdHJpbmcuZHJv
cExlZnQgMiBoYXNoCisgICAgaW4KKyAgICAgICAgaWYgKExpc3QubWVtYmVyIGNsZWFuSGFzaCBb
ICJhbGwiLCAiYWN0aXZlIiwgImNvbXBsZXRlZCIgXSkgPT0gVHJ1ZSB0aGVuCisgICAgICAgICAg
ICBKdXN0IGNsZWFuSGFzaAorICAgICAgICBlbHNlCisgICAgICAgICAgICBOb3RoaW5nCisKKwor
dXJsUGFyc2VyIDogUGFyc2VyIChNYXliZSBTdHJpbmcpCit1cmxQYXJzZXIgPQorICAgIE5hdmln
YXRpb24ubWFrZVBhcnNlciAoZnJvbVVybCA8PCAuaGFzaCkKKworCit7LXwgVGhlIFVSTCBpcyB0
dXJuZWQgaW50byBhIE1heWJlIHZhbHVlLiBJZiB0aGUgVVJMIGlzIHZhbGlkLCB3ZSBqdXN0IHVw
ZGF0ZQorb3VyIG1vZGVsIHdpdGggdGhlIG5ldyB2aXNpYmlsaXR5IHNldHRpbmdzLiBJZiBpdCBp
cyBub3QgYSB2YWxpZCBVUkwsCit3ZSBzZXQgdGhlIHZpc2liaWxpdHkgZmlsdGVyIHRvIHNob3cg
YWxsIHRhc2tzLgorLX0KK3VybFVwZGF0ZSA6IE1heWJlIFN0cmluZyAtPiBNb2RlbCAtPiAoIE1v
ZGVsLCBDbWQgTXNnICkKK3VybFVwZGF0ZSByZXN1bHQgbW9kZWwgPQorICAgIGNhc2UgcmVzdWx0
IG9mCisgICAgICAgIEp1c3QgdmlzaWJpbGl0eSAtPgorICAgICAgICAgICAgdXBkYXRlIChDaGFu
Z2VWaXNpYmlsaXR5IChTdHJpbmcuRXh0cmEudG9TZW50ZW5jZUNhc2UgdmlzaWJpbGl0eSkpIG1v
ZGVsCisKKyAgICAgICAgTm90aGluZyAtPgorICAgICAgICAgICAgdXBkYXRlIChDaGFuZ2VWaXNp
YmlsaXR5ICJBbGwiKSBtb2RlbAorCisKK2luaXQgOiBGbGFncyAtPiBNYXliZSBTdHJpbmcgLT4g
KCBNb2RlbCwgQ21kIE1zZyApCitpbml0IGZsYWdzIHVybCA9CisgICAgdXJsVXBkYXRlIHVybCAo
TWF5YmUud2l0aERlZmF1bHQgZW1wdHlNb2RlbCBmbGFncykKKworCisKKy0tIGludGVyYWN0aW9u
cyB3aXRoIGxvY2FsU3RvcmFnZQorCisKK3BvcnQgc2F2ZSA6IE1vZGVsIC0+IENtZCBtc2cKKwor
CitzdWJzY3JpcHRpb25zIDogTW9kZWwgLT4gU3ViIE1zZworc3Vic2NyaXB0aW9ucyBtb2RlbCA9
CisgICAgU3ViLm5vbmUKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvZnVuY3Rpb25hbC1wcm9nLWV4YW1wbGVzL2VsbS9Ub2RvL1Rhc2su
ZWxtIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5j
dGlvbmFsLXByb2ctZXhhbXBsZXMvZWxtL1RvZG8vVGFzay5lbG0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjM1ZjYx
NjNkY2NkMWZjMGUwZTg5YThmMzliOTBmZThlMWViNDg0YQotLS0gL2Rldi9udWxsCisrKyBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZnVuY3Rpb25hbC1w
cm9nLWV4YW1wbGVzL2VsbS9Ub2RvL1Rhc2suZWxtCkBAIC0wLDAgKzEsMTUyIEBACittb2R1bGUg
VG9kby5UYXNrIGV4cG9zaW5nICguLikKKworaW1wb3J0IEh0bWwgZXhwb3NpbmcgKC4uKQoraW1w
b3J0IEh0bWwuQXR0cmlidXRlcyBleHBvc2luZyAoLi4pCitpbXBvcnQgSHRtbC5FdmVudHMgZXhw
b3NpbmcgKC4uKQoraW1wb3J0IEpzb24uRGVjb2RlCitpbXBvcnQgU3RyaW5nCisKKworLS0gTU9E
RUwKKworCit0eXBlIGFsaWFzIE1vZGVsID0KKyAgICB7IGRlc2NyaXB0aW9uIDogU3RyaW5nCisg
ICAgLCBjb21wbGV0ZWQgOiBCb29sCisgICAgLCBlZGl0cyA6IE1heWJlIFN0cmluZworICAgICwg
aWQgOiBJbnQKKyAgICB9CisKKworaW5pdCA6IFN0cmluZyAtPiBJbnQgLT4gTW9kZWwKK2luaXQg
ZGVzYyBpZCA9CisgICAgeyBkZXNjcmlwdGlvbiA9IGRlc2MKKyAgICAsIGNvbXBsZXRlZCA9IEZh
bHNlCisgICAgLCBlZGl0cyA9IE5vdGhpbmcKKyAgICAsIGlkID0gaWQKKyAgICB9CisKKworCist
LSBVUERBVEUKKworCit0eXBlIE1zZworICAgID0gRm9jdXMgU3RyaW5nCisgICAgfCBFZGl0IFN0
cmluZworICAgIHwgQ2FuY2VsCisgICAgfCBDb21taXQKKyAgICB8IENvbXBsZXRlZCBCb29sCisg
ICAgfCBEZWxldGUKKworCit1cGRhdGUgOiBNc2cgLT4gTW9kZWwgLT4gTWF5YmUgTW9kZWwKK3Vw
ZGF0ZSBtc2cgbW9kZWwgPQorICAgIGNhc2UgbXNnIG9mCisgICAgICAgIEZvY3VzIGVsZW1lbnRJ
ZCAtPgorICAgICAgICAgICAgSnVzdCB7IG1vZGVsIHwgZWRpdHMgPSBKdXN0IG1vZGVsLmRlc2Ny
aXB0aW9uIH0KKworICAgICAgICBFZGl0IGRlc2NyaXB0aW9uIC0+CisgICAgICAgICAgICBKdXN0
IHsgbW9kZWwgfCBlZGl0cyA9IEp1c3QgZGVzY3JpcHRpb24gfQorCisgICAgICAgIENhbmNlbCAt
PgorICAgICAgICAgICAgSnVzdCB7IG1vZGVsIHwgZWRpdHMgPSBOb3RoaW5nIH0KKworICAgICAg
ICBDb21taXQgLT4KKyAgICAgICAgICAgIGNhc2UgbW9kZWwuZWRpdHMgb2YKKyAgICAgICAgICAg
ICAgICBOb3RoaW5nIC0+CisgICAgICAgICAgICAgICAgICAgIEp1c3QgbW9kZWwKKworICAgICAg
ICAgICAgICAgIEp1c3QgcmF3RGVzY3JpcHRpb24gLT4KKyAgICAgICAgICAgICAgICAgICAgbGV0
CisgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU3RyaW5nLnRyaW0gcmF3RGVzY3JpcHRpb24KKyAgICAgICAgICAgICAgICAg
ICAgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIFN0cmluZy5pc0VtcHR5IGRlc2NyaXB0
aW9uIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RoaW5nCisgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSnVzdAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IG1vZGVsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IGVkaXRzID0gTm90aGluZworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICBDb21wbGV0ZWQgYm9vbCAtPgorICAgICAg
ICAgICAgSnVzdCB7IG1vZGVsIHwgY29tcGxldGVkID0gYm9vbCB9CisKKyAgICAgICAgRGVsZXRl
IC0+CisgICAgICAgICAgICBOb3RoaW5nCisKKworCistLSBWSUVXCisKKwordmlldyA6IE1vZGVs
IC0+IEh0bWwgTXNnCit2aWV3IG1vZGVsID0KKyAgICBsZXQKKyAgICAgICAgY2xhc3NOYW1lID0K
KyAgICAgICAgICAgIChpZiBtb2RlbC5jb21wbGV0ZWQgdGhlbgorICAgICAgICAgICAgICAgICJj
b21wbGV0ZWQgIgorICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAiIgorICAgICAg
ICAgICAgKQorICAgICAgICAgICAgICAgICsrIGNhc2UgbW9kZWwuZWRpdHMgb2YKKyAgICAgICAg
ICAgICAgICAgICAgSnVzdCBfIC0+CisgICAgICAgICAgICAgICAgICAgICAgICAiZWRpdGluZyIK
KworICAgICAgICAgICAgICAgICAgICBOb3RoaW5nIC0+CisgICAgICAgICAgICAgICAgICAgICAg
ICAiIgorCisgICAgICAgIGRlc2NyaXB0aW9uID0KKyAgICAgICAgICAgIE1heWJlLndpdGhEZWZh
dWx0IG1vZGVsLmRlc2NyaXB0aW9uIG1vZGVsLmVkaXRzCisKKyAgICAgICAgZWxlbWVudElkID0K
KyAgICAgICAgICAgICJ0b2RvLSIgKysgdG9TdHJpbmcgbW9kZWwuaWQKKyAgICBpbgorICAgICAg
ICBsaQorICAgICAgICAgICAgWyBjbGFzcyBjbGFzc05hbWUgXQorICAgICAgICAgICAgWyBkaXYK
KyAgICAgICAgICAgICAgICBbIGNsYXNzICJ2aWV3IiBdCisgICAgICAgICAgICAgICAgWyBpbnB1
dAorICAgICAgICAgICAgICAgICAgICBbIGNsYXNzICJ0b2dnbGUiCisgICAgICAgICAgICAgICAg
ICAgICwgdHlwZScgImNoZWNrYm94IgorICAgICAgICAgICAgICAgICAgICAsIGNoZWNrZWQgbW9k
ZWwuY29tcGxldGVkCisgICAgICAgICAgICAgICAgICAgICwgb25DbGljayAoQ29tcGxldGVkIChu
b3QgbW9kZWwuY29tcGxldGVkKSkKKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAg
ICAgICAgICBbXQorICAgICAgICAgICAgICAgICwgbGFiZWwKKyAgICAgICAgICAgICAgICAgICAg
WyBvbkRvdWJsZUNsaWNrIChGb2N1cyBlbGVtZW50SWQpIF0KKyAgICAgICAgICAgICAgICAgICAg
WyB0ZXh0IGRlc2NyaXB0aW9uIF0KKyAgICAgICAgICAgICAgICAsIGJ1dHRvbgorICAgICAgICAg
ICAgICAgICAgICBbIGNsYXNzICJkZXN0cm95IgorICAgICAgICAgICAgICAgICAgICAsIG9uQ2xp
Y2sgRGVsZXRlCisgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgW10K
KyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAsIGlucHV0CisgICAgICAgICAgICAgICAg
WyBjbGFzcyAiZWRpdCIKKyAgICAgICAgICAgICAgICAsIHZhbHVlIGRlc2NyaXB0aW9uCisgICAg
ICAgICAgICAgICAgLCBuYW1lICJ0aXRsZSIKKyAgICAgICAgICAgICAgICAsIGlkIChlbGVtZW50
SWQpCisgICAgICAgICAgICAgICAgLCBvbklucHV0IEVkaXQKKyAgICAgICAgICAgICAgICAsIG9u
Qmx1ciBDb21taXQKKyAgICAgICAgICAgICAgICAsIG9uRmluaXNoIENvbW1pdCBDYW5jZWwKKyAg
ICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgW10KKyAgICAgICAgICAgIF0KKworCitv
bkZpbmlzaCA6IG1zZyAtPiBtc2cgLT4gQXR0cmlidXRlIG1zZworb25GaW5pc2ggZW50ZXJNZXNz
YWdlIGVzY2FwZU1lc3NhZ2UgPQorICAgIGxldAorICAgICAgICBzZWxlY3Qga2V5ID0KKyAgICAg
ICAgICAgIGNhc2Uga2V5IG9mCisgICAgICAgICAgICAgICAgMTMgLT4KKyAgICAgICAgICAgICAg
ICAgICAgZW50ZXJNZXNzYWdlCisKKyAgICAgICAgICAgICAgICBfIC0+CisgICAgICAgICAgICAg
ICAgICAgIC0tIE5vdCBhICdmaW5pc2gnIGtleSwgc3VjaCBhcyBFTlRFUiBvciBFU0NBUEUKKyAg
ICAgICAgICAgICAgICAgICAgZXNjYXBlTWVzc2FnZQorICAgIGluCisgICAgICAgIG9uICJrZXlk
b3duIiAoSnNvbi5EZWNvZGUubWFwIHNlbGVjdCBrZXlDb2RlKQpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlvbmFsLXByb2ct
ZXhhbXBsZXMvZWxtL2Rpc3QvZWxtLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlvbmFsLXByb2ctZXhhbXBsZXMvZWxtL2Rpc3QvZWxtLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjU3Yjk3YzU0N2E5YzhmYmFiZGYwNTY5MzU2YjY3NDI2N2EwYmI0MGIKLS0t
IC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2Z1bmN0aW9uYWwtcHJvZy1leGFtcGxlcy9lbG0vZGlzdC9lbG0uanMKQEAgLTAsMCAr
MSwxMDM3MyBAQAorCisoZnVuY3Rpb24oKSB7CisndXNlIHN0cmljdCc7CisKK2Z1bmN0aW9uIEYy
KGZ1bikKK3sKKyAgZnVuY3Rpb24gd3JhcHBlcihhKSB7IHJldHVybiBmdW5jdGlvbihiKSB7IHJl
dHVybiBmdW4oYSxiKTsgfTsgfQorICB3cmFwcGVyLmFyaXR5ID0gMjsKKyAgd3JhcHBlci5mdW5j
ID0gZnVuOworICByZXR1cm4gd3JhcHBlcjsKK30KKworZnVuY3Rpb24gRjMoZnVuKQoreworICBm
dW5jdGlvbiB3cmFwcGVyKGEpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oYikgeyByZXR1cm4gZnVu
Y3Rpb24oYykgeyByZXR1cm4gZnVuKGEsIGIsIGMpOyB9OyB9OworICB9CisgIHdyYXBwZXIuYXJp
dHkgPSAzOworICB3cmFwcGVyLmZ1bmMgPSBmdW47CisgIHJldHVybiB3cmFwcGVyOworfQorCitm
dW5jdGlvbiBGNChmdW4pCit7CisgIGZ1bmN0aW9uIHdyYXBwZXIoYSkgeyByZXR1cm4gZnVuY3Rp
b24oYikgeyByZXR1cm4gZnVuY3Rpb24oYykgeworICAgIHJldHVybiBmdW5jdGlvbihkKSB7IHJl
dHVybiBmdW4oYSwgYiwgYywgZCk7IH07IH07IH07CisgIH0KKyAgd3JhcHBlci5hcml0eSA9IDQ7
CisgIHdyYXBwZXIuZnVuYyA9IGZ1bjsKKyAgcmV0dXJuIHdyYXBwZXI7Cit9CisKK2Z1bmN0aW9u
IEY1KGZ1bikKK3sKKyAgZnVuY3Rpb24gd3JhcHBlcihhKSB7IHJldHVybiBmdW5jdGlvbihiKSB7
IHJldHVybiBmdW5jdGlvbihjKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGZ1
bmN0aW9uKGUpIHsgcmV0dXJuIGZ1bihhLCBiLCBjLCBkLCBlKTsgfTsgfTsgfTsgfTsKKyAgfQor
ICB3cmFwcGVyLmFyaXR5ID0gNTsKKyAgd3JhcHBlci5mdW5jID0gZnVuOworICByZXR1cm4gd3Jh
cHBlcjsKK30KKworZnVuY3Rpb24gRjYoZnVuKQoreworICBmdW5jdGlvbiB3cmFwcGVyKGEpIHsg
cmV0dXJuIGZ1bmN0aW9uKGIpIHsgcmV0dXJuIGZ1bmN0aW9uKGMpIHsKKyAgICByZXR1cm4gZnVu
Y3Rpb24oZCkgeyByZXR1cm4gZnVuY3Rpb24oZSkgeyByZXR1cm4gZnVuY3Rpb24oZikgeworICAg
IHJldHVybiBmdW4oYSwgYiwgYywgZCwgZSwgZik7IH07IH07IH07IH07IH07CisgIH0KKyAgd3Jh
cHBlci5hcml0eSA9IDY7CisgIHdyYXBwZXIuZnVuYyA9IGZ1bjsKKyAgcmV0dXJuIHdyYXBwZXI7
Cit9CisKK2Z1bmN0aW9uIEY3KGZ1bikKK3sKKyAgZnVuY3Rpb24gd3JhcHBlcihhKSB7IHJldHVy
biBmdW5jdGlvbihiKSB7IHJldHVybiBmdW5jdGlvbihjKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9u
KGQpIHsgcmV0dXJuIGZ1bmN0aW9uKGUpIHsgcmV0dXJuIGZ1bmN0aW9uKGYpIHsKKyAgICByZXR1
cm4gZnVuY3Rpb24oZykgeyByZXR1cm4gZnVuKGEsIGIsIGMsIGQsIGUsIGYsIGcpOyB9OyB9OyB9
OyB9OyB9OyB9OworICB9CisgIHdyYXBwZXIuYXJpdHkgPSA3OworICB3cmFwcGVyLmZ1bmMgPSBm
dW47CisgIHJldHVybiB3cmFwcGVyOworfQorCitmdW5jdGlvbiBGOChmdW4pCit7CisgIGZ1bmN0
aW9uIHdyYXBwZXIoYSkgeyByZXR1cm4gZnVuY3Rpb24oYikgeyByZXR1cm4gZnVuY3Rpb24oYykg
eworICAgIHJldHVybiBmdW5jdGlvbihkKSB7IHJldHVybiBmdW5jdGlvbihlKSB7IHJldHVybiBm
dW5jdGlvbihmKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKGcpIHsgcmV0dXJuIGZ1bmN0aW9uKGgp
IHsKKyAgICByZXR1cm4gZnVuKGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgpOyB9OyB9OyB9OyB9OyB9
OyB9OyB9OworICB9CisgIHdyYXBwZXIuYXJpdHkgPSA4OworICB3cmFwcGVyLmZ1bmMgPSBmdW47
CisgIHJldHVybiB3cmFwcGVyOworfQorCitmdW5jdGlvbiBGOShmdW4pCit7CisgIGZ1bmN0aW9u
IHdyYXBwZXIoYSkgeyByZXR1cm4gZnVuY3Rpb24oYikgeyByZXR1cm4gZnVuY3Rpb24oYykgewor
ICAgIHJldHVybiBmdW5jdGlvbihkKSB7IHJldHVybiBmdW5jdGlvbihlKSB7IHJldHVybiBmdW5j
dGlvbihmKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKGcpIHsgcmV0dXJuIGZ1bmN0aW9uKGgpIHsg
cmV0dXJuIGZ1bmN0aW9uKGkpIHsKKyAgICByZXR1cm4gZnVuKGEsIGIsIGMsIGQsIGUsIGYsIGcs
IGgsIGkpOyB9OyB9OyB9OyB9OyB9OyB9OyB9OyB9OworICB9CisgIHdyYXBwZXIuYXJpdHkgPSA5
OworICB3cmFwcGVyLmZ1bmMgPSBmdW47CisgIHJldHVybiB3cmFwcGVyOworfQorCitmdW5jdGlv
biBBMihmdW4sIGEsIGIpCit7CisgIHJldHVybiBmdW4uYXJpdHkgPT09IDIKKyAgICA/IGZ1bi5m
dW5jKGEsIGIpCisgICAgOiBmdW4oYSkoYik7Cit9CitmdW5jdGlvbiBBMyhmdW4sIGEsIGIsIGMp
Cit7CisgIHJldHVybiBmdW4uYXJpdHkgPT09IDMKKyAgICA/IGZ1bi5mdW5jKGEsIGIsIGMpCisg
ICAgOiBmdW4oYSkoYikoYyk7Cit9CitmdW5jdGlvbiBBNChmdW4sIGEsIGIsIGMsIGQpCit7Cisg
IHJldHVybiBmdW4uYXJpdHkgPT09IDQKKyAgICA/IGZ1bi5mdW5jKGEsIGIsIGMsIGQpCisgICAg
OiBmdW4oYSkoYikoYykoZCk7Cit9CitmdW5jdGlvbiBBNShmdW4sIGEsIGIsIGMsIGQsIGUpCit7
CisgIHJldHVybiBmdW4uYXJpdHkgPT09IDUKKyAgICA/IGZ1bi5mdW5jKGEsIGIsIGMsIGQsIGUp
CisgICAgOiBmdW4oYSkoYikoYykoZCkoZSk7Cit9CitmdW5jdGlvbiBBNihmdW4sIGEsIGIsIGMs
IGQsIGUsIGYpCit7CisgIHJldHVybiBmdW4uYXJpdHkgPT09IDYKKyAgICA/IGZ1bi5mdW5jKGEs
IGIsIGMsIGQsIGUsIGYpCisgICAgOiBmdW4oYSkoYikoYykoZCkoZSkoZik7Cit9CitmdW5jdGlv
biBBNyhmdW4sIGEsIGIsIGMsIGQsIGUsIGYsIGcpCit7CisgIHJldHVybiBmdW4uYXJpdHkgPT09
IDcKKyAgICA/IGZ1bi5mdW5jKGEsIGIsIGMsIGQsIGUsIGYsIGcpCisgICAgOiBmdW4oYSkoYiko
YykoZCkoZSkoZikoZyk7Cit9CitmdW5jdGlvbiBBOChmdW4sIGEsIGIsIGMsIGQsIGUsIGYsIGcs
IGgpCit7CisgIHJldHVybiBmdW4uYXJpdHkgPT09IDgKKyAgICA/IGZ1bi5mdW5jKGEsIGIsIGMs
IGQsIGUsIGYsIGcsIGgpCisgICAgOiBmdW4oYSkoYikoYykoZCkoZSkoZikoZykoaCk7Cit9Citm
dW5jdGlvbiBBOShmdW4sIGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIGkpCit7CisgIHJldHVybiBm
dW4uYXJpdHkgPT09IDkKKyAgICA/IGZ1bi5mdW5jKGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIGkp
CisgICAgOiBmdW4oYSkoYikoYykoZCkoZSkoZikoZykoaCkoaSk7Cit9CisKKy8vaW1wb3J0IE5h
dGl2ZS5VdGlscyAvLworCit2YXIgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcyA9IGZ1bmN0
aW9uKCkgeworCitmdW5jdGlvbiBkaXYoYSwgYikKK3sKKyAgICByZXR1cm4gKGEgLyBiKSB8IDA7
Cit9CitmdW5jdGlvbiByZW0oYSwgYikKK3sKKyAgICByZXR1cm4gYSAlIGI7Cit9CitmdW5jdGlv
biBtb2QoYSwgYikKK3sKKyAgICBpZiAoYiA9PT0gMCkKKyAgICB7CisgICAgICAgIHRocm93IG5l
dyBFcnJvcignQ2Fubm90IHBlcmZvcm0gbW9kIDAuIERpdmlzaW9uIGJ5IHplcm8gZXJyb3IuJyk7
CisgICAgfQorICAgIHZhciByID0gYSAlIGI7CisgICAgdmFyIG0gPSBhID09PSAwID8gMCA6IChi
ID4gMCA/IChhID49IDAgPyByIDogciArIGIpIDogLW1vZCgtYSwgLWIpKTsKKworICAgIHJldHVy
biBtID09PSBiID8gMCA6IG07Cit9CitmdW5jdGlvbiBsb2dCYXNlKGJhc2UsIG4pCit7CisgICAg
cmV0dXJuIE1hdGgubG9nKG4pIC8gTWF0aC5sb2coYmFzZSk7Cit9CitmdW5jdGlvbiBuZWdhdGUo
bikKK3sKKyAgICByZXR1cm4gLW47Cit9CitmdW5jdGlvbiBhYnMobikKK3sKKyAgICByZXR1cm4g
biA8IDAgPyAtbiA6IG47Cit9CisKK2Z1bmN0aW9uIG1pbihhLCBiKQoreworICAgIHJldHVybiBf
ZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY21wKGEsIGIpIDwgMCA/IGEgOiBiOworfQorZnVu
Y3Rpb24gbWF4KGEsIGIpCit7CisgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGls
cy5jbXAoYSwgYikgPiAwID8gYSA6IGI7Cit9CitmdW5jdGlvbiBjbGFtcChsbywgaGksIG4pCit7
CisgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jbXAobiwgbG8pIDwgMAor
ICAgICAgICA/IGxvCisgICAgICAgIDogX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNtcChu
LCBoaSkgPiAwCisgICAgICAgICAgICA/IGhpCisgICAgICAgICAgICA6IG47Cit9CisKK3ZhciBv
cmQgPSBbJ0xUJywgJ0VRJywgJ0dUJ107CisKK2Z1bmN0aW9uIGNvbXBhcmUoeCwgeSkKK3sKKyAg
ICByZXR1cm4geyBjdG9yOiBvcmRbX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNtcCh4LCB5
KSArIDFdIH07Cit9CisKK2Z1bmN0aW9uIHhvcihhLCBiKQoreworICAgIHJldHVybiBhICE9PSBi
OworfQorZnVuY3Rpb24gbm90KGIpCit7CisgICAgcmV0dXJuICFiOworfQorZnVuY3Rpb24gaXNJ
bmZpbml0ZShuKQoreworICAgIHJldHVybiBuID09PSBJbmZpbml0eSB8fCBuID09PSAtSW5maW5p
dHk7Cit9CisKK2Z1bmN0aW9uIHRydW5jYXRlKG4pCit7CisgICAgcmV0dXJuIG4gfCAwOworfQor
CitmdW5jdGlvbiBkZWdyZWVzKGQpCit7CisgICAgcmV0dXJuIGQgKiBNYXRoLlBJIC8gMTgwOwor
fQorZnVuY3Rpb24gdHVybnModCkKK3sKKyAgICByZXR1cm4gMiAqIE1hdGguUEkgKiB0OworfQor
ZnVuY3Rpb24gZnJvbVBvbGFyKHBvaW50KQoreworICAgIHZhciByID0gcG9pbnQuXzA7CisgICAg
dmFyIHQgPSBwb2ludC5fMTsKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxz
LlR1cGxlMihyICogTWF0aC5jb3ModCksIHIgKiBNYXRoLnNpbih0KSk7Cit9CitmdW5jdGlvbiB0
b1BvbGFyKHBvaW50KQoreworICAgIHZhciB4ID0gcG9pbnQuXzA7CisgICAgdmFyIHkgPSBwb2lu
dC5fMTsKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLlR1cGxlMihNYXRo
LnNxcnQoeCAqIHggKyB5ICogeSksIE1hdGguYXRhbjIoeSwgeCkpOworfQorCityZXR1cm4gewor
ICAgIGRpdjogRjIoZGl2KSwKKyAgICByZW06IEYyKHJlbSksCisgICAgbW9kOiBGMihtb2QpLAor
CisgICAgcGk6IE1hdGguUEksCisgICAgZTogTWF0aC5FLAorICAgIGNvczogTWF0aC5jb3MsCisg
ICAgc2luOiBNYXRoLnNpbiwKKyAgICB0YW46IE1hdGgudGFuLAorICAgIGFjb3M6IE1hdGguYWNv
cywKKyAgICBhc2luOiBNYXRoLmFzaW4sCisgICAgYXRhbjogTWF0aC5hdGFuLAorICAgIGF0YW4y
OiBGMihNYXRoLmF0YW4yKSwKKworICAgIGRlZ3JlZXM6IGRlZ3JlZXMsCisgICAgdHVybnM6IHR1
cm5zLAorICAgIGZyb21Qb2xhcjogZnJvbVBvbGFyLAorICAgIHRvUG9sYXI6IHRvUG9sYXIsCisK
KyAgICBzcXJ0OiBNYXRoLnNxcnQsCisgICAgbG9nQmFzZTogRjIobG9nQmFzZSksCisgICAgbmVn
YXRlOiBuZWdhdGUsCisgICAgYWJzOiBhYnMsCisgICAgbWluOiBGMihtaW4pLAorICAgIG1heDog
RjIobWF4KSwKKyAgICBjbGFtcDogRjMoY2xhbXApLAorICAgIGNvbXBhcmU6IEYyKGNvbXBhcmUp
LAorCisgICAgeG9yOiBGMih4b3IpLAorICAgIG5vdDogbm90LAorCisgICAgdHJ1bmNhdGU6IHRy
dW5jYXRlLAorICAgIGNlaWxpbmc6IE1hdGguY2VpbCwKKyAgICBmbG9vcjogTWF0aC5mbG9vciwK
KyAgICByb3VuZDogTWF0aC5yb3VuZCwKKyAgICB0b0Zsb2F0OiBmdW5jdGlvbih4KSB7IHJldHVy
biB4OyB9LAorICAgIGlzTmFOOiBpc05hTiwKKyAgICBpc0luZmluaXRlOiBpc0luZmluaXRlCit9
OworCit9KCk7CisvL2ltcG9ydCAvLworCit2YXIgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxz
ID0gZnVuY3Rpb24oKSB7CisKKy8vIENPTVBBUklTT05TCisKK2Z1bmN0aW9uIGVxKHgsIHkpCit7
CisgICAgdmFyIHN0YWNrID0gW107CisgICAgdmFyIGlzRXF1YWwgPSBlcUhlbHAoeCwgeSwgMCwg
c3RhY2spOworICAgIHZhciBwYWlyOworICAgIHdoaWxlIChpc0VxdWFsICYmIChwYWlyID0gc3Rh
Y2sucG9wKCkpKQorICAgIHsKKyAgICAgICAgaXNFcXVhbCA9IGVxSGVscChwYWlyLngsIHBhaXIu
eSwgMCwgc3RhY2spOworICAgIH0KKyAgICByZXR1cm4gaXNFcXVhbDsKK30KKworCitmdW5jdGlv
biBlcUhlbHAoeCwgeSwgZGVwdGgsIHN0YWNrKQoreworICAgIGlmIChkZXB0aCA+IDEwMCkKKyAg
ICB7CisgICAgICAgIHN0YWNrLnB1c2goeyB4OiB4LCB5OiB5IH0pOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoeCA9PT0geSkKKyAgICB7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIGlmICh0eXBlb2YgeCAhPT0gJ29iamVjdCcpCisgICAgeworICAg
ICAgICBpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHRocm93IG5ldyBFcnJvcigKKyAgICAgICAgICAgICAgICAnVHJ5aW5nIHRvIHVzZSBgKD09KWAg
b24gZnVuY3Rpb25zLiBUaGVyZSBpcyBubyB3YXkgdG8ga25vdyBpZiBmdW5jdGlvbnMgYXJlICJ0
aGUgc2FtZSIgaW4gdGhlIEVsbSBzZW5zZS4nCisgICAgICAgICAgICAgICAgKyAnIFJlYWQgbW9y
ZSBhYm91dCB0aGlzIGF0IGh0dHA6Ly9wYWNrYWdlLmVsbS1sYW5nLm9yZy9wYWNrYWdlcy9lbG0t
bGFuZy9jb3JlL2xhdGVzdC9CYXNpY3MjPT0nCisgICAgICAgICAgICAgICAgKyAnIHdoaWNoIGRl
c2NyaWJlcyB3aHkgaXQgaXMgdGhpcyB3YXkgYW5kIHdoYXQgdGhlIGJldHRlciB2ZXJzaW9uIHdp
bGwgbG9vayBsaWtlLicKKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGlmICh4ID09PSBudWxsIHx8IHkgPT09IG51bGwpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2UKKyAgICB9CisKKyAgICBpZiAoeCBpbnN0YW5jZW9mIERh
dGUpCisgICAgeworICAgICAgICByZXR1cm4geC5nZXRUaW1lKCkgPT09IHkuZ2V0VGltZSgpOwor
ICAgIH0KKworICAgIGlmICghKCdjdG9yJyBpbiB4KSkKKyAgICB7CisgICAgICAgIGZvciAodmFy
IGtleSBpbiB4KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWVxSGVscCh4W2tleV0sIHlb
a2V5XSwgZGVwdGggKyAxLCBzdGFjaykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIC8vIGNvbnZlcnQgRGljdHMgYW5kIFNldHMgdG8gbGlzdHMKKyAg
ICBpZiAoeC5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJyB8fCB4LmN0b3IgPT09ICdSQkVt
cHR5X2VsbV9idWlsdGluJykKKyAgICB7CisgICAgICAgIHggPSBfZWxtX2xhbmckY29yZSREaWN0
JHRvTGlzdCh4KTsKKyAgICAgICAgeSA9IF9lbG1fbGFuZyRjb3JlJERpY3QkdG9MaXN0KHkpOwor
ICAgIH0KKyAgICBpZiAoeC5jdG9yID09PSAnU2V0X2VsbV9idWlsdGluJykKKyAgICB7CisgICAg
ICAgIHggPSBfZWxtX2xhbmckY29yZSRTZXQkdG9MaXN0KHgpOworICAgICAgICB5ID0gX2VsbV9s
YW5nJGNvcmUkU2V0JHRvTGlzdCh5KTsKKyAgICB9CisKKyAgICAvLyBjaGVjayBpZiBsaXN0cyBh
cmUgZXF1YWwgd2l0aG91dCByZWN1cnNpb24KKyAgICBpZiAoeC5jdG9yID09PSAnOjonKQorICAg
IHsKKyAgICAgICAgdmFyIGEgPSB4OworICAgICAgICB2YXIgYiA9IHk7CisgICAgICAgIHdoaWxl
IChhLmN0b3IgPT09ICc6OicgJiYgYi5jdG9yID09PSAnOjonKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoIWVxSGVscChhLl8wLCBiLl8wLCBkZXB0aCArIDEsIHN0YWNrKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBhID0gYS5fMTsKKyAgICAgICAgICAgIGIgPSBiLl8xOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBhLmN0b3IgPT09IGIuY3RvcjsKKyAgICB9CisKKyAgICAvLyBjaGVjayBpZiBB
cnJheXMgYXJlIGVxdWFsCisgICAgaWYgKHguY3RvciA9PT0gJ19BcnJheScpCisgICAgeworICAg
ICAgICB2YXIgeHMgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQXJyYXkudG9KU0FycmF5KHgpOwor
ICAgICAgICB2YXIgeXMgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQXJyYXkudG9KU0FycmF5KHkp
OworICAgICAgICBpZiAoeHMubGVuZ3RoICE9PSB5cy5sZW5ndGgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHhzLmxlbmd0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWVxSGVscCh4
c1tpXSwgeXNbaV0sIGRlcHRoICsgMSwgc3RhY2spKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIWVxSGVscCh4LmN0b3IsIHkuY3RvciwgZGVw
dGggKyAxLCBzdGFjaykpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgZm9yICh2YXIga2V5IGluIHgpCisgICAgeworICAgICAgICBpZiAoIWVxSGVscCh4W2tleV0s
IHlba2V5XSwgZGVwdGggKyAxLCBzdGFjaykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gQ29k
ZSBpbiBHZW5lcmF0ZS9KYXZhU2NyaXB0LmhzLCBCYXNpY3MuanMsIGFuZCBMaXN0LmpzIGRlcGVu
ZHMgb24KKy8vIHRoZSBwYXJ0aWN1bGFyIGludGVnZXIgdmFsdWVzIGFzc2lnbmVkIHRvIExULCBF
USwgYW5kIEdULgorCit2YXIgTFQgPSAtMSwgRVEgPSAwLCBHVCA9IDE7CisKK2Z1bmN0aW9uIGNt
cCh4LCB5KQoreworICAgIGlmICh0eXBlb2YgeCAhPT0gJ29iamVjdCcpCisgICAgeworICAgICAg
ICByZXR1cm4geCA9PT0geSA/IEVRIDogeCA8IHkgPyBMVCA6IEdUOworICAgIH0KKworICAgIGlm
ICh4IGluc3RhbmNlb2YgU3RyaW5nKQorICAgIHsKKyAgICAgICAgdmFyIGEgPSB4LnZhbHVlT2Yo
KTsKKyAgICAgICAgdmFyIGIgPSB5LnZhbHVlT2YoKTsKKyAgICAgICAgcmV0dXJuIGEgPT09IGIg
PyBFUSA6IGEgPCBiID8gTFQgOiBHVDsKKyAgICB9CisKKyAgICBpZiAoeC5jdG9yID09PSAnOjon
IHx8IHguY3RvciA9PT0gJ1tdJykKKyAgICB7CisgICAgICAgIHdoaWxlICh4LmN0b3IgPT09ICc6
OicgJiYgeS5jdG9yID09PSAnOjonKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgb3JkID0g
Y21wKHguXzAsIHkuXzApOworICAgICAgICAgICAgaWYgKG9yZCAhPT0gRVEpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG9yZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHggPSB4Ll8xOworICAgICAgICAgICAgeSA9IHkuXzE7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHguY3RvciA9PT0geS5jdG9yID8gRVEgOiB4LmN0b3IgPT09ICdbXScgPyBMVCA6IEdU
OworICAgIH0KKworICAgIGlmICh4LmN0b3Iuc2xpY2UoMCwgNikgPT09ICdfVHVwbGUnKQorICAg
IHsKKyAgICAgICAgdmFyIG9yZDsKKyAgICAgICAgdmFyIG4gPSB4LmN0b3Iuc2xpY2UoNikgLSAw
OworICAgICAgICB2YXIgZXJyID0gJ2Nhbm5vdCBjb21wYXJlIHR1cGxlcyB3aXRoIG1vcmUgdGhh
biA2IGVsZW1lbnRzLic7CisgICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gRVE7CisgICAgICAg
IGlmIChuID49IDEpIHsgb3JkID0gY21wKHguXzAsIHkuXzApOyBpZiAob3JkICE9PSBFUSkgcmV0
dXJuIG9yZDsKKyAgICAgICAgaWYgKG4gPj0gMikgeyBvcmQgPSBjbXAoeC5fMSwgeS5fMSk7IGlm
IChvcmQgIT09IEVRKSByZXR1cm4gb3JkOworICAgICAgICBpZiAobiA+PSAzKSB7IG9yZCA9IGNt
cCh4Ll8yLCB5Ll8yKTsgaWYgKG9yZCAhPT0gRVEpIHJldHVybiBvcmQ7CisgICAgICAgIGlmIChu
ID49IDQpIHsgb3JkID0gY21wKHguXzMsIHkuXzMpOyBpZiAob3JkICE9PSBFUSkgcmV0dXJuIG9y
ZDsKKyAgICAgICAgaWYgKG4gPj0gNSkgeyBvcmQgPSBjbXAoeC5fNCwgeS5fNCk7IGlmIChvcmQg
IT09IEVRKSByZXR1cm4gb3JkOworICAgICAgICBpZiAobiA+PSA2KSB7IG9yZCA9IGNtcCh4Ll81
LCB5Ll81KTsgaWYgKG9yZCAhPT0gRVEpIHJldHVybiBvcmQ7CisgICAgICAgIGlmIChuID49IDcp
IHRocm93IG5ldyBFcnJvcignQ29tcGFyaXNvbiBlcnJvcjogJyArIGVycik7IH0gfSB9IH0gfSB9
CisgICAgICAgIHJldHVybiBFUTsKKyAgICB9CisKKyAgICB0aHJvdyBuZXcgRXJyb3IoCisgICAg
ICAgICdDb21wYXJpc29uIGVycm9yOiBjb21wYXJpc29uIGlzIG9ubHkgZGVmaW5lZCBvbiBpbnRz
LCAnCisgICAgICAgICsgJ2Zsb2F0cywgdGltZXMsIGNoYXJzLCBzdHJpbmdzLCBsaXN0cyBvZiBj
b21wYXJhYmxlIHZhbHVlcywgJworICAgICAgICArICdhbmQgdHVwbGVzIG9mIGNvbXBhcmFibGUg
dmFsdWVzLicKKyAgICApOworfQorCisKKy8vIENPTU1PTiBWQUxVRVMKKwordmFyIFR1cGxlMCA9
IHsKKyAgICBjdG9yOiAnX1R1cGxlMCcKK307CisKK2Z1bmN0aW9uIFR1cGxlMih4LCB5KQorewor
ICAgIHJldHVybiB7CisgICAgICAgIGN0b3I6ICdfVHVwbGUyJywKKyAgICAgICAgXzA6IHgsCisg
ICAgICAgIF8xOiB5CisgICAgfTsKK30KKworZnVuY3Rpb24gY2hyKGMpCit7CisgICAgcmV0dXJu
IG5ldyBTdHJpbmcoYyk7Cit9CisKKworLy8gR1VJRAorCit2YXIgY291bnQgPSAwOworZnVuY3Rp
b24gZ3VpZChfKQoreworICAgIHJldHVybiBjb3VudCsrOworfQorCisKKy8vIFJFQ09SRFMKKwor
ZnVuY3Rpb24gdXBkYXRlKG9sZFJlY29yZCwgdXBkYXRlZEZpZWxkcykKK3sKKyAgICB2YXIgbmV3
UmVjb3JkID0ge307CisgICAgZm9yICh2YXIga2V5IGluIG9sZFJlY29yZCkKKyAgICB7CisgICAg
ICAgIHZhciB2YWx1ZSA9IChrZXkgaW4gdXBkYXRlZEZpZWxkcykgPyB1cGRhdGVkRmllbGRzW2tl
eV0gOiBvbGRSZWNvcmRba2V5XTsKKyAgICAgICAgbmV3UmVjb3JkW2tleV0gPSB2YWx1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIG5ld1JlY29yZDsKK30KKworCisvLy8vIExJU1QgU1RVRkYgLy8vLwor
Cit2YXIgTmlsID0geyBjdG9yOiAnW10nIH07CisKK2Z1bmN0aW9uIENvbnMoaGQsIHRsKQorewor
ICAgIHJldHVybiB7CisgICAgICAgIGN0b3I6ICc6OicsCisgICAgICAgIF8wOiBoZCwKKyAgICAg
ICAgXzE6IHRsCisgICAgfTsKK30KKworZnVuY3Rpb24gYXBwZW5kKHhzLCB5cykKK3sKKyAgICAv
LyBhcHBlbmQgU3RyaW5ncworICAgIGlmICh0eXBlb2YgeHMgPT09ICdzdHJpbmcnKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHhzICsgeXM7CisgICAgfQorCisgICAgLy8gYXBwZW5kIExpc3RzCisg
ICAgaWYgKHhzLmN0b3IgPT09ICdbXScpCisgICAgeworICAgICAgICByZXR1cm4geXM7CisgICAg
fQorICAgIHZhciByb290ID0gQ29ucyh4cy5fMCwgTmlsKTsKKyAgICB2YXIgY3VyciA9IHJvb3Q7
CisgICAgeHMgPSB4cy5fMTsKKyAgICB3aGlsZSAoeHMuY3RvciAhPT0gJ1tdJykKKyAgICB7Cisg
ICAgICAgIGN1cnIuXzEgPSBDb25zKHhzLl8wLCBOaWwpOworICAgICAgICB4cyA9IHhzLl8xOwor
ICAgICAgICBjdXJyID0gY3Vyci5fMTsKKyAgICB9CisgICAgY3Vyci5fMSA9IHlzOworICAgIHJl
dHVybiByb290OworfQorCisKKy8vIENSQVNIRVMKKworZnVuY3Rpb24gY3Jhc2gobW9kdWxlTmFt
ZSwgcmVnaW9uKQoreworICAgIHJldHVybiBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgIHRo
cm93IG5ldyBFcnJvcigKKyAgICAgICAgICAgICdSYW4gaW50byBhIGBEZWJ1Zy5jcmFzaGAgaW4g
bW9kdWxlIGAnICsgbW9kdWxlTmFtZSArICdgICcgKyByZWdpb25Ub1N0cmluZyhyZWdpb24pICsg
J1xuJworICAgICAgICAgICAgKyAnVGhlIG1lc3NhZ2UgcHJvdmlkZWQgYnkgdGhlIGNvZGUgYXV0
aG9yIGlzOlxuXG4gICAgJworICAgICAgICAgICAgKyBtZXNzYWdlCisgICAgICAgICk7CisgICAg
fTsKK30KKworZnVuY3Rpb24gY3Jhc2hDYXNlKG1vZHVsZU5hbWUsIHJlZ2lvbiwgdmFsdWUpCit7
CisgICAgcmV0dXJuIGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KAorICAgICAgICAgICAgJ1JhbiBpbnRvIGEgYERlYnVnLmNyYXNoYCBpbiBtb2R1bGUgYCcgKyBt
b2R1bGVOYW1lICsgJ2BcblxuJworICAgICAgICAgICAgKyAnVGhpcyB3YXMgY2F1c2VkIGJ5IHRo
ZSBgY2FzZWAgZXhwcmVzc2lvbiAnICsgcmVnaW9uVG9TdHJpbmcocmVnaW9uKSArICcuXG4nCisg
ICAgICAgICAgICArICdPbmUgb2YgdGhlIGJyYW5jaGVzIGVuZGVkIHdpdGggYSBjcmFzaCBhbmQg
dGhlIGZvbGxvd2luZyB2YWx1ZSBnb3QgdGhyb3VnaDpcblxuICAgICcgKyB0b1N0cmluZyh2YWx1
ZSkgKyAnXG5cbicKKyAgICAgICAgICAgICsgJ1RoZSBtZXNzYWdlIHByb3ZpZGVkIGJ5IHRoZSBj
b2RlIGF1dGhvciBpczpcblxuICAgICcKKyAgICAgICAgICAgICsgbWVzc2FnZQorICAgICAgICAp
OworICAgIH07Cit9CisKK2Z1bmN0aW9uIHJlZ2lvblRvU3RyaW5nKHJlZ2lvbikKK3sKKyAgICBp
ZiAocmVnaW9uLnN0YXJ0LmxpbmUgPT0gcmVnaW9uLmVuZC5saW5lKQorICAgIHsKKyAgICAgICAg
cmV0dXJuICdvbiBsaW5lICcgKyByZWdpb24uc3RhcnQubGluZTsKKyAgICB9CisgICAgcmV0dXJu
ICdiZXR3ZWVuIGxpbmVzICcgKyByZWdpb24uc3RhcnQubGluZSArICcgYW5kICcgKyByZWdpb24u
ZW5kLmxpbmU7Cit9CisKKworLy8gVE8gU1RSSU5HCisKK2Z1bmN0aW9uIHRvU3RyaW5nKHYpCit7
CisgICAgdmFyIHR5cGUgPSB0eXBlb2YgdjsKKyAgICBpZiAodHlwZSA9PT0gJ2Z1bmN0aW9uJykK
KyAgICB7CisgICAgICAgIHZhciBuYW1lID0gdi5mdW5jID8gdi5mdW5jLm5hbWUgOiB2Lm5hbWU7
CisgICAgICAgIHJldHVybiAnPGZ1bmN0aW9uJyArIChuYW1lID09PSAnJyA/ICcnIDogJzonKSAr
IG5hbWUgKyAnPic7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT09ICdib29sZWFuJykKKyAgICB7
CisgICAgICAgIHJldHVybiB2ID8gJ1RydWUnIDogJ0ZhbHNlJzsKKyAgICB9CisKKyAgICBpZiAo
dHlwZSA9PT0gJ251bWJlcicpCisgICAgeworICAgICAgICByZXR1cm4gdiArICcnOworICAgIH0K
KworICAgIGlmICh2IGluc3RhbmNlb2YgU3RyaW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJuICdc
JycgKyBhZGRTbGFzaGVzKHYsIHRydWUpICsgJ1wnJzsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9
PT0gJ3N0cmluZycpCisgICAgeworICAgICAgICByZXR1cm4gJyInICsgYWRkU2xhc2hlcyh2LCBm
YWxzZSkgKyAnIic7CisgICAgfQorCisgICAgaWYgKHYgPT09IG51bGwpCisgICAgeworICAgICAg
ICByZXR1cm4gJ251bGwnOworICAgIH0KKworICAgIGlmICh0eXBlID09PSAnb2JqZWN0JyAmJiAn
Y3RvcicgaW4gdikKKyAgICB7CisgICAgICAgIHZhciBjdG9yU3RhcnRlciA9IHYuY3Rvci5zdWJz
dHJpbmcoMCwgNSk7CisKKyAgICAgICAgaWYgKGN0b3JTdGFydGVyID09PSAnX1R1cGwnKQorICAg
ICAgICB7CisgICAgICAgICAgICB2YXIgb3V0cHV0ID0gW107CisgICAgICAgICAgICBmb3IgKHZh
ciBrIGluIHYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGsgPT09ICdjdG9y
JykgY29udGludWU7CisgICAgICAgICAgICAgICAgb3V0cHV0LnB1c2godG9TdHJpbmcodltrXSkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuICcoJyArIG91dHB1dC5qb2luKCcs
JykgKyAnKSc7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3RvclN0YXJ0ZXIgPT09ICdfVGFz
aycpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAnPHRhc2s+JworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHYuY3RvciA9PT0gJ19BcnJheScpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHZhciBsaXN0ID0gX2VsbV9sYW5nJGNvcmUkQXJyYXkkdG9MaXN0KHYpOworICAgICAgICAgICAg
cmV0dXJuICdBcnJheS5mcm9tTGlzdCAnICsgdG9TdHJpbmcobGlzdCk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAodi5jdG9yID09PSAnPGRlY29kZXI+JykKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuICc8ZGVjb2Rlcj4nOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHYuY3RvciA9
PT0gJ19Qcm9jZXNzJykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICc8cHJvY2Vzczon
ICsgdi5pZCArICc+JzsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2LmN0b3IgPT09ICc6Oicp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBvdXRwdXQgPSAnWycgKyB0b1N0cmluZyh2Ll8w
KTsKKyAgICAgICAgICAgIHYgPSB2Ll8xOworICAgICAgICAgICAgd2hpbGUgKHYuY3RvciA9PT0g
Jzo6JykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXQgKz0gJywnICsgdG9T
dHJpbmcodi5fMCk7CisgICAgICAgICAgICAgICAgdiA9IHYuXzE7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gb3V0cHV0ICsgJ10nOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KHYuY3RvciA9PT0gJ1tdJykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICdbXSc7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAodi5jdG9yID09PSAnU2V0X2VsbV9idWlsdGluJykKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuICdTZXQuZnJvbUxpc3QgJyArIHRvU3RyaW5nKF9l
bG1fbGFuZyRjb3JlJFNldCR0b0xpc3QodikpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHYu
Y3RvciA9PT0gJ1JCTm9kZV9lbG1fYnVpbHRpbicgfHwgdi5jdG9yID09PSAnUkJFbXB0eV9lbG1f
YnVpbHRpbicpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAnRGljdC5mcm9tTGlzdCAn
ICsgdG9TdHJpbmcoX2VsbV9sYW5nJGNvcmUkRGljdCR0b0xpc3QodikpOworICAgICAgICB9CisK
KyAgICAgICAgdmFyIG91dHB1dCA9ICcnOworICAgICAgICBmb3IgKHZhciBpIGluIHYpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChpID09PSAnY3RvcicpIGNvbnRpbnVlOworICAgICAgICAg
ICAgdmFyIHN0ciA9IHRvU3RyaW5nKHZbaV0pOworICAgICAgICAgICAgdmFyIGMwID0gc3RyWzBd
OworICAgICAgICAgICAgdmFyIHBhcmVubGVzcyA9IGMwID09PSAneycgfHwgYzAgPT09ICcoJyB8
fCBjMCA9PT0gJzwnIHx8IGMwID09PSAnIicgfHwgc3RyLmluZGV4T2YoJyAnKSA8IDA7CisgICAg
ICAgICAgICBvdXRwdXQgKz0gJyAnICsgKHBhcmVubGVzcyA/IHN0ciA6ICcoJyArIHN0ciArICcp
Jyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHYuY3RvciArIG91dHB1dDsKKyAgICB9CisK
KyAgICBpZiAodHlwZSA9PT0gJ29iamVjdCcpCisgICAgeworICAgICAgICBpZiAodiBpbnN0YW5j
ZW9mIERhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAnPCcgKyB2LnRvU3RyaW5n
KCkgKyAnPic7CisgICAgICAgIH0KKworICAgICAgICBpZiAodi5lbG1fd2ViX3NvY2tldCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuICc8d2Vic29ja2V0Pic7CisgICAgICAgIH0KKwor
ICAgICAgICB2YXIgb3V0cHV0ID0gW107CisgICAgICAgIGZvciAodmFyIGsgaW4gdikKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0cHV0LnB1c2goayArICcgPSAnICsgdG9TdHJpbmcodltrXSkp
OworICAgICAgICB9CisgICAgICAgIGlmIChvdXRwdXQubGVuZ3RoID09PSAwKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gJ3t9JzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gJ3sg
JyArIG91dHB1dC5qb2luKCcsICcpICsgJyB9JzsKKyAgICB9CisKKyAgICByZXR1cm4gJzxpbnRl
cm5hbCBzdHJ1Y3R1cmU+JzsKK30KKworZnVuY3Rpb24gYWRkU2xhc2hlcyhzdHIsIGlzQ2hhcikK
K3sKKyAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC9cXC9nLCAnXFxcXCcpCisgICAgICAgICAgICAg
IC5yZXBsYWNlKC9cbi9nLCAnXFxuJykKKyAgICAgICAgICAgICAgLnJlcGxhY2UoL1x0L2csICdc
XHQnKQorICAgICAgICAgICAgICAucmVwbGFjZSgvXHIvZywgJ1xccicpCisgICAgICAgICAgICAg
IC5yZXBsYWNlKC9cdi9nLCAnXFx2JykKKyAgICAgICAgICAgICAgLnJlcGxhY2UoL1wwL2csICdc
XDAnKTsKKyAgICBpZiAoaXNDaGFyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgv
XCcvZywgJ1xcXCcnKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHMu
cmVwbGFjZSgvXCIvZywgJ1xcIicpOworICAgIH0KK30KKworCityZXR1cm4geworICAgIGVxOiBl
cSwKKyAgICBjbXA6IGNtcCwKKyAgICBUdXBsZTA6IFR1cGxlMCwKKyAgICBUdXBsZTI6IFR1cGxl
MiwKKyAgICBjaHI6IGNociwKKyAgICB1cGRhdGU6IHVwZGF0ZSwKKyAgICBndWlkOiBndWlkLAor
CisgICAgYXBwZW5kOiBGMihhcHBlbmQpLAorCisgICAgY3Jhc2g6IGNyYXNoLAorICAgIGNyYXNo
Q2FzZTogY3Jhc2hDYXNlLAorCisgICAgdG9TdHJpbmc6IHRvU3RyaW5nCit9OworCit9KCk7Cit2
YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHVuY3VycnkgPSBGMigKKyAgICBmdW5jdGlvbiAoZiwg
X3AwKSB7CisgICAgICAgIHZhciBfcDEgPSBfcDA7CisgICAgICAgIHJldHVybiBBMihmLCBfcDEu
XzAsIF9wMS5fMSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGN1cnJ5ID0g
RjMoCisgICAgZnVuY3Rpb24gKGYsIGEsIGIpIHsKKyAgICAgICAgcmV0dXJuIGYoCisgICAgICAg
ICAgICB7Y3RvcjogJ19UdXBsZTInLCBfMDogYSwgXzE6IGJ9KTsKKyAgICB9KTsKK3ZhciBfZWxt
X2xhbmckY29yZSRCYXNpY3MkZmxpcCA9IEYzKAorICAgIGZ1bmN0aW9uIChmLCBiLCBhKSB7Cisg
ICAgICAgIHJldHVybiBBMihmLCBhLCBiKTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRC
YXNpY3Mkc25kID0gZnVuY3Rpb24gKF9wMikgeworICAgIHZhciBfcDMgPSBfcDI7CisgICAgcmV0
dXJuIF9wMy5fMTsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGZzdCA9IGZ1bmN0aW9u
IChfcDQpIHsKKyAgICB2YXIgX3A1ID0gX3A0OworICAgIHJldHVybiBfcDUuXzA7Cit9OwordmFy
IF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRhbHdheXMgPSBGMigKKyAgICBmdW5jdGlvbiAoYSwgX3A2
KSB7CisgICAgICAgIHJldHVybiBhOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2lj
cyRpZGVudGl0eSA9IGZ1bmN0aW9uICh4KSB7CisgICAgcmV0dXJuIHg7Cit9OwordmFyIF9lbG1f
bGFuZyRjb3JlJEJhc2ljc19vcHMgPSBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzIHx8IHt9Owor
X2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snPHwnXSA9IEYyKAorICAgIGZ1bmN0aW9uIChmLCB4
KSB7CisgICAgICAgIHJldHVybiBmKHgpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJEJh
c2ljc19vcHMgPSBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzIHx8IHt9OworX2VsbV9sYW5nJGNv
cmUkQmFzaWNzX29wc1snfD4nXSA9IEYyKAorICAgIGZ1bmN0aW9uICh4LCBmKSB7CisgICAgICAg
IHJldHVybiBmKHgpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgPSBf
ZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzIHx8IHt9OworX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29w
c1snPj4nXSA9IEYzKAorICAgIGZ1bmN0aW9uIChmLCBnLCB4KSB7CisgICAgICAgIHJldHVybiBn
KAorICAgICAgICAgICAgZih4KSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNz
X29wcyA9IF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgfHwge307CitfZWxtX2xhbmckY29yZSRC
YXNpY3Nfb3BzWyc8PCddID0gRjMoCisgICAgZnVuY3Rpb24gKGcsIGYsIHgpIHsKKyAgICAgICAg
cmV0dXJuIGcoCisgICAgICAgICAgICBmKHgpKTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29y
ZSRCYXNpY3Nfb3BzID0gX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wcyB8fCB7fTsKK19lbG1fbGFu
ZyRjb3JlJEJhc2ljc19vcHNbJysrJ10gPSBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuYXBw
ZW5kOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyR0b1N0cmluZyA9IF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9VdGlscy50b1N0cmluZzsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3MkaXNJbmZp
bml0ZSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MuaXNJbmZpbml0ZTsKK3ZhciBfZWxt
X2xhbmckY29yZSRCYXNpY3MkaXNOYU4gPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLmlz
TmFOOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyR0b0Zsb2F0ID0gX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX0Jhc2ljcy50b0Zsb2F0OwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRjZWlsaW5n
ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5jZWlsaW5nOwordmFyIF9lbG1fbGFuZyRj
b3JlJEJhc2ljcyRmbG9vciA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MuZmxvb3I7Cit2
YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHRydW5jYXRlID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X0Jhc2ljcy50cnVuY2F0ZTsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3Mkcm91bmQgPSBfZWxt
X2xhbmckY29yZSROYXRpdmVfQmFzaWNzLnJvdW5kOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2lj
cyRub3QgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLm5vdDsKK3ZhciBfZWxtX2xhbmck
Y29yZSRCYXNpY3MkeG9yID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy54b3I7Cit2YXIg
X2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wcyA9IF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgfHwg
e307CitfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWyd8fCddID0gX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX0Jhc2ljcy5vcjsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzID0gX2VsbV9sYW5n
JGNvcmUkQmFzaWNzX29wcyB8fCB7fTsKK19lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJyYmJ10g
PSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLmFuZDsKK3ZhciBfZWxtX2xhbmckY29yZSRC
YXNpY3MkbWF4ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5tYXg7Cit2YXIgX2VsbV9s
YW5nJGNvcmUkQmFzaWNzJG1pbiA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MubWluOwor
dmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRjb21wYXJlID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X0Jhc2ljcy5jb21wYXJlOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgPSBfZWxtX2xh
bmckY29yZSRCYXNpY3Nfb3BzIHx8IHt9OworX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snPj0n
XSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MuZ2U7Cit2YXIgX2VsbV9sYW5nJGNvcmUk
QmFzaWNzX29wcyA9IF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgfHwge307CitfZWxtX2xhbmck
Y29yZSRCYXNpY3Nfb3BzWyc8PSddID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5sZTsK
K3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzID0gX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29w
cyB8fCB7fTsKK19lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJz4nXSA9IF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9CYXNpY3MuZ3Q7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wcyA9IF9lbG1f
bGFuZyRjb3JlJEJhc2ljc19vcHMgfHwge307CitfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWyc8
J10gPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLmx0OwordmFyIF9lbG1fbGFuZyRjb3Jl
JEJhc2ljc19vcHMgPSBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzIHx8IHt9OworX2VsbV9sYW5n
JGNvcmUkQmFzaWNzX29wc1snLz0nXSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MubmVx
OwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgPSBfZWxtX2xhbmckY29yZSRCYXNpY3Nf
b3BzIHx8IHt9OworX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snPT0nXSA9IF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9CYXNpY3MuZXE7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGUgPSBfZWxt
X2xhbmckY29yZSROYXRpdmVfQmFzaWNzLmU7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHBp
ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5waTsKK3ZhciBfZWxtX2xhbmckY29yZSRC
YXNpY3MkY2xhbXAgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLmNsYW1wOwordmFyIF9l
bG1fbGFuZyRjb3JlJEJhc2ljcyRsb2dCYXNlID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2lj
cy5sb2dCYXNlOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRhYnMgPSBfZWxtX2xhbmckY29y
ZSROYXRpdmVfQmFzaWNzLmFiczsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3MkbmVnYXRlID0g
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5uZWdhdGU7Cit2YXIgX2VsbV9sYW5nJGNvcmUk
QmFzaWNzJHNxcnQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLnNxcnQ7Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkQmFzaWNzJGF0YW4yID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5h
dGFuMjsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3MkYXRhbiA9IF9lbG1fbGFuZyRjb3JlJE5h
dGl2ZV9CYXNpY3MuYXRhbjsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3MkYXNpbiA9IF9lbG1f
bGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MuYXNpbjsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3Mk
YWNvcyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MuYWNvczsKK3ZhciBfZWxtX2xhbmck
Y29yZSRCYXNpY3MkdGFuID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy50YW47Cit2YXIg
X2VsbV9sYW5nJGNvcmUkQmFzaWNzJHNpbiA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3Mu
c2luOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRjb3MgPSBfZWxtX2xhbmckY29yZSROYXRp
dmVfQmFzaWNzLmNvczsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzID0gX2VsbV9sYW5n
JGNvcmUkQmFzaWNzX29wcyB8fCB7fTsKK19lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJ14nXSA9
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MuZXhwOwordmFyIF9lbG1fbGFuZyRjb3JlJEJh
c2ljc19vcHMgPSBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzIHx8IHt9OworX2VsbV9sYW5nJGNv
cmUkQmFzaWNzX29wc1snJSddID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5tb2Q7Cit2
YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHJlbSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9CYXNp
Y3MucmVtOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgPSBfZWxtX2xhbmckY29yZSRC
YXNpY3Nfb3BzIHx8IHt9OworX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snLy8nXSA9IF9lbG1f
bGFuZyRjb3JlJE5hdGl2ZV9CYXNpY3MuZGl2OwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19v
cHMgPSBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzIHx8IHt9OworX2VsbV9sYW5nJGNvcmUkQmFz
aWNzX29wc1snLyddID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5mbG9hdERpdjsKK3Zh
ciBfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzID0gX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wcyB8
fCB7fTsKK19lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJyonXSA9IF9lbG1fbGFuZyRjb3JlJE5h
dGl2ZV9CYXNpY3MubXVsOwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgPSBfZWxtX2xh
bmckY29yZSRCYXNpY3Nfb3BzIHx8IHt9OworX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snLSdd
ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5zdWI7Cit2YXIgX2VsbV9sYW5nJGNvcmUk
QmFzaWNzX29wcyA9IF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHMgfHwge307CitfZWxtX2xhbmck
Y29yZSRCYXNpY3Nfb3BzWycrJ10gPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQmFzaWNzLmFkZDsK
K3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3MkdG9Qb2xhciA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9CYXNpY3MudG9Qb2xhcjsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3MkZnJvbVBvbGFyID0g
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy5mcm9tUG9sYXI7Cit2YXIgX2VsbV9sYW5nJGNv
cmUkQmFzaWNzJHR1cm5zID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Jhc2ljcy50dXJuczsKK3Zh
ciBfZWxtX2xhbmckY29yZSRCYXNpY3MkZGVncmVlcyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9C
YXNpY3MuZGVncmVlczsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3MkcmFkaWFucyA9IGZ1bmN0
aW9uICh0KSB7CisgICAgcmV0dXJuIHQ7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRH
VCA9IHtjdG9yOiAnR1QnfTsKK3ZhciBfZWxtX2xhbmckY29yZSRCYXNpY3MkRVEgPSB7Y3Rvcjog
J0VRJ307Cit2YXIgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJExUID0ge2N0b3I6ICdMVCd9OwordmFy
IF9lbG1fbGFuZyRjb3JlJEJhc2ljcyROZXZlciA9IGZ1bmN0aW9uIChhKSB7CisgICAgcmV0dXJu
IHtjdG9yOiAnTmV2ZXInLCBfMDogYX07Cit9OworCisvL2ltcG9ydCBOYXRpdmUuVXRpbHMgLy8K
KwordmFyIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9EZWJ1ZyA9IGZ1bmN0aW9uKCkgeworCitmdW5j
dGlvbiBsb2codGFnLCB2YWx1ZSkKK3sKKyAgICB2YXIgbXNnID0gdGFnICsgJzogJyArIF9lbG1f
bGFuZyRjb3JlJE5hdGl2ZV9VdGlscy50b1N0cmluZyh2YWx1ZSk7CisgICAgdmFyIHByb2Nlc3Mg
PSBwcm9jZXNzIHx8IHt9OworICAgIGlmIChwcm9jZXNzLnN0ZG91dCkKKyAgICB7CisgICAgICAg
IHByb2Nlc3Muc3Rkb3V0LndyaXRlKG1zZyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIC8vIGNvbnNvbGUubG9nKG1zZyk7CisgICAgfQorICAgIHJldHVybiB2YWx1ZTsKK30KKwor
ZnVuY3Rpb24gY3Jhc2gobWVzc2FnZSkKK3sKKyAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7
Cit9CisKK3JldHVybiB7CisgICAgY3Jhc2g6IGNyYXNoLAorICAgIGxvZzogRjIobG9nKQorfTsK
KworfSgpOwordmFyIF9lbG1fbGFuZyRjb3JlJERlYnVnJGNyYXNoID0gX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX0RlYnVnLmNyYXNoOwordmFyIF9lbG1fbGFuZyRjb3JlJERlYnVnJGxvZyA9IF9lbG1f
bGFuZyRjb3JlJE5hdGl2ZV9EZWJ1Zy5sb2c7CisKK3ZhciBfZWxtX2xhbmckY29yZSRNYXliZSR3
aXRoRGVmYXVsdCA9IEYyKAorICAgIGZ1bmN0aW9uICgkZGVmYXVsdCwgbWF5YmUpIHsKKyAgICAg
ICAgdmFyIF9wMCA9IG1heWJlOworICAgICAgICBpZiAoX3AwLmN0b3IgPT09ICdKdXN0Jykgewor
ICAgICAgICAgICAgcmV0dXJuIF9wMC5fMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHJldHVybiAkZGVmYXVsdDsKKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3Jl
JE1heWJlJE5vdGhpbmcgPSB7Y3RvcjogJ05vdGhpbmcnfTsKK3ZhciBfZWxtX2xhbmckY29yZSRN
YXliZSRvbmVPZiA9IGZ1bmN0aW9uIChtYXliZXMpIHsKKyAgICBvbmVPZjoKKyAgICB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICB2YXIgX3AxID0gbWF5YmVzOworICAgICAgICBpZiAoX3AxLmN0b3Ig
PT09ICdbXScpIHsKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRNYXliZSROb3Ro
aW5nOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIF9wMyA9IF9wMS5fMDsKKyAg
ICAgICAgICAgIHZhciBfcDIgPSBfcDM7CisgICAgICAgICAgICBpZiAoX3AyLmN0b3IgPT09ICdO
b3RoaW5nJykgeworICAgICAgICAgICAgICAgIHZhciBfdjMgPSBfcDEuXzE7CisgICAgICAgICAg
ICAgICAgbWF5YmVzID0gX3YzOworICAgICAgICAgICAgICAgIGNvbnRpbnVlIG9uZU9mOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX3AzOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorfTsKK3ZhciBfZWxtX2xhbmckY29yZSRNYXliZSRhbmRU
aGVuID0gRjIoCisgICAgZnVuY3Rpb24gKG1heWJlVmFsdWUsIGNhbGxiYWNrKSB7CisgICAgICAg
IHZhciBfcDQgPSBtYXliZVZhbHVlOworICAgICAgICBpZiAoX3A0LmN0b3IgPT09ICdKdXN0Jykg
eworICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKF9wNC5fMCk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90aGluZzsKKyAgICAg
ICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJE1heWJlJEp1c3QgPSBmdW5jdGlvbiAo
YSkgeworICAgIHJldHVybiB7Y3RvcjogJ0p1c3QnLCBfMDogYX07Cit9OwordmFyIF9lbG1fbGFu
ZyRjb3JlJE1heWJlJG1hcCA9IEYyKAorICAgIGZ1bmN0aW9uIChmLCBtYXliZSkgeworICAgICAg
ICB2YXIgX3A1ID0gbWF5YmU7CisgICAgICAgIGlmIChfcDUuY3RvciA9PT0gJ0p1c3QnKSB7Cisg
ICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVzdCgKKyAgICAgICAgICAg
ICAgICBmKF9wNS5fMCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIF9l
bG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmc7CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxt
X2xhbmckY29yZSRNYXliZSRtYXAyID0gRjMoCisgICAgZnVuY3Rpb24gKGZ1bmMsIG1hLCBtYikg
eworICAgICAgICB2YXIgX3A2ID0ge2N0b3I6ICdfVHVwbGUyJywgXzA6IG1hLCBfMTogbWJ9Owor
ICAgICAgICBpZiAoKChfcDYuY3RvciA9PT0gJ19UdXBsZTInKSAmJiAoX3A2Ll8wLmN0b3IgPT09
ICdKdXN0JykpICYmIChfcDYuXzEuY3RvciA9PT0gJ0p1c3QnKSkgeworICAgICAgICAgICAgcmV0
dXJuIF9lbG1fbGFuZyRjb3JlJE1heWJlJEp1c3QoCisgICAgICAgICAgICAgICAgQTIoZnVuYywg
X3A2Ll8wLl8wLCBfcDYuXzEuXzApKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJl
dHVybiBfZWxtX2xhbmckY29yZSRNYXliZSROb3RoaW5nOworICAgICAgICB9CisgICAgfSk7Cit2
YXIgX2VsbV9sYW5nJGNvcmUkTWF5YmUkbWFwMyA9IEY0KAorICAgIGZ1bmN0aW9uIChmdW5jLCBt
YSwgbWIsIG1jKSB7CisgICAgICAgIHZhciBfcDcgPSB7Y3RvcjogJ19UdXBsZTMnLCBfMDogbWEs
IF8xOiBtYiwgXzI6IG1jfTsKKyAgICAgICAgaWYgKCgoKF9wNy5jdG9yID09PSAnX1R1cGxlMycp
ICYmIChfcDcuXzAuY3RvciA9PT0gJ0p1c3QnKSkgJiYgKF9wNy5fMS5jdG9yID09PSAnSnVzdCcp
KSAmJiAoX3A3Ll8yLmN0b3IgPT09ICdKdXN0JykpIHsKKyAgICAgICAgICAgIHJldHVybiBfZWxt
X2xhbmckY29yZSRNYXliZSRKdXN0KAorICAgICAgICAgICAgICAgIEEzKGZ1bmMsIF9wNy5fMC5f
MCwgX3A3Ll8xLl8wLCBfcDcuXzIuXzApKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHJldHVybiBfZWxtX2xhbmckY29yZSRNYXliZSROb3RoaW5nOworICAgICAgICB9CisgICAgfSk7
Cit2YXIgX2VsbV9sYW5nJGNvcmUkTWF5YmUkbWFwNCA9IEY1KAorICAgIGZ1bmN0aW9uIChmdW5j
LCBtYSwgbWIsIG1jLCBtZCkgeworICAgICAgICB2YXIgX3A4ID0ge2N0b3I6ICdfVHVwbGU0Jywg
XzA6IG1hLCBfMTogbWIsIF8yOiBtYywgXzM6IG1kfTsKKyAgICAgICAgaWYgKCgoKChfcDguY3Rv
ciA9PT0gJ19UdXBsZTQnKSAmJiAoX3A4Ll8wLmN0b3IgPT09ICdKdXN0JykpICYmIChfcDguXzEu
Y3RvciA9PT0gJ0p1c3QnKSkgJiYgKF9wOC5fMi5jdG9yID09PSAnSnVzdCcpKSAmJiAoX3A4Ll8z
LmN0b3IgPT09ICdKdXN0JykpIHsKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRN
YXliZSRKdXN0KAorICAgICAgICAgICAgICAgIEE0KGZ1bmMsIF9wOC5fMC5fMCwgX3A4Ll8xLl8w
LCBfcDguXzIuXzAsIF9wOC5fMy5fMCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
cmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmc7CisgICAgICAgIH0KKyAgICB9KTsK
K3ZhciBfZWxtX2xhbmckY29yZSRNYXliZSRtYXA1ID0gRjYoCisgICAgZnVuY3Rpb24gKGZ1bmMs
IG1hLCBtYiwgbWMsIG1kLCBtZSkgeworICAgICAgICB2YXIgX3A5ID0ge2N0b3I6ICdfVHVwbGU1
JywgXzA6IG1hLCBfMTogbWIsIF8yOiBtYywgXzM6IG1kLCBfNDogbWV9OworICAgICAgICBpZiAo
KCgoKChfcDkuY3RvciA9PT0gJ19UdXBsZTUnKSAmJiAoX3A5Ll8wLmN0b3IgPT09ICdKdXN0Jykp
ICYmIChfcDkuXzEuY3RvciA9PT0gJ0p1c3QnKSkgJiYgKF9wOS5fMi5jdG9yID09PSAnSnVzdCcp
KSAmJiAoX3A5Ll8zLmN0b3IgPT09ICdKdXN0JykpICYmIChfcDkuXzQuY3RvciA9PT0gJ0p1c3Qn
KSkgeworICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1heWJlJEp1c3QoCisgICAg
ICAgICAgICAgICAgQTUoZnVuYywgX3A5Ll8wLl8wLCBfcDkuXzEuXzAsIF9wOS5fMi5fMCwgX3A5
Ll8zLl8wLCBfcDkuXzQuXzApKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVy
biBfZWxtX2xhbmckY29yZSRNYXliZSROb3RoaW5nOworICAgICAgICB9CisgICAgfSk7CisKKy8v
aW1wb3J0IE5hdGl2ZS5VdGlscyAvLworCit2YXIgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3Qg
PSBmdW5jdGlvbigpIHsKKwordmFyIE5pbCA9IHsgY3RvcjogJ1tdJyB9OworCitmdW5jdGlvbiBD
b25zKGhkLCB0bCkKK3sKKyAgICByZXR1cm4geyBjdG9yOiAnOjonLCBfMDogaGQsIF8xOiB0bCB9
OworfQorCitmdW5jdGlvbiBmcm9tQXJyYXkoYXJyKQoreworICAgIHZhciBvdXQgPSBOaWw7Cisg
ICAgZm9yICh2YXIgaSA9IGFyci5sZW5ndGg7IGktLTsgKQorICAgIHsKKyAgICAgICAgb3V0ID0g
Q29ucyhhcnJbaV0sIG91dCk7CisgICAgfQorICAgIHJldHVybiBvdXQ7Cit9CisKK2Z1bmN0aW9u
IHRvQXJyYXkoeHMpCit7CisgICAgdmFyIG91dCA9IFtdOworICAgIHdoaWxlICh4cy5jdG9yICE9
PSAnW10nKQorICAgIHsKKyAgICAgICAgb3V0LnB1c2goeHMuXzApOworICAgICAgICB4cyA9IHhz
Ll8xOworICAgIH0KKyAgICByZXR1cm4gb3V0OworfQorCisKK2Z1bmN0aW9uIHJhbmdlKGxvLCBo
aSkKK3sKKyAgICB2YXIgbGlzdCA9IE5pbDsKKyAgICBpZiAobG8gPD0gaGkpCisgICAgeworICAg
ICAgICBkbworICAgICAgICB7CisgICAgICAgICAgICBsaXN0ID0gQ29ucyhoaSwgbGlzdCk7Cisg
ICAgICAgIH0KKyAgICAgICAgd2hpbGUgKGhpLS0gPiBsbyk7CisgICAgfQorICAgIHJldHVybiBs
aXN0OworfQorCitmdW5jdGlvbiBmb2xkcihmLCBiLCB4cykKK3sKKyAgICB2YXIgYXJyID0gdG9B
cnJheSh4cyk7CisgICAgdmFyIGFjYyA9IGI7CisgICAgZm9yICh2YXIgaSA9IGFyci5sZW5ndGg7
IGktLTsgKQorICAgIHsKKyAgICAgICAgYWNjID0gQTIoZiwgYXJyW2ldLCBhY2MpOworICAgIH0K
KyAgICByZXR1cm4gYWNjOworfQorCitmdW5jdGlvbiBtYXAyKGYsIHhzLCB5cykKK3sKKyAgICB2
YXIgYXJyID0gW107CisgICAgd2hpbGUgKHhzLmN0b3IgIT09ICdbXScgJiYgeXMuY3RvciAhPT0g
J1tdJykKKyAgICB7CisgICAgICAgIGFyci5wdXNoKEEyKGYsIHhzLl8wLCB5cy5fMCkpOworICAg
ICAgICB4cyA9IHhzLl8xOworICAgICAgICB5cyA9IHlzLl8xOworICAgIH0KKyAgICByZXR1cm4g
ZnJvbUFycmF5KGFycik7Cit9CisKK2Z1bmN0aW9uIG1hcDMoZiwgeHMsIHlzLCB6cykKK3sKKyAg
ICB2YXIgYXJyID0gW107CisgICAgd2hpbGUgKHhzLmN0b3IgIT09ICdbXScgJiYgeXMuY3RvciAh
PT0gJ1tdJyAmJiB6cy5jdG9yICE9PSAnW10nKQorICAgIHsKKyAgICAgICAgYXJyLnB1c2goQTMo
ZiwgeHMuXzAsIHlzLl8wLCB6cy5fMCkpOworICAgICAgICB4cyA9IHhzLl8xOworICAgICAgICB5
cyA9IHlzLl8xOworICAgICAgICB6cyA9IHpzLl8xOworICAgIH0KKyAgICByZXR1cm4gZnJvbUFy
cmF5KGFycik7Cit9CisKK2Z1bmN0aW9uIG1hcDQoZiwgd3MsIHhzLCB5cywgenMpCit7CisgICAg
dmFyIGFyciA9IFtdOworICAgIHdoaWxlICggICB3cy5jdG9yICE9PSAnW10nCisgICAgICAgICAg
ICYmIHhzLmN0b3IgIT09ICdbXScKKyAgICAgICAgICAgJiYgeXMuY3RvciAhPT0gJ1tdJworICAg
ICAgICAgICAmJiB6cy5jdG9yICE9PSAnW10nKQorICAgIHsKKyAgICAgICAgYXJyLnB1c2goQTQo
Ziwgd3MuXzAsIHhzLl8wLCB5cy5fMCwgenMuXzApKTsKKyAgICAgICAgd3MgPSB3cy5fMTsKKyAg
ICAgICAgeHMgPSB4cy5fMTsKKyAgICAgICAgeXMgPSB5cy5fMTsKKyAgICAgICAgenMgPSB6cy5f
MTsKKyAgICB9CisgICAgcmV0dXJuIGZyb21BcnJheShhcnIpOworfQorCitmdW5jdGlvbiBtYXA1
KGYsIHZzLCB3cywgeHMsIHlzLCB6cykKK3sKKyAgICB2YXIgYXJyID0gW107CisgICAgd2hpbGUg
KCAgIHZzLmN0b3IgIT09ICdbXScKKyAgICAgICAgICAgJiYgd3MuY3RvciAhPT0gJ1tdJworICAg
ICAgICAgICAmJiB4cy5jdG9yICE9PSAnW10nCisgICAgICAgICAgICYmIHlzLmN0b3IgIT09ICdb
XScKKyAgICAgICAgICAgJiYgenMuY3RvciAhPT0gJ1tdJykKKyAgICB7CisgICAgICAgIGFyci5w
dXNoKEE1KGYsIHZzLl8wLCB3cy5fMCwgeHMuXzAsIHlzLl8wLCB6cy5fMCkpOworICAgICAgICB2
cyA9IHZzLl8xOworICAgICAgICB3cyA9IHdzLl8xOworICAgICAgICB4cyA9IHhzLl8xOworICAg
ICAgICB5cyA9IHlzLl8xOworICAgICAgICB6cyA9IHpzLl8xOworICAgIH0KKyAgICByZXR1cm4g
ZnJvbUFycmF5KGFycik7Cit9CisKK2Z1bmN0aW9uIHNvcnRCeShmLCB4cykKK3sKKyAgICByZXR1
cm4gZnJvbUFycmF5KHRvQXJyYXkoeHMpLnNvcnQoZnVuY3Rpb24oYSwgYikgeworICAgICAgICBy
ZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNtcChmKGEpLCBmKGIpKTsKKyAgICB9
KSk7Cit9CisKK2Z1bmN0aW9uIHNvcnRXaXRoKGYsIHhzKQoreworICAgIHJldHVybiBmcm9tQXJy
YXkodG9BcnJheSh4cykuc29ydChmdW5jdGlvbihhLCBiKSB7CisgICAgICAgIHZhciBvcmQgPSBm
KGEpKGIpLmN0b3I7CisgICAgICAgIHJldHVybiBvcmQgPT09ICdFUScgPyAwIDogb3JkID09PSAn
TFQnID8gLTEgOiAxOworICAgIH0pKTsKK30KKworcmV0dXJuIHsKKyAgICBOaWw6IE5pbCwKKyAg
ICBDb25zOiBDb25zLAorICAgIGNvbnM6IEYyKENvbnMpLAorICAgIHRvQXJyYXk6IHRvQXJyYXks
CisgICAgZnJvbUFycmF5OiBmcm9tQXJyYXksCisgICAgcmFuZ2U6IHJhbmdlLAorCisgICAgZm9s
ZHI6IEYzKGZvbGRyKSwKKworICAgIG1hcDI6IEYzKG1hcDIpLAorICAgIG1hcDM6IEY0KG1hcDMp
LAorICAgIG1hcDQ6IEY1KG1hcDQpLAorICAgIG1hcDU6IEY2KG1hcDUpLAorICAgIHNvcnRCeTog
RjIoc29ydEJ5KSwKKyAgICBzb3J0V2l0aDogRjIoc29ydFdpdGgpCit9OworCit9KCk7Cit2YXIg
X2VsbV9sYW5nJGNvcmUkTGlzdCRzb3J0V2l0aCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0
LnNvcnRXaXRoOwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3Qkc29ydEJ5ID0gX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0xpc3Quc29ydEJ5OwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3Qkc29ydCA9IGZ1
bmN0aW9uICh4cykgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckY29yZSRMaXN0JHNvcnRCeSwg
X2VsbV9sYW5nJGNvcmUkQmFzaWNzJGlkZW50aXR5LCB4cyk7Cit9OwordmFyIF9lbG1fbGFuZyRj
b3JlJExpc3QkZHJvcCA9IEYyKAorICAgIGZ1bmN0aW9uIChuLCBsaXN0KSB7CisgICAgICAgIGRy
b3A6CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpZiAoX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX1V0aWxzLmNtcChuLCAwKSA8IDEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bGlzdDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIF9wMCA9IGxp
c3Q7CisgICAgICAgICAgICAgICAgaWYgKF9wMC5jdG9yID09PSAnW10nKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBsaXN0OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHZhciBfdjEgPSBuIC0gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIF92
MiA9IF9wMC5fMTsKKyAgICAgICAgICAgICAgICAgICAgbiA9IF92MTsKKyAgICAgICAgICAgICAg
ICAgICAgbGlzdCA9IF92MjsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUgZHJvcDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBf
ZWxtX2xhbmckY29yZSRMaXN0JG1hcDUgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5tYXA1
OwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkbWFwNCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9M
aXN0Lm1hcDQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCRtYXAzID0gX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX0xpc3QubWFwMzsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JG1hcDIgPSBfZWxtX2xh
bmckY29yZSROYXRpdmVfTGlzdC5tYXAyOwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkYW55ID0g
RjIoCisgICAgZnVuY3Rpb24gKGlzT2theSwgbGlzdCkgeworICAgICAgICBhbnk6CisgICAgICAg
IHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICB2YXIgX3AxID0gbGlzdDsKKyAgICAgICAgICAg
IGlmIChfcDEuY3RvciA9PT0gJ1tdJykgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGlzT2theShfcDEuXzAp
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBfdjQgPSBpc09rYXksCisgICAgICAgICAg
ICAgICAgICAgICAgICBfdjUgPSBfcDEuXzE7CisgICAgICAgICAgICAgICAgICAgIGlzT2theSA9
IF92NDsKKyAgICAgICAgICAgICAgICAgICAgbGlzdCA9IF92NTsKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWUgYW55OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkYWxsID0gRjIoCisgICAgZnVu
Y3Rpb24gKGlzT2theSwgbGlzdCkgeworICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkQmFz
aWNzJG5vdCgKKyAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JExpc3QkYW55LAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfcDIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRub3QoCisgICAgICAgICAgICAg
ICAgICAgICAgICBpc09rYXkoX3AyKSk7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
ICAgICBsaXN0KSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCRmb2xkciA9IF9l
bG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZvbGRyOwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3Qk
Zm9sZGwgPSBGMygKKyAgICBmdW5jdGlvbiAoZnVuYywgYWNjLCBsaXN0KSB7CisgICAgICAgIGZv
bGRsOgorICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgdmFyIF9wMyA9IGxpc3Q7
CisgICAgICAgICAgICBpZiAoX3AzLmN0b3IgPT09ICdbXScpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gYWNjOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgX3Y3
ID0gZnVuYywKKyAgICAgICAgICAgICAgICAgICAgX3Y4ID0gQTIoZnVuYywgX3AzLl8wLCBhY2Mp
LAorICAgICAgICAgICAgICAgICAgICBfdjkgPSBfcDMuXzE7CisgICAgICAgICAgICAgICAgZnVu
YyA9IF92NzsKKyAgICAgICAgICAgICAgICBhY2MgPSBfdjg7CisgICAgICAgICAgICAgICAgbGlz
dCA9IF92OTsKKyAgICAgICAgICAgICAgICBjb250aW51ZSBmb2xkbDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkbGVuZ3RoID0gZnVu
Y3Rpb24gKHhzKSB7CisgICAgcmV0dXJuIEEzKAorICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0
JGZvbGRsLAorICAgICAgICBGMigKKyAgICAgICAgICAgIGZ1bmN0aW9uIChfcDQsIGkpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gaSArIDE7CisgICAgICAgICAgICB9KSwKKyAgICAgICAgMCwK
KyAgICAgICAgeHMpOworfTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JHN1bSA9IGZ1bmN0aW9u
IChudW1iZXJzKSB7CisgICAgcmV0dXJuIEEzKAorICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0
JGZvbGRsLAorICAgICAgICBGMigKKyAgICAgICAgICAgIGZ1bmN0aW9uICh4LCB5KSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHggKyB5OworICAgICAgICAgICAgfSksCisgICAgICAgIDAsCisg
ICAgICAgIG51bWJlcnMpOworfTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JHByb2R1Y3QgPSBm
dW5jdGlvbiAobnVtYmVycykgeworICAgIHJldHVybiBBMygKKyAgICAgICAgX2VsbV9sYW5nJGNv
cmUkTGlzdCRmb2xkbCwKKyAgICAgICAgRjIoCisgICAgICAgICAgICBmdW5jdGlvbiAoeCwgeSkg
eworICAgICAgICAgICAgICAgIHJldHVybiB4ICogeTsKKyAgICAgICAgICAgIH0pLAorICAgICAg
ICAxLAorICAgICAgICBudW1iZXJzKTsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCRtYXhp
bXVtID0gZnVuY3Rpb24gKGxpc3QpIHsKKyAgICB2YXIgX3A1ID0gbGlzdDsKKyAgICBpZiAoX3A1
LmN0b3IgPT09ICc6OicpIHsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1heWJlJEp1
c3QoCisgICAgICAgICAgICBBMyhfZWxtX2xhbmckY29yZSRMaXN0JGZvbGRsLCBfZWxtX2xhbmck
Y29yZSRCYXNpY3MkbWF4LCBfcDUuXzAsIF9wNS5fMSkpOworICAgIH0gZWxzZSB7CisgICAgICAg
IHJldHVybiBfZWxtX2xhbmckY29yZSRNYXliZSROb3RoaW5nOworICAgIH0KK307Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkTGlzdCRtaW5pbXVtID0gZnVuY3Rpb24gKGxpc3QpIHsKKyAgICB2YXIgX3A2
ID0gbGlzdDsKKyAgICBpZiAoX3A2LmN0b3IgPT09ICc6OicpIHsKKyAgICAgICAgcmV0dXJuIF9l
bG1fbGFuZyRjb3JlJE1heWJlJEp1c3QoCisgICAgICAgICAgICBBMyhfZWxtX2xhbmckY29yZSRM
aXN0JGZvbGRsLCBfZWxtX2xhbmckY29yZSRCYXNpY3MkbWluLCBfcDYuXzAsIF9wNi5fMSkpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRNYXliZSROb3RoaW5n
OworICAgIH0KK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCRpbmRleGVkTWFwID0gRjIoCisg
ICAgZnVuY3Rpb24gKGYsIHhzKSB7CisgICAgICAgIHJldHVybiBBMygKKyAgICAgICAgICAgIF9l
bG1fbGFuZyRjb3JlJExpc3QkbWFwMiwKKyAgICAgICAgICAgIGYsCisgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSROYXRpdmVfTGlzdC5yYW5nZSgKKyAgICAgICAgICAgICAgICAwLAorICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkbGVuZ3RoKHhzKSAtIDEpLAorICAgICAgICAg
ICAgeHMpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkbWVtYmVyID0gRjIoCisg
ICAgZnVuY3Rpb24gKHgsIHhzKSB7CisgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgIF9l
bG1fbGFuZyRjb3JlJExpc3QkYW55LAorICAgICAgICAgICAgZnVuY3Rpb24gKGEpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmVxKGEsIHgpOwor
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHhzKTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmck
Y29yZSRMaXN0JGlzRW1wdHkgPSBmdW5jdGlvbiAoeHMpIHsKKyAgICB2YXIgX3A3ID0geHM7Cisg
ICAgaWYgKF9wNy5jdG9yID09PSAnW10nKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0g
ZWxzZSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9OwordmFyIF9lbG1fbGFuZyRj
b3JlJExpc3QkdGFpbCA9IGZ1bmN0aW9uIChsaXN0KSB7CisgICAgdmFyIF9wOCA9IGxpc3Q7Cisg
ICAgaWYgKF9wOC5jdG9yID09PSAnOjonKSB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29y
ZSRNYXliZSRKdXN0KF9wOC5fMSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIF9lbG1f
bGFuZyRjb3JlJE1heWJlJE5vdGhpbmc7CisgICAgfQorfTsKK3ZhciBfZWxtX2xhbmckY29yZSRM
aXN0JGhlYWQgPSBmdW5jdGlvbiAobGlzdCkgeworICAgIHZhciBfcDkgPSBsaXN0OworICAgIGlm
IChfcDkuY3RvciA9PT0gJzo6JykgeworICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTWF5
YmUkSnVzdChfcDkuXzApOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmck
Y29yZSRNYXliZSROb3RoaW5nOworICAgIH0KK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdF9v
cHMgPSBfZWxtX2xhbmckY29yZSRMaXN0X29wcyB8fCB7fTsKK19lbG1fbGFuZyRjb3JlJExpc3Rf
b3BzWyc6OiddID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuY29uczsKK3ZhciBfZWxtX2xh
bmckY29yZSRMaXN0JG1hcCA9IEYyKAorICAgIGZ1bmN0aW9uIChmLCB4cykgeworICAgICAgICBy
ZXR1cm4gQTMoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JGZvbGRyLAorICAgICAg
ICAgICAgRjIoCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHgsIGFjYykgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmck
Y29yZSRMaXN0X29wc1snOjonXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGYoeCksCisgICAg
ICAgICAgICAgICAgICAgICAgICBhY2MpOworICAgICAgICAgICAgICAgIH0pLAorICAgICAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAg
IFtdKSwKKyAgICAgICAgICAgIHhzKTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0
JGZpbHRlciA9IEYyKAorICAgIGZ1bmN0aW9uIChwcmVkLCB4cykgeworICAgICAgICB2YXIgY29u
ZGl0aW9uYWxDb25zID0gRjIoCisgICAgICAgICAgICBmdW5jdGlvbiAoeCwgeHMkKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHByZWQoeCkgPyBBMihfZWxtX2xhbmckY29yZSRMaXN0X29wc1sn
OjonXSwgeCwgeHMkKSA6IHhzJDsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gQTMo
CisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JGZvbGRyLAorICAgICAgICAgICAgY29u
ZGl0aW9uYWxDb25zLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJv
bUFycmF5KAorICAgICAgICAgICAgICAgIFtdKSwKKyAgICAgICAgICAgIHhzKTsKKyAgICB9KTsK
K3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JG1heWJlQ29ucyA9IEYzKAorICAgIGZ1bmN0aW9uIChm
LCBteCwgeHMpIHsKKyAgICAgICAgdmFyIF9wMTAgPSBmKG14KTsKKyAgICAgICAgaWYgKF9wMTAu
Y3RvciA9PT0gJ0p1c3QnKSB7CisgICAgICAgICAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGNvcmUk
TGlzdF9vcHNbJzo6J10sIF9wMTAuXzAsIHhzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHJldHVybiB4czsKKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJExp
c3QkZmlsdGVyTWFwID0gRjIoCisgICAgZnVuY3Rpb24gKGYsIHhzKSB7CisgICAgICAgIHJldHVy
biBBMygKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkZm9sZHIsCisgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSRMaXN0JG1heWJlQ29ucyhmKSwKKyAgICAgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICBbXSksCisgICAg
ICAgICAgICB4cyk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCRyZXZlcnNlID0g
ZnVuY3Rpb24gKGxpc3QpIHsKKyAgICByZXR1cm4gQTMoCisgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JExpc3QkZm9sZGwsCisgICAgICAgIEYyKAorICAgICAgICAgICAgZnVuY3Rpb24gKHgsIHkpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10s
IHgsIHkpOworICAgICAgICAgICAgfSksCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9M
aXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgIFtdKSwKKyAgICAgICAgbGlzdCk7Cit9OwordmFy
IF9lbG1fbGFuZyRjb3JlJExpc3Qkc2NhbmwgPSBGMygKKyAgICBmdW5jdGlvbiAoZiwgYiwgeHMp
IHsKKyAgICAgICAgdmFyIHNjYW4xID0gRjIoCisgICAgICAgICAgICBmdW5jdGlvbiAoeCwgYWNj
QWNjKSB7CisgICAgICAgICAgICAgICAgdmFyIF9wMTEgPSBhY2NBY2M7CisgICAgICAgICAgICAg
ICAgaWYgKF9wMTEuY3RvciA9PT0gJzo6JykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
QTIoCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0X29wc1snOjon
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEEyKGYsIHgsIF9wMTEuXzApLAorICAgICAgICAg
ICAgICAgICAgICAgICAgYWNjQWNjKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5
KAorICAgICAgICAgICAgICAgICAgICAgICAgW10pOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0pOworICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTGlzdCRyZXZlcnNlKAor
ICAgICAgICAgICAgQTMoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRmb2xk
bCwKKyAgICAgICAgICAgICAgICBzY2FuMSwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgIFtiXSksCisgICAg
ICAgICAgICAgICAgeHMpKTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JGFwcGVu
ZCA9IEYyKAorICAgIGZ1bmN0aW9uICh4cywgeXMpIHsKKyAgICAgICAgdmFyIF9wMTIgPSB5czsK
KyAgICAgICAgaWYgKF9wMTIuY3RvciA9PT0gJ1tdJykgeworICAgICAgICAgICAgcmV0dXJuIHhz
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIEEzKAorICAgICAgICAgICAg
ICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkZm9sZHIsCisgICAgICAgICAgICAgICAgRjIoCisgICAg
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh4LCB5KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gQTIoX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10sIHgsIHkpOworICAgICAg
ICAgICAgICAgICAgICB9KSwKKyAgICAgICAgICAgICAgICB5cywKKyAgICAgICAgICAgICAgICB4
cyk7CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JGNvbmNhdCA9
IGZ1bmN0aW9uIChsaXN0cykgeworICAgIHJldHVybiBBMygKKyAgICAgICAgX2VsbV9sYW5nJGNv
cmUkTGlzdCRmb2xkciwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRhcHBlbmQsCisgICAg
ICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgIFtd
KSwKKyAgICAgICAgbGlzdHMpOworfTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JGNvbmNhdE1h
cCA9IEYyKAorICAgIGZ1bmN0aW9uIChmLCBsaXN0KSB7CisgICAgICAgIHJldHVybiBfZWxtX2xh
bmckY29yZSRMaXN0JGNvbmNhdCgKKyAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJExpc3Qk
bWFwLCBmLCBsaXN0KSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCRwYXJ0aXRp
b24gPSBGMigKKyAgICBmdW5jdGlvbiAocHJlZCwgbGlzdCkgeworICAgICAgICB2YXIgc3RlcCA9
IEYyKAorICAgICAgICAgICAgZnVuY3Rpb24gKHgsIF9wMTMpIHsKKyAgICAgICAgICAgICAgICB2
YXIgX3AxNCA9IF9wMTM7CisgICAgICAgICAgICAgICAgdmFyIF9wMTYgPSBfcDE0Ll8wOworICAg
ICAgICAgICAgICAgIHZhciBfcDE1ID0gX3AxNC5fMTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
cHJlZCh4KSA/IHsKKyAgICAgICAgICAgICAgICAgICAgY3RvcjogJ19UdXBsZTInLAorICAgICAg
ICAgICAgICAgICAgICBfMDogQTIoX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10sIHgsIF9w
MTYpLAorICAgICAgICAgICAgICAgICAgICBfMTogX3AxNQorICAgICAgICAgICAgICAgIH0gOiB7
CisgICAgICAgICAgICAgICAgICAgIGN0b3I6ICdfVHVwbGUyJywKKyAgICAgICAgICAgICAgICAg
ICAgXzA6IF9wMTYsCisgICAgICAgICAgICAgICAgICAgIF8xOiBBMihfZWxtX2xhbmckY29yZSRM
aXN0X29wc1snOjonXSwgeCwgX3AxNSkKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
fSk7CisgICAgICAgIHJldHVybiBBMygKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3Qk
Zm9sZHIsCisgICAgICAgICAgICBzdGVwLAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGN0b3I6ICdfVHVwbGUyJywKKyAgICAgICAgICAgICAgICBfMDogX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICBbXSksCisgICAgICAgICAg
ICAgICAgXzE6IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAg
ICAgICAgICAgICAgW10pCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgbGlzdCk7CisgICAg
fSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCR1bnppcCA9IGZ1bmN0aW9uIChwYWlycykgewor
ICAgIHZhciBzdGVwID0gRjIoCisgICAgICAgIGZ1bmN0aW9uIChfcDE4LCBfcDE3KSB7CisgICAg
ICAgICAgICB2YXIgX3AxOSA9IF9wMTg7CisgICAgICAgICAgICB2YXIgX3AyMCA9IF9wMTc7Cisg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIGN0b3I6ICdfVHVwbGUyJywKKyAg
ICAgICAgICAgICAgICBfMDogQTIoX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10sIF9wMTku
XzAsIF9wMjAuXzApLAorICAgICAgICAgICAgICAgIF8xOiBBMihfZWxtX2xhbmckY29yZSRMaXN0
X29wc1snOjonXSwgX3AxOS5fMSwgX3AyMC5fMSkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0p
OworICAgIHJldHVybiBBMygKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRmb2xkciwKKyAg
ICAgICAgc3RlcCwKKyAgICAgICAgeworICAgICAgICAgICAgY3RvcjogJ19UdXBsZTInLAorICAg
ICAgICAgICAgXzA6IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAg
ICAgICAgICAgICBbXSksCisgICAgICAgICAgICBfMTogX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xp
c3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgIFtdKQorICAgICAgICB9LAorICAgICAgICBw
YWlycyk7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkaW50ZXJzcGVyc2UgPSBGMigKKyAg
ICBmdW5jdGlvbiAoc2VwLCB4cykgeworICAgICAgICB2YXIgX3AyMSA9IHhzOworICAgICAgICBp
ZiAoX3AyMS5jdG9yID09PSAnW10nKSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgIFtdKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBzdGVwID0gRjIoCisgICAgICAgICAgICAgICAgZnVu
Y3Rpb24gKHgsIHJlc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAg
ICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10sCisgICAgICAg
ICAgICAgICAgICAgICAgICBzZXAsCisgICAgICAgICAgICAgICAgICAgICAgICBBMihfZWxtX2xh
bmckY29yZSRMaXN0X29wc1snOjonXSwgeCwgcmVzdCkpOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgdmFyIHNwZXJzZWQgPSBBMygKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmck
Y29yZSRMaXN0JGZvbGRyLAorICAgICAgICAgICAgICAgIHN0ZXAsCisgICAgICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAg
ICBbXSksCisgICAgICAgICAgICAgICAgX3AyMS5fMSk7CisgICAgICAgICAgICByZXR1cm4gQTIo
X2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10sIF9wMjEuXzAsIHNwZXJzZWQpOworICAgICAg
ICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCR0YWtlUmV2ZXJzZSA9IEYzKAor
ICAgIGZ1bmN0aW9uIChuLCBsaXN0LCB0YWtlbikgeworICAgICAgICB0YWtlUmV2ZXJzZToKKyAg
ICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGlmIChfZWxtX2xhbmckY29yZSROYXRp
dmVfVXRpbHMuY21wKG4sIDApIDwgMSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0YWtlbjsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIF9wMjIgPSBsaXN0Owor
ICAgICAgICAgICAgICAgIGlmIChfcDIyLmN0b3IgPT09ICdbXScpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRha2VuOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIHZhciBfdjIzID0gbiAtIDEsCisgICAgICAgICAgICAgICAgICAgICAgICBfdjI0
ID0gX3AyMi5fMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIF92MjUgPSBBMihfZWxtX2xhbmck
Y29yZSRMaXN0X29wc1snOjonXSwgX3AyMi5fMCwgdGFrZW4pOworICAgICAgICAgICAgICAgICAg
ICBuID0gX3YyMzsKKyAgICAgICAgICAgICAgICAgICAgbGlzdCA9IF92MjQ7CisgICAgICAgICAg
ICAgICAgICAgIHRha2VuID0gX3YyNTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUgdGFr
ZVJldmVyc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkTGlzdCR0YWtlVGFpbFJlYyA9IEYyKAorICAgIGZ1
bmN0aW9uIChuLCBsaXN0KSB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRMaXN0JHJl
dmVyc2UoCisgICAgICAgICAgICBBMygKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRM
aXN0JHRha2VSZXZlcnNlLAorICAgICAgICAgICAgICAgIG4sCisgICAgICAgICAgICAgICAgbGlz
dCwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXko
CisgICAgICAgICAgICAgICAgICAgIFtdKSkpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3Jl
JExpc3QkdGFrZUZhc3QgPSBGMygKKyAgICBmdW5jdGlvbiAoY3RyLCBuLCBsaXN0KSB7CisgICAg
ICAgIGlmIChfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY21wKG4sIDApIDwgMSkgeworICAg
ICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAg
ICAgICAgICAgICAgICBbXSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgX3Ay
MyA9IHtjdG9yOiAnX1R1cGxlMicsIF8wOiBuLCBfMTogbGlzdH07CisgICAgICAgICAgICBfdjI2
XzU6CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgX3YyNl8xOgorICAgICAgICAg
ICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKF9wMjMuY3RvciA9PT0gJ19UdXBs
ZTInKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3AyMy5fMS5jdG9yID09PSAnW10n
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3Q7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChf
cDIzLl8xLl8xLmN0b3IgPT09ICc6OicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoIChfcDIzLl8wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsg
X3YyNl8xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29y
ZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFtfcDIzLl8xLl8wLCBfcDIzLl8xLl8xLl8wXSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKF9wMjMuXzEuXzEuXzEuY3RvciA9PT0gJzo6JykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgW19wMjMuXzEuXzAsIF9wMjMuXzEuXzEuXzAsIF9wMjMuXzEuXzEu
XzEuXzBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjI2
XzU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoKF9wMjMuXzEuXzEuXzEuY3RvciA9PT0gJzo6JykgJiYg
KF9wMjMuXzEuXzEuXzEuXzEuY3RvciA9PT0gJzo6JykpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9wMjggPSBfcDIzLl8xLl8xLl8xLl8wOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3AyNyA9IF9wMjMu
XzEuXzEuXzA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBfcDI2ID0gX3AyMy5fMS5fMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIF9wMjUgPSBfcDIzLl8xLl8xLl8xLl8xLl8wOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3AyNCA9IF9wMjMuXzEuXzEuXzEuXzEu
XzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAo
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNtcChjdHIsIDEwMDApID4gMCkgPyBBMigKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRj
b3JlJExpc3Rfb3BzWyc6OiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX3AyNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6OiddLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9wMjcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JExpc3Rfb3BzWyc6OiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfcDI4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6
OiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX3AyNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJExpc3QkdGFrZVRhaWxSZWMsIG4g
LSA0LCBfcDI0KSkpKSkgOiBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6OiddLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3AyNiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3Rfb3Bz
Wyc6OiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9wMjcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6OiddLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcDI4LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBMigKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9l
bG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6OiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3AyNSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEzKF9lbG1fbGFuZyRj
b3JlJExpc3QkdGFrZUZhc3QsIGN0ciArIDEsIG4gLSA0LCBfcDI0KSkpKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3YyNl81OworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChfcDIzLl8wID09PSAxKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhayBfdjI2XzE7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhayBfdjI2XzU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjI2
XzU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IHdoaWxlKGZhbHNl
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJv
bUFycmF5KAorICAgICAgICAgICAgICAgICAgICBbX3AyMy5fMS5fMF0pOworICAgICAgICAgICAg
fSB3aGlsZShmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gbGlzdDsKKyAgICAgICAgfQorICAg
IH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJExpc3QkdGFrZSA9IEYyKAorICAgIGZ1bmN0aW9uIChu
LCBsaXN0KSB7CisgICAgICAgIHJldHVybiBBMyhfZWxtX2xhbmckY29yZSRMaXN0JHRha2VGYXN0
LCAwLCBuLCBsaXN0KTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JHJlcGVhdEhl
bHAgPSBGMygKKyAgICBmdW5jdGlvbiAocmVzdWx0LCBuLCB2YWx1ZSkgeworICAgICAgICByZXBl
YXRIZWxwOgorICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYgKF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9VdGlscy5jbXAobiwgMCkgPCAxKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIF92
MjcgPSBBMihfZWxtX2xhbmckY29yZSRMaXN0X29wc1snOjonXSwgdmFsdWUsIHJlc3VsdCksCisg
ICAgICAgICAgICAgICAgICAgIF92MjggPSBuIC0gMSwKKyAgICAgICAgICAgICAgICAgICAgX3Yy
OSA9IHZhbHVlOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IF92Mjc7CisgICAgICAgICAgICAg
ICAgbiA9IF92Mjg7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBfdjI5OworICAgICAgICAgICAg
ICAgIGNvbnRpbnVlIHJlcGVhdEhlbHA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
KTsKK3ZhciBfZWxtX2xhbmckY29yZSRMaXN0JHJlcGVhdCA9IEYyKAorICAgIGZ1bmN0aW9uIChu
LCB2YWx1ZSkgeworICAgICAgICByZXR1cm4gQTMoCisgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSRMaXN0JHJlcGVhdEhlbHAsCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlz
dC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgW10pLAorICAgICAgICAgICAgbiwKKyAgICAg
ICAgICAgIHZhbHVlKTsKKyAgICB9KTsKKwordmFyIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCR0b01h
eWJlID0gZnVuY3Rpb24gKHJlc3VsdCkgeworICAgIHZhciBfcDAgPSByZXN1bHQ7CisgICAgaWYg
KF9wMC5jdG9yID09PSAnT2snKSB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRNYXli
ZSRKdXN0KF9wMC5fMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRj
b3JlJE1heWJlJE5vdGhpbmc7CisgICAgfQorfTsKK3ZhciBfZWxtX2xhbmckY29yZSRSZXN1bHQk
d2l0aERlZmF1bHQgPSBGMigKKyAgICBmdW5jdGlvbiAoZGVmLCByZXN1bHQpIHsKKyAgICAgICAg
dmFyIF9wMSA9IHJlc3VsdDsKKyAgICAgICAgaWYgKF9wMS5jdG9yID09PSAnT2snKSB7CisgICAg
ICAgICAgICByZXR1cm4gX3AxLl8wOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0
dXJuIGRlZjsKKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRF
cnIgPSBmdW5jdGlvbiAoYSkgeworICAgIHJldHVybiB7Y3RvcjogJ0VycicsIF8wOiBhfTsKK307
Cit2YXIgX2VsbV9sYW5nJGNvcmUkUmVzdWx0JGFuZFRoZW4gPSBGMigKKyAgICBmdW5jdGlvbiAo
cmVzdWx0LCBjYWxsYmFjaykgeworICAgICAgICB2YXIgX3AyID0gcmVzdWx0OworICAgICAgICBp
ZiAoX3AyLmN0b3IgPT09ICdPaycpIHsKKyAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhfcDIu
XzApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3Jl
JFJlc3VsdCRFcnIoX3AyLl8wKTsKKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRj
b3JlJFJlc3VsdCRPayA9IGZ1bmN0aW9uIChhKSB7CisgICAgcmV0dXJuIHtjdG9yOiAnT2snLCBf
MDogYX07Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRtYXAgPSBGMigKKyAgICBmdW5j
dGlvbiAoZnVuYywgcmEpIHsKKyAgICAgICAgdmFyIF9wMyA9IHJhOworICAgICAgICBpZiAoX3Az
LmN0b3IgPT09ICdPaycpIHsKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1
bHQkT2soCisgICAgICAgICAgICAgICAgZnVuYyhfcDMuXzApKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1bHQkRXJyKF9wMy5fMCk7Cisg
ICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRSZXN1bHQkbWFwMiA9IEYzKAor
ICAgIGZ1bmN0aW9uIChmdW5jLCByYSwgcmIpIHsKKyAgICAgICAgdmFyIF9wNCA9IHtjdG9yOiAn
X1R1cGxlMicsIF8wOiByYSwgXzE6IHJifTsKKyAgICAgICAgaWYgKF9wNC5fMC5jdG9yID09PSAn
T2snKSB7CisgICAgICAgICAgICBpZiAoX3A0Ll8xLmN0b3IgPT09ICdPaycpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JE9rKAorICAgICAgICAgICAgICAg
ICAgICBBMihmdW5jLCBfcDQuXzAuXzAsIF9wNC5fMS5fMCkpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JEVycihfcDQu
XzEuXzApOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0
dXJuIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRFcnIoX3A0Ll8wLl8wKTsKKyAgICAgICAgfQorICAg
IH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRtYXAzID0gRjQoCisgICAgZnVuY3Rpb24g
KGZ1bmMsIHJhLCByYiwgcmMpIHsKKyAgICAgICAgdmFyIF9wNSA9IHtjdG9yOiAnX1R1cGxlMycs
IF8wOiByYSwgXzE6IHJiLCBfMjogcmN9OworICAgICAgICBpZiAoX3A1Ll8wLmN0b3IgPT09ICdP
aycpIHsKKyAgICAgICAgICAgIGlmIChfcDUuXzEuY3RvciA9PT0gJ09rJykgeworICAgICAgICAg
ICAgICAgIGlmIChfcDUuXzIuY3RvciA9PT0gJ09rJykgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JE9rKAorICAgICAgICAgICAgICAgICAgICAgICAg
QTMoZnVuYywgX3A1Ll8wLl8wLCBfcDUuXzEuXzAsIF9wNS5fMi5fMCkpOworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRS
ZXN1bHQkRXJyKF9wNS5fMi5fMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JEVycihf
cDUuXzEuXzApOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
cmV0dXJuIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRFcnIoX3A1Ll8wLl8wKTsKKyAgICAgICAgfQor
ICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRtYXA0ID0gRjUoCisgICAgZnVuY3Rp
b24gKGZ1bmMsIHJhLCByYiwgcmMsIHJkKSB7CisgICAgICAgIHZhciBfcDYgPSB7Y3RvcjogJ19U
dXBsZTQnLCBfMDogcmEsIF8xOiByYiwgXzI6IHJjLCBfMzogcmR9OworICAgICAgICBpZiAoX3A2
Ll8wLmN0b3IgPT09ICdPaycpIHsKKyAgICAgICAgICAgIGlmIChfcDYuXzEuY3RvciA9PT0gJ09r
JykgeworICAgICAgICAgICAgICAgIGlmIChfcDYuXzIuY3RvciA9PT0gJ09rJykgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoX3A2Ll8zLmN0b3IgPT09ICdPaycpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1bHQkT2soCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQTQoZnVuYywgX3A2Ll8wLl8wLCBfcDYuXzEuXzAsIF9wNi5fMi5fMCwg
X3A2Ll8zLl8wKSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JEVycihfcDYuXzMuXzApOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRFcnIoX3A2Ll8yLl8wKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1bHQkRXJyKF9wNi5fMS5fMCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUk
UmVzdWx0JEVycihfcDYuXzAuXzApOworICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5n
JGNvcmUkUmVzdWx0JG1hcDUgPSBGNigKKyAgICBmdW5jdGlvbiAoZnVuYywgcmEsIHJiLCByYywg
cmQsIHJlKSB7CisgICAgICAgIHZhciBfcDcgPSB7Y3RvcjogJ19UdXBsZTUnLCBfMDogcmEsIF8x
OiByYiwgXzI6IHJjLCBfMzogcmQsIF80OiByZX07CisgICAgICAgIGlmIChfcDcuXzAuY3RvciA9
PT0gJ09rJykgeworICAgICAgICAgICAgaWYgKF9wNy5fMS5jdG9yID09PSAnT2snKSB7CisgICAg
ICAgICAgICAgICAgaWYgKF9wNy5fMi5jdG9yID09PSAnT2snKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChfcDcuXzMuY3RvciA9PT0gJ09rJykgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKF9wNy5fNC5jdG9yID09PSAnT2snKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRPaygKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQTUoZnVuYywgX3A3Ll8wLl8wLCBfcDcuXzEuXzAsIF9wNy5fMi5fMCwgX3A3Ll8z
Ll8wLCBfcDcuXzQuXzApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRFcnIo
X3A3Ll80Ll8wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29y
ZSRSZXN1bHQkRXJyKF9wNy5fMy5fMCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNv
cmUkUmVzdWx0JEVycihfcDcuXzIuXzApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRF
cnIoX3A3Ll8xLl8wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1bHQkRXJyKF9wNy5fMC5fMCk7CisgICAgICAg
IH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRSZXN1bHQkZm9ybWF0RXJyb3IgPSBGMigK
KyAgICBmdW5jdGlvbiAoZiwgcmVzdWx0KSB7CisgICAgICAgIHZhciBfcDggPSByZXN1bHQ7Cisg
ICAgICAgIGlmIChfcDguY3RvciA9PT0gJ09rJykgeworICAgICAgICAgICAgcmV0dXJuIF9lbG1f
bGFuZyRjb3JlJFJlc3VsdCRPayhfcDguXzApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRFcnIoCisgICAgICAgICAgICAgICAgZihf
cDguXzApKTsKKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRm
cm9tTWF5YmUgPSBGMigKKyAgICBmdW5jdGlvbiAoZXJyLCBtYXliZSkgeworICAgICAgICB2YXIg
X3A5ID0gbWF5YmU7CisgICAgICAgIGlmIChfcDkuY3RvciA9PT0gJ0p1c3QnKSB7CisgICAgICAg
ICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JE9rKF9wOS5fMCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JEVycihlcnIp
OworICAgICAgICB9CisgICAgfSk7CisKKy8vaW1wb3J0IC8vCisKK3ZhciBfZWxtX2xhbmckY29y
ZSROYXRpdmVfUGxhdGZvcm0gPSBmdW5jdGlvbigpIHsKKworCisvLyBQUk9HUkFNUworCitmdW5j
dGlvbiBhZGRQdWJsaWNNb2R1bGUob2JqZWN0LCBuYW1lLCBtYWluKQoreworICAgIHZhciBpbml0
ID0gbWFpbiA/IG1ha2VFbWJlZChuYW1lLCBtYWluKSA6IG1haW5Jc1VuZGVmaW5lZChuYW1lKTsK
KworICAgIG9iamVjdFsnd29ya2VyJ10gPSBmdW5jdGlvbiB3b3JrZXIoZmxhZ3MpCisgICAgewor
ICAgICAgICByZXR1cm4gaW5pdCh1bmRlZmluZWQsIGZsYWdzLCBmYWxzZSk7CisgICAgfQorCisg
ICAgb2JqZWN0WydlbWJlZCddID0gZnVuY3Rpb24gZW1iZWQoZG9tTm9kZSwgZmxhZ3MpCisgICAg
eworICAgICAgICByZXR1cm4gaW5pdChkb21Ob2RlLCBmbGFncywgdHJ1ZSk7CisgICAgfQorCisg
ICAgb2JqZWN0WydmdWxsc2NyZWVuJ10gPSBmdW5jdGlvbiBmdWxsc2NyZWVuKGZsYWdzKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGluaXQoZG9jdW1lbnQuYm9keSwgZmxhZ3MsIHRydWUpOworICAg
IH07Cit9CisKKworLy8gUFJPR1JBTSBGQUlMCisKK2Z1bmN0aW9uIG1haW5Jc1VuZGVmaW5lZChu
YW1lKQoreworICAgIHJldHVybiBmdW5jdGlvbihkb21Ob2RlKQorICAgIHsKKyAgICAgICAgdmFy
IG1lc3NhZ2UgPSAnQ2Fubm90IGluaXRpYWxpemUgbW9kdWxlIGAnICsgbmFtZSArCisgICAgICAg
ICAgICAnYCBiZWNhdXNlIGl0IGhhcyBubyBgbWFpbmAgdmFsdWUhXG5XaGF0IHNob3VsZCBJIHNo
b3cgb24gc2NyZWVuPyc7CisgICAgICAgIGRvbU5vZGUuaW5uZXJIVE1MID0gZXJyb3JIdG1sKG1l
c3NhZ2UpOworICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7CisgICAgfTsKK30KKwor
ZnVuY3Rpb24gZXJyb3JIdG1sKG1lc3NhZ2UpCit7CisgICAgcmV0dXJuICc8ZGl2IHN0eWxlPSJw
YWRkaW5nLWxlZnQ6MWVtOyI+JworICAgICAgICArICc8aDIgc3R5bGU9ImZvbnQtd2VpZ2h0Om5v
cm1hbDsiPjxiPk9vcHMhPC9iPiBTb21ldGhpbmcgd2VudCB3cm9uZyB3aGVuIHN0YXJ0aW5nIHlv
dXIgRWxtIHByb2dyYW0uPC9oMj4nCisgICAgICAgICsgJzxwcmUgc3R5bGU9InBhZGRpbmctbGVm
dDoxZW07Ij4nICsgbWVzc2FnZSArICc8L3ByZT4nCisgICAgICAgICsgJzwvZGl2Pic7Cit9CisK
KworLy8gUFJPR1JBTSBTVUNDRVNTCisKK2Z1bmN0aW9uIG1ha2VFbWJlZChtb2R1bGVOYW1lLCBt
YWluKQoreworICAgIHJldHVybiBmdW5jdGlvbiBlbWJlZChyb290RG9tTm9kZSwgZmxhZ3MsIHdp
dGhSZW5kZXJlcikKKyAgICB7CisgICAgICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICB2
YXIgcHJvZ3JhbSA9IG1haW5Ub1Byb2dyYW0obW9kdWxlTmFtZSwgbWFpbik7CisgICAgICAgICAg
ICBpZiAoIXdpdGhSZW5kZXJlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcm9n
cmFtLnJlbmRlcmVyID0gZHVtbXlSZW5kZXJlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiBtYWtlRW1iZWRIZWxwKG1vZHVsZU5hbWUsIHByb2dyYW0sIHJvb3REb21Ob2RlLCBm
bGFncyk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKGUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJvb3REb21Ob2RlLmlubmVySFRNTCA9IGVycm9ySHRtbChlLm1lc3NhZ2UpOworICAgICAg
ICAgICAgdGhyb3cgZTsKKyAgICAgICAgfQorICAgIH07Cit9CisKK2Z1bmN0aW9uIGR1bW15UmVu
ZGVyZXIoKQoreworICAgIHJldHVybiB7IHVwZGF0ZTogZnVuY3Rpb24oKSB7fSB9OworfQorCisK
Ky8vIE1BSU4gVE8gUFJPR1JBTQorCitmdW5jdGlvbiBtYWluVG9Qcm9ncmFtKG1vZHVsZU5hbWUs
IHdyYXBwZWRNYWluKQoreworICAgIHZhciBtYWluID0gd3JhcHBlZE1haW4ubWFpbjsKKworICAg
IGlmICh0eXBlb2YgbWFpbi5pbml0ID09PSAndW5kZWZpbmVkJykKKyAgICB7CisgICAgICAgIHZh
ciBlbXB0eUJhZyA9IGJhdGNoKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0Lk5pbCk7CisgICAg
ICAgIHZhciBub0NoYW5nZSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5UdXBsZTIoCisg
ICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuVHVwbGUwLAorICAgICAgICAg
ICAgZW1wdHlCYWcKKyAgICAgICAgKTsKKworICAgICAgICByZXR1cm4gX2VsbV9sYW5nJHZpcnR1
YWxfZG9tJFZpcnR1YWxEb20kcHJvZ3JhbVdpdGhGbGFncyh7CisgICAgICAgICAgICBpbml0OiBm
dW5jdGlvbigpIHsgcmV0dXJuIG5vQ2hhbmdlOyB9LAorICAgICAgICAgICAgdmlldzogZnVuY3Rp
b24oKSB7IHJldHVybiBtYWluOyB9LAorICAgICAgICAgICAgdXBkYXRlOiBGMihmdW5jdGlvbigp
IHsgcmV0dXJuIG5vQ2hhbmdlOyB9KSwKKyAgICAgICAgICAgIHN1YnNjcmlwdGlvbnM6IGZ1bmN0
aW9uICgpIHsgcmV0dXJuIGVtcHR5QmFnOyB9CisgICAgICAgIH0pOworICAgIH0KKworICAgIHZh
ciBmbGFncyA9IHdyYXBwZWRNYWluLmZsYWdzOworICAgIHZhciBpbml0ID0gZmxhZ3MKKyAgICAg
ICAgPyBpbml0V2l0aEZsYWdzKG1vZHVsZU5hbWUsIG1haW4uaW5pdCwgZmxhZ3MpCisgICAgICAg
IDogaW5pdFdpdGhvdXRGbGFncyhtb2R1bGVOYW1lLCBtYWluLmluaXQpOworCisgICAgcmV0dXJu
IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJHByb2dyYW1XaXRoRmxhZ3MoeworICAg
ICAgICBpbml0OiBpbml0LAorICAgICAgICB2aWV3OiBtYWluLnZpZXcsCisgICAgICAgIHVwZGF0
ZTogbWFpbi51cGRhdGUsCisgICAgICAgIHN1YnNjcmlwdGlvbnM6IG1haW4uc3Vic2NyaXB0aW9u
cywKKyAgICB9KTsKK30KKworZnVuY3Rpb24gaW5pdFdpdGhvdXRGbGFncyhtb2R1bGVOYW1lLCBy
ZWFsSW5pdCkKK3sKKyAgICByZXR1cm4gZnVuY3Rpb24gaW5pdChmbGFncykKKyAgICB7CisgICAg
ICAgIGlmICh0eXBlb2YgZmxhZ3MgIT09ICd1bmRlZmluZWQnKQorICAgICAgICB7CisgICAgICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoCisgICAgICAgICAgICAgICAgJ1lvdSBhcmUgZ2l2aW5nIG1v
ZHVsZSBgJyArIG1vZHVsZU5hbWUgKyAnYCBhbiBhcmd1bWVudCBpbiBKYXZhU2NyaXB0LlxuJwor
ICAgICAgICAgICAgICAgICsgJ1RoaXMgbW9kdWxlIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIHRo
b3VnaCEgWW91IHByb2JhYmx5IG5lZWQgdG8gY2hhbmdlIHRoZVxuJworICAgICAgICAgICAgICAg
ICsgJ2luaXRpYWxpemF0aW9uIGNvZGUgdG8gc29tZXRoaW5nIGxpa2UgYEVsbS4nICsgbW9kdWxl
TmFtZSArICcuZnVsbHNjcmVlbigpYCcKKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHJlYWxJbml0KCk7CisgICAgfTsKK30KKworZnVuY3Rpb24gaW5pdFdpdGhGbGFn
cyhtb2R1bGVOYW1lLCByZWFsSW5pdCwgZmxhZ0RlY29kZXIpCit7CisgICAgcmV0dXJuIGZ1bmN0
aW9uIGluaXQoZmxhZ3MpCisgICAgeworICAgICAgICB2YXIgcmVzdWx0ID0gQTIoX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX0pzb24ucnVuLCBmbGFnRGVjb2RlciwgZmxhZ3MpOworICAgICAgICBpZiAo
cmVzdWx0LmN0b3IgPT09ICdFcnInKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoCisgICAgICAgICAgICAgICAgJ1lvdSBhcmUgdHJ5aW5nIHRvIGluaXRpYWxpemUgbW9k
dWxlIGAnICsgbW9kdWxlTmFtZSArICdgIHdpdGggYW4gdW5leHBlY3RlZCBhcmd1bWVudC5cbicK
KyAgICAgICAgICAgICAgICArICdXaGVuIHRyeWluZyB0byBjb252ZXJ0IGl0IHRvIGEgdXNhYmxl
IEVsbSB2YWx1ZSwgSSBydW4gaW50byB0aGlzIHByb2JsZW06XG5cbicKKyAgICAgICAgICAgICAg
ICArIHJlc3VsdC5fMAorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
cmVhbEluaXQocmVzdWx0Ll8wKTsKKyAgICB9OworfQorCisKKy8vIFNFVFVQIFJVTlRJTUUgU1lT
VEVNCisKK2Z1bmN0aW9uIG1ha2VFbWJlZEhlbHAobW9kdWxlTmFtZSwgcHJvZ3JhbSwgcm9vdERv
bU5vZGUsIGZsYWdzKQoreworICAgIHZhciBpbml0ID0gcHJvZ3JhbS5pbml0OworICAgIHZhciB1
cGRhdGUgPSBwcm9ncmFtLnVwZGF0ZTsKKyAgICB2YXIgc3Vic2NyaXB0aW9ucyA9IHByb2dyYW0u
c3Vic2NyaXB0aW9uczsKKyAgICB2YXIgdmlldyA9IHByb2dyYW0udmlldzsKKyAgICB2YXIgbWFr
ZVJlbmRlcmVyID0gcHJvZ3JhbS5yZW5kZXJlcjsKKworICAgIC8vIGFtYmllbnQgc3RhdGUKKyAg
ICB2YXIgbWFuYWdlcnMgPSB7fTsKKyAgICB2YXIgcmVuZGVyZXI7CisKKyAgICAvLyBpbml0IGFu
ZCB1cGRhdGUgc3RhdGUgaW4gbWFpbiBwcm9jZXNzCisgICAgdmFyIGluaXRBcHAgPSBfZWxtX2xh
bmckY29yZSROYXRpdmVfU2NoZWR1bGVyLm5hdGl2ZUJpbmRpbmcoZnVuY3Rpb24oY2FsbGJhY2sp
IHsKKyAgICAgICAgdmFyIHJlc3VsdHMgPSBpbml0KGZsYWdzKTsKKyAgICAgICAgdmFyIG1vZGVs
ID0gcmVzdWx0cy5fMDsKKyAgICAgICAgcmVuZGVyZXIgPSBtYWtlUmVuZGVyZXIocm9vdERvbU5v
ZGUsIGVucXVldWUsIHZpZXcobW9kZWwpKTsKKyAgICAgICAgdmFyIGNtZHMgPSByZXN1bHRzLl8x
OworICAgICAgICB2YXIgc3VicyA9IHN1YnNjcmlwdGlvbnMobW9kZWwpOworICAgICAgICBkaXNw
YXRjaEVmZmVjdHMobWFuYWdlcnMsIGNtZHMsIHN1YnMpOworICAgICAgICBjYWxsYmFjayhfZWxt
X2xhbmckY29yZSROYXRpdmVfU2NoZWR1bGVyLnN1Y2NlZWQobW9kZWwpKTsKKyAgICB9KTsKKwor
ICAgIGZ1bmN0aW9uIG9uTWVzc2FnZShtc2csIG1vZGVsKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIubmF0aXZlQmluZGluZyhmdW5jdGlvbihj
YWxsYmFjaykgeworICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBBMih1cGRhdGUsIG1zZywgbW9k
ZWwpOworICAgICAgICAgICAgbW9kZWwgPSByZXN1bHRzLl8wOworICAgICAgICAgICAgcmVuZGVy
ZXIudXBkYXRlKHZpZXcobW9kZWwpKTsKKyAgICAgICAgICAgIHZhciBjbWRzID0gcmVzdWx0cy5f
MTsKKyAgICAgICAgICAgIHZhciBzdWJzID0gc3Vic2NyaXB0aW9ucyhtb2RlbCk7CisgICAgICAg
ICAgICBkaXNwYXRjaEVmZmVjdHMobWFuYWdlcnMsIGNtZHMsIHN1YnMpOworICAgICAgICAgICAg
Y2FsbGJhY2soX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5zdWNjZWVkKG1vZGVsKSk7
CisgICAgICAgIH0pOworICAgIH0KKworICAgIHZhciBtYWluUHJvY2VzcyA9IHNwYXduTG9vcChp
bml0QXBwLCBvbk1lc3NhZ2UpOworCisgICAgZnVuY3Rpb24gZW5xdWV1ZShtc2cpCisgICAgewor
ICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1bGVyLnJhd1NlbmQobWFpblByb2Nl
c3MsIG1zZyk7CisgICAgfQorCisgICAgdmFyIHBvcnRzID0gc2V0dXBFZmZlY3RzKG1hbmFnZXJz
LCBlbnF1ZXVlKTsKKworICAgIHJldHVybiBwb3J0cyA/IHsgcG9ydHM6IHBvcnRzIH0gOiB7fTsK
K30KKworCisvLyBFRkZFQ1QgTUFOQUdFUlMKKwordmFyIGVmZmVjdE1hbmFnZXJzID0ge307CisK
K2Z1bmN0aW9uIHNldHVwRWZmZWN0cyhtYW5hZ2VycywgY2FsbGJhY2spCit7CisgICAgdmFyIHBv
cnRzOworCisgICAgLy8gc2V0dXAgYWxsIG5lY2Vzc2FyeSBlZmZlY3QgbWFuYWdlcnMKKyAgICBm
b3IgKHZhciBrZXkgaW4gZWZmZWN0TWFuYWdlcnMpCisgICAgeworICAgICAgICB2YXIgbWFuYWdl
ciA9IGVmZmVjdE1hbmFnZXJzW2tleV07CisKKyAgICAgICAgaWYgKG1hbmFnZXIuaXNGb3JlaWdu
KQorICAgICAgICB7CisgICAgICAgICAgICBwb3J0cyA9IHBvcnRzIHx8IHt9OworICAgICAgICAg
ICAgcG9ydHNba2V5XSA9IG1hbmFnZXIudGFnID09PSAnY21kJworICAgICAgICAgICAgICAgID8g
c2V0dXBPdXRnb2luZ1BvcnQoa2V5KQorICAgICAgICAgICAgICAgIDogc2V0dXBJbmNvbWluZ1Bv
cnQoa2V5LCBjYWxsYmFjayk7CisgICAgICAgIH0KKworICAgICAgICBtYW5hZ2Vyc1trZXldID0g
bWFrZU1hbmFnZXIobWFuYWdlciwgY2FsbGJhY2spOworICAgIH0KKworICAgIHJldHVybiBwb3J0
czsKK30KKworZnVuY3Rpb24gbWFrZU1hbmFnZXIoaW5mbywgY2FsbGJhY2spCit7CisgICAgdmFy
IHJvdXRlciA9IHsKKyAgICAgICAgbWFpbjogY2FsbGJhY2ssCisgICAgICAgIHNlbGY6IHVuZGVm
aW5lZAorICAgIH07CisKKyAgICB2YXIgdGFnID0gaW5mby50YWc7CisgICAgdmFyIG9uRWZmZWN0
cyA9IGluZm8ub25FZmZlY3RzOworICAgIHZhciBvblNlbGZNc2cgPSBpbmZvLm9uU2VsZk1zZzsK
KworICAgIGZ1bmN0aW9uIG9uTWVzc2FnZShtc2csIHN0YXRlKQorICAgIHsKKyAgICAgICAgaWYg
KG1zZy5jdG9yID09PSAnc2VsZicpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBBMyhv
blNlbGZNc2csIHJvdXRlciwgbXNnLl8wLCBzdGF0ZSk7CisgICAgICAgIH0KKworICAgICAgICB2
YXIgZnggPSBtc2cuXzA7CisgICAgICAgIHN3aXRjaCAodGFnKQorICAgICAgICB7CisgICAgICAg
ICAgICBjYXNlICdjbWQnOgorICAgICAgICAgICAgICAgIHJldHVybiBBMyhvbkVmZmVjdHMsIHJv
dXRlciwgZnguY21kcywgc3RhdGUpOworCisgICAgICAgICAgICBjYXNlICdzdWInOgorICAgICAg
ICAgICAgICAgIHJldHVybiBBMyhvbkVmZmVjdHMsIHJvdXRlciwgZnguc3Vicywgc3RhdGUpOwor
CisgICAgICAgICAgICBjYXNlICdmeCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIEE0KG9uRWZm
ZWN0cywgcm91dGVyLCBmeC5jbWRzLCBmeC5zdWJzLCBzdGF0ZSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB2YXIgcHJvY2VzcyA9IHNwYXduTG9vcChpbmZvLmluaXQsIG9uTWVzc2FnZSk7Cisg
ICAgcm91dGVyLnNlbGYgPSBwcm9jZXNzOworICAgIHJldHVybiBwcm9jZXNzOworfQorCitmdW5j
dGlvbiBzZW5kVG9BcHAocm91dGVyLCBtc2cpCit7CisgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9TY2hlZHVsZXIubmF0aXZlQmluZGluZyhmdW5jdGlvbihjYWxsYmFjaykKKyAgICB7
CisgICAgICAgIHJvdXRlci5tYWluKG1zZyk7CisgICAgICAgIGNhbGxiYWNrKF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9TY2hlZHVsZXIuc3VjY2VlZChfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMu
VHVwbGUwKSk7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHNlbmRUb1NlbGYocm91dGVyLCBtc2cp
Cit7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIuc2VuZCwg
cm91dGVyLnNlbGYsIHsKKyAgICAgICAgY3RvcjogJ3NlbGYnLAorICAgICAgICBfMDogbXNnCisg
ICAgfSk7Cit9CisKKworLy8gSEVMUEVSIGZvciBTVEFURUZVTCBMT09QUworCitmdW5jdGlvbiBz
cGF3bkxvb3AoaW5pdCwgb25NZXNzYWdlKQoreworICAgIHZhciBhbmRUaGVuID0gX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX1NjaGVkdWxlci5hbmRUaGVuOworCisgICAgZnVuY3Rpb24gbG9vcChzdGF0
ZSkKKyAgICB7CisgICAgICAgIHZhciBoYW5kbGVNc2cgPSBfZWxtX2xhbmckY29yZSROYXRpdmVf
U2NoZWR1bGVyLnJlY2VpdmUoZnVuY3Rpb24obXNnKSB7CisgICAgICAgICAgICByZXR1cm4gb25N
ZXNzYWdlKG1zZywgc3RhdGUpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIEEyKGFuZFRo
ZW4sIGhhbmRsZU1zZywgbG9vcCk7CisgICAgfQorCisgICAgdmFyIHRhc2sgPSBBMihhbmRUaGVu
LCBpbml0LCBsb29wKTsKKworICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1
bGVyLnJhd1NwYXduKHRhc2spOworfQorCisKKy8vIEJBR1MKKworZnVuY3Rpb24gbGVhZihob21l
KQoreworICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICB0eXBlOiAnbGVhZicsCisgICAgICAgICAgICBob21lOiBob21lLAorICAg
ICAgICAgICAgdmFsdWU6IHZhbHVlCisgICAgICAgIH07CisgICAgfTsKK30KKworZnVuY3Rpb24g
YmF0Y2gobGlzdCkKK3sKKyAgICByZXR1cm4geworICAgICAgICB0eXBlOiAnbm9kZScsCisgICAg
ICAgIGJyYW5jaGVzOiBsaXN0CisgICAgfTsKK30KKworZnVuY3Rpb24gbWFwKHRhZ2dlciwgYmFn
KQoreworICAgIHJldHVybiB7CisgICAgICAgIHR5cGU6ICdtYXAnLAorICAgICAgICB0YWdnZXI6
IHRhZ2dlciwKKyAgICAgICAgdHJlZTogYmFnCisgICAgfQorfQorCisKKy8vIFBJUEUgQkFHUyBJ
TlRPIEVGRkVDVCBNQU5BR0VSUworCitmdW5jdGlvbiBkaXNwYXRjaEVmZmVjdHMobWFuYWdlcnMs
IGNtZEJhZywgc3ViQmFnKQoreworICAgIHZhciBlZmZlY3RzRGljdCA9IHt9OworICAgIGdhdGhl
ckVmZmVjdHModHJ1ZSwgY21kQmFnLCBlZmZlY3RzRGljdCwgbnVsbCk7CisgICAgZ2F0aGVyRWZm
ZWN0cyhmYWxzZSwgc3ViQmFnLCBlZmZlY3RzRGljdCwgbnVsbCk7CisKKyAgICBmb3IgKHZhciBo
b21lIGluIG1hbmFnZXJzKQorICAgIHsKKyAgICAgICAgdmFyIGZ4ID0gaG9tZSBpbiBlZmZlY3Rz
RGljdAorICAgICAgICAgICAgPyBlZmZlY3RzRGljdFtob21lXQorICAgICAgICAgICAgOiB7Cisg
ICAgICAgICAgICAgICAgY21kczogX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuTmlsLAorICAg
ICAgICAgICAgICAgIHN1YnM6IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0Lk5pbAorICAgICAg
ICAgICAgfTsKKworICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1bGVyLnJhd1Nl
bmQobWFuYWdlcnNbaG9tZV0sIHsgY3RvcjogJ2Z4JywgXzA6IGZ4IH0pOworICAgIH0KK30KKwor
ZnVuY3Rpb24gZ2F0aGVyRWZmZWN0cyhpc0NtZCwgYmFnLCBlZmZlY3RzRGljdCwgdGFnZ2VycykK
K3sKKyAgICBzd2l0Y2ggKGJhZy50eXBlKQorICAgIHsKKyAgICAgICAgY2FzZSAnbGVhZic6Cisg
ICAgICAgICAgICB2YXIgaG9tZSA9IGJhZy5ob21lOworICAgICAgICAgICAgdmFyIGVmZmVjdCA9
IHRvRWZmZWN0KGlzQ21kLCBob21lLCB0YWdnZXJzLCBiYWcudmFsdWUpOworICAgICAgICAgICAg
ZWZmZWN0c0RpY3RbaG9tZV0gPSBpbnNlcnQoaXNDbWQsIGVmZmVjdCwgZWZmZWN0c0RpY3RbaG9t
ZV0pOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgJ25vZGUnOgorICAgICAg
ICAgICAgdmFyIGxpc3QgPSBiYWcuYnJhbmNoZXM7CisgICAgICAgICAgICB3aGlsZSAobGlzdC5j
dG9yICE9PSAnW10nKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdhdGhlckVmZmVj
dHMoaXNDbWQsIGxpc3QuXzAsIGVmZmVjdHNEaWN0LCB0YWdnZXJzKTsKKyAgICAgICAgICAgICAg
ICBsaXN0ID0gbGlzdC5fMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBjYXNlICdtYXAnOgorICAgICAgICAgICAgZ2F0aGVyRWZmZWN0cyhpc0NtZCwgYmFn
LnRyZWUsIGVmZmVjdHNEaWN0LCB7CisgICAgICAgICAgICAgICAgdGFnZ2VyOiBiYWcudGFnZ2Vy
LAorICAgICAgICAgICAgICAgIHJlc3Q6IHRhZ2dlcnMKKyAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgcmV0dXJuOworICAgIH0KK30KKworZnVuY3Rpb24gdG9FZmZlY3QoaXNDbWQsIGhvbWUs
IHRhZ2dlcnMsIHZhbHVlKQoreworICAgIGZ1bmN0aW9uIGFwcGx5VGFnZ2Vycyh4KQorICAgIHsK
KyAgICAgICAgdmFyIHRlbXAgPSB0YWdnZXJzOworICAgICAgICB3aGlsZSAodGVtcCkKKyAgICAg
ICAgeworICAgICAgICAgICAgeCA9IHRlbXAudGFnZ2VyKHgpOworICAgICAgICAgICAgdGVtcCA9
IHRlbXAucmVzdDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geDsKKyAgICB9CisKKyAgICB2
YXIgbWFwID0gaXNDbWQKKyAgICAgICAgPyBlZmZlY3RNYW5hZ2Vyc1tob21lXS5jbWRNYXAKKyAg
ICAgICAgOiBlZmZlY3RNYW5hZ2Vyc1tob21lXS5zdWJNYXA7CisKKyAgICByZXR1cm4gQTIobWFw
LCBhcHBseVRhZ2dlcnMsIHZhbHVlKQorfQorCitmdW5jdGlvbiBpbnNlcnQoaXNDbWQsIG5ld0Vm
ZmVjdCwgZWZmZWN0cykKK3sKKyAgICBlZmZlY3RzID0gZWZmZWN0cyB8fCB7CisgICAgICAgIGNt
ZHM6IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0Lk5pbCwKKyAgICAgICAgc3ViczogX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX0xpc3QuTmlsCisgICAgfTsKKyAgICBpZiAoaXNDbWQpCisgICAgewor
ICAgICAgICBlZmZlY3RzLmNtZHMgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5Db25zKG5l
d0VmZmVjdCwgZWZmZWN0cy5jbWRzKTsKKyAgICAgICAgcmV0dXJuIGVmZmVjdHM7CisgICAgfQor
ICAgIGVmZmVjdHMuc3VicyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LkNvbnMobmV3RWZm
ZWN0LCBlZmZlY3RzLnN1YnMpOworICAgIHJldHVybiBlZmZlY3RzOworfQorCisKKy8vIFBPUlRT
CisKK2Z1bmN0aW9uIGNoZWNrUG9ydE5hbWUobmFtZSkKK3sKKyAgICBpZiAobmFtZSBpbiBlZmZl
Y3RNYW5hZ2VycykKKyAgICB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlcmUgY2FuIG9u
bHkgYmUgb25lIHBvcnQgbmFtZWQgYCcgKyBuYW1lICsgJ2AsIGJ1dCB5b3VyIHByb2dyYW0gaGFz
IG11bHRpcGxlLicpOworICAgIH0KK30KKworCisvLyBPVVRHT0lORyBQT1JUUworCitmdW5jdGlv
biBvdXRnb2luZ1BvcnQobmFtZSwgY29udmVydGVyKQoreworICAgIGNoZWNrUG9ydE5hbWUobmFt
ZSk7CisgICAgZWZmZWN0TWFuYWdlcnNbbmFtZV0gPSB7CisgICAgICAgIHRhZzogJ2NtZCcsCisg
ICAgICAgIGNtZE1hcDogb3V0Z29pbmdQb3J0TWFwLAorICAgICAgICBjb252ZXJ0ZXI6IGNvbnZl
cnRlciwKKyAgICAgICAgaXNGb3JlaWduOiB0cnVlCisgICAgfTsKKyAgICByZXR1cm4gbGVhZihu
YW1lKTsKK30KKwordmFyIG91dGdvaW5nUG9ydE1hcCA9IEYyKGZ1bmN0aW9uIGNtZE1hcCh0YWdn
ZXIsIHZhbHVlKSB7CisgICAgcmV0dXJuIHZhbHVlOworfSk7CisKK2Z1bmN0aW9uIHNldHVwT3V0
Z29pbmdQb3J0KG5hbWUpCit7CisgICAgdmFyIHN1YnMgPSBbXTsKKyAgICB2YXIgY29udmVydGVy
ID0gZWZmZWN0TWFuYWdlcnNbbmFtZV0uY29udmVydGVyOworCisgICAgLy8gQ1JFQVRFIE1BTkFH
RVIKKworICAgIHZhciBpbml0ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5zdWNj
ZWVkKG51bGwpOworCisgICAgZnVuY3Rpb24gb25FZmZlY3RzKHJvdXRlciwgY21kTGlzdCwgc3Rh
dGUpCisgICAgeworICAgICAgICB3aGlsZSAoY21kTGlzdC5jdG9yICE9PSAnW10nKQorICAgICAg
ICB7CisgICAgICAgICAgICB2YXIgdmFsdWUgPSBjb252ZXJ0ZXIoY21kTGlzdC5fMCk7CisgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YnMubGVuZ3RoOyBpKyspCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgc3Vic1tpXSh2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjbWRMaXN0ID0gY21kTGlzdC5fMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
aW5pdDsKKyAgICB9CisKKyAgICBlZmZlY3RNYW5hZ2Vyc1tuYW1lXS5pbml0ID0gaW5pdDsKKyAg
ICBlZmZlY3RNYW5hZ2Vyc1tuYW1lXS5vbkVmZmVjdHMgPSBGMyhvbkVmZmVjdHMpOworCisgICAg
Ly8gUFVCTElDIEFQSQorCisgICAgZnVuY3Rpb24gc3Vic2NyaWJlKGNhbGxiYWNrKQorICAgIHsK
KyAgICAgICAgc3Vicy5wdXNoKGNhbGxiYWNrKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB1bnN1
YnNjcmliZShjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHZhciBpbmRleCA9IHN1YnMuaW5kZXhP
ZihjYWxsYmFjayk7CisgICAgICAgIGlmIChpbmRleCA+PSAwKQorICAgICAgICB7CisgICAgICAg
ICAgICBzdWJzLnNwbGljZShpbmRleCwgMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4geworICAgICAgICBzdWJzY3JpYmU6IHN1YnNjcmliZSwKKyAgICAgICAgdW5zdWJzY3JpYmU6
IHVuc3Vic2NyaWJlCisgICAgfTsKK30KKworCisvLyBJTkNPTUlORyBQT1JUUworCitmdW5jdGlv
biBpbmNvbWluZ1BvcnQobmFtZSwgY29udmVydGVyKQoreworICAgIGNoZWNrUG9ydE5hbWUobmFt
ZSk7CisgICAgZWZmZWN0TWFuYWdlcnNbbmFtZV0gPSB7CisgICAgICAgIHRhZzogJ3N1YicsCisg
ICAgICAgIHN1Yk1hcDogaW5jb21pbmdQb3J0TWFwLAorICAgICAgICBjb252ZXJ0ZXI6IGNvbnZl
cnRlciwKKyAgICAgICAgaXNGb3JlaWduOiB0cnVlCisgICAgfTsKKyAgICByZXR1cm4gbGVhZihu
YW1lKTsKK30KKwordmFyIGluY29taW5nUG9ydE1hcCA9IEYyKGZ1bmN0aW9uIHN1Yk1hcCh0YWdn
ZXIsIGZpbmFsVGFnZ2VyKQoreworICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0YWdnZXIoZmluYWxUYWdnZXIodmFsdWUpKTsKKyAgICB9OworfSk7CisK
K2Z1bmN0aW9uIHNldHVwSW5jb21pbmdQb3J0KG5hbWUsIGNhbGxiYWNrKQoreworICAgIHZhciBz
ZW50QmVmb3JlSW5pdCA9IFtdOworICAgIHZhciBzdWJzID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X0xpc3QuTmlsOworICAgIHZhciBjb252ZXJ0ZXIgPSBlZmZlY3RNYW5hZ2Vyc1tuYW1lXS5jb252
ZXJ0ZXI7CisgICAgdmFyIGN1cnJlbnRPbkVmZmVjdHMgPSBwcmVJbml0T25FZmZlY3RzOworICAg
IHZhciBjdXJyZW50U2VuZCA9IHByZUluaXRTZW5kOworCisgICAgLy8gQ1JFQVRFIE1BTkFHRVIK
KworICAgIHZhciBpbml0ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5zdWNjZWVk
KG51bGwpOworCisgICAgZnVuY3Rpb24gcHJlSW5pdE9uRWZmZWN0cyhyb3V0ZXIsIHN1Ykxpc3Qs
IHN0YXRlKQorICAgIHsKKyAgICAgICAgdmFyIHBvc3RJbml0UmVzdWx0ID0gcG9zdEluaXRPbkVm
ZmVjdHMocm91dGVyLCBzdWJMaXN0LCBzdGF0ZSk7CisKKyAgICAgICAgZm9yKHZhciBpID0gMDsg
aSA8IHNlbnRCZWZvcmVJbml0Lmxlbmd0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBw
b3N0SW5pdFNlbmQoc2VudEJlZm9yZUluaXRbaV0pOworICAgICAgICB9CisKKyAgICAgICAgc2Vu
dEJlZm9yZUluaXQgPSBudWxsOyAvLyB0byByZWxlYXNlIG9iamVjdHMgaGVsZCBpbiBxdWV1ZQor
ICAgICAgICBjdXJyZW50U2VuZCA9IHBvc3RJbml0U2VuZDsKKyAgICAgICAgY3VycmVudE9uRWZm
ZWN0cyA9IHBvc3RJbml0T25FZmZlY3RzOworICAgICAgICByZXR1cm4gcG9zdEluaXRSZXN1bHQ7
CisgICAgfQorCisgICAgZnVuY3Rpb24gcG9zdEluaXRPbkVmZmVjdHMocm91dGVyLCBzdWJMaXN0
LCBzdGF0ZSkKKyAgICB7CisgICAgICAgIHN1YnMgPSBzdWJMaXN0OworICAgICAgICByZXR1cm4g
aW5pdDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBvbkVmZmVjdHMocm91dGVyLCBzdWJMaXN0LCBz
dGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjdXJyZW50T25FZmZlY3RzKHJvdXRlciwgc3Vi
TGlzdCwgc3RhdGUpOworICAgIH0KKworICAgIGVmZmVjdE1hbmFnZXJzW25hbWVdLmluaXQgPSBp
bml0OworICAgIGVmZmVjdE1hbmFnZXJzW25hbWVdLm9uRWZmZWN0cyA9IEYzKG9uRWZmZWN0cyk7
CisKKyAgICAvLyBQVUJMSUMgQVBJCisKKyAgICBmdW5jdGlvbiBwcmVJbml0U2VuZCh2YWx1ZSkK
KyAgICB7CisgICAgICAgIHNlbnRCZWZvcmVJbml0LnB1c2godmFsdWUpOworICAgIH0KKworICAg
IGZ1bmN0aW9uIHBvc3RJbml0U2VuZChpbmNvbWluZ1ZhbHVlKQorICAgIHsKKyAgICAgICAgdmFy
IHJlc3VsdCA9IEEyKF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJGRlY29kZVZhbHVlLCBjb252
ZXJ0ZXIsIGluY29taW5nVmFsdWUpOworICAgICAgICBpZiAocmVzdWx0LmN0b3IgPT09ICdFcnIn
KQorICAgICAgICB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyeWluZyB0byBzZW5k
IGFuIHVuZXhwZWN0ZWQgdHlwZSBvZiB2YWx1ZSB0aHJvdWdoIHBvcnQgYCcgKyBuYW1lICsgJ2A6
XG4nICsgcmVzdWx0Ll8wKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciB2YWx1ZSA9IHJlc3Vs
dC5fMDsKKyAgICAgICAgdmFyIHRlbXAgPSBzdWJzOworICAgICAgICB3aGlsZSAodGVtcC5jdG9y
ICE9PSAnW10nKQorICAgICAgICB7CisgICAgICAgICAgICBjYWxsYmFjayh0ZW1wLl8wKHZhbHVl
KSk7CisgICAgICAgICAgICB0ZW1wID0gdGVtcC5fMTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGZ1bmN0aW9uIHNlbmQoaW5jb21pbmdWYWx1ZSkKKyAgICB7CisgICAgICAgIGN1cnJlbnRTZW5k
KGluY29taW5nVmFsdWUpOworICAgIH0KKworICAgIHJldHVybiB7IHNlbmQ6IHNlbmQgfTsKK30K
KworcmV0dXJuIHsKKyAgICAvLyByb3V0ZXJzCisgICAgc2VuZFRvQXBwOiBGMihzZW5kVG9BcHAp
LAorICAgIHNlbmRUb1NlbGY6IEYyKHNlbmRUb1NlbGYpLAorCisgICAgLy8gZ2xvYmFsIHNldHVw
CisgICAgbWFpblRvUHJvZ3JhbTogbWFpblRvUHJvZ3JhbSwKKyAgICBlZmZlY3RNYW5hZ2Vyczog
ZWZmZWN0TWFuYWdlcnMsCisgICAgb3V0Z29pbmdQb3J0OiBvdXRnb2luZ1BvcnQsCisgICAgaW5j
b21pbmdQb3J0OiBpbmNvbWluZ1BvcnQsCisgICAgYWRkUHVibGljTW9kdWxlOiBhZGRQdWJsaWNN
b2R1bGUsCisKKyAgICAvLyBlZmZlY3QgYmFncworICAgIGxlYWY6IGxlYWYsCisgICAgYmF0Y2g6
IGJhdGNoLAorICAgIG1hcDogRjIobWFwKQorfTsKKworfSgpOworCisvL2ltcG9ydCBOYXRpdmUu
VXRpbHMgLy8KKwordmFyIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIgPSBmdW5jdGlv
bigpIHsKKwordmFyIE1BWF9TVEVQUyA9IDEwMDAwOworCisKKy8vIFRBU0tTCisKK2Z1bmN0aW9u
IHN1Y2NlZWQodmFsdWUpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgY3RvcjogJ19UYXNrX3N1
Y2NlZWQnLAorICAgICAgICB2YWx1ZTogdmFsdWUKKyAgICB9OworfQorCitmdW5jdGlvbiBmYWls
KGVycm9yKQoreworICAgIHJldHVybiB7CisgICAgICAgIGN0b3I6ICdfVGFza19mYWlsJywKKyAg
ICAgICAgdmFsdWU6IGVycm9yCisgICAgfTsKK30KKworZnVuY3Rpb24gbmF0aXZlQmluZGluZyhj
YWxsYmFjaykKK3sKKyAgICByZXR1cm4geworICAgICAgICBjdG9yOiAnX1Rhc2tfbmF0aXZlQmlu
ZGluZycsCisgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjaywKKyAgICAgICAgY2FuY2VsOiBudWxs
CisgICAgfTsKK30KKworZnVuY3Rpb24gYW5kVGhlbih0YXNrLCBjYWxsYmFjaykKK3sKKyAgICBy
ZXR1cm4geworICAgICAgICBjdG9yOiAnX1Rhc2tfYW5kVGhlbicsCisgICAgICAgIHRhc2s6IHRh
c2ssCisgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjaworICAgIH07Cit9CisKK2Z1bmN0aW9uIG9u
RXJyb3IodGFzaywgY2FsbGJhY2spCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgY3RvcjogJ19U
YXNrX29uRXJyb3InLAorICAgICAgICB0YXNrOiB0YXNrLAorICAgICAgICBjYWxsYmFjazogY2Fs
bGJhY2sKKyAgICB9OworfQorCitmdW5jdGlvbiByZWNlaXZlKGNhbGxiYWNrKQoreworICAgIHJl
dHVybiB7CisgICAgICAgIGN0b3I6ICdfVGFza19yZWNlaXZlJywKKyAgICAgICAgY2FsbGJhY2s6
IGNhbGxiYWNrCisgICAgfTsKK30KKworCisvLyBQUk9DRVNTRVMKKworZnVuY3Rpb24gcmF3U3Bh
d24odGFzaykKK3sKKyAgICB2YXIgcHJvY2VzcyA9IHsKKyAgICAgICAgY3RvcjogJ19Qcm9jZXNz
JywKKyAgICAgICAgaWQ6IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5ndWlkKCksCisgICAg
ICAgIHJvb3Q6IHRhc2ssCisgICAgICAgIHN0YWNrOiBudWxsLAorICAgICAgICBtYWlsYm94OiBb
XQorICAgIH07CisKKyAgICBlbnF1ZXVlKHByb2Nlc3MpOworCisgICAgcmV0dXJuIHByb2Nlc3M7
Cit9CisKK2Z1bmN0aW9uIHNwYXduKHRhc2spCit7CisgICAgcmV0dXJuIG5hdGl2ZUJpbmRpbmco
ZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgICAgICAgdmFyIHByb2Nlc3MgPSByYXdTcGF3bih0YXNr
KTsKKyAgICAgICAgY2FsbGJhY2soc3VjY2VlZChwcm9jZXNzKSk7CisgICAgfSk7Cit9CisKK2Z1
bmN0aW9uIHJhd1NlbmQocHJvY2VzcywgbXNnKQoreworICAgIHByb2Nlc3MubWFpbGJveC5wdXNo
KG1zZyk7CisgICAgZW5xdWV1ZShwcm9jZXNzKTsKK30KKworZnVuY3Rpb24gc2VuZChwcm9jZXNz
LCBtc2cpCit7CisgICAgcmV0dXJuIG5hdGl2ZUJpbmRpbmcoZnVuY3Rpb24oY2FsbGJhY2spIHsK
KyAgICAgICAgcmF3U2VuZChwcm9jZXNzLCBtc2cpOworICAgICAgICBjYWxsYmFjayhzdWNjZWVk
KF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5UdXBsZTApKTsKKyAgICB9KTsKK30KKworZnVu
Y3Rpb24ga2lsbChwcm9jZXNzKQoreworICAgIHJldHVybiBuYXRpdmVCaW5kaW5nKGZ1bmN0aW9u
KGNhbGxiYWNrKSB7CisgICAgICAgIHZhciByb290ID0gcHJvY2Vzcy5yb290OworICAgICAgICBp
ZiAocm9vdC5jdG9yID09PSAnX1Rhc2tfbmF0aXZlQmluZGluZycgJiYgcm9vdC5jYW5jZWwpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJvb3QuY2FuY2VsKCk7CisgICAgICAgIH0KKworICAgICAg
ICBwcm9jZXNzLnJvb3QgPSBudWxsOworCisgICAgICAgIGNhbGxiYWNrKHN1Y2NlZWQoX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX1V0aWxzLlR1cGxlMCkpOworICAgIH0pOworfQorCitmdW5jdGlvbiBz
bGVlcCh0aW1lKQoreworICAgIHJldHVybiBuYXRpdmVCaW5kaW5nKGZ1bmN0aW9uKGNhbGxiYWNr
KSB7CisgICAgICAgIHZhciBpZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICBjYWxsYmFjayhzdWNjZWVkKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5UdXBsZTApKTsK
KyAgICAgICAgfSwgdGltZSk7CisKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeyBjbGVhclRp
bWVvdXQoaWQpOyB9OworICAgIH0pOworfQorCisKKy8vIFNURVAgUFJPQ0VTU0VTCisKK2Z1bmN0
aW9uIHN0ZXAobnVtU3RlcHMsIHByb2Nlc3MpCit7CisgICAgd2hpbGUgKG51bVN0ZXBzIDwgTUFY
X1NURVBTKQorICAgIHsKKyAgICAgICAgdmFyIGN0b3IgPSBwcm9jZXNzLnJvb3QuY3RvcjsKKwor
ICAgICAgICBpZiAoY3RvciA9PT0gJ19UYXNrX3N1Y2NlZWQnKQorICAgICAgICB7CisgICAgICAg
ICAgICB3aGlsZSAocHJvY2Vzcy5zdGFjayAmJiBwcm9jZXNzLnN0YWNrLmN0b3IgPT09ICdfVGFz
a19vbkVycm9yJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcm9jZXNzLnN0YWNr
ID0gcHJvY2Vzcy5zdGFjay5yZXN0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBy
b2Nlc3Muc3RhY2sgPT09IG51bGwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcm9jZXNzLnJvb3QgPSBwcm9jZXNzLnN0
YWNrLmNhbGxiYWNrKHByb2Nlc3Mucm9vdC52YWx1ZSk7CisgICAgICAgICAgICBwcm9jZXNzLnN0
YWNrID0gcHJvY2Vzcy5zdGFjay5yZXN0OworICAgICAgICAgICAgKytudW1TdGVwczsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGN0b3IgPT09ICdfVGFz
a19mYWlsJykKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKHByb2Nlc3Muc3RhY2sgJiYg
cHJvY2Vzcy5zdGFjay5jdG9yID09PSAnX1Rhc2tfYW5kVGhlbicpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcHJvY2Vzcy5zdGFjayA9IHByb2Nlc3Muc3RhY2sucmVzdDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwcm9jZXNzLnN0YWNrID09PSBudWxsKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcHJvY2Vzcy5yb290ID0gcHJvY2Vzcy5zdGFjay5jYWxsYmFjayhwcm9jZXNzLnJvb3QudmFs
dWUpOworICAgICAgICAgICAgcHJvY2Vzcy5zdGFjayA9IHByb2Nlc3Muc3RhY2sucmVzdDsKKyAg
ICAgICAgICAgICsrbnVtU3RlcHM7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChjdG9yID09PSAnX1Rhc2tfYW5kVGhlbicpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHByb2Nlc3Muc3RhY2sgPSB7CisgICAgICAgICAgICAgICAgY3RvcjogJ19UYXNrX2Fu
ZFRoZW4nLAorICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBwcm9jZXNzLnJvb3QuY2FsbGJhY2ss
CisgICAgICAgICAgICAgICAgcmVzdDogcHJvY2Vzcy5zdGFjaworICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIHByb2Nlc3Mucm9vdCA9IHByb2Nlc3Mucm9vdC50YXNrOworICAgICAgICAgICAg
KytudW1TdGVwczsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGN0b3IgPT09ICdfVGFza19vbkVycm9yJykKKyAgICAgICAgeworICAgICAgICAgICAgcHJv
Y2Vzcy5zdGFjayA9IHsKKyAgICAgICAgICAgICAgICBjdG9yOiAnX1Rhc2tfb25FcnJvcicsCisg
ICAgICAgICAgICAgICAgY2FsbGJhY2s6IHByb2Nlc3Mucm9vdC5jYWxsYmFjaywKKyAgICAgICAg
ICAgICAgICByZXN0OiBwcm9jZXNzLnN0YWNrCisgICAgICAgICAgICB9OworICAgICAgICAgICAg
cHJvY2Vzcy5yb290ID0gcHJvY2Vzcy5yb290LnRhc2s7CisgICAgICAgICAgICArK251bVN0ZXBz
OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3RvciA9
PT0gJ19UYXNrX25hdGl2ZUJpbmRpbmcnKQorICAgICAgICB7CisgICAgICAgICAgICBwcm9jZXNz
LnJvb3QuY2FuY2VsID0gcHJvY2Vzcy5yb290LmNhbGxiYWNrKGZ1bmN0aW9uKG5ld1Jvb3QpIHsK
KyAgICAgICAgICAgICAgICBwcm9jZXNzLnJvb3QgPSBuZXdSb290OworICAgICAgICAgICAgICAg
IGVucXVldWUocHJvY2Vzcyk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3RvciA9PT0gJ19UYXNrX3JlY2VpdmUnKQorICAg
ICAgICB7CisgICAgICAgICAgICB2YXIgbWFpbGJveCA9IHByb2Nlc3MubWFpbGJveDsKKyAgICAg
ICAgICAgIGlmIChtYWlsYm94Lmxlbmd0aCA9PT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJvY2Vzcy5yb290
ID0gcHJvY2Vzcy5yb290LmNhbGxiYWNrKG1haWxib3guc2hpZnQoKSk7CisgICAgICAgICAgICAr
K251bVN0ZXBzOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoY3Rvcik7CisgICAgfQorCisgICAgaWYgKG51bVN0ZXBzIDwgTUFYX1NU
RVBTKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bVN0ZXBzICsgMTsKKyAgICB9CisgICAgZW5x
dWV1ZShwcm9jZXNzKTsKKworICAgIHJldHVybiBudW1TdGVwczsKK30KKworCisvLyBXT1JLIFFV
RVVFCisKK3ZhciB3b3JraW5nID0gZmFsc2U7Cit2YXIgd29ya1F1ZXVlID0gW107CisKK2Z1bmN0
aW9uIGVucXVldWUocHJvY2VzcykKK3sKKyAgICB3b3JrUXVldWUucHVzaChwcm9jZXNzKTsKKwor
ICAgIGlmICghd29ya2luZykKKyAgICB7CisgICAgICAgIHNldFRpbWVvdXQod29yaywgMCk7Cisg
ICAgICAgIHdvcmtpbmcgPSB0cnVlOworICAgIH0KK30KKworZnVuY3Rpb24gd29yaygpCit7Cisg
ICAgdmFyIG51bVN0ZXBzID0gMDsKKyAgICB2YXIgcHJvY2VzczsKKyAgICB3aGlsZSAobnVtU3Rl
cHMgPCBNQVhfU1RFUFMgJiYgKHByb2Nlc3MgPSB3b3JrUXVldWUuc2hpZnQoKSkpCisgICAgewor
ICAgICAgICBpZiAocHJvY2Vzcy5yb290KQorICAgICAgICB7CisgICAgICAgICAgICBudW1TdGVw
cyA9IHN0ZXAobnVtU3RlcHMsIHByb2Nlc3MpOworICAgICAgICB9CisgICAgfQorICAgIGlmICgh
cHJvY2VzcykKKyAgICB7CisgICAgICAgIHdvcmtpbmcgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBzZXRUaW1lb3V0KHdvcmssIDApOworfQorCisKK3JldHVybiB7CisgICAg
c3VjY2VlZDogc3VjY2VlZCwKKyAgICBmYWlsOiBmYWlsLAorICAgIG5hdGl2ZUJpbmRpbmc6IG5h
dGl2ZUJpbmRpbmcsCisgICAgYW5kVGhlbjogRjIoYW5kVGhlbiksCisgICAgb25FcnJvcjogRjIo
b25FcnJvciksCisgICAgcmVjZWl2ZTogcmVjZWl2ZSwKKworICAgIHNwYXduOiBzcGF3biwKKyAg
ICBraWxsOiBraWxsLAorICAgIHNsZWVwOiBzbGVlcCwKKyAgICBzZW5kOiBGMihzZW5kKSwKKwor
ICAgIHJhd1NwYXduOiByYXdTcGF3biwKKyAgICByYXdTZW5kOiByYXdTZW5kCit9OworCit9KCk7
Cit2YXIgX2VsbV9sYW5nJGNvcmUkUGxhdGZvcm0kaGFjayA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9TY2hlZHVsZXIuc3VjY2VlZDsKK3ZhciBfZWxtX2xhbmckY29yZSRQbGF0Zm9ybSRzZW5kVG9T
ZWxmID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1BsYXRmb3JtLnNlbmRUb1NlbGY7Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkUGxhdGZvcm0kc2VuZFRvQXBwID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1Bs
YXRmb3JtLnNlbmRUb0FwcDsKK3ZhciBfZWxtX2xhbmckY29yZSRQbGF0Zm9ybSRQcm9ncmFtID0g
e2N0b3I6ICdQcm9ncmFtJ307Cit2YXIgX2VsbV9sYW5nJGNvcmUkUGxhdGZvcm0kVGFzayA9IHtj
dG9yOiAnVGFzayd9OwordmFyIF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtJFByb2Nlc3NJZCA9IHtj
dG9yOiAnUHJvY2Vzc0lkJ307Cit2YXIgX2VsbV9sYW5nJGNvcmUkUGxhdGZvcm0kUm91dGVyID0g
e2N0b3I6ICdSb3V0ZXInfTsKKwordmFyIF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtX0NtZCRiYXRj
aCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9QbGF0Zm9ybS5iYXRjaDsKK3ZhciBfZWxtX2xhbmck
Y29yZSRQbGF0Zm9ybV9DbWQkbm9uZSA9IF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtX0NtZCRiYXRj
aCgKKyAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgIFtd
KSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkUGxhdGZvcm1fQ21kX29wcyA9IF9lbG1fbGFuZyRjb3Jl
JFBsYXRmb3JtX0NtZF9vcHMgfHwge307CitfZWxtX2xhbmckY29yZSRQbGF0Zm9ybV9DbWRfb3Bz
WychJ10gPSBGMigKKyAgICBmdW5jdGlvbiAobW9kZWwsIGNvbW1hbmRzKSB7CisgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMicsCisgICAgICAgICAgICBfMDogbW9k
ZWwsCisgICAgICAgICAgICBfMTogX2VsbV9sYW5nJGNvcmUkUGxhdGZvcm1fQ21kJGJhdGNoKGNv
bW1hbmRzKQorICAgICAgICB9OworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJFBsYXRmb3Jt
X0NtZCRtYXAgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfUGxhdGZvcm0ubWFwOwordmFyIF9lbG1f
bGFuZyRjb3JlJFBsYXRmb3JtX0NtZCRDbWQgPSB7Y3RvcjogJ0NtZCd9OworCit2YXIgX2VsbV9s
YW5nJGNvcmUkUGxhdGZvcm1fU3ViJGJhdGNoID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1BsYXRm
b3JtLmJhdGNoOwordmFyIF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtX1N1YiRub25lID0gX2VsbV9s
YW5nJGNvcmUkUGxhdGZvcm1fU3ViJGJhdGNoKAorICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9M
aXN0LmZyb21BcnJheSgKKyAgICAgICAgW10pKTsKK3ZhciBfZWxtX2xhbmckY29yZSRQbGF0Zm9y
bV9TdWIkbWFwID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1BsYXRmb3JtLm1hcDsKK3ZhciBfZWxt
X2xhbmckY29yZSRQbGF0Zm9ybV9TdWIkU3ViID0ge2N0b3I6ICdTdWInfTsKKworLy9pbXBvcnQg
TWF5YmUsIE5hdGl2ZS5MaXN0LCBOYXRpdmUuVXRpbHMsIFJlc3VsdCAvLworCit2YXIgX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX1N0cmluZyA9IGZ1bmN0aW9uKCkgeworCitmdW5jdGlvbiBpc0VtcHR5
KHN0cikKK3sKKyAgICByZXR1cm4gc3RyLmxlbmd0aCA9PT0gMDsKK30KK2Z1bmN0aW9uIGNvbnMo
Y2hyLCBzdHIpCit7CisgICAgcmV0dXJuIGNociArIHN0cjsKK30KK2Z1bmN0aW9uIHVuY29ucyhz
dHIpCit7CisgICAgdmFyIGhkID0gc3RyWzBdOworICAgIGlmIChoZCkKKyAgICB7CisgICAgICAg
IHJldHVybiBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0KF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9V
dGlscy5UdXBsZTIoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNocihoZCksIHN0ci5zbGlj
ZSgxKSkpOworICAgIH0KKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90aGluZzsK
K30KK2Z1bmN0aW9uIGFwcGVuZChhLCBiKQoreworICAgIHJldHVybiBhICsgYjsKK30KK2Z1bmN0
aW9uIGNvbmNhdChzdHJzKQoreworICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlz
dC50b0FycmF5KHN0cnMpLmpvaW4oJycpOworfQorZnVuY3Rpb24gbGVuZ3RoKHN0cikKK3sKKyAg
ICByZXR1cm4gc3RyLmxlbmd0aDsKK30KK2Z1bmN0aW9uIG1hcChmLCBzdHIpCit7CisgICAgdmFy
IG91dCA9IHN0ci5zcGxpdCgnJyk7CisgICAgZm9yICh2YXIgaSA9IG91dC5sZW5ndGg7IGktLTsg
KQorICAgIHsKKyAgICAgICAgb3V0W2ldID0gZihfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMu
Y2hyKG91dFtpXSkpOworICAgIH0KKyAgICByZXR1cm4gb3V0LmpvaW4oJycpOworfQorZnVuY3Rp
b24gZmlsdGVyKHByZWQsIHN0cikKK3sKKyAgICByZXR1cm4gc3RyLnNwbGl0KCcnKS5tYXAoX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNocikuZmlsdGVyKHByZWQpLmpvaW4oJycpOworfQor
ZnVuY3Rpb24gcmV2ZXJzZShzdHIpCit7CisgICAgcmV0dXJuIHN0ci5zcGxpdCgnJykucmV2ZXJz
ZSgpLmpvaW4oJycpOworfQorZnVuY3Rpb24gZm9sZGwoZiwgYiwgc3RyKQoreworICAgIHZhciBs
ZW4gPSBzdHIubGVuZ3RoOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpCisgICAg
eworICAgICAgICBiID0gQTIoZiwgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNocihzdHJb
aV0pLCBiKTsKKyAgICB9CisgICAgcmV0dXJuIGI7Cit9CitmdW5jdGlvbiBmb2xkcihmLCBiLCBz
dHIpCit7CisgICAgZm9yICh2YXIgaSA9IHN0ci5sZW5ndGg7IGktLTsgKQorICAgIHsKKyAgICAg
ICAgYiA9IEEyKGYsIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jaHIoc3RyW2ldKSwgYik7
CisgICAgfQorICAgIHJldHVybiBiOworfQorZnVuY3Rpb24gc3BsaXQoc2VwLCBzdHIpCit7Cisg
ICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheShzdHIuc3BsaXQo
c2VwKSk7Cit9CitmdW5jdGlvbiBqb2luKHNlcCwgc3RycykKK3sKKyAgICByZXR1cm4gX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX0xpc3QudG9BcnJheShzdHJzKS5qb2luKHNlcCk7Cit9CitmdW5jdGlv
biByZXBlYXQobiwgc3RyKQoreworICAgIHZhciByZXN1bHQgPSAnJzsKKyAgICB3aGlsZSAobiA+
IDApCisgICAgeworICAgICAgICBpZiAobiAmIDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
c3VsdCArPSBzdHI7CisgICAgICAgIH0KKyAgICAgICAgbiA+Pj0gMSwgc3RyICs9IHN0cjsKKyAg
ICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KK2Z1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQsIHN0
cikKK3sKKyAgICByZXR1cm4gc3RyLnNsaWNlKHN0YXJ0LCBlbmQpOworfQorZnVuY3Rpb24gbGVm
dChuLCBzdHIpCit7CisgICAgcmV0dXJuIG4gPCAxID8gJycgOiBzdHIuc2xpY2UoMCwgbik7Cit9
CitmdW5jdGlvbiByaWdodChuLCBzdHIpCit7CisgICAgcmV0dXJuIG4gPCAxID8gJycgOiBzdHIu
c2xpY2UoLW4pOworfQorZnVuY3Rpb24gZHJvcExlZnQobiwgc3RyKQoreworICAgIHJldHVybiBu
IDwgMSA/IHN0ciA6IHN0ci5zbGljZShuKTsKK30KK2Z1bmN0aW9uIGRyb3BSaWdodChuLCBzdHIp
Cit7CisgICAgcmV0dXJuIG4gPCAxID8gc3RyIDogc3RyLnNsaWNlKDAsIC1uKTsKK30KK2Z1bmN0
aW9uIHBhZChuLCBjaHIsIHN0cikKK3sKKyAgICB2YXIgaGFsZiA9IChuIC0gc3RyLmxlbmd0aCkg
LyAyOworICAgIHJldHVybiByZXBlYXQoTWF0aC5jZWlsKGhhbGYpLCBjaHIpICsgc3RyICsgcmVw
ZWF0KGhhbGYgfCAwLCBjaHIpOworfQorZnVuY3Rpb24gcGFkUmlnaHQobiwgY2hyLCBzdHIpCit7
CisgICAgcmV0dXJuIHN0ciArIHJlcGVhdChuIC0gc3RyLmxlbmd0aCwgY2hyKTsKK30KK2Z1bmN0
aW9uIHBhZExlZnQobiwgY2hyLCBzdHIpCit7CisgICAgcmV0dXJuIHJlcGVhdChuIC0gc3RyLmxl
bmd0aCwgY2hyKSArIHN0cjsKK30KKworZnVuY3Rpb24gdHJpbShzdHIpCit7CisgICAgcmV0dXJu
IHN0ci50cmltKCk7Cit9CitmdW5jdGlvbiB0cmltTGVmdChzdHIpCit7CisgICAgcmV0dXJuIHN0
ci5yZXBsYWNlKC9eXHMrLywgJycpOworfQorZnVuY3Rpb24gdHJpbVJpZ2h0KHN0cikKK3sKKyAg
ICByZXR1cm4gc3RyLnJlcGxhY2UoL1xzKyQvLCAnJyk7Cit9CisKK2Z1bmN0aW9uIHdvcmRzKHN0
cikKK3sKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KHN0
ci50cmltKCkuc3BsaXQoL1xzKy9nKSk7Cit9CitmdW5jdGlvbiBsaW5lcyhzdHIpCit7CisgICAg
cmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheShzdHIuc3BsaXQoL1xy
XG58XHJ8XG4vZykpOworfQorCitmdW5jdGlvbiB0b1VwcGVyKHN0cikKK3sKKyAgICByZXR1cm4g
c3RyLnRvVXBwZXJDYXNlKCk7Cit9CitmdW5jdGlvbiB0b0xvd2VyKHN0cikKK3sKKyAgICByZXR1
cm4gc3RyLnRvTG93ZXJDYXNlKCk7Cit9CisKK2Z1bmN0aW9uIGFueShwcmVkLCBzdHIpCit7Cisg
ICAgZm9yICh2YXIgaSA9IHN0ci5sZW5ndGg7IGktLTsgKQorICAgIHsKKyAgICAgICAgaWYgKHBy
ZWQoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNocihzdHJbaV0pKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorZnVuY3Rpb24gYWxsKHByZWQsIHN0cikKK3sKKyAgICBmb3IgKHZhciBpID0gc3Ry
Lmxlbmd0aDsgaS0tOyApCisgICAgeworICAgICAgICBpZiAoIXByZWQoX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX1V0aWxzLmNocihzdHJbaV0pKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitmdW5jdGlv
biBjb250YWlucyhzdWIsIHN0cikKK3sKKyAgICByZXR1cm4gc3RyLmluZGV4T2Yoc3ViKSA+IC0x
OworfQorZnVuY3Rpb24gc3RhcnRzV2l0aChzdWIsIHN0cikKK3sKKyAgICByZXR1cm4gc3RyLmlu
ZGV4T2Yoc3ViKSA9PT0gMDsKK30KK2Z1bmN0aW9uIGVuZHNXaXRoKHN1Yiwgc3RyKQoreworICAg
IHJldHVybiBzdHIubGVuZ3RoID49IHN1Yi5sZW5ndGggJiYKKyAgICAgICAgc3RyLmxhc3RJbmRl
eE9mKHN1YikgPT09IHN0ci5sZW5ndGggLSBzdWIubGVuZ3RoOworfQorZnVuY3Rpb24gaW5kZXhl
cyhzdWIsIHN0cikKK3sKKyAgICB2YXIgc3ViTGVuID0gc3ViLmxlbmd0aDsKKyAgICAKKyAgICBp
ZiAoc3ViTGVuIDwgMSkKKyAgICB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRp
dmVfTGlzdC5OaWw7CisgICAgfQorCisgICAgdmFyIGkgPSAwOworICAgIHZhciBpcyA9IFtdOwor
CisgICAgd2hpbGUgKChpID0gc3RyLmluZGV4T2Yoc3ViLCBpKSkgPiAtMSkKKyAgICB7CisgICAg
ICAgIGlzLnB1c2goaSk7CisgICAgICAgIGkgPSBpICsgc3ViTGVuOworICAgIH0gICAKKyAgICAK
KyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KGlzKTsKK30K
KworZnVuY3Rpb24gdG9JbnQocykKK3sKKyAgICB2YXIgbGVuID0gcy5sZW5ndGg7CisgICAgaWYg
KGxlbiA9PT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1bHQk
RXJyKCJjb3VsZCBub3QgY29udmVydCBzdHJpbmcgJyIgKyBzICsgIicgdG8gYW4gSW50IiApOwor
ICAgIH0KKyAgICB2YXIgc3RhcnQgPSAwOworICAgIGlmIChzWzBdID09PSAnLScpCisgICAgewor
ICAgICAgICBpZiAobGVuID09PSAxKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX2Vs
bV9sYW5nJGNvcmUkUmVzdWx0JEVycigiY291bGQgbm90IGNvbnZlcnQgc3RyaW5nICciICsgcyAr
ICInIHRvIGFuIEludCIgKTsKKyAgICAgICAgfQorICAgICAgICBzdGFydCA9IDE7CisgICAgfQor
ICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGxlbjsgKytpKQorICAgIHsKKyAgICAgICAgdmFy
IGMgPSBzW2ldOworICAgICAgICBpZiAoYyA8ICcwJyB8fCAnOScgPCBjKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JEVycigiY291bGQgbm90IGNv
bnZlcnQgc3RyaW5nICciICsgcyArICInIHRvIGFuIEludCIgKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUmVzdWx0JE9rKHBhcnNlSW50KHMsIDEwKSk7Cit9
CisKK2Z1bmN0aW9uIHRvRmxvYXQocykKK3sKKyAgICB2YXIgbGVuID0gcy5sZW5ndGg7CisgICAg
aWYgKGxlbiA9PT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRSZXN1
bHQkRXJyKCJjb3VsZCBub3QgY29udmVydCBzdHJpbmcgJyIgKyBzICsgIicgdG8gYSBGbG9hdCIg
KTsKKyAgICB9CisgICAgdmFyIHN0YXJ0ID0gMDsKKyAgICBpZiAoc1swXSA9PT0gJy0nKQorICAg
IHsKKyAgICAgICAgaWYgKGxlbiA9PT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRFcnIoImNvdWxkIG5vdCBjb252ZXJ0IHN0cmluZyAnIiAr
IHMgKyAiJyB0byBhIEZsb2F0IiApOworICAgICAgICB9CisgICAgICAgIHN0YXJ0ID0gMTsKKyAg
ICB9CisgICAgdmFyIGRvdENvdW50ID0gMDsKKyAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBs
ZW47ICsraSkKKyAgICB7CisgICAgICAgIHZhciBjID0gc1tpXTsKKyAgICAgICAgaWYgKCcwJyA8
PSBjICYmIGMgPD0gJzknKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoYyA9PT0gJy4nKQorICAgICAgICB7CisgICAgICAgICAgICBkb3RD
b3VudCArPSAxOworICAgICAgICAgICAgaWYgKGRvdENvdW50IDw9IDEpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFJlc3VsdCRFcnIoImNvdWxkIG5vdCBjb252ZXJ0
IHN0cmluZyAnIiArIHMgKyAiJyB0byBhIEZsb2F0IiApOworICAgIH0KKyAgICByZXR1cm4gX2Vs
bV9sYW5nJGNvcmUkUmVzdWx0JE9rKHBhcnNlRmxvYXQocykpOworfQorCitmdW5jdGlvbiB0b0xp
c3Qoc3RyKQoreworICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJy
YXkoc3RyLnNwbGl0KCcnKS5tYXAoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNocikpOwor
fQorZnVuY3Rpb24gZnJvbUxpc3QoY2hhcnMpCit7CisgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9MaXN0LnRvQXJyYXkoY2hhcnMpLmpvaW4oJycpOworfQorCityZXR1cm4geworICAg
IGlzRW1wdHk6IGlzRW1wdHksCisgICAgY29uczogRjIoY29ucyksCisgICAgdW5jb25zOiB1bmNv
bnMsCisgICAgYXBwZW5kOiBGMihhcHBlbmQpLAorICAgIGNvbmNhdDogY29uY2F0LAorICAgIGxl
bmd0aDogbGVuZ3RoLAorICAgIG1hcDogRjIobWFwKSwKKyAgICBmaWx0ZXI6IEYyKGZpbHRlciks
CisgICAgcmV2ZXJzZTogcmV2ZXJzZSwKKyAgICBmb2xkbDogRjMoZm9sZGwpLAorICAgIGZvbGRy
OiBGMyhmb2xkciksCisKKyAgICBzcGxpdDogRjIoc3BsaXQpLAorICAgIGpvaW46IEYyKGpvaW4p
LAorICAgIHJlcGVhdDogRjIocmVwZWF0KSwKKworICAgIHNsaWNlOiBGMyhzbGljZSksCisgICAg
bGVmdDogRjIobGVmdCksCisgICAgcmlnaHQ6IEYyKHJpZ2h0KSwKKyAgICBkcm9wTGVmdDogRjIo
ZHJvcExlZnQpLAorICAgIGRyb3BSaWdodDogRjIoZHJvcFJpZ2h0KSwKKworICAgIHBhZDogRjMo
cGFkKSwKKyAgICBwYWRMZWZ0OiBGMyhwYWRMZWZ0KSwKKyAgICBwYWRSaWdodDogRjMocGFkUmln
aHQpLAorCisgICAgdHJpbTogdHJpbSwKKyAgICB0cmltTGVmdDogdHJpbUxlZnQsCisgICAgdHJp
bVJpZ2h0OiB0cmltUmlnaHQsCisKKyAgICB3b3Jkczogd29yZHMsCisgICAgbGluZXM6IGxpbmVz
LAorCisgICAgdG9VcHBlcjogdG9VcHBlciwKKyAgICB0b0xvd2VyOiB0b0xvd2VyLAorCisgICAg
YW55OiBGMihhbnkpLAorICAgIGFsbDogRjIoYWxsKSwKKworICAgIGNvbnRhaW5zOiBGMihjb250
YWlucyksCisgICAgc3RhcnRzV2l0aDogRjIoc3RhcnRzV2l0aCksCisgICAgZW5kc1dpdGg6IEYy
KGVuZHNXaXRoKSwKKyAgICBpbmRleGVzOiBGMihpbmRleGVzKSwKKworICAgIHRvSW50OiB0b0lu
dCwKKyAgICB0b0Zsb2F0OiB0b0Zsb2F0LAorICAgIHRvTGlzdDogdG9MaXN0LAorICAgIGZyb21M
aXN0OiBmcm9tTGlzdAorfTsKKworfSgpOworCisvL2ltcG9ydCBOYXRpdmUuVXRpbHMgLy8KKwor
dmFyIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9DaGFyID0gZnVuY3Rpb24oKSB7CisKK3JldHVybiB7
CisgICAgZnJvbUNvZGU6IGZ1bmN0aW9uKGMpIHsgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9VdGlscy5jaHIoU3RyaW5nLmZyb21DaGFyQ29kZShjKSk7IH0sCisgICAgdG9Db2RlOiBmdW5j
dGlvbihjKSB7IHJldHVybiBjLmNoYXJDb2RlQXQoMCk7IH0sCisgICAgdG9VcHBlcjogZnVuY3Rp
b24oYykgeyByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNocihjLnRvVXBwZXJD
YXNlKCkpOyB9LAorICAgIHRvTG93ZXI6IGZ1bmN0aW9uKGMpIHsgcmV0dXJuIF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9VdGlscy5jaHIoYy50b0xvd2VyQ2FzZSgpKTsgfSwKKyAgICB0b0xvY2FsZVVw
cGVyOiBmdW5jdGlvbihjKSB7IHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY2hy
KGMudG9Mb2NhbGVVcHBlckNhc2UoKSk7IH0sCisgICAgdG9Mb2NhbGVMb3dlcjogZnVuY3Rpb24o
YykgeyByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNocihjLnRvTG9jYWxlTG93
ZXJDYXNlKCkpOyB9Cit9OworCit9KCk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQ2hhciRmcm9tQ29k
ZSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9DaGFyLmZyb21Db2RlOwordmFyIF9lbG1fbGFuZyRj
b3JlJENoYXIkdG9Db2RlID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0NoYXIudG9Db2RlOwordmFy
IF9lbG1fbGFuZyRjb3JlJENoYXIkdG9Mb2NhbGVMb3dlciA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9DaGFyLnRvTG9jYWxlTG93ZXI7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQ2hhciR0b0xvY2FsZVVw
cGVyID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0NoYXIudG9Mb2NhbGVVcHBlcjsKK3ZhciBfZWxt
X2xhbmckY29yZSRDaGFyJHRvTG93ZXIgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQ2hhci50b0xv
d2VyOwordmFyIF9lbG1fbGFuZyRjb3JlJENoYXIkdG9VcHBlciA9IF9lbG1fbGFuZyRjb3JlJE5h
dGl2ZV9DaGFyLnRvVXBwZXI7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQ2hhciRpc0JldHdlZW4gPSBG
MygKKyAgICBmdW5jdGlvbiAobG93LCBoaWdoLCAkY2hhcikgeworICAgICAgICB2YXIgY29kZSA9
IF9lbG1fbGFuZyRjb3JlJENoYXIkdG9Db2RlKCRjaGFyKTsKKyAgICAgICAgcmV0dXJuIChfZWxt
X2xhbmckY29yZSROYXRpdmVfVXRpbHMuY21wKAorICAgICAgICAgICAgY29kZSwKKyAgICAgICAg
ICAgIF9lbG1fbGFuZyRjb3JlJENoYXIkdG9Db2RlKGxvdykpID4gLTEpICYmIChfZWxtX2xhbmck
Y29yZSROYXRpdmVfVXRpbHMuY21wKAorICAgICAgICAgICAgY29kZSwKKyAgICAgICAgICAgIF9l
bG1fbGFuZyRjb3JlJENoYXIkdG9Db2RlKGhpZ2gpKSA8IDEpOworICAgIH0pOwordmFyIF9lbG1f
bGFuZyRjb3JlJENoYXIkaXNVcHBlciA9IEEyKAorICAgIF9lbG1fbGFuZyRjb3JlJENoYXIkaXNC
ZXR3ZWVuLAorICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jaHIoJ0EnKSwKKyAgICBf
ZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY2hyKCdaJykpOwordmFyIF9lbG1fbGFuZyRjb3Jl
JENoYXIkaXNMb3dlciA9IEEyKAorICAgIF9lbG1fbGFuZyRjb3JlJENoYXIkaXNCZXR3ZWVuLAor
ICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jaHIoJ2EnKSwKKyAgICBfZWxtX2xhbmck
Y29yZSROYXRpdmVfVXRpbHMuY2hyKCd6JykpOwordmFyIF9lbG1fbGFuZyRjb3JlJENoYXIkaXNE
aWdpdCA9IEEyKAorICAgIF9lbG1fbGFuZyRjb3JlJENoYXIkaXNCZXR3ZWVuLAorICAgIF9lbG1f
bGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jaHIoJzAnKSwKKyAgICBfZWxtX2xhbmckY29yZSROYXRp
dmVfVXRpbHMuY2hyKCc5JykpOwordmFyIF9lbG1fbGFuZyRjb3JlJENoYXIkaXNPY3REaWdpdCA9
IEEyKAorICAgIF9lbG1fbGFuZyRjb3JlJENoYXIkaXNCZXR3ZWVuLAorICAgIF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9VdGlscy5jaHIoJzAnKSwKKyAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRp
bHMuY2hyKCc3JykpOwordmFyIF9lbG1fbGFuZyRjb3JlJENoYXIkaXNIZXhEaWdpdCA9IGZ1bmN0
aW9uICgkY2hhcikgeworICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRDaGFyJGlzRGlnaXQoJGNo
YXIpIHx8IChBMygKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkQ2hhciRpc0JldHdlZW4sCisgICAg
ICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jaHIoJ2EnKSwKKyAgICAgICAgX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX1V0aWxzLmNocignZicpLAorICAgICAgICAkY2hhcikgfHwgQTMoCisg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJENoYXIkaXNCZXR3ZWVuLAorICAgICAgICBfZWxtX2xhbmck
Y29yZSROYXRpdmVfVXRpbHMuY2hyKCdBJyksCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9VdGlscy5jaHIoJ0YnKSwKKyAgICAgICAgJGNoYXIpKTsKK307CisKK3ZhciBfZWxtX2xhbmck
Y29yZSRTdHJpbmckZnJvbUxpc3QgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5nLmZyb21M
aXN0OwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyR0b0xpc3QgPSBfZWxtX2xhbmckY29yZSRO
YXRpdmVfU3RyaW5nLnRvTGlzdDsKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJpbmckdG9GbG9hdCA9
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcudG9GbG9hdDsKK3ZhciBfZWxtX2xhbmckY29y
ZSRTdHJpbmckdG9JbnQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5nLnRvSW50OwordmFy
IF9lbG1fbGFuZyRjb3JlJFN0cmluZyRpbmRpY2VzID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0
cmluZy5pbmRleGVzOwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRpbmRleGVzID0gX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX1N0cmluZy5pbmRleGVzOwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmlu
ZyRlbmRzV2l0aCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcuZW5kc1dpdGg7Cit2YXIg
X2VsbV9sYW5nJGNvcmUkU3RyaW5nJHN0YXJ0c1dpdGggPSBfZWxtX2xhbmckY29yZSROYXRpdmVf
U3RyaW5nLnN0YXJ0c1dpdGg7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGNvbnRhaW5zID0g
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5jb250YWluczsKK3ZhciBfZWxtX2xhbmckY29y
ZSRTdHJpbmckYWxsID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5hbGw7Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkU3RyaW5nJGFueSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcuYW55
OwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyR0b0xvd2VyID0gX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX1N0cmluZy50b0xvd2VyOwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyR0b1VwcGVyID0g
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy50b1VwcGVyOwordmFyIF9lbG1fbGFuZyRjb3Jl
JFN0cmluZyRsaW5lcyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcubGluZXM7Cit2YXIg
X2VsbV9sYW5nJGNvcmUkU3RyaW5nJHdvcmRzID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmlu
Zy53b3JkczsKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJpbmckdHJpbVJpZ2h0ID0gX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX1N0cmluZy50cmltUmlnaHQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5n
JHRyaW1MZWZ0ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy50cmltTGVmdDsKK3ZhciBf
ZWxtX2xhbmckY29yZSRTdHJpbmckdHJpbSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcu
dHJpbTsKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJpbmckcGFkUmlnaHQgPSBfZWxtX2xhbmckY29y
ZSROYXRpdmVfU3RyaW5nLnBhZFJpZ2h0OwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRwYWRM
ZWZ0ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5wYWRMZWZ0OwordmFyIF9lbG1fbGFu
ZyRjb3JlJFN0cmluZyRwYWQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5nLnBhZDsKK3Zh
ciBfZWxtX2xhbmckY29yZSRTdHJpbmckZHJvcFJpZ2h0ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X1N0cmluZy5kcm9wUmlnaHQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGRyb3BMZWZ0ID0g
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5kcm9wTGVmdDsKK3ZhciBfZWxtX2xhbmckY29y
ZSRTdHJpbmckcmlnaHQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5nLnJpZ2h0OwordmFy
IF9lbG1fbGFuZyRjb3JlJFN0cmluZyRsZWZ0ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmlu
Zy5sZWZ0OwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRzbGljZSA9IF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9TdHJpbmcuc2xpY2U7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJHJlcGVhdCA9
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcucmVwZWF0OwordmFyIF9lbG1fbGFuZyRjb3Jl
JFN0cmluZyRqb2luID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5qb2luOwordmFyIF9l
bG1fbGFuZyRjb3JlJFN0cmluZyRzcGxpdCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcu
c3BsaXQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGZvbGRyID0gX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX1N0cmluZy5mb2xkcjsKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJpbmckZm9sZGwgPSBf
ZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5nLmZvbGRsOwordmFyIF9lbG1fbGFuZyRjb3JlJFN0
cmluZyRyZXZlcnNlID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5yZXZlcnNlOwordmFy
IF9lbG1fbGFuZyRjb3JlJFN0cmluZyRmaWx0ZXIgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3Ry
aW5nLmZpbHRlcjsKK3ZhciBfZWxtX2xhbmckY29yZSRTdHJpbmckbWFwID0gX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX1N0cmluZy5tYXA7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGxlbmd0aCA9
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TdHJpbmcubGVuZ3RoOwordmFyIF9lbG1fbGFuZyRjb3Jl
JFN0cmluZyRjb25jYXQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5nLmNvbmNhdDsKK3Zh
ciBfZWxtX2xhbmckY29yZSRTdHJpbmckYXBwZW5kID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0
cmluZy5hcHBlbmQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJHVuY29ucyA9IF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9TdHJpbmcudW5jb25zOwordmFyIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRj
b25zID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1N0cmluZy5jb25zOwordmFyIF9lbG1fbGFuZyRj
b3JlJFN0cmluZyRmcm9tQ2hhciA9IGZ1bmN0aW9uICgkY2hhcikgeworICAgIHJldHVybiBBMihf
ZWxtX2xhbmckY29yZSRTdHJpbmckY29ucywgJGNoYXIsICcnKTsKK307Cit2YXIgX2VsbV9sYW5n
JGNvcmUkU3RyaW5nJGlzRW1wdHkgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfU3RyaW5nLmlzRW1w
dHk7CisKKy8vaW1wb3J0IE1heWJlLCBOYXRpdmUuTGlzdCAvLworCit2YXIgX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX1JlZ2V4ID0gZnVuY3Rpb24oKSB7CisKK2Z1bmN0aW9uIGVzY2FwZShzdHIpCit7
CisgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bLVwvXFxeJCorPy4oKXxbXF17fV0vZywgJ1xcJCYn
KTsKK30KK2Z1bmN0aW9uIGNhc2VJbnNlbnNpdGl2ZShyZSkKK3sKKyAgICByZXR1cm4gbmV3IFJl
Z0V4cChyZS5zb3VyY2UsICdnaScpOworfQorZnVuY3Rpb24gcmVnZXgocmF3KQoreworICAgIHJl
dHVybiBuZXcgUmVnRXhwKHJhdywgJ2cnKTsKK30KKworZnVuY3Rpb24gY29udGFpbnMocmUsIHN0
cmluZykKK3sKKyAgICByZXR1cm4gc3RyaW5nLm1hdGNoKHJlKSAhPT0gbnVsbDsKK30KKworZnVu
Y3Rpb24gZmluZChuLCByZSwgc3RyKQoreworICAgIG4gPSBuLmN0b3IgPT09ICdBbGwnID8gSW5m
aW5pdHkgOiBuLl8wOworICAgIHZhciBvdXQgPSBbXTsKKyAgICB2YXIgbnVtYmVyID0gMDsKKyAg
ICB2YXIgc3RyaW5nID0gc3RyOworICAgIHZhciBsYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7Cisg
ICAgdmFyIHByZXZMYXN0SW5kZXggPSAtMTsKKyAgICB2YXIgcmVzdWx0OworICAgIHdoaWxlIChu
dW1iZXIrKyA8IG4gJiYgKHJlc3VsdCA9IHJlLmV4ZWMoc3RyaW5nKSkpCisgICAgeworICAgICAg
ICBpZiAocHJldkxhc3RJbmRleCA9PT0gcmUubGFzdEluZGV4KSBicmVhazsKKyAgICAgICAgdmFy
IGkgPSByZXN1bHQubGVuZ3RoIC0gMTsKKyAgICAgICAgdmFyIHN1YnMgPSBuZXcgQXJyYXkoaSk7
CisgICAgICAgIHdoaWxlIChpID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHN1Ym1h
dGNoID0gcmVzdWx0W2ldOworICAgICAgICAgICAgc3Vic1stLWldID0gc3VibWF0Y2ggPT09IHVu
ZGVmaW5lZAorICAgICAgICAgICAgICAgID8gX2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90aGluZwor
ICAgICAgICAgICAgICAgIDogX2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVzdChzdWJtYXRjaCk7Cisg
ICAgICAgIH0KKyAgICAgICAgb3V0LnB1c2goeworICAgICAgICAgICAgbWF0Y2g6IHJlc3VsdFsw
XSwKKyAgICAgICAgICAgIHN1Ym1hdGNoZXM6IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZy
b21BcnJheShzdWJzKSwKKyAgICAgICAgICAgIGluZGV4OiByZXN1bHQuaW5kZXgsCisgICAgICAg
ICAgICBudW1iZXI6IG51bWJlcgorICAgICAgICB9KTsKKyAgICAgICAgcHJldkxhc3RJbmRleCA9
IHJlLmxhc3RJbmRleDsKKyAgICB9CisgICAgcmUubGFzdEluZGV4ID0gbGFzdEluZGV4OworICAg
IHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkob3V0KTsKK30KKwor
ZnVuY3Rpb24gcmVwbGFjZShuLCByZSwgcmVwbGFjZXIsIHN0cmluZykKK3sKKyAgICBuID0gbi5j
dG9yID09PSAnQWxsJyA/IEluZmluaXR5IDogbi5fMDsKKyAgICB2YXIgY291bnQgPSAwOworICAg
IGZ1bmN0aW9uIGpzUmVwbGFjZXIobWF0Y2gpCisgICAgeworICAgICAgICBpZiAoY291bnQrKyA+
PSBuKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CisgICAgICAgIH0KKyAg
ICAgICAgdmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMzsKKyAgICAgICAgdmFyIHN1Ym1hdGNo
ZXMgPSBuZXcgQXJyYXkoaSk7CisgICAgICAgIHdoaWxlIChpID4gMCkKKyAgICAgICAgeworICAg
ICAgICAgICAgdmFyIHN1Ym1hdGNoID0gYXJndW1lbnRzW2ldOworICAgICAgICAgICAgc3VibWF0
Y2hlc1stLWldID0gc3VibWF0Y2ggPT09IHVuZGVmaW5lZAorICAgICAgICAgICAgICAgID8gX2Vs
bV9sYW5nJGNvcmUkTWF5YmUkTm90aGluZworICAgICAgICAgICAgICAgIDogX2VsbV9sYW5nJGNv
cmUkTWF5YmUkSnVzdChzdWJtYXRjaCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlcGxh
Y2VyKHsKKyAgICAgICAgICAgIG1hdGNoOiBtYXRjaCwKKyAgICAgICAgICAgIHN1Ym1hdGNoZXM6
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheShzdWJtYXRjaGVzKSwKKyAgICAg
ICAgICAgIGluZGV4OiBhcmd1bWVudHNbaSAtIDFdLAorICAgICAgICAgICAgbnVtYmVyOiBjb3Vu
dAorICAgICAgICB9KTsKKyAgICB9CisgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHJlLCBqc1Jl
cGxhY2VyKTsKK30KKworZnVuY3Rpb24gc3BsaXQobiwgcmUsIHN0cikKK3sKKyAgICBuID0gbi5j
dG9yID09PSAnQWxsJyA/IEluZmluaXR5IDogbi5fMDsKKyAgICBpZiAobiA9PT0gSW5maW5pdHkp
CisgICAgeworICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFy
cmF5KHN0ci5zcGxpdChyZSkpOworICAgIH0KKyAgICB2YXIgc3RyaW5nID0gc3RyOworICAgIHZh
ciByZXN1bHQ7CisgICAgdmFyIG91dCA9IFtdOworICAgIHZhciBzdGFydCA9IHJlLmxhc3RJbmRl
eDsKKyAgICB3aGlsZSAobi0tKQorICAgIHsKKyAgICAgICAgaWYgKCEocmVzdWx0ID0gcmUuZXhl
YyhzdHJpbmcpKSkgYnJlYWs7CisgICAgICAgIG91dC5wdXNoKHN0cmluZy5zbGljZShzdGFydCwg
cmVzdWx0LmluZGV4KSk7CisgICAgICAgIHN0YXJ0ID0gcmUubGFzdEluZGV4OworICAgIH0KKyAg
ICBvdXQucHVzaChzdHJpbmcuc2xpY2Uoc3RhcnQpKTsKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KG91dCk7Cit9CisKK3JldHVybiB7CisgICAgcmVnZXg6
IHJlZ2V4LAorICAgIGNhc2VJbnNlbnNpdGl2ZTogY2FzZUluc2Vuc2l0aXZlLAorICAgIGVzY2Fw
ZTogZXNjYXBlLAorCisgICAgY29udGFpbnM6IEYyKGNvbnRhaW5zKSwKKyAgICBmaW5kOiBGMyhm
aW5kKSwKKyAgICByZXBsYWNlOiBGNChyZXBsYWNlKSwKKyAgICBzcGxpdDogRjMoc3BsaXQpCit9
OworCit9KCk7CisKK3ZhciBfZWxtX2xhbmckY29yZSRSZWdleCRzcGxpdCA9IF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9SZWdleC5zcGxpdDsKK3ZhciBfZWxtX2xhbmckY29yZSRSZWdleCRyZXBsYWNl
ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1JlZ2V4LnJlcGxhY2U7Cit2YXIgX2VsbV9sYW5nJGNv
cmUkUmVnZXgkZmluZCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9SZWdleC5maW5kOwordmFyIF9l
bG1fbGFuZyRjb3JlJFJlZ2V4JGNvbnRhaW5zID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1JlZ2V4
LmNvbnRhaW5zOwordmFyIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JGNhc2VJbnNlbnNpdGl2ZSA9IF9l
bG1fbGFuZyRjb3JlJE5hdGl2ZV9SZWdleC5jYXNlSW5zZW5zaXRpdmU7Cit2YXIgX2VsbV9sYW5n
JGNvcmUkUmVnZXgkcmVnZXggPSBfZWxtX2xhbmckY29yZSROYXRpdmVfUmVnZXgucmVnZXg7Cit2
YXIgX2VsbV9sYW5nJGNvcmUkUmVnZXgkZXNjYXBlID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1Jl
Z2V4LmVzY2FwZTsKK3ZhciBfZWxtX2xhbmckY29yZSRSZWdleCRNYXRjaCA9IEY0KAorICAgIGZ1
bmN0aW9uIChhLCBiLCBjLCBkKSB7CisgICAgICAgIHJldHVybiB7bWF0Y2g6IGEsIHN1Ym1hdGNo
ZXM6IGIsIGluZGV4OiBjLCBudW1iZXI6IGR9OworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3Jl
JFJlZ2V4JFJlZ2V4ID0ge2N0b3I6ICdSZWdleCd9OwordmFyIF9lbG1fbGFuZyRjb3JlJFJlZ2V4
JEF0TW9zdCA9IGZ1bmN0aW9uIChhKSB7CisgICAgcmV0dXJuIHtjdG9yOiAnQXRNb3N0JywgXzA6
IGF9OworfTsKK3ZhciBfZWxtX2xhbmckY29yZSRSZWdleCRBbGwgPSB7Y3RvcjogJ0FsbCd9Owor
Cit2YXIgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRsZWZ0T2ZCYWNr
ID0gRjIoCisgICAgZnVuY3Rpb24gKHBhdHRlcm4sIHN0cmluZykgeworICAgICAgICByZXR1cm4g
QTIoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRNYXliZSR3aXRoRGVmYXVsdCwKKyAgICAg
ICAgICAgICcnLAorICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkTWF5YmUkbWFwLAorICAgICAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRm
bGlwLCBfZWxtX2xhbmckY29yZSRTdHJpbmckbGVmdCwgc3RyaW5nKSwKKyAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSRMaXN0JGhlYWQoCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJExpc3QkcmV2ZXJzZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIEEyKF9lbG1fbGFu
ZyRjb3JlJFN0cmluZyRpbmRleGVzLCBwYXR0ZXJuLCBzdHJpbmcpKSkpKTsKKyAgICB9KTsKK3Zh
ciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHJpZ2h0T2ZCYWNrID0g
RjIoCisgICAgZnVuY3Rpb24gKHBhdHRlcm4sIHN0cmluZykgeworICAgICAgICByZXR1cm4gQTIo
CisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRNYXliZSR3aXRoRGVmYXVsdCwKKyAgICAgICAg
ICAgICcnLAorICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUk
TWF5YmUkbWFwLAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfcDApIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEEzKAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkQmFzaWNzJGZsaXAsCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRT
dHJpbmckZHJvcExlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcsCisgICAgICAg
ICAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGMigKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHgsIHkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4ICsgeTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9s
YW5nJGNvcmUkU3RyaW5nJGxlbmd0aChwYXR0ZXJuKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfcDApKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJExpc3QkaGVhZCgKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlz
dCRyZXZlcnNlKAorICAgICAgICAgICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkU3Ry
aW5nJGluZGV4ZXMsIHBhdHRlcm4sIHN0cmluZykpKSkpOworICAgIH0pOwordmFyIF9lbG1fY29t
bXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkbGVmdE9mID0gRjIoCisgICAgZnVuY3Rp
b24gKHBhdHRlcm4sIHN0cmluZykgeworICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSRTdHJpbmckam9pbiwKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAg
QTIoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRtYXAsCisgICAgICAgICAg
ICAgICAgZnVuY3Rpb24gKF9wMSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQTIoCisg
ICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRNYXliZSR3aXRoRGVmYXVsdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkTWF5YmUkb25lT2YoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVu
Y3Rpb24gKF8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF8uc3Vi
bWF0Y2hlczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KF9wMSkpKTsKKyAgICAgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgICAgIEEzKAorICAgICAgICAgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSRSZWdleCRmaW5kLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSRSZWdleCRBdE1vc3QoMSksCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJl
Z2V4JHJlZ2V4KAorICAgICAgICAgICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnXiguKj8pJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSRSZWdleCRlc2NhcGUocGF0dGVybikpKSwKKyAgICAgICAgICAgICAgICAg
ICAgc3RyaW5nKSkpOworICAgIH0pOwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRT
dHJpbmdfRXh0cmEkcmlnaHRPZiA9IEYyKAorICAgIGZ1bmN0aW9uIChwYXR0ZXJuLCBzdHJpbmcp
IHsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkU3RyaW5n
JGpvaW4sCisgICAgICAgICAgICAnJywKKyAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAg
IF9lbG1fbGFuZyRjb3JlJExpc3QkbWFwLAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfcDIp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkTWF5YmUkd2l0aERlZmF1bHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE1heWJlJG9u
ZU9mKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfLnN1Ym1hdGNoZXM7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfShfcDIpKSk7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgICAgICBBMygKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkZmlu
ZCwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkQXRNb3N0KDEpLAor
ICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZWdleCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJEJhc2ljc19vcHNbJysrJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkUmVnZXgkZXNjYXBlKHBhdHRlcm4pLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICcoLiopJCcpKSwKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nKSkpOworICAgIH0p
OwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkc3RyaXBUYWdz
ID0gZnVuY3Rpb24gKHN0cmluZykgeworICAgIHJldHVybiBBNCgKKyAgICAgICAgX2VsbV9sYW5n
JGNvcmUkUmVnZXgkcmVwbGFjZSwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkQWxsLAor
ICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZWdleCgnPFxcLz9bXj5dKz4nKSwKKyAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGFsd2F5cygnJyksCisgICAgICAgIHN0cmluZyk7Cit9
OwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkdG9TZW50ZW5j
ZUhlbHBlciA9IEYzKAorICAgIGZ1bmN0aW9uIChsYXN0UGFydCwgc2VudGVuY2UsIGxpc3QpIHsK
KyAgICAgICAgdG9TZW50ZW5jZUhlbHBlcjoKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAg
ICAgICAgIHZhciBfcDMgPSBsaXN0OworICAgICAgICAgICAgaWYgKF9wMy5jdG9yID09PSAnW10n
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbnRlbmNlOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBpZiAoX3AzLl8xLmN0b3IgPT09ICdbXScpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkQmFzaWNzX29wc1snKysnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbnRlbmNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1sn
KysnXSwgbGFzdFBhcnQsIF9wMy5fMCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBfdjEgPSBsYXN0UGFydCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIF92MiA9IEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFz
aWNzX29wc1snKysnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbnRlbmNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSwgJywg
JywgX3AzLl8wKSksCisgICAgICAgICAgICAgICAgICAgICAgICBfdjMgPSBfcDMuXzE7CisgICAg
ICAgICAgICAgICAgICAgIGxhc3RQYXJ0ID0gX3YxOworICAgICAgICAgICAgICAgICAgICBzZW50
ZW5jZSA9IF92MjsKKyAgICAgICAgICAgICAgICAgICAgbGlzdCA9IF92MzsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWUgdG9TZW50ZW5jZUhlbHBlcjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJp
bmdfZXh0cmEkU3RyaW5nX0V4dHJhJHRvU2VudGVuY2VCYXNlQ2FzZSA9IGZ1bmN0aW9uIChsaXN0
KSB7CisgICAgdmFyIF9wNCA9IGxpc3Q7CisgICAgX3Y0XzI6CisgICAgZG8geworICAgICAgICBp
ZiAoX3A0LmN0b3IgPT09ICc6OicpIHsKKyAgICAgICAgICAgIGlmIChfcDQuXzEuY3RvciA9PT0g
J1tdJykgeworICAgICAgICAgICAgICAgIHJldHVybiBfcDQuXzA7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGlmIChfcDQuXzEuXzEuY3RvciA9PT0gJ1tdJykgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSRCYXNpY3Nfb3BzWycrKyddLAorICAgICAgICAgICAgICAgICAgICAgICAgX3A0
Ll8wLAorICAgICAgICAgICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29w
c1snKysnXSwgJyBhbmQgJywgX3A0Ll8xLl8wKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3Y0XzI7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnJlYWsgX3Y0XzI7Cisg
ICAgICAgIH0KKyAgICB9IHdoaWxlKGZhbHNlKTsKKyAgICByZXR1cm4gJyc7Cit9OwordmFyIF9l
bG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkdG9TZW50ZW5jZU94Zm9yZCA9
IGZ1bmN0aW9uIChsaXN0KSB7CisgICAgdmFyIF9wNSA9IGxpc3Q7CisgICAgaWYgKCgoX3A1LmN0
b3IgPT09ICc6OicpICYmIChfcDUuXzEuY3RvciA9PT0gJzo6JykpICYmIChfcDUuXzEuXzEuY3Rv
ciA9PT0gJzo6JykpIHsKKyAgICAgICAgcmV0dXJuIEEzKAorICAgICAgICAgICAgX2VsbV9jb21t
dW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSR0b1NlbnRlbmNlSGVscGVyLAorICAgICAg
ICAgICAgJywgYW5kICcsCisgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICBfZWxtX2xh
bmckY29yZSRCYXNpY3Nfb3BzWycrKyddLAorICAgICAgICAgICAgICAgIF9wNS5fMCwKKyAgICAg
ICAgICAgICAgICBBMihfZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycrKyddLCAnLCAnLCBfcDUu
XzEuXzApKSwKKyAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJExpc3Rfb3BzWyc6OiddLCBf
cDUuXzEuXzEuXzAsIF9wNS5fMS5fMS5fMSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVy
biBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHRvU2VudGVuY2VCYXNl
Q2FzZShsaXN0KTsKKyAgICB9Cit9OwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRT
dHJpbmdfRXh0cmEkdG9TZW50ZW5jZSA9IGZ1bmN0aW9uIChsaXN0KSB7CisgICAgdmFyIF9wNiA9
IGxpc3Q7CisgICAgaWYgKCgoX3A2LmN0b3IgPT09ICc6OicpICYmIChfcDYuXzEuY3RvciA9PT0g
Jzo6JykpICYmIChfcDYuXzEuXzEuY3RvciA9PT0gJzo6JykpIHsKKyAgICAgICAgcmV0dXJuIEEz
KAorICAgICAgICAgICAgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSR0
b1NlbnRlbmNlSGVscGVyLAorICAgICAgICAgICAgJyBhbmQgJywKKyAgICAgICAgICAgIEEyKAor
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJysrJ10sCisgICAgICAg
ICAgICAgICAgX3A2Ll8wLAorICAgICAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJEJhc2lj
c19vcHNbJysrJ10sICcsICcsIF9wNi5fMS5fMCkpLAorICAgICAgICAgICAgQTIoX2VsbV9sYW5n
JGNvcmUkTGlzdF9vcHNbJzo6J10sIF9wNi5fMS5fMS5fMCwgX3A2Ll8xLl8xLl8xKSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJp
bmdfRXh0cmEkdG9TZW50ZW5jZUJhc2VDYXNlKGxpc3QpOworICAgIH0KK307Cit2YXIgX2VsbV9j
b21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRlbGxpcHNpc1dpdGggPSBGMygKKyAg
ICBmdW5jdGlvbiAoaG93TG9uZywgYXBwZW5kLCBzdHJpbmcpIHsKKyAgICAgICAgcmV0dXJuIChf
ZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY21wKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkU3RyaW5nJGxlbmd0aChzdHJpbmcpLAorICAgICAgICAgICAgaG93TG9uZykgPCAxKSA/IHN0
cmluZyA6IEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSwK
KyAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRs
ZWZ0LAorICAgICAgICAgICAgICAgIGhvd0xvbmcgLSBfZWxtX2xhbmckY29yZSRTdHJpbmckbGVu
Z3RoKGFwcGVuZCksCisgICAgICAgICAgICAgICAgc3RyaW5nKSwKKyAgICAgICAgICAgIGFwcGVu
ZCk7CisgICAgfSk7Cit2YXIgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRy
YSRlbGxpcHNpcyA9IEYyKAorICAgIGZ1bmN0aW9uIChob3dMb25nLCBzdHJpbmcpIHsKKyAgICAg
ICAgcmV0dXJuIEEzKF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkZWxs
aXBzaXNXaXRoLCBob3dMb25nLCAnLi4uJywgc3RyaW5nKTsKKyAgICB9KTsKK3ZhciBfZWxtX2Nv
bW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJGNvdW50T2NjdXJyZW5jZXMgPSBGMigK
KyAgICBmdW5jdGlvbiAobmVlZGxlLCBoYXlzdGFjaykgeworICAgICAgICByZXR1cm4gKF9lbG1f
bGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5lcSgKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0
cmluZyRsZW5ndGgobmVlZGxlKSwKKyAgICAgICAgICAgIDApIHx8IF9lbG1fbGFuZyRjb3JlJE5h
dGl2ZV9VdGlscy5lcSgKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRsZW5ndGgo
aGF5c3RhY2spLAorICAgICAgICAgICAgMCkpID8gMCA6IF9lbG1fbGFuZyRjb3JlJExpc3QkbGVu
Z3RoKAorICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGluZGV4ZXMsIG5lZWRs
ZSwgaGF5c3RhY2spKTsKKyAgICB9KTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEk
U3RyaW5nX0V4dHJhJHVuaW5kZW50ID0gZnVuY3Rpb24gKG11bHRpbGluZVN0aW5nKSB7CisgICAg
dmFyIGlzTm90V2hpdGVzcGFjZSA9IGZ1bmN0aW9uICgkY2hhcikgeworICAgICAgICByZXR1cm4g
KCFfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuZXEoCisgICAgICAgICAgICAkY2hhciwKKyAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jaHIoJyAnKSkpICYmICghX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmVxKAorICAgICAgICAgICAgJGNoYXIsCisgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuY2hyKCdcdCcpKSk7CisgICAgfTsKKyAg
ICB2YXIgY291bnRMZWFkaW5nV2hpdGVzcGFjZSA9IEYyKAorICAgICAgICBmdW5jdGlvbiAoY291
bnQsIGxpbmUpIHsKKyAgICAgICAgICAgIGNvdW50TGVhZGluZ1doaXRlc3BhY2U6CisgICAgICAg
ICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIHZhciBfcDcgPSBfZWxtX2xhbmck
Y29yZSRTdHJpbmckdW5jb25zKGxpbmUpOworICAgICAgICAgICAgICAgIGlmIChfcDcuY3RvciA9
PT0gJ05vdGhpbmcnKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3VudDsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2YXIgX3A5ID0gX3A3Ll8w
Ll8xOworICAgICAgICAgICAgICAgICAgICB2YXIgX3A4ID0gX3A3Ll8wLl8wOworICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKF9wOC52YWx1ZU9mKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJyAnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdjkgPSBjb3Vu
dCArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92MTAgPSBfcDk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSBfdjk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGluZSA9IF92MTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWUgY291bnRMZWFkaW5nV2hpdGVzcGFjZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J1x0JzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3YxMSA9IGNvdW50ICsgMSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3YxMiA9IF9wOTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb3VudCA9IF92MTE7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGluZSA9IF92MTI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgY291
bnRMZWFkaW5nV2hpdGVzcGFjZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50OworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAg
ICB2YXIgbGluZXMgPSBfZWxtX2xhbmckY29yZSRTdHJpbmckbGluZXMobXVsdGlsaW5lU3Rpbmcp
OworICAgIHZhciBtaW5MZWFkID0gQTIoCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJE1heWJlJHdp
dGhEZWZhdWx0LAorICAgICAgICAwLAorICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JG1pbmlt
dW0oCisgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0
JG1hcCwKKyAgICAgICAgICAgICAgICBjb3VudExlYWRpbmdXaGl0ZXNwYWNlKDApLAorICAgICAg
ICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JGZp
bHRlciwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGFueShpc05v
dFdoaXRlc3BhY2UpLAorICAgICAgICAgICAgICAgICAgICBsaW5lcykpKSk7CisgICAgcmV0dXJu
IEEyKAorICAgICAgICBfZWxtX2xhbmckY29yZSRTdHJpbmckam9pbiwKKyAgICAgICAgJ1xuJywK
KyAgICAgICAgQTIoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JG1hcCwKKyAgICAg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRkcm9wTGVmdChtaW5MZWFkKSwKKyAgICAgICAg
ICAgIGxpbmVzKSk7Cit9OwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdf
RXh0cmEkZGFzaGVyaXplID0gZnVuY3Rpb24gKHN0cmluZykgeworICAgIHJldHVybiBfZWxtX2xh
bmckY29yZSRTdHJpbmckdG9Mb3dlcigKKyAgICAgICAgQTQoCisgICAgICAgICAgICBfZWxtX2xh
bmckY29yZSRSZWdleCRyZXBsYWNlLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgk
QWxsLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVnZXgoJ1tfLVxcc10rJyks
CisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3MkYWx3YXlzKCctJyksCisgICAgICAg
ICAgICBBNCgKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZXBsYWNlLAor
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JEFsbCwKKyAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSRSZWdleCRyZWdleCgnKFtBLVpdKScpLAorICAgICAgICAgICAgICAg
IGZ1bmN0aW9uIChfcDEwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAg
ICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRhcHBlbmQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAnLScsCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAo
XykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfLm1hdGNoOworICAgICAg
ICAgICAgICAgICAgICAgICAgfShfcDEwKSk7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgICAgICBfZWxtX2xhbmckY29yZSRTdHJpbmckdHJpbShzdHJpbmcpKSkpOworfTsKK3ZhciBf
ZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHVuZGVyc2NvcmVkID0gZnVu
Y3Rpb24gKHN0cmluZykgeworICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRTdHJpbmckdG9Mb3dl
cigKKyAgICAgICAgQTQoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZXBsYWNl
LAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkQWxsLAorICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkUmVnZXgkcmVnZXgoJ1tfLVxcc10rJyksCisgICAgICAgICAgICBfZWxtX2xh
bmckY29yZSRCYXNpY3MkYWx3YXlzKCdfJyksCisgICAgICAgICAgICBBNCgKKyAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZXBsYWNlLAorICAgICAgICAgICAgICAgIF9lbG1f
bGFuZyRjb3JlJFJlZ2V4JEFsbCwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdl
eCRyZWdleCgnKFthLXpcXGRdKShbQS1aXSspJyksCisgICAgICAgICAgICAgICAgZnVuY3Rpb24g
KF9wMTEpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAg
ICAgICAgICAgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGpvaW4sCisgICAgICAgICAgICAgICAgICAg
ICAgICAnXycsCisgICAgICAgICAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JGZpbHRlck1hcCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3MkaWRlbnRpdHksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIF8uc3VibWF0Y2hlczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9KF9wMTEpKSk7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBfZWxtX2xh
bmckY29yZSRTdHJpbmckdHJpbShzdHJpbmcpKSkpOworfTsKK3ZhciBfZWxtX2NvbW11bml0eSRz
dHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHVuc3Vycm91bmQgPSBGMigKKyAgICBmdW5jdGlvbiAo
d3JhcCwgc3RyaW5nKSB7CisgICAgICAgIGlmIChBMihfZWxtX2xhbmckY29yZSRTdHJpbmckc3Rh
cnRzV2l0aCwgd3JhcCwgc3RyaW5nKSAmJiBBMihfZWxtX2xhbmckY29yZSRTdHJpbmckZW5kc1dp
dGgsIHdyYXAsIHN0cmluZykpIHsKKyAgICAgICAgICAgIHZhciBsZW5ndGggPSBfZWxtX2xhbmck
Y29yZSRTdHJpbmckbGVuZ3RoKHdyYXApOworICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRkcm9wUmlnaHQsCisgICAgICAgICAgICAg
ICAgbGVuZ3RoLAorICAgICAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJFN0cmluZyRkcm9w
TGVmdCwgbGVuZ3RoLCBzdHJpbmcpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJl
dHVybiBzdHJpbmc7CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJp
bmdfZXh0cmEkU3RyaW5nX0V4dHJhJHVucXVvdGUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7CisgICAg
cmV0dXJuIEEyKF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkdW5zdXJy
b3VuZCwgJ1wiJywgc3RyaW5nKTsKK307Cit2YXIgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJh
JFN0cmluZ19FeHRyYSRzdXJyb3VuZCA9IEYyKAorICAgIGZ1bmN0aW9uICh3cmFwLCBzdHJpbmcp
IHsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNz
X29wc1snKysnXSwKKyAgICAgICAgICAgIHdyYXAsCisgICAgICAgICAgICBBMihfZWxtX2xhbmck
Y29yZSRCYXNpY3Nfb3BzWycrKyddLCBzdHJpbmcsIHdyYXApKTsKKyAgICB9KTsKK3ZhciBfZWxt
X2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHF1b3RlID0gZnVuY3Rpb24gKHN0
cmluZykgeworICAgIHJldHVybiBBMihfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5n
X0V4dHJhJHN1cnJvdW5kLCAnXCInLCBzdHJpbmcpOworfTsKK3ZhciBfZWxtX2NvbW11bml0eSRz
dHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJGNhbWVsaXplID0gZnVuY3Rpb24gKHN0cmluZykgewor
ICAgIHJldHVybiBBNCgKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVwbGFjZSwKKyAg
ICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkQWxsLAorICAgICAgICBfZWxtX2xhbmckY29yZSRS
ZWdleCRyZWdleCgnWy1fXFxzXSsoLik/JyksCisgICAgICAgIGZ1bmN0aW9uIChfcDEyKSB7Cisg
ICAgICAgICAgICB2YXIgX3AxMyA9IF9wMTI7CisgICAgICAgICAgICB2YXIgX3AxNCA9IF9wMTMu
c3VibWF0Y2hlczsKKyAgICAgICAgICAgIGlmICgoX3AxNC5jdG9yID09PSAnOjonKSAmJiAoX3Ax
NC5fMC5jdG9yID09PSAnSnVzdCcpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFu
ZyRjb3JlJFN0cmluZyR0b1VwcGVyKF9wMTQuXzAuXzApOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gJyc7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyR0cmltKHN0cmluZykpOworfTsKK3ZhciBfZWxt
X2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJGlzQmxhbmsgPSBmdW5jdGlvbiAo
c3RyaW5nKSB7CisgICAgcmV0dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRj
b250YWlucywKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVnZXgoJ15cXHMqJCcpLAor
ICAgICAgICBzdHJpbmcpOworfTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3Ry
aW5nX0V4dHJhJGNsZWFuID0gZnVuY3Rpb24gKHN0cmluZykgeworICAgIHJldHVybiBfZWxtX2xh
bmckY29yZSRTdHJpbmckdHJpbSgKKyAgICAgICAgQTQoCisgICAgICAgICAgICBfZWxtX2xhbmck
Y29yZSRSZWdleCRyZXBsYWNlLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkQWxs
LAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVnZXgoJ1xcc1xccysnKSwKKyAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRhbHdheXMoJyAnKSwKKyAgICAgICAgICAg
IHN0cmluZykpOworfTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4
dHJhJHNvZnRCcmVha1JlZ2V4cCA9IGZ1bmN0aW9uICh3aWR0aCkgeworICAgIHJldHVybiBfZWxt
X2xhbmckY29yZSRSZWdleCRyZWdleCgKKyAgICAgICAgQTIoCisgICAgICAgICAgICBfZWxtX2xh
bmckY29yZSRCYXNpY3Nfb3BzWycrKyddLAorICAgICAgICAgICAgJy57MSwnLAorICAgICAgICAg
ICAgQTIoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSwK
KyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3MkdG9TdHJpbmcod2lkdGgpLAor
ICAgICAgICAgICAgICAgICd9KFxcc3wkKXxcXFMrPyhcXHN8JCknKSkpOworfTsKK3ZhciBfZWxt
X2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHNvZnRFbGxpcHNpcyA9IEYyKAor
ICAgIGZ1bmN0aW9uIChob3dMb25nLCBzdHJpbmcpIHsKKyAgICAgICAgcmV0dXJuIChfZWxtX2xh
bmckY29yZSROYXRpdmVfVXRpbHMuY21wKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkU3Ry
aW5nJGxlbmd0aChzdHJpbmcpLAorICAgICAgICAgICAgaG93TG9uZykgPCAxKSA/IHN0cmluZyA6
IEEzKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGZsaXAsCisgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSRTdHJpbmckYXBwZW5kLAorICAgICAgICAgICAgJy4uLicsCisgICAg
ICAgICAgICBBNCgKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZXBsYWNl
LAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JEFsbCwKKyAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZWdleCgnKFtcXC4sOzpcXHNdKSskJyksCisgICAg
ICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGFsd2F5cygnJyksCisgICAgICAgICAg
ICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRqb2lu
LAorICAgICAgICAgICAgICAgICAgICAnJywKKyAgICAgICAgICAgICAgICAgICAgQTIoCisgICAg
ICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JG1hcCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZ1bmN0aW9uIChfKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIF8ubWF0Y2g7CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAg
ICAgICAgICAgICAgQTMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkUmVnZXgkZmluZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSRSZWdleCRBdE1vc3QoMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9jb21t
dW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRzb2Z0QnJlYWtSZWdleHAoaG93TG9uZyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKSkpKSk7CisgICAgfSk7Cit2YXIg
X2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRzb2Z0QnJlYWsgPSBGMigK
KyAgICBmdW5jdGlvbiAod2lkdGgsIHN0cmluZykgeworICAgICAgICByZXR1cm4gKF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9VdGlscy5jbXAod2lkdGgsIDApIDwgMSkgPyBfZWxtX2xhbmckY29yZSRO
YXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICBbXSkgOiBBMigKKyAgICAgICAgICAg
IF9lbG1fbGFuZyRjb3JlJExpc3QkbWFwLAorICAgICAgICAgICAgZnVuY3Rpb24gKF8pIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gXy5tYXRjaDsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICBBMygKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRmaW5kLAorICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JEFsbCwKKyAgICAgICAgICAgICAgICBfZWxt
X2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHNvZnRCcmVha1JlZ2V4cCh3aWR0
aCksCisgICAgICAgICAgICAgICAgc3RyaW5nKSk7CisgICAgfSk7Cit2YXIgX2VsbV9jb21tdW5p
dHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRzb2Z0V3JhcFdpdGggPSBGMygKKyAgICBmdW5j
dGlvbiAod2lkdGgsIHNlcGFyYXRvciwgc3RyaW5nKSB7CisgICAgICAgIHJldHVybiBBMigKKyAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRqb2luLAorICAgICAgICAgICAgc2VwYXJh
dG9yLAorICAgICAgICAgICAgQTIoX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19F
eHRyYSRzb2Z0QnJlYWssIHdpZHRoLCBzdHJpbmcpKTsKKyAgICB9KTsKK3ZhciBfZWxtX2NvbW11
bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHNvZnRXcmFwID0gRjIoCisgICAgZnVuY3Rp
b24gKHdpZHRoLCBzdHJpbmcpIHsKKyAgICAgICAgcmV0dXJuIEEzKF9lbG1fY29tbXVuaXR5JHN0
cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkc29mdFdyYXBXaXRoLCB3aWR0aCwgJ1xuJywgc3RyaW5n
KTsKKyAgICB9KTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJh
JGJyZWFrZXIgPSBGMygKKyAgICBmdW5jdGlvbiAod2lkdGgsIHN0cmluZywgYWNjKSB7CisgICAg
ICAgIGJyZWFrZXI6CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICB2YXIgX3Ax
NSA9IHN0cmluZzsKKyAgICAgICAgICAgIGlmIChfcDE1ID09PSAnJykgeworICAgICAgICAgICAg
ICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRMaXN0JHJldmVyc2UoYWNjKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIF92MTYgPSB3aWR0aCwKKyAgICAgICAgICAg
ICAgICAgICAgX3YxNyA9IEEyKF9lbG1fbGFuZyRjb3JlJFN0cmluZyRkcm9wTGVmdCwgd2lkdGgs
IHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgIF92MTggPSBBMigKKyAgICAgICAgICAgICAg
ICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10sCisgICAgICAgICAgICAgICAgICAg
IEEzKF9lbG1fbGFuZyRjb3JlJFN0cmluZyRzbGljZSwgMCwgd2lkdGgsIHN0cmluZyksCisgICAg
ICAgICAgICAgICAgICAgIGFjYyk7CisgICAgICAgICAgICAgICAgd2lkdGggPSBfdjE2OworICAg
ICAgICAgICAgICAgIHN0cmluZyA9IF92MTc7CisgICAgICAgICAgICAgICAgYWNjID0gX3YxODsK
KyAgICAgICAgICAgICAgICBjb250aW51ZSBicmVha2VyOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfSk7Cit2YXIgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRy
YSRicmVhayA9IEYyKAorICAgIGZ1bmN0aW9uICh3aWR0aCwgc3RyaW5nKSB7CisgICAgICAgIHJl
dHVybiAoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmVxKHdpZHRoLCAwKSB8fCBfZWxtX2xh
bmckY29yZSROYXRpdmVfVXRpbHMuZXEoc3RyaW5nLCAnJykpID8gX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgW3N0cmluZ10pIDogQTMoCisgICAgICAg
ICAgICBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJGJyZWFrZXIsCisg
ICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgIHN0cmluZywKKyAgICAgICAgICAgIF9lbG1f
bGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICBbXSkpOwor
ICAgIH0pOwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkd3Jh
cFdpdGggPSBGMygKKyAgICBmdW5jdGlvbiAod2lkdGgsIHNlcGFyYXRvciwgc3RyaW5nKSB7Cisg
ICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRqb2lu
LAorICAgICAgICAgICAgc2VwYXJhdG9yLAorICAgICAgICAgICAgQTIoX2VsbV9jb21tdW5pdHkk
c3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRicmVhaywgd2lkdGgsIHN0cmluZykpOworICAgIH0p
OwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkd3JhcCA9IEYy
KAorICAgIGZ1bmN0aW9uICh3aWR0aCwgc3RyaW5nKSB7CisgICAgICAgIHJldHVybiBBMyhfZWxt
X2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHdyYXBXaXRoLCB3aWR0aCwgJ1xu
Jywgc3RyaW5nKTsKKyAgICB9KTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3Ry
aW5nX0V4dHJhJHJlcGxhY2VTbGljZSA9IEY0KAorICAgIGZ1bmN0aW9uIChzdWJzdGl0dXRpb24s
IHN0YXJ0LCBlbmQsIHN0cmluZykgeworICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSRCYXNpY3Nfb3BzWycrKyddLAorICAgICAgICAgICAgQTMoX2VsbV9sYW5n
JGNvcmUkU3RyaW5nJHNsaWNlLCAwLCBzdGFydCwgc3RyaW5nKSwKKyAgICAgICAgICAgIEEyKAor
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJysrJ10sCisgICAgICAg
ICAgICAgICAgc3Vic3RpdHV0aW9uLAorICAgICAgICAgICAgICAgIEEzKAorICAgICAgICAgICAg
ICAgICAgICBfZWxtX2xhbmckY29yZSRTdHJpbmckc2xpY2UsCisgICAgICAgICAgICAgICAgICAg
IGVuZCwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGxlbmd0aChz
dHJpbmcpLAorICAgICAgICAgICAgICAgICAgICBzdHJpbmcpKSk7CisgICAgfSk7Cit2YXIgX2Vs
bV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRpbnNlcnRBdCA9IEYzKAorICAg
IGZ1bmN0aW9uIChpbnNlcnQsIHBvcywgc3RyaW5nKSB7CisgICAgICAgIHJldHVybiBBNChfZWxt
X2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHJlcGxhY2VTbGljZSwgaW5zZXJ0
LCBwb3MsIHBvcywgc3RyaW5nKTsKKyAgICB9KTsKK3ZhciBfZWxtX2NvbW11bml0eSRzdHJpbmdf
ZXh0cmEkU3RyaW5nX0V4dHJhJHJlcGxhY2UgPSBGMygKKyAgICBmdW5jdGlvbiAoc2VhcmNoLCBz
dWJzdGl0dXRpb24sIHN0cmluZykgeworICAgICAgICByZXR1cm4gQTQoCisgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSRSZWdleCRyZXBsYWNlLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUk
UmVnZXgkQWxsLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVnZXgoCisgICAg
ICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkZXNjYXBlKHNlYXJjaCkpLAorICAgICAg
ICAgICAgZnVuY3Rpb24gKF9wMTYpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3Vic3RpdHV0
aW9uOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHN0cmluZyk7CisgICAgfSk7Cit2YXIg
X2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRjaGFuZ2VDYXNlID0gRjIo
CisgICAgZnVuY3Rpb24gKG11dGF0b3IsIHdvcmQpIHsKKyAgICAgICAgcmV0dXJuIEEyKAorICAg
ICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTWF5YmUkd2l0aERlZmF1bHQsCisgICAgICAgICAgICAn
JywKKyAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE1heWJl
JG1hcCwKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX3AxNykgeworICAgICAgICAgICAgICAg
ICAgICB2YXIgX3AxOCA9IF9wMTc7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAg
ICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0cmluZyRjb25zLAorICAgICAg
ICAgICAgICAgICAgICAgICAgbXV0YXRvcihfcDE4Ll8wKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIF9wMTguXzEpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgX2VsbV9s
YW5nJGNvcmUkU3RyaW5nJHVuY29ucyh3b3JkKSkpOworICAgIH0pOwordmFyIF9lbG1fY29tbXVu
aXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkdG9TZW50ZW5jZUNhc2UgPSBmdW5jdGlvbiAo
d29yZCkgeworICAgIHJldHVybiBBMihfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5n
X0V4dHJhJGNoYW5nZUNhc2UsIF9lbG1fbGFuZyRjb3JlJENoYXIkdG9VcHBlciwgd29yZCk7Cit9
OwordmFyIF9lbG1fY29tbXVuaXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkdG9UaXRsZUNh
c2UgPSBmdW5jdGlvbiAod3MpIHsKKyAgICB2YXIgdXBwZXJjYXNlTWF0Y2ggPSBBMygKKyAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVwbGFjZSwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUk
UmVnZXgkQWxsLAorICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZWdleCgnXFx3KycpLAor
ICAgICAgICBmdW5jdGlvbiAoX3AxOSkgeworICAgICAgICAgICAgcmV0dXJuIF9lbG1fY29tbXVu
aXR5JHN0cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkdG9TZW50ZW5jZUNhc2UoCisgICAgICAgICAg
ICAgICAgZnVuY3Rpb24gKF8pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF8ubWF0Y2g7
CisgICAgICAgICAgICAgICAgfShfcDE5KSk7CisgICAgICAgIH0pOworICAgIHJldHVybiBBNCgK
KyAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVwbGFjZSwKKyAgICAgICAgX2VsbV9sYW5n
JGNvcmUkUmVnZXgkQWxsLAorICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZWdleCgnXihb
YS16XSl8XFxzKyhbYS16XSknKSwKKyAgICAgICAgZnVuY3Rpb24gKF9wMjApIHsKKyAgICAgICAg
ICAgIHJldHVybiB1cHBlcmNhc2VNYXRjaCgKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiAoXykg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gXy5tYXRjaDsKKyAgICAgICAgICAgICAgICB9
KF9wMjApKTsKKyAgICAgICAgfSwKKyAgICAgICAgd3MpOworfTsKK3ZhciBfZWxtX2NvbW11bml0
eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJGNsYXNzaWZ5ID0gZnVuY3Rpb24gKHN0cmluZykg
eworICAgIHJldHVybiBfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJhJHRv
U2VudGVuY2VDYXNlKAorICAgICAgICBBMygKKyAgICAgICAgICAgIF9lbG1fY29tbXVuaXR5JHN0
cmluZ19leHRyYSRTdHJpbmdfRXh0cmEkcmVwbGFjZSwKKyAgICAgICAgICAgICcgJywKKyAgICAg
ICAgICAgICcnLAorICAgICAgICAgICAgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmlu
Z19FeHRyYSRjYW1lbGl6ZSgKKyAgICAgICAgICAgICAgICBBNCgKKyAgICAgICAgICAgICAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVwbGFjZSwKKyAgICAgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkUmVnZXgkQWxsLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSRSZWdleCRyZWdleCgnW1xcV19dJyksCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRj
b3JlJEJhc2ljcyRhbHdheXMoJyAnKSwKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nKSkpKTsK
K307Cit2YXIgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRodW1hbml6
ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHsKKyAgICByZXR1cm4gX2VsbV9jb21tdW5pdHkkc3RyaW5n
X2V4dHJhJFN0cmluZ19FeHRyYSR0b1NlbnRlbmNlQ2FzZSgKKyAgICAgICAgX2VsbV9sYW5nJGNv
cmUkU3RyaW5nJHRvTG93ZXIoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRTdHJpbmckdHJp
bSgKKyAgICAgICAgICAgICAgICBBNCgKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkUmVnZXgkcmVwbGFjZSwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVn
ZXgkQWxsLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZWdleCRyZWdleCgn
X2lkJHxbLV9cXHNdKycpLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNp
Y3MkYWx3YXlzKCcgJyksCisgICAgICAgICAgICAgICAgICAgIEE0KAorICAgICAgICAgICAgICAg
ICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUmVnZXgkcmVwbGFjZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJFJlZ2V4JEFsbCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IF9lbG1fbGFuZyRjb3JlJFJlZ2V4JHJlZ2V4KCdbQS1aXScpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgZnVuY3Rpb24gKF9wMjEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gQTIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFN0
cmluZyRhcHBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF8pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfLm1hdGNoOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9KF9wMjEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJpbmcpKSkpKTsKK307Cit2YXIgX2VsbV9jb21tdW5pdHkk
c3RyaW5nX2V4dHJhJFN0cmluZ19FeHRyYSRkZWNhcGl0YWxpemUgPSBmdW5jdGlvbiAod29yZCkg
eworICAgIHJldHVybiBBMihfZWxtX2NvbW11bml0eSRzdHJpbmdfZXh0cmEkU3RyaW5nX0V4dHJh
JGNoYW5nZUNhc2UsIF9lbG1fbGFuZyRjb3JlJENoYXIkdG9Mb3dlciwgd29yZCk7Cit9OworCisv
L2ltcG9ydCBOYXRpdmUuTGlzdCAvLworCit2YXIgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0FycmF5
ID0gZnVuY3Rpb24oKSB7CisKKy8vIEEgUlJCLVRyZWUgaGFzIHR3byBkaXN0aW5jdCBkYXRhIHR5
cGVzLgorLy8gTGVhZiAtPiAiaGVpZ2h0IiAgaXMgYWx3YXlzIDAKKy8vICAgICAgICAgInRhYmxl
IiAgIGlzIGFuIGFycmF5IG9mIGVsZW1lbnRzCisvLyBOb2RlIC0+ICJoZWlnaHQiICBpcyBhbHdh
eXMgZ3JlYXRlciB0aGFuIDAKKy8vICAgICAgICAgInRhYmxlIiAgIGlzIGFuIGFycmF5IG9mIGNo
aWxkIG5vZGVzCisvLyAgICAgICAgICJsZW5ndGhzIiBpcyBhbiBhcnJheSBvZiBhY2N1bXVsYXRl
ZCBsZW5ndGhzIG9mIHRoZSBjaGlsZCBub2RlcworCisvLyBNIGlzIHRoZSBtYXhpbWFsIHRhYmxl
IHNpemUuIDMyIHNlZW1zIGZhc3QuIEUgaXMgdGhlIGFsbG93ZWQgaW5jcmVhc2UKKy8vIG9mIHNl
YXJjaCBzdGVwcyB3aGVuIGNvbmNhdHRpbmcgdG8gZmluZCBhbiBpbmRleC4gTG93ZXIgdmFsdWVz
IHdpbGwKKy8vIGRlY3JlYXNlIGJhbGFuY2luZywgYnV0IHdpbGwgaW5jcmVhc2Ugc2VhcmNoIHN0
ZXBzLgordmFyIE0gPSAzMjsKK3ZhciBFID0gMjsKKworLy8gQW4gZW1wdHkgYXJyYXkuCit2YXIg
ZW1wdHkgPSB7CisgICAgY3RvcjogJ19BcnJheScsCisgICAgaGVpZ2h0OiAwLAorICAgIHRhYmxl
OiBbXQorfTsKKworCitmdW5jdGlvbiBnZXQoaSwgYXJyYXkpCit7CisgICAgaWYgKGkgPCAwIHx8
IGkgPj0gbGVuZ3RoKGFycmF5KSkKKyAgICB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigKKyAg
ICAgICAgICAgICdJbmRleCAnICsgaSArICcgaXMgb3V0IG9mIHJhbmdlLiBDaGVjayB0aGUgbGVu
Z3RoIG9mICcgKworICAgICAgICAgICAgJ3lvdXIgYXJyYXkgZmlyc3Qgb3IgdXNlIGdldE1heWJl
IG9yIGdldFdpdGhEZWZhdWx0LicpOworICAgIH0KKyAgICByZXR1cm4gdW5zYWZlR2V0KGksIGFy
cmF5KTsKK30KKworCitmdW5jdGlvbiB1bnNhZmVHZXQoaSwgYXJyYXkpCit7CisgICAgZm9yICh2
YXIgeCA9IGFycmF5LmhlaWdodDsgeCA+IDA7IHgtLSkKKyAgICB7CisgICAgICAgIHZhciBzbG90
ID0gaSA+PiAoeCAqIDUpOworICAgICAgICB3aGlsZSAoYXJyYXkubGVuZ3Roc1tzbG90XSA8PSBp
KQorICAgICAgICB7CisgICAgICAgICAgICBzbG90Kys7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHNsb3QgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBpIC09IGFycmF5Lmxlbmd0aHNbc2xv
dCAtIDFdOworICAgICAgICB9CisgICAgICAgIGFycmF5ID0gYXJyYXkudGFibGVbc2xvdF07Cisg
ICAgfQorICAgIHJldHVybiBhcnJheS50YWJsZVtpXTsKK30KKworCisvLyBTZXRzIHRoZSB2YWx1
ZSBhdCB0aGUgaW5kZXggaS4gT25seSB0aGUgbm9kZXMgbGVhZGluZyB0byBpIHdpbGwgZ2V0Cisv
LyBjb3BpZWQgYW5kIHVwZGF0ZWQuCitmdW5jdGlvbiBzZXQoaSwgaXRlbSwgYXJyYXkpCit7Cisg
ICAgaWYgKGkgPCAwIHx8IGxlbmd0aChhcnJheSkgPD0gaSkKKyAgICB7CisgICAgICAgIHJldHVy
biBhcnJheTsKKyAgICB9CisgICAgcmV0dXJuIHVuc2FmZVNldChpLCBpdGVtLCBhcnJheSk7Cit9
CisKKworZnVuY3Rpb24gdW5zYWZlU2V0KGksIGl0ZW0sIGFycmF5KQoreworICAgIGFycmF5ID0g
bm9kZUNvcHkoYXJyYXkpOworCisgICAgaWYgKGFycmF5LmhlaWdodCA9PT0gMCkKKyAgICB7Cisg
ICAgICAgIGFycmF5LnRhYmxlW2ldID0gaXRlbTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgdmFyIHNsb3QgPSBnZXRTbG90KGksIGFycmF5KTsKKyAgICAgICAgaWYgKHNsb3QgPiAw
KQorICAgICAgICB7CisgICAgICAgICAgICBpIC09IGFycmF5Lmxlbmd0aHNbc2xvdCAtIDFdOwor
ICAgICAgICB9CisgICAgICAgIGFycmF5LnRhYmxlW3Nsb3RdID0gdW5zYWZlU2V0KGksIGl0ZW0s
IGFycmF5LnRhYmxlW3Nsb3RdKTsKKyAgICB9CisgICAgcmV0dXJuIGFycmF5OworfQorCisKK2Z1
bmN0aW9uIGluaXRpYWxpemUobGVuLCBmKQoreworICAgIGlmIChsZW4gPD0gMCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlbXB0eTsKKyAgICB9CisgICAgdmFyIGggPSBNYXRoLmZsb29yKCBNYXRo
LmxvZyhsZW4pIC8gTWF0aC5sb2coTSkgKTsKKyAgICByZXR1cm4gaW5pdGlhbGl6ZV8oZiwgaCwg
MCwgbGVuKTsKK30KKworZnVuY3Rpb24gaW5pdGlhbGl6ZV8oZiwgaCwgZnJvbSwgdG8pCit7Cisg
ICAgaWYgKGggPT09IDApCisgICAgeworICAgICAgICB2YXIgdGFibGUgPSBuZXcgQXJyYXkoKHRv
IC0gZnJvbSkgJSAoTSArIDEpKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJsZS5s
ZW5ndGg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgIHRhYmxlW2ldID0gZihmcm9tICsgaSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIGN0b3I6ICdfQXJyYXkn
LAorICAgICAgICAgICAgaGVpZ2h0OiAwLAorICAgICAgICAgICAgdGFibGU6IHRhYmxlCisgICAg
ICAgIH07CisgICAgfQorCisgICAgdmFyIHN0ZXAgPSBNYXRoLnBvdyhNLCBoKTsKKyAgICB2YXIg
dGFibGUgPSBuZXcgQXJyYXkoTWF0aC5jZWlsKCh0byAtIGZyb20pIC8gc3RlcCkpOworICAgIHZh
ciBsZW5ndGhzID0gbmV3IEFycmF5KHRhYmxlLmxlbmd0aCk7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB0YWJsZS5sZW5ndGg7IGkrKykKKyAgICB7CisgICAgICAgIHRhYmxlW2ldID0gaW5pdGlh
bGl6ZV8oZiwgaCAtIDEsIGZyb20gKyAoaSAqIHN0ZXApLCBNYXRoLm1pbihmcm9tICsgKChpICsg
MSkgKiBzdGVwKSwgdG8pKTsKKyAgICAgICAgbGVuZ3Roc1tpXSA9IGxlbmd0aCh0YWJsZVtpXSkg
KyAoaSA+IDAgPyBsZW5ndGhzW2ktMV0gOiAwKTsKKyAgICB9CisgICAgcmV0dXJuIHsKKyAgICAg
ICAgY3RvcjogJ19BcnJheScsCisgICAgICAgIGhlaWdodDogaCwKKyAgICAgICAgdGFibGU6IHRh
YmxlLAorICAgICAgICBsZW5ndGhzOiBsZW5ndGhzCisgICAgfTsKK30KKworZnVuY3Rpb24gZnJv
bUxpc3QobGlzdCkKK3sKKyAgICBpZiAobGlzdC5jdG9yID09PSAnW10nKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVtcHR5OworICAgIH0KKworICAgIC8vIEFsbG9jYXRlIE0gc2l6ZWQgYmxvY2tz
ICh0YWJsZSkgYW5kIHdyaXRlIGxpc3QgZWxlbWVudHMgdG8gaXQuCisgICAgdmFyIHRhYmxlID0g
bmV3IEFycmF5KE0pOworICAgIHZhciBub2RlcyA9IFtdOworICAgIHZhciBpID0gMDsKKworICAg
IHdoaWxlIChsaXN0LmN0b3IgIT09ICdbXScpCisgICAgeworICAgICAgICB0YWJsZVtpXSA9IGxp
c3QuXzA7CisgICAgICAgIGxpc3QgPSBsaXN0Ll8xOworICAgICAgICBpKys7CisKKyAgICAgICAg
Ly8gdGFibGUgaXMgZnVsbCwgc28gd2UgY2FuIHB1c2ggYSBsZWFmIGNvbnRhaW5pbmcgaXQgaW50
byB0aGUKKyAgICAgICAgLy8gbmV4dCBub2RlLgorICAgICAgICBpZiAoaSA9PT0gTSkKKyAgICAg
ICAgeworICAgICAgICAgICAgdmFyIGxlYWYgPSB7CisgICAgICAgICAgICAgICAgY3RvcjogJ19B
cnJheScsCisgICAgICAgICAgICAgICAgaGVpZ2h0OiAwLAorICAgICAgICAgICAgICAgIHRhYmxl
OiB0YWJsZQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGZyb21MaXN0UHVzaChsZWFmLCBu
b2Rlcyk7CisgICAgICAgICAgICB0YWJsZSA9IG5ldyBBcnJheShNKTsKKyAgICAgICAgICAgIGkg
PSAwOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTWF5YmUgdGhlcmUgaXMgc29tZXRoaW5n
IGxlZnQgb24gdGhlIHRhYmxlLgorICAgIGlmIChpID4gMCkKKyAgICB7CisgICAgICAgIHZhciBs
ZWFmID0geworICAgICAgICAgICAgY3RvcjogJ19BcnJheScsCisgICAgICAgICAgICBoZWlnaHQ6
IDAsCisgICAgICAgICAgICB0YWJsZTogdGFibGUuc3BsaWNlKDAsIGkpCisgICAgICAgIH07Cisg
ICAgICAgIGZyb21MaXN0UHVzaChsZWFmLCBub2Rlcyk7CisgICAgfQorCisgICAgLy8gR28gdGhy
b3VnaCBhbGwgb2YgdGhlIG5vZGVzIGFuZCBldmVudHVhbGx5IHB1c2ggdGhlbSBpbnRvIGhpZ2hl
ciBub2Rlcy4KKyAgICBmb3IgKHZhciBoID0gMDsgaCA8IG5vZGVzLmxlbmd0aCAtIDE7IGgrKykK
KyAgICB7CisgICAgICAgIGlmIChub2Rlc1toXS50YWJsZS5sZW5ndGggPiAwKQorICAgICAgICB7
CisgICAgICAgICAgICBmcm9tTGlzdFB1c2gobm9kZXNbaF0sIG5vZGVzKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHZhciBoZWFkID0gbm9kZXNbbm9kZXMubGVuZ3RoIC0gMV07CisgICAgaWYg
KGhlYWQuaGVpZ2h0ID4gMCAmJiBoZWFkLnRhYmxlLmxlbmd0aCA9PT0gMSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBoZWFkLnRhYmxlWzBdOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICByZXR1cm4gaGVhZDsKKyAgICB9Cit9CisKKy8vIFB1c2ggYSBub2RlIGludG8gYSBoaWdoZXIg
bm9kZSBhcyBhIGNoaWxkLgorZnVuY3Rpb24gZnJvbUxpc3RQdXNoKHRvUHVzaCwgbm9kZXMpCit7
CisgICAgdmFyIGggPSB0b1B1c2guaGVpZ2h0OworCisgICAgLy8gTWF5YmUgdGhlIG5vZGUgb24g
dGhpcyBoZWlnaHQgZG9lcyBub3QgZXhpc3QuCisgICAgaWYgKG5vZGVzLmxlbmd0aCA9PT0gaCkK
KyAgICB7CisgICAgICAgIHZhciBub2RlID0geworICAgICAgICAgICAgY3RvcjogJ19BcnJheScs
CisgICAgICAgICAgICBoZWlnaHQ6IGggKyAxLAorICAgICAgICAgICAgdGFibGU6IFtdLAorICAg
ICAgICAgICAgbGVuZ3RoczogW10KKyAgICAgICAgfTsKKyAgICAgICAgbm9kZXMucHVzaChub2Rl
KTsKKyAgICB9CisKKyAgICBub2Rlc1toXS50YWJsZS5wdXNoKHRvUHVzaCk7CisgICAgdmFyIGxl
biA9IGxlbmd0aCh0b1B1c2gpOworICAgIGlmIChub2Rlc1toXS5sZW5ndGhzLmxlbmd0aCA+IDAp
CisgICAgeworICAgICAgICBsZW4gKz0gbm9kZXNbaF0ubGVuZ3Roc1tub2Rlc1toXS5sZW5ndGhz
Lmxlbmd0aCAtIDFdOworICAgIH0KKyAgICBub2Rlc1toXS5sZW5ndGhzLnB1c2gobGVuKTsKKwor
ICAgIGlmIChub2Rlc1toXS50YWJsZS5sZW5ndGggPT09IE0pCisgICAgeworICAgICAgICBmcm9t
TGlzdFB1c2gobm9kZXNbaF0sIG5vZGVzKTsKKyAgICAgICAgbm9kZXNbaF0gPSB7CisgICAgICAg
ICAgICBjdG9yOiAnX0FycmF5JywKKyAgICAgICAgICAgIGhlaWdodDogaCArIDEsCisgICAgICAg
ICAgICB0YWJsZTogW10sCisgICAgICAgICAgICBsZW5ndGhzOiBbXQorICAgICAgICB9OworICAg
IH0KK30KKworLy8gUHVzaGVzIGFuIGl0ZW0gdmlhIHB1c2hfIHRvIHRoZSBib3R0b20gcmlnaHQg
b2YgYSB0cmVlLgorZnVuY3Rpb24gcHVzaChpdGVtLCBhKQoreworICAgIHZhciBwdXNoZWQgPSBw
dXNoXyhpdGVtLCBhKTsKKyAgICBpZiAocHVzaGVkICE9PSBudWxsKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHB1c2hlZDsKKyAgICB9CisKKyAgICB2YXIgbmV3VHJlZSA9IGNyZWF0ZShpdGVtLCBh
LmhlaWdodCk7CisgICAgcmV0dXJuIHNpYmxpc2UoYSwgbmV3VHJlZSk7Cit9CisKKy8vIFJlY3Vy
c2l2ZWx5IHRyaWVzIHRvIHB1c2ggYW4gaXRlbSB0byB0aGUgYm90dG9tLXJpZ2h0IG1vc3QKKy8v
IHRyZWUgcG9zc2libGUuIElmIHRoZXJlIGlzIG5vIHNwYWNlIGxlZnQgZm9yIHRoZSBpdGVtLAor
Ly8gbnVsbCB3aWxsIGJlIHJldHVybmVkLgorZnVuY3Rpb24gcHVzaF8oaXRlbSwgYSkKK3sKKyAg
ICAvLyBIYW5kbGUgcmVzdXJzaW9uIHN0b3AgYXQgbGVhZiBsZXZlbC4KKyAgICBpZiAoYS5oZWln
aHQgPT09IDApCisgICAgeworICAgICAgICBpZiAoYS50YWJsZS5sZW5ndGggPCBNKQorICAgICAg
ICB7CisgICAgICAgICAgICB2YXIgbmV3QSA9IHsKKyAgICAgICAgICAgICAgICBjdG9yOiAnX0Fy
cmF5JywKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDAsCisgICAgICAgICAgICAgICAgdGFibGU6
IGEudGFibGUuc2xpY2UoKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIG5ld0EudGFibGUu
cHVzaChpdGVtKTsKKyAgICAgICAgICAgIHJldHVybiBuZXdBOworICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gUmVjdXJzaXZlbHkgcHVzaAorICAgIHZhciBwdXNoZWQgPSBwdXNoXyhpdGVt
LCBib3RSaWdodChhKSk7CisKKyAgICAvLyBUaGVyZSB3YXMgc3BhY2UgaW4gdGhlIGJvdHRvbSBy
aWdodCB0cmVlLCBzbyB0aGUgc2xvdCB3aWxsCisgICAgLy8gYmUgdXBkYXRlZC4KKyAgICBpZiAo
cHVzaGVkICE9PSBudWxsKQorICAgIHsKKyAgICAgICAgdmFyIG5ld0EgPSBub2RlQ29weShhKTsK
KyAgICAgICAgbmV3QS50YWJsZVtuZXdBLnRhYmxlLmxlbmd0aCAtIDFdID0gcHVzaGVkOworICAg
ICAgICBuZXdBLmxlbmd0aHNbbmV3QS5sZW5ndGhzLmxlbmd0aCAtIDFdKys7CisgICAgICAgIHJl
dHVybiBuZXdBOworICAgIH0KKworICAgIC8vIFdoZW4gdGhlcmUgd2FzIG5vIHNwYWNlIGxlZnQs
IGNoZWNrIGlmIHRoZXJlIGlzIHNwYWNlIGxlZnQKKyAgICAvLyBmb3IgYSBuZXcgc2xvdCB3aXRo
IGEgdHJlZSB3aGljaCBjb250YWlucyBvbmx5IHRoZSBpdGVtCisgICAgLy8gYXQgdGhlIGJvdHRv
bS4KKyAgICBpZiAoYS50YWJsZS5sZW5ndGggPCBNKQorICAgIHsKKyAgICAgICAgdmFyIG5ld1Ns
b3QgPSBjcmVhdGUoaXRlbSwgYS5oZWlnaHQgLSAxKTsKKyAgICAgICAgdmFyIG5ld0EgPSBub2Rl
Q29weShhKTsKKyAgICAgICAgbmV3QS50YWJsZS5wdXNoKG5ld1Nsb3QpOworICAgICAgICBuZXdB
Lmxlbmd0aHMucHVzaChuZXdBLmxlbmd0aHNbbmV3QS5sZW5ndGhzLmxlbmd0aCAtIDFdICsgbGVu
Z3RoKG5ld1Nsb3QpKTsKKyAgICAgICAgcmV0dXJuIG5ld0E7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KKworLy8gQ29udmVydHMgYW4gYXJy
YXkgaW50byBhIGxpc3Qgb2YgZWxlbWVudHMuCitmdW5jdGlvbiB0b0xpc3QoYSkKK3sKKyAgICBy
ZXR1cm4gdG9MaXN0XyhfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5OaWwsIGEpOworfQorCitm
dW5jdGlvbiB0b0xpc3RfKGxpc3QsIGEpCit7CisgICAgZm9yICh2YXIgaSA9IGEudGFibGUubGVu
Z3RoIC0gMTsgaSA+PSAwOyBpLS0pCisgICAgeworICAgICAgICBsaXN0ID0KKyAgICAgICAgICAg
IGEuaGVpZ2h0ID09PSAwCisgICAgICAgICAgICAgICAgPyBfZWxtX2xhbmckY29yZSROYXRpdmVf
TGlzdC5Db25zKGEudGFibGVbaV0sIGxpc3QpCisgICAgICAgICAgICAgICAgOiB0b0xpc3RfKGxp
c3QsIGEudGFibGVbaV0pOworICAgIH0KKyAgICByZXR1cm4gbGlzdDsKK30KKworLy8gTWFwcyBh
IGZ1bmN0aW9uIG92ZXIgdGhlIGVsZW1lbnRzIG9mIGFuIGFycmF5LgorZnVuY3Rpb24gbWFwKGYs
IGEpCit7CisgICAgdmFyIG5ld0EgPSB7CisgICAgICAgIGN0b3I6ICdfQXJyYXknLAorICAgICAg
ICBoZWlnaHQ6IGEuaGVpZ2h0LAorICAgICAgICB0YWJsZTogbmV3IEFycmF5KGEudGFibGUubGVu
Z3RoKQorICAgIH07CisgICAgaWYgKGEuaGVpZ2h0ID4gMCkKKyAgICB7CisgICAgICAgIG5ld0Eu
bGVuZ3RocyA9IGEubGVuZ3RoczsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLnRh
YmxlLmxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgbmV3QS50YWJsZVtpXSA9CisgICAgICAg
ICAgICBhLmhlaWdodCA9PT0gMAorICAgICAgICAgICAgICAgID8gZihhLnRhYmxlW2ldKQorICAg
ICAgICAgICAgICAgIDogbWFwKGYsIGEudGFibGVbaV0pOworICAgIH0KKyAgICByZXR1cm4gbmV3
QTsKK30KKworLy8gTWFwcyBhIGZ1bmN0aW9uIG92ZXIgdGhlIGVsZW1lbnRzIHdpdGggdGhlaXIg
aW5kZXggYXMgZmlyc3QgYXJndW1lbnQuCitmdW5jdGlvbiBpbmRleGVkTWFwKGYsIGEpCit7Cisg
ICAgcmV0dXJuIGluZGV4ZWRNYXBfKGYsIGEsIDApOworfQorCitmdW5jdGlvbiBpbmRleGVkTWFw
XyhmLCBhLCBmcm9tKQoreworICAgIHZhciBuZXdBID0geworICAgICAgICBjdG9yOiAnX0FycmF5
JywKKyAgICAgICAgaGVpZ2h0OiBhLmhlaWdodCwKKyAgICAgICAgdGFibGU6IG5ldyBBcnJheShh
LnRhYmxlLmxlbmd0aCkKKyAgICB9OworICAgIGlmIChhLmhlaWdodCA+IDApCisgICAgeworICAg
ICAgICBuZXdBLmxlbmd0aHMgPSBhLmxlbmd0aHM7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgYS50YWJsZS5sZW5ndGg7IGkrKykKKyAgICB7CisgICAgICAgIG5ld0EudGFibGVbaV0g
PQorICAgICAgICAgICAgYS5oZWlnaHQgPT09IDAKKyAgICAgICAgICAgICAgICA/IEEyKGYsIGZy
b20gKyBpLCBhLnRhYmxlW2ldKQorICAgICAgICAgICAgICAgIDogaW5kZXhlZE1hcF8oZiwgYS50
YWJsZVtpXSwgaSA9PSAwID8gZnJvbSA6IGZyb20gKyBhLmxlbmd0aHNbaSAtIDFdKTsKKyAgICB9
CisgICAgcmV0dXJuIG5ld0E7Cit9CisKK2Z1bmN0aW9uIGZvbGRsKGYsIGIsIGEpCit7CisgICAg
aWYgKGEuaGVpZ2h0ID09PSAwKQorICAgIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBh
LnRhYmxlLmxlbmd0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBiID0gQTIoZiwgYS50
YWJsZVtpXSwgYik7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBhLnRhYmxlLmxlbmd0aDsgaSsrKQorICAgICAgICB7CisgICAg
ICAgICAgICBiID0gZm9sZGwoZiwgYiwgYS50YWJsZVtpXSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIGI7Cit9CisKK2Z1bmN0aW9uIGZvbGRyKGYsIGIsIGEpCit7CisgICAgaWYgKGEu
aGVpZ2h0ID09PSAwKQorICAgIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IGEudGFibGUubGVuZ3Ro
OyBpLS07ICkKKyAgICAgICAgeworICAgICAgICAgICAgYiA9IEEyKGYsIGEudGFibGVbaV0sIGIp
OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZvciAodmFyIGkg
PSBhLnRhYmxlLmxlbmd0aDsgaS0tOyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGIgPSBmb2xk
cihmLCBiLCBhLnRhYmxlW2ldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gYjsKK30K
KworLy8gVE9ETzogY3VycmVudGx5LCBpdCBzbGljZXMgdGhlIHJpZ2h0LCB0aGVuIHRoZSBsZWZ0
LiBUaGlzIGNhbiBiZQorLy8gb3B0aW1pemVkLgorZnVuY3Rpb24gc2xpY2UoZnJvbSwgdG8sIGEp
Cit7CisgICAgaWYgKGZyb20gPCAwKQorICAgIHsKKyAgICAgICAgZnJvbSArPSBsZW5ndGgoYSk7
CisgICAgfQorICAgIGlmICh0byA8IDApCisgICAgeworICAgICAgICB0byArPSBsZW5ndGgoYSk7
CisgICAgfQorICAgIHJldHVybiBzbGljZUxlZnQoZnJvbSwgc2xpY2VSaWdodCh0bywgYSkpOwor
fQorCitmdW5jdGlvbiBzbGljZVJpZ2h0KHRvLCBhKQoreworICAgIGlmICh0byA9PT0gbGVuZ3Ro
KGEpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGE7CisgICAgfQorCisgICAgLy8gSGFuZGxlIGxl
YWYgbGV2ZWwuCisgICAgaWYgKGEuaGVpZ2h0ID09PSAwKQorICAgIHsKKyAgICAgICAgdmFyIG5l
d0EgPSB7IGN0b3I6J19BcnJheScsIGhlaWdodDowIH07CisgICAgICAgIG5ld0EudGFibGUgPSBh
LnRhYmxlLnNsaWNlKDAsIHRvKTsKKyAgICAgICAgcmV0dXJuIG5ld0E7CisgICAgfQorCisgICAg
Ly8gU2xpY2UgdGhlIHJpZ2h0IHJlY3Vyc2l2ZWx5LgorICAgIHZhciByaWdodCA9IGdldFNsb3Qo
dG8sIGEpOworICAgIHZhciBzbGljZWQgPSBzbGljZVJpZ2h0KHRvIC0gKHJpZ2h0ID4gMCA/IGEu
bGVuZ3Roc1tyaWdodCAtIDFdIDogMCksIGEudGFibGVbcmlnaHRdKTsKKworICAgIC8vIE1heWJl
IHRoZSBhIG5vZGUgaXMgbm90IGV2ZW4gbmVlZGVkLCBhcyBzbGljZWQgY29udGFpbnMgdGhlIHdo
b2xlIHNsaWNlLgorICAgIGlmIChyaWdodCA9PT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBz
bGljZWQ7CisgICAgfQorCisgICAgLy8gQ3JlYXRlIG5ldyBub2RlLgorICAgIHZhciBuZXdBID0g
eworICAgICAgICBjdG9yOiAnX0FycmF5JywKKyAgICAgICAgaGVpZ2h0OiBhLmhlaWdodCwKKyAg
ICAgICAgdGFibGU6IGEudGFibGUuc2xpY2UoMCwgcmlnaHQpLAorICAgICAgICBsZW5ndGhzOiBh
Lmxlbmd0aHMuc2xpY2UoMCwgcmlnaHQpCisgICAgfTsKKyAgICBpZiAoc2xpY2VkLnRhYmxlLmxl
bmd0aCA+IDApCisgICAgeworICAgICAgICBuZXdBLnRhYmxlW3JpZ2h0XSA9IHNsaWNlZDsKKyAg
ICAgICAgbmV3QS5sZW5ndGhzW3JpZ2h0XSA9IGxlbmd0aChzbGljZWQpICsgKHJpZ2h0ID4gMCA/
IG5ld0EubGVuZ3Roc1tyaWdodCAtIDFdIDogMCk7CisgICAgfQorICAgIHJldHVybiBuZXdBOwor
fQorCitmdW5jdGlvbiBzbGljZUxlZnQoZnJvbSwgYSkKK3sKKyAgICBpZiAoZnJvbSA9PT0gMCkK
KyAgICB7CisgICAgICAgIHJldHVybiBhOworICAgIH0KKworICAgIC8vIEhhbmRsZSBsZWFmIGxl
dmVsLgorICAgIGlmIChhLmhlaWdodCA9PT0gMCkKKyAgICB7CisgICAgICAgIHZhciBuZXdBID0g
eyBjdG9yOidfQXJyYXknLCBoZWlnaHQ6MCB9OworICAgICAgICBuZXdBLnRhYmxlID0gYS50YWJs
ZS5zbGljZShmcm9tLCBhLnRhYmxlLmxlbmd0aCArIDEpOworICAgICAgICByZXR1cm4gbmV3QTsK
KyAgICB9CisKKyAgICAvLyBTbGljZSB0aGUgbGVmdCByZWN1cnNpdmVseS4KKyAgICB2YXIgbGVm
dCA9IGdldFNsb3QoZnJvbSwgYSk7CisgICAgdmFyIHNsaWNlZCA9IHNsaWNlTGVmdChmcm9tIC0g
KGxlZnQgPiAwID8gYS5sZW5ndGhzW2xlZnQgLSAxXSA6IDApLCBhLnRhYmxlW2xlZnRdKTsKKwor
ICAgIC8vIE1heWJlIHRoZSBhIG5vZGUgaXMgbm90IGV2ZW4gbmVlZGVkLCBhcyBzbGljZWQgY29u
dGFpbnMgdGhlIHdob2xlIHNsaWNlLgorICAgIGlmIChsZWZ0ID09PSBhLnRhYmxlLmxlbmd0aCAt
IDEpCisgICAgeworICAgICAgICByZXR1cm4gc2xpY2VkOworICAgIH0KKworICAgIC8vIENyZWF0
ZSBuZXcgbm9kZS4KKyAgICB2YXIgbmV3QSA9IHsKKyAgICAgICAgY3RvcjogJ19BcnJheScsCisg
ICAgICAgIGhlaWdodDogYS5oZWlnaHQsCisgICAgICAgIHRhYmxlOiBhLnRhYmxlLnNsaWNlKGxl
ZnQsIGEudGFibGUubGVuZ3RoICsgMSksCisgICAgICAgIGxlbmd0aHM6IG5ldyBBcnJheShhLnRh
YmxlLmxlbmd0aCAtIGxlZnQpCisgICAgfTsKKyAgICBuZXdBLnRhYmxlWzBdID0gc2xpY2VkOwor
ICAgIHZhciBsZW4gPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3QS50YWJsZS5sZW5n
dGg7IGkrKykKKyAgICB7CisgICAgICAgIGxlbiArPSBsZW5ndGgobmV3QS50YWJsZVtpXSk7Cisg
ICAgICAgIG5ld0EubGVuZ3Roc1tpXSA9IGxlbjsKKyAgICB9CisKKyAgICByZXR1cm4gbmV3QTsK
K30KKworLy8gQXBwZW5kcyB0d28gdHJlZXMuCitmdW5jdGlvbiBhcHBlbmQoYSxiKQoreworICAg
IGlmIChhLnRhYmxlLmxlbmd0aCA9PT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBiOworICAg
IH0KKyAgICBpZiAoYi50YWJsZS5sZW5ndGggPT09IDApCisgICAgeworICAgICAgICByZXR1cm4g
YTsKKyAgICB9CisKKyAgICB2YXIgYyA9IGFwcGVuZF8oYSwgYik7CisKKyAgICAvLyBDaGVjayBp
ZiBib3RoIG5vZGVzIGNhbiBiZSBjcnVuc2hlZCB0b2dldGhlci4KKyAgICBpZiAoY1swXS50YWJs
ZS5sZW5ndGggKyBjWzFdLnRhYmxlLmxlbmd0aCA8PSBNKQorICAgIHsKKyAgICAgICAgaWYgKGNb
MF0udGFibGUubGVuZ3RoID09PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gY1sx
XTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY1sxXS50YWJsZS5sZW5ndGggPT09IDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjWzBdOworICAgICAgICB9CisKKyAgICAgICAgLy8g
QWRqdXN0IC50YWJsZSBhbmQgLmxlbmd0aHMKKyAgICAgICAgY1swXS50YWJsZSA9IGNbMF0udGFi
bGUuY29uY2F0KGNbMV0udGFibGUpOworICAgICAgICBpZiAoY1swXS5oZWlnaHQgPiAwKQorICAg
ICAgICB7CisgICAgICAgICAgICB2YXIgbGVuID0gbGVuZ3RoKGNbMF0pOworICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBjWzFdLmxlbmd0aHMubGVuZ3RoOyBpKyspCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY1sxXS5sZW5ndGhzW2ldICs9IGxlbjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNbMF0ubGVuZ3RocyA9IGNbMF0ubGVuZ3Rocy5jb25jYXQoY1sxXS5s
ZW5ndGhzKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBjWzBdOworICAgIH0KKworICAg
IGlmIChjWzBdLmhlaWdodCA+IDApCisgICAgeworICAgICAgICB2YXIgdG9SZW1vdmUgPSBjYWxj
VG9SZW1vdmUoYSwgYik7CisgICAgICAgIGlmICh0b1JlbW92ZSA+IEUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGMgPSBzaHVmZmxlKGNbMF0sIGNbMV0sIHRvUmVtb3ZlKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBzaWJsaXNlKGNbMF0sIGNbMV0pOworfQorCisvLyBSZXR1cm5z
IGFuIGFycmF5IG9mIHR3byBub2RlczsgcmlnaHQgYW5kIGxlZnQuIE9uZSBub2RlIF9tYXlfIGJl
IGVtcHR5LgorZnVuY3Rpb24gYXBwZW5kXyhhLCBiKQoreworICAgIGlmIChhLmhlaWdodCA9PT0g
MCAmJiBiLmhlaWdodCA9PT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBbYSwgYl07CisgICAg
fQorCisgICAgaWYgKGEuaGVpZ2h0ICE9PSAxIHx8IGIuaGVpZ2h0ICE9PSAxKQorICAgIHsKKyAg
ICAgICAgaWYgKGEuaGVpZ2h0ID09PSBiLmhlaWdodCkKKyAgICAgICAgeworICAgICAgICAgICAg
YSA9IG5vZGVDb3B5KGEpOworICAgICAgICAgICAgYiA9IG5vZGVDb3B5KGIpOworICAgICAgICAg
ICAgdmFyIGFwcGVuZGVkID0gYXBwZW5kXyhib3RSaWdodChhKSwgYm90TGVmdChiKSk7CisKKyAg
ICAgICAgICAgIGluc2VydFJpZ2h0KGEsIGFwcGVuZGVkWzFdKTsKKyAgICAgICAgICAgIGluc2Vy
dExlZnQoYiwgYXBwZW5kZWRbMF0pOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGEuaGVp
Z2h0ID4gYi5oZWlnaHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGEgPSBub2RlQ29weShhKTsK
KyAgICAgICAgICAgIHZhciBhcHBlbmRlZCA9IGFwcGVuZF8oYm90UmlnaHQoYSksIGIpOworCisg
ICAgICAgICAgICBpbnNlcnRSaWdodChhLCBhcHBlbmRlZFswXSk7CisgICAgICAgICAgICBiID0g
cGFyZW50aXNlKGFwcGVuZGVkWzFdLCBhcHBlbmRlZFsxXS5oZWlnaHQgKyAxKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGIgPSBub2RlQ29weShiKTsK
KyAgICAgICAgICAgIHZhciBhcHBlbmRlZCA9IGFwcGVuZF8oYSwgYm90TGVmdChiKSk7CisKKyAg
ICAgICAgICAgIHZhciBsZWZ0ID0gYXBwZW5kZWRbMF0udGFibGUubGVuZ3RoID09PSAwID8gMCA6
IDE7CisgICAgICAgICAgICB2YXIgcmlnaHQgPSBsZWZ0ID09PSAwID8gMSA6IDA7CisgICAgICAg
ICAgICBpbnNlcnRMZWZ0KGIsIGFwcGVuZGVkW2xlZnRdKTsKKyAgICAgICAgICAgIGEgPSBwYXJl
bnRpc2UoYXBwZW5kZWRbcmlnaHRdLCBhcHBlbmRlZFtyaWdodF0uaGVpZ2h0ICsgMSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBDaGVjayBpZiBiYWxhbmNpbmcgaXMgbmVlZGVkIGFuZCBy
ZXR1cm4gYmFzZWQgb24gdGhhdC4KKyAgICBpZiAoYS50YWJsZS5sZW5ndGggPT09IDAgfHwgYi50
YWJsZS5sZW5ndGggPT09IDApCisgICAgeworICAgICAgICByZXR1cm4gW2EsIGJdOworICAgIH0K
KworICAgIHZhciB0b1JlbW92ZSA9IGNhbGNUb1JlbW92ZShhLCBiKTsKKyAgICBpZiAodG9SZW1v
dmUgPD0gRSkKKyAgICB7CisgICAgICAgIHJldHVybiBbYSwgYl07CisgICAgfQorICAgIHJldHVy
biBzaHVmZmxlKGEsIGIsIHRvUmVtb3ZlKTsKK30KKworLy8gSGVscGVyZnVuY3Rpb25zIGZvciBh
cHBlbmRfLiBSZXBsYWNlcyBhIGNoaWxkIG5vZGUgYXQgdGhlIHNpZGUgb2YgdGhlIHBhcmVudC4K
K2Z1bmN0aW9uIGluc2VydFJpZ2h0KHBhcmVudCwgbm9kZSkKK3sKKyAgICB2YXIgaW5kZXggPSBw
YXJlbnQudGFibGUubGVuZ3RoIC0gMTsKKyAgICBwYXJlbnQudGFibGVbaW5kZXhdID0gbm9kZTsK
KyAgICBwYXJlbnQubGVuZ3Roc1tpbmRleF0gPSBsZW5ndGgobm9kZSk7CisgICAgcGFyZW50Lmxl
bmd0aHNbaW5kZXhdICs9IGluZGV4ID4gMCA/IHBhcmVudC5sZW5ndGhzW2luZGV4IC0gMV0gOiAw
OworfQorCitmdW5jdGlvbiBpbnNlcnRMZWZ0KHBhcmVudCwgbm9kZSkKK3sKKyAgICBpZiAobm9k
ZS50YWJsZS5sZW5ndGggPiAwKQorICAgIHsKKyAgICAgICAgcGFyZW50LnRhYmxlWzBdID0gbm9k
ZTsKKyAgICAgICAgcGFyZW50Lmxlbmd0aHNbMF0gPSBsZW5ndGgobm9kZSk7CisKKyAgICAgICAg
dmFyIGxlbiA9IGxlbmd0aChwYXJlbnQudGFibGVbMF0pOworICAgICAgICBmb3IgKHZhciBpID0g
MTsgaSA8IHBhcmVudC5sZW5ndGhzLmxlbmd0aDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAg
ICBsZW4gKz0gbGVuZ3RoKHBhcmVudC50YWJsZVtpXSk7CisgICAgICAgICAgICBwYXJlbnQubGVu
Z3Roc1tpXSA9IGxlbjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBwYXJlbnQudGFibGUuc2hpZnQoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBwYXJl
bnQubGVuZ3Rocy5sZW5ndGg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgcGFyZW50Lmxl
bmd0aHNbaV0gPSBwYXJlbnQubGVuZ3Roc1tpXSAtIHBhcmVudC5sZW5ndGhzWzBdOworICAgICAg
ICB9CisgICAgICAgIHBhcmVudC5sZW5ndGhzLnNoaWZ0KCk7CisgICAgfQorfQorCisvLyBSZXR1
cm5zIHRoZSBleHRyYSBzZWFyY2ggc3RlcHMgZm9yIEUuIFJlZmVyIHRvIHRoZSBwYXBlci4KK2Z1
bmN0aW9uIGNhbGNUb1JlbW92ZShhLCBiKQoreworICAgIHZhciBzdWJMZW5ndGhzID0gMDsKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGEudGFibGUubGVuZ3RoOyBpKyspCisgICAgeworICAgICAg
ICBzdWJMZW5ndGhzICs9IGEudGFibGVbaV0udGFibGUubGVuZ3RoOworICAgIH0KKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGIudGFibGUubGVuZ3RoOyBpKyspCisgICAgeworICAgICAgICBzdWJM
ZW5ndGhzICs9IGIudGFibGVbaV0udGFibGUubGVuZ3RoOworICAgIH0KKworICAgIHZhciB0b1Jl
bW92ZSA9IGEudGFibGUubGVuZ3RoICsgYi50YWJsZS5sZW5ndGg7CisgICAgcmV0dXJuIHRvUmVt
b3ZlIC0gKE1hdGguZmxvb3IoKHN1Ykxlbmd0aHMgLSAxKSAvIE0pICsgMSk7Cit9CisKKy8vIGdl
dDIsIHNldDIgYW5kIHNhdmVTbG90IGFyZSBoZWxwZXJzIGZvciBhY2Nlc3NpbmcgZWxlbWVudHMg
b3ZlciB0d28gYXJyYXlzLgorZnVuY3Rpb24gZ2V0MihhLCBiLCBpbmRleCkKK3sKKyAgICByZXR1
cm4gaW5kZXggPCBhLmxlbmd0aAorICAgICAgICA/IGFbaW5kZXhdCisgICAgICAgIDogYltpbmRl
eCAtIGEubGVuZ3RoXTsKK30KKworZnVuY3Rpb24gc2V0MihhLCBiLCBpbmRleCwgdmFsdWUpCit7
CisgICAgaWYgKGluZGV4IDwgYS5sZW5ndGgpCisgICAgeworICAgICAgICBhW2luZGV4XSA9IHZh
bHVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiW2luZGV4IC0gYS5sZW5ndGhd
ID0gdmFsdWU7CisgICAgfQorfQorCitmdW5jdGlvbiBzYXZlU2xvdChhLCBiLCBpbmRleCwgc2xv
dCkKK3sKKyAgICBzZXQyKGEudGFibGUsIGIudGFibGUsIGluZGV4LCBzbG90KTsKKworICAgIHZh
ciBsID0gKGluZGV4ID09PSAwIHx8IGluZGV4ID09PSBhLmxlbmd0aHMubGVuZ3RoKQorICAgICAg
ICA/IDAKKyAgICAgICAgOiBnZXQyKGEubGVuZ3RocywgYS5sZW5ndGhzLCBpbmRleCAtIDEpOwor
CisgICAgc2V0MihhLmxlbmd0aHMsIGIubGVuZ3RocywgaW5kZXgsIGwgKyBsZW5ndGgoc2xvdCkp
OworfQorCisvLyBDcmVhdGVzIGEgbm9kZSBvciBsZWFmIHdpdGggYSBnaXZlbiBsZW5ndGggYXQg
dGhlaXIgYXJyYXlzIGZvciBwZXJmb21hbmNlLgorLy8gSXMgb25seSB1c2VkIGJ5IHNodWZmbGUu
CitmdW5jdGlvbiBjcmVhdGVOb2RlKGgsIGxlbmd0aCkKK3sKKyAgICBpZiAobGVuZ3RoIDwgMCkK
KyAgICB7CisgICAgICAgIGxlbmd0aCA9IDA7CisgICAgfQorICAgIHZhciBhID0geworICAgICAg
ICBjdG9yOiAnX0FycmF5JywKKyAgICAgICAgaGVpZ2h0OiBoLAorICAgICAgICB0YWJsZTogbmV3
IEFycmF5KGxlbmd0aCkKKyAgICB9OworICAgIGlmIChoID4gMCkKKyAgICB7CisgICAgICAgIGEu
bGVuZ3RocyA9IG5ldyBBcnJheShsZW5ndGgpOworICAgIH0KKyAgICByZXR1cm4gYTsKK30KKwor
Ly8gUmV0dXJucyBhbiBhcnJheSBvZiB0d28gYmFsYW5jZWQgbm9kZXMuCitmdW5jdGlvbiBzaHVm
ZmxlKGEsIGIsIHRvUmVtb3ZlKQoreworICAgIHZhciBuZXdBID0gY3JlYXRlTm9kZShhLmhlaWdo
dCwgTWF0aC5taW4oTSwgYS50YWJsZS5sZW5ndGggKyBiLnRhYmxlLmxlbmd0aCAtIHRvUmVtb3Zl
KSk7CisgICAgdmFyIG5ld0IgPSBjcmVhdGVOb2RlKGEuaGVpZ2h0LCBuZXdBLnRhYmxlLmxlbmd0
aCAtIChhLnRhYmxlLmxlbmd0aCArIGIudGFibGUubGVuZ3RoIC0gdG9SZW1vdmUpKTsKKworICAg
IC8vIFNraXAgdGhlIHNsb3RzIHdpdGggc2l6ZSBNLiBNb3JlIHByZWNpc2U6IGNvcHkgdGhlIHNs
b3QgcmVmZXJlbmNlcworICAgIC8vIHRvIHRoZSBuZXcgbm9kZQorICAgIHZhciByZWFkID0gMDsK
KyAgICB3aGlsZSAoZ2V0MihhLnRhYmxlLCBiLnRhYmxlLCByZWFkKS50YWJsZS5sZW5ndGggJSBN
ID09PSAwKQorICAgIHsKKyAgICAgICAgc2V0MihuZXdBLnRhYmxlLCBuZXdCLnRhYmxlLCByZWFk
LCBnZXQyKGEudGFibGUsIGIudGFibGUsIHJlYWQpKTsKKyAgICAgICAgc2V0MihuZXdBLmxlbmd0
aHMsIG5ld0IubGVuZ3RocywgcmVhZCwgZ2V0MihhLmxlbmd0aHMsIGIubGVuZ3RocywgcmVhZCkp
OworICAgICAgICByZWFkKys7CisgICAgfQorCisgICAgLy8gUHVsbGluZyBpdGVtcyBmcm9tIGxl
ZnQgdG8gcmlnaHQsIGNhY2hpbmcgaW4gYSBzbG90IGJlZm9yZSB3cml0aW5nCisgICAgLy8gaXQg
aW50byB0aGUgbmV3IG5vZGVzLgorICAgIHZhciB3cml0ZSA9IHJlYWQ7CisgICAgdmFyIHNsb3Qg
PSBuZXcgY3JlYXRlTm9kZShhLmhlaWdodCAtIDEsIDApOworICAgIHZhciBmcm9tID0gMDsKKwor
ICAgIC8vIElmIHRoZSBjdXJyZW50IHNsb3QgaXMgc3RpbGwgY29udGFpbmluZyBkYXRhLCB0aGVu
IHRoZXJlIHdpbGwgYmUgYXQKKyAgICAvLyBsZWFzdCBvbmUgbW9yZSB3cml0ZSwgc28gd2UgZG8g
bm90IGJyZWFrIHRoaXMgbG9vcCB5ZXQuCisgICAgd2hpbGUgKHJlYWQgLSB3cml0ZSAtIChzbG90
LnRhYmxlLmxlbmd0aCA+IDAgPyAxIDogMCkgPCB0b1JlbW92ZSkKKyAgICB7CisgICAgICAgIC8v
IEZpbmQgb3V0IHRoZSBtYXggcG9zc2libGUgaXRlbXMgZm9yIGNvcHlpbmcuCisgICAgICAgIHZh
ciBzb3VyY2UgPSBnZXQyKGEudGFibGUsIGIudGFibGUsIHJlYWQpOworICAgICAgICB2YXIgdG8g
PSBNYXRoLm1pbihNIC0gc2xvdC50YWJsZS5sZW5ndGgsIHNvdXJjZS50YWJsZS5sZW5ndGgpOwor
CisgICAgICAgIC8vIENvcHkgYW5kIGFkanVzdCBzaXplIHRhYmxlLgorICAgICAgICBzbG90LnRh
YmxlID0gc2xvdC50YWJsZS5jb25jYXQoc291cmNlLnRhYmxlLnNsaWNlKGZyb20sIHRvKSk7Cisg
ICAgICAgIGlmIChzbG90LmhlaWdodCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBs
ZW4gPSBzbG90Lmxlbmd0aHMubGVuZ3RoOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IGxlbjsg
aSA8IGxlbiArIHRvIC0gZnJvbTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHNsb3QubGVuZ3Roc1tpXSA9IGxlbmd0aChzbG90LnRhYmxlW2ldKTsKKyAgICAgICAgICAgICAg
ICBzbG90Lmxlbmd0aHNbaV0gKz0gKGkgPiAwID8gc2xvdC5sZW5ndGhzW2kgLSAxXSA6IDApOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnJvbSArPSB0bzsKKworICAgICAg
ICAvLyBPbmx5IHByb2NlZWQgdG8gbmV4dCBzbG90c1tpXSBpZiB0aGUgY3VycmVudCBvbmUgd2Fz
CisgICAgICAgIC8vIGZ1bGx5IGNvcGllZC4KKyAgICAgICAgaWYgKHNvdXJjZS50YWJsZS5sZW5n
dGggPD0gdG8pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlYWQrKzsgZnJvbSA9IDA7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBPbmx5IGNyZWF0ZSBhIG5ldyBzbG90IGlmIHRoZSBjdXJyZW50
IG9uZSBpcyBmaWxsZWQgdXAuCisgICAgICAgIGlmIChzbG90LnRhYmxlLmxlbmd0aCA9PT0gTSkK
KyAgICAgICAgeworICAgICAgICAgICAgc2F2ZVNsb3QobmV3QSwgbmV3Qiwgd3JpdGUsIHNsb3Qp
OworICAgICAgICAgICAgc2xvdCA9IGNyZWF0ZU5vZGUoYS5oZWlnaHQgLSAxLCAwKTsKKyAgICAg
ICAgICAgIHdyaXRlKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDbGVhbnVwIGFmdGVy
IHRoZSBsb29wLiBDb3B5IHRoZSBsYXN0IHNsb3QgaW50byB0aGUgbmV3IG5vZGVzLgorICAgIGlm
IChzbG90LnRhYmxlLmxlbmd0aCA+IDApCisgICAgeworICAgICAgICBzYXZlU2xvdChuZXdBLCBu
ZXdCLCB3cml0ZSwgc2xvdCk7CisgICAgICAgIHdyaXRlKys7CisgICAgfQorCisgICAgLy8gU2hp
ZnQgdGhlIHVudG91Y2hlZCBzbG90cyB0byB0aGUgbGVmdAorICAgIHdoaWxlIChyZWFkIDwgYS50
YWJsZS5sZW5ndGggKyBiLnRhYmxlLmxlbmd0aCApCisgICAgeworICAgICAgICBzYXZlU2xvdChu
ZXdBLCBuZXdCLCB3cml0ZSwgZ2V0MihhLnRhYmxlLCBiLnRhYmxlLCByZWFkKSk7CisgICAgICAg
IHJlYWQrKzsKKyAgICAgICAgd3JpdGUrKzsKKyAgICB9CisKKyAgICByZXR1cm4gW25ld0EsIG5l
d0JdOworfQorCisvLyBOYXZpZ2F0aW9uIGZ1bmN0aW9ucworZnVuY3Rpb24gYm90UmlnaHQoYSkK
K3sKKyAgICByZXR1cm4gYS50YWJsZVthLnRhYmxlLmxlbmd0aCAtIDFdOworfQorZnVuY3Rpb24g
Ym90TGVmdChhKQoreworICAgIHJldHVybiBhLnRhYmxlWzBdOworfQorCisvLyBDb3BpZXMgYSBu
b2RlIGZvciB1cGRhdGluZy4gTm90ZSB0aGF0IHlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGlmCisv
LyBvbmx5IHVwZGF0aW5nIG9ubHkgb25lIG9mICJ0YWJsZSIgb3IgImxlbmd0aHMiIGZvciBwZXJm
b3JtYW5jZSByZWFzb25zLgorZnVuY3Rpb24gbm9kZUNvcHkoYSkKK3sKKyAgICB2YXIgbmV3QSA9
IHsKKyAgICAgICAgY3RvcjogJ19BcnJheScsCisgICAgICAgIGhlaWdodDogYS5oZWlnaHQsCisg
ICAgICAgIHRhYmxlOiBhLnRhYmxlLnNsaWNlKCkKKyAgICB9OworICAgIGlmIChhLmhlaWdodCA+
IDApCisgICAgeworICAgICAgICBuZXdBLmxlbmd0aHMgPSBhLmxlbmd0aHMuc2xpY2UoKTsKKyAg
ICB9CisgICAgcmV0dXJuIG5ld0E7Cit9CisKKy8vIFJldHVybnMgaG93IG1hbnkgaXRlbXMgYXJl
IGluIHRoZSB0cmVlLgorZnVuY3Rpb24gbGVuZ3RoKGFycmF5KQoreworICAgIGlmIChhcnJheS5o
ZWlnaHQgPT09IDApCisgICAgeworICAgICAgICByZXR1cm4gYXJyYXkudGFibGUubGVuZ3RoOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gYXJyYXkubGVuZ3Roc1thcnJh
eS5sZW5ndGhzLmxlbmd0aCAtIDFdOworICAgIH0KK30KKworLy8gQ2FsY3VsYXRlcyBpbiB3aGlj
aCBzbG90IG9mICJ0YWJsZSIgdGhlIGl0ZW0gcHJvYmFibHkgaXMsIHRoZW4KKy8vIGZpbmQgdGhl
IGV4YWN0IHNsb3QgdmlhIGZvcndhcmQgc2VhcmNoaW5nIGluICAibGVuZ3RocyIuIFJldHVybnMg
dGhlIGluZGV4LgorZnVuY3Rpb24gZ2V0U2xvdChpLCBhKQoreworICAgIHZhciBzbG90ID0gaSA+
PiAoNSAqIGEuaGVpZ2h0KTsKKyAgICB3aGlsZSAoYS5sZW5ndGhzW3Nsb3RdIDw9IGkpCisgICAg
eworICAgICAgICBzbG90Kys7CisgICAgfQorICAgIHJldHVybiBzbG90OworfQorCisvLyBSZWN1
cnNpdmVseSBjcmVhdGVzIGEgdHJlZSB3aXRoIGEgZ2l2ZW4gaGVpZ2h0IGNvbnRhaW5pbmcKKy8v
IG9ubHkgdGhlIGdpdmVuIGl0ZW0uCitmdW5jdGlvbiBjcmVhdGUoaXRlbSwgaCkKK3sKKyAgICBp
ZiAoaCA9PT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBjdG9yOiAn
X0FycmF5JywKKyAgICAgICAgICAgIGhlaWdodDogMCwKKyAgICAgICAgICAgIHRhYmxlOiBbaXRl
bV0KKyAgICAgICAgfTsKKyAgICB9CisgICAgcmV0dXJuIHsKKyAgICAgICAgY3RvcjogJ19BcnJh
eScsCisgICAgICAgIGhlaWdodDogaCwKKyAgICAgICAgdGFibGU6IFtjcmVhdGUoaXRlbSwgaCAt
IDEpXSwKKyAgICAgICAgbGVuZ3RoczogWzFdCisgICAgfTsKK30KKworLy8gUmVjdXJzaXZlbHkg
Y3JlYXRlcyBhIHRyZWUgdGhhdCBjb250YWlucyB0aGUgZ2l2ZW4gdHJlZS4KK2Z1bmN0aW9uIHBh
cmVudGlzZSh0cmVlLCBoKQoreworICAgIGlmIChoID09PSB0cmVlLmhlaWdodCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0cmVlOworICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAgIGN0b3I6
ICdfQXJyYXknLAorICAgICAgICBoZWlnaHQ6IGgsCisgICAgICAgIHRhYmxlOiBbcGFyZW50aXNl
KHRyZWUsIGggLSAxKV0sCisgICAgICAgIGxlbmd0aHM6IFtsZW5ndGgodHJlZSldCisgICAgfTsK
K30KKworLy8gRW1waGFzaXplcyBibG9vZCBicm90aGVyaG9vZCBiZW5lYXRoIHR3byB0cmVlcy4K
K2Z1bmN0aW9uIHNpYmxpc2UoYSwgYikKK3sKKyAgICByZXR1cm4geworICAgICAgICBjdG9yOiAn
X0FycmF5JywKKyAgICAgICAgaGVpZ2h0OiBhLmhlaWdodCArIDEsCisgICAgICAgIHRhYmxlOiBb
YSwgYl0sCisgICAgICAgIGxlbmd0aHM6IFtsZW5ndGgoYSksIGxlbmd0aChhKSArIGxlbmd0aChi
KV0KKyAgICB9OworfQorCitmdW5jdGlvbiB0b0pTQXJyYXkoYSkKK3sKKyAgICB2YXIganNBcnJh
eSA9IG5ldyBBcnJheShsZW5ndGgoYSkpOworICAgIHRvSlNBcnJheV8oanNBcnJheSwgMCwgYSk7
CisgICAgcmV0dXJuIGpzQXJyYXk7Cit9CisKK2Z1bmN0aW9uIHRvSlNBcnJheV8oanNBcnJheSwg
aSwgYSkKK3sKKyAgICBmb3IgKHZhciB0ID0gMDsgdCA8IGEudGFibGUubGVuZ3RoOyB0KyspCisg
ICAgeworICAgICAgICBpZiAoYS5oZWlnaHQgPT09IDApCisgICAgICAgIHsKKyAgICAgICAgICAg
IGpzQXJyYXlbaSArIHRdID0gYS50YWJsZVt0XTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHZhciBpbmMgPSB0ID09PSAwID8gMCA6IGEubGVuZ3Roc1t0
IC0gMV07CisgICAgICAgICAgICB0b0pTQXJyYXlfKGpzQXJyYXksIGkgKyBpbmMsIGEudGFibGVb
dF0pOworICAgICAgICB9CisgICAgfQorfQorCitmdW5jdGlvbiBmcm9tSlNBcnJheShqc0FycmF5
KQoreworICAgIGlmIChqc0FycmF5Lmxlbmd0aCA9PT0gMCkKKyAgICB7CisgICAgICAgIHJldHVy
biBlbXB0eTsKKyAgICB9CisgICAgdmFyIGggPSBNYXRoLmZsb29yKE1hdGgubG9nKGpzQXJyYXku
bGVuZ3RoKSAvIE1hdGgubG9nKE0pKTsKKyAgICByZXR1cm4gZnJvbUpTQXJyYXlfKGpzQXJyYXks
IGgsIDAsIGpzQXJyYXkubGVuZ3RoKTsKK30KKworZnVuY3Rpb24gZnJvbUpTQXJyYXlfKGpzQXJy
YXksIGgsIGZyb20sIHRvKQoreworICAgIGlmIChoID09PSAwKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgIGN0b3I6ICdfQXJyYXknLAorICAgICAgICAgICAgaGVpZ2h0OiAw
LAorICAgICAgICAgICAgdGFibGU6IGpzQXJyYXkuc2xpY2UoZnJvbSwgdG8pCisgICAgICAgIH07
CisgICAgfQorCisgICAgdmFyIHN0ZXAgPSBNYXRoLnBvdyhNLCBoKTsKKyAgICB2YXIgdGFibGUg
PSBuZXcgQXJyYXkoTWF0aC5jZWlsKCh0byAtIGZyb20pIC8gc3RlcCkpOworICAgIHZhciBsZW5n
dGhzID0gbmV3IEFycmF5KHRhYmxlLmxlbmd0aCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0
YWJsZS5sZW5ndGg7IGkrKykKKyAgICB7CisgICAgICAgIHRhYmxlW2ldID0gZnJvbUpTQXJyYXlf
KGpzQXJyYXksIGggLSAxLCBmcm9tICsgKGkgKiBzdGVwKSwgTWF0aC5taW4oZnJvbSArICgoaSAr
IDEpICogc3RlcCksIHRvKSk7CisgICAgICAgIGxlbmd0aHNbaV0gPSBsZW5ndGgodGFibGVbaV0p
ICsgKGkgPiAwID8gbGVuZ3Roc1tpIC0gMV0gOiAwKTsKKyAgICB9CisgICAgcmV0dXJuIHsKKyAg
ICAgICAgY3RvcjogJ19BcnJheScsCisgICAgICAgIGhlaWdodDogaCwKKyAgICAgICAgdGFibGU6
IHRhYmxlLAorICAgICAgICBsZW5ndGhzOiBsZW5ndGhzCisgICAgfTsKK30KKworcmV0dXJuIHsK
KyAgICBlbXB0eTogZW1wdHksCisgICAgZnJvbUxpc3Q6IGZyb21MaXN0LAorICAgIHRvTGlzdDog
dG9MaXN0LAorICAgIGluaXRpYWxpemU6IEYyKGluaXRpYWxpemUpLAorICAgIGFwcGVuZDogRjIo
YXBwZW5kKSwKKyAgICBwdXNoOiBGMihwdXNoKSwKKyAgICBzbGljZTogRjMoc2xpY2UpLAorICAg
IGdldDogRjIoZ2V0KSwKKyAgICBzZXQ6IEYzKHNldCksCisgICAgbWFwOiBGMihtYXApLAorICAg
IGluZGV4ZWRNYXA6IEYyKGluZGV4ZWRNYXApLAorICAgIGZvbGRsOiBGMyhmb2xkbCksCisgICAg
Zm9sZHI6IEYzKGZvbGRyKSwKKyAgICBsZW5ndGg6IGxlbmd0aCwKKworICAgIHRvSlNBcnJheTog
dG9KU0FycmF5LAorICAgIGZyb21KU0FycmF5OiBmcm9tSlNBcnJheQorfTsKKworfSgpOwordmFy
IF9lbG1fbGFuZyRjb3JlJEFycmF5JGFwcGVuZCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9BcnJh
eS5hcHBlbmQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQXJyYXkkbGVuZ3RoID0gX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0FycmF5Lmxlbmd0aDsKK3ZhciBfZWxtX2xhbmckY29yZSRBcnJheSRpc0VtcHR5
ID0gZnVuY3Rpb24gKGFycmF5KSB7CisgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9V
dGlscy5lcSgKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkQXJyYXkkbGVuZ3RoKGFycmF5KSwKKyAg
ICAgICAgMCk7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJEFycmF5JHNsaWNlID0gX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX0FycmF5LnNsaWNlOwordmFyIF9lbG1fbGFuZyRjb3JlJEFycmF5JHNldCA9
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9BcnJheS5zZXQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQXJy
YXkkZ2V0ID0gRjIoCisgICAgZnVuY3Rpb24gKGksIGFycmF5KSB7CisgICAgICAgIHJldHVybiAo
KF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5jbXAoMCwgaSkgPCAxKSAmJiAoX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX1V0aWxzLmNtcCgKKyAgICAgICAgICAgIGksCisgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSROYXRpdmVfQXJyYXkubGVuZ3RoKGFycmF5KSkgPCAwKSkgPyBfZWxtX2xhbmck
Y29yZSRNYXliZSRKdXN0KAorICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Fy
cmF5LmdldCwgaSwgYXJyYXkpKSA6IF9lbG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmc7CisgICAg
fSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQXJyYXkkcHVzaCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9BcnJheS5wdXNoOwordmFyIF9lbG1fbGFuZyRjb3JlJEFycmF5JGVtcHR5ID0gX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX0FycmF5LmVtcHR5OwordmFyIF9lbG1fbGFuZyRjb3JlJEFycmF5JGZpbHRl
ciA9IEYyKAorICAgIGZ1bmN0aW9uIChpc09rYXksIGFycikgeworICAgICAgICB2YXIgdXBkYXRl
ID0gRjIoCisgICAgICAgICAgICBmdW5jdGlvbiAoeCwgeHMpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gaXNPa2F5KHgpID8gQTIoX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0FycmF5LnB1c2gsIHgs
IHhzKSA6IHhzOworICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBBMyhfZWxtX2xhbmck
Y29yZSROYXRpdmVfQXJyYXkuZm9sZGwsIHVwZGF0ZSwgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0Fy
cmF5LmVtcHR5LCBhcnIpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJEFycmF5JGZvbGRy
ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0FycmF5LmZvbGRyOwordmFyIF9lbG1fbGFuZyRjb3Jl
JEFycmF5JGZvbGRsID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0FycmF5LmZvbGRsOwordmFyIF9l
bG1fbGFuZyRjb3JlJEFycmF5JGluZGV4ZWRNYXAgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQXJy
YXkuaW5kZXhlZE1hcDsKK3ZhciBfZWxtX2xhbmckY29yZSRBcnJheSRtYXAgPSBfZWxtX2xhbmck
Y29yZSROYXRpdmVfQXJyYXkubWFwOwordmFyIF9lbG1fbGFuZyRjb3JlJEFycmF5JHRvSW5kZXhl
ZExpc3QgPSBmdW5jdGlvbiAoYXJyYXkpIHsKKyAgICByZXR1cm4gQTMoCisgICAgICAgIF9lbG1f
bGFuZyRjb3JlJExpc3QkbWFwMiwKKyAgICAgICAgRjIoCisgICAgICAgICAgICBmdW5jdGlvbiAo
djAsIHYxKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHtjdG9yOiAnX1R1cGxlMicsIF8wOiB2
MCwgXzE6IHYxfTsKKyAgICAgICAgICAgIH0pLAorICAgICAgICBfZWxtX2xhbmckY29yZSROYXRp
dmVfTGlzdC5yYW5nZSgKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSROYXRpdmVfQXJyYXkubGVuZ3RoKGFycmF5KSAtIDEpLAorICAgICAgICBfZWxtX2xhbmckY29y
ZSROYXRpdmVfQXJyYXkudG9MaXN0KGFycmF5KSk7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJEFy
cmF5JHRvTGlzdCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9BcnJheS50b0xpc3Q7Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkQXJyYXkkZnJvbUxpc3QgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfQXJyYXku
ZnJvbUxpc3Q7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQXJyYXkkaW5pdGlhbGl6ZSA9IF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9BcnJheS5pbml0aWFsaXplOwordmFyIF9lbG1fbGFuZyRjb3JlJEFycmF5
JHJlcGVhdCA9IEYyKAorICAgIGZ1bmN0aW9uIChuLCBlKSB7CisgICAgICAgIHJldHVybiBBMigK
KyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEFycmF5JGluaXRpYWxpemUsCisgICAgICAgICAg
ICBuLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGFsd2F5cyhlKSk7CisgICAg
fSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkQXJyYXkkQXJyYXkgPSB7Y3RvcjogJ0FycmF5J307CisK
K3ZhciBfZWxtX2xhbmckY29yZSRUYXNrJG9uRXJyb3IgPSBfZWxtX2xhbmckY29yZSROYXRpdmVf
U2NoZWR1bGVyLm9uRXJyb3I7Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuID0gX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5hbmRUaGVuOwordmFyIF9lbG1fbGFuZyRjb3Jl
JFRhc2skc3Bhd25DbWQgPSBGMigKKyAgICBmdW5jdGlvbiAocm91dGVyLCBfcDApIHsKKyAgICAg
ICAgdmFyIF9wMSA9IF9wMDsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9T
Y2hlZHVsZXIuc3Bhd24oCisgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICBfZWxtX2xh
bmckY29yZSRUYXNrJGFuZFRoZW4sCisgICAgICAgICAgICAgICAgX3AxLl8wLAorICAgICAgICAg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtJHNlbmRUb0FwcChyb3V0ZXIpKSk7CisgICAg
fSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGFzayRmYWlsID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X1NjaGVkdWxlci5mYWlsOwordmFyIF9lbG1fbGFuZyRjb3JlJFRhc2skbWFwRXJyb3IgPSBGMigK
KyAgICBmdW5jdGlvbiAoZiwgdGFzaykgeworICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSRUYXNrJG9uRXJyb3IsCisgICAgICAgICAgICB0YXNrLAorICAgICAg
ICAgICAgZnVuY3Rpb24gKGVycikgeworICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmck
Y29yZSRUYXNrJGZhaWwoCisgICAgICAgICAgICAgICAgICAgIGYoZXJyKSk7CisgICAgICAgICAg
ICB9KTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRUYXNrJHN1Y2NlZWQgPSBfZWxtX2xh
bmckY29yZSROYXRpdmVfU2NoZWR1bGVyLnN1Y2NlZWQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGFz
ayRtYXAgPSBGMigKKyAgICBmdW5jdGlvbiAoZnVuYywgdGFza0EpIHsKKyAgICAgICAgcmV0dXJu
IEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAg
ICAgdGFza0EsCisgICAgICAgICAgICBmdW5jdGlvbiAoYSkgeworICAgICAgICAgICAgICAgIHJl
dHVybiBfZWxtX2xhbmckY29yZSRUYXNrJHN1Y2NlZWQoCisgICAgICAgICAgICAgICAgICAgIGZ1
bmMoYSkpOworICAgICAgICAgICAgfSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGFz
ayRtYXAyID0gRjMoCisgICAgZnVuY3Rpb24gKGZ1bmMsIHRhc2tBLCB0YXNrQikgeworICAgICAg
ICByZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJGFuZFRoZW4sCisg
ICAgICAgICAgICB0YXNrQSwKKyAgICAgICAgICAgIGZ1bmN0aW9uIChhKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNr
JGFuZFRoZW4sCisgICAgICAgICAgICAgICAgICAgIHRhc2tCLAorICAgICAgICAgICAgICAgICAg
ICBmdW5jdGlvbiAoYikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFu
ZyRjb3JlJFRhc2skc3VjY2VlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBMihmdW5j
LCBhLCBiKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAg
fSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGFzayRtYXAzID0gRjQoCisgICAgZnVuY3Rpb24gKGZ1
bmMsIHRhc2tBLCB0YXNrQiwgdGFza0MpIHsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAgICAgdGFza0EsCisgICAg
ICAgICAgICBmdW5jdGlvbiAoYSkgeworICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAgICAg
ICAgICAgICB0YXNrQiwKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSRUYXNrJGFuZFRoZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGFza0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFRhc2sk
c3VjY2VlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEzKGZ1bmMsIGEs
IGIsIGMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRU
YXNrJG1hcDQgPSBGNSgKKyAgICBmdW5jdGlvbiAoZnVuYywgdGFza0EsIHRhc2tCLCB0YXNrQywg
dGFza0QpIHsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUk
VGFzayRhbmRUaGVuLAorICAgICAgICAgICAgdGFza0EsCisgICAgICAgICAgICBmdW5jdGlvbiAo
YSkgeworICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAgICAgICAgICAgICB0YXNrQiwKKyAg
ICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRU
YXNrJGFuZFRoZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFza0MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGMpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGFza0QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
dW5jdGlvbiAoZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBfZWxtX2xhbmckY29yZSRUYXNrJHN1Y2NlZWQoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEE0KGZ1bmMsIGEsIGIsIGMsIGQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgIH0pOwor
dmFyIF9lbG1fbGFuZyRjb3JlJFRhc2skbWFwNSA9IEY2KAorICAgIGZ1bmN0aW9uIChmdW5jLCB0
YXNrQSwgdGFza0IsIHRhc2tDLCB0YXNrRCwgdGFza0UpIHsKKyAgICAgICAgcmV0dXJuIEEyKAor
ICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAgICAgdGFz
a0EsCisgICAgICAgICAgICBmdW5jdGlvbiAoYSkgeworICAgICAgICAgICAgICAgIHJldHVybiBB
MigKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAg
ICAgICAgICAgICAgICAgICB0YXNrQiwKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJGFuZFRoZW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGFza0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24g
KGMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVu
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFza0QsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrRSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xh
bmckY29yZSRUYXNrJHN1Y2NlZWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQTUoZnVuYywgYSwgYiwgYywgZCwgZSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgIH0pOwordmFyIF9lbG1f
bGFuZyRjb3JlJFRhc2skYW5kTWFwID0gRjIoCisgICAgZnVuY3Rpb24gKHRhc2tGdW5jLCB0YXNr
VmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUk
VGFzayRhbmRUaGVuLAorICAgICAgICAgICAgdGFza0Z1bmMsCisgICAgICAgICAgICBmdW5jdGlv
biAoZnVuYykgeworICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAgICAgICAgICAgICB0YXNr
VmFsdWUsCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFRhc2skc3VjY2VlZCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmdW5jKHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgfSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGFzayRz
ZXF1ZW5jZSA9IGZ1bmN0aW9uICh0YXNrcykgeworICAgIHZhciBfcDIgPSB0YXNrczsKKyAgICBp
ZiAoX3AyLmN0b3IgPT09ICdbXScpIHsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFRh
c2skc3VjY2VlZCgKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21B
cnJheSgKKyAgICAgICAgICAgICAgICBbXSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVy
biBBMygKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRhc2skbWFwMiwKKyAgICAgICAgICAg
IEYyKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh4LCB5KSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBBMihfZWxtX2xhbmckY29yZSRMaXN0X29wc1snOjonXSwgeCwgeSk7CisgICAg
ICAgICAgICAgICAgfSksCisgICAgICAgICAgICBfcDIuXzAsCisgICAgICAgICAgICBfZWxtX2xh
bmckY29yZSRUYXNrJHNlcXVlbmNlKF9wMi5fMSkpOworICAgIH0KK307Cit2YXIgX2VsbV9sYW5n
JGNvcmUkVGFzayRvbkVmZmVjdHMgPSBGMygKKyAgICBmdW5jdGlvbiAocm91dGVyLCBjb21tYW5k
cywgc3RhdGUpIHsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkVGFzayRtYXAsCisgICAgICAgICAgICBmdW5jdGlvbiAoX3AzKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHtjdG9yOiAnX1R1cGxlMCd9OworICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
IF9lbG1fbGFuZyRjb3JlJFRhc2skc2VxdWVuY2UoCisgICAgICAgICAgICAgICAgQTIoCisgICAg
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkbWFwLAorICAgICAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSRUYXNrJHNwYXduQ21kKHJvdXRlciksCisgICAgICAgICAgICAg
ICAgICAgIGNvbW1hbmRzKSkpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJFRhc2skdG9N
YXliZSA9IGZ1bmN0aW9uICh0YXNrKSB7CisgICAgcmV0dXJuIEEyKAorICAgICAgICBfZWxtX2xh
bmckY29yZSRUYXNrJG9uRXJyb3IsCisgICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJFRhc2skbWFw
LCBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0LCB0YXNrKSwKKyAgICAgICAgZnVuY3Rpb24gKF9w
NCkgeworICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFRhc2skc3VjY2VlZChfZWxt
X2xhbmckY29yZSRNYXliZSROb3RoaW5nKTsKKyAgICAgICAgfSk7Cit9OwordmFyIF9lbG1fbGFu
ZyRjb3JlJFRhc2skZnJvbU1heWJlID0gRjIoCisgICAgZnVuY3Rpb24gKCRkZWZhdWx0LCBtYXli
ZSkgeworICAgICAgICB2YXIgX3A1ID0gbWF5YmU7CisgICAgICAgIGlmIChfcDUuY3RvciA9PT0g
J0p1c3QnKSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkVGFzayRzdWNjZWVk
KF9wNS5fMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5n
JGNvcmUkVGFzayRmYWlsKCRkZWZhdWx0KTsKKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1f
bGFuZyRjb3JlJFRhc2skdG9SZXN1bHQgPSBmdW5jdGlvbiAodGFzaykgeworICAgIHJldHVybiBB
MigKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRvbkVycm9yLAorICAgICAgICBBMihfZWxt
X2xhbmckY29yZSRUYXNrJG1hcCwgX2VsbV9sYW5nJGNvcmUkUmVzdWx0JE9rLCB0YXNrKSwKKyAg
ICAgICAgZnVuY3Rpb24gKG1zZykgeworICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3Jl
JFRhc2skc3VjY2VlZCgKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRSZXN1bHQkRXJy
KG1zZykpOworICAgICAgICB9KTsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGFzayRmcm9tUmVz
dWx0ID0gZnVuY3Rpb24gKHJlc3VsdCkgeworICAgIHZhciBfcDYgPSByZXN1bHQ7CisgICAgaWYg
KF9wNi5jdG9yID09PSAnT2snKSB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRUYXNr
JHN1Y2NlZWQoX3A2Ll8wKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gX2VsbV9sYW5n
JGNvcmUkVGFzayRmYWlsKF9wNi5fMCk7CisgICAgfQorfTsKK3ZhciBfZWxtX2xhbmckY29yZSRU
YXNrJGluaXQgPSBfZWxtX2xhbmckY29yZSRUYXNrJHN1Y2NlZWQoCisgICAge2N0b3I6ICdfVHVw
bGUwJ30pOwordmFyIF9lbG1fbGFuZyRjb3JlJFRhc2skb25TZWxmTXNnID0gRjMoCisgICAgZnVu
Y3Rpb24gKF9wOSwgX3A4LCBfcDcpIHsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFRh
c2skc3VjY2VlZCgKKyAgICAgICAgICAgIHtjdG9yOiAnX1R1cGxlMCd9KTsKKyAgICB9KTsKK3Zh
ciBfZWxtX2xhbmckY29yZSRUYXNrJGNvbW1hbmQgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfUGxh
dGZvcm0ubGVhZignVGFzaycpOwordmFyIF9lbG1fbGFuZyRjb3JlJFRhc2skVCA9IGZ1bmN0aW9u
IChhKSB7CisgICAgcmV0dXJuIHtjdG9yOiAnVCcsIF8wOiBhfTsKK307Cit2YXIgX2VsbV9sYW5n
JGNvcmUkVGFzayRwZXJmb3JtID0gRjMoCisgICAgZnVuY3Rpb24gKG9uRmFpbCwgb25TdWNjZXNz
LCB0YXNrKSB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRUYXNrJGNvbW1hbmQoCisg
ICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJFQoCisgICAgICAgICAgICAgICAgQTIoCisg
ICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRhc2skb25FcnJvciwKKyAgICAgICAg
ICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkVGFzayRtYXAsIG9uU3VjY2VzcywgdGFzayks
CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh4KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkVGFzayRzdWNjZWVkKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9uRmFpbCh4KSk7CisgICAgICAgICAgICAgICAgICAgIH0pKSk7CisgICAg
fSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGFzayRjbWRNYXAgPSBGMigKKyAgICBmdW5jdGlvbiAo
dGFnZ2VyLCBfcDEwKSB7CisgICAgICAgIHZhciBfcDExID0gX3AxMDsKKyAgICAgICAgcmV0dXJu
IF9lbG1fbGFuZyRjb3JlJFRhc2skVCgKKyAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJFRh
c2skbWFwLCB0YWdnZXIsIF9wMTEuXzApKTsKKyAgICB9KTsKK19lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9QbGF0Zm9ybS5lZmZlY3RNYW5hZ2Vyc1snVGFzayddID0ge3BrZzogJ2VsbS1sYW5nL2NvcmUn
LCBpbml0OiBfZWxtX2xhbmckY29yZSRUYXNrJGluaXQsIG9uRWZmZWN0czogX2VsbV9sYW5nJGNv
cmUkVGFzayRvbkVmZmVjdHMsIG9uU2VsZk1zZzogX2VsbV9sYW5nJGNvcmUkVGFzayRvblNlbGZN
c2csIHRhZzogJ2NtZCcsIGNtZE1hcDogX2VsbV9sYW5nJGNvcmUkVGFzayRjbWRNYXB9OworCit2
YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRmb2xkciA9IEYzKAorICAgIGZ1bmN0aW9uIChmLCBhY2Ms
IHQpIHsKKyAgICAgICAgZm9sZHI6CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAg
ICB2YXIgX3AwID0gdDsKKyAgICAgICAgICAgIGlmIChfcDAuY3RvciA9PT0gJ1JCRW1wdHlfZWxt
X2J1aWx0aW4nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGFjYzsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIF92MSA9IGYsCisgICAgICAgICAgICAgICAgICAg
IF92MiA9IEEzKAorICAgICAgICAgICAgICAgICAgICBmLAorICAgICAgICAgICAgICAgICAgICBf
cDAuXzEsCisgICAgICAgICAgICAgICAgICAgIF9wMC5fMiwKKyAgICAgICAgICAgICAgICAgICAg
QTMoX2VsbV9sYW5nJGNvcmUkRGljdCRmb2xkciwgZiwgYWNjLCBfcDAuXzQpKSwKKyAgICAgICAg
ICAgICAgICAgICAgX3YzID0gX3AwLl8zOworICAgICAgICAgICAgICAgIGYgPSBfdjE7CisgICAg
ICAgICAgICAgICAgYWNjID0gX3YyOworICAgICAgICAgICAgICAgIHQgPSBfdjM7CisgICAgICAg
ICAgICAgICAgY29udGludWUgZm9sZHI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
KTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JGtleXMgPSBmdW5jdGlvbiAoZGljdCkgeworICAg
IHJldHVybiBBMygKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCRmb2xkciwKKyAgICAgICAg
RjMoCisgICAgICAgICAgICBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwga2V5TGlzdCkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBBMihfZWxtX2xhbmckY29yZSRMaXN0X29wc1snOjonXSwga2V5LCBr
ZXlMaXN0KTsKKyAgICAgICAgICAgIH0pLAorICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVf
TGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICBbXSksCisgICAgICAgIGRpY3QpOworfTsKK3Zh
ciBfZWxtX2xhbmckY29yZSREaWN0JHZhbHVlcyA9IGZ1bmN0aW9uIChkaWN0KSB7CisgICAgcmV0
dXJuIEEzKAorICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JGZvbGRyLAorICAgICAgICBGMygK
KyAgICAgICAgICAgIGZ1bmN0aW9uIChrZXksIHZhbHVlLCB2YWx1ZUxpc3QpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGNvcmUkTGlzdF9vcHNbJzo6J10sIHZhbHVlLCB2
YWx1ZUxpc3QpOworICAgICAgICAgICAgfSksCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgIFtdKSwKKyAgICAgICAgZGljdCk7Cit9Owor
dmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkdG9MaXN0ID0gZnVuY3Rpb24gKGRpY3QpIHsKKyAgICBy
ZXR1cm4gQTMoCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkZm9sZHIsCisgICAgICAgIEYz
KAorICAgICAgICAgICAgZnVuY3Rpb24gKGtleSwgdmFsdWUsIGxpc3QpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3Rf
b3BzWyc6OiddLAorICAgICAgICAgICAgICAgICAgICB7Y3RvcjogJ19UdXBsZTInLCBfMDoga2V5
LCBfMTogdmFsdWV9LAorICAgICAgICAgICAgICAgICAgICBsaXN0KTsKKyAgICAgICAgICAgIH0p
LAorICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAg
ICAgICBbXSksCisgICAgICAgIGRpY3QpOworfTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JGZv
bGRsID0gRjMoCisgICAgZnVuY3Rpb24gKGYsIGFjYywgZGljdCkgeworICAgICAgICBmb2xkbDoK
KyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIHZhciBfcDEgPSBkaWN0OworICAg
ICAgICAgICAgaWYgKF9wMS5jdG9yID09PSAnUkJFbXB0eV9lbG1fYnVpbHRpbicpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gYWNjOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICB2YXIgX3Y1ID0gZiwKKyAgICAgICAgICAgICAgICAgICAgX3Y2ID0gQTMoCisgICAgICAg
ICAgICAgICAgICAgIGYsCisgICAgICAgICAgICAgICAgICAgIF9wMS5fMSwKKyAgICAgICAgICAg
ICAgICAgICAgX3AxLl8yLAorICAgICAgICAgICAgICAgICAgICBBMyhfZWxtX2xhbmckY29yZSRE
aWN0JGZvbGRsLCBmLCBhY2MsIF9wMS5fMykpLAorICAgICAgICAgICAgICAgICAgICBfdjcgPSBf
cDEuXzQ7CisgICAgICAgICAgICAgICAgZiA9IF92NTsKKyAgICAgICAgICAgICAgICBhY2MgPSBf
djY7CisgICAgICAgICAgICAgICAgZGljdCA9IF92NzsKKyAgICAgICAgICAgICAgICBjb250aW51
ZSBmb2xkbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFu
ZyRjb3JlJERpY3QkbWVyZ2UgPSBGNigKKyAgICBmdW5jdGlvbiAobGVmdFN0ZXAsIGJvdGhTdGVw
LCByaWdodFN0ZXAsIGxlZnREaWN0LCByaWdodERpY3QsIGluaXRpYWxSZXN1bHQpIHsKKyAgICAg
ICAgdmFyIHN0ZXBTdGF0ZSA9IEYzKAorICAgICAgICAgICAgZnVuY3Rpb24gKHJLZXksIHJWYWx1
ZSwgX3AyKSB7CisgICAgICAgICAgICAgICAgc3RlcFN0YXRlOgorICAgICAgICAgICAgICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBfcDMgPSBfcDI7CisgICAgICAg
ICAgICAgICAgICAgIHZhciBfcDkgPSBfcDMuXzE7CisgICAgICAgICAgICAgICAgICAgIHZhciBf
cDggPSBfcDMuXzA7CisgICAgICAgICAgICAgICAgICAgIHZhciBfcDQgPSBfcDg7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChfcDQuY3RvciA9PT0gJ1tdJykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxl
MicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXzA6IF9wOCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfMTogQTMocmlnaHRTdGVwLCByS2V5LCByVmFsdWUsIF9wOSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgX3A3ID0gX3A0Ll8xOworICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIF9wNiA9IF9wNC5fMC5fMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBf
cDUgPSBfcDQuXzAuXzA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX1V0aWxzLmNtcChfcDUsIHJLZXkpIDwgMCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBfdjEwID0gcktleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX3YxMSA9IHJWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3YxMiA9
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RvcjogJ19UdXBsZTInLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfMDogX3A3LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfMTogQTMobGVmdFN0ZXAsIF9wNSwgX3A2LCBfcDkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByS2V5ID0g
X3YxMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByVmFsdWUgPSBfdjExOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9wMiA9IF92MTI7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWUgc3RlcFN0YXRlOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X1V0aWxzLmNtcChfcDUsIHJLZXkpID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Rvcjog
J19UdXBsZTInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXzA6IF9wOCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8xOiBBMyhyaWdodFN0ZXAsIHJL
ZXksIHJWYWx1ZSwgX3A5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
dG9yOiAnX1R1cGxlMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfMDog
X3A3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXzE6IEE0KGJvdGhTdGVw
LCBfcDUsIF9wNiwgclZhbHVlLCBfcDkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSk7CisgICAgICAgIHZhciBfcDEwID0gQTMoCisgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSREaWN0JGZvbGRsLAorICAgICAgICAgICAgc3RlcFN0YXRlLAorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGN0b3I6ICdfVHVwbGUyJywKKyAgICAgICAgICAgICAgICBfMDogX2VsbV9s
YW5nJGNvcmUkRGljdCR0b0xpc3QobGVmdERpY3QpLAorICAgICAgICAgICAgICAgIF8xOiBpbml0
aWFsUmVzdWx0CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgcmlnaHREaWN0KTsKKyAgICAg
ICAgdmFyIGxlZnRvdmVycyA9IF9wMTAuXzA7CisgICAgICAgIHZhciBpbnRlcm1lZGlhdGVSZXN1
bHQgPSBfcDEwLl8xOworICAgICAgICByZXR1cm4gQTMoCisgICAgICAgICAgICBfZWxtX2xhbmck
Y29yZSRMaXN0JGZvbGRsLAorICAgICAgICAgICAgRjIoCisgICAgICAgICAgICAgICAgZnVuY3Rp
b24gKF9wMTEsIHJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgX3AxMiA9IF9wMTE7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMyhsZWZ0U3RlcCwgX3AxMi5fMCwgX3AxMi5f
MSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9KSwKKyAgICAgICAgICAgIGludGVybWVkaWF0
ZVJlc3VsdCwKKyAgICAgICAgICAgIGxlZnRvdmVycyk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5n
JGNvcmUkRGljdCRyZXBvcnRSZW1CdWcgPSBGNCgKKyAgICBmdW5jdGlvbiAobXNnLCBjLCBsZ290
LCByZ290KSB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfRGVidWcuY3Jh
c2goCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRTdHJpbmckY29uY2F0KAorICAgICAgICAg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAg
ICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAgJ0ludGVybmFsIHJlZC1ibGFjayB0
cmVlIGludmFyaWFudCB2aW9sYXRlZCwgZXhwZWN0ZWQgJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICcgYW5kIGdvdCAnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHRvU3RyaW5nKGMpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgJy8nLAorICAgICAgICAgICAgICAgICAgICAgICAgbGdvdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICcvJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHJnb3Qs
CisgICAgICAgICAgICAgICAgICAgICAgICAnXG5QbGVhc2UgcmVwb3J0IHRoaXMgYnVnIHRvIDxo
dHRwczovL2dpdGh1Yi5jb20vZWxtLWxhbmcvY29yZS9pc3N1ZXM+JworICAgICAgICAgICAgICAg
ICAgICBdKSkpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkaXNCQmxhY2sgPSBm
dW5jdGlvbiAoZGljdCkgeworICAgIHZhciBfcDEzID0gZGljdDsKKyAgICBfdjE0XzI6CisgICAg
ZG8geworICAgICAgICBpZiAoX3AxMy5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykgewor
ICAgICAgICAgICAgaWYgKF9wMTMuXzAuY3RvciA9PT0gJ0JCbGFjaycpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
YnJlYWsgX3YxNF8yOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgaWYgKF9wMTMuXzAuY3RvciA9PT0gJ0xCQmxhY2snKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJyZWFrIF92
MTRfMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gd2hpbGUoZmFsc2UpOworICAg
IHJldHVybiBmYWxzZTsKK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRzaXplSGVscCA9IEYy
KAorICAgIGZ1bmN0aW9uIChuLCBkaWN0KSB7CisgICAgICAgIHNpemVIZWxwOgorICAgICAgICB3
aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgdmFyIF9wMTQgPSBkaWN0OworICAgICAgICAgICAg
aWYgKF9wMTQuY3RvciA9PT0gJ1JCRW1wdHlfZWxtX2J1aWx0aW4nKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG47CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBf
djE2ID0gQTIoX2VsbV9sYW5nJGNvcmUkRGljdCRzaXplSGVscCwgbiArIDEsIF9wMTQuXzQpLAor
ICAgICAgICAgICAgICAgICAgICBfdjE3ID0gX3AxNC5fMzsKKyAgICAgICAgICAgICAgICBuID0g
X3YxNjsKKyAgICAgICAgICAgICAgICBkaWN0ID0gX3YxNzsKKyAgICAgICAgICAgICAgICBjb250
aW51ZSBzaXplSGVscDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOwordmFyIF9l
bG1fbGFuZyRjb3JlJERpY3Qkc2l6ZSA9IGZ1bmN0aW9uIChkaWN0KSB7CisgICAgcmV0dXJuIEEy
KF9lbG1fbGFuZyRjb3JlJERpY3Qkc2l6ZUhlbHAsIDAsIGRpY3QpOworfTsKK3ZhciBfZWxtX2xh
bmckY29yZSREaWN0JGdldCA9IEYyKAorICAgIGZ1bmN0aW9uICh0YXJnZXRLZXksIGRpY3QpIHsK
KyAgICAgICAgZ2V0OgorICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgdmFyIF9w
MTUgPSBkaWN0OworICAgICAgICAgICAgaWYgKF9wMTUuY3RvciA9PT0gJ1JCRW1wdHlfZWxtX2J1
aWx0aW4nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1heWJlJE5v
dGhpbmc7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBfcDE2ID0g
QTIoX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGNvbXBhcmUsIHRhcmdldEtleSwgX3AxNS5fMSk7Cisg
ICAgICAgICAgICAgICAgc3dpdGNoIChfcDE2LmN0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnTFQnOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF92MjAgPSB0YXJnZXRLZXks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3YyMSA9IF9wMTUuXzM7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0YXJnZXRLZXkgPSBfdjIwOworICAgICAgICAgICAgICAgICAgICAgICAg
ZGljdCA9IF92MjE7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBnZXQ7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ0VRJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0KF9wMTUuXzIpOworICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF92MjIgPSB0YXJnZXRLZXks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3YyMyA9IF9wMTUuXzQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0YXJnZXRLZXkgPSBfdjIyOworICAgICAgICAgICAgICAgICAgICAgICAg
ZGljdCA9IF92MjM7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBnZXQ7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkRGljdCRtZW1iZXIgPSBGMigKKyAgICBmdW5jdGlvbiAoa2V5LCBkaWN0KSB7
CisgICAgICAgIHZhciBfcDE3ID0gQTIoX2VsbV9sYW5nJGNvcmUkRGljdCRnZXQsIGtleSwgZGlj
dCk7CisgICAgICAgIGlmIChfcDE3LmN0b3IgPT09ICdKdXN0JykgeworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JG1heFdpdGhEZWZhdWx0
ID0gRjMoCisgICAgZnVuY3Rpb24gKGssIHYsIHIpIHsKKyAgICAgICAgbWF4V2l0aERlZmF1bHQ6
CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICB2YXIgX3AxOCA9IHI7CisgICAg
ICAgICAgICBpZiAoX3AxOC5jdG9yID09PSAnUkJFbXB0eV9lbG1fYnVpbHRpbicpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4ge2N0b3I6ICdfVHVwbGUyJywgXzA6IGssIF8xOiB2fTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIF92MjYgPSBfcDE4Ll8xLAorICAg
ICAgICAgICAgICAgICAgICBfdjI3ID0gX3AxOC5fMiwKKyAgICAgICAgICAgICAgICAgICAgX3Yy
OCA9IF9wMTguXzQ7CisgICAgICAgICAgICAgICAgayA9IF92MjY7CisgICAgICAgICAgICAgICAg
diA9IF92Mjc7CisgICAgICAgICAgICAgICAgciA9IF92Mjg7CisgICAgICAgICAgICAgICAgY29u
dGludWUgbWF4V2l0aERlZmF1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsK
K3ZhciBfZWxtX2xhbmckY29yZSREaWN0JE5CbGFjayA9IHtjdG9yOiAnTkJsYWNrJ307Cit2YXIg
X2VsbV9sYW5nJGNvcmUkRGljdCRCQmxhY2sgPSB7Y3RvcjogJ0JCbGFjayd9OwordmFyIF9lbG1f
bGFuZyRjb3JlJERpY3QkQmxhY2sgPSB7Y3RvcjogJ0JsYWNrJ307Cit2YXIgX2VsbV9sYW5nJGNv
cmUkRGljdCRibGFja2lzaCA9IGZ1bmN0aW9uICh0KSB7CisgICAgdmFyIF9wMTkgPSB0OworICAg
IGlmIChfcDE5LmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSB7CisgICAgICAgIHZhciBf
cDIwID0gX3AxOS5fMDsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGls
cy5lcShfcDIwLCBfZWxtX2xhbmckY29yZSREaWN0JEJsYWNrKSB8fCBfZWxtX2xhbmckY29yZSRO
YXRpdmVfVXRpbHMuZXEoX3AyMCwgX2VsbV9sYW5nJGNvcmUkRGljdCRCQmxhY2spOworICAgIH0g
ZWxzZSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307Cit2YXIgX2VsbV9sYW5nJGNv
cmUkRGljdCRSZWQgPSB7Y3RvcjogJ1JlZCd9OwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkbW9y
ZUJsYWNrID0gZnVuY3Rpb24gKGNvbG9yKSB7CisgICAgdmFyIF9wMjEgPSBjb2xvcjsKKyAgICBz
d2l0Y2ggKF9wMjEuY3RvcikgeworICAgICAgICBjYXNlICdCbGFjayc6CisgICAgICAgICAgICBy
ZXR1cm4gX2VsbV9sYW5nJGNvcmUkRGljdCRCQmxhY2s7CisgICAgICAgIGNhc2UgJ1JlZCc6Cisg
ICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkRGljdCRCbGFjazsKKyAgICAgICAgY2Fz
ZSAnTkJsYWNrJzoKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSREaWN0JFJlZDsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRp
dmVfRGVidWcuY3Jhc2goJ0NhblwndCBtYWtlIGEgZG91YmxlIGJsYWNrIG5vZGUgbW9yZSBibGFj
ayEnKTsKKyAgICB9Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkbGVzc0JsYWNrID0gZnVu
Y3Rpb24gKGNvbG9yKSB7CisgICAgdmFyIF9wMjIgPSBjb2xvcjsKKyAgICBzd2l0Y2ggKF9wMjIu
Y3RvcikgeworICAgICAgICBjYXNlICdCQmxhY2snOgorICAgICAgICAgICAgcmV0dXJuIF9lbG1f
bGFuZyRjb3JlJERpY3QkQmxhY2s7CisgICAgICAgIGNhc2UgJ0JsYWNrJzoKKyAgICAgICAgICAg
IHJldHVybiBfZWxtX2xhbmckY29yZSREaWN0JFJlZDsKKyAgICAgICAgY2FzZSAnUmVkJzoKKyAg
ICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSREaWN0JE5CbGFjazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfRGVidWcuY3Jh
c2goJ0NhblwndCBtYWtlIGEgbmVnYXRpdmUgYmxhY2sgbm9kZSBsZXNzIGJsYWNrIScpOworICAg
IH0KK307Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRMQkJsYWNrID0ge2N0b3I6ICdMQkJsYWNr
J307Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRMQmxhY2sgPSB7Y3RvcjogJ0xCbGFjayd9Owor
dmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkUkJFbXB0eV9lbG1fYnVpbHRpbiA9IGZ1bmN0aW9uIChh
KSB7CisgICAgcmV0dXJuIHtjdG9yOiAnUkJFbXB0eV9lbG1fYnVpbHRpbicsIF8wOiBhfTsKK307
Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRlbXB0eSA9IF9lbG1fbGFuZyRjb3JlJERpY3QkUkJF
bXB0eV9lbG1fYnVpbHRpbihfZWxtX2xhbmckY29yZSREaWN0JExCbGFjayk7Cit2YXIgX2VsbV9s
YW5nJGNvcmUkRGljdCRpc0VtcHR5ID0gZnVuY3Rpb24gKGRpY3QpIHsKKyAgICByZXR1cm4gX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmVxKGRpY3QsIF9lbG1fbGFuZyRjb3JlJERpY3QkZW1w
dHkpOworfTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JFJCTm9kZV9lbG1fYnVpbHRpbiA9IEY1
KAorICAgIGZ1bmN0aW9uIChhLCBiLCBjLCBkLCBlKSB7CisgICAgICAgIHJldHVybiB7Y3Rvcjog
J1JCTm9kZV9lbG1fYnVpbHRpbicsIF8wOiBhLCBfMTogYiwgXzI6IGMsIF8zOiBkLCBfNDogZX07
CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRlbnN1cmVCbGFja1Jvb3QgPSBmdW5j
dGlvbiAoZGljdCkgeworICAgIHZhciBfcDIzID0gZGljdDsKKyAgICBpZiAoKF9wMjMuY3RvciA9
PT0gJ1JCTm9kZV9lbG1fYnVpbHRpbicpICYmIChfcDIzLl8wLmN0b3IgPT09ICdSZWQnKSkgewor
ICAgICAgICByZXR1cm4gQTUoX2VsbV9sYW5nJGNvcmUkRGljdCRSQk5vZGVfZWxtX2J1aWx0aW4s
IF9lbG1fbGFuZyRjb3JlJERpY3QkQmxhY2ssIF9wMjMuXzEsIF9wMjMuXzIsIF9wMjMuXzMsIF9w
MjMuXzQpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBkaWN0OworICAgIH0KK307Cit2
YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRsZXNzQmxhY2tUcmVlID0gZnVuY3Rpb24gKGRpY3QpIHsK
KyAgICB2YXIgX3AyNCA9IGRpY3Q7CisgICAgaWYgKF9wMjQuY3RvciA9PT0gJ1JCTm9kZV9lbG1f
YnVpbHRpbicpIHsKKyAgICAgICAgcmV0dXJuIEE1KAorICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkRGljdCRSQk5vZGVfZWxtX2J1aWx0aW4sCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRE
aWN0JGxlc3NCbGFjayhfcDI0Ll8wKSwKKyAgICAgICAgICAgIF9wMjQuXzEsCisgICAgICAgICAg
ICBfcDI0Ll8yLAorICAgICAgICAgICAgX3AyNC5fMywKKyAgICAgICAgICAgIF9wMjQuXzQpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSREaWN0JFJCRW1wdHlf
ZWxtX2J1aWx0aW4oX2VsbV9sYW5nJGNvcmUkRGljdCRMQmxhY2spOworICAgIH0KK307Cit2YXIg
X2VsbV9sYW5nJGNvcmUkRGljdCRiYWxhbmNlZFRyZWUgPSBmdW5jdGlvbiAoY29sKSB7CisgICAg
cmV0dXJuIGZ1bmN0aW9uICh4aykgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHh2KSB7Cisg
ICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHlrKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uICh5dikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHpr
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHp2KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoYikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBNSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JERpY3QkUkJOb2RlX2VsbV9idWlsdGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCRsZXNzQmxhY2soY29sKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlrLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXYsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBNShfZWxtX2xhbmckY29yZSRE
aWN0JFJCTm9kZV9lbG1fYnVpbHRpbiwgX2VsbV9sYW5nJGNvcmUkRGljdCRCbGFjaywgeGssIHh2
LCBhLCBiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEE1KF9lbG1fbGFuZyRjb3JlJERpY3QkUkJOb2RlX2VsbV9idWlsdGluLCBfZWxtX2xhbmckY29y
ZSREaWN0JEJsYWNrLCB6aywgenYsIGMsIGQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfTsKKyAgICAgICAgfTsKKyAg
ICB9OworfTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JGJsYWNrZW4gPSBmdW5jdGlvbiAodCkg
eworICAgIHZhciBfcDI1ID0gdDsKKyAgICBpZiAoX3AyNS5jdG9yID09PSAnUkJFbXB0eV9lbG1f
YnVpbHRpbicpIHsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJERpY3QkUkJFbXB0eV9l
bG1fYnVpbHRpbihfZWxtX2xhbmckY29yZSREaWN0JExCbGFjayk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgcmV0dXJuIEE1KF9lbG1fbGFuZyRjb3JlJERpY3QkUkJOb2RlX2VsbV9idWlsdGluLCBf
ZWxtX2xhbmckY29yZSREaWN0JEJsYWNrLCBfcDI1Ll8xLCBfcDI1Ll8yLCBfcDI1Ll8zLCBfcDI1
Ll80KTsKKyAgICB9Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkcmVkZGVuID0gZnVuY3Rp
b24gKHQpIHsKKyAgICB2YXIgX3AyNiA9IHQ7CisgICAgaWYgKF9wMjYuY3RvciA9PT0gJ1JCRW1w
dHlfZWxtX2J1aWx0aW4nKSB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVf
RGVidWcuY3Jhc2goJ2NhblwndCBtYWtlIGEgTGVhZiByZWQnKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICByZXR1cm4gQTUoX2VsbV9sYW5nJGNvcmUkRGljdCRSQk5vZGVfZWxtX2J1aWx0aW4sIF9l
bG1fbGFuZyRjb3JlJERpY3QkUmVkLCBfcDI2Ll8xLCBfcDI2Ll8yLCBfcDI2Ll8zLCBfcDI2Ll80
KTsKKyAgICB9Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkYmFsYW5jZUhlbHAgPSBmdW5j
dGlvbiAodHJlZSkgeworICAgIHZhciBfcDI3ID0gdHJlZTsKKyAgICBfdjM2XzY6CisgICAgZG8g
eworICAgICAgICBfdjM2XzU6CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIF92MzZfNDoKKyAg
ICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBfdjM2XzM6CisgICAgICAgICAgICAgICAg
ZG8geworICAgICAgICAgICAgICAgICAgICBfdjM2XzI6CisgICAgICAgICAgICAgICAgICAgIGRv
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF92MzZfMToKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdjM2XzA6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoX3AyNy5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKF9wMjcuXzMuY3RvciA9PT0gJ1JCTm9kZV9lbG1fYnVp
bHRpbicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3Ay
Ny5fNC5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9wMjcuXzMuXzAuY3RvcikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnUmVkJzoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKF9wMjcuXzQuXzAuY3RvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdSZWQnOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChfcDI3Ll8zLl8zLmN0
b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSAmJiAoX3AyNy5fMy5fMy5fMC5jdG9yID09PSAn
UmVkJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzA7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgo
X3AyNy5fMy5fNC5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykgJiYgKF9wMjcuXzMuXzQu
XzAuY3RvciA9PT0gJ1JlZCcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfMTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoKF9wMjcuXzQuXzMuY3RvciA9PT0gJ1JCTm9kZV9lbG1f
YnVpbHRpbicpICYmIChfcDI3Ll80Ll8zLl8wLmN0b3IgPT09ICdSZWQnKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWsgX3YzNl8yOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKChfcDI3Ll80Ll80LmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSAmJiAoX3AyNy5f
NC5fNC5fMC5jdG9yID09PSAnUmVkJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2
XzM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92
MzZfNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAnTkJsYWNrJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICgoX3AyNy5fMy5fMy5jdG9yID09PSAnUkJOb2RlX2VsbV9idWls
dGluJykgJiYgKF9wMjcuXzMuXzMuXzAuY3RvciA9PT0gJ1JlZCcpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsg
X3YzNl8wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKF9wMjcuXzMuXzQuY3RvciA9PT0gJ1JC
Tm9kZV9lbG1fYnVpbHRpbicpICYmIChfcDI3Ll8zLl80Ll8wLmN0b3IgPT09ICdSZWQnKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhayBfdjM2XzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCgoKChfcDI3Ll8wLmN0b3IgPT09ICdCQmxhY2snKSAmJiAoX3AyNy5fNC5fMy5jdG9yID09PSAn
UkJOb2RlX2VsbV9idWlsdGluJykpICYmIChfcDI3Ll80Ll8zLl8wLmN0b3IgPT09ICdCbGFjaycp
KSAmJiAoX3AyNy5fNC5fNC5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykpICYmIChfcDI3
Ll80Ll80Ll8wLmN0b3IgPT09ICdCbGFjaycpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2
XzQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzY7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKF9wMjcuXzMuXzMu
Y3RvciA9PT0gJ1JCTm9kZV9lbG1fYnVpbHRpbicpICYmIChfcDI3Ll8zLl8zLl8wLmN0b3IgPT09
ICdSZWQnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfMDsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KChfcDI3Ll8zLl80LmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSAmJiAoX3AyNy5fMy5f
NC5fMC5jdG9yID09PSAnUmVkJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3YzNl8xOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfNjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTkJsYWNrJzoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKF9wMjcuXzQuXzAuY3RvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdSZWQnOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChfcDI3Ll80Ll8zLmN0
b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSAmJiAoX3AyNy5fNC5fMy5fMC5jdG9yID09PSAn
UmVkJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzI7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgo
X3AyNy5fNC5fNC5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykgJiYgKF9wMjcuXzQuXzQu
XzAuY3RvciA9PT0gJ1JlZCcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfMzsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoKCgoKF9wMjcuXzAuY3RvciA9PT0gJ0JCbGFjaycpICYm
IChfcDI3Ll8zLl8zLmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSkgJiYgKF9wMjcuXzMu
XzMuXzAuY3RvciA9PT0gJ0JsYWNrJykpICYmIChfcDI3Ll8zLl80LmN0b3IgPT09ICdSQk5vZGVf
ZWxtX2J1aWx0aW4nKSkgJiYgKF9wMjcuXzMuXzQuXzAuY3RvciA9PT0gJ0JsYWNrJykpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrIF92MzZfNTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrIF92MzZfNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn
TkJsYWNrJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChfcDI3Ll8wLmN0b3IgPT09ICdCQmxhY2snKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCgoKF9wMjcuXzQuXzMuY3RvciA9PT0gJ1JCTm9kZV9lbG1fYnVpbHRpbicpICYmIChfcDI3Ll80
Ll8zLl8wLmN0b3IgPT09ICdCbGFjaycpKSAmJiAoX3AyNy5fNC5fNC5jdG9yID09PSAnUkJOb2Rl
X2VsbV9idWlsdGluJykpICYmIChfcDI3Ll80Ll80Ll8wLmN0b3IgPT09ICdCbGFjaycpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrIF92MzZfNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
KCgoX3AyNy5fMy5fMy5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykgJiYgKF9wMjcuXzMu
XzMuXzAuY3RvciA9PT0gJ0JsYWNrJykpICYmIChfcDI3Ll8zLl80LmN0b3IgPT09ICdSQk5vZGVf
ZWxtX2J1aWx0aW4nKSkgJiYgKF9wMjcuXzMuXzQuXzAuY3RvciA9PT0gJ0JsYWNrJykpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrIF92MzZfNTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrIF92MzZfNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWsgX3YzNl82OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoKChfcDI3Ll8w
LmN0b3IgPT09ICdCQmxhY2snKSAmJiAoX3AyNy5fMy5fMy5jdG9yID09PSAnUkJOb2RlX2VsbV9i
dWlsdGluJykpICYmIChfcDI3Ll8zLl8zLl8wLmN0b3IgPT09ICdCbGFjaycpKSAmJiAoX3AyNy5f
My5fNC5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykpICYmIChfcDI3Ll8zLl80Ll8wLmN0
b3IgPT09ICdCbGFjaycpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3YzNl81OworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhayBfdjM2XzY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9wMjcuXzQuXzAuY3RvcikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdSZWQn
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKChfcDI3Ll80Ll8zLmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSAmJiAo
X3AyNy5fNC5fMy5fMC5jdG9yID09PSAnUmVkJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICgoX3AyNy5fNC5fNC5jdG9yID09PSAnUkJOb2RlX2VsbV9i
dWlsdGluJykgJiYgKF9wMjcuXzQuXzQuXzAuY3RvciA9PT0gJ1JlZCcpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrIF92MzZfMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzY7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlICdOQmxhY2snOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoKChfcDI3Ll8wLmN0b3Ig
PT09ICdCQmxhY2snKSAmJiAoX3AyNy5fNC5fMy5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGlu
JykpICYmIChfcDI3Ll80Ll8zLl8wLmN0b3IgPT09ICdCbGFjaycpKSAmJiAoX3AyNy5fNC5fNC5j
dG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykpICYmIChfcDI3Ll80Ll80Ll8wLmN0b3IgPT09
ICdCbGFjaycpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3YzNl80OworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhayBfdjM2XzY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzY7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoIChfcDI3Ll8zLl8wLmN0b3IpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1JlZCc6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChfcDI3Ll8zLl8z
LmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSAmJiAoX3AyNy5fMy5fMy5fMC5jdG9yID09
PSAnUmVkJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWsgX3YzNl8wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoX3AyNy5fMy5fNC5jdG9yID09PSAn
UkJOb2RlX2VsbV9idWlsdGluJykgJiYgKF9wMjcuXzMuXzQuXzAuY3RvciA9PT0gJ1JlZCcpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhayBfdjM2XzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzY7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdOQmxhY2snOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKCgo
X3AyNy5fMC5jdG9yID09PSAnQkJsYWNrJykgJiYgKF9wMjcuXzMuXzMuY3RvciA9PT0gJ1JCTm9k
ZV9lbG1fYnVpbHRpbicpKSAmJiAoX3AyNy5fMy5fMy5fMC5jdG9yID09PSAnQmxhY2snKSkgJiYg
KF9wMjcuXzMuXzQuY3RvciA9PT0gJ1JCTm9kZV9lbG1fYnVpbHRpbicpKSAmJiAoX3AyNy5fMy5f
NC5fMC5jdG9yID09PSAnQmxhY2snKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzU7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3YzNl82
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWsgX3YzNl82OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoX3AyNy5fNC5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGlu
JykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg
KF9wMjcuXzQuXzAuY3RvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAnUmVkJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoKF9wMjcuXzQuXzMuY3RvciA9PT0gJ1JCTm9kZV9lbG1f
YnVpbHRpbicpICYmIChfcDI3Ll80Ll8zLl8wLmN0b3IgPT09ICdSZWQnKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2
XzI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKChfcDI3Ll80Ll80LmN0b3IgPT09ICdSQk5vZGVfZWxtX2J1aWx0aW4nKSAm
JiAoX3AyNy5fNC5fNC5fMC5jdG9yID09PSAnUmVkJykpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIF92MzZfMzsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrIF92MzZfNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ05CbGFjayc6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoKChfcDI3Ll8wLmN0b3IgPT09ICdCQmxh
Y2snKSAmJiAoX3AyNy5fNC5fMy5jdG9yID09PSAnUkJOb2RlX2VsbV9idWlsdGluJykpICYmIChf
cDI3Ll80Ll8zLl8wLmN0b3IgPT09ICdCbGFjaycpKSAmJiAoX3AyNy5fNC5fNC5jdG9yID09PSAn
UkJOb2RlX2VsbV9idWlsdGluJykpICYmIChfcDI3Ll80Ll80Ll8wLmN0b3IgPT09ICdCbGFjaycp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrIF92MzZfNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzY7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzY7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhayBfdjM2XzY7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWsgX3YzNl82OworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZShmYWxzZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJERpY3Qk
YmFsYW5jZWRUcmVlKF9wMjcuXzApKF9wMjcuXzMuXzMuXzEpKF9wMjcuXzMuXzMuXzIpKF9wMjcu
XzMuXzEpKF9wMjcuXzMuXzIpKF9wMjcuXzEpKF9wMjcuXzIpKF9wMjcuXzMuXzMuXzMpKF9wMjcu
XzMuXzMuXzQpKF9wMjcuXzMuXzQpKF9wMjcuXzQpOworICAgICAgICAgICAgICAgICAgICAgICAg
fSB3aGlsZShmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5n
JGNvcmUkRGljdCRiYWxhbmNlZFRyZWUoX3AyNy5fMCkoX3AyNy5fMy5fMSkoX3AyNy5fMy5fMiko
X3AyNy5fMy5fNC5fMSkoX3AyNy5fMy5fNC5fMikoX3AyNy5fMSkoX3AyNy5fMikoX3AyNy5fMy5f
MykoX3AyNy5fMy5fNC5fMykoX3AyNy5fMy5fNC5fNCkoX3AyNy5fNCk7CisgICAgICAgICAgICAg
ICAgICAgIH0gd2hpbGUoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9s
YW5nJGNvcmUkRGljdCRiYWxhbmNlZFRyZWUoX3AyNy5fMCkoX3AyNy5fMSkoX3AyNy5fMikoX3Ay
Ny5fNC5fMy5fMSkoX3AyNy5fNC5fMy5fMikoX3AyNy5fNC5fMSkoX3AyNy5fNC5fMikoX3AyNy5f
MykoX3AyNy5fNC5fMy5fMykoX3AyNy5fNC5fMy5fNCkoX3AyNy5fNC5fNCk7CisgICAgICAgICAg
ICAgICAgfSB3aGlsZShmYWxzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRj
b3JlJERpY3QkYmFsYW5jZWRUcmVlKF9wMjcuXzApKF9wMjcuXzEpKF9wMjcuXzIpKF9wMjcuXzQu
XzEpKF9wMjcuXzQuXzIpKF9wMjcuXzQuXzQuXzEpKF9wMjcuXzQuXzQuXzIpKF9wMjcuXzMpKF9w
MjcuXzQuXzMpKF9wMjcuXzQuXzQuXzMpKF9wMjcuXzQuXzQuXzQpOworICAgICAgICAgICAgfSB3
aGlsZShmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gQTUoCisgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkRGljdCRSQk5vZGVfZWxtX2J1aWx0aW4sCisgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkRGljdCRCbGFjaywKKyAgICAgICAgICAgICAgICBfcDI3Ll80Ll8zLl8xLAor
ICAgICAgICAgICAgICAgIF9wMjcuXzQuXzMuXzIsCisgICAgICAgICAgICAgICAgQTUoX2VsbV9s
YW5nJGNvcmUkRGljdCRSQk5vZGVfZWxtX2J1aWx0aW4sIF9lbG1fbGFuZyRjb3JlJERpY3QkQmxh
Y2ssIF9wMjcuXzEsIF9wMjcuXzIsIF9wMjcuXzMsIF9wMjcuXzQuXzMuXzMpLAorICAgICAgICAg
ICAgICAgIEE1KAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JGJhbGFu
Y2UsCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkQmxhY2ssCisgICAg
ICAgICAgICAgICAgICAgIF9wMjcuXzQuXzEsCisgICAgICAgICAgICAgICAgICAgIF9wMjcuXzQu
XzIsCisgICAgICAgICAgICAgICAgICAgIF9wMjcuXzQuXzMuXzQsCisgICAgICAgICAgICAgICAg
ICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkcmVkZGVuKF9wMjcuXzQuXzQpKSk7CisgICAgICAgIH0g
d2hpbGUoZmFsc2UpOworICAgICAgICByZXR1cm4gQTUoCisgICAgICAgICAgICBfZWxtX2xhbmck
Y29yZSREaWN0JFJCTm9kZV9lbG1fYnVpbHRpbiwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JERpY3QkQmxhY2ssCisgICAgICAgICAgICBfcDI3Ll8zLl80Ll8xLAorICAgICAgICAgICAgX3Ay
Ny5fMy5fNC5fMiwKKyAgICAgICAgICAgIEE1KAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRj
b3JlJERpY3QkYmFsYW5jZSwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JEJs
YWNrLAorICAgICAgICAgICAgICAgIF9wMjcuXzMuXzEsCisgICAgICAgICAgICAgICAgX3AyNy5f
My5fMiwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JHJlZGRlbihfcDI3Ll8z
Ll8zKSwKKyAgICAgICAgICAgICAgICBfcDI3Ll8zLl80Ll8zKSwKKyAgICAgICAgICAgIEE1KF9l
bG1fbGFuZyRjb3JlJERpY3QkUkJOb2RlX2VsbV9idWlsdGluLCBfZWxtX2xhbmckY29yZSREaWN0
JEJsYWNrLCBfcDI3Ll8xLCBfcDI3Ll8yLCBfcDI3Ll8zLl80Ll80LCBfcDI3Ll80KSk7CisgICAg
fSB3aGlsZShmYWxzZSk7CisgICAgcmV0dXJuIHRyZWU7Cit9OwordmFyIF9lbG1fbGFuZyRjb3Jl
JERpY3QkYmFsYW5jZSA9IEY1KAorICAgIGZ1bmN0aW9uIChjLCBrLCB2LCBsLCByKSB7CisgICAg
ICAgIHZhciB0cmVlID0gQTUoX2VsbV9sYW5nJGNvcmUkRGljdCRSQk5vZGVfZWxtX2J1aWx0aW4s
IGMsIGssIHYsIGwsIHIpOworICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkRGljdCRibGFj
a2lzaCh0cmVlKSA/IF9lbG1fbGFuZyRjb3JlJERpY3QkYmFsYW5jZUhlbHAodHJlZSkgOiB0cmVl
OworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkYnViYmxlID0gRjUoCisgICAgZnVu
Y3Rpb24gKGMsIGssIHYsIGwsIHIpIHsKKyAgICAgICAgcmV0dXJuIChfZWxtX2xhbmckY29yZSRE
aWN0JGlzQkJsYWNrKGwpIHx8IF9lbG1fbGFuZyRjb3JlJERpY3QkaXNCQmxhY2socikpID8gQTUo
CisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JGJhbGFuY2UsCisgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSREaWN0JG1vcmVCbGFjayhjKSwKKyAgICAgICAgICAgIGssCisgICAgICAg
ICAgICB2LAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCRsZXNzQmxhY2tUcmVlKGwp
LAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCRsZXNzQmxhY2tUcmVlKHIpKSA6IEE1
KF9lbG1fbGFuZyRjb3JlJERpY3QkUkJOb2RlX2VsbV9idWlsdGluLCBjLCBrLCB2LCBsLCByKTsK
KyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JHJlbW92ZU1heCA9IEY1KAorICAgIGZ1
bmN0aW9uIChjLCBrLCB2LCBsLCByKSB7CisgICAgICAgIHZhciBfcDI4ID0gcjsKKyAgICAgICAg
aWYgKF9wMjguY3RvciA9PT0gJ1JCRW1wdHlfZWxtX2J1aWx0aW4nKSB7CisgICAgICAgICAgICBy
ZXR1cm4gQTMoX2VsbV9sYW5nJGNvcmUkRGljdCRyZW0sIGMsIGwsIHIpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgcmV0dXJuIEE1KAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRj
b3JlJERpY3QkYnViYmxlLAorICAgICAgICAgICAgICAgIGMsCisgICAgICAgICAgICAgICAgaywK
KyAgICAgICAgICAgICAgICB2LAorICAgICAgICAgICAgICAgIGwsCisgICAgICAgICAgICAgICAg
QTUoX2VsbV9sYW5nJGNvcmUkRGljdCRyZW1vdmVNYXgsIF9wMjguXzAsIF9wMjguXzEsIF9wMjgu
XzIsIF9wMjguXzMsIF9wMjguXzQpKTsKKyAgICAgICAgfQorICAgIH0pOwordmFyIF9lbG1fbGFu
ZyRjb3JlJERpY3QkcmVtID0gRjMoCisgICAgZnVuY3Rpb24gKGMsIGwsIHIpIHsKKyAgICAgICAg
dmFyIF9wMjkgPSB7Y3RvcjogJ19UdXBsZTInLCBfMDogbCwgXzE6IHJ9OworICAgICAgICBpZiAo
X3AyOS5fMC5jdG9yID09PSAnUkJFbXB0eV9lbG1fYnVpbHRpbicpIHsKKyAgICAgICAgICAgIGlm
IChfcDI5Ll8xLmN0b3IgPT09ICdSQkVtcHR5X2VsbV9idWlsdGluJykgeworICAgICAgICAgICAg
ICAgIHZhciBfcDMwID0gYzsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKF9wMzAuY3Rvcikgewor
ICAgICAgICAgICAgICAgICAgICBjYXNlICdSZWQnOgorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIF9lbG1fbGFuZyRjb3JlJERpY3QkUkJFbXB0eV9lbG1fYnVpbHRpbihfZWxtX2xhbmck
Y29yZSREaWN0JExCbGFjayk7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0JsYWNrJzoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSREaWN0JFJCRW1wdHlf
ZWxtX2J1aWx0aW4oX2VsbV9sYW5nJGNvcmUkRGljdCRMQkJsYWNrKTsKKyAgICAgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmck
Y29yZSROYXRpdmVfRGVidWcuY3Jhc2goJ2Nhbm5vdCBoYXZlIGJibGFjayBvciBuYmxhY2sgbm9k
ZXMgYXQgdGhpcyBwb2ludCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgdmFyIF9wMzMgPSBfcDI5Ll8xLl8wOworICAgICAgICAgICAg
ICAgIHZhciBfcDMyID0gX3AyOS5fMC5fMDsKKyAgICAgICAgICAgICAgICB2YXIgX3AzMSA9IHtj
dG9yOiAnX1R1cGxlMycsIF8wOiBjLCBfMTogX3AzMiwgXzI6IF9wMzN9OworICAgICAgICAgICAg
ICAgIGlmICgoKChfcDMxLmN0b3IgPT09ICdfVHVwbGUzJykgJiYgKF9wMzEuXzAuY3RvciA9PT0g
J0JsYWNrJykpICYmIChfcDMxLl8xLmN0b3IgPT09ICdMQmxhY2snKSkgJiYgKF9wMzEuXzIuY3Rv
ciA9PT0gJ1JlZCcpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBNShfZWxtX2xhbmck
Y29yZSREaWN0JFJCTm9kZV9lbG1fYnVpbHRpbiwgX2VsbV9sYW5nJGNvcmUkRGljdCRCbGFjaywg
X3AyOS5fMS5fMSwgX3AyOS5fMS5fMiwgX3AyOS5fMS5fMywgX3AyOS5fMS5fNCk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEE0KAorICAgICAg
ICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCRyZXBvcnRSZW1CdWcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAnQmxhY2svTEJsYWNrL1JlZCcsCisgICAgICAgICAgICAgICAg
ICAgICAgICBjLAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNz
JHRvU3RyaW5nKF9wMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUk
QmFzaWNzJHRvU3RyaW5nKF9wMzMpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoX3AyOS5fMS5jdG9yID09PSAnUkJF
bXB0eV9lbG1fYnVpbHRpbicpIHsKKyAgICAgICAgICAgICAgICB2YXIgX3AzNiA9IF9wMjkuXzEu
XzA7CisgICAgICAgICAgICAgICAgdmFyIF9wMzUgPSBfcDI5Ll8wLl8wOworICAgICAgICAgICAg
ICAgIHZhciBfcDM0ID0ge2N0b3I6ICdfVHVwbGUzJywgXzA6IGMsIF8xOiBfcDM1LCBfMjogX3Az
Nn07CisgICAgICAgICAgICAgICAgaWYgKCgoKF9wMzQuY3RvciA9PT0gJ19UdXBsZTMnKSAmJiAo
X3AzNC5fMC5jdG9yID09PSAnQmxhY2snKSkgJiYgKF9wMzQuXzEuY3RvciA9PT0gJ1JlZCcpKSAm
JiAoX3AzNC5fMi5jdG9yID09PSAnTEJsYWNrJykpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEE1KF9lbG1fbGFuZyRjb3JlJERpY3QkUkJOb2RlX2VsbV9idWlsdGluLCBfZWxtX2xhbmck
Y29yZSREaWN0JEJsYWNrLCBfcDI5Ll8wLl8xLCBfcDI5Ll8wLl8yLCBfcDI5Ll8wLl8zLCBfcDI5
Ll8wLl80KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gQTQoCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JHJl
cG9ydFJlbUJ1ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICdCbGFjay9SZWQvTEJsYWNrJywK
KyAgICAgICAgICAgICAgICAgICAgICAgIGMsCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSRCYXNpY3MkdG9TdHJpbmcoX3AzNSksCisgICAgICAgICAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSRCYXNpY3MkdG9TdHJpbmcoX3AzNikpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIF9wNDAgPSBfcDI5
Ll8wLl8yOworICAgICAgICAgICAgICAgIHZhciBfcDM5ID0gX3AyOS5fMC5fNDsKKyAgICAgICAg
ICAgICAgICB2YXIgX3AzOCA9IF9wMjkuXzAuXzE7CisgICAgICAgICAgICAgICAgdmFyIGwkID0g
QTUoX2VsbV9sYW5nJGNvcmUkRGljdCRyZW1vdmVNYXgsIF9wMjkuXzAuXzAsIF9wMzgsIF9wNDAs
IF9wMjkuXzAuXzMsIF9wMzkpOworICAgICAgICAgICAgICAgIHZhciBfcDM3ID0gQTMoX2VsbV9s
YW5nJGNvcmUkRGljdCRtYXhXaXRoRGVmYXVsdCwgX3AzOCwgX3A0MCwgX3AzOSk7CisgICAgICAg
ICAgICAgICAgdmFyIGsgPSBfcDM3Ll8wOworICAgICAgICAgICAgICAgIHZhciB2ID0gX3AzNy5f
MTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQTUoX2VsbV9sYW5nJGNvcmUkRGljdCRidWJibGUs
IGMsIGssIHYsIGwkLCByKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOwordmFy
IF9lbG1fbGFuZyRjb3JlJERpY3QkbWFwID0gRjIoCisgICAgZnVuY3Rpb24gKGYsIGRpY3QpIHsK
KyAgICAgICAgdmFyIF9wNDEgPSBkaWN0OworICAgICAgICBpZiAoX3A0MS5jdG9yID09PSAnUkJF
bXB0eV9lbG1fYnVpbHRpbicpIHsKKyAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRE
aWN0JFJCRW1wdHlfZWxtX2J1aWx0aW4oX2VsbV9sYW5nJGNvcmUkRGljdCRMQmxhY2spOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIF9wNDIgPSBfcDQxLl8xOworICAgICAgICAg
ICAgcmV0dXJuIEE1KAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkUkJOb2Rl
X2VsbV9idWlsdGluLAorICAgICAgICAgICAgICAgIF9wNDEuXzAsCisgICAgICAgICAgICAgICAg
X3A0MiwKKyAgICAgICAgICAgICAgICBBMihmLCBfcDQyLCBfcDQxLl8yKSwKKyAgICAgICAgICAg
ICAgICBBMihfZWxtX2xhbmckY29yZSREaWN0JG1hcCwgZiwgX3A0MS5fMyksCisgICAgICAgICAg
ICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkRGljdCRtYXAsIGYsIF9wNDEuXzQpKTsKKyAgICAgICAg
fQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkU2FtZSA9IHtjdG9yOiAnU2FtZSd9
OwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkUmVtb3ZlID0ge2N0b3I6ICdSZW1vdmUnfTsKK3Zh
ciBfZWxtX2xhbmckY29yZSREaWN0JEluc2VydCA9IHtjdG9yOiAnSW5zZXJ0J307Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkRGljdCR1cGRhdGUgPSBGMygKKyAgICBmdW5jdGlvbiAoaywgYWx0ZXIsIGRp
Y3QpIHsKKyAgICAgICAgdmFyIHVwID0gZnVuY3Rpb24gKGRpY3QpIHsKKyAgICAgICAgICAgIHZh
ciBfcDQzID0gZGljdDsKKyAgICAgICAgICAgIGlmIChfcDQzLmN0b3IgPT09ICdSQkVtcHR5X2Vs
bV9idWlsdGluJykgeworICAgICAgICAgICAgICAgIHZhciBfcDQ0ID0gYWx0ZXIoX2VsbV9sYW5n
JGNvcmUkTWF5YmUkTm90aGluZyk7CisgICAgICAgICAgICAgICAgaWYgKF9wNDQuY3RvciA9PT0g
J05vdGhpbmcnKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Y3RvcjogJ19UdXBsZTIn
LCBfMDogX2VsbV9sYW5nJGNvcmUkRGljdCRTYW1lLCBfMTogX2VsbV9sYW5nJGNvcmUkRGljdCRl
bXB0eX07CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0b3I6ICdfVHVwbGUyJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgIF8wOiBfZWxtX2xhbmckY29yZSREaWN0JEluc2VydCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIF8xOiBBNShfZWxtX2xhbmckY29yZSREaWN0JFJCTm9kZV9lbG1fYnVp
bHRpbiwgX2VsbV9sYW5nJGNvcmUkRGljdCRSZWQsIGssIF9wNDQuXzAsIF9lbG1fbGFuZyRjb3Jl
JERpY3QkZW1wdHksIF9lbG1fbGFuZyRjb3JlJERpY3QkZW1wdHkpCisgICAgICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB2YXIgX3A1NSA9IF9wNDMuXzI7CisgICAgICAgICAgICAgICAgdmFyIF9wNTQgPSBf
cDQzLl80OworICAgICAgICAgICAgICAgIHZhciBfcDUzID0gX3A0My5fMzsKKyAgICAgICAgICAg
ICAgICB2YXIgX3A1MiA9IF9wNDMuXzE7CisgICAgICAgICAgICAgICAgdmFyIF9wNTEgPSBfcDQz
Ll8wOworICAgICAgICAgICAgICAgIHZhciBfcDQ1ID0gQTIoX2VsbV9sYW5nJGNvcmUkQmFzaWNz
JGNvbXBhcmUsIGssIF9wNTIpOworICAgICAgICAgICAgICAgIHN3aXRjaCAoX3A0NS5jdG9yKSB7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0VRJzoKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBfcDQ2ID0gYWx0ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkTWF5YmUkSnVzdChfcDU1KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3A0
Ni5jdG9yID09PSAnTm90aGluZycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMicsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8wOiBfZWxtX2xhbmckY29yZSREaWN0JFJl
bW92ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXzE6IEEzKF9lbG1fbGFuZyRj
b3JlJERpY3QkcmVtLCBfcDUxLCBfcDUzLCBfcDU0KQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0
b3I6ICdfVHVwbGUyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXzA6IF9lbG1f
bGFuZyRjb3JlJERpY3QkU2FtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXzE6
IEE1KF9lbG1fbGFuZyRjb3JlJERpY3QkUkJOb2RlX2VsbV9idWlsdGluLCBfcDUxLCBfcDUyLCBf
cDQ2Ll8wLCBfcDUzLCBfcDU0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xUJzoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBfcDQ3ID0gdXAoX3A1Myk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgZmxhZyA9IF9wNDcuXzA7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgbmV3TGVmdCA9IF9wNDcuXzE7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3A0OCA9
IGZsYWc7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9wNDguY3RvcikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1NhbWUnOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY3RvcjogJ19UdXBsZTInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XzA6IF9lbG1fbGFuZyRjb3JlJERpY3QkU2FtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF8xOiBBNShfZWxtX2xhbmckY29yZSREaWN0JFJCTm9kZV9lbG1fYnVpbHRpbiwg
X3A1MSwgX3A1MiwgX3A1NSwgbmV3TGVmdCwgX3A1NCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdJbnNlcnQnOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY3RvcjogJ19UdXBsZTInLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXzA6IF9lbG1fbGFuZyRjb3JlJERpY3QkSW5zZXJ0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXzE6IEE1KF9lbG1fbGFuZyRjb3JlJERpY3Qk
YmFsYW5jZSwgX3A1MSwgX3A1MiwgX3A1NSwgbmV3TGVmdCwgX3A1NCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3RvcjogJ19UdXBsZTInLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXzA6IF9lbG1fbGFuZyRjb3JlJERpY3QkUmVtb3ZlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXzE6IEE1KF9lbG1fbGFuZyRjb3JlJERp
Y3QkYnViYmxlLCBfcDUxLCBfcDUyLCBfcDU1LCBuZXdMZWZ0LCBfcDU0KQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9wNDkg
PSB1cChfcDU0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbGFnID0gX3A0OS5fMDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdSaWdodCA9IF9wNDkuXzE7CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgX3A1MCA9IGZsYWc7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKF9wNTAuY3RvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J1NhbWUnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RvcjogJ19UdXBsZTInLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXzA6IF9lbG1fbGFuZyRjb3JlJERpY3QkU2FtZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8xOiBBNShfZWxtX2xhbmckY29y
ZSREaWN0JFJCTm9kZV9lbG1fYnVpbHRpbiwgX3A1MSwgX3A1MiwgX3A1NSwgX3A1MywgbmV3Umln
aHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAnSW5zZXJ0JzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0b3I6ICdf
VHVwbGUyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8wOiBfZWxtX2xh
bmckY29yZSREaWN0JEluc2VydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF8xOiBBNShfZWxtX2xhbmckY29yZSREaWN0JGJhbGFuY2UsIF9wNTEsIF9wNTIsIF9wNTUsIF9w
NTMsIG5ld1JpZ2h0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdG9y
OiAnX1R1cGxlMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfMDogX2Vs
bV9sYW5nJGNvcmUkRGljdCRSZW1vdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfMTogQTUoX2VsbV9sYW5nJGNvcmUkRGljdCRidWJibGUsIF9wNTEsIF9wNTIsIF9wNTUs
IF9wNTMsIG5ld1JpZ2h0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKyAgICAgICAgdmFyIF9wNTYgPSB1cChkaWN0KTsKKyAgICAgICAgdmFyIGZs
YWcgPSBfcDU2Ll8wOworICAgICAgICB2YXIgdXBkYXRlZERpY3QgPSBfcDU2Ll8xOworICAgICAg
ICB2YXIgX3A1NyA9IGZsYWc7CisgICAgICAgIHN3aXRjaCAoX3A1Ny5jdG9yKSB7CisgICAgICAg
ICAgICBjYXNlICdTYW1lJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlZERpY3Q7Cisg
ICAgICAgICAgICBjYXNlICdJbnNlcnQnOgorICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xh
bmckY29yZSREaWN0JGVuc3VyZUJsYWNrUm9vdCh1cGRhdGVkRGljdCk7CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSREaWN0JGJsYWNr
ZW4odXBkYXRlZERpY3QpOworICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUk
RGljdCRpbnNlcnQgPSBGMygKKyAgICBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgZGljdCkgeworICAg
ICAgICByZXR1cm4gQTMoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JHVwZGF0ZSwK
KyAgICAgICAgICAgIGtleSwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRhbHdh
eXMoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVzdCh2YWx1ZSkpLAor
ICAgICAgICAgICAgZGljdCk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGljdCRzaW5n
bGV0b24gPSBGMigKKyAgICBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkgeworICAgICAgICByZXR1cm4g
QTMoX2VsbV9sYW5nJGNvcmUkRGljdCRpbnNlcnQsIGtleSwgdmFsdWUsIF9lbG1fbGFuZyRjb3Jl
JERpY3QkZW1wdHkpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkdW5pb24gPSBG
MigKKyAgICBmdW5jdGlvbiAodDEsIHQyKSB7CisgICAgICAgIHJldHVybiBBMyhfZWxtX2xhbmck
Y29yZSREaWN0JGZvbGRsLCBfZWxtX2xhbmckY29yZSREaWN0JGluc2VydCwgdDIsIHQxKTsKKyAg
ICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSREaWN0JGZpbHRlciA9IEYyKAorICAgIGZ1bmN0aW9u
IChwcmVkaWNhdGUsIGRpY3Rpb25hcnkpIHsKKyAgICAgICAgdmFyIGFkZCA9IEYzKAorICAgICAg
ICAgICAgZnVuY3Rpb24gKGtleSwgdmFsdWUsIGRpY3QpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gQTIocHJlZGljYXRlLCBrZXksIHZhbHVlKSA/IEEzKF9lbG1fbGFuZyRjb3JlJERpY3QkaW5z
ZXJ0LCBrZXksIHZhbHVlLCBkaWN0KSA6IGRpY3Q7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
cmV0dXJuIEEzKF9lbG1fbGFuZyRjb3JlJERpY3QkZm9sZGwsIGFkZCwgX2VsbV9sYW5nJGNvcmUk
RGljdCRlbXB0eSwgZGljdGlvbmFyeSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkRGlj
dCRpbnRlcnNlY3QgPSBGMigKKyAgICBmdW5jdGlvbiAodDEsIHQyKSB7CisgICAgICAgIHJldHVy
biBBMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkZmlsdGVyLAorICAgICAgICAg
ICAgRjIoCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGssIF9wNTgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRjb3JlJERpY3QkbWVtYmVyLCBrLCB0Mik7Cisg
ICAgICAgICAgICAgICAgfSksCisgICAgICAgICAgICB0MSk7CisgICAgfSk7Cit2YXIgX2VsbV9s
YW5nJGNvcmUkRGljdCRwYXJ0aXRpb24gPSBGMigKKyAgICBmdW5jdGlvbiAocHJlZGljYXRlLCBk
aWN0KSB7CisgICAgICAgIHZhciBhZGQgPSBGMygKKyAgICAgICAgICAgIGZ1bmN0aW9uIChrZXks
IHZhbHVlLCBfcDU5KSB7CisgICAgICAgICAgICAgICAgdmFyIF9wNjAgPSBfcDU5OworICAgICAg
ICAgICAgICAgIHZhciBfcDYyID0gX3A2MC5fMTsKKyAgICAgICAgICAgICAgICB2YXIgX3A2MSA9
IF9wNjAuXzA7CisgICAgICAgICAgICAgICAgcmV0dXJuIEEyKHByZWRpY2F0ZSwga2V5LCB2YWx1
ZSkgPyB7CisgICAgICAgICAgICAgICAgICAgIGN0b3I6ICdfVHVwbGUyJywKKyAgICAgICAgICAg
ICAgICAgICAgXzA6IEEzKF9lbG1fbGFuZyRjb3JlJERpY3QkaW5zZXJ0LCBrZXksIHZhbHVlLCBf
cDYxKSwKKyAgICAgICAgICAgICAgICAgICAgXzE6IF9wNjIKKyAgICAgICAgICAgICAgICB9IDog
eworICAgICAgICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMicsCisgICAgICAgICAgICAgICAg
ICAgIF8wOiBfcDYxLAorICAgICAgICAgICAgICAgICAgICBfMTogQTMoX2VsbV9sYW5nJGNvcmUk
RGljdCRpbnNlcnQsIGtleSwgdmFsdWUsIF9wNjIpCisgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICByZXR1cm4gQTMoCisgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSREaWN0JGZvbGRsLAorICAgICAgICAgICAgYWRkLAorICAgICAgICAgICAge2N0b3I6ICdfVHVw
bGUyJywgXzA6IF9lbG1fbGFuZyRjb3JlJERpY3QkZW1wdHksIF8xOiBfZWxtX2xhbmckY29yZSRE
aWN0JGVtcHR5fSwKKyAgICAgICAgICAgIGRpY3QpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRj
b3JlJERpY3QkZnJvbUxpc3QgPSBmdW5jdGlvbiAoYXNzb2NzKSB7CisgICAgcmV0dXJuIEEzKAor
ICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JGZvbGRsLAorICAgICAgICBGMigKKyAgICAgICAg
ICAgIGZ1bmN0aW9uIChfcDYzLCBkaWN0KSB7CisgICAgICAgICAgICAgICAgdmFyIF9wNjQgPSBf
cDYzOworICAgICAgICAgICAgICAgIHJldHVybiBBMyhfZWxtX2xhbmckY29yZSREaWN0JGluc2Vy
dCwgX3A2NC5fMCwgX3A2NC5fMSwgZGljdCk7CisgICAgICAgICAgICB9KSwKKyAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkRGljdCRlbXB0eSwKKyAgICAgICAgYXNzb2NzKTsKK307Cit2YXIgX2VsbV9s
YW5nJGNvcmUkRGljdCRyZW1vdmUgPSBGMigKKyAgICBmdW5jdGlvbiAoa2V5LCBkaWN0KSB7Cisg
ICAgICAgIHJldHVybiBBMygKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkdXBkYXRl
LAorICAgICAgICAgICAga2V5LAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJGFs
d2F5cyhfZWxtX2xhbmckY29yZSRNYXliZSROb3RoaW5nKSwKKyAgICAgICAgICAgIGRpY3QpOwor
ICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJERpY3QkZGlmZiA9IEYyKAorICAgIGZ1bmN0aW9u
ICh0MSwgdDIpIHsKKyAgICAgICAgcmV0dXJuIEEzKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkRGljdCRmb2xkbCwKKyAgICAgICAgICAgIEYzKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9u
IChrLCB2LCB0KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMihfZWxtX2xhbmckY29y
ZSREaWN0JHJlbW92ZSwgaywgdCk7CisgICAgICAgICAgICAgICAgfSksCisgICAgICAgICAgICB0
MSwKKyAgICAgICAgICAgIHQyKTsKKyAgICB9KTsKKworLy9pbXBvcnQgTmF0aXZlLlNjaGVkdWxl
ciAvLworCit2YXIgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1RpbWUgPSBmdW5jdGlvbigpIHsKKwor
dmFyIG5vdyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIubmF0aXZlQmluZGluZyhm
dW5jdGlvbihjYWxsYmFjaykKK3sKKyAgICBjYWxsYmFjayhfZWxtX2xhbmckY29yZSROYXRpdmVf
U2NoZWR1bGVyLnN1Y2NlZWQoRGF0ZS5ub3coKSkpOworfSk7CisKK2Z1bmN0aW9uIHNldEludGVy
dmFsXyhpbnRlcnZhbCwgdGFzaykKK3sKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X1NjaGVkdWxlci5uYXRpdmVCaW5kaW5nKGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHsKKyAgICAg
ICAgdmFyIGlkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBfZWxtX2xh
bmckY29yZSROYXRpdmVfU2NoZWR1bGVyLnJhd1NwYXduKHRhc2spOworICAgICAgICB9LCBpbnRl
cnZhbCk7CisKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeyBjbGVhckludGVydmFsKGlkKTsg
fTsKKyAgICB9KTsKK30KKworcmV0dXJuIHsKKyAgICBub3c6IG5vdywKKyAgICBzZXRJbnRlcnZh
bF86IEYyKHNldEludGVydmFsXykKK307CisKK30oKTsKK3ZhciBfZWxtX2xhbmckY29yZSRUaW1l
JHNldEludGVydmFsID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1RpbWUuc2V0SW50ZXJ2YWxfOwor
dmFyIF9lbG1fbGFuZyRjb3JlJFRpbWUkc3Bhd25IZWxwID0gRjMoCisgICAgZnVuY3Rpb24gKHJv
dXRlciwgaW50ZXJ2YWxzLCBwcm9jZXNzZXMpIHsKKyAgICAgICAgdmFyIF9wMCA9IGludGVydmFs
czsKKyAgICAgICAgaWYgKF9wMC5jdG9yID09PSAnW10nKSB7CisgICAgICAgICAgICByZXR1cm4g
X2VsbV9sYW5nJGNvcmUkVGFzayRzdWNjZWVkKHByb2Nlc3Nlcyk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICB2YXIgX3AxID0gX3AwLl8wOworICAgICAgICAgICAgcmV0dXJuIEEyKAor
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRhc2skYW5kVGhlbiwKKyAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1bGVyLnNwYXduKAorICAgICAgICAgICAg
ICAgICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRpbWUk
c2V0SW50ZXJ2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICBfcDEsCisgICAgICAgICAgICAg
ICAgICAgICAgICBBMihfZWxtX2xhbmckY29yZSRQbGF0Zm9ybSRzZW5kVG9TZWxmLCByb3V0ZXIs
IF9wMSkpKSwKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiAoaWQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEEzKAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUk
VGltZSRzcGF3bkhlbHAsCisgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICBfcDAuXzEsCisgICAgICAgICAgICAgICAgICAgICAgICBBMyhfZWxt
X2xhbmckY29yZSREaWN0JGluc2VydCwgX3AxLCBpZCwgcHJvY2Vzc2VzKSk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRUaW1lJGFk
ZE15U3ViID0gRjIoCisgICAgZnVuY3Rpb24gKF9wMiwgc3RhdGUpIHsKKyAgICAgICAgdmFyIF9w
MyA9IF9wMjsKKyAgICAgICAgdmFyIF9wNiA9IF9wMy5fMTsKKyAgICAgICAgdmFyIF9wNSA9IF9w
My5fMDsKKyAgICAgICAgdmFyIF9wNCA9IEEyKF9lbG1fbGFuZyRjb3JlJERpY3QkZ2V0LCBfcDUs
IHN0YXRlKTsKKyAgICAgICAgaWYgKF9wNC5jdG9yID09PSAnTm90aGluZycpIHsKKyAgICAgICAg
ICAgIHJldHVybiBBMygKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSREaWN0JGluc2Vy
dCwKKyAgICAgICAgICAgICAgICBfcDUsCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICBbX3A2XSksCisgICAg
ICAgICAgICAgICAgc3RhdGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJu
IEEzKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJERpY3QkaW5zZXJ0LAorICAgICAg
ICAgICAgICAgIF9wNSwKKyAgICAgICAgICAgICAgICBBMihfZWxtX2xhbmckY29yZSRMaXN0X29w
c1snOjonXSwgX3A2LCBfcDQuXzApLAorICAgICAgICAgICAgICAgIHN0YXRlKTsKKyAgICAgICAg
fQorICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJFRpbWUkaW5NaWxsaXNlY29uZHMgPSBmdW5j
dGlvbiAodCkgeworICAgIHJldHVybiB0OworfTsKK3ZhciBfZWxtX2xhbmckY29yZSRUaW1lJG1p
bGxpc2Vjb25kID0gMTsKK3ZhciBfZWxtX2xhbmckY29yZSRUaW1lJHNlY29uZCA9IDEwMDAgKiBf
ZWxtX2xhbmckY29yZSRUaW1lJG1pbGxpc2Vjb25kOwordmFyIF9lbG1fbGFuZyRjb3JlJFRpbWUk
bWludXRlID0gNjAgKiBfZWxtX2xhbmckY29yZSRUaW1lJHNlY29uZDsKK3ZhciBfZWxtX2xhbmck
Y29yZSRUaW1lJGhvdXIgPSA2MCAqIF9lbG1fbGFuZyRjb3JlJFRpbWUkbWludXRlOwordmFyIF9l
bG1fbGFuZyRjb3JlJFRpbWUkaW5Ib3VycyA9IGZ1bmN0aW9uICh0KSB7CisgICAgcmV0dXJuIHQg
LyBfZWxtX2xhbmckY29yZSRUaW1lJGhvdXI7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJFRpbWUk
aW5NaW51dGVzID0gZnVuY3Rpb24gKHQpIHsKKyAgICByZXR1cm4gdCAvIF9lbG1fbGFuZyRjb3Jl
JFRpbWUkbWludXRlOworfTsKK3ZhciBfZWxtX2xhbmckY29yZSRUaW1lJGluU2Vjb25kcyA9IGZ1
bmN0aW9uICh0KSB7CisgICAgcmV0dXJuIHQgLyBfZWxtX2xhbmckY29yZSRUaW1lJHNlY29uZDsK
K307Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGltZSRub3cgPSBfZWxtX2xhbmckY29yZSROYXRpdmVf
VGltZS5ub3c7Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGltZSRvblNlbGZNc2cgPSBGMygKKyAgICBm
dW5jdGlvbiAocm91dGVyLCBpbnRlcnZhbCwgc3RhdGUpIHsKKyAgICAgICAgdmFyIF9wNyA9IEEy
KF9lbG1fbGFuZyRjb3JlJERpY3QkZ2V0LCBpbnRlcnZhbCwgc3RhdGUudGFnZ2Vycyk7CisgICAg
ICAgIGlmIChfcDcuY3RvciA9PT0gJ05vdGhpbmcnKSB7CisgICAgICAgICAgICByZXR1cm4gX2Vs
bV9sYW5nJGNvcmUkVGFzayRzdWNjZWVkKHN0YXRlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJGFu
ZFRoZW4sCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGltZSRub3csCisgICAgICAg
ICAgICAgICAgZnVuY3Rpb24gKHRpbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEy
KAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAor
ICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRzZXF1ZW5jZSgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uICh0YWdnZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSRQbGF0Zm9ybSRzZW5kVG9BcHAsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcm91dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRhZ2dlcih0aW1lKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9wNy5fMCkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9wOCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRUYXNrJHN1Y2NlZWQoc3RhdGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRUaW1lJHN1YnNjcmlwdGlvbiA9IF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9QbGF0Zm9ybS5sZWFmKCdUaW1lJyk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkVGlt
ZSRTdGF0ZSA9IEYyKAorICAgIGZ1bmN0aW9uIChhLCBiKSB7CisgICAgICAgIHJldHVybiB7dGFn
Z2VyczogYSwgcHJvY2Vzc2VzOiBifTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckY29yZSRUaW1l
JGluaXQgPSBfZWxtX2xhbmckY29yZSRUYXNrJHN1Y2NlZWQoCisgICAgQTIoX2VsbV9sYW5nJGNv
cmUkVGltZSRTdGF0ZSwgX2VsbV9sYW5nJGNvcmUkRGljdCRlbXB0eSwgX2VsbV9sYW5nJGNvcmUk
RGljdCRlbXB0eSkpOwordmFyIF9lbG1fbGFuZyRjb3JlJFRpbWUkb25FZmZlY3RzID0gRjMoCisg
ICAgZnVuY3Rpb24gKHJvdXRlciwgc3VicywgX3A5KSB7CisgICAgICAgIHZhciBfcDEwID0gX3A5
OworICAgICAgICB2YXIgcmlnaHRTdGVwID0gRjMoCisgICAgICAgICAgICBmdW5jdGlvbiAoX3Ax
MiwgaWQsIF9wMTEpIHsKKyAgICAgICAgICAgICAgICB2YXIgX3AxMyA9IF9wMTE7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgY3RvcjogJ19UdXBsZTMnLAor
ICAgICAgICAgICAgICAgICAgICBfMDogX3AxMy5fMCwKKyAgICAgICAgICAgICAgICAgICAgXzE6
IF9wMTMuXzEsCisgICAgICAgICAgICAgICAgICAgIF8yOiBBMigKKyAgICAgICAgICAgICAgICAg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJFRhc2skYW5kVGhlbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIua2lsbChpZCksCisgICAgICAgICAg
ICAgICAgICAgICAgICBmdW5jdGlvbiAoX3AxNCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBfcDEzLl8yOworICAgICAgICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAg
ICAgICAgICB9OworICAgICAgICAgICAgfSk7CisgICAgICAgIHZhciBib3RoU3RlcCA9IEY0KAor
ICAgICAgICAgICAgZnVuY3Rpb24gKGludGVydmFsLCB0YWdnZXJzLCBpZCwgX3AxNSkgeworICAg
ICAgICAgICAgICAgIHZhciBfcDE2ID0gX3AxNTsKKyAgICAgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMycsCisgICAgICAgICAgICAgICAgICAg
IF8wOiBfcDE2Ll8wLAorICAgICAgICAgICAgICAgICAgICBfMTogQTMoX2VsbV9sYW5nJGNvcmUk
RGljdCRpbnNlcnQsIGludGVydmFsLCBpZCwgX3AxNi5fMSksCisgICAgICAgICAgICAgICAgICAg
IF8yOiBfcDE2Ll8yCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICB2YXIgbGVmdFN0ZXAgPSBGMygKKyAgICAgICAgICAgIGZ1bmN0aW9uIChpbnRlcnZhbCwgdGFn
Z2VycywgX3AxNykgeworICAgICAgICAgICAgICAgIHZhciBfcDE4ID0gX3AxNzsKKyAgICAgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMycsCisg
ICAgICAgICAgICAgICAgICAgIF8wOiBBMihfZWxtX2xhbmckY29yZSRMaXN0X29wc1snOjonXSwg
aW50ZXJ2YWwsIF9wMTguXzApLAorICAgICAgICAgICAgICAgICAgICBfMTogX3AxOC5fMSwKKyAg
ICAgICAgICAgICAgICAgICAgXzI6IF9wMTguXzIKKyAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgfSk7CisgICAgICAgIHZhciBuZXdUYWdnZXJzID0gQTMoX2VsbV9sYW5nJGNvcmUkTGlz
dCRmb2xkbCwgX2VsbV9sYW5nJGNvcmUkVGltZSRhZGRNeVN1YiwgX2VsbV9sYW5nJGNvcmUkRGlj
dCRlbXB0eSwgc3Vicyk7CisgICAgICAgIHZhciBfcDE5ID0gQTYoCisgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSREaWN0JG1lcmdlLAorICAgICAgICAgICAgbGVmdFN0ZXAsCisgICAgICAgICAg
ICBib3RoU3RlcCwKKyAgICAgICAgICAgIHJpZ2h0U3RlcCwKKyAgICAgICAgICAgIG5ld1RhZ2dl
cnMsCisgICAgICAgICAgICBfcDEwLnByb2Nlc3NlcywKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBjdG9yOiAnX1R1cGxlMycsCisgICAgICAgICAgICAgICAgXzA6IF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgW10pLAorICAg
ICAgICAgICAgICAgIF8xOiBfZWxtX2xhbmckY29yZSREaWN0JGVtcHR5LAorICAgICAgICAgICAg
ICAgIF8yOiBfZWxtX2xhbmckY29yZSRUYXNrJHN1Y2NlZWQoCisgICAgICAgICAgICAgICAgICAg
IHtjdG9yOiAnX1R1cGxlMCd9KQorICAgICAgICAgICAgfSk7CisgICAgICAgIHZhciBzcGF3bkxp
c3QgPSBfcDE5Ll8wOworICAgICAgICB2YXIgZXhpc3RpbmdEaWN0ID0gX3AxOS5fMTsKKyAgICAg
ICAgdmFyIGtpbGxUYXNrID0gX3AxOS5fMjsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAgICAgICAga2lsbFRhc2ssCisg
ICAgICAgICAgICBmdW5jdGlvbiAoX3AyMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBBMigK
KyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAgICAg
ICAgICAgICAgICAgICBBMyhfZWxtX2xhbmckY29yZSRUaW1lJHNwYXduSGVscCwgcm91dGVyLCBz
cGF3bkxpc3QsIGV4aXN0aW5nRGljdCksCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChu
ZXdQcm9jZXNzZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmck
Y29yZSRUYXNrJHN1Y2NlZWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTIoX2VsbV9s
YW5nJGNvcmUkVGltZSRTdGF0ZSwgbmV3VGFnZ2VycywgbmV3UHJvY2Vzc2VzKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5n
JGNvcmUkVGltZSRFdmVyeSA9IEYyKAorICAgIGZ1bmN0aW9uIChhLCBiKSB7CisgICAgICAgIHJl
dHVybiB7Y3RvcjogJ0V2ZXJ5JywgXzA6IGEsIF8xOiBifTsKKyAgICB9KTsKK3ZhciBfZWxtX2xh
bmckY29yZSRUaW1lJGV2ZXJ5ID0gRjIoCisgICAgZnVuY3Rpb24gKGludGVydmFsLCB0YWdnZXIp
IHsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFRpbWUkc3Vic2NyaXB0aW9uKAorICAg
ICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkVGltZSRFdmVyeSwgaW50ZXJ2YWwsIHRhZ2dlcikp
OworICAgIH0pOwordmFyIF9lbG1fbGFuZyRjb3JlJFRpbWUkc3ViTWFwID0gRjIoCisgICAgZnVu
Y3Rpb24gKGYsIF9wMjEpIHsKKyAgICAgICAgdmFyIF9wMjIgPSBfcDIxOworICAgICAgICByZXR1
cm4gQTIoCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUaW1lJEV2ZXJ5LAorICAgICAgICAg
ICAgX3AyMi5fMCwKKyAgICAgICAgICAgIGZ1bmN0aW9uIChfcDIzKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGYoCisgICAgICAgICAgICAgICAgICAgIF9wMjIuXzEoX3AyMykpOworICAgICAg
ICAgICAgfSk7CisgICAgfSk7CitfZWxtX2xhbmckY29yZSROYXRpdmVfUGxhdGZvcm0uZWZmZWN0
TWFuYWdlcnNbJ1RpbWUnXSA9IHtwa2c6ICdlbG0tbGFuZy9jb3JlJywgaW5pdDogX2VsbV9sYW5n
JGNvcmUkVGltZSRpbml0LCBvbkVmZmVjdHM6IF9lbG1fbGFuZyRjb3JlJFRpbWUkb25FZmZlY3Rz
LCBvblNlbGZNc2c6IF9lbG1fbGFuZyRjb3JlJFRpbWUkb25TZWxmTXNnLCB0YWc6ICdzdWInLCBz
dWJNYXA6IF9lbG1fbGFuZyRjb3JlJFRpbWUkc3ViTWFwfTsKKworLy9pbXBvcnQgTWF5YmUsIE5h
dGl2ZS5BcnJheSwgTmF0aXZlLkxpc3QsIE5hdGl2ZS5VdGlscywgUmVzdWx0IC8vCisKK3ZhciBf
ZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbiA9IGZ1bmN0aW9uKCkgeworCisKKy8vIENPUkUgREVD
T0RFUlMKKworZnVuY3Rpb24gc3VjY2VlZChtc2cpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAg
Y3RvcjogJzxkZWNvZGVyPicsCisgICAgICAgIHRhZzogJ3N1Y2NlZWQnLAorICAgICAgICBtc2c6
IG1zZworICAgIH07Cit9CisKK2Z1bmN0aW9uIGZhaWwobXNnKQoreworICAgIHJldHVybiB7Cisg
ICAgICAgIGN0b3I6ICc8ZGVjb2Rlcj4nLAorICAgICAgICB0YWc6ICdmYWlsJywKKyAgICAgICAg
bXNnOiBtc2cKKyAgICB9OworfQorCitmdW5jdGlvbiBkZWNvZGVQcmltaXRpdmUodGFnKQorewor
ICAgIHJldHVybiB7CisgICAgICAgIGN0b3I6ICc8ZGVjb2Rlcj4nLAorICAgICAgICB0YWc6IHRh
ZworICAgIH07Cit9CisKK2Z1bmN0aW9uIGRlY29kZUNvbnRhaW5lcih0YWcsIGRlY29kZXIpCit7
CisgICAgcmV0dXJuIHsKKyAgICAgICAgY3RvcjogJzxkZWNvZGVyPicsCisgICAgICAgIHRhZzog
dGFnLAorICAgICAgICBkZWNvZGVyOiBkZWNvZGVyCisgICAgfTsKK30KKworZnVuY3Rpb24gZGVj
b2RlTnVsbCh2YWx1ZSkKK3sKKyAgICByZXR1cm4geworICAgICAgICBjdG9yOiAnPGRlY29kZXI+
JywKKyAgICAgICAgdGFnOiAnbnVsbCcsCisgICAgICAgIHZhbHVlOiB2YWx1ZQorICAgIH07Cit9
CisKK2Z1bmN0aW9uIGRlY29kZUZpZWxkKGZpZWxkLCBkZWNvZGVyKQoreworICAgIHJldHVybiB7
CisgICAgICAgIGN0b3I6ICc8ZGVjb2Rlcj4nLAorICAgICAgICB0YWc6ICdmaWVsZCcsCisgICAg
ICAgIGZpZWxkOiBmaWVsZCwKKyAgICAgICAgZGVjb2RlcjogZGVjb2RlcgorICAgIH07Cit9CisK
K2Z1bmN0aW9uIGRlY29kZUtleVZhbHVlUGFpcnMoZGVjb2RlcikKK3sKKyAgICByZXR1cm4gewor
ICAgICAgICBjdG9yOiAnPGRlY29kZXI+JywKKyAgICAgICAgdGFnOiAna2V5LXZhbHVlJywKKyAg
ICAgICAgZGVjb2RlcjogZGVjb2RlcgorICAgIH07Cit9CisKK2Z1bmN0aW9uIGRlY29kZU9iamVj
dChmLCBkZWNvZGVycykKK3sKKyAgICByZXR1cm4geworICAgICAgICBjdG9yOiAnPGRlY29kZXI+
JywKKyAgICAgICAgdGFnOiAnbWFwLW1hbnknLAorICAgICAgICBmdW5jOiBmLAorICAgICAgICBk
ZWNvZGVyczogZGVjb2RlcnMKKyAgICB9OworfQorCitmdW5jdGlvbiBkZWNvZGVUdXBsZShmLCBk
ZWNvZGVycykKK3sKKyAgICByZXR1cm4geworICAgICAgICBjdG9yOiAnPGRlY29kZXI+JywKKyAg
ICAgICAgdGFnOiAndHVwbGUnLAorICAgICAgICBmdW5jOiBmLAorICAgICAgICBkZWNvZGVyczog
ZGVjb2RlcnMKKyAgICB9OworfQorCitmdW5jdGlvbiBhbmRUaGVuKGRlY29kZXIsIGNhbGxiYWNr
KQoreworICAgIHJldHVybiB7CisgICAgICAgIGN0b3I6ICc8ZGVjb2Rlcj4nLAorICAgICAgICB0
YWc6ICdhbmRUaGVuJywKKyAgICAgICAgZGVjb2RlcjogZGVjb2RlciwKKyAgICAgICAgY2FsbGJh
Y2s6IGNhbGxiYWNrCisgICAgfTsKK30KKworZnVuY3Rpb24gY3VzdG9tQW5kVGhlbihkZWNvZGVy
LCBjYWxsYmFjaykKK3sKKyAgICByZXR1cm4geworICAgICAgICBjdG9yOiAnPGRlY29kZXI+JywK
KyAgICAgICAgdGFnOiAnY3VzdG9tQW5kVGhlbicsCisgICAgICAgIGRlY29kZXI6IGRlY29kZXIs
CisgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjaworICAgIH07Cit9CisKK2Z1bmN0aW9uIG9uZU9m
KGRlY29kZXJzKQoreworICAgIHJldHVybiB7CisgICAgICAgIGN0b3I6ICc8ZGVjb2Rlcj4nLAor
ICAgICAgICB0YWc6ICdvbmVPZicsCisgICAgICAgIGRlY29kZXJzOiBkZWNvZGVycworICAgIH07
Cit9CisKKworLy8gREVDT0RJTkcgT0JKRUNUUworCitmdW5jdGlvbiBkZWNvZGVPYmplY3QxKGYs
IGQxKQoreworICAgIHJldHVybiBkZWNvZGVPYmplY3QoZiwgW2QxXSk7Cit9CisKK2Z1bmN0aW9u
IGRlY29kZU9iamVjdDIoZiwgZDEsIGQyKQoreworICAgIHJldHVybiBkZWNvZGVPYmplY3QoZiwg
W2QxLCBkMl0pOworfQorCitmdW5jdGlvbiBkZWNvZGVPYmplY3QzKGYsIGQxLCBkMiwgZDMpCit7
CisgICAgcmV0dXJuIGRlY29kZU9iamVjdChmLCBbZDEsIGQyLCBkM10pOworfQorCitmdW5jdGlv
biBkZWNvZGVPYmplY3Q0KGYsIGQxLCBkMiwgZDMsIGQ0KQoreworICAgIHJldHVybiBkZWNvZGVP
YmplY3QoZiwgW2QxLCBkMiwgZDMsIGQ0XSk7Cit9CisKK2Z1bmN0aW9uIGRlY29kZU9iamVjdDUo
ZiwgZDEsIGQyLCBkMywgZDQsIGQ1KQoreworICAgIHJldHVybiBkZWNvZGVPYmplY3QoZiwgW2Qx
LCBkMiwgZDMsIGQ0LCBkNV0pOworfQorCitmdW5jdGlvbiBkZWNvZGVPYmplY3Q2KGYsIGQxLCBk
MiwgZDMsIGQ0LCBkNSwgZDYpCit7CisgICAgcmV0dXJuIGRlY29kZU9iamVjdChmLCBbZDEsIGQy
LCBkMywgZDQsIGQ1LCBkNl0pOworfQorCitmdW5jdGlvbiBkZWNvZGVPYmplY3Q3KGYsIGQxLCBk
MiwgZDMsIGQ0LCBkNSwgZDYsIGQ3KQoreworICAgIHJldHVybiBkZWNvZGVPYmplY3QoZiwgW2Qx
LCBkMiwgZDMsIGQ0LCBkNSwgZDYsIGQ3XSk7Cit9CisKK2Z1bmN0aW9uIGRlY29kZU9iamVjdDgo
ZiwgZDEsIGQyLCBkMywgZDQsIGQ1LCBkNiwgZDcsIGQ4KQoreworICAgIHJldHVybiBkZWNvZGVP
YmplY3QoZiwgW2QxLCBkMiwgZDMsIGQ0LCBkNSwgZDYsIGQ3LCBkOF0pOworfQorCisKKy8vIERF
Q09ESU5HIFRVUExFUworCitmdW5jdGlvbiBkZWNvZGVUdXBsZTEoZiwgZDEpCit7CisgICAgcmV0
dXJuIGRlY29kZVR1cGxlKGYsIFtkMV0pOworfQorCitmdW5jdGlvbiBkZWNvZGVUdXBsZTIoZiwg
ZDEsIGQyKQoreworICAgIHJldHVybiBkZWNvZGVUdXBsZShmLCBbZDEsIGQyXSk7Cit9CisKK2Z1
bmN0aW9uIGRlY29kZVR1cGxlMyhmLCBkMSwgZDIsIGQzKQoreworICAgIHJldHVybiBkZWNvZGVU
dXBsZShmLCBbZDEsIGQyLCBkM10pOworfQorCitmdW5jdGlvbiBkZWNvZGVUdXBsZTQoZiwgZDEs
IGQyLCBkMywgZDQpCit7CisgICAgcmV0dXJuIGRlY29kZVR1cGxlKGYsIFtkMSwgZDIsIGQzLCBk
NF0pOworfQorCitmdW5jdGlvbiBkZWNvZGVUdXBsZTUoZiwgZDEsIGQyLCBkMywgZDQsIGQ1KQor
eworICAgIHJldHVybiBkZWNvZGVUdXBsZShmLCBbZDEsIGQyLCBkMywgZDQsIGQ1XSk7Cit9CisK
K2Z1bmN0aW9uIGRlY29kZVR1cGxlNihmLCBkMSwgZDIsIGQzLCBkNCwgZDUsIGQ2KQoreworICAg
IHJldHVybiBkZWNvZGVUdXBsZShmLCBbZDEsIGQyLCBkMywgZDQsIGQ1LCBkNl0pOworfQorCitm
dW5jdGlvbiBkZWNvZGVUdXBsZTcoZiwgZDEsIGQyLCBkMywgZDQsIGQ1LCBkNiwgZDcpCit7Cisg
ICAgcmV0dXJuIGRlY29kZVR1cGxlKGYsIFtkMSwgZDIsIGQzLCBkNCwgZDUsIGQ2LCBkN10pOwor
fQorCitmdW5jdGlvbiBkZWNvZGVUdXBsZTgoZiwgZDEsIGQyLCBkMywgZDQsIGQ1LCBkNiwgZDcs
IGQ4KQoreworICAgIHJldHVybiBkZWNvZGVUdXBsZShmLCBbZDEsIGQyLCBkMywgZDQsIGQ1LCBk
NiwgZDcsIGQ4XSk7Cit9CisKKworLy8gREVDT0RFIEhFTFBFUlMKKworZnVuY3Rpb24gb2sodmFs
dWUpCit7CisgICAgcmV0dXJuIHsgdGFnOiAnb2snLCB2YWx1ZTogdmFsdWUgfTsKK30KKworZnVu
Y3Rpb24gYmFkUHJpbWl0aXZlKHR5cGUsIHZhbHVlKQoreworICAgIHJldHVybiB7IHRhZzogJ3By
aW1pdGl2ZScsIHR5cGU6IHR5cGUsIHZhbHVlOiB2YWx1ZSB9OworfQorCitmdW5jdGlvbiBiYWRJ
bmRleChpbmRleCwgbmVzdGVkUHJvYmxlbXMpCit7CisgICAgcmV0dXJuIHsgdGFnOiAnaW5kZXgn
LCBpbmRleDogaW5kZXgsIHJlc3Q6IG5lc3RlZFByb2JsZW1zIH07Cit9CisKK2Z1bmN0aW9uIGJh
ZEZpZWxkKGZpZWxkLCBuZXN0ZWRQcm9ibGVtcykKK3sKKyAgICByZXR1cm4geyB0YWc6ICdmaWVs
ZCcsIGZpZWxkOiBmaWVsZCwgcmVzdDogbmVzdGVkUHJvYmxlbXMgfTsKK30KKworZnVuY3Rpb24g
YmFkT25lT2YocHJvYmxlbXMpCit7CisgICAgcmV0dXJuIHsgdGFnOiAnb25lT2YnLCBwcm9ibGVt
czogcHJvYmxlbXMgfTsKK30KKworZnVuY3Rpb24gYmFkQ3VzdG9tKG1zZykKK3sKKyAgICByZXR1
cm4geyB0YWc6ICdjdXN0b20nLCBtc2c6IG1zZyB9OworfQorCitmdW5jdGlvbiBiYWQobXNnKQor
eworICAgIHJldHVybiB7IHRhZzogJ2ZhaWwnLCBtc2c6IG1zZyB9OworfQorCitmdW5jdGlvbiBi
YWRUb1N0cmluZyhwcm9ibGVtKQoreworICAgIHZhciBjb250ZXh0ID0gJ18nOworICAgIHdoaWxl
IChwcm9ibGVtKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChwcm9ibGVtLnRhZykKKyAgICAgICAg
eworICAgICAgICAgICAgY2FzZSAncHJpbWl0aXZlJzoKKyAgICAgICAgICAgICAgICByZXR1cm4g
J0V4cGVjdGluZyAnICsgcHJvYmxlbS50eXBlCisgICAgICAgICAgICAgICAgICAgICsgKGNvbnRl
eHQgPT09ICdfJyA/ICcnIDogJyBhdCAnICsgY29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAg
KyAnIGJ1dCBpbnN0ZWFkIGdvdDogJyArIGpzVG9TdHJpbmcocHJvYmxlbS52YWx1ZSk7CisKKyAg
ICAgICAgICAgIGNhc2UgJ2luZGV4JzoKKyAgICAgICAgICAgICAgICBjb250ZXh0ICs9ICdbJyAr
IHByb2JsZW0uaW5kZXggKyAnXSc7CisgICAgICAgICAgICAgICAgcHJvYmxlbSA9IHByb2JsZW0u
cmVzdDsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAnZmllbGQn
OgorICAgICAgICAgICAgICAgIGNvbnRleHQgKz0gJy4nICsgcHJvYmxlbS5maWVsZDsKKyAgICAg
ICAgICAgICAgICBwcm9ibGVtID0gcHJvYmxlbS5yZXN0OworICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICBjYXNlICdvbmVPZic6CisgICAgICAgICAgICAgICAgdmFyIHByb2Js
ZW1zID0gcHJvYmxlbS5wcm9ibGVtczsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHByb2JsZW1zLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcHJvYmxlbXNbaV0gPSBiYWRUb1N0cmluZyhwcm9ibGVtc1tpXSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiAnSSByYW4gaW50byB0aGUgZm9sbG93
aW5nIHByb2JsZW1zJworICAgICAgICAgICAgICAgICAgICArIChjb250ZXh0ID09PSAnXycgPyAn
JyA6ICcgYXQgJyArIGNvbnRleHQpCisgICAgICAgICAgICAgICAgICAgICsgJzpcblxuJyArIHBy
b2JsZW1zLmpvaW4oJ1xuJyk7CisKKyAgICAgICAgICAgIGNhc2UgJ2N1c3RvbSc6CisgICAgICAg
ICAgICAgICAgcmV0dXJuICdBIGBjdXN0b21EZWNvZGVyYCBmYWlsZWQnCisgICAgICAgICAgICAg
ICAgICAgICsgKGNvbnRleHQgPT09ICdfJyA/ICcnIDogJyBhdCAnICsgY29udGV4dCkKKyAgICAg
ICAgICAgICAgICAgICAgKyAnIHdpdGggdGhlIG1lc3NhZ2U6ICcgKyBwcm9ibGVtLm1zZzsKKwor
ICAgICAgICAgICAgY2FzZSAnZmFpbCc6CisgICAgICAgICAgICAgICAgcmV0dXJuICdJIHJhbiBp
bnRvIGEgYGZhaWxgIGRlY29kZXInCisgICAgICAgICAgICAgICAgICAgICsgKGNvbnRleHQgPT09
ICdfJyA/ICcnIDogJyBhdCAnICsgY29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgKyAnOiAn
ICsgcHJvYmxlbS5tc2c7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0aW9uIGpzVG9TdHJp
bmcodmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQKKyAgICAgICAgPyAn
dW5kZWZpbmVkJworICAgICAgICA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTsKK30KKworCisvLyBE
RUNPREUKKworZnVuY3Rpb24gcnVuT25TdHJpbmcoZGVjb2Rlciwgc3RyaW5nKQoreworICAgIHZh
ciBqc29uOworICAgIHRyeQorICAgIHsKKyAgICAgICAganNvbiA9IEpTT04ucGFyc2Uoc3RyaW5n
KTsKKyAgICB9CisgICAgY2F0Y2ggKGUpCisgICAgeworICAgICAgICByZXR1cm4gX2VsbV9sYW5n
JGNvcmUkUmVzdWx0JEVycignR2l2ZW4gYW4gaW52YWxpZCBKU09OOiAnICsgZS5tZXNzYWdlKTsK
KyAgICB9CisgICAgcmV0dXJuIHJ1bihkZWNvZGVyLCBqc29uKTsKK30KKworZnVuY3Rpb24gcnVu
KGRlY29kZXIsIHZhbHVlKQoreworICAgIHZhciByZXN1bHQgPSBydW5IZWxwKGRlY29kZXIsIHZh
bHVlKTsKKyAgICByZXR1cm4gKHJlc3VsdC50YWcgPT09ICdvaycpCisgICAgICAgID8gX2VsbV9s
YW5nJGNvcmUkUmVzdWx0JE9rKHJlc3VsdC52YWx1ZSkKKyAgICAgICAgOiBfZWxtX2xhbmckY29y
ZSRSZXN1bHQkRXJyKGJhZFRvU3RyaW5nKHJlc3VsdCkpOworfQorCitmdW5jdGlvbiBydW5IZWxw
KGRlY29kZXIsIHZhbHVlKQoreworICAgIHN3aXRjaCAoZGVjb2Rlci50YWcpCisgICAgeworICAg
ICAgICBjYXNlICdib29sJzoKKyAgICAgICAgICAgIHJldHVybiAodHlwZW9mIHZhbHVlID09PSAn
Ym9vbGVhbicpCisgICAgICAgICAgICAgICAgPyBvayh2YWx1ZSkKKyAgICAgICAgICAgICAgICA6
IGJhZFByaW1pdGl2ZSgnYSBCb29sJywgdmFsdWUpOworCisgICAgICAgIGNhc2UgJ2ludCc6Cisg
ICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykgeworICAgICAgICAgICAg
ICAgIHJldHVybiBiYWRQcmltaXRpdmUoJ2FuIEludCcsIHZhbHVlKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKC0yMTQ3NDgzNjQ3IDwgdmFsdWUgJiYgdmFsdWUgPCAyMTQ3NDgz
NjQ3ICYmICh2YWx1ZSB8IDApID09PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBv
ayh2YWx1ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0Zpbml0ZSh2YWx1
ZSkgJiYgISh2YWx1ZSAlIDEpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG9rKHZhbHVlKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGJhZFByaW1pdGl2ZSgnYW4gSW50
JywgdmFsdWUpOworCisgICAgICAgIGNhc2UgJ2Zsb2F0JzoKKyAgICAgICAgICAgIHJldHVybiAo
dHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykKKyAgICAgICAgICAgICAgICA/IG9rKHZhbHVlKQor
ICAgICAgICAgICAgICAgIDogYmFkUHJpbWl0aXZlKCdhIEZsb2F0JywgdmFsdWUpOworCisgICAg
ICAgIGNhc2UgJ3N0cmluZyc6CisgICAgICAgICAgICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PT0g
J3N0cmluZycpCisgICAgICAgICAgICAgICAgPyBvayh2YWx1ZSkKKyAgICAgICAgICAgICAgICA6
ICh2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZykKKyAgICAgICAgICAgICAgICAgICAgPyBvayh2YWx1
ZSArICcnKQorICAgICAgICAgICAgICAgICAgICA6IGJhZFByaW1pdGl2ZSgnYSBTdHJpbmcnLCB2
YWx1ZSk7CisKKyAgICAgICAgY2FzZSAnbnVsbCc6CisgICAgICAgICAgICByZXR1cm4gKHZhbHVl
ID09PSBudWxsKQorICAgICAgICAgICAgICAgID8gb2soZGVjb2Rlci52YWx1ZSkKKyAgICAgICAg
ICAgICAgICA6IGJhZFByaW1pdGl2ZSgnbnVsbCcsIHZhbHVlKTsKKworICAgICAgICBjYXNlICd2
YWx1ZSc6CisgICAgICAgICAgICByZXR1cm4gb2sodmFsdWUpOworCisgICAgICAgIGNhc2UgJ2xp
c3QnOgorICAgICAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJhZFByaW1pdGl2ZSgnYSBMaXN0JywgdmFs
dWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgbGlzdCA9IF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9MaXN0Lk5pbDsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSB2YWx1ZS5sZW5n
dGg7IGktLTsgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBy
dW5IZWxwKGRlY29kZXIuZGVjb2RlciwgdmFsdWVbaV0pOworICAgICAgICAgICAgICAgIGlmIChy
ZXN1bHQudGFnICE9PSAnb2snKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGJhZEluZGV4KGksIHJlc3VsdCkKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgbGlzdCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LkNvbnMocmVzdWx0LnZh
bHVlLCBsaXN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBvayhsaXN0KTsK
KworICAgICAgICBjYXNlICdhcnJheSc6CisgICAgICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5j
ZW9mIEFycmF5KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFkUHJp
bWl0aXZlKCdhbiBBcnJheScsIHZhbHVlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
dmFyIGxlbiA9IHZhbHVlLmxlbmd0aDsKKyAgICAgICAgICAgIHZhciBhcnJheSA9IG5ldyBBcnJh
eShsZW4pOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IGxlbjsgaS0tOyApCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJ1bkhlbHAoZGVjb2Rlci5kZWNvZGVy
LCB2YWx1ZVtpXSk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC50YWcgIT09ICdvaycpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFkSW5kZXgoaSwg
cmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBy
ZXN1bHQudmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gb2soX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX0FycmF5LmZyb21KU0FycmF5KGFycmF5KSk7CisKKyAgICAgICAgY2Fz
ZSAnbWF5YmUnOgorICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJ1bkhlbHAoZGVjb2Rlci5kZWNv
ZGVyLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gKHJlc3VsdC50YWcgPT09ICdvaycpCisg
ICAgICAgICAgICAgICAgPyBvayhfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0KHJlc3VsdC52YWx1
ZSkpCisgICAgICAgICAgICAgICAgOiBvayhfZWxtX2xhbmckY29yZSRNYXliZSROb3RoaW5nKTsK
KworICAgICAgICBjYXNlICdmaWVsZCc6CisgICAgICAgICAgICB2YXIgZmllbGQgPSBkZWNvZGVy
LmZpZWxkOworICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFs
dWUgPT09IG51bGwgfHwgIShmaWVsZCBpbiB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGJhZFByaW1pdGl2ZSgnYW4gb2JqZWN0IHdpdGggYSBmaWVsZCBuYW1l
ZCBgJyArIGZpZWxkICsgJ2AnLCB2YWx1ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHZhciByZXN1bHQgPSBydW5IZWxwKGRlY29kZXIuZGVjb2RlciwgdmFsdWVbZmllbGRdKTsKKyAg
ICAgICAgICAgIHJldHVybiAocmVzdWx0LnRhZyA9PT0gJ29rJykKKyAgICAgICAgICAgICAgICA/
IHJlc3VsdAorICAgICAgICAgICAgICAgIDogYmFkRmllbGQoZmllbGQsIHJlc3VsdCk7CisKKyAg
ICAgICAgY2FzZSAna2V5LXZhbHVlJzoKKyAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09
ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJhZFByaW1pdGl2ZSgnYW4gb2Jq
ZWN0JywgdmFsdWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIga2V5VmFsdWVQ
YWlycyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0Lk5pbDsKKyAgICAgICAgICAgIGZvciAo
dmFyIGtleSBpbiB2YWx1ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgcmVz
dWx0ID0gcnVuSGVscChkZWNvZGVyLmRlY29kZXIsIHZhbHVlW2tleV0pOworICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHQudGFnICE9PSAnb2snKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGJhZEZpZWxkKGtleSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgdmFyIHBhaXIgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRp
bHMuVHVwbGUyKGtleSwgcmVzdWx0LnZhbHVlKTsKKyAgICAgICAgICAgICAgICBrZXlWYWx1ZVBh
aXJzID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuQ29ucyhwYWlyLCBrZXlWYWx1ZVBhaXJz
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBvayhrZXlWYWx1ZVBhaXJzKTsK
KworICAgICAgICBjYXNlICdtYXAtbWFueSc6CisgICAgICAgICAgICB2YXIgYW5zd2VyID0gZGVj
b2Rlci5mdW5jOworICAgICAgICAgICAgdmFyIGRlY29kZXJzID0gZGVjb2Rlci5kZWNvZGVyczsK
KyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVjb2RlcnMubGVuZ3RoOyBpKyspCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJ1bkhlbHAoZGVjb2Rl
cnNbaV0sIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnRhZyAhPT0gJ29rJykK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFuc3dlciA9IGFuc3dlcihyZXN1bHQu
dmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG9rKGFuc3dlcik7CisK
KyAgICAgICAgY2FzZSAndHVwbGUnOgorICAgICAgICAgICAgdmFyIGRlY29kZXJzID0gZGVjb2Rl
ci5kZWNvZGVyczsKKyAgICAgICAgICAgIHZhciBsZW4gPSBkZWNvZGVycy5sZW5ndGg7CisKKyAg
ICAgICAgICAgIGlmICggISh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB8fCB2YWx1ZS5sZW5ndGgg
IT09IGxlbiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJhZFByaW1p
dGl2ZSgnYSBUdXBsZSB3aXRoICcgKyBsZW4gKyAnIGVudHJpZXMnLCB2YWx1ZSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHZhciBhbnN3ZXIgPSBkZWNvZGVyLmZ1bmM7CisgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHZhciByZXN1bHQgPSBydW5IZWxwKGRlY29kZXJzW2ldLCB2YWx1ZVtpXSk7Cisg
ICAgICAgICAgICAgICAgaWYgKHJlc3VsdC50YWcgIT09ICdvaycpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFkSW5kZXgoaSwgcmVzdWx0KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYW5zd2VyID0gYW5zd2VyKHJlc3VsdC52YWx1
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gb2soYW5zd2VyKTsKKworICAg
ICAgICBjYXNlICdjdXN0b21BbmRUaGVuJzoKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBydW5I
ZWxwKGRlY29kZXIuZGVjb2RlciwgdmFsdWUpOworICAgICAgICAgICAgaWYgKHJlc3VsdC50YWcg
IT09ICdvaycpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciByZWFsUmVzdWx0ID0gZGVjb2Rlci5jYWxs
YmFjayhyZXN1bHQudmFsdWUpOworICAgICAgICAgICAgaWYgKHJlYWxSZXN1bHQuY3RvciA9PT0g
J0VycicpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJhZEN1c3RvbShy
ZWFsUmVzdWx0Ll8wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBvayhyZWFs
UmVzdWx0Ll8wKTsKKworICAgICAgICBjYXNlICdhbmRUaGVuJzoKKyAgICAgICAgICAgIHZhciBy
ZXN1bHQgPSBydW5IZWxwKGRlY29kZXIuZGVjb2RlciwgdmFsdWUpOworICAgICAgICAgICAgcmV0
dXJuIChyZXN1bHQudGFnICE9PSAnb2snKQorICAgICAgICAgICAgICAgID8gcmVzdWx0CisgICAg
ICAgICAgICAgICAgOiBydW5IZWxwKGRlY29kZXIuY2FsbGJhY2socmVzdWx0LnZhbHVlKSwgdmFs
dWUpOworCisgICAgICAgIGNhc2UgJ29uZU9mJzoKKyAgICAgICAgICAgIHZhciBlcnJvcnMgPSBb
XTsKKyAgICAgICAgICAgIHZhciB0ZW1wID0gZGVjb2Rlci5kZWNvZGVyczsKKyAgICAgICAgICAg
IHdoaWxlICh0ZW1wLmN0b3IgIT09ICdbXScpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgdmFyIHJlc3VsdCA9IHJ1bkhlbHAodGVtcC5fMCwgdmFsdWUpOworCisgICAgICAgICAgICAg
ICAgaWYgKHJlc3VsdC50YWcgPT09ICdvaycpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIGVycm9ycy5wdXNoKHJlc3VsdCk7CisKKyAgICAgICAgICAgICAgICB0ZW1wID0gdGVt
cC5fMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBiYWRPbmVPZihlcnJvcnMp
OworCisgICAgICAgIGNhc2UgJ2ZhaWwnOgorICAgICAgICAgICAgcmV0dXJuIGJhZChkZWNvZGVy
Lm1zZyk7CisKKyAgICAgICAgY2FzZSAnc3VjY2VlZCc6CisgICAgICAgICAgICByZXR1cm4gb2so
ZGVjb2Rlci5tc2cpOworICAgIH0KK30KKworCisvLyBFUVVBTElUWQorCitmdW5jdGlvbiBlcXVh
bGl0eShhLCBiKQoreworICAgIGlmIChhID09PSBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgaWYgKGEudGFnICE9PSBiLnRhZykKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGEudGFnKQorICAgIHsKKyAgICAgICAg
Y2FzZSAnc3VjY2VlZCc6CisgICAgICAgIGNhc2UgJ2ZhaWwnOgorICAgICAgICAgICAgcmV0dXJu
IGEubXNnID09PSBiLm1zZzsKKworICAgICAgICBjYXNlICdib29sJzoKKyAgICAgICAgY2FzZSAn
aW50JzoKKyAgICAgICAgY2FzZSAnZmxvYXQnOgorICAgICAgICBjYXNlICdzdHJpbmcnOgorICAg
ICAgICBjYXNlICd2YWx1ZSc6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBj
YXNlICdudWxsJzoKKyAgICAgICAgICAgIHJldHVybiBhLnZhbHVlID09PSBiLnZhbHVlOworCisg
ICAgICAgIGNhc2UgJ2xpc3QnOgorICAgICAgICBjYXNlICdhcnJheSc6CisgICAgICAgIGNhc2Ug
J21heWJlJzoKKyAgICAgICAgY2FzZSAna2V5LXZhbHVlJzoKKyAgICAgICAgICAgIHJldHVybiBl
cXVhbGl0eShhLmRlY29kZXIsIGIuZGVjb2Rlcik7CisKKyAgICAgICAgY2FzZSAnZmllbGQnOgor
ICAgICAgICAgICAgcmV0dXJuIGEuZmllbGQgPT09IGIuZmllbGQgJiYgZXF1YWxpdHkoYS5kZWNv
ZGVyLCBiLmRlY29kZXIpOworCisgICAgICAgIGNhc2UgJ21hcC1tYW55JzoKKyAgICAgICAgY2Fz
ZSAndHVwbGUnOgorICAgICAgICAgICAgaWYgKGEuZnVuYyAhPT0gYi5mdW5jKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBsaXN0RXF1YWxpdHkoYS5kZWNvZGVycywgYi5kZWNvZGVycyk7CisKKyAg
ICAgICAgY2FzZSAnYW5kVGhlbic6CisgICAgICAgIGNhc2UgJ2N1c3RvbUFuZFRoZW4nOgorICAg
ICAgICAgICAgcmV0dXJuIGEuY2FsbGJhY2sgPT09IGIuY2FsbGJhY2sgJiYgZXF1YWxpdHkoYS5k
ZWNvZGVyLCBiLmRlY29kZXIpOworCisgICAgICAgIGNhc2UgJ29uZU9mJzoKKyAgICAgICAgICAg
IHJldHVybiBsaXN0RXF1YWxpdHkoYS5kZWNvZGVycywgYi5kZWNvZGVycyk7CisgICAgfQorfQor
CitmdW5jdGlvbiBsaXN0RXF1YWxpdHkoYURlY29kZXJzLCBiRGVjb2RlcnMpCit7CisgICAgdmFy
IGxlbiA9IGFEZWNvZGVycy5sZW5ndGg7CisgICAgaWYgKGxlbiAhPT0gYkRlY29kZXJzLmxlbmd0
aCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBsZW47IGkrKykKKyAgICB7CisgICAgICAgIGlmICghZXF1YWxpdHkoYURlY29kZXJz
W2ldLCBiRGVjb2RlcnNbaV0pKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKKworLy8gRU5DT0RFCisK
K2Z1bmN0aW9uIGVuY29kZShpbmRlbnRMZXZlbCwgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTT04u
c3RyaW5naWZ5KHZhbHVlLCBudWxsLCBpbmRlbnRMZXZlbCk7Cit9CisKK2Z1bmN0aW9uIGlkZW50
aXR5KHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZTsKK30KKworZnVuY3Rpb24gZW5jb2RlT2Jq
ZWN0KGtleVZhbHVlUGFpcnMpCit7CisgICAgdmFyIG9iaiA9IHt9OworICAgIHdoaWxlIChrZXlW
YWx1ZVBhaXJzLmN0b3IgIT09ICdbXScpCisgICAgeworICAgICAgICB2YXIgcGFpciA9IGtleVZh
bHVlUGFpcnMuXzA7CisgICAgICAgIG9ialtwYWlyLl8wXSA9IHBhaXIuXzE7CisgICAgICAgIGtl
eVZhbHVlUGFpcnMgPSBrZXlWYWx1ZVBhaXJzLl8xOworICAgIH0KKyAgICByZXR1cm4gb2JqOwor
fQorCityZXR1cm4geworICAgIGVuY29kZTogRjIoZW5jb2RlKSwKKyAgICBydW5PblN0cmluZzog
RjIocnVuT25TdHJpbmcpLAorICAgIHJ1bjogRjIocnVuKSwKKworICAgIGRlY29kZU51bGw6IGRl
Y29kZU51bGwsCisgICAgZGVjb2RlUHJpbWl0aXZlOiBkZWNvZGVQcmltaXRpdmUsCisgICAgZGVj
b2RlQ29udGFpbmVyOiBGMihkZWNvZGVDb250YWluZXIpLAorCisgICAgZGVjb2RlRmllbGQ6IEYy
KGRlY29kZUZpZWxkKSwKKworICAgIGRlY29kZU9iamVjdDE6IEYyKGRlY29kZU9iamVjdDEpLAor
ICAgIGRlY29kZU9iamVjdDI6IEYzKGRlY29kZU9iamVjdDIpLAorICAgIGRlY29kZU9iamVjdDM6
IEY0KGRlY29kZU9iamVjdDMpLAorICAgIGRlY29kZU9iamVjdDQ6IEY1KGRlY29kZU9iamVjdDQp
LAorICAgIGRlY29kZU9iamVjdDU6IEY2KGRlY29kZU9iamVjdDUpLAorICAgIGRlY29kZU9iamVj
dDY6IEY3KGRlY29kZU9iamVjdDYpLAorICAgIGRlY29kZU9iamVjdDc6IEY4KGRlY29kZU9iamVj
dDcpLAorICAgIGRlY29kZU9iamVjdDg6IEY5KGRlY29kZU9iamVjdDgpLAorICAgIGRlY29kZUtl
eVZhbHVlUGFpcnM6IGRlY29kZUtleVZhbHVlUGFpcnMsCisKKyAgICBkZWNvZGVUdXBsZTE6IEYy
KGRlY29kZVR1cGxlMSksCisgICAgZGVjb2RlVHVwbGUyOiBGMyhkZWNvZGVUdXBsZTIpLAorICAg
IGRlY29kZVR1cGxlMzogRjQoZGVjb2RlVHVwbGUzKSwKKyAgICBkZWNvZGVUdXBsZTQ6IEY1KGRl
Y29kZVR1cGxlNCksCisgICAgZGVjb2RlVHVwbGU1OiBGNihkZWNvZGVUdXBsZTUpLAorICAgIGRl
Y29kZVR1cGxlNjogRjcoZGVjb2RlVHVwbGU2KSwKKyAgICBkZWNvZGVUdXBsZTc6IEY4KGRlY29k
ZVR1cGxlNyksCisgICAgZGVjb2RlVHVwbGU4OiBGOShkZWNvZGVUdXBsZTgpLAorCisgICAgYW5k
VGhlbjogRjIoYW5kVGhlbiksCisgICAgY3VzdG9tQW5kVGhlbjogRjIoY3VzdG9tQW5kVGhlbiks
CisgICAgZmFpbDogZmFpbCwKKyAgICBzdWNjZWVkOiBzdWNjZWVkLAorICAgIG9uZU9mOiBvbmVP
ZiwKKworICAgIGlkZW50aXR5OiBpZGVudGl0eSwKKyAgICBlbmNvZGVOdWxsOiBudWxsLAorICAg
IGVuY29kZUFycmF5OiBfZWxtX2xhbmckY29yZSROYXRpdmVfQXJyYXkudG9KU0FycmF5LAorICAg
IGVuY29kZUxpc3Q6IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LnRvQXJyYXksCisgICAgZW5j
b2RlT2JqZWN0OiBlbmNvZGVPYmplY3QsCisKKyAgICBlcXVhbGl0eTogZXF1YWxpdHkKK307CisK
K30oKTsKKwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRW5jb2RlJGxpc3QgPSBfZWxtX2xhbmck
Y29yZSROYXRpdmVfSnNvbi5lbmNvZGVMaXN0OwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRW5j
b2RlJGFycmF5ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZW5jb2RlQXJyYXk7Cit2YXIg
X2VsbV9sYW5nJGNvcmUkSnNvbl9FbmNvZGUkb2JqZWN0ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X0pzb24uZW5jb2RlT2JqZWN0OwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRW5jb2RlJG51bGwg
PSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5lbmNvZGVOdWxsOwordmFyIF9lbG1fbGFuZyRj
b3JlJEpzb25fRW5jb2RlJGJvb2wgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5pZGVudGl0
eTsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0VuY29kZSRmbG9hdCA9IF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9Kc29uLmlkZW50aXR5OwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRW5jb2RlJGlu
dCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmlkZW50aXR5OwordmFyIF9lbG1fbGFuZyRj
b3JlJEpzb25fRW5jb2RlJHN0cmluZyA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmlkZW50
aXR5OwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRW5jb2RlJGVuY29kZSA9IF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9Kc29uLmVuY29kZTsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0VuY29kZSRW
YWx1ZSA9IHtjdG9yOiAnVmFsdWUnfTsKKwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2Rl
JHR1cGxlOCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmRlY29kZVR1cGxlODsKK3ZhciBf
ZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSR0dXBsZTcgPSBfZWxtX2xhbmckY29yZSROYXRpdmVf
SnNvbi5kZWNvZGVUdXBsZTc7Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkdHVwbGU2
ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVjb2RlVHVwbGU2OwordmFyIF9lbG1fbGFu
ZyRjb3JlJEpzb25fRGVjb2RlJHR1cGxlNSA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmRl
Y29kZVR1cGxlNTsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSR0dXBsZTQgPSBfZWxt
X2xhbmckY29yZSROYXRpdmVfSnNvbi5kZWNvZGVUdXBsZTQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUk
SnNvbl9EZWNvZGUkdHVwbGUzID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVjb2RlVHVw
bGUzOwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJHR1cGxlMiA9IF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9Kc29uLmRlY29kZVR1cGxlMjsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0Rl
Y29kZSR0dXBsZTEgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5kZWNvZGVUdXBsZTE7Cit2
YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkc3VjY2VlZCA9IF9lbG1fbGFuZyRjb3JlJE5h
dGl2ZV9Kc29uLnN1Y2NlZWQ7Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkZmFpbCA9
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmZhaWw7Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNv
bl9EZWNvZGUkYW5kVGhlbiA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmFuZFRoZW47Cit2
YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkY3VzdG9tRGVjb2RlciA9IF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9Kc29uLmN1c3RvbUFuZFRoZW47Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9E
ZWNvZGUkZGVjb2RlVmFsdWUgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5ydW47Cit2YXIg
X2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkdmFsdWUgPSBfZWxtX2xhbmckY29yZSROYXRpdmVf
SnNvbi5kZWNvZGVQcmltaXRpdmUoJ3ZhbHVlJyk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9E
ZWNvZGUkbWF5YmUgPSBmdW5jdGlvbiAoZGVjb2RlcikgeworICAgIHJldHVybiBBMihfZWxtX2xh
bmckY29yZSROYXRpdmVfSnNvbi5kZWNvZGVDb250YWluZXIsICdtYXliZScsIGRlY29kZXIpOwor
fTsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRudWxsID0gX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX0pzb24uZGVjb2RlTnVsbDsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRh
cnJheSA9IGZ1bmN0aW9uIChkZWNvZGVyKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9Kc29uLmRlY29kZUNvbnRhaW5lciwgJ2FycmF5JywgZGVjb2Rlcik7Cit9OwordmFy
IF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJGxpc3QgPSBmdW5jdGlvbiAoZGVjb2Rlcikgewor
ICAgIHJldHVybiBBMihfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5kZWNvZGVDb250YWluZXIs
ICdsaXN0JywgZGVjb2Rlcik7Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJGJv
b2wgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNvbi5kZWNvZGVQcmltaXRpdmUoJ2Jvb2wnKTsK
K3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRpbnQgPSBfZWxtX2xhbmckY29yZSROYXRp
dmVfSnNvbi5kZWNvZGVQcmltaXRpdmUoJ2ludCcpOwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25f
RGVjb2RlJGZsb2F0ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVjb2RlUHJpbWl0aXZl
KCdmbG9hdCcpOwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJHN0cmluZyA9IF9lbG1f
bGFuZyRjb3JlJE5hdGl2ZV9Kc29uLmRlY29kZVByaW1pdGl2ZSgnc3RyaW5nJyk7Cit2YXIgX2Vs
bV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkb25lT2YgPSBfZWxtX2xhbmckY29yZSROYXRpdmVfSnNv
bi5vbmVPZjsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRrZXlWYWx1ZVBhaXJzID0g
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVjb2RlS2V5VmFsdWVQYWlyczsKK3ZhciBfZWxt
X2xhbmckY29yZSRKc29uX0RlY29kZSRvYmplY3Q4ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pz
b24uZGVjb2RlT2JqZWN0ODsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRvYmplY3Q3
ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVjb2RlT2JqZWN0NzsKK3ZhciBfZWxtX2xh
bmckY29yZSRKc29uX0RlY29kZSRvYmplY3Q2ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24u
ZGVjb2RlT2JqZWN0NjsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRvYmplY3Q1ID0g
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVjb2RlT2JqZWN0NTsKK3ZhciBfZWxtX2xhbmck
Y29yZSRKc29uX0RlY29kZSRvYmplY3Q0ID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVj
b2RlT2JqZWN0NDsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRvYmplY3QzID0gX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVjb2RlT2JqZWN0MzsKK3ZhciBfZWxtX2xhbmckY29y
ZSRKc29uX0RlY29kZSRvYmplY3QyID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVjb2Rl
T2JqZWN0MjsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRvYmplY3QxID0gX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX0pzb24uZGVjb2RlT2JqZWN0MTsKK3ZhciBfZWxtX2xhbmckY29yZSRK
c29uX0RlY29kZV9vcHMgPSBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZV9vcHMgfHwge307Citf
ZWxtX2xhbmckY29yZSRKc29uX0RlY29kZV9vcHNbJzo9J10gPSBfZWxtX2xhbmckY29yZSROYXRp
dmVfSnNvbi5kZWNvZGVGaWVsZDsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRhdCA9
IEYyKAorICAgIGZ1bmN0aW9uIChmaWVsZHMsIGRlY29kZXIpIHsKKyAgICAgICAgcmV0dXJuIEEz
KAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRmb2xkciwKKyAgICAgICAgICAgIEYy
KAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh4LCB5KSB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBBMihfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZV9vcHNbJzo9J10sIHgsIHkpOwor
ICAgICAgICAgICAgICAgIH0pLAorICAgICAgICAgICAgZGVjb2RlciwKKyAgICAgICAgICAgIGZp
ZWxkcyk7CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkZGVjb2RlU3Ry
aW5nID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24ucnVuT25TdHJpbmc7Cit2YXIgX2VsbV9s
YW5nJGNvcmUkSnNvbl9EZWNvZGUkbWFwID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0pzb24uZGVj
b2RlT2JqZWN0MTsKK3ZhciBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRkaWN0ID0gZnVuY3Rp
b24gKGRlY29kZXIpIHsKKyAgICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJEpz
b25fRGVjb2RlJG1hcCwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkRGljdCRmcm9tTGlzdCwKKyAg
ICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUka2V5VmFsdWVQYWlycyhkZWNvZGVyKSk7
Cit9OwordmFyIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJERlY29kZXIgPSB7Y3RvcjogJ0Rl
Y29kZXInfTsKKwordmFyIF9lbG1fbGFuZyRjb3JlJFByb2Nlc3Mka2lsbCA9IF9lbG1fbGFuZyRj
b3JlJE5hdGl2ZV9TY2hlZHVsZXIua2lsbDsKK3ZhciBfZWxtX2xhbmckY29yZSRQcm9jZXNzJHNs
ZWVwID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5zbGVlcDsKK3ZhciBfZWxtX2xh
bmckY29yZSRQcm9jZXNzJHNwYXduID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5z
cGF3bjsKKwordmFyIF9lbG1fbGFuZyRkb20kTmF0aXZlX0RvbSA9IGZ1bmN0aW9uKCkgeworCitm
dW5jdGlvbiBvbihub2RlKQoreworICAgIHJldHVybiBmdW5jdGlvbihldmVudE5hbWUsIGRlY29k
ZXIsIHRvVGFzaykKKyAgICB7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVf
U2NoZWR1bGVyLm5hdGl2ZUJpbmRpbmcoZnVuY3Rpb24oY2FsbGJhY2spIHsKKworICAgICAgICAg
ICAgZnVuY3Rpb24gcGVyZm9ybVRhc2soZXZlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgdmFyIHJlc3VsdCA9IEEyKF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJGRlY29kZVZh
bHVlLCBkZWNvZGVyLCBldmVudCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jdG9yID09
PSAnT2snKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX1NjaGVkdWxlci5yYXdTcGF3bih0b1Rhc2socmVzdWx0Ll8wKSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBub2RlLmFkZEV2ZW50
TGlzdGVuZXIoZXZlbnROYW1lLCBwZXJmb3JtVGFzayk7CisKKyAgICAgICAgICAgIHJldHVybiBm
dW5jdGlvbigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVFdmVu
dExpc3RlbmVyKGV2ZW50TmFtZSwgcGVyZm9ybVRhc2spOworICAgICAgICAgICAgfTsKKyAgICAg
ICAgfSk7CisgICAgfTsKK30KKwordmFyIHJBRiA9IHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJh
bWUgIT09ICd1bmRlZmluZWQnCisgICAgPyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUKKyAgICA6IGZ1
bmN0aW9uKGNhbGxiYWNrKSB7IGNhbGxiYWNrKCk7IH07CisKK2Z1bmN0aW9uIHdpdGhOb2RlKGlk
LCBkb1N0dWZmKQoreworICAgIHJldHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfU2NoZWR1bGVy
Lm5hdGl2ZUJpbmRpbmcoZnVuY3Rpb24oY2FsbGJhY2spCisgICAgeworICAgICAgICByQUYoZnVu
Y3Rpb24oKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKGlkKTsKKyAgICAgICAgICAgIGlmIChub2RlID09PSBudWxsKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGNhbGxiYWNrKF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hl
ZHVsZXIuZmFpbCh7IGN0b3I6ICdOb3RGb3VuZCcsIF8wOiBpZCB9KSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FsbGJhY2soX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX1NjaGVkdWxlci5zdWNjZWVkKGRvU3R1ZmYobm9kZSkpKTsKKyAgICAgICAg
fSk7CisgICAgfSk7Cit9CisKKworLy8gRk9DVVMKKworZnVuY3Rpb24gZm9jdXMoaWQpCit7Cisg
ICAgcmV0dXJuIHdpdGhOb2RlKGlkLCBmdW5jdGlvbihub2RlKSB7CisgICAgICAgIG5vZGUuZm9j
dXMoKTsKKyAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy5UdXBsZTA7
CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIGJsdXIoaWQpCit7CisgICAgcmV0dXJuIHdpdGhOb2Rl
KGlkLCBmdW5jdGlvbihub2RlKSB7CisgICAgICAgIG5vZGUuYmx1cigpOworICAgICAgICByZXR1
cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLlR1cGxlMDsKKyAgICB9KTsKK30KKworCisv
LyBTQ1JPTExJTkcKKworZnVuY3Rpb24gZ2V0U2Nyb2xsVG9wKGlkKQoreworICAgIHJldHVybiB3
aXRoTm9kZShpZCwgZnVuY3Rpb24obm9kZSkgeworICAgICAgICByZXR1cm4gbm9kZS5zY3JvbGxU
b3A7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHNldFNjcm9sbFRvcChpZCwgZGVzaXJlZFNjcm9s
bFRvcCkKK3sKKyAgICByZXR1cm4gd2l0aE5vZGUoaWQsIGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAg
ICAgbm9kZS5zY3JvbGxUb3AgPSBkZXNpcmVkU2Nyb2xsVG9wOworICAgICAgICByZXR1cm4gX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLlR1cGxlMDsKKyAgICB9KTsKK30KKworZnVuY3Rpb24g
dG9Cb3R0b20oaWQpCit7CisgICAgcmV0dXJuIHdpdGhOb2RlKGlkLCBmdW5jdGlvbihub2RlKSB7
CisgICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7CisgICAgICAgIHJl
dHVybiBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuVHVwbGUwOworICAgIH0pOworfQorCitm
dW5jdGlvbiBnZXRTY3JvbGxMZWZ0KGlkKQoreworICAgIHJldHVybiB3aXRoTm9kZShpZCwgZnVu
Y3Rpb24obm9kZSkgeworICAgICAgICByZXR1cm4gbm9kZS5zY3JvbGxMZWZ0OworICAgIH0pOwor
fQorCitmdW5jdGlvbiBzZXRTY3JvbGxMZWZ0KGlkLCBkZXNpcmVkU2Nyb2xsTGVmdCkKK3sKKyAg
ICByZXR1cm4gd2l0aE5vZGUoaWQsIGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgbm9kZS5zY3Jv
bGxMZWZ0ID0gZGVzaXJlZFNjcm9sbExlZnQ7CisgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29y
ZSROYXRpdmVfVXRpbHMuVHVwbGUwOworICAgIH0pOworfQorCitmdW5jdGlvbiB0b1JpZ2h0KGlk
KQoreworICAgIHJldHVybiB3aXRoTm9kZShpZCwgZnVuY3Rpb24obm9kZSkgeworICAgICAgICBu
b2RlLnNjcm9sbExlZnQgPSBub2RlLnNjcm9sbFdpZHRoOworICAgICAgICByZXR1cm4gX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX1V0aWxzLlR1cGxlMDsKKyAgICB9KTsKK30KKworCisvLyBTSVpFCisK
K2Z1bmN0aW9uIHdpZHRoKG9wdGlvbnMsIGlkKQoreworICAgIHJldHVybiB3aXRoTm9kZShpZCwg
ZnVuY3Rpb24obm9kZSkgeworICAgICAgICBzd2l0Y2ggKG9wdGlvbnMuY3RvcikKKyAgICAgICAg
eworICAgICAgICAgICAgY2FzZSAnQ29udGVudCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5v
ZGUuc2Nyb2xsV2lkdGg7CisgICAgICAgICAgICBjYXNlICdWaXNpYmxlQ29udGVudCc6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2xpZW50V2lkdGg7CisgICAgICAgICAgICBjYXNlICdW
aXNpYmxlQ29udGVudFdpdGhCb3JkZXJzJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5v
ZmZzZXRXaWR0aDsKKyAgICAgICAgICAgIGNhc2UgJ1Zpc2libGVDb250ZW50V2l0aEJvcmRlcnNB
bmRNYXJnaW5zJzoKKyAgICAgICAgICAgICAgICB2YXIgcmVjdCA9IG5vZGUuZ2V0Qm91bmRpbmdD
bGllbnRSZWN0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlY3QucmlnaHQgLSByZWN0Lmxl
ZnQ7CisgICAgICAgIH0KKyAgICB9KTsKK30KKworZnVuY3Rpb24gaGVpZ2h0KG9wdGlvbnMsIGlk
KQoreworICAgIHJldHVybiB3aXRoTm9kZShpZCwgZnVuY3Rpb24obm9kZSkgeworICAgICAgICBz
d2l0Y2ggKG9wdGlvbnMuY3RvcikKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSAnQ29udGVu
dCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuc2Nyb2xsSGVpZ2h0OworICAgICAgICAg
ICAgY2FzZSAnVmlzaWJsZUNvbnRlbnQnOgorICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNs
aWVudEhlaWdodDsKKyAgICAgICAgICAgIGNhc2UgJ1Zpc2libGVDb250ZW50V2l0aEJvcmRlcnMn
OgorICAgICAgICAgICAgICAgIHJldHVybiBub2RlLm9mZnNldEhlaWdodDsKKyAgICAgICAgICAg
IGNhc2UgJ1Zpc2libGVDb250ZW50V2l0aEJvcmRlcnNBbmRNYXJnaW5zJzoKKyAgICAgICAgICAg
ICAgICB2YXIgcmVjdCA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlY3QuYm90dG9tIC0gcmVjdC50b3A7CisgICAgICAgIH0KKyAgICB9KTsK
K30KKworcmV0dXJuIHsKKyAgICBvbkRvY3VtZW50OiBGMyhvbihkb2N1bWVudCkpLAorICAgIG9u
V2luZG93OiBGMyhvbih3aW5kb3cpKSwKKworICAgIGZvY3VzOiBmb2N1cywKKyAgICBibHVyOiBi
bHVyLAorCisgICAgZ2V0U2Nyb2xsVG9wOiBnZXRTY3JvbGxUb3AsCisgICAgc2V0U2Nyb2xsVG9w
OiBGMihzZXRTY3JvbGxUb3ApLAorICAgIGdldFNjcm9sbExlZnQ6IGdldFNjcm9sbExlZnQsCisg
ICAgc2V0U2Nyb2xsTGVmdDogRjIoc2V0U2Nyb2xsTGVmdCksCisgICAgdG9Cb3R0b206IHRvQm90
dG9tLAorICAgIHRvUmlnaHQ6IHRvUmlnaHQsCisKKyAgICBoZWlnaHQ6IEYyKGhlaWdodCksCisg
ICAgd2lkdGg6IEYyKHdpZHRoKQorfTsKKworfSgpOworCit2YXIgX2VsbV9sYW5nJGRvbSREb20k
Ymx1ciA9IF9lbG1fbGFuZyRkb20kTmF0aXZlX0RvbS5ibHVyOwordmFyIF9lbG1fbGFuZyRkb20k
RG9tJGZvY3VzID0gX2VsbV9sYW5nJGRvbSROYXRpdmVfRG9tLmZvY3VzOwordmFyIF9lbG1fbGFu
ZyRkb20kRG9tJE5vdEZvdW5kID0gZnVuY3Rpb24gKGEpIHsKKyAgICByZXR1cm4ge2N0b3I6ICdO
b3RGb3VuZCcsIF8wOiBhfTsKK307CisKK3ZhciBfZWxtX2xhbmckZG9tJERvbV9Mb3dMZXZlbCRv
bldpbmRvdyA9IF9lbG1fbGFuZyRkb20kTmF0aXZlX0RvbS5vbldpbmRvdzsKK3ZhciBfZWxtX2xh
bmckZG9tJERvbV9Mb3dMZXZlbCRvbkRvY3VtZW50ID0gX2VsbV9sYW5nJGRvbSROYXRpdmVfRG9t
Lm9uRG9jdW1lbnQ7CisKKy8vaW1wb3J0IE5hdGl2ZS5Kc29uIC8vCisKK3ZhciBfZWxtX2xhbmck
dmlydHVhbF9kb20kTmF0aXZlX1ZpcnR1YWxEb20gPSBmdW5jdGlvbigpIHsKKwordmFyIFNUWUxF
X0tFWSA9ICdTVFlMRSc7Cit2YXIgRVZFTlRfS0VZID0gJ0VWRU5UJzsKK3ZhciBBVFRSX0tFWSA9
ICdBVFRSJzsKK3ZhciBBVFRSX05TX0tFWSA9ICdBVFRSX05TJzsKKworCisKKy8vLy8vLy8vLy8v
LyAgVklSVFVBTCBET00gTk9ERVMgIC8vLy8vLy8vLy8vLworCisKK2Z1bmN0aW9uIHRleHQoc3Ry
aW5nKQoreworICAgIHJldHVybiB7CisgICAgICAgIHR5cGU6ICd0ZXh0JywKKyAgICAgICAgdGV4
dDogc3RyaW5nCisgICAgfTsKK30KKworCitmdW5jdGlvbiBub2RlKHRhZykKK3sKKyAgICByZXR1
cm4gRjIoZnVuY3Rpb24oZmFjdExpc3QsIGtpZExpc3QpIHsKKyAgICAgICAgcmV0dXJuIG5vZGVI
ZWxwKHRhZywgZmFjdExpc3QsIGtpZExpc3QpOworICAgIH0pOworfQorCisKK2Z1bmN0aW9uIG5v
ZGVIZWxwKHRhZywgZmFjdExpc3QsIGtpZExpc3QpCit7CisgICAgdmFyIG9yZ2FuaXplZCA9IG9y
Z2FuaXplRmFjdHMoZmFjdExpc3QpOworICAgIHZhciBuYW1lc3BhY2UgPSBvcmdhbml6ZWQubmFt
ZXNwYWNlOworICAgIHZhciBmYWN0cyA9IG9yZ2FuaXplZC5mYWN0czsKKworICAgIHZhciBjaGls
ZHJlbiA9IFtdOworICAgIHZhciBkZXNjZW5kYW50c0NvdW50ID0gMDsKKyAgICB3aGlsZSAoa2lk
TGlzdC5jdG9yICE9PSAnW10nKQorICAgIHsKKyAgICAgICAgdmFyIGtpZCA9IGtpZExpc3QuXzA7
CisgICAgICAgIGRlc2NlbmRhbnRzQ291bnQgKz0gKGtpZC5kZXNjZW5kYW50c0NvdW50IHx8IDAp
OworICAgICAgICBjaGlsZHJlbi5wdXNoKGtpZCk7CisgICAgICAgIGtpZExpc3QgPSBraWRMaXN0
Ll8xOworICAgIH0KKyAgICBkZXNjZW5kYW50c0NvdW50ICs9IGNoaWxkcmVuLmxlbmd0aDsKKwor
ICAgIHJldHVybiB7CisgICAgICAgIHR5cGU6ICdub2RlJywKKyAgICAgICAgdGFnOiB0YWcsCisg
ICAgICAgIGZhY3RzOiBmYWN0cywKKyAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLAorICAgICAg
ICBuYW1lc3BhY2U6IG5hbWVzcGFjZSwKKyAgICAgICAgZGVzY2VuZGFudHNDb3VudDogZGVzY2Vu
ZGFudHNDb3VudAorICAgIH07Cit9CisKKworZnVuY3Rpb24ga2V5ZWROb2RlKHRhZywgZmFjdExp
c3QsIGtpZExpc3QpCit7CisgICAgdmFyIG9yZ2FuaXplZCA9IG9yZ2FuaXplRmFjdHMoZmFjdExp
c3QpOworICAgIHZhciBuYW1lc3BhY2UgPSBvcmdhbml6ZWQubmFtZXNwYWNlOworICAgIHZhciBm
YWN0cyA9IG9yZ2FuaXplZC5mYWN0czsKKworICAgIHZhciBjaGlsZHJlbiA9IFtdOworICAgIHZh
ciBkZXNjZW5kYW50c0NvdW50ID0gMDsKKyAgICB3aGlsZSAoa2lkTGlzdC5jdG9yICE9PSAnW10n
KQorICAgIHsKKyAgICAgICAgdmFyIGtpZCA9IGtpZExpc3QuXzA7CisgICAgICAgIGRlc2NlbmRh
bnRzQ291bnQgKz0gKGtpZC5fMS5kZXNjZW5kYW50c0NvdW50IHx8IDApOworICAgICAgICBjaGls
ZHJlbi5wdXNoKGtpZCk7CisgICAgICAgIGtpZExpc3QgPSBraWRMaXN0Ll8xOworICAgIH0KKyAg
ICBkZXNjZW5kYW50c0NvdW50ICs9IGNoaWxkcmVuLmxlbmd0aDsKKworICAgIHJldHVybiB7Cisg
ICAgICAgIHR5cGU6ICdrZXllZC1ub2RlJywKKyAgICAgICAgdGFnOiB0YWcsCisgICAgICAgIGZh
Y3RzOiBmYWN0cywKKyAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLAorICAgICAgICBuYW1lc3Bh
Y2U6IG5hbWVzcGFjZSwKKyAgICAgICAgZGVzY2VuZGFudHNDb3VudDogZGVzY2VuZGFudHNDb3Vu
dAorICAgIH07Cit9CisKKworZnVuY3Rpb24gY3VzdG9tKGZhY3RMaXN0LCBtb2RlbCwgaW1wbCkK
K3sKKyAgICB2YXIgZmFjdHMgPSBvcmdhbml6ZUZhY3RzKGZhY3RMaXN0KS5mYWN0czsKKworICAg
IHJldHVybiB7CisgICAgICAgIHR5cGU6ICdjdXN0b20nLAorICAgICAgICBmYWN0czogZmFjdHMs
CisgICAgICAgIG1vZGVsOiBtb2RlbCwKKyAgICAgICAgaW1wbDogaW1wbAorICAgIH07Cit9CisK
KworZnVuY3Rpb24gbWFwKHRhZ2dlciwgbm9kZSkKK3sKKyAgICByZXR1cm4geworICAgICAgICB0
eXBlOiAndGFnZ2VyJywKKyAgICAgICAgdGFnZ2VyOiB0YWdnZXIsCisgICAgICAgIG5vZGU6IG5v
ZGUsCisgICAgICAgIGRlc2NlbmRhbnRzQ291bnQ6IDEgKyAobm9kZS5kZXNjZW5kYW50c0NvdW50
IHx8IDApCisgICAgfTsKK30KKworCitmdW5jdGlvbiB0aHVuayhmdW5jLCBhcmdzLCB0aHVuaykK
K3sKKyAgICByZXR1cm4geworICAgICAgICB0eXBlOiAndGh1bmsnLAorICAgICAgICBmdW5jOiBm
dW5jLAorICAgICAgICBhcmdzOiBhcmdzLAorICAgICAgICB0aHVuazogdGh1bmssCisgICAgICAg
IG5vZGU6IHVuZGVmaW5lZAorICAgIH07Cit9CisKK2Z1bmN0aW9uIGxhenkoZm4sIGEpCit7Cisg
ICAgcmV0dXJuIHRodW5rKGZuLCBbYV0sIGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gZm4o
YSk7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIGxhenkyKGZuLCBhLCBiKQoreworICAgIHJldHVy
biB0aHVuayhmbiwgW2EsYl0sIGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gQTIoZm4sIGEs
IGIpOworICAgIH0pOworfQorCitmdW5jdGlvbiBsYXp5MyhmbiwgYSwgYiwgYykKK3sKKyAgICBy
ZXR1cm4gdGh1bmsoZm4sIFthLGIsY10sIGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gQTMo
Zm4sIGEsIGIsIGMpOworICAgIH0pOworfQorCisKKworLy8gRkFDVFMKKworCitmdW5jdGlvbiBv
cmdhbml6ZUZhY3RzKGZhY3RMaXN0KQoreworICAgIHZhciBuYW1lc3BhY2UsIGZhY3RzID0ge307
CisKKyAgICB3aGlsZSAoZmFjdExpc3QuY3RvciAhPT0gJ1tdJykKKyAgICB7CisgICAgICAgIHZh
ciBlbnRyeSA9IGZhY3RMaXN0Ll8wOworICAgICAgICB2YXIga2V5ID0gZW50cnkua2V5OworCisg
ICAgICAgIGlmIChrZXkgPT09IEFUVFJfS0VZIHx8IGtleSA9PT0gQVRUUl9OU19LRVkgfHwga2V5
ID09PSBFVkVOVF9LRVkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBzdWJGYWN0cyA9IGZh
Y3RzW2tleV0gfHwge307CisgICAgICAgICAgICBzdWJGYWN0c1tlbnRyeS5yZWFsS2V5XSA9IGVu
dHJ5LnZhbHVlOworICAgICAgICAgICAgZmFjdHNba2V5XSA9IHN1YkZhY3RzOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gU1RZTEVfS0VZKQorICAgICAgICB7CisgICAgICAg
ICAgICB2YXIgc3R5bGVzID0gZmFjdHNba2V5XSB8fCB7fTsKKyAgICAgICAgICAgIHZhciBzdHls
ZUxpc3QgPSBlbnRyeS52YWx1ZTsKKyAgICAgICAgICAgIHdoaWxlIChzdHlsZUxpc3QuY3RvciAh
PT0gJ1tdJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgc3R5bGUgPSBzdHls
ZUxpc3QuXzA7CisgICAgICAgICAgICAgICAgc3R5bGVzW3N0eWxlLl8wXSA9IHN0eWxlLl8xOwor
ICAgICAgICAgICAgICAgIHN0eWxlTGlzdCA9IHN0eWxlTGlzdC5fMTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGZhY3RzW2tleV0gPSBzdHlsZXM7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSBpZiAoa2V5ID09PSAnbmFtZXNwYWNlJykKKyAgICAgICAgeworICAgICAgICAgICAgbmFtZXNw
YWNlID0gZW50cnkudmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBmYWN0c1trZXldID0gZW50cnkudmFsdWU7CisgICAgICAgIH0KKyAgICAgICAg
ZmFjdExpc3QgPSBmYWN0TGlzdC5fMTsKKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICBm
YWN0czogZmFjdHMsCisgICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlCisgICAgfTsKK30KKwor
CisKKy8vLy8vLy8vLy8vLyAgUFJPUEVSVElFUyBBTkQgQVRUUklCVVRFUyAgLy8vLy8vLy8vLy8v
CisKKworZnVuY3Rpb24gc3R5bGUodmFsdWUpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAga2V5
OiBTVFlMRV9LRVksCisgICAgICAgIHZhbHVlOiB2YWx1ZQorICAgIH07Cit9CisKKworZnVuY3Rp
b24gcHJvcGVydHkoa2V5LCB2YWx1ZSkKK3sKKyAgICByZXR1cm4geworICAgICAgICBrZXk6IGtl
eSwKKyAgICAgICAgdmFsdWU6IHZhbHVlCisgICAgfTsKK30KKworCitmdW5jdGlvbiBhdHRyaWJ1
dGUoa2V5LCB2YWx1ZSkKK3sKKyAgICByZXR1cm4geworICAgICAgICBrZXk6IEFUVFJfS0VZLAor
ICAgICAgICByZWFsS2V5OiBrZXksCisgICAgICAgIHZhbHVlOiB2YWx1ZQorICAgIH07Cit9CisK
KworZnVuY3Rpb24gYXR0cmlidXRlTlMobmFtZXNwYWNlLCBrZXksIHZhbHVlKQoreworICAgIHJl
dHVybiB7CisgICAgICAgIGtleTogQVRUUl9OU19LRVksCisgICAgICAgIHJlYWxLZXk6IGtleSwK
KyAgICAgICAgdmFsdWU6IHsKKyAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAgICAgICAg
IG5hbWVzcGFjZTogbmFtZXNwYWNlCisgICAgICAgIH0KKyAgICB9OworfQorCisKK2Z1bmN0aW9u
IG9uKG5hbWUsIG9wdGlvbnMsIGRlY29kZXIpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAga2V5
OiBFVkVOVF9LRVksCisgICAgICAgIHJlYWxLZXk6IG5hbWUsCisgICAgICAgIHZhbHVlOiB7Cisg
ICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zLAorICAgICAgICAgICAgZGVjb2RlcjogZGVjb2Rl
cgorICAgICAgICB9CisgICAgfTsKK30KKworCitmdW5jdGlvbiBlcXVhbEV2ZW50cyhhLCBiKQor
eworICAgIGlmICghYS5vcHRpb25zID09PSBiLm9wdGlvbnMpCisgICAgeworICAgICAgICBpZiAo
YS5zdG9wUHJvcGFnYXRpb24gIT09IGIuc3RvcFByb3BhZ2F0aW9uIHx8IGEucHJldmVudERlZmF1
bHQgIT09IGIucHJldmVudERlZmF1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X0pzb24uZXF1YWxpdHkoYS5kZWNvZGVyLCBiLmRlY29kZXIpOworfQorCisKKworLy8vLy8vLy8v
Ly8vICBSRU5ERVJFUiAgLy8vLy8vLy8vLy8vCisKKworZnVuY3Rpb24gcmVuZGVyZXIocGFyZW50
LCB0YWdnZXIsIGluaXRpYWxWaXJ0dWFsTm9kZSkKK3sKKyAgICB2YXIgZXZlbnROb2RlID0geyB0
YWdnZXI6IHRhZ2dlciwgcGFyZW50OiB1bmRlZmluZWQgfTsKKworICAgIHZhciBkb21Ob2RlID0g
cmVuZGVyKGluaXRpYWxWaXJ0dWFsTm9kZSwgZXZlbnROb2RlKTsKKyAgICBwYXJlbnQuYXBwZW5k
Q2hpbGQoZG9tTm9kZSk7CisKKyAgICB2YXIgc3RhdGUgPSAnTk9fUkVRVUVTVCc7CisgICAgdmFy
IGN1cnJlbnRWaXJ0dWFsTm9kZSA9IGluaXRpYWxWaXJ0dWFsTm9kZTsKKyAgICB2YXIgbmV4dFZp
cnR1YWxOb2RlID0gaW5pdGlhbFZpcnR1YWxOb2RlOworCisgICAgZnVuY3Rpb24gcmVnaXN0ZXJW
aXJ0dWFsTm9kZSh2Tm9kZSkKKyAgICB7CisgICAgICAgIGlmIChzdGF0ZSA9PT0gJ05PX1JFUVVF
U1QnKQorICAgICAgICB7CisgICAgICAgICAgICByQUYodXBkYXRlSWZOZWVkZWQpOworICAgICAg
ICB9CisgICAgICAgIHN0YXRlID0gJ1BFTkRJTkdfUkVRVUVTVCc7CisgICAgICAgIG5leHRWaXJ0
dWFsTm9kZSA9IHZOb2RlOworICAgIH0KKworICAgIGZ1bmN0aW9uIHVwZGF0ZUlmTmVlZGVkKCkK
KyAgICB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNh
c2UgJ05PX1JFUVVFU1QnOgorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigKKyAgICAg
ICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgZHJhdyBjYWxsYmFjay5cbicgKworICAgICAgICAg
ICAgICAgICAgICAnUGxlYXNlIHJlcG9ydCB0aGlzIHRvIDxodHRwczovL2dpdGh1Yi5jb20vZWxt
LWxhbmcvY29yZS9pc3N1ZXM+LicKKyAgICAgICAgICAgICAgICApOworCisgICAgICAgICAgICBj
YXNlICdQRU5ESU5HX1JFUVVFU1QnOgorICAgICAgICAgICAgICAgIHJBRih1cGRhdGVJZk5lZWRl
ZCk7CisgICAgICAgICAgICAgICAgc3RhdGUgPSAnRVhUUkFfUkVRVUVTVCc7CisKKyAgICAgICAg
ICAgICAgICB2YXIgcGF0Y2hlcyA9IGRpZmYoY3VycmVudFZpcnR1YWxOb2RlLCBuZXh0VmlydHVh
bE5vZGUpOworICAgICAgICAgICAgICAgIGRvbU5vZGUgPSBhcHBseVBhdGNoZXMoZG9tTm9kZSwg
Y3VycmVudFZpcnR1YWxOb2RlLCBwYXRjaGVzLCBldmVudE5vZGUpOworICAgICAgICAgICAgICAg
IGN1cnJlbnRWaXJ0dWFsTm9kZSA9IG5leHRWaXJ0dWFsTm9kZTsKKworICAgICAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICAgICAgY2FzZSAnRVhUUkFfUkVRVUVTVCc6CisgICAgICAgICAg
ICAgICAgc3RhdGUgPSAnTk9fUkVRVUVTVCc7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsgdXBkYXRlOiByZWdpc3RlclZpcnR1YWxOb2Rl
IH07Cit9CisKKwordmFyIHJBRiA9CisgICAgdHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSAh
PT0gJ3VuZGVmaW5lZCcKKyAgICAgICAgPyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUKKyAgICAgICAg
OiBmdW5jdGlvbihjYikgeyBzZXRUaW1lb3V0KGNiLCAxMDAwIC8gNjApOyB9OworCisKKworLy8v
Ly8vLy8vLy8vICBSRU5ERVIgIC8vLy8vLy8vLy8vLworCisKK2Z1bmN0aW9uIHJlbmRlcih2Tm9k
ZSwgZXZlbnROb2RlKQoreworICAgIHN3aXRjaCAodk5vZGUudHlwZSkKKyAgICB7CisgICAgICAg
IGNhc2UgJ3RodW5rJzoKKyAgICAgICAgICAgIGlmICghdk5vZGUubm9kZSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICB2Tm9kZS5ub2RlID0gdk5vZGUudGh1bmsoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZW5kZXIodk5vZGUubm9kZSwgZXZlbnROb2RlKTsK
KworICAgICAgICBjYXNlICd0YWdnZXInOgorICAgICAgICAgICAgdmFyIHN1Yk5vZGUgPSB2Tm9k
ZS5ub2RlOworICAgICAgICAgICAgdmFyIHRhZ2dlciA9IHZOb2RlLnRhZ2dlcjsKKworICAgICAg
ICAgICAgd2hpbGUgKHN1Yk5vZGUudHlwZSA9PT0gJ3RhZ2dlcicpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgdHlwZW9mIHRhZ2dlciAhPT0gJ29iamVjdCcKKyAgICAgICAgICAgICAg
ICAgICAgPyB0YWdnZXIgPSBbdGFnZ2VyLCBzdWJOb2RlLnRhZ2dlcl0KKyAgICAgICAgICAgICAg
ICAgICAgOiB0YWdnZXIucHVzaChzdWJOb2RlLnRhZ2dlcik7CisKKyAgICAgICAgICAgICAgICBz
dWJOb2RlID0gc3ViTm9kZS5ub2RlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIg
c3ViRXZlbnRSb290ID0geworICAgICAgICAgICAgICAgIHRhZ2dlcjogdGFnZ2VyLAorICAgICAg
ICAgICAgICAgIHBhcmVudDogZXZlbnROb2RlCisgICAgICAgICAgICB9OworCisgICAgICAgICAg
ICB2YXIgZG9tTm9kZSA9IHJlbmRlcihzdWJOb2RlLCBzdWJFdmVudFJvb3QpOworICAgICAgICAg
ICAgZG9tTm9kZS5lbG1fZXZlbnRfbm9kZV9yZWYgPSBzdWJFdmVudFJvb3Q7CisgICAgICAgICAg
ICByZXR1cm4gZG9tTm9kZTsKKworICAgICAgICBjYXNlICd0ZXh0JzoKKyAgICAgICAgICAgIHJl
dHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh2Tm9kZS50ZXh0KTsKKworICAgICAgICBjYXNl
ICdub2RlJzoKKyAgICAgICAgICAgIHZhciBkb21Ob2RlID0gdk5vZGUubmFtZXNwYWNlCisgICAg
ICAgICAgICAgICAgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlModk5vZGUubmFtZXNwYWNlLCB2
Tm9kZS50YWcpCisgICAgICAgICAgICAgICAgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHZOb2Rl
LnRhZyk7CisKKyAgICAgICAgICAgIGFwcGx5RmFjdHMoZG9tTm9kZSwgZXZlbnROb2RlLCB2Tm9k
ZS5mYWN0cyk7CisKKyAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IHZOb2RlLmNoaWxkcmVuOwor
CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRvbU5vZGUuYXBwZW5kQ2hpbGQocmVuZGVy
KGNoaWxkcmVuW2ldLCBldmVudE5vZGUpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cmV0dXJuIGRvbU5vZGU7CisKKyAgICAgICAgY2FzZSAna2V5ZWQtbm9kZSc6CisgICAgICAgICAg
ICB2YXIgZG9tTm9kZSA9IHZOb2RlLm5hbWVzcGFjZQorICAgICAgICAgICAgICAgID8gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudE5TKHZOb2RlLm5hbWVzcGFjZSwgdk5vZGUudGFnKQorICAgICAgICAg
ICAgICAgIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh2Tm9kZS50YWcpOworCisgICAgICAgICAg
ICBhcHBseUZhY3RzKGRvbU5vZGUsIGV2ZW50Tm9kZSwgdk5vZGUuZmFjdHMpOworCisgICAgICAg
ICAgICB2YXIgY2hpbGRyZW4gPSB2Tm9kZS5jaGlsZHJlbjsKKworICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBkb21Ob2RlLmFwcGVuZENoaWxkKHJlbmRlcihjaGlsZHJlbltpXS5fMSwgZXZl
bnROb2RlKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBkb21Ob2RlOwor
CisgICAgICAgIGNhc2UgJ2N1c3RvbSc6CisgICAgICAgICAgICB2YXIgZG9tTm9kZSA9IHZOb2Rl
LmltcGwucmVuZGVyKHZOb2RlLm1vZGVsKTsKKyAgICAgICAgICAgIGFwcGx5RmFjdHMoZG9tTm9k
ZSwgZXZlbnROb2RlLCB2Tm9kZS5mYWN0cyk7CisgICAgICAgICAgICByZXR1cm4gZG9tTm9kZTsK
KyAgICB9Cit9CisKKworCisvLy8vLy8vLy8vLy8gIEFQUExZIEZBQ1RTICAvLy8vLy8vLy8vLy8K
KworCitmdW5jdGlvbiBhcHBseUZhY3RzKGRvbU5vZGUsIGV2ZW50Tm9kZSwgZmFjdHMpCit7Cisg
ICAgZm9yICh2YXIga2V5IGluIGZhY3RzKQorICAgIHsKKyAgICAgICAgdmFyIHZhbHVlID0gZmFj
dHNba2V5XTsKKworICAgICAgICBzd2l0Y2ggKGtleSkKKyAgICAgICAgeworICAgICAgICAgICAg
Y2FzZSBTVFlMRV9LRVk6CisgICAgICAgICAgICAgICAgYXBwbHlTdHlsZXMoZG9tTm9kZSwgdmFs
dWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEVWRU5UX0tF
WToKKyAgICAgICAgICAgICAgICBhcHBseUV2ZW50cyhkb21Ob2RlLCBldmVudE5vZGUsIHZhbHVl
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBBVFRSX0tFWToK
KyAgICAgICAgICAgICAgICBhcHBseUF0dHJzKGRvbU5vZGUsIHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBBVFRSX05TX0tFWToKKyAgICAgICAgICAg
ICAgICBhcHBseUF0dHJzTlMoZG9tTm9kZSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICBjYXNlICd2YWx1ZSc6CisgICAgICAgICAgICAgICAgaWYgKGRvbU5v
ZGVba2V5XSAhPT0gdmFsdWUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBkb21Ob2RlW2tleV0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgZG9tTm9k
ZVtrZXldID0gdmFsdWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK2Z1bmN0aW9uIGFwcGx5U3R5bGVzKGRvbU5vZGUsIHN0eWxlcykKK3sKKyAgICB2YXIg
ZG9tTm9kZVN0eWxlID0gZG9tTm9kZS5zdHlsZTsKKworICAgIGZvciAodmFyIGtleSBpbiBzdHls
ZXMpCisgICAgeworICAgICAgICBkb21Ob2RlU3R5bGVba2V5XSA9IHN0eWxlc1trZXldOworICAg
IH0KK30KKworZnVuY3Rpb24gYXBwbHlFdmVudHMoZG9tTm9kZSwgZXZlbnROb2RlLCBldmVudHMp
Cit7CisgICAgdmFyIGFsbEhhbmRsZXJzID0gZG9tTm9kZS5lbG1faGFuZGxlcnMgfHwge307CisK
KyAgICBmb3IgKHZhciBrZXkgaW4gZXZlbnRzKQorICAgIHsKKyAgICAgICAgdmFyIGhhbmRsZXIg
PSBhbGxIYW5kbGVyc1trZXldOworICAgICAgICB2YXIgdmFsdWUgPSBldmVudHNba2V5XTsKKwor
ICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykKKyAgICAgICAgeworICAg
ICAgICAgICAgZG9tTm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGtleSwgaGFuZGxlcik7CisgICAg
ICAgICAgICBhbGxIYW5kbGVyc1trZXldID0gdW5kZWZpbmVkOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAndW5kZWZpbmVkJykKKyAgICAgICAgeworICAg
ICAgICAgICAgdmFyIGhhbmRsZXIgPSBtYWtlRXZlbnRIYW5kbGVyKGV2ZW50Tm9kZSwgdmFsdWUp
OworICAgICAgICAgICAgZG9tTm9kZS5hZGRFdmVudExpc3RlbmVyKGtleSwgaGFuZGxlcik7Cisg
ICAgICAgICAgICBhbGxIYW5kbGVyc1trZXldID0gaGFuZGxlcjsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGhhbmRsZXIuaW5mbyA9IHZhbHVlOworICAg
ICAgICB9CisgICAgfQorCisgICAgZG9tTm9kZS5lbG1faGFuZGxlcnMgPSBhbGxIYW5kbGVyczsK
K30KKworZnVuY3Rpb24gbWFrZUV2ZW50SGFuZGxlcihldmVudE5vZGUsIGluZm8pCit7CisgICAg
ZnVuY3Rpb24gZXZlbnRIYW5kbGVyKGV2ZW50KQorICAgIHsKKyAgICAgICAgdmFyIGluZm8gPSBl
dmVudEhhbmRsZXIuaW5mbzsKKworICAgICAgICB2YXIgdmFsdWUgPSBBMihfZWxtX2xhbmckY29y
ZSROYXRpdmVfSnNvbi5ydW4sIGluZm8uZGVjb2RlciwgZXZlbnQpOworCisgICAgICAgIGlmICh2
YWx1ZS5jdG9yID09PSAnT2snKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgb3B0aW9ucyA9
IGluZm8ub3B0aW9uczsKKyAgICAgICAgICAgIGlmIChvcHRpb25zLnN0b3BQcm9wYWdhdGlvbikK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvcHRpb25zLnByZXZlbnREZWZhdWx0KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBtZXNzYWdlID0gdmFsdWUuXzA7CisKKyAg
ICAgICAgICAgIHZhciBjdXJyZW50RXZlbnROb2RlID0gZXZlbnROb2RlOworICAgICAgICAgICAg
d2hpbGUgKGN1cnJlbnRFdmVudE5vZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
dmFyIHRhZ2dlciA9IGN1cnJlbnRFdmVudE5vZGUudGFnZ2VyOworICAgICAgICAgICAgICAgIGlm
ICh0eXBlb2YgdGFnZ2VyID09PSAnZnVuY3Rpb24nKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgbWVzc2FnZSA9IHRhZ2dlcihtZXNzYWdlKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IHRhZ2dlci5sZW5ndGg7IGktLTsgKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gdGFnZ2VyW2ldKG1l
c3NhZ2UpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGN1cnJlbnRFdmVudE5vZGUgPSBjdXJyZW50RXZlbnROb2RlLnBhcmVudDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICBldmVudEhhbmRsZXIuaW5mbyA9
IGluZm87CisKKyAgICByZXR1cm4gZXZlbnRIYW5kbGVyOworfQorCitmdW5jdGlvbiBhcHBseUF0
dHJzKGRvbU5vZGUsIGF0dHJzKQoreworICAgIGZvciAodmFyIGtleSBpbiBhdHRycykKKyAgICB7
CisgICAgICAgIHZhciB2YWx1ZSA9IGF0dHJzW2tleV07CisgICAgICAgIGlmICh0eXBlb2YgdmFs
dWUgPT09ICd1bmRlZmluZWQnKQorICAgICAgICB7CisgICAgICAgICAgICBkb21Ob2RlLnJlbW92
ZUF0dHJpYnV0ZShrZXkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgZG9tTm9kZS5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK2Z1bmN0aW9uIGFwcGx5QXR0cnNOUyhkb21Ob2RlLCBuc0F0dHJzKQoreworICAg
IGZvciAodmFyIGtleSBpbiBuc0F0dHJzKQorICAgIHsKKyAgICAgICAgdmFyIHBhaXIgPSBuc0F0
dHJzW2tleV07CisgICAgICAgIHZhciBuYW1lc3BhY2UgPSBwYWlyLm5hbWVzcGFjZTsKKyAgICAg
ICAgdmFyIHZhbHVlID0gcGFpci52YWx1ZTsKKworICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09
PSAndW5kZWZpbmVkJykKKyAgICAgICAgeworICAgICAgICAgICAgZG9tTm9kZS5yZW1vdmVBdHRy
aWJ1dGVOUyhuYW1lc3BhY2UsIGtleSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICBkb21Ob2RlLnNldEF0dHJpYnV0ZU5TKG5hbWVzcGFjZSwga2V5LCB2
YWx1ZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKworCisvLy8vLy8vLy8vLy8gIERJRkYgIC8v
Ly8vLy8vLy8vLworCisKK2Z1bmN0aW9uIGRpZmYoYSwgYikKK3sKKyAgICB2YXIgcGF0Y2hlcyA9
IFtdOworICAgIGRpZmZIZWxwKGEsIGIsIHBhdGNoZXMsIDApOworICAgIHJldHVybiBwYXRjaGVz
OworfQorCisKK2Z1bmN0aW9uIG1ha2VQYXRjaCh0eXBlLCBpbmRleCwgZGF0YSkKK3sKKyAgICBy
ZXR1cm4geworICAgICAgICBpbmRleDogaW5kZXgsCisgICAgICAgIHR5cGU6IHR5cGUsCisgICAg
ICAgIGRhdGE6IGRhdGEsCisgICAgICAgIGRvbU5vZGU6IHVuZGVmaW5lZCwKKyAgICAgICAgZXZl
bnROb2RlOiB1bmRlZmluZWQKKyAgICB9OworfQorCisKK2Z1bmN0aW9uIGRpZmZIZWxwKGEsIGIs
IHBhdGNoZXMsIGluZGV4KQoreworICAgIGlmIChhID09PSBiKQorICAgIHsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHZhciBhVHlwZSA9IGEudHlwZTsKKyAgICB2YXIgYlR5cGUgPSBi
LnR5cGU7CisKKyAgICAvLyBCYWlsIGlmIHlvdSBydW4gaW50byBkaWZmZXJlbnQgdHlwZXMgb2Yg
bm9kZXMuIEltcGxpZXMgdGhhdCB0aGUKKyAgICAvLyBzdHJ1Y3R1cmUgaGFzIGNoYW5nZWQgc2ln
bmlmaWNhbnRseSBhbmQgaXQncyBub3Qgd29ydGggYSBkaWZmLgorICAgIGlmIChhVHlwZSAhPT0g
YlR5cGUpCisgICAgeworICAgICAgICBwYXRjaGVzLnB1c2gobWFrZVBhdGNoKCdwLXJlZHJhdycs
IGluZGV4LCBiKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBOb3cgd2Uga25v
dyB0aGF0IGJvdGggbm9kZXMgYXJlIHRoZSBzYW1lIHR5cGUuCisgICAgc3dpdGNoIChiVHlwZSkK
KyAgICB7CisgICAgICAgIGNhc2UgJ3RodW5rJzoKKyAgICAgICAgICAgIHZhciBhQXJncyA9IGEu
YXJnczsKKyAgICAgICAgICAgIHZhciBiQXJncyA9IGIuYXJnczsKKyAgICAgICAgICAgIHZhciBp
ID0gYUFyZ3MubGVuZ3RoOworICAgICAgICAgICAgdmFyIHNhbWUgPSBhLmZ1bmMgPT09IGIuZnVu
YyAmJiBpID09PSBiQXJncy5sZW5ndGg7CisgICAgICAgICAgICB3aGlsZSAoc2FtZSAmJiBpLS0p
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2FtZSA9IGFBcmdzW2ldID09PSBiQXJn
c1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzYW1lKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGIubm9kZSA9IGEubm9kZTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBiLm5vZGUgPSBiLnRodW5rKCk7CisgICAg
ICAgICAgICB2YXIgc3ViUGF0Y2hlcyA9IFtdOworICAgICAgICAgICAgZGlmZkhlbHAoYS5ub2Rl
LCBiLm5vZGUsIHN1YlBhdGNoZXMsIDApOworICAgICAgICAgICAgaWYgKHN1YlBhdGNoZXMubGVu
Z3RoID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXRjaGVzLnB1c2gobWFr
ZVBhdGNoKCdwLXRodW5rJywgaW5kZXgsIHN1YlBhdGNoZXMpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlICd0YWdnZXInOgorICAgICAgICAgICAg
Ly8gZ2F0aGVyIG5lc3RlZCB0YWdnZXJzCisgICAgICAgICAgICB2YXIgYVRhZ2dlcnMgPSBhLnRh
Z2dlcjsKKyAgICAgICAgICAgIHZhciBiVGFnZ2VycyA9IGIudGFnZ2VyOworICAgICAgICAgICAg
dmFyIG5lc3RpbmcgPSBmYWxzZTsKKworICAgICAgICAgICAgdmFyIGFTdWJOb2RlID0gYS5ub2Rl
OworICAgICAgICAgICAgd2hpbGUgKGFTdWJOb2RlLnR5cGUgPT09ICd0YWdnZXInKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG5lc3RpbmcgPSB0cnVlOworCisgICAgICAgICAgICAg
ICAgdHlwZW9mIGFUYWdnZXJzICE9PSAnb2JqZWN0JworICAgICAgICAgICAgICAgICAgICA/IGFU
YWdnZXJzID0gW2FUYWdnZXJzLCBhU3ViTm9kZS50YWdnZXJdCisgICAgICAgICAgICAgICAgICAg
IDogYVRhZ2dlcnMucHVzaChhU3ViTm9kZS50YWdnZXIpOworCisgICAgICAgICAgICAgICAgYVN1
Yk5vZGUgPSBhU3ViTm9kZS5ub2RlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIg
YlN1Yk5vZGUgPSBiLm5vZGU7CisgICAgICAgICAgICB3aGlsZSAoYlN1Yk5vZGUudHlwZSA9PT0g
J3RhZ2dlcicpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbmVzdGluZyA9IHRydWU7
CisKKyAgICAgICAgICAgICAgICB0eXBlb2YgYlRhZ2dlcnMgIT09ICdvYmplY3QnCisgICAgICAg
ICAgICAgICAgICAgID8gYlRhZ2dlcnMgPSBbYlRhZ2dlcnMsIGJTdWJOb2RlLnRhZ2dlcl0KKyAg
ICAgICAgICAgICAgICAgICAgOiBiVGFnZ2Vycy5wdXNoKGJTdWJOb2RlLnRhZ2dlcik7CisKKyAg
ICAgICAgICAgICAgICBiU3ViTm9kZSA9IGJTdWJOb2RlLm5vZGU7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIEp1c3QgYmFpbCBpZiBkaWZmZXJlbnQgbnVtYmVycyBvZiB0YWdnZXJz
LiBUaGlzIGltcGxpZXMgdGhlCisgICAgICAgICAgICAvLyBzdHJ1Y3R1cmUgb2YgdGhlIHZpcnR1
YWwgRE9NIGhhcyBjaGFuZ2VkLgorICAgICAgICAgICAgaWYgKG5lc3RpbmcgJiYgYVRhZ2dlcnMu
bGVuZ3RoICE9PSBiVGFnZ2Vycy5sZW5ndGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcGF0Y2hlcy5wdXNoKG1ha2VQYXRjaCgncC1yZWRyYXcnLCBpbmRleCwgYikpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gY2hlY2sg
aWYgdGFnZ2VycyBhcmUgInRoZSBzYW1lIgorICAgICAgICAgICAgaWYgKG5lc3RpbmcgPyAhcGFp
cndpc2VSZWZFcXVhbChhVGFnZ2VycywgYlRhZ2dlcnMpIDogYVRhZ2dlcnMgIT09IGJUYWdnZXJz
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhdGNoZXMucHVzaChtYWtlUGF0Y2go
J3AtdGFnZ2VyJywgaW5kZXgsIGJUYWdnZXJzKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIGRpZmYgZXZlcnl0aGluZyBiZWxvdyB0aGUgdGFnZ2VycworICAgICAgICAgICAgZGlm
ZkhlbHAoYVN1Yk5vZGUsIGJTdWJOb2RlLCBwYXRjaGVzLCBpbmRleCArIDEpOworICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgJ3RleHQnOgorICAgICAgICAgICAgaWYgKGEudGV4
dCAhPT0gYi50ZXh0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhdGNoZXMucHVz
aChtYWtlUGF0Y2goJ3AtdGV4dCcsIGluZGV4LCBiLnRleHQpKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBj
YXNlICdub2RlJzoKKyAgICAgICAgICAgIC8vIEJhaWwgaWYgb2J2aW91cyBpbmRpY2F0b3JzIGhh
dmUgY2hhbmdlZC4gSW1wbGllcyBtb3JlIHNlcmlvdXMKKyAgICAgICAgICAgIC8vIHN0cnVjdHVy
YWwgY2hhbmdlcyBzdWNoIHRoYXQgaXQncyBub3Qgd29ydGggaXQgdG8gZGlmZi4KKyAgICAgICAg
ICAgIGlmIChhLnRhZyAhPT0gYi50YWcgfHwgYS5uYW1lc3BhY2UgIT09IGIubmFtZXNwYWNlKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhdGNoZXMucHVzaChtYWtlUGF0Y2goJ3At
cmVkcmF3JywgaW5kZXgsIGIpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHZhciBmYWN0c0RpZmYgPSBkaWZmRmFjdHMoYS5mYWN0cywgYi5m
YWN0cyk7CisKKyAgICAgICAgICAgIGlmICh0eXBlb2YgZmFjdHNEaWZmICE9PSAndW5kZWZpbmVk
JykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXRjaGVzLnB1c2gobWFrZVBhdGNo
KCdwLWZhY3RzJywgaW5kZXgsIGZhY3RzRGlmZikpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBkaWZmQ2hpbGRyZW4oYSwgYiwgcGF0Y2hlcywgaW5kZXgpOworICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIGNhc2UgJ2tleWVkLW5vZGUnOgorICAgICAgICAgICAgLy8gQmFpbCBp
ZiBvYnZpb3VzIGluZGljYXRvcnMgaGF2ZSBjaGFuZ2VkLiBJbXBsaWVzIG1vcmUgc2VyaW91cwor
ICAgICAgICAgICAgLy8gc3RydWN0dXJhbCBjaGFuZ2VzIHN1Y2ggdGhhdCBpdCdzIG5vdCB3b3J0
aCBpdCB0byBkaWZmLgorICAgICAgICAgICAgaWYgKGEudGFnICE9PSBiLnRhZyB8fCBhLm5hbWVz
cGFjZSAhPT0gYi5uYW1lc3BhY2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGF0
Y2hlcy5wdXNoKG1ha2VQYXRjaCgncC1yZWRyYXcnLCBpbmRleCwgYikpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGZhY3RzRGlmZiA9
IGRpZmZGYWN0cyhhLmZhY3RzLCBiLmZhY3RzKTsKKworICAgICAgICAgICAgaWYgKHR5cGVvZiBm
YWN0c0RpZmYgIT09ICd1bmRlZmluZWQnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHBhdGNoZXMucHVzaChtYWtlUGF0Y2goJ3AtZmFjdHMnLCBpbmRleCwgZmFjdHNEaWZmKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRpZmZLZXllZENoaWxkcmVuKGEsIGIsIHBhdGNo
ZXMsIGluZGV4KTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlICdjdXN0b20n
OgorICAgICAgICAgICAgaWYgKGEuaW1wbCAhPT0gYi5pbXBsKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHBhdGNoZXMucHVzaChtYWtlUGF0Y2goJ3AtcmVkcmF3JywgaW5kZXgsIGIp
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHZhciBmYWN0c0RpZmYgPSBkaWZmRmFjdHMoYS5mYWN0cywgYi5mYWN0cyk7CisgICAgICAgICAg
ICBpZiAodHlwZW9mIGZhY3RzRGlmZiAhPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcGF0Y2hlcy5wdXNoKG1ha2VQYXRjaCgncC1mYWN0cycsIGluZGV4LCBm
YWN0c0RpZmYpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIHBhdGNoID0gYi5p
bXBsLmRpZmYoYSxiKTsKKyAgICAgICAgICAgIGlmIChwYXRjaCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBwYXRjaGVzLnB1c2gobWFrZVBhdGNoKCdwLWN1c3RvbScsIGluZGV4LCBw
YXRjaCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuOworICAgIH0KK30KKworCisvLyBhc3N1bWVzIHRoZSBpbmNvbWluZyBhcnJh
eXMgYXJlIHRoZSBzYW1lIGxlbmd0aAorZnVuY3Rpb24gcGFpcndpc2VSZWZFcXVhbChhcywgYnMp
Cit7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcy5sZW5ndGg7IGkrKykKKyAgICB7CisgICAg
ICAgIGlmIChhc1tpXSAhPT0gYnNbaV0pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisKKy8vIFRP
RE8gSW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBkaWZmIG9iamVjdCwgaXQncyBwb3NzaWJsZSB0
byBqdXN0IHRlc3QgaWYKKy8vIHRoZXJlICppcyogYSBkaWZmLiBEdXJpbmcgdGhlIGFjdHVhbCBw
YXRjaCwgZG8gdGhlIGRpZmYgYWdhaW4gYW5kIG1ha2UgdGhlCisvLyBtb2RpZmljYXRpb25zIGRp
cmVjdGx5LiBUaGlzIHdheSwgdGhlcmUncyBubyBuZXcgYWxsb2NhdGlvbnMuIFdvcnRoIGl0Pwor
ZnVuY3Rpb24gZGlmZkZhY3RzKGEsIGIsIGNhdGVnb3J5KQoreworICAgIHZhciBkaWZmOworCisg
ICAgLy8gbG9vayBmb3IgY2hhbmdlcyBhbmQgcmVtb3ZhbHMKKyAgICBmb3IgKHZhciBhS2V5IGlu
IGEpCisgICAgeworICAgICAgICBpZiAoYUtleSA9PT0gU1RZTEVfS0VZIHx8IGFLZXkgPT09IEVW
RU5UX0tFWSB8fCBhS2V5ID09PSBBVFRSX0tFWSB8fCBhS2V5ID09PSBBVFRSX05TX0tFWSkKKyAg
ICAgICAgeworICAgICAgICAgICAgdmFyIHN1YkRpZmYgPSBkaWZmRmFjdHMoYVthS2V5XSwgYlth
S2V5XSB8fCB7fSwgYUtleSk7CisgICAgICAgICAgICBpZiAoc3ViRGlmZikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBkaWZmID0gZGlmZiB8fCB7fTsKKyAgICAgICAgICAgICAgICBk
aWZmW2FLZXldID0gc3ViRGlmZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisKKyAgICAgICAgLy8gcmVtb3ZlIGlmIG5vdCBpbiB0aGUgbmV3IGZhY3Rz
CisgICAgICAgIGlmICghKGFLZXkgaW4gYikpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRpZmYg
PSBkaWZmIHx8IHt9OworICAgICAgICAgICAgZGlmZlthS2V5XSA9CisgICAgICAgICAgICAgICAg
KHR5cGVvZiBjYXRlZ29yeSA9PT0gJ3VuZGVmaW5lZCcpCisgICAgICAgICAgICAgICAgICAgID8g
KHR5cGVvZiBhW2FLZXldID09PSAnc3RyaW5nJyA/ICcnIDogbnVsbCkKKyAgICAgICAgICAgICAg
ICAgICAgOgorICAgICAgICAgICAgICAgIChjYXRlZ29yeSA9PT0gU1RZTEVfS0VZKQorICAgICAg
ICAgICAgICAgICAgICA/ICcnCisgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAg
ICAoY2F0ZWdvcnkgPT09IEVWRU5UX0tFWSB8fCBjYXRlZ29yeSA9PT0gQVRUUl9LRVkpCisgICAg
ICAgICAgICAgICAgICAgID8gdW5kZWZpbmVkCisgICAgICAgICAgICAgICAgICAgIDoKKyAgICAg
ICAgICAgICAgICB7IG5hbWVzcGFjZTogYVthS2V5XS5uYW1lc3BhY2UsIHZhbHVlOiB1bmRlZmlu
ZWQgfTsKKworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICB2YXIg
YVZhbHVlID0gYVthS2V5XTsKKyAgICAgICAgdmFyIGJWYWx1ZSA9IGJbYUtleV07CisKKyAgICAg
ICAgLy8gcmVmZXJlbmNlIGVxdWFsLCBzbyBkb24ndCB3b3JyeSBhYm91dCBpdAorICAgICAgICBp
ZiAoYVZhbHVlID09PSBiVmFsdWUgJiYgYUtleSAhPT0gJ3ZhbHVlJworICAgICAgICAgICAgfHwg
Y2F0ZWdvcnkgPT09IEVWRU5UX0tFWSAmJiBlcXVhbEV2ZW50cyhhVmFsdWUsIGJWYWx1ZSkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgZGlm
ZiA9IGRpZmYgfHwge307CisgICAgICAgIGRpZmZbYUtleV0gPSBiVmFsdWU7CisgICAgfQorCisg
ICAgLy8gYWRkIG5ldyBzdHVmZgorICAgIGZvciAodmFyIGJLZXkgaW4gYikKKyAgICB7CisgICAg
ICAgIGlmICghKGJLZXkgaW4gYSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRpZmYgPSBkaWZm
IHx8IHt9OworICAgICAgICAgICAgZGlmZltiS2V5XSA9IGJbYktleV07CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gZGlmZjsKK30KKworCitmdW5jdGlvbiBkaWZmQ2hpbGRyZW4oYVBh
cmVudCwgYlBhcmVudCwgcGF0Y2hlcywgcm9vdEluZGV4KQoreworICAgIHZhciBhQ2hpbGRyZW4g
PSBhUGFyZW50LmNoaWxkcmVuOworICAgIHZhciBiQ2hpbGRyZW4gPSBiUGFyZW50LmNoaWxkcmVu
OworCisgICAgdmFyIGFMZW4gPSBhQ2hpbGRyZW4ubGVuZ3RoOworICAgIHZhciBiTGVuID0gYkNo
aWxkcmVuLmxlbmd0aDsKKworICAgIC8vIEZJR1VSRSBPVVQgSUYgVEhFUkUgQVJFIElOU0VSVFMg
T1IgUkVNT1ZBTFMKKworICAgIGlmIChhTGVuID4gYkxlbikKKyAgICB7CisgICAgICAgIHBhdGNo
ZXMucHVzaChtYWtlUGF0Y2goJ3AtcmVtb3ZlLWxhc3QnLCByb290SW5kZXgsIGFMZW4gLSBiTGVu
KSk7CisgICAgfQorICAgIGVsc2UgaWYgKGFMZW4gPCBiTGVuKQorICAgIHsKKyAgICAgICAgcGF0
Y2hlcy5wdXNoKG1ha2VQYXRjaCgncC1hcHBlbmQnLCByb290SW5kZXgsIGJDaGlsZHJlbi5zbGlj
ZShhTGVuKSkpOworICAgIH0KKworICAgIC8vIFBBSVJXSVNFIERJRkYgRVZFUllUSElORyBFTFNF
CisKKyAgICB2YXIgaW5kZXggPSByb290SW5kZXg7CisgICAgdmFyIG1pbkxlbiA9IGFMZW4gPCBi
TGVuID8gYUxlbiA6IGJMZW47CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaW5MZW47IGkrKykK
KyAgICB7CisgICAgICAgIGluZGV4Kys7CisgICAgICAgIHZhciBhQ2hpbGQgPSBhQ2hpbGRyZW5b
aV07CisgICAgICAgIGRpZmZIZWxwKGFDaGlsZCwgYkNoaWxkcmVuW2ldLCBwYXRjaGVzLCBpbmRl
eCk7CisgICAgICAgIGluZGV4ICs9IGFDaGlsZC5kZXNjZW5kYW50c0NvdW50IHx8IDA7CisgICAg
fQorfQorCisKKworLy8vLy8vLy8vLy8vICBLRVlFRCBESUZGICAvLy8vLy8vLy8vLy8KKworCitm
dW5jdGlvbiBkaWZmS2V5ZWRDaGlsZHJlbihhUGFyZW50LCBiUGFyZW50LCBwYXRjaGVzLCByb290
SW5kZXgpCit7CisgICAgdmFyIGxvY2FsUGF0Y2hlcyA9IFtdOworCisgICAgdmFyIGNoYW5nZXMg
PSB7fTsgLy8gRGljdCBTdHJpbmcgRW50cnkKKyAgICB2YXIgaW5zZXJ0cyA9IFtdOyAvLyBBcnJh
eSB7IGluZGV4IDogSW50LCBlbnRyeSA6IEVudHJ5IH0KKyAgICAvLyB0eXBlIEVudHJ5ID0geyB0
YWcgOiBTdHJpbmcsIHZub2RlIDogVk5vZGUsIGluZGV4IDogSW50LCBkYXRhIDogXyB9CisKKyAg
ICB2YXIgYUNoaWxkcmVuID0gYVBhcmVudC5jaGlsZHJlbjsKKyAgICB2YXIgYkNoaWxkcmVuID0g
YlBhcmVudC5jaGlsZHJlbjsKKyAgICB2YXIgYUxlbiA9IGFDaGlsZHJlbi5sZW5ndGg7CisgICAg
dmFyIGJMZW4gPSBiQ2hpbGRyZW4ubGVuZ3RoOworICAgIHZhciBhSW5kZXggPSAwOworICAgIHZh
ciBiSW5kZXggPSAwOworCisgICAgdmFyIGluZGV4ID0gcm9vdEluZGV4OworCisgICAgd2hpbGUg
KGFJbmRleCA8IGFMZW4gJiYgYkluZGV4IDwgYkxlbikKKyAgICB7CisgICAgICAgIHZhciBhID0g
YUNoaWxkcmVuW2FJbmRleF07CisgICAgICAgIHZhciBiID0gYkNoaWxkcmVuW2JJbmRleF07CisK
KyAgICAgICAgdmFyIGFLZXkgPSBhLl8wOworICAgICAgICB2YXIgYktleSA9IGIuXzA7CisgICAg
ICAgIHZhciBhTm9kZSA9IGEuXzE7CisgICAgICAgIHZhciBiTm9kZSA9IGIuXzE7CisKKyAgICAg
ICAgLy8gY2hlY2sgaWYga2V5cyBtYXRjaAorCisgICAgICAgIGlmIChhS2V5ID09PSBiS2V5KQor
ICAgICAgICB7CisgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgZGlmZkhlbHAoYU5v
ZGUsIGJOb2RlLCBsb2NhbFBhdGNoZXMsIGluZGV4KTsKKyAgICAgICAgICAgIGluZGV4ICs9IGFO
b2RlLmRlc2NlbmRhbnRzQ291bnQgfHwgMDsKKworICAgICAgICAgICAgYUluZGV4Kys7CisgICAg
ICAgICAgICBiSW5kZXgrKzsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gbG9vayBhaGVhZCAxIHRvIGRldGVjdCBpbnNlcnRpb25zIGFuZCByZW1vdmFscy4K
KworICAgICAgICB2YXIgYUxvb2tBaGVhZCA9IGFJbmRleCArIDEgPCBhTGVuOworICAgICAgICB2
YXIgYkxvb2tBaGVhZCA9IGJJbmRleCArIDEgPCBiTGVuOworCisgICAgICAgIGlmIChhTG9va0Fo
ZWFkKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgYU5leHQgPSBhQ2hpbGRyZW5bYUluZGV4
ICsgMV07CisgICAgICAgICAgICB2YXIgYU5leHRLZXkgPSBhTmV4dC5fMDsKKyAgICAgICAgICAg
IHZhciBhTmV4dE5vZGUgPSBhTmV4dC5fMTsKKyAgICAgICAgICAgIHZhciBvbGRNYXRjaCA9IGJL
ZXkgPT09IGFOZXh0S2V5OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJMb29rQWhlYWQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHZhciBiTmV4dCA9IGJDaGlsZHJlbltiSW5kZXggKyAxXTsK
KyAgICAgICAgICAgIHZhciBiTmV4dEtleSA9IGJOZXh0Ll8wOworICAgICAgICAgICAgdmFyIGJO
ZXh0Tm9kZSA9IGJOZXh0Ll8xOworICAgICAgICAgICAgdmFyIG5ld01hdGNoID0gYUtleSA9PT0g
Yk5leHRLZXk7CisgICAgICAgIH0KKworCisgICAgICAgIC8vIHN3YXAgYSBhbmQgYgorICAgICAg
ICBpZiAoYUxvb2tBaGVhZCAmJiBiTG9va0FoZWFkICYmIG5ld01hdGNoICYmIG9sZE1hdGNoKQor
ICAgICAgICB7CisgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgZGlmZkhlbHAoYU5v
ZGUsIGJOZXh0Tm9kZSwgbG9jYWxQYXRjaGVzLCBpbmRleCk7CisgICAgICAgICAgICBpbnNlcnRO
b2RlKGNoYW5nZXMsIGxvY2FsUGF0Y2hlcywgYUtleSwgYk5vZGUsIGJJbmRleCwgaW5zZXJ0cyk7
CisgICAgICAgICAgICBpbmRleCArPSBhTm9kZS5kZXNjZW5kYW50c0NvdW50IHx8IDA7CisKKyAg
ICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICByZW1vdmVOb2RlKGNoYW5nZXMsIGxvY2Fs
UGF0Y2hlcywgYUtleSwgYU5leHROb2RlLCBpbmRleCk7CisgICAgICAgICAgICBpbmRleCArPSBh
TmV4dE5vZGUuZGVzY2VuZGFudHNDb3VudCB8fCAwOworCisgICAgICAgICAgICBhSW5kZXggKz0g
MjsKKyAgICAgICAgICAgIGJJbmRleCArPSAyOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBpbnNlcnQgYgorICAgICAgICBpZiAoYkxvb2tBaGVhZCAmJiBu
ZXdNYXRjaCkKKyAgICAgICAgeworICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgIGlu
c2VydE5vZGUoY2hhbmdlcywgbG9jYWxQYXRjaGVzLCBiS2V5LCBiTm9kZSwgYkluZGV4LCBpbnNl
cnRzKTsKKyAgICAgICAgICAgIGRpZmZIZWxwKGFOb2RlLCBiTmV4dE5vZGUsIGxvY2FsUGF0Y2hl
cywgaW5kZXgpOworICAgICAgICAgICAgaW5kZXggKz0gYU5vZGUuZGVzY2VuZGFudHNDb3VudCB8
fCAwOworCisgICAgICAgICAgICBhSW5kZXggKz0gMTsKKyAgICAgICAgICAgIGJJbmRleCArPSAy
OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyByZW1vdmUg
YQorICAgICAgICBpZiAoYUxvb2tBaGVhZCAmJiBvbGRNYXRjaCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgIHJlbW92ZU5vZGUoY2hhbmdlcywgbG9jYWxQYXRj
aGVzLCBhS2V5LCBhTm9kZSwgaW5kZXgpOworICAgICAgICAgICAgaW5kZXggKz0gYU5vZGUuZGVz
Y2VuZGFudHNDb3VudCB8fCAwOworCisgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAg
ZGlmZkhlbHAoYU5leHROb2RlLCBiTm9kZSwgbG9jYWxQYXRjaGVzLCBpbmRleCk7CisgICAgICAg
ICAgICBpbmRleCArPSBhTmV4dE5vZGUuZGVzY2VuZGFudHNDb3VudCB8fCAwOworCisgICAgICAg
ICAgICBhSW5kZXggKz0gMjsKKyAgICAgICAgICAgIGJJbmRleCArPSAxOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyByZW1vdmUgYSwgaW5zZXJ0IGIKKyAg
ICAgICAgaWYgKGFMb29rQWhlYWQgJiYgYkxvb2tBaGVhZCAmJiBhTmV4dEtleSA9PT0gYk5leHRL
ZXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICByZW1vdmVO
b2RlKGNoYW5nZXMsIGxvY2FsUGF0Y2hlcywgYUtleSwgYU5vZGUsIGluZGV4KTsKKyAgICAgICAg
ICAgIGluc2VydE5vZGUoY2hhbmdlcywgbG9jYWxQYXRjaGVzLCBiS2V5LCBiTm9kZSwgYkluZGV4
LCBpbnNlcnRzKTsKKyAgICAgICAgICAgIGluZGV4ICs9IGFOb2RlLmRlc2NlbmRhbnRzQ291bnQg
fHwgMDsKKworICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgIGRpZmZIZWxwKGFOZXh0
Tm9kZSwgYk5leHROb2RlLCBsb2NhbFBhdGNoZXMsIGluZGV4KTsKKyAgICAgICAgICAgIGluZGV4
ICs9IGFOZXh0Tm9kZS5kZXNjZW5kYW50c0NvdW50IHx8IDA7CisKKyAgICAgICAgICAgIGFJbmRl
eCArPSAyOworICAgICAgICAgICAgYkluZGV4ICs9IDI7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIGVhdCB1cCBhbnkg
cmVtYWluaW5nIG5vZGVzIHdpdGggcmVtb3ZlTm9kZSBhbmQgaW5zZXJ0Tm9kZQorCisgICAgd2hp
bGUgKGFJbmRleCA8IGFMZW4pCisgICAgeworICAgICAgICBpbmRleCsrOworICAgICAgICB2YXIg
YSA9IGFDaGlsZHJlblthSW5kZXhdOworICAgICAgICB2YXIgYU5vZGUgPSBhLl8xOworICAgICAg
ICByZW1vdmVOb2RlKGNoYW5nZXMsIGxvY2FsUGF0Y2hlcywgYS5fMCwgYU5vZGUsIGluZGV4KTsK
KyAgICAgICAgaW5kZXggKz0gYU5vZGUuZGVzY2VuZGFudHNDb3VudCB8fCAwOworICAgICAgICBh
SW5kZXgrKzsKKyAgICB9CisKKyAgICB2YXIgZW5kSW5zZXJ0czsKKyAgICB3aGlsZSAoYkluZGV4
IDwgYkxlbikKKyAgICB7CisgICAgICAgIGVuZEluc2VydHMgPSBlbmRJbnNlcnRzIHx8IFtdOwor
ICAgICAgICB2YXIgYiA9IGJDaGlsZHJlbltiSW5kZXhdOworICAgICAgICBpbnNlcnROb2RlKGNo
YW5nZXMsIGxvY2FsUGF0Y2hlcywgYi5fMCwgYi5fMSwgdW5kZWZpbmVkLCBlbmRJbnNlcnRzKTsK
KyAgICAgICAgYkluZGV4Kys7CisgICAgfQorCisgICAgaWYgKGxvY2FsUGF0Y2hlcy5sZW5ndGgg
PiAwIHx8IGluc2VydHMubGVuZ3RoID4gMCB8fCB0eXBlb2YgZW5kSW5zZXJ0cyAhPT0gJ3VuZGVm
aW5lZCcpCisgICAgeworICAgICAgICBwYXRjaGVzLnB1c2gobWFrZVBhdGNoKCdwLXJlb3JkZXIn
LCByb290SW5kZXgsIHsKKyAgICAgICAgICAgIHBhdGNoZXM6IGxvY2FsUGF0Y2hlcywKKyAgICAg
ICAgICAgIGluc2VydHM6IGluc2VydHMsCisgICAgICAgICAgICBlbmRJbnNlcnRzOiBlbmRJbnNl
cnRzCisgICAgICAgIH0pKTsKKyAgICB9Cit9CisKKworCisvLy8vLy8vLy8vLy8gIENIQU5HRVMg
RlJPTSBLRVlFRCBESUZGICAvLy8vLy8vLy8vLy8KKworCit2YXIgUE9TVEZJWCA9ICdfZWxtVzZC
TCc7CisKKworZnVuY3Rpb24gaW5zZXJ0Tm9kZShjaGFuZ2VzLCBsb2NhbFBhdGNoZXMsIGtleSwg
dm5vZGUsIGJJbmRleCwgaW5zZXJ0cykKK3sKKyAgICB2YXIgZW50cnkgPSBjaGFuZ2VzW2tleV07
CisKKyAgICAvLyBuZXZlciBzZWVuIHRoaXMga2V5IGJlZm9yZQorICAgIGlmICh0eXBlb2YgZW50
cnkgPT09ICd1bmRlZmluZWQnKQorICAgIHsKKyAgICAgICAgZW50cnkgPSB7CisgICAgICAgICAg
ICB0YWc6ICdpbnNlcnQnLAorICAgICAgICAgICAgdm5vZGU6IHZub2RlLAorICAgICAgICAgICAg
aW5kZXg6IGJJbmRleCwKKyAgICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZAorICAgICAgICB9Owor
CisgICAgICAgIGluc2VydHMucHVzaCh7IGluZGV4OiBiSW5kZXgsIGVudHJ5OiBlbnRyeSB9KTsK
KyAgICAgICAgY2hhbmdlc1trZXldID0gZW50cnk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIHRoaXMga2V5IHdhcyByZW1vdmVkIGVhcmxpZXIsIGEgbWF0Y2ghCisgICAgaWYg
KGVudHJ5LnRhZyA9PT0gJ3JlbW92ZScpCisgICAgeworICAgICAgICBpbnNlcnRzLnB1c2goeyBp
bmRleDogYkluZGV4LCBlbnRyeTogZW50cnkgfSk7CisKKyAgICAgICAgZW50cnkudGFnID0gJ21v
dmUnOworICAgICAgICB2YXIgc3ViUGF0Y2hlcyA9IFtdOworICAgICAgICBkaWZmSGVscChlbnRy
eS52bm9kZSwgdm5vZGUsIHN1YlBhdGNoZXMsIGVudHJ5LmluZGV4KTsKKyAgICAgICAgZW50cnku
aW5kZXggPSBiSW5kZXg7CisgICAgICAgIGVudHJ5LmRhdGEuZGF0YSA9IHsKKyAgICAgICAgICAg
IHBhdGNoZXM6IHN1YlBhdGNoZXMsCisgICAgICAgICAgICBlbnRyeTogZW50cnkKKyAgICAgICAg
fTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gdGhpcyBrZXkgaGFzIGFscmVh
ZHkgYmVlbiBpbnNlcnRlZCBvciBtb3ZlZCwgYSBkdXBsaWNhdGUhCisgICAgaW5zZXJ0Tm9kZShj
aGFuZ2VzLCBsb2NhbFBhdGNoZXMsIGtleSArIFBPU1RGSVgsIHZub2RlLCBiSW5kZXgsIGluc2Vy
dHMpOworfQorCisKK2Z1bmN0aW9uIHJlbW92ZU5vZGUoY2hhbmdlcywgbG9jYWxQYXRjaGVzLCBr
ZXksIHZub2RlLCBpbmRleCkKK3sKKyAgICB2YXIgZW50cnkgPSBjaGFuZ2VzW2tleV07CisKKyAg
ICAvLyBuZXZlciBzZWVuIHRoaXMga2V5IGJlZm9yZQorICAgIGlmICh0eXBlb2YgZW50cnkgPT09
ICd1bmRlZmluZWQnKQorICAgIHsKKyAgICAgICAgdmFyIHBhdGNoID0gbWFrZVBhdGNoKCdwLXJl
bW92ZScsIGluZGV4LCB1bmRlZmluZWQpOworICAgICAgICBsb2NhbFBhdGNoZXMucHVzaChwYXRj
aCk7CisKKyAgICAgICAgY2hhbmdlc1trZXldID0geworICAgICAgICAgICAgdGFnOiAncmVtb3Zl
JywKKyAgICAgICAgICAgIHZub2RlOiB2bm9kZSwKKyAgICAgICAgICAgIGluZGV4OiBpbmRleCwK
KyAgICAgICAgICAgIGRhdGE6IHBhdGNoCisgICAgICAgIH07CisKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIHRoaXMga2V5IHdhcyBpbnNlcnRlZCBlYXJsaWVyLCBhIG1hdGNoIQor
ICAgIGlmIChlbnRyeS50YWcgPT09ICdpbnNlcnQnKQorICAgIHsKKyAgICAgICAgZW50cnkudGFn
ID0gJ21vdmUnOworICAgICAgICB2YXIgc3ViUGF0Y2hlcyA9IFtdOworICAgICAgICBkaWZmSGVs
cCh2bm9kZSwgZW50cnkudm5vZGUsIHN1YlBhdGNoZXMsIGluZGV4KTsKKworICAgICAgICB2YXIg
cGF0Y2ggPSBtYWtlUGF0Y2goJ3AtcmVtb3ZlJywgaW5kZXgsIHsKKyAgICAgICAgICAgIHBhdGNo
ZXM6IHN1YlBhdGNoZXMsCisgICAgICAgICAgICBlbnRyeTogZW50cnkKKyAgICAgICAgfSk7Cisg
ICAgICAgIGxvY2FsUGF0Y2hlcy5wdXNoKHBhdGNoKTsKKworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gdGhpcyBrZXkgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkIG9yIG1vdmVkLCBh
IGR1cGxpY2F0ZSEKKyAgICByZW1vdmVOb2RlKGNoYW5nZXMsIGxvY2FsUGF0Y2hlcywga2V5ICsg
UE9TVEZJWCwgdm5vZGUsIGluZGV4KTsKK30KKworCisKKy8vLy8vLy8vLy8vLyAgQUREIERPTSBO
T0RFUyAgLy8vLy8vLy8vLy8vCisvLworLy8gRWFjaCBET00gbm9kZSBoYXMgYW4gImluZGV4IiBh
c3NpZ25lZCBpbiBvcmRlciBvZiB0cmF2ZXJzYWwuIEl0IGlzIGltcG9ydGFudAorLy8gdG8gbWlu
aW1pemUgb3VyIGNyYXdsIG92ZXIgdGhlIGFjdHVhbCBET00sIHNvIHRoZXNlIGluZGV4ZXMgKGFs
b25nIHdpdGggdGhlCisvLyBkZXNjZW5kYW50c0NvdW50IG9mIHZpcnR1YWwgbm9kZXMpIGxldCB1
cyBza2lwIHRvdWNoaW5nIGVudGlyZSBzdWJ0cmVlcyBvZgorLy8gdGhlIERPTSBpZiB3ZSBrbm93
IHRoZXJlIGFyZSBubyBwYXRjaGVzIHRoZXJlLgorCisKK2Z1bmN0aW9uIGFkZERvbU5vZGVzKGRv
bU5vZGUsIHZOb2RlLCBwYXRjaGVzLCBldmVudE5vZGUpCit7CisgICAgYWRkRG9tTm9kZXNIZWxw
KGRvbU5vZGUsIHZOb2RlLCBwYXRjaGVzLCAwLCAwLCB2Tm9kZS5kZXNjZW5kYW50c0NvdW50LCBl
dmVudE5vZGUpOworfQorCisKKy8vIGFzc3VtZXMgYHBhdGNoZXNgIGlzIG5vbi1lbXB0eSBhbmQg
aW5kZXhlcyBpbmNyZWFzZSBtb25vdG9uaWNhbGx5LgorZnVuY3Rpb24gYWRkRG9tTm9kZXNIZWxw
KGRvbU5vZGUsIHZOb2RlLCBwYXRjaGVzLCBpLCBsb3csIGhpZ2gsIGV2ZW50Tm9kZSkKK3sKKyAg
ICB2YXIgcGF0Y2ggPSBwYXRjaGVzW2ldOworICAgIHZhciBpbmRleCA9IHBhdGNoLmluZGV4Owor
CisgICAgd2hpbGUgKGluZGV4ID09PSBsb3cpCisgICAgeworICAgICAgICB2YXIgcGF0Y2hUeXBl
ID0gcGF0Y2gudHlwZTsKKworICAgICAgICBpZiAocGF0Y2hUeXBlID09PSAncC10aHVuaycpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGFkZERvbU5vZGVzKGRvbU5vZGUsIHZOb2RlLm5vZGUsIHBh
dGNoLmRhdGEsIGV2ZW50Tm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocGF0Y2hU
eXBlID09PSAncC1yZW9yZGVyJykKKyAgICAgICAgeworICAgICAgICAgICAgcGF0Y2guZG9tTm9k
ZSA9IGRvbU5vZGU7CisgICAgICAgICAgICBwYXRjaC5ldmVudE5vZGUgPSBldmVudE5vZGU7CisK
KyAgICAgICAgICAgIHZhciBzdWJQYXRjaGVzID0gcGF0Y2guZGF0YS5wYXRjaGVzOworICAgICAg
ICAgICAgaWYgKHN1YlBhdGNoZXMubGVuZ3RoID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBhZGREb21Ob2Rlc0hlbHAoZG9tTm9kZSwgdk5vZGUsIHN1YlBhdGNoZXMsIDAsIGxv
dywgaGlnaCwgZXZlbnROb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBl
bHNlIGlmIChwYXRjaFR5cGUgPT09ICdwLXJlbW92ZScpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHBhdGNoLmRvbU5vZGUgPSBkb21Ob2RlOworICAgICAgICAgICAgcGF0Y2guZXZlbnROb2RlID0g
ZXZlbnROb2RlOworCisgICAgICAgICAgICB2YXIgZGF0YSA9IHBhdGNoLmRhdGE7CisgICAgICAg
ICAgICBpZiAodHlwZW9mIGRhdGEgIT09ICd1bmRlZmluZWQnKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGRhdGEuZW50cnkuZGF0YSA9IGRvbU5vZGU7CisgICAgICAgICAgICAgICAg
dmFyIHN1YlBhdGNoZXMgPSBkYXRhLnBhdGNoZXM7CisgICAgICAgICAgICAgICAgaWYgKHN1YlBh
dGNoZXMubGVuZ3RoID4gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGFkZERvbU5vZGVzSGVscChkb21Ob2RlLCB2Tm9kZSwgc3ViUGF0Y2hlcywgMCwgbG93LCBoaWdo
LCBldmVudE5vZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhdGNoLmRvbU5vZGUgPSBk
b21Ob2RlOworICAgICAgICAgICAgcGF0Y2guZXZlbnROb2RlID0gZXZlbnROb2RlOworICAgICAg
ICB9CisKKyAgICAgICAgaSsrOworCisgICAgICAgIGlmICghKHBhdGNoID0gcGF0Y2hlc1tpXSkg
fHwgKGluZGV4ID0gcGF0Y2guaW5kZXgpID4gaGlnaCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKHZOb2RlLnR5cGUpCisg
ICAgeworICAgICAgICBjYXNlICd0YWdnZXInOgorICAgICAgICAgICAgdmFyIHN1Yk5vZGUgPSB2
Tm9kZS5ub2RlOworCisgICAgICAgICAgICB3aGlsZSAoc3ViTm9kZS50eXBlID09PSAidGFnZ2Vy
IikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdWJOb2RlID0gc3ViTm9kZS5ub2Rl
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gYWRkRG9tTm9kZXNIZWxwKGRv
bU5vZGUsIHN1Yk5vZGUsIHBhdGNoZXMsIGksIGxvdyArIDEsIGhpZ2gsIGRvbU5vZGUuZWxtX2V2
ZW50X25vZGVfcmVmKTsKKworICAgICAgICBjYXNlICdub2RlJzoKKyAgICAgICAgICAgIHZhciB2
Q2hpbGRyZW4gPSB2Tm9kZS5jaGlsZHJlbjsKKyAgICAgICAgICAgIHZhciBjaGlsZE5vZGVzID0g
ZG9tTm9kZS5jaGlsZE5vZGVzOworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2Q2hp
bGRyZW4ubGVuZ3RoOyBqKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbG93Kys7
CisgICAgICAgICAgICAgICAgdmFyIHZDaGlsZCA9IHZDaGlsZHJlbltqXTsKKyAgICAgICAgICAg
ICAgICB2YXIgbmV4dExvdyA9IGxvdyArICh2Q2hpbGQuZGVzY2VuZGFudHNDb3VudCB8fCAwKTsK
KyAgICAgICAgICAgICAgICBpZiAobG93IDw9IGluZGV4ICYmIGluZGV4IDw9IG5leHRMb3cpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpID0gYWRkRG9tTm9kZXNIZWxw
KGNoaWxkTm9kZXNbal0sIHZDaGlsZCwgcGF0Y2hlcywgaSwgbG93LCBuZXh0TG93LCBldmVudE5v
ZGUpOworICAgICAgICAgICAgICAgICAgICBpZiAoIShwYXRjaCA9IHBhdGNoZXNbaV0pIHx8IChp
bmRleCA9IHBhdGNoLmluZGV4KSA+IGhpZ2gpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxvdyA9IG5leHRMb3c7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gaTsKKworICAgICAgICBjYXNlICdrZXllZC1ub2RlJzoK
KyAgICAgICAgICAgIHZhciB2Q2hpbGRyZW4gPSB2Tm9kZS5jaGlsZHJlbjsKKyAgICAgICAgICAg
IHZhciBjaGlsZE5vZGVzID0gZG9tTm9kZS5jaGlsZE5vZGVzOworICAgICAgICAgICAgZm9yICh2
YXIgaiA9IDA7IGogPCB2Q2hpbGRyZW4ubGVuZ3RoOyBqKyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgbG93Kys7CisgICAgICAgICAgICAgICAgdmFyIHZDaGlsZCA9IHZDaGlsZHJl
bltqXS5fMTsKKyAgICAgICAgICAgICAgICB2YXIgbmV4dExvdyA9IGxvdyArICh2Q2hpbGQuZGVz
Y2VuZGFudHNDb3VudCB8fCAwKTsKKyAgICAgICAgICAgICAgICBpZiAobG93IDw9IGluZGV4ICYm
IGluZGV4IDw9IG5leHRMb3cpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBpID0gYWRkRG9tTm9kZXNIZWxwKGNoaWxkTm9kZXNbal0sIHZDaGlsZCwgcGF0Y2hlcywgaSwg
bG93LCBuZXh0TG93LCBldmVudE5vZGUpOworICAgICAgICAgICAgICAgICAgICBpZiAoIShwYXRj
aCA9IHBhdGNoZXNbaV0pIHx8IChpbmRleCA9IHBhdGNoLmluZGV4KSA+IGhpZ2gpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxvdyA9
IG5leHRMb3c7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gaTsKKworICAgICAg
ICBjYXNlICd0ZXh0JzoKKyAgICAgICAgY2FzZSAndGh1bmsnOgorICAgICAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCdzaG91bGQgbmV2ZXIgdHJhdmVyc2UgYHRleHRgIG9yIGB0aHVua2Agbm9kZXMg
bGlrZSB0aGlzJyk7CisgICAgfQorfQorCisKKworLy8vLy8vLy8vLy8vICBBUFBMWSBQQVRDSEVT
ICAvLy8vLy8vLy8vLy8KKworCitmdW5jdGlvbiBhcHBseVBhdGNoZXMocm9vdERvbU5vZGUsIG9s
ZFZpcnR1YWxOb2RlLCBwYXRjaGVzLCBldmVudE5vZGUpCit7CisgICAgaWYgKHBhdGNoZXMubGVu
Z3RoID09PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJvb3REb21Ob2RlOworICAgIH0KKwor
ICAgIGFkZERvbU5vZGVzKHJvb3REb21Ob2RlLCBvbGRWaXJ0dWFsTm9kZSwgcGF0Y2hlcywgZXZl
bnROb2RlKTsKKyAgICByZXR1cm4gYXBwbHlQYXRjaGVzSGVscChyb290RG9tTm9kZSwgcGF0Y2hl
cyk7Cit9CisKK2Z1bmN0aW9uIGFwcGx5UGF0Y2hlc0hlbHAocm9vdERvbU5vZGUsIHBhdGNoZXMp
Cit7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRjaGVzLmxlbmd0aDsgaSsrKQorICAgIHsK
KyAgICAgICAgdmFyIHBhdGNoID0gcGF0Y2hlc1tpXTsKKyAgICAgICAgdmFyIGxvY2FsRG9tTm9k
ZSA9IHBhdGNoLmRvbU5vZGUKKyAgICAgICAgdmFyIG5ld05vZGUgPSBhcHBseVBhdGNoKGxvY2Fs
RG9tTm9kZSwgcGF0Y2gpOworICAgICAgICBpZiAobG9jYWxEb21Ob2RlID09PSByb290RG9tTm9k
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcm9vdERvbU5vZGUgPSBuZXdOb2RlOworICAgICAg
ICB9CisgICAgfQorICAgIHJldHVybiByb290RG9tTm9kZTsKK30KKworZnVuY3Rpb24gYXBwbHlQ
YXRjaChkb21Ob2RlLCBwYXRjaCkKK3sKKyAgICBzd2l0Y2ggKHBhdGNoLnR5cGUpCisgICAgewor
ICAgICAgICBjYXNlICdwLXJlZHJhdyc6CisgICAgICAgICAgICByZXR1cm4gYXBwbHlQYXRjaFJl
ZHJhdyhkb21Ob2RlLCBwYXRjaC5kYXRhLCBwYXRjaC5ldmVudE5vZGUpOworCisgICAgICAgIGNh
c2UgJ3AtZmFjdHMnOgorICAgICAgICAgICAgYXBwbHlGYWN0cyhkb21Ob2RlLCBwYXRjaC5ldmVu
dE5vZGUsIHBhdGNoLmRhdGEpOworICAgICAgICAgICAgcmV0dXJuIGRvbU5vZGU7CisKKyAgICAg
ICAgY2FzZSAncC10ZXh0JzoKKyAgICAgICAgICAgIGRvbU5vZGUucmVwbGFjZURhdGEoMCwgZG9t
Tm9kZS5sZW5ndGgsIHBhdGNoLmRhdGEpOworICAgICAgICAgICAgcmV0dXJuIGRvbU5vZGU7CisK
KyAgICAgICAgY2FzZSAncC10aHVuayc6CisgICAgICAgICAgICByZXR1cm4gYXBwbHlQYXRjaGVz
SGVscChkb21Ob2RlLCBwYXRjaC5kYXRhKTsKKworICAgICAgICBjYXNlICdwLXRhZ2dlcic6Cisg
ICAgICAgICAgICBkb21Ob2RlLmVsbV9ldmVudF9ub2RlX3JlZi50YWdnZXIgPSBwYXRjaC5kYXRh
OworICAgICAgICAgICAgcmV0dXJuIGRvbU5vZGU7CisKKyAgICAgICAgY2FzZSAncC1yZW1vdmUt
bGFzdCc6CisgICAgICAgICAgICB2YXIgaSA9IHBhdGNoLmRhdGE7CisgICAgICAgICAgICB3aGls
ZSAoaS0tKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRvbU5vZGUucmVtb3ZlQ2hp
bGQoZG9tTm9kZS5sYXN0Q2hpbGQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IGRvbU5vZGU7CisKKyAgICAgICAgY2FzZSAncC1hcHBlbmQnOgorICAgICAgICAgICAgdmFyIG5l
d05vZGVzID0gcGF0Y2guZGF0YTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3
Tm9kZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZG9tTm9k
ZS5hcHBlbmRDaGlsZChyZW5kZXIobmV3Tm9kZXNbaV0sIHBhdGNoLmV2ZW50Tm9kZSkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGRvbU5vZGU7CisKKyAgICAgICAgY2FzZSAn
cC1yZW1vdmUnOgorICAgICAgICAgICAgdmFyIGRhdGEgPSBwYXRjaC5kYXRhOworICAgICAgICAg
ICAgaWYgKHR5cGVvZiBkYXRhID09PSAndW5kZWZpbmVkJykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBkb21Ob2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZG9tTm9kZSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGRvbU5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2
YXIgZW50cnkgPSBkYXRhLmVudHJ5OworICAgICAgICAgICAgaWYgKHR5cGVvZiBlbnRyeS5pbmRl
eCAhPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZG9tTm9k
ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRvbU5vZGUpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZW50cnkuZGF0YSA9IGFwcGx5UGF0Y2hlc0hlbHAoZG9tTm9kZSwgZGF0YS5wYXRjaGVz
KTsKKyAgICAgICAgICAgIHJldHVybiBkb21Ob2RlOworCisgICAgICAgIGNhc2UgJ3AtcmVvcmRl
cic6CisgICAgICAgICAgICByZXR1cm4gYXBwbHlQYXRjaFJlb3JkZXIoZG9tTm9kZSwgcGF0Y2gp
OworCisgICAgICAgIGNhc2UgJ3AtY3VzdG9tJzoKKyAgICAgICAgICAgIHZhciBpbXBsID0gcGF0
Y2guZGF0YTsKKyAgICAgICAgICAgIHJldHVybiBpbXBsLmFwcGx5UGF0Y2goZG9tTm9kZSwgaW1w
bC5kYXRhKTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCdSYW4gaW50byBhbiB1bmtub3duIHBhdGNoIScpOworICAgIH0KK30KKworCitmdW5jdGlvbiBh
cHBseVBhdGNoUmVkcmF3KGRvbU5vZGUsIHZOb2RlLCBldmVudE5vZGUpCit7CisgICAgdmFyIHBh
cmVudE5vZGUgPSBkb21Ob2RlLnBhcmVudE5vZGU7CisgICAgdmFyIG5ld05vZGUgPSByZW5kZXIo
dk5vZGUsIGV2ZW50Tm9kZSk7CisKKyAgICBpZiAodHlwZW9mIG5ld05vZGUuZWxtX2V2ZW50X25v
ZGVfcmVmID09PSAndW5kZWZpbmVkJykKKyAgICB7CisgICAgICAgIG5ld05vZGUuZWxtX2V2ZW50
X25vZGVfcmVmID0gZG9tTm9kZS5lbG1fZXZlbnRfbm9kZV9yZWY7CisgICAgfQorCisgICAgaWYg
KHBhcmVudE5vZGUgJiYgbmV3Tm9kZSAhPT0gZG9tTm9kZSkKKyAgICB7CisgICAgICAgIHBhcmVu
dE5vZGUucmVwbGFjZUNoaWxkKG5ld05vZGUsIGRvbU5vZGUpOworICAgIH0KKyAgICByZXR1cm4g
bmV3Tm9kZTsKK30KKworCitmdW5jdGlvbiBhcHBseVBhdGNoUmVvcmRlcihkb21Ob2RlLCBwYXRj
aCkKK3sKKyAgICB2YXIgZGF0YSA9IHBhdGNoLmRhdGE7CisKKyAgICAvLyByZW1vdmUgZW5kIGlu
c2VydHMKKyAgICB2YXIgZnJhZyA9IGFwcGx5UGF0Y2hSZW9yZGVyRW5kSW5zZXJ0c0hlbHAoZGF0
YS5lbmRJbnNlcnRzLCBwYXRjaCk7CisKKyAgICAvLyByZW1vdmFscworICAgIGRvbU5vZGUgPSBh
cHBseVBhdGNoZXNIZWxwKGRvbU5vZGUsIGRhdGEucGF0Y2hlcyk7CisKKyAgICAvLyBpbnNlcnRz
CisgICAgdmFyIGluc2VydHMgPSBkYXRhLmluc2VydHM7CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBpbnNlcnRzLmxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgdmFyIGluc2VydCA9IGluc2Vy
dHNbaV07CisgICAgICAgIHZhciBlbnRyeSA9IGluc2VydC5lbnRyeTsKKyAgICAgICAgdmFyIG5v
ZGUgPSBlbnRyeS50YWcgPT09ICdtb3ZlJworICAgICAgICAgICAgPyBlbnRyeS5kYXRhCisgICAg
ICAgICAgICA6IHJlbmRlcihlbnRyeS52bm9kZSwgcGF0Y2guZXZlbnROb2RlKTsKKyAgICAgICAg
ZG9tTm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgZG9tTm9kZS5jaGlsZE5vZGVzW2luc2VydC5pbmRl
eF0pOworICAgIH0KKworICAgIC8vIGFkZCBlbmQgaW5zZXJ0cworICAgIGlmICh0eXBlb2YgZnJh
ZyAhPT0gJ3VuZGVmaW5lZCcpCisgICAgeworICAgICAgICBkb21Ob2RlLmFwcGVuZENoaWxkKGZy
YWcpOworICAgIH0KKworICAgIHJldHVybiBkb21Ob2RlOworfQorCisKK2Z1bmN0aW9uIGFwcGx5
UGF0Y2hSZW9yZGVyRW5kSW5zZXJ0c0hlbHAoZW5kSW5zZXJ0cywgcGF0Y2gpCit7CisgICAgaWYg
KHR5cGVvZiBlbmRJbnNlcnRzID09PSAndW5kZWZpbmVkJykKKyAgICB7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICB2YXIgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21l
bnQoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVuZEluc2VydHMubGVuZ3RoOyBpKyspCisg
ICAgeworICAgICAgICB2YXIgaW5zZXJ0ID0gZW5kSW5zZXJ0c1tpXTsKKyAgICAgICAgdmFyIGVu
dHJ5ID0gaW5zZXJ0LmVudHJ5OworICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGVudHJ5LnRhZyA9
PT0gJ21vdmUnCisgICAgICAgICAgICA/IGVudHJ5LmRhdGEKKyAgICAgICAgICAgIDogcmVuZGVy
KGVudHJ5LnZub2RlLCBwYXRjaC5ldmVudE5vZGUpCisgICAgICAgICk7CisgICAgfQorICAgIHJl
dHVybiBmcmFnOworfQorCisKKworLy8vLy8vLy8vLy8vICBQUk9HUkFNUyAgLy8vLy8vLy8vLy8v
CisKKworZnVuY3Rpb24gcHJvZ3JhbVdpdGhGbGFncyhkZXRhaWxzKQoreworICAgIHJldHVybiB7
CisgICAgICAgIGluaXQ6IGRldGFpbHMuaW5pdCwKKyAgICAgICAgdXBkYXRlOiBkZXRhaWxzLnVw
ZGF0ZSwKKyAgICAgICAgc3Vic2NyaXB0aW9uczogZGV0YWlscy5zdWJzY3JpcHRpb25zLAorICAg
ICAgICB2aWV3OiBkZXRhaWxzLnZpZXcsCisgICAgICAgIHJlbmRlcmVyOiByZW5kZXJlcgorICAg
IH07Cit9CisKKworcmV0dXJuIHsKKyAgICBub2RlOiBub2RlLAorICAgIHRleHQ6IHRleHQsCisK
KyAgICBjdXN0b206IGN1c3RvbSwKKworICAgIG1hcDogRjIobWFwKSwKKworICAgIG9uOiBGMyhv
biksCisgICAgc3R5bGU6IHN0eWxlLAorICAgIHByb3BlcnR5OiBGMihwcm9wZXJ0eSksCisgICAg
YXR0cmlidXRlOiBGMihhdHRyaWJ1dGUpLAorICAgIGF0dHJpYnV0ZU5TOiBGMyhhdHRyaWJ1dGVO
UyksCisKKyAgICBsYXp5OiBGMihsYXp5KSwKKyAgICBsYXp5MjogRjMobGF6eTIpLAorICAgIGxh
enkzOiBGNChsYXp5MyksCisgICAga2V5ZWROb2RlOiBGMyhrZXllZE5vZGUpLAorCisgICAgcHJv
Z3JhbVdpdGhGbGFnczogcHJvZ3JhbVdpdGhGbGFncworfTsKKworfSgpOwordmFyIF9lbG1fbGFu
ZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJHByb2dyYW1XaXRoRmxhZ3MgPSBfZWxtX2xhbmckdmly
dHVhbF9kb20kTmF0aXZlX1ZpcnR1YWxEb20ucHJvZ3JhbVdpdGhGbGFnczsKK3ZhciBfZWxtX2xh
bmckdmlydHVhbF9kb20kVmlydHVhbERvbSRrZXllZE5vZGUgPSBfZWxtX2xhbmckdmlydHVhbF9k
b20kTmF0aXZlX1ZpcnR1YWxEb20ua2V5ZWROb2RlOwordmFyIF9lbG1fbGFuZyR2aXJ0dWFsX2Rv
bSRWaXJ0dWFsRG9tJGxhenkzID0gX2VsbV9sYW5nJHZpcnR1YWxfZG9tJE5hdGl2ZV9WaXJ0dWFs
RG9tLmxhenkzOwordmFyIF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJGxhenkyID0g
X2VsbV9sYW5nJHZpcnR1YWxfZG9tJE5hdGl2ZV9WaXJ0dWFsRG9tLmxhenkyOwordmFyIF9lbG1f
bGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJGxhenkgPSBfZWxtX2xhbmckdmlydHVhbF9kb20k
TmF0aXZlX1ZpcnR1YWxEb20ubGF6eTsKK3ZhciBfZWxtX2xhbmckdmlydHVhbF9kb20kVmlydHVh
bERvbSRkZWZhdWx0T3B0aW9ucyA9IHtzdG9wUHJvcGFnYXRpb246IGZhbHNlLCBwcmV2ZW50RGVm
YXVsdDogZmFsc2V9OwordmFyIF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJG9uV2l0
aE9wdGlvbnMgPSBfZWxtX2xhbmckdmlydHVhbF9kb20kTmF0aXZlX1ZpcnR1YWxEb20ub247Cit2
YXIgX2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1YWxEb20kb24gPSBGMigKKyAgICBmdW5jdGlv
biAoZXZlbnROYW1lLCBkZWNvZGVyKSB7CisgICAgICAgIHJldHVybiBBMyhfZWxtX2xhbmckdmly
dHVhbF9kb20kVmlydHVhbERvbSRvbldpdGhPcHRpb25zLCBldmVudE5hbWUsIF9lbG1fbGFuZyR2
aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJGRlZmF1bHRPcHRpb25zLCBkZWNvZGVyKTsKKyAgICB9KTsK
K3ZhciBfZWxtX2xhbmckdmlydHVhbF9kb20kVmlydHVhbERvbSRzdHlsZSA9IF9lbG1fbGFuZyR2
aXJ0dWFsX2RvbSROYXRpdmVfVmlydHVhbERvbS5zdHlsZTsKK3ZhciBfZWxtX2xhbmckdmlydHVh
bF9kb20kVmlydHVhbERvbSRhdHRyaWJ1dGVOUyA9IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSROYXRp
dmVfVmlydHVhbERvbS5hdHRyaWJ1dGVOUzsKK3ZhciBfZWxtX2xhbmckdmlydHVhbF9kb20kVmly
dHVhbERvbSRhdHRyaWJ1dGUgPSBfZWxtX2xhbmckdmlydHVhbF9kb20kTmF0aXZlX1ZpcnR1YWxE
b20uYXR0cmlidXRlOwordmFyIF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJHByb3Bl
cnR5ID0gX2VsbV9sYW5nJHZpcnR1YWxfZG9tJE5hdGl2ZV9WaXJ0dWFsRG9tLnByb3BlcnR5Owor
dmFyIF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJG1hcCA9IF9lbG1fbGFuZyR2aXJ0
dWFsX2RvbSROYXRpdmVfVmlydHVhbERvbS5tYXA7Cit2YXIgX2VsbV9sYW5nJHZpcnR1YWxfZG9t
JFZpcnR1YWxEb20kdGV4dCA9IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSROYXRpdmVfVmlydHVhbERv
bS50ZXh0OwordmFyIF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJG5vZGUgPSBfZWxt
X2xhbmckdmlydHVhbF9kb20kTmF0aXZlX1ZpcnR1YWxEb20ubm9kZTsKK3ZhciBfZWxtX2xhbmck
dmlydHVhbF9kb20kVmlydHVhbERvbSRPcHRpb25zID0gRjIoCisgICAgZnVuY3Rpb24gKGEsIGIp
IHsKKyAgICAgICAgcmV0dXJuIHtzdG9wUHJvcGFnYXRpb246IGEsIHByZXZlbnREZWZhdWx0OiBi
fTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckdmlydHVhbF9kb20kVmlydHVhbERvbSROb2RlID0g
e2N0b3I6ICdOb2RlJ307Cit2YXIgX2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1YWxEb20kUHJv
cGVydHkgPSB7Y3RvcjogJ1Byb3BlcnR5J307CisKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHRl
eHQgPSBfZWxtX2xhbmckdmlydHVhbF9kb20kVmlydHVhbERvbSR0ZXh0OwordmFyIF9lbG1fbGFu
ZyRodG1sJEh0bWwkbm9kZSA9IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJG5vZGU7
Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRib2R5ID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2Rl
KCdib2R5Jyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRzZWN0aW9uID0gX2VsbV9sYW5nJGh0
bWwkSHRtbCRub2RlKCdzZWN0aW9uJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRuYXYgPSBf
ZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ25hdicpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwk
YXJ0aWNsZSA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnYXJ0aWNsZScpOwordmFyIF9lbG1f
bGFuZyRodG1sJEh0bWwkYXNpZGUgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2FzaWRlJyk7
Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRoMSA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgn
aDEnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGgyID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRu
b2RlKCdoMicpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkaDMgPSBfZWxtX2xhbmckaHRtbCRI
dG1sJG5vZGUoJ2gzJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRoNCA9IF9lbG1fbGFuZyRo
dG1sJEh0bWwkbm9kZSgnaDQnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGg1ID0gX2VsbV9s
YW5nJGh0bWwkSHRtbCRub2RlKCdoNScpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkaDYgPSBf
ZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2g2Jyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRo
ZWFkZXIgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2hlYWRlcicpOwordmFyIF9lbG1fbGFu
ZyRodG1sJEh0bWwkZm9vdGVyID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdmb290ZXInKTsK
K3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGFkZHJlc3MgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5v
ZGUoJ2FkZHJlc3MnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJG1haW4kID0gX2VsbV9sYW5n
JGh0bWwkSHRtbCRub2RlKCdtYWluJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRwID0gX2Vs
bV9sYW5nJGh0bWwkSHRtbCRub2RlKCdwJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRociA9
IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnaHInKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1s
JHByZSA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgncHJlJyk7Cit2YXIgX2VsbV9sYW5nJGh0
bWwkSHRtbCRibG9ja3F1b3RlID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdibG9ja3F1b3Rl
Jyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRvbCA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9k
ZSgnb2wnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHVsID0gX2VsbV9sYW5nJGh0bWwkSHRt
bCRub2RlKCd1bCcpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkbGkgPSBfZWxtX2xhbmckaHRt
bCRIdG1sJG5vZGUoJ2xpJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRkbCA9IF9lbG1fbGFu
ZyRodG1sJEh0bWwkbm9kZSgnZGwnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGR0ID0gX2Vs
bV9sYW5nJGh0bWwkSHRtbCRub2RlKCdkdCcpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkZGQg
PSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2RkJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRt
bCRmaWd1cmUgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2ZpZ3VyZScpOwordmFyIF9lbG1f
bGFuZyRodG1sJEh0bWwkZmlnY2FwdGlvbiA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnZmln
Y2FwdGlvbicpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkZGl2ID0gX2VsbV9sYW5nJGh0bWwk
SHRtbCRub2RlKCdkaXYnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGEgPSBfZWxtX2xhbmck
aHRtbCRIdG1sJG5vZGUoJ2EnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGVtID0gX2VsbV9s
YW5nJGh0bWwkSHRtbCRub2RlKCdlbScpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkc3Ryb25n
ID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdzdHJvbmcnKTsKK3ZhciBfZWxtX2xhbmckaHRt
bCRIdG1sJHNtYWxsID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdzbWFsbCcpOwordmFyIF9l
bG1fbGFuZyRodG1sJEh0bWwkcyA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgncycpOwordmFy
IF9lbG1fbGFuZyRodG1sJEh0bWwkY2l0ZSA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnY2l0
ZScpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkcSA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9k
ZSgncScpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkZGZuID0gX2VsbV9sYW5nJGh0bWwkSHRt
bCRub2RlKCdkZm4nKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGFiYnIgPSBfZWxtX2xhbmck
aHRtbCRIdG1sJG5vZGUoJ2FiYnInKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHRpbWUgPSBf
ZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3RpbWUnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1s
JGNvZGUgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2NvZGUnKTsKK3ZhciBfZWxtX2xhbmck
aHRtbCRIdG1sJHZhciA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgndmFyJyk7Cit2YXIgX2Vs
bV9sYW5nJGh0bWwkSHRtbCRzYW1wID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdzYW1wJyk7
Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRrYmQgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUo
J2tiZCcpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkc3ViID0gX2VsbV9sYW5nJGh0bWwkSHRt
bCRub2RlKCdzdWInKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHN1cCA9IF9lbG1fbGFuZyRo
dG1sJEh0bWwkbm9kZSgnc3VwJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRpID0gX2VsbV9s
YW5nJGh0bWwkSHRtbCRub2RlKCdpJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRiID0gX2Vs
bV9sYW5nJGh0bWwkSHRtbCRub2RlKCdiJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCR1ID0g
X2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCd1Jyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRt
YXJrID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdtYXJrJyk7Cit2YXIgX2VsbV9sYW5nJGh0
bWwkSHRtbCRydWJ5ID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdydWJ5Jyk7Cit2YXIgX2Vs
bV9sYW5nJGh0bWwkSHRtbCRydCA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgncnQnKTsKK3Zh
ciBfZWxtX2xhbmckaHRtbCRIdG1sJHJwID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdycCcp
OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkYmRpID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2Rl
KCdiZGknKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGJkbyA9IF9lbG1fbGFuZyRodG1sJEh0
bWwkbm9kZSgnYmRvJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRzcGFuID0gX2VsbV9sYW5n
JGh0bWwkSHRtbCRub2RlKCdzcGFuJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRiciA9IF9l
bG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnYnInKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHdi
ciA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnd2JyJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwk
SHRtbCRpbnMgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2lucycpOwordmFyIF9lbG1fbGFu
ZyRodG1sJEh0bWwkZGVsID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdkZWwnKTsKK3ZhciBf
ZWxtX2xhbmckaHRtbCRIdG1sJGltZyA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnaW1nJyk7
Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRpZnJhbWUgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5v
ZGUoJ2lmcmFtZScpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkZW1iZWQgPSBfZWxtX2xhbmck
aHRtbCRIdG1sJG5vZGUoJ2VtYmVkJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRvYmplY3Qg
PSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ29iamVjdCcpOwordmFyIF9lbG1fbGFuZyRodG1s
JEh0bWwkcGFyYW0gPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3BhcmFtJyk7Cit2YXIgX2Vs
bV9sYW5nJGh0bWwkSHRtbCR2aWRlbyA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgndmlkZW8n
KTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGF1ZGlvID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRu
b2RlKCdhdWRpbycpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkc291cmNlID0gX2VsbV9sYW5n
JGh0bWwkSHRtbCRub2RlKCdzb3VyY2UnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHRyYWNr
ID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCd0cmFjaycpOwordmFyIF9lbG1fbGFuZyRodG1s
JEh0bWwkY2FudmFzID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdjYW52YXMnKTsKK3ZhciBf
ZWxtX2xhbmckaHRtbCRIdG1sJHN2ZyA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgnc3ZnJyk7
Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRtYXRoID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2Rl
KCdtYXRoJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCR0YWJsZSA9IF9lbG1fbGFuZyRodG1s
JEh0bWwkbm9kZSgndGFibGUnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGNhcHRpb24gPSBf
ZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2NhcHRpb24nKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRI
dG1sJGNvbGdyb3VwID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdjb2xncm91cCcpOwordmFy
IF9lbG1fbGFuZyRodG1sJEh0bWwkY29sID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdjb2wn
KTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHRib2R5ID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRu
b2RlKCd0Ym9keScpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkdGhlYWQgPSBfZWxtX2xhbmck
aHRtbCRIdG1sJG5vZGUoJ3RoZWFkJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCR0Zm9vdCA9
IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgndGZvb3QnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRI
dG1sJHRyID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCd0cicpOwordmFyIF9lbG1fbGFuZyRo
dG1sJEh0bWwkdGQgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ3RkJyk7Cit2YXIgX2VsbV9s
YW5nJGh0bWwkSHRtbCR0aCA9IF9lbG1fbGFuZyRodG1sJEh0bWwkbm9kZSgndGgnKTsKK3ZhciBf
ZWxtX2xhbmckaHRtbCRIdG1sJGZvcm0gPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2Zvcm0n
KTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGZpZWxkc2V0ID0gX2VsbV9sYW5nJGh0bWwkSHRt
bCRub2RlKCdmaWVsZHNldCcpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkbGVnZW5kID0gX2Vs
bV9sYW5nJGh0bWwkSHRtbCRub2RlKCdsZWdlbmQnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1s
JGxhYmVsID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdsYWJlbCcpOwordmFyIF9lbG1fbGFu
ZyRodG1sJEh0bWwkaW5wdXQgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2lucHV0Jyk7Cit2
YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRidXR0b24gPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUo
J2J1dHRvbicpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkc2VsZWN0ID0gX2VsbV9sYW5nJGh0
bWwkSHRtbCRub2RlKCdzZWxlY3QnKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJGRhdGFsaXN0
ID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdkYXRhbGlzdCcpOwordmFyIF9lbG1fbGFuZyRo
dG1sJEh0bWwkb3B0Z3JvdXAgPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ29wdGdyb3VwJyk7
Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRvcHRpb24gPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5v
ZGUoJ29wdGlvbicpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkdGV4dGFyZWEgPSBfZWxtX2xh
bmckaHRtbCRIdG1sJG5vZGUoJ3RleHRhcmVhJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRr
ZXlnZW4gPSBfZWxtX2xhbmckaHRtbCRIdG1sJG5vZGUoJ2tleWdlbicpOwordmFyIF9lbG1fbGFu
ZyRodG1sJEh0bWwkb3V0cHV0ID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdvdXRwdXQnKTsK
K3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJHByb2dyZXNzID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRu
b2RlKCdwcm9ncmVzcycpOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWwkbWV0ZXIgPSBfZWxtX2xh
bmckaHRtbCRIdG1sJG5vZGUoJ21ldGVyJyk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRkZXRh
aWxzID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdkZXRhaWxzJyk7Cit2YXIgX2VsbV9sYW5n
JGh0bWwkSHRtbCRzdW1tYXJ5ID0gX2VsbV9sYW5nJGh0bWwkSHRtbCRub2RlKCdzdW1tYXJ5Jyk7
Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbCRtZW51aXRlbSA9IF9lbG1fbGFuZyRodG1sJEh0bWwk
bm9kZSgnbWVudWl0ZW0nKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sJG1lbnUgPSBfZWxtX2xh
bmckaHRtbCRIdG1sJG5vZGUoJ21lbnUnKTsKKwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXBw
JHByb2dyYW1XaXRoRmxhZ3MgPSBfZWxtX2xhbmckdmlydHVhbF9kb20kVmlydHVhbERvbSRwcm9n
cmFtV2l0aEZsYWdzOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXBwJHByb2dyYW0gPSBmdW5j
dGlvbiAoYXBwKSB7CisgICAgcmV0dXJuIF9lbG1fbGFuZyRodG1sJEh0bWxfQXBwJHByb2dyYW1X
aXRoRmxhZ3MoCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy51cGRhdGUoCisg
ICAgICAgICAgICBhcHAsCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5pdDogZnVu
Y3Rpb24gKF9wMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBwLmluaXQ7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSkpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRI
dG1sX0FwcCRiZWdpbm5lclByb2dyYW0gPSBmdW5jdGlvbiAoX3AxKSB7CisgICAgdmFyIF9wMiA9
IF9wMTsKKyAgICByZXR1cm4gX2VsbV9sYW5nJGh0bWwkSHRtbF9BcHAkcHJvZ3JhbVdpdGhGbGFn
cygKKyAgICAgICAgeworICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24gKF9wMykgeworICAgICAg
ICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUk
UGxhdGZvcm1fQ21kX29wc1snISddLAorICAgICAgICAgICAgICAgICAgICBfcDIubW9kZWwsCisg
ICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgK
KyAgICAgICAgICAgICAgICAgICAgICAgIFtdKSk7CisgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgdXBkYXRlOiBGMigKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiAobXNnLCBtb2RlbCkgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSRQbGF0Zm9ybV9DbWRfb3BzWychJ10sCisgICAgICAgICAgICAgICAgICAg
ICAgICBBMihfcDIudXBkYXRlLCBtc2csIG1vZGVsKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbXSkpOworICAgICAgICAgICAgICAgIH0pLAorICAgICAgICAgICAgdmlldzog
X3AyLnZpZXcsCisgICAgICAgICAgICBzdWJzY3JpcHRpb25zOiBmdW5jdGlvbiAoX3A0KSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtX1N1YiRub25lOwor
ICAgICAgICAgICAgfQorICAgICAgICB9KTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9B
cHAkbWFwID0gX2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1YWxEb20kbWFwOworCit2YXIgX2Vs
bV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGF0dHJpYnV0ZSA9IF9lbG1fbGFuZyR2aXJ0dWFs
X2RvbSRWaXJ0dWFsRG9tJGF0dHJpYnV0ZTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJp
YnV0ZXMkY29udGV4dG1lbnUgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2Vs
bV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGF0dHJpYnV0ZSwgJ2NvbnRleHRtZW51JywgdmFs
dWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkZHJhZ2dhYmxlID0g
ZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0
cmlidXRlcyRhdHRyaWJ1dGUsICdkcmFnZ2FibGUnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFu
ZyRodG1sJEh0bWxfQXR0cmlidXRlcyRsaXN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0
dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRhdHRyaWJ1dGUsICdsaXN0Jywg
dmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkbWF4bGVuZ3Ro
ID0gZnVuY3Rpb24gKG4pIHsKKyAgICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1fbGFuZyRodG1s
JEh0bWxfQXR0cmlidXRlcyRhdHRyaWJ1dGUsCisgICAgICAgICdtYXhsZW5ndGgnLAorICAgICAg
ICBfZWxtX2xhbmckY29yZSRCYXNpY3MkdG9TdHJpbmcobikpOworfTsKK3ZhciBfZWxtX2xhbmck
aHRtbCRIdG1sX0F0dHJpYnV0ZXMkZGF0ZXRpbWUgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICBy
ZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGF0dHJpYnV0ZSwgJ2RhdGV0
aW1lJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkcHVi
ZGF0ZSA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRI
dG1sX0F0dHJpYnV0ZXMkYXR0cmlidXRlLCAncHViZGF0ZScsIHZhbHVlKTsKK307Cit2YXIgX2Vs
bV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGNvbHNwYW4gPSBmdW5jdGlvbiAobikgeworICAg
IHJldHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGF0dHJp
YnV0ZSwKKyAgICAgICAgJ2NvbHNwYW4nLAorICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNpY3Mk
dG9TdHJpbmcobikpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkcm93
c3BhbiA9IGZ1bmN0aW9uIChuKSB7CisgICAgcmV0dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmck
aHRtbCRIdG1sX0F0dHJpYnV0ZXMkYXR0cmlidXRlLAorICAgICAgICAncm93c3BhbicsCisgICAg
ICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyR0b1N0cmluZyhuKSk7Cit9OwordmFyIF9lbG1fbGFu
ZyRodG1sJEh0bWxfQXR0cmlidXRlcyRwcm9wZXJ0eSA9IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRW
aXJ0dWFsRG9tJHByb3BlcnR5OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRz
dHJpbmdQcm9wZXJ0eSA9IEYyKAorICAgIGZ1bmN0aW9uIChuYW1lLCBzdHJpbmcpIHsKKyAgICAg
ICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVz
JHByb3BlcnR5LAorICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JEpzb25fRW5jb2RlJHN0cmluZyhzdHJpbmcpKTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckaHRt
bCRIdG1sX0F0dHJpYnV0ZXMkY2xhc3MgPSBmdW5jdGlvbiAobmFtZSkgeworICAgIHJldHVybiBB
MihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdjbGFzc05h
bWUnLCBuYW1lKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGlkID0g
ZnVuY3Rpb24gKG5hbWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRy
aWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnaWQnLCBuYW1lKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0
bWwkSHRtbF9BdHRyaWJ1dGVzJHRpdGxlID0gZnVuY3Rpb24gKG5hbWUpIHsKKyAgICByZXR1cm4g
QTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAndGl0bGUn
LCBuYW1lKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGFjY2Vzc2tl
eSA9IGZ1bmN0aW9uICgkY2hhcikgeworICAgIHJldHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5n
JGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LAorICAgICAgICAnYWNjZXNzS2V5
JywKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGZyb21DaGFyKCRjaGFyKSk7Cit9Owor
dmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRkaXIgPSBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1By
b3BlcnR5LCAnZGlyJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJp
YnV0ZXMkZHJvcHpvbmUgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9s
YW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnZHJvcHpvbmUnLCB2YWx1
ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRpdGVtcHJvcCA9IGZ1
bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJp
YnV0ZXMkc3RyaW5nUHJvcGVydHksICdpdGVtcHJvcCcsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9s
YW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGxhbmcgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICBy
ZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAn
bGFuZycsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHRh
YmluZGV4ID0gZnVuY3Rpb24gKG4pIHsKKyAgICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1fbGFu
ZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwKKyAgICAgICAgJ3RhYkluZGV4
JywKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHRvU3RyaW5nKG4pKTsKK307Cit2YXIg
X2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGNoYXJzZXQgPSBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1By
b3BlcnR5LCAnY2hhcnNldCcsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9B
dHRyaWJ1dGVzJGNvbnRlbnQgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2Vs
bV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnY29udGVudCcsIHZh
bHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGh0dHBFcXVpdiA9
IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdodHRwRXF1aXYnLCB2YWx1ZSk7Cit9OwordmFyIF9l
bG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRsYW5ndWFnZSA9IGZ1bmN0aW9uICh2YWx1ZSkg
eworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJv
cGVydHksICdsYW5ndWFnZScsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9B
dHRyaWJ1dGVzJHNyYyA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xh
bmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdzcmMnLCB2YWx1ZSk7Cit9
OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRoZWlnaHQgPSBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0
cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwKKyAgICAgICAgJ2hlaWdodCcsCisgICAgICAgIF9lbG1f
bGFuZyRjb3JlJEJhc2ljcyR0b1N0cmluZyh2YWx1ZSkpOworfTsKK3ZhciBfZWxtX2xhbmckaHRt
bCRIdG1sX0F0dHJpYnV0ZXMkd2lkdGggPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4g
QTIoCisgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0
eSwKKyAgICAgICAgJ3dpZHRoJywKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHRvU3Ry
aW5nKHZhbHVlKSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRhbHQg
PSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9B
dHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnYWx0JywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xh
bmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkcHJlbG9hZCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAg
IHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHks
ICdwcmVsb2FkJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0
ZXMkcG9zdGVyID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRo
dG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ3Bvc3RlcicsIHZhbHVlKTsKK307
Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGtpbmQgPSBmdW5jdGlvbiAodmFs
dWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmlu
Z1Byb3BlcnR5LCAna2luZCcsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9B
dHRyaWJ1dGVzJHNyY2xhbmcgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2Vs
bV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnc3JjbGFuZycsIHZh
bHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHNhbmRib3ggPSBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRy
aWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnc2FuZGJveCcsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9s
YW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHNyY2RvYyA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAg
IHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHks
ICdzcmNkb2MnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRl
cyR0eXBlJCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRt
bCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICd0eXBlJywgdmFsdWUpOworfTsKK3Zh
ciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkdmFsdWUgPSBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1By
b3BlcnR5LCAndmFsdWUnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0
cmlidXRlcyRkZWZhdWx0VmFsdWUgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIo
X2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnZGVmYXVsdFZh
bHVlJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkcGxh
Y2Vob2xkZXIgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0
bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAncGxhY2Vob2xkZXInLCB2YWx1ZSk7
Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRhY2NlcHQgPSBmdW5jdGlv
biAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVz
JHN0cmluZ1Byb3BlcnR5LCAnYWNjZXB0JywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRt
bCRIdG1sX0F0dHJpYnV0ZXMkYWNjZXB0Q2hhcnNldCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAg
IHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHks
ICdhY2NlcHRDaGFyc2V0JywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkYWN0aW9uID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1f
bGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ2FjdGlvbicsIHZhbHVl
KTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGF1dG9jb21wbGV0ZSA9
IGZ1bmN0aW9uIChib29sKSB7CisgICAgcmV0dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmckaHRt
bCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksCisgICAgICAgICdhdXRvY29tcGxldGUn
LAorICAgICAgICBib29sID8gJ29uJyA6ICdvZmYnKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwk
SHRtbF9BdHRyaWJ1dGVzJGF1dG9zYXZlID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJu
IEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ2F1dG9z
YXZlJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkZW5j
dHlwZSA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRI
dG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdlbmN0eXBlJywgdmFsdWUpOworfTsKK3Zh
ciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkZm9ybWFjdGlvbiA9IGZ1bmN0aW9uICh2
YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3Ry
aW5nUHJvcGVydHksICdmb3JtQWN0aW9uJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRt
bCRIdG1sX0F0dHJpYnV0ZXMkbWlubGVuZ3RoID0gZnVuY3Rpb24gKG4pIHsKKyAgICByZXR1cm4g
QTIoCisgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0
eSwKKyAgICAgICAgJ21pbkxlbmd0aCcsCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyR0
b1N0cmluZyhuKSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRtZXRo
b2QgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRt
bF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnbWV0aG9kJywgdmFsdWUpOworfTsKK3ZhciBf
ZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkbmFtZSA9IGZ1bmN0aW9uICh2YWx1ZSkgewor
ICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVy
dHksICduYW1lJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0
ZXMkcGF0dGVybiA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmck
aHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdwYXR0ZXJuJywgdmFsdWUpOwor
fTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc2l6ZSA9IGZ1bmN0aW9uIChu
KSB7CisgICAgcmV0dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0
ZXMkc3RyaW5nUHJvcGVydHksCisgICAgICAgICdzaXplJywKKyAgICAgICAgX2VsbV9sYW5nJGNv
cmUkQmFzaWNzJHRvU3RyaW5nKG4pKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRy
aWJ1dGVzJGZvciA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmck
aHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdodG1sRm9yJywgdmFsdWUpOwor
fTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkZm9ybSA9IGZ1bmN0aW9uICh2
YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3Ry
aW5nUHJvcGVydHksICdmb3JtJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1s
X0F0dHJpYnV0ZXMkbWF4ID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1f
bGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ21heCcsIHZhbHVlKTsK
K307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJG1pbiA9IGZ1bmN0aW9uICh2
YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3Ry
aW5nUHJvcGVydHksICdtaW4nLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxf
QXR0cmlidXRlcyRzdGVwID0gZnVuY3Rpb24gKG4pIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5n
JGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnc3RlcCcsIG4pOworfTsKK3Zh
ciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkY29scyA9IGZ1bmN0aW9uIChuKSB7Cisg
ICAgcmV0dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3Ry
aW5nUHJvcGVydHksCisgICAgICAgICdjb2xzJywKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFz
aWNzJHRvU3RyaW5nKG4pKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVz
JHJvd3MgPSBmdW5jdGlvbiAobikgeworICAgIHJldHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5n
JGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LAorICAgICAgICAncm93cycsCisg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyR0b1N0cmluZyhuKSk7Cit9OwordmFyIF9lbG1f
bGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyR3cmFwID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
cmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwg
J3dyYXAnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyR1
c2VtYXAgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwk
SHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAndXNlTWFwJywgdmFsdWUpOworfTsKK3Zh
ciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc2hhcGUgPSBmdW5jdGlvbiAodmFsdWUp
IHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1By
b3BlcnR5LCAnc2hhcGUnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0
cmlidXRlcyRjb29yZHMgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9s
YW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnY29vcmRzJywgdmFsdWUp
OworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkY2hhbGxlbmdlID0gZnVu
Y3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmli
dXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ2NoYWxsZW5nZScsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9s
YW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGtleXR5cGUgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAg
ICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5
LCAna2V5dHlwZScsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1
dGVzJGFsaWduID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRo
dG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ2FsaWduJywgdmFsdWUpOworfTsK
K3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkY2l0ZSA9IGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5n
UHJvcGVydHksICdjaXRlJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkaHJlZiA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xh
bmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdocmVmJywgdmFsdWUpOwor
fTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkdGFyZ2V0ID0gZnVuY3Rpb24g
KHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRz
dHJpbmdQcm9wZXJ0eSwgJ3RhcmdldCcsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwk
SHRtbF9BdHRyaWJ1dGVzJGRvd25sb2FkQXMgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1
cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnZG93
bmxvYWQnLCB2YWx1ZSk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRo
cmVmbGFuZyA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRt
bCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdocmVmbGFuZycsIHZhbHVlKTsKK307
Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJG1lZGlhID0gZnVuY3Rpb24gKHZh
bHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJp
bmdQcm9wZXJ0eSwgJ21lZGlhJywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1s
X0F0dHJpYnV0ZXMkcGluZyA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHJldHVybiBBMihfZWxt
X2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3RyaW5nUHJvcGVydHksICdwaW5nJywgdmFsdWUp
OworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkcmVsID0gZnVuY3Rpb24g
KHZhbHVlKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRz
dHJpbmdQcm9wZXJ0eSwgJ3JlbCcsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRt
bF9BdHRyaWJ1dGVzJHN0YXJ0ID0gZnVuY3Rpb24gKG4pIHsKKyAgICByZXR1cm4gQTIoCisgICAg
ICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwKKyAgICAg
ICAgJ3N0YXJ0JywKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHRvU3RyaW5nKG4pKTsK
K307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGhlYWRlcnMgPSBmdW5jdGlv
biAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVz
JHN0cmluZ1Byb3BlcnR5LCAnaGVhZGVycycsIHZhbHVlKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0
bWwkSHRtbF9BdHRyaWJ1dGVzJHNjb3BlID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJu
IEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzdHJpbmdQcm9wZXJ0eSwgJ3Njb3Bl
JywgdmFsdWUpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkbWFuaWZl
c3QgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRt
bF9BdHRyaWJ1dGVzJHN0cmluZ1Byb3BlcnR5LCAnbWFuaWZlc3QnLCB2YWx1ZSk7Cit9OwordmFy
IF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRib29sUHJvcGVydHkgPSBGMigKKyAgICBm
dW5jdGlvbiAobmFtZSwgYm9vbCkgeworICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBf
ZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkcHJvcGVydHksCisgICAgICAgICAgICBuYW1l
LAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9FbmNvZGUkYm9vbChib29sKSk7Cisg
ICAgfSk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGhpZGRlbiA9IGZ1bmN0
aW9uIChib29sKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRl
cyRib29sUHJvcGVydHksICdoaWRkZW4nLCBib29sKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwk
SHRtbF9BdHRyaWJ1dGVzJGNvbnRlbnRlZGl0YWJsZSA9IGZ1bmN0aW9uIChib29sKSB7CisgICAg
cmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRib29sUHJvcGVydHksICdj
b250ZW50RWRpdGFibGUnLCBib29sKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRy
aWJ1dGVzJHNwZWxsY2hlY2sgPSBmdW5jdGlvbiAoYm9vbCkgeworICAgIHJldHVybiBBMihfZWxt
X2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYm9vbFByb3BlcnR5LCAnc3BlbGxjaGVjaycsIGJv
b2wpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYXN5bmMgPSBmdW5j
dGlvbiAoYm9vbCkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0
ZXMkYm9vbFByb3BlcnR5LCAnYXN5bmMnLCBib29sKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwk
SHRtbF9BdHRyaWJ1dGVzJGRlZmVyID0gZnVuY3Rpb24gKGJvb2wpIHsKKyAgICByZXR1cm4gQTIo
X2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGJvb2xQcm9wZXJ0eSwgJ2RlZmVyJywgYm9v
bCk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzY29wZWQgPSBmdW5j
dGlvbiAoYm9vbCkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0
ZXMkYm9vbFByb3BlcnR5LCAnc2NvcGVkJywgYm9vbCk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1s
JEh0bWxfQXR0cmlidXRlcyRhdXRvcGxheSA9IGZ1bmN0aW9uIChib29sKSB7CisgICAgcmV0dXJu
IEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRib29sUHJvcGVydHksICdhdXRvcGxh
eScsIGJvb2wpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkY29udHJv
bHMgPSBmdW5jdGlvbiAoYm9vbCkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1s
X0F0dHJpYnV0ZXMkYm9vbFByb3BlcnR5LCAnY29udHJvbHMnLCBib29sKTsKK307Cit2YXIgX2Vs
bV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGxvb3AgPSBmdW5jdGlvbiAoYm9vbCkgeworICAg
IHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYm9vbFByb3BlcnR5LCAn
bG9vcCcsIGJvb2wpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkZGVm
YXVsdCA9IGZ1bmN0aW9uIChib29sKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0
bWxfQXR0cmlidXRlcyRib29sUHJvcGVydHksICdkZWZhdWx0JywgYm9vbCk7Cit9OwordmFyIF9l
bG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzZWFtbGVzcyA9IGZ1bmN0aW9uIChib29sKSB7
CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRib29sUHJvcGVy
dHksICdzZWFtbGVzcycsIGJvb2wpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJp
YnV0ZXMkY2hlY2tlZCA9IGZ1bmN0aW9uIChib29sKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFu
ZyRodG1sJEh0bWxfQXR0cmlidXRlcyRib29sUHJvcGVydHksICdjaGVja2VkJywgYm9vbCk7Cit9
OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRzZWxlY3RlZCA9IGZ1bmN0aW9u
IChib29sKSB7CisgICAgcmV0dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRi
b29sUHJvcGVydHksICdzZWxlY3RlZCcsIGJvb2wpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRI
dG1sX0F0dHJpYnV0ZXMkYXV0b2ZvY3VzID0gZnVuY3Rpb24gKGJvb2wpIHsKKyAgICByZXR1cm4g
QTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGJvb2xQcm9wZXJ0eSwgJ2F1dG9mb2N1
cycsIGJvb2wpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkZGlzYWJs
ZWQgPSBmdW5jdGlvbiAoYm9vbCkgeworICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1s
X0F0dHJpYnV0ZXMkYm9vbFByb3BlcnR5LCAnZGlzYWJsZWQnLCBib29sKTsKK307Cit2YXIgX2Vs
bV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJG11bHRpcGxlID0gZnVuY3Rpb24gKGJvb2wpIHsK
KyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGJvb2xQcm9wZXJ0
eSwgJ211bHRpcGxlJywgYm9vbCk7Cit9OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmli
dXRlcyRub3ZhbGlkYXRlID0gZnVuY3Rpb24gKGJvb2wpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9s
YW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGJvb2xQcm9wZXJ0eSwgJ25vVmFsaWRhdGUnLCBib29s
KTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJHJlYWRvbmx5ID0gZnVu
Y3Rpb24gKGJvb2wpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1
dGVzJGJvb2xQcm9wZXJ0eSwgJ3JlYWRPbmx5JywgYm9vbCk7Cit9OwordmFyIF9lbG1fbGFuZyRo
dG1sJEh0bWxfQXR0cmlidXRlcyRyZXF1aXJlZCA9IGZ1bmN0aW9uIChib29sKSB7CisgICAgcmV0
dXJuIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRib29sUHJvcGVydHksICdyZXF1
aXJlZCcsIGJvb2wpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkaXNt
YXAgPSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5nJGh0bWwkSHRt
bF9BdHRyaWJ1dGVzJGJvb2xQcm9wZXJ0eSwgJ2lzTWFwJywgdmFsdWUpOworfTsKK3ZhciBfZWxt
X2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkZG93bmxvYWQgPSBmdW5jdGlvbiAoYm9vbCkgewor
ICAgIHJldHVybiBBMihfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkYm9vbFByb3BlcnR5
LCAnZG93bmxvYWQnLCBib29sKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1
dGVzJHJldmVyc2VkID0gZnVuY3Rpb24gKGJvb2wpIHsKKyAgICByZXR1cm4gQTIoX2VsbV9sYW5n
JGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGJvb2xQcm9wZXJ0eSwgJ3JldmVyc2VkJywgYm9vbCk7Cit9
OwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjbGFzc0xpc3QgPSBmdW5jdGlv
biAobGlzdCkgeworICAgIHJldHVybiBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkY2xh
c3MoCisgICAgICAgIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGpvaW4s
CisgICAgICAgICAgICAnICcsCisgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSRMaXN0JG1hcCwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRCYXNp
Y3MkZnN0LAorICAgICAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJExpc3QkZmlsdGVyLCBf
ZWxtX2xhbmckY29yZSRCYXNpY3Mkc25kLCBsaXN0KSkpKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0
bWwkSHRtbF9BdHRyaWJ1dGVzJHN0eWxlID0gX2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1YWxE
b20kc3R5bGU7CisKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRrZXlDb2RlID0gQTIo
X2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGVfb3BzWyc6PSddLCAna2V5Q29kZScsIF9lbG1fbGFu
ZyRjb3JlJEpzb25fRGVjb2RlJGludCk7Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMk
dGFyZ2V0Q2hlY2tlZCA9IEEyKAorICAgIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJGF0LAor
ICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgWyd0YXJn
ZXQnLCAnY2hlY2tlZCddKSwKKyAgICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRib29sKTsK
K3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyR0YXJnZXRWYWx1ZSA9IEEyKAorICAgIF9l
bG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJGF0LAorICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9M
aXN0LmZyb21BcnJheSgKKyAgICAgICAgWyd0YXJnZXQnLCAndmFsdWUnXSksCisgICAgX2VsbV9s
YW5nJGNvcmUkSnNvbl9EZWNvZGUkc3RyaW5nKTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0V2
ZW50cyRkZWZhdWx0T3B0aW9ucyA9IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJGRl
ZmF1bHRPcHRpb25zOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uV2l0aE9wdGlv
bnMgPSBfZWxtX2xhbmckdmlydHVhbF9kb20kVmlydHVhbERvbSRvbldpdGhPcHRpb25zOwordmFy
IF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uID0gX2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZp
cnR1YWxEb20kb247Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb25Gb2N1cyA9IGZ1
bmN0aW9uIChtc2cpIHsKKyAgICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0
bWxfRXZlbnRzJG9uLAorICAgICAgICAnZm9jdXMnLAorICAgICAgICBfZWxtX2xhbmckY29yZSRK
c29uX0RlY29kZSRzdWNjZWVkKG1zZykpOworfTsKK3ZhciBfZWxtX2xhbmckaHRtbCRIdG1sX0V2
ZW50cyRvbkJsdXIgPSBmdW5jdGlvbiAobXNnKSB7CisgICAgcmV0dXJuIEEyKAorICAgICAgICBf
ZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbiwKKyAgICAgICAgJ2JsdXInLAorICAgICAgICBf
ZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRzdWNjZWVkKG1zZykpOworfTsKK3ZhciBfZWxtX2xh
bmckaHRtbCRIdG1sX0V2ZW50cyRvblN1Ym1pdE9wdGlvbnMgPSBfZWxtX2xhbmckY29yZSROYXRp
dmVfVXRpbHMudXBkYXRlKAorICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJGRlZmF1bHRP
cHRpb25zLAorICAgIHtwcmV2ZW50RGVmYXVsdDogdHJ1ZX0pOwordmFyIF9lbG1fbGFuZyRodG1s
JEh0bWxfRXZlbnRzJG9uU3VibWl0ID0gZnVuY3Rpb24gKG1zZykgeworICAgIHJldHVybiBBMygK
KyAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb25XaXRoT3B0aW9ucywKKyAgICAg
ICAgJ3N1Ym1pdCcsCisgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uU3VibWl0
T3B0aW9ucywKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkc3VjY2VlZChtc2cp
KTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb25DaGVjayA9IGZ1bmN0aW9u
ICh0YWdnZXIpIHsKKyAgICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxf
RXZlbnRzJG9uLAorICAgICAgICAnY2hhbmdlJywKKyAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUk
SnNvbl9EZWNvZGUkbWFwLCB0YWdnZXIsIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJHRhcmdl
dENoZWNrZWQpKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb25JbnB1dCA9
IGZ1bmN0aW9uICh0YWdnZXIpIHsKKyAgICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1fbGFuZyRo
dG1sJEh0bWxfRXZlbnRzJG9uLAorICAgICAgICAnaW5wdXQnLAorICAgICAgICBBMihfZWxtX2xh
bmckY29yZSRKc29uX0RlY29kZSRtYXAsIHRhZ2dlciwgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVu
dHMkdGFyZ2V0VmFsdWUpKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb25N
b3VzZU91dCA9IGZ1bmN0aW9uIChtc2cpIHsKKyAgICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1f
bGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uLAorICAgICAgICAnbW91c2VvdXQnLAorICAgICAgICBf
ZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRzdWNjZWVkKG1zZykpOworfTsKK3ZhciBfZWxtX2xh
bmckaHRtbCRIdG1sX0V2ZW50cyRvbk1vdXNlT3ZlciA9IGZ1bmN0aW9uIChtc2cpIHsKKyAgICBy
ZXR1cm4gQTIoCisgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uLAorICAgICAg
ICAnbW91c2VvdmVyJywKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkc3VjY2Vl
ZChtc2cpKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb25Nb3VzZUxlYXZl
ID0gZnVuY3Rpb24gKG1zZykgeworICAgIHJldHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5nJGh0
bWwkSHRtbF9FdmVudHMkb24sCisgICAgICAgICdtb3VzZWxlYXZlJywKKyAgICAgICAgX2VsbV9s
YW5nJGNvcmUkSnNvbl9EZWNvZGUkc3VjY2VlZChtc2cpKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0
bWwkSHRtbF9FdmVudHMkb25Nb3VzZUVudGVyID0gZnVuY3Rpb24gKG1zZykgeworICAgIHJldHVy
biBBMigKKyAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb24sCisgICAgICAgICdt
b3VzZWVudGVyJywKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkc3VjY2VlZCht
c2cpKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb25Nb3VzZVVwID0gZnVu
Y3Rpb24gKG1zZykgeworICAgIHJldHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRt
bF9FdmVudHMkb24sCisgICAgICAgICdtb3VzZXVwJywKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUk
SnNvbl9EZWNvZGUkc3VjY2VlZChtc2cpKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9F
dmVudHMkb25Nb3VzZURvd24gPSBmdW5jdGlvbiAobXNnKSB7CisgICAgcmV0dXJuIEEyKAorICAg
ICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbiwKKyAgICAgICAgJ21vdXNlZG93bics
CisgICAgICAgIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJHN1Y2NlZWQobXNnKSk7Cit9Owor
dmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uRG91YmxlQ2xpY2sgPSBmdW5jdGlvbiAo
bXNnKSB7CisgICAgcmV0dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50
cyRvbiwKKyAgICAgICAgJ2RibGNsaWNrJywKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9E
ZWNvZGUkc3VjY2VlZChtc2cpKTsKK307Cit2YXIgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMk
b25DbGljayA9IGZ1bmN0aW9uIChtc2cpIHsKKyAgICByZXR1cm4gQTIoCisgICAgICAgIF9lbG1f
bGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uLAorICAgICAgICAnY2xpY2snLAorICAgICAgICBfZWxt
X2xhbmckY29yZSRKc29uX0RlY29kZSRzdWNjZWVkKG1zZykpOworfTsKK3ZhciBfZWxtX2xhbmck
aHRtbCRIdG1sX0V2ZW50cyRPcHRpb25zID0gRjIoCisgICAgZnVuY3Rpb24gKGEsIGIpIHsKKyAg
ICAgICAgcmV0dXJuIHtzdG9wUHJvcGFnYXRpb246IGEsIHByZXZlbnREZWZhdWx0OiBifTsKKyAg
ICB9KTsKKwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfTGF6eSRsYXp5MyA9IF9lbG1fbGFuZyR2
aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJGxhenkzOwordmFyIF9lbG1fbGFuZyRodG1sJEh0bWxfTGF6
eSRsYXp5MiA9IF9lbG1fbGFuZyR2aXJ0dWFsX2RvbSRWaXJ0dWFsRG9tJGxhenkyOwordmFyIF9l
bG1fbGFuZyRodG1sJEh0bWxfTGF6eSRsYXp5ID0gX2VsbV9sYW5nJHZpcnR1YWxfZG9tJFZpcnR1
YWxEb20kbGF6eTsKKwordmFyIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdGl2ZV9OYXZpZ2F0aW9u
ID0gZnVuY3Rpb24oKSB7CisKK2Z1bmN0aW9uIGdvKG4pCit7CisgICAgcmV0dXJuIF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIubmF0aXZlQmluZGluZyhmdW5jdGlvbihjYWxsYmFjaykK
KyAgICB7CisgICAgICAgIGlmIChuICE9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBoaXN0
b3J5LmdvKG4pOworICAgICAgICB9CisgICAgICAgIGNhbGxiYWNrKF9lbG1fbGFuZyRjb3JlJE5h
dGl2ZV9TY2hlZHVsZXIuc3VjY2VlZChfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMuVHVwbGUw
KSk7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHB1c2hTdGF0ZSh1cmwpCit7CisgICAgcmV0dXJu
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9TY2hlZHVsZXIubmF0aXZlQmluZGluZyhmdW5jdGlvbihj
YWxsYmFjaykKKyAgICB7CisgICAgICAgIGhpc3RvcnkucHVzaFN0YXRlKHt9LCAnJywgdXJsKTsK
KyAgICAgICAgY2FsbGJhY2soX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5zdWNjZWVk
KGdldExvY2F0aW9uKCkpKTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gcmVwbGFjZVN0YXRlKHVy
bCkKK3sKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1NjaGVkdWxlci5uYXRpdmVC
aW5kaW5nKGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgaGlzdG9yeS5yZXBsYWNl
U3RhdGUoe30sICcnLCB1cmwpOworICAgICAgICBjYWxsYmFjayhfZWxtX2xhbmckY29yZSROYXRp
dmVfU2NoZWR1bGVyLnN1Y2NlZWQoZ2V0TG9jYXRpb24oKSkpOworICAgIH0pOworfQorCitmdW5j
dGlvbiBnZXRMb2NhdGlvbigpCit7CisgICAgdmFyIGxvY2F0aW9uID0gZG9jdW1lbnQubG9jYXRp
b247CisKKyAgICByZXR1cm4geworICAgICAgICBocmVmOiBsb2NhdGlvbi5ocmVmLAorICAgICAg
ICBob3N0OiBsb2NhdGlvbi5ob3N0LAorICAgICAgICBob3N0bmFtZTogbG9jYXRpb24uaG9zdG5h
bWUsCisgICAgICAgIHByb3RvY29sOiBsb2NhdGlvbi5wcm90b2NvbCwKKyAgICAgICAgb3JpZ2lu
OiBsb2NhdGlvbi5vcmlnaW4sCisgICAgICAgIHBvcnRfOiBsb2NhdGlvbi5wb3J0LAorICAgICAg
ICBwYXRobmFtZTogbG9jYXRpb24ucGF0aG5hbWUsCisgICAgICAgIHNlYXJjaDogbG9jYXRpb24u
c2VhcmNoLAorICAgICAgICBoYXNoOiBsb2NhdGlvbi5oYXNoLAorICAgICAgICB1c2VybmFtZTog
bG9jYXRpb24udXNlcm5hbWUsCisgICAgICAgIHBhc3N3b3JkOiBsb2NhdGlvbi5wYXNzd29yZAor
ICAgIH07Cit9CisKKworcmV0dXJuIHsKKyAgICBnbzogZ28sCisgICAgcHVzaFN0YXRlOiBwdXNo
U3RhdGUsCisgICAgcmVwbGFjZVN0YXRlOiByZXBsYWNlU3RhdGUsCisgICAgZ2V0TG9jYXRpb246
IGdldExvY2F0aW9uCit9OworCit9KCk7CisKK3ZhciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZp
Z2F0aW9uJHJlcGxhY2VTdGF0ZSA9IF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdGl2ZV9OYXZpZ2F0
aW9uLnJlcGxhY2VTdGF0ZTsKK3ZhciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJHB1
c2hTdGF0ZSA9IF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdGl2ZV9OYXZpZ2F0aW9uLnB1c2hTdGF0
ZTsKK3ZhciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJGdvID0gX2VsbV9sYW5nJG5h
dmlnYXRpb24kTmF0aXZlX05hdmlnYXRpb24uZ287Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24k
TmF2aWdhdGlvbiRzcGF3blBvcFN0YXRlID0gZnVuY3Rpb24gKHJvdXRlcikgeworICAgIHJldHVy
biBfZWxtX2xhbmckY29yZSRQcm9jZXNzJHNwYXduKAorICAgICAgICBBMygKKyAgICAgICAgICAg
IF9lbG1fbGFuZyRkb20kRG9tX0xvd0xldmVsJG9uV2luZG93LAorICAgICAgICAgICAgJ3BvcHN0
YXRlJywKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJHZhbHVlLAorICAg
ICAgICAgICAgZnVuY3Rpb24gKF9wMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAg
ICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUGxhdGZvcm0kc2VuZFRvU2VsZiwKKyAg
ICAgICAgICAgICAgICAgICAgcm91dGVyLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmck
bmF2aWdhdGlvbiROYXRpdmVfTmF2aWdhdGlvbi5nZXRMb2NhdGlvbigKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHtjdG9yOiAnX1R1cGxlMCd9KSk7CisgICAgICAgICAgICB9KSk7Cit9OwordmFy
IF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb25fb3BzID0gX2VsbV9sYW5nJG5hdmlnYXRp
b24kTmF2aWdhdGlvbl9vcHMgfHwge307CitfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9u
X29wc1snJj4nXSA9IEYyKAorICAgIGZ1bmN0aW9uICh0YXNrMSwgdGFzazIpIHsKKyAgICAgICAg
cmV0dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRhbmRUaGVuLAorICAg
ICAgICAgICAgdGFzazEsCisgICAgICAgICAgICBmdW5jdGlvbiAoX3AxKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRhc2syOworICAgICAgICAgICAgfSk7CisgICAgfSk7Cit2YXIgX2VsbV9s
YW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRub3RpZnkgPSBGMygKKyAgICBmdW5jdGlvbiAocm91
dGVyLCBzdWJzLCBsb2NhdGlvbikgeworICAgICAgICB2YXIgc2VuZCA9IGZ1bmN0aW9uIChfcDIp
IHsKKyAgICAgICAgICAgIHZhciBfcDMgPSBfcDI7CisgICAgICAgICAgICByZXR1cm4gQTIoCisg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUGxhdGZvcm0kc2VuZFRvQXBwLAorICAgICAg
ICAgICAgICAgIHJvdXRlciwKKyAgICAgICAgICAgICAgICBfcDMuXzAobG9jYXRpb24pKTsKKyAg
ICAgICAgfTsKKyAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJG5hdmln
YXRpb24kTmF2aWdhdGlvbl9vcHNbJyY+J10sCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRU
YXNrJHNlcXVlbmNlKAorICAgICAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJExpc3QkbWFw
LCBzZW5kLCBzdWJzKSksCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJHN1Y2NlZWQo
CisgICAgICAgICAgICAgICAge2N0b3I6ICdfVHVwbGUwJ30pKTsKKyAgICB9KTsKK3ZhciBfZWxt
X2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJG9uU2VsZk1zZyA9IEYzKAorICAgIGZ1bmN0aW9u
IChyb3V0ZXIsIGxvY2F0aW9uLCBzdGF0ZSkgeworICAgICAgICByZXR1cm4gQTIoCisgICAgICAg
ICAgICBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uX29wc1snJj4nXSwKKyAgICAgICAg
ICAgIEEzKF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kbm90aWZ5LCByb3V0ZXIsIHN0
YXRlLnN1YnMsIGxvY2F0aW9uKSwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRhc2skc3Vj
Y2VlZChzdGF0ZSkpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRp
b24kY21kSGVscCA9IEYzKAorICAgIGZ1bmN0aW9uIChyb3V0ZXIsIHN1YnMsIGNtZCkgeworICAg
ICAgICB2YXIgX3A0ID0gY21kOworICAgICAgICBzd2l0Y2ggKF9wNC5jdG9yKSB7CisgICAgICAg
ICAgICBjYXNlICdKdW1wJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJG5hdmln
YXRpb24kTmF2aWdhdGlvbiRnbyhfcDQuXzApOworICAgICAgICAgICAgY2FzZSAnTmV3JzoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRj
b3JlJFRhc2skYW5kVGhlbiwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJG5hdmlnYXRp
b24kTmF2aWdhdGlvbiRwdXNoU3RhdGUoX3A0Ll8wKSwKKyAgICAgICAgICAgICAgICAgICAgQTIo
X2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRub3RpZnksIHJvdXRlciwgc3VicykpOwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAg
ICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFRhc2skYW5kVGhlbiwKKyAgICAgICAgICAgICAg
ICAgICAgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRyZXBsYWNlU3RhdGUoX3A0Ll8w
KSwKKyAgICAgICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlv
biRub3RpZnksIHJvdXRlciwgc3VicykpOworICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9s
YW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiR1cGRhdGVIZWxwID0gRjIoCisgICAgZnVuY3Rpb24g
KGZ1bmMsIF9wNSkgeworICAgICAgICB2YXIgX3A2ID0gX3A1OworICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgY3RvcjogJ19UdXBsZTInLAorICAgICAgICAgICAgXzA6IF9wNi5fMCwKKyAg
ICAgICAgICAgIF8xOiBBMihfZWxtX2xhbmckY29yZSRQbGF0Zm9ybV9DbWQkbWFwLCBmdW5jLCBf
cDYuXzEpCisgICAgICAgIH07CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2
aWdhdGlvbiRzdWJzY3JpcHRpb24gPSBfZWxtX2xhbmckY29yZSROYXRpdmVfUGxhdGZvcm0ubGVh
ZignTmF2aWdhdGlvbicpOwordmFyIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kY29t
bWFuZCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9QbGF0Zm9ybS5sZWFmKCdOYXZpZ2F0aW9uJyk7
Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRMb2NhdGlvbiA9IGZ1bmN0aW9u
IChhKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uIChiKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlv
biAoYykgeworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5j
dGlvbiAoZikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChnKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChoKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoaSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChqKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChrKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7aHJl
ZjogYSwgaG9zdDogYiwgaG9zdG5hbWU6IGMsIHByb3RvY29sOiBkLCBvcmlnaW46IGUsIHBvcnRf
OiBmLCBwYXRobmFtZTogZywgc2VhcmNoOiBoLCBoYXNoOiBpLCB1c2VybmFtZTogaiwgcGFzc3dv
cmQ6IGt9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAg
IH07CisgICAgICAgICAgICB9OworICAgICAgICB9OworICAgIH07Cit9OwordmFyIF9lbG1fbGFu
ZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kU3RhdGUgPSBGMigKKyAgICBmdW5jdGlvbiAoYSwgYikg
eworICAgICAgICByZXR1cm4ge3N1YnM6IGEsIHByb2Nlc3M6IGJ9OworICAgIH0pOwordmFyIF9l
bG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kaW5pdCA9IF9lbG1fbGFuZyRjb3JlJFRhc2sk
c3VjY2VlZCgKKyAgICBBMigKKyAgICAgICAgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlv
biRTdGF0ZSwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAor
ICAgICAgICAgICAgW10pLAorICAgICAgICBfZWxtX2xhbmckY29yZSRNYXliZSROb3RoaW5nKSk7
Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRvbkVmZmVjdHMgPSBGNCgKKyAg
ICBmdW5jdGlvbiAocm91dGVyLCBjbWRzLCBzdWJzLCBfcDcpIHsKKyAgICAgICAgdmFyIF9wOCA9
IF9wNzsKKyAgICAgICAgdmFyIF9wMTAgPSBfcDgucHJvY2VzczsKKyAgICAgICAgdmFyIHN0ZXBT
dGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBfcDkgPSB7Y3RvcjogJ19UdXBs
ZTInLCBfMDogc3VicywgXzE6IF9wMTB9OworICAgICAgICAgICAgX3Y0XzI6CisgICAgICAgICAg
ICBkbyB7CisgICAgICAgICAgICAgICAgaWYgKF9wOS5fMC5jdG9yID09PSAnW10nKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChfcDkuXzEuY3RvciA9PT0gJ0p1c3QnKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbl9vcHNbJyY+J10sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkUHJvY2VzcyRraWxsKF9wOS5fMS5fMCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRzdWNjZWVkKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBMihfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZp
Z2F0aW9uJFN0YXRlLCBzdWJzLCBfZWxtX2xhbmckY29yZSRNYXliZSROb3RoaW5nKSkpOworICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsg
X3Y0XzI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBpZiAoX3A5Ll8xLmN0b3IgPT09ICdOb3RoaW5nJykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9lbG1fbGFuZyRjb3JlJFRhc2skYW5kVGhlbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJHNwYXduUG9wU3RhdGUocm91dGVy
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAocGlkKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRUYXNrJHN1Y2Nl
ZWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0
aW9uJFN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUk
TWF5YmUkSnVzdChwaWQpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBf
djRfMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0gd2hpbGUoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFRh
c2skc3VjY2VlZCgKKyAgICAgICAgICAgICAgICBBMihfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZp
Z2F0aW9uJFN0YXRlLCBzdWJzLCBfcDEwKSk7CisgICAgICAgIH0oKTsKKyAgICAgICAgcmV0dXJu
IEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbl9vcHNbJyY+
J10sCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRUYXNrJHNlcXVlbmNlKAorICAgICAgICAg
ICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRMaXN0JG1hcCwK
KyAgICAgICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRj
bWRIZWxwLCByb3V0ZXIsIHN1YnMpLAorICAgICAgICAgICAgICAgICAgICBjbWRzKSksCisgICAg
ICAgICAgICBzdGVwU3RhdGUpOworICAgIH0pOwordmFyIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5h
dmlnYXRpb24kVXNlck1zZyA9IGZ1bmN0aW9uIChhKSB7CisgICAgcmV0dXJuIHtjdG9yOiAnVXNl
ck1zZycsIF8wOiBhfTsKK307Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRD
aGFuZ2UgPSBmdW5jdGlvbiAoYSkgeworICAgIHJldHVybiB7Y3RvcjogJ0NoYW5nZScsIF8wOiBh
fTsKK307Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRQYXJzZXIgPSBmdW5j
dGlvbiAoYSkgeworICAgIHJldHVybiB7Y3RvcjogJ1BhcnNlcicsIF8wOiBhfTsKK307Cit2YXIg
X2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRtYWtlUGFyc2VyID0gX2VsbV9sYW5nJG5h
dmlnYXRpb24kTmF2aWdhdGlvbiRQYXJzZXI7Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2
aWdhdGlvbiRNb2RpZnkgPSBmdW5jdGlvbiAoYSkgeworICAgIHJldHVybiB7Y3RvcjogJ01vZGlm
eScsIF8wOiBhfTsKK307Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRtb2Rp
ZnlVcmwgPSBmdW5jdGlvbiAodXJsKSB7CisgICAgcmV0dXJuIF9lbG1fbGFuZyRuYXZpZ2F0aW9u
JE5hdmlnYXRpb24kY29tbWFuZCgKKyAgICAgICAgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdh
dGlvbiRNb2RpZnkodXJsKSk7Cit9OwordmFyIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRp
b24kTmV3ID0gZnVuY3Rpb24gKGEpIHsKKyAgICByZXR1cm4ge2N0b3I6ICdOZXcnLCBfMDogYX07
Cit9OwordmFyIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kbmV3VXJsID0gZnVuY3Rp
b24gKHVybCkgeworICAgIHJldHVybiBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJGNv
bW1hbmQoCisgICAgICAgIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kTmV3KHVybCkp
OworfTsKK3ZhciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJEp1bXAgPSBmdW5jdGlv
biAoYSkgeworICAgIHJldHVybiB7Y3RvcjogJ0p1bXAnLCBfMDogYX07Cit9OwordmFyIF9lbG1f
bGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kYmFjayA9IGZ1bmN0aW9uIChuKSB7CisgICAgcmV0
dXJuIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kY29tbWFuZCgKKyAgICAgICAgX2Vs
bV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRKdW1wKDAgLSBuKSk7Cit9OwordmFyIF9lbG1f
bGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kZm9yd2FyZCA9IGZ1bmN0aW9uIChuKSB7CisgICAg
cmV0dXJuIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kY29tbWFuZCgKKyAgICAgICAg
X2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRKdW1wKG4pKTsKK307Cit2YXIgX2VsbV9s
YW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRjbWRNYXAgPSBGMigKKyAgICBmdW5jdGlvbiAoX3Ax
MSwgbXlDbWQpIHsKKyAgICAgICAgdmFyIF9wMTIgPSBteUNtZDsKKyAgICAgICAgc3dpdGNoIChf
cDEyLmN0b3IpIHsKKyAgICAgICAgICAgIGNhc2UgJ0p1bXAnOgorICAgICAgICAgICAgICAgIHJl
dHVybiBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJEp1bXAoX3AxMi5fMCk7CisgICAg
ICAgICAgICBjYXNlICdOZXcnOgorICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckbmF2
aWdhdGlvbiROYXZpZ2F0aW9uJE5ldyhfcDEyLl8wKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kTW9k
aWZ5KF9wMTIuXzApOworICAgICAgICB9CisgICAgfSk7Cit2YXIgX2VsbV9sYW5nJG5hdmlnYXRp
b24kTmF2aWdhdGlvbiRNb25pdG9yID0gZnVuY3Rpb24gKGEpIHsKKyAgICByZXR1cm4ge2N0b3I6
ICdNb25pdG9yJywgXzA6IGF9OworfTsKK3ZhciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0
aW9uJHByb2dyYW1XaXRoRmxhZ3MgPSBGMigKKyAgICBmdW5jdGlvbiAoX3AxMywgc3R1ZmYpIHsK
KyAgICAgICAgdmFyIF9wMTQgPSBfcDEzOworICAgICAgICB2YXIgX3AxNiA9IF9wMTQuXzA7Cisg
ICAgICAgIHZhciBsb2NhdGlvbiA9IF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdGl2ZV9OYXZpZ2F0
aW9uLmdldExvY2F0aW9uKAorICAgICAgICAgICAge2N0b3I6ICdfVHVwbGUwJ30pOworICAgICAg
ICB2YXIgaW5pdCA9IGZ1bmN0aW9uIChmbGFncykgeworICAgICAgICAgICAgcmV0dXJuIEEyKAor
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kdXBkYXRlSGVs
cCwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJFVzZXJN
c2csCisgICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAgIHN0dWZmLmluaXQs
CisgICAgICAgICAgICAgICAgICAgIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICBfcDE2KGxv
Y2F0aW9uKSkpOworICAgICAgICB9OworICAgICAgICB2YXIgdmlldyA9IGZ1bmN0aW9uIChtb2Rl
bCkgeworICAgICAgICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRo
dG1sJEh0bWxfQXBwJG1hcCwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckbmF2aWdhdGlvbiRO
YXZpZ2F0aW9uJFVzZXJNc2csCisgICAgICAgICAgICAgICAgc3R1ZmYudmlldyhtb2RlbCkpOwor
ICAgICAgICB9OworICAgICAgICB2YXIgc3VicyA9IGZ1bmN0aW9uIChtb2RlbCkgeworICAgICAg
ICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtX1N1YiRiYXRjaCgKKyAgICAgICAg
ICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAg
ICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRuYXZpZ2F0aW9u
JE5hdmlnYXRpb24kc3Vic2NyaXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9s
YW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRNb25pdG9yKF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5h
dmlnYXRpb24kQ2hhbmdlKSksCisgICAgICAgICAgICAgICAgICAgICAgICBBMigKKyAgICAgICAg
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtX1N1YiRtYXAsCisgICAgICAg
ICAgICAgICAgICAgICAgICBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJFVzZXJNc2cs
CisgICAgICAgICAgICAgICAgICAgICAgICBzdHVmZi5zdWJzY3JpcHRpb25zKG1vZGVsKSkKKyAg
ICAgICAgICAgICAgICAgICAgXSkpOworICAgICAgICB9OworICAgICAgICB2YXIgdXBkYXRlID0g
RjIoCisgICAgICAgICAgICBmdW5jdGlvbiAobXNnLCBtb2RlbCkgeworICAgICAgICAgICAgICAg
IHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2
aWdhdGlvbiR1cGRhdGVIZWxwLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckbmF2aWdh
dGlvbiROYXZpZ2F0aW9uJFVzZXJNc2csCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcDE1ID0gbXNnOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKF9wMTUuY3RvciA9PT0gJ0NoYW5nZScpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0dWZmLnVybFVwZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3AxNihf
cDE1Ll8wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWwpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gQTIoc3R1ZmYudXBkYXRlLCBfcDE1Ll8wLCBtb2RlbCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0oKSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgcmV0dXJuIF9lbG1fbGFuZyRodG1sJEh0bWxfQXBwJHByb2dyYW1XaXRoRmxhZ3MoCisg
ICAgICAgICAgICB7aW5pdDogaW5pdCwgdmlldzogdmlldywgdXBkYXRlOiB1cGRhdGUsIHN1YnNj
cmlwdGlvbnM6IHN1YnN9KTsKKyAgICB9KTsKK3ZhciBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZp
Z2F0aW9uJHByb2dyYW0gPSBGMigKKyAgICBmdW5jdGlvbiAocGFyc2VyLCBzdHVmZikgeworICAg
ICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0
aW9uJHByb2dyYW1XaXRoRmxhZ3MsCisgICAgICAgICAgICBwYXJzZXIsCisgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMudXBkYXRlKAorICAgICAgICAgICAgICAgIHN0dWZm
LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24g
KF9wMTcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHVmZi5pbml0OworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSkpOworICAgIH0pOwordmFyIF9l
bG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kc3ViTWFwID0gRjIoCisgICAgZnVuY3Rpb24g
KGZ1bmMsIF9wMTgpIHsKKyAgICAgICAgdmFyIF9wMTkgPSBfcDE4OworICAgICAgICByZXR1cm4g
X2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRNb25pdG9yKAorICAgICAgICAgICAgZnVu
Y3Rpb24gKF9wMjApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVuYygKKyAgICAgICAgICAg
ICAgICAgICAgX3AxOS5fMChfcDIwKSk7CisgICAgICAgICAgICB9KTsKKyAgICB9KTsKK19lbG1f
bGFuZyRjb3JlJE5hdGl2ZV9QbGF0Zm9ybS5lZmZlY3RNYW5hZ2Vyc1snTmF2aWdhdGlvbiddID0g
e3BrZzogJ2VsbS1sYW5nL25hdmlnYXRpb24nLCBpbml0OiBfZWxtX2xhbmckbmF2aWdhdGlvbiRO
YXZpZ2F0aW9uJGluaXQsIG9uRWZmZWN0czogX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlv
biRvbkVmZmVjdHMsIG9uU2VsZk1zZzogX2VsbV9sYW5nJG5hdmlnYXRpb24kTmF2aWdhdGlvbiRv
blNlbGZNc2csIHRhZzogJ2Z4JywgY21kTWFwOiBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0
aW9uJGNtZE1hcCwgc3ViTWFwOiBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZpZ2F0aW9uJHN1Yk1h
cH07CisKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG9fVGFzayRvbkZpbmlzaCA9IEYyKAor
ICAgIGZ1bmN0aW9uIChlbnRlck1lc3NhZ2UsIGVzY2FwZU1lc3NhZ2UpIHsKKyAgICAgICAgdmFy
IHNlbGVjdCA9IGZ1bmN0aW9uIChrZXkpIHsKKyAgICAgICAgICAgIHZhciBfcDAgPSBrZXk7Cisg
ICAgICAgICAgICBpZiAoX3AwID09PSAxMykgeworICAgICAgICAgICAgICAgIHJldHVybiBlbnRl
ck1lc3NhZ2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBl
c2NhcGVNZXNzYWdlOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICByZXR1cm4g
QTIoCisgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbiwKKyAgICAgICAg
ICAgICdrZXlkb3duJywKKyAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2Rl
JG1hcCwgc2VsZWN0LCBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRrZXlDb2RlKSk7CisgICAg
fSk7Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvX1Rhc2skdXBkYXRlID0gRjIoCisgICAg
ZnVuY3Rpb24gKG1zZywgbW9kZWwpIHsKKyAgICAgICAgdmFyIF9wMSA9IG1zZzsKKyAgICAgICAg
c3dpdGNoIChfcDEuY3RvcikgeworICAgICAgICAgICAgY2FzZSAnRm9jdXMnOgorICAgICAgICAg
ICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0KAorICAgICAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRpbHMudXBkYXRlKAorICAgICAgICAgICAgICAg
ICAgICAgICAgbW9kZWwsCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWRpdHM6IF9lbG1fbGFuZyRjb3JlJE1heWJlJEp1c3QobW9kZWwuZGVz
Y3JpcHRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CisgICAgICAgICAgICBjYXNl
ICdFZGl0JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTWF5YmUkSnVz
dCgKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLnVwZGF0
ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsLAorICAgICAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRzOiBfZWxtX2xhbmckY29yZSRN
YXliZSRKdXN0KF9wMS5fMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAg
ICAgIGNhc2UgJ0NhbmNlbCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3Jl
JE1heWJlJEp1c3QoCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9V
dGlscy51cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHtlZGl0czogX2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90aGluZ30pKTsKKyAg
ICAgICAgICAgIGNhc2UgJ0NvbW1pdCc6CisgICAgICAgICAgICAgICAgdmFyIF9wMiA9IG1vZGVs
LmVkaXRzOworICAgICAgICAgICAgICAgIGlmIChfcDIuY3RvciA9PT0gJ05vdGhpbmcnKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0KG1vZGVs
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2YXIgZGVz
Y3JpcHRpb24gPSBfZWxtX2xhbmckY29yZSRTdHJpbmckdHJpbShfcDIuXzApOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGlzRW1wdHkoZGVzY3JpcHRp
b24pID8gX2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90aGluZyA6IF9lbG1fbGFuZyRjb3JlJE1heWJl
JEp1c3QoCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfVXRp
bHMudXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHtlZGl0czogX2VsbV9sYW5nJGNvcmUkTWF5YmUkTm90aGluZywg
ZGVzY3JpcHRpb246IGRlc2NyaXB0aW9ufSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNhc2UgJ0NvbXBsZXRlZCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRj
b3JlJE1heWJlJEp1c3QoCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2
ZV9VdGlscy51cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHtjb21wbGV0ZWQ6IF9wMS5fMH0pKTsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmc7
CisgICAgICAgIH0KKyAgICB9KTsKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG9fVGFzayRp
bml0ID0gRjIoCisgICAgZnVuY3Rpb24gKGRlc2MsIGlkKSB7CisgICAgICAgIHJldHVybiB7ZGVz
Y3JpcHRpb246IGRlc2MsIGNvbXBsZXRlZDogZmFsc2UsIGVkaXRzOiBfZWxtX2xhbmckY29yZSRN
YXliZSROb3RoaW5nLCBpZDogaWR9OworICAgIH0pOwordmFyIF9ldmFuY3okZWxtX3RvZG9tdmMk
VG9kb19UYXNrJE1vZGVsID0gRjQoCisgICAgZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsKKyAgICAg
ICAgcmV0dXJuIHtkZXNjcmlwdGlvbjogYSwgY29tcGxldGVkOiBiLCBlZGl0czogYywgaWQ6IGR9
OworICAgIH0pOwordmFyIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kb19UYXNrJERlbGV0ZSA9IHtj
dG9yOiAnRGVsZXRlJ307Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvX1Rhc2skQ29tcGxl
dGVkID0gZnVuY3Rpb24gKGEpIHsKKyAgICByZXR1cm4ge2N0b3I6ICdDb21wbGV0ZWQnLCBfMDog
YX07Cit9OwordmFyIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kb19UYXNrJENvbW1pdCA9IHtjdG9y
OiAnQ29tbWl0J307Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvX1Rhc2skQ2FuY2VsID0g
e2N0b3I6ICdDYW5jZWwnfTsKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG9fVGFzayRFZGl0
ID0gZnVuY3Rpb24gKGEpIHsKKyAgICByZXR1cm4ge2N0b3I6ICdFZGl0JywgXzA6IGF9OworfTsK
K3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG9fVGFzayRGb2N1cyA9IGZ1bmN0aW9uIChhKSB7
CisgICAgcmV0dXJuIHtjdG9yOiAnRm9jdXMnLCBfMDogYX07Cit9OwordmFyIF9ldmFuY3okZWxt
X3RvZG9tdmMkVG9kb19UYXNrJHZpZXcgPSBmdW5jdGlvbiAobW9kZWwpIHsKKyAgICB2YXIgZWxl
bWVudElkID0gQTIoCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19vcHNbJysrJ10sCisg
ICAgICAgICd0b2RvLScsCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyR0b1N0cmluZyht
b2RlbC5pZCkpOworICAgIHZhciBkZXNjcmlwdGlvbiA9IEEyKF9lbG1fbGFuZyRjb3JlJE1heWJl
JHdpdGhEZWZhdWx0LCBtb2RlbC5kZXNjcmlwdGlvbiwgbW9kZWwuZWRpdHMpOworICAgIHZhciBj
bGFzc05hbWUgPSBBMigKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSwK
KyAgICAgICAgbW9kZWwuY29tcGxldGVkID8gJ2NvbXBsZXRlZCAnIDogJycsCisgICAgICAgIGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBfcDMgPSBtb2RlbC5lZGl0czsKKyAgICAgICAg
ICAgIGlmIChfcDMuY3RvciA9PT0gJ0p1c3QnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICdl
ZGl0aW5nJzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICcn
OworICAgICAgICAgICAgfQorICAgICAgICB9KCkpOworICAgIHJldHVybiBBMigKKyAgICAgICAg
X2VsbV9sYW5nJGh0bWwkSHRtbCRsaSwKKyAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xp
c3QuZnJvbUFycmF5KAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRo
dG1sJEh0bWxfQXR0cmlidXRlcyRjbGFzcyhjbGFzc05hbWUpCisgICAgICAgICAgICBdKSwKKyAg
ICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAg
WworICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0
bWwkZGl2LAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21B
cnJheSgKKyAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGNsYXNzKCd2aWV3JykKKyAgICAgICAgICAgICAg
ICAgICAgXSksCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJv
bUFycmF5KAorICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICBB
MigKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkaW5wdXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJy
YXkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkY2xhc3MoJ3RvZ2dsZScp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0
dHJpYnV0ZXMkdHlwZSQoJ2NoZWNrYm94JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjaGVja2VkKG1vZGVsLmNvbXBsZXRl
ZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxf
RXZlbnRzJG9uQ2xpY2soCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9ldmFuY3ok
ZWxtX3RvZG9tdmMkVG9kb19UYXNrJENvbXBsZXRlZCgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljcyRub3QobW9kZWwuY29tcGxldGVkKSkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCisgICAgICAgICAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgW10pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCRsYWJlbCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9l
bG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uRG91YmxlQ2xpY2soCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kb19UYXNrJEZvY3VzKGVsZW1l
bnRJZCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCisgICAgICAgICAgICAgICAg
ICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxt
X2xhbmckaHRtbCRIdG1sJHRleHQoZGVzY3JpcHRpb24pCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAg
ICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJGJ1dHRvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjbGFzcygnZGVzdHJveScpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbkNsaWNrKF9ldmFu
Y3okZWxtX3RvZG9tdmMkVG9kb19UYXNrJERlbGV0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9M
aXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkpCisgICAgICAg
ICAgICAgICAgICAgIF0pKSwKKyAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICBf
ZWxtX2xhbmckaHRtbCRIdG1sJGlucHV0LAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGNsYXNzKCdlZGl0
JyksCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0
ZXMkdmFsdWUoZGVzY3JpcHRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5n
JGh0bWwkSHRtbF9BdHRyaWJ1dGVzJG5hbWUoJ3RpdGxlJyksCisgICAgICAgICAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkaWQoZWxlbWVudElkKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfRXZlbnRzJG9uSW5wdXQoX2V2
YW5jeiRlbG1fdG9kb212YyRUb2RvX1Rhc2skRWRpdCksCisgICAgICAgICAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbkJsdXIoX2V2YW5jeiRlbG1fdG9kb212YyRU
b2RvX1Rhc2skQ29tbWl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEEyKF9ldmFuY3okZWxt
X3RvZG9tdmMkVG9kb19UYXNrJG9uRmluaXNoLCBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG9fVGFz
ayRDb21taXQsIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kb19UYXNrJENhbmNlbCkKKyAgICAgICAg
ICAgICAgICAgICAgXSksCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xp
c3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICBbXSkpCisgICAgICAgICAgICBdKSk7
Cit9OworCit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHN1YnNjcmlwdGlvbnMgPSBmdW5j
dGlvbiAobW9kZWwpIHsKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkUGxhdGZvcm1fU3ViJG5v
bmU7Cit9OwordmFyIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRmcm9tVXJsID0gZnVuY3Rpb24g
KGhhc2gpIHsKKyAgICB2YXIgY2xlYW5IYXNoID0gQTIoX2VsbV9sYW5nJGNvcmUkU3RyaW5nJGRy
b3BMZWZ0LCAyLCBoYXNoKTsKKyAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxz
LmVxKAorICAgICAgICBBMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJExpc3QkbWVtYmVy
LAorICAgICAgICAgICAgY2xlYW5IYXNoLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0
aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgIFsnYWxsJywgJ2FjdGl2ZScsICdj
b21wbGV0ZWQnXSkpLAorICAgICAgICB0cnVlKSA/IF9lbG1fbGFuZyRjb3JlJE1heWJlJEp1c3Qo
Y2xlYW5IYXNoKSA6IF9lbG1fbGFuZyRjb3JlJE1heWJlJE5vdGhpbmc7Cit9OwordmFyIF9ldmFu
Y3okZWxtX3RvZG9tdmMkVG9kbyR1cmxQYXJzZXIgPSBfZWxtX2xhbmckbmF2aWdhdGlvbiROYXZp
Z2F0aW9uJG1ha2VQYXJzZXIoCisgICAgZnVuY3Rpb24gKF9wMCkgeworICAgICAgICByZXR1cm4g
X2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJGZyb21VcmwoCisgICAgICAgICAgICBmdW5jdGlvbiAo
XykgeworICAgICAgICAgICAgICAgIHJldHVybiBfLmhhc2g7CisgICAgICAgICAgICB9KF9wMCkp
OworICAgIH0pOwordmFyIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyR0b1VybCA9IGZ1bmN0aW9u
ICh2aXNpYmlsaXR5KSB7CisgICAgcmV0dXJuIEEyKAorICAgICAgICBfZWxtX2xhbmckY29yZSRC
YXNpY3Nfb3BzWycrKyddLAorICAgICAgICAnIy8nLAorICAgICAgICBfZWxtX2xhbmckY29yZSRT
dHJpbmckdG9Mb3dlcih2aXNpYmlsaXR5KSk7Cit9OwordmFyIF9ldmFuY3okZWxtX3RvZG9tdmMk
VG9kbyRpbmZvRm9vdGVyID0gQTIoCisgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCRmb290ZXIsCisg
ICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICBbCisgICAg
ICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkY2xhc3MoJ2luZm8nKQorICAg
ICAgICBdKSwKKyAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAg
ICAgIFsKKyAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCRw
LAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAg
ICAgICAgICAgICAgIFtdKSwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0
LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgIF9lbG1f
bGFuZyRodG1sJEh0bWwkdGV4dCgnRG91YmxlLWNsaWNrIHRvIGVkaXQgYSB0b2RvJykKKyAgICAg
ICAgICAgICAgICBdKSksCisgICAgICAgICAgICBBMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRo
dG1sJEh0bWwkcCwKKyAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21B
cnJheSgKKyAgICAgICAgICAgICAgICBbXSksCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRO
YXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJHRleHQoJ1dyaXR0ZW4gYnkgJyksCisgICAgICAgICAg
ICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJGEs
CisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJh
eSgKKyAgICAgICAgICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkaHJlZignaHR0cHM6Ly9naXRodWIuY29t
L2V2YW5jeicpCisgICAgICAgICAgICAgICAgICAgICAgICBdKSwKKyAgICAgICAgICAgICAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAg
ICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0
bWwkdGV4dCgnRXZhbiBDemFwbGlja2knKQorICAgICAgICAgICAgICAgICAgICAgICAgXSkpCisg
ICAgICAgICAgICAgICAgXSkpLAorICAgICAgICAgICAgQTIoCisgICAgICAgICAgICBfZWxtX2xh
bmckaHRtbCRIdG1sJHAsCisgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5m
cm9tQXJyYXkoCisgICAgICAgICAgICAgICAgW10pLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNv
cmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAg
ICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCR0ZXh0KCdQYXJ0IG9mICcpLAorICAgICAgICAg
ICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCRh
LAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJy
YXkoCisgICAgICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGhyZWYoJ2h0dHA6Ly90b2RvbXZjLmNv
bScpCisgICAgICAgICAgICAgICAgICAgICAgICBdKSwKKyAgICAgICAgICAgICAgICAgICAgX2Vs
bV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICAg
ICAgWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkdGV4
dCgnVG9kb01WQycpCisgICAgICAgICAgICAgICAgICAgICAgICBdKSkKKyAgICAgICAgICAgICAg
ICBdKSkKKyAgICAgICAgXSkpOwordmFyIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRlbXB0eU1v
ZGVsID0geworICAgIHRhc2tzOiBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXko
CisgICAgICAgIFtdKSwKKyAgICB2aXNpYmlsaXR5OiAnQWxsJywKKyAgICBmaWVsZDogJycsCisg
ICAgdWlkOiAwCit9OwordmFyIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRzYXZlID0gX2VsbV9s
YW5nJGNvcmUkTmF0aXZlX1BsYXRmb3JtLm91dGdvaW5nUG9ydCgKKyAgICAnc2F2ZScsCisgICAg
ZnVuY3Rpb24gKHYpIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHRhc2tzOiBfZWxt
X2xhbmckY29yZSROYXRpdmVfTGlzdC50b0FycmF5KHYudGFza3MpLm1hcCgKKyAgICAgICAgICAg
ICAgICBmdW5jdGlvbiAodikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHYuZGVzY3JpcHRpb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb21wbGV0ZWQ6IHYuY29tcGxldGVkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgZWRpdHM6ICh2LmVkaXRzLmN0b3IgPT09ICdOb3RoaW5nJykgPyBudWxsIDogdi5lZGl0
cy5fMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB2LmlkCisgICAgICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICAgICAgfSksCisgICAgICAgICAgICBmaWVsZDogdi5maWVsZCwK
KyAgICAgICAgICAgIHVpZDogdi51aWQsCisgICAgICAgICAgICB2aXNpYmlsaXR5OiB2LnZpc2li
aWxpdHkKKyAgICAgICAgfTsKKyAgICB9KTsKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8k
TW9kZWwgPSBGNCgKKyAgICBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeworICAgICAgICByZXR1cm4g
e3Rhc2tzOiBhLCBmaWVsZDogYiwgdWlkOiBjLCB2aXNpYmlsaXR5OiBkfTsKKyAgICB9KTsKK3Zh
ciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kQ2hhbmdlVmlzaWJpbGl0eSA9IGZ1bmN0aW9uIChh
KSB7CisgICAgcmV0dXJuIHtjdG9yOiAnQ2hhbmdlVmlzaWJpbGl0eScsIF8wOiBhfTsKK307Cit2
YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHZpc2liaWxpdHlTd2FwID0gRjMoCisgICAgZnVu
Y3Rpb24gKHVyaSwgdmlzaWJpbGl0eSwgYWN0dWFsVmlzaWJpbGl0eSkgeworICAgICAgICB2YXIg
Y2xhc3NOYW1lID0gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLmVxKHZpc2liaWxpdHksIGFj
dHVhbFZpc2liaWxpdHkpID8gJ3NlbGVjdGVkJyA6ICcnOworICAgICAgICByZXR1cm4gQTIoCisg
ICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJGxpLAorICAgICAgICAgICAgX2VsbV9sYW5n
JGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgIFsKKyAgICAgICAg
ICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb25DbGljaygKKyAgICAgICAg
ICAgICAgICAgICAgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJENoYW5nZVZpc2liaWxpdHkodmlz
aWJpbGl0eSkpCisgICAgICAgICAgICAgICAgXSksCisgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgWworICAgICAgICAgICAg
ICAgICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCRhLAor
ICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXko
CisgICAgICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGNsYXNzKGNsYXNzTmFtZSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGhyZWYo
dXJpKQorICAgICAgICAgICAgICAgICAgICAgICAgXSksCisgICAgICAgICAgICAgICAgICAgIF9l
bG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJHRl
eHQodmlzaWJpbGl0eSkKKyAgICAgICAgICAgICAgICAgICAgICAgIF0pKQorICAgICAgICAgICAg
ICAgIF0pKTsKKyAgICB9KTsKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kQ2hlY2tBbGwg
PSBmdW5jdGlvbiAoYSkgeworICAgIHJldHVybiB7Y3RvcjogJ0NoZWNrQWxsJywgXzA6IGF9Owor
fTsKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kRGVsZXRlQ29tcGxldGUgPSB7Y3Rvcjog
J0RlbGV0ZUNvbXBsZXRlJ307Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJGNvbnRyb2xz
ID0gRjIoCisgICAgZnVuY3Rpb24gKHZpc2liaWxpdHksIHRhc2tzKSB7CisgICAgICAgIHZhciB0
YXNrc0NvbXBsZXRlZCA9IF9lbG1fbGFuZyRjb3JlJExpc3QkbGVuZ3RoKAorICAgICAgICAgICAg
QTIoCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRmaWx0ZXIsCisgICAgICAg
ICAgICAgICAgZnVuY3Rpb24gKF8pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF8uY29t
cGxldGVkOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgdGFza3MpKTsKKyAg
ICAgICAgdmFyIHRhc2tzTGVmdCA9IF9lbG1fbGFuZyRjb3JlJExpc3QkbGVuZ3RoKHRhc2tzKSAt
IHRhc2tzQ29tcGxldGVkOworICAgICAgICB2YXIgaXRlbV8gPSBfZWxtX2xhbmckY29yZSROYXRp
dmVfVXRpbHMuZXEodGFza3NMZWZ0LCAxKSA/ICcgaXRlbScgOiAnIGl0ZW1zJzsKKyAgICAgICAg
cmV0dXJuIEEyKAorICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCRmb290ZXIsCisgICAg
ICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAg
ICAgICAgWworICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0
ZXMkY2xhc3MoJ2Zvb3RlcicpLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRI
dG1sX0F0dHJpYnV0ZXMkaGlkZGVuKAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSRMaXN0JGlzRW1wdHkodGFza3MpKQorICAgICAgICAgICAgICAgIF0pLAorICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgIFsK
KyAgICAgICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRo
dG1sJEh0bWwkc3BhbiwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZl
X0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjbGFzcygndG9k
by1jb3VudCcpCisgICAgICAgICAgICAgICAgICAgICAgICBdKSwKKyAgICAgICAgICAgICAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAg
ICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkc3Ryb25nLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX2VsbV9sYW5nJGh0bWwkSHRtbCR0ZXh0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzJHRvU3RyaW5nKHRhc2tzTGVmdCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJHRleHQoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQTIoX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSwgaXRlbV8sICcgbGVmdCcpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgXSkpLAorICAgICAgICAgICAgICAgICAgICBBMigKKyAg
ICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCR1bCwKKyAgICAgICAgICAgICAg
ICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAg
ICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1s
JEh0bWxfQXR0cmlidXRlcyRjbGFzcygnZmlsdGVycycpCisgICAgICAgICAgICAgICAgICAgICAg
ICBdKSwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJv
bUFycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEEzKF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyR2aXNpYmlsaXR5U3dhcCwgJyMvJywg
J0FsbCcsIHZpc2liaWxpdHkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRodG1sJEh0bWwkdGV4dCgnICcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEzKF9l
dmFuY3okZWxtX3RvZG9tdmMkVG9kbyR2aXNpYmlsaXR5U3dhcCwgJyMvYWN0aXZlJywgJ0FjdGl2
ZScsIHZpc2liaWxpdHkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRo
dG1sJEh0bWwkdGV4dCgnICcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEzKF9ldmFu
Y3okZWxtX3RvZG9tdmMkVG9kbyR2aXNpYmlsaXR5U3dhcCwgJyMvY29tcGxldGVkJywgJ0NvbXBs
ZXRlZCcsIHZpc2liaWxpdHkpCisgICAgICAgICAgICAgICAgICAgICAgICBdKSksCisgICAgICAg
ICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1s
JGJ1dHRvbiwKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3Qu
ZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjbGFzcygnY2xlYXItY29t
cGxldGVkJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRt
bF9BdHRyaWJ1dGVzJGhpZGRlbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xh
bmckY29yZSROYXRpdmVfVXRpbHMuZXEodGFza3NDb21wbGV0ZWQsIDApKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0V2ZW50cyRvbkNsaWNrKF9ldmFu
Y3okZWxtX3RvZG9tdmMkVG9kbyREZWxldGVDb21wbGV0ZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIF0pLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5m
cm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCR0ZXh0KAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29y
ZSRCYXNpY3Nfb3BzWycrKyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ2xl
YXIgY29tcGxldGVkICgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBMigKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJhc2ljc19v
cHNbJysrJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmck
Y29yZSRCYXNpY3MkdG9TdHJpbmcodGFza3NDb21wbGV0ZWQpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJyknKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBdKSkKKyAg
ICAgICAgICAgICAgICBdKSk7CisgICAgfSk7Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2Rv
JFVwZGF0ZVRhc2sgPSBmdW5jdGlvbiAoYSkgeworICAgIHJldHVybiB7Y3RvcjogJ1VwZGF0ZVRh
c2snLCBfMDogYX07Cit9OwordmFyIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyR0YXNrTGlzdCA9
IEYyKAorICAgIGZ1bmN0aW9uICh2aXNpYmlsaXR5LCB0YXNrcykgeworICAgICAgICB2YXIgY3Nz
VmlzaWJpbGl0eSA9IF9lbG1fbGFuZyRjb3JlJExpc3QkaXNFbXB0eSh0YXNrcykgPyAnaGlkZGVu
JyA6ICd2aXNpYmxlJzsKKyAgICAgICAgdmFyIGFsbENvbXBsZXRlZCA9IEEyKAorICAgICAgICAg
ICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRhbGwsCisgICAgICAgICAgICBmdW5jdGlvbiAoXykgewor
ICAgICAgICAgICAgICAgIHJldHVybiBfLmNvbXBsZXRlZDsKKyAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICB0YXNrcyk7CisgICAgICAgIHZhciBpc1Zpc2libGUgPSBmdW5jdGlvbiAodG9kbykg
eworICAgICAgICAgICAgdmFyIF9wMSA9IHZpc2liaWxpdHk7CisgICAgICAgICAgICBzd2l0Y2gg
KF9wMSkgeworICAgICAgICAgICAgICAgIGNhc2UgJ0NvbXBsZXRlZCc6CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0b2RvLmNvbXBsZXRlZDsKKyAgICAgICAgICAgICAgICBjYXNlICdBY3Rp
dmUnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkQmFzaWNzJG5v
dCh0b2RvLmNvbXBsZXRlZCk7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAg
IHJldHVybiBBMigKKyAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkc2VjdGlvbiwKKyAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAg
ICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmli
dXRlcyRjbGFzcygnbWFpbicpLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRI
dG1sX0F0dHJpYnV0ZXMkc3R5bGUoCisgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3Jl
JE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgICAgIFsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7Y3RvcjogJ19UdXBsZTInLCBfMDogJ3Zpc2liaWxpdHkn
LCBfMTogY3NzVmlzaWJpbGl0eX0KKyAgICAgICAgICAgICAgICAgICAgICAgIF0pKQorICAgICAg
ICAgICAgICAgIF0pLAorICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJv
bUFycmF5KAorICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgQTIoCisgICAg
ICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkaW5wdXQsCisgICAgICAgICAgICAg
ICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRt
bCRIdG1sX0F0dHJpYnV0ZXMkY2xhc3MoJ3RvZ2dsZS1hbGwnKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkdHlwZSQoJ2NoZWNrYm94
JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRy
aWJ1dGVzJG5hbWUoJ3RvZ2dsZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1f
bGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRjaGVja2VkKGFsbENvbXBsZXRlZCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb25DbGljaygK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kQ2hl
Y2tBbGwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEJh
c2ljcyRub3QoYWxsQ29tcGxldGVkKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBdKSwKKyAg
ICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAor
ICAgICAgICAgICAgICAgICAgICAgICAgW10pKSwKKyAgICAgICAgICAgICAgICAgICAgQTIoCisg
ICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkbGFiZWwsCisgICAgICAgICAg
ICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmck
aHRtbCRIdG1sX0F0dHJpYnV0ZXMkZm9yKCd0b2dnbGUtYWxsJykKKyAgICAgICAgICAgICAgICAg
ICAgICAgIF0pLAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlz
dC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX2VsbV9sYW5nJGh0bWwkSHRtbCR0ZXh0KCdNYXJrIGFsbCBhcyBjb21wbGV0
ZScpCisgICAgICAgICAgICAgICAgICAgICAgICBdKSksCisgICAgICAgICAgICAgICAgICAgIEEy
KAorICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJHVsLAorICAgICAgICAg
ICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAg
ICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5n
JGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGNsYXNzKCd0b2RvLWxpc3QnKQorICAgICAgICAgICAgICAg
ICAgICAgICAgXSksCisgICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAg
ICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICBm
dW5jdGlvbiAodGFzaykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrVmll
dyA9IF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kb19UYXNrJHZpZXcodGFzayk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIGlkID0gdGFzay5pZDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1f
bGFuZyRodG1sJEh0bWxfQXBwJG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZnVuY3Rpb24gKG1zZykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRVcGRhdGVUYXNrKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHtjdG9yOiAnX1R1cGxlMicsIF8wOiBpZCwgXzE6IG1z
Z30pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0YXNrVmlldyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkTGlzdCRmaWx0ZXIsIGlz
VmlzaWJsZSwgdGFza3MpKSkKKyAgICAgICAgICAgICAgICBdKSk7CisgICAgfSk7Cit2YXIgX2V2
YW5jeiRlbG1fdG9kb212YyRUb2RvJEFkZCA9IHtjdG9yOiAnQWRkJ307Cit2YXIgX2V2YW5jeiRl
bG1fdG9kb212YyRUb2RvJFVwZGF0ZUZpZWxkID0gZnVuY3Rpb24gKGEpIHsKKyAgICByZXR1cm4g
e2N0b3I6ICdVcGRhdGVGaWVsZCcsIF8wOiBhfTsKK307Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212
YyRUb2RvJE5vT3AgPSB7Y3RvcjogJ05vT3AnfTsKK3ZhciBfZXZhbmN6JGVsbV90b2RvbXZjJFRv
ZG8kZm9jdXNUYXNrID0gZnVuY3Rpb24gKGVsZW1lbnRJZCkgeworICAgIHJldHVybiBBMygKKyAg
ICAgICAgX2VsbV9sYW5nJGNvcmUkVGFzayRwZXJmb3JtLAorICAgICAgICBmdW5jdGlvbiAoX3Ay
KSB7CisgICAgICAgICAgICByZXR1cm4gX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJE5vT3A7Cisg
ICAgICAgIH0sCisgICAgICAgIGZ1bmN0aW9uIChfcDMpIHsKKyAgICAgICAgICAgIHJldHVybiBf
ZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kTm9PcDsKKyAgICAgICAgfSwKKyAgICAgICAgX2VsbV9s
YW5nJGRvbSREb20kZm9jdXMoZWxlbWVudElkKSk7Cit9OwordmFyIF9ldmFuY3okZWxtX3RvZG9t
dmMkVG9kbyR1cGRhdGUgPSBGMigKKyAgICBmdW5jdGlvbiAobXNnLCBtb2RlbCkgeworICAgICAg
ICB2YXIgX3A0ID0gQTIoX2VsbV9sYW5nJGNvcmUkRGVidWckbG9nLCAnTUVTU0FHRTogJywgbXNn
KTsKKyAgICAgICAgc3dpdGNoIChfcDQuY3RvcikgeworICAgICAgICAgICAgY2FzZSAnTm9PcCc6
CisgICAgICAgICAgICAgICAgcmV0dXJuIHtjdG9yOiAnX1R1cGxlMicsIF8wOiBtb2RlbCwgXzE6
IF9lbG1fbGFuZyRjb3JlJFBsYXRmb3JtX0NtZCRub25lfTsKKyAgICAgICAgICAgIGNhc2UgJ1Vw
ZGF0ZUZpZWxkJzoKKyAgICAgICAgICAgICAgICB2YXIgbmV3TW9kZWwgPSBfZWxtX2xhbmckY29y
ZSROYXRpdmVfVXRpbHMudXBkYXRlKAorICAgICAgICAgICAgICAgICAgICBtb2RlbCwKKyAgICAg
ICAgICAgICAgICAgICAge2ZpZWxkOiBfcDQuXzB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMicsCisgICAgICAgICAgICAgICAg
ICAgIF8wOiBuZXdNb2RlbCwKKyAgICAgICAgICAgICAgICAgICAgXzE6IF9ldmFuY3okZWxtX3Rv
ZG9tdmMkVG9kbyRzYXZlKG1vZGVsKQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICBj
YXNlICdBZGQnOgorICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdGlvbiA9IF9lbG1fbGFuZyRj
b3JlJFN0cmluZyR0cmltKG1vZGVsLmZpZWxkKTsKKyAgICAgICAgICAgICAgICB2YXIgbmV3TW9k
ZWwgPSBfZWxtX2xhbmckY29yZSRTdHJpbmckaXNFbXB0eShkZXNjcmlwdGlvbikgPyBtb2RlbCA6
IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy51cGRhdGUoCisgICAgICAgICAgICAgICAgICAg
IG1vZGVsLAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB1
aWQ6IG1vZGVsLnVpZCArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJycsCisg
ICAgICAgICAgICAgICAgICAgICAgICB0YXNrczogQTIoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX2VsbV9sYW5nJGNvcmUkQmFzaWNzX29wc1snKysnXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtb2RlbC50YXNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxt
X2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEyKF9ldmFu
Y3okZWxtX3RvZG9tdmMkVG9kb19UYXNrJGluaXQsIGRlc2NyaXB0aW9uLCBtb2RlbC51aWQpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pKQorICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICBjdG9yOiAn
X1R1cGxlMicsCisgICAgICAgICAgICAgICAgICAgIF8wOiBuZXdNb2RlbCwKKyAgICAgICAgICAg
ICAgICAgICAgXzE6IF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRzYXZlKG5ld01vZGVsKQorICAg
ICAgICAgICAgICAgIH07CisgICAgICAgICAgICBjYXNlICdVcGRhdGVUYXNrJzoKKyAgICAgICAg
ICAgICAgICB2YXIgX3A2ID0gX3A0Ll8wLl8xOworICAgICAgICAgICAgICAgIHZhciB1cGRhdGVU
YXNrID0gZnVuY3Rpb24gKHQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9lbG1fbGFu
ZyRjb3JlJE5hdGl2ZV9VdGlscy5lcSh0LmlkLCBfcDQuXzAuXzApID8gQTIoX2V2YW5jeiRlbG1f
dG9kb212YyRUb2RvX1Rhc2skdXBkYXRlLCBfcDYsIHQpIDogX2VsbV9sYW5nJGNvcmUkTWF5YmUk
SnVzdCh0KTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIHZhciBuZXdNb2Rl
bCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy51cGRhdGUoCisgICAgICAgICAgICAgICAg
ICAgIG1vZGVsLAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0YXNrczogQTIoX2VsbV9sYW5nJGNvcmUkTGlzdCRmaWx0ZXJNYXAsIHVwZGF0ZVRhc2ssIG1v
ZGVsLnRhc2tzKQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB2YXIg
X3A1ID0gX3A2OworICAgICAgICAgICAgICAgIGlmIChfcDUuY3RvciA9PT0gJ0ZvY3VzJykgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgICAgICAgICBf
ZWxtX2xhbmckY29yZSRQbGF0Zm9ybV9DbWRfb3BzWychJ10sCisgICAgICAgICAgICAgICAgICAg
ICAgICBuZXdNb2RlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5h
dGl2ZV9MaXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRzYXZl
KG5ld01vZGVsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2V2YW5jeiRlbG1f
dG9kb212YyRUb2RvJGZvY3VzVGFzayhfcDUuXzApCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMicsCisgICAgICAg
ICAgICAgICAgICAgICAgICBfMDogbmV3TW9kZWwsCisgICAgICAgICAgICAgICAgICAgICAgICBf
MTogX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHNhdmUobmV3TW9kZWwpCisgICAgICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSAnRGVsZXRlQ29t
cGxldGUnOgorICAgICAgICAgICAgICAgIHZhciBuZXdNb2RlbCA9IF9lbG1fbGFuZyRjb3JlJE5h
dGl2ZV9VdGlscy51cGRhdGUoCisgICAgICAgICAgICAgICAgICAgIG1vZGVsLAorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB0YXNrczogQTIoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTGlzdCRmaWx0ZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9wNykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkQmFzaWNzJG5vdCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF8uY29tcGxldGVkOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfShfcDcpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsLnRhc2tzKQorICAg
ICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgICAgICAgICBjdG9yOiAnX1R1cGxlMicsCisgICAgICAgICAgICAgICAgICAgIF8wOiBuZXdN
b2RlbCwKKyAgICAgICAgICAgICAgICAgICAgXzE6IF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRz
YXZlKG5ld01vZGVsKQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICBjYXNlICdDaGVj
a0FsbCc6CisgICAgICAgICAgICAgICAgdmFyIHVwZGF0ZVRhc2sgPSBmdW5jdGlvbiAodCkgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkTmF0aXZlX1V0aWxzLnVw
ZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICB7Y29tcGxldGVkOiBfcDQuXzB9KTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
ICAgIHZhciBuZXdNb2RlbCA9IF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy51cGRhdGUoCisg
ICAgICAgICAgICAgICAgICAgIG1vZGVsLAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0YXNrczogQTIoX2VsbV9sYW5nJGNvcmUkTGlzdCRtYXAsIHVwZGF0
ZVRhc2ssIG1vZGVsLnRhc2tzKQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICBjdG9yOiAnX1R1cGxlMicsCisgICAg
ICAgICAgICAgICAgICAgIF8wOiBuZXdNb2RlbCwKKyAgICAgICAgICAgICAgICAgICAgXzE6IF9l
dmFuY3okZWxtX3RvZG9tdmMkVG9kbyRzYXZlKG5ld01vZGVsKQorICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHZhciBuZXdNb2RlbCA9IF9l
bG1fbGFuZyRjb3JlJE5hdGl2ZV9VdGlscy51cGRhdGUoCisgICAgICAgICAgICAgICAgICAgIG1v
ZGVsLAorICAgICAgICAgICAgICAgICAgICB7dmlzaWJpbGl0eTogX3A0Ll8wfSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgY3RvcjogJ19UdXBsZTInLAor
ICAgICAgICAgICAgICAgICAgICBfMDogbmV3TW9kZWwsCisgICAgICAgICAgICAgICAgICAgIF8x
OiBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kc2F2ZShtb2RlbCkKKyAgICAgICAgICAgICAgICB9
OworICAgICAgICB9CisgICAgfSk7Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHVybFVw
ZGF0ZSA9IEYyKAorICAgIGZ1bmN0aW9uIChyZXN1bHQsIG1vZGVsKSB7CisgICAgICAgIHZhciBf
cDggPSByZXN1bHQ7CisgICAgICAgIGlmIChfcDguY3RvciA9PT0gJ0p1c3QnKSB7CisgICAgICAg
ICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICAgICAgX2V2YW5jeiRlbG1fdG9kb212YyRUb2Rv
JHVwZGF0ZSwKKyAgICAgICAgICAgICAgICBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kQ2hhbmdl
VmlzaWJpbGl0eSgKKyAgICAgICAgICAgICAgICAgICAgX2VsbV9jb21tdW5pdHkkc3RyaW5nX2V4
dHJhJFN0cmluZ19FeHRyYSR0b1NlbnRlbmNlQ2FzZShfcDguXzApKSwKKyAgICAgICAgICAgICAg
ICBtb2RlbCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gQTIoCisgICAg
ICAgICAgICAgICAgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHVwZGF0ZSwKKyAgICAgICAgICAg
ICAgICBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kQ2hhbmdlVmlzaWJpbGl0eSgnQWxsJyksCisg
ICAgICAgICAgICAgICAgbW9kZWwpOworICAgICAgICB9CisgICAgfSk7Cit2YXIgX2V2YW5jeiRl
bG1fdG9kb212YyRUb2RvJGluaXQgPSBGMigKKyAgICBmdW5jdGlvbiAoZmxhZ3MsIHVybCkgewor
ICAgICAgICByZXR1cm4gQTIoCisgICAgICAgICAgICBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8k
dXJsVXBkYXRlLAorICAgICAgICAgICAgdXJsLAorICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNv
cmUkTWF5YmUkd2l0aERlZmF1bHQsIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRlbXB0eU1vZGVs
LCBmbGFncykpOworICAgIH0pOwordmFyIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyR0YXNrRW50
cnkgPSBmdW5jdGlvbiAodGFzaykgeworICAgIHJldHVybiBBMigKKyAgICAgICAgX2VsbV9sYW5n
JGh0bWwkSHRtbCRoZWFkZXIsCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9MaXN0LmZy
b21BcnJheSgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRI
dG1sX0F0dHJpYnV0ZXMkY2xhc3MoJ2hlYWRlcicpCisgICAgICAgICAgICBdKSwKKyAgICAgICAg
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgWworICAg
ICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkaDEs
CisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAor
ICAgICAgICAgICAgICAgICAgICBbXSksCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAg
ICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJHRleHQoJ3RvZG9zJykKKyAgICAgICAg
ICAgICAgICAgICAgXSkpLAorICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgIF9l
bG1fbGFuZyRodG1sJEh0bWwkaW5wdXQsCisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUk
TmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAg
ICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkY2xhc3MoJ25ldy10
b2RvJyksCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJp
YnV0ZXMkcGxhY2Vob2xkZXIoJ1doYXQgbmVlZHMgdG8gYmUgZG9uZT8nKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWxfQXR0cmlidXRlcyRhdXRvZm9jdXModHJ1
ZSksCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0
ZXMkdmFsdWUodGFzayksCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRI
dG1sX0F0dHJpYnV0ZXMkbmFtZSgnbmV3VG9kbycpLAorICAgICAgICAgICAgICAgICAgICAgICAg
X2VsbV9sYW5nJGh0bWwkSHRtbF9FdmVudHMkb25JbnB1dChfZXZhbmN6JGVsbV90b2RvbXZjJFRv
ZG8kVXBkYXRlRmllbGQpLAorICAgICAgICAgICAgICAgICAgICAgICAgQTIoX2V2YW5jeiRlbG1f
dG9kb212YyRUb2RvX1Rhc2skb25GaW5pc2gsIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRBZGQs
IF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyROb09wKQorICAgICAgICAgICAgICAgICAgICBdKSwK
KyAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisg
ICAgICAgICAgICAgICAgICAgIFtdKSkKKyAgICAgICAgICAgIF0pKTsKK307Cit2YXIgX2V2YW5j
eiRlbG1fdG9kb212YyRUb2RvJHZpZXcgPSBmdW5jdGlvbiAobW9kZWwpIHsKKyAgICByZXR1cm4g
QTIoCisgICAgICAgIF9lbG1fbGFuZyRodG1sJEh0bWwkZGl2LAorICAgICAgICBfZWxtX2xhbmck
Y29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAg
ICAgX2VsbV9sYW5nJGh0bWwkSHRtbF9BdHRyaWJ1dGVzJGNsYXNzKCd0b2RvbXZjLXdyYXBwZXIn
KSwKKyAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0ZXMkc3R5bGUo
CisgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAor
ICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICB7Y3RvcjogJ19U
dXBsZTInLCBfMDogJ3Zpc2liaWxpdHknLCBfMTogJ2hpZGRlbid9CisgICAgICAgICAgICAgICAg
ICAgIF0pKQorICAgICAgICAgICAgXSksCisgICAgICAgIF9lbG1fbGFuZyRjb3JlJE5hdGl2ZV9M
aXN0LmZyb21BcnJheSgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICBBMigKKyAgICAg
ICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sJHNlY3Rpb24sCisgICAgICAgICAgICAgICAg
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAgICAgICAg
ICBbCisgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckaHRtbCRIdG1sX0F0dHJpYnV0
ZXMkY2xhc3MoJ3RvZG9hcHAnKQorICAgICAgICAgICAgICAgICAgICBdKSwKKyAgICAgICAgICAg
ICAgICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICAg
ICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRodG1sJEh0bWxf
TGF6eSRsYXp5LCBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kdGFza0VudHJ5LCBtb2RlbC5maWVs
ZCksCisgICAgICAgICAgICAgICAgICAgICAgICBBMyhfZWxtX2xhbmckaHRtbCRIdG1sX0xhenkk
bGF6eTIsIF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyR0YXNrTGlzdCwgbW9kZWwudmlzaWJpbGl0
eSwgbW9kZWwudGFza3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgQTMoX2VsbV9sYW5nJGh0
bWwkSHRtbF9MYXp5JGxhenkyLCBfZXZhbmN6JGVsbV90b2RvbXZjJFRvZG8kY29udHJvbHMsIG1v
ZGVsLnZpc2liaWxpdHksIG1vZGVsLnRhc2tzKQorICAgICAgICAgICAgICAgICAgICBdKSksCisg
ICAgICAgICAgICAgICAgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJGluZm9Gb290ZXIKKyAgICAg
ICAgICAgIF0pKTsKK307Cit2YXIgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJG1haW4gPSB7Cisg
ICAgbWFpbjogQTIoCisgICAgICAgIF9lbG1fbGFuZyRuYXZpZ2F0aW9uJE5hdmlnYXRpb24kcHJv
Z3JhbVdpdGhGbGFncywKKyAgICAgICAgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHVybFBhcnNl
ciwKKyAgICAgICAge3VybFVwZGF0ZTogX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHVybFVwZGF0
ZSwgdmlldzogX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJHZpZXcsIGluaXQ6IF9ldmFuY3okZWxt
X3RvZG9tdmMkVG9kbyRpbml0LCB1cGRhdGU6IF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyR1cGRh
dGUsIHN1YnNjcmlwdGlvbnM6IF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRzdWJzY3JpcHRpb25z
fSksCisgICAgZmxhZ3M6IF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJG9uZU9mKAorICAgICAg
ICBfZWxtX2xhbmckY29yZSROYXRpdmVfTGlzdC5mcm9tQXJyYXkoCisgICAgICAgICAgICBbCisg
ICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkbnVsbChfZWxtX2xhbmck
Y29yZSRNYXliZSROb3RoaW5nKSwKKyAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAg
ICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRtYXAsCisgICAgICAgICAgICAgICAgX2VsbV9s
YW5nJGNvcmUkTWF5YmUkSnVzdCwKKyAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAg
ICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkYW5kVGhlbiwKKyAgICAgICAgICAgICAg
ICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGVfb3BzWyc6PSddLCAnZmllbGQnLCBf
ZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICBm
dW5jdGlvbiAoZmllbGQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRhbmRU
aGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEyKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZV9vcHNbJzo9J10sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0YXNrcycsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJGxpc3QoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRhbmRUaGVuLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJEpzb25f
RGVjb2RlX29wc1snOj0nXSwgJ2NvbXBsZXRlZCcsIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2Rl
JGJvb2wpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9u
IChjb21wbGV0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkYW5kVGhlbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEyKF9lbG1fbGFuZyRjb3JlJEpzb25f
RGVjb2RlX29wc1snOj0nXSwgJ2Rlc2NyaXB0aW9uJywgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNv
ZGUkc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uIChkZXNjcmlwdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9E
ZWNvZGUkYW5kVGhlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQTIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZV9vcHNbJzo9
J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnZWRpdHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkb25lT2YoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX2VsbV9sYW5nJGNvcmUkTmF0aXZlX0xpc3QuZnJvbUFycmF5KAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBb
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRudWxsKF9lbG1fbGFu
ZyRjb3JlJE1heWJlJE5vdGhpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUk
SnNvbl9EZWNvZGUkbWFwLCBfZWxtX2xhbmckY29yZSRNYXliZSRKdXN0LCBfZWxtX2xhbmckY29y
ZSRKc29uX0RlY29kZSRzdHJpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pKSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChlZGl0cykg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEEyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVjb2RlJGFuZFRo
ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGVfb3BzWyc6PSddLCAnaWQn
LCBfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRpbnQpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChpZCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkc3VjY2VlZCgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHtjb21wbGV0ZWQ6IGNvbXBsZXRlZCwgZGVzY3JpcHRpb246IGRlc2Ny
aXB0aW9uLCBlZGl0czogZWRpdHMsIGlkOiBpZH0pOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZnVuY3Rpb24gKHRhc2tzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbG1fbGFu
ZyRjb3JlJEpzb25fRGVjb2RlJGFuZFRoZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBMihfZWxtX2xhbmckY29yZSRKc29uX0RlY29kZV9vcHNbJzo9J10sICd1aWQnLCBf
ZWxtX2xhbmckY29yZSRKc29uX0RlY29kZSRpbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZnVuY3Rpb24gKHVpZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBBMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkYW5kVGhlbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQTIoX2VsbV9sYW5nJGNvcmUkSnNv
bl9EZWNvZGVfb3BzWyc6PSddLCAndmlzaWJpbGl0eScsIF9lbG1fbGFuZyRjb3JlJEpzb25fRGVj
b2RlJHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZ1bmN0aW9uICh2aXNpYmlsaXR5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gX2VsbV9sYW5nJGNvcmUkSnNvbl9EZWNvZGUkc3VjY2Vl
ZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
ZmllbGQ6IGZpZWxkLCB0YXNrczogdGFza3MsIHVpZDogdWlkLCB2aXNpYmlsaXR5OiB2aXNpYmls
aXR5fSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0pKQorICAgICAgICAgICAgXSkp
Cit9OworCit2YXIgRWxtID0ge307CitFbG1bJ1RvZG8nXSA9IEVsbVsnVG9kbyddIHx8IHt9Owor
X2VsbV9sYW5nJGNvcmUkTmF0aXZlX1BsYXRmb3JtLmFkZFB1YmxpY01vZHVsZShFbG1bJ1RvZG8n
XSwgJ1RvZG8nLCB0eXBlb2YgX2V2YW5jeiRlbG1fdG9kb212YyRUb2RvJG1haW4gPT09ICd1bmRl
ZmluZWQnID8gbnVsbCA6IF9ldmFuY3okZWxtX3RvZG9tdmMkVG9kbyRtYWluKTsKKworaWYgKHR5
cGVvZiBkZWZpbmUgPT09ICJmdW5jdGlvbiIgJiYgZGVmaW5lWydhbWQnXSkKK3sKKyAgZGVmaW5l
KFtdLCBmdW5jdGlvbigpIHsgcmV0dXJuIEVsbTsgfSk7CisgIHJldHVybjsKK30KKworaWYgKHR5
cGVvZiBtb2R1bGUgPT09ICJvYmplY3QiKQoreworICBtb2R1bGVbJ2V4cG9ydHMnXSA9IEVsbTsK
KyAgcmV0dXJuOworfQorCit2YXIgZ2xvYmFsRWxtID0gdGhpc1snRWxtJ107CitpZiAodHlwZW9m
IGdsb2JhbEVsbSA9PT0gInVuZGVmaW5lZCIpCit7CisgIHRoaXNbJ0VsbSddID0gRWxtOworICBy
ZXR1cm47Cit9CisKK2ZvciAodmFyIHB1YmxpY01vZHVsZSBpbiBFbG0pCit7CisgIGlmIChwdWJs
aWNNb2R1bGUgaW4gZ2xvYmFsRWxtKQorICB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBh
cmUgdHdvIEVsbSBtb2R1bGVzIGNhbGxlZCBgJyArIHB1YmxpY01vZHVsZSArICdgIG9uIHRoaXMg
cGFnZSEgUmVuYW1lIG9uZSBvZiB0aGVtLicpOworICB9CisgIGdsb2JhbEVsbVtwdWJsaWNNb2R1
bGVdID0gRWxtW3B1YmxpY01vZHVsZV07Cit9CisKK30pLmNhbGwodGhpcyk7CisKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZnVuY3Rp
b25hbC1wcm9nLWV4YW1wbGVzL2VsbS9pbmRleC5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlvbmFsLXByb2ctZXhhbXBsZXMvZWxtL2lu
ZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOTUxNGM0Y2Q4YTA2ODFmMjE2MzE1OGQ4Y2ZhMjk2YWI1ODk4
NzdjZgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvZnVuY3Rpb25hbC1wcm9nLWV4YW1wbGVzL2VsbS9pbmRleC5odG1sCkBA
IC0wLDAgKzEsMzIgQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWwgbGFuZz0iZW4iIGRhdGEtZnJh
bWV3b3JrPSJlbG0iPgorPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICAgIDx0
aXRsZT5FbG0g4oCiIFRvZG9NVkM8L3RpdGxlPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
aHJlZj0ibm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzIj4KKyAgICA8bGluayBy
ZWw9InN0eWxlc2hlZXQiIGhyZWY9Im5vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvaW5kZXgu
Y3NzIj4KKyAgICA8c3R5bGU+CisgICAgICAgIGJvZHkgeworICAgICAgICAgICAgd2lkdGg6IGF1
dG87CisgICAgICAgIH0KKyAgICAgICAgLnRvZG9tdmMtd3JhcHBlciB7CisgICAgICAgICAgICB2
aXNpYmlsaXR5OiB2aXNpYmxlICFpbXBvcnRhbnQ7CisgICAgICAgIH0KKyAgICA8L3N0eWxlPgor
PC9oZWFkPgorCis8Ym9keT4KKzxzY3JpcHQgc3JjPSJidWlsZC9lbG0uanMiPjwvc2NyaXB0Pgor
PHNjcmlwdD4KKyAgICAoZnVuY3Rpb24gKCkgeworICAgICAgICAvLyB2YXIgcmVzdWx0ID0gbG9j
YWxTdG9yYWdlLmdldEl0ZW0oJ2VsbS10b2RvLW1vZGVsJyk7CisgICAgICAgIC8vIHZhciBzYXZl
ZE1vZGVsID0gcmVzdWx0ID8gSlNPTi5wYXJzZShyZXN1bHQpIDogbnVsbDsKKyAgICAgICAgdmFy
IHNhdmVkTW9kZWwgPSBudWxsOworICAgICAgICB2YXIgdG9kb212YyA9IEVsbS5Ub2RvLmZ1bGxz
Y3JlZW4oc2F2ZWRNb2RlbCk7CisgICAgICAgIC8vIHRvZG9tdmMucG9ydHMuc2F2ZS5zdWJzY3Jp
YmUoZnVuY3Rpb24gKG1vZGVsKSB7CisgICAgICAgIC8vICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgn
ZWxtLXRvZG8tbW9kZWwnLCBKU09OLnN0cmluZ2lmeShtb2RlbCkpOworICAgICAgICAvLyB9KTsK
KyAgICB9KCkpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Z1bmN0aW9uYWwtcHJv
Zy1leGFtcGxlcy9lbG0vbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3MgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Z1bmN0aW9uYWwt
cHJvZy1leGFtcGxlcy9lbG0vbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3MK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMTBlM2QyZjZiNzkzZDQyY2I0ZTIwYWVlYTQ4YTNiNWNlYjQ4NmVlNQotLS0g
L2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvZnVuY3Rpb25hbC1wcm9nLWV4YW1wbGVzL2VsbS9ub2RlX21vZHVsZXMvdG9kb212Yy1h
cHAtY3NzL2luZGV4LmNzcwpAQCAtMCwwICsxLDM3MCBAQAoraHRtbCwKK2JvZHkgeworICAgIG1h
cmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOworfQorCitidXR0b24geworICAgIG1hcmdpbjogMDsK
KyAgICBwYWRkaW5nOiAwOworICAgIGJvcmRlcjogMDsKKyAgICBiYWNrZ3JvdW5kOiBub25lOwor
ICAgIGZvbnQtc2l6ZTogMTAwJTsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAg
Zm9udC1mYW1pbHk6IGluaGVyaXQ7CisgICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgICAgY29s
b3I6IGluaGVyaXQ7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAgIGFwcGVhcmFu
Y2U6IG5vbmU7CisgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAg
LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKK30KKworYm9keSB7CisgICAgZm9u
dDogMTRweCAnSGVsdmV0aWNhIE5ldWUnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOwor
ICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKKyAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1OworICAgIGNv
bG9yOiAjNGQ0ZDRkOworICAgIG1pbi13aWR0aDogMjMwcHg7CisgICAgbWF4LXdpZHRoOiA1NTBw
eDsKKyAgICBtYXJnaW46IDAgYXV0bzsKKyAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRp
YWxpYXNlZDsKKyAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOworICAgIGZv
bnQtd2VpZ2h0OiAzMDA7Cit9CisKKzpmb2N1cyB7CisgICAgb3V0bGluZTogMDsKK30KKworLmhp
ZGRlbiB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworLnRvZG9hcHAgeworICAgIGJhY2tncm91
bmQ6ICNmZmY7CisgICAgbWFyZ2luOiAxMzBweCAwIDQwcHggMDsKKyAgICBwb3NpdGlvbjogcmVs
YXRpdmU7CisgICAgYm94LXNoYWRvdzogMCAycHggNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpLAor
ICAgICAgICAgICAgICAgIDAgMjVweCA1MHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEpOworfQorCisu
dG9kb2FwcCBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CisgICAgZm9udC1zdHls
ZTogaXRhbGljOworICAgIGZvbnQtd2VpZ2h0OiAzMDA7CisgICAgY29sb3I6ICNlNmU2ZTY7Cit9
CisKKy50b2RvYXBwIGlucHV0OjotbW96LXBsYWNlaG9sZGVyIHsKKyAgICBmb250LXN0eWxlOiBp
dGFsaWM7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKKyAgICBjb2xvcjogI2U2ZTZlNjsKK30KKwor
LnRvZG9hcHAgaW5wdXQ6OmlucHV0LXBsYWNlaG9sZGVyIHsKKyAgICBmb250LXN0eWxlOiBpdGFs
aWM7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKKyAgICBjb2xvcjogI2U2ZTZlNjsKK30KKworLnRv
ZG9hcHAgaDEgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC0xNTVweDsKKyAg
ICB3aWR0aDogMTAwJTsKKyAgICBmb250LXNpemU6IDEwMHB4OworICAgIGZvbnQtd2VpZ2h0OiAx
MDA7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIGNvbG9yOiByZ2JhKDE3NSwgNDcsIDQ3
LCAwLjE1KTsKKyAgICAtd2Via2l0LXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7
CisgICAgLW1vei10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OworICAgIHRleHQt
cmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7Cit9CisKKy5uZXctdG9kbywKKy5lZGl0IHsK
KyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgbWFyZ2luOiAwOworICAgIHdpZHRoOiAxMDAl
OworICAgIGZvbnQtc2l6ZTogMjRweDsKKyAgICBmb250LWZhbWlseTogaW5oZXJpdDsKKyAgICBm
b250LXdlaWdodDogaW5oZXJpdDsKKyAgICBsaW5lLWhlaWdodDogMS40ZW07CisgICAgYm9yZGVy
OiAwOworICAgIGNvbG9yOiBpbmhlcml0OworICAgIHBhZGRpbmc6IDZweDsKKyAgICBib3JkZXI6
IDFweCBzb2xpZCAjOTk5OworICAgIGJveC1zaGFkb3c6IGluc2V0IDAgLTFweCA1cHggMCByZ2Jh
KDAsIDAsIDAsIDAuMik7CisgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAtd2Via2l0
LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICAtbW96LW9zeC1mb250LXNtb290aGlu
ZzogZ3JheXNjYWxlOworfQorCisubmV3LXRvZG8geworICAgIHBhZGRpbmc6IDE2cHggMTZweCAx
NnB4IDYwcHg7CisgICAgYm9yZGVyOiBub25lOworICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwg
MCwgMC4wMDMpOworICAgIGJveC1zaGFkb3c6IGluc2V0IDAgLTJweCAxcHggcmdiYSgwLDAsMCww
LjAzKTsKK30KKworLm1haW4geworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICB6LWluZGV4
OiAyOworICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTZlNmU2OworfQorCitsYWJlbFtmb3I9
J3RvZ2dsZS1hbGwnXSB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworLnRvZ2dsZS1hbGwgewor
ICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC01NXB4OworICAgIGxlZnQ6IC0xMnB4
OworICAgIHdpZHRoOiA2MHB4OworICAgIGhlaWdodDogMzRweDsKKyAgICB0ZXh0LWFsaWduOiBj
ZW50ZXI7CisgICAgYm9yZGVyOiBub25lOyAvKiBNb2JpbGUgU2FmYXJpICovCit9CisKKy50b2dn
bGUtYWxsOmJlZm9yZSB7CisgICAgY29udGVudDogJ+Kdryc7CisgICAgZm9udC1zaXplOiAyMnB4
OworICAgIGNvbG9yOiAjZTZlNmU2OworICAgIHBhZGRpbmc6IDEwcHggMjdweCAxMHB4IDI3cHg7
Cit9CisKKy50b2dnbGUtYWxsOmNoZWNrZWQ6YmVmb3JlIHsKKyAgICBjb2xvcjogIzczNzM3MzsK
K30KKworLnRvZG8tbGlzdCB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7CisgICAg
bGlzdC1zdHlsZTogbm9uZTsKK30KKworLnRvZG8tbGlzdCBsaSB7CisgICAgcG9zaXRpb246IHJl
bGF0aXZlOworICAgIGZvbnQtc2l6ZTogMjRweDsKKyAgICBib3JkZXItYm90dG9tOiAxcHggc29s
aWQgI2VkZWRlZDsKK30KKworLnRvZG8tbGlzdCBsaTpsYXN0LWNoaWxkIHsKKyAgICBib3JkZXIt
Ym90dG9tOiBub25lOworfQorCisudG9kby1saXN0IGxpLmVkaXRpbmcgeworICAgIGJvcmRlci1i
b3R0b206IG5vbmU7CisgICAgcGFkZGluZzogMDsKK30KKworLnRvZG8tbGlzdCBsaS5lZGl0aW5n
IC5lZGl0IHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICB3aWR0aDogNTA2cHg7CisgICAgcGFk
ZGluZzogMTJweCAxNnB4OworICAgIG1hcmdpbjogMCAwIDAgNDNweDsKK30KKworLnRvZG8tbGlz
dCBsaS5lZGl0aW5nIC52aWV3IHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisudG9kby1saXN0
IGxpIC50b2dnbGUgeworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICB3aWR0aDogNDBweDsK
KyAgICAvKiBhdXRvLCBzaW5jZSBub24tV2ViS2l0IGJyb3dzZXJzIGRvZXNuJ3Qgc3VwcG9ydCBp
bnB1dCBzdHlsaW5nICovCisgICAgaGVpZ2h0OiBhdXRvOworICAgIHBvc2l0aW9uOiBhYnNvbHV0
ZTsKKyAgICB0b3A6IDA7CisgICAgYm90dG9tOiAwOworICAgIG1hcmdpbjogYXV0byAwOworICAg
IGJvcmRlcjogbm9uZTsgLyogTW9iaWxlIFNhZmFyaSAqLworICAgIC13ZWJraXQtYXBwZWFyYW5j
ZTogbm9uZTsKKyAgICBhcHBlYXJhbmNlOiBub25lOworfQorCisudG9kby1saXN0IGxpIC50b2dn
bGU6YWZ0ZXIgeworICAgIGNvbnRlbnQ6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2
ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0
MCIgdmlld0JveD0iLTEwIC0xOCAxMDAgMTM1Ij48Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI1
MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZWRlZGVkIiBzdHJva2Utd2lkdGg9IjMiLz48L3N2Zz4n
KTsKK30KKworLnRvZG8tbGlzdCBsaSAudG9nZ2xlOmNoZWNrZWQ6YWZ0ZXIgeworICAgIGNvbnRl
bnQ6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53
My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgdmlld0JveD0iLTEwIC0xOCAx
MDAgMTM1Ij48Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tl
PSIjYmRkYWQ1IiBzdHJva2Utd2lkdGg9IjMiLz48cGF0aCBmaWxsPSIjNWRjMmFmIiBkPSJNNzIg
MjVMNDIgNzEgMjcgNTZsLTQgNCAyMCAyMCAzNC01MnoiLz48L3N2Zz4nKTsKK30KKworLnRvZG8t
bGlzdCBsaSBsYWJlbCB7CisgICAgd29yZC1icmVhazogYnJlYWstYWxsOworICAgIHBhZGRpbmc6
IDE1cHggNjBweCAxNXB4IDE1cHg7CisgICAgbWFyZ2luLWxlZnQ6IDQ1cHg7CisgICAgZGlzcGxh
eTogYmxvY2s7CisgICAgbGluZS1oZWlnaHQ6IDEuMjsKKyAgICB0cmFuc2l0aW9uOiBjb2xvciAw
LjRzOworfQorCisudG9kby1saXN0IGxpLmNvbXBsZXRlZCBsYWJlbCB7CisgICAgY29sb3I6ICNk
OWQ5ZDk7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Cit9CisKKy50b2RvLWxp
c3QgbGkgLmRlc3Ryb3kgeworICAgIGRpc3BsYXk6IG5vbmU7CisgICAgcG9zaXRpb246IGFic29s
dXRlOworICAgIHRvcDogMDsKKyAgICByaWdodDogMTBweDsKKyAgICBib3R0b206IDA7CisgICAg
d2lkdGg6IDQwcHg7CisgICAgaGVpZ2h0OiA0MHB4OworICAgIG1hcmdpbjogYXV0byAwOworICAg
IGZvbnQtc2l6ZTogMzBweDsKKyAgICBjb2xvcjogI2NjOWE5YTsKKyAgICBtYXJnaW4tYm90dG9t
OiAxMXB4OworICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnMgZWFzZS1vdXQ7Cit9CisKKy50b2Rv
LWxpc3QgbGkgLmRlc3Ryb3k6aG92ZXIgeworICAgIGNvbG9yOiAjYWY1YjVlOworfQorCisudG9k
by1saXN0IGxpIC5kZXN0cm95OmFmdGVyIHsKKyAgICBjb250ZW50OiAnw5cnOworfQorCisudG9k
by1saXN0IGxpOmhvdmVyIC5kZXN0cm95IHsKKyAgICBkaXNwbGF5OiBibG9jazsKK30KKworLnRv
ZG8tbGlzdCBsaSAuZWRpdCB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworLnRvZG8tbGlzdCBs
aS5lZGl0aW5nOmxhc3QtY2hpbGQgeworICAgIG1hcmdpbi1ib3R0b206IC0xcHg7Cit9CisKKy5m
b290ZXIgeworICAgIGNvbG9yOiAjNzc3OworICAgIHBhZGRpbmc6IDEwcHggMTVweDsKKyAgICBo
ZWlnaHQ6IDIwcHg7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIGJvcmRlci10b3A6IDFw
eCBzb2xpZCAjZTZlNmU2OworfQorCisuZm9vdGVyOmJlZm9yZSB7CisgICAgY29udGVudDogJyc7
CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHJpZ2h0OiAwOworICAgIGJvdHRvbTogMDsK
KyAgICBsZWZ0OiAwOworICAgIGhlaWdodDogNTBweDsKKyAgICBvdmVyZmxvdzogaGlkZGVuOwor
ICAgIGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMiksCisgICAgICAgICAg
ICAgICAgMCA4cHggMCAtM3B4ICNmNmY2ZjYsCisgICAgICAgICAgICAgICAgMCA5cHggMXB4IC0z
cHggcmdiYSgwLCAwLCAwLCAwLjIpLAorICAgICAgICAgICAgICAgIDAgMTZweCAwIC02cHggI2Y2
ZjZmNiwKKyAgICAgICAgICAgICAgICAwIDE3cHggMnB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIp
OworfQorCisudG9kby1jb3VudCB7CisgICAgZmxvYXQ6IGxlZnQ7CisgICAgdGV4dC1hbGlnbjog
bGVmdDsKK30KKworLnRvZG8tY291bnQgc3Ryb25nIHsKKyAgICBmb250LXdlaWdodDogMzAwOwor
fQorCisuZmlsdGVycyB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7CisgICAgbGlz
dC1zdHlsZTogbm9uZTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgcmlnaHQ6IDA7Cisg
ICAgbGVmdDogMDsKK30KKworLmZpbHRlcnMgbGkgeworICAgIGRpc3BsYXk6IGlubGluZTsKK30K
KworLmZpbHRlcnMgbGkgYSB7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgbWFyZ2luOiAzcHg7
CisgICAgcGFkZGluZzogM3B4IDdweDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAg
Ym9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CisgICAgYm9yZGVyLXJhZGl1czogM3B4Owor
fQorCisuZmlsdGVycyBsaSBhOmhvdmVyIHsKKyAgICBib3JkZXItY29sb3I6IHJnYmEoMTc1LCA0
NywgNDcsIDAuMSk7Cit9CisKKy5maWx0ZXJzIGxpIGEuc2VsZWN0ZWQgeworICAgIGJvcmRlci1j
b2xvcjogcmdiYSgxNzUsIDQ3LCA0NywgMC4yKTsKK30KKworLmNsZWFyLWNvbXBsZXRlZCwKK2h0
bWwgLmNsZWFyLWNvbXBsZXRlZDphY3RpdmUgeworICAgIGZsb2F0OiByaWdodDsKKyAgICBwb3Np
dGlvbjogcmVsYXRpdmU7CisgICAgbGluZS1oZWlnaHQ6IDIwcHg7CisgICAgdGV4dC1kZWNvcmF0
aW9uOiBub25lOworICAgIGN1cnNvcjogcG9pbnRlcjsKK30KKworLmNsZWFyLWNvbXBsZXRlZDpo
b3ZlciB7CisgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy5pbmZvIHsKKyAg
ICBtYXJnaW46IDY1cHggYXV0byAwOworICAgIGNvbG9yOiAjYmZiZmJmOworICAgIGZvbnQtc2l6
ZTogMTBweDsKKyAgICB0ZXh0LXNoYWRvdzogMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAu
NSk7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCisuaW5mbyBwIHsKKyAgICBsaW5lLWhl
aWdodDogMTsKK30KKworLmluZm8gYSB7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgdGV4dC1k
ZWNvcmF0aW9uOiBub25lOworICAgIGZvbnQtd2VpZ2h0OiA0MDA7Cit9CisKKy5pbmZvIGE6aG92
ZXIgeworICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisvKgorICAgIEhhY2sg
dG8gcmVtb3ZlIGJhY2tncm91bmQgZnJvbSBNb2JpbGUgU2FmYXJpLgorICAgIENhbid0IHVzZSBp
dCBnbG9iYWxseSBzaW5jZSBpdCBkZXN0cm95cyBjaGVja2JveGVzIGluIEZpcmVmb3gKKyovCitA
bWVkaWEgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApIHsKKyAg
ICAudG9nZ2xlLWFsbCwKKyAgICAudG9kby1saXN0IGxpIC50b2dnbGUgeworICAgICAgICBiYWNr
Z3JvdW5kOiBub25lOworICAgIH0KKworICAgIC50b2RvLWxpc3QgbGkgLnRvZ2dsZSB7CisgICAg
ICAgIGhlaWdodDogNDBweDsKKyAgICB9CisKKyAgICAudG9nZ2xlLWFsbCB7CisgICAgICAgIC13
ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOworICAgICAgICB0cmFuc2Zvcm06IHJvdGF0
ZSg5MGRlZyk7CisgICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKKyAgICAgICAgYXBw
ZWFyYW5jZTogbm9uZTsKKyAgICB9Cit9CisKK0BtZWRpYSAobWF4LXdpZHRoOiA0MzBweCkgewor
ICAgIC5mb290ZXIgeworICAgICAgICBoZWlnaHQ6IDUwcHg7CisgICAgfQorCisgICAgLmZpbHRl
cnMgeworICAgICAgICBib3R0b206IDEwcHg7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlvbmFsLXByb2ct
ZXhhbXBsZXMvZWxtL25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcyBiL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZnVuY3Rpb25hbC1wcm9n
LWV4YW1wbGVzL2VsbS9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNGQyNWQzYzg0YWM2YzZhZWYyNmI5NjgzYTJiYzEwYzYxZjk2MGM4ZgotLS0gL2Rldi9u
dWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
ZnVuY3Rpb25hbC1wcm9nLWV4YW1wbGVzL2VsbS9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24v
YmFzZS5jc3MKQEAgLTAsMCArMSwxNDEgQEAKK2hyIHsKKyAgICBtYXJnaW46IDIwcHggMDsKKyAg
ICBib3JkZXI6IDA7CisgICAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjYzVjNWM1OworICAgIGJv
cmRlci1ib3R0b206IDFweCBkYXNoZWQgI2Y3ZjdmNzsKK30KKworLmxlYXJuIGEgeworICAgIGZv
bnQtd2VpZ2h0OiBub3JtYWw7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGNvbG9y
OiAjYjgzZjQ1OworfQorCisubGVhcm4gYTpob3ZlciB7CisgICAgdGV4dC1kZWNvcmF0aW9uOiB1
bmRlcmxpbmU7CisgICAgY29sb3I6ICM3ODdlN2U7Cit9CisKKy5sZWFybiBoMywKKy5sZWFybiBo
NCwKKy5sZWFybiBoNSB7CisgICAgbWFyZ2luOiAxMHB4IDA7CisgICAgZm9udC13ZWlnaHQ6IDUw
MDsKKyAgICBsaW5lLWhlaWdodDogMS4yOworICAgIGNvbG9yOiAjMDAwOworfQorCisubGVhcm4g
aDMgeworICAgIGZvbnQtc2l6ZTogMjRweDsKK30KKworLmxlYXJuIGg0IHsKKyAgICBmb250LXNp
emU6IDE4cHg7Cit9CisKKy5sZWFybiBoNSB7CisgICAgbWFyZ2luLWJvdHRvbTogMDsKKyAgICBm
b250LXNpemU6IDE0cHg7Cit9CisKKy5sZWFybiB1bCB7CisgICAgcGFkZGluZzogMDsKKyAgICBt
YXJnaW46IDAgMCAzMHB4IDI1cHg7Cit9CisKKy5sZWFybiBsaSB7CisgICAgbGluZS1oZWlnaHQ6
IDIwcHg7Cit9CisKKy5sZWFybiBwIHsKKyAgICBmb250LXNpemU6IDE1cHg7CisgICAgZm9udC13
ZWlnaHQ6IDMwMDsKKyAgICBsaW5lLWhlaWdodDogMS4zOworICAgIG1hcmdpbi10b3A6IDA7Cisg
ICAgbWFyZ2luLWJvdHRvbTogMDsKK30KKworI2lzc3VlLWNvdW50IHsKKyAgICBkaXNwbGF5OiBu
b25lOworfQorCisucXVvdGUgeworICAgIGJvcmRlcjogbm9uZTsKKyAgICBtYXJnaW46IDIwcHgg
MCA2MHB4IDA7Cit9CisKKy5xdW90ZSBwIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisK
Ky5xdW90ZSBwOmJlZm9yZSB7CisgICAgY29udGVudDogJ+KAnCc7CisgICAgZm9udC1zaXplOiA1
MHB4OworICAgIG9wYWNpdHk6IC4xNTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9w
OiAtMjBweDsKKyAgICBsZWZ0OiAzcHg7Cit9CisKKy5xdW90ZSBwOmFmdGVyIHsKKyAgICBjb250
ZW50OiAn4oCdJzsKKyAgICBmb250LXNpemU6IDUwcHg7CisgICAgb3BhY2l0eTogLjE1OworICAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBib3R0b206IC00MnB4OworICAgIHJpZ2h0OiAzcHg7
Cit9CisKKy5xdW90ZSBmb290ZXIgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBib3R0
b206IC00MHB4OworICAgIHJpZ2h0OiAwOworfQorCisucXVvdGUgZm9vdGVyIGltZyB7CisgICAg
Ym9yZGVyLXJhZGl1czogM3B4OworfQorCisucXVvdGUgZm9vdGVyIGEgeworICAgIG1hcmdpbi1s
ZWZ0OiA1cHg7CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKK30KKworLnNwZWVjaC1idWJi
bGUgeworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBwYWRkaW5nOiAxMHB4OworICAgIGJh
Y2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgLjA0KTsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7Cit9
CisKKy5zcGVlY2gtYnViYmxlOmFmdGVyIHsKKyAgICBjb250ZW50OiAnJzsKKyAgICBwb3NpdGlv
bjogYWJzb2x1dGU7CisgICAgdG9wOiAxMDAlOworICAgIHJpZ2h0OiAzMHB4OworICAgIGJvcmRl
cjogMTNweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDAs
IDAsIDAsIC4wNCk7Cit9CisKKy5sZWFybi1iYXIgPiAubGVhcm4geworICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKKyAgICB3aWR0aDogMjcycHg7CisgICAgdG9wOiA4cHg7CisgICAgbGVmdDogLTMw
MHB4OworICAgIHBhZGRpbmc6IDEwcHg7CisgICAgYm9yZGVyLXJhZGl1czogNXB4OworICAgIGJh
Y2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjYpOworICAgIHRyYW5zaXRpb24t
cHJvcGVydHk6IGxlZnQ7CisgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNTAwbXM7Cit9CisKK0Bt
ZWRpYSAobWluLXdpZHRoOiA4OTlweCkgeworICAgIC5sZWFybi1iYXIgeworICAgICAgICB3aWR0
aDogYXV0bzsKKyAgICAgICAgcGFkZGluZy1sZWZ0OiAzMDBweDsKKyAgICB9CisKKyAgICAubGVh
cm4tYmFyID4gLmxlYXJuIHsKKyAgICAgICAgbGVmdDogOHB4OworICAgIH0KK30KZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZnVuY3Rp
b25hbC1wcm9nLWV4YW1wbGVzL2VsbS9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5q
cyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZnVuY3Rp
b25hbC1wcm9nLWV4YW1wbGVzL2VsbS9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44MWUwMDZiYzUwMmRkYzRjNzRmNDdiZDEzYTgzOTIyNzdmODMwZGI4Ci0t
LSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9mdW5jdGlvbmFsLXByb2ctZXhhbXBsZXMvZWxtL25vZGVfbW9kdWxlcy90b2RvbXZj
LWNvbW1vbi9iYXNlLmpzCkBAIC0wLDAgKzEsMjQ5IEBACisvKiBnbG9iYWwgXyAqLworKGZ1bmN0
aW9uICgpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0
ICovCisgICAgLy8gVW5kZXJzY29yZSdzIFRlbXBsYXRlIE1vZHVsZQorICAgIC8vIENvdXJ0ZXN5
IG9mIHVuZGVyc2NvcmVqcy5vcmcKKyAgICB2YXIgXyA9IChmdW5jdGlvbiAoXykgeworICAgICAg
ICBfLmRlZmF1bHRzID0gZnVuY3Rpb24gKG9iamVjdCkgeworICAgICAgICAgICAgaWYgKCFvYmpl
Y3QpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZm9yICh2YXIgYXJnc0luZGV4ID0gMSwgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5s
ZW5ndGg7IGFyZ3NJbmRleCA8IGFyZ3NMZW5ndGg7IGFyZ3NJbmRleCsrKSB7CisgICAgICAgICAg
ICAgICAgdmFyIGl0ZXJhYmxlID0gYXJndW1lbnRzW2FyZ3NJbmRleF07CisgICAgICAgICAgICAg
ICAgaWYgKGl0ZXJhYmxlKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBp
dGVyYWJsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdFtrZXldID09IG51
bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IGl0ZXJhYmxl
W2tleV07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gb2Jq
ZWN0OworICAgICAgICB9CisKKyAgICAgICAgLy8gQnkgZGVmYXVsdCwgVW5kZXJzY29yZSB1c2Vz
IEVSQi1zdHlsZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLCBjaGFuZ2UgdGhlCisgICAgICAgIC8vIGZv
bGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy4K
KyAgICAgICAgXy50ZW1wbGF0ZVNldHRpbmdzID0geworICAgICAgICAgICAgZXZhbHVhdGUgICAg
OiAvPCUoW1xzXFNdKz8pJT4vZywKKyAgICAgICAgICAgIGludGVycG9sYXRlIDogLzwlPShbXHNc
U10rPyklPi9nLAorICAgICAgICAgICAgZXNjYXBlICAgICAgOiAvPCUtKFtcc1xTXSs/KSU+L2cK
KyAgICAgICAgfTsKKworICAgICAgICAvLyBXaGVuIGN1c3RvbWl6aW5nIGB0ZW1wbGF0ZVNldHRp
bmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuCisgICAgICAgIC8vIGludGVycG9s
YXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQgaXMK
KyAgICAgICAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guCisgICAgICAgIHZhciBub01hdGNo
ID0gLyguKV4vOworCisgICAgICAgIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVz
Y2FwZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBwdXQgaW50byBhCisgICAgICAgIC8vIHN0cmluZyBs
aXRlcmFsLgorICAgICAgICB2YXIgZXNjYXBlcyA9IHsKKyAgICAgICAgICAgICInIjogICAgICAi
JyIsCisgICAgICAgICAgICAnXFwnOiAgICAgJ1xcJywKKyAgICAgICAgICAgICdccic6ICAgICAn
cicsCisgICAgICAgICAgICAnXG4nOiAgICAgJ24nLAorICAgICAgICAgICAgJ1x0JzogICAgICd0
JywKKyAgICAgICAgICAgICdcdTIwMjgnOiAndTIwMjgnLAorICAgICAgICAgICAgJ1x1MjAyOSc6
ICd1MjAyOScKKyAgICAgICAgfTsKKworICAgICAgICB2YXIgZXNjYXBlciA9IC9cXHwnfFxyfFxu
fFx0fFx1MjAyOHxcdTIwMjkvZzsKKworICAgICAgICAvLyBKYXZhU2NyaXB0IG1pY3JvLXRlbXBs
YXRpbmcsIHNpbWlsYXIgdG8gSm9obiBSZXNpZydzIGltcGxlbWVudGF0aW9uLgorICAgICAgICAv
LyBVbmRlcnNjb3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVycywgcHJl
c2VydmVzIHdoaXRlc3BhY2UsCisgICAgICAgIC8vIGFuZCBjb3JyZWN0bHkgZXNjYXBlcyBxdW90
ZXMgd2l0aGluIGludGVycG9sYXRlZCBjb2RlLgorICAgICAgICBfLnRlbXBsYXRlID0gZnVuY3Rp
b24odGV4dCwgZGF0YSwgc2V0dGluZ3MpIHsKKyAgICAgICAgICAgIHZhciByZW5kZXI7CisgICAg
ICAgICAgICBzZXR0aW5ncyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBsYXRlU2V0
dGluZ3MpOworCisgICAgICAgICAgICAvLyBDb21iaW5lIGRlbGltaXRlcnMgaW50byBvbmUgcmVn
dWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlvbi4KKyAgICAgICAgICAgIHZhciBtYXRjaGVy
ID0gbmV3IFJlZ0V4cChbCisgICAgICAgICAgICAgICAgKHNldHRpbmdzLmVzY2FwZSB8fCBub01h
dGNoKS5zb3VyY2UsCisgICAgICAgICAgICAgICAgKHNldHRpbmdzLmludGVycG9sYXRlIHx8IG5v
TWF0Y2gpLnNvdXJjZSwKKyAgICAgICAgICAgICAgICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9N
YXRjaCkuc291cmNlCisgICAgICAgICAgICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7CisKKyAg
ICAgICAgICAgIC8vIENvbXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcgc3RyaW5n
IGxpdGVyYWxzIGFwcHJvcHJpYXRlbHkuCisgICAgICAgICAgICB2YXIgaW5kZXggPSAwOworICAg
ICAgICAgICAgdmFyIHNvdXJjZSA9ICJfX3ArPSciOworICAgICAgICAgICAgdGV4dC5yZXBsYWNl
KG1hdGNoZXIsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGUsIGludGVycG9sYXRlLCBldmFsdWF0ZSwg
b2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9m
ZnNldCkKKyAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoZXNjYXBlciwgZnVuY3Rpb24obWF0
Y2gpIHsgcmV0dXJuICdcXCcgKyBlc2NhcGVzW21hdGNoXTsgfSk7CisKKyAgICAgICAgICAgICAg
ICBpZiAoZXNjYXBlKSB7CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSAiJytcbigoX190
PSgiICsgZXNjYXBlICsgIikpPT1udWxsPycnOl8uZXNjYXBlKF9fdCkpK1xuJyI7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0ZSkgeworICAgICAgICAg
ICAgICAgICAgICBzb3VyY2UgKz0gIicrXG4oKF9fdD0oIiArIGludGVycG9sYXRlICsgIikpPT1u
dWxsPycnOl9fdCkrXG4nIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KGV2YWx1YXRlKSB7CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSAiJztcbiIgKyBldmFs
dWF0ZSArICJcbl9fcCs9JyI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlu
ZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoOworICAgICAgICAgICAgICAgIHJldHVybiBtYXRj
aDsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgc291cmNlICs9ICInO1xuIjsKKworICAg
ICAgICAgICAgLy8gSWYgYSB2YXJpYWJsZSBpcyBub3Qgc3BlY2lmaWVkLCBwbGFjZSBkYXRhIHZh
bHVlcyBpbiBsb2NhbCBzY29wZS4KKyAgICAgICAgICAgIGlmICghc2V0dGluZ3MudmFyaWFibGUp
IHNvdXJjZSA9ICd3aXRoKG9ianx8e30pe1xuJyArIHNvdXJjZSArICd9XG4nOworCisgICAgICAg
ICAgICBzb3VyY2UgPSAidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLCIg
KworICAgICAgICAgICAgICAgICJwcmludD1mdW5jdGlvbigpe19fcCs9X19qLmNhbGwoYXJndW1l
bnRzLCcnKTt9O1xuIiArCisgICAgICAgICAgICAgICAgc291cmNlICsgInJldHVybiBfX3A7XG4i
OworCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJlbmRlciA9IG5ldyBGdW5j
dGlvbihzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJywgJ18nLCBzb3VyY2UpOworICAgICAgICAg
ICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgIGUuc291cmNlID0gc291cmNlOworICAg
ICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChk
YXRhKSByZXR1cm4gcmVuZGVyKGRhdGEsIF8pOworICAgICAgICAgICAgdmFyIHRlbXBsYXRlID0g
ZnVuY3Rpb24oZGF0YSkgeworICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlz
LCBkYXRhLCBfKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIC8vIFByb3ZpZGUgdGhl
IGNvbXBpbGVkIGZ1bmN0aW9uIHNvdXJjZSBhcyBhIGNvbnZlbmllbmNlIGZvciBwcmVjb21waWxh
dGlvbi4KKyAgICAgICAgICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgKHNldHRp
bmdzLnZhcmlhYmxlIHx8ICdvYmonKSArICcpe1xuJyArIHNvdXJjZSArICd9JzsKKworICAgICAg
ICAgICAgcmV0dXJuIHRlbXBsYXRlOworICAgICAgICB9OworCisgICAgICAgIHJldHVybiBfOwor
ICAgIH0pKHt9KTsKKworICAgIGlmIChsb2NhdGlvbi5ob3N0bmFtZSA9PT0gJ3RvZG9tdmMuY29t
JykgeworICAgICAgICAoZnVuY3Rpb24oaSxzLG8sZyxyLGEsbSl7aVsnR29vZ2xlQW5hbHl0aWNz
T2JqZWN0J109cjtpW3JdPWlbcl18fGZ1bmN0aW9uKCl7CisgICAgICAgIChpW3JdLnE9aVtyXS5x
fHxbXSkucHVzaChhcmd1bWVudHMpfSxpW3JdLmw9MSpuZXcgRGF0ZSgpO2E9cy5jcmVhdGVFbGVt
ZW50KG8pLAorICAgICAgICBtPXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUobylbMF07YS5hc3luYz0x
O2Euc3JjPWc7bS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLG0pCisgICAgICAgIH0pKHdpbmRv
dyxkb2N1bWVudCwnc2NyaXB0JywnaHR0cHM6Ly93d3cuZ29vZ2xlLWFuYWx5dGljcy5jb20vYW5h
bHl0aWNzLmpzJywnZ2EnKTsKKyAgICAgICAgZ2EoJ2NyZWF0ZScsICdVQS0zMTA4MTA2Mi0xJywg
J2F1dG8nKTsKKyAgICAgICAgZ2EoJ3NlbmQnLCAncGFnZXZpZXcnKTsKKyAgICB9CisgICAgLyog
anNoaW50IGlnbm9yZTplbmQgKi8KKworICAgIGZ1bmN0aW9uIHJlZGlyZWN0KCkgeworICAgICAg
ICBpZiAobG9jYXRpb24uaG9zdG5hbWUgPT09ICd0YXN0ZWpzLmdpdGh1Yi5pbycpIHsKKyAgICAg
ICAgICAgIGxvY2F0aW9uLmhyZWYgPSBsb2NhdGlvbi5ocmVmLnJlcGxhY2UoJ3Rhc3RlanMuZ2l0
aHViLmlvL3RvZG9tdmMnLCAndG9kb212Yy5jb20nKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGZ1bmN0aW9uIGZpbmRSb290KCkgeworICAgICAgICB2YXIgYmFzZSA9IGxvY2F0aW9uLmhyZWYu
aW5kZXhPZignZXhhbXBsZXMvJyk7CisgICAgICAgIHJldHVybiBsb2NhdGlvbi5ocmVmLnN1YnN0
cigwLCBiYXNlKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBnZXRGaWxlKGZpbGUsIGNhbGxiYWNr
KSB7CisgICAgICAgIGlmICghbG9jYXRpb24uaG9zdCkgeworICAgICAgICAgICAgcmV0dXJuIGNv
bnNvbGUuaW5mbygnTWlzcyB0aGUgaW5mbyBiYXI/IFJ1biBUb2RvTVZDIGZyb20gYSBzZXJ2ZXIg
dG8gYXZvaWQgYSBjcm9zcy1vcmlnaW4gZXJyb3IuJyk7CisgICAgICAgIH0KKworICAgICAgICB2
YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisKKyAgICAgICAgeGhyLm9wZW4oJ0dFVCcs
IGZpbmRSb290KCkgKyBmaWxlLCB0cnVlKTsKKyAgICAgICAgeGhyLnNlbmQoKTsKKworICAgICAg
ICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMg
PT09IDIwMCAmJiBjYWxsYmFjaykgeworICAgICAgICAgICAgICAgIGNhbGxiYWNrKHhoci5yZXNw
b25zZVRleHQpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0
aW9uIExlYXJuKGxlYXJuSlNPTiwgY29uZmlnKSB7CisgICAgICAgIGlmICghKHRoaXMgaW5zdGFu
Y2VvZiBMZWFybikpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgTGVhcm4obGVhcm5KU09OLCBj
b25maWcpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHRlbXBsYXRlLCBmcmFtZXdvcms7CisK
KyAgICAgICAgaWYgKHR5cGVvZiBsZWFybkpTT04gIT09ICdvYmplY3QnKSB7CisgICAgICAgICAg
ICB0cnkgeworICAgICAgICAgICAgICAgIGxlYXJuSlNPTiA9IEpTT04ucGFyc2UobGVhcm5KU09O
KTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZmlnKSB7CisgICAgICAg
ICAgICB0ZW1wbGF0ZSA9IGNvbmZpZy50ZW1wbGF0ZTsKKyAgICAgICAgICAgIGZyYW1ld29yayA9
IGNvbmZpZy5mcmFtZXdvcms7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXRlbXBsYXRlICYm
IGxlYXJuSlNPTi50ZW1wbGF0ZXMpIHsKKyAgICAgICAgICAgIHRlbXBsYXRlID0gbGVhcm5KU09O
LnRlbXBsYXRlcy50b2RvbXZjOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmcmFtZXdvcmsg
JiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZnJhbWV3b3JrXScpKSB7CisgICAgICAg
ICAgICBmcmFtZXdvcmsgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1mcmFtZXdvcmtd
JykuZGF0YXNldC5mcmFtZXdvcms7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnRlbXBsYXRl
ID0gdGVtcGxhdGU7CisKKyAgICAgICAgaWYgKGxlYXJuSlNPTi5iYWNrZW5kKSB7CisgICAgICAg
ICAgICB0aGlzLmZyYW1ld29ya0pTT04gPSBsZWFybkpTT04uYmFja2VuZDsKKyAgICAgICAgICAg
IHRoaXMuZnJhbWV3b3JrSlNPTi5pc3N1ZUxhYmVsID0gZnJhbWV3b3JrOworICAgICAgICAgICAg
dGhpcy5hcHBlbmQoeworICAgICAgICAgICAgICAgIGJhY2tlbmQ6IHRydWUKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9IGVsc2UgaWYgKGxlYXJuSlNPTltmcmFtZXdvcmtdKSB7CisgICAgICAg
ICAgICB0aGlzLmZyYW1ld29ya0pTT04gPSBsZWFybkpTT05bZnJhbWV3b3JrXTsKKyAgICAgICAg
ICAgIHRoaXMuZnJhbWV3b3JrSlNPTi5pc3N1ZUxhYmVsID0gZnJhbWV3b3JrOworICAgICAgICAg
ICAgdGhpcy5hcHBlbmQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuZmV0Y2hJc3N1ZUNv
dW50KCk7CisgICAgfQorCisgICAgTGVhcm4ucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIChv
cHRzKSB7CisgICAgICAgIHZhciBhc2lkZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2FzaWRl
Jyk7CisgICAgICAgIGFzaWRlLmlubmVySFRNTCA9IF8udGVtcGxhdGUodGhpcy50ZW1wbGF0ZSwg
dGhpcy5mcmFtZXdvcmtKU09OKTsKKyAgICAgICAgYXNpZGUuY2xhc3NOYW1lID0gJ2xlYXJuJzsK
KworICAgICAgICBpZiAob3B0cyAmJiBvcHRzLmJhY2tlbmQpIHsKKyAgICAgICAgICAgIC8vIFJl
bW92ZSBkZW1vIGxpbmsKKyAgICAgICAgICAgIHZhciBzb3VyY2VMaW5rcyA9IGFzaWRlLnF1ZXJ5
U2VsZWN0b3IoJy5zb3VyY2UtbGlua3MnKTsKKyAgICAgICAgICAgIHZhciBoZWFkaW5nID0gc291
cmNlTGlua3MuZmlyc3RFbGVtZW50Q2hpbGQ7CisgICAgICAgICAgICB2YXIgc291cmNlTGluayA9
IHNvdXJjZUxpbmtzLmxhc3RFbGVtZW50Q2hpbGQ7CisgICAgICAgICAgICAvLyBDb3JyZWN0IGxp
bmsgcGF0aAorICAgICAgICAgICAgdmFyIGhyZWYgPSBzb3VyY2VMaW5rLmdldEF0dHJpYnV0ZSgn
aHJlZicpOworICAgICAgICAgICAgc291cmNlTGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVm
LnN1YnN0cihocmVmLmxhc3RJbmRleE9mKCdodHRwJykpKTsKKyAgICAgICAgICAgIHNvdXJjZUxp
bmtzLmlubmVySFRNTCA9IGhlYWRpbmcub3V0ZXJIVE1MICsgc291cmNlTGluay5vdXRlckhUTUw7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBMb2NhbGl6ZSBkZW1vIGxpbmtzCisg
ICAgICAgICAgICB2YXIgZGVtb0xpbmtzID0gYXNpZGUucXVlcnlTZWxlY3RvckFsbCgnLmRlbW8t
bGluaycpOworICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChkZW1vTGlu
a3MsIGZ1bmN0aW9uIChkZW1vTGluaykgeworICAgICAgICAgICAgICAgIGlmIChkZW1vTGluay5n
ZXRBdHRyaWJ1dGUoJ2hyZWYnKS5zdWJzdHIoMCwgNCkgIT09ICdodHRwJykgeworICAgICAgICAg
ICAgICAgICAgICBkZW1vTGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBmaW5kUm9vdCgpICsgZGVt
b0xpbmsuZ2V0QXR0cmlidXRlKCdocmVmJykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc05hbWUgPSAo
ZG9jdW1lbnQuYm9keS5jbGFzc05hbWUgKyAnIGxlYXJuLWJhcicpLnRyaW0oKTsKKyAgICAgICAg
ZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyQmVnaW4nLCBhc2lkZS5vdXRl
ckhUTUwpOworICAgIH07CisKKyAgICBMZWFybi5wcm90b3R5cGUuZmV0Y2hJc3N1ZUNvdW50ID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgaXNzdWVMaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2lzc3VlLWNvdW50LWxpbmsnKTsKKyAgICAgICAgaWYgKGlzc3VlTGluaykgeworICAg
ICAgICAgICAgdmFyIHVybCA9IGlzc3VlTGluay5ocmVmLnJlcGxhY2UoJ2h0dHBzOi8vZ2l0aHVi
LmNvbScsICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zJyk7CisgICAgICAgICAgICB2YXIg
eGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgICAgICAgICB4aHIub3BlbignR0VUJywg
dXJsLCB0cnVlKTsKKyAgICAgICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoZSkgeworICAg
ICAgICAgICAgICAgIHZhciBwYXJzZWRSZXNwb25zZSA9IEpTT04ucGFyc2UoZS50YXJnZXQucmVz
cG9uc2VUZXh0KTsKKyAgICAgICAgICAgICAgICBpZiAocGFyc2VkUmVzcG9uc2UgaW5zdGFuY2Vv
ZiBBcnJheSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBwYXJzZWRSZXNwb25z
ZS5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCAhPT0gMCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaXNzdWVMaW5rLmlubmVySFRNTCA9ICdUaGlzIGFwcCBoYXMgJyAr
IGNvdW50ICsgJyBvcGVuIGlzc3Vlcyc7CisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnaXNzdWUtY291bnQnKS5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
OworICAgICAgICAgICAgeGhyLnNlbmQoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICByZWRp
cmVjdCgpOworICAgIGdldEZpbGUoJ2xlYXJuLmpzb24nLCBMZWFybik7Cit9KSgpOwpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5j
dGlvbmFsLXByb2ctZXhhbXBsZXMvZWxtL3BhY2thZ2UuanNvbiBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZnVuY3Rpb25hbC1wcm9nLWV4YW1wbGVzL2Vs
bS9wYWNrYWdlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGYxN2FlYzNkYzcyMTg3Mjc1YjM0ZTk2YTY5ZjBl
ODZiOTQ3YTY3NQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZnVuY3Rpb25hbC1wcm9nLWV4YW1wbGVzL2VsbS9wYWNrYWdl
Lmpzb24KQEAgLTAsMCArMSw3IEBACit7CisgICJwcml2YXRlIjogdHJ1ZSwKKyAgImRlcGVuZGVu
Y2llcyI6IHsKKyAgICAidG9kb212Yy1hcHAtY3NzIjogIl4yLjAuNiIsCisgICAgInRvZG9tdmMt
Y29tbW9uIjogIl4xLjAuMiIKKyAgfQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9mdW5jdGlvbmFsLXByb2ctZXhhbXBsZXMvZWxt
L3JlYWRtZS5tZCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZnVuY3Rpb25hbC1wcm9nLWV4YW1wbGVzL2VsbS9yZWFkbWUubWQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTE2
Nzk5OWNhMmQzYWE5YjY3NjZlOWE4Y2MxODQ0NjQ2ZDU0MjVmNAotLS0gL2Rldi9udWxsCisrKyBi
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZnVuY3Rpb25h
bC1wcm9nLWV4YW1wbGVzL2VsbS9yZWFkbWUubWQKQEAgLTAsMCArMSw1NiBAQAorIyBFbG0gVG9k
b01WQyBFeGFtcGxlCisKKz4gQSBmdW5jdGlvbmFsIGxhbmd1YWdlIGZvciBpbnRlcmFjdGl2ZSBh
cHBsaWNhdGlvbnMKKworPiBfW0VsbV0oaHR0cDovL2VsbS1sYW5nLm9yZy8pXworCisKKyMjIExl
YXJuaW5nIEVsbQorCitUaGUgW0VsbSB3ZWJzaXRlXShodHRwOi8vZWxtLWxhbmcub3JnLykgaXMg
YSBncmVhdCByZXNvdXJjZSBmb3IgZ2V0dGluZworc3RhcnRlZC4KKworSGVyZSBhcmUgc29tZSBs
aW5rcyB5b3UgbWF5IGZpbmQgaGVscGZ1bDoKKworKiBbVHJ5IEVsbV0oaHR0cDovL2VsbS1sYW5n
Lm9yZy90cnkpCisqIFtMZWFybiBFbG1dKGh0dHA6Ly9lbG0tbGFuZy5vcmcvTGVhcm4uZWxtKQor
KiBbQW4gSW50cm9kdWN0aW9uIHRvIEVsbV0oaHR0cDovL2d1aWRlLmVsbS1sYW5nLm9yZy8pCisK
K0dldCBoZWxwIGZyb20gb3RoZXIgRWxtIHVzZXJzOgorCisqIFtlbG0tZGlzY3VzcyBtYWlsaW5n
IGxpc3RdKGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZm9ydW0vP2Zyb21ncm91cHMjIWZvcnVt
L2VsbS1kaXNjdXNzKQorKiBbQGVsbWxhbmcgb24gVHdpdHRlcl0oaHR0cHM6Ly90d2l0dGVyLmNv
bS9lbG1sYW5nKQorKiBbQGN6YXBsaWMgb24gVHdpdHRlcl0oaHR0cHM6Ly90d2l0dGVyLmNvbS9j
emFwbGljKQorCitfSWYgeW91IGhhdmUgb3RoZXIgaGVscGZ1bCBsaW5rcyB0byBzaGFyZSwgb3Ig
ZmluZCBhbnkgb2YgdGhlIGxpbmtzIGFib3ZlIG5vIGxvbmdlciB3b3JrLCBwbGVhc2UgW2xldCB1
cyBrbm93XShodHRwczovL2dpdGh1Yi5jb20vdGFzdGVqcy90b2RvbXZjL2lzc3VlcykuXworCisK
KworIyMgUHJvamVjdCBTdHJ1Y3R1cmUKKworQWxsIG9mIHRoZSBFbG0gY29kZSBsaXZlcyBpbiBg
VG9kby5lbG1gIGFuZCBgVG9kby9UYXNrLmVsbWAgYW5kIHJlbGllcworb24gdGhlIFtlbG0taHRt
bF1bXSBhbmQgW2VsbS1uYXZpZ2F0aW9uXVtdIHBhY2thZ2VzLgorCitbZWxtLWh0bWxdOiBodHRw
Oi8vcGFja2FnZS5lbG0tbGFuZy5vcmcvcGFja2FnZXMvZWxtLWxhbmcvaHRtbC9sYXRlc3QvCitb
ZWxtLW5hdmlnYXRpb25dOiBodHRwOi8vcGFja2FnZS5lbG0tbGFuZy5vcmcvcGFja2FnZXMvZWxt
LWxhbmcvbmF2aWdhdGlvbi9sYXRlc3QvCisKK1RoZXJlIGFsc28gaXMgYSBwb3J0IGhhbmRsZXIg
c2V0IHVwIGluIGBpbmRleC5odG1sYCB0byBzZXQgdGhlIGZvY3VzIG9uCitwYXJ0aWN1bGFyIHRl
eHQgZmllbGRzIHdoZW4gbmVjZXNzYXJ5LgorCisjIyBCdWlsZCBJbnN0cnVjdGlvbnMKKworWW91
IG5lZWQgdG8gaW5zdGFsbCBbZWxtXShodHRwOi8vZWxtLWxhbmcub3JnL2luc3RhbGwpCitvbiB5
b3VyIG1hY2hpbmUgZmlyc3QuCisKK1J1biB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGZyb20gdGhl
IHJvb3Qgb2YgdGhpcyBwcm9qZWN0OgorCitgYGBiYXNoCitlbG0tcGFja2FnZSBpbnN0YWxsIC15
CitlbG0tbWFrZSBUb2RvLmVsbSAtLW91dHB1dCBidWlsZC9lbG0uanMKK2BgYAorCitUaGVuIG9w
ZW4gYGluZGV4Lmh0bWxgIGluIHlvdXIgYnJvd3NlciEKKworIyMgQ3JlZGl0CisKK1RoaXMgVG9k
b01WQyBhcHBsaWNhdGlvbiB3YXMgY3JlYXRlZCBieSBbQGV2YW5jel0oaHR0cHM6Ly9naXRodWIu
Y29tL2V2YW5jeiksIGFuZCBpbXBvcnRlZCBpbnRvIFRhc3RlSlMgYnkgW0BwYXNzeV0oaHR0cHM6
Ly90d2l0dGVyLmNvbS9wYXNzeSkuIFRoZSBTcGVlZG9tZXRlciB2ZXJzaW9uIGlzIGJ5IEFkZHkg
T3NtYW5pLgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>