<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugzilla.yoctoproject.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.6"
          urlbase="https://bugzilla.yoctoproject.org/"
          
          maintainer="it-coreprojects-helpdesk@linuxfoundation.org"
>

    <bug>
          <bug_id>3479</bug_id>
          
          <creation_ts>2012-11-22 18:12:27 +0000</creation_ts>
          <short_desc>bitbake hangs while building pseudo</short_desc>
          <delta_ts>2013-01-30 17:49:29 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>7</classification_id>
          <classification>Build System, Metadata &amp; Runtime</classification>
          <product>BitBake</product>
          <component>bitbake</component>
          <version>unspecified</version>
          <rep_platform>x86</rep_platform>
          <op_sys>x86</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>NOTABUG</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>Medium</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>1.4</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mikhail Lodigin">mishal</reporter>
          <assigned_to name="Richard Purdie">richard.purdie</assigned_to>
          <cc>poky.bs.watcher</cc>
    
    <cc>poky.watcher</cc>
    
    <cc>sgw</cc>
          
          
          <cf_os>---</cf_os>
          <cf_regression_type>---</cf_regression_type>
          
          <cf_docchange>---</cf_docchange>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>27627</commentid>
    <comment_count>0</comment_count>
    <who name="Mikhail Lodigin">mishal</who>
    <bug_when>2012-11-22 18:12:27 +0000</bug_when>
    <thetext>in Danny, right after start &quot;bitbake core-image-minimal&quot; while building pseudo bitbake hangs (in ps is clearly seen two zombie python processes).

in Denzil everything works smoothly. 

I&apos;m trying to build meta-fri2 in meta-intel

in order to reproduce one needs to download fri2-noemgd-denny-8.0.tar.bz2 and try to build fri2-noemgd machine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27628</commentid>
    <comment_count>1</comment_count>
    <who name="Mikhail Lodigin">mishal</who>
    <bug_when>2012-11-22 18:45:36 +0000</bug_when>
    <thetext>tested on ubuntu 12.04 - bug reproducible. on ubuntu 10.04 - no.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27767</commentid>
    <comment_count>2</comment_count>
    <who name="Richard Purdie">richard.purdie</who>
    <bug_when>2012-11-28 09:14:38 +0000</bug_when>
    <thetext>I run Ubuntu 12.04 and we also run test builds in QA on it so this is odd. Where exactly in the build process does it hang? Could you include the cooker log (tmp/log/cooker/*) for the hung build please? Logs from the hing task (tmp/work/*/&lt;recipe&gt;/temp/log*&lt;task&gt;*) would also be useful. When you say denzil works, was this on the same machine/hardware or a different one?

If you break out the hung build and retry it, does it continue or just hang in the same place? Does a build from scratch always stop in the same place?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27785</commentid>
    <comment_count>3</comment_count>
    <who name="Mikhail Lodigin">mishal</who>
    <bug_when>2012-11-28 14:51:41 +0000</bug_when>
    <thetext>it hangs right in the beginning

Pseudo is not present but is required, building this first before the main build
Parsing recipes:  99% |######################################## | ETA:  00:00:0

percentage could be different but the result is the same always.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27786</commentid>
    <comment_count>4</comment_count>
    <who name="Mikhail Lodigin">mishal</who>
    <bug_when>2012-11-28 14:56:11 +0000</bug_when>
    <thetext>it hangs ALWAYS in the same place, ether from scratch or after restart.

No difference machine/version/hardware between denzil and danny. two directories on the same level.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27791</commentid>
    <comment_count>5</comment_count>
      <attachid>957</attachid>
    <who name="Mikhail Lodigin">mishal</who>
    <bug_when>2012-11-28 15:10:10 +0000</bug_when>
    <thetext>Created attachment 957
cooker log from hinged danny</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27836</commentid>
    <comment_count>6</comment_count>
    <who name="Saul Wold">sgw</who>
    <bug_when>2012-11-30 00:11:07 +0000</bug_when>
    <thetext>There might be a second cooker log, can you attach the other one, this is the output of bitbake -e which will be helpful also, but we could use the log file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27853</commentid>
    <comment_count>7</comment_count>
    <who name="Mikhail Lodigin">mishal</who>
    <bug_when>2012-11-30 15:58:17 +0000</bug_when>
    <thetext>i&apos;m sorry but *.log files present only in this 
poky-danny-8.0/build-fri2/tmp/log/cooker/fri2-noemgd/
directory</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28297</commentid>
    <comment_count>8</comment_count>
    <who name="Richard Purdie">richard.purdie</who>
    <bug_when>2012-12-14 14:57:54 +0000</bug_when>
    <thetext>I&apos;ve tried to reproduce this on a few different machines and I simply cannot see the behaviour you describe :(

The cooker log you&apos;ve shared is one of the generated files which has the contents of bitbake -e in it. This shows the system is getting to a certain point but its still hard to tell where in the process its crashing/hanging.

I assume it never gets as far as showing anything like &quot;Parsing of 845 .bb files complete (565 cached, 280 parsed). 1150 targets, 29 skipped, 0 masked, 0 errors.&quot;?

Perhaps you could run &quot;strace -f bitbake core-image-sato -DDD 1&gt; logfile1 2&gt; logfile2&quot; and then compress and share logfiles somewhere? The files will be huge but that should give us a better idea of what it was doing before it hung...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28298</commentid>
    <comment_count>9</comment_count>
    <who name="Richard Purdie">richard.purdie</who>
    <bug_when>2012-12-14 14:58:11 +0000</bug_when>
    <thetext>(mark as NEEDINFO)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29355</commentid>
    <comment_count>10</comment_count>
    <who name="Mikhail Lodigin">mishal</who>
    <bug_when>2013-01-30 17:49:29 +0000</bug_when>
    <thetext>Hello,
After latest Ubuntu updates described problem had never occurred.
Thank you everyone for attention and help.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>957</attachid>
            <date>2012-11-28 15:10:10 +0000</date>
            <delta_ts>2012-11-28 15:10:10 +0000</delta_ts>
            <desc>cooker log from hinged danny</desc>
            <filename>20121127141419.log</filename>
            <type>text/x-log</type>
            <size>380808</size>
            <attacher name="Mikhail Lodigin">mishal</attacher>
            
              <data encoding="base64">IyBkb19wYWNrYWdlX3dyaXRlX2RlYj1Ob25lCiMgUFJFRkVSUkVEX1ZFUlNJT05fbmF0aXZlc2Rr
LWxpbnV4LWxpYmMtaGVhZGVycz0ke0xJTlVYTElCQ1ZFUlNJT059ClBSRUZFUlJFRF9WRVJTSU9O
X25hdGl2ZXNkay1saW51eC1saWJjLWhlYWRlcnM9IjMuNC4zIgojIFNUQUdJTkdfQklORElSX0NS
T1NTPSR7U1RBR0lOR19CSU5ESVJ9L2Nyb3Nzc2NyaXB0cwpTVEFHSU5HX0JJTkRJUl9DUk9TUz0i
L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jvb3Rz
L2ZyaTItbm9lbWdkL3Vzci9iaW4vY3Jvc3NzY3JpcHRzIgojIFNES19QQUNLQUdFX0FSQ0hTPWFs
bCBhbnkgbm9hcmNoICR7U0RLX0FSQ0h9LW5hdGl2ZXNkawpTREtfUEFDS0FHRV9BUkNIUz0iYWxs
IGFueSBub2FyY2ggeDg2XzY0LW5hdGl2ZXNkayIKIyBsb2NhbHN0YXRlZGlyPSR7YmFzZV9wcmVm
aXh9L3ZhcgpleHBvcnQgbG9jYWxzdGF0ZWRpcj0iL3ZhciIKIyBTVEFHSU5HX0lOQ0RJUl9OQVRJ
VkU9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtpbmNsdWRlZGlyX25hdGl2ZX0KU1RBR0lOR19JTkNE
SVJfTkFUSVZFPSIvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90
bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIgojIHByZWZpeD0vdXNyCmV4cG9y
dCBwcmVmaXg9Ii91c3IiCiMgRlJFRVNNQVJUUEhPTkVfR0lUPWdpdDovL2dpdC5mcmVlc21hcnRw
aG9uZS5vcmcKRlJFRVNNQVJUUEhPTkVfR0lUPSJnaXQ6Ly9naXQuZnJlZXNtYXJ0cGhvbmUub3Jn
IgojIENQUD0ke0hPU1RfUFJFRklYfWdjYyAtRSR7VE9PTENIQUlOX09QVElPTlN9ICR7SE9TVF9D
Q19BUkNIfQpleHBvcnQgQ1BQPSJpNTg2LXBva3ktbGludXgtZ2NjIC1FIC0tc3lzcm9vdD0vaG9t
ZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvc3lzcm9vdHMvZnJp
Mi1ub2VtZ2QgIC1tMzIgICAgLW1hcmNoPWNvcmUyIC1tc3NlMyAtbXR1bmU9Z2VuZXJpYyAtbWZw
bWF0aD1zc2UiCiMgSU5IRVJJVF9JTlNBTkU9aW5zYW5lCklOSEVSSVRfSU5TQU5FPSJpbnNhbmUi
CiMgQ1ZTRElSPSR7Q09fRElSfS9jdnMKQ1ZTRElSPSIvaG9tZS9taXNoYWwveW9jdG8vcG9reS1k
YW5ueS04LjAvYnVpbGQtZnJpMi9kb3dubG9hZHMvY3ZzIgojIEJCRklMRV9DT0xMRUNUSU9OUz0g
Y29yZSB5b2N0byB5b2N0b2JzcCBpbnRlbCBmcmkyCkJCRklMRV9DT0xMRUNUSU9OUz0iY29yZSB5
b2N0byB5b2N0b2JzcCBpbnRlbCBmcmkyIgojIG1hbmRpcj0ke2RhdGFkaXJ9L21hbgpleHBvcnQg
bWFuZGlyPSIvdXNyL3NoYXJlL21hbiIKIyBQUkVGRVJSRURfVkVSU0lPTl9nY2MtY3Jvc3MtaW50
ZXJtZWRpYXRlPSR7R0NDVkVSU0lPTn0KUFJFRkVSUkVEX1ZFUlNJT05fZ2NjLWNyb3NzLWludGVy
bWVkaWF0ZT0iNC43JSIKIyBiaW5kaXJfY3Jvc3M9L2JpbgpiaW5kaXJfY3Jvc3M9Ii9iaW4iCiMg
SE9TVF9DQ19BUkNIPSR7VEFSR0VUX0NDX0FSQ0h9CkhPU1RfQ0NfQVJDSD0iLW0zMiAgICAtbWFy
Y2g9Y29yZTIgLW1zc2UzIC1tdHVuZT1nZW5lcmljIC1tZnBtYXRoPXNzZSIKIyBCQkZJTEVfUEFU
VEVSTl9mcmkyPV4vaG9tZS9taXNoYWwveW9jdG8vbWV0YS1pbnRlbC9tZXRhLWZyaTIvCkJCRklM
RV9QQVRURVJOX2ZyaTI9Il4vaG9tZS9taXNoYWwveW9jdG8vbWV0YS1pbnRlbC9tZXRhLWZyaTIv
IgojIEJBU0VERVBFTkRTPSR7QGJhc2VfZGVwX3ByZXBlbmQoZCl9CkJBU0VERVBFTkRTPSJ2aXJ0
dWFsL2k1ODYtcG9reS1saW51eC1nY2MgdmlydHVhbC9pNTg2LXBva3ktbGludXgtY29tcGlsZXJs
aWJzIHZpcnR1YWwvbGliYyIKIyBQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtaTU4Nj0ke1BBQ0tB
R0VfRVhUUkFfQVJDSFNfdHVuZS14ODZ9IGkzODYgaTQ4NiBpNTg2ClBBQ0tBR0VfRVhUUkFfQVJD
SFNfdHVuZS1pNTg2PSJ4ODYgaTM4NiBpNDg2IGk1ODYiCiMgRkFLRVJPT1RESVJTPSR7UFNFVURP
X0xPQ0FMU1RBVEVESVJ9CkZBS0VST09URElSUz0iL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFu
bnktOC4wL2J1aWxkLWZyaTIvdG1wL3dvcmsvY29yZTItcG9reS1saW51eC9iYmxheWVycy0xLjAt
cjAvcHNldWRvLyIKIyBCQl9DT05TT0xFTE9HPSR7TE9HX0RJUn0vY29va2VyLyR7TUFDSElORX0v
JHtEQVRFVElNRX0ubG9nCkJCX0NPTlNPTEVMT0c9Ii9ob21lL21pc2hhbC95b2N0by9wb2t5LWRh
bm55LTguMC9idWlsZC1mcmkyL3RtcC9sb2cvY29va2VyL2ZyaTItbm9lbWdkLzIwMTIxMTI3MTQx
NDE5LmxvZyIKIyBQQVRDSF9HRVQ9MApleHBvcnQgUEFUQ0hfR0VUPSIwIgojIEtFUk5FTF9DT05T
T0xFPXR0eVMwCktFUk5FTF9DT05TT0xFPSJ0dHlTMCIKIyBTVFJJUD0ke0hPU1RfUFJFRklYfXN0
cmlwCmV4cG9ydCBTVFJJUD0iaTU4Ni1wb2t5LWxpbnV4LXN0cmlwIgojIFNUQUdJTkdfREFUQURJ
Uj0ke1NUQUdJTkdfRElSX0hPU1R9JHtkYXRhZGlyfQpTVEFHSU5HX0RBVEFESVI9Ii9ob21lL21p
c2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC9zeXNyb290cy9mcmkyLW5v
ZW1nZC91c3Ivc2hhcmUiCiMgdGFyZ2V0X2RhdGFkaXI9L3Vzci9zaGFyZQp0YXJnZXRfZGF0YWRp
cj0iL3Vzci9zaGFyZSIKIyBVU0VfUFJfU0VSVj0ke0BbMSwwXVsoKG5vdCBkLmdldFZhcignUFJT
RVJWX0hPU1QnLCBUcnVlKSkgb3IgKG5vdCBkLmdldFZhcignUFJTRVJWX1BPUlQnLCBUcnVlKSkp
IGFuZCAobm90IGQuZ2V0VmFyKCdQUlNFUlZfTE9DS0RPV04nLCBUcnVlKSldfQpVU0VfUFJfU0VS
Vj0iMCIKIyBDQ0FDSEU9CiMgSU1BR0VfUk9PVEZTPSR7V09SS0RJUn0vcm9vdGZzCklNQUdFX1JP
T1RGUz0iL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3dv
cmsvY29yZTItcG9reS1saW51eC9iYmxheWVycy0xLjAtcjAvcm9vdGZzIgojIGJhc2VfYmluZGly
X25hdGl2ZT0vYmluCmJhc2VfYmluZGlyX25hdGl2ZT0iL2JpbiIKIyBERVBFTkRTPSR7QkFTRURF
UEVORFN9IApERVBFTkRTPSJ2aXJ0dWFsL2k1ODYtcG9reS1saW51eC1nY2MgdmlydHVhbC9pNTg2
LXBva3ktbGludXgtY29tcGlsZXJsaWJzIHZpcnR1YWwvbGliYyIKIyBCQVNFX0xJQl90dW5lLXg4
Ni02NC14MzI9bGlieDMyCkJBU0VfTElCX3R1bmUteDg2LTY0LXgzMj0ibGlieDMyIgojIEtFUk5F
TE9SR19NSVJST1I9aHR0cDovL2tlcm5lbC5vcmcvcHViCktFUk5FTE9SR19NSVJST1I9Imh0dHA6
Ly9rZXJuZWwub3JnL3B1YiIKIyBTRUNUSU9OXyR7UE59LWRiZz1kZXZlbApTRUNUSU9OX2JibGF5
ZXJzLWRiZz0iZGV2ZWwiCiMgREFURVRJTUU9JHtEQVRFfSR7VElNRX0KREFURVRJTUU9IjIwMTIx
MTI3MTQxNDE5IgojIFA9JHtQTn0tJHtQVn0KUD0iYmJsYXllcnMtMS4wIgojIFNPTElCU19kYXJ3
aW45PS4qLmR5bGliClNPTElCU19kYXJ3aW45PSIuKi5keWxpYiIKIyBCVUlMRENGR19WQVJTPUJC
X1ZFUlNJT04gVEFSR0VUX0FSQ0ggVEFSR0VUX09TIE1BQ0hJTkUgRElTVFJPIERJU1RST19WRVJT
SU9OIFRVTkVfRkVBVFVSRVMgVEFSR0VUX0ZQVQpCVUlMRENGR19WQVJTPSJCQl9WRVJTSU9OIFRB
UkdFVF9BUkNIIFRBUkdFVF9PUyBNQUNISU5FIERJU1RSTyBESVNUUk9fVkVSU0lPTiBUVU5FX0ZF
QVRVUkVTIFRBUkdFVF9GUFUiCiMgRD0ke1dPUktESVJ9L2ltYWdlCkQ9Ii9ob21lL21pc2hhbC95
b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC93b3JrL2NvcmUyLXBva3ktbGludXgv
YmJsYXllcnMtMS4wLXIwL2ltYWdlIgojIExJQ0VOU0VfUEFUSD0gL2hvbWUvbWlzaGFsL3lvY3Rv
L21ldGEtaW50ZWwvY29tbW9uL2N1c3RvbS1saWNlbnNlcwpMSUNFTlNFX1BBVEg9Ii9ob21lL21p
c2hhbC95b2N0by9tZXRhLWludGVsL2NvbW1vbi9jdXN0b20tbGljZW5zZXMiCiMgRklMRVNQQVRI
PSR7QGJhc2Vfc2V0X2ZpbGVzcGF0aChbICIke0ZJTEVfRElSTkFNRX0vJHtQRn0iLCAiJHtGSUxF
X0RJUk5BTUV9LyR7UH0iLCAiJHtGSUxFX0RJUk5BTUV9LyR7UE59IiwgIiR7RklMRV9ESVJOQU1F
fS8ke0JQfSIsICIke0ZJTEVfRElSTkFNRX0vJHtCUE59IiwgIiR7RklMRV9ESVJOQU1FfS9maWxl
cyIsICIke0ZJTEVfRElSTkFNRX0iIF0sIGQpfQpGSUxFU1BBVEg9Ii9ob21lL21pc2hhbC95b2N0
by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL2NvbmYvYmJsYXllcnMtMS4wLXIwL2xpbnV4Oi9o
b21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL2NvbmYvYmJsYXllcnMt
MS4wLXIwL2k1ODY6L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIv
Y29uZi9iYmxheWVycy0xLjAtcjAvYnVpbGQtbGludXg6L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3kt
ZGFubnktOC4wL2J1aWxkLWZyaTIvY29uZi9iYmxheWVycy0xLjAtcjAvcG4tYmJsYXllcnM6L2hv
bWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvY29uZi9iYmxheWVycy0x
LjAtcjAvZnJpMi1ub2VtZ2Q6L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxk
LWZyaTIvY29uZi9iYmxheWVycy0xLjAtcjAveDg2Oi9ob21lL21pc2hhbC95b2N0by9wb2t5LWRh
bm55LTguMC9idWlsZC1mcmkyL2NvbmYvYmJsYXllcnMtMS4wLXIwL3Bva3k6L2hvbWUvbWlzaGFs
L3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvY29uZi9iYmxheWVycy0xLjAtcjAvY2xh
c3MtdGFyZ2V0Oi9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL2Nv
bmYvYmJsYXllcnMtMS4wLXIwL2ZvcmNldmFyaWFibGU6L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3kt
ZGFubnktOC4wL2J1aWxkLWZyaTIvY29uZi9iYmxheWVycy0xLjAtcjAvbGliYy1nbGliYzovaG9t
ZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi9jb25mL2JibGF5ZXJzLTEu
MC1yMC86L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvY29uZi9i
YmxheWVycy0xLjAvbGludXg6L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxk
LWZyaTIvY29uZi9iYmxheWVycy0xLjAvaTU4NjovaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5u
eS04LjAvYnVpbGQtZnJpMi9jb25mL2JibGF5ZXJzLTEuMC9idWlsZC1saW51eDovaG9tZS9taXNo
YWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi9jb25mL2JibGF5ZXJzLTEuMC9wbi1i
YmxheWVyczovaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi9jb25m
L2JibGF5ZXJzLTEuMC9mcmkyLW5vZW1nZDovaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04
LjAvYnVpbGQtZnJpMi9jb25mL2JibGF5ZXJzLTEuMC94ODY6L2hvbWUvbWlzaGFsL3lvY3RvL3Bv
a3ktZGFubnktOC4wL2J1aWxkLWZyaTIvY29uZi9iYmxheWVycy0xLjAvcG9reTovaG9tZS9taXNo
YWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi9jb25mL2JibGF5ZXJzLTEuMC9jbGFz
cy10YXJnZXQ6L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvY29u
Zi9iYmxheWVycy0xLjAvZm9yY2V2YXJpYWJsZTovaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5u
eS04LjAvYnVpbGQtZnJpMi9jb25mL2JibGF5ZXJzLTEuMC9saWJjLWdsaWJjOi9ob21lL21pc2hh
bC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL2NvbmYvYmJsYXllcnMtMS4wLzovaG9t
ZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi9jb25mL2JibGF5ZXJzL2xp
bnV4Oi9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL2NvbmYvYmJs
YXllcnMvaTU4NjovaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi9j
b25mL2JibGF5ZXJzL2J1aWxkLWxpbnV4Oi9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTgu
MC9idWlsZC1mcmkyL2NvbmYvYmJsYXllcnMvcG4tYmJsYXllcnM6L2hvbWUvbWlzaGFsL3lvY3Rv
L3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvY29uZi9iYmxheWVycy9mcmkyLW5vZW1nZDovaG9t
ZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi9jb25mL2JibGF5ZXJzL3g4
NjovaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi9jb25mL2JibGF5
ZXJzL3Bva3k6L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvY29u
Zi9iYmxheWVycy9jbGFzcy10YXJnZXQ6L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4w
L2J1aWxkLWZyaTIvY29uZi9iYmxheWVycy9mb3JjZXZhcmlhYmxlOi9ob21lL21pc2hhbC95b2N0
by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL2NvbmYvYmJsYXllcnMvbGliYy1nbGliYzovaG9t
ZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi9jb25mL2JibGF5ZXJzLzov
aG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi9jb25mL2JibGF5ZXJz
LTEuMC9saW51eDovaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi9j
b25mL2JibGF5ZXJzLTEuMC9pNTg2Oi9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9i
dWlsZC1mcmkyL2NvbmYvYmJsYXllcnMtMS4wL2J1aWxkLWxpbnV4Oi9ob21lL21pc2hhbC95b2N0
by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL2NvbmYvYmJsYXllcnMtMS4wL3BuLWJibGF5ZXJz
Oi9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL2NvbmYvYmJsYXll
cnMtMS4wL2ZyaTItbm9lbWdkOi9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWls
ZC1mcmkyL2NvbmYvYmJsYXllcnMtMS4wL3g4NjovaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5u
eS04LjAvYnVpbGQtZnJpMi9jb25mL2JibGF5ZXJzLTEuMC9wb2t5Oi9ob21lL21pc2hhbC95b2N0
by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL2NvbmYvYmJsYXllcnMtMS4wL2NsYXNzLXRhcmdl
dDovaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi9jb25mL2JibGF5
ZXJzLTEuMC9mb3JjZXZhcmlhYmxlOi9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9i
dWlsZC1mcmkyL2NvbmYvYmJsYXllcnMtMS4wL2xpYmMtZ2xpYmM6L2hvbWUvbWlzaGFsL3lvY3Rv
L3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvY29uZi9iYmxheWVycy0xLjAvOi9ob21lL21pc2hh
bC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL2NvbmYvYmJsYXllcnMvbGludXg6L2hv
bWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvY29uZi9iYmxheWVycy9p
NTg2Oi9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL2NvbmYvYmJs
YXllcnMvYnVpbGQtbGludXg6L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxk
LWZyaTIvY29uZi9iYmxheWVycy9wbi1iYmxheWVyczovaG9tZS9taXNoYWwveW9jdG8vcG9reS1k
YW5ueS04LjAvYnVpbGQtZnJpMi9jb25mL2JibGF5ZXJzL2ZyaTItbm9lbWdkOi9ob21lL21pc2hh
bC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL2NvbmYvYmJsYXllcnMveDg2Oi9ob21l
L21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL2NvbmYvYmJsYXllcnMvcG9r
eTovaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi9jb25mL2JibGF5
ZXJzL2NsYXNzLXRhcmdldDovaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQt
ZnJpMi9jb25mL2JibGF5ZXJzL2ZvcmNldmFyaWFibGU6L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3kt
ZGFubnktOC4wL2J1aWxkLWZyaTIvY29uZi9iYmxheWVycy9saWJjLWdsaWJjOi9ob21lL21pc2hh
bC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL2NvbmYvYmJsYXllcnMvOi9ob21lL21p
c2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL2NvbmYvZmlsZXMvbGludXg6L2hv
bWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvY29uZi9maWxlcy9pNTg2
Oi9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL2NvbmYvZmlsZXMv
YnVpbGQtbGludXg6L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIv
Y29uZi9maWxlcy9wbi1iYmxheWVyczovaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAv
YnVpbGQtZnJpMi9jb25mL2ZpbGVzL2ZyaTItbm9lbWdkOi9ob21lL21pc2hhbC95b2N0by9wb2t5
LWRhbm55LTguMC9idWlsZC1mcmkyL2NvbmYvZmlsZXMveDg2Oi9ob21lL21pc2hhbC95b2N0by9w
b2t5LWRhbm55LTguMC9idWlsZC1mcmkyL2NvbmYvZmlsZXMvcG9reTovaG9tZS9taXNoYWwveW9j
dG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi9jb25mL2ZpbGVzL2NsYXNzLXRhcmdldDovaG9t
ZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi9jb25mL2ZpbGVzL2ZvcmNl
dmFyaWFibGU6L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvY29u
Zi9maWxlcy9saWJjLWdsaWJjOi9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWls
ZC1mcmkyL2NvbmYvZmlsZXMvOi9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWls
ZC1mcmkyL2NvbmYvbGludXg6L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxk
LWZyaTIvY29uZi9pNTg2Oi9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1m
cmkyL2NvbmYvYnVpbGQtbGludXg6L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1
aWxkLWZyaTIvY29uZi9wbi1iYmxheWVyczovaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04
LjAvYnVpbGQtZnJpMi9jb25mL2ZyaTItbm9lbWdkOi9ob21lL21pc2hhbC95b2N0by9wb2t5LWRh
bm55LTguMC9idWlsZC1mcmkyL2NvbmYveDg2Oi9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55
LTguMC9idWlsZC1mcmkyL2NvbmYvcG9reTovaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04
LjAvYnVpbGQtZnJpMi9jb25mL2NsYXNzLXRhcmdldDovaG9tZS9taXNoYWwveW9jdG8vcG9reS1k
YW5ueS04LjAvYnVpbGQtZnJpMi9jb25mL2ZvcmNldmFyaWFibGU6L2hvbWUvbWlzaGFsL3lvY3Rv
L3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvY29uZi9saWJjLWdsaWJjOi9ob21lL21pc2hhbC95
b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL2NvbmYvIgojIElNQUdFX0ZFQVRVUkVTPSAk
e0VYVFJBX0lNQUdFX0ZFQVRVUkVTfQpJTUFHRV9GRUFUVVJFUz0iZGVidWctdHdlYWtzIgojIERF
UExPWV9ESVJfVE9PTFM9JHtERVBMT1lfRElSfS90b29scwpERVBMT1lfRElSX1RPT0xTPSIvaG9t
ZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvZGVwbG95L3Rvb2xz
IgojIFRVTkVfQVJDSD0ke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJtMzIi
LCAiJHtYODZBUkNIMzJ9IiwgIiIgLGQpfSR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRV
UkVTIiwgIm14MzIiLCAiJHtYODZBUkNINjR9IiwgIiIgLGQpfSR7QGJiLnV0aWxzLmNvbnRhaW5z
KCJUVU5FX0ZFQVRVUkVTIiwgIm02NCIsICIke1g4NkFSQ0g2NH0iLCAiIiAsZCl9ClRVTkVfQVJD
SD0iaTU4NiIKIyBRQURFUEVORFM9cHJlbGluay1uYXRpdmUKUUFERVBFTkRTPSJwcmVsaW5rLW5h
dGl2ZSIKIyBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJjPWVnbGliYwpQUkVGRVJSRURf
UFJPVklERVJfdmlydHVhbC9saWJjPSJlZ2xpYmMiCiMgRV9TVk49c3ZuOi8vc3ZuLmVubGlnaHRl
bm1lbnQub3JnL3N2bi9lCkVfU1ZOPSJzdm46Ly9zdm4uZW5saWdodGVubWVudC5vcmcvc3ZuL2Ui
CiMgUFNFVURPX1BBU1NXRD0ke1NUQUdJTkdfRElSX1RBUkdFVH0KUFNFVURPX1BBU1NXRD0iL2hv
bWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jvb3RzL2Zy
aTItbm9lbWdkIgojIEJVSUxEX0NYWEZMQUdTPSR7QlVJTERfQ0ZMQUdTfSAtZnBlcm1pc3NpdmUK
ZXhwb3J0IEJVSUxEX0NYWEZMQUdTPSItaXN5c3RlbS9ob21lL21pc2hhbC95b2N0by9wb2t5LWRh
bm55LTguMC9idWlsZC1mcmkyL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUg
LU8yIC1waXBlIC1mcGVybWlzc2l2ZSIKIyBTVEFHSU5HX0RJUl9UQ0JPT1RTVFJBUD0ke1NUQUdJ
TkdfRElSX1RBUkdFVH0tdGNib290c3RyYXAKU1RBR0lOR19ESVJfVENCT09UU1RSQVA9Ii9ob21l
L21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC9zeXNyb290cy9mcmky
LW5vZW1nZC10Y2Jvb3RzdHJhcCIKIyBPQkpDT1BZPSR7SE9TVF9QUkVGSVh9b2JqY29weQpleHBv
cnQgT0JKQ09QWT0iaTU4Ni1wb2t5LWxpbnV4LW9iamNvcHkiCiMgVFVORV9GRUFUVVJFU190dW5l
LXg4Nj1tMzIKVFVORV9GRUFUVVJFU190dW5lLXg4Nj0ibTMyIgojIEZBS0VST09URU5WPVBTRVVE
T19QUkVGSVg9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfSBQU0VVRE9fTE9D
QUxTVEFURURJUj0ke1BTRVVET19MT0NBTFNUQVRFRElSfSBQU0VVRE9fUEFTU1dEPSR7UFNFVURP
X1BBU1NXRH0gUFNFVURPX05PU1lNTElOS0VYUD0xIFBTRVVET19ESVNBQkxFRD0wCkZBS0VST09U
RU5WPSJQU0VVRE9fUFJFRklYPS9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWls
ZC1mcmkyL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyIFBTRVVET19MT0NBTFNUQVRFRElS
PS9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC93b3JrL2Nv
cmUyLXBva3ktbGludXgvYmJsYXllcnMtMS4wLXIwL3BzZXVkby8gUFNFVURPX1BBU1NXRD0vaG9t
ZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvc3lzcm9vdHMvZnJp
Mi1ub2VtZ2QgUFNFVURPX05PU1lNTElOS0VYUD0xIFBTRVVET19ESVNBQkxFRD0wIgojIFBSRUZF
UlJFRF9WRVJTSU9OX2Nyb3NzLWxvY2FsZWRlZi1uYXRpdmU9JHtFR0xJQkNWRVJTSU9OfQpQUkVG
RVJSRURfVkVSU0lPTl9jcm9zcy1sb2NhbGVkZWYtbmF0aXZlPSIyLjE2IgojIFNPTElCU0RFVl9k
YXJ3aW44PS5keWxpYgpTT0xJQlNERVZfZGFyd2luOD0iLmR5bGliIgojIFNPTElCU0RFVl9kYXJ3
aW45PS5keWxpYgpTT0xJQlNERVZfZGFyd2luOT0iLmR5bGliIgojIEJCX0hBU0hCQVNFX1dISVRF
TElTVD1UTVBESVIgRklMRSBQQVRIIFBXRCBCQl9UQVNLSEFTSCBCQlBBVEggRExfRElSIFNTVEFU
RV9ESVIgVEhJU0RJUiBGSUxFU0VYVFJBUEFUSFMgRklMRV9ESVJOQU1FIEhPTUUgTE9HTkFNRSBT
SEVMTCBURVJNIFVTRVIgRklMRVNQQVRIIFNUQUdJTkdfRElSX0hPU1QgU1RBR0lOR19ESVJfVEFS
R0VUIENPUkVCQVNFIFBSU0VSVl9IT1NUIFBSU0VSVl9QT1JUIFBSU0VSVl9EVU1QRElSIFBSU0VS
Vl9EVU1QRklMRSBQUlNFUlZfTE9DS0RPV04gUEFSQUxMRUxfTUFLRSBDQ0FDSEVfRElSIEVYVEVS
TkFMX1RPT0xDSEFJTiBDQ0FDSEUgQ0NBQ0hFX0RJU0FCTEUKQkJfSEFTSEJBU0VfV0hJVEVMSVNU
PSJUTVBESVIgRklMRSBQQVRIIFBXRCBCQl9UQVNLSEFTSCBCQlBBVEggRExfRElSIFNTVEFURV9E
SVIgVEhJU0RJUiBGSUxFU0VYVFJBUEFUSFMgRklMRV9ESVJOQU1FIEhPTUUgTE9HTkFNRSBTSEVM
TCBURVJNIFVTRVIgRklMRVNQQVRIIFNUQUdJTkdfRElSX0hPU1QgU1RBR0lOR19ESVJfVEFSR0VU
IENPUkVCQVNFIFBSU0VSVl9IT1NUIFBSU0VSVl9QT1JUIFBSU0VSVl9EVU1QRElSIFBSU0VSVl9E
VU1QRklMRSBQUlNFUlZfTE9DS0RPV04gUEFSQUxMRUxfTUFLRSBDQ0FDSEVfRElSIEVYVEVSTkFM
X1RPT0xDSEFJTiBDQ0FDSEUgQ0NBQ0hFX0RJU0FCTEUiCiMgVVNFUj1taXNoYWwKZXhwb3J0IFVT
RVI9Im1pc2hhbCIKIyBTUkNfVVJJPQojIFNTVEFURVBPU1RJTlNURlVOQ1M9CiMgaW5jbHVkZWRp
cl9uYXRpdmU9JHtwcmVmaXhfbmF0aXZlfS9pbmNsdWRlCmluY2x1ZGVkaXJfbmF0aXZlPSIvdXNy
L2luY2x1ZGUiCiMgTEFZRVJERVBFTkRTX2ZyaTI9aW50ZWwKTEFZRVJERVBFTkRTX2ZyaTI9Imlu
dGVsIgojIE9FU19CSVRCQUtFX0NPTkY9MQpPRVNfQklUQkFLRV9DT05GPSIxIgojIEFMTF9RQT0k
e1dBUk5fUUF9ICR7RVJST1JfUUF9CkFMTF9RQT0iZGV2LXNvIGRlYnVnLWRlcHMgZGV2LWRlcHMg
ZGVidWctZmlsZXMgYXJjaCBsYTIgcGtnY29uZmlnIGxhIHBlcm1zIHVzZWxlc3MtcnBhdGhzIHJw
YXRocyBzdGF0aWNkZXYgbGRmbGFncyIKIyBRQURFUEVORFNfdmlydGNsYXNzLW5hdGl2ZXNkaz0K
IyBTVU1NQVJZXyR7UE59LWRvYz0ke1NVTU1BUll9IC0gRG9jdW1lbnRhdGlvbiBmaWxlcwpTVU1N
QVJZX2JibGF5ZXJzLWRvYz0iYmJsYXllcnMgdmVyc2lvbiAxLjAtcjAgLSBEb2N1bWVudGF0aW9u
IGZpbGVzIgojIFNZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUz0KIyBNQUNISU5FX0VYVFJBX1JSRUNP
TU1FTkRTPSBrZXJuZWwtbW9kdWxlcyBlZWUtYWNwaS1zY3JpcHRzIGxpbnV4LWZpcm13YXJlLWl3
bHdpZmktNjAwMGcyYS01Ck1BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFM9Imtlcm5lbC1tb2R1bGVz
IGVlZS1hY3BpLXNjcmlwdHMgbGludXgtZmlybXdhcmUtaXdsd2lmaS02MDAwZzJhLTUiCiMgU1RB
R0lOR19CSU5ESVI9JHtTVEFHSU5HX0RJUl9IT1NUfSR7YmluZGlyfQpTVEFHSU5HX0JJTkRJUj0i
L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jvb3Rz
L2ZyaTItbm9lbWdkL3Vzci9iaW4iCiMgU1ZORElSPSR7Q09fRElSfS9zdm4KU1ZORElSPSIvaG9t
ZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi9kb3dubG9hZHMvc3ZuIgoj
IFBSRUZFUlJFRF9QUk9WSURFUl9kYnVzLWdsaWItbmF0aXZlPWRidXMtZ2xpYi1uYXRpdmUKUFJF
RkVSUkVEX1BST1ZJREVSX2RidXMtZ2xpYi1uYXRpdmU9ImRidXMtZ2xpYi1uYXRpdmUiCiMgWFNF
UlZFUj0ke1hTRVJWRVJfSUEzMl9CQVNFfSAke1hTRVJWRVJfSUEzMl9FWFR9ICR7WFNFUlZFUl9J
QTMyX1ZFU0F9IApYU0VSVkVSPSJ4c2VydmVyLXhvcmcgICAgICAgICAgICB4Zjg2LWlucHV0LW1v
dXNlICAgICAgICAgICAgeGY4Ni1pbnB1dC1rZXlib2FyZCAgICAgICAgICAgIHhmODYtaW5wdXQt
ZXZkZXYgICAgICAgICAgICB4Zjg2LWlucHV0LXN5bmFwdGljcyAgICAgICAgICAgIG1lc2EtZHJp
ICAgICAgICAgICAgIHhzZXJ2ZXIteG9yZy1leHRlbnNpb24tZHJpICAgICAgICAgICAgeHNlcnZl
ci14b3JnLWV4dGVuc2lvbi1kcmkyICAgICAgICAgICAgeHNlcnZlci14b3JnLWV4dGVuc2lvbi1n
bHggICAgICAgICAgICB4c2VydmVyLXhvcmctZXh0ZW5zaW9uLWV4dG1vZCAgICAgICAgICAgIHhz
ZXJ2ZXIteG9yZy1leHRlbnNpb24tZGJlICAgICAgICAgICAgeHNlcnZlci14b3JnLW1vZHVsZS1s
aWJpbnQxMCAgICAgICAgICAgICB4Zjg2LXZpZGVvLXZlc2EiCiMgRVhURU5EUEU9JHtAWycnLCck
e1BFXHg3ZF8nXVtkLmdldFZhcignUEUnLDEpID4gMF19CiMgRklMRVNESVI9JHtAYmIud2hpY2go
ZC5nZXRWYXIoJ0ZJTEVTUEFUSCcsIFRydWUpLCAnLicpfQpGSUxFU0RJUj0iL2hvbWUvbWlzaGFs
L3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvY29uZi8uIgojIFFFTVVfT1BUSU9OU19l
NTUwMC02NGI9LWNwdSBlNTUwMApRRU1VX09QVElPTlNfZTU1MDAtNjRiPSItY3B1IGU1NTAwIgoj
IFBSRUZFUlJFRF9WRVJTSU9OX2djYy1jcm9zcy1pbml0aWFsPSR7R0NDVkVSU0lPTn0KUFJFRkVS
UkVEX1ZFUlNJT05fZ2NjLWNyb3NzLWluaXRpYWw9IjQuNyUiCiMgQkJJTkNMVURFRD0vaG9tZS9t
aXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvbWV0YS9jbGFzc2VzL3Byc2Vydi5iYmNsYXNzIC9o
b21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9tZXRhL2NsYXNzZXMvYmFzZS5iYmNsYXNz
IC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9tZXRhLXlvY3RvL2NsYXNzZXMvcG9r
eS1zYW5pdHkuYmJjbGFzcyAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvbWV0YS9j
b25mL2Rpc3Ryby9pbmNsdWRlL3dvcmxkLWJyb2tlbi5pbmMgL2hvbWUvbWlzaGFsL3lvY3RvL3Bv
a3ktZGFubnktOC4wL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LXByb3ZpZGVycy5p
bmMgL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEteW9jdG8tYnNwL2NvbmYv
bGF5ZXIuY29uZiAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvbWV0YS9jbGFzc2Vz
L2NocnBhdGguYmJjbGFzcyAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvbWV0YS9j
bGFzc2VzL2ltYWdlLXByZWxpbmsuYmJjbGFzcyAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5u
eS04LjAvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbW9kZS1kZWZhdWx0LmluYyAvaG9tZS9t
aXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvbWV0YS9jbGFzc2VzL3V0aWxzLmJiY2xhc3MgL2hv
bWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEvY2xhc3Nlcy9taXJyb3JzLmJiY2xh
c3MgL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEvY2xhc3Nlcy9pbWFnZS1t
a2xpYnMuYmJjbGFzcyAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvbWV0YS9jb25m
L21hY2hpbmUvaW5jbHVkZS9pYTMyL2FyY2gtaWEzMi5pbmMgL2hvbWUvbWlzaGFsL3lvY3RvL3Bv
a3ktZGFubnktOC4wL21ldGEvY2xhc3Nlcy9kZWJpYW4uYmJjbGFzcyAvaG9tZS9taXNoYWwveW9j
dG8vbWV0YS1pbnRlbC9tZXRhLWZyaTIvY29uZi9sYXllci5jb25mIC9ob21lL21pc2hhbC95b2N0
by9wb2t5LWRhbm55LTguMC9tZXRhL2NsYXNzZXMvc3RhZ2luZy5iYmNsYXNzIC9ob21lL21pc2hh
bC95b2N0by9wb2t5LWRhbm55LTguMC9tZXRhL2NvbmYvbGljZW5zZXMuY29uZiAvaG9tZS9taXNo
YWwveW9jdG8vcG9reS1kYW5ueS04LjAvbWV0YS15b2N0by9jb25mL2xheWVyLmNvbmYgL2hvbWUv
bWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVu
ZS1pNTg2LmluYyAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi9j
b25mL2JibGF5ZXJzLmNvbmYgL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEv
Y29uZi9kaXN0cm8vaW5jbHVkZS9hcy1uZWVkZWQuaW5jIC9ob21lL21pc2hhbC95b2N0by9wb2t5
LWRhbm55LTguMC9tZXRhL2NvbmYvc2FuaXR5LmNvbmYgL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3kt
ZGFubnktOC4wL21ldGEvY29uZi9iaXRiYWtlLmNvbmYgL2hvbWUvbWlzaGFsL3lvY3RvL21ldGEt
aW50ZWwvbWV0YS1mcmkyL2NvbmYvbWFjaGluZS9mcmkyLW5vZW1nZC5jb25mIC9ob21lL21pc2hh
bC95b2N0by9wb2t5LWRhbm55LTguMC9tZXRhL2NvbmYvYWJpX3ZlcnNpb24uY29uZiAvaG9tZS9t
aXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvbWV0YS9jbGFzc2VzL2RldnNoZWxsLmJiY2xhc3Mg
L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEvY2xhc3Nlcy9wYWNrYWdlLmJi
Y2xhc3MgL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEvY29uZi9sYXllci5j
b25mIC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9tZXRhL2NsYXNzZXMvdGVybWlu
YWwuYmJjbGFzcyAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvbWV0YS9jb25mL21h
Y2hpbmUvaW5jbHVkZS9pYTMyLWJhc2UuaW5jIC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55
LTguMC9tZXRhL2NsYXNzZXMvdXRpbGl0eS10YXNrcy5iYmNsYXNzIC9ob21lL21pc2hhbC95b2N0
by9wb2t5LWRhbm55LTguMC9tZXRhL2NsYXNzZXMvbWV0YWRhdGFfc2NtLmJiY2xhc3MgL2hvbWUv
bWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEvY2xhc3Nlcy9zYW5pdHkuYmJjbGFzcyAv
aG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9w
b2t5LmNvbmYgL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEvY2xhc3Nlcy9z
c3RhdGUuYmJjbGFzcyAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvbWV0YS9jb25m
L2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtdmVyc2lvbnMuaW5jIC9ob21lL21pc2hhbC95b2N0by9w
b2t5LWRhbm55LTguMC9tZXRhL2NsYXNzZXMvcGF0Y2guYmJjbGFzcyAvaG9tZS9taXNoYWwveW9j
dG8vcG9reS1kYW5ueS04LjAvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWF0b20uaW5j
IC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9tZXRhL2NsYXNzZXMvYnVpbGRzdGF0
cy5iYmNsYXNzIC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9tZXRhL2NvbmYvZG9j
dW1lbnRhdGlvbi5jb25mIC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9tZXRhL2Ns
YXNzZXMvbGljZW5zZS5iYmNsYXNzIC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9t
ZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZTIuaW5jIC9ob21lL21pc2hhbC95b2N0
by9wb2t5LWRhbm55LTguMC9tZXRhL2NsYXNzZXMvcGFja2FnZWRhdGEuYmJjbGFzcyAvaG9tZS9t
aXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvbWV0YS9jbGFzc2VzL2xvZ2dpbmcuYmJjbGFzcyAv
aG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvbWV0YS9jbGFzc2VzL2luc2FuZS5iYmNs
YXNzIC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9tZXRhL2NvbmYvZGlzdHJvL2Rl
ZmF1bHRzZXR1cC5jb25mIC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9tZXRhL2Nv
bmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC1kaXN0cm92YXJzLmluYyAvaG9tZS9taXNoYWwveW9j
dG8vcG9reS1kYW5ueS04LjAvbWV0YS9jbGFzc2VzL3BhY2thZ2VfcnBtLmJiY2xhc3MgL2hvbWUv
bWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y2xp
YmMtZWdsaWJjLmluYyAvaG9tZS9taXNoYWwveW9jdG8vbWV0YS1pbnRlbC9jb25mL2xheWVyLmNv
bmYgL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvY29uZi9sb2Nh
bC5jb25mCkJCSU5DTFVERUQ9Ii9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9tZXRh
L2NsYXNzZXMvcHJzZXJ2LmJiY2xhc3MgL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4w
L21ldGEvY2xhc3Nlcy9iYXNlLmJiY2xhc3MgL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnkt
OC4wL21ldGEteW9jdG8vY2xhc3Nlcy9wb2t5LXNhbml0eS5iYmNsYXNzIC9ob21lL21pc2hhbC95
b2N0by9wb2t5LWRhbm55LTguMC9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvd29ybGQtYnJva2Vu
LmluYyAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvbWV0YS9jb25mL2Rpc3Ryby9p
bmNsdWRlL2RlZmF1bHQtcHJvdmlkZXJzLmluYyAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5u
eS04LjAvbWV0YS15b2N0by1ic3AvY29uZi9sYXllci5jb25mIC9ob21lL21pc2hhbC95b2N0by9w
b2t5LWRhbm55LTguMC9tZXRhL2NsYXNzZXMvY2hycGF0aC5iYmNsYXNzIC9ob21lL21pc2hhbC95
b2N0by9wb2t5LWRhbm55LTguMC9tZXRhL2NsYXNzZXMvaW1hZ2UtcHJlbGluay5iYmNsYXNzIC9o
b21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUv
dGNtb2RlLWRlZmF1bHQuaW5jIC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9tZXRh
L2NsYXNzZXMvdXRpbHMuYmJjbGFzcyAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAv
bWV0YS9jbGFzc2VzL21pcnJvcnMuYmJjbGFzcyAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5u
eS04LjAvbWV0YS9jbGFzc2VzL2ltYWdlLW1rbGlicy5iYmNsYXNzIC9ob21lL21pc2hhbC95b2N0
by9wb2t5LWRhbm55LTguMC9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2lhMzIvYXJjaC1pYTMy
LmluYyAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvbWV0YS9jbGFzc2VzL2RlYmlh
bi5iYmNsYXNzIC9ob21lL21pc2hhbC95b2N0by9tZXRhLWludGVsL21ldGEtZnJpMi9jb25mL2xh
eWVyLmNvbmYgL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEvY2xhc3Nlcy9z
dGFnaW5nLmJiY2xhc3MgL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEvY29u
Zi9saWNlbnNlcy5jb25mIC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9tZXRhLXlv
Y3RvL2NvbmYvbGF5ZXIuY29uZiAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvbWV0
YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWk1ODYuaW5jIC9ob21lL21pc2hhbC95b2N0by9w
b2t5LWRhbm55LTguMC9idWlsZC1mcmkyL2NvbmYvYmJsYXllcnMuY29uZiAvaG9tZS9taXNoYWwv
eW9jdG8vcG9reS1kYW5ueS04LjAvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2FzLW5lZWRlZC5p
bmMgL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEvY29uZi9zYW5pdHkuY29u
ZiAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvbWV0YS9jb25mL2JpdGJha2UuY29u
ZiAvaG9tZS9taXNoYWwveW9jdG8vbWV0YS1pbnRlbC9tZXRhLWZyaTIvY29uZi9tYWNoaW5lL2Zy
aTItbm9lbWdkLmNvbmYgL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEvY29u
Zi9hYmlfdmVyc2lvbi5jb25mIC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9tZXRh
L2NsYXNzZXMvZGV2c2hlbGwuYmJjbGFzcyAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04
LjAvbWV0YS9jbGFzc2VzL3BhY2thZ2UuYmJjbGFzcyAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1k
YW5ueS04LjAvbWV0YS9jb25mL2xheWVyLmNvbmYgL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFu
bnktOC4wL21ldGEvY2xhc3Nlcy90ZXJtaW5hbC5iYmNsYXNzIC9ob21lL21pc2hhbC95b2N0by9w
b2t5LWRhbm55LTguMC9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2lhMzItYmFzZS5pbmMgL2hv
bWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEvY2xhc3Nlcy91dGlsaXR5LXRhc2tz
LmJiY2xhc3MgL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEvY2xhc3Nlcy9t
ZXRhZGF0YV9zY20uYmJjbGFzcyAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvbWV0
YS9jbGFzc2VzL3Nhbml0eS5iYmNsYXNzIC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTgu
MC9tZXRhLXlvY3RvL2NvbmYvZGlzdHJvL3Bva3kuY29uZiAvaG9tZS9taXNoYWwveW9jdG8vcG9r
eS1kYW5ueS04LjAvbWV0YS9jbGFzc2VzL3NzdGF0ZS5iYmNsYXNzIC9ob21lL21pc2hhbC95b2N0
by9wb2t5LWRhbm55LTguMC9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC12ZXJzaW9u
cy5pbmMgL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEvY2xhc3Nlcy9wYXRj
aC5iYmNsYXNzIC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9tZXRhL2NvbmYvbWFj
aGluZS9pbmNsdWRlL3R1bmUtYXRvbS5pbmMgL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnkt
OC4wL21ldGEvY2xhc3Nlcy9idWlsZHN0YXRzLmJiY2xhc3MgL2hvbWUvbWlzaGFsL3lvY3RvL3Bv
a3ktZGFubnktOC4wL21ldGEvY29uZi9kb2N1bWVudGF0aW9uLmNvbmYgL2hvbWUvbWlzaGFsL3lv
Y3RvL3Bva3ktZGFubnktOC4wL21ldGEvY2xhc3Nlcy9saWNlbnNlLmJiY2xhc3MgL2hvbWUvbWlz
aGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1j
b3JlMi5pbmMgL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEvY2xhc3Nlcy9w
YWNrYWdlZGF0YS5iYmNsYXNzIC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9tZXRh
L2NsYXNzZXMvbG9nZ2luZy5iYmNsYXNzIC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTgu
MC9tZXRhL2NsYXNzZXMvaW5zYW5lLmJiY2xhc3MgL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFu
bnktOC4wL21ldGEvY29uZi9kaXN0cm8vZGVmYXVsdHNldHVwLmNvbmYgL2hvbWUvbWlzaGFsL3lv
Y3RvL3Bva3ktZGFubnktOC4wL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LWRpc3Ry
b3ZhcnMuaW5jIC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9tZXRhL2NsYXNzZXMv
cGFja2FnZV9ycG0uYmJjbGFzcyAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvbWV0
YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy1lZ2xpYmMuaW5jIC9ob21lL21pc2hhbC95b2N0
by9tZXRhLWludGVsL2NvbmYvbGF5ZXIuY29uZiAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5u
eS04LjAvYnVpbGQtZnJpMi9jb25mL2xvY2FsLmNvbmYiCiMgU1NUQVRFX1ZFUlNJT049MgpTU1RB
VEVfVkVSU0lPTj0iMiIKIyBVU0VfTkxTPXllcwpVU0VfTkxTPSJ5ZXMiCiMgU0RLX05BTUU9JHtE
SVNUUk99LSR7VENMSUJDfS0ke1NES19BUkNIfS0ke1RBUkdFVF9BUkNIfQpTREtfTkFNRT0icG9r
eS1lZ2xpYmMteDg2XzY0LWk1ODYiCiMgT0VMQVlPVVRfQUJJPTgKT0VMQVlPVVRfQUJJPSI4Igoj
IFBSRUZFUlJFRF9WRVJTSU9OX25hdGl2ZXNkay1nY2MtcnVudGltZT0ke1NES0dDQ1ZFUlNJT059
ClBSRUZFUlJFRF9WRVJTSU9OX25hdGl2ZXNkay1nY2MtcnVudGltZT0iNC43JSIKIyBBU05FRURF
RD0tV2wsLS1hcy1uZWVkZWQKQVNORUVERUQ9Ii1XbCwtLWFzLW5lZWRlZCIKIyBUTVBESVI9JHtU
T1BESVJ9L3RtcCR7VENMSUJDQVBQRU5EfQpUTVBESVI9Ii9ob21lL21pc2hhbC95b2N0by9wb2t5
LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcCIKIyBESVNUUk9fRkVBVFVSRVNfTElCQ19ERUZBVUxU
PWlwdjQgaXB2NiBsaWJjLWJhY2t0cmFjZSBsaWJjLWJpZy1tYWNyb3MgbGliYy1ic2QgbGliYy1j
eHgtdGVzdHMgbGliYy1jYXRnZXRzIGxpYmMtY2hhcnNldHMgbGliYy1jcnlwdCAJCQkJCWxpYmMt
Y3J5cHQtdWZjIGxpYmMtZGItYWxpYXNlcyBsaWJjLWVudnogbGliYy1mY3Z0IGxpYmMtZm10bXNn
IGxpYmMtZnN0YWIgbGliYy1mdHJhdmVyc2UgCQkJCQlsaWJjLWdldGxvZ2luIGxpYmMtaWRuIGxp
YmMtaW5ldC1hbmwgbGliYy1saWJtIGxpYmMtbGlibS1iaWcgbGliYy1sb2NhbGVzIGxpYmMtbG9j
YWxlLWNvZGUgCQkJCQlsaWJjLW1lbXVzYWdlIGxpYmMtbmlzIGxpYmMtbnNzd2l0Y2ggbGliYy1y
Y21kIGxpYmMtcnRsZC1kZWJ1ZyBsaWJjLXNwYXduIGxpYmMtc3RyZWFtcyBsaWJjLXN1bnJwYyAJ
CQkJCWxpYmMtdXRtcCBsaWJjLXV0bXB4IGxpYmMtd29yZGV4cCBsaWJjLXBvc2l4LWNsYW5nLXdj
aGFyIGxpYmMtcG9zaXgtcmVnZXhwIGxpYmMtcG9zaXgtcmVnZXhwLWdsaWJjIAkJCQkJbGliYy1w
b3NpeC13Y2hhci1pbwpESVNUUk9fRkVBVFVSRVNfTElCQ19ERUZBVUxUPSJpcHY0IGlwdjYgbGli
Yy1iYWNrdHJhY2UgbGliYy1iaWctbWFjcm9zIGxpYmMtYnNkIGxpYmMtY3h4LXRlc3RzIGxpYmMt
Y2F0Z2V0cyBsaWJjLWNoYXJzZXRzIGxpYmMtY3J5cHQgCQkJCQlsaWJjLWNyeXB0LXVmYyBsaWJj
LWRiLWFsaWFzZXMgbGliYy1lbnZ6IGxpYmMtZmN2dCBsaWJjLWZtdG1zZyBsaWJjLWZzdGFiIGxp
YmMtZnRyYXZlcnNlIAkJCQkJbGliYy1nZXRsb2dpbiBsaWJjLWlkbiBsaWJjLWluZXQtYW5sIGxp
YmMtbGlibSBsaWJjLWxpYm0tYmlnIGxpYmMtbG9jYWxlcyBsaWJjLWxvY2FsZS1jb2RlIAkJCQkJ
bGliYy1tZW11c2FnZSBsaWJjLW5pcyBsaWJjLW5zc3dpdGNoIGxpYmMtcmNtZCBsaWJjLXJ0bGQt
ZGVidWcgbGliYy1zcGF3biBsaWJjLXN0cmVhbXMgbGliYy1zdW5ycGMgCQkJCQlsaWJjLXV0bXAg
bGliYy11dG1weCBsaWJjLXdvcmRleHAgbGliYy1wb3NpeC1jbGFuZy13Y2hhciBsaWJjLXBvc2l4
LXJlZ2V4cCBsaWJjLXBvc2l4LXJlZ2V4cC1nbGliYyAJCQkJCWxpYmMtcG9zaXgtd2NoYXItaW8i
CiMgYmFzZV9saWJkaXJfbmF0aXZlPS9saWIKYmFzZV9saWJkaXJfbmF0aXZlPSIvbGliIgojIFFF
TVVfT1BUSU9OU19pd21teHQ9LWNwdSBweGEyNzAtYzUKUUVNVV9PUFRJT05TX2l3bW14dD0iLWNw
dSBweGEyNzAtYzUiCiMgaW5jbHVkZWRpcl9uYXRpdmVzZGs9JHtwcmVmaXhfbmF0aXZlc2RrfS9p
bmNsdWRlCmluY2x1ZGVkaXJfbmF0aXZlc2RrPSIvdXNyL2luY2x1ZGUiCiMgbGliZXhlY2Rpcj0k
e2V4ZWNfcHJlZml4fS9saWJleGVjCmV4cG9ydCBsaWJleGVjZGlyPSIvdXNyL2xpYmV4ZWMiCiMg
TElOS0VSX0hBU0hfU1RZTEVfbWlwc2VsPXN5c3YKTElOS0VSX0hBU0hfU1RZTEVfbWlwc2VsPSJz
eXN2IgojIENDQUNIRV9ESVNBQkxFPSR7QFswLDFdW2QuZ2V0VmFyKCdDQ0FDSEUnLCBUcnVlKSA9
PSAnJ119CmV4cG9ydCBDQ0FDSEVfRElTQUJMRT0iMSIKIyBYODZBUkNIMzI9aTU4NgpYODZBUkNI
MzI9Imk1ODYiCiMgRkVUQ0hDTURfc3ZuPS91c3IvYmluL2VudiBzdm4gLS1ub24taW50ZXJhY3Rp
dmUgLS10cnVzdC1zZXJ2ZXItY2VydApGRVRDSENNRF9zdm49Ii91c3IvYmluL2VudiBzdm4gLS1u
b24taW50ZXJhY3RpdmUgLS10cnVzdC1zZXJ2ZXItY2VydCIKIyBTT1VSQ0VfTUlSUk9SX0ZFVENI
PU5vbmUKIyBTVU1NQVJZXyR7UE59LXN0YXRpY2Rldj0ke1NVTU1BUll9IC0gRGV2ZWxvcG1lbnQg
ZmlsZXMgKFN0YXRpYyBMaWJyYXJpZXMpClNVTU1BUllfYmJsYXllcnMtc3RhdGljZGV2PSJiYmxh
eWVycyB2ZXJzaW9uIDEuMC1yMCAtIERldmVsb3BtZW50IGZpbGVzIChTdGF0aWMgTGlicmFyaWVz
KSIKIyBJTUFHRV9QS0dUWVBFPXJwbQpJTUFHRV9QS0dUWVBFPSJycG0iCiMgRklMRVNfJHtQTn0t
ZGJnPSR7QGQuZ2V0VmFyKFsnRE9UREVCVUctZGJnJywgJ0RFQlVHRklMRURJUkVDVE9SWS1kYmcn
XVtkLmdldFZhcignUEFDS0FHRV9ERUJVR19TUExJVF9TVFlMRScsIFRydWUpID09ICdkZWJ1Zy1m
aWxlLWRpcmVjdG9yeSddLCBUcnVlKX0KRklMRVNfYmJsYXllcnMtZGJnPSIvdXNyL2Jpbi8uZGVi
dWcgL3Vzci9zYmluLy5kZWJ1ZyAvdXNyL2xpYmV4ZWMvLmRlYnVnIC91c3IvbGliLy5kZWJ1ZyAv
YmluLy5kZWJ1ZyAvc2Jpbi8uZGVidWcgL2xpYi8uZGVidWcgL3Vzci9saWIvYmJsYXllcnMvLmRl
YnVnIC91c3IvbGliL21hdGNoYm94LXBhbmVsLy5kZWJ1ZyAvdXNyL3NyYy9kZWJ1ZyIKIyBzZXJ2
aWNlZGlyPSR7YmFzZV9wcmVmaXh9L3NydgpleHBvcnQgc2VydmljZWRpcj0iL3NydiIKIyBST09U
RlNfUE9TVFBST0NFU1NfQ09NTUFORD1saWNlbnNlX2NyZWF0ZV9tYW5pZmVzdDsgClJPT1RGU19Q
T1NUUFJPQ0VTU19DT01NQU5EPSJsaWNlbnNlX2NyZWF0ZV9tYW5pZmVzdDsiCiMgRklMRVM9CiMg
UFJFRkVSUkVEX1ZFUlNJT05fbmF0aXZlc2RrLWxpYmdjYz0ke1NES0dDQ1ZFUlNJT059ClBSRUZF
UlJFRF9WRVJTSU9OX25hdGl2ZXNkay1saWJnY2M9IjQuNyUiCiMgYmluZGlyX25hdGl2ZT0ke3By
ZWZpeF9uYXRpdmV9L2JpbgpiaW5kaXJfbmF0aXZlPSIvdXNyL2JpbiIKIyBCQl9NSU5fVkVSU0lP
Tj0xLjE2LjAKQkJfTUlOX1ZFUlNJT049IjEuMTYuMCIKIyBCVUlMRF9QUkVGSVg9CiMgQVNORUVE
RURfcG4tcHVsc2VhdWRpbz0KIyBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9Q
UkVGSVh9Z2NjPWdjYy1jcm9zcwpQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9pNTg2LXBva3kt
bGludXgtZ2NjPSJnY2MtY3Jvc3MiCiMgU0RLX09TPSR7QlVJTERfT1N9ClNES19PUz0ibGludXgi
CiMgQ09NQklORURfRkVBVFVSRVM9JHtAYmFzZV9ib3RoX2NvbnRhaW4oIkRJU1RST19GRUFUVVJF
UyIsICJNQUNISU5FX0ZFQVRVUkVTIiwgImFsc2EiLCBkKX0gJHtAYmFzZV9ib3RoX2NvbnRhaW4o
IkRJU1RST19GRUFUVVJFUyIsICJNQUNISU5FX0ZFQVRVUkVTIiwgImJsdWV0b290aCIsIGQpfSAk
e0BiYXNlX2JvdGhfY29udGFpbigiRElTVFJPX0ZFQVRVUkVTIiwgIk1BQ0hJTkVfRkVBVFVSRVMi
LCAiZXh0MiIsIGQpfSAke0BiYXNlX2JvdGhfY29udGFpbigiRElTVFJPX0ZFQVRVUkVTIiwgIk1B
Q0hJTkVfRkVBVFVSRVMiLCAidmZhdCIsIGQpfSAke0BiYXNlX2JvdGhfY29udGFpbigiRElTVFJP
X0ZFQVRVUkVTIiwgIk1BQ0hJTkVfRkVBVFVSRVMiLCAiaXJkYSIsIGQpfSAke0BiYXNlX2JvdGhf
Y29udGFpbigiRElTVFJPX0ZFQVRVUkVTIiwgIk1BQ0hJTkVfRkVBVFVSRVMiLCAicGNtY2lhIiwg
ZCl9ICR7QGJhc2VfYm90aF9jb250YWluKCJESVNUUk9fRkVBVFVSRVMiLCAiTUFDSElORV9GRUFU
VVJFUyIsICJwY2kiLCBkKX0gJHtAYmFzZV9ib3RoX2NvbnRhaW4oIkRJU1RST19GRUFUVVJFUyIs
ICJNQUNISU5FX0ZFQVRVUkVTIiwgInVzYmdhZGdldCIsIGQpfSAke0BiYXNlX2JvdGhfY29udGFp
bigiRElTVFJPX0ZFQVRVUkVTIiwgIk1BQ0hJTkVfRkVBVFVSRVMiLCAidXNiaG9zdCIsIGQpfSAk
e0BiYXNlX2JvdGhfY29udGFpbigiRElTVFJPX0ZFQVRVUkVTIiwgIk1BQ0hJTkVfRkVBVFVSRVMi
LCAid2lmaSIsIGQpfQpDT01CSU5FRF9GRUFUVVJFUz0iYWxzYSAgZXh0MiAgICBwY2kgdXNiZ2Fk
Z2V0IHVzYmhvc3Qgd2lmaSIKIyBHSVRfQ09ORklHPSR7R0lUX0NPTkZJR19QQVRIfS9naXRjb25m
aWcKR0lUX0NPTkZJRz0iL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZy
aTIvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC9ldGMvZ2l0Y29uZmlnIgojIFBZVEhPTj0ke0Bz
eXMuZXhlY3V0YWJsZX0KUFlUSE9OPSIvdXNyL2Jpbi9weXRob24iCiMgZGF0YWRpcj0ke3ByZWZp
eH0vc2hhcmUKZXhwb3J0IGRhdGFkaXI9Ii91c3Ivc2hhcmUiCiMgU1RBR0lOR19FVENESVJfTkFU
SVZFPSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7c3lzY29uZmRpcl9uYXRpdmV9ClNUQUdJTkdfRVRD
RElSX05BVElWRT0iL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIv
dG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC9ldGMiCiMgQlVJTERfQVNfQVJDSD0KIyBIT1NUX0VY
RUVYVD0KIyBTUkNEQVRFPSR7REFURX0KU1JDREFURT0iMjAxMjExMjciCiMgQ0FDSEU9L2hvbWUv
bWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL2NhY2hlL2RlZmF1bHQt
ZWdsaWJjL2ZyaTItbm9lbWdkCkNBQ0hFPSIvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04
LjAvYnVpbGQtZnJpMi90bXAvY2FjaGUvZGVmYXVsdC1lZ2xpYmMvZnJpMi1ub2VtZ2QiCiMgTE9D
QUxFQkFTRVBOPSR7UE59CkxPQ0FMRUJBU0VQTj0iYmJsYXllcnMiCiMgU1VNTUFSWT0ke1BOfSB2
ZXJzaW9uICR7UFZ9LSR7UFJ9ClNVTU1BUlk9ImJibGF5ZXJzIHZlcnNpb24gMS4wLXIwIgojIFRB
UkdFVF9DQ19BUkNIPSR7VFVORV9DQ0FSR1N9ClRBUkdFVF9DQ19BUkNIPSItbTMyICAgIC1tYXJj
aD1jb3JlMiAtbXNzZTMgLW10dW5lPWdlbmVyaWMgLW1mcG1hdGg9c3NlIgojIFFFTVVfT1BUSU9O
U19hcm12Nj0tY3B1IGFybTExMzYKUUVNVV9PUFRJT05TX2FybXY2PSItY3B1IGFybTExMzYiCiMg
SE9TVF9BUkNIPSR7VEFSR0VUX0FSQ0h9CkhPU1RfQVJDSD0iaTU4NiIKIyBFTkFCTEVfQklOQVJZ
X0xPQ0FMRV9HRU5FUkFUSU9OPTEKRU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTj0iMSIK
IyBUQVJHRVRfT1M9bGludXgke0xJQkNFWFRFTlNJT059JHtBQklFWFRFTlNJT059ClRBUkdFVF9P
Uz0ibGludXgiCiMgR1BFUEhPTkVfTUlSUk9SPWh0dHA6Ly9ncGVwaG9uZS5saW51eHRvZ28ub3Jn
L2Rvd25sb2FkL2dwZXBob25lCkdQRVBIT05FX01JUlJPUj0iaHR0cDovL2dwZXBob25lLmxpbnV4
dG9nby5vcmcvZG93bmxvYWQvZ3BlcGhvbmUiCiMgR1BFUEhPTkVfU1ZOPXN2bjovL3Byb2plY3Rz
LmxpbnV4dG9nby5vcmcvc3ZuL2dwZXBob25lL3RydW5rL3NvdXJjZTttb2R1bGU9JHtQTn0KR1BF
UEhPTkVfU1ZOPSJzdm46Ly9wcm9qZWN0cy5saW51eHRvZ28ub3JnL3N2bi9ncGVwaG9uZS90cnVu
ay9zb3VyY2U7bW9kdWxlPWJibGF5ZXJzIgojIHNiaW5kaXJfbmF0aXZlPSR7cHJlZml4X25hdGl2
ZX0vc2JpbgpzYmluZGlyX25hdGl2ZT0iL3Vzci9zYmluIgojIFNPTElCU19kYXJ3aW44PS4qLmR5
bGliClNPTElCU19kYXJ3aW44PSIuKi5keWxpYiIKIyBBU1NVTUVfUFJPVklERUQ9YnppcDItbmF0
aXZlIGNocnBhdGgtbmF0aXZlIGdpdC1uYXRpdmUgZ3JlcC1uYXRpdmUgZGlmZnN0YXQtbmF0aXZl
IHBhdGNoLW5hdGl2ZSBwZXJsLW5hdGl2ZS1ydW50aW1lIHB5dGhvbi1uYXRpdmUtcnVudGltZSB0
YXItbmF0aXZlIHZpcnR1YWwvbGliaW50bC1uYXRpdmUgCkFTU1VNRV9QUk9WSURFRD0iYnppcDIt
bmF0aXZlIGNocnBhdGgtbmF0aXZlIGdpdC1uYXRpdmUgZ3JlcC1uYXRpdmUgZGlmZnN0YXQtbmF0
aXZlIHBhdGNoLW5hdGl2ZSBwZXJsLW5hdGl2ZS1ydW50aW1lIHB5dGhvbi1uYXRpdmUtcnVudGlt
ZSB0YXItbmF0aXZlIHZpcnR1YWwvbGliaW50bC1uYXRpdmUiCiMgZXhwYW5zaW9uIG9mIFNSQ1BW
IHRocmV3IEV4cGFuc2lvbkVycm9yOiBGYWlsdXJlIGV4cGFuZGluZyB2YXJpYWJsZSBTUkNQViwg
ZXhwcmVzc2lvbiB3YXMgJHtAYmIuZmV0Y2gyLmdldF9zcmNyZXYoZCl9IHdoaWNoIHRyaWdnZXJl
ZCBleGNlcHRpb24gRmV0Y2hFcnJvcjogRmV0Y2hlciBmYWlsdXJlOiBTUkNSRVYgd2FzIHVzZWQg
eWV0IG5vIHZhbGlkIFNDTSB3YXMgZm91bmQgaW4gU1JDX1VSSQojIFFFTVVfT1BUSU9OUz0KIyBM
SUNTU1RBVEVESVI9JHtXT1JLRElSfS9saWNlbnNlLWRlc3RkaXIvCkxJQ1NTVEFURURJUj0iL2hv
bWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3dvcmsvY29yZTIt
cG9reS1saW51eC9iYmxheWVycy0xLjAtcjAvbGljZW5zZS1kZXN0ZGlyLyIKIyBBTExfTVVMVElM
SUJfUEFDS0FHRV9BUkNIUz0ke0BhbGxfbXVsdGlsaWJfdHVuZV92YWx1ZXMoZCwgJ1BBQ0tBR0Vf
QVJDSFMnKX0KQUxMX01VTFRJTElCX1BBQ0tBR0VfQVJDSFM9ImFsbCBhbnkgbm9hcmNoIHg4NiBp
Mzg2IGk0ODYgaTU4NiBpNjg2IGNvcmUyIGZyaTJfbm9lbWdkIgojIExDT05GX1ZFUlNJT049NgpM
Q09ORl9WRVJTSU9OPSI2IgojIE1MUFJFRklYPQojIENPTk5FQ1RJVklUWV9DSEVDS19VUklTPSBo
dHRwczovL2V1bGEtZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvaW5kZXgucGhwIGh0dHA6Ly9i
dWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3JlcG9ydC5jZ2kKQ09OTkVDVElWSVRZX0NIRUNLX1VS
SVM9Imh0dHBzOi8vZXVsYS1kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9pbmRleC5waHAgaHR0
cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvcmVwb3J0LmNnaSIKIyBGRVRDSENNRF9oZz0v
dXNyL2Jpbi9lbnYgaGcKRkVUQ0hDTURfaGc9Ii91c3IvYmluL2VudiBoZyIKIyBUVU5FX1BLR0FS
Q0hfdHVuZS1pNTg2PWk1ODYKVFVORV9QS0dBUkNIX3R1bmUtaTU4Nj0iaTU4NiIKIyBUVU5FVkFM
SUQ9Tm9uZQojIFRVTkVDT05GTElDVFM9Tm9uZQojIFhTRVJWRVJfSUEzMl9JOTE1PXhmODYtdmlk
ZW8taW50ZWwgICAgICAgICAgICBtZXNhLWRyaS1kcml2ZXItaTkxNSAgICAgICAgICAgIApYU0VS
VkVSX0lBMzJfSTkxNT0ieGY4Ni12aWRlby1pbnRlbCAgICAgICAgICAgIG1lc2EtZHJpLWRyaXZl
ci1pOTE1IgojIEFCSUVYVEVOU0lPTj0ke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJF
UyIsICJteDMyIiwgIngzMiIsICIiICxkKX0KIyBUVU5FQUJJX1dISVRFTElTVD1Ob25lCiMgSVBL
X0ZFRURfVVJJUz1Ob25lCiMgQlVJTERfQ1hYPSR7Q0NBQ0hFfSR7QlVJTERfUFJFRklYfWcrKyAk
e0JVSUxEX0NDX0FSQ0h9CmV4cG9ydCBCVUlMRF9DWFg9ImcrKyIKIyBGVUxMX09QVElNSVpBVElP
Tj0tTzIgLXBpcGUgJHtERUJVR19GTEFHU30KRlVMTF9PUFRJTUlaQVRJT049Ii1PMiAtcGlwZSAt
ZyAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMiCiMgc3lzY29uZmRpcj0ke2Jhc2VfcHJl
Zml4fS9ldGMKZXhwb3J0IHN5c2NvbmZkaXI9Ii9ldGMiCiMgVEFSR0VUX0FTX0FSQ0g9JHtUVU5F
X0FTQVJHU30KVEFSR0VUX0FTX0FSQ0g9IiIKIyBBU05FRURFRF9wbi1jb25zb2xlLXRvb2xzPQoj
IFNPVVJDRV9NSVJST1JfVVJMPU5vbmUKIyBQUkVGRVJSRURfVkVSU0lPTl9weXRob249Mi43LjMK
UFJFRkVSUkVEX1ZFUlNJT05fcHl0aG9uPSIyLjcuMyIKIyBGSUxFU18ke1BOfT0ke2JpbmRpcn0v
KiAke3NiaW5kaXJ9LyogJHtsaWJleGVjZGlyfS8qICR7bGliZGlyfS9saWIqJHtTT0xJQlN9ICR7
c3lzY29uZmRpcn0gJHtzaGFyZWRzdGF0ZWRpcn0gJHtsb2NhbHN0YXRlZGlyfSAke2Jhc2VfYmlu
ZGlyfS8qICR7YmFzZV9zYmluZGlyfS8qICR7YmFzZV9saWJkaXJ9Lyoke1NPTElCU30gJHtkYXRh
ZGlyfS8ke0JQTn0gJHtsaWJkaXJ9LyR7QlBOfS8qICR7ZGF0YWRpcn0vcGl4bWFwcyAke2RhdGFk
aXJ9L2FwcGxpY2F0aW9ucyAke2RhdGFkaXJ9L2lkbCAke2RhdGFkaXJ9L29tZiAke2RhdGFkaXJ9
L3NvdW5kcyAke2xpYmRpcn0vYm9ub2JvL3NlcnZlcnMKRklMRVNfYmJsYXllcnM9Ii91c3IvYmlu
LyogL3Vzci9zYmluLyogL3Vzci9saWJleGVjLyogL3Vzci9saWIvbGliKi5zby4qIC9ldGMgL2Nv
bSAvdmFyIC9iaW4vKiAvc2Jpbi8qIC9saWIvKi5zby4qIC91c3Ivc2hhcmUvYmJsYXllcnMgL3Vz
ci9saWIvYmJsYXllcnMvKiAvdXNyL3NoYXJlL3BpeG1hcHMgL3Vzci9zaGFyZS9hcHBsaWNhdGlv
bnMgL3Vzci9zaGFyZS9pZGwgL3Vzci9zaGFyZS9vbWYgL3Vzci9zaGFyZS9zb3VuZHMgL3Vzci9s
aWIvYm9ub2JvL3NlcnZlcnMiCiMgTUtURU1QQ01EPW1rdGVtcCAtcSAke1RNUEJBU0V9Ck1LVEVN
UENNRD0ibWt0ZW1wIC1xICR7VE1QQkFTRX0iCiMgREFURT0yMDEyMTEyNwpEQVRFPSIyMDEyMTEy
NyIKIyBBUEFDSEVfTUlSUk9SPWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9kaXN0CkFQQUNIRV9NSVJS
T1I9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9kaXN0IgojIGRvX3Jvb3Rmcz1Ob25lCiMgV0hJVEVM
SVNUX0dQTHYzPWxlc3MKV0hJVEVMSVNUX0dQTHYzPSJsZXNzIgojIExEPSR7SE9TVF9QUkVGSVh9
bGQke1RPT0xDSEFJTl9PUFRJT05TfSAke0hPU1RfTERfQVJDSH0KZXhwb3J0IExEPSJpNTg2LXBv
a3ktbGludXgtbGQgLS1zeXNyb290PS9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9i
dWlsZC1mcmkyL3RtcC9zeXNyb290cy9mcmkyLW5vZW1nZCIKIyBIT1NUX1ZFTkRPUj0ke1RBUkdF
VF9WRU5ET1J9CkhPU1RfVkVORE9SPSItcG9reSIKIyBQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUt
eDg2LTY0PSR7VFVORV9QS0dBUkNIX3R1bmUteDg2LTY0fQpQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1
bmUteDg2LTY0PSJ4ODZfNjQiCiMgUEFUQ0hSRVNPTFZFPW5vb3AKUEFUQ0hSRVNPTFZFPSJub29w
IgojIFNTVEFURV9TQ0FOX0ZJTEVTPSoubGEgKi1jb25maWcgKl9jb25maWcKU1NUQVRFX1NDQU5f
RklMRVM9IioubGEgKi1jb25maWcgKl9jb25maWciCiMgTEdQTHYyX1dISVRFTElTVF9HUEx2Mz1s
aWJhc3N1YW4gZ251dGxzIGxpYnRhc24xIGxpYmlkbiBsaWJnY2MgZ2NjLXJ1bnRpbWUKTEdQTHYy
X1dISVRFTElTVF9HUEx2Mz0ibGliYXNzdWFuIGdudXRscyBsaWJ0YXNuMSBsaWJpZG4gbGliZ2Nj
IGdjYy1ydW50aW1lIgojIEJCRklMRV9QQVRURVJOX3lvY3RvYnNwPV4vaG9tZS9taXNoYWwveW9j
dG8vcG9reS1kYW5ueS04LjAvbWV0YS15b2N0by1ic3AvCkJCRklMRV9QQVRURVJOX3lvY3RvYnNw
PSJeL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEteW9jdG8tYnNwLyIKIyBQ
UkVGRVJSRURfUFJPVklERVJfZ2RrLXBpeGJ1Zj1nZGstcGl4YnVmClBSRUZFUlJFRF9QUk9WSURF
Ul9nZGstcGl4YnVmPSJnZGstcGl4YnVmIgojIFNTVEFURV9NQU5GSUxFQkFTRT0ke1NTVEFURV9N
QU5JRkVTVFN9L21hbmlmZXN0LSR7U1NUQVRFX01BTk1BQ0h9LQpTU1RBVEVfTUFORklMRUJBU0U9
Ii9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC9zc3RhdGUt
Y29udHJvbC9tYW5pZmVzdC1jb3JlMi0iCiMgTUFDSElORV9UQVNLX1BST1ZJREVSPSR7REVGQVVM
VF9UQVNLX1BST1ZJREVSfQpNQUNISU5FX1RBU0tfUFJPVklERVI9InBhY2thZ2Vncm91cC1iYXNl
IgojIEVYVFJBX09FTUFLRT0tZSBNQUtFRkxBR1M9CkVYVFJBX09FTUFLRT0iLWUgTUFLRUZMQUdT
PSIKIyBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjLWluaXRp
YWw9Z2NjLWNyb3NzLWluaXRpYWwKUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvaTU4Ni1wb2t5
LWxpbnV4LWdjYy1pbml0aWFsPSJnY2MtY3Jvc3MtaW5pdGlhbCIKIyBESVNUUk9fRkVBVFVSRVNf
TElCQ192aXJ0Y2xhc3MtbmF0aXZlc2RrPSR7RElTVFJPX0ZFQVRVUkVTX0xJQkNfREVGQVVMVH0K
RElTVFJPX0ZFQVRVUkVTX0xJQkNfdmlydGNsYXNzLW5hdGl2ZXNkaz0iaXB2NCBpcHY2IGxpYmMt
YmFja3RyYWNlIGxpYmMtYmlnLW1hY3JvcyBsaWJjLWJzZCBsaWJjLWN4eC10ZXN0cyBsaWJjLWNh
dGdldHMgbGliYy1jaGFyc2V0cyBsaWJjLWNyeXB0IAkJCQkJbGliYy1jcnlwdC11ZmMgbGliYy1k
Yi1hbGlhc2VzIGxpYmMtZW52eiBsaWJjLWZjdnQgbGliYy1mbXRtc2cgbGliYy1mc3RhYiBsaWJj
LWZ0cmF2ZXJzZSAJCQkJCWxpYmMtZ2V0bG9naW4gbGliYy1pZG4gbGliYy1pbmV0LWFubCBsaWJj
LWxpYm0gbGliYy1saWJtLWJpZyBsaWJjLWxvY2FsZXMgbGliYy1sb2NhbGUtY29kZSAJCQkJCWxp
YmMtbWVtdXNhZ2UgbGliYy1uaXMgbGliYy1uc3N3aXRjaCBsaWJjLXJjbWQgbGliYy1ydGxkLWRl
YnVnIGxpYmMtc3Bhd24gbGliYy1zdHJlYW1zIGxpYmMtc3VucnBjIAkJCQkJbGliYy11dG1wIGxp
YmMtdXRtcHggbGliYy13b3JkZXhwIGxpYmMtcG9zaXgtY2xhbmctd2NoYXIgbGliYy1wb3NpeC1y
ZWdleHAgbGliYy1wb3NpeC1yZWdleHAtZ2xpYmMgCQkJCQlsaWJjLXBvc2l4LXdjaGFyLWlvIgoj
IExERkxBR1M9JHtUQVJHRVRfTERGTEFHU30KZXhwb3J0IExERkxBR1M9Ii1XbCwtTzEgLVdsLC0t
aGFzaC1zdHlsZT1nbnUgLVdsLC0tYXMtbmVlZGVkIgojIEJCRklMRV9QUklPUklUWV95b2N0b2Jz
cD01CkJCRklMRV9QUklPUklUWV95b2N0b2JzcD0iNSIKIyBiaW5kaXI9JHtleGVjX3ByZWZpeH0v
YmluCmV4cG9ydCBiaW5kaXI9Ii91c3IvYmluIgojIEZSRUVCU0RfTUlSUk9SPWZ0cDovL2Z0cC5m
cmVlYnNkLm9yZy9wdWIvRnJlZUJTRC8KRlJFRUJTRF9NSVJST1I9ImZ0cDovL2Z0cC5mcmVlYnNk
Lm9yZy9wdWIvRnJlZUJTRC8iCiMgUFJFRkVSUkVEX1ZFUlNJT05fYmludXRpbHMtY3Jvc3M9JHtC
SU5VVkVSU0lPTn0KUFJFRkVSUkVEX1ZFUlNJT05fYmludXRpbHMtY3Jvc3M9IjIuMjIiCiMgUFJF
RkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzPWJpbnV0aWxz
LWNyb3NzClBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2k1ODYtcG9reS1saW51eC1iaW51dGls
cz0iYmludXRpbHMtY3Jvc3MiCiMgU1VNTUFSWV8ke1BOfS1kYmc9JHtTVU1NQVJZfSAtIERlYnVn
Z2luZyBmaWxlcwpTVU1NQVJZX2JibGF5ZXJzLWRiZz0iYmJsYXllcnMgdmVyc2lvbiAxLjAtcjAg
LSBEZWJ1Z2dpbmcgZmlsZXMiCiMgVEVSTT14dGVybQpleHBvcnQgVEVSTT0ieHRlcm0iCiMgU1RB
TVBDTEVBTj0ke1RNUERJUn0vc3RhbXBzLyR7TVVMVElNQUNIX1RBUkdFVF9TWVN9LyR7UE59LVsw
LTldKi0qClNUQU1QQ0xFQU49Ii9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWls
ZC1mcmkyL3RtcC9zdGFtcHMvY29yZTItcG9reS1saW51eC9iYmxheWVycy1bMC05XSotKiIKIyBI
T1NUX1BSRUZJWD0ke1RBUkdFVF9QUkVGSVh9CkhPU1RfUFJFRklYPSJpNTg2LXBva3ktbGludXgt
IgojIExBWUVSX0NPTkZfVkVSU0lPTj02CkxBWUVSX0NPTkZfVkVSU0lPTj0iNiIKIyBCVUlMRFNU
QVRTX0JBU0U9JHtUTVBESVJ9L2J1aWxkc3RhdHMvCkJVSUxEU1RBVFNfQkFTRT0iL2hvbWUvbWlz
aGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL2J1aWxkc3RhdHMvIgojIFNZ
U1ZJTklUX0VOQUJMRURfR0VUVFlTPU5vbmUKIyBESVNUUk9fRVhUUkFfUlJFQ09NTUVORFM9ICAk
e1BPS1lfREVGQVVMVF9FWFRSQV9SUkVDT01NRU5EU30KRElTVFJPX0VYVFJBX1JSRUNPTU1FTkRT
PSJrZXJuZWwtbW9kdWxlLWFmLXBhY2tldCIKIyBUQVJHRVRfQ1hYRkxBR1M9JHtUQVJHRVRfQ0ZM
QUdTfSAtZnBlcm1pc3NpdmUKZXhwb3J0IFRBUkdFVF9DWFhGTEFHUz0iLU8yIC1waXBlIC1nIC1m
ZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAtZnBlcm1pc3NpdmUiCiMgU09MSUJTREVWPS5z
bwpTT0xJQlNERVY9Ii5zbyIKIyBCVUlMRF9BUkNIPSR7QG9zLnVuYW1lKClbNF19CkJVSUxEX0FS
Q0g9Ing4Nl82NCIKIyBQS0dEPSR7V09SS0RJUn0vcGFja2FnZQpQS0dEPSIvaG9tZS9taXNoYWwv
eW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvd29yay9jb3JlMi1wb2t5LWxpbnV4
L2JibGF5ZXJzLTEuMC1yMC9wYWNrYWdlIgojIFBLR0U9JHtAWycnLCcke1BFXHg3ZCddW2QuZ2V0
VmFyKCdQRScsMSkgPiAwXX0KIyBIT1NUX1NZUz0ke0hPU1RfQVJDSH0ke0hPU1RfVkVORE9SfS0k
e0hPU1RfT1N9CkhPU1RfU1lTPSJpNTg2LXBva3ktbGludXgiCiMgTUFLRT1tYWtlCmV4cG9ydCBN
QUtFPSJtYWtlIgojIFBLR1Y9JHtQVn0KUEtHVj0iMS4wIgojIGluY2x1ZGVkaXI9JHtleGVjX3By
ZWZpeH0vaW5jbHVkZQpleHBvcnQgaW5jbHVkZWRpcj0iL3Vzci9pbmNsdWRlIgojIFBLR1I9JHtQ
Un0ke0VYVEVORFBSQVVUT30KUEtHUj0icjAiCiMgVEFSR0VUX0NQUEZMQUdTPQojIFJSRUNPTU1F
TkRTXyR7UE59LWRiZz0ke1BOfSAoPSAke0VYVEVORFBLR1Z9KQpSUkVDT01NRU5EU19iYmxheWVy
cy1kYmc9ImJibGF5ZXJzICg9IDEuMC1yMCkiCiMgUFJFRkVSUkVEX1ZFUlNJT05fZWdsaWJjLWlu
aXRpYWw9JHtFR0xJQkNWRVJTSU9OfQpQUkVGRVJSRURfVkVSU0lPTl9lZ2xpYmMtaW5pdGlhbD0i
Mi4xNiIKIyBCQkZJTEVfUEFUVEVSTl95b2N0bz1eL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFu
bnktOC4wL21ldGEteW9jdG8vCkJCRklMRV9QQVRURVJOX3lvY3RvPSJeL2hvbWUvbWlzaGFsL3lv
Y3RvL3Bva3ktZGFubnktOC4wL21ldGEteW9jdG8vIgojIFBDTUNJQV9NQU5BR0VSPXBjbWNpYXV0
aWxzClBDTUNJQV9NQU5BR0VSPSJwY21jaWF1dGlscyIKIyBTVEFHSU5HX0RJUl9OQVRJVkU9JHtT
VEFHSU5HX0RJUn0vJHtCVUlMRF9TWVN9ClNUQUdJTkdfRElSX05BVElWRT0iL2hvbWUvbWlzaGFs
L3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51
eCIKIyBQUkVGRVJSRURfUFJPVklERVJfb3BrZz1vcGtnClBSRUZFUlJFRF9QUk9WSURFUl9vcGtn
PSJvcGtnIgojIFRVTkVfQVNBUkdTPSAke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJF
UyIsICJteDMyIiwgIi14MzIiLCAiIiwgZCl9ClRVTkVfQVNBUkdTPSIiCiMgRklMRT0vaG9tZS9t
aXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi9jb25mL2JibGF5ZXJzLmNvbmYK
RklMRT0iL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvY29uZi9i
YmxheWVycy5jb25mIgojIEVYVEVORFBLR0VWRVI9JHtAWycnLCcke1BLR0VceDdkOiddW2QuZ2V0
VmFyKCdQS0dFJywxKS5zdHJpcCgpICE9ICcnXX0KIyBsaWJkaXJfbmF0aXZlPSR7cHJlZml4X25h
dGl2ZX0vbGliCmxpYmRpcl9uYXRpdmU9Ii91c3IvbGliIgojIEFTTkVFREVEX3BuLW9wZW5vYmV4
PQojIFNTVEFURV9FWFRSQVBBVEhXSUxEQ0FSRD0KIyBYU0VSVkVSX0lBMzJfSTk2NT14Zjg2LXZp
ZGVvLWludGVsICAgICAgICAgICAgbWVzYS1kcmktZHJpdmVyLWk5NjUgICAgICAgICAgICAKWFNF
UlZFUl9JQTMyX0k5NjU9InhmODYtdmlkZW8taW50ZWwgICAgICAgICAgICBtZXNhLWRyaS1kcml2
ZXItaTk2NSIKIyBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9uYXRpdmVzZGstbGliYz1uYXRp
dmVzZGstZWdsaWJjClBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay1saWJjPSJu
YXRpdmVzZGstZWdsaWJjIgojIFBSRUZFUlJFRF9QUk9WSURFUl9kYnVzLWdsaWI9ZGJ1cy1nbGli
ClBSRUZFUlJFRF9QUk9WSURFUl9kYnVzLWdsaWI9ImRidXMtZ2xpYiIKIyBGSUxFU18ke1BOfS1k
b2M9JHtkb2NkaXJ9ICR7bWFuZGlyfSAke2luZm9kaXJ9ICR7ZGF0YWRpcn0vZ3RrLWRvYyAke2Rh
dGFkaXJ9L2dub21lL2hlbHAKRklMRVNfYmJsYXllcnMtZG9jPSIvdXNyL3NoYXJlL2RvYyAvdXNy
L3NoYXJlL21hbiAvdXNyL3NoYXJlL2luZm8gL3Vzci9zaGFyZS9ndGstZG9jIC91c3Ivc2hhcmUv
Z25vbWUvaGVscCIKIyBleGVjX3ByZWZpeD0vdXNyCmV4cG9ydCBleGVjX3ByZWZpeD0iL3VzciIK
IyBiaW5kaXJfY3Jvc3NzY3JpcHRzPSR7YmluZGlyfS9jcm9zc3NjcmlwdHMKYmluZGlyX2Nyb3Nz
c2NyaXB0cz0iL3Vzci9iaW4vY3Jvc3NzY3JpcHRzIgojIEJCRklMRV9QUklPUklUWV9pbnRlbD01
CkJCRklMRV9QUklPUklUWV9pbnRlbD0iNSIKIyBQUklPUklUWT1vcHRpb25hbApQUklPUklUWT0i
b3B0aW9uYWwiCiMgUFJFRkVSUkVEX1ZFUlNJT05fYmludXRpbHM9JHtCSU5VVkVSU0lPTn0KUFJF
RkVSUkVEX1ZFUlNJT05fYmludXRpbHM9IjIuMjIiCiMgUEFSQUxMRUxfTUFLRUlOU1Q9JHtQQVJB
TExFTF9NQUtFfQpQQVJBTExFTF9NQUtFSU5TVD0iLWogMiIKIyBTRVBQVUtVX1FVRVJZPU5vbmUK
IyBCQl9TRVRTQ0VORV9WRVJJRllfRlVOQ1RJT049c3lzcm9vdF9jaGVja2hhc2hlcwpCQl9TRVRT
Q0VORV9WRVJJRllfRlVOQ1RJT049InN5c3Jvb3RfY2hlY2toYXNoZXMiCiMgVVNSQklOUEFUSF9j
bGFzcy1uYXRpdmU9L3Vzci9iaW4KVVNSQklOUEFUSF9jbGFzcy1uYXRpdmU9Ii91c3IvYmluIgoj
IFNFQ1RJT049YmFzZQpTRUNUSU9OPSJiYXNlIgojIFNSQ19ESVNUUklCVVRFX0xJQ0VOU0VTPSBB
QUwgQWRvYmUgQUZMLTEuMiBBRkwtMi4wIEFGTC0yLjEgQUZMLTMuMCBBR1BMLTMuMCBBTlRMUi1Q
RCBBcGFjaGUtMS4wIEFwYWNoZS0xLjEgQXBhY2hlLTIuMCBBUEwtMS4wIEFQU0wtMS4wIEFQU0wt
MS4xIEFQU0wtMS4yIEFQU0wtMi4wIEFydGlzdGljLTEuMCBBcnRpc3RpYy0yLjAgQml0c3RyZWFt
VmVyYSBCU0QgQlNELTItQ2xhdXNlIEJTRC0zLUNsYXVzZSBCU0QtNC1DbGF1c2UgQlNMLTEuMCBD
QVRPU0wtMS4xIENDMC0xLjAgQ0MtQlktMS4wIENDLUJZLTIuMCBDQy1CWS0yLjUgQ0MtQlktMy4w
IENDLUJZLU5DLTEuMCBDQy1CWS1OQy0yLjAgQ0MtQlktTkMtMi41IENDLUJZLU5DLTMuMCBDQy1C
WS1OQy1ORC0xLjAgQ0MtQlktTkMtTkQtMi4wIENDLUJZLU5DLU5ELTIuNSBDQy1CWS1OQy1ORC0z
LjAgQ0MtQlktTkMtU0EtMS4wIENDLUJZLU5DLVNBLTIuMCBDQy1CWS1OQy1TQS0yLjUgQ0MtQlkt
TkMtU0EtMy4wIENDLUJZLU5ELTEuMCBDQy1CWS1ORC0yLjAgQ0MtQlktTkQtMi41IENDLUJZLU5E
LTMuMCBDQy1CWS1TQS0xLjAgQ0MtQlktU0EtMi4wIENDLUJZLVNBLTIuNSBDQy1CWS1TQS0zLjAg
Q0RETC0xLjAgQ0VDSUxMLTEuMCBDRUNJTEwtMi4wIENFQ0lMTC1CIENFQ0lMTC1DIENsQXJ0aXN0
aWMgQ1BBTC0xLjAgQ1BMLTEuMCBDVUEtT1BMLTEuMCBEU1NTTCBFQ0wtMS4wIEVDTC0yLjAgZUNv
cy0yLjAgRURMLTEuMCBFRkwtMS4wIEVGTC0yLjAgRWxmdXRpbHMtRXhjZXB0aW9uIEVudGVzc2Eg
RVBMLTEuMCBFcmxQTC0xLjEgRVVEYXRhZ3JpZCBFVVBMLTEuMCBFVVBMLTEuMSBGYWlyIEZyYW1l
d29yeC0xLjAgRnJlZVR5cGUgR0ZETC0xLjEgR0ZETC0xLjIgR0ZETC0xLjMgR1BMLTEuMCBHUEwt
Mi4wIEdQTC0yLjAtd2l0aC1hdXRvY29uZi1leGNlcHRpb24gR1BMLTIuMC13aXRoLWNsYXNzcGF0
aC1leGNlcHRpb24gR1BMLTIuMC13aXRoLWZvbnQtZXhjZXB0aW9uIEdQTC0yLjAtd2l0aC1HQ0Mt
ZXhjZXB0aW9uIEdQTC0yLXdpdGgtYmlzb24tZXhjZXB0aW9uIEdQTC0zLjAgR1BMLTMuMC13aXRo
LWF1dG9jb25mLWV4Y2VwdGlvbiBHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiBnU09BUC0xIGdT
T0FQLTEuM2IgSFBORCBJUEEgSVBMLTEuMCBJU0MgTEdQTC0yLjAgTEdQTC0yLjEgTEdQTC0zLjAg
TGlicG5nIExQTC0xLjAyIExQUEwtMS4wIExQUEwtMS4xIExQUEwtMS4yIExQUEwtMS4zYyBNaXJP
UyBNSVQgTW90b3NvdG8gTVBMLTEuMCBNUEwtMS4xIE1TLVBMIE1TLVJMIE11bHRpY3MgTkFTQS0x
LjMgTmF1bWFuIE5DU0EgTkdQTCBOb2tpYSBOUE9TTC0zLjAgTlRQIE9BU0lTIE9DTEMtMi4wIE9E
YkwtMS4wIE9GTC0xLjEgT0dUU0wgT0xEQVAtMi44IE9wZW5TU0wgT1NMLTEuMCBPU0wtMi4wIE9T
TC0zLjAgUEQgUEhQLTMuMCBQb3N0Z3JlU1FMIFByb3ByaWV0YXJ5IFB5dGhvbi0yLjAgUVBMLTEu
MCBSSGVDb3MtMSBSSGVDb3MtMS4xIFJQTC0xLjUgUlBTTC0xLjAgUlNDUEwgUnVieSBTQVgtUEQg
U2ltcGxlLTIuMCBTbGVlcHljYXQgU1BMLTEuMCBTdWdhckNSTS0xIFN1Z2FyQ1JNLTEuMS4zIFVD
QiBWU0wtMS4wIFczQyBXYXRjb20tMS4wIFdYd2luZG93cyBYRnJlZTg2LTEuMSBYbmV0IFlQTC0x
LjEgWmltYnJhLTEuMyBabGliIFpQTC0xLjEgWlBMLTIuMCBaUEwtMi4xClNSQ19ESVNUUklCVVRF
X0xJQ0VOU0VTPSJBQUwgQWRvYmUgQUZMLTEuMiBBRkwtMi4wIEFGTC0yLjEgQUZMLTMuMCBBR1BM
LTMuMCBBTlRMUi1QRCBBcGFjaGUtMS4wIEFwYWNoZS0xLjEgQXBhY2hlLTIuMCBBUEwtMS4wIEFQ
U0wtMS4wIEFQU0wtMS4xIEFQU0wtMS4yIEFQU0wtMi4wIEFydGlzdGljLTEuMCBBcnRpc3RpYy0y
LjAgQml0c3RyZWFtVmVyYSBCU0QgQlNELTItQ2xhdXNlIEJTRC0zLUNsYXVzZSBCU0QtNC1DbGF1
c2UgQlNMLTEuMCBDQVRPU0wtMS4xIENDMC0xLjAgQ0MtQlktMS4wIENDLUJZLTIuMCBDQy1CWS0y
LjUgQ0MtQlktMy4wIENDLUJZLU5DLTEuMCBDQy1CWS1OQy0yLjAgQ0MtQlktTkMtMi41IENDLUJZ
LU5DLTMuMCBDQy1CWS1OQy1ORC0xLjAgQ0MtQlktTkMtTkQtMi4wIENDLUJZLU5DLU5ELTIuNSBD
Qy1CWS1OQy1ORC0zLjAgQ0MtQlktTkMtU0EtMS4wIENDLUJZLU5DLVNBLTIuMCBDQy1CWS1OQy1T
QS0yLjUgQ0MtQlktTkMtU0EtMy4wIENDLUJZLU5ELTEuMCBDQy1CWS1ORC0yLjAgQ0MtQlktTkQt
Mi41IENDLUJZLU5ELTMuMCBDQy1CWS1TQS0xLjAgQ0MtQlktU0EtMi4wIENDLUJZLVNBLTIuNSBD
Qy1CWS1TQS0zLjAgQ0RETC0xLjAgQ0VDSUxMLTEuMCBDRUNJTEwtMi4wIENFQ0lMTC1CIENFQ0lM
TC1DIENsQXJ0aXN0aWMgQ1BBTC0xLjAgQ1BMLTEuMCBDVUEtT1BMLTEuMCBEU1NTTCBFQ0wtMS4w
IEVDTC0yLjAgZUNvcy0yLjAgRURMLTEuMCBFRkwtMS4wIEVGTC0yLjAgRWxmdXRpbHMtRXhjZXB0
aW9uIEVudGVzc2EgRVBMLTEuMCBFcmxQTC0xLjEgRVVEYXRhZ3JpZCBFVVBMLTEuMCBFVVBMLTEu
MSBGYWlyIEZyYW1ld29yeC0xLjAgRnJlZVR5cGUgR0ZETC0xLjEgR0ZETC0xLjIgR0ZETC0xLjMg
R1BMLTEuMCBHUEwtMi4wIEdQTC0yLjAtd2l0aC1hdXRvY29uZi1leGNlcHRpb24gR1BMLTIuMC13
aXRoLWNsYXNzcGF0aC1leGNlcHRpb24gR1BMLTIuMC13aXRoLWZvbnQtZXhjZXB0aW9uIEdQTC0y
LjAtd2l0aC1HQ0MtZXhjZXB0aW9uIEdQTC0yLXdpdGgtYmlzb24tZXhjZXB0aW9uIEdQTC0zLjAg
R1BMLTMuMC13aXRoLWF1dG9jb25mLWV4Y2VwdGlvbiBHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlv
biBnU09BUC0xIGdTT0FQLTEuM2IgSFBORCBJUEEgSVBMLTEuMCBJU0MgTEdQTC0yLjAgTEdQTC0y
LjEgTEdQTC0zLjAgTGlicG5nIExQTC0xLjAyIExQUEwtMS4wIExQUEwtMS4xIExQUEwtMS4yIExQ
UEwtMS4zYyBNaXJPUyBNSVQgTW90b3NvdG8gTVBMLTEuMCBNUEwtMS4xIE1TLVBMIE1TLVJMIE11
bHRpY3MgTkFTQS0xLjMgTmF1bWFuIE5DU0EgTkdQTCBOb2tpYSBOUE9TTC0zLjAgTlRQIE9BU0lT
IE9DTEMtMi4wIE9EYkwtMS4wIE9GTC0xLjEgT0dUU0wgT0xEQVAtMi44IE9wZW5TU0wgT1NMLTEu
MCBPU0wtMi4wIE9TTC0zLjAgUEQgUEhQLTMuMCBQb3N0Z3JlU1FMIFByb3ByaWV0YXJ5IFB5dGhv
bi0yLjAgUVBMLTEuMCBSSGVDb3MtMSBSSGVDb3MtMS4xIFJQTC0xLjUgUlBTTC0xLjAgUlNDUEwg
UnVieSBTQVgtUEQgU2ltcGxlLTIuMCBTbGVlcHljYXQgU1BMLTEuMCBTdWdhckNSTS0xIFN1Z2Fy
Q1JNLTEuMS4zIFVDQiBWU0wtMS4wIFczQyBXYXRjb20tMS4wIFdYd2luZG93cyBYRnJlZTg2LTEu
MSBYbmV0IFlQTC0xLjEgWmltYnJhLTEuMyBabGliIFpQTC0xLjEgWlBMLTIuMCBaUEwtMi4xIgoj
IFBBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3JlMi02NC14MzI9JHtQQUNLQUdFX0VYVFJBX0FS
Q0hTX3R1bmUteDg2LTY0LXgzMn0gY29yZTJfNjRfeDMyClBBQ0tBR0VfRVhUUkFfQVJDSFNfdHVu
ZS1jb3JlMi02NC14MzI9Ing4Nl82NF94MzIgY29yZTJfNjRfeDMyIgojIFNES19DQ19BUkNIPSR7
QlVJTERfQ0NfQVJDSH0KIyBNQUlOVEFJTkVSPVBva3kgPHBva3lAeW9jdG9wcm9qZWN0Lm9yZz4K
TUFJTlRBSU5FUj0iUG9reSA8cG9reUB5b2N0b3Byb2plY3Qub3JnPiIKIyBTREtQQVRIPS9vcHQv
JHtESVNUUk99LyR7U0RLX1ZFUlNJT059ClNES1BBVEg9Ii9vcHQvcG9reS8xLjMiCiMgR1JPVVBf
bG9jYWxlPU5vbmUKIyBCVUlMRF9DQz0ke0NDQUNIRX0ke0JVSUxEX1BSRUZJWH1nY2MgJHtCVUlM
RF9DQ19BUkNIfQpleHBvcnQgQlVJTERfQ0M9ImdjYyIKIyBMSUJDT1ZFUlJJREU9OmxpYmMtZ2xp
YmMKTElCQ09WRVJSSURFPSI6bGliYy1nbGliYyIKIyBCVUlMRF9MREZMQUdTPS1MJHtTVEFHSU5H
X0xJQkRJUl9OQVRJVkV9IC1MJHtTVEFHSU5HX0JBU0VfTElCRElSX05BVElWRX0gLVdsLC1ycGF0
aC1saW5rLCR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSAtV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5H
X0JBU0VfTElCRElSX05BVElWRX0gLVdsLC1ycGF0aCwke1NUQUdJTkdfTElCRElSX05BVElWRX0g
LVdsLC1ycGF0aCwke1NUQUdJTkdfQkFTRV9MSUJESVJfTkFUSVZFfSAtV2wsLU8xCmV4cG9ydCBC
VUlMRF9MREZMQUdTPSItTC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1m
cmkyL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYiAtTC9ob21lL21pc2hhbC95b2N0
by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvbGli
IC1XbCwtcnBhdGgtbGluaywvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQt
ZnJpMi90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWIgLVdsLC1ycGF0aC1saW5rLC9o
b21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC9zeXNyb290cy94
ODZfNjQtbGludXgvbGliIC1XbCwtcnBhdGgsL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnkt
OC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliIC1XbCwtcnBh
dGgsL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jv
b3RzL3g4Nl82NC1saW51eC9saWIgLVdsLC1PMSIKIyBTU1RBVEVfUEtHTkFNRT0ke1NTVEFURV9F
WFRSQVBBVEh9JHtAZ2VuZXJhdGVfc3N0YXRlZm4oZC5nZXRWYXIoJ1NTVEFURV9QS0dTUEVDJywg
VHJ1ZSksIGQuZ2V0VmFyKCdCQl9UQVNLSEFTSCcsIFRydWUpLCBkKX0KU1NUQVRFX1BLR05BTUU9
IklOL3NzdGF0ZS1iYmxheWVycy1jb3JlMi1wb2t5LWxpbnV4LTEuMC1yMC1jb3JlMi0yLUlOVkFM
SUQiCiMgU0VQUFVLVV9DT01QT05FTlQ9Tm9uZQojIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19E
SVJfSE9TVH0ke2xpYmRpcn0KU1RBR0lOR19MSUJESVI9Ii9ob21lL21pc2hhbC95b2N0by9wb2t5
LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC9zeXNyb290cy9mcmkyLW5vZW1nZC91c3IvbGliIgoj
IFRBUkdFVF9BUkNIPSR7VFVORV9BUkNIfQp1bnNldCBUQVJHRVRfQVJDSAojIEhPU1RfTk9OU1lT
Vj1Ob25lCiMgRkVUQ0hDTURfY3ZzPS91c3IvYmluL2VudiBjdnMKRkVUQ0hDTURfY3ZzPSIvdXNy
L2Jpbi9lbnYgY3ZzIgojIEVYVFJBX0lNQUdFX0ZFQVRVUkVTPWRlYnVnLXR3ZWFrcwpFWFRSQV9J
TUFHRV9GRUFUVVJFUz0iZGVidWctdHdlYWtzIgojIEFSPSR7SE9TVF9QUkVGSVh9YXIKZXhwb3J0
IEFSPSJpNTg2LXBva3ktbGludXgtYXIiCiMgUEtHV1JJVEVESVJTUlBNPSR7REVQTE9ZX0RJUn0v
c291cmNlcy9kZXBsb3ktc3JwbQpQS0dXUklURURJUlNSUE09Ii9ob21lL21pc2hhbC95b2N0by9w
b2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC9kZXBsb3kvc291cmNlcy9kZXBsb3ktc3JwbSIK
IyBCQklOQ0xVREVMT0dTX0xJTkVTPU5vbmUKIyBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9u
YXRpdmVzZGstJHtTREtfUFJFRklYfWxpYmMtaW5pdGlhbD1uYXRpdmVzZGstJHtUQ0xJQkN9LWlu
aXRpYWwKUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbmF0aXZlc2RrLXg4Nl82NC1wb2t5c2Rr
LWxpbnV4LWxpYmMtaW5pdGlhbD0ibmF0aXZlc2RrLWVnbGliYy1pbml0aWFsIgojIExJTlVYTElC
Q1ZFUlNJT049My40LjMKTElOVVhMSUJDVkVSU0lPTj0iMy40LjMiCiMgUFJFRkVSUkVEX1BST1ZJ
REVSX3ZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYy1pbnRlcm1lZGlhdGU9Z2NjLWNyb3NzLWlu
dGVybWVkaWF0ZQpQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9pNTg2LXBva3ktbGludXgtZ2Nj
LWludGVybWVkaWF0ZT0iZ2NjLWNyb3NzLWludGVybWVkaWF0ZSIKIyBMSUJDRVhURU5TSU9OPSR7
QFsnJywgJy1nbnUnXVsoZC5nZXRWYXIoJ0FCSUVYVEVOU0lPTicsIFRydWUpIG9yICcnKSAhPSAn
J119CiMgUFJFRkVSUkVEX1BST1ZJREVSX2xpYmdjYz1saWJnY2MKUFJFRkVSUkVEX1BST1ZJREVS
X2xpYmdjYz0ibGliZ2NjIgojIEdFTlRPT19NSVJST1I9aHR0cDovL2Rpc3RmaWxlcy5nZW50b28u
b3JnL2Rpc3RmaWxlcwpHRU5UT09fTUlSUk9SPSJodHRwOi8vZGlzdGZpbGVzLmdlbnRvby5vcmcv
ZGlzdGZpbGVzIgojIENPX0RJUj0ke0RMX0RJUn0KQ09fRElSPSIvaG9tZS9taXNoYWwveW9jdG8v
cG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi9kb3dubG9hZHMiCiMgTVVMVElNQUNIX1RBUkdFVF9T
WVM9JHtQQUNLQUdFX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU30KTVVMVElNQUNI
X1RBUkdFVF9TWVM9ImNvcmUyLXBva3ktbGludXgiCiMgUFJFRkVSUkVEX1ZFUlNJT05fbGliZXJh
dGlvbi1mb250cz0xLjA0ClBSRUZFUlJFRF9WRVJTSU9OX2xpYmVyYXRpb24tZm9udHM9IjEuMDQi
CiMgQ0NBQ0hFX0RJUj0ke0Bvcy5nZXRlbnYoJ0hPTUUnKX0KZXhwb3J0IENDQUNIRV9ESVI9Ii9o
b21lL21pc2hhbCIKIyBRVUlMVFJDRklMRT0ke1NUQUdJTkdfRVRDRElSX05BVElWRX0vcXVpbHRy
YwpRVUlMVFJDRklMRT0iL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZy
aTIvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC9ldGMvcXVpbHRyYyIKIyBCQkxBWUVSUz0gL2hv
bWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEgL2hvbWUvbWlzaGFsL3lvY3RvL3Bv
a3ktZGFubnktOC4wL21ldGEteW9jdG8gL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4w
L21ldGEteW9jdG8tYnNwIC9ob21lL21pc2hhbC95b2N0by9tZXRhLWludGVsIC9ob21lL21pc2hh
bC95b2N0by9tZXRhLWludGVsL21ldGEtZnJpMiAKQkJMQVlFUlM9Ii9ob21lL21pc2hhbC95b2N0
by9wb2t5LWRhbm55LTguMC9tZXRhIC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9t
ZXRhLXlvY3RvIC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9tZXRhLXlvY3RvLWJz
cCAvaG9tZS9taXNoYWwveW9jdG8vbWV0YS1pbnRlbCAvaG9tZS9taXNoYWwveW9jdG8vbWV0YS1p
bnRlbC9tZXRhLWZyaTIiCiMgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbmF0aXZlc2RrLWxp
YmludGw9bmF0aXZlc2RrLWVnbGliYwpQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9uYXRpdmVz
ZGstbGliaW50bD0ibmF0aXZlc2RrLWVnbGliYyIKIyBTRUNUSU9OXyR7UE59LXN0YXRpY2Rldj1k
ZXZlbApTRUNUSU9OX2JibGF5ZXJzLXN0YXRpY2Rldj0iZGV2ZWwiCiMgWDg2QVJDSDY0PXg4Nl82
NApYODZBUkNINjQ9Ing4Nl82NCIKIyBCT09UU1RSQVBfRVhUUkFfUkRFUEVORFM9CiMgQlVJTERf
TEQ9JHtCVUlMRF9QUkVGSVh9bGQgJHtCVUlMRF9MRF9BUkNIfQpleHBvcnQgQlVJTERfTEQ9Imxk
IgojIFRVTkVfTERBUkdTPSAke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJt
eDMyIiwgIi1tIGVsZjMyX3g4Nl82NCIsICIiLCBkKX0KVFVORV9MREFSR1M9IiIKIyBiYXNlbGli
PSR7QkFTRUxJQn0KYmFzZWxpYj0ibGliIgojIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19ESVJf
SE9TVH0ke2luY2x1ZGVkaXJ9ClNUQUdJTkdfSU5DRElSPSIvaG9tZS9taXNoYWwveW9jdG8vcG9r
eS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvc3lzcm9vdHMvZnJpMi1ub2VtZ2QvdXNyL2luY2x1
ZGUiCiMgUFJFRkVSUkVEX1ZFUlNJT05fZ2NjLWNyb3NzLWNhbmFkaWFuLSR7VFJBTlNMQVRFRF9U
QVJHRVRfQVJDSH09JHtHQ0NWRVJTSU9OfQpQUkVGRVJSRURfVkVSU0lPTl9nY2MtY3Jvc3MtY2Fu
YWRpYW4taTU4Nj0iNC43JSIKIyBQUkVGRVJSRURfUFJPVklERVJfbmF0aXZlc2RrLWxpYmdjYz1u
YXRpdmVzZGstbGliZ2NjClBSRUZFUlJFRF9QUk9WSURFUl9uYXRpdmVzZGstbGliZ2NjPSJuYXRp
dmVzZGstbGliZ2NjIgojIFFBREVQRU5EU192aXJ0Y2xhc3MtbmF0aXZlPQojIFBSRUZFUlJFRF9Q
Uk9WSURFUl9uYXRpdmVzZGstbGludXgtbGliYy1oZWFkZXJzPW5hdGl2ZXNkay1saW51eC1saWJj
LWhlYWRlcnMKUFJFRkVSUkVEX1BST1ZJREVSX25hdGl2ZXNkay1saW51eC1saWJjLWhlYWRlcnM9
Im5hdGl2ZXNkay1saW51eC1saWJjLWhlYWRlcnMiCiMgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1
YWwvJHtUQVJHRVRfUFJFRklYfWcrKz1nY2MtY3Jvc3MKUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1
YWwvaTU4Ni1wb2t5LWxpbnV4LWcrKz0iZ2NjLWNyb3NzIgojIFNUQUdJTkdfQkFTRUxJQkRJUj0k
e1NUQUdJTkdfRElSX0hPU1R9JHtiYXNlX2xpYmRpcn0KU1RBR0lOR19CQVNFTElCRElSPSIvaG9t
ZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvc3lzcm9vdHMvZnJp
Mi1ub2VtZ2QvbGliIgojIFBSRUZFUlJFRF9WRVJTSU9OX2djYy1jcm9zc3Nkay1pbnRlcm1lZGlh
dGU9JHtTREtHQ0NWRVJTSU9OfQpQUkVGRVJSRURfVkVSU0lPTl9nY2MtY3Jvc3NzZGstaW50ZXJt
ZWRpYXRlPSI0LjclIgojIExPR19ESVI9JHtUTVBESVJ9L2xvZwpMT0dfRElSPSIvaG9tZS9taXNo
YWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvbG9nIgojIFNUQUdJTkdfRVhF
Q1BSRUZJWERJUj0ke1NUQUdJTkdfRElSX0hPU1R9JHtleGVjX3ByZWZpeH0KU1RBR0lOR19FWEVD
UFJFRklYRElSPSIvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90
bXAvc3lzcm9vdHMvZnJpMi1ub2VtZ2QvdXNyIgojIFBBVENIREVQRU5ERU5DWT0ke1BBVENIVE9P
TH0tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QKUEFUQ0hERVBFTkRFTkNZPSJxdWlsdC1uYXRp
dmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKIyBQUkVGRVJSRURfVkVSU0lPTl9iaW51dGlscy1jcm9z
cy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9PSR7QklOVVZFUlNJT059ClBSRUZF
UlJFRF9WRVJTSU9OX2JpbnV0aWxzLWNyb3NzLWNhbmFkaWFuLWk1ODY9IjIuMjIiCiMgQlVJTERT
REtfQ1BQRkxBR1M9LWlzeXN0ZW0ke1NUQUdJTkdfSU5DRElSfQpCVUlMRFNES19DUFBGTEFHUz0i
LWlzeXN0ZW0vaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAv
c3lzcm9vdHMvZnJpMi1ub2VtZ2QvdXNyL2luY2x1ZGUiCiMgRVhUUkFPUEtHQ09ORklHPXBva3kt
ZmVlZC1jb25maWctb3BrZwpFWFRSQU9QS0dDT05GSUc9InBva3ktZmVlZC1jb25maWctb3BrZyIK
IyBPRUlOQ0xVREVMT0dTPXllcwpPRUlOQ0xVREVMT0dTPSJ5ZXMiCiMgQVZBSUxUVU5FUz0geDg2
IHg4Ni02NCB4ODYtNjQteDMyIGk1ODYgY29yZTIgY29yZTItNjQgY29yZTItNjQteDMyCkFWQUlM
VFVORVM9Ing4NiB4ODYtNjQgeDg2LTY0LXgzMiBpNTg2IGNvcmUyIGNvcmUyLTY0IGNvcmUyLTY0
LXgzMiIKIyBCQl9TSUdOQVRVUkVfRVhDTFVERV9GTEFHUz1kb2MgZGVmYXVsdHZhbCBfYXBwZW5k
IF9wcmVwZW5kIGRlcHMgZGVwZW5kcyBsb2NrZmlsZXMgdHlwZSB2YXJkZXBzZXhjbHVkZSB2YXJk
ZXBzIHZhcmRlcHZhbHVlIGZpbGUtY2hlY2tzdW1zIHB5dGhvbiBmdW5jIHRhc2sgZXhwb3J0IHVu
ZXhwb3J0IG5vZXhlYyBub3N0YW1wIGRpcnMgY2xlYW5kaXJzIHNzdGF0ZS1sb2NrZmlsZS1zaGFy
ZWQgcHJlZnVuY3MgcG9zdGZ1bmNzIGV4cG9ydF9mdW5jIGRlcHRhc2sgcmRlcHRhc2sgcmVjcmRl
cHRhc2sgbm9kZXBycmVjcyBzdGFtcC1iYXNlIHN0YW1wLWV4dHJhLWluZm8KQkJfU0lHTkFUVVJF
X0VYQ0xVREVfRkxBR1M9ImRvYyBkZWZhdWx0dmFsIF9hcHBlbmQgX3ByZXBlbmQgZGVwcyBkZXBl
bmRzIGxvY2tmaWxlcyB0eXBlIHZhcmRlcHNleGNsdWRlIHZhcmRlcHMgdmFyZGVwdmFsdWUgZmls
ZS1jaGVja3N1bXMgcHl0aG9uIGZ1bmMgdGFzayBleHBvcnQgdW5leHBvcnQgbm9leGVjIG5vc3Rh
bXAgZGlycyBjbGVhbmRpcnMgc3N0YXRlLWxvY2tmaWxlLXNoYXJlZCBwcmVmdW5jcyBwb3N0ZnVu
Y3MgZXhwb3J0X2Z1bmMgZGVwdGFzayByZGVwdGFzayByZWNyZGVwdGFzayBub2RlcHJyZWNzIHN0
YW1wLWJhc2Ugc3RhbXAtZXh0cmEtaW5mbyIKIyBUVU5FQUJJPU5vbmUKIyBTRVBQVUtVX0FVVE9C
VUlMRD1Ob25lCiMgRV9NSVJST1I9aHR0cDovL2Rvd25sb2FkLmVubGlnaHRlbm1lbnQub3JnL3Jl
bGVhc2VzCkVfTUlSUk9SPSJodHRwOi8vZG93bmxvYWQuZW5saWdodGVubWVudC5vcmcvcmVsZWFz
ZXMiCiMgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvZ2V0dGV4dD1nZXR0ZXh0ClBSRUZFUlJF
RF9QUk9WSURFUl92aXJ0dWFsL2dldHRleHQ9ImdldHRleHQiCiMgU0RLX0FTX0FSQ0g9JHtCVUlM
RF9BU19BUkNIfQojIEJBU0VfTElCX3R1bmUtY29yZTI9bGliCkJBU0VfTElCX3R1bmUtY29yZTI9
ImxpYiIKIyBHUEVfRVhUUkFfU1ZOPXN2bjovL3Byb2plY3RzLmxpbnV4dG9nby5vcmcvc3ZuL2dw
ZS90cnVuay9leHRyYTttb2R1bGU9JHtQTn0KR1BFX0VYVFJBX1NWTj0ic3ZuOi8vcHJvamVjdHMu
bGludXh0b2dvLm9yZy9zdm4vZ3BlL3RydW5rL2V4dHJhO21vZHVsZT1iYmxheWVycyIKIyBvbGRp
bmNsdWRlZGlyPSR7ZXhlY19wcmVmaXh9L2luY2x1ZGUKZXhwb3J0IG9sZGluY2x1ZGVkaXI9Ii91
c3IvaW5jbHVkZSIKIyBUX3Rhc2stY2xlYW49JHtMT0dfRElSfS9jbGVhbmxvZ3MvJHtQTn0KVF90
YXNrLWNsZWFuPSIvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90
bXAvbG9nL2NsZWFubG9ncy9iYmxheWVycyIKIyBJTklUUkFNRlNfRlNUWVBFUz1jcGlvLmd6CklO
SVRSQU1GU19GU1RZUEVTPSJjcGlvLmd6IgojIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tl
cm5lbD1saW51eC15b2N0bwpQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWw9ImxpbnV4
LXlvY3RvIgojIEVYVFJBU1NUQVRFTUFQUz0gZG9fZGVwbG95OmRlcGxveQpFWFRSQVNTVEFURU1B
UFM9ImRvX2RlcGxveTpkZXBsb3kiCiMgQ1BVX0ZFQVRVUkVTPQojIFBTRVVET19CVUlMRD0wClBT
RVVET19CVUlMRD0iMCIKIyBUVU5FX0ZFQVRVUkVTX3R1bmUtY29yZTItNjQ9JHtUVU5FX0ZFQVRV
UkVTX3R1bmUteDg2LTY0fSBjb3JlMgpUVU5FX0ZFQVRVUkVTX3R1bmUtY29yZTItNjQ9Im02NCBj
b3JlMiIKIyBDQ0xEPSR7Q0N9CmV4cG9ydCBDQ0xEPSJpNTg2LXBva3ktbGludXgtZ2NjICAtbTMy
ICAgIC1tYXJjaD1jb3JlMiAtbXNzZTMgLW10dW5lPWdlbmVyaWMgLW1mcG1hdGg9c3NlIC0tc3lz
cm9vdD0vaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvc3lz
cm9vdHMvZnJpMi1ub2VtZ2QiCiMgVElNRT0xNDE0MTkKVElNRT0iMTQxNDE5IgojIGxvY2Fsc3Rh
dGVkaXJfbmF0aXZlc2RrPS92YXIKbG9jYWxzdGF0ZWRpcl9uYXRpdmVzZGs9Ii92YXIiCiMgUEFD
S0FHRV9CRUZPUkVfUE49CiMgUFJFRkVSUkVEX1ZFUlNJT05fZ2NjPSR7R0NDVkVSU0lPTn0KUFJF
RkVSUkVEX1ZFUlNJT05fZ2NjPSI0LjclIgojIFNFTEVDVEVEX09QVElNSVpBVElPTj0ke0BkLmdl
dFZhcihbJ0ZVTExfT1BUSU1JWkFUSU9OJywgJ0RFQlVHX09QVElNSVpBVElPTiddW2QuZ2V0VmFy
KCdERUJVR19CVUlMRCcsIFRydWUpID09ICcxJ10sIFRydWUpfQpTRUxFQ1RFRF9PUFRJTUlaQVRJ
T049Ii1PMiAtcGlwZSAtZyAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMiCiMgR0lUX0NP
TkZJR19QQVRIPSR7U1RBR0lOR19ESVJfTkFUSVZFfS9ldGMKR0lUX0NPTkZJR19QQVRIPSIvaG9t
ZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvc3lzcm9vdHMveDg2
XzY0LWxpbnV4L2V0YyIKIyBTRVBQVUtVX1VTRVI9Tm9uZQojIEZFRURfREVQTE9ZRElSX0JBU0Vf
VVJJPU5vbmUKIyBQUkVQUk9DRVNTX1JFTE9DQVRFX0RJUlM9CiMgREVCSUFOX05BTUVTPTEKREVC
SUFOX05BTUVTPSIxIgojIEVYVFJBX0lNQUdFREVQRU5EUz0KIyBQQUNLQUdFX0VYVFJBX0FSQ0hT
X3R1bmUteDg2LTY0LXgzMj0ke1RVTkVfUEtHQVJDSF90dW5lLXg4Ni02NC14MzJ9ClBBQ0tBR0Vf
RVhUUkFfQVJDSFNfdHVuZS14ODYtNjQteDMyPSJ4ODZfNjRfeDMyIgojIExJTUlUX0JVSUxUX0xP
Q0FMRVM9UE9TSVggZW5fVVMgZW5fR0IKTElNSVRfQlVJTFRfTE9DQUxFUz0iUE9TSVggZW5fVVMg
ZW5fR0IiCiMgUEFDS0FHRUlOREVYREVQUz0gcnBtLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290
IGNyZWF0ZXJlcG8tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QKUEFDS0FHRUlOREVYREVQUz0i
cnBtLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IGNyZWF0ZXJlcG8tbmF0aXZlOmRvX3BvcHVs
YXRlX3N5c3Jvb3QiCiMgTENfQUxMPUMKZXhwb3J0IExDX0FMTD0iQyIKIyBQUkVGRVJSRURfVkVS
U0lPTl9saW51eC15b2N0b19xZW11YXJtPTMuNCUKUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9j
dG9fcWVtdWFybT0iMy40JSIKIyBzeXN0ZW1kX3VuaXRkaXI9JHtiYXNlX2xpYmRpcn0vc3lzdGVt
ZApleHBvcnQgc3lzdGVtZF91bml0ZGlyPSIvbGliL3N5c3RlbWQiCiMgREVTQ1JJUFRJT05fJHtQ
Tn0tZGJnPSR7REVTQ1JJUFRJT059ICBUaGlzIHBhY2thZ2UgY29udGFpbnMgRUxGIHN5bWJvbHMg
YW5kIHJlbGF0ZWQgc291cmNlcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgpERVNDUklQVElPTl9i
YmxheWVycy1kYmc9ImJibGF5ZXJzIHZlcnNpb24gMS4wLXIwICBUaGlzIHBhY2thZ2UgY29udGFp
bnMgRUxGIHN5bWJvbHMgYW5kIHJlbGF0ZWQgc291cmNlcyBmb3IgZGVidWdnaW5nIHB1cnBvc2Vz
LiIKIyBRQV9MT0c9Tm9uZQojIFBTRVVET19MT0NBTFNUQVRFRElSPSR7V09SS0RJUn0vcHNldWRv
LwpQU0VVRE9fTE9DQUxTVEFURURJUj0iL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4w
L2J1aWxkLWZyaTIvdG1wL3dvcmsvY29yZTItcG9reS1saW51eC9iYmxheWVycy0xLjAtcjAvcHNl
dWRvLyIKIyBCVUlMRF9DQ0xEPSR7QlVJTERfUFJFRklYfWdjYyAke0JVSUxEX0NDX0FSQ0h9CmV4
cG9ydCBCVUlMRF9DQ0xEPSJnY2MiCiMgSU1BR0VfTkFNRT0ke0lNQUdFX0JBU0VOQU1FfS0ke01B
Q0hJTkV9LSR7REFURVRJTUV9CklNQUdFX05BTUU9ImJibGF5ZXJzLWZyaTItbm9lbWdkLTIwMTIx
MTI3MTQxNDE5IgojIFNTVEFURV9QQVRIU1BFQz0ke1NTVEFURV9ESVJ9LyR7U1NUQVRFX0VYVFJB
UEFUSFdJTERDQVJEfSovJHtTU1RBVEVfUEtHU1BFQ30KU1NUQVRFX1BBVEhTUEVDPSIvaG9tZS9t
aXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi9zc3RhdGUtY2FjaGUvKi9zc3Rh
dGUtYmJsYXllcnMtY29yZTItcG9reS1saW51eC0xLjAtcjAtY29yZTItMi0iCiMgU0RLX0xEX0FS
Q0g9JHtCVUlMRF9MRF9BUkNIfQojIERFQlVHX0ZMQUdTPS1nIC1mZWxpbWluYXRlLXVudXNlZC1k
ZWJ1Zy10eXBlcwpERUJVR19GTEFHUz0iLWcgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVz
IgojIFNUQUdJTkdfTElCRElSX05BVElWRT0ke1NUQUdJTkdfRElSX05BVElWRX0ke2xpYmRpcl9u
YXRpdmV9ClNUQUdJTkdfTElCRElSX05BVElWRT0iL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFu
bnktOC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliIgojIFFF
TVVfVEFSR0VUUz1hcm0gaTM4NiBtaXBzIG1pcHNlbCBwcGMgeDg2XzY0ClFFTVVfVEFSR0VUUz0i
YXJtIGkzODYgbWlwcyBtaXBzZWwgcHBjIHg4Nl82NCIKIyBTT0xJQlNERVZfZGFyd2luPS5keWxp
YgpTT0xJQlNERVZfZGFyd2luPSIuZHlsaWIiCiMgR1JPVVBfcGFja2FnaW5nPU5vbmUKIyBERVND
UklQVElPTj0ke1NVTU1BUll9CkRFU0NSSVBUSU9OPSJiYmxheWVycyB2ZXJzaW9uIDEuMC1yMCIK
IyBHUk9VUF9mZXRjaGVyPU5vbmUKIyBYU0VSVkVSX0lBMzJfRVhUPXhzZXJ2ZXIteG9yZy1leHRl
bnNpb24tZHJpICAgICAgICAgICAgeHNlcnZlci14b3JnLWV4dGVuc2lvbi1kcmkyICAgICAgICAg
ICAgeHNlcnZlci14b3JnLWV4dGVuc2lvbi1nbHggICAgICAgICAgICB4c2VydmVyLXhvcmctZXh0
ZW5zaW9uLWV4dG1vZCAgICAgICAgICAgIHhzZXJ2ZXIteG9yZy1leHRlbnNpb24tZGJlICAgICAg
ICAgICAgeHNlcnZlci14b3JnLW1vZHVsZS1saWJpbnQxMCAgICAgICAgICAgIApYU0VSVkVSX0lB
MzJfRVhUPSJ4c2VydmVyLXhvcmctZXh0ZW5zaW9uLWRyaSAgICAgICAgICAgIHhzZXJ2ZXIteG9y
Zy1leHRlbnNpb24tZHJpMiAgICAgICAgICAgIHhzZXJ2ZXIteG9yZy1leHRlbnNpb24tZ2x4ICAg
ICAgICAgICAgeHNlcnZlci14b3JnLWV4dGVuc2lvbi1leHRtb2QgICAgICAgICAgICB4c2VydmVy
LXhvcmctZXh0ZW5zaW9uLWRiZSAgICAgICAgICAgIHhzZXJ2ZXIteG9yZy1tb2R1bGUtbGliaW50
MTAiCiMgT1ZFUlJJREVTPSR7VEFSR0VUX09TfToke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9OmJ1
aWxkLSR7QlVJTERfT1N9OnBuLSR7UE59OiR7TUFDSElORU9WRVJSSURFU306JHtESVNUUk9PVkVS
UklERVN9OiR7Q0xBU1NPVkVSUklERX06Zm9yY2V2YXJpYWJsZSR7TElCQ09WRVJSSURFfQpPVkVS
UklERVM9ImxpbnV4Omk1ODY6YnVpbGQtbGludXg6cG4tYmJsYXllcnM6ZnJpMi1ub2VtZ2Q6eDg2
OnBva3k6Y2xhc3MtdGFyZ2V0OmZvcmNldmFyaWFibGU6bGliYy1nbGliYyIKIyBTREtfTkFNRV9Q
UkVGSVg9b2Vjb3JlClNES19OQU1FX1BSRUZJWD0ib2Vjb3JlIgojIEJCUEFUSD0vaG9tZS9taXNo
YWwveW9jdG8vcG9reS1kYW5ueS04LjAvbWV0YS15b2N0bzovaG9tZS9taXNoYWwveW9jdG8vcG9r
eS1kYW5ueS04LjAvYnVpbGQtZnJpMjovaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAv
bWV0YTovaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvbWV0YS15b2N0by1ic3A6L2hv
bWUvbWlzaGFsL3lvY3RvL21ldGEtaW50ZWw6L2hvbWUvbWlzaGFsL3lvY3RvL21ldGEtaW50ZWwv
bWV0YS1mcmkyCkJCUEFUSD0iL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEt
eW9jdG86L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTI6L2hvbWUv
bWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGE6L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3kt
ZGFubnktOC4wL21ldGEteW9jdG8tYnNwOi9ob21lL21pc2hhbC95b2N0by9tZXRhLWludGVsOi9o
b21lL21pc2hhbC95b2N0by9tZXRhLWludGVsL21ldGEtZnJpMiIKIyBTU1RBVEVfU0NBTl9DTUQ9
ZmluZCAke1NTVEFURV9CVUlMRERJUn0gXCggLW5hbWUgIiR7QCJcIiAtbyAtbmFtZSBcIiIuam9p
bihkLmdldFZhcigiU1NUQVRFX1NDQU5fRklMRVMiLCBUcnVlKS5zcGxpdCgpKX0iIFwpIC10eXBl
IGYKU1NUQVRFX1NDQU5fQ01EPSJmaW5kICR7U1NUQVRFX0JVSUxERElSfSBcKCAtbmFtZSBcIiou
bGFcIiAtbyAtbmFtZSBcIiotY29uZmlnXCIgLW8gLW5hbWUgXCIqX2NvbmZpZ1wiIFwpIC10eXBl
IGYiCiMgVEFSR0VUX0xEX0FSQ0g9JHtUVU5FX0xEQVJHU30KVEFSR0VUX0xEX0FSQ0g9IiIKIyBT
REtfU1lTPSR7U0RLX0FSQ0h9JHtTREtfVkVORE9SfSR7QFsnLScgKyBkLmdldFZhcignU0RLX09T
JywgVHJ1ZSksICcnXVtkLmdldFZhcignU0RLX09TJywgVHJ1ZSkgPT0gKCcnIG9yICdjdXN0b20n
KV19ClNES19TWVM9Ing4Nl82NC1wb2t5c2RrLWxpbnV4IgojIFJERVBFTkRTXyR7UE59LXN0YXRp
Y2Rldj0ke1BOfS1kZXYgKD0gJHtFWFRFTkRQS0dWfSkKUkRFUEVORFNfYmJsYXllcnMtc3RhdGlj
ZGV2PSJiYmxheWVycy1kZXYgKD0gMS4wLXIwKSIKIyBiYXNlX2RlcD1kZWYgYmFzZV9kZXBfcHJl
cGVuZChkKToKIyAgICAjCiMgICAgIyBJZGVhbGx5IHRoaXMgd2lsbCBjaGVjayBhIGZsYWcgc28g
d2Ugd2lsbCBvcGVyYXRlIHByb3Blcmx5IGluCiMgICAgIyB0aGUgY2FzZSB3aGVyZSBob3N0ID09
IGJ1aWxkID09IHRhcmdldCwgZm9yIG5vdyB3ZSBkb24ndCB3b3JrIGluCiMgICAgIyB0aGF0IGNh
c2UgdGhvdWdoLgojICAgICMKIwojICAgIGRlcHMgPSAiIgojICAgICMgSU5ISUJJVF9ERUZBVUxU
X0RFUFMgZG9lc24ndCBhcHBseSB0byB0aGUgcGF0Y2ggY29tbWFuZC4gIFdoZXRoZXIgb3IgIG5v
dAojICAgICMgd2UgbmVlZCB0aGF0IGJ1aWx0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUg
cGF0Y2ggZnVuY3Rpb24gLyBjbGFzcywgbm90CiMgICAgIyB0aGUgYXBwbGljYXRpb24uCiMgICAg
aWYgbm90IGQuZ2V0VmFyKCdJTkhJQklUX0RFRkFVTFRfREVQUycpOgojICAgICAgICBpZiAoZC5n
ZXRWYXIoJ0hPU1RfU1lTJywgVHJ1ZSkgIT0gZC5nZXRWYXIoJ0JVSUxEX1NZUycsIFRydWUpKToK
IyAgICAgICAgICAgIGRlcHMgKz0gIiB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MgdmlydHVh
bC8ke1RBUkdFVF9QUkVGSVh9Y29tcGlsZXJsaWJzIHZpcnR1YWwvbGliYyAiCiMgICAgcmV0dXJu
IGRlcHMKIwpiYXNlX2RlcD0iZGVmIGJhc2VfZGVwX3ByZXBlbmQoZCk6IFwKICAgICMgXAogICAg
IyBJZGVhbGx5IHRoaXMgd2lsbCBjaGVjayBhIGZsYWcgc28gd2Ugd2lsbCBvcGVyYXRlIHByb3Bl
cmx5IGluIFwKICAgICMgdGhlIGNhc2Ugd2hlcmUgaG9zdCA9PSBidWlsZCA9PSB0YXJnZXQsIGZv
ciBub3cgd2UgZG9uJ3Qgd29yayBpbiBcCiAgICAjIHRoYXQgY2FzZSB0aG91Z2guIFwKICAgICMg
XAogXAogICAgZGVwcyA9IFwiXCIgXAogICAgIyBJTkhJQklUX0RFRkFVTFRfREVQUyBkb2Vzbid0
IGFwcGx5IHRvIHRoZSBwYXRjaCBjb21tYW5kLiAgV2hldGhlciBvciAgbm90IFwKICAgICMgd2Ug
bmVlZCB0aGF0IGJ1aWx0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgcGF0Y2ggZnVuY3Rp
b24gLyBjbGFzcywgbm90IFwKICAgICMgdGhlIGFwcGxpY2F0aW9uLiBcCiAgICBpZiBub3QgZC5n
ZXRWYXIoJ0lOSElCSVRfREVGQVVMVF9ERVBTJyk6IFwKICAgICAgICBpZiAoZC5nZXRWYXIoJ0hP
U1RfU1lTJywgVHJ1ZSkgIT0gZC5nZXRWYXIoJ0JVSUxEX1NZUycsIFRydWUpKTogXAogICAgICAg
ICAgICBkZXBzICs9IFwiIHZpcnR1YWwvaTU4Ni1wb2t5LWxpbnV4LWdjYyB2aXJ0dWFsL2k1ODYt
cG9reS1saW51eC1jb21waWxlcmxpYnMgdmlydHVhbC9saWJjIFwiIFwKICAgIHJldHVybiBkZXBz
IgojIEVHTElCQ1ZFUlNJT049Mi4xNgpFR0xJQkNWRVJTSU9OPSIyLjE2IgojIFJQTUNPTkZfSE9T
VF9CQVNFPSR7REVQTE9ZX0RJUl9SUE19L3NvbHZlZGItc2RrClJQTUNPTkZfSE9TVF9CQVNFPSIv
aG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvZGVwbG95L3Jw
bS9zb2x2ZWRiLXNkayIKIyBCQVNFTElCPWxpYgpCQVNFTElCPSJsaWIiCiMgSE9TVF9MRF9BUkNI
PSR7VEFSR0VUX0xEX0FSQ0h9CkhPU1RfTERfQVJDSD0iIgojIEJVSUxEX09QVElNSVpBVElPTj0t
TzIgLXBpcGUKQlVJTERfT1BUSU1JWkFUSU9OPSItTzIgLXBpcGUiCiMgR1JPVVBfZGVwZW5kZW5j
aWVzPU5vbmUKIyBCVUlMRF9GNzc9JHtDQ0FDSEV9JHtCVUlMRF9QUkVGSVh9Zzc3ICR7QlVJTERf
Q0NfQVJDSH0KZXhwb3J0IEJVSUxEX0Y3Nz0iZzc3IgojIFRVTkVfUEtHQVJDSF90dW5lLWNvcmUy
LTY0PWNvcmUyXzY0ClRVTkVfUEtHQVJDSF90dW5lLWNvcmUyLTY0PSJjb3JlMl82NCIKIyBCQl9T
VFJJQ1RfQ0hFQ0tTVU09MQpCQl9TVFJJQ1RfQ0hFQ0tTVU09IjEiCiMgUEFDS0FHRUlOREVYRVM9
IHBhY2thZ2VfdXBkYXRlX2luZGV4X3JwbTsgWyAhIC1lICR7REVQTE9ZX0RJUl9SUE19IF0gfHwg
Y3JlYXRlcmVwbyAke0RFUExPWV9ESVJfUlBNfTsKUEFDS0FHRUlOREVYRVM9InBhY2thZ2VfdXBk
YXRlX2luZGV4X3JwbTsgWyAhIC1lIC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9i
dWlsZC1mcmkyL3RtcC9kZXBsb3kvcnBtIF0gfHwgY3JlYXRlcmVwbyAvaG9tZS9taXNoYWwveW9j
dG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvZGVwbG95L3JwbTsiCiMgU1BEWExJQ0VO
U0VNQVA9Tm9uZQojIEJQTj0ke0BiYXNlX3BydW5lX3N1ZmZpeChkLmdldFZhcignUE4nLCBUcnVl
KSwgZC5nZXRWYXIoJ1NQRUNJQUxfUEtHU1VGRklYJywgVHJ1ZSkuc3BsaXQoKSwgZCl9CkJQTj0i
YmJsYXllcnMiCiMgQj0ke1N9CkI9Ii9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9i
dWlsZC1mcmkyL3RtcC93b3JrL2NvcmUyLXBva3ktbGludXgvYmJsYXllcnMtMS4wLXIwL2JibGF5
ZXJzLTEuMCIKIyBBU05FRURFRF9wbi1kaWFsZXI9CiMgUEFUSD0ke0BleHRyYV9wYXRoX2VsZW1l
bnRzKGQpfSR7Q09SRUJBU0V9L3NjcmlwdHM6JHtTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU59OiR7
U1RBR0lOR19CSU5ESVJfQ1JPU1N9OiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7c2JpbmRpcl9uYXRp
dmV9OiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfToke1NUQUdJTkdfRElSX05BVElWRX0ke2Jhc2Vf
c2JpbmRpcl9uYXRpdmV9OiR7U1RBR0lOR19ESVJfTkFUSVZFfS8ke2Jhc2VfYmluZGlyX25hdGl2
ZX06L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL3NjcmlwdHM6L2hvbWUvbWlzaGFs
L3lvY3RvL3Bva3ktZGFubnktOC4wL2JpdGJha2UvYmluLzovdXNyL2xvY2FsL3NiaW46L3Vzci9s
b2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW46L3Vzci9nYW1lcwpleHBvcnQg
UEFUSD0iL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL3NjcmlwdHM6L2hvbWUvbWlz
aGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jvb3RzL3g4Nl82NC1s
aW51eC91c3IvYmluL2NvcmUyLXBva3ktbGludXg6L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFu
bnktOC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jvb3RzL2ZyaTItbm9lbWdkL3Vzci9iaW4vY3Jvc3Nz
Y3JpcHRzOi9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC9z
eXNyb290cy94ODZfNjQtbGludXgvdXNyL3NiaW46L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFu
bnktOC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvYmluOi9ob21l
L21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC9zeXNyb290cy94ODZf
NjQtbGludXgvc2JpbjovaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJp
Mi90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4Ly9iaW46L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3kt
ZGFubnktOC4wL3NjcmlwdHM6L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2JpdGJh
a2UvYmluLzovdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmlu
Oi9zYmluOi9iaW46L3Vzci9nYW1lcyIKIyBQQUNLQUdFUz0ke1BOfS1kYmcgJHtQTn0tc3RhdGlj
ZGV2ICR7UE59LWRldiAke1BOfS1kb2MgJHtQTn0tbG9jYWxlICR7UEFDS0FHRV9CRUZPUkVfUE59
ICR7UE59ClBBQ0tBR0VTPSJiYmxheWVycy1kYmcgYmJsYXllcnMtc3RhdGljZGV2IGJibGF5ZXJz
LWRldiBiYmxheWVycy1kb2MgYmJsYXllcnMtbG9jYWxlICBiYmxheWVycyIKIyBERVNDUklQVElP
Tl8ke1BOfS1zdGF0aWNkZXY9JHtERVNDUklQVElPTn0gIFRoaXMgcGFja2FnZSBjb250YWlucyBz
dGF0aWMgbGlicmFyaWVzIGZvciBzb2Z0d2FyZSBkZXZlbG9wbWVudC4KREVTQ1JJUFRJT05fYmJs
YXllcnMtc3RhdGljZGV2PSJiYmxheWVycyB2ZXJzaW9uIDEuMC1yMCAgVGhpcyBwYWNrYWdlIGNv
bnRhaW5zIHN0YXRpYyBsaWJyYXJpZXMgZm9yIHNvZnR3YXJlIGRldmVsb3BtZW50LiIKIyBUQVJH
RVRfQ0ZMQUdTPSR7VEFSR0VUX0NQUEZMQUdTfSAke1NFTEVDVEVEX09QVElNSVpBVElPTn0KZXhw
b3J0IFRBUkdFVF9DRkxBR1M9Ii1PMiAtcGlwZSAtZyAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWct
dHlwZXMiCiMgYmFzZV9iaW5kaXI9JHtiYXNlX3ByZWZpeH0vYmluCmV4cG9ydCBiYXNlX2JpbmRp
cj0iL2JpbiIKIyBVU1JCSU5QQVRIX2NsYXNzLW5hdGl2ZXNkaz0vdXNyL2JpbgpVU1JCSU5QQVRI
X2NsYXNzLW5hdGl2ZXNkaz0iL3Vzci9iaW4iCiMgbG9jYWxlZGlyPSR7bGliZGlyfS9sb2NhbGUK
bG9jYWxlZGlyPSIvdXNyL2xpYi9sb2NhbGUiCiMgQlVJTERfQ1BQPSR7QlVJTERfUFJFRklYfWNw
cCAke0JVSUxEX0NDX0FSQ0h9CmV4cG9ydCBCVUlMRF9DUFA9ImNwcCIKIyBIT01FUEFHRT11bmtu
b3duCkhPTUVQQUdFPSJ1bmtub3duIgojIFNBTklUWV9WRVJTSU9OPTEKU0FOSVRZX1ZFUlNJT049
IjEiCiMgQlpSRElSPSR7Q09fRElSfS9ienIKQlpSRElSPSIvaG9tZS9taXNoYWwveW9jdG8vcG9r
eS1kYW5ueS04LjAvYnVpbGQtZnJpMi9kb3dubG9hZHMvYnpyIgojIEVYVEVORFBSQVVUTz0ke0Bb
Jy4ke1BSQVVUT1x4N2QnLCcnXVtkLmdldFZhcignUFJBVVRPJywxKSBpcyBOb25lXX0KIyBCVUlM
RENGR19GVU5DUz1idWlsZGNmZ192YXJzIGdldF9sYXllcnNfYnJhbmNoX3JldiBidWlsZGNmZ19u
ZWVkZWR2YXJzCkJVSUxEQ0ZHX0ZVTkNTPSJidWlsZGNmZ192YXJzIGdldF9sYXllcnNfYnJhbmNo
X3JldiBidWlsZGNmZ19uZWVkZWR2YXJzIgojIFBSRUZFUlJFRF9WRVJTSU9OX2djYy1jcm9zcz0k
e0dDQ1ZFUlNJT059ClBSRUZFUlJFRF9WRVJTSU9OX2djYy1jcm9zcz0iNC43JSIKIyBTQU5JVFlf
UkVRVUlSRURfVVRJTElUSUVTPXBhdGNoIGRpZmZzdGF0IG1ha2VpbmZvIGdpdCBiemlwMiB0YXIg
Z3ppcCBnYXdrIGNocnBhdGggd2dldCBjcGlvClNBTklUWV9SRVFVSVJFRF9VVElMSVRJRVM9InBh
dGNoIGRpZmZzdGF0IG1ha2VpbmZvIGdpdCBiemlwMiB0YXIgZ3ppcCBnYXdrIGNocnBhdGggd2dl
dCBjcGlvIgojIEFTTkVFREVEX3BuLXJwbT0KIyBCQVNFX0xJQl90dW5lLXg4Ni02ND1saWI2NApC
QVNFX0xJQl90dW5lLXg4Ni02ND0ibGliNjQiCiMgUEtHV1JJVEVESVJSUE09JHtXT1JLRElSfS9k
ZXBsb3ktcnBtcwpQS0dXUklURURJUlJQTT0iL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnkt
OC4wL2J1aWxkLWZyaTIvdG1wL3dvcmsvY29yZTItcG9reS1saW51eC9iYmxheWVycy0xLjAtcjAv
ZGVwbG95LXJwbXMiCiMgUFJFRkVSUkVEX1BST1ZJREVSX29wa2ctbmF0aXZlPW9wa2ctbmF0aXZl
ClBSRUZFUlJFRF9QUk9WSURFUl9vcGtnLW5hdGl2ZT0ib3BrZy1uYXRpdmUiCiMgTUFDSElORT1m
cmkyLW5vZW1nZAp1bnNldCBNQUNISU5FCiMgSU5IRVJJVD0gcG9reS1zYW5pdHkgJHtQQUNLQUdF
X0NMQVNTRVN9ICR7VVNFUl9DTEFTU0VTfSAke0lOSEVSSVRfSU5TQU5FfSAke0lOSEVSSVRfRElT
VFJPfSBzYW5pdHkKSU5IRVJJVD0icG9reS1zYW5pdHkgcGFja2FnZV9ycG0gYnVpbGRzdGF0cyBp
bWFnZS1ta2xpYnMgaW1hZ2UtcHJlbGluayBpbnNhbmUgZGViaWFuIGRldnNoZWxsIHNzdGF0ZSBs
aWNlbnNlIHNhbml0eSIKIyBGSUxFX0RJUk5BTUU9JHtAb3MucGF0aC5kaXJuYW1lKGQuZ2V0VmFy
KCdGSUxFJykpfQpGSUxFX0RJUk5BTUU9Ii9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTgu
MC9idWlsZC1mcmkyL2NvbmYiCiMgR0lURElSPSR7Q09fRElSfS9naXQyCkdJVERJUj0iL2hvbWUv
bWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvZG93bmxvYWRzL2dpdDIiCiMg
TUFDSElORU9WRVJSSURFUz0ke01BQ0hJTkV9JHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVB
VFVSRVMiLCAibTMyIiwgIjp4ODYiLCAiIiAsZCl9Ck1BQ0hJTkVPVkVSUklERVM9ImZyaTItbm9l
bWdkOng4NiIKIyBHUEVfU1ZOPXN2bjovL3Byb2plY3RzLmxpbnV4dG9nby5vcmcvc3ZuL2dwZS90
cnVuay9iYXNlO21vZHVsZT0ke1BOfQpHUEVfU1ZOPSJzdm46Ly9wcm9qZWN0cy5saW51eHRvZ28u
b3JnL3N2bi9ncGUvdHJ1bmsvYmFzZTttb2R1bGU9YmJsYXllcnMiCiMgcHJlZml4X25hdGl2ZT0v
dXNyCnByZWZpeF9uYXRpdmU9Ii91c3IiCiMgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwveHNl
cnZlci14Zjg2PXhzZXJ2ZXIteG9yZwpQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVy
LXhmODY9InhzZXJ2ZXIteG9yZyIKIyBHUEVfTUlSUk9SPWh0dHA6Ly9ncGUubGludXh0b2dvLm9y
Zy9kb3dubG9hZC9zb3VyY2UKR1BFX01JUlJPUj0iaHR0cDovL2dwZS5saW51eHRvZ28ub3JnL2Rv
d25sb2FkL3NvdXJjZSIKIyBTRUNUSU9OXyR7UE59LWRldj1kZXZlbApTRUNUSU9OX2JibGF5ZXJz
LWRldj0iZGV2ZWwiCiMgYmFzZV9zYmluZGlyX25hdGl2ZT0vc2JpbgpiYXNlX3NiaW5kaXJfbmF0
aXZlPSIvc2JpbiIKIyBGSUxFU18ke1BOfS1iaW49JHtiaW5kaXJ9LyogJHtzYmluZGlyfS8qCkZJ
TEVTX2JibGF5ZXJzLWJpbj0iL3Vzci9iaW4vKiAvdXNyL3NiaW4vKiIKIyBwcmVmaXhfbmF0aXZl
c2RrPS91c3IKcHJlZml4X25hdGl2ZXNkaz0iL3VzciIKIyBzYmluZGlyPSR7ZXhlY19wcmVmaXh9
L3NiaW4KZXhwb3J0IHNiaW5kaXI9Ii91c3Ivc2JpbiIKIyBDRkxBR1M9JHtUQVJHRVRfQ0ZMQUdT
fQpleHBvcnQgQ0ZMQUdTPSItTzIgLXBpcGUgLWcgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5
cGVzIgojIEJVSUxEX0FSPSR7QlVJTERfUFJFRklYfWFyCmV4cG9ydCBCVUlMRF9BUj0iYXIiCiMg
QlVJTERfQVM9JHtCVUlMRF9QUkVGSVh9YXMgJHtCVUlMRF9BU19BUkNIfQpleHBvcnQgQlVJTERf
QVM9ImFzIgojIEhBTkRIRUxEU19DVlM9Y3ZzOi8vYW5vbmN2czphbm9uY3ZzQGFub25jdnMuaGFu
ZGhlbGRzLm9yZy9jdnMKSEFOREhFTERTX0NWUz0iY3ZzOi8vYW5vbmN2czphbm9uY3ZzQGFub25j
dnMuaGFuZGhlbGRzLm9yZy9jdnMiCiMgc2hhcmVkc3RhdGVkaXI9JHtiYXNlX3ByZWZpeH0vY29t
CmV4cG9ydCBzaGFyZWRzdGF0ZWRpcj0iL2NvbSIKIyBTVEFHSU5HX0JBU0VfTElCRElSX05BVElW
RT0ke1NUQUdJTkdfRElSX05BVElWRX0ke2Jhc2VfbGliZGlyX25hdGl2ZX0KU1RBR0lOR19CQVNF
X0xJQkRJUl9OQVRJVkU9Ii9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1m
cmkyL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvbGliIgojIEJBU0VfTElCX3R1bmUtY29yZTIt
NjQ9bGliNjQKQkFTRV9MSUJfdHVuZS1jb3JlMi02ND0ibGliNjQiCiMgQ09NTUVSQ0lBTF9BVURJ
T19QTFVHSU5TPQojIFNTVEFURV9NQU5GSUxFUFJFRklYPSR7U1NUQVRFX01BTkZJTEVCQVNFfSR7
UE59ClNTVEFURV9NQU5GSUxFUFJFRklYPSIvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04
LjAvYnVpbGQtZnJpMi90bXAvc3N0YXRlLWNvbnRyb2wvbWFuaWZlc3QtY29yZTItYmJsYXllcnMi
CiMgU0RLX1BSRUZJWD0ke1NES19TWVN9LQpTREtfUFJFRklYPSJ4ODZfNjQtcG9reXNkay1saW51
eC0iCiMgREVCSUFOX01JUlJPUj1mdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbApERUJJ
QU5fTUlSUk9SPSJmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCIKIyBQUkVGRVJSRURf
VkVSU0lPTl9uYXRpdmVzZGstZWdsaWJjPSR7RUdMSUJDVkVSU0lPTn0KUFJFRkVSUkVEX1ZFUlNJ
T05fbmF0aXZlc2RrLWVnbGliYz0iMi4xNiIKIyBERVZGSUxFPSR7QlVJTERTVEFUU19CQVNFfS8u
ZGV2aWNlCkRFVkZJTEU9Ii9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1m
cmkyL3RtcC9idWlsZHN0YXRzLy8uZGV2aWNlIgojIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFs
LyR7VEFSR0VUX1BSRUZJWH1saWJjLWZvci1nY2M9JHtUQ0xJQkN9ClBSRUZFUlJFRF9QUk9WSURF
Ul92aXJ0dWFsL2k1ODYtcG9reS1saW51eC1saWJjLWZvci1nY2M9ImVnbGliYyIKIyBERUZBVUxU
X1RBU0tfUFJPVklERVI9cGFja2FnZWdyb3VwLWJhc2UKREVGQVVMVF9UQVNLX1BST1ZJREVSPSJw
YWNrYWdlZ3JvdXAtYmFzZSIKIyBCT09UU1RSQVBfRVhUUkFfUlJFQ09NTUVORFM9CiMgRjc3PSR7
Q0NBQ0hFfSR7SE9TVF9QUkVGSVh9Zzc3ICR7SE9TVF9DQ19BUkNIfSR7VE9PTENIQUlOX09QVElP
TlN9CmV4cG9ydCBGNzc9Imk1ODYtcG9reS1saW51eC1nNzcgIC1tMzIgICAgLW1hcmNoPWNvcmUy
IC1tc3NlMyAtbXR1bmU9Z2VuZXJpYyAtbWZwbWF0aD1zc2UgLS1zeXNyb290PS9ob21lL21pc2hh
bC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC9zeXNyb290cy9mcmkyLW5vZW1n
ZCIKIyBUT1BESVI9L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIK
VE9QRElSPSIvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMiIKIyBQ
UkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0b19xZW11cHBjPTMuNCUKUFJFRkVSUkVEX1ZFUlNJ
T05fbGludXgteW9jdG9fcWVtdXBwYz0iMy40JSIKIyBXQVJOX1FBPQojIEtFUk5FTF9JTUFHRVRZ
UEU9YnpJbWFnZQpLRVJORUxfSU1BR0VUWVBFPSJiekltYWdlIgojIFZJUlRVQUwtUlVOVElNRV9h
cG09YXBtClZJUlRVQUwtUlVOVElNRV9hcG09ImFwbSIKIyBRRU1VSU1BR0VURVNUUz0vaG9tZS9t
aXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvc2NyaXB0cy9xZW11aW1hZ2UtdGVzdHMKUUVNVUlN
QUdFVEVTVFM9Ii9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9zY3JpcHRzL3FlbXVp
bWFnZS10ZXN0cyIKIyBJTUFHRV9MSU5HVUFTPWVuLXVzIGVuLWdiCklNQUdFX0xJTkdVQVM9ImVu
LXVzIGVuLWdiIgojIERFUExPWV9ESVJfSU1BR0U9JHtERVBMT1lfRElSfS9pbWFnZXMKREVQTE9Z
X0RJUl9JTUFHRT0iL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIv
dG1wL2RlcGxveS9pbWFnZXMiCiMgU1VNTUFSWV8ke1BOfS1kZXY9JHtTVU1NQVJZfSAtIERldmVs
b3BtZW50IGZpbGVzClNVTU1BUllfYmJsYXllcnMtZGV2PSJiYmxheWVycyB2ZXJzaW9uIDEuMC1y
MCAtIERldmVsb3BtZW50IGZpbGVzIgojIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2RiLW5h
dGl2ZT1kYi1uYXRpdmUKUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvZGItbmF0aXZlPSJkYi1u
YXRpdmUiCiMgQUxMT1dFRF9GTEFHUz0tTyAtbWNwdSAtbWFyY2ggLXBpcGUKQUxMT1dFRF9GTEFH
Uz0iLU8gLW1jcHUgLW1hcmNoIC1waXBlIgojIFBBUkFMTEVMX01BS0U9LWogMgpQQVJBTExFTF9N
QUtFPSItaiAyIgojIEFTTkVFREVEX3BuLW1pbmltbz0KIyBWSVJUVUFMLVJVTlRJTUVfdXBkYXRl
LWFsdGVybmF0aXZlcz11cGRhdGUtYWx0ZXJuYXRpdmVzLWN3b3J0aApWSVJUVUFMLVJVTlRJTUVf
dXBkYXRlLWFsdGVybmF0aXZlcz0idXBkYXRlLWFsdGVybmF0aXZlcy1jd29ydGgiCiMgVFVORUFC
SV9PVkVSUklERT1Ob25lCiMgUFJFRkVSUkVEX1ZFUlNJT05fbGludXgtbGliYy1oZWFkZXJzPSR7
TElOVVhMSUJDVkVSU0lPTn0KUFJFRkVSUkVEX1ZFUlNJT05fbGludXgtbGliYy1oZWFkZXJzPSIz
LjQuMyIKIyBTT1VSQ0VGT1JHRV9NSVJST1I9aHR0cDovL2Rvd25sb2Fkcy5zb3VyY2Vmb3JnZS5u
ZXQKU09VUkNFRk9SR0VfTUlSUk9SPSJodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldCIK
IyBST09UX0ZMQVNIX1NJWkU9MjU2ClJPT1RfRkxBU0hfU0laRT0iMjU2IgojIE9CSkRVTVA9JHtI
T1NUX1BSRUZJWH1vYmpkdW1wCmV4cG9ydCBPQkpEVU1QPSJpNTg2LXBva3ktbGludXgtb2JqZHVt
cCIKIyBJTkhFUklUX0RJU1RSTz1kZWJpYW4gZGV2c2hlbGwgc3N0YXRlIGxpY2Vuc2UKSU5IRVJJ
VF9ESVNUUk89ImRlYmlhbiBkZXZzaGVsbCBzc3RhdGUgbGljZW5zZSIKIyBERUZBVUxUVFVORT1j
b3JlMgpERUZBVUxUVFVORT0iY29yZTIiCiMgSU1BR0VfQkFTRU5BTUU9JHtQTn0KSU1BR0VfQkFT
RU5BTUU9ImJibGF5ZXJzIgojIFBBVENIVE9PTD1xdWlsdApQQVRDSFRPT0w9InF1aWx0IgojIFhP
UkdfTUlSUk9SPWh0dHA6Ly94b3JnLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcwpYT1JHX01JUlJP
Uj0iaHR0cDovL3hvcmcuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzIgojIFNZU1JPT1RfREVTVERJ
Uj0ke1dPUktESVJ9L3N5c3Jvb3QtZGVzdGRpci8KU1lTUk9PVF9ERVNURElSPSIvaG9tZS9taXNo
YWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvd29yay9jb3JlMi1wb2t5LWxp
bnV4L2JibGF5ZXJzLTEuMC1yMC9zeXNyb290LWRlc3RkaXIvIgojIFBSRUZFUlJFRF9QUk9WSURF
Ul92aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1saWJjLWluaXRpYWw9JHtUQ0xJQkN9LWluaXRpYWwK
UFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvaTU4Ni1wb2t5LWxpbnV4LWxpYmMtaW5pdGlhbD0i
ZWdsaWJjLWluaXRpYWwiCiMgVUNMSUJDVkVSU0lPTj0wLjkuMzMKVUNMSUJDVkVSU0lPTj0iMC45
LjMzIgojIEJVSUxEX0NGTEFHUz0ke0JVSUxEX0NQUEZMQUdTfSAke0JVSUxEX09QVElNSVpBVElP
Tn0KZXhwb3J0IEJVSUxEX0NGTEFHUz0iLWlzeXN0ZW0vaG9tZS9taXNoYWwveW9jdG8vcG9reS1k
YW5ueS04LjAvYnVpbGQtZnJpMi90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRl
IC1PMiAtcGlwZSIKIyBQQUNLQUdFTE9DSz0ke1NUQUdJTkdfRElSfS9wYWNrYWdlLW91dHB1dC5s
b2NrClBBQ0tBR0VMT0NLPSIvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQt
ZnJpMi90bXAvc3lzcm9vdHMvcGFja2FnZS1vdXRwdXQubG9jayIKIyBQUkVGRVJSRURfVkVSU0lP
Tl9lbGZ1dGlscz0wLjE0OApQUkVGRVJSRURfVkVSU0lPTl9lbGZ1dGlscz0iMC4xNDgiCiMgU1BF
Q0lBTF9QS0dTVUZGSVg9LW5hdGl2ZSAtY3Jvc3MgLWluaXRpYWwgLWludGVybWVkaWF0ZSAtY3Jv
c3NzZGsgLWNyb3NzLWNhbmFkaWFuClNQRUNJQUxfUEtHU1VGRklYPSItbmF0aXZlIC1jcm9zcyAt
aW5pdGlhbCAtaW50ZXJtZWRpYXRlIC1jcm9zc3NkayAtY3Jvc3MtY2FuYWRpYW4iCiMgQlVJTERf
RVhFRVhUPQojIEFTU1VNRV9TSExJQlM9Tm9uZQojIE9MREVTVF9LRVJORUw9Mi42LjE2Ck9MREVT
VF9LRVJORUw9IjIuNi4xNiIKIyBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9uYXRpdmVzZGst
bGliaWNvbnY9bmF0aXZlc2RrLWVnbGliYwpQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9uYXRp
dmVzZGstbGliaWNvbnY9Im5hdGl2ZXNkay1lZ2xpYmMiCiMgUFJFRkVSUkVEX1ZFUlNJT05fcHl0
aG9uLW5hdGl2ZT0yLjcuMwpQUkVGRVJSRURfVkVSU0lPTl9weXRob24tbmF0aXZlPSIyLjcuMyIK
IyBiYXNlX2xpYmRpcj0ke2Jhc2VfcHJlZml4fS8ke2Jhc2VsaWJ9CmV4cG9ydCBiYXNlX2xpYmRp
cj0iL2xpYiIKIyBTRUNUSU9OXyR7UE59LWRvYz1kb2MKU0VDVElPTl9iYmxheWVycy1kb2M9ImRv
YyIKIyBQUj0ke0BiYi5wYXJzZS5CQkhhbmRsZXIudmFyc19mcm9tX2ZpbGUoZC5nZXRWYXIoJ0ZJ
TEUnKSxkKVsyXSBvciAncjAnfQpQUj0icjAiCiMgUFY9JHtAYmIucGFyc2UuQkJIYW5kbGVyLnZh
cnNfZnJvbV9maWxlKGQuZ2V0VmFyKCdGSUxFJyksZClbMV0gb3IgJzEuMCd9ClBWPSIxLjAiCiMg
WEFVVEhPUklUWT0ke0hPTUV9Ly5YYXV0aG9yaXR5ClhBVVRIT1JJVFk9Ii9ob21lL21pc2hhbC8u
WGF1dGhvcml0eSIKIyBBVVRIT1I9Tm9uZQojIEJCX1ZFUlNJT049MS4xNi4wCkJCX1ZFUlNJT049
IjEuMTYuMCIKIyBzeXNjb25mZGlyX25hdGl2ZT0vZXRjCnN5c2NvbmZkaXJfbmF0aXZlPSIvZXRj
IgojIEJVSUxEU0RLX0xERkxBR1M9LUwke1NUQUdJTkdfTElCRElSfSAtV2wsLXJwYXRoLWxpbmss
JHtTVEFHSU5HX0xJQkRJUn0gLVdsLC1ycGF0aCwke2xpYmRpcn0gLVdsLC1PMSAtTCR7U1RBR0lO
R19ESVJfSE9TVH0ke2Jhc2VfbGliZGlyfSAtV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0RJUl9I
T1NUfSR7YmFzZV9saWJkaXJ9IC1XbCwtcnBhdGgsJHtiYXNlX2xpYmRpcn0gLVdsLC1PMQpCVUlM
RFNES19MREZMQUdTPSItTC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1m
cmkyL3RtcC9zeXNyb290cy9mcmkyLW5vZW1nZC91c3IvbGliIC1XbCwtcnBhdGgtbGluaywvaG9t
ZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvc3lzcm9vdHMvZnJp
Mi1ub2VtZ2QvdXNyL2xpYiAtV2wsLXJwYXRoLC91c3IvbGliIC1XbCwtTzEgLUwvaG9tZS9taXNo
YWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvc3lzcm9vdHMvZnJpMi1ub2Vt
Z2QvbGliIC1XbCwtcnBhdGgtbGluaywvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAv
YnVpbGQtZnJpMi90bXAvc3lzcm9vdHMvZnJpMi1ub2VtZ2QvbGliIC1XbCwtcnBhdGgsL2xpYiAt
V2wsLU8xIgojIFBLR0RFU1Q9JHtXT1JLRElSfS9wYWNrYWdlcy1zcGxpdApQS0dERVNUPSIvaG9t
ZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvd29yay9jb3JlMi1w
b2t5LWxpbnV4L2JibGF5ZXJzLTEuMC1yMC9wYWNrYWdlcy1zcGxpdCIKIyBGRVRDSENNRF93Z2V0
PS91c3IvYmluL2VudiB3Z2V0IC10IDIgLVQgMzAgLW52IC0tcGFzc2l2ZS1mdHAgLS1uby1jaGVj
ay1jZXJ0aWZpY2F0ZQpGRVRDSENNRF93Z2V0PSIvdXNyL2Jpbi9lbnYgd2dldCAtdCAyIC1UIDMw
IC1udiAtLXBhc3NpdmUtZnRwIC0tbm8tY2hlY2stY2VydGlmaWNhdGUiCiMgUEY9JHtQTn0tJHtF
WFRFTkRQRX0ke1BWfS0ke1BSfQpQRj0iYmJsYXllcnMtMS4wLXIwIgojIFNUQUdJTkdfQklORElS
X05BVElWRT0ke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcl9uYXRpdmV9ClNUQUdJTkdfQklO
RElSX05BVElWRT0iL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIv
dG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvYmluIgojIFBOPSR7QGJiLnBhcnNlLkJCSGFu
ZGxlci52YXJzX2Zyb21fZmlsZShkLmdldFZhcignRklMRScpLGQpWzBdIG9yICdkZWZhdWx0cGtn
bmFtZSd9ClBOPSJiYmxheWVycyIKIyBQT0tZX0RFRkFVTFRfRVhUUkFfUkRFUEVORFM9cGFja2Fn
ZWdyb3VwLWNvcmUtYm9vdApQT0tZX0RFRkFVTFRfRVhUUkFfUkRFUEVORFM9InBhY2thZ2Vncm91
cC1jb3JlLWJvb3QiCiMgRkFLRVJPT1ROT0VOVj1QU0VVRE9fVU5MT0FEPTEKRkFLRVJPT1ROT0VO
Vj0iUFNFVURPX1VOTE9BRD0xIgojIEJCRklMRV9QQVRURVJOX2ludGVsPV4vaG9tZS9taXNoYWwv
eW9jdG8vbWV0YS1pbnRlbC8KQkJGSUxFX1BBVFRFUk5faW50ZWw9Il4vaG9tZS9taXNoYWwveW9j
dG8vbWV0YS1pbnRlbC8iCiMgQ0xBU1NPVkVSUklERT1jbGFzcy10YXJnZXQKQ0xBU1NPVkVSUklE
RT0iY2xhc3MtdGFyZ2V0IgojIFBBQ0tBR0VWQVJTPUZJTEVTIFJERVBFTkRTIFJSRUNPTU1FTkRT
IFNVTU1BUlkgREVTQ1JJUFRJT04gUlNVR0dFU1RTIFJQUk9WSURFUyBSQ09ORkxJQ1RTIFBLRyBB
TExPV19FTVBUWSBwa2dfcG9zdGluc3QgcGtnX3Bvc3RybSBJTklUU0NSSVBUX05BTUUgSU5JVFND
UklQVF9QQVJBTVMgREVCSUFOX05PQVVUT05BTUUgQUxURVJOQVRJVkUgUEtHRSBQS0dWIFBLR1IK
UEFDS0FHRVZBUlM9IkZJTEVTIFJERVBFTkRTIFJSRUNPTU1FTkRTIFNVTU1BUlkgREVTQ1JJUFRJ
T04gUlNVR0dFU1RTIFJQUk9WSURFUyBSQ09ORkxJQ1RTIFBLRyBBTExPV19FTVBUWSBwa2dfcG9z
dGluc3QgcGtnX3Bvc3RybSBJTklUU0NSSVBUX05BTUUgSU5JVFNDUklQVF9QQVJBTVMgREVCSUFO
X05PQVVUT05BTUUgQUxURVJOQVRJVkUgUEtHRSBQS0dWIFBLR1IiCiMgRklMRVNfJHtQTn0tZGV2
PSR7aW5jbHVkZWRpcn0gJHtGSUxFU19TT0xJQlNERVZ9ICR7bGliZGlyfS8qLmxhICR7bGliZGly
fS8qLm8gJHtsaWJkaXJ9L3BrZ2NvbmZpZyAke2RhdGFkaXJ9L3BrZ2NvbmZpZyAke2RhdGFkaXJ9
L2FjbG9jYWwgJHtiYXNlX2xpYmRpcn0vKi5vICR7bGliZGlyfS8ke0JQTn0vKi5sYSAke2Jhc2Vf
bGliZGlyfS8qLmxhCkZJTEVTX2JibGF5ZXJzLWRldj0iL3Vzci9pbmNsdWRlIC9saWIvbGliKi5z
byAvdXNyL2xpYi9saWIqLnNvIC91c3IvbGliLyoubGEgL3Vzci9saWIvKi5vIC91c3IvbGliL3Br
Z2NvbmZpZyAvdXNyL3NoYXJlL3BrZ2NvbmZpZyAvdXNyL3NoYXJlL2FjbG9jYWwgL2xpYi8qLm8g
L3Vzci9saWIvYmJsYXllcnMvKi5sYSAvbGliLyoubGEiCiMgRElTVFJPX1ZFUlNJT049MS4zCkRJ
U1RST19WRVJTSU9OPSIxLjMiCiMgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbmF0aXZlc2Rr
LSR7U0RLX1BSRUZJWH1saWJjLWZvci1nY2M9bmF0aXZlc2RrLSR7VENMSUJDfQpQUkVGRVJSRURf
UFJPVklERVJfdmlydHVhbC9uYXRpdmVzZGsteDg2XzY0LXBva3lzZGstbGludXgtbGliYy1mb3It
Z2NjPSJuYXRpdmVzZGstZWdsaWJjIgojIFM9JHtXT1JLRElSfS8ke0JQfQpTPSIvaG9tZS9taXNo
YWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvd29yay9jb3JlMi1wb2t5LWxp
bnV4L2JibGF5ZXJzLTEuMC1yMC9iYmxheWVycy0xLjAiCiMgVVNFUl9DTEFTU0VTPWJ1aWxkc3Rh
dHMgaW1hZ2UtbWtsaWJzIGltYWdlLXByZWxpbmsKVVNFUl9DTEFTU0VTPSJidWlsZHN0YXRzIGlt
YWdlLW1rbGlicyBpbWFnZS1wcmVsaW5rIgojIERFUExPWV9ESVJfVEFSPSR7REVQTE9ZX0RJUn0v
dGFyCkRFUExPWV9ESVJfVEFSPSIvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVp
bGQtZnJpMi90bXAvZGVwbG95L3RhciIKIyBYU0VSVkVSX0lBMzJfQkFTRT14c2VydmVyLXhvcmcg
ICAgICAgICAgICB4Zjg2LWlucHV0LW1vdXNlICAgICAgICAgICAgeGY4Ni1pbnB1dC1rZXlib2Fy
ZCAgICAgICAgICAgIHhmODYtaW5wdXQtZXZkZXYgICAgICAgICAgICB4Zjg2LWlucHV0LXN5bmFw
dGljcyAgICAgICAgICAgIG1lc2EtZHJpICAgICAgICAgICAgClhTRVJWRVJfSUEzMl9CQVNFPSJ4
c2VydmVyLXhvcmcgICAgICAgICAgICB4Zjg2LWlucHV0LW1vdXNlICAgICAgICAgICAgeGY4Ni1p
bnB1dC1rZXlib2FyZCAgICAgICAgICAgIHhmODYtaW5wdXQtZXZkZXYgICAgICAgICAgICB4Zjg2
LWlucHV0LXN5bmFwdGljcyAgICAgICAgICAgIG1lc2EtZHJpIgojIE1LVEVNUERJUkNNRD1ta3Rl
bXAgLWQgLXEgJHtUTVBCQVNFfQpNS1RFTVBESVJDTUQ9Im1rdGVtcCAtZCAtcSAke1RNUEJBU0V9
IgojIFNUQUdJTkdfS0VSTkVMX0RJUj0ke1NUQUdJTkdfRElSX0hPU1R9L3Vzci9zcmMva2VybmVs
ClNUQUdJTkdfS0VSTkVMX0RJUj0iL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1
aWxkLWZyaTIvdG1wL3N5c3Jvb3RzL2ZyaTItbm9lbWdkL3Vzci9zcmMva2VybmVsIgojIEJCX0hB
U0hDSEVDS19GVU5DVElPTj1zc3RhdGVfY2hlY2toYXNoZXMKQkJfSEFTSENIRUNLX0ZVTkNUSU9O
PSJzc3RhdGVfY2hlY2toYXNoZXMiCiMgU0VQUFVLVV9MT0dJTj1Ob25lCiMgU0VQUFVLVV9QUk9E
VUNUPU5vbmUKIyBGSUxFU19TT0xJQlNERVY9JHtiYXNlX2xpYmRpcn0vbGliKiR7U09MSUJTREVW
fSAke2xpYmRpcn0vbGliKiR7U09MSUJTREVWfQpGSUxFU19TT0xJQlNERVY9Ii9saWIvbGliKi5z
byAvdXNyL2xpYi9saWIqLnNvIgojIEFET0JFX01JUlJPUj1odHRwOi8vZnBkb3dubG9hZC5tYWNy
b21lZGlhLmNvbS9nZXQvZmxhc2hwbGF5ZXIvY3VycmVudC8KQURPQkVfTUlSUk9SPSJodHRwOi8v
ZnBkb3dubG9hZC5tYWNyb21lZGlhLmNvbS9nZXQvZmxhc2hwbGF5ZXIvY3VycmVudC8iCiMgU09M
SUJTPS5zby4qClNPTElCUz0iLnNvLioiCiMgQ0hSUEFUSF9CSU49Y2hycGF0aApDSFJQQVRIX0JJ
Tj0iY2hycGF0aCIKIyBQS0dfQ09ORklHX0RJUj0ke1NUQUdJTkdfRElSX0hPU1R9LyR7bGliZGly
fS9wa2djb25maWcKZXhwb3J0IFBLR19DT05GSUdfRElSPSIvaG9tZS9taXNoYWwveW9jdG8vcG9r
eS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvc3lzcm9vdHMvZnJpMi1ub2VtZ2QvL3Vzci9saWIv
cGtnY29uZmlnIgojIFBZVEhPTl9CQVNFVkVSU0lPTj0yLjcKUFlUSE9OX0JBU0VWRVJTSU9OPSIy
LjciCiMgUEFDS0FHRV9QUkVQUk9DRVNTX0ZVTkNTPQojIElNQUdFX1BSRVBST0NFU1NfQ09NTUFO
RD0gbWtsaWJzX29wdGltaXplX2ltYWdlOyAgcHJlbGlua19pbWFnZTsgCklNQUdFX1BSRVBST0NF
U1NfQ09NTUFORD0ibWtsaWJzX29wdGltaXplX2ltYWdlOyAgcHJlbGlua19pbWFnZTsiCiMgREVC
SUFOUkRFUD1kb19wYWNrYWdlCkRFQklBTlJERVA9ImRvX3BhY2thZ2UiCiMgZG9fcGFja2FnZV93
cml0ZV90YXI9Tm9uZQojIGRvY2Rpcj0ke2RhdGFkaXJ9L2RvYwpleHBvcnQgZG9jZGlyPSIvdXNy
L3NoYXJlL2RvYyIKIyBRRU1VX09QVElPTlNfZTUwMG1jPS1jcHUgZTUwMG1jClFFTVVfT1BUSU9O
U19lNTAwbWM9Ii1jcHUgZTUwMG1jIgojIERJU1RST19GRUFUVVJFUz1hbHNhIGFyZ3AgYmx1ZXRv
b3RoIGV4dDIgaXJkYSBsYXJnZWZpbGUgcGNtY2lhIHVzYmdhZGdldCB1c2Job3N0IHdpZmkgeGF0
dHIgbmZzIHplcm9jb25mIHBjaSAzZyB4MTEgJHtESVNUUk9fRkVBVFVSRVNfTElCQ30gbGFyZ2Vm
aWxlIG9wZW5nbCR7QG9lLnV0aWxzLmZlYXR1cmVzX2JhY2tmaWxsKCJESVNUUk9fRkVBVFVSRVMi
LGQpfQpESVNUUk9fRkVBVFVSRVM9ImFsc2EgYXJncCBibHVldG9vdGggZXh0MiBpcmRhIGxhcmdl
ZmlsZSBwY21jaWEgdXNiZ2FkZ2V0IHVzYmhvc3Qgd2lmaSB4YXR0ciBuZnMgemVyb2NvbmYgcGNp
IDNnIHgxMSBpcHY0IGlwdjYgbGliYy1iYWNrdHJhY2UgbGliYy1iaWctbWFjcm9zIGxpYmMtYnNk
IGxpYmMtY3h4LXRlc3RzIGxpYmMtY2F0Z2V0cyBsaWJjLWNoYXJzZXRzIGxpYmMtY3J5cHQgCQkJ
CQlsaWJjLWNyeXB0LXVmYyBsaWJjLWRiLWFsaWFzZXMgbGliYy1lbnZ6IGxpYmMtZmN2dCBsaWJj
LWZtdG1zZyBsaWJjLWZzdGFiIGxpYmMtZnRyYXZlcnNlIAkJCQkJbGliYy1nZXRsb2dpbiBsaWJj
LWlkbiBsaWJjLWluZXQtYW5sIGxpYmMtbGlibSBsaWJjLWxpYm0tYmlnIGxpYmMtbG9jYWxlcyBs
aWJjLWxvY2FsZS1jb2RlIAkJCQkJbGliYy1tZW11c2FnZSBsaWJjLW5pcyBsaWJjLW5zc3dpdGNo
IGxpYmMtcmNtZCBsaWJjLXJ0bGQtZGVidWcgbGliYy1zcGF3biBsaWJjLXN0cmVhbXMgbGliYy1z
dW5ycGMgCQkJCQlsaWJjLXV0bXAgbGliYy11dG1weCBsaWJjLXdvcmRleHAgbGliYy1wb3NpeC1j
bGFuZy13Y2hhciBsaWJjLXBvc2l4LXJlZ2V4cCBsaWJjLXBvc2l4LXJlZ2V4cC1nbGliYyAJCQkJ
CWxpYmMtcG9zaXgtd2NoYXItaW8gbGFyZ2VmaWxlIG9wZW5nbCBwdWxzZWF1ZGlvIgojIFRBUkdF
VF9TWVM9JHtUQVJHRVRfQVJDSH0ke1RBUkdFVF9WRU5ET1J9JHtAWyctJyArIGQuZ2V0VmFyKCdU
QVJHRVRfT1MnLCBUcnVlKSwgJyddW2QuZ2V0VmFyKCdUQVJHRVRfT1MnLCBUcnVlKSA9PSAoJycg
b3IgJ2N1c3RvbScpXX0KVEFSR0VUX1NZUz0iaTU4Ni1wb2t5LWxpbnV4IgojIFBSRUZFUlJFRF9Q
Uk9WSURFUl92aXJ0dWFsL2xpYmMtbG9jYWxlPWVnbGliYy1sb2NhbGUKUFJFRkVSUkVEX1BST1ZJ
REVSX3ZpcnR1YWwvbGliYy1sb2NhbGU9ImVnbGliYy1sb2NhbGUiCiMgUEFDS0FHRV9FWFRSQV9B
UkNIU190dW5lLWNvcmUyLTY0PSR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXg4Ni02NH0gY29y
ZTJfNjQKUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcmUyLTY0PSJ4ODZfNjQgY29yZTJfNjQi
CiMgUFJFRkVSUkVEX1ZFUlNJT05fdWNsaWJjPSR7VUNMSUJDVkVSU0lPTn0KUFJFRkVSUkVEX1ZF
UlNJT05fdWNsaWJjPSIwLjkuMzMiCiMgTVVMVElfUFJPVklERVJfV0hJVEVMSVNUPXZpcnR1YWwv
bGliaW50bCB2aXJ0dWFsL2xpYmludGwtbmF0aXZlIHZpcnR1YWwvbmF0aXZlc2RrLWxpYmludGwg
dmlydHVhbC94c2VydmVyIHZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcy1uYXRpdmUgdmlydHVh
bC91cGRhdGUtYWx0ZXJuYXRpdmVzCk1VTFRJX1BST1ZJREVSX1dISVRFTElTVD0idmlydHVhbC9s
aWJpbnRsIHZpcnR1YWwvbGliaW50bC1uYXRpdmUgdmlydHVhbC9uYXRpdmVzZGstbGliaW50bCB2
aXJ0dWFsL3hzZXJ2ZXIgdmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzLW5hdGl2ZSB2aXJ0dWFs
L3VwZGF0ZS1hbHRlcm5hdGl2ZXMiCiMgUEtHX0NPTkZJR19ESVNBQkxFX1VOSU5TVEFMTEVEPXll
cwpleHBvcnQgUEtHX0NPTkZJR19ESVNBQkxFX1VOSU5TVEFMTEVEPSJ5ZXMiCiMgREVTQ1JJUFRJ
T05fJHtQTn0tZGV2PSR7REVTQ1JJUFRJT059ICBUaGlzIHBhY2thZ2UgY29udGFpbnMgc3ltYm9s
aWMgbGlua3MsIGhlYWRlciBmaWxlcywgYW5kIHJlbGF0ZWQgaXRlbXMgbmVjZXNzYXJ5IGZvciBz
b2Z0d2FyZSBkZXZlbG9wbWVudC4KREVTQ1JJUFRJT05fYmJsYXllcnMtZGV2PSJiYmxheWVycyB2
ZXJzaW9uIDEuMC1yMCAgVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHN5bWJvbGljIGxpbmtzLCBoZWFk
ZXIgZmlsZXMsIGFuZCByZWxhdGVkIGl0ZW1zIG5lY2Vzc2FyeSBmb3Igc29mdHdhcmUgZGV2ZWxv
cG1lbnQuIgojIFBBQ0tBR0VSREVQVEFTSz1kb19wYWNrYWdlX3dyaXRlClBBQ0tBR0VSREVQVEFT
Sz0iZG9fcGFja2FnZV93cml0ZSIKIyBMSU5LRVJfSEFTSF9TVFlMRV9taXBzNjRlbD1zeXN2CkxJ
TktFUl9IQVNIX1NUWUxFX21pcHM2NGVsPSJzeXN2IgojIGluZm9kaXI9JHtkYXRhZGlyfS9pbmZv
CmV4cG9ydCBpbmZvZGlyPSIvdXNyL3NoYXJlL2luZm8iCiMgQlVJTERDRkdfSEVBREVSPUJ1aWxk
IENvbmZpZ3VyYXRpb246CkJVSUxEQ0ZHX0hFQURFUj0iQnVpbGQgQ29uZmlndXJhdGlvbjoiCiMg
bGliZGlyPSR7ZXhlY19wcmVmaXh9LyR7YmFzZWxpYn0KZXhwb3J0IGxpYmRpcj0iL3Vzci9saWIi
CiMgU0VQUFVLVV9ORVdSRVBPUlQ9Tm9uZQojIERJU1RST09WRVJSSURFUz0ke0BkLmdldFZhcign
RElTVFJPJywgVHJ1ZSkgb3IgJyd9CkRJU1RST09WRVJSSURFUz0icG9reSIKIyBBUFBFTkQ9IGNv
bnNvbGU9dHR5UENIMSwxMTUyMDAgY29uc29sZT10dHkwIHZpZGVvPXZlc2FmYiB2Z2E9MHgzMTgK
QVBQRU5EPSJjb25zb2xlPXR0eVBDSDEsMTE1MjAwIGNvbnNvbGU9dHR5MCB2aWRlbz12ZXNhZmIg
dmdhPTB4MzE4IgojIFRVTkVfRkVBVFVSRVNfdHVuZS14ODYtNjQ9bTY0ClRVTkVfRkVBVFVSRVNf
dHVuZS14ODYtNjQ9Im02NCIKIyBBTExPV19FTVBUWV8ke1BOfS1kZXY9MQpBTExPV19FTVBUWV9i
YmxheWVycy1kZXY9IjEiCiMgQ09NTUVSQ0lBTF9RVD0KIyBiYXNlX3ByZWZpeD0KIyBBU05FRURF
RF9wbi14c2VydmVyLWtkcml2ZS14b21hcD0KIyBMSU5LRVJfSEFTSF9TVFlMRT1nbnUKTElOS0VS
X0hBU0hfU1RZTEU9ImdudSIKIyBNRVRBREFUQV9CUkFOQ0g9JHtAYmFzZV9kZXRlY3RfYnJhbmNo
KGQpfQpNRVRBREFUQV9CUkFOQ0g9Ijx1bmtub3duPiIKIyBQUkVGRVJSRURfVkVSU0lPTl9nY2Mt
Y3Jvc3NzZGstaW5pdGlhbD0ke1NES0dDQ1ZFUlNJT059ClBSRUZFUlJFRF9WRVJTSU9OX2djYy1j
cm9zc3Nkay1pbml0aWFsPSI0LjclIgojIENDPSR7Q0NBQ0hFfSR7SE9TVF9QUkVGSVh9Z2NjICR7
SE9TVF9DQ19BUkNIfSR7VE9PTENIQUlOX09QVElPTlN9CmV4cG9ydCBDQz0iaTU4Ni1wb2t5LWxp
bnV4LWdjYyAgLW0zMiAgICAtbWFyY2g9Y29yZTIgLW1zc2UzIC1tdHVuZT1nZW5lcmljIC1tZnBt
YXRoPXNzZSAtLXN5c3Jvb3Q9L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxk
LWZyaTIvdG1wL3N5c3Jvb3RzL2ZyaTItbm9lbWdkIgojIEJCX0hBU0hDT05GSUdfV0hJVEVMSVNU
PSR7QkJfSEFTSEJBU0VfV0hJVEVMSVNUfSBEQVRFIFRJTUUgU0VTU0lPTl9NQU5BR0VSIERCVVNf
U0VTU0lPTl9CVVNfQUREUkVTUyBTU0hfQUdFTlRfUElEIFhER19TRVNTSU9OX0NPT0tJRSBTU0hf
QVVUSF9TT0NLIFhBVVRIT1JJVFkgUFNFVURPX0JVSUxEIEJCX0VOVl9FWFRSQVdISVRFIERJU0FC
TEVfU0FOSVRZX0NIRUNLUyBQQVJBTExFTF9NQUtFIEJCX05VTUJFUl9USFJFQURTCkJCX0hBU0hD
T05GSUdfV0hJVEVMSVNUPSJUTVBESVIgRklMRSBQQVRIIFBXRCBCQl9UQVNLSEFTSCBCQlBBVEgg
RExfRElSIFNTVEFURV9ESVIgVEhJU0RJUiBGSUxFU0VYVFJBUEFUSFMgRklMRV9ESVJOQU1FIEhP
TUUgTE9HTkFNRSBTSEVMTCBURVJNIFVTRVIgRklMRVNQQVRIIFNUQUdJTkdfRElSX0hPU1QgU1RB
R0lOR19ESVJfVEFSR0VUIENPUkVCQVNFIFBSU0VSVl9IT1NUIFBSU0VSVl9QT1JUIFBSU0VSVl9E
VU1QRElSIFBSU0VSVl9EVU1QRklMRSBQUlNFUlZfTE9DS0RPV04gUEFSQUxMRUxfTUFLRSBDQ0FD
SEVfRElSIEVYVEVSTkFMX1RPT0xDSEFJTiBDQ0FDSEUgQ0NBQ0hFX0RJU0FCTEUgREFURSBUSU1F
IFNFU1NJT05fTUFOQUdFUiBEQlVTX1NFU1NJT05fQlVTX0FERFJFU1MgU1NIX0FHRU5UX1BJRCBY
REdfU0VTU0lPTl9DT09LSUUgU1NIX0FVVEhfU09DSyBYQVVUSE9SSVRZIFBTRVVET19CVUlMRCBC
Ql9FTlZfRVhUUkFXSElURSBESVNBQkxFX1NBTklUWV9DSEVDS1MgUEFSQUxMRUxfTUFLRSBCQl9O
VU1CRVJfVEhSRUFEUyIKIyBUSElTRElSPSR7QG9zLnBhdGguZGlybmFtZShkLmdldFZhcignRklM
RScsIFRydWUpKX0KVEhJU0RJUj0iL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1
aWxkLWZyaTIvY29uZiIKIyBIR0RJUj0ke0NPX0RJUn0vaGcKSEdESVI9Ii9ob21lL21pc2hhbC95
b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL2Rvd25sb2Fkcy9oZyIKIyBQQUNLQUdFX0VY
VFJBX0FSQ0hTPSR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLSR7REVGQVVMVFRVTkV9fQpQQUNL
QUdFX0VYVFJBX0FSQ0hTPSJ4ODYgaTM4NiBpNDg2IGk1ODYgaTY4NiBjb3JlMiIKIyBTREtHQ0NW
RVJTSU9OPSR7R0NDVkVSU0lPTn0KU0RLR0NDVkVSU0lPTj0iNC43JSIKIyBJTUFHRV9MSU5LX05B
TUU9JHtJTUFHRV9CQVNFTkFNRX0tJHtNQUNISU5FfQpJTUFHRV9MSU5LX05BTUU9ImJibGF5ZXJz
LWZyaTItbm9lbWdkIgojIE1VTFRJTElCX1ZBUklBTlRTPQojIFBSRU1JUlJPUlM9YnpyOi8vLiov
LiogICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxu
IGN2czovLy4qLy4qICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9z
b3VyY2VzLyBcbiBnaXQ6Ly8uKi8uKiAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9y
Zy9taXJyb3Ivc291cmNlcy8gXG4gaGc6Ly8uKi8uKiAgICBodHRwOi8vZG93bmxvYWRzLnlvY3Rv
cHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIG9zYzovLy4qLy4qICAgaHR0cDovL2Rvd25s
b2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBwNDovLy4qLy4qICAgIGh0
dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gc3ZrOi8v
LiovLiogICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMv
IFxuIHN2bjovLy4qLy4qICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJv
ci9zb3VyY2VzLyBcbgpQUkVNSVJST1JTPSJienI6Ly8uKi8uKiAgIGh0dHA6Ly9kb3dubG9hZHMu
eW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gY3ZzOi8vLiovLiogICBodHRwOi8v
ZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIGdpdDovLy4qLy4q
ICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBo
ZzovLy4qLy4qICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291
cmNlcy8gXG4gb3NjOi8vLiovLiogICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcv
bWlycm9yL3NvdXJjZXMvIFxuIHA0Oi8vLiovLiogICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3By
b2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBzdms6Ly8uKi8uKiAgIGh0dHA6Ly9kb3dubG9h
ZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gc3ZuOi8vLiovLiogICBodHRw
Oi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIgojIEJVSUxE
X09TPSR7QG9zLnVuYW1lKClbMF0ubG93ZXIoKX0KQlVJTERfT1M9ImxpbnV4IgojIFBTRVVET19E
SVNBQkxFRD0xCmV4cG9ydCBQU0VVRE9fRElTQUJMRUQ9IjEiCiMgSU1BR0VfRlNUWVBFUz0gZXh0
MyBjcGlvLmd6IGxpdmUKSU1BR0VfRlNUWVBFUz0iZXh0MyBjcGlvLmd6IGxpdmUiCiMgUUVNVV9P
UFRJT05TX2U1NTAwPS1jcHUgZTU1MDAKUUVNVV9PUFRJT05TX2U1NTAwPSItY3B1IGU1NTAwIgoj
IE5BVElWRUxTQlNUUklORz1VYnVudHUtMTIuMDQKTkFUSVZFTFNCU1RSSU5HPSJVYnVudHUtMTIu
MDQiCiMgUEFDS0FHRV9DTEFTU0VTPXBhY2thZ2VfcnBtClBBQ0tBR0VfQ0xBU1NFUz0icGFja2Fn
ZV9ycG0iCiMgQkFTRV9MSUJfdHVuZS1pNTg2PWxpYgpCQVNFX0xJQl90dW5lLWk1ODY9ImxpYiIK
IyBQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0b19xZW11eDg2PTMuNCUKUFJFRkVSUkVEX1ZF
UlNJT05fbGludXgteW9jdG9fcWVtdXg4Nj0iMy40JSIKIyBTVEFHSU5HX0xPQURFUl9ESVI9JHtT
VEFHSU5HX0RJUl9IT1NUfS9sb2FkZXIKU1RBR0lOR19MT0FERVJfRElSPSIvaG9tZS9taXNoYWwv
eW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvc3lzcm9vdHMvZnJpMi1ub2VtZ2Qv
bG9hZGVyIgojIFNTVEFURV9QS0c9JHtTU1RBVEVfRElSfS8ke1NTVEFURV9QS0dOQU1FfQpTU1RB
VEVfUEtHPSIvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi9zc3Rh
dGUtY2FjaGUvSU4vc3N0YXRlLWJibGF5ZXJzLWNvcmUyLXBva3ktbGludXgtMS4wLXIwLWNvcmUy
LTItSU5WQUxJRCIKIyBSREVQRU5EUz0KIyBMSUJDX0RFUEVOREVOQ0lFUz1saWJzZWdmYXVsdCAJ
CSAgICAgZWdsaWJjIAkJICAgICBlZ2xpYmMtZGJnIAkJICAgICBlZ2xpYmMtZGV2IAkJICAgICBl
Z2xpYmMtdXRpbHMgCQkgICAgIGVnbGliYy10aHJlYWQtZGIgCQkgICAgICR7QGdldF9saWJjX2xv
Y2FsZXNfZGVwZW5kZW5jaWVzKGQpfQpMSUJDX0RFUEVOREVOQ0lFUz0ibGlic2VnZmF1bHQgCQkg
ICAgIGVnbGliYyAJCSAgICAgZWdsaWJjLWRiZyAJCSAgICAgZWdsaWJjLWRldiAJCSAgICAgZWds
aWJjLXV0aWxzIAkJICAgICBlZ2xpYmMtdGhyZWFkLWRiIAkJICAgICAJZWdsaWJjLWxvY2FsZWRh
dGEtaTE4biAJZWdsaWJjLWdjb252LWlibTg1MCAJZWdsaWJjLWdjb252LWNwMTI1MiAJZWdsaWJj
LWdjb252LWlzbzg4NTktMSAJZWdsaWJjLWdjb252LWlzbzg4NTktMTUiCiMgRElTVFJPX0VYVFJB
X1JERVBFTkRTPSAgJHtQT0tZX0RFRkFVTFRfRVhUUkFfUkRFUEVORFN9CkRJU1RST19FWFRSQV9S
REVQRU5EUz0icGFja2FnZWdyb3VwLWNvcmUtYm9vdCIKIyBMT0dOQU1FPW1pc2hhbApleHBvcnQg
TE9HTkFNRT0ibWlzaGFsIgojIFBSSU5DPTAKUFJJTkM9IjAiCiMgT0VfVEVSTUlOQUw9YXV0bwpP
RV9URVJNSU5BTD0iYXV0byIKIyBQUkVGRVJSRURfUFJPVklERVJfbGludXgtbGliYy1oZWFkZXJz
PWxpbnV4LWxpYmMtaGVhZGVycwpQUkVGRVJSRURfUFJPVklERVJfbGludXgtbGliYy1oZWFkZXJz
PSJsaW51eC1saWJjLWhlYWRlcnMiCiMgQkJGSUxFX1BBVFRFUk5fY29yZT1eL2hvbWUvbWlzaGFs
L3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEvCkJCRklMRV9QQVRURVJOX2NvcmU9Il4vaG9tZS9t
aXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvbWV0YS8iCiMgT0VfVEVSTUlOQUxfRVhQT1JUUz1Y
QVVUSE9SSVRZIFNIRUxMIERCVVNfU0VTU0lPTl9CVVNfQUREUkVTUyBESVNQTEFZIEVYVFJBX09F
TUFLRSBTQ1JFRU5ESVIKT0VfVEVSTUlOQUxfRVhQT1JUUz0iWEFVVEhPUklUWSBTSEVMTCBEQlVT
X1NFU1NJT05fQlVTX0FERFJFU1MgRElTUExBWSBFWFRSQV9PRU1BS0UgU0NSRUVORElSIgojIFRV
TkVfRkVBVFVSRVNfdHVuZS1jb3JlMj0ke1RVTkVfRkVBVFVSRVNfdHVuZS14ODZ9IGNvcmUyClRV
TkVfRkVBVFVSRVNfdHVuZS1jb3JlMj0ibTMyIGNvcmUyIgojIFBSRUZFUlJFRF9QUk9WSURFUl92
aXJ0dWFsL2xpYngxMT1saWJ4MTEKUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGlieDExPSJs
aWJ4MTEiCiMgVEFSR0VUX1BSRUZJWD0ke1RBUkdFVF9TWVN9LQpUQVJHRVRfUFJFRklYPSJpNTg2
LXBva3ktbGludXgtIgojIEFTTkVFREVEX3BuLWRpc3RjYz0KIyBNQUNISU5FX0ZFQVRVUkVTPSBz
Y3JlZW4ga2V5Ym9hcmQgcGNpIHVzYmhvc3QgZXh0MiBleHQzIHg4NiAgICAgICAgICAgICAgICAg
ICAgICBhY3BpIHNlcmlhbCB1c2JnYWRnZXQgYWxzYSB3aWZpIDNnIHBjYmlvcyBlZmkke0BvZS51
dGlscy5mZWF0dXJlc19iYWNrZmlsbCgiTUFDSElORV9GRUFUVVJFUyIsZCl9Ck1BQ0hJTkVfRkVB
VFVSRVM9InNjcmVlbiBrZXlib2FyZCBwY2kgdXNiaG9zdCBleHQyIGV4dDMgeDg2ICAgICAgICAg
ICAgICAgICAgICAgIGFjcGkgc2VyaWFsIHVzYmdhZGdldCBhbHNhIHdpZmkgM2cgcGNiaW9zIGVm
aSBydGMiCiMgU1lTTElOVVhfT1BUUz1zZXJpYWwgMHhiMDYwIDMzMTgKU1lTTElOVVhfT1BUUz0i
c2VyaWFsIDB4YjA2MCAzMzE4IgojIFNUQUdJTkdfQklORElSX1RPT0xDSEFJTj0ke1NUQUdJTkdf
RElSX05BVElWRX0ke2JpbmRpcl9uYXRpdmV9LyR7VFVORV9QS0dBUkNIfSR7VEFSR0VUX1ZFTkRP
Un0tJHtUQVJHRVRfT1N9ClNUQUdJTkdfQklORElSX1RPT0xDSEFJTj0iL2hvbWUvbWlzaGFsL3lv
Y3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91
c3IvYmluL2NvcmUyLXBva3ktbGludXgiCiMgVEFSR0VUX0xERkxBR1M9LVdsLC1PMSAke1RBUkdF
VF9MSU5LX0hBU0hfU1RZTEV9ICR7QVNORUVERUR9CmV4cG9ydCBUQVJHRVRfTERGTEFHUz0iLVds
LC1PMSAtV2wsLS1oYXNoLXN0eWxlPWdudSAtV2wsLS1hcy1uZWVkZWQiCiMgSE9TVF9PUz0ke1RB
UkdFVF9PU30KSE9TVF9PUz0ibGludXgiCiMgVFVORV9QS0dBUkNIX3R1bmUtY29yZTItNjQteDMy
PWNvcmUyXzY0X3gzMgpUVU5FX1BLR0FSQ0hfdHVuZS1jb3JlMi02NC14MzI9ImNvcmUyXzY0X3gz
MiIKIyBNVUxUSU1BQ0hfSE9TVF9TWVM9JHtQQUNLQUdFX0FSQ0h9JHtIT1NUX1ZFTkRPUn0tJHtI
T1NUX09TfQpNVUxUSU1BQ0hfSE9TVF9TWVM9ImNvcmUyLXBva3ktbGludXgiCiMgUFJFRkVSUkVE
X1BST1ZJREVSX3ZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcz11cGRhdGUtYWx0ZXJuYXRpdmVz
LWN3b3J0aApQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzPSJ1
cGRhdGUtYWx0ZXJuYXRpdmVzLWN3b3J0aCIKIyBUQVJHRVRfRlBVPQojIERPVERFQlVHLWRiZz0k
e2JpbmRpcn0vLmRlYnVnICR7c2JpbmRpcn0vLmRlYnVnICR7bGliZXhlY2Rpcn0vLmRlYnVnICR7
bGliZGlyfS8uZGVidWcgJHtiYXNlX2JpbmRpcn0vLmRlYnVnICR7YmFzZV9zYmluZGlyfS8uZGVi
dWcgJHtiYXNlX2xpYmRpcn0vLmRlYnVnICR7bGliZGlyfS8ke0JQTn0vLmRlYnVnICR7bGliZGly
fS9tYXRjaGJveC1wYW5lbC8uZGVidWcgL3Vzci9zcmMvZGVidWcKRE9UREVCVUctZGJnPSIvdXNy
L2Jpbi8uZGVidWcgL3Vzci9zYmluLy5kZWJ1ZyAvdXNyL2xpYmV4ZWMvLmRlYnVnIC91c3IvbGli
Ly5kZWJ1ZyAvYmluLy5kZWJ1ZyAvc2Jpbi8uZGVidWcgL2xpYi8uZGVidWcgL3Vzci9saWIvYmJs
YXllcnMvLmRlYnVnIC91c3IvbGliL21hdGNoYm94LXBhbmVsLy5kZWJ1ZyAvdXNyL3NyYy9kZWJ1
ZyIKIyBNQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMPXJ0YwpNQUNISU5FX0ZFQVRVUkVTX0JBQ0tG
SUxMPSJydGMiCiMgUEFDS0FHRV9BUkNIUz1hbGwgYW55IG5vYXJjaCAke1BBQ0tBR0VfRVhUUkFf
QVJDSFN9ICR7TUFDSElORV9BUkNIfQpQQUNLQUdFX0FSQ0hTPSJhbGwgYW55IG5vYXJjaCB4ODYg
aTM4NiBpNDg2IGk1ODYgaTY4NiBjb3JlMiBmcmkyX25vZW1nZCIKIyBHTlVfTUlSUk9SPWZ0cDov
L2Z0cC5nbnUub3JnL2dudQpHTlVfTUlSUk9SPSJmdHA6Ly9mdHAuZ251Lm9yZy9nbnUiCiMgREVQ
TE9ZX0RJUj0ke1RNUERJUn0vZGVwbG95CkRFUExPWV9ESVI9Ii9ob21lL21pc2hhbC95b2N0by9w
b2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC9kZXBsb3kiCiMgQVNORUVERURfcG4tcGNpdXRp
bHM9CiMgUEFDS0FHRV9BUkNIPSR7VFVORV9QS0dBUkNIfQpQQUNLQUdFX0FSQ0g9ImNvcmUyIgoj
IE1BQ0hJTkVfRVhUUkFfUkRFUEVORFM9CiMgRVhUUkFfT0VDT05GPQojIFFFTVVfT1BUSU9OU19l
NTAwdjI9LWNwdSBlNTAwdjIKUUVNVV9PUFRJT05TX2U1MDB2Mj0iLWNwdSBlNTAwdjIiCiMgU0hM
SUJTV09SS0RJUj0ke1dPUktESVJ9L3NobGlicwpTSExJQlNXT1JLRElSPSIvaG9tZS9taXNoYWwv
eW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvd29yay9jb3JlMi1wb2t5LWxpbnV4
L2JibGF5ZXJzLTEuMC1yMC9zaGxpYnMiCiMgQVNORUVERURfcG4tcHV6emxlcz0KIyBTSUdHRU5f
RVhDTFVERVJFQ0lQRVNfQUJJU0FGRT0gIHN5c3Zpbml0LWluaXR0YWIgc2hhZG93LXNlY3VyZXR0
eSBvcGtnLWNvbmZpZy1iYXNlIG5ldGJhc2UgZm9ybWZhY3RvciB4c2VydmVyLXhmODYtY29uZmln
IHBvaW50ZXJjYWwgYmFzZS1maWxlcyBrZXltYXBzIHVkZXYtZXh0cmFjb25mIHBhY2thZ2Vncm91
cC14MTEteHNlcnZlciAKU0lHR0VOX0VYQ0xVREVSRUNJUEVTX0FCSVNBRkU9InN5c3Zpbml0LWlu
aXR0YWIgc2hhZG93LXNlY3VyZXR0eSBvcGtnLWNvbmZpZy1iYXNlIG5ldGJhc2UgZm9ybWZhY3Rv
ciB4c2VydmVyLXhmODYtY29uZmlnIHBvaW50ZXJjYWwgYmFzZS1maWxlcyBrZXltYXBzIHVkZXYt
ZXh0cmFjb25mIHBhY2thZ2Vncm91cC14MTEteHNlcnZlciIKIyBQUk9WSURFUz0ke1B9ICR7UEZ9
ICR7UE59IApQUk9WSURFUz0iYmJsYXllcnMtMS4wIGJibGF5ZXJzLTEuMC1yMCBiYmxheWVycyIK
IyBNQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUz0gZ3J1YgpNQUNISU5FX0VTU0VOVElB
TF9FWFRSQV9SREVQRU5EUz0iZ3J1YiIKIyBTVEFNUD0ke1RNUERJUn0vc3RhbXBzLyR7TVVMVElN
QUNIX1RBUkdFVF9TWVN9LyR7UE59LSR7RVhURU5EUEV9JHtQVn0tJHtQUn0KU1RBTVA9Ii9ob21l
L21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC9zdGFtcHMvY29yZTIt
cG9reS1saW51eC9iYmxheWVycy0xLjAtcjAiCiMgUFJBVVRPSU5YPSR7UEZ9ClBSQVVUT0lOWD0i
YmJsYXllcnMtMS4wLXIwIgojIEJCSU5DTFVERUxPR1M9eWVzCkJCSU5DTFVERUxPR1M9InllcyIK
IyBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJpbnRsPWVnbGliYwpQUkVGRVJSRURfUFJP
VklERVJfdmlydHVhbC9saWJpbnRsPSJlZ2xpYmMiCiMgQlVJTERfTERfQVJDSD0KIyBCQl9ERUZB
VUxUX1RBU0s9YnVpbGQKQkJfREVGQVVMVF9UQVNLPSJidWlsZCIKIyBUVU5FX1BLR0FSQ0hfdHVu
ZS1jb3JlMj1jb3JlMgpUVU5FX1BLR0FSQ0hfdHVuZS1jb3JlMj0iY29yZTIiCiMgUlBNREVQUz0k
e1NUQUdJTkdfTElCRElSX05BVElWRX0vcnBtL2Jpbi9ycG1kZXBzLW9lY29yZSAtLW1hY3JvcyAk
e1NUQUdJTkdfTElCRElSX05BVElWRX0vcnBtL21hY3JvcyAtLWRlZmluZSAnX3JwbWZjX21hZ2lj
X3BhdGggJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtkYXRhZGlyX25hdGl2ZX0vbWlzYy9tYWdpYy5t
Z2MnIC0tcnBtcG9wdCAke1NUQUdJTkdfTElCRElSX05BVElWRX0vcnBtL3JwbXBvcHQKUlBNREVQ
Uz0iL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jv
b3RzL3g4Nl82NC1saW51eC91c3IvbGliL3JwbS9iaW4vcnBtZGVwcy1vZWNvcmUgLS1tYWNyb3Mg
L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jvb3Rz
L3g4Nl82NC1saW51eC91c3IvbGliL3JwbS9tYWNyb3MgLS1kZWZpbmUgJ19ycG1mY19tYWdpY19w
YXRoIC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC9zeXNy
b290cy94ODZfNjQtbGludXgvdXNyL3NoYXJlL21pc2MvbWFnaWMubWdjJyAtLXJwbXBvcHQgL2hv
bWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jvb3RzL3g4
Nl82NC1saW51eC91c3IvbGliL3JwbS9ycG1wb3B0IgojIFFBX0xPR0ZJTEU9JHtUTVBESVJ9L3Fh
LmxvZwpRQV9MT0dGSUxFPSIvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQt
ZnJpMi90bXAvcWEubG9nIgojIEJCRklMRV9QUklPUklUWV9mcmkyPTYKQkJGSUxFX1BSSU9SSVRZ
X2ZyaTI9IjYiCiMgQkJfTlVNQkVSX1RIUkVBRFM9MgpCQl9OVU1CRVJfVEhSRUFEUz0iMiIKIyBi
YXNlX2xpYmRpcl9uYXRpdmVzZGs9L2xpYgpiYXNlX2xpYmRpcl9uYXRpdmVzZGs9Ii9saWIiCiMg
QkFTRV9MSUJfdHVuZS14ODY9bGliCkJBU0VfTElCX3R1bmUteDg2PSJsaWIiCiMgUEFDS0FHRUZV
TkNTPXBhY2thZ2VfZ2V0X2F1dG9fcHIgICAgICAgICAgICAgICAgIHBlcmZvcm1fcGFja2FnZWNv
cHkgICAgICAgICAgICAgICAgICR7UEFDS0FHRV9QUkVQUk9DRVNTX0ZVTkNTfSAgICAgICAgICAg
ICAgICAgcGFja2FnZV9kb19zcGxpdF9sb2NhbGVzICAgICAgICAgICAgICAgICBzcGxpdF9hbmRf
c3RyaXBfZmlsZXMgICAgICAgICAgICAgICAgIGZpeHVwX3Blcm1zICAgICAgICAgICAgICAgICBw
b3B1bGF0ZV9wYWNrYWdlcyAgICAgICAgICAgICAgICAgcGFja2FnZV9kb19maWxlZGVwcyAgICAg
ICAgICAgICAgICAgcGFja2FnZV9kb19zaGxpYnMgICAgICAgICAgICAgICAgIHBhY2thZ2VfZG9f
cGtnY29uZmlnICAgICAgICAgICAgICAgICByZWFkX3NobGliZGVwcyAgICAgICAgICAgICAgICAg
cGFja2FnZV9kZXBjaGFpbnMgICAgICAgICAgICAgICAgIGVtaXRfcGtnZGF0YSAgZG9fcGFja2Fn
ZV9xYSAKUEFDS0FHRUZVTkNTPSJwYWNrYWdlX2dldF9hdXRvX3ByICAgICAgICAgICAgICAgICBw
ZXJmb3JtX3BhY2thZ2Vjb3B5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2th
Z2VfZG9fc3BsaXRfbG9jYWxlcyAgICAgICAgICAgICAgICAgc3BsaXRfYW5kX3N0cmlwX2ZpbGVz
ICAgICAgICAgICAgICAgICBmaXh1cF9wZXJtcyAgICAgICAgICAgICAgICAgcG9wdWxhdGVfcGFj
a2FnZXMgICAgICAgICAgICAgICAgIHBhY2thZ2VfZG9fZmlsZWRlcHMgICAgICAgICAgICAgICAg
IHBhY2thZ2VfZG9fc2hsaWJzICAgICAgICAgICAgICAgICBwYWNrYWdlX2RvX3BrZ2NvbmZpZyAg
ICAgICAgICAgICAgICAgcmVhZF9zaGxpYmRlcHMgICAgICAgICAgICAgICAgIHBhY2thZ2VfZGVw
Y2hhaW5zICAgICAgICAgICAgICAgICBlbWl0X3BrZ2RhdGEgIGRvX3BhY2thZ2VfcWEiCiMgUFdE
PS9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyCmV4cG9ydCBQV0Q9
Ii9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyIgojIEJVSUxEQ0ZH
X05FRURFRFZBUlM9VEFSR0VUX0FSQ0ggVEFSR0VUX09TCkJVSUxEQ0ZHX05FRURFRFZBUlM9IlRB
UkdFVF9BUkNIIFRBUkdFVF9PUyIKIyBHQ0NWRVJTSU9OPTQuNyUKR0NDVkVSU0lPTj0iNC43JSIK
IyBCQVNFTElCX3Bvd2VycGM2ND1saWI2NApCQVNFTElCX3Bvd2VycGM2ND0ibGliNjQiCiMgRVJS
T1JfUUE9ZGV2LXNvIGRlYnVnLWRlcHMgZGV2LWRlcHMgZGVidWctZmlsZXMgYXJjaCBsYTIgcGtn
Y29uZmlnIGxhIHBlcm1zIHVzZWxlc3MtcnBhdGhzIHJwYXRocyBzdGF0aWNkZXYgbGRmbGFncwpF
UlJPUl9RQT0iZGV2LXNvIGRlYnVnLWRlcHMgZGV2LWRlcHMgZGVidWctZmlsZXMgYXJjaCBsYTIg
cGtnY29uZmlnIGxhIHBlcm1zIHVzZWxlc3MtcnBhdGhzIHJwYXRocyBzdGF0aWNkZXYgbGRmbGFn
cyIKIyBUVU5FX0ZFQVRVUkVTX3R1bmUtaTU4Nj0ke1RVTkVfRkVBVFVSRVNfdHVuZS14ODZ9IGk1
ODYKVFVORV9GRUFUVVJFU190dW5lLWk1ODY9Im0zMiBpNTg2IgojIFBBQ0tBR0VfRVhUUkFfQVJD
SFNfdHVuZS1jb3JlMj0ke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS14ODZ9IGkzODYgaTQ4NiBp
NTg2IGk2ODYgY29yZTIKUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcmUyPSJ4ODYgaTM4NiBp
NDg2IGk1ODYgaTY4NiBjb3JlMiIKIyBCQVNFX0xJQl90dW5lLWNvcmUyLTY0LXgzMj1saWJ4MzIK
QkFTRV9MSUJfdHVuZS1jb3JlMi02NC14MzI9ImxpYngzMiIKIyBFWFRFTkRQS0dWPSR7RVhURU5E
UEtHRVZFUn0ke1BLR1Z9LSR7UEtHUn0KRVhURU5EUEtHVj0iMS4wLXIwIgojIENQUEZMQUdTPSR7
VEFSR0VUX0NQUEZMQUdTfQojIFBSRUZFUlJFRF9WRVJTSU9OX2d6aXAtbmF0aXZlPTEuNQpQUkVG
RVJSRURfVkVSU0lPTl9nemlwLW5hdGl2ZT0iMS41IgojIFFBUEFUSFRFU1Q9Tm9uZQojIFNTVEFU
RVRBU0tTPSBkb19wb3B1bGF0ZV9zeXNyb290IGRvX3BhY2thZ2UgZG9fcGFja2FnZV93cml0ZV9y
cG0gZG9fcG9wdWxhdGVfbGljClNTVEFURVRBU0tTPSJkb19wb3B1bGF0ZV9zeXNyb290IGRvX3Bh
Y2thZ2UgZG9fcGFja2FnZV93cml0ZV9ycG0gZG9fcG9wdWxhdGVfbGljIgojIFNPTElCU19kYXJ3
aW49LiouZHlsaWIKU09MSUJTX2Rhcndpbj0iLiouZHlsaWIiCiMgU1NUQVRFX01BTk1BQ0g9JHtT
U1RBVEVfUEtHQVJDSH0KU1NUQVRFX01BTk1BQ0g9ImNvcmUyIgojIFBSRUZFUlJFRF9QUk9WSURF
Ul92aXJ0dWFsL2RiPWRiClBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2RiPSJkYiIKIyBCUD0k
e0JQTn0tJHtQVn0KQlA9ImJibGF5ZXJzLTEuMCIKIyBQS0dEQVRBX0RJUj0ke1RNUERJUn0vcGtn
ZGF0YS8ke01VTFRJTUFDSF9UQVJHRVRfU1lTfQpQS0dEQVRBX0RJUj0iL2hvbWUvbWlzaGFsL3lv
Y3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3BrZ2RhdGEvY29yZTItcG9reS1saW51
eCIKIyBYTElCU19NSVJST1I9aHR0cDovL3hsaWJzLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlClhM
SUJTX01JUlJPUj0iaHR0cDovL3hsaWJzLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlIgojIFNES19B
UkNIPSR7QlVJTERfQVJDSH0KU0RLX0FSQ0g9Ing4Nl82NCIKIyBUVU5FX1BLR0FSQ0hfdHVuZS14
ODY9eDg2ClRVTkVfUEtHQVJDSF90dW5lLXg4Nj0ieDg2IgojIFNIRUxMPS9iaW4vYmFzaApleHBv
cnQgU0hFTEw9Ii9iaW4vYmFzaCIKIyBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC91cGRhdGUt
YWx0ZXJuYXRpdmVzLW5hdGl2ZT1vcGtnLW5hdGl2ZQpQUkVGRVJSRURfUFJPVklERVJfdmlydHVh
bC91cGRhdGUtYWx0ZXJuYXRpdmVzLW5hdGl2ZT0ib3BrZy1uYXRpdmUiCiMgREVCVUdGSUxFRElS
RUNUT1JZLWRiZz0vdXNyL2xpYi9kZWJ1ZyAvdXNyL3NyYy9kZWJ1ZwpERUJVR0ZJTEVESVJFQ1RP
UlktZGJnPSIvdXNyL2xpYi9kZWJ1ZyAvdXNyL3NyYy9kZWJ1ZyIKIyBERVBDSEFJTl9QT1NUPS1k
ZXYgLWRiZwpERVBDSEFJTl9QT1NUPSItZGV2IC1kYmciCiMgUFJFRkVSUkVEX1BST1ZJREVSX3hm
ODYtdmlkZW8taW50ZWw9eGY4Ni12aWRlby1pbnRlbApQUkVGRVJSRURfUFJPVklERVJfeGY4Ni12
aWRlby1pbnRlbD0ieGY4Ni12aWRlby1pbnRlbCIKIyBTSExJQlNESVI9JHtTVEFHSU5HX0RJUl9I
T1NUfS9zaGxpYnMKU0hMSUJTRElSPSIvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAv
YnVpbGQtZnJpMi90bXAvc3lzcm9vdHMvZnJpMi1ub2VtZ2Qvc2hsaWJzIgojIEJCX0dFTkVSQVRF
X01JUlJPUl9UQVJCQUxMUz0wCkJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUz0iMCIKIyBTU1RB
VEVfRElSPSR7VE9QRElSfS9zc3RhdGUtY2FjaGUKU1NUQVRFX0RJUj0iL2hvbWUvbWlzaGFsL3lv
Y3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvc3N0YXRlLWNhY2hlIgojIFRDTU9ERT1kZWZh
dWx0ClRDTU9ERT0iZGVmYXVsdCIKIyBJTUFHRV9ST09URlNfU0laRT02NTUzNgpJTUFHRV9ST09U
RlNfU0laRT0iNjU1MzYiCiMgRElTVFJPPXBva3kKdW5zZXQgRElTVFJPCiMgUkFOTElCPSR7SE9T
VF9QUkVGSVh9cmFubGliCmV4cG9ydCBSQU5MSUI9Imk1ODYtcG9reS1saW51eC1yYW5saWIiCiMg
TE9DQUxFX1NFQ1RJT049CiMgUlBNQlVJTEQ9cnBtYnVpbGQKUlBNQlVJTEQ9InJwbWJ1aWxkIgoj
IExJQkNfTE9DQUxFX0RFUEVOREVOQ0lFUz0JZWdsaWJjLWxvY2FsZWRhdGEtaTE4biAJZWdsaWJj
LWdjb252LWlibTg1MCAJZWdsaWJjLWdjb252LWNwMTI1MiAJZWdsaWJjLWdjb252LWlzbzg4NTkt
MSAJZWdsaWJjLWdjb252LWlzbzg4NTktMTUKTElCQ19MT0NBTEVfREVQRU5ERU5DSUVTPSJlZ2xp
YmMtbG9jYWxlZGF0YS1pMThuIAllZ2xpYmMtZ2NvbnYtaWJtODUwIAllZ2xpYmMtZ2NvbnYtY3Ax
MjUyIAllZ2xpYmMtZ2NvbnYtaXNvODg1OS0xIAllZ2xpYmMtZ2NvbnYtaXNvODg1OS0xNSIKIyBM
SUNFTlNFX0RJUkVDVE9SWT0ke0RFUExPWV9ESVJ9L2xpY2Vuc2VzCkxJQ0VOU0VfRElSRUNUT1JZ
PSIvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvZGVwbG95
L2xpY2Vuc2VzIgojIFQ9JHtXT1JLRElSfS90ZW1wClQ9Ii9ob21lL21pc2hhbC95b2N0by9wb2t5
LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC93b3JrL2NvcmUyLXBva3ktbGludXgvYmJsYXllcnMt
MS4wLXIwL3RlbXAiCiMgU1JDUkVWPUlOVkFMSUQKU1JDUkVWPSJJTlZBTElEIgojIFRVTkVfRkVB
VFVSRVNfdHVuZS14ODYtNjQteDMyPW14MzIKVFVORV9GRUFUVVJFU190dW5lLXg4Ni02NC14MzI9
Im14MzIiCiMgVFVORV9QS0dBUkNIX3R1bmUteDg2LTY0LXgzMj14ODZfNjRfeDMyClRVTkVfUEtH
QVJDSF90dW5lLXg4Ni02NC14MzI9Ing4Nl82NF94MzIiCiMgYmFzZV9zYmluZGlyPSR7YmFzZV9w
cmVmaXh9L3NiaW4KZXhwb3J0IGJhc2Vfc2JpbmRpcj0iL3NiaW4iCiMgVFVORV9QS0dBUkNIX3R1
bmUteDg2LTY0PXg4Nl82NApUVU5FX1BLR0FSQ0hfdHVuZS14ODYtNjQ9Ing4Nl82NCIKIyBSUE09
cnBtClJQTT0icnBtIgojIFRPT0xDSEFJTl9PUFRJT05TPSAtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJ
Ul9UQVJHRVR9ClRPT0xDSEFJTl9PUFRJT05TPSItLXN5c3Jvb3Q9L2hvbWUvbWlzaGFsL3lvY3Rv
L3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jvb3RzL2ZyaTItbm9lbWdkIgojIFNT
VEFURV9EVVBXSElURUxJU1Q9JHtERVBMT1lfRElSfS8gJHtUTVBESVJ9L3BrZ2RhdGEvICR7U1RB
R0lOR19MSUJESVJfTkFUSVZFfS8ke01VTFRJTUFDSF9UQVJHRVRfU1lTfSAke1NUQUdJTkdfRElS
X05BVElWRX0vdXNyL2xpYmV4ZWMvJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30gJHtTVEFHSU5HX0JJ
TkRJUl9OQVRJVkV9LyR7TVVMVElNQUNIX1RBUkdFVF9TWVN9ICR7U1RBR0lOR19ESVJfTkFUSVZF
fSR7aW5jbHVkZWRpcl9uYXRpdmV9L2djYy1idWlsZC1pbnRlcm5hbC0ke01VTFRJTUFDSF9UQVJH
RVRfU1lTfSAke1NUQUdJTkdfTElCRElSfS9weXRob24yLjcvY29uZmlnL01ha2VmaWxlICR7U1RB
R0lOR19MSUJESVJ9L2xpYnB5dGhvbjIuNyAke1NUQUdJTkdfSU5DRElSfS9weXRob24yLjcvcHlj
b25maWcuaCAke1NUQUdJTkdfRVRDRElSX05BVElWRX0vc2dtbCAke1NUQUdJTkdfREFUQURJUl9O
QVRJVkV9L3NnbWwKU1NUQVRFX0RVUFdISVRFTElTVD0iL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3kt
ZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL2RlcGxveS8gL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3kt
ZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3BrZ2RhdGEvIC9ob21lL21pc2hhbC95b2N0by9wb2t5
LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYi9j
b3JlMi1wb2t5LWxpbnV4IC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1m
cmkyL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYmV4ZWMvY29yZTItcG9reS1saW51
eCAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvc3lzcm9v
dHMveDg2XzY0LWxpbnV4L3Vzci9iaW4vY29yZTItcG9reS1saW51eCAvaG9tZS9taXNoYWwveW9j
dG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vz
ci9pbmNsdWRlL2djYy1idWlsZC1pbnRlcm5hbC1jb3JlMi1wb2t5LWxpbnV4IC9ob21lL21pc2hh
bC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC9zeXNyb290cy9mcmkyLW5vZW1n
ZC91c3IvbGliL3B5dGhvbjIuNy9jb25maWcvTWFrZWZpbGUgL2hvbWUvbWlzaGFsL3lvY3RvL3Bv
a3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jvb3RzL2ZyaTItbm9lbWdkL3Vzci9saWIv
bGlicHl0aG9uMi43IC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmky
L3RtcC9zeXNyb290cy9mcmkyLW5vZW1nZC91c3IvaW5jbHVkZS9weXRob24yLjcvcHljb25maWcu
aCAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvc3lzcm9v
dHMveDg2XzY0LWxpbnV4L2V0Yy9zZ21sIC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTgu
MC9idWlsZC1mcmkyL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL3NoYXJlL3NnbWwiCiMg
QVNORUVERURfcG4taWN1PQojIFBSRUZFUlJFRF9QUk9WSURFUl9tYXRjaGJveC1wYW5lbD1tYXRj
aGJveC1wYW5lbC0yClBSRUZFUlJFRF9QUk9WSURFUl9tYXRjaGJveC1wYW5lbD0ibWF0Y2hib3gt
cGFuZWwtMiIKIyBDT01NRVJDSUFMX1ZJREVPX1BMVUdJTlM9CiMgU1RBR0lOR19ESVJfSE9TVD0k
e1NUQUdJTkdfRElSfS8ke01BQ0hJTkV9ClNUQUdJTkdfRElSX0hPU1Q9Ii9ob21lL21pc2hhbC95
b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC9zeXNyb290cy9mcmkyLW5vZW1nZCIK
IyBQUkVGRVJSRURfVkVSU0lPTj1Ob25lCiMgTUFDSElORV9BUkNIPSR7QFtkLmdldFZhcignVFVO
RV9QS0dBUkNIJywgVHJ1ZSksIGQuZ2V0VmFyKCdNQUNISU5FJywgVHJ1ZSldW2Jvb2woZC5nZXRW
YXIoJ01BQ0hJTkUnLCBUcnVlKSldLnJlcGxhY2UoJy0nLCAnXycpfQpNQUNISU5FX0FSQ0g9ImZy
aTJfbm9lbWdkIgojIEJJTlVWRVJTSU9OPTIuMjIKQklOVVZFUlNJT049IjIuMjIiCiMgZGF0YWRp
cl9uYXRpdmU9JHtwcmVmaXhfbmF0aXZlfS9zaGFyZQpkYXRhZGlyX25hdGl2ZT0iL3Vzci9zaGFy
ZSIKIyBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbD1tZXNhLWRyaQpQUkVGRVJSRURf
UFJPVklERVJfdmlydHVhbC9saWJnbD0ibWVzYS1kcmkiCiMgU0RLUEFUSE5BVElWRT0ke1NES1BB
VEh9L3N5c3Jvb3RzLyR7U0RLX1NZU30KU0RLUEFUSE5BVElWRT0iL29wdC9wb2t5LzEuMy9zeXNy
b290cy94ODZfNjQtcG9reXNkay1saW51eCIKIyBMSU5LRVJfSEFTSF9TVFlMRV9taXBzNjQ9c3lz
dgpMSU5LRVJfSEFTSF9TVFlMRV9taXBzNjQ9InN5c3YiCiMgSE9NRT0vaG9tZS9taXNoYWwKZXhw
b3J0IEhPTUU9Ii9ob21lL21pc2hhbCIKIyBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJp
Y29udj1lZ2xpYmMKUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliaWNvbnY9ImVnbGliYyIK
IyBETF9ESVI9JHtUT1BESVJ9L2Rvd25sb2FkcwpETF9ESVI9Ii9ob21lL21pc2hhbC95b2N0by9w
b2t5LWRhbm55LTguMC9idWlsZC1mcmkyL2Rvd25sb2FkcyIKIyBQS0dfQ09ORklHX0xJQkRJUj0k
e1BLR19DT05GSUdfRElSfQpleHBvcnQgUEtHX0NPTkZJR19MSUJESVI9Ii9ob21lL21pc2hhbC95
b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC9zeXNyb290cy9mcmkyLW5vZW1nZC8v
dXNyL2xpYi9wa2djb25maWciCiMgUFJFRkVSUkVEX1ZFUlNJT05fYmludXRpbHMtY3Jvc3NzZGs9
JHtCSU5VVkVSU0lPTn0KUFJFRkVSUkVEX1ZFUlNJT05fYmludXRpbHMtY3Jvc3NzZGs9IjIuMjIi
CiMgUFJFRkVSUkVEX1ZFUlNJT05fdWNsaWJjLWluaXRpYWw9JHtVQ0xJQkNWRVJTSU9OfQpQUkVG
RVJSRURfVkVSU0lPTl91Y2xpYmMtaW5pdGlhbD0iMC45LjMzIgojIE1JUlJPUlM9ZnRwOi8vLiov
LiogICAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMv
IFxuIGh0dHA6Ly8uKi8uKiAgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21p
cnJvci9zb3VyY2VzLyBcbiBodHRwczovLy4qLy4qICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9w
cm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gICR7REVCSUFOX01JUlJPUn0JaHR0cDovL3Nu
YXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4tYXJjaGl2ZS8yMDEyMDMyOFQwOTI3NTJa
L2RlYmlhbi9wb29sIFxuICR7REVCSUFOX01JUlJPUn0JaHR0cDovL3NuYXBzaG90LmRlYmlhbi5v
cmcvYXJjaGl2ZS9kZWJpYW4tYXJjaGl2ZS8yMDExMDEyN1QwODQyNTdaL2RlYmlhbi9wb29sIFxu
ICR7REVCSUFOX01JUlJPUn0JaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJp
YW4tYXJjaGl2ZS8yMDA5MDgwMlQwMDQxNTNaL2RlYmlhbi9wb29sIFxuICR7REVCSUFOX01JUlJP
Un0JZnRwOi8vZnRwLmRlLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gJHtERUJJQU5fTUlSUk9S
fQlmdHA6Ly9mdHAuYXUuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiAke0RFQklBTl9NSVJST1J9
CWZ0cDovL2Z0cC5jbC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuICR7REVCSUFOX01JUlJPUn0J
ZnRwOi8vZnRwLmhyLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gJHtERUJJQU5fTUlSUk9SfQlm
dHA6Ly9mdHAuZmkuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiAke0RFQklBTl9NSVJST1J9CWZ0
cDovL2Z0cC5oay5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuICR7REVCSUFOX01JUlJPUn0JZnRw
Oi8vZnRwLmh1LmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gJHtERUJJQU5fTUlSUk9SfQlmdHA6
Ly9mdHAuaWUuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiAke0RFQklBTl9NSVJST1J9CWZ0cDov
L2Z0cC5pdC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuICR7REVCSUFOX01JUlJPUn0JZnRwOi8v
ZnRwLmpwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9m
dHAubm8uZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiAke0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0
cC5wbC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuICR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRw
LnJvLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAu
c2kuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiAke0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5l
cy5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuICR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLnNl
LmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAudHIu
ZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiAke0dOVV9NSVJST1J9CWZ0cDovL21pcnJvcnMua2Vy
bmVsLm9yZy9nbnUgXG4gJHtLRVJORUxPUkdfTUlSUk9SfQlodHRwOi8vd3d3Lmtlcm5lbC5vcmcv
cHViIFxuIGZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0LyAgICAgZnRwOi8vZnRwLmZyYW5rZW4u
ZGUvcHViL2NyeXB0L21pcnJvci9mdHAuZ251cGcub3JnL2djcnlwdC8gXG4gZnRwOi8vZnRwLmdu
dXBnLm9yZy9nY3J5cHQvICAgICBmdHA6Ly9mdHAuc3VyZm5ldC5ubC9wdWIvc2VjdXJpdHkvZ251
cGcvIFxuIGZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0LyAgICAgaHR0cDovL2d1bHVzLlVTaGVy
YnJvb2tlLmNhL3B1Yi9hcHBsL0dudVBHLyBcbiBmdHA6Ly9kYW50ZS5jdGFuLm9yZy90ZXgtYXJj
aGl2ZSBmdHA6Ly9mdHAuZnUtYmVybGluLmRlL3RleC9DVEFOIFxuIGZ0cDovL2RhbnRlLmN0YW4u
b3JnL3RleC1hcmNoaXZlIGh0dHA6Ly9zdW5zaXRlLnN1dC5hYy5qcC9wdWIvYXJjaGl2ZXMvY3Rh
bi8gXG4gZnRwOi8vZGFudGUuY3Rhbi5vcmcvdGV4LWFyY2hpdmUgaHR0cDovL2N0YW4udW5zdy5l
ZHUuYXUvIFxuIGZ0cDovL2Z0cC5nbnV0bHMub3JnL3B1Yi9nbnV0bHMgZnRwOi8vZnRwLmdudXBn
Lm9yZy9nY3J5cHQvZ251dGxzLyBcbiBmdHA6Ly9mdHAuZ251dGxzLm9yZy9wdWIvZ251dGxzIGh0
dHA6Ly93d3cubWlycm9ycy53aXJldGFwcGVkLm5ldC9zZWN1cml0eS9uZXR3b3JrLXNlY3VyaXR5
L2dudXRscy8gXG4gZnRwOi8vZnRwLmdudXRscy5vcmcvcHViL2dudXRscyBmdHA6Ly9mdHAubWly
cm9ycy53aXJldGFwcGVkLm5ldC9wdWIvc2VjdXJpdHkvbmV0d29yay1zZWN1cml0eS9nbnV0bHMv
IFxuIGZ0cDovL2Z0cC5nbnV0bHMub3JnL3B1Yi9nbnV0bHMgaHR0cDovL2pvc2Vmc3Nvbi5vcmcv
Z251dGxzL3JlbGVhc2VzLyBcbiBodHRwOi8vZnRwLmluZm8temlwLm9yZy9wdWIvaW5mb3ppcC9z
cmMvIGh0dHA6Ly9taXJyb3Iuc3dpdGNoLmNoL2Z0cC9taXJyb3IvaW5mb3ppcC9zcmMvIFxuIGh0
dHA6Ly9mdHAuaW5mby16aXAub3JnL3B1Yi9pbmZvemlwL3NyYy8gZnRwOi8vc3Vuc2l0ZS5pY20u
ZWR1LnBsL3B1Yi91bml4L2FyY2hpdmluZy9pbmZvLXppcC9zcmMvIFxuIGZ0cDovL2xzb2YuaXRh
cC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9mdHAuY2VyaWFzLnB1cmR1
ZS5lZHUvcHViL3Rvb2xzL3VuaXgvc3lzdXRpbHMvbHNvZi8gXG4gZnRwOi8vbHNvZi5pdGFwLnB1
cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL2Z0cC50YXUuYWMuaWwvcHViL3Vu
aXgvYWRtaW4vIFxuIGZ0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xz
b2YvICBmdHA6Ly9mdHAuY2VydC5kZm4uZGUvcHViL3Rvb2xzL2FkbWluL2xzb2YvIFxuIGZ0cDov
L2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9mdHAuZnUt
YmVybGluLmRlL3B1Yi91bml4L3Rvb2xzL2xzb2YvIFxuIGZ0cDovL2xzb2YuaXRhcC5wdXJkdWUu
ZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9mdHAua2Fpem8ub3JnL3B1Yi9sc29mLyBc
biBmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8v
ZnRwLnR1LWRhcm1zdGFkdC5kZS9wdWIvc3lzYWRtaW4vbHNvZi8gXG4gZnRwOi8vbHNvZi5pdGFw
LnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL2Z0cC50dXgub3JnL3B1Yi9z
aXRlcy92aWMuY2MucHVyZHVlLmVkdS90b29scy91bml4L2xzb2YvIFxuIGZ0cDovL2xzb2YuaXRh
cC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9nZC50dXdpZW4uYWMuYXQv
dXRpbHMvYWRtaW4tdG9vbHMvbHNvZi8gXG4gZnRwOi8vbHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHVi
L3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL3N1bnNpdGUudWFsYmVydGEuY2EvcHViL01pcnJvci9s
c29mLyBcbiBmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAg
ZnRwOi8vdGhlLndpcmV0YXBwZWQubmV0L3B1Yi9zZWN1cml0eS9ob3N0LXNlY3VyaXR5L2xzb2Yv
IFxuIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9kaXN0ICBodHRwOi8vYXJjaGl2ZS5hcGFjaGUub3Jn
L2Rpc3QgXG4gaHR0cDovL2Rvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvd2F0Y2hkb2cvIGh0dHA6
Ly9mb3NzaWVzLm9yZy9saW51eC9taXNjLyBcbiBjdnM6Ly8uKi8uKiAgICAgaHR0cDovL2Rvd25s
b2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBzdm46Ly8uKi8uKiAgICAg
aHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBnaXQ6
Ly8uKi8uKiAgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3Vy
Y2VzLyBcbiBoZzovLy4qLy4qICAgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3Jn
L21pcnJvci9zb3VyY2VzLyBcbiBienI6Ly8uKi8uKiAgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0
b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBzdms6Ly8uKi8uKiAgICAgaHR0cDovL2Rv
d25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBwNDovLy4qLy4qICAg
ICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBv
c2M6Ly8uKi8uKiAgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9z
b3VyY2VzLyBcbiBodHRwcz8kOi8vLiovLiogaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qu
b3JnL21pcnJvci9zb3VyY2VzLyBcbiBmdHA6Ly8uKi8uKiAgICAgaHR0cDovL2Rvd25sb2Fkcy55
b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBjdnM6Ly8uKi8uKiAgICAgaHR0cDov
L3NvdXJjZXMub3BlbmVtYmVkZGVkLm9yZy8gXG4gc3ZuOi8vLiovLiogICAgIGh0dHA6Ly9zb3Vy
Y2VzLm9wZW5lbWJlZGRlZC5vcmcvIFxuIGdpdDovLy4qLy4qICAgICBodHRwOi8vc291cmNlcy5v
cGVuZW1iZWRkZWQub3JnLyBcbiBoZzovLy4qLy4qICAgICAgaHR0cDovL3NvdXJjZXMub3BlbmVt
YmVkZGVkLm9yZy8gXG4gYnpyOi8vLiovLiogICAgIGh0dHA6Ly9zb3VyY2VzLm9wZW5lbWJlZGRl
ZC5vcmcvIFxuIHN2azovLy4qLy4qICAgICBodHRwOi8vc291cmNlcy5vcGVuZW1iZWRkZWQub3Jn
LyBcbiBwNDovLy4qLy4qICAgICAgaHR0cDovL3NvdXJjZXMub3BlbmVtYmVkZGVkLm9yZy8gXG4g
b3NjOi8vLiovLiogICAgIGh0dHA6Ly9zb3VyY2VzLm9wZW5lbWJlZGRlZC5vcmcvIFxuIGh0dHBz
PyQ6Ly8uKi8uKiBodHRwOi8vc291cmNlcy5vcGVuZW1iZWRkZWQub3JnLyBcbiBmdHA6Ly8uKi8u
KiAgICAgaHR0cDovL3NvdXJjZXMub3BlbmVtYmVkZGVkLm9yZy8gXG4gCk1JUlJPUlM9ImZ0cDov
Ly4qLy4qICAgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3Vy
Y2VzLyBcbiBodHRwOi8vLiovLiogICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9y
Zy9taXJyb3Ivc291cmNlcy8gXG4gaHR0cHM6Ly8uKi8uKiAgICBodHRwOi8vZG93bmxvYWRzLnlv
Y3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuICBmdHA6Ly9mdHAuZGViaWFuLm9yZy9k
ZWJpYW4vcG9vbAlodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi1hcmNo
aXZlLzIwMTIwMzI4VDA5Mjc1MlovZGViaWFuL3Bvb2wgXG4gZnRwOi8vZnRwLmRlYmlhbi5vcmcv
ZGViaWFuL3Bvb2wJaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4tYXJj
aGl2ZS8yMDExMDEyN1QwODQyNTdaL2RlYmlhbi9wb29sIFxuIGZ0cDovL2Z0cC5kZWJpYW4ub3Jn
L2RlYmlhbi9wb29sCWh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLWFy
Y2hpdmUvMjAwOTA4MDJUMDA0MTUzWi9kZWJpYW4vcG9vbCBcbiBmdHA6Ly9mdHAuZGViaWFuLm9y
Zy9kZWJpYW4vcG9vbAlmdHA6Ly9mdHAuZGUuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBmdHA6
Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbAlmdHA6Ly9mdHAuYXUuZGViaWFuLm9yZy9kZWJp
YW4vcG9vbCBcbiBmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbAlmdHA6Ly9mdHAuY2wu
ZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9v
bAlmdHA6Ly9mdHAuaHIuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBmdHA6Ly9mdHAuZGViaWFu
Lm9yZy9kZWJpYW4vcG9vbAlmdHA6Ly9mdHAuZmkuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBm
dHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbAlmdHA6Ly9mdHAuaGsuZGViaWFuLm9yZy9k
ZWJpYW4vcG9vbCBcbiBmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbAlmdHA6Ly9mdHAu
aHUuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4v
cG9vbAlmdHA6Ly9mdHAuaWUuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBmdHA6Ly9mdHAuZGVi
aWFuLm9yZy9kZWJpYW4vcG9vbAlmdHA6Ly9mdHAuaXQuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBc
biBmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbAlmdHA6Ly9mdHAuanAuZGViaWFuLm9y
Zy9kZWJpYW4vcG9vbCBcbiBmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbAlmdHA6Ly9m
dHAubm8uZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJp
YW4vcG9vbAlmdHA6Ly9mdHAucGwuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBmdHA6Ly9mdHAu
ZGViaWFuLm9yZy9kZWJpYW4vcG9vbAlmdHA6Ly9mdHAucm8uZGViaWFuLm9yZy9kZWJpYW4vcG9v
bCBcbiBmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbAlmdHA6Ly9mdHAuc2kuZGViaWFu
Lm9yZy9kZWJpYW4vcG9vbCBcbiBmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbAlmdHA6
Ly9mdHAuZXMuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBmdHA6Ly9mdHAuZGViaWFuLm9yZy9k
ZWJpYW4vcG9vbAlmdHA6Ly9mdHAuc2UuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBmdHA6Ly9m
dHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbAlmdHA6Ly9mdHAudHIuZGViaWFuLm9yZy9kZWJpYW4v
cG9vbCBcbiBmdHA6Ly9mdHAuZ251Lm9yZy9nbnUJZnRwOi8vbWlycm9ycy5rZXJuZWwub3JnL2du
dSBcbiBodHRwOi8va2VybmVsLm9yZy9wdWIJaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1YiBcbiBm
dHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC8gICAgIGZ0cDovL2Z0cC5mcmFua2VuLmRlL3B1Yi9j
cnlwdC9taXJyb3IvZnRwLmdudXBnLm9yZy9nY3J5cHQvIFxuIGZ0cDovL2Z0cC5nbnVwZy5vcmcv
Z2NyeXB0LyAgICAgZnRwOi8vZnRwLnN1cmZuZXQubmwvcHViL3NlY3VyaXR5L2dudXBnLyBcbiBm
dHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC8gICAgIGh0dHA6Ly9ndWx1cy5VU2hlcmJyb29rZS5j
YS9wdWIvYXBwbC9HbnVQRy8gXG4gZnRwOi8vZGFudGUuY3Rhbi5vcmcvdGV4LWFyY2hpdmUgZnRw
Oi8vZnRwLmZ1LWJlcmxpbi5kZS90ZXgvQ1RBTiBcbiBmdHA6Ly9kYW50ZS5jdGFuLm9yZy90ZXgt
YXJjaGl2ZSBodHRwOi8vc3Vuc2l0ZS5zdXQuYWMuanAvcHViL2FyY2hpdmVzL2N0YW4vIFxuIGZ0
cDovL2RhbnRlLmN0YW4ub3JnL3RleC1hcmNoaXZlIGh0dHA6Ly9jdGFuLnVuc3cuZWR1LmF1LyBc
biBmdHA6Ly9mdHAuZ251dGxzLm9yZy9wdWIvZ251dGxzIGZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2Ny
eXB0L2dudXRscy8gXG4gZnRwOi8vZnRwLmdudXRscy5vcmcvcHViL2dudXRscyBodHRwOi8vd3d3
Lm1pcnJvcnMud2lyZXRhcHBlZC5uZXQvc2VjdXJpdHkvbmV0d29yay1zZWN1cml0eS9nbnV0bHMv
IFxuIGZ0cDovL2Z0cC5nbnV0bHMub3JnL3B1Yi9nbnV0bHMgZnRwOi8vZnRwLm1pcnJvcnMud2ly
ZXRhcHBlZC5uZXQvcHViL3NlY3VyaXR5L25ldHdvcmstc2VjdXJpdHkvZ251dGxzLyBcbiBmdHA6
Ly9mdHAuZ251dGxzLm9yZy9wdWIvZ251dGxzIGh0dHA6Ly9qb3NlZnNzb24ub3JnL2dudXRscy9y
ZWxlYXNlcy8gXG4gaHR0cDovL2Z0cC5pbmZvLXppcC5vcmcvcHViL2luZm96aXAvc3JjLyBodHRw
Oi8vbWlycm9yLnN3aXRjaC5jaC9mdHAvbWlycm9yL2luZm96aXAvc3JjLyBcbiBodHRwOi8vZnRw
LmluZm8temlwLm9yZy9wdWIvaW5mb3ppcC9zcmMvIGZ0cDovL3N1bnNpdGUuaWNtLmVkdS5wbC9w
dWIvdW5peC9hcmNoaXZpbmcvaW5mby16aXAvc3JjLyBcbiBmdHA6Ly9sc29mLml0YXAucHVyZHVl
LmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vZnRwLmNlcmlhcy5wdXJkdWUuZWR1L3B1
Yi90b29scy91bml4L3N5c3V0aWxzL2xzb2YvIFxuIGZ0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1
L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9mdHAudGF1LmFjLmlsL3B1Yi91bml4L2FkbWlu
LyBcbiBmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRw
Oi8vZnRwLmNlcnQuZGZuLmRlL3B1Yi90b29scy9hZG1pbi9sc29mLyBcbiBmdHA6Ly9sc29mLml0
YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vZnRwLmZ1LWJlcmxpbi5k
ZS9wdWIvdW5peC90b29scy9sc29mLyBcbiBmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIv
dG9vbHMvdW5peC9sc29mLyAgZnRwOi8vZnRwLmthaXpvLm9yZy9wdWIvbHNvZi8gXG4gZnRwOi8v
bHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL2Z0cC50dS1k
YXJtc3RhZHQuZGUvcHViL3N5c2FkbWluL2xzb2YvIFxuIGZ0cDovL2xzb2YuaXRhcC5wdXJkdWUu
ZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9mdHAudHV4Lm9yZy9wdWIvc2l0ZXMvdmlj
LmNjLnB1cmR1ZS5lZHUvdG9vbHMvdW5peC9sc29mLyBcbiBmdHA6Ly9sc29mLml0YXAucHVyZHVl
LmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vZ2QudHV3aWVuLmFjLmF0L3V0aWxzL2Fk
bWluLXRvb2xzL2xzb2YvIFxuIGZ0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91
bml4L2xzb2YvICBmdHA6Ly9zdW5zaXRlLnVhbGJlcnRhLmNhL3B1Yi9NaXJyb3IvbHNvZi8gXG4g
ZnRwOi8vbHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL3Ro
ZS53aXJldGFwcGVkLm5ldC9wdWIvc2VjdXJpdHkvaG9zdC1zZWN1cml0eS9sc29mLyBcbiBodHRw
Oi8vd3d3LmFwYWNoZS5vcmcvZGlzdCAgaHR0cDovL2FyY2hpdmUuYXBhY2hlLm9yZy9kaXN0IFxu
IGh0dHA6Ly9kb3dubG9hZHMuc291cmNlZm9yZ2UubmV0L3dhdGNoZG9nLyBodHRwOi8vZm9zc2ll
cy5vcmcvbGludXgvbWlzYy8gXG4gY3ZzOi8vLiovLiogICAgIGh0dHA6Ly9kb3dubG9hZHMueW9j
dG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gc3ZuOi8vLiovLiogICAgIGh0dHA6Ly9k
b3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gZ2l0Oi8vLiovLiog
ICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4g
aGc6Ly8uKi8uKiAgICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Iv
c291cmNlcy8gXG4gYnpyOi8vLiovLiogICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0
Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gc3ZrOi8vLiovLiogICAgIGh0dHA6Ly9kb3dubG9hZHMu
eW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gcDQ6Ly8uKi8uKiAgICAgIGh0dHA6
Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gb3NjOi8vLiov
LiogICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8g
XG4gaHR0cHM/JDovLy4qLy4qIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJy
b3Ivc291cmNlcy8gXG4gZnRwOi8vLiovLiogICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9q
ZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gY3ZzOi8vLiovLiogICAgIGh0dHA6Ly9zb3VyY2Vz
Lm9wZW5lbWJlZGRlZC5vcmcvIFxuIHN2bjovLy4qLy4qICAgICBodHRwOi8vc291cmNlcy5vcGVu
ZW1iZWRkZWQub3JnLyBcbiBnaXQ6Ly8uKi8uKiAgICAgaHR0cDovL3NvdXJjZXMub3BlbmVtYmVk
ZGVkLm9yZy8gXG4gaGc6Ly8uKi8uKiAgICAgIGh0dHA6Ly9zb3VyY2VzLm9wZW5lbWJlZGRlZC5v
cmcvIFxuIGJ6cjovLy4qLy4qICAgICBodHRwOi8vc291cmNlcy5vcGVuZW1iZWRkZWQub3JnLyBc
biBzdms6Ly8uKi8uKiAgICAgaHR0cDovL3NvdXJjZXMub3BlbmVtYmVkZGVkLm9yZy8gXG4gcDQ6
Ly8uKi8uKiAgICAgIGh0dHA6Ly9zb3VyY2VzLm9wZW5lbWJlZGRlZC5vcmcvIFxuIG9zYzovLy4q
Ly4qICAgICBodHRwOi8vc291cmNlcy5vcGVuZW1iZWRkZWQub3JnLyBcbiBodHRwcz8kOi8vLiov
LiogaHR0cDovL3NvdXJjZXMub3BlbmVtYmVkZGVkLm9yZy8gXG4gZnRwOi8vLiovLiogICAgIGh0
dHA6Ly9zb3VyY2VzLm9wZW5lbWJlZGRlZC5vcmcvIFxuIgojIFBFUlNJU1RFTlRfRElSPSR7VE1Q
RElSfS9jYWNoZQpQRVJTSVNURU5UX0RJUj0iL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnkt
OC4wL2J1aWxkLWZyaTIvdG1wL2NhY2hlIgojIFBLR19DT05GSUdfU1lTUk9PVF9ESVI9JHtTVEFH
SU5HX0RJUl9IT1NUfQpleHBvcnQgUEtHX0NPTkZJR19TWVNST09UX0RJUj0iL2hvbWUvbWlzaGFs
L3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jvb3RzL2ZyaTItbm9lbWdk
IgojIENYWD0ke0NDQUNIRX0ke0hPU1RfUFJFRklYfWcrKyAke0hPU1RfQ0NfQVJDSH0ke1RPT0xD
SEFJTl9PUFRJT05TfQpleHBvcnQgQ1hYPSJpNTg2LXBva3ktbGludXgtZysrICAtbTMyICAgIC1t
YXJjaD1jb3JlMiAtbXNzZTMgLW10dW5lPWdlbmVyaWMgLW1mcG1hdGg9c3NlIC0tc3lzcm9vdD0v
aG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvc3lzcm9vdHMv
ZnJpMi1ub2VtZ2QiCiMgU0RLX1ZFUlNJT049MS4zClNES19WRVJTSU9OPSIxLjMiCiMgQlVJTERf
VkVORE9SPQojIFNTVEFURV9NQU5JRkVTVFM9JHtUTVBESVJ9L3NzdGF0ZS1jb250cm9sClNTVEFU
RV9NQU5JRkVTVFM9Ii9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmky
L3RtcC9zc3RhdGUtY29udHJvbCIKIyBERVBDSEFJTl9QUkU9CiMgU0RLX1ZFTkRPUj0tcG9reXNk
awpTREtfVkVORE9SPSItcG9reXNkayIKIyBHTk9NRV9HSVQ9Z2l0Oi8vZ2l0Lmdub21lLm9yZwpH
Tk9NRV9HSVQ9ImdpdDovL2dpdC5nbm9tZS5vcmciCiMgUlBST1ZJREVTPQojIE5PMzJMSUJTPTEK
Tk8zMkxJQlM9IjEiCiMgQlVJTERfQ0NfQVJDSD0KIyBBTExPV19FTVBUWV8ke1BOfS1kYmc9MQpB
TExPV19FTVBUWV9iYmxheWVycy1kYmc9IjEiCiMgUEtHX0NPTkZJR19QQVRIPSR7UEtHX0NPTkZJ
R19ESVJ9OiR7U1RBR0lOR19EQVRBRElSfS9wa2djb25maWcKZXhwb3J0IFBLR19DT05GSUdfUEFU
SD0iL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jv
b3RzL2ZyaTItbm9lbWdkLy91c3IvbGliL3BrZ2NvbmZpZzovaG9tZS9taXNoYWwveW9jdG8vcG9r
eS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvc3lzcm9vdHMvZnJpMi1ub2VtZ2QvdXNyL3NoYXJl
L3BrZ2NvbmZpZyIKIyBCQkZJTEVfUFJJT1JJVFlfY29yZT01CkJCRklMRV9QUklPUklUWV9jb3Jl
PSI1IgojIFBSRUZFUlJFRF9QUk9WSURFUl9nemlwLW5hdGl2ZT1waWd6LW5hdGl2ZQpQUkVGRVJS
RURfUFJPVklERVJfZ3ppcC1uYXRpdmU9InBpZ3otbmF0aXZlIgojIFNZU1JPT1RfTE9DSz0ke1NU
QUdJTkdfRElSfS9zdGFnaW5nLmxvY2sKU1lTUk9PVF9MT0NLPSIvaG9tZS9taXNoYWwveW9jdG8v
cG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvc3lzcm9vdHMvc3RhZ2luZy5sb2NrIgojIFBB
Q0tBR0VfRVhUUkFfQVJDSFNfdHVuZS14ODY9JHtUVU5FX1BLR0FSQ0hfdHVuZS14ODZ9ClBBQ0tB
R0VfRVhUUkFfQVJDSFNfdHVuZS14ODY9Ing4NiIKIyBUQ0xJQkM9ZWdsaWJjClRDTElCQz0iZWds
aWJjIgojIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXI9eHNlcnZlci14b3JnClBS
RUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXI9InhzZXJ2ZXIteG9yZyIKIyBQS0dERVNU
V09SSz0ke1dPUktESVJ9L3BrZ2RhdGEKUEtHREVTVFdPUks9Ii9ob21lL21pc2hhbC95b2N0by9w
b2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC93b3JrL2NvcmUyLXBva3ktbGludXgvYmJsYXll
cnMtMS4wLXIwL3BrZ2RhdGEiCiMgUFJFRkVSUkVEX1BST1ZJREVSX2dkYj1nZGIKUFJFRkVSUkVE
X1BST1ZJREVSX2dkYj0iZ2RiIgojIENPTkZfVkVSU0lPTj0xCkNPTkZfVkVSU0lPTj0iMSIKIyBQ
UkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0bz0zLjQlClBSRUZFUlJFRF9WRVJTSU9OX2xpbnV4
LXlvY3RvPSIzLjQlIgojIFNUQUdJTkdfRElSX1RBUkdFVD0ke1NUQUdJTkdfRElSfS8ke01BQ0hJ
TkV9ClNUQUdJTkdfRElSX1RBUkdFVD0iL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4w
L2J1aWxkLWZyaTIvdG1wL3N5c3Jvb3RzL2ZyaTItbm9lbWdkIgojIElNQUdFX1JPT1RGU19FWFRS
QV9TUEFDRT0wCklNQUdFX1JPT1RGU19FWFRSQV9TUEFDRT0iMCIKIyBGUkVFREVTS1RPUF9DVlM9
Y3ZzOi8vYW5vbmN2czphbm9uY3ZzQGFub25jdnMuZnJlZWRlc2t0b3Aub3JnL2N2cwpGUkVFREVT
S1RPUF9DVlM9ImN2czovL2Fub25jdnM6YW5vbmN2c0Bhbm9uY3ZzLmZyZWVkZXNrdG9wLm9yZy9j
dnMiCiMgU0FOSVRZX0FCSUZJTEU9JHtUTVBESVJ9L2FiaV92ZXJzaW9uClNBTklUWV9BQklGSUxF
PSIvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvYWJpX3Zl
cnNpb24iCiMgSE9TVF9BU19BUkNIPSR7VEFSR0VUX0FTX0FSQ0h9CkhPU1RfQVNfQVJDSD0iIgoj
IFRVTkVfRkVBVFVSRVNfdHVuZS1jb3JlMi02NC14MzI9JHtUVU5FX0ZFQVRVUkVTX3R1bmUteDg2
LTY0LXgzMn0gY29yZTIKVFVORV9GRUFUVVJFU190dW5lLWNvcmUyLTY0LXgzMj0ibXgzMiBjb3Jl
MiIKIyBERUJVR19PUFRJTUlaQVRJT049LU8gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgJHtERUJV
R19GTEFHU30gLXBpcGUKREVCVUdfT1BUSU1JWkFUSU9OPSItTyAtZm5vLW9taXQtZnJhbWUtcG9p
bnRlciAtZyAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgLXBpcGUiCiMgUFJFRkVSUkVE
X1BST1ZJREVSX25hdGl2ZXNkay1vcGtnPW5hdGl2ZXNkay1vcGtnClBSRUZFUlJFRF9QUk9WSURF
Ul9uYXRpdmVzZGstb3BrZz0ibmF0aXZlc2RrLW9wa2ciCiMgUlBNQ09ORl9UQVJHRVRfQkFTRT0k
e0RFUExPWV9ESVJfUlBNfS9zb2x2ZWRiClJQTUNPTkZfVEFSR0VUX0JBU0U9Ii9ob21lL21pc2hh
bC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC9kZXBsb3kvcnBtL3NvbHZlZGIi
CiMgSU1BR0VfT1ZFUkhFQURfRkFDVE9SPTEuMwpJTUFHRV9PVkVSSEVBRF9GQUNUT1I9IjEuMyIK
IyBTSVRFX0NPTkZfVkVSU0lPTj0xClNJVEVfQ09ORl9WRVJTSU9OPSIxIgojIEJVSUxEX05NPSR7
QlVJTERfUFJFRklYfW5tCmV4cG9ydCBCVUlMRF9OTT0ibm0iCiMgQ1hYRkxBR1M9JHtUQVJHRVRf
Q1hYRkxBR1N9IC1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbgpleHBvcnQgQ1hYRkxBR1M9Ii1P
MiAtcGlwZSAtZyAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgLWZwZXJtaXNzaXZlIC1m
dmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbiIKIyBSREVQRU5EU18ke1BOfS1kZXY9JHtQTn0gKD0g
JHtFWFRFTkRQS0dWfSkKUkRFUEVORFNfYmJsYXllcnMtZGV2PSJiYmxheWVycyAoPSAxLjAtcjAp
IgojIENPTVBBVElCTEVfTUFDSElORT1Ob25lCiMgVEFSR0VUX1ZFTkRPUj0tcG9reQpUQVJHRVRf
VkVORE9SPSItcG9reSIKIyBTQU5JVFlfVEVTVEVEX0RJU1RST1M9IFlvY3RvIChCdWlsdCBieSBQ
b2t5IDcuMCkgMS4yIFxuIFlvY3RvIChCdWlsdCBieSBQb2t5IDguMCkgMS4zIFxuIFBva3kgNy4w
IChZb2N0byBQcm9qZWN0IDEuMiBSZWZlcmVuY2UgRGlzdHJvKSAxLjIgXG4gUG9reSA4LjAgKFlv
Y3RvIFByb2plY3QgMS4zIFJlZmVyZW5jZSBEaXN0cm8pIDEuMyBcbiBVYnVudHUgMTAuMDQuNCBM
VFMgXG4gVWJ1bnR1IDExLjEwIFxuIFVidW50dSAxMi4wNCBMVFMgXG4gVWJ1bnR1IDEyLjA0LjEg
TFRTIFxuIFVidW50dSAxMi4xMCBcbiBGZWRvcmEgcmVsZWFzZSAxNiAoVmVybmUpIFxuIEZlZG9y
YSByZWxlYXNlIDE3IChCZWVmeSBNaXJhY2xlKSBcbiBGZWRvcmEgcmVsZWFzZSAxOCAoU3BoZXJp
Y2FsIENvdykgXG4gQ2VudE9TIHJlbGVhc2UgNS42IChGaW5hbCkgXG4gQ2VudE9TIHJlbGVhc2Ug
NS43IChGaW5hbCkgXG4gQ2VudE9TIHJlbGVhc2UgNS44IChGaW5hbCkgXG4gQ2VudE9TIHJlbGVh
c2UgNi4zIChGaW5hbCkgXG4gRGViaWFuIEdOVS9MaW51eCA2LjAuNiAoc3F1ZWV6ZSkgXG4gb3Bl
blNVU0UgMTEuNCBcbiBvcGVuU1VTRSAxMi4xIFxuIG9wZW5TVVNFIDEyLjIgXG4gClNBTklUWV9U
RVNURURfRElTVFJPUz0iWW9jdG8gKEJ1aWx0IGJ5IFBva3kgNy4wKSAxLjIgXG4gWW9jdG8gKEJ1
aWx0IGJ5IFBva3kgOC4wKSAxLjMgXG4gUG9reSA3LjAgKFlvY3RvIFByb2plY3QgMS4yIFJlZmVy
ZW5jZSBEaXN0cm8pIDEuMiBcbiBQb2t5IDguMCAoWW9jdG8gUHJvamVjdCAxLjMgUmVmZXJlbmNl
IERpc3RybykgMS4zIFxuIFVidW50dSAxMC4wNC40IExUUyBcbiBVYnVudHUgMTEuMTAgXG4gVWJ1
bnR1IDEyLjA0IExUUyBcbiBVYnVudHUgMTIuMDQuMSBMVFMgXG4gVWJ1bnR1IDEyLjEwIFxuIEZl
ZG9yYSByZWxlYXNlIDE2IChWZXJuZSkgXG4gRmVkb3JhIHJlbGVhc2UgMTcgKEJlZWZ5IE1pcmFj
bGUpIFxuIEZlZG9yYSByZWxlYXNlIDE4IChTcGhlcmljYWwgQ293KSBcbiBDZW50T1MgcmVsZWFz
ZSA1LjYgKEZpbmFsKSBcbiBDZW50T1MgcmVsZWFzZSA1LjcgKEZpbmFsKSBcbiBDZW50T1MgcmVs
ZWFzZSA1LjggKEZpbmFsKSBcbiBDZW50T1MgcmVsZWFzZSA2LjMgKEZpbmFsKSBcbiBEZWJpYW4g
R05VL0xpbnV4IDYuMC42IChzcXVlZXplKSBcbiBvcGVuU1VTRSAxMS40IFxuIG9wZW5TVVNFIDEy
LjEgXG4gb3BlblNVU0UgMTIuMiBcbiIKIyBMQVlFUlZFUlNJT05fY29yZT0xCkxBWUVSVkVSU0lP
Tl9jb3JlPSIxIgojIFhTRVJWRVJfSUEzMl9WRVNBPXhmODYtdmlkZW8tdmVzYQpYU0VSVkVSX0lB
MzJfVkVTQT0ieGY4Ni12aWRlby12ZXNhIgojIEZJTEVTXyR7UE59LXN0YXRpY2Rldj0ke2xpYmRp
cn0vKi5hICR7YmFzZV9saWJkaXJ9LyouYSAke2xpYmRpcn0vJHtCUE59LyouYQpGSUxFU19iYmxh
eWVycy1zdGF0aWNkZXY9Ii91c3IvbGliLyouYSAvbGliLyouYSAvdXNyL2xpYi9iYmxheWVycy8q
LmEiCiMgUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG9fcWVtdXg4Ni02ND0zLjQlClBSRUZF
UlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvX3FlbXV4ODYtNjQ9IjMuNCUiCiMgTk09JHtIT1NUX1BS
RUZJWH1ubQpleHBvcnQgTk09Imk1ODYtcG9reS1saW51eC1ubSIKIyBTRVBQVUtVX0FERENPTU1F
TlQ9Tm9uZQojIFBPS1lRRU1VREVQUz0ke0BiYXNlX2NvbnRhaW5zKCJJTkNPTVBBVElCTEVfTElD
RU5TRSIsICJHUEx2MyIsICIiLCAicWVtdS1jb25maWciLGQpfQpQT0tZUUVNVURFUFM9InFlbXUt
Y29uZmlnIgojIE9FX0lNUE9SVFM9IG9zIHN5cyB0aW1lIG9lLnBhdGggb2UudXRpbHMgb2UuZGF0
YSBvZS5wYWNrYWdlZ3JvdXAgb2Uuc3N0YXRlc2lnIG9lLmxzYgpPRV9JTVBPUlRTPSJvcyBzeXMg
dGltZSBvZS5wYXRoIG9lLnV0aWxzIG9lLmRhdGEgb2UucGFja2FnZWdyb3VwIG9lLnNzdGF0ZXNp
ZyBvZS5sc2IiCiMgUE9LWV9ERUZBVUxUX0VYVFJBX1JSRUNPTU1FTkRTPWtlcm5lbC1tb2R1bGUt
YWYtcGFja2V0ClBPS1lfREVGQVVMVF9FWFRSQV9SUkVDT01NRU5EUz0ia2VybmVsLW1vZHVsZS1h
Zi1wYWNrZXQiCiMgUFJFRkVSUkVEX1ZFUlNJT05fZ2NjLWNyb3Nzc2RrPSR7U0RLR0NDVkVSU0lP
Tn0KUFJFRkVSUkVEX1ZFUlNJT05fZ2NjLWNyb3Nzc2RrPSI0LjclIgojIEZJTEVTXyR7UE59LWxv
Y2FsZT0ke2RhdGFkaXJ9L2xvY2FsZQpGSUxFU19iYmxheWVycy1sb2NhbGU9Ii91c3Ivc2hhcmUv
bG9jYWxlIgojIEtFRVBVSU1BR0U9eWVzCktFRVBVSU1BR0U9InllcyIKIyBDT01NT05fTElDRU5T
RV9ESVI9JHtDT1JFQkFTRX0vbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMKQ09NTU9OX0xJQ0VO
U0VfRElSPSIvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvbWV0YS9maWxlcy9jb21t
b24tbGljZW5zZXMiCiMgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvZmFrZXJvb3QtbmF0aXZl
PXBzZXVkby1uYXRpdmUKUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvZmFrZXJvb3QtbmF0aXZl
PSJwc2V1ZG8tbmF0aXZlIgojIFRBUkdFVF9MSU5LX0hBU0hfU1RZTEU9JHtAWyctV2wsLS1oYXNo
LXN0eWxlPWdudScsJyddW2QuZ2V0VmFyKCdMSU5LRVJfSEFTSF9TVFlMRScsIFRydWUpICE9ICdn
bnUnXX0KVEFSR0VUX0xJTktfSEFTSF9TVFlMRT0iLVdsLC0taGFzaC1zdHlsZT1nbnUiCiMgRElT
VFJPX0ZFQVRVUkVTX0JBQ0tGSUxMPXB1bHNlYXVkaW8KRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxM
PSJwdWxzZWF1ZGlvIgojIEhPU1RUT09MU19XSElURUxJU1RfR1BMdjM9CiMgU0VSSUFMX0NPTlNP
TEU9MTE1MjAwIHR0eVBDSDEKU0VSSUFMX0NPTlNPTEU9IjExNTIwMCB0dHlQQ0gxIgojIERJU1RS
T19GRUFUVVJFU19MSUJDPSR7RElTVFJPX0ZFQVRVUkVTX0xJQkNfREVGQVVMVH0KRElTVFJPX0ZF
QVRVUkVTX0xJQkM9ImlwdjQgaXB2NiBsaWJjLWJhY2t0cmFjZSBsaWJjLWJpZy1tYWNyb3MgbGli
Yy1ic2QgbGliYy1jeHgtdGVzdHMgbGliYy1jYXRnZXRzIGxpYmMtY2hhcnNldHMgbGliYy1jcnlw
dCAJCQkJCWxpYmMtY3J5cHQtdWZjIGxpYmMtZGItYWxpYXNlcyBsaWJjLWVudnogbGliYy1mY3Z0
IGxpYmMtZm10bXNnIGxpYmMtZnN0YWIgbGliYy1mdHJhdmVyc2UgCQkJCQlsaWJjLWdldGxvZ2lu
IGxpYmMtaWRuIGxpYmMtaW5ldC1hbmwgbGliYy1saWJtIGxpYmMtbGlibS1iaWcgbGliYy1sb2Nh
bGVzIGxpYmMtbG9jYWxlLWNvZGUgCQkJCQlsaWJjLW1lbXVzYWdlIGxpYmMtbmlzIGxpYmMtbnNz
d2l0Y2ggbGliYy1yY21kIGxpYmMtcnRsZC1kZWJ1ZyBsaWJjLXNwYXduIGxpYmMtc3RyZWFtcyBs
aWJjLXN1bnJwYyAJCQkJCWxpYmMtdXRtcCBsaWJjLXV0bXB4IGxpYmMtd29yZGV4cCBsaWJjLXBv
c2l4LWNsYW5nLXdjaGFyIGxpYmMtcG9zaXgtcmVnZXhwIGxpYmMtcG9zaXgtcmVnZXhwLWdsaWJj
IAkJCQkJbGliYy1wb3NpeC13Y2hhci1pbyIKIyBTU1RBVEVfRVhUUkFQQVRIPQojIFVTUkJJTlBB
VEg9JHtiaW5kaXJ9ClVTUkJJTlBBVEg9Ii91c3IvYmluIgojIFRSQU5TTEFURURfVEFSR0VUX0FS
Q0g9JHtAZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSkucmVwbGFjZSgiXyIsICItIil9ClRS
QU5TTEFURURfVEFSR0VUX0FSQ0g9Imk1ODYiCiMgQlVJTERTREtfQ0ZMQUdTPSR7QlVJTERTREtf
Q1BQRkxBR1N9ICR7QlVJTERfT1BUSU1JWkFUSU9OfQpCVUlMRFNES19DRkxBR1M9Ii1pc3lzdGVt
L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jvb3Rz
L2ZyaTItbm9lbWdkL3Vzci9pbmNsdWRlIC1PMiAtcGlwZSIKIyBUVU5FX1BLR0FSQ0g9JHtUVU5F
X1BLR0FSQ0hfdHVuZS0ke0RFRkFVTFRUVU5FfX0KVFVORV9QS0dBUkNIPSJjb3JlMiIKIyBTVEFH
SU5HX0RBVEFESVJfTkFUSVZFPSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7ZGF0YWRpcl9uYXRpdmV9
ClNUQUdJTkdfREFUQURJUl9OQVRJVkU9Ii9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTgu
MC9idWlsZC1mcmkyL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL3NoYXJlIgojIFBSRUZF
UlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1jb21waWxlcmxpYnM9Z2NjLXJ1
bnRpbWUKUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvaTU4Ni1wb2t5LWxpbnV4LWNvbXBpbGVy
bGlicz0iZ2NjLXJ1bnRpbWUiCiMgZG9fcGFja2FnZV93cml0ZV9pcGs9Tm9uZQojIENQVV9GRUFU
VVJFU19hcm09dmZwCkNQVV9GRUFUVVJFU19hcm09InZmcCIKIyBUVU5FX0NDQVJHUz0gJHtAYmIu
dXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibTMyIiwgIi1tMzIiLCAiIiwgZCl9ICR7
QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm14MzIiLCAiLW14MzIiLCAiIiwg
ZCl9ICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm02NCIsICItbTY0Iiwg
IiIsIGQpfSAke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJpNTg2IiwgIi1t
YXJjaD1pNTg2IiwgIiIsIGQpfSAke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIs
ICJjb3JlMiIsICItbWFyY2g9Y29yZTIgLW1zc2UzIC1tdHVuZT1nZW5lcmljIC1tZnBtYXRoPXNz
ZSIsICIiLCBkKX0KVFVORV9DQ0FSR1M9Ii1tMzIgICAgLW1hcmNoPWNvcmUyIC1tc3NlMyAtbXR1
bmU9Z2VuZXJpYyAtbWZwbWF0aD1zc2UiCiMgQkJfSEFTSEZJTEVOQU1FPSR7U1NUQVRFX0VYVFJB
UEFUSH0gJHtTU1RBVEVfUEtHU1BFQ30KQkJfSEFTSEZJTEVOQU1FPSJzc3RhdGUtYmJsYXllcnMt
Y29yZTItcG9reS1saW51eC0xLjAtcjAtY29yZTItMi0iCiMgRkVUQ0hDTURfYnpyPS91c3IvYmlu
L2VudiBienIKRkVUQ0hDTURfYnpyPSIvdXNyL2Jpbi9lbnYgYnpyIgojIE1FVEFEQVRBX1JFVklT
SU9OPSR7QGJhc2VfZGV0ZWN0X3JldmlzaW9uKGQpfQpNRVRBREFUQV9SRVZJU0lPTj0iPHVua25v
d24+IgojIFRVTkVfRkVBVFVSRVM9JHtUVU5FX0ZFQVRVUkVTX3R1bmUtJHtERUZBVUxUVFVORX19
ClRVTkVfRkVBVFVSRVM9Im0zMiBjb3JlMiIKIyBCVUlMRF9TWVM9JHtCVUlMRF9BUkNIfSR7QlVJ
TERfVkVORE9SfS0ke0JVSUxEX09TfQpCVUlMRF9TWVM9Ing4Nl82NC1saW51eCIKIyBCQkZJTEVf
UFJJT1JJVFlfeW9jdG89NQpCQkZJTEVfUFJJT1JJVFlfeW9jdG89IjUiCiMgQlVJTERfU1RSSVA9
JHtCVUlMRF9QUkVGSVh9c3RyaXAKZXhwb3J0IEJVSUxEX1NUUklQPSJzdHJpcCIKIyBsaWJkaXJf
bmF0aXZlc2RrPSR7cHJlZml4X25hdGl2ZXNka30vbGliCmxpYmRpcl9uYXRpdmVzZGs9Ii91c3Iv
bGliIgojIFFFTVVfT1BUSU9OU19hcm12N2E9LWNwdSBjb3J0ZXgtYTgKUUVNVV9PUFRJT05TX2Fy
bXY3YT0iLWNwdSBjb3J0ZXgtYTgiCiMgVENMSUJDQVBQRU5EPQojIFNUQUdJTkdfRElSPSR7VE1Q
RElSfS9zeXNyb290cwpTVEFHSU5HX0RJUj0iL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnkt
OC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jvb3RzIgojIExJTktFUl9IQVNIX1NUWUxFX21pcHM9c3lz
dgpMSU5LRVJfSEFTSF9TVFlMRV9taXBzPSJzeXN2IgojIE1BQ0hJTkVfRVNTRU5USUFMX0VYVFJB
X1JSRUNPTU1FTkRTPQojIFBSRUZFUlJFRF9WRVJTSU9OX2VnbGliYz0ke0VHTElCQ1ZFUlNJT059
ClBSRUZFUlJFRF9WRVJTSU9OX2VnbGliYz0iMi4xNiIKIyBCQl9TSUdOQVRVUkVfSEFORExFUj1P
RUJhc2ljSGFzaApCQl9TSUdOQVRVUkVfSEFORExFUj0iT0VCYXNpY0hhc2giCiMgTE9DQUxFX1VU
RjhfT05MWT0wCkxPQ0FMRV9VVEY4X09OTFk9IjAiCiMgUFJFRkVSUkVEX1ZFUlNJT05fbmF0aXZl
c2RrLWVnbGliYy1pbml0aWFsPSR7RUdMSUJDVkVSU0lPTn0KUFJFRkVSUkVEX1ZFUlNJT05fbmF0
aXZlc2RrLWVnbGliYy1pbml0aWFsPSIyLjE2IgojIFBSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlv
Y3RvX3FlbXVtaXBzPTMuNCUKUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG9fcWVtdW1pcHM9
IjMuNCUiCiMgVklSVFVBTC1SVU5USU1FX2Fsc2Etc3RhdGU9YWxzYS1zdGF0ZQpWSVJUVUFMLVJV
TlRJTUVfYWxzYS1zdGF0ZT0iYWxzYS1zdGF0ZSIKIyBMSUNFTlNFPUlOVkFMSUQKTElDRU5TRT0i
SU5WQUxJRCIKIyBTRVBQVUtVX1BBU1M9Tm9uZQojIENPUkVCQVNFPS9ob21lL21pc2hhbC95b2N0
by9wb2t5LWRhbm55LTguMApDT1JFQkFTRT0iL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnkt
OC4wIgojIEdOT01FX01JUlJPUj1odHRwOi8vZnRwLmdub21lLm9yZy9wdWIvR05PTUUvc291cmNl
cwpHTk9NRV9NSVJST1I9Imh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9HTk9NRS9zb3VyY2VzIgoj
IFBSRUZFUlJFRF9WRVJTSU9OX2xpYmdjYz0ke0dDQ1ZFUlNJT059ClBSRUZFUlJFRF9WRVJTSU9O
X2xpYmdjYz0iNC43JSIKIyBQQUNLQUdFU19EWU5BTUlDPSR7UE59LWxvY2FsZS0qClBBQ0tBR0VT
X0RZTkFNSUM9ImJibGF5ZXJzLWxvY2FsZS0qIgojIFNTVEFURV9QS0dTUEVDPXNzdGF0ZS0ke1BO
fS0ke1BBQ0tBR0VfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfS0ke1BWfS0ke1BS
fS0ke1NTVEFURV9QS0dBUkNIfS0ke1NTVEFURV9WRVJTSU9OfS0KU1NUQVRFX1BLR1NQRUM9InNz
dGF0ZS1iYmxheWVycy1jb3JlMi1wb2t5LWxpbnV4LTEuMC1yMC1jb3JlMi0yLSIKIyBMT0NBTENP
TkZfVkVSU0lPTj0xCkxPQ0FMQ09ORl9WRVJTSU9OPSIxIgojIEJCX0VOVl9FWFRSQVdISVRFPVBT
RVVET19CVUlMRCBQU0VVRE9fRElTQUJMRUQgUFNFVURPX0JVSUxEIFBTRVVET19ESVNBQkxFRCBN
QUNISU5FIERJU1RSTyBUQ01PREUgVENMSUJDIGh0dHBfcHJveHkgZnRwX3Byb3h5IGh0dHBzX3By
b3h5IGFsbF9wcm94eSBBTExfUFJPWFkgbm9fcHJveHkgU1NIX0FHRU5UX1BJRCBTU0hfQVVUSF9T
T0NLIEJCX1NSQ1JFVl9QT0xJQ1kgU0RLTUFDSElORSBCQl9OVU1CRVJfVEhSRUFEUyBCQl9OT19O
RVRXT1JLIFBBUkFMTEVMX01BS0UgR0lUX1BST1hZX0NPTU1BTkQgR0lUX1BST1hZX0lHTk9SRSBT
T0NLUzVfUEFTU1dEIFNPQ0tTNV9VU0VSIFNDUkVFTkRJUgpCQl9FTlZfRVhUUkFXSElURT0iUFNF
VURPX0JVSUxEIFBTRVVET19ESVNBQkxFRCBQU0VVRE9fQlVJTEQgUFNFVURPX0RJU0FCTEVEIE1B
Q0hJTkUgRElTVFJPIFRDTU9ERSBUQ0xJQkMgaHR0cF9wcm94eSBmdHBfcHJveHkgaHR0cHNfcHJv
eHkgYWxsX3Byb3h5IEFMTF9QUk9YWSBub19wcm94eSBTU0hfQUdFTlRfUElEIFNTSF9BVVRIX1NP
Q0sgQkJfU1JDUkVWX1BPTElDWSBTREtNQUNISU5FIEJCX05VTUJFUl9USFJFQURTIEJCX05PX05F
VFdPUksgUEFSQUxMRUxfTUFLRSBHSVRfUFJPWFlfQ09NTUFORCBHSVRfUFJPWFlfSUdOT1JFIFNP
Q0tTNV9QQVNTV0QgU09DS1M1X1VTRVIgU0NSRUVORElSIgojIENPTVBBVElCTEVfSE9TVD1Ob25l
CiMgUFJFRkVSUkVEX1BST1ZJREVSX2NvbnNvbGUtdG9vbHM9a2JkClBSRUZFUlJFRF9QUk9WSURF
Ul9jb25zb2xlLXRvb2xzPSJrYmQiCiMgU1NUQVRFUFJFSU5TVEZVTkNTPQojIERFUExPWV9ESVJf
SVBLPSR7REVQTE9ZX0RJUn0vaXBrCkRFUExPWV9ESVJfSVBLPSIvaG9tZS9taXNoYWwveW9jdG8v
cG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvZGVwbG95L2lwayIKIyBTVEFHSU5HX0ZJUk1X
QVJFX0RJUj0ke1NUQUdJTkdfRElSX0hPU1R9L2Zpcm13YXJlClNUQUdJTkdfRklSTVdBUkVfRElS
PSIvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvc3lzcm9v
dHMvZnJpMi1ub2VtZ2QvZmlybXdhcmUiCiMgQkJGSUxFUz0gL2hvbWUvbWlzaGFsL3lvY3RvL3Bv
a3ktZGFubnktOC4wL21ldGEvcmVjaXBlcy0qLyovKi5iYiAvaG9tZS9taXNoYWwveW9jdG8vcG9r
eS1kYW5ueS04LjAvbWV0YS15b2N0by9yZWNpcGVzLSovKi8qLmJiIC9ob21lL21pc2hhbC95b2N0
by9wb2t5LWRhbm55LTguMC9tZXRhLXlvY3RvL3JlY2lwZXMtKi8qLyouYmJhcHBlbmQgL2hvbWUv
bWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEteW9jdG8tYnNwL3JlY2lwZXMtKi8qLyou
YmIgL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEteW9jdG8tYnNwL3JlY2lw
ZXMtKi8qLyouYmJhcHBlbmQgL2hvbWUvbWlzaGFsL3lvY3RvL21ldGEtaW50ZWwvY29tbW9uL3Jl
Y2lwZXMtKi8qLyouYmIgL2hvbWUvbWlzaGFsL3lvY3RvL21ldGEtaW50ZWwvY29tbW9uL3JlY2lw
ZXMtKi8qLyouYmJhcHBlbmQgL2hvbWUvbWlzaGFsL3lvY3RvL21ldGEtaW50ZWwvbWV0YS1mcmky
L3JlY2lwZXMtKi8qLyouYmIgL2hvbWUvbWlzaGFsL3lvY3RvL21ldGEtaW50ZWwvbWV0YS1mcmky
L3JlY2lwZXMtKi8qLyouYmJhcHBlbmQKQkJGSUxFUz0iL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3kt
ZGFubnktOC4wL21ldGEvcmVjaXBlcy0qLyovKi5iYiAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1k
YW5ueS04LjAvbWV0YS15b2N0by9yZWNpcGVzLSovKi8qLmJiIC9ob21lL21pc2hhbC95b2N0by9w
b2t5LWRhbm55LTguMC9tZXRhLXlvY3RvL3JlY2lwZXMtKi8qLyouYmJhcHBlbmQgL2hvbWUvbWlz
aGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEteW9jdG8tYnNwL3JlY2lwZXMtKi8qLyouYmIg
L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEteW9jdG8tYnNwL3JlY2lwZXMt
Ki8qLyouYmJhcHBlbmQgL2hvbWUvbWlzaGFsL3lvY3RvL21ldGEtaW50ZWwvY29tbW9uL3JlY2lw
ZXMtKi8qLyouYmIgL2hvbWUvbWlzaGFsL3lvY3RvL21ldGEtaW50ZWwvY29tbW9uL3JlY2lwZXMt
Ki8qLyouYmJhcHBlbmQgL2hvbWUvbWlzaGFsL3lvY3RvL21ldGEtaW50ZWwvbWV0YS1mcmkyL3Jl
Y2lwZXMtKi8qLyouYmIgL2hvbWUvbWlzaGFsL3lvY3RvL21ldGEtaW50ZWwvbWV0YS1mcmkyL3Jl
Y2lwZXMtKi8qLyouYmJhcHBlbmQiCiMgQVM9JHtIT1NUX1BSRUZJWH1hcyAke0hPU1RfQVNfQVJD
SH0KZXhwb3J0IEFTPSJpNTg2LXBva3ktbGludXgtYXMiCiMgQlVJTERfUkFOTElCPSR7QlVJTERf
UFJFRklYfXJhbmxpYgpleHBvcnQgQlVJTERfUkFOTElCPSJyYW5saWIiCiMgU1NUQVRFX1BLR0FS
Q0g9JHtQQUNLQUdFX0FSQ0h9ClNTVEFURV9QS0dBUkNIPSJjb3JlMiIKIyBQUkVGRVJSRURfVkVS
U0lPTl9nY2MtcnVudGltZT0ke0dDQ1ZFUlNJT059ClBSRUZFUlJFRF9WRVJTSU9OX2djYy1ydW50
aW1lPSI0LjclIgojIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsZXMyPW1lc2EtZHJp
ClBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsZXMyPSJtZXNhLWRyaSIKIyBQUkVGRVJS
RURfUFJPVklERVJfdmlydHVhbC9saWJnbGVzMT1tZXNhLWRyaQpQUkVGRVJSRURfUFJPVklERVJf
dmlydHVhbC9saWJnbGVzMT0ibWVzYS1kcmkiCiMgQk5GSUxFPSR7QlVJTERTVEFUU19CQVNFfS8u
YnVpbGRuYW1lCkJORklMRT0iL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxk
LWZyaTIvdG1wL2J1aWxkc3RhdHMvLy5idWlsZG5hbWUiCiMgQVVUT1JFVj0ke0BiYi5mZXRjaDIu
Z2V0X2F1dG9yZXYoZCl9CkFVVE9SRVY9IkFVVE9JTkMiCiMgV09SS0RJUj0ke1RNUERJUn0vd29y
ay8ke01VTFRJTUFDSF9UQVJHRVRfU1lTfS8ke1BGfQpXT1JLRElSPSIvaG9tZS9taXNoYWwveW9j
dG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvd29yay9jb3JlMi1wb2t5LWxpbnV4L2Ji
bGF5ZXJzLTEuMC1yMCIKIyBiaW5kaXJfbmF0aXZlc2RrPSR7cHJlZml4X25hdGl2ZXNka30vYmlu
CmJpbmRpcl9uYXRpdmVzZGs9Ii91c3IvYmluIgojIFBBQ0tBR0VfREVQRU5EUz0gcnBtLW5hdGl2
ZSBmaWxlLW5hdGl2ZSBwYXgtdXRpbHMtbmF0aXZlICR7UUFERVBFTkRTfQpQQUNLQUdFX0RFUEVO
RFM9InJwbS1uYXRpdmUgZmlsZS1uYXRpdmUgcGF4LXV0aWxzLW5hdGl2ZSBwcmVsaW5rLW5hdGl2
ZSIKIyBCVUlMRF9DUFBGTEFHUz0taXN5c3RlbSR7U1RBR0lOR19JTkNESVJfTkFUSVZFfQpleHBv
cnQgQlVJTERfQ1BQRkxBR1M9Ii1pc3lzdGVtL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnkt
OC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSIKIyBE
RVBMT1lfRElSX0RFQj0ke0RFUExPWV9ESVJ9L2RlYgpERVBMT1lfRElSX0RFQj0iL2hvbWUvbWlz
aGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL2RlcGxveS9kZWIiCiMgREVQ
TE9ZX0RJUl9SUE09JHtERVBMT1lfRElSfS9ycG0KREVQTE9ZX0RJUl9SUE09Ii9ob21lL21pc2hh
bC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC9kZXBsb3kvcnBtIgojIFBSRUZF
UlJFRF9WRVJTSU9OX2VnbGliYy1sb2NhbGU9JHtFR0xJQkNWRVJTSU9OfQpQUkVGRVJSRURfVkVS
U0lPTl9lZ2xpYmMtbG9jYWxlPSIyLjE2IgojIERJU1RST19OQU1FPVBva3kgOC4wIChZb2N0byBQ
cm9qZWN0IDEuMyBSZWZlcmVuY2UgRGlzdHJvKQpESVNUUk9fTkFNRT0iUG9reSA4LjAgKFlvY3Rv
IFByb2plY3QgMS4zIFJlZmVyZW5jZSBEaXN0cm8pIgojIERFU0NSSVBUSU9OXyR7UE59LWRvYz0k
e0RFU0NSSVBUSU9OfSAgVGhpcyBwYWNrYWdlIGNvbnRhaW5zIGRvY3VtZW50YXRpb24uCkRFU0NS
SVBUSU9OX2JibGF5ZXJzLWRvYz0iYmJsYXllcnMgdmVyc2lvbiAxLjAtcjAgIFRoaXMgcGFja2Fn
ZSBjb250YWlucyBkb2N1bWVudGF0aW9uLiIKIyBDTEVBTkZVTkNTPSBzc3RhdGVfY2xlYW5hbGwK
Q0xFQU5GVU5DUz0ic3N0YXRlX2NsZWFuYWxsIgojIEFVVE9fTElCTkFNRV9QS0dTPSR7UEFDS0FH
RVN9CkFVVE9fTElCTkFNRV9QS0dTPSJiYmxheWVycy1kYmcgYmJsYXllcnMtc3RhdGljZGV2IGJi
bGF5ZXJzLWRldiBiYmxheWVycy1kb2MgYmJsYXllcnMtbG9jYWxlICBiYmxheWVycyIKIyBQQUxN
VE9QX1VTRV9NVUxUSVRIUkVBREVEX1FUPU5vbmUKIyBTRVBQVUtVX0FUVEFDSE1FTlQ9Tm9uZQpk
b19mZXRjaGFsbCgpIHsKCToKCn0KCmRpZSgpIHsKCWJiZmF0YWwgIiQqIgoKfQoKYmFzZV9kb19p
bnN0YWxsKCkgewoJOgoKfQoKcmVzb2x2ZV9wYWNrYWdlX3JwbSgpIHsKCWxvY2FsIGNvbmZmaWxl
PSIkMSIKCXNoaWZ0Cglsb2NhbCBwa2dfbmFtZT0iIgoJZm9yIHNvbHZlIGluIGBjYXQgJHtjb25m
ZmlsZX1gOyBkbwoJCXBrZ19uYW1lPSQocnBtIC1EICJfZGJwYXRoICRzb2x2ZSIgLUQgIl9fZGJp
X3R4biBjcmVhdGUgbm9mc3luYyIgLXEgLS1xZiAiJXtwYWNrYWdlb3JpZ2lufVxuIiAiJEAiIHwg
Z3JlcCAtdiAiaXMgbm90IGluc3RhbGxlZCIgfHwgdHJ1ZSkKCQlpZiBbIC1uICIkcGtnX25hbWUi
IC1hICIkcGtnX25hbWUiICE9ICIobm9uZSkiIF07IHRoZW4KCQkJZWNobyAkcGtnX25hbWUKCQkJ
YnJlYWs7CgkJZmkKCWRvbmUKCn0KCmRvX2NvbXBpbGUoKSB7CiAgICBiYXNlX2RvX2NvbXBpbGUK
Cn0KCmRvX2J1aWxkKCkgewoJOgoKfQoKcHJlbGlua19pbWFnZSgpIHsKIwlleHBvcnQgUFNFVURP
X0RFQlVHPTQKIwkvYmluL2VudiB8IC9iaW4vZ3JlcCBQU0VVRE8KIwllY2hvICJMRF9MSUJSQVJZ
X1BBVEg9JExEX0xJQlJBUllfUEFUSCIKIwllY2hvICJMRF9QUkVMT0FEPSRMRF9QUkVMT0FEIgoK
CXByZV9wcmVsaW5rX3NpemU9YGR1IC1rcyAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04
LjAvYnVpbGQtZnJpMi90bXAvd29yay9jb3JlMi1wb2t5LWxpbnV4L2JibGF5ZXJzLTEuMC1yMC9y
b290ZnMgfCBhd2sgJ3tzaXplID0gJDEgOyBwcmludCBzaXplIH0nYAoJZWNobyAiU2l6ZSBiZWZv
cmUgcHJlbGlua2luZyAkcHJlX3ByZWxpbmtfc2l6ZS4iCgoJIyBXZSBuZWVkIGEgcHJlbGluayBj
b25mIG9uIHRoZSBmaWxlc3lzdGVtLCBhZGQgb25lIGlmIGl0J3MgbWlzc2luZwoJaWYgWyAhIC1l
IC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC93b3JrL2Nv
cmUyLXBva3ktbGludXgvYmJsYXllcnMtMS4wLXIwL3Jvb3Rmcy9ldGMvcHJlbGluay5jb25mIF07
IHRoZW4KCQljcCAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90
bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L2V0Yy9wcmVsaW5rLmNvbmYgXAoJCQkvaG9tZS9taXNo
YWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvd29yay9jb3JlMi1wb2t5LWxp
bnV4L2JibGF5ZXJzLTEuMC1yMC9yb290ZnMvZXRjL3ByZWxpbmsuY29uZgoJCWR1bW15X3ByZWxp
bmtfY29uZj10cnVlOwoJZWxzZQoJCWR1bW15X3ByZWxpbmtfY29uZj1mYWxzZTsKCWZpCgoJIyBw
cmVsaW5rIQoJL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1w
L3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3Ivc2Jpbi9wcmVsaW5rIC0tcm9vdCAvaG9tZS9taXNo
YWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvd29yay9jb3JlMi1wb2t5LWxp
bnV4L2JibGF5ZXJzLTEuMC1yMC9yb290ZnMgLWFtUiAtTiAtYyAvZXRjL3ByZWxpbmsuY29uZgoK
CSMgUmVtb3ZlIHRoZSBwcmVsaW5rLmNvbmYgaWYgd2UgaGFkIHRvIGFkZCBpdC4KCWlmIFsgIiRk
dW1teV9wcmVsaW5rX2NvbmYiID0gInRydWUiIF07IHRoZW4KCQlybSAtZiAvaG9tZS9taXNoYWwv
eW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvd29yay9jb3JlMi1wb2t5LWxpbnV4
L2JibGF5ZXJzLTEuMC1yMC9yb290ZnMvZXRjL3ByZWxpbmsuY29uZgoJZmkKCglwcmVfcHJlbGlu
a19zaXplPWBkdSAta3MgL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZy
aTIvdG1wL3dvcmsvY29yZTItcG9reS1saW51eC9iYmxheWVycy0xLjAtcjAvcm9vdGZzIHwgYXdr
ICd7c2l6ZSA9ICQxIDsgcHJpbnQgc2l6ZSB9J2AKCWVjaG8gIlNpemUgYWZ0ZXIgcHJlbGlua2lu
ZyAkcHJlX3ByZWxpbmtfc2l6ZS4iCgp9CgpwYWNrYWdlX2luc3RhbGxfaW50ZXJuYWxfcnBtKCkg
ewoKCWxvY2FsIHRhcmdldF9yb290ZnM9IiR7SU5TVEFMTF9ST09URlNfUlBNfSIKCWxvY2FsIHBs
YXRmb3JtPSJgZWNobyAke0lOU1RBTExfUExBVEZPUk1fUlBNfSB8IHNlZCAncyMtI18jZydgIgoJ
bG9jYWwgcGxhdGZvcm1fZXh0cmE9ImBlY2hvICR7SU5TVEFMTF9QTEFURk9STV9FWFRSQV9SUE19
IHwgc2VkICdzIy0jXyNnJ2AiCglsb2NhbCBjb25mYmFzZT0iJHtJTlNUQUxMX0NPTkZCQVNFX1JQ
TX0iCglsb2NhbCBwYWNrYWdlX3RvX2luc3RhbGw9IiR7SU5TVEFMTF9QQUNLQUdFU19SUE19IgoJ
bG9jYWwgcGFja2FnZV9hdHRlbXB0b25seT0iJHtJTlNUQUxMX1BBQ0tBR0VTX0FUVEVNUFRPTkxZ
X1JQTX0iCglsb2NhbCBwYWNrYWdlX2xpbmd1YXM9IiR7SU5TVEFMTF9QQUNLQUdFU19MSU5HVUFT
X1JQTX0iCglsb2NhbCBwcm92aWRlbmFtZT0iJHtJTlNUQUxMX1BST1ZJREVOQU1FX1JQTX0iCgls
b2NhbCB0YXNrPSIke0lOU1RBTExfVEFTS19SUE19IgoKCWlmIFsgIiR7SU5TVEFMTF9DT01QTEVN
RU5UQVJZX1JQTX0iICE9ICIxIiBdIDsgdGhlbgoJCSMgU2V0dXAgYmFzZSBzeXN0ZW0gY29uZmln
dXJhdGlvbgoJCW1rZGlyIC1wICR7dGFyZ2V0X3Jvb3Rmc30vZXRjL3JwbS8KCQllY2hvICIke3Bs
YXRmb3JtfS1wb2t5LWxpbnV4IiA+ICR7dGFyZ2V0X3Jvb3Rmc30vZXRjL3JwbS9wbGF0Zm9ybQoJ
CWlmIFsgISAteiAiJHBsYXRmb3JtX2V4dHJhIiBdOyB0aGVuCgkJCWZvciBwdCBpbiAkcGxhdGZv
cm1fZXh0cmEgOyBkbwoJCQkJY2FzZSAkcHQgaW4KCQkJCQlub2FyY2ggfCBhbnkgfCBhbGwpCgkJ
CQkJCW9zPSJgZWNobyBsaW51eCB8IHNlZCAicywtLiosLCJgLioiCgkJCQkJCTs7CgkJCQkJKikK
CQkJCQkJb3M9ImxpbnV4IgoJCQkJCQk7OwoJCQkJZXNhYwoJCQkJZWNobyAiJHB0LS4qLSRvcyIg
Pj4gJHt0YXJnZXRfcm9vdGZzfS9ldGMvcnBtL3BsYXRmb3JtCgkJCWRvbmUKCQlmaQoKCQkjIFRl
bGwgUlBNIHRoYXQgdGhlICIvIiBkaXJlY3RvcnkgZXhpc3QgYW5kIGlzIGF2YWlsYWJsZQoJCW1r
ZGlyIC1wICR7dGFyZ2V0X3Jvb3Rmc30vZXRjL3JwbS9zeXNpbmZvCgkJZWNobyAiLyIgPiR7dGFy
Z2V0X3Jvb3Rmc30vZXRjL3JwbS9zeXNpbmZvL0Rpcm5hbWVzCgkJaWYgWyAhIC16ICIkcHJvdmlk
ZW5hbWUiIF07IHRoZW4KCQkJY2F0IC9kZXYvbnVsbCA+ICR7dGFyZ2V0X3Jvb3Rmc30vZXRjL3Jw
bS9zeXNpbmZvL1Byb3ZpZGVuYW1lCgkJCWZvciBwcm92aWRlIGluICRwcm92aWRlbmFtZSA7IGRv
CgkJCQllY2hvICRwcm92aWRlID4+ICR7dGFyZ2V0X3Jvb3Rmc30vZXRjL3JwbS9zeXNpbmZvL1By
b3ZpZGVuYW1lCgkJCWRvbmUKCQlmaQoJZWxzZQoJCSMgV2UgbWF5IHJ1biB0aHJvdWdoIHRoZSBj
b21wbGVtZW50YXJ5IGluc3RhbGxzIG11bHRpcGxlIHRpbWVzLiAgRm9yIGVhY2ggdGltZQoJCSMg
d2Ugc2hvdWxkIGFkZCB0aGUgcHJldmlvdXMgc29sdXRpb24gbWFuaWZlc3QgdG8gdGhlIGZ1bGwg
Im9yaWdpbmFsIiBzZXQgdG8KCQkjIGF2b2lkIGR1cGxpY2F0ZSBpbnN0YWxsIHN0ZXBzLgoJCWVj
aG8gIlVwZGF0ZSBvcmlnaW5hbCBzb2x1dGlvbi4uLiIKCQlmb3IgbSBpbiAke3RhcmdldF9yb290
ZnN9L2luc3RhbGwvaW5pdGlhbF9zb2x1dGlvbi5tYW5pZmVzdCBcCgkJCSR7dGFyZ2V0X3Jvb3Rm
c30vaW5zdGFsbC90b3RhbF9zb2x1dGlvbi5tYW5pZmVzdDsgZG8KCQkJaWYgWyAtcyAkbSBdOyB0
aGVuCgkJCQljYXQgJG0gPj4gJHt0YXJnZXRfcm9vdGZzfS9pbnN0YWxsL29yaWdpbmFsX3NvbHV0
aW9uLm1hbmlmZXN0CgkJCQlybSAtZiAkbQoJCQlmaQoJCWRvbmUKCQlzb3J0IC11ICR7dGFyZ2V0
X3Jvb3Rmc30vaW5zdGFsbC9vcmlnaW5hbF9zb2x1dGlvbi5tYW5pZmVzdCAtbyAke3RhcmdldF9y
b290ZnN9L2luc3RhbGwvb3JpZ2luYWxfc29sdXRpb24ubWFuaWZlc3QubmV3CgkJbXYgJHt0YXJn
ZXRfcm9vdGZzfS9pbnN0YWxsL29yaWdpbmFsX3NvbHV0aW9uLm1hbmlmZXN0Lm5ldyAke3Rhcmdl
dF9yb290ZnN9L2luc3RhbGwvb3JpZ2luYWxfc29sdXRpb24ubWFuaWZlc3QKCWZpCgoJIyBTZXR1
cCBtYW5pZmVzdCBvZiBwYWNrYWdlcyB0byBpbnN0YWxsLi4uCglta2RpciAtcCAke3RhcmdldF9y
b290ZnN9L2luc3RhbGwKCXJtIC1mICR7dGFyZ2V0X3Jvb3Rmc30vaW5zdGFsbC9pbnN0YWxsLm1h
bmlmZXN0CglybSAtZiAke3RhcmdldF9yb290ZnN9L2luc3RhbGwvaW5zdGFsbF9tdWx0aWxpYi5t
YW5pZmVzdAoJcm0gLWYgJHt0YXJnZXRfcm9vdGZzfS9pbnN0YWxsL2luc3RhbGxfYXR0ZW1wdG9u
bHkubWFuaWZlc3QKCgkjIFVjbGliYyBidWlsZHMgZG9uJ3QgcHJvdmlkZSB0aGlzIHN0dWZmLi4u
CglpZiBbIHhsaW51eCA9ICJ4bGludXgiIF0gfHwgWyB4bGludXggPSAieGxpbnV4LWdudWVhYmki
IF0gOyB0aGVuCgkJaWYgWyAhIC16ICIke3BhY2thZ2VfbGluZ3Vhc30iIF07IHRoZW4KCQkJcHJv
Y2Vzc19wa2dfbGlzdF9ycG0gbGluZ3VhcyAke3BhY2thZ2VfbGluZ3Vhc30KCQlmaQoJZmkKCglp
ZiBbICEgLXogIiR7cGFja2FnZV90b19pbnN0YWxsfSIgXTsgdGhlbgoJCXByb2Nlc3NfcGtnX2xp
c3RfcnBtIGRlZmF1bHQgJHtwYWNrYWdlX3RvX2luc3RhbGx9CglmaQoKCSMgTm9ybWFsIHBhY2th
Z2UgaW5zdGFsbGF0aW9uCgoJIyBHZW5lcmF0ZSBhbiBpbnN0YWxsIHNvbHV0aW9uIGJ5IGRvaW5n
IGEgLS1qdXN0ZGIgaW5zdGFsbCwgdGhlbiByZWNyZWF0ZSBpdCB3aXRoCgkjIGFuIGFjdHVhbCBw
YWNrYWdlIGluc3RhbGwhCglpZiBbIC1zICR7dGFyZ2V0X3Jvb3Rmc30vaW5zdGFsbC9pbnN0YWxs
Lm1hbmlmZXN0IF07IHRoZW4KCQllY2hvICIjIEluc3RhbGwgbWFuaWZlc3QgcGFkZGluZyIgPj4g
JHt0YXJnZXRfcm9vdGZzfS9pbnN0YWxsL2luc3RhbGwubWFuaWZlc3QKCQlycG0gLS1wcmVkZWZp
bmUgIl9ycG1kc19zeXNpbmZvX3BhdGggJHt0YXJnZXRfcm9vdGZzfS9ldGMvcnBtL3N5c2luZm8i
IFwKCQkJLS1wcmVkZWZpbmUgIl9ycG1yY19wbGF0Zm9ybV9wYXRoICR7dGFyZ2V0X3Jvb3Rmc30v
ZXRjL3JwbS9wbGF0Zm9ybSIgXAoJCQktLXJvb3QgIiR7dGFyZ2V0X3Jvb3Rmc30vaW5zdGFsbCIg
XAoJCQktRCAiX2RicGF0aCAke3RhcmdldF9yb290ZnN9L2luc3RhbGwiIC1EICJgY2F0ICR7Y29u
ZmJhc2V9LWJhc2VfYXJjaHMubWFjcm9gIiBcCgkJCS1EICJfX2RiaV90eG4gY3JlYXRlIG5vZnN5
bmMiIFwKCQkJLVUgLS1qdXN0ZGIgLS1yZXBsYWNlcGtncyAtLW5vc2NyaXB0cyAtLW5vdHJpZ2dl
cnMgLS1ub3BhcmVudGRpcnMgLS1ub2xpbmt0b3MgLS1pZ25vcmVzaXplIFwKCQkJJHt0YXJnZXRf
cm9vdGZzfS9pbnN0YWxsL2luc3RhbGwubWFuaWZlc3QKCWZpCgoJaWYgWyAhIC16ICIke3BhY2th
Z2VfYXR0ZW1wdG9ubHl9IiBdOyB0aGVuCgkJZWNobyAiQWRkaW5nIGF0dGVtcHQgb25seSBwYWNr
YWdlcy4uLiIKCQlwcm9jZXNzX3BrZ19saXN0X3JwbSBhdHRlbXB0b25seSAke3BhY2thZ2VfYXR0
ZW1wdG9ubHl9CgkJY2F0ICR7dGFyZ2V0X3Jvb3Rmc30vaW5zdGFsbC9pbnN0YWxsX2F0dGVtcHRv
bmx5Lm1hbmlmZXN0IHwgd2hpbGUgcmVhZCBwa2dfbmFtZQoJCWRvCgkJCWVjaG8gIkF0dGVtcHRp
bmcgJHBrZ19uYW1lLi4uIiA+PiAiYGRpcm5hbWUgJHtCQl9MT0dGSUxFfWAvbG9nLmRvXyR7dGFz
a31fYXR0ZW1wdG9ubHkuJHtQSUR9IgoJCQlycG0gLS1wcmVkZWZpbmUgIl9ycG1kc19zeXNpbmZv
X3BhdGggJHt0YXJnZXRfcm9vdGZzfS9ldGMvcnBtL3N5c2luZm8iIFwKCQkJCS0tcHJlZGVmaW5l
ICJfcnBtcmNfcGxhdGZvcm1fcGF0aCAke3RhcmdldF9yb290ZnN9L2V0Yy9ycG0vcGxhdGZvcm0i
IFwKCQkJCS0tcm9vdCAiJHt0YXJnZXRfcm9vdGZzfS9pbnN0YWxsIiBcCgkJCQktRCAiX2RicGF0
aCAke3RhcmdldF9yb290ZnN9L2luc3RhbGwiIC1EICJgY2F0ICR7Y29uZmJhc2V9Lm1hY3JvYCIg
XAoJCQkJLUQgIl9fZGJpX3R4biBjcmVhdGUgbm9mc3luYyBwcml2YXRlIiBcCgkJCQktVSAtLWp1
c3RkYiAtLXJlcGxhY2Vwa2dzIC0tbm9zY3JpcHRzIC0tbm90cmlnZ2VycyAtLW5vcGFyZW50ZGly
cyAtLW5vbGlua3RvcyAtLWlnbm9yZXNpemUgXAoJCQkkcGtnX25hbWUgPj4gImBkaXJuYW1lICR7
QkJfTE9HRklMRX1gL2xvZy5kb18ke3Rhc2t9X2F0dGVtcHRvbmx5LiR7UElEfSIgMj4mMSB8fCB0
cnVlCgkJZG9uZQoJZmkKCgkjIyMjIE5vdGU6ICdSZWNvbW1lbmRzJyBpcyBhbiBhcmJpdHJhcnkg
dGFnIHRoYXQgbWVhbnMgX1NVR0dFU1RTXyBpbiBPRS1jb3JlLi4KCSMgQWRkIGFueSByZWNvbW1l
bmRlZCBwYWNrYWdlcyB0byB0aGUgaW1hZ2UKCSMgUlBNIGRvZXMgbm90IHNvbHZlIGZvciByZWNv
bW1lbmRlZCBwYWNrYWdlcyBiZWNhdXNlIHRoZXkgYXJlIG9wdGlvbmFsLi4uCgkjIFNvIHdlIHF1
ZXJ5IHRoZW0gYW5kIHRyZWUgdGhlbSBsaWtlIHRoZSBBVFRFTVBUT05MWSBwYWNrYWdlcyBhYm92
ZS4uLgoJIyBDaGFuZ2UgdGhlIGxvb3AgdG8gIjEiIHRvIHJ1biB0aGlzIGNvZGUuLi4KCWxvb3A9
MAoJaWYgWyAkbG9vcCAtZXEgMSBdOyB0aGVuCgkgZWNobyAiUHJvY2Vzc2luZyByZWNvbW1lbmRl
ZCBwYWNrYWdlcy4uLiIKCSBjYXQgL2Rldi9udWxsID4gICR7dGFyZ2V0X3Jvb3Rmc30vaW5zdGFs
bC9yZWNvbW1lbmQubGlzdAoJIHdoaWxlIFsgJGxvb3AgLWVxIDEgXTsgZG8KCQkjIER1bXAgdGhl
IGZ1bGwgc2V0IG9mIHJlY29tbWVuZHMuLi4KCQlycG0gLS1wcmVkZWZpbmUgIl9ycG1kc19zeXNp
bmZvX3BhdGggJHt0YXJnZXRfcm9vdGZzfS9ldGMvcnBtL3N5c2luZm8iIFwKCQkJLS1wcmVkZWZp
bmUgIl9ycG1yY19wbGF0Zm9ybV9wYXRoICR7dGFyZ2V0X3Jvb3Rmc30vZXRjL3JwbS9wbGF0Zm9y
bSIgXAoJCQktLXJvb3QgIiR7dGFyZ2V0X3Jvb3Rmc30vaW5zdGFsbCIgXAoJCQktRCAiX2RicGF0
aCAke3RhcmdldF9yb290ZnN9L2luc3RhbGwiIC1EICJgY2F0ICR7Y29uZmJhc2V9Lm1hY3JvYCIg
XAoJCQktRCAiX19kYmlfdHhuIGNyZWF0ZSBub2ZzeW5jIHByaXZhdGUiIFwKCQkJLXFhIC0tcWYg
Ilsle1JFQ09NTUVORFN9XG5dIiB8IHNvcnQgLXUgPiAke3RhcmdldF9yb290ZnN9L2luc3RhbGwv
cmVjb21tZW5kCgkJIyBEaWQgd2UgYWRkIG1vcmUgdG8gdGhlIGxpc3Q/CgkJZ3JlcCAtdiAteCAt
RiAtZiAke3RhcmdldF9yb290ZnN9L2luc3RhbGwvcmVjb21tZW5kLmxpc3QgJHt0YXJnZXRfcm9v
dGZzfS9pbnN0YWxsL3JlY29tbWVuZCA+ICR7dGFyZ2V0X3Jvb3Rmc30vaW5zdGFsbC9yZWNvbW1l
bmQubmV3IHx8IHRydWUKCQkjIFdlIGRvbid0IHdhbnQgdG8gbG9vcCB1bmxlc3MgdGhlcmUgaXMg
YSBjaGFuZ2UgdG8gdGhlIGxpc3QhCgkJbG9vcD0wCgkJY2F0ICR7dGFyZ2V0X3Jvb3Rmc30vaW5z
dGFsbC9yZWNvbW1lbmQubmV3IHwgXAoJCSB3aGlsZSByZWFkIHBrZyA7IGRvCgkJCSMgT2hoIHRo
ZXJlIHdhcyBhIG5ldyBvbmUsIHdlJ2xsIG5lZWQgdG8gbG9vcCBhZ2Fpbi4uLgoJCQlsb29wPTEK
CQkJZWNobyAiUHJvY2Vzc2luZyAkcGtnLi4uIgoJCQlmb3VuZD0wCgkJCWZvciBhcmNodmFyIGlu
IGJhc2VfYXJjaHMgbWxfYXJjaHMgOyBkbwoJCQkJcGtnX25hbWU9JChyZXNvbHZlX3BhY2thZ2Vf
cnBtICR7Y29uZmJhc2V9LSR7YXJjaHZhcn0uY29uZiAke3BrZ30pCgkJCQlpZiBbIC1uICIkcGtn
X25hbWUiIF07IHRoZW4KCQkJCQlmb3VuZD0xCgkJCQkJYnJlYWsKCQkJCWZpCgkJCWRvbmUKCgkJ
CWlmIFsgJGZvdW5kIC1lcSAwIF07IHRoZW4KCQkJCWVjaG8gIk5vdGU6IFVuYWJsZSB0byBmaW5k
IHBhY2thZ2UgJHBrZyAtLSBzdWdnZXN0cyIKCQkJCWVjaG8gIlVuYWJsZSB0byBmaW5kIHBhY2th
Z2UgJHBrZy4iID4+ICJgZGlybmFtZSAke0JCX0xPR0ZJTEV9YC9sb2cuZG9fJHt0YXNrfV9yZWNv
bW1lbmQuJHtQSUR9IgoJCQkJY29udGludWUKCQkJZmkKCQkJZWNobyAiQXR0ZW1wdGluZyAkcGtn
X25hbWUuLi4iID4+ICJgZGlybmFtZSAke0JCX0xPR0ZJTEV9YC9sb2cuZG9fe3Rhc2t9X3JlY29t
bWVuZC4ke1BJRH0iCgkJCXJwbSAtLXByZWRlZmluZSAiX3JwbWRzX3N5c2luZm9fcGF0aCAke3Rh
cmdldF9yb290ZnN9L2V0Yy9ycG0vc3lzaW5mbyIgXAoJCQkJLS1wcmVkZWZpbmUgIl9ycG1yY19w
bGF0Zm9ybV9wYXRoICR7dGFyZ2V0X3Jvb3Rmc30vZXRjL3JwbS9wbGF0Zm9ybSIgXAoJCQkJLS1y
b290ICIke3RhcmdldF9yb290ZnN9L2luc3RhbGwiIFwKCQkJCS1EICJfZGJwYXRoICR7dGFyZ2V0
X3Jvb3Rmc30vaW5zdGFsbCIgLUQgImBjYXQgJHtjb25mYmFzZX0ubWFjcm9gIiBcCgkJCQktRCAi
X19kYmlfdHhuIGNyZWF0ZSBub2ZzeW5jIHByaXZhdGUiIFwKCQkJCS1VIC0tanVzdGRiIC0tcmVw
bGFjZXBrZ3MgLS1ub3NjcmlwdHMgLS1ub3RyaWdnZXJzIC0tbm9wYXJlbnRkaXJzIC0tbm9saW5r
dG9zIC0taWdub3Jlc2l6ZSBcCgkJCQkkcGtnX25hbWUgPj4gImBkaXJuYW1lICR7QkJfTE9HRklM
RX1gL2xvZy5kb18ke3Rhc2t9X3JlY29tbWVuZC4ke1BJRH0iIDI+JjEgfHwgdHJ1ZQoJCWRvbmUK
CQljYXQgJHt0YXJnZXRfcm9vdGZzfS9pbnN0YWxsL3JlY29tbWVuZC5saXN0ICR7dGFyZ2V0X3Jv
b3Rmc30vaW5zdGFsbC9yZWNvbW1lbmQubmV3IHwgc29ydCAtdSA+ICR7dGFyZ2V0X3Jvb3Rmc30v
aW5zdGFsbC9yZWNvbW1lbmQubmV3Lmxpc3QKCQltdiAtZiAke3RhcmdldF9yb290ZnN9L2luc3Rh
bGwvcmVjb21tZW5kLm5ldy5saXN0ICR7dGFyZ2V0X3Jvb3Rmc30vaW5zdGFsbC9yZWNvbW1lbmQu
bGlzdAoJCXJtICR7dGFyZ2V0X3Jvb3Rmc30vaW5zdGFsbC9yZWNvbW1lbmQgJHt0YXJnZXRfcm9v
dGZzfS9pbnN0YWxsL3JlY29tbWVuZC5uZXcKCSBkb25lCglmaQoKCSMgTm93IHRoYXQgd2UgaGF2
ZSBhIHNvbHV0aW9uLCBwdWxsIG91dCBhIGxpc3Qgb2Ygd2hhdCB0byBpbnN0YWxsLi4uCgllY2hv
ICJNYW5pZmVzdDogJHt0YXJnZXRfcm9vdGZzfS9pbnN0YWxsL2luc3RhbGxfc29sdXRpb24ubWFu
aWZlc3QiCglycG0gLUQgIl9kYnBhdGggJHt0YXJnZXRfcm9vdGZzfS9pbnN0YWxsIiAtcWEgLS1x
ZiAiJXtwYWNrYWdlb3JpZ2lufVxuIiBcCgkJLS1yb290ICIke3RhcmdldF9yb290ZnN9L2luc3Rh
bGwiIFwKCQktRCAiX19kYmlfdHhuIGNyZWF0ZSBub2ZzeW5jIHByaXZhdGUiIFwKCQk+ICR7dGFy
Z2V0X3Jvb3Rmc30vaW5zdGFsbC9pbnN0YWxsX3NvbHV0aW9uLm1hbmlmZXN0CgoJdG91Y2ggJHt0
YXJnZXRfcm9vdGZzfS9pbnN0YWxsL2luc3RhbGxfbXVsdGlsaWJfc29sdXRpb24ubWFuaWZlc3QK
CglpZiBbIC1zICIke3RhcmdldF9yb290ZnN9L2luc3RhbGwvaW5zdGFsbF9tdWx0aWxpYi5tYW5p
ZmVzdCIgXTsgdGhlbgoJCSMgbXVsdGlsaWIgcGFja2FnZSBpbnN0YWxsYXRpb24KCQllY2hvICIj
IEluc3RhbGwgbXVsdGlsaWIgbWFuaWZlc3QgcGFkZGluZyIgPj4gJHt0YXJnZXRfcm9vdGZzfS9p
bnN0YWxsL2luc3RhbGxfbXVsdGlsaWIubWFuaWZlc3QKCgkJIyBHZW5lcmF0ZSBhbiBpbnN0YWxs
IHNvbHV0aW9uIGJ5IGRvaW5nIGEgLS1qdXN0ZGIgaW5zdGFsbCwgdGhlbiByZWNyZWF0ZSBpdCB3
aXRoCgkJIyBhbiBhY3R1YWwgcGFja2FnZSBpbnN0YWxsIQoJCXJwbSAtLXByZWRlZmluZSAiX3Jw
bWRzX3N5c2luZm9fcGF0aCAke3RhcmdldF9yb290ZnN9L2V0Yy9ycG0vc3lzaW5mbyIgXAoJCQkt
LXByZWRlZmluZSAiX3JwbXJjX3BsYXRmb3JtX3BhdGggJHt0YXJnZXRfcm9vdGZzfS9ldGMvcnBt
L3BsYXRmb3JtIiBcCgkJCS0tcm9vdCAiJHt0YXJnZXRfcm9vdGZzfS9pbnN0YWxsIiBcCgkJCS1E
ICJfZGJwYXRoICR7dGFyZ2V0X3Jvb3Rmc30vaW5zdGFsbCIgLUQgImBjYXQgJHtjb25mYmFzZX0t
bWxfYXJjaHMubWFjcm9gIiBcCgkJCS1EICJfX2RiaV90eG4gY3JlYXRlIG5vZnN5bmMiIFwKCQkJ
LVUgLS1qdXN0ZGIgLS1yZXBsYWNlcGtncyAtLW5vc2NyaXB0cyAtLW5vdHJpZ2dlcnMgLS1ub3Bh
cmVudGRpcnMgLS1ub2xpbmt0b3MgLS1pZ25vcmVzaXplIFwKCQkJJHt0YXJnZXRfcm9vdGZzfS9p
bnN0YWxsL2luc3RhbGxfbXVsdGlsaWIubWFuaWZlc3QKCgkJIyBOb3cgdGhhdCB3ZSBoYXZlIGEg
c29sdXRpb24sIHB1bGwgb3V0IGEgbGlzdCBvZiB3aGF0IHRvIGluc3RhbGwuLi4KCQllY2hvICJN
YW5pZmVzdDogJHt0YXJnZXRfcm9vdGZzfS9pbnN0YWxsL2luc3RhbGxfbXVsdGlsaWIubWFuaWZl
c3QiCgkJcnBtIC1EICJfZGJwYXRoICR7dGFyZ2V0X3Jvb3Rmc30vaW5zdGFsbCIgLXFhIC0tcWYg
IiV7cGFja2FnZW9yaWdpbn1cbiIgXAoJCQktLXJvb3QgIiR7dGFyZ2V0X3Jvb3Rmc30vaW5zdGFs
bCIgXAoJCQktRCAiX19kYmlfdHhuIGNyZWF0ZSBub2ZzeW5jIHByaXZhdGUiIFwKCQkJPiAke3Rh
cmdldF9yb290ZnN9L2luc3RhbGwvaW5zdGFsbF9tdWx0aWxpYl9zb2x1dGlvbi5tYW5pZmVzdAoK
CWZpCgoJY2F0ICR7dGFyZ2V0X3Jvb3Rmc30vaW5zdGFsbC9pbnN0YWxsX3NvbHV0aW9uLm1hbmlm
ZXN0IFwKCSAgICAke3RhcmdldF9yb290ZnN9L2luc3RhbGwvaW5zdGFsbF9tdWx0aWxpYl9zb2x1
dGlvbi5tYW5pZmVzdCB8IHNvcnQgLXUgPiAke3RhcmdldF9yb290ZnN9L2luc3RhbGwvdG90YWxf
c29sdXRpb24ubWFuaWZlc3QKCgkjIENvbnN0cnVjdCBpbnN0YWxsIHNjcmlwdGxldCB3cmFwcGVy
CgljYXQgPDwgRU9GID4gL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZy
aTIvdG1wL3dvcmsvY29yZTItcG9reS1saW51eC9iYmxheWVycy0xLjAtcjAvc2NyaXB0bGV0X3dy
YXBwZXIKIyEvYmluL2Jhc2gKCmV4cG9ydCBQQVRIPSIvaG9tZS9taXNoYWwveW9jdG8vcG9reS1k
YW5ueS04LjAvc2NyaXB0czovaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQt
ZnJpMi90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9iaW4vY29yZTItcG9reS1saW51eDov
aG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvc3lzcm9vdHMv
ZnJpMi1ub2VtZ2QvdXNyL2Jpbi9jcm9zc3NjcmlwdHM6L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3kt
ZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3Ivc2Jpbjov
aG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvc3lzcm9vdHMv
eDg2XzY0LWxpbnV4L3Vzci9iaW46L2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1
aWxkLWZyaTIvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC9zYmluOi9ob21lL21pc2hhbC95b2N0
by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvL2Jp
bjovaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvc2NyaXB0czovaG9tZS9taXNoYWwv
eW9jdG8vcG9reS1kYW5ueS04LjAvYml0YmFrZS9iaW4vOi91c3IvbG9jYWwvc2JpbjovdXNyL2xv
Y2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbjovdXNyL2dhbWVzIgpleHBvcnQg
RD0iJHt0YXJnZXRfcm9vdGZzfSIKZXhwb3J0IE9GRkxJTkVfUk9PVD0iXCREIgpleHBvcnQgSVBL
R19PRkZMSU5FX1JPT1Q9IlwkRCIKZXhwb3J0IE9QS0dfT0ZGTElORV9ST09UPSJcJEQiCgpcJDIg
XCQxL1wkMyBcJDQKaWYgWyBcJD8gLW5lIDAgXTsgdGhlbgogIG1rZGlyIC1wIFwkMS9ldGMvcnBt
LXBvc3RpbnN0cwogIG51bT0xMDAKICB3aGlsZSBbIC1lIFwkMS9ldGMvcnBtLXBvc3RpbnN0cy9c
JHtudW19IF07IGRvIG51bT1cJCgobnVtICsgMSkpOyBkb25lCiAgZWNobyAiIyFcJDIiID4gXCQx
L2V0Yy9ycG0tcG9zdGluc3RzL1wke251bX0KICBlY2hvICIjIEFyZzogXCQ0IiA+PiBcJDEvZXRj
L3JwbS1wb3N0aW5zdHMvXCR7bnVtfQogIGNhdCBcJDEvXCQzID4+IFwkMS9ldGMvcnBtLXBvc3Rp
bnN0cy9cJHtudW19CiAgY2htb2QgK3ggXCQxL2V0Yy9ycG0tcG9zdGluc3RzL1wke251bX0KZmkK
RU9GCgoJY2htb2QgMDc1NSAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQt
ZnJpMi90bXAvd29yay9jb3JlMi1wb2t5LWxpbnV4L2JibGF5ZXJzLTEuMC1yMC9zY3JpcHRsZXRf
d3JhcHBlcgoKCSMgQ29uZmlndXJlIFJQTS4uLiB3ZSBlbmZvcmNlIHRoZXNlIHNldHRpbmdzIQoJ
bWtkaXIgLXAgJHt0YXJnZXRfcm9vdGZzfSR7cnBtbGliZGlyfQoJbWtkaXIgLXAgJHt0YXJnZXRf
cm9vdGZzfSR7cnBtbGliZGlyfS9sb2cKCSMgQWZ0ZXIgY2hhbmdlIHRoZSBfX2RiLiogY2FjaGUg
c2l6ZSwgbG9nIGZpbGUgd2lsbCBub3QgYmUgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHksCgkjIHRo
YXQgd2lsbCByYWlzZSBzb21lIHdhcm5pbmdzLCBzbyB0b3VjaCBhIGJhcmUgbG9nIGZvciBycG0g
d3JpdGUgaW50byBpdC4KCXRvdWNoICR7dGFyZ2V0X3Jvb3Rmc30ke3JwbWxpYmRpcn0vbG9nL2xv
Zy4wMDAwMDAwMDAxCgljYXQgPiAke3RhcmdldF9yb290ZnN9JHtycG1saWJkaXJ9L0RCX0NPTkZJ
RyA8PCBFT0YKIyA9PT09PT09PT09PT09PT09IEVudmlyb25tZW50CnNldF9kYXRhX2RpciAuCnNl
dF9jcmVhdGVfZGlyIC4Kc2V0X2xnX2RpciAuL2xvZwpzZXRfdG1wX2RpciAuL3RtcApzZXRfZmxh
Z3MgZGJfbG9nX2F1dG9yZW1vdmUgb24KCiMgLS0gdGhyZWFkX2NvdW50IG11c3QgYmUgPj0gOApz
ZXRfdGhyZWFkX2NvdW50IDY0CgojID09PT09PT09PT09PT09PT0gTG9nZ2luZwoKIyA9PT09PT09
PT09PT09PT09IE1lbW9yeSBQb29sCnNldF9jYWNoZXNpemUgMCAxMDQ4NTc2IDAKc2V0X21wX21t
YXBzaXplIDI2ODQzNTQ1NgoKIyA9PT09PT09PT09PT09PT09IExvY2tpbmcKc2V0X2xrX21heF9s
b2NrcyAxNjM4NApzZXRfbGtfbWF4X2xvY2tlcnMgMTYzODQKc2V0X2xrX21heF9vYmplY3RzIDE2
Mzg0Cm11dGV4X3NldF9tYXggMTYzODQwCgojID09PT09PT09PT09PT09PT0gUmVwbGljYXRpb24K
RU9GCgoJaWYgWyAiJHtJTlNUQUxMX0NPTVBMRU1FTlRBUllfUlBNfSIgPSAiMSIgXSA7IHRoZW4K
CQkjIE9ubHkgaW5zdGFsbCBwYWNrYWdlcyBub3QgYWxyZWFkeSBpbnN0YWxsZWQgKGRlcGVuZGVu
Y3kgY2FsY3VsYXRpb24gd2lsbAoJCSMgYWxtb3N0IGNlcnRhaW5seSBoYXZlIGFkZGVkIHNvbWUg
dGhhdCBoYXZlIGJlZW4pCgkJc29ydCAtdSAke3RhcmdldF9yb290ZnN9L2luc3RhbGwvb3JpZ2lu
YWxfc29sdXRpb24ubWFuaWZlc3QgPiAke3RhcmdldF9yb290ZnN9L2luc3RhbGwvb3JpZ2luYWxf
c29sdXRpb25fc29ydGVkLm1hbmlmZXN0CgkJc29ydCAtdSAke3RhcmdldF9yb290ZnN9L2luc3Rh
bGwvdG90YWxfc29sdXRpb24ubWFuaWZlc3QgPiAke3RhcmdldF9yb290ZnN9L2luc3RhbGwvdG90
YWxfc29sdXRpb25fc29ydGVkLm1hbmlmZXN0CgkJY29tbSAtMiAtMyAke3RhcmdldF9yb290ZnN9
L2luc3RhbGwvdG90YWxfc29sdXRpb25fc29ydGVkLm1hbmlmZXN0IFwKCQkJJHt0YXJnZXRfcm9v
dGZzfS9pbnN0YWxsL29yaWdpbmFsX3NvbHV0aW9uX3NvcnRlZC5tYW5pZmVzdCA+IFwKCQkJJHt0
YXJnZXRfcm9vdGZzfS9pbnN0YWxsL2RpZmYubWFuaWZlc3QKCQltdiAke3RhcmdldF9yb290ZnN9
L2luc3RhbGwvZGlmZi5tYW5pZmVzdCAke3RhcmdldF9yb290ZnN9L2luc3RhbGwvdG90YWxfc29s
dXRpb24ubWFuaWZlc3QKCWVsaWYgWyAiJHtJTkNfUlBNX0lNQUdFX0dFTn0iID0gIjEiIC1hIC1m
ICIke3RhcmdldF9yb290ZnN9L2V0Yy9wYXNzd2QiIF07IHRoZW4KCQllY2hvICJTa2lwcGluZyBw
cmUgaW5zdGFsbCBkdWUgdG8gZXhpc3RpbmcgaW1hZ2UiCgllbHNlCgkJIyBSUE0gaXMgc3BlY2lh
bC4gSXQgY2FuJ3QgaGFuZGxlIGRlcGVuZGVuY2llcyBhbmQgcHJlaW5zdGFsbCBzY3JpcHRzIGNv
cnJlY3RseS4gSXRzCgkJIyBwcm9iYWJseSBhIGZlYXR1cmUuIFRoZSBvbmx5IHdheSB0byBjb252
aW5jZSBycG0gdG8gYWN0dWFsbHkgcnVuIHRoZSBwcmVpbnN0YWxsIHNjcmlwdHMKCQkjIGZvciBi
YXNlLXBhc3N3ZCBhbmQgc2hhZG93IGZpcnN0IGJlZm9yZSBpbnN0YWxsaW5nIHBhY2thZ2VzIHRo
YXQgZGVwZW5kIG9uIHRoZXNlIHBhY2thZ2VzCgkJIyBpcyB0byBkbyB0d28gaW1hZ2UgaW5zdGFs
bHMsIGluc3RhbGxpbmcgb25lIHNldCBvZiBwYWNrYWdlcywgdGhlbiB0aGUgb3RoZXIuCgkJcm0g
LWYgJHt0YXJnZXRfcm9vdGZzfS9pbnN0YWxsL2luaXRpYWxfaW5zdGFsbC5tYW5pZmVzdAoJCWVj
aG8gIkluc3RhbGxpbmcgYmFzZSBkZXBlbmRlbmNpZXMgZmlyc3QgKGJhc2UtcGFzc3dkLCBiYXNl
LWZpbGVzIGFuZCBzaGFkb3cpIHNpbmNlIHJwbSBpcyBzcGVjaWFsIgoJCWdyZXAgL2Jhc2UtcGFz
c3dkLVswLTldICR7dGFyZ2V0X3Jvb3Rmc30vaW5zdGFsbC90b3RhbF9zb2x1dGlvbi5tYW5pZmVz
dCA+PiAke3RhcmdldF9yb290ZnN9L2luc3RhbGwvaW5pdGlhbF9pbnN0YWxsLm1hbmlmZXN0IHx8
IHRydWUKCQlncmVwIC9iYXNlLWZpbGVzLVswLTldICR7dGFyZ2V0X3Jvb3Rmc30vaW5zdGFsbC90
b3RhbF9zb2x1dGlvbi5tYW5pZmVzdCA+PiAke3RhcmdldF9yb290ZnN9L2luc3RhbGwvaW5pdGlh
bF9pbnN0YWxsLm1hbmlmZXN0IHx8IHRydWUKCQlncmVwIC9zaGFkb3ctWzAtOV0gJHt0YXJnZXRf
cm9vdGZzfS9pbnN0YWxsL3RvdGFsX3NvbHV0aW9uLm1hbmlmZXN0ID4+ICR7dGFyZ2V0X3Jvb3Rm
c30vaW5zdGFsbC9pbml0aWFsX2luc3RhbGwubWFuaWZlc3QgfHwgdHJ1ZQoKCQlpZiBbIC1zICR7
dGFyZ2V0X3Jvb3Rmc30vaW5zdGFsbC9pbml0aWFsX2luc3RhbGwubWFuaWZlc3QgXTsgdGhlbgoJ
CQllY2hvICIjIEluaXRpYWwgSW5zdGFsbCBtYW5pZmVzdCBwYWRkaW5nLi4uIiA+PiAke3Rhcmdl
dF9yb290ZnN9L2luc3RhbGwvaW5pdGlhbF9pbnN0YWxsLm1hbmlmZXN0CgoJCQkjIEdlbmVyYXRl
IGFuIGluc3RhbGwgc29sdXRpb24gYnkgZG9pbmcgYSAtLWp1c3RkYiBpbnN0YWxsLCB0aGVuIHJl
Y3JlYXRlIGl0IHdpdGgKCQkJIyBhbiBhY3R1YWwgcGFja2FnZSBpbnN0YWxsIQoJCQlta2RpciAt
cCAke3RhcmdldF9yb290ZnN9L2luaXRpYWwKCgkJCXJwbSAtLXByZWRlZmluZSAiX3JwbWRzX3N5
c2luZm9fcGF0aCAke3RhcmdldF9yb290ZnN9L2V0Yy9ycG0vc3lzaW5mbyIgXAoJCQkJLS1wcmVk
ZWZpbmUgIl9ycG1yY19wbGF0Zm9ybV9wYXRoICR7dGFyZ2V0X3Jvb3Rmc30vZXRjL3JwbS9wbGF0
Zm9ybSIgXAoJCQkJLS1yb290ICIke3RhcmdldF9yb290ZnN9L2luc3RhbGwiIFwKCQkJCS1EICJf
ZGJwYXRoICR7dGFyZ2V0X3Jvb3Rmc30vaW5pdGlhbCIgLUQgImBjYXQgJHtjb25mYmFzZX0ubWFj
cm9gIiBcCgkJCQktRCAiX19kYmlfdHhuIGNyZWF0ZSBub2ZzeW5jIiBcCgkJCQktVSAtLWp1c3Rk
YiAtLXJlcGxhY2Vwa2dzIC0tbm9zY3JpcHRzIC0tbm90cmlnZ2VycyAtLW5vcGFyZW50ZGlycyAt
LW5vbGlua3RvcyAtLWlnbm9yZXNpemUgXAoJCQkJJHt0YXJnZXRfcm9vdGZzfS9pbnN0YWxsL2lu
aXRpYWxfaW5zdGFsbC5tYW5pZmVzdAoKCQkJcnBtIC1EICJfZGJwYXRoICR7dGFyZ2V0X3Jvb3Rm
c30vaW5pdGlhbCIgLXFhIC0tcWYgIiV7cGFja2FnZW9yaWdpbn1cbiIgXAoJCQkJLUQgIl9fZGJp
X3R4biBjcmVhdGUgbm9mc3luYyBwcml2YXRlIiBcCgkJCQktLXJvb3QgIiR7dGFyZ2V0X3Jvb3Rm
c30vaW5zdGFsbCIgXAoJCQkJPiAke3RhcmdldF9yb290ZnN9L2luc3RhbGwvaW5pdGlhbF9zb2x1
dGlvbi5tYW5pZmVzdAoKCQkJcnBtX3VwZGF0ZV9wa2cgJHt0YXJnZXRfcm9vdGZzfS9pbnN0YWxs
L2luaXRpYWxfc29sdXRpb24ubWFuaWZlc3QKCgkJCWdyZXAgLUZ2IC1mICR7dGFyZ2V0X3Jvb3Rm
c30vaW5zdGFsbC9pbml0aWFsX3NvbHV0aW9uLm1hbmlmZXN0ICR7dGFyZ2V0X3Jvb3Rmc30vaW5z
dGFsbC90b3RhbF9zb2x1dGlvbi5tYW5pZmVzdCA+ICR7dGFyZ2V0X3Jvb3Rmc30vaW5zdGFsbC90
b3RhbF9zb2x1dGlvbi5tYW5pZmVzdC5uZXcKCQkJbXYgJHt0YXJnZXRfcm9vdGZzfS9pbnN0YWxs
L3RvdGFsX3NvbHV0aW9uLm1hbmlmZXN0Lm5ldyAke3RhcmdldF9yb290ZnN9L2luc3RhbGwvdG90
YWxfc29sdXRpb24ubWFuaWZlc3QKCgkJCXJtIC1yZiAke3RhcmdldF9yb290ZnN9L2luaXRpYWwK
CQlmaQoJZmkKCgllY2hvICJJbnN0YWxsaW5nIG1haW4gc29sdXRpb24gbWFuaWZlc3QgKCR7dGFy
Z2V0X3Jvb3Rmc30vaW5zdGFsbC90b3RhbF9zb2x1dGlvbi5tYW5pZmVzdCkiCgoJcnBtX3VwZGF0
ZV9wa2cgJHt0YXJnZXRfcm9vdGZzfS9pbnN0YWxsL3RvdGFsX3NvbHV0aW9uLm1hbmlmZXN0Cgp9
CgpiYmRlYnVnKCkgewoJVVNBR0U9J1VzYWdlOiBiYmRlYnVnIFsxMjNdICJtZXNzYWdlIicKCWlm
IFsgJCMgLWx0IDIgXTsgdGhlbgoJCWJiZmF0YWwgIiRVU0FHRSIKCWZpCgoJIyBTdHJpcCBvZmYg
dGhlIGRlYnVnIGxldmVsIGFuZCBlbnN1cmUgaXQgaXMgYW4gaW50ZWdlcgoJREJHTFZMPSQxOyBz
aGlmdAoJaWYgISBbWyAiJERCR0xWTCIgPX4gXlswLTldKyBdXTsgdGhlbgoJCWJiZmF0YWwgIiRV
U0FHRSIKCWZpCgoJIyBBbGwgZGVidWcgb3V0cHV0IGlzIHByaW50ZWQgdG8gdGhlIGxvZ3MKCWVj
aG8gIkRFQlVHOiAkKiIKCn0KCmJhc2VfZG9fcGFja2FnZSgpIHsKCToKCn0KCmRvX2NvbmZpZ3Vy
ZSgpIHsKICAgIGJhc2VfZG9fY29uZmlndXJlCgp9CgpwYWNrYWdlX2dlbmVyYXRlX3JwbV9jb25m
KCkgewoJIyBVcGRhdGUgdGFyZ2V0IHBhY2thZ2VzCglwYWNrYWdlX2dlbmVyYXRlX3JwbV9jb25m
X2NvbW1vbiAiL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1w
L2RlcGxveS9ycG0vc29sdmVkYiIgYmFzZV9hcmNocyBtbF9hcmNocwoKCSMgVXBkYXRlIFNESyBw
YWNrYWdlcwoJcGFja2FnZV9nZW5lcmF0ZV9ycG1fY29uZl9jb21tb24gIi9ob21lL21pc2hhbC95
b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC9kZXBsb3kvcnBtL3NvbHZlZGItc2Rr
IiBiYXNlX2FyY2hzCgp9CgpvZV9zb2luc3RhbGwoKSB7CgkjIFB1cnBvc2U6IEluc3RhbGwgc2hh
cmVkIGxpYnJhcnkgZmlsZSBhbmQKCSMgICAgICAgICAgY3JlYXRlIHRoZSBuZWNlc3NhcnkgbGlu
a3MKCSMgRXhhbXBsZToKCSMKCSMgb2VfCgkjCgkjYmJub3RlIGluc3RhbGxpbmcgc2hhcmVkIGxp
YnJhcnkgJDEgdG8gJDIKCSMKCWxpYm5hbWU9YGJhc2VuYW1lICQxYAoJaW5zdGFsbCAtbSA3NTUg
JDEgJDIvJGxpYm5hbWUKCXNvbmFtZWxpbms9YGk1ODYtcG9reS1saW51eC1yZWFkZWxmIC1kICQx
IHxncmVwICdMaWJyYXJ5IHNvbmFtZTonIHxzZWQgLWUgJ3MvLipcW1woLipcKVxdLiovXDEvJ2AK
CXNvbGluaz1gZWNobyAkbGlibmFtZSB8IHNlZCAtZSAncy9cLnNvXC4uKi8uc28vJ2AKCWxuIC1z
ZiAkbGlibmFtZSAkMi8kc29uYW1lbGluawoJbG4gLXNmICRsaWJuYW1lICQyLyRzb2xpbmsKCn0K
Cm9lX21hY2hpbnN0YWxsKCkgewoJIyBQdXJwb3NlOiBJbnN0YWxsIG1hY2hpbmUgZGVwZW5kZW50
IGZpbGVzLCBpZiBhdmFpbGFibGUKCSMgICAgICAgICAgSWYgbm90IGF2YWlsYWJsZSwgY2hlY2sg
aWYgdGhlcmUgaXMgYSBkZWZhdWx0CgkjICAgICAgICAgIElmIG5vIGRlZmF1bHQsIGp1c3QgdG91
Y2ggdGhlIGRlc3RpbmF0aW9uCgkjIEV4YW1wbGU6CgkjICAgICAgICAgICAgICAgICQxICAkMiAg
ICQzICAgICAgICAgJDQKCSMgb2VfbWFjaGluc3RhbGwgLW0gMDY0NCBmc3RhYiAvaG9tZS9taXNo
YWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvd29yay9jb3JlMi1wb2t5LWxp
bnV4L2JibGF5ZXJzLTEuMC1yMC9pbWFnZS9ldGMvZnN0YWIKCSMKCSMgVE9ETzogQ2hlY2sgYXJn
dW1lbnQgbnVtYmVyPwoJIwoJZmlsZW5hbWU9YGJhc2VuYW1lICQzYAoJZGlybmFtZT1gZGlybmFt
ZSAkM2AKCglmb3IgbyBpbiBgZWNobyBsaW51eDppNTg2OmJ1aWxkLWxpbnV4OnBuLWJibGF5ZXJz
OmZyaTItbm9lbWdkOng4Njpwb2t5OmNsYXNzLXRhcmdldDpmb3JjZXZhcmlhYmxlOmxpYmMtZ2xp
YmMgfCB0ciAnOicgJyAnYDsgZG8KCQlpZiBbIC1lICRkaXJuYW1lLyRvLyRmaWxlbmFtZSBdOyB0
aGVuCgkJCWJibm90ZSAkZGlybmFtZS8kby8kZmlsZW5hbWUgcHJlc2VudCwgaW5zdGFsbGluZyB0
byAkNAoJCQlpbnN0YWxsICQxICQyICRkaXJuYW1lLyRvLyRmaWxlbmFtZSAkNAoJCQlyZXR1cm4K
CQlmaQoJZG9uZQojCWJibm90ZSBvdmVycmlkZXMgc3BlY2lmaWMgZmlsZSBOT1QgcHJlc2VudCwg
dHJ5aW5nIGRlZmF1bHQ9JDMuLi4KCWlmIFsgLWUgJDMgXTsgdGhlbgoJCWJibm90ZSAkMyBwcmVz
ZW50LCBpbnN0YWxsaW5nIHRvICQ0CgkJaW5zdGFsbCAkMSAkMiAkMyAkNAoJZWxzZQoJCWJibm90
ZSAkMyBOT1QgcHJlc2VudCwgdG91Y2hpbmcgZW1wdHkgJDQKCQl0b3VjaCAkNAoJZmkKCn0KCm9l
X2xpYmluc3RhbGwoKSB7CgkjIFB1cnBvc2U6IEluc3RhbGwgYSBsaWJyYXJ5LCBpbiBhbGwgaXRz
IGZvcm1zCgkjIEV4YW1wbGUKCSMKCSMgb2VfbGliaW5zdGFsbCBsaWJsdGRsIC9ob21lL21pc2hh
bC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC9zeXNyb290cy9mcmkyLW5vZW1n
ZC91c3IvbGliLwoJIyBvZV9saWJpbnN0YWxsIC1DIHNyYy9saWJibGFoIGxpYmJsYWggL2hvbWUv
bWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3dvcmsvY29yZTItcG9r
eS1saW51eC9iYmxheWVycy0xLjAtcjAvaW1hZ2UvL3Vzci9saWIvCglkaXI9IiIKCWxpYnRvb2w9
IiIKCXNpbGVudD0iIgoJcmVxdWlyZV9zdGF0aWM9IiIKCXJlcXVpcmVfc2hhcmVkPSIiCglzdGFn
aW5nX2luc3RhbGw9IiIKCXdoaWxlIFsgIiQjIiAtZ3QgMCBdOyBkbwoJCWNhc2UgIiQxIiBpbgoJ
CS1DKQoJCQlzaGlmdAoJCQlkaXI9IiQxIgoJCQk7OwoJCS1zKQoJCQlzaWxlbnQ9MQoJCQk7OwoJ
CS1hKQoJCQlyZXF1aXJlX3N0YXRpYz0xCgkJCTs7CgkJLXNvKQoJCQlyZXF1aXJlX3NoYXJlZD0x
CgkJCTs7CgkJLSopCgkJCWJiZmF0YWwgIm9lX2xpYmluc3RhbGw6IHVua25vd24gb3B0aW9uOiAk
MSIKCQkJOzsKCQkqKQoJCQlicmVhazsKCQkJOzsKCQllc2FjCgkJc2hpZnQKCWRvbmUKCglsaWJu
YW1lPSIkMSIKCXNoaWZ0CglkZXN0cGF0aD0iJDEiCglpZiBbIC16ICIkZGVzdHBhdGgiIF07IHRo
ZW4KCQliYmZhdGFsICJvZV9saWJpbnN0YWxsOiBubyBkZXN0aW5hdGlvbiBwYXRoIHNwZWNpZmll
ZCIKCWZpCglpZiBlY2hvICIkZGVzdHBhdGgvIiB8IGVncmVwICdeL2hvbWUvbWlzaGFsL3lvY3Rv
L3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jvb3RzL2ZyaTItbm9lbWdkL3Vzci9s
aWIvJyA+L2Rldi9udWxsCgl0aGVuCgkJc3RhZ2luZ19pbnN0YWxsPTEKCWZpCgoJX19ydW5jbWQg
KCkgewoJCWlmIFsgLXogIiRzaWxlbnQiIF07IHRoZW4KCQkJZWNobyA+JjIgIm9lX2xpYmluc3Rh
bGw6ICQqIgoJCWZpCgkJJCoKCX0KCglpZiBbIC16ICIkZGlyIiBdOyB0aGVuCgkJZGlyPWBwd2Rg
CglmaQoKCWRvdGxhaT0kbGlibmFtZS5sYWkKCgkjIFNhbml0eSBjaGVjayB0aGF0IHRoZSBsaWJu
YW1lLmxhaSBpcyB1bmlxdWUKCW51bWJlcl9vZl9maWxlcz1gKGNkICRkaXI7IGZpbmQgLiAtbmFt
ZSAiJGRvdGxhaSIpIHwgd2MgLWxgCglpZiBbICRudW1iZXJfb2ZfZmlsZXMgLWd0IDEgXTsgdGhl
bgoJCWJiZmF0YWwgIm9lX2xpYmluc3RhbGw6ICRkb3RsYWkgaXMgbm90IHVuaXF1ZSBpbiAkZGly
IgoJZmkKCgoJZGlyPSRkaXJgKGNkICRkaXI7ZmluZCAuIC1uYW1lICIkZG90bGFpIikgfCBzZWQg
InMvXlwuLy87cy9cLyRkb3RsYWlcJC8vO3EiYAoJb2xkZGlyPWBwd2RgCglfX3J1bmNtZCBjZCAk
ZGlyCgoJbGFmaWxlPSRsaWJuYW1lLmxhCgoJIyBJZiBzdWNoIGZpbGUgZG9lc24ndCBleGlzdCwg
dHJ5IHRvIGN1dCB2ZXJzaW9uIHN1ZmZpeAoJaWYgWyAhIC1mICIkbGFmaWxlIiBdOyB0aGVuCgkJ
bGlibmFtZTE9YGVjaG8gIiRsaWJuYW1lIiB8IHNlZCAncy8tWzAtOS5dKiQvLydgCgkJbGFmaWxl
MT0kbGlibmFtZS5sYQoJCWlmIFsgLWYgIiRsYWZpbGUxIiBdOyB0aGVuCgkJCWxpYm5hbWU9JGxp
Ym5hbWUxCgkJCWxhZmlsZT0kbGFmaWxlMQoJCWZpCglmaQoKCWlmIFsgLWYgIiRsYWZpbGUiIF07
IHRoZW4KCQkjIGxpYnRvb2wgYXJjaGl2ZQoJCWV2YWwgYGNhdCAkbGFmaWxlfGdyZXAgIl5saWJy
YXJ5X25hbWVzPSJgCgkJbGlidG9vbD0xCgllbHNlCgkJbGlicmFyeV9uYW1lcz0iJGxpYm5hbWUu
c28qICRsaWJuYW1lLmRsbC5hICRsaWJuYW1lLiouZHlsaWIiCglmaQoKCV9fcnVuY21kIGluc3Rh
bGwgLWQgJGRlc3RwYXRoLwoJZG90YT0kbGlibmFtZS5hCglpZiBbIC1mICIkZG90YSIgLW8gLW4g
IiRyZXF1aXJlX3N0YXRpYyIgXTsgdGhlbgoJCXJtIC1mICRkZXN0cGF0aC8kZG90YQoJCV9fcnVu
Y21kIGluc3RhbGwgLW0gMDY0NCAkZG90YSAkZGVzdHBhdGgvCglmaQoJaWYgWyAtZiAiJGRvdGxh
aSIgLWEgLW4gIiRsaWJ0b29sIiBdOyB0aGVuCgkJcm0gLWYgJGRlc3RwYXRoLyRsaWJuYW1lLmxh
CgkJX19ydW5jbWQgaW5zdGFsbCAtbSAwNjQ0ICRkb3RsYWkgJGRlc3RwYXRoLyRsaWJuYW1lLmxh
CglmaQoKCWZvciBuYW1lIGluICRsaWJyYXJ5X25hbWVzOyBkbwoJCWZpbGVzPWBldmFsIGVjaG8g
JG5hbWVgCgkJZm9yIGYgaW4gJGZpbGVzOyBkbwoJCQlpZiBbICEgLWUgIiRmIiBdOyB0aGVuCgkJ
CQlpZiBbIC1uICIkbGlidG9vbCIgXTsgdGhlbgoJCQkJCWJiZmF0YWwgIm9lX2xpYmluc3RhbGw6
ICRkaXIvJGYgbm90IGZvdW5kLiIKCQkJCWZpCgkJCWVsaWYgWyAtTCAiJGYiIF07IHRoZW4KCQkJ
CV9fcnVuY21kIGNwIC1QICIkZiIgJGRlc3RwYXRoLwoJCQllbGlmIFsgISAtTCAiJGYiIF07IHRo
ZW4KCQkJCWxpYmZpbGU9IiRmIgoJCQkJcm0gLWYgJGRlc3RwYXRoLyRsaWJmaWxlCgkJCQlfX3J1
bmNtZCBpbnN0YWxsIC1tIDA3NTUgJGxpYmZpbGUgJGRlc3RwYXRoLwoJCQlmaQoJCWRvbmUKCWRv
bmUKCglpZiBbIC16ICIkbGliZmlsZSIgXTsgdGhlbgoJCWlmICBbIC1uICIkcmVxdWlyZV9zaGFy
ZWQiIF07IHRoZW4KCQkJYmJmYXRhbCAib2VfbGliaW5zdGFsbDogdW5hYmxlIHRvIGxvY2F0ZSBz
aGFyZWQgbGlicmFyeSIKCQlmaQoJZWxpZiBbIC16ICIkbGlidG9vbCIgXTsgdGhlbgoJCSMgc3Bl
Y2lhbCBjYXNlIGhhY2sgZm9yIG5vbi1saWJ0b29sIC5zby4jLiMuIyBsaW5rcwoJCWJhc2VsaWJm
aWxlPWBiYXNlbmFtZSAiJGxpYmZpbGUiYAoJCWlmIChlY2hvICRiYXNlbGliZmlsZSB8IGdyZXAg
LXFFICdebGliLipcLnNvXC5bMC05Ll0qJCcpOyB0aGVuCgkJCXNvbmFtZWxpbms9YGk1ODYtcG9r
eS1saW51eC1yZWFkZWxmIC1kICRsaWJmaWxlIHxncmVwICdMaWJyYXJ5IHNvbmFtZTonIHxzZWQg
LWUgJ3MvLipcW1woLipcKVxdLiovXDEvJ2AKCQkJc29saW5rPWBlY2hvICRiYXNlbGliZmlsZSB8
IHNlZCAtZSAncy9cLnNvXC4uKi8uc28vJ2AKCQkJaWYgWyAtbiAiJHNvbmFtZWxpbmsiIC1hIHgi
JGJhc2VsaWJmaWxlIiAhPSB4IiRzb25hbWVsaW5rIiBdOyB0aGVuCgkJCQlfX3J1bmNtZCBsbiAt
c2YgJGJhc2VsaWJmaWxlICRkZXN0cGF0aC8kc29uYW1lbGluawoJCQlmaQoJCQlfX3J1bmNtZCBs
biAtc2YgJGJhc2VsaWJmaWxlICRkZXN0cGF0aC8kc29saW5rCgkJZmkKCWZpCgoJX19ydW5jbWQg
Y2QgIiRvbGRkaXIiCgp9CgpiYXNlX2RvX2NvbXBpbGUoKSB7CglpZiBbIC1lIE1ha2VmaWxlIC1v
IC1lIG1ha2VmaWxlIC1vIC1lIEdOVW1ha2VmaWxlIF07IHRoZW4KCQlvZV9ydW5tYWtlIHx8IGRp
ZSAibWFrZSBmYWlsZWQiCgllbHNlCgkJYmJub3RlICJub3RoaW5nIHRvIGNvbXBpbGUiCglmaQoK
fQoKYmJmYXRhbCgpIHsKCWVjaG8gIkVSUk9SOiAkKiIKCWV4aXQgMQoKfQoKZG9fcGFja2FnZV93
cml0ZSgpIHsKCToKCn0KCnN5c3Jvb3Rfc3RhZ2VfZGlyKCkgewoJc3JjPSIkMSIKCWRlc3Q9IiQy
IgoJIyBpZiB0aGUgc3JjIGRvZXNuJ3QgZXhpc3QgZG9uJ3QgZG8gYW55dGhpbmcKCWlmIFsgISAt
ZCAiJHNyYyIgXTsgdGhlbgoJCSByZXR1cm4KCWZpCgoJIyBXZSBvbmx5IHdhbnQgdG8gc3RhZ2Ug
dGhlIGNvbnRlbnRzIG9mICRzcmMgaWYgaXQncyBub24tZW1wdHkgc28gZmlyc3Qgcm1kaXIgJHNy
YwoJIyB0aGVuIGlmIGl0IHN0aWxsIGV4aXN0cyAocm1kaXIgb24gbm9uLWVtcHR5IGRpciBmYWls
cykgd2UgY2FuIGNvcHkgaXRzIGNvbnRlbnRzCglybWRpciAiJHNyYyIgMj4gL2Rldi9udWxsIHx8
IHRydWUKCSMgSG93ZXZlciB3ZSBhbHdheXMgd2FudCB0byBzdGFnZSBhICRzcmMgaXRzZWxmLCBl
dmVuIGlmIGl0J3MgZW1wdHkKCW1rZGlyIC1wICIkZGVzdCIKCWlmIFsgLWQgIiRzcmMiIF07IHRo
ZW4KCQl0YXIgLWNmIC0gLUMgIiRzcmMiIC1wcyAuIHwgdGFyIC14ZiAtIC1DICIkZGVzdCIKCWZp
Cgp9CgpjcmVhdGVfY21kbGluZV93cmFwcGVyKCkgewoJIyBDcmVhdGUgYSB3cmFwcGVyIHNjcmlw
dAoJIwoJIyBUaGVzZSBhcmUgdXNlZnVsIHRvIHdvcmsgYXJvdW5kIHJlbG9jYXRpb24gaXNzdWVz
LCBieSBzZXR0aW5nIGVudmlyb25tZW50CgkjIHZhcmlhYmxlcyB3aGljaCBwb2ludCB0byBwYXRo
cyBpbiB0aGUgZmlsZXN5c3RlbS4KCSMKCSMgVXNhZ2U6IGNyZWF0ZV93cmFwcGVyIEZJTEVOQU1F
IFtbVkFSPVZBTFVFXS4uXQoKCWNtZD0kMQoJc2hpZnQKCgllY2hvICJHZW5lcmF0aW5nIHdyYXBw
ZXIgc2NyaXB0IGZvciAkY21kIgoKCW12ICRjbWQgJGNtZC5yZWFsCgljbWRuYW1lPWBiYXNlbmFt
ZSAkY21kYC5yZWFsCgljYXQgPDxFTkQgPiRjbWQKIyEvYmluL3NoCnJlYWxwYXRoPVxgcmVhZGxp
bmsgLWZuIFwkMFxgCmV4ZWMgXGBkaXJuYW1lIFwkcmVhbHBhdGhcYC8kY21kbmFtZSAkQCAiXCRA
IgpFTkQKCWNobW9kICt4ICRjbWQKCn0KCnBhY2thZ2VfdXBkYXRlX2luZGV4X3JwbV9jb21tb24o
KSB7CglycG1jb25mX2Jhc2U9IiQxIgoJc2hpZnQKCiAgICAgICAgY3JlYXRlZGlycz0iIgoJZm9y
IGFyY2h2YXIgaW4gIiRAIjsgZG8KCQlldmFsIGFyY2hzPVwkeyR7YXJjaHZhcn19CgkJcGFja2Fn
ZWRpcnM9IiIKCQlmb3IgYXJjaCBpbiAkYXJjaHM7IGRvCgkJCXBhY2thZ2VkaXJzPSIvaG9tZS9t
aXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvZGVwbG95L3JwbS8kYXJj
aCAkcGFja2FnZWRpcnMiCgkJCXJtIC1yZiAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04
LjAvYnVpbGQtZnJpMi90bXAvZGVwbG95L3JwbS8kYXJjaC9zb2x2ZWRiLmRvbmUKCQlkb25lCgoJ
CWNhdCAvZGV2L251bGwgPiAke3JwbWNvbmZfYmFzZX0tJHthcmNodmFyfS5jb25mCgkJZm9yIHBr
Z2RpciBpbiAkcGFja2FnZWRpcnM7IGRvCgkJCWlmIFsgLWUgJHBrZ2Rpci8gXTsgdGhlbgoJCQkJ
ZWNobyAiR2VuZXJhdGluZyBzb2x2ZSBkYiBmb3IgJHBrZ2Rpci4uLiIKCQkJCWVjaG8gJHBrZ2Rp
ci9zb2x2ZWRiID4+ICR7cnBtY29uZl9iYXNlfS0ke2FyY2h2YXJ9LmNvbmYKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjcmVhdGVkaXJzPSIkY3JlYXRlZGlycyAkcGtnZGlyIgoJCQlm
aQoJCWRvbmUKCWRvbmUKCXJwbS1jcmVhdGVzb2x2ZWRiLnB5ICJycG0iICRjcmVhdGVkaXJzCgp9
CgpiYndhcm4oKSB7CgllY2hvICJXQVJOSU5HOiAkKiIKCn0KCmJhc2VfZG9fY29uZmlndXJlKCkg
ewoJOgoKfQoKcnBtX2NvbW1vbl9jb21hbmQoKSB7CgogICAgbG9jYWwgdGFyZ2V0X3Jvb3Rmcz0i
JHtJTlNUQUxMX1JPT1RGU19SUE19IgoKICAgIHJwbSAtLXJvb3QgJHt0YXJnZXRfcm9vdGZzfSBc
CiAgICAgICAgLS1wcmVkZWZpbmUgIl9ycG1kc19zeXNpbmZvX3BhdGggJHt0YXJnZXRfcm9vdGZz
fS9ldGMvcnBtL3N5c2luZm8iIFwKICAgICAgICAtLXByZWRlZmluZSAiX3JwbXJjX3BsYXRmb3Jt
X3BhdGggJHt0YXJnZXRfcm9vdGZzfS9ldGMvcnBtL3BsYXRmb3JtIiBcCiAgICAgICAgLUQgIl92
YXIgL3ZhciIgXAogICAgICAgIC1EICJfZGJwYXRoICR7cnBtbGliZGlyfSIgXAogICAgICAgIC1E
ICJfdG1wcGF0aCAvaW5zdGFsbC90bXAiIFwKICAgICAgICAtLW5vcGFyZW50ZGlycyAtLW5vbGlu
a3RvcyBcCiAgICAgICAgLUQgIl9fZGJpX3R4biBjcmVhdGUgbm9mc3luYyBwcml2YXRlIiBcCiAg
ICAgICAgLUQgIl9jcm9zc19zY3JpcHRsZXRfd3JhcHBlciAvaG9tZS9taXNoYWwveW9jdG8vcG9r
eS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvd29yay9jb3JlMi1wb2t5LWxpbnV4L2JibGF5ZXJz
LTEuMC1yMC9zY3JpcHRsZXRfd3JhcHBlciIgJEAKCn0KCmJibm90ZSgpIHsKCWVjaG8gIk5PVEU6
ICQqIgoKfQoKZG9faW5zdGFsbCgpIHsKICAgIGJhc2VfZG9faW5zdGFsbAoKfQoKcnBtX3VwZGF0
ZV9wa2coKSB7CgogICAgbWFuaWZlc3Q9JDEKICAgICMgVGhlIG1hbmlmZXN0IGZpbGVuYW1lLCBl
LmcuIHRvdGFsX3NvbHV0aW9uLm1hbmlmZXN0CiAgICBtX25hbWU9JHttYW5pZmVzdCMjLyovfQog
ICAgbG9jYWwgdGFyZ2V0X3Jvb3Rmcz0iJHtJTlNUQUxMX1JPT1RGU19SUE19IgogICAgaW5zdGFs
bGRpcj0kdGFyZ2V0X3Jvb3Rmcy9pbnN0YWxsCiAgICBwcmVfYnRtYW5pZmVzdD0kaW5zdGFsbGRp
ci9wcmVfYnQubWFuaWZlc3QKICAgIGN1cl9idG1hbmlmZXN0PSRpbnN0YWxsZGlyL2N1cl9idC5t
YW5pZmVzdAoKICAgICMgSW5zdGFsbC9yZW1vdmUgdGhlIGRpZmZlcmVudCBwa2dzIHdoZW4gdG90
YWxfc29sdXRpb24ubWFuaWZlc3QgaXMKICAgICMgY29tbWluZyBhbmQgaW5jcmVtZW50YWwgaW1h
Z2UgZ2VuZXJhdGlvbiBpcyBlbmFibGVkLgogICAgaWYgWyAiJHtJTkNfUlBNX0lNQUdFX0dFTn0i
ID0gIjEiIC1hIC1kICIke3RhcmdldF9yb290ZnN9JHtycG1saWJkaXJ9IiBcCiAgICAgICAgLWEg
IiRtX25hbWUiID0gInRvdGFsX3NvbHV0aW9uLm1hbmlmZXN0IiBcCiAgICAgICAgLWEgIiR7SU5T
VEFMTF9DT01QTEVNRU5UQVJZX1JQTX0iICE9ICIxIiBdOyB0aGVuCiAgICAgICAgIyBHZXQgdGhl
IHByZXZpb3VzIGluc3RhbGxlZCBsaXN0CiAgICAgICAgcnBtIC0tcm9vdCAkdGFyZ2V0X3Jvb3Rm
cyAtLWRicGF0aCAke3JwbWxpYmRpcn0gXAogICAgICAgICAgICAtcWEgLS1xZiAnJXtQQUNLQUdF
T1JJR0lOfSAle0JVSUxEVElNRX1cbicgfCBzb3J0IC11IC1vICRwcmVfYnRtYW5pZmVzdAogICAg
ICAgICMgR2V0IHRoZSBjdXJyZW50IGluc3RhbGxlZCBsaXN0IChiYXNlZCBvbiBpbnN0YWxsL3Zh
ci9saWIvcnBtKQogICAgICAgIHJwbSAtLXJvb3QgJGluc3RhbGxkaXIgLUQgIl9kYnBhdGggJGlu
c3RhbGxkaXIiIFwKICAgICAgICAgICAgLXFhIC0tcWYgJyV7UEFDS0FHRU9SSUdJTn0gJXtCVUlM
RFRJTUV9XG4nIHwgc29ydCAtdSAtbyAkY3VyX2J0bWFuaWZlc3QKICAgICAgICBjb21tIC0xIC0z
ICRjdXJfYnRtYW5pZmVzdCAkcHJlX2J0bWFuaWZlc3QgfCBzZWQgJ3MjLiovXCguKlwpXC5ycG0g
LiojXDEjJyA+IFwKICAgICAgICAgICAgJGluc3RhbGxkaXIvcmVtb3ZlLm1hbmlmZXN0CiAgICAg
ICAgY29tbSAtMiAtMyAkY3VyX2J0bWFuaWZlc3QgJHByZV9idG1hbmlmZXN0IHwgYXdrICd7cHJp
bnQgJDF9JyA+IFwKICAgICAgICAgICAgJGluc3RhbGxkaXIvaW5jcmVtZW50YWwubWFuaWZlc3QK
CiAgICAgICAgIyBBdHRlbXB0IHRvIHJlbW92ZSB1bndhbnRlZCBwa2dzLCB0aGUgc2NyaXB0cyhw
cmUsIHBvc3QsIGV0Yy4pIGhhcyBub3QKICAgICAgICAjIGJlZW4gcnVuIGJ5IG5vdywgc28gZG9u
J3QgaGF2ZSB0byBydW4gdGhlbShwcmV1biwgcG9zdHVuLCBldGMuKSB3aGVuCiAgICAgICAgIyBl
cmFzZSB0aGUgcGtnCiAgICAgICAgaWYgWyAtcyAkaW5zdGFsbGRpci9yZW1vdmUubWFuaWZlc3Qg
XTsgdGhlbgogICAgICAgICAgICBycG1fY29tbW9uX2NvbWFuZCAtLW5vc2NyaXB0cyAtLW5vZGVw
cyBcCiAgICAgICAgICAgICAgICAtZSBgY2F0ICRpbnN0YWxsZGlyL3JlbW92ZS5tYW5pZmVzdGAK
ICAgICAgICBmaQoKICAgICAgICAjIEF0dGVtcHQgdG8gaW5zdGFsbCB0aGUgaW5jcmVtZW50YWwg
cGtncwogICAgICAgIGlmIFsgLXMgJGluc3RhbGxkaXIvaW5jcmVtZW50YWwubWFuaWZlc3QgXTsg
dGhlbgogICAgICAgICAgICBycG1fY29tbW9uX2NvbWFuZCAtLXJlcGxhY2VmaWxlcyAtLXJlcGxh
Y2Vwa2dzIFwKICAgICAgICAgICAgICAgLVV2aCAkaW5zdGFsbGRpci9pbmNyZW1lbnRhbC5tYW5p
ZmVzdAogICAgICAgIGZpCiAgICBlbHNlCiAgICAgICAgIyBBdHRlbXB0IHRvIGluc3RhbGwKICAg
ICAgICBycG1fY29tbW9uX2NvbWFuZCAtLXJlcGxhY2Vwa2dzIC1VaHYgJG1hbmlmZXN0CiAgICBm
aQoKfQoKc3lzcm9vdF9zdGFnZV9kaXJzKCkgewoJZnJvbT0iJDEiCgl0bz0iJDIiCgoJc3lzcm9v
dF9zdGFnZV9kaXIgJGZyb20vdXNyL2luY2x1ZGUgJHRvL3Vzci9pbmNsdWRlCglpZiBbICJ4ODZf
NjQtbGludXgiID0gImk1ODYtcG9reS1saW51eCIgXTsgdGhlbgoJCXN5c3Jvb3Rfc3RhZ2VfZGly
ICRmcm9tL3Vzci9iaW4gJHRvL3Vzci9iaW4KCQlzeXNyb290X3N0YWdlX2RpciAkZnJvbS91c3Iv
c2JpbiAkdG8vdXNyL3NiaW4KCQlzeXNyb290X3N0YWdlX2RpciAkZnJvbS9iaW4gJHRvL2JpbgoJ
CXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tL3NiaW4gJHRvL3NiaW4KCQlzeXNyb290X3N0YWdlX2Rp
ciAkZnJvbS91c3IvbGliZXhlYyAkdG8vdXNyL2xpYmV4ZWMKCQlzeXNyb290X3N0YWdlX2RpciAk
ZnJvbS9ldGMgJHRvL2V0YwoJCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tL3ZhciAkdG8vdmFyCglm
aQoJaWYgWyAtZCAkZnJvbS91c3IvbGliIF0KCXRoZW4KCQlzeXNyb290X3N0YWdlX2xpYmRpciAk
ZnJvbS8vdXNyL2xpYiAkdG8vdXNyL2xpYgoJZmkKCWlmIFsgLWQgJGZyb20vbGliIF0KCXRoZW4K
CQlzeXNyb290X3N0YWdlX2xpYmRpciAkZnJvbS9saWIgJHRvL2xpYgoJZmkKCXN5c3Jvb3Rfc3Rh
Z2VfZGlyICRmcm9tL3Vzci9zaGFyZSAkdG8vdXNyL3NoYXJlCgkjIFdlIGRvbid0IGNhcmUgYWJv
dXQgZG9jcy9pbmZvL21hbnBhZ2VzL2xvY2FsZXMKCXJtIC1yZiAkdG8vdXNyL3NoYXJlL21hbi8g
JHRvL3Vzci9zaGFyZS9kb2MvICR0by91c3Ivc2hhcmUvaW5mby8gJHt0b30vdXNyL3NoYXJlL2xv
Y2FsZS8KCXJtIC1yZiAkdG8vdXNyL3NoYXJlL2FwcGxpY2F0aW9ucy8gJHRvL3Vzci9zaGFyZS9m
b250cy8gJHRvL3Vzci9zaGFyZS9waXhtYXBzLwoKfQoKcHJvY2Vzc19wa2dfbGlzdF9ycG0oKSB7
Cglsb2NhbCBpbnN0dHlwZT0kMQoJc2hpZnQKCSMgJEAgaXMgc3BlY2lhbCBQT1NJWCBsaW5lYXIg
YXJyYXkgY2FuIG5vdCBiZSBhc3NpZ25lZAoJIyB0byBhIGxvY2FsIHZhcmlhYmxlIGRpcmVjdGx5
IGluIGRhc2ggc2luY2UgaXRzIHNlcGFyYXRlZCBieQoJIyBzcGFjZSBhbmQgZGFzaCBleHBhbmRz
IGl0IGJlZm9yZSBhc3NpZ25tZW50CgkjIGFuZCBsb2NhbCB4PTEgMiAzIGFuZCBub3QgeD0iMSAy
IDMiCglsb2NhbCBwa2dzCglwa2dzPSIkQCIKCWxvY2FsIGNvbmZiYXNlPSR7SU5TVEFMTF9DT05G
QkFTRV9SUE19CgoJcHJpbnRmICIiID4gJHt0YXJnZXRfcm9vdGZzfS9pbnN0YWxsL2Jhc2VfYXJj
aHMucGtnbGlzdAoJcHJpbnRmICIiID4gJHt0YXJnZXRfcm9vdGZzfS9pbnN0YWxsL21sX2FyY2hz
LnBrZ2xpc3QKCglmb3IgcGtnIGluICRwa2dzOyBkbwoJCWVjaG8gIlByb2Nlc3NpbmcgJHBrZy4u
LiIKCgkJYXJjaHZhcj1iYXNlX2FyY2hzCgkJbWxfcGtnPSRwa2cKCQlmb3IgaSBpbiAke01VTFRJ
TElCX1BSRUZJWF9MSVNUfSA7IGRvCgkJCQlzdWJzdD0ke3BrZyMke2l9LX0KCQkJCWlmIFsgJHN1
YnN0ICE9ICRwa2cgXSA7IHRoZW4KCQkJCQkJbWxfcGtnPSRzdWJzdAoJCQkJCQlhcmNodmFyPW1s
X2FyY2hzCgkJCQkJCWJyZWFrCgkJCQlmaQoJCWRvbmUKCgkJZWNobyAkbWxfcGtnID4+ICR7dGFy
Z2V0X3Jvb3Rmc30vaW5zdGFsbC8kYXJjaHZhci5wa2dsaXN0Cglkb25lCgoJbG9jYWwgbWFuaWZl
c3RwZng9Imluc3RhbGwiCglsb2NhbCBleHRyYW9wdD0iIgoJaWYgWyAiJGluc3R0eXBlIiA9ICJh
dHRlbXB0b25seSIgXSA7IHRoZW4KCQltYW5pZmVzdHBmeD0iaW5zdGFsbF9hdHRlbXB0b25seSIK
CQlleHRyYW9wdD0iLWkiCglmaQoKCXJwbXJlc29sdmUgJGV4dHJhb3B0ICR7Y29uZmJhc2V9LWJh
c2VfYXJjaHMuY29uZiAke3RhcmdldF9yb290ZnN9L2luc3RhbGwvYmFzZV9hcmNocy5wa2dsaXN0
IC1vICR7dGFyZ2V0X3Jvb3Rmc30vaW5zdGFsbC8ke21hbmlmZXN0cGZ4fS5tYW5pZmVzdAoJaWYg
WyAtcyAke3RhcmdldF9yb290ZnN9L2luc3RhbGwvbWxfYXJjaHMucGtnbGlzdCBdIDsgdGhlbgoJ
CXJwbXJlc29sdmUgJGV4dHJhb3B0ICR7Y29uZmJhc2V9LW1sX2FyY2hzLmNvbmYgJHt0YXJnZXRf
cm9vdGZzfS9pbnN0YWxsL21sX2FyY2hzLnBrZ2xpc3QgLW8gJHt0YXJnZXRfcm9vdGZzfS9pbnN0
YWxsLyR7bWFuaWZlc3RwZnh9X211bHRpbGliLm1hbmlmZXN0CglmaQoKfQoKc3N0YXRlX2NyZWF0
ZV9wYWNrYWdlKCkgewoJY2QgJHtTU1RBVEVfQlVJTERESVJ9CglURklMRT1gbWt0ZW1wIC9ob21l
L21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3NzdGF0ZS1jYWNoZS9JTi9z
c3RhdGUtYmJsYXllcnMtY29yZTItcG9reS1saW51eC0xLjAtcjAtY29yZTItMi1JTlZBTElELlhY
WFhYWFhYYAoJIyBOZWVkIHRvIGhhbmRsZSBlbXB0eSBkaXJlY3RvcmllcwoJaWYgWyAiJChscyAt
QSkiIF07IHRoZW4KCQl0YXIgLWN6ZiAkVEZJTEUgKgoJZWxzZQoJCXRhciAtY3ogLS1maWxlPSRU
RklMRSAtLWZpbGVzLWZyb209L2Rldi9udWxsCglmaQoJY2htb2QgMDY2NCAkVEZJTEUKCW12ICRU
RklMRSAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi9zc3RhdGUt
Y2FjaGUvSU4vc3N0YXRlLWJibGF5ZXJzLWNvcmUyLXBva3ktbGludXgtMS4wLXIwLWNvcmUyLTIt
SU5WQUxJRAoKCWNkIC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmky
L3RtcC93b3JrL2NvcmUyLXBva3ktbGludXgvYmJsYXllcnMtMS4wLXIwCglybSAtcmYgJHtTU1RB
VEVfQlVJTERESVJ9Cgp9CgpiYnBsYWluKCkgewoJZWNobyAiJCoiCgp9CgpsZGNvbmZpZ19wb3N0
aW5zdF9mcmFnbWVudCgpIHsKaWYgWyB4IiREIiA9ICJ4IiBdOyB0aGVuCglpZiBbIC14IC9zYmlu
L2xkY29uZmlnIF07IHRoZW4gL3NiaW4vbGRjb25maWcgOyBmaQpmaQoKfQoKZG9fY2hlY2t1cmlh
bGwoKSB7Cgk6Cgp9CgpwYWNrYWdlZHN0YWdpbmdfZmFzdHBhdGgoKSB7Cgk6Cgp9CgpycG1fbG9n
X2NoZWNrKCkgewoJdGFyZ2V0PSIkMSIKCWxmX3BhdGg9IiQyIgoKCWxmX3R4dD0iYGNhdCAkbGZf
cGF0aGAiCglmb3Iga2V5d29yZF9kaWUgaW4gIkNhbm5vdCBmaW5kIHBhY2thZ2UiICJleGl0IDEi
IEVSUiBGYWlsCglkbwoJCWlmIChlY2hvICIkbGZfdHh0IiB8IGdyZXAgLXYgbG9nX2NoZWNrIHwg
Z3JlcCAiJGtleXdvcmRfZGllIikgPi9kZXYvbnVsbCAyPiYxCgkJdGhlbgoJCQllY2hvICJsb2df
Y2hlY2s6IFRoZXJlIHdlcmUgZXJyb3IgbWVzc2FnZXMgaW4gdGhlIGxvZ2ZpbGUiCgkJCXByaW50
ZiAibG9nX2NoZWNrOiBNYXRjaGVkIGtleXdvcmQ6IFska2V5d29yZF9kaWVdXG5cbiIKCQkJZWNo
byAiJGxmX3R4dCIgfCBncmVwIC12IGxvZ19jaGVjayB8IGdyZXAgLUMgNSAtaSAiJGtleXdvcmRf
ZGllIgoJCQllY2hvICIiCgkJCWRvX2V4aXQ9MQoJCWZpCglkb25lCgl0ZXN0ICIkZG9fZXhpdCIg
PSAxICYmIGV4aXQgMQoJdHJ1ZQoKfQoKc3N0YXRlX3VucGFja19wYWNrYWdlKCkgewoJbWtkaXIg
LXAgJHtTU1RBVEVfSU5TVERJUn0KCWNkICR7U1NUQVRFX0lOU1RESVJ9Cgl0YXIgLXh2emYgL2hv
bWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvc3N0YXRlLWNhY2hlL0lO
L3NzdGF0ZS1iYmxheWVycy1jb3JlMi1wb2t5LWxpbnV4LTEuMC1yMC1jb3JlMi0yLUlOVkFMSUQK
Cn0KCnBhY2thZ2VfdXBkYXRlX2luZGV4X3JwbSgpIHsKCWlmIFsgISAteiAiJHtERVBMT1lfS0VF
UF9QQUNLQUdFU30iIC1vICEgLWUgIi9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9i
dWlsZC1mcmkyL3RtcC9kZXBsb3kvcnBtIiBdOyB0aGVuCgkJcmV0dXJuCglmaQoKCSMgVXBkYXRl
IHRhcmdldCBwYWNrYWdlcwoJYmFzZV9hcmNocz0iYGVjaG8gYWxsIGFueSBub2FyY2ggeDg2IGkz
ODYgaTQ4NiBpNTg2IGk2ODYgY29yZTIgZnJpMl9ub2VtZ2QgfCBzZWQgJ3MvLS9fL2cnYCIKCW1s
X2FyY2hzPSJgZWNobyAke01VTFRJTElCX1BBQ0tBR0VfQVJDSFN9IHwgc2VkICdzLy0vXy9nJ2Ai
CglwYWNrYWdlX3VwZGF0ZV9pbmRleF9ycG1fY29tbW9uICIvaG9tZS9taXNoYWwveW9jdG8vcG9r
eS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvZGVwbG95L3JwbS9zb2x2ZWRiIiBiYXNlX2FyY2hz
IG1sX2FyY2hzCgoJIyBVcGRhdGUgU0RLIHBhY2thZ2VzCgliYXNlX2FyY2hzPSJgZWNobyBhbGwg
YW55IG5vYXJjaCB4ODZfNjQtbmF0aXZlc2RrIHwgc2VkICdzLy0vXy9nJ2AiCglwYWNrYWdlX3Vw
ZGF0ZV9pbmRleF9ycG1fY29tbW9uICIvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAv
YnVpbGQtZnJpMi90bXAvZGVwbG95L3JwbS9zb2x2ZWRiLXNkayIgYmFzZV9hcmNocwoKfQoKc3lz
cm9vdF9zdGFnZV9hbGwoKSB7CglzeXNyb290X3N0YWdlX2RpcnMgL2hvbWUvbWlzaGFsL3lvY3Rv
L3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3dvcmsvY29yZTItcG9reS1saW51eC9iYmxh
eWVycy0xLjAtcjAvaW1hZ2UgL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxk
LWZyaTIvdG1wL3dvcmsvY29yZTItcG9reS1saW51eC9iYmxheWVycy0xLjAtcjAvc3lzcm9vdC1k
ZXN0ZGlyLwoKfQoKbGljZW5zZV9jcmVhdGVfbWFuaWZlc3QoKSB7Cglta2RpciAtcCAvaG9tZS9t
aXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvZGVwbG95L2xpY2Vuc2Vz
L2JibGF5ZXJzLWZyaTItbm9lbWdkLTIwMTIxMTI3MTQxNDE5CgkjIEdldCBsaXN0IG9mIGluc3Rh
bGxlZCBwYWNrYWdlcwoJbGlzdF9pbnN0YWxsZWRfcGFja2FnZXMgfCBncmVwIC12ICJsb2NhbGUi
IHxzb3J0ID4gL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1w
L2RlcGxveS9saWNlbnNlcy9iYmxheWVycy1mcmkyLW5vZW1nZC0yMDEyMTEyNzE0MTQxOS9wYWNr
YWdlLm1hbmlmZXN0CglJTlNUQUxMRURfUEtHUz1gY2F0IC9ob21lL21pc2hhbC95b2N0by9wb2t5
LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC9kZXBsb3kvbGljZW5zZXMvYmJsYXllcnMtZnJpMi1u
b2VtZ2QtMjAxMjExMjcxNDE0MTkvcGFja2FnZS5tYW5pZmVzdGAKCUxJQ0VOU0VfTUFOSUZFU1Q9
Ii9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC9kZXBsb3kv
bGljZW5zZXMvYmJsYXllcnMtZnJpMi1ub2VtZ2QtMjAxMjExMjcxNDE0MTkvbGljZW5zZS5tYW5p
ZmVzdCIKCSMgcmVtb3ZlIGV4aXN0aW5nIGxpY2Vuc2UubWFuaWZlc3QgZmlsZQoJaWYgWyAtZiAk
e0xJQ0VOU0VfTUFOSUZFU1R9IF07IHRoZW4KCQlybSAke0xJQ0VOU0VfTUFOSUZFU1R9CglmaQoJ
IyBsaXN0IG9mIGluc3RhbGxlZCBwYWNrYWdlcyBpcyBicm9rZW4gZm9yIGRlYgoJZm9yIHBrZyBp
biAke0lOU1RBTExFRF9QS0dTfTsgZG8KCQkjIG5vdCB0aGUgYmVzdCB3YXkgdG8gZG8gdGhpcyBi
dXQgbGljZW5zZXMgYXJlIG5vdCBhcmNoIGRlcGVuZGFudCBpaXJjCgkJZmlsZW5hbWU9YGxzIC9o
b21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC9wa2dkYXRhLyov
cnVudGltZS1yZXZlcnNlLyR7cGtnfXwgaGVhZCAtMWAKCQlwa2dlZF9wbj0iJChzZWQgLW4gJ3Mv
XlBOOiAvL3AnICR7ZmlsZW5hbWV9KSIKCgkJIyBleGNsdWRlIGxvY2FsZSByZWNpcGVzCgkJaWYg
WyAiJHtwa2dlZF9wbn0iID0gIipsb2NhbGUqIiBdOyB0aGVuCgkJCWNvbnRpbnVlCgkJZmkKCgkJ
IyBjaGVjayB0byBzZWUgaWYgdGhlIHBhY2thZ2UgbmFtZSBleGlzdHMgaW4gdGhlIG1hbmlmZXN0
LiBpZiBzbywgYmFpbC4KCQlpZiBncmVwIC1xICJeUEFDS0FHRSBOQU1FOiAke3BrZ30iICR7TElD
RU5TRV9NQU5JRkVTVH07IHRoZW4KCQkJY29udGludWUKCQlmaQoKCQlwa2dlZF9wdj0iJChzZWQg
LW4gJ3MvXlBWOiAvL3AnICR7ZmlsZW5hbWV9KSIKCQlwa2dlZF9uYW1lPSIkKGJhc2VuYW1lICQo
cmVhZGxpbmsgJHtmaWxlbmFtZX0pKSIKCQlwa2dlZF9saWM9IiQoc2VkIC1uICIvXkxJQ0VOU0Vf
JHtwa2dlZF9uYW1lfTogL3sgcy9eTElDRU5TRV8ke3BrZ2VkX25hbWV9OiAvLzsgcy9bfCYoKSpd
LyAvZzsgcy8gICovIC9nOyBwIH0iICR7ZmlsZW5hbWV9KSIKCQlpZiBbIC16ICR7cGtnZWRfbGlj
fSBdOyB0aGVuCgkJCSMgZmFsbGJhY2sgY2hlY2tpbmcgdmFsdWUgb2YgTElDRU5TRQoJCQlwa2dl
ZF9saWM9IiQoc2VkIC1uICIvXkxJQ0VOU0U6IC97IHMvXkxJQ0VOU0U6IC8vOyBzL1t8JigpKl0v
IC9nOyBzLyAgKi8gL2c7IHAgfSIgJHtmaWxlbmFtZX0pIgoJCWZpCgoJCWVjaG8gIlBBQ0tBR0Ug
TkFNRToiICR7cGtnfSA+PiAke0xJQ0VOU0VfTUFOSUZFU1R9CgkJZWNobyAiUEFDS0FHRSBWRVJT
SU9OOiIgJHtwa2dlZF9wdn0gPj4gJHtMSUNFTlNFX01BTklGRVNUfQoJCWVjaG8gIlJFQ0lQRSBO
QU1FOiIgJHtwa2dlZF9wbn0gPj4gJHtMSUNFTlNFX01BTklGRVNUfQoJCXByaW50ZiAiTElDRU5T
RToiID4+ICR7TElDRU5TRV9NQU5JRkVTVH0KCQlmb3IgbGljIGluICR7cGtnZWRfbGljfTsgZG8K
CQkJIyB0byByZWZlcmVuY2UgYSBsaWNlbnNlIGZpbGUgdHJpbSB0cmFpbGluZyArIHN5bWJvbAoJ
CQlpZiBbIC1lICIvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90
bXAvZGVwbG95L2xpY2Vuc2VzLyR7cGtnZWRfcG59L2dlbmVyaWNfJHtsaWMlK30iIF07IHRoZW4K
CQkJCXByaW50ZiAiICR7bGljfSIgPj4gJHtMSUNFTlNFX01BTklGRVNUfQoJCQllbHNlCgkJCQll
Y2hvICJXQVJOSU5HOiBUaGUgbGljZW5zZSBsaXN0ZWQgJHtsaWN9IHdhcyBub3QgaW4gdGhlIGxp
Y2Vuc2VzIGNvbGxlY3RlZCBmb3IgJHtwa2dlZF9wbn0iCgkJCWZpCgkJZG9uZQoJCXByaW50ZiAi
XG5cbiIgPj4gJHtMSUNFTlNFX01BTklGRVNUfQoJZG9uZQoKCSMgVHdvIG9wdGlvbnMgaGVyZToK
CSMgLSBKdXN0IGNvcHkgdGhlIG1hbmlmZXN0CgkjIC0gQ29weSB0aGUgbWFuaWZlc3QgYW5kIHRo
ZSBsaWNlbnNlIGRpcmVjdG9yaWVzCgkjIFdpdGggYm90aCBvcHRpb25zIHNldCB3ZSBzZWUgYSAu
NSBNIGluY3JlYXNlIGluIGNvcmUtaW1hZ2UtbWluaW1hbAoJaWYgWyAtbiAiJHtDT1BZX0xJQ19N
QU5JRkVTVH0iIF07IHRoZW4KCQlta2RpciAtcCAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5u
eS04LjAvYnVpbGQtZnJpMi90bXAvd29yay9jb3JlMi1wb2t5LWxpbnV4L2JibGF5ZXJzLTEuMC1y
MC9yb290ZnMvdXNyL3NoYXJlL2NvbW1vbi1saWNlbnNlcy8KCQljcCAke0xJQ0VOU0VfTUFOSUZF
U1R9IC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC93b3Jr
L2NvcmUyLXBva3ktbGludXgvYmJsYXllcnMtMS4wLXIwL3Jvb3Rmcy91c3Ivc2hhcmUvY29tbW9u
LWxpY2Vuc2VzL2xpY2Vuc2UubWFuaWZlc3QKCQlpZiBbIC1uICIke0NPUFlfTElDX0RJUlN9IiBd
OyB0aGVuCgkJCWZvciBwa2cgaW4gJHtJTlNUQUxMRURfUEtHU307IGRvCgkJCQlta2RpciAtcCAv
aG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvd29yay9jb3Jl
Mi1wb2t5LWxpbnV4L2JibGF5ZXJzLTEuMC1yMC9yb290ZnMvdXNyL3NoYXJlL2NvbW1vbi1saWNl
bnNlcy8ke3BrZ30KCQkJCWZvciBsaWMgaW4gYGxzIC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRh
bm55LTguMC9idWlsZC1mcmkyL3RtcC9kZXBsb3kvbGljZW5zZXMvJHtwa2d9YDsgZG8KCQkJCQkj
IFJlYWxseSBkb24ndCBuZWVkIHRvIGNvcHkgdGhlIGdlbmVyaWNzIGFzIHRoZXkncmUKCQkJCQkj
IHJlcHJlc2VudGVkIGluIHRoZSBtYW5pZmVzdCBhbmQgaW4gdGhlIGFjdHVhbCBwa2cgbGljZW5z
ZXMKCQkJCQkjIERvaW5nIHNvIHdvdWxkIG1ha2UgeW91ciBpbWFnZSBxdWl0ZSBhIGJpdCBsYXJn
ZXIKCQkJCQlpZiBbWyAiJHtsaWN9IiAhPSAiZ2VuZXJpY18iKiBdXTsgdGhlbgoJCQkJCQljcCAv
aG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvZGVwbG95L2xp
Y2Vuc2VzLyR7cGtnfS8ke2xpY30gL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1
aWxkLWZyaTIvdG1wL3dvcmsvY29yZTItcG9reS1saW51eC9iYmxheWVycy0xLjAtcjAvcm9vdGZz
L3Vzci9zaGFyZS9jb21tb24tbGljZW5zZXMvJHtwa2d9LyR7bGljfQoJCQkJCWVsaWYgW1sgIiR7
bGljfSIgPT0gImdlbmVyaWNfIiogXV07IHRoZW4KCQkJCQkJaWYgWyAhIC1mIC9ob21lL21pc2hh
bC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC93b3JrL2NvcmUyLXBva3ktbGlu
dXgvYmJsYXllcnMtMS4wLXIwL3Jvb3Rmcy91c3Ivc2hhcmUvY29tbW9uLWxpY2Vuc2VzLyR7bGlj
fSBdOyB0aGVuCgkJCQkJCQljcCAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVp
bGQtZnJpMi90bXAvZGVwbG95L2xpY2Vuc2VzLyR7cGtnfS8ke2xpY30gL2hvbWUvbWlzaGFsL3lv
Y3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3dvcmsvY29yZTItcG9reS1saW51eC9i
YmxheWVycy0xLjAtcjAvcm9vdGZzL3Vzci9zaGFyZS9jb21tb24tbGljZW5zZXMvCgkJCQkJCWZp
CgkJCQkJCWxuIC1zIC4uLyR7bGljfSAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAv
YnVpbGQtZnJpMi90bXAvd29yay9jb3JlMi1wb2t5LWxpbnV4L2JibGF5ZXJzLTEuMC1yMC9yb290
ZnMvdXNyL3NoYXJlL2NvbW1vbi1saWNlbnNlcy8ke3BrZ30vJHtsaWN9CgkJCQkJZmkKCQkJCWRv
bmUKCQkJZG9uZQoJCWZpCglmaQoKCn0KCm1rbGlic19vcHRpbWl6ZV9pbWFnZSgpIHsKCWZvciBp
bWcgaW4gJHtNS0xJQlNfT1BUSU1JWkVEX0lNQUdFU30KCWRvCgkJaWYgWyAiJHtpbWd9IiA9ICJi
YmxheWVycyIgXSB8fCBbICIke2ltZ30iID0gImFsbCIgXQoJCXRoZW4KCQkJbWtsaWJzX29wdGlt
aXplX2ltYWdlX2RvaXQKCQkJYnJlYWsKCQlmaQoJZG9uZQoKfQoKb2VfcnVubWFrZSgpIHsKCWlm
IFsgeCIkTUFLRSIgPSB4IF07IHRoZW4gTUFLRT1tYWtlOyBmaQoJYmJub3RlIG1ha2UgLWUgTUFL
RUZMQUdTPSAiJEAiCgltYWtlIC1lIE1BS0VGTEFHUz0gIiRAIiB8fCBkaWUgIm9lX3J1bm1ha2Ug
ZmFpbGVkIgoKfQoKY3JlYXRlX3dyYXBwZXIoKSB7CgkjIENyZWF0ZSBhIHdyYXBwZXIgc2NyaXB0
CgkjCgkjIFRoZXNlIGFyZSB1c2VmdWwgdG8gd29yayBhcm91bmQgcmVsb2NhdGlvbiBpc3N1ZXMs
IGJ5IHNldHRpbmcgZW52aXJvbm1lbnQKCSMgdmFyaWFibGVzIHdoaWNoIHBvaW50IHRvIHBhdGhz
IGluIHRoZSBmaWxlc3lzdGVtLgoJIwoJIyBVc2FnZTogY3JlYXRlX3dyYXBwZXIgRklMRU5BTUUg
W1tWQVI9VkFMVUVdLi5dCgoJY21kPSQxCglzaGlmdAoKCWVjaG8gIkdlbmVyYXRpbmcgd3JhcHBl
ciBzY3JpcHQgZm9yICRjbWQiCgoJbXYgJGNtZCAkY21kLnJlYWwKCWNtZG5hbWU9YGJhc2VuYW1l
ICRjbWRgLnJlYWwKCWNhdCA8PEVORCA+JGNtZAojIS9iaW4vc2gKcmVhbHBhdGg9XGByZWFkbGlu
ayAtZm4gXCQwXGAKZXhlYyBlbnYgJEAgXGBkaXJuYW1lIFwkcmVhbHBhdGhcYC8kY21kbmFtZSAi
XCRAIgpFTkQKCWNobW9kICt4ICRjbWQKCn0KCmJiZXJyb3IoKSB7CgllY2hvICJFUlJPUjogJCoi
Cgp9Cgpta2xpYnNfb3B0aW1pemVfaW1hZ2VfZG9pdCgpIHsKCXJtIC1yZiAvaG9tZS9taXNoYWwv
eW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvd29yay9jb3JlMi1wb2t5LWxpbnV4
L2JibGF5ZXJzLTEuMC1yMC9ta2xpYnMKCW1rZGlyIC1wIC9ob21lL21pc2hhbC95b2N0by9wb2t5
LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC93b3JrL2NvcmUyLXBva3ktbGludXgvYmJsYXllcnMt
MS4wLXIwL21rbGlicy9kZXN0CgljZCAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAv
YnVpbGQtZnJpMi90bXAvd29yay9jb3JlMi1wb2t5LWxpbnV4L2JibGF5ZXJzLTEuMC1yMC9yb290
ZnMKCWR1IC1icyA+IC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmky
L3RtcC93b3JrL2NvcmUyLXBva3ktbGludXgvYmJsYXllcnMtMS4wLXIwL21rbGlicy9kdS5iZWZv
cmUubWtsaWJzLnR4dAoJZm9yIGkgaW4gYGZpbmQgLmA7IGRvIGZpbGUgJGk7IGRvbmUgXAoJCXwg
Z3JlcCBFTEYgXAoJCXwgZ3JlcCAiTFNCIGV4ZWN1dGFibGUiIFwKCQl8IGdyZXAgImR5bmFtaWNh
bGx5IGxpbmtlZCIgXAoJCXwgc2VkICJzLzouKi8vIiBcCgkJfCBzZWQgInMrXlwuLysrIiBcCgkJ
PiAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvd29yay9j
b3JlMi1wb2t5LWxpbnV4L2JibGF5ZXJzLTEuMC1yMC9ta2xpYnMvZXhlY3V0YWJsZXMubGlzdAoK
CWNhc2UgaTU4NiBpbgoJCXBvd2VycGMgfCBtaXBzIHwgbWljcm9ibGF6ZSApCgkJCWR5bmFtaWNf
bG9hZGVyPSIvbGliL2xkLnNvLjEiCgkJCTs7CgkJcG93ZXJwYzY0KQoJCQlkeW5hbWljX2xvYWRl
cj0iL2xpYi9sZDY0LnNvLjEiCgkJCTs7CgkJeDg2XzY0KQoJCQlkeW5hbWljX2xvYWRlcj0iL2xp
Yi9sZC1saW51eC14ODYtNjQuc28uMiIKCQkJOzsKCQlpNTg2ICkKCQkJZHluYW1pY19sb2FkZXI9
Ii9saWIvbGQtbGludXguc28uMiIKCQkJOzsKCQlhcm0gKQoJCQlkeW5hbWljX2xvYWRlcj0iL2xp
Yi9sZC1saW51eC5zby4zIgoJCQk7OwoJCSogKQoJCQlkeW5hbWljX2xvYWRlcj0iL3Vua25vd25f
ZHluYW1pY19saW5rZXIiCgkJCTs7Cgllc2FjCgoJbWtsaWJzIC12IFwKCQktLWxkbGliICR7ZHlu
YW1pY19sb2FkZXJ9IFwKCQktLWxpYmRpciBsaWIgXAoJCS0tc3lzcm9vdCAvaG9tZS9taXNoYWwv
eW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvc3lzcm9vdHMvZnJpMi1ub2VtZ2Qg
XAoJCS0tcm9vdCAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90
bXAvd29yay9jb3JlMi1wb2t5LWxpbnV4L2JibGF5ZXJzLTEuMC1yMC9yb290ZnMgXAoJCS0tdGFy
Z2V0IGBlY2hvIGk1ODYtcG9reS1saW51eC0gfCBzZWQgJ3MvLSQvLycgYCBcCgkJLWQgL2hvbWUv
bWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3dvcmsvY29yZTItcG9r
eS1saW51eC9iYmxheWVycy0xLjAtcjAvbWtsaWJzL2Rlc3QgXAoJCWBjYXQgL2hvbWUvbWlzaGFs
L3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3dvcmsvY29yZTItcG9reS1saW51
eC9iYmxheWVycy0xLjAtcjAvbWtsaWJzL2V4ZWN1dGFibGVzLmxpc3RgCgoJY2QgL2hvbWUvbWlz
aGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3dvcmsvY29yZTItcG9reS1s
aW51eC9iYmxheWVycy0xLjAtcjAvbWtsaWJzL2Rlc3QKCWZvciBpIGluICoKCWRvCgkJY3AgJGkg
YGZpbmQgL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3dv
cmsvY29yZTItcG9reS1saW51eC9iYmxheWVycy0xLjAtcjAvcm9vdGZzIC1uYW1lICRpYAoJZG9u
ZQoKCWNkIC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC93
b3JrL2NvcmUyLXBva3ktbGludXgvYmJsYXllcnMtMS4wLXIwL3Jvb3RmcwoJZHUgLWJzID4gL2hv
bWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3dvcmsvY29yZTIt
cG9reS1saW51eC9iYmxheWVycy0xLjAtcjAvbWtsaWJzL2R1LmFmdGVyLm1rbGlicy50eHQKCgll
Y2hvIHJvb3RmcyBzaXplIGJlZm9yZSBta2xpYnMgb3B0aW1pemF0aW9uOiBgY2F0IC9ob21lL21p
c2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC93b3JrL2NvcmUyLXBva3kt
bGludXgvYmJsYXllcnMtMS4wLXIwL21rbGlicy9kdS5iZWZvcmUubWtsaWJzLnR4dGAKCWVjaG8g
cm9vdGZzIHNpemUgYWZ0ZXIgbWtsaWJzIG9wdGltaXphdGlvbjogYGNhdCAvaG9tZS9taXNoYWwv
eW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvd29yay9jb3JlMi1wb2t5LWxpbnV4
L2JibGF5ZXJzLTEuMC1yMC9ta2xpYnMvZHUuYWZ0ZXIubWtsaWJzLnR4dGAKCn0KCnBhY2thZ2Vf
Z2VuZXJhdGVfcnBtX2NvbmZfY29tbW9uKCkgewoJcnBtY29uZl9iYXNlPSIkMSIKCXNoaWZ0CgoJ
cHJpbnRmICJfc29sdmVfZGJwYXRoICIgPiAke3JwbWNvbmZfYmFzZX0ubWFjcm8KCW9fY29sb249
ImZhbHNlIgoKCWZvciBhcmNodmFyIGluICIkQCI7IGRvCgkJcHJpbnRmICJfc29sdmVfZGJwYXRo
ICIgPiAke3JwbWNvbmZfYmFzZX0tJHthcmNodmFyfS5tYWNybwoJCWNvbG9uPSJmYWxzZSIKCQlm
b3IgZWFjaCBpbiBgY2F0ICR7cnBtY29uZl9iYXNlfS0ke2FyY2h2YXJ9LmNvbmZgIDsgZG8KCQkJ
aWYgWyAiJG9fY29sb24iID0gInRydWUiIF07IHRoZW4KCQkJCXByaW50ZiAiOiIgPj4gJHtycG1j
b25mX2Jhc2V9Lm1hY3JvCgkJCWZpCgkJCWlmIFsgIiRjb2xvbiIgPSAidHJ1ZSIgXTsgdGhlbgoJ
CQkJcHJpbnRmICI6IiA+PiAke3JwbWNvbmZfYmFzZX0tJHthcmNodmFyfS5tYWNybwoJCQlmaQoJ
CQlwcmludGYgIiVzIiAkZWFjaCA+PiAke3JwbWNvbmZfYmFzZX0ubWFjcm8KCQkJb19jb2xvbj0i
dHJ1ZSIKCQkJcHJpbnRmICIlcyIgJGVhY2ggPj4gJHtycG1jb25mX2Jhc2V9LSR7YXJjaHZhcn0u
bWFjcm8KCQkJY29sb249InRydWUiCgkJZG9uZQoJCXByaW50ZiAiXG4iID4+ICR7cnBtY29uZl9i
YXNlfS0ke2FyY2h2YXJ9Lm1hY3JvCglkb25lCglwcmludGYgIlxuIiA+PiAke3JwbWNvbmZfYmFz
ZX0ubWFjcm8KCn0KCnN5c3Jvb3Rfc3RhZ2VfbGliZGlyKCkgewoJc3JjPSIkMSIKCWRlc3Q9IiQy
IgoKCXN5c3Jvb3Rfc3RhZ2VfZGlyICRzcmMgJGRlc3QKCn0KCgoKcHl0aG9uIGNoZWNrX3Nhbml0
eV90bXBkaXJfY2hhbmdlICgpIHsKZGVmIGNoZWNrX3Nhbml0eV90bXBkaXJfY2hhbmdlKHRtcGRp
ciwgZGF0YSk6CiAgICAjIFNhbml0eSBjaGVja3MgdG8gYmUgZG9uZSB3aGVuIHRoZSB2YWx1ZSBv
ZiBUTVBESVIgY2hhbmdlcwoKICAgICMgQ2hlY2sgdGhhdCBUTVBESVIgaXNuJ3Qgb24gYSBmaWxl
c3lzdGVtIHdpdGggbGltaXRlZCBmaWxlbmFtZSBsZW5ndGggKGVnLiBlQ3J5cHRGUykKICAgIHRl
c3Rtc2cgPSBjaGVja19jcmVhdGVfbG9uZ19maWxlbmFtZSh0bXBkaXIsICJUTVBESVIiKQogICAg
IyBDaGVjayB0aGF0IHdlIGNhbiBmZXRjaCBmcm9tIHZhcmlvdXMgbmV0d29yayB0cmFuc3BvcnRz
CiAgICBlcnJtc2cgPSBjaGVja19jb25uZWN0aXZpdHkoZGF0YSkKICAgIHRlc3Rtc2cgPSB0ZXN0
bXNnICsgY2hlY2tfY29ubmVjdGl2aXR5KGRhdGEpCiAgICByZXR1cm4gdGVzdG1zZywgZXJybXNn
ICE9ICIiCn0KCgpweXRob24gY2hlY2tfdG9vbGNoYWluICgpIHsKZGVmIGNoZWNrX3Rvb2xjaGFp
bihkYXRhKToKICAgIHR1bmVfZXJyb3Jfc2V0ID0gW10KICAgIGRlZnR1bmUgPSBkYXRhLmdldFZh
cigiREVGQVVMVFRVTkUiLCBUcnVlKQogICAgdHVuZV9lcnJvcnMgPSBjaGVja190b29sY2hhaW5f
dHVuZShkYXRhLCBkZWZ0dW5lLCAnZGVmYXVsdCcpCiAgICBpZiB0dW5lX2Vycm9yczoKICAgICAg
ICB0dW5lX2Vycm9yX3NldC5hcHBlbmQodHVuZV9lcnJvcnMpCgogICAgbXVsdGlsaWJzID0gKGRh
dGEuZ2V0VmFyKCJNVUxUSUxJQl9WQVJJQU5UUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCiAgICBp
ZiBtdWx0aWxpYnM6CiAgICAgICAgc2Vlbl9saWJzID0gW10KICAgICAgICBzZWVuX3R1bmVzID0g
W10KICAgICAgICBmb3IgbGliIGluIG11bHRpbGliczoKICAgICAgICAgICAgaWYgbGliIGluIHNl
ZW5fbGliczoKICAgICAgICAgICAgICAgIHR1bmVfZXJyb3Jfc2V0LmFwcGVuZCgiVGhlIG11bHRp
bGliICclcycgYXBwZWFycyBtb3JlIHRoYW4gb25jZS4iICUgbGliKQogICAgICAgICAgICBlbHNl
OgogICAgICAgICAgICAgICAgc2Vlbl9saWJzLmFwcGVuZChsaWIpCiAgICAgICAgICAgIHR1bmUg
PSBkYXRhLmdldFZhcigiREVGQVVMVFRVTkVfdmlydGNsYXNzLW11bHRpbGliLSVzIiAlIGxpYiwg
VHJ1ZSkKICAgICAgICAgICAgaWYgdHVuZSBpbiBzZWVuX3R1bmVzOgogICAgICAgICAgICAgICAg
dHVuZV9lcnJvcl9zZXQuYXBwZW5kKCJUaGUgdHVuaW5nICclcycgYXBwZWFycyBpbiBtb3JlIHRo
YW4gb25lIG11bHRpbGliLiIgJSB0dW5lKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAg
ICAgc2Vlbl9saWJzLmFwcGVuZCh0dW5lKQogICAgICAgICAgICBpZiB0dW5lID09IGRlZnR1bmU6
CiAgICAgICAgICAgICAgICB0dW5lX2Vycm9yX3NldC5hcHBlbmQoIk11bHRpbGliICclcycgKCVz
KSBpcyBhbHNvIHRoZSBkZWZhdWx0IHR1bmluZy4iICUgKGxpYiwgZGVmdHVuZSkpCiAgICAgICAg
ICAgIGVsc2U6CiAgICAgICAgICAgICAgICB0dW5lX2Vycm9ycyA9IGNoZWNrX3Rvb2xjaGFpbl90
dW5lKGRhdGEsIHR1bmUsIGxpYikKICAgICAgICAgICAgaWYgdHVuZV9lcnJvcnM6CiAgICAgICAg
ICAgICAgICB0dW5lX2Vycm9yX3NldC5hcHBlbmQodHVuZV9lcnJvcnMpCiAgICBpZiB0dW5lX2Vy
cm9yX3NldDoKICAgICAgICByZXR1cm4gIlRvb2xjaGFpbiB0dW5pbmdzIGludmFsaWQ6XG4iICsg
J1xuJy5qb2luKHR1bmVfZXJyb3Jfc2V0KQoKICAgIHJldHVybiAiIgp9CgoKcHl0aG9uIGRvX2Rl
dnNoZWxsICgpIHsKICAgIG9lX3Rlcm1pbmFsKGQuZ2V0VmFyKCdTSEVMTCcsIFRydWUpLCAnT3Bl
bkVtYmVkZGVkIERldmVsb3BlciBTaGVsbCcsIGQpCn0KCgpweXRob24gb2VfaW1wb3J0X2VoICgp
IHsKICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuQ29uZmlnUGFyc2VkKToKICAgICAgICBv
ZV9pbXBvcnQoZS5kYXRhKQogICAgICAgIGUuZGF0YS5zZXRWYXIoIk5BVElWRUxTQlNUUklORyIs
IGxzYl9kaXN0cm9faWRlbnRpZmllcihlLmRhdGEpKQp9CgoKcHl0aG9uIGRvX2xpc3R0YXNrcyAo
KSB7CiAgICBpbXBvcnQgc3lzCiAgICAjIGVtaXQgdmFyaWFibGVzIGFuZCBzaGVsbCBmdW5jdGlv
bnMKICAgICNiYi5kYXRhLmVtaXRfZW52KHN5cy5fX3N0ZG91dF9fLCBkKQogICAgIyBlbWl0IHRo
ZSBtZXRhZGF0YSB3aGljaCBpc250IHZhbGlkIHNoZWxsCiAgICBmb3IgZSBpbiBkLmtleXMoKToK
ICAgICAgICBpZiBkLmdldFZhckZsYWcoZSwgJ3Rhc2snKToKICAgICAgICAgICAgYmIucGxhaW4o
IiVzIiAlIGUpCn0KCgpweXRob24gcGFja2FnZV9xYV9jbGVhbl9wYXRoICgpIHsKZGVmIHBhY2th
Z2VfcWFfY2xlYW5fcGF0aChwYXRoLGQpOgogICAgIiIiIFJlbW92ZSB0aGUgY29tbW9uIHByZWZp
eCBmcm9tIHRoZSBwYXRoLiBJbiB0aGlzIGNhc2UgaXQgaXMgdGhlIFRNUERJUiIiIgogICAgcmV0
dXJuIHBhdGgucmVwbGFjZShkLmdldFZhcignVE1QRElSJyxUcnVlKSwiIikKfQoKCnB5dGhvbiBn
ZW5fcGFja2FnZXZhciAoKSB7CmRlZiBnZW5fcGFja2FnZXZhcihkKToKICAgIHJldCA9IFtdCiAg
ICBwa2dzID0gKGQuZ2V0VmFyKCJQQUNLQUdFUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCiAgICB2
YXJzID0gKGQuZ2V0VmFyKCJQQUNLQUdFVkFSUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCiAgICBm
b3IgcCBpbiBwa2dzOgogICAgICAgIGZvciB2IGluIHZhcnM6CiAgICAgICAgICAgIHJldC5hcHBl
bmQodiArICJfIiArIHApCiAgICByZXR1cm4gIiAiLmpvaW4ocmV0KQp9CgoKcHl0aG9uIGRvX2Ns
ZWFuc3N0YXRlICgpIHsKICAgICAgICBzc3RhdGVfY2xlYW5fY2FjaGVmaWxlcyhkKQp9CgoKcHl0
aG9uIHBhY2thZ2VfcnBtX2ZuICgpIHsKICAgIGQuc2V0VmFyKCdQS0dGTicsIGQuZ2V0VmFyKCdQ
S0cnKSkKfQoKCnB5dGhvbiBtYWNoaW5lX3BhdGhzICgpIHsKZGVmIG1hY2hpbmVfcGF0aHMoZCk6
CiAgICAiIiJMaXN0IGFueSBleGlzdGluZyBtYWNoaW5lIHNwZWNpZmljIGZpbGVzcGF0aCBkaXJl
Y3RvcmllcyIiIgogICAgbWFjaGluZSA9IGQuZ2V0VmFyKCJNQUNISU5FIiwgVHJ1ZSkKICAgIGZp
bGVzcGF0aHBrZyA9IGQuZ2V0VmFyKCJGSUxFU1BBVEhQS0ciLCBUcnVlKS5zcGxpdCgiOiIpCiAg
ICBmb3IgYmFzZXBhdGggaW4gZC5nZXRWYXIoIkZJTEVTUEFUSEJBU0UiLCBUcnVlKS5zcGxpdCgi
OiIpOgogICAgICAgIGZvciBwa2dwYXRoIGluIGZpbGVzcGF0aHBrZzoKICAgICAgICAgICAgbWFj
aGluZXBhdGggPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsIHBrZ3BhdGgsIG1hY2hpbmUpCiAgICAg
ICAgICAgIGlmIG9zLnBhdGguaXNkaXIobWFjaGluZXBhdGgpOgogICAgICAgICAgICAgICAgeWll
bGQgbWFjaGluZXBhdGgKfQoKCnB5dGhvbiBnZXRfbGliY19sb2NhbGVzX2RlcGVuZGVuY2llcyAo
KSB7CmRlZiBnZXRfbGliY19sb2NhbGVzX2RlcGVuZGVuY2llcyhkKToKICAgIGlmICdsaWJjLWxv
Y2FsZXMnIGluIChkLmdldFZhcignRElTVFJPX0ZFQVRVUkVTJywgVHJ1ZSkgb3IgJycpLnNwbGl0
KCkgOgogICAgICAgIHJldHVybiBkLmdldFZhcignTElCQ19MT0NBTEVfREVQRU5ERU5DSUVTJywg
VHJ1ZSkgb3IgJycKICAgIGVsc2U6CiAgICAgICAgcmV0dXJuICcnfQoKCnB5dGhvbiBydW5fYnVp
bGRzdGF0cyAoKSB7CiAgICBpbXBvcnQgYmIuYnVpbGQKICAgIGltcG9ydCBiYi5ldmVudAogICAg
aW1wb3J0IGJiLmRhdGEKICAgIGltcG9ydCB0aW1lLCBzdWJwcm9jZXNzLCBwbGF0Zm9ybQoKICAg
IGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuQnVpbGRTdGFydGVkKToKICAgICAgICAjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMKICAgICAgICAjIGF0IGZpcnN0IHBhc3MgbWFrZSB0aGUgYnVpbGRzdGF0cyBoZXJp
YXJjaHkgYW5kIHRoZW4KICAgICAgICAjIHNldCB0aGUgYnVpbGRuYW1lCiAgICAgICAgIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjCiAgICAgICAgdHJ5OgogICAgICAgICAgICBiYi5ta2RpcmhpZXIoZS5kYXRhLmdl
dFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSkpCiAgICAgICAgZXhjZXB0OgogICAgICAgICAg
ICBwYXNzCiAgICAgICAgc2V0X2JuKGUpCiAgICAgICAgYm4gPSBnZXRfYm4oZSkKICAgICAgICBz
ZXRfZGV2aWNlKGUpCiAgICAgICAgZGV2aWNlID0gZ2V0X2RldmljZShlKQoKICAgICAgICBic2Rp
ciA9IG9zLnBhdGguam9pbihlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0JBU0UnLCBUcnVlKSwg
Ym4pCiAgICAgICAgdHJ5OgogICAgICAgICAgICBiYi5ta2RpcmhpZXIoYnNkaXIpCiAgICAgICAg
ZXhjZXB0OgogICAgICAgICAgICBwYXNzCiAgICAgICAgaWYgZGV2aWNlICE9ICJOb0xvZ2ljYWxE
ZXZpY2UiOgogICAgICAgICAgICBzZXRfZGlza2RhdGEoIl9fZGlza2RhdGFfYnVpbGQiLCBkZXZp
Y2UsIGUuZGF0YSkKICAgICAgICBzZXRfdGltZWRhdGEoIl9fdGltZWRhdGFfYnVpbGQiLCBlLmRh
dGEpCiAgICAgICAgYnVpbGRfdGltZSA9IG9zLnBhdGguam9pbihic2RpciwgImJ1aWxkX3N0YXRz
IikKICAgICAgICAjIHdyaXRlIHN0YXJ0IG9mIGJ1aWxkIGludG8gYnVpbGRfdGltZQogICAgICAg
IGZpbGUgPSBvcGVuKGJ1aWxkX3RpbWUsImEiKQogICAgICAgIGhvc3RfaW5mbyA9IHBsYXRmb3Jt
LnVuYW1lKCkKICAgICAgICBmaWxlLndyaXRlKCJIb3N0IEluZm86ICIpCiAgICAgICAgZm9yIHgg
aW4gaG9zdF9pbmZvOgogICAgICAgICAgICBpZiB4OgogICAgICAgICAgICAgICAgZmlsZS53cml0
ZSh4ICsgIiAiKQogICAgICAgIGZpbGUud3JpdGUoIlxuIikKICAgICAgICBmaWxlLndyaXRlKCJC
dWlsZCBTdGFydGVkOiAlMC4yZiBcbiIgJSB0aW1lLnRpbWUoKSkKICAgICAgICBmaWxlLmNsb3Nl
KCkKCiAgICBlbGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQpOgogICAg
ICAgIGJuID0gZ2V0X2JuKGUpCiAgICAgICAgZGV2aWNlID0gZ2V0X2RldmljZShlKQogICAgICAg
IGJzZGlyID0gb3MucGF0aC5qb2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRy
dWUpLCBibikKICAgICAgICB0YXNrZGlyID0gb3MucGF0aC5qb2luKGJzZGlyLCBlLmRhdGEuZXhw
YW5kKCJiYmxheWVycy0xLjAtcjAiKSkKICAgICAgICBidWlsZF90aW1lID0gb3MucGF0aC5qb2lu
KGJzZGlyLCAiYnVpbGRfc3RhdHMiKQogICAgICAgIGZpbGUgPSBvcGVuKGJ1aWxkX3RpbWUsICJh
IikKICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICAgICAjIFdyaXRlIGJ1aWxkIHN0YXRpc3Rp
Y3MgZm9yIHRoZSBidWlsZAogICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgICAgIHRpbWVkYXRh
ID0gZ2V0X3RpbWVkYXRhKCJfX3RpbWVkYXRhX2J1aWxkIiwgZS5kYXRhKQogICAgICAgIGlmIHRp
bWVkYXRhOgogICAgICAgICAgICB0aW1lLCBjcHUgPSB0aW1lZGF0YQogICAgICAgICAgICAjIHdy
aXRlIGVuZCBvZiBidWlsZCBhbmQgY3B1IHVzZWQgaW50byBidWlsZF90aW1lCiAgICAgICAgICAg
IGZpbGUgPSBvcGVuKGJ1aWxkX3RpbWUsICJhIikKICAgICAgICAgICAgZmlsZS53cml0ZSgiRWxh
cHNlZCB0aW1lOiAlMC4yZiBzZWNvbmRzIFxuIiAlICh0aW1lKSkKICAgICAgICAgICAgaWYgY3B1
OgogICAgICAgICAgICAgICAgZmlsZS53cml0ZSgiQ1BVIHVzYWdlOiAlMC4xZiUlIFxuIiAlIGNw
dSkKICAgICAgICBpZiBkZXZpY2UgIT0gIk5vTG9naWNhbERldmljZSI6CiAgICAgICAgICAgIGRp
c2tpbyA9IGdldF9kaXNrZGF0YSgiX19kaXNrZGF0YV9idWlsZCIsIGRldmljZSwgZS5kYXRhKQog
ICAgICAgICAgICBpZiBkaXNraW86CiAgICAgICAgICAgICAgICBmb3Iga2V5IGluIHNvcnRlZChk
aXNraW8uaXRlcmtleXMoKSk6CiAgICAgICAgICAgICAgICAgICAgZmlsZS53cml0ZShrZXkgKyAi
OiAiICsgZGlza2lvW2tleV0gKyAiXG4iKQogICAgICAgIGZpbGUuY2xvc2UoKQoKICAgIGlmIGlz
aW5zdGFuY2UoZSwgYmIuYnVpbGQuVGFza1N0YXJ0ZWQpOgogICAgICAgIGJuID0gZ2V0X2JuKGUp
CiAgICAgICAgZGV2aWNlID0gZ2V0X2RldmljZShlKQogICAgICAgIGJzZGlyID0gb3MucGF0aC5q
b2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCBibikKICAgICAgICB0
YXNrZGlyID0gb3MucGF0aC5qb2luKGJzZGlyLCBlLmRhdGEuZXhwYW5kKCJiYmxheWVycy0xLjAt
cjAiKSkKICAgICAgICBpZiBkZXZpY2UgIT0gIk5vTG9naWNhbERldmljZSI6CiAgICAgICAgICAg
IHNldF9kaXNrZGF0YSgiX19kaXNrZGF0YV90YXNrIiwgZGV2aWNlLCBlLmRhdGEpCiAgICAgICAg
c2V0X3RpbWVkYXRhKCJfX3RpbWVkYXRhX3Rhc2siLCBlLmRhdGEpCiAgICAgICAgdHJ5OgogICAg
ICAgICAgICBiYi5ta2RpcmhpZXIodGFza2RpcikKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAg
IHBhc3MKICAgICAgICAjIHdyaXRlIGludG8gdGhlIHRhc2sgZXZlbnQgZmlsZSB0aGUgbmFtZSBh
bmQgc3RhcnQgdGltZQogICAgICAgIGZpbGUgPSBvcGVuKG9zLnBhdGguam9pbih0YXNrZGlyLCBl
LnRhc2spLCAiYSIpCiAgICAgICAgZmlsZS53cml0ZSgiRXZlbnQ6ICVzIFxuIiAlIGJiLmV2ZW50
LmdldE5hbWUoZSkpCiAgICAgICAgZmlsZS53cml0ZSgiU3RhcnRlZDogJTAuMmYgXG4iICUgdGlt
ZS50aW1lKCkpCiAgICAgICAgZmlsZS5jbG9zZSgpCgogICAgZWxpZiBpc2luc3RhbmNlKGUsIGJi
LmJ1aWxkLlRhc2tTdWNjZWVkZWQpOgogICAgICAgIGJuID0gZ2V0X2JuKGUpCiAgICAgICAgZGV2
aWNlID0gZ2V0X2RldmljZShlKQogICAgICAgIGJzZGlyID0gb3MucGF0aC5qb2luKGUuZGF0YS5n
ZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCBibikKICAgICAgICB0YXNrZGlyID0gb3Mu
cGF0aC5qb2luKGJzZGlyLCBlLmRhdGEuZXhwYW5kKCJiYmxheWVycy0xLjAtcjAiKSkKICAgICAg
ICB3cml0ZV90YXNrX2RhdGEoInBhc3NlZCIsIG9zLnBhdGguam9pbih0YXNrZGlyLCBlLnRhc2sp
LCBkZXZpY2UsIGUpCiAgICAgICAgaWYgZS50YXNrID09ICJkb19yb290ZnMiOgogICAgICAgICAg
ICBic2RpciA9IG9zLnBhdGguam9pbihlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0JBU0UnLCBU
cnVlKSwgYm4pCiAgICAgICAgICAgIGJzPW9zLnBhdGguam9pbihic2RpciwgImJ1aWxkX3N0YXRz
IikKICAgICAgICAgICAgZmlsZSA9IG9wZW4oYnMsImEiKQogICAgICAgICAgICByb290ZnMgPSBl
LmRhdGEuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCBUcnVlKQogICAgICAgICAgICByb290ZnNfc2l6
ZSA9IHN1YnByb2Nlc3MuUG9wZW4oWyJkdSIsICItc2giLCByb290ZnNdLCBzdGRvdXQ9c3VicHJv
Y2Vzcy5QSVBFKS5zdGRvdXQucmVhZCgpCiAgICAgICAgICAgIGZpbGUud3JpdGUoIlVuY29tcHJl
c3NlZCBSb290ZnMgc2l6ZTogJXMiICUgcm9vdGZzX3NpemUpCiAgICAgICAgICAgIGZpbGUuY2xv
c2UoKQoKICAgIGVsaWYgaXNpbnN0YW5jZShlLCBiYi5idWlsZC5UYXNrRmFpbGVkKToKICAgICAg
ICBibiA9IGdldF9ibihlKQogICAgICAgIGRldmljZSA9IGdldF9kZXZpY2UoZSkKICAgICAgICBi
c2RpciA9IG9zLnBhdGguam9pbihlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0JBU0UnLCBUcnVl
KSwgYm4pCiAgICAgICAgdGFza2RpciA9IG9zLnBhdGguam9pbihic2RpciwgZS5kYXRhLmV4cGFu
ZCgiYmJsYXllcnMtMS4wLXIwIikpCiAgICAgICAgd3JpdGVfdGFza19kYXRhKCJmYWlsZWQiLCBv
cy5wYXRoLmpvaW4odGFza2RpciwgZS50YXNrKSwgZGV2aWNlLCBlKQogICAgICAgICMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIwogICAgICAgICMgTGV0cyBtYWtlIHRoaW5ncyBlYXNpZXIgYW5kIHRlbGwgcGVvcGxl
IHdoZXJlIHRoZSBidWlsZCBmYWlsZWQgaW4KICAgICAgICAjIGJ1aWxkX3N0YXR1cy4gV2UgZG8g
dGhpcyBoZXJlIGJlY2F1c2UgQnVpbGRDb21wbGV0ZWQgdHJpZ2dlcnMgbm8KICAgICAgICAjIG1h
dHRlciB3aGF0IHRoZSBzdGF0dXMgb2YgdGhlIGJ1aWxkIGFjdHVhbGx5IGlzCiAgICAgICAgIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjCiAgICAgICAgYnVpbGRfc3RhdHVzID0gb3MucGF0aC5qb2luKGJzZGlyLCAi
YnVpbGRfc3RhdHMiKQogICAgICAgIGZpbGUgPSBvcGVuKGJ1aWxkX3N0YXR1cywiYSIpCiAgICAg
ICAgZmlsZS53cml0ZShlLmRhdGEuZXhwYW5kKCJGYWlsZWQgYXQ6IGJibGF5ZXJzLTEuMC1yMCBh
dCB0YXNrOiAlcyBcbiIgJSBlLnRhc2spKQogICAgICAgIGZpbGUuY2xvc2UoKQoKfQoKCnB5dGhv
biBjaGVja19jb25mX2V4aXN0cyAoKSB7CmRlZiBjaGVja19jb25mX2V4aXN0cyhmbiwgZGF0YSk6
CiAgICBiYnBhdGggPSBbXQogICAgZm4gPSBkYXRhLmV4cGFuZChmbikKICAgIHZiYnBhdGggPSBk
YXRhLmdldFZhcigiQkJQQVRIIikKICAgIGlmIHZiYnBhdGg6CiAgICAgICAgYmJwYXRoICs9IHZi
YnBhdGguc3BsaXQoIjoiKQogICAgZm9yIHAgaW4gYmJwYXRoOgogICAgICAgIGN1cnJuYW1lID0g
b3MucGF0aC5qb2luKGRhdGEuZXhwYW5kKHApLCBmbikKICAgICAgICBpZiBvcy5hY2Nlc3MoY3Vy
cm5hbWUsIG9zLlJfT0spOgogICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgcmV0dXJuIEZhbHNl
Cn0KCgpweXRob24gc3BsaXRmaWxlMiAoKSB7CmRlZiBzcGxpdGZpbGUyKGRlYnVnc3JjZGlyLCBk
KToKICAgICMgRnVuY3Rpb24gdG8gc3BsaXQgYSBzaW5nbGUgZmlsZSwgY2FsbGVkIGZyb20gc3Bs
aXRfYW5kX3N0cmlwX2ZpbGVzIGJlbG93CiAgICAjCiAgICAjIFRoZSBkZWJ1ZyBzcmMgaW5mb3Jt
YXRpb24gcHJvY2Vzc2VkIGluIHRoZSBzcGxpdGZpbGUyIGlzIGZ1cnRoZXIgcHJvY2VjZXNzZWQK
ICAgICMgYW5kIGNvcGllZCB0byB0aGUgZGVzdGluYXRpb24gaGVyZS4KCiAgICBpbXBvcnQgY29t
bWFuZHMsIHN0YXQsIHN1YnByb2Nlc3MKCiAgICBzb3VyY2VmaWxlID0gZC5leHBhbmQoIi9ob21l
L21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC93b3JrL2NvcmUyLXBv
a3ktbGludXgvYmJsYXllcnMtMS4wLXIwL2RlYnVnc291cmNlcy5saXN0IikKICAgIGlmIGRlYnVn
c3JjZGlyIGFuZCBvcy5wYXRoLmlzZmlsZShzb3VyY2VmaWxlKToKICAgICAgICBkdmFyID0gZC5n
ZXRWYXIoJ1BLR0QnLCBUcnVlKQogICAgICAgIHBhdGhwcmVmaXggPSAiZXhwb3J0IFBBVEg9JXM7
ICIgJSBkLmdldFZhcignUEFUSCcsIFRydWUpCiAgICAgICAgc3RyaXAgPSBkLmdldFZhcigiU1RS
SVAiLCBUcnVlKQogICAgICAgIG9iamNvcHkgPSBkLmdldFZhcigiT0JKQ09QWSIsIFRydWUpCiAg
ICAgICAgZGVidWdlZGl0ID0gZC5leHBhbmQoIi9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55
LTguMC9idWlsZC1mcmkyL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYi9ycG0vYmlu
L2RlYnVnZWRpdCIpCiAgICAgICAgd29ya2RpciA9IGQuZ2V0VmFyKCJXT1JLRElSIiwgVHJ1ZSkK
ICAgICAgICB3b3JrcGFyZW50ZGlyID0gb3MucGF0aC5kaXJuYW1lKHdvcmtkaXIpCiAgICAgICAg
d29ya2Jhc2VkaXIgPSBvcy5wYXRoLmJhc2VuYW1lKHdvcmtkaXIpCgogICAgICAgIG5vc3VjaGRp
ciA9IFtdCiAgICAgICAgYmFzZXBhdGggPSBkdmFyCiAgICAgICAgZm9yIHAgaW4gZGVidWdzcmNk
aXIuc3BsaXQoIi8iKToKICAgICAgICAgICAgYmFzZXBhdGggPSBiYXNlcGF0aCArICIvIiArIHAK
ICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGJhc2VwYXRoKToKICAgICAgICAgICAg
ICAgIG5vc3VjaGRpci5hcHBlbmQoYmFzZXBhdGgpCiAgICAgICAgYmIubWtkaXJoaWVyKGJhc2Vw
YXRoKQoKICAgICAgICBwcm9jZXNzZGVidWdzcmMgPSAgIkxDX0FMTD1DIDsgc29ydCAteiAtdSAn
JXMnIHwgZWdyZXAgLXYgLXogJyg8aW50ZXJuYWw+fDxidWlsdC1pbj4pJCcgfCAiCiAgICAgICAg
IyBXZSBuZWVkIHRvIGlnbm9yZSBmaWxlcyB0aGF0IGFyZSBub3QgYWN0dWFsbHkgb3VycwogICAg
ICAgICMgd2UgZG8gdGhpcyBieSBvbmx5IHBheWluZyBhdHRlbnRpb24gdG8gaXRlbXMgZnJvbSB0
aGlzIHBhY2thZ2UKICAgICAgICBwcm9jZXNzZGVidWdzcmMgKz0gImZncmVwIC16ICclcycgfCAi
CiAgICAgICAgcHJvY2Vzc2RlYnVnc3JjICs9ICIoY2QgJyVzJyA7IGNwaW8gLXBkMG1MIC0tbm8t
cHJlc2VydmUtb3duZXIgJyVzJXMnIDI+L2Rldi9udWxsKSIKCiAgICAgICAgc3VicHJvY2Vzcy5j
YWxsKHByb2Nlc3NkZWJ1Z3NyYyAlIChzb3VyY2VmaWxlLCB3b3JrYmFzZWRpciwgd29ya3BhcmVu
dGRpciwgZHZhciwgZGVidWdzcmNkaXIpLCBzaGVsbD1UcnVlKQoKICAgICAgICAjIFRoZSBjb3B5
IGJ5IGNwaW8gbWF5IGhhdmUgcmVzdWx0ZWQgaW4gc29tZSBlbXB0eSBkaXJlY3RvcmllcyEgIFJl
bW92ZSB0aGVzZQogICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKCIlcyVz
IiAlIChkdmFyLCBkZWJ1Z3NyY2RpcikpOgogICAgICAgICAgICBmb3IgZCBpbiBkaXJzOgogICAg
ICAgICAgICAgICAgZGlyID0gb3MucGF0aC5qb2luKHJvb3QsIGQpCiAgICAgICAgICAgICAgICAj
YmIubm90ZSgicm1kaXIgLXAgJXMiICUgZGlyKQogICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5j
YWxsKCJybWRpciAtcCAlcyAyPi9kZXYvbnVsbCIgJSBkaXIsIHNoZWxsPVRydWUpCgogICAgICAg
ICMgQWxzbyByZW1vdmUgZGVidWdzcmNkaXIgaWYgaXRzIGVtcHR5CiAgICAgICAgZm9yIHAgaW4g
bm9zdWNoZGlyWzo6LTFdOgogICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwKSBhbmQgbm90
IG9zLmxpc3RkaXIocCk6CiAgICAgICAgICAgICAgICBvcy5ybWRpcihwKQp9CgoKcHl0aG9uIGlu
Y29tcGF0aWJsZV9saWNlbnNlICgpIHsKZGVmIGluY29tcGF0aWJsZV9saWNlbnNlKGQsIGRvbnRf
d2FudF9saWNlbnNlLCBwYWNrYWdlPSIiKToKICAgICIiIgogICAgVGhpcyBmdW5jdGlvbiBjaGVj
a3MgaWYgYSByZWNpcGUgaGFzIG9ubHkgaW5jb21wYXRpYmxlIGxpY2Vuc2VzLiBJdCBhbHNvIHRh
a2UgaW50byBjb25zaWRlcmF0aW9uICdvcicKICAgIG9wZXJhbmQuCiAgICAiIiIKICAgIGltcG9y
dCByZQogICAgaW1wb3J0IG9lLmxpY2Vuc2UKICAgIGZyb20gZm5tYXRjaCBpbXBvcnQgZm5tYXRj
aGNhc2UgYXMgZm5tYXRjaAogICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQogICAgZG9udF93
YW50X2xpY2Vuc2VzID0gW10KICAgIGRvbnRfd2FudF9saWNlbnNlcy5hcHBlbmQoZC5nZXRWYXIo
J0lOQ09NUEFUSUJMRV9MSUNFTlNFJywgVHJ1ZSkpCiAgICByZWNpcGVfbGljZW5zZSA9IGQuZ2V0
VmFyKCdMSUNFTlNFJywgVHJ1ZSkKICAgIGlmIHBhY2thZ2UgIT0gIiI6CiAgICAgICAgaWYgZC5n
ZXRWYXIoJ0xJQ0VOU0VfJyArIHBuICsgJy0nICsgcGFja2FnZSwgVHJ1ZSk6CiAgICAgICAgICAg
IGxpY2Vuc2UgPSBkLmdldFZhcignTElDRU5TRV8nICsgcG4gKyAnLScgKyBwYWNrYWdlLCBUcnVl
KQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGxpY2Vuc2UgPSByZWNpcGVfbGljZW5zZQogICAg
ZWxzZToKICAgICAgICBsaWNlbnNlID0gcmVjaXBlX2xpY2Vuc2UKICAgIHNwZHhfbGljZW5zZSA9
IHJldHVybl9zcGR4KGQsIGRvbnRfd2FudF9saWNlbnNlKQogICAgZG9udF93YW50X2xpY2Vuc2Vz
LmFwcGVuZChzcGR4X2xpY2Vuc2UpCgogICAgZGVmIGluY2x1ZGVfbGljZW5zZShsaWNlbnNlKToK
ICAgICAgICBpZiBhbnkoZm5tYXRjaChsaWNlbnNlLCBwYXR0ZXJuKSBmb3IgcGF0dGVybiBpbiBk
b250X3dhbnRfbGljZW5zZXMpOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICBlbHNl
OgogICAgICAgICAgICByZXR1cm4gVHJ1ZQoKICAgIGRlZiBjaG9vc2VfbGljZW5zZXMoYSwgYik6
CiAgICAgICAgaWYgYWxsKGluY2x1ZGVfbGljZW5zZShsaWMpIGZvciBsaWMgaW4gYSk6CiAgICAg
ICAgICAgIHJldHVybiBhCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIGIKCiAgICAi
IiIKICAgIElmIHlvdSB3YW50IHRvIGV4bHVkZSBsaWNlbnNlIG5hbWVkIGdlbmVyaWNhbGx5ICdY
Jywgd2Ugc3VyZWx5IHdhbnQgdG8gZXhsdWRlICdYKycgYXMgd2VsbC4KICAgIEluIGNvbnNlcXVl
bmNlLCB3ZSB3aWxsIGV4Y2x1ZGUgdGhlICcrJyBjaGFyYWN0ZXIgZnJvbSBMSUNFTlNFIGluIGNh
c2UgSU5DT01QQVRJQkxFX0xJQ0VOU0UKICAgIGlzIG5vdCBhICdYKycgbGljZW5zZS4KICAgICIi
IgogICAgaWYgbm90IHJlLnNlYXJjaChyJ1srXScsZG9udF93YW50X2xpY2Vuc2UpOgogICAgICAg
IGxpY2Vuc2VzPW9lLmxpY2Vuc2UuZmxhdHRlbmVkX2xpY2Vuc2VzKHJlLnN1YihyJ1srXScsICcn
LCBsaWNlbnNlKSwgY2hvb3NlX2xpY2Vuc2VzKQogICAgZWxzZToKICAgICAgICBsaWNlbnNlcz1v
ZS5saWNlbnNlLmZsYXR0ZW5lZF9saWNlbnNlcyhsaWNlbnNlLCBjaG9vc2VfbGljZW5zZXMpCgog
ICAgZm9yIG9uZWxpY2Vuc2UgaW4gbGljZW5zZXM6CiAgICAgICAgaWYgbm90IGluY2x1ZGVfbGlj
ZW5zZShvbmVsaWNlbnNlKToKICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgIHJldHVybiBGYWxz
ZQp9CgoKcHl0aG9uIHJldHVybl9zcGR4ICgpIHsKZGVmIHJldHVybl9zcGR4KGQsIGxpY2Vuc2Up
OgogICAgIiIiCiAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNwZHggbWFwcGluZyBvZiBh
IGxpY2Vuc2UuCiAgICAiIiIKICAgIGlmIGQuZ2V0VmFyRmxhZygnU1BEWExJQ0VOU0VNQVAnLCBs
aWNlbnNlKSAhPSBOb25lOgogICAgICAgIHJldHVybiBsaWNlbnNlCiAgICBlbHNlOgogICAgICAg
IHJldHVybiBkLmdldFZhckZsYWcoJ1NQRFhMSUNFTlNFTUFQJywgbGljZW5zZV90eXBlKQp9CgoK
cHl0aG9uIGJhc2VfdmVyc2lvbl9sZXNzX29yX2VxdWFsICgpIHsKZGVmIGJhc2VfdmVyc2lvbl9s
ZXNzX29yX2VxdWFsKHZhcmlhYmxlLCBjaGVja3ZhbHVlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUs
IGQpOgogICAgcmV0dXJuIG9lLnV0aWxzLnZlcnNpb25fbGVzc19vcl9lcXVhbCh2YXJpYWJsZSwg
Y2hlY2t2YWx1ZSwgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKQp9CgoKcHl0aG9uIGRvX3BhY2th
Z2Vfc2V0c2NlbmUgKCkgewogICAgc3N0YXRlX3NldHNjZW5lKGQpCn0KCgpweXRob24gYmFzZV9k
ZXBfcHJlcGVuZCAoKSB7Ck5vbmV9CgoKcHl0aG9uIGNoZWNrX3BhdGhfbGVuZ3RoICgpIHsKZGVm
IGNoZWNrX3BhdGhfbGVuZ3RoKGZpbGVwYXRoLCBwYXRobmFtZSwgbGltaXQpOgogICAgaWYgbGVu
KGZpbGVwYXRoKSA+IGxpbWl0OgoJcmV0dXJuICJUaGUgbGVuZ3RoIG9mICVzIGlzIGxvbmdlciB0
aGFuIDQxMCwgdGhpcyB3b3VsZCBjYXVzZSB1bmV4cGVjdGVkIGVycm9ycywgcGxlYXNlIHVzZSBh
IHNob3J0ZXIgcGF0aC5cbiIgJSBwYXRobmFtZQogICAgcmV0dXJuICIiCn0KCgpweXRob24gZ2V0
X2NwdXRpbWUgKCkgewpkZWYgZ2V0X2NwdXRpbWUoKToKICAgIGZpZWxkcyA9IG9wZW4oIi9wcm9j
L3N0YXQiLCAiciIpLnJlYWRsaW5lKCkucnN0cmlwKCkuc3BsaXQoKVsxOl0KICAgIHJldHVybiBz
dW0oaW50KGZpZWxkKSBmb3IgZmllbGQgaW4gZmllbGRzKQp9CgoKcHl0aG9uIGZpeHVwX3Blcm1z
ICgpIHsKICAgIGltcG9ydCBwd2QsIGdycAoKICAgICMgaW5pdCB1c2luZyBhIHN0cmluZyB3aXRo
IHRoZSBzYW1lIGZvcm1hdCBhcyBhIGxpbmUgYXMgZG9jdW1lbnRlZCBpbgogICAgIyB0aGUgZnMt
cGVybXMudHh0IGZpbGUKICAgICMgPHBhdGg+IDxtb2RlPiA8dWlkPiA8Z2lkPiA8d2Fsaz4gPGZt
b2RlPiA8ZnVpZD4gPGZnaWQ+CiAgICAjIDxwYXRoPiBsaW5rIDxsaW5rIHRhcmdldD4KICAgICMK
ICAgICMgX19zdHJfXyBjYW4gYmUgdXNlZCB0byBwcmludCBvdXQgYW4gZW50cnkgaW4gdGhlIGlu
cHV0IGZvcm1hdAogICAgIwogICAgIyBpZiBmc19wZXJtc19lbnRyeS5wYXRoIGlzIE5vbmU6CiAg
ICAjICAgIGFuIGVycm9yIG9jY3VyZWQKICAgICMgaWYgZnNfcGVybXNfZW50cnkubGluaywgeW91
IGNhbiByZXRyaWV2ZToKICAgICMgICAgZnNfcGVybXNfZW50cnkucGF0aCA9IHBhdGgKICAgICMg
ICAgZnNfcGVybXNfZW50cnkubGluayA9IHRhcmdldCBvZiBsaW5rCiAgICAjIGlmIG5vdCBmc19w
ZXJtc19lbnRyeS5saW5rLCB5b3UgY2FuIHJldHJpZXZlOgogICAgIyAgICBmc19wZXJtc19lbnRy
eS5wYXRoID0gcGF0aAogICAgIyAgICBmc19wZXJtc19lbnRyeS5tb2RlID0gZXhwZWN0ZWQgZGly
IG1vZGUgb3IgTm9uZQogICAgIyAgICBmc19wZXJtc19lbnRyeS51aWQgPSBleHBlY3RlZCB1aWQg
b3IgLTEKICAgICMgICAgZnNfcGVybXNfZW50cnkuZ2lkID0gZXhwZWN0ZWQgZ2lkIG9yIC0xCiAg
ICAjICAgIGZzX3Blcm1zX2VudHJ5LndhbGsgPSAndHJ1ZScgb3Igc29tZXRoaW5nIGVsc2UKICAg
ICMgICAgZnNfcGVybXNfZW50cnkuZm1vZGUgPSBleHBlY3RlZCBmaWxlIG1vZGUgb3IgTm9uZQog
ICAgIyAgICBmc19wZXJtc19lbnRyeS5mdWlkID0gZXhwZWN0ZWQgZmlsZSB1aWQgb3IgLTEKICAg
ICMgICAgZnNfcGVybXNfZW50cnlfZmdpZCA9IGV4cGVjdGVkIGZpbGUgZ2lkIG9yIC0xCiAgICBj
bGFzcyBmc19wZXJtc19lbnRyeSgpOgogICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW5lKToK
ICAgICAgICAgICAgbHNwbGl0ID0gbGluZS5zcGxpdCgpCiAgICAgICAgICAgIGlmIGxlbihsc3Bs
aXQpID09IDMgYW5kIGxzcGxpdFsxXS5sb3dlcigpID09ICJsaW5rIjoKICAgICAgICAgICAgICAg
IHNlbGYuX3NldGxpbmsobHNwbGl0WzBdLCBsc3BsaXRbMl0pCiAgICAgICAgICAgIGVsaWYgbGVu
KGxzcGxpdCkgPT0gODoKICAgICAgICAgICAgICAgIHNlbGYuX3NldGRpcihsc3BsaXRbMF0sIGxz
cGxpdFsxXSwgbHNwbGl0WzJdLCBsc3BsaXRbM10sIGxzcGxpdFs0XSwgbHNwbGl0WzVdLCBsc3Bs
aXRbNl0sIGxzcGxpdFs3XSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGJiLmVy
cm9yKCJGaXh1cCBQZXJtczogaW52YWxpZCBjb25maWcgbGluZSAlcyIgJSBsaW5lKQogICAgICAg
ICAgICAgICAgc2VsZi5wYXRoID0gTm9uZQogICAgICAgICAgICAgICAgc2VsZi5saW5rID0gTm9u
ZQoKICAgICAgICBkZWYgX3NldGRpcihzZWxmLCBwYXRoLCBtb2RlLCB1aWQsIGdpZCwgd2Fsaywg
Zm1vZGUsIGZ1aWQsIGZnaWQpOgogICAgICAgICAgICBzZWxmLnBhdGggPSBvcy5wYXRoLm5vcm1w
YXRoKHBhdGgpCiAgICAgICAgICAgIHNlbGYubGluayA9IE5vbmUKICAgICAgICAgICAgc2VsZi5t
b2RlID0gc2VsZi5fcHJvY21vZGUobW9kZSkKICAgICAgICAgICAgc2VsZi51aWQgID0gc2VsZi5f
cHJvY3VpZCh1aWQpCiAgICAgICAgICAgIHNlbGYuZ2lkICA9IHNlbGYuX3Byb2NnaWQoZ2lkKQog
ICAgICAgICAgICBzZWxmLndhbGsgPSB3YWxrLmxvd2VyKCkKICAgICAgICAgICAgc2VsZi5mbW9k
ZSA9IHNlbGYuX3Byb2Ntb2RlKGZtb2RlKQogICAgICAgICAgICBzZWxmLmZ1aWQgPSBzZWxmLl9w
cm9jdWlkKGZ1aWQpCiAgICAgICAgICAgIHNlbGYuZmdpZCA9IHNlbGYuX3Byb2NnaWQoZmdpZCkK
CiAgICAgICAgZGVmIF9zZXRsaW5rKHNlbGYsIHBhdGgsIGxpbmspOgogICAgICAgICAgICBzZWxm
LnBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKHBhdGgpCiAgICAgICAgICAgIHNlbGYubGluayA9IGxp
bmsKCiAgICAgICAgZGVmIF9wcm9jbW9kZShzZWxmLCBtb2RlKToKICAgICAgICAgICAgaWYgbm90
IG1vZGUgb3IgKG1vZGUgYW5kIG1vZGUgPT0gIi0iKToKICAgICAgICAgICAgICAgIHJldHVybiBO
b25lCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICByZXR1cm4gaW50KG1vZGUsOCkK
CiAgICAgICAgIyBOb3RlIHVpZC9naWQgLTEgaGFzIHNwZWNpYWwgc2lnbmlmaWNhbmNlIGluIG9z
LmxjaG93bgogICAgICAgIGRlZiBfcHJvY3VpZChzZWxmLCB1aWQpOgogICAgICAgICAgICBpZiB1
aWQgaXMgTm9uZSBvciB1aWQgPT0gIi0iOgogICAgICAgICAgICAgICAgcmV0dXJuIC0xCiAgICAg
ICAgICAgIGVsaWYgdWlkLmlzZGlnaXQoKToKICAgICAgICAgICAgICAgIHJldHVybiBpbnQodWlk
KQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcmV0dXJuIHB3ZC5nZXRwd25hbSh1
aWQpLnB3X3VpZAoKICAgICAgICBkZWYgX3Byb2NnaWQoc2VsZiwgZ2lkKToKICAgICAgICAgICAg
aWYgZ2lkIGlzIE5vbmUgb3IgZ2lkID09ICItIjoKICAgICAgICAgICAgICAgIHJldHVybiAtMQog
ICAgICAgICAgICBlbGlmIGdpZC5pc2RpZ2l0KCk6CiAgICAgICAgICAgICAgICByZXR1cm4gaW50
KGdpZCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJldHVybiBncnAuZ2V0Z3Ju
YW0oZ2lkKS5ncl9naWQKCiAgICAgICAgIyBVc2UgZm9yIGRlYnVnZ2luZyB0aGUgZW50cmllcwog
ICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgICAgICBpZiBzZWxmLmxpbms6CiAgICAg
ICAgICAgICAgICByZXR1cm4gIiVzIGxpbmsgJXMiICUgKHNlbGYucGF0aCwgc2VsZi5saW5rKQog
ICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgbW9kZSA9ICItIgogICAgICAgICAgICAg
ICAgaWYgc2VsZi5tb2RlOgogICAgICAgICAgICAgICAgICAgIG1vZGUgPSAiMCVvIiAlIHNlbGYu
bW9kZQogICAgICAgICAgICAgICAgZm1vZGUgPSAiLSIKICAgICAgICAgICAgICAgIGlmIHNlbGYu
Zm1vZGU6CiAgICAgICAgICAgICAgICAgICAgZm1vZGUgPSAiMCVvIiAlIHNlbGYuZm1vZGUKICAg
ICAgICAgICAgICAgIHVpZCA9IHNlbGYuX21hcHVnaWQoc2VsZi51aWQpCiAgICAgICAgICAgICAg
ICBnaWQgPSBzZWxmLl9tYXB1Z2lkKHNlbGYuZ2lkKQogICAgICAgICAgICAgICAgZnVpZCA9IHNl
bGYuX21hcHVnaWQoc2VsZi5mdWlkKQogICAgICAgICAgICAgICAgZmdpZCA9IHNlbGYuX21hcHVn
aWQoc2VsZi5mZ2lkKQogICAgICAgICAgICAgICAgcmV0dXJuICIlcyAlcyAlcyAlcyAlcyAlcyAl
cyAlcyIgJSAoc2VsZi5wYXRoLCBtb2RlLCB1aWQsIGdpZCwgc2VsZi53YWxrLCBmbW9kZSwgZnVp
ZCwgZmdpZCkKCiAgICAgICAgZGVmIF9tYXB1Z2lkKHNlbGYsIGlkKToKICAgICAgICAgICAgaWYg
aWQgaXMgTm9uZSBvciBpZCA9PSAtMToKICAgICAgICAgICAgICAgIHJldHVybiAiLSIKICAgICAg
ICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJldHVybiAiJWQiICUgaWQKCiAgICAjIEZpeCB0
aGUgcGVybWlzc2lvbiwgb3duZXIgYW5kIGdyb3VwIG9mIHBhdGgKICAgIGRlZiBmaXhfcGVybXMo
cGF0aCwgbW9kZSwgdWlkLCBnaWQsIGRpcik6CiAgICAgICAgaWYgbW9kZSBhbmQgbm90IG9zLnBh
dGguaXNsaW5rKHBhdGgpOgogICAgICAgICAgICAjYmIubm90ZSgiRml4dXAgUGVybXM6IGNobW9k
IDAlbyAlcyIgJSAobW9kZSwgZGlyKSkKICAgICAgICAgICAgb3MuY2htb2QocGF0aCwgbW9kZSkK
ICAgICAgICAjIC0xIGlzIGEgc3BlY2lhbCB2YWx1ZSB0aGF0IG1lYW5zIGRvbid0IGNoYW5nZSB0
aGUgdWlkL2dpZAogICAgICAgICMgaWYgdGhleSBhcmUgQk9USCAtMSwgZG9uJ3QgYm90aGVyIHRv
IGxjaG93bgogICAgICAgIGlmIG5vdCAodWlkID09IC0xIGFuZCBnaWQgPT0gLTEpOgogICAgICAg
ICAgICAjYmIubm90ZSgiRml4dXAgUGVybXM6IGxjaG93biAlZDolZCAlcyIgJSAodWlkLCBnaWQs
IGRpcikpCiAgICAgICAgICAgIG9zLmxjaG93bihwYXRoLCB1aWQsIGdpZCkKCiAgICAjIFJldHVy
biBhIGxpc3Qgb2YgY29uZmlndXJhdGlvbiBmaWxlcyBiYXNlZCBvbiBlaXRoZXIgdGhlIGRlZmF1
bHQKICAgICMgZmlsZXMvZnMtcGVybXMudHh0IG9yIHRoZSBjb250ZW50cyBvZiBGSUxFU1lTVEVN
X1BFUk1TX1RBQkxFUwogICAgIyBwYXRocyBhcmUgcmVzb2x2ZWQgdmlhIEJCUEFUSAogICAgZGVm
IGdldF9mc19wZXJtc19saXN0KGQpOgogICAgICAgIHN0ciA9ICIiCiAgICAgICAgZnNfcGVybXNf
dGFibGVzID0gZC5nZXRWYXIoJ0ZJTEVTWVNURU1fUEVSTVNfVEFCTEVTJywgVHJ1ZSkKICAgICAg
ICBpZiBub3QgZnNfcGVybXNfdGFibGVzOgogICAgICAgICAgICBmc19wZXJtc190YWJsZXMgPSAn
ZmlsZXMvZnMtcGVybXMudHh0JwogICAgICAgIGZvciBjb25mX2ZpbGUgaW4gZnNfcGVybXNfdGFi
bGVzLnNwbGl0KCk6CiAgICAgICAgICAgIHN0ciArPSAiICVzIiAlIGJiLndoaWNoKGQuZ2V0VmFy
KCdCQlBBVEgnLCBUcnVlKSwgY29uZl9maWxlKQogICAgICAgIHJldHVybiBzdHIKCgoKICAgIGR2
YXIgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCgogICAgZnNfcGVybXNfdGFibGUgPSB7fQoKICAg
ICMgQnkgZGVmYXVsdCBhbGwgb2YgdGhlIHN0YW5kYXJkIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBp
bgogICAgIyBiaXRiYWtlLmNvbmYgd2lsbCBnZXQgMDc1NSByb290OnJvb3QuCiAgICB0YXJnZXRf
cGF0aF92YXJzID0gWyAgICAnYmFzZV9wcmVmaXgnLAogICAgICAgICAgICAgICAgJ3ByZWZpeCcs
CiAgICAgICAgICAgICAgICAnZXhlY19wcmVmaXgnLAogICAgICAgICAgICAgICAgJ2Jhc2VfYmlu
ZGlyJywKICAgICAgICAgICAgICAgICdiYXNlX3NiaW5kaXInLAogICAgICAgICAgICAgICAgJ2Jh
c2VfbGliZGlyJywKICAgICAgICAgICAgICAgICdkYXRhZGlyJywKICAgICAgICAgICAgICAgICdz
eXNjb25mZGlyJywKICAgICAgICAgICAgICAgICdzZXJ2aWNlZGlyJywKICAgICAgICAgICAgICAg
ICdzaGFyZWRzdGF0ZWRpcicsCiAgICAgICAgICAgICAgICAnbG9jYWxzdGF0ZWRpcicsCiAgICAg
ICAgICAgICAgICAnaW5mb2RpcicsCiAgICAgICAgICAgICAgICAnbWFuZGlyJywKICAgICAgICAg
ICAgICAgICdkb2NkaXInLAogICAgICAgICAgICAgICAgJ2JpbmRpcicsCiAgICAgICAgICAgICAg
ICAnc2JpbmRpcicsCiAgICAgICAgICAgICAgICAnbGliZXhlY2RpcicsCiAgICAgICAgICAgICAg
ICAnbGliZGlyJywKICAgICAgICAgICAgICAgICdpbmNsdWRlZGlyJywKICAgICAgICAgICAgICAg
ICdvbGRpbmNsdWRlZGlyJyBdCgogICAgZm9yIHBhdGggaW4gdGFyZ2V0X3BhdGhfdmFyczoKICAg
ICAgICBkaXIgPSBkLmdldFZhcihwYXRoLCBUcnVlKSBvciAiIgogICAgICAgIGlmIGRpciA9PSAi
IjoKICAgICAgICAgICAgY29udGludWUKICAgICAgICBmc19wZXJtc190YWJsZVtkaXJdID0gZnNf
cGVybXNfZW50cnkoYmIuZGF0YS5leHBhbmQoIiVzIDA3NTUgcm9vdCByb290IGZhbHNlIC0gLSAt
IiAlIChkaXIpLCBkKSkKCiAgICAjIE5vdyB3ZSBhY3R1YWxseSBsb2FkIGZyb20gdGhlIGNvbmZp
Z3VyYXRpb24gZmlsZXMKICAgIGZvciBjb25mIGluIGdldF9mc19wZXJtc19saXN0KGQpLnNwbGl0
KCk6CiAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29uZik6CiAgICAgICAgICAgIGYgPSBvcGVu
KGNvbmYpCiAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgICAgICAgICBpZiBsaW5l
LnN0YXJ0c3dpdGgoJyMnKToKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAg
ICAgICAgbHNwbGl0ID0gbGluZS5zcGxpdCgpCiAgICAgICAgICAgICAgICBpZiBsZW4obHNwbGl0
KSA9PSAwOgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICBpZiBs
ZW4obHNwbGl0KSAhPSA4IGFuZCBub3QgKGxlbihsc3BsaXQpID09IDMgYW5kIGxzcGxpdFsxXS5s
b3dlcigpID09ICJsaW5rIik6CiAgICAgICAgICAgICAgICAgICAgYmIuZXJyb3IoIkZpeHVwIHBl
cm1zOiAlcyBpbnZhbGlkIGxpbmU6ICVzIiAlIChjb25mLCBsaW5lKSkKICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgZW50cnkgPSBmc19wZXJtc19lbnRyeShkLmV4
cGFuZChsaW5lKSkKICAgICAgICAgICAgICAgIGlmIGVudHJ5IGFuZCBlbnRyeS5wYXRoOgogICAg
ICAgICAgICAgICAgICAgIGZzX3Blcm1zX3RhYmxlW2VudHJ5LnBhdGhdID0gZW50cnkKICAgICAg
ICAgICAgZi5jbG9zZSgpCgogICAgIyBEZWJ1ZyAtLSBsaXN0IG91dCBpbi1tZW1vcnkgdGFibGUK
ICAgICNmb3IgZGlyIGluIGZzX3Blcm1zX3RhYmxlOgogICAgIyAgICBiYi5ub3RlKCJGaXh1cCBQ
ZXJtczogJXM6ICVzIiAlIChkaXIsIHN0cihmc19wZXJtc190YWJsZVtkaXJdKSkpCgogICAgIyBX
ZSBwcm9jZXNzIGxpbmtzIGZpcnN0LCBzbyB3ZSBjYW4gZ28gYmFjayBhbmQgZml4dXAgZGlyZWN0
b3J5IG93bmVyc2hpcAogICAgIyBmb3IgYW55IG5ld2x5IGNyZWF0ZWQgZGlyZWN0b3JpZXMKICAg
IGZvciBkaXIgaW4gZnNfcGVybXNfdGFibGU6CiAgICAgICAgaWYgbm90IGZzX3Blcm1zX3RhYmxl
W2Rpcl0ubGluazoKICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgb3JpZ2luID0gZHZhciAr
IGRpcgogICAgICAgIGlmIG5vdCAob3MucGF0aC5leGlzdHMob3JpZ2luKSBhbmQgb3MucGF0aC5p
c2RpcihvcmlnaW4pIGFuZCBub3Qgb3MucGF0aC5pc2xpbmsob3JpZ2luKSk6CiAgICAgICAgICAg
IGNvbnRpbnVlCgogICAgICAgIGxpbmsgPSBmc19wZXJtc190YWJsZVtkaXJdLmxpbmsKICAgICAg
ICBpZiBsaW5rWzBdID09ICIvIjoKICAgICAgICAgICAgdGFyZ2V0ID0gZHZhciArIGxpbmsKICAg
ICAgICAgICAgcHRhcmdldCA9IGxpbmsKICAgICAgICBlbHNlOgogICAgICAgICAgICB0YXJnZXQg
PSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9yaWdpbiksIGxpbmspCiAgICAgICAgICAg
IHB0YXJnZXQgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGRpciksIGxpbmspCiAgICAg
ICAgaWYgb3MucGF0aC5leGlzdHModGFyZ2V0KToKICAgICAgICAgICAgYmIuZXJyb3IoIkZpeHVw
IFBlcm1zOiBVbmFibGUgdG8gY29ycmVjdCBkaXJlY3RvcnkgbGluaywgdGFyZ2V0IGFscmVhZHkg
ZXhpc3RzOiAlcyAtPiAlcyIgJSAoZGlyLCBwdGFyZ2V0KSkKICAgICAgICAgICAgY29udGludWUK
CiAgICAgICAgIyBDcmVhdGUgcGF0aCB0byBtb3ZlIGRpcmVjdG9yeSB0bywgbW92ZSBpdCwgYW5k
IHRoZW4gc2V0dXAgdGhlIHN5bWxpbmsKICAgICAgICBiYi5ta2RpcmhpZXIob3MucGF0aC5kaXJu
YW1lKHRhcmdldCkpCiAgICAgICAgI2JiLm5vdGUoIkZpeHVwIFBlcm1zOiBSZW5hbWUgJXMgLT4g
JXMiICUgKGRpciwgcHRhcmdldCkpCiAgICAgICAgb3MucmVuYW1lKG9yaWdpbiwgdGFyZ2V0KQog
ICAgICAgICNiYi5ub3RlKCJGaXh1cCBQZXJtczogTGluayAlcyAtPiAlcyIgJSAoZGlyLCBsaW5r
KSkKICAgICAgICBvcy5zeW1saW5rKGxpbmssIG9yaWdpbikKCiAgICBmb3IgZGlyIGluIGZzX3Bl
cm1zX3RhYmxlOgogICAgICAgIGlmIGZzX3Blcm1zX3RhYmxlW2Rpcl0ubGluazoKICAgICAgICAg
ICAgY29udGludWUKCiAgICAgICAgb3JpZ2luID0gZHZhciArIGRpcgogICAgICAgIGlmIG5vdCAo
b3MucGF0aC5leGlzdHMob3JpZ2luKSBhbmQgb3MucGF0aC5pc2RpcihvcmlnaW4pKToKICAgICAg
ICAgICAgY29udGludWUKCiAgICAgICAgZml4X3Blcm1zKG9yaWdpbiwgZnNfcGVybXNfdGFibGVb
ZGlyXS5tb2RlLCBmc19wZXJtc190YWJsZVtkaXJdLnVpZCwgZnNfcGVybXNfdGFibGVbZGlyXS5n
aWQsIGRpcikKCiAgICAgICAgaWYgZnNfcGVybXNfdGFibGVbZGlyXS53YWxrID09ICd0cnVlJzoK
ICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsob3JpZ2luKToKICAg
ICAgICAgICAgICAgIGZvciBkciBpbiBkaXJzOgogICAgICAgICAgICAgICAgICAgIGVhY2hfZGly
ID0gb3MucGF0aC5qb2luKHJvb3QsIGRyKQogICAgICAgICAgICAgICAgICAgIGZpeF9wZXJtcyhl
YWNoX2RpciwgZnNfcGVybXNfdGFibGVbZGlyXS5tb2RlLCBmc19wZXJtc190YWJsZVtkaXJdLnVp
ZCwgZnNfcGVybXNfdGFibGVbZGlyXS5naWQsIGRpcikKICAgICAgICAgICAgICAgIGZvciBmIGlu
IGZpbGVzOgogICAgICAgICAgICAgICAgICAgIGVhY2hfZmlsZSA9IG9zLnBhdGguam9pbihyb290
LCBmKQogICAgICAgICAgICAgICAgICAgIGZpeF9wZXJtcyhlYWNoX2ZpbGUsIGZzX3Blcm1zX3Rh
YmxlW2Rpcl0uZm1vZGUsIGZzX3Blcm1zX3RhYmxlW2Rpcl0uZnVpZCwgZnNfcGVybXNfdGFibGVb
ZGlyXS5mZ2lkLCBkaXIpCn0KCgpweXRob24gYmFzZV9kb19wYXRjaCAoKSB7CiAgICBiYi5idWls
ZC5leGVjX2Z1bmMoJ3BhdGNoX2RvX3BhdGNoJywgZCkKfQoKCnB5dGhvbiBsZWdpdGltaXplX3Bh
Y2thZ2VfbmFtZSAoKSB7CmRlZiBsZWdpdGltaXplX3BhY2thZ2VfbmFtZShzKToKICAgICIiIgog
ICAgTWFrZSBzdXJlIHBhY2thZ2UgbmFtZXMgYXJlIGxlZ2l0aW1hdGUgc3RyaW5ncwogICAgIiIi
CiAgICBpbXBvcnQgcmUKCiAgICBkZWYgZml4dXRmKG0pOgogICAgICAgIGNwID0gbS5ncm91cCgx
KQogICAgICAgIGlmIGNwOgogICAgICAgICAgICByZXR1cm4gKCdcdSVzJyAlIGNwKS5kZWNvZGUo
J3VuaWNvZGVfZXNjYXBlJykuZW5jb2RlKCd1dGYtOCcpCgogICAgIyBIYW5kbGUgdW5pY29kZSBj
b2RlcG9pbnRzIGVuY29kZWQgYXMgPFUwMTIzPiwgYXMgaW4gZ2xpYmMgbG9jYWxlIGZpbGVzLgog
ICAgcyA9IHJlLnN1YignPFUoWzAtOUEtRmEtZl17MSw0fSk+JywgZml4dXRmLCBzKQoKICAgICMg
UmVtYWluaW5nIHBhY2thZ2UgbmFtZSB2YWxpZGl0eSBmaXhlcwogICAgcmV0dXJuIHMubG93ZXIo
KS5yZXBsYWNlKCdfJywgJy0nKS5yZXBsYWNlKCdAJywgJysnKS5yZXBsYWNlKCcsJywgJysnKS5y
ZXBsYWNlKCcvJywgJy0nKQp9CgoKcHl0aG9uIGJhc2VfZ2V0X21ldGFkYXRhX21vbm90b25lX2Jy
YW5jaCAoKSB7CmRlZiBiYXNlX2dldF9tZXRhZGF0YV9tb25vdG9uZV9icmFuY2gocGF0aCwgZCk6
CiAgICBtb25vdG9uZV9icmFuY2ggPSAiPHVua25vd24+IgogICAgdHJ5OgogICAgICAgIG1vbm90
b25lX2JyYW5jaCA9IGZpbGUoICIlcy9fTVROL29wdGlvbnMiICUgcGF0aCApLnJlYWQoKS5zdHJp
cCgpCiAgICAgICAgaWYgbW9ub3RvbmVfYnJhbmNoLnN0YXJ0c3dpdGgoICJkYXRhYmFzZSIgKToK
ICAgICAgICAgICAgbW9ub3RvbmVfYnJhbmNoX3dvcmRzID0gbW9ub3RvbmVfYnJhbmNoLnNwbGl0
KCkKICAgICAgICAgICAgbW9ub3RvbmVfYnJhbmNoID0gbW9ub3RvbmVfYnJhbmNoX3dvcmRzWyBt
b25vdG9uZV9icmFuY2hfd29yZHMuaW5kZXgoICJicmFuY2giICkrMV1bMTotMV0KICAgIGV4Y2Vw
dDoKICAgICAgICBwYXNzCiAgICByZXR1cm4gbW9ub3RvbmVfYnJhbmNoCn0KCgpweXRob24gc3N0
YXRlX2hhcmRjb2RlX3BhdGggKCkgewpkZWYgc3N0YXRlX2hhcmRjb2RlX3BhdGgoZCk6CiAgICBp
bXBvcnQgc3VicHJvY2VzcwoKICAgICMgTmVlZCB0byByZW1vdmUgaGFyZGNvZGVkIHBhdGhzIGFu
ZCBmaXggdGhlc2Ugd2hlbiB3ZSBpbnN0YWxsIHRoZQogICAgIyBzdGFnaW5nIHBhY2thZ2VzLgog
ICAgIwogICAgIyBOb3RlOiB0aGUgbG9naWMgaW4gdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBtYXRj
aCB0aGUgcmV2ZXJzZSBsb2dpYwogICAgIyBpbiBzc3RhdGVfaW5zdGFsbHBrZyhzcywgZCkKCiAg
ICBzdGFnaW5nID0gZC5nZXRWYXIoJ1NUQUdJTkdfRElSJywgVHJ1ZSkKICAgIHN0YWdpbmdfdGFy
Z2V0ID0gZC5nZXRWYXIoJ1NUQUdJTkdfRElSX1RBUkdFVCcsIFRydWUpCiAgICBzdGFnaW5nX2hv
c3QgPSBkLmdldFZhcignU1RBR0lOR19ESVJfSE9TVCcsIFRydWUpCiAgICBzc3RhdGVfYnVpbGRk
aXIgPSBkLmdldFZhcignU1NUQVRFX0JVSUxERElSJywgVHJ1ZSkKCiAgICBpZiBiYi5kYXRhLmlu
aGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRp
dmVzZGsnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zc3NkaycsIGQpIG9yIGJi
LmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzLWNhbmFkaWFuJywgZCk6CiAgICAgICAgc3N0YXRl
X2dyZXBfY21kID0gImdyZXAgLWwgLWUgJyVzJyIgJSAoc3RhZ2luZykKICAgICAgICBzc3RhdGVf
c2VkX2NtZCA9ICJzZWQgLWkgLWUgJ3M6JXM6RklYTUVTVEFHSU5HRElSOmcnIiAlIChzdGFnaW5n
KQogICAgZWxpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpOgogICAgICAgIHNz
dGF0ZV9ncmVwX2NtZCA9ICJncmVwIC1sIC1lICcoJXN8JXMpJyIgJSAoc3RhZ2luZ190YXJnZXQs
IHN0YWdpbmcpCiAgICAgICAgc3N0YXRlX3NlZF9jbWQgPSAic2VkIC1pIC1lICdzOiVzOkZJWE1F
U1RBR0lOR0RJUlRBUkdFVDpnOyBzOiVzOkZJWE1FU1RBR0lOR0RJUjpnJyIgJSAoc3RhZ2luZ190
YXJnZXQsIHN0YWdpbmcpCiAgICBlbHNlOgogICAgICAgIHNzdGF0ZV9ncmVwX2NtZCA9ICJncmVw
IC1sIC1lICclcyciICUgKHN0YWdpbmdfaG9zdCkKICAgICAgICBzc3RhdGVfc2VkX2NtZCA9ICJz
ZWQgLWkgLWUgJ3M6JXM6RklYTUVTVEFHSU5HRElSSE9TVDpnJyIgJSAoc3RhZ2luZ19ob3N0KQoK
ICAgIGZpeG1lZm4gPSAgc3N0YXRlX2J1aWxkZGlyICsgImZpeG1lcGF0aCIKCiAgICBzc3RhdGVf
c2Nhbl9jbWQgPSBkLmdldFZhcignU1NUQVRFX1NDQU5fQ01EJywgVHJ1ZSkKICAgIHNzdGF0ZV9m
aWxlbGlzdF9jbWQgPSAidGVlICVzIiAlIChmaXhtZWZuKQoKICAgICMgZml4bWVwYXRoIGZpbGUg
bmVlZHMgcmVsYXRpdmUgcGF0aHMsIGRyb3Agc3N0YXRlX2J1aWxkZGlyIHByZWZpeAogICAgc3N0
YXRlX2ZpbGVsaXN0X3JlbGF0aXZlX2NtZCA9ICJzZWQgLWkgLWUgJ3M6XiVzOjpnJyAlcyIgJSAo
c3N0YXRlX2J1aWxkZGlyLCBmaXhtZWZuKQoKICAgICMgTGltaXQgdGhlIGZpeHBhdGhzIGFuZCBz
ZWQgb3BlcmF0aW9ucyBiYXNlZCBvbiB0aGUgaW5pdGlhbCBncmVwIHNlYXJjaAogICAgIyBUaGlz
IGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2YgbWFraW5nIHN1cmUgdGhlIHZmcyBjYWNoZSBpcyBob3QK
ICAgIHNzdGF0ZV9oYXJkY29kZV9jbWQgPSAiJXMgfCB4YXJncyAlcyB8ICVzIHwgeGFyZ3MgLS1u
by1ydW4taWYtZW1wdHkgJXMiICUgKHNzdGF0ZV9zY2FuX2NtZCwgc3N0YXRlX2dyZXBfY21kLCBz
c3RhdGVfZmlsZWxpc3RfY21kLCBzc3RhdGVfc2VkX2NtZCkKCiAgICBwcmludCAiUmVtb3Zpbmcg
aGFyZGNvZGVkIHBhdGhzIGZyb20gc3N0YXRlIHBhY2thZ2U6ICclcyciICUgKHNzdGF0ZV9oYXJk
Y29kZV9jbWQpCiAgICBzdWJwcm9jZXNzLmNhbGwoc3N0YXRlX2hhcmRjb2RlX2NtZCwgc2hlbGw9
VHJ1ZSkKCiAgICAgICAgIyBJZiB0aGUgZml4bWVmbiBpcyBlbXB0eSwgcmVtb3ZlIGl0Li4KICAg
IGlmIG9zLnN0YXQoZml4bWVmbikuc3Rfc2l6ZSA9PSAwOgogICAgICAgIG9zLnJlbW92ZShmaXht
ZWZuKQogICAgZWxzZToKICAgICAgICBwcmludCAiUmVwbGFjaW5nIGFic29sdXRlIHBhdGhzIGlu
IGZpeG1lcGF0aCBmaWxlOiAnJXMnIiAlIChzc3RhdGVfZmlsZWxpc3RfcmVsYXRpdmVfY21kKQog
ICAgICAgIHN1YnByb2Nlc3MuY2FsbChzc3RhdGVfZmlsZWxpc3RfcmVsYXRpdmVfY21kLCBzaGVs
bD1UcnVlKQp9CgoKcHl0aG9uIGNoZWNrX2NyZWF0ZV9sb25nX2ZpbGVuYW1lICgpIHsKZGVmIGNo
ZWNrX2NyZWF0ZV9sb25nX2ZpbGVuYW1lKGZpbGVwYXRoLCBwYXRobmFtZSk6CiAgICB0ZXN0Zmls
ZSA9IG9zLnBhdGguam9pbihmaWxlcGF0aCwgJycuam9pbihbYG51bWBbLTFdIGZvciBudW0gaW4g
eHJhbmdlKDEsMjAwKV0pKQogICAgdHJ5OgogICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhm
aWxlcGF0aCk6CiAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihmaWxlcGF0aCkKICAgICAg
ICBmID0gZmlsZSh0ZXN0ZmlsZSwgInciKQogICAgICAgIGYuY2xvc2UoKQogICAgICAgIG9zLnJl
bW92ZSh0ZXN0ZmlsZSkKICAgIGV4Y2VwdCBJT0Vycm9yIGFzIChlcnJubywgc3RyZXJyb3IpOgog
ICAgICAgIGlmIGVycm5vID09IDM2OiAjIEVOQU1FVE9PTE9ORwogICAgICAgICAgICByZXR1cm4g
IkZhaWxlZCB0byBjcmVhdGUgYSBmaWxlIHdpdGggYSBsb25nIG5hbWUgaW4gJXMuIFBsZWFzZSB1
c2UgYSBmaWxlc3lzdGVtIHRoYXQgZG9lcyBub3QgdW5yZWFzb25hYmx5IGxpbWl0IGZpbGVuYW1l
IGxlbmd0aC5cbiIgJSBwYXRobmFtZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiAi
RmFpbGVkIHRvIGNyZWF0ZSBhIGZpbGUgaW4gJXM6ICVzLlxuIiAlIChwYXRobmFtZSwgc3RyZXJy
b3IpCiAgICBleGNlcHQgT1NFcnJvciBhcyAoZXJybm8sIHN0cmVycm9yKToKICAgICAgICByZXR1
cm4gIkZhaWxlZCB0byBjcmVhdGUgJXMgZGlyZWN0b3J5IGluIHdoaWNoIHRvIHJ1biBsb25nIG5h
bWUgc2FuaXR5IGNoZWNrOiAlcy5cbiIgJSAocGF0aG5hbWUsIHN0cmVycm9yKQogICAgcmV0dXJu
ICIiCn0KCgpweXRob24gZG9fcG9wdWxhdGVfbGljX3NldHNjZW5lICgpIHsKICAgIHNzdGF0ZV9z
ZXRzY2VuZShkKQp9CgoKcHl0aG9uIHJ1bnRpbWVfbWFwcGluZ19yZW5hbWUgKCkgewpkZWYgcnVu
dGltZV9tYXBwaW5nX3JlbmFtZSAodmFybmFtZSwgZCk6CiAgICAjYmIubm90ZSgiJXMgYmVmb3Jl
OiAlcyIgJSAodmFybmFtZSwgZC5nZXRWYXIodmFybmFtZSwgVHJ1ZSkpKQoKICAgIG5ld19kZXBl
bmRzID0ge30KICAgIGRlcHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZC5nZXRW
YXIodmFybmFtZSwgVHJ1ZSkgb3IgIiIpCiAgICBmb3IgZGVwZW5kIGluIGRlcHM6CiAgICAgICAg
bmV3X2RlcGVuZCA9IGdldF9wYWNrYWdlX21hcHBpbmcoZGVwZW5kLCBkKQogICAgICAgIG5ld19k
ZXBlbmRzW25ld19kZXBlbmRdID0gZGVwc1tkZXBlbmRdCgogICAgZC5zZXRWYXIodmFybmFtZSwg
YmIudXRpbHMuam9pbl9kZXBzKG5ld19kZXBlbmRzLCBjb21tYXNlcD1GYWxzZSkpCgogICAgI2Ji
Lm5vdGUoIiVzIGFmdGVyOiAlcyIgJSAodmFybmFtZSwgZC5nZXRWYXIodmFybmFtZSwgVHJ1ZSkp
KQp9CgoKcHl0aG9uIHNwbGl0X2FuZF9zdHJpcF9maWxlcyAoKSB7CiAgICBpbXBvcnQgY29tbWFu
ZHMsIHN0YXQsIGVycm5vLCBzdWJwcm9jZXNzCgogICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywg
VHJ1ZSkKICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKCiAgICAjIFdlIGRlZmF1bHQgdG8g
Jy5kZWJ1Zycgc3R5bGUKICAgIGlmIGQuZ2V0VmFyKCdQQUNLQUdFX0RFQlVHX1NQTElUX1NUWUxF
JywgVHJ1ZSkgPT0gJ2RlYnVnLWZpbGUtZGlyZWN0b3J5JzoKICAgICAgICAjIFNpbmdsZSBkZWJ1
Zy1maWxlLWRpcmVjdG9yeSBzdHlsZSBkZWJ1ZyBpbmZvCiAgICAgICAgZGVidWdhcHBlbmQgPSAi
LmRlYnVnIgogICAgICAgIGRlYnVnZGlyID0gIiIKICAgICAgICBkZWJ1Z2xpYmRpciA9ICIvdXNy
L2xpYi9kZWJ1ZyIKICAgICAgICBkZWJ1Z3NyY2RpciA9ICIvdXNyL3NyYy9kZWJ1ZyIKICAgIGVs
c2U6CiAgICAgICAgIyBPcmlnaW5hbCBPRS1jb3JlLCBhLmsuYS4gIi5kZWJ1ZyIsIHN0eWxlIGRl
YnVnIGluZm8KICAgICAgICBkZWJ1Z2FwcGVuZCA9ICIiCiAgICAgICAgZGVidWdkaXIgPSAiLy5k
ZWJ1ZyIKICAgICAgICBkZWJ1Z2xpYmRpciA9ICIiCiAgICAgICAgZGVidWdzcmNkaXIgPSAiL3Vz
ci9zcmMvZGVidWciCgogICAgb3MuY2hkaXIoZHZhcikKCiAgICAjIFJldHVybiB0eXBlIChiaXRz
KToKICAgICMgMCAtIG5vdCBlbGYKICAgICMgMSAtIEVMRgogICAgIyAyIC0gc3RyaXBwZWQKICAg
ICMgNCAtIGV4ZWN1dGFibGUKICAgICMgOCAtIHNoYXJlZCBsaWJyYXJ5CiAgICBkZWYgaXNFTEYo
cGF0aCk6CiAgICAgICAgdHlwZSA9IDAKICAgICAgICBwYXRocHJlZml4ID0gImV4cG9ydCBQQVRI
PSVzOyAiICUgZC5nZXRWYXIoJ1BBVEgnLCBUcnVlKQogICAgICAgIHJldCwgcmVzdWx0ID0gY29t
bWFuZHMuZ2V0c3RhdHVzb3V0cHV0KCIlc2ZpbGUgJyVzJyIgJSAocGF0aHByZWZpeCwgcGF0aCkp
CgogICAgICAgIGlmIHJldDoKICAgICAgICAgICAgYmIuZXJyb3IoInNwbGl0X2FuZF9zdHJpcF9m
aWxlczogJ2ZpbGUgJXMnIGZhaWxlZCIgJSBwYXRoKQogICAgICAgICAgICByZXR1cm4gdHlwZQoK
ICAgICAgICAjIE5vdCBzdHJpcHBlZAogICAgICAgIGlmICJFTEYiIGluIHJlc3VsdDoKICAgICAg
ICAgICAgdHlwZSB8PSAxCiAgICAgICAgICAgIGlmICJub3Qgc3RyaXBwZWQiIG5vdCBpbiByZXN1
bHQ6CiAgICAgICAgICAgICAgICB0eXBlIHw9IDIKICAgICAgICAgICAgaWYgImV4ZWN1dGFibGUi
IGluIHJlc3VsdDoKICAgICAgICAgICAgICAgIHR5cGUgfD0gNAogICAgICAgICAgICBpZiAic2hh
cmVkIiBpbiByZXN1bHQ6CiAgICAgICAgICAgICAgICB0eXBlIHw9IDgKICAgICAgICByZXR1cm4g
dHlwZQoKCiAgICAjCiAgICAjIEZpcnN0IGxldHMgZmlndXJlIG91dCBhbGwgb2YgdGhlIGZpbGVz
IHdlIG1heSBoYXZlIHRvIHByb2Nlc3MgLi4uIGRvIHRoaXMgb25seSBvbmNlIQogICAgIwogICAg
ZmlsZV9saXN0ID0ge30KICAgIGZpbGVfbGlua3MgPSB7fQogICAgaWYgKGQuZ2V0VmFyKCdJTkhJ
QklUX1BBQ0tBR0VfREVCVUdfU1BMSVQnLCBUcnVlKSAhPSAnMScpIGFuZCBcCiAgICAgICAgICAg
IChkLmdldFZhcignSU5ISUJJVF9QQUNLQUdFX1NUUklQJywgVHJ1ZSkgIT0gJzEnKToKICAgICAg
ICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkdmFyKToKICAgICAgICAgICAgZm9y
IGYgaW4gZmlsZXM6CiAgICAgICAgICAgICAgICBmaWxlID0gb3MucGF0aC5qb2luKHJvb3QsIGYp
CiAgICAgICAgICAgICAgICAjIE9ubHkgcHJvY2VzcyBmaWxlcyAoYW5kIHN5bWxpbmtzKS4uLiBT
a2lwIGZpbGVzIHRoYXQgYXJlIG9idmlvdXNseSBkZWJ1ZyBmaWxlcwogICAgICAgICAgICAgICAg
aWYgbm90IChkZWJ1Z2FwcGVuZCAhPSAiIiBhbmQgZmlsZS5lbmRzd2l0aChkZWJ1Z2FwcGVuZCkp
IGFuZCBcCiAgICAgICAgICAgICAgICAgICBub3QgKGRlYnVnZGlyICE9ICIiIGFuZCBkZWJ1Z2Rp
ciBpbiBvcy5wYXRoLmRpcm5hbWUoZmlsZVtsZW4oZHZhcik6XSkpIGFuZCBcCiAgICAgICAgICAg
ICAgICAgICBvcy5wYXRoLmlzZmlsZShmaWxlKToKICAgICAgICAgICAgICAgICAgICB0cnk6CiAg
ICAgICAgICAgICAgICAgICAgICAgIHMgPSBvcy5zdGF0KGZpbGUpCiAgICAgICAgICAgICAgICAg
ICAgZXhjZXB0IE9TRXJyb3IsIChlcnIsIHN0cmVycm9yKToKICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgZXJyICE9IGVycm5vLkVOT0VOVDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJh
aXNlCiAgICAgICAgICAgICAgICAgICAgICAgICMgU2tpcCBicm9rZW4gc3ltbGlua3MKICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICAjIElzIHRoZSBp
dGVtIGV4Y3V0YWJsZT8gIFRoZW4gd2UgbmVlZCB0byBwcm9jZXNzIGl0LgogICAgICAgICAgICAg
ICAgICAgIGlmIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhVU1IpIG9yIFwKICAgICAgICAg
ICAgICAgICAgICAgICAoc1tzdGF0LlNUX01PREVdICYgc3RhdC5TX0lYR1JQKSBvciBcCiAgICAg
ICAgICAgICAgICAgICAgICAgKHNbc3RhdC5TVF9NT0RFXSAmIHN0YXQuU19JWE9USCk6CiAgICAg
ICAgICAgICAgICAgICAgICAgICMgSWYgaXQncyBhIHN5bWxpbmssIGFuZCBwb2ludHMgdG8gYW4g
RUxGIGZpbGUsIHdlIGNhcHR1cmUgdGhlIHJlYWRsaW5rIHRhcmdldAogICAgICAgICAgICAgICAg
ICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhmaWxlKToKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRhcmdldCA9IG9zLnJlYWRsaW5rKGZpbGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiBub3Qgb3MucGF0aC5pc2Ficyh0YXJnZXQpOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGx0YXJnZXQgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGZpbGUpLCB0YXJn
ZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGx0YXJnZXQgPSB0YXJnZXQKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiBpc0VMRihsdGFyZ2V0KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYmIu
bm90ZSgiU3ltOiAlcyAoJWQpIiAlIChsdGFyZ2V0LCBpc0VMRihsdGFyZ2V0KSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9saXN0W2ZpbGVdID0gInN5bTogIiArIHRhcmdl
dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAg
ICAgICAgIyBJdCdzIGEgZmlsZSAob3IgaGFyZGxpbmspLCBub3QgYSBsaW5rCiAgICAgICAgICAg
ICAgICAgICAgICAgICMgLi4uYnV0IGlzIGl0IEVMRiwgYW5kIGlzIGl0IGFscmVhZHkgc3RyaXBw
ZWQ/CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZl9maWxlID0gaXNFTEYoZmlsZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgZWxmX2ZpbGUgJiAxOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIyBDaGVjayBpZiBpdCdzIGEgaGFyZCBsaW5rIHRvIHNvbWV0aGluZyBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiBzLnN0X25saW5rID4gMToKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmaWxlX3JlZmVyZW5jZSA9ICIlZF8lZCIgJSAocy5zdF9kZXYsIHMu
c3RfaW5vKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSGFyZCBsaW5rIHRvIHNv
bWV0aGluZyBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9saXN0W2Zp
bGVdID0gImhhcmQ6ICIgKyBmaWxlX3JlZmVyZW5jZQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9saXN0W2Zp
bGVdID0gIkVMRjogJWQiICUgZWxmX2ZpbGUKCgogICAgIwogICAgIyBGaXJzdCBsZXRzIHByb2Nl
c3MgZGVidWcgc3BsaXR0aW5nCiAgICAjCiAgICBpZiAoZC5nZXRWYXIoJ0lOSElCSVRfUEFDS0FH
RV9ERUJVR19TUExJVCcsIFRydWUpICE9ICcxJyk6CiAgICAgICAgZm9yIGZpbGUgaW4gZmlsZV9s
aXN0OgogICAgICAgICAgICBzcmMgPSBmaWxlW2xlbihkdmFyKTpdCiAgICAgICAgICAgIGRlc3Qg
PSBkZWJ1Z2xpYmRpciArIG9zLnBhdGguZGlybmFtZShzcmMpICsgZGVidWdkaXIgKyAiLyIgKyBv
cy5wYXRoLmJhc2VuYW1lKHNyYykgKyBkZWJ1Z2FwcGVuZAogICAgICAgICAgICBmcGF0aCA9IGR2
YXIgKyBkZXN0CiAgICAgICAgICAgICMgUHJlc2VydmUgc3ltbGlua3MgaW4gZGVidWcgYXJlYS4u
LgogICAgICAgICAgICBpZiBmaWxlX2xpc3RbZmlsZV0uc3RhcnRzd2l0aCgic3ltOiAiKToKICAg
ICAgICAgICAgICAgIGx0YXJnZXQgPSBmaWxlX2xpc3RbZmlsZV1bNTpdCiAgICAgICAgICAgICAg
ICBscGF0aCA9IG9zLnBhdGguZGlybmFtZShsdGFyZ2V0KQogICAgICAgICAgICAgICAgbGJhc2Ug
PSBvcy5wYXRoLmJhc2VuYW1lKGx0YXJnZXQpCiAgICAgICAgICAgICAgICBmdGFyZ2V0ID0gIiIK
ICAgICAgICAgICAgICAgIGlmIGxwYXRoIGFuZCBscGF0aCAhPSAiLiI6CiAgICAgICAgICAgICAg
ICAgICAgZnRhcmdldCArPSBscGF0aCArIGRlYnVnZGlyICsgIi8iCiAgICAgICAgICAgICAgICBm
dGFyZ2V0ICs9IGxiYXNlICsgZGVidWdhcHBlbmQKICAgICAgICAgICAgICAgIGlmIGxwYXRoLnN0
YXJ0c3dpdGgoIi4uIik6CiAgICAgICAgICAgICAgICAgICAgZnRhcmdldCA9IG9zLnBhdGguam9p
bigiLi4iLCBmdGFyZ2V0KQogICAgICAgICAgICAgICAgYmIubWtkaXJoaWVyKG9zLnBhdGguZGly
bmFtZShmcGF0aCkpCiAgICAgICAgICAgICAgICAjYmIubm90ZSgiU3ltbGluayAlcyAtPiAlcyIg
JSAoZnBhdGgsIGZ0YXJnZXQpKQogICAgICAgICAgICAgICAgb3Muc3ltbGluayhmdGFyZ2V0LCBm
cGF0aCkKICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICAjIFByZXNlcnZlIGhh
cmQgbGlua3MgaW4gZGVidWcgYXJlYS4uLgogICAgICAgICAgICBmaWxlX3JlZmVyZW5jZSA9ICIi
CiAgICAgICAgICAgIGlmIGZpbGVfbGlzdFtmaWxlXS5zdGFydHN3aXRoKCJoYXJkOiAiKToKICAg
ICAgICAgICAgICAgIGZpbGVfcmVmZXJlbmNlID0gZmlsZV9saXN0W2ZpbGVdWzY6XQogICAgICAg
ICAgICAgICAgaWYgZmlsZV9yZWZlcmVuY2Ugbm90IGluIGZpbGVfbGlua3M6CiAgICAgICAgICAg
ICAgICAgICAgIyBJZiB0aGlzIGlzIGEgbmV3IGZpbGUsIGFkZCBpdCBhcyBhIHJlZmVyZW5jZSwg
YW5kCiAgICAgICAgICAgICAgICAgICAgIyB1cGRhdGUgaXQncyB0eXBlLCBzbyB3ZSBjYW4gZmFs
bCB0aHJvdWdoIGFuZCBzcGxpdAogICAgICAgICAgICAgICAgICAgIGZpbGVfbGlzdFtmaWxlXSA9
ICJFTEY6ICVkIiAlIChpc0VMRihmaWxlKSkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAg
ICAgICAgICAgICAgdGFyZ2V0ID0gZmlsZV9saW5rc1tmaWxlX3JlZmVyZW5jZV1bbGVuKGR2YXIp
Ol0KICAgICAgICAgICAgICAgICAgICBmdGFyZ2V0ID0gZHZhciArIGRlYnVnbGliZGlyICsgb3Mu
cGF0aC5kaXJuYW1lKHRhcmdldCkgKyBkZWJ1Z2RpciArICIvIiArIG9zLnBhdGguYmFzZW5hbWUo
dGFyZ2V0KSArIGRlYnVnYXBwZW5kCiAgICAgICAgICAgICAgICAgICAgYmIubWtkaXJoaWVyKG9z
LnBhdGguZGlybmFtZShmcGF0aCkpCiAgICAgICAgICAgICAgICAgICAgI2JiLm5vdGUoIkxpbmsg
JXMgLT4gJXMiICUgKGZwYXRoLCBmdGFyZ2V0KSkKICAgICAgICAgICAgICAgICAgICBvcy5saW5r
KGZ0YXJnZXQsIGZwYXRoKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAg
ICAjIEl0J3MgRUxGLi4uCiAgICAgICAgICAgIGlmIGZpbGVfbGlzdFtmaWxlXS5zdGFydHN3aXRo
KCJFTEY6ICIpOgogICAgICAgICAgICAgICAgZWxmX2ZpbGUgPSBpbnQoZmlsZV9saXN0W2ZpbGVd
WzU6XSkKICAgICAgICAgICAgICAgIGlmIGVsZl9maWxlICYgMjoKICAgICAgICAgICAgICAgICAg
ICBiYi53YXJuKCJGaWxlICclcycgZnJvbSAlcyB3YXMgYWxyZWFkeSBzdHJpcHBlZCwgdGhpcyB3
aWxsIHByZXZlbnQgZnV0dXJlIGRlYnVnZ2luZyEiICUgKHNyYywgcG4pKQogICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICAgICAgIyBTcGxpdCB0aGUgZmlsZS4uLgogICAg
ICAgICAgICAgICAgYmIubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShmcGF0aCkpCiAgICAgICAg
ICAgICAgICAjYmIubm90ZSgiU3BsaXQgJXMgLT4gJXMiICUgKGZpbGUsIGZwYXRoKSkKICAgICAg
ICAgICAgICAgICMgT25seSBzdG9yZSBvZmYgdGhlIGhhcmQgbGluayByZWZlcmVuY2UgaWYgd2Ug
c3VjY2Vzc2Z1bGx5IHNwbGl0IQogICAgICAgICAgICAgICAgaWYgc3BsaXRmaWxlKGZpbGUsIGZw
YXRoLCBkZWJ1Z3NyY2RpciwgZCkgPT0gMCBhbmQgZmlsZV9yZWZlcmVuY2UgIT0gIiI6CiAgICAg
ICAgICAgICAgICAgICAgZmlsZV9saW5rc1tmaWxlX3JlZmVyZW5jZV0gPSBmaWxlCgogICAgICAg
ICMgVGhlIGFib3ZlIG1heSBoYXZlIGdlbmVyYXRlZCBkYW5nbGluZyBzeW1saW5rcywgcmVtb3Zl
IHRoZW0hCiAgICAgICAgIyBEYW5nbGluZyBzeW1saW5rcyBhcmUgYSByZXN1bHQgb2Ygc29tZXRo
aW5nIE5PVCBiZWluZyBzcGxpdCwgc3VjaCBhcyBhIHN0cmlwcGVkIGJpbmFyeS4KICAgICAgICAj
IFRoaXMgc2hvdWxkIGJlIGEgcmFyZSBvY2N1cmFuY2UsIGJ1dCB3ZSB3YW50IHRvIGNsZWFuIHVw
IGFueXdheS4KICAgICAgICBmb3IgZmlsZSBpbiBmaWxlX2xpc3Q6CiAgICAgICAgICAgIGlmIGZp
bGVfbGlzdFtmaWxlXS5zdGFydHN3aXRoKCJzeW06ICIpOgogICAgICAgICAgICAgICAgc3JjID0g
ZmlsZVtsZW4oZHZhcik6XQogICAgICAgICAgICAgICAgZGVzdCA9IGRlYnVnbGliZGlyICsgb3Mu
cGF0aC5kaXJuYW1lKHNyYykgKyBkZWJ1Z2RpciArICIvIiArIG9zLnBhdGguYmFzZW5hbWUoc3Jj
KSArIGRlYnVnYXBwZW5kCiAgICAgICAgICAgICAgICBmcGF0aCA9IGR2YXIgKyBkZXN0CiAgICAg
ICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgcyA9IG9zLnN0YXQoZnBhdGgpCiAg
ICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciwgKGVyciwgc3RyZXJyb3IpOgogICAgICAgICAg
ICAgICAgICAgIGlmIGVyciAhPSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgICAgICAg
IHJhaXNlCiAgICAgICAgICAgICAgICAgICAgI2JiLm5vdGUoIlJlbW92ZSBkYW5nbGluZyBsaW5r
ICVzIC0+ICVzIiAlIChmcGF0aCwgb3MucmVhZGxpbmsoZnBhdGgpKSkKICAgICAgICAgICAgICAg
ICAgICBvcy51bmxpbmsoZnBhdGgpCiAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGNvdWxkIGxl
YXZlIGFuIGVtcHR5IGRlYnVnIGRpcmVjdG9yeSBsYXlpbmcgYXJvdW5kCiAgICAgICAgICAgICAg
ICAgICAgIyB0YWtlIGNhcmUgb2YgdGhlIG9idmlvdXMgY2FzZS4uLgogICAgICAgICAgICAgICAg
ICAgIHN1YnByb2Nlc3MuY2FsbCgicm1kaXIgJXMgMj4vZGV2L251bGwiICUgb3MucGF0aC5kaXJu
YW1lKGZwYXRoKSwgc2hlbGw9VHJ1ZSkKCiAgICAgICAgIyBQcm9jZXNzIHRoZSBkZWJ1Z3NyY2Rp
ciBpZiByZXF1ZXN0ZWQuLi4KICAgICAgICAjIFRoaXMgY29waWVzIGFuZCBwbGFjZXMgdGhlIHJl
ZmVyZW5jZWQgc291cmNlcyBmb3IgbGF0ZXIgZGVidWdnaW5nLi4uCiAgICAgICAgc3BsaXRmaWxl
MihkZWJ1Z3NyY2RpciwgZCkKICAgICMKICAgICMgRW5kIG9mIGRlYnVnIHNwbGl0dGluZwogICAg
IwoKICAgICMKICAgICMgTm93IGxldHMgZ28gYmFjayBvdmVyIHRoaW5ncyBhbmQgc3RyaXAgdGhl
bQogICAgIwogICAgaWYgKGQuZ2V0VmFyKCdJTkhJQklUX1BBQ0tBR0VfU1RSSVAnLCBUcnVlKSAh
PSAnMScpOgogICAgICAgIGZvciBmaWxlIGluIGZpbGVfbGlzdDoKICAgICAgICAgICAgaWYgZmls
ZV9saXN0W2ZpbGVdLnN0YXJ0c3dpdGgoIkVMRjogIik6CiAgICAgICAgICAgICAgICBlbGZfZmls
ZSA9IGludChmaWxlX2xpc3RbZmlsZV1bNTpdKQogICAgICAgICAgICAgICAgI2JiLm5vdGUoIlN0
cmlwICVzIiAlIGZpbGUpCiAgICAgICAgICAgICAgICBydW5zdHJpcChmaWxlLCBlbGZfZmlsZSwg
ZCkKCgogICAgaWYgKGQuZ2V0VmFyKCdJTkhJQklUX1BBQ0tBR0VfU1RSSVAnLCBUcnVlKSAhPSAn
MScpOgogICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGR2YXIpOgogICAg
ICAgICAgICBmb3IgZiBpbiBmaWxlczoKICAgICAgICAgICAgICAgIGlmIG5vdCBmLmVuZHN3aXRo
KCIua28iKToKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgcnVu
c3RyaXAob3MucGF0aC5qb2luKHJvb3QsIGYpLCAwLCBkKQogICAgIwogICAgIyBFbmQgb2Ygc3Ry
aXAKICAgICMKfQoKCnB5dGhvbiBwYXRjaF9kb19wYXRjaCAoKSB7CiAgICBpbXBvcnQgb2UucGF0
Y2gKCiAgICBwYXRjaHNldG1hcCA9IHsKICAgICAgICAicGF0Y2giOiBvZS5wYXRjaC5QYXRjaFRy
ZWUsCiAgICAgICAgInF1aWx0Ijogb2UucGF0Y2guUXVpbHRUcmVlLAogICAgICAgICJnaXQiOiBv
ZS5wYXRjaC5HaXRBcHBseVRyZWUsCiAgICB9CgogICAgY2xzID0gcGF0Y2hzZXRtYXBbZC5nZXRW
YXIoJ1BBVENIVE9PTCcsIFRydWUpIG9yICdxdWlsdCddCgogICAgcmVzb2x2ZXJtYXAgPSB7CiAg
ICAgICAgIm5vb3AiOiBvZS5wYXRjaC5OT09QUmVzb2x2ZXIsCiAgICAgICAgInVzZXIiOiBvZS5w
YXRjaC5Vc2VyUmVzb2x2ZXIsCiAgICB9CgogICAgcmNscyA9IHJlc29sdmVybWFwW2QuZ2V0VmFy
KCdQQVRDSFJFU09MVkUnLCBUcnVlKSBvciAndXNlciddCgogICAgY2xhc3NlcyA9IHt9CgogICAg
cyA9IGQuZ2V0VmFyKCdTJywgVHJ1ZSkKCiAgICBwYXRoID0gb3MuZ2V0ZW52KCdQQVRIJykKICAg
IG9zLnB1dGVudignUEFUSCcsIGQuZ2V0VmFyKCdQQVRIJywgVHJ1ZSkpCgogICAgIyBXZSBtdXN0
IHVzZSBvbmUgVE1QRElSIHBlciBwcm9jZXNzIHNvIHRoYXQgdGhlICJwYXRjaCIgcHJvY2Vzc2Vz
CiAgICAjIGRvbid0IGdlbmVyYXRlIHRoZSBzYW1lIHRlbXAgZmlsZSBuYW1lLgoKICAgIGltcG9y
dCB0ZW1wZmlsZQogICAgcHJvY2Vzc190bXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKICAgIG9z
LmVudmlyb25bJ1RNUERJUiddID0gcHJvY2Vzc190bXBkaXIKCiAgICBmb3IgcGF0Y2ggaW4gc3Jj
X3BhdGNoZXMoZCk6CiAgICAgICAgXywgXywgbG9jYWwsIF8sIF8sIHBhcm0gPSBiYi5kZWNvZGV1
cmwocGF0Y2gpCgogICAgICAgIGlmICJwYXRjaGRpciIgaW4gcGFybToKICAgICAgICAgICAgcGF0
Y2hkaXIgPSBwYXJtWyJwYXRjaGRpciJdCiAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJz
KHBhdGNoZGlyKToKICAgICAgICAgICAgICAgIHBhdGNoZGlyID0gb3MucGF0aC5qb2luKHMsIHBh
dGNoZGlyKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHBhdGNoZGlyID0gcwoKICAgICAgICBp
ZiBub3QgcGF0Y2hkaXIgaW4gY2xhc3NlczoKICAgICAgICAgICAgcGF0Y2hzZXQgPSBjbHMocGF0
Y2hkaXIsIGQpCiAgICAgICAgICAgIHJlc29sdmVyID0gcmNscyhwYXRjaHNldCwgb2VfdGVybWlu
YWwpCiAgICAgICAgICAgIGNsYXNzZXNbcGF0Y2hkaXJdID0gKHBhdGNoc2V0LCByZXNvbHZlcikK
ICAgICAgICAgICAgcGF0Y2hzZXQuQ2xlYW4oKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHBh
dGNoc2V0LCByZXNvbHZlciA9IGNsYXNzZXNbcGF0Y2hkaXJdCgogICAgICAgIGJiLm5vdGUoIkFw
cGx5aW5nIHBhdGNoICclcycgKCVzKSIgJSAocGFybVsncGF0Y2huYW1lJ10sIG9lLnBhdGguZm9y
bWF0X2Rpc3BsYXkobG9jYWwsIGQpKSkKICAgICAgICB0cnk6CiAgICAgICAgICAgIHBhdGNoc2V0
LkltcG9ydCh7ImZpbGUiOmxvY2FsLCAic3RyaXBwYXRoIjogcGFybVsnc3RyaXBsZXZlbCddfSwg
VHJ1ZSkKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKICAgICAgICAgICAgYmIudXRp
bHMucmVtb3ZlKHByb2Nlc3NfdG1wZGlyLCBUcnVlKQogICAgICAgICAgICBiYi5mYXRhbChzdHIo
ZXhjKSkKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJlc29sdmVyLlJlc29sdmUoKQogICAgICAg
IGV4Y2VwdCBiYi5CQkhhbmRsZWRFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgYmIudXRpbHMu
cmVtb3ZlKHByb2Nlc3NfdG1wZGlyLCBUcnVlKQogICAgICAgICAgICBiYi5mYXRhbChzdHIoZSkp
CgogICAgYmIudXRpbHMucmVtb3ZlKHByb2Nlc3NfdG1wZGlyLCBUcnVlKQp9CgoKcHl0aG9uIHJw
YXRoX3JlcGxhY2UgKCkgewpkZWYgcnBhdGhfcmVwbGFjZSAocGF0aCwgZCk6CiAgICBiaW5kaXJz
ID0gZC5leHBhbmQoIi91c3IvYmluIC91c3Ivc2JpbiAvc2JpbiAvYmluIC91c3IvbGliIC9saWIg
L3Vzci9saWJleGVjICIpLnNwbGl0KCkKCiAgICBmb3IgYmluZGlyIGluIGJpbmRpcnM6CiAgICAg
ICAgI2JiLm5vdGUgKCJQcm9jZXNzaW5nIGRpcmVjdG9yeSAiICsgYmluZGlyKQogICAgICAgIGRp
cmVjdG9yeSA9IHBhdGggKyAiLyIgKyBiaW5kaXIKICAgICAgICBwcm9jZXNzX2RpciAoZGlyZWN0
b3J5LCBkKQp9CgoKcHl0aG9uIHBzdGFnaW5nX2ZldGNoICgpIHsKZGVmIHBzdGFnaW5nX2ZldGNo
KHNzdGF0ZWZldGNoLCBzc3RhdGVwa2csIGQpOgogICAgaW1wb3J0IGJiLmZldGNoMgoKICAgICMg
T25seSB0cnkgYW5kIGZldGNoIGlmIHRoZSB1c2VyIGhhcyBjb25maWd1cmVkIGEgbWlycm9yCiAg
ICBtaXJyb3JzID0gZC5nZXRWYXIoJ1NTVEFURV9NSVJST1JTJywgVHJ1ZSkKICAgIGlmIG5vdCBt
aXJyb3JzOgogICAgICAgIHJldHVybgoKICAgICMgQ29weSB0aGUgZGF0YSBvYmplY3QgYW5kIG92
ZXJyaWRlIERMX0RJUiBhbmQgU1JDX1VSSQogICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVD
b3B5KGQpCiAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKCiAgICBkbGRpciA9IGxv
Y2FsZGF0YS5leHBhbmQoIi9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1m
cmkyL3NzdGF0ZS1jYWNoZSIpCiAgICBzcmN1cmkgPSAiZmlsZTovLyIgKyBzc3RhdGVmZXRjaAoK
ICAgIGJiLm1rZGlyaGllcihkbGRpcikKCiAgICBsb2NhbGRhdGEuc2V0VmFyKCdETF9ESVInLCBk
bGRpcikKICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BSRU1JUlJPUlMnLCBtaXJyb3JzKQogICAgbG9j
YWxkYXRhLnNldFZhcignU1JDX1VSSScsIHNyY3VyaSkKCiAgICAjIFRyeSBhIGZldGNoIGZyb20g
dGhlIHNzdGF0ZSBtaXJyb3IsIGlmIGl0IGZhaWxzIGp1c3QgcmV0dXJuIGFuZAogICAgIyB3ZSB3
aWxsIGJ1aWxkIHRoZSBwYWNrYWdlCiAgICB0cnk6CiAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNo
Mi5GZXRjaChbc3JjdXJpXSwgbG9jYWxkYXRhLCBjYWNoZT1GYWxzZSkKICAgICAgICBmZXRjaGVy
LmRvd25sb2FkKCkKCiAgICAgICAgIyBOZWVkIHRvIG9wdGltaXNlIHRoaXMsIGlmIHVzaW5nIGZp
bGU6Ly8gdXJscywgdGhlIGZldGNoZXIganVzdCBjaGFuZ2VzIHRoZSBsb2NhbCBwYXRoCiAgICAg
ICAgIyBGb3Igbm93IHdvcmsgYXJvdW5kIGJ5IHN5bWxpbmtpbmcKICAgICAgICBsb2NhbHBhdGgg
PSBiYi5kYXRhLmV4cGFuZChmZXRjaGVyLmxvY2FscGF0aChzcmN1cmkpLCBsb2NhbGRhdGEpCiAg
ICAgICAgaWYgbG9jYWxwYXRoICE9IHNzdGF0ZXBrZyBhbmQgb3MucGF0aC5leGlzdHMobG9jYWxw
YXRoKSBhbmQgbm90IG9zLnBhdGguZXhpc3RzKHNzdGF0ZXBrZyk6CiAgICAgICAgICAgIG9zLnN5
bWxpbmsobG9jYWxwYXRoLCBzc3RhdGVwa2cpCgogICAgZXhjZXB0IGJiLmZldGNoMi5CQkZldGNo
RXhjZXB0aW9uOgogICAgICAgIHBhc3MKfQoKCnB5dGhvbiBwa2dhcmNoX21hcHBpbmcgKCkgewpk
ZWYgcGtnYXJjaF9tYXBwaW5nKGQpOgogICAgIyBDb21wYXRpYmlsaXR5IG1hcHBpbmdzIG9mIFRV
TkVfUEtHQVJDSCAob3B0IGluKQogICAgaWYgZC5nZXRWYXIoIlBLR0FSQ0hDT01QQVRfQVJNVjdB
IiwgVHJ1ZSk6CiAgICAgICAgaWYgZC5nZXRWYXIoIlRVTkVfUEtHQVJDSCIsIFRydWUpID09ICJh
cm12N2EtdmZwLW5lb24iOgogICAgICAgICAgICBkLnNldFZhcigiVFVORV9QS0dBUkNIIiwgImFy
bXY3YSIpCn0KCgpweXRob24gZXhwbG9kZV9kZXBzICgpIHsKZGVmIGV4cGxvZGVfZGVwcyhzKToK
ICAgIHJldHVybiBiYi51dGlscy5leHBsb2RlX2RlcHMocykKfQoKCnB5dGhvbiBwYWNrYWdlX3Fh
X2NoZWNrX2RldiAoKSB7CmRlZiBwYWNrYWdlX3FhX2NoZWNrX2RldihwYXRoLCBuYW1lLCBkLCBl
bGYsIG1lc3NhZ2VzKToKICAgICIiIgogICAgQ2hlY2sgZm9yICIuc28iIGxpYnJhcnkgc3ltbGlu
a3MgaW4gbm9uLWRldiBwYWNrYWdlcwogICAgIiIiCgogICAgaWYgbm90IG5hbWUuZW5kc3dpdGgo
Ii1kZXYiKSBhbmQgbm90IG5hbWUuZW5kc3dpdGgoIi1kYmciKSBhbmQgbm90IG5hbWUuc3RhcnRz
d2l0aCgibmF0aXZlc2RrLSIpIGFuZCBwYXRoLmVuZHN3aXRoKCIuc28iKSBhbmQgb3MucGF0aC5p
c2xpbmsocGF0aCk6CiAgICAgICAgbWVzc2FnZXMuYXBwZW5kKCJub24gLWRldi8tZGJnLy1uYXRp
dmVzZGsgcGFja2FnZSBjb250YWlucyBzeW1saW5rIC5zbzogJXMgcGF0aCAnJXMnIiAlIFwKICAg
ICAgICAgICAgICAgICAobmFtZSwgcGFja2FnZV9xYV9jbGVhbl9wYXRoKHBhdGgsZCkpKQp9CgoK
cHl0aG9uIHBhY2thZ2VfcWFfY2hlY2tfcnBhdGggKCkgewpkZWYgcGFja2FnZV9xYV9jaGVja19y
cGF0aChmaWxlLG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgogICAgIiIiCiAgICBDaGVjayBmb3Ig
ZGFuZ2Vyb3VzIFJQQVRIcwogICAgIiIiCiAgICBpZiBub3QgZWxmOgogICAgICAgIHJldHVybgoK
ICAgIHNjYW5lbGYgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ1NUQUdJTkdfQklORElSX05BVElW
RScsVHJ1ZSksJ3NjYW5lbGYnKQogICAgYmFkX2RpcnMgPSBbZC5nZXRWYXIoJ1RNUERJUicsIFRy
dWUpICsgIi93b3JrIiwgZC5nZXRWYXIoJ1NUQUdJTkdfRElSX1RBUkdFVCcsIFRydWUpXQogICAg
YmFkX2Rpcl90ZXN0ID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCiAgICBpZiBub3Qgb3MucGF0
aC5leGlzdHMoc2NhbmVsZik6CiAgICAgICAgYmIuZmF0YWwoIkNhbiBub3QgY2hlY2sgUlBBVEgs
IHNjYW5lbGYgKHBhcnQgb2YgcGF4LXV0aWxzLW5hdGl2ZSkgbm90IGZvdW5kIikKCiAgICBpZiBu
b3QgYmFkX2RpcnNbMF0gaW4gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKToKICAgICAgICBiYi5m
YXRhbCgiVGhpcyBjbGFzcyBhc3N1bWVkIHRoYXQgV09SS0RJUiBpcyAvaG9tZS9taXNoYWwveW9j
dG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvd29yay4uLiBOb3QgZG9pbmcgYW55IGNo
ZWNrIikKCiAgICBvdXRwdXQgPSBvcy5wb3BlbigiJXMgLUIgLUYlJXIjRiAnJXMnIiAlIChzY2Fu
ZWxmLGZpbGUpKQogICAgdHh0ICAgID0gb3V0cHV0LnJlYWRsaW5lKCkuc3BsaXQoKQogICAgZm9y
IGxpbmUgaW4gdHh0OgogICAgICAgIGZvciBkaXIgaW4gYmFkX2RpcnM6CiAgICAgICAgICAgIGlm
IGRpciBpbiBsaW5lOgogICAgICAgICAgICAgICAgbWVzc2FnZXMuYXBwZW5kKCJwYWNrYWdlICVz
IGNvbnRhaW5zIGJhZCBSUEFUSCAlcyBpbiBmaWxlICVzIiAlIChuYW1lLCBsaW5lLCBmaWxlKSkK
fQoKCnB5dGhvbiBwYWNrYWdlX3FhX2NoZWNrX3Vuc2FmZV9yZWZlcmVuY2VzX2luX3NjcmlwdHMg
KCkgewpkZWYgcGFja2FnZV9xYV9jaGVja191bnNhZmVfcmVmZXJlbmNlc19pbl9zY3JpcHRzKHBh
dGgsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgoJIiIiCglXYXJuIGlmIHNjcmlwdHMgaW4gYmFz
ZV9bYmluZGlyfHNiaW5kaXJ8bGliZGlyXSByZWZlcmVuY2UgZmlsZXMgdW5kZXIgZXhlY19wcmVm
aXgKCSIiIgoJaWYgdW5zYWZlX3JlZmVyZW5jZXNfc2tpcHBhYmxlKHBhdGgsIG5hbWUsIGQpOgoJ
CXJldHVybgoKCWlmIG5vdCBlbGY6CgkJaW1wb3J0IHN0YXQKCQlpbXBvcnQgc3VicHJvY2VzcwoJ
CXBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKCgkJIyBFbnN1cmUgd2UncmUgY2hlY2tpbmcgYW4g
ZXhlY3V0YWJsZSBzY3JpcHQKCQlzdGF0aW5mbyA9IG9zLnN0YXQocGF0aCkKCQlpZiBib29sKHN0
YXRpbmZvLnN0X21vZGUgJiBzdGF0LlNfSVhVU1IpOgoJCQkjIGdyZXAgc2hlbGwgc2NyaXB0cyBm
b3IgcG9zc2libGUgcmVmZXJlbmNlcyB0byAvZXhlY19wcmVmaXgvCgkJCWV4ZWNfcHJlZml4ID0g
ZC5nZXRWYXIoJ2V4ZWNfcHJlZml4JywgVHJ1ZSkKCQkJc3RhdGVtZW50ID0gImdyZXAgLWUgJyVz
LycgJXMgPiAvZGV2L251bGwiICUgKGV4ZWNfcHJlZml4LCBwYXRoKQoJCQlpZiBzdWJwcm9jZXNz
LmNhbGwoc3RhdGVtZW50LCBzaGVsbD1UcnVlKSA9PSAwOgoJCQkJZXJyb3JfbXNnID0gcG4gKyAi
OiBGb3VuZCBhIHJlZmVyZW5jZSB0byAlcy8gaW4gJXMiICUgKGV4ZWNfcHJlZml4LCBwYXRoKQoJ
CQkJcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInVuc2FmZS1yZWZlcmVuY2VzLWluLXNjcmlwdHMi
LCBlcnJvcl9tc2csIGQpCgkJCQllcnJvcl9tc2cgPSAiU2hlbGwgc2NyaXB0cyBpbiBiYXNlX2Jp
bmRpciBhbmQgYmFzZV9zYmluZGlyIHNob3VsZCBub3QgcmVmZXJlbmNlIGFueXRoaW5nIGluIGV4
ZWNfcHJlZml4IgoJCQkJcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInVuc2FmZS1yZWZlcmVuY2Vz
LWluLXNjcmlwdHMiLCBlcnJvcl9tc2csIGQpCn0KCgpweXRob24gd3JpdGVfc3BlY2ZpbGUgKCkg
ewogICAgaW1wb3J0IHRleHR3cmFwCiAgICBpbXBvcnQgb2UucGFja2FnZWRhdGEKCiAgICAjIGFw
cGVuZCBpbmZvcm1hdGlvbiBmb3IgbG9ncyBhbmQgcGF0Y2hlcyB0byAlcHJlcAogICAgZGVmIGFk
ZF9wcmVwKGQsc3BlY19maWxlc19ib3R0b20pOgogICAgICAgIGlmIGQuZ2V0VmFyKCdTT1VSQ0Vf
QVJDSElWRV9QQUNLQUdFX1RZUEUnLCBUcnVlKSA9PSAnc3JwbSc6CiAgICAgICAgICAgIHNwZWNf
ZmlsZXNfYm90dG9tLmFwcGVuZCgnJSVwcmVwIC1uICVzJyAlIGQuZ2V0VmFyKCdQTicsIFRydWUp
ICkKICAgICAgICAgICAgc3BlY19maWxlc19ib3R0b20uYXBwZW5kKCclcycgJSAiZWNobyBcImlu
Y2x1ZGUgbG9ncyBhbmQgcGF0Y2hlcywgUGxlYXNlIGNoZWNrIHRoZW0gaW4gU09VUkNFU1wiIikK
ICAgICAgICAgICAgc3BlY19maWxlc19ib3R0b20uYXBwZW5kKCcnKQoKICAgICMgYXBwZW5kIHRo
ZSBuYW1lIG9mIHRhcmJhbGwgdG8ga2V5IHdvcmQgJ1NPVVJDRScgaW4geHh4LnNwZWMuCiAgICBk
ZWYgdGFpbF9zb3VyY2UoZCk6CiAgICAgICAgaWYgZC5nZXRWYXIoJ1NPVVJDRV9BUkNISVZFX1BB
Q0tBR0VfVFlQRScsIFRydWUpID09ICdzcnBtJzoKICAgICAgICAgICAgc291cmNlX2xpc3QgPSBn
ZXRfcGFja2FnZShkKQogICAgICAgICAgICBzb3VyY2VfbnVtYmVyID0gMAogICAgICAgICAgICB3
b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQogICAgICAgICAgICBmb3Igc291cmNl
IGluIHNvdXJjZV9saXN0OgogICAgICAgICAgICAgICAgIyBUaGUgcnBtYnVpbGQgZG9lc24ndCBu
ZWVkIHRoZSByb290IHBlcm1pc3Npb24sIGJ1dCBpdCBuZWVkcwogICAgICAgICAgICAgICAgIyB0
byBrbm93IHRoZSBmaWxlJ3MgdXNlciBhbmQgZ3JvdXAgbmFtZSwgdGhlIG9ubHkgdXNlciBhbmQK
ICAgICAgICAgICAgICAgICMgZ3JvdXAgaW4gZmFrZXJvb3QgaXMgInJvb3QiIHdoZW4gd29ya2lu
ZyBpbiBmYWtlcm9vdC4KICAgICAgICAgICAgICAgIG9zLmNob3duKCIlcy8lcyIgJSAod29ya2Rp
ciwgc291cmNlKSwgMCwgMCkKICAgICAgICAgICAgICAgIHNwZWNfcHJlYW1ibGVfdG9wLmFwcGVu
ZCgnU291cmNlJyArIHN0cihzb3VyY2VfbnVtYmVyKSArICc6ICVzJyAlIHNvdXJjZSkKICAgICAg
ICAgICAgICAgIHNvdXJjZV9udW1iZXIgKz0gMQogICAgIyBXZSBuZWVkIGEgc2ltcGxlIHdheSB0
byByZW1vdmUgdGhlIE1MUFJFRklYIGZyb20gdGhlIHBhY2thZ2UgbmFtZSwKICAgICMgYW5kIGRl
cGVuZGVuY3kgaW5mb3JtYXRpb24uLi4KICAgIGRlZiBzdHJpcF9tdWx0aWxpYihuYW1lLCBkKToK
ICAgICAgICBtdWx0aWxpYnMgPSBkLmdldFZhcignTVVMVElMSUJTJywgVHJ1ZSkgb3IgIiIKICAg
ICAgICBmb3IgZXh0IGluIG11bHRpbGlicy5zcGxpdCgpOgogICAgICAgICAgICBlZXh0ID0gZXh0
LnNwbGl0KCc6JykKICAgICAgICAgICAgaWYgbGVuKGVleHQpID4gMSBhbmQgZWV4dFswXSA9PSAn
bXVsdGlsaWInIGFuZCBuYW1lIGFuZCBuYW1lLmZpbmQoZWV4dFsxXSArICctJykgPj0gMDoKICAg
ICAgICAgICAgICAgIG5hbWUgPSAiIi5qb2luKG5hbWUuc3BsaXQoZWV4dFsxXSArICctJykpCiAg
ICAgICAgcmV0dXJuIG5hbWUKCiAgICBkZWYgc3RyaXBfbXVsdGlsaWJfZGVwcyhkZXBzLCBkKToK
ICAgICAgICBkZXBlbmRzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGRlcHMgb3Ig
IiIpCiAgICAgICAgbmV3ZGVwcyA9IHt9CiAgICAgICAgZm9yIGRlcCBpbiBkZXBlbmRzOgogICAg
ICAgICAgICBuZXdkZXBzW3N0cmlwX211bHRpbGliKGRlcCwgZCldID0gZGVwZW5kc1tkZXBdCiAg
ICAgICAgcmV0dXJuIGJiLnV0aWxzLmpvaW5fZGVwcyhuZXdkZXBzKQoKIyAgICAgICAgbWwgPSBk
LmdldFZhcigiTUxQUkVGSVgiLCBUcnVlKQojICAgICAgICBpZiBtbCBhbmQgbmFtZSBhbmQgbGVu
KG1sKSAhPSAwIGFuZCBuYW1lLmZpbmQobWwpID09IDA6CiMgICAgICAgICAgICByZXR1cm4gbWwu
am9pbihuYW1lLnNwbGl0KG1sLCAxKVsxOl0pCiMgICAgICAgIHJldHVybiBuYW1lCgogICAgIyBJ
biBSUE0sIGRlcGVuZGVuY2llcyBhcmUgb2YgdGhlIGZvcm1hdDogcGtnIDw+PSBFcG9jaDpWZXJz
aW9uLVJlbGVhc2UKICAgICMgVGhpcyBmb3JtYXQgaXMgc2ltaWxhciB0byBPRSwgaG93ZXZlciB0
aGVyZSBhcmUgcmVzdHJpY3Rpb25zIG9uIHRoZQogICAgIyBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJl
IGluIGEgZmllbGQuICBJbiB0aGUgVmVyc2lvbiBmaWVsZCwgIi0iCiAgICAjIGNoYXJhY3RlcnMg
YXJlIG5vdCBhbGxvd2VkLiAgIi0iIGlzIGFsbG93ZWQgaW4gdGhlIFJlbGVhc2UgZmllbGQuCiAg
ICAjCiAgICAjIFdlIHRyYW5zbGF0ZSB0aGUgIi0iIGluIHRoZSB2ZXJzaW9uIHRvIGEgIisiLCBi
eSBsb2FkaW5nIHRoZSBQS0dWCiAgICAjIGZyb20gdGhlIGRlcGVuZGVudCByZWNpcGUsIHJlcGxh
Y2luZyB0aGUgLSB3aXRoIGEgKywgYW5kIHRoZW4gdXNpbmcKICAgICMgdGhhdCB2YWx1ZSB0byBk
byBhIHJlcGxhY2UgaW5zaWRlIG9mIHRoaXMgcmVjaXBlJ3MgZGVwZW5kZW5jaWVzLgogICAgIyBU
aGlzIHByZXNlcnZlcyB0aGUgIi0iIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSB2ZXJzaW9uIGFuZCBy
ZWxlYXNlLCBhcwogICAgIyB3ZWxsIGFzIGFueSAiLSIgY2hhcmFjdGVycyBpbnNpZGUgb2YgdGhl
IHJlbGVhc2UgZmllbGQuCiAgICAjCiAgICAjIEFsbCBvZiB0aGlzIGhhcyB0byBoYXBwZW4gQkVG
T1JFIHRoZSBtYXBwaW5nX3JlbmFtZV9ob29rIGFzCiAgICAjIGFmdGVyIHJlbmFtaW5nIHdlIGNh
bm5vdCBsb29rIHVwIHRoZSBkZXBlbmRlbmNpZXMgaW4gdGhlIHBhY2thZ2VkYXRhCiAgICAjIHN0
b3JlLgogICAgZGVmIHRyYW5zbGF0ZV92ZXJzKHZhcm5hbWUsIGQpOgogICAgICAgIGRlcGVuZHMg
PSBkLmdldFZhcih2YXJuYW1lLCBUcnVlKQogICAgICAgIGlmIGRlcGVuZHM6CiAgICAgICAgICAg
IGRlcGVuZHNfZGljdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihkZXBlbmRzKQog
ICAgICAgICAgICBuZXdkZXBzX2RpY3QgPSB7fQogICAgICAgICAgICBmb3IgZGVwIGluIGRlcGVu
ZHNfZGljdDoKICAgICAgICAgICAgICAgIHZlcmxpc3QgPSBbXQogICAgICAgICAgICAgICAgZm9y
IHZlciBpbiBkZXBlbmRzX2RpY3RbZGVwXToKICAgICAgICAgICAgICAgICAgICBpZiAnLScgaW4g
dmVyOgogICAgICAgICAgICAgICAgICAgICAgICBzdWJkID0gb2UucGFja2FnZWRhdGEucmVhZF9z
dWJwa2dkYXRhX2RpY3QoZGVwLCBkKQogICAgICAgICAgICAgICAgICAgICAgICBpZiAnUEtHVicg
aW4gc3ViZDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB2ID0gc3ViZFsnUEtHViddCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXBwdiA9IHB2LnJlcGxhY2UoJy0nLCAnKycpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJsaXN0LmFwcGVuZCh2ZXIucmVwbGFjZShwdiwg
cmVwcHYpKQogICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAg
IHZlcmxpc3QuYXBwZW5kKHZlcikKICAgICAgICAgICAgICAgIG5ld2RlcHNfZGljdFtkZXBdID0g
dmVybGlzdAogICAgICAgICAgICBkZXBlbmRzID0gYmIudXRpbHMuam9pbl9kZXBzKG5ld2RlcHNf
ZGljdCkKICAgICAgICAgICAgZC5zZXRWYXIodmFybmFtZSwgZGVwZW5kcy5zdHJpcCgpKQoKICAg
ICMgV2UgbmVlZCB0byBjaGFuZ2UgdGhlIHN0eWxlIHRoZSBkZXBlbmRlbmN5IGZyb20gQkIgdG8g
UlBNCiAgICAjIFRoaXMgbmVlZHMgdG8gaGFwcGVuIEFGVEVSIHRoZSBtYXBwaW5nX3JlbmFtZV9o
b29rCiAgICBkZWYgcHJpbnRfZGVwcyh2YXJpYWJsZSwgdGFnLCBhcnJheSwgZCk6CiAgICAgICAg
ZGVwZW5kcyA9IHZhcmlhYmxlCiAgICAgICAgaWYgZGVwZW5kczoKICAgICAgICAgICAgZGVwZW5k
c19kaWN0ID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGRlcGVuZHMpCiAgICAgICAg
ICAgIGZvciBkZXAgaW4gZGVwZW5kc19kaWN0OgogICAgICAgICAgICAgICAgZm9yIHZlciBpbiBk
ZXBlbmRzX2RpY3RbZGVwXToKICAgICAgICAgICAgICAgICAgICB2ZXIgPSB2ZXIucmVwbGFjZSgn
KCcsICcnKQogICAgICAgICAgICAgICAgICAgIHZlciA9IHZlci5yZXBsYWNlKCcpJywgJycpCiAg
ICAgICAgICAgICAgICAgICAgYXJyYXkuYXBwZW5kKCIlczogJXMgJXMiICUgKHRhZywgZGVwLCB2
ZXIpKQogICAgICAgICAgICAgICAgaWYgbm90IGxlbihkZXBlbmRzX2RpY3RbZGVwXSk6CiAgICAg
ICAgICAgICAgICAgICAgYXJyYXkuYXBwZW5kKCIlczogJXMiICUgKHRhZywgZGVwKSkKCiAgICBk
ZWYgd2Fsa19maWxlcyh3YWxrcGF0aCwgdGFyZ2V0LCBjb25mZmlsZXMpOgogICAgICAgIGZvciBy
b290cGF0aCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayh3YWxrcGF0aCk6CiAgICAgICAgICAgIHBh
dGggPSByb290cGF0aC5yZXBsYWNlKHdhbGtwYXRoLCAiIikKICAgICAgICAgICAgZm9yIGRpciBp
biBkaXJzOgogICAgICAgICAgICAgICAgIyBBbGwgcGFja2FnZXMgb3duIHRoZSBkaXJlY3Rvcmll
cyB0aGVpciBmaWxlcyBhcmUgaW4uLi4KICAgICAgICAgICAgICAgIHRhcmdldC5hcHBlbmQoJyVk
aXIgIicgKyBwYXRoICsgJy8nICsgZGlyICsgJyInKQogICAgICAgICAgICBmb3IgZmlsZSBpbiBm
aWxlczoKICAgICAgICAgICAgICAgIGlmIGNvbmZmaWxlcy5jb3VudChwYXRoICsgJy8nICsgZmls
ZSk6CiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmFwcGVuZCgnJWNvbmZpZyAiJyArIHBhdGgg
KyAnLycgKyBmaWxlICsgJyInKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAg
ICAgICB0YXJnZXQuYXBwZW5kKCciJyArIHBhdGggKyAnLycgKyBmaWxlICsgJyInKQoKICAgICMg
UHJldmVudCB0aGUgcHJlcm0vcG9zdHJtIHNjcmlwdHMgZnJvbSBiZWluZyBydW4gZHVyaW5nIGFu
IHVwZ3JhZGUKICAgIGRlZiB3cmFwX3VuaW5zdGFsbChzY3JpcHR2YXIpOgogICAgICAgIHNjciA9
IHNjcmlwdHZhci5zdHJpcCgpCiAgICAgICAgaWYgc2NyLnN0YXJ0c3dpdGgoIiMhIik6CiAgICAg
ICAgICAgIHBvcyA9IHNjci5maW5kKCJcbiIpICsgMQogICAgICAgIGVsc2U6CiAgICAgICAgICAg
IHBvcyA9IDAKICAgICAgICBzY3IgPSBzY3JbOnBvc10gKyAnaWYgWyAiJDEiID0gIjAiIF0gOyB0
aGVuXG4nICsgc2NyW3BvczpdICsgJ1xuZmknCiAgICAgICAgcmV0dXJuIHNjcgoKICAgIHBhY2th
Z2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKICAgIGlmIG5vdCBwYWNrYWdlcyBvciBw
YWNrYWdlcyA9PSAnJzoKICAgICAgICBiYi5kZWJ1ZygxLCAiTm8gcGFja2FnZXM7IG5vdGhpbmcg
dG8gZG8iKQogICAgICAgIHJldHVybgoKICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcs
IFRydWUpCiAgICBpZiBub3QgcGtnZGVzdDoKICAgICAgICBiYi5mYXRhbCgiTm8gUEtHREVTVCIp
CiAgICAgICAgcmV0dXJuCgogICAgb3V0c3BlY2ZpbGUgPSBkLmdldFZhcignT1VUU1BFQ0ZJTEUn
LCBUcnVlKQogICAgaWYgbm90IG91dHNwZWNmaWxlOgogICAgICAgIGJiLmZhdGFsKCJObyBPVVRT
UEVDRklMRSIpCiAgICAgICAgcmV0dXJuCgogICAgIyBDb25zdHJ1Y3QgdGhlIFNQRUMgZmlsZS4u
LgogICAgc3JjbmFtZSAgICA9IHN0cmlwX211bHRpbGliKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBk
KQogICAgc3Jjc3VtbWFyeSA9IChkLmdldFZhcignU1VNTUFSWScsIFRydWUpIG9yIGQuZ2V0VmFy
KCdERVNDUklQVElPTicsIFRydWUpIG9yICIuIikKICAgIHNyY3ZlcnNpb24gPSBkLmdldFZhcign
UEtHVicsIFRydWUpLnJlcGxhY2UoJy0nLCAnKycpCiAgICBzcmNyZWxlYXNlID0gZC5nZXRWYXIo
J1BLR1InLCBUcnVlKQogICAgc3JjZXBvY2ggICA9IChkLmdldFZhcignUEtHRScsIFRydWUpIG9y
ICIiKQogICAgc3JjbGljZW5zZSA9IGQuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkKICAgIHNyY3Nl
Y3Rpb24gPSBkLmdldFZhcignU0VDVElPTicsIFRydWUpCiAgICBzcmNtYWludGFpbmVyICA9IGQu
Z2V0VmFyKCdNQUlOVEFJTkVSJywgVHJ1ZSkKICAgIHNyY2hvbWVwYWdlICAgID0gZC5nZXRWYXIo
J0hPTUVQQUdFJywgVHJ1ZSkKICAgIHNyY2Rlc2NyaXB0aW9uID0gZC5nZXRWYXIoJ0RFU0NSSVBU
SU9OJywgVHJ1ZSkgb3IgIi4iCgogICAgc3JjZGVwZW5kcyAgICAgPSBzdHJpcF9tdWx0aWxpYl9k
ZXBzKGQuZ2V0VmFyKCdERVBFTkRTJywgVHJ1ZSksIGQpCiAgICBzcmNyZGVwZW5kcyAgICA9IFtd
CiAgICBzcmNycmVjb21tZW5kcyA9IFtdCiAgICBzcmNyc3VnZ2VzdHMgICA9IFtdCiAgICBzcmNy
cHJvdmlkZXMgICA9IFtdCiAgICBzcmNycmVwbGFjZXMgICA9IFtdCiAgICBzcmNyY29uZmxpY3Rz
ICA9IFtdCiAgICBzcmNyb2Jzb2xldGVzICA9IFtdCgogICAgc3JjcHJlaW5zdCAgPSBbXQogICAg
c3JjcG9zdGluc3QgPSBbXQogICAgc3JjcHJlcm0gICAgPSBbXQogICAgc3JjcG9zdHJtICAgPSBb
XQoKICAgIHNwZWNfcHJlYW1ibGVfdG9wID0gW10KICAgIHNwZWNfcHJlYW1ibGVfYm90dG9tID0g
W10KCiAgICBzcGVjX3NjcmlwdGxldHNfdG9wID0gW10KICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0
b20gPSBbXQoKICAgIHNwZWNfZmlsZXNfdG9wID0gW10KICAgIHNwZWNfZmlsZXNfYm90dG9tID0g
W10KCiAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CiAgICAgICAgbG9jYWxkYXRhID0g
YmIuZGF0YS5jcmVhdGVDb3B5KGQpCgogICAgICAgIHJvb3QgPSAiJXMvJXMiICUgKHBrZ2Rlc3Qs
IHBrZykKCiAgICAgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZShyb290ICsgIi5sb2NrIikKCiAg
ICAgICAgbG9jYWxkYXRhLnNldFZhcignUk9PVCcsICcnKQogICAgICAgIGxvY2FsZGF0YS5zZXRW
YXIoJ1JPT1RfJXMnICUgcGtnLCByb290KQogICAgICAgIHBrZ25hbWUgPSBsb2NhbGRhdGEuZ2V0
VmFyKCdQS0dfJXMnICUgcGtnLCBUcnVlKQogICAgICAgIGlmIG5vdCBwa2duYW1lOgogICAgICAg
ICAgICBwa2duYW1lID0gcGtnCiAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUEtHJywgcGtnbmFt
ZSkKCiAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgcGtnKQoKICAgICAgICBi
Yi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKCiAgICAgICAgY29uZmZpbGVzID0gKGxvY2Fs
ZGF0YS5nZXRWYXIoJ0NPTkZGSUxFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpCgogICAgICAgIHNw
bGl0bmFtZSAgICA9IHN0cmlwX211bHRpbGliKHBrZ25hbWUsIGQpCgogICAgICAgIHNwbGl0c3Vt
bWFyeSA9IChsb2NhbGRhdGEuZ2V0VmFyKCdTVU1NQVJZJywgVHJ1ZSkgb3IgbG9jYWxkYXRhLmdl
dFZhcignREVTQ1JJUFRJT04nLCBUcnVlKSBvciAiLiIpCiAgICAgICAgc3BsaXR2ZXJzaW9uID0g
KGxvY2FsZGF0YS5nZXRWYXIoJ1BLR1YnLCBUcnVlKSBvciAiIikucmVwbGFjZSgnLScsICcrJykK
ICAgICAgICBzcGxpdHJlbGVhc2UgPSAobG9jYWxkYXRhLmdldFZhcignUEtHUicsIFRydWUpIG9y
ICIiKQogICAgICAgIHNwbGl0ZXBvY2ggICA9IChsb2NhbGRhdGEuZ2V0VmFyKCdQS0dFJywgVHJ1
ZSkgb3IgIiIpCiAgICAgICAgc3BsaXRsaWNlbnNlID0gKGxvY2FsZGF0YS5nZXRWYXIoJ0xJQ0VO
U0UnLCBUcnVlKSBvciAiIikKICAgICAgICBzcGxpdHNlY3Rpb24gPSAobG9jYWxkYXRhLmdldFZh
cignU0VDVElPTicsIFRydWUpIG9yICIiKQogICAgICAgIHNwbGl0ZGVzY3JpcHRpb24gPSAobG9j
YWxkYXRhLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKSBvciAiLiIpCgogICAgICAgIHRyYW5z
bGF0ZV92ZXJzKCdSREVQRU5EUycsIGxvY2FsZGF0YSkKICAgICAgICB0cmFuc2xhdGVfdmVycygn
UlJFQ09NTUVORFMnLCBsb2NhbGRhdGEpCiAgICAgICAgdHJhbnNsYXRlX3ZlcnMoJ1JTVUdHRVNU
UycsIGxvY2FsZGF0YSkKICAgICAgICB0cmFuc2xhdGVfdmVycygnUlBST1ZJREVTJywgbG9jYWxk
YXRhKQogICAgICAgIHRyYW5zbGF0ZV92ZXJzKCdSUkVQTEFDRVMnLCBsb2NhbGRhdGEpCiAgICAg
ICAgdHJhbnNsYXRlX3ZlcnMoJ1JDT05GTElDVFMnLCBsb2NhbGRhdGEpCgogICAgICAgICMgTWFw
IHRoZSBkZXBlbmRlbmNpZXMgaW50byB0aGVpciBmaW5hbCBmb3JtCiAgICAgICAgbWFwcGluZ19y
ZW5hbWVfaG9vayhsb2NhbGRhdGEpCgogICAgICAgIHNwbGl0cmRlcGVuZHMgICAgPSBzdHJpcF9t
dWx0aWxpYl9kZXBzKGxvY2FsZGF0YS5nZXRWYXIoJ1JERVBFTkRTJywgVHJ1ZSksIGQpCiAgICAg
ICAgc3BsaXRycmVjb21tZW5kcyA9IHN0cmlwX211bHRpbGliX2RlcHMobG9jYWxkYXRhLmdldFZh
cignUlJFQ09NTUVORFMnLCBUcnVlKSwgZCkKICAgICAgICBzcGxpdHJzdWdnZXN0cyAgID0gc3Ry
aXBfbXVsdGlsaWJfZGVwcyhsb2NhbGRhdGEuZ2V0VmFyKCdSU1VHR0VTVFMnLCBUcnVlKSwgZCkK
ICAgICAgICBzcGxpdHJwcm92aWRlcyAgID0gc3RyaXBfbXVsdGlsaWJfZGVwcyhsb2NhbGRhdGEu
Z2V0VmFyKCdSUFJPVklERVMnLCBUcnVlKSwgZCkKICAgICAgICBzcGxpdHJyZXBsYWNlcyAgID0g
c3RyaXBfbXVsdGlsaWJfZGVwcyhsb2NhbGRhdGEuZ2V0VmFyKCdSUkVQTEFDRVMnLCBUcnVlKSwg
ZCkKICAgICAgICBzcGxpdHJjb25mbGljdHMgID0gc3RyaXBfbXVsdGlsaWJfZGVwcyhsb2NhbGRh
dGEuZ2V0VmFyKCdSQ09ORkxJQ1RTJywgVHJ1ZSksIGQpCiAgICAgICAgc3BsaXRyb2Jzb2xldGVz
ICA9IFtdCgogICAgICAgICMgR2F0aGVyIHNwZWNpYWwgc3JjL2ZpcnN0IHBhY2thZ2UgZGF0YQog
ICAgICAgIGlmIHNyY25hbWUgPT0gc3BsaXRuYW1lOgogICAgICAgICAgICBzcmNyZGVwZW5kcyAg
ICA9IHNwbGl0cmRlcGVuZHMKICAgICAgICAgICAgc3JjcnJlY29tbWVuZHMgPSBzcGxpdHJyZWNv
bW1lbmRzCiAgICAgICAgICAgIHNyY3JzdWdnZXN0cyAgID0gc3BsaXRyc3VnZ2VzdHMKICAgICAg
ICAgICAgc3JjcnByb3ZpZGVzICAgPSBzcGxpdHJwcm92aWRlcwogICAgICAgICAgICBzcmNycmVw
bGFjZXMgICA9IHNwbGl0cnJlcGxhY2VzCiAgICAgICAgICAgIHNyY3Jjb25mbGljdHMgID0gc3Bs
aXRyY29uZmxpY3RzCgogICAgICAgICAgICBzcmNwcmVpbnN0ICA9IGxvY2FsZGF0YS5nZXRWYXIo
J3BrZ19wcmVpbnN0JywgVHJ1ZSkKICAgICAgICAgICAgc3JjcG9zdGluc3QgPSBsb2NhbGRhdGEu
Z2V0VmFyKCdwa2dfcG9zdGluc3QnLCBUcnVlKQogICAgICAgICAgICBzcmNwcmVybSAgICA9IGxv
Y2FsZGF0YS5nZXRWYXIoJ3BrZ19wcmVybScsIFRydWUpCiAgICAgICAgICAgIHNyY3Bvc3RybSAg
ID0gbG9jYWxkYXRhLmdldFZhcigncGtnX3Bvc3RybScsIFRydWUpCgogICAgICAgICAgICBmaWxl
X2xpc3QgPSBbXQogICAgICAgICAgICB3YWxrX2ZpbGVzKHJvb3QsIGZpbGVfbGlzdCwgY29uZmZp
bGVzKQogICAgICAgICAgICBpZiBub3QgZmlsZV9saXN0IGFuZCBsb2NhbGRhdGEuZ2V0VmFyKCdB
TExPV19FTVBUWScpICE9ICIxIjoKICAgICAgICAgICAgICAgIGJiLm5vdGUoIk5vdCBjcmVhdGlu
ZyBlbXB0eSBSUE0gcGFja2FnZSBmb3IgJXMiICUgc3BsaXRuYW1lKQogICAgICAgICAgICBlbHNl
OgogICAgICAgICAgICAgICAgYmIubm90ZSgiQ3JlYXRpbmcgUlBNIHBhY2thZ2UgZm9yICVzIiAl
IHNwbGl0bmFtZSkKICAgICAgICAgICAgICAgIHNwZWNfZmlsZXNfdG9wLmFwcGVuZCgnJWZpbGVz
JykKICAgICAgICAgICAgICAgIHNwZWNfZmlsZXNfdG9wLmFwcGVuZCgnJWRlZmF0dHIoLSwtLC0s
LSknKQogICAgICAgICAgICAgICAgaWYgZmlsZV9saXN0OgogICAgICAgICAgICAgICAgICAgIGJi
Lm5vdGUoIkNyZWF0aW5nIFJQTSBwYWNrYWdlIGZvciAlcyIgJSBzcGxpdG5hbWUpCiAgICAgICAg
ICAgICAgICAgICAgc3BlY19maWxlc190b3AuZXh0ZW5kKGZpbGVfbGlzdCkKICAgICAgICAgICAg
ICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiQ3JlYXRpbmcgRU1QVFkgUlBN
IFBhY2thZ2UgZm9yICVzIiAlIHNwbGl0bmFtZSkKICAgICAgICAgICAgICAgIHNwZWNfZmlsZXNf
dG9wLmFwcGVuZCgnJykKCiAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCiAgICAg
ICAgICAgIGNvbnRpbnVlCgogICAgICAgICMgUHJvY2VzcyBzdWJwYWNrYWdlIGRhdGEKICAgICAg
ICBzcGVjX3ByZWFtYmxlX2JvdHRvbS5hcHBlbmQoJyUlcGFja2FnZSAtbiAlcycgJSBzcGxpdG5h
bWUpCiAgICAgICAgc3BlY19wcmVhbWJsZV9ib3R0b20uYXBwZW5kKCdTdW1tYXJ5OiAlcycgJSBz
cGxpdHN1bW1hcnkpCiAgICAgICAgaWYgc3JjdmVyc2lvbiAhPSBzcGxpdHZlcnNpb246CiAgICAg
ICAgICAgIHNwZWNfcHJlYW1ibGVfYm90dG9tLmFwcGVuZCgnVmVyc2lvbjogJXMnICUgc3BsaXR2
ZXJzaW9uKQogICAgICAgIGlmIHNyY3JlbGVhc2UgIT0gc3BsaXRyZWxlYXNlOgogICAgICAgICAg
ICBzcGVjX3ByZWFtYmxlX2JvdHRvbS5hcHBlbmQoJ1JlbGVhc2U6ICVzJyAlIHNwbGl0cmVsZWFz
ZSkKICAgICAgICBpZiBzcmNlcG9jaCAhPSBzcGxpdGVwb2NoOgogICAgICAgICAgICBzcGVjX3By
ZWFtYmxlX2JvdHRvbS5hcHBlbmQoJ0Vwb2NoOiAlcycgJSBzcGxpdGVwb2NoKQogICAgICAgIGlm
IHNyY2xpY2Vuc2UgIT0gc3BsaXRsaWNlbnNlOgogICAgICAgICAgICBzcGVjX3ByZWFtYmxlX2Jv
dHRvbS5hcHBlbmQoJ0xpY2Vuc2U6ICVzJyAlIHNwbGl0bGljZW5zZSkKICAgICAgICBzcGVjX3By
ZWFtYmxlX2JvdHRvbS5hcHBlbmQoJ0dyb3VwOiAlcycgJSBzcGxpdHNlY3Rpb24pCgogICAgICAg
ICMgUmVwbGFjZXMgPT0gT2Jzb2xldGVzICYmIFByb3ZpZGVzCiAgICAgICAgcm9ic29sZXRlcyA9
IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihzcGxpdHJvYnNvbGV0ZXMgb3IgIiIpCiAg
ICAgICAgcnByb3ZpZGVzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKHNwbGl0cnBy
b3ZpZGVzIG9yICIiKQogICAgICAgIHJyZXBsYWNlcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3Zl
cnNpb25zMihzcGxpdHJyZXBsYWNlcyBvciAiIikKICAgICAgICBmb3IgZGVwIGluIHJyZXBsYWNl
czoKICAgICAgICAgICAgaWYgbm90IGRlcCBpbiByb2Jzb2xldGVzOgogICAgICAgICAgICAgICAg
cm9ic29sZXRlc1tkZXBdID0gcnJlcGxhY2VzW2RlcF0KICAgICAgICAgICAgaWYgbm90IGRlcCBp
biBycHJvdmlkZXM6CiAgICAgICAgICAgICAgICBycHJvdmlkZXNbZGVwXSA9IHJyZXBsYWNlc1tk
ZXBdCiAgICAgICAgc3BsaXRyb2Jzb2xldGVzID0gYmIudXRpbHMuam9pbl9kZXBzKHJvYnNvbGV0
ZXMsIGNvbW1hc2VwPUZhbHNlKQogICAgICAgIHNwbGl0cnByb3ZpZGVzID0gYmIudXRpbHMuam9p
bl9kZXBzKHJwcm92aWRlcywgY29tbWFzZXA9RmFsc2UpCgogICAgICAgIHByaW50X2RlcHMoc3Bs
aXRyZGVwZW5kcywgIlJlcXVpcmVzIiwgc3BlY19wcmVhbWJsZV9ib3R0b20sIGQpCiAgICAgICAg
IyBTdWdnZXN0cyBpbiBSUE0gYXJlIGxpa2UgcmVjb21tZW5kcyBpbiBPRS1jb3JlIQogICAgICAg
IHByaW50X2RlcHMoc3BsaXRycmVjb21tZW5kcywgIlN1Z2dlc3RzIiwgc3BlY19wcmVhbWJsZV9i
b3R0b20sIGQpCiAgICAgICAgIyBXaGlsZSB0aGVyZSBpcyBubyBhbmFsb2cgZm9yIHN1Z2dlc3Rz
Li4uIChTbyBjYWxsIHRoZW0gcmVjb21tZW5kcyBmb3Igbm93KQogICAgICAgIHByaW50X2RlcHMo
c3BsaXRyc3VnZ2VzdHMsICAiUmVjb21tZW5kcyIsIHNwZWNfcHJlYW1ibGVfYm90dG9tLCBkKQog
ICAgICAgIHByaW50X2RlcHMoc3BsaXRycHJvdmlkZXMsICAiUHJvdmlkZXMiLCBzcGVjX3ByZWFt
YmxlX2JvdHRvbSwgZCkKICAgICAgICBwcmludF9kZXBzKHNwbGl0cm9ic29sZXRlcywgIk9ic29s
ZXRlcyIsIHNwZWNfcHJlYW1ibGVfYm90dG9tLCBkKQoKICAgICAgICAjIGNvbmZsaWN0cyBjYW4g
bm90IGJlIGluIGEgcHJvdmlkZSEgIFdlIHdpbGwgbmVlZCB0byBmaWx0ZXIgaXQuCiAgICAgICAg
aWYgc3BsaXRyY29uZmxpY3RzOgogICAgICAgICAgICBkZXBlbmRzX2RpY3QgPSBiYi51dGlscy5l
eHBsb2RlX2RlcF92ZXJzaW9uczIoc3BsaXRyY29uZmxpY3RzKQogICAgICAgICAgICBuZXdkZXBz
X2RpY3QgPSB7fQogICAgICAgICAgICBmb3IgZGVwIGluIGRlcGVuZHNfZGljdDoKICAgICAgICAg
ICAgICAgIGlmIGRlcCBub3QgaW4gc3BsaXRycHJvdmlkZXM6CiAgICAgICAgICAgICAgICAgICAg
bmV3ZGVwc19kaWN0W2RlcF0gPSBkZXBlbmRzX2RpY3RbZGVwXQogICAgICAgICAgICBpZiBuZXdk
ZXBzX2RpY3Q6CiAgICAgICAgICAgICAgICBzcGxpdHJjb25mbGljdHMgPSBiYi51dGlscy5qb2lu
X2RlcHMobmV3ZGVwc19kaWN0KQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgc3Bs
aXRyY29uZmxpY3RzID0gIiIKCiAgICAgICAgcHJpbnRfZGVwcyhzcGxpdHJjb25mbGljdHMsICAi
Q29uZmxpY3RzIiwgc3BlY19wcmVhbWJsZV9ib3R0b20sIGQpCgogICAgICAgIHNwZWNfcHJlYW1i
bGVfYm90dG9tLmFwcGVuZCgnJykKCiAgICAgICAgc3BlY19wcmVhbWJsZV9ib3R0b20uYXBwZW5k
KCclJWRlc2NyaXB0aW9uIC1uICVzJyAlIHNwbGl0bmFtZSkKICAgICAgICBkZWRlbnRfdGV4dCA9
IHRleHR3cmFwLmRlZGVudChzcGxpdGRlc2NyaXB0aW9uKS5zdHJpcCgpCiAgICAgICAgc3BlY19w
cmVhbWJsZV9ib3R0b20uYXBwZW5kKCclcycgJSB0ZXh0d3JhcC5maWxsKGRlZGVudF90ZXh0LCB3
aWR0aD03NSkpCgogICAgICAgIHNwZWNfcHJlYW1ibGVfYm90dG9tLmFwcGVuZCgnJykKCiAgICAg
ICAgIyBOb3cgcHJvY2VzcyBzY3JpcHRsZXRzCiAgICAgICAgZm9yIHNjcmlwdCBpbiBbInByZWlu
c3QiLCAicG9zdGluc3QiLCAicHJlcm0iLCAicG9zdHJtIl06CiAgICAgICAgICAgIHNjcmlwdHZh
ciA9IGxvY2FsZGF0YS5nZXRWYXIoJ3BrZ18lcycgJSBzY3JpcHQsIFRydWUpCiAgICAgICAgICAg
IGlmIG5vdCBzY3JpcHR2YXI6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBp
ZiBzY3JpcHQgPT0gJ3ByZWluc3QnOgogICAgICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2Jv
dHRvbS5hcHBlbmQoJyUlcHJlIC1uICVzJyAlIHNwbGl0bmFtZSkKICAgICAgICAgICAgZWxpZiBz
Y3JpcHQgPT0gJ3Bvc3RpbnN0JzoKICAgICAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0
b20uYXBwZW5kKCclJXBvc3QgLW4gJXMnICUgc3BsaXRuYW1lKQogICAgICAgICAgICBlbGlmIHNj
cmlwdCA9PSAncHJlcm0nOgogICAgICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5h
cHBlbmQoJyUlcHJldW4gLW4gJXMnICUgc3BsaXRuYW1lKQogICAgICAgICAgICAgICAgc2NyaXB0
dmFyID0gd3JhcF91bmluc3RhbGwoc2NyaXB0dmFyKQogICAgICAgICAgICBlbGlmIHNjcmlwdCA9
PSAncG9zdHJtJzoKICAgICAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5k
KCclJXBvc3R1biAtbiAlcycgJSBzcGxpdG5hbWUpCiAgICAgICAgICAgICAgICBzY3JpcHR2YXIg
PSB3cmFwX3VuaW5zdGFsbChzY3JpcHR2YXIpCiAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19i
b3R0b20uYXBwZW5kKCcjICVzIC0gJXMnICUgKHNwbGl0bmFtZSwgc2NyaXB0KSkKICAgICAgICAg
ICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoc2NyaXB0dmFyKQogICAgICAgICAgICBz
cGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZCgnJykKCiAgICAgICAgIyBOb3cgcHJvY2VzcyBm
aWxlcwogICAgICAgIGZpbGVfbGlzdCA9IFtdCiAgICAgICAgd2Fsa19maWxlcyhyb290LCBmaWxl
X2xpc3QsIGNvbmZmaWxlcykKICAgICAgICBpZiBub3QgZmlsZV9saXN0IGFuZCBsb2NhbGRhdGEu
Z2V0VmFyKCdBTExPV19FTVBUWScpICE9ICIxIjoKICAgICAgICAgICAgYmIubm90ZSgiTm90IGNy
ZWF0aW5nIGVtcHR5IFJQTSBwYWNrYWdlIGZvciAlcyIgJSBzcGxpdG5hbWUpCiAgICAgICAgZWxz
ZToKICAgICAgICAgICAgc3BlY19maWxlc19ib3R0b20uYXBwZW5kKCclJWZpbGVzIC1uICVzJyAl
IHNwbGl0bmFtZSkKICAgICAgICAgICAgc3BlY19maWxlc19ib3R0b20uYXBwZW5kKCclZGVmYXR0
cigtLC0sLSwtKScpCiAgICAgICAgICAgIGlmIGZpbGVfbGlzdDoKICAgICAgICAgICAgICAgIGJi
Lm5vdGUoIkNyZWF0aW5nIFJQTSBwYWNrYWdlIGZvciAlcyIgJSBzcGxpdG5hbWUpCiAgICAgICAg
ICAgICAgICBzcGVjX2ZpbGVzX2JvdHRvbS5leHRlbmQoZmlsZV9saXN0KQogICAgICAgICAgICBl
bHNlOgogICAgICAgICAgICAgICAgYmIubm90ZSgiQ3JlYXRpbmcgRU1QVFkgUlBNIFBhY2thZ2Ug
Zm9yICVzIiAlIHNwbGl0bmFtZSkKICAgICAgICAgICAgc3BlY19maWxlc19ib3R0b20uYXBwZW5k
KCcnKQoKICAgICAgICBkZWwgbG9jYWxkYXRhCiAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShs
ZikKCiAgICBhZGRfcHJlcChkLHNwZWNfZmlsZXNfYm90dG9tKQogICAgc3BlY19wcmVhbWJsZV90
b3AuYXBwZW5kKCdTdW1tYXJ5OiAlcycgJSBzcmNzdW1tYXJ5KQogICAgc3BlY19wcmVhbWJsZV90
b3AuYXBwZW5kKCdOYW1lOiAlcycgJSBzcmNuYW1lKQogICAgc3BlY19wcmVhbWJsZV90b3AuYXBw
ZW5kKCdWZXJzaW9uOiAlcycgJSBzcmN2ZXJzaW9uKQogICAgc3BlY19wcmVhbWJsZV90b3AuYXBw
ZW5kKCdSZWxlYXNlOiAlcycgJSBzcmNyZWxlYXNlKQogICAgaWYgc3JjZXBvY2ggYW5kIHNyY2Vw
b2NoLnN0cmlwKCkgIT0gIiI6CiAgICAgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCdFcG9j
aDogJXMnICUgc3JjZXBvY2gpCiAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJ0xpY2Vuc2U6
ICVzJyAlIHNyY2xpY2Vuc2UpCiAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJ0dyb3VwOiAl
cycgJSBzcmNzZWN0aW9uKQogICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCdQYWNrYWdlcjog
JXMnICUgc3JjbWFpbnRhaW5lcikKICAgIHNwZWNfcHJlYW1ibGVfdG9wLmFwcGVuZCgnVVJMOiAl
cycgJSBzcmNob21lcGFnZSkKICAgIHRhaWxfc291cmNlKGQpCgogICAgIyBSZXBsYWNlcyA9PSBP
YnNvbGV0ZXMgJiYgUHJvdmlkZXMKICAgIHJvYnNvbGV0ZXMgPSBiYi51dGlscy5leHBsb2RlX2Rl
cF92ZXJzaW9uczIoc3Jjcm9ic29sZXRlcyBvciAiIikKICAgIHJwcm92aWRlcyA9IGJiLnV0aWxz
LmV4cGxvZGVfZGVwX3ZlcnNpb25zMihzcmNycHJvdmlkZXMgb3IgIiIpCiAgICBycmVwbGFjZXMg
PSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoc3JjcnJlcGxhY2VzIG9yICIiKQogICAg
Zm9yIGRlcCBpbiBycmVwbGFjZXM6CiAgICAgICAgaWYgbm90IGRlcCBpbiByb2Jzb2xldGVzOgog
ICAgICAgICAgICByb2Jzb2xldGVzW2RlcF0gPSBycmVwbGFjZXNbZGVwXQogICAgICAgIGlmIG5v
dCBkZXAgaW4gcnByb3ZpZGVzOgogICAgICAgICAgICBycHJvdmlkZXNbZGVwXSA9IHJyZXBsYWNl
c1tkZXBdCiAgICBzcmNyb2Jzb2xldGVzID0gYmIudXRpbHMuam9pbl9kZXBzKHJvYnNvbGV0ZXMs
IGNvbW1hc2VwPUZhbHNlKQogICAgc3JjcnByb3ZpZGVzID0gYmIudXRpbHMuam9pbl9kZXBzKHJw
cm92aWRlcywgY29tbWFzZXA9RmFsc2UpCgogICAgcHJpbnRfZGVwcyhzcmNkZXBlbmRzLCAiQnVp
bGRSZXF1aXJlcyIsIHNwZWNfcHJlYW1ibGVfdG9wLCBkKQogICAgcHJpbnRfZGVwcyhzcmNyZGVw
ZW5kcywgIlJlcXVpcmVzIiwgc3BlY19wcmVhbWJsZV90b3AsIGQpCiAgICAjIFN1Z2dlc3RzIGlu
IFJQTSBhcmUgbGlrZSByZWNvbW1lbmRzIGluIE9FLWNvcmUhCiAgICBwcmludF9kZXBzKHNyY3Jy
ZWNvbW1lbmRzLCAiU3VnZ2VzdHMiLCBzcGVjX3ByZWFtYmxlX3RvcCwgZCkKICAgICMgV2hpbGUg
dGhlcmUgaXMgbm8gYW5hbG9nIGZvciBzdWdnZXN0cy4uLiAoU28gY2FsbCB0aGVtIHJlY29tbWVu
ZHMgZm9yIG5vdykKICAgIHByaW50X2RlcHMoc3JjcnN1Z2dlc3RzLCAiUmVjb21tZW5kcyIsIHNw
ZWNfcHJlYW1ibGVfdG9wLCBkKQogICAgcHJpbnRfZGVwcyhzcmNycHJvdmlkZXMsICJQcm92aWRl
cyIsIHNwZWNfcHJlYW1ibGVfdG9wLCBkKQogICAgcHJpbnRfZGVwcyhzcmNyb2Jzb2xldGVzLCAi
T2Jzb2xldGVzIiwgc3BlY19wcmVhbWJsZV90b3AsIGQpCgogICAgIyBjb25mbGljdHMgY2FuIG5v
dCBiZSBpbiBhIHByb3ZpZGUhICBXZSB3aWxsIG5lZWQgdG8gZmlsdGVyIGl0LgogICAgaWYgc3Jj
cmNvbmZsaWN0czoKICAgICAgICBkZXBlbmRzX2RpY3QgPSBiYi51dGlscy5leHBsb2RlX2RlcF92
ZXJzaW9uczIoc3JjcmNvbmZsaWN0cykKICAgICAgICBuZXdkZXBzX2RpY3QgPSB7fQogICAgICAg
IGZvciBkZXAgaW4gZGVwZW5kc19kaWN0OgogICAgICAgICAgICBpZiBkZXAgbm90IGluIHNyY3Jw
cm92aWRlczoKICAgICAgICAgICAgICAgIG5ld2RlcHNfZGljdFtkZXBdID0gZGVwZW5kc19kaWN0
W2RlcF0KICAgICAgICBpZiBuZXdkZXBzX2RpY3Q6CiAgICAgICAgICAgIHNyY3Jjb25mbGljdHMg
PSBiYi51dGlscy5qb2luX2RlcHMobmV3ZGVwc19kaWN0KQogICAgICAgIGVsc2U6CiAgICAgICAg
ICAgIHNyY3Jjb25mbGljdHMgPSAiIgoKICAgIHByaW50X2RlcHMoc3JjcmNvbmZsaWN0cywgIkNv
bmZsaWN0cyIsIHNwZWNfcHJlYW1ibGVfdG9wLCBkKQoKICAgIHNwZWNfcHJlYW1ibGVfdG9wLmFw
cGVuZCgnJykKCiAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJyVkZXNjcmlwdGlvbicpCiAg
ICBkZWRlbnRfdGV4dCA9IHRleHR3cmFwLmRlZGVudChzcmNkZXNjcmlwdGlvbikuc3RyaXAoKQog
ICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCclcycgJSB0ZXh0d3JhcC5maWxsKGRlZGVudF90
ZXh0LCB3aWR0aD03NSkpCgogICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCcnKQoKICAgIGlm
IHNyY3ByZWluc3Q6CiAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJyVwcmUnKQog
ICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKCcjICVzIC0gcHJlaW5zdCcgJSBzcmNu
YW1lKQogICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKHNyY3ByZWluc3QpCiAgICAg
ICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJycpCiAgICBpZiBzcmNwb3N0aW5zdDoKICAg
ICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZCgnJXBvc3QnKQogICAgICAgIHNwZWNfc2Ny
aXB0bGV0c190b3AuYXBwZW5kKCcjICVzIC0gcG9zdGluc3QnICUgc3JjbmFtZSkKICAgICAgICBz
cGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZChzcmNwb3N0aW5zdCkKICAgICAgICBzcGVjX3Njcmlw
dGxldHNfdG9wLmFwcGVuZCgnJykKICAgIGlmIHNyY3ByZXJtOgogICAgICAgIHNwZWNfc2NyaXB0
bGV0c190b3AuYXBwZW5kKCclcHJldW4nKQogICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBw
ZW5kKCcjICVzIC0gcHJlcm0nICUgc3JjbmFtZSkKICAgICAgICBzY3JpcHR2YXIgPSB3cmFwX3Vu
aW5zdGFsbChzcmNwcmVybSkKICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZChzY3Jp
cHR2YXIpCiAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJycpCiAgICBpZiBzcmNw
b3N0cm06CiAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJyVwb3N0dW4nKQogICAg
ICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKCcjICVzIC0gcG9zdHJtJyAlIHNyY25hbWUp
CiAgICAgICAgc2NyaXB0dmFyID0gd3JhcF91bmluc3RhbGwoc3JjcG9zdHJtKQogICAgICAgIHNw
ZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKHNjcmlwdHZhcikKICAgICAgICBzcGVjX3NjcmlwdGxl
dHNfdG9wLmFwcGVuZCgnJykKCiAgICAjIFdyaXRlIHRoZSBTUEVDIGZpbGUKICAgIHRyeToKICAg
ICAgICBmcm9tIF9fYnVpbHRpbl9fIGltcG9ydCBmaWxlCiAgICAgICAgc3BlY2ZpbGUgPSBmaWxl
KG91dHNwZWNmaWxlLCAndycpCiAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICByYWlzZSBiYi5i
dWlsZC5GdW5jRmFpbGVkKCJ1bmFibGUgdG8gb3BlbiBzcGVjIGZpbGUgZm9yIHdyaXRpbmcuIikK
CiAgICAjIFJQTVNQRUNfUFJFQU1CTEUgaXMgYSB3YXkgdG8gYWRkIGFyYml0cmFyeSB0ZXh0IHRv
IHRoZSB0b3AKICAgICMgb2YgdGhlIGdlbmVyYXRlZCBzcGVjIGZpbGUKICAgIGV4dGVybmFsX3By
ZWFtYmxlID0gZC5nZXRWYXIoIlJQTVNQRUNfUFJFQU1CTEUiLCBUcnVlKQogICAgaWYgZXh0ZXJu
YWxfcHJlYW1ibGU6CiAgICAgICAgc3BlY2ZpbGUud3JpdGUoZXh0ZXJuYWxfcHJlYW1ibGUgKyAi
XG4iKQoKICAgIGZvciBsaW5lIGluIHNwZWNfcHJlYW1ibGVfdG9wOgogICAgICAgIHNwZWNmaWxl
LndyaXRlKGxpbmUgKyAiXG4iKQoKICAgIGZvciBsaW5lIGluIHNwZWNfcHJlYW1ibGVfYm90dG9t
OgogICAgICAgIHNwZWNmaWxlLndyaXRlKGxpbmUgKyAiXG4iKQoKICAgIGZvciBsaW5lIGluIHNw
ZWNfc2NyaXB0bGV0c190b3A6CiAgICAgICAgc3BlY2ZpbGUud3JpdGUobGluZSArICJcbiIpCgog
ICAgZm9yIGxpbmUgaW4gc3BlY19zY3JpcHRsZXRzX2JvdHRvbToKICAgICAgICBzcGVjZmlsZS53
cml0ZShsaW5lICsgIlxuIikKCiAgICBmb3IgbGluZSBpbiBzcGVjX2ZpbGVzX3RvcDoKICAgICAg
ICBzcGVjZmlsZS53cml0ZShsaW5lICsgIlxuIikKCiAgICBmb3IgbGluZSBpbiBzcGVjX2ZpbGVz
X2JvdHRvbToKICAgICAgICBzcGVjZmlsZS53cml0ZShsaW5lICsgIlxuIikKCiAgICBzcGVjZmls
ZS5jbG9zZSgpCn0KCgpweXRob24gYmFzZV9nZXRfbWV0YWRhdGFfZ2l0X2JyYW5jaCAoKSB7CmRl
ZiBiYXNlX2dldF9tZXRhZGF0YV9naXRfYnJhbmNoKHBhdGgsIGQpOgogICAgYnJhbmNoID0gb3Mu
cG9wZW4oJ2NkICVzOyBnaXQgYnJhbmNoIDI+JjEgfCBncmVwICJeKiAiIHwgdHIgLWQgIiogIicg
JSBwYXRoKS5yZWFkKCkKCiAgICBpZiBsZW4oYnJhbmNoKSAhPSAwOgogICAgICAgIHJldHVybiBi
cmFuY2gKICAgIHJldHVybiAiPHVua25vd24+Igp9CgoKcHl0aG9uIGNoZWNrX3Nhbml0eV9ldmVu
dGhhbmRsZXIgKCkgewogICAgaWYgYmIuZXZlbnQuZ2V0TmFtZShlKSA9PSAiQ29uZmlnUGFyc2Vk
IiBhbmQgZS5kYXRhLmdldFZhcigiQkJfV09SS0VSQ09OVEVYVCIsIFRydWUpICE9ICIxIiBhbmQg
ZS5kYXRhLmdldFZhcigiRElTQUJMRV9TQU5JVFlfQ0hFQ0tTIiwgVHJ1ZSkgIT0gIjEiOgogICAg
ICAgIHNhbml0eV9kYXRhID0gY29weV9kYXRhKGUpCiAgICAgICAgY2hlY2tfc2FuaXR5KHNhbml0
eV9kYXRhKQogICAgZWxpZiBiYi5ldmVudC5nZXROYW1lKGUpID09ICJTYW5pdHlDaGVjayI6CiAg
ICAgICAgc2FuaXR5X2RhdGEgPSBjb3B5X2RhdGEoZSkKICAgICAgICBzYW5pdHlfZGF0YS5zZXRW
YXIoIlNBTklUWV9VU0VfRVZFTlRTIiwgIjEiKQogICAgICAgIGNoZWNrX3Nhbml0eShzYW5pdHlf
ZGF0YSkKICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LlNhbml0eUNoZWNrUGFzc2VkKCks
IGUuZGF0YSkKCiAgICByZXR1cm4KfQoKCnB5dGhvbiBwZXJmb3JtX3BhY2thZ2Vjb3B5ICgpIHsK
ICAgIGltcG9ydCBzdWJwcm9jZXNzCiAgICBkZXN0ID0gZC5nZXRWYXIoJ0QnLCBUcnVlKQogICAg
ZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKCiAgICBiYi5ta2RpcmhpZXIoZHZhcikKCiAg
ICAjIFN0YXJ0IGJ5IHBhY2thZ2UgcG9wdWxhdGlvbiBieSB0YWtpbmcgYSBjb3B5IG9mIHRoZSBp
bnN0YWxsZWQKICAgICMgZmlsZXMgdG8gb3BlcmF0ZSBvbgogICAgc3VicHJvY2Vzcy5jYWxsKCdy
bSAtcmYgJXMvKicgJSAoZHZhciksIHNoZWxsPVRydWUpCiAgICAjIFByZXNlcnZlIHNwYXJzZSBm
aWxlcyBhbmQgaGFyZCBsaW5rcwogICAgc3VicHJvY2Vzcy5jYWxsKCd0YXIgLWNmIC0gLUMgJXMg
LXBzIC4gfCB0YXIgLXhmIC0gLUMgJXMnICUgKGRlc3QsIGR2YXIpLCBzaGVsbD1UcnVlKQoKICAg
ICMgcmVwbGFjZSBSUEFUSHMgZm9yIHRoZSBuYXRpdmVzZGsgYmluYXJpZXMsIHRvIG1ha2UgdGhl
bSByZWxvY2F0YWJsZQogICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywg
ZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MtY2FuYWRpYW4nLCBkKToKICAgICAg
ICBycGF0aF9yZXBsYWNlIChkdmFyLCBkKQp9CgoKcHl0aG9uIHNzdGF0ZV90YXNrX3Bvc3RmdW5j
ICgpIHsKICAgIHNoYXJlZF9zdGF0ZSA9IHNzdGF0ZV9zdGF0ZV9mcm9tdmFycyhkKQogICAgc3N0
YXRlX2luc3RhbGwoc2hhcmVkX3N0YXRlLCBkKQogICAgZm9yIGludGVyY2VwdCBpbiBzaGFyZWRf
c3RhdGVbJ2ludGVyY2VwdGZ1bmNzJ106CiAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGludGVy
Y2VwdCwgZCkKICAgIHNzdGF0ZV9wYWNrYWdlKHNoYXJlZF9zdGF0ZSwgZCkKfQoKCnB5dGhvbiBi
YXNlX2RldGVjdF9icmFuY2ggKCkgewpkZWYgYmFzZV9kZXRlY3RfYnJhbmNoKGQpOgogICAgcGF0
aCA9IGJhc2VfZ2V0X3NjbWJhc2VwYXRoKGQpCgogICAgc2NtcyA9IFtiYXNlX2dldF9tZXRhZGF0
YV9naXRfYnJhbmNoXQoKICAgIGZvciBzY20gaW4gc2NtczoKICAgICAgICByZXYgPSBzY20ocGF0
aCwgZCkKICAgICAgICBpZiByZXYgPD4gIjx1bmtub3duPiI6CiAgICAgICAgICAgIHJldHVybiBy
ZXYuc3RyaXAoKQoKICAgIHJldHVybiAiPHVua25vd24+Igp9CgoKcHl0aG9uIGRvX2NoZWNrdXJp
ICgpIHsKICAgIHNyY191cmkgPSAoZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKSBvciAiIikuc3Bs
aXQoKQogICAgaWYgbGVuKHNyY191cmkpID09IDA6CiAgICAgICAgcmV0dXJuCgogICAgbG9jYWxk
YXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCiAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2Fs
ZGF0YSkKCiAgICB0cnk6CiAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChzcmNfdXJp
LCBsb2NhbGRhdGEpCiAgICAgICAgZmV0Y2hlci5jaGVja3N0YXR1cygpCiAgICBleGNlcHQgYmIu
ZmV0Y2gyLkJCRmV0Y2hFeGNlcHRpb24sIGU6CiAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0Zh
aWxlZChlKQp9CgoKcHl0aG9uIGlzX21hY2hpbmVfc3BlY2lmaWMgKCkgewpkZWYgaXNfbWFjaGlu
ZV9zcGVjaWZpYyhkKToKICAgICIiIkRldGVybWluZSB3aGV0aGVyIHRoZSBjdXJyZW50IHJlY2lw
ZSBpcyBtYWNoaW5lIHNwZWNpZmljIiIiCiAgICBtYWNoaW5lcGF0aHMgPSBzZXQobWFjaGluZV9w
YXRocyhkKSkKICAgIHNyY3VyaSA9IGQuZ2V0VmFyKCJTUkNfVVJJIiwgVHJ1ZSkuc3BsaXQoKQog
ICAgZm9yIHVybCBpbiBzcmN1cmk6CiAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChb
c3JjdXJpXSwgZCkKICAgICAgICBpZiB1cmwuc3RhcnRzd2l0aCgiZmlsZTovLyIpOgogICAgICAg
ICAgICBpZiBhbnkoZmV0Y2hlci5sb2NhbHBhdGgodXJsKS5zdGFydHN3aXRoKG1wICsgIi8iKSBm
b3IgbXAgaW4gbWFjaGluZXBhdGhzKToKICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCn0KCgpw
eXRob24gc3lzcm9vdF9jaGVja2hhc2hlcyAoKSB7CmRlZiBzeXNyb290X2NoZWNraGFzaGVzKGNv
dmVyZWQsIHRhc2tuYW1lcywgZm5pZHMsIGZucywgZCwgaW52YWxpZHRhc2tzID0gTm9uZSk6CiAg
ICBwcm9ibGVtcyA9IHNldCgpCiAgICBjb25maWd1cmVmbmlkcyA9IHNldCgpCiAgICBpZiBub3Qg
aW52YWxpZHRhc2tzOgogICAgICAgIGludmFsaWR0YXNrcyA9IHhyYW5nZShsZW4odGFza25hbWVz
KSkKICAgIGZvciB0YXNrIGluIGludmFsaWR0YXNrczoKICAgICAgICBpZiB0YXNrbmFtZXNbdGFz
a10gPT0gImRvX2NvbmZpZ3VyZSIgYW5kIHRhc2sgbm90IGluIGNvdmVyZWQ6CiAgICAgICAgICAg
IGNvbmZpZ3VyZWZuaWRzLmFkZChmbmlkc1t0YXNrXSkKICAgIGZvciB0YXNrIGluIGNvdmVyZWQ6
CiAgICAgICAgaWYgdGFza25hbWVzW3Rhc2tdID09ICJkb19wb3B1bGF0ZV9zeXNyb290IiBhbmQg
Zm5pZHNbdGFza10gaW4gY29uZmlndXJlZm5pZHM6CiAgICAgICAgICAgIHByb2JsZW1zLmFkZCh0
YXNrKQogICAgcmV0dXJuIHByb2JsZW1zCn0KCgpweXRob24gb2VfZmlsdGVyX291dCAoKSB7CmRl
ZiBvZV9maWx0ZXJfb3V0KGYsIHN0ciwgZCk6CiAgICByZXR1cm4gb2UudXRpbHMuc3RyX2ZpbHRl
cl9vdXQoZiwgc3RyLCBkKQp9CgoKcHl0aG9uIG9lX3Rlcm1pbmFsICgpIHsKZGVmIG9lX3Rlcm1p
bmFsKGNvbW1hbmQsIHRpdGxlLCBkKToKICAgIGltcG9ydCBvZS5kYXRhCiAgICBpbXBvcnQgb2Uu
dGVybWluYWwKCiAgICBmb3IgZXhwb3J0IGluIG9lLmRhdGEudHlwZWRfdmFsdWUoJ09FX1RFUk1J
TkFMX0VYUE9SVFMnLCBkKToKICAgICAgICB2YWx1ZSA9IGQuZ2V0VmFyKGV4cG9ydCwgVHJ1ZSkK
ICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgb3MuZW52aXJvbltleHBv
cnRdID0gc3RyKHZhbHVlKQoKICAgIHRlcm1pbmFsID0gb2UuZGF0YS50eXBlZF92YWx1ZSgnT0Vf
VEVSTUlOQUwnLCBkKS5sb3dlcigpCiAgICBpZiB0ZXJtaW5hbCA9PSAnbm9uZSc6CiAgICAgICAg
YmIuZmF0YWwoJ0RldnNoZWxsIHVzYWdlIGRpc2FibGVkIHdpdGggT0VfVEVSTUlOQUwnKQogICAg
ZWxpZiB0ZXJtaW5hbCAhPSAnYXV0byc6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBvZS50ZXJt
aW5hbC5zcGF3bih0ZXJtaW5hbCwgY29tbWFuZCwgdGl0bGUsIE5vbmUsIGQpCiAgICAgICAgICAg
IHJldHVybgogICAgICAgIGV4Y2VwdCBvZS50ZXJtaW5hbC5VbnN1cHBvcnRlZFRlcm1pbmFsOgog
ICAgICAgICAgICBiYi53YXJuKCdVbnN1cHBvcnRlZCB0ZXJtaW5hbCAiJXMiLCBkZWZhdWx0aW5n
IHRvICJhdXRvIicgJQogICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsKQogICAgICAgIGV4Y2Vw
dCBvZS50ZXJtaW5hbC5FeGVjdXRpb25FcnJvciBhcyBleGM6CiAgICAgICAgICAgIGJiLmZhdGFs
KCdVbmFibGUgdG8gc3Bhd24gdGVybWluYWwgJXM6ICVzJyAlICh0ZXJtaW5hbCwgZXhjKSkKCiAg
ICB0cnk6CiAgICAgICAgb2UudGVybWluYWwuc3Bhd25fcHJlZmVycmVkKGNvbW1hbmQsIHRpdGxl
LCBOb25lLCBkKQogICAgZXhjZXB0IG9lLnRlcm1pbmFsLk5vU3VwcG9ydGVkVGVybWluYWxzOgog
ICAgICAgIGJiLmZhdGFsKCdObyB2YWxpZCB0ZXJtaW5hbCBmb3VuZCwgdW5hYmxlIHRvIG9wZW4g
ZGV2c2hlbGwnKQogICAgZXhjZXB0IG9lLnRlcm1pbmFsLkV4ZWN1dGlvbkVycm9yIGFzIGV4YzoK
ICAgICAgICBiYi5mYXRhbCgnVW5hYmxlIHRvIHNwYXduIHRlcm1pbmFsICVzOiAlcycgJSAodGVy
bWluYWwsIGV4YykpfQoKCnB5dGhvbiBwYWNrYWdlX3FhX2dldF9tYWNoaW5lX2RpY3QgKCkgewpk
ZWYgcGFja2FnZV9xYV9nZXRfbWFjaGluZV9kaWN0KCk6CiAgICByZXR1cm4gewogICAgICAgICAg
ICAiZGFyd2luOSIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJhcm0iIDogICAgICAgKDQw
LCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAogICAgICAgICAgICAg
ICAgICAgICAgfSwKICAgICAgICAgICAgImxpbnV4IiA6IHsKICAgICAgICAgICAgICAgICAgICAg
ICAgImFybSIgOiAgICAgICAoNDAsICAgIDk3LCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAg
ICAzMiksCiAgICAgICAgICAgICAgICAgICAgICAgICJhcm1lYiI6ICAgICAgKDQwLCAgICA5Nywg
ICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAogICAgICAgICAgICAgICAgICAgICAg
ICAicG93ZXJwYyI6ICAgICgyMCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAg
IDMyKSwKICAgICAgICAgICAgICAgICAgICAgICAgInBvd2VycGM2NCI6ICAoMjEsICAgICAwLCAg
ICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICA2NCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICJpMzg2IjogICAgICAgKCAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAg
MzIpLAogICAgICAgICAgICAgICAgICAgICAgICAiaTQ4NiI6ICAgICAgICggMywgICAgIDAsICAg
IDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKICAgICAgICAgICAgICAgICAgICAgICAg
Imk1ODYiOiAgICAgICAoIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAz
MiksCiAgICAgICAgICAgICAgICAgICAgICAgICJpNjg2IjogICAgICAgKCAzLCAgICAgMCwgICAg
MCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAogICAgICAgICAgICAgICAgICAgICAgICAi
eDg2XzY0IjogICAgICg2MiwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDY0
KSwKICAgICAgICAgICAgICAgICAgICAgICAgImlhNjQiOiAgICAgICAoNTAsICAgICAwLCAgICAw
LCAgICAgICAgICBUcnVlLCAgICAgICAgICA2NCksCiAgICAgICAgICAgICAgICAgICAgICAgICJh
bHBoYSI6ICAgICAgKDM2OTAyLCAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgNjQp
LAogICAgICAgICAgICAgICAgICAgICAgICAiaHBwYSI6ICAgICAgICgxNSwgICAgIDMsICAgIDAs
ICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKICAgICAgICAgICAgICAgICAgICAgICAgIm02
OGsiOiAgICAgICAoIDQsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiks
CiAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzIjogICAgICAgKCA4LCAgICAgMCwgICAgMCwg
ICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAogICAgICAgICAgICAgICAgICAgICAgICAibWlw
c2VsIjogICAgICggOCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHM2NCI6ICAgICAoIDgsICAgICAwLCAgICAwLCAg
ICAgICAgICBGYWxzZSwgICAgICAgICA2NCksCiAgICAgICAgICAgICAgICAgICAgICAgICJtaXBz
NjRlbCI6ICAgKCA4LCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgNjQpLAog
ICAgICAgICAgICAgICAgICAgICAgICAiczM5MCI6ICAgICAgICgyMiwgICAgIDAsICAgIDAsICAg
ICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKICAgICAgICAgICAgICAgICAgICAgICAgInNoNCI6
ICAgICAgICAoNDIsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCiAg
ICAgICAgICAgICAgICAgICAgICAgICJzcGFyYyI6ICAgICAgKCAyLCAgICAgMCwgICAgMCwgICAg
ICAgICAgRmFsc2UsICAgICAgICAgMzIpLAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAg
ICAgICAgImxpbnV4LXVjbGliYyIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJhcm0iIDog
ICAgICAgKCAgNDAsICAgIDk3LCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCiAg
ICAgICAgICAgICAgICAgICAgICAgICJhcm1lYiI6ICAgICAgKCAgNDAsICAgIDk3LCAgICAwLCAg
ICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCiAgICAgICAgICAgICAgICAgICAgICAgICJwb3dl
cnBjIjogICAgKCAgMjAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiks
CiAgICAgICAgICAgICAgICAgICAgICAgICJpMzg2IjogICAgICAgKCAgIDMsICAgICAwLCAgICAw
LCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCiAgICAgICAgICAgICAgICAgICAgICAgICJp
NDg2IjogICAgICAgKCAgIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAz
MiksCiAgICAgICAgICAgICAgICAgICAgICAgICJpNTg2IjogICAgICAgKCAgIDMsICAgICAwLCAg
ICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCiAgICAgICAgICAgICAgICAgICAgICAg
ICJpNjg2IjogICAgICAgKCAgIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAg
ICAzMiksCiAgICAgICAgICAgICAgICAgICAgICAgICJ4ODZfNjQiOiAgICAgKCAgNjIsICAgICAw
LCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICA2NCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICJtaXBzIjogICAgICAgKCAgIDgsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAg
ICAgICAzMiksCiAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzZWwiOiAgICAgKCAgIDgsICAg
ICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCiAgICAgICAgICAgICAgICAg
ICAgICAgICJtaXBzNjQiOiAgICAgKCAgIDgsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwg
ICAgICAgICA2NCksCiAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzNjRlbCI6ICAgKCAgIDgs
ICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICA2NCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICJhdnIzMiI6ICAgICAgKDYzMTcsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxz
ZSwgICAgICAgICAzMiksCgkJCSJzaDQiOiAgICAgICAgKDQyLAkgMCwgICAgMCwgICAgICAgICAg
VHJ1ZSwgICAgICAgICAgMzIpLAoKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAg
ICJ1Y2xpbnV4LXVjbGliYyIgOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJiZmluIjogICAg
ICAgKCAxMDYsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgIDMyKSwKICAgICAg
ICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJsaW51eC1nbnVlYWJpIiA6IHsKICAgICAg
ICAgICAgICAgICAgICAgICAgImFybSIgOiAgICAgICAoNDAsICAgICAwLCAgICAwLCAgICAgICAg
ICBUcnVlLCAgICAgICAgICAzMiksCiAgICAgICAgICAgICAgICAgICAgICAgICJhcm1lYiIgOiAg
ICAgKDQwLCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAogICAgICAg
ICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgImxpbnV4LXVjbGliY2VhYmkiIDogewogICAg
ICAgICAgICAgICAgICAgICAgICAiYXJtIiA6ICAgICAgICg0MCwgICAgIDAsICAgIDAsICAgICAg
ICAgIFRydWUsICAgICAgICAgIDMyKSwKICAgICAgICAgICAgICAgICAgICAgICAgImFybWViIiA6
ICAgICAoNDAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCiAgICAg
ICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAibGludXgtZ251IiA6IHsKICAgICAgICAg
ICAgICAgICAgICAgICAgInBvd2VycGMiOiAgICAoMjAsICAgICAwLCAgICAwLCAgICAgICAgICBG
YWxzZSwgICAgICAgICAzMiksCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAi
bGludXgtZ251c3BlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInBvd2VycGMiOiAgICAo
MjAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCiAgICAgICAgICAg
ICAgICAgICAgICB9LAogICAgICAgICAgICAibGludXgtdWNsaWJjc3BlIiA6IHsKICAgICAgICAg
ICAgICAgICAgICAgICAgInBvd2VycGMiOiAgICAoMjAsICAgICAwLCAgICAwLCAgICAgICAgICBG
YWxzZSwgICAgICAgICAzMiksCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAi
bGludXgtZ251IiA6ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm1pY3JvYmxhemUi
OiAgICg0Nzc4NywgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIm1pY3JvYmxhemVlbCI6ICg0Nzc4NywgIDAsICAgIDAsICAgICAg
ICAgIFRydWUsICAgICAgICAgIDMyKSwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAg
ICAgICJsaW51eC1nbnV4MzIiIDogICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAieDg2
XzY0IjogICAgICg2MiwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwK
ICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgfQoKfQoKCnB5dGhvbiBnZXRfZGlza2Rh
dGEgKCkgewpkZWYgZ2V0X2Rpc2tkYXRhKHZhciwgZGV2LCBkYXRhKToKICAgIG9sZGRpc2tkYXRh
ID0gZGF0YS5nZXRWYXIodmFyLCBGYWxzZSkKICAgIGRpc2tkYXRhID0ge30KICAgIGlmIG9sZGRp
c2tkYXRhIGlzIE5vbmU6CiAgICAgICAgcmV0dXJuCiAgICBuZXdkaXNrZGF0YSA9IGdldF9kaXNr
c3RhdHMoZGV2KQogICAgZm9yIGtleSBpbiBvbGRkaXNrZGF0YS5pdGVya2V5cygpOgogICAgICAg
IGRpc2tkYXRhWyJTdGFydCIra2V5XSA9IHN0cihpbnQob2xkZGlza2RhdGFba2V5XSkpCiAgICAg
ICAgZGlza2RhdGFbIkVuZCIra2V5XSA9IHN0cihpbnQobmV3ZGlza2RhdGFba2V5XSkpCiAgICBy
ZXR1cm4gZGlza2RhdGEKfQoKCnB5dGhvbiBnZXRfZGV2aWNlICgpIHsKZGVmIGdldF9kZXZpY2Uo
ZSk6CiAgICBmaWxlID0gb3BlbihlLmRhdGEuZ2V0VmFyKCdERVZGSUxFJywgVHJ1ZSkpCiAgICBk
ZXZpY2UgPSBmaWxlLnJlYWRsaW5lKCkKICAgIGZpbGUuY2xvc2UoKQogICAgcmV0dXJuIGRldmlj
ZQp9CgoKcHl0aG9uIHNzdGF0ZV9jbGVhbl9jYWNoZWZpbGUgKCkgewpkZWYgc3N0YXRlX2NsZWFu
X2NhY2hlZmlsZShzcywgZCk6CiAgICBpbXBvcnQgb2UucGF0aAoKICAgIHNzdGF0ZXBrZ2ZpbGUg
PSBkLmdldFZhcignU1NUQVRFX1BBVEhTUEVDJywgVHJ1ZSkgKyAiKl8iICsgc3NbJ25hbWUnXSAr
ICIudGd6KiIKICAgIGJiLm5vdGUoIlJlbW92aW5nICVzIiAlIHNzdGF0ZXBrZ2ZpbGUpCiAgICBv
ZS5wYXRoLnJlbW92ZShzc3RhdGVwa2dmaWxlKQp9CgoKcHl0aG9uIGV4dGVuZF92YXJpYW50cyAo
KSB7CmRlZiBleHRlbmRfdmFyaWFudHMoZCwgdmFyLCBleHRlbmQsIGRlbGltPSc6Jyk6CiAgICAi
IiJSZXR1cm4gYSBzdHJpbmcgb2YgYWxsIGJiIGNsYXNzIGV4dGVuZCB2YXJpYW50cyBmb3IgdGhl
IGdpdmVuIGV4dGVuZCIiIgogICAgdmFyaWFudHMgPSBbXQogICAgd2hvbGUgPSBkLmdldFZhcih2
YXIsIFRydWUpIG9yICIiCiAgICBmb3IgZXh0IGluIHdob2xlLnNwbGl0KCk6CiAgICAgICAgZWV4
dCA9IGV4dC5zcGxpdChkZWxpbSkKICAgICAgICBpZiBsZW4oZWV4dCkgPiAxIGFuZCBlZXh0WzBd
ID09IGV4dGVuZDoKICAgICAgICAgICAgdmFyaWFudHMuYXBwZW5kKGVleHRbMV0pCiAgICByZXR1
cm4gIiAiLmpvaW4odmFyaWFudHMpCn0KCgpweXRob24gYnVpbGRjZmdfdmFycyAoKSB7CmRlZiBi
dWlsZGNmZ192YXJzKGQpOgogICAgc3RhdHVzdmFycyA9IG9lLmRhdGEudHlwZWRfdmFsdWUoJ0JV
SUxEQ0ZHX1ZBUlMnLCBkKQogICAgZm9yIHZhciBpbiBzdGF0dXN2YXJzOgogICAgICAgIHZhbHVl
ID0gZC5nZXRWYXIodmFyLCBUcnVlKQogICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgogICAg
ICAgICAgICB5aWVsZCAnJS0xN3MgPSAiJXMiJyAlICh2YXIsIHZhbHVlKQp9CgoKcHl0aG9uIHBh
Y2thZ2VfcWFfY2hlY2tfcmRlcGVuZHMgKCkgewpkZWYgcGFja2FnZV9xYV9jaGVja19yZGVwZW5k
cyhwa2csIHBrZ2Rlc3QsIHNraXAsIGQpOgogICAgIyBEb24ndCBkbyB0aGlzIGNoZWNrIGZvciBr
ZXJuZWwvbW9kdWxlIHJlY2lwZXMsIHRoZXJlIGFyZW4ndCB0b28gbWFueSBkZWJ1Zy9kZXZlbG9w
bWVudAogICAgIyBwYWNrYWdlcyBhbmQgeW91IGNhbiBnZXQgZmFsc2UgcG9zaXRpdmVzIGUuZy4g
b24ga2VybmVsLW1vZHVsZS1saXJjLWRldgogICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygi
a2VybmVsIiwgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygibW9kdWxlLWJhc2UiLCBkKToK
ICAgICAgICByZXR1cm4gVHJ1ZQoKICAgIHNhbmUgPSBUcnVlCiAgICBpZiBub3QgIi1kYmciIGlu
IHBrZyBhbmQgbm90ICJwYWNrYWdlZ3JvdXAtIiBpbiBwa2cgYW5kIG5vdCAiLWltYWdlIiBpbiBw
a2c6CiAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCiAgICAgICAgbG9j
YWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgcGtnKQogICAgICAgIGJiLmRhdGEudXBkYXRlX2Rh
dGEobG9jYWxkYXRhKQoKICAgICAgICAjIE5vdyBjaGVjayB0aGUgUkRFUEVORFMKICAgICAgICBy
ZGVwZW5kcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhsb2NhbGRhdGEuZ2V0VmFyKCdSREVQRU5E
UycsIFRydWUpIG9yICIiKQoKICAgICAgICAjIE5vdyBkbyB0aGUgc2FuaXR5IGNoZWNrISEhCiAg
ICAgICAgZm9yIHJkZXBlbmQgaW4gcmRlcGVuZHM6CiAgICAgICAgICAgIGlmICItZGJnIiBpbiBy
ZGVwZW5kIGFuZCAiZGVidWctZGVwcyIgbm90IGluIHNraXA6CiAgICAgICAgICAgICAgICBlcnJv
cl9tc2cgPSAiJXMgcmRlcGVuZHMgb24gJXMiICUgKHBrZyxyZGVwZW5kKQogICAgICAgICAgICAg
ICAgc2FuZSA9IHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJkZWJ1Zy1kZXBzIiwgZXJyb3JfbXNn
LCBkKQogICAgICAgICAgICBpZiAobm90ICItZGV2IiBpbiBwa2cgYW5kIG5vdCAiLXN0YXRpY2Rl
diIgaW4gcGtnKSBhbmQgcmRlcGVuZC5lbmRzd2l0aCgiLWRldiIpIGFuZCAiZGV2LWRlcHMiIG5v
dCBpbiBza2lwOgogICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIiVzIHJkZXBlbmRzIG9uICVz
IiAlIChwa2csIHJkZXBlbmQpCiAgICAgICAgICAgICAgICBzYW5lID0gcGFja2FnZV9xYV9oYW5k
bGVfZXJyb3IoImRldi1kZXBzIiwgZXJyb3JfbXNnLCBkKQoKICAgIHJldHVybiBzYW5lCn0KCgpw
eXRob24gcGFja2FnZV9xYV9jaGVja191bnNhZmVfcmVmZXJlbmNlc19pbl9iaW5hcmllcyAoKSB7
CmRlZiBwYWNrYWdlX3FhX2NoZWNrX3Vuc2FmZV9yZWZlcmVuY2VzX2luX2JpbmFyaWVzKHBhdGgs
IG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgoJIiIiCglFbnN1cmUgYmluYXJpZXMgaW4gYmFzZV9b
YmluZGlyfHNiaW5kaXJ8bGliZGlyXSBkbyBub3QgbGluayB0byBmaWxlcyB1bmRlciBleGVjX3By
ZWZpeAoJIiIiCglpZiB1bnNhZmVfcmVmZXJlbmNlc19za2lwcGFibGUocGF0aCwgbmFtZSwgZCk6
CgkJcmV0dXJuCgoJaWYgZWxmOgoJCWltcG9ydCBzdWJwcm9jZXNzIGFzIHN1YgoJCXBuID0gZC5n
ZXRWYXIoJ1BOJywgVHJ1ZSkKCgkJZXhlY19wcmVmaXggPSBkLmdldFZhcignZXhlY19wcmVmaXgn
LCBUcnVlKQoJCXN5c3Jvb3RfcGF0aCA9IGQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9UQVJHRVQnLCBU
cnVlKQoJCXN5c3Jvb3RfcGF0aF91c3IgPSBzeXNyb290X3BhdGggKyBleGVjX3ByZWZpeAoKCQl0
cnk6CgkJCWxkZF9vdXRwdXQgPSBiYi5wcm9jZXNzLlBvcGVuKFsicHJlbGluay1ydGxkIiwgIi0t
cm9vdCIsIHN5c3Jvb3RfcGF0aCwgcGF0aF0sIHN0ZG91dD1zdWIuUElQRSkuc3Rkb3V0LnJlYWQo
KQoJCWV4Y2VwdCBiYi5wcm9jZXNzLkNtZEVycm9yOgoJCQllcnJvcl9tc2cgPSBwbiArICI6IHBy
ZWxpbmstcnRsZCBhYm9ydGVkIHdoZW4gcHJvY2Vzc2luZyAlcyIgJSBwYXRoCgkJCXBhY2thZ2Vf
cWFfaGFuZGxlX2Vycm9yKCJ1bnNhZmUtcmVmZXJlbmNlcy1pbi1iaW5hcmllcyIsIGVycm9yX21z
ZywgZCkKCQkJcmV0dXJuIEZhbHNlCgoJCWlmIHN5c3Jvb3RfcGF0aF91c3IgaW4gbGRkX291dHB1
dDoKCQkJbGRkX291dHB1dCA9IGxkZF9vdXRwdXQucmVwbGFjZShzeXNyb290X3BhdGgsICIiKQoK
CQkJcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKCQkJcGFja2FnZXMgPSBkLmdl
dFZhcignUEFDS0FHRVMnLCBUcnVlKQoKCQkJZm9yIHBhY2thZ2UgaW4gcGFja2FnZXMuc3BsaXQo
KToKCQkJCXNob3J0X3BhdGggPSBwYXRoLnJlcGxhY2UoJyVzLyVzJyAlIChwa2dkZXN0LCBwYWNr
YWdlKSwgIiIsIDEpCgkJCQlpZiAoc2hvcnRfcGF0aCAhPSBwYXRoKToKCQkJCQlicmVhawoKCQkJ
YmFzZV9lcnIgPSBwbiArICI6ICVzLCBpbnN0YWxsZWQgaW4gdGhlIGJhc2VfcHJlZml4LCByZXF1
aXJlcyBhIHNoYXJlZCBsaWJyYXJ5IHVuZGVyIGV4ZWNfcHJlZml4ICglcykiICUgKHNob3J0X3Bh
dGgsIGV4ZWNfcHJlZml4KQoJCQlmb3IgbGluZSBpbiBsZGRfb3V0cHV0LnNwbGl0KCdcbicpOgoJ
CQkJaWYgZXhlY19wcmVmaXggaW4gbGluZToKCQkJCQllcnJvcl9tc2cgPSAiJXM6ICVzIiAlIChi
YXNlX2VyciwgbGluZS5zdHJpcCgpKQoJCQkJCXBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJ1bnNh
ZmUtcmVmZXJlbmNlcy1pbi1iaW5hcmllcyIsIGVycm9yX21zZywgZCkKCgkJCXJldHVybiBGYWxz
ZQp9CgoKcHl0aG9uIHNldF9ibiAoKSB7CmRlZiBzZXRfYm4oZSk6CiAgICBibiA9IGUuZ2V0UGtn
cygpWzBdICsgIi0iICsgZS5kYXRhLmdldFZhcignTUFDSElORScsIFRydWUpCiAgICB0cnk6CiAg
ICAgICAgb3MucmVtb3ZlKGUuZGF0YS5nZXRWYXIoJ0JORklMRScsIFRydWUpKQogICAgZXhjZXB0
OgogICAgICAgIHBhc3MKICAgIGZpbGUgPSBvcGVuKGUuZGF0YS5nZXRWYXIoJ0JORklMRScsIFRy
dWUpLCAidyIpCiAgICBmaWxlLndyaXRlKG9zLnBhdGguam9pbihibiwgZS5kYXRhLmdldFZhcign
QlVJTEROQU1FJywgVHJ1ZSkpKQogICAgZmlsZS5jbG9zZSgpCn0KCgpweXRob24gZ2V0X3BhY2th
Z2VfbWFwcGluZyAoKSB7CmRlZiBnZXRfcGFja2FnZV9tYXBwaW5nIChwa2csIGQpOgogICAgaW1w
b3J0IG9lLnBhY2thZ2VkYXRhCgogICAgZGF0YSA9IG9lLnBhY2thZ2VkYXRhLnJlYWRfc3VicGtn
ZGF0YShwa2csIGQpCiAgICBrZXkgPSAiUEtHXyVzIiAlIHBrZwoKICAgIGlmIGtleSBpbiBkYXRh
OgogICAgICAgIHJldHVybiBkYXRhW2tleV0KCiAgICByZXR1cm4gcGtnCn0KCgpweXRob24gZG9f
Y2xlYW4gKCkgewogICAgIiIiY2xlYXIgdGhlIGJ1aWxkIGFuZCB0ZW1wIGRpcmVjdG9yaWVzIiIi
CiAgICBkaXIgPSBkLmV4cGFuZCgiL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1
aWxkLWZyaTIvdG1wL3dvcmsvY29yZTItcG9reS1saW51eC9iYmxheWVycy0xLjAtcjAiKQogICAg
YmIubm90ZSgiUmVtb3ZpbmcgIiArIGRpcikKICAgIG9lLnBhdGgucmVtb3ZlKGRpcikKCiAgICBk
aXIgPSAiJXMuKiIgJSBiYi5kYXRhLmV4cGFuZChkLmdldFZhcignU1RBTVAnKSwgZCkKICAgIGJi
Lm5vdGUoIlJlbW92aW5nICIgKyBkaXIpCiAgICBvZS5wYXRoLnJlbW92ZShkaXIpCgogICAgZm9y
IGYgaW4gKGQuZ2V0VmFyKCdDTEVBTkZVTkNTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCk6CiAgICAg
ICAgYmIuYnVpbGQuZXhlY19mdW5jKGYsIGQpCn0KCgpweXRob24gZG9fcGFja2FnZV93cml0ZV9y
cG1fc2V0c2NlbmUgKCkgewogICAgc3N0YXRlX3NldHNjZW5lKGQpCn0KCgpweXRob24gc3N0YXRl
X3Rhc2tfcHJlZnVuYyAoKSB7CiAgICBzaGFyZWRfc3RhdGUgPSBzc3RhdGVfc3RhdGVfZnJvbXZh
cnMoZCkKICAgIHNzdGF0ZV9jbGVhbihzaGFyZWRfc3RhdGUsIGQpCn0KCgpweXRob24gY2hlY2tf
c2FuaXR5X3NzdGF0ZV9kaXJfY2hhbmdlICgpIHsKZGVmIGNoZWNrX3Nhbml0eV9zc3RhdGVfZGly
X2NoYW5nZShzc3RhdGVfZGlyLCBkYXRhKToKICAgICMgU2FuaXR5IGNoZWNrcyB0byBiZSBkb25l
IHdoZW4gdGhlIHZhbHVlIG9mIFNTVEFURV9ESVIgY2hhbmdlcwoKICAgICMgQ2hlY2sgdGhhdCBT
U1RBVEVfRElSIGlzbid0IG9uIGEgZmlsZXN5c3RlbSB3aXRoIGxpbWl0ZWQgZmlsZW5hbWUgbGVu
Z3RoIChlZy4gZUNyeXB0RlMpCiAgICB0ZXN0bXNnID0gIiIKICAgIGlmIHNzdGF0ZV9kaXIgIT0g
IiI6CiAgICAgICAgdGVzdG1zZyA9IGNoZWNrX2NyZWF0ZV9sb25nX2ZpbGVuYW1lKHNzdGF0ZV9k
aXIsICJTU1RBVEVfRElSIikKICAgICAgICAjIElmIHdlIGRvbid0IGhhdmUgcGVybWlzc2lvbnMg
dG8gU1NUQVRFX0RJUiwgc3VnZ2VzdCB0aGUgdXNlciBzZXQgaXQgYXMgYW4gU1NUQVRFX01JUlJP
UlMKICAgICAgICB0cnk6CiAgICAgICAgICAgIGVyciA9IHRlc3Rtc2cuc3BsaXQoJzogJylbMV0u
c3RyaXAoKQogICAgICAgICAgICBpZiBlcnIgPT0gIlBlcm1pc3Npb24gZGVuaWVkLiI6CiAgICAg
ICAgICAgICAgICB0ZXN0bXNnID0gdGVzdG1zZyArICJZb3UgY291bGQgdHJ5IHVzaW5nICVzIGlu
IFNTVEFURV9NSVJST1JTIHJhdGhlciB0aGFuIGFzIGFuIFNTVEFURV9DQUNIRS5cbiIgJSAoc3N0
YXRlX2RpcikKICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICAgICAgcGFzcwogICAg
cmV0dXJuIHRlc3Rtc2cKfQoKCnB5dGhvbiBzc3RhdGVfc2V0c2NlbmUgKCkgewpkZWYgc3N0YXRl
X3NldHNjZW5lKGQpOgogICAgc2hhcmVkX3N0YXRlID0gc3N0YXRlX3N0YXRlX2Zyb212YXJzKGQp
CiAgICBhY2NlbGVyYXRlID0gc3N0YXRlX2luc3RhbGxwa2coc2hhcmVkX3N0YXRlLCBkKQogICAg
aWYgbm90IGFjY2VsZXJhdGU6CiAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiTm8g
c3VpdGFibGUgc3RhZ2luZyBwYWNrYWdlIGZvdW5kIikKfQoKCnB5dGhvbiB1bnNhZmVfcmVmZXJl
bmNlc19za2lwcGFibGUgKCkgewpkZWYgdW5zYWZlX3JlZmVyZW5jZXNfc2tpcHBhYmxlKHBhdGgs
IG5hbWUsIGQpOgoJaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgb3IgYmIu
ZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCk6CgkJcmV0dXJuIFRydWUKCglpZiAi
LWRiZyIgaW4gbmFtZSBvciAiLWRldiIgaW4gbmFtZToKCQlyZXR1cm4gVHJ1ZQoKCSMgT3RoZXIg
cGFja2FnZSBuYW1lcyB0byBza2lwOgoJaWYgbmFtZS5zdGFydHN3aXRoKCJrZXJuZWwtbW9kdWxl
LSIpOgoJCXJldHVybiBUcnVlCgoJIyBTa2lwIHN5bWxpbmtzCglpZiBvcy5wYXRoLmlzbGluayhw
YXRoKToKCQlyZXR1cm4gVHJ1ZQoKCSMgU2tpcCB1bnVzdWFsIHJvb3RmcyBsYXlvdXRzIHdoaWNo
IG1ha2UgdGhlc2UgdGVzdHMgaXJyZWxldmFudAoJZXhlY19wcmVmaXggPSBkLmdldFZhcignZXhl
Y19wcmVmaXgnLCBUcnVlKQoJaWYgZXhlY19wcmVmaXggPT0gIiI6CgkJcmV0dXJuIFRydWUKCglw
a2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQoJcGtnZGVzdCA9IHBrZ2Rlc3QgKyAi
LyIgKyBuYW1lCglwa2dkZXN0ID0gb3MucGF0aC5hYnNwYXRoKHBrZ2Rlc3QpCgliYXNlX2JpbmRp
ciA9IHBrZ2Rlc3QgKyBkLmdldFZhcignYmFzZV9iaW5kaXInLCBUcnVlKQoJYmFzZV9zYmluZGly
ID0gcGtnZGVzdCArIGQuZ2V0VmFyKCdiYXNlX3NiaW5kaXInLCBUcnVlKQoJYmFzZV9saWJkaXIg
PSBwa2dkZXN0ICsgZC5nZXRWYXIoJ2Jhc2VfbGliZGlyJywgVHJ1ZSkKCWJpbmRpciA9IHBrZ2Rl
c3QgKyBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkKCXNiaW5kaXIgPSBwa2dkZXN0ICsgZC5nZXRW
YXIoJ3NiaW5kaXInLCBUcnVlKQoJbGliZGlyID0gcGtnZGVzdCArIGQuZ2V0VmFyKCdsaWJkaXIn
LCBUcnVlKQoKCWlmIGJhc2VfYmluZGlyID09IGJpbmRpciBhbmQgYmFzZV9zYmluZGlyID09IHNi
aW5kaXIgYW5kIGJhc2VfbGliZGlyID09IGxpYmRpcjoKCQlyZXR1cm4gVHJ1ZQoKCSMgU2tpcCBm
aWxlcyBub3QgaW4gYmFzZV9bYmluZGlyfHNiaW5kaXJ8bGliZGlyXQoJcGF0aCA9IG9zLnBhdGgu
YWJzcGF0aChwYXRoKQoJaWYgbm90IChiYXNlX2JpbmRpciBpbiBwYXRoIG9yIGJhc2Vfc2JpbmRp
ciBpbiBwYXRoIG9yIGJhc2VfbGliZGlyIGluIHBhdGgpOgoJCXJldHVybiBUcnVlCgoJcmV0dXJu
IEZhbHNlCn0KCgpweXRob24gcmVhZF9saWJkZXBfZmlsZXMgKCkgewpkZWYgcmVhZF9saWJkZXBf
ZmlsZXMoZCk6CiAgICBwa2dsaWJkZXBzID0ge30KICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BB
Q0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQogICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKICAgICAgICBw
a2dsaWJkZXBzW3BrZ10gPSB7fQogICAgICAgIGZvciBleHRlbnNpb24gaW4gIi5zaGxpYmRlcHMi
LCAiLnBjZGVwcyIsICIuY2xpbGliZGVwcyI6CiAgICAgICAgICAgIGRlcHNmaWxlID0gZC5leHBh
bmQoIi9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC93b3Jr
L2NvcmUyLXBva3ktbGludXgvYmJsYXllcnMtMS4wLXIwL3BhY2thZ2VzLXNwbGl0LyIgKyBwa2cg
KyBleHRlbnNpb24pCiAgICAgICAgICAgIGlmIG9zLmFjY2VzcyhkZXBzZmlsZSwgb3MuUl9PSyk6
CiAgICAgICAgICAgICAgICBmZCA9IGZpbGUoZGVwc2ZpbGUpCiAgICAgICAgICAgICAgICBsaW5l
cyA9IGZkLnJlYWRsaW5lcygpCiAgICAgICAgICAgICAgICBmZC5jbG9zZSgpCiAgICAgICAgICAg
ICAgICBmb3IgbCBpbiBsaW5lczoKICAgICAgICAgICAgICAgICAgICBsLnJzdHJpcCgpCiAgICAg
ICAgICAgICAgICAgICAgZGVwcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsKQog
ICAgICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwczoKICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgbm90IGRlcCBpbiBwa2dsaWJkZXBzW3BrZ106CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwa2dsaWJkZXBzW3BrZ11bZGVwXSA9IGRlcHNbZGVwXQogICAgcmV0dXJuIHBrZ2xpYmRl
cHMKfQoKCnB5dGhvbiBzeXNyb290X2NsZWFuc3N0YXRlICgpIHsKICAgIHNzID0gc3N0YXRlX3N0
YXRlX2Zyb212YXJzKGQsICJwb3B1bGF0ZV9zeXNyb290IikKICAgIHNzdGF0ZV9jbGVhbihzcywg
ZCkKfQoKCnB5dGhvbiBwYWNrYWdlX2RlcGNoYWlucyAoKSB7CiAgICAiIiIKICAgIEZvciBhIGdp
dmVuIHNldCBvZiBwcmVmaXggYW5kIHBvc3RmaXggbW9kaWZpZXJzLCBtYWtlIHRob3NlIHBhY2th
Z2VzCiAgICBSUkVDT01NRU5EUyBvbiB0aGUgY29ycmVzcG9uZGluZyBwYWNrYWdlcyBmb3IgaXRz
IFJERVBFTkRTLgoKICAgIEV4YW1wbGU6ICBJZiBwYWNrYWdlIEEgZGVwZW5kcyB1cG9uIHBhY2th
Z2UgQiwgYW5kIEEncyAuYmIgZW1pdHMgYW4KICAgIEEtZGV2IHBhY2thZ2UsIHRoaXMgd291bGQg
bWFrZSBBLWRldiBSZWNvbW1lbmRzOiBCLWRldi4KCiAgICBJZiBvbmx5IG9uZSBvZiBhIGdpdmVu
IHN1ZmZpeCBpcyBzcGVjaWZpZWQsIGl0IHdpbGwgdGFrZSB0aGUgUlJFQ09NTUVORFMKICAgIGJh
c2VkIG9uIHRoZSBSREVQRU5EUyBvZiAqYWxsKiBvdGhlciBwYWNrYWdlcy4gSWYgbW9yZSB0aGFu
IG9uZSBvZiBhIGdpdmVuCiAgICBzdWZmaXggaXMgc3BlY2lmaWVkLCBpdHMgd2lsbCBvbmx5IHVz
ZSB0aGUgUkRFUEVORFMgb2YgdGhlIHNpbmdsZSBwYXJlbnQKICAgIHBhY2thZ2UuCiAgICAiIiIK
CiAgICBwYWNrYWdlcyAgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQogICAgcG9zdGZpeGVz
ID0gKGQuZ2V0VmFyKCdERVBDSEFJTl9QT1NUJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkKICAgIHBy
ZWZpeGVzICA9IChkLmdldFZhcignREVQQ0hBSU5fUFJFJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkK
CiAgICBkZWYgcGtnX2FkZGRlcHJyZWNzKHBrZywgYmFzZSwgc3VmZml4LCBnZXRuYW1lLCBkZXBl
bmRzLCBkKToKCiAgICAgICAgI2JiLm5vdGUoJ2RlcGVuZHMgZm9yICVzIGlzICVzJyAlIChiYXNl
LCBkZXBlbmRzKSkKICAgICAgICBycmVjbGlzdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNp
b25zMihkLmdldFZhcignUlJFQ09NTUVORFNfJyArIHBrZywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ1JS
RUNPTU1FTkRTJywgVHJ1ZSkgb3IgIiIpCgogICAgICAgIGZvciBkZXBlbmQgaW4gZGVwZW5kczoK
ICAgICAgICAgICAgaWYgZGVwZW5kLmZpbmQoJy1uYXRpdmUnKSAhPSAtMSBvciBkZXBlbmQuZmlu
ZCgnLWNyb3NzJykgIT0gLTEgb3IgZGVwZW5kLnN0YXJ0c3dpdGgoJ3ZpcnR1YWwvJyk6CiAgICAg
ICAgICAgICAgICAjYmIubm90ZSgiU2tpcHBpbmcgJXMiICUgZGVwZW5kKQogICAgICAgICAgICAg
ICAgY29udGludWUKICAgICAgICAgICAgaWYgZGVwZW5kLmVuZHN3aXRoKCctZGV2Jyk6CiAgICAg
ICAgICAgICAgICBkZXBlbmQgPSBkZXBlbmQucmVwbGFjZSgnLWRldicsICcnKQogICAgICAgICAg
ICBpZiBkZXBlbmQuZW5kc3dpdGgoJy1kYmcnKToKICAgICAgICAgICAgICAgIGRlcGVuZCA9IGRl
cGVuZC5yZXBsYWNlKCctZGJnJywgJycpCiAgICAgICAgICAgIHBrZ25hbWUgPSBnZXRuYW1lKGRl
cGVuZCwgc3VmZml4KQogICAgICAgICAgICAjYmIubm90ZSgiQWRkaW5nICVzIGZvciAlcyIgJSAo
cGtnbmFtZSwgZGVwZW5kKSkKICAgICAgICAgICAgaWYgcGtnbmFtZSBub3QgaW4gcnJlY2xpc3Qg
YW5kIHBrZ25hbWUgIT0gcGtnOgogICAgICAgICAgICAgICAgcnJlY2xpc3RbcGtnbmFtZV0gPSBb
XQoKICAgICAgICAjYmIubm90ZSgnc2V0dGluZzogUlJFQ09NTUVORFNfJXM9JXMnICUgKHBrZywg
JyAnLmpvaW4ocnJlY2xpc3QpKSkKICAgICAgICBkLnNldFZhcignUlJFQ09NTUVORFNfJXMnICUg
cGtnLCBiYi51dGlscy5qb2luX2RlcHMocnJlY2xpc3QsIGNvbW1hc2VwPUZhbHNlKSkKCiAgICBk
ZWYgcGtnX2FkZHJyZWNzKHBrZywgYmFzZSwgc3VmZml4LCBnZXRuYW1lLCByZGVwZW5kcywgZCk6
CgogICAgICAgICNiYi5ub3RlKCdyZGVwZW5kcyBmb3IgJXMgaXMgJXMnICUgKGJhc2UsIHJkZXBl
bmRzKSkKICAgICAgICBycmVjbGlzdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihk
LmdldFZhcignUlJFQ09NTUVORFNfJyArIHBrZywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ1JSRUNPTU1F
TkRTJywgVHJ1ZSkgb3IgIiIpCgogICAgICAgIGZvciBkZXBlbmQgaW4gcmRlcGVuZHM6CiAgICAg
ICAgICAgIGlmIGRlcGVuZC5maW5kKCd2aXJ0dWFsLWxvY2FsZS0nKSAhPSAtMToKICAgICAgICAg
ICAgICAgICNiYi5ub3RlKCJTa2lwcGluZyAlcyIgJSBkZXBlbmQpCiAgICAgICAgICAgICAgICBj
b250aW51ZQogICAgICAgICAgICBpZiBkZXBlbmQuZW5kc3dpdGgoJy1kZXYnKToKICAgICAgICAg
ICAgICAgIGRlcGVuZCA9IGRlcGVuZC5yZXBsYWNlKCctZGV2JywgJycpCiAgICAgICAgICAgIGlm
IGRlcGVuZC5lbmRzd2l0aCgnLWRiZycpOgogICAgICAgICAgICAgICAgZGVwZW5kID0gZGVwZW5k
LnJlcGxhY2UoJy1kYmcnLCAnJykKICAgICAgICAgICAgcGtnbmFtZSA9IGdldG5hbWUoZGVwZW5k
LCBzdWZmaXgpCiAgICAgICAgICAgICNiYi5ub3RlKCJBZGRpbmcgJXMgZm9yICVzIiAlIChwa2du
YW1lLCBkZXBlbmQpKQogICAgICAgICAgICBpZiBwa2duYW1lIG5vdCBpbiBycmVjbGlzdCBhbmQg
cGtnbmFtZSAhPSBwa2c6CiAgICAgICAgICAgICAgICBycmVjbGlzdFtwa2duYW1lXSA9IFtdCgog
ICAgICAgICNiYi5ub3RlKCdzZXR0aW5nOiBSUkVDT01NRU5EU18lcz0lcycgJSAocGtnLCAnICcu
am9pbihycmVjbGlzdCkpKQogICAgICAgIGQuc2V0VmFyKCdSUkVDT01NRU5EU18lcycgJSBwa2cs
IGJiLnV0aWxzLmpvaW5fZGVwcyhycmVjbGlzdCwgY29tbWFzZXA9RmFsc2UpKQoKICAgIGRlZiBh
ZGRfZGVwKGxpc3QsIGRlcCk6CiAgICAgICAgaWYgZGVwIG5vdCBpbiBsaXN0OgogICAgICAgICAg
ICBsaXN0LmFwcGVuZChkZXApCgogICAgZGVwZW5kcyA9IFtdCiAgICBmb3IgZGVwIGluIGJiLnV0
aWxzLmV4cGxvZGVfZGVwcyhkLmdldFZhcignREVQRU5EUycsIFRydWUpIG9yICIiKToKICAgICAg
ICBhZGRfZGVwKGRlcGVuZHMsIGRlcCkKCiAgICByZGVwZW5kcyA9IFtdCiAgICBmb3IgZGVwIGlu
IGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhkLmdldFZhcignUkRFUEVORFMnLCBUcnVlKSBvciAiIik6
CiAgICAgICAgYWRkX2RlcChyZGVwZW5kcywgZGVwKQoKICAgIGZvciBwa2cgaW4gcGFja2FnZXMu
c3BsaXQoKToKICAgICAgICBmb3IgZGVwIGluIGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhkLmdldFZh
cignUkRFUEVORFNfJyArIHBrZywgVHJ1ZSkgb3IgIiIpOgogICAgICAgICAgICBhZGRfZGVwKHJk
ZXBlbmRzLCBkZXApCgogICAgI2JiLm5vdGUoJ3JkZXBlbmRzIGlzICVzJyAlIHJkZXBlbmRzKQoK
ICAgIGRlZiBwb3N0X2dldG5hbWUobmFtZSwgc3VmZml4KToKICAgICAgICByZXR1cm4gJyVzJXMn
ICUgKG5hbWUsIHN1ZmZpeCkKICAgIGRlZiBwcmVfZ2V0bmFtZShuYW1lLCBzdWZmaXgpOgogICAg
ICAgIHJldHVybiAnJXMlcycgJSAoc3VmZml4LCBuYW1lKQoKICAgIHBrZ3MgPSB7fQogICAgZm9y
IHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgogICAgICAgIGZvciBwb3N0Zml4IGluIHBvc3RmaXhl
czoKICAgICAgICAgICAgaWYgcGtnLmVuZHN3aXRoKHBvc3RmaXgpOgogICAgICAgICAgICAgICAg
aWYgbm90IHBvc3RmaXggaW4gcGtnczoKICAgICAgICAgICAgICAgICAgICBwa2dzW3Bvc3RmaXhd
ID0ge30KICAgICAgICAgICAgICAgIHBrZ3NbcG9zdGZpeF1bcGtnXSA9IChwa2dbOi1sZW4ocG9z
dGZpeCldLCBwb3N0X2dldG5hbWUpCgogICAgICAgIGZvciBwcmVmaXggaW4gcHJlZml4ZXM6CiAg
ICAgICAgICAgIGlmIHBrZy5zdGFydHN3aXRoKHByZWZpeCk6CiAgICAgICAgICAgICAgICBpZiBu
b3QgcHJlZml4IGluIHBrZ3M6CiAgICAgICAgICAgICAgICAgICAgcGtnc1twcmVmaXhdID0ge30K
ICAgICAgICAgICAgICAgIHBrZ3NbcHJlZml4XVtwa2ddID0gKHBrZ1s6LWxlbihwcmVmaXgpXSwg
cHJlX2dldG5hbWUpCgogICAgaWYgIi1kYmciIGluIHBrZ3M6CiAgICAgICAgcGtnbGliZGVwcyA9
IHJlYWRfbGliZGVwX2ZpbGVzKGQpCiAgICAgICAgcGtnbGliZGVwbGlzdCA9IFtdCiAgICAgICAg
Zm9yIHBrZyBpbiBwa2dsaWJkZXBzOgogICAgICAgICAgICBmb3IgayBpbiBwa2dsaWJkZXBzW3Br
Z106CiAgICAgICAgICAgICAgICBhZGRfZGVwKHBrZ2xpYmRlcGxpc3QsIGspCiAgICAgICAgIyBG
SVhNRSB0aGlzIHNob3VsZCBub3QgbG9vayBhdCBQTiBvbmNlIGFsbCB0YXNrIHJlY2lwZXMgaW5o
ZXJpdCBmcm9tIHRhc2suYmJjbGFzcwogICAgICAgIGRiZ2RlZmF1bHRkZXBzID0gKChkLmdldFZh
cignREVQQ0hBSU5fREJHREVGQVVMVERFUFMnLCBUcnVlKSA9PSAnMScpIG9yIChkLmdldFZhcign
UE4nLCBUcnVlKSBvciAnJykuc3RhcnRzd2l0aCgncGFja2FnZWdyb3VwLScpKQoKICAgIGZvciBz
dWZmaXggaW4gcGtnczoKICAgICAgICBmb3IgcGtnIGluIHBrZ3Nbc3VmZml4XToKICAgICAgICAg
ICAgaWYgZC5nZXRWYXJGbGFnKCdSUkVDT01NRU5EU18nICsgcGtnLCAnbm9kZXBycmVjcycpOgog
ICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgKGJhc2UsIGZ1bmMpID0gcGtnc1tz
dWZmaXhdW3BrZ10KICAgICAgICAgICAgaWYgc3VmZml4ID09ICItZGV2IjoKICAgICAgICAgICAg
ICAgIHBrZ19hZGRkZXBycmVjcyhwa2csIGJhc2UsIHN1ZmZpeCwgZnVuYywgZGVwZW5kcywgZCkK
ICAgICAgICAgICAgZWxpZiBzdWZmaXggPT0gIi1kYmciOgogICAgICAgICAgICAgICAgaWYgbm90
IGRiZ2RlZmF1bHRkZXBzOgogICAgICAgICAgICAgICAgICAgIHBrZ19hZGRycmVjcyhwa2csIGJh
c2UsIHN1ZmZpeCwgZnVuYywgcGtnbGliZGVwbGlzdCwgZCkKICAgICAgICAgICAgICAgICAgICBj
b250aW51ZQogICAgICAgICAgICBpZiBsZW4ocGtnc1tzdWZmaXhdKSA9PSAxOgogICAgICAgICAg
ICAgICAgcGtnX2FkZHJyZWNzKHBrZywgYmFzZSwgc3VmZml4LCBmdW5jLCByZGVwZW5kcywgZCkK
ICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJkZXBzID0gW10KICAgICAgICAgICAg
ICAgIGZvciBkZXAgaW4gYmIudXRpbHMuZXhwbG9kZV9kZXBzKGQuZ2V0VmFyKCdSREVQRU5EU18n
ICsgYmFzZSwgVHJ1ZSkgb3IgZC5nZXRWYXIoJ1JERVBFTkRTJywgVHJ1ZSkgb3IgIiIpOgogICAg
ICAgICAgICAgICAgICAgIGFkZF9kZXAocmRlcHMsIGRlcCkKICAgICAgICAgICAgICAgIHBrZ19h
ZGRycmVjcyhwa2csIGJhc2UsIHN1ZmZpeCwgZnVuYywgcmRlcHMsIGQpCn0KCgpweXRob24gY2hl
Y2tfYmJsYXllcnNfY29uZiAoKSB7CiAgICBiYmxheWVyc19mbiA9IG9zLnBhdGguam9pbihkLmdl
dFZhcignVE9QRElSJywgVHJ1ZSksICdjb25mL2JibGF5ZXJzLmNvbmYnKQoKICAgIGN1cnJlbnRf
bGNvbmYgPSBpbnQoZC5nZXRWYXIoJ0xDT05GX1ZFUlNJT04nLCBUcnVlKSkKICAgIGlmIG5vdCBj
dXJyZW50X2xjb25mOgogICAgICAgIHN5cy5leGl0KCkKICAgIGxjb25mX3ZlcnNpb24gPSBpbnQo
ZC5nZXRWYXIoJ0xBWUVSX0NPTkZfVkVSU0lPTicsIFRydWUpKQogICAgbGluZXMgPSBbXQoKICAg
IGltcG9ydCByZQogICAgZGVmIGZpbmRfbGluZShwYXR0ZXJuLCBsaW5lcyk6CiAgICAgICAgcmV0
dXJuIG5leHQoKChpbmRleCwgbGluZSkKICAgICAgICAgICAgZm9yIGluZGV4LCBsaW5lIGluIGVu
dW1lcmF0ZShsaW5lcykKICAgICAgICAgICAgaWYgcmUuc2VhcmNoKHBhdHRlcm4sIGxpbmUpKSwg
KE5vbmUsIE5vbmUpKQoKICAgIGlmIGN1cnJlbnRfbGNvbmYgPCA0OgogICAgICAgIHN5cy5leGl0
KCkKCiAgICB3aXRoIG9wZW4oYmJsYXllcnNfZm4sICdyJykgYXMgZjoKICAgICAgICBsaW5lcyA9
IGYucmVhZGxpbmVzKCkKCiAgICBpZiBjdXJyZW50X2xjb25mID09IDQ6CiAgICAgICAgdG9wZGly
X3ZhciA9ICckJyArICd7VE9QRElSfScKICAgICAgICBpbmRleCwgYmJwYXRoX2xpbmUgPSBmaW5k
X2xpbmUoJ0JCUEFUSCcsIGxpbmVzKQogICAgICAgIGlmIGJicGF0aF9saW5lOgogICAgICAgICAg
ICBzdGFydCA9IGJicGF0aF9saW5lLmZpbmQoJyInKQogICAgICAgICAgICBpZiBzdGFydCAhPSAt
MSBhbmQgKGxlbihiYnBhdGhfbGluZSkgIT0gKHN0YXJ0ICsgMSkpOgogICAgICAgICAgICAgICAg
aWYgYmJwYXRoX2xpbmVbc3RhcnQgKyAxXSA9PSAnIic6CiAgICAgICAgICAgICAgICAgICAgbGlu
ZXNbaW5kZXhdID0gKGJicGF0aF9saW5lWzpzdGFydCArIDFdICsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9wZGlyX3ZhciArIGJicGF0aF9saW5lW3N0YXJ0ICsgMTpdKQog
ICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBpZiBub3QgdG9wZGlyX3Zh
ciBpbiBiYnBhdGhfbGluZToKICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNbaW5kZXhdID0g
KGJicGF0aF9saW5lWzpzdGFydCArIDFdICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9wZGlyX3ZhciArICc6JyArIGJicGF0aF9saW5lW3N0YXJ0ICsgMTpdKQogICAgICAg
ICAgICBlbHNlOgogICAgICAgICAgICAgICAgc3lzLmV4aXQoKQogICAgICAgIGVsc2U6CiAgICAg
ICAgICAgIGluZGV4LCBiYmZpbGVzX2xpbmUgPSBmaW5kX2xpbmUoJ0JCRklMRVMnLCBsaW5lcykK
ICAgICAgICAgICAgaWYgYmJmaWxlc19saW5lOgogICAgICAgICAgICAgICAgbGluZXMuaW5zZXJ0
KGluZGV4LCAnQkJQQVRIID0gIicgKyB0b3BkaXJfdmFyICsgJyJcbicpCiAgICAgICAgICAgIGVs
c2U6CiAgICAgICAgICAgICAgICBzeXMuZXhpdCgpCgogICAgICAgIGluZGV4LCBsaW5lID0gZmlu
ZF9saW5lKCdMQ09ORl9WRVJTSU9OJywgbGluZXMpCiAgICAgICAgY3VycmVudF9sY29uZiArPSAx
CiAgICAgICAgbGluZXNbaW5kZXhdID0gJ0xDT05GX1ZFUlNJT04gPSAiJWQiXG4nICUgY3VycmVu
dF9sY29uZgogICAgICAgIHdpdGggb3BlbihiYmxheWVyc19mbiwgInciKSBhcyBmOgogICAgICAg
ICAgICBmLndyaXRlKCcnLmpvaW4obGluZXMpKQogICAgaWYgY3VycmVudF9sY29uZiAhPSBsY29u
Zl92ZXJzaW9uOgogICAgICAgIGlmIGN1cnJlbnRfbGNvbmYgPT0gNToKICAgICAgICAgICAgaW5k
ZXgsIG1ldGFfeW9jdG9fbGluZSA9IGZpbmRfbGluZSgnbWV0YS15b2N0b1xzKlxcXFxcXG4nLCBs
aW5lcykKICAgICAgICAgICAgaWYgbWV0YV95b2N0b19saW5lOgogICAgICAgICAgICAgICAgbGlu
ZXMuaW5zZXJ0KGluZGV4ICsgMSwgbWV0YV95b2N0b19saW5lLnJlcGxhY2UoJ21ldGEteW9jdG8n
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ21ldGEteW9jdG8tYnNwJykpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAg
ICAgICBzeXMuZXhpdCgpCgogICAgICAgICAgICBpbmRleCwgbGluZSA9IGZpbmRfbGluZSgnTENP
TkZfVkVSU0lPTicsIGxpbmVzKQogICAgICAgICAgICBjdXJyZW50X2xjb25mICs9IDEKICAgICAg
ICAgICAgbGluZXNbaW5kZXhdID0gJ0xDT05GX1ZFUlNJT04gPSAiJWQiXG4nICUgY3VycmVudF9s
Y29uZgogICAgICAgICAgICB3aXRoIG9wZW4oYmJsYXllcnNfZm4sICJ3IikgYXMgZjoKICAgICAg
ICAgICAgICAgIGYud3JpdGUoJycuam9pbihsaW5lcykpCn0KCgpweXRob24gZG9fY2xlYW5hbGwg
KCkgewogICAgc3JjX3VyaSA9IChkLmdldFZhcignU1JDX1VSSScsIFRydWUpIG9yICIiKS5zcGxp
dCgpCiAgICBpZiBsZW4oc3JjX3VyaSkgPT0gMDoKICAgICAgICByZXR1cm4KCiAgICBsb2NhbGRh
dGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxk
YXRhKQoKICAgIHRyeToKICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2gyLkZldGNoKHNyY191cmks
IGxvY2FsZGF0YSkKICAgICAgICBmZXRjaGVyLmNsZWFuKCkKICAgIGV4Y2VwdCBiYi5mZXRjaDIu
QkJGZXRjaEV4Y2VwdGlvbiwgZToKICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKGUp
Cn0KCgpweXRob24gc3N0YXRlX3BhY2thZ2UgKCkgewpkZWYgc3N0YXRlX3BhY2thZ2Uoc3MsIGQp
OgogICAgaW1wb3J0IG9lLnBhdGgKCiAgICBkZWYgbWFrZV9yZWxhdGl2ZV9zeW1saW5rKHBhdGgs
IG91dHB1dHBhdGgsIGQpOgogICAgICAgICMgUmVwbGFjZSBvdXQgYWJzb2x1dGUgVE1QRElSIHBh
dGhzIGluIHN5bWxpbmtzIHdpdGggcmVsYXRpdmUgb25lcwogICAgICAgIGlmIG5vdCBvcy5wYXRo
LmlzbGluayhwYXRoKToKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgbGluayA9IG9zLnJlYWRs
aW5rKHBhdGgpCiAgICAgICAgaWYgbm90IG9zLnBhdGguaXNhYnMobGluayk6CiAgICAgICAgICAg
IHJldHVybgogICAgICAgIGlmIG5vdCBsaW5rLnN0YXJ0c3dpdGgodG1wZGlyKToKICAgICAgICAg
ICAgcmV0dXJuCgogICAgICAgIGRlcHRoID0gbGluay5ycGFydGl0aW9uKHRtcGRpcilbMl0uY291
bnQoJy8nKQogICAgICAgIGJhc2UgPSBsaW5rLnBhcnRpdGlvbih0bXBkaXIpWzJdLnN0cmlwKCkK
ICAgICAgICB3aGlsZSBkZXB0aCA+IDE6CiAgICAgICAgICAgIGJhc2UgPSAiLi4vIiArIGJhc2UK
ICAgICAgICAgICAgZGVwdGggLT0gMQoKICAgICAgICBiYi5kZWJ1ZygyLCAiUmVwbGFjaW5nIGFi
c29sdXRlIHBhdGggJXMgd2l0aCByZWxhdGl2ZSBwYXRoICVzIiAlIChsaW5rLCBiYXNlKSkKICAg
ICAgICBvcy5yZW1vdmUocGF0aCkKICAgICAgICBvcy5zeW1saW5rKGJhc2UsIHBhdGgpCgogICAg
dG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCgogICAgc3N0YXRlYnVpbGQgPSBkLmV4
cGFuZCgiL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3dv
cmsvY29yZTItcG9reS1saW51eC9iYmxheWVycy0xLjAtcjAvc3N0YXRlLWJ1aWxkLSVzLyIgJSBz
c1snbmFtZSddKQogICAgc3N0YXRlcGtnID0gZC5nZXRWYXIoJ1NTVEFURV9QS0cnLCBUcnVlKSAr
ICdfJysgc3NbJ25hbWUnXSArICIudGd6IgogICAgYmIubWtkaXJoaWVyKHNzdGF0ZWJ1aWxkKQog
ICAgYmIubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShzc3RhdGVwa2cpKQogICAgZm9yIHN0YXRl
IGluIHNzWydkaXJzJ106CiAgICAgICAgc3JjYmFzZSA9IHN0YXRlWzBdLnJzdHJpcCgiLyIpLnJz
cGxpdCgnLycsIDEpWzBdCiAgICAgICAgZm9yIHdhbGtyb290LCBkaXJzLCBmaWxlcyBpbiBvcy53
YWxrKHN0YXRlWzFdKToKICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CiAgICAgICAgICAg
ICAgICBzcmNwYXRoID0gb3MucGF0aC5qb2luKHdhbGtyb290LCBmaWxlKQogICAgICAgICAgICAg
ICAgZHN0cGF0aCA9IHNyY3BhdGgucmVwbGFjZShzdGF0ZVsxXSwgc3N0YXRlYnVpbGQgKyBzdGF0
ZVswXSkKICAgICAgICAgICAgICAgIG1ha2VfcmVsYXRpdmVfc3ltbGluayhzcmNwYXRoLCBkc3Rw
YXRoLCBkKQogICAgICAgICAgICBmb3IgZGlyIGluIGRpcnM6CiAgICAgICAgICAgICAgICBzcmNw
YXRoID0gb3MucGF0aC5qb2luKHdhbGtyb290LCBkaXIpCiAgICAgICAgICAgICAgICBkc3RwYXRo
ID0gc3JjcGF0aC5yZXBsYWNlKHN0YXRlWzFdLCBzc3RhdGVidWlsZCArIHN0YXRlWzBdKQogICAg
ICAgICAgICAgICAgbWFrZV9yZWxhdGl2ZV9zeW1saW5rKHNyY3BhdGgsIGRzdHBhdGgsIGQpCiAg
ICAgICAgYmIuZGVidWcoMiwgIlByZXBhcmluZyB0cmVlICVzIGZvciBwYWNrYWdpbmcgYXQgJXMi
ICUgKHN0YXRlWzFdLCBzc3RhdGVidWlsZCArIHN0YXRlWzBdKSkKICAgICAgICBvZS5wYXRoLmNv
cHl0cmVlKHN0YXRlWzFdLCBzc3RhdGVidWlsZCArIHN0YXRlWzBdKQoKICAgIHdvcmtkaXIgPSBk
LmdldFZhcignV09SS0RJUicsIFRydWUpCiAgICBmb3IgcGxhaW4gaW4gc3NbJ3BsYWluZGlycydd
OgogICAgICAgIHBkaXIgPSBwbGFpbi5yZXBsYWNlKHdvcmtkaXIsIHNzdGF0ZWJ1aWxkKQogICAg
ICAgIGJiLm1rZGlyaGllcihwbGFpbikKICAgICAgICBiYi5ta2RpcmhpZXIocGRpcikKICAgICAg
ICBvZS5wYXRoLmNvcHl0cmVlKHBsYWluLCBwZGlyKQoKICAgIGQuc2V0VmFyKCdTU1RBVEVfQlVJ
TERESVInLCBzc3RhdGVidWlsZCkKICAgIGQuc2V0VmFyKCdTU1RBVEVfUEtHJywgc3N0YXRlcGtn
KQogICAgc3N0YXRlX2hhcmRjb2RlX3BhdGgoZCkKICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnc3N0
YXRlX2NyZWF0ZV9wYWNrYWdlJywgZCkKCiAgICBiYi5zaWdnZW4uZHVtcF90aGlzX3Rhc2soc3N0
YXRlcGtnICsgIi5zaWdpbmZvIiwgZCkKCiAgICByZXR1cm4KfQoKCnB5dGhvbiBkb19wb3B1bGF0
ZV9saWMgKCkgewogICAgIiIiCiAgICBQb3B1bGF0ZSBMSUNFTlNFX0RJUkVDVE9SWSB3aXRoIGxp
Y2Vuc2VzLgogICAgIiIiCiAgICBpbXBvcnQgc2h1dGlsCiAgICBpbXBvcnQgb2UubGljZW5zZQoK
ICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKICAgIGZvciBwYWNrYWdlIGluIGQuZ2V0VmFy
KCdQQUNLQUdFUycsIFRydWUpOgogICAgICAgIGlmIGQuZ2V0VmFyKCdMSUNFTlNFXycgKyBwbiAr
ICctJyArIHBhY2thZ2UsIFRydWUpOgogICAgICAgICAgICBsaWNlbnNlX3R5cGVzID0gbGljZW5z
ZV90eXBlcyArICcgJiAnICsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIo
J0xJQ0VOU0VfJyArIHBuICsgJy0nICsgcGFja2FnZSwgVHJ1ZSkKCiAgICAjSWYgd2UgZ2V0IGhl
cmUgd2l0aCBubyBsaWNlbnNlIHR5cGVzLCB0aGVuIHRoYXQgbWVhbnMgd2UgaGF2ZSBhIHJlY2lw
ZQogICAgI2xldmVsIGxpY2Vuc2UuIElmIHNvLCB3ZSBncmFiIG9ubHkgdGhvc2UuCiAgICB0cnk6
CiAgICAgICAgbGljZW5zZV90eXBlcwogICAgZXhjZXB0IE5hbWVFcnJvcjoKICAgICAgICAjIEFs
bCB0aGUgbGljZW5zZSB0eXBlcyBhdCB0aGUgcmVjaXBlIGxldmVsCiAgICAgICAgbGljZW5zZV90
eXBlcyA9IGQuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkKCiAgICAjIEFsbCB0aGUgbGljZW5zZSBm
aWxlcyBmb3IgdGhlIHBhY2thZ2UKICAgIGxpY19maWxlcyA9IGQuZ2V0VmFyKCdMSUNfRklMRVNf
Q0hLU1VNJywgVHJ1ZSkKICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKICAgICMgVGhlIGJh
c2UgZGlyZWN0b3J5IHdlIHdyYW5nbGUgbGljZW5zZXMgdG8KICAgIGRlc3RkaXIgPSBvcy5wYXRo
LmpvaW4oZC5nZXRWYXIoJ0xJQ1NTVEFURURJUicsIFRydWUpLCBwbikKICAgICMgVGhlIGxpY2Vu
c2UgZmlsZXMgYXJlIGxvY2F0ZWQgaW4gUy9MSUNfRklMRV9DSEVDS1NVTS4KICAgIHNyY2RpciA9
IGQuZ2V0VmFyKCdTJywgVHJ1ZSkKICAgICMgRGlyZWN0b3J5IHdlIHN0b3JlIHRoZSBnZW5lcmlj
IGxpY2Vuc2VzIGFzIHNldCBpbiB0aGUgZGlzdHJvIGNvbmZpZ3VyYXRpb24KICAgIGdlbmVyaWNf
ZGlyZWN0b3J5ID0gZC5nZXRWYXIoJ0NPTU1PTl9MSUNFTlNFX0RJUicsIFRydWUpCiAgICBsaWNl
bnNlX3NvdXJjZV9kaXJzID0gW10KICAgIGxpY2Vuc2Vfc291cmNlX2RpcnMuYXBwZW5kKGdlbmVy
aWNfZGlyZWN0b3J5KQogICAgdHJ5OgogICAgICAgIGFkZGl0aW9uYWxfbGljX2RpcnMgPSBkLmdl
dFZhcignTElDRU5TRV9QQVRIJywgVHJ1ZSkuc3BsaXQoKQogICAgICAgIGZvciBsaWNfZGlyIGlu
IGFkZGl0aW9uYWxfbGljX2RpcnM6CiAgICAgICAgICAgIGxpY2Vuc2Vfc291cmNlX2RpcnMuYXBw
ZW5kKGxpY19kaXIpCiAgICBleGNlcHQ6CiAgICAgICAgcGFzcwoKICAgIGNsYXNzIEZpbmRWaXNp
dG9yKG9lLmxpY2Vuc2UuTGljZW5zZVZpc2l0b3IpOgogICAgICAgIGRlZiB2aXNpdF9TdHIoc2Vs
Ziwgbm9kZSk6CiAgICAgICAgICAgICMKICAgICAgICAgICAgIyBVbnRpbCBJIGZpZ3VyZSBvdXQg
d2hhdCB0byBkbyB3aXRoCiAgICAgICAgICAgICMgdGhlIHR3byBtb2RpZmllcnMgSSBzdXBwb3J0
IChvciBncmVhdGVyID0gKwogICAgICAgICAgICAjIGFuZCAid2l0aCBleGNlcHRpb25zIiBiZWlu
ZyAqCiAgICAgICAgICAgICMgd2UnbGwganVzdCBzdHJpcCBvdXQgdGhlIG1vZGlmaWVyIGFuZCBw
dXQKICAgICAgICAgICAgIyB0aGUgYmFzZSBsaWNlbnNlLgogICAgICAgICAgICBmaW5kX2xpY2Vu
c2Uobm9kZS5zLnJlcGxhY2UoIisiLCAiIikucmVwbGFjZSgiKiIsICIiKSkKICAgICAgICAgICAg
c2VsZi5nZW5lcmljX3Zpc2l0KG5vZGUpCgogICAgZGVmIGZpbmRfbGljZW5zZShsaWNlbnNlX3R5
cGUpOgogICAgICAgIHRyeToKICAgICAgICAgICAgYmIubWtkaXJoaWVyKGdlbl9saWNfZGVzdCkK
ICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHBhc3MKICAgICAgICBzcGR4X2dlbmVyaWMgPSBO
b25lCiAgICAgICAgbGljZW5zZV9zb3VyY2UgPSBOb25lCiAgICAgICAgIyBJZiB0aGUgZ2VuZXJp
YyBkb2VzIG5vdCBleGlzdCB3ZSBuZWVkIHRvIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBT
UERYIG1hcHBpbmcgdG8gaXQKICAgICAgICBmb3IgbGljX2RpciBpbiBsaWNlbnNlX3NvdXJjZV9k
aXJzOgogICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGxpY19k
aXIsIGxpY2Vuc2VfdHlwZSkpOgogICAgICAgICAgICAgICAgaWYgZC5nZXRWYXJGbGFnKCdTUERY
TElDRU5TRU1BUCcsIGxpY2Vuc2VfdHlwZSkgIT0gTm9uZToKICAgICAgICAgICAgICAgICAgICAj
IEdyZWF0LCB0aGVyZSBpcyBhbiBTUERYTElDRU5TRU1BUC4gV2UgY2FuIGNvcHkhCiAgICAgICAg
ICAgICAgICAgICAgYmIuZGVidWcoMSwgIldlIG5lZWQgdG8gdXNlIGEgU1BEWExJQ0VOU0VNQVAg
Zm9yICVzIiAlIChsaWNlbnNlX3R5cGUpKQogICAgICAgICAgICAgICAgICAgIHNwZHhfZ2VuZXJp
YyA9IGQuZ2V0VmFyRmxhZygnU1BEWExJQ0VOU0VNQVAnLCBsaWNlbnNlX3R5cGUpCiAgICAgICAg
ICAgICAgICAgICAgbGljZW5zZV9zb3VyY2UgPSBsaWNfZGlyCiAgICAgICAgICAgICAgICAgICAg
YnJlYWsKICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4obGljX2Rp
ciwgbGljZW5zZV90eXBlKSk6CiAgICAgICAgICAgICAgICBzcGR4X2dlbmVyaWMgPSBsaWNlbnNl
X3R5cGUKICAgICAgICAgICAgICAgIGxpY2Vuc2Vfc291cmNlID0gbGljX2RpcgogICAgICAgICAg
ICAgICAgYnJlYWsKCiAgICAgICAgaWYgc3BkeF9nZW5lcmljIGFuZCBsaWNlbnNlX3NvdXJjZToK
ICAgICAgICAgICAgIyB3ZSByZWFsbHkgc2hvdWxkIGNvcHkgdG8gZ2VuZXJpY18gKyBzcGR4X2dl
bmVyaWMsIGhvd2V2ZXIsIHRoYXQgZW5kcyB1cCBtZXNzaW5nIHRoZSBtYW5pZmVzdAogICAgICAg
ICAgICAjIGF1ZGl0IHVwLiBUaGlzIHNob3VsZCBiZSBmaXhlZCBpbiBlbWl0X3BrZ2RhdGEgKG9y
LCB3ZSBhY3R1YWxseSBnb3QgYW5kIGZpeCBhbGwgdGhlIHJlY2lwZXMpCgogICAgICAgICAgICBi
Yi5jb3B5ZmlsZShvcy5wYXRoLmpvaW4obGljZW5zZV9zb3VyY2UsIHNwZHhfZ2VuZXJpYyksIG9z
LnBhdGguam9pbihvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0xJQ1NTVEFURURJUicsIFRydWUpLCBw
biksICJnZW5lcmljXyIgKyBsaWNlbnNlX3R5cGUpKQogICAgICAgICAgICBpZiBub3Qgb3MucGF0
aC5pc2ZpbGUob3MucGF0aC5qb2luKG9zLnBhdGguam9pbihkLmdldFZhcignTElDU1NUQVRFRElS
JywgVHJ1ZSksIHBuKSwgImdlbmVyaWNfIiArIGxpY2Vuc2VfdHlwZSkpOgogICAgICAgICAgICAj
IElmIHRoZSBjb3B5IGRpZG4ndCBvY2N1ciwgc29tZXRoaW5nIGhvcnJpYmxlIHdlbnQgd3Jvbmcg
YW5kIHdlIGZhaWwgb3V0CiAgICAgICAgICAgICAgICBiYi53YXJuKCIlcyBmb3IgJXMgY291bGQg
bm90IGJlIGNvcGllZCBmb3Igc29tZSByZWFzb24uIEl0IG1heSBub3QgZXhpc3QuIFdBUk4gZm9y
IG5vdy4iICUgKHNwZHhfZ2VuZXJpYywgcG4pKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgICMg
QW5kIGhlcmUgaXMgd2hlcmUgd2Ugd2FybiBwZW9wbGUgdGhhdCB0aGVpciBsaWNlbnNlcyBhcmUg
bG91c3kKICAgICAgICAgICAgYmIud2FybigiJXM6IE5vIGdlbmVyaWMgbGljZW5zZSBmaWxlIGV4
aXN0cyBmb3I6ICVzIGluIGFueSBwcm92aWRlciIgJSAocG4sIGxpY2Vuc2VfdHlwZSkpCiAgICAg
ICAgICAgIHBhc3MKCiAgICB0cnk6CiAgICAgICAgYmIubWtkaXJoaWVyKGRlc3RkaXIpCiAgICBl
eGNlcHQ6CiAgICAgICAgcGFzcwoKICAgIGlmIG5vdCBnZW5lcmljX2RpcmVjdG9yeToKICAgICAg
ICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJDT01NT05fTElDRU5TRV9ESVIgaXMgdW5zZXQu
IFBsZWFzZSBzZXQgdGhpcyBpbiB5b3VyIGRpc3RybyBjb25maWciKQoKICAgIGlmIG5vdCBsaWNf
ZmlsZXM6CiAgICAgICAgIyBObyByZWNpcGUgc2hvdWxkIGhhdmUgYW4gaW52YWxpZCBsaWNlbnNl
IGZpbGUuIFRoaXMgaXMgY2hlY2tlZCBlbHNlCiAgICAgICAgIyB3aGVyZSwgYnV0IGxldCdzIGJl
IHBlZGFudGljCiAgICAgICAgYmIubm90ZShwbiArICI6IFJlY2lwZSBmaWxlIGRvZXMgbm90IGhh
dmUgbGljZW5zZSBmaWxlIGluZm9ybWF0aW9uLiIpCiAgICAgICAgcmV0dXJuIFRydWUKCiAgICBm
b3IgdXJsIGluIGxpY19maWxlcy5zcGxpdCgpOgogICAgICAgICh0eXBlLCBob3N0LCBwYXRoLCB1
c2VyLCBwc3dkLCBwYXJtKSA9IGJiLmRlY29kZXVybCh1cmwpCiAgICAgICAgIyBXZSB3YW50IHRo
ZSBsaWNlbnNlIGZpbGUgdG8gYmUgY29waWVkIGludG8gdGhlIGRlc3RpbmF0aW9uCiAgICAgICAg
c3JjbGljZmlsZSA9IG9zLnBhdGguam9pbihzcmNkaXIsIHBhdGgpCiAgICAgICAgcmV0ID0gYmIu
Y29weWZpbGUoc3JjbGljZmlsZSwgb3MucGF0aC5qb2luKGRlc3RkaXIsIG9zLnBhdGguYmFzZW5h
bWUocGF0aCkpKQogICAgICAgICMgSWYgdGhlIGNvcHkgZGlkbid0IG9jY3VyLCBzb21ldGhpbmcg
aG9ycmlibGUgd2VudCB3cm9uZyBhbmQgd2UgZmFpbCBvdXQKICAgICAgICBpZiBub3QgcmV0Ogog
ICAgICAgICAgICBiYi53YXJuKCIlcyBjb3VsZCBub3QgYmUgY29waWVkIGZvciBzb21lIHJlYXNv
bi4gSXQgbWF5IG5vdCBleGlzdC4gV0FSTiBmb3Igbm93LiIgJSBzcmNsaWNmaWxlKQoKICAgIHYg
PSBGaW5kVmlzaXRvcigpCiAgICB0cnk6CiAgICAgICAgdi52aXNpdF9zdHJpbmcobGljZW5zZV90
eXBlcykKICAgIGV4Y2VwdCBvZS5saWNlbnNlLkludmFsaWRMaWNlbnNlIGFzIGV4YzoKICAgICAg
ICBiYi5mYXRhbCgnJXM6ICVzJyAlIChkLmdldFZhcignUEYnLCBUcnVlKSwgZXhjKSkKICAgIGV4
Y2VwdCBTeW50YXhFcnJvcjoKICAgICAgICBiYi53YXJuKCIlczogRmFpbGVkIHRvIHBhcnNlIGl0
J3MgTElDRU5TRSBmaWVsZC4iICUgKGQuZ2V0VmFyKCdQRicsIFRydWUpKSkKCn0KCgpweXRob24g
c3N0YXRlX2NoZWNraGFzaGVzICgpIHsKZGVmIHNzdGF0ZV9jaGVja2hhc2hlcyhzcV9mbiwgc3Ff
dGFzaywgc3FfaGFzaCwgc3FfaGFzaGZuLCBkKToKCiAgICByZXQgPSBbXQogICAgbWFwcGluZyA9
IHt9CiAgICBmb3IgdCBpbiBkLmdldFZhcigiU1NUQVRFVEFTS1MiLCBUcnVlKS5zcGxpdCgpOgog
ICAgICAgIG1hcHBpbmdbdF0gPSBkLmdldFZhckZsYWcodCwgInNzdGF0ZS1uYW1lIiwgVHJ1ZSkK
ICAgIGZvciBleHRyYSBpbiBkLmdldFZhcigiRVhUUkFTU1RBVEVNQVBTIiwgVHJ1ZSkuc3BsaXQo
KToKICAgICAgICBlID0gZXh0cmEuc3BsaXQoIjoiKQogICAgICAgIG1hcHBpbmdbZVswXV0gPSBl
WzFdCgogICAgZm9yIHRhc2sgaW4gcmFuZ2UobGVuKHNxX2ZuKSk6CiAgICAgICAgc3BlYyA9IHNx
X2hhc2hmblt0YXNrXS5zcGxpdCgiICIpWzFdCiAgICAgICAgZXh0cmFwYXRoID0gc3FfaGFzaGZu
W3Rhc2tdLnNwbGl0KCIgIilbMF0KCiAgICAgICAgc3N0YXRlZmlsZSA9IGQuZXhwYW5kKCIvaG9t
ZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi9zc3RhdGUtY2FjaGUvIiAr
IGV4dHJhcGF0aCArIGdlbmVyYXRlX3NzdGF0ZWZuKHNwZWMsIHNxX2hhc2hbdGFza10sIGQpICsg
Il8iICsgbWFwcGluZ1tzcV90YXNrW3Rhc2tdXSArICIudGd6IikKICAgICAgICBpZiBvcy5wYXRo
LmV4aXN0cyhzc3RhdGVmaWxlKToKICAgICAgICAgICAgYmIuZGVidWcoMiwgIlNTdGF0ZTogRm91
bmQgdmFsaWQgc3N0YXRlIGZpbGUgJXMiICUgc3N0YXRlZmlsZSkKICAgICAgICAgICAgcmV0LmFw
cGVuZCh0YXNrKQogICAgICAgICAgICBjb250aW51ZQogICAgICAgIGVsc2U6CiAgICAgICAgICAg
IGJiLmRlYnVnKDIsICJTU3RhdGU6IExvb2tlZCBmb3IgYnV0IGRpZG4ndCBmaW5kIGZpbGUgJXMi
ICUgc3N0YXRlZmlsZSkKCiAgICBtaXJyb3JzID0gZC5nZXRWYXIoIlNTVEFURV9NSVJST1JTIiwg
VHJ1ZSkKICAgIGlmIG1pcnJvcnM6CiAgICAgICAgIyBDb3B5IHRoZSBkYXRhIG9iamVjdCBhbmQg
b3ZlcnJpZGUgRExfRElSIGFuZCBTUkNfVVJJCiAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5j
cmVhdGVDb3B5KGQpCiAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCgogICAg
ICAgIGRsZGlyID0gbG9jYWxkYXRhLmV4cGFuZCgiL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFu
bnktOC4wL2J1aWxkLWZyaTIvc3N0YXRlLWNhY2hlIikKICAgICAgICBsb2NhbGRhdGEuc2V0VmFy
KCdETF9ESVInLCBkbGRpcikKICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdQUkVNSVJST1JTJywg
bWlycm9ycykKCiAgICAgICAgYmIuZGVidWcoMiwgIlNTdGF0ZSB1c2luZyBwcmVtaXJyb3Igb2Y6
ICVzIiAlIG1pcnJvcnMpCgogICAgICAgIGZvciB0YXNrIGluIHJhbmdlKGxlbihzcV9mbikpOgog
ICAgICAgICAgICBpZiB0YXNrIGluIHJldDoKICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAg
ICAgICAgICBzcGVjID0gc3FfaGFzaGZuW3Rhc2tdLnNwbGl0KCIgIilbMV0KICAgICAgICAgICAg
ZXh0cmFwYXRoID0gc3FfaGFzaGZuW3Rhc2tdLnNwbGl0KCIgIilbMF0KICAgICAgICAgICAgc3N0
YXRlZmlsZSA9IGQuZXhwYW5kKGV4dHJhcGF0aCArIGdlbmVyYXRlX3NzdGF0ZWZuKHNwZWMsIHNx
X2hhc2hbdGFza10sIGQpICsgIl8iICsgbWFwcGluZ1tzcV90YXNrW3Rhc2tdXSArICIudGd6IikK
CiAgICAgICAgICAgIHNyY3VyaSA9ICJmaWxlOi8vIiArIHNzdGF0ZWZpbGUKICAgICAgICAgICAg
bG9jYWxkYXRhLnNldFZhcignU1JDX1VSSScsIHNyY3VyaSkKICAgICAgICAgICAgYmIuZGVidWco
MiwgIlNTdGF0ZTogQXR0ZW1wdGluZyB0byBmZXRjaCAlcyIgJSBzcmN1cmkpCgogICAgICAgICAg
ICB0cnk6CiAgICAgICAgICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2gyLkZldGNoKHNyY3VyaS5z
cGxpdCgpLCBsb2NhbGRhdGEpCiAgICAgICAgICAgICAgICBmZXRjaGVyLmNoZWNrc3RhdHVzKCkK
ICAgICAgICAgICAgICAgIGJiLmRlYnVnKDIsICJTU3RhdGU6IFN1Y2Nlc3NmdWwgZmV0Y2ggdGVz
dCBmb3IgJXMiICUgc3JjdXJpKQogICAgICAgICAgICAgICAgcmV0LmFwcGVuZCh0YXNrKQogICAg
ICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICBiYi5kZWJ1ZygyLCAiU1N0YXRlOiBVbnN1
Y2Nlc3NmdWwgZmV0Y2ggdGVzdCBmb3IgJXMiICUgc3JjdXJpKQogICAgICAgICAgICAgICAgcGFz
cwoKICAgIHJldHVybiByZXQKfQoKCnB5dGhvbiBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvciAoKSB7
CmRlZiBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcihlcnJvcl9jbGFzcywgZXJyb3JfbXNnLCBkKToK
ICAgIHBhY2thZ2VfcWFfd3JpdGVfZXJyb3IoZXJyb3JfbXNnLCBkKQogICAgaWYgZXJyb3JfY2xh
c3MgaW4gKGQuZ2V0VmFyKCJFUlJPUl9RQSIsIFRydWUpIG9yICIiKS5zcGxpdCgpOgogICAgICAg
IGJiLmVycm9yKCJRQSBJc3N1ZTogJXMiICUgZXJyb3JfbXNnKQogICAgICAgIHJldHVybiBGYWxz
ZQogICAgZWxzZToKICAgICAgICBiYi53YXJuKCJRQSBJc3N1ZTogJXMiICUgZXJyb3JfbXNnKQog
ICAgICAgIHJldHVybiBUcnVlCn0KCgpweXRob24gZG9fZmV0Y2ggKCkgewogICAgYmIuYnVpbGQu
ZXhlY19mdW5jKCdiYXNlX2RvX2ZldGNoJywgZCkKfQoKCnB5dGhvbiBwYWNrYWdlX3FhX3dyaXRl
X2Vycm9yICgpIHsKZGVmIHBhY2thZ2VfcWFfd3JpdGVfZXJyb3IoZXJyb3IsIGQpOgogICAgbG9n
ZmlsZSA9IGQuZ2V0VmFyKCdRQV9MT0dGSUxFJywgVHJ1ZSkKICAgIGlmIGxvZ2ZpbGU6CiAgICAg
ICAgcCA9IGQuZ2V0VmFyKCdQJywgVHJ1ZSkKICAgICAgICBmID0gZmlsZSggbG9nZmlsZSwgImEr
IikKICAgICAgICBwcmludCA+PiBmLCAiJXM6ICVzIiAlIChwLCBlcnJvcikKICAgICAgICBmLmNs
b3NlKCkKfQoKCnB5dGhvbiBhbGxfbXVsdGlsaWJfdHVuZV92YWx1ZXMgKCkgewpkZWYgYWxsX211
bHRpbGliX3R1bmVfdmFsdWVzKGQsIHZhciwgdW5pcXVlID0gVHJ1ZSwgbmVlZF9zcGxpdCA9IFRy
dWUsIGRlbGltID0gJyAnKToKICAgICIiIlJldHVybiBhIHN0cmluZyBvZiBhbGwgJHt2YXJ9IGlu
IGFsbCBtdWx0aWxpYiB0dW5lIGNvbmZpZ3VyYXRpb24iIiIKICAgIHZhbHVlcyA9IFtdCiAgICB2
YWx1ZSA9IGQuZ2V0VmFyKHZhciwgVHJ1ZSkgb3IgIiIKICAgIGlmIHZhbHVlICE9ICIiOgogICAg
ICAgIGlmIG5lZWRfc3BsaXQ6CiAgICAgICAgICAgIGZvciBpdGVtIGluIHZhbHVlLnNwbGl0KGRl
bGltKToKICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoaXRlbSkKICAgICAgICBlbHNlOgog
ICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKHZhbHVlKQogICAgdmFyaWFudHMgPSBkLmdldFZhcigi
TVVMVElMSUJfVkFSSUFOVFMiLCBUcnVlKSBvciAiIgogICAgZm9yIGl0ZW0gaW4gdmFyaWFudHMu
c3BsaXQoKToKICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKICAgICAg
ICBvdmVycmlkZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyAiOnZp
cnRjbGFzcy1tdWx0aWxpYi0iICsgaXRlbQogICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIk9WRVJS
SURFUyIsIG92ZXJyaWRlcykKICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkK
ICAgICAgICB2YWx1ZSA9IGxvY2FsZGF0YS5nZXRWYXIodmFyLCBUcnVlKSBvciAiIgogICAgICAg
IGlmIHZhbHVlICE9ICIiOgogICAgICAgICAgICBpZiBuZWVkX3NwbGl0OgogICAgICAgICAgICAg
ICAgZm9yIGl0ZW0gaW4gdmFsdWUuc3BsaXQoZGVsaW0pOgogICAgICAgICAgICAgICAgICAgIHZh
bHVlcy5hcHBlbmQoaXRlbSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHZhbHVl
cy5hcHBlbmQodmFsdWUpCiAgICBpZiB1bmlxdWU6CiAgICAgICAgI3dlIGRvIHRoaXMgdG8ga2Vl
cCBvcmRlciBhcyBtdWNoIGFzIHBvc3NpYmxlCiAgICAgICAgcmV0ID0gW10KICAgICAgICBmb3Ig
dmFsdWUgaW4gdmFsdWVzOgogICAgICAgICAgICBpZiBub3QgdmFsdWUgaW4gcmV0OgogICAgICAg
ICAgICAgICAgcmV0LmFwcGVuZCh2YWx1ZSkKICAgIGVsc2U6CiAgICAgICAgcmV0ID0gdmFsdWVz
CiAgICByZXR1cm4gIiAiLmpvaW4ocmV0KX0KCgpweXRob24gc2V0X3RpbWVkYXRhICgpIHsKZGVm
IHNldF90aW1lZGF0YSh2YXIsIGRhdGEpOgogICAgaW1wb3J0IHRpbWUKICAgIHRpbWUgPSB0aW1l
LnRpbWUoKQogICAgY3B1dGltZSA9IGdldF9jcHV0aW1lKCkKICAgIHByb2N0aW1lID0gZ2V0X3By
b2Nlc3NfY3B1dGltZShvcy5nZXRwaWQoKSkKICAgIGRhdGEuc2V0VmFyKHZhciwgKHRpbWUsIGNw
dXRpbWUsIHByb2N0aW1lKSkKfQoKCnB5dGhvbiBwYWNrYWdlX2dldF9hdXRvX3ByICgpIHsKICAg
ICMgcGVyIHJlY2lwZSBQUlNFUlZfSE9TVCBQUlNFUlZfUE9SVAogICAgcG4gPSBkLmdldFZhcign
UE4nLCBUcnVlKQogICAgaG9zdCA9IGQuZ2V0VmFyKCJQUlNFUlZfSE9TVF8iICsgcG4sIFRydWUp
CiAgICBwb3J0ID0gZC5nZXRWYXIoIlBSU0VSVl9QT1JUXyIgKyBwbiwgVHJ1ZSkKICAgIGlmIG5v
dCAoaG9zdCBpcyBOb25lKToKICAgICAgICBkLnNldFZhcigiUFJTRVJWX0hPU1QiLCBob3N0KQog
ICAgaWYgbm90IChwb3J0IGlzIE5vbmUpOgogICAgICAgIGQuc2V0VmFyKCJQUlNFUlZfUE9SVCIs
IHBvcnQpCiAgICBpZiBkLmdldFZhcignVVNFX1BSX1NFUlYnLCBUcnVlKSAhPSAiMCI6CiAgICAg
ICAgdHJ5OgogICAgICAgICAgICBhdXRvX3ByPXByc2Vydl9nZXRfcHJfYXV0byhkKQogICAgICAg
IGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgYmIuZmF0YWwoIkNhbiBOT1QgZ2V0
IFBSQVVUTywgZXhjZXB0aW9uICVzIiAlICBzdHIoZSkpCiAgICAgICAgICAgIHJldHVybgogICAg
ICAgIGlmIGF1dG9fcHIgaXMgTm9uZToKICAgICAgICAgICAgaWYgZC5nZXRWYXIoJ1BSU0VSVl9M
T0NLRE9XTicsIFRydWUpOgogICAgICAgICAgICAgICAgYmIuZmF0YWwoIkNhbiBOT1QgZ2V0IFBS
QVVUTyBmcm9tIGxvY2tkb3duIGV4cG9ydGVkIGZpbGUiKQogICAgICAgICAgICBlbHNlOgogICAg
ICAgICAgICAgICAgYmIuZmF0YWwoIkNhbiBOT1QgZ2V0IFBSQVVUTyBmcm9tIHJlbW90ZSBQUiBz
ZXJ2aWNlIikKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgZC5zZXRWYXIoJ1BSQVVUTycsc3Ry
KGF1dG9fcHIpKQp9CgoKcHl0aG9uIHJlYWRfc2hsaWJkZXBzICgpIHsKICAgIHBrZ2xpYmRlcHMg
PSByZWFkX2xpYmRlcF9maWxlcyhkKQoKICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VT
JywgVHJ1ZSkuc3BsaXQoKQogICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKICAgICAgICByZGVwZW5k
cyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihkLmdldFZhcignUkRFUEVORFNfJyAr
IHBrZywgRmFsc2UpIG9yIGQuZ2V0VmFyKCdSREVQRU5EUycsIEZhbHNlKSBvciAiIikKICAgICAg
ICBmb3IgZGVwIGluIHBrZ2xpYmRlcHNbcGtnXToKICAgICAgICAgICAgIyBBZGQgdGhlIGRlcCBp
ZiBpdCdzIG5vdCBhbHJlYWR5IHRoZXJlLCBvciBpZiBubyBjb21wYXJpc29uIGlzIHNldAogICAg
ICAgICAgICBpZiBkZXAgbm90IGluIHJkZXBlbmRzOgogICAgICAgICAgICAgICAgcmRlcGVuZHNb
ZGVwXSA9IFtdCiAgICAgICAgICAgIGZvciB2IGluIHBrZ2xpYmRlcHNbcGtnXVtkZXBdOgogICAg
ICAgICAgICAgICAgaWYgdiBub3QgaW4gcmRlcGVuZHNbZGVwXToKICAgICAgICAgICAgICAgICAg
ICByZGVwZW5kc1tkZXBdLmFwcGVuZCh2KQogICAgICAgIGQuc2V0VmFyKCdSREVQRU5EU18nICsg
cGtnLCBiYi51dGlscy5qb2luX2RlcHMocmRlcGVuZHMsIGNvbW1hc2VwPUZhbHNlKSkKfQoKCnB5
dGhvbiBiYXNlX2lmZWxzZSAoKSB7CmRlZiBiYXNlX2lmZWxzZShjb25kaXRpb24sIGlmdHJ1ZSA9
IFRydWUsIGlmZmFsc2UgPSBGYWxzZSk6CiAgICByZXR1cm4gb2UudXRpbHMuaWZlbHNlKGNvbmRp
dGlvbiwgaWZ0cnVlLCBpZmZhbHNlKQp9CgoKcHl0aG9uIHBhY2thZ2VfcWFfY2hlY2tfbGljZW5z
ZSAoKSB7CmRlZiBwYWNrYWdlX3FhX2NoZWNrX2xpY2Vuc2Uod29ya2RpciwgZCk6CiAgICAiIiIK
ICAgIENoZWNrIGZvciBjaGFuZ2VzIGluIHRoZSBsaWNlbnNlIGZpbGVzCiAgICAiIiIKICAgIGlt
cG9ydCB0ZW1wZmlsZQogICAgc2FuZSA9IFRydWUKCiAgICBsaWNfZmlsZXMgPSBkLmdldFZhcign
TElDX0ZJTEVTX0NIS1NVTScsIFRydWUpCiAgICBsaWMgPSBkLmdldFZhcignTElDRU5TRScsIFRy
dWUpCiAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCgogICAgaWYgbGljID09ICJDTE9TRUQi
OgogICAgICAgIHJldHVybiBUcnVlCgogICAgaWYgbm90IGxpY19maWxlczoKICAgICAgICAjIGp1
c3QgdGhyb3cgYSB3YXJuaW5nIG5vdy4gT25jZSBsaWNlbnNpbmcgZGF0YSBpbiBlbnRlcmVkIGZv
ciBlbm91Z2ggb2YgdGhlIHJlY2lwZXMsCiAgICAgICAgIyB0aGlzIHdpbGwgYmUgY29udmVydGVk
IGludG8gZXJyb3IgYW5kIEZhbHNlIHdpbGwgYmUgcmV0dXJuZWQuCiAgICAgICAgYmIuZXJyb3Io
cG4gKyAiOiBSZWNpcGUgZmlsZSBkb2VzIG5vdCBoYXZlIGxpY2Vuc2UgZmlsZSBpbmZvcm1hdGlv
biAoTElDX0ZJTEVTX0NIS1NVTSkiKQogICAgICAgIHJldHVybiBGYWxzZQoKICAgIHNyY2RpciA9
IGQuZ2V0VmFyKCdTJywgVHJ1ZSkKCiAgICBmb3IgdXJsIGluIGxpY19maWxlcy5zcGxpdCgpOgog
ICAgICAgICh0eXBlLCBob3N0LCBwYXRoLCB1c2VyLCBwc3dkLCBwYXJtKSA9IGJiLmRlY29kZXVy
bCh1cmwpCiAgICAgICAgc3JjbGljZmlsZSA9IG9zLnBhdGguam9pbihzcmNkaXIsIHBhdGgpCiAg
ICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKHNyY2xpY2ZpbGUpOgogICAgICAgICAgICByYWlz
ZSBiYi5idWlsZC5GdW5jRmFpbGVkKCBwbiArICI6IExJQ19GSUxFU19DSEtTVU0gcG9pbnRzIHRv
IGFuIGludmFsaWQgZmlsZTogIiArIHNyY2xpY2ZpbGUpCgogICAgICAgIGlmICdtZDUnIG5vdCBp
biBwYXJtOgogICAgICAgICAgICBiYi5lcnJvcihwbiArICI6IG1kNSBjaGVja3N1bSBpcyBub3Qg
c3BlY2lmaWVkIGZvciAiLCB1cmwpCiAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgIGJl
Z2lubGluZSwgZW5kbGluZSA9IDAsIDAKICAgICAgICBpZiAnYmVnaW5saW5lJyBpbiBwYXJtOgog
ICAgICAgICAgICBiZWdpbmxpbmUgPSBpbnQocGFybVsnYmVnaW5saW5lJ10pCiAgICAgICAgaWYg
J2VuZGxpbmUnIGluIHBhcm06CiAgICAgICAgICAgIGVuZGxpbmUgPSBpbnQocGFybVsnZW5kbGlu
ZSddKQoKICAgICAgICBpZiAobm90IGJlZ2lubGluZSkgYW5kIChub3QgZW5kbGluZSk6CiAgICAg
ICAgICAgIG1kNWNoa3N1bSA9IGJiLnV0aWxzLm1kNV9maWxlKHNyY2xpY2ZpbGUpCiAgICAgICAg
ZWxzZToKICAgICAgICAgICAgZmkgPSBvcGVuKHNyY2xpY2ZpbGUsICdyJykKICAgICAgICAgICAg
Zm8gPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUobW9kZT0nd2InLCBwcmVmaXg9J3Bva3ku
Jywgc3VmZml4PScudG1wJywgZGVsZXRlPUZhbHNlKQogICAgICAgICAgICB0bXBsaWNmaWxlID0g
Zm8ubmFtZTsKICAgICAgICAgICAgbGluZW5vID0gMAogICAgICAgICAgICBsaW5lc291dCA9IDAK
ICAgICAgICAgICAgZm9yIGxpbmUgaW4gZmk6CiAgICAgICAgICAgICAgICBsaW5lbm8gKz0gMQog
ICAgICAgICAgICAgICAgaWYgKGxpbmVubyA+PSBiZWdpbmxpbmUpOgogICAgICAgICAgICAgICAg
ICAgIGlmICgobGluZW5vIDw9IGVuZGxpbmUpIG9yIG5vdCBlbmRsaW5lKToKICAgICAgICAgICAg
ICAgICAgICAgICAgZm8ud3JpdGUobGluZSkKICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNv
dXQgKz0gMQogICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrCiAgICAgICAgICAgIGZvLmZsdXNoKCkKICAgICAgICAgICAgZm8uY2xvc2UoKQogICAg
ICAgICAgICBmaS5jbG9zZSgpCiAgICAgICAgICAgIG1kNWNoa3N1bSA9IGJiLnV0aWxzLm1kNV9m
aWxlKHRtcGxpY2ZpbGUpCiAgICAgICAgICAgIG9zLnVubGluayh0bXBsaWNmaWxlKQoKICAgICAg
ICBpZiBwYXJtWydtZDUnXSA9PSBtZDVjaGtzdW06CiAgICAgICAgICAgIGJiLm5vdGUgKHBuICsg
IjogbWQ1IGNoZWNrc3VtIG1hdGNoZWQgZm9yICIsIHVybCkKICAgICAgICBlbHNlOgogICAgICAg
ICAgICBiYi5lcnJvciAocG4gKyAiOiBtZDUgZGF0YSBpcyBub3QgbWF0Y2hpbmcgZm9yICIsIHVy
bCkKICAgICAgICAgICAgYmIuZXJyb3IgKHBuICsgIjogVGhlIG5ldyBtZDUgY2hlY2tzdW0gaXMg
IiwgbWQ1Y2hrc3VtKQogICAgICAgICAgICBiYi5lcnJvciAocG4gKyAiOiBDaGVjayBpZiB0aGUg
bGljZW5zZSBpbmZvcm1hdGlvbiBoYXMgY2hhbmdlZCBpbiIpCiAgICAgICAgICAgIHNhbmUgPSBG
YWxzZQoKICAgIHJldHVybiBzYW5lCn0KCgpweXRob24gYmFzZV9kb19mZXRjaCAoKSB7CgogICAg
c3JjX3VyaSA9IChkLmdldFZhcignU1JDX1VSSScsIFRydWUpIG9yICIiKS5zcGxpdCgpCiAgICBp
ZiBsZW4oc3JjX3VyaSkgPT0gMDoKICAgICAgICByZXR1cm4KCiAgICBsb2NhbGRhdGEgPSBiYi5k
YXRhLmNyZWF0ZUNvcHkoZCkKICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQoKICAg
IHRyeToKICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2gyLkZldGNoKHNyY191cmksIGxvY2FsZGF0
YSkKICAgICAgICBmZXRjaGVyLmRvd25sb2FkKCkKICAgIGV4Y2VwdCBiYi5mZXRjaDIuQkJGZXRj
aEV4Y2VwdGlvbiwgZToKICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKGUpCn0KCgpw
eXRob24gZG9fcGFja2FnZV9xYSAoKSB7CiAgICBpbXBvcnQgc3VicHJvY2VzcwoKICAgIGJiLm5v
dGUoIkRPIFBBQ0tBR0UgUUEiKQoKICAgIGxvZ2RpciA9IGQuZ2V0VmFyKCdUJywgVHJ1ZSkKICAg
IHBrZyA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCgogICAgIyBDaGVjayB0aGUgY29tcGlsZSBsb2cg
Zm9yIGhvc3QgY29udGFtaW5hdGlvbgogICAgY29tcGlsZWxvZyA9IG9zLnBhdGguam9pbihsb2dk
aXIsImxvZy5kb19jb21waWxlIikKCiAgICBpZiBvcy5wYXRoLmV4aXN0cyhjb21waWxlbG9nKToK
ICAgICAgICBzdGF0ZW1lbnQgPSAiZ3JlcCAtZSAnQ1JPU1MgQ09NUElMRSBCYWRuZXNzOicgLWUg
J2lzIHVuc2FmZSBmb3IgY3Jvc3MtY29tcGlsYXRpb24nICVzID4gL2Rldi9udWxsIiAlIGNvbXBp
bGVsb2cKICAgICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoc3RhdGVtZW50LCBzaGVsbD1UcnVlKSA9
PSAwOgogICAgICAgICAgICBiYi53YXJuKCIlczogVGhlIGNvbXBpbGUgbG9nIGluZGljYXRlcyB0
aGF0IGhvc3QgaW5jbHVkZSBhbmQvb3IgbGlicmFyeSBwYXRocyB3ZXJlIHVzZWQuXG4gXAogICAg
ICAgIFBsZWFzZSBjaGVjayB0aGUgbG9nICclcycgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAlIChw
a2csIGNvbXBpbGVsb2cpKQoKICAgICMgQ2hlY2sgdGhlIGluc3RhbGwgbG9nIGZvciBob3N0IGNv
bnRhbWluYXRpb24KICAgIGluc3RhbGxsb2cgPSBvcy5wYXRoLmpvaW4obG9nZGlyLCJsb2cuZG9f
aW5zdGFsbCIpCgogICAgaWYgb3MucGF0aC5leGlzdHMoaW5zdGFsbGxvZyk6CiAgICAgICAgc3Rh
dGVtZW50ID0gImdyZXAgLWUgJ0NST1NTIENPTVBJTEUgQmFkbmVzczonIC1lICdpcyB1bnNhZmUg
Zm9yIGNyb3NzLWNvbXBpbGF0aW9uJyAlcyA+IC9kZXYvbnVsbCIgJSBpbnN0YWxsbG9nCiAgICAg
ICAgaWYgc3VicHJvY2Vzcy5jYWxsKHN0YXRlbWVudCwgc2hlbGw9VHJ1ZSkgPT0gMDoKICAgICAg
ICAgICAgYmIud2FybigiJXM6IFRoZSBpbnN0YWxsIGxvZyBpbmRpY2F0ZXMgdGhhdCBob3N0IGlu
Y2x1ZGUgYW5kL29yIGxpYnJhcnkgcGF0aHMgd2VyZSB1c2VkLlxuIFwKICAgICAgICBQbGVhc2Ug
Y2hlY2sgdGhlIGxvZyAnJXMnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgJSAocGtnLCBpbnN0YWxs
bG9nKSkKCiAgICAjIFNjYW4gdGhlIHBhY2thZ2VzLi4uCiAgICBwa2dkZXN0ID0gZC5nZXRWYXIo
J1BLR0RFU1QnLCBUcnVlKQogICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVl
KQoKICAgICMgbm8gcGFja2FnZXMgc2hvdWxkIGJlIHNjYW5uZWQKICAgIGlmIG5vdCBwYWNrYWdl
czoKICAgICAgICByZXR1cm4KCiAgICB0ZXN0bWF0cml4ID0gZC5nZXRWYXJGbGFncygiUUFQQVRI
VEVTVCIpCgogICAgZyA9IGdsb2JhbHMoKQogICAgd2Fsa19zYW5lID0gVHJ1ZQogICAgcmRlcGVu
ZHNfc2FuZSA9IFRydWUKICAgIGRlcHNfc2FuZSA9IFRydWUKICAgIGZvciBwYWNrYWdlIGluIHBh
Y2thZ2VzLnNwbGl0KCk6CiAgICAgICAgc2tpcCA9IChkLmdldFZhcignSU5TQU5FX1NLSVBfJyAr
IHBhY2thZ2UsIFRydWUpIG9yICIiKS5zcGxpdCgpCiAgICAgICAgaWYgc2tpcDoKICAgICAgICAg
ICAgYmIubm90ZSgiUGFja2FnZSAlcyBza2lwcGluZyBRQSB0ZXN0czogJXMiICUgKHBhY2thZ2Us
IHN0cihza2lwKSkpCiAgICAgICAgd2FybmNoZWNrcyA9IFtdCiAgICAgICAgZm9yIHcgaW4gKGQu
Z2V0VmFyKCJXQVJOX1FBIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CiAgICAgICAgICAgIGlmIHcg
aW4gc2tpcDoKICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgaWYgdyBpbiB0ZXN0
bWF0cml4IGFuZCB0ZXN0bWF0cml4W3ddIGluIGc6CiAgICAgICAgICAgICAgICB3YXJuY2hlY2tz
LmFwcGVuZChnW3Rlc3RtYXRyaXhbd11dKQogICAgICAgIGVycm9yY2hlY2tzID0gW10KICAgICAg
ICBmb3IgZSBpbiAoZC5nZXRWYXIoIkVSUk9SX1FBIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CiAg
ICAgICAgICAgIGlmIGUgaW4gc2tpcDoKICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAg
ICAgaWYgZSBpbiB0ZXN0bWF0cml4IGFuZCB0ZXN0bWF0cml4W2VdIGluIGc6CiAgICAgICAgICAg
ICAgICBlcnJvcmNoZWNrcy5hcHBlbmQoZ1t0ZXN0bWF0cml4W2VdXSkKCiAgICAgICAgYmIubm90
ZSgiQ2hlY2tpbmcgUGFja2FnZTogJXMiICUgcGFja2FnZSkKICAgICAgICBwYXRoID0gIiVzLyVz
IiAlIChwa2dkZXN0LCBwYWNrYWdlKQogICAgICAgIGlmIG5vdCBwYWNrYWdlX3FhX3dhbGsocGF0
aCwgd2FybmNoZWNrcywgZXJyb3JjaGVja3MsIHNraXAsIHBhY2thZ2UsIGQpOgogICAgICAgICAg
ICB3YWxrX3NhbmUgID0gRmFsc2UKICAgICAgICBpZiBub3QgcGFja2FnZV9xYV9jaGVja19yZGVw
ZW5kcyhwYWNrYWdlLCBwa2dkZXN0LCBza2lwLCBkKToKICAgICAgICAgICAgcmRlcGVuZHNfc2Fu
ZSA9IEZhbHNlCiAgICAgICAgaWYgbm90IHBhY2thZ2VfcWFfY2hlY2tfZGVwcyhwYWNrYWdlLCBw
a2dkZXN0LCBza2lwLCBkKToKICAgICAgICAgICAgZGVwc19zYW5lID0gRmFsc2UKCgogICAgaWYg
J2xpYmRpcicgaW4gZC5nZXRWYXIoIkFMTF9RQSIsIFRydWUpLnNwbGl0KCk6CiAgICAgICAgcGFj
a2FnZV9xYV9jaGVja19saWJkaXIoZCkKCiAgICBpZiBub3Qgd2Fsa19zYW5lIG9yIG5vdCByZGVw
ZW5kc19zYW5lIG9yIG5vdCBkZXBzX3NhbmU6CiAgICAgICAgYmIuZmF0YWwoIlFBIHJ1biBmb3Vu
ZCBmYXRhbCBlcnJvcnMuIFBsZWFzZSBjb25zaWRlciBmaXhpbmcgdGhlbS4iKQogICAgYmIubm90
ZSgiRE9ORSB3aXRoIFBBQ0tBR0UgUUEiKQp9CgoKcHl0aG9uIGRvX3BvcHVsYXRlX3N5c3Jvb3Qg
KCkgewogICAgIwogICAgIyBpZiBkb19zdGFnZSBleGlzdHMsIHdlJ3JlIGxlZ2FjeS4gSW4gdGhh
dCBjYXNlIHJ1biB0aGUgZG9fc3RhZ2UsCiAgICAjIG1vZGlmeSB0aGUgU1lTUk9PVF9ERVNURElS
IHZhcmlhYmxlIGFuZCB0aGVuIHJ1biB0aGUgc3RhZ2luZyBwcmVwcm9jZXNzCiAgICAjIGZ1bmN0
aW9ucyBhZ2FpbnN0IHN0YWdpbmcgZGlyZWN0bHkuCiAgICAjCiAgICAjIE90aGVyd2lzZSBzZXR1
cCBhIGRlc3RkaXIsIGNvcHkgdGhlIHJlc3VsdHMgZnJvbSBkb19pbnN0YWxsCiAgICAjIGFuZCBy
dW4gdGhlIHN0YWdpbmcgcHJlcHJvY2VzcyBhZ2FpbnN0IHRoYXQKICAgICMKCiAgICBiYi5idWls
ZC5leGVjX2Z1bmMoInN5c3Jvb3Rfc3RhZ2VfYWxsIiwgZCkKICAgIGZvciBmIGluIChkLmdldFZh
cignU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCk6CiAgICAg
ICAgYmIuYnVpbGQuZXhlY19mdW5jKGYsIGQpCn0KCgpweXRob24gX19hbm9ueW1vdXMgKCkgewpO
b25lfQoKCnB5dGhvbiBiYXNlX3BydW5lX3N1ZmZpeCAoKSB7CmRlZiBiYXNlX3BydW5lX3N1ZmZp
eCh2YXIsIHN1ZmZpeGVzLCBkKToKICAgIHJldHVybiBvZS51dGlscy5wcnVuZV9zdWZmaXgodmFy
LCBzdWZmaXhlcywgZCkKfQoKCnB5dGhvbiBkb19wYWNrYWdlX3JwbSAoKSB7CiAgICBkZWYgY3Jl
YXRfc3JwbV9kaXIoZCk6CiAgICAgICAgaWYgZC5nZXRWYXIoJ1NPVVJDRV9BUkNISVZFX1BBQ0tB
R0VfVFlQRScsIFRydWUpID09ICdzcnBtJzoKICAgICAgICAgICAgY2xlYW5fbGljZW5zZXMgPSBn
ZXRfbGljZW5zZXMoZCkKICAgICAgICAgICAgcGtnd3JpdGVzcnBtZGlyID0gYmIuZGF0YS5leHBh
bmQoJy9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3RtcC9kZXBs
b3kvc291cmNlcy9kZXBsb3ktc3JwbS8ke1BBQ0tBR0VfQVJDSF9FWFRFTkR9JywgZCkKICAgICAg
ICAgICAgcGtnd3JpdGVzcnBtZGlyID0gcGtnd3JpdGVzcnBtZGlyICsgJy8nICsgY2xlYW5fbGlj
ZW5zZXMKICAgICAgICAgICAgYmIubWtkaXJoaWVyKHBrZ3dyaXRlc3JwbWRpcikKICAgICAgICAg
ICAgb3MuY2htb2QocGtnd3JpdGVzcnBtZGlyLCAwNzU1KQogICAgICAgICAgICByZXR1cm4gcGtn
d3JpdGVzcnBtZGlyCgogICAgIyBXZSBuZWVkIGEgc2ltcGxlIHdheSB0byByZW1vdmUgdGhlIE1M
UFJFRklYIGZyb20gdGhlIHBhY2thZ2UgbmFtZSwKICAgICMgYW5kIGRlcGVuZGVuY3kgaW5mb3Jt
YXRpb24uLi4KICAgIGRlZiBzdHJpcF9tdWx0aWxpYihuYW1lLCBkKToKICAgICAgICBtbCA9IGQu
Z2V0VmFyKCJNTFBSRUZJWCIsIFRydWUpCiAgICAgICAgaWYgbWwgYW5kIG5hbWUgYW5kIGxlbiht
bCkgIT0gMCBhbmQgbmFtZS5maW5kKG1sKSA+PSAwOgogICAgICAgICAgICByZXR1cm4gIiIuam9p
bihuYW1lLnNwbGl0KG1sKSkKICAgICAgICByZXR1cm4gbmFtZQoKICAgIHdvcmtkaXIgPSBkLmdl
dFZhcignV09SS0RJUicsIFRydWUpCiAgICBvdXRkaXIgPSBkLmdldFZhcignREVQTE9ZX0RJUl9J
UEsnLCBUcnVlKQogICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCiAgICBwa2dk
ID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQogICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNU
JywgVHJ1ZSkKICAgIGlmIG5vdCB3b3JrZGlyIG9yIG5vdCBvdXRkaXIgb3Igbm90IHBrZ2Qgb3Ig
bm90IHRtcGRpcjoKICAgICAgICBiYi5lcnJvcigiVmFyaWFibGVzIGluY29ycmVjdGx5IHNldCwg
dW5hYmxlIHRvIHBhY2thZ2UiKQogICAgICAgIHJldHVybgoKICAgIHBhY2thZ2VzID0gZC5nZXRW
YXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKICAgIGlmIG5vdCBwYWNrYWdlcyBvciBwYWNrYWdlcyA9PSAn
JzoKICAgICAgICBiYi5kZWJ1ZygxLCAiTm8gcGFja2FnZXM7IG5vdGhpbmcgdG8gZG8iKQogICAg
ICAgIHJldHVybgoKICAgICMgQ29uc3RydWN0IHRoZSBzcGVjIGZpbGUuLi4KICAgIHNyY25hbWUg
ICAgPSBzdHJpcF9tdWx0aWxpYihkLmdldFZhcignUE4nLCBUcnVlKSwgZCkKICAgIG91dHNwZWNm
aWxlID0gd29ya2RpciArICIvIiArIHNyY25hbWUgKyAiLnNwZWMiCiAgICBkLnNldFZhcignT1VU
U1BFQ0ZJTEUnLCBvdXRzcGVjZmlsZSkKICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnd3JpdGVfc3Bl
Y2ZpbGUnLCBkKQoKICAgICMgQ29uc3RydWN0IHBlciBmaWxlIGRlcGVuZGVuY2llcyBmaWxlCiAg
ICBkZWYgZHVtcF9maWxlcmRlcHModmFybmFtZSwgb3V0ZmlsZSwgZCk6CiAgICAgICAgb3V0Zmls
ZS53cml0ZSgiIyEvdXNyL2Jpbi9lbnYgcHl0aG9uXG5cbiIpCiAgICAgICAgb3V0ZmlsZS53cml0
ZSgiIyBEZXBlbmRlbmN5IHRhYmxlXG4iKQogICAgICAgIG91dGZpbGUud3JpdGUoJ2RlcHMgPSB7
XG4nKQogICAgICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKICAgICAgICAgICAgZGVw
ZW5kc2ZsaXN0X2tleSA9ICdGSUxFJyArIHZhcm5hbWUgKyAnRkxJU1QnICsgIl8iICsgcGtnCiAg
ICAgICAgICAgIGRlcGVuZHNmbGlzdCA9IChkLmdldFZhcihkZXBlbmRzZmxpc3Rfa2V5LCBUcnVl
KSBvciAiIikKICAgICAgICAgICAgZm9yIGRmaWxlIGluIGRlcGVuZHNmbGlzdC5zcGxpdCgpOgog
ICAgICAgICAgICAgICAga2V5ID0gIkZJTEUiICsgdmFybmFtZSArICJfIiArIGRmaWxlICsgIl8i
ICsgcGtnCiAgICAgICAgICAgICAgICBkZXBlbmRzX2RpY3QgPSBiYi51dGlscy5leHBsb2RlX2Rl
cF92ZXJzaW9ucyhkLmdldFZhcihrZXksIFRydWUpIG9yICIiKQogICAgICAgICAgICAgICAgZmls
ZSA9IGRmaWxlLnJlcGxhY2UoIkB1bmRlcnNjb3JlQCIsICJfIikKICAgICAgICAgICAgICAgIGZp
bGUgPSBmaWxlLnJlcGxhY2UoIkBjbG9zZWJyYWNlQCIsICJdIikKICAgICAgICAgICAgICAgIGZp
bGUgPSBmaWxlLnJlcGxhY2UoIkBvcGVuYnJhY2VAIiwgIlsiKQogICAgICAgICAgICAgICAgZmls
ZSA9IGZpbGUucmVwbGFjZSgiQHRhYkAiLCAiXHQiKQogICAgICAgICAgICAgICAgZmlsZSA9IGZp
bGUucmVwbGFjZSgiQHNwYWNlQCIsICIgIikKICAgICAgICAgICAgICAgIGZpbGUgPSBmaWxlLnJl
cGxhY2UoIkBhdEAiLCAiQCIpCiAgICAgICAgICAgICAgICBvdXRmaWxlLndyaXRlKCciJyArIHBr
Z2QgKyBmaWxlICsgJyIgOiAiJykKICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwZW5kc19k
aWN0OgogICAgICAgICAgICAgICAgICAgIHZlciA9IGRlcGVuZHNfZGljdFtkZXBdCiAgICAgICAg
ICAgICAgICAgICAgaWYgZGVwIGFuZCB2ZXI6CiAgICAgICAgICAgICAgICAgICAgICAgIHZlciA9
IHZlci5yZXBsYWNlKCIoIiwiIikKICAgICAgICAgICAgICAgICAgICAgICAgdmVyID0gdmVyLnJl
cGxhY2UoIikiLCIiKQogICAgICAgICAgICAgICAgICAgICAgICBvdXRmaWxlLndyaXRlKGRlcCAr
ICIgIiArIHZlciArICIgIikKICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAg
ICAgICAgICAgICBvdXRmaWxlLndyaXRlKGRlcCArICIgIikKICAgICAgICAgICAgICAgIG91dGZp
bGUud3JpdGUoJyIsXG4nKQogICAgICAgIG91dGZpbGUud3JpdGUoJ31cblxuJykKICAgICAgICBv
dXRmaWxlLndyaXRlKCJpbXBvcnQgc3lzXG4iKQogICAgICAgIG91dGZpbGUud3JpdGUoIndoaWxl
IDE6XG4iKQogICAgICAgIG91dGZpbGUud3JpdGUoIlx0bGluZSA9IHN5cy5zdGRpbi5yZWFkbGlu
ZSgpLnN0cmlwKClcbiIpCiAgICAgICAgb3V0ZmlsZS53cml0ZSgiXHRpZiBub3QgbGluZTpcbiIp
CiAgICAgICAgb3V0ZmlsZS53cml0ZSgiXHRcdHN5cy5leGl0KDApXG4iKQogICAgICAgIG91dGZp
bGUud3JpdGUoIlx0aWYgbGluZSBpbiBkZXBzOlxuIikKICAgICAgICBvdXRmaWxlLndyaXRlKCJc
dFx0cHJpbnQoZGVwc1tsaW5lXSArICdcXG4nKVxuIikKCiAgICAjIE9FLWNvcmUgZGVwZW5kZW5j
aWVzIGEuay5hLiBSUE0gcmVxdWlyZXMKICAgIG91dGRlcGVuZHMgPSB3b3JrZGlyICsgIi8iICsg
c3JjbmFtZSArICIucmVxdWlyZXMiCgogICAgdHJ5OgogICAgICAgIGZyb20gX19idWlsdGluX18g
aW1wb3J0IGZpbGUKICAgICAgICBkZXBlbmRzZmlsZSA9IGZpbGUob3V0ZGVwZW5kcywgJ3cnKQog
ICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5h
YmxlIHRvIG9wZW4gc3BlYyBmaWxlIGZvciB3cml0aW5nLiIpCgogICAgZHVtcF9maWxlcmRlcHMo
J1JERVBFTkRTJywgZGVwZW5kc2ZpbGUsIGQpCgogICAgZGVwZW5kc2ZpbGUuY2xvc2UoKQogICAg
b3MuY2htb2Qob3V0ZGVwZW5kcywgMDc1NSkKCiAgICAjIE9FLWNvcmUgLyBSUE0gUHJvdmlkZXMK
ICAgIG91dHByb3ZpZGVzID0gd29ya2RpciArICIvIiArIHNyY25hbWUgKyAiLnByb3ZpZGVzIgoK
ICAgIHRyeToKICAgICAgICBmcm9tIF9fYnVpbHRpbl9fIGltcG9ydCBmaWxlCiAgICAgICAgcHJv
dmlkZXNmaWxlID0gZmlsZShvdXRwcm92aWRlcywgJ3cnKQogICAgZXhjZXB0IE9TRXJyb3I6CiAg
ICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5hYmxlIHRvIG9wZW4gc3BlYyBmaWxl
IGZvciB3cml0aW5nLiIpCgogICAgZHVtcF9maWxlcmRlcHMoJ1JQUk9WSURFUycsIHByb3ZpZGVz
ZmlsZSwgZCkKCiAgICBwcm92aWRlc2ZpbGUuY2xvc2UoKQogICAgb3MuY2htb2Qob3V0cHJvdmlk
ZXMsIDA3NTUpCgogICAgIyBTZXR1cCB0aGUgcnBtYnVpbGQgYXJndW1lbnRzLi4uCiAgICBycG1i
dWlsZCA9IGQuZ2V0VmFyKCdSUE1CVUlMRCcsIFRydWUpCiAgICB0YXJnZXRzeXMgPSBkLmdldFZh
cignVEFSR0VUX1NZUycsIFRydWUpCiAgICB0YXJnZXR2ZW5kb3IgPSBkLmdldFZhcignVEFSR0VU
X1ZFTkRPUicsIFRydWUpCiAgICBwYWNrYWdlX2FyY2ggPSAoZC5nZXRWYXIoJ1BBQ0tBR0VfQVJD
SCcsIFRydWUpIG9yICIiKS5yZXBsYWNlKCItIiwgIl8iKQogICAgaWYgcGFja2FnZV9hcmNoIG5v
dCBpbiAiYWxsIGFueSBub2FyY2giLnNwbGl0KCkgYW5kIG5vdCBwYWNrYWdlX2FyY2guZW5kc3dp
dGgoIl9uYXRpdmVzZGsiKToKICAgICAgICBtbF9wcmVmaXggPSAoZC5nZXRWYXIoJ01MUFJFRklY
JywgVHJ1ZSkgb3IgIiIpLnJlcGxhY2UoIi0iLCAiXyIpCiAgICAgICAgZC5zZXRWYXIoJ1BBQ0tB
R0VfQVJDSF9FWFRFTkQnLCBtbF9wcmVmaXggKyBwYWNrYWdlX2FyY2gpCiAgICBlbHNlOgogICAg
ICAgIGQuc2V0VmFyKCdQQUNLQUdFX0FSQ0hfRVhURU5EJywgcGFja2FnZV9hcmNoKQogICAgcGtn
d3JpdGVkaXIgPSBkLmV4cGFuZCgnL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1
aWxkLWZyaTIvdG1wL3dvcmsvY29yZTItcG9reS1saW51eC9iYmxheWVycy0xLjAtcjAvZGVwbG95
LXJwbXMvJHtQQUNLQUdFX0FSQ0hfRVhURU5EfScpCiAgICBwa2dhcmNoID0gZC5leHBhbmQoJyR7
UEFDS0FHRV9BUkNIX0VYVEVORH0tcG9reS1saW51eCcpCiAgICBtYWdpY2ZpbGUgPSBkLmV4cGFu
ZCgnL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jv
b3RzL3g4Nl82NC1saW51eC91c3Ivc2hhcmUvbWlzYy9tYWdpYy5tZ2MnKQogICAgYmIubWtkaXJo
aWVyKHBrZ3dyaXRlZGlyKQogICAgb3MuY2htb2QocGtnd3JpdGVkaXIsIDA3NTUpCgogICAgY21k
ID0gcnBtYnVpbGQKICAgIGNtZCA9IGNtZCArICIgLS1ub2RlcHMgLS1zaG9ydC1jaXJjdWl0IC0t
dGFyZ2V0ICIgKyBwa2dhcmNoICsgIiAtLWJ1aWxkcm9vdCAiICsgcGtnZAogICAgY21kID0gY21k
ICsgIiAtLWRlZmluZSAnX3RvcGRpciAiICsgd29ya2RpciArICInIC0tZGVmaW5lICdfcnBtZGly
ICIgKyBwa2d3cml0ZWRpciArICInIgogICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX2J1aWxk
X25hbWVfZm10ICUle05BTUV9LSUle1ZFUlNJT059LSUle1JFTEVBU0V9LiUle0FSQ0h9LnJwbSci
CiAgICBjbWQgPSBjbWQgKyAiIC0tZGVmaW5lICdfdXNlX2ludGVybmFsX2RlcGVuZGVuY3lfZ2Vu
ZXJhdG9yIDAnIgogICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX19maW5kX3JlcXVpcmVzICIg
KyBvdXRkZXBlbmRzICsgIiciCiAgICBjbWQgPSBjbWQgKyAiIC0tZGVmaW5lICdfX2ZpbmRfcHJv
dmlkZXMgIiArIG91dHByb3ZpZGVzICsgIiciCiAgICBjbWQgPSBjbWQgKyAiIC0tZGVmaW5lICdf
dW5wYWNrYWdlZF9maWxlc190ZXJtaW5hdGVfYnVpbGQgMCciCiAgICBjbWQgPSBjbWQgKyAiIC0t
ZGVmaW5lICdkZWJ1Z19wYWNrYWdlICV7bmlsfSciCiAgICBjbWQgPSBjbWQgKyAiIC0tZGVmaW5l
ICdfcnBtZmNfbWFnaWNfcGF0aCAiICsgbWFnaWNmaWxlICsgIiciCiAgICBjbWQgPSBjbWQgKyAi
IC0tZGVmaW5lICdfdG1wcGF0aCAiICsgd29ya2RpciArICInIgogICAgaWYgZC5nZXRWYXIoJ1NP
VVJDRV9BUkNISVZFX1BBQ0tBR0VfVFlQRScsIFRydWUpID09ICdzcnBtJzoKICAgICAgICBjbWQg
PSBjbWQgKyAiIC0tZGVmaW5lICdfc291cmNlZGlyICIgKyB3b3JrZGlyICsgIiciCiAgICAgICAg
Y21kc3JwbSA9IGNtZCArICIgLS1kZWZpbmUgJ19zcmNycG1kaXIgIiArIGNyZWF0X3NycG1fZGly
KGQpICsgIiciCiAgICAgICAgY21kc3JwbSA9IGNtZHNycG0gKyAiIC1icyAiICsgb3V0c3BlY2Zp
bGUKICAgICAgICAjIEJ1aWxkIHRoZSAuc3JjLnJwbQogICAgICAgIGQuc2V0VmFyKCdTQlVJTERT
UEVDJywgY21kc3JwbSArICJcbiIpCiAgICAgICAgZC5zZXRWYXJGbGFnKCdTQlVJTERTUEVDJywg
J2Z1bmMnLCAnMScpCiAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdTQlVJTERTUEVDJywgZCkK
ICAgICAgICAjIFJlbW92ZSB0aGUgc291cmNlIChTT1VSQ0UwLCBTT1VSQ0UxIC4uLikKICAgICAg
ICBjbWQgPSBjbWQgKyAiIC0tcm1zb3VyY2UgIgogICAgY21kID0gY21kICsgIiAtYmIgIiArIG91
dHNwZWNmaWxlCgogICAgIyBCdWlsZCB0aGUgcnBtIHBhY2thZ2UhCiAgICBkLnNldFZhcignQlVJ
TERTUEVDJywgY21kICsgIlxuIikKICAgIGQuc2V0VmFyRmxhZygnQlVJTERTUEVDJywgJ2Z1bmMn
LCAnMScpCiAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ0JVSUxEU1BFQycsIGQpCn0KCgpweXRob24g
Y2hlY2tfYmJsYXllcnNfY29uZl9hcHBlbmQgKCkgewpOb25lfQoKCnB5dGhvbiBidWlsZGNmZ19u
ZWVkZWR2YXJzICgpIHsKZGVmIGJ1aWxkY2ZnX25lZWRlZHZhcnMoZCk6CiAgICBuZWVkZWRfdmFy
cyA9IG9lLmRhdGEudHlwZWRfdmFsdWUoIkJVSUxEQ0ZHX05FRURFRFZBUlMiLCBkKQogICAgcGVz
dGVydXNlciA9IFtdCiAgICBmb3IgdiBpbiBuZWVkZWRfdmFyczoKICAgICAgICB2YWwgPSBkLmdl
dFZhcih2LCBUcnVlKQogICAgICAgIGlmIG5vdCB2YWwgb3IgdmFsID09ICdJTlZBTElEJzoKICAg
ICAgICAgICAgcGVzdGVydXNlci5hcHBlbmQodikKCiAgICBpZiBwZXN0ZXJ1c2VyOgogICAgICAg
IGJiLmZhdGFsKCdUaGUgZm9sbG93aW5nIHZhcmlhYmxlKHMpIHdlcmUgbm90IHNldDogJXNcblBs
ZWFzZSBzZXQgdGhlbSBkaXJlY3RseSwgb3IgY2hvb3NlIGEgTUFDSElORSBvciBESVNUUk8gdGhh
dCBzZXRzIHRoZW0uJyAlICcsICcuam9pbihwZXN0ZXJ1c2VyKSkKfQoKCnB5dGhvbiBwYWNrYWdl
X25hbWVfaG9vayAoKSB7CiAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2RlYmlhbl9wYWNrYWdlX25h
bWVfaG9vaycsIGQpCn0KCgpweXRob24gcGF0Y2hfcGF0aCAoKSB7CmRlZiBwYXRjaF9wYXRoKHVy
bCwgZmV0Y2gsIHdvcmtkaXIpOgogICAgIiIiUmV0dXJuIHRoZSBsb2NhbCBwYXRoIG9mIGEgcGF0
Y2gsIG9yIE5vbmUgaWYgdGhpcyBpc24ndCBhIHBhdGNoIiIiCgogICAgbG9jYWwgPSBmZXRjaC5s
b2NhbHBhdGgodXJsKQogICAgYmFzZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJh
c2VuYW1lKGxvY2FsKSkKICAgIGlmIGV4dCBpbiAoJy5neicsICcuYnoyJywgJy5aJyk6CiAgICAg
ICAgbG9jYWwgPSBvcy5wYXRoLmpvaW4od29ya2RpciwgYmFzZSkKICAgICAgICBleHQgPSBvcy5w
YXRoLnNwbGl0ZXh0KGJhc2UpWzFdCgogICAgdXJsZGF0YSA9IGZldGNoLnVkW3VybF0KICAgIGlm
ICJhcHBseSIgaW4gdXJsZGF0YS5wYXJtOgogICAgICAgIGFwcGx5ID0gb2UudHlwZXMuYm9vbGVh
bih1cmxkYXRhLnBhcm1bImFwcGx5Il0pCiAgICAgICAgaWYgbm90IGFwcGx5OgogICAgICAgICAg
ICByZXR1cm4KICAgIGVsaWYgZXh0IG5vdCBpbiAoIi5kaWZmIiwgIi5wYXRjaCIpOgogICAgICAg
IHJldHVybgoKICAgIHJldHVybiBsb2NhbAp9CgoKcHl0aG9uIGdldF90aW1lZGF0YSAoKSB7CmRl
ZiBnZXRfdGltZWRhdGEodmFyLCBkYXRhKToKICAgIGltcG9ydCB0aW1lCiAgICB0aW1lZGF0YSA9
IGRhdGEuZ2V0VmFyKHZhciwgRmFsc2UpCiAgICBpZiB0aW1lZGF0YSBpcyBOb25lOgogICAgICAg
IHJldHVybgogICAgb2xkdGltZSwgb2xkY3B1LCBvbGRwcm9jID0gdGltZWRhdGEKICAgIHByb2Nk
aWZmID0gZ2V0X3Byb2Nlc3NfY3B1dGltZShvcy5nZXRwaWQoKSkgLSBvbGRwcm9jCiAgICBjcHVk
aWZmID0gZ2V0X2NwdXRpbWUoKSAtIG9sZGNwdQogICAgdGltZWRpZmYgPSB0aW1lLnRpbWUoKSAt
IG9sZHRpbWUKICAgIGlmIGNwdWRpZmYgPiAwOgogICAgICAgIGNwdXBlcmMgPSBmbG9hdChwcm9j
ZGlmZikgKiAxMDAgLyBjcHVkaWZmCiAgICBlbHNlOgogICAgICAgIGNwdXBlcmMgPSBOb25lCiAg
ICByZXR1cm4gdGltZWRpZmYsIGNwdXBlcmMKfQoKCnB5dGhvbiBiYXNlX2dldF9tZXRhZGF0YV9t
b25vdG9uZV9yZXZpc2lvbiAoKSB7CmRlZiBiYXNlX2dldF9tZXRhZGF0YV9tb25vdG9uZV9yZXZp
c2lvbihwYXRoLCBkKToKICAgIG1vbm90b25lX3JldmlzaW9uID0gIjx1bmtub3duPiIKICAgIHRy
eToKICAgICAgICBtb25vdG9uZV9yZXZpc2lvbiA9IGZpbGUoICIlcy9fTVROL3JldmlzaW9uIiAl
IHBhdGggKS5yZWFkKCkuc3RyaXAoKQogICAgICAgIGlmIG1vbm90b25lX3JldmlzaW9uLnN0YXJ0
c3dpdGgoICJmb3JtYXRfdmVyc2lvbiIgKToKICAgICAgICAgICAgbW9ub3RvbmVfcmV2aXNpb25f
d29yZHMgPSBtb25vdG9uZV9yZXZpc2lvbi5zcGxpdCgpCiAgICAgICAgICAgIG1vbm90b25lX3Jl
dmlzaW9uID0gbW9ub3RvbmVfcmV2aXNpb25fd29yZHNbIG1vbm90b25lX3JldmlzaW9uX3dvcmRz
LmluZGV4KCAib2xkX3JldmlzaW9uIiApKzFdWzE6LTFdCiAgICBleGNlcHQgSU9FcnJvcjoKICAg
ICAgICBwYXNzCiAgICByZXR1cm4gbW9ub3RvbmVfcmV2aXNpb24KfQoKCnB5dGhvbiBwYWNrYWdl
X3FhX2NoZWNrX2xpYmRpciAoKSB7CmRlZiBwYWNrYWdlX3FhX2NoZWNrX2xpYmRpcihkKToKICAg
ICIiIgogICAgQ2hlY2sgZm9yIHdyb25nIGxpYnJhcnkgaW5zdGFsbGF0aW9uIHBhdGhzLiBGb3Ig
aW5zdGFuY2UsIGNhdGNoCiAgICByZWNpcGVzIGluc3RhbGxpbmcgL2xpYi9iYXIuc28gd2hlbiAv
bGliPSJsaWIzMiIgb3IKICAgIGluc3RhbGxpbmcgaW4gL3Vzci9saWI2NCB3aGVuIC91c3IvbGli
PSIvdXNyL2xpYiIKICAgICIiIgogICAgaW1wb3J0IHJlCgogICAgcGtnZCA9IGQuZ2V0VmFyKCdQ
S0dEJywgVHJ1ZSkKICAgIGJhc2VfbGliZGlyID0gZC5nZXRWYXIoImJhc2VfbGliZGlyIixUcnVl
KSArIG9zLnNlcAogICAgbGliZGlyID0gZC5nZXRWYXIoImxpYmRpciIsIFRydWUpICsgb3Muc2Vw
CiAgICBleGVjX3ByZWZpeCA9IGQuZ2V0VmFyKCJleGVjX3ByZWZpeCIsIFRydWUpICsgb3Muc2Vw
CgogICAgbWVzc2FnZXMgPSBbXQogICAgbXlfZmlsZXMgPSBbXQoKICAgIGZvciByb290LCBkaXJz
LCBmaWxlcyBpbiBvcy53YWxrKHBrZ2QpOgogICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgogICAg
ICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4ocm9vdCxmaWxlKQogICAgICAgICAgICBt
eV9maWxlcy5hcHBlbmQoZnVsbF9wYXRoW2xlbihwa2dkKTpdKQoKICAgIGxpYl9yZSA9IHJlLmNv
bXBpbGUoIl4vbGliLipcLnNvIikKICAgIGV4ZWNfcmUgPSByZS5jb21waWxlKCJeJXMuKi9saWIq
Llwuc28iICUgZXhlY19wcmVmaXgpCgogICAgZm9yIGZpbGUgaW4gbXlfZmlsZXM6CiAgICAgICAg
aWYgbGliX3JlLm1hdGNoKGZpbGUpOgogICAgICAgICAgICBpZiBiYXNlX2xpYmRpciBub3QgaW4g
ZmlsZToKICAgICAgICAgICAgICAgIG1lc3NhZ2VzLmFwcGVuZCgiRm91bmQgbGlicmFyeSBpbiB3
cm9uZyBsb2NhdGlvbjogJXMiICUgZmlsZSkKICAgICAgICBpZiBleGVjX3JlLm1hdGNoKGZpbGUp
OgogICAgICAgICAgICBpZiBsaWJkaXIgbm90IGluIGZpbGU6CiAgICAgICAgICAgICAgICBtZXNz
YWdlcy5hcHBlbmQoIkZvdW5kIGxpYnJhcnkgaW4gd3JvbmcgbG9jYXRpb246ICVzIiAlIGZpbGUp
CiAgICBpZiBtZXNzYWdlczoKICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigibGliZGly
IiwgIlxuIi5qb2luKG1lc3NhZ2VzKSwgZCkKfQoKCnB5dGhvbiByZWFkX3N1YnBhY2thZ2VfbWV0
YWRhdGEgKCkgewogICAgaW1wb3J0IG9lLnBhY2thZ2VkYXRhCgogICAgZGF0YSA9IG9lLnBhY2th
Z2VkYXRhLnJlYWRfcGtnZGF0YShkLmdldFZhcignUE4nLCBUcnVlKSwgZCkKCiAgICBmb3Iga2V5
IGluIGRhdGEua2V5cygpOgogICAgICAgIGQuc2V0VmFyKGtleSwgZGF0YVtrZXldKQoKICAgIGZv
ciBwa2cgaW4gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKToKICAgICAgICBzZGF0
YSA9IG9lLnBhY2thZ2VkYXRhLnJlYWRfc3VicGtnZGF0YShwa2csIGQpCiAgICAgICAgZm9yIGtl
eSBpbiBzZGF0YS5rZXlzKCk6CiAgICAgICAgICAgIGQuc2V0VmFyKGtleSwgc2RhdGFba2V5XSkK
fQoKCnB5dGhvbiBkb19wYWNrYWdlICgpIHsKICAgICMgQ2hhbmdlIHRoZSBmb2xsb3dpbmcgdmVy
c2lvbiB0byBjYXVzZSBzc3RhdGUgdG8gaW52YWxpZGF0ZSB0aGUgcGFja2FnZQogICAgIyBjYWNo
ZS4gIFRoaXMgaXMgdXNlZnVsIGlmIGFuIGl0ZW0gdGhpcyBjbGFzcyBkZXBlbmRzIG9uIGNoYW5n
ZXMgaW4gYQogICAgIyB3YXkgdGhhdCB0aGUgb3V0cHV0IG9mIHRoaXMgY2xhc3MgY2hhbmdlcy4g
IHJwbWRlcHMgaXMgYSBnb29kIGV4YW1wbGUKICAgICMgYXMgYW55IGNoYW5nZSB0byBycG1kZXBz
IHJlcXVpcmVzIHRoaXMgdG8gYmUgcmVydW4uCiAgICAjIFBBQ0tBR0VfQkJDTEFTU19WRVJTSU9O
ID0gIjEiCgogICAgcGFja2FnZXMgPSAoZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgb3IgIiIp
LnNwbGl0KCkKICAgIGlmIGxlbihwYWNrYWdlcykgPCAxOgogICAgICAgIGJiLmRlYnVnKDEsICJO
byBwYWNrYWdlcyB0byBidWlsZCwgc2tpcHBpbmcgZG9fcGFja2FnZSIpCiAgICAgICAgcmV0dXJu
CgogICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKICAgIG91dGRpciA9IGQu
Z2V0VmFyKCdERVBMT1lfRElSJywgVHJ1ZSkKICAgIGRlc3QgPSBkLmdldFZhcignRCcsIFRydWUp
CiAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQogICAgcG4gPSBkLmdldFZhcignUE4n
LCBUcnVlKQoKICAgIGlmIG5vdCB3b3JrZGlyIG9yIG5vdCBvdXRkaXIgb3Igbm90IGRlc3Qgb3Ig
bm90IGR2YXIgb3Igbm90IHBuIG9yIG5vdCBwYWNrYWdlczoKICAgICAgICBiYi5lcnJvcigiV09S
S0RJUiwgREVQTE9ZX0RJUiwgRCwgUE4gYW5kIFBLR0QgYWxsIG11c3QgYmUgZGVmaW5lZCwgdW5h
YmxlIHRvIHBhY2thZ2UiKQogICAgICAgIHJldHVybgoKICAgIGZvciBmIGluIChkLmdldFZhcign
UEFDS0FHRUZVTkNTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCk6CiAgICAgICAgYmIuYnVpbGQuZXhl
Y19mdW5jKGYsIGQpCn0KCgpweXRob24gY2hlY2tfbGljZW5zZV9mbGFncyAoKSB7CmRlZiBjaGVj
a19saWNlbnNlX2ZsYWdzKGQpOgogICAgIiIiCiAgICBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBh
IHJlY2lwZSBoYXMgYW55IExJQ0VOU0VfRkxBR3MgdGhhdAogICAgYXJlbid0IHdoaXRlbGlzdGVk
LgoKICAgIElmIGl0IGRvZXMsIGl0IHJldHVybnMgdGhlIGZpcnN0IExJQ0VOU0VfRkxBRyBtaXNz
aW5nIGZyb20gdGhlCiAgICB3aGl0ZWxpc3QsIG9yIGFsbCB0aGUgTElDRU5TRV9GTEFHcyBpZiB0
aGVyZSBpcyBubyB3aGl0ZWxpc3QuCgogICAgSWYgZXZlcnl0aGluZyBpcyBpcyBwcm9wZXJseSB3
aGl0ZWxpc3RlZCwgaXQgcmV0dXJucyBOb25lLgogICAgIiIiCgogICAgZGVmIGxpY2Vuc2VfZmxh
Z19tYXRjaGVzKGZsYWcsIHdoaXRlbGlzdCwgcG4pOgogICAgICAgICIiIgogICAgICAgIFJldHVy
biBUcnVlIGlmIGZsYWcgbWF0Y2hlcyBzb21ldGhpbmcgaW4gd2hpdGVsaXN0LCBOb25lIGlmIG5v
dC4KCiAgICAgICAgQmVmb3JlIHdlIHRlc3QgYSBmbGFnIGFnYWluc3QgdGhlIHdoaXRlbGlzdCwg
d2UgYXBwZW5kIF9iYmxheWVycwogICAgICAgIHRvIGl0LiAgV2UgdGhlbiB0cnkgdG8gbWF0Y2gg
dGhhdCBzdHJpbmcgYWdhaW5zdCB0aGUKICAgICAgICB3aGl0ZWxpc3QuICBUaGlzIGNvdmVycyB0
aGUgbm9ybWFsIGNhc2UsIHdoZXJlIHdlIGV4cGVjdAogICAgICAgIExJQ0VOU0VfRkxBR1MgdG8g
YmUgYSBzaW1wbGUgc3RyaW5nIGxpa2UgJ2NvbW1lcmNpYWwnLCB3aGljaAogICAgICAgIHRoZSB1
c2VyIHR5cGljYWxseSBtYXRjaGVzIGV4YWN0bHkgaW4gdGhlIHdoaXRlbGlzdCBieQogICAgICAg
IGV4cGxpY2l0bHkgYXBwZW5kaW5nIHRoZSBwYWNrYWdlIG5hbWUgZS5nICdjb21tZXJjaWFsX2Zv
bycuCiAgICAgICAgSWYgd2UgZmFpbCB0aGUgbWF0Y2ggaG93ZXZlciwgd2UgdGhlbiBzcGxpdCB0
aGUgZmxhZyBhY3Jvc3MKICAgICAgICAnXycgYW5kIGFwcGVuZCBlYWNoIGZyYWdtZW50IGFuZCB0
ZXN0IHVudGlsIHdlIGVpdGhlciBtYXRjaCBvcgogICAgICAgIHJ1biBvdXQgb2YgZnJhZ21lbnRz
LgogICAgICAgICIiIgogICAgICAgIGZsYWdfcG4gPSAoIiVzXyVzIiAlIChmbGFnLCBwbikpCiAg
ICAgICAgZm9yIGNhbmRpZGF0ZSBpbiB3aGl0ZWxpc3Q6CiAgICAgICAgICAgIGlmIGZsYWdfcG4g
PT0gY2FuZGlkYXRlOgogICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCgogICAgICAgIGZs
YWdfY3VyID0gIiIKICAgICAgICBmbGFnbWVudHMgPSBmbGFnX3BuLnNwbGl0KCJfIikKICAgICAg
ICBmbGFnbWVudHMucG9wKCkgIyB3ZSd2ZSBhbHJlYWR5IHRlc3RlZCB0aGUgZnVsbCBzdHJpbmcK
ICAgICAgICBmb3IgZmxhZ21lbnQgaW4gZmxhZ21lbnRzOgogICAgICAgICAgICBpZiBmbGFnX2N1
cjoKICAgICAgICAgICAgICAgIGZsYWdfY3VyICs9ICJfIgogICAgICAgICAgICBmbGFnX2N1ciAr
PSBmbGFnbWVudAogICAgICAgICAgICBmb3IgY2FuZGlkYXRlIGluIHdoaXRlbGlzdDoKICAgICAg
ICAgICAgICAgIGlmIGZsYWdfY3VyID09IGNhbmRpZGF0ZToKICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gVHJ1ZQogICAgICAgIHJldHVybiBGYWxzZQoKICAgIGRlZiBhbGxfbGljZW5zZV9mbGFn
c19tYXRjaChsaWNlbnNlX2ZsYWdzLCB3aGl0ZWxpc3QpOgogICAgICAgICIiIiBSZXR1cm4gZmly
c3QgdW5tYXRjaGVkIGZsYWcsIE5vbmUgaWYgYWxsIGZsYWdzIG1hdGNoICIiIgogICAgICAgIHBu
ID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKICAgICAgICBzcGxpdF93aGl0ZWxpc3QgPSB3aGl0ZWxp
c3Quc3BsaXQoKQogICAgICAgIGZvciBmbGFnIGluIGxpY2Vuc2VfZmxhZ3Muc3BsaXQoKToKICAg
ICAgICAgICAgaWYgbm90IGxpY2Vuc2VfZmxhZ19tYXRjaGVzKGZsYWcsIHNwbGl0X3doaXRlbGlz
dCwgcG4pOgogICAgICAgICAgICAgICAgcmV0dXJuIGZsYWcKICAgICAgICByZXR1cm4gTm9uZQoK
ICAgIGxpY2Vuc2VfZmxhZ3MgPSBkLmdldFZhcignTElDRU5TRV9GTEFHUycsIFRydWUpCiAgICBp
ZiBsaWNlbnNlX2ZsYWdzOgogICAgICAgIHdoaXRlbGlzdCA9IGQuZ2V0VmFyKCdMSUNFTlNFX0ZM
QUdTX1dISVRFTElTVCcsIFRydWUpCiAgICAgICAgaWYgbm90IHdoaXRlbGlzdDoKICAgICAgICAg
ICAgcmV0dXJuIGxpY2Vuc2VfZmxhZ3MKICAgICAgICB1bm1hdGNoZWRfZmxhZyA9IGFsbF9saWNl
bnNlX2ZsYWdzX21hdGNoKGxpY2Vuc2VfZmxhZ3MsIHdoaXRlbGlzdCkKICAgICAgICBpZiB1bm1h
dGNoZWRfZmxhZzoKICAgICAgICAgICAgcmV0dXJuIHVubWF0Y2hlZF9mbGFnCiAgICByZXR1cm4g
Tm9uZQp9CgoKcHl0aG9uIHNldF9kZXZpY2UgKCkgewpkZWYgc2V0X2RldmljZShlKToKICAgIHRt
cGRpciA9IGUuZGF0YS5nZXRWYXIoJ1RNUERJUicsIFRydWUpCiAgICB0cnk6CiAgICAgICAgb3Mu
cmVtb3ZlKGUuZGF0YS5nZXRWYXIoJ0RFVkZJTEUnLCBUcnVlKSkKICAgIGV4Y2VwdDoKICAgICAg
ICBwYXNzCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAjIFdlIGxvb2sgZm9yIHRoZSB2b2x1
bWUgVE1QRElSIGxpdmVzIG9uLiBUbyBkbyBhbGwgZGlza3Mgd291bGQgbWFrZSBsaXR0bGUKICAg
ICMgc2Vuc2UgYW5kIG5vdCBnaXZlIHVzIGFueSBwYXJ0aWN1bGFybHkgdXNlZnVsIGRhdGEuIElu
IHRoZW9yeSB3ZSBjb3VsZCBkbwogICAgIyBzb21ldGhpbmcgbGlrZSBzdGljayBETF9ESVIgb24g
YSBkaWZmZXJlbnQgcGFydGl0aW9uIGFuZCB0aGlzIHdvdWxkCiAgICAjIHRocm93IHN0YXRzIGdh
dGhlcmluZyBvZmYuIFRoZSBzYW1lIGdvZXMgd2l0aCBTU1RBVEVfRElSLiBIb3dldmVyLCBsZXQn
cwogICAgIyBnZXQgdGhlIGJhc2ljcyBpbiBoZXJlIGFuZCB3b3JrIG9uIHRoZSBjb3JuZXJjYXNl
cyBsYXRlci4KICAgICMgQSBub3RlLiAvcHJvYy9kaXNrc3RhdHMgZG9lcyBub3QgY29udGFpbiBp
bmZvIG9uIGVuY3J5cHRmcywgdG1wZnMsIGV0Yy4KICAgICMgSWYgd2UgZW5kIHVwIGhpdHRpbmcg
b25lIG9mIHRoZXNlIGZzLCB3ZSdsbCBqdXN0IHNraXAgZGlza3N0YXRzIGNvbGxlY3Rpb24uCiAg
ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICBkZXZpY2U9b3Muc3RhdCh0bXBkaXIpCiAgICBtYWpv
cmRldj1vcy5tYWpvcihkZXZpY2Uuc3RfZGV2KQogICAgbWlub3JkZXY9b3MubWlub3IoZGV2aWNl
LnN0X2RldikKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICMgQnVnIDE3MDA6CiAgICAjIEJl
Y2F1c2UgdG1wZnMvZW5jcnlwdGZzL3JhbWZzIGV0YyBpbnNlcnRzIG5vIGVudHJ5IGluIC9wcm9j
L2Rpc2tzdGF0cwogICAgIyB3ZSBzZXQgcmRldiB0byBOb0xvZ2ljYWxEZXZpY2UgYW5kIHNlYXJj
aCBmb3IgaXQgbGF0ZXIuIElmIHdlIGZpbmQgTkxECiAgICAjIHdlIGRvIG5vdCBjb2xsZWN0IGRp
c2tzdGF0cyBhcyB0aGUgbWV0aG9kIHRvIGNvbGxlY3QgbWVhbmluZ2Z1bCBzdGF0aXN0aWNzCiAg
ICAjIGZvciB0aGVzZSBmcyB0eXBlcyByZXF1aXJlcyBhIGJpdCBtb3JlIHJlc2VhcmNoLgogICAg
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIwogICAgcmRldj0iTm9Mb2dpY2FsRGV2aWNlIgogICAgdHJ5Ogog
ICAgICAgIGZvciBsaW5lIGluIG9wZW4oIi9wcm9jL2Rpc2tzdGF0cyIsICJyIik6CiAgICAgICAg
ICAgIGlmIG1ham9yZGV2ID09IGludChsaW5lLnNwbGl0KClbMF0pIGFuZCBtaW5vcmRldiA9PSBp
bnQobGluZS5zcGxpdCgpWzFdKToKICAgICAgICAgICAgICAgIHJkZXY9bGluZS5zcGxpdCgpWzJd
CiAgICBleGNlcHQ6CiAgICAgICAgcGFzcwogICAgZmlsZSA9IG9wZW4oZS5kYXRhLmdldFZhcign
REVWRklMRScsIFRydWUpLCAidyIpCiAgICBmaWxlLndyaXRlKHJkZXYpCiAgICBmaWxlLmNsb3Nl
KCkKfQoKCnB5dGhvbiBiYXNlX2NvbnRhaW5zICgpIHsKZGVmIGJhc2VfY29udGFpbnModmFyaWFi
bGUsIGNoZWNrdmFsdWVzLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpOgogICAgcmV0dXJuIG9l
LnV0aWxzLmNvbnRhaW5zKHZhcmlhYmxlLCBjaGVja3ZhbHVlcywgdHJ1ZXZhbHVlLCBmYWxzZXZh
bHVlLCBkKQp9CgoKcHl0aG9uIHdyaXRlX3Rhc2tfZGF0YSAoKSB7CmRlZiB3cml0ZV90YXNrX2Rh
dGEoc3RhdHVzLCBsb2dmaWxlLCBkZXYsIGUpOgogICAgYm4gPSBnZXRfYm4oZSkKICAgIGJzZGly
ID0gb3MucGF0aC5qb2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCBi
bikKICAgIHRhc2tkaXIgPSBvcy5wYXRoLmpvaW4oYnNkaXIsIGUuZGF0YS5leHBhbmQoImJibGF5
ZXJzLTEuMC1yMCIpKQogICAgZmlsZSA9IG9wZW4ob3MucGF0aC5qb2luKGxvZ2ZpbGUpLCAiYSIp
CiAgICB0aW1lZGF0YSA9IGdldF90aW1lZGF0YSgiX190aW1lZGF0YV90YXNrIiwgZS5kYXRhKQog
ICAgaWYgdGltZWRhdGE6CiAgICAgICAgZWxhcHNlZHRpbWUsIGNwdSA9IHRpbWVkYXRhCiAgICAg
ICAgZmlsZS53cml0ZShiYi5kYXRhLmV4cGFuZCgiYmJsYXllcnMtMS4wLXIwOiAlczogRWxhcHNl
ZCB0aW1lOiAlMC4yZiBzZWNvbmRzIFxuIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChlLnRhc2ssIGVsYXBzZWR0aW1lKSwgZS5kYXRhKSkKICAgICAgICBpZiBjcHU6CiAgICAg
ICAgICAgIGZpbGUud3JpdGUoIkNQVSB1c2FnZTogJTAuMWYlJSBcbiIgJSBjcHUpCiAgICAjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjCiAgICAjIEhlcmUgd2UgZ2F0aGVyIHVwIGRpc2sgZGF0YS4gSW4gYW4g
ZWZmb3J0IHRvIGF2b2lkIGx5aW5nIHdpdGggc3RhdHMKICAgICMgSSBkbyBhIGJhcmUgbWluaW11
bSBvZiBhbmFseXNpcyBvZiBjb2xsZWN0ZWQgZGF0YS4KICAgICMgVGhlIHNpbXBsZSBmYWN0IGlz
LCBkb2luZyBkaXNrIGlvIGNvbGxlY3Rpb24gb24gYSBwZXIgcHJvY2VzcyBiYXNpcwogICAgIyB3
aXRob3V0IGVmZmVjdGluZyBidWlsZCB0aW1lIHdvdWxkIGJlIGRpZmZpY3VsdC4KICAgICMgRm9y
IHRoZSBiZXN0IGluZm9ybWF0aW9uLCBydW5uaW5nIHRoaW5ncyB3aXRoIEJCX1RPVEFMX1RIUkVB
RFMgPSAiMSIKICAgICMgd291bGQgcmV0dXJuIGFjY3VyYXRlIHBlciB0YXNrIHJlc3VsdHMuCiAg
ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICBpZiBkZXYgIT0gIk5vTG9naWNhbERldmljZSI6CiAg
ICAgICAgZGlza2RhdGEgPSBnZXRfZGlza2RhdGEoIl9fZGlza2RhdGFfdGFzayIsIGRldiwgZS5k
YXRhKQogICAgICAgIGlmIGRpc2tkYXRhOgogICAgICAgICAgICBmb3Iga2V5IGluIHNvcnRlZChk
aXNrZGF0YS5pdGVya2V5cygpKToKICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoa2V5ICsgIjog
IiArIGRpc2tkYXRhW2tleV0gKyAiXG4iKQogICAgaWYgc3RhdHVzIGlzICJwYXNzZWQiOgoJICAg
IGZpbGUud3JpdGUoIlN0YXR1czogUEFTU0VEIFxuIikKICAgIGVsc2U6CiAgICAgICAgZmlsZS53
cml0ZSgiU3RhdHVzOiBGQUlMRUQgXG4iKQogICAgZmlsZS53cml0ZSgiRW5kZWQ6ICUwLjJmIFxu
IiAlIHRpbWUudGltZSgpKQogICAgZmlsZS5jbG9zZSgpCn0KCgpweXRob24gcGFja2FnZV9xYV9j
aGVja19wZXJtICgpIHsKZGVmIHBhY2thZ2VfcWFfY2hlY2tfcGVybShwYXRoLG5hbWUsZCwgZWxm
LCBtZXNzYWdlcyk6CiAgICAiIiIKICAgIENoZWNrIHRoZSBwZXJtaXNzaW9uIG9mIGZpbGVzCiAg
ICAiIiIKICAgIHJldHVybgp9CgoKcHl0aG9uIHBhY2thZ2VfcWFfY2hlY2tfZGVwcyAoKSB7CmRl
ZiBwYWNrYWdlX3FhX2NoZWNrX2RlcHMocGtnLCBwa2dkZXN0LCBza2lwLCBkKToKICAgIHNhbmUg
PSBUcnVlCgogICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCiAgICBsb2NhbGRh
dGEuc2V0VmFyKCdPVkVSUklERVMnLCBwa2cpCiAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2Fs
ZGF0YSkKCiAgICBkZWYgY2hlY2tfdmFsaWRfZGVwcyh2YXIpOgogICAgICAgIHNhbmUgPSBUcnVl
CiAgICAgICAgdHJ5OgogICAgICAgICAgICBydmFyID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVy
c2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIodmFyLCBUcnVlKSBvciAiIikKICAgICAgICBleGNlcHQg
VmFsdWVFcnJvciBhcyBlOgogICAgICAgICAgICBiYi5mYXRhbCgiJXNfJXM6ICVzIiAlICh2YXIs
IHBrZywgZSkpCiAgICAgICAgICAgIHJhaXNlIGUKICAgICAgICBmb3IgZGVwIGluIHJ2YXI6CiAg
ICAgICAgICAgIGZvciB2IGluIHJ2YXJbZGVwXToKICAgICAgICAgICAgICAgIGlmIHYgYW5kIG5v
dCB2LnN0YXJ0c3dpdGgoKCc8ICcsICc9ICcsICc+ICcsICc8PSAnLCAnPj0nKSk6CiAgICAgICAg
ICAgICAgICAgICAgZXJyb3JfbXNnID0gIiVzXyVzIGlzIGludmFsaWQ6ICVzICglcykgICBvbmx5
IGNvbXBhcmlzb25zIDwsID0sID4sIDw9LCBhbmQgPj0gYXJlIGFsbG93ZWQiICUgKHZhciwgcGtn
LCBkZXAsIHYpCiAgICAgICAgICAgICAgICAgICAgc2FuZSA9IHBhY2thZ2VfcWFfaGFuZGxlX2Vy
cm9yKCJkZXAtY21wIiwgZXJyb3JfbXNnLCBkKQogICAgICAgIHJldHVybiBzYW5lCgogICAgc2Fu
ZSA9IFRydWUKICAgIGlmIG5vdCBjaGVja192YWxpZF9kZXBzKCdSREVQRU5EUycpOgogICAgICAg
IHNhbmUgPSBGYWxzZQogICAgaWYgbm90IGNoZWNrX3ZhbGlkX2RlcHMoJ1JSRUNPTU1FTkRTJyk6
CiAgICAgICAgc2FuZSA9IEZhbHNlCiAgICBpZiBub3QgY2hlY2tfdmFsaWRfZGVwcygnUlNVR0dF
U1RTJyk6CiAgICAgICAgc2FuZSA9IEZhbHNlCiAgICBpZiBub3QgY2hlY2tfdmFsaWRfZGVwcygn
UlBST1ZJREVTJyk6CiAgICAgICAgc2FuZSA9IEZhbHNlCiAgICBpZiBub3QgY2hlY2tfdmFsaWRf
ZGVwcygnUlJFUExBQ0VTJyk6CiAgICAgICAgc2FuZSA9IEZhbHNlCiAgICBpZiBub3QgY2hlY2tf
dmFsaWRfZGVwcygnUkNPTkZMSUNUUycpOgogICAgICAgIHNhbmUgPSBGYWxzZQoKICAgIHJldHVy
biBzYW5lCn0KCgpweXRob24gb2VfaW1wb3J0ICgpIHsKZGVmIG9lX2ltcG9ydChkKToKICAgIGlt
cG9ydCBzeXMKCiAgICBiYnBhdGggPSBkLmdldFZhcigiQkJQQVRIIiwgVHJ1ZSkuc3BsaXQoIjoi
KQogICAgc3lzLnBhdGhbMDowXSA9IFtvcy5wYXRoLmpvaW4oZGlyLCAibGliIikgZm9yIGRpciBp
biBiYnBhdGhdCgogICAgZGVmIGluamVjdChuYW1lLCB2YWx1ZSk6CiAgICAgICAgIiIiTWFrZSBh
IHB5dGhvbiBvYmplY3QgYWNjZXNzaWJsZSBmcm9tIHRoZSBtZXRhZGF0YSIiIgogICAgICAgIGlm
IGhhc2F0dHIoYmIudXRpbHMsICJfY29udGV4dCIpOgogICAgICAgICAgICBiYi51dGlscy5fY29u
dGV4dFtuYW1lXSA9IHZhbHVlCiAgICAgICAgZWxzZToKICAgICAgICAgICAgX19idWlsdGluc19f
W25hbWVdID0gdmFsdWUKCiAgICBpbXBvcnQgb2UuZGF0YQogICAgZm9yIHRvaW1wb3J0IGluIG9l
LmRhdGEudHlwZWRfdmFsdWUoIk9FX0lNUE9SVFMiLCBkKToKICAgICAgICBpbXBvcnRlZCA9IF9f
aW1wb3J0X18odG9pbXBvcnQpCiAgICAgICAgaW5qZWN0KHRvaW1wb3J0LnNwbGl0KCIuIiwgMSlb
MF0sIGltcG9ydGVkKQp9CgoKcHl0aG9uIHBhY2thZ2VfcWFfd2FsayAoKSB7CmRlZiBwYWNrYWdl
X3FhX3dhbGsocGF0aCwgd2FybmZ1bmNzLCBlcnJvcmZ1bmNzLCBza2lwLCBwYWNrYWdlLCBkKToK
ICAgIGltcG9ydCBvZS5xYQoKICAgICNpZiB0aGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uLCB0
aGVuIGZpeCB0aGUgZGljdCBhYm92ZQogICAgdGFyZ2V0X29zICAgPSBkLmdldFZhcignVEFSR0VU
X09TJywgVHJ1ZSkKICAgIHRhcmdldF9hcmNoID0gZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1
ZSkKCiAgICB3YXJuaW5ncyA9IFtdCiAgICBlcnJvcnMgPSBbXQogICAgZm9yIHJvb3QsIGRpcnMs
IGZpbGVzIGluIG9zLndhbGsocGF0aCk6CiAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CiAgICAg
ICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocm9vdCxmaWxlKQogICAgICAgICAgICBlbGYgPSBv
ZS5xYS5FTEZGaWxlKHBhdGgpCiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIGVsZi5v
cGVuKCkKICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgZWxmID0gTm9uZQogICAg
ICAgICAgICBmb3IgZnVuYyBpbiB3YXJuZnVuY3M6CiAgICAgICAgICAgICAgICBmdW5jKHBhdGgs
IHBhY2thZ2UsIGQsIGVsZiwgd2FybmluZ3MpCiAgICAgICAgICAgIGZvciBmdW5jIGluIGVycm9y
ZnVuY3M6CiAgICAgICAgICAgICAgICBmdW5jKHBhdGgsIHBhY2thZ2UsIGQsIGVsZiwgZXJyb3Jz
KQoKICAgIGZvciB3IGluIHdhcm5pbmdzOgogICAgICAgIGJiLndhcm4oIlFBIElzc3VlOiAlcyIg
JSB3KQogICAgICAgIHBhY2thZ2VfcWFfd3JpdGVfZXJyb3IodywgZCkKICAgIGZvciBlIGluIGVy
cm9yczoKICAgICAgICBiYi5lcnJvcigiUUEgSXNzdWU6ICVzIiAlIGUpCiAgICAgICAgcGFja2Fn
ZV9xYV93cml0ZV9lcnJvcihlLCBkKQoKICAgIHJldHVybiBsZW4oZXJyb3JzKSA9PSAwCn0KCgpw
eXRob24gZG9fc3BsaXRfcGFja2FnZXMgKCkgewpkZWYgZG9fc3BsaXRfcGFja2FnZXMoZCwgcm9v
dCwgZmlsZV9yZWdleCwgb3V0cHV0X3BhdHRlcm4sIGRlc2NyaXB0aW9uLCBwb3N0aW5zdD1Ob25l
LCByZWN1cnNpdmU9RmFsc2UsIGhvb2s9Tm9uZSwgZXh0cmFfZGVwZW5kcz1Ob25lLCBhdXhfZmls
ZXNfcGF0dGVybj1Ob25lLCBwb3N0cm09Tm9uZSwgYWxsb3dfZGlycz1GYWxzZSwgcHJlcGVuZD1G
YWxzZSwgbWF0Y2hfcGF0aD1GYWxzZSwgYXV4X2ZpbGVzX3BhdHRlcm5fdmVyYmF0aW09Tm9uZSwg
YWxsb3dfbGlua3M9RmFsc2UpOgogICAgIiIiCiAgICBVc2VkIGluIC5iYiBmaWxlcyB0byBzcGxp
dCB1cCBkeW5hbWljYWxseSBnZW5lcmF0ZWQgc3VicGFja2FnZXMgb2YgYQogICAgZ2l2ZW4gcGFj
a2FnZSwgdXN1YWxseSBwbHVnaW5zIG9yIG1vZHVsZXMuCgogICAgQXJndW1lbnRzOgogICAgcm9v
dCAgICAgICAgICAgLS0gdGhlIHBhdGggaW4gd2hpY2ggdG8gc2VhcmNoCiAgICBmaWxlX3JlZ2V4
ICAgICAtLSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggc2VhcmNoZWQgZmlsZXMuIFVzZQog
ICAgICAgICAgICAgICAgICAgICAgcGFyZW50aGVzZXMgKCkgdG8gbWFyayB0aGUgcGFydCBvZiB0
aGlzIGV4cHJlc3Npb24KICAgICAgICAgICAgICAgICAgICAgIHRoYXQgc2hvdWxkIGJlIHVzZWQg
dG8gZGVyaXZlIHRoZSBtb2R1bGUgbmFtZSAodG8gYmUKICAgICAgICAgICAgICAgICAgICAgIHN1
YnN0aXR1dGVkIHdoZXJlICVzIGlzIHVzZWQgaW4gb3RoZXIgZnVuY3Rpb24KICAgICAgICAgICAg
ICAgICAgICAgIGFyZ3VtZW50cyBhcyBub3RlZCBiZWxvdykKICAgIG91dHB1dF9wYXR0ZXJuIC0t
IHBhdHRlcm4gdG8gdXNlIGZvciB0aGUgcGFja2FnZSBuYW1lcy4gTXVzdCBpbmNsdWRlICVzLgog
ICAgZGVzY3JpcHRpb24gICAgLS0gZGVzY3JpcHRpb24gdG8gc2V0IGZvciBlYWNoIHBhY2thZ2Uu
IE11c3QgaW5jbHVkZSAlcy4KICAgIHBvc3RpbnN0ICAgICAgIC0tIHBvc3RpbnN0YWxsIHNjcmlw
dCB0byB1c2UgZm9yIGFsbCBwYWNrYWdlcyAoYXMgYQogICAgICAgICAgICAgICAgICAgICAgc3Ry
aW5nKQogICAgcmVjdXJzaXZlICAgICAgLS0gVHJ1ZSB0byBwZXJmb3JtIGEgcmVjdXJzaXZlIHNl
YXJjaCAtIGRlZmF1bHQgRmFsc2UKICAgIGhvb2sgICAgICAgICAgIC0tIGEgaG9vayBmdW5jdGlv
biB0byBiZSBjYWxsZWQgZm9yIGV2ZXJ5IG1hdGNoLiBUaGUKICAgICAgICAgICAgICAgICAgICAg
IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGZvbGxvd2luZyBhcmd1bWVudHMKICAg
ICAgICAgICAgICAgICAgICAgIChpbiB0aGUgb3JkZXIgbGlzdGVkKToKICAgICAgICAgICAgICAg
ICAgICAgICAgZjogZnVsbCBwYXRoIHRvIHRoZSBmaWxlL2RpcmVjdG9yeSBtYXRjaAogICAgICAg
ICAgICAgICAgICAgICAgICBwa2c6IHRoZSBwYWNrYWdlIG5hbWUKICAgICAgICAgICAgICAgICAg
ICAgICAgZmlsZV9yZWdleDogYXMgYWJvdmUKICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
X3BhdHRlcm46IGFzIGFib3ZlCiAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZW5hbWU6IHRo
ZSBtb2R1bGUgbmFtZSBkZXJpdmVkIHVzaW5nIGZpbGVfcmVnZXgKICAgIGV4dHJhX2RlcGVuZHMg
IC0tIGV4dHJhIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIChSREVQRU5EUykgdG8gYmUgc2V0IGZvcgog
ICAgICAgICAgICAgICAgICAgICAgYWxsIHBhY2thZ2VzLiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBO
b25lIGNhdXNlcyBhCiAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5IG9uIHRoZSBtYWlu
IHBhY2thZ2UgKGJibGF5ZXJzKSAtIGlmIHlvdSBkbwogICAgICAgICAgICAgICAgICAgICAgbm90
IHdhbnQgdGhpcywgcGFzcyAnJyBmb3IgdGhpcyBwYXJhbWV0ZXIuCiAgICBhdXhfZmlsZXNfcGF0
dGVybiAtLSBleHRyYSBpdGVtKHMpIHRvIGJlIGFkZGVkIHRvIEZJTEVTIGZvciBlYWNoCiAgICAg
ICAgICAgICAgICAgICAgICBwYWNrYWdlLiBDYW4gYmUgYSBzaW5nbGUgc3RyaW5nIGl0ZW0gb3Ig
YSBsaXN0IG9mCiAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzIGZvciBtdWx0aXBsZSBpdGVt
cy4gIE11c3QgaW5jbHVkZSAlcy4KICAgIHBvc3RybSAgICAgICAgIC0tIHBvc3RybSBzY3JpcHQg
dG8gdXNlIGZvciBhbGwgcGFja2FnZXMgKGFzIGEgc3RyaW5nKQogICAgYWxsb3dfZGlycyAgICAg
LS0gVHJ1ZSBhbGxvdyBkaXJlY3RvcmllcyB0byBiZSBtYXRjaGVkIC0gZGVmYXVsdCBGYWxzZQog
ICAgcHJlcGVuZCAgICAgICAgLS0gaWYgVHJ1ZSwgcHJlcGVuZCBjcmVhdGVkIHBhY2thZ2VzIHRv
IFBBQ0tBR0VTIGluc3RlYWQKICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBkZWZhdWx0IEZh
bHNlIHdoaWNoIGFwcGVuZHMgdGhlbQogICAgbWF0Y2hfcGF0aCAgICAgLS0gbWF0Y2ggZmlsZV9y
ZWdleCBvbiB0aGUgd2hvbGUgcmVsYXRpdmUgcGF0aCB0byB0aGUKICAgICAgICAgICAgICAgICAg
ICAgIHJvb3QgcmF0aGVyIHRoYW4ganVzdCB0aGUgZmlsZSBuYW1lCiAgICBhdXhfZmlsZXNfcGF0
dGVybl92ZXJiYXRpbSAtLSBleHRyYSBpdGVtKHMpIHRvIGJlIGFkZGVkIHRvIEZJTEVTIGZvcgog
ICAgICAgICAgICAgICAgICAgICAgZWFjaCBwYWNrYWdlLCB1c2luZyB0aGUgYWN0dWFsIGRlcml2
ZWQgbW9kdWxlIG5hbWUKICAgICAgICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIGNvbnZlcnRp
bmcgaXQgdG8gc29tZXRoaW5nIGxlZ2FsIGZvciBhCiAgICAgICAgICAgICAgICAgICAgICBwYWNr
YWdlIG5hbWUuIENhbiBiZSBhIHNpbmdsZSBzdHJpbmcgaXRlbSBvciBhIGxpc3QKICAgICAgICAg
ICAgICAgICAgICAgIG9mIHN0cmluZ3MgZm9yIG11bHRpcGxlIGl0ZW1zLiBNdXN0IGluY2x1ZGUg
JXMuCiAgICBhbGxvd19saW5rcyAgICAtLSBUcnVlIHRvIGFsbG93IHN5bWxpbmtzIHRvIGJlIG1h
dGNoZWQgLSBkZWZhdWx0IEZhbHNlCgogICAgIiIiCgogICAgbWwgPSBkLmdldFZhcigiTUxQUkVG
SVgiLCBUcnVlKQogICAgaWYgbWw6CiAgICAgICAgaWYgbm90IG91dHB1dF9wYXR0ZXJuLnN0YXJ0
c3dpdGgobWwpOgogICAgICAgICAgICBvdXRwdXRfcGF0dGVybiA9IG1sICsgb3V0cHV0X3BhdHRl
cm4KCiAgICAgICAgbmV3ZGVwcyA9IFtdCiAgICAgICAgZm9yIGRlcCBpbiAoZXh0cmFfZGVwZW5k
cyBvciAiIikuc3BsaXQoKToKICAgICAgICAgICAgaWYgZGVwLnN0YXJ0c3dpdGgobWwpOgogICAg
ICAgICAgICAgICAgbmV3ZGVwcy5hcHBlbmQoZGVwKQogICAgICAgICAgICBlbHNlOgogICAgICAg
ICAgICAgICAgbmV3ZGVwcy5hcHBlbmQobWwgKyBkZXApCiAgICAgICAgaWYgbmV3ZGVwczoKICAg
ICAgICAgICAgZXh0cmFfZGVwZW5kcyA9ICIgIi5qb2luKG5ld2RlcHMpCgogICAgZHZhciA9IGQu
Z2V0VmFyKCdQS0dEJywgVHJ1ZSkKCiAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycs
IFRydWUpLnNwbGl0KCkKCiAgICBpZiBwb3N0aW5zdDoKICAgICAgICBwb3N0aW5zdCA9ICcjIS9i
aW4vc2hcbicgKyBwb3N0aW5zdCArICdcbicKICAgIGlmIHBvc3RybToKICAgICAgICBwb3N0cm0g
PSAnIyEvYmluL3NoXG4nICsgcG9zdHJtICsgJ1xuJwogICAgaWYgbm90IHJlY3Vyc2l2ZToKICAg
ICAgICBvYmpzID0gb3MubGlzdGRpcihkdmFyICsgcm9vdCkKICAgIGVsc2U6CiAgICAgICAgb2Jq
cyA9IFtdCiAgICAgICAgZm9yIHdhbGtyb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGR2YXIg
KyByb290KToKICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CiAgICAgICAgICAgICAgICBy
ZWxwYXRoID0gb3MucGF0aC5qb2luKHdhbGtyb290LCBmaWxlKS5yZXBsYWNlKGR2YXIgKyByb290
ICsgJy8nLCAnJywgMSkKICAgICAgICAgICAgICAgIGlmIHJlbHBhdGg6CiAgICAgICAgICAgICAg
ICAgICAgb2Jqcy5hcHBlbmQocmVscGF0aCkKCiAgICBpZiBleHRyYV9kZXBlbmRzID09IE5vbmU6
CiAgICAgICAgZXh0cmFfZGVwZW5kcyA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCgogICAgZm9yIG8g
aW4gc29ydGVkKG9ianMpOgogICAgICAgIGltcG9ydCByZSwgc3RhdAogICAgICAgIGlmIG1hdGNo
X3BhdGg6CiAgICAgICAgICAgIG0gPSByZS5tYXRjaChmaWxlX3JlZ2V4LCBvKQogICAgICAgIGVs
c2U6CiAgICAgICAgICAgIG0gPSByZS5tYXRjaChmaWxlX3JlZ2V4LCBvcy5wYXRoLmJhc2VuYW1l
KG8pKQoKICAgICAgICBpZiBub3QgbToKICAgICAgICAgICAgY29udGludWUKICAgICAgICBmID0g
b3MucGF0aC5qb2luKGR2YXIgKyByb290LCBvKQogICAgICAgIG1vZGUgPSBvcy5sc3RhdChmKS5z
dF9tb2RlCiAgICAgICAgaWYgbm90IChzdGF0LlNfSVNSRUcobW9kZSkgb3IgKGFsbG93X2xpbmtz
IGFuZCBzdGF0LlNfSVNMTksobW9kZSkpIG9yIChhbGxvd19kaXJzIGFuZCBzdGF0LlNfSVNESVIo
bW9kZSkpKToKICAgICAgICAgICAgY29udGludWUKICAgICAgICBvbiA9IGxlZ2l0aW1pemVfcGFj
a2FnZV9uYW1lKG0uZ3JvdXAoMSkpCiAgICAgICAgcGtnID0gb3V0cHV0X3BhdHRlcm4gJSBvbgog
ICAgICAgIGlmIG5vdCBwa2cgaW4gcGFja2FnZXM6CiAgICAgICAgICAgIGlmIHByZXBlbmQ6CiAg
ICAgICAgICAgICAgICBwYWNrYWdlcyA9IFtwa2ddICsgcGFja2FnZXMKICAgICAgICAgICAgZWxz
ZToKICAgICAgICAgICAgICAgIHBhY2thZ2VzLmFwcGVuZChwa2cpCiAgICAgICAgb2xkZmlsZXMg
PSBkLmdldFZhcignRklMRVNfJyArIHBrZywgVHJ1ZSkKICAgICAgICBpZiBub3Qgb2xkZmlsZXM6
CiAgICAgICAgICAgIHRoZV9maWxlcyA9IFtvcy5wYXRoLmpvaW4ocm9vdCwgbyldCiAgICAgICAg
ICAgIGlmIGF1eF9maWxlc19wYXR0ZXJuOgogICAgICAgICAgICAgICAgaWYgdHlwZShhdXhfZmls
ZXNfcGF0dGVybikgaXMgbGlzdDoKICAgICAgICAgICAgICAgICAgICBmb3IgZnAgaW4gYXV4X2Zp
bGVzX3BhdHRlcm46CiAgICAgICAgICAgICAgICAgICAgICAgIHRoZV9maWxlcy5hcHBlbmQoZnAg
JSBvbikKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgdGhlX2ZpbGVz
LmFwcGVuZChhdXhfZmlsZXNfcGF0dGVybiAlIG9uKQogICAgICAgICAgICBpZiBhdXhfZmlsZXNf
cGF0dGVybl92ZXJiYXRpbToKICAgICAgICAgICAgICAgIGlmIHR5cGUoYXV4X2ZpbGVzX3BhdHRl
cm5fdmVyYmF0aW0pIGlzIGxpc3Q6CiAgICAgICAgICAgICAgICAgICAgZm9yIGZwIGluIGF1eF9m
aWxlc19wYXR0ZXJuX3ZlcmJhdGltOgogICAgICAgICAgICAgICAgICAgICAgICB0aGVfZmlsZXMu
YXBwZW5kKGZwICUgbS5ncm91cCgxKSkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAg
ICAgICAgICAgdGhlX2ZpbGVzLmFwcGVuZChhdXhfZmlsZXNfcGF0dGVybl92ZXJiYXRpbSAlIG0u
Z3JvdXAoMSkpCiAgICAgICAgICAgIGQuc2V0VmFyKCdGSUxFU18nICsgcGtnLCAiICIuam9pbih0
aGVfZmlsZXMpKQogICAgICAgICAgICBpZiBleHRyYV9kZXBlbmRzICE9ICcnOgogICAgICAgICAg
ICAgICAgZC5hcHBlbmRWYXIoJ1JERVBFTkRTXycgKyBwa2csICcgJyArIGV4dHJhX2RlcGVuZHMp
CiAgICAgICAgICAgIGQuc2V0VmFyKCdERVNDUklQVElPTl8nICsgcGtnLCBkZXNjcmlwdGlvbiAl
IG9uKQogICAgICAgICAgICBpZiBwb3N0aW5zdDoKICAgICAgICAgICAgICAgIGQuc2V0VmFyKCdw
a2dfcG9zdGluc3RfJyArIHBrZywgcG9zdGluc3QpCiAgICAgICAgICAgIGlmIHBvc3RybToKICAg
ICAgICAgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdHJtXycgKyBwa2csIHBvc3RybSkKICAgICAg
ICBlbHNlOgogICAgICAgICAgICBkLnNldFZhcignRklMRVNfJyArIHBrZywgb2xkZmlsZXMgKyAi
ICIgKyBvcy5wYXRoLmpvaW4ocm9vdCwgbykpCiAgICAgICAgaWYgY2FsbGFibGUoaG9vayk6CiAg
ICAgICAgICAgIGhvb2soZiwgcGtnLCBmaWxlX3JlZ2V4LCBvdXRwdXRfcGF0dGVybiwgbS5ncm91
cCgxKSkKCiAgICBkLnNldFZhcignUEFDS0FHRVMnLCAnICcuam9pbihwYWNrYWdlcykpCn0KCgpw
eXRob24gcHJvY2Vzc19kaXIgKCkgewpkZWYgcHJvY2Vzc19kaXIgKGRpcmVjdG9yeSwgZCk6CiAg
ICBpbXBvcnQgc3VicHJvY2VzcyBhcyBzdWIKICAgIGltcG9ydCBzdGF0CgogICAgY21kID0gZC5l
eHBhbmQoJ2NocnBhdGgnKQogICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicpCiAgICBiYXNl
ZGlyID0gZC5leHBhbmQoJycpCgogICAgI2JiLmRlYnVnKCJDaGVja2luZyAlcyBmb3IgYmluYXJp
ZXMgdG8gcHJvY2VzcyIgJSBkaXJlY3RvcnkpCiAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZGly
ZWN0b3J5KToKICAgICAgICByZXR1cm4KCiAgICBkaXJzID0gb3MubGlzdGRpcihkaXJlY3Rvcnkp
CiAgICBmb3IgZmlsZSBpbiBkaXJzOgogICAgICAgIGZwYXRoID0gZGlyZWN0b3J5ICsgIi8iICsg
ZmlsZQogICAgICAgIGZwYXRoID0gb3MucGF0aC5ub3JtcGF0aChmcGF0aCkKICAgICAgICBpZiBv
cy5wYXRoLmlzbGluayhmcGF0aCk6CiAgICAgICAgICAgICMgU2tpcCBzeW1saW5rcwogICAgICAg
ICAgICBjb250aW51ZQoKICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZwYXRoKToKICAgICAgICAg
ICAgcHJvY2Vzc19kaXIoZnBhdGgsIGQpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgI2JiLm5v
dGUoIlRlc3RpbmcgJXMgZm9yIHJlbG9jYXRhYmlsaXR5IiAlIGZwYXRoKQoKICAgICAgICAgICAg
IyBXZSBuZWVkIHJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zIGZvciBjaHJwYXRoLCBpZiB3ZSBk
b24ndCBoYXZlCiAgICAgICAgICAgICMgdGhlbSB0aGVuIHNldCB0aGVtIHRlbXBvcmFyaWx5LiBU
YWtlIGEgY29weSBvZiB0aGUgZmlsZXMKICAgICAgICAgICAgIyBwZXJtaXNzaW9ucyBzbyB0aGF0
IHdlIGNhbiByZXN0b3JlIHRoZW0gYWZ0ZXJ3YXJkcy4KICAgICAgICAgICAgcGVybXMgPSBvcy5z
dGF0KGZwYXRoKVtzdGF0LlNUX01PREVdCiAgICAgICAgICAgIGlmIG9zLmFjY2VzcyhmcGF0aCwg
b3MuV19PS3xvcy5SX09LKToKICAgICAgICAgICAgICAgIHBlcm1zID0gTm9uZQogICAgICAgICAg
ICBlbHNlOgogICAgICAgICAgICAgICAgIyBUZW1wb3JhcmlseSBtYWtlIHRoZSBmaWxlIHdyaXRl
YWJsZSBzbyB3ZSBjYW4gY2hycGF0aCBpdAogICAgICAgICAgICAgICAgb3MuY2htb2QoZnBhdGgs
IHBlcm1zfHN0YXQuU19JUldYVSkKCiAgICAgICAgICAgIHAgPSBzdWIuUG9wZW4oW2NtZCwgJy1s
JywgZnBhdGhdLHN0ZG91dD1zdWIuUElQRSxzdGRlcnI9c3ViLlBJUEUpCiAgICAgICAgICAgIGVy
ciwgb3V0ID0gcC5jb21tdW5pY2F0ZSgpCiAgICAgICAgICAgICMgSWYgcmV0dXJuZWQgc3VjY2Vz
ZnVsbHksIHByb2Nlc3Mgc3RkZXJyIGZvciByZXN1bHRzCiAgICAgICAgICAgIGlmIHAucmV0dXJu
Y29kZSAhPSAwOgogICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgICMgVGhyb3cg
YXdheSBldmVyeXRoaW5nIG90aGVyIHRoYW4gdGhlIHJwYXRoIGxpc3QKICAgICAgICAgICAgY3Vy
cl9ycGF0aCA9IGVyci5wYXJ0aXRpb24oIlJQQVRIPSIpWzJdCiAgICAgICAgICAgICNiYi5ub3Rl
KCJDdXJyZW50IHJwYXRoIGZvciAlcyBpcyAlcyIgJSAoZnBhdGgsIGN1cnJfcnBhdGguc3RyaXAo
KSkpCiAgICAgICAgICAgIHJwYXRocyA9IGN1cnJfcnBhdGguc3BsaXQoIjoiKQogICAgICAgICAg
ICBuZXdfcnBhdGhzID0gW10KICAgICAgICAgICAgZm9yIHJwYXRoIGluIHJwYXRoczoKICAgICAg
ICAgICAgICAgICMgSWYgcnBhdGggaXMgYWxyZWFkeSBkeW5hbWljIGNvcHkgaXQgdG8gbmV3X3Jw
YXRoIGFuZCBjb250aW51ZQogICAgICAgICAgICAgICAgaWYgcnBhdGguZmluZCgiJE9SSUdJTiIp
ICE9IC0xOgogICAgICAgICAgICAgICAgICAgIG5ld19ycGF0aHMuYXBwZW5kKHJwYXRoLnN0cmlw
KCkpCiAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICMgSWYgdGhl
IHJwYXRoIHNoYXJlcyBhIHJvb3Qgd2l0aCBiYXNlX3ByZWZpeCBkZXRlcm1pbmUgYSBuZXcgZHlu
YW1pYyBycGF0aCBmcm9tIHRoZQogICAgICAgICAgICAgICAgIyBiYXNlX3ByZWZpeCBzaGFyZWQg
cm9vdAogICAgICAgICAgICAgICAgaWYgcnBhdGguZmluZChiYXNlZGlyKSAhPSAtMToKICAgICAg
ICAgICAgICAgICAgICBkZXB0aCA9IGZwYXRoLnBhcnRpdGlvbihiYXNlZGlyKVsyXS5jb3VudCgn
LycpCiAgICAgICAgICAgICAgICAgICAgbGlicGF0aCA9IHJwYXRoLnBhcnRpdGlvbihiYXNlZGly
KVsyXS5zdHJpcCgpCiAgICAgICAgICAgICAgICAjIG90aGVyd2lzZSAoaS5lLiBjcm9zcyBwYWNr
YWdlcykgZGV0ZXJtaW5lIGEgc2hhcmVkIHJvb3QgYmFzZWQgb24gdGhlIFRNUERJUgogICAgICAg
ICAgICAgICAgIyBOT1RFOiBUaGlzIHdpbGwgbm90IHdvcmsgcmVsaWFibHkgZm9yIGNyb3NzIHBh
Y2thZ2VzLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNhc2UKICAgICAgICAgICAgICAgICMgd2hlcmUg
eW91ciBUTVBESVIgaXMgYSBzaG9ydCBwYXRoIChpLmUuIC91c3IvcG9reSkgYXMgY2hycGF0aCBj
YW5ub3QgaW5zZXJ0IGFuCiAgICAgICAgICAgICAgICAjIHJwYXRoIGxvbmdlciB0aGFuIHRoYXQg
d2hpY2ggaXMgYWxyZWFkeSBzZXQuCiAgICAgICAgICAgICAgICBlbGlmIHJwYXRoLmZpbmQodG1w
ZGlyKSAhPSAtMToKICAgICAgICAgICAgICAgICAgICBkZXB0aCA9IGZwYXRoLnJwYXJ0aXRpb24o
dG1wZGlyKVsyXS5jb3VudCgnLycpCiAgICAgICAgICAgICAgICAgICAgbGlicGF0aCA9IHJwYXRo
LnBhcnRpdGlvbih0bXBkaXIpWzJdLnN0cmlwKCkKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAg
ICAgICAgICAgICAgICAgbmV3X3JwYXRocy5hcHBlbmQocnBhdGguc3RyaXAoKSkKICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgYmFzZSA9ICIkT1JJR0lOIgogICAg
ICAgICAgICAgICAgd2hpbGUgZGVwdGggPiAxOgogICAgICAgICAgICAgICAgICAgIGJhc2UgKz0g
Ii8uLiIKICAgICAgICAgICAgICAgICAgICBkZXB0aC09MQogICAgICAgICAgICAgICAgbmV3X3Jw
YXRocy5hcHBlbmQoIiVzJXMiICUgKGJhc2UsIGxpYnBhdGgpKQoKICAgICAgICAgICAgIyBpZiB3
ZSBoYXZlIG1vZGlmaWVkIHNvbWUgcnBhdGhzIGNhbGwgY2hycGF0aCB0byB1cGRhdGUgdGhlIGJp
bmFyeQogICAgICAgICAgICBpZiBsZW4obmV3X3JwYXRocyk6CiAgICAgICAgICAgICAgICBhcmdz
ID0gIjoiLmpvaW4obmV3X3JwYXRocykKICAgICAgICAgICAgICAgICNiYi5ub3RlKCJTZXR0aW5n
IHJwYXRoIGZvciAlcyB0byAlcyIgJShmcGF0aCwgYXJncykpCiAgICAgICAgICAgICAgICBwID0g
c3ViLlBvcGVuKFtjbWQsICctcicsIGFyZ3MsIGZwYXRoXSxzdGRvdXQ9c3ViLlBJUEUsc3RkZXJy
PXN1Yi5QSVBFKQogICAgICAgICAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKICAg
ICAgICAgICAgICAgIGlmIHAucmV0dXJuY29kZSAhPSAwOgogICAgICAgICAgICAgICAgICAgIGJi
LmVycm9yKCIlczogY2hycGF0aCBjb21tYW5kIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAlZDpcbiVz
JXMiICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBwLnJldHVybmNvZGUsIG91dCwgZXJyKSkKICAg
ICAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkCgogICAgICAgICAgICBp
ZiBwZXJtczoKICAgICAgICAgICAgICAgIG9zLmNobW9kKGZwYXRoLCBwZXJtcykKfQoKCnB5dGhv
biBzc3RhdGVfc3RhdGVfZnJvbXZhcnMgKCkgewpkZWYgc3N0YXRlX3N0YXRlX2Zyb212YXJzKGQs
IHRhc2sgPSBOb25lKToKICAgIGlmIHRhc2sgaXMgTm9uZToKICAgICAgICB0YXNrID0gZC5nZXRW
YXIoJ0JCX0NVUlJFTlRUQVNLJywgVHJ1ZSkKICAgICAgICBpZiBub3QgdGFzazoKICAgICAgICAg
ICAgYmIuZmF0YWwoInNzdGF0ZSBjb2RlIHJ1bm5pbmcgd2l0aG91dCB0YXNrIGNvbnRleHQ/ISIp
CiAgICAgICAgdGFzayA9IHRhc2sucmVwbGFjZSgiX3NldHNjZW5lIiwgIiIpCgogICAgbmFtZSA9
IGQuZ2V0VmFyRmxhZygiZG9fIiArIHRhc2ssICdzc3RhdGUtbmFtZScsIFRydWUpCiAgICBpbnB1
dHMgPSAoZC5nZXRWYXJGbGFnKCJkb18iICsgdGFzaywgJ3NzdGF0ZS1pbnB1dGRpcnMnLCBUcnVl
KSBvciAiIikuc3BsaXQoKQogICAgb3V0cHV0cyA9IChkLmdldFZhckZsYWcoImRvXyIgKyB0YXNr
LCAnc3N0YXRlLW91dHB1dGRpcnMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQogICAgcGxhaW5kaXJz
ID0gKGQuZ2V0VmFyRmxhZygiZG9fIiArIHRhc2ssICdzc3RhdGUtcGxhaW5kaXJzJywgVHJ1ZSkg
b3IgIiIpLnNwbGl0KCkKICAgIGxvY2tmaWxlcyA9IChkLmdldFZhckZsYWcoImRvXyIgKyB0YXNr
LCAnc3N0YXRlLWxvY2tmaWxlJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKICAgIGxvY2tmaWxlc3No
YXJlZCA9IChkLmdldFZhckZsYWcoImRvXyIgKyB0YXNrLCAnc3N0YXRlLWxvY2tmaWxlLXNoYXJl
ZCcsIFRydWUpIG9yICIiKS5zcGxpdCgpCiAgICBpbnRlcmNlcHRmdW5jcyA9IChkLmdldFZhckZs
YWcoImRvXyIgKyB0YXNrLCAnc3N0YXRlLWludGVyY2VwdGZ1bmNzJywgVHJ1ZSkgb3IgIiIpLnNw
bGl0KCkKICAgIGlmIG5vdCBuYW1lIG9yIGxlbihpbnB1dHMpICE9IGxlbihvdXRwdXRzKToKICAg
ICAgICBiYi5mYXRhbCgic3N0YXRlIHZhcmlhYmxlcyBub3Qgc2V0dXAgY29ycmVjdGx5PyEiKQoK
ICAgIHNzID0gc3N0YXRlX2luaXQobmFtZSwgdGFzaywgZCkKICAgIGZvciBpIGluIHJhbmdlKGxl
bihpbnB1dHMpKToKICAgICAgICBzc3RhdGVfYWRkKHNzLCBpbnB1dHNbaV0sIG91dHB1dHNbaV0s
IGQpCiAgICBzc1snbG9ja2ZpbGVzJ10gPSBsb2NrZmlsZXMKICAgIHNzWydsb2NrZmlsZXMtc2hh
cmVkJ10gPSBsb2NrZmlsZXNzaGFyZWQKICAgIHNzWydwbGFpbmRpcnMnXSA9IHBsYWluZGlycwog
ICAgc3NbJ2ludGVyY2VwdGZ1bmNzJ10gPSBpbnRlcmNlcHRmdW5jcwogICAgcmV0dXJuIHNzCn0K
CgpweXRob24gZG9fdW5wYWNrICgpIHsKICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnYmFzZV9kb191
bnBhY2snLCBkKQp9CgoKcHl0aG9uIHBhY2thZ2VfcWFfY2hlY2tfYXJjaCAoKSB7CmRlZiBwYWNr
YWdlX3FhX2NoZWNrX2FyY2gocGF0aCxuYW1lLGQsIGVsZiwgbWVzc2FnZXMpOgogICAgIiIiCiAg
ICBDaGVjayBpZiBhcmNocyBhcmUgY29tcGF0aWJsZQogICAgIiIiCiAgICBpZiBub3QgZWxmOgog
ICAgICAgIHJldHVybgoKICAgIHRhcmdldF9vcyAgID0gZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRy
dWUpCiAgICB0YXJnZXRfYXJjaCA9IGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpCiAgICBw
cm92aWRlcyA9IGQuZ2V0VmFyKCdQUk9WSURFUycsIGQsIFRydWUpCiAgICBicG4gPSBkLmdldFZh
cignQlBOJywgVHJ1ZSkKCiAgICAjIEZJWE1FOiBDcm9zcyBwYWNrYWdlIGNvbmZ1c2UgdGhpcyBj
aGVjaywgc28ganVzdCBza2lwIHRoZW0KICAgIGZvciBzIGluIFsnY3Jvc3MnLCAnbmF0aXZlc2Rr
JywgJ2Nyb3NzLWNhbmFkaWFuJ106CiAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcyhz
LCBkKToKICAgICAgICAgICAgcmV0dXJuCgogICAgIyBhdm9pZCBmb2xsb3dpbmcgbGlua3MgdG8g
L3Vzci9iaW4gKGUuZy4gb24gdWRldiBidWlsZHMpCiAgICAjIHdlIHdpbGwgY2hlY2sgdGhlIGZp
bGVzIHBvaW50ZWQgdG8gYW55d2F5Li4uCiAgICBpZiBvcy5wYXRoLmlzbGluayhwYXRoKToKICAg
ICAgICByZXR1cm4KCiAgICAjaWYgdGhpcyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiwgdGhlbiBm
aXggdGhlIGRpY3QgYWJvdmUKICAgIChtYWNoaW5lLCBvc2FiaSwgYWJpdmVyc2lvbiwgbGl0dGxl
ZW5kaWFuLCBiaXRzKSBcCiAgICAgICAgPSBwYWNrYWdlX3FhX2dldF9tYWNoaW5lX2RpY3QoKVt0
YXJnZXRfb3NdW3RhcmdldF9hcmNoXQoKICAgICMgQ2hlY2sgdGhlIGFyY2hpdGVjdHVyZSBhbmQg
ZW5kaWFubmVzIG9mIHRoZSBiaW5hcnkKICAgIGlmIG5vdCAoKG1hY2hpbmUgPT0gZWxmLm1hY2hp
bmUoKSkgb3IgXAoJKCJ2aXJ0dWFsL2tlcm5lbCIgaW4gcHJvdmlkZXMpIGFuZCAodGFyZ2V0X29z
ID09ICJsaW51eC1nbnV4MzIiKSk6CiAgICAgICAgbWVzc2FnZXMuYXBwZW5kKCJBcmNoaXRlY3R1
cmUgZGlkIG5vdCBtYXRjaCAoJWQgdG8gJWQpIG9uICVzIiAlIFwKICAgICAgICAgICAgICAgICAo
bWFjaGluZSwgZWxmLm1hY2hpbmUoKSwgcGFja2FnZV9xYV9jbGVhbl9wYXRoKHBhdGgsZCkpKQog
ICAgZWxpZiBub3QgKChiaXRzID09IGVsZi5hYmlTaXplKCkpIG9yICBcCgkoInZpcnR1YWwva2Vy
bmVsIiBpbiBwcm92aWRlcykgYW5kICh0YXJnZXRfb3MgPT0gImxpbnV4LWdudXgzMiIpKToKICAg
ICAgICBtZXNzYWdlcy5hcHBlbmQoIkJpdCBzaXplIGRpZCBub3QgbWF0Y2ggKCVkIHRvICVkKSAl
cyBvbiAlcyIgJSBcCiAgICAgICAgICAgICAgICAgKGJpdHMsIGVsZi5hYmlTaXplKCksIGJwbiwg
cGFja2FnZV9xYV9jbGVhbl9wYXRoKHBhdGgsZCkpKQogICAgZWxpZiBub3QgbGl0dGxlZW5kaWFu
ID09IGVsZi5pc0xpdHRsZUVuZGlhbigpOgogICAgICAgIG1lc3NhZ2VzLmFwcGVuZCgiRW5kaWFu
bmVzIGRpZCBub3QgbWF0Y2ggKCVkIHRvICVkKSBvbiAlcyIgJSBcCiAgICAgICAgICAgICAgICAg
KGxpdHRsZWVuZGlhbiwgZWxmLmlzTGl0dGxlRW5kaWFuKCksIHBhY2thZ2VfcWFfY2xlYW5fcGF0
aChwYXRoLGQpKSkKfQoKCnB5dGhvbiBsc2JfZGlzdHJvX2lkZW50aWZpZXIgKCkgewpkZWYgbHNi
X2Rpc3Ryb19pZGVudGlmaWVyKGQpOgogICAgYWRqdXN0ID0gZC5nZXRWYXIoJ0xTQl9ESVNUUk9f
QURKVVNUJywgVHJ1ZSkKICAgIGFkanVzdF9mdW5jID0gTm9uZQogICAgaWYgYWRqdXN0OgogICAg
ICAgIHRyeToKICAgICAgICAgICAgYWRqdXN0X2Z1bmMgPSBnbG9iYWxzKClbYWRqdXN0XQogICAg
ICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgcGFzcwogICAgcmV0dXJuIG9lLmxzYi5k
aXN0cm9faWRlbnRpZmllcihhZGp1c3RfZnVuYykKfQoKCnB5dGhvbiBydW5zdHJpcCAoKSB7CmRl
ZiBydW5zdHJpcChmaWxlLCBlbGZ0eXBlLCBkKToKICAgICMgRnVuY3Rpb24gdG8gc3RyaXAgYSBz
aW5nbGUgZmlsZSwgY2FsbGVkIGZyb20gc3BsaXRfYW5kX3N0cmlwX2ZpbGVzIGJlbG93CiAgICAj
IEEgd29ya2luZyAnZmlsZScgKG9uZSB3aGljaCB3b3JrcyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVj
dHVyZSkKICAgICMKICAgICMgVGhlIGVsZnR5cGUgaXMgYSBiaXQgcGF0dGVybiAoZXhwbGFpbmVk
IGluIHNwbGl0X2FuZF9zdHJpcF9maWxlcykgdG8gdGVsbAogICAgIyB1cyB3aGF0IHR5cGUgb2Yg
ZmlsZSB3ZSdyZSBwcm9jZXNzaW5nLi4uCiAgICAjIDQgLSBleGVjdXRhYmxlCiAgICAjIDggLSBz
aGFyZWQgbGlicmFyeQoKICAgIGltcG9ydCBjb21tYW5kcywgc3RhdCwgc3VicHJvY2VzcwoKICAg
IHBhdGhwcmVmaXggPSAiZXhwb3J0IFBBVEg9JXM7ICIgJSBkLmdldFZhcignUEFUSCcsIFRydWUp
CiAgICBzdHJpcCA9IGQuZ2V0VmFyKCJTVFJJUCIsIFRydWUpCgogICAgIyBIYW5kbGUga2VybmVs
IG1vZHVsZXMgc3BlY2lmaWNhbGx5IC0gLmRlYnVnIGRpcmVjdG9yaWVzIGhlcmUgYXJlIHBvaW50
bGVzcwogICAgaWYgZmlsZS5maW5kKCIvbGliL21vZHVsZXMvIikgIT0gLTEgYW5kIGZpbGUuZW5k
c3dpdGgoIi5rbyIpOgogICAgICAgIHJldHVybiBzdWJwcm9jZXNzLmNhbGwoIiVzJyVzJyAtLXN0
cmlwLWRlYnVnIC0tcmVtb3ZlLXNlY3Rpb249LmNvbW1lbnQgLS1yZW1vdmUtc2VjdGlvbj0ubm90
ZSAtLXByZXNlcnZlLWRhdGVzICclcyciICUgKHBhdGhwcmVmaXgsIHN0cmlwLCBmaWxlKSwgc2hl
bGw9VHJ1ZSkKCiAgICBuZXdtb2RlID0gTm9uZQogICAgaWYgbm90IG9zLmFjY2VzcyhmaWxlLCBv
cy5XX09LKSBvciBvcy5hY2Nlc3MoZmlsZSwgb3MuUl9PSyk6CiAgICAgICAgb3JpZ21vZGUgPSBv
cy5zdGF0KGZpbGUpW3N0YXQuU1RfTU9ERV0KICAgICAgICBuZXdtb2RlID0gb3JpZ21vZGUgfCBz
dGF0LlNfSVdSSVRFIHwgc3RhdC5TX0lSRUFECiAgICAgICAgb3MuY2htb2QoZmlsZSwgbmV3bW9k
ZSkKCiAgICBleHRyYWZsYWdzID0gIiIKCiAgICAjIHNwbGl0X2FuZF9zdHJpcF9maWxlcyBpcyBj
YWxsaW5nIHRoaXMgd2l0aCBlbGZfdHlwZSBOb25lLCBjYXVzaW5nOgogICAgIyBUeXBlRXJyb3I6
IHVuc3VwcG9ydGVkIG9wZXJhbmQgdHlwZShzKSBmb3IgJjogJ05vbmVUeXBlJyBhbmQgJ2ludCcK
ICAgIGlmIGVsZnR5cGU6CiAgICAgICAgIyAuc28gYW5kIHNoYXJlZCBsaWJyYXJ5CiAgICAgICAg
aWYgIi5zbyIgaW4gZmlsZSBhbmQgZWxmdHlwZSAmIDg6CiAgICAgICAgICAgIGV4dHJhZmxhZ3Mg
PSAiLS1yZW1vdmUtc2VjdGlvbj0uY29tbWVudCAtLXJlbW92ZS1zZWN0aW9uPS5ub3RlIC0tc3Ry
aXAtdW5uZWVkZWQiCiAgICAgICAgIyBzaGFyZWQgb3IgZXhlY3V0YWJsZToKICAgICAgICBlbGlm
IGVsZnR5cGUgJiA4IG9yIGVsZnR5cGUgJiA0OgogICAgICAgICAgICBleHRyYWZsYWdzID0gIi0t
cmVtb3ZlLXNlY3Rpb249LmNvbW1lbnQgLS1yZW1vdmUtc2VjdGlvbj0ubm90ZSIKCiAgICBzdHJp
cGNtZCA9ICInJXMnICVzICclcyciICUgKHN0cmlwLCBleHRyYWZsYWdzLCBmaWxlKQogICAgYmIu
ZGVidWcoMSwgInJ1bnN0cmlwOiAlcyIgJSBzdHJpcGNtZCkKCiAgICByZXQgPSBzdWJwcm9jZXNz
LmNhbGwoIiVzJXMiICUgKHBhdGhwcmVmaXgsIHN0cmlwY21kKSwgc2hlbGw9VHJ1ZSkKCiAgICBp
ZiBuZXdtb2RlOgogICAgICAgIG9zLmNobW9kKGZpbGUsIG9yaWdtb2RlKQoKICAgIGlmIHJldDoK
ICAgICAgICBiYi5lcnJvcigicnVuc3RyaXA6ICclcycgc3RyaXAgY29tbWFuZCBmYWlsZWQiICUg
c3RyaXBjbWQpCgogICAgcmV0dXJuIDAKfQoKCnB5dGhvbiBjaGVja19zYW5pdHlfdmFsaWRtYWNo
aW5lICgpIHsKZGVmIGNoZWNrX3Nhbml0eV92YWxpZG1hY2hpbmUoc2FuaXR5X2RhdGEpOgogICAg
bWVzc2FnZXMgPSAiIgoKICAgICMgQ2hlY2sgVFVORV9BUkNIIGlzIHNldAogICAgaWYgc2FuaXR5
X2RhdGEuZ2V0VmFyKCdUVU5FX0FSQ0gnLCBUcnVlKSA9PSAnSU5WQUxJRCc6CiAgICAgICAgbWVz
c2FnZXMgPSBtZXNzYWdlcyArICdUVU5FX0FSQ0ggaXMgdW5zZXQuIFBsZWFzZSBlbnN1cmUgeW91
ciBNQUNISU5FIGNvbmZpZ3VyYXRpb24gaW5jbHVkZXMgYSB2YWxpZCB0dW5lIGNvbmZpZ3VyYXRp
b24gZmlsZSB3aGljaCB3aWxsIHNldCB0aGlzIGNvcnJlY3RseS5cbicKCiAgICAjIENoZWNrIFRB
UkdFVF9PUyBpcyBzZXQKICAgIGlmIHNhbml0eV9kYXRhLmdldFZhcignVEFSR0VUX09TJywgVHJ1
ZSkgPT0gJ0lOVkFMSUQnOgogICAgICAgIG1lc3NhZ2VzID0gbWVzc2FnZXMgKyAnUGxlYXNlIHNl
dCBUQVJHRVRfT1MgZGlyZWN0bHksIG9yIGNob29zZSBhIE1BQ0hJTkUgb3IgRElTVFJPIHRoYXQg
ZG9lcyBzby5cbicKCiAgICAjIENoZWNrIHRoYXQgd2UgZG9uJ3QgaGF2ZSBkdXBsaWNhdGUgZW50
cmllcyBpbiBQQUNLQUdFX0FSQ0hTICYgdGhhdCBUVU5FX1BLR0FSQ0ggaXMgaW4gUEFDS0FHRV9B
UkNIUwogICAgcGtnYXJjaHMgPSBzYW5pdHlfZGF0YS5nZXRWYXIoJ1BBQ0tBR0VfQVJDSFMnLCBU
cnVlKQogICAgdHVuZXBrZyA9IHNhbml0eV9kYXRhLmdldFZhcignVFVORV9QS0dBUkNIJywgVHJ1
ZSkKICAgIHR1bmVmb3VuZCA9IEZhbHNlCiAgICBzZWVuID0ge30KICAgIGR1cHMgPSBbXQoKICAg
IGZvciBwYSBpbiBwa2dhcmNocy5zcGxpdCgpOgogICAgICAgIGlmIHNlZW4uZ2V0KHBhLCAwKSA9
PSAxOgogICAgICAgICAgICBkdXBzLmFwcGVuZChwYSkKICAgICAgICBlbHNlOgogICAgICAgICAg
ICBzZWVuW3BhXSA9IDEKICAgICAgICBpZiBwYSA9PSB0dW5lcGtnOgogICAgICAgICAgICB0dW5l
Zm91bmQgPSBUcnVlCgogICAgaWYgbGVuKGR1cHMpOgogICAgICAgIG1lc3NhZ2VzID0gbWVzc2Fn
ZXMgKyAiRXJyb3IsIHRoZSBQQUNLQUdFX0FSQ0hTIHZhcmlhYmxlIGNvbnRhaW5zIGR1cGxpY2F0
ZXMuIFRoZSBmb2xsb3dpbmcgYXJjaHMgYXJlIGxpc3RlZCBtb3JlIHRoYW4gb25jZTogJXMiICUg
IiAiLmpvaW4oZHVwcykKCiAgICBpZiB0dW5lZm91bmQgPT0gRmFsc2U6CiAgICAgICAgbWVzc2Fn
ZXMgPSBtZXNzYWdlcyArICJFcnJvciwgdGhlIFBBQ0tBR0VfQVJDSFMgdmFyaWFibGUgZG9lcyBu
b3QgY29udGFpbiBUVU5FX1BLR0FSQ0ggKCVzKS4iICUgdHVuZXBrZwoKICAgIHJldHVybiBtZXNz
YWdlcwoKfQoKCnB5dGhvbiBwYWNrYWdlX3FhX2NoZWNrX2Rlc2t0b3AgKCkgewpkZWYgcGFja2Fn
ZV9xYV9jaGVja19kZXNrdG9wKHBhdGgsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgogICAgIiIi
CiAgICBSdW4gYWxsIGRlc2t0b3AgZmlsZXMgdGhyb3VnaCBkZXNrdG9wLWZpbGUtdmFsaWRhdGUu
CiAgICAiIiIKICAgIGlmIHBhdGguZW5kc3dpdGgoIi5kZXNrdG9wIik6CiAgICAgICAgZGVza3Rv
cF9maWxlX3ZhbGlkYXRlID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdTVEFHSU5HX0JJTkRJUl9O
QVRJVkUnLFRydWUpLCdkZXNrdG9wLWZpbGUtdmFsaWRhdGUnKQogICAgICAgIG91dHB1dCA9IG9z
LnBvcGVuKCIlcyAlcyIgJSAoZGVza3RvcF9maWxlX3ZhbGlkYXRlLCBwYXRoKSkKICAgICAgICAj
IFRoaXMgb25seSBwcm9kdWNlcyBvdXRwdXQgb24gZXJyb3JzCiAgICAgICAgZm9yIGwgaW4gb3V0
cHV0OgogICAgICAgICAgICBtZXNzYWdlcy5hcHBlbmQoIkRlc2t0b3AgZmlsZSBpc3N1ZTogIiAr
IGwuc3RyaXAoKSkKfQoKCnB5dGhvbiBnZXRfZGlza3N0YXRzICgpIHsKZGVmIGdldF9kaXNrc3Rh
dHMoZGV2KToKICAgIGltcG9ydCBpdGVydG9vbHMKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAg
ICMgRm9yIGluZm8gb24gd2hhdCB0aGVzZSBhcmUsIHNlZSBrZXJuZWwgZG9jIGZpbGUgaW9zdGF0
cy50eHQKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgIERTVEFUX0tFWVMgPSBbJ1JlYWRzQ29t
cCcsICdSZWFkc01lcmdlZCcsICdTZWN0UmVhZCcsICdUaW1lUmVhZHMnLCAnV3JpdGVzQ29tcCcs
ICdTZWN0V3JpdGUnLCAnVGltZVdyaXRlJywgJ0lPaW5Qcm9ncmVzcycsICdUaW1lSU8nLCAnV1Rp
bWVJTyddCiAgICB0cnk6CiAgICAgICAgZm9yIHggaW4gb3BlbigiL3Byb2MvZGlza3N0YXRzIiwg
InIiKToKICAgICAgICAgICAgaWYgZGV2IGluIHg6CiAgICAgICAgICAgICAgICBkaXNrc3RhdHNf
dmFsID0geC5yc3RyaXAoKS5zcGxpdCgpWzQ6XQogICAgZXhjZXB0IElPRXJyb3IgYXMgZToKICAg
ICAgICByZXR1cm4KICAgIGRpc2tzdGF0cyA9IGRpY3QoaXRlcnRvb2xzLml6aXAoRFNUQVRfS0VZ
UywgZGlza3N0YXRzX3ZhbCkpCiAgICByZXR1cm4gZGlza3N0YXRzCn0KCgpweXRob24gc3JjX3Bh
dGNoZXMgKCkgewpkZWYgc3JjX3BhdGNoZXMoZCwgYWxsID0gRmFsc2UgKToKICAgIHdvcmtkaXIg
PSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCiAgICBmZXRjaCA9IGJiLmZldGNoMi5GZXRjaChb
XSwgZCkKICAgIHBhdGNoZXMgPSBbXQogICAgc291cmNlcyA9IFtdCiAgICBmb3IgdXJsIGluIGZl
dGNoLnVybHM6CiAgICAgICAgbG9jYWwgPSBwYXRjaF9wYXRoKHVybCwgZmV0Y2gsIHdvcmtkaXIp
CiAgICAgICAgaWYgbm90IGxvY2FsOgogICAgICAgICAgICBpZiBhbGw6CiAgICAgICAgICAgICAg
ICBsb2NhbCA9IGZldGNoLmxvY2FscGF0aCh1cmwpCiAgICAgICAgICAgICAgICBzb3VyY2VzLmFw
cGVuZChsb2NhbCkKICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgdXJsZGF0YSA9IGZldGNo
LnVkW3VybF0KICAgICAgICBwYXJtID0gdXJsZGF0YS5wYXJtCiAgICAgICAgcGF0Y2huYW1lID0g
cGFybS5nZXQoJ3BuYW1lJykgb3Igb3MucGF0aC5iYXNlbmFtZShsb2NhbCkKCiAgICAgICAgYXBw
bHksIHJlYXNvbiA9IHNob3VsZF9hcHBseShwYXJtLCBkKQogICAgICAgIGlmIG5vdCBhcHBseToK
ICAgICAgICAgICAgaWYgcmVhc29uOgogICAgICAgICAgICAgICAgYmIubm90ZSgiUGF0Y2ggJXMg
JXMiICUgKHBhdGNobmFtZSwgcmVhc29uKSkKICAgICAgICAgICAgY29udGludWUKCiAgICAgICAg
cGF0Y2hwYXJtID0geydwYXRjaG5hbWUnOiBwYXRjaG5hbWV9CiAgICAgICAgaWYgInN0cmlwbGV2
ZWwiIGluIHBhcm06CiAgICAgICAgICAgIHN0cmlwbGV2ZWwgPSBwYXJtWyJzdHJpcGxldmVsIl0K
ICAgICAgICBlbGlmICJwbnVtIiBpbiBwYXJtOgogICAgICAgICAgICAjYmIubXNnLndhcm4oTm9u
ZSwgIkRlcHJlY2F0ZWQgdXNhZ2Ugb2YgJ3BudW0nIHVybCBwYXJhbWV0ZXIgaW4gJyVzJywgcGxl
YXNlIHVzZSAnc3RyaXBsZXZlbCciICUgdXJsKQogICAgICAgICAgICBzdHJpcGxldmVsID0gcGFy
bVsicG51bSJdCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc3RyaXBsZXZlbCA9ICcxJwogICAg
ICAgIHBhdGNocGFybVsnc3RyaXBsZXZlbCddID0gc3RyaXBsZXZlbAoKICAgICAgICBwYXRjaGRp
ciA9IHBhcm0uZ2V0KCdwYXRjaGRpcicpCiAgICAgICAgaWYgcGF0Y2hkaXI6CiAgICAgICAgICAg
IHBhdGNocGFybVsncGF0Y2hkaXInXSA9IHBhdGNoZGlyCgogICAgICAgIGxvY2FsdXJsID0gYmIu
ZW5jb2RldXJsKCgnZmlsZScsICcnLCBsb2NhbCwgJycsICcnLCBwYXRjaHBhcm0pKQogICAgICAg
IHBhdGNoZXMuYXBwZW5kKGxvY2FsdXJsKQoKICAgIGlmIGFsbDoKICAgICAgICByZXR1cm4gc291
cmNlcwoKICAgIHJldHVybiBwYXRjaGVzCn0KCgpweXRob24gcGFja2FnZV9xYV9oYXNoX3N0eWxl
ICgpIHsKZGVmIHBhY2thZ2VfcWFfaGFzaF9zdHlsZShwYXRoLCBuYW1lLCBkLCBlbGYsIG1lc3Nh
Z2VzKToKICAgICIiIgogICAgQ2hlY2sgaWYgdGhlIGJpbmFyeSBoYXMgdGhlIHJpZ2h0IGhhc2gg
c3R5bGUuLi4KICAgICIiIgoKICAgIGlmIG5vdCBlbGY6CiAgICAgICAgcmV0dXJuCgogICAgaWYg
b3MucGF0aC5pc2xpbmsocGF0aCk6CiAgICAgICAgcmV0dXJuCgogICAgZ251X2hhc2ggPSAiLS1o
YXNoLXN0eWxlPWdudSIgaW4gZC5nZXRWYXIoJ0xERkxBR1MnLCBUcnVlKQogICAgaWYgbm90IGdu
dV9oYXNoOgogICAgICAgIGdudV9oYXNoID0gIi0taGFzaC1zdHlsZT1ib3RoIiBpbiBkLmdldFZh
cignTERGTEFHUycsIFRydWUpCiAgICBpZiBub3QgZ251X2hhc2g6CiAgICAgICAgcmV0dXJuCgog
ICAgb2JqZHVtcCA9IGQuZ2V0VmFyKCdPQkpEVU1QJywgVHJ1ZSkKICAgIGVudl9wYXRoID0gZC5n
ZXRWYXIoJ1BBVEgnLCBUcnVlKQoKICAgIHNhbmUgPSBGYWxzZQogICAgaGFzX3N5bXMgPSBGYWxz
ZQoKICAgICMgSWYgdGhpcyBiaW5hcnkgaGFzIHN5bWJvbHMsIHdlIGV4cGVjdCBpdCB0byBoYXZl
IEdOVV9IQVNIIHRvby4KICAgIGZvciBsaW5lIGluIG9zLnBvcGVuKCJMQ19BTEw9QyBQQVRIPSVz
ICVzIC1wICclcycgMj4gL2Rldi9udWxsIiAlIChlbnZfcGF0aCwgb2JqZHVtcCwgcGF0aCksICJy
Iik6CiAgICAgICAgaWYgIlNZTVRBQiIgaW4gbGluZToKICAgICAgICAgICAgaGFzX3N5bXMgPSBU
cnVlCiAgICAgICAgaWYgIkdOVV9IQVNIIiBpbiBsaW5lOgogICAgICAgICAgICBzYW5lID0gVHJ1
ZQogICAgICAgIGlmICJbbWlwczMyXSIgaW4gbGluZSBvciAiW21pcHM2NF0iIGluIGxpbmU6Cgkg
ICAgc2FuZSA9IFRydWUKCiAgICBpZiBoYXNfc3ltcyBhbmQgbm90IHNhbmU6CiAgICAgICAgbWVz
c2FnZXMuYXBwZW5kKCJObyBHTlVfSEFTSCBpbiB0aGUgZWxmIGJpbmFyeTogJyVzJyIgJSBwYXRo
KQoKfQoKCnB5dGhvbiBzaG91bGRfYXBwbHkgKCkgewpkZWYgc2hvdWxkX2FwcGx5KHBhcm0sIGQp
OgogICAgIiIiRGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBhcHBseSB0aGUgZ2l2ZW4gcGF0Y2giIiIK
CiAgICBpZiAibWluZGF0ZSIgaW4gcGFybSBvciAibWF4ZGF0ZSIgaW4gcGFybToKICAgICAgICBw
biA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCiAgICAgICAgc3JjZGF0ZSA9IGQuZ2V0VmFyKCdTUkNE
QVRFXyVzJyAlIHBuLCBUcnVlKQogICAgICAgIGlmIG5vdCBzcmNkYXRlOgogICAgICAgICAgICBz
cmNkYXRlID0gZC5nZXRWYXIoJ1NSQ0RBVEUnLCBUcnVlKQoKICAgICAgICBpZiBzcmNkYXRlID09
ICJub3ciOgogICAgICAgICAgICBzcmNkYXRlID0gZC5nZXRWYXIoJ0RBVEUnLCBUcnVlKQoKICAg
ICAgICBpZiAibWF4ZGF0ZSIgaW4gcGFybSBhbmQgcGFybVsibWF4ZGF0ZSJdIDwgc3JjZGF0ZToK
ICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCAnaXMgb3V0ZGF0ZWQnCgogICAgICAgIGlmICJtaW5k
YXRlIiBpbiBwYXJtIGFuZCBwYXJtWyJtaW5kYXRlIl0gPiBzcmNkYXRlOgogICAgICAgICAgICBy
ZXR1cm4gRmFsc2UsICdpcyBwcmVkYXRlZCcKCgogICAgaWYgIm1pbnJldiIgaW4gcGFybToKICAg
ICAgICBzcmNyZXYgPSBkLmdldFZhcignU1JDUkVWJywgVHJ1ZSkKICAgICAgICBpZiBzcmNyZXYg
YW5kIHNyY3JldiA8IHBhcm1bIm1pbnJldiJdOgogICAgICAgICAgICByZXR1cm4gRmFsc2UsICdh
cHBsaWVzIHRvIGxhdGVyIHJldmlzaW9ucycKCiAgICBpZiAibWF4cmV2IiBpbiBwYXJtOgogICAg
ICAgIHNyY3JldiA9IGQuZ2V0VmFyKCdTUkNSRVYnLCBUcnVlKQogICAgICAgIGlmIHNyY3JldiBh
bmQgc3JjcmV2ID4gcGFybVsibWF4cmV2Il06CiAgICAgICAgICAgIHJldHVybiBGYWxzZSwgJ2Fw
cGxpZXMgdG8gZWFybGllciByZXZpc2lvbnMnCgogICAgaWYgInJldiIgaW4gcGFybToKICAgICAg
ICBzcmNyZXYgPSBkLmdldFZhcignU1JDUkVWJywgVHJ1ZSkKICAgICAgICBpZiBzcmNyZXYgYW5k
IHBhcm1bInJldiJdIG5vdCBpbiBzcmNyZXY6CiAgICAgICAgICAgIHJldHVybiBGYWxzZSwgImRv
ZXNuJ3QgYXBwbHkgdG8gcmV2aXNpb24iCgogICAgaWYgIm5vdHJldiIgaW4gcGFybToKICAgICAg
ICBzcmNyZXYgPSBkLmdldFZhcignU1JDUkVWJywgVHJ1ZSkKICAgICAgICBpZiBzcmNyZXYgYW5k
IHBhcm1bIm5vdHJldiJdIGluIHNyY3JldjoKICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCAiZG9l
c24ndCBhcHBseSB0byByZXZpc2lvbiIKCiAgICByZXR1cm4gVHJ1ZSwgTm9uZQp9CgoKcHl0aG9u
IHBvcHVsYXRlX3BhY2thZ2VzICgpIHsKICAgIGltcG9ydCBnbG9iLCBzdGF0LCBlcnJubywgcmUs
IHN1YnByb2Nlc3MKCiAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQogICAg
b3V0ZGlyID0gZC5nZXRWYXIoJ0RFUExPWV9ESVInLCBUcnVlKQogICAgZHZhciA9IGQuZ2V0VmFy
KCdQS0dEJywgVHJ1ZSkKICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkK
ICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKCiAgICBiYi5ta2RpcmhpZXIob3V0ZGlyKQog
ICAgb3MuY2hkaXIoZHZhcikKCiAgICAjIFNhbml0eSBjaGVjayBQQUNLQUdFUyBmb3IgZHVwbGlj
YXRlcyBhbmQgZm9yIExJQ0VOU0VfRVhDTFVTSU9OCiAgICAjIFNhbml0eSBzaG91bGQgYmUgbW92
ZWQgdG8gc2FuaXR5LmJiY2xhc3Mgb25jZSB3ZSBoYXZlIHRoZSBpbmZyYXN0dWN0dXJlCiAgICBw
YWNrYWdlX2xpc3QgPSBbXQoKICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKICAgICAg
ICBpZiBkLmdldFZhcignTElDRU5TRV9FWENMVVNJT04tJyArIHBrZywgVHJ1ZSk6CiAgICAgICAg
ICAgIGJiLndhcm4oIiVzIGhhcyBhbiBpbmNvbXBhdGlibGUgbGljZW5zZS4gRXhjbHVkaW5nIGZy
b20gcGFja2FnaW5nLiIgJSBwa2cpCiAgICAgICAgICAgIHBhY2thZ2VzLnJlbW92ZShwa2cpCiAg
ICAgICAgZWxzZToKICAgICAgICAgICAgaWYgcGtnIGluIHBhY2thZ2VfbGlzdDoKICAgICAgICAg
ICAgICAgIGJiLmVycm9yKCIlcyBpcyBsaXN0ZWQgaW4gUEFDS0FHRVMgbXVsdGlwbGUgdGltZXMs
IHRoaXMgbGVhZHMgdG8gcGFja2FnaW5nIGVycm9ycy4iICUgcGtnKQogICAgICAgICAgICBlbHNl
OgogICAgICAgICAgICAgICAgcGFja2FnZV9saXN0LmFwcGVuZChwa2cpCiAgICBkLnNldFZhcign
UEFDS0FHRVMnLCAnICcuam9pbihwYWNrYWdlX2xpc3QpKQogICAgcGtnZGVzdCA9IGQuZ2V0VmFy
KCdQS0dERVNUJywgVHJ1ZSkKICAgIHN1YnByb2Nlc3MuY2FsbCgncm0gLXJmICVzJyAlIHBrZ2Rl
c3QsIHNoZWxsPVRydWUpCgogICAgc2VlbiA9IFtdCgogICAgZm9yIHBrZyBpbiBwYWNrYWdlX2xp
c3Q6CiAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCiAgICAgICAgcm9v
dCA9IG9zLnBhdGguam9pbihwa2dkZXN0LCBwa2cpCiAgICAgICAgYmIubWtkaXJoaWVyKHJvb3Qp
CgogICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BLRycsIHBrZykKICAgICAgICBvdmVycmlkZXMg
PSBsb2NhbGRhdGEuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKQogICAgICAgIGlmIG5vdCBvdmVy
cmlkZXM6CiAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoJ09WRVJSSURFUyBu
b3QgZGVmaW5lZCcpCiAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgb3ZlcnJp
ZGVzICsgJzonICsgcGtnKQogICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQoK
ICAgICAgICBmaWxlc3ZhciA9IGxvY2FsZGF0YS5nZXRWYXIoJ0ZJTEVTJywgVHJ1ZSkgb3IgIiIK
ICAgICAgICBmaWxlcyA9IGZpbGVzdmFyLnNwbGl0KCkKICAgICAgICBmaWxlX2xpbmtzID0ge30K
ICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKICAgICAgICAgICAgaWYgZmlsZS5maW5kKCIvLyIp
ICE9IC0xOgogICAgICAgICAgICAgICAgYmIud2FybigiRklMRVMgdmFyaWFibGUgZm9yIHBhY2th
Z2UgJXMgY29udGFpbnMgJy8vJyB3aGljaCBpcyBpbnZhbGlkLiBBdHRlbXB0aW5nIHRvIGZpeCB0
aGlzIGJ1dCB5b3Ugc2hvdWxkIGNvcnJlY3QgdGhlIG1ldGFkYXRhLlxuIiAlIHBrZykKICAgICAg
ICAgICAgICAgIGZpbGUucmVwbGFjZSgiLy8iLCAiLyIpCiAgICAgICAgICAgIGlmIG9zLnBhdGgu
aXNhYnMoZmlsZSk6CiAgICAgICAgICAgICAgICBmaWxlID0gJy4nICsgZmlsZQogICAgICAgICAg
ICBpZiBub3Qgb3MucGF0aC5pc2xpbmsoZmlsZSk6CiAgICAgICAgICAgICAgICBpZiBvcy5wYXRo
LmlzZGlyKGZpbGUpOgogICAgICAgICAgICAgICAgICAgIG5ld2ZpbGVzID0gIFsgb3MucGF0aC5q
b2luKGZpbGUseCkgZm9yIHggaW4gb3MubGlzdGRpcihmaWxlKSBdCiAgICAgICAgICAgICAgICAg
ICAgaWYgbmV3ZmlsZXM6CiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzICs9IG5ld2ZpbGVz
CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGdsb2JiZWQgPSBn
bG9iLmdsb2IoZmlsZSkKICAgICAgICAgICAgaWYgZ2xvYmJlZDoKICAgICAgICAgICAgICAgIGlm
IFsgZmlsZSBdICE9IGdsb2JiZWQ6CiAgICAgICAgICAgICAgICAgICAgZmlsZXMgKz0gZ2xvYmJl
ZAogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGlmIChub3Qgb3MucGF0
aC5pc2xpbmsoZmlsZSkpIGFuZCAobm90IG9zLnBhdGguZXhpc3RzKGZpbGUpKToKICAgICAgICAg
ICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGlmIGZpbGUgaW4gc2VlbjoKICAgICAgICAgICAg
ICAgIGNvbnRpbnVlCiAgICAgICAgICAgIHNlZW4uYXBwZW5kKGZpbGUpCgogICAgICAgICAgICBk
ZWYgbWtkaXIoc3JjLCBkZXN0LCBwKToKICAgICAgICAgICAgICAgIHNyYyA9IG9zLnBhdGguam9p
bihzcmMsIHApCiAgICAgICAgICAgICAgICBkZXN0ID0gb3MucGF0aC5qb2luKGRlc3QsIHApCiAg
ICAgICAgICAgICAgICBiYi5ta2RpcmhpZXIoZGVzdCkKICAgICAgICAgICAgICAgIGZzdGF0ID0g
b3Muc3RhdChzcmMpCiAgICAgICAgICAgICAgICBvcy5jaG1vZChkZXN0LCBmc3RhdC5zdF9tb2Rl
KQogICAgICAgICAgICAgICAgb3MuY2hvd24oZGVzdCwgZnN0YXQuc3RfdWlkLCBmc3RhdC5zdF9n
aWQpCiAgICAgICAgICAgICAgICBpZiBwIG5vdCBpbiBzZWVuOgogICAgICAgICAgICAgICAgICAg
IHNlZW4uYXBwZW5kKHApCgogICAgICAgICAgICBkZWYgbWtkaXJfcmVjdXJzZShzcmMsIGRlc3Qs
IHBhdGhzKToKICAgICAgICAgICAgICAgIHdoaWxlIHBhdGhzLnN0YXJ0c3dpdGgoIi4vIik6CiAg
ICAgICAgICAgICAgICAgICAgcGF0aHMgPSBwYXRoc1syOl0KICAgICAgICAgICAgICAgIHAgPSAi
LiIKICAgICAgICAgICAgICAgIGZvciBjIGluIHBhdGhzLnNwbGl0KCIvIik6CiAgICAgICAgICAg
ICAgICAgICAgcCA9IG9zLnBhdGguam9pbihwLCBjKQogICAgICAgICAgICAgICAgICAgIGlmIG5v
dCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oZGVzdCwgcCkpOgogICAgICAgICAgICAgICAg
ICAgICAgICBta2RpcihzcmMsIGRlc3QsIHApCgogICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGly
KGZpbGUpIGFuZCBub3Qgb3MucGF0aC5pc2xpbmsoZmlsZSk6CiAgICAgICAgICAgICAgICBta2Rp
cl9yZWN1cnNlKGR2YXIsIHJvb3QsIGZpbGUpCiAgICAgICAgICAgICAgICBjb250aW51ZQoKICAg
ICAgICAgICAgbWtkaXJfcmVjdXJzZShkdmFyLCByb290LCBvcy5wYXRoLmRpcm5hbWUoZmlsZSkp
CiAgICAgICAgICAgIGZwYXRoID0gb3MucGF0aC5qb2luKHJvb3QsZmlsZSkKICAgICAgICAgICAg
aWYgbm90IG9zLnBhdGguaXNsaW5rKGZpbGUpOgogICAgICAgICAgICAgICAgb3MubGluayhmaWxl
LCBmcGF0aCkKICAgICAgICAgICAgICAgIGZzdGF0ID0gb3Muc3RhdChmaWxlKQogICAgICAgICAg
ICAgICAgb3MuY2htb2QoZnBhdGgsIGZzdGF0LnN0X21vZGUpCiAgICAgICAgICAgICAgICBvcy5j
aG93bihmcGF0aCwgZnN0YXQuc3RfdWlkLCBmc3RhdC5zdF9naWQpCiAgICAgICAgICAgICAgICBj
b250aW51ZQogICAgICAgICAgICByZXQgPSBiYi5jb3B5ZmlsZShmaWxlLCBmcGF0aCkKICAgICAg
ICAgICAgaWYgcmV0IGlzIEZhbHNlIG9yIHJldCA9PSAwOgogICAgICAgICAgICAgICAgcmFpc2Ug
YmIuYnVpbGQuRnVuY0ZhaWxlZCgiRmlsZSBwb3B1bGF0aW9uIGZhaWxlZCIpCgogICAgICAgIGRl
bCBsb2NhbGRhdGEKICAgIG9zLmNoZGlyKHdvcmtkaXIpCgogICAgdW5zaGlwcGVkID0gW10KICAg
IGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGR2YXIpOgogICAgICAgIGRpciA9IHJv
b3RbbGVuKGR2YXIpOl0KICAgICAgICBpZiBub3QgZGlyOgogICAgICAgICAgICBkaXIgPSBvcy5z
ZXAKICAgICAgICBmb3IgZiBpbiAoZmlsZXMgKyBkaXJzKToKICAgICAgICAgICAgcGF0aCA9IG9z
LnBhdGguam9pbihkaXIsIGYpCiAgICAgICAgICAgIGlmICgnLicgKyBwYXRoKSBub3QgaW4gc2Vl
bjoKICAgICAgICAgICAgICAgIHVuc2hpcHBlZC5hcHBlbmQocGF0aCkKCiAgICBpZiB1bnNoaXBw
ZWQgIT0gW106CiAgICAgICAgbXNnID0gcG4gKyAiOiBGaWxlcy9kaXJlY3RvcmllcyB3ZXJlIGlu
c3RhbGxlZCBidXQgbm90IHNoaXBwZWQiCiAgICAgICAgaWYgImluc3RhbGxlZF92c19zaGlwcGVk
IiBpbiAoZC5nZXRWYXIoJ0lOU0FORV9TS0lQXycgKyBwbiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6
CiAgICAgICAgICAgIGJiLm5vdGUoIlBhY2thZ2UgJXMgc2tpcHBpbmcgUUEgdGVzdHM6IGluc3Rh
bGxlZF92c19zaGlwcGVkIiAlIHBuKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGZvciBmIGlu
IHVuc2hpcHBlZDoKICAgICAgICAgICAgICAgIG1zZyA9IG1zZyArICJcbiAgIiArIGYKICAgICAg
ICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImluc3RhbGxlZF92c19zaGlwcGVkIiwgbXNn
LCBkKQoKICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygicGFja2FnZV9uYW1lX2hvb2siLCBkKQoKICAg
IGZvciBwa2cgaW4gcGFja2FnZV9saXN0OgogICAgICAgIHBrZ25hbWUgPSBkLmdldFZhcignUEtH
XyVzJyAlIHBrZywgVHJ1ZSkKICAgICAgICBpZiBwa2duYW1lIGlzIE5vbmU6CiAgICAgICAgICAg
IGQuc2V0VmFyKCdQS0dfJXMnICUgcGtnLCBwa2cpCgogICAgZGFuZ2xpbmdfbGlua3MgPSB7fQog
ICAgcGtnX2ZpbGVzID0ge30KICAgIGZvciBwa2cgaW4gcGFja2FnZV9saXN0OgogICAgICAgIGRh
bmdsaW5nX2xpbmtzW3BrZ10gPSBbXQogICAgICAgIHBrZ19maWxlc1twa2ddID0gW10KICAgICAg
ICBpbnN0X3Jvb3QgPSBvcy5wYXRoLmpvaW4ocGtnZGVzdCwgcGtnKQogICAgICAgIGZvciByb290
LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGluc3Rfcm9vdCk6CiAgICAgICAgICAgIGZvciBmIGlu
IGZpbGVzOgogICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBmKQogICAg
ICAgICAgICAgICAgcnBhdGggPSBwYXRoW2xlbihpbnN0X3Jvb3QpOl0KICAgICAgICAgICAgICAg
IHBrZ19maWxlc1twa2ddLmFwcGVuZChycGF0aCkKICAgICAgICAgICAgICAgIHRyeToKICAgICAg
ICAgICAgICAgICAgICBzID0gb3Muc3RhdChwYXRoKQogICAgICAgICAgICAgICAgZXhjZXB0IE9T
RXJyb3IsIChlcnIsIHN0cmVycm9yKToKICAgICAgICAgICAgICAgICAgICBpZiBlcnIgIT0gZXJy
bm8uRU5PRU5UOgogICAgICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgICAg
ICAgIHRhcmdldCA9IG9zLnJlYWRsaW5rKHBhdGgpCiAgICAgICAgICAgICAgICAgICAgaWYgdGFy
Z2V0WzBdICE9ICcvJzoKICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gb3MucGF0aC5q
b2luKHJvb3RbbGVuKGluc3Rfcm9vdCk6XSwgdGFyZ2V0KQogICAgICAgICAgICAgICAgICAgIGRh
bmdsaW5nX2xpbmtzW3BrZ10uYXBwZW5kKG9zLnBhdGgubm9ybXBhdGgodGFyZ2V0KSkKCiAgICBm
b3IgcGtnIGluIHBhY2thZ2VfbGlzdDoKICAgICAgICByZGVwZW5kcyA9IGJiLnV0aWxzLmV4cGxv
ZGVfZGVwX3ZlcnNpb25zMihkLmdldFZhcignUkRFUEVORFNfJyArIHBrZywgVHJ1ZSkgb3IgZC5n
ZXRWYXIoJ1JERVBFTkRTJywgVHJ1ZSkgb3IgIiIpCgogICAgICAgIGZvciBsIGluIGRhbmdsaW5n
X2xpbmtzW3BrZ106CiAgICAgICAgICAgIGZvdW5kID0gRmFsc2UKICAgICAgICAgICAgYmIuZGVi
dWcoMSwgIiVzIGNvbnRhaW5zIGRhbmdsaW5nIGxpbmsgJXMiICUgKHBrZywgbCkpCiAgICAgICAg
ICAgIGZvciBwIGluIHBhY2thZ2VfbGlzdDoKICAgICAgICAgICAgICAgIGZvciBmIGluIHBrZ19m
aWxlc1twXToKICAgICAgICAgICAgICAgICAgICBpZiBmID09IGw6CiAgICAgICAgICAgICAgICAg
ICAgICAgIGZvdW5kID0gVHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICBiYi5kZWJ1ZygxLCAi
dGFyZ2V0IGZvdW5kIGluICVzIiAlIHApCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHAgPT0g
cGtnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgcCBub3QgaW4gcmRlcGVuZHM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZGVwZW5kc1twXSA9IFtdCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAg
IGlmIGZvdW5kID09IEZhbHNlOgogICAgICAgICAgICAgICAgYmIubm90ZSgiJXMgY29udGFpbnMg
ZGFuZ2xpbmcgc3ltbGluayB0byAlcyIgJSAocGtnLCBsKSkKICAgICAgICBkLnNldFZhcignUkRF
UEVORFNfJyArIHBrZywgYmIudXRpbHMuam9pbl9kZXBzKHJkZXBlbmRzLCBjb21tYXNlcD1GYWxz
ZSkpCn0KCgpweXRob24gcGFja2FnZV9xYV9jaGVja19idWlsZHBhdGhzICgpIHsKZGVmIHBhY2th
Z2VfcWFfY2hlY2tfYnVpbGRwYXRocyhwYXRoLCBuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKICAg
ICIiIgogICAgQ2hlY2sgZm9yIGJ1aWxkIHBhdGhzIGluc2lkZSB0YXJnZXQgZmlsZXMgYW5kIGVy
cm9yIGlmIG5vdCBmb3VuZCBpbiB0aGUgd2hpdGVsaXN0CiAgICAiIiIKICAgICMgSWdub3JlIC5k
ZWJ1ZyBmaWxlcywgbm90IGludGVyZXN0aW5nCiAgICBpZiBwYXRoLmZpbmQoIi5kZWJ1ZyIpICE9
IC0xOgogICAgICAgIHJldHVybgoKICAgICMgSWdub3JlIHN5bWxpbmtzCiAgICBpZiBvcy5wYXRo
LmlzbGluayhwYXRoKToKICAgICAgICByZXR1cm4KCiAgICB0bXBkaXIgPSBkLmdldFZhcignVE1Q
RElSJywgVHJ1ZSkKICAgIGZpbGVfY29udGVudCA9IG9wZW4ocGF0aCkucmVhZCgpCiAgICBpZiB0
bXBkaXIgaW4gZmlsZV9jb250ZW50OgogICAgICAgIG1lc3NhZ2VzLmFwcGVuZCgiRmlsZSAlcyBp
biBwYWNrYWdlIGNvbnRhaW5lZCByZWZlcmVuY2UgdG8gdG1wZGlyIiAlIHBhY2thZ2VfcWFfY2xl
YW5fcGF0aChwYXRoLGQpKQp9CgoKcHl0aG9uIHBhY2thZ2VfcWFfY2hlY2tfc3RhZ2VkICgpIHsK
ZGVmIHBhY2thZ2VfcWFfY2hlY2tfc3RhZ2VkKHBhdGgsZCk6CiAgICAiIiIKICAgIENoZWNrIHN0
YWdlZCBsYSBhbmQgcGMgZmlsZXMgZm9yIHNhbml0eQogICAgICAtZS5nLiBpbnN0YWxsZWQgYmVp
bmcgZmFsc2UKCiAgICAgICAgQXMgdGhpcyBpcyBydW4gYWZ0ZXIgZXZlcnkgc3RhZ2Ugd2Ugc2hv
dWxkIGJlIGFibGUKICAgICAgICB0byBmaW5kIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIHRoZSBl
cnJvcnMgZWFzaWx5IGV2ZW4KICAgICAgICBpZiB3ZSBsb29rIGF0IGV2ZXJ5IC5wYyBhbmQgLmxh
IGZpbGUKICAgICIiIgoKICAgIHNhbmUgPSBUcnVlCiAgICB0bXBkaXIgPSBkLmdldFZhcignVE1Q
RElSJywgVHJ1ZSkKICAgIHdvcmtkaXIgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAid29yayIpCgog
ICAgaW5zdGFsbGVkID0gImluc3RhbGxlZD15ZXMiCiAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2Ns
YXNzKCJuYXRpdmUiLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJjcm9zcyIsIGQpOgog
ICAgICAgIHBrZ2NvbmZpZ2NoZWNrID0gd29ya2RpcgogICAgZWxzZToKICAgICAgICBwa2djb25m
aWdjaGVjayA9IHRtcGRpcgoKICAgICMgZmluZCBhbGwgLmxhIGFuZCAucGMgZmlsZXMKICAgICMg
cmVhZCB0aGUgY29udGVudAogICAgIyBhbmQgY2hlY2sgZm9yIHN0dWZmIHRoYXQgbG9va3Mgd3Jv
bmcKICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBhdGgpOgogICAgICAgIGZv
ciBmaWxlIGluIGZpbGVzOgogICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHJvb3QsZmls
ZSkKICAgICAgICAgICAgaWYgZmlsZS5lbmRzd2l0aCgiLmxhIik6CiAgICAgICAgICAgICAgICBm
aWxlX2NvbnRlbnQgPSBvcGVuKHBhdGgpLnJlYWQoKQogICAgICAgICAgICAgICAgaWYgd29ya2Rp
ciBpbiBmaWxlX2NvbnRlbnQ6CiAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIiVzIGZh
aWxlZCBzYW5pdHkgdGVzdCAod29ya2RpcikgaW4gcGF0aCAlcyIgJSAoZmlsZSxyb290KQogICAg
ICAgICAgICAgICAgICAgIHNhbmUgPSBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigibGEiLCBlcnJv
cl9tc2csIGQpCiAgICAgICAgICAgIGVsaWYgZmlsZS5lbmRzd2l0aCgiLnBjIik6CiAgICAgICAg
ICAgICAgICBmaWxlX2NvbnRlbnQgPSBvcGVuKHBhdGgpLnJlYWQoKQogICAgICAgICAgICAgICAg
aWYgcGtnY29uZmlnY2hlY2sgaW4gZmlsZV9jb250ZW50OgogICAgICAgICAgICAgICAgICAgIGVy
cm9yX21zZyA9ICIlcyBmYWlsZWQgc2FuaXR5IHRlc3QgKHRtcGRpcikgaW4gcGF0aCAlcyIgJSAo
ZmlsZSxyb290KQogICAgICAgICAgICAgICAgICAgIHNhbmUgPSBwYWNrYWdlX3FhX2hhbmRsZV9l
cnJvcigicGtnY29uZmlnIiwgZXJyb3JfbXNnLCBkKQoKICAgIHJldHVybiBzYW5lCn0KCgpweXRo
b24gYmFzZV9kb191bnBhY2sgKCkgewogICAgc3JjX3VyaSA9IChkLmdldFZhcignU1JDX1VSSScs
IFRydWUpIG9yICIiKS5zcGxpdCgpCiAgICBpZiBsZW4oc3JjX3VyaSkgPT0gMDoKICAgICAgICBy
ZXR1cm4KCiAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKICAgIGJiLmRhdGEu
dXBkYXRlX2RhdGEobG9jYWxkYXRhKQoKICAgIHJvb3RkaXIgPSBsb2NhbGRhdGEuZ2V0VmFyKCdX
T1JLRElSJywgVHJ1ZSkKCiAgICB0cnk6CiAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRj
aChzcmNfdXJpLCBsb2NhbGRhdGEpCiAgICAgICAgZmV0Y2hlci51bnBhY2socm9vdGRpcikKICAg
IGV4Y2VwdCBiYi5mZXRjaDIuQkJGZXRjaEV4Y2VwdGlvbiwgZToKICAgICAgICByYWlzZSBiYi5i
dWlsZC5GdW5jRmFpbGVkKGUpCn0KCgpweXRob24gZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2Vu
ZSAoKSB7CiAgICBzc3RhdGVfc2V0c2NlbmUoZCkKfQoKCnB5dGhvbiBnZXRfbGF5ZXJzX2JyYW5j
aF9yZXYgKCkgewpkZWYgZ2V0X2xheWVyc19icmFuY2hfcmV2KGQpOgogICAgbGF5ZXJzID0gKGQu
Z2V0VmFyKCJCQkxBWUVSUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCiAgICBsYXllcnNfYnJhbmNo
X3JldiA9IFsiJS0xN3MgPSBcIiVzOiVzXCIiICUgKG9zLnBhdGguYmFzZW5hbWUoaSksIFwKICAg
ICAgICBiYXNlX2dldF9tZXRhZGF0YV9naXRfYnJhbmNoKGksIE5vbmUpLnN0cmlwKCksIFwKICAg
ICAgICBiYXNlX2dldF9tZXRhZGF0YV9naXRfcmV2aXNpb24oaSwgTm9uZSkpIFwKICAgICAgICAg
ICAgZm9yIGkgaW4gbGF5ZXJzXQogICAgaSA9IGxlbihsYXllcnNfYnJhbmNoX3JldiktMQogICAg
cDEgPSBsYXllcnNfYnJhbmNoX3JldltpXS5maW5kKCI9IikKICAgIHMxID0gbGF5ZXJzX2JyYW5j
aF9yZXZbaV1bcDE6XQogICAgd2hpbGUgaSA+IDA6CiAgICAgICAgcDIgPSBsYXllcnNfYnJhbmNo
X3JldltpLTFdLmZpbmQoIj0iKQogICAgICAgIHMyPSBsYXllcnNfYnJhbmNoX3JldltpLTFdW3Ay
Ol0KICAgICAgICBpZiBzMSA9PSBzMjoKICAgICAgICAgICAgbGF5ZXJzX2JyYW5jaF9yZXZbaS0x
XSA9IGxheWVyc19icmFuY2hfcmV2W2ktMV1bMDpwMl0KICAgICAgICAgICAgaSAtPSAxCiAgICAg
ICAgZWxzZToKICAgICAgICAgICAgaSAtPSAxCiAgICAgICAgICAgIHAxID0gbGF5ZXJzX2JyYW5j
aF9yZXZbaV0uZmluZCgiPSIpCiAgICAgICAgICAgIHMxPSBsYXllcnNfYnJhbmNoX3JldltpXVtw
MTpdCiAgICByZXR1cm4gbGF5ZXJzX2JyYW5jaF9yZXYKCn0KCgpweXRob24gYmFzZV9nZXRfc2Nt
YmFzZXBhdGggKCkgewpkZWYgYmFzZV9nZXRfc2NtYmFzZXBhdGgoZCk6CiAgICByZXR1cm4gZC5n
ZXRWYXIoICdDT1JFQkFTRScsIFRydWUpCn0KCgpweXRob24gc3N0YXRlX2NsZWFuYWxsICgpIHsK
ICAgIGltcG9ydCBmbm1hdGNoCgogICAgYmIubm90ZSgiUmVtb3Zpbmcgc2hhcmVkIHN0YXRlIGZv
ciBwYWNrYWdlICVzIiAlIGQuZ2V0VmFyKCdQTicsIFRydWUpKQoKICAgIG1hbmlmZXN0X2RpciA9
IGQuZ2V0VmFyKCdTU1RBVEVfTUFOSUZFU1RTJywgVHJ1ZSkKICAgIG1hbmlmZXN0X3ByZWZpeCA9
IGQuZ2V0VmFyKCJTU1RBVEVfTUFORklMRVBSRUZJWCIsIFRydWUpCiAgICBtYW5pZmVzdF9wYXR0
ZXJuID0gb3MucGF0aC5iYXNlbmFtZShtYW5pZmVzdF9wcmVmaXgpICsgIi4qIgoKICAgIGlmIG5v
dCBvcy5wYXRoLmV4aXN0cyhtYW5pZmVzdF9kaXIpOgogICAgICAgIHJldHVybgoKICAgIGZvciBt
YW5pZmVzdCBpbiAob3MubGlzdGRpcihtYW5pZmVzdF9kaXIpKToKICAgICAgICBpZiBmbm1hdGNo
LmZubWF0Y2gobWFuaWZlc3QsIG1hbmlmZXN0X3BhdHRlcm4pOgogICAgICAgICAgICBuYW1lID0g
bWFuaWZlc3QucmVwbGFjZShtYW5pZmVzdF9wYXR0ZXJuWzotMV0sICIiKQogICAgICAgICAgICBu
YW1lbWFwID0gZC5nZXRWYXIoJ1NTVEFURVRBU0tOQU1FUycsIFRydWUpLnNwbGl0KCkKICAgICAg
ICAgICAgdGFza3MgPSBkLmdldFZhcignU1NUQVRFVEFTS1MnLCBUcnVlKS5zcGxpdCgpCiAgICAg
ICAgICAgIGlmIG5hbWUgbm90IGluIG5hbWVtYXA6CiAgICAgICAgICAgICAgICBjb250aW51ZQog
ICAgICAgICAgICB0YXNrbmFtZSA9IHRhc2tzW25hbWVtYXAuaW5kZXgobmFtZSldCiAgICAgICAg
ICAgIHNoYXJlZF9zdGF0ZSA9IHNzdGF0ZV9zdGF0ZV9mcm9tdmFycyhkLCB0YXNrbmFtZVszOl0p
CiAgICAgICAgICAgIHNzdGF0ZV9jbGVhbihzaGFyZWRfc3RhdGUsIGQpCn0KCgpweXRob24gYmFz
ZV9wYXRoX291dCAoKSB7CmRlZiBiYXNlX3BhdGhfb3V0KHBhdGgsIGQpOgogICAgcmV0dXJuIG9l
LnBhdGguZm9ybWF0X2Rpc3BsYXkocGF0aCwgZCkKfQoKCnB5dGhvbiBtdWx0aWxpYl9wa2dfZXh0
ZW5kICgpIHsKZGVmIG11bHRpbGliX3BrZ19leHRlbmQoZCwgcGtnKToKICAgIHZhcmlhbnRzID0g
KGQuZ2V0VmFyKCJNVUxUSUxJQl9WQVJJQU5UUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCiAgICBp
ZiBub3QgdmFyaWFudHM6CiAgICAgICAgcmV0dXJuIHBrZwogICAgcGtncyA9IHBrZwogICAgZm9y
IHYgaW4gdmFyaWFudHM6CiAgICAgICAgcGtncyA9IHBrZ3MgKyAiICIgKyB2ICsgIi0iICsgcGtn
CiAgICByZXR1cm4gcGtncwp9CgoKcHl0aG9uIGNoZWNrX3Nhbml0eV92ZXJzaW9uX2NoYW5nZSAo
KSB7CmRlZiBjaGVja19zYW5pdHlfdmVyc2lvbl9jaGFuZ2UoZGF0YSk6CiAgICAjIFNhbml0eSBj
aGVja3MgdG8gYmUgZG9uZSB3aGVuIFNBTklUWV9WRVJTSU9OIGNoYW5nZXMKICAgIHJldHVybiAi
Igp9CgoKcHl0aG9uIHBhY2thZ2VfZG9fcGtnY29uZmlnICgpIHsKICAgIGltcG9ydCByZQoKICAg
IHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKICAgIHdvcmtkaXIgPSBkLmdl
dFZhcignV09SS0RJUicsIFRydWUpCiAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBU
cnVlKQoKICAgIHNobGlic19kaXIgPSBkLmdldFZhcignU0hMSUJTRElSJywgVHJ1ZSkKICAgIHNo
bGlic3dvcmtfZGlyID0gZC5nZXRWYXIoJ1NITElCU1dPUktESVInLCBUcnVlKQoKICAgIHBjX3Jl
ID0gcmUuY29tcGlsZSgnKC4qKVwucGMkJykKICAgIHZhcl9yZSA9IHJlLmNvbXBpbGUoJyguKik9
KC4qKScpCiAgICBmaWVsZF9yZSA9IHJlLmNvbXBpbGUoJyguKik6ICguKiknKQoKICAgIHBrZ2Nv
bmZpZ19wcm92aWRlZCA9IHt9CiAgICBwa2djb25maWdfbmVlZGVkID0ge30KICAgIGZvciBwa2cg
aW4gcGFja2FnZXMuc3BsaXQoKToKICAgICAgICBwa2djb25maWdfcHJvdmlkZWRbcGtnXSA9IFtd
CiAgICAgICAgcGtnY29uZmlnX25lZWRlZFtwa2ddID0gW10KICAgICAgICB0b3AgPSBvcy5wYXRo
LmpvaW4ocGtnZGVzdCwgcGtnKQogICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53
YWxrKHRvcCk6CiAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgogICAgICAgICAgICAgICAg
bSA9IHBjX3JlLm1hdGNoKGZpbGUpCiAgICAgICAgICAgICAgICBpZiBtOgogICAgICAgICAgICAg
ICAgICAgIHBkID0gYmIuZGF0YS5pbml0KCkKICAgICAgICAgICAgICAgICAgICBuYW1lID0gbS5n
cm91cCgxKQogICAgICAgICAgICAgICAgICAgIHBrZ2NvbmZpZ19wcm92aWRlZFtwa2ddLmFwcGVu
ZChuYW1lKQogICAgICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocm9vdCwgZmls
ZSkKICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MuYWNjZXNzKHBhdGgsIG9zLlJfT0spOgog
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgICAgIGYgPSBv
cGVuKHBhdGgsICdyJykKICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkK
ICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgICAgICAgICBmb3IgbCBp
biBsaW5lczoKICAgICAgICAgICAgICAgICAgICAgICAgbSA9IHZhcl9yZS5tYXRjaChsKQogICAg
ICAgICAgICAgICAgICAgICAgICBpZiBtOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFt
ZSA9IG0uZ3JvdXAoMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IG0uZ3JvdXAo
MikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkLnNldFZhcihuYW1lLCBwZC5leHBhbmQo
dmFsKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAg
ICAgICAgICAgIG0gPSBmaWVsZF9yZS5tYXRjaChsKQogICAgICAgICAgICAgICAgICAgICAgICBp
ZiBtOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGRyID0gbS5ncm91cCgxKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXhwID0gYmIuZGF0YS5leHBhbmQobS5ncm91cCgyKSwgcGQp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBoZHIgPT0gJ1JlcXVpcmVzJzoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwa2djb25maWdfbmVlZGVkW3BrZ10gKz0gZXhwLnJl
cGxhY2UoJywnLCAnICcpLnNwbGl0KCkKCiAgICAjIFRha2Ugc2hhcmVkIGxvY2sgc2luY2Ugd2Un
cmUgb25seSByZWFkaW5nLCBub3Qgd3JpdGluZwogICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZShk
LmV4cGFuZCgiL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1w
L3N5c3Jvb3RzL3BhY2thZ2Utb3V0cHV0LmxvY2siKSkKCiAgICBmb3IgcGtnIGluIHBhY2thZ2Vz
LnNwbGl0KCk6CiAgICAgICAgcGtnc19maWxlID0gb3MucGF0aC5qb2luKHNobGlic3dvcmtfZGly
LCBwa2cgKyAiLnBjbGlzdCIpCiAgICAgICAgaWYgcGtnY29uZmlnX3Byb3ZpZGVkW3BrZ10gIT0g
W106CiAgICAgICAgICAgIGYgPSBvcGVuKHBrZ3NfZmlsZSwgJ3cnKQogICAgICAgICAgICBmb3Ig
cCBpbiBwa2djb25maWdfcHJvdmlkZWRbcGtnXToKICAgICAgICAgICAgICAgIGYud3JpdGUoJyVz
XG4nICUgcCkKICAgICAgICAgICAgZi5jbG9zZSgpCgogICAgZm9yIGRpciBpbiBbc2hsaWJzX2Rp
cl06CiAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRpcik6CiAgICAgICAgICAgIGNvbnRp
bnVlCiAgICAgICAgZm9yIGZpbGUgaW4gb3MubGlzdGRpcihkaXIpOgogICAgICAgICAgICBtID0g
cmUubWF0Y2goJ14oLiopXC5wY2xpc3QkJywgZmlsZSkKICAgICAgICAgICAgaWYgbToKICAgICAg
ICAgICAgICAgIHBrZyA9IG0uZ3JvdXAoMSkKICAgICAgICAgICAgICAgIGZkID0gb3Blbihvcy5w
YXRoLmpvaW4oZGlyLCBmaWxlKSkKICAgICAgICAgICAgICAgIGxpbmVzID0gZmQucmVhZGxpbmVz
KCkKICAgICAgICAgICAgICAgIGZkLmNsb3NlKCkKICAgICAgICAgICAgICAgIHBrZ2NvbmZpZ19w
cm92aWRlZFtwa2ddID0gW10KICAgICAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgogICAgICAg
ICAgICAgICAgICAgIHBrZ2NvbmZpZ19wcm92aWRlZFtwa2ddLmFwcGVuZChsLnJzdHJpcCgpKQoK
ICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKICAgICAgICBkZXBzID0gW10KICAgICAg
ICBmb3IgbiBpbiBwa2djb25maWdfbmVlZGVkW3BrZ106CiAgICAgICAgICAgIGZvdW5kID0gRmFs
c2UKICAgICAgICAgICAgZm9yIGsgaW4gcGtnY29uZmlnX3Byb3ZpZGVkLmtleXMoKToKICAgICAg
ICAgICAgICAgIGlmIG4gaW4gcGtnY29uZmlnX3Byb3ZpZGVkW2tdOgogICAgICAgICAgICAgICAg
ICAgIGlmIGsgIT0gcGtnIGFuZCBub3QgKGsgaW4gZGVwcyk6CiAgICAgICAgICAgICAgICAgICAg
ICAgIGRlcHMuYXBwZW5kKGspCiAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCiAgICAg
ICAgICAgIGlmIGZvdW5kID09IEZhbHNlOgogICAgICAgICAgICAgICAgYmIubm90ZSgiY291bGRu
J3QgZmluZCBwa2djb25maWcgbW9kdWxlICclcycgaW4gYW55IHBhY2thZ2UiICUgbikKICAgICAg
ICBkZXBzX2ZpbGUgPSBvcy5wYXRoLmpvaW4ocGtnZGVzdCwgcGtnICsgIi5wY2RlcHMiKQogICAg
ICAgIGlmIGxlbihkZXBzKToKICAgICAgICAgICAgZmQgPSBvcGVuKGRlcHNfZmlsZSwgJ3cnKQog
ICAgICAgICAgICBmb3IgZGVwIGluIGRlcHM6CiAgICAgICAgICAgICAgICBmZC53cml0ZShkZXAg
KyAnXG4nKQogICAgICAgICAgICBmZC5jbG9zZSgpCgogICAgYmIudXRpbHMudW5sb2NrZmlsZShs
ZikKfQoKCnB5dGhvbiBzZXRfZGlza2RhdGEgKCkgewpkZWYgc2V0X2Rpc2tkYXRhKHZhciwgZGV2
LCBkYXRhKToKICAgIGRhdGEuc2V0VmFyKHZhciwgZ2V0X2Rpc2tzdGF0cyhkZXYpKQp9CgoKcHl0
aG9uIGRvX3BhY2thZ2Vfd3JpdGVfcnBtICgpIHsKICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygicmVh
ZF9zdWJwYWNrYWdlX21ldGFkYXRhIiwgZCkKICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiZG9fcGFj
a2FnZV9ycG0iLCBkKQp9CgoKcHl0aG9uIGJhc2VfZXZlbnRoYW5kbGVyICgpIHsKICAgIGlmIGlz
aW5zdGFuY2UoZSwgYmIuZXZlbnQuQ29uZmlnUGFyc2VkKToKICAgICAgICBlLmRhdGEuc2V0VmFy
KCdCQl9WRVJTSU9OJywgYmIuX192ZXJzaW9uX18pCiAgICAgICAgZ2VuZXJhdGVfZ2l0X2NvbmZp
ZyhlKQogICAgICAgIHBrZ2FyY2hfbWFwcGluZyhlLmRhdGEpCiAgICAgICAgcHJlZmVycmVkX21s
X3VwZGF0ZXMoZS5kYXRhKQoKICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuQnVpbGRTdGFy
dGVkKToKICAgICAgICBzdGF0dXNsaW5lcyA9IFtdCiAgICAgICAgZm9yIGZ1bmMgaW4gb2UuZGF0
YS50eXBlZF92YWx1ZSgnQlVJTERDRkdfRlVOQ1MnLCBlLmRhdGEpOgogICAgICAgICAgICBnID0g
Z2xvYmFscygpCiAgICAgICAgICAgIGlmIGZ1bmMgbm90IGluIGc6CiAgICAgICAgICAgICAgICBi
Yi53YXJuKCJCdWlsZCBjb25maWd1cmF0aW9uIGZ1bmN0aW9uICclcycgZG9lcyBub3QgZXhpc3Qi
ICUgZnVuYykKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGZsaW5lcyA9IGdbZnVu
Y10oZS5kYXRhKQogICAgICAgICAgICAgICAgaWYgZmxpbmVzOgogICAgICAgICAgICAgICAgICAg
IHN0YXR1c2xpbmVzLmV4dGVuZChmbGluZXMpCgogICAgICAgIHN0YXR1c2hlYWRlciA9IGUuZGF0
YS5nZXRWYXIoJ0JVSUxEQ0ZHX0hFQURFUicsIFRydWUpCiAgICAgICAgYmIucGxhaW4oJ1xuJXNc
biVzXG4nICUgKHN0YXR1c2hlYWRlciwgJ1xuJy5qb2luKHN0YXR1c2xpbmVzKSkpCn0KCgpweXRo
b24gc3N0YXRlX2luaXQgKCkgewpkZWYgc3N0YXRlX2luaXQobmFtZSwgdGFzaywgZCk6CiAgICBz
cyA9IHt9CiAgICBzc1sndGFzayddID0gdGFzawogICAgc3NbJ25hbWUnXSA9IG5hbWUKICAgIHNz
WydkaXJzJ10gPSBbXQogICAgc3NbJ3BsYWluZGlycyddID0gW10KICAgIHNzWydsb2NrZmlsZXMn
XSA9IFtdCiAgICBzc1snbG9ja2ZpbGVzLXNoYXJlZCddID0gW10KICAgIHJldHVybiBzcwp9CgoK
cHl0aG9uIGdldF9ibiAoKSB7CmRlZiBnZXRfYm4oZSk6CiAgICBmaWxlID0gb3BlbihlLmRhdGEu
Z2V0VmFyKCdCTkZJTEUnLCBUcnVlKSkKICAgIGJuID0gZmlsZS5yZWFkbGluZSgpCiAgICBmaWxl
LmNsb3NlKCkKICAgIHJldHVybiBibgp9CgoKcHl0aG9uIGNoZWNrX2FwcF9leGlzdHMgKCkgewpk
ZWYgY2hlY2tfYXBwX2V4aXN0cyhhcHAsIGQpOgogICAgZnJvbSBiYiBpbXBvcnQgd2hpY2gsIGRh
dGEKCiAgICBhcHAgPSBkYXRhLmV4cGFuZChhcHAsIGQpCiAgICBwYXRoID0gZGF0YS5nZXRWYXIo
J1BBVEgnLCBkLCAxKQogICAgcmV0dXJuIGJvb2wod2hpY2gocGF0aCwgYXBwKSkKfQoKCnB5dGhv
biBiYXNlX3BhdGhfcmVsYXRpdmUgKCkgewpkZWYgYmFzZV9wYXRoX3JlbGF0aXZlKHNyYywgZGVz
dCk6CiAgICByZXR1cm4gb2UucGF0aC5yZWxhdGl2ZShzcmMsIGRlc3QpCn0KCgpweXRob24gYmFz
ZV9jb25kaXRpb25hbCAoKSB7CmRlZiBiYXNlX2NvbmRpdGlvbmFsKHZhcmlhYmxlLCBjaGVja3Zh
bHVlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpOgogICAgcmV0dXJuIG9lLnV0aWxzLmNvbmRp
dGlvbmFsKHZhcmlhYmxlLCBjaGVja3ZhbHVlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpCn0K
CgpweXRob24gcGFja2FnZV9xYV9jaGVja19zdGF0aWNkZXYgKCkgewpkZWYgcGFja2FnZV9xYV9j
aGVja19zdGF0aWNkZXYocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CiAgICAiIiIKICAg
IENoZWNrIGZvciAiLmEiIGxpYnJhcnkgaW4gbm9uLXN0YXRpY2RldiBwYWNrYWdlcwogICAgVGhl
cmUgYXJlIGEgbnVtYmVyIG9mIGV4Y2VwdGlvbnMgdG8gdGhpcyBydWxlLCAtcGljIHBhY2thZ2Vz
IGNhbiBjb250YWluCiAgICBzdGF0aWMgbGlicmFyaWVzLCB0aGUgX25vbnNoYXJlZC5hIGJlbG9u
ZyB3aXRoIHRoZWlyIC1kZXYgcGFja2FnZXMgYW5kCiAgICBsaWJnY2MuYSwgbGliZ2Nvdi5hIHdp
bGwgYmUgc2tpcHBlZCBpbiB0aGVpciBwYWNrYWdlcwogICAgIiIiCgogICAgaWYgbm90IG5hbWUu
ZW5kc3dpdGgoIi1waWMiKSBhbmQgbm90IG5hbWUuZW5kc3dpdGgoIi1zdGF0aWNkZXYiKSBhbmQg
cGF0aC5lbmRzd2l0aCgiLmEiKSBhbmQgbm90IHBhdGguZW5kc3dpdGgoIl9ub25zaGFyZWQuYSIp
OgogICAgICAgIG1lc3NhZ2VzLmFwcGVuZCgibm9uIC1zdGF0aWNkZXYgcGFja2FnZSBjb250YWlu
cyBzdGF0aWMgLmEgbGlicmFyeTogJXMgcGF0aCAnJXMnIiAlIFwKICAgICAgICAgICAgICAgICAo
bmFtZSwgcGFja2FnZV9xYV9jbGVhbl9wYXRoKHBhdGgsZCkpKQp9CgoKcHl0aG9uIHNzdGF0ZV9j
bGVhbl9tYW5pZmVzdCAoKSB7CmRlZiBzc3RhdGVfY2xlYW5fbWFuaWZlc3QobWFuaWZlc3QsIGQp
OgogICAgaW1wb3J0IG9lLnBhdGgKCiAgICBtZmlsZSA9IG9wZW4obWFuaWZlc3QpCiAgICBlbnRy
aWVzID0gbWZpbGUucmVhZGxpbmVzKCkKICAgIG1maWxlLmNsb3NlKCkKCiAgICBmb3IgZW50cnkg
aW4gZW50cmllczoKICAgICAgICBlbnRyeSA9IGVudHJ5LnN0cmlwKCkKICAgICAgICBiYi5kZWJ1
ZygyLCAiUmVtb3ZpbmcgbWFuaWZlc3Q6ICVzIiAlIGVudHJ5KQogICAgICAgICMgV2UgY2FuIHJh
Y2UgYWdhaW5zdCBhbm90aGVyIHBhY2thZ2UgcG9wdWxhdGluZyBkaXJlY3RvcmllcyBhcyB3ZSdy
ZSByZW1vdmluZyB0aGVtCiAgICAgICAgIyBzbyB3ZSBpZ25vcmUgZXJyb3JzIGhlcmUuCiAgICAg
ICAgdHJ5OgogICAgICAgICAgICBpZiBlbnRyeS5lbmRzd2l0aCgiLyIpOgogICAgICAgICAgICAg
ICAgaWYgb3MucGF0aC5pc2xpbmsoZW50cnlbOi0xXSk6CiAgICAgICAgICAgICAgICAgICAgb3Mu
cmVtb3ZlKGVudHJ5WzotMV0pCiAgICAgICAgICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKGVu
dHJ5KSBhbmQgbGVuKG9zLmxpc3RkaXIoZW50cnkpKSA9PSAwOgogICAgICAgICAgICAgICAgICAg
IG9zLnJtZGlyKGVudHJ5WzotMV0pCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBv
ZS5wYXRoLnJlbW92ZShlbnRyeSkKICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAg
cGFzcwoKICAgIG9lLnBhdGgucmVtb3ZlKG1hbmlmZXN0KQp9CgoKcHl0aG9uIHNzdGF0ZV9jbGVh
biAoKSB7CmRlZiBzc3RhdGVfY2xlYW4oc3MsIGQpOgogICAgaW1wb3J0IG9lLnBhdGgKCiAgICBt
YW5pZmVzdCA9IGQuZXhwYW5kKCIvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVp
bGQtZnJpMi90bXAvc3N0YXRlLWNvbnRyb2wvbWFuaWZlc3QtY29yZTItYmJsYXllcnMuJXMiICUg
c3NbJ25hbWUnXSkKCiAgICBpZiBvcy5wYXRoLmV4aXN0cyhtYW5pZmVzdCk6CiAgICAgICAgbG9j
a3MgPSBbXQogICAgICAgIGZvciBsb2NrIGluIHNzWydsb2NrZmlsZXMtc2hhcmVkJ106CiAgICAg
ICAgICAgIGxvY2tzLmFwcGVuZChiYi51dGlscy5sb2NrZmlsZShsb2NrKSkKICAgICAgICBmb3Ig
bG9jayBpbiBzc1snbG9ja2ZpbGVzJ106CiAgICAgICAgICAgIGxvY2tzLmFwcGVuZChiYi51dGls
cy5sb2NrZmlsZShsb2NrKSkKCiAgICAgICAgc3N0YXRlX2NsZWFuX21hbmlmZXN0KG1hbmlmZXN0
LCBkKQoKICAgICAgICBmb3IgbG9jayBpbiBsb2NrczoKICAgICAgICAgICAgYmIudXRpbHMudW5s
b2NrZmlsZShsb2NrKQoKICAgIHN0ZmlsZSA9IGQuZ2V0VmFyKCJTVEFNUCIsIFRydWUpICsgIi5k
b18iICsgc3NbJ3Rhc2snXQogICAgZXh0cmFpbmYgPSBkLmdldFZhckZsYWcoImRvXyIgKyBzc1sn
dGFzayddLCAnc3RhbXAtZXh0cmEtaW5mbycsIFRydWUpCiAgICBvZS5wYXRoLnJlbW92ZShzdGZp
bGUpCiAgICBvZS5wYXRoLnJlbW92ZShzdGZpbGUgKyAiX3NldHNjZW5lIikKICAgIGlmIGV4dHJh
aW5mOgogICAgICAgIG9lLnBhdGgucmVtb3ZlKHN0ZmlsZSArICIuKiIgKyBleHRyYWluZikKICAg
ICAgICBvZS5wYXRoLnJlbW92ZShzdGZpbGUgKyAiX3NldHNjZW5lIiArICIuKiIgKyBleHRyYWlu
ZikKICAgIGVsc2U6CiAgICAgICAgb2UucGF0aC5yZW1vdmUoc3RmaWxlICsgIi4qIikKICAgICAg
ICBvZS5wYXRoLnJlbW92ZShzdGZpbGUgKyAiX3NldHNjZW5lIiArICIuKiIpCn0KCgpweXRob24g
cHJlZmVycmVkX21sX3VwZGF0ZXMgKCkgewpkZWYgcHJlZmVycmVkX21sX3VwZGF0ZXMoZCk6CiAg
ICAjIElmIGFueSBQUkVGRVJSRURfUFJPVklERVIgb3IgUFJFRkVSUkVEX1ZFUlNJT05TIGFyZSBz
ZXQsCiAgICAjIHdlIG5lZWQgdG8gbWlycm9yIHRoZXNlIHZhcmlhYmxlcyBpbiB0aGUgbXVsdGls
aWIgY2FzZTsKICAgICMgbGlrZXdpc2UgdGhlIFBOQkxBQ0tMSVNUIGZsYWdzLgogICAgbXVsdGls
aWJzID0gZC5nZXRWYXIoJ01VTFRJTElCUycsIFRydWUpIG9yICIiCiAgICBpZiBub3QgbXVsdGls
aWJzOgogICAgICAgIHJldHVybgoKICAgIHByZWZpeGVzID0gW10KICAgIGZvciBleHQgaW4gbXVs
dGlsaWJzLnNwbGl0KCk6CiAgICAgICAgZWV4dCA9IGV4dC5zcGxpdCgnOicpCiAgICAgICAgaWYg
bGVuKGVleHQpID4gMSBhbmQgZWV4dFswXSA9PSAnbXVsdGlsaWInOgogICAgICAgICAgICBwcmVm
aXhlcy5hcHBlbmQoZWV4dFsxXSkKCiAgICB2ZXJzaW9ucyA9IFtdCiAgICBwcm92aWRlcnMgPSBb
XQogICAgYmxhY2tsaXN0cyA9IGQuZ2V0VmFyRmxhZ3MoJ1BOQkxBQ0tMSVNUJykgb3Ige30KICAg
IGZvciB2IGluIGQua2V5cygpOgogICAgICAgIGlmIHYuc3RhcnRzd2l0aCgiUFJFRkVSUkVEX1ZF
UlNJT05fIik6CiAgICAgICAgICAgIHZlcnNpb25zLmFwcGVuZCh2KQogICAgICAgIGlmIHYuc3Rh
cnRzd2l0aCgiUFJFRkVSUkVEX1BST1ZJREVSXyIpOgogICAgICAgICAgICBwcm92aWRlcnMuYXBw
ZW5kKHYpCgogICAgZm9yIHBrZywgcmVhc29uIGluIGJsYWNrbGlzdHMuaXRlbXMoKToKICAgICAg
ICBmb3IgcCBpbiBwcmVmaXhlczoKICAgICAgICAgICAgbmV3cGtnID0gcCArICItIiArIHBrZwog
ICAgICAgICAgICBpZiBub3QgZC5nZXRWYXJGbGFnKCdQTkJMQUNLTElTVCcsIG5ld3BrZywgVHJ1
ZSk6CiAgICAgICAgICAgICAgICBkLnNldFZhckZsYWcoJ1BOQkxBQ0tMSVNUJywgbmV3cGtnLCBy
ZWFzb24pCgogICAgZm9yIHYgaW4gdmVyc2lvbnM6CiAgICAgICAgdmFsID0gZC5nZXRWYXIodiwg
RmFsc2UpCiAgICAgICAgcGtnID0gdi5yZXBsYWNlKCJQUkVGRVJSRURfVkVSU0lPTl8iLCAiIikK
ICAgICAgICBpZiBwa2cuZW5kc3dpdGgoIi1uYXRpdmUiKSBvciBwa2cuc3RhcnRzd2l0aCgibmF0
aXZlc2RrLSIpOgogICAgICAgICAgICBjb250aW51ZQogICAgICAgIGZvciBwIGluIHByZWZpeGVz
OgogICAgICAgICAgICBuZXduYW1lID0gIlBSRUZFUlJFRF9WRVJTSU9OXyIgKyBwICsgIi0iICsg
cGtnCiAgICAgICAgICAgIGlmIG5vdCBkLmdldFZhcihuZXduYW1lLCBGYWxzZSk6CiAgICAgICAg
ICAgICAgICBkLnNldFZhcihuZXduYW1lLCB2YWwpCgogICAgZm9yIHByb3YgaW4gcHJvdmlkZXJz
OgogICAgICAgIHZhbCA9IGQuZ2V0VmFyKHByb3YsIEZhbHNlKQogICAgICAgIHBrZyA9IHByb3Yu
cmVwbGFjZSgiUFJFRkVSUkVEX1BST1ZJREVSXyIsICIiKQogICAgICAgIGlmIHBrZy5lbmRzd2l0
aCgiLW5hdGl2ZSIpIG9yIHBrZy5zdGFydHN3aXRoKCJuYXRpdmVzZGstIik6CiAgICAgICAgICAg
IGNvbnRpbnVlCiAgICAgICAgdmlydCA9ICIiCiAgICAgICAgaWYgcGtnLnN0YXJ0c3dpdGgoInZp
cnR1YWwvIik6CiAgICAgICAgICAgIHBrZyA9IHBrZy5yZXBsYWNlKCJ2aXJ0dWFsLyIsICIiKQog
ICAgICAgICAgICB2aXJ0ID0gInZpcnR1YWwvIgogICAgICAgIGZvciBwIGluIHByZWZpeGVzOgog
ICAgICAgICAgICBuZXduYW1lID0gIlBSRUZFUlJFRF9QUk9WSURFUl8iICsgdmlydCArIHAgKyAi
LSIgKyBwa2cKICAgICAgICAgICAgaWYgcGtnICE9ICJrZXJuZWwiOgogICAgICAgICAgICAgICAg
dmFsID0gcCArICItIiArIHZhbAogICAgICAgICAgICBpZiBub3QgZC5nZXRWYXIobmV3bmFtZSwg
RmFsc2UpOgogICAgICAgICAgICAgICAgZC5zZXRWYXIobmV3bmFtZSwgdmFsKQoKCiAgICBtcCA9
IChkLmdldFZhcigiTVVMVElfUFJPVklERVJfV0hJVEVMSVNUIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0
KCkKICAgIGV4dHJhbXAgPSBbXQogICAgZm9yIHAgaW4gbXA6CiAgICAgICAgaWYgcC5lbmRzd2l0
aCgiLW5hdGl2ZSIpIG9yIHAuc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpOgogICAgICAgICAgICBj
b250aW51ZQogICAgICAgIHZpcnQgPSAiIgogICAgICAgIGlmIHAuc3RhcnRzd2l0aCgidmlydHVh
bC8iKToKICAgICAgICAgICAgcCA9IHAucmVwbGFjZSgidmlydHVhbC8iLCAiIikKICAgICAgICAg
ICAgdmlydCA9ICJ2aXJ0dWFsLyIKICAgICAgICBmb3IgcHJlZiBpbiBwcmVmaXhlczoKICAgICAg
ICAgICAgZXh0cmFtcC5hcHBlbmQodmlydCArIHByZWYgKyAiLSIgKyBwKQogICAgZC5zZXRWYXIo
Ik1VTFRJX1BST1ZJREVSX1dISVRFTElTVCIsICIgIi5qb2luKG1wICsgZXh0cmFtcCkpCgp9CgoK
cHl0aG9uIGJhc2VfcGF0aF9qb2luICgpIHsKZGVmIGJhc2VfcGF0aF9qb2luKGEsICpwKToKICAg
IHJldHVybiBvZS5wYXRoLmpvaW4oYSwgKnApCn0KCgpweXRob24gcGFja2FnZV9xYV9jaGVja191
c2VsZXNzX3JwYXRocyAoKSB7CmRlZiBwYWNrYWdlX3FhX2NoZWNrX3VzZWxlc3NfcnBhdGhzKGZp
bGUsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgogICAgIiIiCiAgICBDaGVjayBmb3IgUlBBVEhz
IHRoYXQgYXJlIHVzZWxlc3MgYnV0IG5vdCBkYW5nZXJvdXMKICAgICIiIgogICAgZGVmIHJwYXRo
X2VxKGEsIGIpOgogICAgICAgIHJldHVybiBvcy5wYXRoLm5vcm1wYXRoKGEpID09IG9zLnBhdGgu
bm9ybXBhdGgoYikKCiAgICBpZiBub3QgZWxmOgogICAgICAgIHJldHVybgoKICAgIG9iamR1bXAg
PSBkLmdldFZhcignT0JKRFVNUCcsIFRydWUpCiAgICBlbnZfcGF0aCA9IGQuZ2V0VmFyKCdQQVRI
JywgVHJ1ZSkKCiAgICBsaWJkaXIgPSBkLmdldFZhcigibGliZGlyIiwgVHJ1ZSkKICAgIGJhc2Vf
bGliZGlyID0gZC5nZXRWYXIoImJhc2VfbGliZGlyIiwgVHJ1ZSkKCiAgICBpbXBvcnQgcmUKICAg
IHJwYXRoX3JlID0gcmUuY29tcGlsZSgiXHMrUlBBVEhccysoLiopIikKICAgIGZvciBsaW5lIGlu
IG9zLnBvcGVuKCJMQ19BTEw9QyBQQVRIPSVzICVzIC1wICclcycgMj4gL2Rldi9udWxsIiAlIChl
bnZfcGF0aCwgb2JqZHVtcCwgZmlsZSksICJyIik6CiAgICAJbSA9IHJwYXRoX3JlLm1hdGNoKGxp
bmUpCglpZiBtOgoJICAgcnBhdGggPSBtLmdyb3VwKDEpCgkgICBpZiBycGF0aF9lcShycGF0aCwg
bGliZGlyKSBvciBycGF0aF9lcShycGF0aCwgYmFzZV9saWJkaXIpOgoJICAgICAgIyBUaGUgZHlu
YW1pYyBsaW5rZXIgc2VhcmNoZXMgYm90aCB0aGVzZSBwbGFjZXMgYW55d2F5LiAgVGhlcmUgaXMg
bm8gcG9pbnQgaW4KCSAgICAgICMgbG9va2luZyB0aGVyZSBhZ2Fpbi4KCSAgICAgIG1lc3NhZ2Vz
LmFwcGVuZCgiJXM6ICVzIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAlcyIgJSAo
bmFtZSwgcGFja2FnZV9xYV9jbGVhbl9wYXRoKGZpbGUsIGQpLCBycGF0aCkpCn0KCgpweXRob24g
Y2hlY2tfY29ubmVjdGl2aXR5ICgpIHsKZGVmIGNoZWNrX2Nvbm5lY3Rpdml0eShkKToKICAgICMg
VVJJJ3MgdG8gY2hlY2sgY2FuIGJlIHNldCBpbiB0aGUgQ09OTkVDVElWSVRZX0NIRUNLX1VSSVMg
dmFyaWFibGUKICAgICMgdXNpbmcgdGhlIHNhbWUgc3ludGF4IGFzIGZvciBTUkNfVVJJLiBJZiB0
aGUgdmFyaWFibGUgaXMgbm90IHNldAogICAgIyB0aGUgY2hlY2sgaXMgc2tpcHBlZAogICAgdGVz
dF91cmlzID0gKGQuZ2V0VmFyKCdDT05ORUNUSVZJVFlfQ0hFQ0tfVVJJUycsIFRydWUpIG9yICIi
KS5zcGxpdCgpCiAgICByZXR2YWwgPSAiIgoKICAgICMgT25seSBjaGVjayBjb25uZWN0aXZpdHkg
aWYgbmV0d29yayBlbmFibGVkIGFuZCB0aGUKICAgICMgQ09OTkVDVElWSVRZX0NIRUNLX1VSSVMg
YXJlIHNldAogICAgbmV0d29ya19lbmFibGVkID0gbm90IGQuZ2V0VmFyKCdCQl9OT19ORVRXT1JL
JywgVHJ1ZSkKICAgIGNoZWNrX2VuYWJsZWQgPSBsZW4odGVzdF91cmlzKQogICAgIyBUYWtlIGEg
Y29weSBvZiB0aGUgZGF0YSBzdG9yZSBhbmQgdW5zZXQgTUlSUk9SUyBhbmQgUFJFTUlSUk9TCiAg
ICBkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCiAgICBkYXRhLmRlbFZhcignUFJFTUlSUk9S
UycpCiAgICBkYXRhLmRlbFZhcignTUlSUk9SUycpCiAgICBpZiBjaGVja19lbmFibGVkIGFuZCBu
ZXR3b3JrX2VuYWJsZWQ6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBmZXRjaGVyID0gYmIuZmV0
Y2gyLkZldGNoKHRlc3RfdXJpcywgZGF0YSkKICAgICAgICAgICAgZmV0Y2hlci5jaGVja3N0YXR1
cygpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIyBBbGxvdyB0aGUgbWVz
c2FnZSB0byBiZSBjb25maWd1cmVkIHNvIHRoYXQgdXNlcnMgY2FuIGJlCiAgICAgICAgICAgICMg
cG9pbnRlZCB0byBhIHN1cHBvcnQgbWVjaGFuaXNtLgogICAgICAgICAgICBtc2cgPSBkYXRhLmdl
dFZhcignQ09OTkVDVElWSVRZX0NIRUNLX01TRycsIFRydWUpIG9yICIiCiAgICAgICAgICAgIGlm
IGxlbihtc2cpID09IDA6CiAgICAgICAgICAgICAgICBtc2cgPSAiRmFpbGVkIHRvIGZldGNoIHRl
c3QgZGF0YSBmcm9tIHRoZSBuZXR3b3JrLiBQbGVhc2UgZW5zdXJlIHlvdXIgbmV0d29yayBpcyBj
b25maWd1cmVkIGNvcnJlY3RseS5cbiIKICAgICAgICAgICAgcmV0dmFsID0gbXNnCgogICAgcmV0
dXJuIHJldHZhbAp9CgoKcHl0aG9uIGJhc2VfZ2V0X21ldGFkYXRhX3N2bl9yZXZpc2lvbiAoKSB7
CmRlZiBiYXNlX2dldF9tZXRhZGF0YV9zdm5fcmV2aXNpb24ocGF0aCwgZCk6CiAgICByZXZpc2lv
biA9ICI8dW5rbm93bj4iCiAgICB0cnk6CiAgICAgICAgcmV2aXNpb24gPSBmaWxlKCAiJXMvLnN2
bi9lbnRyaWVzIiAlIHBhdGggKS5yZWFkbGluZXMoKVszXS5zdHJpcCgpCiAgICBleGNlcHQgSU9F
cnJvcjoKICAgICAgICBwYXNzCiAgICByZXR1cm4gcmV2aXNpb24KfQoKCnB5dGhvbiBnZW5lcmF0
ZV9zc3RhdGVmbiAoKSB7CmRlZiBnZW5lcmF0ZV9zc3RhdGVmbihzcGVjLCBoYXNoLCBkKToKICAg
IGlmIG5vdCBoYXNoOgogICAgICAgIGhhc2ggPSAiSU5WQUxJRCIKICAgIHJldHVybiBoYXNoWzoy
XSArICIvIiArIHNwZWMgKyBoYXNoCn0KCgpweXRob24gc3N0YXRlX2luc3RhbGwgKCkgewpkZWYg
c3N0YXRlX2luc3RhbGwoc3MsIGQpOgogICAgaW1wb3J0IG9lLnBhdGgKCiAgICBzaGFyZWRmaWxl
cyA9IFtdCiAgICBzaGFyZWRkaXJzID0gW10KICAgIGJiLm1rZGlyaGllcihkLmV4cGFuZCgiL2hv
bWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3NzdGF0ZS1jb250
cm9sIikpCiAgICBtYW5pZmVzdCA9IGQuZXhwYW5kKCIvaG9tZS9taXNoYWwveW9jdG8vcG9reS1k
YW5ueS04LjAvYnVpbGQtZnJpMi90bXAvc3N0YXRlLWNvbnRyb2wvbWFuaWZlc3QtY29yZTItYmJs
YXllcnMuJXMiICUgc3NbJ25hbWUnXSkKCiAgICBpZiBvcy5hY2Nlc3MobWFuaWZlc3QsIG9zLlJf
T0spOgogICAgICAgIGJiLmZhdGFsKCJQYWNrYWdlIGFscmVhZHkgc3RhZ2VkICglcyk/ISIgJSBt
YW5pZmVzdCkKCiAgICBsb2NrcyA9IFtdCiAgICBmb3IgbG9jayBpbiBzc1snbG9ja2ZpbGVzLXNo
YXJlZCddOgogICAgICAgIGxvY2tzLmFwcGVuZChiYi51dGlscy5sb2NrZmlsZShsb2NrLCBUcnVl
KSkKICAgIGZvciBsb2NrIGluIHNzWydsb2NrZmlsZXMnXToKICAgICAgICBsb2Nrcy5hcHBlbmQo
YmIudXRpbHMubG9ja2ZpbGUobG9jaykpCgogICAgZm9yIHN0YXRlIGluIHNzWydkaXJzJ106CiAg
ICAgICAgZm9yIHdhbGtyb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHN0YXRlWzFdKToKICAg
ICAgICAgICAgYmIuZGVidWcoMiwgIlN0YWdpbmcgZmlsZXMgZnJvbSAlcyB0byAlcyIgJSAoc3Rh
dGVbMV0sIHN0YXRlWzJdKSkKICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CiAgICAgICAg
ICAgICAgICBzcmNwYXRoID0gb3MucGF0aC5qb2luKHdhbGtyb290LCBmaWxlKQogICAgICAgICAg
ICAgICAgZHN0cGF0aCA9IHNyY3BhdGgucmVwbGFjZShzdGF0ZVsxXSwgc3RhdGVbMl0pCiAgICAg
ICAgICAgICAgICAjYmIuZGVidWcoMiwgIlN0YWdpbmcgJXMgdG8gJXMiICUgKHNyY3BhdGgsIGRz
dHBhdGgpKQogICAgICAgICAgICAgICAgc2hhcmVkZmlsZXMuYXBwZW5kKGRzdHBhdGgpCiAgICAg
ICAgICAgIGZvciBkaXIgaW4gZGlyczoKICAgICAgICAgICAgICAgIHNyY2RpciA9IG9zLnBhdGgu
am9pbih3YWxrcm9vdCwgZGlyKQogICAgICAgICAgICAgICAgZHN0ZGlyID0gc3JjZGlyLnJlcGxh
Y2Uoc3RhdGVbMV0sIHN0YXRlWzJdKQogICAgICAgICAgICAgICAgI2JiLmRlYnVnKDIsICJTdGFn
aW5nICVzIHRvICVzIiAlIChzcmNkaXIsIGRzdGRpcikpCiAgICAgICAgICAgICAgICBpZiBub3Qg
ZHN0ZGlyLmVuZHN3aXRoKCIvIik6CiAgICAgICAgICAgICAgICAgICAgZHN0ZGlyID0gZHN0ZGly
ICsgIi8iCiAgICAgICAgICAgICAgICBzaGFyZWRkaXJzLmFwcGVuZChkc3RkaXIpCgogICAgIyBD
aGVjayB0aGUgZmlsZSBsaXN0IGZvciBjb25mbGljdHMgYWdhaW5zdCBmaWxlcyB3aGljaCBhbHJl
YWR5IGV4aXN0CiAgICB3aGl0ZWxpc3QgPSAoZC5nZXRWYXIoIlNTVEFURV9EVVBXSElURUxJU1Qi
LCBUcnVlKSBvciAiIikuc3BsaXQoKQogICAgbWF0Y2ggPSBbXQogICAgZm9yIGYgaW4gc2hhcmVk
ZmlsZXM6CiAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZik6CiAgICAgICAgICAgIGYgPSBvcy5w
YXRoLm5vcm1wYXRoKGYpCiAgICAgICAgICAgIHJlYWxtYXRjaCA9IFRydWUKICAgICAgICAgICAg
Zm9yIHcgaW4gd2hpdGVsaXN0OgogICAgICAgICAgICAgICAgaWYgZi5zdGFydHN3aXRoKHcpOgog
ICAgICAgICAgICAgICAgICAgIHJlYWxtYXRjaCA9IEZhbHNlCiAgICAgICAgICAgICAgICAgICAg
YnJlYWsKICAgICAgICAgICAgaWYgcmVhbG1hdGNoOgogICAgICAgICAgICAgICAgbWF0Y2guYXBw
ZW5kKGYpCiAgICBpZiBtYXRjaDoKICAgICAgICBiYi53YXJuKCJUaGUgcmVjaXBlIGlzIHRyeWlu
ZyB0byBpbnN0YWxsIGZpbGVzIGludG8gYSBzaGFyZWQgYXJlYSB3aGVuIHRob3NlIGZpbGVzIGFs
cmVhZHkgZXhpc3QuIFRob3NlIGZpbGVzIGFyZTpcbiAgICVzIiAlICJcbiAgICIuam9pbihtYXRj
aCkpCgogICAgIyBXcml0ZSBvdXQgdGhlIG1hbmlmZXN0CiAgICBmID0gb3BlbihtYW5pZmVzdCwg
InciKQogICAgZm9yIGZpbGUgaW4gc2hhcmVkZmlsZXM6CiAgICAgICAgZi53cml0ZShmaWxlICsg
IlxuIikKCiAgICAjIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgZGlyZWN0b3JpZXMgYXBwZWFyIGF0
IHRoZSBlbmQgb2YgdGhlIG1hbmlmZXN0CiAgICAjIHNvIHRoYXQgd2hlbiB3ZSB0ZXN0IHRvIHNl
ZSBpZiB0aGV5IHNob3VsZCBiZSBkZWxldGVkIGFueSBjb250ZW50cwogICAgIyBhZGRlZCBieSB0
aGUgdGFzayB3aWxsIGhhdmUgYmVlbiByZW1vdmVkIGZpcnN0LgogICAgZGlycyA9IHNvcnRlZChz
aGFyZWRkaXJzLCBrZXk9bGVuKQogICAgIyBNdXN0IHJlbW92ZSBjaGlsZHJlbiBmaXJzdCwgd2hp
Y2ggd2lsbCBoYXZlIGEgbG9uZ2VyIHBhdGggdGhhbiB0aGUgcGFyZW50CiAgICBmb3IgZGkgaW4g
cmV2ZXJzZWQoZGlycyk6CiAgICAgICAgZi53cml0ZShkaSArICJcbiIpCiAgICBmLmNsb3NlKCkK
CiAgICAjIFJ1biB0aGUgYWN0dWFsIGZpbGUgaW5zdGFsbAogICAgZm9yIHN0YXRlIGluIHNzWydk
aXJzJ106CiAgICAgICAgb2UucGF0aC5jb3B5dHJlZShzdGF0ZVsxXSwgc3RhdGVbMl0pCgogICAg
Zm9yIHBvc3RpbnN0IGluIChkLmdldFZhcignU1NUQVRFUE9TVElOU1RGVU5DUycsIFRydWUpIG9y
ICcnKS5zcGxpdCgpOgogICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhwb3N0aW5zdCwgZCkKCiAg
ICBmb3IgbG9jayBpbiBsb2NrczoKICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxvY2spCn0K
CgpweXRob24gc3N0YXRlX2NsZWFuX2NhY2hlZmlsZXMgKCkgewpkZWYgc3N0YXRlX2NsZWFuX2Nh
Y2hlZmlsZXMoZCk6CiAgICBmb3IgdGFzayBpbiAoZC5nZXRWYXIoJ1NTVEFURVRBU0tTJywgVHJ1
ZSkgb3IgIiIpLnNwbGl0KCk6CiAgICAgICAgc3MgPSBzc3RhdGVfc3RhdGVfZnJvbXZhcnMoZCwg
dGFza1szOl0pCiAgICAgICAgc3N0YXRlX2NsZWFuX2NhY2hlZmlsZShzcywgZCkKfQoKCnB5dGhv
biBwYWNrYWdlX2RvX3NobGlicyAoKSB7CiAgICBpbXBvcnQgcmUsIHBpcGVzCgogICAgZXhjbHVk
ZV9zaGxpYnMgPSBkLmdldFZhcignRVhDTFVERV9GUk9NX1NITElCUycsIDApCiAgICBpZiBleGNs
dWRlX3NobGliczoKICAgICAgICBiYi5ub3RlKCJub3QgZ2VuZXJhdGluZyBzaGxpYnMiKQogICAg
ICAgIHJldHVybgoKICAgIGxpYl9yZSA9IHJlLmNvbXBpbGUoIl4uKlwuc28iKQogICAgbGliZGly
X3JlID0gcmUuY29tcGlsZSgiLiovJXMkIiAlIGQuZ2V0VmFyKCdiYXNlbGliJywgVHJ1ZSkpCgog
ICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQogICAgdGFyZ2V0b3MgPSBk
LmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSkKCiAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktE
SVInLCBUcnVlKQoKICAgIHZlciA9IGQuZ2V0VmFyKCdQS0dWJywgVHJ1ZSkKICAgIGlmIG5vdCB2
ZXI6CiAgICAgICAgYmIuZXJyb3IoIlBLR1Ygbm90IGRlZmluZWQiKQogICAgICAgIHJldHVybgoK
ICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCgogICAgc2hsaWJzX2RpciA9
IGQuZ2V0VmFyKCdTSExJQlNESVInLCBUcnVlKQogICAgc2hsaWJzd29ya19kaXIgPSBkLmdldFZh
cignU0hMSUJTV09SS0RJUicsIFRydWUpCgogICAgIyBUYWtlIHNoYXJlZCBsb2NrIHNpbmNlIHdl
J3JlIG9ubHkgcmVhZGluZywgbm90IHdyaXRpbmcKICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUo
ZC5leHBhbmQoIi9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWlsZC1mcmkyL3Rt
cC9zeXNyb290cy9wYWNrYWdlLW91dHB1dC5sb2NrIikpCgogICAgZGVmIGxpbnV4X3NvKHJvb3Qs
IHBhdGgsIGZpbGUpOgogICAgICAgIG5lZWRzX2xkY29uZmlnID0gRmFsc2UKICAgICAgICBjbWQg
PSBkLmdldFZhcignT0JKRFVNUCcsIFRydWUpICsgIiAtcCAiICsgcGlwZXMucXVvdGUob3MucGF0
aC5qb2luKHJvb3QsIGZpbGUpKSArICIgMj4vZGV2L251bGwiCiAgICAgICAgY21kID0gIlBBVEg9
XCIlc1wiICVzIiAlIChkLmdldFZhcignUEFUSCcsIFRydWUpLCBjbWQpCiAgICAgICAgZmQgPSBv
cy5wb3BlbihjbWQpCiAgICAgICAgbGluZXMgPSBmZC5yZWFkbGluZXMoKQogICAgICAgIGZkLmNs
b3NlKCkKICAgICAgICBmb3IgbCBpbiBsaW5lczoKICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCJc
cytORUVERURccysoW15cc10qKSIsIGwpCiAgICAgICAgICAgIGlmIG06CiAgICAgICAgICAgICAg
ICBpZiBtLmdyb3VwKDEpIG5vdCBpbiBuZWVkZWRbcGtnXToKICAgICAgICAgICAgICAgICAgICBu
ZWVkZWRbcGtnXS5hcHBlbmQobS5ncm91cCgxKSkKICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCJc
cytTT05BTUVccysoW15cc10qKSIsIGwpCiAgICAgICAgICAgIGlmIG06CiAgICAgICAgICAgICAg
ICB0aGlzX3NvbmFtZSA9IG0uZ3JvdXAoMSkKICAgICAgICAgICAgICAgIGlmIG5vdCB0aGlzX3Nv
bmFtZSBpbiBzb25hbWVzOgogICAgICAgICAgICAgICAgICAgICMgaWYgbGlicmFyeSBpcyBwcml2
YXRlIChvbmx5IHVzZWQgYnkgcGFja2FnZSkgdGhlbiBkbyBub3QgYnVpbGQgc2hsaWIgZm9yIGl0
CiAgICAgICAgICAgICAgICAgICAgaWYgbm90IHByaXZhdGVfbGlicyBvciAtMSA9PSBwcml2YXRl
X2xpYnMuZmluZCh0aGlzX3NvbmFtZSk6CiAgICAgICAgICAgICAgICAgICAgICAgIHNvbmFtZXMu
YXBwZW5kKHRoaXNfc29uYW1lKQogICAgICAgICAgICAgICAgaWYgbGliZGlyX3JlLm1hdGNoKHJv
b3QpOgogICAgICAgICAgICAgICAgICAgIG5lZWRzX2xkY29uZmlnID0gVHJ1ZQogICAgICAgICAg
ICAgICAgaWYgc25hcF9zeW1saW5rcyBhbmQgKGZpbGUgIT0gdGhpc19zb25hbWUpOgogICAgICAg
ICAgICAgICAgICAgIHJlbmFtZXMuYXBwZW5kKChvcy5wYXRoLmpvaW4ocm9vdCwgZmlsZSksIG9z
LnBhdGguam9pbihyb290LCB0aGlzX3NvbmFtZSkpKQogICAgICAgIHJldHVybiBuZWVkc19sZGNv
bmZpZwoKICAgIGRlZiBkYXJ3aW5fc28ocm9vdCwgcGF0aCwgZmlsZSk6CiAgICAgICAgZnVsbHBh
dGggPSBvcy5wYXRoLmpvaW4ocm9vdCwgZmlsZSkKICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlz
dHMoZnVsbHBhdGgpOgogICAgICAgICAgICByZXR1cm4KCiAgICAgICAgZGVmIGdldF9jb21iaW5h
dGlvbnMoYmFzZSk6CiAgICAgICAgICAgICMKICAgICAgICAgICAgIyBHaXZlbiBhIGJhc2UgbGli
cmFyeSBuYW1lLCBmaW5kIGFsbCBjb21iaW5hdGlvbnMgb2YgdGhpcyBzcGxpdCBieSAiLiIgYW5k
ICItIgogICAgICAgICAgICAjCiAgICAgICAgICAgIGNvbWJvcyA9IFtdCiAgICAgICAgICAgIG9w
dGlvbnMgPSBiYXNlLnNwbGl0KCIuIikKICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVu
KG9wdGlvbnMpICsgMSk6CiAgICAgICAgICAgICAgICBjb21ib3MuYXBwZW5kKCIuIi5qb2luKG9w
dGlvbnNbMDppXSkpCiAgICAgICAgICAgIG9wdGlvbnMgPSBiYXNlLnNwbGl0KCItIikKICAgICAg
ICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKG9wdGlvbnMpICsgMSk6CiAgICAgICAgICAgICAg
ICBjb21ib3MuYXBwZW5kKCItIi5qb2luKG9wdGlvbnNbMDppXSkpCiAgICAgICAgICAgIHJldHVy
biBjb21ib3MKCiAgICAgICAgaWYgKGZpbGUuZW5kc3dpdGgoJy5keWxpYicpIG9yIGZpbGUuZW5k
c3dpdGgoJy5zbycpKSBhbmQgbm90IHBrZy5lbmRzd2l0aCgnLWRldicpIGFuZCBub3QgcGtnLmVu
ZHN3aXRoKCctZGJnJyk6CiAgICAgICAgICAgICMgRHJvcCBzdWZmaXgKICAgICAgICAgICAgbmFt
ZSA9IGZpbGUucnNwbGl0KCIuIiwxKVswXQogICAgICAgICAgICAjIEZpbmQgYWxsIGNvbWJpbmF0
aW9ucwogICAgICAgICAgICBjb21ib3MgPSBnZXRfY29tYmluYXRpb25zKG5hbWUpCiAgICAgICAg
ICAgIGZvciBjb21ibyBpbiBjb21ib3M6CiAgICAgICAgICAgICAgICBpZiBub3QgY29tYm8gaW4g
c29uYW1lczoKICAgICAgICAgICAgICAgICAgICBzb25hbWVzLmFwcGVuZChjb21ibykKICAgICAg
ICBpZiBmaWxlLmVuZHN3aXRoKCcuZHlsaWInKSBvciBmaWxlLmVuZHN3aXRoKCcuc28nKToKICAg
ICAgICAgICAgbGFmaWxlID0gZnVsbHBhdGgucmVwbGFjZShvcy5wYXRoLmpvaW4ocGtnZGVzdCwg
cGtnKSwgZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKSkKICAgICAgICAgICAgIyBEcm9wIHN1ZmZpeAog
ICAgICAgICAgICBsYWZpbGUgPSBsYWZpbGUucnNwbGl0KCIuIiwxKVswXQogICAgICAgICAgICBs
YXBhdGggPSBvcy5wYXRoLmRpcm5hbWUobGFmaWxlKQogICAgICAgICAgICBsYWZpbGUgPSBvcy5w
YXRoLmJhc2VuYW1lKGxhZmlsZSkKICAgICAgICAgICAgIyBGaW5kIGFsbCBjb21iaW5hdGlvbnMK
ICAgICAgICAgICAgY29tYm9zID0gZ2V0X2NvbWJpbmF0aW9ucyhsYWZpbGUpCiAgICAgICAgICAg
IGZvciBjb21ibyBpbiBjb21ib3M6CiAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhs
YXBhdGggKyAnLycgKyBjb21ibyArICcubGEnKToKICAgICAgICAgICAgICAgICAgICBicmVhawog
ICAgICAgICAgICBsYWZpbGUgPSBsYXBhdGggKyAnLycgKyBjb21ibyArICcubGEnCgogICAgICAg
ICAgICAjYmIubm90ZSgiRm9vMjogJXMiICUgbGFmaWxlKQogICAgICAgICAgICAjYmIubm90ZSgi
Rm9vICVzICVzIiAlIChmaWxlLCBmdWxscGF0aCkpCiAgICAgICAgICAgIGlmIG9zLnBhdGguZXhp
c3RzKGxhZmlsZSk6CiAgICAgICAgICAgICAgICBmZCA9IG9wZW4obGFmaWxlLCAncicpCiAgICAg
ICAgICAgICAgICBsaW5lcyA9IGZkLnJlYWRsaW5lcygpCiAgICAgICAgICAgICAgICBmZC5jbG9z
ZSgpCiAgICAgICAgICAgICAgICBmb3IgbCBpbiBsaW5lczoKICAgICAgICAgICAgICAgICAgICBt
ID0gcmUubWF0Y2goIlxzKmRlcGVuZGVuY3lfbGlicz1ccyonKC4qKSciLCBsKQogICAgICAgICAg
ICAgICAgICAgIGlmIG06CiAgICAgICAgICAgICAgICAgICAgICAgIGRlcHMgPSBtLmdyb3VwKDEp
LnNwbGl0KCIgIikKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBkZXBzOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgI2JiLm5vdGUoIlRyeWluZyAlcyBmb3IgJXMiICUgKGRl
cCwgcGtnKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBOb25lCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBkZXAuZW5kc3dpdGgoIi5sYSIpOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGRlcCkucmVwbGFjZSgi
LmxhIiwgIiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGRlcC5zdGFydHN3aXRo
KCItbCIpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBkZXAucmVwbGFj
ZSgiLWwiLCAibGliIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBrZyBub3QgaW4g
bmVlZGVkOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRlZFtwa2ddID0gW10K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5hbWUgYW5kIG5hbWUgbm90IGluIG5lZWRl
ZFtwa2ddOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRlZFtwa2ddLmFwcGVu
ZChuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNiYi5ub3RlKCJBZGRpbmcg
JXMgZm9yICVzIiAlIChuYW1lLCBwa2cpKQoKICAgIGlmIGQuZ2V0VmFyKCdQQUNLQUdFX1NOQVBf
TElCX1NZTUxJTktTJywgVHJ1ZSkgPT0gIjEiOgogICAgICAgIHNuYXBfc3ltbGlua3MgPSBUcnVl
CiAgICBlbHNlOgogICAgICAgIHNuYXBfc3ltbGlua3MgPSBGYWxzZQoKICAgIGlmIChkLmdldFZh
cignVVNFX0xEQ09ORklHJywgVHJ1ZSkgb3IgIjEiKSA9PSAiMSI6CiAgICAgICAgdXNlX2xkY29u
ZmlnID0gVHJ1ZQogICAgZWxzZToKICAgICAgICB1c2VfbGRjb25maWcgPSBGYWxzZQoKICAgIG5l
ZWRlZCA9IHt9CiAgICBzaGxpYl9wcm92aWRlciA9IHt9CiAgICBmb3IgcGtnIGluIHBhY2thZ2Vz
LnNwbGl0KCk6CiAgICAgICAgcHJpdmF0ZV9saWJzID0gZC5nZXRWYXIoJ1BSSVZBVEVfTElCU18n
ICsgcGtnLCBUcnVlKSBvciBkLmdldFZhcignUFJJVkFURV9MSUJTJywgVHJ1ZSkKICAgICAgICBu
ZWVkc19sZGNvbmZpZyA9IEZhbHNlCiAgICAgICAgYmIuZGVidWcoMiwgImNhbGN1bGF0aW5nIHNo
bGliIHByb3ZpZGVzIGZvciAlcyIgJSBwa2cpCgogICAgICAgIHBrZ3ZlciA9IGQuZ2V0VmFyKCdQ
S0dWXycgKyBwa2csIFRydWUpCiAgICAgICAgaWYgbm90IHBrZ3ZlcjoKICAgICAgICAgICAgcGtn
dmVyID0gZC5nZXRWYXIoJ1BWXycgKyBwa2csIFRydWUpCiAgICAgICAgaWYgbm90IHBrZ3ZlcjoK
ICAgICAgICAgICAgcGtndmVyID0gdmVyCgogICAgICAgIG5lZWRlZFtwa2ddID0gW10KICAgICAg
ICBzb25hbWVzID0gbGlzdCgpCiAgICAgICAgcmVuYW1lcyA9IGxpc3QoKQogICAgICAgIHRvcCA9
IG9zLnBhdGguam9pbihwa2dkZXN0LCBwa2cpCiAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVz
IGluIG9zLndhbGsodG9wKToKICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CiAgICAgICAg
ICAgICAgICBzb25hbWUgPSBOb25lCiAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2lu
KHJvb3QsIGZpbGUpCiAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhwYXRoKToKICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgaWYgdGFyZ2V0b3MgPT0g
ImRhcndpbiIgb3IgdGFyZ2V0b3MgPT0gImRhcndpbjgiOgogICAgICAgICAgICAgICAgICAgIGRh
cndpbl9zbyhyb290LCBkaXJzLCBmaWxlKQogICAgICAgICAgICAgICAgZWxpZiBvcy5hY2Nlc3Mo
cGF0aCwgb3MuWF9PSykgb3IgbGliX3JlLm1hdGNoKGZpbGUpOgogICAgICAgICAgICAgICAgICAg
IGxkY29uZmlnID0gbGludXhfc28ocm9vdCwgZGlycywgZmlsZSkKICAgICAgICAgICAgICAgICAg
ICBuZWVkc19sZGNvbmZpZyA9IG5lZWRzX2xkY29uZmlnIG9yIGxkY29uZmlnCiAgICAgICAgZm9y
IChvbGQsIG5ldykgaW4gcmVuYW1lczoKICAgICAgICAgICAgYmIubm90ZSgiUmVuYW1pbmcgJXMg
dG8gJXMiICUgKG9sZCwgbmV3KSkKICAgICAgICAgICAgb3MucmVuYW1lKG9sZCwgbmV3KQogICAg
ICAgIHNobGlic19maWxlID0gb3MucGF0aC5qb2luKHNobGlic3dvcmtfZGlyLCBwa2cgKyAiLmxp
c3QiKQogICAgICAgIHNodmVyX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2hsaWJzd29ya19kaXIsIHBr
ZyArICIudmVyIikKICAgICAgICBpZiBsZW4oc29uYW1lcyk6CiAgICAgICAgICAgIGZkID0gb3Bl
bihzaGxpYnNfZmlsZSwgJ3cnKQogICAgICAgICAgICBmb3IgcyBpbiBzb25hbWVzOgogICAgICAg
ICAgICAgICAgZmQud3JpdGUocyArICdcbicpCiAgICAgICAgICAgICAgICBzaGxpYl9wcm92aWRl
cltzXSA9IChwa2csIHBrZ3ZlcikKICAgICAgICAgICAgZmQuY2xvc2UoKQogICAgICAgICAgICBm
ZCA9IG9wZW4oc2h2ZXJfZmlsZSwgJ3cnKQogICAgICAgICAgICBmZC53cml0ZShwa2d2ZXIgKyAn
XG4nKQogICAgICAgICAgICBmZC5jbG9zZSgpCiAgICAgICAgaWYgbmVlZHNfbGRjb25maWcgYW5k
IHVzZV9sZGNvbmZpZzoKICAgICAgICAgICAgYmIuZGVidWcoMSwgJ2FkZGluZyBsZGNvbmZpZyBj
YWxsIHRvIHBvc3RpbnN0IGZvciAlcycgJSBwa2cpCiAgICAgICAgICAgIHBvc3RpbnN0ID0gZC5n
ZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpIG9yIGQuZ2V0VmFyKCdwa2dfcG9z
dGluc3QnLCBUcnVlKQogICAgICAgICAgICBpZiBub3QgcG9zdGluc3Q6CiAgICAgICAgICAgICAg
ICBwb3N0aW5zdCA9ICcjIS9iaW4vc2hcbicKICAgICAgICAgICAgcG9zdGluc3QgKz0gZC5nZXRW
YXIoJ2xkY29uZmlnX3Bvc3RpbnN0X2ZyYWdtZW50JywgVHJ1ZSkKICAgICAgICAgICAgZC5zZXRW
YXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQoKICAgIGxpc3RfcmUgPSByZS5j
b21waWxlKCdeKC4qKVwubGlzdCQnKQogICAgZm9yIGRpciBpbiBbc2hsaWJzX2Rpcl06CiAgICAg
ICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRpcik6CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAg
ICAgZm9yIGZpbGUgaW4gb3MubGlzdGRpcihkaXIpOgogICAgICAgICAgICBtID0gbGlzdF9yZS5t
YXRjaChmaWxlKQogICAgICAgICAgICBpZiBtOgogICAgICAgICAgICAgICAgZGVwX3BrZyA9IG0u
Z3JvdXAoMSkKICAgICAgICAgICAgICAgIGZkID0gb3Blbihvcy5wYXRoLmpvaW4oZGlyLCBmaWxl
KSkKICAgICAgICAgICAgICAgIGxpbmVzID0gZmQucmVhZGxpbmVzKCkKICAgICAgICAgICAgICAg
IGZkLmNsb3NlKCkKICAgICAgICAgICAgICAgIHZlcl9maWxlID0gb3MucGF0aC5qb2luKGRpciwg
ZGVwX3BrZyArICcudmVyJykKICAgICAgICAgICAgICAgIGxpYl92ZXIgPSBOb25lCiAgICAgICAg
ICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh2ZXJfZmlsZSk6CiAgICAgICAgICAgICAgICAgICAg
ZmQgPSBvcGVuKHZlcl9maWxlKQogICAgICAgICAgICAgICAgICAgIGxpYl92ZXIgPSBmZC5yZWFk
bGluZSgpLnJzdHJpcCgpCiAgICAgICAgICAgICAgICAgICAgZmQuY2xvc2UoKQogICAgICAgICAg
ICAgICAgZm9yIGwgaW4gbGluZXM6CiAgICAgICAgICAgICAgICAgICAgc2hsaWJfcHJvdmlkZXJb
bC5yc3RyaXAoKV0gPSAoZGVwX3BrZywgbGliX3ZlcikKCiAgICBiYi51dGlscy51bmxvY2tmaWxl
KGxmKQoKICAgIGFzc3VtZWRfbGlicyA9IGQuZ2V0VmFyKCdBU1NVTUVfU0hMSUJTJywgVHJ1ZSkK
ICAgIGlmIGFzc3VtZWRfbGliczoKICAgICAgICBmb3IgZSBpbiBhc3N1bWVkX2xpYnMuc3BsaXQo
KToKICAgICAgICAgICAgbCwgZGVwX3BrZyA9IGUuc3BsaXQoIjoiKQogICAgICAgICAgICBsaWJf
dmVyID0gTm9uZQogICAgICAgICAgICBkZXBfcGtnID0gZGVwX3BrZy5yc3BsaXQoIl8iLCAxKQog
ICAgICAgICAgICBpZiBsZW4oZGVwX3BrZykgPT0gMjoKICAgICAgICAgICAgICAgIGxpYl92ZXIg
PSBkZXBfcGtnWzFdCiAgICAgICAgICAgIGRlcF9wa2cgPSBkZXBfcGtnWzBdCiAgICAgICAgICAg
IHNobGliX3Byb3ZpZGVyW2xdID0gKGRlcF9wa2csIGxpYl92ZXIpCgogICAgZm9yIHBrZyBpbiBw
YWNrYWdlcy5zcGxpdCgpOgogICAgICAgIGJiLmRlYnVnKDIsICJjYWxjdWxhdGluZyBzaGxpYiBy
ZXF1aXJlbWVudHMgZm9yICVzIiAlIHBrZykKCiAgICAgICAgZGVwcyA9IGxpc3QoKQogICAgICAg
IGZvciBuIGluIG5lZWRlZFtwa2ddOgogICAgICAgICAgICBpZiBuIGluIHNobGliX3Byb3ZpZGVy
LmtleXMoKToKICAgICAgICAgICAgICAgIChkZXBfcGtnLCB2ZXJfbmVlZGVkKSA9IHNobGliX3By
b3ZpZGVyW25dCgogICAgICAgICAgICAgICAgYmIuZGVidWcoMiwgJyVzOiBEZXBlbmRlbmN5ICVz
IHJlcXVpcmVzIHBhY2thZ2UgJXMnICUgKHBrZywgbiwgZGVwX3BrZykpCgogICAgICAgICAgICAg
ICAgaWYgZGVwX3BrZyA9PSBwa2c6CiAgICAgICAgICAgICAgICAgICAgY29udGludWUKCiAgICAg
ICAgICAgICAgICBpZiB2ZXJfbmVlZGVkOgogICAgICAgICAgICAgICAgICAgIGRlcCA9ICIlcyAo
Pj0gJXMpIiAlIChkZXBfcGtnLCB2ZXJfbmVlZGVkKQogICAgICAgICAgICAgICAgZWxzZToKICAg
ICAgICAgICAgICAgICAgICBkZXAgPSBkZXBfcGtnCiAgICAgICAgICAgICAgICBpZiBub3QgZGVw
IGluIGRlcHM6CiAgICAgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQoZGVwKQogICAgICAgICAg
ICBlbHNlOgogICAgICAgICAgICAgICAgYmIubm90ZSgiQ291bGRuJ3QgZmluZCBzaGFyZWQgbGli
cmFyeSBwcm92aWRlciBmb3IgJXMiICUgbikKCiAgICAgICAgZGVwc19maWxlID0gb3MucGF0aC5q
b2luKHBrZ2Rlc3QsIHBrZyArICIuc2hsaWJkZXBzIikKICAgICAgICBpZiBvcy5wYXRoLmV4aXN0
cyhkZXBzX2ZpbGUpOgogICAgICAgICAgICBvcy5yZW1vdmUoZGVwc19maWxlKQogICAgICAgIGlm
IGxlbihkZXBzKToKICAgICAgICAgICAgZmQgPSBvcGVuKGRlcHNfZmlsZSwgJ3cnKQogICAgICAg
ICAgICBmb3IgZGVwIGluIGRlcHM6CiAgICAgICAgICAgICAgICBmZC53cml0ZShkZXAgKyAnXG4n
KQogICAgICAgICAgICBmZC5jbG9zZSgpCn0KCgpweXRob24gcGFja2FnZV9xYV9jaGVja19kYmcg
KCkgewpkZWYgcGFja2FnZV9xYV9jaGVja19kYmcocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdl
cyk6CiAgICAiIiIKICAgIENoZWNrIGZvciAiLmRlYnVnIiBmaWxlcyBvciBkaXJlY3RvcmllcyBv
dXRzaWRlIG9mIHRoZSBkYmcgcGFja2FnZQogICAgIiIiCgogICAgaWYgbm90ICItZGJnIiBpbiBu
YW1lOgogICAgICAgIGlmICcuZGVidWcnIGluIHBhdGguc3BsaXQob3MucGF0aC5zZXApOgogICAg
ICAgICAgICBtZXNzYWdlcy5hcHBlbmQoIm5vbiBkZWJ1ZyBwYWNrYWdlIGNvbnRhaW5zIC5kZWJ1
ZyBkaXJlY3Rvcnk6ICVzIHBhdGggJXMiICUgXAogICAgICAgICAgICAgICAgICAgICAobmFtZSwg
cGFja2FnZV9xYV9jbGVhbl9wYXRoKHBhdGgsZCkpKQp9CgoKcHl0aG9uIHBhY2thZ2VfZG9fZmls
ZWRlcHMgKCkgewogICAgaW1wb3J0IHJlCgogICAgaWYgZC5nZXRWYXIoJ1NLSVBfRklMRURFUFMn
LCBUcnVlKSA9PSAnMSc6CiAgICAgICAgcmV0dXJuCgogICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQ
S0dERVNUJywgVHJ1ZSkKICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkK
CiAgICBycG1kZXBzID0gZC5leHBhbmQoIi9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTgu
MC9idWlsZC1mcmkyL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYi9ycG0vYmluL3Jw
bWRlcHMtb2Vjb3JlIC0tbWFjcm9zIC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9i
dWlsZC1mcmkyL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYi9ycG0vbWFjcm9zIC0t
ZGVmaW5lICdfcnBtZmNfbWFnaWNfcGF0aCAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04
LjAvYnVpbGQtZnJpMi90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9zaGFyZS9taXNjL21h
Z2ljLm1nYycgLS1ycG1wb3B0IC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9idWls
ZC1mcmkyL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYi9ycG0vcnBtcG9wdCIpCiAg
ICByID0gcmUuY29tcGlsZShyJ1s8Pj1dKyArW14gXSonKQoKICAgIGRlZiBmaWxlX3RyYW5zbGF0
ZShmaWxlKToKICAgICAgICBmdCA9IGZpbGUucmVwbGFjZSgiQCIsICJAYXRAIikKICAgICAgICBm
dCA9IGZ0LnJlcGxhY2UoIiAiLCAiQHNwYWNlQCIpCiAgICAgICAgZnQgPSBmdC5yZXBsYWNlKCJc
dCIsICJAdGFiQCIpCiAgICAgICAgZnQgPSBmdC5yZXBsYWNlKCJbIiwgIkBvcGVuYnJhY2VAIikK
ICAgICAgICBmdCA9IGZ0LnJlcGxhY2UoIl0iLCAiQGNsb3NlYnJhY2VAIikKICAgICAgICBmdCA9
IGZ0LnJlcGxhY2UoIl8iLCAiQHVuZGVyc2NvcmVAIikKICAgICAgICByZXR1cm4gZnQKCiAgICAj
IFF1aWNrIHJvdXRpbmUgdG8gcHJvY2VzcyB0aGUgcmVzdWx0cyBvZiB0aGUgcnBtZGVwcyBjYWxs
Li4uCiAgICBkZWYgcHJvY2Vzc19kZXBzKHBpcGUsIHBrZywgcHJvdmlkZXNfZmlsZXMsIHJlcXVp
cmVzX2ZpbGVzKToKICAgICAgICBwcm92aWRlcyA9IHt9CiAgICAgICAgcmVxdWlyZXMgPSB7fQoK
ICAgICAgICBmb3IgbGluZSBpbiBwaXBlOgogICAgICAgICAgICBmID0gbGluZS5zcGxpdCgiICIs
IDEpWzBdLnN0cmlwKCkKICAgICAgICAgICAgbGluZSA9IGxpbmUuc3BsaXQoIiAiLCAxKVsxXS5z
dHJpcCgpCgogICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlJlcXVpcmVzOiIpOgogICAg
ICAgICAgICAgICAgaSA9IHJlcXVpcmVzCiAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRo
KCJQcm92aWRlczoiKToKICAgICAgICAgICAgICAgIGkgPSBwcm92aWRlcwogICAgICAgICAgICBl
bHNlOgogICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgIGZpbGUgPSBmLnJlcGxh
Y2UocGtnZGVzdCArICIvIiArIHBrZywgIiIpCiAgICAgICAgICAgIGZpbGUgPSBmaWxlX3RyYW5z
bGF0ZShmaWxlKQogICAgICAgICAgICB2YWx1ZSA9IGxpbmUuc3BsaXQoIjoiLCAxKVsxXS5zdHJp
cCgpCiAgICAgICAgICAgIHZhbHVlID0gci5zdWIocicoXGc8MD4pJywgdmFsdWUpCgogICAgICAg
ICAgICBpZiB2YWx1ZS5zdGFydHN3aXRoKCJycG1saWIoIik6CiAgICAgICAgICAgICAgICBjb250
aW51ZQogICAgICAgICAgICBpZiB2YWx1ZSA9PSAicHl0aG9uIjoKICAgICAgICAgICAgICAgIGNv
bnRpbnVlCiAgICAgICAgICAgIGlmIGZpbGUgbm90IGluIGk6CiAgICAgICAgICAgICAgICBpW2Zp
bGVdID0gW10KICAgICAgICAgICAgaVtmaWxlXS5hcHBlbmQodmFsdWUpCgogICAgICAgIGZvciBm
aWxlIGluIHByb3ZpZGVzOgogICAgICAgICAgICBwcm92aWRlc19maWxlcy5hcHBlbmQoZmlsZSkK
ICAgICAgICAgICAga2V5ID0gIkZJTEVSUFJPVklERVNfIiArIGZpbGUgKyAiXyIgKyBwa2cKICAg
ICAgICAgICAgZC5zZXRWYXIoa2V5LCAiICIuam9pbihwcm92aWRlc1tmaWxlXSkpCgogICAgICAg
IGZvciBmaWxlIGluIHJlcXVpcmVzOgogICAgICAgICAgICByZXF1aXJlc19maWxlcy5hcHBlbmQo
ZmlsZSkKICAgICAgICAgICAga2V5ID0gIkZJTEVSREVQRU5EU18iICsgZmlsZSArICJfIiArIHBr
ZwogICAgICAgICAgICBkLnNldFZhcihrZXksICIgIi5qb2luKHJlcXVpcmVzW2ZpbGVdKSkKCiAg
ICBkZWYgY2h1bmtzKGZpbGVzLCBuKToKICAgICAgICByZXR1cm4gW2ZpbGVzW2k6aStuXSBmb3Ig
aSBpbiByYW5nZSgwLCBsZW4oZmlsZXMpLCBuKV0KCiAgICAjIERldGVybWluZSBkZXBlbmRlbmNp
ZXMKICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKICAgICAgICBpZiBwa2cuZW5kc3dp
dGgoJy1kYmcnKSBvciBwa2cuZW5kc3dpdGgoJy1kb2MnKSBvciBwa2cuZmluZCgnLWxvY2FsZS0n
KSAhPSAtMSBvciBwa2cuZmluZCgnLWxvY2FsZWRhdGEtJykgIT0gLTEgb3IgcGtnLmZpbmQoJy1n
Y29udi0nKSAhPSAtMSBvciBwa2cuZmluZCgnLWNoYXJtYXAtJykgIT0gLTEgb3IgcGtnLnN0YXJ0
c3dpdGgoJ2tlcm5lbC1tb2R1bGUtJyk6CiAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgIHBy
b3ZpZGVzX2ZpbGVzID0gW10KICAgICAgICByZXF1aXJlc19maWxlcyA9IFtdCiAgICAgICAgcnBm
aWxlcyA9IFtdCiAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocGtnZGVz
dCArICIvIiArIHBrZyk6CiAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgogICAgICAgICAg
ICAgICAgcnBmaWxlcy5hcHBlbmQob3MucGF0aC5qb2luKHJvb3QsIGZpbGUpKQoKICAgICAgICBm
b3IgZmlsZXMgaW4gY2h1bmtzKHJwZmlsZXMsIDEwMCk6CiAgICAgICAgICAgIGRlcF9waXBlID0g
b3MucG9wZW4ocnBtZGVwcyArICIgIiArICIgIi5qb2luKGZpbGVzKSkKCiAgICAgICAgICAgIHBy
b2Nlc3NfZGVwcyhkZXBfcGlwZSwgcGtnLCBwcm92aWRlc19maWxlcywgcmVxdWlyZXNfZmlsZXMp
CgogICAgICAgIGQuc2V0VmFyKCJGSUxFUkRFUEVORFNGTElTVF8iICsgcGtnLCAiICIuam9pbihy
ZXF1aXJlc19maWxlcykpCiAgICAgICAgZC5zZXRWYXIoIkZJTEVSUFJPVklERVNGTElTVF8iICsg
cGtnLCAiICIuam9pbihwcm92aWRlc19maWxlcykpCn0KCgpweXRob24gYmFzZV9kZXRlY3RfcmV2
aXNpb24gKCkgewpkZWYgYmFzZV9kZXRlY3RfcmV2aXNpb24oZCk6CiAgICBwYXRoID0gYmFzZV9n
ZXRfc2NtYmFzZXBhdGgoZCkKCiAgICBzY21zID0gW2Jhc2VfZ2V0X21ldGFkYXRhX2dpdF9yZXZp
c2lvbiwgXAogICAgICAgICAgICBiYXNlX2dldF9tZXRhZGF0YV9zdm5fcmV2aXNpb25dCgogICAg
Zm9yIHNjbSBpbiBzY21zOgogICAgICAgIHJldiA9IHNjbShwYXRoLCBkKQogICAgICAgIGlmIHJl
diA8PiAiPHVua25vd24+IjoKICAgICAgICAgICAgcmV0dXJuIHJldgoKICAgIHJldHVybiAiPHVu
a25vd24+Igp9CgoKcHl0aG9uIHNwbGl0ZmlsZSAoKSB7CmRlZiBzcGxpdGZpbGUoZmlsZSwgZGVi
dWdmaWxlLCBkZWJ1Z3NyY2RpciwgZCk6CiAgICAjIEZ1bmN0aW9uIHRvIHNwbGl0IGEgc2luZ2xl
IGZpbGUsIGNhbGxlZCBmcm9tIHNwbGl0X2FuZF9zdHJpcF9maWxlcyBiZWxvdwogICAgIyBBIHdv
cmtpbmcgJ2ZpbGUnIChvbmUgd2hpY2ggd29ya3Mgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUp
CiAgICAjIGlzIHNwbGl0IGFuZCB0aGUgc3BsaXQgb2ZmIHBvcnRpb25zIGdvIHRvIGRlYnVnZmls
ZS4KICAgICMKICAgICMgVGhlIGRlYnVnIGluZm9ybWF0aW9uIGlzIHRoZW4gcHJvY2Vzc2VkIGZv
ciBzcmMgcmVmZXJlbmNlcy4gIFRoZXNlCiAgICAjIHJlZmVyZW5jZXMgYXJlIGNvcGllZCB0byBk
ZWJ1Z3NyY2RpciwgaWYgZGVmaW5lZC4KCiAgICBpbXBvcnQgY29tbWFuZHMsIHN0YXQsIHN1YnBy
b2Nlc3MKCiAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQogICAgcGF0aHByZWZpeCA9
ICJleHBvcnQgUEFUSD0lczsgIiAlIGQuZ2V0VmFyKCdQQVRIJywgVHJ1ZSkKICAgIG9iamNvcHkg
PSBkLmdldFZhcigiT0JKQ09QWSIsIFRydWUpCiAgICBkZWJ1Z2VkaXQgPSBkLmV4cGFuZCgiL2hv
bWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jvb3RzL3g4
Nl82NC1saW51eC91c3IvbGliL3JwbS9iaW4vZGVidWdlZGl0IikKICAgIHdvcmtkaXIgPSBkLmdl
dFZhcigiV09SS0RJUiIsIFRydWUpCiAgICB3b3JrcGFyZW50ZGlyID0gZC5nZXRWYXIoIkRFQlVH
U1JDX09WRVJSSURFX1BBVEgiLCBUcnVlKSBvciBvcy5wYXRoLmRpcm5hbWUod29ya2RpcikKICAg
IHNvdXJjZWZpbGUgPSBkLmV4cGFuZCgiL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4w
L2J1aWxkLWZyaTIvdG1wL3dvcmsvY29yZTItcG9reS1saW51eC9iYmxheWVycy0xLjAtcjAvZGVi
dWdzb3VyY2VzLmxpc3QiKQoKICAgICMgV2UgaWdub3JlIGtlcm5lbCBtb2R1bGVzLCB3ZSBkb24n
dCBnZW5lcmF0ZSBkZWJ1ZyBpbmZvIGZpbGVzLgogICAgaWYgZmlsZS5maW5kKCIvbGliL21vZHVs
ZXMvIikgIT0gLTEgYW5kIGZpbGUuZW5kc3dpdGgoIi5rbyIpOgogICAgICAgIHJldHVybiAxCgog
ICAgbmV3bW9kZSA9IE5vbmUKICAgIGlmIG5vdCBvcy5hY2Nlc3MoZmlsZSwgb3MuV19PSykgb3Ig
b3MuYWNjZXNzKGZpbGUsIG9zLlJfT0spOgogICAgICAgIG9yaWdtb2RlID0gb3Muc3RhdChmaWxl
KVtzdGF0LlNUX01PREVdCiAgICAgICAgbmV3bW9kZSA9IG9yaWdtb2RlIHwgc3RhdC5TX0lXUklU
RSB8IHN0YXQuU19JUkVBRAogICAgICAgIG9zLmNobW9kKGZpbGUsIG5ld21vZGUpCgogICAgIyBX
ZSBuZWVkIHRvIGV4dHJhY3QgdGhlIGRlYnVnIHNyYyBpbmZvcm1hdGlvbiBoZXJlLi4uCiAgICBp
ZiBkZWJ1Z3NyY2RpcjoKICAgICAgICBzdWJwcm9jZXNzLmNhbGwoIiVzJyVzJyAtYiAnJXMnIC1k
ICclcycgLWkgLWwgJyVzJyAnJXMnIiAlIChwYXRocHJlZml4LCBkZWJ1Z2VkaXQsIHdvcmtwYXJl
bnRkaXIsIGRlYnVnc3JjZGlyLCBzb3VyY2VmaWxlLCBmaWxlKSwgc2hlbGw9VHJ1ZSkKCiAgICBi
Yi5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGRlYnVnZmlsZSkpCgogICAgc3VicHJvY2Vzcy5j
YWxsKCIlcyclcycgLS1vbmx5LWtlZXAtZGVidWcgJyVzJyAnJXMnIiAlIChwYXRocHJlZml4LCBv
Ympjb3B5LCBmaWxlLCBkZWJ1Z2ZpbGUpLCBzaGVsbD1UcnVlKQoKICAgICMgU2V0IHRoZSBkZWJ1
Z2xpbmsgdG8gaGF2ZSB0aGUgdmlldyBvZiB0aGUgZmlsZSBwYXRoIG9uIHRoZSB0YXJnZXQKICAg
IHN1YnByb2Nlc3MuY2FsbCgiJXMnJXMnIC0tYWRkLWdudS1kZWJ1Z2xpbms9JyVzJyAnJXMnIiAl
IChwYXRocHJlZml4LCBvYmpjb3B5LCBkZWJ1Z2ZpbGUsIGZpbGUpLCBzaGVsbD1UcnVlKQoKICAg
IGlmIG5ld21vZGU6CiAgICAgICAgb3MuY2htb2QoZmlsZSwgb3JpZ21vZGUpCgogICAgcmV0dXJu
IDAKfQoKCnB5dGhvbiBjaGVja19zYW5pdHkgKCkgewpkZWYgY2hlY2tfc2FuaXR5KHNhbml0eV9k
YXRhKToKICAgIGltcG9ydCBzdWJwcm9jZXNzCgogICAgdHJ5OgogICAgICAgIGZyb20gZGlzdHV0
aWxzLnZlcnNpb24gaW1wb3J0IExvb3NlVmVyc2lvbgogICAgZXhjZXB0IEltcG9ydEVycm9yOgog
ICAgICAgIGRlZiBMb29zZVZlcnNpb24odik6IHByaW50ICJXQVJOSU5HOiBzYW5pdHkuYmJjbGFz
cyBjYW4ndCBjb21wYXJlIHZlcnNpb25zIHdpdGhvdXQgcHl0aG9uLWRpc3R1dGlscyI7IHJldHVy
biAxCiAgICBpbXBvcnQgY29tbWFuZHMKCiAgICAjIENoZWNrIHRoZSBiaXRiYWtlIHZlcnNpb24g
bWVldHMgbWluaW11bSByZXF1aXJlbWVudHMKICAgIG1pbnZlcnNpb24gPSBzYW5pdHlfZGF0YS5n
ZXRWYXIoJ0JCX01JTl9WRVJTSU9OJywgVHJ1ZSkKICAgIGlmIG5vdCBtaW52ZXJzaW9uOgogICAg
ICAgICMgSGFjazogQkJfTUlOX1ZFUlNJT04gaGFzbid0IGJlZW4gcGFyc2VkIHlldCBzbyByZXR1
cm4KICAgICAgICAjIGFuZCB3YWl0IGZvciB0aGUgbmV4dCBjYWxsCiAgICAgICAgcHJpbnQgIkZv
byAlcyIgJSBtaW52ZXJzaW9uCiAgICAgICAgcmV0dXJuCgogICAgaWYgMCA9PSBvcy5nZXR1aWQo
KToKICAgICAgICByYWlzZV9zYW5pdHlfZXJyb3IoIkRvIG5vdCB1c2UgQml0YmFrZSBhcyByb290
LiIsIHNhbml0eV9kYXRhKQoKICAgIG1lc3NhZ2VzID0gIiIKCiAgICAjIENoZWNrIHRoZSBQeXRo
b24gdmVyc2lvbiwgd2Ugbm93IHVzZSBQeXRob24gMi42IGZlYXR1cmVzIGluCiAgICAjIHZhcmlv
dXMgY2xhc3NlcwogICAgaW1wb3J0IHN5cwogICAgaWYgc3lzLmhleHZlcnNpb24gPCAweDAyMDYw
MEYwOgogICAgICAgIG1lc3NhZ2VzID0gbWVzc2FnZXMgKyAnVGhlIHN5c3RlbSByZXF1aXJlcyBh
dCBsZWFzdCBQeXRob24gMi42IHRvIHJ1bi4gUGxlYXNlIHVwZGF0ZSB5b3VyIFB5dGhvbiBpbnRl
cnByZXRlci5cbicKCiAgICBpZiAoTG9vc2VWZXJzaW9uKGJiLl9fdmVyc2lvbl9fKSA8IExvb3Nl
VmVyc2lvbihtaW52ZXJzaW9uKSk6CiAgICAgICAgbWVzc2FnZXMgPSBtZXNzYWdlcyArICdCaXRi
YWtlIHZlcnNpb24gJXMgaXMgcmVxdWlyZWQgYW5kIHZlcnNpb24gJXMgd2FzIGZvdW5kXG4nICUg
KG1pbnZlcnNpb24sIGJiLl9fdmVyc2lvbl9fKQoKICAgICMgQ2hlY2sgdGhhdCB0aGUgTUFDSElO
RSBpcyB2YWxpZCwgaWYgaXQgaXMgc2V0CiAgICBtYWNoaW5ldmFsaWQgPSBUcnVlCiAgICBpZiBz
YW5pdHlfZGF0YS5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKToKICAgICAgICBpZiBub3QgY2hlY2tf
Y29uZl9leGlzdHMoImNvbmYvbWFjaGluZS9mcmkyLW5vZW1nZC5jb25mIiwgc2FuaXR5X2RhdGEp
OgogICAgICAgICAgICBtZXNzYWdlcyA9IG1lc3NhZ2VzICsgJ1BsZWFzZSBzZXQgYSB2YWxpZCBN
QUNISU5FIGluIHlvdXIgbG9jYWwuY29uZiBvciBlbnZpcm9ubWVudFxuJwogICAgICAgICAgICBt
YWNoaW5ldmFsaWQgPSBGYWxzZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG1lc3NhZ2VzID0g
bWVzc2FnZXMgKyBjaGVja19zYW5pdHlfdmFsaWRtYWNoaW5lKHNhbml0eV9kYXRhKQogICAgZWxz
ZToKICAgICAgICBtZXNzYWdlcyA9IG1lc3NhZ2VzICsgJ1BsZWFzZSBzZXQgYSBNQUNISU5FIGlu
IHlvdXIgbG9jYWwuY29uZiBvciBlbnZpcm9ubWVudFxuJwogICAgICAgIG1hY2hpbmV2YWxpZCA9
IEZhbHNlCgogICAgIyBDaGVjayB3ZSBhcmUgdXNpbmcgYSB2YWxpZCBsYWNhbC5jb25mCiAgICBj
dXJyZW50X2NvbmYgID0gc2FuaXR5X2RhdGEuZ2V0VmFyKCdDT05GX1ZFUlNJT04nLCBUcnVlKQog
ICAgY29uZl92ZXJzaW9uID0gIHNhbml0eV9kYXRhLmdldFZhcignTE9DQUxDT05GX1ZFUlNJT04n
LCBUcnVlKQoKICAgIGlmIGN1cnJlbnRfY29uZiAhPSBjb25mX3ZlcnNpb246CiAgICAgICAgbWVz
c2FnZXMgPSBtZXNzYWdlcyArICJZb3VyIHZlcnNpb24gb2YgbG9jYWwuY29uZiB3YXMgZ2VuZXJh
dGVkIGZyb20gYW4gb2xkZXIgdmVyc2lvbiBvZiBsb2NhbC5jb25mLnNhbXBsZSBhbmQgdGhlcmUg
aGF2ZSBiZWVuIHVwZGF0ZXMgbWFkZSB0byB0aGlzIGZpbGUuIFBsZWFzZSBjb21wYXJlIHRoZSB0
d28gZmlsZXMgYW5kIG1lcmdlIGFueSBjaGFuZ2VzIGJlZm9yZSBjb250aW51aW5nLlxuTWF0Y2hp
bmcgdGhlIHZlcnNpb24gbnVtYmVycyB3aWxsIHJlbW92ZSB0aGlzIG1lc3NhZ2UuXG5cIm1lbGQg
Y29uZi9sb2NhbC5jb25mIC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRhbm55LTguMC9tZXRhKi9j
b25mL2xvY2FsLmNvbmYuc2FtcGxlXCIgaXMgYSBnb29kIHdheSB0byB2aXN1YWxpc2UgdGhlIGNo
YW5nZXMuXG4iCgogICAgIyBDaGVjayBiYmxheWVycy5jb25mIGlzIHZhbGlkCiAgICBjdXJyZW50
X2xjb25mID0gc2FuaXR5X2RhdGEuZ2V0VmFyKCdMQ09ORl9WRVJTSU9OJywgVHJ1ZSkKICAgIGxj
b25mX3ZlcnNpb24gPSBzYW5pdHlfZGF0YS5nZXRWYXIoJ0xBWUVSX0NPTkZfVkVSU0lPTicsIFRy
dWUpCiAgICBpZiBjdXJyZW50X2xjb25mICE9IGxjb25mX3ZlcnNpb246CiAgICAgICAgdHJ5Ogog
ICAgICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoImNoZWNrX2JibGF5ZXJzX2NvbmYiLCBzYW5p
dHlfZGF0YSkKICAgICAgICAgICAgaWYgc2FuaXR5X2RhdGEuZ2V0VmFyKCJTQU5JVFlfVVNFX0VW
RU5UUyIsIFRydWUpID09ICIxIjoKICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZl
bnQuU2FuaXR5Q2hlY2tGYWlsZWQoIllvdXIgY29uZi9iYmxheWVycy5jb25mIGhhcyBiZWVuIGF1
dG9tYXRpY2FsbHkgdXBkYXRlZC4gUGxlYXNlIGNsb3NlIGFuZCByZS1ydW4uIiksIHNhbml0eV9k
YXRhKQogICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAg
ICAgICBiYi5ub3RlKCJZb3VyIGNvbmYvYmJsYXllcnMuY29uZiBoYXMgYmVlbiBhdXRvbWF0aWNh
bGx5IHVwZGF0ZWQuIFBsZWFzZSByZS1ydW4gJXMuIiAlIG9zLnBhdGguYmFzZW5hbWUoc3lzLmFy
Z3ZbMF0pKQogICAgICAgICAgICAgICAgc3lzLmV4aXQoMCkKICAgICAgICBleGNlcHQgRXhjZXB0
aW9uOgogICAgICAgICAgICBtZXNzYWdlcyA9IG1lc3NhZ2VzICsgIllvdXIgdmVyc2lvbiBvZiBi
YmxheWVycy5jb25mIHdhcyBnZW5lcmF0ZWQgZnJvbSBhbiBvbGRlciB2ZXJzaW9uIG9mIGJibGF5
ZXJzLmNvbmYuc2FtcGxlIGFuZCB0aGVyZSBoYXZlIGJlZW4gdXBkYXRlcyBtYWRlIHRvIHRoaXMg
ZmlsZS4gUGxlYXNlIGNvbXBhcmUgdGhlIHR3byBmaWxlcyBhbmQgbWVyZ2UgYW55IGNoYW5nZXMg
YmVmb3JlIGNvbnRpbnVpbmcuXG5NYXRjaGluZyB0aGUgdmVyc2lvbiBudW1iZXJzIHdpbGwgcmVt
b3ZlIHRoaXMgbWVzc2FnZS5cblwibWVsZCBjb25mL2JibGF5ZXJzLmNvbmYgL2hvbWUvbWlzaGFs
L3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEqL2NvbmYvYmJsYXllcnMuY29uZi5zYW1wbGVcIiBp
cyBhIGdvb2Qgd2F5IHRvIHZpc3VhbGlzZSB0aGUgY2hhbmdlcy5cbiIKCiAgICAjIElmIHdlIGhh
dmUgYSBzaXRlLmNvbmYsIGNoZWNrIGl0J3MgdmFsaWQKICAgIGlmIGNoZWNrX2NvbmZfZXhpc3Rz
KCJjb25mL3NpdGUuY29uZiIsIHNhbml0eV9kYXRhKToKICAgICAgICBjdXJyZW50X3Njb25mID0g
c2FuaXR5X2RhdGEuZ2V0VmFyKCdTQ09ORl9WRVJTSU9OJywgVHJ1ZSkKICAgICAgICBzY29uZl92
ZXJzaW9uID0gc2FuaXR5X2RhdGEuZ2V0VmFyKCdTSVRFX0NPTkZfVkVSU0lPTicsIFRydWUpCiAg
ICAgICAgaWYgY3VycmVudF9zY29uZiAhPSBzY29uZl92ZXJzaW9uOgogICAgICAgICAgICBtZXNz
YWdlcyA9IG1lc3NhZ2VzICsgIllvdXIgdmVyc2lvbiBvZiBzaXRlLmNvbmYgd2FzIGdlbmVyYXRl
ZCBmcm9tIGFuIG9sZGVyIHZlcnNpb24gb2Ygc2l0ZS5jb25mLnNhbXBsZSBhbmQgdGhlcmUgaGF2
ZSBiZWVuIHVwZGF0ZXMgbWFkZSB0byB0aGlzIGZpbGUuIFBsZWFzZSBjb21wYXJlIHRoZSB0d28g
ZmlsZXMgYW5kIG1lcmdlIGFueSBjaGFuZ2VzIGJlZm9yZSBjb250aW51aW5nLlxuTWF0Y2hpbmcg
dGhlIHZlcnNpb24gbnVtYmVycyB3aWxsIHJlbW92ZSB0aGlzIG1lc3NhZ2UuXG5cIm1lbGQgY29u
Zi9zaXRlLmNvbmYgL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL21ldGEqL2NvbmYv
c2l0ZS5jb25mLnNhbXBsZVwiIGlzIGEgZ29vZCB3YXkgdG8gdmlzdWFsaXNlIHRoZSBjaGFuZ2Vz
LlxuIgoKICAgIGFzc3VtZV9wcm92aWRlZCA9IHNhbml0eV9kYXRhLmdldFZhcignQVNTVU1FX1BS
T1ZJREVEJywgVHJ1ZSkuc3BsaXQoKQogICAgIyBDaGVjayB1c2VyIGRvZXNuJ3QgaGF2ZSBBU1NV
TUVfUFJPVklERUQgPSBpbnN0ZWFkIG9mICs9IGluIGxvY2FsLmNvbmYKICAgIGlmICJkaWZmc3Rh
dC1uYXRpdmUiIG5vdCBpbiBhc3N1bWVfcHJvdmlkZWQ6CiAgICAgICAgbWVzc2FnZXMgPSBtZXNz
YWdlcyArICdQbGVhc2UgdXNlIEFTU1VNRV9QUk9WSURFRCArPSwgbm90IEFTU1VNRV9QUk9WSURF
RCA9IGluIHlvdXIgbG9jYWwuY29uZlxuJwoKICAgICMgQ2hlY2sgdGhhdCBETF9ESVIgaXMgc2V0
LCBleGlzdHMgYW5kIGlzIHdyaXRhYmxlLiBJbiB0aGVvcnksIHdlIHNob3VsZCBuZXZlciBldmVu
IGhpdCB0aGUgY2hlY2sgaWYgRExfRElSIGlzbid0CiAgICAjIHNldCwgc2luY2Ugc28gbXVjaCBy
ZWxpZXMgb24gaXQgYmVpbmcgc2V0LgogICAgZGxkaXIgPSBzYW5pdHlfZGF0YS5nZXRWYXIoJ0RM
X0RJUicsIFRydWUpCiAgICBpZiBub3QgZGxkaXI6CiAgICAgICAgbWVzc2FnZXMgPSBtZXNzYWdl
cyArICJETF9ESVIgaXMgbm90IHNldC4gWW91ciBlbnZpcm9ubWVudCBpcyBtaXNjb25maWd1cmVk
LCBjaGVjayB0aGF0IERMX0RJUiBpcyBzZXQsIGFuZCBpZiB0aGUgZGlyZWN0b3J5IGV4aXN0cywg
dGhhdCBpdCBpcyB3cml0YWJsZS4gXG4iCiAgICBpZiBvcy5wYXRoLmV4aXN0cyhkbGRpcikgYW5k
IG5vdCBvcy5hY2Nlc3MoZGxkaXIsIG9zLldfT0spOgogICAgICAgIG1lc3NhZ2VzID0gbWVzc2Fn
ZXMgKyAiRExfRElSOiAlcyBleGlzdHMgYnV0IHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUgd3Jp
dGUgYWNjZXNzIHRvIGl0LiBcbiIgJSBkbGRpcgoKICAgICMgQ2hlY2sgdGhhdCB0aGUgRElTVFJP
IGlzIHZhbGlkLCBpZiBzZXQKICAgICMgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCBESVNUUk8g
cmVuYW1pbmcgRElTVFJPCiAgICBkaXN0cm8gPSBzYW5pdHlfZGF0YS5nZXRWYXIoJ0RJU1RSTycs
IFRydWUpCiAgICBpZiBkaXN0cm86CiAgICAgICAgaWYgbm90ICggY2hlY2tfY29uZl9leGlzdHMo
ImNvbmYvZGlzdHJvL3Bva3kuY29uZiIsIHNhbml0eV9kYXRhKSBvciBjaGVja19jb25mX2V4aXN0
cygiY29uZi9kaXN0cm8vaW5jbHVkZS9wb2t5LmluYyIsIHNhbml0eV9kYXRhKSApOgogICAgICAg
ICAgICBtZXNzYWdlcyA9IG1lc3NhZ2VzICsgIkRJU1RSTyAnJXMnIG5vdCBmb3VuZC4gUGxlYXNl
IHNldCBhIHZhbGlkIERJU1RSTyBpbiB5b3VyIGxvY2FsLmNvbmZcbiIgJSBzYW5pdHlfZGF0YS5n
ZXRWYXIoIkRJU1RSTyIsIFRydWUgKQoKICAgIG1pc3NpbmcgPSAiIgoKICAgIGlmIG5vdCBjaGVj
a19hcHBfZXhpc3RzKCJtYWtlIiwgc2FuaXR5X2RhdGEpOgogICAgICAgIG1pc3NpbmcgPSBtaXNz
aW5nICsgIkdOVSBtYWtlLCIKCiAgICBpZiBub3QgY2hlY2tfYXBwX2V4aXN0cygnZ2NjJywgc2Fu
aXR5X2RhdGEpOgogICAgICAgIG1pc3NpbmcgPSBtaXNzaW5nICsgIkMgQ29tcGlsZXIgKCVzZ2Nj
KSwiICUgc2FuaXR5X2RhdGEuZ2V0VmFyKCJCVUlMRF9QUkVGSVgiLCBUcnVlKQoKICAgIGlmIG5v
dCBjaGVja19hcHBfZXhpc3RzKCdnKysnLCBzYW5pdHlfZGF0YSk6CiAgICAgICAgbWlzc2luZyA9
IG1pc3NpbmcgKyAiQysrIENvbXBpbGVyICglc2crKyksIiAlIHNhbml0eV9kYXRhLmdldFZhcigi
QlVJTERfUFJFRklYIiwgVHJ1ZSkKCiAgICByZXF1aXJlZF91dGlsaXRpZXMgPSBzYW5pdHlfZGF0
YS5nZXRWYXIoJ1NBTklUWV9SRVFVSVJFRF9VVElMSVRJRVMnLCBUcnVlKQoKICAgIGlmICJxZW11
LW5hdGl2ZSIgaW4gYXNzdW1lX3Byb3ZpZGVkOgogICAgICAgIGlmIG5vdCBjaGVja19hcHBfZXhp
c3RzKCJxZW11LWFybSIsIHNhbml0eV9kYXRhKToKICAgICAgICAgICAgbWVzc2FnZXMgPSBtZXNz
YWdlcyArICJxZW11LW5hdGl2ZSB3YXMgaW4gQVNTVU1FX1BST1ZJREVEIGJ1dCB0aGUgUUVNVSBi
aW5hcmllcyAocWVtdS1hcm0pIGNhbid0IGJlIGZvdW5kIGluIFBBVEgiCgogICAgcGF0aHMgPSBz
YW5pdHlfZGF0YS5nZXRWYXIoJ1BBVEgnLCBUcnVlKS5zcGxpdCgiOiIpCiAgICBpZiAiLiIgaW4g
cGF0aHMgb3IgIiIgaW4gcGF0aHM6CiAgICAgICAgbWVzc2FnZXMgPSBtZXNzYWdlcyArICJQQVRI
IGNvbnRhaW5zICcuJyBvciAnJyAoZW1wdHkgZWxlbWVudCksIHdoaWNoIHdpbGwgYnJlYWsgdGhl
IGJ1aWxkLCBwbGVhc2UgcmVtb3ZlIHRoaXMuXG4iCiAgICAgICAgbWVzc2FnZXMgPSBtZXNzYWdl
cyArICJQYXJzZWQgUEFUSCBpcyAiICsgc3RyKHBhdGhzKSArICJcbiIKCiAgICBiYnBhdGhzID0g
c2FuaXR5X2RhdGEuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKS5zcGxpdCgiOiIpCiAgICBpZiAiLiIg
aW4gYmJwYXRocyBvciAiIiBpbiBiYnBhdGhzOgogICAgICAgICMgVE9ETzogY2hhbmdlIHRoZSBm
b2xsb3dpbmcgbWVzc2FnZSB0byBmYXRhbCB3aGVuIGFsbCBCQlBBVEggaXNzdWVzCiAgICAgICAg
IyBhcmUgZml4ZWQKICAgICAgICBiYi53YXJuKCJCQlBBVEggcmVmZXJlbmNlcyB0aGUgY3VycmVu
dCBkaXJlY3RvcnksIGVpdGhlciB0aHJvdWdoICIgICAgXAogICAgICAgICAgICAgICAgImFuIGVt
cHR5IGVudHJ5LCBvciBhICcuJy5cblx0IFRoaXMgaXMgdW5zYWZlIGFuZCBtZWFucyB5b3VyICJc
CiAgICAgICAgICAgICAgICAibGF5ZXIgY29uZmlndXJhdGlvbiBpcyBhZGRpbmcgZW1wdHkgZWxl
bWVudHMgdG8gQkJQQVRILlxuXHQgIlwKICAgICAgICAgICAgICAgICJQbGVhc2UgY2hlY2sgeW91
ciBsYXllci5jb25mIGZpbGVzIGFuZCBvdGhlciBCQlBBVEggIiAgICAgICAgXAogICAgICAgICAg
ICAgICAgInNldHRpbmdzIHRvIHJlbW92ZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSAi
ICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlcy4iKTsKICAgICAgICBiYi53
YXJuKCJQYXJzZWQgQkJQQVRIIGlzIiArIHN0cihiYnBhdGhzKSk7CgogICAgaWYgc2FuaXR5X2Rh
dGEuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpID09ICJhcm0iOgogICAgICAgICMgVGhpcyBw
YXRoIGlzIG5vIGxvbmdlciB1c2VyLXJlYWRhYmxlIGluIG1vZGVybiAodmVyeSByZWNlbnQpIExp
bnV4CiAgICAgICAgdHJ5OgogICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygiL3Byb2Mvc3lz
L3ZtL21tYXBfbWluX2FkZHIiKToKICAgICAgICAgICAgICAgIGYgPSBvcGVuKCIvcHJvYy9zeXMv
dm0vbW1hcF9taW5fYWRkciIsICJyIikKICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAg
ICAgICAgICBpZiAoaW50KGYucmVhZCgpLnN0cmlwKCkpID4gNjU1MzYpOgogICAgICAgICAgICAg
ICAgICAgICAgICBtZXNzYWdlcyA9IG1lc3NhZ2VzICsgIi9wcm9jL3N5cy92bS9tbWFwX21pbl9h
ZGRyIGlzIG5vdCA8PSA2NTUzNi4gVGhpcyB3aWxsIGNhdXNlIHByb2JsZW1zIHdpdGggcWVtdSBz
byBwbGVhc2UgZml4IHRoZSB2YWx1ZSAoYXMgcm9vdCkuXG5cblRvIGZpeCB0aGlzIGluIGxhdGVy
IHJlYm9vdHMsIHNldCB2bS5tbWFwX21pbl9hZGRyID0gNjU1MzYgaW4gL2V0Yy9zeXNjdGwuY29u
Zi5cbiIKICAgICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgICAgZi5jbG9z
ZSgpCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICBwYXNzCgogICAgZm9yIHV0aWwgaW4gcmVx
dWlyZWRfdXRpbGl0aWVzLnNwbGl0KCk6CiAgICAgICAgaWYgbm90IGNoZWNrX2FwcF9leGlzdHMo
IHV0aWwsIHNhbml0eV9kYXRhICk6CiAgICAgICAgICAgIG1pc3NpbmcgPSBtaXNzaW5nICsgIiVz
LCIgJSB1dGlsCgogICAgaWYgbWlzc2luZyAhPSAiIjoKICAgICAgICBtaXNzaW5nID0gbWlzc2lu
Zy5yc3RyaXAoJywnKQogICAgICAgIG1lc3NhZ2VzID0gbWVzc2FnZXMgKyAiUGxlYXNlIGluc3Rh
bGwgdGhlIGZvbGxvd2luZyBtaXNzaW5nIHV0aWxpdGllczogJXNcbiIgJSBtaXNzaW5nCgogICAg
cHNldWRvX21zZyA9IGNoZWNrX3BzZXVkb193cmFwcGVyKCkKICAgIGlmIHBzZXVkb19tc2cgIT0g
IiI6CiAgICAgICAgbWVzc2FnZXMgPSBtZXNzYWdlcyArIHBzZXVkb19tc2cgKyAnXG4nCgogICAg
Y2hlY2tfc3VwcG9ydGVkX2Rpc3RybyhzYW5pdHlfZGF0YSkKICAgIGlmIG1hY2hpbmV2YWxpZDoK
ICAgICAgICB0b29sY2hhaW5fbXNnID0gY2hlY2tfdG9vbGNoYWluKHNhbml0eV9kYXRhKQogICAg
ICAgIGlmIHRvb2xjaGFpbl9tc2cgIT0gIiI6CiAgICAgICAgICAgIG1lc3NhZ2VzID0gbWVzc2Fn
ZXMgKyB0b29sY2hhaW5fbXNnICsgJ1xuJwoKICAgICMgQ2hlY2sgaWYgRElTUExBWSBpcyBzZXQg
aWYgSU1BR0VURVNUIGlzIHNldAogICAgaWYgbm90IHNhbml0eV9kYXRhLmdldFZhciggJ0RJU1BM
QVknLCBUcnVlICkgYW5kIHNhbml0eV9kYXRhLmdldFZhciggJ0lNQUdFVEVTVCcsIFRydWUgKSA9
PSAncWVtdSc6CiAgICAgICAgbWVzc2FnZXMgPSBtZXNzYWdlcyArICdxZW11aW1hZ2V0ZXN0IG5l
ZWRzIGEgWCBkZXNrdG9wIHRvIHN0YXJ0IHFlbXUsIHBsZWFzZSBzZXQgRElTUExBWSBjb3JyZWN0
bHkgKGUuZy4gRElTUExBWT06MS4wKVxuJwoKICAgIG9tYXNrID0gb3MudW1hc2soMDIyKQogICAg
aWYgb21hc2sgJiAwNzU1OgogICAgICAgIG1lc3NhZ2VzID0gbWVzc2FnZXMgKyAiUGxlYXNlIHVz
ZSBhIHVtYXNrIHdoaWNoIGFsbG93cyBhK3J4IGFuZCB1K3J3eFxuIgogICAgb3MudW1hc2sob21h
c2spCgogICAgb2VzX2JiX2NvbmYgPSBzYW5pdHlfZGF0YS5nZXRWYXIoICdPRVNfQklUQkFLRV9D
T05GJywgVHJ1ZSkKICAgIGlmIG5vdCBvZXNfYmJfY29uZjoKICAgICAgICBtZXNzYWdlcyA9IG1l
c3NhZ2VzICsgJ1lvdSBkbyBub3QgaW5jbHVkZSB0aGUgT3BlbkVtYmVkZGVkIHZlcnNpb24gb2Yg
Y29uZi9iaXRiYWtlLmNvbmYuIFRoaXMgbWVhbnMgeW91ciBlbnZpcm9ubWVudCBpcyBtaXNjb25m
aWd1cmVkLCBpbiBwYXJ0aWN1bGFyIGNoZWNrIEJCUEFUSC5cbicKCiAgICBub2xpYnMgPSBzYW5p
dHlfZGF0YS5nZXRWYXIoJ05PMzJMSUJTJywgVHJ1ZSkKICAgIGlmIG5vdCBub2xpYnM6CiAgICAg
ICAgbGliMzJwYXRoID0gJy9saWInCiAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoJy9saWI2NCcp
IGFuZCAoIG9zLnBhdGguaXNsaW5rKCcvbGliNjQnKSBvciBvcy5wYXRoLmlzbGluaygnL2xpYicp
ICk6CiAgICAgICAgICAgbGliMzJwYXRoID0gJy9saWIzMicKCiAgICAgICAgaWYgb3MucGF0aC5l
eGlzdHMoJyVzL2xpYmMuc28uNicgJSBsaWIzMnBhdGgpIGFuZCBub3Qgb3MucGF0aC5leGlzdHMo
Jy91c3IvaW5jbHVkZS9nbnUvc3R1YnMtMzIuaCcpOgogICAgICAgICAgICBtZXNzYWdlcyA9IG1l
c3NhZ2VzICsgIllvdSBoYXZlIGEgMzItYml0IGxpYmMsIGJ1dCBubyAzMi1iaXQgaGVhZGVycy4g
IFlvdSBtdXN0IGluc3RhbGwgdGhlIDMyLWJpdCBsaWJjIGhlYWRlcnMuXG4iCgogICAgdG1wZGly
ID0gc2FuaXR5X2RhdGEuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQogICAgc3N0YXRlX2RpciA9IHNh
bml0eV9kYXRhLmdldFZhcignU1NUQVRFX0RJUicsIFRydWUpCgogICAgIyBUaGUgbGVuZ3RoIG9m
IHRtcGRpciBjYW4ndCBiZSBsb25nZXIgdGhhbiA0MTAKICAgIG1lc3NhZ2VzID0gbWVzc2FnZXMg
KyBjaGVja19wYXRoX2xlbmd0aCh0bXBkaXIsICJUTVBESVIiLCA0MTApCgogICAgIyBDaGVjayBz
YXZlZCBzYW5pdHkgaW5mbwogICAgbGFzdF9zYW5pdHlfdmVyc2lvbiA9IDAKICAgIGxhc3RfdG1w
ZGlyID0gIiIKICAgIGxhc3Rfc3N0YXRlX2RpciA9ICIiCiAgICBzYW5pdHl2ZXJmaWxlID0gJ2Nv
bmYvc2FuaXR5X2luZm8nCiAgICBpZiBvcy5wYXRoLmV4aXN0cyhzYW5pdHl2ZXJmaWxlKToKICAg
ICAgICBmID0gZmlsZShzYW5pdHl2ZXJmaWxlLCAncicpCiAgICAgICAgZm9yIGxpbmUgaW4gZjoK
ICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdTQU5JVFlfVkVSU0lPTicpOgogICAgICAg
ICAgICAgICAgbGFzdF9zYW5pdHlfdmVyc2lvbiA9IGludChsaW5lLnNwbGl0KClbMV0pCiAgICAg
ICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnVE1QRElSJyk6CiAgICAgICAgICAgICAgICBsYXN0
X3RtcGRpciA9IGxpbmUuc3BsaXQoKVsxXQogICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgo
J1NTVEFURV9ESVInKToKICAgICAgICAgICAgICAgIGxhc3Rfc3N0YXRlX2RpciA9IGxpbmUuc3Bs
aXQoKVsxXQoKICAgIHNhbml0eV92ZXJzaW9uID0gaW50KHNhbml0eV9kYXRhLmdldFZhcignU0FO
SVRZX1ZFUlNJT04nLCBUcnVlKSBvciAxKQogICAgbmV0d29ya19lcnJvciA9IEZhbHNlCiAgICBp
ZiBsYXN0X3Nhbml0eV92ZXJzaW9uIDwgc2FuaXR5X3ZlcnNpb246CiAgICAgICAgbWVzc2FnZXMg
PSBtZXNzYWdlcyArIGNoZWNrX3Nhbml0eV92ZXJzaW9uX2NoYW5nZShzYW5pdHlfZGF0YSkKICAg
ICAgICBlcnIsIG5ldHdvcmtfZXJyb3IgPSBjaGVja19zYW5pdHlfdG1wZGlyX2NoYW5nZSh0bXBk
aXIsIHNhbml0eV9kYXRhKQogICAgICAgIG1lc3NhZ2VzID0gbWVzc2FnZXMgKyBlcnIKICAgICAg
ICBtZXNzYWdlcyA9IG1lc3NhZ2VzICsgY2hlY2tfc2FuaXR5X3NzdGF0ZV9kaXJfY2hhbmdlKHNz
dGF0ZV9kaXIsIHNhbml0eV9kYXRhKQogICAgZWxzZToKICAgICAgICBpZiBsYXN0X3RtcGRpciAh
PSB0bXBkaXI6CiAgICAgICAgICAgIGVyciwgbmV0d29ya19lcnJvciA9IGNoZWNrX3Nhbml0eV90
bXBkaXJfY2hhbmdlKHRtcGRpciwgc2FuaXR5X2RhdGEpCiAgICAgICAgICAgIG1lc3NhZ2VzID0g
bWVzc2FnZXMgKyBlcnIKICAgICAgICBpZiBsYXN0X3NzdGF0ZV9kaXIgIT0gc3N0YXRlX2RpcjoK
ICAgICAgICAgICAgbWVzc2FnZXMgPSBtZXNzYWdlcyArIGNoZWNrX3Nhbml0eV9zc3RhdGVfZGly
X2NoYW5nZShzc3RhdGVfZGlyLCBzYW5pdHlfZGF0YSkKICAgIGlmIG9zLnBhdGguZXhpc3RzKCJj
b25mIikgYW5kIG5vdCBtZXNzYWdlczoKICAgICAgICBmID0gZmlsZShzYW5pdHl2ZXJmaWxlLCAn
dycpCiAgICAgICAgZi53cml0ZSgiU0FOSVRZX1ZFUlNJT04gJXNcbiIgJSBzYW5pdHlfdmVyc2lv
bikKICAgICAgICBmLndyaXRlKCJUTVBESVIgJXNcbiIgJSB0bXBkaXIpCiAgICAgICAgZi53cml0
ZSgiU1NUQVRFX0RJUiAlc1xuIiAlIHNzdGF0ZV9kaXIpCgogICAgIwogICAgIyBDaGVjayB0aGF0
IFRNUERJUiBoYXNuJ3QgY2hhbmdlZCBsb2NhdGlvbiBzaW5jZSB0aGUgbGFzdCB0aW1lIHdlIHdl
cmUgcnVuCiAgICAjCiAgICBjaGVja2ZpbGUgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAic2F2ZWRf
dG1wZGlyIikKICAgIGlmIG9zLnBhdGguZXhpc3RzKGNoZWNrZmlsZSk6CiAgICAgICAgZiA9IGZp
bGUoY2hlY2tmaWxlLCAiciIpCiAgICAgICAgc2F2ZWRfdG1wZGlyID0gZi5yZWFkKCkuc3RyaXAo
KQogICAgICAgIGlmIChzYXZlZF90bXBkaXIgIT0gdG1wZGlyKToKICAgICAgICAgICAgbWVzc2Fn
ZXMgPSBtZXNzYWdlcyArICJFcnJvciwgVE1QRElSIGhhcyBjaGFuZ2VkIGxvY2F0aW9uLiBZb3Ug
bmVlZCB0byBlaXRoZXIgbW92ZSBpdCBiYWNrIHRvICVzIG9yIHJlYnVpbGRcbiIgJSBzYXZlZF90
bXBkaXIKICAgIGVsc2U6CiAgICAgICAgZiA9IGZpbGUoY2hlY2tmaWxlLCAidyIpCiAgICAgICAg
Zi53cml0ZSh0bXBkaXIpCiAgICBmLmNsb3NlKCkKCiAgICAjCiAgICAjIENoZWNrIHRoZSAnQUJJ
JyBvZiBUTVBESVIKICAgICMKICAgIGN1cnJlbnRfYWJpID0gc2FuaXR5X2RhdGEuZ2V0VmFyKCdP
RUxBWU9VVF9BQkknLCBUcnVlKQogICAgYWJpZmlsZSA9IHNhbml0eV9kYXRhLmdldFZhcignU0FO
SVRZX0FCSUZJTEUnLCBUcnVlKQogICAgaWYgb3MucGF0aC5leGlzdHMoYWJpZmlsZSk6CiAgICAg
ICAgZiA9IGZpbGUoYWJpZmlsZSwgInIiKQogICAgICAgIGFiaSA9IGYucmVhZCgpLnN0cmlwKCkK
ICAgICAgICBpZiBub3QgYWJpLmlzZGlnaXQoKToKICAgICAgICAgICAgZiA9IGZpbGUoYWJpZmls
ZSwgInciKQogICAgICAgICAgICBmLndyaXRlKGN1cnJlbnRfYWJpKQogICAgICAgIGVsaWYgYWJp
ID09ICIyIiBhbmQgY3VycmVudF9hYmkgPT0gIjMiOgogICAgICAgICAgICBiYi5ub3RlKCJDb252
ZXJ0aW5nIHN0YWdpbmcgZnJvbSBsYXlvdXQgdmVyc2lvbiAyIHRvIGxheW91dCB2ZXJzaW9uIDMi
KQogICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoc2FuaXR5X2RhdGEuZXhwYW5kKCJtdiAvaG9t
ZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvc3RhZ2luZyAvaG9t
ZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvc3lzcm9vdHMiKSwg
c2hlbGw9VHJ1ZSkKICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKHNhbml0eV9kYXRhLmV4cGFu
ZCgibG4gLXMgc3lzcm9vdHMgL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxk
LWZyaTIvdG1wL3N0YWdpbmciKSwgc2hlbGw9VHJ1ZSkKICAgICAgICAgICAgc3VicHJvY2Vzcy5j
YWxsKHNhbml0eV9kYXRhLmV4cGFuZCgiY2QgL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnkt
OC4wL2J1aWxkLWZyaTIvdG1wL3N0YW1wczsgZm9yIGkgaW4gKi8qZG9fcG9wdWxhdGVfc3RhZ2lu
ZzsgZG8gbmV3PWBlY2hvICRpIHwgc2VkIC1lICdzL2RvX3BvcHVsYXRlX3N0YWdpbmcvZG9fcG9w
dWxhdGVfc3lzcm9vdC8nYDsgbXYgJGkgJG5ldzsgZG9uZSIpLCBzaGVsbD1UcnVlKQogICAgICAg
ICAgICBmID0gZmlsZShhYmlmaWxlLCAidyIpCiAgICAgICAgICAgIGYud3JpdGUoY3VycmVudF9h
YmkpCiAgICAgICAgZWxpZiBhYmkgPT0gIjMiIGFuZCBjdXJyZW50X2FiaSA9PSAiNCI6CiAgICAg
ICAgICAgIGJiLm5vdGUoIkNvbnZlcnRpbmcgc3RhZ2luZyBsYXlvdXQgZnJvbSB2ZXJzaW9uIDMg
dG8gbGF5b3V0IHZlcnNpb24gNCIpCiAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNhbml0
eV9kYXRhLmV4cGFuZCgiL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZy
aTIvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvYmluL2NvcmUyLXBva3ktbGludXgiKSk6
CiAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoc2FuaXR5X2RhdGEuZXhwYW5kKCJtdiAv
aG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvc3lzcm9vdHMv
eDg2XzY0LWxpbnV4L3Vzci9iaW4vY29yZTItcG9reS1saW51eCAvaG9tZS9taXNoYWwveW9jdG8v
cG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAvc3lzcm9vdHMvZnJpMi1ub2VtZ2QvdXNyL2Jp
bi9jcm9zc3NjcmlwdHMiKSwgc2hlbGw9VHJ1ZSkKICAgICAgICAgICAgICAgIHN1YnByb2Nlc3Mu
Y2FsbChzYW5pdHlfZGF0YS5leHBhbmQoImxuIC1zIC9ob21lL21pc2hhbC95b2N0by9wb2t5LWRh
bm55LTguMC9idWlsZC1mcmkyL3RtcC9zeXNyb290cy9mcmkyLW5vZW1nZC91c3IvYmluL2Nyb3Nz
c2NyaXB0cyAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQtZnJpMi90bXAv
c3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9iaW4vY29yZTItcG9reS1saW51eCIpLCBzaGVsbD1U
cnVlKQoKICAgICAgICAgICAgZiA9IGZpbGUoYWJpZmlsZSwgInciKQogICAgICAgICAgICBmLndy
aXRlKGN1cnJlbnRfYWJpKQogICAgICAgIGVsaWYgYWJpID09ICI0IjoKICAgICAgICAgICAgbWVz
c2FnZXMgPSBtZXNzYWdlcyArICJTdGFnaW5nIGxheW91dCBoYXMgY2hhbmdlZC4gVGhlIGNyb3Nz
IGRpcmVjdG9yeSBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCBjcm9zcyBwYWNrYWdlcyBhcmUgbm93
IGJ1aWx0IHVuZGVyIHRoZSBuYXRpdmUgc3lzcm9vdC5cblRoaXMgcmVxdWlyZXMgYSByZWJ1aWxk
LlxuIgogICAgICAgIGVsaWYgYWJpID09ICI1IiBhbmQgY3VycmVudF9hYmkgPT0gIjYiOgogICAg
ICAgICAgICBiYi5ub3RlKCJDb252ZXJ0aW5nIHN0YWdpbmcgbGF5b3V0IGZyb20gdmVyc2lvbiA1
IHRvIGxheW91dCB2ZXJzaW9uIDYiKQogICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoc2FuaXR5
X2RhdGEuZXhwYW5kKCJtdiAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVpbGQt
ZnJpMi90bXAvcHN0YWdlbG9ncyAvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVp
bGQtZnJpMi90bXAvc3N0YXRlLWNvbnRyb2wiKSwgc2hlbGw9VHJ1ZSkKICAgICAgICAgICAgZiA9
IGZpbGUoYWJpZmlsZSwgInciKQogICAgICAgICAgICBmLndyaXRlKGN1cnJlbnRfYWJpKQogICAg
ICAgIGVsaWYgYWJpID09ICI3IiBhbmQgY3VycmVudF9hYmkgPT0gIjgiOgogICAgICAgICAgICBt
ZXNzYWdlcyA9IG1lc3NhZ2VzICsgIllvdXIgY29uZmlndXJhdGlvbiBpcyB1c2luZyBzdGFtcCBm
aWxlcyBpbmNsdWRpbmcgdGhlIHNzdGF0ZSBoYXNoIGJ1dCB5b3VyIGJ1aWxkIGRpcmVjdG9yeSB3
YXMgYnVpbHQgd2l0aCBzdGFtcCBmaWxlcyB0aGF0IGRvIG5vdCBpbmNsdWRlIHRoaXMuXG5UbyBj
b250aW51ZSwgZWl0aGVyIHJlYnVpbGQgb3Igc3dpdGNoIGJhY2sgdG8gdGhlIE9FQmFzaWMgc2ln
bmF0dXJlIGhhbmRsZXIgd2l0aCBCQl9TSUdOQVRVUkVfSEFORExFUiA9ICdPRUJhc2ljJy5cbiIK
ICAgICAgICBlbGlmIChhYmkgIT0gY3VycmVudF9hYmkpOgogICAgICAgICAgICAjIENvZGUgdG8g
Y29udmVydCBmcm9tIG9uZSBBQkkgdG8gYW5vdGhlciBjb3VsZCBnbyBoZXJlIGlmIHBvc3NpYmxl
LgogICAgICAgICAgICBtZXNzYWdlcyA9IG1lc3NhZ2VzICsgIkVycm9yLCBUTVBESVIgaGFzIGNo
YW5nZWQgaXRzIGxheW91dCB2ZXJzaW9uIG51bWJlciAoJXMgdG8gJXMpIGFuZCB5b3UgbmVlZCB0
byBlaXRoZXIgcmVidWlsZCwgcmV2ZXJ0IG9yIGFkanVzdCBpdCBhdCB5b3VyIG93biByaXNrLlxu
IiAlIChhYmksIGN1cnJlbnRfYWJpKQogICAgZWxzZToKICAgICAgICBmID0gZmlsZShhYmlmaWxl
LCAidyIpCiAgICAgICAgZi53cml0ZShjdXJyZW50X2FiaSkKICAgIGYuY2xvc2UoKQoKICAgIG9l
cm9vdCA9IHNhbml0eV9kYXRhLmdldFZhcignQ09SRUJBU0UnKQogICAgaWYgb2Vyb290LmZpbmQg
KCcrJykgIT0gLTE6CiAgICAgICAgbWVzc2FnZXMgPSBtZXNzYWdlcyArICJFcnJvciwgeW91IGhh
dmUgYW4gaW52YWxpZCBjaGFyYWN0ZXIgKCspIGluIHlvdXIgQ09SRUJBU0UgZGlyZWN0b3J5IHBh
dGguIFBsZWFzZSBtb3ZlIHRoZSBpbnN0YWxsYXRpb24gdG8gYSBkaXJlY3Rvcnkgd2hpY2ggZG9l
c24ndCBpbmNsdWRlIGEgKy4iCiAgICBlbGlmIG9lcm9vdC5maW5kICgnICcpICE9IC0xOgogICAg
ICAgIG1lc3NhZ2VzID0gbWVzc2FnZXMgKyAiRXJyb3IsIHlvdSBoYXZlIGEgc3BhY2UgaW4geW91
ciBDT1JFQkFTRSBkaXJlY3RvcnkgcGF0aC4gUGxlYXNlIG1vdmUgdGhlIGluc3RhbGxhdGlvbiB0
byBhIGRpcmVjdG9yeSB3aGljaCBkb2Vzbid0IGluY2x1ZGUgYSBzcGFjZS4iCgogICAgaWYgbWVz
c2FnZXMgIT0gIiI6CiAgICAgICAgcmFpc2Vfc2FuaXR5X2Vycm9yKHNhbml0eV9kYXRhLmV4cGFu
ZChtZXNzYWdlcyksIHNhbml0eV9kYXRhLCBuZXR3b3JrX2Vycm9yKQp9CgoKcHl0aG9uIGNvcHlf
ZGF0YSAoKSB7CmRlZiBjb3B5X2RhdGEoZSk6CiAgICBzYW5pdHlfZGF0YSA9IGJiLmRhdGEuY3Jl
YXRlQ29weShlLmRhdGEpCiAgICBzYW5pdHlfZGF0YS5maW5hbGl6ZSgpCiAgICByZXR1cm4gc2Fu
aXR5X2RhdGEKfQoKCnB5dGhvbiBzc3RhdGVfaW5zdGFsbHBrZyAoKSB7CmRlZiBzc3RhdGVfaW5z
dGFsbHBrZyhzcywgZCk6CiAgICBpbXBvcnQgb2UucGF0aAogICAgaW1wb3J0IHN1YnByb2Nlc3MK
CiAgICBkZWYgcHJlcGRpcihkaXIpOgogICAgICAgICMgcmVtb3ZlIGRpciBpZiBpdCBleGlzdHMs
IGVuc3VyZSBhbnkgcGFyZW50IGRpcmVjdG9yaWVzIGRvIGV4aXN0CiAgICAgICAgaWYgb3MucGF0
aC5leGlzdHMoZGlyKToKICAgICAgICAgICAgb2UucGF0aC5yZW1vdmUoZGlyKQogICAgICAgIGJi
Lm1rZGlyaGllcihkaXIpCiAgICAgICAgb2UucGF0aC5yZW1vdmUoZGlyKQoKICAgIHNzdGF0ZWlu
c3QgPSBkLmV4cGFuZCgiL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZy
aTIvdG1wL3dvcmsvY29yZTItcG9reS1saW51eC9iYmxheWVycy0xLjAtcjAvc3N0YXRlLWluc3Rh
bGwtJXMvIiAlIHNzWyduYW1lJ10pCiAgICBzc3RhdGVmZXRjaCA9IGQuZ2V0VmFyKCdTU1RBVEVf
UEtHTkFNRScsIFRydWUpICsgJ18nICsgc3NbJ25hbWUnXSArICIudGd6IgogICAgc3N0YXRlcGtn
ID0gZC5nZXRWYXIoJ1NTVEFURV9QS0cnLCBUcnVlKSArICdfJyArIHNzWyduYW1lJ10gKyAiLnRn
eiIKCiAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3N0YXRlcGtnKToKICAgICAgICBwc3RhZ2lu
Z19mZXRjaChzc3RhdGVmZXRjaCwgc3N0YXRlcGtnLCBkKQoKICAgIGlmIG5vdCBvcy5wYXRoLmlz
ZmlsZShzc3RhdGVwa2cpOgogICAgICAgIGJiLm5vdGUoIlN0YWdpbmcgcGFja2FnZSAlcyBkb2Vz
IG5vdCBleGlzdCIgJSBzc3RhdGVwa2cpCiAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgc3N0YXRl
X2NsZWFuKHNzLCBkKQoKICAgIGQuc2V0VmFyKCdTU1RBVEVfSU5TVERJUicsIHNzdGF0ZWluc3Qp
CiAgICBkLnNldFZhcignU1NUQVRFX1BLRycsIHNzdGF0ZXBrZykKCiAgICBmb3IgcHJlaW5zdCBp
biAoZC5nZXRWYXIoJ1NTVEFURVBSRUlOU1RGVU5DUycsIFRydWUpIG9yICcnKS5zcGxpdCgpOgog
ICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhwcmVpbnN0LCBkKQoKICAgIGJiLmJ1aWxkLmV4ZWNf
ZnVuYygnc3N0YXRlX3VucGFja19wYWNrYWdlJywgZCkKCiAgICAjIEZpeHVwIGhhcmRjb2RlZCBw
YXRocwogICAgIwogICAgIyBOb3RlOiBUaGUgbG9naWMgYmVsb3cgbXVzdCBtYXRjaCB0aGUgcmV2
ZXJzZSBsb2dpYyBpbgogICAgIyBzc3RhdGVfaGFyZGNvZGVfcGF0aChkKQoKICAgIGZpeG1lZm4g
PSAgc3N0YXRlaW5zdCArICJmaXhtZXBhdGgiCiAgICBpZiBvcy5wYXRoLmlzZmlsZShmaXhtZWZu
KToKICAgICAgICBzdGFnaW5nID0gZC5nZXRWYXIoJ1NUQUdJTkdfRElSJywgVHJ1ZSkKICAgICAg
ICBzdGFnaW5nX3RhcmdldCA9IGQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9UQVJHRVQnLCBUcnVlKQog
ICAgICAgIHN0YWdpbmdfaG9zdCA9IGQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9IT1NUJywgVHJ1ZSkK
CiAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgb3IgYmIuZGF0
YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFz
cygnY3Jvc3NzZGsnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcy1jYW5hZGlh
bicsIGQpOgogICAgICAgICAgICBzc3RhdGVfc2VkX2NtZCA9ICJzZWQgLWkgLWUgJ3M6RklYTUVT
VEFHSU5HRElSOiVzOmcnIiAlIChzdGFnaW5nKQogICAgICAgIGVsaWYgYmIuZGF0YS5pbmhlcml0
c19jbGFzcygnY3Jvc3MnLCBkKToKICAgICAgICAgICAgc3N0YXRlX3NlZF9jbWQgPSAic2VkIC1p
IC1lICdzOkZJWE1FU1RBR0lOR0RJUlRBUkdFVDolczpnOyBzOkZJWE1FU1RBR0lOR0RJUjolczpn
JyIgJSAoc3RhZ2luZ190YXJnZXQsIHN0YWdpbmcpCiAgICAgICAgZWxzZToKICAgICAgICAgICAg
c3N0YXRlX3NlZF9jbWQgPSAic2VkIC1pIC1lICdzOkZJWE1FU1RBR0lOR0RJUkhPU1Q6JXM6Zyci
ICUgKHN0YWdpbmdfaG9zdCkKCiAgICAgICAgIyBBZGQgc3N0YXRlaW5zdCB0byBlYWNoIGZpbGVu
YW1lIGluIGZpeG1lcGF0aCwgdXNlIHhhcmdzIHRvIGVmZmljaWVudGx5IGNhbGwgc2VkCiAgICAg
ICAgc3N0YXRlX2hhcmRjb2RlX2NtZCA9ICJzZWQgLWUgJ3M6XjolczpnJyAlcyB8IHhhcmdzICVz
IiAlIChzc3RhdGVpbnN0LCBmaXhtZWZuLCBzc3RhdGVfc2VkX2NtZCkKCiAgICAgICAgcHJpbnQg
IlJlcGxhY2luZyBmaXhtZSBwYXRocyBpbiBzc3RhdGUgcGFja2FnZTogJXMiICUgKHNzdGF0ZV9o
YXJkY29kZV9jbWQpCiAgICAgICAgc3VicHJvY2Vzcy5jYWxsKHNzdGF0ZV9oYXJkY29kZV9jbWQs
IHNoZWxsPVRydWUpCgogICAgICAgICMgTmVlZCB0byByZW1vdmUgdGhpcyBvciB3ZSdkIGNvcHkg
aXQgaW50byB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhbmQgbWF5CiAgICAgICAgIyBjb25mbGljdCB3
aXRoIGFub3RoZXIgd3JpdGVyCiAgICAgICAgb3MucmVtb3ZlKGZpeG1lZm4pCgogICAgZm9yIHN0
YXRlIGluIHNzWydkaXJzJ106CiAgICAgICAgcHJlcGRpcihzdGF0ZVsxXSkKICAgICAgICBvcy5y
ZW5hbWUoc3N0YXRlaW5zdCArIHN0YXRlWzBdLCBzdGF0ZVsxXSkKICAgIHNzdGF0ZV9pbnN0YWxs
KHNzLCBkKQoKICAgIGZvciBwbGFpbiBpbiBzc1sncGxhaW5kaXJzJ106CiAgICAgICAgd29ya2Rp
ciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKICAgICAgICBzcmMgPSBzc3RhdGVpbnN0ICsg
Ii8iICsgcGxhaW4ucmVwbGFjZSh3b3JrZGlyLCAnJykKICAgICAgICBkZXN0ID0gcGxhaW4KICAg
ICAgICBiYi5ta2RpcmhpZXIoc3JjKQogICAgICAgIHByZXBkaXIoZGVzdCkKICAgICAgICBvcy5y
ZW5hbWUoc3JjLCBkZXN0KQoKICAgIHJldHVybiBUcnVlCn0KCgpweXRob24gZ2V0X3Byb2Nlc3Nf
Y3B1dGltZSAoKSB7CmRlZiBnZXRfcHJvY2Vzc19jcHV0aW1lKHBpZCk6CiAgICBmaWVsZHMgPSBv
cGVuKCIvcHJvYy8lZC9zdGF0IiAlIHBpZCwgInIiKS5yZWFkbGluZSgpLnJzdHJpcCgpLnNwbGl0
KCkKICAgICMgMTM6IHV0aW1lLCAxNDogc3RpbWUsIDE1OiBjdXRpbWUsIDE2OiBjc3RpbWUKICAg
IHJldHVybiBzdW0oaW50KGZpZWxkKSBmb3IgZmllbGQgaW4gZmllbGRzWzEzOjE2XSkKfQoKCnB5
dGhvbiBiYXNlX2dldF9tZXRhZGF0YV9naXRfcmV2aXNpb24gKCkgewpkZWYgYmFzZV9nZXRfbWV0
YWRhdGFfZ2l0X3JldmlzaW9uKHBhdGgsIGQpOgogICAgZiA9IG9zLnBvcGVuKCJjZCAlczsgZ2l0
IGxvZyAtbiAxIC0tcHJldHR5PW9uZWxpbmUgLS0gMj4mMSIgJSBwYXRoKQogICAgZGF0YSA9IGYu
cmVhZCgpCiAgICBpZiBmLmNsb3NlKCkgaXMgTm9uZToKICAgICAgICByZXYgPSBkYXRhLnNwbGl0
KCIgIilbMF0KICAgICAgICBpZiBsZW4ocmV2KSAhPSAwOgogICAgICAgICAgICByZXR1cm4gcmV2
CiAgICByZXR1cm4gIjx1bmtub3duPiIKfQoKCnB5dGhvbiByYWlzZV9zYW5pdHlfZXJyb3IgKCkg
ewpkZWYgcmFpc2Vfc2FuaXR5X2Vycm9yKG1zZywgZCwgbmV0d29ya19lcnJvcj1GYWxzZSk6CiAg
ICBpZiBkLmdldFZhcigiU0FOSVRZX1VTRV9FVkVOVFMiLCBUcnVlKSA9PSAiMSI6CiAgICAgICAg
dHJ5OgogICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LlNhbml0eUNoZWNrRmFpbGVk
KG1zZywgbmV0d29ya19lcnJvciksIGQpCiAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAg
ICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5TYW5pdHlDaGVja0ZhaWxlZChtc2cpLCBkKQog
ICAgICAgIHJldHVybgoKICAgIGJiLmZhdGFsKCIiIiBPRS1jb3JlJ3MgY29uZmlnIHNhbml0eSBj
aGVja2VyIGRldGVjdGVkIGEgcG90ZW50aWFsIG1pc2NvbmZpZ3VyYXRpb24uCiAgICBFaXRoZXIg
Zml4IHRoZSBjYXVzZSBvZiB0aGlzIGVycm9yIG9yIGF0IHlvdXIgb3duIHJpc2sgZGlzYWJsZSB0
aGUgY2hlY2tlciAoc2VlIHNhbml0eS5jb25mKS4KICAgIEZvbGxvd2luZyBpcyB0aGUgbGlzdCBv
ZiBwb3RlbnRpYWwgcHJvYmxlbXMgLyBhZHZpc29yaWVzOgoKICAgICVzIiIiICUgbXNnKQp9CgoK
cHl0aG9uIGJhc2VfcmVhZF9maWxlICgpIHsKZGVmIGJhc2VfcmVhZF9maWxlKGZpbGVuYW1lKToK
ICAgIHJldHVybiBvZS51dGlscy5yZWFkX2ZpbGUoZmlsZW5hbWUpCn0KCgpweXRob24gcGFja2Fn
ZV9kb19zcGxpdF9sb2NhbGVzICgpIHsKICAgIGlmIChkLmdldFZhcignUEFDS0FHRV9OT19MT0NB
TEUnLCBUcnVlKSA9PSAnMScpOgogICAgICAgIGJiLmRlYnVnKDEsICJwYWNrYWdlIHJlcXVlc3Rl
ZCBub3Qgc3BsaXR0aW5nIGxvY2FsZXMiKQogICAgICAgIHJldHVybgoKICAgIHBhY2thZ2VzID0g
KGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpCgogICAgZGF0YWRpciA9
IGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSkKICAgIGlmIG5vdCBkYXRhZGlyOgogICAgICAgIGJi
Lm5vdGUoImRhdGFkaXIgbm90IGRlZmluZWQiKQogICAgICAgIHJldHVybgoKICAgIGR2YXIgPSBk
LmdldFZhcignUEtHRCcsIFRydWUpCiAgICBwbiA9IGQuZ2V0VmFyKCdMT0NBTEVCQVNFUE4nLCBU
cnVlKQoKICAgIGlmIHBuICsgJy1sb2NhbGUnIGluIHBhY2thZ2VzOgogICAgICAgIHBhY2thZ2Vz
LnJlbW92ZShwbiArICctbG9jYWxlJykKCiAgICBsb2NhbGVkaXIgPSBvcy5wYXRoLmpvaW4oZHZh
ciArIGRhdGFkaXIsICdsb2NhbGUnKQoKICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGxvY2FsZWRp
cik6CiAgICAgICAgYmIuZGVidWcoMSwgIk5vIGxvY2FsZSBmaWxlcyBpbiB0aGlzIHBhY2thZ2Ui
KQogICAgICAgIHJldHVybgoKICAgIGxvY2FsZXMgPSBvcy5saXN0ZGlyKGxvY2FsZWRpcikKCiAg
ICBzdW1tYXJ5ID0gZC5nZXRWYXIoJ1NVTU1BUlknLCBUcnVlKSBvciBwbgogICAgZGVzY3JpcHRp
b24gPSBkLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKSBvciAiIgogICAgbG9jYWxlX3NlY3Rp
b24gPSBkLmdldFZhcignTE9DQUxFX1NFQ1RJT04nLCBUcnVlKQogICAgbWxwcmVmaXggPSBkLmdl
dFZhcignTUxQUkVGSVgnLCBUcnVlKSBvciAiIgogICAgcG5kZXAgPSBiYXNlX2NvbnRhaW5zKCdQ
QUNLQUdFUycsIHBuLCAnJXMgJyAlIHBuLCAnJywgZCkKICAgIGZvciBsIGluIHNvcnRlZChsb2Nh
bGVzKToKICAgICAgICBsbiA9IGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKGwpCiAgICAgICAgcGtn
ID0gcG4gKyAnLWxvY2FsZS0nICsgbG4KICAgICAgICBwYWNrYWdlcy5hcHBlbmQocGtnKQogICAg
ICAgIGQuc2V0VmFyKCdGSUxFU18nICsgcGtnLCBvcy5wYXRoLmpvaW4oZGF0YWRpciwgJ2xvY2Fs
ZScsIGwpKQogICAgICAgIGQuc2V0VmFyKCdSREVQRU5EU18nICsgcGtnLCAnJXMlc3ZpcnR1YWwt
bG9jYWxlLSVzJyAlIChwbmRlcCwgbWxwcmVmaXgsIGxuKSkKICAgICAgICBkLnNldFZhcignUlBS
T1ZJREVTXycgKyBwa2csICclcy1sb2NhbGUgJXMlcy10cmFuc2xhdGlvbicgJSAocG4sIG1scHJl
Zml4LCBsbikpCiAgICAgICAgZC5zZXRWYXIoJ1NVTU1BUllfJyArIHBrZywgJyVzIC0gJXMgdHJh
bnNsYXRpb25zJyAlIChzdW1tYXJ5LCBsKSkKICAgICAgICBkLnNldFZhcignREVTQ1JJUFRJT05f
JyArIHBrZywgJyVzICBUaGlzIHBhY2thZ2UgY29udGFpbnMgbGFuZ3VhZ2UgdHJhbnNsYXRpb24g
ZmlsZXMgZm9yIHRoZSAlcyBsb2NhbGUuJyAlIChkZXNjcmlwdGlvbiwgbCkpCiAgICAgICAgaWYg
bG9jYWxlX3NlY3Rpb246CiAgICAgICAgICAgIGQuc2V0VmFyKCdTRUNUSU9OXycgKyBwa2csIGxv
Y2FsZV9zZWN0aW9uKQoKICAgIGQuc2V0VmFyKCdQQUNLQUdFUycsICcgJy5qb2luKHBhY2thZ2Vz
KSkKCiAgICAjIERpc2FibGVkIGJ5IFJQIDE4LzA2LzA3CiAgICAjIFdpbGRjYXJkcyBhcmVuJ3Qg
c3VwcG9ydGVkIGluIGRlYmlhbgogICAgIyBUaGV5IGJyZWFrIHdpdGggaXBrZyBzaW5jZSBnbGli
Yy1sb2NhbGUqIHdpbGwgbWVhbiB0aGF0CiAgICAjIGdsaWJjLWxvY2FsZWRhdGEtdHJhbnNsaXQq
IHdvbid0IGluc3RhbGwgYXMgYSBkZXBlbmRlbmN5CiAgICAjIGZvciBzb21lIG90aGVyIHBhY2th
Z2Ugd2hpY2ggYnJlYWtzIG1ldGEtdG9vbGNoYWluCiAgICAjIFByb2JhYmx5IGJyZWFrcyBzaW5j
ZSB2aXJ0dWFsLWxvY2FsZS0gaXNuJ3QgcHJvdmlkZWQgYW55d2hlcmUKICAgICNyZGVwID0gKGQu
Z2V0VmFyKCdSREVQRU5EU18lcycgJSBwbiwgVHJ1ZSkgb3IgZC5nZXRWYXIoJ1JERVBFTkRTJywg
VHJ1ZSkgb3IgIiIpLnNwbGl0KCkKICAgICNyZGVwLmFwcGVuZCgnJXMtbG9jYWxlKicgJSBwbikK
ICAgICNkLnNldFZhcignUkRFUEVORFNfJXMnICUgcG4sICcgJy5qb2luKHJkZXApKQp9CgoKcHl0
aG9uIGJhc2VfYm90aF9jb250YWluICgpIHsKZGVmIGJhc2VfYm90aF9jb250YWluKHZhcmlhYmxl
MSwgdmFyaWFibGUyLCBjaGVja3ZhbHVlLCBkKToKICAgIHJldHVybiBvZS51dGlscy5ib3RoX2Nv
bnRhaW4odmFyaWFibGUxLCB2YXJpYWJsZTIsIGNoZWNrdmFsdWUsIGQpCn0KCgpweXRob24gZGVi
aWFuX3BhY2thZ2VfbmFtZV9ob29rICgpIHsKICAgIGltcG9ydCBnbG9iLCBjb3B5LCBzdGF0LCBl
cnJubywgcmUKCiAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQogICAgcGFj
a2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQogICAgYmluX3JlID0gcmUuY29tcGls
ZSgiLiovcz8iICsgb3MucGF0aC5iYXNlbmFtZShkLmdldFZhcigiYmluZGlyIiwgVHJ1ZSkpICsg
IiQiKQogICAgbGliX3JlID0gcmUuY29tcGlsZSgiLiovIiArIG9zLnBhdGguYmFzZW5hbWUoZC5n
ZXRWYXIoImxpYmRpciIsIFRydWUpKSArICIkIikKICAgIHNvX3JlID0gcmUuY29tcGlsZSgibGli
LipcLnNvIikKCiAgICBkZWYgc29jcnVuY2gocyk6CiAgICAgICAgcyA9IHMubG93ZXIoKS5yZXBs
YWNlKCdfJywgJy0nKQogICAgICAgIG0gPSByZS5tYXRjaCgiXiguKikoLilcLnNvXC4oLiopJCIs
IHMpCiAgICAgICAgaWYgbSBpcyBOb25lOgogICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAg
IGlmIG0uZ3JvdXAoMikgaW4gJzAxMjM0NTY3ODknOgogICAgICAgICAgICBiaW4gPSAnJXMlcy0l
cycgJSAobS5ncm91cCgxKSwgbS5ncm91cCgyKSwgbS5ncm91cCgzKSkKICAgICAgICBlbHNlOgog
ICAgICAgICAgICBiaW4gPSBtLmdyb3VwKDEpICsgbS5ncm91cCgyKSArIG0uZ3JvdXAoMykKICAg
ICAgICBkZXYgPSBtLmdyb3VwKDEpICsgbS5ncm91cCgyKQogICAgICAgIHJldHVybiAoYmluLCBk
ZXYpCgogICAgZGVmIGlzZXhlYyhwYXRoKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIHMgPSBv
cy5zdGF0KHBhdGgpCiAgICAgICAgZXhjZXB0IChvcy5lcnJvciwgQXR0cmlidXRlRXJyb3IpOgog
ICAgICAgICAgICByZXR1cm4gMAogICAgICAgIHJldHVybiAoc1tzdGF0LlNUX01PREVdICYgc3Rh
dC5TX0lFWEVDKQoKICAgIGRlZiBhdXRvX2xpYm5hbWUocGFja2FnZXMsIG9yaWdfcGtnKToKICAg
ICAgICBzb25hbWVzID0gW10KICAgICAgICBoYXNfYmlucyA9IDAKICAgICAgICBoYXNfbGlicyA9
IDAKICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHBrZ2Rlc3QsIG9yaWdfcGtnKQogICAg
ICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBrZ19kaXIpOgogICAgICAgICAg
ICBpZiBiaW5fcmUubWF0Y2gocm9vdCkgYW5kIGZpbGVzOgogICAgICAgICAgICAgICAgaGFzX2Jp
bnMgPSAxCiAgICAgICAgICAgIGlmIGxpYl9yZS5tYXRjaChyb290KSBhbmQgZmlsZXM6CiAgICAg
ICAgICAgICAgICBoYXNfbGlicyA9IDEKICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgog
ICAgICAgICAgICAgICAgICAgIGlmIHNvX3JlLm1hdGNoKGYpOgogICAgICAgICAgICAgICAgICAg
ICAgICBmcCA9IG9zLnBhdGguam9pbihyb290LCBmKQogICAgICAgICAgICAgICAgICAgICAgICBj
bWQgPSAoZC5nZXRWYXIoJ1RBUkdFVF9QUkVGSVgnLCBUcnVlKSBvciAiIikgKyAib2JqZHVtcCAt
cCAiICsgZnAgKyAiIDI+L2Rldi9udWxsIgogICAgICAgICAgICAgICAgICAgICAgICBmZCA9IG9z
LnBvcGVuKGNtZCkKICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBmZC5yZWFkbGluZXMo
KQogICAgICAgICAgICAgICAgICAgICAgICBmZC5jbG9zZSgpCiAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciBsIGluIGxpbmVzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IHJlLm1h
dGNoKCJccytTT05BTUVccysoW15cc10qKSIsIGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiBtIGFuZCBub3QgbS5ncm91cCgxKSBpbiBzb25hbWVzOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNvbmFtZXMuYXBwZW5kKG0uZ3JvdXAoMSkpCgogICAgICAgIGJiLmRlYnVn
KDEsICdMSUJOQU1FUzogcGtnICVzIGxpYnMgJWQgYmlucyAlZCBzb25hbWVzICVzJyAlIChvcmln
X3BrZywgaGFzX2xpYnMsIGhhc19iaW5zLCBzb25hbWVzKSkKICAgICAgICBzb25hbWUgPSBOb25l
CiAgICAgICAgaWYgbGVuKHNvbmFtZXMpID09IDE6CiAgICAgICAgICAgIHNvbmFtZSA9IHNvbmFt
ZXNbMF0KICAgICAgICBlbGlmIGxlbihzb25hbWVzKSA+IDE6CiAgICAgICAgICAgIGxlYWQgPSBk
LmdldFZhcignTEVBRF9TT05BTUUnLCBUcnVlKQogICAgICAgICAgICBpZiBsZWFkOgogICAgICAg
ICAgICAgICAgciA9IHJlLmNvbXBpbGUobGVhZCkKICAgICAgICAgICAgICAgIGZpbHRlcmVkID0g
W10KICAgICAgICAgICAgICAgIGZvciBzIGluIHNvbmFtZXM6CiAgICAgICAgICAgICAgICAgICAg
aWYgci5tYXRjaChzKToKICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWQuYXBwZW5kKHMp
CiAgICAgICAgICAgICAgICBpZiBsZW4oZmlsdGVyZWQpID09IDE6CiAgICAgICAgICAgICAgICAg
ICAgc29uYW1lID0gZmlsdGVyZWRbMF0KICAgICAgICAgICAgICAgIGVsaWYgbGVuKGZpbHRlcmVk
KSA+IDE6CiAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiTXVsdGlwbGUgbWF0Y2hlcyAoJXMp
IGZvciBMRUFEX1NPTkFNRSAnJXMnIiAlICgiLCAiLmpvaW4oZmlsdGVyZWQpLCBsZWFkKSkKICAg
ICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiTXVsdGlwbGUg
bGlicmFyaWVzICglcykgZm91bmQsIGJ1dCBMRUFEX1NPTkFNRSAnJXMnIGRvZXNuJ3QgbWF0Y2gg
YW55IG9mIHRoZW0iICUgKCIsICIuam9pbihzb25hbWVzKSwgbGVhZCkpCiAgICAgICAgICAgIGVs
c2U6CiAgICAgICAgICAgICAgICBiYi5ub3RlKCJNdWx0aXBsZSBsaWJyYXJpZXMgKCVzKSBmb3Vu
ZCBhbmQgTEVBRF9TT05BTUUgbm90IGRlZmluZWQiICUgIiwgIi5qb2luKHNvbmFtZXMpKQoKICAg
ICAgICBpZiBoYXNfbGlicyBhbmQgbm90IGhhc19iaW5zIGFuZCBzb25hbWU6CiAgICAgICAgICAg
IHNvbmFtZV9yZXN1bHQgPSBzb2NydW5jaChzb25hbWUpCiAgICAgICAgICAgIGlmIHNvbmFtZV9y
ZXN1bHQ6CiAgICAgICAgICAgICAgICAocGtnbmFtZSwgZGV2bmFtZSkgPSBzb25hbWVfcmVzdWx0
CiAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CiAgICAgICAgICAg
ICAgICAgICAgaWYgKGQuZ2V0VmFyKCdQS0dfJyArIHBrZykgb3IgZC5nZXRWYXIoJ0RFQklBTl9O
T0FVVE9OQU1FXycgKyBwa2cpKToKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAg
ICAgICAgICAgICAgICAgICBkZWJpYW5fcG4gPSBkLmdldFZhcignREVCSUFOTkFNRV8nICsgcGtn
KQogICAgICAgICAgICAgICAgICAgIGlmIGRlYmlhbl9wbjoKICAgICAgICAgICAgICAgICAgICAg
ICAgbmV3cGtnID0gZGViaWFuX3BuCiAgICAgICAgICAgICAgICAgICAgZWxpZiBwa2cgPT0gb3Jp
Z19wa2c6CiAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BrZyA9IHBrZ25hbWUKICAgICAgICAg
ICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICBuZXdwa2cgPSBwa2cucmVw
bGFjZShvcmlnX3BrZywgZGV2bmFtZSwgMSkKICAgICAgICAgICAgICAgICAgICBtbHByZT1kLmdl
dFZhcignTUxQUkVGSVgnLCBUcnVlKQogICAgICAgICAgICAgICAgICAgIGlmIG1scHJlOgogICAg
ICAgICAgICAgICAgICAgICAgICBpZiBub3QgbmV3cGtnLmZpbmQobWxwcmUpID09IDA6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuZXdwa2cgPSBtbHByZSArIG5ld3BrZwogICAgICAgICAg
ICAgICAgICAgIGlmIG5ld3BrZyAhPSBwa2c6CiAgICAgICAgICAgICAgICAgICAgICAgIGQuc2V0
VmFyKCdQS0dfJyArIHBrZywgbmV3cGtnKQoKICAgICMgcmV2ZXJzZWQgc29ydCBpcyBuZWVkZWQg
d2hlbiBzb21lIHBhY2thZ2UgaXMgc3Vic3RyaW5nIG9mIGFub3RoZXIKICAgICMgaWUgaW4gbmN1
cnNlcyB3ZSBnZXQgd2l0aG91dCByZXZlcnNlIHNvcnQ6CiAgICAjIERFQlVHOiBMSUJOQU1FUzog
cGtnbmFtZSBsaWJ0aWM1IGRldm5hbWUgbGlidGljIHBrZyBuY3Vyc2VzLWxpYnRpYyBvcmlnX3Br
ZyBuY3Vyc2VzLWxpYnRpYyBkZWJpYW5fcG4gTm9uZSBuZXdwa2cgbGlidGljNQogICAgIyBhbmQg
bGF0ZXIKICAgICMgREVCVUc6IExJQk5BTUVTOiBwa2duYW1lIGxpYnRpYzUgZGV2bmFtZSBsaWJ0
aWMgcGtnIG5jdXJzZXMtbGlidGljdyBvcmlnX3BrZyBuY3Vyc2VzLWxpYnRpYyBkZWJpYW5fcG4g
Tm9uZSBuZXdwa2cgbGlidGljdwogICAgIyBzbyB3ZSBuZWVkIHRvIGhhbmRsZSBuY3Vyc2VzLWxp
YnRpY3ctPmxpYnRpY3c1IGJlZm9yZSBuY3Vyc2VzLWxpYnRpYy0+bGlidGljNQogICAgZm9yIHBr
ZyBpbiBzb3J0ZWQoKGQuZ2V0VmFyKCdBVVRPX0xJQk5BTUVfUEtHUycsIFRydWUpIG9yICIiKS5z
cGxpdCgpLCByZXZlcnNlPVRydWUpOgogICAgICAgIGF1dG9fbGlibmFtZShwYWNrYWdlcywgcGtn
KQp9CgoKcHl0aG9uIHBhY2thZ2VfcnBtX2luc3RhbGwgKCkgewogICAgYmIuZmF0YWwoInBhY2th
Z2VfcnBtX2luc3RhbGwgbm90IGltcGxlbWVudGVkISIpCn0KCgpweXRob24gY2hlY2tfdG9vbGNo
YWluX3R1bmUgKCkgewpkZWYgY2hlY2tfdG9vbGNoYWluX3R1bmUoZGF0YSwgdHVuZSwgbXVsdGls
aWIpOgogICAgdHVuZV9lcnJvcnMgPSBbXQogICAgaWYgbm90IHR1bmU6CiAgICAgICAgcmV0dXJu
ICJObyB0dW5pbmcgZm91bmQgZm9yICVzIG11bHRpbGliLiIgJSBtdWx0aWxpYgogICAgYmIuZGVi
dWcoMiwgIlNhbml0eS1jaGVja2luZyB0dW5pbmcgJyVzJyAoJXMpIGZlYXR1cmVzOiIgJSAodHVu
ZSwgbXVsdGlsaWIpKQogICAgZmVhdHVyZXMgPSAoZGF0YS5nZXRWYXIoIlRVTkVfRkVBVFVSRVNf
dHVuZS0lcyIgJSB0dW5lLCBUcnVlKSBvciAiIikuc3BsaXQoKQogICAgaWYgbm90IGZlYXR1cmVz
OgogICAgICAgIHJldHVybiAiVHVuaW5nICclcycgaGFzIG5vIGRlZmluZWQgZmVhdHVyZXMsIGFu
ZCBjYW5ub3QgYmUgdXNlZC4iICUgdHVuZQogICAgdmFsaWRfdHVuZXMgPSBkYXRhLmdldFZhckZs
YWdzKCdUVU5FVkFMSUQnKSBvciB7fQogICAgY29uZmxpY3RzID0gZGF0YS5nZXRWYXJGbGFncygn
VFVORUNPTkZMSUNUUycpIG9yIHt9CiAgICAjIFtkb2NdIGlzIHRoZSBkb2N1bWVudGF0aW9uIGZv
ciB0aGUgdmFyaWFibGUsIG5vdCBhIHJlYWwgZmVhdHVyZQogICAgaWYgJ2RvYycgaW4gdmFsaWRf
dHVuZXM6CiAgICAgICAgZGVsIHZhbGlkX3R1bmVzWydkb2MnXQogICAgaWYgJ2RvYycgaW4gY29u
ZmxpY3RzOgogICAgICAgIGRlbCBjb25mbGljdHNbJ2RvYyddCiAgICBmb3IgZmVhdHVyZSBpbiBm
ZWF0dXJlczoKICAgICAgICBpZiBmZWF0dXJlIGluIGNvbmZsaWN0czoKICAgICAgICAgICAgZm9y
IGNvbmZsaWN0IGluIGNvbmZsaWN0c1tmZWF0dXJlXS5zcGxpdCgpOgogICAgICAgICAgICAgICAg
aWYgY29uZmxpY3QgaW4gZmVhdHVyZXM6CiAgICAgICAgICAgICAgICAgICAgdHVuZV9lcnJvcnMu
YXBwZW5kKCJGZWF0dXJlICclcycgY29uZmxpY3RzIHdpdGggJyVzJy4iICUKICAgICAgICAgICAg
ICAgICAgICAgICAgKGZlYXR1cmUsIGNvbmZsaWN0KSkKICAgICAgICBpZiBmZWF0dXJlIGluIHZh
bGlkX3R1bmVzOgogICAgICAgICAgICBiYi5kZWJ1ZygyLCAiICAlczogJXMiICUgKGZlYXR1cmUs
IHZhbGlkX3R1bmVzW2ZlYXR1cmVdKSkKICAgICAgICBlbHNlOgogICAgICAgICAgICB0dW5lX2Vy
cm9ycy5hcHBlbmQoIkZlYXR1cmUgJyVzJyBpcyBub3QgZGVmaW5lZC4iICUgZmVhdHVyZSkKICAg
IHdoaXRlbGlzdCA9IGRhdGEuZ2V0VmFyKCJUVU5FQUJJX1dISVRFTElTVCIsIFRydWUpIG9yICcn
CiAgICBvdmVycmlkZSA9IGRhdGEuZ2V0VmFyKCJUVU5FQUJJX09WRVJSSURFIiwgVHJ1ZSkgb3Ig
JycKICAgIGlmIHdoaXRlbGlzdDoKICAgICAgICB0dW5lYWJpID0gZGF0YS5nZXRWYXIoIlRVTkVB
QklfdHVuZS0lcyIgJSB0dW5lLCBUcnVlKSBvciAnJwogICAgICAgIGlmIG5vdCB0dW5lYWJpOgog
ICAgICAgICAgICB0dW5lYWJpID0gdHVuZQogICAgICAgIGlmIFRydWUgbm90IGluIFt4IGluIHdo
aXRlbGlzdC5zcGxpdCgpIGZvciB4IGluIHR1bmVhYmkuc3BsaXQoKV06CiAgICAgICAgICAgIHR1
bmVfZXJyb3JzLmFwcGVuZCgiVHVuaW5nICclcycgKCVzKSBjYW5ub3QgYmUgdXNlZCB3aXRoIGFu
eSBzdXBwb3J0ZWQgdHVuaW5nL0FCSS4iICUKICAgICAgICAgICAgICAgICh0dW5lLCB0dW5lYWJp
KSkKICAgIGlmIHR1bmVfZXJyb3JzOgogICAgICAgIHJldHVybiAiVHVuaW5nICclcycgaGFzIHRo
ZSBmb2xsb3dpbmcgZXJyb3JzOlxuIiArICdcbicuam9pbih0dW5lX2Vycm9ycykKfQoKCnB5dGhv
biBvZV9maWx0ZXIgKCkgewpkZWYgb2VfZmlsdGVyKGYsIHN0ciwgZCk6CiAgICByZXR1cm4gb2Uu
dXRpbHMuc3RyX2ZpbHRlcihmLCBzdHIsIGQpCn0KCgpweXRob24gY2hlY2tfcHNldWRvX3dyYXBw
ZXIgKCkgewpkZWYgY2hlY2tfcHNldWRvX3dyYXBwZXIoKToKICAgIGltcG9ydCBzeXMKICAgIGlm
IG5vdCBzeXMuYXJndlswXS5lbmRzd2l0aCgnL2JpdGJha2UnKToKICAgICAgICByZXR1cm4gIiIK
CiAgICBpbXBvcnQgc3VicHJvY2VzcyBhcyBzdWIKICAgICMgQ2hlY2sgaWYgYml0YmFrZSB3cmFw
cGVyIGlzIGJlaW5nIHVzZWQKICAgIHBzZXVkb19idWlsZCA9IG9zLmVudmlyb24uZ2V0KCAnUFNF
VURPX0JVSUxEJyApCiAgICBpZiBub3QgcHNldWRvX2J1aWxkOgogICAgICAgIGJiLndhcm4oIkJp
dGJha2UgaGFzIG5vdCBiZWVuIHJ1biB1c2luZyB0aGUgYml0YmFrZSB3cmFwcGVyIChzY3JpcHRz
L2JpdGJha2UpOyB0aGlzIGlzIGxpa2VseSBiZWNhdXNlIHlvdXIgUEFUSCBoYXMgYmVlbiBhbHRl
cmVkIGZyb20gdGhhdCBub3JtYWxseSBzZXQgdXAgYnkgdGhlIG9lLWluaXQtYnVpbGQtZW52IHNj
cmlwdC4gTm90IHVzaW5nIHRoZSB3cmFwcGVyIG1heSByZXN1bHQgaW4gZmFpbHVyZXMgZHVyaW5n
IHBhY2thZ2UgaW5zdGFsbGF0aW9uLCBzbyBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5
b3Ugc2V0IHlvdXIgUEFUSCBiYWNrIHNvIHRoYXQgdGhlIHdyYXBwZXIgc2NyaXB0IGlzIGJlaW5n
IGV4ZWN1dGVkLiIpCgogICAgaWYgKG5vdCBwc2V1ZG9fYnVpbGQpIG9yIHBzZXVkb19idWlsZCA9
PSAnMic6CiAgICAgICAgIyBwc2V1ZG8gb3VnaHQgdG8gYmUgd29ya2luZywgbGV0J3Mgc2VlIGlm
IGl0IGlzLi4uCiAgICAgICAgcCA9IHN1Yi5Qb3BlbihbJ3NoJywgJy1jJywgJ1BTRVVET19ESVNB
QkxFRD0wIGlkIC11J10sc3Rkb3V0PXN1Yi5QSVBFLHN0ZGVycj1zdWIuUElQRSkKICAgICAgICBv
dXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQogICAgICAgIGlmIG91dC5yc3RyaXAoKSAhPSAnMCc6
CiAgICAgICAgICAgIG1zZyA9ICJQc2V1ZG8gaXMgbm90IGZ1bmN0aW9uaW5nIGNvcnJlY3RseSwg
d2hpY2ggd2lsbCBjYXVzZSBmYWlsdXJlcyBkdXJpbmcgcGFja2FnZSBpbnN0YWxsYXRpb24uIFBs
ZWFzZSBjaGVjayB5b3VyIGNvbmZpZ3VyYXRpb24uIgogICAgICAgICAgICBpZiBwc2V1ZG9fYnVp
bGQgPT0gJzInOgogICAgICAgICAgICAgICAgcmV0dXJuIG1zZwogICAgICAgICAgICBlbHNlOgog
ICAgICAgICAgICAgICAgYmIud2Fybihtc2cpCiAgICByZXR1cm4gIiIKfQoKCnB5dGhvbiBkb19x
YV9zdGFnaW5nICgpIHsKICAgIGJiLm5vdGUoIlFBIGNoZWNraW5nIHN0YWdpbmciKQoKICAgIGlm
IG5vdCBwYWNrYWdlX3FhX2NoZWNrX3N0YWdlZChkLmV4cGFuZCgnL2hvbWUvbWlzaGFsL3lvY3Rv
L3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3dvcmsvY29yZTItcG9reS1saW51eC9iYmxh
eWVycy0xLjAtcjAvc3lzcm9vdC1kZXN0ZGlyLy8vaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5u
eS04LjAvYnVpbGQtZnJpMi90bXAvc3lzcm9vdHMvZnJpMi1ub2VtZ2QvdXNyL2xpYicpLCBkKToK
ICAgICAgICBiYi5mYXRhbCgiUUEgc3RhZ2luZyB3YXMgYnJva2VuIGJ5IHRoZSBwYWNrYWdlIGJ1
aWx0IGFib3ZlIikKfQoKCnB5dGhvbiBleHRyYV9wYXRoX2VsZW1lbnRzICgpIHsKZGVmIGV4dHJh
X3BhdGhfZWxlbWVudHMoZCk6CiAgICBwYXRoID0gIiIKICAgIGVsZW1lbnRzID0gKGQuZ2V0VmFy
KCdFWFRSQU5BVElWRVBBVEgnLCBUcnVlKSBvciAiIikuc3BsaXQoKQogICAgZm9yIGUgaW4gZWxl
bWVudHM6CiAgICAgICAgcGF0aCA9IHBhdGggKyAiL2hvbWUvbWlzaGFsL3lvY3RvL3Bva3ktZGFu
bnktOC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvYmluLyIgKyBl
ICsgIjoiCiAgICByZXR1cm4gcGF0aAp9CgoKcHl0aG9uIHNzdGF0ZV9hZGQgKCkgewpkZWYgc3N0
YXRlX2FkZChzcywgc291cmNlLCBkZXN0LCBkKToKICAgIHNyY2Jhc2UgPSBvcy5wYXRoLmJhc2Vu
YW1lKHNvdXJjZSkKICAgIHNzWydkaXJzJ10uYXBwZW5kKFtzcmNiYXNlLCBzb3VyY2UsIGRlc3Rd
KQogICAgcmV0dXJuIHNzCn0KCgpweXRob24gZG9fcWFfY29uZmlndXJlICgpIHsKICAgIGltcG9y
dCBzdWJwcm9jZXNzCgogICAgY29uZmlncyA9IFtdCiAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dP
UktESVInLCBUcnVlKQogICAgYmIubm90ZSgiQ2hlY2tpbmcgYXV0b3Rvb2xzIGVudmlyb25tZW50
IGZvciBjb21tb24gbWlzY29uZmlndXJhdGlvbiIpCiAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMg
aW4gb3Mud2Fsayh3b3JrZGlyKToKICAgICAgICBzdGF0ZW1lbnQgPSAiZ3JlcCAtZSAnQ1JPU1Mg
Q09NUElMRSBCYWRuZXNzOicgLWUgJ2lzIHVuc2FmZSBmb3IgY3Jvc3MtY29tcGlsYXRpb24nICVz
ID4gL2Rldi9udWxsIiAlIFwKICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ocm9vdCwi
Y29uZmlnLmxvZyIpCiAgICAgICAgaWYgImNvbmZpZy5sb2ciIGluIGZpbGVzOgogICAgICAgICAg
ICBpZiBzdWJwcm9jZXNzLmNhbGwoc3RhdGVtZW50LCBzaGVsbD1UcnVlKSA9PSAwOgogICAgICAg
ICAgICAgICAgYmIuZmF0YWwoIiIiVGhpcyBhdXRvY29uZiBsb2cgaW5kaWNhdGVzIGVycm9ycywg
aXQgbG9va2VkIGF0IGhvc3QgaW5jbHVkZSBhbmQvb3IgbGlicmFyeSBwYXRocyB3aGlsZSBkZXRl
cm1pbmluZyBzeXN0ZW0gY2FwYWJpbGl0aWVzLgpSZXJ1biBjb25maWd1cmUgdGFzayBhZnRlciBm
aXhpbmcgdGhpcy4gVGhlIHBhdGggd2FzICclcyciIiIgJSByb290KQoKICAgICAgICBpZiAiY29u
ZmlndXJlLmFjIiBpbiBmaWxlczoKICAgICAgICAgICAgY29uZmlncy5hcHBlbmQob3MucGF0aC5q
b2luKHJvb3QsImNvbmZpZ3VyZS5hYyIpKQogICAgICAgIGlmICJjb25maWd1cmUuaW4iIGluIGZp
bGVzOgogICAgICAgICAgICBjb25maWdzLmFwcGVuZChvcy5wYXRoLmpvaW4ocm9vdCwgImNvbmZp
Z3VyZS5pbiIpKQoKICAgIGNuZiA9IGQuZ2V0VmFyKCdFWFRSQV9PRUNPTkYnLCBUcnVlKSBvciAi
IgogICAgaWYgImdldHRleHQiIG5vdCBpbiBkLmdldFZhcignUCcsIFRydWUpIGFuZCAiZ2NjLXJ1
bnRpbWUiIG5vdCBpbiBkLmdldFZhcignUCcsIFRydWUpIGFuZCAiLS1kaXNhYmxlLW5scyIgbm90
IGluIGNuZjoKICAgICAgICBtbCA9IGQuZ2V0VmFyKCJNTFBSRUZJWCIsIFRydWUpIG9yICIiCiAg
ICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgb3IgYmIuZGF0YS5p
bmhlcml0c19jbGFzcygnY3Jvc3MnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9z
c3NkaycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGQpOgogICAg
ICAgICAgICBndCA9ICJnZXR0ZXh0LW5hdGl2ZSIKICAgICAgICBlbGlmIGJiLmRhdGEuaW5oZXJp
dHNfY2xhc3MoJ2Nyb3NzLWNhbmFkaWFuJywgZCk6CiAgICAgICAgICAgIGd0ID0gIm5hdGl2ZXNk
ay1nZXR0ZXh0IgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGd0ID0gInZpcnR1YWwvIiArIG1s
ICsgImdldHRleHQiCiAgICAgICAgZGVwcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhkLmdldFZh
cignREVQRU5EUycsIFRydWUpIG9yICIiKQogICAgICAgIGlmIGd0IG5vdCBpbiBkZXBzOgogICAg
ICAgICAgICBmb3IgY29uZmlnIGluIGNvbmZpZ3M6CiAgICAgICAgICAgICAgICBnbnUgPSAiZ3Jl
cCBcIl5bWzpzcGFjZTpdXSpBTV9HTlVfR0VUVEVYVFwiICVzID4vZGV2L251bGwiICUgY29uZmln
CiAgICAgICAgICAgICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoZ251LCBzaGVsbD1UcnVlKSA9PSAw
OgogICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKCIiIiVzIHJlcXVpcmVkIGJ1dCBub3QgaW4g
REVQRU5EUyBmb3IgZmlsZSAlcy4KTWlzc2luZyBpbmhlcml0IGdldHRleHQ/IiIiICUgKGd0LCBj
b25maWcpKQoKICAgIGlmIG5vdCBwYWNrYWdlX3FhX2NoZWNrX2xpY2Vuc2Uod29ya2RpciwgZCk6
CiAgICAgICAgYmIuZmF0YWwoIkxpY2Vuc2luZyBFcnJvcjogTElDX0ZJTEVTX0NIS1NVTSBkb2Vz
IG5vdCBtYXRjaCwgcGxlYXNlIGZpeCIpCn0KCgpweXRob24gcHJzZXJ2X2dldF9wcl9hdXRvICgp
IHsKZGVmIHByc2Vydl9nZXRfcHJfYXV0byhkKToKICAgIGltcG9ydCBvZS5wcnNlcnZpY2UKICAg
IGlmIGQuZ2V0VmFyKCdVU0VfUFJfU0VSVicsIFRydWUpICE9ICIxIjoKICAgICAgICBiYi53YXJu
KCJOb3QgdXNpbmcgbmV0d29yayBiYXNlZCBQUiBzZXJ2aWNlIikKICAgICAgICByZXR1cm4gTm9u
ZQoKICAgIHZlcnNpb24gPSBkLmdldFZhcigiUFJBVVRPSU5YIiwgVHJ1ZSkKICAgIHBrZ2FyY2gg
PSBkLmdldFZhcigiUEFDS0FHRV9BUkNIIiwgVHJ1ZSkKICAgIGNoZWNrc3VtID0gZC5nZXRWYXIo
IkJCX1RBU0tIQVNIIiwgVHJ1ZSkKCiAgICBpZiBkLmdldFZhcignUFJTRVJWX0xPQ0tET1dOJywg
VHJ1ZSk6CiAgICAgICAgYXV0b19yZXYgPSBkLmdldFZhcignUFJBVVRPXycgKyB2ZXJzaW9uICsg
J18nICsgcGtnYXJjaCwgVHJ1ZSkgb3IgZC5nZXRWYXIoJ1BSQVVUT18nICsgdmVyc2lvbiwgVHJ1
ZSkgb3IgTm9uZQogICAgZWxzZToKICAgICAgICBjb25uID0gZC5nZXRWYXIoIl9fUFJTRVJWX0NP
Tk4iLCBUcnVlKQogICAgICAgIGlmIGNvbm4gaXMgTm9uZToKICAgICAgICAgICAgY29ubiA9IG9l
LnByc2VydmljZS5wcnNlcnZfbWFrZV9jb25uKGQpCiAgICAgICAgICAgIGlmIGNvbm4gaXMgTm9u
ZToKICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgYXV0b19yZXYgPSBjb25uLmdl
dFBSKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKQoKICAgIHJldHVybiBhdXRvX3Jldn0KCgpw
eXRob24gYmFzZV9zZXRfZmlsZXNwYXRoICgpIHsKZGVmIGJhc2Vfc2V0X2ZpbGVzcGF0aChwYXRo
LCBkKToKICAgIGZpbGVzcGF0aCA9IFtdCiAgICBleHRyYXBhdGhzID0gKGQuZ2V0VmFyKCJGSUxF
U0VYVFJBUEFUSFMiLCBUcnVlKSBvciAiIikKICAgICMgRG9uJ3QgcHJlcGVuZCBlbXB0eSBzdHJp
bmdzIHRvIHRoZSBwYXRoIGxpc3QKICAgIGlmIGV4dHJhcGF0aHMgIT0gIiI6CiAgICAgICAgcGF0
aCA9IGV4dHJhcGF0aHMuc3BsaXQoIjoiKSArIHBhdGgKICAgICMgVGhlICI6IiBlbnN1cmVzIHdl
IGhhdmUgYW4gJ2VtcHR5JyBvdmVycmlkZQogICAgb3ZlcnJpZGVzID0gKGQuZ2V0VmFyKCJPVkVS
UklERVMiLCBUcnVlKSBvciAiIikgKyAiOiIKICAgIGZvciBwIGluIHBhdGg6CiAgICAgICAgaWYg
cCAhPSAiIjoKICAgICAgICAgICAgZm9yIG8gaW4gb3ZlcnJpZGVzLnNwbGl0KCI6Iik6CiAgICAg
ICAgICAgICAgICBmaWxlc3BhdGguYXBwZW5kKG9zLnBhdGguam9pbihwLCBvKSkKICAgIHJldHVy
biAiOiIuam9pbihmaWxlc3BhdGgpCn0KCgpweXRob24gbWFwcGluZ19yZW5hbWVfaG9vayAoKSB7
CmRlZiBtYXBwaW5nX3JlbmFtZV9ob29rKGQpOgogICAgIiIiCiAgICBSZXdyaXRlIHZhcmlhYmxl
cyB0byBhY2NvdW50IGZvciBwYWNrYWdlIHJlbmFtaW5nIGluIHRoaW5ncwogICAgbGlrZSBkZWJp
YW4uYmJjbGFzcyBvciBtYW51YWwgUEtHIHZhcmlhYmxlIG5hbWUgY2hhbmdlcwogICAgIiIiCiAg
ICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJSREVQRU5EUyIsIGQpCiAgICBydW50aW1lX21hcHBp
bmdfcmVuYW1lKCJSUkVDT01NRU5EUyIsIGQpCiAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJS
U1VHR0VTVFMiLCBkKQogICAgcnVudGltZV9tYXBwaW5nX3JlbmFtZSgiUlBST1ZJREVTIiwgZCkK
ICAgIHJ1bnRpbWVfbWFwcGluZ19yZW5hbWUoIlJSRVBMQUNFUyIsIGQpCiAgICBydW50aW1lX21h
cHBpbmdfcmVuYW1lKCJSQ09ORkxJQ1RTIiwgZCkKfQoKCnB5dGhvbiBjaGVja19zdXBwb3J0ZWRf
ZGlzdHJvICgpIHsKZGVmIGNoZWNrX3N1cHBvcnRlZF9kaXN0cm8oc2FuaXR5X2RhdGEpOgogICAg
dGVzdGVkX2Rpc3Ryb3MgPSBzYW5pdHlfZGF0YS5nZXRWYXIoJ1NBTklUWV9URVNURURfRElTVFJP
UycsIFRydWUpCiAgICBpZiBub3QgdGVzdGVkX2Rpc3Ryb3M6CiAgICAgICAgcmV0dXJuCgogICAg
aWYgb3MucGF0aC5leGlzdHMoIi9ldGMvcmVkaGF0LXJlbGVhc2UiKToKICAgICAgICBmID0gb3Bl
bigiL2V0Yy9yZWRoYXQtcmVsZWFzZSIsICJyIikKICAgICAgICB0cnk6CiAgICAgICAgICAgIGRp
c3RybyA9IGYucmVhZGxpbmUoKS5zdHJpcCgpCiAgICAgICAgZmluYWxseToKICAgICAgICAgICAg
Zi5jbG9zZSgpCiAgICBlbGlmIG9zLnBhdGguZXhpc3RzKCIvZXRjL1N1U0UtcmVsZWFzZSIpOgog
ICAgICAgIGltcG9ydCByZQogICAgICAgIGYgPSBvcGVuKCIvZXRjL1N1U0UtcmVsZWFzZSIsICJy
IikKICAgICAgICB0cnk6CiAgICAgICAgICAgIGRpc3RybyA9IGYucmVhZGxpbmUoKQogICAgICAg
ICAgICAjIFJlbW92ZSB0aGUgYXJjaGl0ZWN0dXJlIHN1ZmZpeCBlLmcuIChpNTg2KQogICAgICAg
ICAgICBkaXN0cm8gPSByZS5zdWIocicgXChbYS16QS1aMC05XC1fXSpcKSQnLCAnJywgZGlzdHJv
KS5zdHJpcCgpCiAgICAgICAgZmluYWxseToKICAgICAgICAgICAgZi5jbG9zZSgpCiAgICBlbHNl
OgogICAgICAgICMgVXNlIExTQiBtZXRob2QKICAgICAgICBpbXBvcnQgc3VicHJvY2VzcyBhcyBz
dWIKICAgICAgICB0cnk6CiAgICAgICAgICAgIHAgPSBzdWIuUG9wZW4oWydsc2JfcmVsZWFzZScs
Jy1kJywnLXMnXSxzdGRvdXQ9c3ViLlBJUEUsc3RkZXJyPXN1Yi5QSVBFKQogICAgICAgICAgICBv
dXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQogICAgICAgICAgICBkaXN0cm8gPSBvdXQucnN0cmlw
KCkKICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICBkaXN0cm8gPSBOb25lCgog
ICAgICAgIGlmIG5vdCBkaXN0cm86CiAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCIvZXRj
L2xzYi1yZWxlYXNlIik6CiAgICAgICAgICAgICAgICBmID0gb3BlbigiL2V0Yy9sc2ItcmVsZWFz
ZSIsICJyIikKICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICBmb3IgbGlu
ZSBpbiBmOgogICAgICAgICAgICAgICAgICAgICAgICBsbnMgPSBsaW5lLnNwbGl0KCc9JykKICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgbG5zWzBdID09ICJESVNUUklCX0RFU0NSSVBUSU9OIjoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RybyA9IGxuc1sxXS5zdHJpcCgnIlxuJykK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICBmaW5hbGx5
OgogICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQogICAgaWYgZGlzdHJvOgogICAgICAgIGlm
IGRpc3RybyBub3QgaW4gW3guc3RyaXAoKSBmb3IgeCBpbiB0ZXN0ZWRfZGlzdHJvcy5zcGxpdCgn
XFxuJyldOgogICAgICAgICAgICBiYi53YXJuKCdIb3N0IGRpc3RyaWJ1dGlvbiAiJXMiIGhhcyBu
b3QgYmVlbiB2YWxpZGF0ZWQgd2l0aCB0aGlzIHZlcnNpb24gb2YgdGhlIGJ1aWxkIHN5c3RlbTsg
eW91IG1heSBwb3NzaWJseSBleHBlcmllbmNlIHVuZXhwZWN0ZWQgZmFpbHVyZXMuIEl0IGlzIHJl
Y29tbWVuZGVkIHRoYXQgeW91IHVzZSBhIHRlc3RlZCBkaXN0cmlidXRpb24uJyAlIGRpc3RybykK
ICAgIGVsc2U6CiAgICAgICAgYmIud2FybignSG9zdCBkaXN0cmlidXRpb24gY291bGQgbm90IGJl
IGRldGVybWluZWQ7IHlvdSBtYXkgcG9zc2libHkgZXhwZXJpZW5jZSB1bmV4cGVjdGVkIGZhaWx1
cmVzLiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSB1c2UgYSB0ZXN0ZWQgZGlzdHJpYnV0aW9u
LicpCn0KCgpweXRob24gZW1pdF9wa2dkYXRhICgpIHsKICAgIGZyb20gZ2xvYiBpbXBvcnQgZ2xv
YgoKICAgIGRlZiB3cml0ZV9pZl9leGlzdHMoZiwgcGtnLCB2YXIpOgogICAgICAgIGRlZiBlbmNv
ZGUoc3RyKToKICAgICAgICAgICAgaW1wb3J0IGNvZGVjcwogICAgICAgICAgICBjID0gY29kZWNz
LmdldGVuY29kZXIoInN0cmluZ19lc2NhcGUiKQogICAgICAgICAgICByZXR1cm4gYyhzdHIpWzBd
CgogICAgICAgIHZhbCA9IGQuZ2V0VmFyKCclc18lcycgJSAodmFyLCBwa2cpLCBUcnVlKQogICAg
ICAgIGlmIHZhbDoKICAgICAgICAgICAgZi53cml0ZSgnJXNfJXM6ICVzXG4nICUgKHZhciwgcGtn
LCBlbmNvZGUodmFsKSkpCiAgICAgICAgICAgIHJldHVybgogICAgICAgIHZhbCA9IGQuZ2V0VmFy
KCclcycgJSAodmFyKSwgVHJ1ZSkKICAgICAgICBpZiB2YWw6CiAgICAgICAgICAgIGYud3JpdGUo
JyVzOiAlc1xuJyAlICh2YXIsIGVuY29kZSh2YWwpKSkKICAgICAgICByZXR1cm4KCiAgICBkZWYg
Z2V0X2RpcmVjdG9yeV9zaXplKGRpcik6CiAgICAgICAgaWYgb3MubGlzdGRpcihkaXIpOgogICAg
ICAgICAgICBzaXplID0gaW50KG9zLnBvcGVuKCdkdSAtc2sgJXMnICUgZGlyKS5yZWFkbGluZXMo
KVswXS5zcGxpdCgnXHQnKVswXSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBzaXplID0gMAog
ICAgICAgIHJldHVybiBzaXplCgogICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBU
cnVlKQogICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKICAgIHBrZ2RhdGFk
aXIgPSBkLmdldFZhcignUEtHREVTVFdPUksnLCBUcnVlKQoKICAgICMgVGFrZSBzaGFyZWQgbG9j
ayBzaW5jZSB3ZSdyZSBvbmx5IHJlYWRpbmcsIG5vdCB3cml0aW5nCiAgICBsZiA9IGJiLnV0aWxz
LmxvY2tmaWxlKGQuZXhwYW5kKCIvaG9tZS9taXNoYWwveW9jdG8vcG9reS1kYW5ueS04LjAvYnVp
bGQtZnJpMi90bXAvc3lzcm9vdHMvcGFja2FnZS1vdXRwdXQubG9jayIpLCBUcnVlKQoKICAgIGRh
dGFfZmlsZSA9IHBrZ2RhdGFkaXIgKyBkLmV4cGFuZCgiL2JibGF5ZXJzIiApCiAgICBmID0gb3Bl
bihkYXRhX2ZpbGUsICd3JykKICAgIGYud3JpdGUoIlBBQ0tBR0VTOiAlc1xuIiAlIHBhY2thZ2Vz
KQogICAgZi5jbG9zZSgpCgogICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkK
CiAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CiAgICAgICAgc3ViZGF0YV9maWxlID0g
cGtnZGF0YWRpciArICIvcnVudGltZS8lcyIgJSBwa2cKCiAgICAgICAgc2YgPSBvcGVuKHN1YmRh
dGFfZmlsZSwgJ3cnKQogICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUE4nKQogICAg
ICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUFYnKQogICAgICAgIHdyaXRlX2lmX2V4aXN0
cyhzZiwgcGtnLCAnUFInKQogICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUEtHVicp
CiAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdQS0dSJykKICAgICAgICB3cml0ZV9p
Zl9leGlzdHMoc2YsIHBrZywgJ0xJQ0VOU0UnKQogICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwg
cGtnLCAnREVTQ1JJUFRJT04nKQogICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnU1VN
TUFSWScpCiAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdSREVQRU5EUycpCiAgICAg
ICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdSUFJPVklERVMnKQogICAgICAgIHdyaXRlX2lm
X2V4aXN0cyhzZiwgcGtnLCAnUlJFQ09NTUVORFMnKQogICAgICAgIHdyaXRlX2lmX2V4aXN0cyhz
ZiwgcGtnLCAnUlNVR0dFU1RTJykKICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1JS
RVBMQUNFUycpCiAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdSQ09ORkxJQ1RTJykK
ICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1NFQ1RJT04nKQogICAgICAgIHdyaXRl
X2lmX2V4aXN0cyhzZiwgcGtnLCAnUEtHJykKICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBr
ZywgJ0FMTE9XX0VNUFRZJykKICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ0ZJTEVT
JykKICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ3BrZ19wb3N0aW5zdCcpCiAgICAg
ICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdwa2dfcG9zdHJtJykKICAgICAgICB3cml0ZV9p
Zl9leGlzdHMoc2YsIHBrZywgJ3BrZ19wcmVpbnN0JykKICAgICAgICB3cml0ZV9pZl9leGlzdHMo
c2YsIHBrZywgJ3BrZ19wcmVybScpCiAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdG
SUxFUlBST1ZJREVTRkxJU1QnKQogICAgICAgIGZvciBkZmlsZSBpbiAoZC5nZXRWYXIoJ0ZJTEVS
UFJPVklERVNGTElTVF8nICsgcGtnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKICAgICAgICAgICAg
d3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdGSUxFUlBST1ZJREVTXycgKyBkZmlsZSkKCiAgICAg
ICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdGSUxFUkRFUEVORFNGTElTVCcpCiAgICAgICAg
Zm9yIGRmaWxlIGluIChkLmdldFZhcignRklMRVJERVBFTkRTRkxJU1RfJyArIHBrZywgVHJ1ZSkg
b3IgIiIpLnNwbGl0KCk6CiAgICAgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnRklM
RVJERVBFTkRTXycgKyBkZmlsZSkKCiAgICAgICAgc2Yud3JpdGUoJyVzXyVzOiAlc1xuJyAlICgn
UEtHU0laRScsIHBrZywgZ2V0X2RpcmVjdG9yeV9zaXplKHBrZ2Rlc3QgKyAiLyVzIiAlIHBrZykp
KQogICAgICAgIHNmLmNsb3NlKCkKCiAgICAgICAgIyBTeW1saW5rcyBuZWVkZWQgZm9yIHJldmVy
c2UgbG9va3VwcyAoZnJvbSB0aGUgZmluYWwgcGFja2FnZSBuYW1lKQogICAgICAgIHBrZ3ZhbCA9
IGQuZ2V0VmFyKCdQS0dfJXMnICUgKHBrZyksIFRydWUpCiAgICAgICAgc3ViZGF0YV9zeW0gPSBw
a2dkYXRhZGlyICsgIi9ydW50aW1lLXJldmVyc2UvJXMiICUgcGtndmFsCiAgICAgICAgb2UucGF0
aC5zeW1saW5rKCIuLi9ydW50aW1lLyVzIiAlIHBrZywgc3ViZGF0YV9zeW0sIFRydWUpCgogICAg
ICAgIGFsbG93X2VtcHR5ID0gZC5nZXRWYXIoJ0FMTE9XX0VNUFRZXyVzJyAlIHBrZywgVHJ1ZSkK
ICAgICAgICBpZiBub3QgYWxsb3dfZW1wdHk6CiAgICAgICAgICAgIGFsbG93X2VtcHR5ID0gZC5n
ZXRWYXIoJ0FMTE9XX0VNUFRZJywgVHJ1ZSkKICAgICAgICByb290ID0gIiVzLyVzIiAlIChwa2dk
ZXN0LCBwa2cpCiAgICAgICAgb3MuY2hkaXIocm9vdCkKICAgICAgICBnID0gZ2xvYignKicpCiAg
ICAgICAgaWYgZyBvciBhbGxvd19lbXB0eSA9PSAiMSI6CiAgICAgICAgICAgIHBhY2thZ2VkZmls
ZSA9IHBrZ2RhdGFkaXIgKyAnL3J1bnRpbWUvJXMucGFja2FnZWQnICUgcGtnCiAgICAgICAgICAg
IGZpbGUocGFja2FnZWRmaWxlLCAndycpLmNsb3NlKCkKCiAgICBiYi51dGlscy51bmxvY2tmaWxl
KGxmKQp9CgoKcHl0aG9uIGRvX3BhdGNoICgpIHsKICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnYmFz
ZV9kb19wYXRjaCcsIGQpCn0KCgpweXRob24gYmFzZV9sZXNzX29yX2VxdWFsICgpIHsKZGVmIGJh
c2VfbGVzc19vcl9lcXVhbCh2YXJpYWJsZSwgY2hlY2t2YWx1ZSwgdHJ1ZXZhbHVlLCBmYWxzZXZh
bHVlLCBkKToKICAgIHJldHVybiBvZS51dGlscy5sZXNzX29yX2VxdWFsKHZhcmlhYmxlLCBjaGVj
a3ZhbHVlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpCn0KCgpweXRob24gZ2VuZXJhdGVfZ2l0
X2NvbmZpZyAoKSB7CmRlZiBnZW5lcmF0ZV9naXRfY29uZmlnKGUpOgogICAgaWYgZS5kYXRhLmdl
dFZhcignR0lUX0NPUkVfQ09ORklHJywgVHJ1ZSk6CiAgICAgICAgZ2l0Y29uZmlnX3BhdGggPSBl
LmRhdGEuZ2V0VmFyKCdHSVRfQ09ORklHJywgVHJ1ZSkKICAgICAgICBwcm94eV9jb21tYW5kID0g
IiAgICBnaXRQcm94eSA9ICVzXG4iICUgZS5kYXRhLmdldFZhcignT0VfR0lUX1BST1hZX0NPTU1B
TkQnLCBUcnVlKQoKICAgICAgICBiYi5ta2RpcmhpZXIoZS5kYXRhLmV4cGFuZCgiL2hvbWUvbWlz
aGFsL3lvY3RvL3Bva3ktZGFubnktOC4wL2J1aWxkLWZyaTIvdG1wL3N5c3Jvb3RzL3g4Nl82NC1s
aW51eC9ldGMiKSkKICAgICAgICBpZiAob3MucGF0aC5leGlzdHMoZ2l0Y29uZmlnX3BhdGgpKToK
ICAgICAgICAgICAgb3MucmVtb3ZlKGdpdGNvbmZpZ19wYXRoKQoKICAgICAgICBmID0gb3Blbihn
aXRjb25maWdfcGF0aCwgJ3cnKQogICAgICAgIGYud3JpdGUoIltjb3JlXVxuIikKICAgICAgICBp
Z25vcmVfaG9zdHMgPSBlLmRhdGEuZ2V0VmFyKCdHSVRfUFJPWFlfSUdOT1JFJywgVHJ1ZSkuc3Bs
aXQoKQogICAgICAgIGZvciBpZ25vcmVfaG9zdCBpbiBpZ25vcmVfaG9zdHM6CiAgICAgICAgICAg
IGYud3JpdGUoIiAgICBnaXRQcm94eSA9IG5vbmUgZm9yICVzXG4iICUgaWdub3JlX2hvc3QpCiAg
ICAgICAgZi53cml0ZShwcm94eV9jb21tYW5kKQogICAgICAgIGYuY2xvc2UKfQoK
</data>

          </attachment>
      

    </bug>

</bugzilla>